Merge branch 'master' of github.com:LCTT/TranslateProject

This commit is contained in:
Mike Tang 2016-07-07 10:04:23 +08:00
commit 42d5b837da
531 changed files with 51787 additions and 11751 deletions

4
LCTT翻译规范.md Normal file
View File

@ -0,0 +1,4 @@
# Linux中国翻译规范
1. 翻译中出现的专有名词可参见Dict.md中的翻译。
2. 英文人名,如无中文对应译名,一般不译。
2. 缩写词,一般不须翻译,可考虑旁注中文全名。

233
README.md
View File

@ -1,16 +1,16 @@
简介
-------------------------------
LCTT是“Linux中国”[http://linux.cn/](http://linux.cn/)的翻译组负责从国外优秀媒体翻译Linux相关的技术、资讯、杂文等内容。
LCTT 是“Linux中国”[https://linux.cn/](https://linux.cn/))的翻译组,负责从国外优秀媒体翻译 Linux 相关的技术、资讯、杂文等内容。
LCTT已经拥有近百余名活跃成员并欢迎更多的Linux志愿者加入我们的团队。
LCTT 已经拥有几百名活跃成员并欢迎更多的Linux志愿者加入我们的团队。
![logo](http://img.linux.net.cn/static/image/common/lctt_logo.png)
LCTT的组成
LCTT 的组成
-------------------------------
**选题**负责选择合适的内容并将原文转换为markdown格式提交到LCTT的[TranslateProject](https://github.com/LCTT/TranslateProject) 库中。
**选题**,负责选择合适的内容,并将原文转换为 markdown 格式,提交到 LCTT [TranslateProject](https://github.com/LCTT/TranslateProject) 库中。
**译者**,负责从选题中选择内容进行翻译。
@ -21,144 +21,149 @@ LCTT的组成
加入我们
-------------------------------
请首先加入翻译组的QQ群群号是198889102加群时请说明是“志愿者”。加入后记得修改您的群名片为您的github的ID。
请首先加入翻译组的 QQ 群号是198889102加群时请说明是“志愿者”。加入后记得修改您的群名片为您的 GitHub 的 ID。
加入的成员,请先阅读[WIKI 如何开始](https://github.com/LCTT/TranslateProject/wiki/01-如何开始)。
加入的成员,请先阅读 [WIKI 如何开始](https://github.com/LCTT/TranslateProject/wiki/01-如何开始)。
如何开始
-------------------------------
请阅读[WIKI](https://github.com/LCTT/TranslateProject/wiki)。
请阅读 [WIKI](https://github.com/LCTT/TranslateProject/wiki)。
历史
-------------------------------
* 2013/09/10 倡议并得到了大家的积极响应,成立翻译组。
* 2013/09/11 采用github进行翻译协作,并开始进行选题翻译。
* 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/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/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成员。
* 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/06/09 提升 ictlyh 和 dongfengweixiao 为 Core Translators 成员。
* 2015/11/10 提升 strugglingyouth、FSSlc、Vic020、alim0x 为 Core Translators 成员。
* 2016/05/09 提升 PurlingNayuki 为校对。
活跃成员
-------------------------------
目前 TP 活跃成员有:
- CORE @wxy,
- CORE @carolinewuyan,
- CORE @DeadFire,
- Leader @wxy,
- Source @oska874,
- Proofreader @PurlingNayuki,
- CORE @geekpi,
- CORE @GOLinux,
- CORE @reinoir,
- CORE @bazz2,
- CORE @zpl1025,
- CORE @ictlyh,
- CORE @dongfengweixiao
- CORE @carolinewuyan,
- CORE @strugglingyouth,
- CORE @FSSlc
- CORE @zpl1025,
- CORE @runningwater,
- CORE @bazz2,
- CORE @Vic020,
- CORE @dongfengweixiao,
- CORE @alim0x,
- Senior @DeadFire,
- Senior @reinoir222,
- Senior @tinyeyeser,
- Senior @vito-L,
- Senior @jasminepeng,
- Senior @willqian,
- Senior @vizv,
- @ZTinoZ,
- @Vic020,
- @runningwater,
- @KayGuoWhu,
- @luoxcat,
- @alim0x,
- @2q1w2007,
- @theo-l,
- @FSSlc,
- @su-kaiyao,
- @blueabysm,
- @flsf,
- @martin2011qi,
- @SPccman,
- @wi-cuckoo,
- @Linchenguang,
- @linuhap,
- @crowner,
- @Linux-pdz,
- @H-mudcup,
- @yechunxiao19,
- @woodboow,
- @Stevearzh,
- @disylee,
- @cvsher,
- @wwy-hust,
- @johnhoow,
- @felixonmars,
- @TxmszLou,
- @shipsw,
- @scusjs,
- @wangjiezhe,
- @hyaocuk,
- @MikeCoder,
- @ZhouJ-sh,
- @boredivan,
- @goreliu,
- @l3b2w1,
- @JonathanKang,
- @NearTan,
- @jiajia9linuxer,
- @Love-xuan,
- @coloka,
- @owen-carter,
- @luoyutiantang,
- @JeffDing,
- @icybreaker,
- @tenght,
- @liuaiping,
- @mtunique,
- @rogetfan,
- @nd0104,
- @mr-ping,
- @szrlee,
- @lfzark,
- @CNprober,
- @DongShuaike,
- @ggaaooppeenngg,
- @haimingfg,
- @213edu,
- @Tanete,
- @guodongxiaren,
- @zzlyzq,
- @FineFan,
- @yujianxuechuan,
- @Medusar,
- @shaohaolin,
- @ailurus1991,
- @liaoishere,
- @CHINAANSHE,
- @stduolc,
- @yupmoon,
- @tomatoKiller,
- @zhangboyue,
- @kingname,
- @KevinSJ,
- @zsJacky,
- @willqian,
- @Hao-Ding,
- @JygjHappy,
- @Maclauring,
- @small-Wood,
- @cereuz,
- @fbigun,
- @lijhg,
- @soooogreen,
- ZTinoZ,
- martin2011qi,
- theo-l,
- Luoxcat,
- wi-cuckoo,
- disylee,
- haimingfg,
- KayGuoWhu,
- wwy-hust,
- felixonmars,
- su-kaiyao,
- GHLandy,
- ivo-wang,
- cvsher,
- wyangsun,
- DongShuaike,
- flsf,
- SPccman,
- Stevearzh
- mr-ping,
- Linchenguang,
- Linux-pdz,
- 2q1w2007,
- H-mudcup,
- cposture,
- xiqingongzi,
- goreliu,
- NearTan,
- TxmszLou,
- ZhouJ-sh,
- wangjiezhe,
- icybreaker,
- shipsw,
- johnhoow,
- soooogreen,
- linuhap,
- blueabysm,
- boredivan,
- name1e5s,
- StdioA,
- yechunxiao19,
- l3b2w1,
- XLCYun,
- KevinSJ,
- tenght,
- coloka,
- luoyutiantang,
- sonofelice,
- jiajia9linuxer,
- scusjs,
- tnuoccalanosrep,
- woodboow,
- 1w2b3l,
- JonathanKang,
- crowner,
- dingdongnigetou,
- mtunique,
- CNprober,
- hyaocuk,
- szrlee,
- KnightJoker,
- Xuanwo,
- nd0104,
- Moelf,
- xiaoyu33,
- guodongxiaren,
- ynmlml,
- vim-kakali,
- ggaaooppeenngg,
- Ricky-Gong,
- zky001,
- lfzark,
- 213edu,
- bestony,
- mudongliang,
- liuaiping,
- Timeszoro,
- rogetfan,
- JeffDing,
- Yuking-net,
(按增加行数排名前百)
LFS 项目活跃成员有:
- @ictlyh
@ -169,7 +174,7 @@ LFS 项目活跃成员有:
- @KevinSJ
- @Yuking-net
更新于2015/06/09以Github contributors列表排名
更新于2016/06/20
谢谢大家的支持!

0
published/201407/Encrypting Your Cat Photos.md Executable file → Normal file
View File

View File

@ -19,7 +19,7 @@ LinuxQuestions 问卷调查揭晓最佳开源项目
via: http://ostatic.com/blog/linuxquestions-survey-results-surface-top-open-source-projects
作者:[Sam Dean][a]
译者:[jerryling315](https://github.com/jerryling315)
译者:[Moelf](https://github.com/Moelf)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
@ -29,4 +29,4 @@ via: http://ostatic.com/blog/linuxquestions-survey-results-surface-top-open-sour
[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
[5]:http://www.linuxquestions.org/questions/2014mca.php

View File

@ -98,7 +98,7 @@ Debian 在 Linux 生态环境中的贡献是难以用语言描述的。 如果 D
via: http://www.tecmint.com/happy-birthday-to-debian-gnu-linux/
作者:[Avishek Kumar][a]
译者:[jerryling315](http://moelf.xyz)
译者:[Moelf](https://github.com/Moelf)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -69,7 +69,7 @@ b、 一旦你保存了这个文件,你应该能在 Wifi 菜单里看到你刚
via: http://www.linuxveda.com/2015/08/23/how-to-create-an-ap-in-ubuntu-15-04-to-connect-to-androidiphone/
作者:[Sayantan Das][a]
译者:[jerryling315](https://github.com/jerryling315)
译者:[Moelf](https://github.com/Moelf)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,174 @@
如何在 Arch Linux 中安装 DNSCrypt 和 Unbound
================================================================================
**DNSCrypt** 是一个用于对 DNS 客户端和 DNS 解析器之间通信进行加密和验证的协议。它可以阻止 DNS 欺骗或中间人攻击。 DNSCrypt 可用于大多数的操作系统,包括 LinuxWindowsMacOSX Android 和 iOS。而在本教程中我使用的是内核为4.1的 archlinux。
**Unbound** 是用来解析收到的任意 DNS 查询的 DNS 缓存服务器。如果用户请求一个新的查询unbound 会将其存储到缓存中并且当用户再次请求相同的请求时unbound 将采用已经保存的缓存。这将比第一次请求查询更快。
现在我将尝试安装“DNSCrypt”以确保 DNS 的通信的安全并用“Unbound”加速。
### 第一步 - 安装 yaourt ###
Yaourt 是AURARCH 用户仓库)的辅助工具之一,它可以使用户能够很容易地从 AUR 安装程序。 Yaourt 和 pacman 使用相同的语法,你可以使用 yaourt 安装该程序。下面是安装 yaourt 的简单方法:
1、 用 nano 或者 vi 编辑 arch 仓库配置文件,存放在“/etc/pacman.conf”中。
$ nano /etc/pacman.conf
2、 在 yaourt 仓库底部添加,粘贴下面的脚本:
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
3、 用“Ctrl + x”接着用“Y”保存。
4、 接着升级仓库数据库并用pacman安装yaourt
$ sudo pacman -Sy yaourt
### 第二步 - 安装 DNSCrypt 和 Unbound ###
DNSCrypt 和 unbound 就在 archlinux 仓库中,你可以用下面的 pacman 命令安装:
$ sudo pacman -S dnscrypt-proxy unbound
接着在安装的过程中按下“Y”。
### 第三步 - 安装 dnscrypt-autoinstall ###
Dnscrypt-autoinstall 是一个在基于 Linux 的系统上自动安装和配置 DNSCrypt 的脚本。DNSCrypt 在 AUR 中因此你必须使用“yaourt”命令来安装它。
$ yaourt -S dnscrypt-autoinstall
注意 :
-S = 这和 pacman -S 安装程序一样。
### 第四步 - 运行 dnscrypt-autoinstall ###
用 root 权限运行“dnscrypt-autoinstall”来自动配置 DNSCrypt。
$ sudo dnscrypt-autoinstall
下一步中按下“回车”,接着输入"Y"来选择你想使用的 DNS 提供者,我这里使用不带日志和 DNSSEC 的 DNSCrypt.eu。
![DNSCrypt autoinstall](http://blog.linoxide.com/wp-content/uploads/2015/08/DNSCrypt-autoinstall.png)
### 第五步 - 配置 DNSCrypt 和 Unbound ###
1、 打开 dnscrypt 的“/etc/conf.d/dnscrypt-config” 确认配置文件中“DNSCRYPT_LOCALIP”指向**本地ip**“DNSCRYPT_LOCALPORT”根据你本人的意愿配置我是用的是**40**端口。
$ nano /etc/conf.d/dnscrypt-config
DNSCRYPT_LOCALIP=127.0.0.1
DNSCRYPT_LOCALIP2=127.0.0.2
DNSCRYPT_LOCALPORT=40
![DNSCrypt Configuration](http://blog.linoxide.com/wp-content/uploads/2015/08/DNSCryptConfiguration.png)
保存并退出。
2、 现在你用 nano 编辑器编辑“/etc/unbound/”下 unbound 的配置文件:
$ nano /etc/unbound/unbound.conf
3、 在脚本最后添加下面的行:
do-not-query-localhost: no
forward-zone:
name: "."
forward-addr: 127.0.0.1@40
确保**forward-addr**和DNSCrypt中的“**DNSCRYPT_LOCALPORT**”一致。如你所见,用的是**40**端口。
![Unbound Configuration](http://blog.linoxide.com/wp-content/uploads/2015/08/UnboundConfiguration.png)
接着保存并退出。
### 第六步 - 运行 DNSCrypt 和 Unbound接着添加到开机启动中 ###
请用 root 权限运行 DNSCrypt 和 unbound你可以用 systemctl 命令来运行:
$ sudo systemctl start dnscrypt-proxy unbound
将服务添加到启动中。你可以运行“systemctl enable”
$ sudo systemctl enable dnscrypt-proxy unbound
命令将会创建软链接到“/usr/lib/systemd/system/”目录的服务。
### 第七步 - 配置 resolv.conf 并重启所有服务 ###
resolv.conf 是一个在 linux 中用于配置 DNS 解析器的文件。它是一个由管理员创建的纯文本,因此你必须用 root 权限编辑并让它不能被其他人修改。
用 nano 编辑器编辑:
$ nano /etc/resolv.conf
并添加本地IP “**127.0.0.1**”。现在用“chattr”命令使他只读
$ chattr +i /etc/resolv.conf
注意:
如果你想要重新编辑用“chattr -i /etc/resolv.conf”加入写权限。
现在你需要重启 DNSCrypt 和 unbound 和网络;
$ sudo systemctl restart dnscrypt-proxy unbound netctl
如果你看到错误,检查配置文件。
### 测试 ###
1、 测试 DNSCrypt
你可以通过 https://dnsleaktest.com/ 来确认 DNSCrypt点击“标准测试”或者“扩展测试”然后等待程序运行结束。
现在你可以看到 DNSCrypt.eu 就已经与作为 DNS 提供商的 DNSCrypt 协同工作了。
![Testing DNSCrypt](http://blog.linoxide.com/wp-content/uploads/2015/08/TestingDNSCrypt.png)
2、 测试 Unbound
现在你应该确保 unbound 可以正确地与“dig”和“drill”命令一起工作。
这是 dig 命令的结果:
$ dig linoxide.com
我们现在看下结果“Query time”是“533 msec”
;; Query time: 533 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Aug 30 14:48:19 WIB 2015
;; MSG SIZE rcvd: 188
再次输入命令我们看到“Query time”是“0 msec”。
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Aug 30 14:51:05 WIB 2015
;; MSG SIZE rcvd: 188
![Unbound Test](http://blog.linoxide.com/wp-content/uploads/2015/08/UnboundTest.png)
DNSCrypt 对 DNS 客户端和解析端之间的通讯加密做的很好,并且 Unbound 通过缓存让相同的请求在另一次请求同速度更快。
### 总结 ###
DNSCrypt 是一个可以加密 DNS 客户端和 DNS 解析器之间的数据流的协议。 DNSCrypt 可以在不同的操作系统上运行,无论是移动端或桌面端。选择 DNS 提供商还包括一些重要的事情,应选择那些提供 DNSSEC 同时没有日志的。Unbound 可被用作 DNS 缓存,从而加快解析过程,因为 Unbound 将请求缓存那么接下来客户端请求相同的查询时unbound 将从缓存中取出保存的值。 DNSCrypt 和 Unbound 是针对安全性和速度的一个强大的组合。
--------------------------------------------------------------------------------
via: http://linoxide.com/tools/install-dnscrypt-unbound-archlinux/
作者:[Arul][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/arulm/

View File

@ -1,19 +1,21 @@
使用tuptime工具查看Linux服务器系统历史开机时间统计
使用 tuptime 工具查看 Linux 服务器系统的开机时间的历史和统计
================================================================================
你们可以使用下面的工具来查看Linux或者类Unix系统运行了多长时间
- uptime : 告诉你服务器运行了多长的时间。
- lastt : 显示重启和关机时间。
- tuptime : 报告系统的历史运行时间和统计运行时间这是指重启之间的运行时间。和uptime命令类似不过输出结果更有意思。
#### 找出系统上次重启时间和日期 ####
你可以使用下面的工具来查看 Linux 或类 Unix 系统运行了多长时间:
- uptime 告诉你服务器运行了多长的时间。
- lastt 显示重启和关机时间。
- tuptime 报告系统的运行时间历史和运行时间统计,这是指重启之间的运行时间。和 uptime 命令类似,不过输出结果更有意思。
### 找出系统上次重启时间和日期 ###
你[可以使用下面的命令来获取Linux操作系统的上次重启和关机时间及日期][1]在OSX/类Unix系统上也可以用
## Just show system reboot and shutdown date and time ###
### 显示系统重启和关机时间
who -b
last reboot
last shutdown
## Uptime info ##
### 开机信息
uptime
cat /proc/uptime
awk '{ print "up " $1 /60 " minutes"}' /proc/uptime
@ -23,23 +25,24 @@
![Fig.01: Various Linux commands in action to find out the server uptime](http://s0.cyberciti.org/uploads/cms/2015/09/uptime-w-awk-outputs.jpg)
01用于找出服务器开机时间的多个Linux命令
*图01用于找出服务器开机时间的多个Linux命令*
**跟tuptime问打个招呼吧**
###跟 tuptime 问打个招呼吧###
tuptime 命令行工具可以报告基于 Linux 的系统上的下列信息:
tuptime命令行工具可以报告基于Linux的系统上的下列信息
1. 系统启动次数统计
2. 注册首次启动时间(也就是安装时间)
1. 正常关机和意外关机统计
1. 平均开机时间和故障停机时间
1. 当前开机时间
1. 首次启动以来的开机和故障停机率
1. 累积系统开机时间、故障停机时间和合计
1. 报告每次启动、开机时间、关机和故障停机时间
3. 正常关机和意外关机统计
4. 平均开机时间和故障停机时间
5. 当前开机时间
6. 首次启动以来的开机和故障停机率
7. 累积系统开机时间、故障停机时间和合计
8. 报告每次启动、开机时间、关机和故障停机时间
#### 安装 ####
输入[下面的命令来克隆git仓库到Linux系统中][2]
输入[下面的命令来克隆 git 仓库到 Linux 系统中][2]
$ cd /tmp
$ git clone https://github.com/rfrail3/tuptime.git
@ -51,17 +54,17 @@ tuptime命令行工具可以报告基于Linux的系统上的下列信息
![Fig.02: Cloning a git repo](http://s0.cyberciti.org/uploads/cms/2015/09/git-install-tuptime.jpg)
02克隆git仓库
*图02克隆git仓库*
确保你随sysoptparseosrestringsqlite3datetimedisutils安装了Python v2.7和本地模块
确保你安装了带有 sysoptparseosrestringsqlite3datetimedisutils 和 locale 模块的 Python v2.7
你可以像下面这样来安装:
$ sudo tuptime-install.sh
或者,可以手工安装(根据基于systemd或非systemd的Linux的推荐方法
或者,可以手工安装(基于 systemd 或非 systemd
$ sudo cp /tmp/tuptime/latest/cron.d/tuptime /etc/cron.d/tuptime
$ sudo cp /tmp/tuptime/latest/cron.d/tuptime /etc/cron.d/tuptime
如果系统是systemd的拷贝服务文件并启用
@ -73,7 +76,7 @@ $ sudo cp /tmp/tuptime/latest/cron.d/tuptime /etc/cron.d/tuptime
$ sudo cp /tmp/tuptime/latest/init.d/tuptime.init.d-debian7 /etc/init.d/tuptime
$ sudo update-rc.d tuptime defaults
**运行**
####运行####
只需输入以下命令:
@ -83,9 +86,9 @@ $ sudo cp /tmp/tuptime/latest/cron.d/tuptime /etc/cron.d/tuptime
![Fig.03: tuptime in action](http://s0.cyberciti.org/uploads/cms/2015/09/tuptime-output.jpg)
03tuptime工作中
*图03tuptime工作中*
在更新内核后,我重启了系统,然后再次输入了同样的命令:
一次更新内核后,我重启了系统,然后再次输入了同样的命令:
$ sudo tuptime
System startups: 2 since 03:52:16 PM 08/21/2015
@ -142,7 +145,7 @@ via: http://www.cyberciti.biz/hardware/howto-see-historical-statistical-uptime-o
作者Vivek Gite
译者:[GOLinux](https://github.com/GOLinux)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,251 @@
给新手的 10 个有用 Linux 命令行技巧
================================================================================
我记得我第一次使用 Linux 的时候,我还习惯于 Windows 的图形界面,我真的很讨厌 Linux 终端。那时候我觉得命令难以记忆,不能正确使用它们。随着时间推移,我意识到了 Linux 终端的优美、灵活和可用性,说实话,我没有一天不使用它。今天,我很高兴和刚开始接触 Linux 的人一起来分享一些有用的技巧和提示,希望能帮助他们更好的向 Linux 过渡,并帮助他们学到一些新的东西(希望如此)。
![给新手的 10 个命令行技巧](http://www.tecmint.com/wp-content/uploads/2015/09/10-Linux-Commandline-Tricks.jpg)
*10 个 Linux 命令行技巧*
- [5 个有趣的 Linux 命令行技巧][1]
- [管理 Linux 文件类型的 5 个有用命令][2]
这篇文章希望向你展示一些不需要很高的技术就可以像一个高手一样使用 Linux 终端的有用技巧。你只需要一个 Linux 终端和一些自由时间来体会这些命令。
### 1. 找到正确的命令 ###
执行正确的命令对你的系统来说非常重要。然而在 Linux 中有如此多的、难以记忆的各种的命令行。那么怎样才能找到你需要的正确命令呢?答案是 apropos。你只需要运行
# apropos <description>
其中你要用真正描述你要查找的命令的语句代替 “description”。这里有一个例子
# apropos "list directory"
dir (1) - list directory contents
ls (1) - list directory contents
ntfsls (8) - list directory contents on an NTFS filesystem
vdir (1) - list directory contents
左边你看到的是命令,右边是它们的描述。
### 2. 执行之前的命令 ###
很多时候你需要一遍又一遍执行相同的命令。尽管你可以重复按你键盘上的向上光标键,但你也可以用 history 命令替代。这个命令会列出自从你上次启动终端以来所有输入过的命令:
# history
1 fdisk -l
2 apt-get install gnome-paint
3 hostname tecmint.com
4 hostnamectl tecmint.com
5 man hostnamectl
6 hostnamectl --set-hostname tecmint.com
7 hostnamectl -set-hostname tecmint.com
8 hostnamectl set-hostname tecmint.com
9 mount -t "ntfs" -o
10 fdisk -l
11 mount -t ntfs-3g /dev/sda5 /mnt
12 mount -t rw ntfs-3g /dev/sda5 /mnt
13 mount -t -rw ntfs-3g /dev/sda5 /mnt
14 mount -t ntfs-3g /dev/sda5 /mnt
15 mount man
16 man mount
17 mount -t -o ntfs-3g /dev/sda5 /mnt
18 mount -o ntfs-3g /dev/sda5 /mnt
19 mount -ro ntfs-3g /dev/sda5 /mnt
20 cd /mnt
...
正如你上面看到的,你会得到一个你运行过的命令的列表。每一行中有一个数字表示你在第几行输入了命令。你可以通过以下方法重新调用该命令:
!#
其中要用命令的实际编号代替 #。为了更好的理解,请看下面的例子:
!501
等价于:
# history
### 3. 使用 midnight 命令 ###
如果你不习惯使用类似 cd、cp、mv、rm 等命令,你可以使用 midnight 命令。它是一个简单的可视化 shell你可以在上面使用鼠标
![Midnight 命令](http://www.tecmint.com/wp-content/uploads/2015/09/mc-command.jpg)
*Midnight 命令*
借助 F1 到 F12 键,你可以轻易地执行不同任务。只需要在底部选择对应的命令。要选择文件或者目录,按下 “Insert” 键。
简而言之 midnight 就是所谓的 “mc”。要安装 mc只需要运行
$ sudo apt-get install mc [On Debian based systems]
----------
# yum install mc [On Fedora based systems]
下面是一个使用 midnight 命令器的简单例子。通过输入以下命令打开 mc
# mc
现在使用 TAB 键选择不同的窗口 - 左和右。我有一个想要移动到 “Software” 目录的 LibreOffice 文件:
![Midnight 命令移动文件](http://www.tecmint.com/wp-content/uploads/2015/09/Midnight-Commander-Move-Files.jpg)
*Midnight 命令移动文件*
按 F6 按钮移动文件到新的目录。MC 会请求你确认:
![移动文件到新目录](http://www.tecmint.com/wp-content/uploads/2015/09/Move-Files-to-new-Directory.png)
*移动文件到新目录*
确认了之后,文件就会被移动到新的目标目录。
- 扩展阅读:[如何在 Linux 中使用 Midnight 命令文件管理器][4]
### 4. 在指定时间关闭计算机 ###
有时候你需要在下班几个小时后再关闭计算机。你可以通过使用下面的命令在指定时间关闭你的计算机:
$ sudo shutdown 21:00
这会告诉你在你指定的时间关闭计算机。你也可以告诉系统在指定分钟后关闭:
$ sudo shutdown +15
这表示计算机会在 15 分钟后关闭。
### 5. 显示已知用户的信息 ###
你可以使用一个简单的命令列出你 Linux 系统的用户以及一些关于它们的基本信息。
# lslogins
这会输出下面的结果:
UID USER PWD-LOCK PWD-DENY LAST-LOGIN GECOS
0 root 0 0 Apr29/11:35 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 Jul19/10:04 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
23 squid 0 1
25 named 0 1 Named
27 mysql 0 1 MySQL Server
47 mailnull 0 1
48 apache 0 1 Apache
...
### 6. 查找文件 ###
查找文件有时候并不像你想象的那么简单。一个搜索文件的好例子是:
# find /home/user -type f
这个命令会搜索 /home/user 目录下的所有文件。find 命令真的很强大,你可以传递更多选项给它使得你的搜索更加详细。如果你想搜索超过特定大小的文件,可以使用:
# find . -type f -size 10M
上面的命令会搜索当前目录中所有大于 10M 的文件。确保不要在你 Linux 系统的根目录运行该命令,因为这可能导致你的机器 I/O 瓶颈。
我最经常和 find 命令一起使用的选项之一是 “exec”这允许你对 find 命令的结果运行一些操作。
例如,假如我们想查找一个目录中的所有文件并更改权限。可以通过以下简单命令完成:
# find /home/user/files/ -type f -exec chmod 644 {} \;
上面的命令会递归搜索指定目录内的所有文件,并对找到的文件执行 chmod 命令。推荐你阅读 [35 个 Linux find 命令的使用方法][5],我肯定你会发现这个命令更多的使用方法。
### 7. 用一个命令创建目录树 ###
你很可能知道可以使用 mkdir 命令创建新的目录。因此如果你想创建一个新的目录,你可能会运行:
# mkdir new_folder
但如果你想在该目录下创建 5 个子目录呢?运行 5 次 mkdir 命令并非是一个好的选择。相反你可以类似下面这样使用 -p 选项:
# mkdir -p new_folder/{folder_1,folder_2,folder_3,folder_4,folder_5}
最后你会在 new_folder 中有 5 个目录:
# ls new_folder/
folder_1 folder_2 folder_3 folder_4 folder_5
### 8. 复制文件到多个目录 ###
通常使用 cp 命令进行文件复制。复制文件通常看起来类似:
# cp /path-to-file/my_file.txt /path-to-new-directory/
现在假设你需要复制该文件到多个目录:
# cp /home/user/my_file.txt /home/user/1
# cp /home/user/my_file.txt /home/user/2
# cp /home/user/my_file.txt /home/user/3
这有点荒唐。相反,你可以用简单的一行命令解决问题:
# echo /home/user/1/ /home/user/2/ /home/user/3/ | xargs -n 1 cp /home/user/my_file.txt
### 9. 删除大文件 ###
有时候文件可能会变得很大。我看过由于缺乏管理技能一个日志文件就超过 250G 的例子。用 rm 命令可能不足以删除该文件,因为有大量的数据需要移除。应该避免这个很“笨重”的操作。相反,你可以使用一个简单的方法解决这个问题:
# > /path-to-file/huge_file.log
当然你需要根据你实际情况替换路径和文件名。上面的命令写一个空输出到该文件。用更简单的话说它会清空文件而不会导致你的系统产生大的 I/O 消耗。
### 10. 在多个 Linux 服务器上运行相同命令 ###
最近我们的一个读者在 [LinuxSay 论坛][6]提问说如何通过 ssh 在多个 Linux 服务器上执行一个命令。他机器的 IP 地址是:
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
这里有一个简单的解决方法。将服务器的 IP 地址写到文件 list.txt 中,像上面那样一行一个。然后运行:
# for in $i(cat list.txt); do ssh user@$i 'bash command'; done
上面的命令中你需要用实际登录的用户替换 “user”用你希望执行的实际命令替换 “bash command”。这个方法非常适用于通过[使用 SSH 密钥进行无密码验证][7],因为这样你不需要每次都为用户输入密码。
注意取决于你 Linux 系统的设置,你可能还需要传递一些额外的参数给 SSH 命令。
### 总结 ###
上面的例子都很简单,我希望它们能帮助你发现 Linux 的优美之处,你如何能简单实现在其它操作系统上需要更多时间的不同操作。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/10-useful-linux-command-line-tricks-for-newbies/
作者:[Marin Todorov][a]
译者:[ictlyh](http://mutouxiaogui.cn/blog/)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.tecmint.com/author/marintodorov89/
[1]:https://linux.cn/article-5485-1.html
[2]:http://www.tecmint.com/manage-file-types-and-set-system-time-in-linux/
[3]:http://www.tecmint.com/history-command-examples/
[4]:http://www.tecmint.com/midnight-commander-a-console-based-file-manager-for-linux/
[5]:http://www.tecmint.com/35-practical-examples-of-linux-find-command/
[6]:http://www.linuxsay.com/
[7]:https://linux.cn/article-5202-1.html

View File

@ -1,16 +1,16 @@
Linux 有问必答--如何找出哪个 CPU 内核正在运行进程
Linux 有问必答:如何知道进程运行在哪个 CPU 内核上?
================================================================================
>问题:我有个 Linux 进程运行在多核处理器系统上。怎样才能找出哪个 CPU 内核正在运行该进程?
当你运行需要较高性能的 HPC 程序或非常消耗网络资源的程序在 [多核 NUMA 处理器上][1]CPU/memory 的亲和力是限度其发挥最大性能的重要因素之一。在同一 NUMA 节点上调整程序的亲和力可以减少远程内存访问。像英特尔 Sandy Bridge 处理器,该处理器有一个集成的 PCIe 控制器,要调整同一 NUMA 节点的网络 I/O 负载可以使用 网卡控制 PCI 和 CPU 亲和力
当你在 [多核 NUMA 处理器上][1]运行需要较高性能的 HPC高性能计算程序或非常消耗网络资源的程序时CPU/memory 的亲和力是限度其发挥最大性能的重要因素之一。在同一 NUMA 节点上调度最相关的进程可以减少缓慢的远程内存访问。像英特尔 Sandy Bridge 处理器,该处理器有一个集成的 PCIe 控制器,你可以在同一 NUMA 节点上调度网络 I/O 负载(如网卡)来突破 PCI 到 CPU 亲和力限制
由于性能优化和故障排除只是一部分,你可能想知道哪个 CPU 内核(或 NUMA 节点)被调度运行特定的进程
作为性能优化和故障排除的一部分,你可能想知道特定的进程被调度到哪个 CPU 内核(或 NUMA 节点)上运行
这里有几种方法可以 **找出哪个 CPU 内核被调度来运行 给定的 Linux 进程或线程**。
这里有几种方法可以 **找出哪个 CPU 内核被调度来运行给定的 Linux 进程或线程**。
### 方法一 ###
如果一个进程明确的被固定到 CPU 的特定内核,如使用 [taskset][2] 命令,你可以使用 taskset 命令找出被固定的 CPU 内核:
如果一个进程使用 [taskset][2] 命令明确的被固定pinned到 CPU 的特定内核上,你可以使用 taskset 命令找出被固定的 CPU 内核:
$ taskset -c -p <pid>
@ -22,19 +22,18 @@ Linux 有问必答--如何找出哪个 CPU 内核正在运行进程
pid 5357's current affinity list: 5
输出显示这个过程被固定在 CPU 内核 5。
输出显示这个过程被固定在 CPU 内核 5
但是,如果你没有明确固定进程到任何 CPU 内核,你会得到类似下面的亲和力列表。
pid 5357's current affinity list: 0-11
输出表明该进程可能会被安排在从0到11中的任何一个 CPU 内核。在这种情况下taskset 不会识别该进程当前被分配给哪个 CPU 内核,你应该使用如下所述的方法。
输出表明该进程可能会被安排在从0到11中的任何一个 CPU 内核。在这种情况下taskset 不能识别该进程当前被分配给哪个 CPU 内核,你应该使用如下所述的方法。
### 方法二 ###
ps 命令可以告诉你每个进程/线程目前分配到的 在“PSR”列CPU ID。
$ ps -o pid,psr,comm -p <pid>
----------
@ -42,7 +41,7 @@ ps 命令可以告诉你每个进程/线程目前分配到的 在“PSR”列
PID PSR COMMAND
5357 10 prog
输出表示进程的 PID 为 5357名为"prog"目前在CPU 内核 10 上运行着。如果该过程没有被固定PSR 列可以保持随着时间变化,内核可能调度该进程到不同位置
输出表示进程的 PID 为 5357名为"prog"目前在CPU 内核 10 上运行着。如果该过程没有被固定PSR 列会根据内核可能调度该进程到不同内核而改变显示
### 方法三 ###
@ -72,11 +71,11 @@ via: http://ask.xmodulo.com/cpu-core-process-is-running.html
作者:[Dan Nanni][a]
译者:[strugglingyouth](https://github.com/strugglingyouth)
校对:[校对者ID](https://github.com/校对者ID)
校对:[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/identify-cpu-processor-architecture-linux.html
[2]:http://xmodulo.com/run-program-process-specific-cpu-cores-linux.html
[3]:http://ask.xmodulo.com/install-htop-centos-rhel.html
[3]:https://linux.cn/article-3141-1.html

View File

@ -0,0 +1,201 @@
如何使用 Quagga BGP边界网关协议路由器来过滤 BGP 路由
================================================================================
在[之前的文章][1]中,我们介绍了如何使用 Quagga 将 CentOS 服务器变成一个 BGP 路由器,也介绍了 BGP 对等体和前缀交换设置。在本教程中,我们将重点放在如何使用**前缀列表prefix-list**和**路由映射route-map**来分别控制数据注入和数据输出。
之前的文章已经说过BGP 的路由判定是基于前缀的收取和前缀的广播。为避免错误的路由,你需要使用一些过滤机制来控制这些前缀的收发。举个例子,如果你的一个 BGP 邻居开始广播一个本不属于它们的前缀,而你也将错就错地接收了这些不正常前缀,并且也将它转发到网络上,这个转发过程会不断进行下去,永不停止(所谓的“黑洞”就这样产生了)。所以确保这样的前缀不会被收到,或者不会转发到任何网络,要达到这个目的,你可以使用前缀列表和路由映射。前者是基于前缀的过滤机制,后者是更为常用的基于前缀的策略,可用于精调过滤机制。
本文会向你展示如何在 Quagga 中使用前缀列表和路由映射。
### 拓扑和需求 ###
本教程使用下面的拓扑结构。
![](https://farm8.staticflickr.com/7394/16407625405_4f7d24d1f6_c.jpg)
服务供应商A和供应商B已经将对方设置成为 eBGP 对等体,实现互相通信。他们的自治系统号和前缀分别如下所示。
- **对等区段**: 192.168.1.0/24
- **服务供应商A**: 自治系统号 100, 前缀 10.10.0.0/16
- **服务供应商B**: 自治系统号 200, 前缀 10.20.0.0/16
在这个场景中供应商B只想从A接收 10.10.10.0/23, 10.10.10.0/24 和 10.10.11.0/24 三个前缀。
### 安装 Quagga 和设置 BGP 对等体 ###
在[之前的教程][1]中,我们已经写了安装 Quagga 和设置 BGP 对等体的方法,所以这里就不再详细说明了,只简单介绍下 BGP 配置和前缀广播:
![](https://farm8.staticflickr.com/7428/16219986668_97cb193b15_c.jpg)
上图说明 BGP 对等体已经开启。Router-A 在向 router-B 广播多个前缀,而 Router-B 也在向 router-A 广播一个前缀 10.20.0.0/16。两个路由器都能正确无误地收发前缀。
### 创建前缀列表 ###
路由器可以使用 ACL 或前缀列表来过滤一个前缀。前缀列表比 ACL 更常用,因为前者处理步骤少,而且易于创建和维护。
ip prefix-list DEMO-PRFX permit 192.168.0.0/23
上面的命令创建了名为“DEMO-FRFX”的前缀列表只允许存在 192.168.0.0/23 这个前缀。
前缀列表的另一个强大功能是支持子网掩码区间,请看下面的例子:
ip prefix-list DEMO-PRFX permit 192.168.0.0/23 le 24
这个命令创建的前缀列表包含在 192.168.0.0/23 和 /24 之间的前缀,分别是 192.168.0.0/23, 192.168.0.0/24 和 192.168.1.0/24。运算符“le”表示小于等于你也可以使用“ge”表示大于等于。
一个前缀列表语句可以有多个允许或拒绝操作。每个语句都自动或手动地分配有一个序列号。
如果存在多个前缀列表语句,则这些语句会按序列号顺序被依次执行。在配置前缀列表的时候,我们需要注意在所有前缀列表语句之后是**隐性拒绝**语句,就是说凡是不被明显允许的,都会被拒绝。
如果要设置成允许所有前缀,前缀列表语句设置如下:
ip prefix-list DEMO-PRFX permit 0.0.0.0/0 le 32
我们已经知道如何创建前缀列表语句了现在我们要创建一个名为“PRFX-LST”的前缀列表来满足我们实验场景的需求。
router-b# conf t
router-b(config)# ip prefix-list PRFX-LST permit 10.10.10.0/23 le 24
### 创建路由映射 ###
除了前缀列表和 ACL这里还有另一种机制叫做路由映射也可以在 BGP 路由器中控制前缀。事实上,路由映射针对前缀匹配的微调效果比前缀列表和 ACL 都强。
与前缀列表类似,路由映射语句也可以指定允许和拒绝操作,也需要分配一个序列号。每个路由匹配可以有多个允许或拒绝操作。例如:
route-map DEMO-RMAP permit 10
上面的语句创建了名为“DEMO-RMAP”的路由映射添加序列号为10的允许操作。现在我们在这个序列号所对应的路由映射下使用 match 命令进行匹配。
router-a(config-route-map)# match (press ? in the keyboard)
----------
as-path Match BGP AS path list
community Match BGP community list
extcommunity Match BGP/VPN extended community list
interface match first hop interface of route
ip IP information
ipv6 IPv6 information
metric Match metric of route
origin BGP origin code
peer Match peer address
probability Match portion of routes defined by percentage value
tag Match tag of route
如你所见,路由映射可以匹配很多属性,在本教程中匹配的是前缀。
route-map DEMO-RMAP permit 10
match ip address prefix-list DEMO-PRFX
这个 match 命令会匹配之前建好的前缀列表中允许的 IP 地址(也就是前缀 192.168.0.0/23, 192.168.0.0/24 和 192.168.1.0/24
接下来,我们可以使用 set 命令来修改这些属性。例子如下:
route-map DEMO-RMAP permit 10
match ip address prefix-list DEMO-PRFX
set (press ? in keyboard)
----------
aggregator BGP aggregator attribute
as-path Transform BGP AS-path attribute
atomic-aggregate BGP atomic aggregate attribute
comm-list set BGP community list (for deletion)
community BGP community attribute
extcommunity BGP extended community attribute
forwarding-address Forwarding Address
ip IP information
ipv6 IPv6 information
local-preference BGP local preference path attribute
metric Metric value for destination routing protocol
metric-type Type of metric
origin BGP origin code
originator-id BGP originator ID attribute
src src address for route
tag Tag value for routing protocol
vpnv4 VPNv4 information
weight BGP weight for routing table
如你所见set 命令也可以修改很多属性。为了作个示范,我们修改一下 BGP 的 local-preference 这个属性。
route-map DEMO-RMAP permit 10
match ip address prefix-list DEMO-PRFX
set local-preference 500
如同前缀列表路由映射语句的末尾也有隐性拒绝操作。所以我们需要添加另外一个允许语句使用序列号20来允许所有前缀。
route-map DEMO-RMAP permit 10
match ip address prefix-list DEMO-PRFX
set local-preference 500
!
route-map DEMO-RMAP permit 20
序列号20未指定任何匹配命令所以默认匹配所有前缀。在这个路由映射语句中所有的前缀都被允许。
回想一下,我们的需求是只允许或只拒绝一些前缀,所以上面的 set 命令不应该存在于这个场景中。我们只需要一个允许语句,如下如示:
router-b# conf t
router-b(config)# route-map RMAP permit 10
router-b(config-route-map)# match ip address prefix-list PRFX-LST
这个路由映射才是我们需要的效果。
### 应用路由映射 ###
注意,在被应用于一个接口或一个 BGP 邻居之前ACL、前缀列表和路由映射都不会生效。与 ACL 和前缀列表一样,一条路由映射语句也能被多个接口或邻居使用。然而,一个接口或一个邻居只能有一条路由映射语句应用于输入端,以及一条路由映射语句应用于输出端。
下面我们将这条路由映射语句应用于 router-B 的 BGP 配置,为 router-B 的邻居 192.168.1.1 设置输入前缀广播。
router-b# conf terminal
router-b(config)# router bgp 200
router-b(config-router)# neighbor 192.168.1.1 route-map RMAP in
现在检查下广播路由和收取路由。
显示广播路由的命令:
show ip bgp neighbor-IP advertised-routes
显示收取路由的命令:
show ip bgp neighbor-IP routes
![](https://farm8.staticflickr.com/7424/16221405429_4d86119548_c.jpg)
可以看到router-A 有4条路由前缀到达 router-B而 router-B 只接收3条。查看一下范围我们就能知道只有被路由映射允许的前缀才能在 router-B 上显示出来,其他的前缀一概丢弃。
**小提示**:如果接收前缀内容没有刷新,试试重置下 BGP 会话,使用这个命令:`clear ip bgp neighbor-IP`。本教程中命令如下:
clear ip bgp 192.168.1.1
我们能看到系统已经满足我们的要求了。接下来我们可以在 router-A 和 router-B 上创建相似的前缀列表和路由映射语句来更好地控制输入输出的前缀。
这里把配置过程总结一下,方便查看。
router bgp 200
network 10.20.0.0/16
neighbor 192.168.1.1 remote-as 100
neighbor 192.168.1.1 route-map RMAP in
!
ip prefix-list PRFX-LST seq 5 permit 10.10.10.0/23 le 24
!
route-map RMAP permit 10
match ip address prefix-list PRFX-LST
### 总结 ###
在本教程中我们演示了如何在 Quagga 中设置前缀列表和路由映射来过滤 BGP 路由。我们也展示了如何将前缀列表结合进路由映射来进行输入前缀的微调功能。你可以参考这些方法来设置满足自己需求的前缀列表和路由映射。这些工具是保护网络免受路由毒化和来自 bogon 路由LCTT 译注指不该出现在internet路由表中的地址的广播。
希望本文对你有帮助。
--------------------------------------------------------------------------------
via: http://xmodulo.com/filter-bgp-routes-quagga-bgp-router.html
作者:[Sarmed Rahman][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/sarmed
[1]:https://linux.cn/article-4609-1.html

View File

@ -0,0 +1,132 @@
Larry Wall 专访——语言学、Perl 6 的设计和发布
================================================================================
> 经历了15年的打造Perl 6 终将在年底与大家见面。我们预先采访了它的作者了解一下新特性。
Larry Wall 是个相当有趣的人。他是编程语言 Perl 的创造者这种语言被广泛的誉为将互联网粘在一起的胶水也由于大量地在各种地方使用非字母的符号被嘲笑为只写语言——以难以阅读著称。Larry 本人具有语言学背景,以其介绍 Perl 未来发展的演讲“[洋葱的状态][1]State of the Onion”而闻名。LCTT 译注:“洋葱的状态”是 Larry Wall 的年度演讲的主题,洋葱也是 Perl 基金会的标志。)
在2015年布鲁塞尔的 FOSDEM 上,我们赶上了 Larry问了问他为什么 Perl 6 花了如此长的时间Perl 5 的发布时间是1994年了解当项目中的每个人都各执己见时是多么的难以管理以及他的语言学背景自始至终究竟给 Perl 带来了怎样的影响。做好准备,让我们来领略其中的奥妙……
![](http://www.linuxvoice.com/wp-content/uploads/2015/07/wall1.jpg)
**Linux Voice你曾经有过计划去寻找世界上某个地方的某种不见经传的语言然后为它创造书写的文字但你从未有机会去实现它。如果你能回到过去你会去做么**
Larry Wall你首先得是个年轻人才能搞得定做这些事需要投入很大的努力和人力以至于已经不适合那些上了年纪的人了。健康、活力是其中的一部分同样也因为人们在年轻的时候更容易学习一门新的语言只有在你学会了语言之后你才能写呀。
我自学了日语十年,由于我的音系学和语音学的训练我能说的比较流利——但要理解别人的意思对我来说还十分困难。所以到了日本我会问路,但我听不懂他们的回答!
通常需要一门语言学习得足够好才能开发一个文字体系,并可以使用这种语言进行少量的交流。在你能够实际推广它和用本土人自己的文化教育他们前,那还需要一些年。最后才可以教授本土人如何以他们的文明书写。
当然如果在语言方面你有帮手 —— 经过别人的提醒我们不再使用“语言线人”来称呼他们了,那样显得我们像是在 CIA 工作的一样!—— 你可以通过他们的帮助来学习外语。他们不是老师,但他们会以另一种方式来启发你学习 —— 当然他们也能教你如何说。他们会拿着一根棍子,指着它说“这是一根棍子”,然后丢掉同时说“棒子掉下去了”。然后,你就可以记下一些东西并将其系统化。
大多数让人们有这样做的动力是翻译圣经。但是这只是其中的一方面;另一方面也是为了文化保护。传教士在这方面臭名昭著,因为人类学家认为人们应该基于自己的文明来做这件事。但有些人注定会改变他们的文化——他们可能是军队、或是商业侵入,如可口可乐或者缝纫机,或传教士。在这三者之间,传教士相对来讲伤害最小的了,如果他们恪守本职的话。
**LV许多文字系统有本可依相较而言你的发明就像是格林兰语…**
印第安人照搬字母就发明了他们自己的语言而且没有在这些字母上施加太多我们给这些字母赋予的涵义这种做法相当随性。它们只要能够表达出人们的所思所想使交流顺畅就行。经常是有些声调语言Tonal language使用的是西方文字拼写并尽可能的使用拉丁文的字符变化然后用重音符或数字标注出音调。
在你开始学习如何使用语音和语调表示之后,你也开始变得迷糊——或者你的书写就不如从前准确。或者你对话的时候像在讲英文,但发音开始无法匹配拼写。
**LV当你在开发 Perl 的时候,你的语言学背景会不会使你认为:“这对程序设计语言真的非常重要”?**
LW我在人们是如何使用语言上想了很多。在现实的语言中你有一套名词、动词和形容词的体系并且你知道这些单词的词性。在现实的自然语言中你时常将一个单词放到不同的位置。我所学的语言学理论也被称为法位学phoenetic它解释了这些在自然语言中工作的原理 —— 也就是有些你当做名词的东西,有时候你可以将它用作动词,并且人们总是这样做。
你能很好的将任何单词放在任何位置而进行沟通。我比较喜欢的例子是将一个整句用作为一个形容词。这句话会是这样的:“我不喜欢你的[我可以用任何东西来取代这个形容词的]态度”!
所以自然语言非常灵活,因为聆听者非常聪明 —— 至少,相对于电脑而言 —— 你相信他们会理解你最想表达的意思,即使存在歧义。当然对电脑而言,你必须保证歧义不大。
> “在 Perl 6 中,我们试图让电脑更准确的了解我们。”
可以说在 Perl 1到5上我们针对歧义方面处理做得还不够。有时电脑会在不应该的时候迷惑。在 Perl 6上我们找了许多方法使得电脑对你所说的话能更准确的理解就算用户并不清楚这底是字符串还是数字电脑也能准确的知道它的类型。我们找到了内部以强类型存储而仍然可以无视类型的“以此即彼”的方法。
![](http://www.linuxvoice.com/wp-content/uploads/2015/07/wall2.jpg)
**LVPerl 被视作互联网上的“胶水glue”语言已久能将点点滴滴组合在一起。在你看来 Perl 6 的发布是否符合当前用户的需要,或者旨在招揽更多新用户,能使它重获新生吗?**
LW最初的设想是为 Perl 程序员带来更好的 Perl。但在看到了 Perl 5 上的不足后,很明显改掉这些不足会使 Perl 6更易用就像我在讨论中提到过 —— 类似于 [托尔金J. R. R. Tolkien 在《指环王》前言中谈到的适用性一样][2]。
重点是“简单的东西应该简单,而困难的东西应该可以实现”。让我们回顾一下,在 Perl 2和3之间的那段时间。在 Perl 2上我们不能处理二进制数据或嵌入的 null 值 —— 只支持 C 语言风格的字符串。我曾说过“Perl 只是文本处理语言 —— 在文本处理语言里你并不需要这些功能”。
但当时发生了一大堆的问题,因为大多数的文本中会包含少量的二进制数据 —— 如网络地址network addresses及类似的东西。你使用二进制数据打开套接字然后处理文本。所以通过支持二进制数据语言的适用性applicability翻了一倍。
这让我们开始探讨在语言中什么应该简单。现在的 Perl 中有一条原则是我们偷师了哈夫曼编码Huffman coding的做法它在位编码系统中为字符采取了不同的尺寸常用的字符占用的位数较少不常用的字符占用的位数更多。
我们偷师了这种想法并将它作为 Perl 的一般原则,针对常用的或者说常输入的 —— 这些常用的东西必须简单或简洁。不过另一方面也显得更加的不规则irregular。在自然语言中也是这样的最常用的动词实际上往往是最不规则的。
所以在这样的情况下需要更多的差异存在。我很喜欢一本书是 Umberto Eco 写的的《探寻完美的语言The Search for the Perfect Language说的并不是计算机语言而是哲学语言大体的意思是古代的语言也许是完美的我们应该将它们带回来。
所有的这类语言错误的认为类似的事物其编码也应该总是类似的。但这并不是我们沟通的方式。如果你的农场中有许多动物,他们都有相近的名字,当你想杀一只鸡的时候说“走,去把 Blerfoo 宰了”,你的真实想法是宰了 Blerfee但有可能最后死的是一头牛LCTT 译注:这是杀鸡用牛刀的意思吗?哈哈)。
所以在这种时候我们其实更需要好好的将单词区分开使沟通信道的冗余增加。常用的单词应该有更多的差异。为了达到更有效的通讯还有一种自足LCTT 译注self-clocking ,自同步,[概念][3]来自电信和电子行业,此处译为“自足”更能体现涵义)编码。如果你在一个货物上看到过 UPC 标签(条形码),它就是一个自足编码,每对“条”和“空”总是以七个列宽为单位,据此你就知道“条”的宽度加起来总是这么宽。这就是自足。
在电子产品中还有另一种自足编码。在老式的串行传输协议中有停止和启动位来保持同步。自然语言中也会包含这些。比如说在写日语时不用使用空格。由于书写方式的原因他们会在每个词组的开头使用中文中的汉字字符然后用音节表syllabary中的字符来结尾。
**LV是平假名对吗**
LW: 是的平假名。所以在这一系统每个词组的开头就自然就很重要了。同样的在古希腊大多数的动词都是搭配好的declined 或 conjugated所以它们的标准结尾是一种自足机制。在他们的书写体系中空格也是可有可无的 —— 引入空格是更近代的发明。
所以在计算机语言上也要如此,有的值也可以自足编码。在 Perl 上我们重度依赖这种方法,而且在 Perl 6 上相较于前几代这种依赖更重。当你使用表达式时你要么得到的是一个词要么得到的是插值infix操作符。当你想要得到一个词你有可能得到的是一个前缀操作符它也在相同的位置同样当你想要得到一个插值操作符你也可能得到的是前一个词的后缀。
但是反过来。如果编译器准确的知道它想要什么你可以稍微重载overload它们其它的让 Perl 来完成。所以在斜线“/”后面是单词时它会当成正则表达式,而斜线“/”在字串中时视作除法。而我们并不会重载所有东西,因为那只会使你失去自足冗余。
多数情况下我们提示的比较好的语法错误消息,是出于发现了一行中出现了两个关键词,然后我们尝试找出为什么一行会出现两个关键字 —— “哦,你一定漏掉了上一行的分号”,所以我们相较于很多其他的按步照班的解析器可以生成更好的错误消息。
![](http://www.linuxvoice.com/wp-content/uploads/2015/07/wall3.jpg)
**LV为什么 Perl 6 花了15年当每个人对事物有不同看法时一定十分难于管理而且正确和错误并不是绝对的。**
LW这必须要非常小心地平衡。刚开始会有许多的好的想法 —— 好吧我并不是说那些全是好的想法。也有很多令人烦恼的地方就像有361条 RFC [功能建议文件]而我也许只想要20条。我们需要坐下来将它们全部看完并忽略其中的解决方案因为它们通常流于表象、视野狭隘。几乎每一条只针对一样事物如若我们将它们全部拼凑起来那简直是一堆垃圾。
> “掌握平衡时需要格外小心。毕竟在刚开始的时候总会有许多的好主意。”
所以我们必须基于人们在使用 Perl 5 时的真实感受重新整理,寻找统一、深层的解决方案。这些 RFC 文档许多都提到了一个事实,就是类型系统的不足。通过引入更条理分明的类型系统,我们可以解决很多问题并且即聪明又紧凑。
同时我们开始关注其他方面如何统一特征集并开始重用不同领域的想法这并不需要它们在下层相同。我们有一种标准的书写配对pair的方式——好吧在 Perl 里面有两种但使用冒号书写配对的方法同样可以用于基数计数法或是任何进制的文本编号。同样也可以用于其他形式的引用quoting。在 Perl 里我们称它为“奇妙的一致”。
> “做了 Perl 6 的早期实现的朋友们,握着我的手说:“我们真的很需要一位语言的设计者。””
同样的想法涌现出来,你说“我已经熟悉了语法如何运作,但是我看见它也被用在别处”,所以说视角相同才能找出这种一致。那些提出各种想法和做了 Perl 6 的早期实现的人们回来看我,握着我的手说:“我们真的需要一位语言的设计者。您能作为我们的[仁慈独裁者][4]benevolent dictatorLCTT 译注Benevolent Dictator For Life或 BDFL指开源领袖通常指对社区争议拥有最终裁决权的领袖典故来自 Python 创始人 Guido van Rossum 具体参考维基条目[解释][4]
所以我是语言的设计者但总是听到“不要管具体实现implementation我们目睹了你对 Perl 5 做的那些,我们不想历史重演!”真是让我忍俊不禁,因为他们作为起步的核心和原先 Perl 5 的内部结构上几乎别无二致,也许这就是为什么一些早期的实现做的并不好的原因。
因为我们仍然在摸索我们的整个设计,其实现在做了许多 VM (虚拟机)该做什么和不该做什么的假设,所以最终这个东西就像面向对象的汇编语言一样。类似的问题在伊始阶段无处不在。然后 Pugs 这家伙走过来说:“用用看 Haskell 吧它能让你们清醒的认识自己正在干什么让我们用它来弄清楚下层的语义模型semantic model。”
因此我们明确了其中的一些语义模型但更重要的是我们开始建立符合那些语义模型的测试套件。在这之后Parrot VM 继续进行开发,并且出现了另一个实现 Niecza ,它基于 .Net是由一个年轻的家伙搞出来的。他很聪明实现了 Perl 6 的一个很大的子集。不过他还是一个人干,并没有找到什么好方法让别人介入他的项目。
同时 Parrot 项目变得过于庞大,以至于任何人都不能真正的深入掌控它,并且很难重构。同时,开发 Rakudo 的人们觉得我们可能需要在更多平台上运行它,而不只是在 Parrot VM 上。 于是他们发明了所谓的可移植层 NQP ,即 “Not Quite Perl”。他们一开始将它移植到 JVMJava虚拟机上运行与此同时他们还秘密的开发了一个叫做 MoarVM 的 VM ,它去年才刚刚为人知晓。
无论 MoarVM 还是 JVM 在回归测试regression test中表现得十分接近 —— 在许多方面 Parrot 算是尾随其后。这样不挑剔 VM 真的很棒,我们也能开始考虑将 NQP 发扬光大。谷歌夏季编码大赛Google Summer of Code project的目标就是针对 JavaScript 的 NQP这应该靠谱因为 MoarVM 也同样使用 Node.js 作为日常处理。
我们可能要将今年余下的时光投在 MoarVM 上,直到 6.0 发布,方可休息片刻。
**LV去年英国政府开展编程年活动Year of Code来激发年轻人对编程的兴趣。针对活动的建议五花八门——类似为了让人们准确的认识到内存的使用你是否应该从低阶语言开始讲授或是一门高阶语言。你对此作何看法**
LW到现在为止Python 社区在低阶方面的教学工作做得比我们要好。我们也很想在这一方面做点什么,这也是我们有蝴蝶 logo 的部分原因,以此来吸引七岁大小的女孩子!
![Perl 6 : Camelia](https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Camelia.svg/640px-Camelia.svg.png)
> “到现在为止Python 社区在低阶方面的教学工作做得比我们要好。”
我们认为将 Perl 6 作为第一门语言来学习是可行的。一大堆的将 Perl 5 作为第一门语言学习的人让我们吃惊。你知道,在 Perl 5 中有许多相当大的概念,如闭包,词法范围,和一些你通常在函数式编程中见到的特性。甚至在 Perl 6 中更是如此。
Perl 6 花了这么长时间的部分原因是我们尝试去坚持将近 50 种互不相同的原则,在设计语言的最后对于“哪点是最重要的规则”这个问题还是悬而未决。有太多的问题需要讨论。有时我们做出了决定,并已经工作了一段时间,才发现这个决定并不很正确。
之前我们并未针对并发程序设计或指定很多东西,直到 Jonathan Worthington 的出现,他非常巧妙的权衡了各个方面。他结合了一些其他语言诸如 Go 和 C# 的想法将并发原语写的非常好。可组合性Composability是一个语言至关重要的一部分。
有很多的程序设计系统的并发和并行写的并不好 —— 比如线程和锁,不良的操作方式有很多。所以在我看来,额外花点时间看一下 Go 或者 C# 这种高阶原语的开发是很值得的 —— 那是一种关键字上的矛盾 —— 写的相当棒。
--------------------------------------------------------------------------------
via: http://www.linuxvoice.com/interview-larry-wall/
作者:[Mike Saunders][a]
译者:[martin2011qi](https://github.com/martin2011qi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.linuxvoice.com/author/mike/
[1]:https://en.wikipedia.org/wiki/Perl#State_of_the_Onion
[2]:http://tinyurl.com/nhpr8g2
[3]:http://en.wikipedia.org/wiki/Self-clocking_signal
[4]:https://en.wikipedia.org/wiki/Benevolent_dictator_for_life

View File

@ -0,0 +1,28 @@
Linux 4.3 内核增加了 MOST 驱动子系统
================================================================================
当 4.2 内核还没有正式发布的时候Greg Kroah-Hartman 就为他维护的各种子系统模块打开了4.3 的合并窗口。
之前 Greg KH 发起的拉取请求pull request里包含了 linux 4.3 的合并窗口更新内容涉及驱动核心、TTY/串口、USB 驱动、字符/杂项以及暂存区内容。这些拉取申请没有提供任何震撼性的改变,大部分都是改进/附加/修改bug。暂存区内容又是大量的修正和清理但是还是有一个新的驱动子系统。
Greg 提到了[4.3 的暂存区改变][2],“这里的很多东西,几乎全部都是细小的修改和改变。通常的 IIO 更新和新驱动,以及我们已经添加了的 MOST 驱动子系统已经在源码树里整理了。ozwpan 驱动最终还是被删掉,因为它很明显被废弃了而且也没有人关心它。”
MOST 驱动子系统是面向媒体的系统传输Media Oriented Systems Transport的简称。在 linux 4.3 新增的文档里面解释道“MOST 驱动支持 LInux 应用程序访问 MOST 网络汽车信息骨干网Automotive Information Backbone高速汽车多媒体网络的事实上的标准。MOST 定义了必要的协议、硬件和软件层提供高效且低消耗的传输控制实时的数据包传输而只需要使用一个媒介物理层。目前使用的媒介是光线、非屏蔽双绞线UTP和同轴电缆。MOST 也支持多种传输速度最高支持150Mbps。”如文档解释的MOST 主要是关于 Linux 在汽车上的应用。
当 Greg KH 发出了他为 Linux 4.3 多个子系统做出的更新,但是他还没有打算提交 [KDBUS][5] 的内核代码。他之前已经放出了 [linux 4.3 的 KDBUS] 的开发计划所以我们将需要等待官方的4.3 合并窗口,看看会发生什么。
--------------------------------------------------------------------------------
via: http://www.phoronix.com/scan.php?page=news_item&px=Linux-4.3-Staging-Pull
作者:[Michael Larabel][a]
译者:[oska874](https://github.com/oska874)
校对:[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/scan.php?page=search&q=Linux+4.2
[2]:http://lkml.iu.edu/hypermail/linux/kernel/1508.2/02604.html
[3]:http://www.phoronix.com/scan.php?page=news_item&px=KDBUS-Not-In-Linux-4.2
[4]:http://www.phoronix.com/scan.php?page=news_item&px=Linux-4.2-rc7-Released
[5]:http://www.phoronix.com/scan.php?page=search&q=KDBUS

View File

@ -1,14 +1,12 @@
translation by strugglingyouth
nstalling NGINX and NGINX Plus With Ansible
使用 ansible 安装 NGINX 和 NGINX Plus
================================================================================
在生产环境中,我会更喜欢做与自动化相关的所有事情。如果计算机能完成你的任务,何必需要你亲自动手呢?但是,在不断变化并存在多种技术的环境中,创建和实施自动化是一项艰巨的任务。这就是为什么我喜欢[Ansible][1]。Ansible是免费的开源的对于 IT 配置管理,部署和业务流程,使用起来非常方便。
在生产环境中,我会更喜欢做与自动化相关的所有事情。如果计算机能完成你的任务,何必需要你亲自动手呢?但是,在不断变化并存在多种技术的环境中,创建和实施自动化是一项艰巨的任务。这就是为什么我喜欢 [Ansible][1] 的原因。Ansible 是一个用于 IT 配置管理,部署和业务流程的开源工具,使用起来非常方便。
我最喜欢 Ansible 的一个特点是,它是完全无客户端的。要管理一个系统,通过 SSH 建立连接,它使用[Paramiko][2](一个 Python 库)或本地的 [OpenSSH][3]。Ansible 另一个吸引人的地方是它有许多可扩展的模块。这些模块可被系统管理员用于执行一些的常见任务。特别是,它们使用 Ansible 这个强有力的工具可以跨多个服务器、环境或操作系统安装和配置任何程序,只需要一个控制节点。
我最喜欢 Ansible 的一个特点是,它是完全无客户端。要管理一个系统,通过 SSH 建立连接,也使用了[Paramiko][2](一个 Python 库)或本地的 [OpenSSH][3]。Ansible 另一个吸引人的地方是它有许多可扩展的模块。这些模块可被系统管理员用于执行一些的相同任务。特别是,它们使用 Ansible 这个强有力的工具可以安装和配置任何程序在多个服务器上,环境或操作系统,只需要一个控制节点
在本教程中,我将带你使用 Ansible 完成安装和部署开源 [NGINX][4] 和我们的商业产品 [NGINX Plus][5]。我将在 [CentOS][6] 服务器上演示,但我也在下面的“在 Ubuntu 上创建 Ansible Playbook 来安装 NGINX 和 NGINX Plus”小节中包含了在 Ubuntu 服务器上部署的细节
在本教程中,我将带你使用 Ansible 完成安装和部署开源[NGINX][4] 和 [NGINX Plus][5],我们的商业产品。我将在 [CentOS][6] 服务器上演示,但我也写了一个详细的教程关于在 Ubuntu 服务器上部署[在 Ubuntu 上创建一个 Ansible Playbook 来安装 NGINX 和 NGINX Plus][7] 。
在本教程中我将使用 Ansible 1.9.2 版本的,并在 CentOS 7.1 服务器上部署运行。
在本教程中我将使用 Ansible 1.9.2 版本,并在 CentOS 7.1 服务器上部署运行。
$ ansible --version
ansible 1.9.2
@ -20,14 +18,13 @@ nstalling NGINX and NGINX Plus With Ansible
如果你使用的是 CentOS安装 Ansible 十分简单,只要输入以下命令。如果你想使用源码编译安装或使用其他发行版,请参阅上面 Ansible 链接中的说明。
$ sudo yum install -y epel-release && sudo yum install -y ansible
根据环境的不同,在本教程中的命令有的可能需要 sudo 权限。文件路径,用户名,目标服务器的值取决于你的环境中
根据环境的不同,在本教程中的命令有的可能需要 sudo 权限。文件路径,用户名和目标服务器取决于你的环境的情况
### 创建一个 Ansible Playbook 来安装 NGINX (CentOS) ###
首先,我们为 NGINX 的部署创建一个工作目录,以及子目录和部署配置文件目录。我通常建议在主目录中创建目录,在文章的所有例子中都会有说明。
首先,我们要为 NGINX 的部署创建一个工作目录,包括子目录和部署配置文件。我通常建议在你的主目录中创建该目录,在文章的所有例子中都会有说明。
$ cd $HOME
$ mkdir -p ansible-nginx/tasks/
@ -54,11 +51,11 @@ nstalling NGINX and NGINX Plus With Ansible
$ vim $HOME/ansible-nginx/deploy.yml
**deploy.yml** 文件是 Ansible 部署的主要文件,[ 在使用 Ansible 部署 NGINX][9] 时,我们将运行 ansibleplaybook 命令执行此文件。在这个文件中,我们指定运行时 Ansible 使用的库以及其它配置文件。
**deploy.yml** 文件是 Ansible 部署的主要文件,在“使用 Ansible 部署 NGINX”小节中我们运行 ansibleplaybook 命令时会使用此文件。在这个文件中,我们指定 Ansible 运行时使用的库以及其它配置文件。
在这个例子中,我使用 [include][10] 模块来指定配置文件一步一步来安装NGINX。虽然可以创建一个非常大的 playbook 文件,我建议你将其分割为小文件,以保证其可靠性。示例中的包括复制静态内容,复制配置文件,为更高级的部署使用逻辑配置设定变量。
在这个例子中,我使用 [include][10] 模块来指定配置文件一步一步来安装NGINX。虽然可以创建一个非常大的 playbook 文件,我建议你将其分割为小文件,让它们更有条理。include 的示例中可以复制静态内容,复制配置文件,为更高级的部署使用逻辑配置设定变量。
在文件中输入以下行。包括顶部参考注释中的文件名
在文件中输入以下行。我在顶部的注释包含了文件名用于参考
# ./ansible-nginx/deploy.yml
@ -66,21 +63,21 @@ nstalling NGINX and NGINX Plus With Ansible
tasks:
- include: 'tasks/install_nginx.yml'
hosts 语句说明 Ansible 部署 **nginx** 组的所有服务器,服务器在 **/etc/ansible/hosts** 中指定。我们将编辑此文件来 [创建 NGINX 服务器的列表][11]
hosts 语句说明 Ansible 部署 **nginx** 组的所有服务器,服务器在 **/etc/ansible/hosts** 中指定。我们会在下面的“创建 NGINX 服务器列表”小节编辑此文件
include 语句说明 Ansible 在部署过程中从 **tasks** 目录下读取并执行 **install_nginx.yml** 文件中的内容。该文件包括以下几步:下载,安装,并启动 NGINX。我们将创建此文件在下一节
include 语句说明 Ansible 在部署过程中从 **tasks** 目录下读取并执行 **install\_nginx.yml** 文件中的内容。该文件包括以下几步:下载,安装,并启动 NGINX。我们将在下一节创建此文件。
#### 为 NGINX 创建部署文件 ####
现在,先保存 **deploy.yml** 文件,并在编辑器中打开 **install_nginx.yml** 。
现在,先保存 **deploy.yml** 文件,并在编辑器中打开 **install\_nginx.yml** 。
$ vim $HOME/ansible-nginx/tasks/install_nginx.yml
该文件包含的说明有 - 以 [YAML][12] 格式写入 - 使用 Ansible 安装和配置 NGINX。每个部分步骤中的过程起始于一个 name 声明(前面连字符)描述此步骤。下面的 name 字符串:是 Ansible 部署过程中写到标准输出的可以根据你的意愿来改变。YAML 文件中的下一个部分是在部署过程中将使用的模块。在下面的配置中,[yum][13] 和 [service][14] 模块使将被用。yum 模块用于在 CentOS 上安装软件包。service 模块用于管理 UNIX 的服务。在这部分的最后一行或几行指定了几个模块的参数(在本例中,这些行以 name 和 state 开始)。
该文件包含有指令(使用 [YAML][12] 格式写的), Ansible 会按照指令安装和配置我们的 NGINX 部署过程。每个节(过程中的步骤)起始于一个描述此步骤的 `name` 语句(前面有连字符)。 `name` 后的字符串是 Ansible 部署过程中输出到标准输出的可以根据你的意愿来修改。YAML 文件中的节的下一行是在部署过程中将使用的模块。在下面的配置中,使用了 [`yum`][13] 和 [`service`][14] 模块。`yum` 模块用于在 CentOS 上安装软件包。`service` 模块用于管理 UNIX 的服务。在这个节的最后一行或几行指定了几个模块的参数(在本例中,这些行以 `name``state` 开始)。
在文件中输入以下行。对于 **deploy.yml**,在我们文件的第一行是关于文件名的注释。第一部分说明 Ansible 从 NGINX 仓库安装 **.rpm** 文件在CentOS 7 上。这说明软件包管理器直接从 NGINX 仓库安装最新最稳定的版本。需要在你的 CentOS 版本上修改路径。可使用包的列表可以在 [开源 NGINX 网站][15] 上找到。接下来的两节说明 Ansible 使用 yum 模块安装最新的 NGINX 版本,然后使用 service 模块启动 NGINX。
在文件中输入以下行。就像 **deploy.yml**,在我们文件的第一行是用于参考的文件名的注释。第一个节告诉 Ansible 在CentOS 7 上从 NGINX 仓库安装该 **.rpm** 文件。这让软件包管理器直接从 NGINX 仓库安装最新最稳定的版本。根据你的 CentOS 版本修改路径。所有可用的包的列表可以在 [开源 NGINX 网站][15] 上找到。接下来的两节告诉 Ansible 使用 `yum` 模块安装最新的 NGINX 版本,然后使用 `service` 模块启动 NGINX。
**注意:** 在第一部分中CentOS 包中的路径名是连着的两行。在一行上输入其完整路径。
**注意:** 在第一个节中CentOS 包中的路径名可能由于宽度显示为连着的两行。请在一行上输入其完整路径。
# ./ansible-nginx/tasks/install_nginx.yml
@ -100,12 +97,12 @@ include 语句说明 Ansible 在部署过程中从 **tasks** 目录下读取并
#### 创建 NGINX 服务器列表 ####
现在,我们有 Ansible 部署所有配置的文件,我们需要告诉 Ansible 部署哪个服务器。我们需要在 Ansible 中指定 **hosts** 文件。先备份现有的文件,并新建一个新文件来部署。
现在,我们设置好了 Ansible 部署的所有配置文件,我们需要告诉 Ansible 部署哪个服务器。我们需要在 Ansible 中指定 **hosts** 文件。先备份现有的文件,并新建一个新文件来部署。
$ sudo mv /etc/ansible/hosts /etc/ansible/hosts.backup
$ sudo vim /etc/ansible/hosts
在文件中输入以下行来创建一个名为 **nginx** 的组并列出安装 NGINX 的服务器。你可以指定服务器通过主机名IP 地址,或者在一个区域,例如 **server[1-3].domain.com**。在这里,我指定一台服务器通过 IP 地址
在文件中输入(或编辑)以下行来创建一个名为 **nginx** 的组并列出安装 NGINX 的服务器。你可以通过主机名、IP 地址、或者在一个范围,例如 **server[1-3].domain.com** 来指定服务器。在这里,我通过 IP 地址指定一台服务器
# /etc/ansible/hosts
@ -114,20 +111,20 @@ include 语句说明 Ansible 在部署过程中从 **tasks** 目录下读取并
#### 设置安全性 ####
在部署之前,我们需要确保 Ansible 已通过 SSH 授权能访问我们的目标服务器。
接近完成了,但在部署之前,我们需要确保 Ansible 已被授权通过 SSH 访问我们的目标服务器。
首选并且最安全的方法是添加 Ansible 所要部署服务器的 RSA SSH 密钥到目标服务器的 **authorized_keys** 文件中,这给 Ansible 在目标服务器上的 SSH 权限不受限制。要了解更多关于此配置,请参阅 [安全的 OpenSSH][16] 在 wiki.centos.org。这样,你就可以自动部署而无需用户交互。
首选并且最安全的方法是添加 Ansible 所要部署服务器的 RSA SSH 密钥到目标服务器的 **authorized\_keys** 文件中,这给予 Ansible 在目标服务器上的不受限制 SSH 权限。要了解更多关于此配置,请参阅 wiki.centos.org 上 [安全加固 OpenSSH][16]。这样,你就可以自动部署而无需用户交互。
另外,你也可以在部署过程中要输入密码。我强烈建议你只在测试过程中使用这种方法,因为它是不安全的,没有办法判断目标主机的身份。如果你想这样做,将每个目标主机 **/etc/ssh/ssh_config** 文件中 StrictHostKeyChecking 的默认值 yes 改为 no。然后在 ansible-playbook 命令中添加 --ask-pass参数来表示 Ansible 会提示输入 SSH 密码。
另外,你也可以在部署过程中要输入密码。我强烈建议你只在测试过程中使用这种方法,因为它是不安全的,没有办法跟踪目标主机的身份fingerprint变化。如果你想这样做,将每个目标主机 **/etc/ssh/ssh\_config** 文件中 StrictHostKeyChecking 的默认值 yes 改为 no。然后在 ansible-playbook 命令中添加 --ask-pass 参数来让 Ansible 提示输入 SSH 密码。
在这里,我将举例说明如何编辑 **ssh_config** 文件来禁用在目标服务器上严格的主机密钥检查。我们手动 SSH 到我们将部署 NGINX 的服务器并将StrictHostKeyChecking 的值更改为 no。
在这里,我将举例说明如何编辑 **ssh\_config** 文件来禁用在目标服务器上严格的主机密钥检查。我们手动连接 SSH 到我们将部署 NGINX 的服务器并将 StrictHostKeyChecking 的值更改为 no。
$ ssh kjones@172.16.239.140
kjones@172.16.239.140's password:***********
[kjones@nginx ]$ sudo vim /etc/ssh/ssh_config
当你更改后,保存 **ssh_config**,并通过 SSH 连接到你的 Ansible 服务器。保存后的设置应该如下所示。
当你更改后,保存 **ssh\_config**,并通过 SSH 连接到你的 Ansible 服务器。保存后的设置应该如下所示。
# /etc/ssh/ssh_config
@ -135,7 +132,7 @@ include 语句说明 Ansible 在部署过程中从 **tasks** 目录下读取并
#### 运行 Ansible 部署 NGINX ####
如果你一直照本教程的步骤来做,你可以运行下面的命令来使用 Ansible 部署NGINX。同样,如果你设置了 RSA SSH 密钥认证,那么--ask-pass 参数是不需要的。)在 Ansible 服务器运行命令,并使用我们上面创建的配置文件。
如果你一直照本教程的步骤来做,你可以运行下面的命令来使用 Ansible 部署 NGINX。再次提示,如果你设置了 RSA SSH 密钥认证,那么 --ask-pass 参数是不需要的。)在 Ansible 服务器运行命令,并使用我们上面创建的配置文件。
$ sudo ansible-playbook --ask-pass $HOME/ansible-nginx/deploy.yml
@ -163,7 +160,7 @@ Ansible 提示输入 SSH 密码输出如下。recap 中显示 failed=0 这条
如果你没有得到一个成功的 play recap你可以尝试用 -vvvv 参数(带连接调试的详细信息)再次运行 ansible-playbook 命令来解决部署过程的问题。
当部署成功(因为我们不是第一次部署)后,你可以验证 NGINX 在远程服务器上运行基本的 [cURL][17] 命令。在这里,它会返回 200 OK。Yes我们使用Ansible 成功安装了 NGINX。
当部署成功(假如我们是第一次部署)后,你可以在远程服务器上运行基本的 [cURL][17] 命令验证 NGINX 。在这里,它会返回 200 OK。Yes我们使用 Ansible 成功安装了 NGINX。
$ curl -Is 172.16.239.140 | grep HTTP
HTTP/1.1 200 OK
@ -174,11 +171,11 @@ Ansible 提示输入 SSH 密码输出如下。recap 中显示 failed=0 这条
#### 复制 NGINX Plus 上的证书和密钥到 Ansible 服务器 ####
使用 Ansible 安装和配置 NGINX Plus 时,首先我们需要将 [NGINX Plus Customer Portal][18] 的密钥和证书复制到部署 Ansible 服务器上的标准位置。
使用 Ansible 安装和配置 NGINX Plus 时,首先我们需要将 [NGINX Plus Customer Portal][18] NGINX Plus 订阅的密钥和证书复制到 Ansible 部署服务器上的标准位置。
购买了 NGINX Plus 或正在试用的客户也可以访问 NGINX Plus Customer Portal。如果你有兴趣测试 NGINX Plus你可以申请免费试用30天[点击这里][19]。在你注册后不久你将收到一个试用证书和密钥的链接。
购买了 NGINX Plus 或正在试用的客户也可以访问 NGINX Plus Customer Portal。如果你有兴趣测试 NGINX Plus你可以申请免费试用30天[点击这里][19]。在你注册后不久你将收到一个试用证书和密钥的链接。
在 Mac 或 Linux 主机上,我在这里演示使用 [scp][20] 工具。在 Microsoft Windows 主机,可以使用 [WinSCP][21]。在本教程中,先下载文件到我的 Mac 笔记本电脑上,然后使用 scp 将其复制到 Ansible 服务器。密钥和证书的位置都在我的家目录下。
在 Mac 或 Linux 主机上,我在这里使用 [scp][20] 工具演示。在 Microsoft Windows 主机,可以使用 [WinSCP][21]。在本教程中,先下载文件到我的 Mac 笔记本电脑上,然后使用 scp 将其复制到 Ansible 服务器。密钥和证书的位置都在我的家目录下。
$ cd /path/to/nginx-repo-files/
$ scp nginx-repo.* user@destination-server:.
@ -189,7 +186,7 @@ Ansible 提示输入 SSH 密码输出如下。recap 中显示 failed=0 这条
$ sudo mkdir -p /etc/ssl/nginx/
$ sudo mv nginx-repo.* /etc/ssl/nginx/
验证你的 **/etc/ssl/nginx** 目录包含证书(**.crt**)和密钥(**.key**)文件。你可以使用 tree 命令检查。
验证你的 **/etc/ssl/nginx** 目录包含证书(**.crt**)和密钥(**.key**)文件。你可以使用 tree 命令检查。
$ tree /etc/ssl/nginx
/etc/ssl/nginx
@ -204,7 +201,7 @@ Ansible 提示输入 SSH 密码输出如下。recap 中显示 failed=0 这条
#### 创建 Ansible 目录结构 ####
以下执行的步骤将和开源 NGINX 的非常相似在[创建安装 NGINX 的 Ansible Playbook 中(CentOS)][22]。首先,我们建一个工作目录为部署 NGINX Plus 使用。我喜欢将它创建为我主目录的子目录。
以下执行的步骤和我们的“创建 Ansible Playbook 来安装 NGINXCentOS)”小节中部署开源 NGINX 的非常相似。首先,我们建一个工作目录用于部署 NGINX Plus 使用。我喜欢将它创建为我主目录的子目录。
$ cd $HOME
$ mkdir -p ansible-nginx-plus/tasks/
@ -223,11 +220,11 @@ Ansible 提示输入 SSH 密码输出如下。recap 中显示 failed=0 这条
#### 创建主部署文件 ####
接下来,我们使用 vim 为开源的 NGINX 创建 **deploy.yml** 文件。
接下来,像开源的 NGINX 一样,我们使用 vim 创建 **deploy.yml** 文件。
$ vim ansible-nginx-plus/deploy.yml
和开源 NGINX 的部署唯一的区别是,我们将包含文件的名称修改为**install_nginx_plus.yml**。该文件告诉 Ansible 在 **nginx** 组中的所有服务器(**/etc/ansible/hosts** 中定义的)上部署 NGINX Plus ,然后在部署过程中从 **tasks** 目录读取并执行 **install_nginx_plus.yml** 的内容。
和开源 NGINX 的部署唯一的区别是,我们将包含文件的名称修改为 **install\_nginx\_plus.yml**。该文件告诉 Ansible 在 **nginx** 组中的所有服务器(**/etc/ansible/hosts** 中定义的)上部署 NGINX Plus ,然后在部署过程中从 **tasks** 目录读取并执行 **install\_nginx\_plus.yml** 的内容。
# ./ansible-nginx-plus/deploy.yml
@ -235,22 +232,22 @@ Ansible 提示输入 SSH 密码输出如下。recap 中显示 failed=0 这条
tasks:
- include: 'tasks/install_nginx_plus.yml'
如果你还没有这样做的话,你需要创建 hosts 文件,详细说明在上面的 [创建 NGINX 服务器的列表][23]
如果你之前没有安装过的话,你需要创建 hosts 文件,详细说明在上面的“创建 NGINX 服务器的列表”小节
#### 为 NGINX Plus 创建部署文件 ####
在文本编辑器中打开 **install_nginx_plus.yml**。该文件在部署过程中使用 Ansible 来安装和配置 NGINX Plus。这些命令和模块仅针对 CentOS有些是 NGINX Plus 独有的。
在文本编辑器中打开 **install\_nginx\_plus.yml**。该文件包含了使用 Ansible 来安装和配置 NGINX Plus 部署过程中的指令。这些命令和模块仅针对 CentOS有些是 NGINX Plus 独有的。
$ vim ansible-nginx-plus/tasks/install_nginx_plus.yml
第一部分使用 [文件][24] 模块,告诉 Ansible 使用指定的路径和状态参数为 NGINX Plus 创建特定的 SSL 目录,设置根目录的权限,将权限更改为0700。
第一节使用 [`file`][24] 模块,告诉 Ansible 使用指定的`path`和`state`参数为 NGINX Plus 创建特定的 SSL 目录,设置属主为 root将权限 `mode` 更改为0700。
# ./ansible-nginx-plus/tasks/install_nginx_plus.yml
- name: NGINX Plus | 创建 NGINX Plus ssl 证书目录
file: path=/etc/ssl/nginx state=directory group=root mode=0700
接下来的两节使用 [copy][25] 模块从部署 Ansible 的服务器上将 NGINX Plus 的证书和密钥复制到 NGINX Plus 服务器上,再修改权根,将权限设置为0700。
接下来的两节使用 [copy][25] 模块从 Ansible 部署服务器上将 NGINX Plus 的证书和密钥复制到 NGINX Plus 服务器上,再修改属主为 root权限 `mode` 为0700。
- name: NGINX Plus | 复制 NGINX Plus repo 证书
copy: src=/etc/ssl/nginx/nginx-repo.crt dest=/etc/ssl/nginx/nginx-repo.crt owner=root group=root mode=0700
@ -258,17 +255,17 @@ Ansible 提示输入 SSH 密码输出如下。recap 中显示 failed=0 这条
- name: NGINX Plus | 复制 NGINX Plus 密钥
copy: src=/etc/ssl/nginx/nginx-repo.key dest=/etc/ssl/nginx/nginx-repo.key owner=root group=root mode=0700
接下来,我们告诉 Ansible 使用 [get_url][26] 模块从 NGINX Plus 仓库下载 CA 证书在 url 参数指定的远程位置,通过 dest 参数把它放在指定的目录,并设置权限为 0700。
接下来,我们告诉 Ansible 使用 [`get_url`][26] 模块在 url 参数指定的远程位置从 NGINX Plus 仓库下载 CA 证书,通过 `dest` 参数把它放在指定的目录 `dest` ,并设置权限 `mode` 为 0700。
- name: NGINX Plus | 下载 NGINX Plus CA 证书
get_url: url=https://cs.nginx.com/static/files/CA.crt dest=/etc/ssl/nginx/CA.crt mode=0700
同样,我们告诉 Ansible 使用 get_url 模块下载 NGINX Plus repo 文件,并将其复制到 **/etc/yum.repos.d** 目录下在 NGINX Plus 服务器上
同样,我们告诉 Ansible 使用 `get_url` 模块下载 NGINX Plus repo 文件,并将其复制到 NGINX Plus 服务器上的 **/etc/yum.repos.d** 目录下。
- name: NGINX Plus | 下载 yum NGINX Plus 仓库
get_url: url=https://cs.nginx.com/static/files/nginx-plus-7.repo dest=/etc/yum.repos.d/nginx-plus-7.repo mode=0700
最后两节的 name 告诉 Ansible 使用 yum 和 service 模块下载并启动 NGINX Plus。
最后两节的 `name` 告诉 Ansible 使用 `yum``service` 模块下载并启动 NGINX Plus。
- name: NGINX Plus | 安装 NGINX Plus
yum:
@ -282,7 +279,7 @@ Ansible 提示输入 SSH 密码输出如下。recap 中显示 failed=0 这条
#### 运行 Ansible 来部署 NGINX Plus ####
在保存 **install_nginx_plus.yml** 文件后,然后运行 ansible-playbook 命令来部署 NGINX Plus。同样在这里我们使用 --ask-pass 参数使用 Ansible 提示输入 SSH 密码并把它传递给每个 NGINX Plus 服务器,指定路径 **deploy.yml** 文件
在保存 **install\_nginx\_plus.yml** 文件后,运行 ansible-playbook 命令来部署 NGINX Plus。同样在这里我们使用 --ask-pass 参数使用 Ansible 提示输入 SSH 密码并把它传递给每个 NGINX Plus 服务器,指定主配置文件路径 **deploy.yml** 文件。
$ sudo ansible-playbook --ask-pass $HOME/ansible-nginx-plus/deploy.yml
@ -315,18 +312,18 @@ Ansible 提示输入 SSH 密码输出如下。recap 中显示 failed=0 这条
PLAY RECAP ********************************************************************
172.16.239.140 : ok=8 changed=7 unreachable=0 failed=0
playbook 的 recap 是成功的。现在,使用 curl 命令来验证 NGINX Plus 是否在运行。太好了,我们得到的是 200 OK成功了我们使用 Ansible 成功地安装了 NGINX Plus。
playbook 的 recap 成功完成。现在,使用 curl 命令来验证 NGINX Plus 是否在运行。太好了,我们得到的是 200 OK成功了我们使用 Ansible 成功地安装了 NGINX Plus。
$ curl -Is http://172.16.239.140 | grep HTTP
HTTP/1.1 200 OK
### 在 Ubuntu 上创建一个 Ansible Playbook 来安装 NGINX 和 NGINX Plus ###
### 在 Ubuntu 上创建 Ansible Playbook 来安装 NGINX 和 NGINX Plus ###
此过程在 [Ubuntu 服务器][27] 上部署 NGINX 和 NGINX Plus 与 CentOS 很相似,我将一步一步的指导来完成整个部署文件,并指出和 CentOS 的细微差异。
在 [Ubuntu 服务器][27] 上部署 NGINX 和 NGINX Plus 的过程与 CentOS 很相似,我将一步一步的指导来完成整个部署文件,并指出和 CentOS 的细微差异。
首先和 CentOS 一样,创建 Ansible 目录结构和主要的 Ansible 部署文件。也创建 **/etc/ansible/hosts** 文件来描述 [创建 NGINX 服务器的列表][28]。对于 NGINX Plus你也需要复制证书和密钥在此步中 [复制 NGINX Plus 证书和密钥到 Ansible 服务器][29]
首先和 CentOS 一样,创建 Ansible 目录结构和 Ansible 主部署文件。也按“创建 NGINX 服务器的列表”小节的描述创建 **/etc/ansible/hosts** 文件。对于 NGINX Plus你也需要安装“复制 NGINX Plus 证书和密钥到 Ansible 服务器”小节的描述复制证书和密钥
下面是开源 NGINX 的 **install_nginx.yml** 部署文件。在第一部分,我们使用 [apt_key][30] 模块导入 Nginx 的签名密钥。接下来的两节使用[lineinfile][31] 模块来添加 URLs**sources.list** 文件中。最后,我们使用 [apt][32] 模块来更新缓存并安装 NGINXapt 取代了我们在 CentOS 中部署时的 yum 模块)。
下面是开源 NGINX 的 **install\_nginx.yml** 部署文件。在第一节,我们使用 [`apt_key`][30] 模块导入 NGINX 的签名密钥。接下来的两节使用 [`lineinfile`][31] 模块来添加 Ubuntu 14.04 的软件包 URL**sources.list** 文件中。最后,我们使用 [`apt`][32] 模块来更新缓存并安装 NGINX`apt` 取代了我们在 CentOS 中部署时的 `yum` 模块)。
# ./ansible-nginx/tasks/install_nginx.yml
@ -352,7 +349,8 @@ playbook 的 recap 是成功的。现在,使用 curl 命令来验证 NGINX Plu
service:
name: nginx
state: started
下面是 NGINX Plus 的部署文件 **install_nginx.yml**。前四节设置了 NGINX Plus 密钥和证书。然后,我们用 apt_key 模块为开源的 NGINX 导入签名密钥get_url 模块为 NGINX Plus 下载 apt 配置文件。[shell][33] 模块使用 printf 命令写下输出到 **nginx-plus.list** 文件中在**sources.list.d** 目录。最终的 name 模块是为开源 NGINX 的。
下面是 NGINX Plus 的部署文件 **install\_nginx.yml**。前四节设置了 NGINX Plus 密钥和证书。然后,我们像开源的 NGINX 一样用 `apt_key` 模块导入签名密钥,`get_url` 模块为 NGINX Plus 下载 `apt` 配置文件。[`shell`][33] 模块使用 `printf` 命令写下输出到 **sources.list.d** 目录中的 **nginx-plus.list** 文件。最终的 `name` 模块和开源 NGINX 一样。
# ./ansible-nginx-plus/tasks/install_nginx_plus.yml
@ -395,13 +393,12 @@ playbook 的 recap 是成功的。现在,使用 curl 命令来验证 NGINX Plu
$ sudo ansible-playbook --ask-pass $HOME/ansible-nginx-plus/deploy.yml
你应该得到一个成功的 play recap。如果你没有成功你可以使用 verbose 参数,以帮助你解决在 [运行 Ansible 来部署 NGINX][34] 中出现的问题。
你应该得到一个成功的 play recap。如果你没有成功你可以使用冗余参数,以帮助你解决出现的问题。
### 小结 ###
我在这个教程中演示是什么是 Ansible可以做些什么来帮助你自动部署 NGINX 或 NGINX Plus这仅仅是个开始。还有许多有用的模块用户账号管理,自定义配置模板等。如果你有兴趣了解更多关于这些,请访问 [Ansible 官方文档][35]。
我在这个教程中演示是什么是 Ansible可以做些什么来帮助你自动部署 NGINX 或 NGINX Plus这仅仅是个开始。还有许多有用的模块包括从用户账号管理到自定义配置模板等。如果你有兴趣了解关于这些的更多信息,请访问 [Ansible 官方文档][35]。
要了解更多关于 Ansible来听我讲用 Ansible 部署 NGINX Plus 在[NGINX.conf 2015][36]9月22-24日在旧金山。
--------------------------------------------------------------------------------
@ -409,7 +406,7 @@ via: https://www.nginx.com/blog/installing-nginx-nginx-plus-ansible/
作者:[Kevin Jones][a]
译者:[strugglingyouth](https://github.com/strugglingyouth)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,92 @@
如何使用 GRUB 2 直接从硬盘运行 ISO 文件
================================================================================
![](https://www.maketecheasier.com/assets/uploads/2015/07/rundirectiso-featured.png)
大多数 Linux 发行版都会提供一个可以从 USB 启动的 live 环境,以便用户无需安装即可测试系统。我们可以用它来评测这个发行版或仅仅是当成一个一次性系统,并且很容易将这些文件复制到一个 U 盘上,在某些情况下,我们可能需要经常运行同一个或不同的 ISO 镜像。GRUB 2 可以配置成直接从启动菜单运行一个 live 环境,而不需要烧录这些 ISO 到硬盘或 USB 设备。
### 获取和检查可启动的 ISO 镜像 ###
为了获取 ISO 镜像,我们通常应该访问所需的发行版的网站下载与我们架构兼容的镜像文件。如果这个镜像可以从 U 盘启动,那它也应该可以从 GRUB 菜单启动。
当镜像下载完后,我们应该通过 MD5 校验检查它的完整性。这会输出一大串数字与字母合成的序列。
![](https://www.maketecheasier.com/assets/uploads/2015/07/rundirectiso-md5.png)
将这个序列与下载页提供的 MD5 校验码进行比较,两者应该完全相同。
### 配置 GRUB 2 ###
ISO 镜像文件包含了整个系统。我们要做的仅仅是告诉 GRUB 2 哪里可以找到 kernel 和 initramdisk 或 initram 文件系统(这取决于我们所使用的发行版)。
在下面的例子中,一个 Kubuntu 15.04 live 环境将被配置到 Ubuntu 14.04 机器的 Grub 启动菜单项。这应该能在大多数新的以 Ubuntu 为基础的系统上运行。如果你是其它系统并且想实现一些其它的东西,你可以从[这些文件][1]了解更多细节,但这会要求你拥有一点 GRUB 使用经验。
这个例子的文件 `kubuntu-15.04-desktop-amd64.iso` 放在位于 `/dev/sda1``/home/maketecheasier/TempISOs/` 上。
为了使 GRUB 2 能正确找到它,我们应该编辑
/etc/grub.d40-custom
![](https://www.maketecheasier.com/assets/uploads/2015/07/rundirectiso-40-custom-empty.png)
menuentry "Kubuntu 15.04 ISO" {
set isofile="/home/maketecheasier/TempISOs/kubuntu-15.04-desktop-amd64.iso"
loopback loop (hd0,1)$isofile
echo "Starting $isofile..."
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash
initrd (loop)/casper/initrd.lz
}
![](https://www.maketecheasier.com/assets/uploads/2015/07/rundirectiso-40-custom-new.png)
### 分析上述代码 ###
首先设置了一个变量名 `$menuentry` ,这是 ISO 文件的所在位置 。如果你想换一个 ISO ,你应该修改 `isofile="/path/to/file/name-of-iso-file-.iso"`.
下一行是指定回环设备,且必须给出正确的分区号码。
loopback loop (hd0,1)$isofile
注意 hd0,1 这里非常重要,它的意思是第一硬盘,第一分区 (`/dev/sda1`)。
GRUB 的命名在这里稍微有点困惑,对于硬盘来说,它从 “0” 开始计数,第一块硬盘为 #0 ,第二块为 #1 ,第三块为 #2 ,依此类推。但是对于分区来说,它从 “1” 开始计数,第一个分区为 #1 ,第二个分区为 #2 ,依此类推。也许这里有一个很好的原因,但肯定不是明智的(明显用户体验很糟糕)..
在 Linux 中第一块硬盘,第一个分区是 `/dev/sda1` ,但在 GRUB2 中则是 `hd0,1` 。第二块硬盘,第三个分区则是 `hd1,3`, 依此类推.
下一个重要的行是:
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash
这会载入内核镜像,在新的 Ubuntu Live CD 中,内核被存放在 `/casper` 目录,并且命名为 `vmlinuz.efi` 。如果你使用的是其它系统,可能会没有 `.efi` 扩展名或内核被存放在其它地方 (可以使用归档管理器打开 ISO 文件在 `/casper` 中查找确认)。最后一个选项, `quiet splash` ,是一个常规的 GRUB 选项,改不改无所谓。
最后
initrd (loop)/casper/initrd.lz
这会载入 `initrd` ,它负责载入 RAMDisk 到内存用于启动。
### 启动 live 系统 ###
做完上面所有的步骤后,需要更新 GRUB2
sudo update-grub
![](https://www.maketecheasier.com/assets/uploads/2015/07/rundirectiso-updare-grub.png)
当重启系统后,应该可以看见一个新的、并且允许我们启动刚刚配置的 ISO 镜像的 GRUB 条目:
![](https://www.maketecheasier.com/assets/uploads/2015/07/rundirectiso-grub-menu.png)
选择这个新条目就允许我们像从 DVD 或 U 盘中启动一个 live 环境一样。
--------------------------------------------------------------------------------
via: https://www.maketecheasier.com/run-iso-files-hdd-grub2/
作者:[Attila Orosz][a]
译者:[Locez](https://github.com/locez)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.maketecheasier.com/author/attilaorosz/
[1]:http://git.marmotte.net/git/glim/tree/grub2

View File

@ -0,0 +1,279 @@
5 个在 Linux 中管理文件类型和系统时间的有用命令
================================================================================
对于想学习 Linux 的初学者来说要适应使用命令行或者终端可能非常困难。由于终端比图形用户界面程序更能帮助用户控制 Linux 系统,我们必须习惯在终端中运行命令。因此为了有效记忆 Linux 不同的命令,你应该每天使用终端并明白怎样将命令和不同选项以及参数一同使用。
![在 Linux 中管理文件类型并设置时间](http://www.tecmint.com/wp-content/uploads/2015/09/Find-File-Types-in-Linux.jpg)
*在 Linux 中管理文件类型并设置时间*
请先查看我们 Linux 小技巧系列之前的文章:
- [5 个有趣的 Linux 命令行技巧][2]
- [给新手的 10 个有用 Linux 命令行技巧][3]
在这篇文章中,我们打算看看终端中 5 个和文件以及时间相关的提示和技巧。
### Linux 中的文件类型 ###
在 Linux 中,一切皆文件,你的设备、目录以及普通文件都认为是文件。
Linux 系统中文件有不同的类型:
- 普通文件:可能包含命令、文档、音频文件、视频、图像,归档文件等。
- 设备文件:系统用于访问你硬件组件。
这里有两种表示存储设备的设备文件:块文件,例如硬盘,它们以块读取数据;字符文件,以逐个字符读取数据。
- 硬链接和软链接:用于在 Linux 文件系统的任意地方访问文件。
- 命名管道和套接字:允许不同的进程之间进行交互。
#### 1. 用 file 命令确定文件类型 ####
你可以像下面这样使用 file 命令确定文件的类型。下面的截图显示了用 file 命令确定不同文件类型的例子。
tecmint@tecmint ~/Linux-Tricks $ dir
BACKUP master.zip
crossroads-stable.tar.gz num.txt
EDWARD-MAYA-2011-2012-NEW-REMIX.mp3 reggea.xspf
Linux-Security-Optimization-Book.gif tmp-link
tecmint@tecmint ~/Linux-Tricks $ file BACKUP/
BACKUP/: directory
tecmint@tecmint ~/Linux-Tricks $ file master.zip
master.zip: Zip archive data, at least v1.0 to extract
tecmint@tecmint ~/Linux-Tricks $ file crossroads-stable.tar.gz
crossroads-stable.tar.gz: gzip compressed data, from Unix, last modified: Tue Apr 5 15:15:20 2011
tecmint@tecmint ~/Linux-Tricks $ file Linux-Security-Optimization-Book.gif
Linux-Security-Optimization-Book.gif: GIF image data, version 89a, 200 x 259
tecmint@tecmint ~/Linux-Tricks $ file EDWARD-MAYA-2011-2012-NEW-REMIX.mp3
EDWARD-MAYA-2011-2012-NEW-REMIX.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 192 kbps, 44.1 kHz, JntStereo
tecmint@tecmint ~/Linux-Tricks $ file /dev/sda1
/dev/sda1: block special
tecmint@tecmint ~/Linux-Tricks $ file /dev/tty1
/dev/tty1: character special
#### 2. 用 lsdir 命令确定文件类型 ####
确定文件类型的另一种方式是用 ls 和 [dir][4] 命令显示一长串结果。
用 ls -l 确定一个文件的类型。
当你查看文件权限时,第一个字符显示了文件类型,其它字符显示文件权限。
tecmint@tecmint ~/Linux-Tricks $ ls -l
total 6908
drwxr-xr-x 2 tecmint tecmint 4096 Sep 9 11:46 BACKUP
-rw-r--r-- 1 tecmint tecmint 1075620 Sep 9 11:47 crossroads-stable.tar.gz
-rwxr----- 1 tecmint tecmint 5916085 Sep 9 11:49 EDWARD-MAYA-2011-2012-NEW-REMIX.mp3
-rw-r--r-- 1 tecmint tecmint 42122 Sep 9 11:49 Linux-Security-Optimization-Book.gif
-rw-r--r-- 1 tecmint tecmint 17627 Sep 9 11:46 master.zip
-rw-r--r-- 1 tecmint tecmint 5 Sep 9 11:48 num.txt
-rw-r--r-- 1 tecmint tecmint 0 Sep 9 11:46 reggea.xspf
-rw-r--r-- 1 tecmint tecmint 5 Sep 9 11:47 tmp-link
使用 ls -l 确定块和字符文件
tecmint@tecmint ~/Linux-Tricks $ ls -l /dev/sda1
brw-rw---- 1 root disk 8, 1 Sep 9 10:53 /dev/sda1
tecmint@tecmint ~/Linux-Tricks $ ls -l /dev/tty1
crw-rw---- 1 root tty 4, 1 Sep 9 10:54 /dev/tty1
使用 dir -l 确定一个文件的类型。
tecmint@tecmint ~/Linux-Tricks $ dir -l
total 6908
drwxr-xr-x 2 tecmint tecmint 4096 Sep 9 11:46 BACKUP
-rw-r--r-- 1 tecmint tecmint 1075620 Sep 9 11:47 crossroads-stable.tar.gz
-rwxr----- 1 tecmint tecmint 5916085 Sep 9 11:49 EDWARD-MAYA-2011-2012-NEW-REMIX.mp3
-rw-r--r-- 1 tecmint tecmint 42122 Sep 9 11:49 Linux-Security-Optimization-Book.gif
-rw-r--r-- 1 tecmint tecmint 17627 Sep 9 11:46 master.zip
-rw-r--r-- 1 tecmint tecmint 5 Sep 9 11:48 num.txt
-rw-r--r-- 1 tecmint tecmint 0 Sep 9 11:46 reggea.xspf
-rw-r--r-- 1 tecmint tecmint 5 Sep 9 11:47 tmp-link
#### 3. 统计指定类型文件的数目 ####
下面我们来看看在一个目录中用 ls[grep][5] 和 [wc][6] 命令统计指定类型文件数目的技巧。命令之间的交互通过命名管道完成。
- grep 用户根据给定模式或正则表达式进行搜索的命令。
- wc 用于统计行、字和字符的命令。
**统计普通文件的数目**
在 Linux 中,普通文件用符号 `-` 表示。
tecmint@tecmint ~/Linux-Tricks $ ls -l | grep ^- | wc -l
7
**统计目录的数目**
在 Linux 中,目录用符号 `d` 表示。
tecmint@tecmint ~/Linux-Tricks $ ls -l | grep ^d | wc -l
1
**统计符号链接和硬链接的数目**
在 Linux 中,符号链接和硬链接用符号 `l` 表示。
tecmint@tecmint ~/Linux-Tricks $ ls -l | grep ^l | wc -l
0
**统计块文件和字符文件的数目**
在 Linux 中,块和字符文件用符号 `b``c` 表示。
tecmint@tecmint ~/Linux-Tricks $ ls -l /dev | grep ^b | wc -l
37
tecmint@tecmint ~/Linux-Tricks $ ls -l /dev | grep ^c | wc -l
159
#### 4. 在 Linux 系统中查找文件 ####
下面我们来看看在 Linux 系统中查找文件一些命令,它们包括 locate、find、whatis 和 which 命令。
**用 locate 命令查找文件**
在下面的输出中,我想要定位系统中的 [Samba 服务器配置文件][7]
tecmint@tecmint ~/Linux-Tricks $ locate samba.conf
/usr/lib/tmpfiles.d/samba.conf
/var/lib/dpkg/info/samba.conffiles
**用 find 命令查找文件**
想要学习如何在 Linux 中使用 find 命令,你可以阅读我们以下的文章,里面列出了 find 命令的 30 多个例子和使用方法。
- [Linux 中 35 个 find 命令示例][8]
**用 whatis 命令定位命令**
whatis 命令通常用于定位命令,它很特殊,因为它给出关于一个命令的信息,它还能查找配置文件和命令的帮助手册条目。
tecmint@tecmint ~/Linux-Tricks $ whatis bash
bash (1) - GNU Bourne-Again SHell
tecmint@tecmint ~/Linux-Tricks $ whatis find
find (1) - search for files in a directory hierarchy
tecmint@tecmint ~/Linux-Tricks $ whatis ls
ls (1) - list directory contents
**用 which 命令定位命令**
which 命令用于定位文件系统中的命令。
tecmint@tecmint ~/Linux-Tricks $ which mkdir
/bin/mkdir
tecmint@tecmint ~/Linux-Tricks $ which bash
/bin/bash
tecmint@tecmint ~/Linux-Tricks $ which find
/usr/bin/find
tecmint@tecmint ~/Linux-Tricks $ $ which ls
/bin/ls
#### 5.处理 Linux 系统的时间 ####
在联网环境中,保持你 Linux 系统时间准确是一个好的习惯。Linux 系统中有很多服务要求时间正确才能在联网条件下正常工作。
让我们来看看你可以用来管理你机器时间的命令。在 Linux 中,有两种方式管理时间:系统时间和硬件时间。
系统时间由系统时钟管理,硬件时间由硬件时钟管理。
要查看你的系统时间、日期和时区,像下面这样使用 date 命令。
tecmint@tecmint ~/Linux-Tricks $ date
Wed Sep 9 12:25:40 IST 2015
像下面这样用 date -s 或 date -set=“STRING” 设置系统时间。
tecmint@tecmint ~/Linux-Tricks $ sudo date -s "12:27:00"
Wed Sep 9 12:27:00 IST 2015
tecmint@tecmint ~/Linux-Tricks $ sudo date --set="12:27:00"
Wed Sep 9 12:27:00 IST 2015
你也可以像下面这样设置时间和日期。
tecmint@tecmint ~/Linux-Tricks $ sudo date 090912302015
Wed Sep 9 12:30:00 IST 2015
使用 cal 命令从日历中查看当前日期。
tecmint@tecmint ~/Linux-Tricks $ cal
September 2015
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
使用 hwclock 命令查看硬件时钟时间。
tecmint@tecmint ~/Linux-Tricks $ sudo hwclock
Wednesday 09 September 2015 06:02:58 PM IST -0.200081 seconds
要设置硬件时钟时间,像下面这样使用 hwclock set date=“STRING” 命令。
tecmint@tecmint ~/Linux-Tricks $ sudo hwclock --set --date="09/09/2015 12:33:00"
tecmint@tecmint ~/Linux-Tricks $ sudo hwclock
Wednesday 09 September 2015 12:33:11 PM IST -0.891163 seconds
系统时间是由硬件时钟时间在启动时设置的,系统关闭时,硬件时间被重置为系统时间。
因此你查看系统时间和硬件时间时,它们是一样的,除非你更改了系统时间。当你的 CMOS 电量不足时,硬件时间可能不正确。
你也可以像下面这样使用硬件时钟的时间设置系统时间。
$ sudo hwclock --hctosys
也可以像下面这样用系统时钟时间设置硬件时钟时间。
$ sudo hwclock --systohc
要查看你的 Linux 系统已经运行了多长时间,可以使用 uptime 命令。
tecmint@tecmint ~/Linux-Tricks $ uptime
12:36:27 up 1:43, 2 users, load average: 1.39, 1.34, 1.45
tecmint@tecmint ~/Linux-Tricks $ uptime -p
up 1 hour, 43 minutes
tecmint@tecmint ~/Linux-Tricks $ uptime -s
2015-09-09 10:52:47
### 总结 ###
对于初学者来说理解 Linux 中的文件类型是一个好的尝试,同时时间管理也非常重要,尤其是在需要可靠有效地管理服务的服务器上。希望这篇指南能对你有所帮助。如果你有任何反馈,别忘了给我们写评论。和我们保持联系。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/manage-file-types-and-set-system-time-in-linux/
作者:[Aaron Kili][a]
译者:[ictlyh](http://www.mutouxiaogui.cn/blog/)
校对:[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/tag/linux-tricks/
[2]:https://linux.cn/article-5485-1.html
[3]:https://linux.cn/article-6314-1.html
[4]:http://www.tecmint.com/linux-dir-command-usage-with-examples/
[5]:https://linux.cn/article-2250-1.html
[6]:http://www.tecmint.com/wc-command-examples/
[7]:http://www.tecmint.com/setup-samba-file-sharing-for-linux-windows-clients/
[8]:http://www.tecmint.com/35-practical-examples-of-linux-find-command/

View File

@ -0,0 +1,102 @@
在 Ubuntu 14.04/15.04 上配置 Node JS v4.0.0
================================================================================
大家好Node.JS 4.0 发布了,这个流行的服务器端 JS 平台合并了 Node.js 和 io.js 的代码4.0 版就是这两个项目结合的产物——现在合并为一个代码库。这次最主要的变化是 Node.js 封装了4.5 版本的 Google V8 JS 引擎,与当前的 Chrome 所带的一致。所以,紧跟 V8 的发布可以让 Node.js 运行的更快、更安全,同时更好的利用 ES6 的很多语言特性。
![Node JS](http://blog.linoxide.com/wp-content/uploads/2015/09/nodejs.png)
Node.js 4.0 发布的主要目标是为 io.js 用户提供一个简单的升级途径,所以这次并没有太多重要的 API 变更。下面的内容让我们来看看如何轻松的在 ubuntu server 上安装、配置 Node.js。
### 基础系统安装 ###
Node 在 LinuxMacintoshSolaris 这几个系统上都可以完美的运行linux 的发行版本当中使用 Ubuntu 相当适合。这也是我们为什么要尝试在 ubuntu 15.04 上安装 Node.js当然了在 14.04 上也可以使用相同的步骤安装。
#### 1) 系统资源 ####
Node.js 所需的基本的系统资源取决于你的架构需要。本教程我们会在一台 1GB 内存、 1GHz 处理器和 10GB 磁盘空间的服务器上进行,最小安装即可,不需要安装 Web 服务器或数据库服务器。
#### 2) 系统更新 ####
在我们安装 Node.js 之前,推荐你将系统更新到最新的补丁和升级包,所以请登录到系统中使用超级用户运行如下命令:
# apt-get update
#### 3) 安装依赖 ####
Node.js 仅需要你的服务器上有一些基本系统和软件功能,比如 'make'、'gcc'和'wget' 之类的。如果你还没有安装它们,运行如下命令安装:
# apt-get install python gcc make g++ wget
### 下载最新版的Node JS v4.0.0 ###
访问链接 [Node JS Download Page][1] 下载源代码.
![nodejs download](http://blog.linoxide.com/wp-content/uploads/2015/09/download.png)
复制其中的最新的源代码的链接,然后用`wget` 下载,命令如下:
# wget https://nodejs.org/download/rc/v4.0.0-rc.1/node-v4.0.0-rc.1.tar.gz
下载完成后使用命令`tar` 解压缩:
# tar -zxvf node-v4.0.0-rc.1.tar.gz
![wget nodejs](http://blog.linoxide.com/wp-content/uploads/2015/09/wget.png)
### 安装 Node JS v4.0.0 ###
现在可以开始使用下载好的源代码编译 Node.js。在开始编译前你需要在 ubuntu server 上切换到源代码解压缩后的目录,运行 configure 脚本来配置源代码。
root@ubuntu-15:~/node-v4.0.0-rc.1# ./configure
![Installing NodeJS](http://blog.linoxide.com/wp-content/uploads/2015/09/configure.png)
现在运行命令 'make install' 编译安装 Node.js
root@ubuntu-15:~/node-v4.0.0-rc.1# make install
make 命令会花费几分钟完成编译,安静的等待一会。
### 验证 Node.js 安装 ###
一旦编译任务完成,我们就可以开始验证安装工作是否 OK。我们运行下列命令来确认 Node.js 的版本。
root@ubuntu-15:~# node -v
v4.0.0-pre
在命令行下不带参数的运行`node` 就会进入 REPL(Read-Eval-Print-Loop,读-执行-输出-循环)模式它有一个简化版的emacs 行编辑器通过它你可以交互式的运行JS和查看运行结果。
![node version](http://blog.linoxide.com/wp-content/uploads/2015/09/node.png)
### 编写测试程序 ###
我们也可以写一个很简单的终端程序来测试安装是否成功并且工作正常。要做这个我们将会创建一个“test.js” 文件,包含以下代码,操作如下:
root@ubuntu-15:~# vim test.js
var util = require("util");
console.log("Hello! This is a Node Test Program");
:wq!
现在为了运行上面的程序,在命令行运行下面的命令。
root@ubuntu-15:~# node test.js
![Node Program](http://blog.linoxide.com/wp-content/uploads/2015/09/node-test.png)
在一个成功安装了 Node JS 的环境下运行上面的程序就会在屏幕上得到上图所示的输出,这个程序加载类 “util” 到变量 “util” 中,接着用对象 “util” 运行终端任务console.log 这个命令作用类似 C++ 里的cout
### 结论 ###
就是这些了。如果你刚刚开始使用 Node.js 开发应用程序,希望本文能够通过在 ubuntu 上安装、运行 Node.js 让你了解一下Node.js 的大概。最后,我们可以认为我们可以期待 Node JS v4.0.0 能够取得显著性能提升。
--------------------------------------------------------------------------------
via: http://linoxide.com/ubuntu-how-to/setup-node-js-4-0-ubuntu-14-04-15-04/
作者:[Kashif Siddique][a]
译者:[osk874](https://github.com/osk874)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://linoxide.com/author/kashifs/
[1]:https://nodejs.org/download/rc/v4.0.0-rc.1/

View File

@ -0,0 +1,72 @@
Linux 有问必答:如何在 Linux 命令行下浏览天气预报
================================================================================
> **Q**: 我经常在 Linux 桌面查看天气预报。然而,是否有一种在终端环境下,不通过桌面小插件或者浏览器查询天气预报的方法?
对于 Linux 桌面用户来说,有很多办法获取天气预报,比如使用专门的天气应用、桌面小插件,或者面板小程序。但是如果你的工作环境是基于终端的,这里也有一些在命令行下获取天气的手段。
其中有一个就是 [wego][1]**一个终端下的小巧程序**。使用基于 ncurses 的接口,这个命令行程序允许你查看当前的天气情况和之后的预报。它也会通过一个天气预报的 API 收集接下来 5 天的天气预报。
### 在 Linux 下安装 wego ###
安装 wego 相当简单。wego 是用 Go 编写的,引起第一个步骤就是安装 [Go 语言][2]。然后再安装 wego。
$ go get github.com/schachmat/wego
wego 会被安装到 $GOPATH/bin所以要将 $GOPATH/bin 添加到 $PATH 环境变量。
$ echo 'export PATH="$PATH:$GOPATH/bin"' >> ~/.bashrc
$ source ~/.bashrc
现在就可与直接从命令行启动 wego 了。
$ wego
第一次运行 weg 会生成一个配置文件(`~/.wegorc`),你需要指定一个天气 API key。
你可以从 [worldweatheronline.com][3] 获取一个免费的 API key。免费注册和使用。你只需要提供一个有效的邮箱地址。
![](https://farm6.staticflickr.com/5781/21317466341_5a368b0d26_c.jpg)
你的 .wegorc 配置文件看起来会这样:
![](https://farm6.staticflickr.com/5620/21121418558_df0d27cd0a_b.jpg)
除了 API key你还可以把你想要查询天气的地方、使用的城市/国家名称、语言配置在 `~/.wegorc` 中。
注意,这个天气 API 的使用有限制:每秒最多 5 次查询,每天最多 250 次查询。
当你重新执行 wego 命令,你将会看到最新的天气预报(当然是你的指定地方),如下显示。
![](https://farm6.staticflickr.com/5776/21121218110_dd51e03ff4_c.jpg)
显示出来的天气信息包括:(1)温度,(2)风速和风向,(3)可视距离,(4)降水量和降水概率
默认情况下会显示3 天的天气预报。如果要进行修改可以通过参数改变天气范围最多5天比如要查看 5 天的天气预报:
$ wego 5
如果你想检查另一个地方的天气,只需要提供城市名即可:
$ wego Seattle
### 问题解决 ###
1. 可能会遇到下面的错误:
user: Current not implemented on linux/amd64
当你在一个不支持原生 Go 编译器的环境下运行 wego 时就会出现这个错误。在这种情况下你只需要使用 gccgo ——一个 Go 的编译器前端来编译程序即可。这一步可以通过下面的命令完成。
$ sudo yum install gcc-go
$ go get -compiler=gccgo github.com/schachmat/wego
--------------------------------------------------------------------------------
via: http://ask.xmodulo.com/weather-forecasts-command-line-linux.html
作者:[Dan Nanni][a]
译者:[oska874](https://github.com/oska874)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://ask.xmodulo.com/author/nanni
[1]:https://github.com/schachmat/wego
[2]:http://ask.xmodulo.com/install-go-language-linux.html
[3]:https://developer.worldweatheronline.com/auth/register

View File

@ -1,27 +1,28 @@
在 Ubuntu 和 Linux Mint 上安装 Terminator 0.98
================================================================================
[Terminator][1]在一个窗口中有多个终端。该项目的目标之一是为管理终端提供一个有用的工具。它的灵感来自于类似 gnome-multi-termquankonsole 等程序,这些程序关注于在窗格中管理终端。 Terminator 0.98 带来了更完美的标签功能,更好的布局保存/恢复,改进了偏好用户界面和多 bug 修复。
[Terminator][1]它可以在一个窗口内打开多个终端。该项目的目标之一是为摆放终端提供一个有用的工具。它的灵感来自于类似 gnome-multi-termquankonsole 等程序,这些程序关注于按网格摆放终端。 Terminator 0.98 带来了更完美的标签功能,更好的布局保存/恢复,改进了偏好用户界面和多 bug 修复。
![](http://www.ewikitech.com/wp-content/uploads/2015/09/Screenshot-from-2015-09-17-094828.png)
###TERMINATOR 0.98 的更改和新特性
- 添加了一个布局启动器,允许在不用布局之间简单切换(用 Alt + L 打开一个新的布局切换器);
- 添加了一个新的手册(使用 F1 打开);
- 保存的时候,布局现在会记住:
- * 最大化和全屏状态
- * 窗口标题
- * 激活的标签
- * 激活的终端
- * 每个终端的工作目录
- 添加选项用于启用/停用非同标签和滚动箭头;
- 最大化和全屏状态
- 窗口标题
- 激活的标签
- 激活的终端
- 每个终端的工作目录
- 添加选项用于启用/停用非同non-homogenous标签和滚动箭头;
- 添加快捷键用于按行/半页/一页向上/下滚动;
- 添加使用 Ctrl+鼠标滚轮放大/缩小Shift+鼠标滚轮向上/下滚动页面;
- 为下一个/上一个 profile 添加快捷键
- 添加使用 Ctrl+鼠标滚轮放大/缩小Shift+鼠标滚轮向上/下滚动页面;
- 为下一个/上一个配置文件profile添加快捷键
- 改进自定义命令菜单的一致性
- 新增快捷方式/代码来切换所有/标签分组;
- 改进监视插件
- 增加搜索栏切换;
- 清理和重新组织窗口偏好,包括一个完整的全局便签更新
- 清理和重新组织偏好preferences窗口,包括一个完整的全局便签更新
- 添加选项用于设置 ActivityWatcher 插件静默时间
- 其它一些改进和 bug 修复
- [点击此处查看完整更新日志][2]
@ -37,10 +38,6 @@ Terminator 0.98 有可用的 PPA首先我们需要在 Ubuntu/Linux Mint 上
如果你想要移除 Terminator只需要在终端中运行下面的命令可选
$ sudo apt-get remove terminator
--------------------------------------------------------------------------------
@ -48,7 +45,7 @@ via: http://www.ewikitech.com/articles/linux/terminator-install-ubuntu-linux-min
作者:[admin][a]
译者:[ictlyh](http://mutouxiaogui.cn/blog)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -1,26 +1,26 @@
如何在Ubuntu中添加和删除书签[新手技巧]
[新手技巧] 如何在Ubuntu中添加和删除书签
================================================================================
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/09/Add-Bookmark.jpg)
这是一篇对完全是新手的一篇技巧我将向你展示如何在Ubuntu文件管理器中添加书签。
现在如果你想知道为什么要这么做,答案很简单。它可以让你可以快速地在左边栏中访问。比如。我[在Ubuntu中安装了Copy][1]。现在它创建了/Home/Copy。先进入Home目录再进入Copy目录并不是一件大事,但是我想要更快地访问它。因此我添加了一个书签这样我就可以直接从侧边栏访问了。
现在如果你想知道为什么要这么做,答案很简单。它可以让你可以快速地在左边栏中访问。比如,我[在Ubuntu中安装了Copy 云服务][1]。它创建在/Home/Copy。先进入Home目录再进入Copy目录并不是很麻烦,但是我想要更快地访问它。因此我添加了一个书签这样我就可以直接从侧边栏访问了。
### 在Ubuntu中添加书签 ###
打开Files。进入你想要保存快速访问的目录。你需要在标记书签的目录里面。
现在,你有两种方法
现在,你有两种方法
#### 方法1: ####
当你在Files中时Ubuntu中的文件管理器查看顶部菜单。你会看到书签按钮。点击它你会看到将当前路径保存为书签的选项。
当你在FilesUbuntu中的文件管理器中时,查看顶部菜单。你会看到书签按钮。点击它你会看到将当前路径保存为书签的选项。
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/09/Add-Bookmark-Ubuntu.jpeg)
#### 方法 2: ####
你可以直接按下Ctrl+D就可以将当前位置保存书签。
你可以直接按下Ctrl+D就可以将当前位置保存书签。
如你所见这里左边栏就有一个新添加的Copy目录
@ -32,7 +32,7 @@
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/09/Remove-bookmark-ubuntu.png)
这就是在Ubuntu中管理书签需要做的。我知道这对于大多数用户而言很但是这也许多Ubuntu的新手而言或许还有用。
这就是在Ubuntu中管理书签需要做的。我知道这对于大多数用户而言很简单但是这也许多Ubuntu的新手而言或许还有用。
--------------------------------------------------------------------------------
@ -40,7 +40,7 @@ via: http://itsfoss.com/add-remove-bookmarks-ubuntu/
作者:[Abhishek][a]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -1,28 +1,29 @@
在 Ubuntu 15.04 上安装 Justniffer
================================================================================
### 简介 ###
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/09/monitoring1.jpg)
[Justniffer][1] 是一个可用于替 Snort 的网络协议分析器。它非常流行,可交互式地跟踪/探测一个网络连接。它能从实时环境中抓取流量,支持 “lipcap” 和 “tcpdump” 文件格式。它可以帮助用户分析一个用 wireshark 难以抓包的复杂网络。尤其是它可以有效的帮助分析应用层流量能提取类似图像、脚本、HTML 等 http 内容。Justniffer 有助于理解不同组件之间是如何通信的。
[Justniffer][1] 是一个可用于替 Snort 的网络协议分析器。它非常流行,可交互式地跟踪/探测一个网络连接。它能从实时环境中抓取流量,支持 “lipcap” 和 “tcpdump” 文件格式。它可以帮助用户分析一个用 wireshark 难以抓包的复杂网络。尤其是它可以有效的帮助分析应用层流量能提取类似图像、脚本、HTML 等 http 内容。Justniffer 有助于理解不同组件之间是如何通信的。
### 功能 ###
Justniffer 收集一个复杂网络的所有流量而不影响系统性能,这是 Justniffer 的一个优势它还可以保存日志用于之后的分析Justniffer 其它一些重要功能包括:
Justniffer 可以收集一个复杂网络的所有流量而不影响系统性能,这是 Justniffer 的一个优势它还可以保存日志用于之后的分析Justniffer 其它一些重要功能包括:
#### 1. 可靠的 TCP 流重建 ####
1. 可靠的 TCP 流重建
它可以使用主机 Linux 内核的一部分用于记录并重现 TCP 片段和 IP 片段。
它可以使用主机 Linux 内核的一部分用于记录并重现 TCP 片段和 IP 片段。
#### 2. 日志 ####
2. 日志
保存日志用于之后的分析,并能自定义保存内容和时间。
保存日志用于之后的分析,并能自定义保存内容和时间。
#### 3. 可扩展 ####
3. 可扩展
可以通过外部 python、 perl 和 bash 脚本扩展来从分析报告中获取一些额外的结果。
可以通过外部 python、 perl 和 bash 脚本扩展来从分析报告中获取一些额外的结果。
#### 4. 性能管理 ####
4. 性能管理
基于连接时间、关闭时间、响应时间或请求时间等提取信息。
基于连接时间、关闭时间、响应时间或请求时间等提取信息。
### 安装 ###
@ -44,41 +45,41 @@ make 的时候失败了,然后我运行下面的命令并尝试重新安装服
$ sudo apt-get -f install
### 例 ###
### 例 ###
首先用 -v 选项验证安装的 Justniffer 版本,你需要用超级用户权限来使用这个工具。
$ sudo justniffer -V
例输出:
例输出:
![j](http://www.unixmen.com/wp-content/uploads/2015/09/j.png)
**1. 为 eth1 接口导出 apache 中的流量到终端**
**1、 以类似 apache 的格式导出 eth1 接口流量,显示到终端**
$ sudo justniffer -i eth1
例输出:
例输出:
![Selection_001](http://www.unixmen.com/wp-content/uploads/2015/09/Selection_0013.png)
**2. 可以永恒下面的选项跟踪正在运行的 tcp 流**
**2、 可以用下面的选项跟踪正在运行的 tcp 流**
$ sudo justniffer -i eth1 -r
例输出:
例输出:
![Selection_002](http://www.unixmen.com/wp-content/uploads/2015/09/Selection_0023.png)
**3. 获取 web 服务器的响应时间**
**3、 获取 web 服务器的响应时长**
$ sudo justniffer -i eth1 -a " %response.time"
例输出:
例输出:
![Selection_003](http://www.unixmen.com/wp-content/uploads/2015/09/Selection_0033.png)
**4. 使用 Justniffer 读取一个 tcpdump 抓取的文件**
**4 使用 Justniffer 读取一个 tcpdump 抓取的文件**
首先,用 tcpdump 抓取流量。
@ -88,33 +89,33 @@ make 的时候失败了,然后我运行下面的命令并尝试重新安装服
$ justniffer -f file.cap
例输出:
例输出:
![Selection_005](http://www.unixmen.com/wp-content/uploads/2015/09/Selection_0056.png)
**5. 只抓取 http 数据**
**5 只抓取 http 数据**
$ sudo justniffer -i eth1 -r -p "port 80 or port 8080"
例输出:
例输出:
![Selection_006](http://www.unixmen.com/wp-content/uploads/2015/09/Selection_0064.png)
**6. 从一个指定主机获取 http 数据**
**6、 获取一个指定主机 http 数据**
$ justniffer -i eth1 -r -p "host 192.168.1.250 and tcp port 80"
例输出:
例输出:
![Selection_007](http://www.unixmen.com/wp-content/uploads/2015/09/Selection_0074.png)
**7. 以更精确的格式抓取数据**
**7 以更精确的格式抓取数据**
当你输入 **justniffer -h** 的时候你可以看到很多用于以更精确的方式获取数据的格式关键字
$ justniffer -h
例输出:
例输出:
![Selection_008](http://www.unixmen.com/wp-content/uploads/2015/09/Selection_0083.png)
@ -122,15 +123,15 @@ make 的时候失败了,然后我运行下面的命令并尝试重新安装服
$ justniffer -i eth1 -l "%request.timestamp %request.header.host %request.url %response.time"
例输出:
例输出:
![Selection_009](http://www.unixmen.com/wp-content/uploads/2015/09/Selection_0094.png)
其中还有很多你可以探索的选项
其中还有很多你可以探索的选项
### 总结 ###
Justniffer 是用于网络测试一个很好的工具。在我看来对于那些用 Snort 来进行网络探测的用户来说Justniffer 是一个更简单的工具。它提供了很多 **格式关键字** 用于按照你的需要精确地提取数据。你可以用 .cap 文件格式记录网络信息,之后用于分析监视网络服务性能。
Justniffer 是一个很好的用于网络测试的工具。在我看来对于那些用 Snort 来进行网络探测的用户来说Justniffer 是一个更简单的工具。它提供了很多 **格式关键字** 用于按照你的需要精确地提取数据。你可以用 .cap 文件格式记录网络信息,之后用于分析监视网络服务性能。
**参考资料:**
@ -142,7 +143,7 @@ via: http://www.unixmen.com/install-justniffer-ubuntu-15-04/
作者:[Rajneesh Upadhyay][a]
译者:[ictlyh](http://mutouxiaogui.cn/blog)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -1,10 +1,10 @@
如何在Ubuntu 14.04 / 15.04中设置IonCube Loaders
================================================================================
IonCube Loaders是PHP中用于辅助加速页面的加解密工具。它保护你的PHP代码不会被在未授权的计算机上查看。使用ionCube编码并加密PHP需要一个叫ionCube Loader的文件安装在web服务器上并提供给需要大量访问的PHP用。它在运行时处理并执行编码。PHP只需在php.ini中添加一行就可以使用这个loader。
IonCube Loaders是一个PHP中用于加解密的工具并带有加速页面运行的功能。它也可以保护你的PHP代码不会查看和运行在未授权的计算机上。要使用ionCube编码、加密的PHP文件需要在web服务器上安装一个叫ionCube Loader的文件并需要让 PHP 可以访问到,很多 PHP 应用都在用它。它可以在运行时读取并执行编码过后的代码。PHP只需在php.ini中添加一行就可以使用这个loader。
### 前提条件 ###
在这篇文章中我们将在Ubuntu14.04/15.04安装Ioncube Loader 以便它可以在所有PHP模式中使用。本教程的唯一要求就是你系统安装了LEMP并有“php.ini”文件。
在这篇文章中我们将在Ubuntu14.04/15.04安装Ioncube Loader 以便它可以在所有PHP模式中使用。本教程的唯一要求就是你系统安装了LEMP并有“php.ini”文件。
### 下载 IonCube Loader ###
@ -14,15 +14,15 @@ IonCube Loaders是PHP中用于辅助加速页面的加解密工具。它保护
![download ioncube](http://blog.linoxide.com/wp-content/uploads/2015/09/download1.png)
下载完成后用下面的命令解压到"/usr/local/src/"。
下载完成后用下面的命令解压到/usr/local/src/"。
# tar -zxvf ioncube_loaders_lin_x86-64.tar.gz -C /usr/local/src/
![extracting archive](http://blog.linoxide.com/wp-content/uploads/2015/09/2-extract.png)
解压完成后我们就可以看到所有的存在的模块。但是我们只需要我们安装的PHP版本的相关模块。
解压完成后我们就可以看到所有提供的模块。但是我们只需要我们所安装的PHP版本的对应模块。
要检查PHP版本你可以运行下面的命令来找出相的模块。
要检查PHP版本你可以运行下面的命令来找出相的模块。
# php -v
@ -30,14 +30,14 @@ IonCube Loaders是PHP中用于辅助加速页面的加解密工具。它保护
根据上面的命令我们知道我们安装的是PHP 5.6.4因此我们需要拷贝合适的模块到PHP模块目录下。
首先我们在“/usr/local/”创建一个叫“ioncube”的目录并复制需的ioncube loader到这里。
首先我们在“/usr/local/”创建一个叫“ioncube”的目录并复制需的ioncube loader到这里。
root@ubuntu-15:/usr/local/src/ioncube# mkdir /usr/local/ioncube
root@ubuntu-15:/usr/local/src/ioncube# cp ioncube_loader_lin_5.6.so ioncube_loader_lin_5.6_ts.so /usr/local/ioncube/
### PHP 配置 ###
我们要在位于"/etc/php5/cli/"文件夹下的"php.ini"中加入下的配置行并重启web服务和php模块。
我们要在位于"/etc/php5/cli/"文件夹下的"php.ini"中加入下的配置行并重启web服务和php模块。
# vim /etc/php5/cli/php.ini
@ -54,7 +54,6 @@ IonCube Loaders是PHP中用于辅助加速页面的加解密工具。它保护
要为我们的网站测试ioncube loader。用下面的内容创建一个"info.php"文件并放在网站的web目录下。
# vim /usr/share/nginx/html/info.php
加入phpinfo的脚本后重启web服务后用域名或者ip地址访问“info.php”。
@ -63,7 +62,6 @@ IonCube Loaders是PHP中用于辅助加速页面的加解密工具。它保护
![php info](http://blog.linoxide.com/wp-content/uploads/2015/09/php-info.png)
From the terminal issue the following command to verify the php version that shows the ionCube PHP Loader is Enabled.
在终端中运行下面的命令来验证php版本并显示PHP Loader已经启用了。
# php -v
@ -74,7 +72,7 @@ From the terminal issue the following command to verify the php version that sho
### 总结 ###
教程的最后你已经了解了在安装有nginx的Ubuntu中安装和配置ionCube Loader如果你正在使用其他的web服务这与其他服务没有明显的差别。因此做完这些安装Loader是很简单的并且在大多数服务器上的安装都不会有问题。然而并没有一个所谓的“标准PHP安装”服务可以通过许多方式安装并启用或者禁用功能。
教程的最后你已经了解了如何在安装有nginx的Ubuntu中安装和配置ionCube Loader如果你正在使用其他的web服务这与其他服务没有明显的差别。因此安装Loader是很简单的并且在大多数服务器上的安装都不会有问题。然而并没有一个所谓的“标准PHP安装”服务可以通过许多方式安装并启用或者禁用功能。
如果你是在共享服务器上那么确保运行了ioncube-loader-helper.php脚本并点击链接来测试运行时安装。如果安装时你仍然遇到了问题欢迎联系我们及给我们留下评论。
@ -84,7 +82,7 @@ via: http://linoxide.com/ubuntu-how-to/setup-ioncube-loaders-ubuntu-14-04-15-04/
作者:[Kashif Siddique][a]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,44 @@
看看新的 Ubuntu 15.10 默认壁纸
================================================================================
**全新的Ubuntu 15.10 Wily Werewolf默认壁纸已经亮相**
乍一看你几乎无法发现与今天4月发布的Ubuntu 15.04中受到折纸启发的Suru设计有什么差别。但是仔细看你就会发现默认背景有一些细微差别。
其中一点是更淡,受到由左上角图片发出的橘黄色光的帮助。保持了角褶皱和色块,但是增加了块和矩形部分。
新的背景由Canonica设计团队的Alex Milazzo设计。
![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/09/ubuntu-1510-wily-werewolf-wallpaper.jpg)
*Ubuntu 15.10 默认桌面背景*
为了凸显变化这个是Ubuntu 15.04的默认壁纸作为比较:
![](http://www.omgubuntu.co.uk/wp-content/uploads/2015/03/suru-desktop-wallpaper-ubuntu-vivid.jpg)
*Ubuntu 15.04 默认壁纸*
### 下载Ubuntu 15.10 壁纸 ###
如果你正运行的是Ubuntu 15.10 Wily Werewolf每日构建版本那么你无法看到这个默认壁纸设计已经亮相但是还没有打包到Wily中。
你不必等到10月份来使用新的设计来作为你的桌面背景。你可以点击下面的按钮下载4096×2304高清壁纸。
- [下载Ubuntu 15.10新的默认壁纸][1]
最后如我们每次在有新壁纸时说的你不必在意发布版品牌和设计细节。如果壁纸不合你的口味或者不想永远用它轻易地就换掉毕竟这不是Ubuntu Phone
**你是新版本的粉丝么?在评论中让我们知道**
--------------------------------------------------------------------------------
via: http://www.omgubuntu.co.uk/2015/09/ubuntu-15-10-wily-werewolf-default-wallpaper
作者:[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://launchpadlibrarian.net/218258177/Wolf_Wallpaper_Desktop_4096x2304_Purple_PNG-24.png

View File

@ -0,0 +1,41 @@
红帽 CEO 对 OpenStack 收益表示乐观
================================================================================
得益于围绕 Linux 和云不断发展的平台与基础设施技术,红帽正在持续快速发展。红帽宣布在九月二十一日完成了 2016 财年第二季度的财务业绩,再次超过预期。
![](http://www.serverwatch.com/imagesvr_ce/1212/icon-redhatcloud-r.jpg)
这一季度,红帽的收入为 5 亿 4 百万美元,和去年同比增长 13%。净收入为 5 千 1 百万美元,超过了 2015 财年第二季度的 4 千 7 百万美元。
展望未来,红帽为下一季度和全年提供了积极的目标。对于第三季度,红帽希望指导收益能在 5亿1千9百万美元和5亿2千3百万美元之间和去年同期相比增长 15%。
对于 2016 财年,红帽的全年指导目标是 20亿4千4百万美元和去年相比增长 14%。
红帽 CFO Frank Calderoni 在电话会议上指出,红帽最高的 30 个订单差不多甚至超过了 1 百万美元。其中有 4 个订单超过 5 百万美元,还有一个超过 1 千万美元。
从近几年的经验来看,红帽产品的交叉销售非常成功,全部订单中有超过 65% 的订单包括了一个或多个红帽应用和新兴技术产品组件。
Calderoni 说 “我们希望这些技术例如中间件、RHEL OpenStack 平台、OpenShift、云管理和存储能持续推动收益增长。”
### OpenStack ###
在电话会议中,红帽 CEO Jim Whitehurst 多次问到 OpenStack 的预期收入。Whitehurst 说得益于安装程序的改进,最近发布的 Red Hat OpenStack Platform 7.0 向前垮了一大步。
Whitehurst 提到:“在识别硬件和使用方面它做的很好,当然,这也意味着在硬件识别并正确使用它们方便还有很多工作要做。”
Whitehurst 说他已经开始注意到很多的生产应用程序开始迁移到 OpenStack 云上来。他也警告说在产业化方面迁移到 OpenStack 大部分只是尝鲜,还并没有成为主流。
对于竞争对手, Whitehurst 尤其提到了微软、惠普和 Mirantis。在他看来很多组织仍然会使用多种操作系统如果他们部分使用了微软产品会更倾向于开源方案作为替代选项。Whitehurst 说在云方面他还没有看到太多和惠普面对面的竞争,但和 Mirantis 则确实如此。
Whitehurst 说 “我们也有几次胜利,客户从 Mirantis 转到了 RHEL。”
--------------------------------------------------------------------------------
via: http://www.serverwatch.com/server-news/red-hat-ceo-optimistic-on-openstack-revenue-opportunity.html
作者:[Sean Michael Kerner][a]
译者:[ictlyh](http://mutouxiaogui.cn/blog)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.serverwatch.com/author/Sean-Michael-Kerner-101580.htm

View File

@ -0,0 +1,155 @@
如何将 Oracle 11g 升级到 Orcale 12c
================================================================================
大家好。今天我们来学习一下如何将 Oracle 11g 升级到 Oracle 12c。开始吧。
在此,我使用的是 CentOS 7 64 位 Linux 发行版。我假设你已经在你的系统上安装了 Oracle 11g。这里我会展示一下安装 Oracle 11g 时我的操作步骤。
我在 Oracle 11g 上选择 “Create and configure a database”如下图所示。
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212cimage1.png)
然后我选择安装 Oracle 11g “Decktop Class”。如果是生产环境你必须选择 “Server Class”。
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212cimage2.png)
然后你输入安装 Oracle 11g 的各种路径以及密码。下面是我自己的 Oracle 11g 安装配置。确保你正确输入了 Oracle 的密码。
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212cimage3.png)
下一步,我按照如下设置 Inventory Directory。
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212cimage4.png)
到这里,我已经向你展示了我安装 Oracle 11g 所做的工作,因为我们开始想升级到 12c。
让我们将 Oracle 11g 升级到 Oracle 12c 吧。
你需要从该[链接][1]上下载两个 zip 文件。下载并解压两个文件到相同目录。文件名为 **linuxamd64_12c_database_1of2.zip** & **linuxamd64_12c_database_2of2.zip**。提取或解压完后,它会创建一个名为 database 的文件夹。
注意:升级到 12c 之前,请确保在你的 CentOS 上已经安装了所有必须的软件包,并且所有的路径变量也已经正确配置,还有其它前提条件也已经满足。
下面是必须使用正确版本安装的一些软件包
- binutils
- compat-libstdc++
- gcc
- glibc
- libaio
- libgcc
- libstdc++
- make
- sysstat
- unixodbc
在因特网上搜索正确的 rpm 版本。
你也可以用一个查询处理多个软件包,然后在输出中查找正确版本。例如,在终端中输入下面的命令:
rpm -q binutils compat-libstdc++ gcc glibc libaio libgcc libstdc++ make sysstat unixodbc
你的系统中必须安装了以下软件包(版本可能或新或旧)
- binutils-2.23.52.0.1-12.el7.x86_64
- compat-libcap1-1.10-3.el7.x86_64
- gcc-4.8.2-3.el7.x86_64
- gcc-c++-4.8.2-3.el7.x86_64
- glibc-2.17-36.el7.i686
- glibc-2.17-36.el7.x86_64
- glibc-devel-2.17-36.el7.i686
- glibc-devel-2.17-36.el7.x86_64
- ksh
- libaio-0.3.109-9.el7.i686
- libaio-0.3.109-9.el7.x86_64
- libaio-devel-0.3.109-9.el7.i686
- libaio-devel-0.3.109-9.el7.x86_64
- libgcc-4.8.2-3.el7.i686
- libgcc-4.8.2-3.el7.x86_64
- libstdc++-4.8.2-3.el7.i686
- libstdc++-4.8.2-3.el7.x86_64
- libstdc++-devel-4.8.2-3.el7.i686
- libstdc++-devel-4.8.2-3.el7.x86_64
- libXi-1.7.2-1.el7.i686
- libXi-1.7.2-1.el7.x86_64
- libXtst-1.2.2-1.el7.i686
- libXtst-1.2.2-1.el7.x86_64
- make-3.82-19.el7.x86_64
- sysstat-10.1.5-1.el7.x86_64
你也需要 unixODBC-2.3.1 或更新版本的驱动。
我希望你安装 Oracle 11g 的时候已经在你的 CentOS 7 上创建了名为 oracle 的用户。让我们以用户 oracle 登录 CentOS。以用户 oracle 登录到 CentOS 之后,在你的 CentOS上打开一个终端。
使用终端更改工作目录并导航到你解压两个 zip 文件的目录。在终端中输入以下命令开始安装 12c。
./runInstaller
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212image5.png)
如果一切顺利,你会看到类似下面的截图,已经开始安装 12c。
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212cimage6.png)
然后你可以选择跳过更新或者下载最近更新。如果是生产服务器,建议你必须更新。我这里选择跳过。
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212cimage7.png)
现在,选择升级现有数据库。
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212cimage8.png)
对于语言,这里已经有 English。点击下一步继续或者你可以根据你的需要添加语言。
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212cimage9.png)
现在,选择企业版。你可以根据你的需求选择。
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212cimage10.png)
然后选择软件位置路径,这些都是不言自明的。
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212cimage11.png)
对于第七步,像下面这样使用默认的选择继续下一步。
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212cimage12.png)
在第九步中,你会看到一个类似下面这样的总结报告。
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212cimage13.png)
如果一切正常,你可以点击第九步中的 install 开始安装,进入第十步。
![](http://www.unixmen.com/wp-content/uploads/2015/09/11g212cimage14.png)
其中你可能会遇到一些错误,你需要通过谷歌找到这些错误的解决方法。你可能遇到的问题会有很多,因此我没有在这里详细介绍。
要有耐心,一步一步走下来最后它会告诉你成功了。否则,在谷歌上搜索做必要的操作解决问题。再一次说明,由于你可能会遇到的错误有很多,我无法在这里提供所有详细介绍。
现在,只需要按照下面屏幕指令配置监听器。
配置完监听器之后它会启动数据库升级助手Database Upgrade Assistant。选择 Upgrade Oracle Database。
![](http://www.unixmen.com/wp-content/uploads/2015/09/DUAimage15.png)
在第二步,你会发现它显示了 11g 的位置路径以及 12c 的位置路径。同时你也会发现它指示说从原来的 Oracle Home Release 11 安装 Oracle Home Release 12.点击下一步进入步骤三。
![](http://www.unixmen.com/wp-content/uploads/2015/09/DUAimage16.png)
按照屏幕上的说明完成安装。
在最后一步,你会看到一个成功窗口,其中你会看到成功升级了 oracle 数据库。
**一个忠告**:对于你的生产服务器,在升级到 12c 之前,请确保你已经在其它平台上测试过,以便你能修复升级过程中遇到的所有错误。永远不要尝试一无所知的时候就升级生产服务器。
--------------------------------------------------------------------------------
via: http://www.unixmen.com/upgrade-from-oracle-11g-to-oracle-12c/
作者:[Mohammad Forhad Iftekher][a]
译者:[ictlyh](http://www.mutouxiaogui.cn/blog/)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.unixmen.com/author/forhad/
[1]:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/database12c-linux-download-1959253.html

View File

@ -1,12 +1,12 @@
Xenlism WildFire: 一个精美的 Linux 桌面版主题
Xenlism WildFire: Linux 桌面的极简风格图标主题
================================================================================
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/09/Xenlism-icon-theme-linux-3.png)
有那么一段时间,我一直使用一个主题,没有更换过。可能是在最近的一段时间都没有一款主题能满足我的需求。有那么一些我认为是[Ubuntu 上最好的图标主题][1],比如 Numix 和 Moka并且我一直也对 Numix 比较满意
有那么一段时间我没更换主题了,可能最近的一段时间没有一款主题能让我眼前一亮了。我考虑过更换 [Ubuntu 上最好的图标主题][1],但是它们和 Numix 和 Moka 差不多,而且我觉得 Numix 也不错
但是,一段时间后,我使用了[Xenslim WildFire][2]并且我必须承认他看起来太好了。Minimail 是当前比较流行的设计趋势。并且 Xenlism 完美的表现了它。平滑和美观。Xenlism 收到了诺基亚的 Meego 和苹果图标的影响。
但是前几天我试了试 [Xenslim WildFire][2],我必须承认,它看起来太棒了。极简风格是设计界当前的流行趋势,而 Xenlism 完美的表现了这种风格。平滑而美观Xenlism 显然受到了诺基亚的 Meego 和苹果图标的影响。
让我们来看一下的几个不同应用的图标:
让我们来看一下的几个不同应用的图标:
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/09/Xenlism-icons.png)
@ -14,15 +14,15 @@ Xenlism WildFire: 一个精美的 Linux 桌面版主题
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/09/Xenlism-icons-1.png)
主题开发者[Nattapong Pullkhow][3], 说,这个图标主题最适合 GNOME但是在 Unity 和 KDE,Mate 上也表现良好。
主题开发者 [Nattapong Pullkhow][3] 说,这个图标主题最适合 GNOME但是在 Unity 和 KDEMate 上也表现良好。
### 安装 Xenlism Wildfire ###
Xenlism Theme 大约有 230 MB, 对于一个主题来说确实很大,但是考虑到它支持的庞大的软件数量,这个大小,确实也不是那么令人吃惊。
Xenlism Theme 大约有 230 MB, 对于一个主题来说确实很大,但是考虑到它支持的庞大的软件数量,这个大小,确实也不是那么令人吃惊。
#### 在 Ubuntu/Debian 上安装 Xenlism ####
在 Ubuntu 的变种中安装前,用以下的命令添加 GPG 秘钥:
在 Ubuntu 系列中安装之前,用以下的命令添加 GPG 秘钥:
sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 90127F5B
@ -42,7 +42,7 @@ Xenlism Theme 大约有 230 MB, 对于一个主题来说确实很大,但是考
sudo nano /etc/pacman.conf
添加如下的代码块,在配置文件中:
添加如下的代码块,在配置文件中:
[xenlism-arch]
SigLevel = Never
@ -55,17 +55,17 @@ Xenlism Theme 大约有 230 MB, 对于一个主题来说确实很大,但是考
#### 使用 Xenlism 主题 ####
在 Ubuntu Unity, [可以使用 Unity Tweak Tool 来改变主题][4]. In GNOME, [使用 Gnome Tweak Tool 改变主题][5]. 我确信你会接下来的步骤,如果你不会,请来信通知我,我会继续完善这篇文章。
在 Ubuntu Unity, [可以使用 Unity Tweak Tool 来改变主题][4]。 在 GNOME 中,[使用 Gnome Tweak Tool 改变主题][5]。 我确信你会接下来的步骤,如果你不会,请来信通知我,我会继续完善这篇文章。
这就是 Xenlism 在 Ubuntu 15.04 Unity 中的截图。同时也使用了 Xenlism 桌面背景。
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/09/Xenlism-icons-2.png)
这看来真棒,不是吗?如果你试用了,并且喜欢他,你可以感谢他的开发者:
这看来真棒,不是吗?如果你试用了,并且喜欢它,你可以感谢它的开发者:
> [Xenlism is a stunning minimal icon theme for Linux. Thanks @xenatt for this beautiful theme.][6]
> [Xenlism 是一个用于 Linux 的、令人兴奋的极简风格的图标主题,感谢 @xenatt 做出这么漂亮的主题。][6]
我希望你喜欢。同时也希望你分享你对这个主题的看法或者你喜欢的主题。Xenlism 真的很棒,可能会替换掉你最喜欢的主题。
我希望你喜欢。同时也希望你分享你对这个主题的看法或者你喜欢的主题。Xenlism 真的很棒,可能会替换掉你最喜欢的主题。
--------------------------------------------------------------------------------
@ -73,7 +73,7 @@ via: http://itsfoss.com/xenlism-wildfire-theme/
作者:[Abhishek][a]
译者:[MikeCoder](https://github.com/MikeCoder)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,127 @@
NGINX Plus 现在完全支持 HTTP/2
================================================================================
早些时候,我们发布了支持 HTTP/2 协议的 [NGINX Plus R7][1]。作为 HTTP 协议的最新标准HTTP/2 的设计为现在的 web 应用程序带来了更高的性能和安全性。LCTT 译注: [开源版本的 NGINX 1.95 也支持 HTTP/2 了][18]。)
NGINX Plus 所实现的 HTTP/2 协议可与现有的网站和应用程序进行无缝衔接。只需要一点改变不管用户选择什么样的浏览器NGINX Plus 都能为用户同时提供 HTTP/1.x 与HTTP/2 的最佳体验。
要支持 HTTP/2 仅需通过可选的 **nginxplushttp2** 软件包。**nginxplus** 和 **nginxplusextras** 软件包支持 SPDY 协议,目前推荐用于生产站点,因为其被大多数浏览器所支持并且代码也是相当成熟了。
### 为什么要使用 HTTP/2 ###
HTTP/2 使数据传输更高效,对你的应用程序更安全。 HTTP/2 相比于 HTTP/1.x 有五个提高性能特点:
- **完全复用** 在一个保持激活keepalive的连接上HTTP/1.1 强制按严格的顺序来处理请求。一个请求必须在下一个请求开始前结束。 HTTP/2 消除了这一要求,允许并行和乱序来处理请求。
- **单一,持久连接** 由于 HTTP/2 允许请求完全复用,所以可以通过单一连接并行下载网页上的所有对象。在 HTTP/1.x 中,使用多个连接来并行下载资源,从而导致使用底层 TCP 协议效率很低。
- **二进制编码** Header 信息使用紧凑的二进制格式发送,而不是纯文本格式,节省了传输字节。
- **Header 压缩** Headers 使用专用的 HPACK 压缩算法来进行压缩,这进一步降低数据通过网络传输的字节。
- **SSL/TLS 加密** 在 HTTP/2 中,强制使用 SSL/TLS。在 [RFC][2] 中并没有强制,其允许纯文本的 HTTP/2但是当前所有实现 HTTP/2的 Web 浏览器都只支持加密。 SSL/TLS 可以使你的网站更安全,并且使用 HTTP/2 各项性能会有提升,加密和解密过程的性能损失就减少了。
要了解更多关于 HTTP/2:
- 请阅读我们的 [白皮书][3]它涵盖了你需要了解HTTP/2 的一切。
- 下载由 Google 的 Ilya Grigorik 编写的 [特别版的高性能浏览器网络电子书][4] 。
### NGINX Plus 如何实现 HTTP/2 ###
我们的 HTTP/2 实现是基于 SPDY 支持的,它已经被广泛部署(使用了 NGINX 或 NGINX Plus 的网站近 75 都使用了 SPDY。使用 NGINX Plus 部署 HTTP/2 时,几乎不会改变你应用程序的配置。本节将讨论 NGINX Plus如何实现对 HTTP/2 的支持。
#### 一个 HTTP/2 网关 ####
![](https://www.nginx.com/wp-content/uploads/2015/09/http2-27-1024x300.png)
NGINX Plus 作为一个 HTTP/2 网关。它与支持 HTTP/2 的客户端 Web 浏览器用 HTTP/2 通讯,而转换 HTTP/2 请求给后端服务器通信时使用 HTTP/1.x或者 FastCGI, SCGI, uWSGI, 等等. 取决于你目前正在使用的协议)。
#### 向后兼容性 ####
![](https://www.nginx.com/wp-content/uploads/2015/09/http2-281-1024x581.png)
在一段时间内,你需要同时支持 HTTP/2 和 HTTP/1.x。在撰写本文时超过50的用户使用的 Web 浏览器已经[支持 HTTP/2][5]但这也意味着近50的人还没有使用。
为了同时支持 HTTP/1.x 和 HTTP/2NGINX Plus 实现了 TLS 上的 Next Protocol Negotiation (NPN)扩展。当 Web 浏览器连接到服务器时,其将所支持的协议列表发送到服务器端。如果浏览器支持的协议列表中包括 h2 - 即 HTTP/2NGINX Plus 将使用 HTTP/2 连接到浏览器。如果浏览器不支持 NPN 或在发送支持的协议列表中没有 h2NGINX Plus 将继续回落到 HTTP/1.x。
### 转向 HTTP/2 ###
NGINX 公司会尽可能帮助大家无缝过渡到使用 HTTP/2。本节介绍了通过对你应用进行改变来启用对 HTTP/2 支持,其中只需对 NGINX Plus 配置进行几个变化。
#### 前提条件 ####
使用 **nginxplushttp2** 软件包升级到 NGINX Plus R7。注意现在还没有支持 HTTP/2 版本的 **nginxplusextras** 软件包。
#### 重定向所有流量到 SSL/TLS ####
如果你的应用尚未使用 SSL/TLS 加密,现在启用它正是一个好的时机。加密你的应用程序可以保护你免受间谍以及来自其他中间人的攻击。一些搜索引擎甚至在搜索结果中对加密站点[提高排名][6]。下面的配置块重定向所有的普通 HTTP 请求到该网站的加密版本。
server {
listen 80;
location / {
return 301 https://$host$request_uri;
}
}
#### 启用 HTTP/2 ####
要启用对 HTTP/2 的支持,只需将 http2 参数添加到所有的 [listen][7] 指令中,也要包括 SSL 参数,因为浏览器不支持不加密的 HTTP/2 请求。
server {
listen 443 ssl http2 default_server;
ssl_certificate server.crt;
ssl_certificate_key server.key;
}
如果有必要,重启 NGINX Plus例如通过运行 `nginx -s reload` 命令。要验证 HTTP/2 是否正常工作,你可以在 [Google Chrome][8] 和 [Firefox][9] 中使用 “HTTP/2 and SPDY indicator” 插件来检查。
### 注意事项 ###
- 在安装 **nginxplushttp2** 包之前, 你必须删除配置文件中所有 listen 指令后的 SPDY 参数(使用 http2 和 ssl 参数来替换它以启用对 HTTP/2 的支持)。使用这个包后,如果 listen 指令后有 spdy 参数NGINX Plus 将无法启动。
- 如果你在 NGINX Plus 前端使用了 Web 应用防火墙WAF请确保它能够解析 HTTP/2或者把它移到 NGINX Plus 后面。
- 此版本不支持在 HTTP/2 RFC 中定义的 “Server Push” 特性。 NGINX Plus 以后的版本可能会支持它。
- NGINX Plus R7 同时支持 SPDY 和 HTTP/2LCTT 译注:但是你只能同时使用其中一种)。在以后的版本中,我们将弃用对 SPDY 的支持。谷歌在2016年初将 [弃用 SPDY][10],因此同时支持这两种协议也非必要。
- 如果 [ssl_prefer_server_ciphers][11] 设置为 on 或者使用了定义在 [Appendix A: TLS 1.2 Ciper Suite Black List][13] 中的 [ssl_ciphers][12] 列表时,浏览器会出现 handshake-errors 而无法正常工作。详细内容请参阅 [section 9.2.2 of the HTTP/2 RFC][14]。
### 特别感谢 ###
NGINX 公司要感谢 [Dropbox][15] 和 [Automattic][16],他们是我们软件的重度使用者,并帮助我们实现 HTTP/2。他们的贡献帮助我们加速完成这个软件我们希望你也能支持他们。
![](https://www.nginx.com/wp-content/themes/nginx-theme/assets/img/landing-page/highperf_nginx_ebook.png)
[O'REILLY'S BOOK ABOUT HTTP/2 & PERFORMANCE TUNING][17]
--------------------------------------------------------------------------------
via: https://www.nginx.com/blog/http2-r7/
作者:[Faisal Memon][a]
译者:[strugglingyouth](https://github.com/strugglingyouth)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.nginx.com/blog/author/fmemon/
[1]:https://www.nginx.com/blog/nginx-plus-r7-released/
[2]:https://tools.ietf.org/html/rfc7540
[3]:https://www.nginx.com/wp-content/uploads/2015/09/NGINX_HTTP2_White_Paper_v4.pdf
[4]:https://www.nginx.com/http2-ebook/
[5]:http://caniuse.com/#feat=http2
[6]:http://googlewebmastercentral.blogspot.co.uk/2014/08/https-as-ranking-signal.html
[7]:http://nginx.org/en/docs/http/ngx_http_core_module.html#listen
[8]:https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en
[9]:https://addons.mozilla.org/en-us/firefox/addon/spdy-indicator/
[10]:http://blog.chromium.org/2015/02/hello-http2-goodbye-spdy-http-is_9.html
[11]:http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_prefer_server_ciphers
[12]:http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ciphers
[13]:https://tools.ietf.org/html/rfc7540#appendix-A
[14]:https://tools.ietf.org/html/rfc7540#section-9.2.2
[15]:http://dropbox.com/
[16]:http://automattic.com/
[17]:https://www.nginx.com/http2-ebook/
[18]:http://mailman.nginx.org/pipermail/nginx-announce/2015/000162.html

View File

@ -0,0 +1,65 @@
Debian 拋弃 Linux 标准规范LSB
=======================
Linux 标准规范LSB是一个意图定义 Linux 发行版为第三方程序所提供的服务和应用层 ABIApplication Binary Interfaces程序二进制界面 的[规范][1]。但 Debian 项目内的某些人正在质疑是否值得维持兼容 LSB他们认为该项工作的工作量巨大但好处有限。
LSB 于2001年首次公布其模型建立在 [POSIX][2] 和[单一 UNIX 规范Single UNIX Specification][3]的基础之上。目前LSB 由 Linux 基金会的一个[工作小组][4]维护。最新的版本是于2015年6月发布的 [LSB 5.0][5]。它定义了五个 LSB 模块(核芯(core)、桌面、语言、成像imaging和试用
每个模块都包含了一系列所需的库及其强制性版本,外加对每个库的公共函数和数据定义的描述。这些模块还包括命名和组织规范,如[文件系统层次标准FHSFilesystem Hierarchy Standard][6]中的文件系统布局或象 Freedesktop 的[XDG 基础目录XDG Base Directory][7]规范这样的目录规范。
似乎只是一个巧合,就在 LSB 5.0 发布的同一周Debian 项目内部针对其是否值得保持兼容 LSB 进行了一次讨论。在另一个贴子中,在提及兼容 LSB 后Didier Raboud 顺势[提议][8]将 Debian 的兼容工作维持在最低水平。他说目前的情况是Debian 的“lsb-*” 元包( meta-packages试图规定该标准中提及的库的正确版本但事实上却没有人去检查所有的符号和数据定义是否满足要求。
另外LSB 还不断在膨胀;他说, LSB 4.1 版(接近 Debian “jessie” 发布时的最新版本)包含“*1493个组件、1672个库、38491条命令、30176个类和716202个接口*”。似乎没有人有兴趣检查 Debian 包中的这些细节,他解释道,又补充说,“*去年在 DebConf 上我举行过一次 LSB BoF后来又与很多人讨论过 src:lsb我收回自己的几乎没有人在意的说法*”。但重要的是Debian 似乎并不仅局限于兴趣的缺乏:
我认为,这个问题的关键在于是否值得去玩这整个游戏:我还没听说有哪个软件通过 LSB 包来发行。LSB 认证的应用清单上只有 6个公司的_8_个应用其中仅有一个是针对不低于 LSB 4 的。
Raboud 提议 Debian 摈弃除了 [lsb-base][9] 包(目前包括一个用于启动系统所需的小的 shell 函数集合)和 [lsb-release][10] 包(提供一个简单工具,用户可用它查询发行版的身份以及该发行版宣称的与哪个 LSB 级别兼容)之外的所有内容。
[后来][11],他又称,将 LSB 基本上改变为“*Debian 和 FLOSS 世界中的所有的其它人所_实际_做的任何事*”可能会使得该标准(以及在 Debian 为支持它所做的工作)更有价值。但此时他再次质疑是否有人会对推动这个目标有兴趣。
如果说他最初称 LSB 中缺乏兴趣没有足够的证据,随后整整三个月之内没有任何人对维持 LSB 兼容的包提供支持并进行了两次拋弃它们的投票。最后9月17日Raboud [宣布][12]他已经抽掉 `src:lsb` 包(如前所述,保留了`lsb-base` 和 `lsb-release`),将将其上载到 “unstable” 归档中。这个最小的工具集可以让感兴趣的用户在启动了下一个 Debian 版本后查询它是否兼容 LSB结果将为“否”。
Raboud 补充说,即便摈弃了兼容 LSBDebian 仍计划继续兼容 FHS
但 Debian 并没有放弃所有的 LSB我们仍将严格遵守 FHS直到 Debian Policy 版本 2.3虽然今年8月已经发布了3.0),而且我们的 SysV 启动脚本几乎全部遵循 VIII.22.{2-8}。但请不要误解,此次 src:lsb 上载明确说明我们将离开 LSB。
在该宣告之后Nikolaus Rath [回应][13]称某些私有应用依赖`/lib`和`/lib64`中的符号链接`ld-lsb.so*`,而这些符号链接由`lsb-*`包提供。Raboud 则[建议][14]应改由`libc6`包提供该包维护人员Aurelien Jarno [称][15],如果提供这样一个补丁,他将会接受它。
似乎唯一的遗留问题只是某些打印机驱动包会依赖 LSB 兼容。Raboud 称,在其首个贴子中已经说明,据他所知,实际发布的唯一一个依赖 LSB 兼容的包为 [OpenPrinting][16] 驱动程序。Michael Biebl [称][17]主归档中有这样一个驱动包Raboud 则[回应][18]说,他认为这个有问题的包应该被移到非自由仓库,因其包括了一个二进制驱动。
于是,这个问题看上去已经尘埃落定,至于对于目前的 Debian 开发周期来说是如此的状况。很自然的是,未来让人更感觉兴趣的是,如果该决定存在一些影响的话,那么人们将会看到它对更广泛的 LSB 接受度有何影响。正如 Raboud 所说的那样,被认证为 LSB 兼容的发行版数量很[少][19]。人们很难不会注意到这些发行版很大程度上是“企业”的变种。
也许对某些商业领域来说LSB 仍很重要,但很难知道有多少那些企业发行版的客户真正关心 LSB 认证标签。然而,如果 Debian 的经验靠得住的话,对这种认证的一般兴趣可能会急剧下降。
----
viahttps://lwn.net/Articles/658809/
作者Nathan Willis
译者:[Yuking](https://github.com/Yuking-net)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,
[Linux中国](https://linux.cn/) 荣誉推出
[1]:http://refspecs.linuxfoundation.org/lsb.shtml
[2]:https://en.wikipedia.org/wiki/POSIX
[3]:https://en.wikipedia.org/wiki/Single_UNIX_Specification
[4]:http://www.linuxfoundation.org/collaborate/workgroups/lsb
[5]:http://www.linuxfoundation.org/collaborate/workgroups/lsb/lsb-50
[6]:http://www.linuxfoundation.org/collaborate/workgroups/lsb/fhs
[7]:http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html
[8]:https://lwn.net/Articles/658838/
[9]:https://packages.debian.org/sid/lsb-base
[10]:https://packages.debian.org/sid/lsb-release
[11]:https://lwn.net/Articles/658842/
[12]:https://lwn.net/Articles/658843/
[13]:https://lwn.net/Articles/658846/
[14]:https://lwn.net/Articles/658847/
[15]:https://lwn.net/Articles/658848/
[16]:http://www.linuxfoundation.org/collaborate/workgroups/openprinting/
[17]:https://lwn.net/Articles/658844/
[18]:https://lwn.net/Articles/658845/
[19]:https://www.linuxbase.org/lsb-cert/productdir.php?by_lsb

View File

@ -0,0 +1,100 @@
在 CentOS 7 中安装并使用自动化工具 Ansible
================================================================================
Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。它用Python写成类似于Chef和Puppet但是有一个不同和优点是我们不需要在节点中安装任何客户端。它使用SSH来和节点进行通信。
本篇中我们将在CentOS 7上安装并配置Ansible并且尝试管理两个节点。
- **Ansible 服务端** ansible.linuxtechi.com ( 192.168.1.15 )
- **节点** 192.168.1.9 , 192.168.1.10
### 第一步: 设置EPEL仓库 ###
Ansible仓库默认不在yum仓库中因此我们需要使用下面的命令启用epel仓库。
[root@ansible ~]# rpm -iUvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
### 第二步: 使用yum安装Ansible ###
[root@ansible ~]# yum install ansible
安装完成后检查ansible版本
[root@ansible ~]# ansible --version
![ansible-version](http://www.linuxtechi.com/wp-content/uploads/2015/09/ansible-version.jpg)
### 第三步: 设置用于节点鉴权的SSH密钥 ###
在Ansible服务端生成密钥并且复制公钥到节点中。
root@ansible ~]# ssh-keygen
![ssh-keygen](http://www.linuxtechi.com/wp-content/uploads/2015/09/ssh-keygen.jpg)
使用ssh-copy-id命令来复制Ansible公钥到节点中。
![ssh-copy-id-command](http://www.linuxtechi.com/wp-content/uploads/2015/09/ssh-copy-id-command.jpg)
### 第四步为Ansible定义节点的清单 ###
文件 `/etc/ansible/hosts` 维护着Ansible中服务器的清单。
[root@ansible ~]# vi /etc/ansible/hosts
[test-servers]
192.168.1.9
192.168.1.10
保存并退出文件。
主机文件示例如下:
![ansible-host](http://www.linuxtechi.com/wp-content/uploads/2015/09/ansible-host.jpg)
### 第五步尝试在Ansible服务端运行命令 ###
使用ping检查test-servers或者ansible节点的连通性。
[root@ansible ~]# ansible -m ping 'test-servers'
![ansible-ping](http://www.linuxtechi.com/wp-content/uploads/2015/09/ansible-ping.jpg)
#### 执行shell命令 ####
**例子1检查Ansible节点的运行时间uptime**
[root@ansible ~]# ansible -m command -a "uptime" 'test-servers'
![ansible-uptime](http://www.linuxtechi.com/wp-content/uploads/2015/09/ansible-uptime.jpg)
**例子2检查节点的内核版本**
[root@ansible ~]# ansible -m command -a "uname -r" 'test-servers'
![kernel-version-ansible](http://www.linuxtechi.com/wp-content/uploads/2015/09/kernel-version-ansible.jpg)
**例子3给节点增加用户**
[root@ansible ~]# ansible -m command -a "useradd mark" 'test-servers'
[root@ansible ~]# ansible -m command -a "grep mark /etc/passwd" 'test-servers'
![useradd-ansible](http://www.linuxtechi.com/wp-content/uploads/2015/09/useradd-ansible.jpg)
**例子4重定向输出到文件中**
[root@ansible ~]# ansible -m command -a "df -Th" 'test-servers' > /tmp/command-output.txt
![redirecting-output-ansible](http://www.linuxtechi.com/wp-content/uploads/2015/09/redirecting-output-ansible.jpg)
--------------------------------------------------------------------------------
via: http://www.linuxtechi.com/install-and-use-ansible-in-centos-7/
作者:[Pradeep 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.linuxtechi.com/author/pradeep/

View File

@ -0,0 +1,42 @@
pyinfo():一个像 phpinfo 一样的 Python 脚本
================================================================================
作为一个热衷于 php 的家伙,我已经习惯了使用 `phpinfo()` 函数来让我轻松访问 php.ini 里的配置和加载的模块等信息。当然我也想要使用一个不存在的 `pyinfo()` 函数,但没有成功。按下 CTRL-Egoogle 一下是否有人实现了它?
是的,有人已经实现了。但是,对我来说它非常难看。荒谬!因为我无法忍受丑陋的布局,*咳咳*我不得不亲自动手来改改。我用找到的代码并重新进行布局使之更好看点。Python 官方网站的布局看起来不错,那么何不借用他们的颜色和背景图片呢?是的,这听起来像一个计划。
- [Gist 代码地址][1]
- [下载地址][2]
- [例子][3]
提醒你下,我仅仅在 Python 2.6.4 上运行过它,所以在别的版本上可能有风险(将它移植到任何其他版本它应该是没有问题的)。要使用它,只需要导入该文件, 并调用`pyinfo()`函数得到它的返回值打印到屏幕上。好嘞!
如果你在使用 [mod_wsgi][4] 时没有得到正确的返回结果,你可以如下运行它(当然得替换路径):
```
def application(environ, start_response):
import sys
path = 'YOUR_WWW_ROOT_DIRECTORY'
if path not in sys.path:
sys.path.append(path)
from pyinfo import pyinfo
output = pyinfo()
start_response('200 OK', [('Content-type', 'text/html')])
return [output]
```
---
viahttp://bran.name/articles/pyinfo-a-good-looking-phpinfo-like-python-script/
作者:[Bran van der Meer][a]
译者:[strugglingyouth](https://github.com/strugglingyouth)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,
[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://bran.name/resume/
[1]:https://gist.github.com/951825#file_pyinfo.py
[2]:http://bran.name/dump/pyinfo.zip
[3]:http://bran.name/dump/pyinfo/index.py
[4]:http://code.google.com/p/modwsgi/

View File

@ -0,0 +1,93 @@
如何在 Linux 中使用 youtube-dl 下载视频
================================================================================
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/10/Download-YouTube-Videos.jpeg)
我知道你已经看过[如何下载 YouTube 视频][1]。但那些工具大部分都采用图形用户界面的方式。我会向你展示如何通过终端使用 youtube-dl 下载 YouTube 视频。
### youtube-dl ###
[youtube-dl][2] 是基于 Python 的命令行小工具,允许你从 YouTube.com、Dailymotion、Google Video、Photobucket、Facebook、Yahoo、Metacafe、Depositfiles 以及其它一些类似网站中下载视频。它是用 pygtk 编写的,需要 Python 解析器来运行,对平台要求并不严格。它能够在 Unix、Windows 或者 Mac OS X 系统上运行。
youtube-dl 支持断点续传。如果在下载的过程中 youtube-dl 被杀死了(例如通过 Ctrl-C 或者丢失网络连接),你只需要使用相同的 YouTube 视频 URL 再次运行它。只要当前目录中有下载的部分文件,它就会自动恢复没有完成的下载,也就是说,你不需要[下载管理器][3]来恢复下载。
#### 安装 youtube-dl ####
如果你运行的是基于 Ubuntu 的 Linux 发行版,你可以使用下面的命令安装:
sudo apt-get install youtube-dl
对于任何 Linux 发行版,你都可以通过下面的命令行在你的系统上快速安装 youtube-dl
sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O/usr/local/bin/youtube-dl
获取到该文件后,为了能正常执行你需要给脚本设置可执行权限。
sudo chmod a+rx /usr/local/bin/youtube-dl
#### 使用 youtube-dl 下载视频: ####
要下载一个视频文件,只需要运行下面的命令。其中 “VIDEO_URL” 是你想要下载视频的 url。
youtube-dl VIDEO_URL
#### 以多种格式下载 YouTube 视频: ####
现在 YouTube 视频有不同的分辨率,首先你需要检查指定的 YouTube 视频可用的视频格式。可以使用 “-F” 选项运行 youtube-dl。它会向你显示出可用的格式。
youtube-dl -F http://www.youtube.com/watch?v=BlXaGWbFVKY
它的输出类似于:
Setting language
BlXaGWbFVKY: Downloading video webpage
BlXaGWbFVKY: Downloading video info webpage
BlXaGWbFVKY: Extracting video information
Available formats:
37 : mp4 [1080×1920]
46 : webm [1080×1920]
22 : mp4 [720×1280]
45 : webm [720×1280]
35 : flv [480×854]
44 : webm [480×854]
34 : flv [360×640]
18 : mp4 [360×640]
43 : webm [360×640]
5 : flv [240×400]
17 : mp4 [144×176]
在可用的视频格式中,选择你需要的一种。例如,如果你想下载 MP4 格式的,你可以:
youtube-dl -f 17 http://www.youtube.com/watch?v=BlXaGWbFVKY
#### 使用 youtube-dl 下载视频字幕 ####
首先检查是否有可用的视频字幕。使用下面的命令列出视频所有可用的字幕:
youtube-dl --list-subs https://www.youtube.com/watch?v=Ye8mB6VsUHw
下载所有字幕,但不包括视频:
youtube-dl --all-subs --skip-download https://www.youtube.com/watch?v=Ye8mB6VsUHw
#### 下载整个播放列表 ####
运行下面的命令下载整个播放列表。其中 “playlist_url” 是你希望下载的播放列表的 url。
youtube-dl -cit playlist_url
youtube-dl 是一个多功能的命令行工具,它提供了很多功能。难怪这个命令行工具这么流行。
--------------------------------------------------------------------------------
via: http://itsfoss.com/download-youtube-linux/
作者:[alimiracle][a]
译者:[ictlyh](http://mutouxiaogui.cn/blog/)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
[a]:http://itsfoss.com/author/ali/
[1]:http://itsfoss.com/download-youtube-videos-ubuntu/
[2]:https://rg3.github.io/youtube-dl/
[3]:https://linux.cn/article-6209-1.html

View File

@ -0,0 +1,57 @@
开源媒体播放器 MPlayer 1.2 发布
================================================================================
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/10/MPlayer-1.2.jpg)
在 [MPlayer][1] 1.1 发布将近3年后新版 MPlayer 终于在上周发布了。在新版本 MPlayer 1.2 中带来了对许多新编码的解码支持。
MPlayer 是一款跨平台的开源媒体播放器。它的名字是“Movie Player”的缩写。MPlayer 是 Linux 上最老牌的媒体播放器之一在过去的15年里它还带动出现了许多其他媒体播放器。著名的基于 MPlayer 的媒体播放器有:
- [MPV][2]
- SMPlayer
- KPlayer
- GNOME MPlayer
- Deepin Player深度影音
#### MPlayer 1.2 更新了些什么? ####
- 兼容 FFmpeg 2.8
- 对 H.265/HEVC 的 VDPAU 硬件加速
- 通过 FFmpeg 支持一些新的编码解码
- 改善电视与数字视频广播支持
- 界面优化
- libdvdcss/libdvdnav 包外部依赖
#### 在 Linux 安装 MPlayer 1.2 ####
大多数 Linux 发行版仓库中还是 MPlayer 1.1 版本。如果你想使用新的 MPlayer 1.2 版本,你需要从源码手动编译,这对新手来说可能有点棘手。
我是在 Ubuntu 15.04 上安装的 MPlayer 1.2。除了需要安装 yasm 的地方以外,对所有 Linux 发行版来说安装说明都是一样的。
打开一个终端,运行下列命令:
wget http://www.mplayerhq.hu/MPlayer/releases/MPlayer-1.2.tar.xz
tar xvf MPlayer-1.1.1.tar.xz
cd MPlayer-1.2
sudo apt-get install yasm
./configure
在你运行 make 的时候,在你的终端屏幕上会显示一些东西,并且你需要一些时间来编译它。保持耐心。
make
sudo make install
如果你觉得从源码编译不大习惯的话,我建议你等待 MPlayer 1.2 提交到你的 Linux 发行版仓库中,或者用其它的播放器替代,比如 MPV。
--------------------------------------------------------------------------------
via: http://itsfoss.com/mplayer-1-2-released/
作者:[Abhishek][a]
译者:[alim0x](https://github.com/alim0x)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
[a]:http://itsfoss.com/author/abhishek/
[1]:https://www.mplayerhq.hu/
[2]:http://mpv.io/

View File

@ -0,0 +1,77 @@
Linux 产能工具及其使用技巧
================================================================================
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/10/Productivity-Tips-Linux.jpg)
由于生产力本身是一个主观术语我不打算详细解释我这里要讲到的“生产力”是什么。我打算给你们展示一些工具及其使用技巧希望这会帮助你在Linux中工作时能更专注、更高效并且能节省时间。
### Linux产能工具及其使用技巧 ###
再次说明我在写下本文时正在使用的是Ubuntu。但是我将要在这里展示给大家产能工具及其使用技巧却适用于市面上的大多数Linux发行版。
#### 外界的音乐 ####
[音乐影响生产力][1],这已经是一个公开的秘密了。从心理学家到管理大师,他们都一直在建议使用外界的杂音来让自己放松并专注于工作。我不打算就此进行辩论,因为这对于我确实有效。我戴上耳机,然后倾听着鸟叫声和风声,这确实让我很放松。
在Linux中我使用ANoise播放器来播放外界的杂音。多亏了官方提供的PPA你可以很容易地[安装Ambient Noise播放器到Ubuntu中][2]以及其它基于Ubuntu的Linux发行版中。安装它也可以让它离线播放外界的音乐。
另外,你也总可以在线听外界杂音。我最喜欢的在线外界音乐站点是[Noisli][3]。强烈推荐你试试这个。
#### 任务管理应用 ####
一个良好的生产习惯,就是制订一个任务列表。如果你将它和[番茄工作法][4]组合使用,那就可能创造奇迹了。这里我所说的是,创建一个任务列表,如果可能,将这些任务分配到特定的某个时间。这将会帮助你跟踪一天中计划好的任务。
对于此,我推荐[Go For It!][5]应用。你可以将它安装到所有主流Linux发行版中由于它基于[ToDo.txt][6],你也可以很容易地同步到你的智能手机中。我已经为此写了一个详尽的指南[如何使用Go For It!][7]。
此外,你可以使用[Sticky Notes][8]或者[Google Keep][9]。如果你需要某些更类似[Evernote][10]的功能,你可以使用这些[Evernote的开源替代品][11]。
#### 剪贴板管理器 ####
Ctrl+ C和Ctrl+V是我们日常计算机生活中不可缺少的一部分它们唯一的不足之处在于这些重要的活动不会被记住默认情况下。假如你拷贝了一些重要的东西然后你意外地又拷贝了一些其它东西你将丢失先前拷贝的东西。
剪贴板管理器在这种情况下会派上用场,它可以显示你最近拷贝(到剪贴板的)内容的历史记录,你可以从它这里将文本拷贝回到剪贴板中。
对于该目的,我更偏好[Diodon剪贴板管理器][12]。它处于活跃开发中并且在Ubuntu的仓库中可以得到它。
#### 最近通知 ####
如果你正忙着处理其它事情,而此时一个桌面通知闪了出来又逐渐消失了,你会怎么做?你会想要看看通知都说了什么,不是吗?最近通知指示器就是用于处理此项工作,它会保留一个最近所有通知的历史记录。这样,你就永远不会错过桌面通知了。
你可以在此阅读[最近通知指示器][13]。
#### 终端技巧 ####
我不打算给你们展示所有那些Linux命令技巧和快捷方法那会写满整个博客了。我打算给你们展示一些终端黑技巧你可以用它们来提高你的生产力。
- **修改**sudo**密码超时**默认情况下sudo命令要求你在15分钟后再次输入密码这真是让人讨厌。实际上你可以修改默认的sudo密码超时。[此教程][14]会给你展示如何来实现。
- **获取命令完成的桌面通知**这是IT朋友们之间的一个常见的玩笑——开发者们花费大量时间来等待程序编译完成——然而这不完全是正确的。但是它确实影响到了生产力因为在你等待程序编译完成时你可以做其它事情并忘了你在终端中运行的命令。一个更好的途径就是在一个命令完成时让它显示桌面通知。这样你就不会长时间被打断并且可以回到之前想要做的事情上。请阅读[如何获取命令完成的桌面通知][15]。
我知道,这不是一篇全面涵盖了**提升生产力**的文章。但是,这些小应用和小技巧可以在实际生活中帮助你在你宝贵的时间中做得更多。
现在该轮到你们了。在Linux中你使用了什么程序或者技巧来提高生产力呢有哪些东西你想要和社区分享呢
--------------------------------------------------------------------------------
via: http://itsfoss.com/productivity-tips-ubuntu/
作者:[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://www.helpscout.net/blog/music-productivity/
[2]:https://linux.cn/article-5233-1.html
[3]:http://www.noisli.com/
[4]:https://en.wikipedia.org/wiki/Pomodoro_Technique
[5]:http://manuel-kehl.de/projects/go-for-it/
[6]:http://todotxt.com/
[7]:https://linux.cn/article-5337-1.html
[8]:http://itsfoss.com/indicator-stickynotes-windows-like-sticky-note-app-for-ubuntu/
[9]:https://linux.cn/article-2634-1.html
[10]:https://evernote.com/
[11]:http://itsfoss.com/5-evernote-alternatives-linux/
[12]:https://esite.ch/tag/diodon/
[13]:http://itsfoss.com/7-best-indicator-applets-for-ubuntu-13-10/
[14]:http://itsfoss.com/change-sudo-password-timeout-ubuntu/
[15]:http://itsfoss.com/notification-terminal-command-completion-ubuntu/

View File

@ -0,0 +1,263 @@
10 个给 Linux 用户的有用工具
================================================================================
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2014/09/linux-656x445.png)
### 引言 ###
在本教程中我已经收集了10个给 Linux 用户的有用工具,其中包括各种网络监控,系统审计和一些其它实用的命令,它可以帮助用户提高工作效率。我希望你会喜欢他们。
#### 1. w ####
显示谁登录了系统并执行了哪些程序。
$w
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_023.png)
不显示头部信息LCTT译注原文此处有误
$w -h
显示指定用户的信息
$w <username>
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_024.png)
#### 2. nmon ####
Nmonnigels monitor 的简写)是一个显示系统性能信息的工具。
$ sudo apt-get install nmon
----------
$ nmon
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_001.png)
nmon 可以显示与 netwrokcpu, memory 和磁盘使用情况的信息。
**nmon 显示 cpu 信息 (按 c)**
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_002.png)
**nmon 显示 network 信息 (按 n)**
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_003.png)
**nman 显示 disk 信息 (按 d)**
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_004.png)
#### 3. ncdu ####
是一个支持光标的`du`程序,这个命令是用来分析各种目录占用的磁盘空间。
$apt-get install ncdu
----------
$ncdu /
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_006.png)
最终的输出:
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_007.png)
按 n 则通过文件名来排序,按 s 则按文件大小来排序(默认的)。
#### 4. slurm ####
一个基于网络接口的带宽监控命令行程序,它会用字符来显示文本图形。
$ apt-get install slurm
例如:
$ slurm -i <interface>
----------
$ slurm -i eth1
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0091.png)
**选项**
- 按 **l** 显示 lx/tx 指示灯.
- 按 **c** 切换到经典模式.
- 按 **r** 刷新屏幕.
- 按 **q** 退出.
#### 5.findmnt ####
Findmnt 命令用于查找挂载的文件系统。它用来列出安装设备,当需要时也可以挂载或卸载设备,它是 util-linux 软件包的一部分。
例子:
$findmnt
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0101.png)
以列表格式输出。
$ findmnt -l
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0111.png)
列出在 fstab 中挂载的文件系统。
$ findmnt -s
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0122.png)
按文件类型列出已挂载的文件系统。
$ findmnt -t ext4
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0131.png)
#### 6. dstat ####
一种灵活的组合工具,它可用于监控内存,进程,网络和磁盘性能,它可以用来取代 ifstat, iostat, dmstat 等。
$apt-get install dstat
例如:
查看有关 cpu硬盘和网络的详细信息。
$ dstat
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0141.png)
**-c** cpu
$ dstat -c
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0151.png)
**-d** 磁盘
$ dstat -d
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0161.png)
显示 cpu、磁盘等的详细信息。
$ dstat -cdl -D sda1
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_017.png)
#### 7. saidar ####
另一种基于命令行的系统统计数据监控工具,提供了有关磁盘使用,网络,内存,交换分区等信息。
$ sudo apt-get install saidar
例如:
$ saidar
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0181.png)
启用彩色输出
$ saider -c
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0191.png)
#### 8. ss ####
sssocket statistics是一个很好的替代 netstat 的选择,它从内核空间收集信息,比 netstat 的性能更好。
例如:
列出所有的连接
$ ss |less
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0201.png)
列出 tcp 流量
$ ss -A tcp
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0211.png)
列出进程名和 pid
$ ss -ltp
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0221.png)
#### 9. ccze ####
一个美化日志显示的工具 :).
$ apt-get install ccze
例如:
$ tailf /var/log/syslog | ccze
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0231.png)
列出 ccze 模块:
$ ccze -l
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_0241.png)
将日志保存为 html 文件。
tailf /var/log/syslog | ccze -h > /home/tux/Desktop/rajneesh.html
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_025.png)
#### 10. ranwhen.py ####
一种基于 Python 的终端工具,它可以用来以图形方式显示系统活动状态。详细信息以一个丰富多彩的柱状图来展示。
安装 pythonLCTT 译注:一般来说,你应该已经有了 python不需要此步
$ sudo apt-add-repository ppa:fkrull/deadsnakes
更新系统:
$ sudo apt-get update
下载 python:
$ sudo apt-get install python3.2
[点此下载 ranwhen.py][1]
$ unzip ranwhen-master.zip && cd ranwhen-master
运行工具。
$ python3.2 ranwhen.py
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/10/Selection_026.png)
### 结论 ###
这都是些不常见但重要的 Linux 管理工具。他们可以在日常生活中帮助用户。在我们即将发表的文章中,我们会尽量多带来些管理员/用户工具。
玩得愉快!
--------------------------------------------------------------------------------
via: http://www.unixmen.com/10-useful-utilities-linux-users/
作者:[Rajneesh Upadhyay][a]
译者:[strugglingyouth](https://github.com/strugglingyouth)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.unixmen.com/author/rajneesh/
[1]:https://github.com/p-e-w/ranwhen/archive/master.zip

View File

@ -0,0 +1,53 @@
Linux 有问必答:如何在 Linux 中永久修改 USB 设备权限
================================================================================
> **提问**:当我尝试在 Linux 中运行 USB GPS 接收器时我遇到了下面来自 gpsd 的错误。
>
> gpsd[377]: gpsd:ERROR: read-only device open failed: Permission denied
> gpsd[377]: gpsd:ERROR: /dev/ttyUSB0: device activation failed.
> gpsd[377]: gpsd:ERROR: device open failed: Permission denied - retrying read-only
>
> 看上去 gpsd 没有权限访问 USB 设备(/dev/ttyUSB0。我该如何永久修改它在Linux上的权限
当你在运行一个会读取或者写入USB设备的进程时进程的用户/组必须有权限这么做才行。当然你可以手动用`chmod`命令改变 USB 设备的权限但是手动的权限改变只是暂时的。USB 设备会在下次重启时恢复它的默认权限。
![](https://farm6.staticflickr.com/5741/20848677843_202ff53303_c.jpg)
作为一个永久的方式,你可以创建一个基于 udev 的 USB 权限规则,它可以根据你的选择分配任何权限模式。下面是该如何做。
首先,你需要找出 USB 设备的 vendorID 和 productID。使用`lsusb`命令。
$ lsusb -vvv
![](https://farm1.staticflickr.com/731/20848677743_39f76eb403_c.jpg)
上面`lsusb`的输出中,找出你的 USB 设备,并找出"idVendor"和"idProduct"字段。本例中,我们的结果是`idVendor (0x067b)`和 `idProduct (0x2303)`
下面创建一个新的udev规则。
$ sudo vi /etc/udev/rules.d/50-myusb.rules
----------
SUBSYSTEMS=="usb", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", GROUP="users", MODE="0666"
用你自己的"idVendor"和"idProduct"来替换。**MODE="0666"**表示USB设备的权限。
现在重启电脑并重新加载 udev 规则:
$ sudo udevadm control --reload
接着验证下 USB 设备的权限。
![](https://farm1.staticflickr.com/744/21282872179_9a4a05d768_b.jpg)
--------------------------------------------------------------------------------
via: http://ask.xmodulo.com/change-usb-device-permission-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

View File

@ -0,0 +1,54 @@
Linux有问必答如何强制在下次登录Linux时更换密码
================================================================================
> **提问**我管理着一台多人共享的Linux服务器。我刚使用默认密码创建了一个新用户但是我想用户在第一次登录时更换密码。有没有什么方法可以让他/她在下次登录时修改密码呢?
在多用户Linux环境中标准实践是使用一个默认的随机密码创建一个用户账户。成功登录后新用户自己改变默认密码。出于安全考虑经常建议“强制”用户在第一次登录时修改密码来确保这个一次性使用的密码不会再被使用。
下面是**如何强制用户在下次登录时修改他/她的密码**。
每个Linux用户都关联这不同的密码相关配置和信息。比如记录着上次密码更改的日期、最小/最大的修改密码的天数、密码何时过期等等。
一个叫chage的命令行工具可以访问并调整密码过期相关配置。你可以使用这个工具来强制用户在下次登录修改密码、
要查看特定用户的过期信息比如alice运行下面的命令。注意的是除了你自己之外查看其他任何用户的密码信息都需要root权限。
$ sudo chage -l alice
![](https://c1.staticflickr.com/1/727/21955581605_5471e61ee0_c.jpg)
### 强制用户修改密码 ###
如果你想要强制用户去修改他/她的密码,使用下面的命令。
$ sudo chage -d0 <user-name>
原本“-d <N>”参数是用来设置密码的“年龄”也就是上次修改密码起到1970/1/1起的天数。因此“-d0”的意思是上次密码修改的时间是1970/1/1这就让当前的密码过期了也就强制让他在下次登录的时候修改密码了。
另外一个过期当前密码的方式是用passwd命令。
$ sudo passwd -e <user-name>
上面的命令和“chage -d0”作用一样让当前用户的密码立即过期。
现在检查用户的信息,你会发现:
![](https://c2.staticflickr.com/6/5770/21767501480_ba88f00d80_c.jpg)
当你再次登录时候,你会被要求修改密码。你会在修改前被要求再验证一次当前密码。
![](https://c2.staticflickr.com/6/5835/21929638636_eed4d69cb9_c.jpg)
要设置更全面的密码策略如密码复杂性防止重复使用则可以使用PAM。参见[这篇文章][1]了解更多详情。
--------------------------------------------------------------------------------
via: http://ask.xmodulo.com/force-password-change-next-login-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/set-password-policy-linux.html

View File

@ -0,0 +1,55 @@
Mytodo为 DIY 爱好者准备的待办事项管理软件
================================================================================
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/10/Mytodo-Linux.jpg)
通常我关注的软件都是那些不用折腾并且易用的(对图形界面而言)。这就是我把 [Go For It][1] 待办事项程序归到 [Linux 产能工具][2] 列表的原因。今天,我要向你们展示另一款待办事项列表应用,和其它的待办事项软件有点不一样。
[Mytodo][3] 是个开源的待办事项列表程序让你能够掌管一切。与其它类似的程序不同的是Mytodo 更加面向 DIY 爱好者,因为它允许你配置服务器(如果你想在多台电脑上使用的话),除了主要的功能外还提供一个命令行界面。
它是用 Python 编写的,因此可以在所有 Linux 发行版以及其它操作系统,比如 Windows 上使用。
Mytodo 的一些主要特性:
- 同时拥有图形界面和命令行界面
- 配置你自己的服务器
- 添加用户/密码
- Python 编写
- 可根据标签搜索
- 待办事项可以在 [Conky][4] 显示
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/10/Mytodo-list.jpeg)
*图形界面*
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/10/Mytodo-list-cli.jpeg)
*命令行*
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/10/Mytodo-list-conky.jpeg)
*Conky 显示着待办事项*
你可以在下面的 Github 链接里找到源码和配置介绍:
- [下载和配置 Mytodo ][5]
尽管有些人可能不大喜欢命令行和配置部分的内容,但它自然有它的乐趣所在。我建议你自己尝试一下,看看 Mytodo 是否符合我们的需求和口味。
图片致谢: https://pixabay.com/en/to-do-list-task-list-notes-written-734587
--------------------------------------------------------------------------------
via: http://itsfoss.com/mytodo-list-manager/
作者:[Abhishek][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://itsfoss.com/go-for-it-to-do-app-in-linux/
[2]:https://linux.cn/article-6425-1.html
[3]:https://github.com/mohamed-aziz/mytodo
[4]:http://itsfoss.com/conky-gui-ubuntu-1304/
[5]:https://github.com/mohamed-aziz/mytodo

View File

@ -0,0 +1,78 @@
新的 RTL 协作组将加速实时 Linux 的发展
================================================================================
![](http://www.linux.com/images/stories/66866/Tux-150.png)
在本周的 Linux 大会活动LinuxCon上 Linux 基金会Linux Foundation[宣称][1]实时Linux操作系统项目RTLReal-Time Linux得到了新的资金支持并预期这将促进该项目使其自成立15年来第一次有机会在实时操作性上和其他的实时操作系统RTOSReal Time Operation System一较高下。Linux 基金会将 RTL 组重组为一个新的项目并命名为RTL协作组Real-Time Linux Collaborative Project该项目将获得更有力的资金支持更多的开发人员将投入其中并更加紧密地集成到 Linux 内核主线开发中。
根据 Linux 基金会的说法RTL 项目并入 Linux基金会旗下后“在研发方面将为业界节省数百万美元的费用。”同时此举也将“通过强有力的上游内核测试体系而改善本项目的代码质量”。
在过去的十几年中RTL 项目的开发管理和经费资助主要由[开源自动化开发实验室] [2]OSADLOpen Source Automation Development Lab承担OSADL 将继续作为新合作项目的金牌成员之一,但其原来承担的资金资助工作将会在一月份移交给 Linux 基金会。RTL 项目和 [OSADL][3] 长久以来一直负责维护[内核的实时抢占RT-Preempt 或 Preempt-RT][4]补丁,并定期将其更新到 Linux 内核的主线上。
据长期以来一直担任 OSADL 总经理的 Carsten Emde 博士介绍,支持内核实时特性的工作已经完成了将近 90。 “这就像盖房子,”他解释说。 “主要的部件如墙壁窗户和门都已经安装到位就实时内核来说类似的主要部件包括高精度定时器high-resolution timers中断线程化机制interrupt threads和优先级可继承的互斥量priority-inheritance mutexes等。然后所剩下的就是需要一些边边角角的工作就如同装修房子过程中还剩下铺设如地毯和墙纸等来完成最终的工程。”
以 Emde 观点来看,从技术的角度来说,实时 Linux 的性能已经可以媲美绝大多数其他的实时操作系统 - 但前提是你要不厌其烦地把所有的补丁都打上。 Emde 的原话如下“该项目LCTT 译注指RTL的唯一目标就是提供一个满足实时性要求的 Linux 系统,使其无论运行状况如何恶劣都可以保证在确定的、可以预先定义的时间期限内对外界处理做出响应。这个目标已经实现,但需要你手动地将 RTL 提供的补丁添加到 Linux 内核主线的版本代码上,但将来的不用打补丁的实时 Linux 内核也能实现这个目标。唯一的,当然也是最重要的区别就是相应的维护工作将少得多,因为我们再也不用一次又一次移植那些独立于内核主线的补丁代码了。”
新的 RTL 协作组将继续在 Thomas Gleixner 的指导下工作Thomas Gleixner 在过去的十多年里一直是 RTL 的核心维护人员。本周Gleixner 被任命为 Linux 基金会成员,并加入了一个特别的小组,小组成员包括 Linux 稳定内核维护者Greg Kroah-HartmanYocto 项目维护者 Richard Purdie 和 Linus Torvalds 本人。
据 Emde 介绍RTL 的第二维护人 Steven Rostedt 来自 Red Hat 公司,他负责“维护旧的,但尚保持维护的内核版本”,他将和同样来自 Red Hat 的 Ingo Molnàr 继续参与该项目Ingo 是 RTL 的关键开发人员但近年来更多地从事咨询方面的工作。有些令人惊讶的是Red Hat 竟然不是 RTL 协作组的成员之一。相反谷歌作为唯一的白金会员占据了头把交椅其他黄金会员包括国家仪器公司NINational InstrumentsOSADL 和德州仪器TI。银卡会员包括Altera 公司ARMIntel 和 IBM。
###走向实时内核的漫长道路###
当15年前 Linux 第一次出现在嵌入式设备上的时候它所面临的嵌入式计算市场已经被其他的实时操作系统譬如风河公司WindRiver的 VxWorks所牢牢占据。VxWorks 从那时起到现在,一直在为众多的工控设备、航空电子设备以及交通运输应用提供着工业级别的高确定性的,硬实时的内核。微软后来也提供了一个支持实时性的操作系统版本- Windows CE当时的 Linux 所面临的是来自潜在工业客户的公开嘲讽和层层阻力。他们认为那些从桌面系统改进来的 Linux 发行版本顶多适合要求不高的轻量级消费类电子产品,而不适合那些对硬实时要求更高的设备。
对于嵌入式 Linux 的先行者如 [MontaVista 公司][6]来说,其[早期的目标][5]很明确就是要改进 Linux 的实时能力。多年以来,对 Linux 的实时性能开发发展迅速,得到各种组织的支持,如[成立于2006年][7]的 OSADL以及实时 Linux 基金会RTLFReal-Time Linux Foundation。在2009年 [OSADL 与 RTLF 合并][8]OSADL 及其 RTL 组承担了所有的抢占式实时内核Preempt-RT补丁的维护工作和将补丁提交到上游内核主线的工作。除此之外 OSADL 还负责监管其他自动化相关的项目,例如[高可靠性 Linux][9](Safety Critical Linux译者注指研究如何在关键系统上可靠安全地运行Linux
OSADL 对 RTL 的支持经历了三个阶段拥护和推广测试和质量评估以及最后的资金支持。Emde 表示在早期OSADL 的角色仅限于写写推广的文章,制作专题报告,组织相关培训,以及“宣传” RTL 的优点。他说:“要让一个相当保守的工控行业接受象 Linux 之类的新技术及其基于社区的那种开发模式,首先就需要建立其对新事物的信任。从使用专有的实时操作系统转向改用 Linux 对公司意味着必须引入新的战略和流程,才能与社区进行互动。”
后来OSADL 改而提供技术性能数据,建立[质量评估和测试中心][10],并在和开源相关的法律事务问题和安全认证方面向行业成员提供帮助。
当 RTL 在实时性上变得愈加成熟的同时,相反地 Windows CE 却是江河日下,[其市场份额正在快速地被 RTL 所蚕食][11],一些与 RTL 竞争的实时 Linux 项目,主要是 [Xenomai][12] 也已开始集成 RTL。
“伴随 RTL 补丁的成功,以及明确的预期其最终会被完整集成到 Linux 内核主线代码中,导致 Xenomai 关注的重心发生了变化”Emde 说。 “Xenomai 3.0 可与 RT 补丁结合起来使用并提供了所谓的皮肤LCTT 译注:一个封装层),使我们可以复用为其他系统编写的代码。不过,它们还没有完全统一起来,因为 Xenomai 使用了双内核方法而RT 补丁只适用于单一的 Linux 内核。“
近些年来RTL 组的资助来源越来越少,所以最终 OSADL 接过了这个重任。Emde 说“当最近开发工作因缺少资金而陷入停滞时OSADL 对 RTL 的支持进入到第三个重大阶段:开始直接资助 Thomas Gleixner 的工作。”
正如 Emde 在其[10月5日的一篇博文][13]中所描述的那样,实时 Linux 的应用领域正在日益扩大由其原来主要服务的工业控制扩大到了汽车行业和电信业等领域这表明资助的来源也应该得到拓宽。Emde 原文写道:“仅仅靠来自工控行业的资金来支撑全部的工作是不合理的,因为电信等其他行业也在享用实时 Linux 内核。”
当 Linux 基金会表明有兴趣提供资金支持时OSADL 认为“单一的资助和控制渠道要有效得多”LCTT 译注指最终由Linux 基金会全盘接手了 RTL 项目Emde 如是说。不过他补充说作为黄金级成员OSADL 仍参与监管项目的工作,会继续从事其宣传和质量保证方面的活动。
###汽车行业期待 RTL 的崛起###
Emde 表示RTL 会继续在工业应用领域飞速发展并逐渐取代其他实时操作系统。而且他补充说RTL 在汽车行业发展也很迅猛,以后会扩大并应用到铁路和航空电子设备上。
的确Linux 在汽车行业将扮演越来越重要的角色,这也是 Linux 基金对 RTL 所寄予厚望的原因之所在。RTL 工作组可能会与 Linux 基金会旗下的[车载Linux][14](AGLAutomotive Grade Linux)工作组展开合作。Emde 猜测Google 高调参与的主要动因可能也是希望将 RTL 用于汽车控制。此外,德州仪器(TI)也非常期望将其 Jacinto 处理器应用于汽车行业。
面向车载 Linux 的项目比如AGL的目标是要扩大 Linux 在车载设备上的应用范围其应用不是仅限于车载信息娱乐IVIIn-Vehicle Infotainment而是要进入到譬如集群控制和车载通讯领域而这些领域目前主要使用的是 QNX 之类的实时操作系统。无人驾驶汽车在实时性上对操作系统也有很高的要求。
Emde 特别指出OSADL 的 [SIL2LinuxMP][15] 项目可能会在将 RTL 引入到汽车工业领域上扮演重要的角色。SIL2LinuxMP 并不是专门针对汽车工业的项目,但随着 BMW 公司参与其中,汽车行业成为其很重要的应用领域之一。该项目的目标在于验证 RTL 在采用单核或多核 CPU 的标准化商用COTSCommercial Off-The-Shelf板卡上运行所需的基本组件。它定义了引导程序、根文件系统、Linux 内核以及对应支持 RTL 的 C 库。
无人机和机器人使用实时 Linux 的时机也已成熟Xenomai 系统早已用在许多机器人以及一些无人机中。不过,在更广泛的嵌入式 Linux 世界包括了消费电子产品和物联网应用中RTL 可以扮演的角色很有限。主要的障碍在于,无线通信和互联网本身会带来延迟。
Emde 说:“目前实时 Linux 主要还是应用于系统内部控制以及系统与周边外设之间的控制,在远程控制机器上作用不大。企图通过互联网实现实时控制恐怕不是一件可行的事情。”
--------------------------------------------------------------------------------
via: http://www.linux.com/news/software/applications/858828-new-collaborative-group-to-speed-real-time-linux
作者:[Eric Brown][a]
译者:[unicornx](https://github.com/unicornx)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.linux.com/community/forums/person/42808
[1]:http://www.linuxfoundation.org/news-media/announcements/2015/10/linux-foundation-announces-project-advance-real-time-linux
[2]:http://archive.linuxgizmos.com/celebrating-the-open-source-automation-development-labs-first-birthday/
[3]:https://www.osadl.org/
[4]:http://linuxgizmos.com/adding-real-time-to-linux-with-preempt-rt/
[5]:http://archive.linuxgizmos.com/real-time-linux-what-is-it-why-do-you-want-it-how-do-you-do-it-a/
[6]:http://www.linux.com/news/embedded-mobile/mobile-linux/841651-embedded-linux-pioneer-montavista-spins-iot-linux-distribution
[7]:http://archive.linuxgizmos.com/industry-group-aims-linux-at-automation-apps/
[8]:http://archive.linuxgizmos.com/industrial-linux-groups-merge/
[9]:https://www.osadl.org/Safety-Critical-Linux.safety-critical-linux.0.html
[10]:http://www.osadl.org/QA-Farm-Realtime.qa-farm-about.0.html
[11]:http://www.linux.com/news/embedded-mobile/mobile-linux/818011-embedded-linux-keeps-growing-amid-iot-disruption-says-study
[12]:http://xenomai.org/
[13]:https://www.osadl.org/Single-View.111+M5dee6946dab.0.html
[14]:http://www.linux.com/news/embedded-mobile/mobile-linux/833358-first-open-automotive-grade-linux-spec-released
[15]:http://www.osadl.org/SIL2LinuxMP.sil2-linux-project.0.html

View File

@ -0,0 +1,149 @@
10 个 Linux 中的 passwd 命令示例
================================================================================
正如 **passwd** 命令的名称所示,其用于改变系统用户的密码。如果 passwd 命令由非 root 用户执行,那么它会询问当前用户的密码,然后设置调用该命令的用户的新密码。当此命令由超级用户 root 执行的话,就可以重新设置任何用户的密码,包括不知道当前密码的用户。
在这篇文章中,我们将用实例来介绍 passwd 命令。
#### 语法 : ####
# passwd {options} {user_name}
可以在 passwd 命令使用不同的选项,列表如下:
![](http://www.linuxtechi.com/wp-content/uploads/2015/09/passwd-command-options.jpg)
### 例1更改系统用户的密码 ###
当你使用非 root 用户登录时,比如我使用 linuxtechi 登录的情况下,运行 passwd 命令它会重置当前登录用户的密码。
[linuxtechi@linuxworld ~]$ passwd
Changing password for user linuxtechi.
Changing password for linuxtechi.
(current) UNIX password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[linuxtechi@linuxworld ~]$
当你作为 root 用户登录后并运行 **passwd** 命令时,它默认情况下会重新设置 root 的密码,如果你在 passwd 命令后指定了用户名,它会重置该用户的密码。
[root@linuxworld ~]# passwd
[root@linuxworld ~]# passwd linuxtechi
![](http://www.linuxtechi.com/wp-content/uploads/2015/09/passwd-command.jpg)
**注意** : 系统用户的密码以加密的形式保存在 /etc/shadow 文件中。
### 例2显示密码状态信息 ###
要显示用户密码的状态信息,请在 passwd 命令后使用 **-S** 选项。
[root@linuxworld ~]# passwd -S linuxtechi
linuxtechi PS 2015-09-20 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@linuxworld ~]#
在上面的输出中,第一个字段显示的用户名,第二个字段显示密码状态(**PS = 密码设置LK = 密码锁定NP = 无密码**),第三个字段显示了上次修改密码的时间,后面四个字段分别显示了密码能更改的最小期限和最大期限,警告期限和没有使用该口令的时长。
### 例3显示所有账号的密码状态信息 ###
为了显示所有用户密码的状态信息需要使用 “**-aS**”选项在passwd 命令中,示例如下所示:
root@localhost:~# passwd -Sa
![](http://www.linuxtechi.com/wp-content/uploads/2015/09/passwd-sa.jpg)
LCTT译注不同发行版/passwd 的行为不同。CentOS6.6 没有测试成功,但 Ubuntu 可以。)
### 例4使用 -d 选项删除用户的密码 ###
用我做例子,删除 **linuxtechi** 用户的密码。
[root@linuxworld ~]# passwd -d linuxtechi
Removing password for user linuxtechi.
passwd: Success
[root@linuxworld ~]#
[root@linuxworld ~]# passwd -S linuxtechi
linuxtechi NP 2015-09-20 0 99999 7 -1 (Empty password.)
[root@linuxworld ~]#
“**-d**” 选项将清空用户密码,并禁用用户登录。
### 例5设置密码立即过期 ###
在 passwd 命令中使用 '-e' 选项会立即使用户的密码过期,这将强制用户在下次登录时更改密码。
[root@linuxworld ~]# passwd -e linuxtechi
Expiring password for user linuxtechi.
passwd: Success
[root@linuxworld ~]# passwd -S linuxtechi
linuxtechi PS 1970-01-01 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@linuxworld ~]#
现在尝试用 linuxtechi 用户 SSH 连接到主机。
![](http://www.linuxtechi.com/wp-content/uploads/2015/09/passwd-expiry.jpg)
### 例6锁定系统用户的密码 ###
在 passwd 命令中使用 **-l** 选项能锁定用户的密码,它会在密码的起始位置加上“!”。当他/她的密码被锁定时,用户将不能更改它的密码。
[root@linuxworld ~]# passwd -l linuxtechi
Locking password for user linuxtechi.
passwd: Success
[root@linuxworld ~]# passwd -S linuxtechi
linuxtechi LK 2015-09-20 0 99999 7 -1 (Password locked.)
[root@linuxworld ~]#
### 例7使用 -u 选项解锁用户密码 ###
[root@linuxworld ~]# passwd -u linuxtechi
Unlocking password for user linuxtechi.
passwd: Success
[root@linuxworld ~]#
### 例8使用 -i 选项设置非活动时间 ###
在 passwd 命令中使用 -i 选项用于设系统用户的非活动时间。当用户我使用的是linuxtechi用户密码过期后用户再经过 **n** 天后在我的情况下是10天没有更改其密码用户将不能登录。
[root@linuxworld ~]# passwd -i 10 linuxtechi
Adjusting aging data for user linuxtechi.
passwd: Success
[root@linuxworld ~]#
[root@linuxworld ~]# passwd -S linuxtechi
linuxtechi PS 2015-09-20 0 99999 7 10 (Password set, SHA512 crypt.)
[root@linuxworld ~]#
### 例9使用 -n 选项设置密码更改的最短时间 ###
在下面的例子中linuxtechi用户必须在90天内更改密码。0表示用户可以在任何时候更改它的密码。
[root@linuxworld ~]# passwd -n 90 linuxtechi
Adjusting aging data for user linuxtechi.
passwd: Success
[root@linuxworld ~]# passwd -S linuxtechi
linuxtechi PS 2015-09-20 90 99999 7 10 (Password set, SHA512 crypt.)
[root@linuxworld ~]#
### 例10使用 -w 选项设置密码过期前的警告期限 ###
**-w** 选项在 passwd 命令中用于设置用户的警告期限。这意味着n天之后他/她的密码将过期。
[root@linuxworld ~]# passwd -w 12 linuxtechi
Adjusting aging data for user linuxtechi.
passwd: Success
[root@linuxworld ~]# passwd -S linuxtechi
linuxtechi PS 2015-09-20 90 99999 12 10 (Password set, SHA512 crypt.)
[root@linuxworld ~]#
--------------------------------------------------------------------------------
via: http://www.linuxtechi.com/10-passwd-command-examples-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/

View File

@ -0,0 +1,259 @@
Linux 中 df 命令的11个例子
================================================================================
df 即“可用磁盘”disk free用于显示文件系统的磁盘使用情况。默认情况下 df 命令将以每块 1K 的单位进行显示所有当前已挂载的文件系统,如果你想以人类易读的格式显示 df 命令的输出像这样“df -h”使用 -h 选项。
在这篇文章中,我们将讨论 `df` 命令在 Linux 下11种不同的实例。
在 Linux 下 df 命令的基本格式为:
# df {options} {mount_point_of_filesystem}
在 df 命令中可用的选项有:
![](http://www.linuxtechi.com/wp-content/uploads/2015/10/df-command-options.jpg)
df 的样例输出 :
[root@linux-world ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg00-root 17003304 804668 15311852 5% /
devtmpfs 771876 0 771876 0% /dev
tmpfs 777928 0 777928 0% /dev/shm
tmpfs 777928 8532 769396 2% /run
tmpfs 777928 0 777928 0% /sys/fs/cgroup
/dev/mapper/vg00-home 14987616 41000 14162232 1% /home
/dev/sda1 487652 62593 395363 14% /boot
/dev/mapper/vg00-var 9948012 48692 9370936 1% /var
/dev/mapper/vg00-sap 14987656 37636 14165636 1% /sap
[root@linux-world ~]#
### 例1使用 -a 选项列出所有文件系统的磁盘使用量 ###
当我们在 df 命令中使用 `-a` 选项时,它会显示所有文件系统的磁盘使用情况。
[root@linux-world ~]# df -a
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 17003304 804668 15311852 5% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devtmpfs 771876 0 771876 0% /dev
securityfs 0 0 0 - /sys/kernel/security
tmpfs 777928 0 777928 0% /dev/shm
devpts 0 0 0 - /dev/pts
tmpfs 777928 8532 769396 2% /run
tmpfs 777928 0 777928 0% /sys/fs/cgroup
cgroup 0 0 0 - /sys/fs/cgroup/systemd
pstore 0 0 0 - /sys/fs/pstore
cgroup 0 0 0 - /sys/fs/cgroup/cpuset
cgroup 0 0 0 - /sys/fs/cgroup/cpu,cpuacct
cgroup 0 0 0 - /sys/fs/cgroup/memory
cgroup 0 0 0 - /sys/fs/cgroup/devices
cgroup 0 0 0 - /sys/fs/cgroup/freezer
cgroup 0 0 0 - /sys/fs/cgroup/net_cls
cgroup 0 0 0 - /sys/fs/cgroup/blkio
cgroup 0 0 0 - /sys/fs/cgroup/perf_event
cgroup 0 0 0 - /sys/fs/cgroup/hugetlb
configfs 0 0 0 - /sys/kernel/config
/dev/mapper/vg00-root 17003304 804668 15311852 5% /
selinuxfs 0 0 0 - /sys/fs/selinux
systemd-1 0 0 0 - /proc/sys/fs/binfmt_misc
debugfs 0 0 0 - /sys/kernel/debug
hugetlbfs 0 0 0 - /dev/hugepages
mqueue 0 0 0 - /dev/mqueue
/dev/mapper/vg00-home 14987616 41000 14162232 1% /home
/dev/sda1 487652 62593 395363 14% /boot
/dev/mapper/vg00-var 9948012 48692 9370936 1% /var
/dev/mapper/vg00-sap 14987656 37636 14165636 1% /sap
[root@linux-world ~]#
### 例2以人类易读的格式显示 df 命令的输出 ###
在 df 命令中使用`-h`选项以人类易读的格式输出例如5K500M 及 5G
[root@linux-world ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-root 17G 786M 15G 5% /
devtmpfs 754M 0 754M 0% /dev
tmpfs 760M 0 760M 0% /dev/shm
tmpfs 760M 8.4M 752M 2% /run
tmpfs 760M 0 760M 0% /sys/fs/cgroup
/dev/mapper/vg00-home 15G 41M 14G 1% /home
/dev/sda1 477M 62M 387M 14% /boot
/dev/mapper/vg00-var 9.5G 48M 9.0G 1% /var
/dev/mapper/vg00-sap 15G 37M 14G 1% /sap
[root@linux-world ~]#
### 例3显示特定文件系统已使用的空间 ###
假如我们想显示 /sap 文件系统空间的使用情况。
[root@linux-world ~]# df -h /sap/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-sap 15G 37M 14G 1% /sap
[root@linux-world ~]#
### 例4输出所有已挂载文件系统的类型 ###
`-T` 选项用在 df 命令中用来显示文件系统的类型。
[root@linux-world ~]# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg00-root ext4 17003304 804668 15311852 5% /
devtmpfs devtmpfs 771876 0 771876 0% /dev
tmpfs tmpfs 777928 0 777928 0% /dev/shm
tmpfs tmpfs 777928 8532 769396 2% /run
tmpfs tmpfs 777928 0 777928 0% /sys/fs/cgroup
/dev/mapper/vg00-home ext4 14987616 41000 14162232 1% /home
/dev/sda1 ext3 487652 62593 395363 14% /boot
/dev/mapper/vg00-var ext3 9948012 48696 9370932 1% /var
/dev/mapper/vg00-sap ext3 14987656 37636 14165636 1% /sap
[root@linux-world ~]#
### 例5按块大小输出文件系统磁盘使用情况 ###
[root@linux-world ~]# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg00-root 17003304 804668 15311852 5% /
devtmpfs 771876 0 771876 0% /dev
tmpfs 777928 0 777928 0% /dev/shm
tmpfs 777928 8532 769396 2% /run
tmpfs 777928 0 777928 0% /sys/fs/cgroup
/dev/mapper/vg00-home 14987616 41000 14162232 1% /home
/dev/sda1 487652 62593 395363 14% /boot
/dev/mapper/vg00-var 9948012 48696 9370932 1% /var
/dev/mapper/vg00-sap 14987656 37636 14165636 1% /sap
[root@linux-world ~]#
### 例6输出文件系统的 inode 信息 ###
`-i` 选项用在 df 命令用于显示文件系统的 inode 信息。
所有文件系统的 inode 信息:
[root@linux-world ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg00-root 1089536 22031 1067505 3% /
devtmpfs 192969 357 192612 1% /dev
tmpfs 194482 1 194481 1% /dev/shm
tmpfs 194482 420 194062 1% /run
tmpfs 194482 13 194469 1% /sys/fs/cgroup
/dev/mapper/vg00-home 960992 15 960977 1% /home
/dev/sda1 128016 337 127679 1% /boot
/dev/mapper/vg00-var 640848 1235 639613 1% /var
/dev/mapper/vg00-sap 960992 11 960981 1% /sap
[root@linux-world ~]#
特定文件系统的 inode 信息:
[root@linux-world ~]# df -i /sap/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg00-sap 960992 11 960981 1% /sap
[root@linux-world ~]#
### 例7输出所有文件系统使用情况汇总 ###
`-total` 选项在 df 命令中用于显示所有文件系统的磁盘使用情况汇总。
[root@linux-world ~]# df -h --total
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-root 17G 786M 15G 5% /
devtmpfs 754M 0 754M 0% /dev
tmpfs 760M 0 760M 0% /dev/shm
tmpfs 760M 8.4M 752M 2% /run
tmpfs 760M 0 760M 0% /sys/fs/cgroup
/dev/mapper/vg00-home 15G 41M 14G 1% /home
/dev/sda1 477M 62M 387M 14% /boot
/dev/mapper/vg00-var 9.5G 48M 9.0G 1% /var
/dev/mapper/vg00-sap 15G 37M 14G 1% /sap
total 58G 980M 54G 2% -
[root@linux-world ~]#
### 例8只打印本地文件系统磁盘的使用情况 ###
假设网络文件系统也挂载在 Linux 上,但我们只想显示本地文件系统的信息,这可以通过使用 df 命令的 `-l` 选项来实现。
![](http://www.linuxtechi.com/wp-content/uploads/2015/10/nfs4-fs-mount.jpg)
只打印本地文件系统:
[root@linux-world ~]# df -Thl
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg00-root ext4 17G 791M 15G 6% /
devtmpfs devtmpfs 754M 0 754M 0% /dev
tmpfs tmpfs 760M 0 760M 0% /dev/shm
tmpfs tmpfs 760M 8.4M 752M 2% /run
tmpfs tmpfs 760M 0 760M 0% /sys/fs/cgroup
/dev/mapper/vg00-home ext4 15G 41M 14G 1% /home
/dev/sda1 ext3 477M 62M 387M 14% /boot
/dev/mapper/vg00-var ext3 9.5G 105M 8.9G 2% /var
/dev/mapper/vg00-sap ext3 15G 37M 14G 1% /sap
[root@linux-world ~]#
### 例9打印特定文件系统类型的磁盘使用情况 ###
`-t` 选项在 df 命令中用来打印特定文件系统类型的信息,用 `-t` 指定文件系统的类型,如下所示:
对于 ext4 :
[root@linux-world ~]# df -t ext4
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg00-root 17003304 809492 15307028 6% /
/dev/mapper/vg00-home 14987616 41000 14162232 1% /home
[root@linux-world ~]#
对于 nfs4 :
[root@linux-world ~]# df -t nfs4
Filesystem 1K-blocks Used Available Use% Mounted on
192.168.1.5:/opensuse 301545472 266833920 19371008 94% /data
[root@linux-world ~]#
### 例10使用 -x 选项排除特定的文件系统类型 ###
`-x``exclude-type` 在 df 命令中用来在输出中排出某些文件系统类型。
假设我们想打印除 ext3 外所有的文件系统。
[root@linux-world ~]# df -x ext3
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg00-root 17003304 809492 15307028 6% /
devtmpfs 771876 0 771876 0% /dev
tmpfs 777928 0 777928 0% /dev/shm
tmpfs 777928 8540 769388 2% /run
tmpfs 777928 0 777928 0% /sys/fs/cgroup
/dev/mapper/vg00-home 14987616 41000 14162232 1% /home
192.168.1.5:/opensuse 301545472 266834944 19369984 94% /data
[root@linux-world ~]#
### 例11在 df 命令的输出中只打印特定的字段 ###
`-output={field_name1,field_name2...}` 选项用于显示 df 命令某些字段的输出。
可用的字段名有: `source`, `fstype`, `itotal`, `iused`, `iavail`, `ipcent`, `size`, `used`, `avail`, `pcent``target`
[root@linux-world ~]# df --output=fstype,size,iused
Type 1K-blocks IUsed
ext4 17003304 22275
devtmpfs 771876 357
tmpfs 777928 1
tmpfs 777928 423
tmpfs 777928 13
ext4 14987616 15
ext3 487652 337
ext3 9948012 1373
ext3 14987656 11
nfs4 301545472 451099
[root@linux-world ~]#
--------------------------------------------------------------------------------
via: http://www.linuxtechi.com/11-df-command-examples-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/

View File

@ -0,0 +1,39 @@
如何在 64 位 Ubuntu 15.10 中编译最新版 32 位 Wine
================================================================================
Wine 发布了最新的1.7.53版本。此版本带来的大量性能提升,包括**XAudio****Direct3D**代码清理,改善**OLE对象嵌入**技术,更好的** Web Services dll**的实现,还有其他大量更新。
![](http://www.tuxarena.com/wp-content/uploads/2015/10/wine1753a.jpg)
虽然有一个官方 [Wine][1] PPA但目前只提供1.7.44版本,所以安装最新版本可以从源码编译安装。
[下载源码包][2][直接下载地址在此][3])并解压 `tar -xf wine-1.7.53`。然后,安装如下依赖。
sudo apt-get install build-essential gcc-multilib libx11-dev:i386 libfreetype6-dev:i386 libxcursor-dev:i386 libxi-dev:i386 libxshmfence-dev:i386 libxxf86vm-dev:i386 libxrandr-dev:i386 libxinerama-dev:i386 libxcomposite-dev:i386 libglu1-mesa-dev:i386 libosmesa6-dev:i386 libpcap0.8-dev:i386 libdbus-1-dev:i386 libncurses5-dev:i386 libsane-dev:i386 libv4l-dev:i386 libgphoto2-dev:i386 liblcms2-dev:i386 gstreamer0.10-plugins-base:i386 libcapi20-dev:i386 libcups2-dev:i386 libfontconfig1-dev:i386 libgsm1-dev:i386 libtiff5-dev:i386 libmpg123-dev:i386 libopenal-dev:i386 libldap2-dev:i386 libgnutls-dev:i386 libjpeg-dev:i386
现在切换到 wine-1.7.53 解压后的文件夹,并输入:
./configure
make
sudo make install
同样地,你也可以给配置脚本指定 prefix 参数。以普通用户安装 wine
./configure --prefix=$HOME/usr/bin
make
make install
这种情况下Wine 将会安装在`$HOME/usr/bin/wine`,所以请检查`$HOME/usr/bin`在你的`PATH`变量中。
--------------------------------------------------------------------------------
via: http://www.tuxarena.com/2015/10/how-to-compile-latest-wine-32-bit-on-64-bit-ubuntu-15-10/
作者Craciun Dan
译者:[VicYu/Vic020](http://vicyu.net)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[1]:https://launchpad.net/~ubuntu-wine/+archive/ubuntu/ppa
[2]:https://www.winehq.org/announce/1.7.53
[3]:http://prdownloads.sourceforge.net/wine/wine-1.7.53.tar.bz2

View File

@ -0,0 +1,83 @@
LibreOffice 这五年2010-2015
================================================================================
youtube 视频
<iframe width="660" height="371" src="https://www.youtube.com/embed/plo8kP_ts-8?feature=oembed" frameborder="0" allowfullscreen></iframe>
[LibreOffice][1]来自文档基金会The Document Foundation一个自由开源的令人惊叹的办公套件。LO LibreOffice在2010年9月28日由 [OpenOffice.org][2] 分支出来;而 OOo OpenOffice.org则是早期的 [StarOffice][3] 开源版本。LibreOffice 支持文字处理,创建与编辑电子表格,幻灯片,图表和图形,数据库,数学公式的创建和编辑等。
### 核心应用: ###
- **Writer** 文字处理器
- **Calc** 电子表格应用程序,类似于 Excel
- **Impress** 应用演示,支持 Microsoft PowerPoint 的格式
- **Draw** 矢量图形编辑器
- **Math** 用于编写和​​编辑数学公式的特殊应用
- **Base** 数据库管理
![LibreOffice 3.3, 2011](https://github.com/paulcarroty/Articles/raw/master/LO_History/3.3/Help-License-Info.png)
*LibreOffice 3.3, 2011*
这是LibreOffice 的第一个版本 - 分支自 OpenOffice.org
![LibreOffice 3.4](https://github.com/paulcarroty/Articles/raw/master/LO_History/3.4/1cc80d1cada204a061402785b2048f7clibreoffice-3.4.3.png)
*LibreOffice 3.4*
![LibreOffice 3.5](https://raw.githubusercontent.com/paulcarroty/Articles/master/LO_History/3.5/libreoffice35-large_001.jpg)
*LibreOffice 3.5*
![LibreOffice 3.6](https://github.com/paulcarroty/Articles/raw/master/LO_History/3.6/libreoffice-3.6.0.png)
*LibreOffice 3.6*
![Libre Office 4.0](https://github.com/paulcarroty/Articles/raw/master/LO_History/4.0/libreoffice-writer.png)
*LibreOffice 4.0*
![Libre Office 4.1](https://github.com/paulcarroty/Articles/raw/master/LO_History/4.1/Writer1.png)
*LibreOffice 4.1*
![Libre Office 4.2](https://github.com/paulcarroty/Articles/raw/master/LO_History/4.2/libreoffice-4.2.png)
*Libre Office 4.2*
![LibreOffice 4.3](https://github.com/paulcarroty/Articles/raw/master/LO_History/4.3/libreoffice.jpg)
*LibreOffice 4.3*
![LibreOffice 4.4](https://github.com/paulcarroty/Articles/raw/master/LO_History/4.4/LibreOffice_Writer_4_4_2.png)
*LibreOffice 4.4*
![Libre Office 5.0](https://github.com/paulcarroty/Articles/raw/master/LO_History/5.0/LibreOffice_Writer_5.0.png)
*LibreOffice 5.0*
### Libre Office 的发展,出自 Wikipedia ###
![StarOffice major derivatives](https://commons.wikimedia.org/wiki/File%3AStarOffice_major_derivatives.svg)
### LibreOffice 5.0 预览 ###
youtube 视频
<iframe width="660" height="371" src="https://www.youtube.com/embed/BVdofVqarAc?feature=oembed" frameborder="0" allowfullscreen></iframe>
--------------------------------------------------------------------------------
via: https://tlhp.cf/libreoffice-5years-evolution/
作者:[Pavlo Rudyi][a]
译者:[strugglingyouth](https://github.com/strugglingyouth)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://tlhp.cf/author/paul/
[1]:http://www.libreoffice.org/
[2]:https://www.openoffice.org/
[3]:http://www.staroffice.org/

View File

@ -0,0 +1,299 @@
Linux 的历史24 年,一步一个脚印
================================================================================
youtube 视频
<iframe width="660" height="371" src="https://www.youtube.com/embed/84cHeoEebJM?feature=oembed" frameborder="0" allowfullscreen></iframe>
### 史前 ###
没有 [C 编程语言][1] 和 [GNU 项目][2] 构成 Linux 环境,也就不可能有 Linux 的成功。
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/00-1.jpg)
*Ken Thompson 和 Dennis Ritchie*
[Ken Thompson][1] 和 [Dennis Ritchie][2] 在 1969-1970 创造了 Unix 操作系统。之后发布了新的 [C 编程语言][3],它是一种高级的、可移植的编程语言。 Linux 内核用 C 和一些汇编代码写成。
![Richard Matthew Stallman](https://github.com/paulcarroty/Articles/raw/master/Linux_24/00-2.jpg)
*Richard Matthew Stallman*
[Richard Matthew Stallman][4] 在 1984 年启动了 [GNU 项目][5]。最大的一个目标 - 完全自由的类-Unix 操作系统。
### 1991 元年 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/1991-1.jpg)
*Linus Torvalds, 1991*
[Linus Torvalds][5] 在芬兰赫尔辛基开始了 Linux 内核开发,他是为他的硬件 - Intel 30386 CPU 编写的程序。他也使用 Minix 和 GNU C 编译器。下面是 Linus Torvalds 给 Minix 新闻组的历史消息:
> From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
> Newsgroups: comp.os.minix
> Subject: What would you like to see most in minix?
> Summary: small poll for my new operating system
> Message-ID:
> Date: 25 Aug 91 20:57:08 GMT
> Organization: University of Helsinki
>
>
> Hello everybody out there using minix -
>
> I'm doing a (free) operating system (just a hobby, won't be big and
> professional like gnu) for 386(486) AT clones. This has been brewing
> since april, and is starting to get ready. I'd like any feedback on
> things people like/dislike in minix, as my OS resembles it somewhat
> (same physical layout of the file-system (due to practical reasons)
> among other things).
>
> I've currently ported bash(1.08) and gcc(1.40), and things seem to work.
> This implies that I'll get something practical within a few months, and
> I'd like to know what features most people would want. Any suggestions
> are welcome, but I won't promise I'll implement them :-)
>
> Linus (torvalds@kruuna.helsinki.fi)
从此之后Linux 开始得到了世界范围志愿者和专业专家的支持。Linus 的同事 Ari Lemmke 把它命名为 “Linux” - 这其实是他们的大学 ftp 服务器上的项目目录名称。
### 1992 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/1992-1.jpg)
在 GPLv2 协议下发布了 0.12 版 Linux 内核。
### 1993 ###
![Slackware 1.0 ](https://github.com/paulcarroty/Articles/raw/master/Linux_24/1993-1.png)
Slackware 首次发布LCTT 译注Slackware Linux 是一个高度技术性的、干净的发行版,只有少量非常有限的个人设置) 最早的 Linux 发行版,其领导者 Patrick Volkerding 也是最早的。其时Linux 内核有 100 多个开发者。
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/1993-2.png)
*Debian*
Debian 最大的 Linux 社区之一也创立于 1991 年。
### 1994 ###
Linux 1.0 发布了,多亏了 XFree 86 项目,第一次有了 GUI。
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/1994-1.png)
*Red Hat Linux*
发布了 Red Hat Linux 1.0
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/1994-2.png)
*S.u.S.E Linux*
和 [S.u.S.E. Linux][6] 1.0。
### 1995 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/1995-1.png)
*Red Hat Inc.*
Bob Young 和 Marc Ewing 合并他们的本地业务为 [Red Hat Software][7]。Linux 移植到了很多硬件平台。
### 1996 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/1996-1.png)
*Tux*
企鹅 Tux 是 Linux 官方吉祥物Linus Torvalds 参观了堪培拉国家动物园和水族馆之后有了这个想法。发布了 Linux 2.0,支持对称多处理器。开始开发 KDE。
### 1997 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/1997-1.jpg)
*Miguel de Icaza*
Miguel de Icaza 和 Federico Mena 开始开发 GNOME - 自由桌面环境和应用程序。Linus Torvalds 赢得了 Linux 商标冲突官司Linux 成为了 Linus Torvalds 的注册商标。
### 1998 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/1998-1.jpg)
*大教堂和集市*
Eric S. Raymond 出版了文章 [The Cathedral and the Bazaar大教堂和集市][8] - 高度推荐阅读。Linux 得到了大公司的支持: IBM、Oracle、康柏。
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/1998-2.png)
*Mandrake Linux*
Mandrake Linux 首次发布 - 基于红帽 Linux 的发行版,带有 KDE 桌面环境。
### 1999 ###
![](https://upload.wikimedia.org/wikipedia/commons/4/4f/KDE_1.1.jpg)
第一个主要的 KDE 版本。
### 2000 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2000-1.jpg)
Dell 支持 Linux - 这是第一个支持的大硬件供应商。
### 2001 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2001-1.jpg)
*Revolution OS*
纪录片 “Revolution OS操作系统革命” - GNU、Linux、开源、自由软件的 20 年历史,以及对 Linux 和开源界顶级黑客的采访。
### 2002 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2002-1.jpg)
*BitKeeper*
Linux 开始使用 BitKeeper这是一种商业版的分布式版本控制软件。
### 2003 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2003-1.png)
*SUSE*
Novell 用 2.1 亿美元购买了 SUSE Linux AG。同年 SCO 集团 也开始了同 IBM 以及 Linux 社区关于 Unix 版权的艰难的法律诉讼。
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2003-2.png)
*Fedora*
红帽和 Linux 社区首次发布了 Fedora Linux。
### 2004 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2004-1.png)
*X.ORG 基金会*
XFree86 解散了并加入到 [X.Org 基金会][9] X 的开发更快了。
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2004-2.jpg)
Ubuntu 4.10 Ubuntu 首次发布
### 2005 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2005-1.png)
*openSUSE*
[openSUSE][10] 开始了,这是企业版 Novells OS 的免费版本。OpenOffice.org 开始支持 OpenDocument 标准。
### 2006 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2006-1.png)
一个新的 Linux 发行版,基于红帽企业版 Linux 的 Oracle Linux。微软和 Novell 开始在 IT 和专利保护方面进行合作。
### 2007 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2007-1.jpg)
*Dell Linux 笔记本*
Dell 发布了第一个预装 Linux 的笔记本。
### 2008 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2008-1.jpg)
*KDE 4.0*
KDE 4 发布了,但是不稳定,很多用户开始迁移到 GNOME。
### 2009 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2009-1.jpg)
*Red Hat*
红帽 Linux 取得了成功 - 市值达 26亿2千万美元。
2009 年微软在 GPLv2 协议下向 Linux 内核提交了第一个补丁。
### 2010 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2010-1.png)
*Novell -> Attachmate*
Novell 已 22亿美元卖给了 Attachmate Group, Inc。SUSE 和 Novell 成为了新公司的两款独立的产品。
[systemd][11] 首次发布,开始了 Linux 系统的革命。
### 2011 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2011-1.png)
*Unity 桌面2011*
Ubuntu Unity 发布,遭到很多用户的批评。
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2011-2.png)
*GNOME 3.02011*
GNOME 3.0 发布, Linus Torvalds 评论为 “unholy mess” 有很多负面评论。Linux 内核 3.0 发布。
### 2012 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2012-1.png)
*1500 万行代码*
Linux 内核达到 1500 万行代码。微软成为主要贡献者之一。
### 2013 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2013-1.png)
Kali Linux 1.0 发布, 用于渗透测试和数字取证,基于 Debian 的 Linux 发行版。2014 年 CentOS 及其代码开发者加入到了红帽公司。
### 2014 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2014-1.jpg)
*Lennart Poettering 和 Kay Sievers*
systemd 成为 Ubuntu 和所有主流 Linux 发行版的默认初始化程序。Ubuntu 有 2200 万用户。安卓的大进步 - 占了所有移动设备的 75% 份额。
### 2015 ###
![](https://github.com/paulcarroty/Articles/raw/master/Linux_24/2015-1.jpg)
发布了 Linux 4.0。Mandriva 公司清算,但还有很多分支,其中最流行的一个是 Mageia。
带着对 Linux 的热爱而执笔。
--------------------------------------------------------------------------------
via: https://tlhp.cf/linux-history/
作者:[Pavlo Rudyi][a]
译者:[ictlyh](http://mutouxiaogui.cn/blog)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://tlhp.cf/author/paul/
[1]:https://en.wikipedia.org/wiki/C_(programming_language)
[2]:https://en.wikipedia.org/wiki/GNU_Project
[3]:https://en.wikipedia.org/wiki/Ken_Thompson
[4]:https://en.wikipedia.org/wiki/Dennis_Ritchie
[5]:https://en.wikipedia.org/wiki/Linus_Torvalds
[6]:https://en.wikipedia.org/wiki/SUSE_Linux_distributions
[7]:https://en.wikipedia.org/wiki/Red_Hat
[8]:https://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar
[9]:http://www.x.org/
[10]:https://en.opensuse.org/Main_Page
[11]:https://en.wikipedia.org/wiki/Systemd

View File

@ -1,41 +1,41 @@
学习数据结构与算法分析如何帮助您成为更优秀的开发人员?
学习数据结构与算法分析如何帮助您成为更优秀的开发人员
================================================================================
> "相较于其它方式我一直热衷于推崇围绕数据设计代码我想这也是Git能够如此成功的一大原因[…]在我看来,区别程序员优劣的一大标准就在于他是否认为自己设计的代码数据结构更为重要。"
> "相较于其它方式我一直热衷于推崇围绕数据设计代码我想这也是Git能够如此成功的一大原因[…]在我看来,区别程序员优劣的一大标准就在于他是否认为自己设计的代码还是数据结构更为重要。"
-- Linus Torvalds
---
> "优秀的数据结构与简陋的代码组合远比倒过来的组合方式更好。"
> "优秀的数据结构与简陋的代码组合远比反之的组合更好。"
-- Eric S. Raymond, The Cathedral and The Bazaar
学习数据结构与算法分析会让您成为一名出色的程序员。
**数据结构与算法分析是一种解决问题的思维模式** 在您的个人知识库中,数据结构与算法分析的相关知识储备越多,您将具备应对并解决越多各类繁杂问题的能力。掌握了这种思维模式,您还将有能力针对新问题提出更多以前想不到的漂亮的解决方案。
**数据结构与算法分析是一种解决问题的思维模式** 在您的个人知识库中,数据结构与算法分析的相关知识储备越多,您将越多具备应对并解决各类繁杂问题的能力。掌握了这种思维模式,您还将有能力针对新问题提出更多以前想不到的漂亮的解决方案。
您将***更深入地***了解,计算机如何完成各项操作。无论您是否是直接使用给定的算法它都影响着您作出的各种技术决定。从计算机操作系统的内存分配到RDBMS的内在工作机制以及网络堆栈如何实现将数据从地球的一个角落发送至另一个角落这些大大小小的工作的完成,都离不开基础的数据结构与算法,理解并掌握它将会让您更了解计算机的运作机理。
您将*更深入地*了解,计算机如何完成各项操作。无论您是否是直接使用给定的算法它都影响着您作出的各种技术决定。从计算机操作系统的内存分配到RDBMS的内在工作机制以及网络协议如何实现将数据从地球的一个角落发送至另一个角落这些大大小小的工作的完成,都离不开基础的数据结构与算法,理解并掌握它将会让您更了解计算机的运作机理。
对算法广泛深入的学习能为您应对大体系的问题储备解决方案。之前建模困难时遇到的问题如今通常都能融合进经典的数据结构中得到很好地解决。即使是最基础的数据结构,只要对它进行足够深入的钻研,您将会发现在每天的编程任务中都能经常用到这些知识。
对算法广泛深入的学习能为您储备解决方案来应对大体系的问题。之前建模困难时遇到的问题如今通常都能融合进经典的数据结构中得到很好地解决。即使是最基础的数据结构,只要对它进行足够深入的钻研,您将会发现在每天的编程任务中都能经常用到这些知识。
有了这种思维模式,在遇到磨棱两可的问题时,您会具备想出新的解决方案的能力。即使最初并没有打算用数据结构与算法解决相应问题的情况,当真正用它们解决这些问题时您会发现它们将非常有用。要意识到这一点,您至少要对数据结构与算法分析的基础知识有深入直观的认识。
有了这种思维模式,在遇到磨棱两可的问题时,您将能够想出新奇的解决方案。即使最初并没有打算用数据结构与算法解决相应问题的情况,当真正用它们解决这些问题时您会发现它们将非常有用。要意识到这一点,您至少要对数据结构与算法分析的基础知识有深入直观的认识。
理论认识就讲到这里,让我们一起看看下面几个例子。
###最短路径问题###
我们想要开发一个计算从一个国际机场出发到另一个国际机场的最短距离的软件。假设我们受限于以下路线:
我们想要开发一个软件来计算从一个国际机场出发到另一个国际机场的最短距离。假设我们受限于以下路线:
![](http://www.happybearsoftware.com/assets/posts/how-learning-data-structures-and-algorithms-makes-you-a-better-developer/airport-graph-d2e32b3344b708383e405d67a80c29ea.svg)
从这张画出机场各自之间的距离以及目的地的图中,我们如何才能找到最短距离,比方说从赫尔辛基到伦敦?**Dijkstra算法**是能让我们在最短的时间得到正确答案的适用算法。
从这张画出机场各自之间的距离以及目的地的图中,我们如何才能找到最短距离,比方说从赫尔辛基到伦敦?**[Dijkstra算法][3]**是能让我们在最短的时间得到正确答案的适用算法。
在所有可能的解法中如果您曾经遇到过这类问题知道可以用Dijkstra算法求解您大可不必从零开始实现它只需***知道***该算法能指向固定的代码库帮助您解决相关的实现问题。
在所有可能的解法中如果您曾经遇到过这类问题知道可以用Dijkstra算法求解您大可不必从零开始实现它只需***知道***该算法的代码库帮助您解决相关的实现问题。
实现了该算法您将深入理解一项著名的重要图论算法。您会发现实际上该算法太集成化因此名为A*的扩展包经常会代替该算法使用。这个算法应用广泛,从机器人指引的功能实现到TCP数据包路由以及GPS寻径问题都能应用到这个算法。
如果你深入到该算法的实现中,您将深入理解一项著名的重要图论算法。您会发现实际上该算法比较消耗资源,因此名为[A*][4]的扩展经常用于代替该算法。这个算法应用广泛,从机器人寻路的功能实现到TCP数据包路由以及GPS寻径问题都能应用到这个算法。
###先后排序问题###
您想要在开放式在线课程平台上(如Udemy或Khan学院)学习某课程,有些课程之间彼此依赖。例如,用户学习牛顿力学机制课程前必须先修微积分课程课程之间可以有多种依赖关系。用YAML表述举例如下
您想要在开放式在线课程MOOCMassive Open Online Courses平台上(如Udemy或Khan学院)学习某课程,有些课程之间彼此依赖。例如,用户学习牛顿力学Newtonian Mechanics课程前必须先修微积分Calculus课程课程之间可以有多种依赖关系。用YAML表述举例如下
# Mapping from course name to requirements
#
@ -54,16 +54,16 @@
astrophysics: [radioactivity, calculus]
quantumn_mechanics: [atomic_physics, radioactivity, calculus]
鉴于以上这些依赖关系,作为一名用户,我希望系统能帮我列出必修课列表,让我在之后可以选择任意一门课程学习。如果我选择了`微积分`课程,我希望系统能返回以下列表:
鉴于以上这些依赖关系,作为一名用户,我希望系统能帮我列出必修课列表,让我在之后可以选择任意一门课程学习。如果我选择了微积分calculus课程,我希望系统能返回以下列表:
arithmetic -> algebra -> trigonometry -> calculus
这里有两个潜在的重要约束条件:
- 返回的必修课列表中,每门课都与下一门课存在依赖关系
- 必修课列表中不能有重复项
- 我们不希望列表中有任何重复课程
这是解决数据间依赖关系的例子,解决该问题的排序算法称作拓扑排序算法(tsort)。它适用于解决上述我们用YAML列出的依赖关系图的情况以下是在图中显示的相关结果(其中箭头代表`需要先修的课程`):
这是解决数据间依赖关系的例子,解决该问题的排序算法称作拓扑排序算法(tsorttopological sort)。它适用于解决上述我们用YAML列出的依赖关系图的情况以下是在图中显示的相关结果(其中箭头代表`需要先修的课程`):
![](http://www.happybearsoftware.com/assets/posts/how-learning-data-structures-and-algorithms-makes-you-a-better-developer/course-graph-2f60f42bb0dc95319954ce34c02705a2.svg)
@ -79,16 +79,17 @@
这符合我们上面描述的需求,用户只需选出`radioactivity`,就能得到在此之前所有必修课程的有序列表。
在运用该排序算法之前,我们甚至不需要深入了解算法的实现细节。一般来说,选择不同的编程语言在其标准库中都会有相应的算法实现。即使最坏的情况Unix也会默认安装`tsort`程序,运行`tsort`程序,您就可以实现该算法
在运用该排序算法之前,我们甚至不需要深入了解算法的实现细节。一般来说,你可能选择的各种编程语言在其标准库中都会有相应的算法实现。即使最坏的情况Unix也会默认安装`tsort`程序,运行`man tsort` 来了解该程序。
###其它拓扑排序适用场合###
- **工具** 使用诸如`make`的工具您可以声明任务之间的依赖关系,这里拓扑排序算法将从底层实现具有依赖关系的任务顺序执行的功能。
- **有`require`指令的编程语言**,适用于要运行当前文件需先运行另一个文件的情况。这里拓扑排序用于识别文件运行顺序以保证每个文件只加载一次,且满足所有文件间的依赖关系要求。
- **包含甘特图的项目管理工具**.甘特图能直观列出给定任务的所有依赖关系,在这些依赖关系之上能提供给用户任务完成的预估时间。我不常用到甘特图,但这些绘制甘特图的工具很可能会用到拓扑排序算法。
- **类似`make`的工具** 可以让您声明任务之间的依赖关系,这里拓扑排序算法将从底层实现具有依赖关系的任务顺序执行的功能。
- **有`require`指令的编程语言**适用于要运行当前文件需先运行另一个文件的情况。这里拓扑排序用于识别文件运行顺序以保证每个文件只加载一次,且满足所有文件间的依赖关系要求。
- **带有甘特图的项目管理工具**。甘特图能直观列出给定任务的所有依赖关系,在这些依赖关系之上能提供给用户任务完成的预估时间。我不常用到甘特图,但这些绘制甘特图的工具很可能会用到拓扑排序算法。
###霍夫曼编码实现数据压缩###
[霍夫曼编码](http://en.wikipedia.org/wiki/Huffman_coding)是一种用于无损数据压缩的编码算法。它的工作原理是先分析要压缩的数据,再为每个字符创建一个二进制编码。字符出现的越频繁,编码赋值越小。因此在一个数据集中`e`可能会编码为`111`,而`x`会编码为`10010`。创建了这种编码模式,就可以串联无定界符,也能正确地进行解码。
[霍夫曼编码][5]Huffman coding是一种用于无损数据压缩的编码算法。它的工作原理是先分析要压缩的数据再为每个字符创建一个二进制编码。字符出现的越频繁编码赋值越小。因此在一个数据集中`e`可能会编码为`111`,而`x`会编码为`10010`。创建了这种编码模式,就可以串联无定界符,也能正确地进行解码。
在gzip中使用的DEFLATE算法就结合了霍夫曼编码与LZ77一同用于实现数据压缩功能。gzip应用领域很广特别适用于文件压缩(以`.gz`为扩展名的文件)以及用于数据传输中的http请求与应答。
@ -96,10 +97,11 @@
- 您会理解为什么较大的压缩文件会获得较好的整体压缩效果(如压缩的越多,压缩率也越高)。这也是SPDY协议得以推崇的原因之一在复杂的HTTP请求/响应过程数据有更好的压缩效果。
- 您会了解数据传输过程中如果想要压缩JavaScript/CSS文件运行压缩软件是完全没有意义的。PNG文件也是类似因为它们已经使用DEFLATE算法完成了压缩。
- 如果您试图强行破译加密的信息,您可能会发现重复数据压缩质量越好给定的密文单位bit的数据压缩将帮助您确定相关的[分组密码模式](http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation).
- 如果您试图强行破译加密的信息,您可能会发现由于重复数据压缩质量更好,密文给定位的数据压缩率将帮助您确定相关的[分组密码工作模式][6]block cipher mode of operation.)。
###下一步选择学习什么是困难的###
作为一名程序员应当做好持续学习的准备。为成为一名web开发人员您需要了解标记语言以及Ruby/Python正则表达式SQLJavaScript等高级编程语言还需要了解HTTP的工作原理如何运行UNIX终端以及面向对象的编程艺术。您很难有效地预览到未来的职业全景因此选择下一步要学习哪些知识是困难的。
作为一名程序员应当做好持续学习的准备。为了成为一名web开发人员您需要了解标记语言以及Ruby/Python、正则表达式、SQL、JavaScript等高级编程语言还需要了解HTTP的工作原理如何运行UNIX终端以及面向对象的编程艺术。您很难有效地预览到未来的职业全景因此选择下一步要学习哪些知识是困难的。
我没有快速学习的能力因此我不得不在时间花费上非常谨慎。我希望尽可能地学习到有持久生命力的技能即不会在几年内就过时的技术。这意味着我也会犹豫这周是要学习JavaScript框架还是那些新的编程语言。
@ -111,13 +113,14 @@ via: http://www.happybearsoftware.com/how-learning-data-structures-and-algorithm
作者:[Happy Bear][a]
译者:[icybreaker](https://github.com/icybreaker)
校对:[校对者ID](https://github.com/校对者ID)
校对:[Caroline](https://github.com/carolinewuyan)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.happybearsoftware.com/
[1]:http://en.wikipedia.org/wiki/Huffman_coding
[2]:http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation
[3]:http://en.wikipedia.org/wiki/Dijkstra's_algorithm
[4]:http://en.wikipedia.org/wiki/A*_search_algorithm
[5]:http://en.wikipedia.org/wiki/Huffman_coding
[6]:http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation

View File

@ -0,0 +1,88 @@
那些奇特的 Linux 发行版本
================================================================================
从大多数消费者所关注的诸如 UbuntuFedoraMint 或 elementary OS 到更加复杂、轻量级和企业级的诸如 SlackwareArch Linux 或 RHEL这些发行版本我都已经见识过了。除了这些难道没有其他别的了吗其实 Linux 的生态系统是非常多样化的,对每个人来说,总有一款适合你。下面就让我们讨论一些稀奇古怪的小众 Linux 发行版本吧,它们代表着开源平台真正的多样性。
### Puppy Linux
![strangest linux distros](http://2.bp.blogspot.com/--cSL2-6rIgA/VcwNc5hFebI/AAAAAAAAJzk/AgB55mVtJVQ/s1600/Puppy-Linux.png)
它是一个仅有一个普通 DVD 光盘容量十分之一大小的操作系统,这就是 Puppy Linux。整个操作系统仅有 100MB 大小!并且它还可以从内存中运行,这使得它运行极快,即便是在老式的 PC 机上。 在操作系统启动后,你甚至可以移除启动介质!还有什么比这个更好的吗? 系统所需的资源极小,大多数的硬件都会被自动检测到,并且它预装了能够满足你基本需求的软件。[在这里体验 Puppy Linux 吧][1].
### Suicide Linux(自杀 Linux)
![suicide linux](http://3.bp.blogspot.com/-dfeehRIQKpo/VdMgRVQqIJI/AAAAAAAAJz0/TmBs-n2K9J8/s1600/suicide-linux.jpg)
这个名字吓到你了吗?我想应该是。 ‘任何时候 -注意是任何时候-一旦你远程输入不正确的命令,解释器都会创造性地将它重定向为 `rm -rf /` 命令,然后擦除你的硬盘’。它就是这么简单。我真的很想知道谁自信到将[Suicide Linux][2] 安装到生产机上。 **警告:千万不要在生产机上尝试这个!** 假如你感兴趣的话,现在可以通过一个简洁的[DEB 包][3]来获取到它。
### PapyrOS
![top 10 strangest linux distros](http://3.bp.blogspot.com/-Q0hlEMCD9-o/VdMieAiXY1I/AAAAAAAAJ0M/iS_ZjVaZAk8/s1600/papyros.png)
它的 “奇怪”是好的方面。PapyrOS 正尝试着将 Android 的 material design 设计语言引入到新的 Linux 发行版本上。尽管这个项目还处于早期阶段,看起来它已经很有前景。该项目的网页上说该系统已经完成了 80%,随后人们可以期待它的第一个 Alpha 发行版本。在该项目被宣告提出时,我们做了 [PapyrOS][4] 的小幅报道,从它的外观上看,它甚至可能会引领潮流。假如你感兴趣的话,可在 [Google+][5] 上关注该项目并可通过 [BountySource][6] 来贡献出你的力量。
### Qubes OS
![10 most unique linux distros](http://3.bp.blogspot.com/-8aOtnTp3Yxk/VdMo_KWs4sI/AAAAAAAAJ0o/3NTqhaw60jM/s1600/qubes-linux.png)
Qubes 是一个开源的操作系统,其设计通过使用[安全分级Security by Compartmentalization][14]的方法,来提供强安全性。其前提假设是不存在完美的没有 bug 的桌面环境。并通过实现一个安全隔离Security by Isolation 的方法,[Qubes Linux][7]试图去解决这些问题。Qubes 基于 Xen、X 视窗系统和 Linux并可运行大多数的 Linux 应用,支持大多数的 Linux 驱动。Qubes 入选了 Access Innovation Prize 2014 for Endpoint Security Solution 决赛名单。
### Ubuntu Satanic Edition
![top10 linux distros](http://3.bp.blogspot.com/-2Sqvb_lilC0/VdMq_ceoXnI/AAAAAAAAJ00/kot20ugVJFk/s1600/ubuntu-satanic.jpg)
Ubuntu SE 是一个基于 Ubuntu 的发行版本。通过一个含有主题、壁纸甚至来源于某些天才新晋艺术家的重金属音乐的综合软件包,“它同时带来了最好的自由软件和免费的金属音乐” 。尽管这个项目看起来不再积极开发了, Ubuntu Satanic Edition 甚至在其名字上都显得奇异。 [Ubuntu SE (Slightly NSFW)][8]。
### Tiny Core Linux
![10 strange linux distros](http://2.bp.blogspot.com/-ZtIVjGMqdx0/VdMv136Pz1I/AAAAAAAAJ1E/-q34j-TXyUY/s1600/tiny-core-linux.png)
Puppy Linux 还不够小?试试这个吧。 Tiny Core Linux 是一个 12MB 大小的图形化 Linux 桌面!是的,你没有看错。一个主要的补充说明:它不是一个完整的桌面,也并不完全支持所有的硬件。它只含有能够启动进入一个非常小巧的 X 桌面,支持有线网络连接的核心部件。它甚至还有一个名为 Micro Core Linux 的没有 GUI 的版本,仅有 9MB 大小。[Tiny Core Linux][9]。
### NixOS
![top 10 unique and special linux distros](http://4.bp.blogspot.com/-idmCvIxtxeo/VdcqcggBk1I/AAAAAAAAJ1U/DTQCkiLqlLk/s1600/nixos.png)
它是一个资深用户所关注的 Linux 发行版本,有着独特的打包和配置管理方式。在其他的发行版本中,诸如升级的操作可能是非常危险的。升级一个软件包可能会引起其他包无法使用,而升级整个系统感觉还不如重新安装一个。在那些你不能安全地测试由一个配置的改变所带来的结果的更改之上,它们通常没有“重来”这个选项。在 NixOS 中,整个系统由 Nix 包管理器按照一个纯功能性的构建语言的描述来构建。这意味着构建一个新的配置并不会重写先前的配置。大多数其他的特色功能也遵循着这个模式。Nix 相互隔离地存储所有的软件包。有关 NixOS 的更多内容请看[这里][10]。
### GoboLinux
![strangest linux distros](http://4.bp.blogspot.com/-rOYfBXg-UiU/VddCF7w_xuI/AAAAAAAAJ1w/Nf11bOheOwM/s1600/gobolinux.jpg)
这是另一个非常奇特的 Linux 发行版本。它与其他系统如此不同的原因是它有着独特的重新整理的文件系统。它有着自己独特的子目录树其中存储着所有的文件和程序。GoboLinux 没有专门的包数据库,因为其文件系统就是它的数据库。在某些方面,这类重整有些类似于 OS X 上所看到的功能。
### Hannah Montana Linux
![strangest linux distros](http://1.bp.blogspot.com/-3P22pYfih6Y/VdcucPOv4LI/AAAAAAAAJ1g/PszZDbe83sQ/s1600/hannah-montana-linux.jpg)
它是一个基于 Kubuntu 的 Linux 发行版本,它有着汉娜·蒙塔娜( Hannah Montana 主题的开机启动界面、KDM(KDE Display Manager)、图标集、ksplash、plasma、颜色主题和壁纸(I'm so sorry)。[这是它的链接][12]。这个项目现在不再活跃了。
### RLSD Linux
它是一个极其精简、小巧、轻量和安全可靠的,基于 Linux 文本的操作系统。开发者称 “它是一个独特的发行版本,提供一系列的控制台应用和自带的安全特性,对黑客或许有吸引力。” [RLSD Linux][13].
我们还错过了某些更加奇特的发行版本吗?请让我们知晓吧。
--------------------------------------------------------------------------------
via: http://www.techdrivein.com/2015/08/the-strangest-most-unique-linux-distros.html
作者Manuel Jose
译者:[FSSlc](https://github.com/FSSlc)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
[1]:http://puppylinux.org/main/Overview%20and%20Getting%20Started.htm
[2]:http://qntm.org/suicide
[3]:http://sourceforge.net/projects/suicide-linux/files/
[4]:http://www.techdrivein.com/2015/02/papyros-material-design-linux-coming-soon.html
[5]:https://plus.google.com/communities/109966288908859324845/stream/3262a3d3-0797-4344-bbe0-56c3adaacb69
[6]:https://www.bountysource.com/teams/papyros
[7]:https://www.qubes-os.org/
[8]:http://ubuntusatanic.org/
[9]:http://tinycorelinux.net/
[10]:https://nixos.org/
[11]:http://www.gobolinux.org/
[12]:http://hannahmontana.sourceforge.net/
[13]:http://rlsd2.dimakrasner.com/
[14]:https://en.wikipedia.org/wiki/Compartmentalization_(information_security)

View File

@ -0,0 +1,165 @@
如何在 Linux 上从 NetworkManager 切换为 systemd-network
================================================================================
在 Linux 世界里,对 [systemd][1] 的采用一直是激烈争论的主题,它的支持者和反对者之间的战火仍然在燃烧。到了今天,大部分主流 Linux 发行版都已经采用了 systemd 作为默认的初始化init系统。
正如其作者所说,作为一个 “从未完成、从未完善、但一直追随技术进步” 的系统systemd 已经不只是一个初始化进程,它被设计为一个更广泛的系统以及服务管理平台,这个平台是一个包含了不断增长的核心系统进程、库和工具的生态系统。
**systemd** 的其中一部分是 **systemd-networkd**,它负责 systemd 生态中的网络配置。使用 systemd-networkd你可以为网络设备配置基础的 DHCP/静态 IP 网络。它还可以配置虚拟网络功能,例如网桥、隧道和 VLAN。systemd-networkd 目前还不能直接支持无线网络,但你可以使用 wpa_supplicant 服务配置无线适配器,然后把它和 **systemd-networkd** 联系起来。
在很多 Linux 发行版中NetworkManager 仍然作为默认的网络配置管理器。和 NetworkManager 相比,**systemd-networkd** 仍处于积极的开发状态,还缺少一些功能。例如,它还不能像 NetworkManager 那样能让你的计算机在任何时候通过多种接口保持连接。它还没有为更高层面的脚本编程提供 ifup/ifdown 钩子函数。但是systemd-networkd 和其它 systemd 组件(例如用于域名解析的 **resolved**、NTP 的**timesyncd**,用于命名的 udevd结合的非常好。随着时间增长**systemd-networkd**只会在 systemd 环境中扮演越来越重要的角色。
如果你对 **systemd-networkd** 的进步感到高兴,从 NetworkManager 切换到 systemd-networkd 是值得你考虑的一件事。如果你强烈反对 systemd对 NetworkManager 或[基础网络服务][2]感到很满意,那也很好。
但对于那些想尝试 systemd-networkd 的人,可以继续看下去,在这篇指南中学会在 Linux 中怎么从 NetworkManager 切换到 systemd-networkd。
### 需求 ###
systemd 210 及其更高版本提供了 systemd-networkd。因此诸如 Debian 8 "Jessie" (systemd 215)、 Fedora 21 (systemd 217)、 Ubuntu 15.04 (systemd 219) 或更高版本的 Linux 发行版和 systemd-networkd 兼容。
对于其它发行版,在开始下一步之前先检查一下你的 systemd 版本。
$ systemctl --version
### 从 NetworkManager 切换到 Systemd-networkd ###
从 NetworkManager 切换到 systemd-networkd 其实非常简答(反过来也一样)。
首先,按照下面这样先停用 NetworkManager 服务,然后启用 systemd-networkd。
$ sudo systemctl disable NetworkManager
$ sudo systemctl enable systemd-networkd
你还要启用 **systemd-resolved** 服务systemd-networkd用它来进行域名解析。该服务还实现了一个缓存式 DNS 服务器。
$ sudo systemctl enable systemd-resolved
$ sudo systemctl start systemd-resolved
当启动后,**systemd-resolved** 就会在 /run/systemd 目录下某个地方创建它自己的 resolv.conf。但是把 DNS 解析信息存放在 /etc/resolv.conf 是更普遍的做法,很多应用程序也会依赖于 /etc/resolv.conf。因此为了兼容性按照下面的方式创建一个到 /etc/resolv.conf 的符号链接。
$ sudo rm /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
### 用 systemd-networkd 配置网络连接 ###
要用 systemd-networkd 配置网络服务,你必须指定带.network 扩展名的配置信息文本文件。这些网络配置文件保存到 /etc/systemd/network 并从这里加载。当有多个文件时systemd-networkd 会按照字母顺序一个个加载并处理。
首先创建 /etc/systemd/network 目录。
$ sudo mkdir /etc/systemd/network
#### DHCP 网络 ####
首先来配置 DHCP 网络。对于此,先要创建下面的配置文件。文件名可以任意,但记住文件是按照字母顺序处理的。
$ sudo vi /etc/systemd/network/20-dhcp.network
----------
[Match]
Name=enp3*
[Network]
DHCP=yes
正如你上面看到的,每个网络配置文件包括了一个或多个 “sections”每个 “section”都用 [XXX] 开头。每个 section 包括了一个或多个键值对。`[Match]` 部分决定这个配置文件配置哪个(些)网络设备。例如,这个文件匹配所有名称以 ens3 开头的网络设备(例如 enp3s0、 enp3s1、 enp3s2 等等)对于匹配的接口,然后启用 [Network] 部分指定的 DHCP 网络配置。
### 静态 IP 网络 ###
如果你想给网络设备分配一个静态 IP 地址,那就新建下面的配置文件。
$ sudo vi /etc/systemd/network/10-static-enp3s0.network
----------
[Match]
Name=enp3s0
[Network]
Address=192.168.10.50/24
Gateway=192.168.10.1
DNS=8.8.8.8
正如你猜测的, enp3s0 接口地址会被指定为 192.168.10.50/24默认网关是 192.168.10.1 DNS 服务器是 8.8.8.8。这里微妙的一点是,接口名 enp3s0 事实上也匹配了之前 DHCP 配置中定义的模式规则。但是,根据词汇顺序,文件 "10-static-enp3s0.network" 在 "20-dhcp.network" 之前被处理,对于 enp3s0 接口静态配置比 DHCP 配置有更高的优先级。
一旦你完成了创建配置文件,重启 systemd-networkd 服务或者重启机器。
$ sudo systemctl restart systemd-networkd
运行以下命令检查服务状态:
$ systemctl status systemd-networkd
$ systemctl status systemd-resolved
![](https://farm1.staticflickr.com/719/21010813392_76abe123ed_c.jpg)
### 用 systemd-networkd 配置虚拟网络设备 ###
**systemd-networkd** 同样允许你配置虚拟网络设备例如网桥、VLAN、隧道、VXLAN、绑定等。你必须在用 .netdev 作为扩展名的文件中配置这些虚拟设备。
这里我展示了如何配置一个桥接接口。
#### Linux 网桥 ####
如果你想创建一个 Linux 网桥(br0) 并把物理接口(eth1) 添加到网桥,你可以新建下面的配置。
$ sudo vi /etc/systemd/network/bridge-br0.netdev
----------
[NetDev]
Name=br0
Kind=bridge
然后按照下面这样用 .network 文件配置网桥接口 br0 和从接口 eth1。
$ sudo vi /etc/systemd/network/bridge-br0-slave.network
----------
[Match]
Name=eth1
[Network]
Bridge=br0
----------
$ sudo vi /etc/systemd/network/bridge-br0.network
----------
[Match]
Name=br0
[Network]
Address=192.168.10.100/24
Gateway=192.168.10.1
DNS=8.8.8.8
最后,重启 systemd-networkd。
$ sudo systemctl restart systemd-networkd
你可以用 [brctl 工具][3] 来验证是否创建好了网桥 br0。
### 总结 ###
当 systemd 誓言成为 Linux 的系统管理器时,有类似 systemd-networkd 的东西来管理网络配置也就不足为奇。但是在现阶段systemd-networkd 看起来更适合于网络配置相对稳定的服务器环境。对于桌面/笔记本环境,它们有多种临时有线/无线接口NetworkManager 仍然是比较好的选择。
对于想进一步了解 systemd-networkd 的人,可以参考官方[man 手册][4]了解完整的支持列表和关键点。
--------------------------------------------------------------------------------
via: http://xmodulo.com/switch-from-networkmanager-to-systemd-networkd.html
作者:[Dan Nanni][a]
译者:[ictlyh](http://mutouxiaogui.cn/blog)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://xmodulo.com/author/nanni
[1]:http://xmodulo.com/use-systemd-system-administration-debian.html
[2]:http://xmodulo.com/disable-network-manager-linux.html
[3]:http://xmodulo.com/how-to-configure-linux-bridge-interface.html
[4]:http://www.freedesktop.org/software/systemd/man/systemd.network.html

View File

@ -0,0 +1,427 @@
超神们15 位健在的世界级程序员!
================================================================================
当开发人员说起世界顶级程序员时,他们的名字往往会被提及。
好像现在程序员有很多,其中不乏有许多优秀的程序员。但是哪些程序员更好呢?
虽然这很难客观评价不过在这个话题确实是开发者们津津乐道的。ITworld 深入程序员社区,避开四溅的争执口水,试图找出可能存在的所谓共识。事实证明,屈指可数的某些名字经常是讨论的焦点。
![](http://images.techhive.com/images/article/2015/09/superman-620x465-100611650-orig.jpg)
*图片来源: [tom_bullock CC BY 2.0][1]*
下面就让我们来看看这些世界顶级的程序员吧!
### 玛格丽特·汉密尔顿Margaret Hamilton ###
![](http://images.techhive.com/images/article/2015/09/margaret_hamilton-620x465-100611764-orig.jpg)
*图片来源: [NASA][2]*
**成就: 阿波罗飞行控制软件背后的大脑**
生平: 查尔斯·斯塔克·德雷珀实验室Charles Stark Draper Laboratory软件工程部的主任以她为首的团队负责设计和打造 NASA 的阿波罗的舰载飞行控制器软件和空间实验室Skylab的任务。基于阿波罗这段的工作经历她又后续开发了[通用系统语言Universal Systems Language][5]和[开发先于事实( Development Before the Fact][6]的范例。开创了[异步软件、优先调度和超可靠的软件设计][7]理念。被认为发明了“[软件工程( software engineering][8]”一词。1986年获[奥古斯塔·埃达·洛夫莱斯奖Augusta Ada Lovelace Award][9]2003年获 [NASA 杰出太空行动奖Exceptional Space Act Award][10]。
评论:
> “汉密尔顿发明了测试,使美国计算机工程规范了很多” —— [ford_beeblebrox][11]
> “我认为在她之前不敬地说包括高德纳Knuth在内的计算机编程是另一种形式上留存的数学分支。然而这个宇宙飞船的飞行控制系统明确地将编程带入了一个崭新的领域。” —— [Dan Allen][12]
> “... 她引入了‘软件工程’这个术语 — 并作出了最好的示范。” —— [David Hamilton][13]
> “真是个坏家伙” [Drukered][14]
### 唐纳德·克努斯Donald Knuth即 高德纳 ###
![](http://images.techhive.com/images/idge/imported/imageapi/2014/10/08/17/slide_donald_knuth-620x465-100502872-orig.jpg)
*图片来源: [vonguard CC BY-SA 2.0][15]*
**成就: 《计算机程序设计艺术The Art of Computer ProgrammingTAOCP》 作者**
生平: 撰写了[编程理论的权威书籍][16]。发明了数字排版系统 Tex。1971年[ACM美国计算机协会葛丽丝·穆雷·霍普奖Grace Murray Hopper Award][17] 的首位获奖者。1974年获 ACM [图灵奖A. M. Turing][18]1979年获[美国国家科学奖章National Medal of Science][19]1995年获IEEE[约翰·冯·诺依曼奖章John von Neumann Medal][20]。1998年入选[计算机历史博物馆Computer History Museum名人录Hall of Fellows][21]。
评论:
> “... 写的计算机编程艺术The Art of Computer ProgrammingTAOCP可能是有史以来计算机编程方面最大的贡献。”—— [佚名][22]
> “唐·克努斯的 TeX 是我所用过的计算机程序中唯一一个几乎没有 bug 的。真是让人印象深刻!”—— [Jaap Weel][23]
> “如果你要问我的话,我只能说太棒了!” —— [Mitch Rees-Jones][24]
### 肯·汤普逊Ken Thompson ###
![](http://images.techhive.com/images/idge/imported/imageapi/2014/10/08/17/slide_ken-thompson-620x465-100502874-orig.jpg)
*图片来源: [Association for Computing Machinery][25]*
**成就: Unix 之父**
生平:与[丹尼斯·里奇Dennis Ritchie][26]共同创造了 Unix。创造了 [B 语言][27]、[UTF-8 字符编码方案][28]、[ed 文本编辑器][29],同时也是 Go 语言的共同开发者。和里奇共同获得1983年的[图灵奖A.M. Turing Award ][30]1994年获 [IEEE 计算机先驱奖( IEEE Computer Pioneer Award][31]1998年获颁[美国国家科技奖章( National Medal of Technology ][32]。在1997年入选[计算机历史博物馆Computer History Museum名人录Hall of Fellows][33]。
评论:
> “... 可能是有史以来最能成事的程序员了。Unix 内核Unix 工具,国际象棋程序世界冠军 BellePlan 9Go 语言。” —— [Pete Prokopowicz][34]
> “肯所做出的贡献,据我所知无人能及,是如此的根本、实用、经得住时间的考验,时至今日仍在使用。” —— [Jan Jannink][35]
### 理查德·斯托曼Richard Stallman ###
![](http://images.techhive.com/images/idge/imported/imageapi/2014/10/08/17/slide_richard_stallman-620x465-100502868-orig.jpg)
*图片来源: [Jiel Beaumadier CC BY-SA 3.0][135]*
**成就: Emacs 和 GCC 缔造者**
生平: 成立了 [GNU 工程GNU Project] [36],并创造了它的许多核心工具,如 [Emacs、GCC、GDB][37] 和 [GNU Make][38]。还创办了[自由软件基金会Free Software Foundation] [39]。1990年荣获 ACM 的[葛丽丝·穆雷·霍普奖( Grace Murray Hopper Award][40]1998年获 [EFF 先驱奖Pioneer Award][41].
评论:
> “... 在 Symbolics 对阵 LMI 的战斗中,独自一人与一众 Lisp 黑客好手对码。” —— [Srinivasan Krishnan][42]
> “通过他在编程上的精湛造诣与强大信念,开辟了一整套编程与计算机的亚文化。” —— [Dan Dunay][43]
> “我可以不赞同这位伟人的很多方面,不必盖棺论定,他不可否认都已经是一位伟大的程序员了。” —— [Marko Poutiainen][44]
> “试想 Linux 如果没有 GNU 工程的前期工作会怎么样。(多亏了)斯托曼的炸弹!” —— [John Burnette][45]
### 安德斯·海尔斯伯格Anders Hejlsberg ###
![](http://images.techhive.com/images/idge/imported/imageapi/2014/10/08/17/slide_anders_hejlsberg-620x465-100502873-orig.jpg)
*图片来源: [D.Begley CC BY 2.0][46]*
**成就: 创造了Turbo Pascal**
生平: [Turbo Pascal 的原作者][47],是最流行的 Pascal 编译器和第一个集成开发环境。而后,[领导了 Turbo Pascal 的继任者 Delphi][48] 的构建。[C# 的主要设计师和架构师][49]。2001年荣获[ Dr. Dobb 的杰出编程奖Dr. Dobb's Excellence in Programming Award ][50]。
评论:
> “他用汇编语言为当时两个主流的 PC 操作系统DOS 和 CPM编写了 [Pascal] 编译器。用它来编译、链接并运行仅需几秒钟而不是几分钟。” —— [Steve Wood][51]
> “我佩服他 - 他创造了我最喜欢的开发工具,陪伴着我度过了三个关键的时期直至我成为一位专业的软件工程师。” —— [Stefan Kiryazov][52]
### Doug Cutting ###
![](http://images.techhive.com/images/idge/imported/imageapi/2014/10/08/17/slide_doug_cutting-620x465-100502871-orig.jpg)
图片来源: [vonguard CC BY-SA 2.0][53]
**成就: 创造了 Lucene**
生平: [开发了 Lucene 搜索引擎以及 Web 爬虫 Nutch][54] 和用于大型数据集的分布式处理套件 [Hadoop][55]。一位强有力的开源支持者Lucene、Nutch 以及 Hadoop 都是开源的)。前 [Apache 软件基金Apache Software Foundation的理事][56]。
评论:
> “...他就是那个既写出了优秀搜索框架lucene/solr又为世界开启大数据之门hadoop的男人。” —— [Rajesh Rao][57]
> “他在 Lucene 和 Hadoop及其它工程的创造/工作中为世界创造了巨大的财富和就业...” —— [Amit Nithianandan][58]
### Sanjay Ghemawat ###
![](http://images.techhive.com/images/idge/imported/imageapi/2014/10/08/17/slide_sanjay_ghemawat-620x465-100502876-orig.jpg)
*图片来源: [Association for Computing Machinery][59]*
**成就: 谷歌核心架构师**
生平: [协助设计和实现了一些谷歌大型分布式系统的功能][60],包括 MapReduce、BigTable、Spanner 和谷歌文件系统Google File System。[创造了 Unix 的 ical ][61]日历系统。2009年入选[美国国家工程院National Academy of Engineering][62]。2012年荣获 [ACM-Infosys 基金计算机科学奖( ACM-Infosys Foundation Award in the Computing Sciences][63]。
评论:
> “Jeff Dean的僚机。” —— [Ahmet Alp Balkan][64]
### Jeff Dean ###
![](http://images.techhive.com/images/idge/imported/imageapi/2014/10/08/17/slide_jeff_dean-620x465-100502866-orig.jpg)
*图片来源: [Google][65]*
**成就: 谷歌搜索索引背后的大脑**
生平:协助设计和实现了[许多谷歌大型分布式系统的功能][66]包括网页爬虫索引搜索AdSenseMapReduceBigTable 和 Spanner。2009年入选[美国国家工程院( National Academy of Engineering][67]。2012年荣获ACM 的[SIGOPS 马克·维瑟奖( SIGOPS Mark Weiser Award][68]及[ACM-Infosys基金计算机科学奖 ACM-Infosys Foundation Award in the Computing Sciences][69]。
评论:
> “... 带来了在数据挖掘GFS、MapReduce、BigTable上的突破。” —— [Natu Lauchande][70]
> “... 设计、构建并部署 MapReduce 和 BigTable和以及数不清的其它东西” —— [Erik Goldman][71]
### 林纳斯·托瓦兹Linus Torvalds ###
![](http://images.techhive.com/images/article/2015/09/linus_torvalds-620x465-100611765-orig.jpg)
*图片来源: [Krd CC BY-SA 4.0][72]*
**成就: Linux缔造者**
生平:创造了 [Linux 内核][73]与[开源的版本控制系统 Git][74]。收获了许多奖项和荣誉包括有1998年的 [EFF 先驱奖EFF Pioneer Award][75]2000年荣获[英国电脑学会British Computer Society授予的洛夫莱斯勋章Lovelace Medal][76]2012年荣获[千禧技术奖Millenium Technology Prize][77]还有2014年[IEEE计算机学会 IEEE Computer Society授予的计算机先驱奖Computer Pioneer Award][78]。同样入选了2008年的[计算机历史博物馆( Computer History Museum名人录Hall of Fellows][79]与2012年的[互联网名人堂Internet Hall of Fame ][80]。
评论:
> “他只用了几年的时间就写出了 Linux 内核,而 GNU HurdGNU 开发的内核历经25年的开发却丝毫没有准备发布的意思。他的成就就是带来了希望。” —— [Erich Ficker][81]
> “托沃兹可能是程序员的程序员。” —— [Dan Allen][82]
> “他真的很棒。” —— [Alok Tripathy][83]
### 约翰·卡马克John Carmack ###
![](http://images.techhive.com/images/idge/imported/imageapi/2014/10/08/17/slide_john_carmack-620x465-100502867-orig.jpg)
*图片来源: [QuakeCon CC BY 2.0][84]*
**成就: 毁灭战士的缔造者**
生平: ID 社联合创始人打造了德军总部3DWolfenstein 3D、毁灭战士Doom和雷神之锤Quake等所谓的即时 FPS 游戏。引领了[切片适配刷新adaptive tile refresh][86] [二叉空间分割binary space partitioning][87]表面缓存surface caching等开创性的计算机图像技术。2001年入选[互动艺术与科学学会名人堂Academy of Interactive Arts and Sciences Hall of Fame][88]2007年和2008年荣获工程技术类[艾美奖Emmy awards][89]并于2010年由[游戏开发者甄选奖( Game Developers Choice Awards][90]授予终生成就奖。
评论:
> “他在写第一个渲染引擎的时候不到20岁。这家伙这是个天才。我若有他四分之一的天赋便心满意足了。” —— [Alex Dolinsky][91]
> “... 德军总部3DWolfenstein 3D、毁灭战士Doom还有雷神之锤Quake在那时都是革命性的影响了一代游戏设计师。” —— [dniblock][92]
> “一个周末他几乎可以写出任何东西....” —— [Greg Naughton][93]
> “他是编程界的莫扎特... ” —— [Chris Morris][94]
### 法布里斯·贝拉Fabrice Bellard ###
![](http://images.techhive.com/images/idge/imported/imageapi/2014/10/08/17/slide_fabrice_bellard-620x465-100502870-orig.jpg)
*图片来源: [Duff][95]*
**成就: 创造了 QEMU**
生平: 创造了[一系列耳熟能详的开源软件][96],其中包括硬件模拟和虚拟化的平台 QEMU用于处理多媒体数据的 FFmpeg微型C编译器Tiny C Compiler和 一个可执行文件压缩软件 LZEXE。2000年和2001年[C语言混乱代码大赛Obfuscated C Code Contest的获胜者][97]并在2011年荣获[Google-O'Reilly 开源奖Google-O'Reilly Open Source Award ][98]。[计算 Pi 最多位数][99]的前世界纪录保持着。
评论:
> “我觉得法布里斯·贝拉做的每一件事都是那么显著而又震撼。” —— [raphinou][100]
> “法布里斯·贝拉是世界上最高产的程序员...” —— [Pavan Yara][101]
> “他就像软件工程界的尼古拉·特斯拉Nikola Tesla。” —— [Michael Valladolid][102]
> “自80年代以来他一直高产出一系列的成功作品。” —— [Michael Biggins][103]
### Jon Skeet ###
![](http://images.techhive.com/images/idge/imported/imageapi/2014/10/08/17/slide_jon_skeet-620x465-100502863-orig.jpg)
*图片来源: [Craig Murphy CC BY 2.0][104]*
**成就: Stack Overflow 的传说级贡献者**
生平: Google 工程师,[深入解析C#C# in Depth][105]的作者。保持着[有史以来在 Stack Overflow 上最高的声誉][106]平均每月解答390个问题。
评论:
> “他根本不需要调试器,只要他盯一下代码,错误之处自会原形毕露。” —— [Steven A. Lowe][107]
> “如果他的代码没有通过编译,那编译器应该道歉。” —— [Dan Dyer][108]
> “他根本不需要什么编程规范,他的代码就是编程规范。” —— [佚名][109]
### 亚当·安捷罗Adam D'Angelo ###
![](http://images.techhive.com/images/idge/imported/imageapi/2014/10/08/17/slide_image_adam_dangelo-620x465-100502875-orig.jpg)
*图片来源: [Philip Neustrom CC BY 2.0][110]*
**成就: Quora 的创办人之一**
生平: 还是 Facebook 工程师时,[为其搭建了 news feed 功能的基础][111]。直至其离开并联合创始了 Quora已经成为了 Facebook 的CTO和工程 VP。2001年以高中生的身份在[美国计算机奥林匹克USA Computing Olympiad上第八位完成比赛][112]。2004年ACM国际大学生编程大赛International Collegiate Programming Contest[获得银牌的团队 - 加利福尼亚技术研究所( California Institute of Technology][113]的成员。2005年入围 Topcoder 大学生[算法编程挑战赛Algorithm Coding Competition][114]。
评论:
> “一位程序设计全才。” —— [佚名][115]
> "我做的每个好东西,他都已有了六个。" —— [马克.扎克伯格Mark Zuckerberg][116]
### Petr Mitrechev ###
![](http://images.techhive.com/images/idge/imported/imageapi/2014/10/08/17/slide_petr_mitrichev-620x465-100502869-orig.jpg)
*图片来源: [Facebook][117]*
**成就: 有史以来最具竞技能力的程序员之一**
生平: 在国际信息学奥林匹克International Olympiad in Informatics中[两次获得金牌][118]20002002。在2006[赢得 Google Code Jam][119] 同时也是[TopCoder Open 算法大赛冠军][120]。也同样,两次赢得 Facebook黑客杯Facebook Hacker Cup[2011][121][2013][122])。写这篇文章的时候,[TopCoder 榜中排第二][123] Petr、在 [Codeforces 榜同样排第二][124]。
评论:
> “他是竞技程序员的偶像,即使在印度也是如此...” —— [Kavish Dwivedi][125]
### Gennady Korotkevich ###
![](http://images.techhive.com/images/idge/imported/imageapi/2014/10/08/17/slide_gennady_korot-620x465-100502864-orig.jpg)
*图片来源: [Ishandutta2007 CC BY-SA 3.0][126]*
**成就: 竞技编程小神童**
生平: 国际信息学奥林匹克International Olympiad in Informatics中最小参赛者11岁[6次获得金牌][127] (2007-2012)。2013年 ACM 国际大学生编程大赛International Collegiate Programming Contest[获胜队伍][128]成员及[2014 Facebook 黑客杯Facebook Hacker Cup][129]获胜者。写这篇文章的时候,[Codeforces 榜排名第一][130] Tourist、[TopCoder榜第一][131]。
评论:
> “一个编程神童!” —— [Prateek Joshi][132]
> “Gennady 真是棒,也是为什么我在白俄罗斯拥有一个强大开发团队的例证。” —— [Chris Howard][133]
> “Tourist 真是天才” —— [Nuka Shrinivas Rao][134]
--------------------------------------------------------------------------------
via: http://www.itworld.com/article/2823547/enterprise-software/158256-superclass-14-of-the-world-s-best-living-programmers.html#slide1
作者:[Phil Johnson][a]
译者:[martin2011qi](https://github.com/martin2011qi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.itworld.com/author/Phil-Johnson/
[1]:https://www.flickr.com/photos/tombullock/15713223772
[2]:https://commons.wikimedia.org/wiki/File:Margaret_Hamilton_in_action.jpg
[3]:http://klabs.org/home_page/hamilton.htm
[4]:https://www.youtube.com/watch?v=DWcITjqZtpU&feature=youtu.be&t=3m12s
[5]:http://www.htius.com/Articles/r12ham.pdf
[6]:http://www.htius.com/Articles/Inside_DBTF.htm
[7]:http://www.nasa.gov/home/hqnews/2003/sep/HQ_03281_Hamilton_Honor.html
[8]:http://www.nasa.gov/50th/50th_magazine/scientists.html
[9]:https://books.google.com/books?id=JcmV0wfQEoYC&pg=PA321&lpg=PA321&dq=ada+lovelace+award+1986&source=bl&ots=qGdBKsUa3G&sig=bkTftPAhM1vZ_3VgPcv-38ggSNo&hl=en&sa=X&ved=0CDkQ6AEwBGoVChMI3paoxJHWxwIVA3I-Ch1whwPn#v=onepage&q=ada%20lovelace%20award%201986&f=false
[10]:http://history.nasa.gov/alsj/a11/a11Hamilton.html
[11]:https://www.reddit.com/r/pics/comments/2oyd1y/margaret_hamilton_with_her_code_lead_software/cmrswof
[12]:http://qr.ae/RFEZLk
[13]:http://qr.ae/RFEZUn
[14]:https://www.reddit.com/r/pics/comments/2oyd1y/margaret_hamilton_with_her_code_lead_software/cmrv9u9
[15]:https://www.flickr.com/photos/44451574@N00/5347112697
[16]:http://cs.stanford.edu/~uno/taocp.html
[17]:http://awards.acm.org/award_winners/knuth_1013846.cfm
[18]:http://amturing.acm.org/award_winners/knuth_1013846.cfm
[19]:http://www.nsf.gov/od/nms/recip_details.jsp?recip_id=198
[20]:http://www.ieee.org/documents/von_neumann_rl.pdf
[21]:http://www.computerhistory.org/fellowawards/hall/bios/Donald,Knuth/
[22]:http://www.quora.com/Who-are-the-best-programmers-in-Silicon-Valley-and-why/answers/3063
[23]:http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Jaap-Weel
[24]:http://qr.ae/RFE94x
[25]:http://amturing.acm.org/photo/thompson_4588371.cfm
[26]:https://www.youtube.com/watch?v=JoVQTPbD6UY
[27]:https://www.bell-labs.com/usr/dmr/www/bintro.html
[28]:http://doc.cat-v.org/bell_labs/utf-8_history
[29]:http://c2.com/cgi/wiki?EdIsTheStandardTextEditor
[30]:http://amturing.acm.org/award_winners/thompson_4588371.cfm
[31]:http://www.computer.org/portal/web/awards/cp-thompson
[32]:http://www.uspto.gov/about/nmti/recipients/1998.jsp
[33]:http://www.computerhistory.org/fellowawards/hall/bios/Ken,Thompson/
[34]:http://www.quora.com/Computer-Programming/Who-is-the-best-programmer-in-the-world-right-now/answer/Pete-Prokopowicz-1
[35]:http://qr.ae/RFEWBY
[36]:https://groups.google.com/forum/#!msg/net.unix-wizards/8twfRPM79u0/1xlglzrWrU0J
[37]:http://www.emacswiki.org/emacs/RichardStallman
[38]:https://www.gnu.org/gnu/thegnuproject.html
[39]:http://www.emacswiki.org/emacs/FreeSoftwareFoundation
[40]:http://awards.acm.org/award_winners/stallman_9380313.cfm
[41]:https://w2.eff.org/awards/pioneer/1998.php
[42]:http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Greg-Naughton/comment/4146397
[43]:http://qr.ae/RFEaib
[44]:http://www.quora.com/Software-Engineering/Who-are-some-of-the-greatest-currently-active-software-architects-in-the-world/answer/Marko-Poutiainen
[45]:http://qr.ae/RFEUqp
[46]:https://www.flickr.com/photos/begley/2979906130
[47]:http://www.taoyue.com/tutorials/pascal/history.html
[48]:http://c2.com/cgi/wiki?AndersHejlsberg
[49]:http://www.microsoft.com/about/technicalrecognition/anders-hejlsberg.aspx
[50]:http://www.drdobbs.com/windows/dr-dobbs-excellence-in-programming-award/184404602
[51]:http://qr.ae/RFEZrv
[52]:http://www.quora.com/Software-Engineering/Who-are-some-of-the-greatest-currently-active-software-architects-in-the-world/answer/Stefan-Kiryazov
[53]:https://www.flickr.com/photos/vonguard/4076389963/
[54]:http://www.wizards-of-os.org/archiv/sprecher/a_c/doug_cutting.html
[55]:http://hadoop.apache.org/
[56]:https://www.linkedin.com/in/cutting
[57]:http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Shalin-Shekhar-Mangar/comment/2293071
[58]:http://www.quora.com/Who-are-the-best-programmers-in-Silicon-Valley-and-why/answer/Amit-Nithianandan
[59]:http://awards.acm.org/award_winners/ghemawat_1482280.cfm
[60]:http://research.google.com/pubs/SanjayGhemawat.html
[61]:http://www.quora.com/Google/Who-is-Sanjay-Ghemawat
[62]:http://www8.nationalacademies.org/onpinews/newsitem.aspx?RecordID=02062009
[63]:http://awards.acm.org/award_winners/ghemawat_1482280.cfm
[64]:http://www.quora.com/Google/Who-is-Sanjay-Ghemawat/answer/Ahmet-Alp-Balkan
[65]:http://research.google.com/people/jeff/index.html
[66]:http://research.google.com/people/jeff/index.html
[67]:http://www8.nationalacademies.org/onpinews/newsitem.aspx?RecordID=02062009
[68]:http://news.cs.washington.edu/2012/10/10/uw-cse-ph-d-alum-jeff-dean-wins-2012-sigops-mark-weiser-award/
[69]:http://awards.acm.org/award_winners/dean_2879385.cfm
[70]:http://www.quora.com/Computer-Programming/Who-is-the-best-programmer-in-the-world-right-now/answer/Natu-Lauchande
[71]:http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Cosmin-Negruseri/comment/28399
[72]:https://commons.wikimedia.org/wiki/File:LinuxCon_Europe_Linus_Torvalds_05.jpg
[73]:http://www.linuxfoundation.org/about/staff#torvalds
[74]:http://git-scm.com/book/en/Getting-Started-A-Short-History-of-Git
[75]:https://w2.eff.org/awards/pioneer/1998.php
[76]:http://www.bcs.org/content/ConWebDoc/14769
[77]:http://www.zdnet.com/blog/open-source/linus-torvalds-wins-the-tech-equivalent-of-a-nobel-prize-the-millennium-technology-prize/10789
[78]:http://www.computer.org/portal/web/pressroom/Linus-Torvalds-Named-Recipient-of-the-2014-IEEE-Computer-Society-Computer-Pioneer-Award
[79]:http://www.computerhistory.org/fellowawards/hall/bios/Linus,Torvalds/
[80]:http://www.internethalloffame.org/inductees/linus-torvalds
[81]:http://qr.ae/RFEeeo
[82]:http://qr.ae/RFEZLk
[83]:http://www.quora.com/Software-Engineering/Who-are-some-of-the-greatest-currently-active-software-architects-in-the-world/answer/Alok-Tripathy-1
[84]:https://www.flickr.com/photos/quakecon/9434713998
[85]:http://doom.wikia.com/wiki/John_Carmack
[86]:http://thegamershub.net/2012/04/gaming-gods-john-carmack/
[87]:http://www.shamusyoung.com/twentysidedtale/?p=4759
[88]:http://www.interactive.org/special_awards/details.asp?idSpecialAwards=6
[89]:http://www.itworld.com/article/2951105/it-management/a-fly-named-for-bill-gates-and-9-other-unusual-honors-for-tech-s-elite.html#slide8
[90]:http://www.gamechoiceawards.com/archive/lifetime.html
[91]:http://qr.ae/RFEEgr
[92]:http://www.itworld.com/answers/topic/software/question/whos-best-living-programmer#comment-424562
[93]:http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Greg-Naughton
[94]:http://money.cnn.com/2003/08/21/commentary/game_over/column_gaming/
[95]:http://dufoli.wordpress.com/2007/06/23/ammmmaaaazing-night/
[96]:http://bellard.org/
[97]:http://www.ioccc.org/winners.html#B
[98]:http://www.oscon.com/oscon2011/public/schedule/detail/21161
[99]:http://bellard.org/pi/pi2700e9/
[100]:https://news.ycombinator.com/item?id=7850797
[101]:http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Erik-Frey/comment/1718701
[102]:http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Erik-Frey/comment/2454450
[103]:http://qr.ae/RFEjhZ
[104]:https://www.flickr.com/photos/craigmurphy/4325516497
[105]:http://www.amazon.co.uk/gp/product/1935182471?ie=UTF8&tag=developetutor-21&linkCode=as2&camp=1634&creative=19450&creativeASIN=1935182471
[106]:http://stackexchange.com/leagues/1/alltime/stackoverflow
[107]:http://meta.stackexchange.com/a/9156
[108]:http://meta.stackexchange.com/a/9138
[109]:http://meta.stackexchange.com/a/9182
[110]:https://www.flickr.com/photos/philipn/5326344032
[111]:http://www.crunchbase.com/person/adam-d-angelo
[112]:http://www.exeter.edu/documents/Exeter_Bulletin/fall_01/oncampus.html
[113]:http://icpc.baylor.edu/community/results-2004
[114]:https://www.topcoder.com/tc?module=Static&d1=pressroom&d2=pr_022205
[115]:http://qr.ae/RFfOfe
[116]:http://www.businessinsider.com/in-new-alleged-ims-mark-zuckerberg-talks-about-adam-dangelo-2012-9#ixzz369FcQoLB
[117]:https://www.facebook.com/hackercup/photos/a.329665040399024.91563.133954286636768/553381194694073/?type=1
[118]:http://stats.ioinformatics.org/people/1849
[119]:http://googlepress.blogspot.com/2006/10/google-announces-winner-of-global-code_27.html
[120]:http://community.topcoder.com/tc?module=SimpleStats&c=coder_achievements&d1=statistics&d2=coderAchievements&cr=10574855
[121]:https://www.facebook.com/notes/facebook-hacker-cup/facebook-hacker-cup-finals/208549245827651
[122]:https://www.facebook.com/hackercup/photos/a.329665040399024.91563.133954286636768/553381194694073/?type=1
[123]:http://community.topcoder.com/tc?module=AlgoRank
[124]:http://codeforces.com/ratings
[125]:http://www.quora.com/Respected-Software-Engineers/Who-are-some-of-the-best-programmers-in-the-world/answer/Venkateswaran-Vicky/comment/1960855
[126]:http://commons.wikimedia.org/wiki/File:Gennady_Korot.jpg
[127]:http://stats.ioinformatics.org/people/804
[128]:http://icpc.baylor.edu/regionals/finder/world-finals-2013/standings
[129]:https://www.facebook.com/hackercup/posts/10152022955628845
[130]:http://codeforces.com/ratings
[131]:http://community.topcoder.com/tc?module=AlgoRank
[132]:http://www.quora.com/Computer-Programming/Who-is-the-best-programmer-in-the-world-right-now/answer/Prateek-Joshi
[133]:http://www.quora.com/Computer-Programming/Who-is-the-best-programmer-in-the-world-right-now/answer/Prateek-Joshi/comment/4720779
[134]:http://www.quora.com/Computer-Programming/Who-is-the-best-programmer-in-the-world-right-now/answer/Prateek-Joshi/comment/4880549
[135]:http://commons.wikimedia.org/wiki/File:Jielbeaumadier_richard_stallman_2010.jpg

View File

@ -1,88 +1,88 @@
Display Awesome Linux Logo With Basic Hardware Info Using screenfetch and linux_logo Tools
用 screenfetch 和 linux_logo 显示带有酷炫 Linux 标志的基本硬件信息
================================================================================
Do you want to display a super cool logo of your Linux distribution along with basic hardware information? Look no further try awesome screenfetch and linux_logo utilities.
想在屏幕上显示出你的 Linux 发行版的酷炫标志和基本硬件信息吗?不用找了,来试试超赞的 screenfetch 和 linux_logo 工具。
### Say hello to screenfetch ###
### 来看看 screenfetch 吧 ###
screenFetch is a CLI bash script to show system/theme info in screenshots. It runs on a Linux, OS X, FreeBSD and many other Unix-like system. From the man page:
screenFetch 是一个能够在截屏中显示系统/主题信息的命令行脚本。它可以在 LinuxOS XFreeBSD 以及其它的许多类Unix系统上使用。来自 man 手册的说明:
> This handy Bash script can be used to generate one of those nifty terminal theme information + ASCII distribution logos you see in everyone's screenshots nowadays. It will auto-detect your distribution and display an ASCII version of that distribution's logo and some valuable information to the right.
> 这个方便的 Bash 脚本可以用来生成那些漂亮的终端主题信息和用 ASCII 构成的发行版标志,就像如今你在别人的截屏里看到的那样。它会自动检测你的发行版并显示 ASCII 版的发行版标志,并且在右边显示一些有价值的信息。
#### Installing screenfetch on Linux ####
#### 在 Linux 上安装 screenfetch ####
Open the Terminal application. Simply type the following [apt-get command][1] on a Debian or Ubuntu or Mint Linux based system:
打开终端应用。在基于 Debian 或 Ubuntu 或 Mint 的系统上只需要输入下列 [apt-get 命令][1]
$ sudo apt-get install screenfetch
![](http://s0.cyberciti.org/uploads/cms/2015/09/ubuntu-debian-linux-apt-get-install-screenfetch.jpg)
Fig.01: Installing screenfetch using apt-get
*图一:用 apt-get 安装 screenfetch*
#### Installing screenfetch Mac OS X ####
#### 在 Mac OS X 上安装 screenfetch ####
Type the following command:
输入下列命令:
$ brew install screenfetch
![](http://s0.cyberciti.org/uploads/cms/2015/09/apple-mac-osx-install-screenfetch.jpg)
Fig.02: Installing screenfetch using brew command
*图二:用 brew 命令安装 screenfetch*
#### Installing screenfetch on FreeBSD ####
#### 在 FreeBSD 上安装 screenfetch ####
Type the following pkg command:
输入下列 pkg 命令:
$ sudo pkg install sysutils/screenfetch
![](http://s0.cyberciti.org/uploads/cms/2015/09/freebsd-install-pkg-screenfetch.jpg)
Fig.03: FreeBSD install screenfetch using pkg
*图三:在 FreeBSD 用 pkg 安装 screenfetch*
#### Installing screenfetch on Fedora Linux ####
#### 在 Fedora 上安装 screenfetch ####
Type the following dnf command:
输入下列 dnf 命令:
$ sudo dnf install screenfetch
![](http://s0.cyberciti.org/uploads/cms/2015/09/fedora-dnf-install-screenfetch.jpg)
Fig.04: Fedora Linux 22 install screenfetch using dnf
*图四:在 Fedora 22 用 dnf 安装 screenfetch*
#### How do I use screefetch utility? ####
#### 我该怎么使用 screefetch 工具? ####
Simply type the following command:
只需输入以下命令:
$ screenfetch
Here is the output from various operating system:
这是不同系统的输出:
![](http://s0.cyberciti.org/uploads/cms/2015/09/fedora-screenfetch-300x193.jpg)
![](http://s0.cyberciti.org/uploads/cms/2015/09/fedora-screenfetch.jpg)
Screenfetch on Fedora
*Fedora 上的 Screenfetch*
![](http://s0.cyberciti.org/uploads/cms/2015/09/screenfetch-osx-300x213.jpg)
![](http://s0.cyberciti.org/uploads/cms/2015/09/screenfetch-osx.jpg)
Screenfetch on OS X
*OS X 上的 Screenfetch*
![](http://s0.cyberciti.org/uploads/cms/2015/09/screenfetch-freebsd-300x143.jpg)
![](http://s0.cyberciti.org/uploads/cms/2015/09/screenfetch-freebsd.jpg)
Screenfetch on FreeBSD
*FreeBSD 上的 Screenfetch*
![](http://s0.cyberciti.org/uploads/cms/2015/09/debian-ubutnu-screenfetch-outputs-300x279.jpg)
![](http://s0.cyberciti.org/uploads/cms/2015/09/debian-ubutnu-screenfetch-outputs.jpg)
Screenfetch on Debian Linux
*Debian 上的 Screenfetch*
#### Take screenshot ####
#### 获取截屏 ####
To take a screenshot and to save a file, enter:
要获取截屏并保存成文件,输入:
$ screenfetch -s
You will see a screenshot file at ~/Desktop/screenFetch-*.jpg. To take a screenshot and upload to imgur directly, enter:
你会看到一个文件 ~/Desktop/screenFetch-*.jpg。获取截屏并直接上传到 imgur输入
$ screenfetch -su imgur
$ screenfetch -su imgur
**Sample outputs:**
**输出示例:**
-/+:. veryv@Viveks-MacBook-Pro
:++++. OS: 64bit Mac OS X 10.10.5 14F27
@ -100,49 +100,49 @@ You will see a screenshot file at ~/Desktop/screenFetch-*.jpg. To take a screens
`ossssssssssssssssssssss/ RAM: 6405MB / 8192MB
:ooooooooooooooooooo+.
`:+oo+/:-..-:/+o+/-
Taking shot in 3.. 2.. 1.. 0.
==> Uploading your screenshot now...your screenshot can be viewed at http://imgur.com/HKIUznn
You can visit [http://imgur.com/HKIUznn][2] to see uploaded screenshot.
你可以访问 [http://imgur.com/HKIUznn][2] 来查看上传的截屏。
### Say hello to linux_logo ###
### 再来看看 linux_logo ###
The linux_logo program generates a color ANSI picture of a penguin which includes some system information obtained from the /proc filesystem.
linux_logo 程序生成一个彩色的 ANSI 版企鹅图片,还包含一些来自 /proc 的系统信息。
#### Installation ####
#### 安装 ####
Simply type the following command as per your Linux distro.
只需按照你的 Linux 发行版输入对应的命令:
#### Debian/Ubutnu/Mint ####
# apt-get install linux_logo
#### CentOS/RHEL/Older Fedora ####
#### CentOS/RHEL/旧版 Fedora ####
# yum install linux_logo
#### Fedora Linux v22+ or newer ####
#### Fedora Linux v22+ 或更新版本 ####
# dnf install linux_logo
#### Run it ####
#### 运行它 ####
Simply type the following command:
只需输入下列命令:
$ linux_logo
$ linux_logo
![](http://s0.cyberciti.org/uploads/cms/2015/09/debian-linux_logo.jpg)
linux_logo in action
*运行 linux_logo*
#### But wait, there's more! ####
#### 等等,还有更多! ####
You can see a list of compiled in logos using:
你可以用这个命令查看内置的标志列表:
$ linux_logo -f -L list
**Sample outputs:**
**输出示例:**
Available Built-in Logos:
Num Type Ascii Name Description
@ -176,47 +176,47 @@ You can see a list of compiled in logos using:
28 Banner Yes sourcemage Source Mage GNU/Linux large
29 Banner Yes suse SUSE Logo
30 Banner Yes ubuntu Ubuntu Logo
Do "linux_logo -L num" where num is from above to get the appropriate logo.
Remember to also use -a to get ascii version.
To see aix logo, enter:
查看 aix 的标志,输入:
$ linux_logo -f -L aix
To see openbsd logo:
查看 openbsd 的标志:
$ linux_logo -f -L openbsd
Or just see some random Linux logo:
或者只是随机看看一些 Linux 标志:
$ linux_logo -f -L random_xy
You [can combine bash for loop as follows to display various logos][3], enter:
你[可以像下面那样结合 bash 的循环来显示不同的标志][3],输入:
![](http://s0.cyberciti.org/uploads/cms/2015/09/linux-logo-fun.gif)
Gif 01: linux_logo and bash for loop for fun and profie
*动图1 linux_logo 和 bash 循环,既有趣又能发朋友圈耍酷*
### Getting help ###
### 获取帮助 ###
Simply type the following command:
输入下列命令:
$ screefetch -h
$ linux_logo -h
**References**
**参考**
- [screenFetch home page][4]
- [linux_logo home page][5]
- [screenFetch 主页][4]
- [linux_logo 主页][5]
--------------------------------------------------------------------------------
via: http://www.cyberciti.biz/hardware/howto-display-linux-logo-in-bash-terminal-using-screenfetch-linux_logo/
作者Vivek Gite
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
译者:[alim0x](https://github.com/alim0x)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
@ -224,4 +224,4 @@ via: http://www.cyberciti.biz/hardware/howto-display-linux-logo-in-bash-terminal
[2]:http://imgur.com/HKIUznn
[3]:http://www.cyberciti.biz/faq/bash-for-loop/
[4]:https://github.com/KittyKatt/screenFetch
[5]:https://github.com/deater/linux_logo
[5]:https://github.com/deater/linux_logo

View File

@ -1,9 +1,9 @@
在 Ubuntu 14.04 中配置 PXE 服务器
在 Ubuntu 14.04 中配置 PXE 服务器
================================================================================
![](https://www.maketecheasier.com/assets/uploads/2015/09/pxe-featured.jpg)
PXEPreboot Execution Environment--预启动执行环境)服务器允许用户从网络中启动 Linux 发行版并且可以同时在数百台 PC 中安装而不需要 Linux ISO 镜像。如果你客户端的计算机没有 CD/DVD 或USB 引导盘,或者如果你想在大型企业中同时安装多台计算机,那么 PXE 服务器可以帮你节省时间和金钱。
PXEPreboot Execution Environment--预启动执行环境)服务器允许用户从网络中启动 Linux 发行版并且可以不需要 Linux ISO 镜像就能同时在数百台 PC 中安装。如果你客户端的计算机没有 CD/DVD 或USB 引导盘,或者如果你想在大型企业中同时安装多台计算机,那么 PXE 服务器可以帮你节省时间和金钱。
在这篇文章中,我们将告诉你如何在 Ubuntu 14.04 配置 PXE 服务器。
@ -11,11 +11,11 @@ PXEPreboot Execution Environment--预启动执行环境)服务器允许用
开始前,你需要先设置 PXE 服务器使用静态 IP。在你的系统中要使用静态 IP 地址,需要编辑 “/etc/network/interfaces” 文件。
1. 打开 “/etc/network/interfaces” 文件.
打开 “/etc/network/interfaces” 文件.
sudo nano /etc/network/interfaces
作如下修改:
作如下修改:
# 回环网络接口
auto lo
@ -43,23 +43,23 @@ DHCPTFTP 和 NFS 是 PXE 服务器的重要组成部分。首先,需要更
### 配置 DHCP 服务: ###
DHCP 代表动态主机配置协议Dynamic Host Configuration Protocol并且它主要用于动态分配网络配置参数,如用于接口和服务的 IP 地址。在 PXE 环境中DHCP 服务器允许客户端请求并自动获得一个 IP 地址来访问网络。
DHCP 代表动态主机配置协议Dynamic Host Configuration Protocol它主要用于动态分配网络配置参数如用于接口和服务的 IP 地址。在 PXE 环境中DHCP 服务器允许客户端请求并自动获得一个 IP 地址来访问网络。
1. 编辑 “/etc/default/dhcp3-server” 文件.
1编辑 “/etc/default/dhcp3-server” 文件.
sudo nano /etc/default/dhcp3-server
作如下修改:
作如下修改:
INTERFACES="eth0"
保存 (Ctrl + o) 并退出 (Ctrl + x) 文件.
2. 编辑 “/etc/dhcp3/dhcpd.conf” 文件:
2编辑 “/etc/dhcp3/dhcpd.conf” 文件:
sudo nano /etc/dhcp/dhcpd.conf
作如下修改:
作如下修改:
default-lease-time 600;
max-lease-time 7200;
@ -74,29 +74,29 @@ DHCP 代表动态主机配置协议Dynamic Host Configuration Protocol
保存文件并退出。
3. 启动 DHCP 服务.
3启动 DHCP 服务.
sudo /etc/init.d/isc-dhcp-server start
### 配置 TFTP 服务器: ###
TFTP 是一种文件传输协议,类似于 FTP它不用进行用户认证也不能列出目录。TFTP 服务器总是监听网络上的 PXE 客户端。当它检测到网络中有 PXE 客户端请求 PXE 服务时,它将提供包含引导菜单的网络数据包。
TFTP 是一种文件传输协议,类似于 FTP,但它不用进行用户认证也不能列出目录。TFTP 服务器总是监听网络上的 PXE 客户端的请求。当它检测到网络中有 PXE 客户端请求 PXE 服务时,它将提供包含引导菜单的网络数据包。
1. 配置 TFTP 时,需要编辑 “/etc/inetd.conf” 文件.
1配置 TFTP 时,需要编辑 “/etc/inetd.conf” 文件.
sudo nano /etc/inetd.conf
作如下修改:
作如下修改:
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
保存文件并退出。
保存文件并退出。
2. 编辑 “/etc/default/tftpd-hpa” 文件。
2编辑 “/etc/default/tftpd-hpa” 文件。
sudo nano /etc/default/tftpd-hpa
作如下修改:
作如下修改:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
@ -105,14 +105,14 @@ TFTP 是一种文件传输协议,类似于 FTP。它不用进行用户认证
RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"
保存文件并退出。
保存文件并退出。
3. 使用 `xinetd` 让 boot 服务在每次系统开机时自动启动并启动tftpd服务。
3 使用 `xinetd` 让 boot 服务在每次系统开机时自动启动并启动tftpd服务。
sudo update-inetd --enable BOOT
sudo service tftpd-hpa start
4. 检查状态。
4检查状态。
sudo netstat -lu
@ -123,7 +123,7 @@ TFTP 是一种文件传输协议,类似于 FTP。它不用进行用户认证
### 配置 PXE 启动文件 ###
现在,你需要将 PXE 引导文件 “pxelinux.0” 放在 TFTP 根目录下。为 TFTP 创建一个目录,并复制 syslinux 在 “/usr/lib/syslinux/” 下提供的所有引导程序文件到 “/var/lib/tftpboot/” 下,操作如下:
现在,你需要将 PXE 引导文件 “pxelinux.0” 放在 TFTP 根目录下。为 TFTP 创建目录结构,并从 “/usr/lib/syslinux/” 复制 syslinux 提供的所有引导程序文件到 “/var/lib/tftpboot/” 下,操作如下:
sudo mkdir /var/lib/tftpboot
sudo mkdir /var/lib/tftpboot/pxelinux.cfg
@ -135,13 +135,13 @@ TFTP 是一种文件传输协议,类似于 FTP。它不用进行用户认证
PXE 配置文件定义了 PXE 客户端启动时显示的菜单,它能引导并与 TFTP 服务器关联。默认情况下,当一个 PXE 客户端启动时,它会使用自己的 MAC 地址指定要读取的配置文件,所以我们需要创建一个包含可引导内核列表的默认文件。
编辑 PXE 服务器配置文件使用可用的安装选项。.
编辑 PXE 服务器配置文件,使用有效的安装选项。
编辑 “/var/lib/tftpboot/pxelinux.cfg/default,
编辑 “/var/lib/tftpboot/pxelinux.cfg/default”
sudo nano /var/lib/tftpboot/pxelinux.cfg/default
作如下修改:
作如下修改:
DEFAULT vesamenu.c32
TIMEOUT 100
@ -183,12 +183,12 @@ PXE 配置文件定义了 PXE 客户端启动时显示的菜单,它能引导
### 为 PXE 服务器添加 Ubuntu 14.04 桌面启动镜像 ###
对于这一步Ubuntu 内核和 initrd 文件是必需的。要获得这些文件,你需要 Ubuntu 14.04 桌面 ISO 镜像。你可以通过以下命令下载 Ubuntu 14.04 ISO 镜像到 /mnt 目录:
对于这一步需要 Ubuntu 内核和 initrd 文件。要获得这些文件,你需要 Ubuntu 14.04 桌面 ISO 镜像。你可以通过以下命令下载 Ubuntu 14.04 ISO 镜像到 /mnt 目录:
sudo cd /mnt
sudo wget http://releases.ubuntu.com/14.04/ubuntu-14.04.3-desktop-amd64.iso
**注意**: 下载用的 URL 可能会改变,因为 ISO 镜像会进行更新。如果上面的网址无法访问,看看这个网站,了解最新的下载链接。
**注意**: 下载用的 URL 可能会改变,因为 ISO 镜像会进行更新。如果上面的网址无法访问,看看[这个网站][4],了解最新的下载链接。
挂载 ISO 文件,使用以下命令将所有文件复制到 TFTP文件夹中
@ -199,9 +199,9 @@ PXE 配置文件定义了 PXE 客户端启动时显示的菜单,它能引导
### 将导出的 ISO 目录配置到 NFS 服务器上 ###
现在,你需要通过 NFS 协议安装源镜像。你还可以使用 HTTP 和 FTP 来安装源镜像。在这里,我已经使用 NFS 出 ISO 内容。
现在,你需要通过 NFS 协议来设置“安装源镜像 Installation Source Mirrors。你还可以使用 HTTP 和 FTP 来安装源镜像。在这里,我已经使用 NFS 出 ISO 内容。
要配置 NFS 服务器,你需要编辑 “etc/exports” 文件。
要配置 NFS 服务器,你需要编辑 “/etc/exports” 文件。
sudo nano /etc/exports
@ -209,7 +209,7 @@ PXE 配置文件定义了 PXE 客户端启动时显示的菜单,它能引导
/var/lib/tftpboot/Ubuntu/14.04/amd64 *(ro,async,no_root_squash,no_subtree_check)
保存文件并退出。为使更改生效,启动 NFS 服务。
保存文件并退出。为使更改生效,输出并启动 NFS 服务。
sudo exportfs -a
sudo /etc/init.d/nfs-kernel-server start
@ -218,9 +218,9 @@ PXE 配置文件定义了 PXE 客户端启动时显示的菜单,它能引导
### 配置网络引导 PXE 客户端 ###
PXE 客户端可以被任何具备 PXE 网络引导的系统来启用。现在,你的客户端可以启动并安装 Ubuntu 14.04 桌面,需要在系统的 BIOS 中设置 “Boot From Network” 选项
PXE 客户端可以是任何支持 PXE 网络引导的计算机系统。现在,你的客户端只需要在系统的 BIOS 中设置 “从网络引导Boot From Network” 选项就可以启动并安装 Ubuntu 14.04 桌面
现在你可以去做 - 用网络引导启动你的 PXE 客户端计算机,你现在应该看到一个子菜单,显示了我们创建的 Ubuntu 14.04 桌面。
现在准备出发吧 - 用网络引导启动你的 PXE 客户端计算机,你现在应该看到一个子菜单,显示了我们创建的 Ubuntu 14.04 桌面的菜单项
![pxe](https://www.maketecheasier.com/assets/uploads/2015/09/pxe.png)
@ -241,7 +241,7 @@ via: https://www.maketecheasier.com/configure-pxe-server-ubuntu/
作者:[Hitesh Jethva][a]
译者:[strugglingyouth](https://github.com/strugglingyouth)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
@ -249,3 +249,4 @@ via: https://www.maketecheasier.com/configure-pxe-server-ubuntu/
[1]:https://en.wikipedia.org/wiki/Preboot_Execution_Environment
[2]:https://help.ubuntu.com/community/PXEInstallServer
[3]:https://www.flickr.com/photos/jhcalderon/3681926417/
[4]:http://releases.ubuntu.com/14.04/

View File

@ -0,0 +1,128 @@
一位开发者的 Linux 容器之旅
================================================================================
![](https://deis.com/images/blog-images/dev_journey_0.jpg)
我告诉你一个秘密:使得我的应用程序进入到全世界的 DevOps 云计算之类的东西对我来说仍然有一点神秘。但随着时间流逝,我意识到理解大规模的机器增减和应用程序部署的来龙去脉对一个开发者来说是非常重要的知识。这类似于成为一个专业的音乐家,当然你肯定需要知道如何使用你的乐器,但是,如果你不知道一个录音棚是如何工作的,或者如何适应一个交响乐团,那么你在这样的环境中工作会变得非常困难。
在软件开发的世界里使你的代码进入我们的更大的世界如同把它编写出来一样重要。DevOps 重要,而且是很重要。
因此为了弥合开发Dev和部署Ops之间的空隙我会从头开始介绍容器技术。为什么是容器因为有强力的证据表明容器是机器抽象的下一步使计算机成为场所而不再是一个东西。理解容器是我们共同的旅程。
在这篇文章中我会介绍容器化containerization背后的概念。包括容器和虚拟机的区别以及容器构建背后的逻辑以及它是如何适应应用程序架构的。我会探讨轻量级的 Linux 操作系统是如何适应容器生态系统。我还会讨论使用镜像创建可重用的容器。最后我会介绍容器集群如何使你的应用程序可以快速扩展。
在后面的文章中,我会一步一步向你介绍容器化一个示例应用程序的过程,以及如何为你的应用程序容器创建一个托管集群。同时,我会向你展示如何使用 Deis 将你的示例应用程序部署到你本地系统以及多种云供应商的虚拟机上。
让我们开始吧。
### 虚拟机的好处 ###
为了理解容器如何适应事物发展,你首先要了解容器的前任:虚拟机。
[虚拟机][1] virtual machine (VM))是运行在物理宿主机上的软件抽象。配置一个虚拟机就像是购买一台计算机:你需要定义你想要的 CPU 数目、RAM 和磁盘存储容量。配置好了机器后,你为它加载操作系统,以及你想让虚拟机支持的任何服务器或者应用程序。
虚拟机允许你在一台硬件主机上运行多个模拟计算机。这是一个简单的示意图:
![](https://deis.com/images/blog-images/dev_journey_1.png)
虚拟机可以让你能充分利用你的硬件资源。你可以购买一台巨大的、轰隆作响的机器,然后在上面运行多个虚拟机。你可以有一个数据库虚拟机以及很多运行相同版本的定制应用程序的虚拟机所构成的集群。你可以在有限的硬件资源获得很多的扩展能力。如果你觉得你需要更多的虚拟机而且你的宿主硬件还有容量,你可以添加任何你需要的虚拟机。或者,如果你不再需要一个虚拟机,你可以关闭该虚拟机并删除虚拟机镜像。
### 虚拟机的局限 ###
但是,虚拟机确实有局限。
如上面所示,假如你在一个主机上创建了三个虚拟机。主机有 12 个 CPU48 GB 内存和 3TB 的存储空间。每个虚拟机配置为有 4 个 CPU16 GB 内存和 1TB 存储空间。到现在为止,一切都还好。主机有这个容量。
但这里有个缺陷。所有分配给一个虚拟机的资源,无论是什么,都是专有的。每台机器都分配了 16 GB 的内存。但是,如果第一个虚拟机永不会使用超过 1GB 分配的内存,剩余的 15 GB 就会被浪费在那里。如果第三个虚拟机只使用分配的 1TB 存储空间中的 100GB其余的 900GB 就成为浪费空间。
这里没有资源的流动。每台虚拟机拥有分配给它的所有资源。因此,在某种方式上我们又回到了虚拟机之前,把大部分金钱花费在未使用的资源上。
虚拟机还有*另一个*缺陷。让它们跑起来需要很长时间。如果你处于基础设施需要快速增长的情形,即使增加虚拟机是自动的,你仍然会发现你的很多时间都浪费在等待机器上线。
### 来到:容器 ###
概念上来说,容器是一个 Linux 进程Linux 认为它只是一个运行中的进程。该进程只知道它被告知的东西。另外,在容器化方面,该容器进程也分配了它自己的 IP 地址。这点很重要,重要的事情讲三遍,这是第二遍。**在容器化方面,容器进程有它自己的 IP 地址。**一旦给予了一个 IP 地址,该进程就是宿主网络中可识别的资源。然后,你可以在容器管理器上运行命令,使容器 IP 映射到主机中能访问公网的 IP 地址。建立了该映射,无论出于什么意图和目的,容器就是网络上一个可访问的独立机器,从概念上类似于虚拟机。
这是第三遍,容器是拥有不同 IP 地址从而使其成为网络上可识别的独立 Linux 进程。下面是一个示意图:
![](https://deis.com/images/blog-images/dev_journey_2.png)
容器/进程以动态、合作的方式共享主机上的资源。如果容器只需要 1GB 内存,它就只会使用 1GB。如果它需要 4GB就会使用 4GB。CPU 和存储空间利用也是如此。CPU、内存和存储空间的分配是动态的和典型虚拟机的静态方式不同。所有这些资源的共享都由容器管理器来管理。
最后,容器能非常快速地启动。
因此,容器的好处是:**你获得了虚拟机独立和封装的好处,而抛弃了静态资源专有的缺陷**。另外,由于容器能快速加载到内存,在扩展到多个容器时你能获得更好的性能。
### 容器托管、配置和管理 ###
托管容器的计算机运行着被剥离的只剩下主要部分的某个 Linux 版本。现在,宿主计算机流行的底层操作系统是之前提到的 [CoreOS][2]。当然还有其它,例如 [Red Hat Atomic Host][3] 和 [Ubuntu Snappy][4]。
该 Linux 操作系统被所有容器所共享,减少了容器足迹的重复和冗余。每个容器只包括该容器特有的部分。下面是一个示意图:
![](https://deis.com/images/blog-images/dev_journey_3.png)
你可以用它所需的组件来配置容器。一个容器组件被称为**层layer**。层是一个容器镜像,(你会在后面的部分看到更多关于容器镜像的介绍)。你从一个基本层开始,这通常是你想在容器中使用的操作系统。(容器管理器只提供你所要的操作系统在宿主操作系统中不存在的部分。)当你构建你的容器配置时,你需要添加层,例如你想要添加网络服务器时这个层就是 Apache如果容器要运行脚本则需要添加 PHP 或 Python 运行时环境。
分层非常灵活。如果应用程序或者服务容器需要 PHP 5.2 版本,你相应地配置该容器即可。如果你有另一个应用程序或者服务需要 PHP 5.6 版本,没问题,你可以使用 PHP 5.6 配置该容器。不像虚拟机,更改一个版本的运行时依赖时你需要经过大量的配置和安装过程;对于容器你只需要在容器配置文件中重新定义层。
所有上面描述的容器的各种功能都由一个称为容器管理器container manager的软件控制。现在最流行的容器管理器是 [Docker][5] 和 [Rocket][6]。上面的示意图展示了容器管理器是 Docker宿主操作系统是 CentOS 的主机情景。
### 容器由镜像构成 ###
当你需要将我们的应用程序构建到容器时你就要编译镜像。镜像代表了你的容器需要完成其工作的容器模板。容器里可以在容器里面如下图。镜像存储在注册库registry注册库通过网络访问。
从概念上讲,注册库类似于一个使用 Java 的人眼中的 [Maven][7] 仓库、使用 .NET 的人眼中的 [NuGet][8] 服务器。你会创建一个列出了你应用程序所需镜像的容器配置文件。然后你使用容器管理器创建一个包括了你的应用程序代码以及从容器注册库中下载的部分资源。例如,如果你的应用程序包括了一些 PHP 文件,你的容器配置文件会声明你会从注册库中获取 PHP 运行时环境。另外,你还要使用容器配置文件声明需要复制到容器文件系统中的 .php 文件。容器管理器会封装你应用程序的所有东西为一个独立容器,该容器将会在容器管理器的管理下运行在宿主计算机上。
这是一个容器创建背后概念的示意图:
![](https://deis.com/images/blog-images/dev_journey_4.png)
让我们仔细看看这个示意图。
1代表一个定义了你容器所需东西以及你容器如何构建的容器配置文件。当你在主机上运行容器时容器管理器会读取该配置文件从云上的注册库中获取你需要的容器镜像2将镜像作为层添加到你的容器中。
另外如果组成镜像需要其它镜像容器管理器也会获取这些镜像并把它们作为层添加进来。3容器管理器会将需要的文件复制到容器中。
如果你使用了配置provisioning服务例如 [Deis][9]你刚刚创建的应用程序容器做成镜像4配置服务会将它部署到你选择的云供应商上比如类似 AWS 和 Rackspace 云供应商。
### 集群中的容器 ###
好了。这里有一个很好的例子说明了容器比虚拟机提供了更好的配置灵活性和资源利用率。但是,这并不是全部。
容器真正的灵活是在集群中。记住,每个容器有一个独立的 IP 地址。因此,能把它放到负载均衡器后面。将容器放到负载均衡器后面,这就上升了一个层面。
你可以在一个负载均衡容器后运行容器集群以获得更高的性能和高可用计算。这是一个例子:
![](https://deis.com/images/blog-images/dev_journey_5.png)
假如你开发了一个资源密集型的应用程序,例如图片处理。使用类似 [Deis][9] 的容器配置技术,你可以创建一个包括了你图片处理程序以及你图片处理程序需要的所有资源的容器镜像。然后,你可以部署一个或多个容器镜像到主机上的负载均衡器下。一旦创建了容器镜像,你可以随时使用它。当系统繁忙时可以添加更多的容器实例来满足手中的工作。
这里还有更多好消息。每次添加实例到环境中时,你不需要手动配置负载均衡器以便接受你的容器镜像。你可以使用服务发现技术让容器告知均衡器它可用。然后,一旦获知,均衡器就会将流量分发到新的结点。
### 全部放在一起 ###
容器技术完善了虚拟机缺失的部分。类似 CoreOS、RHEL Atomic、和 Ubuntu 的 Snappy 宿主操作系统,和类似 Docker 和 Rocket 的容器管理技术结合起来,使得容器变得日益流行。
尽管容器变得更加越来越普遍,掌握它们还是需要一段时间。但是,一旦你懂得了它们的窍门,你可以使用类似 [Deis][9] 这样的配置技术使容器创建和部署变得更加简单。
从概念上理解容器和进一步实际使用它们完成工作一样重要。但我认为不实际动手把想法付诸实践,概念也难以理解。因此,我们该系列的下一阶段就是:创建一些容器。
--------------------------------------------------------------------------------
via: https://deis.com/blog/2015/developer-journey-linux-containers
作者:[Bob Reselman][a]
译者:[ictlyh](http://www.mutouxiaogui.cn/blog/)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://deis.com/blog
[1]:https://en.wikipedia.org/wiki/Virtual_machine
[2]:https://coreos.com/using-coreos/
[3]:http://www.projectatomic.io/
[4]:https://developer.ubuntu.com/en/snappy/
[5]:https://www.docker.com/
[6]:https://coreos.com/blog/rocket/
[7]:https://en.wikipedia.org/wiki/Apache_Maven
[8]:https://www.nuget.org/
[9]:http://deis.com/learn

View File

@ -0,0 +1,39 @@
修复 Shell 脚本在 Ubuntu 中的默认打开方式
================================================================================
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/10/Run-Shell-Script-on-Double-Click.jpg)
当你双击一个脚本(.sh文件的时候你想要做的是什么通常的想法是执行它。但是在Ubuntu下面却不是这样或者我应该更确切地说是在FilesNautilus中。你可能会疯狂地大叫“运行文件运行文件”但是文件没有运行而是用Gedit打开了。
我知道你也许会说文件有可执行权限么?我会说是的。脚本有可执行权限但是当我双击它的时候,它还是用文本编辑器打开了。我不希望这样,如果你遇到了同样的问题,我想你也许也想要这样。
我知道你或许已经被建议在终端下面执行我知道这个可行但是这不是一个在GUI下不能运行的借口是么
这篇教程中,我们会看到**如何在双击后运行shell脚本。**
#### 修复在Ubuntu中shell脚本用文本编辑器打开的方式 ####
shell脚本用文件编辑器打开的原因是FilesUbuntu中的文件管理器中的默认行为设置。在更早的版本中它或许会询问你是否运行文件或者用编辑器打开。默认的行为在新的版本中被修改了。
要修复这个,进入文件管理器,并在菜单中点击**选项**
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/10/execute-shell-program-ubuntu-1.png)
接下来在**文件选项Files Preferences**中进入**行为Behavior**标签中,你会看到**可执行的文本文件Executable Text Files**选项。
默认情况下它被设置成“在打开时显示文本文件View executable text files when they are opend”。我建议你把它改成“每次询问Ask each time这样你可以选择是执行还是编辑了当然了你也可以选择“在打开时云可执行文本文件Run executable text files when they are opend”。你可以自行选择。
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/10/execute-shell-program-ubuntu-2.png)
我希望这个贴士可以帮你修复这个小“问题”。欢迎提出问题和建议。
--------------------------------------------------------------------------------
via: http://itsfoss.com/shell-script-opens-text-editor/
作者:[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/

View File

@ -0,0 +1,44 @@
好奇 Linux试试云端的 Linux 桌面
================================================================================
Linux 在桌面操作系统市场上只占据了非常小的份额从目前的调查结果来看估计只有2%的市场份额;对比来看,丰富多变的 Windows 系统占据了接近90%的市场份额。对于 Linux 来说,要挑战 Windows 在桌面操作系统市场的垄断,需要有一个让用户学习不同的操作系统的简单方式。如果你相信传统的 Windows 用户会再买一台机器来使用 Linux那你就太天真了。我们只能去试想用户重新分区设置引导程序来使用双系统或者跳过所有步骤回到一个最简单的方法。
![](http://www.linuxlinks.com/portal/content/reviews/Cloud/CloudComputing.png)
我们实验过一系列让用户试操作 Linux 的无风险的使用方法,不涉及任何分区管理,包括 CD/DVD 光盘、USB 存储棒和桌面虚拟化软件等等。通过实验,我强烈推荐使用 VMware 的 VMware Player 或者 Oracle VirtualBox 虚拟机,对于桌面操作系统或者便携式电脑的用户,这是一种安装运行多操作系统的相对简单而且免费的的方法。每一台虚拟机和其他虚拟机相隔离,但是共享 CPU、内存、网络接口等等。虚拟机仍需要一定的资源来安装运行 Linux也需要一台相当强劲的主机。但对于一个好奇心不大的人这样做实在是太麻烦了。
要打破用户传统的使用观念是非常困难的。很多 Windows 用户可以尝试使用 Linux 提供的自由软件,但也有太多要学习的 Linux 系统知识。这会花掉他们相当一部分时间才能习惯 Linux 的工作方式。
当然了,对于一个第一次在 Linux 上操作的新手,有没有一个更高效的方法呢?答案是肯定的,接着往下看看云实验平台。
### LabxNow ###
![LabxNow](http://www.linuxlinks.com/portal/content/reviews/Cloud/Screenshot-LabxNow.png)
LabxNow 提供了一个免费服务,方便广大用户通过浏览器来访问远程 Linux 桌面。开发者将其加强为一个用户个人远程实验室(用户可以在系统里运行、开发任何程序),用户可以在任何地方通过互联网登入远程实验室。
这项服务现在可以为个人用户提供2核处理器4GB RAM和10GB的固态硬盘运行在128G RAM的4 AMD 6272处理器上。
#### 配置参数: ####
- 系统镜像:基于 Ubuntu 14.04 的 Xface 4.10RHEL 6.5CentOS(Gnome桌面)Oracle
- 硬件: CPU - 1核或者2核内存: 512MB, 1GB, 2GB or 4GB
- 超快的网络数据传输
- 可以运行在所有流行的浏览器上
- 可以安装任意程序,可以运行任何程序 这是一个非常棒的方法,可以随意做实验学习你想学的任何知识,没有 一点风险
- 添加、删除、管理、制定虚拟机非常方便
- 支持虚拟机共享,远程桌面
你所需要的只是一台有稳定网络的设备。不用担心虚拟专用系统VPS、域名、或者硬件带来的高费用。LabxNow提供了一个在 Ubuntu、RHEL 和 CentOS 上实验的非常好的方法。它给 Windows 用户提供一个极好的环境,让他们探索美妙的 Linux 世界。说得深入一点,它可以让用户随时随地在里面工作,而没有了要在每台设备上安装 Linux 的压力。点击下面这个链接进入 [www.labxnow.org/labxweb/][1]。
另外还有一些其它服务(大部分是收费服务)可以让用户使用 Linux包括 Cloudsigma 环境的7天使用权和Icebergs.io 通过HTML5实现root权限。但是现在我推荐 LabxNow。
--------------------------------------------------------------------------------
来自: http://www.linuxlinks.com/article/20151003095334682/LinuxCloud.html
译者:[sevenot](https://github.com/sevenot)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[1]:https://www.labxnow.org/labxweb/

Some files were not shown because too many files have changed in this diff Show More