mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-01-07 22:11:09 +08:00
commit
02b3c17da8
@ -1,16 +1,16 @@
|
||||
Linux截屏软件Shutter获得更新,修复bug,更换新图标
|
||||
Linux 截屏软件 Shutter
|
||||
================================================================================
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/06/shutter.jpg)
|
||||
|
||||
**[Shutter][1],是一款Linux平台下最受欢迎的截屏软件。最近的更新中,该软件修复了若干bug,并且使用了新的应用图标。**
|
||||
**[Shutter][1],是一款Linux平台下广受欢迎的截屏软件。最近的更新中,该软件修复了若干bug,并且使用了新的应用图标。**
|
||||
|
||||
这款开源并且功能强大的截屏工具可以让你选择桌面的任意区域、指定应用窗口或者整个屏幕区域来进行截屏。此外,你还可以添加注释、文本或者特效。
|
||||
|
||||
0.91版本修复了若干之前遗留的bug,包括在Ubuntu 14.04中缩略图无法正常地在应用切换栏中显示的问题。由于'imm.io'在今年早些停止服务,所以此次更新还取消了将截图上传到Pixlr图像服务的选项。
|
||||
0.91版本修复了若干明显的bug,包括在Ubuntu 14.04中缩略图无法正常地在应用切换栏中显示的问题。由于'imm.io'在今年早期停止了服务,所以此次更新还取消了将截图上传到Pixlr图像服务的选项。
|
||||
|
||||
最后,这次更新突出了由Lucas Romero Di Benedetto精心设计的百叶窗相机式的应用图标。
|
||||
最后,这次更新突出了由 Lucas Romero Di Benedetto 精心设计的相机快门式应用图标。
|
||||
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/06/compare-350x200.png)
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/06/compare-350x200.png)
|
||||
|
||||
### 在Ubuntu环境下安装Shutter 0.91版本 ###
|
||||
|
||||
@ -28,7 +28,7 @@ Linux截屏软件Shutter获得更新,修复bug,更换新图标
|
||||
|
||||
via: http://www.omgubuntu.co.uk/2014/06/shutter-0-91-new-icon
|
||||
|
||||
译者:[JonathanKang](https://github.com/JonathanKang) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
译者:[JonathanKang](https://github.com/JonathanKang) 校对:[Caroline](https://github.com/carolinewuyan)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
@ -2,9 +2,9 @@
|
||||
================================================================================
|
||||
[NeoBundle][1] 是一个 [Vim][2] 的插件管理器,以 [Vundle][3] 为基础(Vundle 是一个基于 [Pathogen][4] 的 Vim 插件管理器)。在之前的文章中,我[非常不推荐使用 Neobundle][5],原因是它当时还处于高速开发阶段(LCTT:意味着不稳定、变数大),并且当时它的英文文档很少。现在,已经过了一年多了,这两个问题都早已不再是问题。
|
||||
|
||||
我们为什么要使用插件管理器?Vim 支持大量插件,但是由于它没有严格定义框架,插件的文件可以胡乱分布在不同目录下,导致用户管理起来会很困难(LCTT:当然,前提是你有很多插件,还有点小小的强迫症,觉得理一理这些插件心里会舒服点)。而一款插件管理器能让管理变得简单许多。Pathogen, Vundle 和 NeoBundle 的工作就是为不同插件建立一个目录,然后将这些目录扔到 ~/.vim/bundle 目录下。这个文件整理方法可以让你方便彻底地删除插件,使用 'rm -rf <插件目录>' 或直接 'Ctrl + Del' 组合键把插件所在的目录删除就可以了,绝对绿色环保无残留。同时,这种方法还能最大程度避免插件与插件之间的不兼容性。
|
||||
我们为什么要使用插件管理器?Vim 支持大量插件,但是由于它没有严格定义框架,插件的文件可以胡乱分布在不同目录下,导致用户管理起来会很困难(LCTT:当然,前提是你有很多插件,还有点小小的强迫症,觉得理一理这些插件心里会舒服点)。而一款插件管理器能让管理变得简单许多。Pathogen, Vundle 和 NeoBundle 的工作就是为不同插件建立一个目录,然后将这些目录扔到 ~/.vim/bundle 目录下。这个文件整理方法可以让你方便彻底地删除插件,使用 'rm -rf <插件目录>' 或直接在文件管理器里面把插件所在的目录删除就可以了,绝对绿色环保无残留。同时,这种方法还能最大程度避免插件与插件之间的不兼容性。
|
||||
|
||||
NeoBundle 是一个基于 Vundle 的项目,如同 Vundle,它们都可以安装和升级插件。然而 NeoBundle 的说明文件上明确指出:“NeoBundle 不是一个稳定的插件管理器,如果你想要一个稳定的,请选择 Vundle”。最新的 release-note 上也有警“可能会造成兼容性问题”——这是一个开发者写的注解,说明这个管理器还不能让人放心使用。
|
||||
NeoBundle 是一个基于 Vundle 的项目,如同 Vundle,它们都可以安装和升级插件。然而 NeoBundle 的说明文件上明确指出:“NeoBundle 不是一个稳定的插件管理器,如果你想要一个稳定的,请选择 Vundle”。最新的 release-note 上也有警告“可能会造成兼容性问题”——这是一个开发者写的注解,说明这个管理器还不能让人放心使用。
|
||||
|
||||
所以,我们为什么要使用 NeoBundle?它都不能保证稳定运行!好吧,它还是有可取之处的。Vundle 只支持 [Git][6] 这种版本控制系统,而 NeoBundle 可以支持 [Subversion][7] 和 [Mercurial][8]。另一个原因是如果你不想插件升级时破坏你的 Vim 生态环境,你可以锁住 NeoBundle,让它只使用某个插件的固定版本。
|
||||
|
||||
@ -12,11 +12,11 @@ NeoBundle 是一个基于 Vundle 的项目,如同 Vundle,它们都可以安
|
||||
|
||||
### 安装并初始化 NeoBundle ###
|
||||
|
||||
NeoBundle 依赖 Vim 7.2.051 或更高版本,依赖 git,依赖 [cURL][12](用于下载文件)。你可以手动下载 NeoBundle,也可以使用 cURL 下载它在 GitHub 上的库。在你的 home 目录下使用如下命令,可以将 NeoBundle 插件下载到 .vim/bundle/neobundle.vim 目录里,然后 NeoBundle 就能管理它自己了。
|
||||
NeoBundle 支持 Vim 7.2.051 或更高版本,需要 git 和 [cURL][12](用于下载文件)。你可以手动下载 NeoBundle,也可以使用 cURL 下载它在 GitHub 上的库。在你的 home 目录下使用如下命令,可以将 NeoBundle 插件下载到 .vim/bundle/neobundle.vim 目录里,然后 NeoBundle 就能管理它自己了。
|
||||
|
||||
curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh | sh
|
||||
|
||||
你还需要修改 .vimrc 文件。NeoBundle 的 GitHub 主页提供一个 .vimrc 范本,使用这个范本后,NeoBundle 会为你下载5个插件。如果不需要它们,你可以使用下面的最小配置:
|
||||
你还需要修改 .vimrc 文件。NeoBundle 的 GitHub 主页提供一个 .vimrc 范本,但是直接使用这个范本,NeoBundle 需要你安装5个可能不需要插件。如果不需要它们,你可以使用下面的最小配置:
|
||||
|
||||
if has('vim_starting')
|
||||
set nocompatible
|
||||
@ -40,17 +40,17 @@ NeoBundle 依赖 Vim 7.2.051 或更高版本,依赖 git,依赖 [cURL][12](
|
||||
|
||||
NeoBundle 'tpope/vim-abolish'
|
||||
|
||||
再介绍一个小技巧:你可以为插件指定一个分支或版本号。什么意思?NeoBundle 只会关注这个插件的某个分支或版本的更新,而忽略其他更新。如果你使用的某个插件处于高速开发过程,你就可以使用这个技巧,避免用到有 bug 的插件版本。举个例子:
|
||||
再介绍一个小技巧:你可以为插件指定一个分支或版本号。什么意思?NeoBundle 只会使用这个插件的某个分支或版本,而忽略其版本更新。如果你使用的某个插件处于高速开发过程,你就可以使用这个技巧,避免用到有 bug 的插件版本。举个例子:
|
||||
|
||||
NeoBundle 'Shougo/vimshell', { 'rev' : '3787e5' }
|
||||
|
||||
还有一个技巧:在 .vimtc 文件内添加一行关于“NeoBundleCheck”的属性。NeoBundle 会检查被卸载的插件,并提示你安装它们。你也可以使用命令“:NeoBundleInstall”(LCTT:这是要在 Vim 编辑器的命令模式下输入)来安装或升级插件。
|
||||
还有一个技巧:在 .vimtc 文件内添加一行关于“NeoBundleCheck”的属性。NeoBundle 会根据配置检查没安装的插件,并提示你安装它们。你也可以使用命令“:NeoBundleInstall”(LCTT:这是要在 Vim 编辑器的命令模式下输入)来安装或升级插件。
|
||||
|
||||
### NeoBundle 用法 ###
|
||||
|
||||
很多 NeoBundle 命令用起来和 Vundle 类似,但命令的名字不一样。下面是 NeoBundle 命令的用法:
|
||||
|
||||
- `:NeoBundleUpdate`:安装或升级插件,如果你手动把一个插件的目录删除了,这个命令会重新安装这个插件。在这个命令后面加上插件名称,就只升级一个插件;不加参数,会将所有己安装但没被记录在案的插件给记录下来。“:NeoBundleInstall”命令效果相同。
|
||||
- `:NeoBundleUpdate`:安装或升级插件,如果你手动把一个插件的目录删除了,这个命令会重新安装这个插件。在这个命令后面加上插件名称,就只升级一个插件;不加参数,会将所有己安装但没被记录在案的插件给记录下来。`:NeoBundleInstall` 命令效果相同。
|
||||
- `:NeoBundle {REPOSITORY URI} [[REVISION}] [,OPTIONS}]]`:将一个插件锁定到固定版本,防止胡乱升级。
|
||||
- `:NeoBundleList`:列出所有未初始化的插件。
|
||||
- `:NeoBundleClean`:进入交互界面,删除插件。
|
||||
@ -59,7 +59,7 @@ NeoBundle 依赖 Vim 7.2.051 或更高版本,依赖 git,依赖 [cURL][12](
|
||||
|
||||
### 是否使用 NeoBundle,自己决定 ###
|
||||
|
||||
NeoBundle 是强大的工具,正处于高速开发状态。任何处于这种状态的项目,都会被帖上“有前途”和“不稳定”两个标签,看你自己怎么选。如果你想要最新的稳定版本的插件,NeoBundle 可以让 Vundle 和 Pathogen 永远保持在老界面。
|
||||
NeoBundle 是强大的工具,正处于高速开发状态。任何处于这种状态的项目,都会被帖上“有前途”和“不稳定”两个标签,看你自己怎么选。如果你想要最新的稳定版本的插件,NeoBundle 能够把 Vundle 和 Pathogen 甩出几条街。
|
||||
|
||||
然而在线帮助文档已经给出警告,它不是个稳定的产品,不及时更新版本可能造成一些插件运行出错。最后,你需要在 .vimrc 文件为你的 Neoundle 和其他插件指定一个稳定的版本。记住这警告,然后你可以在使用这些尖端技术产品时游刃有余。
|
||||
|
||||
@ -67,7 +67,7 @@ NeoBundle 是强大的工具,正处于高速开发状态。任何处于这种
|
||||
|
||||
via: http://www.openlogic.com/wazi/bid/348084/Managing-Vim-extensions-with-NeoBundle
|
||||
|
||||
译者:[bazz2](https://github.com/bazz2) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
译者:[bazz2](https://github.com/bazz2) 校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,97 @@
|
||||
Linux 目录导航技巧
|
||||
================================================================================
|
||||
|
||||
目录当行是命令行系统的基础概念.虽然不是什么难以理解的东西,但是知道一些技巧能够丰富你的经验并且提高工作效率.在这篇文章中,我们会讨论这些小技巧。
|
||||
|
||||
### 我们已经知道的东西 ###
|
||||
|
||||
在开始高级技巧之前,有一些必须知道的基本命令:
|
||||
|
||||
- ‘pwd’显示当前目录
|
||||
- ‘cd’ 改变当前目录
|
||||
- ‘cd’ 跟两个点(cd ..)能返回父目录
|
||||
- ‘cd’ 跟着相对目录就能直接切换当相对目录下
|
||||
- ‘cd’ 跟着绝对目录就能切换到绝对目录下
|
||||
|
||||
### 高阶技巧 ###
|
||||
|
||||
这节将介绍几个技巧方便你进行目录的切换
|
||||
|
||||
### 从任何地方回到home目录 ###
|
||||
|
||||
虽然使用‘cd /home/<你的主目录>’, 不是什么大麻烦, 但是有一种方法直接打‘cd’ 就能回到你的主目录.
|
||||
|
||||
例子:
|
||||
|
||||
$ pwd
|
||||
/usr/include/netipx
|
||||
$ cd
|
||||
$ pwd
|
||||
/home/himanshu
|
||||
|
||||
所以无论你在哪个目录下,都能这么干,然后回到home目录。
|
||||
|
||||
**注意**- 如果要切换到某个其它的指定用户的目录下, 就使用 ‘cd ~user_name'
|
||||
|
||||
### 用cd - 在目录间切换 ###
|
||||
|
||||
假设你的当前工作目录是这样的:
|
||||
|
||||
$ pwd
|
||||
/home/himanshu/practice
|
||||
|
||||
如果你想切换到 **/usr/bin/X11**, 然后又想回到之前的目录。 你会怎么做? 最直接的 :
|
||||
|
||||
$ cd /usr/bin/X11
|
||||
$ cd /home/himanshu/practice/
|
||||
|
||||
虽然这样行得通,但是要记住这些复杂的目录就太笨了。这种情况下使用 ‘cd -’ 命令就行.
|
||||
|
||||
使用 ‘cd -’的第一步和上面的例子是一样的, 你可以 cd 到你想要切换到的<路径>下,但是回到之前的目录用 ‘cd -’就可以。
|
||||
|
||||
$ cd /usr/bin/X11
|
||||
$ cd -
|
||||
/home/himanshu/practice
|
||||
$ pwd
|
||||
/home/himanshu/practice
|
||||
|
||||
如果你想再次回到刚刚访问的目录(在这个例子中是/usr/bin/X11),再使用'cd -'就可以。但是这个命令只会记住上一次访问的目录,这是一个缺点。
|
||||
|
||||
### 用 pushd 和 popd 来切换目录 ###
|
||||
|
||||
![directory navigation](http://linoxide.com/wp-content/uploads/2014/06/pushd-popd.jpg)
|
||||
|
||||
如果你对'cd -'非常了解了的话,你会发现这个命令只能帮助你在两个目录之间移动,但是很多场景下需要在很多目录之间切换。比如你要从A切换到B再到C然后又想回到A。
|
||||
|
||||
一般来说,你需要打出A的完整路径,但是如果这个路径非常复杂,将是非常烦人的一件事,特别是在你的切换非常频繁的话。
|
||||
|
||||
一些场景下可以使用 ‘pushd’ 还有 ‘popd’ 命令。 ‘pushd’ 将一个目录存到内存中,‘popd’ 将目录从内存中去除,并且转换到那个目录下。
|
||||
|
||||
例如:
|
||||
|
||||
$ pushd .
|
||||
/usr/include/netipx /usr/include/netipx
|
||||
$ cd /etc/hp/
|
||||
$ cd /home/himanshu/practice/
|
||||
$ cd /media/
|
||||
$ popd
|
||||
/usr/include/netipx
|
||||
$ pwd
|
||||
/usr/include/netipx
|
||||
|
||||
使用‘pushd’ 命令存储当前的工作目录 (用 .表示), 然后切换到各种各样的目录去。为了返回之前的目录,只要使用 ‘popd’命令就行了。
|
||||
|
||||
(LCTT译注:显然,pushd和popd 是堆栈式操作,你可以push多个目录,然后逐一pop出来,自己试试吧。)
|
||||
(LCTT译注:我们之前介绍的[autojump][1],更加智能,不过需要安装一下。)
|
||||
|
||||
**注意**- 你也可以使用不带参数的 ‘pushd’ 来切换到之前存储的目录, 但是不会像 ‘popd’ 一样去除这个目录。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://linoxide.com/linux-command/directory-navigations-tips-tricks/
|
||||
|
||||
译者:[ggaaooppeenngg](https://github.com/ggaaooppeenngg) 校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://linux.cn/article-3401-1.html
|
@ -1,14 +1,17 @@
|
||||
在Linux终端中加速目录导航
|
||||
自动补完不算什么,一键直达目录才是终极神器!
|
||||
================================================================================
|
||||
与在命令行中导航目录一样令人称道的是,很少有比一遍又一遍重复”cd ls cd ls cd ls……“更令人沮丧的事情了。如果你不是百分百确定你想要进入的下一个目录的名字,那么你不得不使用ls来确认,然后使用cd来进入你想要进的那一个。所幸的是,现在大量的终端和shell语言提供了强大的自动补全功能来处理该问题。但是,你仍然需要一直疯狂地敲击制表键来干这事。如果你和我一样懒惰,你就会对autojump十分痴迷。自动跳转是一个命令行工具,它允许你可以直接跳转到你喜爱的目录,而不用管你现在身在何处。
|
||||
|
||||
在命令行中切换目录是最常用的操作,不过很少有比一遍又一遍重复“cd ls cd ls cd ls ……”更令人沮丧的事情了。如果你不是百分百确定你想要进入的下一个目录的名字,那么你不得不使用ls来确认,然后使用cd来进入你想要进的那一个。所幸的是,现在大量的终端和shell语言提供了强大的自动补全功能来处理该问题。但是,你仍然需要一直疯狂地敲击TAB键来干这事。如果你和我一样懒惰,你一定会对autojump感到惊喜。
|
||||
|
||||
autojump是一个命令行工具,它允许你可以直接跳转到你喜爱的目录,而不用管你现在身在何处。
|
||||
|
||||
### 在Linux上安装autojump ###
|
||||
|
||||
在Ubuntu或Debian上autojump:
|
||||
在Ubuntu或Debian上安装autojump:
|
||||
|
||||
$ sudo apt-get install autojump
|
||||
|
||||
要在CentOS或Fedora上安装autojump,请使用yum命令。在CentOS上,你需要先[启用EPEL仓库][1]。
|
||||
要在CentOS或Fedora上安装autojump,请使用yum命令。在CentOS上,你需要先[启用EPEL仓库][1]才行。
|
||||
|
||||
$ sudo yum install autojump
|
||||
|
||||
@ -20,11 +23,11 @@
|
||||
|
||||
### autojump的基本用法 ###
|
||||
|
||||
autojump的工作方式很简单:它会在你每次启动命令时记录你当前位置,并把它添加进它自身的数据库中。那样,某些目录比其它一些目录添加的次数多,这些目录一般就代表你最重要的目录,而它们的“weight”也会增大。
|
||||
autojump的工作方式很简单:它会在你每次启动命令时记录你当前位置,并把它添加进它自身的数据库中。这样,某些目录比其它一些目录添加的次数多,这些目录一般就代表你最重要的目录,而它们的“权重”也会增大。
|
||||
|
||||
从那儿,你可以使用下面的语法来直接跳转到这些目录:
|
||||
现在不管你在哪个目录,你都可以使用下面的语法来直接跳转到这些目录:
|
||||
|
||||
autojump [name or partial name of the directory]
|
||||
autojump [目录的名字或名字的一部分]
|
||||
|
||||
注意,你不需要输入完整的名称,因为autojump会检索它的数据库,并返回最可能的结果。
|
||||
|
||||
@ -38,9 +41,9 @@ autojump的工作方式很简单:它会在你每次启动命令时记录你当
|
||||
|
||||
如果你也很讨厌打字,那么我推荐你为autojump起个别名,或者使用默认的别名。
|
||||
|
||||
$ j [name or partial name of the directory]
|
||||
$ j [目录的名字或名字的一部分]
|
||||
|
||||
另外一个引人注目的功能是,autojump支持
|
||||
另外一个引人注目的功能是,autojump支持zsh和自动补完。如果你不确认哪里是不是你要跳转的地方,敲击TAB键就会列出完整路径。
|
||||
|
||||
还是同样的例子,输入:
|
||||
|
||||
@ -48,29 +51,29 @@ autojump的工作方式很简单:它会在你每次启动命令时记录你当
|
||||
|
||||
然后敲击tab键,将会返回/root/home/doc或者/root/home/ddl。
|
||||
|
||||
最后,对于高级用户,你可以访问目录数据库,并修改它的内容。它使得使用下面的命令来手动添加一个目录成为可能:
|
||||
最后,对于高级用户,你可以访问目录数据库,并修改它的内容。可以使用下面的命令来手动添加一个目录:
|
||||
|
||||
$ autojump -a [directory]
|
||||
$ autojump -a [目录]
|
||||
|
||||
如果你突然想要把它变成你的最爱和使用最频繁的文件夹,你可以通过命令的内部参数来手工增加它的weight
|
||||
如果你突然想要把当前目录变成你的最爱和使用最频繁的文件夹,你可以在该目录通过命令的参数 i 来手工增加它的权重
|
||||
|
||||
$ autojump -i [weight]
|
||||
$ autojump -i [权重]
|
||||
|
||||
这将使得该目录更可能被选择跳转。相反的例子是使用内部参数来减少weight:
|
||||
这将使得该目录更可能被选择跳转。相反的例子是在该目录使用参数 d 来减少权重:
|
||||
|
||||
$ autojump -d [weight]
|
||||
$ autojump -d [权重]
|
||||
|
||||
要跟踪所有这些改变,输入:
|
||||
|
||||
$ autojump -s
|
||||
|
||||
这会显示数据库中的统计数据,然而:
|
||||
这会显示数据库中的统计数据。而以下:
|
||||
|
||||
$ autojump --purge
|
||||
|
||||
上面的命令将会把不再存在的目录从数据库移除。
|
||||
命令将会把不再存在的目录从数据库中移除。
|
||||
|
||||
简言之,autojump将会受到所有命令行高级用户的欢迎。不管你是在ssh进一台服务器,还是仅仅想要追随复古潮流,敲更少的键来减少导航时间总是件好事。如果你真的热衷于此类工具,你也肯定会看看[Fasd][3],它应该会很称职。
|
||||
简言之,autojump将会受到所有命令行高级用户的欢迎。不管你是在ssh进一台服务器,还是仅仅想要追随复古潮流,敲更少的键来减少导航时间总是件好事。如果你真的热衷于此类工具,你也肯定也想看看[Fasd][3],它应该会给你一个惊喜,我们下次再介绍它。
|
||||
|
||||
你觉得autojump怎么样?你会经常用它么?发表一下你的评论吧。
|
||||
|
||||
@ -78,7 +81,7 @@ autojump的工作方式很简单:它会在你每次启动命令时记录你当
|
||||
|
||||
via: http://xmodulo.com/2014/06/speed-up-directory-navigation-linux-terminal.html
|
||||
|
||||
译者:[GOLinux](https://github.com/GOLinux) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
译者:[GOLinux](https://github.com/GOLinux) 校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
@ -1,19 +1,27 @@
|
||||
Ubuntu 14.04 LTS: 定制 Unity
|
||||
Ubuntu 14.04 LTS: 定制 Unity
|
||||
================================================================================
|
||||
虽然Unity桌面管理器自从伴随 Ubuntu 11.01首次发布以来表现出了强劲的性能,并在可用性上迈进了一大步,但是有人对自定义其外观和行为所带的限制感到反感。我们马上就去看看如何自定义Unity,让你重拾自己掌控桌面的感觉。
|
||||
虽然Unity桌面管理器自从伴随 Ubuntu 11.01首次发布以来表现出了强劲的性能,并在可用性上迈进了一大步,但是有人对自定义其外观和行为所带的限制感到反感。我们现在来看看如何自定义Unity,让你重拾自己掌控桌面的感觉。
|
||||
|
||||
### Unity中的可用定制项目 ###
|
||||
|
||||
在ubuntu 14.04中,Unity 有一些以前没有的可定制项。登入你的 Unity,进入“设置”并选择“显示”,你将看到以下画面:
|
||||
|
||||
![Ubuntu 14.04 LTS Display and Unity Settings](https://linuxacademy.com/blog/wp-content/uploads/2014/06/unitysettings.png)
|
||||
|
||||
Ubuntu 14.04 LTS 显示和 Unity 设置
|
||||
|
||||
你看到的大多数项目相比Ubuntu 11.01 中所采用的都是新的,而且一些相比较最近的Ubuntu 版本Ubuntu13.10也是新的。从Ubuntu13.10开始,Ubuntu加入了可以改变菜单栏和标题栏大小的新特性。
|
||||
Unity中所特有的一个特性是我们能够打开或者关闭的“粘性边缘”功能,它能让你的鼠标停止在多显示器组的每个屏幕的边缘,它使光标暂时停在边缘,仿佛是鼠标卡住了一样,我们可以选择关闭它。
|
||||
你看到的大多数项目相比 Ubuntu 11.01 而言都是新的,而且一些相比较上一个版本的 Ubuntu13.10 也是新的。从Ubuntu13.10开始,Ubuntu加入了可以改变菜单栏和标题栏大小的新特性。
|
||||
|
||||
Unity中所特有的一个特性是我们能够打开或者关闭的“粘性边缘”功能,它能让你的鼠标停止在多显示器组的每个屏幕的边缘,它使光标暂时停在边缘,仿佛是鼠标卡住了一样,我们可以选择关闭它。(LCTT译注,其实我觉得挺有用的,可以避免无意中切换到其他工作桌面,不要关闭)
|
||||
|
||||
在“设置”中选择“外观”选项,可以看到如下画面。
|
||||
|
||||
![Ubuntu 14.04 LTS Appearance and Unity Settings](https://linuxacademy.com/blog/wp-content/uploads/2014/06/unityappearance.png)
|
||||
Ubuntu 14.04 LTS 显示和Unity设置
|
||||
这里我们可以看到对于 Unity 启动器栏被要求最多的选项-能够改变启动器大小的特性。虽然在Ubuntu 11.10及以后的各种版本中可以通过多种方法实现这个特性,但将其放入外观设置中使其显得更加正式。我喜欢它能将启动器图标缩小直至16号的功能(我们接下来所要谈论的工具仅能支持最小调至24号)。
|
||||
|
||||
Ubuntu 14.04 LTS 显示和Unity设置
|
||||
|
||||
这里我们可以看到一个人们最渴望在 Unity 启动器栏中包含的功能-能够改变启动器大小。虽然在Ubuntu 11.10及以后的各种版本中可以通过多种方法实现这个特性,但将其放入外观设置中使其显得更加正式。我喜欢它能将启动器图标缩小直至16的功能(我们接下来所要讲到的工具仅能支持最小调至24)。
|
||||
|
||||
### Unity Tweak Tool-强大! ###
|
||||
|
||||
在Unity首次伴随Ubuntu 11.10发布的几天之内这款工具就跟着出现了,只是你得大费周折去自己把它安装好而且在Unity升级时它可能会损坏。
|
||||
@ -25,21 +33,26 @@ Unity中所特有的一个特性是我们能够打开或者关闭的“粘性边
|
||||
安装好,启动后你将看到如下画面:
|
||||
|
||||
![Ubuntu 14.04 LTS Official Unity Tweak Tool](https://linuxacademy.com/blog/wp-content/uploads/2014/06/unitytweaktool.png)
|
||||
正式的Unity Tweak Tool
|
||||
|
||||
这款工具集中大量的Unity桌面定制项目于一体。这些定制项大多能通过默认的Unity设置,命令行操作或者是编辑有时候很难寻找的配置文件来实现。
|
||||
正式的Unity Tweak Tool
|
||||
|
||||
这款工具它集大量Unity桌面定制项目于一体。这些定制项大多能通过默认的Unity设置,命令行操作或者是即使是编辑有时候也很难寻找到的配置文件来实现。
|
||||
|
||||
我们可以改变启动器栏,网页小程序和面板的行为,可以在Unity菜单中搜索等等。所有的都通过着一个工具来实现。花些时间去挖掘适合你的选项-Unity Tweak Tool-学习它,和它一起生活,爱上它(如果你使用Unity,这是起码的)
|
||||
|
||||
### 结尾的一些想法 ###
|
||||
|
||||
Ubuntu 14.04 LTS 越来越向成为Linux Desktop迈进,(Canonical,对不起,你还是Linux),Linux Desktop不仅可以作为非正式的Linux使用者(的确有这样的事)的选择,也适用于骨灰级linux专家。
|
||||
那现在相比较于不借助工具,公共程序或是进行在随后的更新中可能损坏的配置文件编辑的Unity桌面我们就拥有了更多的控制权,Unity桌面性能强劲可靠,又通过Unity Tweak Tool加入一些风味元素,使得它的外观也酷极了!!!请给我们你的想法或者点击链接发表你对Unity桌面的评论,我们将有兴趣知道你是如何使用Ubuntu 14.04 LTS 的。
|
||||
Ubuntu 14.04 LTS 越来越被人们视作Linux上的典型的Desktop,(对不起,Canonical,你还没有摆脱Linux身份),Linux Desktop不仅可以作为偶尔使用Linux的那些人(的确有这样的事)的选择,也适用于骨灰级linux专家。
|
||||
|
||||
比之前没有工具,功能可以定制,或是通过配置文件修改定制但是有可能被之后个更新所破坏,现在对于Unity桌面我们就拥有了更多的控制权。Unity桌面性能强劲可靠,又通过Unity Tweak Tool加入一些特色元素,使得它的外观也酷极了!!!
|
||||
|
||||
请给我们你的想法或者点击链接发表你对Unity桌面的评论,我们将有兴趣知道你是如何使用Ubuntu 14.04 LTS 的。
|
||||
|
||||
|
||||
----------
|
||||
|
||||
#### Terrence T. Cox ####
|
||||
|
||||
开发者,Linux倡导者,开源爱好者。 进入这个技术领域很久,被认为经验丰富,但从未感到厌倦。
|
||||
[Twitter][1]
|
||||
|
||||
@ -47,7 +60,7 @@ Ubuntu 14.04 LTS 越来越向成为Linux Desktop迈进,(Canonical,对不
|
||||
|
||||
via: https://linuxacademy.com/blog/linux/ubuntu-14-04-lts-customizing-unity/
|
||||
|
||||
译者:[Love-xuan](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
译者:[Love-xuan](https://github.com/Love-xuan) 校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,39 @@
|
||||
五个超赞的字符艺术生成器!
|
||||
================================================================================
|
||||
![](http://www.efytimes.com/admin/useradmin/photo/nin511907PM712014.jpg)
|
||||
|
||||
ASCII是一个非常吸引人的字符编码系统,在计算机,通讯设备,以及其他设备中,通过它来用代码表示字符。新生代的人可能会觉得它已经过时了,但是那些熟悉它的人会懂得ASCII是多么的独特。我们在这里为你准备了五个超赞的ASCII字符艺术生成器。
|
||||
|
||||
### 1.[GlassGiant ASCII Art][1] ###
|
||||
|
||||
这个小程序可以把图片转换成ASCII文字艺术-一堆胡乱堆在一起的文字,数字和符号,看上去没有任何意义,直到你往后站一步去看完整的画面。它也没有什么实际的用途,只是看上去非常简洁灵巧。
|
||||
|
||||
### 2.[ASCII Art Generator][2] ###
|
||||
|
||||
ASCII字符艺术是一种在电脑上把可打印字符作为图片元素来拼接展现一幅图像的艺术活动。你所需要做的只是上传你的图片,然后它会帮你转成ASCII字符艺术。
|
||||
|
||||
### 3.[Ascii.mastervb][3] ###
|
||||
|
||||
ASCII字符艺术来源于7比特ASCII字符标准。ASCII字符艺术曾经在70-80年代很流行。在那个时候,计算机系统都还是基于字符的。这个程序可以非常快地把图片转换成ASCII字符。
|
||||
|
||||
### 4.[IMG2TXT][4] ###
|
||||
|
||||
这个脚本可以将GIF,JPG或PNG的链接转换成ASCII字符或是带颜色的HTML。
|
||||
|
||||
### 5.[picascii][5] ###
|
||||
|
||||
它可以把图片转换成ASCII文本或是HTML。要做转换,你只需要输入链接地址或是选择一张你电脑上的图片(gif/jpeg/png)。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.efytimes.com/e1/fullnews.asp?edid=142480
|
||||
|
||||
译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://glassgiant.com/ascii/
|
||||
[2]:http://www.ascii-art-generator.org/
|
||||
[3]:http://ascii.mastervb.net/
|
||||
[4]:http://www.degraeve.com/img2txt.php
|
||||
[5]:http://picascii.com/
|
83
published/20140702 Command Line Tuesdays--Part Three.md
Normal file
83
published/20140702 Command Line Tuesdays--Part Three.md
Normal file
@ -0,0 +1,83 @@
|
||||
命令行星期二 —— 第三篇
|
||||
================================================================================
|
||||
今天,肖茨先生将带领我们游历文件系统的第一部分。我们将学到如何访问、列出目录内的文件,以及首次介绍一些选项的运用。OK,让我们开始学习这周的第一个命令。
|
||||
|
||||
### ls ###
|
||||
|
||||
ls 是一个用来列出目录内文件的命令。通过添加**选项**来实现多种不同的用途。简单起见,你可以只需键入 ls 。但是,你也可以在命令后面添加一个选项,它会帮助你修饰你的命令。如果你想要随意摆弄一些信息时,这会帮到你的。举例来说,当你要从一个命令的大量输出中找寻指定信息,你可以用选项缩小范围来实现。
|
||||
|
||||
这就是选项的基础概念。我们可以用下面书写格式表示:
|
||||
|
||||
command(命令) -option(选项) argument(参数)
|
||||
|
||||
命令,恩...,我们可以输入 pwd、 ls, 或者我们到目前为止所有学过的命令。
|
||||
|
||||
以上我们已经阐述了选项的目的。但是我们需要注意一下书写格式:在前头添加一个破折号。所以,如果选项为 l, 你需要在命令后键入**-l**。
|
||||
|
||||
**参数**是一个命令的操作对象(在这个例子中,它是一个目录,我们将会学到如何浏览它们)。
|
||||
|
||||
接着,让我们尝试在主目录里尝试用 ls 命令列出 /etc 目录内容。这次我们先不添加选项。
|
||||
|
||||
![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-184127.png)
|
||||
|
||||
就这样,列出了一大堆的文件。它们还根据颜色进行了分类。蓝色的是目录,白色的为普通文件,绿色的似乎是某种 shell 脚本文件。除此之外,还有其他不同的颜色来代表不同的文件类型。
|
||||
|
||||
接下来,你可以在刚才的命令里添加 -l 选项。添加选项 -l 后也会列出同样的文件和目录,但是以长格式方式输出。如果你需要查看更多信息的话,这个选项将是不错的选择。
|
||||
|
||||
![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-184542.png)
|
||||
|
||||
### 长格式 ###
|
||||
|
||||
这样,用了长格式后,你可以看到更详细的信息,以及在每行开头类似-rw-r--r-- 令人抓狂的标示。实际上,这只是一种组合,代表了各种意义的信息。
|
||||
|
||||
![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-184829.png)
|
||||
|
||||
(File Name)就是文件的名称。(Modification time)是文件最后修改的时间。(Size) 用 byte 计量的文件大小。(Group) 是组的名称,和拥有者一起构成文件权限。(Owner) 是文件拥有者的名称。最最重要的…
|
||||
|
||||
###…文件权限 ###
|
||||
|
||||
文件权限在长格式每一行的开端都显得非常的杂乱。第一个字符代表文件类型。如果是 'd' , 意味着它是一个目录。如果是 '-' , 意味着它是一个一般文件。接下来的三个字符分别代表拥有者的可读, 可写 ,可执行的权限。再接着三个字符表示组成员的享有的文件权限,而最后三个字符表示其他人(既不是拥有者也不是同组)对文件的享有权限。
|
||||
|
||||
例如,如果有个文件在长格式下显示为:-rw-r--r--, 这说明这是个普通文件(首字符 '-'),拥有者享有可读可写权限,但是没有可执行权限,导致拥有者无法执行该文件(首字符'-'后'rw-'),用户组和其他用户只享有可读权限(你不难发现'r--'字段在后面出现了两次 。如果用户组是 'rwx' 而不是 'r-',则意味着它们可读,可写,可执行)。
|
||||
|
||||
ls 的下个选项是 ls -la .. ,-a 它会列出所有的文件,包括隐藏文件。在通常情况下,隐藏文件是不可见的。用长格式列出当前工作目录下的父目录的所有文件。
|
||||
|
||||
### less ###
|
||||
|
||||
less 是一个可以显示你的文本文件的命令。举例来说,你要在 /etc 下找寻名为 os-release 的文本文件。你可以使用 ls /etc 成功实现,而现在你想要阅读它的内容。
|
||||
|
||||
你只需要使用 less /etc/os-release。
|
||||
|
||||
![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-190252.png)
|
||||
|
||||
..就这样了。
|
||||
|
||||
你要如何控制 less 呢?
|
||||
|
||||
简单的, 你只需要动动键盘就行了!
|
||||
|
||||
less 一次只会显示一个页面的文本。往前翻页你需要按 **Page Up**, 或者 **'b'**。往后翻页你可以按**Page Down**, 或者 **空格**。大写的**G**会跳转到文本的末尾,**1G**会跳转到文本的开端。**/字符**会在文本内搜索指定字符(例如,如果你输入 /suse ,它会找寻所有文本含有的 suse 并标记出来)。n 会重复执行你的搜索,**h**会显示所有的选项(h,即帮助的意思)。
|
||||
|
||||
![](https://news.opensuse.org/wp-content/uploads/2014/06/halp.jpg)
|
||||
|
||||
按q退出 less 命令。
|
||||
|
||||
### file ###
|
||||
|
||||
file 会显示文件的类型,是否是你要找的 ASCII 文本,还是 jpg 图片,bash 脚本等。让我们用 /etc/os-release 执行练习。
|
||||
|
||||
![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-191402.png)
|
||||
|
||||
这样,如你所见,os-release 是一个 ASCII 文本文件。 请尝试其他文件,并观察结果。
|
||||
|
||||
下回见了,记住…
|
||||
|
||||
…一定要玩的开心啊!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.opensuse.org/2014/07/01/command-line-tuesdays-part-three/
|
||||
|
||||
译者:[Luoxcat](https://github.com/Luoxcat) 校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
@ -0,0 +1,44 @@
|
||||
红帽公司发布 OpenStack Platform 5
|
||||
================================================================================
|
||||
![](http://farm4.static.flickr.com/3108/3191608123_67e1da2b79_o.jpg)
|
||||
|
||||
红帽公司[宣布][1]在RHEL上推出OpenStack Platform5,这是基于OpenStack开源云的第三个企业级发行版。该版本不仅开发了一些新功能,针对的用户群体也大为增多,如高大上的云用户、电信企业、互联网服务供应商(ISP)、公有云服务供应商等。
|
||||
|
||||
OpenStack Platform 5是基于最新的Openstack Icehouse的发行版,并且针对云计算技术做了大量的修改和优化工作而来的。
|
||||
|
||||
这个最新的发行版有3年的技术支持周期,[我选择了使用][2]它是考虑到红帽公司在Linux系统上对用户无以伦比的技术支持,红帽公司对其OpenStack Platform 5的技术支持服务将是促使企业购买的关键之一。
|
||||
|
||||
对于红帽公司是否会支持OpenStack的其他发行版尚未有定论,但一份OpenStack用户调查已经显示[90%的OpenStack开发人员并没有在RHEL上使用OpenStack][3],而是选用了Ubuntu或者CentOS Linux和其虚拟化技术。
|
||||
|
||||
OpenStack Platform 5的最新功能:
|
||||
|
||||
> **支持和VMware基础架构的整合**,结构包含虚拟化、管理、网络和存储。
|
||||
用户一般会使用已经在使用的VMware vSphere资源,比如虚拟化驱动作为OpenStack (Nova)的计算节点,再使用上层的OpenStack Dashboard(Horizon)对节点进行管理。
|
||||
同样的,RHEL OpenStack Platform 5也支持VMware的NSX插件,作为OpenStack NetWorking (Neutron)对网络进行管理,支持VMware虚拟磁盘(VMDK)以插件形式存在,作为OpenStack Block Storage(Cinder)来使用。
|
||||
>
|
||||
|
||||
> **对云资源的使用,采取了更好的布置。**服务器组让计算散布到OpenStack云的服务节点上,这让分布式应用有了更强的弹性,对于复杂的应用,也能起到降低通信延迟,提高运算性能的作用。
|
||||
>
|
||||
|
||||
> **对虚拟机更好的支持,支持加密,满足美英国家对信息安全的要求** 使用RHEL 7中提供的半虚拟化随机数生成器,在用户程序中也添加进这个工具,可以更好的加密质量和性能提升。
|
||||
|
||||
> **提升协议栈的互通性**红帽公司宣称,Neutron中新开发的模块化的网络技术将简化OpenStack的部署。这种技术将允许用户在OpenStack中部署多种网络方案来解决异构网络的访问。
|
||||
|
||||
红帽公司虚拟化和OpenStack产品线总经理 Redhesh Balakrishnan说到:
|
||||
|
||||
> “我们看到越来越多的企业级用户或服务供应商选择OpenStack作为私有云平台,RHEL OpenStack Platform 5不只是一个基于OpenStack Icehouse产品,我们还开发了很多简单易用的功能,增强了产品的可靠性。
|
||||
在未来三年内,我们要让用户看到,RHEL OpenStack Platform 5所提供的功能和技术支持服务,将为他们部署的应用保驾护航,让用户对我们的产品充满信心。
|
||||
|
||||
我敢跟你打赌,--三年的技术支持服务--将是企业用户在竞争激烈的云平台领域选择红帽的关键点。并且,毋庸置疑,红帽公司把自己的未来放在了云计算,放在了OpenStack Platform上面。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://ostatic.com/blog/red-hat-announces-availability-of-its-openstack-platform-5
|
||||
|
||||
译者:[nd0104](https://github.com/nd0104) 校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.marketwatch.com/story/red-hat-announces-general-availability-of-red-hat-enterprise-linux-openstack-platform-5-2014-07-08
|
||||
[2]:http://ostatic.com/blog/why-red-hats-openstack-support-must-be-as-inclusive-as-possible
|
||||
[3]:http://www.openstack.org/blog/2013/11/openstack-user-survey-october-2013/
|
@ -0,0 +1,28 @@
|
||||
放弃微软产品,慕尼黑省下数百万美元
|
||||
=================================================
|
||||
![](http://i1-news.softpedia-static.com/images/news2/Canonical-and-Ubuntu-Helped-Munich-Save-Millions-of-Dollars-By-Ditching-Microsoft-Products-450571-2.jpg)
|
||||
|
||||
**慕尼黑这座城市已经成为了从微软产品转向开源的,最突出的城市管理案例之一,而且Canonical公司和ubuntu为这次变革起了很大的作用。**
|
||||
|
||||
慕尼黑成功脱离了微软的依赖,但是他们为这次摆脱过程付出了价值不菲的代价。从微软产品转向开源的好处看起来似乎很昂贵,但是转变的成本比之后的产品升级显著要低,不仅如此,在未来,我们会发现这种做法更便宜。
|
||||
|
||||
当你在像慕尼黑城市这种大城市,尝试从一个专有解决方法转向开源的时候,这可并不容易。因为慕尼黑拥有22个组织单位,每个单位都有自己的IT部门,更不要说各部门之间不同版本的应用程序。
|
||||
|
||||
地方政府不能只采用一个Linux发行版本。第一次的尝试是在2006年伴随着Debian的回归,但是特定的操作系统并没有一个可预测的发布时间表。这就是新操作系统LiMux产生的原因,一个基于ubuntu的操作系统。
|
||||
|
||||
“LiMux/开源项目是漫长而又反复的,但是经过几年时间运行这种大型Linux,我们意识到ubuntu才是最能满足我们需求的平台。通过结合开源软件的低成本和自由,加以对我们需要的硬件和应用程序的持续支持,这种做法才是这个项目成功的关键因素之一。当然,最终要还有我们的市府在项目上始终给予的高度支持。”慕尼黑项目经理Peter Hofmann[说道][1]。
|
||||
|
||||
截至2013年,如果只考虑升级成本的话,这个项目帮助慕尼黑节省了€1000万(1360万美元)。如果我们能量化官方支持软件和其余隐藏成本的话,这个数额显得有些多。
|
||||
|
||||
眼下,慕尼黑14000台PC机运行着LiMux,而且数量还在持续增长。这很有可能影响其余德国城市在未来也这么做,尤其是慕尼黑的邻居。
|
||||
|
||||
慕尼黑当局采用了13年才完成这次变革,但是最终事实证明,这样做可以省下一大笔资金,而且证明了Linux实际上是整个城市IT基础设施又好有免费的解决方案。
|
||||
|
||||
---------------------------------------------------------------------------------
|
||||
via: http://news.softpedia.com/news/Canonical-and-Ubuntu-Helped-Munich-Save-Millions-of-Dollars-By-Ditching-Microsoft-Products-450571.shtml
|
||||
|
||||
译者:[su-kaiyao](https://github.com/su-kaiyao) 校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:https://insights.ubuntu.com/2014/07/07/ubuntu-and-open-source-help-the-city-of-munich-save-millions/
|
@ -1,38 +0,0 @@
|
||||
nd0104 is translating
|
||||
Red Hat Announces Availability of its OpenStack Platform 5
|
||||
================================================================================
|
||||
![](http://farm4.static.flickr.com/3108/3191608123_67e1da2b79_o.jpg)
|
||||
|
||||
Red Hat has [announced][1] the general availability of Red Hat Enterprise Linux OpenStack Platform 5, which is the third enterprise release of the company's OpenStack offering. Aside from new features, the platform is clearly being aimed at many types of organizations, including "advanced cloud users, telecommunications companies, Internet service providers (ISPs), and public cloud hosting providers."
|
||||
|
||||
OpenStack Platform 5 is based on the latest OpenStack Icehouse release and provides more evidence of how very focused on cloud computing Red Hat has become.
|
||||
|
||||
The new release includes a three-year support lifecycle, and [I've made the point before][2] that because of its legendary support for Linux, Red Hat's OpenStack support will be a key differentiator in wooing enterprises. There has been controversy over whether Red Hat will support OpenStack distributions other than its own, which is significant because a recent OpenStack user survey showed that [90% of OpenStack deployments today are not running on RHEL][3], but rather use other flavors of Linux and KVM, such as Ubuntu or CentOS.
|
||||
|
||||
Other features in Red Hat's new release include:
|
||||
|
||||
> **Support for integration with VMware infrastructure**, encompassing virtualization, management, networking and storage. Customers may use existing VMware vSphere resources as virtualization drivers for OpenStack Compute (Nova) nodes, managed from the OpenStack Dashboard (Horizon). Additionally, Red Hat Enterprise Linux OpenStack Platform 5 supports the VMware NSX plugin for OpenStack Networking (Neutron) and the VMware Virtual Machine Disk (VMDK) plugin for OpenStack Block Storage (Cinder).
|
||||
>
|
||||
> **Better placement of workloads across cloud resources**. "Server groups enable workloads to be spread broadly across the OpenStack cloud for enhanced resiliency of distributed applications, or located proximately for lower communications latency and better performance of complex applications."
|
||||
>
|
||||
> **Improved support for virtual machines, supporting new cryptographic security requirements from the United States and United Kingdom**. Using the para-virtualized random number generator device added in Red Hat Enterprise Linux 7, cryptographic routines in guest applications will have access to better quality encryption and experience improved performance.
|
||||
>
|
||||
> **Improved interoperability of networking stacks**. Red Hat claims that the new modular plugin architecture for Neutron eases the addition of new networking technologies to OpenStack deployments. The new architecture provides a path for customers with heterogeneous networking environments who want to use a mix of networking solutions in their OpenStack environment.
|
||||
|
||||
Radhesh Balakrishnan, general manager, Virtualization and OpenStack, Red Hat, said in a statement:
|
||||
|
||||
> “We see momentum behind OpenStack as a private cloud platform of choice from enterprise customers and service providers alike. Red Hat Enterprise Linux OpenStack Platform 5 not only offers a production-ready, supported version of OpenStack Icehouse, but it brings a number of features that will simplify its use, and enhance dependability for enterprise users. Alongside those new features, we’re extending our support lifecycle for Red Hat Enterprise Linux OpenStack Platform, giving users confidence that the solution they deploy will be supported by our global team for the next three years.”
|
||||
|
||||
You can bet on that last point--a three-year support plan--as a key reason why some enterprises will go with Red Hat in the increasingly competitive OpenStack race. And, clearly, Red Hat is tying its future to cloud computing and the OpenStack platform.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://ostatic.com/blog/red-hat-announces-availability-of-its-openstack-platform-5
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.marketwatch.com/story/red-hat-announces-general-availability-of-red-hat-enterprise-linux-openstack-platform-5-2014-07-08
|
||||
[2]:http://ostatic.com/blog/why-red-hats-openstack-support-must-be-as-inclusive-as-possible
|
||||
[3]:http://www.openstack.org/blog/2013/11/openstack-user-survey-october-2013/
|
@ -1,29 +0,0 @@
|
||||
Canonical and Ubuntu Helped Munich Save Millions of Dollars by Ditching Microsoft Products
|
||||
================================================================================
|
||||
![](http://i1-news.softpedia-static.com/images/news2/Canonical-and-Ubuntu-Helped-Munich-Save-Millions-of-Dollars-By-Ditching-Microsoft-Products-450571-2.jpg)
|
||||
|
||||
**The City of Munich has become one of the most prominent examples of a city administration that switched from Microsoft products to open source, and it looks like Canonical and Ubuntu were an instrumental part of that change.**
|
||||
|
||||
The City of Munich managed to shake off the Microsoft dependency, but it took a lot of work and it wasn't cheap. The benefits of moving from Microsoft products to open source might look expensive, but the costs are significantly lower than an upgrade, and it will prove to be a lot cheaper in the future.
|
||||
|
||||
Moving from a proprietary solution to an open source one is not all that simple when you have a city the size of Munich. It has 22 organizational units and each of those units has its own IT department, not to mention different versions of the applications.
|
||||
|
||||
The local authorities couldn't just adopt a Linux distribution on the fly. The first try was made with Debian back in 2006, but that particular OS didn't have a predictable release schedule. This is how the new LiMux was born, an operating system based on Ubuntu.
|
||||
|
||||
“The LiMux/open source project was a long and iterative one, but after a few years of running such a large Linux base, we realized Ubuntu was the platform that could satisfy our requirements best. By combining the low costs and freedom of open source software with ongoing support for the hardware and applications we need, it was one of the critical elements to the success of this project. Most important was the backing of our politicians throughout the project,” [said][1] Peter Hofmann, project manager for the City of Munich.
|
||||
|
||||
This tremendous project helped Munich save €10 million ($13.6 million) by 2013, but that is if we take into consideration only the upgrade costs. That sum might be a lot bigger if we could quantify the official support for the software and other hidden costs.
|
||||
|
||||
Right now, in Munich, there are 14,000 PCs that are running LiMux and that number is still increasing. It's very likely that other German cities will do the same in the future, especially the ones neighboring Munich.
|
||||
|
||||
It took the authorities of Munich 13 years to finish the transition, but in the end they managed to save a lot of money and prove that Linux is actually a very good and free solution for the IT infrastructure of an entire city.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://news.softpedia.com/news/Canonical-and-Ubuntu-Helped-Munich-Save-Millions-of-Dollars-By-Ditching-Microsoft-Products-450571.shtml
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:https://insights.ubuntu.com/2014/07/07/ubuntu-and-open-source-help-the-city-of-munich-save-millions/
|
@ -0,0 +1,32 @@
|
||||
Git 2.0.2 Version Control System Now Available for Download
|
||||
================================================================================
|
||||
![](http://i1-news.softpedia-static.com/images/news2/Git-2-0-2-Version-Control-System-Now-Available-for-Download-451147-2.jpg)
|
||||
|
||||
**Git 2.0.2, a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency, has been officially released.**
|
||||
|
||||
The new Git 2.0.x branch continues the trend of large releases, integrating a big number of changes and fixes. This latest update may be just a maintenance one, but it does feature some interesting modifications.
|
||||
|
||||
According to the developers, the documentation for the "git submodule sync" mentions that the subcommand can take the "--recursive" option, the mishandling of patterns in .gitignore that had trailing SPs quoted with backslashes has been corrected, and the Recent updates to "git repack" no longer duplicate objects that are in the packfiles marked with .keep flag by mistake.
|
||||
|
||||
Also, "git clone -b brefs/tags/bar" no longer thinks that git follows a single tag, even though it was a name of the branch, "%G" (nothing after G) is an invalid pretty format specifier and now the parser knows that it's garbage, the code used to avoid adding the same alternate object store twice has been fixed, and a couple of other fixes have been implemented.
|
||||
|
||||
For a complete list of changes, check out the [changelog][1].
|
||||
|
||||
Download Git 2.0.2:
|
||||
|
||||
- [tar.gz][1][sources] [4.70 MB]
|
||||
- [Debian/Ubuntu DEB ALL][2][ubuntu_deb] [0 KB]
|
||||
- [Red Hat/Fedora/Mandriva/openSUSE RPM noarch][3][rh_rpm] [0 KB]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://news.softpedia.com/news/Git-2-0-2-Version-Control-System-Now-Available-for-Download-451147.shtml
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:https://github.com/git/git/blob/master/Documentation/RelNotes/2.0.2.txt
|
||||
[2]:https://github.com/git/git/archive/v2.0.2.tar.gz
|
||||
[3]:http://git-scm.com/download/linux
|
||||
[4]:http://git-scm.com/download/linux
|
@ -0,0 +1,46 @@
|
||||
OpenMorrowind 0.31.0 RPG Remake Is Already Looking Great
|
||||
================================================================================
|
||||
![](http://i1-news.softpedia-static.com/images/news2/OpenMorrowind-0-31-0-RPG-Remake-Is-Already-Looking-Great-451120-2.jpg)
|
||||
|
||||
**OpenMW, an open source implementation of The Elder Scrolls 3: Morrowind game engine and functionality, is now at version 0.31.0 and packs lots of new features.**
|
||||
|
||||
OpenMW, or OpenMorrowind, is a project that aims to bring one of best role-playing games ever created into the open source world, but not by simple porting. The makers of this title have been working non-stop in the last months and it seems that the game is really starting to take shape.
|
||||
|
||||
Half a year ago, players couldn't do much in OpenMW, but now a lot of features have been integrated, and it's almost playable if you don't expect too much. Even with all the changes in place, the version number indicates that the development is moving rather slowly and numerous problems still remain. It will take a long time until the game reaches a stable version, but when it gets there, it's going to be an awesome RPG.
|
||||
|
||||
“The OpenMW team is proud to announce the release of version 0.31.0! This release includes implementation of many smaller features that have been sorely missing, as well fixes for a ridiculous amount of bugs. Many thanks to our developers for their relentless attention to detail. Some optimization has made it into this release, let us know if you see any increased performance,” reads the announcement on the official website.
|
||||
|
||||
A number of important changes have been made and lots of new stuff has been added. For example, a periodic cleanup/refill has been added, precipitation and weather particles are now ready in the engine, the dialog has been merged, saving missing creature state is now working properly, the murder crime has been implemented, a number of sneak skill enhancements have been added, and animated main menu support has been implemented.
|
||||
|
||||
Also, the clouds and weather have been modified to better match vanilla Morrowind, the background tracks are no longer repeating, the dead body collision behavior has been improved, and lots of other fixes have been implemented.
|
||||
|
||||
A complete list of changes and new features can be found in the official [announcement][1]. Users must legally own and install the game before they can use OpenMW – as it is intended – to play Morrowind.
|
||||
|
||||
Download OpenMW 0.31.0:
|
||||
|
||||
- [tar.gz][2][sources] [3.20 MB]
|
||||
- [tar.gz (64-bit)][3][binary] [33.40 MB]
|
||||
- [tar.gz (32-bit)][4][binary] [33.10 MB]
|
||||
- [Ubuntu PPA Repository][5][ubuntu_deb] [0 KB]
|
||||
- [Arch Linux Package][6][binary] [0 KB]
|
||||
- [Debian PPA Repository][7][debian_deb] [0 KB]
|
||||
|
||||
OpenMW aims to be a full-featured reimplementation of the Morrowind engine capable to work natively on all supported platforms and to support all existing content, including Tribunal, Bloodmoon, and all user-created mods.
|
||||
|
||||
Keep in mind that this is not a stable version and bugs might still appear.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://news.softpedia.com/news/OpenMorrowind-0-31-0-RPG-Remake-Is-Already-Looking-Great-451120.shtml
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:https://openmw.org/2014/openmw-0-31-0/
|
||||
[2]:https://github.com/OpenMW/openmw/archive/openmw-0.31.0.tar.gz
|
||||
[3]:https://github.com/OpenMW/openmw/releases/download/openmw-0.31.0/openmw-0.31.0-Linux-64Bit.tar.gz
|
||||
[4]:https://github.com/OpenMW/openmw/releases/download/openmw-0.31.0/openmw-0.31.0-Linux.tar.gz
|
||||
[5]:https://launchpad.net/~openmw/+archive/openmw
|
||||
[6]:https://aur.archlinux.org/packages/?O=0&K=openmw
|
||||
[7]:http://forum.openmw.org/viewtopic.php?f=20&t=1298
|
@ -0,0 +1,37 @@
|
||||
Time to Upgrade: Ubuntu 13.10 Support Ends Today
|
||||
================================================================================
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/04/upgrade-available.jpg)
|
||||
|
||||
**It’s had a fair old run, but after 9 months basking in the sun today marks the end of official support for Ubuntu 13.10 ‘Saucy Salamander’.**
|
||||
|
||||
> Despite the name ‘Saucy’, the changes on offer were rather bland
|
||||
|
||||
Those still running it should look at upgrading to the most recent stable release, Ubuntu 14.04 LTS. Launched back in April, it will be supported with updates on the desktop all the way until mid-April 2019.
|
||||
|
||||
Support for the server version of Ubuntu 13.10 also formally ends today.
|
||||
|
||||
### Saucy Loses Flavour ###
|
||||
|
||||
Ubuntu 13.10 came out last October with Canonical pledging to provide a full 9 months of ongoing security and bug fixes on the desktop. As of July 17 these updates will cease and no further updates or backported packages will be provided.
|
||||
|
||||
Canonical’s [recommended upgrade path][1] is to 14.04, a transition that can be handled directly on the desktop itself through the Software Updater application or via the command line through the ‘`do-release-upgrade`‘ command.
|
||||
|
||||
Saucy in name, but bland in nature, 13.10 is far from being one of Ubuntu’s more remarkable releases — [as evidenced by many of the online reviews at the time][2].
|
||||
|
||||
It was, however, notable for inflicting(注:这个单词原文有删除线) introducing Smart Scopes to the Unity Dash, adding a keyboard indicator for faster language layout switching, and being the first release to integrate `Ubuntu One Single Sign-on` into the installation experience.
|
||||
|
||||
For a natty visual rundown of all that debuted with it you can watch the compilation video below.
|
||||
|
||||
Youtobe 视频地址:[http://www.youtube.com/embed/1EiRQ-znEcI?feature=oembed][3]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.omgubuntu.co.uk/2014/07/ubuntu-13-10-support-ends-today
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:https://help.ubuntu.com/community/TrustyUpgrades
|
||||
[2]:http://www.omgubuntu.co.uk/2013/10/ubuntu-13-10-press-reaction
|
||||
[3]:http://www.youtube.com/embed/1EiRQ-znEcI?feature=oembed
|
@ -1,114 +0,0 @@
|
||||
jiajia translating...
|
||||
|
||||
Got Linux? Add Proprietary Code
|
||||
================================================================================
|
||||
![](http://www.linuxinsider.com/images/rw661226/linux-enterprise-proprietary-code.jpg)
|
||||
|
||||
> For some industries, running proprietary software on an open source Linux distro is not the exception -- it's the rule of thumb. Take, for example, the Wall Street crowd. "Ninety-nine percent of the applications on Wall Street depend on proprietary products. We are much like Oracle in that our product runs on Linux but has a proprietary license," said FSMLabs' President Victor Yodaiken.
|
||||
|
||||
Migrating to the Linux platform is not an either/or proposition. Linux as a computing platform is so flexible that it offers users a have-it-your-way menu of software options.
|
||||
|
||||
One option is the Linux desktop. Individual users in home computing, SOHO and SMB operations can choose from a variety of enterprise-class Linux distributions. The Linux desktop OS offers a no-cost or low-cost alternative to the frustrations of Microsoft Windows or the limitations of Apple's Unix-based OS X platform for its relatively costly Mac hardware.
|
||||
|
||||
Another migration path is to forgo acclimating office staff to the Linux desktop. Instead, enterprises can opt to run their back-office and server operations on a Linux server. Linux servers have a rigorous giant footprint in the networking and cloud computing worlds. Linux servers are commonplace in many other enterprise settings.
|
||||
|
||||
A third migration choice is to run a full Linux shop. Standard office computing software is readily available in open source packages for office suites, Web browsing and graphic production tasks. Open source database applications connect famously with back-end software and servers. Plus, Linux does not need hardware-specific buy-in requirements.
|
||||
|
||||
Staff training to use the Linux desktop applications often is needed only in small amounts. Thanks to workers' familiarity with cross-platform software such as LibreOffice and OpenOffice productivity suites, as well as Google Chrome and Firefox Web browsers, front-office communications rarely miss a beat.
|
||||
|
||||
Linux is flexible. A new trend is to create third-party proprietary software to suit your own enterprise needs. Commercial software firms can recompile must-have Windows or any other platform's software. They also can create task-specific Linux applications that combine off-the-shelf open source components with their own proprietary code.
|
||||
|
||||
"I believe this is becoming a new trend. Enterprises are using third-party proprietary software developed to work on the Linux OS. One of the factors pushing enterprises into migrating to Linux with custom-made software is the financial burden of continuing to pay Microsoft licensing fees," Dayan Jeremiah, CEO of [Icewarp Pacific][1], told LinuxInsider.
|
||||
|
||||
### Linux Does Proprietary ###
|
||||
|
||||
One of the biggest hurdles a company faces in migrating to any operating system is overseeing application compatibility. In the case of moving into Linux, an enterprise has to make sure that whatever software it uses is compatible with the Linux OS, noted Jeremiah.
|
||||
|
||||
The Linux OS has an arsenal of software that runs across the numerous distributions and Linux desktop environments. Depending on the industry involved, the vast open source community may not have a specific replacement for every specialized computing task. In that case, it is often cost-effective to roll your own with the help of a third-party software developer.
|
||||
|
||||
"Using a third-party software vendor helps to ensure this compatibility. For example, we are able to mix and match the software components together so that the application works on Linux," said Jeremiah.
|
||||
|
||||
### An Old Model Made New ###
|
||||
|
||||
A growing number of proprietary software firms, such as Icewarp, build specialized software to meet an enterprise's specific computing needs. They use many open source components in the mix.
|
||||
|
||||
The savings, compared to staying with the Microsoft infrastructure, involve not only licensing costs, but also reduced coding costs.
|
||||
|
||||
"We can build an entire software solution using readily available components for Linux. This entire solution is generally much more cost-effective, efficient and stable across the board," Jeremiah noted.
|
||||
|
||||
Icewarp does not develop the specialized software as free open source projects. It does not provide free versions and charge a fee for support. You order it and pay for it.
|
||||
|
||||
### Porting Code Can Be Chaotic ###
|
||||
|
||||
One hurdle in making software ported from another computing platform compatible with the Linux OS is the vast majority of Linux flavors, according to Jacob Loveless, CEO of [Lucera][2]. The Linux OS has a common kernel, but it has a lot of flavors.
|
||||
|
||||
"The problem develops when software companies have to cross-compile for multiple Linux systems," Loveless told LinuxInsider. "With the exception of Microsoft Exchange Server, most databases run exceptionally well on Linux. MySQL and PostSQL are probably to two most prominent open source versions."
|
||||
|
||||
The majority of the hurdles in porting software to Linux require recompiling the code. Usually there are platform-specific things you have to do to make it work, he said.
|
||||
|
||||
For example, if you have proprietary code bases written in .Net or other languages for Windows, the open source compiler that runs on Linux is not always compatible. So you have a lot of application work you have to redo, Loveless explained.
|
||||
|
||||
Another example involves using databases. You often have to port to a different database and a different Web server.
|
||||
|
||||
"There is definitely work there," said Loveless.
|
||||
|
||||
### A Lot Is Not Enough ###
|
||||
|
||||
Another compatibility issue in migrating to Linux is the type of open source software a company needs.
|
||||
|
||||
"There are not enough open source solutions for all of the specialized enterprise needs," maintained IceWarp's Jeremiah, "but whatever is available for Linux in general, we feel is sufficient. What is not provided by the communities for specialized business applications can be built by third-party software firms."
|
||||
|
||||
For example, IceWarp recently built a specialized Linux-compatible application that required no additional hardware purchase and no additional licensing fees.
|
||||
|
||||
The specialized software included a clustered set of load balancers, a cluster of database servers and a cluster set of IP servers. All of it runs on a standard Red Hat Enterprise Linux or CentOS Linux distro.
|
||||
|
||||
### Follow the Money ###
|
||||
|
||||
In some cases, you can follow the money trail to the Linux OS. Sometimes it is the Linux server that has heavily populated an industry. Other times it is a particular Linux desktop application -- or it could be both.
|
||||
|
||||
Take, for example, the Wall Street crowd. In financial markets, time synchronization becomes critical. The financial networks rely on distributive networks where users have to work with time locks to complete transactions. Other applications require very precise timing before a transaction can be executed. These are functions that require precise time synchronization controls, explained Victor Yodaiken, president of [FSMLabs][3].
|
||||
|
||||
When FSMLabs started developing its TimeKeeper time synchronization software, Yodaiken expected there soon would be a need to develop a Windows version.
|
||||
|
||||
However, "it turned out that everybody who is doing automated trading or low-latency trading or even collecting data at high precision is running Linux in this market," he told LinuxInsider.
|
||||
|
||||
### Time Is Costly ###
|
||||
|
||||
FSMLabs uses proprietary code that runs on Linux. The Network Time Protocol built into Linux does not adequately synchronize time into nanoseconds for software that tracks stock and trade transactions. Windows falls short for another reason.
|
||||
|
||||
"I think Linux's popularity over Windows is that Windows does not have a standard API which lets you get time below a millisecond. So Windows does not really do you any good. You have to have specialized APIs. With Linux, you do not have to screw around with your application program," Yodaiken said.
|
||||
|
||||
The financial markets were one of the first to embrace Linux. Many of the early systems managers came up from [Bell Labs][4] in the 1980s, so it is a very established market, he added.
|
||||
|
||||
### Filling a Need ###
|
||||
|
||||
For some industries, running proprietary software on an open source Linux distro is not the exception -- it's the rule of thumb.
|
||||
|
||||
"Ninety-nine percent of the applications on Wall Street depend on proprietary products. We are much like Oracle in that our product runs on Linux but has a proprietary license," said FSMLabs' Yodaiken.
|
||||
|
||||
Some markets that run Linux need more specialized software than what's available as open source products. Existing open source software just does not meet their requirements. That is why software developers provide commercial offerings for enterprise Linux operations, he added.
|
||||
|
||||
"That is pretty common. Open source is really best suited for big markets. That is why it has wide, general requirements. Not too many people would have to have a one microsecond correct time all the time -- and alarms if they can't get it," he pointed out.
|
||||
|
||||
### Linux Purism Is Pointless ###
|
||||
|
||||
The concept of maintaining a totally free open source software infrastructure on the Linux OS may fall short when it comes to running specialized software. That reality holds true for any specialized business.
|
||||
|
||||
When a specialized computing need does not impact a wide user market, a third-party software developer can provide a proprietary, commercial or closed source software solution. Call it what you will. Open source purity might become a thing of the past as businesses continue to adopt the Linux OS.
|
||||
|
||||
"Having commercial software prominent on the Linux OS is fairly common," said Yodaiken. "People in business are not purists. They just want to solve problems."
|
||||
|
||||
Jack M. Germain has been writing about computer technology since the early days of the Apple II and the PC. He still has his original IBM PC-Jr and a few other legacy DOS and Windows boxes. He left shareware programs behind for the open source world of the Linux desktop. He runs several versions of Windows and Linux OSes and often cannot decide whether to grab his tablet, netbook or Android smartphone instead of using his desktop or laptop gear. You can connect with him on Google+.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.linuxinsider.com/story/80555.html
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.icewarp.com/
|
||||
[2]:https://lucerahq.com
|
||||
[3]:http://www.fsmlabs.com/
|
||||
[4]:http://www.bell-labs.com/
|
@ -1,72 +0,0 @@
|
||||
HTG Explains: What is Unix and Why Does It Matter?
|
||||
================================================================================
|
||||
![](http://cdn.howtogeek.com/wp-content/uploads/2014/02/ken-thompson-and-dennis-richie-at-pdp-11.jpg)
|
||||
|
||||
Most operating systems can be grouped into two different families. Aside from Microsoft’s Windows NT-based operating systems, nearly everything else traces its heritage back to Unix.
|
||||
|
||||
Linux, Mac OS X, Android, iOS, Chrome OS, Orbis OS used on the PlayStation 4, whatever firmware is running on your router — all of these operating systems are often called “Unix-like” operating systems.
|
||||
|
||||
### Unix’s Design Lives On Today ###
|
||||
|
||||
Unix was developed in AT&T’s Bell Labs back in the mid-to-late 1960′s. The initial release of Unix had some important design attributes that live on today.
|
||||
|
||||
One is the “Unix philosophy” of creating small, modular utilities that do one thing and do them well. If you’re familiar with using a Linux terminal, this should be familiar to you — the system offers a number of utilities that can be combined in different ways through [pipes and other features][1] to perform more complex tasks. Even graphical programs are likely calling simpler utilities in the background to do the heavy lifting. This also makes it easy to [create shell scripts][2], stringing together simple tools to do complicated things.
|
||||
|
||||
Unix also had a single file system that programs use to communicate with each other. This is [why “everything is a file” on Linux][3] – including hardware devices and special files that provide system information or other data. It’s also why only Windows has drive letters, which it inherited from DOS — on other operating systems, every file on the system is part of a single directory hierarchy.
|
||||
|
||||
![](http://cdn.howtogeek.com/wp-content/uploads/2014/02/unix-bell-labs.jpg)
|
||||
|
||||
### Tracing the Unix Descendants ###
|
||||
|
||||
Like any history going back over 40 years, the history of Unix and its descendants is messy. To simplify things, we can roughly group Unix’s descendants into two groups.
|
||||
|
||||
One group of Unix descendants were developed in academia. The first was BSD (Berkeley Software Distribution), an open-source, Unix-like operating system. BSD lives on today through FreeBSD, NetBSD, and OpenBSD. NeXTStep was also based on the original BSD, Apple’s Mac OS X was based on NeXTStep, and iOS was based on Mac OS X. Many other operating systems, including the Orbis OS used on the PlayStation 4, are derived from types of BSD operating systems.
|
||||
|
||||
Richard Stallman’s GNU project was also started as a reaction to AT&T’s increasingly restrictive Unix software licensing terms. MINIX was a Unix-like operating system created for educational purposes, and Linux was inspired by MINIX. [The Linux we know today is really GNU/Linux][4], as it’s made up of the Linux kernel and a lot of GNU utilities. GNU/Linux isn’t directly descended from BSD, but it is descended from Unix’s design and has its roots in academia. Many operating systems today, including Android, Chrome OS, Steam OS, and a huge amount of embedded operating systems for devices, are based on Linux.
|
||||
|
||||
On the other hand, there were the commercial Unix operating systems. AT&T UNIX, SCO UnixWare, Sun Microsystems Solaris, HP-UX, IBM AIX, SGI IRIX — many big corporations wanted to create and license their own versions of Unix. These aren’t quite as common today, but some of them are still out there.
|
||||
|
||||
![](http://cdn.howtogeek.com/wp-content/uploads/2014/02/history-of-unix.png)
|
||||
|
||||
Image Credit: [Wikimedia Commons][5]
|
||||
|
||||
### The Rise of DOS and Windows NT ###
|
||||
|
||||
Many people expected Unix to become the industry standard operating system, but DOS and “IBM PC compatible” computers eventually exploded in popularity. Microsoft’s DOS became the most successful DOS of them all. DOS was never based on Unix at all, which is [why Windows uses a backslash for file paths while everything else uses a forward slash][6]. This decision was made back in the early days of DOS, and later versions of Windows inherited it, just as BSD, Linux, Mac OS X, and other Unix-like operating systems inherited many aspects of Unix’s design.
|
||||
|
||||
Windows 3.1, Windows 95, Windows 98, and Windows ME were all based on DOS underneath. Microsoft was developing a more modern and stable operating system at the time, which they named Windows NT — for “Windows New Technology.” Windows NT eventually made its way to regular computer users as Windows XP, but it was available for corporations as Windows 2000 and Windows NT before that.
|
||||
|
||||
All of Microsoft’s operating systems are based on the Windows NT kernel today. Windows 7, Windows 8, Windows RT, Windows Phone 8, Windows Server, and the Xbox One’s operating system all use the Windows NT kernel. Unlike most other operating systems, Windows NT wasn’t developed as a Unix-like operating system.
|
||||
|
||||
Microsoft didn’t start with a completely clean slate, of course. To maintain compatibility with DOS and old Windows software, Windows NT inherited many DOS conventions like drive letters, backslashes for file paths, and forward slashes for command-line switches.
|
||||
|
||||
![](http://cdn.howtogeek.com/wp-content/uploads/2014/02/windows-2000-professional-built-on-nt-technology.jpg)
|
||||
|
||||
Why it Matters
|
||||
|
||||
Have you ever taken a look at the Mac OS X terminal or file system and noticed how similar it was to Linux’s, and how different they both were from Windows? Well, this is why — both Mac OSX and Linux are Unix-like operating systems.
|
||||
|
||||
Knowing this bit of history helps you understand what a “Unix-like” operating system is, and why so many operating systems seem so similar to each other while Windows seems so different. This explains why the terminal on Mac OS X will feel so familiar to a Linux geek, while [the Command Prompt and PowerShell on Windows][7] are so different from other command-line environments.
|
||||
|
||||
This was just a quick history that will help you understand how we got to where we are today without getting bogged down in the details. If you want more information, you can find entire books on the history of Unix.
|
||||
|
||||
Image Credit: [Peter Hamer on Flickr][8], [Takuya Oikawa on Flickr][9], [CJ Sorg on Flickr][10]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.howtogeek.com/182649/htg-explains-what-is-unix/
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.howtogeek.com/110150/become-a-linux-terminal-power-user-with-these-8-tricks/
|
||||
[2]:http://www.howtogeek.com/107217/how-to-manage-processes-from-the-linux-terminal-10-commands-you-need-to-know/
|
||||
[3]:http://www.howtogeek.com/117939/htg-explains-what-everything-is-a-file-means-on-linux/
|
||||
[4]:http://www.howtogeek.com/139287/the-great-debate-is-it-linux-or-gnulinux/
|
||||
[5]:http://en.wikipedia.org/wiki/File:Unix_history.svg
|
||||
[6]:http://www.howtogeek.com/181774/why-windows-uses-backslashes-and-everything-else-uses-forward-slashes/
|
||||
[7]:http://www.howtogeek.com/163127/how-powershell-differs-from-the-windows-command-prompt/
|
||||
[8]:http://www.flickr.com/photos/peter-hamer/2876612463/
|
||||
[9]:http://www.flickr.com/photos/takuyaoikawa/2060554607/
|
||||
[10]:http://www.flickr.com/photos/cjsorg/2726088549/
|
@ -1,58 +0,0 @@
|
||||
Joy of Programming: Fail Fast!
|
||||
================================================================================
|
||||
![](http://www.opensourceforu.com/wp-content/uploads/2011/12/fail-350x262.jpg)
|
||||
|
||||
> When a problem occurs in the software, it should fail immediately, in an easily noticeable way. This “fail fast” behaviour is desirable, and we’ll discuss this important concept in this column.
|
||||
|
||||
At first, a “fail fast” might appear to be a bad practice affecting reliability — why should a system crash (or fail), when it can continue execution? For this, we need to understand that fail fast is very relevant in the context of Heisenbugs.
|
||||
|
||||
Consider Bohrbugs, which always crash for a given input, for example, with a null-pointer access. These bugs are easier to test, reproduce and fix. Now, all experienced programmers would have faced situations where the bug that caused the crash just disappears when the software is restarted. No matter how much time and effort is spent to reproduce the problem, the bug eludes us. These bugs are known as Heisenbugs.
|
||||
|
||||
The effort required to find, fix and test Heisenbugs is an order of magnitude more than the effort required for Bohrbugs. One strategy to avoid Heisenbugs is to turn them into Bohrbugs. How? By anticipating the possible cases in which Heisenbugs can arise, and trying to make them Bohrbugs. Yes, it is not easy, and it is also not always possible, but let us look at a specific example where it is useful.
|
||||
|
||||
Concurrent programming is one paradigm where Heisenbugs are common. Our example is a concurrency-related issue in Java. While iterating over a Java collection, we are supposed to modify the collection only through the Iterator methods, such as the remove() method. During iteration, if another thread attempts to modify that underlying collection (because of a programming mistake), the underlying collection will get corrupted (i.e., result in an incorrect state).
|
||||
|
||||
Such an incorrect state can lead to an eventual failure — or if we are fortunate (actually, unfortunate!), the program continues execution without crashing, but gives the wrong results. It is difficult to reproduce and fix these bugs, because such programming mistakes are non-deterministic. In other words, it is a Heisenbug.
|
||||
|
||||
Fortunately, the Java Iterators try to detect such concurrent modifications, and if found, will throw a `ConcurrentModificationException`, instead of failing late — and that too, silently. In other words, the Java Iterators follow the “fail fast” approach.
|
||||
|
||||
What if a `ConcurrentModificationException` is observed in production software? As the Javadoc for this exception observes, it “
should be used only to detect bugs.” In other words, `ConcurrentModificationExceptions` are supposed to be found and fixed during software development, and should not leak to production code.
|
||||
|
||||
Well, if production software does get this exception, it is certainly a bug in the software, and should be reported to the developer and fixed. At least, we know that there was an attempt for concurrent modification of the underlying data structure, and that’s why the software failed (instead of getting wrong results from the software, or failing later with some other symptoms, for which it is not feasible to trace the root cause).
|
||||
|
||||
The “fail-safe” approach is meant for developing robust code. A very good example of writing fail-safe code is using assertions. Unfortunately, there is a lot of unnecessary controversy surrounding the use of asserts. The main criticism is this: the checks are enabled in the development version, and disabled in release versions.
|
||||
|
||||
However, this criticism is wrong: asserts are never meant to replace the defensive checks that should be put in place in the release version of the software. For example, asserts should not be used to check if the argument passed to a function is null or not. Instead, an if condition should be used to check if the argument is passed correctly, or else an exception, or a premature return, should be performed, as appropriate to the context. However, asserts can be used to do additional checks for assumptions that are made in the code, which are supposed to hold true. For example, a condition that checks that the stack is not empty after a push operation is performed on it (i.e., checking for “invariants”).
|
||||
|
||||
So, fail fast, be assertive, and you’re on the way to developing more robust code.
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via:http://www.opensourceforu.com/2011/12/joy-of-programming-fail-fast/
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:
|
||||
[2]:
|
||||
[3]:
|
||||
[4]:
|
||||
[5]:
|
||||
[6]:
|
||||
[7]:
|
||||
[8]:
|
||||
[9]:
|
||||
[10]:
|
||||
[11]:
|
||||
[12]:
|
||||
[13]:
|
||||
[14]:
|
||||
[15]:
|
||||
[16]:
|
||||
[17]:
|
||||
[18]:
|
||||
[19]:
|
||||
[20]:
|
@ -1,40 +0,0 @@
|
||||
zpl1025
|
||||
Here Are 5 Amazing Ascii Art Generators!
|
||||
================================================================================
|
||||
![](http://www.efytimes.com/admin/useradmin/photo/nin511907PM712014.jpg)
|
||||
|
||||
ASCII is a very fascinating character-encoding scheme wherein codes represent text in computers, communications equipment, and other devices that use text. The next gen might call it old-school but those familiar with the concept know how unique ASCII really is. Here we have compiled a list of 5 amazing ASCII art generators for you.
|
||||
|
||||
### 1.[GlassGiant ASCII Art][1] ###
|
||||
|
||||
This little program converts your picture to ASCII text art - a jumble of letters, numbers and symbols that do not appear to have any significance until you step back and look at the whole picture. It has no practical purpose, other than the neat factor.
|
||||
|
||||
### 2.[ASCII Art Generator][2] ###
|
||||
|
||||
ASCII art is an art movement that utilises computers for presentation and consists of pictures pieced together from printable characters. All you need to do id upload your image and it will convert it to ascii art.
|
||||
|
||||
### 3.[Ascii.mastervb][3] ###
|
||||
|
||||
ASCII Art is created from a 7-bit ASCII characters standard. ASCII Art was popular in 70-80s. In that time, computer OS was still text based. This application can convert images to ascii really quick.
|
||||
|
||||
### 4.[IMG2TXT][4] ###
|
||||
|
||||
This script takes the URL of a GIF, JPG, or PNG image and converts that image into ASCII text or colored HTML.
|
||||
|
||||
### 5.[picascii][5] ###
|
||||
|
||||
Convert a picture into ASCII TEXT,HTML. In order to convert a picture, you just need to enter an url or select a picture from your computer (gif,jpeg,png).
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.efytimes.com/e1/fullnews.asp?edid=142480
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://glassgiant.com/ascii/
|
||||
[2]:http://www.ascii-art-generator.org/
|
||||
[3]:http://ascii.mastervb.net/
|
||||
[4]:http://www.degraeve.com/img2txt.php
|
||||
[5]:http://picascii.com/
|
@ -1,3 +1,4 @@
|
||||
Love-xuan 翻译中
|
||||
How to Install Lightweight Budgie Desktop in Ubuntu 14.04
|
||||
================================================================================
|
||||
**If you follow us over on Twitter you may have caught a glimpse of a screenshot we shared recently, along with the invitation to name the desktop environment pictured. **
|
||||
|
@ -1,26 +0,0 @@
|
||||
[Quick Tip] Set Default Browser on Debian/Ubuntu Using Terminal
|
||||
================================================================================
|
||||
![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/Browsers-790x436.jpg)
|
||||
|
||||
Hey Guys,
|
||||
|
||||
In this post, we are going to use the terminal to make a browser default.
|
||||
|
||||
Even though, this can easily be done using the browser’s main interface, is handy sometimes if you need to do this remotely.
|
||||
|
||||
To do this you simply open up the terminal and run the line of code below:
|
||||
|
||||
Enter the number beside the browser you wish to make default and you are done.
|
||||
|
||||
sudo update-alternatives --config x-www-browser
|
||||
|
||||
![](http://180016988.r.cdn77.net/wp-content/uploads/2014/07/change_default_browser_from_terminal_debian_enock.png)
|
||||
|
||||
Enjoy!
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.unixmen.com/quick-tip-set-default-browser-debianubuntu-using-terminal/
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
88
sources/tech/20140715 Command Line Tuesdays--Part Five.md
Normal file
88
sources/tech/20140715 Command Line Tuesdays--Part Five.md
Normal file
@ -0,0 +1,88 @@
|
||||
Command Line Tuesdays – Part Five
|
||||
================================================================================
|
||||
Yes, you’ve guessed what time it is! It’s time to rrrrrrrrummmbleeeee! And this time, we’ll learn how to work with commands. So without further ado, let’s get to business.
|
||||
|
||||
Mr Shotts states that until now, we worked with a few mysterious commands, arguments and options, and today is the day we shed a little light upon that mystery. We’ll learn the following commands and what they do: type, which, help and man. But first, let’s learn…
|
||||
|
||||
### …what are commands? ###
|
||||
|
||||
All great things come in fours, and it’s the same with commands. We can split them up into four categories:
|
||||
|
||||
**1) An executable program:** a command can be an executable program. If you’ve ‘traveled’ across your file system in the previous lessons like you were supposed to, you probably visited the /usr/bin folder. You’ve seen quite a number of familiar names like transmission-gtk, deluge-gtk etc. What’s less important for us novices currently is that programs there can be compiled binaries or programs written in scripting languages. Point is, since they are executable programs, you can run them. Try it. Navigate to it, list the files inside, pick one and run it simply by typing its name.
|
||||
|
||||
**2) A command built into the shell:** bash provides a number of commands internally called shell builtins. The cd command, for example, is a shell builtin, mr Shotts says.
|
||||
|
||||
**3) A shell function:** miniature shell script, built into the environment. For the time being, we’ll just mention it, as it will be covered in the following weeks.
|
||||
|
||||
**4) An alias:** commands you can define yourself, using other commands. Also coming in the following lessons.
|
||||
|
||||
Now, it’s useful to know what type of command we’re dealing with. And we can find out using…
|
||||
|
||||
### …type ###
|
||||
|
||||
You can use **type + command** to inspect what kind of command is the command you’d like to use. You do it by simply typing: type command and you’ll get an output. For example:
|
||||
|
||||
![type mkdir](https://news.opensuse.org/wp-content/uploads/2014/07/Zaslonska-slika-2014-07-15-091448.png)
|
||||
|
||||
or
|
||||
|
||||
![type ls](https://news.opensuse.org/wp-content/uploads/2014/07/Zaslonska-slika-2014-07-15-091640.png)
|
||||
|
||||
…where we can see that the ‘ls’ command is actually an alias of ‘_ls’!
|
||||
|
||||
### which ###
|
||||
|
||||
Sometimes (but rarely on a desktop system, though) there are more versions of one executable installed on a machine. To find out the exact location of a given executable, we can use command which. Additionally, it only works with executable programs.
|
||||
|
||||
![which transmission-gtk](https://news.opensuse.org/wp-content/uploads/2014/07/Zaslonska-slika-2014-07-15-092052.png)
|
||||
|
||||
Now, mostly every command has documentation that comes with it. So you’re somewhere doing your CLI thing, no access to the internet so you can’t bug geekos on the forums or IRC, and you need to find out how to exactly use a command. You can do it two ways. First being…
|
||||
|
||||
### …help ###
|
||||
|
||||
help command works with shell builtins (the second category we have mentioned above). So you can pick a shell builtin, like cd, for example, and simply type help cd. You’ll get a helpful page printed out in your terminal, so go ahead and read what cd has to offer. It shows in what ways you can use the command, what options you can use (it’s in square brackets, which means they are optional! Also, if there’s a vertical separator inside the square brackets, it means the options mentioned are mutually exclusive. Don’t use them together!)
|
||||
|
||||
### –help ###
|
||||
|
||||
help works only for the shell builtins. But most executables work with –help. As far as usage goes, it’s similar to help, but you have to type –help after the command you want to inspect. For example, transmission-gtk –help. Try it out, and see what options you can use with that executable etc.
|
||||
|
||||
### man ###
|
||||
|
||||
Most executables come with a formal documentation page. You can inspect it using the man command. You just enter man program, and see what it prints out. Pick any program on your computer, and try it out. For example, let’s try man transmission-gtk. You get a file opened, split into categories. It gives you information what the program is, what it does, how you can use it etc., but it doesn’t offer examples, as it’s not a tutorial.
|
||||
|
||||
And we’re stoping to a halt there.
|
||||
|
||||
I’d like to take a minute and thank everyone commenting and contributing to this section. You make this series vastly better, and I hope that with your help, us noobs will be able to use the CLI basics by the end of summer (just in time for 13.2 :) ). You guys are the best. Newbie users like me, who are feeling lost, stick with it. It will pay off in the end!
|
||||
|
||||
And I’d also like to add a formal heads up: part six will not come next Tuesday, as I’ll sadly be away, so we’ll see/hear each other in 14 days, on July 29th. And until then…
|
||||
|
||||
### …have a lot of fun! ###
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.opensuse.org/2014/07/15/command-line-tuesdays-part-five/
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:
|
||||
[2]:
|
||||
[3]:
|
||||
[4]:
|
||||
[5]:
|
||||
[6]:
|
||||
[7]:
|
||||
[8]:
|
||||
[9]:
|
||||
[10]:
|
||||
[11]:
|
||||
[12]:
|
||||
[13]:
|
||||
[14]:
|
||||
[15]:
|
||||
[16]:
|
||||
[17]:
|
||||
[18]:
|
||||
[19]:
|
||||
[20]:
|
@ -0,0 +1,197 @@
|
||||
7 ‘dmesg’ Commands for Troubleshooting and Collecting Information of Linux Systems
|
||||
================================================================================
|
||||
The ‘dmesg‘ command displays the messages from the kernel ring buffer. A system passes multiple runlevel from where we can get lot of information like system architecture, cpu, attached device, RAM etc. When computer boots up, a kernel (core of an operating system) is loaded into memory. During that period number of messages are being displayed where we can see hardware devices detected by kernel.
|
||||
|
||||
![dmesg Command Examples](http://www.tecmint.com/wp-content/uploads/2014/07/dmesg-Command-Examples.png)
|
||||
dmesg Command Examples
|
||||
|
||||
The messages are very important in terms of diagnosing purpose in case of device failure. When we connect or disconnect hardware device on the system, with the help of dmesg command we come to know detected or disconnected information on the fly. The dmesg command is available on most **Linux and Unix** based Operating System.
|
||||
|
||||
Let’s throw some light on most famous tool called ‘dmesg’ command with their practical examples as discussed below. The exact syntax of dmesg as follows.
|
||||
|
||||
# dmseg [options...]
|
||||
|
||||
### 1. List all loaded Drivers in Kernel ###
|
||||
|
||||
We can use text-manipulation tools i.e. ‘**more**‘, ‘**tail**‘, ‘**less**‘ or ‘**grep**‘ with dmesg command. As output of dmesg log won’t fit on a single page, using dmesg with pipe more or less command will display logs in a single page.
|
||||
|
||||
[root@tecmint.com ~]# dmesg | more
|
||||
[root@tecmint.com ~]# dmesg | less
|
||||
|
||||
#### Sample Output ####
|
||||
|
||||
[ 0.000000] Initializing cgroup subsys cpuset
|
||||
[ 0.000000] Initializing cgroup subsys cpu
|
||||
[ 0.000000] Initializing cgroup subsys cpuacct
|
||||
[ 0.000000] Linux version 3.11.0-13-generic (buildd@aatxe) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 17:26:33 UTC 2013
|
||||
(Ubuntu 3.11.0-13.20-generic 3.11.6)
|
||||
[ 0.000000] KERNEL supported cpus:
|
||||
[ 0.000000] Intel GenuineIntel
|
||||
[ 0.000000] AMD AuthenticAMD
|
||||
[ 0.000000] NSC Geode by NSC
|
||||
[ 0.000000] Cyrix CyrixInstead
|
||||
[ 0.000000] Centaur CentaurHauls
|
||||
[ 0.000000] Transmeta GenuineTMx86
|
||||
[ 0.000000] Transmeta TransmetaCPU
|
||||
[ 0.000000] UMC UMC UMC UMC
|
||||
[ 0.000000] e820: BIOS-provided physical RAM map:
|
||||
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
|
||||
[ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
|
||||
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bff] usable
|
||||
[ 0.000000] BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbff] ACPI NVS
|
||||
[ 0.000000] BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebff] ACPI data
|
||||
[ 0.000000] BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffff] reserved
|
||||
[ 0.000000] BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved
|
||||
[ 0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fed003ff] reserved
|
||||
[ 0.000000] BIOS-e820: [mem 0x00000000fed20000-0x00000000fed9ffff] reserved
|
||||
[ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000feefffff] reserved
|
||||
[ 0.000000] BIOS-e820: [mem 0x00000000ffb00000-0x00000000ffffffff] reserved
|
||||
[ 0.000000] NX (Execute Disable) protection: active
|
||||
.....
|
||||
|
||||
### 2. List all Detected Devices ###
|
||||
|
||||
To discover which hard disks has been detected by kernel, you can search for the keyword “**sda**” along with “**grep**” like shown below.
|
||||
|
||||
[root@tecmint.com ~]# dmesg | grep sda
|
||||
|
||||
[ 1.280971] sd 2:0:0:0: [sda] 488281250 512-byte logical blocks: (250 GB/232 GiB)
|
||||
[ 1.281014] sd 2:0:0:0: [sda] Write Protect is off
|
||||
[ 1.281016] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
|
||||
[ 1.281039] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
|
||||
[ 1.359585] sda: sda1 sda2 < sda5 sda6 sda7 sda8 >
|
||||
[ 1.360052] sd 2:0:0:0: [sda] Attached SCSI disk
|
||||
[ 2.347887] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
|
||||
[ 22.928440] Adding 3905532k swap on /dev/sda6. Priority:-1 extents:1 across:3905532k FS
|
||||
[ 23.950543] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro
|
||||
[ 24.134016] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null)
|
||||
[ 24.330762] EXT4-fs (sda7): mounted filesystem with ordered data mode. Opts: (null)
|
||||
[ 24.561015] EXT4-fs (sda8): mounted filesystem with ordered data mode. Opts: (null)
|
||||
|
||||
**NOTE**: The ‘sda’ first SATA hard drive, ‘sdb’ is the second SATA hard drive and so on. Search with ‘hda’ or ‘hdb’ in the case of IDE hard drive.
|
||||
|
||||
### 3. Print Only First 20 Lines of Output ###
|
||||
|
||||
The ‘head’ along with dmesg will show starting lines i.e. ‘dmesg | head -20′ will print only 20 lines from the starting point.
|
||||
|
||||
[root@tecmint.com ~]# dmesg | head -20
|
||||
|
||||
[ 0.000000] Initializing cgroup subsys cpuset
|
||||
[ 0.000000] Initializing cgroup subsys cpu
|
||||
[ 0.000000] Initializing cgroup subsys cpuacct
|
||||
[ 0.000000] Linux version 3.11.0-13-generic (buildd@aatxe) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 17:26:33 UTC 2013 (Ubuntu 3.11.0-13.20-generic 3.11.6)
|
||||
[ 0.000000] KERNEL supported cpus:
|
||||
[ 0.000000] Intel GenuineIntel
|
||||
[ 0.000000] AMD AuthenticAMD
|
||||
[ 0.000000] NSC Geode by NSC
|
||||
[ 0.000000] Cyrix CyrixInstead
|
||||
[ 0.000000] Centaur CentaurHauls
|
||||
[ 0.000000] Transmeta GenuineTMx86
|
||||
[ 0.000000] Transmeta TransmetaCPU
|
||||
[ 0.000000] UMC UMC UMC UMC
|
||||
[ 0.000000] e820: BIOS-provided physical RAM map:
|
||||
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
|
||||
[ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
|
||||
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bff] usable
|
||||
[ 0.000000] BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbff] ACPI NVS
|
||||
[ 0.000000] BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebff] ACPI data
|
||||
[ 0.000000] BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffff] reserved
|
||||
|
||||
### 4. Print Only Last 20 Lines of Output ###
|
||||
|
||||
The ‘tail’ along with dmesg command will print only 20 last lines, this is useful in case we insert removable device.
|
||||
|
||||
[root@tecmint.com ~]# dmesg | tail -20
|
||||
|
||||
parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE]
|
||||
ppdev: user-space parallel port driver
|
||||
EXT4-fs (sda1): mounted filesystem with ordered data mode
|
||||
Adding 2097144k swap on /dev/sda2. Priority:-1 extents:1 across:2097144k
|
||||
readahead-disable-service: delaying service auditd
|
||||
ip_tables: (C) 2000-2006 Netfilter Core Team
|
||||
nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
|
||||
NET: Registered protocol family 10
|
||||
lo: Disabled Privacy Extensions
|
||||
e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
|
||||
Slow work thread pool: Starting up
|
||||
Slow work thread pool: Ready
|
||||
FS-Cache: Loaded
|
||||
CacheFiles: Loaded
|
||||
CacheFiles: Security denies permission to nominate security context: error -95
|
||||
eth0: no IPv6 routers present
|
||||
type=1305 audit(1398268784.593:18630): audit_enabled=0 old=1 auid=4294967295 ses=4294967295 res=1
|
||||
readahead-collector: starting delayed service auditd
|
||||
readahead-collector: sorting
|
||||
readahead-collector: finished
|
||||
|
||||
### 5. Search Detected Device or Particular String ###
|
||||
|
||||
It’s difficult to search particular string due to length of dmesg output. So, filter the lines with are having string like ‘**usb**‘ ‘**dma**‘ ‘**tty**‘ and ‘**memory**‘ etc. The ‘**-i**’ option instruct to [grep command][1] to ignore the case (upper or lower case letters).
|
||||
|
||||
[root@tecmint.com log]# dmesg | grep -i usb
|
||||
[root@tecmint.com log]# dmesg | grep -i dma
|
||||
[root@tecmint.com log]# dmesg | grep -i tty
|
||||
[root@tecmint.com log]# dmesg | grep -i memory
|
||||
|
||||
#### Sample Output ####
|
||||
|
||||
[ 0.000000] Scanning 1 areas for low memory corruption
|
||||
[ 0.000000] initial memory mapped: [mem 0x00000000-0x01ffffff]
|
||||
[ 0.000000] Base memory trampoline at [c009b000] 9b000 size 16384
|
||||
[ 0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff]
|
||||
[ 0.000000] init_memory_mapping: [mem 0x37800000-0x379fffff]
|
||||
[ 0.000000] init_memory_mapping: [mem 0x34000000-0x377fffff]
|
||||
[ 0.000000] init_memory_mapping: [mem 0x00100000-0x33ffffff]
|
||||
[ 0.000000] init_memory_mapping: [mem 0x37a00000-0x37bfdfff]
|
||||
[ 0.000000] Early memory node ranges
|
||||
[ 0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x000effff]
|
||||
[ 0.000000] PM: Registered nosave memory: [mem 0x000f0000-0x000fffff]
|
||||
[ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
|
||||
[ 0.000000] Memory: 2003288K/2059928K available (6352K kernel code, 607K rwdata, 2640K rodata, 880K init, 908K bss, 56640K reserved, 1146920K highmem)
|
||||
[ 0.000000] virtual kernel memory layout:
|
||||
[ 0.004291] Initializing cgroup subsys memory
|
||||
[ 0.004609] Freeing SMP alternatives memory: 28K (c1a3e000 - c1a45000)
|
||||
[ 0.899622] Freeing initrd memory: 23616K (f51d0000 - f68e0000)
|
||||
[ 0.899813] Scanning for low memory corruption every 60 seconds
|
||||
[ 0.946323] agpgart-intel 0000:00:00.0: detected 32768K stolen memory
|
||||
[ 1.360318] Freeing unused kernel memory: 880K (c1962000 - c1a3e000)
|
||||
[ 1.429066] [drm] Memory usable by graphics device = 2048M
|
||||
|
||||
### 6. Clear dmesg Buffer Logs ###
|
||||
|
||||
Yes, we can clear dmesg logs if required with below command. It will clear dmesg ring buffer message logs till you executed the command below. Still you can view logs stored in ‘**/var/log/dmesg**‘ files. If you connect any device will generate dmesg output.
|
||||
|
||||
[root@tecmint.com log]# dmesg -c
|
||||
|
||||
### 7. Monitoring dmesg in Real Time ###
|
||||
|
||||
Some distro allows command ‘tail -f /var/log/dmesg’ as well for real time dmesg monitoring.
|
||||
|
||||
[root@tecmint.com log]# watch "dmesg | tail -20"
|
||||
|
||||
**Conclusion**: The dmesg command is useful as dmesg records all the system changes done or occur in real time. As always you can man dmesg to get more information.
|
||||
|
||||
----------
|
||||
|
||||
![](http://1.gravatar.com/avatar/36c7c25164c3455f2f711b01e395de0d?s=80&d=blank&r=G)
|
||||
|
||||
Narad Shrestha
|
||||
|
||||
- [Twitter profile][t]
|
||||
- [Facebook profile][f]
|
||||
- [Google+ profile][g]
|
||||
|
||||
He has over 10 years of rich IT experience which includes various Linux Distros, FOSS and Networking. Narad always believes sharing IT knowledge with others and adopts new technology with ease.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.tecmint.com/dmesg-commands/
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.tecmint.com/12-practical-examples-of-linux-grep-command/
|
||||
[t]:http://twitter.com/@nrdshrestha
|
||||
[f]:http://facebook.com/narad.shrestha.9
|
||||
[g]:http://plus.google.com/104542109955805873615?rel=author
|
@ -0,0 +1,117 @@
|
||||
How to analyze Squid logs with SARG log analyzer on CentOS
|
||||
================================================================================
|
||||
In a [previous tutorial][1], we show how to configure a transparent proxy with Squid on CentOS. Squid provides many useful features, but analyzing a raw Squid log file is not straightfoward. For example, how could you analyze the time stamps and the number of hits in the following Squid log?
|
||||
|
||||
1404788984.429 1162 172.17.1.23 TCP_MISS/302 436 GET http://facebook.com/ - DIRECT/173.252.110.27 text/html
|
||||
1404788985.046 12416 172.17.1.23 TCP_MISS/200 4169 CONNECT stats.pusher.com:443 - DIRECT/173.255.223.127 -
|
||||
1404788986.124 174 172.17.1.23 TCP_MISS/200 955 POST http://ocsp.digicert.com/ - DIRECT/117.18.237.29 application/ocsp-response
|
||||
1404788989.738 342 172.17.1.23 TCP_MISS/200 3890 CONNECT www.google.com:443 - DIRECT/74.125.200.106 -
|
||||
1404788989.757 226 172.17.1.23 TCP_MISS/200 942 POST http://clients1.google.com/ocsp - DIRECT/74.125.200.113 application/ocsp-response
|
||||
1404788990.839 3939 172.17.1.23 TCP_MISS/200 78944 CONNECT fbstatic-a.akamaihd.net:443 - DIRECT/184.26.162.35 -
|
||||
1404788990.846 2148 172.17.1.23 TCP_MISS/200 118947 CONNECT fbstatic-a.akamaihd.net:443 - DIRECT/184.26.162.35 -
|
||||
1404788990.849 2151 172.17.1.23 TCP_MISS/200 76809 CONNECT fbstatic-a.akamaihd.net:443 - DIRECT/184.26.162.35 -
|
||||
1404788991.140 611 172.17.1.23 TCP_MISS/200 110073 CONNECT fbstatic-a.akamaihd.net:443 - DIRECT/184.26.162.35 –
|
||||
|
||||
SARG (or Squid Analysis Report Generator) is a web based tool that creates reports from Squid logs. SARG provides an easy-to-understand view of network traffic handled by Squid, and it is very easy to set up and maintain. In the following tutorial, we show **how to set up SARG on a CentOS platform**.
|
||||
|
||||
We start the process by installing necessary dependencies using yum.
|
||||
|
||||
# yum install gcc make wget httpd crond
|
||||
|
||||
Necessary services are started and loaded at startup.
|
||||
|
||||
# service httpd start; service crond start
|
||||
# chkconfig httpd on; chkconfig crond on
|
||||
|
||||
Now we download and extract SARG.
|
||||
|
||||
# wget http://downloads.sourceforge.net/project/sarg/sarg/sarg-2.3.8/sarg-2.3.8.tar.gz?
|
||||
# tar zxvf sarg-2.3.8.tar.gz
|
||||
# cd sarg-2.3.8
|
||||
|
||||
**NOTE**: For 64-bit Linux, the source code in log.c needs to be patched as follows.
|
||||
|
||||
1506c1506
|
||||
< if (fprintf(ufile->file, "%s\t%s\t%s\t%s\t%"PRIi64"\t%s\t%ld\t%s\n",dia,hora,ip,url,nbytes,code,elap_time,smartfilter)<=0) {
|
||||
---
|
||||
> if (fprintf(ufile->file, "%s\t%s\t%s\t%s\t%"PRIi64"\t%s\t%ld\t%s\n",dia,hora,ip,url,(int64_t)nbytes,code,elap_time,smartfilter)<=0) {
|
||||
1513c1513
|
||||
< fprintf(fp_log, "%s\t%s\t%s\t%s\t%s\t%"PRIi64"\t%s\t%ld\t%s\n",dia,hora,user,ip,url,nbytes,code,elap_time,smartfilter);
|
||||
---
|
||||
> fprintf(fp_log, "%s\t%s\t%s\t%s\t%s\t%"PRIi64"\t%s\t%ld\t%s\n",dia,hora,user,ip,url,(int64_t)nbytes,code,elap_time,smartfilter);
|
||||
1564c1564
|
||||
< printf("LEN=\t%"PRIi64"\n",nbytes);
|
||||
---
|
||||
> printf("LEN=\t%"PRIi64"\n",(int64_t)nbytes);
|
||||
|
||||
Go ahead and build/install SARG as follows.
|
||||
|
||||
# ./configure
|
||||
# make
|
||||
# make install
|
||||
|
||||
After SARG is installed, the configuration file can be modified to match your requirements. The following is one example of SARG configuration.
|
||||
|
||||
# vim /usr/local/etc/sarg.conf
|
||||
|
||||
----------
|
||||
|
||||
access_log /var/log/squid/access.log
|
||||
temporary_dir /tmp
|
||||
output_dir /var/www/html/squid-reports
|
||||
date_format e ## We use Europian DD-MM-YYYY format here ##
|
||||
## we don’t want multiple reports for single day/week/month ##
|
||||
overwrite_report yes
|
||||
|
||||
Now it's time for a test run. We run sarg command in debug mode to find whether there is any error.
|
||||
|
||||
# sarg -x
|
||||
|
||||
If all goes well, sarg should analyze Squid logs, and create reports in /var/www/html/squid-reports. The reports should be visible in a web browser using the address http://<server-IP>/squid-reports/
|
||||
|
||||
![](https://farm3.staticflickr.com/2931/14631403935_4ff34e07b9_z.jpg)
|
||||
|
||||
![](https://farm4.staticflickr.com/3901/14629281644_fec31014c5_z.jpg)
|
||||
|
||||
SARG can be used to create daily, weekly and monthly reports. Time range can be specified using the "-d" parameter with possible values in the form of day-n, week-n or month-n, where n is the number of days/weeks/months to jump backward. For example, with week-1, SARG will generate a report for the previous week. With day-2, SARG will prepare reports for the previous two days.
|
||||
|
||||
As a demonstration, we will prepare a cron job to run SARG daily.
|
||||
|
||||
# vim /etc/cron.daily/sarg
|
||||
|
||||
----------
|
||||
|
||||
#!/bin/sh
|
||||
/usr/local/bin/sarg -d day-1
|
||||
|
||||
The file needs a execution permission.
|
||||
|
||||
# chmod 755 /usr/local/bin/sarg
|
||||
|
||||
Now SARG should prepare daily reports about Squid-managed traffic. These reports can easily be accessed from the SARG web interface.
|
||||
|
||||
To sum up, SARG is a web based tool that analyzes Squid logs and presents the analysis in an informative way. System admins can leverage SARG to monitor what sites are being accessed, and to keep track of top visited sites and top users. This tutorial covers a working configuration for SARG. You can customize the configuration even further to match your requirements.
|
||||
|
||||
Hope this helps.
|
||||
|
||||
----------
|
||||
|
||||
[Sarmed Rahman][w]
|
||||
|
||||
- [Twitter profile][t]
|
||||
- [LinkedIn profile][l]
|
||||
|
||||
Sarmed Rahman is an IT professional in the Internet Industry in Bangladesh. He writes tutorial articles on technology every now and then from a belief that knowledge grows through sharing. During his free time, he loves gaming and spending time with his friends.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://xmodulo.com/2014/07/analyze-squid-logs-sarg-log-analyzer-centos.html
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://xmodulo.com/2014/06/squid-transparent-web-proxy-centos-rhel.html
|
||||
[w]:http://amar-linux.blogspot.com/
|
||||
[t]:http://twitter.com/SarmedRahman
|
||||
[l]:http://www.linkedin.com/in/sarmedrahman
|
@ -0,0 +1,43 @@
|
||||
nd0104 is translate
|
||||
Linux FAQs with Answers--How to define PATH environment variable for sudo commands
|
||||
================================================================================
|
||||
> **Question**: I built and installed a program in /usr/local/bin. The program requires root privilege to run. But when I try to run the program with sudo, I get "sudo: XXXXX: command not found" error. Somehow /usr/local/bin is not included in the PATH environment variable. How can I fix this problem?
|
||||
|
||||
When you run a program with sudo, the program is executed with a new, minimum environment for security reasons. That is, not all the environment variables you define are inherited to sudo commands. In case of PATH environment variable, it is reset to a new "default" PATH variable when sudo is used. So if the new default PATH variable does not include the folder where your program is, you will get "command not found" error with sudo.
|
||||
|
||||
To customize the default PATH variable for sudo session, open /etc/sudoers file with a text editor, and look for "secure_path". The value defined in "secure_path" will be used as the default PATH variable when you execute sudo commands.
|
||||
|
||||
So add any necessary path (e.g., /usr/local/bin) to "secure_path", and it will be passed to sudo commands.
|
||||
|
||||
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
|
||||
|
||||
This change will be effective immediately.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://ask.xmodulo.com/define-path-environment-variable-sudo-commands.html
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:
|
||||
[2]:
|
||||
[3]:
|
||||
[4]:
|
||||
[5]:
|
||||
[6]:
|
||||
[7]:
|
||||
[8]:
|
||||
[9]:
|
||||
[10]:
|
||||
[11]:
|
||||
[12]:
|
||||
[13]:
|
||||
[14]:
|
||||
[15]:
|
||||
[16]:
|
||||
[17]:
|
||||
[18]:
|
||||
[19]:
|
||||
[20]:
|
@ -0,0 +1,40 @@
|
||||
‘Simple Dock’ GNOME Shell Extension Puts Your Fave Apps On The Desktop
|
||||
================================================================================
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/screenshot_815_1.jpg)
|
||||
|
||||
**I love GNOME Shell, but what I don’t love is having to rustle through a hidden screen to get at my favourite applications or switch between those I have running. **
|
||||
|
||||
It may make me sound awesomely retro, like a UX luddite, or like someone who has become far too accustomed to the usability of Unity but I, like many of you reading this, like having an app launcher/switcher accessible on the desktop. It’s a familiar, fast way of working.
|
||||
|
||||
GNOME Shell is, by design, different. It tucks everything out of the way – from the messaging centre and notifications, to workspaces and the apps list. It’s a minimal aesthetic that makes sense: help users focus on what matters.
|
||||
|
||||
But for me, my desktop needs to be more than a glorified picture frame.
|
||||
|
||||
### The Beauty of GNOME Shell ###
|
||||
|
||||
Despite my own preferences, the decision to hide apps is part of the beauty of GNOME Shell. It ships with a default desktop experience that is user friendly, sane and predictable — but also thoroughly extensible. Because of this there’s a huge array of add-ons catering to every need, niche and want, including traditional app menus, desktop docks and even an Ubuntu Unity Dash clone!
|
||||
|
||||
In this article I’m just focusing on one add-on that caters to my needs: the aptly named **Simple Dock**. Simple Dock takes the GNOME Shell apps grid and favourites bar and puts it slap bang where I want it: on the desktop.
|
||||
|
||||
For now it only supports being positioned on the bottom of the screen, and only offers a minimal set of settings. While minimal, I feel these cover all of my needs:
|
||||
|
||||
- ntelligent auto hide
|
||||
- Minimise/restore application windows
|
||||
- Drag-and-drop favourites
|
||||
- Button to launch activities overlay
|
||||
|
||||
Want it? Providing you’re running GNOME Shell on Ubuntu 13.10 or above you can. Just head on over to the GNOME Extensions page linked to below in a supported browser (Firefox, GNOME Web, etc.) then slide the on-page switch from ‘off‘ to ‘on‘.
|
||||
|
||||
- [Simple Dock on GNOME Shell Extensions][1]
|
||||
|
||||
To adjust the settings of Simple Dock hit the cog icon on the GNOME Extensions webpage listing for it or through a desktop application like GNOME Tweak Tool.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.omgubuntu.co.uk/2014/07/simple-dock-gnome-shell-extension
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:https://extensions.gnome.org/extension/815/simple-dock/
|
@ -0,0 +1,55 @@
|
||||
Display Song Lyrics On Desktop In Ubuntu 14.04
|
||||
================================================================================
|
||||
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/display_lyrics_desktop_Ubuntu.jpeg)
|
||||
|
||||
Apart from free streaming music, what I like the most in [Spotify][1] is its lyrics plugin. At times I don’t understand all of the words of the song, specially if it’s rap. [TuneWiki][2] plugin comes handy in this case. While TuneWiki has plugins for Windows Media Player and iTune, what options do we have on desktop Linux?
|
||||
|
||||
If you have been using desktop Linux for sometime, you might have heard of [OSD Lyrics][3]. It is a small application that **displays song lyrics on the desktop**. You can use it with several audio players such as Rythmbox, [Banshee][4], [Clementine][5] etc.
|
||||
|
||||
### Install OSD Lyrics in Ubuntu 14.04 and Linux Mint 17 ###
|
||||
|
||||
OSD Lyrics was actively maintained through its official PPA about 2 years back. There is no development anymore. While the PPA is no longer usable, the executables (.deb) can be downloaded from the website. Though these executables are originally for Ubuntu 12.04 Precise Pangolin, these files work very well in Ubuntu 14.04 also. Let’s see **how to install OSD Lyrics in Ubuntu 14.04 and Linux Mint 17**.
|
||||
|
||||
Go to the [download page of OSD Lyrics][6]. Get the .deb files depending upon [whether you are using 32 bit or 64 bit Ubuntu][7]. You will find the files on the top.
|
||||
|
||||
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/OSD_Lyrics_Download.jpeg)
|
||||
|
||||
Once downloaded, just double click on it to install it via Ubuntu Software Center. Alternatively, you can [use Gdebi to quickly install .deb packages][8].
|
||||
|
||||
### How to display lyrics in Ubuntu and Linux Mint using OSD Lyrics ###
|
||||
|
||||
Once installed, you can run OSD Lyrics from the Unity Dash:
|
||||
|
||||
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/Open_OSD_Lyrics_Ubuntu.jpeg)
|
||||
|
||||
On the first run, it will detect the existing players which are compatible with OSD Lyrics. You can set a default player which will be opened automatically each time you start OSD Lyrics.
|
||||
|
||||
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/OSD_Lyrics_Default_Player.jpeg)
|
||||
|
||||
One thing to note is that unlike [Shazam][9] etc, OSD Lyrics doesn’t find the lyrics from the audio, rather it uses the information linked to the music files such as name, album, artist etc. So make sure that you have music files from “respectable sources” or keep the file information correct and updated.
|
||||
|
||||
If it recognizes the music files, it will display the lyrics on the desktop in Karaoke format:
|
||||
|
||||
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2014/07/Dsiplay_Lyrics_Ubuntu.jpeg)
|
||||
|
||||
There are plenty of configuration options available with OSD Lyrics. You can change the font, size behavior of the lyrics display among many other things.
|
||||
|
||||
How do you like OSD Lyrics? Do you use some other Lyrics plugin? Do share your views with rest of us.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://itsfoss.com/display-song-lyrics-desktop-ubuntu-1404/
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://itsfoss.com/install-spotify-ubuntu-1404/
|
||||
[2]:http://www.tunewiki.com/
|
||||
[3]:https://code.google.com/p/osd-lyrics
|
||||
[4]:http://banshee.fm/
|
||||
[5]:https://www.clementine-player.org/
|
||||
[6]:https://code.google.com/p/osd-lyrics/downloads/list
|
||||
[7]:http://itsfoss.com/how-to-know-ubuntu-unity-version/
|
||||
[8]:http://itsfoss.com/install-deb-files-easily-and-quickly-in-ubuntu-12-10-quick-tip/
|
||||
[9]:http://www.shazam.com/
|
@ -0,0 +1,76 @@
|
||||
Linux Kernel Testing and Debugging
|
||||
================================================================================
|
||||
### Linux Kernel Testing Philosophy ###
|
||||
|
||||
Testing is an integral and important part of any software development cycle, open or closed, and Linux kernel is no exception to that. Developer testing, integration testing, regression, and stress testing have different individual goals, however from 1000 feet up, the end goal is the same, to ensure the software continues to work as it did before adding a new body of code, and the new features work as designed.
|
||||
|
||||
Ensuring software is stable without regressions before the release, helps avoid debugging and fixing customer and user found bugs after the release. It costs more in time and effort to debug and fix a customer found problem. Hence, testing is very important in the case of any software, not just the Linux kernel. Unlike closed and proprietary operating systems, the development process is open and is not locked down. This process is its strength as well as weakness. With several developers continuing to add new features, and fixing bugs, continuous integration and testing is vital to ensure the kernel continues to work on existing hardware as new hardware support and features get added. In the open source development, developers and users share the testing responsibility. This is another important difference between a closed development model and an open one.
|
||||
|
||||
Almost all Linux kernel developers, if not all, are very active Linux users themselves. There is no requirement that testers should be developers, however, users and developers that are not familiar with the new code could be more effective at testing a new piece of code than the original author of that code. In other words, developer testing serves as an important step in verifying the functionality, however, developer testing alone is not sufficient to find interactions with other code, features, and unintended regressions on configurations and/or hardware, developer didn't anticipate and didn't have the opportunity and resources to test. Hence, users play a very important role in the Linux Kernel development process.
|
||||
|
||||
So now that we understand the importance of continuous integration testing, we will go into the details of testing itself. Before we talk about testing, I would like to walk through the development process itself to help understand how it works and how the changes funnel into the mainline kernel.
|
||||
|
||||
3000+ kernel developers from around the world contribute to the Linux kernel. It is a 24hours, seven days a week, and 365 days of continuous development process that results in a new release once every 2+ months and several stable and extended stable releases. New development and current release integration cycles run in parallel.
|
||||
|
||||
For further reading on the development process, please refer to [Greg Kroah-Hartman's presentation on the Linux Kernel Development][1].
|
||||
|
||||
It is my intent that this guide should be useful to a beginner as well as an experienced contributor and/or individuals interested in getting involved in the Linux kernel development. Experienced developers can chose to skip sections that go over basic testing and debugging.
|
||||
|
||||
This paper will discuss how to test and debug Linux kernel, tools, scripts and debug mechanisms that aid in regression and integration testing. In addition, this paper will go into details on how to use git bisect to isolate a patch that introduced a bug, and what to test before sending patches to the Linux Kernel Mailing List. I will use Linux PM as an example target area for the testing and debugging discussion. Even though this paper is Linux Kernel testing focused, the importance of testing is applicable to any software project.
|
||||
|
||||
### Configuring Development and Test System ###
|
||||
|
||||
Let's get started. First order of business is finding a development system that suits your needs. x86-64 systems are a good choice for a basic development system, unless there is a need for a specific architecture and/or configuration.
|
||||
|
||||
The second step is to install distribution of your preference. I prefer Ubuntu, hence this document will have the details on how to configure a kernel development system running Ubuntu distribution. Please follow [How to Ubuntu][2] for installing the Ubuntu release of your choice.
|
||||
|
||||
On development and test systems, it is a good idea to ensure there is ample space for kernels in the boot partition. Choosing whole disk install or setting aside 3 GB disk space for the boot partition is recommended.
|
||||
|
||||
Once the distribution is installed and the system is ready for development packages, enable root account and also enable sudo for your user account. The system might already have the build-essential package which is what you need to build Linux kernels on an x86_64 system. If build-essential is not already installed, run the following command to install it:
|
||||
|
||||
sudo apt-get install build-essential
|
||||
|
||||
At this point, you may install the following packages as well, so the system is ready for cross-compiling Linux kernels. Note that ncurses-dev is a required package to run make menuconfig.
|
||||
|
||||
sudo apt-get install binutils-multiarch
|
||||
|
||||
sudo apt-get install ncurses-dev
|
||||
|
||||
sudo apt-get install alien
|
||||
|
||||
Now let's install a few tools every Linux kernel developer need in his/her tool chest.
|
||||
|
||||
sudo apt-get install git
|
||||
|
||||
sudo apt-get install cscope
|
||||
|
||||
sudo apt-get install meld
|
||||
|
||||
sudo apt-get install gitk
|
||||
|
||||
If you would like to get the system configured for cross-compiling other supported architectures non-natively on your x86-64 system, please follow: [Cross-compiling Linux kernel on x86 64][3].
|
||||
|
||||
The Stable Kernel
|
||||
|
||||
Start by cloning the stable kernel git, building and installing the latest stable kernel. You can find information on the latest stable and mainline releases at [The Linux Kernel Archive][4].
|
||||
|
||||
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
|
||||
|
||||
The above step will create a new directory named linux-stable and populate it with the sources.
|
||||
|
||||
You can also download just the Linux Kernel source tar-ball instead of cloning the git, and then unpack the tar-ball.
|
||||
|
||||
tar xvf linux-3.x.y.tar.xz
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,0
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://events.linuxfoundation.org/images/stories/pdf/als2012_gregkh.pdf
|
||||
[2]:http://howtoubuntu.org/
|
||||
[3]:http://linuxdriverproject.org/mediawiki/index.php/Cross-compiling_Linux_kernel_on_x86_64
|
||||
[4]:https://www.kernel.org/
|
107
sources/tech/20140718 Linux Kernel Testing and Debugging 2.md
Normal file
107
sources/tech/20140718 Linux Kernel Testing and Debugging 2.md
Normal file
@ -0,0 +1,107 @@
|
||||
Linux Kernel Testing and Debugging
|
||||
================================================================================
|
||||
### Compiling and Installing Stable Kernel ###
|
||||
|
||||
If you cloned the stable git:
|
||||
|
||||
cd linux-stable
|
||||
|
||||
git checkout linux-3.x.y
|
||||
|
||||
or if you are using the tar-ball:
|
||||
|
||||
cd linux-3.x.y
|
||||
|
||||
Starting out with the distribution configuration file is the safest approach for the very first kernel install on any system. You can do so by copying the configuration for your current kernel from /boot.
|
||||
|
||||
cp /boot/config-3.x.y-z-generic .config
|
||||
|
||||
Run the following command to generate kernel configuration file based on the current configuration. You will be prompted to tune the configuration to enable new features and drivers that have been added since the Ubuntu snapshot the kernel from the mainline.
|
||||
|
||||
make oldconfig
|
||||
|
||||
Once this step is complete, it is time to compile the kernel:
|
||||
|
||||
make all
|
||||
|
||||
Once the kernel compilation is complete, install the new kernel:
|
||||
|
||||
sudo "make modules_install install"
|
||||
|
||||
The above command will install the new kernel and run update-grub to add the new kernel to the grub menu. Now it is time to reboot the system to boot the newly installed kernel. Before we do that, let's save logs from the current kernel to compare and look for regressions and new errors, if any:
|
||||
|
||||
dmesg -t > dmesg_current
|
||||
|
||||
dmesg -t -k > dmesg_kernel
|
||||
|
||||
dmesg -t -l emerg > dmesg_current_emerg
|
||||
|
||||
dmesg -t -l alert > dmesg_current_alert
|
||||
|
||||
dmesg -t -l crit > dmesg_current_alert
|
||||
|
||||
dmesg -t -l err > dmesg_current_err
|
||||
|
||||
dmesg -t -l warn > dmesg_current_warn
|
||||
|
||||
In general, dmesg should be clean with no emerg, alert, crit, and err level messages. If you see any of these, it might indicate some hardware and/or kernel problem.
|
||||
|
||||
A couple more important steps before trying out the newly installed kernel. There is no guarantee that the new kernel will boot. As a safe guard, please ensure that there is at least one good kernel installed. Change the default grub configuration file /etc/default/grub:
|
||||
|
||||
Enable printing early boot messages to vga using earlyprink=vga kernel boot option:
|
||||
|
||||
GRUB_CMDLINE_LINUX="earlyprink=vga"
|
||||
|
||||
Increase the GRUB_TIMEOUT value to 10 - 15 seconds, so grub pauses in menu allowing time to choose kernel to be boot:
|
||||
|
||||
Uncomment GRUB_TIMEOUT and set it to 10: GRUB_TIMEOUT=10
|
||||
Comment out GRUB_HIDDEN_TIMEOUT and GRUB_HIDDEN_TIMEOUT_QUIET
|
||||
|
||||
Run update-grub to update the grun configuration in /boot
|
||||
|
||||
sudo update-grub
|
||||
|
||||
Now restart the system. Once the new kernel comes up, compare the saved dmesg from the old kernel with the new one and see if there are any regressions. If the newly installed kernel fails to boot, you will have to boot a good kernel and then investigate why the new kernel failed to boot.
|
||||
|
||||
### Living in The Fast Lane ###
|
||||
|
||||
If you like driving in the fast lane and have the need for speed, clone the mainline kernel git or better yet the linux-next git. Booting and testing mainline and linux-next helps find and fix problems before the kernel is released.
|
||||
|
||||
Mainline:
|
||||
|
||||
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
|
||||
|
||||
linux-next:
|
||||
|
||||
git clone git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
|
||||
|
||||
Compiling and installing mainline and linux-next kernels is exactly same as the stable kernel. Please follow the instructions from previous sections.
|
||||
|
||||
### Applying Patches ###
|
||||
|
||||
Linux kernel patch files are text files that contain the differences from the original source to the new. Each Linux patch is a self-contained change to the code that stands on its own, unless explicitly made part of a patch series. New patches are applied as follows:
|
||||
|
||||
patch -p1 < file.patch
|
||||
|
||||
git apply --index file.patch
|
||||
|
||||
Either one will work, however, when a patch adds a new file and if it is applied using the patch command, git doesn't know about the new files and they will be treated as untracked files. "git diff" will not show the files in its output and "git status" will show the files as untracked.
|
||||
|
||||
For the most part, there are no issues with building and installing kernels, however, "git reset --hard" will not remove the newly added files and a subsequent git pull will fail. A couple of ways to tell git about the new files and have it track them, there by avoiding the above issues:
|
||||
|
||||
|
||||
Option 1:
|
||||
|
||||
> When a patch that adds new files is applied using the patch command, run "git clean" to remove untracked files, before running "git reset --hard". For example, git clean -dfx will force remove untracked directories and files, ignoring any standard ignore rules specified in the .gitignore file. You could include -q option to run git clean in quiet mode, if you don't care to know which files are removed.
|
||||
|
||||
Option 2:
|
||||
|
||||
> An alternate approach is to tell git to track the newly added files by running "git apply --index file.patch". This will result in git applying the patch and adding the result to the index. Once this is done, git diff will show the newly added files in its output and git status will report the status correctly tagging these files as newly created files.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,1
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
125
sources/tech/20140718 Linux Kernel Testing and Debugging 3.md
Normal file
125
sources/tech/20140718 Linux Kernel Testing and Debugging 3.md
Normal file
@ -0,0 +1,125 @@
|
||||
Linux Kernel Testing and Debugging
|
||||
================================================================================
|
||||
### Basic Testing ###
|
||||
|
||||
Once a new kernel is installed, the next step is try to boot it and see what happens. Once the new kernel is up and running, check dmesg for any regressions. Run a few usage tests:
|
||||
|
||||
- Is networking (wifi or wired) functional?
|
||||
- Does ssh work?
|
||||
- Run rsync of a large file over ssh
|
||||
- Run git clone and git pull
|
||||
- Start web browser
|
||||
- Read email
|
||||
- Download files: ftp, wget etc.
|
||||
- Play audio/video files
|
||||
- Connect new USB devices mouse, usb stick etc.
|
||||
|
||||
|
||||
### Examine Kernel Logs ###
|
||||
|
||||
Checking for regressions in dmesg is a good way to identify problems, if any, introduced by the new code. As a general rule, there should be no new crit, alert, and emerg level messages in dmesg. There should be no new err level messages. Pay close attention to any new warn level messages as well. lease note that new warn messages aren't as bad. New code at times adds new warning messages which are just warnings.
|
||||
|
||||
- dmesg -t -l emerg
|
||||
- dmesg -t -l crit
|
||||
- dmesg -t -l alert
|
||||
- dmesg -t -l err
|
||||
- dmesg -t -l warn
|
||||
- dmesg -t -k
|
||||
- dmesg -t
|
||||
|
||||
The following script runs the above dmesg commands and saves the output for comparing with older release dmesg files. It then runs diff commands against the older release dmesg files. Old release is a required input parameter. If one is not supplied, it will simply generate dmesg files and exit. Regressions indicate newly introduced bugs and/or bugs that escaped patch testing and integration testing in linux git trees prior to including the patch in a release. Are there any stack traces resulting from WARN_ON in the dmesg? These are serious problems that require further investigation.
|
||||
|
||||
- [**dmesg regression check script**][1]
|
||||
|
||||
### Stress Testing ###
|
||||
|
||||
Running 3 to 4 kernel compiles in parallel is a good overall stress test. Download a few Linux kernel gits, stable, linux-next etc.. Run timed compiles in parallel. Compare times with old runs of this test for regressions in performance. Longer compile times could be indicators of performance regression in one of the kernel modules. Performance problems are hard to debug. First step is to detect them. Running several compiles in parallel is a good overall stress test that could be used as a performance regression test and overall kernel regression test, as it exercises various kernel modules like memory, file-systems, dma, and drivers.
|
||||
|
||||
time make all
|
||||
|
||||
### Kernel Testing Tools ###
|
||||
|
||||
There are several tests under tools/testing that are included in the Linux kernel git. There is a good mix of automated and functional tests.
|
||||
ktest suite
|
||||
|
||||
ktest is an automated test suite that can test builds, installs, and kernel boots. It can also run cross-compile tests provided the system has cross-compilers installed. ktest depends on flex and bison tools. Please consult the ktest documentation in tools/testing/ktest for details on how to run ktest. It is left to the reader as a self-study. A few resources that go into detail on how to run ktest:
|
||||
|
||||
- [**ktest-eLinux.org**][2]
|
||||
|
||||
### tools/testing/selftests ###
|
||||
|
||||
Let's start with selftests. Kernel sources include a set of self-tests which test various sub-systems. As of this writing, breakpoints, cpu-hotplug, efivarfs, ipc, kcmp, memory-hotplug, mqueue, net, powerpc, ptrace, rcutorture, timers, and vm sub-systems have self-tests. In addition to these, user memory self-tests test user memory to kernel memory copies via test_user_copy module. The following is on how to run these self-tests:
|
||||
|
||||
Compile tests:
|
||||
|
||||
make -C tools/testing/selftests
|
||||
|
||||
Run all tests: (running some tests needs root access, login as root and run)
|
||||
|
||||
make -C tools/testing/selftests run_tests
|
||||
|
||||
Run only tests targeted for a single sub-system:
|
||||
|
||||
make -C tools/testing/selftests TARGETS=vm run_tests
|
||||
|
||||
### tools/testing/fault-injection ###
|
||||
|
||||
Another test suite under tools/testing is fault-injection. failcmd.sh script runs a command to inject slab and page allocation failures. This type of testing helps validate how well kernel can recover from faults. This test should be run as root. The following is a quick summary of currently implemented fault injection capabilities. The list keeps growing as new fault injection capabilities get added. Please refer to the Documentation/fault-injection/fault-injection.txt for the latest.
|
||||
|
||||
failslab (default option)
|
||||
|
||||
injects slab allocation failures. kmalloc(), kmem_cache_alloc(), ...
|
||||
|
||||
fail_page_alloc
|
||||
|
||||
injects page allocation failures. alloc_pages(), get_free_pages(), ...
|
||||
|
||||
fail_make_request
|
||||
|
||||
injects disk IO errors on devices permitted by setting, /sys/block//make-it-fail or /sys/block///make-it-fail. (generic_make_request())
|
||||
|
||||
fail_mmc_request
|
||||
|
||||
injects MMC data errors on devices permitted by setting debugfs entries under /sys/kernel/debug/mmc0/fail_mmc_request
|
||||
|
||||
The capabilities and behavior of fault-injection can be configured. fault-inject-debugfs kernel module provides some debugfs entries for runtime. Ability to specify the error probability rate for faults, the interval between fault injection are just a couple of examples of the configuration choices fault-injection test supports. Please refer to the Documentation/fault-injection/fault-injection.txt for details. Boot options can be used to inject faults during early boot before debugfs becomes available. The following boot options are supported:
|
||||
|
||||
- failslab=
|
||||
- fail_page_alloc=
|
||||
- fail_make_request=
|
||||
- mmc_core.fail_request=[interval],[probability],[space],[times]
|
||||
|
||||
The fault-injection infrastructure provides interfaces to add new fault-injection capabilities. The following is a brief outline of the steps involved in adding a new capability. Please refer to the above mentioned document for details:
|
||||
|
||||
define the fault attributes using DECLARE_FAULT_INJECTION(name);
|
||||
|
||||
> Please see the definition of struct fault_attr in fault-inject.h for details.
|
||||
|
||||
add a boot option to configure fault attributes
|
||||
|
||||
> This can be done using helper function setup_fault_attr(attr, str); Adding a boot option is necessary to enable the fault injection capability during early boot time.
|
||||
|
||||
add debugfs entries
|
||||
|
||||
> Use the helper function fault_create_debugfs_attr(name, parent, attr); to add new debugfs entries for this new capability.
|
||||
|
||||
add module parameters
|
||||
|
||||
> Adding module parameters to configure the fault attributes is a good option, when the scope of the new fault capability is limited to a single kernel module.
|
||||
|
||||
add a hook to insert failures
|
||||
|
||||
> should_fail(attr, size); Upon should_fail() returning true, client code should inject a failure.
|
||||
|
||||
Applications using this fault-injection infrastructure can target a specific kernel module to inject slab and page allocation failures to limit the testing scope if need be.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,2
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://linuxdriverproject.org/mediawiki/index.php/Dmesg_regression_check_script
|
||||
[2]:http://elinux.org/Ktest#Git_Bisect_type
|
143
sources/tech/20140718 Linux Kernel Testing and Debugging 4.md
Normal file
143
sources/tech/20140718 Linux Kernel Testing and Debugging 4.md
Normal file
@ -0,0 +1,143 @@
|
||||
Linux Kernel Testing and Debugging
|
||||
================================================================================
|
||||
### Auto Testing Tools ###
|
||||
|
||||
There are several automated testing tools and test infrastructures that you can chose from based on your specific testing needs. This section is intended to be a brief overview and not a detailed guide on how to use each of these.
|
||||
|
||||
#### [AuToTest][1] ####
|
||||
|
||||
> Autotest is a framework for fully automated testing. It is designed primarily to test the Linux kernel, though it is useful for many other functions such as qualifying new hardware. It is an open source project under the GPL. Autotest works in server-client mode. Autotest server can be configured to initiate, run, and monitor tests on several target systems running the autotest client. Autotest client can be run manually on a target system or via the server. Using this framework, new test cases can be added. Please [Autotest White Paper][2] for more information.
|
||||
|
||||
#### Linaro Automated Validation Architecture ####
|
||||
|
||||
> LAVA-Test Automated Testing Framework is a framework to help with automated installation and executions of tests. For example, running LTP in LAVA framework can be accomplished with a few commands. Running lava-test tool to install LTP will automatically install any dependencies, download the source for the recent release of LTP, compile it, and install the binaries in a self-contained area so that they can be removed easily when user runs uninstall. At this point running lava-test run with ltp test option will execute LTP tests and save results with an unique id that includes the test name, time/date stamp of the test execution. These results are saved for future reference. This is a good feature to find regressions, if any, between test runs. Summary of commands to run as an example:
|
||||
|
||||
Show a list of tests supported by lava-test:
|
||||
|
||||
lava-test list-tests
|
||||
|
||||
Install a new test:
|
||||
|
||||
lava-test install ltp
|
||||
|
||||
Run the test:
|
||||
|
||||
lava-test run ltp
|
||||
|
||||
Check results:
|
||||
|
||||
lava-test results show ltp-timestamp.0
|
||||
|
||||
Remove tests:
|
||||
|
||||
lava-test uninstall ltp
|
||||
|
||||
### Kernel Debug Features ###
|
||||
|
||||
Linux kernel includes several debugging features such as kmemcheck and kmemleak.
|
||||
|
||||
#### kmemcheck ####
|
||||
|
||||
> kmemcheck is a dynamic checking tool that detects and warns about some uses of uninitialized memory. It serves the same function as Valgrind's memcheck which is a userspace memory checker, where as kmemcheck checks kernel memory. CONFIG_KMEMCHECK kernel configuration option enables the kmemcheck debugging feature. Please read the Documentation/kmemcheck.txt for information on how to configure and use this feature, and how to interpret the reported results.
|
||||
|
||||
#### kmemleak ####
|
||||
|
||||
> kmemleak can be used to detect possible kernel memory leaks in a way similar to a tracing garbage collector. The difference between the tracing garbage collector and kmemleak is that the latter doesn't free orphan objects, instead it reports them in /sys/kernel/debug/kmemleak. A similar method of reporting and not freeing is used by the Valgrind's memcheck --leak-check to detect memory leaks in user-space applications. CONFIG_DEBUG_KMEMLEAK kernel configuration option enables the kmemleak debugging feature. Please read the Documentation/kmemleak.txt for information on how to configure and use this feature, and how to interpret the reported results.
|
||||
|
||||
### Kernel Debug Interfaces ###
|
||||
|
||||
Linux kernel has support for static and dynamic debugging via configuration options, debug APIs, interfaces, and frameworks. Let's learn more about each of these starting with the static options.
|
||||
|
||||
### Debug Configuration Options - Static ###
|
||||
|
||||
Linux kernel core and several Linux kernel modules, if not all, include kernel configuration options to debug. Several of these static debug options can be enabled at compile time. Debug messages are logged in dmesg buffer.
|
||||
|
||||
### Debug APIs ###
|
||||
|
||||
An example of Debug APIs is DMA-debug which is desiged for debugging driver dma api usage errors. When enabled, it keeps track of dma mappings per device, detects unmap attempts on addresses that aren't mapped, and missing mapping error checks in driver code after dma map attempts. CONFIG_HAVE_DMA_API_DEBUG and CONFIG_DMA_API_DEBUG kernel configuration options enable this feature on architectures that provide the support. With the CONFIG_DMA_API_DEBUG option enabled, the Debug-dma interfaces are called from DMA API. For example, when a driver calls dma_map_page() to map a dma buffer, dma_map_page() will call debug_dma_map_page() to start tracking the buffer until it gets released via dma_unmap_page() at a later time. For further reading on [Detecting silent data corruptions and memory leaks using DMA Debug API ][3]
|
||||
|
||||
### Dynamic Debug ###
|
||||
|
||||
Dynamic debug feature allows dynamically enabling/disabling pr_debug(), dev_dbg(), print_hex_dump_debug(), print_hex_dump_bytes() per-callsite. What this means is, a specific debug message can be enabled at run-time to learn more about a problem that is observed. This is great because, there is no need to re-compile the kernel with debug options enabled, then install the new kernel, only to find that the problem is no longer reproduciable. Once CONFIG_DYNAMIC_DEBUG is enabled in the kernel, dynamic debug feature enables a fine grain enable/disable of debug messages. /sys/kernel/debug/dynamic_debug/control is used to specify which pr_* messages are enabled. A quick summary of how to enable dynamic debug per call level, per module level is as follows:
|
||||
|
||||
Enable pr_debug() in kernel/power/suspend.c at line 340:
|
||||
|
||||
echo 'file suspend.c line 340 +p' > /sys/kernel/debug/dynamic_debug/control
|
||||
|
||||
Enable dynamic debug feature in a module at module load time
|
||||
|
||||
> Pass in dyndbg="plmft" to modprobe at the time module is being loaded.
|
||||
|
||||
Enable dynamic debug feature in a module to persist across reboots
|
||||
|
||||
> create or change modname.conf file in /etc/modprobe.d/ to add dyndbg="plmft" option. However for drivers that get loaded from initramfs, changing modname.conf is insufficient for the dynamic debug feature to persist across reboot. For such drivers, change grub to pass in module.dyndbg="+plmft" as a module option as a kernel boot parameter.
|
||||
|
||||
dynamic_debug.verbose=1 kernel boot option increases the verbosity of dynamic debug messages. Please consult the Documentation/dynamic-debug-howto.txt for more information on this feature.
|
||||
|
||||
### Tracepoints ###
|
||||
|
||||
So far we talked about various static and dynamic debug features. Both static debug options and debug hooks such as the DMA Debug API are either enabled or disabled at compile time. Both of these options require a new kernel to be compiled and installed. The dynamic debug feature eliminates the need for a recompile, however the debug code is compiled in with a conditional variable that controls whether or not the debug message gets printed. It helps that the messages can be enabled at run-time, however, the conditional code is executed at run-time to determine if the message needs to be printed. Tracepoint code on the otherhand can be triggered to be included at run-time only when the tracepoint is enabled. In other words, tracepoint code is different in that, it is inactive unless it is enabled. When it is enabled, code is modified to include the tracepoint code. It doesn't add any conditional logic overhead to determine whether or not to generate a trace message.
|
||||
|
||||
Please read [Tips on how to implement good tracepoint code][4] for more insight into how tracing works.
|
||||
|
||||
### Tracepoint mechanism ###
|
||||
|
||||
The tracepoints use jump-labels which is a code modification of a branch.
|
||||
|
||||
When it is disabled, the code path looks like:
|
||||
|
||||
[ code ]
|
||||
nop
|
||||
back:
|
||||
[ code ]
|
||||
return;
|
||||
tracepoint:
|
||||
[ tracepoint code ]
|
||||
jmp back;
|
||||
|
||||
When it is enabled, the code path looks like: (notice how the tracepoint code appears in the code path below)
|
||||
|
||||
[ code ]
|
||||
jmp tracepoint
|
||||
back:
|
||||
[ code ]
|
||||
return;
|
||||
tracepoint:
|
||||
[ tracepoint code ]
|
||||
jmp back;
|
||||
|
||||
### Linux PM Sub-system Testing ###
|
||||
|
||||
Using debug, dynamic debug, and tracing, let's run a few suspend to disk PM tests. When system is suspended, kernel creates hibernation image on disk, suspends and uses the image to restore the systerm state at resume time.
|
||||
|
||||
Enable logging time it takes to suspend and resume each device
|
||||
|
||||
echo 1 > /sys/power/pm_print_times
|
||||
|
||||
Run suspend to disk test in reboot mode
|
||||
|
||||
echo reboot > /sys/power/disk
|
||||
echo disk > /sys/power/state
|
||||
|
||||
Run suspend to disk test in shutdown mode - same as reboot, except requires powering on to resume
|
||||
|
||||
echo shutdown > /sys/power/disk
|
||||
echo disk > /sys/power/state
|
||||
|
||||
Run suspend to disk test in platform mode - more extensive and tests BIOS suspend and resume paths e.g: ACPI methods will be invoked. This is the recommended mode for hibernation so BIOS is informed and aware of suspend/resume action.
|
||||
|
||||
echo platform > /sys/power/disk
|
||||
echo disk > /sys/power/state
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via:http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,3
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://autotest.github.io/
|
||||
[2]:https://github.com/autotest/autotest/wiki/WhitePaper
|
||||
[3]:http://events.linuxfoundation.org/sites/events/files/slides/Shuah_Khan_dma_map_error.pdf
|
||||
[4]:http://www.linuxjournal.com/content/july-2013-linux-kernel-news
|
@ -0,0 +1,90 @@
|
||||
Linux Kernel Testing and Debugging
|
||||
================================================================================
|
||||
### Linux PM Sub-system Testing in Simulation Mode ###
|
||||
|
||||
The Linux PM sub-system provides five PM test modes to test hibernation in a simulated mode. These modes allow exercising the hibernation code in various layers of the kernel without actually suspending the system. This is useful when there is a concern that suspend might not work on a specific platform and help detect errors in a simulation similar to simulating flying a plane, so to speak.
|
||||
|
||||
freezer - test the freezing of processes
|
||||
|
||||
echo freezer > /sys/power/pm_test
|
||||
echo platform > /sys/power/disk
|
||||
echo disk > /sys/power/state
|
||||
|
||||
devices - test the freezing of processes and suspending of devices
|
||||
|
||||
echo devices > /sys/power/pm_test
|
||||
echo platform > /sys/power/disk
|
||||
echo disk > /sys/power/state
|
||||
|
||||
platform - test the freezing of processes, suspending of devices and platform global control methods(*)
|
||||
|
||||
echo platform > /sys/power/pm_test
|
||||
echo platform > /sys/power/disk
|
||||
echo disk > /sys/power/state
|
||||
|
||||
processors - test the freezing of processes, suspending of devices, platform global control methods(*) and the disabling of non-boot CPUs
|
||||
|
||||
echo processors > /sys/power/pm_test
|
||||
echo platform > /sys/power/disk
|
||||
echo disk > /sys/power/state
|
||||
|
||||
core - test the freezing of processes, suspending of devices, platform global control methods, the disabling of non-boot CPUs and suspending of platform/system devices. Note: this mode is tested on ACPI systems.
|
||||
|
||||
echo core > /sys/power/pm_test
|
||||
echo platform > /sys/power/disk
|
||||
echo disk > /sys/power/state
|
||||
|
||||
### Linux PM Sub-system Trace Events ###
|
||||
|
||||
PM sub-system supports several tracepoints and trace events that can be enabled to trigger during run-time. I will give an overview on how to enable couple of these trace events and where to find the trace information they generate:
|
||||
|
||||
Enabling PM events at run-time:
|
||||
|
||||
cd /sys/kernel/debug/tracing/events/power
|
||||
echo 1 > cpu_frequency/enable
|
||||
cat /sys/kernel/debug/tracing/set_event
|
||||
less /sys/kernel/debug/tracing/trace
|
||||
|
||||
Enabling events at boot-time kernel trace parameter with a kernel boot option:
|
||||
|
||||
trace_event=cpu_frequency
|
||||
|
||||
For more information on Linux PM testing, please consult the Documentation/power/basic-pm-debugging.txt and other documents in the same directory.
|
||||
|
||||
### git bisect ###
|
||||
|
||||
git bisect is an invaluable and powerful tool to isolate an offending commit. I will go over very basic git bisect steps.
|
||||
|
||||
This is how the process works:
|
||||
|
||||
git bisect start
|
||||
git bisect bad # Current version is bad
|
||||
git bisect good v3.14-rc6 # last good version
|
||||
|
||||
Once, one bad and one good version are specified, git bisect will start bisecting by pulling in commits between the good version and the bad. Once a set of commits are pulled in, compile the kernel, install, test, and tag the version good or bad. This process repeats until the selected commits are tested and tagged as good or bad. There can be several kernel versions to test. When the last version is tested, git bisect will flag a commit that is bad. The following useful git-bisect command can aid in using git-bisect process:
|
||||
|
||||
See step by step bisect progress
|
||||
|
||||
git bisect log
|
||||
|
||||
Reset git bisect can be used in case of mistakes in tagging, save git log output and replay prior to reset
|
||||
|
||||
git bisect reset
|
||||
|
||||
Replay a git-bisect log
|
||||
|
||||
git bisect replay git_log_output
|
||||
|
||||
git bisect can be run on a section of kernel source tree if the problem is clearly in that area. For example, when debugging a problem in radeon driver, running git bisect on drivers/drm/radeon will limit the scope of bisect to just the commits to drivers/drm/radeon driver.
|
||||
|
||||
Start git bisect on a section of a kernel tree
|
||||
|
||||
git bisect start drivers/drm/radeon
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,4
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
138
sources/tech/20140718 Linux Kernel Testing and Debugging 6.md
Normal file
138
sources/tech/20140718 Linux Kernel Testing and Debugging 6.md
Normal file
@ -0,0 +1,138 @@
|
||||
Linux Kernel Testing and Debugging
|
||||
================================================================================
|
||||
### Linux Kernel Patch Testing ###
|
||||
|
||||
Are you try your hands on writing a kernel patch? This section will go over how to test a new patch before sending it to the Linux mailing list. Further more, we will also talk about how to send it.
|
||||
Once the code is ready, compile it. Save the make output to a file to see if the new code introduced any new warnings. Address warnings, if any. Once the code compiles cleanly, install the compiled kernel and boot test. If it boots successfully, make sure there are no new errors in the dmesg, comparing it with the previous kernel dmesg. Run a few usage and stress tests. Please refer to the testing content we discussed earlier in this paper. If the patch is for fixing a specific bug, make sure the patch indeed fixes the bug. If the patch fixes the problem, make sure, other module regression tests pass. Identify regression tests for the patched module and run them. When a patch touches other architectures, cross-compile build testing is recommended. Please check the following in the source git as a reference to identify tests.
|
||||
|
||||
- linux_git/Documentation
|
||||
- linux_git/tools/testing
|
||||
- Cross-compiling reference: [Cross-compiling Linux Kernels on x86_64: A tutorial on How to Get Started][1]
|
||||
|
||||
Once you are satisfied with the patch testing, it is time to commit the change and generate the patch. Make sure the commit message describes the change made very clearly. It is important that the maintainer and other developers can understand what this change is all about. Once patch is ready, run scripts/checkpatch.pl on the generated patch. Address checkpatch errors and/or warnings, if any. Regenerate and repeat until the patch passes the checkpatch test. Unless the checkpatch errors are minor whitespace type, re-test the patch. Apply the patch to another instance of the kernel git to make sure patch applies cleanly.
|
||||
|
||||
Now you are ready to send the patch. Please run the scripts/get_maintainer.pl to identify whom the patch should be sent to. Please remember that the patch needs to be sent as a plain text, not as an attachment. Please make sure your email client can send plain text messages. Email the patch to yourself to test your client settings. Run checkpatch and apply the received patch. If these two steps pass, then you are ready to send the patch to the Linux Kernel Mailing List. git send-email is the safest way to send patches to avoid email client complications. Please make sure your .gitconfig includes sendemail with a valid smtpserver. Please consult git manpage for details.
|
||||
|
||||
Please refer to the following documentation in the kernel sources for rules and guidelines on sending patches:
|
||||
|
||||
- linux_git/Documentation/applying-patches.txt
|
||||
- linux_git/Documentation/SubmitChecklist
|
||||
- linux_git/Documentation/SubmittingDrivers
|
||||
- linux_git/Documentation/SubmittingPatches
|
||||
- linux_git/Documentation/stable_kernel_rules.txt
|
||||
- linux_git/Documentation/stable_api_nonsense.txt
|
||||
|
||||
The following is a list of additional testing guides and resources:
|
||||
|
||||
- [USB Testing on Linux][2]
|
||||
- [Linux Kernel Tester's Guide Chapter2][3]
|
||||
- [Linux Kernel Tester's Guide][4]
|
||||
- [Testing resources at eLinux.org][5]
|
||||
- [eLinux Debugging Portal][6]
|
||||
|
||||
### Kernel test suites and projects ###
|
||||
|
||||
In addition to the testing resources we discussed so far, there are projects both open source and initiated by hardware vendors that are worth a mention. Each of these projects focus on specific areas of the kernel and in some cases a specific space such as, embedded or enterprise where the kernel is used. We will look at a few in this section.
|
||||
|
||||
[Linux Test Project][7] (LTP) test suite is a collection of tools to test reliability, robustness, and stability of Linux kernel and related features. This test suite can be customized by adding new tests and the LTP project welcomes contributions. runltp script tests the following sub-systems by default:
|
||||
|
||||
- filesystem stress tests
|
||||
- disk I/O tests
|
||||
- memory management stress tests
|
||||
- ipc stress
|
||||
- scheduler tests
|
||||
- commands functional verification tests
|
||||
- system call functional verification tests
|
||||
|
||||
[**LTP-DDT**][8] is an LTP based test application wth a reduced focus to test embedded device drivers.
|
||||
|
||||
[**Linux Driver Verification**][9] project's goals are to improve the quality of Linux device drivers, develop an integrated platform for device drivers verification, and adopt latest research outcome to enhance quality of verification tools.
|
||||
|
||||
### Compliance Testing ###
|
||||
|
||||
If you ever had to port applications from one Unix variant to another, you would understand the importance of the [Linux Standard Base (LSB)][10] and LSB compliance test suite. The LSB is a Linux Foundation workgroup created to reduce the costs of supporting Linux platform, by reducing the differences between various Linux distributions and ensuring application portability between distributions. If anything, divergence in the Unix world taught us that it is vital to avoid it in the Linux world. This is exactly the reason why you can take an rpm convert it to deb and install and run it, and how sweet is that.
|
||||
|
||||
### Static Analysis and Tools ###
|
||||
|
||||
Static analysis tools analyze the code without executing it, hence the name static analysis. There are a couple of static analysis tools that are sepcifically written for analyzing the Linux kernel code base. Sparse is a static type-checking program written specifically for the Linux kernel, by Linus Torvalds. Sparse is a semantic parser. It creates a sematic prase tree to validate C semantics. It performs lazy type evaluation. Kernel build system has support for sparse and provides a make option to compile the kernel with sparse checking enabled.
|
||||
|
||||
Run sparse on all kernel C files that would get re-compiled:
|
||||
|
||||
make C=1 allmodconfig
|
||||
|
||||
Run sparse on all kernel C files even when they don't need a re-compile:
|
||||
|
||||
make C=2 allmodconfig
|
||||
|
||||
Sparse resources:
|
||||
|
||||
- [Sparse Archive][11]
|
||||
- [Sparse How To][12]
|
||||
|
||||
Smatch analyzes source to detect programming logic errors. It can detect logic errors such as, attempts to unlock already unlocked spinlock. It is actively used to detect logic errors in the Linux kernel sources.
|
||||
|
||||
Run smatch on Linux kernel:
|
||||
|
||||
make CHECK="~/path/to/smatch/smatch -p=kernel" C=1 bzImage modules | tee warns.txt
|
||||
|
||||
Please follow instructions on how to get smatch from smatch git repo and compile. Smatch is work in progress, instructions keep changing.
|
||||
|
||||
- [**Smatch**][12]
|
||||
|
||||
So what do we do about all of these semantic and logic problems found by Sparse and Smatch? Some of these problems are isolated to a routine and/or a module which can be fixed easily. However, some of these semantic issues are global in nature due to cut and paste of code. In some cases when interfaces get obsoleted or changed slightly, a mass change to update several source files becomes necessary. This is where Coccinelle comes in to rescue. Coccinelle is a program matching and transformation engine which provides the language SmPL (Semantic Patch Language) for specifying desired matches and transformations in C code. Coccinelle was initially targeted towards performing collateral evolutions in Linux.
|
||||
|
||||
For example, foo(int) interfaces changes to foo(int, char \*) with an optional second input parameter which can be a null. All usages of foo() will need to be updated to the new convention, which will be a very laborious task. Using Cocinelle, this task becomes easier with a script that looks for all instances of foo(parameter1) and replacing them with foo(parameter1, NULL). Once this task is done, all instances of foo() can be examined to see if passing in NULL value for parameter2 is a good assumption. For more information on Cocinelle and how it is used in fixing problems in various projects including the Linux kernel, please refer to the project page: [**Cocinelle**][13]
|
||||
|
||||
### References ###
|
||||
|
||||
We covered a lot of ground in this paper. I leave you with a few references for further reading on the topics we discussed.
|
||||
|
||||
- [KernelHacking][14]
|
||||
- [kernel Documentation][15]
|
||||
- [Linux Device Drivers, Third Edition][16]
|
||||
- [Dynamic Event Tracing in Linux Kernel][17]
|
||||
- [Kernel Testing: Tool and Techniques][18]
|
||||
|
||||
### Acknowledgements ###
|
||||
|
||||
I would like to thank Khalid Aziz, Oracle for his review, proof reading, and valuable suggestions for improvement. My special thanks to Mauro Chehab, Samsung and Guy Martin, Samsung for their review and feedback at various stages of writing this paper. I would like to extend my thanks to Greg Kroah-Hartman, Linux Foundation for his review. My special thanks to Ibrahim Haddad, Samsung for his support and encouragement without which, I would probably have never set out to write this paper in the first place.
|
||||
|
||||
----------
|
||||
|
||||
![](http://www.linuxjournal.com/files/linuxjournal.com/ufiles/pictures/picture-1088573.jpg)
|
||||
|
||||
Author:[Shuah Khan][a]
|
||||
|
||||
Shuah Khan is a Senior Linux Kernel Developer at Samsung's Open Source Group.
|
||||
She is a Linux Kernel Contributor who focuses on IOMMU, DMA, Linux Power
|
||||
Management, and PCIe, in addition to helping with stable release kernel
|
||||
maintenance testing and bug fixes. Shuah has several years of Unix kernel
|
||||
development experience. She has also contributed to OpenHPI, and LLDP projects.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,5
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://events.linuxfoundation.org/sites/events/files/slides/Shuah_Khan_cross_compile_linux.pdf
|
||||
[2]:http://www.linux-usb.org/usbtest/
|
||||
[3]:http://kernelnewbies.org/Linux_Kernel_Tester%27s_Guide_Chapter2
|
||||
[4]:http://www.kerneltravel.net/downloads/tester_guide.pdf
|
||||
[5]:http://elinux.org/Test_Systems
|
||||
[6]:http://elinux.org/Debugging_Portal
|
||||
[7]:http://ltp.sourceforge.net/documentation/how-to/ltp.php
|
||||
[8]:http://processors.wiki.ti.com/index.php/LTP-DDT
|
||||
[9]:http://linuxtesting.org/project/ldv
|
||||
[10]:http://www.linuxfoundation.org/collaborate/workgroups/lsb
|
||||
[11]:http://codemonkey.org.uk/projects/git-snapshots/sparse/
|
||||
[12]:http://smatch.sourceforge.net/
|
||||
[13]:http://coccinelle.lip6.fr/
|
||||
[14]:http://kernelnewbies.org/KernelHacking
|
||||
[15]:http://kernelnewbies.org/Documents
|
||||
[16]:http://lwn.net/Kernel/LDD3/
|
||||
[17]:http://events.linuxfoundation.org/slides/lfcs2010_hiramatsu.pdf
|
||||
[18]:http://events.linuxfoundation.org/images/stories/slides/elc2013_porter.pdf
|
||||
[a]:http://www.linuxjournal.com/users/shuah-khan
|
@ -0,0 +1,57 @@
|
||||
Need Microsoft Office on Ubuntu? Install the Official Web Apps
|
||||
================================================================================
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/office-web-app-.jpg)
|
||||
|
||||
**It’s not everyone’s cup of joe, but Microsoft Office and its family of finicky file formats are a mainstay of many working and educational environments — for better or worse.**
|
||||
|
||||
Reading, editing and saving to these proprietary formats is sort of possible on Ubuntu using the [LibreOffice suite of apps][1]. Writer, Calc and Impress all boast varying degrees of Microsoft Office file interoperability, though in my own real world experience (thankfully brief) it’s not perfect.
|
||||
|
||||
For the times you can’t go without using Office file formats (as ideological as most of us are about open standards, we shouldn’t be blind to practicalities) but you’ve no desire to purchase a full MS Office licence to run through WINE, the official set of Microsoft Office Online web apps are the perfect answer.
|
||||
|
||||
### Install Microsoft Office Online Apps in Ubuntu ###
|
||||
|
||||
To make accessing these online versions easier from the Ubuntu desktop, the ‘Linux Web Apps project’ has created a small, unofficial installer that adds web app shortcuts (“glorified bookmarks”) to your application launcher.
|
||||
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/microsoft-office-web-apps.jpg)
|
||||
|
||||
These are nothing more fancy than shortcuts to the respective Microsoft web app that opens in your default system browser. Sound nifty? You get application shortcuts for:
|
||||
|
||||
- Word
|
||||
- Excel
|
||||
- PowerPoint
|
||||
- Outlook
|
||||
- OneDrive
|
||||
- Calendar
|
||||
- OneNote
|
||||
- People
|
||||
|
||||
The package also creates a new application category housing the links, letting you view the shortcuts separately from other applications as well as under the regular “office” apps directory.
|
||||
|
||||
Are these essential? Not really. Are they useful? Depends on your workflow. But is it nice to have the option? For sure.
|
||||
|
||||
You can grab the .deb installer containing the links from the link below and is suitable for Ubuntu 14.04 LTS and later.
|
||||
|
||||
- [Download Microsoft Office Web Apps (.deb)][2]
|
||||
|
||||
### Other Alternatives ###
|
||||
|
||||
![](http://d0od.wpengine.netdna-cdn.com/wp-content/uploads/2014/04/Screen-Shot-2014-04-15-at-15.29.35-350x200.png)
|
||||
|
||||
A similar alternative is to [install the official Office Online web applications from the Chrome Web Store][3], then add the app launcher to Linux. This will still create launchable shortcuts for them in the Dash, but ones that can be set to open in their own window frames and forgo the need to install any third-party packages.
|
||||
|
||||
Similarly, Google recently folded in full Office capabilities (thanks to its purchase of QuickOffice) [into its own Docs, Slides and Sheets applications][4], retired the QuickOffice Android application and rebranded the companion Chrome extension.
|
||||
|
||||
If you’re a heavy Google Drive/Docs user, this may be the better solution for you.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.omgubuntu.co.uk/2014/07/run-microsoft-office-web-apps-ubuntu-desktop
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.libreoffice.org/
|
||||
[2]:https://docs.google.com/file/d/0ByQnaVw7riBQMjNCUFh4ZlM4Y0E/edit?usp=sharing
|
||||
[3]:http://www.omgchrome.com/microsoft-brings-office-online-chrome-web-store/
|
||||
[4]:http://www.omgchrome.com/quickoffice-chrome-extension-gets-name-change/
|
115
translated/talk/20140607 Got Linux--Add Proprietary Code.md
Normal file
115
translated/talk/20140607 Got Linux--Add Proprietary Code.md
Normal file
@ -0,0 +1,115 @@
|
||||
|
||||
Got Linux? Add Proprietary Code
|
||||
================================================================================
|
||||
![](http://www.linuxinsider.com/images/rw661226/linux-enterprise-proprietary-code.jpg)
|
||||
|
||||
> 对于一些产业来讲,在开源的Linux发行版上运行商业版的软件并不类外。--这很常见,例如,在华尔街,“华尔街上百分之九十九的应用依赖于商业版的软件。在我们运行在Linux上的产品中,Oracle是我们最喜欢的一种商业软件”, FSMLabs' President Victor Yodaiken说。
|
||||
|
||||
迁移到Linux平台并不是一个非此即彼的提议。作为一个计算机平台,Linux是非常灵活的。它提供给用户一个自定义的软件菜单选项。
|
||||
|
||||
一种选择是Linux桌面。家庭个人用户,SOHO 和 SMB 操作可以从众多的企业级Linux发行版中选择。Linux桌面系统提供了一个0成本或者成本很低的替代,相对于微软系统来讲,或者是基于Unix的苹果OS X系统依赖苹果硬件的局限性。
|
||||
|
||||
另一个替换的办法是,让员工放弃linux桌面办公,取而代之,企业可以运行后台办公系统在Linux服务器上。Linux服务器在网络化和云计算领域有一个缜密和强大的空间。Linux服务器在很多企业中应用很广。
|
||||
|
||||
第三个方法是运行一个完整的Linux商店,斯坦达德办公中心运作的软件在开源包,网络浏览,图形产生方面非常有用。开源的数据库应用和和后台软件及服务器连接相当频繁,在此方面,Linux不需要购入特殊硬件来支持。
|
||||
|
||||
培训员工使用Linux桌面应用需求量很小。感谢工作者对跨平台软件的友好支持。例如LibreOffice 和 Open Office, 同样的,Chrome和 Firefox浏览器。前端办公交互很少漏掉。
|
||||
|
||||
Linux很灵活。一个新的趋势是生产适合你企业需要的第三方软件。商业软件公司可以再编译必要的WIndow或者其它平台软件。他们也可以生产Linux任务应用将现成的资源和他们自己的代码结合到一起。
|
||||
|
||||
“我相信这将是一个新的趋势,企业可以用第三方软件在Linux系统上进行开发。推动企业向Linux迁移并使用定制的软件的一个因素便是支付微软的专利费用的财政负担”,Dayan Jeremiah ,[Icewarp Pacific][1] 的 CEO 说。
|
||||
|
||||
|
||||
### Linux Does Proprietary ###
|
||||
|
||||
一个公司向任何一个系统迁移的时候所面临的最大障碍是监测应用的通用性。在迁移到Linux上时,企业不得不保证软件在Liunx上通用。Jeremiah强调
|
||||
|
||||
Linux操作系统有一个多类型和Linux桌面系统软件库。根据不同的行业,大量的开源社区可能没有为每一个特殊的任务指定一种方案。在这种情况下, 借助于第三方软件来推出自己的应用往往更节约成本。
|
||||
|
||||
“使用第三方软件有助于保证兼容性,例如,我们可以混合和匹配软件组件来保证应用在Linux上运行” ,Jeremiah 说。
|
||||
|
||||
### 旧的模型产生新模型 ###
|
||||
|
||||
越来越多的专有软件公司,例如爱思华宝,建立特殊的软件来满足企业特殊的业务需求,他们将许多开源组件混合在一起使用。
|
||||
|
||||
与微软的基础设施相比,不仅节省了许可成本,还节省了编码成本。
|
||||
|
||||
“我们可以建立一个完整的软件方案,使用现成的Linux软件组件,整个解决方案往往更节省成本,高效,稳定。” Jermaih强调。
|
||||
|
||||
Icewarp不开发专门的软件作为免费的开源项目,它不提供免费版,需要付费支持。你需要付费购买它。
|
||||
|
||||
### 代码移植 ###
|
||||
|
||||
把软件从一个平台移植到另一个平台并与Liunx兼容的一个障碍是Liunx的多样化,依据Jacob Loveless, CEO of [Lucera][2]的观点。Linux操作系统拥有一个通用kernel,但是有很多多样化。
|
||||
|
||||
“当软件公司不得不在多个Linux系统中交叉编译时,问题进一步加深。”伴随着微软Exchange 服务器的类外,大多数数据库运行良好。Mysql和postSql可能是最突出的两个开源版本。
|
||||
|
||||
在软件移植到Linux的最大挑战,是需要重新编译代码,通常有平台相关的事情你不得不去做。他说。
|
||||
|
||||
例如,如果你有特殊的代码底层依赖,对于window来讲,.net 或者其它语言,运行在Linux的开源编译器并不总是兼容,因此你有很多软件工作需要重做,Loveless说道。
|
||||
|
||||
另一个例子是使用数据库。你经常不得不连接到一个不同的数据库和一个不同的web服务器。
|
||||
|
||||
有明确的工作要做,Loverless说道。
|
||||
|
||||
### 许多还不够 ###
|
||||
|
||||
在移植到Linux上时,另一个兼容性问题是开源软件公司的需求。
|
||||
|
||||
没有足够的开源方案来解决企业的专业需求, IceWarp 的Jeremiah说,通常来讲,我们认为是足够的,目前还没有被专门的软件应用来提供,而第三方不能提供的软件。
|
||||
|
||||
例如,IceWarp最近建立了一个特殊的Linux兼容应用,不需要额外的硬件采购,没有额外的许可费用。
|
||||
|
||||
特殊的软件包括一个集群负载均衡。集群数据库和集群IP服务器,所有的这一切都运行在一个标准的红帽企业版Linux或者CentOS Linux.
|
||||
|
||||
|
||||
### 跟着钱走 ###
|
||||
|
||||
在一些情况下,你可以跟着前找到Linux。有时它是Linux服务器在工业中有很高的用途。另一些时候,它是Linux桌面应用,或者两者都有。
|
||||
|
||||
例如,在金融市场中,时间同步是关键。金融依靠分布式网络,用户不得不在指定的时间内完成交易。其它的应用需要在交易前进行精确的计时。这些功能需要精确的时间同步控制。Victor Yodaiken 说,[FSMLabs][3] 的总裁。
|
||||
|
||||
当FSMLabs 开始开发时间同步软件,Yodaiken期待很快会拥有一个Windows版本。
|
||||
|
||||
然而,被证实每一个在使用自动交易或者低延迟交易,甚至是采集高精度数据软件的人,都运行的是Linux系统,他告诉LinuxInsider.
|
||||
|
||||
### 时间是昂贵的 ###
|
||||
|
||||
FSMLabs 将专有的代码运行在Linux上,建立在Linux上的软件时间协议不适用同步时间在纳秒级别的应用,比如那些追踪股票,或者交易的需求。
|
||||
|
||||
“我认为Linux的在Windows之上,因为Windows没有一个标准的API让你获取时间在毫秒级别以下。”所以Window并不是真的都好。你不得不拥有特殊的API,在Linux下。你不需要费力在你的应用程序上。Yodaiken 说。
|
||||
|
||||
金融市场是第一个拥抱Linux的。许多早期的系统管理者来自80年代的[贝尔实验室][4],因此这是一个很成熟的市场,他说。
|
||||
|
||||
### 满足需求 ###
|
||||
|
||||
对于一些产业来说,在开源的Linux发型版上运行有专利的软件并不意外,这是很常见的。
|
||||
|
||||
“华尔街99%的应用都运行在有专利的产品上。在我们运行在Linux的产品中,我们很喜欢Oracle,它有一个专利许可。”FSMLabs' Yodaiken说。
|
||||
|
||||
一些市场运行Linux需要跟更多专业的软件,相比开源的产品,现存的开源软件不能满足他们的需求。这也就是为什么软件开发者为企业Linux提供商业的产品。他补充道。
|
||||
|
||||
“这是很常见的,开源最适合大市场,这就是为什么他们具有广泛的需求。没有几人总是对的。如果他们不对,需要告诉他们” 他指出。
|
||||
|
||||
### Linux纯粹主义是没有意义的 ###
|
||||
|
||||
在Linux上运行完全免费开源的软件的观念是欠缺的,有时候你要运行专利软件。
|
||||
|
||||
当一个专业的计算不需要进入广泛市场时,第三方软件开发者提供一个专有的,商业的或者闭源的解决方案。由于商业持续地适应Linux系统,绝对的开源将成为过去的事情。
|
||||
|
||||
在Linux上拥有商业软件是相当普遍的,Yodaiken说,商人都不是纯粹主义者,他们只想解决问题。
|
||||
|
||||
Jack M. Germain从早期的苹果二和PC的时候就一直在写计算机技术。他保留着一些原始的IBM PC和一些传统的DOC系统,和Windows盒子,他抛弃了共享程序,走向开源Linux世界.他运行一些Windows系统和Linux系统,经常不能决定是否用他的平板电脑或者安卓智能手机替代他的桌面系统或者便携式电脑。你可以在Google+上联系到他。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.linuxinsider.com/story/80555.html
|
||||
|
||||
译者:[jiajia9linuxer](https://github.com/jiajia9linuxer) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.icewarp.com/
|
||||
[2]:https://lucerahq.com
|
||||
[3]:http://www.fsmlabs.com/
|
||||
[4]:http://www.bell-labs.com/
|
@ -0,0 +1,72 @@
|
||||
HTG解释:什么是Unix以及它为什么这么重要?
|
||||
================================================================================
|
||||
![](http://cdn.howtogeek.com/wp-content/uploads/2014/02/ken-thompson-and-dennis-richie-at-pdp-11.jpg)
|
||||
|
||||
大多数操作系统可以被划分到两个不同的家族。除了微软的基于Windows NT的操作系统外,几乎所有其他的都可以追溯到Unix。
|
||||
|
||||
Linux,Mac OS X,Android,iOS,Chrome OS,PlayStaion 4上运行的Orbis OS,运行在路由器上的任意固件,所有这些操作系统通常都被称为“类Unix”操作系统。
|
||||
|
||||
### Unix的设计现在都还在应用 ###
|
||||
|
||||
Unix在20世纪60年代中晚期诞生于AT&T的贝尔实验室中。最初发布的Unix中的一些重要设计因素到如今都还在使用。
|
||||
|
||||
其中一个是“Unix哲学”,建立小的模块化的应用,只做一件事情并把它做好。如果你对Linux终端很熟悉的话,应该对这个不陌生-系统提供了大量的应用,可以通过[管道或其他特性][1]形成不同的组合来完成更复杂的任务。甚至图形界面程序也经常会在后台调用更简单的应用去做比较耗时的任务。这种模式也让[建立终端脚本][2]更为简单,通过文本把一些简单工具结合起来去做复杂的事情。
|
||||
|
||||
Unix还设计了一个单一的文件系统,程序可以通过它互相通讯。这也是[为什么在Linux里说“一切都是文件”][3]-包括硬件设备和提供系统信息或其他数据的特殊文件。这也是为什么只有Windows系统中才有磁盘盘符,这是从DOS继承过来的-在其他操作系统中,所有文件都是一个单一目录结构中的一部分。
|
||||
|
||||
![](http://cdn.howtogeek.com/wp-content/uploads/2014/02/unix-bell-labs.jpg)
|
||||
|
||||
### 那些从Unix派生出的系统 ###
|
||||
|
||||
类似任何往前追溯40年的历史,Unix的历史和它的派生系统一片混乱。为了简单,我们把Unix的派生系统大致分成两组。
|
||||
|
||||
一组Unix派生系统是学术界开发的。首先是BSD(伯克利软件发布版),一个开源的类Unix操作系统。BSD如今还存在于FreeBSD,NetBSD和OpenBSD等系统中。NeXTStep基于最初版的BSD开发,苹果的Mac OS X基于NeXTStep,iOS基于Mac OS X。许多其他操作系统,包括运行在PlayStation 4上的Orbis OS,也源于各种BSD操作系统。
|
||||
|
||||
Richard Stallman建立GNU项目的目的是为了反对AT&T的Unix软件协议条款日渐严格的限制。MINIX是一个类Unix操作系统,为教育目的而实现的,而Linux则是受到了MINIX的启发。[我们今天所熟悉的Linux其实应该叫GNU/Linux][4],因为它是由Linux内核和大量GNU应用组成的。GNU/Linux不是直接从BSD继承下来的,但是它继承了Unix的设计而且根植于学术界。如今许多操作系统,包括Android,Chrome OS,Steam OS,以及数量巨大的在各种设备上使用的嵌入式操作系统,都基于Linux。
|
||||
|
||||
另一组是商用的Unix操作系统。AT&T UNIX,SCO UnixWare,Sun Microsystem Solaris,HP-UX,IBM AIX,SGI IRIX-许多大型企业都希望建立并授权自己版本的Unix。它们如今并不常见,但其中一些仍然存在。
|
||||
|
||||
![](http://cdn.howtogeek.com/wp-content/uploads/2014/02/history-of-unix.png)
|
||||
|
||||
图片致谢: [Wikimedia Commons][5]
|
||||
|
||||
### DOS和Windows NT的崛起 ###
|
||||
|
||||
许多人希望Unix能够成为工业标准操作系统,但是DOS和“IBM PC兼容”计算机却最终人气爆发而普及开来。微软的DOS也成为众多DOS系统中最成功的一个。DOS完全没有参照Unix,这也是[为什么Windows使用反斜杠划分文件路径,而其他所有系统都使用正斜杠][6]。这个决定是在早期的DOS系统中做出的,而之后的Windows版本继承了这一设定,就像BSD,Linux,Mac OS X,和其他类Unix操作系统继承了许多Unix设计因素一样。
|
||||
|
||||
Windows 3.1,Windows 95,Windows 98,and Windows ME都是建立在DOS的基础上。当时微软已经在开发一个更现代更稳定的操作系统,叫做Windows NT-意思是“Windows新技术”。Windows NT最终通过Windows XP应用到普通计算机用户中,但是之前它都只用于针对企业用户的Windows 2000和Windows NT。
|
||||
|
||||
如今所有微软的操作系统都基于Windows NT内核。Windows 7,Windows 8,Windows RT,Windows Phone 8,Windows Server,以及Xbox One上的操作系统都在使用Windows NT内核。不像其他大多数操作系统那样,Windows NT没有被开发成一个类Unix操作系统。
|
||||
|
||||
当然,微软也不是完全从零开始的。为了维护DOS和旧版本Windows软件的兼容性,Windows NT继承了许多DOS里的设定,比如磁盘盘符,反斜杠区分文件路径,正斜杠作为命令行参数开关。
|
||||
|
||||
![](http://cdn.howtogeek.com/wp-content/uploads/2014/02/windows-2000-professional-built-on-nt-technology.jpg)
|
||||
|
||||
为什么它影响很大
|
||||
|
||||
不知道你有没有看过Mac OS X终端或是文件系统,有没有注意到它们和Linux是如此相似,而又和Windows是如此不同?好吧,原因是-Mac OS X和Linux两个都是类Unix操作系统。
|
||||
|
||||
了解了这点历史,就可以帮助你理解什么是“类Unix”操作系统,以及为什么这么多操作系统看起来都差不多,而Windows却那么与众不同。这也可以解释为什么Linux极客对Mac OS X上的终端会感觉如此熟悉,而[Windows 7上的Command Prompt和PowerShell][7]相对于其他命令行环境显得如此不同。
|
||||
|
||||
这只是一点快速掠过的历史,帮助了解是如何发展到今天的,而不用陷入到细节中。如果你想了解更多,可以找到许多关于Unix历史的整本的书籍。
|
||||
|
||||
图片致谢: [Peter Hamer on Flickr][8], [Takuya Oikawa on Flickr][9], [CJ Sorg on Flickr][10]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.howtogeek.com/182649/htg-explains-what-is-unix/
|
||||
|
||||
译者:[zpl1025](https://github.com/zpl1025) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.howtogeek.com/110150/become-a-linux-terminal-power-user-with-these-8-tricks/
|
||||
[2]:http://www.howtogeek.com/107217/how-to-manage-processes-from-the-linux-terminal-10-commands-you-need-to-know/
|
||||
[3]:http://www.howtogeek.com/117939/htg-explains-what-everything-is-a-file-means-on-linux/
|
||||
[4]:http://www.howtogeek.com/139287/the-great-debate-is-it-linux-or-gnulinux/
|
||||
[5]:http://en.wikipedia.org/wiki/File:Unix_history.svg
|
||||
[6]:http://www.howtogeek.com/181774/why-windows-uses-backslashes-and-everything-else-uses-forward-slashes/
|
||||
[7]:http://www.howtogeek.com/163127/how-powershell-differs-from-the-windows-command-prompt/
|
||||
[8]:http://www.flickr.com/photos/peter-hamer/2876612463/
|
||||
[9]:http://www.flickr.com/photos/takuyaoikawa/2060554607/
|
||||
[10]:http://www.flickr.com/photos/cjsorg/2726088549/
|
58
translated/talk/20140626 Joy of Programming--Fail Fast.md
Normal file
58
translated/talk/20140626 Joy of Programming--Fail Fast.md
Normal file
@ -0,0 +1,58 @@
|
||||
编程的乐趣:快速出错!
|
||||
================================================================================
|
||||
![](http://www.opensourceforu.com/wp-content/uploads/2011/12/fail-350x262.jpg)
|
||||
|
||||
> 当软件出现问题的时候,它应该以一种能引起注意的方式马上终止。这种“快速出错”的方式值得借鉴,我们会在这期专栏里谈谈这个重要的概念。
|
||||
|
||||
一开始,“快速出错”看上去是一种会影响可靠性的不好的实践-为什么一个系统在还可以继续运行的时候要崩溃(或者说终止)?对于这个,我们需要理解,快速出错是和Heisenbugs(对于不能复现bug的一种称呼)紧密联系在一起的。
|
||||
|
||||
考虑一下Bohrbugs(对于能够重现的bug的一种称呼),它们在给定输入的时候总是会出现,比如,访问空指针。这类问题很容易测试,复现并修复。如今,所有有经验的程序员应该都面对过这样的情形,导致崩溃的bug在重启软件后不再出现了。不管花多少时间或努力去重现问题,那个bug就是跟我们捉迷藏。这种bug被称为Heisenbugs。
|
||||
|
||||
花在寻找,修复和测试Heisenbugs上的努力比起Bohrbugs来说,要高出一个数量级。一种避免Heisenbugs的策略是将它们转化为Bohrbugs。怎么做呢?预测可能导致Heisenbugs的因素,然后尝试将它们变成Bohrbugs。是的,这并不简单,而且也并不是一定就能成功,但是让我们来看一个能产生效果的特殊例子。
|
||||
|
||||
并发编程是Heisenbugs经常出现的一个典范。我们的例子就是一个Java里和并发相关的问题。在遍历一个Java集合的时候,一般要求只能通过Iterator的方法,比如remove()方法。而当遍历的时候,如果有另一个线程尝试修改底层集合(因为编程时留下的错误),那么底层集合就可能会被破坏(例如,导致不正确的状态)。
|
||||
|
||||
类似这种不正确的状态会导致不确定的错误-假如我们幸运的话(实际上,这很不幸!),程序可以继续执行而不会崩溃,但是却给出错误的结果。这种bug很难重现和修复,因为这一类的程序错误都是不确定的。换句话说,这是个Heisenbug。
|
||||
|
||||
幸运的是,Java Iterators会尝试侦测这种并发修改,在发现了以后,会丢出异常`ConcurrentModificationException`,而不是等到最后再出错-那样也是没有任何迹象的。换句话说,Java Iterators也遵从了“快速出错”的方法。
|
||||
|
||||
如果异常`ConcurrentModificationException`在正式软件中发生了呢?根据在Javadoc里对这个异常的说明,它“只应该用于侦测bug”。换句话说,`ConcurrentModificationException`只应该在开发阶段监听和修复,而不应该泄漏到正式代码中。
|
||||
|
||||
好吧,如果正式软件确实发生了这个异常,那它当然是软件中的bug,应当报告给开发者并修复。至少,我们能够知道发生了一次底层数据结构的并发修改,而这是软件出错的原因(而不是让软件产生错误的结果,或是以其他现象延后出错,这样就很难跟踪到根本原因)。
|
||||
|
||||
“安全出错”的方法意味着开发健壮的代码。一个很好的编写安全出错代码的例子就是使用断言。很可惜的是,关于断言的使用有大量不必要的公开争论。其中主要的批评点是:它在开发版本中使用,而在发布版中却被关掉的。
|
||||
|
||||
不管怎么样,这个批评是错误的:从来没有说用断言来替代应该放到发布版软件中的防御式检查代码。例如,断言不应该用来检查传递给函数的参数是否为空。相应的,应该用一个if语句来检查这个参数是否正确,否则的话抛出异常,或是提前返回,来适合上下文。然而,断言一般用于额外检查代码中所做出的假设,它们应该为真才正常。例如,用一个语句来检查在进行了入栈操作后,栈应该不是空的(例如,对“不变量”的检查)。
|
||||
|
||||
所以,快速出错,随时中断,那么你已经走在开发更加健壮代码的道路上了。
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via:http://www.opensourceforu.com/2011/12/joy-of-programming-fail-fast/
|
||||
|
||||
译者:[zpl1025](https://github.com/zpl1025) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:
|
||||
[2]:
|
||||
[3]:
|
||||
[4]:
|
||||
[5]:
|
||||
[6]:
|
||||
[7]:
|
||||
[8]:
|
||||
[9]:
|
||||
[10]:
|
||||
[11]:
|
||||
[12]:
|
||||
[13]:
|
||||
[14]:
|
||||
[15]:
|
||||
[16]:
|
||||
[17]:
|
||||
[18]:
|
||||
[19]:
|
||||
[20]:
|
@ -1,6 +1,6 @@
|
||||
如何无盘启动Linux
|
||||
================================================================================
|
||||
无盘启动意味着一台客户端电脑在启动操作系统时没有任何的磁盘存储介质。在这种情形之下,电脑能够通过网络从远程NFS服务器上加载内核和根文件系统。在这过程中可能会用到数种不同的方法来从NFS服务器上加载内核和根文件系统:RARP,BOOTP或是DHCP协议。在这个指导教程中,我会使用BOOTP/DHCP协议,因为它们能够被大多数的网卡所支持。
|
||||
无盘启动意味着一台客户端电脑在启动操作系统时没有任何的磁盘存储介质。在这种情形之下,电脑能够通过网络从远程NFS服务器上加载内核和根文件系统。在这过程中可能会用到多种不同的方法来从NFS服务器上加载内核和根文件系统:RARP,BOOTP或是DHCP协议。在这个指导教程中,我会使用BOOTP/DHCP协议,因为它们能够被大多数的网卡所支持。
|
||||
|
||||
### 无盘计算机的优势 ###
|
||||
|
||||
@ -18,11 +18,11 @@
|
||||
1. 配置NFS服务器
|
||||
1. 启动无盘客户机
|
||||
|
||||
在这个指导教程中,我假设作为启动服务器的电脑运行着Ubuntu。如何你正在使用其它的Linux发行版,原理是一样的。
|
||||
在这个指导教程中,我假设作为启动服务器的电脑运行的是 Ubuntu。如何你正在使用其它的Linux发行版,原理是一样的。
|
||||
|
||||
### 第一步:安装所需的包 ###
|
||||
|
||||
像下面这样使用apt-get命令来安装所有需要的包。
|
||||
像下面这样使用 apt-get 命令来安装所有需要的包。
|
||||
|
||||
$ sudo apt-get install dhcp3-server tftpd-hpa syslinux nfs-kernel-server initramfs-tools
|
||||
|
||||
@ -62,7 +62,7 @@ TFTP服务器是一个小型FTP服务器,需要用它来在本地网络中的
|
||||
- "rw"表示NFS共享是可读/可写的。
|
||||
|
||||
最后,重启TFTPD服务。
|
||||
|
||||
|
||||
sudo /etc/init.d/tftpd-hpa restart
|
||||
|
||||
### 第三步:配置DHCP服务 ###
|
||||
@ -120,7 +120,7 @@ TFTP服务器是一个小型FTP服务器,需要用它来在本地网络中的
|
||||
|
||||
$ sudo cp -ax / /nfsroot
|
||||
|
||||
然后打开用文本编辑器打开/nfsroot/etc/fstab并添加以下行。
|
||||
然后通过文本编辑器打开/nfsroot/etc/fstab 并添加以下行。
|
||||
|
||||
/dev/nfs / nfs defaults 1 1
|
||||
|
||||
@ -138,14 +138,14 @@ TFTP服务器是一个小型FTP服务器,需要用它来在本地网络中的
|
||||
|
||||
### 第五步:启动无盘客户机 ###
|
||||
|
||||
在你完成了服务器上的配置之后,从网络启动你的客户机。要从网络启动一般你只需修改BIOS设置中的启动优先顺序即可。
|
||||
在您完成了服务器上的配置之后,从网络启动你的客户机。要从网络启动一般你只需修改BIOS设置中的启动优先顺序即可。
|
||||
|
||||
如果客户机启动成功,你的无盘环境就配置好了。你无需修改任何东西就可以任意添加一台或多台客户端电脑。
|
||||
如果客户机启动成功,您的无盘环境就配置好了。无需做任何修改就可以任意添加一台或多台客户端电脑。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://xmodulo.com/2014/06/diskless-boot-linux-machine.html
|
||||
|
||||
译者:[alim0x](https://github.com/alim0x) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
译者:[alim0x](https://github.com/alim0x) 校对:[Caroline](https://github.com/carolinewuyan)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
@ -1,94 +0,0 @@
|
||||
Linux 高级目录导航技巧
|
||||
================================================================================
|
||||
|
||||
目录当行是命令行系统的基础概念.虽然不是什么难以理解的东西,但是知道一些技巧能够丰富你的经验并且提高工作效率.在这篇文章中,我们会讨论这些小技巧.
|
||||
|
||||
### 我们已经知道的东西 ###
|
||||
|
||||
在开始高级技巧之前,有一些必须知道的基本命令:
|
||||
|
||||
- ‘pwd’显示当前目录
|
||||
- ‘cd’ 改变当前目录
|
||||
- ‘cd’ 跟两个点(cd ..)能返回父目录
|
||||
- ‘cd’ 跟着相对目录就能直接切换当相对目录下
|
||||
- ‘cd’ 跟着绝对目录就能切换到绝对目录下
|
||||
|
||||
### 高阶技巧 ###
|
||||
|
||||
这节将介绍几个技巧方便你进行目录的切换
|
||||
|
||||
### 从任何地方回到home目录 ###
|
||||
|
||||
虽然使用‘cd /home/<your-home-directory-name>’, 不是什么大麻烦, 但是有一种方法直接打‘cd’ 就能回到home目录.
|
||||
|
||||
Here is an example :
|
||||
|
||||
$ pwd
|
||||
/usr/include/netipx
|
||||
$ cd
|
||||
$ pwd
|
||||
/home/himanshu
|
||||
|
||||
所以无论你在哪个目录下,都能这么干然后回到home目录.
|
||||
|
||||
**注意**- 如果要切换到确定用户的目录下, 就使用 ‘cd ~user_name'
|
||||
|
||||
### 用cd在目录间切换 - ###
|
||||
|
||||
假设你的工作目录是这样的:
|
||||
|
||||
$ pwd
|
||||
/home/himanshu/practice
|
||||
|
||||
如果你想切换到 **/usr/bin/X11**, 然后又想回到之前的目录. 你会怎么做? 最直接的 :
|
||||
|
||||
$ cd /usr/bin/X11
|
||||
$ cd /home/himanshu/practice/
|
||||
|
||||
虽然这样行得通,但是要记住这些复杂的目录是个大困难.这种情况下使用 ‘cd -’ 命令就行.
|
||||
|
||||
使用 ‘cd -’的第一步和上面的例子是一样的, 你可以 cd 到你想要切换到的<path>下 , 但是回到之前的目录用 ‘cd -’就可以.
|
||||
|
||||
$ cd /usr/bin/X11
|
||||
$ cd -
|
||||
/home/himanshu/practice
|
||||
$ pwd
|
||||
/home/himanshu/practice
|
||||
|
||||
如果你想回到最后访问的目录(在这个例子中是/usr/bin/X11),也使用'cd -'就可以.但是这个命令只会记住最后访问的目录,这是一个缺点.
|
||||
|
||||
### 用 pushd 和 popd 来切换目录 ###
|
||||
|
||||
![directory navigation](http://linoxide.com/wp-content/uploads/2014/06/pushd-popd.jpg)
|
||||
|
||||
|
||||
如果你对'cd -'非常了解了的话,你会发现这个命令只能帮助你在两个目录之间移动,但是很多场景下需要在很多目录之间切换.比如你要从A切换到B再到C然后又想回到A.
|
||||
|
||||
一般来说,你需要打出A的完整路劲,但是如果这个路径非常复杂,将是非常烦人的一件事,热别是你的切换非常频繁的话.
|
||||
|
||||
一些场景下可以使用 ‘pushd’ 还有 ‘popd’ 命令. The ‘pushd’ 将一个目录存到内存中,‘popd’ 将目录从内存中去除,并且转换到那个目录下.
|
||||
|
||||
例如 :
|
||||
|
||||
$ pushd .
|
||||
/usr/include/netipx /usr/include/netipx
|
||||
$ cd /etc/hp/
|
||||
$ cd /home/himanshu/practice/
|
||||
$ cd /media/
|
||||
$ popd
|
||||
/usr/include/netipx
|
||||
$ pwd
|
||||
/usr/include/netipx
|
||||
|
||||
使用‘pushd’ 命令存储当前的工作目录 (用 .表示), 然后切换到各种各样的目录去. 为了返回之前的目录 ,只要使用 ‘popd’命令就行了.
|
||||
使用
|
||||
|
||||
**注意**- 你也可以使用 ‘pushd’ 来切换到之前存储的目录, 但是不会像 ‘popd’ 一样去除这个目录.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://linoxide.com/linux-command/directory-navigations-tips-tricks/
|
||||
|
||||
译者:[ggaaooppeenngg](https://github.com/ggaaooppeenngg) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
@ -1,85 +0,0 @@
|
||||
暑假 先来一发 Luoxcat 翻译
|
||||
命令行星期二 - 第三篇
|
||||
================================================================================
|
||||
今天,Shotts 将带领我们游历文件系统的第一部分。我们将学到如何访问,列出目录内的文件,以及首次介绍一些选项的运用。OK,让我们开始学习这周的第一个命令。
|
||||
|
||||
### ls ###
|
||||
|
||||
ls 是一个用来列出目录内文件的命令。通过添加**选项**来实现多种不同的用途。当然为了得心应手,你可以只需键入 ls 。但是,你也可以添加一个选项后,它会帮助你修饰你的命令。如果你想要"沙盒"一些信息时,这会帮到你的。举例来说,当你要从一个命令的大量输出中找寻指定信息,你可以用选项缩小范围来实现。
|
||||
|
||||
这就是选项的基础概念。我们可以用下面书写格式表示:
|
||||
|
||||
command(命令) -option(选项) argument(参数)
|
||||
|
||||
命令,恩...,我们可以输入 pwd, ls, 或者是我们到目前为止所有学过的命令。
|
||||
|
||||
以上我们已经阐述了选项的目的。但是我们需要注意一下书写格式:在前头添加一个破折号。所以,如果选项为 l, 你需要在命令后键入**-l**。
|
||||
|
||||
**参数**是一个命令的操作对象(在这个例子中,它是一个目录,我们将会学到如何浏览它们)。
|
||||
|
||||
接着,让我们尝试在主目录里尝试用 ls 命令列出 /etc 目录内容。这次我们先不添加选项。
|
||||
|
||||
![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-184127.png)
|
||||
|
||||
就这样,列出了一大堆的文件。它们还根据颜色进行了分类。蓝色的是目录,白色的为普通文件,绿色的似乎是一个 shell 脚本文件。除此之外,还有其他不同的颜色来代表不同的文件类型。
|
||||
|
||||
接下来,你可以在刚才的命令里添加 -l 选项。添加选项 -l 后也会列出同样的文件和目录,但是会有长格式(the long format)的输出。如果你需要查看更多信息的话,这个选项将是不错的选择。
|
||||
|
||||
![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-184542.png)
|
||||
|
||||
### 长格式 ###
|
||||
|
||||
所以,用了长格式后,你可以看到更详细的信息,以及在每行开头类似-rw-r--r-- 令人抓狂的标示。实际上,这只是一种组合,代替了所有有意义的信息。
|
||||
|
||||
![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-184829.png)
|
||||
|
||||
(File Name)就是文件的名称。(Modification time)是文件最后修改的时间。(Size) 用 byte 计量的文件大小。(Group) 是组的名称和拥有者一起形成文件权限。(Owner) 是文件拥有者的名称。最最重要的。。。
|
||||
|
||||
### 。。。文件权限 ###
|
||||
|
||||
文件权限在长格式每一行的开端都显得非常的杂乱。第一个字符代表文件类型。如果是 'd' , 意味着它是一个目录。如果是 '-' , 意味着它是一个一般文件。接下来的三个字符分别代表拥有者的 可读, 可写 ,可执行的权限。再接着三个字符表示组成员的享有的文件权限,而最后三个字符表示其他人对文件的享有权限。
|
||||
|
||||
例如,如果有个文件在长格式下显示为:-rw-r--r--, 这说明这是个普通文件(首字符 '-'), 拥有者享有可读可写权限,但是没有可执行权限,导致拥有者无法执行该文件(首字符'-'后'rw-'),用户组和其他用户只享有可读权限(你不难发现’r--'字段在后面出现了两次 。如果用户组是 'rwx' 而不是 'r-', 则意味着它们可读,可写,可执行文件)。
|
||||
|
||||
ls 的下个选项是 ls -la .. ,-a 它会列出所用文件包括隐藏文件,在通常情况下,隐藏文件是不可见的。用长格式列出当前工作目录下的父目录的所有文件。
|
||||
|
||||
### less ###
|
||||
|
||||
less 是一个可以显示你的文本文件的命令。举例来说,你要在 /etc 下找寻名为 os-release 的文本文件。你可以使用 ls /etc 成功实现,而现在你想要阅读它。
|
||||
|
||||
你只需要使用 less /etc/os-release。
|
||||
|
||||
![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-190252.png)
|
||||
|
||||
..就这样了。
|
||||
|
||||
你要如何控制 less 呢?
|
||||
|
||||
简单的, 你只需要动动键盘就行了!
|
||||
|
||||
less 一次只会显示一个页面的文本。往页面之前你需要按 **Page Up, 或者 'b'**。往页面之后你可以按**Page Don, 或者 space**。大写的**G**会跳转到文本的末尾,**1G**会跳转到文本的开端。**/字符**会在文本内搜索指定字符(例如,如果你输入 /suse ,它会找寻所有文本含有的 suse 并标记出来)。n 会重复执行你的搜索,**h**会显示所有的选项(h,haalp!)。
|
||||
译注:haalp !不懂求解释
|
||||
|
||||
![](https://news.opensuse.org/wp-content/uploads/2014/06/halp.jpg)
|
||||
|
||||
按q退出 less 命令。
|
||||
|
||||
### file ###
|
||||
|
||||
file 会显示文件的类型,是否是你要找的 ASCII 文本,还是 jpg 图片,bash 脚本等。让我们用 /etc/os-release 执行练习。
|
||||
|
||||
![](https://news.opensuse.org/wp-content/uploads/2014/06/Screenshot-30.-06.-2014-191402.png)
|
||||
|
||||
就这样,os-release 是一个 ASCII 文本文件。 请尝试其他文件,并观察结果。
|
||||
|
||||
下回见了,记住。。。
|
||||
|
||||
。。。一定要玩的开心啊!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.opensuse.org/2014/07/01/command-line-tuesdays-part-three/
|
||||
|
||||
译者:[Luoxcat](https://github.com/Luoxcat) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
@ -1,3 +1,4 @@
|
||||
@@ -1,63 +0,0 @@
|
||||
Linux基础,如何在命令行中查看目录的大小
|
||||
=====================================================================
|
||||
这是写给Liunx新用户的一系列文章中的第一篇,在这系列文章我将会写一些对新用户来说非常好用的**Linux基础命令**。
|
||||
@ -61,3 +62,4 @@ via: http://www.unixmen.com/linux-basics-find-size-directory-commands/
|
||||
译者:[cvsher](https://github.com/cvsher) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,26 @@
|
||||
利用终端(Terminal)在Debian/Ubuntu中设置默认浏览器
|
||||
================================================================================
|
||||
嘿,伙计们
|
||||
|
||||
在这篇文章中,我们将使用终端设置默认浏览器
|
||||
|
||||
虽然,可以很方便地使用浏览器主界面来设置为默认浏览器,但是有时,你需要远程做到这一点
|
||||
|
||||
要做到这一点,你只需简简单单的打开终端,然后执行下述的命令:
|
||||
```
|
||||
sudo update-alternatives --config x-www-browser
|
||||
```
|
||||
之后输入你想设置为默认的浏览器的号码,你就完成了!
|
||||
|
||||
真个过程截图如下:
|
||||
|
||||
![图片1](https://camo.githubusercontent.com/7eae55f5fac41634017c1fb5a8bd9cb634a86dc4/687474703a2f2f3138303031363938382e722e63646e37372e6e65742f77702d636f6e74656e742f75706c6f6164732f323031342f30372f6368616e67655f64656661756c745f62726f777365725f66726f6d5f7465726d696e616c5f64656269616e5f656e6f636b2e706e67)
|
||||
|
||||
你成功了吗?
|
||||
|
||||
---
|
||||
via: http://www.unixmen.com/quick-tip-set-default-browser-debianubuntu-using-terminal/
|
||||
|
||||
译者:译者ID 校对:校对者ID
|
||||
|
||||
本文由 LCTT 原创翻译,Linux中国 荣誉推出
|
@ -0,0 +1,109 @@
|
||||
5个让Cinnamon桌面环境完美运行在ubuntu上的方法
|
||||
=======================================================================
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/des.jpg)
|
||||
|
||||
**Cinnamon桌面环境最新稳定版本发行了,[ubuntu用户可以去安装使用了][1]**
|
||||
|
||||
在其安装后的基础上,我们可以做一些微调来拥有更棒的体验
|
||||
|
||||
你的ubuntu如果没有安装Cinnamon,你可以参照我们之前的文章进行安装
|
||||
|
||||
###更改Mint菜单图标###
|
||||
Mint菜单图标是Cinnamon的特色之一,它给予用户一种简单,快速,熟悉的方式来搜索,打开,组织应用程序,默认情况下,菜单使用启动程序项中的Linux
|
||||
Mint
|
||||
Logo。既然你是在ubuntu系统下使用它,而不是Mint,为什么不使用ubuntu熟悉的橙色朋友圈logo来替换原有的菜单图标呢?实现很简单
|
||||
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/min-menu.jpg)
|
||||
|
||||
想要改变Cinnamon菜单图标为ubuntu风格的,只需点击applet,选择‘config‘,在设置窗口,就会出现‘Use
|
||||
a custom icon‘,然后你就输入下面的路径来使用ubuntu logo了
|
||||
|
||||
/usr/share/icons/ubuntu-mono-dark/actions/24/package-supported.svg
|
||||
|
||||
你可以使用任何支持的图片类型,只需要在刚才的填写区域写入正确的图片路径,或者点击后面的方框来打开文件选择器,选择你要使用的图标
|
||||
|
||||
###尝试Cinnamon主题###
|
||||
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/cinnamon-themes-zukitwo.jpg)
|
||||
|
||||
和GNOME
|
||||
Shell一样,Cinnamon也支持自定义主题,我所说的主题并不只是应用程序的GTK主题和简单的窗口装饰,而是将面板,菜单,程序等等结合为一个整体的视觉风格
|
||||
|
||||
Cinnamon主题可以被浏览,下载甚至不需要离开桌面的就触手可及 —
|
||||
无需下载或者手动安装:打开Cinnamon Settings tool中的Appearance
|
||||
pane,然后选择‘Online Themes‘
|
||||
|
||||
下面是一些受欢迎的主题:
|
||||
|
||||
- [**Android Holo**][2] — Android 4.x style theme
|
||||
- [**Zukitwo**][3] — Sleek, stylish and light
|
||||
- [**Minty**][4] — Dark theme with bold green accents
|
||||
- [**Metro**][5] — Based on the visual style of Windows 8.
|
||||
|
||||
###找出你最喜欢的布局###
|
||||
|
||||
我们统一认为应用程序发射器永远只是固定地待在屏幕的一侧,但是Cinnamon并没有这样的顾虑,它可以让你重新设计最符合你的桌面布局
|
||||
|
||||
手动面板可以增加,编辑和移动,或选择三种预设的布局
|
||||
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/traditional.jpg)
|
||||
|
||||
打开`Settings > Panel > Layout Options > Panel Layout`,然后下面这几个中选择
|
||||
|
||||
- Traditional — 这是默认的布局,控制面板在屏幕的顶部
|
||||
- Flipped ——和Traditional一样,控制面板在屏幕顶部
|
||||
- Classic ——两个控制面板,一个在顶部,一个在底部
|
||||
|
||||
你需要注销或者重启Cinnamon才能生效
|
||||
|
||||
###添加面板小程序###
|
||||
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/weather-applet.png)
|
||||
|
||||
Cinnamon和GNOE
|
||||
Shell一样具有可扩展性,丰富的社区插件和扩展程序提供了额外的特性和功能,比如天气,系统监测,窗口管理工具等,这些都可以被浏览,安装并能从桌面直接启动
|
||||
|
||||
选择控制面板,右键点击要添加小程序,选择 ‘…Add Appls to the
|
||||
Panel‘,一些著名的小程序如下:
|
||||
|
||||
- [**Weather**][6] - does what it forecasts (ho ho)
|
||||
- [**Stark Menu**][7] - Clone of the Windows 7 Start Menu
|
||||
- [**Screenshot**][8] — Easy way to grab screenshots with delay
|
||||
|
||||
###改变日期的显示格式###
|
||||
|
||||
![](http://www.omgubuntu.co.uk/wp-content/uploads/2014/07/applet.jpg)
|
||||
|
||||
Cinnamon的时间日期程序很方便,它可以让你很容易就记住日期
|
||||
|
||||
但是它显示时间的默认格式是24小时制,但是我们很容易就能调整时钟格式
|
||||
|
||||
右击然后选择‘Configure‘,在设置窗口中出现“Use a custom date
|
||||
format“的选择框上打勾,或者使用下面的几种格式(复制粘帖粗体字段)
|
||||
|
||||
- **%B %e, %I:%M %p** (July 13, 7:19 PM)
|
||||
- **%m/%d/%Y** (07/13/2014)
|
||||
- **%l:%M %p** (7:19 PM)
|
||||
|
||||
改变立马生效,如果中途发生了错误,你可以取消自定义时间格式选项恢复到默认状态
|
||||
|
||||
###更多###
|
||||
|
||||
在Cinnamon桌面环境中只有少部分定制选择供使用者使用,但是我们认为上述所讲的调整是不断探索的很好跳板,通过下面的评论栏让我们了解你最喜欢的调整是什么吧,你可以通过Facebook或者Google+
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
via: http://www.omgubuntu.co.uk/2014/07/5-things-installing-cinnamon-ubuntu
|
||||
|
||||
译者:[su-kaiyao](https://github.com/su-kaiyao) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.omgubuntu.co.uk/2014/07/new-cinnamon-ubuntu-14-04-ppa-stable
|
||||
[2]:http://cinnamon-spices.linuxmint.com/themes/view/122
|
||||
[3]:http://cinnamon-spices.linuxmint.com/themes/view/219
|
||||
[4]:http://cinnamon-spices.linuxmint.com/themes/view/25
|
||||
[5]:http://cinnamon-spices.linuxmint.com/themes/view/188
|
||||
[6]:http://cinnamon-spices.linuxmint.com/applets/view/17
|
||||
[7]:http://cinnamon-spices.linuxmint.com/applets/view/168
|
||||
[8]:http://cinnamon-spices.linuxmint.com/applets/view/35
|
@ -0,0 +1,111 @@
|
||||
How to check RPM package dependencies on Fedora, CentOS or RHEL
|
||||
教你如何在Fedora,CentOS,RHEL中检查RPM包的依赖性
|
||||
================================================================================
|
||||
A typical RPM package on Red Hat-based systems requires all its dependent packages be installed to function properly.
|
||||
For end users, the complexity of such RPM dependency is hidden by package managers (e.g., yum or DNF) during package install/upgrade/removal process. However, if you are a sysadmin or a RPM maintainer, you need to be well-versed in RPM dependencies to maintain run-time environment for the system or roll out up-to-date RPM specs.
|
||||
我们都知道,在基于红帽的Linux系统中,一个RPM包,需要把先将它依赖的其他包安装好才能正常的工作。对于终端用户,RPM的安装、更新、删除中存在的依赖关系已经被工具透明化了(如 yum或 DNF等)。但如果你是系统管理员或者RPM包的管理员,你需要对RPM包中存在的依赖关系以及时更新、删除适当的包来保证系统的正常运行。
|
||||
In this tutorial, I am going to show **how to check RPM package dependencies**. Depending on whether a package is installed or not, there are several ways to identify its RPM dependencies.
|
||||
在本教程中,我将教大家**如何检查RPM包的依赖关系**无论这个包是否已经安装进操作系统中,我们都有一些办法来检查它们的依赖性。
|
||||
### Method One ###
|
||||
### 方法一 ###
|
||||
One way to find out RPM dependencies for a particular package is to use rpm command. The following command lists all dependent packages for a target package.
|
||||
使用RPM命令可以列出目标包所依赖的所有包,如下:
|
||||
$ rpm -qR <package-name>
|
||||
|
||||
![](https://farm6.staticflickr.com/5512/14659620723_4a36970efc_o.png)
|
||||
|
||||
Note that this command will work only if the target package is already **installed**. If you want to check package dependencies for any **uninstalled** package, you first need to download the RPM package locally (no need to install it).
|
||||
注意,这种方法只适用于**已安装**的包。如果你需要检查一个**未安装**包的依赖关系,你需要把这个包先下载到本地来。
|
||||
To download a RPM package without installing it, use a command-line utility called `yumdownloader`. Install yumdownloader as follows.
|
||||
对于已在本地但未安装的包,可以使用叫做'yumdownloader'的工具,下面我们先安装yumdownloader:
|
||||
$ sudo yum install yum-utils
|
||||
|
||||
Now let's check RPM depenencies of a uninstalled package (e.g., tcpdump). First download the package in the current folder with yumdownloader:
|
||||
现在我们来检查一个未安装的RPM包的依赖关系(本列使用 tcpdump)。首先,我们使用yumdownloader把tcpdump的RPM包下载下来
|
||||
$ yumdownloader --destdir=. tcpdump
|
||||
|
||||
Then use rpm command with "-qpR" options to list dependencies of the downloaded package.
|
||||
然后再使用 "-qpR"参数显示该包的依赖关系。
|
||||
# rpm -qpR tcpdump-4.4.0-2.fc19.i686.rpm
|
||||
|
||||
### Method Two ###
|
||||
### 方法二 ###
|
||||
You can also get a list of dependencies for a RPM package using repoquery tool. repoquery works whether or not a target package is installed. This tool is included in yum-utils package.
|
||||
你可以使用repoquery工具来罗列包的依赖关系,这个工具包含在yum-utils中。
|
||||
$ sudo yum install yum-utils
|
||||
|
||||
To show all required packages for a particular package:
|
||||
显示目标包所依赖的包:
|
||||
$ repoquery --requires --resolve <package-name>
|
||||
|
||||
![](https://farm3.staticflickr.com/2935/14453103778_05db349b19_o.png)
|
||||
|
||||
For repoquery to work, your computer needs network connectivity since repoquery pulls information from Yum repositories.
|
||||
为让repoquery正常的工作,需要保持网络的畅通,应为repoquery需要在Yum库中查找信息。
|
||||
### Method Three ###
|
||||
### 方法三 ###
|
||||
The third method to show RPM package dependencies is to use rpmreaper tool.
|
||||
Originally this tool is developed to clean up unnecessary packages and their dependencies on RPM-based systems.
|
||||
rpmreaper has an ncurses-based intuitive interface for browsing installed packages and their dependency trees.
|
||||
第三个方法是使用rpmreaper工具。这个工具本来是用作清理系统中无用以及它们所依赖的包,rpmreaper有很直观的界面来展示已安装的包和它们依赖关系的树形图。
|
||||
To install rpmrepater, use yum command. On CentOS, you need to [set up EPEL repo][1] first.
|
||||
安装rpmrepater,在CentOS中,你需要先[设置好EPEL库][1]
|
||||
$ sudo yum install rpmreaper
|
||||
|
||||
To browser RPM dependency trees, simply run:
|
||||
只需运行rpmreaper就可以看到RPM包的依赖关系:
|
||||
$ rpmreaper
|
||||
|
||||
![](https://farm4.staticflickr.com/3838/14636456131_99a3c26945_z.jpg)
|
||||
|
||||
The rpmrepater interface will show you a list of all installed packages. You can navigate the list using up/down arrow keys.
|
||||
Press "r" on a highlighted package to show its dependencies.
|
||||
You can expand the whole dependency tree by recursively pressing "r" keys on individual dependent packages.
|
||||
The "L" flag indicates that a given package is a "leaf", meaning that no other package depends on this package.
|
||||
The "o" flag implies that a given package is in the middle of dependency chain.
|
||||
Pressing "b" on such a package will show you what other packages require the highlighted package.
|
||||
rpmrepater会向用户显示已安装包的列表,你可以使用上/下箭头来滚动屏幕。
|
||||
你可以在指定包上使用"r"键来显示其依赖关系,循环在指定包上按下"r"键可以展示出余下的信息。
|
||||
"L"标志的意思是说这个包是一片“孤叶”,意思说说没有任何包依赖它。
|
||||
"o"标志是说这个包是整个依赖链的中间部分。
|
||||
按下"b"键会显示其他依赖于该包的其他包。
|
||||
### Method Four ###
|
||||
### 方法四 ###
|
||||
Another way to show package dependencies on RPM-based systems
|
||||
is to use rpmdep which is a command-line tool for generating a full package dependency graph of
|
||||
any installed RPM package. The tool analyzes RPM dependencies, and produce partially ordered package lists from
|
||||
topological sorting. The output of this tool can be fed into dotty graph visualization tool
|
||||
to generate a dependency graph image.
|
||||
还有一个办法是使用rpmdep工具,rpmdep是一个命令行工具,可以显示已安装包的完整包依赖关系图。该工具会分析RPM包的依赖性,从完整的排完序
|
||||
的拓扑图中摘取部分包的信息,形成列表展示给用户。该工具的输出结果可以直接使用到Dotty(可视化展示工具)中去。
|
||||
To install rpmdep and dotty on Fedora:
|
||||
在Fedora中安装rpmdep和dotty:
|
||||
$ sudo yum install rpmorphan graphviz
|
||||
|
||||
To install the same tools on CentOS:
|
||||
在CentOs中安装:
|
||||
$ wget http://downloads.sourceforge.net/project/rpmorphan/rpmorphan/1.14/rpmorphan-1.14-1.noarch.rpm
|
||||
$ sudo rpm -ivh rpmorphan-1.14-1.noarch.rpm
|
||||
$ sudo yum install graphviz
|
||||
|
||||
To generate and plot a dependency graph of a particular installed package (e.g., gzip):
|
||||
生成包依赖的拓扑关系图:
|
||||
$ rpmdep.pl -dot gzip.dot gzip
|
||||
$ dot -Tpng -o output.png gzip.dot
|
||||
|
||||
![](https://farm4.staticflickr.com/3918/14453050980_53de4e8277_z.jpg)
|
||||
|
||||
So far in this tutorial, I demonstrate several ways to check what other packages a given RPM package relies on.
|
||||
If you want to know more about .deb package dependencies for Debian-based systems,
|
||||
you can refer to [this guide][2] instead.
|
||||
教程到这个地方,我们用到了几种办法来检查包的依赖关系。如果您想知道如何在居于Debian的系统中检查.deb的包依赖关系,请阅读另外一篇[文档][2]
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://xmodulo.com/2014/07/check-rpm-package-dependencies-fedora-centos-rhel.html
|
||||
|
||||
译者:[nd0104](https://github.com/nd0104) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html
|
||||
[2]:http://xmodulo.com/2013/07/how-to-check-package-dependencies-on-ubuntu-or-debian.html
|
@ -0,0 +1,182 @@
|
||||
装X指南--在Linux上装个Android 4.4玩玩
|
||||
================================================================================
|
||||
**Android (x86)**项目致力于移植Android系统到X86处理器上,使用户可以更容易的在任何电脑上安装Android。他们通过使用android源码,增加补丁来使Android能够在X86处理器下工作,不单只是笔记本电脑和平板电脑。
|
||||
|
||||
![Install Android 4.4 KitKat in Linux](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-4.4-KitKat.jpg)
|
||||
在Linux安装Android 4.4 KitKat
|
||||
|
||||
几天前,项目组发布了最新的“Android KitKat 4.4 RC2”,下面,我将说明如何在VirtualBox上的安装过程,不过有一个小问题,安装完成Android后鼠标指针不工作了,我猜,如果你根据本教程将它安装成主系统,这个鼠标应该可以工作,否则我们只能使用键盘了。
|
||||
|
||||
### 阶段 1: 在linux上安装VirtualBox ###
|
||||
|
||||
**1.** 大多数的Linux发行版中,官方源都有VirtualBox,例如在Ubuntu中安装
|
||||
|
||||
$ sudo apt-get install virtualbox
|
||||
|
||||
其他的Linux发行版,像**RHEL, CentOS and Fedora**,请参考下面文章来安装VirtualBox
|
||||
|
||||
- [Install VirtualBox in RHEL, CentOS and Fedora][1]
|
||||
|
||||
### 阶段 2: 下载并在VirtualBox中安装Android 4.4 kitkat ###
|
||||
|
||||
**2.** 这步挺简单的,只是需要去[androud Sourceforge.net][2]项目下载 **Android 4.4 x86 Kit Kat**文件
|
||||
|
||||
**3.** 为了安装**Android 4.4 kitkat**,首先,你需要引导刚刚下载.iso文件,启动 **VirtualBox**,创建一个新的虚拟机,然后跟着下面图片设置:
|
||||
|
||||
![Create New Virtual Machine](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-01.png)
|
||||
创建新的虚拟设备
|
||||
|
||||
**4.** 接下来,它会询问你新设备的内存大小,Android 4.4 kikat需要1G内存才能完美运行,但是由于我的电脑只有1G内存,我只能选择512MB。
|
||||
|
||||
![Set Memory to New Machine](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-02.png)
|
||||
设置内存
|
||||
|
||||
**5.** 选择“现在创建虚拟硬盘”(“Create a virtual hard drive now”)创建一个新的硬盘
|
||||
|
||||
![Create Virtual Hard Drive](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-03.png)
|
||||
创建虚拟硬盘
|
||||
|
||||
**6.** 它现在会询问你新虚拟硬盘的类型,选择**VDI**
|
||||
|
||||
![Select Hard Drive Type](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-04.png)
|
||||
选择硬盘驱动类型
|
||||
|
||||
![Select Storage Type](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-05.png)
|
||||
选择存储方式
|
||||
|
||||
**7.** 现在设置虚拟硬盘大小,你可以设置任何大小,但是除了未来安装Apps的空间,至少系统正确地安装需要**4G**。
|
||||
|
||||
![Set Size for Virtual Drive](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-32.png)
|
||||
设置虚拟硬盘大小
|
||||
|
||||
**8.** 现在你的新虚拟设备创建好了,可以引导下载的**.iso**文件了,右键刚刚创建的虚拟机,**设置** -> **存储** ,如下图,设置**android 4.4 kitkat RC2**的镜像文件。
|
||||
|
||||
![Select Android KitKat ISO](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-06.png)
|
||||
选择Android KitKat ISO
|
||||
|
||||
**9.** Click on **OK**, and start the machine to boot the .iso image, choose “**Installation**” to start installing the system on the virtual machine.
|
||||
|
||||
![Select to Install Android Kit Kat](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-07.png)
|
||||
选择 Install Android Kit Kat
|
||||
|
||||
**10.** 请选择一个分区来安装Android-x86
|
||||
|
||||
![Select Partition Drive](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-08.png)
|
||||
选择 Partition Drive
|
||||
|
||||
**11.** 如下图,你可以看见cfdisk界面,cfdisk是一个分区工具,我们将要使用它来创建一个新的硬盘分区,用来安装Android 4.4,现在,点击 “**New**”
|
||||
|
||||
![Create New Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-09.png)
|
||||
创建新分区
|
||||
|
||||
**12.** 选择“**Primary**”作为分区类型
|
||||
|
||||
![Choose Primary Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-10.png)
|
||||
选择主分区
|
||||
|
||||
**13.** 接下来,设置分区大小
|
||||
|
||||
![Select Size of Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-11.png)
|
||||
设置分区大小
|
||||
|
||||
**14.** 现在我们必须给硬盘创建新的引导使其能够写入新的分区表,点击“**Bootable**”给引导标记新的分区,你不会注意到有任何变化,但是引导标记将会自己给选中分区。
|
||||
|
||||
![Make Partition Bootable](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-12.png)
|
||||
制作分区引导
|
||||
|
||||
**15.** 完成之后,点击“**Write**”对硬盘写入新的分区。
|
||||
|
||||
![Apply Changes to Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-13.png)
|
||||
应用新分区
|
||||
|
||||
**16.** 它会询问你是否确认,输入“**yes**”并点击**Enter**
|
||||
|
||||
![Confirm Partition Changes](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-14.png)
|
||||
确认分区改变
|
||||
|
||||
**17.** 现在我们的新硬盘已经创建,点击 **Quit** 你就可以看来类似下图的显示,选中刚刚创建的用来安装Android 的分区,点击**Enter**
|
||||
|
||||
![Choose Partition to Install Android](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-15.png)
|
||||
选择分区安装Android
|
||||
|
||||
**18.** 选择“**ext3**”作为硬盘文件系统并格式化
|
||||
|
||||
![Select Ext3 Partition Type](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-16.png)
|
||||
选择Ext3分区类型
|
||||
|
||||
![Format Partition](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-17.png)
|
||||
格式化分区
|
||||
|
||||
**19.** 它将会询问你时候需要安装GRUB启动器,当然选择**Yes**,如果不这样,你将不能启动新系统,所以选择**Yes**并点击**Enter**
|
||||
|
||||
![Install Boot Loader GRUB](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-18.png)
|
||||
安装引导加载器 GRUB
|
||||
|
||||
**20.** 最后,它会问你**/system**分区是否能写入,选择yes,它会在安装完系统后帮助你减少很多麻烦
|
||||
|
||||
![Make Partition Writeable](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-19.png)
|
||||
使分区能写入
|
||||
|
||||
**21.** 安装将会开始它的任务,安装器结束工作后,选择重启,在我做测试的时候,“Run-Android x86”不起作用,所以你不得不重启。
|
||||
|
||||
![Android Kit Kat Installation](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-20.png)
|
||||
Android Kit kat 安装完成
|
||||
|
||||
**22.** 我们已经安装完成**Android 4.4 KitKat RC2**,问题是VirtualBox将会继续引导**.iso**镜像文件而不是虚拟设备,所以为了修正这个问题,**设置** -> **存储** ->移除iso文件
|
||||
|
||||
![Remove Android Kit Kat Image](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-21.png)
|
||||
移除Android Kit Kat 镜像
|
||||
|
||||
**23.** 你可以启动你的虚拟设备,运行你的Android系统了
|
||||
|
||||
![Start Android Kit Kat System](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-23.png)
|
||||
启动Android Kit Kat 系统
|
||||
|
||||
![Android Splash Screen](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-24.png)
|
||||
Android标志界面
|
||||
|
||||
**24.** 使用**Android**之前,你需要完成一个向导来配置一些事。你会看见如下屏幕,现在问题是,鼠标不能在**android 4.4 kitkat**工作,这意味着我们需要展示我们键盘的高超技巧了。首先,选择语言,你需要使用键盘**上**键和**下**键,到下一步,需要使用**右**键移动光标,选择**Enter**
|
||||
|
||||
![Android Welcome Screen](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-31.png)
|
||||
Android 欢迎界面
|
||||
|
||||
![Select WiFi Network](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-25.png)
|
||||
选择WiFi网络
|
||||
|
||||
![Create Android Google Account](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-26.png)
|
||||
创建Android Google账户
|
||||
|
||||
![Sign in Google Account](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-27.png)
|
||||
注册Google账户
|
||||
|
||||
![Set Date and Time](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-28.png)
|
||||
设置日期和时间
|
||||
|
||||
![Enter Your Details](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-29.png)
|
||||
输入你的信息
|
||||
|
||||
![Android 4.4 Kit Kat Home Screen](http://www.tecmint.com/wp-content/uploads/2014/07/Install-Android-Kit-Kat-in-Linux-30.jpeg)
|
||||
Android 4.4 Kit Kat 主界面
|
||||
|
||||
|
||||
安装 **Android x86**好处颇多,如果你没有智能手机而又想早点使用**Play Store**apps,怎么不试试安装android x86呢?结果怎样?你有想过android可以成为一个针对桌面功能的**实时操作系统**?
|
||||
|
||||
----------
|
||||
|
||||
![](http://1.gravatar.com/avatar/1374d0df45065e405e1b059d2fca04ff?s=80&d=blank&r=G)
|
||||
|
||||
[Hanny Helal][3]
|
||||
|
||||
2010年,成为Linux和自由软件用户,已为自由软件贡献多个项目
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.tecmint.com/install-android-kitkat-in-linux/
|
||||
|
||||
译者:[Vic___](http://www.vicyu.net) 校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://www.tecmint.com/install-virtualbox-on-redhat-centos-fedora/
|
||||
[2]:http://sourceforge.net/projects/android-x86/
|
||||
[3]:http://www.tecmint.com/
|
Loading…
Reference in New Issue
Block a user