diff --git a/translated/tech/20170210 How to perform search operations in Vim.md b/published/20170210 How to perform search operations in Vim.md similarity index 61% rename from translated/tech/20170210 How to perform search operations in Vim.md rename to published/20170210 How to perform search operations in Vim.md index 48a0e88d11..665bd4ad06 100644 --- a/translated/tech/20170210 How to perform search operations in Vim.md +++ b/published/20170210 How to perform search operations in Vim.md @@ -1,56 +1,39 @@ - -如何在Vim中实现搜索 +超酷的 Vim 搜索技巧 ================================ -### 本页中 - -1. [自定义你的搜索][5] - - [1\.1\.高亮搜索结果][1] - - [1\.2\.使搜索不区分大小写][2] - - [1\.3\.智能大小写搜索][3] - - [1\.4\.递进搜索][4] - -2. [其他很酷的在Vim中搜索的小技巧][6] - -3. [结语][7] - -尽管目前我们已经[涉及][8] Vim 的多种特性,但此编辑器的特征集如此庞大,不管我们学习多少,似乎仍然远远不足。承接我们的 Vim 教程系列,本文我们将讨论 Vim 提供的多种搜索技术。 +尽管目前我们已经[涉及][8] Vim 的多种特性,但此编辑器的特性集如此庞大,不管我们学习多少,似乎仍然远远不足。承接我们的 Vim 教程系列,本文我们将讨论 Vim 提供的多种搜索技术。 不过在此之前,请注意文中涉及到的所有的例子、命令、指令均是在 Ubuntu 14.04,Vim 7.4 下测试的。 ### Vim 中的基础搜索操作 -当你在 Vim 中打开一个文件并且想要搜索一个特定的单词或模板,第一步你必须要先从插入模式中退出(如果你正处于插入模式中)。之后输入 ‘**/**’(不带引号)并紧接着输入你要搜索的单词或模板。 +当你在 Vim 中打开一个文件并且想要搜索一个特定的单词或模板,第一步你必须要先按下 `Esc` 键从插入模式中退出(如果你正处于插入模式中)。之后输入 `/` 并紧接着输入你要搜索的单词或搜索模式。 -例如,如果你想要搜索的单词是 ’linux',下图显示的就是在 Vim 窗口底部的搜索命令: +例如,如果你想要搜索的单词是 `linux`,下图显示的就是在 Vim 窗口底部的搜索命令: [![Search for words in vim](https://www.howtoforge.com/images/perform-search-operations-in-vim/vim-basic-search.png) ][9] 敲击回车键之后,你会看到 Vim 会将光标停留在从光标在插入模式中的位置开始,找到的包含此单词的第一行。如果你刚刚打开一个文件并且立即开始了搜索操作,搜索将从文件的首行开始。 -如果想要移动到下一处包含被搜索单词位置,按 ‘**n**' 键。当你遍历完所有被搜索模板所在之处,继续按 ’**n**' 键 Vim将重复搜索操作,光标将回到第一次搜索结果出现位置。 +如果想要移动到下一处包含被搜索单词位置,按 `n` 键。当你遍历完所有被搜索模板所在之处,继续按 `n` 键 Vim 将重复搜索操作,光标将回到第一次搜索结果出现位置。 [ ![Move to next search hit](https://www.howtoforge.com/images/perform-search-operations-in-vim/vim-search-end.png) ][10] -在遍历搜索结果时,如果你想要回到上一匹配处,按 '**N**' (shift + n)。同时,值得注意的是不管在什么时候,你都可以输入 '**ggn**' 来跳转到第一个匹配处,或者 ’**GN**' 来跳转到最后一处。 +在遍历搜索结果时,如果你想要回到上一匹配处,按 `N` (即 `shift` + `n`)。同时,值得注意的是不管在什么时候,你都可以输入 `ggn` 来跳转到第一个匹配处,或者 `GN` 来跳转到最后一处。 -当你恰好在文件的底部,而且想要逆向搜索的情况下,使用 **?** 代替 **/** 来开始搜索。下图是一个例子: +当你恰好在文件的底部,而且想要逆向搜索的情况下,使用 `?` 代替 `/` 来开始搜索。下图是一个例子: [![search backwards](https://www.howtoforge.com/images/perform-search-operations-in-vim/vim-search-back.png)][11] ### 自定义你的搜索 -### 1\. 高亮搜索结果 +#### 1、 高亮搜索结果 -尽管通过 ‘n' 或 'N' 从被搜索单词 / 模板的匹配处跳转到另一处很简单,但是如果匹配处能够高亮就更加人性化了。例如,请看下附截图: +尽管通过 `n` 或 `N` 从被搜索单词或模式的匹配处跳转到另一处很简单,但是如果匹配处能够高亮就更加人性化了。例如,请看下附截图: [![Search Highlighting in VIM](https://www.howtoforge.com/images/perform-search-operations-in-vim/vim-highlight-search.png) ][12] -这可以通过设置 ’hlsearch‘ 变量来实现,例如在普通/命令行模式中执行下述命令: +这可以通过设置 `hlsearch` 变量来实现,例如在普通/命令行模式中执行下述命令: ``` :set hlsearch @@ -58,47 +41,49 @@ [![set hlsearch](https://www.howtoforge.com/images/perform-search-operations-in-vim/vim-set-hlsearch.png) ][13] -### 2\. 使搜索不区分大小写 +#### 2、使搜索不区分大小写 -在 Vim 中进行搜索默认是区分大小写的。这就意味着如果我要搜索 ’linux',那么 ‘Linux’ 是不会匹配的。然而,如果这不是你想要的搜索方式,你可以使用如下命令来使搜索变得不区分大小写: +在 Vim 中进行搜索默认是区分大小写的。这就意味着如果我要搜索 `linux`,那么 `Linux` 是不会匹配的。然而,如果这不是你想要的搜索方式,你可以使用如下命令来使搜索变得不区分大小写: ``` :set ignorecase ``` -所以当我设置 ignorecase 变量后再使用前边提到的命令,搜索 'linux',那么 ’Linux‘ 所在处也会被高亮。 +所以当我设置 `ignorecase` 变量后再使用前边提到的命令,搜索 `linux`,那么 `Linux` 所在处也会被高亮。 [![search case-insensitive](https://www.howtoforge.com/images/perform-search-operations-in-vim/vim-search-case.png) ][14] -### 3\. 智能大小写搜索 +#### 3、智能大小写搜索 -Vim 提供了一个功能,只有当要搜索的单词 / 模板包含大写字母时,编辑器才会区分大小写。要想实现这种功能,必须先设置 ‘ignorecase',再接着设置 ‘smartcase' 变量。 +Vim 提供了一个功能,只有当要搜索的单词 / 模板包含大写字母时,编辑器才会区分大小写。要想实现这种功能,必须先设置 `ignorecase`,再接着设置 `smartcase` 变量。 ``` :set ignorecase :set smartcase ``` -例如,如果一个文件中既包含 ’LINUX‘ 也包含 ’linux',在开启智能大小写搜索功能时,如果使用 ‘/LINUX' 进行搜索,只有单词LINUX处会被搜到。反之,如果搜索 ’/linux',那么不论大小写的搜索结果都会被匹配。 -### 4\. 递进搜索 +例如,如果一个文件中既包含 `LINUX` 也包含 `linux`,在开启智能大小写搜索功能时,如果使用 `/LINUX` 进行搜索,只有单词 `LINUX` 处会被搜到。反之,如果搜索 `/linux`,那么不论大小写的搜索结果都会被匹配。 + +#### 4、递进搜索 就如谷歌一样,随着你输入查询字串(字串随你每输入一个字符不断更新)显示不同的搜索结果,Vim 也同样提供了递进搜索。要想使用这种特性,你必须在搜索前执行下述命令: ``` :set incsearch ``` -### 一些很酷的在Vim中搜索的小技巧 + +### 一些很酷的在 Vim 中搜索的小技巧 你可能会发现还有一些其他的与搜索相关的小技巧很有用。 -开始吧!如果你想要搜索一个文件中的一个单词,但是又不想输入它,你只需要将你的光标移到这个单词下然后按 ***** (或者 **shift + 8**)。如果你想要启动一次部分搜索(例如:同时搜索 ‘in' 和 ’terminal'),那你需要将光标移到到单词(在本例中, ‘in')下,然后通过在键盘上按 **g*** (按一次 ’g'然后不断按 * )。 +开始吧!如果你想要搜索一个文件中的一个单词,但是又不想输入它,你只需要将你的光标移到这个单词下然后按 `*` (或者 `shift` + `8`)。如果你想要启动一次部分搜索(例如:同时搜索 `in` 和 `terminal`),那你需要将光标移到到单词(在本例中, `in`)下,然后通过在键盘上按 `g*` (按一次 `g` 然后不断按 `*` )。 -注意:按 **#** 或者 **g#** 如果你想要逆向搜索。 +注意:如果你想要逆向搜索,按 `#` 或者 `g#` 。 -下一个,只要你想要,你可以获得所有被搜索单词 / 模板匹配处所在的行和行号的一个列表。这可以在你开始搜索后通过按 **[I** 来实现。如下图是一个列表结果如何在 Vim 窗口底部被分组和显示的例子: +下一个,只要你想要,你可以获得所有被搜索单词或模式匹配处所在的行和行号的一个列表。这可以在你开始搜索后通过按 `[I` 来实现。如下图是一个列表结果如何在 Vim 窗口底部被分组和显示的例子: [![grouped search results](https://www.howtoforge.com/images/perform-search-operations-in-vim/vim-results-list.png) ][15] -接下来,你可能已经得知,Vim 默认是环形搜索的,意味着在到达文件结尾处(或者被搜索单词的最后一处匹配)时,如果继续按 “搜索下一个”会将光标再次带回第一处匹配处。如果你希望禁止环形搜索,可以使用如下命令: +接下来,你可能已经得知,Vim 默认是环形搜索的,意味着在到达文件结尾处(或者被搜索单词的最后一处匹配)时,如果继续按 “搜索下一个” 会将光标再次带回第一处匹配处。如果你希望禁止环形搜索,可以使用如下命令: ``` :set nowrapscan @@ -109,9 +94,10 @@ Vim 提供了一个功能,只有当要搜索的单词 / 模板包含大写字 ``` :set wrapscan ``` -最后,假设你想要对文件中已经存在的单词做一点小小的修改,然后对修改后的单词执行搜索操作,一种方法是输入 **/** 与要搜索的单词。但是如果这个单词又长又复杂,那么可能需要一点时间来输入它。 -一个简单的办法是将光标移到你想要略微修改的单词下,按 ‘/' 之后再按 Ctrl - r 最后按 Ctrl - w。这个在光标下的单词不仅仅会被拷贝,也会被复制到 ’/' 后,允许你对它进行修改并且继续进行搜索操作。 +最后,假设你想要对文件中已经存在的单词做一点小小的修改,然后对修改后的单词执行搜索操作,一种方法是输入 `/` 与要搜索的单词。但是如果这个单词又长又复杂,那么可能需要一点时间来输入它。 + +一个简单的办法是将光标移到你想要略微修改的单词下,按 `/` 之后再按 `Ctrl` + `r` 最后按 `Ctrl` + `w`。这个在光标下的单词不仅仅会被拷贝,也会被复制到 `/` 后,允许你对它进行修改并且继续进行搜索操作。 如果想要获得更多小技巧(包括如何使用鼠标来使在 Vim 中的操作变得简单),请前往 [Vim 官方文档][16]。 @@ -127,7 +113,7 @@ via: https://www.howtoforge.com/tutorial/perform-search-operations-in-vim/ 作者:[Himanshu Arora][a] 译者:[xiaow6](https://github.com/xiaow6) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 diff --git a/translated/tech/20170213 How to Auto Execute CommandsScripts During Reboot or Startup.md b/published/20170213 How to Auto Execute CommandsScripts During Reboot or Startup.md similarity index 95% rename from translated/tech/20170213 How to Auto Execute CommandsScripts During Reboot or Startup.md rename to published/20170213 How to Auto Execute CommandsScripts During Reboot or Startup.md index 6e303bd4e9..1595d8a91b 100644 --- a/translated/tech/20170213 How to Auto Execute CommandsScripts During Reboot or Startup.md +++ b/published/20170213 How to Auto Execute CommandsScripts During Reboot or Startup.md @@ -32,22 +32,26 @@ 然后在这个文件底部添加脚本。 -下图说明如何分别使用 **cron** 任务和 **rc.local** 运行两个示例脚本(`/home/gacanepa/script1.sh` 和 `/home/gacanepa/script2.sh`)。 +下图说明如何分别使用 cron 任务和 rc.local 运行两个示例脚本(`/home/gacanepa/script1.sh` 和 `/home/gacanepa/script2.sh`)。 + +script1.sh: -script1.sh: ``` #!/bin/bash DATE=$(date +'%F %H:%M:%S') DIR=/home/gacanepa echo "Current date and time: $DATE" > $DIR/file1.txt ``` -script2.sh: + +script2.sh: + ``` #!/bin/bash SITE="Tecmint.com" DIR=/home/gacanepa echo "$SITE rocks... add us to your bookmarks." > $DIR/file2.txt ``` + [ ![启动时执行 Linux 脚本](http://www.tecmint.com/wp-content/uploads/2017/02/Run-Linux-Commands-at-Startup.png) ][3] @@ -65,7 +69,7 @@ $ chmod +x /home/gacanepa/script2.sh 要在登录或注销时执行脚本,分别需要使用 `~.bash_profile` 和 `~.bash_logout` 文件。多数情况下,后者需要手动创建。在每个文件的底部,添加调用脚本代码,如前面例中所示,就可以实现这个功能。 -##### 总结 +### 总结 本文主要介绍如何在启动、登录以及注销系统时执行脚本。如果你有其他的方法可以补充,请使用下面的评论表给我们指出,我们期待您的回应! diff --git a/published/20170213 Orange Pi as Time Machine Server.md b/published/20170213 Orange Pi as Time Machine Server.md new file mode 100644 index 0000000000..141e576311 --- /dev/null +++ b/published/20170213 Orange Pi as Time Machine Server.md @@ -0,0 +1,145 @@ +使用 Orange Pi 搭建 Time Machine 服务器 +================================= + +![Orange Pi as Time Machine Server](https://i1.wp.com/piboards.com/wp-content/uploads/2017/02/OPiTM.png?resize=960%2C450) + +我的工作之一是为各类家用计算机安排进行自动备份,包括存放重要数据的一组 Mac 计算机。我决定使用运行 [Armbian Linux][4] 的便宜的 [Orange Pi][3] 做实验,目的是希望 [Time Machine][5] 可以通过网络使用挂载在 Orange Pi 主板上的 USB 驱动器。在这种情况下,我找到并成功地安装了 Netatalk。 + +[Netatalk][6] 是一个用作苹果文件服务器的开源软件。通过 [Avahi][7] 和 Netatalk 配合运行,你的 Mac 设备能够识别网络上的 Orange Pi 设备,甚至会将 Orange pi 设备当作 “Mac” 类型的设备。这使得你能够手动连接到该网络设备,更重要的是使得 Time Machine 能够发现并使用远程驱动器。如果你想在 Mac 上设置类似的备份机制,下面的指南也许能够帮到你。 + +### 准备工作 + +为了配置该 USB 驱动器,我首先尝试了 HFS+ 格式文件系统,不幸的是我没能成功写入。所以我选择创建一个 EXT4 文件系统,并确保用户 `pi` 有读写权限。Linux 有很多格式化磁盘的方法,但是我最喜欢(而且推荐)的仍然是 [gparted][8]。由于 gparted 已经集成在 Armbian 桌面了,所以我直接使用了该工具。 + +我需要当 Orange Pi 启动或者 USB 驱动连接的时候,这个设备能够自动挂载到相同的位置。于是我创建了一个目录(`timemachine`)用于挂载:在其下新建一个 `tm` 目录用于真正的备份路径,并将 `tm` 的所有者更改为用户 `pi`。 + +``` +cd /mnt +sudo mkdir timemachine +cd timemachine +sudo mkdir tm +sudo chown pi:pi tm +``` + +下一步,我打开一个终端并编辑 `/etc/fstab` 文件。 + +``` +sudo nano /etc/fstab +``` + +并在该文件末尾添加了一行我的设备信息(根据我的设备情况,设置为 `sdc2`): + +``` +/dev/sdc2 /mnt/timemachine ext4 rw,user,exec 0 0 +``` + +你需要通过命令行预装一些包,可能其中一些已经安装在你的系统上了: + +``` +sudo apt-get install build-essential libevent-dev libssl-dev libgcrypt11-dev libkrb5-dev libpam0g-dev libwrap0-dev libdb-dev libtdb-dev libmysqlclient-dev avahi-daemon libavahi-client-dev libacl1-dev libldap2-dev libcrack2-dev systemtap-sdt-dev libdbus-1-dev libdbus-glib-1-dev libglib2.0-dev libio-socket-inet6-perl tracker libtracker-sparql-1.0-dev libtracker-miner-1.0-dev hfsprogs hfsutils avahi-daemon +``` + +### 安装并配置 Netatalk + +下一步是下载 Netatalk,解压下载的文件,然后切换到 Netatalk 目录: + +``` +wget https://sourceforge.net/projects/netatalk/files/netatalk/3.1.10/netatalk-3.1.10.tar.bz2 +tar xvf netatalk-3.1.10.tar.bz2 +cd netatalk-3.1.10 +``` + +然后需要顺序执行 `./configure`,`make`,`make install` 命令安装软件。在 netatalk-3.1.10 目录中执行 如下的 `./configure` 命令,这个命令需要花点时间才能执行完。 + +``` +./configure --with-init-style=debian-systemd --without-libevent --without-tdb --with-cracklib --enable-krbV-uam --with-pam-confdir=/etc/pam.d --with-dbus-daemon=/usr/bin/dbus-daemon --with-dbus-sysconf-dir=/etc/dbus-1/system.d --with-tracker-pkgconfig-version=1.0 +``` + +`./configure` 运行完成后执行 `make`: + +``` +make +``` + +执行完 `make` 命令需要花较长时间,可以考虑喝杯咖啡或者做点其他什么。之后,执行以下命令: + +``` +sudo make install +``` + +这个命令能够快速执行完成。现在你可以通过下面两个命令验证安装是否成功,同时找到配置文件位置。 + +``` +sudo netatalk -V +sudo afpd -V +``` + +然后你需要编辑 `afp.conf` 配置文件并在其中指定 Time Machine 备份路径,可以访问的帐号名并指定是否使用 [Spotlight][9] 为备份建立索引。 + +``` +sudo nano /usr/local/etc/afp.conf +``` + +下面是 `afp.conf` 的配置示例: + +``` +[My Time Machine Volume] +path = /mnt/timemachine/tm +valid users = pi +time machine = yes +spotlight = no +``` + +最后,启用 Avahi 和 Netatalk 并启动它们。 + +``` +sudo systemctl enable avahi-daemon +sudo systemctl enable netatalk +sudo systemctl start avahi-daemon +sudo systemctl start netatalk +``` + +### 连接到网络驱动器 + +此时,你的 Mac 可能已经发现并识别了你的 Pi 设备和网络驱动器。打开 Mac 中的 Finder,看看是否有像下面的内容: + +![](https://i2.wp.com/piboards.com/wp-content/uploads/2017/02/TM_drive.png?resize=241%2C89) + +当然你也可以通过主机名或者 ip 地址访问,比如: + +``` +afp://192.168.1.25 +``` + +### Time Machine 备份 + +最后,打开 Mac 上的 Time Machine,然后“选择硬盘”,选择你的 Orange pi。 + + ![](https://i1.wp.com/piboards.com/wp-content/uploads/2017/02/OPiTM.png?resize=579%2C381) + +这样设置肯定有效,Orange Pi 能够很好的处理进程,不过这可能并不是最快速的备份方式。但是,这个方法比较简单且便宜,并且正如其展示的一样能够正常工作。如果对这些设置你已经成功或者进行了改进,请在下面留言或者发送消息给我。 + +![](https://i0.wp.com/piboards.com/wp-content/uploads/2017/02/backup_complete.png?resize=300%2C71) + +Amazon 上有售卖 Orange Pi 主板。 + +-------------------------------------------------------------------------------- + +via: http://piboards.com/2017/02/13/orange-pi-as-time-machine-server/ + +作者:[MIKE WILMOTH][a] +译者:[beyondworld](https://github.com/beyondworld) +校对:[jasminepeng](https://github.com/jasminepeng) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://piboards.com/author/piguy/ +[1]:http://piboards.com/author/piguy/ +[2]:http://piboards.com/2017/02/13/orange-pi-as-time-machine-server/ +[3]:https://www.amazon.com/gp/product/B018W6OTIM/ref=as_li_tl?ie=UTF8&tag=piboards-20&camp=1789&creative=9325&linkCode=as2&creativeASIN=B018W6OTIM&linkId=08bd6573c99ddb8a79746c8590776c39 +[4]:https://www.armbian.com/ +[5]:https://support.apple.com/kb/PH25710?locale=en_US +[6]:http://netatalk.sourceforge.net/ +[7]:https://en.wikipedia.org/wiki/Avahi_(software) +[8]:http://gparted.org/ +[9]:https://support.apple.com/en-us/HT204014 diff --git a/translated/tech/20170213 The Best Operating System for Linux Gaming Which One Do You Use and Why.md b/published/20170213 The Best Operating System for Linux Gaming Which One Do You Use and Why.md similarity index 69% rename from translated/tech/20170213 The Best Operating System for Linux Gaming Which One Do You Use and Why.md rename to published/20170213 The Best Operating System for Linux Gaming Which One Do You Use and Why.md index 4db4b11dd8..b64f50a151 100644 --- a/translated/tech/20170213 The Best Operating System for Linux Gaming Which One Do You Use and Why.md +++ b/published/20170213 The Best Operating System for Linux Gaming Which One Do You Use and Why.md @@ -1,27 +1,27 @@ -Linux 游戏最好的操作系统:该选哪个以及为什么? +哪个 Linux 系统最适合玩游戏? ============================================================ -### 告诉我们哪个 Linux 发型版对游戏支持的最好 +> 告诉我们哪个 Linux 发型版对游戏支持的最好 在过去几个月中,出于游戏目的,我们尝试了多种 GNU/Linux 发行版,我们得出的结论是没有专为 Linux 游戏设计的完美的操作系统。 -我们都知道,游戏世界在 Nvidia 和 AMD 用户之间分裂。现在,如果你使用的是 Nvidia 显卡,即使是五年前的一块显卡,也可以在大多数基于 Linux 的操作系统上使用,因为 Nvidia 为大多数(如果不是全部的话)GPU 提供了最新的视频驱动程序。 +我们都知道,游戏世界分成 Nvidia 和 AMD 两个阵营。现在,如果你使用的是 Nvidia 显卡,即使是五年前的一块显卡,也可以在大多数基于 Linux 的操作系统上使用,因为 Nvidia 差不多为其所有的 GPU 都提供了最新的视频驱动程序。 -当然,这意味着如果你有一块 Nvidia GPU,在大多数 GNU/Linux 发行版上你不会有什么大问题。至少与游戏中的图形或其他性能问题无关,这将严重影响你的游戏体验。 +当然,这意味着如果你有一块 Nvidia GPU,在大多数 GNU/Linux 发行版上你不会有什么大问题。至少与游戏中的图形或其他性能问题无关,这种问题将严重影响你的游戏体验。 -AMD Radeon 用户最好的游戏发行版 +### AMD Radeon 用户最好的游戏发行版 -如果你使用 AMD Radeon GPU,事情会是完全不同的。我们都知道,AMD 的专有显卡驱动程序仍然需要大量的工作来兼容最新的 GNU/Linux 发行版本,所有的 AMD GPU,以及最新的 X.Org 服务端和 Linux 内核版本。 +如果你使用 AMD Radeon GPU,事情会是完全不同的。我们都知道,AMD 的专有显卡驱动程序仍然需要大量的工作来兼容最新的 GNU/Linux 发行版本。所有的 AMD GPU ,即便是在最新的 X.Org 服务端和 Linux 内核版本上都是这样。 目前,AMDGPU-PRO 视频驱动程序只能在 Ubuntu 16.04 LTS、CentOS 6.8/7.3、Red Hat Enterprise Linux 6.8/7.3、SUSE Linux Enterprise Desktop 和 Server 12 SP2 上运行。除了 Ubuntu 16.04 LTS 之外,我们不知道为什么 AMD 为所有这些面向服务器和企业级的操作系统提供支持。 -我们不相信有 Linux 玩家会在这些系统上面玩游戏。[最新的 AMDGPU-PRO 更新][1]终于支持了HD 7xxx 和 8xxx 系列的 AMD Radeon GPU,但是如果我们不想使用 Ubuntu 16.04 LTS 呢? +我们不相信有 Linux 玩家会在这些系统上面玩游戏。[最新的 AMDGPU-PRO 更新][1]终于支持了 HD 7xxx 和 8xxx 系列的 AMD Radeon GPU,但是如果我们不想使用 Ubuntu 16.04 LTS 呢? 另外,我们有 Mesa 3D 图形库,这在大多数发行版上都有。Mesa 图形栈为我们的 AMD GPU 提供了功能强大的开源 Radeon 和 AMDGPU 驱动程序,但是为了享受最好的游戏体验,你还需要拥有最新的 X.Org 服务端和 Linux 内核。 -并不是所有的 Linux 操作系统都附带最新的 Mesa(13.0)、X.Org 服务端(1.19)和 Linux 内核(4.9)版本,它们支持较旧的 AMD GPU。有些系统只有一两种技术,但我们这些都需要,而且内核需要编译 AMD Radeon Southern Islands 和 Sea Island 来支持 AMDGPU 驱动程序工作。 +并不是所有的 Linux 操作系统都附带最新的 Mesa(13.0)、X.Org 服务端(1.19)和 Linux 内核(4.9)版本,它们支持较旧的 AMD GPU。有些系统只有其中一两种技术,但我们这些都需要,而且内核需要编译进 AMD Radeon Southern Islands 和 Sea Island 驱动来支持 AMDGPU。 -我们发现整个情况相当令人沮丧,至少对于一些使用 AMD Radeon 老式显卡的玩家。现在,我们发现,使用 AMD Radeon HD 8xxx GPU 的最佳游戏体验只能通过使用 Git 和 Linux 内核 4.10 RC 的 Mesa 17 来实现。 +我们发现整个情况相当令人沮丧,至少对于一些使用 AMD Radeon 老式显卡的玩家来说是这样的。现在,我们发现,使用 AMD Radeon HD 8xxx GPU 的最佳游戏体验只能通过使用 Git 获取到的 Mesa 17 以及 Linux 内核 4.10 RC 来实现。 所以我们现在请求你 - 如果你找到了玩游戏的完美的 GNU/Linux 发行版,无论你使用的是 AMD Radeon 还是 Nvidia GPU,但我们最感兴趣的是那些使用 AMD GPU 的玩家,请告知我们你使用的是什么发行版,设置是什么,能不能玩最新的游戏,或者有无体验问题。谢谢! @@ -29,7 +29,7 @@ Linux 游戏最好的操作系统:该选哪个以及为什么? via: http://news.softpedia.com/news/the-best-operating-system-for-linux-gaming-which-one-do-you-use-and-why-512861.shtml -作者:[Marius Nestor ][a] +作者:[Marius Nestor][a] 译者:[geekpi](https://github.com/geekpi) 校对:[jasminepeng](https://github.com/jasminepeng) diff --git a/translated/tech/20170227 How to Install MariaDB 10 on Debian and Ubuntu.md b/published/20170227 How to Install MariaDB 10 on Debian and Ubuntu.md similarity index 84% rename from translated/tech/20170227 How to Install MariaDB 10 on Debian and Ubuntu.md rename to published/20170227 How to Install MariaDB 10 on Debian and Ubuntu.md index 5ce7670d61..bbfde05894 100644 --- a/translated/tech/20170227 How to Install MariaDB 10 on Debian and Ubuntu.md +++ b/published/20170227 How to Install MariaDB 10 on Debian and Ubuntu.md @@ -1,7 +1,7 @@ 如何在 Debian 和 Ubuntu 上安装 MariaDB 10 ============================================================ -MariaDB 是深受欢迎的数据库管理服务器软件 MySQL 的一个免费并且开源的分支。它由 MySQL 的原开发者在 GPLv2(通用公共许可证 2 版)下开发,并保持开源。 +MariaDB 是深受欢迎的数据库管理服务器软件 MySQL 的一个自由开源的分支。它由 MySQL 的原开发者在 GPLv2(通用公共许可证 2 版)下开发,并保持开源。 它被设计来实现 MySQL 的高兼容性。对于初学者,可以阅读 [MariaDB vs MySQL][5] 来了解关于它们的特性的更多信息。更重要的是,它被一些大公司/组织使用,比如 Wikipedia、WordPress.com 和 Google plus ,除此之外还有更多的。 @@ -9,9 +9,9 @@ MariaDB 是深受欢迎的数据库管理服务器软件 MySQL 的一个免费 ### 在 Debian 和 Ubuntu 上安装 MariaDB -1. 在安装之前 MariaDB 之前,你需要通过下面的命令导入仓库密匙并获取 MariaDB 仓库 +1、在安装之前 MariaDB 之前,你需要通过下面的命令导入仓库密匙并获取 MariaDB 仓库 -#### 在 Debian 10(Sid) 上 +**在 Debian 10 (Sid) 上** ``` $ sudo apt-get install software-properties-common @@ -19,7 +19,7 @@ $ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1 $ sudo add-apt-repository 'deb [arch=amd64,i386] http://www.ftp.saix.net/DB/mariadb/repo/10.1/debian sid main' ``` -#### 在 Debian 9(Stretch) 上 +**在 Debian 9 (Stretch) 上** ``` $ sudo apt-get install software-properties-common @@ -27,7 +27,7 @@ $ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1 $ sudo add-apt-repository 'deb [arch=amd64] http://www.ftp.saix.net/DB/mariadb/repo/10.1/debian stretch main' ``` -#### 在 Debian 8(Jessie) 上 +**在 Debian 8 (Jessie) 上** ``` $ sudo apt-get install software-properties-common @@ -35,7 +35,7 @@ $ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943 $ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://www.ftp.saix.net/DB/mariadb/repo/10.1/debian jessie main' ``` -#### 在 Debian 7(Wheezy) 上 +**在 Debian 7 (Wheezy) 上** ``` $ sudo apt-get install python-software-properties @@ -43,7 +43,7 @@ $ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943 $ sudo add-apt-repository 'deb [arch=amd64,i386] http://www.ftp.saix.net/DB/mariadb/repo/10.1/debian wheezy main' ``` -#### 在 Ubuntu 16.10(Yakkety Yak) 上 +**在 Ubuntu 16.10 (Yakkety Yak) 上** ``` $ sudo apt-get install software-properties-common @@ -51,7 +51,7 @@ $ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656 $ sudo add-apt-repository 'deb [arch=amd64,i386] http://www.ftp.saix.net/DB/mariadb/repo/10.1/ubuntu yakkety main' ``` -#### 在 Ubuntu 16.04 (Xenial Xerus) 上 +**在 Ubuntu 16.04 (Xenial Xerus) 上** ``` $ sudo apt-get install software-properties-common @@ -59,7 +59,7 @@ $ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656 $ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://www.ftp.saix.net/DB/mariadb/repo/10.1/ubuntu xenial main' ``` -#### 在 Ubuntu 14.04 (Trusty) 上 +**在 Ubuntu 14.04 (Trusty) 上** ``` $ sudo apt-get install software-properties-common @@ -67,7 +67,7 @@ $ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb0 $ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://www.ftp.saix.net/DB/mariadb/repo/10.1/ubuntu trusty main' ``` -2. 然后,更新系统安装包列表,并像下面这样安装 MariaDB 服务器: +2、 然后,更新系统安装包列表,并像下面这样安装 MariaDB 服务器: ``` $ sudo apt-get update @@ -80,18 +80,18 @@ $ sudo apt-get install mariadb-server ![Set New Root Password for MariaDB](http://www.tecmint.com/wp-content/uploads/2017/02/Set-New-Root-Password-for-MariaDB.png) ][6] -为 MariaDB 设置新的 Root 密码 +*为 MariaDB 设置新的 Root 密码* -重新输入密码并按下 [ENTER] 键来继续安装。 +再次输入密码并按下回车键来继续安装。 [ ![Repeat MariaDB Password](http://www.tecmint.com/wp-content/uploads/2017/02/Repeat-MariaDB-Password.png) ][7] -再次输入 MariaDB 密码 +*再次输入 MariaDB 密码* -当 MariaDB 安装包安装完成以后,启动数据库服务器 daemon,同时启用它,使得在下次开机时它能够像下面这样自动启动: +当 MariaDB 安装包安装完成以后,启动数据库服务器守护进程,同时启用它,使得在下次开机时它能够像下面这样自动启动: ``` ------------- On SystemD Systems ------------- @@ -109,15 +109,15 @@ $ sudo service mysql status ![Start MariaDB Service](http://www.tecmint.com/wp-content/uploads/2017/02/Start-MariaDB-Service.png) ][8] -开启 MariaDB 服务 +*开启 MariaDB 服务* -4. 然后,运行 `mysql_secure_installation` 脚本来保护数据库,在这儿你可以: +4、 然后,运行 `mysql_secure_installation` 脚本来保护数据库,在这儿你可以: 1. 设置 root 密码(如果在上面的配置环节你没有进行设置的话)。 2. 禁止远程 root 登录 3. 移除测试数据库 4. 移除匿名用户 -5. 重装特权 +5. 重载权限配置 ``` $ sudo mysql_secure_installation @@ -126,9 +126,9 @@ $ sudo mysql_secure_installation ![Secure MariaDB Installation](http://www.tecmint.com/wp-content/uploads/2017/02/sudo-mysql-secure-installation.png) ][9] -保护 MariaDB 安装 +*保护 MariaDB 安装* -5. 一旦数据库服务器受保护以后,可以使用下面的 shell 命令查看已安装版本和登录 MariaDB: +5、 一旦数据库服务器受保护以后,可以使用下面的 shell 命令查看已安装版本和登录 MariaDB: ``` $ mysql -V @@ -138,7 +138,7 @@ $ mysql -u root -p ![Check MariaDB Version](http://www.tecmint.com/wp-content/uploads/2017/02/Check-MariaDB-Version.png) ][10] -查看 MariaDB 版本 +*查看 MariaDB 版本* 开始学习 MySQL/MariaDB, 请阅读: @@ -153,20 +153,17 @@ $ mysql -u root -p -------------------------------------------------------------------------------- - 作者简介: Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux 系统管理员和网络开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并坚信分享知识。 - - -------------------------------------------------------------------------------- via: http://www.tecmint.com/install-mariadb-in-ubuntu-and-debian/ 作者:[Aaron Kili][a] 译者:[ucasFL](https://github.com/ucasFL) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 diff --git a/sources/tech/20170304 7 Ways to Determine the File System Type in Linux.md b/published/20170304 7 Ways to Determine the File System Type in Linux.md similarity index 54% rename from sources/tech/20170304 7 Ways to Determine the File System Type in Linux.md rename to published/20170304 7 Ways to Determine the File System Type in Linux.md index 0728657f09..181f09468d 100644 --- a/sources/tech/20170304 7 Ways to Determine the File System Type in Linux.md +++ b/published/20170304 7 Ways to Determine the File System Type in Linux.md @@ -1,131 +1,137 @@ -7 Ways to Determine the File System Type in Linux (Ext2, Ext3 or Ext4) +Linux 中 7 个判断文件系统类型的方法 ============================================================ +文件通过文件系统在磁盘及分区上命名、存储、检索以及更新,文件系统是在磁盘上组织文件的方式。 -A file system is the way in which files are named, stored, retrieved as well as updated on a storage disk or partition; the way files are organized on the disk. +文件系统分为两个部分:用户数据和元数据(文件名、创建时间、修改时间、大小以及目录层次结构中的位置等)。 -A file system is divided in two segments called: User Data and Metadata (file name, time it was created, modified time, it’s size and location in the directory hierarchy etc). +在本指南中,我们将用 7 种方法来识别你的 Linux 文件系统类型,如 Ext2、Ext3、Ext4、BtrFS、GlusterFS 等等。 -In this guide, we will explain seven ways to identify your Linux file system type such as Ext2, Ext3, Ext4, BtrFS, GlusterFS plus many more. +### 1、 使用 df 命令 -### 1\. Using df Command - -df command reports file system disk space usage, to include the file system type on a particular disk partition, use the `-T` flag as below: +`df` 命令报告文件系统磁盘空间利用率,要显示特定的磁盘分区的文件系统类型,像下面那样使用 `-T` 标志: ``` $ df -Th -OR +或者 $ df -Th | grep "^/dev" ``` + [ ![df Command - Find Filesystem Type](http://www.tecmint.com/wp-content/uploads/2017/03/Find-Filesystem-Type-Using-df-Command.png) ][3] -df Command – Find Filesystem Type +*df 命令 – 找出文件系统类型* -For a comprehensive guide for df command usage go through our articles: +要更好理解 `df` 命令,阅读下面的文章: -1. [12 Useful “df” Commands to Check Disk Space in Linux][1] -2. [Pydf – An Alternative ‘df’ Command That Shows Disk Usage in Colours][2] +1. [12 个有用的 df 命令来检查 Linux 中的磁盘空间][1] +2. [Pydf - 一个替代 df 的命令,用颜色显示磁盘使用率][2] -### 2\. Using fsck Command +### 2、 使用 fsck 命令 -fsck is used to check and optionally [repair Linux file systems][4], it can also print the [file system type on specified disk partitions][5]. +`fsck` 用来检查以及[修复 Linux 文件系统][4],它也可以输出[指定磁盘分区的文件系统类型][5]。 -The flag `-N` disables checking of file system for errors, it just shows what would be done (but all we need is the file system type): +`-N` 标志禁用检查文件系统错误,它只是显示会做什么(但是我们只需要文件系统类型): ``` $ fsck -N /dev/sda3 $ fsck -N /dev/sdb1 ``` + [ ![fsck - Print Linux Filesystem Type](http://www.tecmint.com/wp-content/uploads/2017/03/fsck-Print-Linux-Filesystem-Type.png) ][6] -fsck – Print Linux Filesystem Type +*fsck – 打印 Linux 文件系统类型* -### 3\. Using lsblk Command +### 3、 使用 lsblk 命令 -lsblk displays block devices, when used with the `-f` option, it prints file system type on partitions as well: +`lsblk` 会显示块设备,当使用 `-f` 选项时,它也会打印分区的文件系统类型: ``` $ lsblk -f ``` + [ ![lsblk - Shows Linux Filesystem Type](http://www.tecmint.com/wp-content/uploads/2017/03/lsblk-Shows-Linux-Filesystem-Type.png) ][7] -lsblk – Shows Linux Filesystem Type +*lsblk – 显示 Linux 文件系统类型* -### 4\. Using mount Command +### 4、 使用 mount 命令 -mount command is used to [mount a file system in Linux][8], it can also be used to [mount an ISO image][9], [mount remote Linux filesystem][10] and so much more. +`mount` 命令用来[在 Linux 中挂载文件系统][8],它也可以用来[挂载一个 ISO 镜像][9],[挂载远程 Linux 文件系统][10]等等。 -When run without any arguments, it prints [info about disk partitions][11] including the file system type as below: +当不带任何参数运行时,它会打印包含文件系统类型在内的[磁盘分区的信息][11]: ``` $ mount | grep "^/dev" ``` + [ ![Mount - Show Filesystem Type in Linux](http://www.tecmint.com/wp-content/uploads/2017/03/Mount-Show-Filesystem-Type.png) ][12] -Mount – Show Filesystem Type in Linux +*Mount – 在 Linux 中显示文件系统类型* -### 5\. Using blkid Command +### 5、 使用 blkid 命令 -blkid command is used to [find or print block device properties][13], simply specify the disk partition as an argument like so: +`blkid` 命令用来[找出或打印块设备属性][13],只要将磁盘分区作为参数就行了: ``` $ blkid /dev/sda3 ``` + [ ![blkid - Find Filesystem Type](http://www.tecmint.com/wp-content/uploads/2017/03/blkid-Find-Filesystem-Type.png) ][14] -blkid – Find Filesystem Type +*blkid – 找出文件系统类型* -### 6\. Using file Command +### 6、 使用 file 命令 -file command identifies file type, the `-s` flag enables reading of block or character files and `-L` enables following of symlinks: +`file` 命令会识别文件类型,使用 `-s` 标志启用读取块设备或字符设备,`-L` 启用符号链接跟随: ``` $ sudo file -sL /dev/sda3 ``` + [ ![file - Identifies Filesystem Type](http://www.tecmint.com/wp-content/uploads/2017/03/file-command-identifies-filesystem-type.png) ][15] -file – Identifies Filesystem Type +*file – 识别文件系统类型* -### 7\. Using fstab File +### 7、 使用 fstab 文件 -The /etc/fstab is a static file system info (such as mount point, file system type, mount options etc) file: +`/etc/fstab` 是一个静态文件系统信息(比如挂载点、文件系统类型、挂载选项等等)文件: ``` $ cat /etc/fstab ``` + [ ![Fstab - Shows Linux Filesystem Type](http://www.tecmint.com/wp-content/uploads/2017/03/fstab-shows-filesystem-types.png) ][16] -Fstab – Shows Linux Filesystem Type +*fstab – 显示 Linux 文件系统类型* -That’s it! In this guide, we explained seven ways to identify your Linux file system type. Do you know of any method not mentioned here? Share it with us in the comments. +就是这样了!在这篇指南中,我们用 7 种方法来识别你的 Linux 文件系统类型。你还知道这里没有提到的其他方法么?在评论中与我们分享。 -------------------------------------------------------------------------------- 作者简介: -Aaron Kili is a Linux and F.O.S.S enthusiast, an upcoming Linux SysAdmin, web developer, and currently a content creator for TecMint who loves working with computers and strongly believes in sharing knowledge. +Aaron Kili是一名 Linux 和 F.O.S.S 的爱好者,未来的 Linux 系统管理员、网站开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并乐于分享知识。 -------------------------------------------------------------------------------- via: http://www.tecmint.com/find-linux-filesystem-type/ 作者:[Aaron Kili][a] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 diff --git a/published/20170306 How to Upgrade Kernel to Latest Version in Ubuntu.md b/published/20170306 How to Upgrade Kernel to Latest Version in Ubuntu.md new file mode 100644 index 0000000000..125d403b67 --- /dev/null +++ b/published/20170306 How to Upgrade Kernel to Latest Version in Ubuntu.md @@ -0,0 +1,92 @@ +如何在 Ubuntu 中升级到最新内核 +============================================================ + +每过段时间,就有新的设备和技术出来,因此如果我们想要充分利用它,保持最新的 Linux 内核就显得很重要。此外,更新系统内核将使我们能够利用新的内核优化,并且它还可以帮助我们避免在早期版本中发现的漏洞。 + +**建议阅读:** [如何升级 CentOS 7内核][1] + +准备好了在 Ubuntu 16.04 或其衍生版本(如 Debian 和 Linux Mint)中更新你的内核了么?如果准备好了,请你继续阅读! + +### 第一步:检查安装的内核版本 + +要发现当前系统安装的版本,我们可以: + +``` +$ uname -sr +``` + +下面的截图显示了在 Ubuntu 16.04 server 中上面命令的输出: + +[ + ![Check Kernel Version in Ubuntu](http://www.tecmint.com/wp-content/uploads/2017/03/Check-Kernel-Version-in-Ubuntu.png) +][2] + +*在 Ubuntu 中检查内核版本* + +### 第二步:在 Ubuntu 16.04 中升级内核 + +要升级 Ubuntu 16.04 的内核,打开 [http://kernel.ubuntu.com/~kernel-ppa/mainline/][3] 并选择列表中需要的版本(发布此文时最新内核是 4.10.1)。 + +接下来,根据你的系统架构下载 `.deb` 文件: + +对于 64 位系统: +``` +$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-headers-4.10.1-041001_4.10.1-041001.201702260735_all.deb +$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-headers-4.10.1-041001-generic_4.10.1-041001.201702260735_amd64.deb +$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-image-4.10.1-041001-generic_4.10.1-041001.201702260735_amd64.deb + +``` + +这是 32 位系统的: +``` +$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-headers-4.10.1-041001_4.10.1-041001.201702260735_all.deb +$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-headers-4.10.1-041001-generic_4.10.1-041001.201702260735_i386.deb +$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-image-4.10.1-041001-generic_4.10.1-041001.201702260735_i386.deb +``` + +下载完成这些所有内核文件后,如下安装: + +``` +$ sudo dpkg -i *.deb +``` + +安装完成后,重启并验证新的内核已经被使用了: + +``` +$ uname -sr +``` + +就是这样。你下载就可以使用比 Ubuntu 16.04 默认安装的内核的更新版本了。 + +### 总结 + +本文我们展示了如何在 Ubuntu 系统上轻松升级Linux内核。这里还有另一个流程,但我们在这里没有展示,因为它需要从源代码编译内核,这不推荐在生产 Linux 系统上使用。 + +如果你仍然有兴趣编译内核作为一个学习经验,你可以在 [Kernel Newbies][4] 网站中得到指导该如何做。 + +一如既往,如果你对本文有任何问题或意见,请随时使用下面的评论栏。 + +-------------------------------------------------------------------------------- +作者简介: + +Gabriel Cánepa - 一位来自阿根廷圣路易斯梅塞德斯镇 (Villa Mercedes, San Luis, Argentina) 的 GNU/Linux 系统管理员,Web 开发者。就职于一家世界领先级的消费品公司,乐于在每天的工作中能使用 FOSS 工具来提高生产力。 + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/upgrade-kernel-in-ubuntu/ + +作者:[Gabriel Cánepa][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/gacanepa/ + +[1]:http://www.tecmint.com/install-upgrade-kernel-version-in-centos-7/ +[2]:http://www.tecmint.com/wp-content/uploads/2017/03/Check-Kernel-Version-in-Ubuntu.png +[3]:http://kernel.ubuntu.com/~kernel-ppa/mainline/ +[4]:https://kernelnewbies.org/KernelBuild +[5]:http://www.tecmint.com/author/gacanepa/ +[6]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/ +[7]:http://www.tecmint.com/free-linux-shell-scripting-books/ diff --git a/published/LXD/Part 12 - LXD 2.0 Debugging and contributing to LXD .md b/published/LXD/Part 12 - LXD 2.0 Debugging and contributing to LXD .md new file mode 100644 index 0000000000..f31ba510e5 --- /dev/null +++ b/published/LXD/Part 12 - LXD 2.0 Debugging and contributing to LXD .md @@ -0,0 +1,396 @@ +LXD 2.0 系列(十二):调试,及给 LXD 做贡献 +================ + +![LXD logo](https://linuxcontainers.org/static/img/containers.png) + +### 介绍 + +终于要结束了!这个大约一年前开始的[这系列文章][3]的最后一篇博文。 + +如果你从一开始就关注了这个系列,你应该已经使用了 LXD 相当长的时间了,并且非常熟悉它的日常操作和功能。 + +但如果出现问题怎么办?你可以做什么来自己跟踪问题?如果你不能,你应该记录什么信息,以便上游可以跟踪问题? + +如果你想自己解决问题或通过实现你需要的功能来帮助改善LXD怎么办?如何构建,测试和贡献 LXD 代码库? + +### 调试 LXD 并填写 bug 报告 + +#### LXD 日志文件 + +`/var/log/lxd/lxd.log`: + +这是 LXD 日志的主文件。为了避免它快速充满你的磁盘,默认只会记录 `INFO`、`WARNING` 或者 `ERROR` 级别的日志。你可以在 LXD 守护进程中使用 `–debug` 改变其行为。 + +`/var/log/lxd/CONTAINER/lxc.conf`: + +每当你启动容器时,此文件将更新为传递给 LXC 的配置。 + +这里会展示容器将如何配置,包括其所有的设备、绑定挂载等等。 + +`/var/log/lxd/CONTAINER/forkexec.log`: + +这个文件包含 LXC 命令执行失败时产生的错误。这个情况是非常罕见的,因为 LXD 通常会在发生之前处理大多数错误。 + +`/var/log/lxd/CONTAINER/forkstart.log`: + +这个文件包含 LXC 在启动容器时的错误信息。含 LXC 命令执行失败时产生的错误。 + +#### CRIU 日志 (对于实时迁移) + +如果使用 CRIU 进行容器实时迁移或实时快照,则每次生成 CRIU 转储或恢复转储时都会记录额外的日志文件。 + +这些日志也可以在 `/var/log/lxd/CONTAINER/` 中找到,并且有时间戳,以便你可以找到与你最近的操作所匹配的那些日志。它们包含 CRIU 转储和恢复的所有内容的详细记录,并且比典型的迁移/快照错误消息更容器理解。 + +#### LXD 调试消息 + +如上所述,你可以使用 `-debug` 选项将守护进程切换为执行调试日志记录。另一种方法是连接到守护进程的事件接口,它将显示所有日志条目,而不管配置的日志级别(即使是远程工作)。 + +举例说,对于 `lxc init ubuntu:16.04 xen` 来说, + +`lxd.log` 会是这样: + +``` +INFO[02-24|18:14:09] Starting container action=start created=2017-02-24T23:11:45+0000 ephemeral=false name=xen stateful=false used=1970-01-01T00:00:00+0000 +INFO[02-24|18:14:10] Started container action=start created=2017-02-24T23:11:45+0000 ephemeral=false name=xen stateful=false used=1970-01-01T00:00:00+0000 +``` + +而 `lxc monitor –type=logging` 会是: + +``` +metadata: + context: {} + level: dbug + message: 'New events listener: 9b725741-ffe7-4bfc-8d3e-fe620fc6e00a' +timestamp: 2017-02-24T18:14:01.025989062-05:00 +type: logging + +metadata: + context: + ip: '@' + method: GET + url: /1.0 + level: dbug + message: handling +timestamp: 2017-02-24T18:14:09.341283344-05:00 +type: logging + +metadata: + context: + driver: storage/zfs + level: dbug + message: StorageCoreInit +timestamp: 2017-02-24T18:14:09.341536477-05:00 +type: logging + +metadata: + context: + ip: '@' + method: GET + url: /1.0/containers/xen + level: dbug + message: handling +timestamp: 2017-02-24T18:14:09.347709394-05:00 +type: logging + +metadata: + context: + ip: '@' + method: PUT + url: /1.0/containers/xen/state + level: dbug + message: handling +timestamp: 2017-02-24T18:14:09.357046302-05:00 +type: logging + +metadata: + context: {} + level: dbug + message: 'New task operation: 2e2cf904-c4c4-4693-881f-57897d602ad3' +timestamp: 2017-02-24T18:14:09.358387853-05:00 +type: logging + +metadata: + context: {} + level: dbug + message: 'Started task operation: 2e2cf904-c4c4-4693-881f-57897d602ad3' +timestamp: 2017-02-24T18:14:09.358578599-05:00 +type: logging + +metadata: + context: + ip: '@' + method: GET + url: /1.0/operations/2e2cf904-c4c4-4693-881f-57897d602ad3/wait + level: dbug + message: handling +timestamp: 2017-02-24T18:14:09.366213106-05:00 +type: logging + +metadata: + context: + driver: storage/zfs + level: dbug + message: StoragePoolInit +timestamp: 2017-02-24T18:14:09.369636451-05:00 +type: logging + +metadata: + context: + driver: storage/zfs + level: dbug + message: StoragePoolCheck +timestamp: 2017-02-24T18:14:09.369771164-05:00 +type: logging + +metadata: + context: + container: xen + driver: storage/zfs + level: dbug + message: ContainerMount +timestamp: 2017-02-24T18:14:09.424696767-05:00 +type: logging + +metadata: + context: + driver: storage/zfs + name: xen + level: dbug + message: ContainerUmount +timestamp: 2017-02-24T18:14:09.432723719-05:00 +type: logging + +metadata: + context: + container: xen + driver: storage/zfs + level: dbug + message: ContainerMount +timestamp: 2017-02-24T18:14:09.721067917-05:00 +type: logging + +metadata: + context: + action: start + created: 2017-02-24 23:11:45 +0000 UTC + ephemeral: "false" + name: xen + stateful: "false" + used: 1970-01-01 00:00:00 +0000 UTC + level: info + message: Starting container +timestamp: 2017-02-24T18:14:09.749808518-05:00 +type: logging + +metadata: + context: + ip: '@' + method: GET + url: /1.0 + level: dbug + message: handling +timestamp: 2017-02-24T18:14:09.792551375-05:00 +type: logging + +metadata: + context: + driver: storage/zfs + level: dbug + message: StorageCoreInit +timestamp: 2017-02-24T18:14:09.792961032-05:00 +type: logging + +metadata: + context: + ip: '@' + method: GET + url: /internal/containers/23/onstart + level: dbug + message: handling +timestamp: 2017-02-24T18:14:09.800803501-05:00 +type: logging + +metadata: + context: + driver: storage/zfs + level: dbug + message: StoragePoolInit +timestamp: 2017-02-24T18:14:09.803190248-05:00 +type: logging + +metadata: + context: + driver: storage/zfs + level: dbug + message: StoragePoolCheck +timestamp: 2017-02-24T18:14:09.803251188-05:00 +type: logging + +metadata: + context: + container: xen + driver: storage/zfs + level: dbug + message: ContainerMount +timestamp: 2017-02-24T18:14:09.803306055-05:00 +type: logging + +metadata: + context: {} + level: dbug + message: 'Scheduler: container xen started: re-balancing' +timestamp: 2017-02-24T18:14:09.965080432-05:00 +type: logging + +metadata: + context: + action: start + created: 2017-02-24 23:11:45 +0000 UTC + ephemeral: "false" + name: xen + stateful: "false" + used: 1970-01-01 00:00:00 +0000 UTC + level: info + message: Started container +timestamp: 2017-02-24T18:14:10.162965059-05:00 +type: logging + +metadata: + context: {} + level: dbug + message: 'Success for task operation: 2e2cf904-c4c4-4693-881f-57897d602ad3' +timestamp: 2017-02-24T18:14:10.163072893-05:00 +type: logging +``` + +`lxc monitor` 的格式有点不同于每个条目都缩合成一行的日志文件,但更重要的是,你可以看到所有 `level:dbug` 条目。 + +### 如何报告 bug + +#### LXD 的 bug + +最好报告 bug 的地方是 [https://github.com/lxc/lxd/issues][4]。确保完整填写了 bug 报告模板中的内容,这些信息可以节省我们我们时间来复现环境。 + +#### Ubuntu 的 bug + +如果你发现 Ubuntu 包本身有问题,无法安装、升级或删除。或者遇到 LXD init 脚本的问题。报告此类错误的最好是在 Launchpad 上。 + +在 Ubuntu 系统上,你可以使用:`ubuntu-bug lxd` ,它将自动包括一些日志文件和包信息供我们查看。 + +#### CRIU 的 bug + +与 CRIU 相关的 Bug,你可以通过 CRIU 的错误输出发现,你应该在 Launchpad 上报告这些:`ubuntu-bug criu` + +请注意,通过 LXD 使用 CRIU 属于测试版功能,除非你愿意通过 Canonical 的支持合同付费支持,要么可能需要一段时间才能查看你的错误报告。 + +### 贡献给 LXD + +LXD 用 [Go][5] 写成并[托管在 Github][6]。我们欢迎任外部的贡献。为 LXD 贡献不需要 CLA 或类似的法律协议签署,只是通常的开发者所有权证书(`Signed-off-by:` 行)。 + +在我们的问题追踪器工具中,我们列有许多潜在的功能需求,新的贡献者可以以此作为良好的起点。通常最好在开始处理代码先发出 issue,这样每个人都知道你正在做这项工作,以便我们可以提供一些早期反馈。 + +#### 从源码源码构建 LXD + +这里有上游的维护说明:[https://github.com/lxc/lxd#building-from-source][7] + +你需要在 Github 上 fork 上游仓库,然后将你的更改推送到你的分支。我们建议每天 rebase 上游的 LXD,因为我们倾向于定期合并更改。 + +#### 运行测试套件 + +LXD 维护了两套测试集,单元测试和集成测试。你可以用下面的命令测试所有: + +``` +sudo -E make check +``` + +要只运行单元测试,使用: + +``` +sudo -E go test ./... +``` + +要运行集成测试,使用: + +``` +cd test +sudo -E ./main.sh +``` + +后者支持相当多的环境变量来测试各种存储后端、禁用网络测试、使用 ramdisk 或只是调整日志输出。其中一些是: + +* `LXD_BACKEND`:`btrfs`、`dir`、`lvm` 或 `zfs`” 之一(默认为 `dir`) +  运行 LXD 存储驱动程序相关的所有测试。 +* `LXD_CONCURRENT`:`true` 或 `false`(默认为 `false`) +  这启用一些额外的并发测试。 +* `LXD_DEBUG`:`true` 或 `false`(默认为 `false`) +  记录所有 shell 命令,并在调试模式下运行所有​​ LXD 命令。 +* `LXD_INSPECT`:`true` 或 `false`(默认为 `false`) +  测试程序会在故障时挂起,以便你可以检查环境。 +* `LXD_LOGS`:将所有 `LXD` 日志文件转储到的目录(默认为 “”) +  所有生成的 LXD 守护进程的 `logs` 目录将被复制到此路径。 +* `LXD_OFFLINE`:`true` 或 `false`(默认为 `false`) +  禁用任何依赖于外部网络连接的测试。 +* `LXD_TEST_IMAGE`: unified 格式的 LXD 镜像的路径(默认为 “”) +  可以使用自定义测试镜像,而不是默认的最小 busybox 镜像。 +* `LXD_TMPFS`:`true` 或 `false`(默认为 `false`) +  在 `tmpfs` 安装中运行整个测试套件,这会使用相当多的内存,但会使测试速度明显更快。 +* `LXD_VERBOSE`:`true` 或 `false`(默认为 `false`) +  不太极端的 `LXD_DEBUG` 版本。shell 命令仍然会记录,但 `-debug` 不会传递给 LXC 命令,LXD 守护进程只能使用 `-verbose` 运行。 + +测试程序将在实际运行之前提醒你任何缺失的依赖项。在相当快的机器上运行该测试可在 10 分钟内完成。 + +#### 发送你的分支 + +发送拉取请求(PR)之前,你需要确认: + +* 你已经 rebase 了上游分支 +* 你的所有提交信息都包括 `Signed-off-by: First Last ` 这行 +* 已删除任何你的临时调试代码 +* 你已经将相关的提交 squash 在一起,以保持你的分支容易审查 +* 单元和集成测试全部通过 + +一切完成后,在 Github 上发起一个拉取请求。我们的 [Jenkins][8] 将验证提交是否全部有 `signed-off`,在 MacOS 和 Windows 上的测试将自动执行,如果看起来不错,我们将触发一个完整的 Jenkins 测试,它将在所有存储后端、32 位和 64 位以及我们关心的所有 Go 版本上测试你的分支。 + +假设我们有人触发了 Jenkins,这通常需要不到一个小时的时间。 + +一旦所有测试完成,我们对代码本身感到满意,你的分支将会被合并,你的代码会出现在下一个 LXD 发布中。如果更改适用于 LXD stable-2.0 分支,我们将为你向后移植。 + +### 总结 + +我希望这个系列的博客文章有助于你了解什么是 LXD,以及它可以做什么! + +本系列的范围仅限于 LXD(2.0.x),但我们也为那些想要最新功能的用户提供每月功能版本。你可以找到一些其他涵盖了原来的 [LXD 2.0系列文章][9]中列出的功能的博客文章。 + +### 额外的信息 + +LXD 的主站在: [https://linuxcontainers.org/lxd][10] +LXD 的 GitHub 开发仓库: [https://github.com/lxc/lxd][11] +LXD 的邮件列表: [https://lists.linuxcontainers.org][12] +LXD 的 IRC 频道:#lxcontainers on irc.freenode.net +在线尝试 LXD: [https://linuxcontainers.org/lxd/try-it][13] + +-------------------------------------------------------------------------------- + +via: https://stgraber.org/2017/02/27/lxd-2-0-debugging-and-contributing-to-lxd-1212/ + +作者:[Stéphane Graber][a] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://stgraber.org/author/stgraber/ +[1]:https://stgraber.org/author/stgraber/ +[2]:https://www.stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/ +[3]:https://stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/ +[4]:https://github.com/lxc/lxd/issues +[5]:https://golang.org/ +[6]:https://github.com/lxc/lxd +[7]:https://github.com/lxc/lxd#building-from-source +[8]:https://jenkins.linuxcontainers.org/ +[9]:https://stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/ +[10]:https://linuxcontainers.org/lxd +[11]:https://github.com/lxc/lxd +[12]:https://lists.linuxcontainers.org/ +[13]:https://linuxcontainers.org/lxd/try-it +[14]:https://stgraber.org/2017/02/27/lxd-2-0-debugging-and-contributing-to-lxd-1212/ diff --git a/translated/tech/linux-distro -explain/20140507 What is Linux A brief Description.md b/published/linux-distro-explain/20140507 What is Linux A brief Description.md similarity index 69% rename from translated/tech/linux-distro -explain/20140507 What is Linux A brief Description.md rename to published/linux-distro-explain/20140507 What is Linux A brief Description.md index e40d3d4261..ada0431df9 100644 --- a/translated/tech/linux-distro -explain/20140507 What is Linux A brief Description.md +++ b/published/linux-distro-explain/20140507 What is Linux A brief Description.md @@ -1,8 +1,9 @@ -# Linux 是什么?一个简短的描述 +Linux 发行版简介系列:Linux 是什么? +=================== 正如上面的问题所述,我们将要了解: -**Linux 是什么?** +### Linux 是什么? 简单来说, Linux 是一个基于 Unix 的开源操作系统。 @@ -10,20 +11,21 @@ 1991 年 10 月 5 日, Linus Torvalds 首次发布 Linux 内核。 Linux 内核是 Linux 系统的一个非常重要的组成部分。目前, Linux 主要用于多种服务器和超级计算机等。它也被用于手机操作系统,比如 Android 操作系统是基于 Linux 内核的。 -在早期, Linux 作为一个免费的操作系统被用于基于 Intel ×86 的个人电脑上。因为 Linux 是一个开源操作系统,所以它的源代码可以被修改或使用,也可以在有许可证,比如 GNU(通用公共许可证)的情况下被任何人发布。简而言之,如果具备一定知识,知道自己在干什么,那么任何人都可以从 Linux 那儿获得自己的操作系统。正因此,才有了许多 Linux 发行版。 +在早期,Linux 作为一个免费的操作系统被用于基于 Intel ×86 的个人电脑上。因为 Linux 是一个开源操作系统,所以它的源代码可以被修改或使用,也可以在有 GPL(通用公共许可证)这样许可证下被任何人发布。简而言之,如果具备一定知识,知道自己在干什么,那么任何人都可以从 Linux 那儿获得自己的操作系统。正因此,才有了许多 Linux 发行版。 -**现在, Linux 发行版是什么?** +### 那么, Linux 发行版是什么? -它是基于 Linux 内核的一个操作系统。它加载有用户可以访问的软件集合。更多的,它还包含系统管理包。目前有许多 Linux 发行版。因为我们不能数清目前所有的 Linux 发行版,所以我们来看一下一些有名的版本: +它是基于 Linux 内核的一个操作系统。它带有用户可以使用的软件集合。更多的,它还包含系统管理包。目前有许多 Linux 发行版。因为我们不能数清目前所有的 Linux 发行版,所以我们来看一下一些有名的版本: Ubuntu、Fedora、Opensuse、Red hat Linux 和 Debian 等是几个非常受欢迎的 Linux 发行版。 - [ +[ ![](https://3.bp.blogspot.com/-8ckfHXqKaPA/U2o2ufvZ0nI/AAAAAAAAAN0/Frd4OS7m7dk/s280/image_1.png) ][1] + > Ubuntu, 一个非常受欢迎的 Linux 发行版和第三受欢迎的操作系统 -Linux 发行版是一个已经准备好可以在个人电脑上安装的完整包。一旦用户在桌面或者服务器上安装了 Linux 发行版,就可以使用各种现成的软件和应用程序。现在,很多 Linux 发行版都具有很好的图形用户界面(GUI),这使得它们成为 windows 系统或 Mac 系统的一个很好的替代品。 +Linux 发行版是一个已经准备好可以在个人电脑上安装的完整包。一旦用户在桌面或者服务器上安装了 Linux 发行版,就可以使用各种现成的软件和应用程序。现在,很多 Linux 发行版都具有很好的图形用户界面(GUI),这使得它们成为 Windows 系统或 Mac 系统的一个很好的替代品。 目前, Linux 发行版在性能、界面、可访问性以及最重要的 - 用户友好性等方面都有了很大的提高。一些发行版比如 Ubuntu 和 Linux mint 等,随着用户数量的一天天增加,赢得了很好的市场地位。 Ubuntu 是紧随 Windows 和 Mac 第三受欢迎的操作系统。 @@ -33,9 +35,9 @@ Linux 发行版是一个已经准备好可以在个人电脑上安装的完整 via: http://www.techphylum.com/2014/05/what-is-linux-brief-description.html?m=1 -作者:[sumit rohankar ][a] +作者:[sumit rohankar][a] 译者:[ucasFL](https://github.com/ucasFL) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 diff --git a/sources/talk/20170207 How Linux Helped Me Become an Empowered Computer User.md b/sources/talk/20170207 How Linux Helped Me Become an Empowered Computer User.md index 414634c7a9..10dcffeaa8 100644 --- a/sources/talk/20170207 How Linux Helped Me Become an Empowered Computer User.md +++ b/sources/talk/20170207 How Linux Helped Me Become an Empowered Computer User.md @@ -1,3 +1,4 @@ +【翻译中】 How Linux Helped Me Become an Empowered Computer User ============================================================ diff --git a/sources/talk/20170219 Windows wins the desktop, but Linux takes the world.md b/sources/talk/20170219 Windows wins the desktop, but Linux takes the world.md new file mode 100644 index 0000000000..c2a4e32a8a --- /dev/null +++ b/sources/talk/20170219 Windows wins the desktop, but Linux takes the world.md @@ -0,0 +1,69 @@ +Meditator-hkx 翻译中... + + + +Windows wins the desktop, but Linux takes the world +============================================================ + +The city with the highest-profile Linux desktop projects is turning back to Windows, but the fate of Linux isn't tied to the PC anymore. + + + ![munich2.jpg](http://zdnet3.cbsistatic.com/hub/i/r/2017/02/10/9befc3d2-7931-48df-8114-008d23f1941d/resize/770xauto/02ca33958e5288c81a85d3dac546f621/munich2.jpg) +>The fate of Munich's Linux project is only part of the story of open source software. +>Image: Getty Images/iStockphoto + +After a nearly decade-long project to move away from Windows onto Linux, Munich has all but decided on a dramatic u-turn. It's likely that, by 2021, the city council will start to replace PCs running LiMux (its custom version of Ubuntu) [with Windows 10][4]. + +Going back maybe 15 or 20 years, it was seriously debated as to when Linux would overtake Windows on the desktop. When Ubuntu was created in 2004, for example, it was with the [specific intention of replacing Windows][5] as the standard desktop operating system. + +Spoiler: it didn't happen. + +Linux on the desktop has about a two percent market share today and is viewed by many as complicated and obscure. Meanwhile, Windows sails on serenely, currently running on 90 percent of PCs in use. There will likely always be a few Linux desktops around in business -- particularly for developers or data scientists. + +But it's never going to be mainstream. + +There has been lots of interest in Munich's Linux project because it's one of the biggest around. Few large organizations have switched from Windows to Linux, although there are some others, like [the French Gendarmerie and the city of Turin][6]. But [Munich was the poster child][7]: losing it as a case study will undoubtedly be a blow to those still [championing Linux on the desktop][8]. + +But the reality is that most companies are happy to go with the dominant desktop OS, given all of the advantages around integration and familiarity that come with it. + +It's not entirely clear how much of the problems that some staff have complained about are down to the LiMux software and how much the operating system is being blamed for unrelated issues. But whatever Munich finally decides to do, Linux's fate is not going to be decided on the desktop -- Linux lost the desktop war years ago. + +That's probably OK because Linux won the smartphone war and is doing pretty well on the cloud and Internet of Things battlefields too. + +There's a four-in-five chance that there's a Linux-powered smartphone in your pocket (Android is based on the Linux kernel) and plenty of IoT devices are Linux-powered too, even if you don't necessarily notice it. + +Devices [like the Raspberry Pi,][9] running a vast array of different flavours of Linux, are creating an enthusiastic community of makers and giving startups a low-cost way to power new types of devices. + +Much of the public cloud is running on Linux in one form or another, too; even Microsoft has warmed up to open-source software. Regardless of your views about one software platform or another, having a rich set of options for developers and users is good for choice and good for innovation. + +The dominance of the desktop is not what it once was: it's now just one computing platform among many. Indeed, the software on the PC becomes less and less relevant as more apps become device- and OS-independent, residing in the cloud instead. + +The twists and turns of the Munich saga and the adventures of Linux on the desktop are fascinating, but they don't tell the full story. + + _Agree? Disagree? Join the debate by posting a comment below._ + +-------------------------------------------------------------------------------- + +via: http://www.zdnet.com/article/windows-wins-the-desktop-but-linux-takes-the-world/ + +作者:[Steve Ranger ][a] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.zdnet.com/meet-the-team/uk/steve-ranger/ +[1]:http://www.techrepublic.com/resource-library/whitepapers/why-munich-made-the-switch-from-windows-to-linux-and-may-be-reversing-course/ +[2]:http://www.zdnet.com/article/windows-wins-the-desktop-but-linux-takes-the-world/#comments-c2df091a-2ecf-4e55-84f6-fd3309cf917d +[3]:http://www.techrepublic.com/resource-library/whitepapers/why-munich-made-the-switch-from-windows-to-linux-and-may-be-reversing-course/ +[4]:http://www.techrepublic.com/article/linux-champion-munich-takes-decisive-step-towards-returning-to-windows/ +[5]:http://www.techrepublic.com/article/how-mark-shuttleworth-became-the-first-african-in-space-and-launched-a-software-revolution/ +[6]:http://www.techrepublic.com/pictures/10-projects-ditching-microsoft-for-open-source-plus-one-switching-back/ +[7]:http://www.techrepublic.com/article/how-munich-rejected-steve-ballmer-and-kicked-microsoft-out-of-the-city/ +[8]:http://www.techrepublic.com/resource-library/whitepapers/why-munich-made-the-switch-from-windows-to-linux-and-may-be-reversing-course/ +[9]:http://www.zdnet.com/article/hands-on-raspberry-pi-7-inch-touch-display-and-case/ +[10]:http://intent.cbsi.com/redir?tag=medc-content-top-leaderboard&siteId=2&rsid=cnetzdnetglobalsite&pagetype=article&sl=en&sc=as&topicguid=&assetguid=c2df091a-2ecf-4e55-84f6-fd3309cf917d&assettype=content_article&ftag_cd=LGN-10-10aaa0h&devicetype=desktop&viewguid=5d31a1e5-4a88-4002-ac70-1c0ca3e33bb3&q=&ctype=docids;promo&cval=33159648;7214&ttag=&ursuid=&bhid=&destUrl=http%3A%2F%2Fwww.techrepublic.com%2Fresource-library%2Fwhitepapers%2Fgraphic-design-bootcamp%2F%3Fpromo%3D7214%26ftag%3DLGN-10-10aaa0h%26cval%3Dcontent-top-leaderboard +[11]:http://intent.cbsi.com/redir?tag=medc-content-top-leaderboard&siteId=2&rsid=cnetzdnetglobalsite&pagetype=article&sl=en&sc=as&topicguid=&assetguid=c2df091a-2ecf-4e55-84f6-fd3309cf917d&assettype=content_article&ftag_cd=LGN-10-10aaa0h&devicetype=desktop&viewguid=5d31a1e5-4a88-4002-ac70-1c0ca3e33bb3&q=&ctype=docids;promo&cval=33159648;7214&ttag=&ursuid=&bhid=&destUrl=http%3A%2F%2Fwww.techrepublic.com%2Fresource-library%2Fwhitepapers%2Fgraphic-design-bootcamp%2F%3Fpromo%3D7214%26ftag%3DLGN-10-10aaa0h%26cval%3Dcontent-top-leaderboard +[12]:http://www.zdnet.com/meet-the-team/uk/steve-ranger/ +[13]:http://www.zdnet.com/meet-the-team/uk/steve-ranger/ +[14]:http://www.zdnet.com/topic/enterprise-software/ diff --git a/sources/tech/20161128 15 JavaScript frameworks and libraries.md b/sources/tech/20161128 15 JavaScript frameworks and libraries.md deleted file mode 100644 index 1dcfab3643..0000000000 --- a/sources/tech/20161128 15 JavaScript frameworks and libraries.md +++ /dev/null @@ -1,145 +0,0 @@ -(翻译中 by runningwater) -15 JavaScript frameworks and libraries -============================================================ - ![15 JavaScript frameworks and libraries](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/code_javascript.jpg?itok=a4uULCF0 "15 JavaScript frameworks and libraries") - ->Image credits : Photo by Jen Wike Huger - -JavaScript is the future. - -The language is supported by a number of technololgy leaders, one of whom is WordPress's founder Matt Mullenweg, who hinted that [WordPress developers][18]should learn it, clearly sending a message to the WordPress community as to it future importance. The mention was well received. The transition to better technology will enable WordPress to keep up with future challenges. - -JavaScript’s open source stance is also one of the best. Contrary to popular belief, JavaScript is not a project, but a specification with an open standard where the language is evolved and maintained by its core team. [ECMAScript][19], another fancy name of JavaScript, is not open source, but it too has an open standard. - -You can easily see evidence of JavaScript's popularity when you look at both at GitHub. JavaScript is the top programming language when it comes to the[number of repositories][20]. Its prominance is also evident on Livecoding.tv, where members are diligently creating more videos on JavaScript than any other topic. At the time of this writing, the self-dubbed edutainment site hosts [45,919 JavaScript videos][21]. - -### Top open source JavaScript frameworks and libraries - -Getting back to the topic, JavaScript is blessed with a large community that thrives on improving the technology. Hundreds of JavaScript frameworks and libraries are available to developers, and the good news is that the best ones are open source. For a JavaScript developer, using the best framework or libraries for rapid development is now a necessity. The current market demands rapid development. Also, reinventing the wheel is not a good idea in the current market. Regardless of whether you are new to JavaScript or an experienced JavaScript developer, using libraries and frameworks improves your work significantly. - -Let’s get started. - -### 1\. Angular.js - -[Angular.js][1] is one of the most popular JavaScript frameworks. It is used by developers to create complex web apps. The idea behind Angular.js is its one-page app model. It also supports MVC architecture. With Angular.js, the developer can use JavaScript code in the front end, literally extending the HTML vocabulary. - -Angular.js has improved a great deal since its inception in 2009\. The current stable version of Angular 1 is 1.5.8/1.2.30\. You can also try out Angular 2, a significant improvement over Angular 1, but this framework is still not yet adopted by developers across the world. - -Angular.js uses data binding as one of the main concepts to get work done. The user interacts with the interface. When the interaction is done, the view is then updated with the new values, which in turn interact with the model and ensure everything is synchronized. The DOM gets updated after the underlying logic is executed in the model. - -### 2\. Backbone.js - -Not everyone intends to build a complex web application. Simpler web application frameworks such as [Backbone.js][2] are a great fit for those learning web app development. Backbone.js is a straightforward framework that makes building simple web apps fun and speedy. Just like Angular.js, Backbone.js also comes with MVC support. Other key features of Backbone.js are routing, RESTful API’s support, proper state management, and much more. You can also use Backbone.js to build single page apps. - -The current stable version is 1.3.3 and is available from [GitHub][22]. - -### 3\. D3.js - -[D3.js][3] is an excellent JavaScript library that enables developers to create rich web pages with data manipulation features. D3.js uses SVG, HTML, and CSS to make the magic happen. With D3.js, you can bind data to DOM easily and enable data-driven events. With D3.js, you also can create high-quality data-driven web pages that offer a better understanding of data coupled with great visuals. Check[Hamiltonian Graphs from LCF notation][23], powered by D3.js. - -### 4\. React.js - -[React.js][4] is an interesting JavaScript framework to work with. Unlike other JavaScript frameworks, React.js is ideal for building highly scalable front-end user interfaces. React.js came into existence in 2013 under a BSD license and is growing rapidly thanks to the advantages that it brings to developing complex yet beautiful user interfaces. - -The core idea behind React.js is the virtual DOM. Virtual DOM acts as a mediator between the client-side and the server-side, bringing improved performance. The changes made in the virtual DOM are matched with the server DOM, and only the needed elements are updated, making the process much faster than a traditional UI update. - -You can also use material design with React, enabling you to develop modern web apps with unparalleled performance. - -Check out mittax from Munich, Germany working on React Material-UI in the video below. - -### 6\. jQuery - -[jQuery][5] is a very popular JavaScript library with features such as event handling, animation, and much more. When working on a web project, you don’t want to waste time writing code for simple tasks. jQuery frees you from this with its easy-to-use API. It also works with all the popular web browsers. With jQuery, you can seamlessly control the DOM and also develop an Ajax application, which is in high demand for the last few years. With jQuery, developers don’t have to worry about low-level interactions and can easily develop their web applications faster and easier. - -jQuery also facilitates the separation of HTML and JavaScript code, enabling developers to write clean code with cross-browser compatibility. Moreover, web apps created using jQuery are easily improved and extended in the future. - -### 7\. Ember.js - -[Ember.js][6] is a mix of Angular.js and React.js when it comes to functionality. You can easily see the popularity of Ember.js when observing the support community. New features are added constantly. It works similar to Angular.js when it comes to syncing data. The two-way data exchange ensures that the app is fast and scalable. It also helps developers to create front-end elements. - -When it comes to React.js for similarities, Ember.js provides similar server-side Virtual DOM for better performance and scalability. Ember.js also encourages minimal code writing, offers excellent APIs to work with, and has an excellent community. - -### 8\. Polymer.js - -If you ever thought of creating your own HTML5 elements, you can do so with the help of [Polymer.js][7]. Polymer’s main focus is to provide extended functionality to web developers by giving them the ability to create their own tags. For example, you can create a element with its own functionality that is similar to the