mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-26 21:30:55 +08:00
commit
01733985ff
119
README.md
119
README.md
@ -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,44 +21,46 @@ 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/11/10 提升strugglingyouth、FSSlc、Vic020、alim0x为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 @DeadFire,
|
||||
- Leader @wxy,
|
||||
- Source @oska874,
|
||||
- Proofreader @PurlingNayuki,
|
||||
- CORE @geekpi,
|
||||
- CORE @GOLinux,
|
||||
- CORE @ictlyh,
|
||||
@ -71,50 +73,53 @@ LCTT的组成
|
||||
- CORE @Vic020,
|
||||
- CORE @dongfengweixiao,
|
||||
- CORE @alim0x,
|
||||
- Senior @reinoir,
|
||||
- Senior @DeadFire,
|
||||
- Senior @reinoir222,
|
||||
- Senior @tinyeyeser,
|
||||
- Senior @vito-L,
|
||||
- Senior @jasminepeng,
|
||||
- Senior @willqian,
|
||||
- Senior @vizv,
|
||||
- ZTinoZ,
|
||||
- martin2011qi,
|
||||
- theo-l,
|
||||
- luoxcat,
|
||||
- disylee,
|
||||
- Luoxcat,
|
||||
- wi-cuckoo,
|
||||
- disylee,
|
||||
- haimingfg,
|
||||
- KayGuoWhu,
|
||||
- wwy-hust,
|
||||
- martin2011qi,
|
||||
- cvsher,
|
||||
- felixonmars,
|
||||
- su-kaiyao,
|
||||
- GHLandy,
|
||||
- ivo-wang,
|
||||
- cvsher,
|
||||
- wyangsun,
|
||||
- DongShuaike,
|
||||
- flsf,
|
||||
- SPccman,
|
||||
- Stevearzh
|
||||
- mr-ping,
|
||||
- Linchenguang,
|
||||
- oska874
|
||||
- Linux-pdz,
|
||||
- 2q1w2007,
|
||||
- felixonmars,
|
||||
- wyangsun,
|
||||
- MikeCoder,
|
||||
- mr-ping,
|
||||
- xiqingongzi
|
||||
- H-mudcup,
|
||||
- zhangboyue,
|
||||
- cposture,
|
||||
- xiqingongzi,
|
||||
- goreliu,
|
||||
- DongShuaike,
|
||||
- NearTan,
|
||||
- TxmszLou,
|
||||
- ZhouJ-sh,
|
||||
- wangjiezhe,
|
||||
- NearTan,
|
||||
- icybreaker,
|
||||
- shipsw,
|
||||
- johnhoow,
|
||||
- soooogreen,
|
||||
- linuhap,
|
||||
- boredivan,
|
||||
- blueabysm,
|
||||
- liaoishere,
|
||||
- boredivan,
|
||||
- name1e5s,
|
||||
- StdioA,
|
||||
- yechunxiao19,
|
||||
- l3b2w1,
|
||||
- XLCYun,
|
||||
@ -122,46 +127,42 @@ LCTT的组成
|
||||
- tenght,
|
||||
- coloka,
|
||||
- luoyutiantang,
|
||||
- yupmoon,
|
||||
- sonofelice,
|
||||
- jiajia9linuxer,
|
||||
- scusjs,
|
||||
- tnuoccalanosrep,
|
||||
- woodboow,
|
||||
- 1w2b3l,
|
||||
- crowner,
|
||||
- mtunique,
|
||||
- dingdongnigetou,
|
||||
- CNprober,
|
||||
- JonathanKang,
|
||||
- Medusar,
|
||||
- crowner,
|
||||
- dingdongnigetou,
|
||||
- mtunique,
|
||||
- CNprober,
|
||||
- hyaocuk,
|
||||
- szrlee,
|
||||
- KnightJoker,
|
||||
- Xuanwo,
|
||||
- nd0104,
|
||||
- Moelf,
|
||||
- xiaoyu33,
|
||||
- guodongxiaren,
|
||||
- zzlyzq,
|
||||
- yujianxuechuan,
|
||||
- ailurus1991,
|
||||
- ynmlml,
|
||||
- vim-kakali,
|
||||
- ggaaooppeenngg,
|
||||
- Ricky-Gong,
|
||||
- zky001,
|
||||
- lfzark,
|
||||
- 213edu,
|
||||
- Tanete,
|
||||
- bestony,
|
||||
- mudongliang,
|
||||
- liuaiping,
|
||||
- jerryling315,
|
||||
- tomatoKiller,
|
||||
- stduolc,
|
||||
- shaohaolin,
|
||||
- Timeszoro,
|
||||
- rogetfan,
|
||||
- FineFan,
|
||||
- kingname,
|
||||
- jasminepeng,
|
||||
- JeffDing,
|
||||
- CHINAANSHE,
|
||||
- Yuking-net,
|
||||
|
||||
(按提交行数排名前百)
|
||||
|
||||
(按增加行数排名前百)
|
||||
|
||||
LFS 项目活跃成员有:
|
||||
|
||||
@ -173,7 +174,7 @@ LFS 项目活跃成员有:
|
||||
- @KevinSJ
|
||||
- @Yuking-net
|
||||
|
||||
(更新于2015/11/29)
|
||||
(更新于2016/06/20)
|
||||
|
||||
谢谢大家的支持!
|
||||
|
||||
|
0
published/201407/Encrypting Your Cat Photos.md
Executable file → Normal file
0
published/201407/Encrypting Your Cat Photos.md
Executable file → Normal 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
|
||||
|
0
published/201505/20150326 How to set up server monitoring system with Monit.md
Executable file → Normal file
0
published/201505/20150326 How to set up server monitoring system with Monit.md
Executable file → Normal 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/) 荣誉推出
|
||||
|
@ -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/) 荣誉推出
|
||||
|
@ -0,0 +1,257 @@
|
||||
Fabric - 通过 SSH 来自动化管理 Linux 任务和布署应用
|
||||
===========================
|
||||
|
||||
当要管理远程机器或者要布署应用时,虽然你有多种命令行工具可以选择,但是其中很多工具都缺少详细的使用文档。
|
||||
|
||||
在这篇教程中,我们将会一步一步地向你介绍如何使用 fabric 来帮助你更好得管理多台服务器。
|
||||
|
||||
![](http://www.tecmint.com/wp-content/uploads/2015/11/Automate-Linux-Administration-Tasks-Using-Fabric.png)
|
||||
|
||||
*使用 Fabric 来自动化地管理 Linux 任务*
|
||||
|
||||
Fabric 是一个用 Python 编写的命令行工具库,它可以帮助系统管理员高效地执行某些任务,比如通过 SSH 到多台机器上执行某些命令,远程布署应用等。
|
||||
|
||||
在使用之前,如果你拥有使用 Python 的经验能帮你更好的使用 Fabric。当然,如果没有那也不影响使用 Fabric。
|
||||
|
||||
我们为什么要选择 Fabric:
|
||||
|
||||
- 简单
|
||||
- 完备的文档
|
||||
- 如果你会 Python,不用增加学习其他语言的成本
|
||||
- 易于安装使用
|
||||
- 使用便捷
|
||||
- 支持多台机器并行操作
|
||||
|
||||
### 在 Linux 上如何安装 Fabric
|
||||
|
||||
Fabric 有一个特点就是要远程操作的机器只需要支持标准的 OpenSSH 服务即可。只要保证在机器上安装并开启了这个服务就能使用 Fabric 来管理机器。
|
||||
|
||||
#### 依赖
|
||||
|
||||
- Python 2.5 或更新版本,以及对应的开发组件
|
||||
- Python-setuptools 和 pip(可选,但是非常推荐)gcc
|
||||
|
||||
我们推荐使用 pip 安装 Fabric,但是你也可以使用系统自带的包管理器如 `yum`, `dnf` 或 `apt-get` 来安装,包名一般是 `fabric` 或 `python-fabric`。
|
||||
|
||||
如果是基于 RHEL/CentOS 的发行版本的系统,你可以使用系统自带的 [EPEL 源][1] 来安装 fabric。
|
||||
|
||||
```
|
||||
# yum install fabric [适用于基于 RedHat 系统]
|
||||
# dnf install fabric [适用于 Fedora 22+ 版本]
|
||||
```
|
||||
|
||||
如果你是 Debian 或者其派生的系统如 Ubuntu 和 Mint 的用户,你可以使用 apt-get 来安装,如下所示:
|
||||
|
||||
```
|
||||
# apt-get install fabric
|
||||
```
|
||||
|
||||
如果你要安装开发版的 Fabric,你需要安装 pip 来安装 master 分支上最新版本。
|
||||
|
||||
```
|
||||
# yum install python-pip [适用于基于 RedHat 系统]
|
||||
# dnf install python-pip [适用于Fedora 22+ 版本]
|
||||
# apt-get install python-pip [适用于基于 Debian 系统]
|
||||
```
|
||||
|
||||
安装好 pip 后,你可以使用 pip 获取最新版本的 Fabric。
|
||||
|
||||
```
|
||||
# pip install fabric
|
||||
```
|
||||
|
||||
### 如何使用 Fabric 来自动化管理 Linux 任务
|
||||
|
||||
现在我们来开始使用 Fabric,在之前的安装的过程中,Fabric Python 脚本已经被放到我们的系统目录,当我们要运行 Fabric 时输入 `fab` 命令即可。
|
||||
|
||||
#### 在本地 Linux 机器上运行命令行
|
||||
|
||||
按照惯例,先用你喜欢的编辑器创建一个名为 fabfile.py 的 Python 脚本。你可以使用其他名字来命名脚本,但是就需要指定这个脚本的路径,如下所示:
|
||||
|
||||
```
|
||||
# fabric --fabfile /path/to/the/file.py
|
||||
```
|
||||
|
||||
Fabric 使用 `fabfile.py` 来执行任务,这个文件应该放在你执行 Fabric 命令的目录里面。
|
||||
|
||||
**例子 1**:创建入门的 `Hello World` 任务:
|
||||
|
||||
```
|
||||
# vi fabfile.py
|
||||
```
|
||||
|
||||
在文件内输入如下内容:
|
||||
|
||||
```
|
||||
def hello():
|
||||
print('Hello world, Tecmint community')
|
||||
```
|
||||
|
||||
保存文件并执行以下命令:
|
||||
|
||||
```
|
||||
# fab hello
|
||||
```
|
||||
|
||||
![](http://www.tecmint.com/wp-content/uploads/2015/11/Create-Fabric-Fab-Python-File.gif)
|
||||
|
||||
*Fabric 工具使用说明*
|
||||
|
||||
**例子 2**:新建一个名为 fabfile.py 的文件并打开:
|
||||
|
||||
粘贴以下代码至文件:
|
||||
|
||||
```
|
||||
#! /usr/bin/env python
|
||||
from fabric.api import local
|
||||
def uptime():
|
||||
local('uptime')
|
||||
```
|
||||
|
||||
保存文件并执行以下命令:
|
||||
|
||||
```
|
||||
# fab uptime
|
||||
```
|
||||
|
||||
![](http://www.tecmint.com/wp-content/uploads/2015/11/Fabric-Uptime.gif)
|
||||
|
||||
*Fabric: 检查系统运行时间*
|
||||
|
||||
让我们看看这个例子,fabfile.py 文件在本机执行了 uptime 这个命令。
|
||||
|
||||
#### 在远程 Linux 机器上运行命令来执行自动化任务
|
||||
|
||||
Fabric API 使用了一个名为 `env` 的关联数组(Python 中的词典)作为配置目录,来储存 Fabric 要控制的机器的相关信息。
|
||||
|
||||
`env.hosts` 是一个用来存储你要执行 Fabric 任务的机器的列表,如果你的 IP 地址是 192.168.0.0,想要用 Fabric 来管理地址为 192.168.0.2 和 192.168.0.6 的机器,需要的配置如下所示:
|
||||
|
||||
```
|
||||
#!/usr/bin/env python
|
||||
from fabric.api import env
|
||||
env.hosts = [ '192.168.0.2', '192.168.0.6' ]
|
||||
```
|
||||
|
||||
上面这几行代码只是声明了你要执行 Fabric 任务的主机地址,但是实际上并没有执行任何任务,下面我们就来定义一些任务。Fabric 提供了一系列可以与远程服务器交互的方法。
|
||||
|
||||
Fabric 提供了众多的方法,这里列出几个经常会用到的:
|
||||
|
||||
- run - 可以在远程机器上运行的 shell 命令
|
||||
- local - 可以在本机上运行的 shell 命令
|
||||
- sudo - 使用 root 权限在远程机器上运行的 shell 命令
|
||||
- get - 从远程机器上下载一个或多个文件
|
||||
- put - 上传一个或多个文件到远程机器
|
||||
|
||||
**例子 3**:在多台机子上输出信息,新建新的 fabfile.py 文件如下所示
|
||||
|
||||
```
|
||||
#!/usr/bin/env python
|
||||
from fabric.api import env, run
|
||||
env.hosts = ['192.168.0.2','192.168.0.6']
|
||||
def echo():
|
||||
run("echo -n 'Hello, you are tuned to Tecmint ' ")
|
||||
```
|
||||
|
||||
运行以下命令执行 Fabric 任务
|
||||
|
||||
```
|
||||
# fab echo
|
||||
```
|
||||
|
||||
![](http://www.tecmint.com/wp-content/uploads/2015/11/Fabrick-Automate-Linux-Tasks.gif)
|
||||
|
||||
*fabric: 自动在远程 Linux 机器上执行任务*
|
||||
|
||||
**例子 4**:你可以继续改进之前创建的执行 uptime 任务的 fabfile.py 文件,让它可以在多台服务器上运行 uptime 命令,也可以检查其磁盘使用情况,如下所示:
|
||||
|
||||
```
|
||||
#!/usr/bin/env python
|
||||
from fabric.api import env, run
|
||||
env.hosts = ['192.168.0.2','192.168.0.6']
|
||||
def uptime():
|
||||
run('uptime')
|
||||
def disk_space():
|
||||
run('df -h')
|
||||
```
|
||||
|
||||
保存并执行以下命令
|
||||
|
||||
```
|
||||
# fab uptime
|
||||
# fab disk_space
|
||||
```
|
||||
|
||||
![](http://www.tecmint.com/wp-content/uploads/2015/11/Fabric-Run-Multiple-Commands-on-Multiple-Linux-Systems.gif)
|
||||
|
||||
*Fabric:自动在多台服务器上执行任务*
|
||||
|
||||
#### 在远程服务器上自动化布署 LAMP
|
||||
|
||||
**例子 5**:我们来尝试一下在远程服务器上布署 LAMP(Linux, Apache, MySQL/MariaDB and PHP)
|
||||
|
||||
我们要写个函数在远程使用 root 权限安装 LAMP。
|
||||
|
||||
##### 在 RHEL/CentOS 或 Fedora 上
|
||||
|
||||
```
|
||||
#!/usr/bin/env python
|
||||
from fabric.api import env, run
|
||||
env.hosts = ['192.168.0.2','192.168.0.6']
|
||||
def deploy_lamp():
|
||||
run ("yum install -y httpd mariadb-server php php-mysql")
|
||||
```
|
||||
|
||||
##### 在 Debian/Ubuntu 或 Linux Mint 上
|
||||
|
||||
```
|
||||
#!/usr/bin/env python
|
||||
from fabric.api import env, run
|
||||
env.hosts = ['192.168.0.2','192.168.0.6']
|
||||
def deploy_lamp():
|
||||
sudo("apt-get install -q apache2 mysql-server libapache2-mod-php5 php5-mysql")
|
||||
```
|
||||
|
||||
保存并执行以下命令:
|
||||
|
||||
```
|
||||
# fab deploy_lamp
|
||||
```
|
||||
|
||||
注:由于安装时会输出大量信息,这个例子我们就不提供屏幕 gif 图了
|
||||
|
||||
现在你可以使用 Fabric 和上文例子所示的功能来[自动化的管理 Linux 服务器上的任务][2]了。
|
||||
|
||||
#### 一些 Fabric 有用的选项
|
||||
|
||||
- 你可以运行 `fab -help` 输出帮助信息,里面列出了所有可以使用的命令行信息
|
||||
- `–fabfile=PATH` 选项可以让你定义除了名为 fabfile.py 之外的模块
|
||||
- 如果你想用指定的用户名登录远程主机,请使用 `-user=USER` 选项
|
||||
- 如果你需要密码进行验证或者 sudo 提权,请使用 `–password=PASSWORD` 选项
|
||||
- 如果需要输出某个命令的详细信息,请使用 `–display=命令名` 选项
|
||||
- 使用 `--list` 输出所有可用的任务
|
||||
- 使用 `--list-format=FORMAT` 选项能格式化 `-list` 选项输出的信息,可选的有 short、normal、 nested
|
||||
- `--config=PATH` 选项可以指定读取配置文件的地址
|
||||
- `-–colorize-errors` 能显示彩色的错误输出信息
|
||||
- `--version` 输出当前版本
|
||||
|
||||
### 总结
|
||||
|
||||
Fabric 是一个强大并且文档完备的工具,对于新手来说也能很快上手,阅读提供的文档能帮助你更好的了解它。如果你在安装和使用 Fabric 时发现什么问题可以在评论区留言,我们会及时回复。
|
||||
|
||||
参考:[Fabric 文档][3]
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.tecmint.com/automating-linux-system-administration-tasks/
|
||||
|
||||
作者:[Aaron Kili][a]
|
||||
译者:[NearTan](https://github.com/NearTan)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: http://www.tecmint.com/author/aaronkili/
|
||||
[1]: https://linux.cn/article-2324-1.html
|
||||
[2]: http://www.tecmint.com/use-ansible-playbooks-to-automate-complex-tasks-on-multiple-linux-servers/
|
||||
[3]: http://docs.fabfile.org/en/1.4.0/usage/env.html
|
@ -0,0 +1,162 @@
|
||||
在 Debian Linux 上安装配置 ISC DHCP 服务器
|
||||
================================================================================
|
||||
|
||||
动态主机控制协议(Dynamic Host Control Protocol,DHCP)给网络管理员提供了一种便捷的方式,为不断变化的网络主机或是动态网络提供网络层地址。其中最常用的 DHCP 服务工具是 ISC DHCP Server。DHCP 服务的目的是给主机提供必要的网络信息以便能够和其他连接在网络中的主机互相通信。DHCP 服务提供的信息包括:DNS 服务器信息,网络地址(IP),子网掩码,默认网关信息,主机名等等。
|
||||
|
||||
本教程介绍运行在 Debian 7.7 上 4.2.4 版的 ISC-DHCP-Server 如何管理多个虚拟局域网(VLAN),也可以非常容易应用到单一网络上。
|
||||
|
||||
测试用的网络是通过思科路由器使用传统的方式来管理 DHCP 租约地址的。目前有 12 个 VLAN 需要通过集中式服务器来管理。把 DHCP 的任务转移到一个专用的服务器上,路由器可以收回相应的资源,把资源用到更重要的任务上,比如路由寻址,访问控制列表,流量监测以及网络地址转换等。
|
||||
|
||||
另一个将 DHCP 服务转移到专用服务器的好处,以后会讲到,它可以建立动态域名服务器(DDNS),这样当主机从服务器请求 DHCP 地址的时候,这样新主机的主机名就会被添加到 DNS 系统里面。
|
||||
|
||||
### 安装和配置 ISC DHCP 服务器###
|
||||
|
||||
1、使用 apt 工具用来安装 Debian 软件仓库中的 ISC 软件,来创建这个多宿主服务器。与其他教程一样需要使用 root 或者 sudo 访问权限。请适当的修改,以便使用下面的命令。(LCTT 译注:下面中括号里面是注释,使用的时候请删除,#表示使用的 root 权限)
|
||||
|
||||
# apt-get install isc-dhcp-server [安装 the ISC DHCP Server 软件]
|
||||
# dpkg --get-selections isc-dhcp-server [确认软件已经成功安装]
|
||||
# dpkg -s isc-dhcp-server [用另一种方式确认成功安装]
|
||||
|
||||
![Install ISC DHCP Server in Debian](http://www.tecmint.com/wp-content/uploads/2015/04/Install-ISC-DHCP-Server.jpg)
|
||||
|
||||
2、 确认服务软件已经安装完成,现在需要提供网络信息来配置服务器,这样服务器才能够根据我们的需要来分发网络信息。作为管理员最起码需要了解的 DHCP 信息如下:
|
||||
|
||||
- 网络地址
|
||||
- 子网掩码
|
||||
- 动态分配的地址范围
|
||||
|
||||
其他一些服务器动态分配的有用信息包括:
|
||||
|
||||
- 默认网关
|
||||
- DNS 服务器 IP 地址
|
||||
- 域名
|
||||
- 主机名
|
||||
- 网络广播地址
|
||||
|
||||
这只是能让 ISC DHCP 服务器处理的选项中非常少的一部分。如果你想查看所有选项及其描述需要在安装好软件后输入以下命令:
|
||||
|
||||
# man dhcpd.conf
|
||||
|
||||
3、 一旦管理员已经确定了这台服务器分发的所有必要信息,那么是时候配置服务器并且分配必要的地址池了。在配置任何地址池或服务器配置之前,必须配置 DHCP 服务器侦听这台服务器上面的一个接口。
|
||||
|
||||
在这台特定的服务器上,设置好网卡后,DHCP 会侦听名称名为`'bond0'`的接口。请适根据你的实际情况来更改服务器以及网络环境。下面的配置都是针对本教程的。
|
||||
|
||||
![Configure ISC DHCP Network](http://www.tecmint.com/wp-content/uploads/2015/04/Configure-ISC-DHCP-Network.jpg)
|
||||
|
||||
这行指定的是 DHCP 服务侦听接口(一个或多个)上的 DHCP 流量。修改主配置文件,分配适合的 DHCP 地址池到所需要的网络上。主配置文件在 /etc/dhcp/dhcpd.conf。用文本编辑器打开这个文件
|
||||
|
||||
# nano /etc/dhcp/dhcpd.conf
|
||||
|
||||
这个配置文件可以配置我们所需要的地址池/主机。文件顶部有 ‘ddns-update-style‘ 这样一句,在本教程中它设置为 ‘none‘。在以后的教程中会讲到动态 DNS,ISC-DHCP-Server 将会与 BIND9 集成,它能够使主机名更新指向到 IP 地址。
|
||||
|
||||
4、 接下来的部分是管理员配置全局网络设置,如 DNS 域名,默认的租约时间,IP地址,子网的掩码,以及其它。如果你想了解所有的选项,请阅读 man 手册中的 dhcpd.conf 文件,命令如下:
|
||||
|
||||
# man dhcpd.conf
|
||||
|
||||
对于这台服务器,我们需要在配置文件顶部配置一些全局网络设置,这样就不用到每个地址池中去单独设置了。
|
||||
|
||||
![Configure ISC DDNS](http://www.tecmint.com/wp-content/uploads/2015/04/Configure-ISC-DDNS.png)
|
||||
|
||||
我们花一点时间来解释一下这些选项,在本教程中虽然它们是一些全局设置,但是也可以单独的为某一个地址池进行配置。
|
||||
|
||||
- option domain-name “comptech.local”; – 所有使用这台 DHCP 服务器的主机,都将成为 DNS 域 “comptech.local” 的一员
|
||||
|
||||
- option domain-name-servers 172.27.10.6; DHCP 向所有配置这台 DHCP 服务器的的网络主机分发 DNS 服务器地址为 172.27.10.6
|
||||
|
||||
- option subnet-mask 255.255.255.0; – 每个网络设备都分配子网掩码 255.255.255.0 或 /24
|
||||
|
||||
- default-lease-time 3600; – 默认有效的地址租约时间(单位是秒)。如果租约时间耗尽,那么主机可以重新申请租约。如果租约完成,那么相应的地址也将被尽快回收。
|
||||
|
||||
- max-lease-time 86400; – 这是一台主机所能租用的最大的租约时间(单位为秒)。
|
||||
|
||||
- ping-check true; – 这是一个额外的测试,以确保服务器分发出的网络地址不是当前网络中另一台主机已使用的网络地址。
|
||||
|
||||
- ping-timeout; – 在判断地址以前没有使用过前,服务器将等待 ping 响应多少秒。
|
||||
|
||||
- ignore client-updates; 现在这个选项是可以忽略的,因为 DDNS 在前面已在配置文件中已经被禁用,但是当 DDNS 运行时,这个选项会忽略主机更新其 DNS 主机名的请求。
|
||||
|
||||
5、 文件中下面一行是权威 DHCP 所在行。这行的意义是如果服务器是为文件中所配置的网络分发地址的服务器,那么取消对该权威关键字(authoritative stanza) 的注释。
|
||||
|
||||
通过去掉关键字 authoritative 前面的 ‘#’,取消注释全局权威关键字。这台服务器将是它所管理网络里面的唯一权威。
|
||||
|
||||
![Enable ISC Authoritative](http://www.tecmint.com/wp-content/uploads/2015/04/ISC-authoritative.png)
|
||||
|
||||
默认情况下服务器被假定为**不是**网络上的权威服务器。之所以这样做是出于安全考虑。如果有人因为不了解 DHCP 服务的配置,导致配置不当或配置到一个不该出现的网络里面,这都将带来非常严重的连接问题。这行还可用在每个网络中单独配置使用。也就是说如果这台服务器不是整个网络的 DHCP 服务器,authoritative 行可以用在每个单独的网络中,而不是像上面截图中那样的全局配置。
|
||||
|
||||
6、 这一步是配置服务器将要管理的所有 DHCP 地址池/网络。简短起见,本教程只讲到配置的地址池之一。作为管理员需要收集一些必要的网络信息(比如域名,网络地址,有多少地址能够被分发等等)
|
||||
|
||||
以下这个地址池所用到的信息都是管理员收集整理的:网络 ID 172.27.60.0, 子网掩码 255.255.255.0 或 /24, 默认子网网关 172.27.60.1,广播地址 172.27.60.255.0 。
|
||||
|
||||
以上这些信息对于构建 dhcpd.conf 文件中新网络非常重要。使用文本编辑器修改配置文件添加新网络进去,这里我们需要使用 root 或 sudo 访问权限。
|
||||
|
||||
# nano /etc/dhcp/dhcpd.conf
|
||||
|
||||
![Configure DHCP Pools and Networks](http://www.tecmint.com/wp-content/uploads/2015/04/ISC-network.png)
|
||||
|
||||
当前这个例子是给用 VMWare 创建的虚拟服务器分配 IP 地址。第一行显示是该网络的子网掩码。括号里面的内容是 DHCP 服务器应该提供给网络上面主机的所有选项。
|
||||
|
||||
第一行, range 172.27.60.50 172.27.60.254; 这一行显示的是,DHCP 服务在这个网络上能够给主机动态分发的地址范围。
|
||||
|
||||
第二行,option routers 172.27.60.1; 这里显示的是给网络里面所有的主机分发的默认网关地址。
|
||||
|
||||
最后一行, option broadcast-address 172.27.60.255; 显示当前网络的广播地址。这个地址不能被包含在要分发放的地址范围内,因为广播地址不能分配到一个主机上面。
|
||||
|
||||
必须要强调的是每行的结尾必须要用(;)来结束,所有创建的网络必须要在 {} 里面。
|
||||
|
||||
7、 如果要创建多个网络,继续创建完它们的相应选项后保存文本文件即可。配置完成以后如果有更改,ISC-DHCP-Server 进程需要重启来使新的更改生效。重启进程可以通过下面的命令来完成:
|
||||
|
||||
# service isc-dhcp-server restart
|
||||
|
||||
这条命令将重启 DHCP 服务,管理员能够使用几种不同的方式来检查服务器是否已经可以处理 dhcp 请求。最简单的方法是通过 [lsof 命令][1]来查看服务器是否在侦听67端口,命令如下:
|
||||
|
||||
# lsof -i :67
|
||||
|
||||
![Check DHCP Listening Port](http://www.tecmint.com/wp-content/uploads/2015/04/lsof.png)
|
||||
|
||||
这里输出的结果表明 dhcpd(DHCP 服务守护进程)正在运行并且侦听67端口。由于在 /etc/services 文件中67端口的映射,所以输出中的67端口实际上被转换成了 “bootps”。
|
||||
|
||||
在大多数的系统中这是非常常见的,现在服务器应该已经为网络连接做好准备,我们可以将一台主机接入网络请求DHCP地址来验证服务是否正常。
|
||||
|
||||
### 测试客户端连接 ###
|
||||
|
||||
8、 现在许多系统使用网络管理器来维护网络连接状态,因此这个设备应该预先配置好的,只要对应的接口处于活跃状态就能够获取 DHCP。
|
||||
|
||||
然而当一台设备无法使用网络管理器时,它可能需要手动获取 DHCP 地址。下面的几步将演示怎样手动获取以及如何查看服务器是否已经按需要分发地址。
|
||||
|
||||
‘[ifconfig][2]‘工具能够用来检查接口的配置。这台被用来测试的 DHCP 服务器的设备,它只有一个网络适配器(网卡),这块网卡被命名为 ‘eth0‘。
|
||||
|
||||
# ifconfig eth0
|
||||
|
||||
![Check Network Interface IP Address](http://www.tecmint.com/wp-content/uploads/2015/04/No-ip.png)
|
||||
|
||||
从输出结果上看,这台设备目前没有 IPv4 地址,这样很便于测试。我们把这台设备连接到 DHCP 服务器并发出一个请求。这台设备上已经安装了一个名为 ‘dhclient‘ 的DHCP客户端工具。因为操作系统各不相同,所以这个客户端软件也是互不一样的。
|
||||
|
||||
# dhclient eth0
|
||||
|
||||
![Request IP Address from DHCP](http://www.tecmint.com/wp-content/uploads/2015/04/IP.png)
|
||||
|
||||
当前 `'inet addr:'` 字段中显示了属于 172.27.60.0 网络地址范围内的 IPv4 地址。值得欣慰的是当前网络还配置了正确的子网掩码并且分发了广播地址。
|
||||
|
||||
到这里看起来还都不错,让我们来测试一下,看看这台设备收到新 IP 地址是不是由服务器发出的。这里我们参照服务器的日志文件来完成这个任务。虽然这个日志的内容有几十万条,但是里面只有几条是用来确定服务器是否正常工作的。这里我们使用一个工具 ‘tail’,它只显示日志文件的最后几行,这样我们就可以不用拿一个文本编辑器去查看所有的日志文件了。命令如下:
|
||||
|
||||
# tail /var/log/syslog
|
||||
|
||||
![Check DHCP Logs](http://www.tecmint.com/wp-content/uploads/2015/04/DHCP-Log.png)
|
||||
|
||||
OK!服务器记录表明它分发了一个地址给这台主机 (HRTDEBXENSRV)。服务器按预期运行,给它充当权威服务器的网络分发了适合的网络地址。至此 DHCP 服务器搭建成功并且运行。如果有需要你可以继续配置其他的网络,排查故障,确保安全。
|
||||
|
||||
在以后的Debian教程中我会讲一些新的 ISC-DHCP-Server 功能。有时间的话我将写一篇关于 Bind9 和 DDNS 的教程,融入到这篇文章里面。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.tecmint.com/install-and-configure-multihomed-isc-dhcp-server-on-debian-linux/
|
||||
|
||||
作者:[Rob Turner][a]
|
||||
译者:[ivo-wang](https://github.com/ivo-wang)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.tecmint.com/author/robturner/
|
||||
[1]:http://www.tecmint.com/10-lsof-command-examples-in-linux/
|
||||
[2]:http://www.tecmint.com/ifconfig-command-examples/
|
220
published/201512/20150917 A Repository with 44 Years of Unix Evolution.md
Executable file
220
published/201512/20150917 A Repository with 44 Years of Unix Evolution.md
Executable file
@ -0,0 +1,220 @@
|
||||
一个涵盖 Unix 44 年进化史的版本仓库
|
||||
=============================================================================
|
||||
|
||||
http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html
|
||||
|
||||
This is an HTML rendering of a working paper draft that led to a publication. The publication should always be cited in preference to this draft using the following reference:
|
||||
|
||||
- **Diomidis Spinellis**. [A repository with 44 years of Unix evolution](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html). In MSR '15: Proceedings of the 12th Working Conference on Mining Software Repositories, pages 13-16. IEEE, 2015. Best Data Showcase Award. ([doi:10.1109/MSR.2015.6](http://dx.doi.org/10.1109/MSR.2015.6))
|
||||
|
||||
This document is also available in [PDF format](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.pdf).
|
||||
|
||||
The document's metadata is available in [BibTeX format](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c-bibtex.html).
|
||||
|
||||
This material is presented to ensure timely dissemination of scholarly and technical work. Copyright and all rights therein are retained by authors or by other copyright holders. All persons copying this information are expected to adhere to the terms and constraints invoked by each author's copyright. In most cases, these works may not be reposted without the explicit permission of the copyright holder.
|
||||
|
||||
[Diomidis Spinellis Publications](http://www.dmst.aueb.gr/dds/pubs/)
|
||||
|
||||
© 2015 IEEE. Personal use of this material is permitted. However, permission to reprint/republish this material for advertising or promotional purposes or for creating new collective works for resale or redistribution to servers or lists, or to reuse any copyrighted component of this work in other works must be obtained from the IEEE.
|
||||
|
||||
### 摘要 ###
|
||||
|
||||
Unix 操作系统的进化历史,可以从一个版本控制仓库中窥见,时间跨度从 1972 年的 5000 行内核代码开始,到 2015 年成为一个含有 26,000,000 行代码的被广泛使用的系统。该仓库包含 659,000 条提交,和 2306 次合并。仓库部署了被普遍采用的 Git 系统用于储存其代码,并且在时下流行的 GitHub 上建立了存档。它由来自贝尔实验室(Bell Labs),伯克利大学(Berkeley University),386BSD 团队所开发的系统软件的 24 个快照综合定制而成,这包括两个老式仓库和一个开源 FreeBSD 系统的仓库。总的来说,可以确认其中的 850 位个人贡献者,更早些时候的一批人主要做基础研究。这些数据可以用于一些经验性的研究,在软件工程,信息系统和软件考古学领域。
|
||||
|
||||
### 1、介绍 ###
|
||||
|
||||
Unix 操作系统作为一个主要的工程上的突破而脱颖而出,得益于其模范的设计、大量的技术贡献、它的开发模型及广泛的使用。Unix 编程环境的设计已经被视为一个提供非常简洁、强大而优雅的设计 [[1][1]] 。在技术方面,许多对 Unix 有直接贡献的,或者因 Unix 而流行的特性就包括 [[2][2]] :用高级语言编写的可移植部署的内核;一个分层式设计的文件系统;兼容的文件,设备,网络和进程间 I/O;管道和过滤架构;虚拟文件系统;和作为普通进程的可由用户选择的不同 shell。很早的时候,就有一个庞大的社区为 Unix 贡献软件 [[3][3]] ,[[4][4],pp. 65-72] 。随时间流逝,这个社区不断壮大,并且以现在称为开源软件开发的方式在工作着 [[5][5],pp. 440-442] 。Unix 和其睿智的晚辈们也将 C 和 C++ 编程语言、分析程序和词法分析生成器(*yacc*,*lex*)、文档编制工具(*troff*,*eqn*,*tbl*)、脚本语言(*awk*,*sed*,*Perl*)、TCP/IP 网络、和配置管理系统(configuration management system)(*SCSS*,*RCS*,*Subversion*,*Git*)发扬广大了,同时也形成了现代互联网基础设施和网络的最大的部分。
|
||||
|
||||
幸运的是,一些重要的具有历史意义的 Unix 材料已经保存下来了,现在保持对外开放。尽管 Unix 最初是由相对严格的协议发行,但在早期的开发中,很多重要的部分是通过 Unix 的版权拥有者之一(Caldera International) (LCTT 译注:2002年改名为 SCO Group)以一个自由的协议发行。通过将这些部分再结合上由加州大学伯克利分校(University of California, Berkeley)和 FreeBSD 项目组开发或发布的开源软件,贯穿了从 1972 年六月二十日开始到现在的整个系统的开发。
|
||||
|
||||
通过规划和处理这些可用的快照以及或旧或新的配置管理仓库,将这些可用数据的大部分重建到一个新合成的 Git 仓库之中。这个仓库以数字的形式记录了过去44年来最重要的数字时代产物的详细的进化。下列章节描述了该仓库的结构和内容(第[2][6]节)、创建方法(第[3][7]节)和该如何使用(第[4][8]节)。
|
||||
|
||||
### 2、数据概览 ###
|
||||
|
||||
这 1GB 的 Unix 历史仓库可以从 [GitHub][9] 上克隆^[1][10] 。如今^[2][11] ,这个仓库包含来自 850 个贡献者的 659,000 个提交和 2,306 个合并。贡献者有来自贝尔实验室(Bell Labs)的 23 个员工,伯克利大学(Berkeley University)的计算机系统研究组(Computer Systems Research Group)(CSRG)的 158 个人,和 FreeBSD 项目的 660 个成员。
|
||||
|
||||
这个仓库的生命始于一个 *Epoch* 的标签,这里面只包含了证书信息和现在的 README 文件。其后各种各样的标签和分支记录了很多重要的时刻。
|
||||
|
||||
- *Research-VX* 标签对应来自贝尔实验室(Bell Labs)六个研究版本。从 *Research-V1* (4768 行 PDP-11 汇编代码)开始,到以 *Research-V7* (大约 324,000 行代码,1820 个 C 文件)结束。
|
||||
- *Bell-32V* 是第七个版本 Unix 在 DEC/VAX 架构上的移植。
|
||||
- *BSD-X* 标签对应伯克利大学(Berkeley University)释出的 15 个快照。
|
||||
- *386BSD-X* 标签对应该系统的两个开源版本,主要是 Lynne 和 William Jolitz 写的适用于 Intel 386 架构的内核代码。
|
||||
- *FreeBSD-release/X* 标签和分支标记了来自 FreeBSD 项目的 116 个发行版。
|
||||
|
||||
另外,以 *-Snapshot-Development* 为后缀的分支,表示该提交由来自一个以时间排序的快照文件序列而合成;而以一个 *-VCS-Development* 为后缀的标签,标记了有特定发行版出现的历史分支的时刻。
|
||||
|
||||
仓库的历史包含从系统开发早期的一些提交,比如下面这些。
|
||||
|
||||
commit c9f643f59434f14f774d61ee3856972b8c3905b1
|
||||
Author: Dennis Ritchie <research!dmr>
|
||||
Date: Mon Dec 2 18:18:02 1974 -0500
|
||||
Research V5 development
|
||||
Work on file usr/sys/dmr/kl.c
|
||||
|
||||
两个发布之间的合并代表着系统发生了进化,比如 BSD 3 的开发来自 BSD2 和 Unix 32/V,它在 Git 仓库里正是被表示为带两个父节点的图形节点。
|
||||
|
||||
更为重要的是,以这种方式构造的仓库允许 **git blame**,就是可以给源代码行加上注释,如版本、日期和它们第一次出现相关联的作者,这样可以知道任何代码的起源。比如说,检出 **BSD-4** 这个标签,并在内核的 *pipe.c* 文件上运行一下 git blame,就会显示出由 Ken Thompson 写于 1974,1975 和 1979年的代码行,和 Bill Joy 写于 1980 年的。这就可以自动(尽管计算上比较费事)检测出任何时刻出现的代码。
|
||||
|
||||
![](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/provenance.png)
|
||||
|
||||
*图1:各个重大 Unix 发行版的代码来源*
|
||||
|
||||
如[上图][12]所示,现代版本的 Unix(FreeBSD 9)依然有相当部分的来自 BSD 4.3,BSD 4.3 Net/2 和 BSD 2.0 的代码块。有趣的是,这图片显示有部分代码好像没有保留下来,当时激进地要创造一个脱离于伯克利(386BSD 和 FreeBSD 1.0)所释出代码的开源操作系统。FreeBSD 9 中最古老的代码是一个 18 行的队列,在 C 库里面的 timezone.c 文件里,该文件也可以在第七版的 Unix 文件里找到,同样的名字,时间戳是 1979 年一月十日 - 36 年前。
|
||||
|
||||
### 3、数据收集和处理 ###
|
||||
|
||||
这个项目的目的是以某种方式巩固从数据方面说明 Unix 的进化,通过将其并入一个现代的版本仓库,帮助人们对系统进化的研究。项目工作包括收录数据,分类并综合到一个单独的 Git 仓库里。
|
||||
|
||||
![](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/branches.png)
|
||||
|
||||
*图2:导入 Unix 快照、仓库及其合并*
|
||||
|
||||
项目以三种数据类型为基础(见[图2][13])。首先,早期发布版本的快照,获取自 [Unix 遗产社会归档(Unix Heritage Society archive)][14]^[3][15] 、包括了 CSRG 全部的源代码归档的 [CD-ROM 镜像][16]^[4][17] , [Oldlinux 网站][18]^[5][19] 和 [FreeBSD 归档][20]^[6][21] 。 其次,以前的和现在的仓库,即 CSRG SCCS [[6][22]] 仓库,FreeBSD 1 CVS 仓库,和[现代 FreeBSD 开发的 Git 镜像][23]^[7][24] 。前两个都是从和快照相同的来源获得的。
|
||||
|
||||
最后,也是最费力的数据源是 **初步研究(primary research)**。释出的快照并没有提供关于它们的源头和每个文件贡献者的信息。因此,这些信息片段需要通过初步研究(primary research)验证。至于作者信息主要通过作者的自传,研究论文,内部备忘录和旧文档扫描件;通过阅读并且自动处理源代码和帮助页面补充;通过与那个年代的人用电子邮件交流;在 *StackExchange* 网站上贴出疑问;查看文件的位置(在早期的内核版本的源代码,分为 `usr/sys/dmr` 和 `/usr/sys/ken` 两个位置);从研究论文和帮助手册披露的作者找到源代码,从一个又一个的发行版中获取。(有趣的是,第一和第二的研究版(Research Edition)帮助页面都有一个 “owner” 部分,列出了作者(比如,*Ken*)及对应的系统命令、文件、系统调用或库函数。在第四版中这个部分就没了,而在 BSD 发行版中又浮现了 “Author” 部分。)关于作者信息更为详细地写在了项目的文件中,这些文件被用于匹配源代码文件和它们的作者和对应的提交信息。最后,关于源代码库之间的合并信息是获取自[ NetBSD 项目所维护的 BSD 家族树][25]^[8][26] 。
|
||||
|
||||
作为本项目的一部分而开发的软件和数据文件,现在可以[在线获取][27]^[9][28] ,并且,如果有合适的网络环境,CPU 和磁盘资源,可以用来从头构建这样一个仓库。关于主要发行版的作者信息,都存储在本项目的 `author-path` 目录下的文件里。它们的内容中带有正则表达式的文件路径后面指出了相符的作者。可以指定多个作者。正则表达式是按线性处理的,所以一个文件末尾的匹配一切的表达式可以指定一个发行版的默认作者。为避免重复,一个以 `.au` 后缀的独立文件专门用于映射作者的识别号(identifier)和他们的名字及 email。这样一个文件为每个与该系统进化相关的社区都建立了一个:贝尔实验室(Bell Labs),伯克利大学(Berkeley University),386BSD 和 FreeBSD。为了真实性的需要,早期贝尔实验室(Bell Labs)发行版的 emails 都以 UUCP 注释(UUCP notation)方式列出(例如, `research!ken`)。FreeBSD 作者的识别映射,需要导入早期的 CVS 仓库,通过从如今项目的 Git 仓库里拆解对应的数据构建。总的来说,由 1107 行构成了注释作者信息的文件(828 个规则),并且另有 640 行用于映射作者的识别号到名字。
|
||||
|
||||
现在项目的数据源被编码成了一个 168 行的 `Makefile`。它包括下面的步骤。
|
||||
|
||||
**Fetching** 从远程站点复制和克隆大约 11GB 的镜像、归档和仓库。
|
||||
|
||||
**Tooling** 从 2.9 BSD 中为旧的 PDP-11 归档获取一个归档器,并调整它以在现代的 Unix 版本下编译;编译 4.3 BSD 的 *compress* 程序来解压 386BSD 发行版,这个程序不再是现代 Unix 系统的组成部分了。
|
||||
|
||||
**Organizing** 用 *tar* 和 *cpio* 解压缩包;合并第六个研究版的三个目录;用旧的 PDP-11 归档器解压全部一个 BSD 归档;挂载 CD-ROM 镜像,这样可以作为文件系统处理;合并第 8 和 62 的 386BSD 磁盘镜像为两个独立的文件。
|
||||
|
||||
**Cleaning** 恢复第一个研究版的内核源代码文件,这个可以通过 OCR 从打印件上得到近似其原始状态的的格式;给第七个研究版的源代码文件打补丁;移除发行后被添加进来的元数据和其他文件,为避免得到错误的时间戳信息;修复毁坏的 SCCS 文件;用一个定制的 Perl 脚本移除指定到多个版本的 CVS 符号、删除与现在冲突的 CVS *Attr* 文件、用 *cvs2svn* 将 CVS 仓库转换为 Git 仓库,以处理早期的 FreeBSD CVS 仓库。
|
||||
|
||||
在仓库再现(representation)中有一个很有意思的部分就是,如何导入那些快照,并以一种方式联系起来,使得 *git blame* 可以发挥它的魔力。快照导入到仓库是基于每个文件的时间戳作为一系列的提交实现的。当所有文件导入后,就被用对应发行版的名字给标记了。然后,可以删除那些文件,并开始导入下一个快照。注意 *git blame* 命令是通过回溯一个仓库的历史来工作的,并使用启发法(heuristics)来检测文件之间或文件内的代码移动和复制。因此,删除掉的快照间会产生中断,以防止它们之间的代码被追踪。
|
||||
|
||||
相反,在下一个快照导入之前,之前快照的所有文件都被移动到了一个隐藏的后备目录里,叫做 `.ref`(引用)。它们保存在那,直到下个快照的所有文件都被导入了,这时候它们就会被删掉。因为 `.ref` 目录下的每个文件都精确对应一个原始文件,*git blame* 可以知道多少源代码通过 `.ref` 文件从一个版本移到了下一个,而不用显示出 `.ref` 文件。为了更进一步帮助检测代码起源,同时增加再现(representation)的真实性,每个发行版都被再现(represented)为一个有增量文件的分支(*-Development*)与之前发行版之间的合并。
|
||||
|
||||
上世纪 80 年代时期,只有伯克利(Berkeley) 开发的文件的一个子集是用 SCCS 版本控制的。在那个期间,我们的统一仓库里包含了来自 SCCS 的提交和快照的增量文件的导入数据。对于每个发行版,可用最近的时间戳找到该 SCCS 提交,并被标记为一个与发行版增量导入分支的合并。这些合并可以在[图2][29] 的中间看到。
|
||||
|
||||
将各种数据资源综合到一个仓库的工作,主要是用两个脚本来完成的。一个 780 行的 Perl 脚本(`import-dir.pl`)可以从一个单独的数据源(快照目录、SCCS 仓库,或者 Git 仓库)中,以 *Git fast export* 格式导出(真实的或者综合的)提交历史。输出是一个简单的文本格式,Git 工具用这个来导入和导出提交。其他方面,这个脚本以一些东西为参数,如文件到贡献者的映射、贡献者登录名和他们的全名间的映射、哪个导入的提交会被合并、哪些文件要处理和忽略、以及“引用”文件的处理。一个 450 行的 Shell 脚本创建 Git 仓库,并调用带适当参数的 Perl 脚本,来导入 27 个可用的历史数据资源。Shell 脚本也会运行 30 个测试,比较特定标签的仓库和对应的数据源,核对查看的目录中出现的和没出现的,并回溯查看分支树和合并的数量,*git blame* 和 *git log* 的输出。最后,调用 *git* 作垃圾收集和仓库压缩,从最初的 6GB 降到分发的 1GB 大小。
|
||||
|
||||
### 4、数据使用 ###
|
||||
|
||||
该数据可以用于软件工程、信息系统和软件考古学(software archeology)领域的经验性研究。鉴于它从不间断而独一无二的存在了超过了 40 年,可以供软件进化和跨代更迭参考。从那时以来,处理速度已经成千倍地增长、存储容量扩大了百万倍,该数据同样可以用于软件和硬件技术交叉进化(co-evolution)的研究。软件开发从研究中心到大学,到开源社区的转移,可以用来研究组织文化对于软件开发的影响。该仓库也可以用于学习著名人物的实际编程,比如 Turing 奖获得者(Dennis Ritchie 和 Ken Thompson)和 IT 产业的大佬(Bill Joy 和 Eric Schmidt)。另一个值得学习的现象是代码的长寿,无论是单行的水平,或是作为那个时代随 Unix 发布的完整的系统(Ingres、 Lisp、 Pascal、 Ratfor、 Snobol、 TMP),和导致代码存活或消亡的因素。最后,因为该数据让 Git 感到了压力,底层的软件仓库存储技术达到了其极限,这会推动版本管理系统领域的工程进度。
|
||||
|
||||
![](http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/metrics.png)
|
||||
|
||||
*图3:Unix 发行版的代码风格进化*
|
||||
|
||||
[图3][30] 根据 36 个主要 Unix 发行版描述了一些有趣的代码统计的趋势线(用 R 语言的局部多项式回归拟合函数生成),验证了代码风格和编程语言的使用在很长的时间尺度上的进化。这种进化是软硬件技术的需求和支持、软件构筑理论,甚至社会力量所驱动的。图片中的日期计算了出现在一个给定发行版中的所有文件的平均日期。正如可以从中看到,在过去的 40 年中,标示符和文件名字的长度已经稳步从 4 到 6 个字符增长到 7 到 11 个字符。我们也可以看到注释数量的少量稳步增加,以及 *goto* 语句的使用量减少,同时 *register* 这个类型修饰符的消失。
|
||||
|
||||
### 5、未来的工作 ###
|
||||
|
||||
可以做很多事情去提高仓库的正确性和有效性。创建过程以开源代码共享了,通过 GitHub 的拉取请求(pull request),可以很容易地贡献更多代码和修复。最有用的社区贡献将使得导入的快照文件的覆盖面增长,以便归属于某个具体的作者。现在,大约 90,000 个文件(在 160,000 总量之外)通过默认规则指定了作者。类似地,大约有 250 个作者(最初 FreeBSD 那些)仅知道其识别号。两个都列在了 build 仓库的 unmatched 目录里,欢迎贡献数据。进一步,BSD SCCS 和 FreeBSD CVS 的提交共享相同的作者和时间戳,这些可以结合成一个单独的 Git 提交。导入 SCCS 文件提交的支持会被添加进来,以便引入仓库对应的元数据。最后,也是最重要的,开源系统的更多分支会添加进来,比如 NetBSD、 OpenBSD、DragonFlyBSD 和 *illumos*。理想情况下,其他历史上重要的 Unix 发行版,如 System III、System V、 NeXTSTEP 和 SunOS 等的当前版权拥有者,也会在一个允许他们的合作伙伴使用仓库用于研究的协议下释出他们的系统。
|
||||
|
||||
### 鸣谢 ###
|
||||
|
||||
本文作者感谢很多付出努力的人们。 Brian W. Kernighan, Doug McIlroy 和 Arnold D. Robbins 在贝尔实验室(Bell Labs)的登录识别号方面提供了帮助。 Clem Cole, Era Erikson, Mary Ann Horton, Kirk McKusick, Jeremy C. Reed, Ingo Schwarze 和 Anatole Shaw 在 BSD 的登录识别号方面提供了帮助。BSD SCCS 的导入代码是基于 H. Merijn Brand 和 Jonathan Gray 的工作。
|
||||
|
||||
这次研究由欧盟 ( 欧洲社会基金(European Social Fund,ESF)) 和 希腊国家基金(Greek national funds)通过国家战略参考框架( National Strategic Reference Framework ,NSRF) 的 Operational Program " Education and Lifelong Learning" - Research Funding Program: Thalis - Athens University of Economics and Business - Software Engineering Research Platform ,共同出资赞助。
|
||||
|
||||
### 引用 ###
|
||||
|
||||
[[1]][31]
|
||||
M. D. McIlroy, E. N. Pinson, and B. A. Tague, "UNIX time-sharing system: Foreword," *The Bell System Technical Journal*, vol. 57, no. 6, pp. 1899-1904, July-August 1978.
|
||||
|
||||
[[2]][32]
|
||||
D. M. Ritchie and K. Thompson, "The UNIX time-sharing system," *Bell System Technical Journal*, vol. 57, no. 6, pp. 1905-1929, July-August 1978.
|
||||
|
||||
[[3]][33]
|
||||
D. M. Ritchie, "The evolution of the UNIX time-sharing system," *AT&T Bell Laboratories Technical Journal*, vol. 63, no. 8, pp. 1577-1593, Oct. 1984.
|
||||
|
||||
[[4]][34]
|
||||
P. H. Salus, *A Quarter Century of UNIX*. Boston, MA: Addison-Wesley, 1994.
|
||||
|
||||
[[5]][35]
|
||||
E. S. Raymond, *The Art of Unix Programming*. Addison-Wesley, 2003.
|
||||
|
||||
[[6]][36]
|
||||
M. J. Rochkind, "The source code control system," *IEEE Transactions on Software Engineering*, vol. SE-1, no. 4, pp. 255-265, 1975.
|
||||
|
||||
----------
|
||||
|
||||
#### 脚注 ####
|
||||
|
||||
[1][37] - [https://github.com/dspinellis/unix-history-repo][38]
|
||||
|
||||
[2][39] - Updates may add or modify material. To ensure replicability the repository's users are encouraged to fork it or archive it.
|
||||
|
||||
[3][40] - [http://www.tuhs.org/archive_sites.html][41]
|
||||
|
||||
[4][42] - [https://www.mckusick.com/csrg/][43]
|
||||
|
||||
[5][44] - [http://www.oldlinux.org/Linux.old/distributions/386BSD][45]
|
||||
|
||||
[6][46] - [http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/][47]
|
||||
|
||||
[7][48] - [https://github.com/freebsd/freebsd][49]
|
||||
|
||||
[8][50] - [http://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/share/misc/bsd-family-tree][51]
|
||||
|
||||
[9][52] - [https://github.com/dspinellis/unix-history-make][53]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html
|
||||
|
||||
作者:Diomidis Spinellis
|
||||
译者:[wi-cuckoo](https://github.com/wi-cuckoo)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#MPT78
|
||||
[2]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#RT78
|
||||
[3]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#Rit84
|
||||
[4]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#Sal94
|
||||
[5]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#Ray03
|
||||
[6]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#sec:data
|
||||
[7]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#sec:dev
|
||||
[8]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#sec:use
|
||||
[9]:https://github.com/dspinellis/unix-history-repo
|
||||
[10]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFtNtAAB
|
||||
[11]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFtNtAAC
|
||||
[12]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#fig:provenance
|
||||
[13]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#fig:branches
|
||||
[14]:http://www.tuhs.org/archive_sites.html
|
||||
[15]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFtNtAAD
|
||||
[16]:https://www.mckusick.com/csrg/
|
||||
[17]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFtNtAAE
|
||||
[18]:http://www.oldlinux.org/Linux.old/distributions/386BSD
|
||||
[19]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFtNtAAF
|
||||
[20]:http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/
|
||||
[21]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFtNtAAG
|
||||
[22]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#SCCS
|
||||
[23]:https://github.com/freebsd/freebsd
|
||||
[24]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFtNtAAH
|
||||
[25]:http://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/share/misc/bsd-family-tree
|
||||
[26]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFtNtAAI
|
||||
[27]:https://github.com/dspinellis/unix-history-make
|
||||
[28]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFtNtAAJ
|
||||
[29]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#fig:branches
|
||||
[30]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#fig:metrics
|
||||
[31]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#CITEMPT78
|
||||
[32]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#CITERT78
|
||||
[33]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#CITERit84
|
||||
[34]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#CITESal94
|
||||
[35]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#CITERay03
|
||||
[36]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#CITESCCS
|
||||
[37]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAB
|
||||
[38]:https://github.com/dspinellis/unix-history-repo
|
||||
[39]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAC
|
||||
[40]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAD
|
||||
[41]:http://www.tuhs.org/archive_sites.html
|
||||
[42]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAE
|
||||
[43]:https://www.mckusick.com/csrg/
|
||||
[44]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAF
|
||||
[45]:http://www.oldlinux.org/Linux.old/distributions/386BSD
|
||||
[46]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAG
|
||||
[47]:http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/
|
||||
[48]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAH
|
||||
[49]:https://github.com/freebsd/freebsd
|
||||
[50]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAI
|
||||
[51]:http://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/share/misc/bsd-family-tree
|
||||
[52]:http://www.dmst.aueb.gr/dds/pubs/conf/2015-MSR-Unix-History/html/Spi15c.html#tthFrefAAJ
|
||||
[53]:https://github.com/dspinellis/unix-history-make
|
@ -1,16 +1,15 @@
|
||||
|
||||
如何在树莓派2 B型上安装 FreeBSD
|
||||
如何在树莓派 2B 上安装 FreeBSD
|
||||
================================================================================
|
||||
|
||||
在树莓派2 B型上如何安装 FreeBSD 10 或 FreeBSD 11(current)?怎么在 Linux,OS X,FreeBSD 或类 Unix 操作系统上烧录 SD 卡?
|
||||
在树莓派 2B 上如何安装 FreeBSD 10 或 FreeBSD 11(current)?怎么在 Linux,OS X,FreeBSD 或类 Unix 操作系统上烧录 SD 卡?
|
||||
|
||||
在树莓派2 B型上安装 FreeBSD 10或 FreeBSD 11(current)很容易。使用 FreeBSD 操作系统可以打造一个非常易用的 Unix 服务器。FreeBSD-CURRENT 自2012年十一月以来一直支持树莓派,2015年三月份后也开始支持树莓派2了。在这个快速教程中我将介绍如何在 RPI2 上安装 FreeBSD 11 current arm 版。
|
||||
在树莓派 2B 上安装 FreeBSD 10 或 FreeBSD 11(current)很容易。使用 FreeBSD 操作系统可以打造一个非常易用的 Unix 服务器。FreeBSD-CURRENT 自2012年十一月以来一直支持树莓派,2015年三月份后也开始支持树莓派2了。在这个快速教程中我将介绍如何在树莓派 2B 上安装 FreeBSD 11 current arm 版。
|
||||
|
||||
### 1. 下载 FreeBSD-current 的 arm 镜像 ###
|
||||
|
||||
你可以 [访问这个页面来下载][1] 树莓派2的镜像。使用 wget 或 curl 命令来下载镜像:
|
||||
|
||||
|
||||
$ wget ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/arm/armv6/ISO-IMAGES/11.0/FreeBSD-11.0-CURRENT-arm-armv6-RPI2-20151016-r289420.img.xz
|
||||
|
||||
或
|
||||
@ -45,52 +44,51 @@
|
||||
1024+0 records out
|
||||
1073741824 bytes transferred in 661.669584 secs (1622776 bytes/sec)
|
||||
|
||||
#### 使用 Linux/FreeBSD 或者 类 Unix 系统来烧录 FreeBSD-current ####
|
||||
#### 使用 Linux/FreeBSD 或者类 Unix 系统来烧录 FreeBSD-current ####
|
||||
|
||||
语法是这样:
|
||||
|
||||
$ dd if=FreeBSD-11.0-CURRENT-arm-armv6-RPI2-20151016-r289420.img of=/dev/sdb bs=1M
|
||||
|
||||
确保使用实际 SD 卡的设备名称来替换 /dev/sdb 。
|
||||
**确保使用实际的 SD 卡的设备名称来替换 /dev/sdb**(LCTT 译注:千万注意不要写错了)。
|
||||
|
||||
### 4. 引导 FreeBSD ###
|
||||
|
||||
在树莓派2 B型上插入 SD 卡。你需要连接键盘,鼠标和显示器。我使用的是 USB 转串口线来连接显示器的:
|
||||
在树莓派 2B 上插入 SD 卡。你需要连接键盘,鼠标和显示器。我使用的是 USB 转串口线来连接显示器的:
|
||||
|
||||
![Fig.01 RPi USB based serial connection](http://s0.cyberciti.org/uploads/faq/2015/10/Raspberry-Pi-2-Model-B.pin-out.jpg)
|
||||
|
||||
|
||||
图01 RPI 基于 USB 的串行连接
|
||||
*图01 基于树莓派 USB 的串行连接*
|
||||
|
||||
在下面的例子中,我使用 screen 命令来连接我的 RPI:
|
||||
|
||||
## Linux version ##
|
||||
## Linux 上 ##
|
||||
screen /dev/tty.USB0 115200
|
||||
|
||||
## OS X version ##
|
||||
## OS X 上 ##
|
||||
screen /dev/cu.usbserial 115200
|
||||
|
||||
## Windows user use Putty.exe ##
|
||||
## Windows 请使用 Putty.exe ##
|
||||
|
||||
FreeBSD RPI 启动输出样例:
|
||||
|
||||
![Gif 01: Booting FreeBSD-current on RPi 2](http://s0.cyberciti.org/uploads/faq/2015/10/freebsd-current-rpi.gif)
|
||||
|
||||
图01: 在 RPi 2上引导 FreeBSD-current
|
||||
*图02: 在树莓派 2上引导 FreeBSD-current*
|
||||
|
||||
### 5. FreeBSD 在 RPi 2上的用户名和密码 ###
|
||||
|
||||
默认的密码是 freebsd/freebsd 和 root/root。
|
||||
|
||||
到此为止, FreeBSD-current 已经安装并运行在 RPi 2上。
|
||||
到此为止, FreeBSD-current 已经安装并运行在树莓派 2上。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.cyberciti.biz/faq/how-to-install-freebsd-on-raspberry-pi-2-model-b/
|
||||
|
||||
作者:[Vivek Gite][a]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[strugglingyouth](https://github.com/strugglingyouth)
|
||||
译者:[strugglingyouth](https://github.com/strugglingyouth)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,71 @@
|
||||
黑客利用 Wi-Fi 攻击你的七种方法
|
||||
================================================================================
|
||||
![Image courtesy Thinkstock](http://core0.staticworld.net/images/article/2015/11/intro_title-100626673-orig.jpg)
|
||||
|
||||
### 黑客利用 Wi-Fi 侵犯你隐私的七种方法 ###
|
||||
|
||||
Wi-Fi — 啊,你是如此的方便,却又如此的危险!
|
||||
|
||||
这里给大家介绍一下通过Wi-Fi连接“慷慨捐赠”你的身份信息的七种方法和反制措施。
|
||||
|
||||
![Image courtesy Thinkstock](http://core0.staticworld.net/images/article/2015/11/1_free-hotspots-100626674-orig.jpg)
|
||||
|
||||
### 利用免费热点 ###
|
||||
|
||||
它们似乎无处不在,而且它们的数量会在[接下来四年里增加三倍][1]。但是它们当中很多都是不值得信任的,从你的登录凭证、email 甚至更加敏感的账户,都能被黑客用“嗅探器(sniffers)”软件截获 — 这种软件能截获到任何你通过该连接提交的信息。防止被黑客盯上的最好办法就是使用VPN(虚拟私有网virtual private network),它加密了你所输入的信息,因此能够保护你的数据隐私。
|
||||
|
||||
![Image courtesy Thinkstock](http://core0.staticworld.net/images/article/2015/11/2_online-banking-100626675-orig.jpg)
|
||||
|
||||
### 网上银行 ###
|
||||
|
||||
你可能认为没有人需要被提醒不要使用免费 Wi-Fi 来操作网上银行, 但网络安全厂商卡巴斯基实验室表示**[全球超过100家银行因为网络黑客而损失9亿美元][2]**,由此可见还是有很多人因此受害。如果你确信一家咖啡店的免费 Wi-Fi 是正规的,想要连接它,那么你应该向服务员确认网络名称。[其他人在店里用路由器设置一个开放的无线连接][3],并将它的网络名称设置成店名是一件相当简单的事。
|
||||
|
||||
![Image courtesy Thinkstock](http://core0.staticworld.net/images/article/2015/11/3_keeping-wifi-on-100626676-orig.jpg)
|
||||
|
||||
### 始终开着 Wi-Fi 开关 ###
|
||||
|
||||
如果你手机的 Wi-Fi 开关一直开着的,你会自动被连接到一个不安全的网络中去,你甚至都没有意识到。你可以利用你手机中[基于位置的 Wi-Fi 功能][4],如果有这种功能的话,那它会在你离开你所保存的网络范围后自动关闭你的 Wi-Fi 开关并在你回去之后再次开启。
|
||||
|
||||
![Image courtesy Thinkstock](http://core0.staticworld.net/images/article/2015/11/4_not-using-firewall-100626677-orig.jpg)
|
||||
|
||||
### 不使用防火墙 ###
|
||||
|
||||
防火墙是你的第一道抵御恶意入侵的防线,它能有效地让你的电脑网络保持通畅并阻挡黑客和恶意软件。你应该时刻开启它除非你的杀毒软件有它自己的防火墙。
|
||||
|
||||
![Image courtesy Thinkstock](http://core0.staticworld.net/images/article/2015/11/5_browsing-unencrypted-sites-100626678-orig.jpg)
|
||||
|
||||
### 浏览非加密网页 ###
|
||||
|
||||
说起来很难过,**[世界上排名前100万个网站中55%是不加密的][5]**,一个未加密的网站会让一切传输数据暴露在黑客的眼中。如果一个网页是安全的,你的浏览器则会有标明(比如说火狐浏览器是一把灰色的挂锁,Chrome 浏览器则是个绿锁图标)。但是即使是安全的网站不能让你免于被劫持的风险,他们能通过公共网络从你访问过的网站上窃取 cookies,无论是不是正规网站。
|
||||
|
||||
![Image courtesy Thinkstock](http://core0.staticworld.net/images/article/2015/11/6_updating-security-software-100626679-orig.jpg)
|
||||
|
||||
### 不更新你的安全防护软件 ###
|
||||
|
||||
如果你想要确保你自己的网络是受保护的,就更新路由器固件。你要做的就是进入你的路由器管理页面去检查,通常你能在厂商的官方网页上下载到最新的固件版本。
|
||||
|
||||
![Image courtesy Thinkstock](http://core0.staticworld.net/images/article/2015/11/7_securing-home-wifi-100626680-orig.jpg)
|
||||
|
||||
### 不保护你的家用 Wi-Fi ###
|
||||
|
||||
不用说,设置一个复杂的密码和更改无线连接的默认名都是非常重要的。你还可以过滤你的 MAC 地址来让你的路由器只识别那些确认过的设备。
|
||||
|
||||
本文作者 **Josh Althuser** 是一个开源支持者、网络架构师和科技企业家。在过去12年里,他花了很多时间去倡导使用开源软件来管理团队和项目,同时为网络应用程序提供企业级咨询并帮助它们把产品推向市场。你可以通过[他的推特][6]联系他。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.networkworld.com/article/3003170/mobile-security/7-ways-hackers-can-use-wi-fi-against-you.html
|
||||
|
||||
作者:[Josh Althuser][a]
|
||||
译者:[ZTinoZ](https://github.com/ZTinoZ)
|
||||
校对:[Caroline](https://github.com/carolinewuyan)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://twitter.com/JoshAlthuser
|
||||
[1]:http://www.pcworld.com/article/243464/number_of_wifi_hotspots_to_quadruple_by_2015_says_study.html
|
||||
[2]:http://www.nytimes.com/2015/02/15/world/bank-hackers-steal-millions-via-malware.html?hp&action=click&pgtype=Homepage&module=first-column-region%C2%AEion=top-news&WT.nav=top-news&_r=3
|
||||
[3]:http://news.yahoo.com/blogs/upgrade-your-life/banking-online-not-hacked-182159934.html
|
||||
[4]:http://pocketnow.com/2014/10/15/should-you-leave-your-smartphones-wifi-on-or-turn-it-off
|
||||
[5]:http://www.cnet.com/news/chrome-becoming-tool-in-googles-push-for-encrypted-web/
|
||||
[6]:https://twitter.com/JoshAlthuser
|
@ -1,8 +1,8 @@
|
||||
Linux 中如何从命令行访问 Dropbox
|
||||
Linux 中如何通过命令行访问 Dropbox
|
||||
================================================================================
|
||||
在当今这个多设备的环境下,云存储无处不在。无论身处何方,人们都想通过多种设备来从云存储中获取所需的内容。由于优雅的 UI 和完美的跨平台兼容性,Dropbox 已成为最为广泛使用的云存储服务。 Dropbox 的流行已引发了一系列官方或非官方 Dropbox 客户端的出现,它们支持不同的操作系统平台。
|
||||
在当今这个多设备的环境下,云存储无处不在。无论身处何方,人们都想通过多种设备来从云存储中获取所需的内容。由于拥有漂亮的 UI 和完美的跨平台兼容性,Dropbox 已成为最为广泛使用的云存储服务。 Dropbox 的流行已引发了一系列官方或非官方 Dropbox 客户端的出现,它们支持不同的操作系统平台。
|
||||
|
||||
当然 Linux 平台下也有着自己的 Dropbox 客户端: 既有命令行的,也有图形界面。[Dropbox Uploader][1] 是一个简单易用的 Dropbox 命令行客户端,它是用 BASH 脚本语言所编写的。在这篇教程中,我将描述 **在 Linux 中如何使用 Dropbox Uploader 通过命令行来访问 Dropbox**。
|
||||
当然 Linux 平台下也有着自己的 Dropbox 客户端: 既有命令行的,也有图形界面客户端。[Dropbox Uploader][1] 是一个简单易用的 Dropbox 命令行客户端,它是用 Bash 脚本语言所编写的(LCTT 译注:对,你没看错, 就是 Bash)。在这篇教程中,我将描述 **在 Linux 中如何使用 Dropbox Uploader 通过命令行来访问 Dropbox**。
|
||||
|
||||
### Linux 中安装和配置 Dropbox Uploader ###
|
||||
|
||||
@ -13,7 +13,7 @@ Linux 中如何从命令行访问 Dropbox
|
||||
|
||||
请确保你已经在系统中安装了 `curl`,因为 Dropbox Uploader 通过 curl 来运行 Dropbox 的 API。
|
||||
|
||||
要配置 Dropbox Uploader,只需运行 dropbox_uploader.sh 即可。当你第一次运行这个脚本时,它将询问你,以使得它可以访问你的 Dropbox 账户。
|
||||
要配置 Dropbox Uploader,只需运行 dropbox_uploader.sh 即可。当你第一次运行这个脚本时,它将请求得到授权以使得脚本可以访问你的 Dropbox 账户。
|
||||
|
||||
$ ./dropbox_uploader.sh
|
||||
|
||||
@ -88,7 +88,7 @@ via: http://xmodulo.com/access-dropbox-command-line-linux.html
|
||||
|
||||
作者:[Dan Nanni][a]
|
||||
译者:[FSSlc](https://github.com/FSSlc)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[Caroline](https://github.com/carolinewuyan)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -1,19 +1,17 @@
|
||||
如何在 Ubuntu 15.04 / CentOS 7 上安装 Android Studio
|
||||
================================================================================
|
||||
随着最近几年智能手机的进步,安卓成为了最大的手机平台之一,也有很多免费的用于开发安卓应用的工具。Android Studio 是基于 [IntelliJ IDEA][1] 用于开发安卓应用的集成开发环境。它是 Google 2014 年发布的免费开源软件,继 Eclipse 之后成为主要的 IDE。
|
||||
随着最近几年智能手机的进步,安卓成为了最大的手机平台之一,在开发安卓应用中所用到的所有工具也都可以免费得到。Android Studio 是基于 [IntelliJ IDEA][1] 用于开发安卓应用的集成开发环境(IDE)。它是 Google 2014 年发布的免费开源软件,继 Eclipse 之后成为主要的 IDE。
|
||||
|
||||
在这篇文章,我们一起来学习如何在 Ubuntu 15.04 和 CentOS 7 上安装 Android Studio。
|
||||
|
||||
### 在 Ubuntu 15.04 上安装 ###
|
||||
|
||||
我们可以用两种方式安装 Android Studio。第一种是配置必须的库然后再安装它;另一种是从 Android 官方网站下载然后再本地编译安装。在下面的例子中,我们会使用命令行设置库并安装它。在继续下一步之前,我们需要确保我们已经安装了 JDK 1.6 或者更新版本。
|
||||
我们可以用两种方式安装 Android Studio。第一种是配置所需的库然后再安装它;另一种是从 Android 官方网站下载然后在本地编译安装。在下面的例子中,我们会使用命令行设置库并安装它。在继续下一步之前,我们需要确保我们已经安装了 JDK 1.6 或者更新版本。
|
||||
|
||||
这里,我打算安装 JDK 1.8。
|
||||
|
||||
$ sudo add-apt-repository ppa:webupd8team/java
|
||||
|
||||
$ sudo apt-get update
|
||||
|
||||
$ sudo apt-get install oracle-java8-installer oracle-java8-set-default
|
||||
|
||||
验证 java 是否安装成功:
|
||||
@ -27,12 +25,11 @@
|
||||
![Android-Studio-repo](http://blog.linoxide.com/wp-content/uploads/2015/11/Android-studio-repo.png)
|
||||
|
||||
$ sudo apt-get update
|
||||
|
||||
$ sudo apt-get install android-studio
|
||||
|
||||
上面的安装命令会在 /opt 目录下面安装 Android Studio。
|
||||
|
||||
现在,运行下面的命令启动安装窗口:
|
||||
现在,运行下面的命令启动安装向导:
|
||||
|
||||
$ /opt/android-studio/bin/studio.sh
|
||||
|
||||
@ -48,7 +45,7 @@
|
||||
|
||||
![下载组件](http://blog.linoxide.com/wp-content/uploads/2015/11/Download.png)
|
||||
|
||||
这一步之后就完成了 Android Studio 的安装。当你重启 Android Studio 时,你会看到下面的欢迎界面,从这里你可以开始用 Android Studio 工作了。
|
||||
这一步完成之后就结束了 Android Studio 的安装。当你重启 Android Studio 时,你会看到下面的欢迎界面,从这里你可以开始用 Android Studio 工作了。
|
||||
|
||||
![欢迎界面](http://blog.linoxide.com/wp-content/uploads/2015/11/Welcome-screen.png)
|
||||
|
||||
@ -85,21 +82,14 @@
|
||||
|
||||
如果你安装 Android Studio 的时候看到任何类似 “unable-to-run-mksdcard-sdk-tool:” 的错误信息,你可能要在 CentOS 7 64 位系统中安装以下软件包:
|
||||
|
||||
glibc.i686
|
||||
|
||||
glibc-devel.i686
|
||||
|
||||
libstdc++.i686
|
||||
|
||||
zlib-devel.i686
|
||||
|
||||
ncurses-devel.i686
|
||||
|
||||
libX11-devel.i686
|
||||
|
||||
libXrender.i686
|
||||
|
||||
libXrandr.i686
|
||||
- glibc.i686
|
||||
- glibc-devel.i686
|
||||
- libstdc++.i686
|
||||
- zlib-devel.i686
|
||||
- ncurses-devel.i686
|
||||
- libX11-devel.i686
|
||||
- libXrender.i686
|
||||
- libXrandr.i686
|
||||
|
||||
通过从 [Android 网站][3] 下载 IDE 文件然后解压安装 studio 也是一样的。
|
||||
|
||||
@ -121,7 +111,7 @@
|
||||
|
||||
### 总结 ###
|
||||
|
||||
虽然发布不到一年,但是 Android Studio 已经替代 Eclipse 成为了安装开发最主要的 IDE。它是唯一一个能支持之后 Google 提供的 Android SDKs 和其它 Android 特性的官方 IDE 工具。那么,你还在等什么呢?赶快安装 Android Studio 然后体验开发安装应用的乐趣吧。
|
||||
虽然发布不到一年,但是 Android Studio 已经替代 Eclipse 成为了 Android 的开发最主要的 IDE。它是唯一能支持 Google 之后将要提供的 Android SDK 和其它 Android 特性的官方 IDE 工具。那么,你还在等什么呢?赶快安装 Android Studio 来体验开发 Android 应用的乐趣吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -129,11 +119,11 @@ via: http://linoxide.com/tools/install-android-studio-ubuntu-15-04-centos-7/
|
||||
|
||||
作者:[B N Poornima][a]
|
||||
译者:[ictlyh](http://mutouxiaogui.cn/blog/)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[Caroline](https://github.com/carolinewuyan)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://linoxide.com/author/bnpoornima/
|
||||
[1]:https://www.jetbrains.com/idea/
|
||||
[2]:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
|
||||
[3]:http://developer.android.com/sdk/index.html
|
||||
[3]:http://developer.android.com/sdk/index.html
|
@ -0,0 +1,64 @@
|
||||
eSpeak: Linux 文本转语音工具
|
||||
================================================================================
|
||||
![Text to speech tool in Linux](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/11/Text-to-speech-Linux.jpg)
|
||||
|
||||
[eSpeak][1]是一款 Linux 命令行工具,能把文本转换成语音。它是一款简洁的语音合成器,用C语言编写而成,它支持英语和其它多种语言。
|
||||
|
||||
eSpeak 从标准输入或者输入文件中读取文本。虽然语音输出与真人声音相去甚远,但是,在你项目需要的时候,eSpeak 仍不失为一个简便快捷的工具。
|
||||
|
||||
eSpeak 部分主要特性如下:
|
||||
|
||||
- 提供给 Linux 和 Windows 的命令行工具
|
||||
- 从文件或者标准输入中把文本读出来
|
||||
- 提供给其它程序使用的共享库版本
|
||||
- 为 Windows 提供 SAPI5 版本,所以它能用于 screen-readers 或者其它支持 Windows SAPI5 接口的程序
|
||||
- 可移植到其它平台,包括安卓,OSX等
|
||||
- 提供多种声音特性选择
|
||||
- 语音输出可保存为 [.WAV][2] 格式的文件
|
||||
- 配合 HTML 部分可支持 SSML(语音合成标记语言,[Speech Synthesis Markup Language][3])
|
||||
- 体积小巧,整个程序连同语言支持等占用小于2MB
|
||||
- 可以实现文本到音素编码(phoneme code)的转化,因此可以作为其它语音合成引擎的前端工具
|
||||
- 开发工具可用于生产和调整音素数据
|
||||
|
||||
### 安装 eSpeak ###
|
||||
|
||||
基于 Ubuntu 的系统中,在终端运行以下命令安装 eSpeak:
|
||||
|
||||
sudo apt-get install espeak
|
||||
|
||||
eSpeak 是一个古老的工具,我推测它应该能在其它众多 Linux 发行版中运行,比如 Arch,Fedora。使用 dnf,pacman 等命令就能轻松安装。
|
||||
|
||||
eSpeak 用法如下:输入 espeak 运行程序。输入字符按 enter 转换为语音输出(LCTT 译注:补充)。使用 Ctrl+C 来关闭运行中的程序。
|
||||
|
||||
![eSpeak command line](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/11/eSpeak-example.png)
|
||||
|
||||
还有一些其他的选项可用,可以通过程序帮助进行查看。
|
||||
|
||||
### GUI 版本:Gespeaker ###
|
||||
|
||||
如果你更倾向于使用 GUI 版本,可以安装 Gespeaker,它为 eSpeak 提供了 GTK 界面。
|
||||
|
||||
使用以下命令来安装 Gespeaker:
|
||||
|
||||
sudo apt-get install gespeaker
|
||||
|
||||
操作界面简明易用,你完全可以自行探索。
|
||||
|
||||
![eSpeak GUI tool for text to speech in Ubuntu](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/11/eSpeak-GUI.png)
|
||||
|
||||
虽然这些工具在大多数计算任务下用不到,但是当你的项目需要把文本转换成语音时,使用 espeak 还是挺方便的。是否使用 espeak 这款语音合成器,选择权就交给你们啦。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://itsfoss.com/espeak-text-speech-linux/
|
||||
|
||||
作者:[Abhishek][a]
|
||||
译者:[soooogreen](https://github.com/soooogreen)
|
||||
校对:[Caroline](https://github.com/carolinewuyan)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://itsfoss.com/author/abhishek/
|
||||
[1]:http://espeak.sourceforge.net/
|
||||
[2]:http://en.wikipedia.org/wiki/WAV
|
||||
[3]:http://en.wikipedia.org/wiki/Speech_Synthesis_Markup_Language
|
@ -0,0 +1,73 @@
|
||||
如何在 Ubuntu 中安装最新的 Arduino IDE 1.6.6
|
||||
================================================================================
|
||||
![Install latest Arduino in Ubuntu](http://ubuntuhandbook.org/wp-content/uploads/2015/11/arduino-icon.png)
|
||||
|
||||
> 本篇教程会教你如何在当前的 Ubuntu 发行版中安装最新的 Arduino IDE 1.6.6。
|
||||
|
||||
开源的 Arduino IDE 发布了1.6.6,并带来了很多的改变。新的发布已经切换到 Java 8,它与 IDE 绑定并且用于编译所需。具体见 [发布说明][1]。
|
||||
|
||||
![Arduino 1.6.6 in Ubuntu 15.10](http://ubuntuhandbook.org/wp-content/uploads/2015/11/arduino-ubuntu.jpg)
|
||||
|
||||
对于那些不想使用软件中心的 1.0.5 旧版本的人而言,你可以使用下面的步骤在所有的 Ubuntu 发行版中安装 Arduino。
|
||||
|
||||
> **请用正确版本号替换软件包的版本号**
|
||||
|
||||
**1、** 从下面的官方链接下载最新的包 **Linux 32-bit 或者 Linux 64-bit**。
|
||||
|
||||
- [https://www.arduino.cc/en/Main/Software][2]
|
||||
|
||||
如果不知道你系统的类型?进入系统设置->详细->概览。
|
||||
|
||||
**2、** 从Unity Dash、App Launcher 或者使用 Ctrl+Alt+T 打开终端。打开后,一个个运行下面的命令:
|
||||
|
||||
进入下载文件夹:
|
||||
|
||||
cd ~/Downloads
|
||||
|
||||
![navigate-downloads](http://ubuntuhandbook.org/wp-content/uploads/2015/11/navigate-downloads.jpg)
|
||||
|
||||
使用 tar 命令解压:
|
||||
|
||||
tar -xvf arduino-1.6.6-*.tar.xz
|
||||
|
||||
![extract-archive](http://ubuntuhandbook.org/wp-content/uploads/2015/11/extract-archive.jpg)
|
||||
|
||||
将解压后的文件移动到**/opt/**下:
|
||||
|
||||
sudo mv arduino-1.6.6 /opt
|
||||
|
||||
![move-opt](http://ubuntuhandbook.org/wp-content/uploads/2015/11/move-opt.jpg)
|
||||
|
||||
**3、** 现在 IDE 已经与最新的 Java 绑定使用了。但是最好为程序设置一个桌面图标/启动方式:
|
||||
|
||||
进入安装目录:
|
||||
|
||||
cd /opt/arduino-1.6.6/
|
||||
|
||||
在这个目录给 install.sh 可执行权限
|
||||
|
||||
chmod +x install.sh
|
||||
|
||||
最后运行脚本同时安装桌面快捷方式和启动图标:
|
||||
|
||||
./install.sh
|
||||
|
||||
下图中我用“&&”同时运行这三个命令:
|
||||
|
||||
![install-desktop-icon](http://ubuntuhandbook.org/wp-content/uploads/2015/11/install-desktop-icon.jpg)
|
||||
|
||||
最后从 Unity Dash、程序启动器或者桌面快捷方式运行 Arduino IDE。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://ubuntuhandbook.org/index.php/2015/11/install-arduino-ide-1-6-6-ubuntu/
|
||||
|
||||
作者:[Ji m][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://ubuntuhandbook.org/index.php/about/
|
||||
[1]:https://www.arduino.cc/en/Main/ReleaseNotes
|
||||
[2]:https://www.arduino.cc/en/Main/Software
|
@ -0,0 +1,41 @@
|
||||
可以在 Linux 下试试苹果编程语言 Swift
|
||||
================================================================================
|
||||
![](http://itsfoss.com/wp-content/uploads/2015/12/Apple-Swift-Open-Source.jpg)
|
||||
|
||||
是的,你知道的,苹果编程语言 Swift 已经开源了。其实我们并不应该感到意外,因为[在六个月以前苹果就已经宣布了这个消息][1]。
|
||||
|
||||
苹果宣布推出开源 Swift 社区。一个专用于开源 Swift 社区的[新网站][2]已经就位,网站首页显示以下信息:
|
||||
|
||||
> 我们对 Swift 开源感到兴奋。在苹果推出了编程语言 Swift 之后,它很快成为历史上增长最快的语言之一。Swift 可以编写出难以置信的又快又安全的软件。目前,Swift 是开源的,你可以将这个最好的通用编程语言用在各种地方。
|
||||
|
||||
[swift.org][2] 这个网站将会作为一站式网站,它会提供各种资料的下载,包括各种平台,社区指南,最新消息,入门教程,为开源 Swift 做贡献的说明,文件和一些其他的指南。 如果你正期待着学习 Swift,那么必须收藏这个网站。
|
||||
|
||||
在苹果的这次宣布中,一个用于方便分享和构建代码的包管理器已经可用了。
|
||||
|
||||
对于所有的 Linux 使用者来说,最重要的是,源代码已经可以从 [Github][3]获得了.你可以从以下链接 Checkout 它:
|
||||
|
||||
- [苹果 Swift 源代码][3]
|
||||
|
||||
除此之外,对于 ubuntu 14.04 和 15.10 版本还有预编译的二进制文件。
|
||||
|
||||
- [ubuntu 系统的 Swift 二进制文件][4]
|
||||
|
||||
不要急着在产品环境中使用它们,因为这些都是开发分支而不适合于产品环境。因此现在应避免使用在产品环境中,一旦发布了 Linux 下 Swift 的稳定版本,我希望 ubuntu 会把它包含在 [umake][5]中,和 [Visual Studio Code][6] 放一起。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://itsfoss.com/swift-open-source-linux/
|
||||
|
||||
作者:[Abhishek][a]
|
||||
译者:[Flowsnow](https://github.com/Flowsnow)
|
||||
校对:[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/apple-open-sources-swift-programming-language-linux/
|
||||
[2]:https://swift.org/
|
||||
[3]:https://github.com/apple
|
||||
[4]:https://swift.org/download/#latest-development-snapshots
|
||||
[5]:https://wiki.ubuntu.com/ubuntu-make
|
||||
[6]:http://itsfoss.com/install-visual-studio-code-ubuntu/
|
@ -1,14 +1,14 @@
|
||||
自定义Ubuntu面板时间日期显示格式
|
||||
如何深度定制 Ubuntu 面板的时间日期显示格式
|
||||
================================================================================
|
||||
![时间日期格式](http://ubuntuhandbook.org/wp-content/uploads/2015/08/ubuntu_tips1.png)
|
||||
|
||||
尽管设置里已经有一些选项可以用了,这个快速教程会向你展示如何更加深入地自定义 Ubuntu 面板上的时间和日期指示器。
|
||||
尽管设置页面里已经有一些选项可以用了,这个快速教程会向你展示如何更加深入地自定义 Ubuntu 面板上的时间和日期指示器。
|
||||
|
||||
![自定义世间日期](http://ubuntuhandbook.org/wp-content/uploads/2015/12/custom-timedate.jpg)
|
||||
|
||||
在开始之前,在 Ubuntu 软件中心搜索并安装 **dconf Editor**。然后启动该软件并按以下步骤执行:
|
||||
|
||||
**1.** 当 dconf Editor 启动后,导航至 **com -> canonical -> indicator -> datetime**。将 **time-format** 的值设置为 **custom**。
|
||||
**1、** 当 dconf Editor 启动后,导航至 **com -> canonical -> indicator -> datetime**。将 **time-format** 的值设置为 **custom**。
|
||||
|
||||
![自定义时间格式](http://ubuntuhandbook.org/wp-content/uploads/2015/12/time-format.jpg)
|
||||
|
||||
@ -16,11 +16,11 @@
|
||||
|
||||
gsettings set com.canonical.indicator.datetime time-format 'custom'
|
||||
|
||||
**2.** 现在你可以通过编辑 **custom-time-format** 的值来自定义时间和日期的格式。
|
||||
**2、** 现在你可以通过编辑 **custom-time-format** 的值来自定义时间和日期的格式。
|
||||
|
||||
![自定义-时间格式](http://ubuntuhandbook.org/wp-content/uploads/2015/12/customize-timeformat.jpg)
|
||||
|
||||
你也可以通过命令完成:(译注:将 FORMAT_VALUE_HERE 替换为所需要的格式值)
|
||||
你也可以通过命令完成:(LCTT 译注:将 FORMAT_VALUE_HERE 替换为所需要的格式值)
|
||||
|
||||
gsettings set com.canonical.indicator.datetime custom-time-format 'FORMAT_VALUE_HERE'
|
||||
|
||||
@ -30,29 +30,28 @@
|
||||
- %A = 星期名完整拼写
|
||||
- %b = 月份名缩写
|
||||
- %B = 月份名完整拼写
|
||||
- %d = 按月计日期
|
||||
- %d = 每月的日期
|
||||
- %l = 小时 ( 1..12), %I = 小时 (01..12)
|
||||
- %k = 小时 ( 1..23), %H = 小时 (01..23)
|
||||
- %M = 分钟 (00..59)
|
||||
- %p = 午别,AM 或 PM, %P = am 或 pm.
|
||||
- %S = 秒 (00..59)
|
||||
- 打开终端键入命令 `man date` 并执行以了解更多细节。
|
||||
|
||||
一些例子:
|
||||
可以打开终端键入命令 `man date` 并执行以了解更多细节。
|
||||
|
||||
自定义时间日期显示格式值:
|
||||
一些自定义时间日期显示格式值的例子:
|
||||
|
||||
**%a %H:%M %m/%d/%Y**
|
||||
|
||||
![exam-1](http://ubuntuhandbook.org/wp-content/uploads/2015/12/exam-1.jpg)
|
||||
![%a %H:%M %m/%d/%Y](http://ubuntuhandbook.org/wp-content/uploads/2015/12/exam-1.jpg)
|
||||
|
||||
**%a %r %b %d or %a %I:%M:%S %p %b %d**
|
||||
|
||||
![exam-2](http://ubuntuhandbook.org/wp-content/uploads/2015/12/exam-2.jpg)
|
||||
![%a %r %b %d or %a %I:%M:%S %p %b %d](http://ubuntuhandbook.org/wp-content/uploads/2015/12/exam-2.jpg)
|
||||
|
||||
**%a %-d %b %l:%M %P %z**
|
||||
|
||||
![exam-3](http://ubuntuhandbook.org/wp-content/uploads/2015/12/exam-3.jpg)
|
||||
![%a %-d %b %l:%M %P %z](http://ubuntuhandbook.org/wp-content/uploads/2015/12/exam-3.jpg)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -60,7 +59,7 @@ via: http://ubuntuhandbook.org/index.php/2015/12/time-date-format-ubuntu-panel/
|
||||
|
||||
作者:[Ji m][a]
|
||||
译者:[alim0x](https://github.com/alim0x)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,100 @@
|
||||
如何在 CentOS 上启用 软件集 Software Collections(SCL)
|
||||
================================================================================
|
||||
|
||||
红帽企业版 linux(RHEL)和它的社区版分支——CentOS,提供10年的生命周期,这意味着 RHEL/CentOS 的每个版本会提供长达10年的安全更新。虽然这么长的生命周期为企业用户提供了迫切需要的系统兼容性和可靠性,但也存在一个缺点:随着底层的 RHEL/CentOS 版本接近生命周期的结束,核心应用和运行时环境变得陈旧过时。例如 CentOS 6.5,它的生命周期结束时间是2020年11月30日,其所携带的 Python 2.6.6和 MySQL 5.1.73,以今天的标准来看已经非常古老了。
|
||||
|
||||
另一方面,在 RHEL/CentOS 上试图手动升级开发工具链和运行时环境存在使系统崩溃的潜在可能,除非所有依赖都被正确解决。通常情况下,手动升级都是不推荐的,除非你知道你在干什么。
|
||||
|
||||
[软件集(Software Collections)][1](SCL)源出现了,以帮助解决 RHEL/CentOS 下的这种问题。SCL 的创建就是为了给 RHEL/CentOS 用户提供一种以方便、安全地安装和使用应用程序和运行时环境的多个(而且可能是更新的)版本的方式,同时避免把系统搞乱。与之相对的是第三方源,它们可能会在已安装的包之间引起冲突。
|
||||
|
||||
最新的 SCL 提供了:
|
||||
|
||||
- Python 3.3 和 2.7
|
||||
- PHP 5.4
|
||||
- Node.js 0.10
|
||||
- Ruby 1.9.3
|
||||
- Perl 5.16.3
|
||||
- MariaDB 和 MySQL 5.5
|
||||
- Apache httpd 2.4.6
|
||||
|
||||
在这篇教程的剩余部分,我会展示一下如何配置 SCL 源,以及如何安装和启用 SCL 中的包。
|
||||
|
||||
### 配置 SCL 源
|
||||
|
||||
SCL 可用于 CentOS 6.5 及更新的版本。要配置 SCL 源,只需执行:
|
||||
|
||||
$ sudo yum install centos-release-SCL
|
||||
|
||||
要启用和运行 SCL 中的应用,你还需要安装下列包:
|
||||
|
||||
$ sudo yum install scl-utils-build
|
||||
|
||||
执行下面的命令可以查看 SCL 中可用包的完整列表:
|
||||
|
||||
$ yum --disablerepo="*" --enablerepo="scl" list available
|
||||
|
||||
![](https://c2.staticflickr.com/6/5730/23304424250_f5c8a09584_c.jpg)
|
||||
|
||||
### 从 SCL 中安装和启用包
|
||||
|
||||
既然你已配置好了 SCL,你可以继续并从 SCL 中安装包了。
|
||||
|
||||
你可以搜索 SCL 中的包:
|
||||
|
||||
$ yum --disablerepo="*" --enablerepo="scl" search <keyword>
|
||||
|
||||
我们假设你要安装 Python 3.3。
|
||||
|
||||
继续,就像通常安装包那样使用 yum 安装:
|
||||
|
||||
$ sudo yum install python33
|
||||
|
||||
任何时候你都可以查看从 SCL 中安装的包的列表,只需执行:
|
||||
|
||||
$ scl --list
|
||||
|
||||
python33
|
||||
|
||||
SCL 的优点之一是安装其中的包不会覆盖任何系统文件,并且保证不会引起与系统中其它库和应用的冲突。
|
||||
|
||||
例如,如果在安装 python33 包后检查默认的 python 版本,你会发现默认的版本并没有改变:
|
||||
|
||||
$ python --version
|
||||
|
||||
Python 2.6.6
|
||||
|
||||
如果想使用一个已经安装的 SCL 包,你需要在每个命令中使用 `scl` 命令显式启用它(LCTT 译注:即想在哪条命令中使用 SCL 中的包,就得通过`scl`命令执行该命令)
|
||||
|
||||
$ scl enable <scl-package-name> <command>
|
||||
|
||||
例如,要针对`python`命令启用 python33 包:
|
||||
|
||||
$ scl enable python33 'python --version'
|
||||
|
||||
Python 3.3.2
|
||||
|
||||
如果想在启用 python33 包时执行多条命令,你可以像下面那样创建一个启用 SCL 的 bash 会话:
|
||||
|
||||
$ scl enable python33 bash
|
||||
|
||||
在这个 bash 会话中,默认的 python 会被切换为3.3版本,直到你输入`exit`,退出会话。
|
||||
|
||||
![](https://c2.staticflickr.com/6/5642/23491549632_1d08e163cc_c.jpg)
|
||||
|
||||
简而言之,SCL 有几分像 Python 的虚拟环境,但更通用,因为你可以为远比 Python 更多的应用启用/禁用 SCL 会话。
|
||||
|
||||
更详细的 SCL 指南,参考官方的[快速入门指南][2]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://xmodulo.com/enable-software-collections-centos.html
|
||||
|
||||
作者:[Dan Nanni][a]
|
||||
译者:[bianjp](https://github.com/bianjp)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://xmodulo.com/author/nanni
|
||||
[1]:https://www.softwarecollections.org/
|
||||
[2]:https://www.softwarecollections.org/docs/
|
@ -1,16 +1,17 @@
|
||||
Linux/Unix桌面趣事:让桌面下雪
|
||||
Linux/Unix 桌面趣事:让桌面下雪
|
||||
================================================================================
|
||||
在这个节日里感到孤独么?试一下Xsnow吧。它是一个可以在Unix/Linux桌面下下雪的app。圣诞老人和他的驯鹿会在屏幕中奔跑,伴随着雪片让你感受到节日的感觉。
|
||||
|
||||
我第一次是再13、4年前安装的它。它最初是在1984年Macintosh系统中创造的。你可以用下面的方法来安装:
|
||||
在这个节日里感到孤独么?试一下 Xsnow 吧。它是一个可以在 Unix/Linux 桌面下下雪的应用。圣诞老人和他的驯鹿会在屏幕中奔跑,伴随着雪片让你感受到节日的感觉。
|
||||
|
||||
我第一次安装它还是在 13、4 年前。它最初是在 1984 年 Macintosh 系统中创造的。你可以用下面的方法来安装:
|
||||
|
||||
### 安装 xsnow ###
|
||||
|
||||
Debian/Ubuntu/Mint用户用下面的命令:
|
||||
Debian/Ubuntu/Mint 用户用下面的命令:
|
||||
|
||||
$ sudo apt-get install xsnow
|
||||
|
||||
Freebsd用户输入下面的命令:
|
||||
Freebsd 用户输入下面的命令:
|
||||
|
||||
# cd /usr/ports/x11/xsnow/
|
||||
# make install clean
|
||||
@ -21,13 +22,13 @@ Freebsd用户输入下面的命令:
|
||||
|
||||
#### 其他发行版的方法 ####
|
||||
|
||||
1. Fedora/RHEL/CentOS在[rpmfusion][1]仓库中找找。
|
||||
2. Gentoo用户试下Gentoo portage也就是[emerge -p xsnow][2]
|
||||
3. Opensuse用户使用yast搜索xsnow
|
||||
1. Fedora/RHEL/CentOS 在 [rpmfusion][1] 仓库中找找。
|
||||
2. Gentoo 用户试下 Gentoo portage,也就是[emerge -p xsnow][2]
|
||||
3. Opensuse 用户使用 yast 搜索 xsnow
|
||||
|
||||
### 我该如何使用xsnow? ###
|
||||
### 我该如何使用 xsnow? ###
|
||||
|
||||
打开终端(程序 > 附件 > 终端),输入下面的额命令启动xsnow:
|
||||
打开终端(程序 > 附件 > 终端),输入下面的额命令启动 xsnow:
|
||||
|
||||
$ xsnow
|
||||
|
||||
@ -35,13 +36,13 @@ Freebsd用户输入下面的命令:
|
||||
|
||||
![Fig.01: Snow for your Linux and Unix desktop systems](http://files.cyberciti.biz/uploads/tips/2011/12/application-to-bring-snow-to-desktop_small.png)
|
||||
|
||||
图01: 在Linux和Unix桌面中显示雪花
|
||||
*图01: 在 Linux 和 Unix 桌面中显示雪花*
|
||||
|
||||
你可以设置背景位蓝色,并让它下白雪,输入:
|
||||
你可以设置背景为蓝色,并让它下白雪,输入:
|
||||
|
||||
$ xsnow -bg blue -sc snow
|
||||
|
||||
设置最大的雪片数量,并让它尽可能快地运行,输入:
|
||||
设置最大的雪片数量,并让它尽可能快地掉下,输入:
|
||||
|
||||
$ xsnow -snowflakes 10000 -delay 0
|
||||
|
||||
@ -49,14 +50,14 @@ Freebsd用户输入下面的命令:
|
||||
|
||||
$ xsnow -notrees -nosanta
|
||||
|
||||
关于xsnow更多的信息和选项,在命令行下输入man xsnow查看手册:
|
||||
关于 xsnow 更多的信息和选项,在命令行下输入 man xsnow 查看手册:
|
||||
|
||||
$ man xsnow
|
||||
|
||||
建议阅读
|
||||
|
||||
- 官网[下载 Xsnow][1]
|
||||
- 注意[MS-Windows][2]和[Mac OS X version][3]有一次性的共享软件费用。
|
||||
- 注意 [MS-Windows][2] 和 [Mac OS X][3] 版本有一次性的共享软件费用。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -64,7 +65,7 @@ via: http://www.cyberciti.biz/tips/linux-unix-xsnow.html
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[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/) 荣誉推出
|
||||
|
@ -1,30 +1,31 @@
|
||||
Linux/Unix 桌面趣事:蒸汽火车
|
||||
================================================================================
|
||||
一个[最常见的错误][1]是把ls输入成了sl。我已经设置了[一个alias][2],也就是alias sl=ls。但是你也许就错过了带汽笛的蒸汽小火车了。
|
||||
一个你[经常犯的错误][1]是把 ls 输入成了 sl。我已经设置了[一个别名][2],也就是 `alias sl=ls`。但是这样你也许就错过了这辆带汽笛的蒸汽小火车了。
|
||||
|
||||
sl是一个玩笑软件或是一个Unix游戏。它会在你错误地把“ls”输入成“sl”(Steam Locomotive)后出现一辆蒸汽火车穿过你的屏幕。
|
||||
sl 是一个搞笑软件或,也是一个 Unix 游戏。它会在你错误地把“ls”输入成“sl”(Steam Locomotive)后出现一辆蒸汽火车穿过你的屏幕。
|
||||
|
||||
### 安装 sl ###
|
||||
|
||||
在Debian/Ubuntu下输入下面的命令:
|
||||
在 Debian/Ubuntu 下输入下面的命令:
|
||||
|
||||
# apt-get install sl
|
||||
|
||||
它同样也在Freebsd和其他类Unix的操作系统上存在。下面把ls输错成sl:
|
||||
它同样也在 Freebsd 和其他类Unix的操作系统上存在。
|
||||
|
||||
下面,让我们把 ls 输错成 sl:
|
||||
|
||||
$ sl
|
||||
|
||||
![Fig.01: Run steam locomotive across the screen if you type "sl" instead of "ls"](http://files.cyberciti.biz/uploads/tips/2011/05/sl_command_steam_locomotive.png)
|
||||
|
||||
图01: 如果你把“ls”输入成“sl”蒸汽火车会穿过你的屏幕。
|
||||
*图01: 如果你把 “ls” 输入成 “sl” ,蒸汽火车会穿过你的屏幕。*
|
||||
|
||||
It also supports the following options:
|
||||
它同样支持下面的选项:
|
||||
|
||||
- **-a** : 似乎发生了意外。你会哭喊求助的人们感到难过。
|
||||
- **-a** : 似乎发生了意外。你会为那些哭喊求助的人们感到难过。
|
||||
- **-l** : 显示小一点的火车
|
||||
- **-F** : 它飞走
|
||||
- **-e** : 允许被Ctrl+C终端
|
||||
- **-F** : 它居然飞走了
|
||||
- **-e** : 允许被 Ctrl+C 中断
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -32,7 +33,7 @@ via: http://www.cyberciti.biz/tips/displays-animations-when-accidentally-you-typ
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[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/) 荣誉推出
|
||||
|
@ -1,11 +1,11 @@
|
||||
Linux/Unix桌面趣事:终端ASCII水族箱
|
||||
Linux/Unix 桌面趣事:终端 ASCII 水族箱
|
||||
================================================================================
|
||||
你可以在你的终端中使用ASCIIQuarium安全地欣赏海洋的神秘了。它是一个用perl写的ASCII艺术水族箱/海洋动画。
|
||||
|
||||
你可以在你的终端中使用 ASCIIQuarium 安全地欣赏海洋的神秘了。它是一个用 perl 写的 ASCII 艺术水族箱/海洋动画。
|
||||
|
||||
### 安装 Term::Animation ###
|
||||
|
||||
|
||||
首先你需要安装名为Term-Animation的perl模块。打开终端(选择程序 > 附件 > 终端),并输入:
|
||||
首先你需要安装名为 Term-Animation 的perl模块。打开终端(选择程序 > 附件 > 终端),并输入:
|
||||
|
||||
$ sudo apt-get install libcurses-perl
|
||||
$ cd /tmp
|
||||
@ -15,9 +15,9 @@ Linux/Unix桌面趣事:终端ASCII水族箱
|
||||
$ perl Makefile.PL && make && make test
|
||||
$ sudo make install
|
||||
|
||||
### 下载安装ASCIIQuarium ###
|
||||
### 下载安装 ASCIIQuarium ###
|
||||
|
||||
接着再终端中输入:
|
||||
接着在终端中输入:
|
||||
|
||||
$ cd /tmp
|
||||
$ wget http://www.robobunny.com/projects/asciiquarium/asciiquarium.tar.gz
|
||||
@ -26,7 +26,7 @@ Linux/Unix桌面趣事:终端ASCII水族箱
|
||||
$ sudo cp asciiquarium /usr/local/bin
|
||||
$ sudo chmod 0755 /usr/local/bin/asciiquarium
|
||||
|
||||
### 我怎么浏览ASCII水族箱? ###
|
||||
### 我怎么观赏 ASCII 水族箱? ###
|
||||
|
||||
输入下面的命令:
|
||||
|
||||
@ -38,6 +38,8 @@ Linux/Unix桌面趣事:终端ASCII水族箱
|
||||
|
||||
![Fig.01: ASCII Aquarium](http://s0.cyberciti.org/uploads/tips/2011/01/screenshot-ASCIIQuarium.png)
|
||||
|
||||
*ASCII 水族箱*
|
||||
|
||||
### 相关媒体 ###
|
||||
|
||||
注:youtube 视频
|
||||
@ -45,9 +47,9 @@ Linux/Unix桌面趣事:终端ASCII水族箱
|
||||
|
||||
[视频01: ASCIIQuarium - Linux/Unix桌面上的海洋动画][1]
|
||||
|
||||
### 下载:ASCII Aquarium的KDE和Mac OS X版本 ###
|
||||
### 下载:ASCII Aquarium 的 KDE 和 Mac OS X 版本 ###
|
||||
|
||||
[下载asciiquarium][2]。如果你运行的是Mac OS X,试下一个可以直接使用已经打包好的[版本][3]。对于KDE用户,试试基于Asciiquarium的[KDE屏幕保护程序][4]
|
||||
[点此下载 asciiquarium][2]。如果你运行的是 Mac OS X,试下这个可以直接使用的已经打包好的[版本][3]。对于 KDE 用户,试试基于 Asciiquarium 的[KDE 屏幕保护程序][4]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -55,7 +57,7 @@ via: http://www.cyberciti.biz/tips/linux-unix-apple-osx-terminal-ascii-aquarium.
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[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/) 荣誉推出
|
||||
|
@ -1,6 +1,6 @@
|
||||
Linux/Unix桌面趣事:猫和老鼠在屏幕中追逐
|
||||
Linux/Unix桌面趣事:显示器里的猫和老鼠
|
||||
================================================================================
|
||||
Oneko是一个有趣的app。它会把你的光标变成一直老鼠,并在后面创建一个可爱的小猫,并且始终在老鼠光标后面追着。单词“neko”再日语中的意思是老鼠。它最初是作为Macintosh桌面附件由一位日本人开发的。
|
||||
Oneko 是一个有趣的应用。它会把你的光标变成一只老鼠,并在后面创建一个可爱的小猫,并且始终追逐着老鼠光标。单词“neko”在日语中的意思是老鼠。它最初是一位日本人开发的 Macintosh 桌面附件。
|
||||
|
||||
### 安装 oneko ###
|
||||
|
||||
@ -29,19 +29,18 @@ Oneko是一个有趣的app。它会把你的光标变成一直老鼠,并在后
|
||||
Setting up oneko (1.2.sakura.6-7) ...
|
||||
Processing triggers for menu ...
|
||||
|
||||
FreeBSD用户输入下面的命令安装oneko:
|
||||
FreeBSD 用户输入下面的命令安装 oneko:
|
||||
|
||||
# cd /usr/ports/games/oneko
|
||||
# make install clean
|
||||
|
||||
### 我该如何使用oneko? ###
|
||||
### 我该如何使用 oneko? ###
|
||||
|
||||
Simply type the following command:
|
||||
输入下面的命令:
|
||||
|
||||
$ oneko
|
||||
|
||||
你可以把猫变成“tora-neko”,一只像白老虎条纹的猫:
|
||||
你可以把猫变成 “tora-neko”,一只像白老虎条纹的猫:
|
||||
|
||||
$ oneko -tora
|
||||
|
||||
@ -66,19 +65,18 @@ Simply type the following command:
|
||||
注:youtube 视频
|
||||
<iframe width="596" height="335" frameborder="0" allowfullscreen="" src="http://www.youtube.com/embed/Nm3SkXThL0s"></iframe>
|
||||
|
||||
(Video.01: 示例 - 在Linux下安装和使用oneko)
|
||||
(Video.01: 示例 - 在 Linux 下安装和使用 oneko)
|
||||
|
||||
### 其他选项 ###
|
||||
|
||||
You can pass the following options:
|
||||
你可以传入下面的选项
|
||||
|
||||
1.**-tofocus**:让猫再聚焦的窗口顶部奔跑。当聚焦的窗口不在视野中时,猫像平常那样追逐老鼠。
|
||||
1. **-tofocus**:让猫在获得焦点的窗口顶部奔跑。当获得焦点的窗口不在视野中时,猫像平常那样追逐老鼠。
|
||||
2. **-position 坐标** :指定X和Y来调整猫相对老鼠的位置
|
||||
3. **-rv**:将前景色和背景色对调
|
||||
4. **-fg 颜色** : 前景色 (比如 oneko -dog -fg red)。
|
||||
5. **-bg 颜色** : 背景色 (比如 oneko -dog -bg green)。
|
||||
6. 查看oneko的手册获取更多信息。
|
||||
6. 查看 oneko 的手册获取更多信息。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -86,6 +84,6 @@ via: http://www.cyberciti.biz/open-source/oneko-app-creates-cute-cat-chasing-aro
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[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/) 荣誉推出
|
@ -0,0 +1,55 @@
|
||||
在 Linux 终端下看《星球大战》
|
||||
================================================================================
|
||||
![](http://itsfoss.com/wp-content/uploads/2015/12/Star-Wars-Linux-Terminal-2.png)
|
||||
|
||||
《星球大战(Star Wars)》已经席卷世界。最新一期的 [《星球大战》系列, 《星球大战7:原力觉醒》,打破了有史以来的记录][1]。
|
||||
|
||||
虽然我不能帮你得到一张最新的《星球大战》的电影票,但我可以提供给你一种方式,看[星球大战第四集][2],它是非常早期的《星球大战》电影(1977 年)。
|
||||
|
||||
|
||||
不,它不会是高清,也不是蓝光版。相反,它将是 ASCII 版的《星球大战》第四集,你可以在 Linux 终端看它,这才是真正的极客的方式 :)
|
||||
|
||||
### 在 Linux 终端看星球大战 ###
|
||||
|
||||
打开一个终端,使用以下命令:
|
||||
|
||||
telnet towel.blinkenlights.nl
|
||||
|
||||
等待几秒钟,你可以在终端看到类似于以下这样的动画ASCII艺术:
|
||||
|
||||
(LCTT 译注:有时候会解析到效果更好 IPv6 版本上,如果你没有 IPv6 地址,可以重新连接试试;另外似乎线路不稳定,出现卡顿时稍等。)
|
||||
|
||||
![](http://itsfoss.com/wp-content/uploads/2015/12/Star-Wars-Linux-Terminal.png)
|
||||
|
||||
它将继续播映……
|
||||
|
||||
![](http://itsfoss.com/wp-content/uploads/2015/12/Star-Wars-Linux-Terminal-1.png)
|
||||
|
||||
![](http://itsfoss.com/wp-content/uploads/2015/12/Star-Wars-Linux-Terminal-2.png)
|
||||
|
||||
![](http://itsfoss.com/wp-content/uploads/2015/12/Star-Wars-Linux-Terminal-3.png)
|
||||
|
||||
![](http://itsfoss.com/wp-content/uploads/2015/12/Star-Wars-Linux-Terminal-5.png)
|
||||
|
||||
要停止动画,按 ctrl +],在这之后输入 quit 来退出 telnet 程序。
|
||||
|
||||
### 更多有趣的终端 ###
|
||||
|
||||
事实上,看《星球大战》并不是你在 Linux 终端下唯一能做有趣的事情。您可以运行[终端里的列车][3]或[通过ASCII艺术得到Linux标志][4]。
|
||||
|
||||
希望你能享受在 Linux 下看《星球大战》。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://itsfoss.com/star-wars-linux/
|
||||
|
||||
作者:[Abhishek][a]
|
||||
译者:[zky001](https://github.com/zky001)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.gamespot.com/articles/star-wars-7-breaks-thursday-night-movie-opening-re/1100-6433246/
|
||||
[2]:http://www.imdb.com/title/tt0076759/
|
||||
[3]:http://itsfoss.com/ubuntu-terminal-train/
|
||||
[4]:http://itsfoss.com/display-linux-logo-in-ascii/
|
96
published/20151208 6 creative ways to use ownCloud.md
Normal file
96
published/20151208 6 creative ways to use ownCloud.md
Normal file
@ -0,0 +1,96 @@
|
||||
ownCloud 的六大神奇用法
|
||||
================================================================================
|
||||
|
||||
![Yearbook cover 2015](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/osdc-open-source-yearbook-lead1-inc0335020sw-201511-01.png)
|
||||
|
||||
(图片来源:Opensource.com)
|
||||
|
||||
[ownCloud][1] 是一个自行托管的开源文件同步和共享服务器。就像“行业老大” Dropbox、Google Drive、Box 和其他的同类服务一样,ownCloud 也可以让你访问自己的文件、日历、联系人和其他数据。你可以在自己设备之间同步任意数据(或部分数据)并分享给其他人。然而,ownCloud 要比其它的商业解决方案更棒,可以[将 ownCloud 运行在自己的服务器][2]而不是其它人的服务器上。
|
||||
|
||||
现在,让我们一起来看看在 ownCloud 上的六个创造性的应用方式。其中一些是由于 ownCloud 的开源才得以完成,而另外的则是 ownCloud 自身特有的功能。
|
||||
|
||||
### 1. 可扩展的 ownCloud “派”集群 ###
|
||||
|
||||
由于 ownCloud 是开源的,你可以选择将它运行在自己的服务器中,或者从你信任的服务商那里获取空间——没必要将你的文件存储在那些大公司的服务器中,谁知他们将你的文件存储到哪里去。[点击此处查看部分 ownCloud 服务商][3],或者下载该服务软件到你的虚拟主机中[搭建自己的服务器][4].
|
||||
|
||||
![](https://opensource.com/sites/default/files/images/life-uploads/banana-pi-owncloud-cluster.jpg)
|
||||
|
||||
*拍摄: Jörn Friedrich Dreyer. [CC BY-SA 4.0.][5]*
|
||||
|
||||
我们见过最具创意的事情就是架设[香蕉派集群][6]和[树莓派集群][7]。ownCloud 的扩展性通常用于支持成千上万的用户,但有些人则将它往不同方向发展,通过将多个微型系统集群在一起,就可以创建出运行速度超快的 ownCloud。酷毙了!
|
||||
|
||||
### 2. 密码同步 ###
|
||||
|
||||
为了让 ownCloud 更容易扩展,我们将它变得超级的模块化,甚至还有一个 [ownCloud 应用商店][8]。你可以在里边找到音乐和视频播放器、日历、联系人、生产力应用、游戏、应用模板(sketching app)等等。
|
||||
|
||||
从近 200 多个应用中仅挑选一个是一件非常困难的事,但密码管理则是一个很独特的功能。只有不超过三个应用提供这个功能:[Passwords][9]、[Secure Container][10] 和 [Passman][11]。
|
||||
|
||||
![](https://opensource.com/sites/default/files/images/life-uploads/password.png)
|
||||
|
||||
### 3. 随心所欲地存储文件 ###
|
||||
|
||||
外部存储可以让你将现有数据挂载到 ownCloud 上,让你通过一个界面来访问存储在 FTP、WebDAV、Amazon S3,甚至 Dropbox 和 Google Drive 的文件。
|
||||
|
||||
注:youtube 视频
|
||||
<iframe width="520" height="315" frameborder="0" allowfullscreen="" src="https://www.youtube.com/embed/uezzFDRnoPY"></iframe>
|
||||
|
||||
行业老大们喜欢创建自己的 “藩篱花园”,Box 的用户只能和其它的 Box 用户协作;假如你想从 Google Drive 分享你的文件,你的同伴也必须要有一个 Google 账号才可以访问的分享。通过 ownCloud 的外部存储功能,你可以轻松打破这些。
|
||||
|
||||
最有创意的就是把 Google Drive 和 Dropbox 添加为外部存储。这样你就可以无缝连接它们,通过一个简单的链接即可分享给其它人——并不需要账户。
|
||||
|
||||
### 4. 获取上传的文件 ###
|
||||
|
||||
由于 ownCloud 是开源开,人们可以不受公司需求的制约而向它贡献感兴趣的功能。我们的贡献者总是很在意安全和隐私,所以 ownCloud 引入的通过密码保护公共链接并[设置失效期限][12]的功能要比其它人早很多。
|
||||
|
||||
现在,ownCloud 可以配置分享链接的读写权限了,这就是说链接的访问者可以无缝的编辑你分享给他们的文件(可以有密码保护,也可以没有),或者将文件上传到服务器前不用强制他们提供私人信息来注册服务。
|
||||
|
||||
注:youtube 视频
|
||||
<iframe width="520" height="315" frameborder="0" allowfullscreen="" src="https://www.youtube.com/embed/3GSppxEhmZY"></iframe>
|
||||
|
||||
对于有人想给你分享大体积的文件时,这个特性就非常有用了。相比于上传到第三方站点、然后给你发送一个连接、你再去下载文件(通常需要登录),ownCloud 仅需要上传文件到你提供的分享文件夹,你就可以马上获取到文件了。
|
||||
|
||||
### 5. 免费却又安全的存储空间 ###
|
||||
|
||||
之前就强调过,我们的代码贡献者最关注的就是安全和隐私,这就是 ownCloud 中有用于加密和解密存储数据的应用的原因。
|
||||
|
||||
通过使用 ownCloud 将你的文件存储到 Dropbox 或者 Google Drive,则会违背夺回数据的控制权并保持数据隐私的初衷。但是加密应用则可以改变这个状况。在发送数据给这些提供商前进行数据加密,并在取回数据的时候进行解密,你的数据就会变得很安全。
|
||||
|
||||
### 6. 在你的可控范围内分享文件 ###
|
||||
|
||||
作为开源项目,ownCloud 没有必要自建 “藩篱花园”。通过“联邦云共享(Federated Cloud Sharing)”:这个[由 ownCloud 开发和发布的][13]协议使不同的文件同步和共享服务器可以彼此之间进行通信,并能够安全地传输文件。联邦云共享本身来自一个有趣的事情:有 [22 所德国大学][14] 想要为自身的 50 万名学生建立一个庞大的云服务,但是每个大学都想控制自己学生的数据。于是乎,我们需要一个创造性的解决方案:也就是联邦云服务。该解决方案可以连接全部的大学,使得学生们可以无缝的协同工作。同时,每个大学的系统管理员保持着对自己学生创建的文件的控制权,并可采用自己的策略,如限制限额,或者限制什么人、什么文件以及如何共享。
|
||||
|
||||
注:youtube 视频
|
||||
<iframe width="520" height="315" frameborder="0" allowfullscreen="" src="https://www.youtube.com/embed/9-JEmlH2DEg"></iframe>
|
||||
|
||||
并且,这项神奇的技术并没有限制于德国的大学之间,每个 ownCloud 用户都能在自己的用户设置中找到自己的[联邦云 ID][15],并将之分享给同伴。
|
||||
|
||||
现在你明白了吧。通过这六个方式,ownCloud 就能让人们做一些特殊而独特的事。而使这一切成为可能的,就是 ownCloud 是开源的,其设计目标就是让你的数据自由。
|
||||
|
||||
你有其它的 ownCloud 的创意用法吗?请发表评论让我们知道。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/life/15/12/6-creative-ways-use-owncloud
|
||||
|
||||
作者:[Jos Poortvliet][a]
|
||||
译者:[GHLandy](https://github.com/GHLandy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://opensource.com/users/jospoortvliet
|
||||
[1]:https://owncloud.com/
|
||||
[2]:https://blogs.fsfe.org/mk/new-stickers-and-leaflets-no-cloud-and-e-mail-self-defense/
|
||||
[3]:https://owncloud.org/providers
|
||||
[4]:https://owncloud.org/install/#instructions-server
|
||||
[5]:https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[6]:http://www.owncluster.de/
|
||||
[7]:https://christopherjcoleman.wordpress.com/2013/01/05/host-your-owncloud-on-a-raspberry-pi-cluster/
|
||||
[8]:https://apps.owncloud.com/
|
||||
[9]:https://apps.owncloud.com/content/show.php/Passwords?content=170480
|
||||
[10]:https://apps.owncloud.com/content/show.php/Secure+Container?content=167268
|
||||
[11]:https://apps.owncloud.com/content/show.php/Passman?content=166285
|
||||
[12]:https://owncloud.com/owncloud45-community/
|
||||
[13]:http://karlitschek.de/2015/08/announcing-the-draft-federated-cloud-sharing-api/
|
||||
[14]:https://owncloud.com/customer/sciebo/
|
||||
[15]:https://owncloud.org/federation/
|
498
published/20151220 GCC-Inline-Assembly-HOWTO.md
Normal file
498
published/20151220 GCC-Inline-Assembly-HOWTO.md
Normal file
@ -0,0 +1,498 @@
|
||||
* * *
|
||||
|
||||
# GCC 内联汇编 HOWTO
|
||||
|
||||
v0.1, 01 March 2003.
|
||||
* * *
|
||||
|
||||
_本 HOWTO 文档将讲解 GCC 提供的内联汇编特性的用途和用法。对于阅读这篇文章,这里只有两个前提要求,很明显,就是 x86 汇编语言和 C 语言的基本认识。_
|
||||
|
||||
* * *
|
||||
|
||||
## 1. 简介
|
||||
|
||||
### 1.1 版权许可
|
||||
|
||||
Copyright (C)2003 Sandeep S.
|
||||
|
||||
本文档自由共享;你可以重新发布它,并且/或者在遵循自由软件基金会发布的 GNU 通用公共许可证下修改它;也可以是该许可证的版本 2 或者(按照你的需求)更晚的版本。
|
||||
|
||||
发布这篇文档是希望它能够帮助别人,但是没有任何担保;甚至不包括可售性和适用于任何特定目的的担保。关于更详细的信息,可以查看 GNU 通用许可证。
|
||||
|
||||
### 1.2 反馈校正
|
||||
|
||||
请将反馈和批评一起提交给 [Sandeep.S](mailto:busybox@sancharnet.in) 。我将感谢任何一个指出本文档中错误和不准确之处的人;一被告知,我会马上改正它们。
|
||||
|
||||
### 1.3 致谢
|
||||
|
||||
我对提供如此棒的特性的 GNU 人们表示真诚的感谢。感谢 Mr.Pramode C E 所做的所有帮助。感谢在 Govt Engineering College 和 Trichur 的朋友们的精神支持和合作,尤其是 Nisha Kurur 和 Sakeeb S 。 感谢在 Gvot Engineering College 和 Trichur 的老师们的合作。
|
||||
|
||||
另外,感谢 Phillip , Brennan Underwood 和 colin@nyx.net ;这里的许多东西都厚颜地直接取自他们的工作成果。
|
||||
|
||||
* * *
|
||||
|
||||
## 2. 概览
|
||||
|
||||
在这里,我们将学习 GCC 内联汇编。这里内联(inline)表示的是什么呢?
|
||||
|
||||
我们可以要求编译器将一个函数的代码插入到调用者代码中函数被实际调用的地方。这样的函数就是内联函数。这听起来和宏差不多?这两者确实有相似之处。
|
||||
|
||||
内联函数的优点是什么呢?
|
||||
|
||||
这种内联方法可以减少函数调用开销。同时如果所有实参的值为常量,它们的已知值可以在编译期允许简化,因此并非所有的内联函数代码都需要被包含进去。代码大小的影响是不可预测的,这取决于特定的情况。为了声明一个内联函数,我们必须在函数声明中使用 `inline` 关键字。
|
||||
|
||||
现在我们正处于一个猜测内联汇编到底是什么的点上。它只不过是一些写为内联函数的汇编程序。在系统编程上,它们方便、快速并且极其有用。我们主要集中学习(GCC)内联汇编函数的基本格式和用法。为了声明内联汇编函数,我们使用 `asm` 关键词。
|
||||
|
||||
内联汇编之所以重要,主要是因为它可以操作并且使其输出通过 C 变量显示出来。正是因为此能力, "asm" 可以用作汇编指令和包含它的 C 程序之间的接口。
|
||||
|
||||
* * *
|
||||
|
||||
## 3. GCC 汇编语法
|
||||
|
||||
Linux上的 GNU C 编译器 GCC ,使用 **AT&T** / **UNIX** 汇编语法。在这里,我们将使用 AT&T 语法 进行汇编编码。如果你对 AT&T 语法不熟悉的话,请不要紧张,我会教你的。AT&T 语法和 Intel 语法的差别很大。我会给出主要的区别。
|
||||
|
||||
1. 源操作数和目的操作数顺序
|
||||
|
||||
AT&T 语法的操作数方向和 Intel 语法的刚好相反。在Intel 语法中,第一操作数为目的操作数,第二操作数为源操作数,然而在 AT&T 语法中,第一操作数为源操作数,第二操作数为目的操作数。也就是说,
|
||||
|
||||
Intel 语法中的 `Op-code dst src` 变为
|
||||
|
||||
AT&T 语法中的 `Op-code src dst`。
|
||||
|
||||
2. 寄存器命名
|
||||
|
||||
寄存器名称有 `%` 前缀,即如果必须使用 `eax`,它应该用作 `%eax`。
|
||||
|
||||
3. 立即数
|
||||
|
||||
AT&T 立即数以 `$` 为前缀。静态 "C" 变量也使用 `$` 前缀。在 Intel 语法中,十六进制常量以 `h` 为后缀,然而 AT&T 不使用这种语法,这里我们给常量添加前缀 `0x`。所以,对于十六进制,我们首先看到一个 `$`,然后是 `0x`,最后才是常量。
|
||||
|
||||
4. 操作数大小
|
||||
|
||||
在 AT&T 语法中,存储器操作数的大小取决于操作码名字的最后一个字符。操作码后缀 ’b’ 、’w’、’l’ 分别指明了字节(byte)(8位)、字(word)(16位)、长型(long)(32位)存储器引用。Intel 语法通过给存储器操作数添加 `byte ptr`、 `word ptr` 和 `dword ptr` 前缀来实现这一功能。
|
||||
|
||||
因此,Intel的 `mov al, byte ptr foo` 在 AT&T 语法中为 `movb foo, %al`。
|
||||
|
||||
5. 存储器操作数
|
||||
|
||||
在 Intel 语法中,基址寄存器包含在 `[` 和 `]` 中,然而在 AT&T 中,它们变为 `(` 和 `)`。另外,在 Intel 语法中, 间接内存引用为
|
||||
|
||||
`section:[base + index*scale + disp]`,在 AT&T中变为 `section:disp(base, index, scale)`。
|
||||
|
||||
需要牢记的一点是,当一个常量用于 disp 或 scale,不能添加 `$` 前缀。
|
||||
|
||||
现在我们看到了 Intel 语法和 AT&T 语法之间的一些主要差别。我仅仅写了它们差别的一部分而已。关于更完整的信息,请参考 GNU 汇编文档。现在为了更好地理解,我们可以看一些示例。
|
||||
|
||||
```
|
||||
+------------------------------+------------------------------------+
|
||||
| Intel Code | AT&T Code |
|
||||
+------------------------------+------------------------------------+
|
||||
| mov eax,1 | movl $1,%eax |
|
||||
| mov ebx,0ffh | movl $0xff,%ebx |
|
||||
| int 80h | int $0x80 |
|
||||
| mov ebx, eax | movl %eax, %ebx |
|
||||
| mov eax,[ecx] | movl (%ecx),%eax |
|
||||
| mov eax,[ebx+3] | movl 3(%ebx),%eax |
|
||||
| mov eax,[ebx+20h] | movl 0x20(%ebx),%eax |
|
||||
| add eax,[ebx+ecx*2h] | addl (%ebx,%ecx,0x2),%eax |
|
||||
| lea eax,[ebx+ecx] | leal (%ebx,%ecx),%eax |
|
||||
| sub eax,[ebx+ecx*4h-20h] | subl -0x20(%ebx,%ecx,0x4),%eax |
|
||||
+------------------------------+------------------------------------+
|
||||
```
|
||||
* * *
|
||||
|
||||
## 4. 基本内联
|
||||
|
||||
基本内联汇编的格式非常直接了当。它的基本格式为
|
||||
|
||||
`asm("汇编代码");`
|
||||
|
||||
示例
|
||||
|
||||
```
|
||||
asm("movl %ecx %eax"); /* 将 ecx 寄存器的内容移至 eax */
|
||||
__asm__("movb %bh (%eax)"); /* 将 bh 的一个字节数据 移至 eax 寄存器指向的内存 */
|
||||
```
|
||||
|
||||
你可能注意到了这里我使用了 `asm ` 和 `__asm__`。这两者都是有效的。如果关键词 `asm` 和我们程序的一些标识符冲突了,我们可以使用 `__asm__`。如果我们的指令多于一条,我们可以每个一行,并用双引号圈起,同时为每条指令添加 ’\n’ 和 ’\t’ 后缀。这是因为 gcc 将每一条当作字符串发送给 **as**(GAS)(LCTT 译注: GAS 即 GNU 汇编器),并且通过使用换行符/制表符发送正确格式化后的行给汇编器。
|
||||
|
||||
示例
|
||||
|
||||
```
|
||||
__asm__ ("movl %eax, %ebx\n\t"
|
||||
"movl $56, %esi\n\t"
|
||||
"movl %ecx, $label(%edx,%ebx,$4)\n\t"
|
||||
"movb %ah, (%ebx)");
|
||||
```
|
||||
|
||||
如果在代码中,我们涉及到一些寄存器(即改变其内容),但在没有恢复这些变化的情况下从汇编中返回,这将会导致一些意想不到的事情。这是因为 GCC 并不知道寄存器内容的变化,这会导致问题,特别是当编译器做了某些优化。在没有告知 GCC 的情况下,它将会假设一些寄存器存储了一些值——而我们可能已经改变却没有告知 GCC——它会像什么事都没发生一样继续运行(LCTT 译注:什么事都没发生一样是指GCC不会假设寄存器装入的值是有效的,当退出改变了寄存器值的内联汇编后,寄存器的值不会保存到相应的变量或内存空间)。我们所可以做的是使用那些没有副作用的指令,或者当我们退出时恢复这些寄存器,要不就等着程序崩溃吧。这是为什么我们需要一些扩展功能,扩展汇编给我们提供了那些功能。
|
||||
|
||||
* * *
|
||||
|
||||
## 5. 扩展汇编
|
||||
|
||||
在基本内联汇编中,我们只有指令。然而在扩展汇编中,我们可以同时指定操作数。它允许我们指定输入寄存器、输出寄存器以及修饰寄存器列表。GCC 不强制用户必须指定使用的寄存器。我们可以把头疼的事留给 GCC ,这可能可以更好地适应 GCC 的优化。不管怎么说,基本格式为:
|
||||
|
||||
```
|
||||
asm ( 汇编程序模板
|
||||
: 输出操作数 /* 可选的 */
|
||||
: 输入操作数 /* 可选的 */
|
||||
: 修饰寄存器列表 /* 可选的 */
|
||||
);
|
||||
```
|
||||
|
||||
汇编程序模板由汇编指令组成。每一个操作数由一个操作数约束字符串所描述,其后紧接一个括弧括起的 C 表达式。冒号用于将汇编程序模板和第一个输出操作数分开,另一个(冒号)用于将最后一个输出操作数和第一个输入操作数分开(如果存在的话)。逗号用于分离每一个组内的操作数。总操作数的数目限制在 10 个,或者机器描述中的任何指令格式中的最大操作数数目,以较大者为准。
|
||||
|
||||
如果没有输出操作数但存在输入操作数,你必须将两个连续的冒号放置于输出操作数原本会放置的地方周围。
|
||||
|
||||
示例:
|
||||
|
||||
```
|
||||
asm ("cld\n\t"
|
||||
"rep\n\t"
|
||||
"stosl"
|
||||
: /* 无输出寄存器 */
|
||||
: "c" (count), "a" (fill_value), "D" (dest)
|
||||
: "%ecx", "%edi"
|
||||
);
|
||||
```
|
||||
|
||||
现在来看看这段代码是干什么的?以上的内联汇编是将 `fill_value` 值连续 `count` 次拷贝到寄存器 `edi` 所指位置(LCTT 译注:每执行 stosl 一次,寄存器 edi 的值会递增或递减,这取决于是否设置了 direction 标志,因此以上代码实则初始化一个内存块)。 它也告诉 gcc 寄存器 `ecx` 和 `edi` 一直无效(LCTT 译注:原文为 eax ,但代码修饰寄存器列表中为 ecx,因此这可能为作者的纰漏。)。为了更加清晰地说明,让我们再看一个示例。
|
||||
|
||||
```
|
||||
int a=10, b;
|
||||
asm ("movl %1, %%eax;
|
||||
movl %%eax, %0;"
|
||||
:"=r"(b) /* 输出 */
|
||||
:"r"(a) /* 输入 */
|
||||
:"%eax" /* 修饰寄存器 */
|
||||
);
|
||||
```
|
||||
|
||||
这里我们所做的是使用汇编指令使 ’b’ 变量的值等于 ’a’ 变量的值。一些有意思的地方是:
|
||||
|
||||
* "b" 为输出操作数,用 %0 引用,并且 "a" 为输入操作数,用 %1 引用。
|
||||
* "r" 为操作数约束。之后我们会更详细地了解约束(字符串)。目前,"r" 告诉 GCC 可以使用任一寄存器存储操作数。输出操作数约束应该有一个约束修饰符 "=" 。这修饰符表明它是一个只读的输出操作数。
|
||||
* 寄存器名字以两个 % 为前缀。这有利于 GCC 区分操作数和寄存器。操作数以一个 % 为前缀。
|
||||
* 第三个冒号之后的修饰寄存器 %eax 用于告诉 GCC %eax 的值将会在 "asm" 内部被修改,所以 GCC 将不会使用此寄存器存储任何其他值。
|
||||
|
||||
当 “asm” 执行完毕, "b" 变量会映射到更新的值,因为它被指定为输出操作数。换句话说, “asm” 内 "b" 变量的修改应该会被映射到 “asm” 外部。
|
||||
|
||||
现在,我们可以更详细地看看每一个域。
|
||||
|
||||
### 5.1 汇编程序模板
|
||||
|
||||
汇编程序模板包含了被插入到 C 程序的汇编指令集。其格式为:每条指令用双引号圈起,或者整个指令组用双引号圈起。同时每条指令应以分界符结尾。有效的分界符有换行符(`\n`)和分号(`;`)。`\n` 可以紧随一个制表符(`\t`)。我们应该都明白使用换行符或制表符的原因了吧(LCTT 译注:就是为了排版和分隔)?和 C 表达式对应的操作数使用 %0、%1 ... 等等表示。
|
||||
|
||||
### 5.2 操作数
|
||||
|
||||
C 表达式用作 “asm” 内的汇编指令操作数。每个操作数前面是以双引号圈起的操作数约束。对于输出操作数,在引号内还有一个约束修饰符,其后紧随一个用于表示操作数的 C 表达式。即,“操作数约束”(C 表达式)是一个通用格式。对于输出操作数,还有一个额外的修饰符。约束字符串主要用于决定操作数的寻址方式,同时也用于指定使用的寄存器。
|
||||
|
||||
如果我们使用的操作数多于一个,那么每一个操作数用逗号隔开。
|
||||
|
||||
在汇编程序模板中,每个操作数用数字引用。编号方式如下。如果总共有 n 个操作数(包括输入和输出操作数),那么第一个输出操作数编号为 0 ,逐项递增,并且最后一个输入操作数编号为 n - 1 。操作数的最大数目在前一节我们讲过。
|
||||
|
||||
输出操作数表达式必须为左值。输入操作数的要求不像这样严格。它们可以为表达式。扩展汇编特性常常用于编译器所不知道的机器指令 ;-)。如果输出表达式无法直接寻址(即,它是一个位域),我们的约束字符串必须给定一个寄存器。在这种情况下,GCC 将会使用该寄存器作为汇编的输出,然后存储该寄存器的内容到输出。
|
||||
|
||||
正如前面所陈述的一样,普通的输出操作数必须为只写的; GCC 将会假设指令前的操作数值是死的,并且不需要被(提前)生成。扩展汇编也支持输入-输出或者读-写操作数。
|
||||
|
||||
所以现在我们来关注一些示例。我们想要求一个数的5次方结果。为了计算该值,我们使用 `lea` 指令。
|
||||
|
||||
```
|
||||
asm ("leal (%1,%1,4), %0"
|
||||
: "=r" (five_times_x)
|
||||
: "r" (x)
|
||||
);
|
||||
```
|
||||
|
||||
这里我们的输入为 x。我们不指定使用的寄存器。 GCC 将会选择一些输入寄存器,一个输出寄存器,来做我们预期的工作。如果我们想要输入和输出放在同一个寄存器里,我们也可以要求 GCC 这样做。这里我们使用那些读-写操作数类型。这里我们通过指定合适的约束来实现它。
|
||||
|
||||
```
|
||||
asm ("leal (%0,%0,4), %0"
|
||||
: "=r" (five_times_x)
|
||||
: "0" (x)
|
||||
);
|
||||
```
|
||||
|
||||
现在输出和输出操作数位于同一个寄存器。但是我们无法得知是哪一个寄存器。现在假如我们也想要指定操作数所在的寄存器,这里有一种方法。
|
||||
|
||||
```
|
||||
asm ("leal (%%ecx,%%ecx,4), %%ecx"
|
||||
: "=c" (x)
|
||||
: "c" (x)
|
||||
);
|
||||
```
|
||||
|
||||
在以上三个示例中,我们并没有在修饰寄存器列表里添加任何寄存器,为什么?在头两个示例, GCC 决定了寄存器并且它知道发生了什么改变。在最后一个示例,我们不必将 'ecx' 添加到修饰寄存器列表(LCTT 译注: 原文修饰寄存器列表这个单词拼写有错,这里已修正),gcc 知道它表示 x。因此,因为它可以知道 `ecx` 的值,它就不被当作修饰的(寄存器)了。
|
||||
|
||||
### 5.3 修饰寄存器列表
|
||||
|
||||
一些指令会破坏一些硬件寄存器内容。我们不得不在修饰寄存器中列出这些寄存器,即汇编函数内第三个 ’**:**’ 之后的域。这可以通知 gcc 我们将会自己使用和修改这些寄存器,这样 gcc 就不会假设存入这些寄存器的值是有效的。我们不用在这个列表里列出输入、输出寄存器。因为 gcc 知道 “asm” 使用了它们(因为它们被显式地指定为约束了)。如果指令隐式或显式地使用了任何其他寄存器,(并且寄存器没有出现在输出或者输出约束列表里),那么就需要在修饰寄存器列表中指定这些寄存器。
|
||||
|
||||
如果我们的指令可以修改条件码寄存器(cc),我们必须将 "cc" 添加进修饰寄存器列表。
|
||||
|
||||
如果我们的指令以不可预测的方式修改了内存,那么需要将 "memory" 添加进修饰寄存器列表。这可以使 GCC 不会在汇编指令间保持缓存于寄存器的内存值。如果被影响的内存不在汇编的输入或输出列表中,我们也必须添加 **volatile** 关键词。
|
||||
|
||||
我们可以按我们的需求多次读写修饰寄存器。参考一下模板内的多指令示例;它假设子例程 _foo 接受寄存器 `eax` 和 `ecx` 里的参数。
|
||||
|
||||
```
|
||||
asm ("movl %0,%%eax;
|
||||
movl %1,%%ecx;
|
||||
call _foo"
|
||||
: /* no outputs */
|
||||
: "g" (from), "g" (to)
|
||||
: "eax", "ecx"
|
||||
);
|
||||
```
|
||||
|
||||
### 5.4 Volatile ...?
|
||||
|
||||
如果你熟悉内核源码或者类似漂亮的代码,你一定见过许多声明为 `volatile` 或者 `__volatile__`的函数,其跟着一个 `asm` 或者 `__asm__`。我之前提到过关键词 `asm` 和 `__asm__`。那么什么是 `volatile` 呢?
|
||||
|
||||
如果我们的汇编语句必须在我们放置它的地方执行(例如,不能为了优化而被移出循环语句),将关键词 `volatile` 放置在 asm 后面、()的前面。以防止它被移动、删除或者其他操作,我们将其声明为 `asm volatile ( ... : ... : ... : ...);`
|
||||
|
||||
如果担心发生冲突,请使用 `__volatile__`。
|
||||
|
||||
如果我们的汇编只是用于一些计算并且没有任何副作用,不使用 `volatile` 关键词会更好。不使用 `volatile` 可以帮助 gcc 优化代码并使代码更漂亮。
|
||||
|
||||
|
||||
在“一些实用的诀窍”一节中,我提供了多个内联汇编函数的例子。那里我们可以了解到修饰寄存器列表的细节。
|
||||
|
||||
* * *
|
||||
|
||||
## 6. 更多关于约束
|
||||
|
||||
到这个时候,你可能已经了解到约束和内联汇编有很大的关联。但我们对约束讲的还不多。约束用于表明一个操作数是否可以位于寄存器和位于哪种寄存器;操作数是否可以为一个内存引用和哪种地址;操作数是否可以为一个立即数和它可能的取值范围(即值的范围),等等。
|
||||
|
||||
### 6.1 常用约束
|
||||
|
||||
在许多约束中,只有小部分是常用的。我们来看看这些约束。
|
||||
|
||||
1. **寄存器操作数约束(r)**
|
||||
|
||||
当使用这种约束指定操作数时,它们存储在通用寄存器(GPR)中。请看下面示例:
|
||||
|
||||
`asm ("movl %%eax, %0\n" :"=r"(myval));`
|
||||
|
||||
这里,变量 myval 保存在寄存器中,寄存器 eax 的值被复制到该寄存器中,并且 myval 的值从寄存器更新到了内存。当指定 "r" 约束时, gcc 可以将变量保存在任何可用的 GPR 中。要指定寄存器,你必须使用特定寄存器约束直接地指定寄存器的名字。它们为:
|
||||
|
||||
```
|
||||
+---+--------------------+
|
||||
| r | Register(s) |
|
||||
+---+--------------------+
|
||||
| a | %eax, %ax, %al |
|
||||
| b | %ebx, %bx, %bl |
|
||||
| c | %ecx, %cx, %cl |
|
||||
| d | %edx, %dx, %dl |
|
||||
| S | %esi, %si |
|
||||
| D | %edi, %di |
|
||||
+---+--------------------+
|
||||
```
|
||||
|
||||
2. **内存操作数约束(m)**
|
||||
|
||||
当操作数位于内存时,任何对它们的操作将直接发生在内存位置,这与寄存器约束相反,后者首先将值存储在要修改的寄存器中,然后将它写回到内存位置。但寄存器约束通常用于一个指令必须使用它们或者它们可以大大提高处理速度的地方。当需要在 “asm” 内更新一个 C 变量,而又不想使用寄存器去保存它的值,使用内存最为有效。例如,IDTR 寄存器的值存储于内存位置 loc 处:
|
||||
|
||||
`asm("sidt %0\n" : :"m"(loc));`
|
||||
|
||||
3. **匹配(数字)约束**
|
||||
|
||||
在某些情况下,一个变量可能既充当输入操作数,也充当输出操作数。可以通过使用匹配约束在 "asm" 中指定这种情况。
|
||||
|
||||
`asm ("incl %0" :"=a"(var):"0"(var));`
|
||||
|
||||
在操作数那一节中,我们也看到了一些类似的示例。在这个匹配约束的示例中,寄存器 "%eax" 既用作输入变量,也用作输出变量。 var 输入被读进 %eax,并且等递增后更新的 %eax 再次被存储进 var。这里的 "0" 用于指定与第 0 个输出变量相同的约束。也就是,它指定 var 输出实例应只被存储在 "%eax" 中。该约束可用于:
|
||||
- 在输入从变量读取或变量修改后且修改被写回同一变量的情况
|
||||
- 在不需要将输入操作数实例和输出操作数实例分开的情况
|
||||
|
||||
使用匹配约束最重要的意义在于它们可以有效地使用可用寄存器。
|
||||
|
||||
其他一些约束:
|
||||
|
||||
1. "m" : 允许一个内存操作数,可以使用机器普遍支持的任一种地址。
|
||||
2. "o" : 允许一个内存操作数,但只有当地址是可偏移的。即,该地址加上一个小的偏移量可以得到一个有效地址。
|
||||
3. "V" : 一个不允许偏移的内存操作数。换言之,任何适合 "m" 约束而不适合 "o" 约束的操作数。
|
||||
4. "i" : 允许一个(带有常量)的立即整形操作数。这包括其值仅在汇编时期知道的符号常量。
|
||||
5. "n" : 允许一个带有已知数字的立即整形操作数。许多系统不支持汇编时期的常量,因为操作数少于一个字宽。对于此种操作数,约束应该使用 'n' 而不是'i'。
|
||||
6. "g" : 允许任一寄存器、内存或者立即整形操作数,不包括通用寄存器之外的寄存器。
|
||||
|
||||
以下约束为 x86 特有。
|
||||
|
||||
1. "r" : 寄存器操作数约束,查看上面给定的表格。
|
||||
2. "q" : 寄存器 a、b、c 或者 d。
|
||||
3. "I" : 范围从 0 到 31 的常量(对于 32 位移位)。
|
||||
4. "J" : 范围从 0 到 63 的常量(对于 64 位移位)。
|
||||
5. "K" : 0xff。
|
||||
6. "L" : 0xffff。
|
||||
7. "M" : 0、1、2 或 3 (lea 指令的移位)。
|
||||
8. "N" : 范围从 0 到 255 的常量(对于 out 指令)。
|
||||
9. "f" : 浮点寄存器
|
||||
10. "t" : 第一个(栈顶)浮点寄存器
|
||||
11. "u" : 第二个浮点寄存器
|
||||
12. "A" : 指定 `a` 或 `d` 寄存器。这主要用于想要返回 64 位整形数,使用 `d` 寄存器保存最高有效位和 `a` 寄存器保存最低有效位。
|
||||
|
||||
### 6.2 约束修饰符
|
||||
|
||||
当使用约束时,对于更精确的控制超过了对约束作用的需求,GCC 给我们提供了约束修饰符。最常用的约束修饰符为:
|
||||
|
||||
1. "=" : 意味着对于这条指令,操作数为只写的;旧值会被忽略并被输出数据所替换。
|
||||
2. "&" : 意味着这个操作数为一个早期改动的操作数,其在该指令完成前通过使用输入操作数被修改了。因此,这个操作数不可以位于一个被用作输出操作数或任何内存地址部分的寄存器。如果在旧值被写入之前它仅用作输入而已,一个输入操作数可以为一个早期改动操作数。
|
||||
|
||||
上述的约束列表和解释并不完整。示例可以让我们对内联汇编的用途和用法更好的理解。在下一节,我们会看到一些示例,在那里我们会发现更多关于修饰寄存器列表的东西。
|
||||
|
||||
* * *
|
||||
|
||||
## 7. 一些实用的诀窍
|
||||
|
||||
现在我们已经介绍了关于 GCC 内联汇编的基础理论,现在我们将专注于一些简单的例子。将内联汇编函数写成宏的形式总是非常方便的。我们可以在 Linux 内核代码里看到许多汇编函数。(usr/src/linux/include/asm/*.h)。
|
||||
|
||||
1. 首先我们从一个简单的例子入手。我们将写一个两个数相加的程序。
|
||||
|
||||
```
|
||||
int main(void)
|
||||
{
|
||||
int foo = 10, bar = 15;
|
||||
__asm__ __volatile__("addl %%ebx,%%eax"
|
||||
:"=a"(foo)
|
||||
:"a"(foo), "b"(bar)
|
||||
);
|
||||
printf("foo+bar=%d\n", foo);
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
这里我们要求 GCC 将 foo 存放于 %eax,将 bar 存放于 %ebx,同时我们也想要在 %eax 中存放结果。'=' 符号表示它是一个输出寄存器。现在我们可以以其他方式将一个整数加到一个变量。
|
||||
|
||||
```
|
||||
__asm__ __volatile__(
|
||||
" lock ;\n"
|
||||
" addl %1,%0 ;\n"
|
||||
: "=m" (my_var)
|
||||
: "ir" (my_int), "m" (my_var)
|
||||
: /* 无修饰寄存器列表 */
|
||||
);
|
||||
```
|
||||
|
||||
这是一个原子加法。为了移除原子性,我们可以移除指令 'lock'。在输出域中,"=m" 表明 my_var 是一个输出且位于内存。类似地,"ir" 表明 my_int 是一个整型,并应该存在于其他寄存器(回想我们上面看到的表格)。没有寄存器位于修饰寄存器列表中。
|
||||
|
||||
2. 现在我们将在一些寄存器/变量上展示一些操作,并比较值。
|
||||
|
||||
```
|
||||
__asm__ __volatile__( "decl %0; sete %1"
|
||||
: "=m" (my_var), "=q" (cond)
|
||||
: "m" (my_var)
|
||||
: "memory"
|
||||
);
|
||||
```
|
||||
|
||||
这里,my_var 的值减 1 ,并且如果结果的值为 0,则变量 cond 置 1。我们可以通过将指令 "lock;\n\t" 添加为汇编模板的第一条指令以增加原子性。
|
||||
|
||||
以类似的方式,为了增加 my_var,我们可以使用 "incl %0" 而不是 "decl %0"。
|
||||
|
||||
这里需要注意的地方是(i)my_var 是一个存储于内存的变量。(ii)cond 位于寄存器 eax、ebx、ecx、edx 中的任何一个。约束 "=q" 保证了这一点。(iii)同时我们可以看到 memory 位于修饰寄存器列表中。也就是说,代码将改变内存中的内容。
|
||||
|
||||
3. 如何置 1 或清 0 寄存器中的一个比特位。作为下一个诀窍,我们将会看到它。
|
||||
|
||||
```
|
||||
__asm__ __volatile__( "btsl %1,%0"
|
||||
: "=m" (ADDR)
|
||||
: "Ir" (pos)
|
||||
: "cc"
|
||||
);
|
||||
```
|
||||
|
||||
这里,ADDR 变量(一个内存变量)的 'pos' 位置上的比特被设置为 1。我们可以使用 'btrl' 来清除由 'btsl' 设置的比特位。pos 的约束 "Ir" 表明 pos 位于寄存器,并且它的值为 0-31(x86 相关约束)。也就是说,我们可以设置/清除 ADDR 变量上第 0 到 31 位的任一比特位。因为条件码会被改变,所以我们将 "cc" 添加进修饰寄存器列表。
|
||||
|
||||
4. 现在我们看看一些更为复杂而有用的函数。字符串拷贝。
|
||||
|
||||
```
|
||||
static inline char * strcpy(char * dest,const char *src)
|
||||
{
|
||||
int d0, d1, d2;
|
||||
__asm__ __volatile__( "1:\tlodsb\n\t"
|
||||
"stosb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"jne 1b"
|
||||
: "=&S" (d0), "=&D" (d1), "=&a" (d2)
|
||||
: "0" (src),"1" (dest)
|
||||
: "memory");
|
||||
return dest;
|
||||
}
|
||||
```
|
||||
|
||||
源地址存放于 esi,目标地址存放于 edi,同时开始拷贝,当我们到达 **0** 时,拷贝完成。约束 "&S"、"&D"、"&a" 表明寄存器 esi、edi 和 eax 早期修饰寄存器,也就是说,它们的内容在函数完成前会被改变。这里很明显可以知道为什么 "memory" 会放在修饰寄存器列表。
|
||||
|
||||
我们可以看到一个类似的函数,它能移动双字块数据。注意函数被声明为一个宏。
|
||||
|
||||
```
|
||||
#define mov_blk(src, dest, numwords) \
|
||||
__asm__ __volatile__ ( \
|
||||
"cld\n\t" \
|
||||
"rep\n\t" \
|
||||
"movsl" \
|
||||
: \
|
||||
: "S" (src), "D" (dest), "c" (numwords) \
|
||||
: "%ecx", "%esi", "%edi" \
|
||||
)
|
||||
```
|
||||
|
||||
这里我们没有输出,寄存器 ecx、esi和 edi 的内容发生了改变,这是块移动的副作用。因此我们必须将它们添加进修饰寄存器列表。
|
||||
|
||||
5. 在 Linux 中,系统调用使用 GCC 内联汇编实现。让我们看看如何实现一个系统调用。所有的系统调用被写成宏(linux/unistd.h)。例如,带有三个参数的系统调用被定义为如下所示的宏。
|
||||
|
||||
```
|
||||
type name(type1 arg1,type2 arg2,type3 arg3) \
|
||||
{ \
|
||||
long __res; \
|
||||
__asm__ volatile ( "int $0x80" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
|
||||
"d" ((long)(arg3))); \
|
||||
__syscall_return(type,__res); \
|
||||
}
|
||||
```
|
||||
|
||||
无论何时调用带有三个参数的系统调用,以上展示的宏就会用于执行调用。系统调用号位于 eax 中,每个参数位于 ebx、ecx、edx 中。最后 "int 0x80" 是一条用于执行系统调用的指令。返回值被存储于 eax 中。
|
||||
|
||||
每个系统调用都以类似的方式实现。Exit 是一个单一参数的系统调用,让我们看看它的代码看起来会是怎样。它如下所示。
|
||||
|
||||
```
|
||||
{
|
||||
asm("movl $1,%%eax; /* SYS_exit is 1 */
|
||||
xorl %%ebx,%%ebx; /* Argument is in ebx, it is 0 */
|
||||
int $0x80" /* Enter kernel mode */
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
Exit 的系统调用号是 1,同时它的参数是 0。因此我们分配 eax 包含 1,ebx 包含 0,同时通过 `int $0x80` 执行 `exit(0)`。这就是 exit 的工作原理。
|
||||
|
||||
* * *
|
||||
|
||||
## 8. 结束语
|
||||
|
||||
这篇文档已经将 GCC 内联汇编过了一遍。一旦你理解了基本概念,你就可以按照自己的需求去使用它们了。我们看了许多例子,它们有助于理解 GCC 内联汇编的常用特性。
|
||||
|
||||
GCC 内联是一个极大的主题,这篇文章是不完整的。更多关于我们讨论过的语法细节可以在 GNU 汇编器的官方文档上获取。类似地,要获取完整的约束列表,可以参考 GCC 的官方文档。
|
||||
|
||||
当然,Linux 内核大量地使用了 GCC 内联。因此我们可以在内核源码中发现许多各种各样的例子。它们可以帮助我们很多。
|
||||
|
||||
如果你发现任何的错别字,或者本文中的信息已经过时,请告诉我们。
|
||||
|
||||
* * *
|
||||
|
||||
## 9. 参考
|
||||
|
||||
1. [Brennan’s Guide to Inline Assembly](http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html)
|
||||
2. [Using Assembly Language in Linux](http://linuxassembly.org/articles/linasm.html)
|
||||
3. [Using as, The GNU Assembler](http://www.gnu.org/manual/gas-2.9.1/html_mono/as.html)
|
||||
4. [Using and Porting the GNU Compiler Collection (GCC)](http://gcc.gnu.org/onlinedocs/gcc_toc.html)
|
||||
5. [Linux Kernel Source](http://ftp.kernel.org/)
|
||||
|
||||
* * *
|
||||
|
||||
via: http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
|
||||
|
||||
作者:[Sandeep.S](mailto:busybox@sancharnet.in) 译者:[cposture](https://github.com/cposture) 校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
@ -0,0 +1,232 @@
|
||||
KDE 的19年进化历程
|
||||
================
|
||||
|
||||
注:youtube 视频
|
||||
<iframe width="660" height="371" src="https://www.youtube.com/embed/1UG4lQOMBC4?feature=oembed" frameborder="0" allowfullscreen></iframe>
|
||||
|
||||
## 概述
|
||||
|
||||
KDE – 史上功能最强大的桌面环境之一;开源且可自由使用。19年前,1996年10月14日,德国程序员 Matthias Ettrich 开始了这个美观的桌面环境的开发。KDE 提供了用户界面以及其他很多日常使用的程序。今日,KDE 被成千上万人在 Unix 和 Windows 上使用。19年,一个对软件项目而言极为漫长的年岁。现在是时候让我们回到最初,看看这一切肇始于何处。
|
||||
|
||||
K Desktop Environment(KDE)有很多创新之处:新设计,美观,一致的体验,易于使用,对普通用户和专业用户都足够强大的应用库。“KDE”这个名字是对单词“通用桌面环境”(Common Desktop Environment)玩的一个简单谐音游戏,“K”即“Cool”。 第一代 KDE 在双许可证授权下使用了 Trolltech 公司专利的 Qt framework(现 Qt 的前身),这两个许可证分别是开源的 QPL(Q public license)和商业专利许可证(proprietary commercial license)。在2000年 Trolltech 公司让一部分 Qt 软件库开始发布在 GPL 证书下; Qt 4.5 发布在了 LGPL 2.1 许可证下。自2009起 KDE 桌面环境由三部分构成:Plasma Workspaces(用做交互界面),KDE Applications,作为 KDE Software 编译的 KDE Platform。
|
||||
|
||||
## 各发布版本
|
||||
|
||||
### 预发布版本 – 1996年10月14日
|
||||
|
||||
![](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/0b3.png)
|
||||
|
||||
当时名称为 Kool Desktop Environment;“Kool”这个单词在很快就被弃用了。最初,所有 KDE 的组件都是被单独发布在开发社区里的,它们并没有被一个大的项目所贯穿起来。开发组邮件列表中的首选通信是发往kde@fiwi02.wiwi.uni-Tubingen.de 邮件列表。
|
||||
|
||||
### KDE 1.0 – 1998年7月12日
|
||||
|
||||
![](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/10.png)
|
||||
|
||||
这个版本受到了颇有争议的反馈。很多人反对使用 Qt 框架,因为当时的 FreeQt 许可证和自由软件许可证并不兼容,他们建议开发组使用 Motif 或者 LessTif 替代。尽管有着这些反对声,KDE 仍然被很多用户所青睐,并且成功作为第一个 Linux 发行版的环境被集成了进去。
|
||||
|
||||
![28 January 1999](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/11.png)
|
||||
|
||||
*1999年1月28日*
|
||||
|
||||
有一次升级,**K Desktop Environment 1.1**,更快,更稳定的同时加入了很多小的改进。这个版本同时也加入了很多新的图标,背景和材质纹理。和这些全面翻新同时出现的还有 Torsten Rahn 绘制的全新 KDE 图标----一个放在齿轮前的字母 K ;这个图标的修改版也一直沿用至今。
|
||||
|
||||
### KDE 2.0 – 2000年10月23日
|
||||
|
||||
![](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/20.png)
|
||||
|
||||
重大更新:
|
||||
|
||||
- DCOP (Desktop COmmunication Protocol),一个端到端的通信协议
|
||||
- KIO,一个应用程序 I/O 库
|
||||
- KParts,组件对象模型
|
||||
- KHTML,一个符合 HTML 4.0 标准的渲染绘制引擎。
|
||||
|
||||
![26 February 2001](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/21.png)
|
||||
|
||||
*2001年2月26日*
|
||||
|
||||
**K Desktop Environment 2.1** 首次发布了媒体播放器 noatun,它使用了模组化、插件设计。为了便利开发者,K Desktop Environment 2.1 打包了 KDevelop。
|
||||
|
||||
![15 August 2001](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/22.png)
|
||||
|
||||
*2001年8月15日*
|
||||
|
||||
**KDE 2.2**版本在 GNU/Linux 上加快了50%的应用启动速度,同时提高了 HTML 渲染、JavaScript 稳定性和性能,同时还增加了一些 KMail 的功能。
|
||||
|
||||
### KDE 3.0 – 2002年4月3日
|
||||
|
||||
![](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/30.png)
|
||||
|
||||
K Desktop Environment 3.0 加入了更好的限制使用功能,这个功能在电话亭、网咖,企业公用电脑上被广泛需求,它可以禁止用户完全使用软件的某些能力。
|
||||
|
||||
![28 January 2003](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/31.png)
|
||||
|
||||
*2003年1月28日*
|
||||
|
||||
**K Desktop Environment 3.1** 加入了新的默认窗口(Keramik)和图标样式(Crystal)和其他一些改进。
|
||||
|
||||
![3 February 2004](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/32.png)
|
||||
|
||||
*2004年2月3日*
|
||||
|
||||
**K Desktop Environment 3.2** 加入了诸如在网页表格、书写邮件中拼写检查的新功能;增强了邮件和日历功能。完善了 Konqueror 中的标签机制和对 Microsoft Windows 桌面共享协议(RDP)的支持。
|
||||
|
||||
![19 August 2004](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/33.png)
|
||||
|
||||
*2004年8月19日*
|
||||
|
||||
**K Desktop Environment 3.3** 侧重于组合不同的桌面组件。Kontact 被放进了群件应用 Kolab 并与 Kpilot 结合。Konqueror 的加入让 KDE 有了更好的 IM 交流功能,比如支持发送文件,以及其他 IM 协议(如IRC)的支持。
|
||||
|
||||
![16 March 2005](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/34.png)
|
||||
|
||||
*2005年3月16日*
|
||||
|
||||
**K Desktop Environment 3.4** 侧重于提高易用性。这次更新为 Konqueror、Kate、KPDF 加入了文字-语音转换功能;也在桌面系统中加入了独立的 KSayIt 文字-语音转换软件。
|
||||
|
||||
![29 November 2005](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/35.png)
|
||||
|
||||
*2005年11月29日*
|
||||
|
||||
**The K Desktop Environment 3.5** 发布加入了 SuperKaramba,为桌面环境提供了易于安装的插件(widgets)机制。 Konqueror 加入了广告屏蔽功能并成为了有史以来第二个通过 Acid2 CSS 测试的浏览器。
|
||||
|
||||
### KDE SC 4.0 – 2008年1月11日
|
||||
|
||||
![](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/400.png)
|
||||
|
||||
大部分的开发投身于把最新的技术和开发框架整合进 KDE 4 当中。Plasma 和 Oxygen 是两次最大的用户界面风格变更。同时,Dolphin 替代 Konqueror 成为默认文件管理器,Okular 成为了默认文档浏览器。
|
||||
|
||||
![29 July 2008](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/401.png)
|
||||
|
||||
*2008年7月29日*
|
||||
|
||||
**KDE 4.1** 引入了一个在 PIM 和 Kopete 中共享使用的表情主题系统;引入了可以让用户便利地从互联网上一键下载数据的 DXS。同时引入了 GStreamer、QuickTime 和 DirectShow 9 Phonon 后端。加入了新应用如:
|
||||
|
||||
- Dragon Player
|
||||
- Kontact
|
||||
- Skanlite — 扫描仪软件
|
||||
- Step —— 物理模拟软件
|
||||
- 新游戏: Kdiamond、Kollision、KBreakout 和更多......
|
||||
|
||||
![27 January 2009](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/402.png)
|
||||
|
||||
*2009年1月27日*
|
||||
|
||||
**KDE 4.2** 被认为是在已经极佳的 KDE 4.1 基础上的又一次全面超越,同时也成为了大多数用户替换旧 3.5 版本的完美选择。
|
||||
|
||||
![4 August 2009](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/403.png)
|
||||
|
||||
*2009年8月4日*
|
||||
|
||||
**KDE 4.3** 修复了超过10000个 bug,同时加入了让近2000个用户要求的功能。整合一些新的技术例如:PolicyKit、NetworkManage & Geolocation services 等也是这个版本的一大重点。
|
||||
|
||||
![9 February 2010](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/404.png)
|
||||
|
||||
*2010年2月9日*
|
||||
|
||||
**KDE SC 4.4** 基于 Qt 4 toolkit 的 4.6 版本,加入新的应用 KAddressBook。
|
||||
|
||||
![10 August 2010](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/405.png)
|
||||
|
||||
*2010年8月10日*
|
||||
|
||||
**KDE SC 4.5** 增加了一些新特性:整合了开源的浏览器引擎 WebKit 库,其现在也在 Apple Safari 和 Google Chrome 中广泛使用。KPackageKit 替换了 Kpackage。
|
||||
|
||||
![26 January 2011](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/406.png)
|
||||
|
||||
*2011年1月26日*
|
||||
|
||||
**KDE SC 4.6** 加强了 OpenGl 的性能,同时照常更新了无数bug和小改进。
|
||||
|
||||
![27 July 2011](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/407.png)
|
||||
|
||||
*2011年7月27日*
|
||||
|
||||
**KDE SC 4.7** 升级 KWin 以兼容 OpenGL ES 2.0 ,更新了 Qt Quick,Plasma Desktop 带来许多增强和在应用里的大量新特性, 修复了1.2万个 bug。
|
||||
|
||||
![25 January 2012](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/408.png)
|
||||
|
||||
*2012年1月25日*
|
||||
|
||||
**KDE SC 4.8**: 更好的 KWin 性能与 Wayland 支持,更崭新的 Doplhin 的外观设计。
|
||||
|
||||
![1 August 2012](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/409.png)
|
||||
|
||||
*2012年8月1日*
|
||||
|
||||
**KDE SC 4.9**: 向 Dolphin 文件管理器增加了一些更新,比如重新加入了实时文件重命名,鼠标辅助按钮支持,更好的位置面板和更多文件分类管理功能。
|
||||
|
||||
![6 February 2013](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/410.png)
|
||||
|
||||
*2013年2月6日*
|
||||
|
||||
**KDE SC 4.10**: 很多 Plasma 插件使用 QML 重写; Nepomuk、Kontact 和 Okular 得到了很大程度的性能和功能提升。
|
||||
|
||||
![14 August 2013](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/411.png)
|
||||
|
||||
*2013年8月14日*
|
||||
|
||||
**KDE SC 4.11**: Kontact 和 Nepomuk 有了很多优化。 第一代 Plasma Workspaces 进入了单纯维护阶段。
|
||||
|
||||
![18 December 2013](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/412.png)
|
||||
|
||||
*2013年12月18日*
|
||||
|
||||
**KDE SC 4.12**: Kontact 得到了极大的提升,包括许多小的改进。
|
||||
|
||||
![16 April 2014](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/413.png)
|
||||
|
||||
*2014年4月16日*
|
||||
|
||||
**KDE SC 4.13**: Nepomuk 语义搜索功能替代了桌面上的原有的 Baloo 搜索。 KDE SC 4.13 以53个语言版本发布。
|
||||
|
||||
![20 August 2014](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/414.png)
|
||||
|
||||
*2014年8月20日*
|
||||
|
||||
**KDE SC 4.14**: 这个发布版本侧重于稳定性提升:大量的 bug 修复和增加了一些小的功能。这是最后一个 KDE SC 4 发布版本。
|
||||
|
||||
### KDE Plasma 5.0 – 2014年7月15日
|
||||
|
||||
![](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/500.png)
|
||||
|
||||
KDE Plasma 5 – 第五代 KDE。大幅改进了设计和系统,新的默认主题 Breeze 完全迁移到了 QML,更好的 OpenGL 性能,更完美的 HiDPI (高分辨率)显示支持。
|
||||
|
||||
![11 November 2014](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/501.png)
|
||||
|
||||
*2014年11月11日*
|
||||
|
||||
**KDE Plasma 5.1**:迁移了从 Plasma 4 里丢失的功能。
|
||||
|
||||
![27 January 2015](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/502.png)
|
||||
|
||||
*2015年1月27日*
|
||||
|
||||
**KDE Plasma 5.2**:新组件:BlueDevil、KSSHAskPass、Muon、SDDM 主题设置、KScreen、GTK+ 样式设置和 KDecoration。
|
||||
|
||||
![28 April 2015](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/503.png)
|
||||
|
||||
*2015年4月28日*
|
||||
|
||||
**KDE Plasma 5.3**:Plasma Media Center 技术预览。新的蓝牙和触摸板小程序;改良了电源管理。
|
||||
|
||||
![25 August 2015](https://github.com/paulcarroty/Articles/raw/master/KDE_History/im/504.png)
|
||||
|
||||
*2015年8月25日*
|
||||
|
||||
**KDE Plasma 5.4**:Wayland 登场,新的基于 QML 的音频管理程序,一个全屏的程序启动器替代品。
|
||||
|
||||
万分感谢 [KDE][1] 开发者及社区,并感谢 Wikipedia 为书写 [概述][2] 带来的帮助,同时,感谢所有读者。让我们保持自由精神(be free)并继续支持如同 KDE 一样的开源的自由软件发展。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: [https://tlhp.cf/kde-history/](https://tlhp.cf/kde-history/)
|
||||
|
||||
作者:[Pavlo Rudyi][a]
|
||||
译者:[Moelf](https://github.com/Moelf)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[1]: https://www.kde.org/
|
||||
[2]: https://en.wikipedia.org/wiki/KDE_Plasma_5
|
||||
[a]: https://tlhp.cf/author/paul/
|
@ -0,0 +1,88 @@
|
||||
在大学培养学生们参与开源代码开发的十四个技巧
|
||||
================================================================================
|
||||
|
||||
![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/education/EDU_TeachingOS.png)
|
||||
|
||||
学术界是培养和塑造未来的开源开发者的最佳平台。研究中发现,我们偶尔会开源自己编写的软件。这样做有两个理由,一是为了推广自己编写的工具的使用,二是为了了解人们使用这些工具时会遇到哪些问题。在这样一个编写研究软件的背景下,我的任务就是为 Bradford 大学重新设计二年级的本科软件工程课程。
|
||||
|
||||
这是一个挑战,因为我所面对的 80 个学生是来自不同专业的,包括 IT、商务计算和软件工程,这些学生将要在一起上课。最有难度的是,需要和这些编程经验差距很大的学生一起编写代码。按照传统,该课程允许学生选择自己的小组,然后给他们布置构建一个加油站数据库系统的任务,最后提交报告作为评估的一部分。
|
||||
|
||||
而我决定重新设计课程,让学生了解现实中的软件团队是如何协作的过程。根据学生的专业和编程技能,我将他们分为五、六个人一组。这是为了确保每个小组的整体水平相当,避免小组之间的不等。
|
||||
|
||||
### 核心课程 ###
|
||||
|
||||
课程的形式改为讲座和实践课两项结合在一起。然而实践课作为指导过程,主要是老师监督各个小组的实践进度以及他们如何处理客户和产品之间的关系。而传统的教学方式由项目管理、软件测试、工程需求分析以及类似主题的讲座组成,再辅以实践和导师会议。这些会议可以很好的考核学生的水平以及检测出他们是否可以跟得上我们在讲座部分中的软件工程方法。本年的教学主题包括以下内容:
|
||||
|
||||
- 工程需求分析
|
||||
- 如何与客户及其他团队成员互动
|
||||
- 程序设计方法,如敏捷和极限编程方法
|
||||
- 如何通过学习不同的软件工程方法进行短期的水平提高
|
||||
- 小组会议及文档编写
|
||||
- 项目管理及项目进展图表(甘特图)
|
||||
- UML 图表及系统描述
|
||||
- 使用 Git 来进行代码的版本控制
|
||||
- 软件测试及 BUG 跟踪
|
||||
- 使用开源库
|
||||
- 开源代码许可及其选择
|
||||
- 软件交付
|
||||
|
||||
在这些讲座之后,会有一些来自世界各地的嘉宾为我们说说他们在软件交付过程中的经验。我们也设法请来大学里知识产权律师谈关于软件在英国的知识产权问题,以及如何处理软件的知识产权问题。
|
||||
|
||||
### 协作工具 ###
|
||||
|
||||
为了让上述教学内容的顺利进行,我们将会引入一些工具,并训练学生在他们的项目中使用这些工具。如下:
|
||||
|
||||
- Google Drive:团队与导师之间进行共享的工具,暂时存储用于描述项目的文档和图表、需求收集、会议纪要以及项目时间跟踪等信息。采取这样一个方式来监控并提供直接反馈到每个团队,是非常有效的。
|
||||
- [Basecamp][1]:同样是用于分享文档,在随后的课程中,我们可能会考虑用它取代 Google Drive。
|
||||
- BUG 报告工具,如 [Mantis][2]:只能让有限的用户免费提交 BUG。稍后我们提到的 Git 可以让小组内的所有人员用做 BUG 提交。
|
||||
- 远程视频会议工具:在人员不在校内,甚至去了其他城市的情况下使用。学生们可以定期通过 Skype 来交流并记录会议内容或则进行录音作为今后其他用处。
|
||||
- 同时,学生们的项目中还会用到大量的开源工具包。他们可以根据自己小组的项目需求来选择自己使用的工具包和编程语言。唯一的条件是,这些项目必须开源,最后成果可以安装到大学里的实验室,并且大多的研究人员都非常支持这个条件。
|
||||
- 最后,所有团队必须向客户交付他们的项目,包括完整的可以工作的软件版本、文档和他们自己选择的开放源码许可。大多数的团队选择了 GPLv3 许可证。
|
||||
|
||||
### 技巧和经验教训 ###
|
||||
|
||||
在最后,这一年过的很愉快,并且所有学生的项目都做的非常棒。这里有一些我学到的经验教训,可能有助于提高明年的课程质量:
|
||||
|
||||
1. 提供各种各样有趣的选择项目给学生选择。比如说,游戏开发或者移动应用开发以及完成各种目标的项目等。建立普通的数据库系统已经不能提起学生的兴趣了,而参与到有趣的项目中去,学生本身就是自学者,同时可以帮助解决小组成员和小组之间的常见问题。再通过一个消息列表,学生们发表他们在测试中遇到的任何问题,以寻求其他人的帮助建议。然而,这种方法有一个缺点。外部考官建议我们使用统一种类型的项目和统一的编程语言以帮助缩小对学生的评估标准。
|
||||
|
||||
2. 定期给学生在每一个阶段的表现进行反馈。比方说,可以在和各个小组开指导会议的时候,或者每个阶段进行反馈,以帮助他们在接下来的工作中自我改进。
|
||||
|
||||
3. 学生更加愿意与校外的客户一起协作。他们期待着与外部公司代表或校外人员协作,不过是为了获得新体验而已。与导师进行交流时,他们都能够表现得很专业,这样使得老师非常放心。
|
||||
|
||||
4. 很多团队版将开发单元测试的部分放到项目结束之后,从极限编程方法的角度来说,这是一个严重的禁忌。也许测试应包括在不同阶段的评估中,来提醒他们需要并行开展软件开发和单元测试。
|
||||
|
||||
5. 在这个班的 80 个人里边,仅有 4 个女生,每个女生都分在不同的小组里边。我观察到,男生们总是充分准备好来承担起领队角色,并将最有趣的代码部分留给他们自己来编写,女生则多大遵循安排或者是编写文档。出于某种原因,女生选择不出头,即使在女性辅导员鼓励下,她们也不愿编写代码。这仍然是一个需要解决的主要问题。
|
||||
|
||||
6. 允许不同风格项目文档,比方说,UML 图表、状态图或其他形式的。让学生学习这些并与其他课程融汇贯通来提高他们的学习经验。
|
||||
|
||||
7. 学生里边,有些是很好的开发人员,有些做商务计算的则没有多少编程经验。我们要鼓励团队共同努力,避免开发人员做得比那些只做会议记录或文档的其他成员更好的错误认知。我们常在辅导课程中鼓励角色转换,让每个人都有机会学习如何编程。
|
||||
|
||||
8. 小组与导师每周见面沟通是非常重要的,可以有效监督各个小组进展情况,还可以了解是谁做了大部分工作。通常,没来参加会议的小组成员基本就是没有参与到他们的团队工作中去的,并且通过其他成员所提交的工作报告也可以确定哪些人不活跃。
|
||||
|
||||
9. 我们鼓励学生们把许可证附加到项目中去,使用外部库以及和客户协作的时候要表明确切知识产权问题。 这样可让打破陈规,开拓思维,并了解真实的软件交付问题。
|
||||
|
||||
10. 给学生们自己选择所用技术的空间。
|
||||
|
||||
11. 助教是关键。同时管理 80 个学生显然很有难度,特别是需要对他们进行评估的那几周。明年我一定会找个助教来帮我一起管理各个小组。
|
||||
|
||||
12. 实验室的技术支持是非常重要的。大学里的技术支持人员对于本课程是非常赞同的。他们正在考虑明年将虚拟机分配给每个团队,这样没个团队可以根据需要自行在虚拟机中安装任何软件。
|
||||
|
||||
13. 团队合作,相互帮助。大多数团队自然而然的支持其他团队成员,同时指导员在中间也帮助了不少。
|
||||
|
||||
14. 来自其他同事的帮助会锦上添花。作为一名新的大学导师,我需要从经验中学习,如果我想了解如何管理某些学生和团队,或者对如何让学生适应课程感到困惑时,我会通过多个方面来寻求建议。来自资深同事的支持对我来说是一种极大的鼓励。
|
||||
|
||||
最后,对于作为导师的我以及所有的学生来说,这都是个有趣的课程。在学习目标和传统评分方案上还有有一些问题需解决,以减少教师的工作量。明年,我计划会保留这种教学模式,并希望能够提出更好的评分方案以及引入更多的软件来帮助监督项目和控制代码版本。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://opensource.com/education/15/9/teaching-open-source-development-undergraduates
|
||||
|
||||
作者:[Mariam Kiran][a]
|
||||
译者:[GHLandy](https://github.com/GHLandy)
|
||||
校对:[Caroline](https://github.com/carolinewuyan)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://opensource.com/users/mariamkiran
|
||||
[1]:https://basecamp.com/
|
||||
[2]:https://www.mantisbt.org/
|
@ -0,0 +1,66 @@
|
||||
sed 和 awk,所有的 Linux 管理员都应该会的技能!
|
||||
==========================
|
||||
|
||||
![](http://images.techhive.com/images/article/2015/03/linux-100573790-primary.idge.jpg)
|
||||
|
||||
*图片来源: Shutterstock*
|
||||
|
||||
**我们不要让下一代 Linux 和 Unix 的管理员忘记初始化脚本和基本工具的好处**
|
||||
|
||||
我曾经有一次在 Reddit 看到一个帖子,“[请问如何操作文本文件][1]”。这是一个很简单的需求,就像我们常用 Unix 的人每天遇到的一样。他的问题是,如何删除文件中的重复行,只保留不重复的。 这听起来似乎很简单,但是当文件足够大时,就会有些复杂。
|
||||
|
||||
这个问题有很多种不同的答案。你可以使用几乎任何一种语言来写这样的一个脚本,只是时间的投入和代码的复杂性不同罢了。根据你的个人水平,它大概会花费20-60分钟。但是如果你使用了 Perl、Python、Ruby 中的一种,你可能很快实现它。
|
||||
|
||||
或者你可以使用下面的一个方法,让你无比暖心的: 只用 awk。
|
||||
|
||||
这个答案是迄今为止最简明、最简单的解决问题的方法。它只要一行!
|
||||
|
||||
```
|
||||
awk '!seen[$0]++' <filename>
|
||||
```
|
||||
|
||||
让我们来看看发生了什么:
|
||||
|
||||
在这个命令中,其实隐藏了很多代码。awk 是一种文本处理语言,并且它内部有很多预设。首先,你看到的实际上是一个 for 循环的结果。awk 假定你想通过循环处理输入文件的每一行,所以你不需要明确的去指定它。awk 还假定了你需要打印输出处理后的数据,所以你也不需要去指定它。最后,awk 假定循环在最后一句指令执行完结束,这一块也不再需要你去指定它。
|
||||
|
||||
这个例子中的字符串 seen 是一个关联数组的名字。$0 是一个变量,表示整个当前行。所以,这个命令翻译成人类语言就是“对这个文件的每一行进行检查,如果你之前没有见过它,就打印出来。” 如果该关联数组的键名还不存在就添加到数组,并增加其取值,这样 awk 下次遇到同样的行时就会不匹配(条件判断为“假”),从而不打印出来。
|
||||
|
||||
一些人认为这样是优雅的,另外的人认为这可能会造成混淆。任何在日常工作上使用 awk 的都是第一类人。awk 就是设计用来做这个的。在 awk 中,你可以写多行代码。你甚至可以[用 awk 写一些让人不安的复杂功能][2]。但终究来说,awk 还是一个进行文本处理的程序,一般是通过管道。去掉(没必要的)循环定义是很常见的快捷用法,不过如果你乐意,你也可以用下面的代码做同样的事情:
|
||||
|
||||
|
||||
```
|
||||
awk '{ if (!seen[$0]) print $0; seen[$0]++ }’
|
||||
```
|
||||
|
||||
这会产生相同的结果。
|
||||
|
||||
awk 是完成这项工作的完美工具。不过,我相信很多管理员--特别是新管理员会转而使用 [Bash][3] 或 Python 来完成这一任务,因为对 awk 的知识和对它的能力的了解看起来随着时间而慢慢被人淡忘。我认为这是标志着一个问题,由于对之前的解决方案缺乏了解,那些已经解决了几十年的问题又突然出现了。
|
||||
|
||||
shell、grep、sed 和 awk 是 Unix 的基础。如果你不能非常轻松的使用它们,你将会被自己束缚住,因为它们构成了通过命令行和脚本与 Unix 系统交互的基础。学习这些工具如何工作最好的方法之一就是观察真实的例子和实验,你可以在各种 Unix 衍生系统的初始化系统中找到很多,但在 Linux 发行版中它们已经被 [systemd][4] 取代了。
|
||||
|
||||
数以百万计的 Unix 管理员了解 Shell 脚本和 Unix 工具如何读、写、修改和用在初始化脚本上。不同系统的初始化脚本有很大不同,甚至是不同的 Linux 发行版也不同。但是它们都源自 sh,而且它们都用像 sed、awk 还有 grep 这样的核心的命令行工具。
|
||||
|
||||
我每天都会听到很多人抱怨初始化脚本太“古老”而且很“难”。但是实际上,初始化脚本和 Unix 管理员每天使用的工具一样,还提供了一个非常好的方式来更加熟悉和习惯这些工具。说初始化脚本难于阅读和难于使用实际上是承认你缺乏对 Unix 基础工具的熟悉。
|
||||
|
||||
说起在 Reddit 上看到的内容,我也碰到过这个问题,来自一个新入行的 Linux 系统管理员, “[问他是否应该还要去学老式的初始化系统 sysvinit][5]”。 这个帖子的大多数的答案都是正面的——是的,应该学习 sysvinit 和 systemd 两个。一位评论者甚至指出,初始化脚本是学习 Bash 的好方法。而另一个消息是,Fortune 50 强的公司还没有计划迁移到以 systemd 为基础的发行版上。
|
||||
|
||||
但是,这提醒了我这确实是一个问题。如果我们继续沿着消除脚本和脱离操作系统核心组件的方式发展下去,由于疏于接触,我们将会不经意间使新管理员难于学习基本的 Unix 工具。
|
||||
|
||||
我不知道为什么有些人想在一层又一层的抽象化来掩盖 Unix 内部,但是这样发展下去可能会让新一代的系统管理员们变成只会按下按钮的工人。我觉得这不是一件好事情。
|
||||
|
||||
------
|
||||
|
||||
via: http://www.infoworld.com/article/2985804/linux/remember-sed-awk-linux-admins-should.html
|
||||
|
||||
作者:[Paul Venezia][a]
|
||||
译者:[Bestony](https://github.com/Bestony)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: http://www.infoworld.com/author/Paul-Venezia/
|
||||
[1]: https://www.reddit.com/r/linuxadmin/comments/3lwyko/how_do_i_remove_every_occurence_of_duplicate_line/
|
||||
[2]: http://intro-to-awk.blogspot.com/2008/08/awk-more-complex-examples.html
|
||||
[3]: http://www.infoworld.com/article/2613338/linux/linux-how-to-script-a-bash-crash-course.html
|
||||
[4]: http://www.infoworld.com/article/2608798/data-center/systemd--harbinger-of-the-linux-apocalypse.html
|
||||
[5]: https://www.reddit.com/r/linuxadmin/comments/3ltq2y/when_i_start_learning_about_linux_administration/
|
@ -0,0 +1,64 @@
|
||||
DFileManager:封面流(CoverFlow)文件管理器
|
||||
================================================================================
|
||||
|
||||
这个一个 Ubuntu 标准软件仓库中缺失的像宝石般的、有着其独特的功能的文件管理器。这是 DFileManager 在推特中的宣称。
|
||||
|
||||
有一个不好回答的问题,如何知道到底有多少个 Linux 的开源软件?好奇的话,你可以在 Shell 里输入如下命令:
|
||||
|
||||
~$ for f in /var/lib/apt/lists/*Packages; do printf '%5d %s\n' $(grep '^Package: ' "$f" | wc -l) ${f##*/} done | sort -rn
|
||||
|
||||
在我的 Ubuntu 15.04 系统上,产生结果如下:
|
||||
|
||||
![Ubuntu 15.04 Packages](http://www.linuxlinks.com/portal/content/reviews/FileManagers/UbuntuPackages.png)
|
||||
|
||||
正如上面的截图所示,在 Universe 仓库中,大约有39000个包,在 main 仓库中大约有8500个包。这听起来很多。但是这些包括了开源应用、工具、库,有很多不是由 Ubuntu 开发者打包的。更重要的是,有很多重要的软件不在库中,只能通过源代码编译。DFileManager 就是这样一个软件。它是仍处在开发早期的一个基于 QT 的跨平台文件管理器。QT提供单一源码下的跨平台可移植性。
|
||||
|
||||
现在还没有二进制文件包,用户需要编译源代码才行。对于一些工具来说,这个可能会产生很大的问题,特别是如果这个应用依赖于某个复杂的依赖库,或者需要与已经安装在系统中的软件不兼容的某个版本。
|
||||
|
||||
### 安装 ###
|
||||
|
||||
幸运的是,DFileManager 非常容易编译。对于我的老 Ubutnu 机器来说,在开发者网站上的安装介绍提供了大部分的重要步骤,不过少量的基础包没有列出(为什么总是这样?虽然许多库会让文件系统变得一团糟!)。在我的系统上,从github 下载源代码并且编译这个软件,我在 Shell 里输入了以下命令:
|
||||
|
||||
~$ sudo apt-get install qt5-default qt5-qmake libqt5x11extras5-dev
|
||||
~$ git clone git://git.code.sf.net/p/dfilemanager/code dfilemanager-code
|
||||
~$ cd dfilemananger-code
|
||||
~$ mkdir build
|
||||
~$ cd build
|
||||
~$ cmake ../ -DCMAKE_INSTALL_PREFIX=/usr
|
||||
~$ make
|
||||
~$ sudo make install
|
||||
|
||||
你可以通过在shell中输入如下命令来启动它:
|
||||
|
||||
~$ dfm
|
||||
|
||||
下面是运行中的 DFileManager,完全展示了其最吸引人的地方:封面流(Cover Flow)视图。可以在当前文件夹的项目间滑动,提供了一个相当有吸引力的体验。这是看图片的理想选择。这个文件管理器酷似 Finder(苹果操作系统下的默认文件管理器),可能会吸引你。
|
||||
|
||||
![DFileManager in action](http://www.linuxlinks.com/portal/content/reviews/FileManagers/Screenshot-dfm.png)
|
||||
|
||||
### 特点: ###
|
||||
|
||||
- 4种视图:图标、详情、列视图和封面流
|
||||
- 按位置和设备归类书签
|
||||
- 标签页
|
||||
- 简单的搜索和过滤
|
||||
- 自定义文件类型的缩略图,包括多媒体文件
|
||||
- 信息栏可以移走
|
||||
- 单击打开文件和目录
|
||||
- 可以排队 IO 操作
|
||||
- 记住每个文件夹的视图属性
|
||||
- 显示隐藏文件
|
||||
|
||||
DFileManager 不是 KDE 的 Dolphin 的替代品,但是能做相同的事情。这个是一个真正能够帮助人们的浏览文件的文件管理器。还有,别忘了反馈信息给开发者,任何人都可以做出这样的贡献。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://gofk.tumblr.com/post/131014089537/dfilemanager-cover-flow-file-manager-a-real-gem
|
||||
|
||||
作者:[gofk][a]
|
||||
译者:[bestony](https://github.com/bestony)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://gofk.tumblr.com/
|
@ -0,0 +1,32 @@
|
||||
黑客们成功地在土豆上安装了 Linux !
|
||||
================================================================================
|
||||
|
||||
来自荷兰阿姆斯特丹的消息称,LinuxOnAnything.nl 网站的黑客们成功地在土豆上安装了 Linux!这是该操作系统第一次在根用蔬菜(root vegetable)上安装成功(LCTT 译注:root vetetable,一语双关,root 在 Linux 是指超级用户)。
|
||||
|
||||
![Linux Potato](http://www.bbspot.com/Images/News_Features/2008/12/linux-potato.jpg)
|
||||
|
||||
“土豆没有 CPU,内存和存储器,这真的是个挑战,” Linux On Anything (LOA) 小组的 Johan Piest 说。“显然我们不能使用一个像 Fedora 或 Ubuntu 这些体量较大的发行版,所以我们用的是 Damn Small Linux。”
|
||||
|
||||
在尝试了几周之后,LOA 小组的的同学们弄出了一个适合土豆的 Linux 内核,这玩艺儿上面可以用 vi 来编辑小的文本文件。这个 Linux 通过一个小型的 U 盘加载到土豆上,并通过一组红黑线以二进制的方式向这个土豆发送命令。
|
||||
|
||||
LOA 小组是一个不断壮大的黑客组织的分支;这个组织致力于将 Linux 安装到所有物体上;他们先是将 Linux 装到Gameboy 和 iPod 等电子产品上,不过最近他们在挑战一些高难度的东西,譬如将Linux安装到灯泡和小狗身上!
|
||||
|
||||
LOA 小组在与另一个黑客小组 Stuttering Monarchs 竞赛,看谁先拿到土豆这一分。“土豆是一种每个人都会接触到的蔬菜,它的用途就像 Linux 一样极其广泛。无论你是想煮捣烹炸还是别的都可以” Piest 说道,“你也许认为我们完成这个挑战是为了获得某些好处,而我们只是追求逼格而已。”
|
||||
|
||||
LOA 是第一个将 Linux 安装到一匹设德兰矮种马上的小组,但这五年来竞争愈演愈烈,其它黑客小组的进度已经反超了他们。
|
||||
|
||||
“我们本来可以成为在饼干上面安装 Linux 的第一个小组,但是那群来自挪威的混蛋把我们击败了。” Piest 说。
|
||||
|
||||
第一个成功安装了 Linux 的蔬菜是一头卷心菜,它是由一个土耳其的一个黑客小组完成的。
|
||||
|
||||
(好啦——是不是已经目瞪口呆,事实上,这是一篇好几年前的恶搞文,你看出来了吗?哈哈哈哈)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.bbspot.com/news/2008/12/linux-on-a-potato.html
|
||||
|
||||
作者:[Brian Briggs](briggsb@bbspot.com)
|
||||
译者:[StdioA](https://github.com/StdioA), [hittlle](https://github.com/hittlle)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
@ -1,12 +1,13 @@
|
||||
如何在 Ubuntu / Fedora / Debian 中安装 GitLab
|
||||
如何在 Ubuntu/Fedora/Debian 中安装 GitLab
|
||||
================================================================================
|
||||
在 Git 问世之前,分布式版本控制从来都不是一件简单的事。Git 是一个免费、开源的软件,旨在轻松且快速地对从小规模到非常巨大的项目进行管理。Git 最开始由 Linus Torvalds 开发,他同时也是著名的 Linux 内核的创建者。在 git 和分布式版本控制系统领域中,[GitLab][1] 是一个极棒的新产品。它是一个基于 web 的 Git 仓库管理应用,包含代码审查、wiki、问题跟踪等诸多功能。使用 GitLab 可以很方便、快速地创建、审查、部署及托管代码。与 Github 类似,尽管它也提供在其官方的服务器托管免费的代码仓库,但它也可以运行在我们自己的服务器上。GitLab 有两个不同的版本:社区版(Community Edition)和企业版(Enterprise Edition)。社区本完全免费且开源,遵循 MIT 协议;而企业版则遵循一个专有的协议,包含一些社区版中没有的功能。下面介绍的是有关如何在我们自己的运行着 Ubuntu、Fedora 或 Debian 操作系统的机子上安装 GitLab 社区版的简单步骤。
|
||||
|
||||
在 Git 问世之前,分布式版本控制从来都不是一件简单的事。Git 是一个自由开源的软件,旨在轻松且快速地对从小规模到非常巨大的项目进行管理。Git 最开始由 Linus Torvalds 开发,他同时也是著名的 Linux 内核的创建者。在 git 和分布式版本控制系统领域中,[GitLab][1] 是一个极棒的新产品。它是一个基于 web 的 Git 仓库管理应用,包含代码审查、wiki、问题跟踪等诸多功能。使用 GitLab 可以很方便、快速地创建、审查、部署及托管代码。尽管它在其官方的服务器提供了与 Github 类似的免费托管的代码仓库,但它也可以运行在我们自己的服务器上。GitLab 有两个不同的版本:社区版(Community Edition)和企业版(Enterprise Edition)。社区版本完全免费且开源,遵循 MIT 协议;而企业版则遵循一个专有的协议,包含一些社区版中没有的功能。下面介绍的是有关如何在我们自己的运行着 Ubuntu、Fedora 或 Debian 操作系统的机器上安装 GitLab 社区版的简单步骤。
|
||||
|
||||
### 1. 安装先决条件 ###
|
||||
|
||||
首先,我们需要安装 GitLab 所依赖的软件包。我们将安装 `curl`,用以下载我们所需的文件;安装`openssh-server` ,以此来通过 ssh 协议登陆到我们的机子上;安装`ca-certificates`,用它来添加 CA 认证;以及 `postfix`,把它作为一个 MTA(Mail Transfer Agent,邮件传输代理)。
|
||||
首先,我们需要安装 GitLab 所依赖的软件包。我们将安装 `curl`,用以下载我们所需的文件;安装`openssh-server` ,以此来通过 ssh 协议登录到我们的机器上;安装`ca-certificates`,用它来添加 CA 认证;以及 `postfix`,把它作为一个 MTA(Mail Transfer Agent,邮件传输代理)。
|
||||
|
||||
注: 若要安装 GitLab 社区版,我们需要一个至少包含 2 GB 内存和 2 核 CPU 的 linux 机子。
|
||||
注: 若要安装 GitLab 社区版,我们需要一个至少包含 2 GB 内存和 2 核 CPU 的 linux 机器。
|
||||
|
||||
#### 在 Ubuntu 14 .04/Debian 8.x 中 ####
|
||||
|
||||
@ -18,7 +19,7 @@
|
||||
|
||||
#### 在 Fedora 22 中 ####
|
||||
|
||||
在 Fedora 22 中,由于 `yum` 已经被弃用了,所以默认的包管理器是 `dnf`。为了安装上面那些需要的软件包,我们只需运行下面的 dnf 命令:
|
||||
在 Fedora 22 中,由于 `yum` 已经被弃用了,默认的包管理器是 `dnf`。为了安装上面那些需要的软件包,我们只需运行下面的 dnf 命令:
|
||||
|
||||
# dnf install curl openssh-server postfix
|
||||
|
||||
@ -26,11 +27,11 @@
|
||||
|
||||
### 2. 打开并开启服务 ###
|
||||
|
||||
现在,我们将使用我们默认的 init 系统来打开 sshd 和 postfix 服务。并且我们将使得它们在每次系统启动时被自动开启。
|
||||
现在,我们将使用我们默认的初始化系统来打开 sshd 和 postfix 服务。并且我们将使得它们在每次系统启动时被自动开启。
|
||||
|
||||
#### 在 Ubuntu 14.04 中 ####
|
||||
|
||||
由于 SysVinit 在 Ubuntu 14.04 中作为 init 系统被安装,我们将使用 service 命令来开启 sshd 和 postfix 守护进程:
|
||||
由于在 Ubuntu 14.04 中安装的是 SysVinit 初始化系统,我们将使用 service 命令来开启 sshd 和 postfix 守护进程:
|
||||
|
||||
# service sshd start
|
||||
# service postfix start
|
||||
@ -42,24 +43,24 @@
|
||||
|
||||
#### 在 Fedora 22/Debian 8.x 中 ####
|
||||
|
||||
鉴于 Fedora 22 和 Debi 8.x 已经用 Systemd 代替了 SysVinit 来作为默认的 init 系统,我们只需运行下面的命令来开启 sshd 和 postfix 服务:
|
||||
鉴于 Fedora 22 和 Debian 8.x 已经用 Systemd 代替了 SysVinit 来作为默认的初始化系统,我们只需运行下面的命令来开启 sshd 和 postfix 服务:
|
||||
|
||||
# systemctl start sshd postfix
|
||||
|
||||
现在,为了使得它们在每次开机启动时被自动地开启,我们需要运行下面的 systemctl 命令:
|
||||
现在,为了使得它们在每次开机启动时可以自动运行,我们需要运行下面的 systemctl 命令:
|
||||
|
||||
# systemctl enable sshd postfix
|
||||
|
||||
从 /etc/systemd/system/multi-user.target.wants/sshd.service 建立软链接到 /usr/lib/systemd/system/sshd.service.
|
||||
从 /etc/systemd/system/multi-user.target.wants/postfix.service 建立软链接到 /usr/lib/systemd/system/postfix.service.
|
||||
Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib/systemd/system/sshd.service.
|
||||
Created symlink from /etc/systemd/system/multi-user.target.wants/postfix.service to /usr/lib/systemd/system/postfix.service.
|
||||
|
||||
### 3. 下载 GitLab ###
|
||||
|
||||
现在,我们将使用 curl 从官方的 GitLab 社区版仓库下载二进制安装文件。首先,为了得到所需文件的下载链接,我们需要浏览到该软件仓库的页面。为此,我们需要在运行着相应操作系统的 linux 机子上运行下面的命令。
|
||||
现在,我们将使用 curl 从官方的 GitLab 社区版仓库下载二进制安装文件。首先,为了得到所需文件的下载链接,我们需要浏览到该软件仓库的页面。为此,我们需要在运行着相应操作系统的 linux 机器上运行下面的命令。
|
||||
|
||||
#### 在 Ubuntu 14.04 中 ####
|
||||
|
||||
由于 Ubuntu 和 Debian 使用相同格式的 debian 文件,我们需要在 [https://packages.gitlab.com/gitlab/gitlab-ce?filter=debs][2] 下搜索所需版本的 GitLab,然后点击有着 ubuntu/trusty 标签的链接,这是因为我们运作着 Ubuntu 14.04。接着一个新的页面将会出现,我们将看到一个下载按钮,然后我们在它的上面右击,得到文件的链接,然后像下面这样使用 curl 来下载它。
|
||||
由于 Ubuntu 和 Debian 使用相同的 debian 格式的安装包,我们需要在 [https://packages.gitlab.com/gitlab/gitlab-ce?filter=debs][2] 下搜索所需版本的 GitLab,然后点击有着 ubuntu/trusty 标签的链接,即我们运行着的 Ubuntu 14.04。接着一个新的页面将会出现,我们将看到一个下载按钮,然后我们在它的上面右击,得到文件的链接,然后像下面这样使用 curl 来下载它。
|
||||
|
||||
# curl https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/trusty/gitlab-ce_8.1.2-ce.0_amd64.deb
|
||||
|
||||
@ -67,7 +68,7 @@
|
||||
|
||||
#### 在 Debian 8.x 中 ####
|
||||
|
||||
与 Ubuntu 类似,我们需要在 [https://packages.gitlab.com/gitlab/gitlab-ce?filter=debs][3] 页面中搜索所需版本的 GitLab,然后点击带有 debian/jessie 标签的链接,这是因为我们运行的是 Debian 8.x。接着,一个新的页面将会出现,然后我们在下载按钮上右击,得到文件的下载链接。最后我们像下面这样使用 curl 来下载该文件。
|
||||
与 Ubuntu 类似,我们需要在 [https://packages.gitlab.com/gitlab/gitlab-ce?filter=debs][3] 页面中搜索所需版本的 GitLab,然后点击带有 debian/jessie 标签的链接,即我们运行着的 Debian 8.x。接着,一个新的页面将会出现,然后我们在下载按钮上右击,得到文件的下载链接。最后我们像下面这样使用 curl 来下载该文件。
|
||||
|
||||
# curl https://packages.gitlab.com/gitlab/gitlab-ce/packages/debian/jessie/gitlab-ce_8.1.2-ce.0_amd64.deb/download
|
||||
|
||||
@ -83,11 +84,11 @@
|
||||
|
||||
### 4. 安装 GitLab ###
|
||||
|
||||
在相应的软件源被添加到我们的 linux 机子上之后,现在我们将使用相应 linux 发行版本中的默认包管理器来安装 GitLab 社区版。
|
||||
在相应的软件源被添加到我们的 linux 机器上之后,现在我们将使用相应 linux 发行版本中的默认包管理器来安装 GitLab 社区版。
|
||||
|
||||
#### 在 Ubuntu 14.04/Debian 8.x 中 ####
|
||||
|
||||
要在运行着 Ubuntu 14.04 或 Debian 8.x linux 发行版本的机子上安装 GitLab 社区版,我们只需运行如下的命令:
|
||||
要在运行着 Ubuntu 14.04 或 Debian 8.x linux 发行版本的机器上安装 GitLab 社区版,我们只需运行如下的命令:
|
||||
|
||||
# dpkg -i gitlab-ce_8.1.2-ce.0_amd64.deb
|
||||
|
||||
@ -95,7 +96,7 @@
|
||||
|
||||
#### 在 Fedora 22 中 ####
|
||||
|
||||
我们只需执行下面的 dnf 命令来在我们的 Fedora 22 机子上安装 GitLab。
|
||||
我们只需执行下面的 dnf 命令来在我们的 Fedora 22 机器上安装 GitLab。
|
||||
|
||||
# dnf install gitlab-ce-8.1.2-ce.0.el7.x86_64.rpm
|
||||
|
||||
@ -103,7 +104,7 @@
|
||||
|
||||
### 5. 配置和开启 GitLab ###
|
||||
|
||||
由于 GitLab 社区版已经成功地安装在我们的 linux 系统中了,接下来我们将要配置和开启它了。为此,我们需要运行下面的命令,这在 Ubuntu、Debian 和 Fedora 发行版本上都一样:
|
||||
GitLab 社区版已经成功地安装在我们的 linux 系统中了,接下来我们将要配置和开启它了。为此,我们需要运行下面的命令,这在 Ubuntu、Debian 和 Fedora 发行版本上都一样:
|
||||
|
||||
# gitlab-ctl reconfigure
|
||||
|
||||
@ -111,19 +112,19 @@
|
||||
|
||||
### 6. 允许通过防火墙 ###
|
||||
|
||||
假如在我们的 linux 机子中已经启用了防火墙程序,为了使得 GitLab 社区版的 web 界面可以通过网络进行访问,我们需要允许 80 端口通过防火墙,这个端口是 GitLab 社区版的默认端口。为此,我们需要运行下面的命令。
|
||||
假如在我们的 linux 机器中已经启用了防火墙程序,为了使得 GitLab 社区版的 web 界面可以通过网络进行访问,我们需要允许 80 端口通过防火墙,这个端口是 GitLab 社区版的默认端口。为此,我们需要运行下面的命令。
|
||||
|
||||
#### 在 Iptables 中 ####
|
||||
#### 在 iptables 中 ####
|
||||
|
||||
Ubuntu 14.04 默认安装和使用 Iptables。所以,我们将运行下面的 iptables 命令来打开 80 端口:
|
||||
Ubuntu 14.04 默认安装和使用的是 iptables。所以,我们将运行下面的 iptables 命令来打开 80 端口:
|
||||
|
||||
# iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
|
||||
|
||||
# /etc/init.d/iptables save
|
||||
|
||||
#### 在 Firewalld 中 ####
|
||||
#### 在 firewalld 中 ####
|
||||
|
||||
由于 Fedora 22 和 Debian 8.x 默认安装了 systemd,它包含了作为防火墙程序的 firewalld。为了使得 80 端口(http 服务) 能够通过 firewalld,我们需要执行下面的命令。
|
||||
由于 Fedora 22 和 Debian 8.x 默认安装了 systemd,它包含了作为防火墙程序的 firewalld。为了使得 80 端口(http 服务) 能够通过 firewalld,我们需要执行下面的命令。
|
||||
|
||||
# firewall-cmd --permanent --add-service=http
|
||||
|
||||
@ -139,13 +140,13 @@ Ubuntu 14.04 默认安装和使用 Iptables。所以,我们将运行下面的
|
||||
|
||||
![Gitlab Login Screen](http://blog.linoxide.com/wp-content/uploads/2015/10/gitlab-login-screen.png)
|
||||
|
||||
现在,为了登陆进面板,我们需要点击登陆按钮,它将询问我们的用户名和密码。然后我们将输入默认的用户名和密码,即 **root** 和 **5iveL!fe** 。在登陆进控制面板后,我们将被强制要求为我们的 GitLab root 用户输入新的密码。
|
||||
现在,为了登录进面板,我们需要点击登录按钮,它将询问我们的用户名和密码。然后我们将输入默认的用户名和密码,即 **root** 和 **5iveL!fe** 。在登录进控制面板后,我们将被强制要求为我们的 GitLab root 用户输入新的密码。
|
||||
|
||||
![Setting New Password Gitlab](http://blog.linoxide.com/wp-content/uploads/2015/10/setting-new-password-gitlab.png)
|
||||
|
||||
### 8. 创建仓库 ###
|
||||
|
||||
在我们成功地更改密码并登陆到我们的控制面板之后,现在,我们将为我们的新项目创建一个新的仓库。为此,我们需要来到项目栏,然后点击 **新项目** 绿色按钮。
|
||||
在我们成功地更改密码并登录到我们的控制面板之后,现在,我们将为我们的新项目创建一个新的仓库。为此,我们需要来到项目栏,然后点击 **新项目** 绿色按钮。
|
||||
|
||||
![Creating New Projects](http://blog.linoxide.com/wp-content/uploads/2015/10/creating-new-projects.png)
|
||||
|
||||
@ -153,13 +154,15 @@ Ubuntu 14.04 默认安装和使用 Iptables。所以,我们将运行下面的
|
||||
|
||||
![Creating New Project](http://blog.linoxide.com/wp-content/uploads/2015/10/configuring-git-project.png)
|
||||
|
||||
做完这些后,我们将能够使用任何包含基本 git 命令行的 Git 客户端来访问我们的 Git 仓库。我们可以看到在仓库中进行的任何活动,例如创建一个里程碑,管理 issue,合并请求,管理成员,便签,Wiki 等。
|
||||
做完这些后,我们将能够使用任何包含基本 git 命令行的 Git 客户端来访问我们的 Git 仓库。我们可以看到在仓库中进行的任何活动,例如创建一个里程碑,管理问题,合并请求,管理成员,便签,Wiki 等。
|
||||
|
||||
![Gitlab Menu](http://blog.linoxide.com/wp-content/uploads/2015/10/gitlab-menu.png)
|
||||
|
||||
### 总结 ###
|
||||
|
||||
GitLab 是一个用来管理 git 仓库的很棒的开源 web 应用。它有着漂亮,响应式的带有诸多酷炫功能的界面。它还打包有许多酷炫功能,例如管理群组,分发密钥,连续集成,查看日志,广播消息,钩子,系统 OAuth 应用,模板等。(注:OAuth 是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。--- 摘取自 [维基百科上的 OAuth 词条](https://zh.wikipedia.org/wiki/OAuth)) 它还可以和大量的工具进行交互如 Slack,Hipchat,LDAP,JIRA,Jenkins,很多类型的钩子和一个完整的 API。它至少需要 2 GB 的内存和 2 核 CPU 来流畅运行,支持多达 500 个用户,但它也可以被扩展到多个活动的服务器上。假如你有任何的问题,建议,回馈,请将它们写在下面的评论框中,以便我们可以提升或更新我们的内容。谢谢!
|
||||
GitLab 是一个用来管理 git 仓库的很棒的开源 web 应用。它有着漂亮的带有诸多酷炫功能的响应式界面。它还打包有许多酷炫功能,例如管理群组,分发密钥,持续集成,查看日志,广播消息,钩子,系统 OAuth 应用,模板等。(注:OAuth 是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。--- 摘取自 [维基百科上的 OAuth 词条](https://zh.wikipedia.org/wiki/OAuth)) 它还可以和大量的工具进行交互如 Slack,Hipchat,LDAP,JIRA,Jenkins,有很多类型的钩子和完整的 API。它至少需要 2 GB 的内存和 2 核 CPU 来流畅运行,支持多达 500 个用户,但它也可以被扩展到多个工作服务器上。
|
||||
|
||||
假如你有任何的问题,建议,回馈,请将它们写在下面的评论框中,以便我们可以提升或更新我们的内容。谢谢!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -167,7 +170,7 @@ via: http://linoxide.com/linux-how-to/install-gitlab-on-ubuntu-fedora-debian/
|
||||
|
||||
作者:[Arun Pyasi][a]
|
||||
译者:[FSSlc](https://github.com/FSSlc)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,171 @@
|
||||
Linux 101:最有效地使用 Systemd
|
||||
================================================================================
|
||||
干嘛要这么做?
|
||||
|
||||
- 理解现代 Linux 发行版中的显著变化;
|
||||
- 看看 Systemd 是如何取代 SysVinit 的;
|
||||
- 搞定单元(unit)和新的 journal 日志。
|
||||
|
||||
吐槽邮件、人身攻击、死亡威胁——Lennart Poettering,Systemd 的作者,对收到这些东西早就习以为常了。这位 Red Hat 公司的员工之前在 Google+ 上怒斥 FOSS 社区([http://tinyurl.com/poorlennart][1])的本质,悲痛且失望地表示:“那真是个令人恶心的地方”。他着重指出 Linus Torvalds 在邮件列表上言辞极其刻薄的帖子,并谴责这位内核的领导者为在线讨论定下基调,并使得人身攻击及贬抑之辞成为常态。
|
||||
|
||||
但为何 Poettering 会遭受如此多的憎恨?为何就这么个搞搞开源软件的人要忍受这等愤怒?答案就在于他的软件的重要性。如今大多数发行版中,Systemd 是 Linux 内核发起的第一个程序,并且它还扮演多种角色。它会启动系统服务、处理用户登录,每隔特定的时间执行一些任务,还有很多很多。它在不断地成长,并逐渐成为 Linux 的某种“基础系统”——提供系统启动和发行版维护所需的所有工具。
|
||||
|
||||
如今,在以下几点上 Systemd 颇具争议:它逃避了一些已经确立的 Unix 传统,例如纯文本的日志文件;它被看成是个“大一统”的项目,试图接管一切;它还是我们这个操作系统的支柱的重要革新。然而大多数主流发行版已经接受了(或即将接受)它,因此它就活了下来。而且它确实是有好处的:更快地启动,更简单地管理那些有依赖的服务程序,提供强大且安全的日志系统等。
|
||||
|
||||
因此在这篇教程中,我们将探索 Systemd 的特性,并向您展示如何最有效地利用这些特性。即便您此刻并不是这款软件的粉丝,读完本文后您至少可以更加了解和适应它。
|
||||
|
||||
![](http://narf-archive.com/pix/bd0fb252416206158627fb0b1bff9b4779dca13f.gif)
|
||||
|
||||
*这部没正经的动画片来自[http://tinyurl.com/m2e7mv8][2],它把 Systemd 塑造成一只狂暴的动物,吞噬它路过的一切。大多数批评者的言辞可不像这只公仔一样柔软。*
|
||||
|
||||
### 启动及服务 ###
|
||||
|
||||
大多数主流发行版要么已经采用 Systemd,要么即将在下个发布中采用(如 Debian 和 Ubuntu)。在本教程中,我们使用 Fedora 21(该发行版已经是 Systemd 的优秀实验场地)的一个预览版进行演示,但不论您用哪个发行版,要用到的命令和注意事项都应该是一样的。这是 Systemd 的一个加分点:它消除了不同发行版之间许多细微且琐碎的区别。
|
||||
|
||||
在终端中输入 `ps ax | grep systemd`,看到第一行,其中的数字 **1** 表示它的进程号是1,也就是说它是 Linux 内核发起的第一个程序。因此,内核一旦检测完硬件并组织好了内存,就会运行 `/usr/lib/systemd/systemd` 可执行程序,这个程序会按顺序依次发起其他程序。(在还没有 Systemd 的日子里,内核会去运行 `/sbin/init`,随后这个程序会在名为 SysVinit 的系统中运行其余的各种启动脚本。)
|
||||
|
||||
Systemd 的核心是一个叫*单元* (unit)的概念,它是一些存有关于服务(service)(在运行在后台的程序)、设备、挂载点、和操作系统其他方面信息的配置文件。Systemd 的其中一个目标就是简化这些事物之间的相互作用,因此如果你有程序需要在某个挂载点被创建或某个设备被接入后开始运行,Systemd 可以让这一切正常运作起来变得相当容易。(在没有 Systemd 的日子里,要使用脚本来把这些事情调配好,那可是相当丑陋的。)要列出您 Linux 系统上的所有单元,输入以下命令:
|
||||
|
||||
systemctl list-unit-files
|
||||
|
||||
现在,`systemctl` 是与 Systemd 交互的主要工具,它有不少选项。在单元列表中,您会注意到这儿有一些格式化:被使能(enabled)的单元显示为绿色,被禁用(disabled)的显示为红色。标记为“static”的单元不能直接启用,它们是其他单元所依赖的对象。若要限制输出列表只包含服务,使用以下命令:
|
||||
|
||||
systemctl list-unit-files --type=service
|
||||
|
||||
注意,一个单元显示为“enabled”,并不等于对应的服务正在运行,而只能说明它可以被开启。要获得某个特定服务的信息,以 GDM (Gnome Display Manager) 为例,输入以下命令:
|
||||
|
||||
systemctl status gdm.service
|
||||
|
||||
这条命令提供了许多有用的信息:一段给人看的服务描述、单元配置文件的位置、启动的时间、进程号,以及它所从属的 CGroups(用以限制各组进程的资源开销)。
|
||||
|
||||
如果您去查看位于 `/usr/lib/systemd/system/gdm.service` 的单元配置文件,您可以看到各种选项,包括要被运行的二进制文件(“ExecStart”那一行),相冲突的其他单元(即不能同时进入运行的单元),以及需要在本单元执行前进入运行的单元(“After”那一行)。一些单元有附加的依赖选项,例如“Requires”(必要的依赖)和“Wants”(可选的依赖)。
|
||||
|
||||
此处另一个有趣的选项是:
|
||||
|
||||
Alias=display-manager.service
|
||||
|
||||
当您启动 **gdm.service** 后,您将可以通过 `systemctl status display-manager.service` 来查看它的状态。当您知道有*显示管理程序* (display manager)在运行并想对它做点什么,但您不关心那究竟是 GDM,KDM,XDM 还是什么别的显示管理程序时,这个选项会非常有用。
|
||||
|
||||
![Image](http://www.linuxvoice.com/wp-content/uploads/2015/10/status-large.jpg)
|
||||
|
||||
*使用 systemctl status 命令后面跟一个单元名,来查看对应的服务有什么情况。*
|
||||
|
||||
### “目标(target)”锁定 ###
|
||||
|
||||
如果您在 `/usr/lib/systemd/system` 目录中输入 `ls` 命令,您将看到各种以 `.target` 结尾的文件。*启动目标* (target)是一种将多个单元聚合在一起以致于将它们同时启动的方式。例如,对大多数类 Unix 操作系统而言有一种“多用户(multi-user)”状态,意思是系统已被成功启动,后台服务正在运行,并且已准备好让一个或多个用户登录并工作——至少在文本模式下。(其他状态包括用于进行管理工作的单用户(single-user)状态,以及用于机器关机的重启(reboot)状态。)
|
||||
|
||||
如果您打开 **multi-user.target** 文件一探究竟,您可能期待看到的是一个要被启动的单元列表。但您会发现这个文件内部几乎空空如也——其实,一个服务会通过 **WantedBy** 选项让自己成为启动目标的依赖。因此如果您去打开 **avahi-daemon.service**, **NetworkManager.service** 及其他 **.service** 文件看看,您将在 Install 段看到这一行:
|
||||
|
||||
WantedBy=multi-user.target
|
||||
|
||||
因此,切换到多用户启动目标会使能(enable)那些包含上述语句的单元。还有其他一些启动目标可用(例如 **emergency.target** 提供一个紧急情况使用的 shell,以及 **halt.target** 用于机器关机),您可以用以下方式轻松地在它们之间切换:
|
||||
|
||||
systemctl isolate emergency.target
|
||||
|
||||
在许多方面,这些都很像 SysVinit 中的*运行级* (runlevel),如文本模式的 **multi-user.target** 类似于第3运行级,**graphical.target** 类似于第5运行级,**reboot.target** 类似于第6运行级,诸如此类。
|
||||
|
||||
![Image](http://www.linuxvoice.com/wp-content/uploads/2015/10/unit-large.jpg)
|
||||
|
||||
**与传统的脚本相比,单元配置文件也许看起来很陌生,但并不难以理解。**
|
||||
|
||||
### 开启与停止 ###
|
||||
|
||||
现在您也许陷入了沉思:我们已经看了这么多,但仍没看到如何停止和开启服务!这其实是有原因的。从外部看,Systemd 也许很复杂,像野兽一般难以驾驭。因此在您开始摆弄它之前,有必要从宏观的角度看看它是如何工作的。实际用来管理服务的命令非常简单:
|
||||
|
||||
systemctl stop cups.service
|
||||
systemctl start cups.service
|
||||
|
||||
(若某个单元被禁用了,您可以先通过 `systemctl enable` 加上该单元名的方式将其使能。这种做法会为该单元创建一个符号链接,并将其放置在当前启动目标的 `.wants` 目录下,这些 `.wants` 目录在`/etc/systemd/system` 文件夹中。)
|
||||
|
||||
还有两个有用的命令是 `systemctl restart` 和 `systemctl reload`,后面接单元名。后者用于让单元重新加载它的配置文件。Systemd 的绝大部分都有良好的文档,因此您可以查看手册 (`man systemctl`) 了解每条命令的细节。
|
||||
|
||||
### 定时器单元:取代 Cron ###
|
||||
|
||||
除了系统初始化和服务管理,Systemd 还染指了其他方面。在很大程度上,它能够完成 **cron** 的工作,而且可以说是以更灵活的方式(并带有更易读的语法)。**cron** 是一个以规定时间间隔执行任务的程序——例如清除临时文件,刷新缓存等。
|
||||
|
||||
如果您再次进入 `/usr/lib/systemd/system` 目录,您会看到那儿有多个 `.timer` 文件。用 `less` 来查看这些文件,您会发现它们与 `.service` 和 `.target` 文件有着相似的结构,而区别在于 `[Timer]` 段。举个例子:
|
||||
|
||||
[Timer]
|
||||
OnBootSec=1h
|
||||
OnUnitActiveSec=1w
|
||||
|
||||
**OnBootSec** 选项告诉 Systemd 在系统启动一小时后启动这个单元。第二个选项的意思是:自那以后每周启动这个单元一次。关于定时器有大量选项您可以设置,输入 `man systemd.time` 查看完整列表。
|
||||
|
||||
Systemd 的时间精度默认为一分钟。也就是说,它会在设定时刻的一分钟内运行单元,但不一定精确到那一秒。这么做是基于电源管理方面的原因,但如果您需要一个没有任何延时且精确到毫秒的定时器,您可以添加以下一行:
|
||||
|
||||
AccuracySec=1us
|
||||
|
||||
另外, **WakeSystem** 选项(可以被设置为 true 或 false)决定了定时器是否可以唤醒处于休眠状态的机器。
|
||||
|
||||
![Image](http://www.linuxvoice.com/wp-content/uploads/2015/10/systemd_gui-large.jpg)
|
||||
|
||||
*有一个 Systemd 的图形界面程序,即便它已有多年未被积极维护。*
|
||||
|
||||
### 日志文件:向 journald 问声好 ###
|
||||
|
||||
Systemd 的第二个主要部分是 journal 。这是个日志系统,类似于 syslog 但也有些显著区别。如果您是个 Unix 日志管理模式的粉丝,准备好出离愤怒吧:这是个二进制日志,因此您不能使用常规的命令行文本处理工具来解析它。这个设计决定不出意料地在网上引起了激烈的争论,但它的确有些优点。例如,日志可以被更系统地组织,带有更多的元数据,因此可以更容易地根据可执行文件名和进程号等过滤出信息。
|
||||
|
||||
要查看整个 journal,输入以下命令:
|
||||
|
||||
journalctl
|
||||
|
||||
像许多其他的 Systemd 命令一样,该命令将输出通过管道的方式引向 `less` 程序,因此您可以使用空格键向下滚动,键入`/`(斜杠)查找,以及其他熟悉的快捷键。您也能在此看到少许颜色,像红色的警告及错误信息。
|
||||
|
||||
以上命令会输出很多信息。为了限制其只输出本次启动的消息,使用如下命令:
|
||||
|
||||
journalctl -b
|
||||
|
||||
这就是 Systemd 大放异彩的地方!您想查看自上次启动以来的全部消息吗?试试 **journalctl -b -1** 吧。再上一次的?用 **-2** 替换 **-1** 吧。那自某个具体时间,例如2014年10月24日16:38以来的呢?
|
||||
|
||||
journalctl -b --since=”2014-10-24 16:38”
|
||||
|
||||
即便您对二进制日志感到遗憾,那依然是个有用的特性,并且对许多系统管理员来说,构建类似的过滤器比起写正则表达式而言容易多了。
|
||||
|
||||
我们已经可以根据特定的时间来准确查找日志了,那可以根据特定程序吗?对单元而言,试试这个:
|
||||
|
||||
journalctl -u gdm.service
|
||||
|
||||
(注意:这是个查看 X server 产生的日志的好办法。)那根据特定的进程号?
|
||||
|
||||
journalctl _PID=890
|
||||
|
||||
您甚至可以请求只看某个可执行文件产生的消息:
|
||||
|
||||
journalctl /usr/bin/pulseaudio
|
||||
|
||||
若您想将输出的消息限制在某个优先级,可以使用 **-p** 选项。该选项参数为 0 的话只会显示紧急消息(也就是说,是时候向 **$DEITY** 祈求保佑了)(LCTT 译注: $DEITY 是一个计算机方面的幽默,DEITY 是指广义上的“神”,$前缀表示这是一个变量),为 7 的话会显示所有消息,包括调试消息。请查看手册 (`man journalctl`) 获取更多关于优先级的信息。
|
||||
|
||||
值得指出的是,您也可以将多个选项结合在一起,若想查看在当前启动中由 GDM 服务输出的优先级数小于等于 3 的消息,请使用下述命令:
|
||||
|
||||
journalctl -u gdm.service -p 3 -b
|
||||
|
||||
最后,如果您仅仅想打开一个随 journal 持续更新的终端窗口,就像在没有 Systemd 时使用 `tail` 命令实现的那样,输入 `journalctl -f` 就好了。
|
||||
|
||||
![](http://www.linuxvoice.com/wp-content/uploads/2015/10/journal-large.jpg)
|
||||
|
||||
*二进制日志并不流行,但 journal 的确有它的优点,如非常方便的信息查找及过滤。*
|
||||
|
||||
### 没有 Systemd 的生活?###
|
||||
|
||||
如果您就是完全不能接受 Systemd,您仍然有一些主流发行版中的选择。尤其是 Slackware,作为历史最为悠久的发行版,目前还没有做出改变,但它的主要开发者并没有将其从未来规划中移除。一些不出名的发行版也在坚持使用 SysVinit 。
|
||||
|
||||
但这又将持续多久呢?Gnome 正越来越依赖于 Systemd,其他的主流桌面环境也会步其后尘。这也是引起 BSD 社区一阵恐慌的原因:Systemd 与 Linux 内核紧密相连,导致在某种程度上,桌面环境正变得越来越不可移植。一种折衷的解决方案也许会以 Uselessd ([http://uselessd.darknedgy.net][3]) 的形式到来:一种裁剪版的 Systemd,纯粹专注于启动和监控进程,而不消耗整个基础系统。
|
||||
|
||||
![Image](http://www.linuxvoice.com/wp-content/uploads/2015/10/gentoo-large.jpg)
|
||||
|
||||
若您不喜欢 Systemd,可以尝试一下 Gentoo 发行版,它将 Systemd 作为初始化工具的一种选择,但并不强制用户使用 Systemd。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.linuxvoice.com/linux-101-get-the-most-out-of-systemd/
|
||||
|
||||
作者:[Mike Saunders][a]
|
||||
译者:[Ricky-Gong](https://github.com/Ricky-Gong)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.linuxvoice.com/author/mike/
|
||||
[1]:http://tinyurl.com/poorlennart
|
||||
[2]:http://tinyurl.com/m2e7mv8
|
||||
[3]:http://uselessd.darknedgy.net/
|
@ -1,6 +1,7 @@
|
||||
在 Ubuntu 15.10 上为单个网卡设置多个 IP 地址
|
||||
================================================================================
|
||||
有时候你可能想在你的网卡上使用多个 IP 地址。遇到这种情况你会怎么办呢?买一个新的网卡并分配一个新的 IP?不,这没有必要(至少在小网络中)。现在我们可以在 Ubuntu 系统中为一个网卡分配多个 IP 地址。想知道怎么做到的?跟着我往下看,其实并不难。
|
||||
|
||||
有时候你可能想在你的网卡上使用多个 IP 地址。遇到这种情况你会怎么办呢?买一个新的网卡并分配一个新的 IP?不,没有这个必要(至少在小型网络中)。现在我们可以在 Ubuntu 系统中为一个网卡分配多个 IP 地址。想知道怎么做到的?跟着我往下看,其实并不难。
|
||||
|
||||
这个方法也适用于 Debian 以及它的衍生版本。
|
||||
|
||||
@ -12,7 +13,7 @@
|
||||
|
||||
sudo ip addr
|
||||
|
||||
**事例输出:**
|
||||
**样例输出:**
|
||||
|
||||
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
|
||||
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
|
||||
@ -31,7 +32,7 @@
|
||||
|
||||
sudo ifconfig
|
||||
|
||||
**事例输出:**
|
||||
**样例输出:**
|
||||
|
||||
enp0s3 Link encap:Ethernet HWaddr 08:00:27:2a:03:4b
|
||||
inet addr:192.168.1.103 Bcast:192.168.1.255 Mask:255.255.255.0
|
||||
@ -50,7 +51,7 @@
|
||||
collisions:0 txqueuelen:0
|
||||
RX bytes:38793 (38.7 KB) TX bytes:38793 (38.7 KB)
|
||||
|
||||
正如你在上面看到的,我的网卡名称是 **enp0s3**,它的 IP 地址是 **192.168.1.103**。
|
||||
正如你在上面输出中看到的,我的网卡名称是 **enp0s3**,它的 IP 地址是 **192.168.1.103**。
|
||||
|
||||
现在让我们来为网卡添加一个新的 IP 地址,例如说 **192.168.1.104**。
|
||||
|
||||
@ -73,7 +74,7 @@
|
||||
inet6 fe80::a00:27ff:fe2a:34e/64 scope link
|
||||
valid_lft forever preferred_lft forever
|
||||
|
||||
类似地,你可以添加想要的任意多的 IP 地址。
|
||||
类似地,你可以添加任意数量的 IP 地址,只要你想要。
|
||||
|
||||
让我们 ping 一下这个 IP 地址验证一下。
|
||||
|
||||
@ -108,7 +109,7 @@
|
||||
|
||||
可以看到已经没有了!!
|
||||
|
||||
也许你已经知道,你重启系统后会丢失这些设置。那么怎么设置才能永久有效呢?这也很简单。
|
||||
正如你所知,重启系统后这些设置会失效。那么怎么设置才能永久有效呢?这也很简单。
|
||||
|
||||
### 添加永久 IP 地址 ###
|
||||
|
||||
@ -138,7 +139,7 @@ Ubuntu 系统的网卡配置文件是 **/etc/network/interfaces**。
|
||||
|
||||
sudo nano /etc/network/interfaces
|
||||
|
||||
按照黑色字体标注的添加额外的 IP 地址。
|
||||
如下添加额外的 IP 地址。
|
||||
|
||||
# This file describes the network interfaces available on your system
|
||||
# and how to activate them. For more information, see interfaces(5).
|
||||
@ -154,7 +155,7 @@ Ubuntu 系统的网卡配置文件是 **/etc/network/interfaces**。
|
||||
|
||||
保存并关闭文件。
|
||||
|
||||
无需重启运行下面的命令使更改生效。
|
||||
运行下面的命令使更改无需重启即生效。
|
||||
|
||||
sudo ifdown enp0s3 && sudo ifup enp0s3
|
||||
|
||||
@ -182,7 +183,7 @@ Ubuntu 系统的网卡配置文件是 **/etc/network/interfaces**。
|
||||
DHCPACK of 192.168.1.103 from 192.168.1.1
|
||||
bound to 192.168.1.103 -- renewal in 35146 seconds.
|
||||
|
||||
**注意**:如果你从远程连接到服务器,把上面的两个命令放到**一行**中**非常重要**,因为第一个命令会断掉你的连接。而采用这种方式可以存活你的 ssh 会话。
|
||||
**注意**:如果你从远程连接到服务器,把上面的两个命令放到**一行**中**非常重要**,因为第一个命令会断掉你的连接。而采用这种方式可以保留你的 ssh 会话。
|
||||
|
||||
现在,让我们用下面的命令来检查一下是否添加了新的 IP:
|
||||
|
||||
@ -217,10 +218,9 @@ Ubuntu 系统的网卡配置文件是 **/etc/network/interfaces**。
|
||||
|
||||
想知道怎么给 CentOS/RHEL/Scientific Linux/Fedora 系统添加额外的 IP 地址,可以点击下面的链接。
|
||||
|
||||
注:此篇文章以前做过选题:20150205 Linux Basics--Assign Multiple IP Addresses To Single Network Interface Card On CentOS 7.md
|
||||
- [Assign Multiple IP Addresses To Single Network Interface Card On CentOS 7][1]
|
||||
- [在CentOS 7上给一个网卡分配多个IP地址][1]
|
||||
|
||||
周末愉快!
|
||||
工作愉快!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -228,9 +228,9 @@ via: http://www.unixmen.com/assign-multiple-ip-addresses-to-one-interface-on-ubu
|
||||
|
||||
作者:[SK][a]
|
||||
译者:[ictlyh](http://mutouxiaogui.cn/blog/)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[Caroline](https://github.com/carolinewuyan)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.unixmen.com/author/sk/
|
||||
[1]:http://www.unixmen.com/linux-basics-assign-multiple-ip-addresses-single-network-interface-card-centos-7/
|
||||
[1]:https://linux.cn/article-5127-1.html
|
@ -0,0 +1,131 @@
|
||||
如何在 Ubuntu 14/15 上配置 Apache Solr
|
||||
================================================================================
|
||||
|
||||
大家好,欢迎来阅读我们今天这篇 Apache Solr 的文章。简单的来说,Apache Solr 是一个最负盛名的开源搜索平台,配合运行在网站后端的 Apache Lucene,能够让你轻松创建搜索引擎来搜索网站、数据库和文件。它能够索引和搜索多个网站并根据搜索文本的相关内容返回搜索建议。
|
||||
|
||||
Solr 使用 HTTP 可扩展标记语言(XML),可以为 JSON、Python 和 Ruby 等提供应用程序接口(API)。根据Apache Lucene 项目所述,Solr 提供了非常多的功能,很受管理员们的欢迎:
|
||||
|
||||
- 全文检索
|
||||
- 分面导航(Faceted Navigation)
|
||||
- 拼写建议/自动完成
|
||||
- 自定义文档排序/排列
|
||||
|
||||
#### 前提条件: ####
|
||||
|
||||
在一个使用最小化安装包的全新 Ubuntu 14/15 系统上,你仅仅需要少量的准备,就开始安装 Apache Solor.
|
||||
|
||||
### 1)System Update 系统更新###
|
||||
|
||||
使用一个具有 sudo 权限的非 root 用户登录你的 Ubuntu 服务器,在接下来的所有安装和使用 Solr 的步骤中都会使用它。
|
||||
|
||||
登录成功后,使用下面的命令,升级你的系统到最新的更新及补丁:
|
||||
|
||||
$ sudo apt-get update
|
||||
|
||||
### 2) 安装 JRE###
|
||||
|
||||
要安装 Solr,首先需要安装 JRE(Java Runtime Environment)作为基础环境,因为 solr 和 tomcat 都是基于Java.所以,我们需要安装最新版的 Java 并配置 Java 本地环境.
|
||||
|
||||
要想安装最新版的 Java 8,我们需要通过以下命令安装 Python Software Properties 工具包
|
||||
|
||||
$ sudo apt-get install python-software-properties
|
||||
|
||||
完成后,配置最新版 Java 8的仓库
|
||||
|
||||
$ sudo add-apt-repository ppa:webupd8team/java
|
||||
|
||||
现在你可以通过以下命令更新包源列表,使用‘apt-get’来安装最新版本的 Oracle Java 8。
|
||||
|
||||
$ sudo apt-get update
|
||||
|
||||
$ sudo apt-get install oracle-java8-installer
|
||||
|
||||
在安装和配置过程中,点击'OK'按钮接受 Java SE Platform 和 JavaFX 的 Oracle 二进制代码许可协议(Oracle Binary Code License Agreement)。
|
||||
|
||||
在安装完成后,运行下面的命令,检查是否安装成功以及查看安装的版本。
|
||||
|
||||
kash@solr:~$ java -version
|
||||
java version "1.8.0_66"
|
||||
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
|
||||
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
|
||||
|
||||
执行结果表明我们已经成功安装了 Java,并达到安装 Solr 最基本的要求了,接着我们进行下一步。
|
||||
|
||||
### 安装 Solr###
|
||||
|
||||
有两种不同的方式可以在 Ubuntu 上安装 Solr,在本文中我们只用最新的源码包来演示源码安装。
|
||||
|
||||
要使用源码安装 Solr,先要从[官网][1]下载最新的可用安装包。复制以下链接,然后使用 'wget' 命令来下载。
|
||||
|
||||
$ wget http://www.us.apache.org/dist/lucene/solr/5.3.1/solr-5.3.1.tgz
|
||||
|
||||
运行下面的命令,将这个已归档的服务解压到 /bin 目录。
|
||||
|
||||
$ tar -xzf solr-5.3.1.tgz solr-5.3.1/bin/install_solr_service.sh --strip-components=2
|
||||
|
||||
运行脚本来启动 Solr 服务,这将会先创建一个 solr 的用户,然后将 Solr 安装成服务。
|
||||
|
||||
$ sudo bash ./install_solr_service.sh solr-5.3.1.tgz
|
||||
|
||||
![Solr 安装](http://blog.linoxide.com/wp-content/uploads/2015/11/12.png)
|
||||
|
||||
使用下面的命令来检查 Solr 服务的状态。
|
||||
|
||||
$ service solr status
|
||||
|
||||
![Solr 状态](http://blog.linoxide.com/wp-content/uploads/2015/11/22.png)
|
||||
|
||||
### 创建 Solr 集合: ###
|
||||
|
||||
我们现在可以使用 Solr 用户添加多个集合。就像下图所示的那样,我们只需要在命令行中指定集合名称和指定其配置集就可以创建多个集合了。
|
||||
|
||||
$ sudo su - solr -c "/opt/solr/bin/solr create -c myfirstcollection -n data_driven_schema_configs"
|
||||
|
||||
![创建集合](http://blog.linoxide.com/wp-content/uploads/2015/11/32.png)
|
||||
|
||||
我们已经成功的为我们的第一个集合创建了新核心实例目录,并可以将数据添加到里面。要查看库中的默认模式文件,可以在这里找到: '/opt/solr/server/solr/configsets/data_driven_schema_configs/conf' 。
|
||||
|
||||
### 使用 Solr Web###
|
||||
|
||||
可以使用默认的端口8983连接 Apache Solr。打开浏览器,输入 http://your\_server\_ip:8983/solr 或者 http://your-domain.com:8983/solr. 确保你的防火墙允许8983端口.
|
||||
|
||||
http://172.25.10.171:8983/solr/
|
||||
|
||||
![Web访问Solr](http://blog.linoxide.com/wp-content/uploads/2015/11/42.png)
|
||||
|
||||
在 Solr 的 Web 控制台左侧菜单点击 'Core Admin' 按钮,你将会看见我们之前使用命令行方式创建的集合。你可以点击 'Add Core' 按钮来创建新的核心。
|
||||
|
||||
![添加核心](http://blog.linoxide.com/wp-content/uploads/2015/11/52.png)
|
||||
|
||||
就像下图中所示,你可以选择某个集合并指向文档来向里面添加内容或从文档中查询数据。如下显示的那样添加指定格式的数据。
|
||||
|
||||
{
|
||||
"number": 1,
|
||||
"Name": "George Washington",
|
||||
"birth_year": 1989,
|
||||
"Starting_Job": 2002,
|
||||
"End_Job": "2009-04-30",
|
||||
"Qualification": "Graduation",
|
||||
"skills": "Linux and Virtualization"
|
||||
}
|
||||
|
||||
添加文件后点击 'Submit Document'按钮.
|
||||
|
||||
![添加文档](http://blog.linoxide.com/wp-content/uploads/2015/11/62.png)
|
||||
|
||||
### 总结###
|
||||
|
||||
在 Ubuntu 上安装成功后,你就可以使用 Solr Web 接口插入或查询数据。如果你想通过 Solr 来管理更多的数据和文件,可以创建更多的集合。希望你能喜欢这篇文章并且希望它能够帮到你。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://linoxide.com/ubuntu-how-to/configure-apache-solr-ubuntu-14-15/
|
||||
|
||||
作者:[Kashif][a]
|
||||
译者:[taichirain](https://github.com/taichirain)
|
||||
校对:[Caroline](https://github.com/carolinewuyan)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://linoxide.com/author/kashifs/
|
||||
[1]:http://lucene.apache.org/solr/
|
@ -0,0 +1,45 @@
|
||||
为什么主线内核不能运行在我的手机上?
|
||||
==================
|
||||
|
||||
对于自由软件来说,其最大的自由之一就是能够用一个更新或修改的版本来替换原始版本的程序。尽管如此,数千万使用那些手机里面装着所谓 Linux 的用户却很少能够在他们的手机上运行主线内核(mainline kernel),即使他们拥有替换内核代码的专业技能。可悲的是,我们必须承认目前仍然没有可以运行主线内核的主流手机。在由 Rob Herring 主持的2015届内核峰会(Kernel Summit)上,与会人员共同探讨了这个问题,并进一步谈论了他们应该怎么做才能解决这个问题。
|
||||
|
||||
当主持人提问的时候,在座的大多数开发人员都表示他们更乐意在他们的手机上面运行主线内核,然而也有少数人持相反的看法。在 Project Ara 的支持下,Rob 在这个问题上已经研究了近一年半的时间(参见:https://lwn.net/Articles/648400/ )。但是最新的研究成果并不理想。
|
||||
|
||||
Rob 表示,通常手机上运行了太多的过期(out-of-tree)代码;主线内核只是缺少能使手机正常运行所必须的驱动。每台常规的手机都在运行着100万行到300万行的过期(out-of-tree)代码。几乎所有的这些手机的内核版本都不超过3.10,有一些甚至更加古老。造成这种情况的原因有很多,但是有一点是很清楚的,在手机的世界里,一切都变化的太快以至于无法跟上内核社区的步伐。如果真是那样,他问到,我们还担心什么呢?
|
||||
|
||||
Tim Bird 指出,第一台 Android 手机 Nexus 1 从来没有运行过任何一个主线内核,并且以后也不会。它打破了开源的承诺,也使得用户不可能做到将一个新的内核放到手机中。从这一点上来说,没有任何一款手机支持这种能力。Peter Zijlstra 想知道从一台手机到另一台手机到底复制了多少能够工作的过期代码;Rob表示,迄今为止,他已经见到了三个独立开发的热插拔 [Governors][1]。
|
||||
|
||||
Dirk Hohndel 提出了很少有人注意到的建议。他说,对于世界上的数以亿计的手机,大约只有他们27个人关心他们的手机是否运行着主线内核。剩下的用户仅仅只是想让他们的手机正常工作。或许那些关注手机是否在运行主线内核的开发者正在努力去解决这个令人不解的问题。
|
||||
|
||||
Chris Mason 说,那些手机厂商当前正面临着相同类型的问题,而这些问题也是那些 Linux 发行版过去所面临过的问题。他们疲于应付大量的无效且重复和能被复用的工作。一旦这些发行版决定将他们的工作配合主线内核而不是使用自己维护的内核,那么问题将会变得好解决的多。解决问题的关键就是去帮助手机制造商们认识到他们可以通过同样的方式获得便利,形成这种认识的关键并不是通过来自用户的压力。这样一来,问题就可以解决了。
|
||||
|
||||
Grant Likely 提出了对于安全问题的担忧,这种担忧来自于那些不能升级他们的手机系统的 android 设备。他说,我们需要的是一个真正专为手机设立的发行版。但是,只要手机厂商仍然掌控着手机中的应用软件,那么手机的同步更新将无法实现。我们接下来将面临一个很大的安全难题。Peter 补充说,随着 [Stagefright 漏洞][2]的出现,难题已经出现在我们面前了。
|
||||
|
||||
Ted Ts'o 说,运行主线内核并不是他的主要关注点。他很乐于见到这个假期中所售卖的手机能够运行3.18或者4.1的内核,而不是继续停留在3.10。他认为这是一个更可能被解决的问题。Steve Rostedt 认为,按照 Ted Ts'o 所说的那样去做并不能解决手机的安全问题,但是,Ted 认为使用一个更新一些的内核至少可以让漏洞修复变得更加容易。Grant 对此回应说,接下来的一年里,这一切都将再次发生。过渡到更新的内核也是一个渐进式的对系统的完善。Kees Cook 补充说,我们无法从修复旧版本的内核漏洞的过程中得到太多的益处,真正的问题是我们没有对 bug 的应对措施(他会在今天的另外一个对话中讲到这个话题)。
|
||||
|
||||
Rob 说,任何一种解决方案都需要得到当前市场上的手机供应商的支持。否则,由于厂商对安装到他们生产的手机上的操作系统的封锁,运行主线内核的策略将会陷入麻烦。Paolo Bonzini 提问说是否可以因为那些没有修复的安全漏洞而控告手机厂商,尤其当手机仍然处于保修期内。Grant 认为对于手机的可更新能力(upgradeability)的保证必须来源于市场需求,否则是无法实现的。而促使它实现的原因可能会是一个严重的安全问题,然后用户开始对手机的可更新能力提出要求。同时,内核开发人员必须不断朝着这个方向努力。Rob 表示,除了到目前为止指出的所有优点之外,运行主线内核也能帮助开发者对安卓设备上的新特性进行测试和验证。
|
||||
|
||||
Josh Triplett 提问说,如果手机厂商提出对主线内核提供支持的想法,那么内核社区又将采取什么措施呢?那样将会针对手机各方面的特性要求对内核进行大量的测试和验证;[Android 的兼容性测试套件][3]中出现的失败将不得不被再次回归到内核。Rob 提议这个问题可以在明年讨论,即先将最基本的功能做好。但是,Josh 强调说,如果这个需求出现了,我们就应该能够给出一个好的答案。
|
||||
|
||||
Tim 认为,当前,我们和厂商之间存在很大的脱节。厂商根本不会主动报告或者贡献任何反馈给社区。他们之间完全脱节了,这样的话永远不会有进步。Josh 表示,当厂商们开始报告他们正在使用的旧内核的相关 bug 时,双方之间的接受度将变得更加友好。Arnd Bergmann 认为,我们需要的是得到一个大芯片厂商对使用主线内核的认可,并且将该厂商的硬件提升到能够支持主线内核的运行的这样一个水平,而这样将会在其他方面增加负担。但是,他补充说,实现这个目标要求存在一个跟随硬件一起分发的自由 GPU 驱动程序——然而这种程序当前并不存在。
|
||||
|
||||
Rob 给存在问题的领域列了一个清单,但是现在已经没有太多的时间去讨论其中的细节了。WiFi 驱动仍然是一个问题,尤其是当这个新特性被添加到 Android 设备上的时候。Johannes Berg 对新特性仍然存在问题表示赞同;Android 的开发人员甚至在这些新特性被应用到 Android 设备上之前都不会去谈论它们是否存在问题。然而,对这些特性中的大多数的技术支持最终都会落实在主线内核中。
|
||||
|
||||
随着会议逐渐接近尾声,Ben Herrenschmidt 再次重申:实现在 Android 手机上运行主线内核的关键还是在于让厂商认识到使用主线内核是它们获得最大利润的最好选择。从长远看,使用主线内核能节省大量的工作。Mark Brown 认为,以前,当搭载在 Android 设备上的内核版本以更稳定的方式向前推进的时候,上游工作的好处对运营商来说更加明显。以现在的情况来看,手机上的内核版本似乎停留在了3.10,那种压力是不一样的。
|
||||
|
||||
这次谈话以开发者决定进一步改善当前的状况而结束,但是却并没有对如何改善提出一个明确的计划。
|
||||
|
||||
---------------------------------------------------------------------------------
|
||||
|
||||
via: https://lwn.net/Articles/662147/
|
||||
|
||||
作者:[Jonathan Corbet][a]
|
||||
译者:[kylepeng93](https://github.com/kylepeng93)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://lwn.net/Articles/KernelSummit2015/
|
||||
[1]:http://androidmodguide.blogspot.com/p/blog-page.html
|
||||
[2]:https://lwn.net/Articles/652728/
|
||||
[3]:https://source.android.com/compatibility/cts/index.html
|
@ -1,61 +1,61 @@
|
||||
|
||||
如何在FreeBSD 10.2上安装Nginx作为Apache的反向代理
|
||||
如何在 FreeBSD 10.2 上安装 Nginx 作为 Apache 的反向代理
|
||||
================================================================================
|
||||
Nginx是一款免费的,开源的HTTP和反向代理服务器, 以及一个代理POP3/IMAP的邮件服务器. Nginx是一款高性能的web服务器,其特点是丰富的功能,简单的结构以及低内存的占用. 第一个版本由 Igor Sysoev在2002年发布,然而到现在为止很多大的科技公司都在使用,包括 Netflix, Github, Cloudflare, WordPress.com等等
|
||||
|
||||
在这篇教程里我们会 "**在freebsd 10.2系统上,安装和配置Nginx网络服务器作为Apache的反向代理**". Apache 会用PHP在8080端口上运行,并且我们需要在80端口配置Nginx的运行,用来接收用户/访问者的请求.如果网页的用户请求来自于浏览器的80端口, 那么Nginx会用Apache网络服务器和PHP来通过这个请求,并运行在8080端口.
|
||||
Nginx 是一款自由开源的 HTTP 和反向代理服务器,也可以用作 POP3/IMAP 的邮件代理服务器。Nginx 是一款高性能的 web 服务器,其特点是功能丰富,结构简单以及内存占用低。 第一个版本由 Igor Sysoev 发布于2002年,到现在有很多大型科技公司在使用,包括 Netflix、 Github、 Cloudflare、 WordPress.com 等等。
|
||||
|
||||
#### 前提条件 ####
|
||||
在这篇教程里我们会“**在 freebsd 10.2 系统上,安装和配置 Nginx 网络服务器作为 Apache 的反向代理**”。 Apache 将在8080端口上运行 PHP ,而我们会配置 Nginx 运行在80端口以接收用户/访问者的请求。如果80端口接收到用户浏览器的网页请求,那么 Nginx 会将该请求传递给运行在8080端口上的 Apache 网络服务器和 PHP。
|
||||
|
||||
- FreeBSD 10.2.
|
||||
- Root 权限.
|
||||
#### 前提条件 ####
|
||||
|
||||
- FreeBSD 10.2
|
||||
- Root 权限
|
||||
|
||||
### 步骤 1 - 更新系统 ###
|
||||
|
||||
使用SSH证书登录到你的FreeBSD服务器以及使用下面命令来更新你的系统 :
|
||||
使用 SSH 认证方式登录到你的 FreeBSD 服务器,使用下面命令来更新你的系统:
|
||||
|
||||
freebsd-update fetch
|
||||
freebsd-update install
|
||||
|
||||
### 步骤 2 - 安装 Apache ###
|
||||
|
||||
Apache是现在使用范围最广的网络服务器以及开源的HTTP服务器.在FreeBSD里Apache是未被默认安装的, 但是我们可以直接从端口下载,或者解压包在"/usr/ports/www/apache24" 目录下,再或者直接从PKG命令的FreeBSD系统信息库安装。在本教程中,我们将使用PKG命令从FreeBSD的库中安装:
|
||||
Apache 是开源的、使用范围最广的 web 服务器。在 FreeBSD 里默认没有安装 Apache, 但是我们可以直接通过 /usr/ports/www/apache24 下的 ports 或软件包来安装,也可以直接使用 pkg 命令从 FreeBSD 软件库中安装。在本教程中,我们将使用 pkg 命令从 FreeBSD 软件库中安装:
|
||||
|
||||
pkg install apache24
|
||||
|
||||
### 步骤 3 - 安装 PHP ###
|
||||
|
||||
一旦成功安装Apache, 接着将会安装PHP并由一个用户处理一个PHP的文件请求. 我们将会用到如下的PKG命令来安装PHP :
|
||||
一旦成功安装 Apache,接着将会安装 PHP ,它来负责处理用户对 PHP 文件的请求。我们将会用到如下的 pkg 命令来安装 PHP:
|
||||
|
||||
pkg install php56 mod_php56 php56-mysql php56-mysqli
|
||||
|
||||
### 步骤 4 - 配置 Apache 和 PHP ###
|
||||
|
||||
一旦所有都安装好了, 我们将会配置Apache在8080端口上运行, 并让PHP与Apache一同工作. 为了配置Apache,我们可以编辑 "httpd.conf"这个配置文件, 然而PHP我们只需要复制PHP的配置文件 php.ini 在 "/usr/local/etc/"目录下.
|
||||
一旦所有都安装好了,我们将会配置 Apache 运行在8080端口上, 并让 PHP 与 Apache 一同工作。 要想配置Apache,我们可以编辑“httpd.conf”这个配置文件, 对于 PHP 我们只需要复制 “/usr/local/etc/”目录下的 PHP 配置文件 php.ini。
|
||||
|
||||
进入到 "/usr/local/etc/" 目录 并且复制 php.ini-production 文件到 php.ini :
|
||||
进入到“/usr/local/etc/”目录,并且复制 php.ini-production 文件到 php.ini :
|
||||
|
||||
cd /usr/local/etc/
|
||||
cp php.ini-production php.ini
|
||||
|
||||
下一步, 在Apache目录下通过编辑 "httpd.conf"文件来配置Apache :
|
||||
下一步,在 Apache 目录下通过编辑“httpd.conf”文件来配置 Apache:
|
||||
|
||||
cd /usr/local/etc/apache24
|
||||
nano -c httpd.conf
|
||||
|
||||
端口配置在第 **52**行 :
|
||||
端口配置在第**52**行 :
|
||||
|
||||
Listen 8080
|
||||
|
||||
服务器名称配置在第 **219** 行:
|
||||
服务器名称配置在第**219**行:
|
||||
|
||||
ServerName 127.0.0.1:8080
|
||||
|
||||
在第 **277**行,如果目录需要,添加的DirectoryIndex文件,Apache将直接作用于它 :
|
||||
在第**277**行,添加 DirectoryIndex 文件,Apache 将用它来服务对目录的请求:
|
||||
|
||||
DirectoryIndex index.php index.html
|
||||
|
||||
在第 **287**行下,配置Apache通过添加脚本来支持PHP :
|
||||
在第**287**行下,配置 Apache ,添加脚本支持:
|
||||
|
||||
<FilesMatch "\.php$">
|
||||
SetHandler application/x-httpd-php
|
||||
@ -64,49 +64,49 @@ Apache是现在使用范围最广的网络服务器以及开源的HTTP服务器.
|
||||
SetHandler application/x-httpd-php-source
|
||||
</FilesMatch>
|
||||
|
||||
保存然后退出.
|
||||
保存并退出。
|
||||
|
||||
现在用sysrc命令,来添加Apache作为开机启动项目 :
|
||||
现在用 sysrc 命令,来添加 Apache 为开机启动项目:
|
||||
|
||||
sysrc apache24_enable=yes
|
||||
|
||||
然后用下面的命令测试Apache的配置 :
|
||||
然后用下面的命令测试 Apache 的配置:
|
||||
|
||||
apachectl configtest
|
||||
|
||||
如果到这里都没有问题的话,那么就启动Apache吧 :
|
||||
如果到这里都没有问题的话,那么就启动 Apache 吧:
|
||||
|
||||
service apache24 start
|
||||
|
||||
如果全部完毕, 在"/usr/local/www/apache24/data" 目录下,创建一个phpinfo文件是验证PHP在Apache下完美运行的好方法 :
|
||||
如果全部完毕,在“/usr/local/www/apache24/data”目录下创建一个 phpinfo 文件来验证 PHP 在 Apache 下顺利运行:
|
||||
|
||||
cd /usr/local/www/apache24/data
|
||||
echo "<?php phpinfo(); ?>" > info.php
|
||||
|
||||
现在就可以访问 freebsd 的服务器 IP : 192.168.1.123:8080/info.php.
|
||||
现在就可以访问 freebsd 的服务器 IP : 192.168.1.123:8080/info.php 。
|
||||
|
||||
![Apache and PHP on Port 8080](http://blog.linoxide.com/wp-content/uploads/2015/11/Apache-and-PHP-on-Port-8080.png)
|
||||
|
||||
Apache 是使用 PHP 在 8080端口下运行的.
|
||||
Apache 及 PHP 运行在 8080 端口。
|
||||
|
||||
### 步骤 5 - 安装 Nginx ###
|
||||
|
||||
Nginx 以低内存的占用作为一款高性能的web服务器以及反向代理服务器.在这个步骤里,我们将会使用Nginx作为Apache的反向代理, 因此让我们用pkg命令来安装它吧 :
|
||||
Nginx 可以以较低内存占用提供高性能的 Web 服务器和反向代理服务器。在这个步骤里,我们将会使用 Nginx 作为Apache 的反向代理,因此让我们用 pkg 命令来安装它吧:
|
||||
|
||||
pkg install nginx
|
||||
|
||||
### 步骤 6 - 配置 Nginx ###
|
||||
|
||||
一旦 Nginx 安装完毕, 在 "**nginx.conf**" 文件里,我们需要做一个新的配置文件来替换掉原来的nginx文件. 更改到 "/usr/local/etc/nginx/"目录下 并且默认备份到 nginx.conf 文件:
|
||||
一旦 Nginx 安装完毕,在“**nginx.conf**”文件里,我们需要做一个新的配置文件来替换掉原来的 nginx 配置文件。切换到“/usr/local/etc/nginx/”目录下,并且备份默认 nginx.conf 文件:
|
||||
|
||||
cd /usr/local/etc/nginx/
|
||||
mv nginx.conf nginx.conf.oroginal
|
||||
|
||||
现在就可以创建一个新的 nginx 配置文件了 :
|
||||
现在就可以创建一个新的 nginx 配置文件了:
|
||||
|
||||
nano -c nginx.conf
|
||||
|
||||
然后粘贴下面的配置:
|
||||
然后粘贴下面的配置:
|
||||
|
||||
user www;
|
||||
worker_processes 1;
|
||||
@ -164,14 +164,14 @@ Nginx 以低内存的占用作为一款高性能的web服务器以及反向代
|
||||
|
||||
}
|
||||
|
||||
保存退出.
|
||||
保存并退出。
|
||||
|
||||
下一步, 在nginx目录下面,创建一个 **proxy.conf** 文件,使其作为反向代理 :
|
||||
下一步,在 nginx 目录下面,创建一个 **proxy.conf** 文件,使其作为反向代理 :
|
||||
|
||||
cd /usr/local/etc/nginx/
|
||||
nano -c proxy.conf
|
||||
|
||||
粘贴如下配置 :
|
||||
粘贴如下配置:
|
||||
|
||||
proxy_buffering on;
|
||||
proxy_redirect off;
|
||||
@ -186,27 +186,27 @@ Nginx 以低内存的占用作为一款高性能的web服务器以及反向代
|
||||
proxy_buffers 100 8k;
|
||||
add_header X-Cache $upstream_cache_status;
|
||||
|
||||
保存退出.
|
||||
保存并退出。
|
||||
|
||||
最后一步, 为 nginx 的高速缓存创建一个 "/var/nginx/cache"的新目录 :
|
||||
最后一步,为 nginx 的高速缓存创建一个“/var/nginx/cache”的新目录:
|
||||
|
||||
mkdir -p /var/nginx/cache
|
||||
|
||||
### 步骤 7 - 配置 Nginx 的虚拟主机 ###
|
||||
|
||||
在这个步骤里面,我们需要创建一个新的虚拟主机域 "saitama.me", 以跟文件 "/usr/local/www/saitama.me" 和日志文件一同放在 "/var/log/nginx" 目录下.
|
||||
在这个步骤里面,我们需要创建一个新的虚拟主机域“saitama.me”,其文档根目录为“/usr/local/www/saitama.me”,日志文件放在“/var/log/nginx”目录下。
|
||||
|
||||
我们必须做的第一件事情就是创建新的目录来存放虚拟主机文件, 在这里我们将用到一个"**vhost**"的新文件. 并创建它 :
|
||||
我们必须做的第一件事情就是创建新的目录来存放虚拟主机配置文件,我们创建的新目录名为“**vhost**”。创建它:
|
||||
|
||||
cd /usr/local/etc/nginx/
|
||||
mkdir vhost
|
||||
|
||||
创建好vhost 目录, 那么我们就进入这个目录并创建一个新的虚拟主机文件. 这里我取名为 "**saitama.conf**" :
|
||||
创建好 vhost 目录,然后我们就进入这个目录并创建一个新的虚拟主机文件。这里我取名为“**saitama.conf**”:
|
||||
|
||||
cd vhost/
|
||||
nano -c saitama.conf
|
||||
|
||||
粘贴如下虚拟主机的配置 :
|
||||
粘贴如下虚拟主机的配置:
|
||||
|
||||
server {
|
||||
# Replace with your freebsd IP
|
||||
@ -252,67 +252,67 @@ Nginx 以低内存的占用作为一款高性能的web服务器以及反向代
|
||||
|
||||
}
|
||||
|
||||
保存退出.
|
||||
保存并退出。
|
||||
|
||||
下一步, 为nginx和虚拟主机创建一个新的日志目录 "/var/log/" :
|
||||
下一步,为 nginx 和虚拟主机创建一个新的日志目录“/var/log/”:
|
||||
|
||||
mkdir -p /var/log/nginx/
|
||||
|
||||
如果一切顺利, 在文件的根目录下创建文件 saitama.me :
|
||||
如果一切顺利,在文件的根目录下创建目录 saitama.me 用作文档根:
|
||||
|
||||
cd /usr/local/www/
|
||||
mkdir saitama.me
|
||||
|
||||
### 步骤 8 - 测试 ###
|
||||
|
||||
在这个步骤里面,我们只是测试我们的nginx和虚拟主机的配置.
|
||||
在这个步骤里面,我们只是测试我们的 nginx 和虚拟主机的配置。
|
||||
|
||||
用如下命令测试nginx的配置 :
|
||||
用如下命令测试 nginx 的配置:
|
||||
|
||||
nginx -t
|
||||
|
||||
如果一切都没有问题, 用 sysrc 命令添加nginx为启动项,并且启动nginx和重启apache:
|
||||
如果一切都没有问题,用 sysrc 命令添加 nginx 为开机启动项,并且启动 nginx 和重启 apache:
|
||||
|
||||
sysrc nginx_enable=yes
|
||||
service nginx start
|
||||
service apache24 restart
|
||||
|
||||
一切完毕后, 在 saitama.me 目录下,添加一个新的phpinfo文件来验证php的正常运行 :
|
||||
一切完毕后,在 saitama.me 目录下,添加一个新的 phpinfo 文件来验证 php 的正常运行:
|
||||
|
||||
cd /usr/local/www/saitama.me
|
||||
echo "<?php phpinfo(); ?>" > info.php
|
||||
|
||||
然后便访问这个文档 : **www.saitama.me/info.php**.
|
||||
然后访问这个域名: **www.saitama.me/info.php**。
|
||||
|
||||
![Virtualhost Configured saitamame](http://blog.linoxide.com/wp-content/uploads/2015/11/Virtualhost-Configured-saitamame.png)
|
||||
|
||||
Nginx 作为Apache的反向代理正在运行了,PHP也同样在进行工作了.
|
||||
Nginx 作为 Apache 的反向代理运行了,PHP 也同样工作了。
|
||||
|
||||
这是另一种结果 :
|
||||
这是另一个结果:
|
||||
|
||||
Test .html 文件无缓存.
|
||||
测试无缓存的 .html 文件。
|
||||
|
||||
curl -I www.saitama.me
|
||||
|
||||
![html with no-cache](http://blog.linoxide.com/wp-content/uploads/2015/11/html-with-no-cache.png)
|
||||
|
||||
Test .css 文件只有三十天的缓存.
|
||||
测试有三十天缓存的 .css 文件。
|
||||
|
||||
curl -I www.saitama.me/test.css
|
||||
|
||||
![css file 30day cache](http://blog.linoxide.com/wp-content/uploads/2015/11/css-file-30day-cache.png)
|
||||
|
||||
Test .php 文件正常缓存 :
|
||||
测试缓存的 .php 文件:
|
||||
|
||||
curl -I www.saitama.me/info.php
|
||||
|
||||
![PHP file cached](http://blog.linoxide.com/wp-content/uploads/2015/11/PHP-file-cached.png)
|
||||
|
||||
全部完成.
|
||||
全部搞定。
|
||||
|
||||
### 总结 ###
|
||||
|
||||
Nginx 是最广泛的 HTTP 和反向代理的服务器. 拥有丰富的高性能和低内存/RAM的使用功能. Nginx使用了太多的缓存, 我们可以在网络上缓存静态文件使得网页加速, 并且在用户需要的时候再缓存php文件. 这样Nginx 的轻松配置和使用,可以让它用作HTTP服务器 或者 apache的反向代理.
|
||||
Nginx 是最受欢迎的 HTTP 和反向代理服务器,拥有丰富的功能、高性能、低内存/RAM 占用。Nginx 也用于缓存, 我们可以在网络上缓存静态文件使得网页加速,并且缓存用户请求的 php 文件。 Nginx 容易配置和使用,可以将它用作 HTTP 服务器或者 apache 的反向代理。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -320,8 +320,8 @@ via: http://linoxide.com/linux-how-to/install-nginx-reverse-proxy-apache-freebsd
|
||||
|
||||
作者:[Arul][a]
|
||||
译者:[KnightJoker](https://github.com/KnightJoker)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[Caroline](https://github.com/carolinewuyan),[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://linoxide.com/author/arulm/
|
||||
[a]:http://linoxide.com/author/arulm/
|
@ -0,0 +1,153 @@
|
||||
grep 命令系列:如何在 Linux/UNIX 中使用 grep 命令
|
||||
==========================================
|
||||
|
||||
我该怎样在 Linux、Apple OS X 及其他类 UNIX 系统中使用 grep 命令,你能给我展示一些简单的例子吗?
|
||||
|
||||
grep 命令用来搜索文本,或从给定的文件中搜索行内包含了给定字符串或单词的文件。通常来说,grep 显示匹配到的行。使用 grep 来搜索包括一个或多个正则表达式匹配到的文本行,然后只显示匹配到的行。grep 被视作在 Linux/ Unix 系统中最有用的命令之一。
|
||||
|
||||
### 你知道吗 ###
|
||||
|
||||
grep 这个名字,来源于一个 Unix/Linux 中的古老的文本编辑器 ed 中执行相似操作的命令:
|
||||
|
||||
g/re/p
|
||||
|
||||
### grep 命令的语法 ###
|
||||
|
||||
语法如下所示:
|
||||
|
||||
grep 'word' 文件名
|
||||
grep 'word' 文件1 文件2 文件3
|
||||
grep '字符串1 字符串2' 文件名
|
||||
cat 某个文件 | grep '某个东西'
|
||||
command | grep '某个东西'
|
||||
command 选项1 | grep '数据'
|
||||
grep --color '数据' 文件名
|
||||
|
||||
###怎么样使用 grep 来搜索一个文件###
|
||||
|
||||
搜索 /etc/passwd 文件下的 boo 用户,输入:
|
||||
|
||||
$ grep boo /etc/passwd
|
||||
|
||||
输出内容:
|
||||
|
||||
foo:x:1000:1000:foo,,,:/home/foo:/bin/ksh
|
||||
|
||||
可以使用 grep 去强制忽略大小写。例如,使用 -i 选项可以匹配 boo, Boo, BOO 和其他组合:
|
||||
|
||||
$ grep -i "boo" /etc/passwd
|
||||
|
||||
### 递归使用 grep ###
|
||||
|
||||
你可以递归地使用 grep 进行搜索。例如,在文件目录下面搜索所有包含字符串“192.168.1.5”的文件
|
||||
|
||||
$ grep -r "192.168.1.5" /etc/
|
||||
|
||||
或者是:
|
||||
|
||||
$ grep -R "192.168.1.5" /etc/
|
||||
|
||||
示例输出:
|
||||
|
||||
/etc/ppp/options:# ms-wins 192.168.1.50
|
||||
/etc/ppp/options:# ms-wins 192.168.1.51
|
||||
/etc/NetworkManager/system-connections/Wired connection 1:addresses1=192.168.1.5;24;192.168.1.2;
|
||||
|
||||
你会看到搜索到 192.168.1.5 的结果每一行都前缀以找到匹配的文件名(例如:/etc/ppp/options)。输出之中包含的文件名可以加 -h 选项来禁止输出:
|
||||
|
||||
$ grep -h -R "192.168.1.5" /etc/
|
||||
|
||||
或者
|
||||
|
||||
$ grep -hR "192.168.1.5" /etc/
|
||||
|
||||
示例输出:
|
||||
|
||||
# ms-wins 192.168.1.50
|
||||
# ms-wins 192.168.1.51
|
||||
addresses1=192.168.1.5;24;192.168.1.2;
|
||||
|
||||
### 使用 grep 去搜索文本 ###
|
||||
|
||||
当你搜索 boo 时,grep 命令将会匹配 fooboo,boo123, barfoo35 和其他所有包含 boo 的字符串,你可以使用 -w 选项去强制只输出那些仅仅包含那个整个单词的行(LCTT译注:即该字符串两侧是英文单词分隔符,如空格,标点符号,和末端等,因此对中文这种没有断字符号的语言并不适用。)。
|
||||
|
||||
$ grep -w "boo" file
|
||||
|
||||
### 使用 grep 命令去搜索两个不同的单词 ###
|
||||
|
||||
使用 egrep 命令如下:
|
||||
|
||||
$ egrep -w 'word1|word2' /path/to/file
|
||||
|
||||
(LCTT 译注:这里使用到了正则表达式,因此使用的是 egrep 命令,即扩展的 grep 命令。)
|
||||
|
||||
### 统计文本匹配到的行数 ###
|
||||
|
||||
grep 命令可以通过加 -c 参数显示每个文件中匹配到的次数:
|
||||
|
||||
$ grep -c 'word' /path/to/file
|
||||
|
||||
传递 -n 选项可以输出的行前加入匹配到的行的行号:
|
||||
|
||||
$ grep -n 'root' /etc/passwd
|
||||
|
||||
示例输出:
|
||||
|
||||
1:root:x:0:0:root:/root:/bin/bash
|
||||
1042:rootdoor:x:0:0:rootdoor:/home/rootdoor:/bin/csh
|
||||
3319:initrootapp:x:0:0:initrootapp:/home/initroot:/bin/ksh
|
||||
|
||||
### 反转匹配(不匹配) ###
|
||||
|
||||
可以使用 -v 选项来输出不包含匹配项的内容,输出内容仅仅包含那些不含给定单词的行,例如输出所有不包含 bar 单词的行:
|
||||
|
||||
$ grep -v bar /path/to/file
|
||||
|
||||
### UNIX/Linux 管道与 grep 命令 ###
|
||||
|
||||
grep 常常与管道一起使用,在这个例子中,显示硬盘设备的名字:
|
||||
|
||||
# dmesg | egrep '(s|h)d[a-z]'
|
||||
|
||||
显示 CPU 型号:
|
||||
|
||||
# cat /proc/cpuinfo | grep -i 'Model'
|
||||
|
||||
然而,以上命令也可以按照以下方法使用,不使用管道:
|
||||
|
||||
# grep -i 'Model' /proc/cpuinfo
|
||||
|
||||
示例输出:
|
||||
|
||||
model : 30
|
||||
model name : Intel(R) Core(TM) i7 CPU Q 820 @ 1.73GHz
|
||||
model : 30
|
||||
model name : Intel(R) Core(TM) i7 CPU Q 820 @ 1.73GHz
|
||||
|
||||
### 如何仅仅显示匹配到内容的文件名字? ###
|
||||
|
||||
使用 -l 选项去显示那些文件内容中包含 main() 的文件名:
|
||||
|
||||
$ grep -l 'main' *.c
|
||||
|
||||
最后,你可以强制 grep 以彩色输出:
|
||||
|
||||
$ grep --color vivek /etc/passwd
|
||||
|
||||
示例输出:
|
||||
|
||||
![Grep command in action](http://files.cyberciti.biz/uploads/faq/2007/08/grep_command_examples.png)
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.cyberciti.biz/faq/howto-use-grep-command-in-linux-unix/
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[zky001](https://github.com/zky001)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
校对者ID:
|
||||
[1]:http://bash.cyberciti.biz/guide/Pipes
|
@ -0,0 +1,240 @@
|
||||
grep 命令系列:grep 中的正则表达式
|
||||
================================================================================
|
||||
|
||||
在 Linux 、类 Unix 系统中我该如何使用 Grep 命令的正则表达式呢?
|
||||
|
||||
Linux 附带有 GNU grep 命令工具,它支持扩展正则表达式(extended regular expressions),而且 GNU grep 在所有的 Linux 系统中都是默认有的。Grep 命令被用于搜索定位存储在您服务器或工作站上的任何信息。
|
||||
|
||||
### 正则表达式 ###
|
||||
|
||||
正则表达式就是用于匹配每行输入的一种模式,模式是指一串字符序列。下面是范例:
|
||||
|
||||
^w1
|
||||
w1|w2
|
||||
[^ ]
|
||||
|
||||
#### grep 正则表达式示例 ####
|
||||
|
||||
在 /etc/passswd 目录中搜索 'vivek'
|
||||
|
||||
grep vivek /etc/passwd
|
||||
|
||||
输出例子:
|
||||
|
||||
vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
|
||||
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
|
||||
gitevivek:x:1002:1002::/home/gitevivek:/bin/sh
|
||||
|
||||
搜索大小写任意的 vivek(即不区分大小写的搜索)
|
||||
|
||||
grep -i -w vivek /etc/passwd
|
||||
|
||||
搜索大小写任意的 vivek 或 raj
|
||||
|
||||
grep -E -i -w 'vivek|raj' /etc/passwd
|
||||
|
||||
上面最后的例子显示的,就是一个扩展的正则表达式的模式。
|
||||
|
||||
### 锚点 ###
|
||||
|
||||
你可以分别使用 ^ 和 $ 符号来正则匹配输入行的开始或结尾。下面的例子搜索显示仅仅以 vivek 开始的输入行:
|
||||
|
||||
grep ^vivek /etc/passwd
|
||||
|
||||
输出例子:
|
||||
|
||||
vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
|
||||
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
|
||||
|
||||
你可以仅仅只搜索出以单词 vivek 开始的行,即不显示 vivekgit、vivekg 等(LCTT 译注:即该单词后面是空格、符号等英文的单词分隔符。)
|
||||
|
||||
grep -w ^vivek /etc/passwd
|
||||
|
||||
找出以单词 word 结尾的行:
|
||||
|
||||
grep 'foo$' 文件名
|
||||
|
||||
匹配仅仅只包含 foo 的行:
|
||||
|
||||
grep '^foo$' 文件名
|
||||
|
||||
如下所示的例子可以搜索空行:
|
||||
|
||||
grep '^$' 文件名
|
||||
|
||||
### 字符类 ###
|
||||
|
||||
匹配 Vivek 或 vivek:
|
||||
|
||||
grep '[vV]ivek' 文件名
|
||||
|
||||
或者
|
||||
|
||||
grep '[vV][iI][Vv][Ee][kK]' 文件名
|
||||
|
||||
也可以匹配数字 (即匹配 vivek1 或 Vivek2 等等):
|
||||
|
||||
grep -w '[vV]ivek[0-9]' 文件名
|
||||
|
||||
可以匹配两个数字字符(即 foo11、foo12 等):
|
||||
|
||||
grep 'foo[0-9][0-9]' 文件名
|
||||
|
||||
不仅仅局限于数字,也能匹配至少一个字母的:
|
||||
|
||||
grep '[A-Za-z]' 文件名
|
||||
|
||||
显示含有 "w" 或 "n" 字符的所有行:
|
||||
|
||||
grep [wn] 文件名
|
||||
|
||||
放在括号内的表达式,即包在 "[:" 和 ":]" 之间的字符类的名字,它表示的是属于此类的所有字符列表。标准的字符类名称如下:
|
||||
|
||||
- [:alnum:] - 字母数字字符
|
||||
- [:alpha:] - 字母字符
|
||||
- [:blank:] - 空字符: 空格键符 和 制表符
|
||||
- [:digit:] - 数字: '0 1 2 3 4 5 6 7 8 9'
|
||||
- [:lower:] - 小写字母: 'a b c d e f g h i j k l m n o p q r s t u v w x y z'
|
||||
- [:space:] - 空格字符: 制表符、换行符、垂直制表符、换页符、回车符和空格键符
|
||||
- [:upper:] - 大写字母: 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'
|
||||
|
||||
在这个例子所示的是匹配所有大写字母:
|
||||
|
||||
grep '[:upper:]' 文件名
|
||||
|
||||
### 通配符 ###
|
||||
|
||||
你可以使用 "." 来匹配单个字符。例子中匹配以 "b" 开头以 "t" 结尾的3个字符的单词:
|
||||
|
||||
grep '\<b.t\>' 文件名
|
||||
|
||||
在这儿,
|
||||
|
||||
- `\<` 匹配单词前面的空字符串
|
||||
- `\>` 匹配单词后面的空字符串
|
||||
|
||||
打印出只有两个字符的所有行:
|
||||
|
||||
grep '^..$' 文件名
|
||||
|
||||
显示以一个点和一个数字开头的行:
|
||||
|
||||
grep '^\.[0-9]' 文件名
|
||||
|
||||
#### 点字符转义 ####
|
||||
|
||||
下面要匹配到 IP 地址为 192.168.1.254 的正则式是不正确的:(LCTT 译注:可以匹配到该 IP 地址,但是也有可能匹配到间隔符号不是点的类似格式)
|
||||
|
||||
grep '192.168.1.254' /etc/hosts
|
||||
|
||||
三个点字符都需要转义:
|
||||
|
||||
grep '192\.168\.1\.254' /etc/hosts
|
||||
|
||||
下面的例子只能匹配出 IP 地址:(LCTT 译注:实际上由于 IP 地址中数字的取值范围,该正则表达式并不精确)
|
||||
|
||||
egrep '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' 文件名
|
||||
|
||||
### 怎么样搜索以 - 符号开头的匹配模式? ###
|
||||
|
||||
要使用 -e 选项来搜索匹配 '--test--' 字符串,如果不使用 -e 选项,grep 命令会试图把 '--test--' 当作自己的选项参数来解析:
|
||||
|
||||
grep -e '--test--' 文件名
|
||||
|
||||
### 怎么使用 grep 的“或”匹配? ###
|
||||
|
||||
使用如下的语法:
|
||||
|
||||
grep -E 'word1|word2' 文件名
|
||||
或
|
||||
egrep 'word1|word2' 文件名
|
||||
|
||||
或者是
|
||||
|
||||
grep 'word1\|word2' 文件名
|
||||
|
||||
### 怎么使用 grep 的“和”匹配? ###
|
||||
|
||||
使用下面的语法来显示既包含 'word1' 又包含 'word2' 的所有行
|
||||
|
||||
grep 'word1' 文件名 | grep 'word2'
|
||||
|
||||
### 怎么样使用序列检测? ###
|
||||
|
||||
使用如下的语法,您可以检测一个字符在序列中重复出现次数:
|
||||
|
||||
{N}
|
||||
{N,}
|
||||
{min,max}
|
||||
|
||||
要匹配字符 “v" 出现两次:
|
||||
|
||||
egrep "v{2}" 文件名
|
||||
|
||||
下面的命令能匹配到 "col" 和 "cool" :
|
||||
|
||||
egrep 'co{1,2}l' 文件名
|
||||
|
||||
下面的命令将会匹配出至少有三个 'c' 字符的所有行。
|
||||
|
||||
egrep 'c{3,}' 文件名
|
||||
|
||||
下面的例子会匹配 91-1234567890(即二个数字-十个数字) 这种格式的手机号。
|
||||
|
||||
grep "[[:digit:]]\{2\}[ -]\?[[:digit:]]\{10\}" 文件名
|
||||
|
||||
### 怎么样使 grep 命令高亮显示?###
|
||||
|
||||
使用如下的语法:
|
||||
|
||||
grep --color 正则表达式 文件名
|
||||
|
||||
### 怎么样仅仅只显示匹配出的字符,而不是匹配出的行? ###
|
||||
|
||||
使用如下语法:
|
||||
|
||||
grep -o 正则表达式 文件名
|
||||
|
||||
### 正则表达式限定符###
|
||||
|
||||
| 限定符 | 描述|
|
||||
|------|----|
|
||||
|`.`|匹配任意的一个字符。|
|
||||
|`?`|匹配前面的子表达式,最多一次。|
|
||||
|`*`|匹配前面的子表达式零次或多次。|
|
||||
|`+`|匹配前面的子表达式一次或多次。|
|
||||
|`{N}`|匹配前面的子表达式 N 次。|
|
||||
|`{N,}`|匹配前面的子表达式 N 次到多次。|
|
||||
|`{N,M}`|匹配前面的子表达式 N 到 M 次,至少 N 次至多 M 次。|
|
||||
|`-`|只要不是在序列开始、结尾或者序列的结束点上,表示序列范围。|
|
||||
|`^`|匹配一行开始的空字符串;也表示字符不在要匹配的列表中。|
|
||||
|`$`|匹配一行末尾的空字符串。|
|
||||
|`\b`|匹配一个单词前后的空字符串。|
|
||||
|`\B`|匹配一个单词中间的空字符串。|
|
||||
|`\<`|匹配单词前面的空字符串。|
|
||||
|`\>`|匹配单词后面的空字符串。|
|
||||
|
||||
#### grep 和 egrep ####
|
||||
|
||||
egrep 等同于 **grep -E** 。它会以扩展的正则表达式的模式来解释模式。下面来自 grep 的帮助页:
|
||||
|
||||
基本的正则表达式元字符 ?、+、 {、 |、 ( 和 ) 已经失去了它们原来的意义,要使用的话用反斜线的版本 \?、\+、\{、\|、\( 和 \) 来代替。
|
||||
传统的 egrep 并不支持 { 元字符,一些 egrep 的实现是以 \{ 替代的,所以一个可移植的脚本应该避免在 grep -E 使用 { 符号,要匹配字面的 { 应该使用 [}]。
|
||||
GNU grep -E 试图支持传统的用法,如果 { 出在在无效的间隔规范字符串这前,它就会假定 { 不是特殊字符。
|
||||
例如,grep -E '{1' 命令搜索包含 {1 两个字符的串,而不会报出正则表达式语法错误。
|
||||
POSIX.2 标准允许这种操作的扩展,但在可移植脚本文件里应该避免这样使用。
|
||||
|
||||
参考:
|
||||
|
||||
- grep 和 regex 帮助手册页(7)
|
||||
- grep 的 info 页
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.cyberciti.biz/faq/grep-regular-expressions/
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[runningwater](https://github.com/runningwater)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
@ -1,5 +1,6 @@
|
||||
使用 grep 命令来搜索多个单词/字符串模式
|
||||
grep 命令系列:使用 grep 命令来搜索多个单词
|
||||
================================================================================
|
||||
|
||||
要使用 grep 命令来搜索多个字符串或单词,我们该怎么做?例如我想要查找 /path/to/file 文件中的 word1、word2、word3 等单词,我怎么样命令 grep 查找这些单词呢?
|
||||
|
||||
[grep 命令支持正则表达式][1]匹配模式。要使用多单词搜索,请使用如下语法:
|
||||
@ -10,7 +11,7 @@
|
||||
|
||||
$ grep 'warning\|error\|critical' /var/log/messages
|
||||
|
||||
仅仅只是要匹配单词的话,可以加上 -w 选项参数:
|
||||
仅仅只是要匹配单词(即该词两侧是单词分界符,针对西方以空格分隔的语言而言)的话,可以加上 -w 选项参数:
|
||||
|
||||
$ grep -w 'warning\|error\|critical' /var/log/messages
|
||||
|
||||
@ -26,7 +27,7 @@ egrep 命令可以跳过上面的语法格式,其使用的语法格式如下
|
||||
|
||||
![Fig.01: Linux / Unix egrep Command Search Multiple Words Demo Output](http://s0.cyberciti.org/uploads/faq/2008/04/egrep-words-output.png)
|
||||
|
||||
Fig.01: Linux / Unix egrep 命令查找多个单词输出例子
|
||||
图一: Linux / Unix egrep 命令查找多个单词输出例子
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -34,8 +35,8 @@ via: http://www.cyberciti.biz/faq/searching-multiple-words-string-using-grep/
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[runningwater](https://github.com/runningwater)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.cyberciti.biz/faq/grep-regular-expressions/
|
||||
[1]:https://linux.cn/article-6941-1.html
|
@ -1,25 +1,25 @@
|
||||
(translating by runningwater)
|
||||
Grep Count Lines If a String / Word Matches
|
||||
grep 命令系列:用 grep 命令统计匹配字符串的行数
|
||||
================================================================================
|
||||
How do I count lines if given word or string matches for each input file under Linux or UNIX operating systems?
|
||||
|
||||
You need to pass the -c or --count option to suppress normal output. It will display a count of matching lines for each input file:
|
||||
在 Linux 或 UNIX 操作系统下,对于给定的单词或字符串,我们应该怎么统计它们在每个输入文件中存在的行数呢?
|
||||
|
||||
您需要通过添加 -c 或者 --count 选项参数来抑制正常的输出。它将会显示对输入文件单词匹配的行数,如下所示:
|
||||
|
||||
$ grep -c vivek /etc/passwd
|
||||
|
||||
OR
|
||||
或者
|
||||
|
||||
$ grep -w -c vivek /etc/passwd
|
||||
|
||||
Sample outputs:
|
||||
输出的示例:
|
||||
|
||||
1
|
||||
|
||||
However, with the -v or --invert-match option it will count non-matching lines, enter:
|
||||
相反的,使用 -v 或者 --invert 选项参数可以统计出不匹配的输入文件行数,键入:
|
||||
|
||||
$ grep -c vivek /etc/passwd
|
||||
|
||||
Sample outputs:
|
||||
输出的示例:
|
||||
|
||||
45
|
||||
|
||||
@ -29,6 +29,6 @@ via: http://www.cyberciti.biz/faq/grep-count-lines-if-a-string-word-matches/
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[runningwater](https://github.com/runningwater)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
@ -1,14 +1,14 @@
|
||||
(translating by runningwater)
|
||||
Grep From Files and Display the File Name
|
||||
grep 命令系列:从文件中搜索并显示文件名
|
||||
================================================================================
|
||||
How do I grep from a number of files and display the file name only?
|
||||
|
||||
When there is more than one file to search it will display file name by default:
|
||||
我怎样从几个文件中搜索(grep),并只显示匹配到的文件的文件名?
|
||||
|
||||
grep "word" filename
|
||||
当你从不止一个的文件中搜索时,默认它将显示文件名:
|
||||
|
||||
grep "word" 文件名
|
||||
grep root /etc/*
|
||||
|
||||
Sample outputs:
|
||||
示例输出:
|
||||
|
||||
/etc/bash.bashrc: See "man sudo_root" for details.
|
||||
/etc/crontab:17 * * * * root cd / && run-parts --report /etc/cron.hourly
|
||||
@ -20,12 +20,12 @@ Sample outputs:
|
||||
/etc/logrotate.conf: create 0664 root utmp
|
||||
/etc/logrotate.conf: create 0660 root utmp
|
||||
|
||||
The first name is file name (e.g., /etc/crontab, /etc/group). The -l option will only print filename if th
|
||||
每行开始的第一个部分是文件名(如:/etc/crontab、/etc/group)。使用 -l 选项可以只显示文件名:
|
||||
|
||||
grep -l "string" filename
|
||||
grep -l root /etc/*
|
||||
|
||||
Sample outputs:
|
||||
示例输出:
|
||||
|
||||
/etc/aliases
|
||||
/etc/arpwatch.conf
|
||||
@ -36,12 +36,12 @@ Sample outputs:
|
||||
/etc/crontab
|
||||
/etc/group
|
||||
|
||||
You can suppress normal output; instead print the name of each input file from **which no output would normally have been** printed:
|
||||
你也可以逆转输出;使用 -L 选项来输出**那些不匹配的文件的文件名**:
|
||||
|
||||
grep -L "word" filename
|
||||
grep -L root /etc/*
|
||||
|
||||
Sample outputs:
|
||||
示例输出:
|
||||
|
||||
/etc/apm
|
||||
/etc/apparmor
|
||||
@ -62,7 +62,7 @@ Sample outputs:
|
||||
via: http://www.cyberciti.biz/faq/grep-from-files-and-display-the-file-name/
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[runningwater](https://github.com/runningwater)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
@ -0,0 +1,68 @@
|
||||
grep 命令系列:如何在 UNIX 中根据文件内容查找文件
|
||||
================================================================================
|
||||
|
||||
为了完成课程作业,我写了很多 C 语言代码并把它们保存为 /home/user/c/*.c 和 *.h。那么在 UNIX shell 窗口中我如何能通过字符串或者单词(例如函数名 main())文件内容来查找文件呢?
|
||||
|
||||
你需要用到以下工具:
|
||||
|
||||
[a] **grep 命令** : 输出匹配模式的行。
|
||||
|
||||
[b] **find 命令**: 在目录层次中查找文件。
|
||||
|
||||
### [使用 grep 命令根据内容查找文件][1]
|
||||
|
||||
输入以下命令:
|
||||
|
||||
grep 'string' *.txt
|
||||
grep 'main(' *.c
|
||||
grep '#include<example.h>' *.c
|
||||
grep 'getChar*' *.c
|
||||
grep -i 'ultra' *.conf
|
||||
grep -iR 'ultra' *.conf
|
||||
|
||||
其中
|
||||
|
||||
- **-i** : 忽略模式(匹配字符串 valid、 VALID、 ValID )和输入文件(匹配 file.c FILE.c FILE.C)的大小写。
|
||||
- **-R** : 递归读取每个目录下的所有文件。
|
||||
|
||||
|
||||
### 高亮匹配到的模式 ###
|
||||
|
||||
在搜索大量文件的时候你可以轻松地高亮模式:
|
||||
|
||||
$ grep --color=auto -iR 'getChar();' *.c
|
||||
|
||||
### 为查找到的模式显示文件名和行号 ###
|
||||
|
||||
你也许需要显示文件名和行号:
|
||||
|
||||
$ grep --color=auto -iRnH 'getChar();' *.c
|
||||
|
||||
其中,
|
||||
|
||||
- **-n** : 在输出的每行前面添加以 1 开始的行号。
|
||||
- **-H** : 为每个匹配打印文件名。要搜索多个文件时这是默认选项。
|
||||
|
||||
$grep --color=auto -nH 'DIR' *
|
||||
|
||||
输出样例:
|
||||
|
||||
![Fig.01: grep 命令显示搜索到的模式](http://www.cyberciti.biz/faq/wp-content/uploads/2008/09/grep-command.png)
|
||||
|
||||
*Fig.01: grep 命令显示搜索到的模式*
|
||||
|
||||
你也可以使用 find 命令:
|
||||
|
||||
$ find . -name "*.c" -print | xargs grep "main("
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.cyberciti.biz/faq/unix-linux-finding-files-by-content/
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[ictlyh](http://mutouxiaogui.cn/blog/)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.cyberciti.biz/faq/howto-search-find-file-for-text-string/
|
@ -1,17 +1,18 @@
|
||||
Linux / UNIX View Only Configuration File Directives ( Uncommented Lines of a Config File )
|
||||
================================================================================
|
||||
Most Linux and UNIX-like system configuration files are documented using comments, but some time I just need to see line of configuration text in a config file. How can I view just the uncommented configuration file directives from squid.conf or httpd.conf file? How can I strip out comments and blank lines on a Linux or Unix-like systems?
|
||||
grep 命令系列:如何只查看配置文件中未被注释的有效配置行
|
||||
=========================================================
|
||||
|
||||
To view just the uncommented lines of text in a config file use the grep, sed, awk, perl or any other text processing utility provided by UNIX / BSD / OS X / Linux operating systems.
|
||||
大多数的Linux和类Unix系统的配置文件中都有许多的注释行,但是有时候我只想看其中的有效配置行。那我怎么才能只看到quid.conf或httpd.conf这样的配置文件中的非注释命令行呢?怎么去掉这些注释或者空行呢?
|
||||
|
||||
### grep command example to strip out command ###
|
||||
我们可以使用 UNIX/BSD/OS X/Linux 这些操作系统自身提供的 grep,sed,awk,perl或者其他文本处理工具来查看配置文件中的有效配置命令行。
|
||||
|
||||
You can use the gerp command as follows:
|
||||
### grep 命令示例——去掉注释 ###
|
||||
|
||||
可以按照如下示例使用grep命令:
|
||||
|
||||
$ grep -v "^#" /path/to/config/file
|
||||
$ grep -v "^#" /etc/apache2/apache2.conf
|
||||
|
||||
Sample outputs:
|
||||
示例输出:
|
||||
|
||||
ServerRoot "/etc/apache2"
|
||||
|
||||
@ -98,7 +99,7 @@ Sample outputs:
|
||||
|
||||
Include /etc/apache2/sites-enabled/
|
||||
|
||||
To suppress blank lines use [egrep command][1], run:
|
||||
想要跳过其中的空行,可以使用 [egrep 命令][1], 示例:
|
||||
|
||||
egrep -v "^#|^$" /etc/apache2/apache2.conf
|
||||
## or pass it to the page such as more or less ##
|
||||
@ -113,36 +114,36 @@ To suppress blank lines use [egrep command][1], run:
|
||||
[ -f "$1" ] && command egrep -v "^#|^$" "$f" || echo "Error $1 file not found."
|
||||
}
|
||||
|
||||
Sample output:
|
||||
示例输出:
|
||||
|
||||
![Fig.01: Unix/Linux Egrep Strip Out Comments Blank Lines](http://s0.cyberciti.org/uploads/faq/2008/05/grep-strip-out-comments-blank-lines.jpg)
|
||||
|
||||
Fig.01: Unix/Linux Egrep Strip Out Comments Blank Lines
|
||||
*图 01: Unix/Linux Egrep 除去注释行和空行*
|
||||
|
||||
### Understanding grep/egrep command line options ###
|
||||
### 理解 grep/egrep 命令行选项 ###
|
||||
|
||||
The -v option invert the sense of matching, to select non-matching lines. This option should work under all posix based systems. The regex ^$ matches and removes all blank lines and ^# matches and removes all comments that starts with a "#".
|
||||
-v 选项,选择出不匹配的命令行。该选项适用于所有基于posix的系统。正则表达式 `^$` 匹配出所有的非空行, `^#` 匹配出所有的不以“#”开头的非注释行。
|
||||
|
||||
### sed Command example ###
|
||||
### sed 命令示例 ###
|
||||
|
||||
GNU / sed command can be used as follows:
|
||||
可以按照如下示例使用 GNU 上的 sed 命令:
|
||||
|
||||
$ sed '/ *#/d; /^ *$/d' /path/to/file
|
||||
$ sed '/ *#/d; /^ *$/d' /etc/apache2/apache2.conf
|
||||
|
||||
GNU or BSD sed can update your config file too. The syntax is as follows to edit files in-place, saving backups with the specified extension such as .bak:
|
||||
|
||||
GNU 或 BSD 上的 sed 也可以修改配置文件。下面的命令的作用是原地编辑文件,并以特定(比如 .bak)备份文件:
|
||||
|
||||
sed -i'.bak.2015.12.27' '/ *#/d; /^ *$/d' /etc/apache2/apache2.conf
|
||||
|
||||
For more info see man pages - [grep(1)][2], [sed(1)][3]
|
||||
更多信息见参考手册 - [grep(1)][2], [sed(1)][3]。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.cyberciti.biz/faq/shell-display-uncommented-lines-only/
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
译者:[sonofelice](https://github.com/sonofelice)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,164 @@
|
||||
如何在 CentOS 7 / Ubuntu 15.04 上安装 PHP 框架 Laravel
|
||||
================================================================================
|
||||
|
||||
大家好,这篇文章将要讲述如何在 CentOS 7 / Ubuntu 15.04 上安装 Laravel。如果你是一个 PHP Web 的开发者,你并不需要考虑如何在琳琅满目的现代 PHP 框架中选择,Laravel 是最轻松启动和运行的,它省时省力,能让你享受到 web 开发的乐趣。Laravel 信奉着一个普世的开发哲学,通过简单的指导创建出可维护代码具有最高优先级,你将保持着高速的开发效率,能够随时毫不畏惧更改你的代码来改进现有功能。
|
||||
|
||||
Laravel 安装并不繁琐,你只要跟着本文章一步步操作就能在 CentOS 7 或者 Ubuntu 15 服务器上安装。
|
||||
|
||||
### 1) 服务器要求 ###
|
||||
|
||||
在安装 Laravel 前需要安装一些它的依赖前提条件,主要是一些基本的参数调整,比如升级系统到最新版本,sudo 权限和安装依赖包。
|
||||
|
||||
当你连接到你的服务器时,请确保你能通以下命令能成功的使用 EPEL 仓库并且升级你的服务器。
|
||||
|
||||
#### CentOS-7 ####
|
||||
|
||||
# yum install epel-release
|
||||
|
||||
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
|
||||
# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
|
||||
|
||||
# yum update
|
||||
|
||||
#### Ubuntu ####
|
||||
|
||||
# apt-get install python-software-properties
|
||||
# add-apt-repository ppa:ondrej/php5
|
||||
|
||||
# apt-get update
|
||||
|
||||
# apt-get install -y php5 mcrypt php5-mcrypt php5-gd
|
||||
|
||||
### 2) 防火墙安装 ###
|
||||
|
||||
系统防火墙和 SELinux 设置对于用于产品应用安全来说非常重要,当你使用测试服务器的时候可以关闭防火墙,用以下命令行设置 SELinux 成宽容模式(permissive)来保证安装程序不受它们的影响。
|
||||
|
||||
# setenforce 0
|
||||
|
||||
### 3) Apache, MariaDB, PHP 安装 ###
|
||||
|
||||
Laravel 安装程序需要完成安装 LAMP 整个环境,需要额外安装 OpenSSL、PDO,Mbstring 和 Tokenizer 等 PHP 扩展。如果 LAMP 已经运行在你的服务器上你可以跳过这一步,直接确认一些必要的 PHP 插件是否安装好。
|
||||
|
||||
要安装完整 AMP 你需要在自己的服务器上运行以下命令。
|
||||
|
||||
#### CentOS ####
|
||||
|
||||
# yum install httpd mariadb-server php56w php56w-mysql php56w-mcrypt php56w-dom php56w-mbstring
|
||||
|
||||
要在 CentOS 7 上实现 MySQL / Mariadb 服务开机自动启动,你需要运行以下命令。
|
||||
|
||||
# systemctl start httpd
|
||||
# systemctl enable httpd
|
||||
|
||||
#systemctl start mysqld
|
||||
#systemctl enable mysqld
|
||||
|
||||
在启动 MariaDB 服务之后,你需要运行以下命令配置一个足够安全的密码。
|
||||
|
||||
#mysql_secure_installation
|
||||
|
||||
#### Ubuntu ####
|
||||
|
||||
# apt-get install mysql-server apache2 libapache2-mod-php5 php5-mysql
|
||||
|
||||
### 4) 安装 Composer ###
|
||||
|
||||
在我们安装 Laravel 前,先让我们开始安装 composer。安装 composer 是安装 Laravel 的最重要步骤之一,因为 composer 能帮我们安装 Laravel 的各种依赖。
|
||||
|
||||
#### CentOS/Ubuntu ####
|
||||
|
||||
在 CentOS / Ubuntu 下运行以下命令来配置 composer 。
|
||||
|
||||
# curl -sS https://getcomposer.org/installer | php
|
||||
# mv composer.phar /usr/local/bin/composer
|
||||
# chmod +x /usr/local/bin/composer
|
||||
|
||||
![composer installation](http://blog.linoxide.com/wp-content/uploads/2015/11/14.png)
|
||||
|
||||
### 5) 安装 Laravel ###
|
||||
|
||||
我们可以运行以下命令从 github 上下载 Laravel 的安装包。
|
||||
|
||||
# wget https://github.com/laravel/laravel/archive/develop.zip
|
||||
|
||||
运行以下命令解压安装包并且移动 document 的根目录。
|
||||
|
||||
# unzip develop.zip
|
||||
|
||||
# mv laravel-develop /var/www/
|
||||
|
||||
现在使用 compose 命令来安装目录下所有 Laravel 所需要的依赖。
|
||||
|
||||
# cd /var/www/laravel-develop/
|
||||
# composer install
|
||||
|
||||
![compose laravel](http://blog.linoxide.com/wp-content/uploads/2015/11/25.png)
|
||||
|
||||
### 6) 密钥 ###
|
||||
|
||||
为了加密服务器,我们使用以下命令来生成一个加密后的 32 位的密钥。
|
||||
|
||||
# php artisan key:generate
|
||||
|
||||
Application key [Lf54qK56s3qDh0ywgf9JdRxO2N0oV9qI] set successfully
|
||||
|
||||
现在把这个密钥放到 'app.php' 文件,如以下所示。
|
||||
|
||||
# vim /var/www/laravel-develop/config/app.php
|
||||
|
||||
![Key encryption](http://blog.linoxide.com/wp-content/uploads/2015/11/45.png)
|
||||
|
||||
### 7) 虚拟主机和所属用户 ###
|
||||
|
||||
在 composer 安装好后,分配 document 根目录的权限和所属用户,如下所示。
|
||||
|
||||
# chmod 775 /var/www/laravel-develop/app/storage
|
||||
|
||||
# chown -R apache:apache /var/www/laravel-develop
|
||||
|
||||
用任意一款编辑器打开 apache 服务器的默认配置文件,在文件最后加上虚拟主机配置。
|
||||
|
||||
# vim /etc/httpd/conf/httpd.conf
|
||||
|
||||
----------
|
||||
|
||||
ServerName laravel-develop
|
||||
DocumentRoot /var/www/laravel/public
|
||||
|
||||
start Directory /var/www/laravel
|
||||
AllowOverride All
|
||||
Directory close
|
||||
|
||||
现在我们用以下命令重启 apache 服务器,打开浏览器查看 localhost 页面。
|
||||
|
||||
#### CentOS ####
|
||||
|
||||
# systemctl restart httpd
|
||||
|
||||
#### Ubuntu ####
|
||||
|
||||
# service apache2 restart
|
||||
|
||||
### 8) Laravel 5 网络访问 ###
|
||||
|
||||
打开浏览器然后输入你配置的 IP 地址或者完整域名(Fully qualified domain name)你将会看到 Laravel 5 的默认页面。
|
||||
|
||||
![Laravel Default](http://blog.linoxide.com/wp-content/uploads/2015/11/35.png)
|
||||
|
||||
### 总结 ###
|
||||
|
||||
Laravel 框架对于开发网页应用来说是一个绝好的的工具。所以,看了这篇文章你将学会在 Ubuntu 15 和 CentOS 7 上安装 Laravel, 之后你就可以使用这个超棒的 PHP 框架提供的各种功能和舒适便捷性来进行你的开发工作。
|
||||
|
||||
如果您有什么意见或者建议请在以下评论区中回复,我们将根据您宝贵的反馈来使我们的文章更加浅显易懂。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://linoxide.com/linux-how-to/install-laravel-php-centos-7-ubuntu-15-04/
|
||||
|
||||
作者:[Kashif][a]
|
||||
译者:[NearTan](https://github.com/NearTan)
|
||||
校对:[Caroline](https://github.com/carolinewuyan)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://linoxide.com/author/kashifs/
|
@ -0,0 +1,162 @@
|
||||
在 Linux 上安装和配置 Munin 监控服务器
|
||||
================================================================================
|
||||
![](http://www.linuxnix.com/wp-content/uploads/2015/12/munin_page.jpg)
|
||||
|
||||
Munin 是一款类似 [RRD tool][1] 的非常棒的系统监控工具,它能提供给你多方面的系统性能信息,例如 **磁盘、网络、进程、系统和用户**。这些是 Munin 默认监控的内容。
|
||||
|
||||
### Munin 如何工作? ###
|
||||
|
||||
Munin 以客户端-服务器模式运行。主服务器上运行的 Munin 服务器进程会从本地运行的客户端守护进程(Munin 可以监控它自己的资源)或者远程客户端(Munin 可以监控上百台机器)收集数据,然后在它的 web 界面上以图形的方式显示出来。
|
||||
|
||||
### 在 nutshell 中配置 Munin ###
|
||||
|
||||
要配置服务器端和客户端,我们需要完成以下两步。
|
||||
|
||||
1. 安装 Munin 服务器软件包并配置,使得它能从客户端收集数据。
|
||||
2. 安装 Munin 客户端,使得服务器能连接到客户端守护进程进行数据收集。
|
||||
|
||||
### 在 Linux 上安装 munin 服务器端 ###
|
||||
|
||||
在基于 Ubuntu/Debian 的机器上安装 Munin 服务器:
|
||||
|
||||
apt-get install munin apache2
|
||||
|
||||
在基于 Redhat/CentOS 的机器上安装 Munin 服务器:
|
||||
|
||||
在基于 Redhat 的机器上安装 Munin 之前,你需要确保 [启用 EPEL 软件仓库][2],因为基于 Redhat 的机器的软件仓库默认没有 Munin。
|
||||
|
||||
yum install munin httpd
|
||||
|
||||
### 在 Linux 上配置 Munin 服务器端 ###
|
||||
|
||||
下面是我们要在服务器上启动 Munini 所进行的步骤:
|
||||
|
||||
1. 在 /etc/munin/munin.conf 中添加需要监控的主机详情。
|
||||
2. 配置 apache web 服务器使其包括 munin 配置。
|
||||
3. 为 web 界面创建用户名和密码
|
||||
4. 重启 apache 服务器
|
||||
|
||||
####步骤 1####
|
||||
|
||||
在 **/etc/munin/munin.conf** 文件中添加主机条目。调到文件末尾添加要监控的客户端。在这个例子中,我添加了要监控的数据库服务器和它的 IP 地址。
|
||||
|
||||
示例:
|
||||
|
||||
[db.linuxnix.com]
|
||||
address 192.168.1.25
|
||||
use_node_name yes
|
||||
|
||||
保存文件并退出。
|
||||
|
||||
####步骤 2####
|
||||
|
||||
在 /etc/apache2/conf.d 目录中编辑或创建文件 munin.conf 用于包括 Munin 和 Apache 相关的配置。另外注意一点,默认其它和 web 相关的 Munin 配置保存在 /var/www/munin 目录。
|
||||
|
||||
vi /etc/apache2/conf.d/munin.conf
|
||||
|
||||
内容:
|
||||
|
||||
Alias /munin /var/www/munin
|
||||
<Directory /var/www/munin>
|
||||
Order allow,deny
|
||||
Allow from localhost 127.0.0.0/8 ::1
|
||||
AllowOverride None
|
||||
Options ExecCGI FollowSymlinks
|
||||
AddHandler cgi-script .cgi
|
||||
DirectoryIndex index.cgi
|
||||
AuthUserFile /etc/munin/munin.passwd
|
||||
AuthType basic
|
||||
AuthName "Munin stats"
|
||||
require valid-user
|
||||
<IfModule mod_expires.c>
|
||||
ExpiresActive On
|
||||
ExpiresDefault M310
|
||||
</IfModule>
|
||||
</Directory>
|
||||
|
||||
保存文件并退出。
|
||||
|
||||
####步骤 3####
|
||||
|
||||
现在为查看 munin 的图示而创建用户名和密码:
|
||||
|
||||
htpasswd -c /etc/munin/munin-htpasswd munin
|
||||
|
||||
**注意**:对于 Redhat/Centos 机器,要访问你的配置文件,需要在每个路径中用 “**httpd**” 替换 “**apache2**”。
|
||||
|
||||
####步骤 4####
|
||||
|
||||
重启 Apache 服务器,使得 Munin 配置生效。
|
||||
|
||||
基于 Ubuntu/Debian :
|
||||
|
||||
service apache2 restart
|
||||
|
||||
基于 Centos/Redhat :
|
||||
|
||||
service httpd restart
|
||||
|
||||
### 在 Linux 上安装和配置 Munin 客户端 ###
|
||||
|
||||
####步骤 1####
|
||||
|
||||
在 Linux 上安装 Munin 客户端
|
||||
|
||||
apt-get install munin-node
|
||||
|
||||
**注意**:如果你想监控你的 Munin 服务器端,你也需要在服务器端安装 munin-node。
|
||||
|
||||
####步骤 2####
|
||||
|
||||
编辑 munin-node.conf 文件配置客户端。
|
||||
|
||||
vi /etc/munin/munin-node.conf
|
||||
|
||||
示例:
|
||||
|
||||
allow ^127\.0\.0\.1$
|
||||
allow ^10\.10\.20\.20$
|
||||
|
||||
----------
|
||||
|
||||
# 监听到哪个地址上
|
||||
host *
|
||||
|
||||
----------
|
||||
|
||||
# 以及哪个端口
|
||||
port 4949
|
||||
|
||||
**注意**: 10.10.20.20 是我的 Munin 服务器,它连接到客户端的 4949 端口获取数据。
|
||||
|
||||
####步骤 3####
|
||||
|
||||
在客户端机器中重启 munin-node:
|
||||
|
||||
service munin-node restart
|
||||
|
||||
### 测试连接 ###
|
||||
|
||||
检查你是否能从服务器的连接到客户端的 4949 端口,如果不行,你需要在客户端机器中的防火墙打开该端口。
|
||||
|
||||
telnet db.linuxnix.com 4949
|
||||
|
||||
访问 Munin web 页面
|
||||
|
||||
http://munin.linuxnix.com/munin/index.html
|
||||
|
||||
希望这些能对你配置基本的 Munin 服务器有所帮助。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.linuxnix.com/install-and-configure-munin-monitoring-server-in-linux/
|
||||
|
||||
作者:[Surendra Anne][a]
|
||||
译者:[ictlyh](http://mutouxiaogui.cn/blog/)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.linuxnix.com/author/surendra/
|
||||
[1]:http://www.linuxnix.com/network-monitoringinfo-gathering-tools-in-linux/
|
||||
[2]:https://linux.cn/article-2324-1.html
|
@ -1,14 +1,13 @@
|
||||
|
||||
Linux / Unix: jobs 命令示例
|
||||
jobs 命令示例
|
||||
================================================================================
|
||||
|
||||
我是个新的 Linux 或 Unix 用户。如何在 Linux 或类 Unix 系统中使用 BASH/KSH/TCSH 或者基于 POSIX 的 shell 来查看当前正在进行的作业?在 Unix/Linux 上怎样显示当前作业的状态?
|
||||
我是个新的 Linux/Unix 用户。我该如何在 Linux 或类 Unix 系统中使用 BASH/KSH/TCSH 或者基于 POSIX 的 shell 来查看当前正在进行的作业(job)?在 Unix/Linux 上怎样显示当前作业的状态?(LCTT 译注:job,也常称为“任务”)
|
||||
|
||||
作业控制的是什么,停止/暂停进程(命令)的执行并按你的要求继续/恢复它们的执行。这是根据你的操作系统和 shell 如,bash/ksh 或 POSIX shell 来执行的。
|
||||
作业控制是一种能力,可以停止/暂停进程(命令)的执行并按你的要求继续/恢复它们的执行。这是通过你的操作系统和诸如 bash/ksh 或 POSIX shell 等 shell 来执行的。
|
||||
|
||||
shell 会将当前所执行的作业保存在一个表中,可以用 jobs 命令来显示。
|
||||
|
||||
### 目的 ###
|
||||
### 用途 ###
|
||||
|
||||
> 在当前 shell 会话中显示作业的状态。
|
||||
|
||||
@ -30,7 +29,7 @@ shell 会将当前所执行的作业保存在一个表中,可以用 jobs 命
|
||||
|
||||
在开始使用 jobs 命令前,你需要在系统上先启动多个作业。执行以下命令来启动作业:
|
||||
|
||||
## 启动 xeyes, calculator, 和 gedit 文本编辑器 ###
|
||||
### 启动 xeyes, calculator, 和 gedit 文本编辑器 ###
|
||||
xeyes &
|
||||
gnome-calculator &
|
||||
gedit fetch-stock-prices.py &
|
||||
@ -39,7 +38,7 @@ shell 会将当前所执行的作业保存在一个表中,可以用 jobs 命
|
||||
|
||||
ping www.cyberciti.biz
|
||||
|
||||
按 **Ctrl-Z** 键来暂停 ping 命令的作业。
|
||||
按 **Ctrl-Z** 键来挂起(suspend) ping 命令的作业。
|
||||
|
||||
### jobs 命令示例 ###
|
||||
|
||||
@ -54,7 +53,7 @@ shell 会将当前所执行的作业保存在一个表中,可以用 jobs 命
|
||||
[3]- 7910 Running gedit fetch-stock-prices.py &
|
||||
[4]+ 7946 Stopped ping cyberciti.biz
|
||||
|
||||
要显示进程 ID 或作业名称请使用 “P” 选项,输入:
|
||||
要显示名字以“p”开头的进程 ID 或作业名称,输入:
|
||||
|
||||
$ jobs -p %p
|
||||
|
||||
@ -66,7 +65,7 @@ shell 会将当前所执行的作业保存在一个表中,可以用 jobs 命
|
||||
|
||||
[4]- Stopped ping cyberciti.biz
|
||||
|
||||
字符 % 后加一个作业。在这个例子中,你需要使用作业的名称来暂停它,如 %ping。
|
||||
字符 % 是一个指定任务的方法。在这个例子中,你可以使用作业名称开头字符串来来暂停它,如 %ping。
|
||||
|
||||
### 如何显示进程 ID 不包含其他正常的信息? ###
|
||||
|
||||
@ -77,7 +76,8 @@ shell 会将当前所执行的作业保存在一个表中,可以用 jobs 命
|
||||
示例输出:
|
||||
|
||||
![Fig.01: Displaying the status of jobs in the shell](http://s0.cyberciti.org/uploads/faq/2013/02/jobs-command-output.jpg)
|
||||
Fig.01: 在 shell 中显示 jobs 的状态
|
||||
|
||||
*Fig.01: 在 shell 中显示 jobs 的状态*
|
||||
|
||||
### 如何只列出最近一次状态改变的进程? ###
|
||||
|
||||
@ -85,7 +85,7 @@ Fig.01: 在 shell 中显示 jobs 的状态
|
||||
|
||||
$ sleep 100 &
|
||||
|
||||
现在,只显示作业最近一次的状态(停止或退出),输入:
|
||||
现在,只显示自从上次提示过停止或退出之后的作业,输入:
|
||||
|
||||
$ jobs -n
|
||||
|
||||
@ -137,43 +137,18 @@ Fig.01: 在 shell 中显示 jobs 的状态
|
||||
|
||||
摘自 [bash(1)][1] 命令 man 手册页:
|
||||
|
||||
注:表格
|
||||
<table border="1">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Option</td>
|
||||
<td>Description</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd><strong>-l</strong></kbd></td>
|
||||
<td>Show process id's in addition to the normal information.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd><strong>-p</strong></kbd></td>
|
||||
<td>Show process id's only.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd><strong>-n</strong></kbd></td>
|
||||
<td>Show only processes that have changed status since the last notification are printed.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd><strong>-r</strong></kbd></td>
|
||||
<td>Restrict output to running jobs only.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd><strong>-s</strong></kbd></td>
|
||||
<td>Restrict output to stopped jobs only.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd><strong>-x</strong></kbd></td>
|
||||
<td>COMMAND is run after all job specifications that appear in ARGS have been replaced with the process ID of that job's process group leader./td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|选项|描述|
|
||||
|---|------------------|
|
||||
|`-l`| 列出进程 ID 及其它信息。|
|
||||
|`-p`| 仅列出进程 ID。|
|
||||
|`-n`| 仅列出自从上次输出了状态变化提示(比如显示有进程退出)后的发生了状态变化的进程。|
|
||||
|`-r`| 仅显示运行中的作业。|
|
||||
|`-s`| 仅显示停止的作业。|
|
||||
|`-x`| 运行命令及其参数,并用新的命令的进程 ID 替代所匹配的原有作业的进程组 ID。|
|
||||
|
||||
### 关于 /usr/bin/jobs 和 shell 内建的说明 ###
|
||||
|
||||
输入以下 type 命令找出是否 jobs 命令是 shell 的内建命令或是外部命令:
|
||||
输入以下 type 命令找出是否 jobs 命令是 shell 的内建命令或是外部命令还是都是:
|
||||
|
||||
$ type -a jobs
|
||||
|
||||
@ -182,15 +157,15 @@ Fig.01: 在 shell 中显示 jobs 的状态
|
||||
jobs is a shell builtin
|
||||
jobs is /usr/bin/jobs
|
||||
|
||||
在几乎所有情况下,jobs 命令都是作为 BASH/KSH/POSIX shell 内建命令被实现的。/usr/bin/jobs 命令不能被用在当前 shell 中。/usr/bin/jobs 命令工作在不同的环境中不共享父 bash/ksh 的 shells 来执行作业。
|
||||
在几乎所有情况下,你都需要使用 BASH/KSH/POSIX shell 内建的jobs 命令。/usr/bin/jobs 命令不能被用在当前 shell 中。/usr/bin/jobs 命令工作在不同的环境中,并不共享其父 bash/ksh 的 shell 作业。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via:
|
||||
via: http://www.cyberciti.biz/faq/unix-linux-jobs-command-examples-usage-syntax/
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[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/) 荣誉推出
|
||||
|
@ -0,0 +1,56 @@
|
||||
IPv6 互联网中的隐私保护和网络管理器
|
||||
==============================
|
||||
|
||||
IPv6 的使用量正在不断增加,让我们始料未及的是,伴随这个协议不断增加的使用量,大量的隐私问题涌现出来。互联网社区在积极发布相关解决方案。当前状况是怎样的呢?网络管理器(NetworkManager)又是如何跟上的呢?让我们来瞧瞧吧!
|
||||
|
||||
![](https://blogs.gnome.org/lkundrak/files/2015/12/cameras1.jpg)
|
||||
|
||||
## 通过 IPv6 方式连接的主机的特性
|
||||
|
||||
启用了 IPv6 的节点(LCTT 译注:节点在网络中指一个联网的设备)并不需要类似 IPv4 网络中 [DHCP](https://tools.ietf.org/html/rfc2132) 服务器的中央机构来配置他们的地址。它们发现(discover)自己所在的网络,然后通过生成主机部分来[自主生成地址](https://tools.ietf.org/html/rfc4862)。这种方式使得网络配置更加简单,并且能够更好的扩展到更大规模的网络。然而,这种方式也有一些缺点。首先,这个节点需要确保它的地址不会和网络上其他节点冲突。其次,如果这个节点在进入的每一个网络中使用相同的主机部分,它的运动就可以被追踪,如此一来,隐私便处于危险之中。
|
||||
|
||||
负责制定因特网标准的组织 Internet 工程任务组(Internet Engineering Task Force,IETF)[意识到了这个问题](https://tools.ietf.org/html/draft-iesg-serno-privacy-00),这个组织建议取消使用硬件序列号来识别网络上的节点。
|
||||
|
||||
但实际的实施情况是怎样的呢?
|
||||
|
||||
地址唯一性问题可以通过[重复地址检测(Duplicate Address Detection, DAD)](https://tools.ietf.org/html/rfc4862#section-5.4)机制来解决。当节点为自身创建地址的时候,它首先通过[邻居发现协议(Neighbor Discovery Protocol)](https://tools.ietf.org/html/rfc4861)(一种不同于 IPv4 [ARP](https://tools.ietf.org/html/rfc826)协议的机制)来检查另一个节点是否使用了相同的地址。当它发现地址已经被使用,它必须抛弃掉这个地址。
|
||||
|
||||
解决另一个问题——隐私问题,有一点困难。一个 IP 地址(无论 IPv4 或 IPv6)由网络部分和主机部分组成(LCTT 译注:网络部分用来划分子网,主机部分用来从相应子网中找到具体的主机)。主机查找出相关的地址的网络部分,并且生成地址的主机部分。传统上它只使用了源自网络硬件(MAC)地址的接口识别器(Interface Identifier)。MAC 地址在硬件制造的时候就被设置好了,它可以唯一的识别机器。这样就确保了地址的稳定性和唯一性。这对避免地址冲突来说是件好事,但是对隐私来说一点也不好。主机部分在不同网络下保持恒定意味着机器在进入不同网络时可以被唯一的识别。这在协议制定的时候看起来无可非议,但是随着 IPv6 的流行,人们对于隐私问题的担忧也愈演愈烈。幸运的是,解决办法还是有的。
|
||||
|
||||
## 使用隐私扩展(privacy extensions)
|
||||
|
||||
IPv4 的最大问题——地址枯竭,已经不是什么秘密。对 IPv6 来说,这一点不再成立,事实上,使用 IPv6 的主机能够相当大方的利用地址。多个 IPv6 地址对应一块网卡绝对没有任何不合适,正好相反,这是一种标准情形。最起码每个节点都有一个“本地连接(link-local)地址”,它被用来与同一物理链路的节点联络。当网络包含了一个连接其他网络的路由器,这个网络中的每个节点都有一个与每个直接连接的网络相联络的地址。如果主机在同一个网络有更多的地址,该节点(LCTT 译注:指路由器)将接受它们全部的传入流量。对于外发连接,它会把地址显示给远程主机,内核会挑选最适合的地址。但到底是哪一个呢?
|
||||
|
||||
启用了隐私扩展,就像 [RFC4941](https://tools.ietf.org/html/rfc4941) 定义的那样,时常会生成带有随机主机部分的新地址。最新的那个被用于最新的外发连接,与此同时,那些不被使用了的旧地址将被丢弃。这是一个极好的策略——主机不会对外暴露其固定地址,因为它不用于外发连接,但它仍然会接受知道其固定地址的主机连接。
|
||||
|
||||
但这也存在美中不足之处——某些应用会把地址与用户识别绑定在一起。让我们来考虑一下这种情形,一个 web 应用在用户认证的时候生成一个 HTTP Cookie,但它只接受实施认证的地址的连接。当内核生成了一个新的临时地址,服务器会拒绝使用这个地址的请求,实际上相当于用户登出了。地址是不是建立用户认证的合适机制值得商榷,但这确实是现实中应用程序正在做的。
|
||||
|
||||
## 解救之道——隐私固定寻址(Privacy stable addressing)
|
||||
|
||||
解决这个问题可能需要另辟蹊径。唯一的(当然咯)地址确实有必要,对于特定网络来说是稳定的,但当用户进入了另一个网络后仍然会变,这样的话追踪就变得几乎不可能。RFC7217 介绍了一种如上所述的机制。
|
||||
|
||||
创建隐私固定地址依赖于伪随机值,这个随机值只被主机本身知晓,它不会暴露给网络上的其他主机。这个随机值随后被一个密码安全算法加密,一起被加密的还有一些与网络连接的特定值。这些值包含:用以标识网卡的名称;网络地址;对于这个网络来说有可能的其他特殊值,例如无线网络的 SSID。使用这个安全密钥使其他主机很难预测结果地址,与此同时,当进入不同的网络时,网络的特殊数据会让地址变得不同。
|
||||
|
||||
这也巧妙的解决了地址重复问题。因为有随机值的存在,冲突也不太可能发生。万一发生了冲突,结果地址会得到重复地址检测失败的记录,这时会生成一个不同的地址而不会断开网络连接。看,这种方式很聪明吧。
|
||||
|
||||
使用隐私固定地址一点儿也不会妨碍隐私扩展。你可以在使用 RFC4941 所描述的临时地址的同时使用 [RFC7217](https://tools.ietf.org/html/rfc7217)中的固定地址。
|
||||
|
||||
## 网络管理器(NetworkManager)处于什么样的状况?
|
||||
|
||||
我们已经在网络管理器1.0.4版本中实现了隐私扩展(privacy extensions)。在这个版本中,隐私扩展默认开启。你可以用 ipv6.ip6-privacy 参数来控制它。
|
||||
|
||||
在网络管理器1.2版本中,我们将会加入固定隐私寻址(stable privacy addressing)。应该指出的是,目前的隐私扩展还不符合这种需求。我们可以使用 ipv6.addr-gen-mode 参数来控制这个特性。如果它被设置成固定隐私,那么将会使用固定隐私寻址。设置成“eui64”或者干脆不设置它将会保持传统的默认寻址方式。
|
||||
|
||||
敬请期待2016年年初网络管理器1.2版本的发布吧!如果你想尝试一下最新的版本,不妨试试 Fedora Rawhide,它最终会变成 Fedora 24。
|
||||
|
||||
*我想感谢 Hannes Frederic Sowa,他给了我很有价值的反馈。如果没有他的帮助,这篇文章的作用将会逊色很多。另外,Hannes 也是 RFC7217 所描述机制的内核实现者,当网络管理器不起作用的时候,它将发挥作用。*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://blogs.gnome.org/lkundrak/2015/12/03/networkmanager-and-privacy-in-the-ipv6-internet/
|
||||
|
||||
作者:Lubomir Rintel
|
||||
译者:[itsang](https://github.com/itsang)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
@ -1,20 +1,20 @@
|
||||
如何更新ISPConfig 3 SSL证书
|
||||
如何更新 ISPConfig 3 SSL 证书
|
||||
================================================================================
|
||||
本教程描述了如何再ISPConfig 3控制面板中更新SSL证书。有两个可选的方法:
|
||||
本教程描述了如何在 ISPConfig 3控制面板中更新 SSL 证书。有两个可选的方法:
|
||||
|
||||
- 用OpenSSL创建一个新的OpenSSL证书和CSR。
|
||||
- 用ISPConfig updater更新SSL证书
|
||||
- 用 OpenSSL 创建一个新的 OpenSSL 证书和 CSR。
|
||||
- 用 ISPConfig updater 更新 SSL 证书
|
||||
|
||||
我将会用手工的方法更新ssl证书。
|
||||
我将从用手工的方法更新 SSL 证书开始。
|
||||
|
||||
### 1)用OpenSSL创建一个新的ISPConfig 3 SSL 证书 ###
|
||||
### 1)用 OpenSSL 创建一个新的 ISPConfig 3 SSL 证书 ###
|
||||
|
||||
用root用户登录你的服务器。在创建一个新的SSL证书之前,备份现有的。SSL证书是安全敏感的,因此我将它存储在/root/目录下。
|
||||
用 root 用户登录你的服务器。在创建一个新的 SSL 证书之前,先备份现有的。SSL 证书是安全敏感的,因此我将它存储在 /root/ 目录下。
|
||||
|
||||
tar pcfz /root/ispconfig_ssl_backup.tar.gz /usr/local/ispconfig/interface/ssl
|
||||
chmod 600 /root/ispconfig_ssl_backup.tar.gz
|
||||
|
||||
> 现在创建一个新的SSL证书密钥,证书请求(csr)和自签发证书。
|
||||
> 现在创建一个新的 SSL 证书密钥,证书请求(CSR)和自签发证书。
|
||||
|
||||
cd /usr/local/ispconfig/interface/ssl
|
||||
openssl genrsa -des3 -out ispserver.key 4096
|
||||
@ -25,13 +25,13 @@
|
||||
mv ispserver.key ispserver.key.secure
|
||||
mv ispserver.key.insecure ispserver.key
|
||||
|
||||
重启apache来加载新的SSL证书
|
||||
重启 apache 来加载新的 SSL 证书
|
||||
|
||||
service apache2 restart
|
||||
|
||||
### 2)用ISPConfig安装器来更新SSL证书 ###
|
||||
### 2)用 ISPConfig 安装器来更新 SSL 证书 ###
|
||||
|
||||
另一个获取新的SSL证书的替代方案是使用ISPConfig更新脚本。下载ISPConfig到/tmp目录下,解压包并运行脚本。
|
||||
另一个获取新的 SSL 证书的替代方案是使用 ISPConfig 更新脚本。下载 ISPConfig 到 /tmp 目录下,解压包并运行脚本。
|
||||
|
||||
cd /tmp
|
||||
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
|
||||
@ -39,11 +39,11 @@
|
||||
cd ispconfig3_install/install
|
||||
php -q update.php
|
||||
|
||||
更新脚本会在更新时询问下面的额问题:
|
||||
更新脚本会在更新时询问下面的问题:
|
||||
|
||||
Create new ISPConfig SSL certificate (yes,no) [no]:
|
||||
|
||||
这里回答“yes”,SSL证书创建对话框就会启动。
|
||||
这里回答“yes”,SSL 证书创建对话框就会启动。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -51,7 +51,7 @@ via: http://www.faqforge.com/linux/how-to-renew-the-ispconfig-3-ssl-certificate/
|
||||
|
||||
作者:[Till][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/) 荣誉推出
|
||||
|
@ -0,0 +1,80 @@
|
||||
衡量开源社区的五大指标
|
||||
================================================================================
|
||||
![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/yearbook2015-osdc-lead-1.png)
|
||||
|
||||
如果你想要使用指标来追踪你的自由开源软件(FOSS)的社区。现在就面临着一个问题:我应该去追踪哪些指标呢?
|
||||
|
||||
要回答这个问题,你必须知道你需要什么信息。比如,你可能想要知道一个项目社区的可持续性。一个社区对问题的应对速度有多快。一个社区怎么吸引、维护或者流失贡献者。一旦你知道需要哪类信息,你就可以找出哪些社区活动可以提供你想要知道的内容。幸运的是,自由开源软件(FOSS)遵从开放式开发模型,在其软件开发仓库里留下了大量的公共数据,我们可以对这些数据进行分析,并从中收集到一些有用的数据。
|
||||
|
||||
在这篇文章中,我会介绍一些指标,从而为你的项目社区提供一个多方位的视角分析。
|
||||
|
||||
### 1. 社区活动(Activity) ###
|
||||
|
||||
一个社区的总体活动和这个社区怎样随着时间演变,是度量所有社区好坏的非常有用的指标。社区活动是评价一个社区工作量的第一印象,也可以用来追踪不同种类的活动。比如,提交次数,给人的第一印象就是跟开发工作量挂钩。通过提出的问题(tickets opened)我们可以大概知道提交了多少 bug 或者又提出了多少新特性。邮件列表中的邮件数量或者论坛帖子的数量可以让我们了解到有过多少次公开讨论。
|
||||
|
||||
![Activity metrics chart](https://opensource.com/sites/default/files/images/business-uploads/activity-metrics.png)
|
||||
|
||||
[OpenStack 活动看板][1]上面显示的项目代码提交次数和代码评审之后代码合并次数随时间变化的趋势图(周数据)。
|
||||
|
||||
|
||||
### 2. 社区规模(Size) ###
|
||||
|
||||
社区的规模指的是参与到这个社区的人数,但是,基于不同形式的参与人数也有很大的差别。好消息是,通常你只对积极活跃的贡献者比较感兴趣。活跃的贡献者会在项目的仓库留下一些线索。这意味着你可以通过查看git仓库存放的代码中**author**字段来统计积极贡献代码的人数,或者通过看积极参与问题解决的人数来统计活跃人数。
|
||||
|
||||
所谓活动(某些人做了某些事)可以扩展到很多方面。一种常见的跟踪活动的方式是看有多少人做了工作量相当可观的任务。比如,通常一个项目代码的贡献者是来自这个项目社区的一小部分人。了解了这一小部分人,就对核心的工作组(比如,领导这个社区的人)有一个基本的认识了。
|
||||
|
||||
![Size metrics chart](https://opensource.com/sites/default/files/images/business-uploads/size-metrics.png)
|
||||
|
||||
[Xen 项目开发看板][2]上展示的该项目邮件列表上作者人数和提交人数随时间的变化趋势(每月数据)
|
||||
|
||||
### 3. 社区表现(Performance) ###
|
||||
|
||||
到目前为止,关注点主要集中在活动数量和贡献者数量的统计上了。你也可以分析流程还有用户的表现如何。比如,你可以测量某流程需要多久才能执行完成。解决或者关闭问题的时间可以表明一个需要及时响应的项目对新信息的应对如何,比如修复一个报告过来的 bug 或者实现一个新需求。代码评审花费的时间,即从代码修改提交到被通过的时间,可以看出更新一个提出的改变要达到社区期望的标准需要多久。
|
||||
|
||||
其他的一些指标主要与项目处理挂起的工作表现如何有关,比如新的和被关闭问题的比例,或者仍然没有完成的代码评审的队列。这些参数能告诉我们像投入到解决这些问题的资源是否充足这样的一些信息。
|
||||
|
||||
![Efficiency metrics chart](https://opensource.com/sites/default/files/images/business-uploads/efficiency-metrics.png)
|
||||
|
||||
在[2015第三季度 OpenStack 开发报告][3]上显示的,每季度关闭与打开状态的问题数之比,接受与放弃的改变提案与最新的改变提案之比。
|
||||
|
||||
### 4. 社区人口特征(Demographics) ###
|
||||
|
||||
随着贡献者的参与或者退出,社区也在不断改变。随着人们加入和退出社区,社区成员的会龄(从社区成员加入时算起)也各异。[社区会龄统计图表][4]很直观的展现了这些改变随时间的变化。图表是由一系列的水平条组成,每两条水平条代表加入到社区的一代人。对于每一代,吸引力(Attracted)水平条表示在相应的时间里有多少人加入到了社区。活跃度(Retained)水平条表示有多少人目前仍然活跃在社区。
|
||||
|
||||
代表一代人的两个水平条的关系就是滞留比例:依然在这个项目中的那一代人的一部分。吸引力(Attracted)水平条的完整集合表示这个项目在过去有多么受欢迎。活跃度(Retained)水平条的完整集合则表示社区目前的会龄结构。
|
||||
|
||||
![Demographics metrics chart](https://opensource.com/sites/default/files/images/business-uploads/demography-metrics.png)
|
||||
|
||||
[Eclipse 开发看板][5]上显示的 Eclipse 社区的社区年龄表。每六个月定义一次。
|
||||
|
||||
### 5. 社区多样性(Diversity) ###
|
||||
|
||||
多样性是一个社区保持弹性的很关键的因素。通常来说,一个社区越具有多样性(人或者组织参与的多元化),那么这个社区的弹性也就越大。比如,如果一个公司要决定离开一个自由开源社区,那么这个公司的员工贡献5%要远比贡献85%所可能引起的潜在问题要小很多。
|
||||
|
||||
[小马因素(Pony Factor)][6],是 [Daniel Gruno][7] 为“最少的开发者贡献了50%的代码提交量”这一现象定义的术语。基于小马因素,大象因素(Elephant Factor)则是指最少量的公司其员工贡献了50%的代码提交量。这两个数据提供了一种指示,即这个社区依赖多少人或者公司。
|
||||
|
||||
![Diversity metrics chart](https://opensource.com/sites/default/files/images/business-uploads/diversity-metrics.png)
|
||||
|
||||
[2015开发云数量状态统计][8]显示的在云计算领域的几个自由开源社区项目的小马和大象因素。
|
||||
|
||||
还有许多其他的指标来衡量一个社区。在决定收集哪些指标时,可以考虑一下社区的目标,还有哪些指标能帮到你。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/business/15/12/top-5-open-source-community-metrics-track
|
||||
|
||||
作者:[Jesus M. Gonzalez-Barahona][a]
|
||||
译者:[sonofelice](https://github.com/sonofelice)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://opensource.com/users/jgbarah
|
||||
[1]:http://activity.openstack.org/
|
||||
[2]:http://projects.bitergia.com/xen-project-dashboard/
|
||||
[3]:http://activity.openstack.org/dash/reports/2015-q3/pdf/2015-q3_OpenStack_report.pdf
|
||||
[4]:http://radar.oreilly.com/2014/10/measure-your-open-source-communitys-age-to-keep-it-healthy.html
|
||||
[5]:http://dashboard.eclipse.org/demographics.html
|
||||
[6]:https://ke4qqq.wordpress.com/2015/02/08/pony-factor-math/
|
||||
[7]:https://twitter.com/humbedooh
|
||||
[8]:https://speakerdeck.com/jgbarah/the-quantitative-state-of-the-open-cloud-2015-edition
|
@ -1,8 +1,9 @@
|
||||
修复:无法与SFTP服务器建立FTP连接
|
||||
错误:无法与 SFTP 服务器建立 FTP 连接
|
||||
================================================================================
|
||||
|
||||
### 问题 ###
|
||||
|
||||
有一天我要连接到我的web服务器。我使用[FileZilla][1]连接到FTP服务器。当我输入主机名和密码后来连接服务器后,我得到了下面的错误。
|
||||
有一天我要连接到我的 web 服务器。我使用 [FileZilla][1] 连接到 FTP 服务器。当我输入主机名和密码连接服务器后,我得到了下面的错误。
|
||||
|
||||
> Error: Cannot establish FTP connection to an SFTP server. Please select proper protocol.
|
||||
>
|
||||
@ -12,25 +13,25 @@
|
||||
|
||||
### 原因 ###
|
||||
|
||||
看见错误信息后我意识到了我的错误。我尝试与一台SFTP服务器建立一个[FTP][2]连接。很明显我没有使用一个正确的协议(应该是SFTP而不是FTP)。
|
||||
看见错误信息后我意识到了我的错误是什么。我尝试与一台 **SFTP** 服务器建立一个 **[FTP][2]** 连接。很明显我没有使用一个正确的协议(应该是SFTP而不是FTP)。
|
||||
|
||||
如你在上图所见,FileZilla默认使用的是FTP协议。
|
||||
如你在上图所见,FileZilla 默认使用的是FTP协议。
|
||||
|
||||
### 解决“Cannot establish FTP connection to an SFTP server”的方案 ###
|
||||
### 解决 “Cannot establish FTP connection to an SFTP server” 的方案 ###
|
||||
|
||||
解决方案很简单。使用SFTP协议而不是FTP。一个你或许要面对的问题是把协议修改成SFTP。这就是我要帮助你的。
|
||||
解决方案很简单。使用 SFTP 协议而不是 FTP。你要做的就是把协议修改成 SFTP。这就是我要告诉你的。
|
||||
|
||||
再FileZilla菜单中,进入 **文件->站点管理**.
|
||||
在 FileZilla 菜单中,进入 **文件->站点管理**。
|
||||
|
||||
![FileZilla Site Manager](http://itsfoss.com/wp-content/uploads/2015/12/FileZilla_FTP_SFTP_Problem_2.jpeg)
|
||||
|
||||
在站点管理中,进入通用选项并选择SFTP协议。同样填上主机、端口号、用户密码等。
|
||||
在站点管理中,进入通用选项并选择 SFTP 协议。同样填上主机、端口号、用户密码等。
|
||||
|
||||
![Cannot establish FTP connection to an SFTP server](http://itsfoss.com/wp-content/uploads/2015/12/FileZilla_FTP_SFTP_Problem_3.png)
|
||||
|
||||
我希望你从这里可以开始处理。
|
||||
我希望你从这里可以开始工作了。
|
||||
|
||||
我希望本篇教程可以帮助你修复“Cannot establish FTP connection to an SFTP server. Please select proper protocol.”这个问题。在相关的文章中,你可以读[了解在Linux中如何设置FTP][4]。
|
||||
我希望本篇教程可以帮助你修复 “Cannot establish FTP connection to an SFTP server. Please select proper protocol.”这个问题。在相关的文章中,你可以读[了解在 Linux 中如何设置 FTP][4]。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -38,7 +39,7 @@ via: http://itsfoss.com/fix-establish-ftp-connection-sftp-server/
|
||||
|
||||
作者:[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/) 荣誉推出
|
||||
|
@ -0,0 +1,111 @@
|
||||
如何在 Linux 中根据国家位置来阻断网络流量
|
||||
================================================================================
|
||||
|
||||
作为一名维护 Linux 生产服务器的系统管理员,你可能会遇到这样一些情形:你需要**根据地理位置,选择性地阻断或允许网络流量通过。** 例如你正经历一次由注册在某个特定国家的 IP 发起的 DoS 攻击;或者基于安全考虑,你想阻止来自未知国家的 SSH 登录请求;又或者你的公司对某些在线视频有分销权,它要求只能在特定的国家内合法发行;抑或是由于公司的政策,你需要阻止某个本地主机将文件上传至任意一个非美国的远程云端存储。
|
||||
|
||||
所有的上述情形都需要设置防火墙,使之具有**基于国家位置过滤流量**的功能。有几个方法可以做到这一点,其中之一是你可以使用 TCP wrappers 来为某个应用(例如 SSH,NFS, httpd)设置条件阻塞。但其缺点是你想要保护的那个应用必须以支持 TCP wrappers 的方式构建。另外,TCP wrappers 并不总是能够在各个平台中获取到(例如,Arch Linux [放弃了][2]对它的支持)。另一种方式是结合基于国家的 GeoIP 信息,设置 [ipset][3],并将它应用到 iptables 的规则中。后一种方式看起来更有希望一些,因为基于 iptables 的过滤器是与应用无关的,且容易设置。
|
||||
|
||||
在本教程中,我将展示 **另一个基于 iptables 的 GeoIP 过滤器,它由 xtables-addons 来实现**。对于那些不熟悉它的人来说, xtables-addons 是用于 netfilter/iptables 的一系列扩展。一个包含在 xtables-addons 中的名为 xt\_geoip 的模块扩展了 netfilter/iptables 的功能,使得它可以根据流量来自或流向的国家来进行过滤,IP 掩蔽(NAT)或丢包。若你想使用 xt\_geoip,你不必重新编译内核或 iptables,你只需要使用当前的内核构建环境(/lib/modules/\`uname -r`/build)以模块的形式构建 xtables-addons。同时也不需要进行重启。只要你构建并安装了 xtables-addons , xt\_geoip 便能够配合 iptables 使用。
|
||||
|
||||
至于 xt\_geoip 和 ipset 之间的比较,[xtables-addons 的官方网站][3] 上是这么说的: 相比于 ipset,xt\_geoip 在内存占用上更胜一筹,但对于匹配速度,基于哈希的 ipset 可能更有优势。
|
||||
|
||||
在教程的余下部分,我将展示**如何使用 iptables/xt\_geoip 来根据流量的来源地或流入的国家阻断网络流量**。
|
||||
|
||||
### 在 Linux 中安装 xtables-addons ###
|
||||
|
||||
下面介绍如何在各种 Linux 平台中编译和安装 xtables-addons。
|
||||
|
||||
为了编译 xtables-addons,首先你需要安装一些依赖软件包。
|
||||
|
||||
#### 在 Debian,Ubuntu 或 Linux Mint 中安装依赖 ####
|
||||
|
||||
$ sudo apt-get install iptables-dev xtables-addons-common libtext-csv-xs-perl pkg-config
|
||||
|
||||
#### 在 CentOS,RHEL 或 Fedora 中安装依赖 ####
|
||||
|
||||
CentOS/RHEL 6 需要事先设置好 EPEL 仓库(为 perl-Text-CSV\_XS 所需要)。
|
||||
|
||||
$ sudo yum install gcc-c++ make automake kernel-devel-`uname -r` wget unzip iptables-devel perl-Text-CSV_XS
|
||||
|
||||
#### 编译并安装 xtables-addons ####
|
||||
|
||||
从 `xtables-addons` 的[官方网站][4] 下载源码包,然后按照下面的指令编译安装它。
|
||||
|
||||
$ wget http://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/xtables-addons-2.10.tar.xz
|
||||
$ tar xf xtables-addons-2.10.tar.xz
|
||||
$ cd xtables-addons-2.10
|
||||
$ ./configure
|
||||
$ make
|
||||
$ sudo make install
|
||||
|
||||
需要注意的是,对于基于红帽的系统(CentOS、RHEL、Fedora),它们默认开启了 SELinux,所以有必要像下面这样调整 SELinux 的策略。否则,SELinux 将阻止 iptables 加载 xt\_geoip 模块。
|
||||
|
||||
$ sudo chcon -vR --user=system_u /lib/modules/$(uname -r)/extra/*.ko
|
||||
$ sudo chcon -vR --type=lib_t /lib64/xtables/*.so
|
||||
|
||||
### 为 xtables-addons 安装 GeoIP 数据库 ###
|
||||
|
||||
下一步是安装 GeoIP 数据库,它将被 xt\_geoip 用来查询 IP 地址与国家地区之间的对应关系。方便的是,`xtables-addons` 的源码包中带有两个帮助脚本,它们被用来从 MaxMind 下载 GeoIP 数据库并将它转化为 xt\_geoip 可识别的二进制形式文件;它们可以在源码包中的 geoip 目录下找到。请遵循下面的指导来在你的系统中构建和安装 GeoIP 数据库。
|
||||
|
||||
$ cd geoip
|
||||
$ ./xt_geoip_dl
|
||||
$ ./xt_geoip_build GeoIPCountryWhois.csv
|
||||
$ sudo mkdir -p /usr/share/xt_geoip
|
||||
$ sudo cp -r {BE,LE} /usr/share/xt_geoip
|
||||
|
||||
根据 [MaxMind][5] 的说明,他们的 GeoIP 数据库能够以 99.8% 的准确率识别出 ip 所对应的国家,并且每月这个数据库将进行更新。为了使得本地安装的 GeoIP 数据是最新的,或许你需要设置一个按月执行的 [cron job][6] 来时常更新你本地的 GeoIP 数据库。
|
||||
|
||||
### 阻断来自或流向某个国家的网络流量 ###
|
||||
|
||||
一旦 xt\_geoip 模块和 GeoIP 数据库安装好后,你就可以在 iptabels 命令中使用 geoip 的匹配选项。
|
||||
|
||||
$ sudo iptables -m geoip --src-cc country[,country...] --dst-cc country[,country...]
|
||||
|
||||
你想要阻断流量的那些国家是使用[2个字母的 ISO3166 代码][7] 来特别指定的(例如 US(美国)、CN(中国)、IN(印度)、FR(法国))。
|
||||
|
||||
例如,假如你想阻断来自也门(YE) 和 赞比亚(ZM)的流量,下面的 iptabels 命令便可以达到此目的。
|
||||
|
||||
$ sudo iptables -I INPUT -m geoip --src-cc YE,ZM -j DROP
|
||||
|
||||
假如你想阻断流向中国(CN) 的流量,可以运行下面的命令:
|
||||
|
||||
$ sudo iptables -A OUTPUT -m geoip --dst-cc CN -j DROP
|
||||
|
||||
匹配条件也可以通过在 `--src-cc` 或 `--dst-cc` 选项前加 `!` 来达到相反的目的:
|
||||
|
||||
假如你想在你的服务器上阻断来自所有非美国的流量,可以运行:
|
||||
|
||||
$ sudo iptables -I INPUT -m geoip ! --src-cc US -j DROP
|
||||
|
||||
![](https://c2.staticflickr.com/6/5654/23665427845_050241b03f_c.jpg)
|
||||
|
||||
#### 对于使用 Firewall-cmd 的用户 ####
|
||||
|
||||
某些发行版本例如 CentOS/RHEL7 或 Fedora 已经用 firewalld 替代了 iptables 来作为默认的防火墙服务。在这些系统中,你可以类似使用 xt\_geoip 那样,使用 firewall-cmd 来阻断流量。利用 firewall-cmd 命令,上面的三个例子可被重新写为:
|
||||
|
||||
$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip --src-cc YE,ZM -j DROP
|
||||
$ sudo firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m geoip --dst-cc CN -j DROP
|
||||
$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip ! --src-cc US -j DROP
|
||||
|
||||
### 总结 ###
|
||||
|
||||
在本教程中,我展示了使用 iptables/xt\_geoip 来根据流量的来源地或流入的国家轻松地阻断网络流量。假如你有这方面的需求,把它部署到你的防火墙系统中可以使之成为一个实用的办法。作为最后的警告,我应该提醒你的是:在你的服务器上通过基于 GeoIP 的流量过滤来禁止特定国家的流量并不总是万无一失的。GeoIP 数据库本身就不是很准确或齐全,且流量的来源或目的地可以轻易地通过使用 VPN、Tor 或其他任意易受攻击的中继主机来达到欺骗的目的。基于地理位置的过滤器甚至可能会阻止本不该阻止的合法网络流量。在你决定把它部署到你的生产环境之前请仔细考虑这个限制。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://xmodulo.com/block-network-traffic-by-country-linux.html
|
||||
|
||||
作者:[Dan Nanni][a]
|
||||
译者:[FSSlc](https://github.com/FSSlc)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://xmodulo.com/author/nanni
|
||||
[1]:https://www.archlinux.org/news/dropping-tcp_wrappers-support/
|
||||
[2]:http://xmodulo.com/block-unwanted-ip-addresses-linux.html
|
||||
[3]:http://xtables-addons.sourceforge.net/geoip.php
|
||||
[4]:http://xtables-addons.sourceforge.net/
|
||||
[5]:https://support.maxmind.com/geoip-faq/geoip2-and-geoip-legacy-databases/how-accurate-are-your-geoip2-and-geoip-legacy-databases/
|
||||
[6]:http://ask.xmodulo.com/add-cron-job-linux.html
|
||||
[7]:https://en.wikipedia.org/wiki/ISO_3166-1
|
92
published/201601/20151222 Turn Tor socks to http.md
Normal file
92
published/201601/20151222 Turn Tor socks to http.md
Normal file
@ -0,0 +1,92 @@
|
||||
将 Tor socks 转换成 http 代理
|
||||
================================================================================
|
||||
![](http://1426826955.rsc.cdn77.org/wp-content/uploads/2015/12/tor-593x445.jpg)
|
||||
|
||||
你可以通过不同的 Tor 工具来使用 Tor 服务,如 Tor 浏览器、Foxyproxy 和其它东西,像 wget 和 aria2 这样的下载管理器不能直接使用 Tor socks 开始匿名下载,因此我们需要一些工具来将 Tor socks 转换成 http 代理,这样就能用它来下载了。
|
||||
|
||||
**注意**:本教程基于 Debian ,其他发行版会有些不同,因此如果你的发行版是基于 Debian 的,就可以直接使用下面的配置了。
|
||||
|
||||
### Polipo
|
||||
|
||||
这个服务会使用 8123 端口和 127.0.0.1 的 IP 地址,使用下面的命令来在计算机上安装 Polipo:
|
||||
|
||||
sudo apt install polipo
|
||||
|
||||
现在使用如下命令打开 Polipo 的配置文件:
|
||||
|
||||
sudo nano /etc/polipo/config
|
||||
|
||||
在文件最后加入下面的行:
|
||||
|
||||
proxyAddress = "::0"
|
||||
allowedClients = 192.168.1.0/24
|
||||
socksParentProxy = "localhost:9050"
|
||||
socksProxyType = socks5
|
||||
|
||||
用如下的命令来重启 Polipo:
|
||||
|
||||
sudo service polipo restart
|
||||
|
||||
现在 Polipo 已经安装好了!在匿名的世界里做你想做的吧!下面是使用的例子:
|
||||
|
||||
pdmt -l "link" -i 127.0.01 -p 8123
|
||||
|
||||
通过上面的命令 PDMT(Persian 下载器终端)会匿名地下载你的文件。
|
||||
|
||||
### Proxychains
|
||||
|
||||
在此服务中你可以设置使用 Tor 或者 Lantern 代理,但是在使用上它和 Polipo 和 Privoxy 有点不同,它不需要使用任何端口!使用下面的命令来安装:
|
||||
|
||||
sudo apt install proxychains
|
||||
|
||||
用这条命令来打开配置文件:
|
||||
|
||||
sudo nano /etc/proxychains.conf
|
||||
|
||||
现在添加下面的代码到文件底部,这里是 Tor 的端口和 IP:
|
||||
|
||||
socks5 127.0.0.1 9050
|
||||
|
||||
如果你在命令的前面加上“proxychains”并运行,它就能通过 Tor 代理来运行:
|
||||
|
||||
proxychains firefoxt
|
||||
proxychains aria2c
|
||||
proxychains wget
|
||||
|
||||
### Privoxy
|
||||
|
||||
Privoxy 使用 8118 端口,可以很轻松地通过 privoxy 包来安装:
|
||||
|
||||
sudo apt install privoxy
|
||||
|
||||
我们现在要修改配置文件:
|
||||
|
||||
sudo nano /etc/pivoxy/config
|
||||
|
||||
在文件底部加入下面的行:
|
||||
|
||||
forward-socks5 / 127.0.0.1:9050 .
|
||||
forward-socks4a / 127.0.0.1:9050 .
|
||||
forward-socks5t / 127.0.0.1:9050 .
|
||||
forward 192.168.*.*/ .
|
||||
forward 10.*.*.*/ .
|
||||
forward 127.*.*.*/ .
|
||||
forward localhost/ .
|
||||
|
||||
重启服务:
|
||||
|
||||
sudo service privoxy restart
|
||||
|
||||
服务已经好了!端口是 8118,IP 是 127.0.0.1,就尽情使用吧!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.unixmen.com/turn-tor-socks-http/
|
||||
|
||||
作者:[Hossein heydari][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.unixmen.com/author/hossein/
|
@ -0,0 +1,105 @@
|
||||
如何在 CentOS / RHEL 上设置 SSH 免密码登录
|
||||
================================================================================
|
||||
![](http://www.ehowstuff.com/wp-content/uploads/2015/12/notebook-1071774_1280.jpg)
|
||||
|
||||
作为系统管理员,你计划在 Linux 上使用 OpenSSH,完成日常工作的自动化,比如文件传输、备份数据库转储文件到另一台服务器等。为实现该目标,你需要从主机 A 能自动登录到主机 B。自动登录也就是说,要在 shell 脚本中使用ssh,而无需要输入任何密码。
|
||||
|
||||
本文会告诉你怎样在 CentOS/RHEL 上设置 SSH 免密码登录。自动登录配置好以后,你可以通过它使用 SSH (Secure Shell)和安全复制 (SCP)来移动文件。
|
||||
|
||||
SSH 是开源的,是用于远程登录的最为可靠的网络协议。系统管理员用它来执行命令,以及通过 SCP 协议在网络上向另一台电脑传输文件。
|
||||
|
||||
通过配置 SSH 免密码登录,你可以享受到如下的便利:
|
||||
|
||||
- 用脚本实现日常工作的自动化。
|
||||
- 增强 Linux 服务器的安全性。这是防范虚拟专用服务器(VPS)遭受暴力破解攻击的一个推荐的方法,SSH 密钥单凭暴力破解是几乎不可攻破的。
|
||||
|
||||
### 什么是 ssh-keygen ###
|
||||
|
||||
ssh-keygen 是一个用来生成、创建和管理 SSH 认证用的公私钥的工具。通过 ssh-keygen 命令,用户可以创建支持SSH1 和 SSH2 两个协议的密钥。ssh-keygen 为 SSH1 协议创建 RSA 密钥,SSH2 则可以是 RSA 或 DSA。
|
||||
|
||||
### 什么是 ssh-copy-id ###
|
||||
|
||||
ssh-copy-id 是用来将本地公钥拷贝到远程的 authorized_keys 文件的脚本命令,它还会将身份标识文件追加到远程机器的 ~/.ssh/authorized_keys 文件中,并给远程主机的用户主目录适当的的权限。
|
||||
|
||||
### SSH 密钥 ###
|
||||
|
||||
SSH 密钥为登录 Linux 服务器提供了更好且安全的机制。运行 ssh-keygen 后,将会生成公私密钥对。你可以将公钥放置到任意服务器,从持有私钥的客户端连接到服务器的时,会用它来解锁。两者匹配时,系统无需密码就能解除锁定。
|
||||
|
||||
### 在 CentOS 和 RHEL 上设置免密码登录 SSH ###
|
||||
|
||||
以下步骤在 CentOS 5/6/7、RHEL 5/6/7 和 Oracle Linux 6/7 上测试通过。
|
||||
|
||||
节点1 : 192.168.0.9
|
||||
节点2 : 192.168.l.10
|
||||
|
||||
#### 步骤1 : ####
|
||||
|
||||
测试节点1到节点2的连接和访问:
|
||||
|
||||
[root@node1 ~]# ssh root@192.168.0.10
|
||||
The authenticity of host '192.168.0.10 (192.168.0.10)' can't be established.
|
||||
RSA key fingerprint is 6d:8f:63:9b:3b:63:e1:72:b3:06:a4:e4:f4:37:21:42.
|
||||
Are you sure you want to continue connecting (yes/no)? yes
|
||||
Warning: Permanently added '192.168.0.10' (RSA) to the list of known hosts.
|
||||
root@192.168.0.10's password:
|
||||
Last login: Thu Dec 10 22:04:55 2015 from 192.168.0.1
|
||||
[root@node2 ~]#
|
||||
|
||||
#### 步骤二: ####
|
||||
|
||||
使用 ssh-key-gen 命令生成公钥和私钥,这里要注意的是可以对私钥进行加密保护以增强安全性。
|
||||
|
||||
[root@node1 ~]# ssh-keygen
|
||||
Generating public/private rsa key pair.
|
||||
Enter file in which to save the key (/root/.ssh/id_rsa):
|
||||
Enter passphrase (empty for no passphrase):
|
||||
Enter same passphrase again:
|
||||
Your identification has been saved in /root/.ssh/id_rsa.
|
||||
Your public key has been saved in /root/.ssh/id_rsa.pub.
|
||||
The key fingerprint is:
|
||||
b4:51:7e:1e:52:61:cd:fb:b2:98:4b:ad:a1:8b:31:6d root@node1.ehowstuff.local
|
||||
The key's randomart image is:
|
||||
+--[ RSA 2048]----+
|
||||
| . ++ |
|
||||
| o o o |
|
||||
| o o o . |
|
||||
| . o + .. |
|
||||
| S . . |
|
||||
| . .. .|
|
||||
| o E oo.o |
|
||||
| = ooo. |
|
||||
| . o.o. |
|
||||
+-----------------+
|
||||
|
||||
#### 步骤三: ####
|
||||
|
||||
用 ssh-copy-id 命令将公钥复制或上传到远程主机,并将身份标识文件追加到节点2的 ~/.ssh/authorized_keys 中:
|
||||
|
||||
[root@node1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.0.10
|
||||
root@192.168.0.10's password:
|
||||
Now try logging into the machine, with "ssh '192.168.0.10'", and check in:
|
||||
|
||||
.ssh/authorized_keys
|
||||
|
||||
to make sure we haven't added extra keys that you weren't expecting.
|
||||
|
||||
#### 步骤四: ####
|
||||
|
||||
验证免密码 SSH 登录节点2:
|
||||
|
||||
[root@node1 ~]# ssh root@192.168.0.10
|
||||
Last login: Sun Dec 13 14:03:20 2015 from www.ehowstuff.local
|
||||
|
||||
我希望这篇文章能帮助到你,为你提供 SSH 免密码登录 CentOS / RHEL 的基本认知和快速指南。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.ehowstuff.com/ssh-login-without-password-centos/
|
||||
|
||||
作者:[skytech][a]
|
||||
译者:[fw8899](https://github.com/fw8899)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.ehowstuff.com/author/skytech/
|
@ -0,0 +1,109 @@
|
||||
如何在 Ubuntu 上使用 Glances 监控系统
|
||||
================================================================================
|
||||
|
||||
![](https://www.maketecheasier.com/assets/uploads/2015/12/glances_featured.jpg)
|
||||
|
||||
Glances 是一个用于监控系统的跨平台、基于文本模式的命令行工具。它是用 Python 编写的,使用 `psutil` 库从系统获取信息。你可以用它来监控 CPU、平均负载、内存、网络接口、磁盘 I/O,文件系统空间利用率、挂载的设备、所有活动进程以及消耗资源最多的进程。Glances 有很多有趣的选项。它的主要特性之一是可以在配置文件中设置阀值(careful[小心]、warning[警告]、critical[致命]),然后它会用不同颜色显示信息以表明系统的瓶颈。
|
||||
|
||||
### Glances 的功能
|
||||
|
||||
- CPU 平均负载
|
||||
- 不同状态(如活动、休眠)进程的数量
|
||||
- 所有内存信息,如物理内存、交换空间、空闲内存
|
||||
- CPU 信息
|
||||
- 网络连接的上行/下行速度
|
||||
- 磁盘 I/O 读/写速度详细信息
|
||||
- 当前挂载设备的磁盘使用情况
|
||||
- 消耗资源最多的进程和他们的 CPU/内存使用情况
|
||||
|
||||
### 安装 Glances
|
||||
|
||||
Glances 在 Ubuntu 的软件仓库中,所以安装很简单。执行下面的命令安装 Glances:
|
||||
|
||||
sudo apt-get install glances
|
||||
|
||||
(LCTT 译注:若安装后无法正常使用,可考虑使用 pip 安装/升级 glances:`sudo pip install --upgrade glances`)
|
||||
|
||||
### Glances 使用方法
|
||||
|
||||
安装完成后,可以执行下面的命令启动 Glances:
|
||||
|
||||
glances
|
||||
|
||||
你将看到类似下图的输出:
|
||||
|
||||
![glances monitor system output](https://www.maketecheasier.com/assets/uploads/2015/12/glances_output1.png)
|
||||
|
||||
要退出 Glances 终端,按 ESC 键或 `Ctrl + C`。
|
||||
|
||||
默认情况下,时间间隔(LCTT 译注:显示数据刷新的时间间隔)是 1s,不过你可以在从终端启动 Glances 时自定义时间间隔。
|
||||
|
||||
要把时间间隔设为 5s,执行下面的命令:
|
||||
|
||||
glances -t 5
|
||||
|
||||
### Glances 中不同颜色含义
|
||||
|
||||
Glances 中不同颜色的含义:
|
||||
|
||||
- `绿色`:正常(OK)
|
||||
- `蓝色`:小心(careful)
|
||||
- `紫色`:警告(warning)
|
||||
- `红色`:致命(critical)
|
||||
|
||||
默认设置下,Glances 的阀值设置是:careful=50,warning=70,critical=90。你可以通过 “/etc/glances/” 目录下的默认配置文件 glances.conf 来自定义这些阀值。
|
||||
|
||||
### Glances 的选项
|
||||
|
||||
Glances 提供了很多快捷键,可以在它运行时用来查找输出信息。
|
||||
|
||||
下面是一些常用的热键列表:
|
||||
|
||||
- `m` : 按内存占用排序进程
|
||||
- `p` : 按进程名称排序进程
|
||||
- `c` : 按 CPU 占用率排序进程
|
||||
- `i` : 按 I/O 频率排序进程
|
||||
- `a` : 自动排序进程
|
||||
- `d` : 显示/隐藏磁盘 I/O 统计信息
|
||||
- `f` : 显示/隐藏文件系统统计信息
|
||||
- `s` : 显示/隐藏传感器统计信息
|
||||
- `y` : 显示/隐藏硬盘温度统计信息
|
||||
- `l` : 显示/隐藏日志
|
||||
- `n` : 显示/隐藏网络统计信息
|
||||
- `x` : 删除警告和严重日志
|
||||
- `h` : 显示/隐藏帮助界面
|
||||
- `q` : 退出
|
||||
- `w` : 删除警告记录
|
||||
|
||||
### 使用 Glances 监控远程系统
|
||||
|
||||
你也可以使用 Glances 监控远程系统。要在远程系统上使用它,使用下面的命令:
|
||||
|
||||
glances -s
|
||||
|
||||
你会看到类似下面的输出:
|
||||
|
||||
![glances monitor remote system server](https://www.maketecheasier.com/assets/uploads/2015/12/glances_server.png)
|
||||
|
||||
如你所见,Glances 运行在 61209 端口。
|
||||
|
||||
现在,到远程机器上执行下面的命令以连接到指定 IP 地址的 Glances 服务器上。假设 192.168.1.10 是你的 Glances 服务器 IP 地址。
|
||||
|
||||
glances -c -P 192.168.1.10
|
||||
|
||||
### 结论
|
||||
|
||||
对于每个 Linux 系统管理员来说,Glances 都是一个非常有用的工具。使用它,你可以轻松、高效地监控 Linux 系统。如果你有什么问题,自由地评论吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.maketecheasier.com/glances-monitor-system-ubuntu/
|
||||
|
||||
作者:[Hitesh Jethva][a]
|
||||
译者:[bianjp](https://github.com/bianjp)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.maketecheasier.com/author/hiteshjethva/
|
||||
|
@ -0,0 +1,87 @@
|
||||
使用 Nmon 监控 Linux 的系统性能
|
||||
================================================================================
|
||||
Nmon(得名于 Nigel 的监控器)是IBM的员工 Nigel Griffiths 为 AIX 和 Linux 系统开发的一款计算机性能系统监控工具。Nmon 可以把操作系统的统计数据展示在屏幕上或者存储到一份数据文件里,来帮助了解计算机资源的使用情况、调整方向和系统瓶颈。这个系统基准测试工具只需要使用一条命令就能得到大量重要的性能数据。使用 Nmon 可以很轻松的监控系统的 CPU、内存、网络、硬盘、文件系统、NFS、高耗进程、资源和 IBM Power 系统的微分区的信息。
|
||||
|
||||
### Nmon 安装 ###
|
||||
|
||||
Nmon 默认是存在于 Ubuntu 的仓库中的。你可以通过下面的命令安装 Nmon:
|
||||
|
||||
sudo apt-get install nmon
|
||||
|
||||
### 怎么使用Nmon来监控Linux的性能 ###
|
||||
|
||||
安装完成后,通过在终端输入`nmon` 命令来启动 Nmon
|
||||
|
||||
nmon
|
||||
|
||||
你会看到下面的输出:
|
||||
|
||||
![nmon-output](https://www.maketecheasier.com/assets/uploads/2015/12/nmon-output.png)
|
||||
|
||||
从上面的截图可以看到 nmon 命令行工具完全是交互式运行的,你可以使用快捷键来轻松查看对应的统计数据。你可以使用下面的 nmon 快捷键来显示不同的系统统计数据:
|
||||
|
||||
- `q` : 停止并退出 Nmon
|
||||
- `h` : 查看帮助
|
||||
- `c` : 查看 CPU 统计数据
|
||||
- `m` : 查看内存统计数据
|
||||
- `d` : 查看硬盘统计数据
|
||||
- `k` : 查看内核统计数据
|
||||
- `n` : 查看网络统计数据
|
||||
- `N` : 查看 NFS 统计数据
|
||||
- `j` : 查看文件系统统计数据
|
||||
- `t` : 查看高耗进程
|
||||
- `V` : 查看虚拟内存统计数据
|
||||
- `v` : 详细模式
|
||||
|
||||
### 核查 CPU 处理器 ###
|
||||
|
||||
如果你想收集关于 CPU 性能相关的统计数据,你应该按下键盘上的`c`键,之后你将会看到下面的输出:
|
||||
|
||||
![nmon_cpu_output](https://www.maketecheasier.com/assets/uploads/2015/12/nmon_cpu_output.png)
|
||||
|
||||
### 核查高耗进程统计数据 ###
|
||||
|
||||
如果想收集系统正在运行的高耗进程的统计数据,按键盘上的`t`键,之后你将会看到下面的输出:
|
||||
|
||||
![nmon_process_output](https://www.maketecheasier.com/assets/uploads/2015/12/nmon_process_output.jpg)
|
||||
|
||||
### 核查网络统计数据 ###
|
||||
|
||||
如果想收集 Linux 系统的网络统计数据,按下`n`键,你将会看到下面输出:
|
||||
|
||||
![n_network_output](https://www.maketecheasier.com/assets/uploads/2015/12/nmon_network_output.png)
|
||||
|
||||
### 硬盘 I/O 图表 ###
|
||||
|
||||
使用`d` 键获取硬盘相关的信息,你会看到下面输出:
|
||||
|
||||
![nmon_disk_output](https://www.maketecheasier.com/assets/uploads/2015/12/nmon_disk_output.png)
|
||||
|
||||
### 核查内核信息 ###
|
||||
|
||||
Nmon 一个非常重要的快捷键是`k`键,用来显示系统内核相关的概要信息。按下`k`键之后,会看到下面输出:
|
||||
|
||||
![nmon_kernel_output](https://www.maketecheasier.com/assets/uploads/2015/12/nmon_kernel_output.png)
|
||||
|
||||
### 获取系统信息 ###
|
||||
|
||||
对每个系统管理员来说一个非常有用的快捷键是`r`键,可以用来显示计算机的系统结构、操作系统版本号和 CPU 等不同资源的信息。按下`r`键之后会看到下面输出:
|
||||
|
||||
![nmon_system_output](https://www.maketecheasier.com/assets/uploads/2015/12/nmon_system_output.png)
|
||||
|
||||
### 总结 ###
|
||||
|
||||
还有许多其他的工具做的和 Nmon 同样的工作,不过 Nmon 对一个 Linux 新手来说还是很友好的。如果你有什么问题,尽管评论。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.maketecheasier.com/monitor-linux-system-performance/
|
||||
|
||||
作者:[Hitesh Jethva][a]
|
||||
译者:[sonofelice](https://github.com/sonofelice)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.maketecheasier.com/author/hiteshjethva/
|
||||
|
@ -0,0 +1,127 @@
|
||||
2015年 Linux 世界的十个大事件
|
||||
======================
|
||||
|
||||
![2015年的大事件](http://itsfoss.com/wp-content/uploads/2015/12/Biggest-Linux-Stories-2015.jpg)
|
||||
|
||||
2015年已经过去,我在这里(It's FOSS)发表《2015年的大事件》系列。这个系列的第一篇文章为《2015年 Linux 世界的十个大事件》。这些事件在 Linux 世界中产生了极大的影响,无论它们是积极的还是消极的。
|
||||
|
||||
我总结了2015发生的十件产生了最大影响的事件。让我们来看看:
|
||||
|
||||
### 2015年度十大 Linux /开源相关事件
|
||||
|
||||
补充一句,以下这些事件没有按照时间顺序排列。
|
||||
|
||||
#### 微软与 Linux 的结盟
|
||||
|
||||
在9月下旬,所有人听到[微软构建了自己的 Linux 发行版][1]这个消息时都大吃一惊。其在后来被揭露,这其实是一个微软开发的用于它的 Azure cloud switches 的[软件][2]。
|
||||
|
||||
但故事还没结束。微软真的与 Canonical(Ubuntu Linux 的母公司)达成合作来开发 [HDInsight][3],这是微软在 Azure 上构建的 Hadoop 大数据服务。 Ubuntu 是[微软在其上部署应用][4]的第一个 Linux 系统。
|
||||
|
||||
微软会继续保持它与 Linux 的关系吗? 还是在使用 Linux 达到其目的(Azure)就会收手?只有时间能告诉我们一切。
|
||||
|
||||
#### 微软发布适用于 Linux 的 Visual Studio Code
|
||||
|
||||
在微软发布 Linux 发行版引起喧嚣之前,微软扔下了另一枚炸弹——发布 [Linux 版 Visual Studio Code][27], 与其一并发布的还有 Windows 版以及 OS X 版。尽管 Visual Studio Code 并不是开源的,从某种意义上讲,发布 Linux 版本仍然是 Linux 用户的胜利。(LCTT 译注:此处原文消息有误,[Visual Studio Code 已开源][28]。)无论如何,Linus Torvalds 曾说过一句很著名的话:“如果微软给 Linux 开发过一款应用的话,这就意味着我已经赢了”。
|
||||
|
||||
你可以看这个教程来学习[如何在 Ubuntu 中安装 Visual Studio Code][5]。
|
||||
|
||||
#### 苹果公司开源编程语言 Swift
|
||||
|
||||
在向 Linux 及开源“示爱”方面,苹果公司也不甘示弱。苹果用来制作 iOS 应用的首选编程语言 Swift,[现已开源][6]并移植到 Linux 中。虽然其还在测试中,但你已经可以轻易地[在 Ubuntu 中安装 Swift][7]。
|
||||
|
||||
但是,苹果就是苹果,它[开始吹嘘][8]其为“第一个视开源开发为公司关键的软件开发策略的计算机公司巨头(原文如此)”。
|
||||
|
||||
#### Ubuntu 手机终于发布
|
||||
|
||||
Ubuntu 手机终于在今年年初发布。因其早期使用者及开发者,Ubuntu 深受 Ubuntu 社区喜爱。主流智能机用户仍然回避它,主要是[因为该系统还在重度开发中][9]。对于 Ubuntu 手机的问世,2016年将成为决定性的一年。
|
||||
|
||||
#### Jolla 遭受经济危机
|
||||
|
||||
Jolla 是 Sailfish OS 这个基于 Linux 的智能手机系统的幕后公司,它遭受了严重的财政困难。这导致了[一半的Jolla 员工被裁][10]。
|
||||
|
||||
Jolla 在2014年针对它的平板电脑完成了一次非常[成功的众筹][11],显然,他们将大部分预算都花在了 Sailfish OS 的开发上,而在主要投资者退出后,公司正在挣扎以求生存。
|
||||
|
||||
不过有一个好消息,Jolla 成功拿到了一些雄厚的资金,而且他们[已经继续运营了][12]。
|
||||
|
||||
#### Firefox OS 已死
|
||||
|
||||
作为安卓的开源替代品,Mozila 的移动操作系统 Firefox OS 在去年底慢性死亡。本打算在发展中国家售卖低至25美金的智能手机,可基于 Firefox OS 的手机却一直没有流行起来。我认为主要原因是它的硬件配置不高,以及它缺少流行应用。
|
||||
|
||||
在十二月,[Mozilla 宣布][13]其将停止开发 Firefox OS,并停止出售 Firefox 智能手机。
|
||||
|
||||
虽然没有正式宣布过,我认为 [Tizen][14],这个 Linux 基金会旗下的基于 Linux 的移动操作系统,也已经消失了。我没有看到任何关于 Tizen 开发的消息,而且 Linux 基金会从未推动过它的开发。Tizen 何时死亡只是一个时间问题。(LCTT 译注:此处原文消息有误,[Tizen 在2015年发布了 3.0 版本][29]。)
|
||||
|
||||
#### “Ubuntu 家族”内讧
|
||||
|
||||
五月份时,Kubuntu 项目的领导者 Jonathan Riddell [被 Ubuntu 社区委员会强制要求下台][15],这引起了很多激烈的讨论。Jonathan 曾质问 Ubuntu 所收捐款的使用情况,他抱怨 Kubuntu 从未见到过这些钱。
|
||||
|
||||
这导致了两方的互相谴责。最终。Ubuntu 的大老板,[Mark Shuttleworth 要求 Jonathan 下台][16]。
|
||||
|
||||
#### 女性 Linux 内核开发者因“野蛮的沟通方式”而退出
|
||||
|
||||
Linux 之父 Linus Torvalds 以其粗俗的语言而著称。Linux 内核开发者 [Sarah Sharp][17] 也因为嘴快心直而闻名。
|
||||
|
||||
Sarah Sharp 曾在2013年与 Linus Torvalds 公开争执,[建议 Linus 将“语言暴力”赶出邮件列表][18]。但 Linus 也没有[委婉地][19]回复她。
|
||||
|
||||
那是在2013年。2015年,Sarah 宣布她正在[逐步停止她在内核社区的工作][20],因为他们的交流方式缺乏基本礼仪,并且野蛮而充满亵渎。
|
||||
|
||||
这一举动让人们开始讨论 Linux 内核社区是否真的应该改变他们的行为方式,还是 Sarah 做的太过分了。
|
||||
|
||||
#### Unity 游戏编辑器移植到 Linux平台
|
||||
|
||||
尽管[在 Linux 上玩游戏][21]仍是 Linux 用户们的阿克琉斯之踵,而在游戏引擎 Unity 宣布其正在测试[Linux 下的游戏编辑器][22]时整个社区都沸腾了。因为在渲染图像时,Linux 是一个最流行的选择,所以我们推测这将使游戏开发者向 Linux 靠拢。不过,Unity 是否真的会推出一个最终版本的游戏编辑器,这个问题还未被证实。
|
||||
|
||||
#### 政府机构采用开源软件
|
||||
|
||||
欧洲数个城市的管理机构决定[抛弃先前的软件][23],并使用其开源的替代品。大多数城市管理机构将 Microsoft Office 替换为 LibreOffice 或 OpenOffice. 一些城市管理机构和[公立学校][24]也在跟进,将 Microsoft Windows 换成 Linux。
|
||||
|
||||
对于这一行为,削减成本是一个重要的因素,因为城市管理机构通过采用开源软件省下了无数欧元。
|
||||
|
||||
大学也并没有在采用开源软件的道路上落后。这一年,我们听到了[大学如何抛弃 Photoshop 改用 Krita][25] 以及[大学使用开源 Office 软件][26]的消息。
|
||||
|
||||
### 总结
|
||||
|
||||
与其他年一样,2015年同样有许多令 Linux 爱好者感到积极或消极的时刻。我们看到 Linux 的竞争者,如微软和苹果,向 Linux 靠拢,政府机构采用开源软件。同时,我们还见证了 Firefox 智能手机系统的失败。我想说,这真是喜忧参半的一年。
|
||||
|
||||
你认为呢?我希望你们分享你所认为对于 Linuxer 们来说最重要的新闻,和你们对这一年的整体感受。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://itsfoss.com/biggest-linux-stories-2015/
|
||||
|
||||
作者:[Abhishek][a]
|
||||
译者:[StdioA](https://github.com/StdioA)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: http://itsfoss.com/author/abhishek/
|
||||
[1]: https://linux.cn/article-6269-1.html
|
||||
[2]: http://arstechnica.com/information-technology/2015/09/microsoft-has-built-software-but-not-a-linux-distribution-for-its-software-switches/
|
||||
[3]: https://azure.microsoft.com/en-us/services/hdinsight/
|
||||
[4]: http://www.zdnet.com/article/microsoft-deploys-first-major-server-application-on-ubuntu-linux/
|
||||
[5]: https://linux.cn/article-5423-1.html
|
||||
[6]: https://linux.cn/article-6689-1.html
|
||||
[7]: https://linux.cn/article-6781-1.html
|
||||
[8]: https://business.facebook.com/itsfoss/photos/pb.115098615297581.-2207520000.1450817108./634288916711879/?type=3&theater
|
||||
[9]: http://www.engadget.com/2015/07/24/ubuntu-phone-review/
|
||||
[10]: https://linux.cn/article-6621-1.html
|
||||
[11]: https://www.indiegogo.com/projects/jolla-tablet-world-s-first-crowdsourced-tablet#/
|
||||
[12]: https://linux.cn/article-6757-1.html
|
||||
[13]: https://linux.cn/article-6800-1.html
|
||||
[14]: https://www.tizen.org/
|
||||
[15]: https://linux.cn/article-5529-1.html
|
||||
[16]: http://www.cio.com/article/2926838/linux/mark-shuttleworth-ubuntu-community-council-ask-kubuntu-developer-to-step-down-as-leader.html
|
||||
[17]: http://sarah.thesharps.us/
|
||||
[18]: http://www.techeye.net/chips/linus-torvalds-and-intel-woman-in-sweary-spat
|
||||
[19]: http://marc.info/?l=linux-kernel&m=137392506516022&w=2
|
||||
[20]: https://linux.cn/article-6361-1.html
|
||||
[21]: https://linux.cn/article-6258-1.html
|
||||
[22]: http://itsfoss.com/unity-gaming-engine-linux/
|
||||
[23]: https://linux.cn/article-6459-1.html
|
||||
[24]: http://itsfoss.com/spanish-school-ditches-windows-ubuntu/
|
||||
[25]: http://itsfoss.com/french-university-dumps-adobe-photoshop-open-source-app-krita/
|
||||
[26]: http://itsfoss.com/hungarian-universities-switch-eurooffice/
|
||||
[27]: https://linux.cn/article-5376-1.html
|
||||
[28]: https://linux.cn/article-6604-1.html
|
||||
[29]: https://linux.cn/article-6261-1.html
|
@ -0,0 +1,97 @@
|
||||
哪个文件系统最适合你的 Linux 系统?
|
||||
================================================================================
|
||||
|
||||
![](https://www.maketecheasier.com/assets/uploads/2015/05/file-systems-feature-image.jpg)
|
||||
|
||||
文件系统: 它们不是世界上最激动人心的技术,但是仍然很重要。本文我们将细数那些流行的 Linux 文件系统 - 它们是什么,它们能够做什么,以及它们的目标用户。
|
||||
|
||||
### Ext4 ###
|
||||
|
||||
![file-systems-ext4](https://www.maketecheasier.com/assets/uploads/2015/05/file-systems-ext4.png)
|
||||
|
||||
如果你曾经安装过 Linux,你可能在安装过程中看到过“Ext4”字样。用它有一个不错的理由: 它是当前每个可用的 Linux 发行版所选择的文件系统。当然,还有其他的一些选择,但是不可否认的是,Ext4(Extended 4)几乎是所有 Linux 用户都会选择的文件系统。
|
||||
|
||||
#### 它能做什么? ####
|
||||
|
||||
Ext4 拥有之前的文件系统(Ext2/Ext3)中你所期待的所有优点, 同时还带来了一些改进。还有很多内容可以发掘,这里列举出了 Ext4 为你带来的最好的部分:
|
||||
|
||||
- 日志型文件系统
|
||||
- 日志校验
|
||||
- 多重块文件分配
|
||||
- 向后兼容 Ext2 && Ext3
|
||||
- 持续的空闲空间预分配
|
||||
- 改进的文件系统校验(相比于之前的版本)
|
||||
- 当然,同时支持更大的文件
|
||||
|
||||
#### 目标用户 ####
|
||||
|
||||
Ext4 针对那些寻找超级可靠的基础环境或者那些只需要能工作就行的用户。这个文件系统不会对你的系统做快照;它甚至没有最好的 SSD 支持,但是如果你不是太挑剔的话,你会觉得它也还不错。
|
||||
|
||||
### BtrFS ###
|
||||
|
||||
![file-systems-btrFS](https://www.maketecheasier.com/assets/uploads/2015/05/file-systems-btrFS-e1450065697580.png)
|
||||
|
||||
B 树(B-tree)文件系统 (也被当做是 butterFS,黄油文件系统) 是 Oracle 为 Linux 研发的一款文件系统。它是一个全新的文件系统,而且正处于主要开发阶段。Linux 社区认为其有时候使用上还有些不稳定。BtrFS 的核心原则是围绕着写时复制(copy-on-write)原则展开的。**写时复制**基本上意味着在写入数据完成前,这份数据的每一比特都有单独的一份副本。当数据写入完毕后,相当于它做了一份副本。
|
||||
|
||||
#### 它能做什么 ####
|
||||
|
||||
除了支持写时复制之外,BtrFS 也能够胜任许多其他的事务 - 事实上,它可以一直列出各种特性。这里列举最值得一提的特性:支持只读快照、文件克隆、子卷、透明压缩、离线文件系统校验、从 ext3 & 4 原地转换到 BtrFS、在线碎片整理,还支持 RAID 0, RAID 1, RAID 5, RAID 6 和 RAID 10。
|
||||
|
||||
#### 目标用户 ####
|
||||
|
||||
BtrFS 的开发者们许诺过,该文件系统是当前其他文件系统的新一代替代者。非常正确,虽然目前其处于开发中。它有很多面向高级用户的杀手级特性,对于基本用户也是这样(包括 SSD 上面的更佳性能)。这个文件系统针对那些想要从文件系统中获取更多(特性),以及那些想尝试用写时复制机制做一些事情的用户。
|
||||
|
||||
### XFS ###
|
||||
|
||||
![file-systems-xfs](https://www.maketecheasier.com/assets/uploads/2015/05/file-systems-xfs.jpg)
|
||||
|
||||
由 Silicon Graphics 公司创造开发,XFS 是一个高端文件系统,定位于速度和性能方面。处于对性能方面的专注,使得在并行 IO 方面,XFS 表现的尤其出色。XFS 文件系统能够处理数量庞大的数据,事实上某些 XFS 用户的数据接近300TB 以上。
|
||||
|
||||
#### 它能做什么 ####
|
||||
|
||||
XFS 是一个经历良好测试的数据存储文件系统,它是为了高性能操作而诞生的。其特性包括:
|
||||
|
||||
- RAID 阵列的条带化分配
|
||||
- 日志型文件系统
|
||||
- 块大小可变
|
||||
- 直接 I/O
|
||||
- 指定速率(guaranteed-rate) I/O
|
||||
- 快照
|
||||
- 在线碎片整理
|
||||
- 在线调整文件系统大小
|
||||
|
||||
#### 目标用户 ####
|
||||
|
||||
XFS 针对那些想要一个坚如磐石的文件系统方案的用户。它始于1993年,并且随着时间的变迁它变得越来越好。如果你有一台家庭服务器,而且你苦恼于如何部署存储环境,那么可以考虑下 XFS。它拥有的众多特性(比如快照)能够有助于你的文件存储系统。尽管如此,它不局限于服务器端。如果你是一个相对高级一点的用户或者你对 BtrFS 所承诺的很多特性感兴趣的话,尝试一下 XFS。它实现了很多与 BtrFS 相似的特性,并且没有稳定性方面的问题。
|
||||
|
||||
### Reiser4 ###
|
||||
|
||||
![file-system-riser4](https://www.maketecheasier.com/assets/uploads/2015/05/file-system-riser4.gif)
|
||||
|
||||
Reiser4 是 ReiserFS 的继任者,由 Namesys 公司创造研发。它的诞生可以追溯到 Linspire 项目和 DARPA。它与众不同的地方在于众多的事务模式。并不止于单一的一种写入数据的方式;取而代之的是,有很多方式(来写入)。
|
||||
|
||||
#### 它能做什么 ####
|
||||
|
||||
Reiser4 拥有着使用多种不同事务模式的独特能力。它能够使用写时复制模式 (像 BtrFS),任意位置写入(write-anywhere),日志,以及混合事务模式。它在 ReiserFS 的基础上做了许多的改进,包括更好的基于漫游日志的文件系统日志,对较小文件的支持更好,以及更快速的目录处理。Reiser4 提供了许多功能特性。还有更多的特性可以探讨,不过简单来讲,相比于 ReiserFS 它不但做了非常大的改进,而且增加了众多特性。
|
||||
|
||||
#### 目标用户 ####
|
||||
|
||||
Resier4 适合那些想要将一个文件系统应用到多种场景下的用户。可能你想在一台机器上使用写时复制机制,在另一台机器上使用任意位置写入机制,还会在另一台机器上使用混合事务,而你又不希望使用多种不同类型的文件系统来完成这项任务。Reiser4 是适合这种情况的完美方案。
|
||||
|
||||
### 结论 ###
|
||||
|
||||
Linux 上有许多可用的文件系统。每个文件系统都有其特定的用途,以便于特定用户解决不同的问题。本文的焦点集中在 Linux 平台上文件系统的主流选择。毫无疑问,其它的场景下还有一些别的选择。
|
||||
|
||||
你在 Linux 上最喜欢的文件系统是什么?在下面的评论区告诉我们吧!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.maketecheasier.com/best-file-system-linux/
|
||||
|
||||
作者:[Derrik Diener][a]
|
||||
译者:[icecoobe](https://github.com/icecoobe)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.maketecheasier.com/author/derrikdiener/
|
@ -0,0 +1,79 @@
|
||||
提升 emacs 生产力的十大最佳插件
|
||||
================================================================================
|
||||
|
||||
一年前的这个时候,我想要寻找[将 Vim 打造成一个成熟的全功能的 IDE][1] 的最好插件。有趣的是,那篇文章的很多评论提到了 Emacs 已经大部分有了这些内置插件,已经是一个很棒的 IDE 了。尽管我对 Emacs 的难以置信的多样化表示赞同,它依旧不是一个可以开箱即用的高级编辑器。还好,其庞大的插件库可以解决这个问题。但在过多的选择中,有时很难弄清该如何入手。因此,现在让我试着收集一个不可或缺的插件的简短列表,来提升你使用 Emacs 时的工作效率。 虽然我主要侧重于与编程相关的生产力提升,但是这些插件对所有人或不同用途都是有用的。
|
||||
|
||||
### 1. Ido-mode ###
|
||||
|
||||
![](https://c2.staticflickr.com/6/5718/23311895573_c1fb34337c_c.jpg)
|
||||
|
||||
Ido 或许是对新手最有用的一个插件,Ido 的意思是交互式工作(interactively do)。它取代了大部分的用花哨字符匹配菜单的枯燥提示。好比说,它用列出了当前目录所有文件的列表来取代了常规的打开文件提示符。输入一些字符,Ido 将尝试匹配最合适的文件。它通过可视化让你的操作变得更容易,这也是一个快速遍历所有文件都有相同前缀的文件夹的方法。
|
||||
|
||||
### 2. Smex ###
|
||||
|
||||
![](https://c2.staticflickr.com/2/1517/23310442314_2a22a60c34_c.jpg)
|
||||
|
||||
它不算最著名的一个、但却是一个替代 Ido-mode 的好选择:Smex 可以优雅的替代普通的`M-x`提示符,灵感大部分来自于 Ido-mode。它也给调用`M-x`后输入的命令带来了同样的交互搜索能力。它简单而有效,是一个为常用操作提升效率的最好方法。
|
||||
|
||||
### 3. Auto Complete ###
|
||||
|
||||
![](https://c2.staticflickr.com/6/5794/23643004900_3042f77952_c.jpg)
|
||||
|
||||
知道这个插件的存在之前,我在 Emacs 里面有一半的时间花在敲击 `M-/` 来补完单词上。现在,我有一个漂亮的弹出菜单可以为我做自动补全。无须多说,我们都需要它。
|
||||
|
||||
### 4. YASnippet ###
|
||||
|
||||
![](https://c2.staticflickr.com/2/1688/23830403072_0d8df6ef4c_b.jpg)
|
||||
|
||||
这是真正的程序员必备利器。总有一些代码片段会让我们觉得我们一辈子都在写它。对我来说,就是调试 PHP 时不断输入的 `var_dump(...);exit;`。经过一段时间一遍又一遍的输入`var_dump(...);exit;`,我觉得我可以预先把其做成录制好的、方便用到的代码片段。使用 YASnippets,可以很容易导入代码片段文件或者自己做个。之后,只要按下一个 tab 键,就可以将一个小的关键词扩展成一大段预先写好的代码,然后可以很方便地在里面修改。
|
||||
|
||||
### 5. Org-mode ###
|
||||
|
||||
![](https://c2.staticflickr.com/6/5687/23570808789_d683c949e4.jpg)
|
||||
|
||||
免责声明,我最近才开始使用 Org-mode,但它已经深深的吸引了我。从我看过数以百计的文章来说,Org-mode 可以改变你的生活。它背后的想法很简单:它是一种用普通文本做简单备注的模式,可以很容易地在任务列表和各种数据中转来转去,并进行一些比如按优先级或到期日期的过滤,或设置一个重复日期。然而,虽然思路简单,但你可以做到很多,用各种方法用于各种用途。与其去看一个长长的介绍,我觉得你可以去读读[现有教程][2],有很多视频可以看,自己去体验一下 Org-mode 是多么强大。
|
||||
|
||||
### 6. Helm ###
|
||||
|
||||
![](https://c2.staticflickr.com/2/1489/23310442334_5e6db22b79_c.jpg)
|
||||
|
||||
一些使用者喜欢它,但是其他人没有这么大的使用热情。我是后者的一部分。但在拥有这样一个庞大的追随者的情况下,是不能不提到它的。Helm 旨在完全变换你的 Emacs 使用体验。简单来说,Helm 是一个在 Emacs 中帮助你快速找到一个文件或命令的框架。根据你的输入,它将尝试使用词语自动完成来引导你将大脑的念头变为行动。起初感觉有点奇怪,但对一些人来说,Helm 本身就是一个信仰。虽然我不是 Helm 的粉丝,我欣赏 helm-occur 这一个伟大的工具可以在一个大文档搜索字符串并且在一个单独的缓冲区显示所有匹配结果,以便很容易在它们之间跳转。如果你正在寻找一个快速演示来了解 Helm 能做什么,我推荐[这篇文章][3]。
|
||||
|
||||
### 7. ace-jump-mode ###
|
||||
|
||||
![](https://c2.staticflickr.com/2/1710/23856168871_6df1faa565_c.jpg)
|
||||
|
||||
这是另一个有一大群追随者的插件,我正在试图成为 ace-jump-mode 的粉丝。掌握这个插件,你会体验到超越鼠标感受。简单描述一下,通过你选择的快捷方式触发 ace-jump-mode 后,你会被提示输入字符。输入一个字符,所有以该字符开头的单词中的那个字符就会替换成一个唯一字符并被高亮。输入一个屏幕上的高亮字符,你的光标会直接跳转到高亮显示的那个词。我不得不承认,这让我使用它时有点反应不过来,但是,一旦你掌握它,它将显著提升你在一个文档里的移动速度。(LCTT 译注:用文字描述比较困难,如截图中,你输入的是一个“i”,然后屏幕中所有以“i”开头的单词中的那个“i”都被替换成了从 a 到 z 的字符,并高亮;你可以输入这些高亮的字符直接跳转到那个位置。)
|
||||
|
||||
### 8. find-file-in-project ###
|
||||
|
||||
![](https://c2.staticflickr.com/2/1492/23570808809_96ec8454a9_c.jpg)
|
||||
|
||||
如果你喜欢 Sublime text 以及它可以用非常方便的`Ctrl-p`模糊搜索来打开一个项目中的任何文件的功能,你将会喜欢上 find-file-in-project (简称 ffip)的。使用设置指定了您的版本控制的根文件夹后,您可以轻松地调出一个很酷的文本条,通过快速扫描和搜索你的代码,来根据你输入的名称找到匹配的文件。我喜欢把它绑定到键盘上的 F6 键。如果你不知道整个目录从上到下的复杂结构,这很简单,而且非常易用。
|
||||
|
||||
### 9. Flymake ###
|
||||
|
||||
![](https://c2.staticflickr.com/6/5708/23310442354_cbba657ed3.jpg)
|
||||
|
||||
对 IDE 的爱好者来说,我认为语法检查器是 IDE 最强大的特性之一,它非常适合初学者和方便了那些疲惫的程序员。感谢 Flymake,Emacs 用户也可以享受到了语法检查器。因为我工作中用 PHP 很多,Flymake 就不需要任何额外的配置。当我写代码的时候,它会自动检查我的代码和高亮任何一个包含问题的行。对于编译语言,Flymake 将寻找一个用于检查你的代码的 Makefile。真神奇。
|
||||
|
||||
### 10. electric-pair ###
|
||||
|
||||
最后,但并非最不重要,在我看来,electric-pair 是最简单但最强大的插件之一。它会自动关闭你输入的括号。它起初看起来并不是很有用,但相信我,在被寻找配对括号折磨几百次之后,你会很高兴有这么一个插件,可以确保你所有的表达式的括号都是一一对应的。
|
||||
|
||||
总结一下,Emacs 是一个奇妙的工具。这可不是一个令人惊讶的说法。试试这些插件,看着你的效率直线飙升吧。这个列表当然不是详尽的列表。如果你想贡献你的建议,请在评论中这样做。我自己一直在寻找新的插件来试着发现 Emacs 的新体验。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://xmodulo.com/best-plugins-to-increase-productivity-on-emacs.html
|
||||
|
||||
作者:[Adrien Brochard][a]
|
||||
译者:[zky001](https://github.com/zky001)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://xmodulo.com/author/adrien
|
||||
[1]:http://xmodulo.com/turn-vim-full-fledged-ide.html
|
||||
[2]:http://orgmode.org/worg/org-tutorials/
|
||||
[3]:http://tuhdo.github.io/helm-intro.html
|
236
published/201601/20151229 Grub 2--Heal your bootloader.md
Normal file
236
published/201601/20151229 Grub 2--Heal your bootloader.md
Normal file
@ -0,0 +1,236 @@
|
||||
Grub 2:拯救你的 bootloader
|
||||
================================================================================
|
||||
|
||||
**没有什么事情比 bootloader 坏掉更让气人的了。充分发挥 Grub 2 的作用,让 bootloader 安分工作吧。**
|
||||
|
||||
为什么这么说?
|
||||
|
||||
- Grub 2 是最受欢迎的 bootloader ,几乎用在所有 Linux 发行版上。
|
||||
- bootloader 是一个至关重要的软件,但是非常容易损坏。
|
||||
- Grub 2 是兼具扩展性和灵活性的一款引导加载程序,提供了大量可定制选项。
|
||||
|
||||
Grub 2 是一款精彩的功能强大的软件。它不是 bootloader 界的一枝独秀,但却最受欢迎,几乎所有主要的桌面发行版都在使用它。 Grub 的工作有两个。首先,它用一个菜单展示计算机上所有已经安装的操作系统供你选择。其次,当你从启动菜单中选择了一个 Linux 操作系统, Grub 便加载这个 Linux 的内核。
|
||||
|
||||
你知道,如果使用 Linux ,你就离不开 bootloader 。然而它却是 Linux 发行版内部最鲜为人知的部分。在这篇文章里,我们将带你熟悉 Grub 2 一些著名的特性,强化你相关技能,使你在 bootloader 跑飞的时候能够自行处理。
|
||||
|
||||
Grub 2 最重要的部分是一堆文本文件和两个脚本文件。首先需要了解的是 `/etc/default/grub` 。这是一个文本文件,你可以在里面设置通用配置变量和 Grub 2 菜单(见下方 “常见用户设置” )的其它特性。
|
||||
|
||||
Grub 2 另一个重要的部分是 `/etc/grub.d` 文件夹。定义每个菜单项的所有脚本都放置在这里。这些脚本的名称必须有两位的数字前缀。其目的是,在构建 Grub 2 菜单时定义脚本的执行顺序以及相应菜单项的顺序。文件 `00_header` 首先被读取,负责解析 `/etc/default/grub` 配置文件。然后是 Linux 内核的菜单项,位于 `10_linux` 文件中。这个脚本在默认的 `/boot` 分区为每个内核创建一个正规菜单项和一个恢复菜单项。
|
||||
|
||||
紧接着的是为第三方应用所用的脚本,如 `30_os-prober` 和 `40_custom` 。 **os-prober** 脚本为内核和其它分区里的操作系统创建菜单项。它能识别安装的 Linux、 Windows、 BSD 以及 Mac OS X 。 如果你的硬盘布局比较独特,使得 **os-prober** 无法找到已经安装的发行版,你可以在 `40_custom` 文件(见下方 “添加自定义菜单项”)中添加菜单项。
|
||||
|
||||
**Grub** 2 不需要你手动维护你的启动选项的配置文件:取而代之的是使用 `grub2-mkconfig` 命令产生 `/boot/grub/grub.cfg` 文件。这个功能会解析 `/etc/grub.d` 目录中的脚本以及 `/etc/default/grub` 设置文件来定义你的设置情况。
|
||||
|
||||
###图形化的引导修复###
|
||||
|
||||
多亏了 Boot Repair 应用,只需要点击按钮,Grub 2 许许多多的问题都能轻易解决。这个漂亮小巧的应用有一个直观的用户界面,可以扫描并识别多种硬盘布局和分区方案,还能发现并正确识别安装在其中的操作系统。这个应用可以处理传统计算机里的主引导记录(Master Boot Record) (MBR),也可以处理新型 UEFI 计算机中的 GUID 分区表(GUID Partition Table)(GPT)。
|
||||
|
||||
Boot Repair 最简单的使用方式是安装到 Live Ubuntu 会话中。在一个 bootloader 损坏的机器上启动 Ubuntu Live 发行版,先通过添加它的 PPA 版本库来安装 Boot Repair ,命令如下:
|
||||
|
||||
sudo add-apt-repository ppa:yannubuntu/Boot Repair
|
||||
|
||||
然后刷新版本库列表:
|
||||
|
||||
sudo apt-get update
|
||||
|
||||
安装应用,如下:
|
||||
|
||||
sudo apt-get install -y Boot Repair
|
||||
|
||||
安装完毕后就启动应用。在显示它的界面(由一对按键组成)之前将会扫描你的硬盘。根据工具的指示,只需按下 Recommended Repair(推荐的修复)按钮,即可修复大部分坏掉的 bootloader 。修复 bootloader 之后,这个工具会输出一个短小的 URL ,你应该把它记录下来。这个 URL 包含了硬盘详尽的信息:分区信息以及重要的 Grub 2 文件(如 `/etc/default/grub` 和 `/boot/grub/grub.cfg` )的内容。如果工具不能解决 bootloader 的问题,可以把你这个 URL 共享在你的发行版的论坛上,让其他人可以分析你的硬盘布局以便给你建议。
|
||||
|
||||
![](http://www.linuxvoice.com/wp-content/uploads/2015/10/boot-repair-large.jpg)
|
||||
|
||||
*Boot Repair 也可以让你定制 Grub 2 的选项。*
|
||||
|
||||
### Bootloader 急救 ###
|
||||
|
||||
Grub 2 引导问题会让系统处于几种不同状态。屏幕(如你所想,本该显示 bootloader 菜单的地方)所展示的文本会指示出系统的当前状态。如果系统中止于 **grub>** 提示符,表明 Grub 2 模块已经被加载,但是找不到 **grub.cfg** 文件。当前是完全版的 Grub 2 命令行 shell,你可以通过多种方式解决此问题。如果你看到的是 **grub rescue>** 提示符,表明 bootloader 不能找到 Grub 2 模块或者找不到任何引导文件( boot files )。然而,如果你的屏幕只显示 ‘GRUB’ 一词,表明 bootloader 找不到通常位于主引导记录( Master Boot Record )里的最基本的信息。
|
||||
|
||||
你可以通过使用 live CD 或者在 Grub 2 shell 中修正此类错误。如果你够幸运, bootloader 出现了 **grub>** 提示符,你就能获得 Grub 2 shell 的支配权,来帮助你排错。
|
||||
|
||||
接下来几个命令工作在 **grub>** 和 **grub rescue>** 提示符下。 **set pager=1** 命令设置显示分页( pager ),防止文本在屏幕上一滚而过。你还可以使用 **ls** 命令列出 Grub 识别出的所有分区,如下:
|
||||
|
||||
grub> ls
|
||||
(hd0) (hd0,msdos5) (hd0,msdos6) (hd1,msdos1)
|
||||
|
||||
如你所见,这个命令列出分区的同时一并列出了分区表方案(即 msdos)。
|
||||
|
||||
你还可以在每个分区上面使用 **ls** 来查找你的根文件系统:
|
||||
|
||||
grub> ls (hd0,5)/
|
||||
lost+found/ var/ etc/ media/ bin/ initrd.gz
|
||||
boot/ dev/ home/ selinux/ srv/ tmp/ vmlinuz
|
||||
|
||||
你可以不写上分区名的 **msdos** 部分。同样,如果你忘记了尾部的斜杠( trailing slash )只输入 `ls (hd0,5)` ,那你将获得分区的信息,比如文件系统类型、总体大小和最后修改时间。如果你有多个分区,可以使用 `cat` 读取 `/etc/issue` 文件中的内容,来确定发行版,格式如 `cat (hd0,5)/etc/issue` 。
|
||||
|
||||
假设你在 **(hd0,5)** 中找到根文件系统,请确保它包含 `/boot/grub` 目录,以及你想引导进入的内核镜像,如 **vmlinuz-3.13.0-24-generic** 。此时输入以下命令:
|
||||
|
||||
grub> set root=(hd0,5)
|
||||
grub> linux /boot/vmlinuz-3.13.0-24-generic root=/dev/sda5
|
||||
grub> initrd /boot/initrd.img-3.13.0-24-generic
|
||||
|
||||
第一个命令把 Grub 指向我们想引导进入的发行版所在的分区。接着第二个命令告知 Grub 内核镜像在分区中的位置,以及根文件系统的位置。最后一行设置虚拟文件系统( initial ramdisk )文件的位置。你可以使用 tab 补全功能补全内核名字和虚拟文件系统( initrd: initial ramdisk )的名字,节省时间和精力。
|
||||
|
||||
输入完毕,在下一个 **grub>** 提示符后输入 `boot` , Grub 将会引导进入指定的操作系统。
|
||||
|
||||
如果你在 **grub rescue>** 提示符下,情况会有些许不同。因为 bootloader 未能够找到并加载任何必需的模块,你需要手动添加这些模块:
|
||||
|
||||
grub rescue> set root=(hd0,5)
|
||||
grub rescue> insmod (hd0,5)/boot/grub/normal.mod
|
||||
grub rescue> normal
|
||||
grub> insmod linux
|
||||
|
||||
如上所示,跟之前一样,使用 `ls` 命令列出所有分区之后,使用 `set` 命令标记起来。然后添加 **normal** 模块,此模块激活时将会恢复到标准 **grub>** 模式。如果 linux 模块没加载,接下来的命令会进行添加。如果这个模块已经加载,你可以跟之前一样,把引导加载程序指向内核镜像和虚拟文件系统( initrd )文件,然后使用 `boot` 启动发行版,完美收官。
|
||||
|
||||
一旦成功启动发行版,别忘了为 Grub 重新产生新的配置文件,使用
|
||||
|
||||
grub-mkconfig -o /boot/grub/grub.cfg
|
||||
|
||||
命令。你还需要往 MBR 里安装一份 bootloader 的拷贝,使用
|
||||
|
||||
sudo grub2-install /dev/sda
|
||||
|
||||
命令。
|
||||
|
||||
![](http://www.linuxvoice.com/wp-content/uploads/2015/10/grub2-cfg-large.jpg)
|
||||
|
||||
*想要禁用 `/etc/grub.d` 目录下的脚本,你只需移除其可执行位,比如使用 `chmod -x /etc/grub.d/20_memtest86+` 就能将 ‘Memory Test’ 选项从菜单中移除。*
|
||||
|
||||
### Grub 2 和 UEFI ###
|
||||
|
||||
在支持 UEFI 的机器(最近几年上市的机器大部分都是)调试坏掉的 Grub 2 增加了另一复杂的层次。恢复安装在 UEFI 机器上的 **Grub 2** 的和安装在非 UEFI 机器上的并没多大区别,只是新的固件处理方式不一样,从而导致了很多种恢复结果。
|
||||
|
||||
对于基于 UEFI 的系统,不要在 MBR 上安装任何东西。相反,你要在 EFI 系统分区(EFI System Partition)( ESP )里安装 Linux EFI bootloader,并且借助工具把它设置为 EFI 的默认启动程序,这个工具对于 Linux 用户是 `efibootmgr` ,对于 window 用户则是 `bcdedit` 。
|
||||
|
||||
照目前情况看,在安装任何与 Windows 8 兼容的主流桌面 Linux 发行版前,应该正确安装好 Grub 2。然而,如果 bootloader 损坏,你可以使用 live 发行版修复机器。在启动 live 介质之时,请确保是以 UEFI 模式启动。计算机每个可移动驱动器的启动菜单将会有两个: 一个普通的和一个以 EFI 标记的。使用后者会用到 **/sys/firmware/efi/** 文件中的 EFI 变量。
|
||||
|
||||
在 live 环境中,挂载教程前面所提的安装挂掉系统的根文件系统。除此之外,还需要挂载 ESP 分区。假设分区是 **/dev/sda1** ,你可以如下所示挂载:
|
||||
|
||||
sudo mount /dev/sda1 /mnt/boot/efi
|
||||
|
||||
接着在 chroot 到安装完毕的发行版前之前,使用 `modprobe efivars` 加载 **efivars** 模块。
|
||||
|
||||
在这里, Fedora 用户可以使用如下命令重新安装 bootloader
|
||||
|
||||
yum reinstall grub2-efi shim
|
||||
|
||||
但在此之前,需要使用
|
||||
|
||||
grub2-mkconfig -o /boot/grub2/grub.cfg
|
||||
|
||||
来产生新的配置文件。 Ubuntu 用户则改用以下命令
|
||||
|
||||
apt-get install --reinstall grub-efi-amd64
|
||||
|
||||
一旦 bootloader 正确就位,退出 chroot ,卸载所有分区,重启到 Grub 2 菜单。
|
||||
|
||||
### 伙计,我的 Grub 哪去了? ###
|
||||
|
||||
Grub 2 最好的特性是可以随时重新安装。因此,当其它像 Windows 之类的系统用它们自己的 bootloader 替换后,导致 Grub 2 丢失,你可以使用 live 发行版,寥寥数步即可重装 Grub 。假设你在 `/dev/sda5` 安装了一个发行版,若要重装 Grub ,你只需首先使用以下命令为发行版创建一个挂载目录:
|
||||
|
||||
sudo mkdir -p /mnt/distro
|
||||
|
||||
然后挂载分区,如下:
|
||||
|
||||
mount /dev/sda5 /mnt/distro
|
||||
|
||||
接着就能重装 Grub 了,如下:
|
||||
|
||||
grub2-install --root-directory=/mnt/distro /dev/sda
|
||||
|
||||
这个命令会改写 `/dev/sda` 设备上的 MBR 信息,指向当前 Linux 系统,并重写一些 Grub 2 文件,如 **grubenv** 和 **device.map** 。
|
||||
|
||||
另一个问题常见于装有多个发行版的计算机上。当你安装了新的 Linux 发行版,它的 bootloader 应当要能找到所有已经安装的发行版。一旦不行,只要引导进入新安装的发行版,并运行
|
||||
|
||||
grub2-mkconfig
|
||||
|
||||
在运行这个命令之前,请确保启动菜单中缺失的发行版的 root 分区已经挂载。如果你想添加的发行版有单独的 `/root` 和 `/home` 分区,在运行 `grub2-mkconfig` 之前,只需挂载包含 `/root` 的分区。
|
||||
|
||||
虽然 Grub 2 能够找到大部分发行版,但是在 Ubuntu 中尝试添加安装的 Fedora 系统需要额外的一个步骤。如果你以默认设置安装了 Fedora ,则发行版的安装器已经创建了 LVM 分区。此时你需要使用发行版的包管理系统安装 **lvm2** 驱动,如下
|
||||
|
||||
sudo apt-get install lvm2
|
||||
|
||||
才能使得 Grub 2 的 `os-prober` 脚本能够找到并将 Fedora 添加进启动菜单。
|
||||
|
||||
### 常见用户设置 ###
|
||||
|
||||
Grub 2 有很多可配置变量。 这里有一些 `/etc/default/grub` 文件中你最可能会修改到的常见变量。 **GRUB_DEFAULT** 变量指定默认的启动项,可以设置为数字值,比如 0 ,表示第一个菜单项,或者设置为 “saved” ,将指向上一次启动时选中的菜单项。 **GRUB\_TIMEOUT** 变量指定启动默认菜单项之前的停留时间。 **GRUB\_CMDLINE\_LINUX** 列出了要传递给所有 Linux 菜单项的内核命令行参数。
|
||||
|
||||
如果 **GRUB\_DISABLE\_RECOVERY** 变量设置为 **true** ,那么将不生成恢复模式菜单项。这些菜单项会以单用户模式启动发行版,这种模式下允许你利用命令行工具修复系统。 **GRUB_GFXMODE** 变量同样有用,它指定了菜单上文本显示的分辨率,它可以设置为你的显卡所支持的任何数值。
|
||||
|
||||
![](http://www.linuxvoice.com/wp-content/uploads/2015/10/grub2-cli-large.jpg)
|
||||
|
||||
*Grub 2 有个命令行模式,通过在 bootloader 菜单上按 C 进入。*
|
||||
|
||||
### 彻底的修复 ###
|
||||
|
||||
如果 `grub2-install` 命令不能正常运作,使得你无法引导进入 Linux ,你需要完整地重装以及重新配置 bootloader 。为此目的,需要用到强大的 **chroot** 功能将运行环境从 live CD 环境切换至我们想修复的 Linux 的安装位置。任何拥有 **chroot** 工具的 Linux live CD 都可以实现这个目的。不过需要确保 live 介质的系统架构和硬盘上系统的架构一致。因此当你希望 **chroot** 到 64 位系统,你必须使用 amd64 live 发行版。
|
||||
|
||||
启动进入 live 发行版之后,首先需要检查机器上的分区。使用 `fdisk -l` 列出磁盘上所有分区,记录你想修复的 Grub 2 系统所在的分区。
|
||||
|
||||
假设我们希望从安装在 `/dev/sda5` 中的发行版中恢复 bootloader 。启动终端使用如下命令挂载分区:
|
||||
|
||||
sudo mount /dev/sda5 /mnt
|
||||
|
||||
此时需要绑定(bind)Grub 2 bootloader 需要进入的目录,以便检测其它操作系统:
|
||||
|
||||
$ sudo mount --bind /dev /mnt/dev
|
||||
$ sudo mount --bind /dev/pts /mnt/dev/pts
|
||||
$ sudo mount --bind /proc /mnt/proc
|
||||
$ sudo mount --bind /sys /mnt/sys
|
||||
|
||||
此时可以离开 live 环境进入安装在 **/dev/sda5** 分区中的发行版了,通过 **chroot** :
|
||||
|
||||
$ sudo chroot /mnt /bin/bash
|
||||
|
||||
现在可以安装、检测、以及升级 Grub 了,跟之前一样,使用
|
||||
|
||||
sudo grub2-install /dev/sda
|
||||
|
||||
命令来重装 bootloader 。因为 **grub2-install** 命令不能创建**grub.cfg** 文件,需要手动创建,如下
|
||||
|
||||
sudo grub-mkconfig -o /boot/grub/grub.cfg
|
||||
|
||||
这样应该就可以了。现在你就有了 Grub 2 的一份全新拷贝,罗列了机器上所有的操作系统和发行版。在重启电脑之前,你需要依次退出 chroot 系统,卸载所有分区,如下所示:
|
||||
|
||||
$ exit
|
||||
$ sudo umount /mnt/sys
|
||||
$ sudo umount /mnt/proc
|
||||
$ sudo umount /mnt/dev/pts
|
||||
$ sudo umount /mnt/dev
|
||||
$ sudo umount /mnt
|
||||
|
||||
现在你可以安全地重启电脑了,而它应该会回退到 Grub 2 的控制之中,你已经修好了这个 bootloader。
|
||||
|
||||
### 添加自定义菜单项 ###
|
||||
|
||||
如果希望往 bootloader 菜单里添加菜单项,你需要在 **40_custom** 文件里添加一个启动段( boot stanza )。例如,你可以使用它展示一个菜单项来启动安装在可移动 USB 驱动里的 Linux 发行版。假设你的 USB 驱动器是 **sdb1** ,并且 vmlinuz 内核镜像和虚拟文件系统( initrd )都位于根 (/)目录下,在 **40_custom** 文件中添加以下内容:
|
||||
|
||||
menuentry “Linux on USB” {
|
||||
set root=(hd1,1)
|
||||
linux /vmlinuz root=/dev/sdb1 ro quiet splash
|
||||
initrd /initrd.img
|
||||
}
|
||||
|
||||
相比使用设备和分区名,使用它们的 UUID 可以获得更精确结果,比如
|
||||
|
||||
set root=UUID=54f22dd7-eabe
|
||||
|
||||
使用
|
||||
|
||||
sudo blkid
|
||||
|
||||
来获得所有已连接的驱动器和分区的 UUID 。你还可以为你磁盘上没被 os-prober 脚本找到的发行版添加菜单项,只要你知道该发行版的安装位置以及其内核和虚拟文件系统( initrd )的位置即可。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.linuxvoice.com/grub-2-heal-your-bootloader/
|
||||
|
||||
作者:[Mayank Sharma][a]
|
||||
译者:[soooogreen](https://github.com/soooogreen)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.linuxvoice.com/author/mayank/
|
@ -0,0 +1,152 @@
|
||||
Linux 系统下查看硬件信息命令大全
|
||||
================================================================================
|
||||
|
||||
![](https://maketecheasier-holisticmedia.netdna-ssl.com/assets/uploads/2015/12/hdd_info_featured-1.png)
|
||||
|
||||
有许多命令可以用来查看 Linux 系统上的硬件信息。有些命令只能够打印出像 CPU 和内存这一特定的硬件组件信息,另外一些命令可以查看多种硬件组件的信息。
|
||||
|
||||
这个教程可以带大家快速了解一下查看各种硬件设备的信息和配置详情的最常用的命令。
|
||||
|
||||
### lscpu ###
|
||||
|
||||
`lscpu`命令能够查看 CPU 和处理单元的信息。该命令没有任何其他选项或者别的功能。
|
||||
|
||||
lscpu
|
||||
|
||||
运行该命令会看到下面输出:
|
||||
|
||||
![hdd_info_lscpu](https://www.maketecheasier.com/assets/uploads/2015/12/hdd_info_lscpu.png)
|
||||
|
||||
### lspci ###
|
||||
|
||||
`lspci`是另一个命令行工具,可以用来列出所有的 PCI 总线,还有与 PCI 总线相连的设备的详细信息,比如 VGA 适配器、显卡、网络适配器、usb 端口、SATA 控制器等。
|
||||
|
||||
lspci
|
||||
|
||||
你可以看到类似下图的输出信息。
|
||||
|
||||
![hdd_info_lspci](https://www.maketecheasier.com/assets/uploads/2015/12/hdd_info_lspci-1.png)
|
||||
|
||||
可以通过运行下面的命令来过滤出特定设备的信息:
|
||||
|
||||
lspci -v | grep "VGA" -A 12
|
||||
|
||||
运行上面的命令可以看到类似下图的关于显卡的信息。
|
||||
|
||||
![hdd_info_lspci_vga](https://www.maketecheasier.com/assets/uploads/2015/12/hdd_info_lspci_vga.png)
|
||||
|
||||
### lshw ###
|
||||
|
||||
`lshw`是一个通用的工具,可以列出多种硬件单元的详细或者概要的信息,比如 CPU、内存、usb 控制器、硬盘等。`lshw`能够从各个“/proc”文件中提取出相关的信息。
|
||||
|
||||
lshw -short
|
||||
|
||||
通过运行上面的命令可以看到下面的信息。
|
||||
|
||||
![hdd_info_lshw](https://www.maketecheasier.com/assets/uploads/2015/12/hdd_info_lshw.png)
|
||||
|
||||
### lsscsi ###
|
||||
|
||||
通过运行下面的命令可以列出像硬盘和光驱等 scsi/sata 设备的信息:
|
||||
|
||||
lsscsi
|
||||
|
||||
会得到类似下面的输出。
|
||||
|
||||
![hdd_info_lsscsi](https://www.maketecheasier.com/assets/uploads/2015/12/hdd_info_lsscsi-1.png)
|
||||
|
||||
### lsusb ###
|
||||
|
||||
`lsusb`命令能够列出 USB 控制器和与 USB 控制器相连的设备的详细信息。默认情况下,`lsusb`命令只打印出概要信息。可以通过使用-v参数打印每一个usb端口的详细信息。
|
||||
|
||||
lsusb
|
||||
|
||||
可以看到下面输出。
|
||||
|
||||
![hdd_info_lsusb](https://www.maketecheasier.com/assets/uploads/2015/12/hdd_info_lsusb.png)
|
||||
|
||||
### Inxi ###
|
||||
|
||||
`Inxi`是一个 bash 脚本,能够从系统的多个来源和命令获取硬件信息,并打印出一个非技术人员也能看懂的友好的报告。
|
||||
|
||||
默认情况下,Ubuntu 上没有安装`inxi`。可以通过运行下面命令来安装`Inxi`:
|
||||
|
||||
sudo apt-get install inxi
|
||||
|
||||
安装完`Inxi`之后,通过运行下面命令能够得到硬件相关的信息:
|
||||
|
||||
inxi -Fx
|
||||
|
||||
能够得到类似下图的输出。
|
||||
|
||||
![hdd_info_inxi](https://www.maketecheasier.com/assets/uploads/2015/12/hdd_info_inxi.jpg)
|
||||
|
||||
### df ###
|
||||
|
||||
`df`命令能够列出不同分区的概要信息、挂载点、已用的和可用的空间。
|
||||
|
||||
可以在使用`df`命令的时候加上`-H`参数。
|
||||
|
||||
df -H
|
||||
|
||||
会得到下面的输出。
|
||||
|
||||
![hdd_info_df](https://www.maketecheasier.com/assets/uploads/2015/12/hdd_info_df-1.png)
|
||||
|
||||
### Free ###
|
||||
|
||||
通过使用`free`命令可以查看系统中使用的、闲置的和 RAM 的总体数量。
|
||||
|
||||
free -m
|
||||
|
||||
会看到下面输出。
|
||||
|
||||
![hdd_info_free](https://www.maketecheasier.com/assets/uploads/2015/12/hdd_info_free.png)
|
||||
|
||||
### Dmidecode ###
|
||||
|
||||
`dmidecode`命令与其他命令不同。该命令是从硬件中的 DMI 表中读取信息的。
|
||||
|
||||
要查看处理器的信息,运行下面命令:
|
||||
|
||||
sudo dmidecode -t processor
|
||||
|
||||
![hdd_info_dmi_processor](https://www.maketecheasier.com/assets/uploads/2015/12/hdd_info_dmi_processor.jpg)
|
||||
|
||||
要查看内存的信息,运行下面命令:
|
||||
|
||||
sudo dmidecode -t memory
|
||||
|
||||
![hdd_info_dmi_memory](https://www.maketecheasier.com/assets/uploads/2015/12/hdd_info_dmi_memory.png)
|
||||
|
||||
要查看 bios 的信息,运行下面命令:
|
||||
|
||||
sudo dmidecode -t bios
|
||||
|
||||
![hdd_info_dmi_bios](https://www.maketecheasier.com/assets/uploads/2015/12/hdd_info_dmi_bios.png)
|
||||
|
||||
### Hdparm ###
|
||||
|
||||
`hdparm`命令可以用来显示像硬盘这样的 sata 设备的信息。
|
||||
|
||||
sudo hdparm
|
||||
|
||||
可以看到下面的输出。
|
||||
|
||||
![hdd_info_hdparm](https://www.maketecheasier.com/assets/uploads/2015/12/hdd_info_hdparm.png)
|
||||
|
||||
### 总结 ###
|
||||
|
||||
每个命令都有不同的方式来获取硬件的信息。在查看特定的硬件信息的时候,可以尝试使用不同的方式。上面所有的命令行工具在大部分的 Linux 发行版本中都是可以使用的,可以很容易的从仓库中获取安装。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.maketecheasier.com/check-hardware-information-linux/
|
||||
|
||||
作者:[Hitesh Jethva][a]
|
||||
译者:[sonofelice](https://github.com/sonofelice)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.maketecheasier.com/author/hiteshjethva/
|
@ -0,0 +1,75 @@
|
||||
开源 DJ 软件 Mixxx 2.0 版发布
|
||||
================================================================================
|
||||
![](http://itsfoss.com/wp-content/uploads/2016/01/DJ-Software-Mixxx-2-Released.jpg)
|
||||
|
||||
时隔三年,开源 DJ 混音软件 [Mixxx][1] 再度发布一个大的版本更新----Mixxx 2.0。
|
||||
|
||||
Mixxx 是一个跨平台的自由、开源的 DJ 混音软件,它几乎提供了当你想自己混音时需要的一切功能。Mixxx 近几年在专业人士以及业余爱好者中都很火。
|
||||
|
||||
甚至在 Mixxx 中你能使用你的 iTunes 音乐库。它的强有力的引擎使它支持多种文件格式。Mixxx 默认即支持超过85种MIDI DJ 调节器以及少部分 HID 调节器。它也包含一个自动选项,可以让你在混音时休息一下。
|
||||
|
||||
Mixxx 的完整功能列表可以在[这里][2]找到。在查看完整列表之前,让我们看看最新版有何更新。
|
||||
|
||||
### Mixxx 2.0更新 ###
|
||||
|
||||
- 可动态调整大小的外观
|
||||
- 4 轨道混音并且和主轨道同步
|
||||
- 内置特效
|
||||
- 谐波混频(Harmonic Mixing)与音乐按键检测
|
||||
- RGB 音频波形
|
||||
- 4 个麦克风输入和 4 个音频输入,麦克风音量可调
|
||||
- 黑胶音源输入、输出
|
||||
- 支持自定义封面
|
||||
- 核心混音引擎改进
|
||||
- 更新的音乐库
|
||||
- 改进增强了 DJ 调节器
|
||||
|
||||
你可以在[这里][3]中看到所有的新功能。
|
||||
|
||||
### 在基于 Ubuntu 的发行版中安装 Mixxx 2.0 ###
|
||||
|
||||
Mixxx 提供了他们自己的ppa源,这使得在基于 Ubuntu 的发行版,如 Linux Mint、elementary OS、 Zorin OS 上安装Mixxx 2.0 变得十分简单.
|
||||
|
||||
打开终端,并输入如下命令:
|
||||
|
||||
sudo add-apt-repository ppa:mixxx/mixxx
|
||||
sudo apt-get update
|
||||
sudo apt-get install mixxx
|
||||
|
||||
使用如下命令卸载 Mixxx:
|
||||
|
||||
sudo apt-get remove mixxx
|
||||
sudo add-apt-repository --remove ppa:mixxx/mixxx
|
||||
|
||||
如果你已经在使用旧版本的 Mixxx。它将很快升级到2.0版。
|
||||
|
||||
### 在其他发行版中安装 Mixxx 2.0 ###
|
||||
|
||||
Archliunx
|
||||
|
||||
sudo pacman -S mixxx
|
||||
|
||||
对于其他发行版,你还可以从源码编译安装 Mixxx。从下列地址下载源代码:
|
||||
|
||||
- [源码地址][4]
|
||||
|
||||
由于 Mixxx 是个跨平台的应用,你也可以下载它的 Windows 版或者 Mac OS 版,请访问 Mixxx 下载页面找到对应的下载链接:
|
||||
|
||||
- [下载地址][5]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://itsfoss.com/dj-mixxx-2/
|
||||
|
||||
作者:[Abhishek][a]
|
||||
译者:[name1e5s](https://github.com/name1e5s)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://itsfoss.com/author/abhishek/
|
||||
[1]:http://mixxx.org/
|
||||
[2]:http://mixxx.org/features/
|
||||
[3]:http://mixxx.org/whats-new-in-mixxx-2-0/
|
||||
[4]:http://downloads.mixxx.org/mixxx-2.0.0/mixxx-2.0.0-src.tar.gz
|
||||
[5]:http://mixxx.org/download/
|
@ -0,0 +1,80 @@
|
||||
Ubuntu 里的“间谍软件”将在 Ubuntu 16.04 LTS 中被禁用
|
||||
================================================================================
|
||||
|
||||
出于用户隐私的考虑,Ubuntu 阉割了一个有争议的功能。
|
||||
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2013/09/as2.jpg)
|
||||
|
||||
**Unity 中有争议的在线搜索功能将在今年四月份发布的 Ubuntu 16.04 LTS 中被默认禁用**
|
||||
|
||||
用户在 Unity 7 的 Dash 搜索栏里将**只能搜索到本地文件、文件夹以及应用**。这样,用户输入的关键词将不会被发送到 Canonical 或任何第三方内容提供商的服务器里。
|
||||
|
||||
> “现在,Unity 的在线搜索在默认状况下是关闭的”
|
||||
|
||||
在目前 ubuntu 的支持版本中,Dash 栏会将用户搜索的关键词发送到 Canonical 运营的远程服务器中。它发送这些数据以用于从50多家在线服务获取搜索结果,这些服务包括维基百科、YouTube 和 The Weather Channel 等。
|
||||
|
||||
我们可以选择去**系统设置 > 隐私控制**关闭这项功能。但是,一些开源社区针对的是默认打开这个事情。
|
||||
|
||||
### Ubuntu 在线搜索引发的争议 ###
|
||||
|
||||
> “Richard Stallman 将这个功能描述为 ‘间谍软件’”
|
||||
|
||||
早在2012年,在 Ubuntu 搜索中整合了来自亚马逊的内容之后,开源社区就表示为其用户的隐私感到担忧。在2013年,“Smart Scopes 服务”全面推出后,开源社区再度表示担忧.
|
||||
|
||||
风波如此之大,以至于开源界大神 [Richard Stallman 都称 Ubuntu 为"间谍软件"][1]。
|
||||
|
||||
[电子前哨基金会 (EFF)][2]也在一系列博文中表达出对此的关注,并且建议 Canonical 将这个功能做成用户自由选择是否开启的功能。Privacy International 比其他的组织走的更远,对于 Ubuntu 的工作,他们给 Ubuntu 的缔造者发了一个“[老大哥奖][3]”。
|
||||
|
||||
[Canonical][4] 坚称 Unity 的在线搜索功能所收集的数据是匿名的以及“不可识别是来自哪个用户的”。
|
||||
|
||||
在[2013年 Canoical 发布的博文中][5]他们解释道:“**(我们)会使用户了解我们收集哪些信息以及哪些第三方服务商将会在他们搜索时从 Dash 栏中给出结果。我们只会收集能够提升用户体验的信息。**”
|
||||
|
||||
### Ubuntu 开始严肃对待的用户数据隐私###
|
||||
|
||||
Canonical 在给新安装的 Ubuntu 14.04 LTS 以及以上版本中禁用了来自亚马逊的产品搜索结果(尽管来自其他服务商的搜索结果仍然在出现,直到你关闭这个选项)
|
||||
|
||||
在下一个LTS(长期支持)版,也就是 Ubuntu 16.04 中,Canonical 完全关闭了这个有争议的在线搜索功能,这个功能在用户安装完后就是关闭的。就如同 EFF 在2012年建议他们做的那样。
|
||||
|
||||
“你搜索的关键词将不会逃出你的计算机。” [Ubuntu 桌面主管 Will Cooke][6]解释道,“对于搜索结果的更精细的控制”和 Unity 8 所提供的“更有针对性的结果添加不到 Unity 7 里”。
|
||||
|
||||
这也就是“[Unity 7]的在线搜索功能将会退役”的原因。
|
||||
|
||||
这个变化也会降低对 Unity 7 的支持以及对 Canonical 基础设施的压力。Unity 提供的搜索结果越少,Canonical 就能把时间和工程师放到更加振奋人心的地方,比如更早的发布 Unity 8 桌面环境。
|
||||
|
||||
### 在 Ubuntu 16.04 中你需要自己开启在线搜索功能 ###
|
||||
|
||||
![Privacy settings in Ubuntu let you opt in to seeing online results](http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/privacy.jpg)
|
||||
|
||||
*在 Ubuntu 隐私设置中你可以打开在线搜索功能*
|
||||
|
||||
禁用 Ubuntu 桌面的在线搜索功能的决定将获得众多开源/免费软件社区的欢呼。但是并不是每一个人都对 Dash 提供的语义搜索功能反感,如果你认为你失去了在搜索时预览天气、查看新闻或其他来自 Dash 在线搜索提供的内容所带来的效率的话,你只需要简单的点几下鼠标就可以**再次打开这个功能**,定位到 Ubuntu 的**系统设置 > 隐私控制 > 搜索**然后将选项调至“**开启**”。
|
||||
|
||||
这个选项不会自动把亚马逊的产品信息加入到搜索结果中。如果你想看产品信息的话,需要打开第二个可选项“shipping lens”才能看到来自 Amazon (和 Skimlinks)的内容。
|
||||
|
||||
### 总结 ###
|
||||
|
||||
|
||||
- 默认情况下,Ubuntu 16.04 LTS 的 Dash 栏将不会搜索到在线结果
|
||||
- 可以手动打开在线搜索
|
||||
- **系统设置 > 隐私控制 > 搜索**中的第二个可选项允许你看到亚马逊的产品信息
|
||||
- 这个变动只会影响新安装的系统。从老版本升级的将会保留用户的喜好
|
||||
|
||||
你同意这个决定吗?抑或是 Cononical 可能降低了新用户的体验?在评论中告诉我们。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.omgubuntu.co.uk/2016/01/ubuntu-online-search-feature-disabled-16-04
|
||||
|
||||
作者:[Joey-Elijah Sneddon][a]
|
||||
译者:[name1e5s](https://github.com/name1e5s)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://plus.google.com/117485690627814051450/?rel=author
|
||||
[1]:http://arstechnica.com/information-technology/2012/12/richard-stallman-calls-ubuntu-spyware-because-it-tracks-searches/?utm_source=omgubuntu
|
||||
[2]:https://www.eff.org/deeplinks/2012/10/privacy-ubuntu-1210-amazon-ads-and-data-leaks?utm_source=omgubuntu
|
||||
[3]:http://www.omgubuntu.co.uk/2013/10/ubuntu-wins-big-brother-austria-privacy-award
|
||||
[4]:http://blog.canonical.com/2012/12/07/searching-in-the-dash-in-ubuntu-13-04/
|
||||
[5]:http://blog.canonical.com/2012/12/07/searching-in-the-dash-in-ubuntu-13-04/?utm_source=omgubuntu
|
||||
[6]:http://www.whizzy.org/2015/12/online-searches-in-the-dash-to-be-off-by-default?utm_source=omgubuntu
|
154
published/201601/Learn with Linux--Learning Music.md
Normal file
154
published/201601/Learn with Linux--Learning Music.md
Normal file
@ -0,0 +1,154 @@
|
||||
与 Linux 一起学习:玩音乐
|
||||
================================================================================
|
||||
![](https://www.maketecheasier.com/assets/uploads/2015/07/learnmusic-featured.png)
|
||||
|
||||
[与 Linux 一起学习:][1]的所有文章:
|
||||
|
||||
- [与 Linux 一起学习:学习打字][2]
|
||||
- [与 Linux 一起学习:物理模拟][3]
|
||||
- [与 Linux 一起学习:玩音乐][4]
|
||||
- [与 Linux 一起学习:两款地理软件][5]
|
||||
- [与 Linux 一起学习:掌握数学][6]
|
||||
|
||||
引言:Linux 提供大量的教学软件和工具,面向各个年级段以及不同年龄段,提供大量学科的练习实践,其中大多数是可以与用户进行交互的。本“与 Linux 一起学习:”系列就来介绍一些教学软件。
|
||||
|
||||
学习音乐是一个很好的消遣方式。训练你的耳朵能识别音阶与和弦、掌握一门乐器、控制自己的嗓音,这些都需要大量的练习,以及会遇到很多困难。音乐理论非常博大精深,有太多东西需要记忆,你需要非常勤奋才能将这些东西变成你的“技术”。在你的音乐之路上,Linux 提供了杰出的软件来帮助你前行。它们不能让你立刻成为一个音乐家,但可以作为一个降低学习难度的好助手。
|
||||
|
||||
### Gnu Solfège ###
|
||||
|
||||
[Solfège][7] 是一个世界流行的音乐教学工具,适用于各个级别的音乐教育。很多流行的教学方法(比如著名的柯达伊教学法)就使用 Solfège 作为它们的基础。相比于学到音乐知识,Solfège 更关注于让用户不断练习音乐。它预期的用户是那些已经有一些音乐基础,并且想不断练习音乐技巧的学生。
|
||||
|
||||
以下是 GNU 网站的开发者声明:
|
||||
|
||||
> “当你在高校、学院、音乐学校中学习音乐,你一般要进行的一些听力训练,比如视唱,会比较简单,但是通常需要两个人配合,一个问,一个答。[...] GNU Solfège 尝试着解决这个问题,你可以在没有其他人的帮助下完成更多的简单机械式练习。只是别忘了这些练习只是整个音乐训练过程的一部分。”
|
||||
|
||||
这款软件兑现了它的承诺,你可以在试听帮手的帮助下练习几乎所有音乐技巧。
|
||||
|
||||
Debian 和 Ubuntu 的仓库上有这款软件,在终端运行下面命令安装软件:
|
||||
|
||||
sudo apt-get install solfege
|
||||
|
||||
它开启的时候会出现一个简单的开始界面。
|
||||
|
||||
![learnmusic-solfege-main](https://www.maketecheasier.com/assets/uploads/2015/07/learnmusic-solfege-main.png)
|
||||
|
||||
这些选项几乎包含了所有种类,大多数链接里面都有子类,你可以从中选择独立的练习。
|
||||
|
||||
![learnmusic-solfege-scales](https://www.maketecheasier.com/assets/uploads/2015/07/learnmusic-solfege-scales.png)
|
||||
|
||||
![learnmusic-solfege-hun](https://www.maketecheasier.com/assets/uploads/2015/07/learnmusic-solfege-hun.png)
|
||||
|
||||
软件提供多种练习和测试项目,都能通过外接的 MIDI 设备(LCTT 译注:MIDI,Musical Instrument Digital Interface,乐器数字接口)或者声卡来播放音乐。这些练习还配合音符播放,以及支持慢动作回放功能。
|
||||
|
||||
很重要的一点是如果你在 Ubuntu 下使用 Solfège,默认情况下你可能没法听到声音(除非你有外接 MIDI 设备)。如果出现了这种情况,点击“File -> Prefernces -> Sound Setup”,选择合适的设备(一般情况下选 ALSA 都能解决问题)。
|
||||
|
||||
![learnmusic-solfege-midi](https://www.maketecheasier.com/assets/uploads/2015/07/learnmusic-solfege-midi.png)
|
||||
|
||||
Solfège 对你的日常练习非常有帮助,经常使用它,可以在你开始唱 do-re-mi 之前练好你的音乐听觉。
|
||||
|
||||
### Tete (听力训练) ###
|
||||
|
||||
[Tete][8] (这款听力训练软件)是一款简单但有效的 JAVA 软件,用于[训练听力][9]。它通过在不同背景下播放不同和弦以及不同 MIDI 声音来训练你分辨不同的音阶。[从 SourceForge 下载][10],然后解压它。
|
||||
|
||||
unzip Tete-*
|
||||
|
||||
进入解压出来的目录:
|
||||
|
||||
cd Tete-*
|
||||
|
||||
这里假设你的系统已经安装好了 JAVA,你可以使用下面的命令执行 Java 文件:
|
||||
|
||||
java -jar Tete-[版本号]
|
||||
|
||||
(可以在输入“Tete-”后按 Tab 键进行自动补全。)
|
||||
|
||||
Tete 只有一个简单的界面,所有内容都在这里了。
|
||||
|
||||
![learnmusic-tete-main](https://www.maketecheasier.com/assets/uploads/2015/07/learnmusic-tete-main.png)
|
||||
|
||||
你可以选择表演音阶(见上图),和弦(下图),
|
||||
|
||||
![learnmusic-tete-chords](https://www.maketecheasier.com/assets/uploads/2015/07/learnmusic-tete-chords.png)
|
||||
|
||||
或音程。
|
||||
|
||||
![learnmusic-tete-intervals](https://www.maketecheasier.com/assets/uploads/2015/07/learnmusic-tete-intervals.png)
|
||||
|
||||
你可以“精调”很多选项,包括 midi 乐器的声音、提升或降低音阶以及回放的快慢等等。SourceForge 网站上有关于 Tete 的非常有用的教程,介绍了这个软件的各个方面。
|
||||
|
||||
### JalMus ###
|
||||
|
||||
Jalmus 是用 JAVA 写的键盘音符阅读训练器。可以外接 MIDI 键盘,也可以使用虚拟键盘。它提供很多简单的课程练习来训练你的音符阅读能力。虽然这个软件在2013年之后就不再更新了,但还是比较实用的。
|
||||
|
||||
进入 [sourceforge 页面][11]下载最后版本(v2.3)的 JAVA 安装器,或者在终端输入下面的命令下载:
|
||||
|
||||
wget http://garr.dl.sourceforge.net/project/jalmus/Jalmus-2.3/installjalmus23.jar
|
||||
|
||||
下载完成后,加载安装器:
|
||||
|
||||
java -jar installjalmus23.jar
|
||||
|
||||
跨平台的 JAVA 安装器会一步一步引导你完成安装的。
|
||||
|
||||
Jalmus 的主界面非常朴素。
|
||||
|
||||
![learnmusic-jalmus-main](https://www.maketecheasier.com/assets/uploads/2015/07/learnmusic-jalmus-main.jpg)
|
||||
|
||||
你可以在“Lessons”菜单中找到各种不同难度的课程,从非常简单(一行音符从左边向右滑过,键盘上相应的按键会高亮显示),
|
||||
|
||||
![learnmusic-jalmus-singlenote](https://www.maketecheasier.com/assets/uploads/2015/07/learnmusic-jalmus-singlenote.png)
|
||||
|
||||
到非常困难(有多行音符从右向左滑过,你需要按顺序键入音符)。
|
||||
|
||||
![learnmusic-jalmus-multinote](https://www.maketecheasier.com/assets/uploads/2015/07/learnmusic-jalmus-multinote.png)
|
||||
|
||||
Jalmus 也包含一些阅读单个音符的训练,内容和课程相似,只是没有那些视觉上的提示了。当完成训练后,屏幕上会显示你的乐谱。它还提供不同难度的节拍训练,你能听到并看到这些训练里面播放的节拍。在多行乐谱同时播放时,一个节拍器(能听见能看见)可以帮你理解
|
||||
|
||||
![learnmusic-jalmus-rhythm](https://www.maketecheasier.com/assets/uploads/2015/07/learnmusic-jalmus-rhythm.png)
|
||||
|
||||
和阅读乐谱。
|
||||
|
||||
![learnmusic-jalmus-score](https://www.maketecheasier.com/assets/uploads/2015/07/learnmusic-jalmus-score.png)
|
||||
|
||||
所有这些功能都是可配置的,你可以选择打开或者关闭它们。
|
||||
|
||||
总的来说,Jalmus 可能是节奏训练软件中属于功能最强的,虽然它不是学音乐必备的软件,但在节奏训练这个特殊的领域,它做得很出色。
|
||||
|
||||
### 号外 ###
|
||||
|
||||
#### TuxGuitar ####
|
||||
|
||||
对于吉他练习者,[TuxGuitar][12] 看起来很像 Windows 下面的 Guitar Pro 软件(它也可以读 Guitar Pro 格式的文件)。
|
||||
|
||||
#### PianoBooster ####
|
||||
|
||||
[Piano Booster][13] 可以练习钢琴技巧,它能播放 MIDI 文件,你可以使用外接键盘来弹钢琴,同时还能查看屏幕上滑过的乐谱。
|
||||
|
||||
### 总结 ###
|
||||
|
||||
Linux 提供很多优秀的工具供你学习,如果你对音乐感兴趣,你完全不用担心没有帮你练习音乐技术的软件。实际上,可供学习音乐的学生选择的优秀软件数量远比上面介绍的要多。如果你还知道其他的音乐训练软件,请在写下你的评论,让我们能够知道。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.maketecheasier.com/linux-learning-music/
|
||||
|
||||
作者:[Attila Orosz][a]
|
||||
译者:[bazz2](https://github.com/bazz2)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.maketecheasier.com/author/attilaorosz/
|
||||
[1]:https://www.maketecheasier.com/series/learn-with-linux/
|
||||
[2]:https://www.maketecheasier.com/learn-to-type-in-linux/
|
||||
[3]:https://www.maketecheasier.com/linux-physics-simulation/
|
||||
[4]:https://www.maketecheasier.com/linux-learning-music/
|
||||
[5]:https://www.maketecheasier.com/linux-geography-apps/
|
||||
[6]:https://www.maketecheasier.com/learn-linux-maths/
|
||||
[7]:https://en.wikipedia.org/wiki/Solf%C3%A8ge
|
||||
[8]:http://tete.sourceforge.net/index.shtml
|
||||
[9]:https://en.wikipedia.org/wiki/Ear_training
|
||||
[10]:http://sourceforge.net/projects/tete/files/latest/download
|
||||
[11]:http://sourceforge.net/projects/jalmus/files/Jalmus-2.3/
|
||||
[12]:http://tuxguitar.herac.com.ar/
|
||||
[13]:http://www.linuxlinks.com/article/20090517041840856/PianoBooster.html
|
@ -1,36 +1,36 @@
|
||||
Linux 教学之教你练打字
|
||||
与 Linux 一起学习:学习打字
|
||||
================================================================================
|
||||
![](https://www.maketecheasier.com/assets/uploads/2015/07/learntotype-featured.png)
|
||||
|
||||
[Linux 学习系列][1]的所有文章:
|
||||
[与 Linux 一起学习][1]的所有文章:
|
||||
|
||||
- [Linux 教学之教你练打字][2]
|
||||
- [Linux 教学之物理模拟][3]
|
||||
- [Linux 教学之教你玩音乐][4]
|
||||
- [Linux 教学之两款地理软件][5]
|
||||
- [Linux 教学之掌握数学][6]
|
||||
- [与 Linux 一起学习:学习打字][2]
|
||||
- [与 Linux 一起学习:物理模拟][3]
|
||||
- [与 Linux 一起学习:玩音乐][4]
|
||||
- [与 Linux 一起学习:两款地理软件][5]
|
||||
- [与 Linux 一起学习: 使用这些 Linux 应用来征服你的数学学习][6]
|
||||
|
||||
引言:Linux 提供大量的教学软件和工具,面向各个年级段以及年龄段,提供大量学科的练习实践,其中大多数是可以与用户进行交互的。本“Linux 教学”系列就来介绍一些教学软件。
|
||||
Linux 提供大量的教学软件和工具,面向各个年级以及不同年龄段,提供大量学科的练习实践,其中大多数是可以与用户进行交互的。本“与 Linux 一起学习”系列就来介绍一些教学软件。
|
||||
|
||||
很多人都要打字,操作键盘已经成为他们的第二天性。 但是这些人中有多少是依然使用两个手指头来快速地按键盘的?即使学校有教我们使用键盘的方法(LCTT 译注:呃。。。),我们也会慢慢地抛弃正确的打字姿势,养成只用两个大拇指玩键盘的习惯。
|
||||
很多人都要打字,操作键盘已经成为他们的第二天性。但是这些人中有多少是依然使用两个手指头来快速地按键盘的?即使学校有教我们使用键盘的方法,我们也会慢慢地抛弃正确的打字姿势,养成只用两个大拇指玩键盘的习惯。(LCTT 译注:呃,你确认是拇指而不是食指?)
|
||||
|
||||
下面要介绍的两款软件可以帮你掌控你的键盘,然后你就可以让你的手指跟上你的思维,然后你的思维就不会被打断了。当然,还有很多更炫更酷的软件可供选择,但本文所选的这两款是最简单、最容易上手的。
|
||||
下面要介绍的两款软件可以帮你掌控你的键盘,然后你就可以让你的手指跟上你的思维,这样你的思维就不会被打断了。当然,还有很多更炫更酷的软件可供选择,但本文所选的这两款是最简单、最容易上手的。
|
||||
|
||||
### TuxType (或者叫 TuxTyping) ###
|
||||
|
||||
TuxType 是给小孩子玩的。在一些有趣的游戏中,小学生们可以通过完成一些简单的练习来 get “10个手指打字”的新技能。
|
||||
TuxType 是给小孩子玩的。在一些有趣的游戏中,小学生们可以通过完成一些简单的练习来 Get “双手打字以示清白”的新技能。
|
||||
|
||||
Debian 及其衍生版本(包含所有 Ubuntu 衍生版本)的标准软件仓库都有 TuxType,使用下面的命令安装:
|
||||
|
||||
sudo apt-get install tuxtype
|
||||
|
||||
软件开始时有一个简单的 Tux 界面和一段难听的 midi 音乐,幸运的是你可以通过右下角的喇叭按钮把声音调低了。(LCTT译注:Tux 就是那只 Linux 吉祥物,Linus 说它的表情被设计成刚喝完啤酒后的满足感,见《Just For Fun》。)
|
||||
软件开始时有一个简单的 Tux 界面和一段难听的 midi 音乐,幸运的是你可以通过右下角的喇叭按钮把声音调低了。(LCTT 译注:Tux 就是那只 Linux 吉祥物,Linus 说它的表情被设计成刚喝完啤酒后的满足感,见《Just For Fun》。)
|
||||
|
||||
![learntotype-tuxtyping-main](https://www.maketecheasier.com/assets/uploads/2015/07/learntotype-tuxtyping-main.jpg)
|
||||
|
||||
最开始处的两个选项“Fish Cascade”和“Comet Zap”是打字游戏,当你开始游戏时,你需要很投入到这个课程。
|
||||
最开始处的两个选项“Fish Cascade”和“Comet Zap”是打字游戏,当你开始游戏时,你就投入到了这个课程。
|
||||
|
||||
第3个选项为“Lession”,提供40多个简单的课程,每个课程会增加一个字母让你来练习,练习过程中会给出一些提示,比如应该用哪个手指按键盘上的字母。
|
||||
第3个选项为“Lessions”,提供40多个简单的课程,每个课程会增加一个字母让你来练习,练习过程中会给出一些提示,比如应该用哪个手指按键盘上的字母。
|
||||
|
||||
![learntotype-tuxtyping-exd1](https://www.maketecheasier.com/assets/uploads/2015/07/learntotype-tuxtyping-exd1.jpg)
|
||||
|
||||
@ -68,7 +68,7 @@ GNU Typist 也在大多数 Debian 衍生版本的软件库中,运行下面的
|
||||
|
||||
![learntotype-gtype-lesson](https://www.maketecheasier.com/assets/uploads/2015/07/learntotype-gtype-lesson.png)
|
||||
|
||||
在交互练习的过程中,如果你输入错误,会将错误点高亮显示。不会像其他漂亮界面分散你的注意力,你可以专注于练习。每个课程的右下角都有一组统计数据来展示你的表现,如果你犯了很多错误,就可能无法通过关卡了。
|
||||
在交互练习的过程中,如果你输入错误,会将错误位置高亮显示。不会像其他漂亮界面分散你的注意力,你可以专注于练习。每个课程的右下角都有一组统计数据来展示你的表现,如果你犯了很多错误,就可能无法通过关卡了。
|
||||
|
||||
![learntotype-gtype-mistake](https://www.maketecheasier.com/assets/uploads/2015/07/learntotype-gtype-mistake.png)
|
||||
|
||||
@ -106,7 +106,7 @@ via: https://www.maketecheasier.com/learn-to-type-in-linux/
|
||||
|
||||
作者:[Attila Orosz][a]
|
||||
译者:[bazz2](https://github.com/bazz2)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
@ -116,4 +116,4 @@ via: https://www.maketecheasier.com/learn-to-type-in-linux/
|
||||
[3]:https://www.maketecheasier.com/linux-physics-simulation/
|
||||
[4]:https://www.maketecheasier.com/linux-learning-music/
|
||||
[5]:https://www.maketecheasier.com/linux-geography-apps/
|
||||
[6]:https://www.maketecheasier.com/learn-linux-maths/
|
||||
[6]:https://linux.cn/article-6546-1.html
|
@ -1,22 +1,22 @@
|
||||
Linux 教学之物理模拟
|
||||
与 Linux 一起学习:物理模拟
|
||||
================================================================================
|
||||
![](https://www.maketecheasier.com/assets/uploads/2015/07/physics-fetured.jpg)
|
||||
|
||||
[Linux 学习系列][1]的所有文章:
|
||||
[与 Linux 一起学习][1]的所有文章:
|
||||
|
||||
- [Linux 教学之教你练打字][2]
|
||||
- [Linux 教学之物理模拟][3]
|
||||
- [Linux 教学之教你玩音乐][4]
|
||||
- [Linux 教学之两款地理软件][5]
|
||||
- [Linux 教学之掌握数学][6]
|
||||
- [与 Linux 一起学习:学习打字][2]
|
||||
- [与 Linux 一起学习:物理模拟][3]
|
||||
- [与 Linux 一起学习:玩音乐][4]
|
||||
- [与 Linux 一起学习:两款地理软件][5]
|
||||
- [与 Linux 一起学习:掌握数学][6]
|
||||
|
||||
引言:Linux 提供大量的教学软件和工具,面向各个年级段以及年龄段,提供大量学科的练习实践,其中大多数是可以与用户进行交互的。本“Linux 教学”系列就来介绍一些教学软件。
|
||||
Linux 提供大量的教学软件和工具,面向各个年级段以及不同年龄段,提供大量学科的练习实践,其中大多数是可以与用户进行交互的。本“与 Linux 一起学习”系列就来介绍一些教学软件。
|
||||
|
||||
物理是一个有趣的课题,证据就是任何物理课程都可以用具体的图片演示给你看。能看到物理变化过程是一个很妙的体验,特别是你不需要到教室就能体验到。Linux 上有很多很好的科学软件来为你提供这种美妙感觉,本篇文章只着重介绍其中几种。
|
||||
|
||||
### 1. Step ###
|
||||
|
||||
[Step][7] 是一个交互型物理模拟器,KDEEdu[8](KDE 教育)项目的一部分。没人会比它的作者更了解它的作用。在项目官网主页上写着“[Step] 是这样玩的:你放点东西进来,添加一些力(地心引力或者弹簧),然后点击‘模拟’按钮,这款软件就会为你模拟这个物体在真实世界的物理定律影响下的运动状态。你可以改变物体或力的属性(允许在模拟过程中进行修改),然后观察不同属性下产生的现象。Step 可以让你从体验中学习物理!”
|
||||
[Step][7] 是一个交互型物理模拟器,属于 [KDEEdu][8](KDE 教育)项目的一部分。没人会比它的作者更了解它的作用。在项目官网主页上写着“[Step] 是这样玩的:你放点东西进来,添加一些力(地心引力或者弹簧),然后点击‘模拟(Simulate)’按钮,这款软件就会为你模拟这个物体在真实世界的物理定律影响下的运动状态。你可以改变物体或力的属性(允许在模拟过程中进行修改),然后观察不同属性下产生的现象。Step 可以让你从体验中学习物理!”
|
||||
|
||||
Step 依赖 Qt 以及其他一些 KDE 所依赖的软件,正是由于像 KDEEdu 之类的项目存在,才使得 KDE 变得如此强大,当然,你可能需要忍受由此带来的庞大的桌面系统。
|
||||
|
||||
@ -30,7 +30,7 @@ Step 有个简单的交互界面,你进去后直接可以进行模拟操作。
|
||||
|
||||
![physics-step-main](https://www.maketecheasier.com/assets/uploads/2015/07/physics-step-main.png)
|
||||
|
||||
你会发现所有物品在屏幕左边,包括不同的质点,空气,不同形状的物体,弹簧,以及不同的力(见1区域) 。如果你选中一个物体,屏幕右边会出现简短的描述信息(见2区域),以及你创造的世界的介绍(主要介绍这个世界中包含的物体)(见3区域),以及你当前选中的物体的属性(见4区域),以及你的操作历史(见5区域)。
|
||||
你会发现所有物品在屏幕左边,包括不同的质点,空气,不同形状的物体,弹簧,以及不同的力(见区域1) 。如果你选中一个物体,屏幕右边会出现简短的描述信息(见区域2),以及你创造的世界的介绍(主要介绍这个世界中包含的物体)(见区域3),以及你当前选中的物体的属性(见区域4),以及你的操作历史(见区域5)。
|
||||
|
||||
![physics-step-parts](https://www.maketecheasier.com/assets/uploads/2015/07/physics-step-parts.png)
|
||||
|
||||
@ -42,7 +42,7 @@ Step 有个简单的交互界面,你进去后直接可以进行模拟操作。
|
||||
|
||||
![physics-step-simulate3](https://www.maketecheasier.com/assets/uploads/2015/07/physics-step-simulate3.png)
|
||||
|
||||
想要更多了解 Step,按 F1 键,KDE 帮助中心会打印详细的软件操作手册。
|
||||
想要更多了解 Step,按 F1 键,KDE 帮助中心会显示出详细的软件操作手册。
|
||||
|
||||
### 2. Lightspeed ###
|
||||
|
||||
@ -50,10 +50,10 @@ Lightspeed 是一个简单的基于 GTK+ 和 OpenGL 的模拟器,可以模拟
|
||||
|
||||
受到相对速度影响的现象如下(LCTT 译注:都可以从“光速不变”理论推导出来):
|
||||
|
||||
- **洛伦兹收缩** —— 物体看起来变短了
|
||||
- **多普乐红移/蓝移** —— 物体的颜色变了
|
||||
- **前灯效应** —— 物体的明暗变化(LCTT 译注:当物体接近光速移动时,会在它前进的方向强烈地辐射光子,从这个角度看,物体会变得很亮,相反,从物体背后观察,会发现它很暗)
|
||||
- **光行差效应** —— 物体扭曲变形了
|
||||
- **洛伦兹收缩(The Lorentz contraction)** —— 物体看起来变短了
|
||||
- **多普勒红移/蓝移(The Doppler red/blue shift)** —— 物体的颜色变了
|
||||
- **前灯效应(The headlight effect)** —— 物体的明暗变化(LCTT 译注:当物体接近光速移动时,会在它前进的方向强烈地辐射光子,从这个角度看,物体会变得很亮,相反,从物体背后观察,会发现它很暗)
|
||||
- **光行差效应(Optical aberration)** —— 物体扭曲变形了
|
||||
|
||||
Lightspeed 有 Debian 的源,执行下面的命令来安装:
|
||||
|
||||
@ -75,9 +75,13 @@ Lightspeed 有 Debian 的源,执行下面的命令来安装:
|
||||
|
||||
### 特别推荐: Physion ###
|
||||
|
||||
Physion 是个非常有趣并且美观的物理模拟软件,比上面介绍的两款软件都好玩好看。可惜在写本文章的时候它的[官网][10]出现问题了,下载页面无法使用。
|
||||
Physion 是个非常有趣并且美观的物理模拟软件,比上面介绍的两款软件都好玩好看。
|
||||
|
||||
从他们放在 Youtube 上的视频来看,Physion 还是值得我们下载下来玩玩的。在官网恢复之前,我们只能看看演示视频了。
|
||||
可以从它的[官网][10]下载:
|
||||
|
||||
- [Linux][11]
|
||||
|
||||
从他们放在 Youtube 上的视频来看,Physion 还是值得我们下载下来玩玩的。\
|
||||
|
||||
注:youtube 视频
|
||||
<iframe frameborder="0" src="//www.youtube.com/embed/P32UHa-3BfU?autoplay=1&autohide=2&border=0&wmode=opaque&enablejsapi=1&controls=0&showinfo=0" id="youtube-iframe"></iframe>
|
||||
@ -90,18 +94,19 @@ via: https://www.maketecheasier.com/linux-physics-simulation/
|
||||
|
||||
作者:[Attila Orosz][a]
|
||||
译者:[bazz2](https://github.com/bazz2)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.maketecheasier.com/author/attilaorosz/
|
||||
[1]:https://www.maketecheasier.com/series/learn-with-linux/
|
||||
[2]:https://www.maketecheasier.com/learn-to-type-in-linux/
|
||||
[2]:https://linux.cn/article-6902-1.html
|
||||
[3]:https://www.maketecheasier.com/linux-physics-simulation/
|
||||
[4]:https://www.maketecheasier.com/linux-learning-music/
|
||||
[5]:https://www.maketecheasier.com/linux-geography-apps/
|
||||
[6]:https://www.maketecheasier.com/learn-linux-maths/
|
||||
[6]:https://linux.cn/article-6546-1.html
|
||||
[7]:https://edu.kde.org/applications/all/step
|
||||
[8]:https://edu.kde.org/
|
||||
[9]:http://lightspeed.sourceforge.net/
|
||||
[10]:http://www.physion.net/
|
||||
[11]:http://physion.net/en/downloads/linux/13-physion-linux-x8664/download
|
@ -1,16 +1,16 @@
|
||||
Linux 教学之两款地理软件
|
||||
与 Linux 一起学习:学习地理
|
||||
================================================================================
|
||||
![](https://www.maketecheasier.com/assets/uploads/2015/07/learn-geography-featured.png)
|
||||
|
||||
[Linux 学习系列][1]的所有文章:
|
||||
[与 Linux 一起学习][1]的所有文章:
|
||||
|
||||
- [Linux 教学之教你练打字][2]
|
||||
- [Linux 教学之物理模拟][3]
|
||||
- [Linux 教学之教你玩音乐][4]
|
||||
- [Linux 教学之两款地理软件][5]
|
||||
- [Linux 教学之掌握数学][6]
|
||||
- [与 Linux 一起学习:学习打字][2]
|
||||
- [与 Linux 一起学习:物理模拟][3]
|
||||
- [与 Linux 一起学习:玩音乐][4]
|
||||
- [与 Linux 一起学习:学习地理][5]
|
||||
- [与 Linux 一起学习:掌握数学][6]
|
||||
|
||||
引言:Linux 提供大量的教学软件和工具,面向各个年级段以及年龄段,提供大量学科的练习实践,其中大多数是可以与用户进行交互的。本“Linux 教学”系列就来介绍一些教学软件。
|
||||
引言:Linux 提供大量的教学软件和工具,面向各个年级段以及各个年龄段,提供大量学科的练习实践,其中大多数是可以与用户进行交互的。本“与 Linux 一起学习”系列就来介绍一些教学软件。
|
||||
|
||||
地理是一门有趣的学科,我们每天都能接触到,虽然可能没有意识到,但当你打开 GPS、SatNav 或谷歌地图时,你就已经在使用这些软件提供的地理数据了;当你在新闻中看到一个国家的消息或听到一些金融数据时,这些信息都可以归于地理学范畴。Linux 提供了很多学习地理学的软件,可用于教学,也可用于自学。
|
||||
|
||||
@ -62,11 +62,11 @@ Marble 专注于地图绘制,它的主界面就是一张地图。
|
||||
|
||||
![learn-geography-marble-history](https://www.maketecheasier.com/assets/uploads/2015/07/learn-geography-marble-history.jpg)
|
||||
|
||||
除了有包含不同界面和大量数据的离线地图,Marble 还提供其他信息。你可以在菜单中打开或关闭不同的离线 info-boxes
|
||||
除了有包含不同界面和大量数据的离线地图,Marble 还提供其他信息。你可以在菜单中打开或关闭不同的离线信息框
|
||||
|
||||
![learn-geography-marble-offline](https://www.maketecheasier.com/assets/uploads/2015/07/learn-geography-marble-offline.png)
|
||||
|
||||
和在线的 online services。
|
||||
和在线服务。
|
||||
|
||||
![learn-geography-marble-online](https://www.maketecheasier.com/assets/uploads/2015/07/learn-geography-marble-online.png)
|
||||
|
||||
@ -86,7 +86,7 @@ via: https://www.maketecheasier.com/linux-geography-apps/
|
||||
|
||||
作者:[Attila Orosz][a]
|
||||
译者:[bazz2](https://github.com/bazz2)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,345 @@
|
||||
一个八年的 Linux 老用户使用 Windows 10 的体验
|
||||
==========================================================
|
||||
|
||||
Windows 10 是2015年7月29日上市的最新一代 Windows NT 系列系统,它是 Windows 8.1 的继任者。Windows 10 支持 Intel 32位平台,AMD64 以及 ARM v7 处理器。
|
||||
|
||||
![Windows 10 and Linux Comparison](http://www.tecmint.com/wp-content/uploads/2015/08/Windows-10-vs-Linux.jpg)
|
||||
|
||||
*对比:Windows 10与Linux*
|
||||
|
||||
作为一个连续使用 linux 超过8年的用户,我想要去体验一下 Windows 10 ,因为有很多关于它的消息。这篇文章是我观察力的一个重大突破。我将从一个 linux 用户的角度去看待一切,所以这篇文章可能会有些偏向于 linux。尽管如此,本文也绝对不会有任何虚假信息。
|
||||
|
||||
1、用谷歌搜索“download Windows 10”并且点击第一个链接。
|
||||
|
||||
![Search Windows 10](http://www.tecmint.com/wp-content/uploads/2015/08/Search-Windows-10.jpg)
|
||||
|
||||
*搜索 Windows 10*
|
||||
|
||||
你也可以直接打开: [https://www.microsoft.com/en_us/software-download/Windows10[1]
|
||||
|
||||
2、微软要求我从 Windows 10, Windows 10 KN, Windows 10 N 和 Windows 10 单语言版中选择一个版本。
|
||||
|
||||
![Select Windows 10 Edition](http://www.tecmint.com/wp-content/uploads/2015/08/Select-Windows-10-Edition.jpg)
|
||||
|
||||
*选择版本*
|
||||
|
||||
以下是各个版本的简略信息:
|
||||
|
||||
- Windows 10 - 包含微软提供给我们的所有软件
|
||||
- Windows 10N - 此版本不包含媒体播放器
|
||||
- Windows 10KN - 此版本没有媒体播放能力
|
||||
- Windows 10 单语言版 - 仅预装一种语言
|
||||
|
||||
3、我选择了第一个选项“Windows 10”并且单击“确认”。之后我要选择语言,我选择了“英语”。
|
||||
|
||||
微软给我提供了两个下载链接。一个是32位版,另一个是64位版。我单击了64位版--这与我的电脑架构相同。
|
||||
|
||||
![Download Windows 10](http://www.tecmint.com/wp-content/uploads/2015/08/Download-Windows-10.jpg)
|
||||
|
||||
*下载 Windows 10*
|
||||
|
||||
我的带宽是15M的,下载了整整3个小时。不幸的是微软没有提供系统的种子文件,否则整个过程会更加舒畅。镜像大小为 3.8 GB(LCTT译者注:就我的10M小水管,我使用迅雷下载用时50分钟)。
|
||||
|
||||
我找不到更小的镜像,微软并没有为 Windows 提供网络安装镜像。我也没有办法在下载完成后去校验哈希值。(LCTT 译注:你知道的,这对于 Linux 来说都是常识了)
|
||||
|
||||
我十分惊讶,Windows 在这样的问题上居然如此漫不经心。为了验证这个镜像是否正确下载,我需要把它刻到光盘上或者复制到我的U盘上然后启动它,一直静静的看着它安装直到安装完成。
|
||||
|
||||
首先,我用 dd 命令将 win10 的 iso 镜像刻录到U盘上。
|
||||
|
||||
# dd if=/home/avi/Downloads/Win10_English_x64.iso of=/dev/sdb1 bs=512M; sync
|
||||
|
||||
这需要一点时间。在此之后我重启系统并在 UEFI(BIOS)设置中选择从我的U盘启动。
|
||||
|
||||
#### 系统要求 ####
|
||||
|
||||
升级
|
||||
|
||||
- 仅支持从 Windows 7 SP1 或者 Windows 8.1 升级
|
||||
|
||||
全新安装
|
||||
|
||||
- 处理器: 1GHz 以上
|
||||
- 内存: 1GB以上(32位),2GB以上(64位)
|
||||
- 硬盘: 16GB以上(32位),20GB以上(64位)
|
||||
- 显卡: 支持DirectX 9或更新 + WDDM 1.0 驱动
|
||||
|
||||
###Windows 10 安装过程###
|
||||
|
||||
1、Windows 10启动成功了。他们又换了logo,但是仍然没有信息提示我它正在做什么。
|
||||
|
||||
![Windows 10 Logo](http://www.tecmint.com/wp-content/uploads/2015/08/Windows-10-Logo.jpg)
|
||||
|
||||
*Windows 10 Logo*
|
||||
|
||||
2、选择安装语言,时区,键盘,输入法,点击下一步。
|
||||
|
||||
![Select Language and Time](http://www.tecmint.com/wp-content/uploads/2015/08/Select-Language-and-Time.jpg)
|
||||
|
||||
*选择语言和时区*
|
||||
|
||||
3、点击“现在安装”。
|
||||
|
||||
![Install Windows 10](http://www.tecmint.com/wp-content/uploads/2015/08/Install-Windows-10.jpg)
|
||||
|
||||
*安装Windows 10*
|
||||
|
||||
4、下一步是输入密钥,我点击了“跳过”。
|
||||
|
||||
![Windows 10 Product Key](http://www.tecmint.com/wp-content/uploads/2015/08/Windows-10-Product-Key.jpg)
|
||||
|
||||
*Windows 10 产品密钥*
|
||||
|
||||
5、从列表中选择一个系统版本。我选择了 Windows 10专业版。
|
||||
|
||||
![Select Install Operating System](http://www.tecmint.com/wp-content/uploads/2015/08/Select-Install-Operating-System.jpg)
|
||||
|
||||
*选择系统版本*
|
||||
|
||||
6、到了协议部分,选中"我接受"然后点击下一步。
|
||||
|
||||
![Accept License](http://www.tecmint.com/wp-content/uploads/2015/08/Accept-License.jpg)
|
||||
|
||||
*同意协议*
|
||||
|
||||
7、下一步是选择(从 Windows 的老版本)升级到 Windows 10 或者安装 Windows。我搞不懂为什么微软要让我自己选择:“安装Windows”被微软建议为“高级”选项。但是我还是选择了“安装Windows”。
|
||||
|
||||
![Select Installation Type](http://www.tecmint.com/wp-content/uploads/2015/08/Select-Installation-Type.jpg)
|
||||
|
||||
*选择安装类型*
|
||||
|
||||
8、选择驱动器,点击“下一步”。
|
||||
|
||||
![Select Install Drive](http://www.tecmint.com/wp-content/uploads/2015/08/Select-Install-Drive.jpg)
|
||||
|
||||
*选择安装盘*
|
||||
|
||||
9、安装程序开始复制文件,准备文件,安装更新,之后进行收尾。如果安装程序能在安装时输出一堆字符来表示它在做什么就更好了。
|
||||
|
||||
![Installing Windows](http://www.tecmint.com/wp-content/uploads/2015/08/Installing-Windows.jpg)
|
||||
|
||||
*安装 Windows*
|
||||
|
||||
10、在此之后 Windows 重启了。它们说要继续的话,我们需要重启。
|
||||
|
||||
![Windows Installation Process](http://www.tecmint.com/wp-content/uploads/2015/08/Windows-Installation-Process.jpg)
|
||||
|
||||
*安装进程*
|
||||
|
||||
11、我看到了一个写着“正在准备 Windows”的界面。它停了整整五分多钟!仍然没有说明它正在做什么。没有输出。
|
||||
|
||||
![Windows Getting Ready](http://www.tecmint.com/wp-content/uploads/2015/08/Windows-Getting-Ready.jpg)
|
||||
|
||||
*正在准备 Windows*
|
||||
|
||||
12、又到了输入产品密钥的时间。我点击了“以后再说”,并使用快速设置。
|
||||
|
||||
![Enter Product Key](http://www.tecmint.com/wp-content/uploads/2015/08/Enter-Product-Key.jpg)
|
||||
|
||||
*输入产品密钥*
|
||||
|
||||
![Select Express Settings](http://www.tecmint.com/wp-content/uploads/2015/08/Select-Express-Settings.jpg)
|
||||
|
||||
*使用快速设置*
|
||||
|
||||
13、又出现了三个界面,作为 Linux 用户我认为此处应有信息来告诉我安装程序在做什么,但是我想多了。
|
||||
|
||||
![Loading Windows](http://www.tecmint.com/wp-content/uploads/2015/08/Loading-Windows.jpg)
|
||||
|
||||
*载入 Windows*
|
||||
|
||||
![Getting Updates](http://www.tecmint.com/wp-content/uploads/2015/08/Getting-Updates.jpg)
|
||||
|
||||
*获取更新*
|
||||
|
||||
![Still Loading Windows](http://www.tecmint.com/wp-content/uploads/2015/08/Still-Loading-Windows.jpg)
|
||||
|
||||
*还是载入 Windows*
|
||||
|
||||
14、安装程序想要知道谁拥有这台机器,“我的组织”或者我自己。选择我自己并继续。
|
||||
|
||||
![Select Organization](http://www.tecmint.com/wp-content/uploads/2015/08/Select-Organization.jpg)
|
||||
|
||||
*选择组织*
|
||||
|
||||
15、在单击继续之前,安装程序提示我加入“Aruze Ad”或者“加入域”。我选择了后者。
|
||||
|
||||
![Connect Windows](http://www.tecmint.com/wp-content/uploads/2015/08/Connect-Windows.jpg)
|
||||
|
||||
*连接网络*
|
||||
|
||||
16、安装程序让我新建一个账户。所以我输入了“user_name”就点击了下一步,我觉得我会收到一个要求我必须输入密码的信息。
|
||||
|
||||
![Create Account](http://www.tecmint.com/wp-content/uploads/2015/08/Create-Account.jpg)
|
||||
|
||||
*新建账户*
|
||||
|
||||
17、让我惊讶的是 Windows 甚至都没有显示一个警告或提示信息,告诉我必须创建密码。真粗心。不管怎样,现在我可以体验系统了。
|
||||
|
||||
![Windows 10 Desktop](http://www.tecmint.com/wp-content/uploads/2015/08/Windows-10-Desktop.jpg)
|
||||
|
||||
*Windows 10的桌面环境*
|
||||
|
||||
#### Linux 用户(我)直到现在的体验 ####
|
||||
|
||||
- 没有网络安装镜像
|
||||
- 镜像文件太臃肿了
|
||||
- 没有验证 iso 是否为正确的方法(官方没有提供哈希值)
|
||||
- 启动与安装方式仍然与 XP,Win 7,Win 8 相同(可能吧...)
|
||||
- 和以前一样,安装程序没有输出它正在干什么 - 正在复制什么和正在安装什么软件包
|
||||
- 安装程序比 Linux 发行版的更加傻瓜和简单
|
||||
|
||||
####测试 Windows 10####
|
||||
|
||||
18、默认桌面很干净,上面只有一个回收站图标。我们可以直接从桌面搜索网络。底部的快捷方式分别是任务预览、网络、微软应用商店。和以前的版本一样,消息栏在右下角。
|
||||
|
||||
![ ](http://www.tecmint.com/wp-content/uploads/2015/08/Deskop-Shortcut-icons.jpg)
|
||||
|
||||
*桌面图标*
|
||||
|
||||
19、IE 浏览器被换成了 Edge 浏览器。微软把他们的老IE换成了 Edge (斯巴达计划)
|
||||
|
||||
![Microsoft Edge Browser](http://www.tecmint.com/wp-content/uploads/2015/08/Edge-browser.jpg)
|
||||
|
||||
*Edge 浏览器*
|
||||
|
||||
测试起来,这个浏览器至少比 IE 要快。他们有相同的用户界面。它的主页包含新闻更新。它还有一个搜索标题栏是“下一步怎么走”。由于浏览器的全面性能提升,它的加载速度非常快。Edge 的内存占用看起来正常。
|
||||
|
||||
![Windows Performance](http://www.tecmint.com/wp-content/uploads/2015/08/Windows-Performance.jpg)
|
||||
|
||||
*性能*
|
||||
|
||||
Edge 也有小娜加成(智能个人助理)、支持 Chrome 扩展、支持笔记(在浏览网页时记笔记)、分享(在选项卡上右击而不必打开其他选项卡)
|
||||
|
||||
#### Linux 用户(我)此时体验 ####
|
||||
|
||||
20、微软确实提升了网页浏览体验。我绝对稳定性和质量还好。现在它并不落后。
|
||||
|
||||
21、对我来说,Edge 的内存占用不算太大。但是有很多用户抱怨它的内存占用太多。
|
||||
|
||||
22、很难说目前 Edge 已经准备好了与火狐或 Chrome竞争。让我们静观其变。
|
||||
|
||||
#### 更多的视觉体验 ####
|
||||
|
||||
23、重新设计的开始菜单 -- 看起来很简洁高效。Merto 磁贴大部分都会动。预先放置了最通用的应用。
|
||||
|
||||
![Windows Look and Feel](http://www.tecmint.com/wp-content/uploads/2015/08/Windows-Look.jpg)
|
||||
|
||||
*Windows*
|
||||
|
||||
而在 Linux 的 Gnome 桌面环境下。我仅仅需要按下 Win 键并输入应用名就可以搜索应用。
|
||||
|
||||
![Search Within Desktop](http://www.tecmint.com/wp-content/uploads/2015/08/Search-Within-Desktop.jpg)
|
||||
|
||||
*桌面内进行搜索*
|
||||
|
||||
24、文件浏览器 -- 设计的很简洁。左边是进入文件夹的快捷方式。
|
||||
|
||||
![Windows File Explorer](http://www.tecmint.com/wp-content/uploads/2015/08/Windows-File-Explorer.jpg)
|
||||
|
||||
*Windows 文件管理器*
|
||||
|
||||
我们的 Gnome 下的文件管理也同样的简洁高效。从图标上移走了不需要的图形图像是个加分点。
|
||||
|
||||
![File Browser on Gnome](http://www.tecmint.com/wp-content/uploads/2015/08/File-Browser.jpg)
|
||||
|
||||
*Gnome 的文件管理*
|
||||
|
||||
25、设置 -- 尽管 Windows 10的设置有点精炼,但是我们还是可以把它与 linux 的设置进行对比。
|
||||
|
||||
**Windows 的设置**
|
||||
|
||||
![Windows 10 Settings](http://www.tecmint.com/wp-content/uploads/2015/08/Windows-10-Settings.jpg)
|
||||
|
||||
*Windows 10 设置*
|
||||
|
||||
**Linux Gnome 上的设置**
|
||||
|
||||
![Gnome Settings](http://www.tecmint.com/wp-content/uploads/2015/08/Gnome-Settings.jpg)
|
||||
|
||||
*Gnome 的设置*
|
||||
|
||||
26、应用列表 -- 目前,Linux上的应用列表要好于之前的版本(据我所记,那时我还是一个普通的 Windows 用户),但是 Windows 10 的还比 Gnome 3 的差一点。
|
||||
|
||||
**Windows 的应用列表**
|
||||
|
||||
![Application List on Windows 10](http://www.tecmint.com/wp-content/uploads/2015/08/Application-List-on-Windows-10.jpg)
|
||||
|
||||
*Windows 10 的应用列表*
|
||||
|
||||
**Gnome3 的应用列表**
|
||||
|
||||
![Gnome Application List on Linux](http://www.tecmint.com/wp-content/uploads/2015/08/Gnome-Application-List-on-Linux.jpg)
|
||||
|
||||
*Gnome3 的应用列表*
|
||||
|
||||
27、虚拟桌面 -- Windows 10 上的虚拟桌面是近来被提及最多的特性之一。
|
||||
|
||||
这是 Windows 10 上的虚拟桌面。
|
||||
|
||||
![Windows Virtual Desktop](http://www.tecmint.com/wp-content/uploads/2015/08/Windows-Virtual-Desktop.jpg)
|
||||
|
||||
*Windows 的虚拟桌面*
|
||||
|
||||
这是我们 Linux 用户使用了超过20年的虚拟桌面。
|
||||
|
||||
![Virtual Desktop on Linux](http://www.tecmint.com/wp-content/uploads/2015/08/Virtual-Desktop-on-Linux.jpg)
|
||||
|
||||
*Linux 的虚拟桌面*
|
||||
|
||||
#### Windows 10 的其他新特性 ####
|
||||
|
||||
28、Windows 10 自带 wifi 感知。它会把你的 wifi 密码分享给他人。任何在你 wifi 范围内并且曾经通过 Skype, Outlook, Hotmail 或 Facebook与你联系的人都能够获得你的网络接入权。这个特性的本意是让用户可以省时省力的连接网络。
|
||||
|
||||
在微软对于 Tecmint 的问题的回答中,他们说道 -- 用户需要在每次到一个新的网络环境时自己去同意打开 wifi 感知。如果我们考虑到网络安全这将是很不安全的一件事。微软的说法并没有说服我。
|
||||
|
||||
29、从 Windows 7 和 Windows 8.1 升级可以省下买新版的花费。(家庭版 $119 专业版$199)
|
||||
|
||||
30、微软发布了第一个累积更新,这个更新在一小部分设备上会让系统一直重启。Windows可能不知道这个问题或者不知道它发生的原因。
|
||||
|
||||
31、微软内建的“禁用/隐藏我不想要的更新”的功能在我这不起作用。这意味着一旦更新开始推送,你没有方法去禁用/隐藏他们。对不住啦,Windows 用户。
|
||||
|
||||
#### Windows 10 包含的来源于 Linux 的功能 ####
|
||||
|
||||
Windows 10 有很多直接取自 Linux 的功能。如果 Linux 不以 GPL 发布的话,也许以下这些功能永远不会出现在 Windows上。
|
||||
|
||||
32、命令行的包管理器 -- 是的,你没有听错!Windows 10内建了一个包管理器。它只在 Power Shell 下工作。OneGet 是Windows 的官方包管理器。
|
||||
|
||||
![Windows 10 Package Manager](http://www.tecmint.com/wp-content/uploads/2015/08/Windows-10-Package-Manager.jpg)
|
||||
|
||||
*Windows 10的包管理器*
|
||||
|
||||
- 无边窗口
|
||||
- 扁平化图标
|
||||
- 虚拟桌面
|
||||
- 离线/在线搜索一体化
|
||||
- 手机/桌面系统融合
|
||||
|
||||
### 总体印象###
|
||||
|
||||
- 响应速度提升
|
||||
- 动画很好看
|
||||
- 资源占用少
|
||||
- 电池续航提升
|
||||
- Edge 浏览器很稳定
|
||||
- 支持树莓派 2
|
||||
- Windows 10 好的原因是 Windows 8/8.1 没有达到公众预期并且坏的可以
|
||||
- 旧瓶装新酒:Windows 10基本上就是以前的那一套换上新的图标
|
||||
|
||||
测试后我对 Windows 10 的评价是:Windows 10 在视觉和感觉上做了一些更新(就如同 Windows 经常做的那样)。我要为斯巴达计划、虚拟桌面、命令行包管理器、整合在线/离线搜索的搜索栏点赞。这确实是一个更新后的产品 ,但是认为 Windows 10 将是 Linux 的最后一个棺材钉的人错了。
|
||||
|
||||
Linux 走在 Windows 前面。它们的做事方法并不相同。在以后的一段时间里 Windows 不会站到 Linux这一旁。也没有什么让 Linux 用户值得去使用 Windows 10。
|
||||
|
||||
这就是我要说的。希望你喜欢本文。如果你们喜欢本篇文章我会再写一些你们喜欢读的有趣的文章。在下方留下你的有价值的评论。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.tecmint.com/a-linux-user-using-Windows-10-after-more-than-8-years-see-comparison/
|
||||
|
||||
作者:[Avishek Kumar][a]
|
||||
译者:[name1e5s](https://github.com/name1e5s)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.tecmint.com/author/avishek/
|
||||
[1]:https://www.microsoft.com/en-us/software-download/Windows10ISO
|
@ -1,12 +1,13 @@
|
||||
优秀的开源合作编辑工具
|
||||
六款优秀的开源协作编辑工具
|
||||
================================================================================
|
||||
一句话,合作编著就是多个人进行编著。合作有好处也有风险。好处包括更加全面/协调的方式,更好的利用现有资源和一个更加有力的、团结的声音。对于我来说,最大的好处是极大的透明度。那是当我需要采纳同事的观点。同事之间来来回回地传文件效率非常低,导致不必要的延误还让人(比如,我)对整个合作这件事都感到不满意。有个好的合作软件,我就能实时地或异步地分享笔记,数据和文件,并用评论来分享自己的想法。这样在文档、图片、视频、演示文稿上合作就不会那么的琐碎而无聊。
|
||||
|
||||
有很多种方式能在线进行合作,简直不能更简便了。这篇文章表明了我最喜欢的开源实时文档合作编辑工具。
|
||||
简而言之,协作编辑(Collaborative Edit)就是多个人进行编辑。协作有好处也有风险。好处之一是更加全面/协调的方式,更好的利用现有资源和一个更加有力一致的声音。对于我来说,最大的好处是极大的透明度。那是当我需要采纳同事的观点。同事之间来来回回地传文件效率非常低,导致不必要的延误还让人(比如,我)对整个协作这件事都感到不满意。有个好的协作软件,我就能实时地或异步地分享笔记,数据和文件,并用评论来分享自己的想法。这样在文档、图片、视频、演示文稿上协作就不会那么的琐碎而无聊。
|
||||
|
||||
Google Docs 是个非常好的高效应用,有着大部分我所需要的功能。它可以作为一个实时地合作编辑文档的工具提供服务。文档可以被分享、打开并被多位用户同时编辑,用户还能看见其他合作者一个字母一个字母的编辑过程。虽然 Google Docs 对个人是免费的,但并不开源。
|
||||
有很多种方式能在线进行协作,简直不能更简便了。这篇文章展示了我最喜欢的开源的实时文档协作编辑工具。
|
||||
|
||||
下面是我带来的最棒的开源合作编辑器,它们能帮你不被打扰的集中精力进行写作,而且是和其他人协同完成。
|
||||
Google Docs 是个非常好的高效应用,有着大部分我所需要的功能。它可以作为一个实时地协作编辑文档的工具提供服务。文档可以被分享、打开并被多位用户同时编辑,用户还能看见其他协作者一个字母一个字母的编辑过程。虽然 Google Docs 对个人是免费的,但并不开源。
|
||||
|
||||
下面是我带来的最棒的开源协作编辑器,它们能帮你不被打扰的集中精力进行写作,而且是和其他人协同完成。
|
||||
|
||||
----------
|
||||
|
||||
@ -14,17 +15,17 @@ Google Docs 是个非常好的高效应用,有着大部分我所需要的功
|
||||
|
||||
![Hackpad in action](http://www.linuxlinks.com/portal/content/reviews/Editors/Screenshot-Hackpad.png)
|
||||
|
||||
Hackpad 是个开源的基于网页的实时 wiki,基于开源 EtherPad 合作文档编辑器。
|
||||
Hackpad 是个开源的基于网页的实时 wiki,基于开源 EtherPad 协作文档编辑器。
|
||||
|
||||
Hackpad 允许用户实时分享你的文档,它还用彩色编码显示各个作者分别贡献了哪部分。它还允许插入图片、清单,由于提供了语法高亮功能,它还能用来写代码。
|
||||
|
||||
当2014年4月 Dropbox 获得了 Hackpad 后,这款软件就以开源的形式在本月发行。让我们经历的等待非常值得。
|
||||
当2014年4月 Dropbox 收购了 Hackpad 后,就在这个月这款软件以开源的形式发布。让我们经历的等待非常值得。
|
||||
|
||||
特性:
|
||||
|
||||
- 有类似 wiki 所提供的,一套非常完善的功能
|
||||
- 实时或者异步地记合作笔记,共享数据和文件,或用评论分享你们的想法
|
||||
- 细致的隐私许可让你可以邀请单个朋友,一个十几人的团队或者上千的 Twitter 粉丝
|
||||
- 实时或者异步地记录协作笔记,共享数据和文件,或用评论分享你们的想法
|
||||
- 细致的隐私许可让你可以邀请单个朋友、一个十几人的团队或者上千的 Twitter 粉丝
|
||||
- 智能执行
|
||||
- 直接从流行的视频分享网站上插入视频
|
||||
- 表格
|
||||
@ -42,9 +43,9 @@ Hackpad 允许用户实时分享你的文档,它还用彩色编码显示各个
|
||||
|
||||
![Etherpad in action](http://www.linuxlinks.com/portal/content/reviews/Editors/Screenshot-Etherpad.png)
|
||||
|
||||
Etherpad 是个基于网页的开源实时合作编辑器,允许多个作者同时编辑一个文本文档,写评论,并与其他作者用群聊方式进行交流。
|
||||
Etherpad 是个基于网页的开源实时协作编辑器,允许多个作者同时编辑一个文本文档,写评论,并与其他作者用群聊方式进行交流。
|
||||
|
||||
Etherpad 是用 JavaScript 运行的,在 AppJet 平台的顶端,通过 Comet 流实现实时的功能。
|
||||
Etherpad 是用 JavaScript 编写的,运行在 AppJet 平台之上,通过 Comet 流实现实时的功能。
|
||||
|
||||
特性:
|
||||
|
||||
@ -55,9 +56,9 @@ Etherpad 是用 JavaScript 运行的,在 AppJet 平台的顶端,通过 Comet
|
||||
- 每隔一段很短的时间就会自动保存
|
||||
- 可个性化程度高
|
||||
- 有客户端插件可以扩展编辑的功能
|
||||
- 几百个支持 Etherpad 的扩展包括支持 email 提醒,pad 管理,授权
|
||||
- 几百个支持 Etherpad 的扩展,包括支持 email 提醒,pad 管理,授权
|
||||
- 可访问性开启
|
||||
- 可从 Node 里或通过 CLI(命令行界面)和 Pad 目录实时交互
|
||||
- 可从 Node 里或通过 CLI(命令行界面)和 EtherPad 的内容交互
|
||||
|
||||
- 网站: [etherpad.org][4]
|
||||
- 源代码:[github.com/ether/etherpad-lite][5]
|
||||
@ -71,7 +72,7 @@ Etherpad 是用 JavaScript 运行的,在 AppJet 平台的顶端,通过 Comet
|
||||
|
||||
![Firepad in action](http://www.linuxlinks.com/portal/content/reviews/Editors/Screenshot-Firepad.png)
|
||||
|
||||
Firepad 是个开源的合作文本编辑器。它的设计目的是被嵌入到更大的网页应用中对几天内新加入的代码进行批注。
|
||||
Firepad 是个开源的协作文本编辑器。它的设计目的是被嵌入到更大的网页应用中对几天内新加入的代码进行批注。
|
||||
|
||||
Firepad 是个全功能的文本编辑器,有解决冲突,光标同步,用户属性,用户在线状态检测功能。它使用 Firebase 作为后台,而且不需要任何服务器端的代码。他可以被加入到任何网页应用中。Firepad 可以使用 CodeMirror 编辑器或者 Ace 编辑器提交文本,它的操作转换代码是从 ot.js 上借鉴的。
|
||||
|
||||
@ -81,7 +82,7 @@ Firepad 已被多个编辑器使用,包括Atlassian Stash Realtime Editor、Ni
|
||||
|
||||
特性:
|
||||
|
||||
- 纯正的合作编辑
|
||||
- 纯正的协作编辑
|
||||
- 基于 OT 的智能合并及解决冲突
|
||||
- 支持多种格式的文本和代码的编辑
|
||||
- 光标位置同步
|
||||
@ -106,13 +107,13 @@ Firepad 已被多个编辑器使用,包括Atlassian Stash Realtime Editor、Ni
|
||||
|
||||
![ownCloud Documents in action](http://www.linuxlinks.com/portal/content/reviews/Editors/Screenshot-ownCloud.png)
|
||||
|
||||
ownCloud Documents 是个可以单独并/或合作进行办公室文档编辑 ownCloud 应用。它允许最多5个人同时在网页浏览器上合作进行编辑 .odt 和 .doc 文件。
|
||||
ownCloud Documents 是个可以单独并/或协作进行办公室文档编辑 ownCloud 应用。它允许最多5个人同时在网页浏览器上协作进行编辑 .odt 和 .doc 文件。
|
||||
|
||||
ownCloud 是个自托管文件同步和分享服务器。他通过网页界面,同步客户端或 WebDAV 提供你数据的使用权,同时提供一个容易在设备间进行浏览、同步和分享的平台。
|
||||
|
||||
特性:
|
||||
|
||||
- 合作编辑,多个用户同时进行文件编辑
|
||||
- 协作编辑,多个用户同时进行文件编辑
|
||||
- 在 ownCloud 里创建文档
|
||||
- 上传文档
|
||||
- 在浏览器里分享和编辑文件,然后在 ownCloud 内部或通过公共链接进行分享这些文件
|
||||
@ -131,16 +132,16 @@ ownCloud 是个自托管文件同步和分享服务器。他通过网页界面
|
||||
|
||||
![Gobby in action](http://www.linuxlinks.com/portal/content/reviews/Editors/Screenshot-Gobby.png)
|
||||
|
||||
Gobby 是个支持在一个会话内进行多个用户聊天并打开多个文档的合作编辑器。所有的用户都能同时在文件上进行工作,无需锁定。不同用户编写的部分用不同颜色高亮显示,它还支持多个编程和标记语言的语法高亮。
|
||||
Gobby 是个支持在一个会话内进行多个用户聊天并打开多个文档的协作编辑器。所有的用户都能同时在文件上进行工作,无需锁定。不同用户编写的部分用不同颜色高亮显示,它还支持多个编程和标记语言的语法高亮。
|
||||
|
||||
Gobby 允许多个用户在互联网上实时共同编辑同一个文档。他很好的整合了 GNOME 环境。它拥有一个客户端-服务端结构,这让它能支持一个会话开多个文档,文档同步请求,密码保护和 IRC 式的聊天方式可以在多个频道进行交流。用户可以选择一个颜色对他们在文档中编写的文本进行高亮。
|
||||
Gobby 允许多个用户在互联网上实时共同编辑同一个文档。它很好的整合了 GNOME 环境。它拥有一个客户端-服务端结构,这让它能支持一个会话开多个文档,文档同步请求,密码保护和 IRC 式的聊天方式可以在多个频道进行交流。用户可以选择一个颜色对他们在文档中编写的文本进行高亮。
|
||||
|
||||
还供有一个叫做 infinoted 的专用服务器。
|
||||
|
||||
特性:
|
||||
|
||||
- 成熟的文本编辑能力包括使用 GtkSourceView 的语法高亮功能
|
||||
- 实时、无需锁定、通过加密(包括PFS)连接的合作文本编辑
|
||||
- 实时、无需锁定、通过加密(包括PFS)连接的协作文本编辑
|
||||
- 整合了群聊
|
||||
- 本地组撤销:撤销不会影响远程用户的修改
|
||||
- 显示远程用户的光标和选择区域
|
||||
@ -170,9 +171,9 @@ Gobby 允许多个用户在互联网上实时共同编辑同一个文档。他
|
||||
|
||||
ONLYOFFICE(从前叫 Teamlab Office)是个多功能云端在线办公套件,整合了 CRM(客户关系管理)系统、文档和项目管理工具箱、甘特图以及邮件整合器
|
||||
|
||||
它能让你整理商业任务和时间表,保存并分享你的合作或个人文档,使用网络社交工具如博客和论坛,还可以和你的队员通过团队的即时聊天工具进行交流。
|
||||
它能让你整理商业任务和时间表,保存并分享你的协作或个人文档,使用网络社交工具如博客和论坛,还可以和你的队员通过团队的即时聊天工具进行交流。
|
||||
|
||||
能在同一个地方管理文档、项目、团队和顾客关系。OnlyOffice 结合了文本,电子表格和电子幻灯片编辑器,他们的功能跟微软桌面应用(Word、Excel 和 PowerPoint)的功能相同。但是他允许实时进行合作编辑、评论和聊天。
|
||||
能在同一个地方管理文档、项目、团队和顾客关系。OnlyOffice 结合了文本,电子表格和电子幻灯片编辑器,他们的功能跟微软桌面应用(Word、Excel 和 PowerPoint)的功能相同。但是他允许实时进行协作编辑、评论和聊天。
|
||||
|
||||
OnlyOffice 是用 ASP.NET 编写的,基于 HTML5 Canvas 元素,并且被翻译成21种语言。
|
||||
|
||||
@ -182,7 +183,7 @@ OnlyOffice 是用 ASP.NET 编写的,基于 HTML5 Canvas 元素,并且被翻
|
||||
- 文档可以在浏览/编辑模式下分享
|
||||
- 文档嵌入
|
||||
- 电子表格和电子幻灯片编辑器
|
||||
- 合作编辑
|
||||
- 协作编辑
|
||||
- 评论
|
||||
- 群聊
|
||||
- 移动应用
|
||||
@ -209,7 +210,7 @@ via: http://www.linuxlinks.com/article/20150823085112605/CollaborativeEditing.ht
|
||||
|
||||
作者:Frazer Kline
|
||||
译者:[H-mudcup](https://github.com/H-mudcup)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,198 @@
|
||||
如何在 Linux 系统上安装 Suricata 入侵检测系统
|
||||
================================================================================
|
||||
|
||||
随着安全威胁的不断发生,入侵检测系统(IDS)在如今的数据中心环境中显得尤为必要。然而,随着越来越多的服务器将他们的网卡升级到10GB/40GB以太网,对如此线路上的硬件进行计算密集型的入侵检测越来越困难。其中一种提升入侵检测系统性能的途径是**多线程入侵检测系统**,它将 CPU 密集型的深度包检测工作并行的分配给多个并发任务来完成。这样的并行检测可以充分利用多核硬件的优势来轻松提升入侵检测系统的吞吐量。在这方面有两个知名的开源项目,分别是 [Suricata][1] 和 [Bro][2]。
|
||||
|
||||
这个教程里,我会向大家演示**如何在 Linux 服务器上安装和配置 Suricata 入侵检测系统**
|
||||
|
||||
### 在 Linux 上安装 Suricata IDS ###
|
||||
|
||||
让我们从源文件来构建 Suricata,但在此之前,需要按如下所示先安装几个依赖包。
|
||||
|
||||
#### 在 Debian, Ubuntu 或者 Linux Mint 操作系统上安装依赖包 ####
|
||||
|
||||
$ sudo apt-get install wget build-essential libpcre3-dev libpcre3-dbg automake autoconf libtool libpcap-dev libnet1-dev libyaml-dev zlib1g-dev libcap-ng-dev libjansson-dev
|
||||
|
||||
#### 在 CentOS, Fedora 或者 RHEL 操作系统上安装依赖包 ####
|
||||
|
||||
$ sudo yum install wget libpcap-devel libnet-devel pcre-devel gcc-c++ automake autoconf libtool make libyaml-devel zlib-devel file-devel jansson-devel nss-devel
|
||||
|
||||
一旦将所有依赖包安装完毕,我们就可以继续安装 Suricata 了。
|
||||
|
||||
首先从 [http://suricata-ids.org/download/][3] 下载 Suricata 源代码,然后构建它。撰写这篇文章的时候,其最新版本号为 2.0.8 。
|
||||
|
||||
$ wget http://www.openinfosecfoundation.org/download/suricata-2.0.8.tar.gz
|
||||
$ tar -xvf suricata-2.0.8.tar.gz
|
||||
$ cd suricata-2.0.8
|
||||
$ ./configure --sysconfdir=/etc --localstatedir=/var
|
||||
|
||||
以下是配置信息的样例。
|
||||
|
||||
Suricata Configuration:
|
||||
AF_PACKET support: yes
|
||||
PF_RING support: no
|
||||
NFQueue support: no
|
||||
NFLOG support: no
|
||||
IPFW support: no
|
||||
DAG enabled: no
|
||||
Napatech enabled: no
|
||||
Unix socket enabled: yes
|
||||
Detection enabled: yes
|
||||
|
||||
libnss support: yes
|
||||
libnspr support: yes
|
||||
libjansson support: yes
|
||||
Prelude support: no
|
||||
PCRE jit: yes
|
||||
LUA support: no
|
||||
libluajit: no
|
||||
libgeoip: no
|
||||
Non-bundled htp: no
|
||||
Old barnyard2 support: no
|
||||
CUDA enabled: no
|
||||
|
||||
现在可以编译、安装了。
|
||||
|
||||
$ make
|
||||
$ sudo make install
|
||||
|
||||
Suricata 源代码带有默认的配置文件。按照如下方法安装这些默认配置文件即可。
|
||||
|
||||
$ sudo make install-conf
|
||||
|
||||
正如你所料,如果没有IDS规则集的话,Suricata 什么用也没有。幸好 Makefile 为我们提供了 IDS 规则集的安装选项。安装方法如下。
|
||||
|
||||
$ sudo make install-rules
|
||||
|
||||
以上的规则安装命令会从 [EmergingThreats.net][4] 上下载可用的社区规则集快照,并且将其存储在 /etc/suricata/rules 目录下。
|
||||
|
||||
![](https://farm1.staticflickr.com/691/20482669553_8b67632277_c.jpg)
|
||||
|
||||
### 首次配置 Suricata IDS ###
|
||||
|
||||
现在到了配置 Suricata 的时候了。配置文件的位置是 **/etc/suricata/suricata.yaml**。参照以下命令,用文本编辑器打开这个文件。
|
||||
|
||||
$ sudo vi /etc/suricata/suricata.yaml
|
||||
|
||||
文件中有一些运行所需的基本配置。
|
||||
|
||||
为`default-log-dir`关键字指定 Suricata 日志文件所在的位置。
|
||||
|
||||
default-log-dir: /var/log/suricata/
|
||||
|
||||
在`vars`部分下方,你会发现几项对 Suricata 来说很重要变量。`HOME_NET`变量需要指定 Suricata 检查的网络。被分配给 `EXTERNAL_NET` 变量的 `!$HOME_NET` 代表除本地网络之外的其他网络。`XXX_PORTS`变量用来辨别不同服务所用到的端口号。需要注意的是无论使用什么端口,Suricata 都可以自动检测 HTTP 流量。所以是不是正确指定端口就显得没那么重要了。
|
||||
|
||||
vars:
|
||||
HOME_NET: "[192.168.122.0/24]"
|
||||
EXTERNAL_NET: "!$HOME_NET"
|
||||
HTTP_PORTS: "80"
|
||||
SHELLCODE_PORTS: "!80"
|
||||
SSH_PORTS: 22
|
||||
|
||||
`host-os-policy` 部分用于防御利用操作系统网络栈的自身行为来逃避检测的一些知名攻击手段(例如:TCP reassembly)。作为对策,通过针对目标操作系统而对检测引擎算法进行微调,现代 IDC 提供了“基于目标”的检测手段。因此,如果你知道某台主机运行了什么操作系统的话,将这个信息提供给 Suricata 就可以大幅提高检测的成功率。这就是 `host-os-policy` 存在的意义。本例中,默认的 IDC 策略是 Linux 系统。如果针对某个 IP 地址没有指定操作系统信息,Suricata 会默认应用基于 Linux 系统的检测策略。如下,当捕获到对 192.168.122.0/28 和 192.168.122.155通讯时,Suricata 就会应用基于 Windows 系统的检测策略。
|
||||
|
||||
host-os-policy:
|
||||
# These are Windows machines.
|
||||
windows: [192.168.122.0/28, 192.168.122.155]
|
||||
bsd: []
|
||||
bsd-right: []
|
||||
old-linux: []
|
||||
# Make the default policy Linux.
|
||||
linux: [0.0.0.0/0]
|
||||
old-solaris: []
|
||||
solaris: ["::1"]
|
||||
hpux10: []
|
||||
hpux11: []
|
||||
irix: []
|
||||
macos: []
|
||||
vista: []
|
||||
windows2k3: []
|
||||
|
||||
在 `threading` 部分下,你可以为不同的 Suricata 线程指定 CPU 关联。默认状态下,[CPU 关联][5] 是被禁止使用的 (`set-cpu-affinity: no`),这意味着 Suricata 会分配其线程到所有可用的 CPU 核心上。Suricata 会默认为每一个 CPU 核心创建一个检测线程。你可以通过指定 `detect-thread-ratio: N` 来调整此行为。此处会创建 N*M 个检测线程,M 代表 CPU 核心总数。
|
||||
|
||||
threading:
|
||||
set-cpu-affinity: no
|
||||
detect-thread-ratio: 1.5
|
||||
|
||||
通过以上对线程的设置,Suricata 会创建 1.5*M 个检测线程,M 是系统的 CPU 核心总数。
|
||||
|
||||
如果你想对 Suricata 配置有更多的了解,可以去翻阅默认配置文件。里边配有有大量的注释以供你清晰理解。
|
||||
|
||||
### 使用 Suricata 进行入侵监控 ###
|
||||
|
||||
现在是时候让 Suricata 跑起来了,但在这之前还有一个步骤需要去完成。
|
||||
|
||||
当你使用 pcap 捕获模式的时候,强烈建议关闭 Suricata 监听网卡上的任何的包卸载(例如 LRO/GRO)功能。这些功能会干扰包的实时捕获行为。
|
||||
|
||||
按照以下方法关闭 eth0 接口的 LRO/GRO 功能。
|
||||
|
||||
$ sudo ethtool -K eth0 gro off lro off
|
||||
|
||||
这里要注意,在使用某些网卡的情况下,你会看到如下警告信息。忽略它们就行了,这些信息只不过告诉你你的网卡不支持 LRO 功能而已。
|
||||
|
||||
Cannot change large-receive-offload
|
||||
|
||||
Suricata 支持许多运行模式。运行模式决定着 IDC 会使用何种线程。以下命令可以查看所有 [可用的运行模式][6]。
|
||||
|
||||
$ sudo /usr/local/bin/suricata --list-runmodes
|
||||
|
||||
![](https://farm6.staticflickr.com/5730/20481140934_25080d04d7_c.jpg)
|
||||
|
||||
Suricata 使用的默认运行模式是 autofp("auto flow pinned load balancing"==“自动流绑定负载均衡” 的缩写)。这个模式下,来自某一个流的包会被分配到一个单独的检测线程中。这些流会根据未被处理的包的最低数量来分配相应的线程。
|
||||
|
||||
最后,让我们将 Suricata 运行起来,看看它表现如何。
|
||||
|
||||
$ sudo /usr/local/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 --init-errors-fatal
|
||||
|
||||
![](https://farm1.staticflickr.com/701/21077552366_c577746e36_c.jpg)
|
||||
|
||||
本例中,我们在一个8核心系统中监控 eth0 网络接口。如上所示,Suricata 创建了13个包处理线程和3个管理线程。包处理线程中包括一个 PCAP 包捕获线程,12个检测线程(由8*1.5得出)。这表示 IDS 内的1个包捕获线程均衡负载到12个检测线程中。管理线程包括1个流管理和2个计数/统计相关线程。
|
||||
|
||||
以下是一个关于Suricata处理的线程截图(由 [htop][7] 绘制)。
|
||||
|
||||
![](https://farm6.staticflickr.com/5775/20482669593_174f8f41cb_c.jpg)
|
||||
|
||||
Suricata 检测日志存储在 /var/log/suricata 目录下。
|
||||
|
||||
$ tail -f /var/log/suricata/fast.log
|
||||
|
||||
----------
|
||||
|
||||
04/01/2015-15:47:12.559075 [**] [1:2200074:1] SURICATA TCPv4 invalid checksum [**] [Classification: (null)] [Priority: 3] {TCP} 172.16.253.158:22 -> 172.16.253.1:46997
|
||||
04/01/2015-15:49:06.565901 [**] [1:2200074:1] SURICATA TCPv4 invalid checksum [**] [Classification: (null)] [Priority: 3] {TCP} 172.16.253.158:22 -> 172.16.253.1:46317
|
||||
04/01/2015-15:49:06.566759 [**] [1:2200074:1] SURICATA TCPv4 invalid checksum [**] [Classification: (null)] [Priority: 3] {TCP} 172.16.253.158:22 -> 172.16.253.1:46317
|
||||
|
||||
日志也可以提供 Json 格式以便导入:
|
||||
|
||||
$ tail -f /var/log/suricata/eve.json
|
||||
|
||||
----------
|
||||
{"timestamp":"2015-04-01T15:49:06.565901","event_type":"alert","src_ip":"172.16.253.158","src_port":22,"dest_ip":"172.16.253.1","dest_port":46317,"proto":"TCP","alert":{"action":"allowed","gid":1,"signature_id":2200074,"rev":1,"signature":"SURICATA TCPv4 invalid checksum","category":"","severity":3}}
|
||||
{"timestamp":"2015-04-01T15:49:06.566759","event_type":"alert","src_ip":"172.16.253.158","src_port":22,"dest_ip":"172.16.253.1","dest_port":46317,"proto":"TCP","alert":{"action":"allowed","gid":1,"signature_id":2200074,"rev":1,"signature":"SURICATA TCPv4 invalid checksum","category":"","severity":3}}
|
||||
|
||||
### 总结 ###
|
||||
|
||||
这篇教程中,我为大家演示了如何在一台多核 Linux 服务器上安装 Suricata 入侵检测系统。不同于单线程的 [Snort IDS][8] ,Suricata 可以很容易的从多核硬件的多进程特性所带来的好处中获益。定制 Suricata 来最大化其效能和检测范围是一个很好的主意。Suricata 的粉丝们维护着一个 [在线 Wiki][9],如果你打算将 Suricata 部署到你的环境中,我强烈建议你去那儿取取经。
|
||||
|
||||
如果你现在已经开始使用 Suricata 了的话,把你的经验也分享出来吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://xmodulo.com/install-suricata-intrusion-detection-system-linux.html
|
||||
|
||||
作者:[Dan Nanni][a]
|
||||
译者:[mr-ping](https://github.com/mr-ping)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://xmodulo.com/author/nanni
|
||||
[1]:http://suricata-ids.org/
|
||||
[2]:https://www.bro.org/
|
||||
[3]:http://suricata-ids.org/download/
|
||||
[4]:http://rules.emergingthreats.net/
|
||||
[5]:http://xmodulo.com/run-program-process-specific-cpu-cores-linux.html
|
||||
[6]:https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Runmodes
|
||||
[7]:http://ask.xmodulo.com/view-threads-process-linux.html
|
||||
[8]:http://xmodulo.com/how-to-compile-and-install-snort-from-source-code-on-ubuntu.html
|
||||
[9]:https://redmine.openinfosecfoundation.org/projects/suricata/wiki
|
@ -0,0 +1,241 @@
|
||||
理查德·斯托曼经典语录集锦
|
||||
================================================================================
|
||||
注:youtube 视频
|
||||
<iframe width="660" height="495" src="https://www.youtube.com/embed/aIL594DTzH4?feature=oembed" frameborder="0" allowfullscreen></iframe>
|
||||
|
||||
**理查德·马修·斯托曼(Richard Matthew Stallman)** (RMS) – 神级程序员之一。他是一名程序员,是 GCC、GDB、Emacs 的构建者,软件自由的传教士,[GNU Project][1] 和 [FSF][2] 的创办人。
|
||||
|
||||
**GNU** 是 “GNU’s Not Unix!”的递归缩写。GNU 是一系列用于基于 Unix 的操作系统的自由软件集合。它能用于 GNU/Hurd 和 Linux 内核。于1983年9月27日公诸于众。常用组件有:
|
||||
|
||||
- GNU Compiler Collection (GCC)
|
||||
- GNU C library (glibc)
|
||||
- GNU Core Utilities (coreutils)
|
||||
- GNU Debugger (GDB)
|
||||
- GNU Binary Utilities (binutils)
|
||||
- GNU Bash shell
|
||||
- GNOME desktop environment
|
||||
|
||||
注:视频
|
||||
<video src="//static.fsf.org/nosvn/FSF30-video/FSF_30_720p.webm" controls="controls" width="640" height="390"></video>
|
||||
|
||||
**自由软件基金会(Free Software Foundation)** (FSF) – 一个自由软件的非营利组织,致力于推进计算机用户的自由和捍卫他们的权力。于 1985年10月4日成立。阅读[更多][3]。
|
||||
|
||||
许多人不理解开源代码(open source code)和自由软件(free software)的区别。每个程序都应该是自由软件:
|
||||
|
||||
- 与目的无关,随心运行程序的自由(自由0)。
|
||||
- 学习程序如何运作,并改变它为你所用的自由(自由1)。可以访问源码是这一条的前提。
|
||||
- 重新发布副本的自由,如此你便可以帮助你周围的人(自由 2)。
|
||||
- 发布自己修改版本给他人的自由(自由 3)。这样能让整个社区有机会从你的改变中受益。可以访问源码是这条的前提。
|
||||
|
||||
以上为自由软件的四项自由原则。
|
||||
|
||||
以下为理查德·斯托曼关于自由、软件、社交、哲学等方面的名言摘引。
|
||||
|
||||
**关于 Facebook:**
|
||||
|
||||
> Facebook is not your friend, it is a surveillance engine.
|
||||
|
||||
Facebook 不是你的朋友,是监控引擎。
|
||||
|
||||
**关于 Android:**
|
||||
|
||||
> Android is very different from the GNU/Linux operating system because it contains very little of GNU. Indeed, just about the only component in common between Android and GNU/Linux is Linux, the kernel.
|
||||
|
||||
Android 和 GNU/Linux 有很大的区别,因为其中几乎没有 GNU。的确,Android 和 GNU/Linux 之间仅有一个共同组件,那就是内核 - Linux。
|
||||
|
||||
**关于计算机行业:**
|
||||
|
||||
> The computer industry is the only industry that is more fashion-driven than women's fashion.
|
||||
|
||||
计算机行业是唯一一个比女性时尚业更容易受潮流影响的行业了。
|
||||
|
||||
**关于云计算:**
|
||||
|
||||
> The interesting thing about cloud computing is that we've redefined cloud computing to include everything that we already do.
|
||||
|
||||
关于云计算,有趣的是我们已经重新定义了云计算来包含我们曾干过的所有事。
|
||||
|
||||
**关于伦理:**
|
||||
|
||||
> Whether gods exist or not, there is no way to get absolute certainty about ethics. Without absolute certainty, what do we do? We do the best we can.
|
||||
|
||||
无论神存在与否,都没有绝对的伦理道德。没有这份理所当然,我们该如何?也唯有尽善吧。
|
||||
|
||||
**关于自由:**
|
||||
|
||||
> Free software is software that respects your freedom and the social solidarity of your community. So it's free as in freedom.
|
||||
|
||||
自由软件是尊重个人自由和社会团结的软件。所以才能如自由般自由自在。
|
||||
|
||||
**关于目标和理想:**
|
||||
|
||||
> If you want to accomplish something in the world, idealism is not enough - you need to choose a method that works to achieve the goal.
|
||||
|
||||
如果你想为这世界做些什么,仅有理想是不够的,你需要找条通往目标的道路并走完。
|
||||
|
||||
**关于分享:**
|
||||
|
||||
> Sharing is good, and with digital technology, sharing is easy.
|
||||
|
||||
分享很棒,而且数字化技术也使分享变得容易。
|
||||
|
||||
**关于 facebook(进阶版):**
|
||||
|
||||
> Facebook mistreats its users. Facebook is not your friend; it is a surveillance engine. For instance, if you browse the Web and you see a 'like' button in some page or some other site that has been displayed from Facebook. Therefore, Facebook knows that your machine visited that page.
|
||||
|
||||
Facebook 蹂躏它们的用户。它不是你们的朋友;它就是个监控引擎。举个例子,你是否曾在一些网页或网站上看到 Facebook 的 “like” 按键。对,Facebook 知道你的电脑曾访问过那些网页。
|
||||
|
||||
**关于 web 应用:**
|
||||
|
||||
> One reason you should not use web applications to do your computing is that you lose control.
|
||||
|
||||
给你个为什么不应该使用 web 应用的理由,因为你失去了计算机的控制权。
|
||||
|
||||
> If you use a proprietary program or somebody else's web server, you're defenceless. You're putty in the hands of whoever developed that software.
|
||||
|
||||
如果你使用私有程序或他人的 web 服务器,那么你只能任人鱼肉。被软件的开发者轻易操纵。
|
||||
|
||||
**关于书:**
|
||||
|
||||
> With paper printed books, you have certain freedoms. You can acquire the book anonymously by paying cash, which is the way I always buy books. I never use a credit card. I don't identify to any database when I buy books. Amazon takes away that freedom.
|
||||
|
||||
印刷出来的书,当然是自由的。你可以付现金匿名买书,这也是我一直买书的方式。我绝不会使用信用卡,我买书时不会被任何数据库记下。是亚马逊把自由夺走了。
|
||||
|
||||
**关于 MPAA:**
|
||||
|
||||
> Officially, MPAA stands for Motion Picture Association of America, but I suggest that MPAA stands for Malicious Power Attacking All.
|
||||
|
||||
MPAA 其实是美国电影协会(Motion Picture Association of America),但我认为叫做攻击万物的邪恶力量(Malicious Power Attacking All)更为合适。
|
||||
|
||||
**关于金钱与职业:**
|
||||
|
||||
> I could have made money this way, and perhaps amused myself writing code. But I knew that at the end of my career, I would look back on years of building walls to divide people, and feel I had spent my life making the world a worse place.
|
||||
|
||||
我可以找份工作赚钱,并沉浸在编码的快乐中。但在职业生涯结束后,回首目睹自己筑就的高墙将人与人分隔开,我会觉得我耗尽毕生精力只换来了一个更糟糕的世界。
|
||||
|
||||
**关于私有软件:**
|
||||
|
||||
> Proprietary software keeps users divided and helpless. Divided because each user is forbidden to redistribute it to others, and helpless because the users can't change it since they don't have the source code. They can't study what it really does. So the proprietary program is a system of unjust power.
|
||||
|
||||
私有软件使用户孤立、无助。因为禁止将软件给他人使用所以孤立,因为无法改变源码所以无助。他们不能学习其中真正的工作方式,所以整个私有软件体系就是一种不公的力量。
|
||||
|
||||
**关于智能手机:**
|
||||
|
||||
> A smartphone is a computer - it's not built using a computer - the job it does is the job of being a computer. So, everything we say about computers, that the software you run should be free - you should insist on that - applies to smart phones just the same. And likewise to those tablets.
|
||||
|
||||
智能手机就是电脑 —— 虽然做的和常用的电脑不同 —— 但是却能干电脑能干的活。所以我们所说的一切有关于电脑上的软件应该能自由运行 —— 必须坚持这一点 —— 在智能手机上也是这样,当然也包括平板。
|
||||
|
||||
**关于 CD 和数字内容:**
|
||||
|
||||
> CD stores have the disadvantage of an expensive inventory, but digital bookshops would need no such thing: they could write copies at the time of sale on to memory sticks, and sell you one if you forgot your own.
|
||||
|
||||
CD 商店有一个弱势就是需要昂贵的库存,但是电子商店就没有这方面的需求:他们只需要将售卖的副本写入记忆棒,并在你忘带自己的记忆棒时卖你一个就是了。
|
||||
|
||||
**关于竞争范式(paradigm of competition):**
|
||||
|
||||
> The paradigm of competition is a race: by rewarding the winner, we encourage everyone to run faster. When capitalism really works this way, it does a good job; but its defenders are wrong in assuming it always works this way.
|
||||
|
||||
竞争范式就像是赛跑:奖励胜者,鼓励每一个跑得更快的人。当资本主义真的这样运作时,当然是件好事;但是维护它的人若是假设它一直这样运作的话那就大错特错了。
|
||||
|
||||
**关于 vi 和 emacs:**
|
||||
|
||||
> People sometimes ask me if it is a sin in the Church of Emacs to use vi. Using a free version of vi is not a sin; it is a penance. So happy hacking.
|
||||
|
||||
有时会有人问我在 Emacs 的阵营使用 vi 是不是一种罪过。使用自由版的 vi 并不是一种罪过;是一种自我惩罚。所以好好享受其中乐趣吧。
|
||||
|
||||
**关于自由和历史:**
|
||||
|
||||
> Value your freedom or you will lose it, teaches history. 'Don't bother us with politics', respond those who don't want to learn.
|
||||
|
||||
历史告诉我们不珍惜自由便失去自由,然而有的人不懂吸取教训,只知道说“别拿政治烦我们”。
|
||||
|
||||
**关于专利:**
|
||||
|
||||
> Fighting patents one by one will never eliminate the danger of software patents, any more than swatting mosquitoes will eliminate malaria.
|
||||
|
||||
和专利一个一个的战斗并不能解决软件专利带来的危害,就像打再多的蚊子也消灭不了疟疾一样。
|
||||
|
||||
> Software patents are dangerous to software developers because they impose monopolies on software ideas.
|
||||
|
||||
软件专利对于软件的开发者来说十分危险,因为它们加剧了对于软件理念的垄断。
|
||||
|
||||
**关于版权:**
|
||||
|
||||
> In practice, the copyright system does a bad job of supporting authors, aside from the most popular ones. Other authors' principal interest is to be better known, so sharing their work benefits them as well as readers.
|
||||
|
||||
其实,版权制度对作者也没有什么好处,撇开最受欢迎的那个,其他作者的主旨可能更好理解,所以分享无论对他们还是你的读者都是一件好事。
|
||||
|
||||
**关于工作与报酬:**
|
||||
|
||||
> There is nothing wrong with wanting pay for work, or seeking to maximize one's income, as long as one does not use means that are destructive.
|
||||
|
||||
劳有所得,或寻求收入的最大化并没有什么错,只要不是不择手段。
|
||||
|
||||
**关于 Chrome OS:**
|
||||
|
||||
> In essence, Chrome OS is the GNU/Linux operating system. However, it is delivered without the usual applications, and rigged up to impede and discourage installing applications.
|
||||
|
||||
Chrome OS 确实是 GNU/Linux 的操作系统。但是,它在发布时没有安装常用应用,并为安装他们设置了阻碍。
|
||||
|
||||
**关于 Linux 用户:**
|
||||
|
||||
> Many users of the GNU/Linux system will not have heard the ideas of free software. They will not be aware that we have ideas, that a system exists because of ethical ideals, which were omitted from ideas associated with the term 'open source.'
|
||||
|
||||
许多的 GNU/Linux 用户并没有听过自由软件。他们并没有意识到,这个系统是因为道德理想才存在的,与此一起被忽视的还有所谓的“开源”。
|
||||
|
||||
**关于 facebook 的隐私:**
|
||||
|
||||
> If there is a Like button in a page, Facebook knows who visited that page. And it can get IP address of the computer visiting the page even if the person is not a Facebook user.
|
||||
|
||||
如果页面上有 “like” 按键,Facebook 就能知道谁访问了页面。即使不是 Facebook 的用户,也可以得到访问该页面电脑的 IP 地址。
|
||||
|
||||
**关于编程:**
|
||||
|
||||
> Programming is not a science. Programming is a craft.
|
||||
|
||||
编程不是科学,编程是手艺。
|
||||
|
||||
> My favorite programming languages are Lisp and C. However, since around 1992 I have worked mainly on free software activism, which means I am too busy to do much programming. Around 2008 I stopped doing programming projects.
|
||||
|
||||
Lisp 和 C 语言是我的最爱。然自 1992 年以来我主要工作在自由软件活动上,导致我太忙了,没法做更多的编程。大概在 2008 年我便停止了做编程项目。
|
||||
|
||||
> C++ is a badly designed and ugly language. It would be a shame to use it in Emacs.
|
||||
|
||||
C++ 设计的真糟糕、真丑陋。在 Emacs 上用它应该觉得羞愧。
|
||||
|
||||
**关于钻研(hacking)和学习编程:**
|
||||
|
||||
> People could no longer learn hacking the way I did, by starting to work on a real operating system, making real improvements. In fact, in the 1980s I often came across newly graduated computer science majors who had never seen a real program in their lives. They had only seen toy exercises, school exercises, because every real program was a trade secret. They never had the experience of writing features for users to really use, and fixing the bugs that real users came across. The things you need to know to do real work.
|
||||
|
||||
(时过境迁,)人们没法再像我当初那样通过改进实实在在的操作系统来学习编程了。上世纪 80 年代,我常遇见计算机专业的毕业生,有生以来没见过真正的程序。他们接触的到的只有小玩意和学校的作业,因为每一个程序都是商业机密。他们没有机会为用户去写真正实用的特性,修复用户真正遭遇的问题。而这些正是真正的工作中你需要掌握的(东西)。
|
||||
|
||||
> It is hard to write a simple definition of something as varied as hacking, but I think what these activities have in common is playfulness, cleverness, and exploration. Thus, hacking means exploring the limits of what is possible, in a spirit of playful cleverness. Activities that display playful cleverness have "hack value".
|
||||
|
||||
对于如“hacking”这般多样化的东西真的很难简单的下定义,不过在我看来诸如此类的行为都会有以下的这些共同点:嬉乐、智慧和探索。因此,hacking 意味着对可能的极限的探索,一颗向往快乐与智慧的心。能带来快乐与智慧的行为就有 “hack 的价值” 。
|
||||
|
||||
**关于浏览网页:**
|
||||
|
||||
> For personal reasons, I do not browse the web from my computer. (I also have no net connection much of the time.) To look at page I send mail to a daemon which runs wget and mails the page back to me. It is very efficient use of my time, but it is slow in real time.
|
||||
|
||||
出于个人原因,我不会在我的电脑上浏览网页。(大部分时间处于没有网络连接的状态。)要浏览网页,我需要给一个守护进程发 mail,然后它会运行 wget 并把页面通过 mail 发还给我。这对我而言已经是最效率了,但那真的比实时慢太多了。
|
||||
|
||||
**关于音乐共享:**
|
||||
|
||||
> Friends share music with each other, they don't allow themselves to be divided by a system that says that nobody is supposed to have copies.
|
||||
|
||||
朋友之间彼此分享音乐,绝不会希望因为系统的一句:“禁止私下拷贝!”而生分。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://tlhp.cf/fsf-richard-stallman/
|
||||
|
||||
作者:[Pavlo Rudyi][a]
|
||||
译者:[martin2011qi](https://github.com/martin2011qi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://tlhp.cf/fsf-richard-stallman/
|
||||
[1]:http://www.gnu.org/
|
||||
[2]:http://www.fsf.org/
|
||||
[3]:https://www.fsf.org/about/
|
@ -1,61 +1,61 @@
|
||||
|
||||
为 Linux 系统管理员准备的80个监控工具
|
||||
最全列表: 80 多个 Linux 系统管理员必备的监控工具
|
||||
================================================================================
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/linux-monitoring.jpg)
|
||||
|
||||
随着行业的不断发展,有许多比你想象中更棒的工具。这里列着网上最全的(工具)。拥有超过80种方式来管理你的机器。在本文中,我们主要讲述以下方面:
|
||||
随着互联网行业的不断发展,各种监控工具多得不可胜数。这里列出网上最全的监控工具。让你可以拥有超过80种方式来管理你的机器。在本文中,我们主要包括以下方面:
|
||||
|
||||
- 命令行工具
|
||||
- 与网络相关的
|
||||
- 网络相关内容
|
||||
- 系统相关的监控工具
|
||||
- 日志监控工具
|
||||
- 基础设施监控工具
|
||||
|
||||
监控和调试性能问题非常困难,但用对了正确的工具有时也是很容易的。下面是一些你可能听说过的工具,当你使用它们时可能存在一些问题:
|
||||
监控和调试性能问题是一个艰巨的任务,但用对了正确的工具有时也是很容易的。下面是一些你可能听说过的工具,也有可能没有听说过——何不赶快开始试试?
|
||||
|
||||
### 十大系统监控工具 ###
|
||||
### 八大系统监控工具 ###
|
||||
|
||||
#### 1. Top ####
|
||||
#### 1. top ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/top.jpg)
|
||||
|
||||
这是一个被预安装在许多 UNIX 系统中的小工具。当你想要查看在系统中运行的进程或线程时:top 是一个很好的工具。你可以对这些进程以不同的标准进行排序,默认是以 CPU 进行排序的。
|
||||
这是一个被预装在许多 UNIX 系统中的小工具。当你想要查看在系统中运行的进程或线程时:top 是一个很好的工具。你可以对这些进程以不同的方式进行排序,默认是以 CPU 进行排序的。
|
||||
|
||||
#### 2. [htop][1] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/htop.jpg)
|
||||
|
||||
HTOP 实质上是 top 的增强版本。它更容易对进程排序。它在视觉上更容易理解并且已经内建了许多通用的命令。它也是完全交互的。
|
||||
htop 实质上是 top 的一个增强版本。它更容易对进程排序。它看起来上更容易理解,并且已经内建了许多通用操作。它也是完全交互式的。
|
||||
|
||||
#### 3. [atop][2] ####
|
||||
|
||||
Atop 和 top,htop 非常相似,它也能监控所有进程,但不同于 top 和 htop 的是,它会记录进程的日志供以后分析。它也能显示所有进程的资源消耗。它还会高亮显示已经达到临界负载的资源。
|
||||
atop 和 top,htop 非常相似,它也能监控所有进程,但不同于 top 和 htop 的是,它可以按日记录进程的日志供以后分析。它也能显示所有进程的资源消耗。它还会高亮显示已经达到临界负载的资源。
|
||||
|
||||
#### 4. [apachetop][3] ####
|
||||
|
||||
Apachetop 会监视 apache 网络服务器的整体性能。它主要是基于 mytop。它会显示当前 reads, writes 的数量以及 requests 进程的总数。
|
||||
apachetop 会监控 apache 网络服务器的整体性能。它主要是基于 mytop。它会显示当前的读取进程、写入进程的数量以及请求进程的总数。
|
||||
|
||||
#### 5. [ftptop][4] ####
|
||||
|
||||
ftptop 给你提供了当前所有连接到 ftp 服务器的基本信息,如会话总数,正在上传和下载的客户端数量以及客户端信息。
|
||||
ftptop 给你提供了当前所有连接到 ftp 服务器的基本信息,如会话总数,正在上传和下载的客户端数量以及客户端是谁。
|
||||
|
||||
#### 6. [mytop][5] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/mytop.jpg)
|
||||
|
||||
mytop 是一个很方便的工具,用于监控线程和 mysql 的性能。它给了你一个实时的数据库查询处理结果。
|
||||
mytop 是一个很简洁的工具,用于监控 mysql 的线程和性能。它能让你实时查看数据库以及正在处理哪些查询。
|
||||
|
||||
#### 7. [powertop][6] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/powertop.jpg)
|
||||
|
||||
powertop 可以帮助你诊断与电量消耗和电源管理相关的问题。它也可以帮你进行电源管理设置,以实现对你服务器最有效的配置。你可以使用 tab 键进行选项切换。
|
||||
powertop 可以帮助你诊断与电量消耗和电源管理相关的问题。它也可以帮你进行电源管理设置,以实现对你服务器最有效的配置。你可以使用 tab 键切换选项卡。
|
||||
|
||||
#### 8. [iotop][7] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/iotop.jpg)
|
||||
|
||||
iotop 用于检查 I/O 的使用情况,并为你提供了一个类似 top 的界面来显示。它每列显示读和写的速率,每行代表一个进程。当出现等待 I/O 交换时,它也显示进程消耗时间的百分比。
|
||||
iotop 用于检查 I/O 的使用情况,并为你提供了一个类似 top 的界面来显示。它按列显示读和写的速率,每行代表一个进程。当发生交换或 I/O 等待时,它会显示进程消耗时间的百分比。
|
||||
|
||||
### 与网络相关的监控 ###
|
||||
|
||||
@ -63,29 +63,29 @@ iotop 用于检查 I/O 的使用情况,并为你提供了一个类似 top 的
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/ntopng.jpg)
|
||||
|
||||
ntopng 是 ntop 的升级版,它提供了一个能使用浏览器进行网络监控的图形用户界面。它还有其他用途,如:定位主机,显示网络流量和 ip 流量分布并能进行分析。
|
||||
ntopng 是 ntop 的升级版,它提供了一个能通过浏览器进行网络监控的图形用户界面。它还有其他用途,如:地理定位主机,显示网络流量和 ip 流量分布并能进行分析。
|
||||
|
||||
#### 10. [iftop][9] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/iftop.jpg)
|
||||
|
||||
iftop 类似于 top,但它主要不是检查 cpu 的使用率而是监听网卡的流量,并以表格的形式显示当前的使用量。像“为什么我的网速这么慢呢?!”这样的问题它可以直接回答。
|
||||
iftop 类似于 top,但它主要不是检查 cpu 的使用率而是监听所选择网络接口的流量,并以表格的形式显示当前的使用量。像“为什么我的网速这么慢呢?!”这样的问题它可以直接回答。
|
||||
|
||||
#### 11. [jnettop][10] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/jnettop.jpg)
|
||||
|
||||
jnettop 以相同的方式来监测网络流量但比 iftop 更形象。它还支持自定义的文本输出并能以友好的交互方式来快速分析日志。
|
||||
jnettop 以相同的方式来监测网络流量但比 iftop 更形象。它还支持自定义的文本输出,并能以友好的交互方式来深度分析日志。
|
||||
|
||||
#### 12. [bandwidthd][11] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/bandwidthd.jpg)
|
||||
|
||||
bandwidthd 可以跟踪 TCP/IP 网络子网的使用情况并能在浏览器中通过 png 图片形象化的构建一个 HTML 页面。它有一个数据库驱动系统,支持搜索,过滤,多传感器和自定义报表。
|
||||
BandwidthD 可以跟踪 TCP/IP 网络子网的使用情况,并能在浏览器中通过 png 图片形象化地构建一个 HTML 页面。它有一个数据库系统,支持搜索、过滤,多传感器和自定义报表。
|
||||
|
||||
#### 13. [EtherApe][12] ####
|
||||
|
||||
EtherApe 以图形化显示网络流量,可以支持更多的节点。它可以捕获实时流量信息,也可以从 tcpdump 进行读取。也可以使用具有 pcap 语法的网络过滤显示特定信息。
|
||||
EtherApe 以图形化显示网络流量,可以支持更多的节点。它可以捕获实时流量信息,也可以从 tcpdump 进行读取。也可以使用 pcap 格式的网络过滤器来显示特定信息。
|
||||
|
||||
#### 14. [ethtool][13] ####
|
||||
|
||||
@ -97,19 +97,19 @@ ethtool 用于显示和修改网络接口控制器的一些参数。它也可以
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/nethogs.jpg)
|
||||
|
||||
NetHogs 打破了网络流量按协议或子网进行统计的原理。它以进程组来计算。所以,当网络流量猛增时,你可以使用 NetHogs 查看是由哪个进程造成的。
|
||||
NetHogs 打破了网络流量按协议或子网进行统计的惯例,它以进程来分组。所以,当网络流量猛增时,你可以使用 NetHogs 查看是由哪个进程造成的。
|
||||
|
||||
#### 16. [iptraf][15] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/iptraf.jpg)
|
||||
|
||||
iptraf 收集的各种指标,如 TCP 连接数据包和字节数,接口界面和活动指标,TCP/UDP 通信故障,站内数据包和字节数。
|
||||
iptraf 收集的各种指标,如 TCP 连接数据包和字节数,端口统计和活动指标,TCP/UDP 通信故障,站内数据包和字节数。
|
||||
|
||||
#### 17. [ngrep][16] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/ngrep.jpg)
|
||||
|
||||
ngrep 就是 grep 但是相对于网络层的。pcap 意识到后允许其指定扩展规则或十六进制表达式来匹配数据包。
|
||||
ngrep 就是网络层的 grep。它使用 pcap ,允许通过指定扩展正则表达式或十六进制表达式来匹配数据包。
|
||||
|
||||
#### 18. [MRTG][17] ####
|
||||
|
||||
@ -121,29 +121,29 @@ MRTG 最初被开发来监控路由器的流量,但现在它也能够监控网
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/bmon.jpg)
|
||||
|
||||
Bmon 能监控并帮助你调试网络。它能捕获网络相关的统计数据,并以友好的方式进行展示。你还可以与 bmon 通过脚本进行交互。
|
||||
bmon 能监控并帮助你调试网络。它能捕获网络相关的统计数据,并以友好的方式进行展示。你还可以与 bmon 通过脚本进行交互。
|
||||
|
||||
#### 20. traceroute ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/traceroute.jpg)
|
||||
|
||||
Traceroute 一个内置工具,能测试路由和数据包在网络中的延迟。
|
||||
traceroute 是一个内置工具,能显示路由和测量数据包在网络中的延迟。
|
||||
|
||||
#### 21. [IPTState][19] ####
|
||||
|
||||
IPTState 可以让你跨越 iptables 来监控流量,并通过你指定的条件来进行排序。该工具还允许你从表中删除状态信息。
|
||||
IPTState 可以让你观察流量是如何通过 iptables,并通过你指定的条件来进行排序。该工具还允许你从 iptables 的表中删除状态信息。
|
||||
|
||||
#### 22. [darkstat][20] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/darkstat.jpg)
|
||||
|
||||
Darkstat 能捕获网络流量并计算统计的数据。该报告需要在浏览器中进行查看,它为你提供了一个非常棒的图形用户界面。
|
||||
darkstat 能捕获网络流量并计算使用情况的统计数据。该报告保存在一个简单的 HTTP 服务器中,它为你提供了一个非常棒的图形用户界面。
|
||||
|
||||
#### 23. [vnStat][21] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/vnstat.jpg)
|
||||
|
||||
vnStat 是一个网络流量监控工具,它的数据统计是由内核进行提供的,其消耗的系统资源非常少。系统重新启动后,它收集的数据仍然存在。它具有颜色选项供系统管理员使用。
|
||||
vnStat 是一个网络流量监控工具,它的数据统计是由内核进行提供的,其消耗的系统资源非常少。系统重新启动后,它收集的数据仍然存在。有艺术感的系统管理员可以使用它的颜色选项。
|
||||
|
||||
#### 24. netstat ####
|
||||
|
||||
@ -153,25 +153,25 @@ netstat 是一个内置的工具,它能显示 TCP 网络连接,路由表和
|
||||
|
||||
#### 25. ss ####
|
||||
|
||||
并非 netstat,最好使用 ss。ss 命令能够显示的信息比 netstat 更多,也更快。如果你想查看统计结果的总信息,你可以使用命令 `ss -s`。
|
||||
比起 netstat,使用 ss 更好。ss 命令能够显示的信息比 netstat 更多,也更快。如果你想查看统计结果的总信息,你可以使用命令 `ss -s`。
|
||||
|
||||
#### 26. [nmap][22] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/nmap.jpg)
|
||||
|
||||
Nmap 可以扫描你服务器开放的端口并且可以检测正在使用哪个操作系统。但你也可以使用 SQL 注入漏洞,网络发现和渗透测试相关的其他手段。
|
||||
Nmap 可以扫描你服务器开放的端口并且可以检测正在使用哪个操作系统。但你也可以将其用于 SQL 注入漏洞、网络发现和渗透测试相关的其他用途。
|
||||
|
||||
#### 27. [MTR][23] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/mtr.jpg)
|
||||
|
||||
MTR 结合了 traceroute 和 ping 的功能到一个网络诊断工具上。当使用该工具时,它会限制单个数据包的跳数,同时也监视它们的到期时间。然后每秒进行重复。
|
||||
MTR 将 traceroute 和 ping 的功能结合到了一个网络诊断工具上。当使用该工具时,它会限制单个数据包的跳数,然后监视它们的到期时到达的位置。然后每秒进行重复。
|
||||
|
||||
#### 28. [Tcpdump][24] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/tcpdump.jpg)
|
||||
|
||||
Tcpdump 将输出一个你在命令中匹配并捕获到的数据包的信息。你还可以将此数据保存并进一步分析。
|
||||
Tcpdump 将按照你在命令行中指定的表达式输出匹配捕获到的数据包的信息。你还可以将此数据保存并进一步分析。
|
||||
|
||||
#### 29. [Justniffer][25] ####
|
||||
|
||||
@ -185,13 +185,13 @@ Justniffer 是 tcp 数据包嗅探器。使用此嗅探器你可以选择收集
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/nmon.jpg)
|
||||
|
||||
nmon 将数据输出到屏幕上的,或将其保存在一个以逗号分隔的文件中。你可以查看 CPU,内存,网络,文件系统,top 进程。数据也可以被添加到 RRD 数据库中用于进一步分析。
|
||||
nmon 将数据输出到屏幕上的,或将其保存在一个以逗号分隔的文件中。你可以查看 CPU,内存,网络,文件系统,前列 进程。数据也可以被添加到 RRD 数据库中用于进一步分析。
|
||||
|
||||
#### 31. [conky][27] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/cpulimit.jpg)
|
||||
|
||||
Conky 能监视不同操作系统并统计数据。它支持 IMAP 和 POP3, 甚至许多流行的音乐播放器!出于方便不同的人,你可以使用自己的 Lua 脚本或程序来进行扩展。
|
||||
Conky 能监视很多的操作系统数据。它支持 IMAP 和 POP3, 甚至许多流行的音乐播放器!出于方便不同的人,你可以使用自己的 Lua 脚本或程序来进行扩展。
|
||||
|
||||
#### 32. [Glances][28] ####
|
||||
|
||||
@ -215,13 +215,13 @@ RRDtool 是用来处理 RRD 数据库的工具。RRDtool 旨在处理时间序
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/monit.jpg)
|
||||
|
||||
如果出现故障时,monit 有发送警报以及重新启动服务的功能。它可以对任何类型进行检查,你可以为 monit 写一个脚本,它有一个 Web 用户界面来分担你眼睛的压力。
|
||||
如果出现故障时,monit 有发送警报以及重新启动服务的功能。它可以对各种数据进行检查,你可以为 monit 写一个脚本,它有一个 Web 用户界面来分担你眼睛的压力。
|
||||
|
||||
#### 36. [Linux process explorer][32] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/linux-process-monitor.jpg)
|
||||
|
||||
Linux process explorer 是类似 OSX 或 Windows 的在线监视器。它比 top 或 ps 的使用范围更广。你可以查看每个进程的内存消耗以及 CPU 的使用情况。
|
||||
Linux process explorer 是类似 OSX 或 Windows 的活动监视器。它比 top 或 ps 的使用范围更广。你可以查看每个进程的内存消耗以及 CPU 的使用情况。
|
||||
|
||||
#### 37. df ####
|
||||
|
||||
@ -233,37 +233,37 @@ df 是 disk free 的缩写,它是所有 UNIX 系统预装的程序,用来显
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/discus.jpg)
|
||||
|
||||
Discus 类似于 df,它的目的是通过使用更吸引人的特性,如颜色,图形和数字来对 df 进行改进。
|
||||
discus 类似于 df,它的目的是通过使用更吸引人的特性,如颜色,图形和数字来对 df 进行改进。
|
||||
|
||||
#### 39. [xosview][34] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/xosview.jpg)
|
||||
|
||||
xosview 是一款经典的系统监控工具,它给你提供包括 IRQ 的各个不同部分的总览。
|
||||
xosview 是一款经典的系统监控工具,它给你提供包括 IRQ 在内的各个不同部分的简单总览。
|
||||
|
||||
#### 40. [Dstat][35] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/dstat.jpg)
|
||||
|
||||
Dstat 旨在替代 vmstat,iostat,netstat 和 ifstat。它可以让你查实时查看所有的系统资源。这些数据可以导出为 CSV。最重要的是 dstat 允许使用插件,因此其可以扩展到更多领域。
|
||||
dstat 旨在替代 vmstat,iostat,netstat 和 ifstat。它可以让你查实时查看所有的系统资源。这些数据可以导出为 CSV。最重要的是 dstat 允许使用插件,因此其可以扩展到更多领域。
|
||||
|
||||
#### 41. [Net-SNMP][36] ####
|
||||
|
||||
SNMP 是“简单网络管理协议”,Net-SNMP 工具套件使用该协议可帮助你收集服务器的准确信息。
|
||||
SNMP 即“简单网络管理协议”,Net-SNMP 工具套件使用该协议可帮助你收集服务器的准确信息。
|
||||
|
||||
#### 42. [incron][37] ####
|
||||
|
||||
Incron 允许你监控一个目录树,然后对这些变化采取措施。如果你想将目录‘a’中的新文件复制到目录‘b’,这正是 incron 能做的。
|
||||
incron 允许你监控一个目录树,然后对这些变化采取措施。如果你想在目录‘a’中出现新文件时,将其复制到目录‘b’,这正是 incron 能做的。
|
||||
|
||||
#### 43. [monitorix][38] ####
|
||||
|
||||
Monitorix 是轻量级的系统监控工具。它可以帮助你监控一台机器,并为你提供丰富的指标。它也有一个内置的 HTTP 服务器,来查看图表和所有指标的报告。
|
||||
Monitorix 是轻量级的系统监控工具。它可以帮助你监控单独一台机器,并为你提供丰富的指标。它也有一个内置的 HTTP 服务器,来查看图表和所有指标的报告。
|
||||
|
||||
#### 44. vmstat ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/vmstat.jpg)
|
||||
|
||||
vmstat(virtual memory statistics)是一个小的内置工具,能监控和显示机器的内存。
|
||||
vmstat(virtual memory statistics)是一个小型内置工具,能监控和显示机器的内存。
|
||||
|
||||
#### 45. uptime ####
|
||||
|
||||
@ -273,13 +273,13 @@ vmstat(virtual memory statistics)是一个小的内置工具,能监控和
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/mpstat.jpg)
|
||||
|
||||
mpstat 是一个内置的工具,能监视 cpu 的使用情况。最常见的使用方法是 `mpstat -P ALL`,它给你提供 cpu 的使用情况。你也可以间隔更新 cpu 的使用情况。
|
||||
mpstat 是一个内置的工具,能监视 cpu 的使用情况。最常见的使用方法是 `mpstat -P ALL`,它给你提供 cpu 的使用情况。你也可以间歇性地更新 cpu 的使用情况。
|
||||
|
||||
#### 47. pmap ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/pmap.jpg)
|
||||
|
||||
pmap 是一个内置的工具,报告一个进程的内存映射。你可以使用这个命令来找出内存瓶颈的原因。
|
||||
pmap 是一个内置的工具,报告一个进程的内存映射。你可以使用这个命令来找出导致内存瓶颈的原因。
|
||||
|
||||
#### 48. ps ####
|
||||
|
||||
@ -291,13 +291,13 @@ pmap 是一个内置的工具,报告一个进程的内存映射。你可以使
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/sar.jpg)
|
||||
|
||||
sar 是 sysstat 包的一部分,可以帮助你收集,报告和保存不同系统的指标。使用不同的参数,它会给你提供 CPU, 内存 和 I/O 使用情况及其他东西。
|
||||
sar 是 sysstat 包的一部分,可以帮助你收集、报告和保存不同系统的指标。使用不同的参数,它会给你提供 CPU、 内存和 I/O 使用情况及其他东西。
|
||||
|
||||
#### 50. [collectl][40] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/collectl.jpg)
|
||||
|
||||
类似于 sar,collectl 收集你机器的性能指标。默认情况下,显示 cpu,网络和磁盘统计数据,但它实际收集了很多信息。与 sar 不同的是,collectl 能够处理比秒更小的单位,它可以被直接送入绘图工具并且 collectl 的监控过程更广泛。
|
||||
类似于 sar,collectl 收集你机器的性能指标。默认情况下,显示 cpu、网络和磁盘统计数据,但它实际收集了很多信息。与 sar 不同的是,collectl 能够处理比秒更小的单位,它可以被直接送入绘图工具并且 collectl 的监控过程更广泛。
|
||||
|
||||
#### 51. [iostat][41] ####
|
||||
|
||||
@ -309,23 +309,23 @@ iostat 也是 sysstat 包的一部分。此命令用于监控系统的输入/输
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/free.jpg)
|
||||
|
||||
这是一个内置的命令用于显示你机器上可用的内存大小以及已使用的内存大小。它还可以显示某时刻内核所使用的缓冲区大小。
|
||||
这是一个内置的命令,用于显示你机器上可用的内存大小以及已使用的内存大小。它还可以显示某时刻内核所使用的缓冲区大小。
|
||||
|
||||
#### 53. /Proc 文件系统 ####
|
||||
#### 53. /proc 文件系统 ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/procfile.jpg)
|
||||
|
||||
proc 文件系统可以让你查看内核的统计信息。从这些统计数据可以得到你机器上不同硬件设备的详细信息。看看这个 [ proc文件统计的完整列表 ][42]。
|
||||
proc 文件系统可以让你查看内核的统计信息。从这些统计数据可以得到你机器上不同硬件设备的详细信息。看看这个 [proc 文件统计的完整列表][42]。
|
||||
|
||||
#### 54. [GKrellM][43] ####
|
||||
|
||||
GKrellm 是一个图形应用程序来监控你硬件的状态信息,像CPU,内存,硬盘,网络接口以及其他的。它也可以监视并启动你所选择的邮件阅读器。
|
||||
GKrellm 是一个图形应用程序,用来监控你硬件的状态信息,像CPU,内存,硬盘,网络接口以及其他的。它也可以监视并启动你所选择的邮件阅读器。
|
||||
|
||||
#### 55. [Gnome 系统监控器][44] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/gnome-system-monitor.jpg)
|
||||
|
||||
Gnome 系统监控器是一个基本的系统监控工具,其能通过一个树状结构来查看进程的依赖关系,能杀死及调整进程优先级,还能以图表形式显示所有服务器的指标。
|
||||
Gnome 系统监控器是一个基本的系统监控工具,其能通过一个树状结构来查看进程的依赖关系,能杀死进程及调整进程优先级,还能以图表形式显示所有服务器的指标。
|
||||
|
||||
### 日志监控工具 ###
|
||||
|
||||
@ -333,11 +333,11 @@ Gnome 系统监控器是一个基本的系统监控工具,其能通过一个
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/goaccess.jpg)
|
||||
|
||||
GoAccess 是一个实时的网络日志分析器,它能分析 apache, nginx 和 amazon cloudfront 的访问日志。它也可以将数据输出成 HTML,JSON 或 CSV 格式。它会给你一个基本的统计信息,访问量,404页面,访客位置和其他东西。
|
||||
GoAccess 是一个实时的网络日志分析器,它能分析 apache, nginx 和 amazon cloudfront 的访问日志。它也可以将数据输出成 HTML,JSON 或 CSV 格式。它会给你一个基本的统计信息、访问量、404 页面,访客位置和其他东西。
|
||||
|
||||
#### 57. [Logwatch][46] ####
|
||||
|
||||
Logwatch 是一个日志分析系统。它通过分析系统的日志,并为你所指定的区域创建一个分析报告。它每天给你一个报告可以让你花费更少的时间来分析日志。
|
||||
Logwatch 是一个日志分析系统。它通过分析系统的日志,并为你所指定的部分创建一个分析报告。它每天给你一个报告,以便让你花费更少的时间来分析日志。
|
||||
|
||||
#### 58. [Swatch][47] ####
|
||||
|
||||
@ -349,13 +349,13 @@ Logwatch 是一个日志分析系统。它通过分析系统的日志,并为
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/multitail.jpg)
|
||||
|
||||
MultiTail 可帮助你在多窗口下监控日志文件。你可以将这些日志文件合并成一个。它也像正则表达式一样使用不同的颜色来显示日志文件以方便你阅读。
|
||||
MultiTail 可帮助你在多个窗口之下监控日志文件。你可以将这些日志文件合并到一个窗口。它可以通过正则表达式的帮助,使用不同的颜色来显示日志文件以方便你阅读。
|
||||
|
||||
#### 系统工具 ####
|
||||
### 系统工具 ###
|
||||
|
||||
#### 60. [acct or psacct][49] ####
|
||||
|
||||
acct 也称 psacct(取决于如果你使用 apt-get 还是 yum)可以监控所有用户执行的命令,包括 CPU 和内存在系统内所使用的时间。一旦安装完成后你可以使用命令 ‘sa’ 来查看。
|
||||
acct 也称 psacct(取决于如果你使用 apt-get 还是 yum)可以监控所有用户执行的命令,包括 CPU 时间和内存占用。一旦安装完成后你可以使用命令 `sa` 来查看统计。
|
||||
|
||||
#### 61. [whowatch][50] ####
|
||||
|
||||
@ -365,31 +365,31 @@ acct 也称 psacct(取决于如果你使用 apt-get 还是 yum)可以监控
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/strace.jpg)
|
||||
|
||||
strace 被用于诊断,调试和监控程序之间的相互调用过程。最常见的做法是用 strace 打印系统调用的程序列表,其可以看出程序是否像预期那样被执行了。
|
||||
strace 被用于诊断、调试和监控程序之间的相互调用过程。最常见的做法是用 strace 打印系统调用的程序列表,其可以看出程序是否像预期那样被执行了。
|
||||
|
||||
#### 63. [DTrace][52] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/dtrace.jpg)
|
||||
|
||||
DTrace 可以说是 strace 的大哥。它动态地跟踪与检测代码实时运行的指令。它允许你深入分析其性能和诊断故障。但是,它并不简单,大约有1200本书中提到过它。
|
||||
DTrace 可以说是 strace 的大哥。它动态地跟踪与检测代码实时运行的指令。它允许你深入分析其性能和诊断故障。但是,它并不简单,关于这个话题有1200本书之多。
|
||||
|
||||
#### 64. [webmin][53] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/webmin.jpg)
|
||||
|
||||
Webmin 是一个基于 Web 的系统管理工具。它不需要手动编辑 UNIX 配置文件,并允许你远程管理系统。它有一对监控模块用于连接它。
|
||||
Webmin 是一个基于 Web 的系统管理工具。它不需要手动编辑 UNIX 配置文件,可以让你远程管理系统。它有一对监控模块用于连接它。
|
||||
|
||||
#### 65. stat ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/stat.jpg)
|
||||
|
||||
Stat 是一个内置的工具,用于显示文件和文件系统的状态信息。它会显示文件被修改,访问或更改的信息。
|
||||
Stat 是一个内置的工具,用于显示文件和文件系统的状态信息。它会显示文件何时被修改、访问或更改。
|
||||
|
||||
#### 66. ifconfig ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/ifconfig.jpg)
|
||||
|
||||
ifconfig 是一个内置的工具用于配置网络接口。大多数网络监控工具背后都使用 ifconfig 将其设置成混乱模式来捕获所有的数据包。你可以手动执行 `ifconfig eth0 promisc` 并使用 `ifconfig eth0 -promisc` 返回正常模式。
|
||||
ifconfig 是一个内置的工具,用于配置网络接口。大多数网络监控工具背后都使用 ifconfig 将网卡设置成混乱模式来捕获所有的数据包。你可以手动执行 `ifconfig eth0 promisc` 进入混乱模式,使用 `ifconfig eth0 -promisc` 返回正常模式。
|
||||
|
||||
#### 67. [ulimit][54] ####
|
||||
|
||||
@ -399,23 +399,23 @@ ulimit 是一个内置的工具,可监控系统资源,并可以限制任何
|
||||
|
||||
#### 68. [cpulimit][55] ####
|
||||
|
||||
CPULimit 是一个小工具用于监控并限制进程对 CPU 的使用率。其特别有用,能限制批处理作业对 CPU 的使用率保持在一定范围。
|
||||
CPULimit 是一个小工具,用于监控并限制进程对 CPU 的使用率。其特别可以用于将批处理作业对 CPU 的使用率保持在一定范围。
|
||||
|
||||
#### 69. lshw ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/lshw.jpg)
|
||||
|
||||
lshw 是一个小的内置工具能提取关于本机硬件配置的详细信息。它可以输出 CPU 版本和主板配置。
|
||||
lshw 是一个小的内置工具,能提取关于本机硬件配置的详细信息。它可以输出 CPU 版本和主板配置。
|
||||
|
||||
#### 70. w ####
|
||||
|
||||
w 是一个内置命令用于显示当前登录用户的信息及他们所运行的进程。
|
||||
w 是一个内置命令,用于显示当前登录用户的信息及他们所运行的进程。
|
||||
|
||||
#### 71. lsof ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/lsof.jpg)
|
||||
|
||||
lsof 是一个内置的工具可让你列出所有打开的文件和网络连接。从那里你可以看到文件是由哪个进程打开的,基于进程名,可通过一个特定的用户来杀死属于某个用户的所有进程。
|
||||
lsof 是一个内置的工具,可让你列出所有打开的文件和网络连接。从那里你可以看到文件是由哪个进程打开的,基于进程名可找到其特定的用户,或杀死属于某个用户的所有进程。
|
||||
|
||||
### 基础架构监控工具 ###
|
||||
|
||||
@ -423,13 +423,13 @@ lsof 是一个内置的工具可让你列出所有打开的文件和网络连接
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/server-density-monitoring.png)
|
||||
|
||||
我们的 [服务器监控工具][56]!它有一个 web 界面,使你可以进行报警设置并可以通过图表来查看所有系统的网络指标。你还可以设置监控的网站,无论是否在线。Server Density 允许你设置用户的权限,你可以根据我们的插件或 api 来扩展你的监控。该服务已经支持 Nagios 的插件了。
|
||||
我们的 [服务器监控工具][56] 它有一个 web 界面,使你可以进行报警设置并可以通过图表来查看所有系统的网络指标。你还可以设置监控的网站,无论是否在线。Server Density 允许你设置用户的权限,你可以根据我们的插件或 api 来扩展你的监控。该服务已经支持 Nagios 的插件了。
|
||||
|
||||
#### 73. [OpenNMS][57] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/opennms.jpg)
|
||||
|
||||
OpenNMS 主要有四个功能区:事件管理和通知;发现和配置;服务监控和数据收集。其设计可被在多种网络环境中定制。
|
||||
OpenNMS 主要有四个功能区:事件管理和通知;发现和配置;服务监控和数据收集。其设计为可被在多种网络环境中定制。
|
||||
|
||||
#### 74. [SysUsage][58] ####
|
||||
|
||||
@ -441,19 +441,19 @@ SysUsage 通过 Sar 和其他系统命令持续监控你的系统。一旦达到
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/brainypdm.jpg)
|
||||
|
||||
brainypdm 是一个数据管理和监控工具,它能收集来自 nagios 或其它公共资源的数据并以图表显示。它是跨平台的,其基于 Web 并可自定义图形。
|
||||
brainypdm 是一个数据管理和监控工具,它能收集来自 nagios 或其它常规来源的数据并以图表显示。它是跨平台的,其基于 Web 并可自定义图形。
|
||||
|
||||
#### 76. [PCP][60] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/pcp.jpg)
|
||||
|
||||
PCP 可以收集来自多个主机的指标,并且效率很高。它也有一个插件框架,所以你可以把它收集的对你很重要的指标使用插件来管理。你可以通过任何一个 Web 界面或 GUI 访问图形数据。它比较适合大型监控系统。
|
||||
PCP 可以收集来自多个主机的指标,并且效率很高。它也有一个插件框架,所以你可以让它收集对你很重要的指标。你可以通过任何一个 Web 界面或 GUI 访问图形数据。它比较适合大型监控系统。
|
||||
|
||||
#### 77. [KDE 系统保护][61] ####
|
||||
#### 77. [KDE 系统守护][61] ####
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/kdesystemguard.jpg)
|
||||
|
||||
这个工具既是一个系统监控器也是一个任务管理器。你可以通过工作表来查看多台机器的服务指标,如果一个进程需要被杀死或者你需要启动一个进程,它可以在 KDE 系统保护中来完成。
|
||||
这个工具既是一个系统监控器也是一个任务管理器。你可以通过工作表来查看多台机器的服务指标,如果需要杀死一个进程或者你需要启动一个进程,它可以在 KDE 系统守护中来完成。
|
||||
|
||||
#### 78. [Munin][62] ####
|
||||
|
||||
@ -471,7 +471,7 @@ Nagios 是系统和网络监控工具,可帮助你监控多台服务器。当
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/zenoss.jpg)
|
||||
|
||||
Zenoss 提供了一个 Web 界面,使你可以监控所有的系统和网络指标。此外,它能自动发现网络资源和修改网络配置。并且会提醒你采取行动,它也支持 Nagios 的插件。
|
||||
Zenoss 提供了一个 Web 界面,使你可以监控所有的系统及网络指标。此外,它能自动发现网络资源和修改网络配置。并且会提醒你采取行动,它也支持 Nagios 的插件。
|
||||
|
||||
#### 81. [Cacti][65] ####
|
||||
|
||||
@ -483,7 +483,7 @@ Zenoss 提供了一个 Web 界面,使你可以监控所有的系统和网络
|
||||
|
||||
![](https://serverdensity-wpengine.netdna-ssl.com/wp-content/uploads/2015/02/zabbix-monitoring.png)
|
||||
|
||||
Zabbix 是一个开源的基础设施监控解决方案。它使用了许多数据库来存放监控统计信息。其核心是用 C 语言编写,并在前端中使用 PHP。如果你不喜欢安装代理,Zabbix 可能是一个最好选择。
|
||||
Zabbix 是一个开源的基础设施监控解决方案。它使用了许多数据库来存放监控统计信息。其核心是用 C 语言编写,并在前端中使用 PHP。如果你不喜欢安装代理端,Zabbix 可能是一个最好选择。
|
||||
|
||||
### 附加部分: ###
|
||||
|
||||
@ -491,15 +491,15 @@ Zabbix 是一个开源的基础设施监控解决方案。它使用了许多数
|
||||
|
||||
#### 83. [collectd][67] ####
|
||||
|
||||
Collectd 是一个 Unix 守护进程来收集所有的监控数据。它采用了模块化设计并使用插件来填补一些缺陷。这样能使 collectd 保持轻量级并可进行定制。
|
||||
Collectd 是一个 Unix 守护进程,用来收集所有的监控数据。它采用了模块化设计并使用插件来填补一些缺陷。这样能使 collectd 保持轻量级并可进行定制。
|
||||
|
||||
#### 84. [Observium][68] ####
|
||||
|
||||
Observium 是一个自动发现网络的监控平台,支持普通的硬件平台和操作系统。Observium 专注于提供一个优美,功能强大,简单直观的界面来显示网络的健康和状态。
|
||||
Observium 是一个自动发现网络的监控平台,支持大量硬件平台和操作系统。Observium 专注于提供一个优美、功能强大、简单直观的界面来显示网络的健康和状态。
|
||||
|
||||
#### 85. Nload ####
|
||||
|
||||
这是一个命令行工具来监控网络的吞吐量。它很整洁,因为它使用两个图表和其他一些有用的数据类似传输的数据总量来对进出站流量进行可视化。你可以使用如下方法安装它:
|
||||
这是一个命令行工具来监控网络的吞吐量。它很整洁,因为它使用两个图表和其他一些类似传输的数据总量这样的有用数据来对进出站流量进行可视化。你可以使用如下方法安装它:
|
||||
|
||||
yum install nload
|
||||
|
||||
@ -509,15 +509,15 @@ Observium 是一个自动发现网络的监控平台,支持普通的硬件平
|
||||
|
||||
#### 86. [SmokePing][69] ####
|
||||
|
||||
SmokePing 可以跟踪你网络延迟,并对他们进行可视化。SmokePing 有一个流行的延迟测量插件。如果图形用户界面对你来说非常重要,现在有一个正在开发中的插件来实现此功能。
|
||||
SmokePing 可以跟踪你网络延迟,并对他们进行可视化。有各种为 SmokePing 开发的延迟测量插件。如果图形用户界面对你来说非常重要,现在有一个正在开发中的插件来实现此功能。
|
||||
|
||||
#### 87. [MobaXterm][70] ####
|
||||
|
||||
如果你整天在 windows 环境下工作。你可能会觉得 Windows 下受终端窗口的限制。MobaXterm 正是由此而来的,它允许你使用多个在 Linux 中相似的终端。这将会极大地帮助你在监控方面的需求!
|
||||
如果你整天在 windows 环境下工作。你可能会觉得 Windows 下终端窗口的限制。MobaXterm 正是由此而来的,它允许你使用多个通常出现在 Linux 中的命令。这将会极大地帮助你在监控方面的需求!
|
||||
|
||||
#### 88. [Shinken monitoring][71] ####
|
||||
|
||||
Shinken 是一个监控框架,其是由 python 对 Nagios 进行完全重写的。它的目的是增强灵活性和管理更大环境。但仍保持所有的 nagios 配置和插件。
|
||||
Shinken 是一个监控框架,其是采用 python 对 Nagios 进行了完全重写。它的目的是增强灵活性和管理更大环境。但仍保持所有的 nagios 配置和插件。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -525,7 +525,7 @@ via: https://blog.serverdensity.com/80-linux-monitoring-tools-know/
|
||||
|
||||
作者:[Jonathan Sundqvist][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/) 荣誉推出
|
||||
|
@ -1,57 +1,58 @@
|
||||
如何在Ubuntu 15.04 上安装带JSON 支持的SQLite 3.9.1
|
||||
如何在 Ubuntu 15.04 上安装带 JSON 支持的 SQLite 3.9.1
|
||||
================================================================================
|
||||
欢迎阅读我们关于SQLite 的文章,SQLite 是当今时间上使用最广泛的SQL 数据库引擎,它他基本不需要配置,不需要安装或者管理就可以运行。SQLite 是一个是开放领域的软件,是关系数据库的管理系统,或者说RDBMS,用来在大表存储用户定义的记录。对于数据存储和管理来说,数据库引擎要处理复杂的查询命令,这些命令可能会从多个表获取数据然后生成报告的数据总结。
|
||||
欢迎阅读我们关于SQLite 的文章,SQLite 是当今世界上使用最广泛的 SQL 数据库引擎,它基本不需要配置,不需要设置或管理就可以运行。SQLite 是一个是开放领域(public-domain)的软件,是一个关系型数据库管理系统(RDBMS),用来在一个大数据表中存储用户定义的记录。对于数据存储和管理来说,数据库引擎要处理复杂的查询命令,这些命令可能会从多个表获取数据然后生成报告和数据总结。
|
||||
|
||||
SQLite 是一个非常小、轻量级,不需要分离的服务进程或系统。他可以运行在UNIX,Linux,Mac OS-X,Android,iOS 和Windows 上,已经被大量的软件程序使用,如Opera, Ruby On Rails, Adobe System, Mozilla Firefox, Google Chrome 和 Skype。
|
||||
SQLite 是一个非常小、轻量级,不需要独立的服务进程或系统。它可以运行在 UNIX,Linux,Mac OS-X,Android,iOS 和 Windows 上,已经被大量的软件程序使用,如 Opera, Ruby On Rails, Adobe System, Mozilla Firefox, Google Chrome 和 Skype。
|
||||
|
||||
### 1) 基本需求: ###
|
||||
|
||||
在几乎全部支持SQLite 的平台上安装SQLite 基本上没有复杂的要求。
|
||||
在绝大部分支持 SQLite 的平台上安装 SQLite 基本上并没有复杂的要求。
|
||||
|
||||
所以让我们在CLI 或者Secure Shell 上使用sudo 或者root 权限登录Ubuntu 服务器。然后更新系统,这样子就可以让操作系统的软件更新到新版本。
|
||||
让我们在 CLI 或者 Secure Shell 上使用 sudo 或者 root 权限登录 Ubuntu 服务器。然后更新系统,这样子就可以让操作系统的软件更新到新版本。
|
||||
|
||||
在Ubuntu 上,下面的命令是用来更新系统的软件源的。
|
||||
在 Ubuntu 上,使用如下的命令来更新系统的软件源。
|
||||
|
||||
# apt-get update
|
||||
|
||||
如果你要在新安装的Ubuntu 上部署SQLite,那么你需要安装一些基础的系统管理工具,如wget, make, unzip, gcc。
|
||||
如果你要在新安装的 Ubuntu 上部署 SQLite,那么你需要安装一些基础的系统管理工具,如 wget, make, unzip, gcc。
|
||||
|
||||
要安装wget,可以使用下面的命令,然后输入Y 如果系统提示的话:
|
||||
要安装 wget,可以使用下面的命令,如果系统提示的话,输入 Y :
|
||||
|
||||
# apt-get install wget make gcc
|
||||
|
||||
### 2) 下载 SQLite ###
|
||||
|
||||
要下载SQLite 最好是在[SQLite 官网][1]下载,如下所示
|
||||
要下载 SQLite ,最好是在 [SQLite 官网][1]下载,如下所示
|
||||
|
||||
![SQLite download](http://blog.linoxide.com/wp-content/uploads/2015/10/Selection_014.png)
|
||||
|
||||
你也可以直接复制资源的连接然后再命令行使用wget 下载,如下所示:
|
||||
你也可以直接复制资源的连接然后在命令行使用 wget 下载,如下所示:
|
||||
|
||||
# wget https://www.sqlite.org/2015/sqlite-autoconf-3090100.tar.gz
|
||||
|
||||
![wget SQLite](http://blog.linoxide.com/wp-content/uploads/2015/10/23.png)
|
||||
|
||||
下载完成之后,解压缩安装包,切换工作目录到解压缩后的SQLite 目录,使用下面的命令。
|
||||
下载完成之后,解压缩安装包,切换工作目录到解压缩后的 SQLite 目录,使用下面的命令。
|
||||
|
||||
# tar -zxvf sqlite-autoconf-3090100.tar.gz
|
||||
|
||||
### 3) 安装 SQLite ###
|
||||
|
||||
现在我们要开始安装、配置刚才下载的SQLite。所以在Ubuntu 上编译、安装SQLite,运行配置脚本。
|
||||
现在我们要开始安装、配置刚才下载的 SQLite。在 Ubuntu 上编译、安装 SQLite,运行配置脚本:
|
||||
|
||||
root@ubuntu-15:~/sqlite-autoconf-3090100# ./configure –prefix=/usr/local
|
||||
|
||||
![SQLite Installation](http://blog.linoxide.com/wp-content/uploads/2015/10/35.png)
|
||||
|
||||
配置要上面的prefix 之后,运行下面的命令编译安装包。
|
||||
|
||||
root@ubuntu-15:~/sqlite-autoconf-3090100# make
|
||||
配置要上面的安装位置前缀(prefix)之后,运行下面的命令编译安装包。
|
||||
```
|
||||
root@ubuntu-15:~/sqlite-autoconf-3090100# make
|
||||
source='sqlite3.c' object='sqlite3.lo' libtool=yes \
|
||||
DEPDIR=.deps depmode=none /bin/bash ./depcomp \
|
||||
/bin/bash ./libtool --tag=CC --mode=compile gcc -DPACKAGE_NAME=\"sqlite\" -DPACKAGE_TARNAME=\"sqlite\" -DPACKAGE_VERSION=\"3.9.1\" -DPACKAGE_STRING=\"sqlite\ 3.9.1\" -DPACKAGE_BUGREPORT=\"http://www.sqlite.org\" -DPACKAGE_URL=\"\" -DPACKAGE=\"sqlite\" -DVERSION=\"3.9.1\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_FDATASYNC=1 -DHAVE_USLEEP=1 -DHAVE_LOCALTIME_R=1 -DHAVE_GMTIME_R=1 -DHAVE_DECL_STRERROR_R=1 -DHAVE_STRERROR_R=1 -DHAVE_POSIX_FALLOCATE=1 -I. -D_REENTRANT=1 -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_RTREE -g -O2 -c -o sqlite3.lo sqlite3.c
|
||||
```
|
||||
|
||||
运行完上面的命令之后,要在Ubuntu 上完成SQLite 的安装得运行下面的命令。
|
||||
运行完上面的命令之后,要在 Ubuntu 上完成 SQLite 的安装得运行下面的命令。
|
||||
|
||||
# make install
|
||||
|
||||
@ -59,7 +60,7 @@ DEPDIR=.deps depmode=none /bin/bash ./depcomp \
|
||||
|
||||
### 4) 测试 SQLite 安装 ###
|
||||
|
||||
要保证SQLite 3.9 安装成功了,运行下面的命令。
|
||||
要保证 SQLite 3.9 安装成功了,运行下面的命令。
|
||||
|
||||
# sqlite3
|
||||
|
||||
@ -77,7 +78,7 @@ SQLite 很容易上手。要获得详细的使用方法,在SQLite 控制台里
|
||||
|
||||
![SQLite Help](http://blog.linoxide.com/wp-content/uploads/2015/10/62.png)
|
||||
|
||||
现在开始最后一部分,使用一点SQLite 命令创建数据库。
|
||||
现在开始最后一部分,使用一点 SQLite 命令创建数据库。
|
||||
|
||||
要创建一个新的数据库需要运行下面的命令。
|
||||
|
||||
@ -103,17 +104,18 @@ SQLite 很容易上手。要获得详细的使用方法,在SQLite 控制台里
|
||||
sqlite> .exit
|
||||
|
||||
![Using SQLite3](http://blog.linoxide.com/wp-content/uploads/2015/10/73.png)
|
||||
|
||||
### 结论 ###
|
||||
|
||||
通过本文你可以了解如果安装支持JSON1 的最新版的SQLite,SQLite 从3.9.0 开始支持JSON1。这是一个非常棒的库,可以用来获取内嵌到应用程序,利用它可以很有效而且很轻量的管理资源。我们希望你能觉得本文有所帮助,请自由的像我们反馈你遇到的问题和困难。
|
||||
通过本文你可以了解如果安装支持 JSON1 的最新版的 SQLite,SQLite 从 3.9.0 开始支持 JSON1。这是一个非常棒的库,可以内嵌到应用程序,利用它可以很有效而轻量的管理资源。我们希望你能觉得本文有所帮助,请随意地向我们反馈你遇到的问题和困难。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://linoxide.com/ubuntu-how-to/install-sqlite-json-ubuntu-15-04/
|
||||
|
||||
作者:[Kashif Siddique][a]
|
||||
译者:[译者ID](https://github.com/oska874)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
译者:[oska874](https://github.com/oska874)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,237 @@
|
||||
在 Ubuntu 15.04 / CentOS 7 上安装广告服务器 Revive Adserver
|
||||
================================================================================
|
||||
Revive Adserver是一个自由开源的广告管理系统,能使出版商,广告平台和广告商在网页、应用、视频上投放并管理广告的系统。Revive Adserver以前叫做OpenX Source,遵循GNU通用公共授权协议。它集广告管理、网站定位、地理定位和一个用于数据收集的跟踪系统于一体。能使网站站长管理内部的、付费的以及第三方来源的广告,如谷歌的AdSense。本教程中,将会教会你在Ubuntu 15.04或CentOS 7安装并运行Revive Adserver。
|
||||
|
||||
### 1. 安装LAMP###
|
||||
|
||||
首先,Revive Adserver需要完整的LAMP环境才能运行,所以我们先安装LAMP。LAMP是Apache网页服务器,MySQL/MariaDB数据库和PHP模块的集合。要使Revive正常运行,需要安装PHP的众多模块,如apc, zlib, xml, pcre, mysql和mbstring。在不同的Linux发行版中,我们可以用下列命令进行LAMP的配置:
|
||||
|
||||
#### 在Ubuntu 15.04下####
|
||||
|
||||
# apt-get install apache2 mariadb-server php5 php5-gd php5-mysql php5-curl php-apc zlibc zlib1g zlib1g-dev libpcre3 libpcre3-dev libapache2-mod-php5 zip
|
||||
|
||||
#### 在CentOS 7下 ####
|
||||
|
||||
# yum install httpd mariadb php php-gd php-mysql php-curl php-mbstring php-xml php-apc zlibc zlib1g zlib1g-dev libpcre3 libpcre3-dev zip
|
||||
|
||||
### 2. 启动Apache Web和MariaDB服务
|
||||
|
||||
可以用下列命令启动刚刚安装好的Apache Web服务和MariaDB数据库服务。
|
||||
|
||||
#### 在Ubuntu 15.04下####
|
||||
|
||||
Ubuntu15.04使用Systemd作为默认初始系统,所以用下列命令启动Apache和MariaDB进程:
|
||||
|
||||
# systemctl start apache2 mysql
|
||||
|
||||
可以用下列命令使其开机自动运行:
|
||||
|
||||
# systemctl enable apache2 mysql
|
||||
|
||||
Synchronizing state for apache2.service with sysvinit using update-rc.d...
|
||||
Executing /usr/sbin/update-rc.d apache2 defaults
|
||||
Executing /usr/sbin/update-rc.d apache2 enable
|
||||
Synchronizing state for mysql.service with sysvinit using update-rc.d...
|
||||
Executing /usr/sbin/update-rc.d mysql defaults
|
||||
Executing /usr/sbin/update-rc.d mysql enable
|
||||
|
||||
#### 在CentOS 7下
|
||||
|
||||
CentOS 7同样是以Systemd作为默认初始系统,可以用下列命令启动:
|
||||
|
||||
# systemctl start httpd mariadb
|
||||
|
||||
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
|
||||
ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
|
||||
|
||||
### 3. 配置MariaDB
|
||||
|
||||
#### 在CentOS 7/Ubuntu 15.04下 ####
|
||||
|
||||
当我们第一次启动MariaDB时,MariaDB是没有分配密码的,所以要先设置一个root密码。之后再创建一个新的数据库用来储存Revive Adserver的数据。
|
||||
|
||||
使用以下命令配置MariaDB并设置其root密码:
|
||||
|
||||
# mysql_secure_installation
|
||||
|
||||
这时会要我们输入root密码,但我们之前什么密码都没设置,所以按回车下一步。之后,要求设置root密码,这时我们输入Y,然后输入自己想要的密码。回车继续下一步。
|
||||
|
||||
….
|
||||
so you should just press enter here.
|
||||
|
||||
Enter current password for root (enter for none):
|
||||
OK, successfully used password, moving on…
|
||||
|
||||
Setting the root password ensures that nobody can log into the MariaDB
|
||||
root user without the proper authorisation.
|
||||
|
||||
Set root password? [Y/n] y
|
||||
New password:
|
||||
Re-enter new password:
|
||||
Password updated successfully!
|
||||
Reloading privilege tables..
|
||||
… Success!
|
||||
…
|
||||
installation should now be secure.
|
||||
Thanks for using MariaDB!
|
||||
|
||||
![Configuring MariaDB](http://blog.linoxide.com/wp-content/uploads/2015/11/configuring-mariadb.png)
|
||||
|
||||
### 4. 创建新的数据库 ###
|
||||
|
||||
为MariaDB的root用户设置了密码之后,就可以创建用来储存Revive Adserver应用数据的数据库。首先通过以下命令登录MariaDB控制台:
|
||||
|
||||
# mysql -u root -p
|
||||
|
||||
这时要求输入root用户的密码,我们只要输入上一步设置好的密码。然后进入MariaDB控制台创建新的数据库,数据库用户及其密码,并且授予其创建、删除、编辑和存储表与数据的全部权限。
|
||||
|
||||
> CREATE DATABASE revivedb;
|
||||
> CREATE USER 'reviveuser'@'localhost' IDENTIFIED BY 'Pa$$worD123';
|
||||
> GRANT ALL PRIVILEGES ON revivedb.* TO 'reviveuser'@'localhost';
|
||||
> FLUSH PRIVILEGES;
|
||||
> EXIT;
|
||||
|
||||
![Creating Mariadb Revive Database](http://blog.linoxide.com/wp-content/uploads/2015/11/creating-mariadb-revive-database.png)
|
||||
|
||||
### 5. 下载Revive Adserver
|
||||
|
||||
接下来下载Revive Adserver的最新版本Revive Adserver.3.2.2(写本文时)。可以使用wget命令从Revive Adserverde 官方网站下载压缩包,网址是:[http://www.revive-adserver.com/download/][1] 。命令如下:
|
||||
|
||||
# cd /tmp/
|
||||
# wget http://download.revive-adserver.com/revive-adserver-3.2.2.zip
|
||||
|
||||
--2015-11-09 17:03:48-- http://download.revive-adserver.com/revive-adserver-3.2.2.zip
|
||||
Resolving download.revive-adserver.com (download.revive-adserver.com)... 54.230.119.219, 54.239.132.177, 54.230.116.214, ...
|
||||
Connecting to download.revive-adserver.com (download.revive-adserver.com)|54.230.119.219|:80... connected.
|
||||
HTTP request sent, awaiting response... 200 OK
|
||||
Length: 11663620 (11M) [application/zip]
|
||||
Saving to: 'revive-adserver-3.2.2.zip'
|
||||
revive-adserver-3.2 100%[=====================>] 11.12M 1.80MB/s in 13s
|
||||
2015-11-09 17:04:02 (906 KB/s) - 'revive-adserver-3.2.2.zip' saved [11663620/11663620]
|
||||
|
||||
解压到临时目录下:
|
||||
|
||||
# unzip revive-adserver-3.2.2.zip
|
||||
|
||||
把解压后的整个文件夹移动到Apache Web服务器的默认根目录/var/www/html/下:
|
||||
|
||||
# mv revive-adserver-3.2.2 /var/www/html/reviveads
|
||||
|
||||
### 6. 配置Apache Web服务
|
||||
|
||||
现在配置Apache服务使Revive正常运行。通过创建配置文件reviveads.conf来创建一个新的虚拟主机。这个目录在不同的Linux发行版上有所不同。
|
||||
|
||||
#### 在Ubuntu 15.04下
|
||||
|
||||
# touch /etc/apache2/sites-available/reviveads.conf
|
||||
# ln -s /etc/apache2/sites-available/reviveads.conf /etc/apache2/sites-enabled/reviveads.conf
|
||||
# nano /etc/apache2/sites-available/reviveads.conf
|
||||
|
||||
在这个文件中添加下列几行文本:
|
||||
|
||||
<VirtualHost *:80>
|
||||
ServerAdmin info@reviveads.linoxide.com
|
||||
DocumentRoot /var/www/html/reviveads/
|
||||
ServerName reviveads.linoxide.com
|
||||
ServerAlias www.reviveads.linoxide.com
|
||||
<Directory /var/www/html/reviveads/>
|
||||
Options FollowSymLinks
|
||||
AllowOverride All
|
||||
</Directory>
|
||||
ErrorLog /var/log/apache2/reviveads.linoxide.com-error_log
|
||||
CustomLog /var/log/apache2/reviveads.linoxide.com-access_log common
|
||||
</VirtualHost>
|
||||
|
||||
![Configuring Apache2 Ubuntu](http://blog.linoxide.com/wp-content/uploads/2015/11/configuring-apache2-ubuntu.png)
|
||||
|
||||
保存并退出,重启Apache Web服务:
|
||||
|
||||
# systemctl restart apache2
|
||||
|
||||
#### 在CentOS 7下 ####
|
||||
|
||||
在CentOS下,我们直接在/etc/httpd/conf.d/ 目录下创建reviveads.conf :
|
||||
|
||||
# nano /etc/httpd/conf.d/reviveads.conf
|
||||
|
||||
在这个文件中添加下列几行文本:
|
||||
|
||||
<VirtualHost *:80>
|
||||
ServerAdmin info@reviveads.linoxide.com
|
||||
DocumentRoot /var/www/html/reviveads/
|
||||
ServerName reviveads.linoxide.com
|
||||
ServerAlias www.reviveads.linoxide.com
|
||||
<Directory /var/www/html/reviveads/>
|
||||
Options FollowSymLinks
|
||||
AllowOverride All
|
||||
</Directory>
|
||||
ErrorLog /var/log/httpd/reviveads.linoxide.com-error_log
|
||||
CustomLog /var/log/httpd/reviveads.linoxide.com-access_log common
|
||||
</VirtualHost>
|
||||
|
||||
![Configuring httpd Centos](http://blog.linoxide.com/wp-content/uploads/2015/11/configuring-httpd-centos.png)
|
||||
|
||||
保存并退出,重启Apache Web服务:
|
||||
|
||||
# systemctl restart httpd
|
||||
|
||||
### 7. 修复权限和所有权
|
||||
|
||||
现在我们修改安装路径下文件的权限和所有权。把安装目录的所有权改成Apache进程所有,以便Apache Web服务有文件和目录的编辑、创建和删除的完全权限。
|
||||
|
||||
#### 在Ubuntu 15.04下####
|
||||
|
||||
# chown www-data: -R /var/www/html/reviveads
|
||||
|
||||
#### 在CentOS 7下
|
||||
|
||||
# chown apache: -R /var/www/html/reviveads
|
||||
|
||||
### 8. 设置防火墙
|
||||
|
||||
现在要配置防火墙,打开80端口使Apache Web服务运行的Revive Adserver能够被网络上的其他机器所访问。
|
||||
|
||||
#### 在Ubuntu 15.04/CentOS 7下
|
||||
|
||||
Ubuntu15.04/CentOS 7都使用Systemd作为默认初始系统,使用firewalld作为其防火墙。要打开80端口(http服务端口),执行以下命令:
|
||||
|
||||
# firewall-cmd --permanent --add-service=http
|
||||
|
||||
success
|
||||
|
||||
# firewall-cmd --reload
|
||||
|
||||
success
|
||||
|
||||
### 9. 网站的安装
|
||||
|
||||
顺利的话我们能够使用浏览器进行交互,并可以将浏览器指向正在运行的网络服务器。只要在浏览器输入http://ip-address/ 或者 http://domain.com 。这里我们要访问 http://reviveads.linoxide.com/
|
||||
|
||||
打开后可以看到Revive Adserver的欢迎页面,上面还有作为它发行许可证的GNU通用公共许可证V2。点击 I agree 继续下一步安装。
|
||||
|
||||
在下一页中,我们要输入数据库信息以便把Revive Adserver和MariaDB数据库服务连接起来。要输入之前设置的数据库名称,用户名以及密码。在本教程中,我们分别输入数据库名称为revivedb,用户名为reviveuser,密码为Pa$$worD123,并且令主机名为localhost,点击continue继续。
|
||||
|
||||
![Configuring Revive Adserver](http://blog.linoxide.com/wp-content/uploads/2015/11/configuring-revive-adserver.png)
|
||||
|
||||
输入要填的信息,如:管理员用户名,密码和邮箱。可以以这些信息登录Adserver的控制界面。然后跳到最后一页,可以看到Revive Adserver已经安装成功了。
|
||||
|
||||
接着,转到Adverstiser页面,添加新的广告管理。在控制界面添加新用户到adserver,为广告库户添加标题,网页,视频
|
||||
广告。
|
||||
|
||||
### 总结 ###
|
||||
|
||||
本文中,我们学习了如何在Ubuntu 15.04和CentOS 7上安装并配置Revive Adserver。尽管Revive Adserver的原始代码是从OpenX那买的,但现在OpenX Enterprise和Revive Adserver已经完全分开了。可以从[http://www.adserverplugins.com/][2] 获得更多插件来扩展新特性。讲真,这个软件确实让网页,应用,视频上的广告管理变得容易了许多。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://linoxide.com/linux-how-to/install-revive-adserver-ubuntu-15-04-centos-7/
|
||||
|
||||
作者:[Arun Pyasi][a]
|
||||
译者:[chisper](https://github.com/chisper)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://linoxide.com/author/arunp/
|
||||
[1]:http://www.revive-adserver.com/download/
|
||||
[2]:http://www.adserverplugins.com/
|
@ -0,0 +1,51 @@
|
||||
没有 Linux 和开源软件的世界会变得怎么样
|
||||
================================================================================
|
||||
> Linux 基金会针最近对人们关于 “没有 Linux 的世界” 系列短片所提出的问题做了回应,解答了包括没有 Linux 和其他的开源软件的因特网会变得怎么样等问题。
|
||||
|
||||
![](http://thevarguy.com/site-files/thevarguy.com/files/imagecache/medium_img/uploads/2015/11/hey_22.png)
|
||||
|
||||
假如 Linux —— 这个开源的操作系统内核 —— 不曾出现过,我们现在的世界是否会是另一番景象。会不会没有了因特网,或者没有了电影?这些都是观看 [Linux 基金会][1] 正在连续播出的 “[没有 Linux 的世界][2]” 系列短片的观众提出来的问题。
|
||||
|
||||
假如你错过了观看这些短片也不要紧,“[没有 Linux 的世界][2]” 系列短片是一个搞笑短片的集合,里边描述了没有了 Linux (或者说没有开源软件)的世界发生的事情。这些短片强调了 Linux 在 [电影制作][3] 以及 [因特网服务][4] 中充当的角色。
|
||||
|
||||
为了揭示该系列短片的一些主张、倾向和隐藏元素,Linux 基金会副主席 Jennifer Cloer 最近在 The VAR Guy 上回应了关于该短片的一些问题。以下是她的原话解答。
|
||||
|
||||
### 最新一集短片 —— Sam 和 Annie 一起看电影。假如没有 Linux,我们现在的荧屏是不是也和短片中的一样? ###
|
||||
|
||||
在第 4 集剧情中,我们恶搞了一下电影 “阿凡达(Avatar)”。不管你喜欢还是讨厌,现实中的 “阿凡达(Avatar)” 在荧屏上的效果还是让人记忆深刻的。在没有 Linux 的世界中,电影的效果就变得非常丑陋,但是我们并不知道它有多难看,因为那已经是最好的了。但实际上,“阿凡达(Avatar)” 是使用 Linux 来进行效果制作的。Weta 数码使用了当时世界上最大的 Linux 集群来给电影做效果渲染和 3D 建模。据报道,指环王(Lord of the Rings)、神奇四侠(Fantastic Four)和金刚(King Kong)等电影都用到了 Linux。我希望该短片能引起人们关注,因为它所做的这方面的工作还并不广为人知。
|
||||
|
||||
### 很多人对短片的原始剧情进行了批判,其中就包括“没有 Linux 将没有因特网”的剧情的指责。你对此持什么样的看法? ###
|
||||
|
||||
我们很喜欢人们在短片刚上映就进行激烈的辩论。该短片上映当天就超过了 100,000 的观众,这引起了人们对 Linux 在社会中扮演的角色以及对全世界的社区贡献者和维护者的关注。当然了,没有 Linux 的话,因特网也是会出现的,只是不会像当前我们所熟知的互联网那么成熟而已。每一个短片都对 Linux 在我们每天生活中扮演的角色进行了大胆且有趣的描述。我们希望,这些短片能够把关于 Linux 的故事推广到全世界的人的心里去。
|
||||
|
||||
### 为什么 Sam 和 Annie 的那只猫叫做 String? ###
|
||||
|
||||
该短片系列中没有一处剧情是随意的。仔细的观看的话,你就会发现其中关于 Linux 和极客们的各种玩笑。小猫 String 是我们的 Linux.com 主编 Libby Clark 以弦理论(string theory)亲自来命名的。在物理学里,弦理论(string theory)是一个理论框架,它用一个叫做弦(String)的一维对象替换了粒子物理学中粒子状的粒子。弦理论(string theory)描述了这些弦(String)如何在空间传播以及相互影响。就像 Sam、Annie 和 String 在那个没有 Linux 的世界里的关系那样。
|
||||
|
||||
### 我们期待已久的下两集是什么样的,特别是,最后那集什么时候上映? ###
|
||||
|
||||
在第 5 集短片中,我们将到太空并体验一下没有 Linux 的世界对太空探索的影响。这就像是一场疯狂的骑行。在短片的最后,我们最终还是会见到没有 Linux 的世界里的 Linus。贯穿整个短片系列,里边已经给出关于结局的线索,我在这就不能给太多提示了,因为还有好多人在找线索比赛中继续寻找着。并且我也不能给你们说出关于结局短片的上映日期。你们要自己跟进 #WorldWithoutLinux 主题帖来获取更多信息。
|
||||
|
||||
### 你可给一些关于第 4 集短片相关线索的提示吗? ###
|
||||
|
||||
在该短片中有另外一个关于免费汉堡餐厅(Free Burger Restaurant)的线索。在那个没有 Linux 的世界里,Linux 最后还是以一种很隐秘的方式出现了,可以说,就像是以另一种语言来解读 Linux。当然,这只是为了好玩,String 也以另外一个模样出现。
|
||||
|
||||
### 那么,该系列短片达到你所想要的效果了吗? ###
|
||||
|
||||
是的,达到了。我们很高兴看到人们分享并参与到这些故事中去。我们希望向那些可能不知道 Linux 的人传达更多关于 Linux 的故事并了解到 Linux 在当今世界中是无处不在的。全部的短片就是为了把这些关于 Linux 的真相推广给大家,并感谢那些全球性社区的开发者和公司对 Linux 的支持,Linux 使得一切成为可能。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://thevarguy.com/open-source-application-software-companies/linux-foundation-explains-world-without-linux-and-open-so
|
||||
|
||||
作者:[Christopher Tozzi][a]
|
||||
译者:[GHLandy](https://github.com/GHLandy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://thevarguy.com/author/christopher-tozzi
|
||||
[1]:http://linuxfoundation.org/
|
||||
[2]:http://www.linuxfoundation.org/world-without-linux
|
||||
[3]:http://thevarguy.com/open-source-application-software-companies/new-linux-foundation-video-highlights-role-open-source-3d
|
||||
[4]:http://thevarguy.com/open-source-application-software-companies/100715/would-internet-exist-without-linux-yes-without-open-sourc
|
87
published/201602/20151201 Cinnamon 2.8 Review.md
Normal file
87
published/201602/20151201 Cinnamon 2.8 Review.md
Normal file
@ -0,0 +1,87 @@
|
||||
Cinnamon 2.8 新变化一览
|
||||
================================================================================
|
||||
![](https://www.maketecheasier.com/assets/uploads/2015/11/cinnamon-2-8-featured.jpg)
|
||||
|
||||
除了Gnome和KDE外,Cinnamon是另一个很多人使用的桌面环境。它是由创作Linux Mint的团队制作的,并且可以被安装在许多其他发行版上。该桌面环境的最新版本 - Cinnamon 2.8 - 于去年底发布,此版本修复了许多的Bug、做了许多改进并添加了一些新功能。
|
||||
|
||||
我将仔细介绍该发行版本的主要改进,以及如何更新到Cinnamon 2.8或者第一次安装它。
|
||||
|
||||
### 对Applets的改进 ###
|
||||
|
||||
在此版本中,对面板中已有的Applets做了若干的改进。
|
||||
|
||||
#### 声音 Applet ####
|
||||
|
||||
![cinnamon-28-sound-applet](https://www.maketecheasier.com/assets/uploads/2015/11/rsz_cinnamon-28-sound-applet.jpg)
|
||||
|
||||
声音Applet经过修正,目前可以显示音轨信息并且可以在音频文件的艺术家封面上面进行媒体控制。对于支持拖动的音乐播放器来说(例如Banshee),会有一个进度条显示同样的播放进度,您可以用它来改变音轨位置。在applet的面板上右击将显示对输入和输出设备静音的选项。
|
||||
|
||||
#### 电源 Applet ####
|
||||
|
||||
电源applet则会使用电池制造商的数据而不是通用名称来显示每一个连接的电池和设备。
|
||||
|
||||
#### 窗口缩略图 ####
|
||||
|
||||
![cinnamon-2.8-window-thumbnails](https://www.maketecheasier.com/assets/uploads/2015/11/cinnamon-2.8-window-thumbnails.png)
|
||||
|
||||
在Cinnamon 2.8中,可以在鼠标悬停于面板里窗口列表时展示窗口缩略图。如果您不喜欢该功能,您还可以关闭该选项。
|
||||
|
||||
#### 工作区切换 Applet ####
|
||||
|
||||
![cinnamon-2.8-workspace-switcher](https://www.maketecheasier.com/assets/uploads/2015/11/cinnamon-2.8-workspace-switcher.png)
|
||||
|
||||
添加工作区切换applet到您的面板将为您显示一个代表该工作区的可视化图像,一些矩形嵌套显示在其中,代表您的窗口的位置。
|
||||
|
||||
#### 系统托盘 ####
|
||||
|
||||
Cinnamon 2.8支持在系统托盘中显示应用程序指示器。您可以很容易地在设置中禁用它,这将强制应用程序到以前使用状态图标的方式。
|
||||
|
||||
### 视觉改进 ###
|
||||
|
||||
Cinnamon 2.8还做了很多视觉上的改进。经典的切换器和Alt + Tab预览切换器都被精细打磨,有了显著的改进,同时修复了Alt + F2对话框的bug,并赋予了它更好的命令自动补全功能。
|
||||
|
||||
而且,传统的最小化窗口时动画效果的问题现已被解决,并可用于多个面板。
|
||||
|
||||
### Nemo 的改进 ###
|
||||
|
||||
![cinnamon-2.8-nemo](https://www.maketecheasier.com/assets/uploads/2015/11/rsz_cinnamon-28-nemo.jpg)
|
||||
|
||||
Cinnamon默认的文件管理器也修复了一些bug,并有了新的“快速重命名”的功能,用于重命名文件和文件夹。可以通过两次点击文件或文件夹并在两次点击之间进行简短的停顿以重命名文件。
|
||||
|
||||
Nemo也会自动地检测缩略图存在的问题,并提示您快速地修复它们。
|
||||
|
||||
### 其他值得注意的改进 ###
|
||||
|
||||
- Applets如今会在它们被更新的时候自动地重新加载一次。
|
||||
- 对于多个监视器的支持有了显著的提高。
|
||||
- 对话框窗口有了改进,并且会附加到它的父窗口上。
|
||||
- HiDPI检测有了改进。
|
||||
- QT5应用程序现在看起来更加原生并使用了默认的GTK主题。
|
||||
- 窗口管理和渲染性能有了提升。
|
||||
- 修复了许多bug。
|
||||
|
||||
### 如何获得 Cinnamon 2.8 ###
|
||||
|
||||
如果您在运行Linux Mint,您会在更新Linux Mint 17.3 “Rosa”Cinnamon版本的时候获得Cinnamon 2.8的更新。BETA版本现在已经放出,因此,如果您想立刻尝试新的软件,您可以试试。
|
||||
|
||||
对于Arch的用户来说,Cinnamon 2.8已经在Arch的官方仓库了,您可以通过更新软件包和系统级的更新获得Cinnamon的最新版本。
|
||||
|
||||
最后,对于Ubuntu用户来说,您可以通过下面的命令安装或更新Cinnamon 2.8:
|
||||
|
||||
sudo add-apt-repository -y ppa:moorkai/cinnamon
|
||||
sudo apt-get update
|
||||
sudo apt-get install cinnamon
|
||||
|
||||
您已经尝试了Cinnamon 2.8了么?感觉如何呢?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.maketecheasier.com/cinnamon-2-8-review/
|
||||
|
||||
作者:[Ayo Isaiah][a]
|
||||
译者:[wwy-hust](https://github.com/wwy-hust)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.maketecheasier.com/author/ayoisaiah/
|
@ -0,0 +1,135 @@
|
||||
如何 Mutt 邮件客户端中使用密文密码
|
||||
================================================================================
|
||||
Mutt 是一个 Linux/UNIX 终端环境下的开源的邮件客户端。Mutt 以及 [Alpine][1] 在 Linux 命令行爱好者中有着最忠诚的追随者,这不是没有原因的。想一下你所期待邮件客户端应有的功能,Mutt 拥有:多协议支持(例如,POP3、IMAP 和 SMTP),S/MIME 和 PGP/GPG 集成,会话线索,颜色标记,可定制宏/快捷键,等等。另外,基于命令行的 Mutt 相比粗重的基于浏览器的邮件客户端(如:Gmail,Ymail)或图形用户界面的邮件客户端(如:Thunderbird,MS Outlook)而言,是一个使用电子邮件的轻量级替代品。
|
||||
|
||||
当你想使用 Mutt 通过公司的 SMTP/IMAP 服务器访问或发送邮件,或取代网页邮件服务,可能所关心的一个问题是如何保护您的邮件凭据(如:SMTP/IMAP 密码),它们存储在一个纯文本 Mutt 配置文件(~/.muttrc)中。
|
||||
|
||||
对于这些人对安全的担忧,确实有一个容易的方法来**加密 Mutt 配置文件***,以防止这种风险。在这个教程中,我描述了如何加密 Mutt 敏感配置,比如使用 GnuPG(GPG)加密 SMTP/IMAP 密码,GPG 是一个开源的 OpenPGP 实现。
|
||||
|
||||
### 第一步 (可选):创建 GPG 密钥 ###
|
||||
|
||||
因为我们将要使用 GPG 加密 Mutt 配置文件,如果你没有 GPG 密钥,第一步就是创建一个(公钥/私钥对)。如果有,请忽略这步。
|
||||
|
||||
创建一个新 GPG 密钥,输入下面命令:
|
||||
|
||||
$ gpg --gen-key
|
||||
|
||||
选择密钥类型(RSA),密钥长度(2048 bits),和过期时间(0 代表不过期)。当出现用户 ID 提示时,输入关联到该公钥/私钥对的名字(Dan Nanni) 和邮箱地址(myemail@email.com)。最后,输入一个密码来保护你的私钥。
|
||||
|
||||
![](https://c2.staticflickr.com/6/5726/22808727824_7735f11157_c.jpg)
|
||||
|
||||
生成一个 GPG 密钥需要大量的随机字节来构成熵,所以在生成密钥期间确保在你的系统上执行一些随机行为(如:敲打键盘,移动鼠标或者读写磁盘)。根据密钥长度,生成 GPG 密钥要花几分钟或更多时间。
|
||||
|
||||
![](https://c1.staticflickr.com/1/644/23328597612_6ac5a29944_c.jpg)
|
||||
|
||||
### 第二步:加密 Mutt 敏感配置 ###
|
||||
|
||||
下一步,在 ~/.mutt 目录创建一个新的文本文件,然后把一些你想隐藏的 Mutt 敏感配置放进去。这个例子里,我指定了 SMTP/IMAP 密码。
|
||||
|
||||
$ mkdir ~/.mutt
|
||||
$ vi ~/.mutt/password
|
||||
|
||||
----------
|
||||
|
||||
set smtp_pass="XXXXXXX"
|
||||
set imap_pass="XXXXXXX"
|
||||
|
||||
现在通过 GPG 使用你的公钥加密这个文件如下:
|
||||
|
||||
$ gpg -r myemail@email.com -e ~/.mutt/password
|
||||
|
||||
这将创建 ~/.mutt/password.gpg,这是一个原始文件的 GPG 加密版本。
|
||||
|
||||
然后删除 ~/.mutt/password,只保留 GPG 加密版本。
|
||||
|
||||
### 第三步:创建完整 Mutt 配置文件 ###
|
||||
|
||||
现在你已经在一个单独的文件放置了加密的 Mutt 敏感配置,你可以在 ~/.muttrc 指定其余的 Mutt 配置。然后增加下面这行在 ~/.muttrc 末尾。
|
||||
|
||||
source "gpg -d ~/.mutt/password.gpg |"
|
||||
|
||||
当你启动 Mutt 时,这行将解密 ~/.mutt/password.gpg ,然后将解密内容应用到你的 Mutt 配置中。
|
||||
|
||||
下面展示一个完整 Mutt 配置例子,这可以让你通过 Mutt 访问 Gmail,而没有暴露你的 SMTP/IMAP 密码。用你的 Gmail ID 替代下面的 `yourgmailaccount`,此外你也需要在[你的 Goolgle 账户设置][3]中启用“支持不太安全的应用访问”。
|
||||
|
||||
set from = "yourgmailaccount@gmail.com"
|
||||
set realname = "Your Name"
|
||||
set smtp_url = "smtp://yourgmailaccount@smtp.gmail.com:587/"
|
||||
set imap_user = "yourgmailaccount@gmail.com"
|
||||
set folder = "imaps://imap.gmail.com:993"
|
||||
set spoolfile = "+INBOX"
|
||||
set postponed = "+[Google Mail]/Drafts"
|
||||
set trash = "+[Google Mail]/Trash"
|
||||
set header_cache =~/.mutt/cache/headers
|
||||
set message_cachedir =~/.mutt/cache/bodies
|
||||
set certificate_file =~/.mutt/certificates
|
||||
set move = no
|
||||
set imap_keepalive = 900
|
||||
|
||||
# encrypted IMAP/SMTP passwords
|
||||
source "gpg -d ~/.mutt/password.gpg |"
|
||||
|
||||
### 第四步(可选):配置 GPG 代理 ###
|
||||
|
||||
这时候,你将可以使用加密了IMAP/SMTP 密码的 Mutt。然而,每次你运行 Mutt,你都要先被提示输入一个 GPG 密码来使用你的私钥解密 IMAP/SMTP 密码。
|
||||
|
||||
![](https://c2.staticflickr.com/6/5667/23437064775_20c874940f_c.jpg)
|
||||
|
||||
如果你想避免这样的 GPG 密码提示,你可以部署一个 gpg-agent。它以后台守护进程方式运行,gpg-agent 可以安全地缓存你的 GPG 密码,无需手工干预,gpg 可以自动从 gpg-agent 获得你的 GPG 密码。如果你正在使用 Linux 桌面,你可以配置使用一些等同于 gpg-agent 的特定的桌面软件,例如,GNOME 桌面的 gnome-keyring-daemon。
|
||||
|
||||
你可以在基于 Debian 系统安装 gpg-agent:
|
||||
|
||||
$ sudo apt-get install gpg-agent
|
||||
|
||||
gpg-agent 在基于 Red Hat 的系统上是预装好的。
|
||||
|
||||
现在增加下面这些到你的 .bashrc 文件中。
|
||||
|
||||
envfile="$HOME/.gnupg/gpg-agent.env"
|
||||
if [[ -e "$envfile" ]] && kill -0 $(grep GPG_AGENT_INFO "$envfile" | cut -d: -f 2) 2>/dev/null; then
|
||||
eval "$(cat "$envfile")"
|
||||
else
|
||||
eval "$(gpg-agent --daemon --allow-preset-passphrase --write-env-file "$envfile")"
|
||||
fi
|
||||
export GPG_AGENT_INFO
|
||||
|
||||
重载 .bashrc,或简单的登出然后重新登录。
|
||||
|
||||
$ source ~/.bashrc
|
||||
|
||||
现在确认 GPG_AGENT_INFO 环境变量已经设置妥当。
|
||||
|
||||
$ echo $GPG_AGENT_INFO
|
||||
|
||||
/tmp/gpg-0SKJw8/S.gpg-agent:942:1
|
||||
|
||||
并且,当你输入 gpg-agent 命令时,你应该看到下面的信息。
|
||||
|
||||
$ gpg-agent
|
||||
|
||||
gpg-agent: gpg-agent running and available
|
||||
|
||||
一旦 gpg-agent 启动运行,它将会在第一次提示你输入密码时缓存你的 GPG 密码。随后你多次运行 Mutt ,都不会被提示要 GPG 密码(gpg-agent 一直开着,缓存就不会过期)。
|
||||
|
||||
![](https://c1.staticflickr.com/1/664/22809928093_3be57698ce_c.jpg)
|
||||
|
||||
### 结论 ###
|
||||
|
||||
在这个指导里,我提供一个使用 GnuPG 加密如 SMTP/IMAP 密码这样的 Mutt 敏感配置的方法。注意,如果你想在 Mutt 上使用 GnuPG 来加密或签名你的邮件,你可以参考[官方指南][2]关于 GPG 与 Mutt 结合的部分。
|
||||
|
||||
如果你知道任何使用 Mutt 的安全技巧,欢迎分享它。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://xmodulo.com/mutt-email-client-encrypted-passwords.html
|
||||
|
||||
作者:[Dan Nanni][a]
|
||||
译者:[wyangsun](https://github.com/wyangsun)
|
||||
校对:[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/gmail-command-line-linux-alpine.html
|
||||
[2]:http://dev.mutt.org/trac/wiki/MuttGuide/UseGPG
|
||||
[3]:https://www.google.com/settings/u/1/security
|
51
published/201602/20151206 Supporting secure DNS in glibc.md
Normal file
51
published/201602/20151206 Supporting secure DNS in glibc.md
Normal file
@ -0,0 +1,51 @@
|
||||
通过修改 glibc 支持 DNS 加密
|
||||
========================
|
||||
|
||||
域名解析系统(DNS)是互联网安全的许多薄弱环节之一;可以将应用程序所访问的主机对应的 IP 地址误导到其它地方。也就是说,会连接到错误的位置,从而引发中间人(man-in-the-middle )攻击等等。而 [DNSSEC][1] 扩展协议则通过为 DNS 信息建立一条加密的可信通道来解决这个漏洞。在正确地配置好 DNSSEC 后,应用程序将可以得到可靠的主机查询信息。通过关于[尝试将 DNSSEC 更好地集成到 GNU C 库里][2]的讨论,我们知道,确保 DNS 查询信息安全这件事并不是那么简单。
|
||||
|
||||
从某种意义上来说,这个问题多年以前就解决了,我们可以配置一个本地域名服务实现完整的 DNSSEC 校验(verification)并允许应用程序通过 glibc 函数来使用该服务。DNSSEC 甚至还可以用于提高其他领域的安全性,比如,它可以携带 SSH 或 TLS 密钥指纹,让应用程序可以确认其在与正确的服务器对话。不过,当我们希望确认这条自称带有 DNSSEC 校验的 DNS 结果是不是真的已通过认证的时候 - 也就是说,当我们想依赖 DNSSEC 所承诺的安全的时候,事情变得有点复杂。
|
||||
|
||||
### /etc/resolv.conf 问题
|
||||
|
||||
从 glibc 的角度来看,这个问题一部分是因为 glibc 本身并没有做 DNSSEC 校验,而是引用 /etc/resolv.conf 文件,从该文件里读出的服务器来做解析以及校验,再将结果返回给应用程序。如果应用程序使用底层 res_query() 接口,那结果中将会包含“已认证数据(authenticated data)”(AD)标识(如果域名服务器设定了的话)以表示 DNSSEC 校验已经成功。但是 glibc 却完全不知道提供这些结果的域名服务器的信用,所以它其实并不能告诉应用程序结果是否真的可靠。
|
||||
|
||||
由 glibc 的维护者 Carlos O'Donell 提出的建议是在 resolv.conf 文件里增加一个选项(dns-strip-dnssec-ad-bit)告诉 glibc 无条件移除 AD 标识。这个选项可以由各发行版设定,表示 DNSSEC 级别的 DNS 查询结果并不可靠。而一旦建立好合适的环境可以获得可靠的查询结果后,再移除这个选项。这样一来,虽然问题还没有完全解决,至少应用程序有依据来评价从 glibc 获取的 DNS 查询结果的可靠性。
|
||||
|
||||
一个可靠的环境配置应该是什么样?标准情况应该和这个差不太多:有一个本地域名服务器,通过环路(loopback)接口访问,作为访问 /etc/resolv.conf 文件的唯一条目。这个域名服务器应该配置来做校验,而在校验失败后就只是简单地不返回任何结果。绝大多数情况下,应用程序就不再需要关心 AD 标识,如果结果不可靠,应用程序就根本看不到。一些发行版已经倾向于这种模型,不过情况仍然不像一些人所设想的那么简单。
|
||||
|
||||
其中一个问题是,这种方式将 /etc/resolv.conf 文件放到整个系统可信任度的中心。但是,在一个典型的 Linux 系统里,有无数的 DHCP 客户端、网络脚本以及其他更多的程序可以修改这个文件。就像 Paul Wouters 所[指出][3]的,在短时间内锁定这个文件是不可能的。有时候这种修改是必须的:在一个无盘系统启动的时候,在自身的域名服务器启动之前也是需要域名服务的;一个系统的整个 DNS 环境也会根据所连接的网络不同而有所改变;运行在容器里的系统也最好是配置成使用宿主机的域名服务器;等等。
|
||||
|
||||
所以,现在一般认为,现有系统里的 /etc/resolv.conf 文件并不可信。于是有人提出增加另一个配置文件(/etc/secure-resolv.conf 或其他什么),但这并没有从根本上解决问题。除此之外,有些参与者觉得就算有一个运行在环路接口上的域名服务器也不是真正可靠,比如 Zack Weinberg 甚至[建议][4]系统管理员可以有意禁用 DNSSEC 确认(validation)。
|
||||
|
||||
既然当前系统里的配置不足以信任,那可以这样推断,在情况有改善能够取得可信的结果后,glibc 需要有一种方式来通知应用程序。可以是上面讨论的屏蔽 AD 标识的方式(或者与之相反,增加一个显示的“此域名服务器可以信任”选项);当然,这都需要一定程度上锁定系统以免 /etc/resolv.conf 受到任何不可预计的修改。按 Petr Spacek 的[建议][5],还有一种引申方式,就是提供一种途径允许应用程序查询 glibc 当前通讯的是不是本地域名服务器。
|
||||
|
||||
### 在 glibc 里来处理?
|
||||
|
||||
另一种方式是不管域名服务器,而是让 glibc 本身来做 DNSSEC 确认。不过,把这么大一坨加密相关代码放进 glibc 也是有很大阻力。这样将增加库本身的大小,从而感觉会增加使用它的应用程序的受攻击可能性。这个方向再引申一下,由 Zack 提出的[建议][6],可以把确认相关代码放到域名服务缓冲守护进程(nscd)里。因为 nscd 也是 glibc 的一部分,由 glibc 开发人员维护,因此在一定程度上可以相信能正确执行 DNSSEC 确认。而且 nscd 的通讯 socket 所在位置也是公开的,所以可以不考虑 /etc/resolv.conf 问题。不过,Carlos [担心][7]这种方式不能让那些不想使用 nscd 缓存功能的用户所接受;在他看来,基本可以排除 nscd 的方式。
|
||||
|
||||
所以,至少近期内,glibc 不太可能全部执行 DNSSEC 确认了的整个查询过程。这意味着,如果一个有安全考虑的应用要使用 glibc 库来查询域名,该库将需要提供一个标识来评价从独立域名服务器返回的结果有多大程度的可靠性。这几乎肯定需要发行版或系统管理员做出一些明确的改动。就像 Simo Sorce [说的][8]那样:
|
||||
|
||||
> 如果 glibc 不使用明确的配置选项来通知应用程序它所用的域名解析是可信的,不会有什么用……不改一下还有很大弊端,因为应用程序开发者将马上认识到他们不能信任从 glibc 获取的任何信息,从而在处理 DNSSEC 相关信息时就简单地不用它。
|
||||
|
||||
要配置一个系统能正常使用 DNSSEC 需要改动该系统的很多组件 - 这是一个发行版范围的问题,需要时间来完全解决。在这个转变过程中 glibc 所扮演的角色很可能会比较小,但是很重要的一部分:如果应用程序不实现一套自己的域名解析代码,glibc 很可能是保证 DNS 结果可信的唯一方式。在一个系统中运行多个 DNSSEC 实现方式看起来不像是一种安全的方式,所以最好还是把事情做对了。
|
||||
|
||||
glibc 项目目前并没有确定用哪种方式来做这个事情,虽然从 /etc/resolv.conf 文件里的某些标记看上去快好了。这种改动应该需要发布新版本;考虑到 glibc 开发的保守天性,很可能来不及加入预计二月份发布的 2.23 版本了。所以 glibc 中暂时还不会有更高安全性的 DNSSEC ,不过在这个方向上也有一些进展了。
|
||||
|
||||
---------------------------
|
||||
|
||||
via: https://lwn.net/Articles/664776/
|
||||
|
||||
作者:Jonathan Corbet
|
||||
译者:[zpl1025](https://github.com/zpl1025)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[1]: https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions
|
||||
[2]: http://lwn.net/Articles/664790/
|
||||
[3]: http://lwn.net/Articles/664794/
|
||||
[4]: http://lwn.net/Articles/664782/
|
||||
[5]: http://lwn.net/Articles/664784/
|
||||
[6]: http://lwn.net/Articles/664796/
|
||||
[7]: http://lwn.net/Articles/664786/
|
||||
[8]: http://lwn.net/Articles/664787/
|
79
published/201602/20151208 6 useful LibreOffice extensions.md
Normal file
79
published/201602/20151208 6 useful LibreOffice extensions.md
Normal file
@ -0,0 +1,79 @@
|
||||
LibreOffice 中的六大实用扩展组件
|
||||
================================================================================
|
||||
![](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/yearbook2015-osdc-lead-2.png)
|
||||
|
||||
图片来源:Opensource.com
|
||||
|
||||
LibreOffice 是最好的自由办公套件,并在所有的主要 Linux 发行版中得到应用。尽管 LibreOffice 已经拥有了大多数特性,它仍然可以通过添加一种叫做扩展(extension)的特定的附加组件来增加功能。
|
||||
|
||||
LibreOffice 的扩展组件的网站是 [extensions.libreoffice.org][1]。扩展组件只是一些工具,可以在安装主体上进行独立添加或者移除,以便增加新功能或者让已有功能更容易使用。
|
||||
|
||||
### 1. 多格式保存组件 ###
|
||||
|
||||
多格式保存组件可以根据用户的设置,同时将文档保存为开源文档(OpenDocument)、微软 Office 文档或者 PDF 文档。在你需要将微软 Office 文档格式转为标准的[开源文档格式][2]的时候,这个组件就很实用了,因为该组件同时提供了两种选择:互操作性较强的 ODF 文档格式,以及微软 Office 文档格式,以便同所有需要使用老旧的文档格式的用户保持兼容性。这样使管理员的文档迁移过程变得更具弹性、更易于管理。
|
||||
|
||||
**[下载 多格式保存组件][3]**
|
||||
|
||||
![Multiformatsave extension](https://opensource.com/sites/default/files/images/business-uploads/multiformatsave.png)
|
||||
|
||||
### 2. Writer 中可备选使用的查找与替换组件(备选搜索 (AltSearch)) ###
|
||||
|
||||
该组件向 Writer 中的查找与替换功能添加了许多新特性:可以查找和替换一段或多段文本;一次执行多个查找和替换;搜索:书签、笔记、文本字段、交叉引用和参考标志内容、名称或标志及其插入;搜索和插入脚注和尾注;通过名称来搜索表格对象、图像和文本框;搜索帮助手册页和分栏符以及创建和失活时间;根据光标位置搜索相同格式的文本。还可以保存/加载查找和替换参数,并在多个同时打开的文件中执行批处理。
|
||||
|
||||
**[下载 Writer 中可交替使用的查找与替换组件(交替搜索 (AltSearch))][4]**
|
||||
|
||||
![Alternative Find&amp;Replace add-on](https://opensource.com/sites/default/files/images/business-uploads/alternativefindreplace.png)
|
||||
|
||||
### 3. Pepito 清除组件 ###
|
||||
|
||||
Pepito 清除组件是一个 LibreOffice 扩展,主要用来快速清除并修复旧式扫描件、导入的 PDF 以及每个电子文本文档的格式错误。通过点击 LibreOffice 工具栏中的 Pepito 图标,用户可以打开一个用于分析文档并按类型呈现文档错误。当你将 PDF 文档转换为 ODF 文档时,这个工具就非常有用了,它会自动清除转换过程中出现的错误。
|
||||
|
||||
**[下载 Pepito 清除组件][5]**
|
||||
|
||||
![Pepito cleaner screenshot](https://opensource.com/sites/default/files/images/business-uploads/pepitocleaner.png)
|
||||
|
||||
### 4. ImpressRunner 组件###
|
||||
|
||||
Impress Runner 是将 [Impress][6] 文档转换成自动播放文件的扩展组件。该组件会添加两个图标,用以设置或移除自动开始播放的功能,我们还可以通过编辑 文件 | 属性 | 自定义属性 菜单来手动添加这两个图标,并将自动运行按钮添加到前四个文本域之一前面。在会议与组织活动时,如果幻灯片无人主持,这个扩展组件就变得非常有用。
|
||||
|
||||
**[下载 ImpressRunner 组件][7]**
|
||||
|
||||
### 5. 导出为图像组件 ###
|
||||
|
||||
导出为图像组件为 Impress 和 [Draw][8] 中文件菜单里增加了一个入口——“导出为图像...”,主要用于将所有的幻灯片和页面导出成 JPG、PNG、GIF、BMP 和 TIFF 等图像格式,并且允许用户自定义导出图像的名称、大小以及其他参数。
|
||||
|
||||
**[下载 导出为图像组件][9]**
|
||||
|
||||
![Export as images extension](https://opensource.com/sites/default/files/images/business-uploads/exportasimages.png)
|
||||
|
||||
### 6. Anaphraseus 组件###
|
||||
|
||||
Anaphraseus 是一个 CAT(Computer-Aided Translation,计算机辅助翻译)工具组件,用来创建、管理双语翻译。Anaphraseus 是一个 LibreOffice 宏集合,可以作为扩展组件或者用在单独的文档中。最开始,Anaphraseus 支持快速翻译(Wordfast)格式,但现在它可以导入或者导出成 TMX 格式。其主要特性:分本分割、在翻译记录(Translation Memory)中模糊搜索、术语识别以及导入导出 TMX(OmegaT translation memory format,OmegaT 翻译存储格式)。
|
||||
|
||||
**[下载 Anaphraseus 组件][10]**
|
||||
|
||||
![Anaphraseus screenshot](https://opensource.com/sites/default/files/images/business-uploads/anaphraseus.png)
|
||||
|
||||
你是否也有自己喜欢和推荐的 LibreOffice 组件呢?在评论中告诉大家吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/business/15/12/6-useful-libreoffice-extensions
|
||||
|
||||
作者:[Italo Vignoli][a]
|
||||
译者:[GHLandy](https://github.com/GHLandy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://opensource.com/users/italovignoli
|
||||
[1]:http://extensions.libreoffice.org/
|
||||
[2]:http://www.opendocumentformat.org/
|
||||
[3]:http://extensions.libreoffice.org/extension-center/multisave-1
|
||||
[4]:http://extensions.libreoffice.org/extension-center/alternative-dialog-find-replace-for-writer
|
||||
[5]:http://pepitoweb.altervista.org/pepito_cleaner/index.php
|
||||
[6]:https://www.libreoffice.org/discover/impress/
|
||||
[7]:http://extensions.libreoffice.org/extension-center/impressrunner
|
||||
[8]:https://www.libreoffice.org/discover/draw/
|
||||
[9]:http://extensions.libreoffice.org/extension-center/export-as-images
|
||||
[10]:http://anaphraseus.sourceforge.net/
|
@ -0,0 +1,268 @@
|
||||
在 FreeBSD 10.2 上如何通过配置 Apache 和 SSL 安装 Bugzilla
|
||||
================================================================================
|
||||
|
||||
Bugzilla 是一款开源的 Web 应用,用于 bug 跟踪系统和测试工具,由 mozilla 开发,并采用 Mozilla 公共许可证授权(MPL)。它经常被一些高科技公司如 mozilla、红帽公司和 gnome 使用。Bugzilla 起初由 Terry Weissman开发于1998年,它用 perl 语言编写,用 MySQL 作为后端数据库。它是一款旨在帮助管理软件开发的服务器软件,它有丰富的功能、高度优化的数据库、卓越的安全性、高级的搜索工具、集成了邮件功能等等。
|
||||
|
||||
在本教程中,我们将安装 bugzilla 5.0 ,采用 apache 作为 Web 服务器,并为它启用 SSL,然后在 freebsd 10.2 上安装 mysql 5.1 来作为数据库系统。
|
||||
|
||||
#### 准备 ####
|
||||
|
||||
- FreeBSD 10.2 - 64位
|
||||
- Root 权限
|
||||
|
||||
### 第一步 - 更新系统 ###
|
||||
|
||||
用 ssh 登录 freebsd 服务器,并更新软件库:
|
||||
|
||||
sudo su
|
||||
freebsd-update fetch
|
||||
freebsd-update install
|
||||
|
||||
### 第二步 - 安装并配置 Apache ###
|
||||
|
||||
在这一步我们将使用 pkg 命令从 freebsd 软件库中安装 apache,然后在 apache24 目录下编辑 "httpd.conf" 文件,来配置 apache 以启用 SSL 和 CGI 支持。
|
||||
|
||||
用 pkg 命令安装 apache:
|
||||
|
||||
pkg install apache24
|
||||
|
||||
进入 apache 目录并用 nano 编辑器编辑"httpd.conf"文件:
|
||||
|
||||
cd /usr/local/etc/apache24
|
||||
nano -c httpd.conf
|
||||
|
||||
取消下面列出行的注释:
|
||||
|
||||
#第70行
|
||||
LoadModule authn_socache_module libexec/apache24/mod_authn_socache.so
|
||||
|
||||
#第89行
|
||||
LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
|
||||
|
||||
#第117行
|
||||
LoadModule expires_module libexec/apache24/mod_expires.so
|
||||
|
||||
#第141行,启用SSL
|
||||
LoadModule ssl_module libexec/apache24/mod_ssl.so
|
||||
|
||||
#第162行,支持cgi
|
||||
LoadModule cgi_module libexec/apache24/mod_cgi.so
|
||||
|
||||
#第174行,启用mod_rewrite
|
||||
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
|
||||
|
||||
#第219行,服务器名配置
|
||||
ServerName 127.0.0.1:80
|
||||
|
||||
保存并退出。
|
||||
|
||||
接着,我们需要从 freebsd 库中安装 mod perl,并启用它:
|
||||
|
||||
pkg install ap24-mod_perl2
|
||||
|
||||
启用 mod_perl,编辑"httpd.conf"文件并添加"Loadmodule"行:
|
||||
|
||||
nano -c httpd.conf
|
||||
|
||||
添加该行:
|
||||
|
||||
#第175行
|
||||
LoadModule perl_module libexec/apache24/mod_perl.so
|
||||
|
||||
保存并退出。
|
||||
|
||||
在启用 apache 之前,用 sysrc 命令添加以下行作为开机启动项:
|
||||
|
||||
sysrc apache24_enable=yes
|
||||
service apache24 start
|
||||
|
||||
### 第三步 - 安装并配置 MySQL 数据库 ###
|
||||
|
||||
我们要用 mysql 5.1 来作为后端数据库并且支持 perl 模块。用 pkg 命令安装 mysql 5.1:
|
||||
|
||||
pkg install p5-DBD-mysql51 mysql51-server mysql51-client
|
||||
|
||||
现在我们要将 mysql 服务设置为开机启动,然后为 mysql 配置 root 密码。
|
||||
|
||||
运行以下命令来完成上述所有操作:
|
||||
|
||||
sysrc mysql_enable=yes
|
||||
service mysql-server start
|
||||
mysqladmin -u root password aqwe123
|
||||
|
||||
注意:
|
||||
|
||||
这里 mysql 密码为:aqwe123
|
||||
|
||||
![Configure MySQL Password](http://blog.linoxide.com/wp-content/uploads/2015/12/Configure-MySQL-Password.png)
|
||||
|
||||
以上步骤都完成之后,我们用 root 登录 mysql shell,然后为 bugzilla 安装创建一个新的数据库和用户。
|
||||
|
||||
用以下命令登录 mysql shell:
|
||||
|
||||
mysql -u root -p
|
||||
password: aqwe123
|
||||
|
||||
添加数据库:
|
||||
|
||||
create database bugzilladb;
|
||||
create user bugzillauser@localhost identified by 'bugzillauser@';
|
||||
grant all privileges on bugzilladb.* to bugzillauser@localhost identified by 'bugzillauser@';
|
||||
flush privileges;
|
||||
\q
|
||||
|
||||
![Creating Database for Bugzilla](http://blog.linoxide.com/wp-content/uploads/2015/12/Creating-Database-for-Bugzilla.png)
|
||||
|
||||
bugzilla 的数据库创建好了,名字为"bugzilladb",用户名和密码分别为"bugzillauser"和"bugzillauser@"。
|
||||
|
||||
### 第四步 - 生成新的 SSL 证书 ###
|
||||
|
||||
在 bugzilla 站点的 "ssl" 目录里生成新的自签名 SSL 证书。
|
||||
|
||||
前往 apache24 目录并在此创建新目录 "ssl":
|
||||
|
||||
cd /usr/local/etc/apache24/
|
||||
mkdir ssl; cd ssl
|
||||
|
||||
接着,用 openssl 命令生成证书文件,然后更改其权限:
|
||||
|
||||
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /usr/local/etc/apache24/ssl/bugzilla.key -out /usr/local/etc/apache24/ssl/bugzilla.crt
|
||||
chmod 600 *
|
||||
|
||||
### 第五步 - 配置虚拟主机 ###
|
||||
|
||||
我们将在 "/usr/local/www/bugzilla" 目录里安装 bugzilla,所以我们必须为它创建新的虚拟主机配置。
|
||||
|
||||
前往 apache 目录并为虚拟主机文件创建名为 "vhost" 的新目录:
|
||||
|
||||
cd /usr/local/etc/apache24/
|
||||
mkdir vhost; cd vhost
|
||||
|
||||
现在为虚拟主机文件创建新文件 "bugzilla.conf":
|
||||
|
||||
nano -c bugzilla.conf
|
||||
|
||||
将以下配置粘贴进去:
|
||||
|
||||
<VirtualHost *:80>
|
||||
ServerName mybugzilla.me
|
||||
ServerAlias www.mybuzilla.me
|
||||
DocumentRoot /usr/local/www/bugzilla
|
||||
Redirect permanent / https://mybugzilla.me/
|
||||
</VirtualHost>
|
||||
|
||||
Listen 443
|
||||
<VirtualHost _default_:443>
|
||||
ServerName mybugzilla.me
|
||||
DocumentRoot /usr/local/www/bugzilla
|
||||
|
||||
ErrorLog "/var/log/mybugzilla.me-error_log"
|
||||
CustomLog "/var/log/mybugzilla.me-access_log" common
|
||||
|
||||
SSLEngine On
|
||||
SSLCertificateFile /usr/local/etc/apache24/ssl/bugzilla.crt
|
||||
SSLCertificateKeyFile /usr/local/etc/apache24/ssl/bugzilla.key
|
||||
|
||||
<Directory "/usr/local/www/bugzilla">
|
||||
AddHandler cgi-script .cgi
|
||||
Options +ExecCGI
|
||||
DirectoryIndex index.cgi index.html
|
||||
AllowOverride Limit FileInfo Indexes Options
|
||||
Require all granted
|
||||
</Directory>
|
||||
</VirtualHost>
|
||||
|
||||
保存并退出。
|
||||
|
||||
上述都完成之后,为 bugzilla 安装创建新目录,并在 httpd.conf 文件添加虚拟主机配置来启用 bugzilla虚拟主机。
|
||||
|
||||
在 "apache24" 目录下运行以下命令:
|
||||
|
||||
mkdir -p /usr/local/www/bugzilla
|
||||
cd /usr/local/etc/apache24/
|
||||
nano -c httpd.conf
|
||||
|
||||
文末,添加以下配置:
|
||||
|
||||
Include etc/apache24/vhost/*.conf
|
||||
|
||||
保存并退出。
|
||||
|
||||
现在用 "apachectl" 命令测试一下 apache 的配置并重启它:
|
||||
|
||||
apachectl configtest
|
||||
service apache24 restart
|
||||
|
||||
### 第六步 - 安装 Bugzilla ###
|
||||
|
||||
我们可以通过下载源来手动安装 bugzilla 了,或从 freebsd 库中安装也可以。在这一步中我们将用 pkg 命令从 freebsd 库中安装 bugzilla:
|
||||
|
||||
pkg install bugzilla50
|
||||
|
||||
以上步骤都完成之后,前往 bugzilla 安装目录并安装所有 bugzilla 需要的 perl 模块。
|
||||
|
||||
cd /usr/local/www/bugzilla
|
||||
./install-module --all
|
||||
|
||||
要等到所有都完成,这需要点时间。
|
||||
|
||||
下一步,在 bugzilla 的安装目录中执行 "checksetup.pl" 文件来生成配置文件 "localconfig"。
|
||||
|
||||
./checksetup.pl
|
||||
|
||||
你会看到一条关于数据库配置错误的消息,你得用 nano 编辑器编辑一下 "localconfig" 文件:
|
||||
|
||||
nano -c localconfig
|
||||
|
||||
现在添加第三步创建的数据库。
|
||||
|
||||
#第57行
|
||||
$db_name = 'bugzilladb';
|
||||
|
||||
#第60行
|
||||
$db_user = 'bugzillauser';
|
||||
|
||||
#第67行
|
||||
$db_pass = 'bugzillauser@';
|
||||
|
||||
保存并退出。
|
||||
|
||||
然后再次运行 "checksetup.pl":
|
||||
|
||||
./checksetup.pl
|
||||
|
||||
你会收到输入邮箱名和管理员账号的提示,你只要输入你的邮箱、用户名和密码就行了。
|
||||
|
||||
![Admin Setup](http://blog.linoxide.com/wp-content/uploads/2015/12/Admin-Setup.png)
|
||||
|
||||
最后,我们需要把安装目录的属主改成 "www",然后用服务命令重启 apache:
|
||||
|
||||
cd /usr/local/www/
|
||||
chown -R www:www bugzilla
|
||||
service apache24 restart
|
||||
|
||||
现在 Bugzilla 已经安装好了,你可以通过访问 mybugzilla.me 来查看,并且将会重定向到 https 连接。
|
||||
|
||||
Bugzilla 首页:
|
||||
|
||||
![Bugzilla Home](http://blog.linoxide.com/wp-content/uploads/2015/12/Bugzilla-Home.png)
|
||||
|
||||
Bugzilla admin 面板:
|
||||
|
||||
![Bugzilla Admin Page](http://blog.linoxide.com/wp-content/uploads/2015/12/Bugzilla-Admin-Page.png)
|
||||
|
||||
### 结论 ###
|
||||
|
||||
Bugzilla 是一个基于 web 的应用,并能帮助你管理软件开发,它用 perl 开发并以 MySQL 作为数据库系统。Bugzilla 帮助 mozilla、redhat、gnome 等公司完成软件开发工作。Bugzilla 有很多功能并易于配置和安装。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://linoxide.com/tools/install-bugzilla-apache-ssl-freebsd-10-2/
|
||||
|
||||
作者:[Arul][a]
|
||||
译者:[ZTinoZ](https://github.com/ZTinoZ)
|
||||
校对:[Caroline](https://github.com/carolinewuyan)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://linoxide.com/author/arulm/
|
@ -1,16 +1,16 @@
|
||||
Linux / Unix桌面之趣:终端上的圣诞树
|
||||
Linux/Unix 桌面趣事:终端上的圣诞树
|
||||
================================================================================
|
||||
给你的Linux或Unix控制台创造一棵圣诞树玩玩吧。在此之前,需要先安装一个Perl模块,命名为Acme::POE::Tree。这是一棵很喜庆的圣诞树,我已经在Linux、OSX和类Unix系统上验证过了。
|
||||
|
||||
给你的Linux或Unix控制台创造一棵圣诞树玩玩吧。在此之前,需要先安装一个Perl模块,命名为Acme::POE::Tree。这是一棵很喜庆的圣诞树,我已经在Linux、OSX和类Unix系统上验证过了。
|
||||
|
||||
### 安装 Acme::POE::Tree ###
|
||||
|
||||
安装perl模块最简单的办法就是使用cpan(Perl综合典藏网)。打开终端,把下面的指令敲进去便可安装Acme::POE::Tree。
|
||||
安装perl模块最简单的办法就是使用CPAN(Perl综合典藏网(Comprehensive Perl Archive Network))。打开终端,把下面的指令敲进去便可安装Acme::POE::Tree。
|
||||
|
||||
## 以root身份运行 ##
|
||||
perl -MCPAN -e 'install Acme::POE::Tree'
|
||||
|
||||
**案例输出:**
|
||||
**示例输出:**
|
||||
|
||||
Installing /home/vivek/perl5/man/man3/POE::NFA.3pm
|
||||
Installing /home/vivek/perl5/man/man3/POE::Kernel.3pm
|
||||
@ -49,7 +49,7 @@ Linux / Unix桌面之趣:终端上的圣诞树
|
||||
|
||||
perl -MAcme::POE::Tree -e 'Acme::POE::Tree->new()->run()'
|
||||
|
||||
**案例输出**
|
||||
**示例输出**
|
||||
|
||||
![Gif 01: An animated christmas tree in Perl](http://s0.cyberciti.org/uploads/cms/2015/12/perl-tree.gif)
|
||||
|
||||
@ -71,7 +71,7 @@ Gif 01: 一棵用Perl写的喜庆圣诞树
|
||||
);
|
||||
$tree->run();
|
||||
|
||||
这样就可以通过修改star_delay、run_for和light_delay参数的值来自定义你的树了。一棵提供消遣的终端圣诞树就此诞生。
|
||||
这样就可以通过修改star_delay、run_for和light_delay参数的值来自定义你的树了。一棵好玩的终端圣诞树就此诞生。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -79,6 +79,6 @@ via: http://www.cyberciti.biz/open-source/command-line-hacks/linux-unix-desktop-
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[soooogreen](https://github.com/soooogreen)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
@ -0,0 +1,371 @@
|
||||
怎样在 ubuntu 和 debian 中通过命令行管理 KVM
|
||||
================================================================================
|
||||
|
||||
有很多不同的方式去管理运行在 KVM 管理程序上的虚拟机。例如,virt-manager 就是一个流行的基于图形界面的前端虚拟机管理工具。然而,如果你想要在没有图形窗口的服务器环境下使用 KVM ,那么基于图形界面的解决方案显然是行不通的。事实上,你可以单纯使用包装了 kvm 命令行脚本的命令行来管理 KVM 虚拟机。作为替代方案,你可以使用 virsh 这个容易使用的命令行程序来管理客户虚拟机。在 virsh 中,它通过和 libvirtd 服务通信来达到控制虚拟机的目的,而 libvirtd 可以控制多个不同的虚拟机管理器,包括 KVM,Xen,QEMU,LXC 和 OpenVZ。
|
||||
|
||||
当你想要对虚拟机的前期准备和后期管理实现自动化操作时,像 virsh 这样的命令行管理工具是非常有用的。同样,virsh 支持多个管理器也就意味着你可以通过相同的 virsh 接口去管理不同的虚拟机管理器。
|
||||
|
||||
在这篇文章中,我会示范**怎样在 ubuntu 和 debian 上通过使用 virsh 命令行去运行 KVM**。
|
||||
|
||||
### 第一步:确认你的硬件平台支持虚拟化 ###
|
||||
|
||||
第一步,首先要确认你的 CPU 支持硬件虚拟化扩展(e.g.,Intel VT 或者 AMD-V),这是 KVM 对硬件的要求。下面的命令可以检查硬件是否支持虚拟化。
|
||||
|
||||
```
|
||||
$ egrep '(vmx|svm)' --color /proc/cpuinfo
|
||||
```
|
||||
|
||||
![](https://c2.staticflickr.com/2/1505/24050288606_758a44c4c6_c.jpg)
|
||||
|
||||
如果在输出中不包含 vmx 或者 svm 标识,那么就意味着你的 cpu 不支持硬件虚拟化。因此你不能在你的机器上使用 KVM 。确认了 cpu 支持 vmx 或者 svm 之后,接下来开始安装 KVM。
|
||||
|
||||
对于 KVM 来说,它不要求运行在拥有 64 位内核系统的主机上,但是通常我们会推荐在 64 位系统的主机上面运行 KVM。
|
||||
|
||||
### 第二步:安装KVM ###
|
||||
|
||||
使用 `apt-get` 安装 KVM 和相关的用户空间工具。
|
||||
|
||||
```
|
||||
$ sudo apt-get install qemu-kvm libvirt-bin
|
||||
```
|
||||
|
||||
安装期间,libvirtd 用户组(在 debian 上是 libvirtd-qemu 用户组)将会被创建,并且你的用户 id 将会被自动添加到该组中。这样做的目的是让你可以以一个普通用户而不是 root 用户的身份去管理虚拟机。你可以使用 `id` 命令来确认这一点,下面将会告诉你怎么去显示你的组 id:
|
||||
|
||||
```
|
||||
$ id <your-userID>
|
||||
```
|
||||
|
||||
![](https://c2.staticflickr.com/6/5597/15432586092_64dfb867d3_c.jpg)
|
||||
|
||||
如果因为某些原因,libvirt(在 debian 中是 libvirt-qemu)没有在你的组 id 中被找到,你也可以手动将你自己添加到对应的组中,如下所示:
|
||||
|
||||
在 ubuntu 上:
|
||||
|
||||
```
|
||||
$ sudo adduser [youruserID] libvirtd
|
||||
```
|
||||
|
||||
在 debian 上:
|
||||
|
||||
```
|
||||
$ sudo adduser [youruserID] libvirt-qemu
|
||||
```
|
||||
|
||||
按照如下命令重新载入更新后的组成员关系。如果要求输入密码,那么输入你的登陆密码即可。
|
||||
|
||||
```
|
||||
$ exec su -l $USER
|
||||
```
|
||||
|
||||
这时,你应该可以以普通用户的身份去执行 virsh 了。做一个如下所示的测试,这个命令将会以列表的形式列出可用的虚拟机(当前的列表是空的)。如果你没有遇到权限问题,那意味着到目前为止一切都是正常的。
|
||||
|
||||
$ virsh list
|
||||
|
||||
----------
|
||||
|
||||
Id Name State
|
||||
----------------------------------------------------
|
||||
|
||||
### 第三步:配置桥接网络 ###
|
||||
|
||||
为了使 KVM 虚拟机能够访问外部网络,一种方法是通过在 KVM 宿主机上创建 Linux 桥来实现。创建之后的桥能够将虚拟机的虚拟网卡和宿主机的物理网卡连接起来,因此,虚拟机能够发送和接收由物理网卡传输的数据包。这种方式叫做网络桥接。
|
||||
|
||||
下面将告诉你如何创建并且配置网桥,我们创建一个网桥称它为 br0。
|
||||
|
||||
首先,安装一个必需的包,然后用命令行创建一个网桥。
|
||||
|
||||
```
|
||||
$ sudo apt-get install bridge-utils
|
||||
$ sudo brctl addbr br0
|
||||
```
|
||||
|
||||
下一步就是配置已经创建好的网桥,即修改位于 `/etc/network/interfaces` 的配置文件。我们需要将该桥接网卡设置成开机启动。为了修改该配置文件,你需要关闭你的操作系统上的网络管理器(如果你在使用它的话)。跟随[操作指南][1]的说明去关闭网络管理器。
|
||||
|
||||
关闭网络管理器之后,接下来就是通过修改配置文件来配置网桥了。
|
||||
|
||||
```
|
||||
#auto eth0
|
||||
#iface eth0 inet dhcp
|
||||
|
||||
auto br0
|
||||
iface br0 inet dhcp
|
||||
bridge_ports eth0
|
||||
bridge_stp off
|
||||
bridge_fd 0
|
||||
bridge_maxwait 0
|
||||
```
|
||||
|
||||
在上面的配置中,我假设 eth0 是主要网卡,它也是连接到外网的网卡,同样,我假设 eth0 将会通过 DHCP 协议自动获取 ip 地址。注意,之前在 `/etc/network/interfaces` 中还没有对 eth0 进行任何配置。桥接网卡 br0 引用了 eth0 的配置,而 eth0 也会受到 br0 的制约。
|
||||
|
||||
重启网络服务,并确认网桥已经被成功的配置好。如果成功的话,br0 的 ip 地址将会是 eth0 自动分配的 ip 地址,而且 eth0 不会被分配任何 ip 地址。
|
||||
|
||||
```
|
||||
$ sudo /etc/init.d/networking restart
|
||||
$ ifconfig
|
||||
```
|
||||
|
||||
如果因为某些原因,eth0 仍然保留了之前分配给了 br0 的 ip 地址,那么你可能必须手动删除 eth0 的 ip 地址。
|
||||
|
||||
![](https://c2.staticflickr.com/2/1698/23780708850_66cd7ba6ea_c.jpg)
|
||||
|
||||
### 第四步:用命令行创建一个虚拟机 ###
|
||||
|
||||
对于虚拟机来说,它的配置信息被存储在它对应的xml文件中。因此,创建一个虚拟机的第一步就是准备一个与虚拟机对应的 xml 文件。
|
||||
|
||||
下面是一个示例 xml 文件,你可以根据需要手动修改它。
|
||||
|
||||
```
|
||||
<domain type='kvm'>
|
||||
<name>alice</name>
|
||||
<uuid>f5b8c05b-9c7a-3211-49b9-2bd635f7e2aa</uuid>
|
||||
<memory>1048576</memory>
|
||||
<currentMemory>1048576</currentMemory>
|
||||
<vcpu>1</vcpu>
|
||||
<os>
|
||||
<type>hvm</type>
|
||||
<boot dev='cdrom'/>
|
||||
</os>
|
||||
<features>
|
||||
<acpi/>
|
||||
</features>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/bin/kvm</emulator>
|
||||
<disk type="file" device="disk">
|
||||
<driver name="qemu" type="raw"/>
|
||||
<source file="/home/dev/images/alice.img"/>
|
||||
<target dev="vda" bus="virtio"/>
|
||||
<address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>
|
||||
</disk>
|
||||
<disk type="file" device="cdrom">
|
||||
<driver name="qemu" type="raw"/>
|
||||
<source file="/home/dev/iso/CentOS-6.5-x86_64-minimal.iso"/>
|
||||
<target dev="hdc" bus="ide"/>
|
||||
<readonly/>
|
||||
<address type="drive" controller="0" bus="1" target="0" unit="0"/>
|
||||
</disk>
|
||||
<interface type='bridge'>
|
||||
<source bridge='br0'/>
|
||||
<mac address="00:00:A3:B0:56:10"/>
|
||||
</interface>
|
||||
<controller type="ide" index="0">
|
||||
<address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
|
||||
</controller>
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<graphics type='vnc' port='-1' autoport="yes" listen='0.0.0.0'/>
|
||||
<console type='pty'>
|
||||
<target port='0'/>
|
||||
</console>
|
||||
</devices>
|
||||
</domain>
|
||||
```
|
||||
|
||||
上面的主机xml配置文件定义了如下的虚拟机内容。
|
||||
|
||||
- 1GB内存,一个虚拟cpu和一个硬件驱动
|
||||
|
||||
- 磁盘镜像:`/home/dev/images/alice.img`
|
||||
|
||||
- 从 CD-ROM 引导(`/home/dev/iso/CentOS-6.5-x86_64-minomal.iso`)
|
||||
|
||||
- 网络:一个桥接到 br0 的虚拟网卡
|
||||
|
||||
- 通过 VNC 远程访问
|
||||
|
||||
`<uuid></uuid>` 中的 UUID 字符串可以随机生成。为了得到一个随机的 uuid 字符串,你可能需要使用 uuid 命令行工具。
|
||||
|
||||
```
|
||||
$ sudo apt-get install uuid
|
||||
$ uuid
|
||||
```
|
||||
|
||||
生成一个主机 xml 配置文件的方式就是通过一个已经存在的虚拟机来导出它的 xml 配置文件。如下所示。
|
||||
|
||||
```
|
||||
$ virsh dumpxml alice > bob.xml
|
||||
```
|
||||
|
||||
![](https://c2.staticflickr.com/6/5808/23968234602_25e8019ec8_c.jpg)
|
||||
|
||||
### 第五步:使用命令行启动虚拟机 ###
|
||||
|
||||
在启动虚拟机之前,我们需要创建它的初始磁盘镜像。为此,你需要使用 qemu-img 命令来生成一个 qemu-kvm 镜像。下面的命令将会创建 10 GB 大小的空磁盘,并且它是 qcow2 格式的。
|
||||
|
||||
```
|
||||
$ qemu-img create -f qcow2 /home/dev/images/alice.img 10G
|
||||
```
|
||||
|
||||
使用 qcow2 格式的磁盘镜像的好处就是它在创建之初并不会给它分配全部大小磁盘容量(这里是 10 GB),而是随着虚拟机中文件的增加而逐渐增大。因此,它对空间的使用更加有效。
|
||||
|
||||
现在,你可以通过使用之前创建的 xml 配置文件启动你的虚拟机了。下面的命令将会创建一个虚拟机,然后自动启动它。
|
||||
|
||||
```
|
||||
$ virsh create alice.xml
|
||||
Domain alice created from alice.xml
|
||||
```
|
||||
|
||||
**注意**: 如果你对一个已经存在的虚拟机执行了了上面的命令,那么这个操作将会在没有任何警告的情况下抹去那个已经存在的虚拟机的全部信息。如果你已经创建了一个虚拟机,你可能会使用下面的命令来启动虚拟机。
|
||||
|
||||
```
|
||||
$ virsh start alice.xml
|
||||
```
|
||||
|
||||
使用如下命令确认一个新的虚拟机已经被创建并成功的被启动。
|
||||
|
||||
```
|
||||
$ virsh list
|
||||
```
|
||||
|
||||
Id Name State
|
||||
----------------------------------------------------
|
||||
3 alice running
|
||||
|
||||
同样,使用如下命令确认你的虚拟机的虚拟网卡已经被成功的添加到了你先前创建的 br0 网桥中。
|
||||
|
||||
$ sudo brctl show
|
||||
|
||||
![](https://c2.staticflickr.com/2/1546/23449585383_a371e9e579_c.jpg)
|
||||
|
||||
### 远程连接虚拟机 ###
|
||||
|
||||
为了远程访问一个正在运行的虚拟机的控制台,你可以使用VNC客户端。
|
||||
|
||||
首先,你需要使用如下命令找出用于虚拟机的VNC端口号。
|
||||
|
||||
```
|
||||
$ sudo netstat -nap | egrep '(kvm|qemu)'
|
||||
```
|
||||
|
||||
![](https://c2.staticflickr.com/6/5633/23448144274_49045bc868_c.jpg)
|
||||
|
||||
在这个例子中,用于 alice 虚拟机的 VNC 端口号是 5900。 然后启动一个VNC客户端,连接到一个端口号为5900的VNC服务器。在我们的例子中,虚拟机支持由CentOS光盘文件启动。
|
||||
|
||||
![](https://c2.staticflickr.com/2/1533/24076369675_99408972a4_c.jpg)
|
||||
|
||||
### 使用 virsh 管理虚拟机 ###
|
||||
|
||||
下面列出了 virsh 命令的常规用法:
|
||||
|
||||
创建客户机并且启动虚拟机:
|
||||
|
||||
```
|
||||
$ virsh create alice.xml
|
||||
```
|
||||
|
||||
停止虚拟机并且删除客户机:
|
||||
|
||||
```
|
||||
$ virsh destroy alice
|
||||
```
|
||||
|
||||
关闭虚拟机(不用删除它):
|
||||
|
||||
```
|
||||
$ virsh shutdown alice
|
||||
```
|
||||
|
||||
暂停虚拟机:
|
||||
|
||||
```
|
||||
$ virsh suspend alice
|
||||
```
|
||||
|
||||
恢复虚拟机:
|
||||
|
||||
```
|
||||
$ virsh resume alice
|
||||
```
|
||||
|
||||
访问正在运行的虚拟机的控制台:
|
||||
|
||||
```
|
||||
$ virsh console alice
|
||||
```
|
||||
|
||||
设置虚拟机开机启动:
|
||||
|
||||
```
|
||||
$ virsh autostart alice
|
||||
```
|
||||
|
||||
查看虚拟机的详细信息:
|
||||
|
||||
```
|
||||
$ virsh dominfo alice
|
||||
```
|
||||
|
||||
编辑虚拟机的配置文件:
|
||||
|
||||
```
|
||||
$ virsh edit alice
|
||||
```
|
||||
|
||||
上面的这个命令将会使用一个默认的编辑器来调用主机配置文件。该配置文件中的任何改变都将自动被libvirt验证其正确性。
|
||||
|
||||
你也可以在一个virsh会话中管理虚拟机。下面的命令会创建并进入到一个virsh会话中:
|
||||
|
||||
```
|
||||
$ virsh
|
||||
```
|
||||
|
||||
在 virsh 提示中,你可以使用任何 virsh 命令。
|
||||
|
||||
![](https://c2.staticflickr.com/6/5645/23708565129_b1ef968b30_c.jpg)
|
||||
|
||||
### 问题处理 ###
|
||||
|
||||
1. 我在创建虚拟机的时候遇到了一个错误:
|
||||
|
||||
error: internal error: no supported architecture for os type 'hvm'
|
||||
|
||||
如果你的硬件不支持虚拟化的话你可能就会遇到这个错误。(例如,Intel VT或者AMD-V),这是运行KVM所必需的。如果你遇到了这个错误,而你的cpu支持虚拟化,那么这里可以给你一些可用的解决方案:
|
||||
|
||||
首先,检查你的内核模块是否丢失。
|
||||
|
||||
```
|
||||
$ lsmod | grep kvm
|
||||
```
|
||||
|
||||
如果内核模块没有加载,你必须按照如下方式加载它。
|
||||
|
||||
```
|
||||
$ sudo modprobe kvm_intel (for Intel processor)
|
||||
$ sudo modprobe kvm_amd (for AMD processor)
|
||||
```
|
||||
|
||||
第二个解决方案就是添加 `--connect qemu:///system` 参数到 `virsh` 命令中,如下所示。当你正在你的硬件平台上使用超过一个虚拟机管理器的时候就需要添加这个参数(例如,VirtualBox,VMware)。
|
||||
|
||||
```
|
||||
$ virsh --connect qemu:///system create alice.xml
|
||||
```
|
||||
|
||||
2. 当我试着访问我的虚拟机的登陆控制台的时候遇到了错误:
|
||||
|
||||
```
|
||||
$ virsh console alice
|
||||
error: internal error: cannot find character device <null>
|
||||
```
|
||||
|
||||
这个错误发生的原因是你没有在你的虚拟机配置文件中定义控制台设备。在 xml 文件中加上下面的内部设备部分即可。
|
||||
|
||||
```
|
||||
<console type='pty'>
|
||||
<target port='0'/>
|
||||
</console>
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://xmodulo.com/use-kvm-command-line-debian-ubuntu.html
|
||||
|
||||
作者:[Dan Nanni][a]
|
||||
译者:[kylepeng93](https://github.com/kylepeng93 )
|
||||
校对:[Ezio](https://github.com/oska874)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://xmodulo.com/author/nanni
|
||||
[1]:http://xmodulo.com/disable-network-manager-linux.html
|
@ -0,0 +1,103 @@
|
||||
如何将 Debian Linux 中的默认的 Python 版本切换为替代版本
|
||||
====================================================
|
||||
|
||||
当你安装 Debian Linux 时,安装过程有可能同时为你提供多个可用的 Python 版本,因此系统中会存在多个 Python 的可执行二进制文件。你可以按照以下方法使用 `ls` 命令来查看你的系统中都有那些 Python 的二进制文件可供使用。
|
||||
|
||||
```
|
||||
$ ls /usr/bin/python*
|
||||
/usr/bin/python /usr/bin/python2 /usr/bin/python2.7 /usr/bin/python3 /usr/bin/python3.4 /usr/bin/python3.4m /usr/bin/python3m
|
||||
```
|
||||
|
||||
执行如下命令查看默认的 Python 版本信息:
|
||||
|
||||
```
|
||||
$ python --version
|
||||
Python 2.7.8
|
||||
```
|
||||
|
||||
###1、基于用户修改 Python 版本:
|
||||
|
||||
想要为某个特定用户修改 Python 版本,只需要在其 home 目录下创建一个 `alias`(别名) 即可。打开该用户的 `~/.bashrc` 文件,添加新的别名信息来修改默认使用的 Python 版本。
|
||||
|
||||
```
|
||||
alias python='/usr/bin/python3.4'
|
||||
```
|
||||
|
||||
一旦完成以上操作,重新登录或者重新加载 `.bashrc` 文件,使操作生效。
|
||||
|
||||
```
|
||||
$ . ~/.bashrc
|
||||
```
|
||||
|
||||
检查当前的 Python 版本。
|
||||
|
||||
```
|
||||
$ python --version
|
||||
Python 3.4.2
|
||||
```
|
||||
|
||||
###2、 在系统级修改 Python 版本
|
||||
|
||||
我们可以使用 `update-alternatives` 来为整个系统更改 Python 版本。以 root 身份登录,首先罗列出所有可用的 python 替代版本信息:
|
||||
|
||||
```
|
||||
# update-alternatives --list python
|
||||
update-alternatives: error: no alternatives for python
|
||||
```
|
||||
|
||||
如果出现以上所示的错误信息,则表示 Python 的替代版本尚未被 `update-alternatives` 命令识别。想解决这个问题,我们需要更新一下替代列表,将 `python2.7` 和 `python3.4` 放入其中。
|
||||
|
||||
```
|
||||
# update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
|
||||
update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in auto mode
|
||||
# update-alternatives --install /usr/bin/python python /usr/bin/python3.4 2
|
||||
update-alternatives: using /usr/bin/python3.4 to provide /usr/bin/python (python) in auto mode
|
||||
```
|
||||
|
||||
`--install` 选项使用了多个参数用于创建符号链接。最后一个参数指定了此选项的优先级,如果我们没有手动来设置替代选项,那么具有最高优先级的选项就会被选中。这个例子中,我们为 `/usr/bin/python3.4` 设置的优先级为2,所以 `update-alternatives` 命令会自动将它设置为默认 Python 版本。
|
||||
|
||||
```
|
||||
# python --version
|
||||
Python 3.4.2
|
||||
```
|
||||
|
||||
接下来,我们再次列出可用的 Python 替代版本。
|
||||
|
||||
```
|
||||
# update-alternatives --list python
|
||||
/usr/bin/python2.7
|
||||
/usr/bin/python3.4
|
||||
```
|
||||
|
||||
现在开始,我们就可以使用下方的命令随时在列出的 Python 替代版本中任意切换了。
|
||||
|
||||
```
|
||||
# update-alternatives --config python
|
||||
```
|
||||
|
||||
![](http://linuxconfig.org/images/change-python-alternative-version-debian-linux.png)
|
||||
|
||||
```
|
||||
# python --version
|
||||
Python 2.7.8
|
||||
```
|
||||
|
||||
###3、移除替代版本
|
||||
|
||||
一旦我们的系统中不再存在某个 Python 的替代版本时,我们可以将其从 `update-alternatives` 列表中删除掉。例如,我们可以将列表中的 python2.7 版本移除掉。
|
||||
|
||||
```
|
||||
# update-alternatives --remove python /usr/bin/python2.7
|
||||
update-alternatives: removing manually selected alternative - switching python to auto mode
|
||||
update-alternatives: using /usr/bin/python3.4 to provide /usr/bin/python (python) in auto mode
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://linuxconfig.org/how-to-change-from-default-to-alternative-python-version-on-debian-linux
|
||||
|
||||
译者:[mr-ping](https://github.com/mr-ping)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user