mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-02-25 00:50:15 +08:00
commit
355192102f
143
README.md
143
README.md
@ -56,116 +56,45 @@ LCTT 的组成
|
|||||||
* 2016/02/29 选题 DeadFire 病逝。
|
* 2016/02/29 选题 DeadFire 病逝。
|
||||||
* 2016/05/09 提升 PurlingNayuki 为校对。
|
* 2016/05/09 提升 PurlingNayuki 为校对。
|
||||||
* 2016/09/10 LCTT 三周年。
|
* 2016/09/10 LCTT 三周年。
|
||||||
* 2016/12/24 拟定 LCTT [Core 规则](core.md),并增加新的 Core 成员: @ucasFL、@martin2011qi,及调整一些组。
|
* 2016/12/24 拟定 LCTT [Core 规则](core.md),并增加新的 Core 成员: ucasFL、martin2011qi,及调整一些组。
|
||||||
|
* 2017/03/13 制作了 LCTT 主页、成员列表和成员主页,LCTT 主页将移动至 https://linux.cn/lctt 。
|
||||||
|
* 2017/03/16 提升 GHLandy、bestony、rusking 为新的 Core 成员。创建 Comic 小组。
|
||||||
|
* 2017/04/11 启用头衔制,为各位重要成员颁发头衔。
|
||||||
|
|
||||||
活跃成员
|
核心成员
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
目前 TP 活跃成员有:
|
目前 LCTT 核心成员有:
|
||||||
- Leader @wxy,
|
|
||||||
- Source @oska874,
|
|
||||||
- Proofreaders @jasminepeng,
|
|
||||||
- CORE @geekpi,
|
|
||||||
- CORE @GOLinux,
|
|
||||||
- CORE @ictlyh,
|
|
||||||
- CORE @strugglingyouth,
|
|
||||||
- CORE @FSSlc
|
|
||||||
- CORE @zpl1025,
|
|
||||||
- CORE @runningwater,
|
|
||||||
- CORE @bazz2,
|
|
||||||
- CORE @Vic020,
|
|
||||||
- CORE @alim0x,
|
|
||||||
- CORE @tinyeyeser,
|
|
||||||
- CORE @Locez,
|
|
||||||
- CORE @ucasFL
|
|
||||||
- CORE @martin2011qi
|
|
||||||
- Senior @DeadFire,
|
|
||||||
- Senior @reinoir222,
|
|
||||||
- Senior @vito-L,
|
|
||||||
- Senior @willqian,
|
|
||||||
- Senior @vizv,
|
|
||||||
- Senior @dongfengweixiao,
|
|
||||||
- Senior @PurlingNayuki,
|
|
||||||
- Senior @carolinewuyan,
|
|
||||||
- cposture,
|
|
||||||
- ZTinoZ,
|
|
||||||
- theo-l,
|
|
||||||
- Luoxcat,
|
|
||||||
- GHLandy,
|
|
||||||
- wi-cuckoo,
|
|
||||||
- StdioA,
|
|
||||||
- disylee,
|
|
||||||
- wwy-hust,
|
|
||||||
- felixonmars,
|
|
||||||
- KayGuoWhu,
|
|
||||||
- mr-ping,
|
|
||||||
- wyangsun,
|
|
||||||
- su-kaiyao,
|
|
||||||
- ivo-wang,
|
|
||||||
- cvsher,
|
|
||||||
- OneNewLife
|
|
||||||
- DongShuaike,
|
|
||||||
- flsf,
|
|
||||||
- SPccman,
|
|
||||||
- Stevearzh,
|
|
||||||
- bestony,
|
|
||||||
- Linchenguang,
|
|
||||||
- Linux-pdz,
|
|
||||||
- 2q1w2007,
|
|
||||||
- NearTan,
|
|
||||||
- H-mudcup,
|
|
||||||
- GitFuture,
|
|
||||||
- MikeCoder,
|
|
||||||
- xiqingongzi,
|
|
||||||
- goreliu,
|
|
||||||
- rusking,
|
|
||||||
- jiajia9linuxer,
|
|
||||||
- name1e5s,
|
|
||||||
- TxmszLou,
|
|
||||||
- ZhouJ-sh,
|
|
||||||
- wangjiezhe,
|
|
||||||
- icybreaker,
|
|
||||||
- zky001,
|
|
||||||
- vim-kakali,
|
|
||||||
- shipsw,
|
|
||||||
- LinuxBars,
|
|
||||||
- Moelf,
|
|
||||||
- Chao-zhi
|
|
||||||
- johnhoow,
|
|
||||||
- soooogreen,
|
|
||||||
- kokialoves,
|
|
||||||
- linuhap,
|
|
||||||
- ChrisLeeGit,
|
|
||||||
- blueabysm,
|
|
||||||
- yangmingming,
|
|
||||||
- boredivan,
|
|
||||||
- yechunxiao19,
|
|
||||||
- XLCYun,
|
|
||||||
- KevinSJ,
|
|
||||||
- l3b2w1,
|
|
||||||
- tenght,
|
|
||||||
- firstadream,
|
|
||||||
- coloka,
|
|
||||||
- luoyutiantang,
|
|
||||||
- sonofelice,
|
|
||||||
- scusjs,
|
|
||||||
- woodboow,
|
|
||||||
- 1w2b3l,
|
|
||||||
- JonathanKang,
|
|
||||||
- crowner,
|
|
||||||
- dingdongnigetou,
|
|
||||||
- mtunique,
|
|
||||||
- hyaocuk,
|
|
||||||
- szrlee,
|
|
||||||
- nd0104,
|
|
||||||
- chenzhijun,
|
|
||||||
- frankatlingingdigital,
|
|
||||||
- willcoderwang,
|
|
||||||
- liuaiping,
|
|
||||||
- rogetfan,
|
|
||||||
- JeffDing,
|
|
||||||
|
|
||||||
(按增加行数排名前百,更新于2016/12/24)
|
- 组长 @wxy,
|
||||||
|
- 选题 @oska874,
|
||||||
|
- 校对 @jasminepeng,
|
||||||
|
- 钻石译者 @geekpi,
|
||||||
|
- 钻石译者 @GOLinux,
|
||||||
|
- 钻石译者 @ictlyh,
|
||||||
|
- 技术组长 @bestony,
|
||||||
|
- 漫画组长 @GHLandy,
|
||||||
|
- LFS 组长 @martin2011qi,
|
||||||
|
- 核心成员 @strugglingyouth,
|
||||||
|
- 核心成员 @FSSlc,
|
||||||
|
- 核心成员 @zpl1025,
|
||||||
|
- 核心成员 @runningwater,
|
||||||
|
- 核心成员 @bazz2,
|
||||||
|
- 核心成员 @Vic020,
|
||||||
|
- 核心成员 @alim0x,
|
||||||
|
- 核心成员 @tinyeyeser,
|
||||||
|
- 核心成员 @Locez,
|
||||||
|
- 核心成员 @ucasFL,
|
||||||
|
- 核心成员 @rusking,
|
||||||
|
- 前任选题 @DeadFire,
|
||||||
|
- 前任校对 @reinoir222,
|
||||||
|
- 前任校对 @PurlingNayuki,
|
||||||
|
- 前任校对 @carolinewuyan,
|
||||||
|
- 功勋成员 @vito-L,
|
||||||
|
- 功勋成员 @willqian,
|
||||||
|
- 功勋成员 @vizv,
|
||||||
|
- 功勋成员 @dongfengweixiao,
|
||||||
|
|
||||||
谢谢大家的支持!
|
全部成员列表请参见: https://linux.cn/lctt-list/ 。
|
||||||
|
|
||||||
|
谢谢大家的支持!
|
@ -0,0 +1,123 @@
|
|||||||
|
连接到 Linux 服务器时首先要运行的 5 个命令
|
||||||
|
============================================================
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
[Creative Commons Attribution][1][Sylvain Kalache][2][当我连接到 Linux 服务器时运行的前 5 个命令][3]
|
||||||
|
|
||||||
|
作为一个系统管理员/SRE 工作 5 年后,我知道当我连接到一台 Linux 服务器时我首先应该做什么。这里有一系列关于服务器你必须了解的信息,以便你可以(在大部分时间里)更好的调试该服务器。
|
||||||
|
|
||||||
|
### 连上 Linux 服务器的第一分钟
|
||||||
|
|
||||||
|
这些命令对于有经验的软件工程师来说都非常熟悉,但我意识到对于一个刚开始接触 Linux 系统的初学者来说,例如我在 [Holberton 学校][5]任教的学生,却并非如此。这也是我为什么决定分享当我连上 Linux 服务器首先要运行的前 5 个命令的原因。
|
||||||
|
|
||||||
|
```
|
||||||
|
w
|
||||||
|
history
|
||||||
|
top
|
||||||
|
df
|
||||||
|
netstat
|
||||||
|
```
|
||||||
|
|
||||||
|
这 5 个命令在任何一个 Linux 发行版中都有,因此不需要额外的安装步骤你就可以直接使用它们。
|
||||||
|
|
||||||
|
### w:
|
||||||
|
|
||||||
|
```
|
||||||
|
[ubuntu@ip-172-31-48-251 ~]$ w
|
||||||
|
23:40:25 up 273 days, 20:52, 2 users, load average: 0.33, 0.14, 0.12
|
||||||
|
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
|
||||||
|
ubuntu pts/0 104-7-14-91.ligh 23:39 0.00s 0.02s 0.00s w
|
||||||
|
root pts/1 104-7-14-91.ligh 23:40 5.00s 0.01s 0.03s sshd: root [priv]
|
||||||
|
[ubuntu@ip-172-31-48-251 ~]$
|
||||||
|
```
|
||||||
|
|
||||||
|
这里列出了很多有用的信息。首先,你可以看到服务器运行时间 [uptime][6],也就是服务器持续运行的时间。然后你可以看到有哪些用户连接到了服务器,当你要确认你没有影响你同事工作的时候这非常有用。最后 [load average][7] 能很好的向你展示服务器的健康状态。
|
||||||
|
|
||||||
|
### history
|
||||||
|
|
||||||
|
```
|
||||||
|
[ubuntu@ip-172-31-48-251 ~]$ history
|
||||||
|
1 cd /var/app/current/log/
|
||||||
|
2 ls -al
|
||||||
|
3 tail -n 3000 production.log
|
||||||
|
4 service apache2 status
|
||||||
|
5 cat ../../app/services/discourse_service.rb
|
||||||
|
```
|
||||||
|
|
||||||
|
`history` 能告诉你当前连接的用户之前运行了什么命令。你可以看到很多关于这台机器之前在执行什么类型的任务、可能出现了什么错误、可以从哪里开始调试工作等信息。
|
||||||
|
|
||||||
|
### top
|
||||||
|
|
||||||
|
```
|
||||||
|
top - 23:47:54 up 273 days, 21:00, 2 users, load average: 0.02, 0.07, 0.10
|
||||||
|
Tasks: 79 total, 2 running, 77 sleeping, 0 stopped, 0 zombie
|
||||||
|
Cpu(s): 1.0%us, 0.0%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.3%st
|
||||||
|
Mem: 3842624k total, 3128036k used, 714588k free, 148860k buffers
|
||||||
|
Swap: 0k total, 0k used, 0k free, 1052320k cached
|
||||||
|
|
||||||
|
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
|
||||||
|
21095 root 20 0 513m 21m 4980 S 1.0 0.6 1237:05 python
|
||||||
|
1380 healthd 20 0 669m 36m 5712 S 0.3 1.0 265:43.82 ruby
|
||||||
|
19703 dd-agent 20 0 142m 25m 4912 S 0.3 0.7 11:32.32 python
|
||||||
|
1 root 20 0 19596 1628 1284 S 0.0 0.0 0:10.64 init
|
||||||
|
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
|
||||||
|
3 root 20 0 0 0 0 S 0.0 0.0 27:31.42 ksoftirqd/0
|
||||||
|
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
|
||||||
|
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
|
||||||
|
7 root 20 0 0 0 0 S 0.0 0.0 42:51.60 rcu_sched
|
||||||
|
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
|
||||||
|
```
|
||||||
|
|
||||||
|
你想知道的下一个信息:服务器当前在执行什么工作。使用 `top` 命令你可以看到所有正在执行的进程,然后可以按照 CPU、内存使用进行排序,并找到占用资源的进程。
|
||||||
|
|
||||||
|
### df
|
||||||
|
|
||||||
|
```
|
||||||
|
[ubuntu@ip-172-31-48-251 ~]$ df -h
|
||||||
|
Filesystem Size Used Avail Use% Mounted on
|
||||||
|
/dev/xvda1 7.8G 4.5G 3.3G 58% /
|
||||||
|
devtmpfs 1.9G 12K 1.9G 1% /dev
|
||||||
|
tmpfs 1.9G 0 1.9G 0% /dev/shm
|
||||||
|
```
|
||||||
|
|
||||||
|
你服务器正常工作需要的下一个重要资源就是磁盘空间。磁盘空间消耗完是非常典型的问题。
|
||||||
|
|
||||||
|
### netstat
|
||||||
|
|
||||||
|
```
|
||||||
|
[ubuntu@ip-172-31-48-251 ec2-user]# netstat -lp
|
||||||
|
Active Internet connections (only servers)
|
||||||
|
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
|
||||||
|
tcp 0 0 *:http *:* LISTEN 1637/nginx
|
||||||
|
tcp 0 0 *:ssh *:* LISTEN 1209/sshd
|
||||||
|
tcp 0 0 localhost:smtp *:* LISTEN 1241/sendmail
|
||||||
|
tcp 0 0 localhost:17123 *:* LISTEN 19703/python
|
||||||
|
tcp 0 0 localhost:22221 *:* LISTEN 1380/puma 2.11.1 (t
|
||||||
|
tcp 0 0 *:4242 *:* LISTEN 18904/jsvc.exec
|
||||||
|
tcp 0 0 *:ssh *:* LISTEN 1209/sshd
|
||||||
|
```
|
||||||
|
|
||||||
|
计算机已成为我们世界的重要一部分,因为它们有通过网络进行相互交流的能力。知道你的服务器正在监听什么端口、IP地址是什么、以及哪些进程在使用它们,这对于你来说都非常重要。
|
||||||
|
|
||||||
|
显然这个列表会随着你的目的和你已有的信息而变化。例如,当你需要调试性能的时候,[Netflix 就有一个自定义的列表][8]。你有任何不在我 Top 5 中的有用命令吗?在评论部分和我们一起分享吧!
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.linux.com/blog/first-5-commands-when-i-connect-linux-server
|
||||||
|
|
||||||
|
作者:[SYLVAIN KALACHE][a]
|
||||||
|
译者:[ictlyh](https://github.com/ictlyh)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.linux.com/users/sylvainkalache
|
||||||
|
[1]:https://www.linux.com/licenses/category/creative-commons-attribution
|
||||||
|
[2]:https://twitter.com/sylvainkalache
|
||||||
|
[3]:https://www.flickr.com/photos/sylvainkalache/29587668230/in/dateposted/
|
||||||
|
[4]:https://www.linux.com/files/images/first-5-commandsjpg-0
|
||||||
|
[5]:https://www.holbertonschool.com/
|
||||||
|
[6]:http://whatis.techtarget.com/definition/uptime-and-downtime
|
||||||
|
[7]:http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
|
||||||
|
[8]:http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html
|
@ -0,0 +1,87 @@
|
|||||||
|
开发者的实用 Vim 插件(三)
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
目前为止,在一系列介绍 vim 插件文章中,我们介绍了使用 Pathogen 插件管理包安装基本的 vim 插件,也提及了另外三个插件:[Tagbar、delimitMate](https://linux.cn/article-7901-1.html) 和 [Syntastic](https://linux.cn/article-7909-1.html)。现在,在最后一部分,我们将介绍另一个十分有用的插件 a.vim。
|
||||||
|
|
||||||
|
请注意所有本篇教程所提及的例子、命令和指导,它们已经在 Ubuntu 16.04 测试完毕,vim 使用版本为 vim7.4 (LCTT 译注:Ubuntu 16.04 的默认版本)
|
||||||
|
|
||||||
|
### A.vim
|
||||||
|
|
||||||
|
如果你一直用像 C、C++ 这样的语言进行开发工作,你一定有这样的感触:我特么已经数不清我在头文件和源代码之间切换过多少次了。我想说的是,确实,这个操作十分基本,十分频繁。
|
||||||
|
|
||||||
|
尽管使用基于 GUI(图形界面)的 IDE(集成开发环境)非常容易通过鼠标的双击切换文件,但是如果你是资深 vim 粉,习惯用命令工作就有点尴尬了。但是不要害怕,我有秘籍--插件 a.vim。它可以让你解决尴尬,专治各种文件切换。
|
||||||
|
|
||||||
|
在我们介绍这个神器用法之前,我必须强调一点:这个插件的安装过程和我们其他篇介绍的不太一样,步骤如下:
|
||||||
|
|
||||||
|
* 首先,你需要下载两个文件(a.vim 和 alternate.txt),你可以在[这里][1]找到它们。
|
||||||
|
* 接下来,创建如下目录:`~/.vim/bundle/avim`、`~/.vim/bundle/avim/doc`、 `~/.vim/bundle/avim/plugin` 和 `~/.vim/bundle/autoload`。
|
||||||
|
* 创建好目录之后,将 `a.vim` 放到 `~/.vim/bundle/avim/plugin` 和 `~/.vim/bundle/autoload`,以及将 `alternate.txt` 放到 `~/.vim/bundle/avim/doc`。
|
||||||
|
|
||||||
|
就是这样,如果上述步骤被你成功完成,你的系统就会安装好这个插件。
|
||||||
|
|
||||||
|
使用这个插件十分简单,你仅仅需要运行这个命令 `:A` 如果目前的文件是源文件(比如 `test.c`),这个神器就会帮你打开 `test.c` 对应的头文件(`test.h`),反之亦然。
|
||||||
|
|
||||||
|
当然咯,不是每个文件对应的头文件都存在。这种情况下,如果那你运行 `:A` 命令,神器就会为你新建一个文件。比如,如果 `test.h` 不存在,那么运行此命令就会帮你创建一个 `test.h`,然后打开它。
|
||||||
|
|
||||||
|
如果你不想要神器开启此功能,你可以在你的家目录的隐藏文件 `.vimrc` 中写入 `g:alternateNonDefaultAlternate` 变量,并且赋给它一个非零值即可。
|
||||||
|
|
||||||
|
还有一种情况也很普遍,你需要打开的文件并非是当前源代码的头文件。比如你目前在 `test.c` 你想打开 `men.h` 这个头文件,那么你可以输入这个命令 `:IH <filename>` ,毋需赘言,你肯定要在后面输入你要打开的的文件名称 `<filename>`。
|
||||||
|
|
||||||
|
目前为止,我们讨论的功能都仅限于你当前文件和要操作的文件都在同一个目录去实现。但是,你也知道,我们还有特殊情况,我是说,许多项目中头文件与对应的源文件并不一定在同一目录下。
|
||||||
|
|
||||||
|
为了搞定这个问题,你要使用这个 `g:alternateSearchPath` 这个变量。官方文档是这么[解释](https://github.com/csliu/a.vim/blob/master/doc/alternate.txt)的:
|
||||||
|
|
||||||
|
> 这个插件可以让用户配置它的搜索源文件和头文件的搜索路径。这个搜索路径可以通过设置 `g:alternateSearchPath` 这个变量的值指定。默认的设定如下:
|
||||||
|
|
||||||
|
> ```
|
||||||
|
> g:alternateSearchPath = 'sfr:../source,sfr:../src,sfr:../include,sfr:../inc'
|
||||||
|
> ```
|
||||||
|
|
||||||
|
> 使用这个代码表示神器将搜索 `../source`、`../src`、`../include` 和 `../inc` 下所有与目标文件相关的文件。 `g:alternateSearchPath` 变量的值由前缀和路径组成,每个单元用逗号隔开。 `sfr` 前缀是指后面的路径是相对于目前文件的,`wdr` 前缀是指目录是相对于目前的工作目录, `abs` 是指路径是绝对路径。如果不指定前缀,那么默认为 `sfr`。
|
||||||
|
|
||||||
|
如果我们前文所提及的特性就能让你觉得很炫酷,那我不得不告诉你,这才哪跟哪。还有一个十分有用的功能是分割 Vim 屏幕,这样你就可以同时看到头文件和相应的源文件。
|
||||||
|
|
||||||
|
哦,还有,你还可以选择垂直或者水平分割。全凭你心意。使用 `:AS` 命令可以水平分割,使用 `:AV` 可以垂直分割。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][5]
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][6]
|
||||||
|
|
||||||
|
使用 `:A` 命令在已经打开的文件中切换。
|
||||||
|
|
||||||
|
这个插件还可以让你在同一个 Vim 窗口中不同选项卡中打开多个相应的文件,你键入这个命令 `:AT`。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][7]
|
||||||
|
|
||||||
|
当然,你可以用这些命令 `:AV`、`:AS` 和 `:AT`,也可以使用这些命令 `:IHV`、`:IHS` 和 `:IHT`。
|
||||||
|
|
||||||
|
### 最后
|
||||||
|
|
||||||
|
还有许多和编程相关的 Vim 的插件,我们在这个三篇系列主要讨论的是,如果你为你的软件开发工作安装了合适的插件,你就会明白为什么 vim 被叫做编辑器之神。
|
||||||
|
|
||||||
|
当然,我们在这只关注编程方面,对于那些把 Vim 当做日常文档编辑器的人来说,你也应该了解一些 Vim 的插件,让你的编辑更好,更高效.我们就改日再谈这个问题吧。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-3/
|
||||||
|
|
||||||
|
作者:[Ansh][a]
|
||||||
|
译者:[Taylor1024](https://github.com/Taylor1024)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-3/
|
||||||
|
[1]:http://www.vim.org/scripts/script.php?script_id=31
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers/
|
||||||
|
[3]:https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-2-syntastic/
|
||||||
|
[4]:https://github.com/csliu/a.vim/blob/master/doc/alternate.txt
|
||||||
|
[5]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers-3/big/vim-ver-split.png
|
||||||
|
[6]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers-3/big/vim-hor-split.png
|
||||||
|
[7]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers-3/big/vim-tab1.png
|
79
published/20161028 Configuring WINE with Winetricks.md
Normal file
79
published/20161028 Configuring WINE with Winetricks.md
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
用 Winetricks 配置 WINE
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
### 简介
|
||||||
|
|
||||||
|
如果 `winecfg` (WINE 的配置工具)是一把螺丝刀,那么 `winetricks` 就是一个钻床。它们各有特长,但是 `winetricks` 真的是一个强大的多的工具。实际上,它甚至可以启动 `winecfg`。
|
||||||
|
|
||||||
|
`winecfg` 让你可以改变 WINE 本身的设置,而 `winetricks` 则可以让你改造实际的 Windows 层,它可以让你安装 Windows 重要的系统组件,比如 .dll 文件和系统字体,还可以允许你修改 Windows 注册表的信息。它还有任务管理器、卸载工具和文件浏览器。
|
||||||
|
|
||||||
|
尽管 `winetricks` 可以做以上这些工作,但是大部分时间我们用到的功能也就是管理 `dll` 文件和 Windows 组件。
|
||||||
|
|
||||||
|
### 安装
|
||||||
|
|
||||||
|
和 `winecfg` 不同,`winetricks` 不是集成在 WINE 中的。这样也没什么问题,由于它实际上只是个脚本文件,你可以在各种发行版上很轻松地下载和使用它。现在,许多发行版把 `winetricks` 打包。只要你喜欢,你也可以下载打包后的版本。不过,有些包可能会比较老旧,所以本指南将使用脚本,毕竟脚本通用且更新及时。默认情况下,它的图形界面有些丑,所以你要是想个性化界面,最好通过你的发行版的包管理器安装一个 `zenity`。
|
||||||
|
|
||||||
|
现在假定你想在你的 `/home` 目录下配置 `winetricks`。 `cd` 到此,然后 `wget` 这个脚本。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ cd ~
|
||||||
|
|
||||||
|
$ wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
|
||||||
|
```
|
||||||
|
|
||||||
|
然后,给这个脚本可执行权限。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ chmod+x winetricks
|
||||||
|
```
|
||||||
|
|
||||||
|
`winetricks` 可以通过命令行运行,在行末指定要安装的东西。但是大部分情况下,你都不知道 .dll 文件或者是你想安装字体确切的名字,那么,这时候最好利用图形界面程序。启动这个程序和其他程序没什么不同,就是在末尾什么都别输入就行了。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ~/winetricks
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
当窗口第一次打开时候,将会给你一个有 <ruby>“查看帮助”<rt>View help</rt></ruby> 和 <ruby>“安装应用”<rt>Install an application</rt></ruby> 选项的菜单。一般情况下,我们选择 <ruby>“选择默认的 wineprefix”<rt>Select the default wineprefix</rt></ruby>,这将是你主要使用的选项。其他的也能用,但是不推荐使用。接下来,单击 “OK”,你就会进入到 WINE prefix 的配置菜单,你可以在这完成所有你要使用 `winetricks` 完成的事情。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 字体
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
字体一直很重要,一些应用程序没有字体就没法正常的加载。`winetricks` 可以轻松地安装许多常用 Windows 字体.在配置菜单中,选中 <ruby>“安装字体”<rt>Install a font</rt></ruby> 单选按钮,然后点击 “OK” 即可。
|
||||||
|
|
||||||
|
然后你就会得到一列字体清单,它们都有着相对应的复选框。你很难确切知道你到底需要什么字体,所以一般按每个应用决定使用什么字体,我们可以先安装一款插件 `corefonts`,它包含了大多数 Windows 系统中应用程序所设定的字体。安装它也十分简单,所以可以试试。
|
||||||
|
|
||||||
|
要安装 `corefonts` ,请选择相应的复选框,然后点击 “OK”,你就会看到和在 Windows 下差不多的提示,字体就会被安装了。完成了这个插件的安装,你就会回到先前的菜单界面。接下来就是安装你需要的别的插件,步骤相同。
|
||||||
|
|
||||||
|
### .dll 文件和组件
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
`winetricks` 安装 Windows 下的 .dll 文件和别的组件也十分简单。如果你需要安装的话,在菜单页选择 <ruby>“安装 Windows DLL 或组件”<rt>Install a Windows DLL or component</rt></ruby>,然后点击 “OK”。
|
||||||
|
|
||||||
|
窗口就会进入到另一个菜单界面,其中包含可用的 dll 和其他 Windows 组件。在相应的复选框进行选择,点击 “OK”。脚本就会下载你选择的组件,接着通过 Windows 一般的安装进程进行安装。像 Windows 机器上安装那样跟着提示往下走。可能会有报错信息。很多时候,Windows 安装程序会报错,但是你接着会收到来自 `winetricks` 窗口的消息,说明它正在绕过此问题。这很正常。由于组件之间的相互依赖关系,你可能会也可能不会看到成功安装的信息。只要确保安装完成时候,菜单页中你的选项仍旧处于被选中状态就行了。
|
||||||
|
|
||||||
|
### 注册表
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
你不需要常常编辑注册表中 WINE 对应的值,但是对于有些程序确实需要。技术层面来讲,`winetricks` 不向用户提供注册表编辑器,但是要访问编辑器也很容易。在菜单页选中<ruby>“运行注册表编辑”<rt>Run regedit</rt></ruby>,点击 “OK”,你就可以打开一个简单的注册表编辑器。事实上,写入注册表的值有点超出本篇引导文章的范围了,但是我还要多说一句,如果你已经知道你在干什么,增加一个注册表条目不是很难。注册表有点像电子表格,你可以将正确的值填入右面的格子中。这个说的有点过于简单,但是就是这样的。你可以在以下地址精准地找到你需要在 WINE Appdp 所要填入或编辑的东西。 https://appdb.winehq.org。
|
||||||
|
|
||||||
|
### 结束语
|
||||||
|
|
||||||
|
很明显 `winetricks` 还有许多许多强大的功能,但是本篇指南的目的只是给你一点基础知识,以使用这个强大的工具,使你的程序通过 WINE 运行。WINE Appdb 对每个程序都有相应的设置,将来会越来越丰富。
|
||||||
|
|
||||||
|
------------------
|
||||||
|
via: https://linuxconfig.org/configuring-wine-with-winetricks
|
||||||
|
|
||||||
|
作者:Nick Congleton
|
||||||
|
译者:[Taylor1024](https://github.com/Taylor1024)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
|
@ -0,0 +1,55 @@
|
|||||||
|
用 Apache Calcite 构建强大的实时流式应用
|
||||||
|
==============
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Calcite 是一个数据框架,它允许你创建自定义数据库功能,微软开发者 Atri Sharma 在 Apache 2016 年 11 月 14-16 日在西班牙塞维利亚举行的 Big Data Europe 中对此进行了讲演。
|
||||||
|
|
||||||
|
[Creative Commons Zero][2] Wikimedia Commons: Parent Géry
|
||||||
|
|
||||||
|
[Apache Calcite][7] 数据管理框架包含了典型的数据库管理系统的许多部分,但省略了如数据的存储和处理数据的算法等其他部分。 Microsoft 的 Azure Data Lake 的软件工程师 Atri Sharma 在西班牙塞维利亚的 [Apache:Big Data][6] 会议上的演讲中讨论了使用 [Apache Calcite][5] 的高级查询规划能力。我们与 Sharma 讨论了解有关 Calcite 的更多信息,以及现有程序如何利用其功能。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*Atri Sharma,微软 Azure Data Lake 的软件工程师,已经[授权使用][1]*
|
||||||
|
|
||||||
|
**Linux.com:你能提供一些关于 Apache Calcite 的背景吗? 它有什么作用?
|
||||||
|
|
||||||
|
Atri Sharma:Calcite 是一个框架,它是许多数据库内核的基础。Calcite 允许你构建自定义的数据库功能来使用 Calcite 所需的资源。例如,Hive 使用 Calcite 进行基于成本的查询优化、Drill 和 Kylin 使用 Calcite 进行 SQL 解析和优化、Apex 使用 Calcite 进行流式 SQL。
|
||||||
|
|
||||||
|
**Linux.com:有哪些是使得 Apache Calcite 与其他框架不同的特性?
|
||||||
|
|
||||||
|
Atri:Calcite 是独一无二的,它允许你建立自己的数据平台。 Calcite 不直接管理你的数据,而是允许你使用 Calcite 的库来定义你自己的组件。 例如,它允许使用 Calcite 中可用的 Planner 定义你的自定义查询优化器,而不是提供通用查询优化器。
|
||||||
|
|
||||||
|
**Linux.com:Apache Calcite 本身不会存储或处理数据。 它如何影响程序开发?
|
||||||
|
|
||||||
|
Atri:Calcite 是数据库内核中的依赖项。它针对的是希望扩展其功能,而无需从头开始编写大量功能的的数据管理平台。
|
||||||
|
|
||||||
|
** Linux.com:谁应该使用它? 你能举几个例子吗?**
|
||||||
|
|
||||||
|
Atri:任何旨在扩展其功能的数据管理平台都应使用 Calcite。 我们是你下一个高性能数据库的基础!
|
||||||
|
|
||||||
|
具体来说,我认为最大的例子是 Hive 使用 Calcite 用于查询优化、Flink 解析和流 SQL 处理。 Hive 和 Flink 是成熟的数据管理引擎,并将 Calcite 用于相当专业的用途。这是对 Calcite 应用进一步加强数据管理平台核心的一个好的案例研究。
|
||||||
|
|
||||||
|
**Linux.com:你有哪些期待的新功能?
|
||||||
|
|
||||||
|
Atri:流式 SQL 增强是令我非常兴奋的事情。这些功能令人兴奋,因为它们将使 Calcite 的用户能够更快地开发实时流式应用程序,并且这些程序的强大和功能将是多方面的。流式应用程序是新的事实,并且在流式 SQL 中具有查询优化的优点对于大部分人将是非常有用的。此外,关于暂存表的讨论还在进行,所以请继续关注!
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.linux.com/news/build-strong-real-time-streaming-apps-apache-calcite
|
||||||
|
|
||||||
|
作者:[AMBER ANKERHOLZ][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 组织编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.linux.com/users/aankerholz
|
||||||
|
[1]:https://www.linux.com/licenses/category/used-permission
|
||||||
|
[2]:https://www.linux.com/licenses/category/creative-commons-zero
|
||||||
|
[3]:https://www.linux.com/files/images/atri-sharmajpg
|
||||||
|
[4]:https://www.linux.com/files/images/calcitejpg
|
||||||
|
[5]:https://calcite.apache.org/
|
||||||
|
[6]:http://events.linuxfoundation.org/events/apache-big-data-europe
|
||||||
|
[7]:https://calcite.apache.org/
|
@ -1,14 +1,14 @@
|
|||||||
使用IBM Bluemix构建,部署和管理自定义应用程序
|
使用 IBM Bluemix 构建,部署和管理自定义应用程序
|
||||||
============================================================
|
============================================================
|
||||||
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
IBM Bluemix 为开发人员提供了构建,部署和管理自定义应用程序的机会。Bluemix 建立在 Cloud Foundry 上。它支持多种编程语言,包括 IBM 的 OpenWhisk ,还允许开发人员无需资源管理就调用任何函数。
|
IBM Bluemix 为开发人员提供了构建、部署和管理自定义应用程序的机会。Bluemix 建立在 Cloud Foundry 上。它支持多种编程语言,包括 IBM 的 OpenWhisk ,还允许开发人员无需资源管理就调用任何函数。
|
||||||
|
|
||||||
Bluemix 是由 IBM 实现的开放标准的基于云的平台。它具有开放的架构,其允许组织能够在云上创建,开发和管理其应用程序。它基于 Cloud Foundry ,因此可以被视为平台即服务(PaaS)。使用 Bluemix,开发人员不必关心云端配置,可以专注于他们的应用程序。 云端配置将由 Bluemix 自动完成。
|
Bluemix 是由 IBM 实现的基于开放标准的云平台。它具有开放的架构,其允许组织能够在云上创建、开发和管理其应用程序。它基于 Cloud Foundry ,因此可以被视为平台即服务(PaaS)。使用 Bluemix,开发人员不必关心云端配置,可以专注于他们的应用程序。 云端配置将由 Bluemix 自动完成。
|
||||||
|
|
||||||
Bluemix 还提供了一个仪表板,通过它,开发人员可以创建,管理和查看服务和应用程序,同时还可以监控资源使用情况。
|
Bluemix 还提供了一个仪表板,通过它,开发人员可以创建,管理和查看服务和应用程序,同时还可以监控资源使用情况。
|
||||||
|
|
||||||
它支持以下编程语言:
|
它支持以下编程语言:
|
||||||
|
|
||||||
* Java
|
* Java
|
||||||
@ -21,143 +21,132 @@ Bluemix 还提供了一个仪表板,通过它,开发人员可以创建,管
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
图1 IBM Bluemix 概述
|
*图1 IBM Bluemix 概述*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
图2 IBM Bluemix 体系结构
|
*图2 IBM Bluemix 体系结构*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
图3 在 IBM Bluemix 中创建组织
|
*图3 在 IBM Bluemix 中创建组织*
|
||||||
|
|
||||||
**IBM Bluemix 如何工作**
|
### IBM Bluemix 如何工作
|
||||||
|
|
||||||
Bluemix 构建在 IBM 的 SoftLayer IaaS(基础架构即服务)之上。它使用 Cloud Foundry 作为开源 PaaS 平台。一切起于通过 Cloud Foundry 来推送代码,它扮演着整合代码和根据编写应用所使用的编程语言所适配的运行时环境的角色。IBM 服务、第三方服务或社区构建的服务可用于不同的功能。安全连接器可用于连接本地系统到云。
|
Bluemix 构建在 IBM 的 SoftLayer IaaS(基础架构即服务)之上。它使用 Cloud Foundry 作为开源 PaaS 平台。一切起于通过 Cloud Foundry 来推送代码,它扮演着将代码和编写应用所使用的编程语言运行时环境整合起来的角色。IBM 服务、第三方服务或社区构建的服务可用于不同的功能。安全连接器可用于将本地系统连接到云。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
图4 在 IBM Bluemix 中设置空间
|
*图4 在 IBM Bluemix 中设置空间*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
图5 应用程序模板
|
*图5 应用程序模板*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
图6 IBM Bluemix 支持的编程语言
|
*图6 IBM Bluemix 支持的编程语言*
|
||||||
|
|
||||||
|
### 在 Bluemix 中创建应用程序
|
||||||
|
|
||||||
**在 Bluemix 中创建应用程序**
|
|
||||||
在本文中,我们将使用 Liberty for Java 的入门包在 IBM Bluemix 中创建一个示例“Hello World”应用程序,只需几个简单的步骤。
|
在本文中,我们将使用 Liberty for Java 的入门包在 IBM Bluemix 中创建一个示例“Hello World”应用程序,只需几个简单的步骤。
|
||||||
|
|
||||||
1. 打开 [_https://console.ng.bluemix.net/registration/_][2]
|
1、 打开 [https://console.ng.bluemix.net/registration/][2]
|
||||||
|
|
||||||
2. 注册 Bluemix 帐户
|
2、 注册 Bluemix 帐户
|
||||||
|
|
||||||
3. 点击邮件中的确认链接完成注册过程
|
3、 点击邮件中的确认链接完成注册过程
|
||||||
|
|
||||||
4. 输入您的电子邮件 ID,然后点击 _Continue_ 进行登录
|
4、 输入您的电子邮件 ID,然后点击 Continue 进行登录
|
||||||
|
|
||||||
5. 输入密码并点击 _Log in_
|
5、 输入密码并点击 Log in
|
||||||
|
|
||||||
6. 进入 _Set up_ -> _Environment_ 设置特定区域中的资源共享
|
6、 进入 Set up -> Environment 设置特定区域中的资源共享
|
||||||
|
|
||||||
7. 创建空间方便管理访问控制和在 Bluemix 中回滚操作。 我们可以将空间映射到多个开发阶段,如 dev, test,uat,pre-prod 和 prod
|
7、 创建空间方便管理访问控制和在 Bluemix 中回滚操作。 我们可以将空间映射到多个开发阶段,如 dev, test,uat,pre-prod 和 prod
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
图7 命名应用程序
|
*图7 命名应用程序*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
图8 了解应用程序何时准备就绪
|
*图8 了解应用程序何时准备就绪*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
图9 IBM Bluemix Java 应用程序
|
*图9 IBM Bluemix Java 应用程序*
|
||||||
|
|
||||||
8. 完成初始配置后,单击 _I'm ready_ -> _Good to Go_ !
|
8、 完成初始配置后,单击 I'm ready -> Good to Go !
|
||||||
|
|
||||||
9. 成功登录后,此时检查 IBM Bluemix 仪表板,特别是 Cloud Foundry Apps(其中2GB可用)和 Virtual Server(其中0个实例可用)的部分
|
9、 成功登录后,此时检查 IBM Bluemix 仪表板,特别是 Cloud Foundry Apps(其中 2GB 可用)和 Virtual Server(其中 0 个实例可用)的部分
|
||||||
|
|
||||||
10. 点击 _Create app_,选择应用创建模板。在我们的例子中,我们将使用一个 Web 应用程序
|
10、 点击 Create app,选择应用创建模板。在我们的例子中,我们将使用一个 Web 应用程序
|
||||||
|
|
||||||
11. 如何开始?单击 Liberty for Java ,然后查看其描述
|
11、 如何开始?单击 Liberty for Java ,然后查看其描述
|
||||||
|
|
||||||
12. 单击 _Continue_
|
12、 单击 Continue
|
||||||
|
|
||||||
13. 为新应用命名。对于本文,让我们使用 osfy-bluemix-tutorial 命名然后单击 _Finish_
|
13、 为新应用命名。对于本文,让我们使用 osfy-bluemix-tutorial 命名然后单击 Finish
|
||||||
|
|
||||||
14. 在 Bluemix 上创建资源和托管应用程序需要等待一些时间。
|
14、 在 Bluemix 上创建资源和托管应用程序需要等待一些时间
|
||||||
|
|
||||||
15. 几分钟后,应用程式就会开始运作。注意应用程序的URL。
|
15、 几分钟后,应用程式就会开始运作。注意应用程序的URL
|
||||||
|
|
||||||
16. 访问应用程序的URL _http://osfy-bluemix-tutorial.au-syd.mybluemix.net/_, Bingo,我们的第一个在 IBM Bluemix 上的 Java 应用程序成功运行。
|
16、 访问应用程序的URL http://osfy-bluemix-tutorial.au-syd.mybluemix.net/, 不错,我们的第一个在 IBM Bluemix 上的 Java 应用程序成功运行
|
||||||
|
|
||||||
17. 为了检查源代码,请单击 _Files_ 并在门户中导航到不同文件和文件夹
|
17、 为了检查源代码,请单击 Files 并在门户中导航到不同文件和文件夹
|
||||||
|
|
||||||
18. _Logs_ 部分提供包括从应用程序的创建时起的所有活动日志。
|
18、 Logs 部分提供包括从应用程序的创建时起的所有活动日志。
|
||||||
|
|
||||||
19. _Environment Variables_ 部分提供关于 VCAP_Services 的所有环境变量以及用户定义的环境变量的详细信息
|
19、 Environment Variables 部分提供关于 VCAP\_Services 的所有环境变量以及用户定义的环境变量的详细信息
|
||||||
|
|
||||||
20. 要检查应用程序的资源消耗,需要到 Liberty for Java 那一部分。
|
20、 要检查应用程序的资源消耗,需要到 Liberty for Java 那一部分。
|
||||||
|
|
||||||
21. 默认情况下,每个应用程序的 _Overview_ 部分包含资源,应用程序的运行状况和活动日志的详细信息
|
21、 默认情况下,每个应用程序的 Overview 部分包含资源,应用程序的运行状况和活动日志的详细信息
|
||||||
|
|
||||||
22. 打开 Eclipse,转到帮助菜单,然后单击 _Eclipse Marketplace_
|
22、 打开 Eclipse,转到帮助菜单,然后单击 _Eclipse Marketplace_
|
||||||
|
|
||||||
23. 查找 _IBM Eclipse tools for Bluemix_ 并单击 _Install_
|
23、 查找 IBM Eclipse tools for Bluemix 并单击 Install
|
||||||
|
|
||||||
24. 确认所选的功能并将其安装在 Eclipse 中
|
24、 确认所选的功能并将其安装在 Eclipse 中
|
||||||
|
|
||||||
25. 下载应用程序启动器代码。点击 _File Menu_,将它导入到 Eclipse 中,选择 _Import Existing Projects_ -> _Workspace_, 然后开始修改代码
|
25、 下载应用程序启动器代码。点击 File Menu,将它导入到 Eclipse 中,选择 Import Existing Projects -> Workspace, 然后开始修改代码
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
图10 Java 应用程序源文件
|
*图10 Java 应用程序源文件*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
图11 Java 应用程序日志
|
*图11 Java 应用程序日志*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
图12 Java 应用程序 - Liberty for Java
|
*图12 Java 应用程序 - Liberty for Java*
|
||||||
|
|
||||||
|
### 为什么选择 IBM Bluemix?
|
||||||
|
|
||||||
**为什么选择 IBM Bluemix?**
|
|
||||||
以下是使用 IBM Bluemix 的一些令人信服的理由:
|
以下是使用 IBM Bluemix 的一些令人信服的理由:
|
||||||
|
|
||||||
* 支持多种语言和平台
|
* 支持多种语言和平台
|
||||||
* 免费试用
|
* 免费试用
|
||||||
|
|
||||||
1. 简化的注册过程
|
1. 简化的注册过程
|
||||||
|
|
||||||
2. 不需要信用卡
|
2. 不需要信用卡
|
||||||
|
|
||||||
3. 30 天试用期 - 配额 2GB 的运行时,支持 20 个服务,500 个 route
|
3. 30 天试用期 - 配额 2GB 的运行时,支持 20 个服务,500 个 route
|
||||||
|
|
||||||
4. 无限制地访问标准支持
|
4. 无限制地访问标准支持
|
||||||
|
|
||||||
5. 没有生产使用限制
|
5. 没有生产使用限制
|
||||||
|
|
||||||
* 仅为每个使用的运行时和服务付费
|
* 仅为每个使用的运行时和服务付费
|
||||||
* 快速设置 - 从而加快上架时间
|
* 快速设置 - 从而加快上架时间
|
||||||
* 持续交付新功能
|
* 持续交付新功能
|
||||||
* 与本地资源的安全集成
|
* 与本地资源的安全集成
|
||||||
* 用例
|
* 用例
|
||||||
|
|
||||||
1. Web 应用程序和移动后端
|
1. Web 应用程序和移动后端
|
||||||
|
|
||||||
2. API 和内部集成
|
2. API 和内部集成
|
||||||
|
|
||||||
* DevOps 服务可部署在云上的 SaaS ,并支持持续交付:
|
* DevOps 服务可部署在云上的 SaaS ,并支持持续交付:
|
||||||
|
|
||||||
1. Web IDE
|
1. Web IDE
|
||||||
|
|
||||||
2. SCM
|
2. SCM
|
||||||
|
|
||||||
3. 敏捷规划
|
3. 敏捷规划
|
||||||
|
|
||||||
4. 交货管道服务
|
4. 交货管道服务
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
141
published/20161128 JavaScript frameworks and libraries.md
Normal file
141
published/20161128 JavaScript frameworks and libraries.md
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
一些 JavaScript 的框架和库
|
||||||
|
============================================================
|
||||||
|

|
||||||
|
|
||||||
|
*来源 : 图片来自 Jen Wike Huger*
|
||||||
|
|
||||||
|
JavaScript 即未来趋势所在。
|
||||||
|
|
||||||
|
Javascript 得到了众多的技术领导者的拥护和支持,其中一位就是 WordPress 的作者 Matt Mullenweg , 他表示 [WordPress 开发者][18] 应该学习 JavaScript , 这也清晰地向 WordPress 社区传达了 JavaScript 在未来的重要性。 同时,这一观点也被普遍接受。向着更先进的技术靠拢与过渡也同时保证了 WordPress 在未来的挑战中不会落于人后。
|
||||||
|
|
||||||
|
JavaScript 同时也是众多站在开源立场的技术中的佼佼者。与现在所流行的观点相反,JavaScript 不是一个工程,而是一个由其核心团队共同制定和维护的开放标准。[ECMAScript][19] , 这是另一个和 JavaScript 相关的名字, 它虽然不是开源的,但它也有一个开放的标准。
|
||||||
|
|
||||||
|
当你在浏览 GitHub 的时候你就可以发现 JavaScript 在当今有多么流行了。而且就[仓库的数量][20] 而言,JavaScript 绝对位于所有的编程语言当中最顶尖的那一层次。 同时,在 Livecoding.tv 上你也能看出 JavaScript 有多么突出,这里的用户发布的关于 JavaScript 的视频的数量比其他的话题多得多。在写这篇文章的时候(2016 年底),Livecoding.tv 上已经有 [45,919 个 用户原创的 JavaScript 视频教程][21] 。
|
||||||
|
|
||||||
|
### 热门的开源 JavaScript 框架和库
|
||||||
|
|
||||||
|
回归到主题, 庞大的社区是 JavaScript 的一个得天独厚的优势,同时这也推动了 JavaScript 的蓬勃发展。这里有数以百千计的成熟的 JavaScript 框架和库供开发者使用,同时这些最优秀的框架和库都是开源的。对当前的 JavaScript 开发者来说,能够使用这些优秀的框架和库来进行快速开发已经是必须技能了。当今的市场需要快速开发,但是,重复造轮子是没有必要的。不论你是一个 JavaScript 新手还是一个资深的 JavaScript 开发者,使用框架和库都能极大提高你的工作效率。
|
||||||
|
|
||||||
|
好了,让我们开始吧!
|
||||||
|
|
||||||
|
#### 1\. Angular.js
|
||||||
|
|
||||||
|
[Angular.js][1] 是目前最热门的 JavaScript 框架之一。它用于开发者构建复杂的 web 应用。Angular.js 背后的思想是它的单页应用 model。同时它 也支持 MVC 架构。在 Angular.js 中 ,开发者可以在前端中使用 JavaScript 代码,并从字面上扩展 HTML 词汇。
|
||||||
|
|
||||||
|
Angular.js 自 2009 年出现以来已经有了很大的改进。Angular 1 当前的稳定版本是 1.5.8/1.2.30 。你也可以试一试 Angular 2 ,相对于 Angular 1 来说它有了重大的改进,但这个新版本仍未在全球范围内被普遍使用。
|
||||||
|
|
||||||
|
在 Angular.js 中,数据绑定是完成工作的一个重要概念。在用户与接口的交互中,当交互完成,view 就会自动更新,随即新值与 model 交互以确保一切都是同步的。底层的逻辑在 model 中执行完成后,DOM 也会随即更新。
|
||||||
|
|
||||||
|
#### 2\. Backbone.js
|
||||||
|
|
||||||
|
复杂 web 应用并不适用于所有场景。一些较简单的 web 应用框架例如 [Backbone.js][2] 就非常适合学习 web app 开发。Backbone.js 是一个简单的框架,可以快速方便地构建简单的 web 应用。和 Angular.js 一样,Backbone.js 也支持 MVC 。Backbone.js 还有一些其它关键特性如路由,RESTful API 支持,适当的状态管理等等。你甚至还可以用 Backbone.js 来构建单页应用。
|
||||||
|
|
||||||
|
当前的稳定版本是 1.3.3,可以在 [GitHub][22] 中找到。
|
||||||
|
|
||||||
|
#### 3\. D3.js
|
||||||
|
|
||||||
|
[D3.js][3] 是一个优秀的 JavaScript 库,它允许开发者创建具有数据处理功能的富 web 页面。D3.js 使用 SVG、HTML 和 CSS 来实现这一切功能。使用 D3.js ,你可以更轻松地将数据绑定到 DOM 及启用数据驱动事件。使用 D3.js ,你还可以创建高质量的数据驱动的 web 页面来提供一个更易于理解的视觉效果来呈现数据。查看示例 : [LCF 符号哈密顿图][23] ,由 D3.js 强力驱动。
|
||||||
|
|
||||||
|
#### 4\. React.js
|
||||||
|
|
||||||
|
[React.js][4] 是一个使用起来很有趣的 JavaScript 框架。和其它的 JavaScript 框架不同,React.js 志在构建一个高可扩展的前端用户界面。React.js 出现于 2013 年,它采用了 BSD 开源协议。它因其能够开发复杂且漂亮的用户界面所带来的优势而迅速发展壮大。
|
||||||
|
|
||||||
|
React.js 背后的核心思想是虚拟 DOM 。虚拟 DOM 在客户端和服务端之间扮演着一个中间人的角色并带来了显著的性能提升。虚拟 DOM 的改变和服务器端 DOM 一样,只需要更新所需的元素,相对于传统的 UI 渲染来说极大提升了渲染速度。
|
||||||
|
|
||||||
|
你还可以使用 Recat 来实现 meterial 风格的设计,使你能够开发具有无与伦比的性能的 web 应用。
|
||||||
|
|
||||||
|
#### 5\. jQuery
|
||||||
|
|
||||||
|
[jQuery][5] 是一个非常流行的 JavaScript 库,它拥有众多特性例如事件处理、动画等。当你在做一个 web 项目的时候,你不会想要把时间浪费在为一些简单的功能写代码上。jQuery 为减少你的工作量提供了一些易于使用的 API 。这些 API 在所有的常见的浏览器中都能够使用。使用 jQuery, 你可以无缝地控制 DOM 以及 Ajax 这样在近几年来拥有大量需求的任务。使用 jQuery,开发者不必担心一些低级的交互,同时可以使他们的 web 应用的开发更加容易与迅速。
|
||||||
|
|
||||||
|
jQuery 同时便于分离 HTML 和 JavaScript 代码,使开发者能够编写简洁而跨浏览器兼容的代码。并且使用 jQuery 创建的 web 应用在将来也易于改善和扩展。
|
||||||
|
|
||||||
|
#### 6\. Ember.js
|
||||||
|
|
||||||
|
[Ember.js][6] 是一个 Angular.js 和 React.js 的功能混合体。当你在浏览社区的时候你能明显地感受到 Ember.js 的热门程度。Ember.js 的新特性也不断地在添加。它在数据同步方面与 Angular.js 很像。 双向的数据交换可以确保应用的快速性和可扩展性。同时,它还能够帮助开发者创建一些前端元素。
|
||||||
|
|
||||||
|
和 React.js 的相似之处在于,Ember.js 提供了同样的服务器端虚拟 DOM 以确保高性能和高可扩展。同时, Ember.js 提倡简化代码,提供了丰富的 API。Ember.js 还有非常优秀的社区。
|
||||||
|
|
||||||
|
#### 7\. Polymer.js
|
||||||
|
|
||||||
|
如果你曾想过创建你自己的 HTML5 元素,那么你可以使用 [Polymer.js][7] 来做这些事。 Polymer 主要集中于通过给 web 开发者提供创建自己的标签的功能来提供扩展功能。例如,你可以创建一个和 HTML5 中的 \<video> 类似的具有自己的功能的 \<my_video> 元素。
|
||||||
|
|
||||||
|
Polymer 在 2013 年被 Google 引入并以 [三句版 BSD][24] 协议发布。
|
||||||
|
|
||||||
|
#### 8\. Three.js
|
||||||
|
|
||||||
|
[Three.js][8] 又是另一个 JavaScript 库,主要用于 3D 效果开发。如果你在做游戏开发的动画效果,那么你可以利用 Three.js 的优势。Three.js 在底层中使用 WebGL 使 Three.js 可以轻松地被用于在屏幕上渲染 3D 物体。举一个比较知名的使用 Three.js 的例子就是 HexGLA,这是一个未来派赛车游戏。
|
||||||
|
|
||||||
|
#### 9\. PhantomJS
|
||||||
|
|
||||||
|
使用 JavaScript 工作就意味着和不同的浏览器打交道,同时,当提及浏览器的时候,就不得不讨论资源管理。在 [PhantomJS][25] 中,由于有 Headless WebKit 的支持,所以你可以随时监测你的 web 应用。Headless WebKit 是 Chrome 和 Safari 使用的渲染引擎中的一部分。
|
||||||
|
|
||||||
|
这整个过程是自动化的,你所需要做的只是使用这个 API 来构建你的 web 应用。
|
||||||
|
|
||||||
|
#### 10\. BabylonJS
|
||||||
|
|
||||||
|
[BabylonJS][9] 与 Three.js 不相伯仲, 提供了创建平滑而强大的 3D web 应用的 JavaScript API。它是开源的,且基于 JavaScript 和 WebGL 。创建一个简单的 3D 物体,比如一个球体是非常简单的,你只需要写短短几行代码。通过这个库提供的 [文档][10],你可以很好地掌握它的内容。 同时 BabylonJS 的主页上也提供了一些优秀的 demo 来当作参考。在其官网上你可以找到这些 Demo。
|
||||||
|
|
||||||
|
#### 11\. Boba.js
|
||||||
|
|
||||||
|
Web 应用总是有一个共通的需求,那就是分析。如果你还在苦于将数据的分析与统计插入到 JavaScript 的 web 应用中,那么你可以试一下 [Boba.js][11]。Boba.js 可以帮助你将分析的数据插入到你的 web 应用中并且支持旧的 ga.js 。你甚至可以把数据指标和 Boba.js 集成在一起,只需要依赖 jQuery 即可。
|
||||||
|
|
||||||
|
#### 12\. Underscore.js
|
||||||
|
|
||||||
|
[Underscore.js][12] 解决了 “当我面对一个空白 HTML 页面并希望即刻开始工作,我需要什么” 这个问题。当你刚开始一个项目,你可能会感到失落或者重复一系列你在之前项目中常做的步骤。 为了简化开启一个项目的过程和给你起个头,Underscore.js 这个 JavaScript 库给你提供了一系列的方法。例如,你可以使用你在之前项目中常用的 Backbone.js 中的 suspender 或者 jQuery 的一些方法。
|
||||||
|
|
||||||
|
一些实用的帮助例如 “filter” 和 “invoke the map” 可以给你起个好头,以助于你尽可能快的投入到工作中。 Underscore.js 同时还自带了一个套件来简化你的测试工作。
|
||||||
|
|
||||||
|
#### 13\. Meteor.js
|
||||||
|
|
||||||
|
[Meteor.js][13] 是一个快速构建 JavaScript 应用的框架。它是开源的且它能够用于构建桌面应用、移动应用和 web 应用。Meteor.js 是一个全栈的框架同时允许多平台的端到端开发。 你可以使用 Meteor.js 来实现前端和后端功能,同时它也能密切监视应用的性能。Meteor.js 的社区非常庞大,所以它会有不断的新特性更新或者是 bug 修复。Meteor.js 也是模块化的,同时它能配合一些其它的优秀的 API 使用。
|
||||||
|
|
||||||
|
#### 14\. Knockout.js
|
||||||
|
|
||||||
|
[Knockout.js][14] 在这些库中可能是最被低估的一个。它是一个基于 MIT 开源协议的开源 JavaScript 框架。作者是 [Steve Sanderson][15]。它基于 MVVM 模式。
|
||||||
|
|
||||||
|
#### 值得注意的是: Node.js
|
||||||
|
|
||||||
|
[Node.js][16] 是一个强有力的 JavaScript 运行时环境。它可以被用于使用真实世界数据来构建快速且可扩展的应用。它既不是一个框架也不是一个库,而是一个基于 Google Chrome 的 V8 引擎的运行时环境。你可以用 Node.js 来创建多元化的 JavaScript 应用,包括单页应用、即时 web 应用等等。从技术层面上来讲,由于它的事件驱动式架构,所以 Node.js 支持异步 I/O 。这种做法使得它成为开发高可扩展应用的一个极好的解决方案的选择。查看 [Node.js][17]在 livecoding.tv 上的视频。
|
||||||
|
|
||||||
|
### 总结
|
||||||
|
|
||||||
|
JavaScript 是 web 开发中的通用语言。它之所以快速发展不仅仅是因为它所提供的内容,更多的是因为它的庞大的开源社区的支持。以上提到的框架和库对任何一个 JavaScript 开发者来说都是必须知道的。它们都提供了一些途径来探索 JavaScript 和前端开发。上面提及的大部分框架和库频繁地在 Livecoding.tv 上出现,其大部分来自对 JavaScript 及其相关技术感兴趣的软件工程师。
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://opensource.com/article/16/11/15-javascript-frameworks-libraries
|
||||||
|
|
||||||
|
作者:[Dr. Michael J. Garbade][a]
|
||||||
|
译者:[chenxinlong](https://github.com/chenxinlong)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://opensource.com/users/drmjg
|
||||||
|
[1]:https://opensource.com/article/16/11/www.angularjs.org
|
||||||
|
[2]:https://opensource.com/article/16/11/www.backbone.js
|
||||||
|
[3]:https://opensource.com/article/16/11/www.d3js.org
|
||||||
|
[4]:https://facebook.github.io/react/
|
||||||
|
[5]:http://jquery.com/
|
||||||
|
[6]:http://emberjs.com/
|
||||||
|
[7]:https://www.polymer-project.org/1.0/
|
||||||
|
[8]:https://threejs.org/
|
||||||
|
[9]:http://www.babylonjs.com/
|
||||||
|
[10]:https://doc.babylonjs.com/
|
||||||
|
[11]:http://boba.space150.com/
|
||||||
|
[12]:http://underscorejs.org/
|
||||||
|
[13]:https://www.meteor.com/
|
||||||
|
[14]:http://knockoutjs.com/
|
||||||
|
[15]:http://blog.stevensanderson.com/
|
||||||
|
[16]:https://nodejs.org/en/
|
||||||
|
[17]:https://www.livecoding.tv/learn/node-js/
|
||||||
|
[18]:http://wesbos.com/learn-javascript/
|
||||||
|
[19]:http://stackoverflow.com/questions/5520245/is-javascript-an-open-source-project
|
||||||
|
[20]:https://github.com/blog/2047-language-trends-on-github
|
||||||
|
[21]:https://www.livecoding.tv/learn/javascript/
|
||||||
|
[22]:https://github.com/jashkenas/backbone/
|
||||||
|
[23]:http://christophermanning.org/projects/building-cubic-hamiltonian-graphs-from-lcf-notation
|
||||||
|
[24]:https://en.wikipedia.org/wiki/BSD_licenses#3-clause
|
||||||
|
[25]:https://phantomjs.org/
|
124
published/20170107 Min Browser Muffles the Web Noise.md
Normal file
124
published/20170107 Min Browser Muffles the Web Noise.md
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
使用 Min 浏览器消除 web 噪音
|
||||||
|
============================================================
|
||||||
|

|
||||||
|
|
||||||
|
[Min][1] 是一款精简设计的 web 浏览器,功能简便,响应迅速。
|
||||||
|
|
||||||
|
在软件设计中,“简单”并不意味着功能低级、有待改进。你如果喜欢花哨工具比较少的文本编辑器和笔记程序,那么在 Min 浏览器中会有同样舒适的感觉。
|
||||||
|
|
||||||
|
我经常在台式机和笔记本电脑上使用 Google Chrome、Chromium 和 Firefox。我研究了它们的很多附加功能,所以我在长期的研究和工作中可以享用它们的特色服务。
|
||||||
|
|
||||||
|
然而,有时我希望有个快速、整洁的替代品来上网。随着多个项目的进行,我需要一个可以很快打开一大批选项卡甚至是独立窗口的强大浏览器。
|
||||||
|
|
||||||
|
我试过其他浏览器但很少能令我满意。替代品通常有一套独特的花哨的附件和功能,它们会让我开小差。
|
||||||
|
|
||||||
|
Min 浏览器就不这样。它是一个易于使用,并在 GitHub 开源的 web 浏览器,不会使我分心。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*Min 浏览器是精简的浏览器,提供了简单的功能以及快速的响应。只是不要指望马上能上手。*
|
||||||
|
|
||||||
|
### 它做些什么
|
||||||
|
|
||||||
|
Min 浏览器提供了 Debian Linux、Windows 和 Mac 机器的版本。它不能与功能众多的主流跨平台 web 浏览器竞争。
|
||||||
|
|
||||||
|
但它不必竞争,它很有名的原因应该是补充而不是取代那些主流浏览器。
|
||||||
|
|
||||||
|
其中一个主要原因是其内置的广告拦截功能。开箱即用的 Min 浏览器不需要配置或寻找兼容的第三方应用程序来拦截广告。
|
||||||
|
|
||||||
|
在 Edit/Preferences 菜单中,你可以通过三个选项来设置阻止的内容。它很容易修改屏蔽策略来满足你的喜好。阻止跟踪器和广告选项使用 EasyList 和 EasyPrivacy。 如果没有其他原因,请保持此选项选中。
|
||||||
|
|
||||||
|
你还可以阻止脚本和图像。这样做可以最大限度地提高网站加载速度,并能有效防御恶意代码。
|
||||||
|
|
||||||
|
### 按你的方式搜索
|
||||||
|
|
||||||
|
如果你在搜索上花费大量时间,你会喜欢 Min 处理搜索的方式。这是一个顶级的功能。
|
||||||
|
|
||||||
|
可以直接在浏览器的网址栏中使用搜索功能。Min 使用搜索引擎 DuckDuckGo 和维基百科的内容进行搜索。你可以直接在 web 地址栏中输入要搜索的东西。
|
||||||
|
|
||||||
|
这种方法很节省时间,因为你不必先进入搜索引擎窗口。 还有一个好处是可以搜索你的书签。
|
||||||
|
|
||||||
|
在 Edit/Preferences 菜单中,可以选择默认的搜索引擎。该列表包括 DuckDuckGo、Google、Bing、Yahoo、Baidu、Wikipedia 和 Yandex。
|
||||||
|
|
||||||
|
尝试将 DuckDuckGo 作为默认搜索引擎。 Min 默认使用这个引擎,但你也能更换。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*Min 浏览器的搜索功能是 URL 栏的一部分。Min 会使用搜索引擎 DuckDuckGo 和维基百科的内容。你可以直接在 web 地址栏中输入要搜索的东西。*
|
||||||
|
|
||||||
|
搜索栏会非常快速地显示问题的答案。它会使用 DuckDuckGo 的信息,包括维基百科条目、计算器和其它的内容。
|
||||||
|
|
||||||
|
它能快速提供片段、答案和网络建议。它有点像不是基于 Goolge 环境的替代品。
|
||||||
|
|
||||||
|
### 导航辅助
|
||||||
|
|
||||||
|
Min 允许你使用模糊搜索快速跳转到任何网站。它能立即向你提出建议。
|
||||||
|
|
||||||
|
我喜欢在当前标签旁边打开标签的方式。你不必设置此选项。它在默认情况下没有其他选择,但这也有道理。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*Min 的一个很酷的功能是将标签整理到任务栏中,这样你随时都可以搜索。*
|
||||||
|
|
||||||
|
不点击标签,过一会儿它就会消失。这使你可以专注于当前的任务,而不会分心。
|
||||||
|
|
||||||
|
Min 不需要附加工具来控制多个标签。浏览器会显示标签列表,并允许你将它们分组。
|
||||||
|
|
||||||
|
### 保持专注
|
||||||
|
|
||||||
|
Min 在“视图”菜单中有一个可选的“聚焦模式”。启用后,除了你打开的选项卡外,它会隐藏其它所有选项卡。 你必须返回到菜单,关闭“聚焦模式”,才能打开新选项卡。
|
||||||
|
|
||||||
|
任务功能还可以帮助你保持专注。你可以在 File 菜单或使用 `Ctrl+Shift+N` 创建任务。如果要打开新选项卡,可以在 File 菜单中选择该选项,或使用 `Control+T`。
|
||||||
|
|
||||||
|
按照你的风格打开新任务。我喜欢按组来管理和显示标签,这组标签与工作项目或研究的某些部分相关。我可以在任何时间重新打开整个列表,从而轻松快速的方式找到我的浏览记录。
|
||||||
|
|
||||||
|
另一个好用的功能是可以在选项卡区域找到段落对齐按钮。单击它启用阅读模式。此模式会保存文章以供将来参考,并删除页面上的一切,以便你可以专注于阅读任务。
|
||||||
|
|
||||||
|
### 并不完美
|
||||||
|
|
||||||
|
Min 浏览器并不是强大的,功能丰富的完美替代品。它有一些明显的缺点,开发人员花了很多时间也没有修正。
|
||||||
|
|
||||||
|
例如,它缺乏一个支持论坛和详细用户指南的开发人员网站。可能部分原因是它的官网在 GitHub,而不是一个独立的开发人员网站。尽管如此,对新用户而言这是一个缺点。
|
||||||
|
|
||||||
|
没有网站支持,用户被迫在 GitHub 上寻找自述文件和各种目录列表。你也可以在 Min 浏览器的帮助菜单中访问它们 - 但这没有太多帮助。
|
||||||
|
|
||||||
|
一个例子是当你启动浏览器时,屏幕会显示欢迎界面。它会显示两个按钮,一个人是 “Start Browsing”,另一个是 “Take a Tour.”。但是没有一个按钮可以使用。
|
||||||
|
|
||||||
|
但是,你可以通过单击 Min 窗口顶部的菜单栏开始浏览。但是,还没有解决缺少概览办法。
|
||||||
|
|
||||||
|
### 底线
|
||||||
|
|
||||||
|
Min 并不是一个功能完善、丰富的 web 浏览器。你在功能完善的主流浏览器中所用的插件和其它许多功能都不是 Min 的设计目标。然而,Min 在快速响应和免打扰方面很有用。
|
||||||
|
|
||||||
|
我越使用 Min 浏览器,我越觉得它高效 - 但是当你第一次使用它时要小心。
|
||||||
|
|
||||||
|
Min 并不复杂,也不难操作 - 它只是有点古怪。你必须要体验一下才能明白它如何使用。
|
||||||
|
|
||||||
|
### 想要提建议么?
|
||||||
|
|
||||||
|
有没有你建议回顾的 Linux 程序或发行版?有没有你爱的或者想要了解的?
|
||||||
|
|
||||||
|
请[在电子邮件中给我发送你的想法][3],我会考虑将来在 “Linux Picks and Pans” 专栏上登出。
|
||||||
|
|
||||||
|
可以使用下方的读者评论功能说出你的想法!
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Jack M. Germain 从苹果 II 和 PC 的早期起就一直在写关于计算机技术。他仍然有他原来的 IBM PC-Jr 和一些其他遗留的 DOS 和 Windows 机器。他为 Linux 桌面的开源世界留下过共享软件。他运行几个版本的 Windows 和 Linux 操作系统,还通常不能决定是否用他的平板电脑、上网本或 Android 智能手机,还是用他的台式机或笔记本电脑。你可以在 Google+ 上与他联系。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.linuxinsider.com/story/84212.html
|
||||||
|
|
||||||
|
作者:[Jack M. Germain][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[GitFuture](https://github.com/GitFuture)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.linuxinsider.com/story/84212.html?rss=1#searchbyline
|
||||||
|
[1]:https://github.com/minbrowser/min/releases/
|
||||||
|
[2]:http://www.linuxinsider.com/article_images/2017/84212_1200x750.jpg
|
||||||
|
[3]:mailto:jack.germain@newsroom.ectnews.com
|
@ -1,38 +1,39 @@
|
|||||||
使用 Exercism 提升你的编程技巧
|
使用 Exercism 提升你的编程技巧
|
||||||
============================================================
|
============================================================
|
||||||
|
|
||||||
### 这些练习目前已经支持 33 种编程语言了。
|
> 这些练习目前已经支持 33 种编程语言了。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
>图片提供: opensource.com
|
>图片提供: opensource.com
|
||||||
|
|
||||||
我们中的很多人有 2017 年的目标,将提高编程能力或学习如何编程放在第一位。虽然我们有许多资源可以访问,但练习独立于特定职业的代码开发的艺术还是需要一些规划。[Exercism.io][1] 就是为此目的而设计的一种资源。
|
我们中的很多人的 2017 年目标,将提高编程能力或学习如何编程放在第一位。虽然我们有许多资源可以访问,但练习独立于特定职业的代码开发的艺术还是需要一些规划。[Exercism.io][1] 就是为此目的而设计的一种资源。
|
||||||
|
|
||||||
Exercism 是一个 [开源][2] 项目和服务,通过发现和协作,帮助人们提高他们的编程技能。Exercism 提供了几十种不同编程语言的练习。实践者完成每个练习,并获得反馈,从而可以从他们的同行小组的经验中学习。
|
Exercism 是一个 [开源][2] 的项目和服务,通过发现和协作,帮助人们提高他们的编程技能。Exercism 提供了几十种不同编程语言的练习。实践者完成每个练习,并获得反馈,从而可以从他们的同行小组的经验中学习。
|
||||||
|
|
||||||
这里有这么多同行! Exercism 在 2016 年留下了一些令人印象深刻的统计:
|
这里有这么多同行! Exercism 在 2016 年留下了一些令人印象深刻的统计:
|
||||||
|
|
||||||
* 有来自201个不同国家的参与者
|
* 有来自 201 个不同国家的参与者
|
||||||
* 自 2013 年 6 月以来,29,000 名参与者提交了练习,其中仅在 2016 年就有 15,500 名参加者提交练习
|
* 自 2013 年 6 月以来,29,000 名参与者提交了练习,其中仅在 2016 年就有 15,500 名参加者提交练习
|
||||||
* 自 2013 年 6 月以来,15,000 名参与者就练习解决方案提供反馈,其中 2016 年有 5,500 人提供反馈
|
* 自 2013 年 6 月以来,15,000 名参与者就练习解决方案提供反馈,其中 2016 年有 5,500 人提供反馈
|
||||||
* 每月 50,000 名访客,每周超过 12,000 名访客
|
* 每月 50,000 名访客,每周超过 12,000 名访客
|
||||||
* 目前练习支持 33 种编程语言,另外 22 种语言在筹备工作中
|
* 目前的练习已经支持 33 种编程语言,另外 22 种语言在筹备工作中
|
||||||
|
|
||||||
该项目为所有级别的参与者提供了一系列小小的胜利,使他们能够“即使在低水平也能发展到高度流利”,Exercism 的创始人 [Katrina Owen][3] 这样说到。Exercism 并不旨在教导学员成为一名职业程序员,但它的练习使他们对一种语言及其瑕疵有深刻的了解。这种熟悉性消除了学习者对语言的认知负担(流利),使他们能够专注于更困难的架构和最佳实践(熟练)的问题。
|
该项目为各种级别的参与者提供了一系列小小的挑战,使他们能够“即使在低水平也能发展到高度谙熟”,Exercism 的创始人 [Katrina Owen][3] 这样说到。Exercism 并不旨在教导学员成为一名职业程序员,但它的练习使他们对一种语言及其瑕疵有深刻的了解。这种熟悉性消除了学习者对语言的认知负担(使之更谙熟),使他们能够专注于更困难的架构和最佳实践的问题。
|
||||||
|
|
||||||
Exercism 通过一系列练习(还有什么?)来做到这一点。程序员下载[命令行客户端][4],检索第一个练习,添加完成练习的代码,然后提交解决方案。提交解决方案后,程序员可以研究他人的解决方案,并学习到对同一个问题不同的解决方式。更重要的是,每个解决方案都会收到来自其他参与者的反馈。
|
Exercism 通过一系列练习(或者还有别的?)来做到这一点。程序员下载[命令行客户端][4],检索第一个练习,添加完成练习的代码,然后提交解决方案。提交解决方案后,程序员可以研究他人的解决方案,并学习到对同一个问题不同的解决方式。更重要的是,每个解决方案都会收到来自其他参与者的反馈。
|
||||||
|
|
||||||
反馈是 Exercism 的超级力量。鼓励所有参与者不仅接收反馈而且提供反馈。根据 Owen 说的,Exercism 的社区成员提供反馈比完成练习学到更多。她说:“这是一个强大的学习经验,你被迫发表内心感受,并检查你的假设、习惯和偏见”。她还指出,反馈可以有多种形式。
|
反馈是 Exercism 的超级力量。鼓励所有参与者不仅接收反馈而且提供反馈。根据 Owen 说的,Exercism 的社区成员提供反馈比完成练习学到更多。她说:“这是一个强大的学习经验,你需要发表内心感受,并检查你的假设、习惯和偏见”。她还指出,反馈可以有多种形式。
|
||||||
|
|
||||||
欧文说:“只需进入,观察并问问题”。
|
欧文说:“只需进入,观察并发问”。
|
||||||
|
|
||||||
那些刚刚接触编程,甚至只是一种特定语言的人,可以通过质疑假设来提供有价值的反馈,同时通过协作和对话来学习。
|
那些刚刚接触编程,甚至只是接触了一种特定语言的人,可以通过预设好的问题来提供有价值的反馈,同时通过协作和对话来学习。
|
||||||
|
|
||||||
除了对新语言的 <ruby>“微课”学习<rt>bite-sized learning</rt></ruby> 之外,Exercism 本身还强烈支持和鼓励项目的新贡献者。在 [SitePoint.com][5] 的一篇文章中,欧文强调:“如果你想为开源贡献代码,你所需要的技能水平只要‘够用’即可。” Exercism 不仅鼓励新的贡献者,它还尽可能地帮助新贡献者发布他们项目中的第一个补丁。到目前为止,有近 1000 人是[ Exercism 项目][6]的贡献者。
|
除了对新语言的 <ruby>“微课”学习<rt>bite-sized learning</rt></ruby> 之外,Exercism 本身还强烈支持和鼓励项目的新贡献者。在 [SitePoint.com][5] 的一篇文章中,欧文强调:“如果你想为开源贡献代码,你所需要的技能水平只要‘够用’即可。” Exercism 不仅鼓励新的贡献者,它还尽可能地帮助新贡献者发布他们项目中的第一个补丁。到目前为止,有近 1000 人成为 [Exercism 项目][6]的贡献者。
|
||||||
|
|
||||||
新贡献者会有大量工作让他们忙碌。 Exercism 目前正在审查[其语言轨道的健康状况][7],目的是使所有轨道可持续并避免维护者的倦怠。它还在寻求[捐赠][8]和赞助,聘请设计师提高网站的可用性。
|
新贡献者会有大量工作让他们忙碌。 Exercism 目前正在审查[其语言发展轨迹的健康状况][7],目的是使所有发展轨迹可持续并避免维护者的倦怠。它还在寻求[捐赠][8]和赞助,聘请设计师提高网站的可用性。
|
||||||
|
|
||||||
Owen 说:“这些改进对于网站的健康以及为了 Exercism 参与者的发展是有必要的,这些变化还鼓励新贡献者加入并简化了加入的途径。” 她说:“如果我们可以重新设计,产品方面将更加可维护。。。当用户体验一团糟,华丽的代码一点用也没有”。该项目有一个非常活跃的[讨论仓库][9],这里社区成员合作来发现最好的新方法和功能。
|
Owen 说:“这些改进对于网站的健康以及为了 Exercism 参与者的发展是有必要的,这些变化还鼓励新贡献者加入并简化了加入的途径。” 她说:“如果我们可以重新设计,产品方面将更加可维护……当用户体验一团糟时,华丽的代码一点用也没有”。该项目有一个非常活跃的[讨论仓库][9],这里社区成员合作来发现最好的新方法和功能。
|
||||||
|
|
||||||
那些想关注项目但还没有参与的人可以关注[邮件列表][10]。
|
那些想关注项目但还没有参与的人可以关注[邮件列表][10]。
|
||||||
|
|
||||||
@ -42,10 +43,12 @@ Owen 说:“这些改进对于网站的健康以及为了 Exercism 参与者
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
VM(Vicky)Brasseur - VM(也称为 Vicky)是技术人员、项目、流程、产品和 p^Hbusinesses 的经理。在她超过 18 年的科技行业从业中,她曾是分析师、程序员、产品经理、软件工程经理和软件工程总监。 目前,她是 Hewlett Packard Enterprise 上游开源开发团队的高级工程经理。 VM 的博客在 anonymoushash.vmbrasseur.com,tweets 在 @vmbrasseur。
|
VM(Vicky)Brasseur - VM(也称为 Vicky)是技术人员、项目、流程、产品和 p\^Hbusinesses 的经理。在她超过 18 年的科技行业从业中,她曾是分析师、程序员、产品经理、软件工程经理和软件工程总监。 目前,她是 Hewlett Packard Enterprise 上游开源开发团队的高级工程经理。 VM 的博客在 anonymoushash.vmbrasseur.com,tweets 在 @vmbrasseur。
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://opensource.com/article/17/1/exercism-learning-programming
|
||||||
|
|
||||||
作者:[VM (Vicky) Brasseur][a]
|
作者:[VM (Vicky) Brasseur][a]
|
||||||
译者:[geekpi](https://github.com/geekpi)
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
校对:[jasminepeng](https://github.com/jasminepeng)
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
@ -0,0 +1,125 @@
|
|||||||
|
如何挑选你的第一门编程语言
|
||||||
|
============================================================
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
opensource.com 供图
|
||||||
|
|
||||||
|
想学编程的原因有很多,你也许是想要做一个程序,又或者你只是想投身于这个行业,所以,在选择你的第一门编程语言之前,问问你自己:你想要在哪里运行程序?你想要程序来完成什么工作?
|
||||||
|
|
||||||
|
你学习编程的原因将会决定你的第一门编程语言的选择。
|
||||||
|
|
||||||
|
_在这篇文章里,我会交替使用“编码”(code)、“编程”(program)、“开发”(develop) 等动词,“代码”(code)、“程序”(program)、“应用程序”(application)、“应用”(app)等名词。这是考虑到了你可能听过的语言用法。_
|
||||||
|
|
||||||
|
### 了解你的设备
|
||||||
|
|
||||||
|
在你编程语言的选择上,你的程序将运行在何处是个决定性因素。
|
||||||
|
|
||||||
|
桌面应用是运行在台式机或者笔记本电脑上的传统软件程序。这样你编写的代码在同一时间内只能在一台电脑上运行。移动应用,也就是我们所熟知的“app”,运行在使用 IOS 、Android 或者其他操作系统的移动设备上。网页应用是功能像应用的网页。
|
||||||
|
|
||||||
|
按互联网的 客户-服务器(C/S)架构分,网页开发者经常被分为两类:
|
||||||
|
|
||||||
|
* 前端开发,就是编写运行在浏览器里面的代码。这是个面对用户的部分,或者说是程序的前脸。有时候被称为“客户端编程”,因为浏览器是网站的客户-服务器架构的客户端部分。浏览器会运行在你本地的电脑或者设备上。
|
||||||
|
* 后台开发,也就是大家所熟知的“服务器端开发”,编写的代码运行在你无法实际接触的服务器上。
|
||||||
|
|
||||||
|
### 创造什么
|
||||||
|
|
||||||
|
编程是一门广泛的学科,能应用在不同的领域。常见的应用有:
|
||||||
|
|
||||||
|
* 数据科学
|
||||||
|
* 网页开发
|
||||||
|
* 游戏开发,以及
|
||||||
|
* 不同类型的工作自动化
|
||||||
|
|
||||||
|
现在我们已经讨论了为什么你要编程,你要程序运行在哪里,让我们看一下两门对于新手来说不错的编程语言吧。
|
||||||
|
|
||||||
|
### Python
|
||||||
|
|
||||||
|
[Python][2] 是对于第一次编程的人来说是最为流行的编程语言之一,而且这不是巧合。Python 是一门通用的编程语言。这意味着它能应用在广泛的编程任务上。几乎**没有**你不能用 Python 完成的工作。这一点使得很多新手能在实际中应用这门编程语言。另外, Python 有两个重要的设计特征,使得其对于新手更友好:清晰、类似于英语的[语法][3],和强调代码的[可读性][4]。
|
||||||
|
|
||||||
|
从本质上讲,一门编程语言的语法就是你所输入的能让这编程语言执行的内容。这包括单词,特殊字符(例如 `;`、`$`、`%` 或者 `{}`),空格或者以上任意的组合。Python 尽可能地使用英语,不像其他编程语言那样经常使用标点符号或者特殊的字符。所以,Python 阅读起来更自然、更像是人类语言。这一点帮助新的编程人员可以聚焦于解决问题,而能花费更少的时间纠结于语言自身的特性上。
|
||||||
|
|
||||||
|
清晰语法的同时注重于可读性。在编写代码的时候,你所创造的代码的逻辑“块”,就是一些为了相关联目标而共同工作的代码。在许多编程语言里,这些块用特殊字符所标记(或限定)。它们或许被 `{}` 或者其他字符所包住。块分割字符和你写代码的能力,这两者不管怎么结合起来都会降低可读性。让我们来看一个例子。
|
||||||
|
|
||||||
|
这有个被称为 `fun` 的简短函数。它要求输入一个数字,`x` 就是它的输入。如果 `x` 等于 `0`,它将会运行另一个被称为`no_fun` 的函数(这函数做了些很无趣的事情)。新函数不需要输入。反之,简短函数将会运行一个使用输入 `x` 的名为 `big_fun` 的函数。
|
||||||
|
|
||||||
|
这个函数用 [C 语言 ][5]将会是这样写的:
|
||||||
|
|
||||||
|
```
|
||||||
|
void fun(int x)
|
||||||
|
{
|
||||||
|
if (x == 0) {
|
||||||
|
no_fun();
|
||||||
|
} else {
|
||||||
|
big_fun(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
或者,像是这样:
|
||||||
|
|
||||||
|
```
|
||||||
|
void fun(int x) { if (x == 0) {no_fun(); } else {big_fun(x); }}
|
||||||
|
```
|
||||||
|
|
||||||
|
功能上两者等价,而且都能运行。`{}` 和 `;` 告诉我们哪里是代码块的不同部分。然而,第一个对于人们来说_明显_更容易阅读。相比之下完成相同功能的 Python 是这样的:
|
||||||
|
|
||||||
|
```
|
||||||
|
def fun(x):
|
||||||
|
if x == 0:
|
||||||
|
no_fun()
|
||||||
|
else:
|
||||||
|
big_fun(x)
|
||||||
|
```
|
||||||
|
|
||||||
|
在这里,只有一个选择。如果代码不是这样排列的,它将无法工作。如果你编写了可以工作的代码,你就有了可阅读的代码。同样也留意一下两者在语法上的差异。不同的是 `def` ,在 Python 代码中这个词是英语单词,大家都很熟悉这单词的含义(LCTT 译注:def 是 definition 的缩写,定义的意思)。在 C 语言的例子中 `void` 和 `int` 就没有那么直观。
|
||||||
|
|
||||||
|
Python 也有个优秀的生态系统。这有两层意思,第一,你有一个使用该语言的庞大、活跃的社区,当你需要帮助指导的时候,你能向他们求助。第二,它有大量早已存在的库,库是指完成特定功能的代码集合。从高级数学运算、图形到计算机视觉,甚至是你能想象到的任何事情。
|
||||||
|
|
||||||
|
Python 作为你第一门编程语言有两个缺点。第一是它有时候安装起来很复杂,特别是在运行着 Windows 的电脑上。(如果你有一台 Mac 或者 Linux 的电脑,Python 默认已经安装好了。)虽然这问题不是不能克服,而且情况总在改善,但是这对于一些人来说还是个阻碍。第二个缺点是,对于那些明确想要建设网站的人来讲,虽然有很多用 Python 写的项目(例如 [Django][6] 和[Flask][7] ),但是编写运行在浏览器上的 Python 代码却没有什么好的选择。它主要是后台或者服务器端语言。
|
||||||
|
|
||||||
|
### JavaScript
|
||||||
|
|
||||||
|
如果你知道你学习编程的主要原因是建设网站的话,[JavaScript][8] 或许是你的最佳选择。 JavaScript 是关于网页的编程语言。除了是网页的默认编程语言之外, JavaScript 作为初学的语言有几点优点。
|
||||||
|
|
||||||
|
第一,无须安装任何东西。你可以打开文本编辑器(例如 Windows 上的记事本,但不是一个文字处理软件,例如 Microsoft Word)然后开始输入 JavaScript 。代码将在你的浏览器中运行。最顶尖的浏览器内置了JavaScript 引擎,所以你的代码将可以运行在几乎所有的电脑和很多的移动设备上。事实上,能马上在浏览器中运行代码为编程人员提供了一个非常_快_的反馈,这对于新手来说是很好的。你能尝试一些事情然后很快地看到结果。
|
||||||
|
|
||||||
|
开始 JavaScript 是作为前端语言的,不过一个名为 [Node.js][9] 的环境能让你编写运行在浏览器或者服务器上的代码。现在 JavaScript 能当作前端或者后台语言使用。这增加了它的使用人数。JavaScript 也有大量能提供除核心功能外的额外功能的包,这使得它能当作一门通用语言来使用。JavaScript 不只是网页开发语言,就像 Python 那样,它也有个充满生气的、活跃的生态系统。
|
||||||
|
|
||||||
|
尽管有这些优点,但是 JavaScript 对于新手来说并非十全十美。[JavaScript 的语法](https://en.wikipedia.org/wiki/JavaScript_syntax#Basics)并不像 Python 那样清晰,也不怎么像英语。更像是之前例子里提到的 C 语言。它并不是把可读性当作主要的设计特性。
|
||||||
|
|
||||||
|
### 做出选择
|
||||||
|
|
||||||
|
选 Python 或者 JavaScript 作为入门语言都没有问题。关键是你打算做什么。为什么你要学习编程?你的回答很大程度上影响你的决定。如果你是想为开源做贡献,你将会找到_大量_用这两门语言编写的项目。另外,许多主要不是用 JavaScript 写的项目仍使用 JavaScript 用作前端组件。当你做决定时,别忘了你本地的社区。你有在使用其中一门语言的朋友或者同事吗?对于一个新手来说,有实时的帮助是非常重要的。
|
||||||
|
|
||||||
|
祝好运,开心编程。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Kojo Idrissa - 我是一个新晋的软件开发者(1 年),从会计和大学教学转型而来。自从有开源软件以来,我就是它的一个粉丝。但是在我之前的事业中并不需要做很多的编程工作。技术上,我专注于 Python ,自动化测试和学习 Django 。我希望我能尽快地学更多的 JavaScript 。话题上,我专注于帮助刚开始学习编程或想参与为开源项目做贡献的人们。我也关注在技术领域的包容文化。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://opensource.com/article/17/1/choosing-your-first-programming-language
|
||||||
|
|
||||||
|
作者:[Kojo Idrissa][a]
|
||||||
|
译者:[ypingcn](https://github.com/ypingcn)
|
||||||
|
校对:[bestony](https://github.com/bestony)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]: https://opensource.com/users/transitionkojo
|
||||||
|
[1]: https://opensource.com/article/17/1/choosing-your-first-programming-language?rate=fWoYXudAZ59IkAKZ8n5lQpsa4bErlSzDEo512Al6Onk
|
||||||
|
[2]: https://www.python.org/about/
|
||||||
|
[3]: https://en.wikipedia.org/wiki/Python_syntax_and_semantics
|
||||||
|
[4]: https://en.wikipedia.org/wiki/Python_syntax_and_semantics#Indentation
|
||||||
|
[5]: https://en.wikipedia.org/wiki/C_(programming_language
|
||||||
|
[6]: https://www.djangoproject.com/
|
||||||
|
[7]: http://flask.pocoo.org/
|
||||||
|
[8]: https://en.wikipedia.org/wiki/JavaScript
|
||||||
|
[9]: https://nodejs.org/en/
|
||||||
|
[10]: https://en.wikipedia.org/wiki/JavaScript_syntax#Basics5
|
@ -1,16 +1,15 @@
|
|||||||
Setup SysVol Replication Across Two Samba4 AD DC with Rsync – Part 6
|
Samba 系列(六):使用 Rsync 命令同步两个 Samba4 AD DC 之间的 SysVol 目录
|
||||||
============================================================
|
============================================================
|
||||||
使用 Rsync 命令来同步两个 Samba4 AD DC 之间的 SysVol 目录——(六)
|
|
||||||
|
|
||||||
这篇文章讲的是在两个 Samba4 活动目录域控制器之间,通过一些强大的 Linux 工具来完成 SysVol 的复制操作,比如[Rsync 数据同步工具][2],[Cron 任务调度进程][3]和[SSH 协议][4]。
|
这篇文章讲的是在两个 **Samba4 活动目录域控制器**之间,通过一些强大的 Linux 工具来完成 SysVol 的复制操作,比如 [Rsync 数据同步工具][2],[Cron 任务调度进程][3]和 [SSH 协议][4]。
|
||||||
|
|
||||||
#### 要求::
|
### 需求:
|
||||||
|
|
||||||
1、 [将 Ubuntu 16.04 服务器作为域控制器加入到 Samba4 AD DC 环境中——(五)][1]
|
- [Samba 系列(五):将另一台 Ubuntu DC 服务器加入到 Samba4 AD DC 实现双域控主机模][1]
|
||||||
|
|
||||||
### 第一步:配置 DC 服务器时间同步
|
### 第一步:配置 DC 服务器时间同步
|
||||||
|
|
||||||
1、在两个域控制器之间复制 sysvol 目录的内容之前,你得保证这两个服务器时间设置准确且一致。
|
1、在两个域控制器之间复制 **sysvol** 目录的内容之前,你得保证这两个服务器时间设置准确且一致。
|
||||||
|
|
||||||
如果这两个服务器的时间延迟大于 5 分钟,并且时钟也不同步,你将会遇到 AD 账号和域复制的各种问题。
|
如果这两个服务器的时间延迟大于 5 分钟,并且时钟也不同步,你将会遇到 AD 账号和域复制的各种问题。
|
||||||
|
|
||||||
@ -20,13 +19,13 @@ Setup SysVol Replication Across Two Samba4 AD DC with Rsync – Part 6
|
|||||||
# apt-get install ntp
|
# apt-get install ntp
|
||||||
```
|
```
|
||||||
|
|
||||||
2、在 NTP 服务安装完成之后,打开主配置文件,把默认的 pool 值注释(在第一行 pool 参数前添加 # ),并且添加新的 pool 值指向已安装了 NTP 服务端的主 Samba4 AD DC FQDN ,如下所示。
|
2、在 NTP 服务安装完成之后,打开主配置文件,把默认的 pool 值注释(在每行 pool 参数前添加 # ),并且添加新的 pool 值,指向已安装了 **NTP** 服务端的主 **Samba4 AD DC FQDN**,如下所示。
|
||||||
|
|
||||||
```
|
```
|
||||||
# nano /etc/ntp.conf
|
# nano /etc/ntp.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
把下面几行添加到 ntp.conf 配置文件。
|
把下面几行添加到 `ntp.conf` 配置文件。
|
||||||
|
|
||||||
```
|
```
|
||||||
pool 0.ubuntu.pool.ntp.org iburst
|
pool 0.ubuntu.pool.ntp.org iburst
|
||||||
@ -36,12 +35,13 @@ pool 0.ubuntu.pool.ntp.org iburst
|
|||||||
pool adc1.tecmint.lan
|
pool adc1.tecmint.lan
|
||||||
# Use Ubuntu's ntp server as a fallback.
|
# Use Ubuntu's ntp server as a fallback.
|
||||||
pool ntp.ubuntu.com
|
pool ntp.ubuntu.com
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][6]
|
][6]
|
||||||
|
|
||||||
Samba4 配置 NTP 服务
|
*Samba4 配置 NTP 服务*
|
||||||
|
|
||||||
3、先不要关闭该文件,在文件末尾添加如下内容,这是为了让其它客户端能够查询并[与这个 NTP 服务器同步时间][7],并发出 NTP 签署请求,以防主 DC 离线:
|
3、先不要关闭该文件,在文件末尾添加如下内容,这是为了让其它客户端能够查询并[与这个 NTP 服务器同步时间][7],并发出 NTP 签署请求,以防主 DC 离线:
|
||||||
|
|
||||||
@ -50,31 +50,32 @@ restrict source notrap nomodify noquery mssntp
|
|||||||
ntpsigndsocket /var/lib/samba/ntp_signd/
|
ntpsigndsocket /var/lib/samba/ntp_signd/
|
||||||
```
|
```
|
||||||
|
|
||||||
4、最后,关闭并保存该配置文件,然后重启 NTP 服务以应用更改。等待几分钟后时间同步完成,执行 ntpq 命令来查看时间同步情况。
|
4、最后,关闭并保存该配置文件,然后重启 NTP 服务以应用更改。等待几分钟后时间同步完成,执行 `ntpq` 命令打印出 **adc1** 时间同步情况。
|
||||||
|
|
||||||
```
|
```
|
||||||
# systemctl restart ntp
|
# systemctl restart ntp
|
||||||
# ntpq -p
|
# ntpq -p
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][8]
|
][8]
|
||||||
|
|
||||||
与 Samba4 AD 同步 NTP 时间
|
*与 Samba4 AD 同步 NTP 时间*
|
||||||
|
|
||||||
### 第二步:通过 Rsync 命令来复制第一个 DC 服务器上的 SysVol 目录
|
### 第二步:通过 Rsync 命令来复制第一个 DC 服务器上的 SysVol 目录
|
||||||
|
|
||||||
默认情况下,Samba4 AD DC 不会通过 DFS-R(分布式文件系统复制)或者 FRS(文件复制服务)来复制 SysVol 目录。
|
默认情况下,**Samba4 AD DC** 不会通过 **DFS-R**(<ruby>分布式文件系统复制<rt>Distributed File System Replication</rt></ruby>)或者 **FRS**(<ruby>文件复制服务<rt>File Replication Service</rt></ruby>)来复制 SysVol 目录。
|
||||||
|
|
||||||
这意味着只有在第一个域控制器联机时,组策略对象才可用。否则组策略设置和登录脚本不会应用到已加入域的 Windosws 机器上。
|
这意味着只有在第一个域控制器联机时,<ruby>**组策略对象**<rt>Group Policy objects</rt></ruby>才可用。否则组策略设置和登录脚本不会应用到已加入域的 Windosws 机器上。
|
||||||
|
|
||||||
为了解决这个问题及实现 SysVol 目录的犁,我们通过执行一个[基于 SSH 的身份认证][10]并使用 SSH 加密通道的[Linux 同步命令][9]来从第一个域控制器安全地传输 GPO 对象到第二个域控制器。
|
为了克服这个障碍,以及基本实现 SysVol 目录复制的目的,我们通过执行一个[基于 SSH 的身份认证][10]并使用 SSH 加密通道的[Linux 同步命令][9]来从第一个域控制器安全地传输 **GPO** 对象到第二个域控制器。
|
||||||
|
|
||||||
这种方式能够确保 GPO 对象在域控制器之间的一致性,但是也有一个很大的缺点。它只能进行单向同步,因为在同步 GPO 目录的时候, rsync 命令会从源 DC 服务器传输所有的更改到目标 DC 服务器,
|
这种方式能够确保 **GPO** 对象在域控制器之间的一致性,但是也有一个很大的缺点。它只能进行单向同步,因为在同步 GPO 目录的时候, **rsync** 命令会从源 DC 服务器传输所有的更改到目标 DC 服务器,
|
||||||
|
|
||||||
源 DC 服务器上不存在的组策略对象也会从目标 DC 服务器上删除,为了限制并避免任何冲突,所有的 GPO 编辑操作只能在第一个 DC 服务器上执行。
|
源 DC 服务器上不存在的组策略对象也会从目标 DC 服务器上删除,为了限制并避免任何冲突,所有的 GPO 编辑操作只能在第一个 DC 服务器上执行。
|
||||||
|
|
||||||
5、要进行 SysVol 复制,先到[第一个 AD DC 服务器上生成 SSH 密钥][11],然后使用下面的命令把该密钥传输到第二个 DC 服务器。
|
5、要进行 **SysVol** 复制,先到[第一个 AD DC 服务器上生成 SSH 密钥][11],然后使用下面的命令把该密钥传输到第二个 DC 服务器。
|
||||||
|
|
||||||
在生成密钥的过程中不要设置密码,以便在无用户干预的情况下进行传输。
|
在生成密钥的过程中不要设置密码,以便在无用户干预的情况下进行传输。
|
||||||
|
|
||||||
@ -83,28 +84,31 @@ ntpsigndsocket /var/lib/samba/ntp_signd/
|
|||||||
# ssh-copy-id root@adc2
|
# ssh-copy-id root@adc2
|
||||||
# ssh adc2
|
# ssh adc2
|
||||||
# exit
|
# exit
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][12]
|
][12]
|
||||||
|
|
||||||
在 Samba4 DC 服务器上生成 SSH 密钥
|
*在 Samba4 DC 服务器上生成 SSH 密钥*
|
||||||
|
|
||||||
6、 当你确认 root 用户可以从第一个 DC 服务器以免密码方式登录到第二个 DC 服务器时,执行下面的 Rsync 命令,加上 `--dry-run` 参数来模拟 SysVol 复制过程。注意把对应的参数值替换成你自己的数据。
|
6、 当你确认 root 用户可以从第一个 **DC** 服务器以免密码方式登录到第二个 **DC** 服务器时,执行下面的 `rsync` 命令,加上 `--dry-run` 参数来模拟 SysVol 复制过程。注意把对应的参数值替换成你自己的数据。
|
||||||
|
|
||||||
```
|
```
|
||||||
# rsync --dry-run -XAavz --chmod=775 --delete-after --progress --stats /var/lib/samba/sysvol/ root@adc2:/var/lib/samba/sysvol/
|
# rsync --dry-run -XAavz --chmod=775 --delete-after --progress --stats /var/lib/samba/sysvol/ root@adc2:/var/lib/samba/sysvol/
|
||||||
```
|
```
|
||||||
|
|
||||||
7、如果模拟复制过程正常,那么再次执行 rsync 命令,去掉 `--dry-run` 参数来真实的在域控制器之间复制 GPO 对象。
|
7、如果模拟复制过程正常,那么再次执行去掉 `--dry-run` 参数的 `rsync` 命令,来真实的在域控制器之间复制 GPO 对象。
|
||||||
|
|
||||||
```
|
```
|
||||||
# rsync -XAavz --chmod=775 --delete-after --progress --stats /var/lib/samba/sysvol/ root@adc2:/var/lib/samba/sysvol/
|
# rsync -XAavz --chmod=775 --delete-after --progress --stats /var/lib/samba/sysvol/ root@adc2:/var/lib/samba/sysvol/
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][13]
|
][13]
|
||||||
|
|
||||||
Samba4 AD DC SysVol 复制
|
*Samba4 AD DC SysVol 复制*
|
||||||
|
|
||||||
8、在 SysVol 复制完成之后,登录到目标域控制器,然后执行下面的命令来列出其中一个 GPO 对象目录的内容。
|
8、在 SysVol 复制完成之后,登录到目标域控制器,然后执行下面的命令来列出其中一个 GPO 对象目录的内容。
|
||||||
|
|
||||||
@ -113,25 +117,26 @@ Samba4 AD DC SysVol 复制
|
|||||||
```
|
```
|
||||||
# ls -alh /var/lib/samba/sysvol/your_domain/Policiers/
|
# ls -alh /var/lib/samba/sysvol/your_domain/Policiers/
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][14]
|
][14]
|
||||||
|
|
||||||
验证 Samba4 DC SysVol 复制结果是否正常
|
*验证 Samba4 DC SysVol 复制结果是否正常*
|
||||||
|
|
||||||
9、为了自动完成组策略复制的过程(从网络来传输 sysvol 目录),你可以使用 root 账号设置一个任务来执行同步命令,如下所示,设置为每隔 5 分钟执行一次该命令。
|
9、为了自动完成**组策略**复制的过程(通过网络传输 sysvol 目录),你可以使用 root 账号设置一个任务来执行同步命令,如下所示,设置为每隔 5 分钟执行一次该命令。
|
||||||
|
|
||||||
```
|
```
|
||||||
# crontab -e
|
# crontab -e
|
||||||
```
|
```
|
||||||
|
|
||||||
添加一条每隔 5 分钟运行的同步命令,并把执行结果以及错误信息输出到日志文件 /var/log/sysvol-replication.log 。如果执行命令异常,你可以查看该文件来定位问题。
|
添加一条每隔 5 分钟运行的同步命令,并把执行结果以及错误信息输出到日志文件 `/var/log/sysvol-replication.log` 。如果执行命令异常,你可以查看该文件来定位问题。
|
||||||
|
|
||||||
```
|
```
|
||||||
*/5 * * * * rsync -XAavz --chmod=775 --delete-after --progress --stats /var/lib/samba/sysvol/ root@adc2:/var/lib/samba/sysvol/ > /var/log/sysvol-replication.log 2>&1
|
*/5 * * * * rsync -XAavz --chmod=775 --delete-after --progress --stats /var/lib/samba/sysvol/ root@adc2:/var/lib/samba/sysvol/ > /var/log/sysvol-replication.log 2>&1
|
||||||
```
|
```
|
||||||
|
|
||||||
10、如果以后 SysVol ACL 权限有问题,你可以通过下面的命令来检测和修复这些异常。
|
10、如果以后 **SysVol ACL** 权限有问题,你可以通过下面的命令来检测和修复这些异常。
|
||||||
|
|
||||||
```
|
```
|
||||||
# samba-tool ntacl sysvolcheck
|
# samba-tool ntacl sysvolcheck
|
||||||
@ -141,24 +146,24 @@ Samba4 AD DC SysVol 复制
|
|||||||

|

|
||||||
][15]
|
][15]
|
||||||
|
|
||||||
修复 SysVol ACL 权限问题
|
*修复 SysVol ACL 权限问题*
|
||||||
|
|
||||||
11、如果第一个 Samba4 AD DC 的 FSMO 角色,即“ PDC 模拟器”不可用,你可以强制 Microsoft Windows 系统上的组策略管理控制台只连接到第二个域控制器,通过选择更改域控制器选项和手动选择目标机器,如下图所示。
|
11、如果第一个 **Samba4 AD DC** 的 **FSMO** 角色,即“PDC 模拟器”不可用,你可以强制 **Microsoft Windows** 系统上的**组策略管理控制台**只连接到第二个域控制器,通过选择更改域控制器选项和手动选择目标机器,如下图所示。
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][16]
|
][16]
|
||||||
|
|
||||||
更改 Samba4 域控制器
|
*更改 Samba4 域控制器*
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][17]
|
][17]
|
||||||
|
|
||||||
|
|
||||||
选择 Samba4 域控制器
|
*选择 Samba4 域控制器*
|
||||||
|
|
||||||
当你从组策略管理控制台连接到第二个 DC 服务器时,你应该避免对组策略做任何更改。否则,当第一个 DC 服务器恢复正常后, rsync 命令将会删除在第二个 DC 服务器上所做的更改。
|
当你从**组策略管理控制台**连接到第二个 **DC** 服务器时,你应该避免对**组策略**做任何更改。否则,当第一个 **DC** 服务器恢复正常后, **rsync 命令**将会删除在第二个 DC 服务器上所做的更改。
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -166,7 +171,7 @@ Samba4 AD DC SysVol 复制
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
我是一个电脑迷,开源软件和 Linux 系统爱好者,有超过 4 年的 Linux 桌面、服务器版本系统和 bash 编程经验。
|
Matei Cezar -- 我是一个电脑迷,开源软件和 Linux 系统爱好者,有超过 4 年的 Linux 桌面、服务器版本系统和 bash 编程经验。
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -174,12 +179,12 @@ via: http://www.tecmint.com/samba4-ad-dc-sysvol-replication/
|
|||||||
|
|
||||||
作者:[Matei Cezar][a]
|
作者:[Matei Cezar][a]
|
||||||
译者:[rusking](https://github.com/rusking)
|
译者:[rusking](https://github.com/rusking)
|
||||||
校对:[校对者ID](https://github.com/校对者ID)
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
[a]:http://www.tecmint.com/author/cezarmatei/
|
[a]:http://www.tecmint.com/author/cezarmatei/
|
||||||
[1]:http://www.tecmint.com/join-additional-ubuntu-dc-to-samba4-ad-dc-failover-replication/
|
[1]:https://linux.cn/article-8358-1.html
|
||||||
[2]:http://www.tecmint.com/rsync-local-remote-file-synchronization-commands/
|
[2]:http://www.tecmint.com/rsync-local-remote-file-synchronization-commands/
|
||||||
[3]:http://www.tecmint.com/11-cron-scheduling-task-examples-in-linux/
|
[3]:http://www.tecmint.com/11-cron-scheduling-task-examples-in-linux/
|
||||||
[4]:http://www.tecmint.com/5-best-practices-to-secure-and-protect-ssh-server/
|
[4]:http://www.tecmint.com/5-best-practices-to-secure-and-protect-ssh-server/
|
@ -0,0 +1,96 @@
|
|||||||
|
使用 AWS 的 GO SDK 获取区域与终端节点信息
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
LCTT 译注: 终端节点(Endpoint),详情请见: [http://docs.amazonaws.cn/general/latest/gr/rande.html](http://docs.amazonaws.cn/general/latest/gr/rande.html)
|
||||||
|
|
||||||
|
最新发布的 GO 的 SDK [v1.6.0][1] 版本,加入了获取区域与终端节点信息的功能。它可以很方便地列出区域、服务和终端节点的相关信息。可以通过 [github.com/aws/aws-sdk-go/aws/endpoints][3] 包使用这些功能。
|
||||||
|
|
||||||
|
endpoints 包提供了一个易用的接口,可以获取到一个服务的终端节点的 url 列表和区域列表信息。并且我们将相关信息根据 AWS 服务区域进行了分组,如 AWS 标准、AWS 中国和 AWS GovCloud(美国)。
|
||||||
|
|
||||||
|
### 解析终端节点
|
||||||
|
|
||||||
|
设置 SDK 的默认配置时, SDK 会自动地使用 `endpoints.DefaultResolver` 函数。你也可以自己调用包中的`EndpointFor` 方法来解析终端节点。
|
||||||
|
|
||||||
|
```Go
|
||||||
|
// 解析在us-west-2区域的S3服务的终端节点
|
||||||
|
resolver := endpoints.DefaultResolver()
|
||||||
|
endpoint, err := resolver.EndpointFor(endpoints.S3ServiceID, endpoints.UsWest2RegionID)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("failed to resolve endpoint", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Resolved URL:", endpoint.URL)
|
||||||
|
```
|
||||||
|
|
||||||
|
如果你需要自定义终端节点的解析逻辑,你可以实现 `endpoints.Resolver` 接口,并传值给`aws.Config.EndpointResolver`。当你打算编写自定义的终端节点逻辑,让 SDK 可以用来解析服务的终端节点时候,这个功能就会很有用。
|
||||||
|
|
||||||
|
以下示例,创建了一个配置好的 Session,然后 [Amazon S3][4] 服务的客户端就可以使用这个自定义的终端节点。
|
||||||
|
|
||||||
|
|
||||||
|
```Go
|
||||||
|
s3CustResolverFn := func(service, region string, optFns ...func(*endpoints.Options)) (endpoints.ResolvedEndpoint, error) {
|
||||||
|
if service == "s3" {
|
||||||
|
return endpoints.ResolvedEndpoint{
|
||||||
|
URL: "s3.custom.endpoint.com",
|
||||||
|
SigningRegion: "custom-signing-region",
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultResolver.EndpointFor(service, region, optFns...)
|
||||||
|
}
|
||||||
|
sess := session.Must(session.NewSessionWithOptions(session.Options{
|
||||||
|
Config: aws.Config{
|
||||||
|
Region: aws.String("us-west-2"),
|
||||||
|
EndpointResolver: endpoints.ResolverFunc(s3CustResolverFn),
|
||||||
|
},
|
||||||
|
}))
|
||||||
|
```
|
||||||
|
|
||||||
|
### 分区
|
||||||
|
|
||||||
|
`endpoints.DefaultResolver` 函数的返回值可以被 `endpoints.EnumPartitions`接口使用。这样就可以获取 SDK 使用的分区片段,也可以列出每个分区的分区信息。
|
||||||
|
|
||||||
|
```Go
|
||||||
|
// 迭代所有分区表打印每个分区的ID
|
||||||
|
resolver := endpoints.DefaultResolver()
|
||||||
|
partitions := resolver.(endpoints.EnumPartitions).Partitions()
|
||||||
|
|
||||||
|
for _, p := range partitions {
|
||||||
|
fmt.Println("Partition:", p.ID())
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
除了分区表之外,endpoints 包也提供了每个分区组的 getter 函数。这些工具函数可以方便列出指定分区,而不用执行默认解析器列出所有的分区。
|
||||||
|
|
||||||
|
```Go
|
||||||
|
partition := endpoints.AwsPartition()
|
||||||
|
region := partition.Regions()[endpoints.UsWest2RegionID]
|
||||||
|
|
||||||
|
fmt.Println("Services in region:", region.ID())
|
||||||
|
for id, _ := range region.Services() {
|
||||||
|
fmt.Println(id)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
当你获取区域和服务值后,可以调用 `ResolveEndpoint`。这样解析端点时,就可以提供分区的过滤视图。
|
||||||
|
|
||||||
|
获取更多 AWS SDK for GO 信息, 请关注[其开源仓库][5]。若你有更好的看法,请留言评论。
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://aws.amazon.com/cn/blogs/developer/using-the-aws-sdk-for-gos-regions-and-endpoints-metadata
|
||||||
|
|
||||||
|
作者:[Jason Del Ponte][a]
|
||||||
|
译者:[Vic020](http://vicyu.com)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://aws.amazon.com/cn/blogs/developer/using-the-aws-sdk-for-gos-regions-and-endpoints-metadata
|
||||||
|
[1]:https://github.com/aws/aws-sdk-go/releases/tag/v1.6.0
|
||||||
|
[2]:https://github.com/aws/aws-sdk-go
|
||||||
|
[3]:http://docs.aws.amazon.com/sdk-for-go/api/aws/endpoints/
|
||||||
|
[4]:https://aws.amazon.com/s3/
|
||||||
|
[5]:https://github.com/aws/aws-sdk-go/tree/master/example/aws/endpoints
|
@ -1,27 +1,29 @@
|
|||||||
# Arch Linux on a Lenovo Yoga 900
|
深入点评联想 Yoga 900 笔记本安装 Arch Linux 系统
|
||||||
联想 Yoga 900 笔记本安装 Arch Linux 系统后的感悟
|
==============
|
||||||
|
|
||||||
_注意:这篇文章比较长,有将近 5500 多个单词,而且还有很多非常有意思的链接,因此,你最好还是先给自己准备点喝的吧,然后再花时间来阅读。_
|
_注意:这篇文章比较长,有将近 5500 多个单词,而且还有很多非常有意思的链接,因此,你最好还是先给自己准备点喝的吧,然后再花时间来阅读。_
|
||||||
|
|
||||||

|
|
||||||
在 [联想 Yoga 2 笔记本电脑][2] 上使用了 3 年多的 Arch Linux 系统后,我决定换个新的 Yoga 900 笔记本电脑来安装 Arch Linux 系统:
|
在 [联想 Yoga 2 笔记本电脑][2] 上使用了 3 年多的 Arch Linux 系统后,我决定换个新的 Yoga 900 笔记本电脑来安装 Arch Linux 系统:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
_联想 Yoga 900 笔记本电脑在[亚马逊网站上的特价][1] 为 925 美元 —— 8GB 内存, 256 GB 固态硬盘, 3200×1800 的分辨率,处理器为 Skylake 3.2GHz , Iris Graphics 显卡。_
|
_联想 Yoga 900 笔记本电脑在[亚马逊网站上的特价][1] 为 925 美元 —— 8GB 内存, 256 GB 固态硬盘, 3200×1800 的分辨率,处理器为 Skylake 3.2GHz , Iris Graphics 显卡。_
|
||||||
|
|
||||||
同等配置的戴尔笔记本电脑 [XPS 13][3] 搭载新一代 Inter 处理器,售价 1650 美元。 Yoga 910 为当前最新款,价格为 1300 美元。但是,我压根就不会考虑这一款,因为它的键盘设计得太狗屎了。很多评论都从其外观颜色及材质方面大作文章,但是我偏偏从它的键盘设计上来挑刺。
|
同等配置的戴尔笔记本电脑 [XPS 13][3] 搭载新一代 Inter 处理器,售价 1650 美元。 Yoga 910 为当前最新款,价格为 1300 美元。但是,我压根就不会考虑这一款,因为它的键盘设计得太狗屎了。很多评论都从其外观颜色及材质方面大作文章,但是我偏偏从它的键盘设计上来挑刺。
|
||||||
|
|
||||||
### 键盘
|
### 键盘
|
||||||
|
|
||||||
|
|
||||||
Yoga 2 Pro 和 Yoga 900 这两款笔记本电脑从外观上看没啥区别。它的键盘设计跟曾经光鲜亮丽的 IBM Thinkpad 的键盘比起来可真是差远了,但是这还不算是最狗屎的键盘,好歹我还用了三年多的 Yoga 2 ,而且早已经习惯了。不幸的是,新款 Yoga 910 的键盘设计更是糟糕透了。
|
Yoga 2 Pro 和 Yoga 900 这两款笔记本电脑从外观上看没啥区别。它的键盘设计跟曾经光鲜亮丽的 IBM Thinkpad 的键盘比起来可真是差远了,但是这还不算是最狗屎的键盘,好歹我还用了三年多的 Yoga 2 ,而且早已经习惯了。不幸的是,新款 Yoga 910 的键盘设计更是糟糕透了。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
_Yoga 2 和 Yoga 900 的键盘布局_
|
_Yoga 2 和 Yoga 900 的键盘布局_
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
_Yoga 910 的键盘_
|
_Yoga 910 的键盘_
|
||||||
|
|
||||||
Yoga 910 键盘的问题是它的 右-shift 按键位置不合理,你不挪动手根本就按不到那个键。这个键的位置非常特殊,可以说是跟我上 9 年级打字课时所用的 IBM 打字机键盘到目前为止用过的所有键盘都不一样。我更愿意看到这个失误出现在华硕或是戴尔公司的电脑上,而不是来自于曾经让一代代美国人学习和工作并且创造了打印机传奇历史的 IBM 公司。
|
Yoga 910 键盘的问题是它的 右-shift 按键位置不合理,你不挪动手根本就按不到那个键。这个键的位置非常特殊,可以说是跟我上 9 年级打字课时所用的 IBM 打字机键盘到目前为止用过的所有键盘都不一样。我宁愿看到这个失误出现在华硕或是戴尔公司的电脑上,而不是来自于曾经让一代代美国人学习和工作并且创造了打印机传奇历史的 IBM 公司。(LCTT 译注:联想的 Yoga 还和 IBM 有什么关系么?)
|
||||||
|
|
||||||
Yoga 团队每一年都会更改键盘布局。想象一下,如果 IBM 公司在 20 世纪的时候也不断改变他们的打印机键盘布局,而且还吹嘘这是为了提高"[工作效率]"[4]。那么这个公司可能早就倒闭了!
|
Yoga 团队每一年都会更改键盘布局。想象一下,如果 IBM 公司在 20 世纪的时候也不断改变他们的打印机键盘布局,而且还吹嘘这是为了提高"[工作效率]"[4]。那么这个公司可能早就倒闭了!
|
||||||
|
|
||||||
@ -31,17 +33,17 @@ Yoga 团队每一年都会更改键盘布局。想象一下,如果 IBM 公司
|
|||||||
|
|
||||||
Yoga 910 的键盘布局改变得太多了,也许再也回不到曾经的老式键盘了。我希望 Yoga 的键盘不要再随便改了。我更愿意拥有一个比电脑更高效 10 倍的键盘。
|
Yoga 910 的键盘布局改变得太多了,也许再也回不到曾经的老式键盘了。我希望 Yoga 的键盘不要再随便改了。我更愿意拥有一个比电脑更高效 10 倍的键盘。
|
||||||
|
|
||||||
我在联想官网的评论中看到有些用户由于对 Yoga 910 的键使用不习惯的原因而申请退货。我觉得联想公司应该制定这样一条规定:如果革个工程师想更改键盘布局,他们必须给出一个***非常充分***的理由,如果这种设计给用户在使用方面造成了巨大的不便,那么将以剁其一根手指的代价来让他也体会下这种痛苦。如果真有这样一条规则,那么将会大大减少那些毫无意义的更改键盘的行为。 Yoga 910 笔记本电脑可以说是联想公司呕心沥血之杰作了,但是其输入系统却是一大败笔。
|
我在联想官网的评论中看到有些用户由于对 Yoga 910 的键使用不习惯的原因而申请退货。我觉得联想公司应该制定这样一条规定:如果某个工程师想更改键盘布局,他们必须给出一个**非常充分**的理由,如果这种设计给用户在使用方面造成了巨大的不便,那么将以剁其一根手指的代价来让他也体会下这种痛苦。如果真有这样一条规则,那么将会大大减少那些毫无意义的更改键盘的行为。 Yoga 910 笔记本电脑可以说是联想公司呕心沥血之杰作了,但是其输入系统却是一大败笔。
|
||||||
|
|
||||||
### 总体评价
|
### 总体评价
|
||||||
|
|
||||||
Yoga 2 对于我的任何操作,其反应速度都非常快。它的固态硬盘也非常给力,但是用在 Arch Linux 系统下就有些大材小用了。那些只使用 Windows 系统的用户就不会体会到他们的系统有多么的庞大臃肿:
|
Yoga 2 对于我的任何操作,其反应速度都非常快。它的固态硬盘也非常给力,但是用在 Arch Linux 系统下就有些大材小用了。那些只使用 Windows 系统的用户就不会体会到他们的系统有多么的庞大臃肿:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
在 90 年代时期,由于处理器的性能每隔 18 个月翻一倍,并且软件的大小也经常成倍的增长,因此,一款新的电脑每隔几年就会发布出来。现在早已发生了翻天覆地的变化。新款的 Yoga 900 笔记本电脑在运行性能测试的过程中,速度比我的 Yoga 2 还要快 30% 。 Yoga 900 的 CPU 主频为 3.2 GHz ,老款的 Yoga 2 主频为 2.6 GHz ,因此, Yoga 900 最大的亮点是更快的 CPU 处理频率。
|
在 90 年代时期,由于处理器的性能每隔 18 个月翻一倍,并且软件的大小也经常成倍的增长,因此,一款新的电脑每隔几年就会发布出来。现在早已发生了翻天覆地的变化。新款的 Yoga 900 笔记本电脑在运行性能测试的过程中,速度比我的 Yoga 2 还要快 30% 。 Yoga 900 的 CPU 主频为 3.2 GHz ,老款的 Yoga 2 主频为 2.6 GHz ,因此, Yoga 900 最大的亮点是更快的 CPU 处理频率。
|
||||||
|
|
||||||
Haswell 处理器架构于 2013 年发布了,而 Skylake 处理器架构在 2015 年才发布,因此,经过两年的发展,处理器性能有了很大的改善。新一代的处理器最大的改进是采用 14 纳米工艺制造技术来代替原先的 22 纳米工艺技术,这意味着新款笔记本电脑散热更小,电池使用时间更长。我的老款的 Yoga 2 笔记本在中等亮度的情况下,电池使用时长只有 3 个半小时左右,但是新款 Yoga 900 的电池使用时长高达 7 小时。
|
Haswell 处理器架构发布于 2013 年,而 Skylake 处理器架构在 2015 年才发布,因此,经过两年的发展,处理器性能有了很大的改善。新一代的处理器最大的改进是采用 14 纳米工艺制造技术来代替原先的 22 纳米工艺技术,这意味着新款笔记本电脑散热更小,电池使用时间更长。我的老款的 Yoga 2 笔记本在中等亮度的情况下,电池使用时长只有 3 个半小时左右,但是新款 Yoga 900 的电池使用时长高达 7 小时。
|
||||||
|
|
||||||
Yoga 2 的转轴已经开始松动和裂开了,我也没有一个好的办法来拧紧,只能从网上找新的配件来更换或者发给联想售后进行维修了。
|
Yoga 2 的转轴已经开始松动和裂开了,我也没有一个好的办法来拧紧,只能从网上找新的配件来更换或者发给联想售后进行维修了。
|
||||||
|
|
||||||
@ -59,114 +61,116 @@ Yoga 2 总的来说是一款设计精良的产品,但是如果我将显示器
|
|||||||
|
|
||||||
### 触摸板
|
### 触摸板
|
||||||
|
|
||||||
Yoga 2 最严重的问题出现在触摸板上。这不是硬件导致的,而是驱动程序自身的问题,由于触摸板驱动程序本身没人在维护,因此存在很多缺陷。很遗憾, Synaptics 公司本来可以很轻易地安排一个工程师来维护这几千行的代码,但是联想重新写了另外一个版本的与系统内核集成在一起的驱动程序,而且还没有公开发布出来。
|
Yoga 2 最严重的问题出现在触摸板上。这不是硬件导致的,而是驱动程序自身的问题,由于触摸板驱动程序本身没人在维护,因此存在一些缺陷。很遗憾, Synaptics 公司本来可以很轻易地安排一个工程师来维护这几千行的代码,但是联想重新写了另外一个版本的驱动程序,但是还没有开源发布出来,以便可以包括到系统内核中。
|
||||||
|
|
||||||
然而,为了让触摸板设备和其它输入设备的管理和使用更加方便简捷,一个叫做 [Libinput][5] 的新软件库被建立起来。 Libinput 最好的一点就是,维护人员会修复各种缺陷。还有一个很适用的功能就是如果你左指尖触摸鼠标单击区域,它现在会通过你的右指尖记录指针移动轨迹。但是,让人难以接受的事情是, Synaptics 的这个基本的功能在 Linux 系统中很多年前就无法使用了。
|
因此,为了让触摸板设备和其它输入设备的管理和使用更加方便简捷,建立了一个叫做 [Libinput][5] 的新软件库。 Libinput 最好的一点就是,维护人员会修复各种缺陷。还有一个很实用的功能就是如果你左指尖触摸鼠标单击区域,它现在会通过你的右指尖记录指针移动轨迹。但是,让人难以接受的事情是, Synaptics 的这个基本的功能在 Linux 系统中很多年前就无法使用了。
|
||||||
|
|
||||||
触摸板设备一直运行正常,但是它不再像以前那样发出敲击声了。实际上这也不是什么问题,但是这会让我担心我在触摸板上的操作是否正确。老款的 Thinkpad 笔记本电脑有好几个左右按键,因此,如果其中一个损坏了,你可以使用另外一个,但是 Yoga 笔记本只有一个鼠标左右按键,如果损坏了就只能插入鼠标来代替使用了。(联想还巴不得你的电脑赶紧坏了好换新的。)
|
触摸板设备一直运行正常,但是它不再像以前那样发出敲击声了。实际上这也不是什么问题,但是这会让我担心我在触摸板上的操作是否正确。老款的 Thinkpad 笔记本电脑有好几个左右按键,因此,如果其中一个损坏了,你可以使用另外一个,但是 Yoga 笔记本只有一个鼠标左右按键,如果损坏了就只能插入鼠标来代替使用了。(联想还巴不得你的电脑赶紧坏了好换新的。)
|
||||||
|
|
||||||
### 内核支持
|
### 内核支持
|
||||||
|
|
||||||
当年我购买 Haswell 处理器的笔记本电脑时,硬件都是最新的,因此,我折腾了好几个月才把 Linux 驱动程序相关的问题解决了。而现在我使用的新一代的 Skylake 处理器的笔记本电脑,在[处理器发布 8 个多月后][6],其内核崩溃的问题才被修复了。以前老款笔记本电脑的 [电源管理][7] 一直运行不正常,但是从新款笔记本电脑使用来看,以前的问题大都不存在了,而且有了很大的改善。如果用户不进行任何操作,这个笔记本电脑会自动进入到低功耗 C6-C10 状态。(这个功能是由 Linux 系统中的 **powertop 省电工具** 进行控制的。)
|
当年我购买 Haswell 处理器的笔记本电脑时,硬件都是最新的,因此,我折腾了好几个月才把 Linux 驱动程序相关的问题解决了。而现在我使用的新一代的 Skylake 处理器的笔记本电脑,在[处理器发布 8 个多月后][6],其内核崩溃的问题才被修复了。以前老款笔记本电脑的 [电源管理][7] 一直运行不正常,但是从新款笔记本电脑使用来看,以前的问题大都不存在了,而且有了很大的改善。如果用户不进行任何操作,这个笔记本电脑会自动进入到低功耗的 C6 - C10 状态。(这个功能是由 Linux 系统中的 **powertop 省电工具** 进行控制的。)
|
||||||
|
|
||||||
电源管理这个功能非常重要,它不仅会影响到电池的使用寿命,而且由于[电解迁移][8]的原因,那些非常小的电路板会逐渐耗尽。英特尔公司甚至发出公告:”电池使用的长期可靠性是无法保障的,除非所有程序都运行在低功耗的空闲状态。“通过让程序运行在低功耗模式下,以使用更小的电源回路,从而让电池使用寿命更长。
|
电源管理这个功能非常重要,它不仅会影响到电池的使用寿命,而且由于[电解迁移][8]的原因,那些微小电路会逐渐耗尽。英特尔公司甚至发出公告:”电池使用的长期可靠性是无法保障的,除非所有程序都运行在低功耗的空闲状态。“通过让程序运行在低功耗模式下,以使用更小的电路,从而让电池使用寿命更长。
|
||||||
|
|
||||||
现在 Haswell 处理器架构对 Linux 系统的支持性已经非常好了,但是之前的很长一段时间,它的支持性都很差。刚开始那一年,我提出了很多 Haswell 处理器相关的问题,但是现在可以看出这两款处理器在对 Linux 系统的支持上都有了很大的改善。
|
现在 Haswell 处理器架构对 Linux 系统的支持性已经非常好了,但是之前的很长一段时间,它的支持性都很差。刚开始那一年,我提出了很多 Haswell 处理器相关的问题,但是现在可以看出这两款处理器在对 Linux 系统的支持上都有了很大的改善。
|
||||||
|
|
||||||
### 联想笔记本的 BIOS 不兼容 Linux 系统
|
### 联想笔记本的 BIOS 不兼容 Linux 系统
|
||||||
|
|
||||||
在 Yoga 900 电脑上安装 Arch Linux 系统之前,我得在 Windows 系统中再格式化出一个新的 BIOS 分区来。实际上,我的电脑中得有 2 个 BIOS 系统。最新版本的 Yoga 900 BIOS [不包括][9]我需要的必备修补程序,犹豫了一会之后,我恍然大悟,然后我 [安装][10]了一个单独的 "仅 Linux 系统" 的 BIOS 更新,这样我的联想电脑就不再支持 Windows 系统了:"你不可怜下我吗?“
|
在 Yoga 900 电脑上安装 Arch Linux 系统之前,我得在 Windows 系统中再刷一个新的 BIOS 。实际上,我的电脑中得有 2 个 BIOS。最新版本的 Yoga 900 BIOS [不包括][9]我需要的必备修补程序,所以在挠头了一会之后,我恍然大悟,然后我 [安装][10]了一个单独的“仅 Linux 系统”的 BIOS 更新,这样我的联想电脑就不再支持 Windows 系统了:“你不[可怜][11]下我吗?”
|
||||||
|
|
||||||
那些经常关注 Linux 系统的用户就很清楚, Yoga 900 和其它最新款的联想笔记本电脑无法安装 Linux 系统,因为它不会[检测硬件驱动程序][12]。联想回复其笔记本电脑已不再支持 Linux 系统了,因为它使用的是[新型的 RAID 控制器模式][13] 。然而,实现 RAID 机制就意味着需要更多的磁盘,而笔记本电脑只有一个硬盘,并且也没有多余的空间来安装另外一块磁盘了。
|
那些经常关注 Linux 系统的用户就很清楚, Yoga 900 和其它最新款的联想笔记本电脑无法安装 Linux 系统,因为它甚至不能[检测到硬盘][12]。联想最初回复其笔记本电脑已不再支持 Linux 系统了,因为它使用的是[新型的 RAID 控制器模式][13] 。然而,实现 RAID 机制就意味着更多的磁盘,而笔记本电脑实际上只有一个硬盘,并且也没有多余的空间来安装另外一块磁盘了。
|
||||||
|
|
||||||
下面是联想给出的[官方解释][14]:
|
下面是联想给出的[官方解释][14]:
|
||||||
|
|
||||||
>“为了更好地支持 Yoga 系列产品以及整个行业领先的 360 度铰链转轴设计技术的发展,我们采用了一种存储控制器模式,很遗憾,这种模式不支持 Linux 系统,也不允许安装 Linux 系统。”
|
> “为了更好地支持 Yoga 系列产品以及行业领先的 360 度铰链转轴设计技术的发展,我们采用了一种存储控制器模式,很遗憾,这种模式不支持 Linux 系统,不能够安装 Linux 系统。”
|
||||||
|
|
||||||
我觉得很搞笑,为了转轴而采用特殊的存储控制器!这就好比一个汽车制造公司宣称由于新型的广播设备,他们必须改变汽车的轮胎一样。
|
我觉得很搞笑,为了转轴而采用特殊的存储控制器!这就好比一个汽车制造公司宣称由于新型的广播设备,他们必须改变汽车的轮胎一样。
|
||||||
|
|
||||||
这引发了巨大的争议,感谢 Reddit 网站的 [Baron][15][H][16][K][17] 的努力,他为媒体提供了大量的信息,并联系了伊利诺斯州检查院。搜索 "[联想 Yoga][18][L][19][inux 兼容性][20]" 出现 300,000 条结果。联想或许会因为销售不允许用户安装自己的操作系统的”通用“ PC 而触犯法律。对于我来说,为电脑设置默认的操作系统是毫无意义的。
|
这引发了巨大的争议,感谢 Reddit 网站的 [BaronHK][15] 的努力,他为媒体提供了大量的信息,并联系了伊利诺斯州检查院。搜索 "[联想 Yoga 的 Linux 兼容性][20]" 出现 300,000 条结果。联想或许会因为销售不允许用户安装自己的操作系统的“通用”PC 而触犯法律。对于我来说,为电脑设置默认的操作系统是毫无意义的。
|
||||||
|
|
||||||
黑客也被卷入到这场”战争“中进来,他们最终发现通过设置 UEFI ,这款笔记本也能够支持 AHCI 控制器模式,只是默认被禁用了。简单来说,联想故意取消对 Linux 系统的支持没啥好处。因为大家都已经明白事实真相了,如果这件事闹到法庭上,联想也只能自取其辱。
|
技术高手们也被卷入到这场“战争”中进来,他们最终发现通过设置 UEFI ,这款笔记本也能够支持 AHCI 控制器模式,只是默认被禁用了。简单来说,联想故意取消对 Linux 系统的支持没啥好处。因为大家都已经明白事实真相了,如果这件事闹到法庭上,联想也只能自取其辱。
|
||||||
|
|
||||||
幸运的是,这些新闻引起了他们的关注,并且他们也逐渐地更新了 BIOS 。这篇文章就是在运行着 Linux 系统的 Yoga 900 笔记本电脑上写的,因此,我们应该庆祝下这个伟大的胜利。大家都希望联想从中受到教训,但是我并不看好。他们本来就应该为你的电脑提供一个选择操作系统的机会。他们应该在用户之前就发现了这个缺陷了。我将等待一个周左右的时间才能拿到定制化的电脑。他们应该把分区设置好,并且让用户定制很多东西,安装最新版的软件,而不是使用一个需要很多更新的老镜像文件。
|
幸运的是,这些新闻引起了他们的关注,并且他们最终更新了 BIOS 。这篇文章就是在运行着 Linux 系统的 Yoga 900 笔记本电脑上写的,因此,我们应该庆祝下这个伟大的胜利。大家都希望联想从中受到教训,但是我并不看好。他们本来就应该为你的电脑提供一个选择操作系统的机会。他们应该在用户之前就发现了这个缺陷了。我将等待一周左右的时间才能拿到定制化的电脑。他们应该把分区设置好,并且让用户定制很多东西,安装最新版的软件,而不是使用一个需要很多更新的老镜像文件。
|
||||||
|
|
||||||
一些钟爱联想电脑的用户认为这是 Linux 系统自己的问题,是 Linux 系统本身就不支持最新的 RAID 驱动模式导致的问题。然而, AHCI 控制器模式本来是一个非常流行的标准,但是由于英特尔公司为这种硬件写的代码"[太糟糕][21]"而被 Linux 系统内核开发团队拒绝了。该团队要求英特尔公司提供这种硬件的详细设计说明,但是他们一直没有给出任何答复。
|
一些钟爱联想电脑的用户认为这是 Linux 系统自己的问题,是 Linux 系统本身就不支持最新的 RAID 驱动模式导致的问题。然而, AHCI 控制器模式本来是一个非常流行的标准,而由于英特尔公司为这种新的 RAID 硬件写的代码“[太糟糕][21]”而被 Linux 系统内核开发团队拒绝了。该团队要求英特尔公司提供这种硬件的详细设计说明,但是他们一直没有给出任何答复。
|
||||||
|
|
||||||
### 散热
|
### 散热
|
||||||
|
|
||||||
当 CPU 占用很高时, Yoga 2 笔记本会变得很烫。有一次我把笔记本放到毯子上编译 LibreOffice 软件时就把底部的塑料壳烧焦了,这实在是太丑陋了,这让我看上去像是一个很穷酸的程序员。我试着用铁刷子和松脂油来擦除烧售的部分,但是也没什么鸟用。
|
当 CPU 占用很高时, Yoga 2 笔记本会变得很烫。有一次我把笔记本放到毯子上编译 LibreOffice 软件时就把底部的塑料壳烧焦了,这实在是太丑陋了,这让我看上去像是一个很穷酸的程序员。我试着用铁刷子和松脂油来擦除烧焦的部分,但是也没什么鸟用。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
新款的笔记本电脑使用金属外壳,不容易褪色,并且 Skylake 处理器架构比 Haswell 的要强劲得多。把散热口设计了跟转轴融合在一起,这是一个非常明智及巧妙的做法,如果散热口在其它位置则可能被堵塞住。
|
新款的笔记本电脑使用金属外壳,不容易褪色,并且 Skylake 处理器架构比 Haswell 的要强劲得多。把散热口设计了跟转轴融合在一起,这是一个非常明智及巧妙的做法,如果散热口在下方则可能被堵塞住。
|
||||||
|
|
||||||
用了很多年的 Yoga 2 ,我觉得最烦人的一件事就是它的风扇里累积了厚厚的尘埃,运行时听上去就像是沙子摩擦的声音!这些尘埃分布得很广,使用时产生的声音也大,让人容易分心。我把笔记本电脑拆开来清除里面的尘埃,但是风扇的叶片是隐藏的,无法进行清除。我只能把整个风扇替换掉了。在 Yoga2 上完成简单的工作,比如文字处理和浏览器上网时,风扇不会旋转,但是当它旋转时,如果不带耳机会感到很烦人。
|
用了很多年的 Yoga 2 ,我觉得最烦人的一件事就是它的风扇里累积了厚厚的尘埃,运行时听上去就像是沙子摩擦的声音!这些尘埃分布得很广,使用时产生的声音也大,让人容易分心。我把笔记本电脑拆开来清除里面的尘埃,但是风扇的叶片是隐藏的,无法进行清除。我只能把整个风扇替换掉了。在 Yoga2 上完成简单的工作,比如文字处理和浏览器上网时,风扇不会旋转,但是当它旋转时,如果不带耳机会感到很烦人。
|
||||||
|
|
||||||
Yoga 900 的风扇叶片密度很高,而且运行的很平稳,也不会让人分心。 Yoga 900 的风扇好像一直都在旋转,但是速度非常慢,而且声音很小也很安静。我家里电冰箱和空气净化器的声音都要比它大得多,除了笔记本电脑在负载的情况下声音有点大,不过那也不影响我工作。
|
Yoga 900 的风扇叶片密度很高,而且运行的很平稳,也不会让人分心。 Yoga 900 的风扇好像一直都在旋转,但是速度非常慢,而且声音很小也很安静。我家里电冰箱和空气净化器的声音都要比它大得多,除了笔记本电脑在高负载的情况下声音有点大,不过那也不影响我工作。
|
||||||
|
|
||||||
### 显示器
|
### 显示器
|
||||||
|
|
||||||
Yoga 2 的显示屏很大气,但是也同样存在大家所熟知的问题,比如屏幕上的黄色看上去更像是橙色。然而,整体画质看起来还算细腻,其它颜色方面也不错。 Yoga 900 的屏幕已经修复了那个黄颜色的问题。它不是一个真正的 4K 屏,实际上仅有 3200×1800 的分辨率,但是从 15.6 寸的显示屏上看,它的像素要比真正的 4K 屏要细腻得多,所以显示效果超级锐利。
|
Yoga 2 的显示屏很大气,但是也同样存在大家所熟知的问题,比如屏幕上的黄色看上去更像是橙色。然而,整体画质看起来还算细腻,其它颜色方面也不错。 Yoga 900 的屏幕已经修复了那个黄颜色的问题。它不是一个真正的 4K 屏,实际上仅有 3200×1800 的分辨率,但是从 15.6 寸的显示屏上看,它的像素要比真正的 4K 屏要细腻得多,所以显示效果超级锐利。有些人说这屏幕分辨率是假的,因为它使用了“[RG/BW Pentile 矩阵](http://i.imgur.com/8pYBfcU.png)”,但是对我来说,高分辨率的图片看起来就很棒,何况文本。
|
||||||
|
|
||||||
当年我购买 Yoga 2 笔记本电脑时,由于其使用的是当时最新的 Haswell 处理器架构,所以我遇到很多英特尔显卡显示异常的问题,这些问题过了几个月后才被解决。之后,我还发现了一个会导致 Linux 系统崩溃的内存泄漏问题,并且这个缺陷好多年都没被处理。
|
当年我购买 Yoga 2 笔记本电脑时,由于其使用的是当时最新的 Haswell 处理器架构,所以我遇到了各种英特尔显卡显示异常的问题,这些问题过了几个月后才被解决。之后,我还发现了一个会导致 Linux 系统崩溃的内存泄漏问题,并且这个缺陷好多年都没被处理。
|
||||||
|
|
||||||
我在 VLC 播放器中使用( shift + 箭头键)快进视频时,遇到了好几次内存耗尽的问题。系统也没显示 VLC 播放器占用了多少的内存,但是电脑内存却耗尽了。很明显这是内核导致的内存泄漏问题。我创建了一个 swap 文件作为虚拟内存使用,以减少内存耗尽的时间,但是有好几次我没注意时,这个文件又被占满了。几年后,这个问题逐渐消失了,而且现在 Linux 系统也运行得很稳定。
|
我在 VLC 播放器中使用 shift + 箭头键快进视频时,遇到了好几次内存耗尽的问题。系统也没显示 VLC 播放器占用了多少的内存,但是电脑内存却耗尽了。很明显这是内核导致的内存泄漏问题。我创建了一个 swap 文件作为虚拟内存使用,以减少内存耗尽的时间,但是有好几次我没注意时,这个文件又被占满了。几年后,这个问题逐渐消失了,而且现在 Linux 系统也运行得很稳定。
|
||||||
|
|
||||||
大家都认为英特尔公司为 Linux 系统开发的驱动程序是最好的,但是他们更像是微软内部的一个实验项目。英特尔 公司的驱动程序开发人员都很专业,只是 Linux 系统的驱动开发人员都不够多。在发布硬件之前,他们都竭力让驱动程序做得更完美。 英特尔公司生产的 [1][22][13][23] [这些处理器][24] 都是基于 Skylake 处理器架构的,只是在特性上有细微的区别。听起来你会觉得有很多类型的处理器,但是在 [Haswell 处理器][25] 时期,英特尔公司生产出高度集成的 256 核芯片处理器。10 年前我听一个 Inter 公司的员工说过,相对于 Windows 来说,他们仅投入了 1% 到 Linux 系统上,从现在的情形来看,确实是那样的。
|
大家都认为英特尔公司为 Linux 系统开发的驱动程序是最好的,但是他们更像是微软内部的一个秘密的臭鼬工厂项目。英特尔公司的驱动程序开发人员都很专业,就是人员不够多。在发布硬件之前,他们都竭力让驱动程序做得更完美。 英特尔公司生产的 [113 款处理器][24] 都是基于 Skylake 处理器架构的,只是在特性上有细微的区别。听起来你会觉得有很多类型的处理器,但是在 [Haswell 处理器][25] 时期,英特尔公司生产了 256 款芯片。10 年前我听一个英特尔公司的员工说过,相对于 Windows 来说,他们仅投入了 1% 到 Linux 系统上,从现在的情形来看,确实是那样的。
|
||||||
|
|
||||||
在我使用 Yoga 2 的过程中唯一遇到的性能问题是无法正常播放 4K 视频。屏幕经常出现卡顿,或是出现每秒跳跃 5 帧的现象:
|
在我使用 Yoga 2 的过程中唯一遇到的性能问题是无法正常播放 4K 视频,屏幕经常出现卡顿,或是出现每秒才播放 5 帧的现象:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Yoga 2 甚至是在播放 1920×1080 分辨率的视频时有时候也显得很吃力,看样子它最多只能以 60fps 的速度来播放视频。出现这样的情况也可能是因为我一直在运行着其它的应用程序,比如 Firefox 浏览器和 LibreOffice 办公软件。
|
Yoga 2 甚至是在播放 1920×1080 分辨率的视频时有时候也显得很吃力,看样子它最多只能以 60fps 的速度来播放视频。出现这样的情况也可能是因为我一直在运行着其它的应用程序,比如 Firefox 浏览器和 LibreOffice 办公软件。
|
||||||
|
|
||||||
Skylake 处理器主要用于在 60 fps 的速度下使用 H.264 、 VP9 以及其它解码方式来播放 4K 视频。实际上这款处理器中有很多硬件专门用于加速[多媒体][26][特性][27]。我尝试使用 **ffmpeg 软件** 来处理 H264 格式的硬件编码,我发现即使只使用一个 CPU 的情况下,其处理速度也比原来的处理器快 4 倍。这种性能太棒了。不爽的是,在设置的过程中有点麻烦,因为你必须使用很多命令行参数:
|
Skylake 处理器主要用于在 60fps 的速度下使用 H.264 、 VP9 以及其它编解码方式来播放 4K 视频。实际上这款处理器中有很多硬件专门用于加速[多媒体特性][27]。我尝试使用 **ffmpeg 软件** 来处理 H264 格式的硬件编码,我发现即使只使用一个 CPU 的情况下,其处理速度也比原来的处理器快 4 倍。这种性能太棒了。不爽的是,在设置的过程中有点麻烦,因为你必须使用很多命令行参数:
|
||||||
|
|
||||||
|
```
|
||||||
|
-threads 1 -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format='nv12|vaapi,hwupload'
|
||||||
|
```
|
||||||
|
|
||||||
“**-threads 1 -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format=’nv12|vaapi,hwupload’**”
|
我尝试找到一种方法让 **ffmpeg 软件** 保存这些命令,这样我就不用每次都手动输入这么多参数了,但是最后发现根本行不通。而且无论怎样,在整个过程中也不能自动传递这些参数。我还发现在使用这个硬件的的过程中不能缩放视频尺寸,它会忽略该操作,因此,我很少会用这个工具。如果 **ffmpeg 软件** 可以实现这一点就完美了。由于很多用户都不了解,或者是不想太麻烦,所以还有很多未使用的硬件资源。这个软件有很多跟 Linux 系统和 Windows 系统相关的应用接口,如果要进行视频编码和解码,将会是[一件麻烦事][28]。
|
||||||
|
|
||||||
我尝试找到一种方法让 **ffmpeg 软件** 保存这些命令,这样我就不用每次都手动输入这么多参数了,但是最后发现根本行不通。而且无论怎样,在整个过程中也不能自动传递这些参数。我还发现在使用这个硬件的的过程中不能重置视频大小,只能忽略或接受,因此,我很少会用这个工具。如果 **ffmpeg 软件** 可以实现这一点就完美了。由于很多用户都不了解,或者是不想太麻烦,所以还有很多未使用的硬件资源。这个软件有很多跟 Linux 系统和 Windows 系统相关的应用接口,如果要进行视频编码和解码,将会是[一件麻烦事][28]。
|
Skylake 处理器架构在播放 4K 视频方面表现得更出色,但是有时候它也会出现卡顿现象,然后瞬间降到 10fps 的播放速度。我想起其中一部分卡顿现象就是在播放《X 战警》的过程中。我尝试在 Wayland 下播放 4K 视频时却很流畅,这让我非常满意。很高兴看到 OpenGL 给予的大力支持。在硬件方面, 英特尔公司 2014 年以来支持的最新版本是 4.5 。
|
||||||
|
|
||||||
Skylake 处理器架构在播放 4K 视频方面表现得更出色,但是有时候它也会出现卡顿现象,然后瞬间降到 10 fps 的播放速度。我想起其中一部分卡顿现象就是在播放《X 战警》的过程中。我尝试在 Wayland 下播放 4K 视频时却很流畅,这让我非常满意。很高兴看到 OpenGL 给予的大力支持。在硬件方面, Inter 公司 2014 年以来支持的最新版本是 4.5 。
|
我的 Yoga 900 (-13ISK2)笔记本电脑实际上是一个升级版,使用比 520 [更快][29] 的 Iris 540 图像协同处理器,而且它的流处理器多达 24 个。然而,它只能用来玩 SuperTuxKart 游戏,而且还得将游戏显示效果设置为中等,分辨率调整为 1600×900 ,速度为 20fps ,我也不想在这里吹什么牛。说真的,这款游戏比前几年改善了很多,而且游戏界面也漂亮得多。
|
||||||
|
|
||||||
我的 Yoga 900 (-13ISK2) 笔记本电脑实际上是一个升级版,使用比 520 [更快][29] 的 Iris 540 图像协同处理器,而且它的流处理器多达 24 个。然而,它只能用来玩 SuperTuxKart 游戏,而且还得将游戏显示效果设置为中等,分辨率调整为 1600×900 ,速度为 20 fps ,我也不想在这里吹什么牛。说真的,这款游戏比前几年改善了很多,而且游戏界面也漂亮得多。
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
英特尔公司在中国有一个从事[使能][30]的团队,专门支持 OpenCL 对显卡的使用。但是,我从未看到 Blender 的任何用户使用它,因此我怀疑这个团队是不是作摆设用的。英特尔公司已经很长时间都没有支持 OpenCL 了,那些使用 Blender 软件处理重要工作的用户早已换成 Nvidia 或者 AMD 显卡,即使英特尔公司后来重新写了代码,大家也没太多的兴趣做测试。
|
英特尔公司在中国有一个团队致力于[使][30] 该显卡支持 OpenCL。但是,我从未看到 Blender 的任何用户使用它,因此我怀疑这个团队是不是作摆设用的。英特尔公司已经很长时间都没有支持 OpenCL 了,那些使用 Blender 软件处理重要工作的用户早已换成 Nvidia 或者 AMD 显卡,即使英特尔公司后来重新写了代码,大家也没太多的兴趣做测试。
|
||||||
|
|
||||||
有一件事让我感到非常意外,我在另外一台机器上做光线追踪测试时发现,一个四核的处理器比使用循环引擎的 NVidia 960M 的处理器要快得多。很明显,在处理那个任务时, 640 CUDA 多核心处理器也比不上 4 个英特尔公司的 CPU 。更高级的英特尔处理器有 2000 多个核心,性能更强悍。
|
有一件事让我感到非常意外,我在另外一台机器上做光线追踪测试时发现,一个四核的处理器比使用循环引擎的 NVidia 960M 的处理器要快得多。很明显,在处理那个任务时, 640 CUDA 多核心处理器也比不上 4 个英特尔公司的 CPU 。更高级的英特尔处理器有 2000 多个核心,性能更强悍。
|
||||||
|
|
||||||
### HiDPI
|
### HiDPI 高分辨率支持
|
||||||
|
|
||||||
最近这几年, Linux 系统在高分辨率屏幕方面已经做得越来越好了,但是仍然有很长的路要走。还好目前的 Gnome 版本对 HiDPI 的支持也算完美。如果你把火狐浏览器的 **layout.css.devPixelsPerPx** 这个参数值设置为 2\ ,其显示效果更美观。然而这个 13.3 寸的屏幕分辨率还是显得略小了些,我还安装了一个无斜视加强版插件,这让屏幕在 120 度范围内看起来更方便。
|
最近这三年来, Linux 系统在高分辨率屏幕方面已经做得越来越好了,但是仍然有很长的路要走。还好目前的 Gnome 版本对 HiDPI 的支持也算完美。如果你把火狐浏览器的 **layout.css.devPixelsPerPx** 这个参数值设置为 2 ,其显示效果更美观。然而这个 13.3 寸的屏幕分辨率还是显得略小了些,我还安装了一个无斜视加强版(No-Squint Plus)插件,这让屏幕在 120 度范围内看起来更方便。
|
||||||
|
|
||||||
很高兴地看到 LibreOffice 办公软件的界面在当前设置的屏幕下变得更加美观,因为我安装了 2014 年 4 月份发布的[一些补丁][31],而且这些功能还一直在不断的完善中。最大的问题是 LibreOffice 软件界面的工具图标重叠起来了。有很多主题都包括 SVG 图标,但是这些图标不会跟产品一起发布出来。跟 PNG 类型的图标相比, SVG 图标加载更慢,而且还要占用缓存。[Tomaž Vajngerl 在这方面投入很多的精力][32],但是还未发布出来。尽管这样, LibreOffice 比那些没有易识别图标的 Linux 系统应用程序要漂亮得多。
|
很高兴地看到 LibreOffice 办公软件的界面在当前设置的屏幕下变得更加美观,因为我安装了 2014 年 4 月份发布的[一些补丁][31],而且这些功能还一直在不断的完善中。最大的问题是 LibreOffice 软件界面的工具图标重叠起来了。有很多主题都包括 SVG 图标,但是这些图标不会跟产品一起发布出来。跟 PNG 类型的图标相比, SVG 图标加载更慢,而且还要缓存才行。[Tomaž Vajngerl 在这方面投入很多的精力][32],但是还未发布出来。尽管这样, LibreOffice 比那些没有易识别图标的 Linux 系统应用程序要漂亮得多。
|
||||||
|
|
||||||
应用程序在高分辨率屏幕中的检测与应用方面正在不断的完善,但是还有其它一些很流行的小程序,比如 Gimp ,Audacity 和 Inkscape 仍然不能使用。我为 Gimp 软件安装了一个很强大的定制化主题,但是所有的图标都变得大不一样,尽管这些图标已经显示得够大了,但是也很难识别出来。
|
应用程序在高分辨率屏幕中的检测与应用方面正在不断的完善,但是还有其它一些很流行的程序,比如 Gimp ,Audacity 和 Inkscape 仍然不能使用高分辨率屏幕。我为 Gimp 软件安装了一个很强大的定制化主题,但是所有的图标都变得大不一样,尽管这些图标已经显示得够大了,但是也很难识别出来。
|
||||||
|
|
||||||
Linux 系统仅占了 1.5% 的市场份额,然而,遗憾的是其相关负责人也没有对这些问题给予更多的重视。虽然很多应用软件逐步使用 GTK 3 工具来开发它们的图形界面,但是 Audacity 这款音频处理软件好像是已经[终止][33]开发了。在第一次调查中我发现,那些提供长期支持的应用程序仍然有很多地方需要改进,但是 3 年多过去了,即使是那些很出名的软件也没做到位。
|
Linux 系统占有了 1.5% 的市场份额,遗憾的是这些问题并没有得到更多的重视。虽然很多应用软件逐步使用 GTK 3 来开发它们的图形界面,但是比如说 Audacity 这款音频处理软件好像是已经[终止][33]开发了。在我的第一篇评论中我发现,那些提供长期支持的应用程序仍然有很多地方需要改进,但是 3 年多过去了,即使是那些很出名的软件也没做到位。
|
||||||
|
|
||||||
### SSD 固态硬盘
|
### SSD 固态硬盘
|
||||||
|
|
||||||
由于我平时对系统做了各种各样的优化,尤其是对火狐浏览器做的优化,因此我的老款电脑的硬盘仍然可以正常工作。还记得我的 **/tmp** 目录被我设置成自动作为 RAM 设备,因此,我经常把文件默认下载到那里。有时候我会在 /tmp 目录下把一个 500 MB 的视频剪辑成 20 MB 的小视频,或者是转换成另外的格式,因此我对硬盘的写操作做得比较频繁。这样做的工作量很大,也可能没必要,但是在 RAM 存储中运行速度更快。
|
由于我平时对系统做了各种各样的优化,尤其是对火狐浏览器做的优化,因此我的老款电脑的硬盘仍然可以正常工作。还记得我的 **/tmp** 目录被我自动设置为 RAM 设备,因此,我经常把文件默认下载到那里。有时候我要把一个 500 MB 的视频剪辑成 20 MB 的小视频,或者是转换成另外的格式,因此我在 /tmp 目录下做这些工作节约了大量的写入操作。这样做需要更多的工作量,也可能没必要,但是在 RAM 存储中运行速度更快。
|
||||||
|
|
||||||
在这三年里,我几乎对每个硬盘的存储单元做了 25 次写入,这意味着这块硬盘可以使用 350 年左右。极大部分的写操作都用于 Arch Linux 系统的更新。我每个月都会构建新的 LibreOffice 软件,每周都会更新“稳定”版系统内核。实时把系统升级到最新棒真的让人很爽,但是与 Debian 的稳定版系统相比起来,这将会进行 100 多次写入操作。然后,能够让每一个系统组件都升级到最新版,这也是值得的。
|
在这三年里,我几乎对每个硬盘的存储单元做了 25 次写入,这意味着这块硬盘可以使用 350 年左右。绝大部分的写操作都用于 Arch Linux 系统的更新。我每个月都会构建新的 LibreOffice 软件,每周都会更新“稳定”版系统内核。实时把系统升级到最新棒真的让人很爽,但是与 Debian 的稳定版系统相比起来,这将会进行 100 多次写入操作。然而,能够让每一个系统组件都升级到最新版,这也是值得的。
|
||||||
|
|
||||||
新的三星硬盘诊断工具也无法检测出每个硬盘存储单元的写次数。事实上,我也不能确定这个硬盘的存储单元类型是什么以及在处理任务的过程中写了多少次。我相信从“占用率“这个数据可以看到硬盘的使用时长,但是也许这只跟空闲的存储单元有关。我没有找到任何相关文档,因此我只能猜测到大致跟下面的数据差不多了:
|
新的三星硬盘诊断工具无法检测出每个硬盘存储单元的写次数。事实上,我也不能确定这个硬盘的存储单元类型是什么以及在处理任务的过程中写了多少次。我相信从“已用百分比“这个数据可以看到硬盘的使用时长,但是也许这只跟空闲的存储单元有关。我没有找到任何相关文档,因此我只能猜测到大致跟下面的数据差不多了:
|
||||||
|
|
||||||
|||
|
|
||||||
|--|--|
|
| **型号:** | **SAMSUNG MZVLV256HCHP-000L2** |
|
||||||
| **型号:** | **SAMSUNG MZVLV256HCHP-000L2** |
|
| --- | --- |
|
||||||
| **固件版本(0x06):** | **3 Slots** |
|
| **固件版本(0x06):** | **3 Slots** |
|
||||||
| **可用空间:** | **100%** |
|
| **可用空间:** | **100%** |
|
||||||
| **可用的空闲阈值:** | **10%** |
|
| **可用的空闲阈值:** | **10%** |
|
||||||
| **已用百分比:** | **0%** |
|
| **已用百分比:** | **0%** |
|
||||||
| ****存储单元写数据:**** | **198,997 [101 GB]** |
|
| **读取的数据单元:** | **198,997 [101 GB]** |
|
||||||
| **存储单元写数据:** | **305,302 [156 GB]** |
|
| **写入的数据单元:** | **305,302 [156 GB]** |
|
||||||
| **主机读命令:** | **3,480,816** |
|
| **主机读命令:** | **3,480,816** |
|
||||||
| **主机写命令:** | **10,176,457** |
|
| **主机写命令:** | **10,176,457** |
|
||||||
| **错误日志条目信息:** | **5** |
|
| **错误日志条目:** | **5** |
|
||||||
|
|
||||||
### 损坏的左 Ctrl 键
|
### 损坏的左 Ctrl 键
|
||||||
|
|
||||||
@ -184,13 +188,13 @@ Yoga 900 键盘布局跟 Yoga 2 Pro 版一致,但是内部结构不同。 Yoga
|
|||||||
|
|
||||||
我用了好几个小时后才注意到了这个问题,我确信那是生产笔记本电脑过程中的疏忽导致的。这是一块非常小的塑料块,在装配的过程中就早已变形或损坏了。
|
我用了好几个小时后才注意到了这个问题,我确信那是生产笔记本电脑过程中的疏忽导致的。这是一块非常小的塑料块,在装配的过程中就早已变形或损坏了。
|
||||||
|
|
||||||
尽管这个电脑还在保修期,可以免费进行维修,我可不想为这些小事情耽搁太多时间,因此我在网上找到一个叫做 laptopkey.com 的网站,然后订购了一个换键和转轴。真是太诡异了,竟然有三种类型的转轴!我花了好一会才搞明白我的电脑适合哪一种类型,因为这三种类型太难区分了:
|
尽管这个电脑还在保修期,可以免费进行维修,我可不想为这些小事情耽搁太多时间,因此我在网上找到一个叫做 laptopkey.com 的网站,然后订购了一个换键和支架。真是太诡异了,竟然有三种类型的支架!我花了好一会才搞明白我的电脑适合哪一种类型,因为这三种类型太难区分了:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
因此我预定了这个配件,但是还得花费至少一个星期的时间才到收到。这真是太让我抓狂了,因为我每次使用复制粘贴、视频跳跃或者是在编辑器里按单词移动及其它相关操作时,只能使用右 Ctrl 键。我觉得我可以把右边的 Ctrl 键更换到左边来,但是我从未这么弄过。
|
因此我预定了这个配件,但是还得花费至少一个星期的时间才到收到。这真是太让我抓狂了,因为我每次使用复制粘贴、视频跳跃或者是在编辑器里按单词移动及其它相关操作时,只能使用右 Ctrl 键。我觉得我可以把右边的 Ctrl 键更换到左边来,但是我从未这么弄过。
|
||||||
|
|
||||||
因此,我尝试跟着网上找到的视频步骤把这个键弄下来:我先用指甲扣起左上角到一定高度。然后用同样的方式操作右上角,但是另外一个小塑料片被折断了,因此我弄坏了两个键轴。如果不损坏这些非常细小的塑料夹片,根本不可能把按键撬下来。这种类型的键盘只不是理论上可以进行更换吧。
|
因此,我尝试跟着网上找到的视频步骤把这个键弄下来:我先用指甲扣起左上角到一定高度。然后用同样的方式操作右上角,但是另外一个小塑料片被折断了,因此我弄坏了两个键轴。如果不损坏这些非常细小的塑料夹片,根本不可能把按键撬下来。这种类型的键盘只不过是理论上可以进行更换吧。
|
||||||
|
|
||||||
因此,我决定采用笨办法,使用强力胶。我情愿让这个该死的按键就这样固定死了,我暂时没有一个紧急的方法来替换它们。这真是太折腾了,因为我只需要大概直径 1mm 的胶水:如果弄太多的胶水可能会让情况变得更糟糕。
|
因此,我决定采用笨办法,使用强力胶。我情愿让这个该死的按键就这样固定死了,我暂时没有一个紧急的方法来替换它们。这真是太折腾了,因为我只需要大概直径 1mm 的胶水:如果弄太多的胶水可能会让情况变得更糟糕。
|
||||||
|
|
||||||
@ -200,42 +204,41 @@ Yoga 900 键盘布局跟 Yoga 2 Pro 版一致,但是内部结构不同。 Yoga
|
|||||||
|
|
||||||
在我使用了 3 年多的 Arch Linux 系统之后,我再也没兴趣去尝试其它操作系统了。虽然英特尔公司更新驱动程序的步伐有些落后,但是无论怎样,在日常工作中使用 Arch Linux 系统还是挺让人愉快的,而且每一个星期都有所进步。实时更新任何程序真的让人很爽。我经常使用比 Ubuntu 系统发布时间还要新的软件包。虽然 Ubuntu 用户可以在自定义的 PPA 中找到更新的软件包,但是这种软件包都没有经过任何测试或修复,因此用户在使用过程中会遇到各种各样的问题。
|
在我使用了 3 年多的 Arch Linux 系统之后,我再也没兴趣去尝试其它操作系统了。虽然英特尔公司更新驱动程序的步伐有些落后,但是无论怎样,在日常工作中使用 Arch Linux 系统还是挺让人愉快的,而且每一个星期都有所进步。实时更新任何程序真的让人很爽。我经常使用比 Ubuntu 系统发布时间还要新的软件包。虽然 Ubuntu 用户可以在自定义的 PPA 中找到更新的软件包,但是这种软件包都没有经过任何测试或修复,因此用户在使用过程中会遇到各种各样的问题。
|
||||||
|
|
||||||
也有用户抱怨 Ubuntu 系统升级时会导致机器自动重启或者强制用户重新安装软件,因此,即使安装的过程很快,之后却需要很长的时间来维护。我每次听到有人抱怨 Arch 系统的安装过程时,最终的原因还不是他们自己操作不当或是文件系统损坏的问题。
|
也有用户抱怨 Ubuntu 系统升级时会导致机器自动重启或者强制用户重新安装软件,因此,即使安装的过程很快,之后却需要很长的时间来维护。我每次听到有人抱怨 Arch 系统的安装过程时,最终的原因总是归结为他们自己操作不当或是类似 btrfs 文件系统损坏的问题。
|
||||||
|
|
||||||
我曾经想尝试安装 [Antergos 系统][34],那是一款基于 Arch Linux 并搭载了桌面环境的 Linux 发行版。然而,安装过程中的设置界面在显示器上看不清楚,而且最小化安装后也识别不到触摸板,那是我仅有的 1 GB 存储空间了。因此,我决定还是重新安装原来的 Arch Linux 系统。还好 Yoga 笔记本仍然支持传统的 BIOS 启动方式,这样我就不用再去折腾 [UEFI][35] 了。
|
我曾经想尝试安装 [Antergos 系统][34],那是一款基于 Arch Linux 并搭载了桌面环境的 Linux 发行版。然而,安装过程中的设置界面在显示器上看不清楚,而且最小化安装后也识别不到触摸板,那是由于我仅有一个有可用空间的老式 1 GB U 盘了。因此,我决定还是重新安装原来的 Arch Linux 系统。还好 Yoga 笔记本仍然支持传统的 BIOS 启动方式,这样我就不用再去折腾 [UEFI][35] 了。
|
||||||
|
|
||||||
很遗憾我没能试用 Antergos 系统,因为我觉得对于那些技术水平一般的用户或是想快速入门 Arch Linux 系统的用户来说, Antergos 算是一个非常强大的 Linux 发行版了。 Arch 在维基上有丰富的文档新资料教你如何完美地使用这个 Linux 系统。我喜欢每周定时对固态硬盘做优化,包括调试[用户配置文件-同步-进程][36]脚本、对安卓系统的支持以及在视频播放中使用硬件加速等等。在 Linux 系统中有很多大家都需要去折腾的功能特性,只需要输入几行命令就可以搞定了。
|
很遗憾我没能试用 Antergos 系统,因为我觉得对于那些技术水平一般的用户或是想快速入门 Arch Linux 系统的用户来说, Antergos 算是一个非常强大的 Linux 发行版了。 Arch 在维基上有丰富的文档新资料教你如何完美地使用这个 Linux 系统。我喜欢优化,比如每周定时对固态硬盘做优化、[用户配置文件-同步-进程][36]脚本、对安卓系统的支持以及在视频播放中使用硬件加速等等。在 Linux 系统中有很多大家都需要去折腾的功能特性,只需要输入几行命令就可以搞定了。
|
||||||
|
|
||||||
Manjaro 也是一款非常流行的基于 Arch Linux 并搭载了桌面环境的 Linux 发行版,但是用了 3 年多的 Arch Linux 系统后,我更信任使用 Arch 系统中的软件包来解决组件之间的问题。我在 Reddit 网站看到一些评论,有用户反映说 Manjaro 系统升级后就崩溃了。
|
Manjaro 也是一款非常流行的基于 Arch Linux 并搭载了桌面环境的 Linux 发行版,但是用了 3 年多的 Arch Linux 系统后,我更信任 Arch 的封包人会解决组件之间的问题。我在 Reddit 网站看到一些评论,有用户反映说 Manjaro 系统升级后就崩溃了。
|
||||||
|
|
||||||
我对 Arch Linux 系统唯一不爽的一点就是它又难看又不可读的引导加载界面。还好我只需要使用老电脑中的 **grub.cfg** 配置文件来替换掉就可以了。
|
我对 Arch Linux 系统唯一不爽的一点就是它丑陋而看不懂的引导加载界面。还好我只需要使用老电脑中的 **grub.cfg** 配置文件来替换掉就可以了。
|
||||||
|
|
||||||
### 安装 Arch Linux 系统
|
### 安装 Arch Linux 系统
|
||||||
|
|
||||||
起初我只想简单地把硬盘从老的笔记本电脑移植到新的笔记本电脑上,这样我就不用安装任何东西了,但是拆开电脑后,我发现 M.2 接口的固态硬盘形状很特殊。本来我也可以使用一个简单的块复制方法来完成移植,但是这一次是一个很好的回顾安装过程的机会,所以我决定从头再来一遍。 3 年多的时间里,我安装了很多没用的应用程序,即使有些被我卸载了,系统中还存在很多的遗留文件。
|
起初我只想简单地把硬盘从老的笔记本电脑移植到新的笔记本电脑上,这样我就不用安装任何东西了,但是拆开电脑后,我发现 M.2 接口的固态硬盘形状很特殊。本来我也可以使用一个低级块复制方法来完成移植,但是这一次是一个很好的回顾安装过程的机会,所以我决定从头再来一遍。 3 年多的时间里,我安装了很多没用的应用程序,即使有些被我卸载了,系统中还存在很多的遗留文件。
|
||||||
|
|
||||||
由于 Arch 900 笔记本电脑已经发布出来一段时间了,其硬件也不是最新的,所以安装 Arch Linux 系统的过程进行得很顺利。我还要使用 **rfkill 工具来开启无线上网** 功能,除此之外,系统都正常运行了。显然, Linux 系统下还不能正常使用 rfkill 工具。幸运的是在启动 rfkill 工具时, **systemd** 会自动恢复rfkill 的数据。
|
由于 Arch 900 笔记本电脑已经发布出来一段时间了,其硬件也不是最新的,所以安装 Arch Linux 系统的过程进行得很顺利。我仍然需要使用 **rfkill 工具来开启无线上网** 功能,除此之外,系统都正常运行了。显然, Linux 系统下还不能正确读取该型号的 rfkill 信息。幸运的是在启动 rfkill 工具时, **systemd** 会自动恢复 rfkill 的数据。
|
||||||
|
|
||||||
### Kernel Buglist内核故障列表
|
### 内核故障列表
|
||||||
|
|
||||||
有一件事让我非常惊讶, Linux 操作系统的缺陷列表太混乱了。我知道有很多的用户参与其中,其变化频率也很高,但是,一成不变的最糟糕的事情却是系统缺陷报告。我搞不懂为什么有些系统缺陷已经存在好多年了,但是却丝毫没有修复的迹象。
|
有一件事让我非常惊讶, Linux 操作系统的缺陷列表太混乱了。我知道有很多的用户参与其中,其变化频率也很高,但是,最糟糕的事情却是系统缺陷报告依然如故。我搞不懂为什么有些系统缺陷已经存在好多年了,但是却丝毫没有修复的迹象。
|
||||||
|
|
||||||
我在上次的审查中打过一个很好的比方。假设航空公司花了一两年的时间才把你丢失的行李找回来了。还你会信任那家公司吗?实际上,如果你还有几千个已知的系统缺陷和上百次系统回归,那么你发布新的发行版有什么意义呢?如果波音公司的每一架飞机都有 1% 的坠机概率,那他们会这么多年都置之不理吗?
|
我在上次的评论中打过一个很好的比方。假设航空公司花了一两年的时间才把你丢失的行李找回来了。还你会信任那家公司吗?实际上,如果你还有几千个已知的系统缺陷和上百次系统性能回退,那么你发布新的发行版有什么意义呢?如果波音公司的每一架飞机都有 1% 的坠机概率,那他们会这么多年都置之不理吗?
|
||||||
|
|
||||||
也许 Linux 系统基金会应该雇佣一些专职的工程师来修复那些看似被遗忘的系统缺陷问题。有很多人从事 Linux 系统工作,大家都清楚该系统有很多历史缺陷未修复——通常情况下,这些问题都是普通用户自己处理的。我觉得目前的 Linux 系统就不要发布任何更新了,先花几个月的时间去修复那些系统缺陷,直到缺陷数量小于 50\ 个时,再发布新版本,这样的系统内核会更稳定。现在还有 4672 个系统缺陷问题未解决。这将会是一个非常好的改变发行版主版本号的理由。
|
也许 Linux 系统基金会应该雇佣一些专职的工程师来修复那些看似被遗忘的系统缺陷问题。有很多人从事 Linux 系统工作,大家都清楚该系统有很多历史缺陷未修复——通常情况下,这些问题都是由普通用户自己处理的。我觉得目前的 Linux 系统就不要发布任何更新了,先花几个月的时间去修复那些系统缺陷,直到缺陷数量小于 50 个时,再发布新版本,这样的系统内核会更稳定。现在还有 [4672 个](http://bit.ly/LinuxBugs)系统缺陷问题未解决,这才是一个非常好的改变发行版主版本号的理由。
|
||||||
|
|
||||||
有些东西跟每周发布一个新的稳定发行版是相悖的,但是这种方式还持续了这么多年了,而且他们每次都发布一些重要补丁,因此他们也算是做了一些非常有意义的工作。内核的开发速度很快,也变得越来越好,因此早已超出我吐槽的范围了,但是我还是觉得他们应该尝试一些新的东西。
|
有些东西跟每周发布一个新的稳定版本是相悖的,但是这种方式还持续了这么多年了,而且他们每次都发布一些重要补丁,因此他们也算是做了一些非常有意义的工作。内核的开发速度很快,也变得越来越好,因此早已超出我吐槽的范围了,但是我还是觉得他们应该尝试换个思路。
|
||||||
|
|
||||||
至少,系统缺陷问题应该在规定的时间内处理。如果超出指定时间,这个系统缺陷应该提交给到维护工程师并逐渐发送给 Linux 本人。如果某个领域内存在很多的历史缺陷也没人去修复,那么 Linus 应该公开并严厉批评相关组织机构。他们更应该像波音公司那样去思考解决问题。
|
至少,系统缺陷问题应该在规定的时间内处理。如果超出指定时间,这个系统缺陷应该提交给到维护者并逐渐发送给 Linus 本人。如果某个领域内存在很多的历史缺陷也没人去修复,那么 Linus 应该公开并严厉批评相关组织机构。他们更应该像波音公司那样去思考解决问题。
|
||||||
|
|
||||||
### Lenovo
|
### 联想公司
|
||||||
|
|
||||||
很多 Linux 用户都痛击联想公司对定制化的笔记本缺少支持,好在他们创造了性价比较高的硬件。正如我多年前写的一样,很明显,联想公司在发布 Yoga 2 之前就没人安装过 Linux 系统来进行测试, Yoga 900 笔记本也是如此,因为这是根本不可能的事情。
|
很多 Linux 用户都痛击联想公司对定制化的笔记本缺少支持,好在他们创造了性价比较高的硬件。正如我多年前写的一样,很明显,联想公司在发布 Yoga 2 之前就没人安装过 Linux 系统来进行测试, Yoga 900 笔记本也是如此,因为这是根本不可能的事情。
|
||||||
|
|
||||||
我觉得他们公司的每个员工都应该安装双系统。这在设置上并不难,用户也更希望他们这样做。联想有 60000 多员工。至少他们应该在公司内部成立一个 Yoga 团队,然后招一些人来着手处理 **Linux 系统** 问题。
|
我觉得他们公司的每个员工都应该安装双系统。这在设置上并不难,用户也更希望他们这样做。联想有 60000 多员工。至少他们应该在公司内部成立一个 Yoga 团队,然后招一些人来着手处理 **Linux 系统** 问题。Windows 系统在很多方面比 Linux 系统更难用。Windows 系统虽然能够运行更多的应用程序,但是我觉得也许他们一半的用户还是更乐于使用合理配置的 Linux 系统吧。
|
||||||
Windows 系统在很多方面比 Linux 系统更难用。Windows 系统虽然能够运行更多的应用程序,但是我觉得也许他们公司的大部分员工还是更乐于使用自定义的 Linux 系统吧。
|
|
||||||
|
|
||||||
尽管现在联想对 Linux 系统很不屑,他们制造的麻烦比软件方面还多。在很多型号的笔记本电脑中, RAM 芯片被焊接固定了。他们只允许白名单设备和预授权的插件安装到联想笔记本电脑中。 Yoga 笔记本也没有独立显卡,而且联想公司本来也不支持更新主板上的插件。我想有人会把这些矛头指向联想公司的 CEO 。
|
尽管现在联想对 Linux 系统很不屑,他们制造的麻烦比软件方面还多。在很多型号的笔记本电脑中, RAM 芯片被焊接固定了。他们只允许白名单设备和预授权的卡可以安装到联想笔记本电脑中。 Yoga 笔记本也没有独立显卡,而且联想公司本来也不支持更新主板上的卡。我想有人会把这些矛头指向联想公司的 CEO 。
|
||||||
|
|
||||||
### 总结
|
### 总结
|
||||||
|
|
||||||
@ -249,11 +252,11 @@ Windows 系统从 Linux 系统中汲取了很多特性,但是 Windows 系统
|
|||||||
|
|
||||||
至少对于我来说,我不需要使用任何 Windows 的应用程序,也不需要浪费额外的时间去维护了。在 Windows 系统中修复问题时,你可以到很多不同的地方查询解决问题的方法。 Linux 系统有很多的地方要进行配置,但是总的来说,这已经很简单了。
|
至少对于我来说,我不需要使用任何 Windows 的应用程序,也不需要浪费额外的时间去维护了。在 Windows 系统中修复问题时,你可以到很多不同的地方查询解决问题的方法。 Linux 系统有很多的地方要进行配置,但是总的来说,这已经很简单了。
|
||||||
|
|
||||||
我有个朋友为了更新驱动程序,需要在 Windows 下安装第三方软件,因为更新这种操作需要从微软网站以及其它更多的网站来抓取源代码。 Windows 系统已经比前几年做得更好了,有更多的游戏和桌面应用程序,但是它仍然是一个封闭式老系统。
|
我有个朋友为了更新驱动程序,需要在 Windows 下安装第三方软件,因为更新这种操作需要从微软网站以及其它更多的网站来抓取代码。 Windows 系统已经比前几年做得更好了,有更多的游戏和桌面应用程序,但是它仍然是一个封闭式老系统。
|
||||||
|
|
||||||
我发现 Gnome Classic 桌面给人一种简洁性的体验。我希望它不是使用很繁杂的[流行 Javascript 脚本][42]语言编写的,他们还要重新建立一个关于定制化主题和颜色主题的社区。 Gnome 2 和 Windows 10 系统中的有些非常有用的功能也消失了,而且也没有老版本的稳定。 2011 年发布的 Gnome 3.0 完全就是走回头路,但是 6 年后的 Gnome 3.22 终于再续辉煌。
|
我发现 Gnome 经典桌面给人一种简洁性的体验。我希望它不是使用很繁杂的[流行 Javascript 脚本][42]语言编写的,他们还要重新建立一个关于定制化主题和颜色主题的社区。 Gnome 2 和 Windows 10 系统中的有些非常有用的功能也消失了,而且也没有老版本的稳定。 2011 年发布的 Gnome 3.0 完全就是走回头路,但是 6 年后的 Gnome 3.22 终于再续辉煌。
|
||||||
|
|
||||||
Gnome Classic 桌面环境是最优秀的图形化界面之一,[很多优秀的特性][43]都变得越来越好了。已安装完成 Arch Linux 系统的 Yoga 900 笔记本电脑现在都运行正常了,我期待着 Linux 系统对 HiDPI 模式和其它方面的改进!我迫不及待地想深入学习 LibreOffice 办公软件里的语法检查特性。
|
Gnome 经典桌面环境是最优秀的图形化界面之一,[很多优秀的特性][43]都变得越来越好了。已安装完成 Arch Linux 系统的 Yoga 900 笔记本电脑现在都运行正常了,我期待着 Linux 系统对 HiDPI 模式和其它方面的改进!我迫不及待地想深入学习 LibreOffice 办公软件里的语法检查特性。
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -261,7 +264,7 @@ via: http://keithcu.com/wordpress/?p=3739
|
|||||||
|
|
||||||
作者:[keithccurtis][a]
|
作者:[keithccurtis][a]
|
||||||
译者:[rusking](https://github.com/rusking)
|
译者:[rusking](https://github.com/rusking)
|
||||||
校对:[校对者ID](https://github.com/校对者ID)
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
@ -0,0 +1,166 @@
|
|||||||
|
Linux 命令行工具使用小贴士及技巧(二)
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
在本系列的[第一部分][4]中,我们通过讨论 `cd -` 命令的用法,重点介绍了 Linux 中的命令行导航。还讨论了一些其他相关要点/概念。现在进一步讨论,在本文中,我们将讨论如何使用 `pushd` 和 `popd` 命令在 Linux 命令行上获得更快的导航体验。
|
||||||
|
|
||||||
|
在我们开始之前,值得说明的一点是,此后提到的所有指导和命令已经在 Ubuntu 14.04 和 Bash shell(4.3.11)上测试过。
|
||||||
|
|
||||||
|
### pushd 和 popd 命令基础
|
||||||
|
|
||||||
|
为了更好地理解 `pushd` 和 `popd` 命令的作用,让我们先讨论堆栈的概念。想象你厨房案板上有一个空白区域,你想在上面放一套盘子。你会怎么做?很简单,一个接一个地放在上面。
|
||||||
|
|
||||||
|
所以在整个过程的最后,案板上的第一个盘子是盘子中的最后一个,你手中最后一个盘子是盘子堆中的第一个。现在当你需要一个盘子时,你选择在堆的顶部的那个盘子并使用它,然后需要时选择下一个。
|
||||||
|
|
||||||
|
`pushd` 和 `popd` 命令是类似的概念。在 Linux 系统上有一个目录堆栈,你可以堆叠目录路径以供将来使用。你可以使用 `dirs` 命令来在任何时间点快速查看堆栈的内容。
|
||||||
|
|
||||||
|
下面的例子显示了在命令行终端启动后立即在我的系统上使用 dirs 命令的输出:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ dirs
|
||||||
|
~
|
||||||
|
```
|
||||||
|
|
||||||
|
输出中的波浪号(`~`)表示目录堆栈当前仅包含用户的主目录。
|
||||||
|
|
||||||
|
继续下去,使用 `pushd` 和 `popd` 命令来执行存储目录路径并删除它的操作。使用 `pushd` 非常容易 - 只需将要存储在目录堆栈中的路径作为此命令的参数传递。这里有一个例子:
|
||||||
|
|
||||||
|
```
|
||||||
|
pushd /home/himanshu/Downloads/
|
||||||
|
```
|
||||||
|
|
||||||
|
上述命令的作用是,将当前工作目录更改为你作为参数传递的目录,并且还将路径添加到目录堆栈中。为了方便用户,`pushd` 命令在其输出中产生目录堆栈的内容。因此,当运行上面的命令时,产生了以下输出:
|
||||||
|
|
||||||
|
```
|
||||||
|
~/Downloads ~
|
||||||
|
```
|
||||||
|
|
||||||
|
输出显示现在堆栈中有两个目录路径:一个是用户的主目录,还有用户的下载目录。它们的保存顺序是:主目录位于底部,新添加的 `Downloads` 目录位于其上。
|
||||||
|
|
||||||
|
要验证 `pushd` 的输出是正确的,你还可以使用 `dirs` 命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ dirs
|
||||||
|
~/Downloads ~
|
||||||
|
```
|
||||||
|
|
||||||
|
因此你可以看到 `dirs` 命令同样产生相同的输出。
|
||||||
|
|
||||||
|
让我们再使用下 `pushd` 命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ pushd /usr/lib/; pushd /home/himanshu/Desktop/
|
||||||
|
/usr/lib ~/Downloads ~
|
||||||
|
~/Desktop /usr/lib ~/Downloads ~
|
||||||
|
```
|
||||||
|
|
||||||
|
所以目录堆栈现在包含总共四个目录路径,其中主目录(`~`)在底部,并且用户的桌面目录在顶部。
|
||||||
|
|
||||||
|
一定要记住的是堆栈的头是你当前的目录。这意味着现在我们当前的工作目录是 `~/Desktop`。
|
||||||
|
|
||||||
|
现在,假设你想回到 `/usr/lib` 目录,所以你所要做的就是执行 `popd` 命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ popd
|
||||||
|
/usr/lib ~/Downloads ~
|
||||||
|
```
|
||||||
|
|
||||||
|
`popd` 命令不仅会将当前目录切换到 `/usr/lib`,它还会从目录堆栈中删除 `~/Desktop`,这一点可以从命令输出中看出。这样,popd 命令将允许你以相反的顺序浏览这些目录。
|
||||||
|
|
||||||
|
### 一些高级用法
|
||||||
|
|
||||||
|
现在我们已经讨论了 `pushd` 和 `popd` 命令的基础知识,让我们继续讨论与这些命令相关的一些其它细节。首先,这些命令还允许你操作目录堆栈。例如,假设你的目录堆栈看起来像这样:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ dirs
|
||||||
|
~/Desktop /usr/lib ~ ~/Downloads
|
||||||
|
```
|
||||||
|
|
||||||
|
现在,我们的要求是改变堆栈中目录路径的顺序,最上面的元素(`~/Desktop`)放到底部,剩下的每个都向上移动一个位置。这可以使用以下命令实现:
|
||||||
|
|
||||||
|
```
|
||||||
|
pushd +1
|
||||||
|
```
|
||||||
|
|
||||||
|
上面的命令对目录堆栈做的结果:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ dirs
|
||||||
|
/usr/lib ~ ~/Downloads ~/Desktop
|
||||||
|
```
|
||||||
|
|
||||||
|
因此,我们看到目录堆栈中的元素顺序已经改变,并且现在和我们想要的一样。当然,你可以让目录堆栈元素移动任何次数。例如,以下命令会将它们向上移动两次:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ pushd +2
|
||||||
|
~/Downloads ~/Desktop /usr/lib ~
|
||||||
|
```
|
||||||
|
|
||||||
|
你也可以使用负的索引值:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ pushd -1
|
||||||
|
/usr/lib ~ ~/Downloads ~/Desktop
|
||||||
|
```
|
||||||
|
|
||||||
|
相似地,你可以在 `popd` 命令中使用此技术来从目录堆栈删除任何条目,而不用离开当前工作目录。例如,如果要使用 `popd` 从顶部(目前是 `~/Downloads`)删除第三个条目,你可以运行以下命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
popd +2
|
||||||
|
```
|
||||||
|
|
||||||
|
记住堆栈索引的初始值是 `0`,因此我们使用 `2` 来访问第三个条目。
|
||||||
|
|
||||||
|
因此目录堆栈现在包含:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ dirs
|
||||||
|
/usr/lib ~ ~/Desktop
|
||||||
|
```
|
||||||
|
|
||||||
|
确认条目已经被移除了。
|
||||||
|
|
||||||
|
如果由于某些原因,你发现你很难记住元素在目录堆栈中的位置以及它们的索引,你则可以对在 `dirs` 命令中使用 `-v` 选项。这里有一个例子:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ dirs -v
|
||||||
|
0 /usr/lib
|
||||||
|
1 ~
|
||||||
|
2 ~/Desktop
|
||||||
|
```
|
||||||
|
|
||||||
|
你可能已经猜到了,左边的数字是索引,接下来跟的是这个索引对应的目录路径。
|
||||||
|
|
||||||
|
**注意**: 在 `dir` 中使用 `-c` 选项清除目录堆栈。
|
||||||
|
|
||||||
|
现在让我们简要地讨论一下 `popd` 和 `pushd` 命令的实际用法。虽然它们第一眼看起来可能有点复杂,但是这些命令在编写 shell 脚本时会派上用场 - 你不需要记住你从哪里来;只要执行一下 `popd`,你就能回到你来的目录。
|
||||||
|
|
||||||
|
经验丰富的脚本编写者通常以以下方式使用这些命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
popd >/dev/null 2>&1
|
||||||
|
```
|
||||||
|
|
||||||
|
上述命令确保 `popd` 保持静默(不产生任何输出)。同样,你也可以静默 `pushd`。
|
||||||
|
|
||||||
|
`pushd` 和 `popd` 命令也被 Linux 服务器管理员使用,他们通常在几个相同的目录之间移动。 在[这里][5]介绍了一些其他有用的使用场景。
|
||||||
|
|
||||||
|
### 总结
|
||||||
|
|
||||||
|
我同意 `pushd` 和 `popd` 的概念不是很直接。但是,它需要的只是一点练习 - 是的,你需要多实践。花一些时间在这些命令上,你就会开始喜欢它们,特别是当它们提供了方便时。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/linux-command-line-tips-tricks-part-2/
|
||||||
|
|
||||||
|
作者:[Ansh][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/linux-command-line-tips-tricks-part-2/
|
||||||
|
[1]:https://www.howtoforge.com/tutorial/linux-command-line-tips-tricks-part-2/#the-basics-of-pushd-and-popd-commands
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/linux-command-line-tips-tricks-part-2/#some-advanced-points
|
||||||
|
[3]:https://www.howtoforge.com/tutorial/linux-command-line-tips-tricks-part-2/#conclusion
|
||||||
|
[4]:https://linux.cn/article-8335-1.html
|
||||||
|
[5]:http://unix.stackexchange.com/questions/77077/how-do-i-use-pushd-and-popd-commands
|
@ -0,0 +1,150 @@
|
|||||||
|
Linux 系统上的可视化比较与合并工具 Meld
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
我们已经[讲过][5] Linux 中[一些][6]基于命令行的比较和合并工具,再来讲解该系统的一些可视化的比较与合并工具也很合理。首要的原因是,不是每个人都习惯使用命令行,而且对于某些人来说,基于命令行的比较工具可能很难学习和理解。
|
||||||
|
|
||||||
|
因此,我们将会推出关于可视化工具 **Meld** 的系列文章。
|
||||||
|
|
||||||
|
在跳到安装和介绍部分前,我需要说明这篇教程里所有的指令和用例是都是可用的,而且它们已经在 Ubuntu 14.04 中测试过了,我们使用的 Meld 版本是 3.14.2。
|
||||||
|
|
||||||
|
### 关于 Meld
|
||||||
|
|
||||||
|
[Meld][7] 主要是一个可视化的比较和合并的工具,目标人群是开发者(当然,我们将要讲到的其它部分也会考虑到最终用户)。这个工具同时支持双向和三向的比较,不仅仅是比较文件,还可以比较目录,以及版本控制的项目。
|
||||||
|
|
||||||
|
“Meld 可以帮你回顾代码改动,理解补丁,”其官网如是说。“它甚至可以告知你如果你不进行合并将会发生什么事情。”该工具使用 GPL v2 协议进行授权。
|
||||||
|
|
||||||
|
### 安装 Meld
|
||||||
|
|
||||||
|
如果你用的是 Ubuntu 或者其它基于 Debian 的 Linux 分支,你可以用以下命令下载安装 Meld:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt-get install meld
|
||||||
|
```
|
||||||
|
|
||||||
|
或者你也可以用系统自带的包管理软件下载这个工具。比如在 Ubuntu 上,你可以用 Ubuntu 软件中心(Ubuntu Software Center),或者用 [Ubuntu 软件][8],它从 Ubuntu 16.04 版本开始取代了 Ubuntu 软件中心。
|
||||||
|
|
||||||
|
当然,Ubuntu 官方仓库里的 Meld 版本很有可能比较陈旧。因此如果你想要用更新的版本,你可以在[这里][9]下载软件包。如果你要用这个方法,你要做的就是解压下载好的软件包,然后运行 `bin` 目录下的 `meld` 程序。
|
||||||
|
|
||||||
|
```
|
||||||
|
~/Downloads/meld-3.14.2/bin$ ./meld
|
||||||
|
```
|
||||||
|
|
||||||
|
以下是 Meld 依赖的软件,仅供参考:
|
||||||
|
|
||||||
|
* Python 2.7 (Python 3.3 开发版)
|
||||||
|
* GTK+ 3.14
|
||||||
|
* GLib 2.36
|
||||||
|
* PyGObject 3.14
|
||||||
|
* GtkSourceView 3.14
|
||||||
|
* pycairo
|
||||||
|
|
||||||
|
### 使用 Meld
|
||||||
|
|
||||||
|
装好了软件,就可以看到类似这样的画面:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][10]
|
||||||
|
|
||||||
|
有三个选项:比较文件(File comparison),比较目录(Directory comparison)以及版本控制视图(Version control view)。
|
||||||
|
|
||||||
|
点击“比较文件”选项,就可以选择需要比较的文件:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][11]
|
||||||
|
|
||||||
|
就像上面的截图那样明白,Meld 也可以进行三向比较,但是在这一系列文章的第一部分,我们只会讲更常用的双向比较。
|
||||||
|
|
||||||
|
接着,选择你想要比较的文件,点击“比较”(Compare)按钮。软件会在两边分别打开两个文件,高亮不同的行(以及不同的部分)。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][12]
|
||||||
|
|
||||||
|
两个文件的不同之处在第二行,差别在于 `file2` 文件的第二行多了一个 `3`。你看到的黑色箭头是用来进行合并或修改的操作的。该例中,向右的箭头将会把 `file2` 文件的第二行改成文件 `file1` 中对应行的内容。左向箭头做的事情相反。
|
||||||
|
|
||||||
|
做完修改后,按下 `Ctrl+s` 来保存。
|
||||||
|
|
||||||
|
这个简单的例子,让你知道 Meld 的基本用法。让我们看一看稍微复杂一点的比较:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][13]
|
||||||
|
|
||||||
|
在讨论这些变化前,这里提一下, Meld 的界面中有几个区域,可以给出文件之间的差异,让概况变得直观。这里特别需要注意窗口的左右两边垂直的栏。比如下面这个截图:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][14]
|
||||||
|
|
||||||
|
仔细观察,图中的这个栏包含几个不同颜色的区块。这些区块是用来让你对文件之间的差异有个大概的了解。“每一个着色的区块表示一个部分,这个部分可能是插入、删除、修改或者有差别的,取决于区块所用的颜色。”官方文档是这样说的。
|
||||||
|
|
||||||
|
现在,让我们回到我们之前讨论的例子中。接下来的截图展示了用 Meld 理解文件的改动是很简单的(以及合并这些改动):
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][15]
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][16]
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][17]
|
||||||
|
|
||||||
|
接着,我们滑动文件,从一个改动跳到另一个。但是,当要比较的文件很大时,这会耗一点时间,当你想要滑动文件跳到一个改动的位置时,也会变得很困难。如果是这种情况的话,你可以用工具栏的橙色箭头,就在编辑区域的上方:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][18]
|
||||||
|
|
||||||
|
这些是你使用 Meld 时做的一般性的事情:可以用标准的 `Ctrl+f` 组合键在编辑区域内进行查找,按 `F11` 键让软件进入全屏模式,再按 `Ctrl+r` 来刷新(通常在所有要比较的文件改变的时候使用)。
|
||||||
|
|
||||||
|
以下是 Meld 官方网站宣传的重要特性:
|
||||||
|
|
||||||
|
* 文件和目录的双向及三向比较
|
||||||
|
* 输入即更新文件的比较
|
||||||
|
* 自动合并模式,按块改动的动作让合并更加简单
|
||||||
|
* 可视化让比较文件更简单
|
||||||
|
* 支持 Git,Bazaar,Mercurial,Subversion 等等
|
||||||
|
|
||||||
|
注意还不仅仅只有以上所列的。网站上有个专门的[特性页面][19],里面提到了 Meld 提供的所有特性。这个页面列出的所有特性分为几个部分,以该软件是用来做文件比较、目录比较、版本控制还是处于合并模式下为基础进行划分。
|
||||||
|
|
||||||
|
和其它软件相似,有些事情 Meld 做不到。官方网站上列出了其中的一部分:“当 Meld 展示文件之间的差异时,它同时显示两个文件,看起来就像在普通的文本编辑器中。它不会添加额外的行,让左右两边文件的特殊改动处于同样的行数。没有做这个事情的选项。”
|
||||||
|
|
||||||
|
### 总结
|
||||||
|
|
||||||
|
我们刚刚了解到的不过是皮毛,因为 Meld 还能做很多事情。考虑到这是教程系列的第一部分,这也挺不错的。这仅仅是让你了解 Meld 的作用,你可以配置它,忽略一些特定类型的改动,让它移动,复制或者删除文件之间的个别差异,也可以从命令行启动它。在即将退出的系列教程中,我们将会讲述所有这些重要功能。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/beginners-guide-to-visual-merge-tool-meld-on-linux/
|
||||||
|
|
||||||
|
作者:[Ansh][a]
|
||||||
|
译者:[GitFuture](https://github.com/GitFuture)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/beginners-guide-to-visual-merge-tool-meld-on-linux/
|
||||||
|
[1]:https://www.howtoforge.com/tutorial/beginners-guide-to-visual-merge-tool-meld-on-linux/#about-meld
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/beginners-guide-to-visual-merge-tool-meld-on-linux/#meld-installation
|
||||||
|
[3]:https://www.howtoforge.com/tutorial/beginners-guide-to-visual-merge-tool-meld-on-linux/#meld-usage
|
||||||
|
[4]:https://www.howtoforge.com/tutorial/beginners-guide-to-visual-merge-tool-meld-on-linux/#conclusion
|
||||||
|
[5]:https://www.howtoforge.com/tutorial/linux-diff-command-file-comparison/
|
||||||
|
[6]:https://www.howtoforge.com/tutorial/how-to-compare-three-files-in-linux-using-diff3-tool/
|
||||||
|
[7]:http://meldmerge.org/
|
||||||
|
[8]:https://www.howtoforge.com/tutorial/ubuntu-16-04-lts-overview/
|
||||||
|
[9]:https://git.gnome.org/browse/meld/refs/tags
|
||||||
|
[10]:https://www.howtoforge.com/images/how-to-use-visual-diff-and-merge-tools-in-linux-meld-and-kdiff/big/meld-launch-screen-1.png
|
||||||
|
[11]:https://www.howtoforge.com/images/how-to-use-visual-diff-and-merge-tools-in-linux-meld-and-kdiff/big/meld-file-comparison-2.png
|
||||||
|
[12]:https://www.howtoforge.com/images/how-to-use-visual-diff-and-merge-tools-in-linux-meld-and-kdiff/big/meld-diff-in-action-3.png
|
||||||
|
[13]:https://www.howtoforge.com/images/how-to-use-visual-diff-and-merge-tools-in-linux-meld-and-kdiff/big/meld-multiple-changes-4.png
|
||||||
|
[14]:https://www.howtoforge.com/images/how-to-use-visual-diff-and-merge-tools-in-linux-meld-and-kdiff/big/meld-multiple-colors-5.png
|
||||||
|
[15]:https://www.howtoforge.com/images/how-to-use-visual-diff-and-merge-tools-in-linux-meld-and-kdiff/big/meld-makes-it-easy-6.png
|
||||||
|
[16]:https://www.howtoforge.com/images/how-to-use-visual-diff-and-merge-tools-in-linux-meld-and-kdiff/big/meld-makes-it-easy-7.png
|
||||||
|
[17]:https://www.howtoforge.com/images/how-to-use-visual-diff-and-merge-tools-in-linux-meld-and-kdiff/big/meld-makes-it-easy-8.png
|
||||||
|
[18]:https://www.howtoforge.com/images/how-to-use-visual-diff-and-merge-tools-in-linux-meld-and-kdiff/big/meld-go-next-prev-9.png
|
||||||
|
[19]:http://meldmerge.org/features.html
|
@ -0,0 +1,149 @@
|
|||||||
|
Linux 命令行工具使用小贴士及技巧(三)
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
在这个系列的[第一部分][5],我们详细地讨论了 `cd -` 命令,在[第二部分][6],我们深入探究了 `pushd` 和 `popd` 两个命令,以及它们使用的场景。
|
||||||
|
|
||||||
|
继续对命令行的讨论,在这篇教程中,我们将会通过简单易懂的实例来讨论 `CDPATH` 这个环境变量。我们也会讨论关于此变量的一些进阶细节。
|
||||||
|
|
||||||
|
_在这之前,先声明一下此教程中的所有实例都已经在 Ubuntu 14.04 和 4.3.11(1) 版本的 Bash 下测试过。_
|
||||||
|
|
||||||
|
### 环境变量 CDPATH
|
||||||
|
|
||||||
|
即使你的命令行所有操作都在特定的目录下 - 例如你的主目录,然而在你切换目录时也不得不提供绝对路径。比如,考虑我现在的情况,就是在 `/home/himanshu/Downloads` 目录下:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ pwd
|
||||||
|
/home/himanshu/Downloads
|
||||||
|
```
|
||||||
|
|
||||||
|
现在要求切换至 `/home/himanshu/Desktop` 目录,我一般会这样做:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd /home/himanshu/Desktop/
|
||||||
|
```
|
||||||
|
|
||||||
|
或者
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd ~/Desktop/
|
||||||
|
```
|
||||||
|
|
||||||
|
或者
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd ../Desktop/
|
||||||
|
```
|
||||||
|
|
||||||
|
能不能只是运行以下命令就能简单地实现呢:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd Desktop
|
||||||
|
```
|
||||||
|
|
||||||
|
是的,这完全有可能。这就是环境变量 `CDPATH` 出现的时候了。你可使用这个变量来为 `cd` 命令定义基础目录。
|
||||||
|
|
||||||
|
如果你尝试打印它的值,你会看见这个环境变量默认是空值的:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ echo $CDPATH
|
||||||
|
```
|
||||||
|
|
||||||
|
现在 ,考虑到上面提到的场景,我们使用这个环境变量,将 `/home/himanshu` 作为 `cd` 命令的基础目录来使用。
|
||||||
|
|
||||||
|
最简单的做法这样:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
export CDPATH=/home/himanshu
|
||||||
|
```
|
||||||
|
|
||||||
|
现在,我能做到之前所不能做到的事了 - 当前工作目录在 `/home/himanshu/Downloads` 目录里时,成功地运行了 `cd Desktop` 命令。
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ pwd
|
||||||
|
/home/himanshu/Downloads
|
||||||
|
$ cd Desktop/
|
||||||
|
/home/himanshu/Desktop
|
||||||
|
$
|
||||||
|
```
|
||||||
|
|
||||||
|
这表明了我可以使用 `cd` 命令来到达 `/home/himanshu` 下的任意一个目录,而不需要在 `cd` 命令中显式地指定 `/home/himanshu` 或者 `~`,又或者是 `../` (或者多个 `../`)。
|
||||||
|
|
||||||
|
### 要点
|
||||||
|
|
||||||
|
现在你应该知道了怎样利用环境变量 `CDPATH` 在 `/home/himanshu/Downloads` 和 `/home/himanshu/Desktop` 之间轻松切换。现在,考虑以下这种情况, 在 `/home/himanshu/Desktop` 目录里包含一个名字叫做 `Downloads` 的子目录,这是将要切换到的目录。
|
||||||
|
|
||||||
|
但突然你会意识到 `cd Desktop` 会切换到 `/home/himanshu/Desktop`。所以,为了确保这不会发生,你可以这样做:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd ./Downloads
|
||||||
|
```
|
||||||
|
|
||||||
|
虽然上述命令本身没有问题,但你还是需要耗费点额外的精力(虽然很小),尤其是每次这种情况发生时你都不得不这样做。所以,有一个更加优雅的解决方案来处理,就是以如下方式来设定 `CDPATH` 环境变量。
|
||||||
|
|
||||||
|
```sh
|
||||||
|
export CDPATH=".:/home/himanshu"
|
||||||
|
```
|
||||||
|
|
||||||
|
它的意思是告诉 `cd` 命令先在当前的工作目录查找该目录,然后再尝试搜寻 `/home/himanshu` 目录。当然, `cd` 命令是否以这样的方式运行,完全取决于你的偏好和要求 - 讨论这一点的目的是为了让你知道这种情况可能会发生。
|
||||||
|
|
||||||
|
就如你现在所知道的,一旦环境变量 `CDPATH` 被设置,它的值 - 或者它所包含的路径集合 - 就是系统中 `cd` 命令搜索目录的地方 ( 当然除了使用绝对路径的场景 )。所以,完全取决于你来确保该命令行为的一致性。
|
||||||
|
|
||||||
|
继续说,如果一个 bash 脚本以相对路径使用 `cd` 命令,最好还是先清除或者重置环境变量 `CDPATH`,除非你觉得遇上不可预测的麻烦也无所谓。还有一个可选的方法,比起在终端使用 `export` 命令来设置 `CDPATH`,你可以在测试完当前的 shell 是交互式还是非交互式之后,再在你的 `.bashrc` 文件里设置环境变量,这样可以确保你对环境变量的改动只对交互式 shell 生效。
|
||||||
|
|
||||||
|
环境变量中,路径出现的顺序同样也是很重要。举个例子,如果当前目录是在 `/home/himanshu` 目录之前列出来,`cd` 命令就会先搜索当前的工作目录然后才会搜索 `/home/himanshu` 目录。然而,如果该值为 `/home/himanshu:.`,搜索就首先从 `/home/himanshu` 开始,然后到当前目录。不用说,这会影响 `cd` 命令的行为,并且不注意路径的顺序可能会导致一些麻烦。
|
||||||
|
|
||||||
|
要牢记在心的是,环境变量 `CDPATH`,就像其名字表达的,只对 `cd` 命令有作用。意味着在 `/home/himanshu/Downloads` 目录里面时,你能运行 `cd Desktop` 命令来切换到 `/home/himanshu/Desktop` 目录,但你不能使用 `ls`。以下是一个例子:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ pwd
|
||||||
|
/home/himanshu/Downloads
|
||||||
|
$ ls Desktop
|
||||||
|
ls: cannot access Desktop: No such file or directory
|
||||||
|
$
|
||||||
|
```
|
||||||
|
|
||||||
|
然而,这还是有简单的变通处理的。例如,我们可以用以下不怎么费力的方式来达到目的:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ cd Desktop/;ls
|
||||||
|
/home/himanshu/Desktop
|
||||||
|
backup backup~ Downloads gdb.html outline~ outline.txt outline.txt~
|
||||||
|
```
|
||||||
|
|
||||||
|
不过,不是每种情况就能变通处理的。
|
||||||
|
|
||||||
|
另一个重点是:就像你可能已经观察到的,每次你使用 `CDPATH` 环境变量集来运行 `cd` 命令时,该命令都会在输出里显示你切换到的目录的完整路径。不用说,不是所有人都想在每次运行 `cd` 命令时看到这些信息。
|
||||||
|
|
||||||
|
为了确保该输出被制止,你可以使用以下命令:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
alias cd='>/dev/null cd'
|
||||||
|
```
|
||||||
|
|
||||||
|
如果 `cd` 命令运行成功,上述命令不会输出任何东西,如果失败,则允许产生错误信息。
|
||||||
|
|
||||||
|
最后,假如你遇到设置 `CDPATH` 环境变量后,不能使用 shell 的 tab 自动补全功能的问题,可以尝试安装并启用 bash 自动补全(bash-completion)。更多请参考 [这里][4]。
|
||||||
|
|
||||||
|
### 总结
|
||||||
|
|
||||||
|
`CDPATH` 环境变量时一把双刃剑,如果没有掌握完善的知识和随意使用,可能会令你陷入困境,并花费你大量宝贵时间去解决问题。当然,这不代表你不应该去试一下;只需要了解一下所有的可用选项,如果你得出结论,使用 `CDPATH` 会带来很大的帮助,就继续使用它吧。
|
||||||
|
|
||||||
|
你已经能够熟练地使用 `CDPATH` 了吗?你有更多的贴士要分享?请在评论区里发表一下你的想法吧。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/linux-command-line-tips-tricks-part-3-cdpath/
|
||||||
|
|
||||||
|
作者:[Ansh][a]
|
||||||
|
译者:[HaitaoBio](https://github.com/HaitaoBio)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/linux-command-line-tips-tricks-part-3-cdpath/
|
||||||
|
[1]:https://www.howtoforge.com/tutorial/linux-command-line-tips-tricks-part-3-cdpath/#the-cdpath-environment-variable
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/linux-command-line-tips-tricks-part-3-cdpath/#points-to-keep-in-mind
|
||||||
|
[3]:https://www.howtoforge.com/tutorial/linux-command-line-tips-tricks-part-3-cdpath/#conclusion
|
||||||
|
[4]:http://bash-completion.alioth.debian.org/
|
||||||
|
[5]:https://linux.cn/article-8335-1.html
|
||||||
|
[6]:https://linux.cn/article-8371-1.html
|
132
published/20170125 An executive's guide to containers.md
Normal file
132
published/20170125 An executive's guide to containers.md
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
容器实践指南
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
 图片来源:[Maersk Line][1]. [CC SA-BY 4.0][2]
|
||||||
|
|
||||||
|
与互联网领域的领导们关于"容器"的讨论通常被总结如下:
|
||||||
|
|
||||||
|
_作为一名 CxO,我面临杠杆时间术的持续的压力。IT 预算不断减少,我只有有限的资源。然而,交付的工作量却比以往更多。我花费太多的时间致力于解决预算的约束。另外,互联网的格局正在经历一个快速的改变,而且新的技术一直在被引进。我从我最信任的顾问那听来的最新的话题是一个“容器策略”的实现。我想理解:_
|
||||||
|
|
||||||
|
1. _什么是容器?_
|
||||||
|
2. _过渡到容器的企业价值是什么?_
|
||||||
|
3. _为什么我现在应该转移到容器?如果我不采纳会有一些坏处吗?_
|
||||||
|
4. _容器是否已经足够成熟用于企业消费?_
|
||||||
|
5. _我如何让我的企业因使用容器而快速地发展?_
|
||||||
|
|
||||||
|
让我们从最开头开始。
|
||||||
|
|
||||||
|
### 容器
|
||||||
|
|
||||||
|
在过去的 10 年左右,企业已经从物理基础设施转向了虚拟机(VM)。转向 VM 的关键优势是可以减少数据中心的用量。通过在同一个物理机器上运行多个虚拟机,你可以在更少数量的物理机器上安装更多的应用程序。使用容器是另一种更轻量地打包应用程序的方式,而且其交付模式更快。它们是一种在单一的机器里运行多个应用程序进程的奇特方式,无论那个机器是一个虚拟机还是一个物理机。另外,容器在 DevOps 、微服务和云战略场景方面也扮演了重要角色。
|
||||||
|
|
||||||
|
### 容器 vs 虚拟机
|
||||||
|
|
||||||
|
容器和虚拟机在一些方面并不相同。一台虚拟机尽管不是物理机,但是它表现地就像是一台物理机。虚拟机是一个包含所有东西的独立的环境,是一个完整的(来宾)操作系统。在另一方面,容器是一个共享同一个物理机或虚拟机上资源的进程。容器显然更加有趣,因为:
|
||||||
|
|
||||||
|
* 相比较而言,虚拟机要重一些,而容器更轻。因为容器只包括了它们所运行的程序所需要的库。
|
||||||
|
* 虚拟机需要花费几分钟来启动,而容器在几秒钟内就可以启动。
|
||||||
|
* 通常,相当于虚拟机你的基础设施中可以容纳更多的容器。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
技术已经发展到足以保持这些容器安全、彼此独立,而且正确的设计选择可以保证那些坏掉的容器不会影响运行在同一个机器里的其他容器的性能。实际上,操作系统天生就是被用来构建成优化和运行容器的。
|
||||||
|
|
||||||
|
然而,当你转向容器时,你需要做出正确的选择。你需要做足够的尽职调查,以便你选择合适的技术合作伙伴和能够制作容器的制造商。开源技术起着很关键的作用。开源的 [Docker 项目][5]使得分层格式的容器很容易构建和使用。[开放容器计划][6](OCI)已经成为被所有主要技术供应商所支持的开源容器标准。如 Red Hat 这样的开源技术提供商提供了为容器而准备的安全的操作系统。例如, Red Hat Enterprise Linux 7.x (包括 Red Hat Enterprise Linux 原子主机)进行了优化以原生地运行容器,同时也提供监控和管理容器的工具。其他的开源项目如来自 Tectonic 的 CoreOS 也正在进入市场。的确,容器正等着被企业所采用。
|
||||||
|
|
||||||
|
### 容器平台
|
||||||
|
|
||||||
|
容器平台让容器成为企业消耗品。在过去这些年中,你可能在你的企业里处理过虚拟机散乱的问题,容器散乱比那要糟糕好几倍。在你的数据中心横跨不同主机运行不同规模的容器,尽管容器故障仍然保证你的应用程序的高可用性,自动化健康检查和基于流入的工作载荷的自动化容器缩放等等,这些是你能期待容器平台应该有的一些关键特性。
|
||||||
|
|
||||||
|
当在一个被定位为容器即服务模型(CaaS)的平台上运行容器时,这些平台的一些其它特性如自动化生成和部署使这个平台成为平台即服务模型(PaaS)。虽然 CaaS 能让你规模化运行容器,但是,PaaS 可以让你利用你的源代码编译、创建容器,为你运行那些容器。另外,这些平台提供了完整操作管理特性,例如,集群的管理和监控、容器的安全缺陷检测,以及安全地运行容器、跟踪日志和度量等等。
|
||||||
|
|
||||||
|
尽管一些技术供应商正在使用他们的专有技术来构建容器平台,但总的来说,企业们正在围绕建立在 [Kubernetes][7](K8S)的基础上的开源技术而进行标准化。K8S 是一项由 Google 发起的开源项目,现在很多大平台的供应商也支持它。K8S 也是[云端原生计算基金会][8](CNCF)的一部分,CNCF 正在发展成以云为中心技术的标准体。当你在容器平台上做出选择时,围绕开源流程编排技术的标准化是非常重要的。它基本上允许你移植到不同的容器平台,如果你不喜欢你第一次做的选择的话。K8S 还允许你的容器工作载荷可跨越不同的公有云进行迁移。这些就是为什么我们会看到越来越多的技术公司正在使用 Kubernetes 的原因。
|
||||||
|
|
||||||
|
一些企业正在试图通过拼接几个包括 K8S 在内开源项目来打造他们自己 DIY 的容器平台。这确实是比继续跟随专有技术要更好的一种解决方案,但是要完成这项工作也仍然包含很多需要探讨的地方。然而,一个企业的维护和保持这样的 DIY 平台的能力应该被认真评估。许多企业并不是想做创建 IT 平台的工作,而是他们希望运行自己的主流业务。有很多可行的基于 K8S 的解决方案,比如[红帽 OpenShift 平台容器][9]、[Apprenda][10]、[Deis][11] 和 [Rancher][12],它们提供一个企业级平台,这些解决方案中的每种都有不同完整程度的功能。
|
||||||
|
|
||||||
|
这些解决方案是由供应商认证和支持。有些方案是完全的开源 PaaS 解决方案,而另外一些可能是 CaaS。根据你的企业的需求,这些解决方案可能是比 DIY 容器平台更好的替代品。
|
||||||
|
|
||||||
|
### 企业的担忧和它们与容器的关系
|
||||||
|
|
||||||
|
今天,几乎每个企业都正在与数字时代转型打交道,这些转型影响包括 DevOps 战略、微服务和云等多个领域。容器在这些领域中的每一个中都起着相当重要的作用。
|
||||||
|
|
||||||
|
### DevOps 策略
|
||||||
|
|
||||||
|
IT 组织被分成运维和应用开发,他们作为两个独立的团队运作,每一队都只有他们自己的一套目标。大多数企业为了将这两个团队联合起来正在朝 DevOps 的方向前进。
|
||||||
|
|
||||||
|
容器在 DevOps 倡议的成功中发挥着重要的作用。在 DevOps 中成功的关键标准之一是增加开发人员在运营中的份额。开发人员不仅应该把代码交给运维人员,而且他们还应该考虑他们的代码是如何在生产环境中运行的。普遍的技术是采用“架构即代码”,而不是提供几页容易出错的安装说明指示,开发团队应该提供像编程时的环境配置。
|
||||||
|
|
||||||
|
这恰恰就是容器可以解决的问题。可以作为容器的模版的容器镜像包括了从基本操作系统到应用程序代码的整个环境堆栈。利用容器,开发人员将不再只是从 Dev 到 QA 再到 Prod 这样生成应用程序;相反,他们将传递一个版本化的容器镜像,这个镜像包括生成的运行程序和它运行需要的环境。容器是包罗万象的,从操作系统库到中间件再到应用程序的所有东西都被整合进一个镜像里面。因此,容器在开发环境运行的方式和它在质量保证环境和生产环境下运行的方式完全一样。容器是 DevOps 成功的重要因素。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
另外,容器平台正在进一步发展。典型的持续集成和交付(CICD)工具,如 [Jenkins](https://jenkins.io/),可以作为容器,这个容器能在容器平台本身运行整个 CICD 过程,而不需要额外的基础设施。现在你可以使用 PaaS 平台来生成和运行你的 CICD 管道。
|
||||||
|
|
||||||
|
### 微服务策略
|
||||||
|
|
||||||
|
微服务是今天 IT 领域的另一个热门话题。应用程序是这样被设计的:把应用程序分解为离散化的小的服务,每个服务完成一个小任务。这些服务中的每一个都可以根据合适的技术用不同的编程语言进行编写。它们可以由小团队(双比萨团队)创建和管理,并且可以迅速地改变它们。所有这些要求再次需要用到容器。容器足够小到成为微服务的基础。容器能够支持任何你选择的技术和语言,容器易于创建和运行,并且可以快速地改变。微服务和容器现在已经不分彼此,如果有人说不使用容器来实现微服务,他们将会受到别人奇怪的表情。
|
||||||
|
|
||||||
|
实际情况是,虽然微服务有望让情况变得简单,但是它们的扩张也增加了复杂性。有几个微服务的设计和开发模式将能使它们易于实现。这意味着开发人员现在急需这样一个开发平台,在这个平台下,开发人员可以轻松地部署和组织微服务,而且还能:
|
||||||
|
|
||||||
|
* 以一种语言不可知的方式实现这些微服务设计模式。
|
||||||
|
* 不会因代码侵入而增加代码的复杂性,以便开发人员能将许多模式的代码包括进他们的业务逻辑中。
|
||||||
|
* 足够灵活以便部署在你所选择的基础设施上,并且不会把你捆绑在特定的云上。
|
||||||
|
|
||||||
|
这就是选择一个正确的容器平台所起作用的地方。在具体的基础设施上按照某一特定供应商的方法来实现这些微服务将会把你的应用程序捆绑在那些供应商的平台上。使用类似兼容 OCI 的容器的容器化微服务将可以保证你的微服务能够被运行在任何兼容 OCI 的平台上。
|
||||||
|
|
||||||
|
选择正确的容器平台来运行你的微服务是需要做的另一个重要的决定。今天,有很少的选择和许多的 FUD。如果你作出选择时不足够慎重,其中一些选择会把你带到非标准的、特定供应商的路线上。
|
||||||
|
|
||||||
|
### 云策略
|
||||||
|
|
||||||
|
云战略是 IT 领域的又一个热门话题。无论你是否喜欢,服务化模型都是不可避免的变化。如果你不将其作为 IT 服务进行提供,你的开发团队将可能会找到创建“shadow IT”的方法来访问云。另外,尽管使用云技术将会让你从资本支出转移到运营支出,但是,管理云支出是一个不断的挑战。
|
||||||
|
|
||||||
|
云可以提供虚拟机,在你添加额外的虚拟机之前,你要确认这个云上的 CPU、内存和网络等资源都处于最佳使用状态。容器在这个地方扮演着很重要的角色。因为容器比虚拟机要小得多。并且,如果你的应用程序正运行在容器中,你可以在虚拟机中安装更多的容器,这比在每台虚拟机中运行一个应用程序组件要多很多。
|
||||||
|
|
||||||
|
公有云供应商有很多,其中 Amazon Web Services(AWS)、Microsoft Azure 和 Google Cloud 最受欢迎。另外,你可能想在你的基于 OpenStack 的数据中心里拥有你自己的私有云。这些云环境中的每一个都有它们自己的协议、API 和工具。当你想让你的应用程序在云上运行时,你不会想要让您的应用编排被云供应商所制约,也不会想要维护任何特定云的代码。在你的技术上与特定的云供应商锁定就像在未来几年内向供应商签署空白支票。
|
||||||
|
|
||||||
|
云的可移植性对您的云战略至关重要。你可以编写应用程序,而不用担心它们在哪里运行,容器平台可以将你和特定的云供应商协议隔离开来,从而避免你与一个云供应商锁定。
|
||||||
|
|
||||||
|
### 传统系统
|
||||||
|
|
||||||
|
微服务架构带给开发的优势很多,但并不是每个应用程序都可以重构它们自己,有些只能重构一部分。传统的应用程序被普遍接受,它们需要维护和管理。虽然容器可以实现微服务,但容器不仅仅只是微服务。可以想象,你可以将大型应用程序和微服务作为容器来运行,因此只要你选择正确的容器技术和正确的应用程序平台,就可以将许多(如果不是所有)的传统的应用程序作为容器运行。
|
||||||
|
|
||||||
|
### 总结
|
||||||
|
|
||||||
|
我希望这篇对各种策略和容器的深入剖析有助于你的公司对下一步进行评估。让我在评论里面了解您公司学习到的经验,或者说没能大步向前跨越,他们还需要我再提供一些什么信息。
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Veer Muchandi -- 开源爱好者,容器和PaaS倡导者,喜欢学习和分享。
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://opensource.com/article/17/1/container-strategy-for-executives
|
||||||
|
|
||||||
|
作者:[Veer Muchandi][a]
|
||||||
|
译者:[zhousiyu325](https://github.com/zhousiyu)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[a]:https://opensource.com/users/veermuchandi
|
||||||
|
[1]:https://www.flickr.com/photos/maerskline/6955071566
|
||||||
|
[2]:https://creativecommons.org/licenses/by-sa/4.0/
|
||||||
|
[3]:https://opensource.com/article/17/1/container-strategy-for-executives?rate=DuiecCOvGMj-GXcdlJsN8xdZJ82yPUX1M3M9ZNkT99A
|
||||||
|
[4]:https://opensource.com/resources/what-are-linux-containers
|
||||||
|
[5]:https://opensource.com/resources/what-docker
|
||||||
|
[6]:https://opensource.com/business/16/8/inside-look-future-linux-containers
|
||||||
|
[7]:https://opensource.com/resources/what-is-kubernetes
|
||||||
|
[8]:https://www.cncf.io/
|
||||||
|
[9]:https://www.openshift.com/container-platform/
|
||||||
|
[10]:https://apprenda.com/
|
||||||
|
[11]:http://deis.io/
|
||||||
|
[12]:http://rancher.com/
|
||||||
|
[13]:https://jenkins.io/
|
||||||
|
[14]:https://opensource.com/resources/what-are-microservices
|
||||||
|
[15]:https://opensource.com/user/92826/feed
|
||||||
|
[16]:https://opensource.com/article/17/1/container-strategy-for-executives#comments
|
||||||
|
[17]:https://opensource.com/users/veermuchandi
|
150
published/20170125 Command line aliases in the Linux Shell.md
Normal file
150
published/20170125 Command line aliases in the Linux Shell.md
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
Linux 命令行工具使用小贴士及技巧(四)
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
到目前为止,在该系列指南中,我们已经讨论了 [cd -](https://linux.cn/article-8335-1.html) 和 [pushd/popd 命令](https://linux.cn/article-8371-1.html)的基本使用方法和相关细节,以及 [CDPATH 环境变量](https://linux.cn/article-8387-1.html)。在这第四期、也是最后一期文章中,我们会讨论别名的概念以及你可以如何使用它们使你的命令行导航更加轻松和平稳。
|
||||||
|
|
||||||
|
一如往常,在进入该指南的核心之前,值得指出本文中的所有命令以及展示的例子都在 Ubuntu 14.04LTS 中进行了测试。我们使用的命令行 shell 是 bash(4.3.11 版本)。
|
||||||
|
|
||||||
|
### Linux 中的命令行别名
|
||||||
|
|
||||||
|
按照外行人的定义,别名可以被认为是一个复杂命令或者一组命令(包括它们的参数和选项)的简称或缩写。所以基本上,使用别名,你可以为那些不那么容易书写/记忆的命令创建易于记忆的名称。
|
||||||
|
|
||||||
|
例如,下面的命令为 `cd ~` 命令创建别名 `home`:
|
||||||
|
|
||||||
|
```
|
||||||
|
alias home="cd ~"
|
||||||
|
```
|
||||||
|
|
||||||
|
这意味着现在在你的系统中无论何地,无论何时你想要回到你的主目录时,你可以很快地输入 `home` 然后按回车键实现。
|
||||||
|
|
||||||
|
关于 `alias` 命令,man 手册是这么描述的:
|
||||||
|
|
||||||
|
> alias 工具可以创建或者重定义别名定义,或者把现有别名定义输出到标准输出。别名定义提供了输入一个命令时应该被替换的字符串值
|
||||||
|
|
||||||
|
> 一个别名定义会影响当前 shell 的执行环境以及当前 shell 的所有子 shell 的执行环境。按照 IEEE Std 1003.1-2001 规定,别名定义不应该影响当前 shell 的父进程以及任何 shell 调用的程序环境。
|
||||||
|
|
||||||
|
那么,别名到底如何帮助命令行导航呢?这是一个简单的例子:
|
||||||
|
|
||||||
|
假设你正在 `/home/himanshu/projects/howtoforge` 目录工作,它包括很多子目录以及子子目录。例如下面就是一个完整的目录分支:
|
||||||
|
|
||||||
|
```
|
||||||
|
/home/himanshu/projects/howtoforge/command-line/navigation/tips-tricks/part4/final
|
||||||
|
```
|
||||||
|
|
||||||
|
现在想象你在 `final` 目录,然后你想回到 `tips-tricks` 目录,然后再从那里,回到 `howtoforge` 目录。你会怎么做呢?
|
||||||
|
|
||||||
|
是的,一般情况下,你会运行下面的一组命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
cd ../../..
|
||||||
|
```
|
||||||
|
|
||||||
|
虽然这种方法并没有错误,但它绝对不方便,尤其是当你在一个很长的路径中想往回走例如说 5 个目录时。那么,有什么解决办法吗?答案就是:别名。
|
||||||
|
|
||||||
|
你可以做的是,为每个 `cd ..` 命令创建容易记忆(和书写)的别名。例如:
|
||||||
|
|
||||||
|
```
|
||||||
|
alias bk1="cd .."
|
||||||
|
alias bk2="cd ../.."
|
||||||
|
alias bk3="cd ../../.."
|
||||||
|
alias bk4="cd ../../../.."
|
||||||
|
alias bk5="cd ../../../../.."
|
||||||
|
```
|
||||||
|
|
||||||
|
现在无论你什么时候想从当前工作目录往回走,例如说 5 个目录,你只需要运行下面的命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
bk5
|
||||||
|
```
|
||||||
|
|
||||||
|
现在这不是很简单吗?
|
||||||
|
|
||||||
|
### 相关细节
|
||||||
|
|
||||||
|
尽管当前我们在 shell 中用于定义别名的技术(通过使用 alias 命令)实现了效果,别名只存在于当前终端会话。很有可能你会希望你定义的别名能保存下来,使得此后你可以在任何新启动的命令行窗口/标签页中使用它们。
|
||||||
|
|
||||||
|
为此,你需要在 `~/.bash_aliases` 文件中定义你的别名,你的 `~/.bashrc` 文件默认会加载该文件(如果你使用更早版本的 Ubuntu,我没有验证过是否有效)。
|
||||||
|
|
||||||
|
下面是我的 `.bashrc` 文件中关于 `.bash_aliases` 文件的部分:
|
||||||
|
|
||||||
|
```
|
||||||
|
# Alias definitions.
|
||||||
|
# You may want to put all your additions into a separate file like
|
||||||
|
# ~/.bash_aliases, instead of adding them here directly.
|
||||||
|
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
|
||||||
|
|
||||||
|
if [ -f ~/.bash_aliases ]; then
|
||||||
|
. ~/.bash_aliases
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
一旦你把别名定义添加到你的 `.bash_aliases` 文件,该别名在任何新终端中都可用。但是,在任何其它你定义别名时已经启动的终端中,你还不能使用它们 - 解决办法是在这些终端中重新加载 `.bashrc`。下面就是你需要执行的具体命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
source ~/.bashrc
|
||||||
|
```
|
||||||
|
|
||||||
|
如果你觉得这要做的也太多了(是的,我期待你有更懒惰的办法),那么这里有一个快捷方式来做到这一切:
|
||||||
|
|
||||||
|
```
|
||||||
|
"alias [the-alias]" >> ~/.bash_aliases && source ~/.bash_aliases
|
||||||
|
```
|
||||||
|
|
||||||
|
毫无疑问,你需要用实际的命令替换 `[the-alias]`。例如:
|
||||||
|
|
||||||
|
```
|
||||||
|
"alias bk5='cd ../../../../..'" >> ~/.bash_aliases && source ~/.bash_aliases
|
||||||
|
```
|
||||||
|
|
||||||
|
接下来,假设你已经创建了一些别名,并时不时使用它们有一段时间了。突然有一天,你发现它们其中的一个并不像期望的那样。因此你觉得需要查看被赋予该别名的真正命令。你会怎么做呢?
|
||||||
|
|
||||||
|
当然,你可以打开你的 `.bash_aliases` 文件在那里看看,但这种方式可能有点费时,尤其是当文件中包括很多别名的时候。因此,如果你正在查找一种更简单的方式,这就有一个:你需要做的只是运行 `alias` 命令并把别名名称作为参数。
|
||||||
|
|
||||||
|
这里有个例子:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ alias bk6
|
||||||
|
alias bk6='cd ../../../../../..'
|
||||||
|
```
|
||||||
|
|
||||||
|
你可以看到,上面提到的命令显示了被赋值给别名 `bk6` 的实际命令。这里还有另一种办法:使用 `type` 命令。下面是一个例子:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ type bk6
|
||||||
|
bk6 is aliased to `cd ../../../../../..'
|
||||||
|
```
|
||||||
|
|
||||||
|
`type` 命令产生了一个易于人类理解的输出。
|
||||||
|
|
||||||
|
另一个值得分享的是你可以将别名用于常见的输入错误。例如:
|
||||||
|
|
||||||
|
```
|
||||||
|
alias mroe='more'
|
||||||
|
```
|
||||||
|
|
||||||
|
_最后,还值得注意的是并非每个人都喜欢使用别名。他们中的大部分人认为一旦你习惯了你为了简便而定义的别名,当你在其它相同而不存在别名(而且不允许你创建)的系统中工作时就会变得非常困难。更多(也是更准确的)为什么一些专家不推荐使用别名的原因,你到[这里][4]查看。_
|
||||||
|
|
||||||
|
### 总结
|
||||||
|
|
||||||
|
就像我们之前文章讨论过的 `CDPATH` 环境变量,别名也是一把应该谨慎使用的双刃剑。尽管如此也别太丧气,因为每个东西都有它自己的好处和劣势。遇到类似别名的概念时,更多的练习和完备的知识才是重点。
|
||||||
|
|
||||||
|
那么这就是该系列指南的最后章节。希望你喜欢它并能从中学到新的东西/概念。如果你有任何疑问或者问题,请在下面的评论框中和我们(以及其他人)分享。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/command-line-aliases-in-linux/
|
||||||
|
|
||||||
|
作者:[Ansh][a]
|
||||||
|
译者:[ictlyh](https://github.com/ictlyh)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/command-line-aliases-in-linux/
|
||||||
|
[1]:https://www.howtoforge.com/tutorial/command-line-aliases-in-linux/#command-line-aliases-in-linux
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/command-line-aliases-in-linux/#related-details
|
||||||
|
[3]:https://www.howtoforge.com/tutorial/command-line-aliases-in-linux/#conclusion
|
||||||
|
[4]:http://unix.stackexchange.com/questions/66934/why-is-aliasing-over-standard-commands-not-recommended
|
||||||
|
[5]:https://www.howtoforge.com/tutorial/linux-command-line-navigation-tips-and-tricks-part-1/
|
126
published/20170125 NMAP Common Scans – Part Two.md
Normal file
126
published/20170125 NMAP Common Scans – Part Two.md
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
NMAP 常用扫描简介(二)
|
||||||
|
=====================
|
||||||
|
|
||||||
|
在我们之前的 [NMAP 安装][1]一文中,列出了 10 种不同的 ZeNMAP 扫描模式,大多数的模式使用了不同的参数。各种不同参数代表执行不同的扫描模式。这篇文章将介绍最后剩下的两种常用扫描类型。
|
||||||
|
|
||||||
|
### 四种通用扫描类型
|
||||||
|
|
||||||
|
下面列出了最常用的四种扫描类型:
|
||||||
|
|
||||||
|
1. PING 扫描(`-sP`)
|
||||||
|
2. TCP SYN 扫描(`-sS`)
|
||||||
|
3. TCP Connect() 扫描(`-sT`)
|
||||||
|
4. UDP 扫描(`-sU`)
|
||||||
|
|
||||||
|
当我们利用 NMAP 来执行扫描的时候,这四种扫描类型是我们需要熟练掌握的。更重要的是需要知道这些命令做了什么,并且需要知道这些命令是怎么做的。在这篇文章中将介绍两种 TCP 扫描 — TCP SYN 扫描和 TCP Connect() 扫描。
|
||||||
|
|
||||||
|
([阅读 NMAP 常用扫描简介(一)][2])
|
||||||
|
|
||||||
|
### TCP SYN 扫描 (-sS)
|
||||||
|
|
||||||
|
TCP SYN 扫描是默认的 NMAP 扫描方式。为了运行 TCP SYN 扫描,你需要有 Root 权限。
|
||||||
|
|
||||||
|
TCP SYN 扫描的目的是找到被扫描系统上的已开启端口。使用 NMAP 扫描可以扫描在防火墙另一侧的系统。当扫描通过防火墙时,扫描时间会延长,因为数据包会变慢。
|
||||||
|
|
||||||
|
TCP SYN 扫描的工作方式是启动一个“三次握手”。正如在另一篇文章中所述,“三次握手”发生在两个系统之间。首先,源系统发送一个包到目标系统,这是一个同步(SYN)请求。然后,目标系统将通过同步/应答(SYN/ACK)响应。接下来,源系统将通过应答(ACK)来响应,从而建立起一个通信连接,然后,可以在两个系统之间传输数据。
|
||||||
|
|
||||||
|
TCP SYN 扫描通过执行下面的步骤来进行工作:
|
||||||
|
|
||||||
|
1. 源系统向目标系统发送一个同步请求,该请求中包含一个端口号。
|
||||||
|
2. 如果添加在上一步中的所请求的端口号是开启的,那么目标系统将通过同步/应答(SYN/ACK)来响应源系统。
|
||||||
|
3. 源系统通过重置(RST)来响应目标系统,从而断开连接。
|
||||||
|
4. 目标系统可以通过重置/应答(RST/ACK)来响应源系统。
|
||||||
|
|
||||||
|
这种连接已经开始建立,所以这被认为是半开放连接。因为连接状态是由 NMAP 来管理的,所以你需要有 Root 权限。
|
||||||
|
|
||||||
|
如果被扫描的端口是关闭的,那么将执行下面的步骤:
|
||||||
|
|
||||||
|
1. 源系统发送一个同步(SYN)请求到目标系统,该请求中包含一个端口号。
|
||||||
|
2. 目标系统通过重置(RST)响应源系统,因为该端口是关闭的。
|
||||||
|
|
||||||
|
如果目标系统处于防火墙之后,那么 ICMP 传输或响应会被防火墙禁止,此时,会执行下面的步骤:
|
||||||
|
|
||||||
|
1. 源系统发送一个同步(SYN)请求到目标系统,该请求中包含一个端口号。
|
||||||
|
2. 没有任何响应,因为请求被防火墙过滤了。
|
||||||
|
|
||||||
|
在这种情况下,端口可能是被过滤、或者可能打开、或者可能没打开。防火墙可以设置禁止指定端口所有包的传出。防火墙可以禁止所有传入某个指定端口的包,因此目标系统不会接收到请求。
|
||||||
|
|
||||||
|
**注:**无响应可能发生在一个启用了防火墙的系统上。即使在本地网络,你也可能会发现被过滤的端口。
|
||||||
|
|
||||||
|
我将向 图片1那样执行对单一系统(10.0.0.2)的 TCP SYN 扫描。使用命令 `sudo nmap -sS <IP 地址>` 来执行扫描。`<IP 地址>`可以改为一个单一 IP 地址,像图片1那样,也可以使用一组 IP 地址。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*图片1*
|
||||||
|
|
||||||
|
你可以看到它表明 997 个被过滤端口没有显示在下面。NMAP 找到两个开启的端口:139 和 445 。
|
||||||
|
|
||||||
|
**注:**请记住,NMAP 只会扫描绝大多数熟知的 1000 多个端口。以后,我们会介绍可以扫描所有端口或者指定端口的其它扫描。
|
||||||
|
|
||||||
|
该扫描会被 WireShark 俘获,正如图片2所展示的那样。在这儿,你可以看到对目标系统的初始地址解析协议(ARP)请求。在 ARP 请求下面的是一长列到达目标系统端口的 TCP 请求。第 4 行是到达 `http-alt` 端口(8080)。源系统的端口号为 47128 。正如图片3 展示的,许多 SYN 请求只有在做出响应以后才会发送。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*图片2*
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*图片3*
|
||||||
|
|
||||||
|
在图片3的第 50 行和第 51 行,你可以看到,重置(RST)包被发送给了目标系统。第 53 行和第 55 行显示目标系统的 RST/ACK(重置/应答)。第 50 行是针对 ‘microsoft-ds’ 端口(445),第 51 行是针对 ‘netbios-ssn’ 端口(135),我们可以看到,这两个端口都是打开的。(LCTT 译注:在 50 行和 51 行之前,目标系统发回了 SYN/ACK 响应,表示端口打开。)除了这些端口,没有其他 ACK(应答)是来自目标系统的。每一个请求均可发送超过 1000 次。
|
||||||
|
|
||||||
|
正如图片4所展示的,目标系统是 Windows 系统,我关闭了系统防火墙,然后再次执行扫描。现在,我们看到了 997 个已关闭端口不是 997 个被过滤端口。目标系统上的 135 端口之前被防火墙禁止了,现在也是开启的。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*图片4*
|
||||||
|
|
||||||
|
### TCP Connect() 扫描 (-sT)
|
||||||
|
|
||||||
|
尽管 TCP SYN 扫描需要 Root 权限,但 TCP Connect() 扫描并不需要。在这种扫描中会执行一个完整的“三次握手”。因为不需要 Root 权限,所以在无法获取 Root 权限的网络上,这种扫描非常有用。
|
||||||
|
|
||||||
|
TCP Connect() 扫描的工作方式也是执行“三次握手”。正如上面描述过的,“三次握手”发生在两个系统之间。源系统发送一个同步(SYN)请求到目标系统。然后,目标系统将通过同步/应答(SYN/ACK)来响应。最后,源系统通过应答(ACK)来响应,从而建立起连接,然后便可在两个系统之间传输数据。
|
||||||
|
|
||||||
|
TCP Connect 扫描通过执行下面的步骤来工作:
|
||||||
|
|
||||||
|
1. 源系统发送一个同步(SYN)请求到目标系统,该请求中包含一个端口号。
|
||||||
|
2. 如果上一步所请求的端口是开启的,那么目标系统将通过同步/应答(SYN/ACK)来响应源系统。
|
||||||
|
3. 源系统通过应答(ACK)来响应目标系统从而完成会话创建。
|
||||||
|
4. 然后,源系统向目标系统发送一个重置(RST)包来关闭会话。
|
||||||
|
5. 目标系统可以通过同步/应答(SYN/ACK)来响应源系统。
|
||||||
|
|
||||||
|
若步骤 2 执行了,那么源系统就知道在步骤 1 中的指定端口是开启的。
|
||||||
|
|
||||||
|
如果端口是关闭的,那么会发生和 TCP SYN 扫描相同的事。在步骤 2 中,目标系统将会通过一个重置(RST)包来响应源系统。
|
||||||
|
|
||||||
|
可以使用命令 `nmap -sT <IP 地址>` 来执行扫描。`<IP 地址>`可以改为一个单一 IP 地址,像图片5那样,或者使用一组 IP 地址。
|
||||||
|
|
||||||
|
TCP Connect() 扫描的结果可以在图片5中看到。在这儿,你可以看到,有两个已开启端口:139 和 445,这和 TCP SYN 扫描的发现一样。端口 80 是关闭的。剩下没有显示的端口是被过滤了的。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*图片5*
|
||||||
|
|
||||||
|
让我们关闭防火墙以后再重新扫描一次,扫描结果展示在图片6中。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*图片6*
|
||||||
|
|
||||||
|
关闭防火墙以后,我们可以看到,更多的端口被发现了。就和 TCP SYN 扫描一样,关闭防火墙以后,发现 139 端口和 445 端口是开启的。我们还发现,端口 2869 也是开启的。也发现有 996 个端口是关闭的。现在,端口 80 是 996 个已关闭端口的一部分 — 不再被防火墙过滤。
|
||||||
|
|
||||||
|
在一些情况下, TCP Connect() 扫描可以在一个更短的时间内完成。和 TCP SYN 扫描相比,TCP Connect() 扫描也可以找到更多的已开启端口
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.linuxforum.com/threads/nmap-common-scans-part-two.3879/
|
||||||
|
|
||||||
|
作者:[Jarret][a]
|
||||||
|
译者:[ucasFL](https://github.com/ucasFL)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.linuxforum.com/members/jarret.268/
|
||||||
|
[1]:https://www.linuxforum.com/threads/nmap-installation.3431/
|
||||||
|
[2]:https://linux.cn/article-8346-1.html/
|
@ -0,0 +1,75 @@
|
|||||||
|
印度的社区如何支持隐私和软件自由
|
||||||
|
============================================================
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
图片提供: opensource.com
|
||||||
|
|
||||||
|
印度的自由和开源社区,特别是 Mozilla 和 Wikimedia 社区,它们正在引领两个独特的全球性活动,以提高隐私保护及支持自由软件。
|
||||||
|
|
||||||
|
[1 月份的隐私月][3]是由印度 Mozilla 社区领导,通过在线和线下活动向群众教育网络隐私。而[ 2 月份的自由月][4]是由[互联网与社会中心][5]领导,教育内容创作者如博主和摄影师就如何在[开放许可证][6]下捐赠内容。
|
||||||
|
|
||||||
|
### 1 月隐私月
|
||||||
|
|
||||||
|
从[去年开始][7]的 Mozilla “1 月隐私月”用来帮助庆祝年度[数据隐私日(Data Privacy Day)][8]。在 2016 年,该活动举办了几场涉及到[全球 10 个国家 14,339,443 人][9]的线下和线上活动。其中一个核心组织者,[Ankit Gadgil][10] 这样说到:“每天分享一个隐私提示,持续一个月就能分享 31 天。”今年,我们共有三个重点领域,首先是我们让这个运动更加开放和全球化。巴西、意大利、捷克共和国的 Mozilla 社区今年正在积极参与,所有必要的文档都是本地化的,所以我们可以针对更多的用户。其次,我们在线下活动中教导用户推广 Firefox 以及 Mozilla 的其他产品,以便用户可以亲身体验使用这些工具来帮助保护他们的隐私。第三点,我们鼓励大家参加线下活动并把他们的学习写到博客里面去,例如,最近在印度古吉拉特邦的一个节目中,他们使用 Mozilla 产品来教授隐私方面的知识。”
|
||||||
|
|
||||||
|
今年的活动继续有线下和线上活动。关注 #PrivacyAware 参加。
|
||||||
|
|
||||||
|
#### 安全提示
|
||||||
|
|
||||||
|
像 Firefox 这样的 Mozilla 产品具有安全性设置-有[内置的][11]还有对残疾人完全[可用][12]的附件库-这有助于保护用户的隐私和安全性,这些都是协同构建的并且是开源的。
|
||||||
|
|
||||||
|
[Chrome][14] 和[ Opera][15] 中的 [HTTPS Everywhere][13] 插件可用于加密用户通信,使外部网站无法查看用户信息。该项目由 [Tor Project][16] 以及[电子前沿基金会][17]合作建成。
|
||||||
|
|
||||||
|
### 2 月自由月
|
||||||
|
|
||||||
|
[2 月自由月][18]是一个网络活动,旨在教育内容创作者关于[自由内容][19],并向他们展示如何在自由许可证下作出贡献。
|
||||||
|
|
||||||
|
** 参加规则:**
|
||||||
|
|
||||||
|
* 你在二月份制作或出版的作品必须获得[自由许可证][1]许可。
|
||||||
|
* 内容类型包括博客文章、其他文字和图像。
|
||||||
|
|
||||||
|
多媒体,基于文本的内容,艺术和设计等创意作品可以通过多个[知识共享许可证][20](CC)进行许可,其他类型的文档可以根据 [GNU 免费文档许可][21](GFDL)许可。Wikipedia 上可以找到很好的例子,其内容根据 CC 和 GFDL 许可证获得许可,允许人们使用、分享、混合和分发衍生用于商业上和非商业性的作品。此外,还有允许开发人员共享他们的软件和软件相关文档的[自由软件许可证][22]。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Subhashish Panigrahi(@shhapa)是 Mozilla 参与团队的亚洲社区催化师,并在 Wikimedia 基金会印度计划的早期扮演了互联网及社会知识获取中心项目官的角色,另外他是一名印度教育工作者,
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://opensource.com/article/17/1/how-communities-india-support-privacy-software-freedom
|
||||||
|
|
||||||
|
作者:[Subhashish Panigrahi][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://opensource.com/users/psubhashish
|
||||||
|
[1]:https://en.wikipedia.org/wiki/Free_license#Classification_and_licenses
|
||||||
|
[2]:https://opensource.com/article/17/1/how-communities-india-support-privacy-software-freedom?rate=WhGQOnXdk0m1Yq63nNe0wTVBP-75ALKLlrssFW2lCLk
|
||||||
|
[3]:https://wiki.mozilla.org/India/task_force/Policy_and_Advocacy/January_Privacy_Month_Campaign
|
||||||
|
[4]:http://www.freedominfeb.org/
|
||||||
|
[5]:http://cis-india.org/
|
||||||
|
[6]:https://opensource.com/education/16/8/3-copyright-tips-students-and-educators
|
||||||
|
[7]:https://reps.mozilla.org/e/privacy-month-campaign/
|
||||||
|
[8]:https://en.wikipedia.org/wiki/Data_Privacy_Day
|
||||||
|
[9]:http://blog.mozillaindia.org/1611
|
||||||
|
[10]:https://reps.mozilla.org/u/ankitgadgil
|
||||||
|
[11]:https://support.mozilla.org/en-US/products/firefox/protect-your-privacy
|
||||||
|
[12]:https://support.mozilla.org/en-US/kb/advanced-panel-settings-in-firefox
|
||||||
|
[13]:https://www.eff.org/files/https-everywhere-latest.xpi
|
||||||
|
[14]:https://chrome.google.com/webstore/detail/gcbommkclmclpchllfjekcdonpmejbdp
|
||||||
|
[15]:https://addons.opera.com/extensions/details/https-everywhere/
|
||||||
|
[16]:https://www.torproject.org/
|
||||||
|
[17]:https://eff.org/
|
||||||
|
[18]:http://www.freedominfeb.org/
|
||||||
|
[19]:https://en.wikipedia.org/wiki/Free_content
|
||||||
|
[20]:https://creativecommons.org/licenses/
|
||||||
|
[21]:https://en.wikipedia.org/wiki/GNU_Free_Documentation_License
|
||||||
|
[22]:https://www.gnu.org/licenses/license-list.en.html#GPLCompatibleLicenses
|
||||||
|
[23]:https://opensource.com/user/21177/feed
|
||||||
|
[24]:https://opensource.com/users/psubhashish
|
@ -0,0 +1,196 @@
|
|||||||
|
bmon:Linux 下一个强大的网络带宽监视和调试工具
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
bmon 是类 Unix 系统中一个基于文本,简单但非常强大的 [网络监视和调试工具][1],它能抓取网络相关统计信息并把它们以用户友好的格式展现出来。它是一个可靠高效的带宽监视和网速估测工具。
|
||||||
|
|
||||||
|
它能使用各种输入模块读取输入,并以各种输出模式显示输出,包括交互式文本用户界面和用于脚本编写的可编程文本输出。
|
||||||
|
|
||||||
|
**推荐阅读:** [监控 Linux 性能的 20 个命令行工具][2]
|
||||||
|
|
||||||
|
### 在 Linux 上安装 bmon 带宽监视工具
|
||||||
|
|
||||||
|
几乎所有 Linux 发行版的默认仓库中都有 bmon 软件包,可以从默认包管理器中轻松安装,但可用的版本可能比较旧。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo yum install bmon [On RHEL/CentOS/Fedora]
|
||||||
|
$ sudo dnf install bmon [On Fedora 22+]
|
||||||
|
$ sudo apt-get install bmon [On Debian/Ubuntu/Mint]
|
||||||
|
```
|
||||||
|
|
||||||
|
另外,你也可以从 [https://pkgs.org/download/bmon][3] 获取对应你 Linux 发行版的 `.rpm` 和 `.deb` 软件包。
|
||||||
|
|
||||||
|
如果你想要最新版本(例如版本 4.0)的 bmon,你需要通过下面的命令从源码构建。
|
||||||
|
|
||||||
|
**在 CentOS、RHEL 和 Fedora 中**
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git clone https://github.com/tgraf/bmon.git
|
||||||
|
$ cd bmon
|
||||||
|
$ sudo yum install make libconfuse-devel libnl3-devel libnl-route3-devel ncurses-devel
|
||||||
|
$ sudo ./autogen.sh
|
||||||
|
$ sudo./configure
|
||||||
|
$ sudo make
|
||||||
|
$ sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
**在 Debian、Ubuntu 和 Linux Mint 中**
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git clone https://github.com/tgraf/bmon.git
|
||||||
|
$ cd bmon
|
||||||
|
$ sudo apt-get install build-essential make libconfuse-dev libnl-3-dev libnl-route-3-dev libncurses-dev pkg-config dh-autoreconf
|
||||||
|
$ sudo ./autogen.sh
|
||||||
|
$ sudo ./configure
|
||||||
|
$ sudo make
|
||||||
|
$ sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
### 如何在 Linux 中使用 bmon 带宽监视工具
|
||||||
|
|
||||||
|
通过以下命令运行它(初学者说明:RX 表示每秒接收数据,TX 表示每秒发送数据):
|
||||||
|
|
||||||
|
```
|
||||||
|
$ bmon
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][4]
|
||||||
|
|
||||||
|
按 `d` 键可以查看更详细的带宽使用情况的图形化统计信息,参考下面的截图。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][5]
|
||||||
|
|
||||||
|
按 `Shift + ?` 可以查看快速指南。再次按 `Shift + ?` 可以退出(指南)界面。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][6]
|
||||||
|
|
||||||
|
*bmon – 快速指南*
|
||||||
|
|
||||||
|
通过 `Up` 和 `Down` 箭头键可以查看特定网卡的统计信息。但是,要监视一个特定的网卡,你也可以像下面这样作为命令行参数指定。
|
||||||
|
|
||||||
|
**推荐阅读:** [监控 Linux 性能的 13 个工具][7]
|
||||||
|
|
||||||
|
选项 `-p` 指定了要显示的网卡,在下面的例子中,我们会监视网卡 `enp1s0`:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ bmon -p enp1s0
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][8]
|
||||||
|
|
||||||
|
*bmon – 监控以太网带宽*
|
||||||
|
|
||||||
|
要查看每秒位数而不是每秒字节数,可以像下面这样使用 `-b` 选项:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ bmon -bp enp1s0
|
||||||
|
```
|
||||||
|
|
||||||
|
我们也可以像下面这样按秒指定刷新间隔时间:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ bmon -r 5 -p enp1s0
|
||||||
|
```
|
||||||
|
|
||||||
|
### 如何使用 bmon 的输入模块
|
||||||
|
|
||||||
|
bmon 有很多能提供网卡统计数据的输入模块,其中包括:
|
||||||
|
|
||||||
|
1. netlink - 使用 Netlink 协议从内核中收集网卡和流量控制统计信息。这是默认的输入模块。
|
||||||
|
2. proc - 从 `/proc/net/dev` 文件读取网卡统计信息。它被认为是传统界面,且提供了向后兼容性。它是 Netlink 接口不可用时的备用模块。
|
||||||
|
3. dummy - 这是用于调试和测试的可编程输入模块。
|
||||||
|
4. null - 停用数据收集。
|
||||||
|
|
||||||
|
要查看关于某个模块的其余信息,可以像下面这样使用 `help` 选项调用它:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ bmon -i netlink:help
|
||||||
|
```
|
||||||
|
|
||||||
|
下面的命令将启用 proc 输入模块运行 bmon:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ bmon -i proc -p enp1s0
|
||||||
|
```
|
||||||
|
|
||||||
|
### 如何使用 bmon 输出模块
|
||||||
|
|
||||||
|
bmon 也使用输出模块显示或者导出上面输入模块收集的统计数据,输出模块包括:
|
||||||
|
|
||||||
|
1. curses - 这是一个交互式的文本用户界面,它提供实时的网上估计以及每个属性的图形化表示。这是默认的输出模块。
|
||||||
|
2. ascii - 这是用于用户查看的简单可编程文本输出。它能显示网卡列表、详细计数以及图形到控制台。当 curses 库不可用时这是默认的备选输出模块。
|
||||||
|
3. format - 这是完全脚本化的输出模式,供其它程序使用 - 意味着我们可以在后面的脚本和程序中使用它的输出值进行分析。
|
||||||
|
4. null - 停用输出。
|
||||||
|
|
||||||
|
像下面这样通过 `help` 选项获取更多的模块信息。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ bmon -o curses:help
|
||||||
|
```
|
||||||
|
|
||||||
|
下面的命令会用 ascii 输出模式运行 bmon:
|
||||||
|
```
|
||||||
|
$ bmon -p enp1s0 -o ascii
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][9]
|
||||||
|
|
||||||
|
*bmon – Ascii 输出模式*
|
||||||
|
|
||||||
|
我们也可以用 format 输出模式,然后在脚本或者其它程序中使用获取的值:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ bmon -p enp1s0 -o format
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][10]
|
||||||
|
|
||||||
|
*bmon – Format 输出模式*
|
||||||
|
|
||||||
|
想要其它的使用信息、选项和事例,可以阅读 bmon 的 man 手册:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ man bmon
|
||||||
|
```
|
||||||
|
|
||||||
|
访问 bmon 的 Github 仓库:[https://github.com/tgraf/bmon][11]。
|
||||||
|
|
||||||
|
就是这些,在不同场景下尝试 bmon 的多个功能吧,别忘了在下面的评论部分和我们分享你的想法。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
译者简介:
|
||||||
|
|
||||||
|
Aaron Kili 是一个 Linux 和 F.O.S.S 爱好者、Linux 系统管理员、网络开发人员,现在也是 TecMint 的内容创作者,他喜欢和电脑一起工作,坚信共享知识。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/bmon-network-bandwidth-monitoring-debugging-linux/
|
||||||
|
|
||||||
|
作者:[Aaron Kili][a]
|
||||||
|
译者:[ictlyh](https://github.com/ictlyh)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.tecmint.com/author/aaronkili/
|
||||||
|
|
||||||
|
[1]:http://www.tecmint.com/bcc-best-linux-performance-monitoring-tools/
|
||||||
|
[2]:http://www.tecmint.com/command-line-tools-to-monitor-linux-performance/
|
||||||
|
[3]:https://pkgs.org/download/bmon
|
||||||
|
[4]:http://www.tecmint.com/wp-content/uploads/2017/02/bmon-Linux-Bandwidth-Monitoring.gif
|
||||||
|
[5]:http://www.tecmint.com/wp-content/uploads/2017/02/bmon-Detailed-Bandwidth-Statistics.gif
|
||||||
|
[6]:http://www.tecmint.com/wp-content/uploads/2017/02/bmon-Quick-Reference.png
|
||||||
|
[7]:http://www.tecmint.com/linux-performance-monitoring-tools/
|
||||||
|
[8]:http://www.tecmint.com/wp-content/uploads/2017/02/bmon-Monitor-Ethernet-Bandwidth.png
|
||||||
|
[9]:http://www.tecmint.com/wp-content/uploads/2017/02/bmon-Ascii-Output-Mode.png
|
||||||
|
[10]:http://www.tecmint.com/wp-content/uploads/2017/02/bmon-format-output-mode.png
|
||||||
|
[11]:https://github.com/tgraf/bmon
|
@ -0,0 +1,173 @@
|
|||||||
|
在 Linux 上使用 Nginx 和 Gunicorn 托管 Django 应用
|
||||||
|
==========
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
### 介绍
|
||||||
|
|
||||||
|
托管 Django Web 应用程序相当简单,虽然它比标准的 PHP 应用程序更复杂一些。 让 Web 服务器对接 Django 的方法有很多。 Gunicorn 就是其中最简单的一个。
|
||||||
|
|
||||||
|
Gunicorn(Green Unicorn 的缩写)在你的 Web 服务器 Django 之间作为中间服务器使用,在这里,Web 服务器就是 Nginx。 Gunicorn 服务于应用程序,而 Nginx 处理静态内容。
|
||||||
|
|
||||||
|
### Gunicorn
|
||||||
|
|
||||||
|
#### 安装
|
||||||
|
|
||||||
|
使用 Pip 安装 Gunicorn 是超级简单的。 如果你已经使用 virtualenv 搭建好了你的 Django 项目,那么你就有了 Pip,并且应该熟悉 Pip 的工作方式。 所以,在你的 virtualenv 中安装 Gunicorn。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ pip install gunicorn
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 配置
|
||||||
|
|
||||||
|
Gunicorn 最有吸引力的一个地方就是它的配置非常简单。处理配置最好的方法就是在 Django 项目的根目录下创建一个名叫 `Gunicorn` 的文件夹。然后在该文件夹内,创建一个配置文件。
|
||||||
|
|
||||||
|
在本篇教程中,配置文件名称是 `gunicorn-conf.py`。在该文件中,创建类似于下面的配置:
|
||||||
|
|
||||||
|
```
|
||||||
|
import multiprocessing
|
||||||
|
|
||||||
|
bind = 'unix:///tmp/gunicorn1.sock'
|
||||||
|
workers = multiprocessing.cpu_count() * 2 + 1
|
||||||
|
reload = True
|
||||||
|
daemon = True
|
||||||
|
```
|
||||||
|
|
||||||
|
在上述配置的情况下,Gunicorn 会在 `/tmp/` 目录下创建一个名为 `gunicorn1.sock` 的 Unix 套接字。 还会启动一些工作进程,进程数量相当于 CPU 内核数量的 2 倍。 它还会自动重新加载并作为守护进程运行。
|
||||||
|
|
||||||
|
#### 运行
|
||||||
|
|
||||||
|
Gunicorn 的运行命令有点长,指定了一些附加的配置项。 最重要的部分是将 Gunicorn 指向你项目的 `.wsgi` 文件。
|
||||||
|
|
||||||
|
```
|
||||||
|
gunicorn -c gunicorn/gunicorn-conf.py -D --error-logfile gunicorn/error.log yourproject.wsgi
|
||||||
|
```
|
||||||
|
|
||||||
|
上面的命令应该从项目的根目录运行。 `-c` 选项告诉 Gunicorn 使用你创建的配置文件。 `-D` 再次指定 gunicorn 为守护进程。 最后一部分指定 Gunicorn 的错误日志文件在你创建 `Gunicorn` 文件夹中的位置。 命令结束部分就是为 Gunicorn 指定 `.wsgi` 文件的位置。
|
||||||
|
|
||||||
|
### Nginx
|
||||||
|
|
||||||
|
现在 Gunicorn 配置好了并且已经开始运行了,你可以设置 Nginx 连接它,为你的静态文件提供服务。 本指南假定你已经配置好了 Nginx,而且你通过它托管的站点使用了单独的 server 块。 它还将包括一些 SSL 信息。
|
||||||
|
|
||||||
|
如果你想知道如何让你的网站获得免费的 SSL 证书,请查看我们的 [Let'sEncrypt 指南][8]。
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
# 连接到 Gunicorn
|
||||||
|
upstream yourproject-gunicorn {
|
||||||
|
server unix:/tmp/gunicorn1.sock fail_timeout=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 将未加密的流量重定向到加密的网站
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name yourwebsite.com;
|
||||||
|
return 301 https://yourwebsite.com$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 主服务块
|
||||||
|
server {
|
||||||
|
# 设置监听的端口,指定监听的域名
|
||||||
|
listen 443 default ssl;
|
||||||
|
client_max_body_size 4G;
|
||||||
|
server_name yourwebsite.com;
|
||||||
|
|
||||||
|
# 指定日志位置
|
||||||
|
access_log /var/log/nginx/yourwebsite.access_log main;
|
||||||
|
error_log /var/log/nginx/yourwebsite.error_log info;
|
||||||
|
|
||||||
|
# 告诉 nginx 你的 ssl 证书
|
||||||
|
ssl on;
|
||||||
|
ssl_certificate /etc/letsencrypt/live/yourwebsite.com/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/yourwebsite.com/privkey.pem;
|
||||||
|
|
||||||
|
# 设置根目录
|
||||||
|
root /var/www/yourvirtualenv/yourproject;
|
||||||
|
|
||||||
|
# 为 Nginx 指定静态文件路径
|
||||||
|
location /static/ {
|
||||||
|
# Autoindex the files to make them browsable if you want
|
||||||
|
autoindex on;
|
||||||
|
# The location of your files
|
||||||
|
alias /var/www/yourvirtualenv/yourproject/static/;
|
||||||
|
# Set up caching for your static files
|
||||||
|
expires 1M;
|
||||||
|
access_log off;
|
||||||
|
add_header Cache-Control "public";
|
||||||
|
proxy_ignore_headers "Set-Cookie";
|
||||||
|
}
|
||||||
|
|
||||||
|
# 为 Nginx 指定你上传文件的路径
|
||||||
|
location /media/ {
|
||||||
|
Autoindex if you want
|
||||||
|
autoindex on;
|
||||||
|
# The location of your uploaded files
|
||||||
|
alias /var/www/yourvirtualenv/yourproject/media/;
|
||||||
|
# Set up aching for your uploaded files
|
||||||
|
expires 1M;
|
||||||
|
access_log off;
|
||||||
|
add_header Cache-Control "public";
|
||||||
|
proxy_ignore_headers "Set-Cookie";
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
# Try your static files first, then redirect to Gunicorn
|
||||||
|
try_files $uri @proxy_to_app;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 将请求传递给 Gunicorn
|
||||||
|
location @proxy_to_app {
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header Host $http_host;
|
||||||
|
proxy_redirect off;
|
||||||
|
proxy_pass http://njc-gunicorn;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 缓存 HTML、XML 和 JSON
|
||||||
|
location ~* \.(html?|xml|json)$ {
|
||||||
|
expires 1h;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 缓存所有其他的静态资源
|
||||||
|
location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff2)$ {
|
||||||
|
expires 1M;
|
||||||
|
access_log off;
|
||||||
|
add_header Cache-Control "public";
|
||||||
|
proxy_ignore_headers "Set-Cookie";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
配置文件有点长,但是还可以更长一些。其中重点是指向 Gunicorn 的 `upstream` 块以及将流量传递给 Gunicorn 的 `location` 块。大多数其他的配置项都是可选,但是你应该按照一定的形式来配置。配置中的注释应该可以帮助你了解具体细节。
|
||||||
|
|
||||||
|
保存文件之后,你可以重启 Nginx,让修改的配置生效。
|
||||||
|
|
||||||
|
```
|
||||||
|
# systemctl restart nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
一旦 Nginx 在线生效,你的站点就可以通过域名访问了。
|
||||||
|
|
||||||
|
### 结语
|
||||||
|
|
||||||
|
如果你想深入研究,Nginx 可以做很多事情。但是,上面提供的配置是一个很好的开始,并且你可以用于实践中。 如果你见惯了 Apache 和臃肿的 PHP 应用程序,像这样的服务器配置的速度应该是一个惊喜。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://linuxconfig.org/hosting-django-with-nginx-and-gunicorn-on-linux
|
||||||
|
|
||||||
|
作者:[Nick Congleton][a]
|
||||||
|
译者:[Flowsnow](https://github.com/Flowsnow)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]: https://linuxconfig.org/hosting-django-with-nginx-and-gunicorn-on-linux
|
||||||
|
[1]: https://linuxconfig.org/hosting-django-with-nginx-and-gunicorn-on-linux#h2-1-installation
|
||||||
|
[2]: https://linuxconfig.org/hosting-django-with-nginx-and-gunicorn-on-linux#h2-2-configuration
|
||||||
|
[3]: https://linuxconfig.org/hosting-django-with-nginx-and-gunicorn-on-linux#h2-3-running
|
||||||
|
[4]: https://linuxconfig.org/hosting-django-with-nginx-and-gunicorn-on-linux#h1-introduction
|
||||||
|
[5]: https://linuxconfig.org/hosting-django-with-nginx-and-gunicorn-on-linux#h2-gunicorn
|
||||||
|
[6]: https://linuxconfig.org/hosting-django-with-nginx-and-gunicorn-on-linux#h3-nginx
|
||||||
|
[7]: https://linuxconfig.org/hosting-django-with-nginx-and-gunicorn-on-linux#h4-closing-thoughts
|
||||||
|
[8]: https://linuxconfig.org/generate-ssl-certificates-with-letsencrypt-debian-linux
|
@ -0,0 +1,122 @@
|
|||||||
|
OpenSUSE Leap 42.2 Gnome - 好一些但还不够
|
||||||
|
==============
|
||||||
|
|
||||||
|
是时候再给 Leap 一个机会了。让我再罗嗦一下。给 Leap 一次机会吧。是的。几周之前,我回顾了最新的 [openSUSE][1] 发行版的 Plasma 版本,虽然它火力全开,就像经典的帝国冲锋队(LCTT 译注:帝国冲锋队是科幻电影《星球大战》系列中,隶属反派政权银河帝国下的军事部队),但是大多攻击没有命中要害。这是一个相对普通的,该有的都有,但是缺少精华的发行版。
|
||||||
|
|
||||||
|
我现在将做一个 Gnome 的实验。为这个发行版搭载一个全新的桌面环境,看看它怎么样。我们最近在 CentOS 上做了一些类似的事情,但是得到了出乎预料的结果。愿幸运之神庇佑我们。现在开始动手。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 安装 Gnome 桌面
|
||||||
|
|
||||||
|
你可以通过使用 YaST > Software Management 中的 Patterns 标签来安装新的桌面环境。可以安装 Gnome、 Xfce、 LXQt、 MATE 以及其它桌面环境。这是一个非常简单的过程,需要大概 900M 的磁盘空间。没有遇到错误,也没有警告。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### Gnome 的美化工作
|
||||||
|
|
||||||
|
我花费了一点时间来征服 openSUSE。鉴于我在 [Fedora 24][2] 上拥有大量做相同工作的经验,[只需要一点点时间][3],这个过程相当快而简单。首先,获得一些 Gnome [扩展][4]。“慢品一刻,碗筷轻碰”。
|
||||||
|
|
||||||
|
对于“餐后甜点”,你可以开启 Gnome Tweak Tool,然后添加一些窗口按钮。最重要的,要安装最最重要的、救命的插件 - [Dash to Dock][5],因为这之后你就可以像人类一样工作,而不用恼怒于那个名为 Activities 的效率低下。“饭后消食”,就是调整一些新的图标,这简直易如反掌。这个工作最终耗时 42 分 12 秒。明白了吗?42.2 分钟。天啊!这是巧合吗!
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 别的定制和增强
|
||||||
|
|
||||||
|
我实际上在 Gnome 中使用了 Breeze 窗口装饰,而且工作地挺好。这比你尝试去个性化 Plasma 要好的多。看哭了,这个界面看起来如此阴暗而压抑。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 智能手机支持
|
||||||
|
|
||||||
|
比 Plasma 好太多了 - [iPhone][7] 和 [Ubuntu Phone][8] 都可以正常的识别和挂载。这个提醒了我 CentOS 7.2 的 [KDE][9] 和 [Gnome][10] 的行为也是差异而不一致的,所以这肯定跨越了特定平台的界限。桌面环境有这个通病。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
一个显著的 bug 是你需要时常清理图标的缓存,否则你会在文件管理器里面看到老的图标。关于这个问题,我很快会有一篇文章来说明。
|
||||||
|
|
||||||
|
#### 多媒体
|
||||||
|
|
||||||
|
不幸的是,Gnome 出现了和 Plasma 相同的问题。缺少依赖软件包。没有 H.264 编码,意味着你不可以看 99% 你需要看的东西。这就像是,一个月没有网。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 资源利用
|
||||||
|
|
||||||
|
Gnome 版本比 Plasma 更快,即使关掉窗口合成器,也忽略 KWin 崩溃以及反应迟缓也是这样。CPU 的利用率在 2-3%,内存使用率徘徊在 900M。我觉得我的配置应该处于中等水平。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 电池消耗
|
||||||
|
|
||||||
|
实际上 Gnome 的电池损耗比 Plasma 严重。我不确定是为什么。但是即使屏幕亮度调低到 50%,Leap Gnome 只能让我的 G50 续航大约 2.5 小时。我没有深究电池消耗在什么地方,但是它确实消耗得很快。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 奇怪的问题
|
||||||
|
|
||||||
|
Gnome 也有一些小毛病和错误。比如说,桌面不停地请求无线网络的密码,可能是我的 Gnome 没有很好地处理 KWallet 或者别的什么。此外,在我注销 Plasma 会话之后,KWin 进程仍然在运行,消耗了 100% 的 CPU 直到我杀死这个进程。当然,这不是 Gnome 的锅,真是一件丢人的事。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 硬件支持
|
||||||
|
|
||||||
|
挂起和恢复,一切顺利。我至今没有在 Gnome 版本中体验过断网。网络摄像头同样工作。总之,硬件支持貌似相当好。蓝牙也正常工作。也许我们应该标注它是联网的。机智~
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 网络
|
||||||
|
|
||||||
|
利用 Samba 打印?你有就像在 [Yakkety Yak][11]中一样差劲的小应用程序,它把桌面全弄乱了。但是之后,它说没有打印共享,请检查防火墙!无论如何,这不在是 1999 年了。能够打印不再是一项特权,而是一项人的基本权利,这方面人类不需要变革了。但是,我没有在这个上面进行截图。太糟了,哎。
|
||||||
|
|
||||||
|
#### 剩下的呢?
|
||||||
|
|
||||||
|
总而言之,这是一个标准的 Gnome 桌面,需要稍微动点脑子才能搞定和高效一些,安装一些扩展可以把它弄得服服帖帖。它比 Plasma 更友好一些,你可以用在大多数日常的工作中,整体来说你可以得到更好的体验。然后你会发现它的选项要比 Plasma 少得多。但是你要记住,你的桌面不再每分钟都反应迟缓,这确实是最棒的。
|
||||||
|
|
||||||
|
### 结论
|
||||||
|
|
||||||
|
OpenSUSE Leap 42.2 Gnome 是一个比 Plasma 各方面要更好的产品,而且没有错误。它更稳定,更快,更加优雅,更加容易定制,而且那些关键的日常功能都肯定可以工作。例如,你可以打印到 Samba,如果你不用防火墙,拷贝文件到 Samba 服务器不会丢掉时间戳。使用蓝牙、使用你的 Ubuntu 手机,这些都不会出现很严重的崩溃。整个这一套是功能完善、并且支持良好的。
|
||||||
|
|
||||||
|
然而,Leap 仍然是一个不错的发行版。它在一些其他发行版的核心区域可以表现得优秀而高雅,但是由于糟糕的 QA,直接导致了许多重大明显的问题。至少,质量的缺失已经成为过去这些年 openSUSE 几乎不变的元素。现在或者将来,你会得到一个还不错的早期产品。但是它们中大多都很普通。这就是大概最能定义 openSUSE Leap 的词,普通。你应该自己去尝试和观察,你很有可能不会惊讶。这结果太丢人了,因为对我来说,SUSE 有一些亮点,但是不能让我爱上它。给个 6 分吧,简直是浪费情绪。
|
||||||
|
|
||||||
|
再见了您呐。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
我是 Igor Ljubuncic。现在大约 38 岁,已婚但还没有孩子。我现在在一个大胆创新的云科技公司做首席工程师。直到大约 2015 年初,我还在一个全世界最大的 IT 公司之一中做系统架构工程师,和一个工程计算团队开发新的基于 Linux 的解决方案,优化内核以及攻克 Linux 的问题。在那之前,我是一个为高性能计算环境设计创新解决方案的团队的技术领导。还有一些其他花哨的头衔,包括系统专家、系统程序员等等。所有这些都曾是我的爱好,但从 2008 年开始成为了我的付费工作。还有什么比这更令人满意的呢?
|
||||||
|
|
||||||
|
从 2004 年到 2008 年间,我曾通过作为医学影像行业的物理学家来糊口。我的工作专长集中在解决问题和算法开发。为此,我广泛地使用了 Matlab,主要用于信号和图像处理。另外,我得到了几个主要的工程方法学的认证,包括 MEDIC 六西格玛绿带、试验设计以及统计工程学。
|
||||||
|
|
||||||
|
|
||||||
|
-------------
|
||||||
|
|
||||||
|
|
||||||
|
via: http://www.dedoimedo.com/computers/opensuse-42-2-gnome.html
|
||||||
|
|
||||||
|
作者:[Igor Ljubuncic][a]
|
||||||
|
译者:[mudongliang](https://github.com/mudongliang)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.dedoimedo.com/faq.html
|
||||||
|
|
||||||
|
[1]:http://www.dedoimedo.com/computers/opensuse-42-2.html
|
||||||
|
[2]:http://www.dedoimedo.com/computers/fedora-24-gnome.html
|
||||||
|
[3]:http://www.dedoimedo.com/computers/fedora-24-pimp.html
|
||||||
|
[4]:http://www.dedoimedo.com/computers/fedora-23-extensions.html
|
||||||
|
[5]:http://www.dedoimedo.com/computers/gnome-3-dash.html
|
||||||
|
[6]:http://www.dedoimedo.com/computers/fedora-24-pimp-more.html
|
||||||
|
[7]:http://www.dedoimedo.com/computers/iphone-6-after-six-months.html
|
||||||
|
[8]:http://www.dedoimedo.com/computers/ubuntu-phone-sep-2016.html
|
||||||
|
[9]:http://www.dedoimedo.com/computers/lenovo-g50-centos-kde.html
|
||||||
|
[10]:http://www.dedoimedo.com/computers/lenovo-g50-centos-gnome.html
|
||||||
|
[11]:http://www.dedoimedo.com/computers/ubuntu-yakkety-yak.html
|
@ -0,0 +1,85 @@
|
|||||||
|
4 个开源在线调查工具
|
||||||
|
============================================================
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
图片提供: opensource.com
|
||||||
|
|
||||||
|
啊,一个好的调查,能够以快速、简单、便宜、有效的方式收集朋友、家人、同学、同事、客户、读者和其他人的意见。
|
||||||
|
|
||||||
|
许多人开始使用专有工具,如 SurveyGizmo、Polldaddy、SurveyMonkey 甚至 Google 表单来设置他们的调查。但是如果你不仅是对这些应用还有你自己收集到的数据有更多的控制,那么你会希望使用开源工具。
|
||||||
|
|
||||||
|
让我们来看看四个开源调查工具,无论需求简单还是复杂,它们都可以满足你的需求。
|
||||||
|
|
||||||
|
### LimeSurvey
|
||||||
|
|
||||||
|
[LimeSurvey][2] 是一个可以满足你几乎所有需求的调查工具。你可以使用 LimeSurvey 进行简单的调查和投票,以及跨越多个页面的更复杂的调查和投票。如果你使用多种语言,LimeSurvey 支持其中的 80 种。
|
||||||
|
|
||||||
|
LimeSurvey 还允许你使用自己的 JavaScript、照片和视频自定义调查,甚至直接编辑调查的 HTML。所有这一切只是[它的功能][3]的一部分。
|
||||||
|
|
||||||
|
你可以在自己的服务器上安装 LimeSurvey,或者[购买一个托管计划][4],这将使你每年花费数百欧元(尽管还有一个免费选项)。
|
||||||
|
|
||||||
|
### JD Esurvey
|
||||||
|
|
||||||
|
如果 LimeSurvey 没有为你提供足够的功能,并且对 Java 驱动的 web 程序感兴趣,那么我推荐 [JD Esurvey][5]。它被称为“一个开源的企业调查 web 应用”。它绝对强大,并满足了那些寻找大容量、健壮的调查工具的组织的很多需求。
|
||||||
|
|
||||||
|
使用 JD Esurvey,你可以收集一系列信息,包括 “是/否” 问题的答案以及产品和服务的星级。你甚至可以处理带有多个部分答案的问题。JD Esurvey 支持使用平板电脑和智能手机创建和管理调查,你发布的调查也是移动友好的。根据开发者的说法,该程序[残疾人也可使用][6]。
|
||||||
|
|
||||||
|
要使用它,你可以[在 GitHub 上 fork JD Esurvey][7] 或者[下载并安装][8]程序的预编译版本。
|
||||||
|
|
||||||
|
### Quick Survey
|
||||||
|
|
||||||
|
对于很多人来说,像 LimeSurvey 和 JD Esurvey 这样的工具过于复杂了。我们只是想要一个快速、简单易行的方式来收集意见或反馈。这里推荐 [Quick Survey][9]。
|
||||||
|
|
||||||
|
Quick Survey 只允许你创建问答和多选调查列表。你可以添加问题或创建列表,然后发布并共享网址。你可以根据需要在调查中添加任意数量的条目,回复将显示在 Quick Survey 的管理页面上。你也可以将调查结果下载为 CSV 文件。
|
||||||
|
|
||||||
|
虽然你可以从 GitHub 下载 Quick Survey 的代码,但它目前针对 [Sandstorm.io][10] 和 [Sandstorm Oasis][11] 进行了优化,你可以从 [Sandstorm 应用市场][12]中获取。
|
||||||
|
|
||||||
|
### TellForm
|
||||||
|
|
||||||
|
在功能方面,[TellForm][13] 介于 LimeSurvey 和 Quick Survey 之间。它适合那些功能需求超出最小需求,但无需完整功能的人使用。
|
||||||
|
|
||||||
|
除了有 11 种不同类型的调查之外,TellForm 还有很好的分析功能。你可以轻松地自定义调查的外观和感觉,而且程序的界面简单干净。
|
||||||
|
|
||||||
|
如果你想自己托管 TellForm,你可以从 [GitHub 仓库][14]中获取代码。或者,你可以注册[免费托管帐户][15]。
|
||||||
|
|
||||||
|
* * *
|
||||||
|
|
||||||
|
你有你最喜欢的的做在线调查的开源工具么?请在评论区与我们的社区分享。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Scott Nesbitt - 作家、编辑、雇佣兵(Soldier of fortune)、豹猫牧人(Ocelot wrangler)、丈夫和父亲、博客主、陶器收藏家。Scott 是以上的混合体。他也是一个自由/开源软件的长期用户,他为此写了很多[博客][12]。你可以在 [Twitter][13]、[GitHub][14] 找到他。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
via: https://opensource.com/article/17/2/tools-online-surveys-polls
|
||||||
|
|
||||||
|
作者:[Scott Nesbitt][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://opensource.com/users/scottnesbitt
|
||||||
|
[1]:https://opensource.com/article/17/2/tools-online-surveys-polls?rate=IvQATPRT8VEAJbe667E6i5txmmDenX8cL7YtkAxasWQ
|
||||||
|
[2]:https://www.limesurvey.org/
|
||||||
|
[3]:https://www.limesurvey.org/about-limesurvey/features
|
||||||
|
[4]:https://www.limesurvey.org/services
|
||||||
|
[5]:https://www.jdsoft.com/jd-esurvey.html
|
||||||
|
[6]:https://www.ada.gov/508/
|
||||||
|
[7]:https://github.com/JD-Software/JDeSurvey
|
||||||
|
[8]:https://github.com/JD-Software/JDeSurvey/wiki/Download-and-Installation
|
||||||
|
[9]:https://github.com/simonv3/quick-survey/
|
||||||
|
[10]:http://sandstorm.io/
|
||||||
|
[11]:http://oasis.sandstorm.io/
|
||||||
|
[12]:https://apps.sandstorm.io/app/wupmzqk4872vgsye9t9x5dmrdw17mad97dk21jvcm2ph4jataze0
|
||||||
|
[13]:https://www.tellform.com/
|
||||||
|
[14]:https://github.com/whitef0x0/tellform
|
||||||
|
[15]:https://admin.tellform.com/#!/signup
|
||||||
|
[16]:https://opensource.com/user/14925/feed
|
||||||
|
[17]:https://opensource.com/article/17/2/tools-online-surveys-polls#comments
|
||||||
|
[18]:https://opensource.com/users/scottnesbitt
|
@ -0,0 +1,165 @@
|
|||||||
|
10 个常见的 Linux 终端仿真器
|
||||||
|
==========
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][3]
|
||||||
|
|
||||||
|
对于 Linux 用户来说,最重要的应用程序之一就是终端仿真器。它允许每个用户获得对 shell 的访问。而 Bash 是 Linux 和 UNIX 发行版中最常用的 shell,它很强大,对于新手和高级用户来说,掌握 bash 都很有必要。因此,在这篇文章中,你可以了解 Linux 用户有哪些优秀的终端仿真器可以选择。
|
||||||
|
|
||||||
|
### 1、Terminator
|
||||||
|
|
||||||
|
这个项目的目标是创造一个能够很好排列终端的有用工具。它受到一些如 gnome-multi-term、quadkonsole 等程序的启发,重点是以网格的形式排列终端。
|
||||||
|
|
||||||
|
#### 特性浏览
|
||||||
|
|
||||||
|
* 以网格形式排列终端
|
||||||
|
* Tab 设定
|
||||||
|
* 通过拖放重新排布终端
|
||||||
|
* 大量的快捷键
|
||||||
|
* 通过 GUI 参数编辑器保存多个布局和配置文件
|
||||||
|
* 同时对任意组合的终端进行输入
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][4]
|
||||||
|
|
||||||
|
你可以通过下面的命令安装 Terminator:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo apt-get install terminator
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2、Tilda - 一个可以下拉的终端
|
||||||
|
|
||||||
|
**Tilda** 的独特之处在于它不像一个普通的窗口,相反,你可以使用一个特殊的热键从屏幕的顶部拉下和收回它。
|
||||||
|
另外,Tilda 是高度可配置的,可以自定义绑定热键,改变外观,以及其他许多能够影响 Tilda 特性的选项。
|
||||||
|
|
||||||
|
在 Ubuntu 和 Fedora 上都可以使用包管理器安装 Tilda,当然,你也可以查看它的 [GitHub 仓库][14]。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][5]
|
||||||
|
|
||||||
|
### 3、Guake
|
||||||
|
|
||||||
|
Guake 是一个和 Tilda 或 yakuake 类似的下拉式终端仿真器。如果你知道一些关于 Python、Git 和 GTK 的知识的话,你可以给 Guake 添加一些新的特性。
|
||||||
|
|
||||||
|
Guake 在许多发行版上均可用,所以如果你想安装它,你可以查看你的版本仓库。
|
||||||
|
|
||||||
|
#### 特性浏览
|
||||||
|
|
||||||
|
* 轻量
|
||||||
|
* 简单易用且优雅
|
||||||
|
* 将终端自然地集成到 GUI 之中
|
||||||
|
* 当你使用的时候出现,一旦按下预定义热键便消失(默认情况下是 F12)
|
||||||
|
* 支持Compiz 透明
|
||||||
|
* 多重 Tab
|
||||||
|
* 丰富的调色板
|
||||||
|
* 还有更多……
|
||||||
|
|
||||||
|
主页: [http://guake-project.org/][15]
|
||||||
|
|
||||||
|
### 4、ROXTerm
|
||||||
|
|
||||||
|
如果你正在寻找一个轻量型、高度可定制的终端仿真器,那么 ROXTerm 就是专门为你准备的。这是一个旨在提供和 gnome-terminal 相似特性的终端仿真器,它们都基于相同的 VTE 库。它的最初设计是只占用很小的资源并且能够快速启动,它具有比 gnome-terminal 更强的可配置性,更加针对经常使用终端的 “Power” 用户。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][6]
|
||||||
|
|
||||||
|
[http://roxterm.sourceforge.net/index.php?page=index&lang=en][16]
|
||||||
|
|
||||||
|
### 5、XTerm
|
||||||
|
|
||||||
|
Xterm 是 Linux 和 UNIX 系统上最受欢迎的终端仿真器,因为它是 X 窗口系统的默认终端仿真器,并且很轻量、很简单。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][7]
|
||||||
|
|
||||||
|
### 6、Eterm
|
||||||
|
|
||||||
|
如果你正在寻找一个漂亮、强大的终端仿真器,那么 Eterm 是你最好的选择。Eterm 是一个彩色 vt102 终端仿真器,被当作是 Xterm 的替代品。它按照自由选择的哲学思想进行设计,将尽可能多的权利、灵活性和自由交到用户手中。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][8]
|
||||||
|
|
||||||
|
官网: [http://www.eterm.org/][17]
|
||||||
|
|
||||||
|
### 7、Gnome Terminal
|
||||||
|
|
||||||
|
Gnome Terminal 是最受欢迎的终端仿真器之一,它被许多 Linux 用户使用,因为它默认安装在 Gnome 桌面环境中,而 Gnome 桌面很常用。它有许多特性并且支持大量主题。
|
||||||
|
|
||||||
|
在许多 Linux 发行版中都默认安装有 Gnome Terminal,但你如果没有的话,也可以使用你的包管理器来安装它。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][9]
|
||||||
|
|
||||||
|
### 8、Sakura
|
||||||
|
|
||||||
|
Sakura 是一个基于 GTK 和 VTE 的终端仿真器。它是一个只有很少依赖的终端仿真器,所以你不需要先安装一个完整的 GNOME 桌面才能有一个像样的终端仿真器。
|
||||||
|
|
||||||
|
你可以使用你的包管理器来安装它,因为 Sakura 在绝大多数发行版中都是可用的。
|
||||||
|
|
||||||
|
### 9、LilyTerm
|
||||||
|
|
||||||
|
LilyTerm 是一个基于 libvte 的终端仿真器,旨在快速和轻量,是 GPLv3 授权许可的。
|
||||||
|
|
||||||
|
#### 特性浏览
|
||||||
|
|
||||||
|
* 低资源占用
|
||||||
|
* 多重 Tab
|
||||||
|
* 配色方案丰富
|
||||||
|
* 支持超链接
|
||||||
|
* 支持全屏
|
||||||
|
* 还有更多的……
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][10]
|
||||||
|
|
||||||
|
### 10、Konsole
|
||||||
|
|
||||||
|
如果你是一名 KDE 或 Plasma 用户,那么你一定知道 Konsole,因为它是 KDE 桌面的默认终端仿真器,也是我最喜爱的终端仿真器之一,因为它很舒适易用。
|
||||||
|
|
||||||
|
它在 Ubuntu 和 fedora 上均可用,但如果你在使用 Ubuntu (Unity),那么你需要选择别的终端仿真器,或者你可以考虑使用 Kubuntu 。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][11]
|
||||||
|
|
||||||
|
### 结论
|
||||||
|
|
||||||
|
我们是 Linux 用户,根据自己的需求,可以有许多选择来挑选更好的应用。因此,你可以选择**最好的终端**来满足个人需求,虽然你也可以选择另一个 shell 来满足个人需求,比如你也可以使用 fish shell。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.linuxandubuntu.com/home/10-best-linux-terminals-for-ubuntu-and-fedora
|
||||||
|
|
||||||
|
作者:[Mohd Sohail][a]
|
||||||
|
译者:[ucasFL](https://github.com/ucasFL)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://disqus.com/by/MohdSohail1/
|
||||||
|
[1]:http://www.linuxandubuntu.com/home/terminator-a-linux-terminal-emulator-with-multiple-terminals-in-one-window
|
||||||
|
[2]:http://www.linuxandubuntu.com/home/another-linux-terminal-app-guake
|
||||||
|
[3]:http://www.linuxandubuntu.com/home/10-best-linux-terminals-for-ubuntu-and-fedora
|
||||||
|
[4]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/terminator-linux-terminals_orig.png
|
||||||
|
[5]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/tilda-linux-terminal_orig.png
|
||||||
|
[6]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/roxterm-linux-terminal_orig.png
|
||||||
|
[7]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/xterm-linux-terminal_orig.png
|
||||||
|
[8]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/etern-linux-terminal_orig.jpg
|
||||||
|
[9]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/gnome-terminal_orig.jpg
|
||||||
|
[10]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/lilyterm-linux-terminal_orig.jpg
|
||||||
|
[11]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/konsole-linux-terminal_orig.png
|
||||||
|
[12]:http://www.linuxandubuntu.com/home/10-best-linux-terminals-for-ubuntu-and-fedora
|
||||||
|
[13]:http://www.linuxandubuntu.com/home/10-best-linux-terminals-for-ubuntu-and-fedora#comments
|
||||||
|
[14]:https://github.com/lanoxx/tilda
|
||||||
|
[15]:http://guake-project.org/
|
||||||
|
[16]:http://roxterm.sourceforge.net/index.php?page=index&lang=en
|
||||||
|
[17]:http://www.eterm.org/
|
@ -0,0 +1,149 @@
|
|||||||
|
深入理解 sudo 与 su 之间的区别
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
在[早前的一篇文章][11]中,我们深入讨论了 `sudo` 命令的相关内容。同时,在该文章的末尾有提到相关的命令 `su` 的部分内容。本文,我们将详细讨论关于 `su` 命令与 `sudo` 命令之间的区别。
|
||||||
|
|
||||||
|
在开始之前有必要说明一下,文中所涉及到的示例教程都已经在 Ubuntu 14.04 LTS 上测试通过。
|
||||||
|
|
||||||
|
### Linux su 命令
|
||||||
|
|
||||||
|
`su` 命令的主要作用是让你可以在已登录的会话中切换到另外一个用户。换句话说,这个工具可以让你在不登出当前用户的情况下登录为另外一个用户。
|
||||||
|
|
||||||
|
`su` 命令经常被用于切换到超级用户或 root 用户(因为在命令行下工作,经常需要 root 权限),但是 - 正如前面所提到的 - su 命令也可以用于切换到任意非 root 用户。
|
||||||
|
|
||||||
|
如何使用 `su` 命令切换到 root 用户,如下:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][12]
|
||||||
|
|
||||||
|
如上,`su` 命令要求输入的密码是 root 用户的密码。所以,一般 `su` 命令需要输入目标用户的密码。在输入正确的密码之后,`su` 命令会在终端的当前会话中打开一个子会话。
|
||||||
|
|
||||||
|
#### su -
|
||||||
|
|
||||||
|
还有一种方法可以切换到 root 用户:运行 `su -` 命令,如下:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][13]
|
||||||
|
|
||||||
|
那么,`su` 命令与 `su -` 命令之间有什么区别呢?前者在切换到 root 用户之后仍然保持旧的(或者说原始用户的)环境,而后者则是创建一个新的环境(由 root 用户 `~/.bashrc` 文件所设置的环境),相当于使用 root 用户正常登录(从登录屏幕登录)。
|
||||||
|
|
||||||
|
`su` 命令手册页很清楚地说明了这一点:
|
||||||
|
|
||||||
|
> 可选参数 `-` 可提供的环境为用户在直接登录时的环境。
|
||||||
|
|
||||||
|
因此,你会觉得使用 `su -` 登录更有意义。但是, `su` 命令也是有用的,那么大家可能会想知道它在什么时候用到。以下内容摘自 [ArchLinux wiki 网站][14] - 关于 `su` 命令的好处和坏处:
|
||||||
|
|
||||||
|
* 有的时候,对于系统管理员(root)来讲,使用其他普通用户的 Shell 账户而不是自己的 root Shell 账户更会好一些。尤其是在处理用户问题时,最有效的方法就是是:登录目标用户以便重现以及调试问题。
|
||||||
|
* 然而,在多数情况下,当从普通用户切换到 root 用户进行操作时,如果还使用普通用户的环境变量的话,那是不可取甚至是危险的操作。因为是在无意间切换使用普通用户的环境,所以当使用 root 用户进行程序安装或系统更改时,会产生与正常使用 root 用户进行操作时不相符的结果。例如,以普通用户安装程序会给普通用户意外损坏系统或获取对某些数据的未授权访问的能力。
|
||||||
|
|
||||||
|
注意:如果你想在 `su -` 命令的 `-` 后面传递更多的参数,那么你必须使用 `su -l` 而不是 `su -`。以下是 `-` 和 `-l` 命令行选项的说明:
|
||||||
|
|
||||||
|
> `-`, `-l`, `--login`
|
||||||
|
|
||||||
|
> 提供相当于用户在直接登录时所期望的环境。
|
||||||
|
|
||||||
|
> 当使用 - 时,必须放在 `su` 命令的最后一个选项。其他选项(`-l` 和 `--login`)无此限制。
|
||||||
|
|
||||||
|
#### su -c
|
||||||
|
|
||||||
|
还有一个值得一提的 `su` 命令行选项为:`-c`。该选项允许你提供在切换到目标用户之后要运行的命令。
|
||||||
|
|
||||||
|
`su` 命令手册页是这样说明:
|
||||||
|
|
||||||
|
> `-c`, `--command COMMAND`
|
||||||
|
|
||||||
|
> 使用 `-c` 选项指定由 Shell 调用的命令。
|
||||||
|
|
||||||
|
> 被执行的命令无法控制终端。所以,此选项不能用于执行需要控制 TTY 的交互式程序。
|
||||||
|
|
||||||
|
参考示例:
|
||||||
|
|
||||||
|
```
|
||||||
|
su [target-user] -c [command-to-run]
|
||||||
|
```
|
||||||
|
|
||||||
|
示例中,`command-to-run` 将会被这样执行:
|
||||||
|
|
||||||
|
```
|
||||||
|
[shell] -c [command-to-run]
|
||||||
|
```
|
||||||
|
|
||||||
|
示例中的 `shell` 类型将会被目标用户在 `/etc/passwd` 文件中定义的登录 shell 类型所替代。
|
||||||
|
|
||||||
|
### sudo vs. su
|
||||||
|
|
||||||
|
现在,我们已经讨论了关于 `su` 命令的基础知识,是时候来探讨一下 `sudo` 和 `su` 命令之间的区别了。
|
||||||
|
|
||||||
|
#### 关于密码
|
||||||
|
|
||||||
|
两个命令的最大区别是:`sudo` 命令需要输入当前用户的密码,`su` 命令需要输入 root 用户的密码。
|
||||||
|
|
||||||
|
很明显,就安全而言,`sudo` 命令更好。例如,考虑到需要 root 访问权限的多用户使用的计算机。在这种情况下,使用 `su` 意味着需要与其他用户共享 root 用户密码,这显然不是一种好习惯。
|
||||||
|
|
||||||
|
此外,如果要撤销特定用户的超级用户/root 用户的访问权限,唯一的办法就是更改 root 密码,然后再告知所有其他用户新的 root 密码。
|
||||||
|
|
||||||
|
而使用 `sudo` 命令就不一样了,你可以很好的处理以上的两种情况。鉴于 `sudo` 命令要求输入的是其他用户自己的密码,所以,不需要共享 root 密码。同时,想要阻止特定用户访问 root 权限,只需要调整 `sudoers` 文件中的相应配置即可。
|
||||||
|
|
||||||
|
#### 默认行为
|
||||||
|
|
||||||
|
两个命令之间的另外一个区别是其默认行为。`sudo` 命令只允许使用提升的权限运行单个命令,而 `su` 命令会启动一个新的 shell,同时允许使用 root 权限运行尽可能多的命令,直到明确退出登录。
|
||||||
|
|
||||||
|
因此,`su` 命令的默认行为是有风险的,因为用户很有可能会忘记他们正在以 root 用户身份进行工作,于是,无意中做出了一些不可恢复的更改(例如:对错误的目录运行 `rm -rf` 命令!)。关于为什么不鼓励以 root 用户身份进行工作的详细内容,请参考[这里][10]。
|
||||||
|
|
||||||
|
#### 日志记录
|
||||||
|
|
||||||
|
尽管 `sudo` 命令是以目标用户(默认情况下是 root 用户)的身份执行命令,但是它们会使用 `sudoer` 所配置的用户名来记录是谁执行命令。而 `su` 命令是无法直接跟踪记录用户切换到 root 用户之后执行了什么操作。
|
||||||
|
|
||||||
|
#### 灵活性
|
||||||
|
|
||||||
|
`sudo` 命令比 `su` 命令灵活很多,因为你甚至可以限制 sudo 用户可以访问哪些命令。换句话说,用户通过 `sudo` 命令只能访问他们工作需要的命令。而 `su` 命令让用户有权限做任何事情。
|
||||||
|
|
||||||
|
#### sudo su
|
||||||
|
|
||||||
|
大概是因为使用 `su` 命令或直接以 root 用户身份登录有风险,所以,一些 Linux 发行版(如 Ubuntu)默认禁用 root 用户帐户。鼓励用户在需要 root 权限时使用 `sudo` 命令。
|
||||||
|
|
||||||
|
然而,您还是可以成功执行 `su` 命令,而不用输入 root 用户的密码。运行以下命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo su
|
||||||
|
```
|
||||||
|
|
||||||
|
由于你使用 `sudo` 运行命令,你只需要输入当前用户的密码。所以,一旦完成操作,`su` 命令将会以 root 用户身份运行,这意味着它不会再要求输入任何密码。
|
||||||
|
|
||||||
|
**PS**:如果你想在系统中启用 root 用户帐户(强烈反对,因为你可以使用 `sudo` 命令或 `sudo su` 命令),你必须手动设置 root 用户密码,可以使用以下命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo passwd root
|
||||||
|
```
|
||||||
|
|
||||||
|
### 结论
|
||||||
|
|
||||||
|
当你需要可用的工具来提升(或一组完全不同的)权限来执行任务时,这篇文章以及之前的教程(其中侧重于 `sudo` 命令)应该能给你一个比较好的建议。 如果您也想分享关于 `su` 或 `sudo` 的相关内容或者经验,欢迎您在下方进行评论。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/sudo-vs-su/
|
||||||
|
|
||||||
|
作者:[Himanshu Arora][a]
|
||||||
|
译者:[zhb127](https://github.com/zhb127)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/sudo-vs-su/
|
||||||
|
[1]:https://www.howtoforge.com/tutorial/sudo-vs-su/#su-
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/sudo-vs-su/#su-c
|
||||||
|
[3]:https://www.howtoforge.com/tutorial/sudo-vs-su/#password
|
||||||
|
[4]:https://www.howtoforge.com/tutorial/sudo-vs-su/#default-behavior
|
||||||
|
[5]:https://www.howtoforge.com/tutorial/sudo-vs-su/#logging
|
||||||
|
[6]:https://www.howtoforge.com/tutorial/sudo-vs-su/#flexibility
|
||||||
|
[7]:https://www.howtoforge.com/tutorial/sudo-vs-su/#the-su-command-in-linux
|
||||||
|
[8]:https://www.howtoforge.com/tutorial/sudo-vs-su/#sudo-vs-su
|
||||||
|
[9]:https://www.howtoforge.com/tutorial/sudo-vs-su/#sudo-su
|
||||||
|
[10]:http://askubuntu.com/questions/16178/why-is-it-bad-to-login-as-root
|
||||||
|
[11]:https://www.howtoforge.com/tutorial/sudo-beginners-guide/
|
||||||
|
[12]:https://www.howtoforge.com/images/sudo-vs-su/big/su-command.png
|
||||||
|
[13]:https://www.howtoforge.com/images/sudo-vs-su/big/su-hyphen-command.png
|
||||||
|
[14]:https://wiki.archlinux.org/index.php/Su
|
@ -0,0 +1,275 @@
|
|||||||
|
Samba 系列(七):在 Samba AD DC 服务器上创建共享目录并映射到 Windows/Linux 客户机
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
这篇文章将指导你如何在 Samba AD DC 服务器上创建共享目录,然后通过 GPO 把共享目录挂载到域中的其它 Windows 成员机,并且从 Windows 域控的角度来管理共享权限。
|
||||||
|
|
||||||
|
这篇文章也包括在加入域的 Linux 机器上如何使用 Samba4 域帐号来访问及挂载共享文件。
|
||||||
|
|
||||||
|
### 需求:
|
||||||
|
|
||||||
|
1. [在 Ubuntu 系统上使用 Samba4 创建活动目录架构][1]
|
||||||
|
|
||||||
|
### 第一步:创建 Samba 文件共享
|
||||||
|
|
||||||
|
1、在 Samba AD DC 服务器上创建共享非常简单。首先创建一个你想通过 SMB 协议来分享文件的目录,然后添加下面的文件系统权限,这是为了让 Windows AD DC 管理员给 Windows 客户端分配相应的共享权限。
|
||||||
|
|
||||||
|
假设在 AD DC 服务器上有一个新的共享目录 '/nas' ,执行下面的命令来授予必要的权限。
|
||||||
|
|
||||||
|
```
|
||||||
|
# mkdir /nas
|
||||||
|
# chmod -R 775 /nas
|
||||||
|
# chown -R root:"domain users" /nas
|
||||||
|
# ls -alh | grep nas
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][2]
|
||||||
|
|
||||||
|
*创建 Samba 共享目录*
|
||||||
|
|
||||||
|
2、当你在 Samba4 AD DC 服务器上创建完成共享目录之后,你还得修改 samba 配置文件,添加下面的参数以允许通过 SMB 协议来共享文件。
|
||||||
|
|
||||||
|
```
|
||||||
|
# nano /etc/samba/smb.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
在配置文件末尾添加以下内容:
|
||||||
|
|
||||||
|
```
|
||||||
|
[nas]
|
||||||
|
path = /nas
|
||||||
|
read only = no
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][3]
|
||||||
|
|
||||||
|
*配置 Samba 共享目录*
|
||||||
|
|
||||||
|
3、最后,你需要通过下面的命令重启 Samba AD DC 服务,以让修改的配置生效:
|
||||||
|
|
||||||
|
```
|
||||||
|
# systemctl restart samba-ad-dc.service
|
||||||
|
```
|
||||||
|
|
||||||
|
### 第二步:管理 Samba 共享权限
|
||||||
|
|
||||||
|
4、我们准备使用在 Samba AD DC 服务器上创建的域帐号(包括用户和组)来访问这个共享目录(禁止 Linux 系统用户访问共享目录)。
|
||||||
|
|
||||||
|
可以直接通过 Windows 资源管理器来完成 Samba 共享权限的管理,就跟你在 Windows 资源管理器中设置其它文件夹权限的方法一样。
|
||||||
|
|
||||||
|
首先,使用具有管理员权限的 Samba4 AD 域帐号登录到 Windows 机器。然而在 Windows 机器上的资源管理器中输入双斜杠和 Samba AD DC 服务器的 IP 地址或主机名或者是 FQDN 来访问共享文件和设置权限。
|
||||||
|
|
||||||
|
```
|
||||||
|
\\adc1
|
||||||
|
或
|
||||||
|
\\192.168.1.254
|
||||||
|
或
|
||||||
|
\\adc1.tecmint.lan
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][4]
|
||||||
|
|
||||||
|
*从 Windows 机器访问 Samba 共享目录*
|
||||||
|
|
||||||
|
5、右键单击共享文件,选择属性来设置权限。打开安全选项卡,依次修改域账号和组权限。使用高级选项来调整权限。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][5]
|
||||||
|
|
||||||
|
*配置 Samba 共享目录权限*
|
||||||
|
|
||||||
|
可参考下面的截图来为指定 Samba AD DC 认证用户设置权限。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][6]
|
||||||
|
|
||||||
|
*设置 Samba 共享目录用户权限*
|
||||||
|
|
||||||
|
6、你也可以使用其它方法来设置共享权限,打开计算机管理-->连接到另外一台计算机。
|
||||||
|
|
||||||
|
找到共享目录,右键单击你想修改权限的目录,选择属性,打开安全选项卡。你可以在这里修改任何权限,就跟上图的修改共享文件夹权限的方法一样。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][7]
|
||||||
|
|
||||||
|
*连接到 Samba 共享目录服务器*
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][8]
|
||||||
|
|
||||||
|
*管理 Samba 共享目录属性*
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][9]
|
||||||
|
|
||||||
|
*为域用户授予共享目录权限*
|
||||||
|
|
||||||
|
### 第三步:通过 GPO 来映射 Samba 文件共享
|
||||||
|
|
||||||
|
7、要想通过域组策略来挂载 Samba 共享的目录,你得先到一台[已安装了 RSAT 工具][10] 的服务器上,打开 AD DC 工具,右键单击域名,选择新建-->共享文件夹。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][11]
|
||||||
|
|
||||||
|
*映射 Samba 共享文件夹*
|
||||||
|
|
||||||
|
8、为共享文件夹添加一个名字,然后输入共享文件夹的网络路径,如下图所示。完成后单击 OK 按钮,你就可以在右侧看到文件夹了。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][12]
|
||||||
|
|
||||||
|
*设置 Samba 共享文件夹名称及路径*
|
||||||
|
|
||||||
|
9、下一步,打开组策略管理控制台,找到当前域的默认域策略脚本,然后打开并编辑该文件。
|
||||||
|
|
||||||
|
在 GPM 编辑器界面,打开 GPM 编辑器,找到用户配置 --> 首选项 --> Windows 设置,然而右键单击驱动器映射,选择新建 --> 映射驱动。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][13]
|
||||||
|
|
||||||
|
*在 Windows 机器上映射 Samba 共享文件夹*
|
||||||
|
|
||||||
|
10、通过单击右边的三个小点,在新窗口中查询并添加共享目录的网络位置,勾选重新连接复选框,为该目录添加一个标签,选择驱动盘符,然后单击 OK 按钮来保存和应用配置。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][14]
|
||||||
|
|
||||||
|
*配置 Samba 共享目录的网络位置*
|
||||||
|
|
||||||
|
11、最后,为了在本地机器上强制应用 GPO 更改而不重启系统,打开命令行提示符,然而执行下面的命令。
|
||||||
|
|
||||||
|
```
|
||||||
|
gpupdate /force
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][15]
|
||||||
|
|
||||||
|
*应用 GPO 更改*
|
||||||
|
|
||||||
|
12、当你在本地机器上成功应用策略后,打开 Windows 资源管理器,你就可以看到并访问共享的网络文件夹了,能否正常访问共享目录取决于你在前一步的授权操作。
|
||||||
|
|
||||||
|
如果没有在命令行下强制应用组策略,你网络中的其它客户机需要重启或重新登录系统才可以看到共享目录。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][16]
|
||||||
|
|
||||||
|
*Windows 机器上挂载的 Samba 网络磁盘*
|
||||||
|
|
||||||
|
### 第四步:从 Linux 客户端访问 Samba 共享目录
|
||||||
|
|
||||||
|
13、已加入 Samba AD DC 中的 Linux 成员机上的系统用户也可以可以使用 Samba 帐号访问或在本地挂载共享目录。
|
||||||
|
|
||||||
|
首先,你得通过下面的命令来确保 Samba 客户端和工具已经安装完成。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo apt-get install smbclient cifs-utils
|
||||||
|
```
|
||||||
|
|
||||||
|
14、为了列出域环境中的共享目录,你可以通过下面的命令加入指定的域控服务器主机名来查询:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ smbclient –L your_domain_controller –U%
|
||||||
|
或
|
||||||
|
$ smbclient –L \\adc1 –U%
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][17]
|
||||||
|
|
||||||
|
*在 Linux 机器上列出 Samba 共享目录*
|
||||||
|
|
||||||
|
15、在命令行下使用域帐号以交互试方式连接到 Samba 共享目录:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo smbclient //adc/share_name -U domain_user
|
||||||
|
```
|
||||||
|
|
||||||
|
在命令行下,你可以列出共享目录内容,下载或上传文件到共享目录,或者执行其它操作。使用 `?` 来查询所有可用的 smbclient 命令。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][18]
|
||||||
|
|
||||||
|
*在 Linux 机器上连接 Samba 共享目录*
|
||||||
|
|
||||||
|
16、在 Linux 机器上使用下面的命令来挂载 samba 共享目录。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo mount //adc/share_name /mnt -o username=domain_user
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][19]
|
||||||
|
|
||||||
|
*在 Linux 机器上挂载 samba 共享目录*
|
||||||
|
|
||||||
|
根据实际情况,依次替换主机名、共享目录名、挂载点和域帐号。使用 `mount` 命令加上管道符和 `grep` 命令来过滤出 cifs 类型的文件系统。
|
||||||
|
|
||||||
|
通过上面的测试,我们可以看出,在 Samba4 AD DC 服务器上配置共享目录仅使用 Windows 访问控制列表( ACL ),而不是 POSIX ACL 。
|
||||||
|
|
||||||
|
通过文件共享把 Samba 配置为域成员以使用其它网络共享功能。同时,在另一个域控制器上[配置 Windbindd 服务][20] ——在你开始发起网络共享文件之前。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
我是一个电脑迷,开源 Linux 系统和软件爱好者,有 4 年多的 Linux 桌面、服务器系统使用和 Base 编程经验。
|
||||||
|
|
||||||
|
译者简介:
|
||||||
|
|
||||||
|
春城初春/春水初生/春林初盛/春風十裏不如妳
|
||||||
|
[rusking](https://github.com/rusking)
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/create-shared-directory-on-samba-ad-dc-and-map-to-windows-linux/
|
||||||
|
|
||||||
|
作者:[Matei Cezar][a]
|
||||||
|
译者:[rusking](https://github.com/rusking)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.tecmint.com/author/cezarmatei/
|
||||||
|
|
||||||
|
[1]:http://www.tecmint.com/install-samba4-active-directory-ubuntu/
|
||||||
|
[2]:http://www.tecmint.com/wp-content/uploads/2017/02/Create-Samba-Shared-Directory.png
|
||||||
|
[3]:http://www.tecmint.com/wp-content/uploads/2017/02/Configure-Samba-Shared-Directory.png
|
||||||
|
[4]:http://www.tecmint.com/wp-content/uploads/2017/02/Access-Samba-Share-Directory-from-Windows.png
|
||||||
|
[5]:http://www.tecmint.com/wp-content/uploads/2017/02/Configure-Samba-Share-Directory-Permissions.png
|
||||||
|
[6]:http://www.tecmint.com/wp-content/uploads/2017/02/Manage-Samba-Share-Directory-User-Permissions.png
|
||||||
|
[7]:http://www.tecmint.com/wp-content/uploads/2017/02/Connect-to-Samba-Share-Directory-Machine.png
|
||||||
|
[8]:http://www.tecmint.com/wp-content/uploads/2017/02/Manage-Samba-Share-Directory-Properties.png
|
||||||
|
[9]:http://www.tecmint.com/wp-content/uploads/2017/02/Assign-Samba-Share-Directory-Permissions-to-Users.png
|
||||||
|
[10]:https://linux.cn/article-8097-1.html
|
||||||
|
[11]:http://www.tecmint.com/wp-content/uploads/2017/02/Map-Samba-Share-Folder.png
|
||||||
|
[12]:http://www.tecmint.com/wp-content/uploads/2017/02/Set-Samba-Shared-Folder-Name-Location.png
|
||||||
|
[13]:http://www.tecmint.com/wp-content/uploads/2017/02/Map-Samba-Share-Folder-in-Windows.png
|
||||||
|
[14]:http://www.tecmint.com/wp-content/uploads/2017/02/Configure-Network-Location-for-Samba-Share-Directory.png
|
||||||
|
[15]:http://www.tecmint.com/wp-content/uploads/2017/02/Apply-GPO-Changes.png
|
||||||
|
[16]:http://www.tecmint.com/wp-content/uploads/2017/02/Samba-Shared-Network-Volume-on-Windows.png
|
||||||
|
[17]:http://www.tecmint.com/wp-content/uploads/2017/02/List-Samba-Share-Directory-in-Linux.png
|
||||||
|
[18]:http://www.tecmint.com/wp-content/uploads/2017/02/Connect-Samba-Share-Directory-in-Linux.png
|
||||||
|
[19]:http://www.tecmint.com/wp-content/uploads/2017/02/Mount-Samba-Share-Directory-in-Linux.png
|
||||||
|
[20]:https://linux.cn/article-8070-1.html
|
||||||
|
[21]:http://www.tecmint.com/author/cezarmatei/
|
||||||
|
[22]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
|
||||||
|
[23]:http://www.tecmint.com/free-linux-shell-scripting-books/
|
@ -0,0 +1,137 @@
|
|||||||
|
微软 Office 在线版变得更好 - 在 Linux 上亦然
|
||||||
|
=============
|
||||||
|
|
||||||
|
对于 linux 用户,影响 linux 使用体验的主要因素之一便是缺少微软 Office 套装。如果你非得靠 Office 谋生,而它被绝大多数人使用,你可能不能承受使用开源产品的代价。理解矛盾之所在了吗?
|
||||||
|
|
||||||
|
的确, LibreOffice 是一个 [很棒的][1] 自由程序,但如果你的客户、顾客或老板需要 Word 和 Excel 文件呢? 你确定能 [承担任何][2] 将这些文件从 ODT 或别的格式转换到 DOCX 之类时的失误、错误或小问题吗, 反之亦然。这是一系列难办的问题。 不幸的是,在技术在层面上对大多数人而言,Linux 超出了能力范围。当然,这不是绝对。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 加入微软 Office 在线, 加入 Linux
|
||||||
|
|
||||||
|
众所周知,微软拥有自己的 Office 云服务多年。通过任何现代浏览器都可以使用使得它很棒且具有意义,并且这意味着在 Linux 上也能使用!我前阵子刚测试了这个[方法][3]并且它表现出色。我能够轻松使用这个产品,以原本的格式保存文件,或是转换为我的 ODF 格式,这真的很棒。
|
||||||
|
|
||||||
|
我决定再次使用这个套装看看它在过去几年的进步以及是否依旧对 Linux 友好。我使用 [Fedora 25][4] 作为例子。我同时也去测试了 [SoftMaker Office 2016][5]。 听起来有趣,也确实如此。
|
||||||
|
|
||||||
|
### 第一印象
|
||||||
|
|
||||||
|
我得说,我感到很高兴。Office 不需要任何特别的插件。没有 Silverlight 或 Flash 之类的东西。 单纯而大量的 HTML 和 Javascript 。 同时,交互界面反应极其迅速。唯一我不喜欢的就是 Word 文档的灰色背景,它让人很快感到疲劳。除了这个,整个套装工作流畅,没有延迟、行为古怪之处及意料之外的错误。接下来让我们放慢脚步。
|
||||||
|
|
||||||
|
这个套装需要你用在线账户或者手机号登录——不必是 Live 或 Hotmail 邮箱。任何邮箱都可以。如果你有微软 [手机][6], 那么你可以用相同的账户并且可以同步你的数据。账户也会免费分配 5GB OneDrive 的储存空间。这很有条理,不是优秀或令人超级兴奋而是非常得当。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
你可以使用各种各样的程序,包括必需的三件套 - Word、Excel 和 Powerpoint,并且其它的东西也可使用,包括一些新奇事物。文档会自动保存,但你也可以下载副本并转换成其它格式,比如 PDF 和 ODF。
|
||||||
|
|
||||||
|
对我来说这简直完美。分享一个自己的小故事。我用 LibreOffice 写一本 [奇幻类的][7]书,之后当我需要将它们送去出版社编辑或者校对,我需要把它们转换成 DOCX 格式。唉,这需要微软 office。从我的 [Linux 问题解决大全][8]得知,我得一开始就使用 Word,因为有一堆工作要与我的编辑合作完成,而他们使用专有软件。没有任何情面可讲,只有出于对冷酷的金钱和商业的考量。错误是不容许接受的。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
使用 Office 在线版能给很多偶尔需要使用的人以自由空间。偶尔使用 Word、Excel 等,不需要购买整个完整的套装。如果你表面上是 LibreOffice 的忠实粉丝,你也可以暗地里“加入微软 Office 负心者俱乐部”而不必感到愧疚。有人传给你一个 Word 或 PPT 文件,你可以上传然后在线操作它们,然后转换成所需要的。这样的话你就可以在线生成你的工作,发送给那些严格要求的人,同时自己留一个 ODF 格式的备份,有需要的话就用 LibreOffice 操作。虽然这种方法的灵活性很是实用,但这不应该成为你的主要手段。对于 Linux 用户,这给予了很多他们平时所没有的自由,毕竟即使你想用微软 Office 也不好安装。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 特性、选项、工具
|
||||||
|
|
||||||
|
我开始琢磨一个文档——考虑到这其中各种细枝末节。写点文本,用一种或三种风格,链接某些文本,嵌入图片,加上脚注,评论自己的文章甚至作为一个多重人格的极客巧妙地回复自己的评论。
|
||||||
|
|
||||||
|
除了灰色背景——我们得学会很好地完成一项无趣工作,即便是像臭鼬工厂那样的工作方式,因为浏览器里没有选项调整背景颜色——其实也还好啦。
|
||||||
|
|
||||||
|
Skype 甚至也整合到了其中,你可以边沟通边协作,或者在协作中倾听。其色调相当一致。鼠标右键可以选择一些快捷操作,包括链接、评论和翻译。不过需要改进的地方还有不少,它并没有给我想要的,翻译有差错。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
你也可以加入图片——包括默认嵌入的必应搜索可以基于它们的许可证和分发权来筛选图片。这很棒,特别是当你想要创作文档而又想避免版权纷争时。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 关于追踪多说几句
|
||||||
|
|
||||||
|
说老实话,很实用。这个产品基于在线使用使得默认情况下可以跟踪更改和编辑,所以你就有了基本的版本控制功能。不过如果直接关闭而不保存的话,阶段性的编辑会遗失。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
看到一个错误——如果你试着在 Linux 上(本地)编辑 Word 或 Excel 文件,会被提示你很调皮,因为这明显是个不支持的操作。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Excel
|
||||||
|
|
||||||
|
实际工作流程不止使用 Word。我也使用 Excel,众所周知,它包含了很多整齐有效的模板之类的。好用而且在更新单元格和公式时没有任何延迟,它涵盖了你所需要的大多数功能。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### OneDrive
|
||||||
|
|
||||||
|
在这里你可以新建文件夹和文件、移动文件、给你的朋友(如果你需要的话)和同事们分享文件。5 GB 免费,当然,收费增容。总的来说,做的不错。在更新和展示内容上会花费一定时间。打开了的文档不能被删除,这可能看起来像一个漏洞,但从计算机角度来看是完美的体验。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 帮助
|
||||||
|
|
||||||
|
如果你感到疑惑——比如被人工智能戏耍,可以向微软的云智囊团寻求帮助。 虽然这种方式不那么直接,但至少好用,结果往往也能令人满意。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 问题
|
||||||
|
|
||||||
|
在我三个小时的摸索中,我只遇到了两个小问题。一是文件编辑的时候浏览器会有警告(黄色三角),提醒我在 HTTPS 会话中加载了不安全的元素。二是创建 Excel 文件失败,只出现过一次。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 结论
|
||||||
|
|
||||||
|
微软 Office 在线版是一个优秀的产品,与我两年前测试相比较,它变得更好了。外观出色,表现良好,使用期间错误很少,完美兼容,甚至对于 Linux 用户,使之具有个人意义和商业价值。我不能说它是自 VHS (Video Home System,家用录像系统)出现以来最好的东西,但一定是很棒的,它架起了 Linux 用户与微软 Office 之间的桥梁,解决了 Linux 用户长期以来的问题,方便且很好的支持 ODF 。
|
||||||
|
|
||||||
|
现在我们来让事情变得更有趣些,如果你喜欢云概念的事物,那你可能对 [Open365][9] 感兴趣,这是一个基于 LibreOfiice 的办公软件,加上额外的邮件客户端和图像处理软件,还有 20 GB 的免费存储空间。最重要的是,你可以用浏览器同时完成这一切,只需要多开几个窗口。
|
||||||
|
|
||||||
|
回到微软,如果你是 Linux 用户,如今可能确实需要微软 Office 产品。在线 Office 套装无疑是更方便的使用方法——或者至少不需要更改操作系统。它免费、优雅、透明度高。值得一提的是,你可以把思维游戏放在一边,享受你的云端生活。
|
||||||
|
|
||||||
|
干杯~
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
我的名字是 Igor Ljubuncic. 38 岁左右,已婚未育。现在是一家云技术公司的首席工程师,这是一个新的领域。到 2015 年初之前,我作为团队中的一名系统工程师就职于世界上最大的信息技术公司之一,开发新的 Linux 解决方案、完善内核、研究 linux。在这之前,我是创新设计团队的技术指导,致力于高性能计算环境的创新解决方案。还有一些像系统专家、系统程序员之类的新奇的名字。这些全是我的爱好,直到 2008 年,变成了工作,还有什么能比这更令人满意呢?
|
||||||
|
|
||||||
|
从 2004 到 2008,我作为物理学家在医学影像行业谋生。我专攻解决问题和发展算法,后来大量使用 Matlab 处理信号和图像。另外我考了很多工程计算方法的认证,包括 MEDIC Six Sigma Green Belt,实验设计和数据化工程。
|
||||||
|
|
||||||
|
我也开始写书,包括奇幻类和 Linux 上的技术性工作。彼此交融。
|
||||||
|
|
||||||
|
|
||||||
|
-------------
|
||||||
|
|
||||||
|
|
||||||
|
via: http://www.dedoimedo.com/computers/office-online-linux-better.html
|
||||||
|
|
||||||
|
作者:[Igor Ljubuncic][a]
|
||||||
|
译者:[XYenChi](https://github.com/XYenChi)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.dedoimedo.com/faq.html
|
||||||
|
|
||||||
|
[1]:http://www.ocsmag.com/2015/02/16/libreoffice-4-4-review-finally-it-rocks/
|
||||||
|
[2]:http://www.ocsmag.com/2014/03/14/libreoffice-vs-microsoft-office-part-deux/
|
||||||
|
[3]:http://www.dedoimedo.com/computers/office-online-linux.html
|
||||||
|
[4]:http://www.dedoimedo.com/computers/fedora-25-gnome.html
|
||||||
|
[5]:http://www.ocsmag.com/2017/01/18/softmaker-office-2016-your-alternative-to-libreoffice/
|
||||||
|
[6]:http://www.dedoimedo.com/computers/microsoft-lumia-640.html
|
||||||
|
[7]:http://www.thelostwordsbooks.com/
|
||||||
|
[8]:http://www.dedoimedo.com/computers/linux-problem-solving-book.html
|
||||||
|
[9]:http://www.ocsmag.com/2016/08/17/open365/
|
@ -0,0 +1,172 @@
|
|||||||
|
看漫画学 SELinux 强制策略
|
||||||
|
============================================================
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
>图像来自: opensource.com
|
||||||
|
|
||||||
|
今年是我们一起庆祝 SELinux 纪念日的第十个年头了(LCTT 译者注:本文发表于 2013 年)。真是太难以置信了!SELinux 最初在 Fedora Core 3 中被引入,随后加入了红帽企业版 Linux 4。从来没有使用过 SELinux 的家伙,你可要好好儿找个理由了……
|
||||||
|
|
||||||
|
SElinux 是一个标签型系统。每一个进程都有一个标签。操作系统中的每一个文件/目录客体(object)也都有一个标签。甚至连网络端口、设备,乃至潜在的主机名都被分配了标签。我们把控制访问进程的标签的规则写入一个类似文件的客体标签中,这些规则我们称之为策略(policy)。内核强制实施了这些规则。有时候这种“强制”被称为强制访问控制体系(Mandatory Access Control)(MAC)。
|
||||||
|
|
||||||
|
一个客体的拥有者对客体的安全属性并没有自主权。标准 Linux 访问控制体系,拥有者/分组 + 权限标志如 rwx,常常被称作自主访问控制(Discretionary Access Control)(DAC)。SELinux 没有文件 UID 或拥有权的概念。一切都被标签控制,这意味着在没有至高无上的 root 权限进程时,也可以设置 SELinux 系统。
|
||||||
|
|
||||||
|
**注意:** _SELinux不允许你摒弃 DAC 控制。SELinux 是一个并行的强制模型。一个应用必须同时支持 SELinux 和 DAC 来完成特定的行为。这可能会导致管理员迷惑为什么进程被拒绝访问。管理员被拒绝访问是因为在 DAC 中有些问题,而不是在 SELinux 标签。
|
||||||
|
|
||||||
|
### 类型强制
|
||||||
|
|
||||||
|
让我们更深入的研究下标签。SELinux 最主要的“模型”或“强制”叫做类型强制(type enforcement)。基本上这意味着我们根据进程的类型来定义其标签,以及根据文件系统客体的类型来定义其标签。
|
||||||
|
|
||||||
|
_打个比方_
|
||||||
|
|
||||||
|
想象一下在一个系统里定义客体的类型为猫和狗。猫(CAT)和狗(DOG)都是进程类型(process type)。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
我们有一类希望能与之交互的客体,我们称之为食物。而我希望能够为食物增加类型:`cat_food` (猫的食物)和 `dog_food`(狗的食物)。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
作为一个策略制定者,我可以说一只狗有权限去吃狗粮(`dog_chow`),而一只猫有权限去吃猫粮(`cat_chow`)。在 SELinux 中我可以将这条规则写入策略中。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
`allow cat cat_chow:food eat;`
|
||||||
|
|
||||||
|
`允许 猫 猫粮:食物 吃;`
|
||||||
|
|
||||||
|
`allow dog dog_chow:food eat;`
|
||||||
|
|
||||||
|
`允许 狗 狗粮:食物 吃;`
|
||||||
|
|
||||||
|
有了这些规则,内核会允许猫进程去吃打上猫粮标签 `cat_chow` 的食物,允许狗去吃打上狗粮标签 `dog_chow` 的食物。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
此外,在 SELinux 系统中,由于禁止是默认规则,这意味着,如果狗进程想要去吃猫粮 `cat_chow`,内核会阻止它。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
同理,猫也不允许去接触狗粮。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
_现实例子_
|
||||||
|
|
||||||
|
我们将 Apache 进程标为 `httpd_t`,将 Apache 上下文标为 `httpd_sys_content_t` 和 `httpdsys_content_rw_t`。假设我们把信用卡数据存储在 MySQL 数据库中,其标签为 `msyqld_data_t`。如果一个 Apache 进程被劫持,黑客可以获得 `httpd_t` 进程的控制权,从而能够去读取 `httpd_sys_content_t` 文件并向 `httpd_sys_content_rw_t` 文件执行写操作。但是黑客却不允许去读信用卡数据(`mysqld_data_t`),即使 Apache 进程是在 root 下运行。在这种情况下 SELinux 减轻了这次闯入的后果。
|
||||||
|
|
||||||
|
### 多类别安全强制
|
||||||
|
|
||||||
|
_打个比方_
|
||||||
|
|
||||||
|
上面我们定义了狗进程和猫进程,但是如果你有多个狗进程:Fido 和 Spot,而你想要阻止 Fido 去吃 Spot 的狗粮 `dog_chow` 怎么办呢?
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
一个解决方式是创建大量的新类型,如 `Fido_dog` 和 `Fido_dog_chow`。但是这很快会变得难以驾驭因为所有的狗都有差不多相同的权限。
|
||||||
|
|
||||||
|
为了解决这个问题我们发明了一种新的强制形式,叫做多类别安全(Multi Category Security)(MCS)。在 MCS 中,我们在狗进程和狗粮的标签上增加了另外一部分标签。现在我们将狗进程标记为 `dog:random1(Fido)` 和 `dog:random2(Spot)`。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
我们将狗粮标记为 `dog_chow:random1(Fido)` 和 `dog_chow:random2(Spot)`。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
MCS 规则声明如果类型强制规则被遵守而且该 MCS 随机标签正确匹配,则访问是允许的,否则就会被拒绝。
|
||||||
|
|
||||||
|
Fido (`dog:random1`) 尝试去吃 `cat_chow:food` 被类型强制拒绝了。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Fido (`dog:random1`) 允许去吃 `dog_chow:random1`。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Fido (`dog:random1`) 去吃 spot(`dog_chow:random2`)的食物被拒绝。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
_现实例子_
|
||||||
|
|
||||||
|
在计算机系统中我们经常有很多具有同样访问权限的进程,但是我们又希望它们各自独立。有时我们称之为多租户环境(multi-tenant environment)。最好的例子就是虚拟机。如果我有一个运行很多虚拟机的服务器,而其中一个被劫持,我希望能够阻止它去攻击其它虚拟机和虚拟机镜像。但是在一个类型强制系统中 KVM 虚拟机被标记为 `svirt_t` 而镜像被标记为 `svirt_image_t`。 我们允许 `svirt_t` 可以读/写/删除标记为 `svirt_image_t` 的上下文。通过使用 libvirt 我们不仅实现了类型强制隔离,而且实现了 MCS 隔离。当 libvirt 将要启动一个虚拟机时,它会挑选出一个 MCS 随机标签如 `s0:c1,c2`,接着它会将 `svirt_image_t:s0:c1,c2` 标签分发给虚拟机需要去操作的所有上下文。最终,虚拟机以 `svirt_t:s0:c1,c2` 为标签启动。因此,SELinux 内核控制 `svirt_t:s0:c1,c2` 不允许写向 `svirt_image_t:s0:c3,c4`,即使虚拟机被一个黑客劫持并接管,即使它是运行在 root 下。
|
||||||
|
|
||||||
|
我们在 OpenShift 中使用[类似的隔离策略][8]。每一个 gear(user/app process)都有相同的 SELinux 类型(`openshift_t`)(LCTT 译注:gear 为 OpenShift 的计量单位)。策略定义的规则控制着 gear 类型的访问权限,而一个独一无二的 MCS 标签确保了一个 gear 不能影响其他 gear。
|
||||||
|
|
||||||
|
请观看[这个短视频][9]来看 OpenShift gear 切换到 root 会发生什么。
|
||||||
|
|
||||||
|
### 多级别安全强制
|
||||||
|
|
||||||
|
另外一种不经常使用的 SELinux 强制形式叫做多级别安全(Multi Level Security)(MLS);它开发于上世纪 60 年代,并且主要使用在受信操作系统上如 Trusted Solaris。
|
||||||
|
|
||||||
|
其核心观点就是通过进程使用的数据等级来控制进程。一个 _secret_ 进程不能读取 _top secret_ 数据。
|
||||||
|
|
||||||
|
MLS 很像 MCS,除了它在强制策略中增加了支配的概念。MCS 标签必须完全匹配,但一个 MLS 标签可以支配另一个 MLS 标签并且获得访问。
|
||||||
|
|
||||||
|
_打个比方_
|
||||||
|
|
||||||
|
不讨论不同名字的狗,我们现在来看不同种类。我们现在有一只格雷伊猎犬和一只吉娃娃。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
我们可能想要允许格雷伊猎犬去吃任何狗粮,但是吉娃娃如果尝试去吃格雷伊猎犬的狗粮可能会被呛到。
|
||||||
|
|
||||||
|
我们把格雷伊猎犬标记为 `dog:Greyhound`,把它的狗粮标记为 `dog_chow:Greyhound`,把吉娃娃标记为 `dog:Chihuahua`,把它的狗粮标记为 `dog_chow:Chihuahua`。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
使用 MLS 策略,我们可以使 MLS 格雷伊猎犬标签支配吉娃娃标签。这意味着 `dog:Greyhound` 允许去吃 `dog_chow:Greyhound` 和 `dog_chow:Chihuahua`。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
但是 `dog:Chihuahua` 不允许去吃 `dog_chow:Greyhound`。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
当然,由于类型强制, `dog:Greyhound` 和 `dog:Chihuahua` 仍然不允许去吃 `cat_chow:Siamese`,即使 MLS 类型 GreyHound 支配 Siamese。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
_现实例子_
|
||||||
|
|
||||||
|
有两个 Apache 服务器:一个以 `httpd_t:TopSecret` 运行,一个以 `httpd_t:Secret` 运行。如果 Apache 进程 `httpd_t:Secret` 被劫持,黑客可以读取 `httpd_sys_content_t:Secret` 但会被禁止读取 `httpd_sys_content_t:TopSecret`。
|
||||||
|
|
||||||
|
但是如果运行 `httpd_t:TopSecret` 的 Apache 进程被劫持,它可以读取 `httpd_sys_content_t:Secret` 数据和 `httpd_sys_content_t:TopSecret` 数据。
|
||||||
|
|
||||||
|
我们在军事系统上使用 MLS,一个用户可能被允许读取 _secret_ 数据,但是另一个用户在同一个系统上可以读取 _top secret_ 数据。
|
||||||
|
|
||||||
|
### 结论
|
||||||
|
|
||||||
|
SELinux 是一个功能强大的标签系统,控制着内核授予每个进程的访问权限。最主要的特性是类型强制,策略规则定义的进程访问权限基于进程被标记的类型和客体被标记的类型。也引入了另外两个控制手段,分离有着同样类型进程的叫做 MCS,而 MLS,则允许进程间存在支配等级。
|
||||||
|
|
||||||
|
_*所有的漫画都来自 [Máirín Duffy][6]_
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Daniel J Walsh - Daniel Walsh 已经在计算机安全领域工作了将近 30 年。Daniel 与 2001 年 8 月加入红帽。
|
||||||
|
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
via: https://opensource.com/business/13/11/selinux-policy-guide
|
||||||
|
|
||||||
|
作者:[Daniel J Walsh][a]
|
||||||
|
译者:[xiaow6](https://github.com/xiaow6)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://opensource.com/users/rhatdan
|
||||||
|
[1]:https://opensource.com/resources/what-is-linux?src=linux_resource_menu
|
||||||
|
[2]:https://opensource.com/resources/what-are-linux-containers?src=linux_resource_menu
|
||||||
|
[3]:https://opensource.com/article/16/11/managing-devices-linux?src=linux_resource_menu
|
||||||
|
[4]:https://developers.redhat.com/promotions/linux-cheatsheet/?intcmp=7016000000127cYAAQ
|
||||||
|
[5]:https://opensource.com/tags/linux?src=linux_resource_menu
|
||||||
|
[6]:https://opensource.com/users/mairin
|
||||||
|
[7]:https://opensource.com/business/13/11/selinux-policy-guide?rate=XNCbBUJpG2rjpCoRumnDzQw-VsLWBEh-9G2hdHyB31I
|
||||||
|
[8]:http://people.fedoraproject.org/~dwalsh/SELinux/Presentations/openshift_selinux.ogv
|
||||||
|
[9]:http://people.fedoraproject.org/~dwalsh/SELinux/Presentations/openshift_selinux.ogv
|
||||||
|
[10]:https://opensource.com/user/16673/feed
|
||||||
|
[11]:https://opensource.com/business/13/11/selinux-policy-guide#comments
|
||||||
|
[12]:https://opensource.com/users/rhatdan
|
@ -0,0 +1,107 @@
|
|||||||
|
为什么(大多数)高级语言运行效率较慢
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
在近一两个月中,我多次的和线上线下的朋友讨论了这个话题,所以我干脆直接把它写在博客中,以便以后查阅。
|
||||||
|
|
||||||
|
大部分高级语言运行效率较慢的原因通常有两点:
|
||||||
|
|
||||||
|
1. 没有很好的利用缓存;
|
||||||
|
2. 垃圾回收机制性能消耗高。
|
||||||
|
|
||||||
|
但事实上,这两个原因可以归因于:高级语言强烈地鼓励编程人员分配很多的内存。
|
||||||
|
|
||||||
|
首先,下文内容主要讨论客户端应用。如果你的程序有 99.9% 的时间都在等待网络 I/O,那么这很可能不是拖慢语言运行效率的原因——优先考虑的问题当然是优化网络。在本文中,我们主要讨论程序在本地执行的速度。
|
||||||
|
|
||||||
|
我将选用 C# 语言作为本文的参考语言,其原因有二:首先它是我常用的高级语言;其次如果我使用 Java 语言,许多使用 C# 的朋友会告诉我 C# 不会有这些问题,因为它有值类型(但这是错误的)。
|
||||||
|
|
||||||
|
接下来我将会讨论,出于编程习惯编写的代码、使用普遍编程方法(with the grain)的代码或使用库或教程中提到的常用代码来编写程序时会发生什么。我对那些使用难搞的办法来解决语言自身毛病以“证明”语言没毛病这事没兴趣,当然你可以和语言抗争来避免它的毛病,但这并不能说明语言本身是没有问题的。
|
||||||
|
|
||||||
|
### 回顾缓存消耗问题
|
||||||
|
|
||||||
|
首先我们先来回顾一下合理使用缓存的重要性。下图是基于在 Haswell 架构下内存延迟对 CPU 影响的 [数据][10]:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
针对这款 CPU 读取内存的延迟,CPU 需要消耗近 230 个运算周期从内存读取数据,同时需要消耗 4 个运算周期来读取 L1 缓冲区。因此错误的去使用缓存可导致运行速度拖慢近 50 倍。还好这并不是最糟糕的——在现代 CPU 中它们能同时地做多种操作,所以当你加载 L1 缓冲区内容的同时这个内容已经进入到了寄存器,因此数据从 L1 缓冲区加载这个过程的性能消耗就被部分或完整的掩盖了起来。
|
||||||
|
|
||||||
|
撇开选择合理的算法不谈,不夸张地讲,在性能优化中你要考虑的最主要因素其实是缓存未命中。当你能够有效的访问一个数据时候,你才需要考虑优化你的每个具体的操作。与缓存未命中的问题相比,那些次要的低效问题对运行速度并没有什么过多的影响。
|
||||||
|
|
||||||
|
这对于编程语言的设计者来说是一个好消息!你都_不必_去编写一个最高效的编译器,你可以完全摆脱一些额外的开销(比如:数组边界检查),你只需要专注怎么设计语言能高效地编写代码来访问数据,而不用担心与 C 语言代码比较运行速度。
|
||||||
|
|
||||||
|
### 为什么 C# 存在缓存未命中问题
|
||||||
|
|
||||||
|
坦率地讲 C# 在设计时就没打算在现代缓存中实现高效运行。我又一次提到程序语言设计的局限性以及其带给程序员无法编写高效的代码的“压力”。大部分的理论上的解决方法其实都非常的不便,这里我说的是那些编程语言“希望”你这样编写的惯用写法。
|
||||||
|
|
||||||
|
C# 最基本的问题是对基础值类型(value-base)低下的支持性。其大部分的数据结构都是“内置”在语言内定义的(例如:栈,或其他内置对象)。但这些具有帮助性的内置结构体有一些大问题,以至于更像是创可贴而不是解决方案。
|
||||||
|
|
||||||
|
* 你得把自己定义的结构体类型在最先声明——这意味着你如果需要用到这个类型作为堆分配,那么所有的结构体都会被堆分配。你也可以使用一些类包装器来打包你的结构体和其中的成员变量,但这十分的痛苦。如果类和结构体可以相同的方式声明,并且可根据具体情况来使用,这将是更好的。当数据可以作为值地存储在自定义的栈中,当这个数据需要被堆分配时你就可以将其定义为一个对象,比如 C++ 就是这样工作的。因为只有少数的内容需要被堆分配,所以我们不鼓励所有的内容都被定义为对象类型。
|
||||||
|
|
||||||
|
* _引用_ 值被苛刻的限制。你可以将一个引用值传给函数,但只能这样。你不能直接引用 `List<int>` 中的元素,你必须先把所有的引用和索引全部存储下来。你不能直接取得指向栈、对象中的变量(或其他变量)的指针。你只能把它们复制一份,除了将它们传给一个函数(使用引用的方式)。当然这也是可以理解的。如果类型安全是一个先驱条件,灵活的引用变量和保证类型安全这两项要同时支持太难了(虽然不是不可能)。这些限制背后的理念并不能改变限制存在的事实。
|
||||||
|
|
||||||
|
* [固定大小的缓冲区][6] 不支持自定义类型,而且还必须使用 `unsafe` 关键字。
|
||||||
|
|
||||||
|
* 有限的“数组切片”功能。虽然有提供 `ArraySegment` 类,但并没有人会使用它,这意味着如果只需要传递数组的一部分,你必须去创建一个 `IEnumerable` 对象,也就意味着要分配大小(包装)。就算接口接受 `ArraySegment` 对象作为参数,也是不够的——你只能用普通数组,而不能用 `List<T>`,也不能用 [栈数组][4] 等等。
|
||||||
|
|
||||||
|
最重要的是,除了非常简单的情况之外,C# 非常惯用堆分配。如果所有的数据都被堆分配,这意味着被访问时会造成缓存未命中(从你无法决定对象是如何在堆中存储开始)。所以当 C++ 程序面临着如何有效的组织数据在缓存中的存储这个挑战时,C# 则鼓励程序员去将数据分开地存放在一个个堆分配空间中。这就意味着程序员无法控制数据存储方式了,也开始产生不必要的缓存未命中问题,而导致性能急速的下降。[C# 已经支持原生编译][11] 也不会提升太多性能——毕竟在内存不足的情况下,提高代码质量本就杯水车薪。
|
||||||
|
|
||||||
|
再加上存储是有开销的。在 64 位的机器上每个地址值占 8 位内存,而每次分配都会有存储元数据而产生的开销。与存储着少量大数据(以固定偏移的方式存储在其中)的堆相比,存储着大量小数据的堆(并且其中的数据到处都被引用)会产生更多的内存开销。尽管你可能不怎么关心内存怎么用,但事实上就是那些头部内容和地址信息导致堆变得臃肿,也就是在浪费缓存了,所以也造成了更多的缓存未命中,降低了代码性能。
|
||||||
|
|
||||||
|
当然有些时候也是有办法的,比如你可以使用一个很大的 `List<T>` 来构造数据池以存储分配你需要的数据和自己的结构体。这样你就可以方便的遍历或者批量更新你的数据池中的数据了。但这也会很混乱,因为无论你在哪要引用什么对象都要先能引用这个池,然后每次引用都需要做数组索引。从上文可以得出,在 C# 中做类似这样的处理的痛感比在 C++ 中做来的更痛,因为 C# 在设计时就是这样。此外,通过这种方式来访问池中的单个对象比直接将这个对象分配到内存来访问更加的昂贵——前者你得先访问池(这是个类)的地址,这意味着可能产生 _2_ 次缓存未命中。你还可以通过复制 `List<T>` 的结构形式来避免更多的缓存未命中问题,但这就更难搞了。我就写过很多类似的代码,自然这样的代码只会水平很低而且容易出错。
|
||||||
|
|
||||||
|
最后,我想说我指出的问题不仅是那些“热门”的代码。惯用手段编写的 C# 代码倾向于几乎所有地方都用类和引用。意思就是在你的代码中会频率均匀地随机出现数百次的运算周期损耗,使得操作的损耗似乎降低了。这虽然也可以被找出来,但你优化了这问题后,这还是一个 [均匀变慢][12] 的程序。
|
||||||
|
|
||||||
|
### 垃圾回收
|
||||||
|
|
||||||
|
在读下文之前我会假设你已经知道为什么在许多用例中垃圾回收是影响性能问题的重要原因。播放动画时总是随机的暂停通常都是大家都不能接受的吧。我会继续解释为什么设计语言时还加剧了这个问题。
|
||||||
|
|
||||||
|
因为 C# 在处理变量上的一些局限性,它强烈不建议你去使用大内存块分配来存储很多里面是内置对象的变量(可能存在栈中),这就使得你必须使用很多分配在堆中的小型类对象。说白了就是内存分配越多会导致花在垃圾回收上的时间就越多。
|
||||||
|
|
||||||
|
有些测评说 C# 或者 Java 是怎么在一些特定的例子中打败 C++ 的,其实是因为内存分配器都基于一种吞吐还算不错的垃圾回收机制(廉价的分配,允许统一的释放分配)。然而,这些测试场景都太特殊了。想要使 C# 的程序的内存分配率变得和那些非常普通的 C++ 程序都能达到的一样就必须要耗费更大的精力来编写它,所以这种比较就像是拿一个高度优化的管理程序和一个最简单原生的程序相比较一样。当你花同样的精力来写一个 C++ 程序时,肯定比你用 C# 来写性能好的多。
|
||||||
|
|
||||||
|
我还是相信你可以写出一套适用于高性能低延迟的应用的垃圾回收机制的(比如维护一个增量的垃圾回收,每次消耗固定的时间来做回收),但这还是不够的,大部分的高级语言在设计时就没考虑程序启动时就会产生大量的垃圾,这将会是最大的问题。当你就像写 C 一样习惯的去少去在 C# 分配内存,垃圾回收在高性能应用中可能就不会暴露出很多的问题了。而就算你 _真的_ 去实现了一个增量垃圾回收机制,这意味着你还可能需要为其做一个写屏障——这就相当于又消耗了一些性能了。
|
||||||
|
|
||||||
|
看看 `.Net` 库里那些基本类,内存分配几乎无处不在!我数了下,在 [.Net 核心框架][13] 中公共类比结构体的数量多出 19 倍之多,为了使用它们,你就得把这些东西全都弄到内存中去。就算是 `.Net` 框架的创造者们也无法抵抗设计语言时的警告啊!我都不知道怎么去统计了,使用基础类库时,你会很快意识到这不仅仅是值或对象的选择问题了,就算如此也还是 _伴随_ 着超级多的内存分配。这一切都让你觉得分配内存好像很容易一样,其实怎么可能呢,没有内存分配你连一个整形值都没法输出!不说这个,就算你使用预分配的 `StringBuilder`,你要是不用标准库来分配内存,也还不是连个整型都存不住。你要这么问我那就挺蠢的了。
|
||||||
|
|
||||||
|
当然还不仅仅是标准库,其他的 C# 库也一样。就算是 `Unity`(一个 _游戏引擎_,可能能更多的关心平均性能问题)也会有一些全局返回已分配对象(或数组)的接口,或者强制调用时先将其分配内存再使用。举个例子,在一个 `GameObject` 中要使用 `GetComponents` 来调用一个数组,`Unity` 会强制地分配一个数组以便调用。就此而言,其实有许多的接口可以采用,但他们不选择,而去走常规路线来直接使用内存分配。写 `Unity` 的同胞们写的一手“好 C#”呀,但就是不那么高性能罢了。
|
||||||
|
|
||||||
|
### 结语
|
||||||
|
|
||||||
|
如果你在设计一门新的语言,拜托你可以考虑一下我提到的那些性能问题。在你创造出一款“足够聪明的编译器”之后这些都不是什么难题了。当然,没有垃圾回收器就要求类型安全很难。当然,没有一个规范的数据表示就创造一个垃圾回收器很难。当然,出现指向随机值的指针时难以去推出其作用域规则。当然,还有大把大把的问题摆在那里,然而解决了这些所有的问题,设计出来的语言就会是我们想的那样吗?那为什么这么多主要的语言都是在那些六十年代就已经被设计出的语言的基础上迭代的呢?
|
||||||
|
|
||||||
|
尽管你不能修复这些问题,但也许你可以尽可能的靠近?或者可以使用域类型(比如 `Rust` 语言)去保证其类型安全。或者也许可以考虑直接放弃“类型安全成本”去使用更多的运行时检查(如果这不会造成更多的缓存未命中的话,这其实没什么所谓。其实 C# 也有类似的东西,叫协变式数组,严格上讲是违背系统数据类型的,会导致一些运行时异常)。
|
||||||
|
|
||||||
|
如果你想在高性能场景中替代 C++,最基本的一点就是要考虑数据的存放布局和存储方式。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
我叫 Sebastian Sylvan。我来自瑞典,目前居住在西雅图。我在微软工作,研究全息透镜。诚然我的观点仅代表本人,与微软公司无关。
|
||||||
|
|
||||||
|
我的博客以图像、编程语言、性能等内容为主。联系我请点击我的 Twitter 或 E-mail。
|
||||||
|
|
||||||
|
------------
|
||||||
|
|
||||||
|
|
||||||
|
via: https://www.sebastiansylvan.com/post/why-most-high-level-languages-are-slow
|
||||||
|
|
||||||
|
作者:[Sebastian Sylvan][a]
|
||||||
|
译者:[kenxx](https://github.com/kenxx)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.sebastiansylvan.com/about/
|
||||||
|
[1]:https://www.sebastiansylvan.com/post/why-most-high-level-languages-are-slow/?imm_mid=0ee8ca&cmp=em-prog-na-na-newsltr_20170311#cache-costs-review
|
||||||
|
[2]:https://www.sebastiansylvan.com/post/why-most-high-level-languages-are-slow/?imm_mid=0ee8ca&cmp=em-prog-na-na-newsltr_20170311#why-c-introduces-cache-misses
|
||||||
|
[3]:https://www.sebastiansylvan.com/post/why-most-high-level-languages-are-slow/?imm_mid=0ee8ca&cmp=em-prog-na-na-newsltr_20170311#garbage-collection
|
||||||
|
[4]:https://msdn.microsoft.com/en-us/library/vstudio/cx9s2sy4(v=vs.100).aspx
|
||||||
|
[5]:https://www.sebastiansylvan.com/post/why-most-high-level-languages-are-slow/?imm_mid=0ee8ca&cmp=em-prog-na-na-newsltr_20170311#closing-remarks
|
||||||
|
[6]:https://msdn.microsoft.com/en-us/library/vstudio/zycewsya(v=vs.100).aspx
|
||||||
|
[7]:https://www.sebastiansylvan.com/post/why-most-high-level-languages-are-slow/
|
||||||
|
[8]:https://www.sebastiansylvan.com/categories/programming-languages
|
||||||
|
[9]:https://www.sebastiansylvan.com/categories/software-engineering
|
||||||
|
[10]:http://www.7-cpu.com/cpu/Haswell.html
|
||||||
|
[11]:https://msdn.microsoft.com/en-us/vstudio/dotnetnative.aspx
|
||||||
|
[12]:http://c2.com/cgi/wiki?UniformlySlowCode
|
||||||
|
[13]:https://github.com/dotnet/corefx
|
@ -0,0 +1,253 @@
|
|||||||
|
在 Kali Linux 中更改 GRUB 背景的 5 种方式
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
这是一个关于如何在 Kali Linux 中更改 GRUB 背景的简单指南(实际上它是 Kali Linux 的
|
||||||
|
GRUB 启动图像)。 Kali 开发团队在这方面做的不多,他们好像太忙了,所以在这篇文章中,我会对 GRUB 解释一二,但是不会冗长到我失去写作的激情。 那么我们开始吧……
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][10]
|
||||||
|
|
||||||
|
### 查找 GRUB 设置
|
||||||
|
|
||||||
|
这通常是所有人首先会遇到的一个问题,在哪里设置?有很多方法来查找 GRUB 设置。每个人都可能有自己的方法,但我发现 `update-grub` 是最简单的。如果在 VMWare 或 VirtualBox 中执行 `update-grub`,你将看到如下所示的内容:
|
||||||
|
|
||||||
|
```
|
||||||
|
root@kali:~# update-grub
|
||||||
|
Generating grub configuration file ...
|
||||||
|
Found background image: /usr/share/images/desktop-base/desktop-grub.png
|
||||||
|
Found linux image: /boot/vmlinuz-4.0.0-kali1-amd64
|
||||||
|
Found initrd image: /boot/initrd.img-4.0.0-kali1-amd64
|
||||||
|
No volume groups found
|
||||||
|
done
|
||||||
|
root@kali:~#
|
||||||
|
```
|
||||||
|
|
||||||
|
如果您是双系统,或者三系统,那么您将看到 GRUB 以及其他操作系统入口。然而,我们感兴趣的部分是背景图像,这是在我这里看到的(你会看到完全相同的内容):
|
||||||
|
|
||||||
|
```
|
||||||
|
Found background image: /usr/share/images/desktop-base/desktop-grub.png
|
||||||
|
```
|
||||||
|
|
||||||
|
### GRUB 启动图像搜索顺序
|
||||||
|
|
||||||
|
在 grub-2.02 中,对基于 Debian 的系统来说,它将按照以下顺序搜索启动背景:
|
||||||
|
|
||||||
|
1. `/etc/default/grub` 里的 `GRUB_BACKGROUND` 行
|
||||||
|
2. 在 `/boot/grub/` 里找到的第一个图像(如果发现多张,将以字母顺序排序)
|
||||||
|
3. 在 `/usr/share/desktop-base/grub_background.sh` 中指定的
|
||||||
|
4. 在 `/etc/grub.d/05_debian_theme` 里 `WALLPAPER` 行列出的
|
||||||
|
|
||||||
|
现在将此信息留在这里,我们会尽快重新检查它。
|
||||||
|
|
||||||
|
### Kali Linux GRUB 启动图像
|
||||||
|
|
||||||
|
在我使用 Kali Linux 时(因为我喜欢用它做事),会发现 Kali 正在使用这里的背景图像:`/usr/share/images/desktop-base/desktop-grub.png`
|
||||||
|
|
||||||
|
为了确定,我们来检查一下这个 `.png` 文件的属性。
|
||||||
|
|
||||||
|
```
|
||||||
|
root@kali:~#
|
||||||
|
root@kali:~# ls -l /usr/share/images/desktop-base/desktop-grub.png
|
||||||
|
lrwxrwxrwx 1 root root 30 Oct 8 00:31 /usr/share/images/desktop-base/desktop-grub.png -> /etc/alternatives/desktop-grub
|
||||||
|
root@kali:~#
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][11]
|
||||||
|
|
||||||
|
什么?它只是 `/etc/alternatives/desktop-grub` 的一个符号链接? 但是 `/etc/alternatives/desktop-grub` 不是图片文件。看来我也要检查一下它的属性。
|
||||||
|
|
||||||
|
```
|
||||||
|
root@kali:~#
|
||||||
|
root@kali:~# ls -l /etc/alternatives/desktop-grub
|
||||||
|
lrwxrwxrwx 1 root root 44 Oct 8 00:27 /etc/alternatives/desktop-grub -> /usr/share/images/desktop-base/kali-grub.png
|
||||||
|
root@kali:~#
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][12]
|
||||||
|
|
||||||
|
好吧,真让人费解。 `/etc/alternatives/desktop-grub` 也是一个符号链接,它指向 `/usr/share/images/desktop-base/kali-grub.png`,来自最初同样的文件夹。呃! 无语。 但是现在我们至少可以替换该文件并将其解决。
|
||||||
|
|
||||||
|
在替换之前,我们需要检查 `/usr/share/images/desktop-base/kali-grub.png` 的属性,以确保下载相同类型和大小的文件。
|
||||||
|
|
||||||
|
```
|
||||||
|
root@kali:~#
|
||||||
|
root@kali:~# file /usr/share/images/desktop-base/kali-grub.png
|
||||||
|
/usr/share/images/desktop-base/kali-grub.png: PNG image data, 640 x 480, 8-bit/color RGB, non-interlaced
|
||||||
|
root@kali:~#
|
||||||
|
```
|
||||||
|
|
||||||
|
可以确定这是一个 PNG 图像文件,像素尺寸为 640 x 480。
|
||||||
|
|
||||||
|
### GRUB 背景图像属性
|
||||||
|
|
||||||
|
可以使用 `PNG`, `JPG`/`JPEG` 以及 `TGA` 类型的图像文件作为 GRUB 2 的背景。必须符合以下规范:
|
||||||
|
|
||||||
|
* `JPG`/`JPEG` 图像必须是 `8-bit` (256 色)
|
||||||
|
* 图像应该是非索引的,`RGB`
|
||||||
|
|
||||||
|
默认情况下,如果安装了 `desktop-base` 软件包,符合上述规范的图像将放在 `/usr/share/images/desktop-base/` 目录中。在谷歌上很容易找到类似的文件。我也找了一个。
|
||||||
|
|
||||||
|
```
|
||||||
|
root@kali:~#
|
||||||
|
root@kali:~# file Downloads/wallpaper-1.png
|
||||||
|
Downloads/wallpaper-1.png: PNG image data, 640 x 480, 8-bit/color RGB, non-interlaced
|
||||||
|
root@kali:~#
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][13]
|
||||||
|
|
||||||
|
### 方式 1:替换图像
|
||||||
|
|
||||||
|
现在我们只需简单的用新文件将 `/usr/share/images/desktop-base/kali-grub.png` 替换掉。值得注意这是最简单的方法,不需要修改 `grub-config` 文件。 如果你对 GRUB 很熟,建议你简单的修改 GRUB 的默认配置文件,然后执行 `update-grub`。
|
||||||
|
|
||||||
|
像往常一样,我会将原文件重命名为 `kali-grub.png.bkp` 进行备份。
|
||||||
|
|
||||||
|
```
|
||||||
|
root@kali:~#
|
||||||
|
root@kali:~# mv /usr/share/images/desktop-base/kali-grub.png /usr/share/images/desktop-base/kali-grub.png.bkp
|
||||||
|
root@kali:~#
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][14]
|
||||||
|
|
||||||
|
现在我们将下载的文件重命名为 `kali-grub.png`。
|
||||||
|
|
||||||
|
```
|
||||||
|
root@kali:~#
|
||||||
|
root@kali:~# cp Downloads/wallpaper-1.png /usr/share/images/desktop-base/kali-grub.png
|
||||||
|
root@kali:~#
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][15]
|
||||||
|
|
||||||
|
最后执行命令 `update-grub`:
|
||||||
|
|
||||||
|
```
|
||||||
|
root@kali:~# update-grub
|
||||||
|
Generating grub configuration file ...
|
||||||
|
Found background image: /usr/share/images/desktop-base/desktop-grub.png
|
||||||
|
Found linux image: /boot/vmlinuz-4.0.0-kali1-amd64
|
||||||
|
Found initrd image: /boot/initrd.img-4.0.0-kali1-amd64
|
||||||
|
No volume groups found
|
||||||
|
done
|
||||||
|
root@kali:~#
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][16]
|
||||||
|
|
||||||
|
下次重新启动你的 Kali Linux 时,你会看到 GRUB 背景变成了你自己的图像(GRUB 启动界面)。
|
||||||
|
|
||||||
|
下面是我现在正在使用的新 GRUB 启动背景。你呢?要不要试试这个办法?
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][17]
|
||||||
|
|
||||||
|
这是最简单最安全的办法,最糟的情况也不过是在 GRUB 看到一个蓝色的背景,但你依然可以登录后修复它们。现在如果你有信心,让我们尝试一个改变 GRUB 设置的更好的方法(有点复杂)。后续步骤更加有趣,而且可以在任何使用 GRUB 引导的 Linux 上使用。
|
||||||
|
|
||||||
|
现在回忆一下 GRUB 在哪 4 个地方寻找启动背景图像?再看一遍:
|
||||||
|
|
||||||
|
1. `/etc/default/grub` 里的 `GRUB_BACKGROUND` 行
|
||||||
|
2. 在 `/boot/grub/` 里找到的第一个图像(如果发现多张,将以字母顺序排序)
|
||||||
|
3. 在 `/usr/share/desktop-base/grub_background.sh` 中指定的
|
||||||
|
4. 在 `/etc/grub.d/05_debian_theme` 里 WALLPAPER 行列出的
|
||||||
|
|
||||||
|
那么我们再在 Kali Linux 上(或任意使用 GRUB2 的 Linux系统)试一下新的选择。
|
||||||
|
|
||||||
|
### 方式 2:在 GRUB_BACKGROUND 中定义图像路径
|
||||||
|
|
||||||
|
所以你可以根据上述的查找优先级使用上述任一项,将 GRUB 背景图像改为自己的。以下是我自己系统上 `/etc/default/grub` 的内容。
|
||||||
|
|
||||||
|
```
|
||||||
|
root@kali:~# vi /etc/default/grub
|
||||||
|
```
|
||||||
|
|
||||||
|
按照 `GRUB_BACKGROUND="/root/World-Map.jpg"` 的格式添加一行,其中 World-Map.jpg 是你要作为 GRUB 背景的图像文件。
|
||||||
|
|
||||||
|
```
|
||||||
|
# If you change this file, run 'update-grub' afterwards to update
|
||||||
|
# /boot/grub/grub.cfg.
|
||||||
|
# For full documentation of the options in this file, see:
|
||||||
|
# info -f grub -n 'Simple configuration'
|
||||||
|
|
||||||
|
GRUB_DEFAULT=0
|
||||||
|
GRUB_TIMEOUT=15
|
||||||
|
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
|
||||||
|
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
|
||||||
|
GRUB_CMDLINE_LINUX="initrd=/install/gtk/initrd.gz"
|
||||||
|
GRUB_BACKGROUND="/root/World-Map.jpg"
|
||||||
|
```
|
||||||
|
|
||||||
|
一旦使用上述方式完成更改,务必执行 `update-grub` 命令,如下所示。
|
||||||
|
|
||||||
|
```
|
||||||
|
root@kali:~# update-grub
|
||||||
|
Generating grub configuration file ...
|
||||||
|
Found background: /root/World-Map.jpg
|
||||||
|
Found background image: /root/World-Map.jpg
|
||||||
|
Found linux image: /boot/vmlinuz-4.0.0-kali1-amd64
|
||||||
|
Found initrd image: /boot/initrd.img-4.0.0-kali1-amd64
|
||||||
|
No volume groups found
|
||||||
|
done
|
||||||
|
root@kali:~#
|
||||||
|
```
|
||||||
|
|
||||||
|
现在重启机器,你会在 GRUB 看到自定义的图像。
|
||||||
|
|
||||||
|
### 方式 3:把图像文件放到 /boot/grub/ 文件夹
|
||||||
|
|
||||||
|
如果没有在 `/etc/default/grub` 文件中指定 `GRUB_BACKGROUND` 项,理论上 GRUB 应当使用在 `/boot/grub/` 文件夹找到的第一个图像文件作为背景。如果 GRUB 在 `/boot/grub/` 找到多个图像文件,它会按字母排序并使用第一个图像文件。
|
||||||
|
|
||||||
|
### 方式 4:在 grub_background.sh 指定图像路径
|
||||||
|
|
||||||
|
如果没有在 `/etc/default/grub` 文件中指定 `GRUB_BACKGROUND` 项,而且 `/boot/grub/` 目录下没有图像文件,GRUB 将会开始在 `/usr/share/desktop-base/grub_background.sh` 文件中指定的图像路径中搜索。Kali Linux 是在这里指定的。每个 Linux 发行版都有自己的特色。
|
||||||
|
|
||||||
|
### 方式 5:在 /etc/grub.d/05\_debian\_theme 文件的 WALLPAPER 一行指定图像
|
||||||
|
|
||||||
|
这是 GRUB 搜寻背景图像的最后一个位置。如果在其他部分都没有找到,它将会在这里查找。
|
||||||
|
|
||||||
|
### 结论
|
||||||
|
|
||||||
|
这篇文章较长,但我想介绍一些基础但很重要的东西。如果你有仔细阅读,你会理解如何在 Kali Linux 上来回跟踪符号链接。当你需要在一些 Linux 系统上查找 GRUB 背景图像的位置时,你会感到得心应手。只要再多阅读一点来理解 GRUB 颜色的工作方式,你就是行家了。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.blackmoreops.com/2015/11/27/change-grub-background-in-kali-linux/
|
||||||
|
|
||||||
|
作者:[https://www.blackmoreops.com/][a]
|
||||||
|
译者:[fuowang](https://github.com/fuowang)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.blackmoreops.com/2015/11/27/change-grub-background-in-kali-linux/
|
||||||
|
[1]:http://www.facebook.com/sharer.php?u=https://www.blackmoreops.com/?p=5958
|
||||||
|
[2]:https://twitter.com/intent/tweet?text=5+ways+to+change+GRUB+background+in+Kali+Linux%20via%20%40blackmoreops&url=https://www.blackmoreops.com/?p=5958
|
||||||
|
[3]:https://plusone.google.com/_/+1/confirm?hl=en&url=https://www.blackmoreops.com/?p=5958&name=5+ways+to+change+GRUB+background+in+Kali+Linux
|
||||||
|
[4]:https://www.blackmoreops.com/how-to/
|
||||||
|
[5]:https://www.blackmoreops.com/kali-linux/
|
||||||
|
[6]:https://www.blackmoreops.com/kali-linux-2-x-sana/
|
||||||
|
[7]:https://www.blackmoreops.com/administration/
|
||||||
|
[8]:https://www.blackmoreops.com/usability/
|
||||||
|
[9]:https://www.blackmoreops.com/2015/11/27/change-grub-background-in-kali-linux/#comments
|
||||||
|
[10]:http://www.blackmoreops.com/wp-content/uploads/2015/11/Change-GRUB-background-in-Kali-Linux-blackMORE-OPs-10.jpg
|
||||||
|
[11]:http://www.blackmoreops.com/2015/11/27/change-grub-background-in-kali-linux/change-grub-background-in-kali-linux-blackmore-ops-1/
|
||||||
|
[12]:http://www.blackmoreops.com/2015/11/27/change-grub-background-in-kali-linux/change-grub-background-in-kali-linux-blackmore-ops-3/
|
||||||
|
[13]:http://www.blackmoreops.com/2015/11/27/change-grub-background-in-kali-linux/change-grub-background-in-kali-linux-blackmore-ops-6/
|
||||||
|
[14]:http://www.blackmoreops.com/2015/11/27/change-grub-background-in-kali-linux/change-grub-background-in-kali-linux-blackmore-ops-4/
|
||||||
|
[15]:http://www.blackmoreops.com/2015/11/27/change-grub-background-in-kali-linux/change-grub-background-in-kali-linux-blackmore-ops-5/
|
||||||
|
[16]:http://www.blackmoreops.com/2015/11/27/change-grub-background-in-kali-linux/change-grub-background-in-kali-linux-blackmore-ops-7/
|
||||||
|
[17]:http://www.blackmoreops.com/wp-content/uploads/2015/11/Change-GRUB-background-in-Kali-Linux-blackMORE-OPs-9.jpg
|
@ -0,0 +1,66 @@
|
|||||||
|
如何更改 Linux 的 I/O 调度器
|
||||||
|
==================================
|
||||||
|
|
||||||
|
Linux 的 I/O 调度器是一个从存储卷以块式 I/O 访问的进程,有时也叫磁盘调度器。Linux I/O 调度器的工作机制是控制块设备的请求队列:确定队列中哪些 I/O 的优先级更高以及何时下发 I/O 到块设备,以此来减少磁盘寻道时间,从而提高系统的吞吐量。
|
||||||
|
|
||||||
|
目前 Linux 上有如下几种 I/O 调度算法:
|
||||||
|
|
||||||
|
1. noop - 通常用于内存存储的设备。
|
||||||
|
2. cfq - 绝对公平调度器。进程平均使用IO带宽。
|
||||||
|
3. Deadline - 针对延迟的调度器,每一个 I/O,都有一个最晚执行时间。
|
||||||
|
4. Anticipatory - 启发式调度,类似 Deadline 算法,但是引入预测机制提高性能。
|
||||||
|
|
||||||
|
查看设备当前的 I/O 调度器:
|
||||||
|
|
||||||
|
```
|
||||||
|
# cat /sys/block/<Disk_Name>/queue/scheduler
|
||||||
|
```
|
||||||
|
|
||||||
|
假设磁盘名称是 `/dev/sdc`:
|
||||||
|
|
||||||
|
```
|
||||||
|
# cat /sys/block/sdc/queue/scheduler
|
||||||
|
noop anticipatory deadline [cfq]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 如何改变硬盘设备 I/O 调度器
|
||||||
|
|
||||||
|
使用如下指令:
|
||||||
|
|
||||||
|
```
|
||||||
|
# echo {SCHEDULER-NAME} > /sys/block/<Disk_Name>/queue/scheduler
|
||||||
|
```
|
||||||
|
|
||||||
|
比如设置 noop 调度器:
|
||||||
|
|
||||||
|
```
|
||||||
|
# echo noop > /sys/block/sdc/queue/scheduler
|
||||||
|
```
|
||||||
|
|
||||||
|
以上设置重启后会失效,要想重启后配置仍生效,需要在内核启动参数中将 `elevator=noop` 写入 `/boot/grub/menu.lst`:
|
||||||
|
|
||||||
|
#### 1. 备份 menu.lst 文件
|
||||||
|
|
||||||
|
```
|
||||||
|
cp -p /boot/grub/menu.lst /boot/grub/menu.lst-backup
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. 更新 /boot/grub/menu.lst
|
||||||
|
|
||||||
|
将 `elevator=noop` 添加到文件末尾,比如:
|
||||||
|
|
||||||
|
```
|
||||||
|
kernel /vmlinuz-2.6.16.60-0.91.1-smp root=/dev/sysvg/root splash=silent splash=off showopts elevator=noop
|
||||||
|
```
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://linuxroutes.com/change-io-scheduler-linux/
|
||||||
|
|
||||||
|
作者:[UX Techno][a]
|
||||||
|
译者:[honpey](https://github.com/honpey)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://linuxroutes.com/change-io-scheduler-linux/
|
1105
published/201703/20160917 A Web Crawler With asyncio Coroutines.md
Normal file
1105
published/201703/20160917 A Web Crawler With asyncio Coroutines.md
Normal file
File diff suppressed because it is too large
Load Diff
146
published/201703/20161018 Suspend to Idle.md
Normal file
146
published/201703/20161018 Suspend to Idle.md
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
浅述内核中“挂起到空闲”的实现
|
||||||
|
===============
|
||||||
|
|
||||||
|
### 简介
|
||||||
|
|
||||||
|
Linux 内核提供了多种睡眠状态,各个状态通过设置系统中的不同部件进入低耗电模式来节约能源。目前总共有四种睡眠状态,分别是:挂起到空闲(suspend to idle)、加电待机(power-on standby(standby))、挂起到内存(suspend to ram)和挂起到磁盘(suspend to disk)。这些状态分别对应 ACPI 的 4 种状态:S0,S1,S3 和 S4。挂起到空闲(suspend to idle)是纯软件实现的,用于将 CPU 维持在尽可能深的 idle 状态。加电待机(power-on standby(standby))则使设备处于低功耗状态,并且关闭所有非引导 CPU。挂起到内存(suspend to ram)就更进一步,关闭所有 CPU 并且设置 RAM 进入自刷新模式。挂起到磁盘(suspend to disk)则是最省功耗的模式,关闭尽可能多的系统,包括关闭内存。然后内存中的内容会被写到硬盘,待唤醒计算机的时候将硬盘中的内容重新恢复到内存中。
|
||||||
|
|
||||||
|
这篇博文主要介绍挂起到空闲(suspend to idle)的实现。如上所说,它主要通过软件实现。一般平台的挂起过程包括冻结用户空间并将外围设备调至低耗电模式。但是,系统并不是直接关闭和热插拔掉 CPU,而是静静地强制将 CPU 进入空闲(idle)状态。随着外围设备进入了低耗电模式,除了唤醒相关的中断外不应有其他中断产生。唤醒中断包括那些设置用于唤醒系统的计时器(比如 RTC,普通计时器等)、或者电源开关、USB 和其它外围设备等。
|
||||||
|
|
||||||
|
在冻结过程中,当系统进入空闲状态时会调用一个特殊的 cpu 空闲函数。这个 `enter_freeze()` 函数可以和调用使 cpu 空闲的 `enter()` 函数一样简单,也可以复杂得多。该函数复杂的程度由将 SoC 置为低耗电模式的条件和方法决定。
|
||||||
|
|
||||||
|
### 先决条件
|
||||||
|
|
||||||
|
#### `platform_suspend_ops`
|
||||||
|
|
||||||
|
一般情况,为了支持 S2I,系统必须实现 `platform_suspend_ops` 并提供最低限度的挂起支持。这意味着至少要完成 `platform_suspend_ops` 中的 `valid()` 函数。如果挂起到空闲(suspend to idle)和挂起到内存(suspend to ram)都要支持,valid 函数中应使用 `suspend_valid_only_mem`。
|
||||||
|
|
||||||
|
不过,最近内核增加了对 S2I 的自动支持。Sudeep Holla 提出了一个变更,可以让系统不需要满足 `platform_suspend_ops` 条件也能提供 S2I 支持。这个补丁已经被接收并将合并在 4.9 版本中,该补丁可从这里获取: [https://lkml.org/lkml/2016/8/19/474][1]。
|
||||||
|
|
||||||
|
如果定义了 `suspend_ops`,那么可以通过查看 `/sys/power/state` 文件得知系统具体支持哪些挂起状态。如下操作:
|
||||||
|
|
||||||
|
```
|
||||||
|
# cat /sys/power/state
|
||||||
|
freeze mem
|
||||||
|
```
|
||||||
|
|
||||||
|
这个示例的结果显示该平台支持 S0(挂起到空闲(suspend to idle))和 S3(挂起到内存(suspend to ram))。按 Sudeep 的变更,那些没有实现 `platform_suspend_ops` 的平台将只显示 freeze 状态。
|
||||||
|
|
||||||
|
#### 唤醒中断
|
||||||
|
|
||||||
|
一旦系统处于某种睡眠状态,系统必须要接收某个唤醒事件才能恢复系统。这些唤醒事件一般由系统的设备产生。因此一定要确保这些设备驱动使用唤醒中断,并且将自身配置为接收唤醒中断后产生唤醒事件。如果没有正确识别唤醒设备,系统收到中断后会继续保持睡眠状态而不会恢复。
|
||||||
|
|
||||||
|
一旦设备正确实现了唤醒接口的调用,就可用来生成唤醒事件。请确保 DT 文件正确配置了唤醒源。下面是一个配置唤醒源示例,该文件来自(`arch/arm/boot/dst/am335x-evm.dts`):
|
||||||
|
|
||||||
|
```
|
||||||
|
gpio_keys: volume_keys@0 {
|
||||||
|
compatible = “gpio-keys”;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
autorepeat;
|
||||||
|
|
||||||
|
switch@9 {
|
||||||
|
label = “volume-up”;
|
||||||
|
linux,code = <115>;
|
||||||
|
gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
|
||||||
|
wakeup-source;
|
||||||
|
};
|
||||||
|
|
||||||
|
switch@10 {
|
||||||
|
label = “volume-down”;
|
||||||
|
linux,code = <114>;
|
||||||
|
gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
|
||||||
|
wakeup-source;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
如上所示,有两个 gpio 键被配置为唤醒源,在系统挂起期间,其中任何一个键被按下都会产生一个唤醒事件。
|
||||||
|
|
||||||
|
可替代 DT 文件配置的另一个唤醒源配置就是设备驱动,如果设备驱动自身在代码里面配置了唤醒支持,那么就会使用该默认唤醒配置。
|
||||||
|
|
||||||
|
### 实施
|
||||||
|
|
||||||
|
#### 冻结功能
|
||||||
|
|
||||||
|
如果系统希望能够充分使用挂起到空闲(suspend to idle),那么应该在 CPU 空闲驱动代码中定义 `enter_freeze()` 函数。`enter_freeze()` 与 `enter()` 的函数原型略有不同。因此,不能将 `enter()` 同时指定给 `enter` 和 `enter_freeze`。至少,系统会直接调用 `enter()`。如果没有定义 `enter_freeze()`,系统会挂起,但是不会触发那些只有当 `enter_freeze()` 定义了才会触发的函数,比如 `tick_freeze()` 和 `stop_critical_timing()` 都不会发生。这会导致计时器中断唤醒系统,但不会导致系统恢复,因为系统处理完中断后会继续挂起。
|
||||||
|
|
||||||
|
在挂起过程中,中断越少越好(最好一个也没有)。
|
||||||
|
|
||||||
|
下图显示了能耗和时间的对比。图中的两个尖刺分别是挂起和恢复。挂起前后的能耗尖刺是系统退出空闲态进行记录操作,进程调度,计时器处理等。因延迟的缘故,系统进入更深层次空闲状态需要花费一段时间。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*能耗使用时序图*
|
||||||
|
|
||||||
|
下图为 ftrace 抓取的 4 核 CPU 在系统挂起和恢复操作之前、之中和之后的活动。可以看到,在挂起期间,没有请求或者中断被处理。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*Ftrace 抓取的挂起/恢复活动图*
|
||||||
|
|
||||||
|
#### 空闲状态
|
||||||
|
|
||||||
|
你必须确定哪个空闲状态支持冻结。在冻结期间,电源相关代码会决定用哪个空闲状态来实现冻结。这个过程是通过在每个空闲状态中查找谁定义了 `enter_freeze()` 来决定的。CPU 空闲驱动代码或者 SoC 挂起相关代码必须确定哪种空闲状态实现冻结操作,并通过给每个 CPU 的可应用空闲状态指定冻结功能来进行配置。
|
||||||
|
|
||||||
|
例如, Qualcomm 会在平台挂起代码的挂起初始化函数处定义 `enter_freeze` 函数。这个工作是在 CPU 空闲驱动已经初始化后进行,以便所有结构已经定义就位。
|
||||||
|
|
||||||
|
#### 挂起/恢复相关驱动支持
|
||||||
|
|
||||||
|
你可能会在第一次成功挂起操作后碰到驱动相关的 bug。很多驱动开发者没有精力完全测试挂起和恢复相关的代码。你甚至可能会发现挂起操作并没有多少工作可做,因为 `pm_runtime` 已经做了你要做的挂起相关的一切工作。由于用户空间已经被冻结,设备此时已经处于休眠状态并且 `pm_runtime` 已经被禁止。
|
||||||
|
|
||||||
|
### 测试相关
|
||||||
|
|
||||||
|
测试挂起到空闲(suspend to idle)可以手动进行,也可以使用脚本/进程等实现自动挂起、自动睡眠,或者使用像 Android 中的 `wakelock` 来让系统挂起。如果手动测试,下面的操作会将系统冻结。
|
||||||
|
|
||||||
|
```
|
||||||
|
/ # echo freeze > /sys/power/state
|
||||||
|
[ 142.580832] PM: Syncing filesystems … done.
|
||||||
|
[ 142.583977] Freezing user space processes … (elapsed 0.001 seconds) done.
|
||||||
|
[ 142.591164] Double checking all user space processes after OOM killer disable… (elapsed 0.000 seconds)
|
||||||
|
[ 142.600444] Freezing remaining freezable tasks … (elapsed 0.001 seconds) done.
|
||||||
|
[ 142.608073] Suspending console(s) (use no_console_suspend to debug)
|
||||||
|
[ 142.708787] mmc1: Reset 0x1 never completed.
|
||||||
|
[ 142.710608] msm_otg 78d9000.phy: USB in low power mode
|
||||||
|
[ 142.711379] PM: suspend of devices complete after 102.883 msecs
|
||||||
|
[ 142.712162] PM: late suspend of devices complete after 0.773 msecs
|
||||||
|
[ 142.712607] PM: noirq suspend of devices complete after 0.438 msecs
|
||||||
|
< system suspended >
|
||||||
|
….
|
||||||
|
< wake irq triggered >
|
||||||
|
[ 147.700522] PM: noirq resume of devices complete after 0.216 msecs
|
||||||
|
[ 147.701004] PM: early resume of devices complete after 0.353 msecs
|
||||||
|
[ 147.701636] msm_otg 78d9000.phy: USB exited from low power mode
|
||||||
|
[ 147.704492] PM: resume of devices complete after 3.479 msecs
|
||||||
|
[ 147.835599] Restarting tasks … done.
|
||||||
|
/ #
|
||||||
|
```
|
||||||
|
|
||||||
|
在上面的例子中,需要注意 MMC 驱动的操作占了 102.883ms 中的 100ms。有些设备驱动在挂起的时候有很多工作要做,比如将数据刷出到硬盘,或者其他耗时的操作等。
|
||||||
|
|
||||||
|
如果系统定义了冻结(freeze),那么系统将尝试挂起操作,如果没有冻结功能,那么你会看到下面的提示:
|
||||||
|
|
||||||
|
```
|
||||||
|
/ # echo freeze > /sys/power/state
|
||||||
|
sh: write error: Invalid argument
|
||||||
|
/ #
|
||||||
|
```
|
||||||
|
|
||||||
|
### 未来的发展
|
||||||
|
|
||||||
|
目前在 ARM 平台上的挂起到空闲(suspend to idle)有两方面的工作需要做。第一方面工作在前面 `platform_suspend_ops` 小节中提到过,是总允许接受冻结状态以及合并到 4.9 版本内核中的工作。另一方面工作是冻结功能的支持。
|
||||||
|
|
||||||
|
如果你希望设备有更好的响应及表现,那么应该继续完善冻结功能的实现。然而,由于很多 SoC 会使用 ARM 的 CPU 空闲驱动,这使得 ARM 的 CPU 空闲驱动完善它自己的通用冻结功能的工作更有意义了。而事实上,ARM 正在尝试添加此通用支持。如果 SoC 供应商希望实现他们自己的 CPU 空闲驱动或者需要在进入更深层次的冻结休眠状态时提供额外的支持,那么只有实现自己的冻结功能。
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.linaro.org/blog/suspend-to-idle/
|
||||||
|
|
||||||
|
作者:[Andy Gross][a]
|
||||||
|
译者:[beyondworld](https://github.com/beyondworld)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.linaro.org/author/andygross/
|
||||||
|
[1]:https://lkml.org/lkml/2016/8/19/474
|
86
published/201703/20170101 FTPS vs SFTP.md
Normal file
86
published/201703/20170101 FTPS vs SFTP.md
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
FTPS(基于 SSL 的FTP)与 SFTP(SSH 文件传输协议)对比
|
||||||
|
==================================================
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
<ruby>SSH 文件传输协议<rt>SSH File transfer protocol</rt></ruby>(SFTP)也称为<ruby>通过安全套接层的文件传输协议<rt>File Transfer protocol via Secure Socket Layer</rt></ruby>, 以及 FTPS 都是最常见的安全 FTP 通信技术,用于通过 TCP 协议将计算机文件从一个主机传输到另一个主机。SFTP 和 FTPS 都提供高级别文件传输安全保护,通过强大的算法(如 AES 和 Triple DES)来加密传输的数据。
|
||||||
|
|
||||||
|
但是 SFTP 和 FTPS 之间最显着的区别是如何验证和管理连接。
|
||||||
|
|
||||||
|
### FTPS
|
||||||
|
|
||||||
|
FTPS 是使用安全套接层(SSL)证书的 FTP 安全技术。整个安全 FTP 连接使用用户 ID、密码和 SSL 证书进行身份验证。一旦建立 FTPS 连接,[FTP 客户端软件][6]将检查目标[ FTP 服务器][7]证书是否可信的。
|
||||||
|
|
||||||
|
如果证书由已知的证书颁发机构(CA)签发,或者证书由您的合作伙伴自己签发,并且您的信任密钥存储区中有其公开证书的副本,则 SSL 证书将被视为受信任的证书。FTPS 所有的用户名和密码信息将通过安全的 FTP 连接加密。
|
||||||
|
|
||||||
|
以下是 FTPS 的优点和缺点:
|
||||||
|
|
||||||
|
优点:
|
||||||
|
|
||||||
|
- 通信可以被人们读取和理解
|
||||||
|
- 提供服务器到服务器文件传输的服务
|
||||||
|
- SSL/TLS 具有良好的身份验证机制(X.509 证书功能)
|
||||||
|
- FTP 和 SSL 支持内置于许多互联网通信框架中
|
||||||
|
|
||||||
|
缺点:
|
||||||
|
|
||||||
|
- 没有统一的目录列表格式
|
||||||
|
- 需要辅助数据通道(DATA),这使得难以通过防火墙使用
|
||||||
|
- 没有定义文件名字符集(编码)的标准
|
||||||
|
- 并非所有 FTP 服务器都支持 SSL/TLS
|
||||||
|
- 没有获取和更改文件或目录属性的标准方式
|
||||||
|
|
||||||
|
|
||||||
|
### SFTP
|
||||||
|
|
||||||
|
SFTP 或 SSH 文件传输协议是另一种安全的安全文件传输协议,设计为 SSH 扩展以提供文件传输功能,因此它通常仅使用 SSH 端口用于数据传输和控制。当 [FTP 客户端][8]软件连接到 SFTP 服务器时,它会将公钥传输到服务器进行认证。如果密钥匹配,提供任何用户/密码,身份验证就会成功。
|
||||||
|
|
||||||
|
以下是 SFTP 优点和缺点:
|
||||||
|
|
||||||
|
优点:
|
||||||
|
|
||||||
|
- 只有一个连接(不需要 DATA 连接)。
|
||||||
|
- FTP 连接始终保持安全
|
||||||
|
- FTP 目录列表是一致的和机器可读的
|
||||||
|
- FTP 协议包括操作权限和属性操作,文件锁定和更多的功能。
|
||||||
|
|
||||||
|
缺点:
|
||||||
|
|
||||||
|
- 通信是二进制的,不能“按原样”记录下来用于人类阅读,
|
||||||
|
- SSH 密钥更难以管理和验证。
|
||||||
|
- 这些标准定义了某些可选或推荐的选项,这会导致不同供应商的不同软件之间存在某些兼容性问题。
|
||||||
|
- 没有服务器到服务器的复制和递归目录删除操作
|
||||||
|
- 在 VCL 和 .NET 框架中没有内置的 SSH/SFTP 支持。
|
||||||
|
|
||||||
|
### 对比
|
||||||
|
|
||||||
|
大多数 FTP 服务器软件这两种安全 FTP 技术都支持,以及强大的身份验证选项。
|
||||||
|
|
||||||
|
但 SFTP 显然是赢家,因为它适合防火墙。SFTP 只需要通过防火墙打开一个端口(默认为 22)。此端口将用于所有 SFTP 通信,包括初始认证、发出的任何命令以及传输的任何数据。
|
||||||
|
|
||||||
|
FTPS 通过严格安全的防火墙相对难以实现,因为 FTPS 使用多个网络端口号。每次进行文件传输请求(get,put)或目录列表请求时,需要打开另一个端口号。因此,必须在您的防火墙中打开一系列端口以允许 FTPS 连接,这可能是您的网络的安全风险。
|
||||||
|
|
||||||
|
支持 FTPS 和 SFTP 的 FTP 服务器软件:
|
||||||
|
|
||||||
|
1. [Cerberus FTP 服务器][2]
|
||||||
|
2. [FileZilla - 最著名的免费 FTP 和 FTPS 服务器软件][3]
|
||||||
|
3. [Serv-U FTP 服务器][4]
|
||||||
|
|
||||||
|
-------------------------------------------------- ------------------------------
|
||||||
|
|
||||||
|
via: http://www.techmixer.com/ftps-sftp/
|
||||||
|
|
||||||
|
作者:[Techmixer.com][a]
|
||||||
|
译者:[Yuan0302](https://github.com/Yuan0302)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.techmixer.com/
|
||||||
|
[1]:http://www.techmixer.com/ftps-sftp/#respond
|
||||||
|
[2]:http://www.cerberusftp.com/
|
||||||
|
[3]:http://www.techmixer.com/free-ftp-server-best-windows-ftp-server-download/
|
||||||
|
[4]:http://www.serv-u.com/
|
||||||
|
[6]:http://www.techmixer.com/free-ftp-file-transfer-protocol-softwares/
|
||||||
|
[7]:http://www.techmixer.com/free-ftp-server-best-windows-ftp-server-download/
|
||||||
|
[8]:http://www.techmixer.com/best-free-mac-ftp-client-connect-ftp-server/
|
@ -0,0 +1,140 @@
|
|||||||
|
如何在 Linux 桌面上使用 Gifine 录制 GIF 动画?
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
不用我说,你也知道 GIF 动画在过去几年发展迅速。人们经常在线上文字交流时使用动画增添趣味,同时这些动画在很多其他地方也显得非常有用。
|
||||||
|
|
||||||
|
在技术领域使用动画能够很快的描述出现的问题或者返回的错误。它也能很好的展现出一个软件应用产品的特性。你可以在进行线上座谈会或者在进行公司展示时使用 GIF 动画,当然,你可以在更多的地方用到它。
|
||||||
|
|
||||||
|
现在,假设你的电脑桌面上打开了多个应用程序,或者无论出于什么目的,你想制作一个 GIF 动画来记录桌面上一个应用程序窗口的操作过程。你应该怎么做呢?显然,你需要一个工具来完成这件事。
|
||||||
|
|
||||||
|
如果你正在寻找了这样一个可以记录桌面上部分区域的工具,并且它可以自动把录屏转化成 GIF 动画; 现在,本教程会介绍一个 Linux 命令行工具来实现你的需求。
|
||||||
|
|
||||||
|
开始之前,你必须知道在本教程中所有的例子都是在 Ubuntu 14.04 上测试过的,它的 Bash 版本是 4.3.11(1) 。
|
||||||
|
|
||||||
|
### Gifine
|
||||||
|
|
||||||
|
这个工具的主页是 [Gifine][5] 。它基于 GTK 工具包,是用 MoonScript 使用 lgi 库编写的。Gifine 不仅能够录屏、创建动画或视频,而且能够用它来把几个小型动画或视频拼接在一起。
|
||||||
|
|
||||||
|
引述这个工具的开发者的话:“你可以加载一个视频帧的目录或者选择一个桌面的区域进行录屏。你加载了一些视频帧后,可以连续查看它们,并裁剪掉不需要的部分。最终完成录屏后可以导出为 gif 或者 mp4 文件。”
|
||||||
|
|
||||||
|
### Gifine 下载/安装/配置
|
||||||
|
|
||||||
|
在指引你下载和安装 Gifine 之前,应该指出安装这个工具时需要安装的依赖包。
|
||||||
|
|
||||||
|
首先需要安装的依赖包是 FFmpeg , 这个软件包是一种记录、转化和流化音频以及视频的跨平台解决方案。使用下列命令安装这个工具;
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo apt-get install ffmpeg
|
||||||
|
```
|
||||||
|
|
||||||
|
接下来是图像处理系统 GraphicsMagick。这个工具的官网说:“它提供了一个稳健且高效的工具和库的集合,支持读写并且可以操作超过 88 种主要的图像格式,比如:DPX、 GIF、 JPEG、 JPEG-2000、 PNG、 PDF、 PNM 以及 TIFF 等。”
|
||||||
|
|
||||||
|
通过下面的命令安装:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo apt-get install graphicsmagick
|
||||||
|
```
|
||||||
|
|
||||||
|
接下来的需要的工具是 XrectSel 。在你移动鼠标选择区域的时候,它会显示矩形区域的坐标位置。我们只能通过源码安装 XrectSel ,你可以从 [这里][6] 下载它。
|
||||||
|
|
||||||
|
如果你下载了源码,接下来就可以解压下载的文件,进入解压后的目录中。然后,运行下列命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
./bootstrap
|
||||||
|
```
|
||||||
|
|
||||||
|
如果 `configure` 文件不存在,就需要使用上面的命令
|
||||||
|
|
||||||
|
```
|
||||||
|
./configure --prefix /usr
|
||||||
|
|
||||||
|
make
|
||||||
|
|
||||||
|
make DESTDIR="$directory" install
|
||||||
|
```
|
||||||
|
|
||||||
|
最后的依赖包是 Gifsicle 。这是一个命令行工具,可以创建、编辑、查看 GIF 图像和动画的属性信息。下载和安装 Gifsicle 相当容易,你只需要运行下列命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo apt-get install gifsicle
|
||||||
|
```
|
||||||
|
|
||||||
|
这些是所有的依赖包。现在,我们开始安装 Gifine 。使用下面的命令完成安装。
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo apt-get install luarocks
|
||||||
|
|
||||||
|
sudo luarocks install --server=http://luarocks.org/dev gifine
|
||||||
|
```
|
||||||
|
|
||||||
|
请注意第二个命令可能会返回下列错误:
|
||||||
|
|
||||||
|
```
|
||||||
|
No package 'gobject-introspection-1.0' found
|
||||||
|
```
|
||||||
|
|
||||||
|
你可以用下列命令安装这个包:
|
||||||
|
```
|
||||||
|
sudo apt-get install libgirepository1.0-dev
|
||||||
|
```
|
||||||
|
然后,再一次运行 'luarocks install' 命令。
|
||||||
|
|
||||||
|
### Gifine 使用
|
||||||
|
|
||||||
|
完成安装之后可以使用下面的命令运行这个工具:
|
||||||
|
|
||||||
|
```
|
||||||
|
gifine
|
||||||
|
```
|
||||||
|
|
||||||
|
这个应用程序的 UI 是这样的:
|
||||||
|
[
|
||||||
|

|
||||||
|
][7]
|
||||||
|
|
||||||
|
这里你可以进行两种操作:录视频帧或者加载视频帧。如果你单击了录制矩形区域(Record rectange)按钮,你的鼠标指针处会变成一个 `+` ,这样便可以在你的屏幕上选择一个矩形区域。一旦你选择了一个区域,录屏就开始了,录制矩形区域(Record rectange)按钮就会变成停止录制(Stop recording)按钮。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][8]
|
||||||
|
|
||||||
|
单击停止录制(Stop recording)完成录屏,会在 Gifine 窗口出现一些按钮。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][9]
|
||||||
|
|
||||||
|
用户界面的上半部分显示已经录制的视频帧,你可以使用它下面的滑块进行逐帧浏览。如果你想要删除第 5 帧之前或第 50 帧之后的所有帧数,你可以使用裁剪左边(Trim left of) 和裁剪右边(Trim rigth of)按钮进行裁剪。也有可以删除特定帧数和减半删除帧数的按钮,当然,你可以重置所有的裁剪操作。
|
||||||
|
|
||||||
|
完成了所有的裁剪后,可以使用保存 GIF(Save GIF...) 或保存 MP4(Save MP4...) 按钮将录屏保存为动画或者视频;你会看到可以设置帧延迟、帧率以及循环次数的选项。
|
||||||
|
|
||||||
|
记住,“录屏帧不会自动清除。如果你想重新加载,可以在初始屏幕中使用加载目录(load directory)按钮在 '/tmp' 目录中找到它们。“
|
||||||
|
|
||||||
|
### 总结
|
||||||
|
|
||||||
|
Gifine 的学习曲线并不陡峭 —— 所有的功能都会以按钮、文本的形式体现出来。
|
||||||
|
|
||||||
|
对我来说,最大的问题是安装 —— 需要一个个安装它的依赖包,还要处理可能出现的错误,这会困扰很多人。否则,从整体上看,Gifine 绝对称得上是一个不错的工具,如果你正在寻找这样的工具,不妨一试。
|
||||||
|
|
||||||
|
已经是 Gifine 用户?到目前为止你得到了什么经验?在评论区告诉我们。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/record-screen-to-animated-gif-on-linux/
|
||||||
|
|
||||||
|
作者:[Ansh][a]
|
||||||
|
译者:[vim-kakali](https://github.com/vim-kakali)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/record-screen-to-animated-gif-on-linux/
|
||||||
|
[1]:https://www.howtoforge.com/tutorial/record-screen-to-animated-gif-on-linux/#gifine
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/record-screen-to-animated-gif-on-linux/#gifine-downloadinstallationsetup
|
||||||
|
[3]:https://www.howtoforge.com/tutorial/record-screen-to-animated-gif-on-linux/#gifine-usage
|
||||||
|
[4]:https://www.howtoforge.com/tutorial/record-screen-to-animated-gif-on-linux/#conclusion
|
||||||
|
[5]:https://github.com/leafo/gifine
|
||||||
|
[6]:https://github.com/lolilolicon/xrectsel
|
||||||
|
[7]:https://www.howtoforge.com/images/record-screen-to-animated-gif-on-linux/big/gifine-ui.png
|
||||||
|
[8]:https://www.howtoforge.com/images/record-screen-to-animated-gif-on-linux/big/gifine-stop-rec.png
|
||||||
|
[9]:https://www.howtoforge.com/images/record-screen-to-animated-gif-on-linux/big/gifine-post-rec.png
|
@ -1,41 +1,42 @@
|
|||||||
使用开源工具探索气候数据的奥秘
|
使用开源工具探索气候数据的奥秘
|
||||||
============================================================[up][1]
|
============================================================
|
||||||
|
|
||||||

|

|
||||||
图片源自:
|
|
||||||
|
|
||||||
[Flickr user: theaucitron][2] (CC BY-SA 2.0)
|
图片源自: [Flickr user: theaucitron][2] (CC BY-SA 2.0)
|
||||||
|
|
||||||
如果这些天地球天气变化的不明显,你几乎无法察觉其中变化的格局。每个月,事实和数据都在向我们诠释一点——全球变暖。
|
如今你看地球上的任何地方,都可以找到天气变化的证据,每个月,无论是事实还是数据都在向我们诠释一点 —— 全球变暖。
|
||||||
|
|
||||||
气候学家如是告诫我们——如今的不作为,对于我们的将来可能是致命的。五角大楼高层[最近警告][3]当选总统的川普。申明如果不对气候变化有所动作,可能会造成威胁国家安全的灾难。愈趋减少的的水供应和微薄的降雨量会导致作物歉收,这将迫使大量的移民逃往世界各地,到那些可以维持他们生计的地方去。
|
气候学家如是告诫我们,如今的不作为,对于我们的将来可能是致命的。五角大楼的军事战略家[最近警告][3]当选总统的川普,向他申明如果不对气候变化有所动作,可能会造成威胁国家安全的灾难。愈趋减少的的水供应和微薄的降雨量会导致作物歉收,这将迫使大量的移民逃往世界各地,到那些可以维持他们生计的地方去。
|
||||||
|
|
||||||
遍览 NASA,美国国防部,以及其他机构针对气候的研究成果,我的心中有个疑惑。那就是是否有开源的工具,使对此感兴趣的人们能够自行去探索气候数据的奥秘,并总结出我们自己的结论。我在网上快速的检索了一下,然后找到了[Open Climate Workbench (开源气候工作台)][4],[Apache 软件基金会][5]旗下的一个工程。
|
遍览 NASA、美国国防部,以及其他机构针对气候的研究成果,我的心中有个疑惑。那就是是否有开源的工具,使对此感兴趣的人们能够自行去探索气候数据的奥秘,并总结出我们自己的结论。我在网上快速的检索了一下,然后找到了 [Open Climate Workbench (开源气候工作台)][4],这是 [Apache 软件基金会][5]旗下的一个工程。
|
||||||
|
|
||||||
Open Climate Workbench (缩写 OCW) 开发用于对来自[Earth System Grid Federation (地球系统网格联盟,缩写 ESGF)][6],[Coordinated Regional Climate Downscaling Experiment (协调区域气候降尺度实验,缩写 CORDEX)][7],美国全球变化研究计划的 [National Climate Assessment (国家气候研究)][8],[North American Regional Climate Assessment Program (北美区域气候评估计划)][9],和 NASA,NOAA,以及其他组织或机构的数据进行气候模型评价。
|
Open Climate Workbench (缩写 OCW) 开发该软件,对来自 [<ruby>地球系统网格联盟<rt>Earth System Grid Federation</rt></ruby>][6](缩写 ESGF)、[<ruby>协调区域气候降尺度实验<rt>Coordinated Regional Climate Downscaling Experiment</rt></ruby>][7](缩写 CORDEX)、美国全球变化研究项目的[<ruby>国家气候研究<rt> National Climate Assessment</rt></ruby>][8]、[<ruby>北美区域气候评估计划<rt>North American Regional Climate Assessment Program</rt></ruby>][9],以及 NASA、NOAA 和其他组织或机构的数据进行气候模型评价。
|
||||||
|
|
||||||
你可下载 OCW 的 [tar ball (压缩包)][10] 并将它安装到满足以下[条件][11]的 Linux 电脑上。也可以将它安装到 Vagrant 或者 VirtualBox 虚拟机中,详见 OCW 的[虚拟机指南][12]。
|
你可下载 OCW 的 [tar 包][10] 并将它安装到满足其[条件][11]的 Linux 电脑上。也可以使用 Vagrant 或者 VirtualBox 将 OCW 安装到虚拟机中,详见 OCW 的[虚拟机指南][12]。
|
||||||
|
|
||||||
个人觉得想要了解 OCW 是如何工作的,最便捷的方式就是到 Regional Climate Model Evaluation System (区域气候模式评价系统,缩写 RCMES)下载一个[虚拟机镜像][13]。
|
个人觉得想要了解 OCW 是如何工作的,最便捷的方式就是到 <ruby>区域气候模式评价系统<rt>Regional Climate Model Evaluation System </rt></ruby> (缩写 RCMES),下载一个[虚拟机镜像][13]。
|
||||||
|
|
||||||
从 RCMES 的网站上看,他们旨在通过为一系列广泛而全面的观测(例如,卫星观测,重新分析,现场观测)和建模资源(例如,[ESGF][16] 上的 [CMIP][14] 和 [CORDEX][15])提供标准化的访问,以及常规分析和可视化任务的工具(例如,OCW),来促进气候和地球系统模型的区域规模评估。
|
从 RCMES 的网站上看,他们旨在通过为一系列广泛而全面的观测(例如,卫星观测,重新分析,现场观测)和建模资源(例如,[ESGF][16] 上的 [CMIP][14] 和 [CORDEX][15])提供标准化的访问,以及常规分析和可视化任务的工具(例如,OCW),来促进气候和地球系统模型的区域规模评估。
|
||||||
|
|
||||||
你需要在宿主机上安装 VirtualBox 和 Vagrant。通过它们,你就能看到一个超赞的 OCW 作业示例。RCMES 为下载,导入,运行虚拟机提供了[详细的说明][17]。当你的虚拟机开始工作时,你可以用以下身份登陆。
|
你需要在宿主机上安装 VirtualBox 和 Vagrant。通过它们,你就能看到一个超赞的 OCW 作业示例。RCMES 为下载、导入、运行虚拟机提供了[详细的说明][17]。当你的虚拟机开始工作时,你可以用以下身份登陆。
|
||||||
|
|
||||||
** 用户名:vagrant,密码:vagrant。 **
|
**用户名:vagrant,密码:vagrant。**
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
RCMES 数据样图
|
*RCMES 数据样图*
|
||||||
|
|
||||||
RCMES 网页上的[教程][18]能帮助你迅速上手该软件。他们的[社区][19]十分活跃,而且看上去需要更多的[开发者][20]。 你也可以订阅他们[邮件列表][21]。
|
RCMES 网页上的[教程][18]能帮助你迅速上手该软件。他们的[社区][19]十分活跃,而且在寻找更多的[开发者][20]。 你也可以订阅他们[邮件列表][21]。
|
||||||
|
|
||||||
工程的[源代码][22]部署在 GitHub 上,遵寻 Apache License, Version 2.0。
|
该工程的[源代码][22]部署在 GitHub 上,遵寻 Apache License, Version 2.0。
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
作者简介:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Don Watkins(唐 沃特金斯) - 教育家,教育技术专家,企业家,开源支持者。心理学硕士,教育学硕士,Linux 系统管理员,CCNA,通过使用 Virtual Box 和 VMware 完成虚拟化。twitter 关注 @Don_Watkins。
|
Don Watkins(唐 沃特金斯) - 教育家,教育技术专家,企业家,开源支持者。教育心理学硕士,Linux 系统管理员,CCNA,使用 Virtual Box 实现虚拟化。twitter 关注 @Don_Watkins。
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -43,7 +44,7 @@ via: https://opensource.com/article/17/1/apache-open-climate-workbench
|
|||||||
|
|
||||||
作者:[Don Watkins][a]
|
作者:[Don Watkins][a]
|
||||||
译者:[martin2011qi](https://github.com/martin2011qi)
|
译者:[martin2011qi](https://github.com/martin2011qi)
|
||||||
校对:[校对者ID](https://github.com/校对者ID)
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
@ -1,16 +1,19 @@
|
|||||||
将另一台 Ubuntu DC 服务器加入到 Samba4 AD DC 实现双域控主机模式 ——(五)
|
Samba 系列(五):将另一台 Ubuntu DC 服务器加入到 Samba4 AD DC 实现双域控主机模式
|
||||||
============================================================
|
============================================================
|
||||||
|
|
||||||
这篇文章将讲解如何使用 **Ubuntu 16.04** 服务器版系统来创建第二台 **Samba4** 域控制器,并将其加入到已创建好的 **Samba AD DC** 林环境中,以便为一些关键的 AD DC 服务提供负载均衡及故障切换功能,尤其是为那些重要的服务,比如 DNS 服务和使用 SAM 数据库的 AD DC LDAP 模式。
|
这篇文章将讲解如何使用 **Ubuntu 16.04** 服务器版系统来创建第二台 **Samba4** 域控制器,并将其加入到已创建好的 **Samba AD DC** 林环境中,以便为一些关键的 AD DC 服务提供负载均衡及故障切换功能,尤其是为那些重要的服务,比如 DNS 服务和使用 SAM 数据库的 AD DC LDAP 模式。
|
||||||
|
|
||||||
#### 需求
|
#### 需求
|
||||||
|
|
||||||
1、 这篇文章是 **Samba4 AD DC** 系列的第**五**篇,前边几篇如下:
|
这篇文章是 **Samba4 AD DC** 系列的第**五**篇,前边几篇如下:
|
||||||
|
|
||||||
[在 Ubuntu16.04 系统上使用 Samba4 软件来创建活动目录架构(一)][1]
|
1、[在 Ubuntu16.04 系统上使用 Samba4 软件来创建活动目录架构(一)][1]
|
||||||
[在 Linux 命令行下管理 Samba4 AD 架构(二)][2]
|
|
||||||
[使用 Windows 10 系统的 RSAT 工具来管理 Samba4 活动目录架构 (三)][3]
|
2、[在 Linux 命令行下管理 Samba4 AD 架构(二)][2]
|
||||||
[在 Windows 系统下管理 Samba4 AD 域管制器 DNS 和组策略(四)][4]
|
|
||||||
|
3、[使用 Windows 10 系统的 RSAT 工具来管理 Samba4 活动目录架构 (三)][3]
|
||||||
|
|
||||||
|
4、[在 Windows 系统下管理 Samba4 AD 域管制器 DNS 和组策略(四)][4]
|
||||||
|
|
||||||
### 第一步:为设置 Samba4 进行初始化配置
|
### 第一步:为设置 Samba4 进行初始化配置
|
||||||
|
|
||||||
@ -24,7 +27,7 @@
|
|||||||
# hostnamectl set-hostname adc2
|
# hostnamectl set-hostname adc2
|
||||||
```
|
```
|
||||||
|
|
||||||
或者你也可以手动编辑 **/etc/hostname** 文件,在新的一行输入你想设置的主机名。
|
或者你也可以手动编辑 `/etc/hostname` 文件,在新的一行输入你想设置的主机名。
|
||||||
|
|
||||||
```
|
```
|
||||||
# nano /etc/hostname
|
# nano /etc/hostname
|
||||||
@ -55,11 +58,11 @@ IP_of_main_DC FQDN_of_main_DC short_name_of_main_DC
|
|||||||
|
|
||||||
*为 Samba4 AD DC 服务器设置主机名*
|
*为 Samba4 AD DC 服务器设置主机名*
|
||||||
|
|
||||||
3、下一步,打开 **/etc/network/interfaces** 配置文件并设置一个静态 IP 地址,如下图所示:
|
3、下一步,打开 `/etc/network/interfaces` 配置文件并设置一个静态 IP 地址,如下图所示:
|
||||||
|
|
||||||
注意 **dns-nameservers** 和 **dns-search** 这两个参数的值。为了使 DNS 解析正常工作,需要把这两个值设置成主 Samba4 AD DC 服务器的 IP 地址和域名。
|
注意 `dns-nameservers` 和 `dns-search` 这两个参数的值。为了使 DNS 解析正常工作,需要把这两个值设置成主 Samba4 AD DC 服务器的 IP 地址和域名。
|
||||||
|
|
||||||
重启网卡服务以让修改的配置生效。检查 **/etc/resolv.conf** 文件,确保该网卡上配置的这两个 DNS 的值已更新到这个文件。
|
重启网卡服务以让修改的配置生效。检查 `/etc/resolv.conf` 文件,确保该网卡上配置的这两个 DNS 的值已更新到这个文件。
|
||||||
|
|
||||||
```
|
```
|
||||||
# nano /etc/network/interfaces
|
# nano /etc/network/interfaces
|
||||||
@ -90,7 +93,7 @@ dns-search tecmint.lan
|
|||||||
|
|
||||||
*配置 Samba4 AD 服务器的 DNS*
|
*配置 Samba4 AD 服务器的 DNS*
|
||||||
|
|
||||||
当你通过简写名称(用于构建 FQDN 名)查询主机名时, **dns-search** 值将会自动把域名添加上。
|
当你通过简写名称(用于构建 FQDN 名)查询主机名时, `dns-search` 值将会自动把域名添加上。
|
||||||
|
|
||||||
4、为了测试 DNS 解析是否正常,使用一系列 ping 命令测试,命令后分别为简写名, FQDN 名和域名,如下图所示:
|
4、为了测试 DNS 解析是否正常,使用一系列 ping 命令测试,命令后分别为简写名, FQDN 名和域名,如下图所示:
|
||||||
|
|
||||||
@ -108,7 +111,7 @@ dns-search tecmint.lan
|
|||||||
# apt-get install ntpdate
|
# apt-get install ntpdate
|
||||||
```
|
```
|
||||||
|
|
||||||
6、假设你想手动强制本地服务器与 **samba4 AD DC** 服务器时间同步,使用 **ntpdate** 命令加上主域控服务器的主机名,如下所示:
|
6、假设你想手动强制本地服务器与 **samba4 AD DC** 服务器时间同步,使用 `ntpdate` 命令加上主域控服务器的主机名,如下所示:
|
||||||
|
|
||||||
```
|
```
|
||||||
# ntpdate adc1
|
# ntpdate adc1
|
||||||
@ -121,7 +124,7 @@ dns-search tecmint.lan
|
|||||||
|
|
||||||
### 第 2 步:安装 Samba4 必须的依赖包
|
### 第 2 步:安装 Samba4 必须的依赖包
|
||||||
|
|
||||||
7、为了让 **Ubuntu 16.04** 系统加入到你的域中,你需要通过下面的命令从 Ubuntu 官方软件库中安装 **Samba4 套件, Kerberos** 客户端和其它一些重要的软件包以便将来使用:
|
7、为了让 **Ubuntu 16.04** 系统加入到你的域中,你需要通过下面的命令从 Ubuntu 官方软件库中安装 **Samba4 套件、 Kerberos 客户端** 和其它一些重要的软件包以便将来使用:
|
||||||
|
|
||||||
```
|
```
|
||||||
# apt-get install samba krb5-user krb5-config winbind libpam-winbind libnss-winbind
|
# apt-get install samba krb5-user krb5-config winbind libpam-winbind libnss-winbind
|
||||||
@ -132,7 +135,7 @@ dns-search tecmint.lan
|
|||||||
|
|
||||||
*在 Ubuntu 系统中安装 Samba4*
|
*在 Ubuntu 系统中安装 Samba4*
|
||||||
|
|
||||||
8、在安装的过程中,你需要提供 Kerberos 域名。输入大写的域名然后按 [Enter] 键完成安装过程。
|
8、在安装的过程中,你需要提供 Kerberos 域名。输入大写的域名然后按回车键完成安装过程。
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
@ -140,7 +143,7 @@ dns-search tecmint.lan
|
|||||||
|
|
||||||
*为 Samba4 配置 Kerberos 认证*
|
*为 Samba4 配置 Kerberos 认证*
|
||||||
|
|
||||||
9、所有依赖包安装完成后,通过使用 kinit 命令为域管理员请求一个 Kerberos 票据以验证设置是否正确。使用 klist 命令来列出已授权的 kerberos 票据信息。
|
9、所有依赖包安装完成后,通过使用 `kinit` 命令为域管理员请求一个 Kerberos 票据以验证设置是否正确。使用 `klist` 命令来列出已授权的 kerberos 票据信息。
|
||||||
|
|
||||||
```
|
```
|
||||||
# kinit domain-admin-user@YOUR_DOMAIN.TLD
|
# kinit domain-admin-user@YOUR_DOMAIN.TLD
|
||||||
@ -161,7 +164,7 @@ dns-search tecmint.lan
|
|||||||
# mv /etc/samba/smb.conf /etc/samba/smb.conf.initial
|
# mv /etc/samba/smb.conf /etc/samba/smb.conf.initial
|
||||||
```
|
```
|
||||||
|
|
||||||
11、在准备加入域前,先启动 **samba-ad-dc** 服务,之后使用域管理员账号运行 **samba-tool** 命令将服务器加入到域。
|
11、在准备加入域前,先启动 **samba-ad-dc** 服务,之后使用域管理员账号运行 `samba-tool` 命令将服务器加入到域。
|
||||||
|
|
||||||
```
|
```
|
||||||
# samba-tool domain join your_domain -U "your_domain_admin"
|
# samba-tool domain join your_domain -U "your_domain_admin"
|
||||||
@ -170,10 +173,10 @@ dns-search tecmint.lan
|
|||||||
加入域过程部分截图:
|
加入域过程部分截图:
|
||||||
|
|
||||||
```
|
```
|
||||||
# samba-tool domain join tecmint.lan DC -U"tecmint_user"
|
# samba-tool domain join tecmint.lan DC -U "tecmint_user"
|
||||||
```
|
```
|
||||||
|
|
||||||
##### 输出示例
|
输出示例:
|
||||||
|
|
||||||
```
|
```
|
||||||
Finding a writeable DC for domain 'tecmint.lan'
|
Finding a writeable DC for domain 'tecmint.lan'
|
||||||
@ -242,7 +245,7 @@ Joined domain TECMINT (SID S-1-5-21-715537322-3397311598-55032968) as a DC
|
|||||||
# nano /etc/samba/smb.conf
|
# nano /etc/samba/smb.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
添加以下内容到 smb.conf 配置文件中。
|
添加以下内容到 `smb.conf` 配置文件中。
|
||||||
|
|
||||||
```
|
```
|
||||||
dns forwarder = 192.168.1.1
|
dns forwarder = 192.168.1.1
|
||||||
@ -255,7 +258,7 @@ winbind enum users = yes
|
|||||||
winbind enum groups = yes
|
winbind enum groups = yes
|
||||||
```
|
```
|
||||||
|
|
||||||
使用你自己的 **DNS forwarder IP** 地址替换掉上面地址。 Samba 将会把域权威区之外的所有 DNS 解析查询转发到这个 IP 地址。
|
使用你自己的 **DNS 转发器 IP** 地址替换掉上面 `dns forwarder` 地址。 Samba 将会把域权威区之外的所有 DNS 解析查询转发到这个 IP 地址。
|
||||||
|
|
||||||
13、最后,重启 samba 服务以使修改的配置生效,然后执行如下命令来检查活动目录复制功能是否正常。
|
13、最后,重启 samba 服务以使修改的配置生效,然后执行如下命令来检查活动目录复制功能是否正常。
|
||||||
|
|
||||||
@ -270,9 +273,9 @@ winbind enum groups = yes
|
|||||||
|
|
||||||
*配置 Samba4 DNS*
|
*配置 Samba4 DNS*
|
||||||
|
|
||||||
14、另外,还需要重命名原来的 /etc 下的 kerberos 配置文件,并使用在加入域的过程中 Samba 生成的新配置文件 krb5.conf 替换它。
|
14、另外,还需要重命名原来的 `/etc `下的 kerberos 配置文件,并使用在加入域的过程中 Samba 生成的新配置文件 krb5.conf 替换它。
|
||||||
|
|
||||||
Samba 生成的新配置文件在 /var/lib/samba/private 目录下。使用 Linux 的符号链接将该文件链接到 /etc 目录。
|
Samba 生成的新配置文件在 `/var/lib/samba/private` 目录下。使用 Linux 的符号链接将该文件链接到 `/etc` 目录。
|
||||||
|
|
||||||
```
|
```
|
||||||
# mv /etc/krb6.conf /etc/krb5.conf.initial
|
# mv /etc/krb6.conf /etc/krb5.conf.initial
|
||||||
@ -285,7 +288,7 @@ Samba 生成的新配置文件在 /var/lib/samba/private 目录下。使用 Linu
|
|||||||
|
|
||||||
*配置 Kerberos*
|
*配置 Kerberos*
|
||||||
|
|
||||||
15、同样,使用 samba 的 **krb5.conf** 配置文件验证 Kerberos 认证是否正常。通过以下命令来请求一个管理员账号的票据并且列出已缓存的票据信息。
|
15、同样,使用 samba 的 `krb5.conf` 配置文件验证 Kerberos 认证是否正常。通过以下命令来请求一个管理员账号的票据并且列出已缓存的票据信息。
|
||||||
|
|
||||||
```
|
```
|
||||||
# kinit administrator
|
# kinit administrator
|
||||||
@ -299,7 +302,7 @@ Samba 生成的新配置文件在 /var/lib/samba/private 目录下。使用 Linu
|
|||||||
|
|
||||||
### 第 4 步:验证其它域服务
|
### 第 4 步:验证其它域服务
|
||||||
|
|
||||||
16、你首先要做的一个测试就是验证 **Samba4 DC DNS** 解析服务是否正常。要验证域 DNS 解析情况,使用 host 命令,加上一些重要的 AD DNS 记录,进行域名查询,如下图所示:
|
16、你首先要做的一个测试就是验证 **Samba4 DC DNS** 解析服务是否正常。要验证域 DNS 解析情况,使用 `host` 命令,加上一些重要的 AD DNS 记录,进行域名查询,如下图所示:
|
||||||
|
|
||||||
每一次查询,DNS 服务器都应该返回两个 IP 地址。
|
每一次查询,DNS 服务器都应该返回两个 IP 地址。
|
||||||
|
|
||||||
@ -322,15 +325,15 @@ Samba 生成的新配置文件在 /var/lib/samba/private 目录下。使用 Linu
|
|||||||
|
|
||||||
*通过 Windows RSAT 工具来验证 DNS 记录*
|
*通过 Windows RSAT 工具来验证 DNS 记录*
|
||||||
|
|
||||||
18、下一个验证是检查域 LDAP 复制同步是否正常。使用 **samba-tool** 工具,在第二个域控制器上创建一个账号,然后检查该账号是否自动同步到第一个 Samba4 AD DC 服务器上。
|
18、下一个验证是检查域 LDAP 复制同步是否正常。使用 `samba-tool` 工具,在第二个域控制器上创建一个账号,然后检查该账号是否自动同步到第一个 Samba4 AD DC 服务器上。
|
||||||
|
|
||||||
##### On adc2:
|
在 adc2 上:
|
||||||
|
|
||||||
```
|
```
|
||||||
# samba-tool user add test_user
|
# samba-tool user add test_user
|
||||||
```
|
```
|
||||||
|
|
||||||
##### On adc1:
|
在 adc1 上:
|
||||||
|
|
||||||
```
|
```
|
||||||
# samba-tool user list | grep test_user
|
# samba-tool user list | grep test_user
|
||||||
@ -349,7 +352,7 @@ Samba 生成的新配置文件在 /var/lib/samba/private 目录下。使用 Linu
|
|||||||
|
|
||||||
19、你也可以从 **Microsoft AD DC** 控制台创建一个账号,然后验证该账号是否都出现在两个域控服务器上。
|
19、你也可以从 **Microsoft AD DC** 控制台创建一个账号,然后验证该账号是否都出现在两个域控服务器上。
|
||||||
|
|
||||||
默认情况下,这个账号都应该在两个 samba 域控制器上自动创建完成。在 `adc1` 服务器上使用 **wbinfo** 命令查询该账号名。
|
默认情况下,这个账号都应该在两个 samba 域控制器上自动创建完成。在 `adc1` 服务器上使用 `wbinfo` 命令查询该账号名。
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
@ -0,0 +1,139 @@
|
|||||||
|
Linux 命令行工具使用小贴士及技巧(一)
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
### 相关内容
|
||||||
|
|
||||||
|
如果你刚开始在 Linux 系统中使用命令行工具,那么你应该知道它是 Linux 操作系统中功能最强大和有用的工具之一。学习的难易程度跟你想研究的深度有关。但是,无论你的技术能力水平怎么样,这篇文章中的一些小贴士和技巧都会对你有所帮助。
|
||||||
|
|
||||||
|
在本系列的文章中,我们将会讨论一些非常有用的命令行工具使用小技巧,希望你的命令行使用体验更加愉快。
|
||||||
|
|
||||||
|
**但是在开始下一步之前,我得强调一点,这篇文章中的测试实例都是在 Ubuntu 14.04LTS 系统下测试通过的。我们使用命令行 Shell 版本是 bash 4.3.11 。**
|
||||||
|
|
||||||
|
### Linux 命令行工具使用的一些小技巧
|
||||||
|
|
||||||
|
我们假设你已经掌握了一些 Linux 命令行的基础知识,比如什么是 root 账号及 home 目录,什么是环境变量,如何查看目录内容等等。说明这些小技巧的同时也会介绍涉及到的概念,如果有的话。
|
||||||
|
|
||||||
|
#### 轻松切换目录 —— 快捷方式
|
||||||
|
|
||||||
|
假设你正在命令行下做一些操作,并且你需要经常在两个目录间来回切换。而且这两个目录在完全不同的两个路径下,比如说,分别在 `/home/` 和 `/usr/` 下。你会怎么做呢?
|
||||||
|
|
||||||
|
其中,最简单直接的方式就是输入这些目录的全路径。虽然这种方式本身没什么问题,但是却很浪费时间。另外一种方式就是打开两个终端窗口分别进行操作。但是这两种方式使用起来既不方便,也显得没啥技术含量。
|
||||||
|
|
||||||
|
你应该感到庆幸的是,还有另外一种更为简捷的方法来解决这个问题。你需要做的就是先手动切换到这两个目录(通过 `cd` 命令分别加上各自的路径),之后你就可以使用 `cd -` 命令在两个目录之间来回快速切换了。
|
||||||
|
|
||||||
|
例如:
|
||||||
|
|
||||||
|
我现在在下面的目录:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ pwd
|
||||||
|
/home/himanshu/Downloads
|
||||||
|
```
|
||||||
|
|
||||||
|
然后,我切换到 `/usr/` 路径下的其它目录:
|
||||||
|
|
||||||
|
```
|
||||||
|
cd /usr/lib/
|
||||||
|
```
|
||||||
|
|
||||||
|
现在,我可以很方便的使用下面的命令来向前、向后快速地切换到两个目录:
|
||||||
|
|
||||||
|
```
|
||||||
|
cd -
|
||||||
|
```
|
||||||
|
|
||||||
|
下面是 `cd -` 命令的操作截图:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][5]
|
||||||
|
|
||||||
|
有一点我得跟大家强调下,如果你在操作的过程中使用 `cd` 加路径的方式切换到第三个目录下,那么 `cd -` 命令将应用于当前目录及第三个目录之间进行切换。
|
||||||
|
|
||||||
|
#### 轻松切换目录 —— 相关细节
|
||||||
|
|
||||||
|
对于那些有强烈好奇心的用户,他们想搞懂 `cd -` 的工作原理,解释如下:如大家所知道的那样, `cd` 命令需要加上一个路径作为它的参数。现在,当 `-` 符号作为参数传输给 `cd` 命令时,它将被 `OLDPWD` 环境变量的值所替代。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][6]
|
||||||
|
|
||||||
|
现在应该明白了吧, `OLDPWD` 环境变量存储的是前一个操作目录的路径。这个解释在 `cd` 命令的 man 帮助文档中有说明,但是,很遗憾的是你的系统中可能没有预先安装 `man` 命令帮助工具(至少在 Ubuntu 系统下没有安装)。
|
||||||
|
|
||||||
|
但是,安装这个 man 帮助工具也很简单,你只需要执行下的安装命令即可:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo apt-get install manpages-posix
|
||||||
|
```
|
||||||
|
|
||||||
|
然后做如下操作:
|
||||||
|
|
||||||
|
```
|
||||||
|
man cd
|
||||||
|
```
|
||||||
|
|
||||||
|
打开 man 帮助文档主页后,你将会看到下面很明确的解释:
|
||||||
|
|
||||||
|
```
|
||||||
|
—— 当 - 符号被用作 cd 命令的参数值时,将等同于下面的操作命令:
|
||||||
|
|
||||||
|
cd "$OLDPWD" && pwd
|
||||||
|
```
|
||||||
|
|
||||||
|
毫无疑问, `cd` 命令设置了 `OLDPWD` 环境变量值。因此每一次你切换操作目录时,上一个目录的路径就会被保存到这个变量里。这还让我们看到很重要的一点就是:任何时候启动一个新的 shell 实例(包括手动执行或是使用 shell 脚本),都不存在 ‘上一个工作目录’。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][7]
|
||||||
|
|
||||||
|
这也很符合逻辑,因为 `cd` 命令设置了 `OLDPWD` 环境变量值。因此,除非你至少执行了一次 `cd` 命令,否则 `OLDPWD` 环境变量不会包含任何值。
|
||||||
|
|
||||||
|
继续,尽管这有些难以理解, `cd -` 和 `cd $OLDWPD` 命令的执行结果并非在所有环境下都相同。比如说,你重新打开一个新的 shell 窗口时。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][8]
|
||||||
|
|
||||||
|
从上面的截图可以清楚的看出,当执行 `cd -` 命令提示未设置 `OLDPWD` 值时, `cd $OLDPWD` 命令没有报任何错;实际上,它把当前的工作目录改变到用户的 home 目录里。
|
||||||
|
|
||||||
|
那是因为 `OLDPWD` 变量目前还没有被设置, `$OLDPWD` 仅仅是一个空字符串。因此, `cd $OLDPWD` 命令跟 `cd` 命令的执行结果是一致的,默认情况下,会把用户当前的工作目录切换到用户的 home 目录里。
|
||||||
|
|
||||||
|
最后,我还遇到过这样的要求,需要让 `cd -` 命令执行的结果不显示出来。我的意思是,有这样的情况(比如说,在写 shell 脚本的时候),你想让 `cd -` 命令的执行结果不要把目录信息显示出来。那种情况下,你就可以使用下面的命令方式了:
|
||||||
|
|
||||||
|
```
|
||||||
|
cd - &>/dev/null
|
||||||
|
```
|
||||||
|
|
||||||
|
上面的命令把文件描述符 2(标准输入)和 1(标准输出)的结果重定向到 [`/dev/null`][9] 目录。这意味着,这个命令产生的所有的错误不会显示出来。但是,你也可以使用通用的 [`$?` 方式][10]来检查这个命令的执行是否异常。如果这个命令执行报错, `echo $?` 将会返回 `1`,否则返回 `0`。
|
||||||
|
|
||||||
|
或者说,如果你觉得 `cd -` 命令出错时输出信息没有关系,你也可以使用下面的命令来代替:
|
||||||
|
|
||||||
|
```
|
||||||
|
cd - > /dev/null
|
||||||
|
```
|
||||||
|
|
||||||
|
这个命令仅用于将文件描述符 1 (标准输出)重定向到 `/dev/null` 。
|
||||||
|
|
||||||
|
### 总结
|
||||||
|
|
||||||
|
遗憾的是,这篇文章仅包含了一个跟命令行相关的小技巧,但是,我们已经地对 `cd -` 命令的使用进行了深入地探讨。建议你在自己的 Linux 系统的命令行终端中测试本文中的实例。此外,也强烈建议你查看 man 帮助文档,然后对 cd 命令进行全面测试。
|
||||||
|
|
||||||
|
如果你对这篇文章有什么疑问,请在下面的评论区跟大家交流。同时,敬请关注下一篇文章,我们将以同样的方式探讨更多有用的命令行使用技巧。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/linux-command-line-navigation-tips-and-tricks-part-1/
|
||||||
|
|
||||||
|
作者:[Ansh][a]
|
||||||
|
译者:[rusking](https://github.com/rusking)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/linux-command-line-navigation-tips-and-tricks-part-1/
|
||||||
|
[5]:https://www.howtoforge.com/images/linux-command-line-tips-for-beginners/big/cmd-line-tips.png
|
||||||
|
[6]:https://www.howtoforge.com/images/linux-command-line-tips-for-beginners/big/cmd-line-tips-oldpwd.png
|
||||||
|
[7]:https://www.howtoforge.com/images/linux-command-line-tips-for-beginners/big/cmd-line-tips-no-oldpwd.png
|
||||||
|
[8]:https://www.howtoforge.com/images/linux-command-line-tips-for-beginners/big/cmd-line-tips-oldpwd-home.png
|
||||||
|
[9]:https://en.wikipedia.org/wiki/Null_device
|
||||||
|
[10]:http://askubuntu.com/questions/29370/how-to-check-if-a-command-succeeded
|
94
published/201703/20170111 NMAP Common Scans – Part One.md
Normal file
94
published/201703/20170111 NMAP Common Scans – Part One.md
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
NMAP 常用扫描简介(一)
|
||||||
|
========================
|
||||||
|
|
||||||
|
我们之前在 [NMAP 的安装][1]一文中,列出了 10 种不同的 ZeNMAP 扫描模式。大多数的模式使用了各种参数。各种参数代表了执行不同的扫描模式。这篇文章将介绍其中的四种通用的扫描类型。
|
||||||
|
|
||||||
|
### 四种通用扫描类型
|
||||||
|
|
||||||
|
下面列出了最常使用的四种扫描类型:
|
||||||
|
|
||||||
|
1. PING 扫描 (`-sP`)
|
||||||
|
2. TCP SYN 扫描 (`-sS`)
|
||||||
|
3. TCP Connect() 扫描 (`-sT`)
|
||||||
|
4. UDP 扫描 (`-sU`)
|
||||||
|
|
||||||
|
当我们利用 NMAP 来执行扫描的时候,这四种扫描类型是我们需要熟练掌握的。更重要的是需要知道这些命令做了什么并且需要知道这些命令是怎么做的。本文将介绍 PING 扫描和 UDP 扫描。在之后的文中会介绍 TCP 扫描。
|
||||||
|
|
||||||
|
### PING 扫描 (-sP)
|
||||||
|
|
||||||
|
某些扫描会造成网络拥塞,然而 Ping 扫描在网络中最多只会产生两个包。当然这两个包不包括可能需要的 DNS 搜索和 ARP 请求。每个被扫描的 IP 最少只需要一个包来完成 Ping 扫描。
|
||||||
|
|
||||||
|
通常 Ping 扫描是用来查看在指定的 IP 地址上是否有在线的主机存在。例如,当我拥有网络连接却连不上一台指定的网络服务器的时候,我就可以使用 PING 来判断这台服务器是否在线。PING 同样也可以用来验证我的当前设备与网络服务器之间的路由是否正常。
|
||||||
|
|
||||||
|
**注意:** 当我们讨论 TCP/IP 的时候,相关信息在使用 TCP/IP 协议的互联网与局域网(LAN)中都是相当有用的。这些程序都能工作。同样在广域网(WAN)也能工作得相当好。
|
||||||
|
|
||||||
|
当参数给出的是一个域名的时候,我们就需要域名解析服务来找到相对应的 IP 地址,这个时候将会生成一些额外的包。例如,当我们执行 `ping linuxforum.com` 的时候,需要首先请求域名(linuxforum.com)的 IP 地址(98.124.199.63)。当我们执行 `ping 98.124.199.63` 的时候 DNS 查询就不需要了。当 MAC 地址未知的时候,就需要发送 ARP 请求来获取指定 IP 地址的 MAC 地址了(LCTT 译注:这里的指定 IP 地址,未必是目的 IP)。
|
||||||
|
|
||||||
|
Ping 命令会向指定的 IP 地址发送一个英特网信息控制协议(ICMP)包。这个包是需要响应的 ICMP Echo 请求。当服务器系统在线的状态下我们会得到一个响应包。当两个系统之间存在防火墙的时候,PING 请求包可能会被防火墙丢弃。一些服务器也会被配置成不响应 PING 请求来避免可能发生的死亡之 PING。(LCTT 译注:现在的操作系统似乎不太可能)
|
||||||
|
|
||||||
|
**注意:** 死亡之 PING 是一种恶意构造的 PING 包当它被发送到系统的时候,会造成被打开的连接等待一个 rest 包。一旦有一堆这样的恶意请求被系统响应,由于所有的可用连接都已经被打开,所以系统将会拒绝所有其它的连接。技术上来说这种状态下的系统就是不可达的。
|
||||||
|
|
||||||
|
当系统收到 ICMP Echo 请求后它将会返回一个 ICMP Echo 响应。当源系统收到 ICMP Echo 响应后我们就能知道目的系统是在线可达的。
|
||||||
|
|
||||||
|
使用 NMAP 的时候你可以指定单个 IP 地址也可以指定某个 IP 地址段。当被指定为 PING 扫描(`-sP`)的时候,会对每一个 IP 地址执行 PING 命令。
|
||||||
|
|
||||||
|
在图 1 中你可以看到我执行 `nmap -sP 10.0.0.1-10` 命令后的结果。程序会试着联系 IP 地址 10.0.0.1 到 10.0.0.10 之间的每个系统。对每个 IP 地址都要发出三个 ARP 请求。在我们的例子中发出了三十个请求,这 10 个 IP 地址里面有两个有回应。(LCTT 译注:此处原文存疑。)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*图 1*
|
||||||
|
|
||||||
|
图 2 中展示了网络上另一台计算机利用 Wireshark 抓取的发出的请求——没错,是在 Windows 系统下完成这次抓取的。第一行展示了发出的第一条请求,广播请求的是 IP 地址 10.0.0.2 对应 MAC 地址。由于 NMAP 是在 10.0.0.1 这台机器上执行的,因此 10.0.0.1 被略过了。由于本机 IP 地址被略过,我们现在可以看到总共只发出了 27 个 ARP 请求。第二行展示了 10.0.0.2 这台机器的 ARP 响应。第三行到第十行是其它八个 IP 地址的 ARP 请求。第十一行是由于 10.0.0.2 没有收到请求系统(10.0.0.1)的反馈所以(重新)发送的另一个 ARP 响应。第十二行是源系统向 10.0.0.2 发起的 HTTP 连接的 ‘SYN’ 和 Sequence 0。第十三行和第十四行的两次 Restart(RST)和 Synchronize(SYN)响应是用来关闭(和重发)第十二行所打开的连接的。注意 Sequence ID 是 ‘1’ - 是源 Sequence ID + 1。第十五行开始就是类似相同的内容。(LCTT 译注:此处原文有误,根据情况已经修改。)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*图 2*
|
||||||
|
|
||||||
|
回到图 1 中我们可以看到有两台主机在线。其中一台是本机(10.0.0.1)另一台是(10.0.0.2)。整个扫描花费了 14.40 秒。
|
||||||
|
|
||||||
|
PING 扫描是一种用来发现在线主机的快速扫描方式。扫描结果中没有关于网络、系统的其它信息。这是一种较好的初步发现网络上在线主机的方式,接着你就可以针对在线系统执行更加复杂的扫描了。你可能还会发现一些不应该出现在网络上的系统。出现在网络上的流氓软件是很危险的,他们可以很轻易的收集内网信息和相关的系统信息。
|
||||||
|
|
||||||
|
一旦你获得了在线系统的列表,你就可以使用 UDP 扫描来查看哪些端口是可能开启了的。
|
||||||
|
|
||||||
|
### UDP 扫描 (-sU)
|
||||||
|
|
||||||
|
现在你已经知道了有那些系统是在线的,你的扫描就可以聚焦在这些 IP 地址之上。在整个网络上执行大量的没有针对性的扫描活动可不是一个好主意,系统管理员可以使用程序来监控网络流量当有大量异常活动发生的时候就会触发警报。
|
||||||
|
|
||||||
|
用户数据报协议(UDP)在发现在线系统的开放端口方面十分有用。由于 UDP 不是一个面向连接的协议,因此是不需要响应的。这种扫描方式可以向指定的端口发送一个 UDP 包。如果目标系统没有回应那么这个端口可能是关闭的也可能是被过滤了的。如果端口是开放状态的那么应该会有一个响应。在大多数的情况下目标系统会返回一个 ICMP 信息说端口不可达。ICMP 信息让 NMAP 知道端口是被关闭了。如果端口是开启的状态那么目标系统应该响应 ICMP 信息来告知 NMAP 端口可达。
|
||||||
|
|
||||||
|
**注意: **只有最前面的 1024 个常用端口会被扫描。(LCTT 译注:这里将 1000 改成了1024,因为手册中写的是默认扫描 1 到 1024 端口)在后面的文章中我们会介绍如何进行深度扫描。
|
||||||
|
|
||||||
|
由于我知道 10.0.0.2 这个主机是在线的,因此我只会针对这个 IP 地址来执行扫描。扫描过程中总共收发了 3278 个包。`sudo nmap -sU 10.0.0.2` 这个命令的输出结果在图 3 中展现。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*图 3*
|
||||||
|
|
||||||
|
在这副图中你可以看见端口 137(netbios-ns)被发现是开放的。在图 4 中展示了 Wireshark 抓包的结果。不能看到所有抓取的包,但是可以看到一长串的 UDP 包。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*图 4*
|
||||||
|
|
||||||
|
如果我把目标系统上的防火墙关闭之后会发生什么呢?我的结果有那么一点的不同。NMAP 命令的执行结果在图 5 中展示。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*图 5*
|
||||||
|
|
||||||
|
**注意:** 当你执行 UDP 扫描的时候是需要 root 权限的。
|
||||||
|
|
||||||
|
会产生大量的包是由于我们使用了 UDP。当 NMAP 发送 UDP 请求时它是不保证数据包会被收到的。因为数据包可能会在中途丢失因此它会多次发送请求。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.linuxforum.com/threads/nmap-common-scans-part-one.3637/
|
||||||
|
|
||||||
|
作者:[Jarret][a]
|
||||||
|
译者:[wcnnbdk1](https://github.com/wcnnbdk1)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.linuxforum.com/members/jarret.268/
|
||||||
|
[1]:https://www.linuxforum.com/threads/nmap-installation.3431/
|
@ -1,4 +1,4 @@
|
|||||||
Odoo提速指南
|
Odoo 提速指南
|
||||||
============================================================
|
============================================================
|
||||||
|
|
||||||

|

|
||||||
@ -9,19 +9,19 @@ Odoo 是最流行的 ERP(企业资源计划)软件,它由 Python 编写,
|
|||||||
|
|
||||||
* 使用一个快速磁盘驱动器来存储(最好是 SSD)。
|
* 使用一个快速磁盘驱动器来存储(最好是 SSD)。
|
||||||
* 使用[内存充足的 Linux VPS][1]。
|
* 使用[内存充足的 Linux VPS][1]。
|
||||||
* 在 Odoo 中激活多重处理模式。
|
* 在 Odoo 中激活<ruby>多处理器模式<rt>multiprocessing mode</rt></ruby>。
|
||||||
* 正确配置并优化 PostgreSQL 服务。
|
* 正确配置并优化 PostgreSQL 服务。
|
||||||
|
|
||||||
### 获得一台有着更多内存的 SSD VPS
|
### 获得一台有着更多内存的 SSD VPS
|
||||||
|
|
||||||
正如我们先前提到的,随机磁盘访问速度时 Odoo 的主要瓶颈之一。因此,要确保 Odoo 部署在一台[基于 SSD 的 VPS][2] 上。由于 Odoo 是一个对资源十分敏感的应用,因此始终要把它安装在一台有着更多 RAM 的 VPS 上,如果可能,将整个 Odoo 实例及其数据库加载到 RAM 中。固态磁盘驱动器尤其以随机存取见长,而且由于 SSD 没有任何活动部件,它们能够取得数百倍于传统机械硬盘驱动器的随机存取 IOPS。如果服务器没有采用 SSD 来驱动或提速,那么不管你对 Odoo 做多少优化和配置都无济于事,它仍然会很慢。所以,获得正确的主机来部署 Odoo 是提升其性能的最重要因素。
|
正如我们先前提到的,随机磁盘访问速度是 Odoo 的主要瓶颈之一。因此,要确保 Odoo 部署在一台[基于 SSD 的 VPS][2] 上。由于 Odoo 是一个对资源十分敏感的应用,因此始终要把它安装在一台有着更多 RAM 的 VPS 上,如果可能,将整个 Odoo 实例及其数据库加载到 RAM 中。固态磁盘驱动器尤其以随机存取见长,而且由于 SSD 没有任何活动部件,它们能够取得数百倍于传统机械硬盘驱动器的随机存取 IOPS(LCTT译注:即每秒读写操作的次数)。如果服务器没有采用 SSD 来驱动或提速,那么不管你对 Odoo 做多少优化和配置都无济于事,它仍然会很慢。所以,获得正确的主机来部署 Odoo 是提升其性能的最重要因素。
|
||||||
|
|
||||||
跟大家提过 Odoo 是一个资源饥渴的应用有没有?貌似说过吧。但是不要担心,RoseHosting 将为你们提供一个终极解决方案——一台为性能而量身定做的 [Odoo SSD VPS][3],为匹配你的最大需求而优化。来,从我们这搞一台 SSD VPS 吧,你会发现什么才真的叫 Odoo 破纪录的速度。
|
|
||||||
|
|
||||||
其它 Odoo 优化包括:
|
其它 Odoo 优化包括:
|
||||||
### 在 Odoo 配置中启用多重处理选项
|
|
||||||
|
### 在 Odoo 配置中启用多处理器选项
|
||||||
|
|
||||||
要实现此功能,请定位到 openerp 服务器二进制文件:
|
要实现此功能,请定位到 openerp 服务器二进制文件:
|
||||||
|
|
||||||
```
|
```
|
||||||
#updatedb
|
#updatedb
|
||||||
#locate openerp-server
|
#locate openerp-server
|
||||||
@ -64,11 +64,11 @@ Options:
|
|||||||
(default 8192).
|
(default 8192).
|
||||||
```
|
```
|
||||||
|
|
||||||
工作进程的数量应该和分配到 VPS 的 CPU 核心数一样,或者,如果你想为 PostgreSQL 数据库,cron 任务,或者其它和 Odoo 实例安装在同一台 VPS 上的其它应用预留出一些 CPU 核心,那么你可以将工作进程数设置为一个比 VPS 上可用 CPU 核心更低的值,以避免资源耗尽。
|
工作进程的数量应该和分配到 VPS 的 CPU 核心数一样,或者,如果你想为 PostgreSQL 数据库、cron 任务、或者其它和 Odoo 实例安装在同一台 VPS 上的其它应用预留出一些 CPU 核心,那么你可以将工作进程数设置为一个比 VPS 上可用 CPU 核心更低的值,以避免资源耗尽。
|
||||||
|
|
||||||
limit-memory-soft 和 limit-memory-hard 参数不言自明,你可以使用默认值,也可以根据 VPS 上的实际可用 RAM 来进行修改。
|
limit-memory-soft 和 limit-memory-hard 参数不言自明,你可以使用默认值,也可以根据 VPS 上的实际可用 RAM 来进行修改。
|
||||||
|
|
||||||
例如,如果你的 VPS 有 8 个 CPU 核心,以及 16 GB 内存,那么你可以将工作进程数设置为 17(CPU 核心数 x 2 + 1),limit-memory-soft 总值设置为 be 640 x 17 = 10880 MB,而 limit-memory-hard 总数设置为 68MB x 17 = 13056 MB,这样,Odoo 就会有总计达 12.75 GB 的 RAM。
|
例如,如果你的 VPS 有 8 个 CPU 核心,以及 16 GB 内存,那么你可以将工作进程数设置为 17(CPU 核心数 x 2 + 1),limit-memory-soft 总值设置为 640 x 17 = 10880 MB,而 limit-memory-hard 总数设置为 68MB x 17 = 13056 MB,这样,Odoo 就会有总计达 12.75 GB 的 RAM。
|
||||||
|
|
||||||
例如,在一台拥有 16 GB RAM 和 8 个 CPU 核心的 VPS 上,编辑 Odoo 配置文件(如 /etc/odoo-server.conf),并添加以下行:
|
例如,在一台拥有 16 GB RAM 和 8 个 CPU 核心的 VPS 上,编辑 Odoo 配置文件(如 /etc/odoo-server.conf),并添加以下行:
|
||||||
```
|
```
|
||||||
@ -94,9 +94,10 @@ max_cron_threads = 2
|
|||||||
|
|
||||||
### 正确配置并优化 PostgreSQL
|
### 正确配置并优化 PostgreSQL
|
||||||
|
|
||||||
对于 PostgreSQL 优化,时刻将它更新到最新版本是一个不错的主意。在 PostgreSQL 配置文件(pg_hba.conf)中,有两个设置需要修改:shared_buffers 和 effective_cache_size。将 shared_buffers 设置为可用内存的 20%,effective_cache_size 设置为可用内存的 50%。
|
对于 PostgreSQL 优化,及时将它更新到最新版本是一个不错的主意。在 PostgreSQL 配置文件(pg_hba.conf)中,有两个设置需要修改:shared_buffers 和 effective_cache_size。将 shared_buffers 设置为可用内存的 20%,effective_cache_size 设置为可用内存的 50%。
|
||||||
|
|
||||||
例如,如果 Odoo 安装到了一台 16 GB RAM 的 SSD VPS 上,那么在 pg_hba.conf 中使用如下设置:
|
例如,如果 Odoo 安装到了一台 16 GB RAM 的 SSD VPS 上,那么在 pg_hba.conf 中使用如下设置:
|
||||||
|
|
||||||
```
|
```
|
||||||
vi /var/lib/postgresql/data/pg_hba.conf
|
vi /var/lib/postgresql/data/pg_hba.conf
|
||||||
```
|
```
|
||||||
@ -105,9 +106,11 @@ vi /var/lib/postgresql/data/pg_hba.conf
|
|||||||
shared_buffers = 3072MB
|
shared_buffers = 3072MB
|
||||||
effective_cache_size = 8192MB
|
effective_cache_size = 8192MB
|
||||||
```
|
```
|
||||||
|
|
||||||
重启 PostgreSQL 服务来让修改生效。
|
重启 PostgreSQL 服务来让修改生效。
|
||||||
|
|
||||||
同时,也别忘了周期性手动执行‘[VACUUM][4]‘ 。‘Vacuuming’会将陈旧或临时数据清理干净,但请牢记,它会大量占用 CPU 和磁盘使用。
|
同时,也别忘了周期性手动执行 ‘**[VACUUM][4]**’。此操作会将陈旧或临时数据清理干净,但请牢记,它会大量占用 CPU 和磁盘使用。
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -115,12 +118,11 @@ via: https://www.rosehosting.com/blog/how-to-speed-up-odoo/
|
|||||||
|
|
||||||
作者:[rosehosting.com][a]
|
作者:[rosehosting.com][a]
|
||||||
译者:[GOLinux](https://github.com/GOLinux)
|
译者:[GOLinux](https://github.com/GOLinux)
|
||||||
校对:[校对者ID](https://github.com/校对者ID)
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
[a]:https://www.rosehosting.com/
|
[a]:https://www.rosehosting.com/
|
||||||
[1]:https://www.rosehosting.com/linux-vps-hosting.html
|
[1]:https://www.rosehosting.com/linux-vps-hosting.html
|
||||||
[2]:https://www.rosehosting.com/linux-vps-hosting.html
|
[2]:https://www.rosehosting.com/linux-vps-hosting.html
|
||||||
[3]:https://www.rosehosting.com/odoo-hosting.html
|
|
||||||
[4]:https://wiki.postgresql.org/wiki/Introduction_to_VACUUM,_ANALYZE,_EXPLAIN,_and_COUNT
|
[4]:https://wiki.postgresql.org/wiki/Introduction_to_VACUUM,_ANALYZE,_EXPLAIN,_and_COUNT
|
36
published/201703/20170116 Terrible Ideas in Git.md
Normal file
36
published/201703/20170116 Terrible Ideas in Git.md
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
Git 中的那些可怕的事
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
在 LinuxCon 北美会议上 FutureAdvisor 的 Corey Quinn 说:“Git 的确让你可以做一些超级强大的事。‘强大’,在这次讲演中,这是一种说你愚蠢的委婉说法”。在使用 Git 时,谁没有经历让你感觉自己像个傻子的时刻?当然,Git 是很棒的,每个人都在使用它,你可以用几个基本命令完成你的大部分工作。但它也有一些强大的功能,让我们觉得我们不知道我们在做什么。
|
||||||
|
|
||||||
|
但这真的对我们来说不公平。没有人会知道一切,每个人知道的都不同。Quinn 提醒我们:“在我许多讲演的问答部分,人们有时举手说:“嗯,我有一个傻问题。” 你看到人们在那里说:“是啊!这是一个非常愚蠢的问题”。但是当他们得到答案时,那些这么说的人也正在低头记笔记。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Quinn 在演讲的开始做了一些有趣的演示,演示了一些你可以用 Git 做到的可怕的事情,例如变基主干然后进行强制推送来搞乱整个项目、胡乱输入一些命令让 git 吐槽、提交大型二进制文件等。然后他演示了如何使这些可怕的事情不怎么可怕,如更加明智地管理大型二进制文件。“你可以提交大型二进制文件,你可以在 Git 中暴力提交,如果你需要存储大的二进制文件,这里有两个工具会可以加速载入,一个是 git-annex,这是由 Debian 开发人员 Joey Hess 开发的,而 git-lfs 是由 GitHub 支持的。”
|
||||||
|
|
||||||
|
你经常同样地错误输入么?例如,当你想要 `git status` 时却输入 `git stitis`?Quinn 有一个方案:“Git 有内置的别名支持,所以你可以将相对较长、复杂的东西命名为一个短的 Git 命令。” 此外,你还可以使用 shell 别名。
|
||||||
|
|
||||||
|
Quinn 说:“我们都听说过变基主干然后强制推送这样的搞笑恶作剧,它会改变版本历史,突然发生的事情让所有人都措手不及,每个人都被卷入了这种混乱当中。一群鲸鱼被称为“pod”,一群乌鸦中被称为“谋杀”,一群开发者被称为“合并冲突”……更严重的是,如果有人干了这种事情,你有几个选择。包括从备份中恢复主干,还原提交;或者把责任人从屋顶上尖叫着扔下去。或者,采取一定的预防措施并使用一个并不知名的 Git 功能称为分支保护。启用分支保护后,无法删除或强制推送分支,并且在接受前,拉取请求(pull request)必须至少有一个审核。”
|
||||||
|
|
||||||
|
Quinn 演示了几个更奇妙的有用的工具,使 Git 更高效和万无一失,如 mr、vcsh 和定制的 shell 提示。你可以在下面看到完整的视频,了解更多有趣的事情。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.linux.com/news/event/LinuxCon-Europe/2016/terrible-ideas-git-0
|
||||||
|
|
||||||
|
作者:[CARLA SCHRODER][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[Bestony](https://github.com/Bestony)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.linux.com/users/cschroder
|
||||||
|
[1]:https://www.linux.com/licenses/category/used-permission
|
||||||
|
[2]:https://www.linux.com/licenses/category/linux-foundation
|
||||||
|
[3]:https://www.linux.com/files/images/heffalump-git-corey-quinnpng-0
|
||||||
|
[4]:https://www.linux.com/files/images/corey-quinn-lcnapng
|
||||||
|
[5]:http://events.linuxfoundation.org/events/linuxcon-north-america
|
@ -1,21 +1,21 @@
|
|||||||
[远程在 Atomic 主机上使用 Docker][1]
|
在 Atomic 主机上远程使用 Docker
|
||||||
---------------------
|
==========
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
来自 [Atomic 项目][2] 的 Atomic 主机是一个基于轻量级容器的操作系统,它可以运行 Linux 容器。它已被优化为用作云环境的容器运行时系统。例如,它可以托管 Docker 守护进程和容器。有时,你可能需要在该主机上运行 docker 命令,并从其他地方管理服务器。本文介绍如何远程访问 Fedora Atomic 主机上的[Docker][3]守护进程,[你可以在这里下载到它][4]。整个过程由[Ansible][5]自动完成 - 在涉及到自动化的一切上,这是一个伟大的工具。
|
来自 [Atomic 项目][2] 的 Atomic 主机是一个轻量级的容器基于的操作系统,它可以运行 Linux 容器。它已被优化为用作云环境的容器运行时系统。例如,它可以托管 Docker 守护进程和容器。有时,你可能需要在该主机上运行 docker 命令,并从其他地方管理服务器。本文介绍如何远程访问 Fedora Atomic 主机([你可以在这里下载到它][4])上的 [Docker][3] 守护进程。整个过程由 [Ansible][5] 自动完成 - 在涉及到自动化的一切上,这真是一个伟大的工具!
|
||||||
|
|
||||||
### 一份安全笔记
|
### 安全备忘录
|
||||||
|
|
||||||
由于我们通过网络连接,所以我们使用[TLS][6]保护 Docker 守护进程。此过程需要客户端证书和服务器证书。OpenSSL 包用于创建用于建立 TLS 连接的证书密钥。这里,Atomic 主机运行守护程序,我们的本地的 [Fedora Workstation][7] 充当客户端。
|
由于我们通过网络连接,所以我们使用 [TLS][6] 保护 Docker 守护进程。此过程需要客户端证书和服务器证书。OpenSSL 包用于创建用于建立 TLS 连接的证书密钥。这里,Atomic 主机运行守护程序,我们的本地的 [Fedora Workstation][7] 充当客户端。
|
||||||
|
|
||||||
在你按照这些步骤进行之前,请注意,_任何_在客户端上可以访问 TLS 证书的进程在服务器上具有**完全根访问权限。** 因此,客户端可以在服务器上做任何它想做的事情。因此,我们需要仅向可信任的特定客户端主机授予证书访问权限。你应该将客户端证书仅复制到完全由你控制的客户端主机。即使在这种情况下,客户端机器的安全也至关重要。
|
在你按照这些步骤进行之前,请注意,_任何_在客户端上可以访问 TLS 证书的进程在服务器上具有**完全的 root 访问权限**。 因此,客户端可以在服务器上做任何它想做的事情。我们需要仅向可信任的特定客户端主机授予证书访问权限。你应该将客户端证书仅复制到完全由你控制的客户端主机。但即使在这种情况下,客户端机器的安全也至关重要。
|
||||||
|
|
||||||
但是,此方法只是远程访问守护程序的一种方法。编排工具通常提供更安全的控制。下面的简单方法适用于个人实验,但可能不适合开放式网络。
|
不过,此方法只是远程访问守护程序的一种方法。编排工具通常提供更安全的控制。下面的简单方法适用于个人实验,可能不适合开放式网络。
|
||||||
|
|
||||||
### 获取 Ansible role
|
### 获取 Ansible role
|
||||||
|
|
||||||
[Chris Houseknecht][8] 写了一个 Ansible role,它会创造所需的所有证书。这样,你不需要手动运行 _openssl_ 命令了。 这些在[ Ansible role 仓库][9]中提供。将它克隆到你当前的工作主机。
|
[Chris Houseknecht][8] 写了一个 Ansible role,它会创造所需的所有证书。这样,你不需要手动运行 `openssl` 命令了。 这些在 [Ansible role 仓库][9]中提供。将它克隆到你当前的工作主机。
|
||||||
|
|
||||||
```
|
```
|
||||||
$ mkdir docker-remote-access
|
$ mkdir docker-remote-access
|
||||||
@ -25,7 +25,7 @@ $ git clone https://github.com/ansible/role-secure-docker-daemon.git
|
|||||||
|
|
||||||
### 创建配置文件
|
### 创建配置文件
|
||||||
|
|
||||||
接下来,你必须创建 Ansible 配置文件、inventory 和 playbook 文件以设置客户端和守护进程。以下说明在 Atomic 主机上创建客户端和服务器证书。然后,获取客户端证书到本地。最后,它们会配置守护进程以及客户端,使它们能彼此交互。
|
接下来,你必须创建 Ansible 配置文件、清单(inventory)和剧本(playbook)文件以设置客户端和守护进程。以下说明在 Atomic 主机上创建客户端和服务器证书。然后,获取客户端证书到本地。最后,它们会配置守护进程以及客户端,使它们能彼此交互。
|
||||||
|
|
||||||
这里是你需要的目录结构。如下所示,创建下面的每个文件。
|
这里是你需要的目录结构。如下所示,创建下面的每个文件。
|
||||||
|
|
||||||
@ -38,29 +38,34 @@ docker-remote-access/
|
|||||||
└── role-secure-docker-daemon
|
└── role-secure-docker-daemon
|
||||||
```
|
```
|
||||||
|
|
||||||
### _ansible.cfg_
|
`ansible.cfg`:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ vim ansible.cfg
|
$ vim ansible.cfg
|
||||||
|
```
|
||||||
|
```
|
||||||
[defaults]
|
[defaults]
|
||||||
inventory=inventory
|
inventory=inventory
|
||||||
```
|
```
|
||||||
|
|
||||||
### _inventory_
|
清单文件(`inventory`):
|
||||||
|
|
||||||
```
|
```
|
||||||
$ vim inventory
|
$ vim inventory
|
||||||
|
```
|
||||||
|
```
|
||||||
[daemonhost]
|
[daemonhost]
|
||||||
'IP_OF_ATOMIC_HOST' ansible_ssh_private_key_file='PRIVATE_KEY_FILE'
|
'IP_OF_ATOMIC_HOST' ansible_ssh_private_key_file='PRIVATE_KEY_FILE'
|
||||||
```
|
```
|
||||||
|
|
||||||
将 inventory 中的 _IP_OF_ATOMIC_HOST_ 替换为 Atomic 主机的 IP。将 _PRIVATE_KEY_FILE_ 替换为本地系统上的 SSH 私钥文件的位置。
|
将清单文件(`inventory`) 中的 `IP_OF_ATOMIC_HOST` 替换为 Atomic 主机的 IP。将 `PRIVATE_KEY_FILE` 替换为本地系统上的 SSH 私钥文件的位置。
|
||||||
|
|
||||||
### _remote-access.yml_
|
剧本文件(`remote-access.yml`):
|
||||||
|
|
||||||
```
|
```
|
||||||
$ vim remote-access.yml
|
$ vim remote-access.yml
|
||||||
---
|
```
|
||||||
|
```
|
||||||
- name: Docker Client Set up
|
- name: Docker Client Set up
|
||||||
hosts: daemonhost
|
hosts: daemonhost
|
||||||
gather_facts: no
|
gather_facts: no
|
||||||
@ -130,7 +135,7 @@ $ vim remote-access.yml
|
|||||||
|
|
||||||
### 访问 Atomic 主机
|
### 访问 Atomic 主机
|
||||||
|
|
||||||
现在运行 Ansible playbook:
|
现在运行 Ansible 剧本:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ansible-playbook remote-access.yml
|
$ ansible-playbook remote-access.yml
|
||||||
@ -138,9 +143,9 @@ $ ansible-playbook remote-access.yml
|
|||||||
|
|
||||||
确保 tcp 端口 2376 在你的 Atomic 主机上打开了。如果你在使用 Openstack,请在安全规则中添加 TCP 端口 2376。 如果你使用 AWS,请将其添加到你的安全组。
|
确保 tcp 端口 2376 在你的 Atomic 主机上打开了。如果你在使用 Openstack,请在安全规则中添加 TCP 端口 2376。 如果你使用 AWS,请将其添加到你的安全组。
|
||||||
|
|
||||||
现在,在你的工作站上作为普通用户运行的 _docker_ 命令与 Atomic 主机的守护进程通信了,并在那里执行命令。你不需要手动 _ssh_ 或在 Atomic 主机上发出命令。这允许你远程、轻松、安全地启动容器化应用程序。
|
现在,在你的工作站上作为普通用户运行的 `docker` 命令与 Atomic 主机的守护进程通信,并在那里执行命令。你不需要手动 `ssh` 或在 Atomic 主机上发出命令。这可以让你远程、轻松、安全地启动容器化应用程序。
|
||||||
|
|
||||||
如果你想克隆 playbook 和配置文件,这里有[一个可用的 git 仓库][10]。
|
如果你想克隆 Ansible 剧本和配置文件,这里是 [git 仓库][10]。
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
@ -152,7 +157,7 @@ via: https://fedoramagazine.org/use-docker-remotely-atomic-host/
|
|||||||
|
|
||||||
作者:[Trishna Guha][a]
|
作者:[Trishna Guha][a]
|
||||||
译者:[geekpi](https://github.com/geekpi)
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
校对:[校对者ID](https://github.com/校对者ID)
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
@ -1,30 +1,18 @@
|
|||||||
如何在 CentOS 7 中通过 HHVM 和 Nginx 安装 WordPress
|
如何在 CentOS 7 中通过 HHVM 和 Nginx 安装 WordPress
|
||||||
========================
|
========================
|
||||||
|
|
||||||
### 导航
|
HHVM (HipHop Virtual Machine) 是一个用于执行以 PHP 和 Hack 语言编写的代码的虚拟环境。它是由 Facebook 开发的,提供了当前 PHP 7 的大多数功能。要在你的服务器上运行 HHVM,你需要使用 FastCGI 来将 HHVM 和 Nginx 或 Apache 衔接起来,或者你也可以使用 HHVM 中的内置 Web 服务器 Proxygen。
|
||||||
|
|
||||||
1. [步骤 1 - 配置 SELinux 并添加v EPEL 仓库][1]
|
在这篇教程中,我将展示给你如何在 Nginx Web 服务器的 HHVM 上安装 WordPress。这里我使用 CentOS 7 作为操作系统,所以你需要懂一点 CentOS 操作的基础。
|
||||||
2. [步骤 2 - 安装 Nginx][2]
|
|
||||||
3. [步骤 3 - 安装并配置 MariaDB][3]
|
|
||||||
4. [步骤 4 - 安装 HHVM][4]
|
|
||||||
5. [步骤 5 - 配置 HHVM][5]
|
|
||||||
6. [步骤 6 - 配置 HHVM 和 Nginx][6]
|
|
||||||
7. [步骤 7 - 通过 HHVM 和 Nginx 创建虚拟主机][7]
|
|
||||||
8. [步骤 8 - 安装 WordPress][8]
|
|
||||||
9. [参考链接][9]
|
|
||||||
|
|
||||||
HHVM (HipHop Virtual Machine) is an open source virtual machine for executing programs written in PHP and Hack language. HHVM has been developed by Facebook, it provides most features of the current PHP 7 version. To run HHVM on your server, you can use a FastCGI to connect HHVM with a Nginx or Apache web server, or you can use the web server built into HHVM called "Proxygen".
|
|
||||||
|
|
||||||
In this tutorial, I will show you how to install WordPress with HHVM and Nginx as web server. I will use CentOS 7 as the operating system, so basic knowledge of CentOS is required.
|
|
||||||
|
|
||||||
**先决条件**
|
**先决条件**
|
||||||
|
|
||||||
* CentOS 7 - 64位
|
* CentOS 7 - 64位
|
||||||
* Root 特权
|
* Root 权限
|
||||||
|
|
||||||
### 步骤 1 - 配置 SELinux 并添加v EPEL 仓库
|
### 步骤 1 - 配置 SELinux 并添加 EPEL 仓库
|
||||||
|
|
||||||
在本教程中,我们将以强制模式来运行 SELinux,所以我们需要在系统上安装一个 SELinux 管理工具。这里我们使用 setools 和 setrobleshoot 来管理 SELinux 的各项配置。
|
在本教程中,我们将使用 SELinux 的强制模式,所以我们需要在系统上安装一个 SELinux 管理工具。这里我们使用 `setools` 和 `setrobleshoot` 来管理 SELinux 的各项配置。
|
||||||
|
|
||||||
CentOS 7 已经默认启用 SELinux,我们可以通过以下命令来确认:
|
CentOS 7 已经默认启用 SELinux,我们可以通过以下命令来确认:
|
||||||
|
|
||||||
@ -37,13 +25,13 @@ CentOS 7 已经默认启用 SELinux,我们可以通过以下命令来确认:
|
|||||||
|
|
||||||
如图,你能够看到,SELinux 已经开启了强制模式。
|
如图,你能够看到,SELinux 已经开启了强制模式。
|
||||||
|
|
||||||
接下来就是使用 yum 来安装 setools 和 setroubleshoot 了。
|
接下来就是使用 `yum` 来安装 `setools` 和 `setroubleshoot` 了。
|
||||||
|
|
||||||
```
|
```
|
||||||
# yum -y install setroubleshoot setools net-tools
|
# yum -y install setroubleshoot setools net-tools
|
||||||
```
|
```
|
||||||
|
|
||||||
安装好这两个后,在安装 EPEL 仓库。
|
安装好这两个后,再安装 EPEL 仓库。
|
||||||
|
|
||||||
```
|
```
|
||||||
# yum -y install epel-release
|
# yum -y install epel-release
|
||||||
@ -51,22 +39,22 @@ CentOS 7 已经默认启用 SELinux,我们可以通过以下命令来确认:
|
|||||||
|
|
||||||
### 步骤 2 - 安装 Nginx
|
### 步骤 2 - 安装 Nginx
|
||||||
|
|
||||||
Nginx (发音:engine-x) 是一个高性能、低消耗的轻量级 Web 服务器软件。在 CentOS 中可以使用 yum 命令来安装 Nginx 包。记住用 root 用登录系统哦。
|
Nginx (发音:engine-x) 是一个高性能、低内存消耗的轻量级 Web 服务器软件。在 CentOS 中可以使用 `yum` 命令来安装 Nginx 包。确保你以 root 用户登录系统。
|
||||||
|
|
||||||
使用 yum 命令从 CentOS 仓库中安装 nginx。
|
使用 `yum` 命令从 CentOS 仓库中安装 nginx。
|
||||||
|
|
||||||
```
|
```
|
||||||
# yum -y install nginx
|
# yum -y install nginx
|
||||||
```
|
```
|
||||||
|
|
||||||
现在可以使用 systemctl 命令来启动 Nginx,同时将其设置为跟随系统启动。
|
现在可以使用 `systemctl` 命令来启动 Nginx,同时将其设置为跟随系统启动。
|
||||||
|
|
||||||
```
|
```
|
||||||
# systemctl start nginx
|
# systemctl start nginx
|
||||||
# systemctl enable nginx
|
# systemctl enable nginx
|
||||||
```
|
```
|
||||||
|
|
||||||
为确保 Nginx 已经正确运行于服务器中,在浏览上输入服务器的 IP,或者如下使用 curl 命令检查显示结果。
|
为确保 Nginx 已经正确运行于服务器中,在浏览器上输入服务器的 IP,或者如下使用 `curl` 命令检查显示结果。
|
||||||
|
|
||||||
```
|
```
|
||||||
# curl 192.168.1.110
|
# curl 192.168.1.110
|
||||||
@ -78,7 +66,7 @@ Nginx (发音:engine-x) 是一个高性能、低消耗的轻量级 Web 服务
|
|||||||
|
|
||||||
### 步骤 3 - 安装并配置 MariaDB
|
### 步骤 3 - 安装并配置 MariaDB
|
||||||
|
|
||||||
MariaDB 是由原 MySQL 开发者 Monty Widenius 开发的一款开源数据库软件,它由 MySQL 分支而来,但与 MySQL 的主要用法保持一致。在这一步中,我们要安装 MariaDB 数据库并为之配置好 root 密码,然后在为 WordPress 安装的需要创建一个新的数据库和用户。
|
MariaDB 是由原 MySQL 开发者 Monty Widenius 开发的一款开源数据库软件,它由 MySQL 分支而来,与 MySQL 的主要功能保持一致。在这一步中,我们要安装 MariaDB 数据库并为之配置好 root 密码,然后再为所要安装的 WordPress 创建一个新的数据库和用户。
|
||||||
|
|
||||||
安装 mariadb 和 mariadb-server:
|
安装 mariadb 和 mariadb-server:
|
||||||
|
|
||||||
@ -115,7 +103,7 @@ Reload privilege tables now? [Y/n] Y
|
|||||||
... Success!
|
... Success!
|
||||||
```
|
```
|
||||||
|
|
||||||
这样就设置好了 MariaDB 的 root 密码。现在登录到 MariaDB/MySQL shell 并为 WordPress 的安装创建一个新数据库 **"wordpressdb"** 和新用户 **"wpuser"**,密码设置为 **"wpuser@"**。在你的安装设置中要选用一个安全的密码。
|
这样就设置好了 MariaDB 的 root 密码。现在登录到 MariaDB/MySQL shell 并为 WordPress 的安装创建一个新数据库 `wordpressdb` 和新用户 `wpuser`,密码设置为 `wpuser@`。为你的设置选用一个安全的密码。
|
||||||
|
|
||||||
登录到 MariaDB/MySQL shell:
|
登录到 MariaDB/MySQL shell:
|
||||||
|
|
||||||
@ -141,9 +129,9 @@ MariaDB [(none)]> \q
|
|||||||
|
|
||||||
### 步骤 4 - 安装 HHVM
|
### 步骤 4 - 安装 HHVM
|
||||||
|
|
||||||
对于 HHVM,我们需要安装大量的依赖。作为选择,你可以从 GitHub 下载 HHVM 的源码来编译安装,也可以从网络上获取预编译的包进行安装。在本教程中,我使用的是预编译的安装包。
|
对于 HHVM,我们需要安装大量的依赖项。作为选择,你可以从 GitHub 下载 HHVM 的源码来编译安装,也可以从网络上获取预编译的包进行安装。在本教程中,我使用的是预编译的安装包。
|
||||||
|
|
||||||
为 HHVM 安装依赖。
|
为 HHVM 安装依赖项:
|
||||||
|
|
||||||
```
|
```
|
||||||
# yum -y install cpp gcc-c++ cmake git psmisc {binutils,boost,jemalloc,numactl}-devel \
|
# yum -y install cpp gcc-c++ cmake git psmisc {binutils,boost,jemalloc,numactl}-devel \
|
||||||
@ -154,7 +142,7 @@ MariaDB [(none)]> \q
|
|||||||
> mariadb mariadb-server libc-client make
|
> mariadb mariadb-server libc-client make
|
||||||
```
|
```
|
||||||
|
|
||||||
然后是使用 rpm 安装从 [HHVM 预编译包镜像站点][13] 下载的 HHVM 预编译包。
|
然后是使用 `rpm` 安装从 [HHVM 预编译包镜像站点][13] 下载的 HHVM 预编译包。
|
||||||
|
|
||||||
```
|
```
|
||||||
# rpm -Uvh http://mirrors.linuxeye.com/hhvm-repo/7/x86_64/hhvm-3.15.2-1.el7.centos.x86_64.rpm
|
# rpm -Uvh http://mirrors.linuxeye.com/hhvm-repo/7/x86_64/hhvm-3.15.2-1.el7.centos.x86_64.rpm
|
||||||
@ -167,7 +155,7 @@ MariaDB [(none)]> \q
|
|||||||
# hhvm --version
|
# hhvm --version
|
||||||
```
|
```
|
||||||
|
|
||||||
为了能使用 PHP 命令,可以把 hhvm 命令设置为 php。这样在 shell 中输入 'php' 命令的时候,你会看到和输入 hhvm 命令一样的结果。
|
为了能使用 PHP 命令,可以把 `hhvm` 命令设置为 `php`。这样在 shell 中输入 `php` 命令的时候,你会看到和输入 `hhvm` 命令一样的结果。
|
||||||
|
|
||||||
```
|
```
|
||||||
# sudo update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60
|
# sudo update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60
|
||||||
@ -178,9 +166,9 @@ MariaDB [(none)]> \q
|
|||||||
|
|
||||||
### 步骤 5 - 配置 HHVM
|
### 步骤 5 - 配置 HHVM
|
||||||
|
|
||||||
这一步中,我们来配置 HHVM 以系统服务器来运行。我们不通过端口这种常规的方式来运行它,而是选择使用 unix socket 文件的方式,这样运行的更快速一点。
|
这一步中,我们来配置 HHVM 以系统服务来运行。我们不通过端口这种常规的方式来运行它,而是选择使用 unix socket 文件的方式,这样运行的更快速一点。
|
||||||
|
|
||||||
进入 systemd 配置目录,并创建一个 hhvm.service 文件。
|
进入 systemd 配置目录,并创建一个 `hhvm.service` 文件。
|
||||||
|
|
||||||
```
|
```
|
||||||
# cd /etc/systemd/system/
|
# cd /etc/systemd/system/
|
||||||
@ -203,14 +191,14 @@ WantedBy=multi-user.target
|
|||||||
|
|
||||||
保存文件退出 vim。
|
保存文件退出 vim。
|
||||||
|
|
||||||
接下来,进入 hhvm 目录并编辑 server.ini 文件。
|
接下来,进入 `hhvm` 目录并编辑 `server.ini` 文件。
|
||||||
|
|
||||||
```
|
```
|
||||||
# cd /etc/hhvm/
|
# cd /etc/hhvm/
|
||||||
# vim server.ini
|
# vim server.ini
|
||||||
```
|
```
|
||||||
|
|
||||||
将第 7 行 hhvm.server.port 替换为 unix socket,如下:
|
将第 7 行 `hhvm.server.port` 替换为 unix socket,如下:
|
||||||
|
|
||||||
```
|
```
|
||||||
hhvm.server.file_socket = /var/run/hhvm/hhvm.sock
|
hhvm.server.file_socket = /var/run/hhvm/hhvm.sock
|
||||||
@ -218,7 +206,7 @@ hhvm.server.file_socket = /var/run/hhvm/hhvm.sock
|
|||||||
|
|
||||||
保存文件并退出编辑器。
|
保存文件并退出编辑器。
|
||||||
|
|
||||||
我们已在 hhvm 服务文件中定义了 hhvm 以 'nginx' 用户身份运行,所以还需要把 socket 文件目录的属主变更为 'nginx'。然后我们还必须在 SELinux 中修改 hhvm 目录内容以便让它可以访问这个 socket 文件。
|
我们已在 hhvm 服务文件中定义了 hhvm 以 `nginx` 用户身份运行,所以还需要把 socket 文件目录的属主变更为 `nginx`。然后我们还必须在 SELinux 中修改 hhvm 目录的权限上下文以便让它可以访问这个 socket 文件。
|
||||||
|
|
||||||
```
|
```
|
||||||
# chown -R nginx:nginx /var/run/hhvm/
|
# chown -R nginx:nginx /var/run/hhvm/
|
||||||
@ -228,7 +216,7 @@ hhvm.server.file_socket = /var/run/hhvm/hhvm.sock
|
|||||||
|
|
||||||
服务器重启之后,hhvm 将不能运行,因为没有存储 socket 文件的目录,所有还必须在启动的时候自动创建一个。
|
服务器重启之后,hhvm 将不能运行,因为没有存储 socket 文件的目录,所有还必须在启动的时候自动创建一个。
|
||||||
|
|
||||||
使用 vim 编辑 rc.local 文件。
|
使用 vim 编辑 `rc.local` 文件。
|
||||||
|
|
||||||
```
|
```
|
||||||
# vim /etc/rc.local
|
# vim /etc/rc.local
|
||||||
@ -257,7 +245,7 @@ hhvm.server.file_socket = /var/run/hhvm/hhvm.sock
|
|||||||
# systemctl enable hhvm
|
# systemctl enable hhvm
|
||||||
```
|
```
|
||||||
|
|
||||||
要确保无误,使用 netstat 命令验证 hhvm 运行于 socket 文件。
|
要确保无误,使用 `netstat` 命令验证 hhvm 运行于 socket 文件。
|
||||||
|
|
||||||
```
|
```
|
||||||
# netstat -pl | grep hhvm
|
# netstat -pl | grep hhvm
|
||||||
@ -267,16 +255,16 @@ hhvm.server.file_socket = /var/run/hhvm/hhvm.sock
|
|||||||
|
|
||||||
### 步骤 6 - 配置 HHVM 和 Nginx
|
### 步骤 6 - 配置 HHVM 和 Nginx
|
||||||
|
|
||||||
在这个步骤中,我们配置好 HHVM 已让它运行在 Nginx Web 服务中,这需要在 Nginx 目录创建一个 hhvm 的配置文件。
|
在这个步骤中,我们将配置 HHVM 已让它运行在 Nginx Web 服务中,这需要在 Nginx 目录创建一个 hhvm 的配置文件。
|
||||||
|
|
||||||
进入 /etc/nginx 目录,创建 a hhvm.conf 文件。
|
进入 `/etc/nginx` 目录,创建 `hhvm.conf` 文件。
|
||||||
|
|
||||||
```
|
```
|
||||||
# cd /etc/nginx/
|
# cd /etc/nginx/
|
||||||
# vim hhvm.conf
|
# vim hhvm.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
粘贴一下内容到文件中。
|
粘贴以下内容到文件中。
|
||||||
|
|
||||||
```
|
```
|
||||||
location ~ \.(hh|php)$ {
|
location ~ \.(hh|php)$ {
|
||||||
@ -291,13 +279,13 @@ location ~ \.(hh|php)$ {
|
|||||||
|
|
||||||
然后,保存并退出。
|
然后,保存并退出。
|
||||||
|
|
||||||
接下来,编辑 nginx.conf 文件,添加 hhvm 配置文件到 include 行。
|
接下来,编辑 `nginx.conf` 文件,添加 hhvm 配置文件到 `include` 行。
|
||||||
|
|
||||||
```
|
```
|
||||||
# vim nginx.conf
|
# vim nginx.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
添加配置到第 57 行的 server 指令中。
|
添加配置到第 57 行的 `server` 指令中。
|
||||||
|
|
||||||
```
|
```
|
||||||
include /etc/nginx/hhvm.conf;
|
include /etc/nginx/hhvm.conf;
|
||||||
@ -305,7 +293,7 @@ include /etc/nginx/hhvm.conf;
|
|||||||
|
|
||||||
保存并退出。
|
保存并退出。
|
||||||
|
|
||||||
然后修改 SELinux 中关于 hhvm 配置文件的内容。
|
然后修改 SELinux 中关于 hhvm 配置文件的权限上下文。
|
||||||
|
|
||||||
```
|
```
|
||||||
# semanage fcontext -a -t httpd_config_t /etc/nginx/hhvm.conf
|
# semanage fcontext -a -t httpd_config_t /etc/nginx/hhvm.conf
|
||||||
@ -319,19 +307,19 @@ include /etc/nginx/hhvm.conf;
|
|||||||
# systemctl restart nginx
|
# systemctl restart nginx
|
||||||
```
|
```
|
||||||
|
|
||||||
记住确保没有错误。
|
记住确保测试配置没有错误。
|
||||||
|
|
||||||
### 步骤 7 - 通过 HHVM 和 Nginx 创建虚拟主机
|
### 步骤 7 - 通过 HHVM 和 Nginx 创建虚拟主机
|
||||||
|
|
||||||
在这一步中能,我们要为 Nginx 和 hhvm 创建一个新的虚拟主机配置文件。这里我使用域名 **"natsume.co"** 来作为例子.你可以使用你主机喜欢的域名,并在配置文件中相应位置以及 WordPress 安装过程中进行替换。
|
在这一步中,我们要为 Nginx 和 hhvm 创建一个新的虚拟主机配置文件。这里我使用域名 `natsume.co` 来作为例子,你可以使用你主机喜欢的域名,并在配置文件中相应位置以及 WordPress 安装过程中进行替换。
|
||||||
|
|
||||||
进入 nginx conf.d 目录,我们将在该目录存储虚拟主机文件。
|
进入 nginx 的 `conf.d` 目录,我们将在该目录存储虚拟主机文件。
|
||||||
|
|
||||||
```
|
```
|
||||||
# cd /etc/nginx/conf.d/
|
# cd /etc/nginx/conf.d/
|
||||||
```
|
```
|
||||||
|
|
||||||
使用 vim 创建一个名为 "natsume.conf" 的配置文件。
|
使用 vim 创建一个名为 `natsume.conf` 的配置文件。
|
||||||
|
|
||||||
```
|
```
|
||||||
# vim natsume.conf
|
# vim natsume.conf
|
||||||
@ -367,15 +355,14 @@ server {
|
|||||||
|
|
||||||
保存并退出。
|
保存并退出。
|
||||||
|
|
||||||
在这给虚拟主机配置文件中,我们定义该域名的 Web 根目录为 "/var/www/hakase"。目前该目录还不存在,所有我们要创建它,并变更属主为 nginx 用户和组。
|
在这个虚拟主机配置文件中,我们定义该域名的 Web 根目录为 `/var/www/hakase`。目前该目录还不存在,所有我们要创建它,并变更属主为 nginx 用户和组。
|
||||||
|
|
||||||
```
|
```
|
||||||
# mkdir -p /var/www/hakase
|
# mkdir -p /var/www/hakase
|
||||||
# chown -R nginx:nginx /var/www/hakase
|
# chown -R nginx:nginx /var/www/hakase
|
||||||
```
|
```
|
||||||
|
|
||||||
|
接下来,为该文件和目录配置 SELinux 上下文。
|
||||||
Next, configure the SELinux context for the file and directory.
|
|
||||||
|
|
||||||
```
|
```
|
||||||
# semanage fcontext -a -t httpd_config_t "/etc/nginx/conf.d(/.*)?"
|
# semanage fcontext -a -t httpd_config_t "/etc/nginx/conf.d(/.*)?"
|
||||||
@ -393,28 +380,28 @@ Next, configure the SELinux context for the file and directory.
|
|||||||
|
|
||||||
在步骤 5 的时候,我们已经为 WordPress 配置好了虚拟主机,现在只需要下载 WordPress 和使用我们在步骤 3 的时候创建的数据库和用户来编辑数据库配置就好了。
|
在步骤 5 的时候,我们已经为 WordPress 配置好了虚拟主机,现在只需要下载 WordPress 和使用我们在步骤 3 的时候创建的数据库和用户来编辑数据库配置就好了。
|
||||||
|
|
||||||
进入 Web 根目录 "/var/www/hakase" 并使用 Wget 命令下载 WordPress:
|
进入 Web 根目录 `/var/www/hakase` 并使用 Wget 命令下载 WordPress:
|
||||||
|
|
||||||
```
|
```
|
||||||
# cd /var/www/hakase
|
# cd /var/www/hakase
|
||||||
# wget wordpress.org/latest.tar.gz
|
# wget wordpress.org/latest.tar.gz
|
||||||
```
|
```
|
||||||
|
|
||||||
解压 "latest.tar.gz" 并将 wordpress 文件夹中所有的文件和目录移动到当前目录:
|
解压 `latest.tar.gz` 并将 `wordpress` 文件夹中所有的文件和目录移动到当前目录:
|
||||||
|
|
||||||
```
|
```
|
||||||
# tar -xzvf latest.tar.gz
|
# tar -xzvf latest.tar.gz
|
||||||
# mv wordpress/* .
|
# mv wordpress/* .
|
||||||
```
|
```
|
||||||
|
|
||||||
下一步,复制一份 "wp-config-sample.php" 并更名为 "wp-config.php",然后使用 vim 进行编辑:
|
下一步,复制一份 `wp-config-sample.php` 并更名为 `wp-config.php`,然后使用 vim 进行编辑:
|
||||||
|
|
||||||
```
|
```
|
||||||
# cp wp-config-sample.php wp-config.php
|
# cp wp-config-sample.php wp-config.php
|
||||||
# vim wp-config.php
|
# vim wp-config.php
|
||||||
```
|
```
|
||||||
|
|
||||||
将 DB_NAME 设置为 **"wordpressdb"**、DB_USER 设置为 **"wpuser"** 以及 DB_PASSWORD 设置为 **"wpuser@"**。
|
将 `DB_NAME` 设置为 `wordpressdb`、`DB_USER` 设置为 `wpuser` 以及 `DB_PASSWORD` 设置为 `wpuser@`。
|
||||||
|
|
||||||
```
|
```
|
||||||
define('DB_NAME', 'wordpressdb');
|
define('DB_NAME', 'wordpressdb');
|
||||||
@ -427,28 +414,28 @@ define('DB_HOST', 'localhost');
|
|||||||
|
|
||||||
[][16]
|
[][16]
|
||||||
|
|
||||||
修改关于 WordPress 目录的 SELinux 配置指令。
|
修改关于 WordPress 目录的 SELinux 上下文。
|
||||||
|
|
||||||
```
|
```
|
||||||
# semanage fcontext -a -t httpd_sys_content_t "/var/www/hakase(/.*)?"
|
# semanage fcontext -a -t httpd_sys_content_t "/var/www/hakase(/.*)?"
|
||||||
# restorecon -Rv /var/www/hakase
|
# restorecon -Rv /var/www/hakase
|
||||||
```
|
```
|
||||||
|
|
||||||
现在打开 Web 浏览器,在地址栏输入你之前为 WordPress 设置的域名,我这里是 "natsume.co"。
|
现在打开 Web 浏览器,在地址栏输入你之前为 WordPress 设置的域名,我这里是 `natsume.co`。
|
||||||
|
|
||||||
选择英语并点击 '继续 (Continue)'。
|
选择语言并点击<ruby>继续<rt>Continue</rt></ruby>。
|
||||||
|
|
||||||
[][17]
|
[][17]
|
||||||
|
|
||||||
根据自身要求填写站点标题和描述并点击 "安装 Wordpress (Install Wordpress)"。
|
根据自身要求填写站点标题和描述并点击<ruby>安装 Wordpress<rt>Install Wordpress</rt></ruby>"。
|
||||||
|
|
||||||
[][18]
|
[][18]
|
||||||
|
|
||||||
耐心等待安装完成。你会见到如下页面,点击 "登录 (Log In)" 来登录到管理面板。
|
耐心等待安装完成。你会见到如下页面,点击<ruby>登录<rt>Log In</rt></ruby>来登录到管理面板。
|
||||||
|
|
||||||
[][19]
|
[][19]
|
||||||
|
|
||||||
输入你设置的管理员用户账号和密码,在此点击 "登录 (Log In)"。
|
输入你设置的管理员用户账号和密码,在此点击<ruby>登录<rt>Log In</rt></ruby>。
|
||||||
|
|
||||||
[][20]
|
[][20]
|
||||||
|
|
||||||
@ -456,7 +443,7 @@ define('DB_HOST', 'localhost');
|
|||||||
|
|
||||||
[][21]
|
[][21]
|
||||||
|
|
||||||
Wordpress 主页。
|
Wordpress 的主页:
|
||||||
|
|
||||||
[][22]
|
[][22]
|
||||||
|
|
||||||
@ -464,8 +451,7 @@ Wordpress 主页。
|
|||||||
|
|
||||||
### 参考链接
|
### 参考链接
|
||||||
|
|
||||||
- [https://www.howtoforge.com/tutorial/how-to-install-wordpress-with-hhvm-and-nginx-on-opensuse-leap-42-1/](https://www.howtoforge.com/tutorial/how-to-install-wordpress-with-hhvm-and-nginx-on-opensuse-leap-42-1/)
|
- https://www.nginx.com/blog/nginx-se-linux-changes-upgrading-rhel-6-6/
|
||||||
- [https://www.nginx.com/blog/nginx-se-linux-changes-upgrading-rhel-6-6/https://www.nginx.com/blog/nginx-se-linux-changes-upgrading-rhel-6-6/](https://www.nginx.com/blog/nginx-se-linux-changes-upgrading-rhel-6-6/)
|
|
||||||
|
|
||||||
------------------------------------
|
------------------------------------
|
||||||
|
|
||||||
@ -477,9 +463,9 @@ Wordpress 主页。
|
|||||||
|
|
||||||
via: https://www.howtoforge.com/tutorial/how-to-install-wordpress-with-hhvm-and-nginx-on-centos-7/
|
via: https://www.howtoforge.com/tutorial/how-to-install-wordpress-with-hhvm-and-nginx-on-centos-7/
|
||||||
|
|
||||||
作者:[ Muhammad Arul][a]
|
作者:[Muhammad Arul][a]
|
||||||
译者:[GHLandy](https://github.com/GHLandy)
|
译者:[GHLandy](https://github.com/GHLandy)
|
||||||
校对:[校对者ID](https://github.com/校对者ID)
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
@ -0,0 +1,78 @@
|
|||||||
|
让你的 Linux 远离黑客(二):另外三个建议
|
||||||
|
==========
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
在这个系列中, 我们会讨论一些阻止黑客入侵你的系统的重要信息。观看这个免费的网络点播研讨会获取更多的信息。
|
||||||
|
|
||||||
|
[Creative Commons Zero][1]Pixabay
|
||||||
|
|
||||||
|
在这个系列的[第一部分][3]中,我分享过两种简单的方法来阻止黑客黑掉你的 Linux 主机。这里是另外三条来自于我最近在 Linux 基金会的网络研讨会上的建议,在这次研讨会中,我分享了更多的黑客用来入侵你的主机的策略、工具和方法。完整的[网络点播研讨会][4]视频可以在网上免费观看。
|
||||||
|
|
||||||
|
### 简单的 Linux 安全提示 #3
|
||||||
|
|
||||||
|
**Sudo。**
|
||||||
|
|
||||||
|
Sudo 非常、非常的重要。我认为这只是很基本的东西,但就是这些基本的东西会让我的黑客生涯会变得更困难一些。如果你没有配置 sudo,还请配置好它。
|
||||||
|
|
||||||
|
还有,你主机上所有的用户必须使用他们自己的密码。不要都免密码使用 sudo 执行所有命令。当我有一个可以无需密码而可以 sudo 任何命令的用户,只会让我的黑客活动变得更容易。如果我可以无需验证就可以 sudo ,同时当我获得你的没有密码的 SSH 密钥后,我就能十分容易的开始任何黑客活动。这样,我就拥有了你机器的 root 权限。
|
||||||
|
|
||||||
|
保持较低的超时时间。我们喜欢劫持用户的会话,如果你的某个用户能够使用 sudo,并且设置的超时时间是 3 小时,当我劫持了你的会话,那么你就再次给了我一个自由的通道,哪怕你需要一个密码。
|
||||||
|
|
||||||
|
我推荐的超时时间大约为 10 分钟,甚至是 5 分钟。用户们将需要反复地输入他们的密码,但是,如果你设置了较低的超时时间,你将减少你的受攻击面。
|
||||||
|
|
||||||
|
还要限制可以访问的命令,并禁止通过 sudo 来访问 shell。大多数 Linux 发行版目前默认允许你使用 sudo bash 来获取一个 root 身份的 shell,当你需要做大量的系统管理的任务时,这种机制是非常好的。然而,应该对大多数用户实际需要运行的命令有一个限制。你对他们限制越多,你主机的受攻击面就越小。如果你允许我 shell 访问,我将能够做任何类型的事情。
|
||||||
|
|
||||||
|
### 简单的 Linux 安全提示 #4
|
||||||
|
|
||||||
|
**限制正在运行的服务。**
|
||||||
|
|
||||||
|
防火墙很好,你的边界防火墙非常的强大。当流量流经你的外部网络时,有几家防火墙产品可以帮你很好的保护好自己。但是防火墙内的人呢?
|
||||||
|
|
||||||
|
你正在使用基于主机的防火墙或者基于主机的入侵检测系统吗?如果是,请正确配置好它。怎样可以知道你的正在受到保护的东西是否出了问题呢?
|
||||||
|
|
||||||
|
答案是限制当前正在运行的服务。不要在不需要提供 MySQL 服务的机器上运行它。如果你有一个默认会安装完整的 LAMP 套件的 Linux 发行版,而你不会在它上面运行任何东西,那么卸载它。禁止那些服务,不要开启它们。
|
||||||
|
|
||||||
|
同时确保用户不要使用默认的身份凭证,确保那些内容已被安全地配置。如何你正在运行 Tomcat,你不应该可以上传你自己的小程序(applets)。确保它们不会以 root 的身份运行。如果我能够运行一个小程序,我不会想着以管理员的身份来运行它,我能访问就行。你对人们能够做的事情限制越多,你的机器就将越安全。
|
||||||
|
|
||||||
|
### 简单的 Linux 安全提示 #5
|
||||||
|
|
||||||
|
**小心你的日志记录。**
|
||||||
|
|
||||||
|
看看它们,认真地,小心你的日志记录。六个月前,我们遇到一个问题。我们的一个顾客从来不去看日志记录,尽管他们已经拥有了很久、很久的日志记录。假如他们曾经看过日志记录,他们就会发现他们的机器早就已经被入侵了,并且他们的整个网络都是对外开放的。我在家里处理的这个问题。每天早上起来,我都有一个习惯,我会检查我的 email,我会浏览我的日志记录。这仅会花费我 15 分钟,但是它却能告诉我很多关于什么正在发生的信息。
|
||||||
|
|
||||||
|
就在这个早上,机房里的三台电脑死机了,我不得不去重启它们。我不知道为什么会出现这样的情况,但是我可以从日志记录里面查出什么出了问题。它们是实验室的机器,我并不在意它们,但是有人会在意。
|
||||||
|
|
||||||
|
通过 Syslog、Splunk 或者任何其他日志整合工具将你的日志进行集中是极佳的选择。这比将日志保存在本地要好。我最喜欢做是事情就是修改你的日志记录让你不知道我曾经入侵过你的电脑。如果我能这么做,你将不会有任何线索。对我来说,修改集中的日志记录比修改本地的日志更难。
|
||||||
|
|
||||||
|
它们就像你的很重要的人,送给它们鲜花——磁盘空间。确保你有足够的磁盘空间用来记录日志。由于磁盘满而变成只读的文件系统并不是一件愉快的事情。
|
||||||
|
|
||||||
|
还需要知道什么是不正常的。这是一件非常困难的事情,但是从长远来看,这将使你日后受益匪浅。你应该知道什么正在进行和什么时候出现了一些异常。确保你知道那。
|
||||||
|
|
||||||
|
在[第三篇也是最后的一篇文章][5]里,我将就这次研讨会中问到的一些比较好的安全问题进行回答。[现在开始看这个完整的免费的网络点播研讨会][6]吧。
|
||||||
|
|
||||||
|
*** Mike Guthrie 就职于能源部,主要做红队交战和渗透测试。***
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
via: https://www.linux.com/news/webinar/2017/how-keep-hackers-out-your-linux-machine-part-2-three-more-easy-security-tips
|
||||||
|
|
||||||
|
作者:[MIKE GUTHRIE][a]
|
||||||
|
译者:[zhousiyu325](https://github.com/zhousiyu325)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
|
||||||
|
[a]:https://www.linux.com/users/anch
|
||||||
|
[1]:https://www.linux.com/licenses/category/creative-commons-zero
|
||||||
|
[2]:https://www.linux.com/files/images/security-tipsjpg
|
||||||
|
[3]:https://linux.cn/article-8189-1.html
|
||||||
|
[4]:http://portal.on24.com/view/channel/index.html?showId=1101876&showCode=linux&partnerref=linco
|
||||||
|
[5]:https://www.linux.com/news/webinar/2017/how-keep-hackers-out-your-linux-machine-part-3-your-questions-answered
|
||||||
|
[6]:http://bit.ly/2j89ISJ
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,71 @@
|
|||||||
|
为何 Linux 安装器需要添加安全功能
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
> 由于安全问题越来越严重,Linux 发行版需要在安装程序中突出显示基本安全选项,而不是让用户稍后手动添加这些选项。
|
||||||
|
|
||||||
|
十二年前,Linux 发行版努力使安装变得简单。在 Ubuntu 和 Fedora 的引领下,它们很早就实现了这一目标。现在,随着对安全性越来越关注,它们需要稍微转变下方向,并在安装程序中突出显示基本安全选项,而不是让用户稍后手动添加这些选项。
|
||||||
|
|
||||||
|
当然,即便是在最好的情况下,说服用户来设置安全功能都是困难的。太多用户甚至不愿意添加如非特权用户帐户或密码这样简单的功能,他们显然更喜欢用重装或者以每小时 80 美元的价格咨询专家来减少风险。
|
||||||
|
|
||||||
|
然而,即便一般用户不会专门注意安全,但他也可能会在安装过程中注意。他们可能永远不会再想到它,但也许在安装过程中,当他们的注意力集中时,特别是如果有可见的在线帮助来解释其好处时,他们可能被说服选择一个复选框。
|
||||||
|
|
||||||
|
这种转变也并不伟大。许多安装程序已经提供了自动登录的选择 - 这对于不包含个人数据的安装来说或许是可以接受的功能,但更可能会被那些觉得登录不方便的用户使用。同样感谢 Ubuntu,它选择加密文件系统 - 至少在主目录中是这样 - 它已经成为许多安装程序的标准。我真正建议的也是这样的。
|
||||||
|
|
||||||
|
此外,外部安装程序如 Firefox 已经无缝合并了隐私浏览,而 [Signal Private Messenger][8] 则是一个可替代标准 的 Android 手机和联系人的应用程序。
|
||||||
|
|
||||||
|
这些建议远不算激进。它只需要意志和想象力来实现它。
|
||||||
|
|
||||||
|
### Linux 安全第一步
|
||||||
|
|
||||||
|
应该将什么类型的安全功能添加到安装程序呢?
|
||||||
|
|
||||||
|
首先是防火墙。有许多图形界面程序可以设置防火墙。尽管十七年的经验,但是就像拜伦对柯尔律治的形而上的思想的讨论一样,我有时还是希望有人能来解释一下。
|
||||||
|
|
||||||
|
尽管出于好意,大多数防火墙工具对 iptables 的处理看起来都很直接。有一个现在已经停止维护的加固系统 [Bastille Linux][9] 可以用于安装一个基本的防火墙,我看不出为什么其他发行版做不到同样的事情。
|
||||||
|
|
||||||
|
一些工具可以用于安装后处理,并且对于安装器而言可以毫无困难地添加使用。例如,对于 [Grub 2][10],这个大多数发行版使用的引导管理器包含了基本密码保护。诚然,密码可以通过 Live CD 绕过,但它仍然在包括远程登录在内的日常情况下提供一定程度的保护。
|
||||||
|
|
||||||
|
类似地,一个类似于 [pwgen][11] 的密码生成器也可以添加到安装程序设置帐户的环节。这些工具强制可接受密码的长度、以及它们的大小写字母、数字和特殊字符的组合。它们许多都可以为你生成密码,有些甚至可以使生成的密码可拼读,以便你记住密码。
|
||||||
|
|
||||||
|
还有些工具也可以添加到安装过程的这个部分。例如,安装程序可以请求定期备份的计划,并添加一个计划任务和一个类似 [kbackup][12] 的简单的备份工具。
|
||||||
|
|
||||||
|
那么加密电子邮件怎么办?如今最流行的邮件阅读器包括了加密邮件的能力,但是设置和使用加密需要用户采取额外的设置,这使常见的任务复杂化,以至于用户会忽略它。然而,看看 Signal 在手机上的加密有多么简单,很显然,在笔记本电脑和工作站上加密会更容易。大多数发行版可能都喜欢对等加密,而不喜欢 Signal 那样的集中式服务器,但像 [Ring][13] 这样的程序可以提供这种功能。
|
||||||
|
|
||||||
|
无论在安装程序中添加了什么功能,也许这些预防措施也可以扩展到生产力软件,如 LibreOffice。大多数安全工作都集中在电子邮件、网络浏览和聊天中,但文字处理程序和电子表格及其宏语言,是一个明显的恶意软件感染的来源和隐私关注点。除了像 [Qubes OS][14] 或 [Subgraph][15] 这样的几个例外之外,很少有人努力将生产力软件纳入其安全预防措施 - 这可能会留下一个安全漏洞空缺。
|
||||||
|
|
||||||
|
### 适应现代
|
||||||
|
|
||||||
|
当然,在意安全的用户也许会采取一些安全的方法,这样的用户可以为自己负责。
|
||||||
|
|
||||||
|
我关心的是那些不太了解安全或不太愿意自己做修补的用户。我们越来越需要易于使用的安全性,并且亟待解决。
|
||||||
|
|
||||||
|
这些例子只是开始。所需要的工具大多数已经存在,只是需要以这样的方式来实现它们,使得用户不能忽略它们,并且能够不用懂什么就可以使用它们。可能实现所有这些只需要一个人月而已,包括原型、UI 设计和测试等等。
|
||||||
|
|
||||||
|
然而,在添加这些功能前,大多数主流的 Linux 发行版几乎不能说是关注到了安全性。毕竟,如果用户从不使用它们,那怎么会是好工具?
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.datamation.com/security/why-linux-installers-need-to-add-security-features.html
|
||||||
|
|
||||||
|
作者:[Bruce Byfield][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[Bestony](https://github.com/Bestony), [wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.datamation.com/author/Bruce-Byfield-6030.html
|
||||||
|
[1]:http://www.datamation.com/feedback/http://www.datamation.com/security/why-linux-installers-need-to-add-security-features.html
|
||||||
|
[2]:http://www.datamation.com/author/Bruce-Byfield-6030.html
|
||||||
|
[3]:http://www.datamation.com/e-mail/http://www.datamation.com/security/why-linux-installers-need-to-add-security-features.html
|
||||||
|
[4]:http://www.datamation.com/print/http://www.datamation.com/security/why-linux-installers-need-to-add-security-features.html
|
||||||
|
[5]:http://www.datamation.com/security/why-linux-installers-need-to-add-security-features.html#comment_form
|
||||||
|
[6]:http://www.datamation.com/security/why-linux-installers-need-to-add-security-features.html#
|
||||||
|
[7]:http://www.datamation.com/author/Bruce-Byfield-6030.html
|
||||||
|
[8]:https://whispersystems.org/
|
||||||
|
[9]:http://bastille-linux.sourceforge.net/
|
||||||
|
[10]:https://help.ubuntu.com/community/Grub2/Passwords
|
||||||
|
[11]:http://pwgen-win.sourceforge.net/downloads.html
|
||||||
|
[12]:http://kbackup.sourceforge.net/
|
||||||
|
[13]:https://savannah.gnu.org/projects/ring/
|
||||||
|
[14]:https://www.qubes-os.org/
|
||||||
|
[15]:https://subgraph.com/sgos/
|
@ -0,0 +1,77 @@
|
|||||||
|
将 Tuleap 用于软件项目管理
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
> Tuleap 正在被 Eclipse 基金会使用,用来取代 Bugzilla
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
图片提供:opensource.com
|
||||||
|
|
||||||
|
Tuleap 是一个独特的开源项目管理工具,目前发展势头很好,现在,每个月它会出一个大版本。它还被列在 [2015 年五大开源项目管理工具][1]和 [2016 年十一个名列前茅项目管理工具][2]中。
|
||||||
|
|
||||||
|
Manuel Vacelet 是开发 Tuleap 项目的 Enalean 公司的联合创始人和 CTO,他说:“Tuleap 是一个完整用于托管软件项目的 GPLv2 平台,它提供了一个集中化的平台,在这里,团队可以找到他们所需的所有工具,追踪他们软件项目的生命周期。他们可以找到项目管理(Scrum、看板、瀑布、混合等等)、源码控制(git 和 svn)和代码审查(pull 请求和 gerrit)、持续集成、问题跟踪、wiki 和文档等的支持。”
|
||||||
|
|
||||||
|
在这次采访中,我会和 Manuel 讨论如何开始使用它,以及如何以开源方式管理 Tuleap。
|
||||||
|
|
||||||
|
**Nitish Tiwari(以下简称 NT): 为什么 Tuleap 项目很重要? **
|
||||||
|
|
||||||
|
**Manuel Vacelet(以下简称 MV):** Tuleap 很重要是因为我们坚信一个成功的(软件)项目必须涉及所有利益相关者:开发人员、项目经理、QA、客户和用户。
|
||||||
|
|
||||||
|
很久以前,我还是一个 SourceForge 衍生项目的实习生(当时 SourceForge 还是一个自由开源项目),几年后它变成了 Tuleap。 我的第一个贡献是将 PhpWiki 集成到该工具中(不要告诉任何人,代码写的很糟)。
|
||||||
|
|
||||||
|
现在,我很高兴作为首席技术官和产品负责人在 Enalean 工作,该公司是 Tuleap 项目的主要贡献公司。
|
||||||
|
|
||||||
|
**NT:让我们聊聊技术方面。**
|
||||||
|
|
||||||
|
**MV:** Tuleap 核心系统是基于 LAMP 并且架构于 CentOS 之上。如今的开发栈是 AngularJS (v1)、REST 后端(PHP)、基于 NodeJS 的实时推送服务器。但如果你想成为一名 Tuleap 全栈开发人员,你还将需要接触 bash、Perl、Python、Docker、Make 等等。
|
||||||
|
|
||||||
|
说到技术方面,需要重点强调的 Tuleap 的一个显著特征是它的可扩展性。一个运行在单服务器上的 Tuleap 单一实例、并且没有复杂的 IT 架构,可以处理超过 10000 人的访问。
|
||||||
|
|
||||||
|
**NT:给我们说下该项目的用户和社区。有谁参与?他们如何使用这个工具?**
|
||||||
|
|
||||||
|
**MV:** 用户非常多样化。从使用 Tuleap 跟踪他们的项目进度并管理他们的源代码的小型初创公司,到非常大的公司,如法国电信运营商 Orange,它为超过 17000 用户部署了它,并托管了 5000 个项目。
|
||||||
|
|
||||||
|
许多用户依靠 Tuleap 来促进敏捷项目并跟踪其进度。开发人员和客户共享同一个工作区。客户不需要学习如何使用 GitHub,也不需要开发人员做额外的工作,就可以将其工作转换到“客户可访问”平台。
|
||||||
|
|
||||||
|
今年,Tuleap 被 [Eclipse 基金会][3]所使用,取代了 Bugzilla。
|
||||||
|
|
||||||
|
印度电子信息技术部使用 Tuleap 创建了印度政府开放电子政务的开放式协作开发平台。
|
||||||
|
|
||||||
|
Tuleap 有多种不同的使用方式和配置。有些人使用它作为 Drupal 客户门户网站的后端; 它们通过 REST API 插入到 Tuleap 中以管理 bug 和服务请求。
|
||||||
|
|
||||||
|
甚至一些建筑师也使用它来管理他们的工作进度和 AutoCAD 文件。
|
||||||
|
|
||||||
|
**NT:Tuleap 是否做了一些特别的事,使社区更安全,更多样化?**
|
||||||
|
|
||||||
|
**MV:** 我们还没有创建“行为准则”;本社区非常平和而欢迎新人,但我们有计划这样做。Tuleap 的开发人员和贡献者来自不同的国家(例如加拿大、突尼斯、法国)。而且 35% 的活跃开发者和贡献者是女性。
|
||||||
|
|
||||||
|
**NT:由社区提议的 Tuleap 功能的百分比是多少?**
|
||||||
|
|
||||||
|
**MV:** 几乎 100% 的功能是由社区驱动的。
|
||||||
|
|
||||||
|
这是 Enalean 的关键挑战之一:找到一种商业模式,使我们能以正确的方式做开源软件。对我们来说,“开放核心”模式(其中应用程序的核心是开放的,但有趣和有用的部分是封闭源的)不是正确的方法,因为你最终还是要依赖闭源。因此,我们发明了 [OpenRoadmap][4],这种方式是我们从社区和最终用户那里收集需求,并找公司来为此买单。
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Nitish 是一名专业的软件开发人员并对开源有热情。作为一本基于 Linux 的杂志的技术作者,他会尝试新的开源工具。他喜欢阅读和探索任何开源相关的事情。在他的空闲时间,他喜欢读励志书。他目前正在构建 DevUp - 一个让开发人员以真正的方式连接所有工具和拥抱 DevOps 的平台。你可以在 Twitter 上关注他 @tiwari_nitish。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://opensource.com/article/17/1/interview-Tuleap-project
|
||||||
|
|
||||||
|
作者:[Nitish Tiwari][a]
|
||||||
|
译者:[geekpi](https://github.com/geeki)
|
||||||
|
校对:[jamsinepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://opensource.com/users/tiwarinitish86
|
||||||
|
[1]:https://opensource.com/business/15/1/top-project-management-tools-2015
|
||||||
|
[2]:https://opensource.com/business/16/3/top-project-management-tools-2016
|
||||||
|
[3]:http://www.eclipse.org/
|
||||||
|
[4]:https://blog.enalean.com/enalean-open-roadmap-how-it-works/
|
@ -0,0 +1,66 @@
|
|||||||
|
如何用 R 语言的 Shiny 库编写 web 程序
|
||||||
|
============================================================
|
||||||
|

|
||||||
|
|
||||||
|
图片提供: opensource.com
|
||||||
|
|
||||||
|
我这个月在写一些更加长的文章,所以你们可以在几周后再来看看。本月,我想简要地提下我自己一直在玩的一个很棒的 R 库。
|
||||||
|
|
||||||
|
我的一个亲密朋友最近在用 R 编写东西。我一直都对它很感兴趣,也一直在试图挤时间,学习更多关于 R 的知识以及可用它做的事情。探索 R 的超强数字处理能力对我而言有些困难,因为我并不如我朋友那样有一个数学头脑。我进展有点慢,但我一直试图将它与我在其他领域的经验联系起来,我甚至开始考虑非常简单的 web 程序。
|
||||||
|
|
||||||
|
[Shiny][1] 是一个来自 RStudio 的工具包,它让创建 web 程序变得更容易。它能从 R 控制台轻松安装,只需要一行,就可以加载好最新的稳定版本来使用。这里有一个很棒的[教程][2],它可以在前面课程基础上,带着你理解应用架设的概念。 Shiny 的授权是 GPLv3,源代码可以在 [GitHub][3] 上获得。
|
||||||
|
|
||||||
|
这是一个用 Shiny 写的简单的小 web 程序:
|
||||||
|
|
||||||
|
```
|
||||||
|
library(shiny)
|
||||||
|
|
||||||
|
server <- function(input, output, session) {
|
||||||
|
observe({
|
||||||
|
myText <- paste("Value above is: ", input$textIn)
|
||||||
|
updateTextInput(session, "textOut", value=myText)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
ui <- basicPage(
|
||||||
|
h3("My very own sample application!"),
|
||||||
|
textInput("textIn", "Input goes here, please."),
|
||||||
|
textInput("textOut", "Results will be printed in this box")
|
||||||
|
)
|
||||||
|
|
||||||
|
shinyApp(ui = ui, server = server)
|
||||||
|
```
|
||||||
|
|
||||||
|
当你在输入框中输入文字时,它会被复制到输出框中提示语后。这并没有什么奇特的,但它向你展示了一个 Shiny 程序的基本结构。“server”部分允许你处理所有后端工作,如计算、数据库检索或程序需要发生的任何其他操作。“ui”部分定义了接口,它可以根据需要变得简单或复杂。
|
||||||
|
|
||||||
|
包括在 Shiny 中的 [Bootstrap][4] 有了大量样式和主题,所以在学习了一点后,就能用 R 创建大量功能丰富的 web 程序。使用附加包可以将功能扩展到更高级的 JavaScript 程序、模板等。
|
||||||
|
|
||||||
|
有几种方式处理 Shiny 的后端工作。如果你只是在本地运行你的程序,加载库就能做到。对于想要发布到网络上的程序,你可以在 [RStudio 的 Shiny 网站][5]上共享它们,运行开源版本的 Shiny 服务器,或通过按年订阅服务从 RStudio 处购买 Shiny Server Pro。
|
||||||
|
|
||||||
|
经验丰富的 R 大牛可能已经知道 Shiny 了;它已经存在大约几年了。对于像我这样来自一个完全不同的编程语言,并且希望学习一点 R 的人来说,它是相当有帮助的。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
D Ruth Bavousett - D Ruth Bavousett 作为一名系统管理员和软件开发人员已经很长时间了,她的专业生涯开始于 VAX 11/780。在她的职业生涯(迄今为止)中,她花费了大量的时间在满足库的需求上,她自 2008 年以来一直是 Koha 开源库自动化套件的贡献者. Ruth 目前在休斯敦的 cPanel 任 Perl 开发人员,他也作为首席员工效力于双猫公司。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://opensource.com/article/17/1/writing-new-web-apps-shiny
|
||||||
|
|
||||||
|
作者:[D Ruth Bavousett][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://opensource.com/users/druthb
|
||||||
|
[1]:http://shiny.rstudio.com/
|
||||||
|
[2]:http://shiny.rstudio.com/tutorial
|
||||||
|
[3]:https://github.com/studio/shiny
|
||||||
|
[4]:http://getbootstrap.com/
|
||||||
|
[5]:http://shinyapps.io/
|
141
published/201703/20170124 Compile-time assertions in Go.md
Normal file
141
published/201703/20170124 Compile-time assertions in Go.md
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
Go 语言编译期断言
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
|
||||||
|
这篇文章是关于一个鲜为人知的让 Go 在编译期断言的方法。你可能不会使用它,但是了解一下也很有趣。
|
||||||
|
|
||||||
|
作为一个热身,来看一个在 Go 中熟知的编译期断言:接口满意度检查。
|
||||||
|
|
||||||
|
在这段代码([playground][1])中,`var _ =` 行确保类型 `W` 是一个 `stringWriter`,其由 [`io.WriteString`][2] 检查。
|
||||||
|
|
||||||
|
```
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "io"
|
||||||
|
|
||||||
|
type W struct{}
|
||||||
|
|
||||||
|
func (w W) Write(b []byte) (int, error) { return len(b), nil }
|
||||||
|
func (w W) WriteString(s string) (int, error) { return len(s), nil }
|
||||||
|
|
||||||
|
type stringWriter interface {
|
||||||
|
WriteString(string) (int, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ stringWriter = W{}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var w W
|
||||||
|
io.WriteString(w, "very long string")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
如果你注释掉了 `W` 的 `WriteString` 方法,代码将无法编译:
|
||||||
|
|
||||||
|
```
|
||||||
|
main.go:14: cannot use W literal (type W) as type stringWriter in assignment:
|
||||||
|
W does not implement stringWriter (missing WriteString method)
|
||||||
|
```
|
||||||
|
|
||||||
|
这是很有用的。对于大多数同时满足 `io.Writer` 和 `stringWriter` 的类型,如果你删除 `WriteString` 方法,一切都会像以前一样继续工作,但性能较差。
|
||||||
|
|
||||||
|
你可以使用编译期断言保护你的代码,而不是试图使用[`testing.T.AllocsPerRun'][3]为性能回归编写一个脆弱的测试。
|
||||||
|
|
||||||
|
这是[一个实际的 io 包中的技术例子][4]。
|
||||||
|
|
||||||
|
* * *
|
||||||
|
|
||||||
|
好的,让我们低调一点!
|
||||||
|
|
||||||
|
接口满意检查是很棒的。但是如果你想检查一个简单的布尔表达式,如 `1 + 1 == 2` ?
|
||||||
|
|
||||||
|
考虑这个代码([playground] [5]):
|
||||||
|
|
||||||
|
```
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "crypto/md5"
|
||||||
|
|
||||||
|
type Hash [16]byte
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
if len(Hash{}) < md5.Size {
|
||||||
|
panic("Hash is too small")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`Hash` 可能是某种抽象的哈希结果。`init` 函数确保它将与 [crypto/md5][6] 一起工作。如果你改变 `Hash` 为(比如说)`[8]byte`,它会在进程启动时发生崩溃。但是,这是一个运行时检查。如果我们想要早点发现怎么办?
|
||||||
|
|
||||||
|
如下。(没有 playground 链接,因为这在 playground 上不起作用。)
|
||||||
|
|
||||||
|
```
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "C"
|
||||||
|
|
||||||
|
import "crypto/md5"
|
||||||
|
|
||||||
|
type Hash [16]byte
|
||||||
|
|
||||||
|
func hashIsTooSmall()
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
if len(Hash{}) < md5.Size {
|
||||||
|
hashIsTooSmall()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
现在如果你改变 `Hash` 为 `[8]byte`,它将在编译过程中失败。(实际上,它在链接过程中失败。足够接近我们的目标了。)
|
||||||
|
|
||||||
|
```
|
||||||
|
$ go build .
|
||||||
|
# demo
|
||||||
|
main.hashIsTooSmall: call to external function
|
||||||
|
main.init.1: relocation target main.hashIsTooSmall not defined
|
||||||
|
main.init.1: undefined: "main.hashIsTooSmall"
|
||||||
|
```
|
||||||
|
|
||||||
|
这里发生了什么?
|
||||||
|
|
||||||
|
`hashIsTooSmall` 是[一个没有函数体的声明][7]。编译器假定别人将提供一个实现,也许是一个汇编程序。
|
||||||
|
|
||||||
|
当编译器可以证明 `len(Hash {})< md5.Size` 时,它消除了 if 语句中的代码。结果,没有人使用函数 `hashIsTooSmall`,所以链接器会消除它。没有其他损害。一旦断言失败,if 语句中的代码将被保留。不会消除 `hashIsTooSmall`。链接器然后注意到没有人提供了函数的实现然后链接失败,并出现错误,这是我们的目标。
|
||||||
|
|
||||||
|
最后一个奇怪的点:为什么是 `import "C"`? go 工具知道在正常的 Go 代码中,所有函数都必须有主体,并指示编译器强制执行。通过切换到 cgo,我们删除该检查。(如果你在上面的代码中运行 `go build -x`,而没有添加 `import "C"` 这行,你会看到编译器是用 `-complete` 标志调用的。)另一种方法是添加 `import "C"` 来[向包中添加一个名为 `foo.s` 的空文件][8]。
|
||||||
|
|
||||||
|
我仅见过一次这种技术的使用,是在[编译器测试套件][9]中。还有其他[可以发挥想象力的使用][10],但我还没见到过。
|
||||||
|
|
||||||
|
可能就是这样吧。 :)
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://commaok.xyz/post/compile-time-assertions
|
||||||
|
|
||||||
|
作者:[Josh Bleecher Snyder][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://twitter.com/commaok
|
||||||
|
[1]:https://play.golang.org/p/MJ6zF1oNsX
|
||||||
|
[2]:https://golang.org/pkg/io/#WriteString
|
||||||
|
[3]:https://golang.org/pkg/testing/#AllocsPerRun
|
||||||
|
[4]:https://github.com/golang/go/blob/go1.8rc2/src/io/multi.go#L72
|
||||||
|
[5]:https://play.golang.org/p/mjIMWsWu4V
|
||||||
|
[6]:https://golang.org/pkg/crypto/md5/
|
||||||
|
[7]:https://golang.org/ref/spec#Function_declarations
|
||||||
|
[8]:https://github.com/golang/go/blob/go1.8rc2/src/os/signal/sig.s
|
||||||
|
[9]:https://github.com/golang/go/blob/go1.8rc2/test/fixedbugs/issue9608.dir/issue9608.go
|
||||||
|
[10]:https://github.com/golang/go/blob/go1.8rc2/src/runtime/hashmap.go#L261
|
@ -0,0 +1,73 @@
|
|||||||
|
如何加入一个技术社区
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
> 参照以下几步可以让你很容易地融入社区
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*图片提供: opensource.com*
|
||||||
|
|
||||||
|
加入一个新的社区在很多情况下可能是一个艰巨的任务。当加入一个新的技术社区时,焦虑感可能特别强烈,尤其是一些社区对新成员的严厉甚至讥讽都是有名的。
|
||||||
|
|
||||||
|
虽然有可能陷入一个不公正的地方,但是我认为你会发现大多数技术社区是相当合理的,并且以下几个简单的步骤可以缓解从非成员到成员的过渡。
|
||||||
|
|
||||||
|
### 冷暖自知
|
||||||
|
|
||||||
|
在你开始实际加入社区前,首先你要确保该社区适合你,同时你也是合适该社区。
|
||||||
|
|
||||||
|
这听起来很简单,但每个社区都有不同的文化、态度、理念和公认的规范。如果你对某个话题还了解甚少,那么面向行业专业人士的社区可能就不是一个理想的起点。同样,如果你是一个资深专家,希望寻找深入并且极其复杂问题的答案,那么初学者的社区肯定也不太合适。无论哪种方式,两边的不匹配几乎肯定会导致双方的失望。同样,一些社区是非常正规并且面向商业的,而另一些社区将非常宽松和悠闲,也有许多社区的氛围处于二者之间。选择适合你自己的社区,或至少不是让你厌恶的社区,这将有助于确保你的长期参与,可以使你顺利的迈出这一步。
|
||||||
|
|
||||||
|
### 潜龙勿用
|
||||||
|
|
||||||
|
最初以只读模式围观参与社区是一个好方法。但这并不意味着你不应该立即创建一个帐户或加入,只是你可以通过围观社区得到一个空间感(无论是虚拟的或物理的)。潜伏一段时间有助于你适应社区的规则和文化,以此确定你是否认为这是一个很适合你的平台。
|
||||||
|
|
||||||
|
### 毛遂自荐
|
||||||
|
|
||||||
|
根据社区的不同,自我介绍的细节将有很大的不同。同样,确保这样做的方式容易被社区接受。
|
||||||
|
|
||||||
|
有些社区可能有一个专门的介绍板块,而在另一些社区,它可能是填写你的个人资料等有意义和相关的信息。如果社区是邮件列表或 IRC 频道,在你的首次发问中包含简要介绍可能更有意义。这可以让社区了解你是谁,为什么你想成为社区的一部分,并让他们知道一点关于你自己和你的技术水平的信息。
|
||||||
|
|
||||||
|
### 相敬如宾
|
||||||
|
|
||||||
|
虽然社区与社区的接受方式有很大的不同,但你应该永远保持尊重。避免争吵和人身攻击,并始终致力于建设。记住,你在互联网上发布的东西,它就会一直在那里,不尽不灭,并为大家所看到。
|
||||||
|
|
||||||
|
### 非礼勿言
|
||||||
|
|
||||||
|
#### 提问
|
||||||
|
|
||||||
|
记住,精心设计的问题可以更快地得到更好的答案,正如我在十月专栏 [The Queue][2] 中指出的那样。
|
||||||
|
|
||||||
|
#### 回答
|
||||||
|
|
||||||
|
一旦遇见了自己很了解的关于基础或非常容易回答的提问时,“尊重”的理念也同样适用,就像提问时一样。一个冗长的并充满优越感的技术上正确的答案,并不是向一个新的社区介绍自己的正确方式。
|
||||||
|
|
||||||
|
#### 闲话
|
||||||
|
|
||||||
|
即使在技术社区,也并不是所有的讨论都是关于某个问题或答案。在这种情况下,以尊重和周到的、不带有侮辱和人身攻击的方式,提出不同的意见或挑战他人的观点才是健康正确的做法。
|
||||||
|
|
||||||
|
### 不亦说乎
|
||||||
|
|
||||||
|
长期参加社区最重要的事情是在那里可以满足自己。参与一个充满活力的社区是一个学习、成长、挑战和提升自我的好机会。很多情况下,这并不容易,但它是值得的。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Jeremy Garcia - Jeremy Garcia 是 LinuxQuestions.org 的创始人,同时也是一个热情和注重实际的开源拥护者。个人推特: @linuxquestions
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://opensource.com/article/17/1/how-join-technical-community
|
||||||
|
|
||||||
|
作者:[Jeremy Garcia][a]
|
||||||
|
译者:[livc](https://github.com/livc)
|
||||||
|
校对:[Bestony](https://github.com/Bestony), [wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://opensource.com/users/jeremy-garcia
|
||||||
|
[1]:https://opensource.com/article/17/1/how-join-technical-community?rate=SfjMzwYInmhZiq6Yva3D87kngE-ocLOVraCD0wWbBss
|
||||||
|
[2]:https://opensource.com/life/16/10/how-ask-technical-questions
|
||||||
|
[3]:https://opensource.com/user/86816/feed
|
||||||
|
[4]:https://opensource.com/article/17/1/how-join-technical-community#comments
|
||||||
|
[5]:https://opensource.com/users/jeremy-garcia
|
@ -0,0 +1,212 @@
|
|||||||
|
wkhtmltopdf:一个 Linux 中将网页转成 PDF 的智能工具
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
wkhtmltopdf 是一个开源、简单而有效的命令行 shell 程序,它可以将任何 HTML (网页)转换为 PDF 文档或图像(jpg、png 等)。
|
||||||
|
|
||||||
|
wkhtmltopdf 是用 C++ 编写的,并在 GNU/GPL (通用公共许可证)下发布。它使用 WebKit 渲染引擎将 HTML 页面转换为 PDF 文档且不会丢失页面的质量。这是一个用于实时创建和存储网页快照的非常有用且可信赖的解决方案。
|
||||||
|
|
||||||
|
### wkhtmltopdf 的功能
|
||||||
|
|
||||||
|
1. 开源并且跨平台。
|
||||||
|
2. 使用 WebKit 引擎将任意 HTML 网页转换为 PDF 文件。
|
||||||
|
3. 添加页眉和页脚的选项
|
||||||
|
4. 目录生成 (TOC) 选项。
|
||||||
|
5. 提供批量模式转换。
|
||||||
|
6. 通过绑定 libwkhtmltox 来支持 PHP 或 Python。
|
||||||
|
|
||||||
|
在本文中,我们将介绍如何在 Linux 系统下使用 tar 包来安装 wkhtmltopdf。
|
||||||
|
|
||||||
|
### 安装 Evince (PDF 浏览器)
|
||||||
|
|
||||||
|
让我们在 Linux 系统中安装 evince (一个 PDF 阅读器)来浏览 PDF 文件。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo yum install evince [RHEL/CentOS and Fedora]
|
||||||
|
$ sudo dnf install evince [On Fedora 22+ versions]
|
||||||
|
$ sudo apt-get install evince [On Debian/Ubuntu systems]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 下载 wkhtmltopdf 源码文件
|
||||||
|
|
||||||
|
使用 [wget 命令][1]根据你的 Linux 架构来下载 wkhtmltopdf 源码文件,或者你也可以在 [wkhtmltopdf 下载页][2]下载最新的版本(目前最新的稳定版是 0.12.4)
|
||||||
|
|
||||||
|
在 64 位 Linux 系统中:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
|
||||||
|
```
|
||||||
|
|
||||||
|
在 32 位 Linux 系统中:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-i386.tar.xz
|
||||||
|
```
|
||||||
|
|
||||||
|
### 在 Linux 中安装 wkhtmltopdf
|
||||||
|
|
||||||
|
使用 [tar 命令][3]解压文件到当前目录中。
|
||||||
|
|
||||||
|
```
|
||||||
|
------ On 64-bit Linux OS ------
|
||||||
|
$ sudo tar -xvf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
|
||||||
|
------ On 32-bit Linux OS ------
|
||||||
|
$ sudo tar -xvzf wkhtmltox-0.12.4_linux-generic-i386.tar.xz
|
||||||
|
```
|
||||||
|
|
||||||
|
为了能从任意路径执行程序,将 wkhtmltopdf 安装到 `/usr/bin` 目录下。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo cp wkhtmltox/bin/wkhtmltopdf /usr/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
### 如何使用 wkhtmltopdf?
|
||||||
|
|
||||||
|
我们会看到如何将远程的 HTML 页面转换成 PDF 文件、验证信息、使用 evince 在 GNOME 桌面中浏览创建的文件。
|
||||||
|
|
||||||
|
#### 将 HTML 网页转成 PDF 文件
|
||||||
|
|
||||||
|
要将任意 HTML 页面转换成 PDF,运行下面的命令。它会在当前目录下将页面转换成 [10-Sudo-Configurations.pdf][4]。
|
||||||
|
|
||||||
|
```
|
||||||
|
# wkhtmltopdf http://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/ 10-Sudo-Configurations.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
示例输出:
|
||||||
|
|
||||||
|
```
|
||||||
|
Loading pages (1/6)
|
||||||
|
Counting pages (2/6)
|
||||||
|
Resolving links (4/6)
|
||||||
|
Loading headers and footers (5/6)
|
||||||
|
Printing pages (6/6)
|
||||||
|
Done
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 浏览生成的 PDF 文件
|
||||||
|
|
||||||
|
为了验证创建的文件,使用下面的命令。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ file 10-Sudo-Configurations.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
示例输出:
|
||||||
|
|
||||||
|
```
|
||||||
|
10-Sudo-Configurations.pdf: PDF document, version 1.4
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 浏览生成的 PDF 文件细节
|
||||||
|
|
||||||
|
要浏览生成的文件信息,运行下面的命令。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ pdfinfo 10-Sudo-Configurations.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
示例输出:
|
||||||
|
|
||||||
|
```
|
||||||
|
Title: 10 Useful Sudoers Configurations for Setting 'sudo' in Linux
|
||||||
|
Creator: wkhtmltopdf 0.12.4
|
||||||
|
Producer: Qt 4.8.7
|
||||||
|
CreationDate: Sat Jan 28 13:02:58 2017
|
||||||
|
Tagged: no
|
||||||
|
UserProperties: no
|
||||||
|
Suspects: no
|
||||||
|
Form: none
|
||||||
|
JavaScript: no
|
||||||
|
Pages: 13
|
||||||
|
Encrypted: no
|
||||||
|
Page size: 595 x 842 pts (A4)
|
||||||
|
Page rot: 0
|
||||||
|
File size: 697827 bytes
|
||||||
|
Optimized: no
|
||||||
|
PDF version: 1.4
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 浏览创建的文件
|
||||||
|
|
||||||
|
在桌面中使用 evince 查看最新生成的 PDF 文件。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ evince 10-Sudo-Configurations.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
示例截图:
|
||||||
|
|
||||||
|
在我的 Linux Mint 17 中看起来很棒。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][5]
|
||||||
|
|
||||||
|
*在 PDF 中浏览网页*
|
||||||
|
|
||||||
|
### 给 PDF 创建页面的 TOC (Table Of Content 即目录)
|
||||||
|
|
||||||
|
要创建一个 PDF 文件的目录,使用 toc 选项。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ wkhtmltopdf toc http://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/ 10-Sudo-Configurations.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
示例输出:
|
||||||
|
|
||||||
|
```
|
||||||
|
Loading pages (1/6)
|
||||||
|
Counting pages (2/6)
|
||||||
|
Loading TOC (3/6)
|
||||||
|
Resolving links (4/6)
|
||||||
|
Loading headers and footers (5/6)
|
||||||
|
Printing pages (6/6)
|
||||||
|
Done
|
||||||
|
```
|
||||||
|
|
||||||
|
要查看已创建文件的 TOC,再次使用 evince。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ evince 10-Sudo-Configurations.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
示例截图:
|
||||||
|
|
||||||
|
看一下下面的图。它上看去比上面的更好。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][6]
|
||||||
|
|
||||||
|
*在 PDF 中创建网页的目录*
|
||||||
|
|
||||||
|
#### wkhtmltopdf 选项及使用
|
||||||
|
|
||||||
|
更多关于 wkhtmltopdf 的使用及选项,使用下面的帮助命令。它会显示出所有可用的选项。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ wkhtmltopdf --help
|
||||||
|
```
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
我是 Ravi Saive,TecMint 的创建者。一个爱在网上分享的技巧和提示的电脑极客和 Linux 专家。我的大多数服务器运行在名为 Linux 的开源平台上。请在 Twitter、 Facebook 和 Google+ 等上关注我。
|
||||||
|
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/wkhtmltopdf-convert-website-html-page-to-pdf-linux/
|
||||||
|
|
||||||
|
作者:[Ravi Saive][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/admin/
|
||||||
|
[1]:http://www.tecmint.com/10-wget-command-examples-in-linux/
|
||||||
|
[2]:http://wkhtmltopdf.org/downloads.html
|
||||||
|
[3]:http://www.tecmint.com/18-tar-command-examples-in-linux/
|
||||||
|
[4]:http://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/
|
||||||
|
[5]:http://www.tecmint.com/wp-content/uploads/2012/10/View-Website-Page-in-PDF.png
|
||||||
|
[6]:http://www.tecmint.com/wp-content/uploads/2012/10/Create-Website-Page-Table-of-Contents-in-PDF.png
|
@ -1,26 +1,25 @@
|
|||||||
|
Orange Pi 新手起步指南
|
||||||
如何获取并运行 Orange Pi
|
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
图片来源:Dave Egts, CC BY-SA 4.0
|
图片来源:Dave Egts, CC BY-SA 4.0
|
||||||
|
|
||||||
随着开源驱动的硬件越来越成为主流,比如 [Arduino][2] 和 [Raspberry Pi][3],这些开源硬件的成本不断下降,给那些全新且具有创新性的[物联网][4]和[STEM][5](LCTT译注:STEM 代表科学 Science,技术 Technology,工程 Engineering,数学 Mathematics)类软件打开了大门。我对两者都比较感兴趣,始终保持关注,以便能找到一些可以应用到教育产业的创新点,比如课堂教育和我女儿的[机器人小组][6]。当听说 [Orange Pi 比 Raspberry Pi 更优秀][7]时,我便开始关注Orange Pi了。
|
随着开源驱动的硬件越来越成为主流,比如 [Arduino][2] 和 [Raspberry Pi][3],这些开源硬件的成本不断下降,给那些全新且具有创新性的[物联网][4]和[STEM][5](LCTT译注:STEM 代表科学 Science,技术 Technology,工程 Engineering,数学 Mathematics)类软件打开了大门。我对两者都比较感兴趣,始终保持关注,以便能找到一些可以应用到教育产业的创新点,比如课堂教育和我女儿的[机器人小组][6]。当听说 [Orange Pi 比 Raspberry Pi 更优秀][7]时,我便开始关注 Orange Pi了。
|
||||||
|
|
||||||
尽管 Orange Pi 是个略带酸味儿的名字,但是我仍然被 Orange Pi Zero 迷住了。我最近刚购买了一个 Orange Pi Zero 并将在本文中分享我的第一体验。真情提示:我是真的着迷了。
|
尽管 Orange Pi 是个略带酸味儿的名字,但是我仍然被 Orange Pi Zero 迷住了。我最近刚购买了一个 Orange Pi Zero 并将在本文中分享我的第一体验。真情提示:我是真的着迷了。
|
||||||
|
|
||||||
### 为什么是Orange Pi?
|
### 为什么是 Orange Pi?
|
||||||
|
|
||||||
Orange Pi 是由 Linux 驱动的单板计算机家族的一员,由[深圳迅龙软件有限公司][8]生产并在 [AliExpress][9] 上售卖。在 AliExpress 上买东西需要有耐心,提前计划预留出 2 到 4 周的运输时间,因为这些产品都是从中国大陆直接发往全世界其它地方的。
|
Orange Pi 是由 Linux 驱动的单板计算机家族的一员,由[深圳迅龙软件有限公司][8]生产并在 [全球速卖通(AliExpress)][9] 上售卖。在全球速卖通(AliExpress)上买东西需要有耐心,提前计划预留出 2 到 4 周的运输时间,因为这些产品都是从中国大陆直接发往全世界其它地方的。
|
||||||
|
|
||||||
与 Raspberry Pi 不同,Raspberry Pi 家族型号比较少,不过在逐步增加,为单板计算机家族添加了几个具有不同价位及功能特色的型号,但是相对而言 Orange Pi 的型号更丰富。好消息是可以在巨大的软件库中选择你需要的东西,但是坏消息就是选择数量实在太大了。以我的经验来看,使用 [Orange Pi Zero][10] 的 512 MB 版本足矣,因为该版本很好的平衡了功能与价格,适合中学及学术环境使用。
|
与 Raspberry Pi 不同,Raspberry Pi 家族型号比较少,不过在逐步增加,为单板计算机家族添加了几个具有不同价位及功能特色的型号,但是相对而言 Orange Pi 的型号更丰富。好消息是可以在巨大的软件库中选择你需要的东西,但是坏消息就是选择范围实在太大了。以我的经验来看,使用 [Orange Pi Zero][10] 的 512 MB 版本足矣,因为该版本很好的平衡了功能与价格,适合中学及学术环境使用。
|
||||||
|
|
||||||
可以到 [Orange Pi Zero 网站][11] ,查看高清图及所有规格。
|
可以到 [Orange Pi Zero 网站][11] ,查看高清图及所有规格。
|
||||||
|
|
||||||
很明确的问题是,我希望这种设备的价格越便宜越好,但是要能做到开箱即用,并且能够直接联网以便 SSH 及物联网应用能正常使用。Orange Pi Zero 拥有板载的10/100 M 以太网及 802.11 b/g/n Wi-Fi 模块可以连接网络以满足需求。它还有 26 个与 Raspberry Pi 兼容的 [GPIO 端口][12],用于连接物联网应用传感器。我使用的是 512 MB 版本的 Orange Pi Zero 而不是 256MB 版本,因为内存大带来的好处很多,并且这两个版本只相差了 2 美元。除此之外,运费还需要 $12.30,这笔花费对于那些鼓励积极实验及创造魔法烟雾的课堂特别划算。(LCTT 译注:“创造魔法烟雾”是幽默的说法,意即因未知原因设备停止工作,原多用于电气工程师和技术员,最近常被程序员们采用)。
|
很明确的问题是,我希望这种设备的价格越便宜越好,但是要能做到开箱即用,并且能够直接联网以便 SSH 及物联网应用能正常使用。Orange Pi Zero 拥有板载的10/100 M 以太网及 802.11 b/g/n Wi-Fi 模块可以连接网络以满足需求。它还有 26 个与 Raspberry Pi 兼容的 [GPIO 端口][12],用于连接物联网应用传感器。我使用的是 512 MB 版本的 Orange Pi Zero 而不是 256MB 版本,因为内存大带来的好处很多,并且这两个版本只相差了 2 美元。除此之外,运费还需要 $12.30,这笔花费对于那些鼓励积极实验及创造魔法烟雾的课堂特别划算。(LCTT 译注:“创造魔法烟雾”是幽默的说法,意即因未知原因设备停止工作,原多用于电气工程师和技术员,最近常被程序员们采用)。
|
||||||
|
|
||||||
与 $5 的 [Raspberry Pi Zero][14] 相比,Orange Pi Zero 只贵了几元钱,但是这个开箱后更容易上手使用,因为它拥有板载的 Internet 连接模块及 4 核 CPU,而不是单核。这个板载网口使得 Orange Pi Zero 比 Raspberry Pi Zero 更容易使用,因为 Raspberry Pi Zero 还需要一个 Micro-USB-to-USB 转换器及一个 USB Wi-Fi 才能连上网。当赠送别人一个物联网设备作为礼物时,你当然希望对方能够尽快且容易的使用该产品,而不是送一个不完整的产品,那么这个礼物就只能躺在阁楼吃灰了。
|
与 $5 的 [Raspberry Pi Zero][14] 相比,Orange Pi Zero 只贵了几元钱,但是这个开箱后更容易上手使用,因为它拥有板载的 Internet 连接模块及 4 核 CPU,而不是单核。这个板载网口使得 Orange Pi Zero 比 Raspberry Pi Zero 更容易使用,因为 Raspberry Pi Zero 还需要一个 Micro-USB 转 USB 的转换器及一个 USB Wi-Fi 才能连上网。当赠送别人一个物联网设备作为礼物时,你当然希望对方能够尽快且容易的使用该产品,而不是送一个不完整的产品,那么这个礼物就只能躺在阁楼吃灰了。
|
||||||
|
|
||||||
### 开箱经验
|
### 开箱经验
|
||||||
|
|
||||||
@ -32,7 +31,7 @@ Orange Pi 是由 Linux 驱动的单板计算机家族的一员,由[深圳迅
|
|||||||
|
|
||||||
*SSH 登录进 Orange Pi Zero*
|
*SSH 登录进 Orange Pi Zero*
|
||||||
|
|
||||||
通过以太网 SSH 连上后,我可以使用 [nmtui-connect][18] 轻松连上我的无线接入点。然后执行 **apt-get update && apt-get upgrade** 命令,这个命令执行速度比 Raspberry Pi Zero 快,基本接近 [Raspberry Pi 3][19] 的表现了,其他人也[观察到类似的结果][20]。虽然 Orange Pi Zero 执行速度可能比不过Raspberry Pi 3,但是我也没有打算用它来计算基因排序或者挖比特币矿。Armbian 会自动调整 root 分区来使用整个 microSD 卡空间,而使用 Raspbian 的时候这是手动且很容易忘记的步骤。最后,和价值 $35 的 Raspberry Pi 3 相比,购买 $12 的 Orange Pi Zero 可以使得三倍多的学生有自己的学习工具,也可以将 Orange Pi Zero 作为礼物分享给三倍数量的朋友。
|
通过以太网 SSH 连上后,我可以使用 [nmtui-connect][18] 轻松连上我的无线接入点。然后执行 `apt-get update && apt-get upgrade` 命令,这个命令执行速度比 Raspberry Pi Zero 快,基本接近 [Raspberry Pi 3][19] 的表现了,其他人也[观察到类似的结果][20]。虽然 Orange Pi Zero 执行速度可能比不过Raspberry Pi 3,但是我也没有打算用它来计算基因排序或者挖比特币矿。Armbian 会自动调整 root 分区来使用整个 microSD 卡空间,而使用 Raspbian 的时候这是手动且很容易忘记的步骤。最后,和价值 $35 的 Raspberry Pi 3 相比,购买 $12 的 Orange Pi Zero 可以使得三倍多的学生有自己的学习工具,也可以将 Orange Pi Zero 作为礼物分享给三倍数量的朋友。
|
||||||
|
|
||||||

|

|
||||||
|
|
@ -0,0 +1,156 @@
|
|||||||
|
在 Linux 上用火狐浏览器保护你的隐私
|
||||||
|
=============================
|
||||||
|
|
||||||
|
### 介绍
|
||||||
|
|
||||||
|
隐私和安全正在逐渐成为一个重要的话题。虽然不可能做到 100% 安全,但是,还是能采取一些措施,特别是在 Linux 上,在你浏览网页的时候保护你的在线隐私安全。
|
||||||
|
|
||||||
|
基于这些目的选择浏览器的时候,火狐或许是你的最佳选择。谷歌 Chrome 不能信任。它是属于谷歌的,一个众所周知的数据收集公司,而且它是闭源的。 Chromium 或许还可以,但并不能保证。只有火狐保持了一定程度的用户权利承诺。
|
||||||
|
|
||||||
|
### 火狐设置
|
||||||
|
|
||||||
|
火狐里有几个你能设定的设置,能更好地保护你的隐私。这些设置唾手可得,能帮你控制那些在你浏览的时候分享的数据。
|
||||||
|
|
||||||
|
#### 健康报告
|
||||||
|
|
||||||
|
你首先可以设置的是对火狐健康报告发送的限制,以限制数据发送量。当然,这些数据只是被发送到 Mozilla,但这也是传输数据。
|
||||||
|
|
||||||
|
打开火狐的菜单,点击<ruby>“选项”<rt>Preferences</rt></ruby>。来到侧边栏里的<ruby>“高级”<rt>Advanced</rt></ruby>选项卡,点击<ruby>“数据选项”<rt>Data Choices</rt></ruby>。这里你能禁用任意数据的报告。
|
||||||
|
|
||||||
|
#### 搜索
|
||||||
|
|
||||||
|
新版的火狐浏览器默认使用雅虎搜索引擎。一些发行版会更改设置,替代使用的是谷歌。两个方法都不理想。火狐可以使用 DuckDuckGo 作为默认选项。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
为了启用 DuckDuckGo,你得打开火狐菜单点击<ruby>“选项”<rt>Preferences</rt></ruby>。直接来到侧边栏的<ruby>“搜索”<rt>Search</rt></ruby>选项卡。然后,在<ruby>“默认搜索引擎”<rt>Default Search Engine</rt></ruby>的下拉菜单中选择 DuckDuckGo 。
|
||||||
|
|
||||||
|
#### <ruby>请勿跟踪<rt>Do Not Track</rt></ruby>
|
||||||
|
|
||||||
|
这个功能并不完美,但它确实向站点发送了一个信号,告诉它们不要使用分析工具来记录你的活动。这些网页或许会遵从,会许不会。但是,最好启用请勿跟踪,也许它们会遵从呢。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
再次打开火狐的菜单,点击<ruby>“选项”<rt>Preferences</rt></ruby>,然后是<ruby>“隐私”<rt>Privacy</rt></ruby>。页面的最上面有一个<ruby>“跟踪”<rt>Tracking</rt></ruby>部分。点击那一行写着<ruby>“您还可以管理您的‘请勿跟踪’设置”<rt>You can also manage your Do Not Track settings</rt></ruby>的链接。会出现一个有复选框的弹出窗口,那里允许你启用“请勿跟踪”设置。
|
||||||
|
|
||||||
|
#### 禁用 Pocket
|
||||||
|
|
||||||
|
没有任何证据显示 Pocket 正在做一些不好的事情,但是禁用它或许更好,因为它确实连接了一个专有的应用。
|
||||||
|
|
||||||
|
禁用 Pocket 不是太难,但是你得注意只改变 Pocket 相关设置。要访问你所需的配置页面,在火狐的地址栏里输入`about:config`。
|
||||||
|
|
||||||
|
页面会加载一个设置表格,在表格的最上面是搜索栏,在那儿搜索 Pocket 。
|
||||||
|
|
||||||
|
你将会看到一个包含结果的新表格。找一下名为 `extensions.pocket.enabled` 的设置。当你找到它的时候,双击使其转变为“否”。你也能在这儿编辑 Pocket 的其他相关设置。不过没什么必要。注意不要编辑那些跟 Pocket 扩展不直接相关的任何东西。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### <ruby>附加组件<rt>Add-ons</rt></ruby>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
火狐最有效地保护你隐私和安全的方式来自附加组件。火狐有大量的附加组件库,其中很多是免费、开源的。在这篇指导中着重提到的附加组件,在使浏览器更安全方面是名列前茅的。
|
||||||
|
|
||||||
|
#### HTTPS Everywhere
|
||||||
|
|
||||||
|
针对大量没有使用 SSL 证书的网页、许多不使用 `https` 协议的链接、指引用户前往不安全版本的网页等现状,<ruby>电子前线基金会<rt>Electronic Frontier Foundation</rt></ruby>开发了 HTTPS Everywhere。HTTPS Everywhere 确保了如果该链接存在有一个加密的版本,用户将会使用它。
|
||||||
|
|
||||||
|
给火狐设计的 [HTTPS Everywhere](https://addons.mozilla.org/en-us/firefox/addon/https-everywhere/) 已经可以使用,在火狐的附加组件搜索网页上。(LCTT 译注:对应的[中文页面](https://addons.mozilla.org/zh-CN/firefox/addon/https-everywhere/)。)
|
||||||
|
|
||||||
|
|
||||||
|
#### Privacy Badger
|
||||||
|
|
||||||
|
电子前线基金会同样开发了 Privacy Badger。 [Privacy Badger](https://addons.mozilla.org/en-us/firefox/addon/privacy-badger17) 旨在通过阻止不想要的网页跟踪,弥补“请勿跟踪”功能的不足之处。它同样能通过火狐附加组件仓库安装。。(LCTT 译注:对应的[中文页面](https://addons.mozilla.org/zh-CN/firefox/addon/privacy-badger17/)。)
|
||||||
|
|
||||||
|
|
||||||
|
#### uBlock Origin
|
||||||
|
|
||||||
|
现在有一类更通用的的隐私附加组件,屏蔽广告。这里的选择是 uBlock Origin,uBlock Origin 是个更轻量级的广告屏蔽插件,几乎不遗漏所有它会屏蔽的广告。 [uBlock Origin](https://addons.mozilla.org/en-us/firefox/addon/ublock-origin/) 将主要屏蔽各种广告,特别是侵入性的广告。你能在这儿找到它。。(LCTT 译注:对应的[中文页面](https://addons.mozilla.org/zh-CN/firefox/addon/ublock-origin/)。)
|
||||||
|
|
||||||
|
#### NoScript
|
||||||
|
|
||||||
|
阻止 JavaScript 是有点争议, JavaScript 虽说支撑了那么多的网站,但还是臭名昭著,因为 JavaScript 成为侵略隐私和攻击的媒介。NoScript 是应对 JavaScript 的绝佳方案。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
NoScript 是一个 JavaScript 的白名单,它会屏蔽所有 JavaScript,除非该站点被添加进白名单中。可以通过插件的“选项”菜单,事先将一个站点加入白名单,或者通过在页面上点击 NoScript 图标的方式添加。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
通过火狐附加组件仓库可以安装 [NoScript](https://addons.mozilla.org/en-US/firefox/addon/noscript/)
|
||||||
|
如果网页提示不支持你使用的火狐版本,点<ruby>“无论如何下载”<rt>Download Anyway</rt></ruby>。这已经在 Firefox 51 上测试有效。
|
||||||
|
|
||||||
|
#### Disconnect
|
||||||
|
|
||||||
|
[Disconnect](https://addons.mozilla.org/en-US/firefox/addon/disconnect/) 做的事情很多跟 Privacy Badger 一样,它只是提供了另一个保护的方法。你能在附加组件仓库中找到它 (LCTT 译注:对应的[中文页面](https://addons.mozilla.org/zh-CN/firefox/addon/disconnect/))。如果网页提示不支持你使用的火狐版本,点<ruby>“无论如何下载”<rt>Download Anyway</rt></ruby>。这已经在 Firefox 51 上测试有效。
|
||||||
|
|
||||||
|
#### Random Agent Spoofer
|
||||||
|
|
||||||
|
Random Agent Spoofer 能改变火狐浏览器的签名,让浏览器看起来像是在其他任意平台上的其他任意浏览器。虽然有许多其他的用途,但是它也能用于预防浏览器指纹侦查。
|
||||||
|
|
||||||
|
<ruby>浏览器指纹侦查<rt>Browser Fingerprinting</rt></ruby>是网站基于所使用的浏览器和操作系统来跟踪用户的另一个方式。相比于 Windows 用户,浏览器指纹侦查更多影响到 Linux 和其他替代性操作系统用户,因为他们的浏览器特征更独特。
|
||||||
|
|
||||||
|
你能通过火狐附加插件仓库添加 [Random Agent Spoofer](https://addons.mozilla.org/en-us/firefox/addon/random-agent-spoofer/)。(LCTT 译注:对应的[中文页面](https://addons.mozilla.org/zh-CN/firefox/addon/random-agent-spoofer/))。像其他附加组件那样,页面或许会提示它不兼容最新版的火狐。再说一次,那并不是真的。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
你可以通过点击火狐菜单栏上的图标来使用 Random Agent Spoofer。点开后将会出现一个下拉菜单,有不同模拟的浏览器选项。最好的选项之一是选择"Random Desktop" 和任意的切换时间。这样,就绝对没有办法来跟踪你了,也保证了你只能获得网页的桌面版本。
|
||||||
|
|
||||||
|
### 系统设置
|
||||||
|
|
||||||
|
#### 私人 DNS
|
||||||
|
|
||||||
|
请避免使用公共或者 ISP 的 DNS 服务器!即使你配置你的浏览器满足绝对的隐私标准,你向公共 DNS 服务器发出的 DNS 请求却暴露了所有你访问过的网页。诸如谷歌公共 DNS(IP:8.8.8.8 、8.8.4.4)这类的服务将会记录你的 IP 地址、你的 ISP 和地理位置信息。这些信息或许会被任何合法程序或者强制性的政府请求所分享。
|
||||||
|
|
||||||
|
> **当我在使用谷歌公共 DNS 服务时,谷歌会记录什么信息?**
|
||||||
|
>
|
||||||
|
> 谷歌公共 DNS 隐私页面有一个完整的收集信息列表。谷歌公共 DNS 遵循谷歌的主隐私政策,在<ruby>“隐私中心”<rt>Privacy Center</rt></ruby>可以看到。 用户的客户端 IP 地址是唯一会被临时记录的(一到两天后删除),但是为了让我们的服务更快、更好、更安全,关于 ISP 和城市/都市级别的信息将会被保存更长的时间。
|
||||||
|
> 参考资料: `https://developers.google.com/speed/public-dns/faq#privacy`
|
||||||
|
|
||||||
|
由于以上原因,如果可能的话,配置并使用你私人的非转发 DNS 服务器。现在,这项任务或许跟在本地部署一些预先配置好的 DNS 服务器的 Docker 容器一样简单。例如,假设 Docker 服务已经在你的系统安装完成,下列命令将会部署你的私人本地 DNS 服务器:
|
||||||
|
|
||||||
|
```
|
||||||
|
# docker run -d --name bind9 -p 53:53/udp -p 53:53 fike/bind9
|
||||||
|
```
|
||||||
|
|
||||||
|
DNS 服务器现在已经启动并正在运行:
|
||||||
|
|
||||||
|
```
|
||||||
|
# dig @localhost google.com
|
||||||
|
; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @localhost google.com
|
||||||
|
; (2 servers found)
|
||||||
|
;; global options: +cmd
|
||||||
|
;; Got answer:
|
||||||
|
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51110
|
||||||
|
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 5
|
||||||
|
|
||||||
|
;; OPT PSEUDOSECTION:
|
||||||
|
; EDNS: version: 0, flags:; udp: 4096
|
||||||
|
;; QUESTION SECTION:
|
||||||
|
;google.com. IN A
|
||||||
|
|
||||||
|
;; ANSWER SECTION:
|
||||||
|
google.com. 242 IN A 216.58.199.46
|
||||||
|
```
|
||||||
|
|
||||||
|
现在,在 `/etc/resolv.conf` 里设置你的域名服务器:
|
||||||
|
|
||||||
|
```
|
||||||
|
nameserver 127.0.0.1
|
||||||
|
```
|
||||||
|
|
||||||
|
### 结束语
|
||||||
|
|
||||||
|
没有完美的安全隐私解决方案。虽然本篇指导里的步骤可以明显改进它们。如果你真的很在乎隐私,[Tor 浏览器](https://www.torproject.org/projects/torbrowser.html.en) 是最佳选择。Tor 对于日常使用有点过犹不及,但是它的确使用了这篇指导里列出的一些措施。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://linuxconfig.org/protecting-your-privacy-with-firefox-on-linux
|
||||||
|
|
||||||
|
作者:[Nick Congleton][a]
|
||||||
|
译者:[ypingcn](https://ypingcn.github.io/wiki/lctt)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]: https://linuxconfig.org/protecting-your-privacy-with-firefox-on-linux
|
@ -0,0 +1,172 @@
|
|||||||
|
如何定制 SSH 来简化远程访问
|
||||||
|
===================
|
||||||
|
|
||||||
|
SSH (指 SSH 客户端)是一个用于访问远程主机的程序,它使得用户能够 [在远程主机上执行命令][2]。这是在登录远程主机中的最受推崇的方法之一,因为其设计目的就是在非安全网络环境上为两台非受信主机的通信提供安全加密。
|
||||||
|
|
||||||
|
SSH 使用系统全局以及用户指定(用户自定义)的配置文件。在本文中,我们将介绍如何创建一个自定义的 ssh 配置文件,并且通过特定的选项来连接到远程主机。
|
||||||
|
|
||||||
|
### 先决条件:
|
||||||
|
|
||||||
|
1. 你必须 [在你的桌面 Linux 上安装好 OpenSSH 客户端][1]。
|
||||||
|
2. 了解通过 ssh 进行远程连接的常用选项。
|
||||||
|
|
||||||
|
### SSH 客户端配置文件
|
||||||
|
|
||||||
|
以下为 ssh 客户端配置文件:
|
||||||
|
|
||||||
|
1. `/etc/ssh/ssh_config` 为默认的配置文件,属于系统全局配置文件,包含应用到所有用户的 ssh 客户端的设置。
|
||||||
|
2. `~/.ssh/config` 或者 `$HOME/.ssh/config` 为用户指定/自定义配置文件,这个文件中的配置只对指定的用户有效,因此,它会覆盖掉默认的系统全局配置文件中的设置。这也是我们要创建和使用的文件。
|
||||||
|
|
||||||
|
默认情况下,用户是通过在 ssh 中输入密码来获取验证的,你可以以一个简单的步骤来 [使用 Keygen 来设置 ssh 无密码登录][3]。
|
||||||
|
|
||||||
|
注:如果你的系统上不存在 `~/.ssh` 目录,那就手动创建它,并设置如下权限:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ mkdir -p ~/.ssh
|
||||||
|
$ chmod 0700 ~/.ssh
|
||||||
|
```
|
||||||
|
|
||||||
|
以上的 `chmod` 命令表明,只有目录属主对该目录有读取、写入和执行权限,这也是 ssh 所要求的设置。
|
||||||
|
|
||||||
|
### 如何创建用户指定的 SSH 配置文件
|
||||||
|
|
||||||
|
该文件并不会被默认创建的,所以你需要使用具有读取/写入权限的用户来创建它。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ touch ~/.ssh/config
|
||||||
|
$ chmod 0700 ~/.ssh/config
|
||||||
|
```
|
||||||
|
|
||||||
|
上述文件包含由特定主机定义的各个部分,并且每个部分只应用到主机定义中相匹配的部分。
|
||||||
|
|
||||||
|
`~/.ssh/config` 文件的常见格式如下,其中所有的空行和以 `‘#’` 开头的行为注释:
|
||||||
|
|
||||||
|
```
|
||||||
|
Host host1
|
||||||
|
ssh_option1=value1
|
||||||
|
ssh_option2=value1 value2
|
||||||
|
ssh_option3=value1
|
||||||
|
Host host2
|
||||||
|
ssh_option1=value1
|
||||||
|
ssh_option2=value1 value2
|
||||||
|
Host *
|
||||||
|
ssh_option1=value1
|
||||||
|
ssh_option2=value1 value2
|
||||||
|
```
|
||||||
|
|
||||||
|
如上格式详解:
|
||||||
|
|
||||||
|
1. `Host host1` 为关于 host1 的头部定义,主机相关的设置就从此处开始,直到下一个头部定义 `Host host2` 出现,这样形成一个完整的定义。
|
||||||
|
2. host1 和 host2 是在命令行中使用的主机别名,并非实际的远程主机名。
|
||||||
|
3. 其中,如 ssh_option1=value1、ssh_option2=value1 value2 等配置选项将应用到相匹配的主机,可以缩进以看起来更整齐些。
|
||||||
|
4. 对于 ssh_option2=value1 value2 这样的选项,ssh 执行时会按照顺序优先使用 value1 的值。
|
||||||
|
5. 头部定义 `Host *` (其中 `*` 为匹配模式/通配符,匹配零个或多个字符) 会匹配零个或者多个主机。
|
||||||
|
|
||||||
|
仍旧以上述的格式为例,ssh 也是也这样的形式类读取配置文件的。如果你执行 ssh 命令来访问远程主机 host1,如下:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ssh host1
|
||||||
|
```
|
||||||
|
|
||||||
|
以上 ssh 命令会进行一下动作:
|
||||||
|
|
||||||
|
1. 匹配配置文件中主机别名 host1,并使用头部定义中的各个设置项。
|
||||||
|
2. 继续匹配下一个主机定义,然后发现命令行中提供的主机名没有匹配的了,所以接下来的各个设置项会被略过。
|
||||||
|
3. 最后执行到最后一个主机定义 `Host *`, 这会匹配所有的主机。这里,会将接下来的所有设置选项应用到所有的主机连接中。但是它不会覆写之前已经有主机定义的那些选项。
|
||||||
|
4. ssh host2 与此类似。
|
||||||
|
|
||||||
|
### 如何使用用户指定的 shh 配置文件
|
||||||
|
|
||||||
|
在你理解了 ssh 客户端配置文件的工作方式之后,你可以通过如下方式来创建它。记得使用你的服务器环境中对应的选项、值 (主机别名、端口号、用户名等)。
|
||||||
|
|
||||||
|
通过你最喜欢的编辑器来打开配置文件:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ vi ~/.ssh/config
|
||||||
|
```
|
||||||
|
|
||||||
|
并定义必要的部分:
|
||||||
|
|
||||||
|
```
|
||||||
|
Host fedora25
|
||||||
|
HostName 192.168.56.15
|
||||||
|
Port 22
|
||||||
|
ForwardX11 no
|
||||||
|
Host centos7
|
||||||
|
HostName 192.168.56.10
|
||||||
|
Port 22
|
||||||
|
ForwardX11 no
|
||||||
|
Host ubuntu
|
||||||
|
HostName 192.168.56.5
|
||||||
|
Port 2222
|
||||||
|
ForwardX11 yes
|
||||||
|
Host *
|
||||||
|
User tecmint
|
||||||
|
IdentityFile ~/.ssh/id_rsa
|
||||||
|
Protocol 2
|
||||||
|
Compression yes
|
||||||
|
ServerAliveInterval 60
|
||||||
|
ServerAliveCountMax 20
|
||||||
|
LogLevel INFO
|
||||||
|
```
|
||||||
|
|
||||||
|
以上 ssh 配置文件的详细解释:
|
||||||
|
|
||||||
|
1. `HostName` - 定义真正要登录的主机名,此外,你也可以使用数字 IP 地址,不管是在命令行或是 HostName 定义中都允许使用其中任一种。
|
||||||
|
2. `User` – 指定以哪一个用户来登录。
|
||||||
|
3. `Port` – 设置连接远程主机的端口,默认是 22 端口。但必须是远程主机的 sshd 配置文件中定义的端口号。
|
||||||
|
4. `Protocol` – 这个选项定义了优先使用 ssh 支持的协议版本。常用的值为 ‘1’ 和 ‘2’,同时使用两个协议版本则必须使用英文逗号隔开。
|
||||||
|
5. `IdentityFile` – 指定一个用于读取用户 DSA、Ed25519、ECDSA 等授权验证信息的文件。
|
||||||
|
6. `ForwardX11` – 定义 X11 连接是否自动重定向到安全通道和 DISPLAY 设置。有两个可以设置的值,即 `yes` 或 `no`。
|
||||||
|
7. `Compression` – 默认值为 `no`,如果设置为 `yes`,则在连接远程主机过程中使用压缩进行传输。
|
||||||
|
8. `ServerAliveInterval` – 设置当没有收到服务器响应 (或者数据))时的超时时间,单位为秒,ssh 会通过加密信道发送信息,请求服务器响应。默认值为 `0`,这意味着 ssh 不会向服务器发送响应请求;如果定义了 BatchMode 选项,则默认是 300 秒。
|
||||||
|
9. `ServerAliveCountMax` – 设置服务器在没有接收到服务器的任何响应时,由服务器发送的活动信息数量。
|
||||||
|
10. `LogLevel` – 定义 ssh 登录信息的的日志冗余级别。允许的值为:`QUIET`、`FATAL`、`ERROR`、`INFO`、`VERBOSE`、`DEBUG`、`DEBUG1`、`DEBUG2` 和 `DEBUG3`,默认为 `INFO`。
|
||||||
|
|
||||||
|
连接任意远程主机的标准方法是在上述两个文件中定义第二个部分(我连接的是 CentOS 7)。一般情况下,我们这样输入命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ssh -i ~/.ssh/id_rsa -p 22 tecmint@192.168.56.10
|
||||||
|
```
|
||||||
|
|
||||||
|
然而,使用了 ssh 客户端配置文件之后,我们还可以这样:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ssh centos7
|
||||||
|
```
|
||||||
|
|
||||||
|
你也可以在 man 帮助页面寻找更多的设置选项和使用实例:
|
||||||
|
|
||||||
|
```
|
||||||
|
$man ssh_config
|
||||||
|
```
|
||||||
|
|
||||||
|
至此,文毕。我们在文中向你介绍了在 Linux 中如何使用用户指定 (自定义) 的 ssh 客户端配置文件。通过下方的反馈表单来写一些与本文的相关的想法吧。
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Aaron Kili 是一名 Linux 和 F.O.S.S 忠实拥护者、高级 Linux 系统管理员、Web 开发者,目前在 TecMint 是一名活跃的博主,热衷于计算机并有着强烈的只是分享意愿。
|
||||||
|
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
|
译者简介:
|
||||||
|
|
||||||
|
[GHLandy](http://GHLandy.com) —— 生活中所有欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。
|
||||||
|
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/configure-custom-ssh-connection-in-linux/
|
||||||
|
|
||||||
|
作者:[Aaron Kili][a]
|
||||||
|
译者:[GHLandy](https://github.com/GHLandy)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.tecmint.com/author/aaronkili/
|
||||||
|
|
||||||
|
[1]:http://www.tecmint.com/install-openssh-server-in-linux/
|
||||||
|
[2]:http://www.tecmint.com/execute-commands-on-multiple-linux-servers-using-pssh/
|
||||||
|
[3]:http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/
|
@ -1,13 +1,13 @@
|
|||||||
如何编写和使用自定义的 Shell 函数和函数库
|
如何编写和使用自定义的 Shell 函数和函数库
|
||||||
============================================================
|
============================================================
|
||||||
|
|
||||||
在 Linux 系统下,Shell 脚本在各种不同的情形下给予我们帮助,例如展示信息,甚至 [自动执行特定的系统管理任务][1],创建简单的命令行工具等等。
|
在 Linux 系统下,Shell 脚本可以在各种不同的情形下帮到我们,例如展示信息,甚至 [自动执行特定的系统管理任务][1],创建简单的命令行工具等等。
|
||||||
|
|
||||||
在本指南中,我们将向 Linux 新手展示如何可靠地存储自定义的 shell 脚本,解释如何编写 shell 函数和函数库,以及如何在其它的脚本中使用函数库中的函数。
|
在本指南中,我们将向 Linux 新手展示如何可靠地存储自定义的 shell 脚本,解释如何编写 shell 函数和函数库,以及如何在其它的脚本中使用函数库中的函数。
|
||||||
|
|
||||||
### Shell 脚本要存储在何处
|
### Shell 脚本要存储在何处
|
||||||
|
|
||||||
为了在执行你自己的脚本时不必输入脚本所在位置的完整或绝对路径,脚本必须被存储在 `$PATH`环境变量所定义的路径里的其中一个。
|
为了在执行你自己的脚本时不必输入脚本所在位置的完整或绝对路径,脚本必须被存储在 `$PATH` 环境变量所定义的路径里的其中一个。
|
||||||
|
|
||||||
使用下面的命令可以查看你系统中的 `$PATH` 环境变量:
|
使用下面的命令可以查看你系统中的 `$PATH` 环境变量:
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ $ echo $PATH
|
|||||||
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
|
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
|
||||||
```
|
```
|
||||||
|
|
||||||
通常来说,如果在用户的家目录下存在名为 `bin` 的目录,你就可以将 shell 脚本存储在那个目录下,因为那个目录会自动地被包含在用户的 `$PATH` 环境变量中(译者注:在 Centos6/7 下是这样的,在 Debian8 下不是这样的,在 Ubuntu16.04 下又是这样的)。
|
通常来说,如果在用户的家目录下存在名为 `bin` 的目录,你就可以将 shell 脚本存储在那个目录下,因为那个目录会自动地被包含在用户的 `$PATH` 环境变量中(LCTT 译注:在 Centos 6/7 下是这样的,在 Debian 8 下不是这样的,在 Ubuntu 16.04 下又是这样的)。
|
||||||
|
|
||||||
因此,在你的主目录下创建 `bin` 目录吧(当然这里也可以用来存储 Perl、[Awk][2] 或 Python 的脚本,或者其它程序):
|
因此,在你的主目录下创建 `bin` 目录吧(当然这里也可以用来存储 Perl、[Awk][2] 或 Python 的脚本,或者其它程序):
|
||||||
|
|
||||||
@ -32,14 +32,15 @@ $ mkdir -p ~/lib/sh
|
|||||||
|
|
||||||
### 创建你自己的 Shell 函数和函数库
|
### 创建你自己的 Shell 函数和函数库
|
||||||
|
|
||||||
一个 `shell 函数` 就是在脚本中能够完成特定任务的一组命令。它们的工作原理与其他编程语言中的过程(译者注:可能指的是类似SQL中的存储过程之类的吧)、子例程、函数类似。
|
一个 `shell 函数` 就是在脚本中能够完成特定任务的一组命令。它们的工作原理与其他编程语言中的过程(LCTT 译注:可能指的是类似 SQL 中的存储过程之类的吧)、子例程、函数类似。
|
||||||
|
|
||||||
编写一个函数的语法如下:
|
编写一个函数的语法如下:
|
||||||
|
|
||||||
```
|
```
|
||||||
函数名() { 一系列的命令 } (校对注:在函数名前可以加上 function 关键字,但也可省略不写)
|
函数名() { 一系列的命令 }
|
||||||
```
|
```
|
||||||
|
( LCTT 校注:在函数名前可以加上 `function` 关键字,但也可省略不写)
|
||||||
|
|
||||||
例如,你可以像下面那样在一个脚本中写一个用来显示日期的函数:
|
例如,你可以像下面那样在一个脚本中写一个用来显示日期的函数:
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -96,12 +97,13 @@ IFS="$oldifs" #store old internal field separator
|
|||||||
要使用某个 `lib` 目录下的函数,首先你需要按照下面的形式 将包含该函数的函数库导入到需要执行的 shell 脚本中:
|
要使用某个 `lib` 目录下的函数,首先你需要按照下面的形式 将包含该函数的函数库导入到需要执行的 shell 脚本中:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ . /path/to/lib (译者注:这里的 . 和路径间应该是有空格的)
|
$ . /path/to/lib
|
||||||
或
|
或
|
||||||
$ source /path/to/lib
|
$ source /path/to/lib
|
||||||
```
|
```
|
||||||
|
(LCTT 译注:第一行的 `.` 和路径间**必须**是有空格的)
|
||||||
|
|
||||||
这样你就可以像下面演示的那样,在其它的脚本中使用来自 `~/lib/sh/libMYFUNCS.sh` 的 `printUSERDETS` 函数。
|
这样你就可以像下面演示的那样,在其它的脚本中使用来自 `~/lib/sh/libMYFUNCS.sh` 的 `printUSERDETS` 函数了。
|
||||||
|
|
||||||
在下面的脚本中,如果要打印出某个特定用户的详细信息,你不必再一一编写代码,而只需要简单地调用已存在的函数即可。
|
在下面的脚本中,如果要打印出某个特定用户的详细信息,你不必再一一编写代码,而只需要简单地调用已存在的函数即可。
|
||||||
|
|
||||||
@ -123,15 +125,16 @@ exit 0
|
|||||||
$ chmod 755 test.sh
|
$ chmod 755 test.sh
|
||||||
$ ./test.sh
|
$ ./test.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][3]
|
][3]
|
||||||
|
|
||||||
编写 shell 函数
|
*编写 shell 函数*
|
||||||
|
|
||||||
在本文中,我们介绍了在哪里可靠地存储 shell 脚本,如何编写自己的 shell 函数和函数库,以及如何在一个普通的 shell 脚本中从函数库中调用库中的某些函数。
|
在本文中,我们介绍了在哪里可靠地存储 shell 脚本,如何编写自己的 shell 函数和函数库,以及如何在一个普通的 shell 脚本中从函数库中调用库中的某些函数。
|
||||||
|
|
||||||
在之后,我们还会介绍一种相当简单直接的方式来将 Vim 配置为一个编写 Bash 脚本的 IDE(集成开发环境)。在那之前,记得要经常关注 TecMint ,如果能和我们分享你对这份指南的想法就更好了。
|
在之后,我们还会介绍一种相当简单直接的方式来将 Vim 配置为一个编写 Bash 脚本的 IDE(集成开发环境)。在那之前,记得要经常关注我们 ,如果能和我们分享你对这份指南的想法就更好了。
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
@ -0,0 +1,214 @@
|
|||||||
|
free:一个在 Linux 中检查内存使用情况的标准命令
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
我们都知道, IT 基础设施方面的大多数服务器(包括世界顶级的超级计算机)都运行在 Linux 平台上,因为和其他操作系统相比, Linux 更加灵活。有的操作系统对于一些微乎其微的改动和补丁更新都需要重启,但是 Linux 不需要,只有对于一些关键补丁的更新, Linux 才会需要重启。
|
||||||
|
|
||||||
|
Linux 系统管理员面临的一大挑战是如何在没有任何停机时间的情况下维护系统的良好运行。管理内存使用是 Linux 管理员又一个具有挑战性的任务。`free` 是 Linux 中一个标准的并且被广泛使用的命令,它被用来分析内存统计(空闲和已用)。今天,我们将要讨论 `free` 命令以及它的一些有用选项。
|
||||||
|
|
||||||
|
推荐文章:
|
||||||
|
|
||||||
|
* [smem - Linux 内存报告/统计工具][1]
|
||||||
|
* [vmstat - 一个报告虚拟内存统计的标准而又漂亮的工具][2]
|
||||||
|
|
||||||
|
### Free 命令是什么
|
||||||
|
|
||||||
|
free 命令能够显示系统中物理上的空闲(free)和已用(used)内存,还有交换(swap)内存,同时,也能显示被内核使用的缓冲(buffers)和缓存(caches)。这些信息是通过解析文件 `/proc/meninfo` 而收集到的。
|
||||||
|
|
||||||
|
### 显示系统内存
|
||||||
|
|
||||||
|
不带任何选项运行 `free` 命令会显示系统内存,包括空闲(free)、已用(used)、交换(swap)、缓冲(buffers)、缓存(caches)和交换(swap)的内存总数。
|
||||||
|
|
||||||
|
```
|
||||||
|
# free
|
||||||
|
total used free shared buffers cached
|
||||||
|
Mem: 32869744 25434276 7435468 0 412032 23361716
|
||||||
|
-/+ buffers/cache: 1660528 31209216
|
||||||
|
Swap: 4095992 0 4095992
|
||||||
|
```
|
||||||
|
|
||||||
|
输出有三行:
|
||||||
|
|
||||||
|
* 第一行:表明全部内存、已用内存、空闲内存、共用内存(主要被 tmpfs(`/proc/meninfo` 中的 `Shmem` 项)使用)、用于缓冲的内存以及缓存内容大小。
|
||||||
|
* 全部:全部已安装内存(`/proc/meminfo` 中的 `MemTotal` 项)
|
||||||
|
* 已用:已用内存(全部计算 - 空间+缓冲+缓存)
|
||||||
|
* 空闲:未使用内存(`/proc/meminfo` 中的 `MemFree` 项)
|
||||||
|
* 共用:主要被 tmpfs 使用的内存(`/proc/meminfo` 中的 `Shmem` 项)
|
||||||
|
* 缓冲:被内核缓冲使用的内存(`/proc/meminfo` 中的 `Buffers` 项)
|
||||||
|
* 缓存:被页面缓存和 slab 使用的内存(`/proc/meminfo` 中的 `Cached` 和 `SSReclaimable` 项)
|
||||||
|
* 第二行:表明已用和空闲的缓冲/缓存
|
||||||
|
* 第三行:表明总交换内存(`/proc/meminfo` 中的 `SwapTotal` 项)、空闲内存(`/proc/meminfo` 中的 `SwapFree` 项)和已用交换内存。
|
||||||
|
|
||||||
|
### 以 MB 为单位显示系统内存
|
||||||
|
|
||||||
|
默认情况下, `free` 命令以 `KB - Kilobytes` 为单位输出系统内存,这对于绝大多数管理员来说会有一点迷糊(当系统内存很大的时候,我们中的许多人需要把输出转化为以 MB 为单位,从而才能够理解内存大小)。为了避免这个迷惑,我们在 ‘free’ 命令后面加上 `-m` 选项,就可以立即得到以 ‘MB - Megabytes’ 为单位的输出。
|
||||||
|
|
||||||
|
```
|
||||||
|
# free -m
|
||||||
|
total used free shared buffers cached
|
||||||
|
Mem: 32099 24838 7261 0 402 22814
|
||||||
|
-/+ buffers/cache: 1621 30477
|
||||||
|
Swap: 3999 0 3999
|
||||||
|
```
|
||||||
|
|
||||||
|
如何从上面的输出中检查剩余多少空闲内存?主要基于已用(used)和空闲(free)两列。你可能在想,你只有很低的空闲内存,因为它只有 `10%`, 为什么?
|
||||||
|
|
||||||
|
- 全部实际可用内存 = (全部内存 - 第 2 行的已用内存)
|
||||||
|
- 全部内存 = 32099
|
||||||
|
- 实际已用内存 = 1621 ( = 全部内存 - 缓冲 - 缓存)
|
||||||
|
- 全部实际可用内存 = 30477
|
||||||
|
|
||||||
|
如果你的 Linux 版本是最新的,那么有一个查看实际空闲内存的选项,叫做可用(`available`) ,对于旧的版本,请看显示 `-/+ buffers/cache` 那一行对应的空闲(`free`)一列。
|
||||||
|
|
||||||
|
如何从上面的输出中检查有多少实际已用内存?基于已用(used)和空闲(free)一列。你可能想,你已经使用了超过 `95%` 的内存。
|
||||||
|
|
||||||
|
- 全部实际已用内存 = 第一列已用 - (第一列缓冲 + 第一列缓存)
|
||||||
|
- 已用内存 = 24838
|
||||||
|
- 已用缓冲 = 402
|
||||||
|
- 已用缓存 = 22814
|
||||||
|
- 全部实际已用内存 = 1621
|
||||||
|
|
||||||
|
### 以 GB 为单位显示内存
|
||||||
|
|
||||||
|
默认情况下, `free` 命令会以 `KB - kilobytes` 为单位显示输出,这对于大多数管理员来说会有一些迷惑,所以我们使用上面的选项来获得以 `MB - Megabytes` 为单位的输出。但是,当服务器的内存很大(超过 100 GB 或 200 GB)时,上面的选项也会让人很迷惑。所以,在这个时候,我们可以在 `free` 命令后面加上 `-g` 选项,从而立即得到以 `GB - Gigabytes` 为单位的输出。
|
||||||
|
|
||||||
|
```
|
||||||
|
# free -g
|
||||||
|
total used free shared buffers cached
|
||||||
|
Mem: 31 24 7 0 0 22
|
||||||
|
-/+ buffers/cache: 1 29
|
||||||
|
Swap: 3 0 3
|
||||||
|
```
|
||||||
|
|
||||||
|
### 显示全部内存行
|
||||||
|
|
||||||
|
默认情况下, `free` 命令的输出只有三行(内存、缓冲/缓存以及交换)。为了统一以单独一行显示(全部(内存+交换)、已用(内存+(已用-缓冲/缓存)+交换)以及空闲(内存+(已用-缓冲/缓存)+交换),在 ‘free’ 命令后面加上 `-t` 选项。
|
||||||
|
|
||||||
|
```
|
||||||
|
# free -t
|
||||||
|
total used free shared buffers cached
|
||||||
|
Mem: 32869744 25434276 7435468 0 412032 23361716
|
||||||
|
-/+ buffers/cache: 1660528 31209216
|
||||||
|
Swap: 4095992 0 4095992
|
||||||
|
Total: 36965736 27094804 42740676
|
||||||
|
```
|
||||||
|
|
||||||
|
### 按延迟运行 free 命令以便更好的统计
|
||||||
|
|
||||||
|
默认情况下, free 命令只会显示一次统计输出,这是不足够进一步排除故障的,所以,可以通过添加延迟(延迟是指在几秒后再次更新)来定期统计内存活动。如果你想以两秒的延迟运行 free 命令,可以使用下面的命令(如果你想要更多的延迟,你可以按照你的意愿更改数值)。
|
||||||
|
|
||||||
|
下面的命令将会每 2 秒运行一次直到你退出:
|
||||||
|
|
||||||
|
```
|
||||||
|
# free -s 2
|
||||||
|
total used free shared buffers cached
|
||||||
|
Mem: 32849392 25935844 6913548 188 182424 24632796
|
||||||
|
-/+ buffers/cache: 1120624 31728768
|
||||||
|
Swap: 20970492 0 20970492
|
||||||
|
|
||||||
|
total used free shared buffers cached
|
||||||
|
Mem: 32849392 25935288 6914104 188 182424 24632796
|
||||||
|
-/+ buffers/cache: 1120068 31729324
|
||||||
|
Swap: 20970492 0 20970492
|
||||||
|
|
||||||
|
total used free shared buffers cached
|
||||||
|
Mem: 32849392 25934968 6914424 188 182424 24632796
|
||||||
|
-/+ buffers/cache: 1119748 31729644
|
||||||
|
Swap: 20970492 0 20970492
|
||||||
|
```
|
||||||
|
|
||||||
|
### 按延迟和具体次数运行 free 命令
|
||||||
|
|
||||||
|
另外,你可以按延迟和具体次数运行 free 命令,一旦达到某个次数,便自动退出。
|
||||||
|
|
||||||
|
下面的命令将会每 2 秒运行一次 free 命令,计数 5 次以后自动退出。
|
||||||
|
|
||||||
|
```
|
||||||
|
# free -s 2 -c 5
|
||||||
|
total used free shared buffers cached
|
||||||
|
Mem: 32849392 25931052 6918340 188 182424 24632796
|
||||||
|
-/+ buffers/cache: 1115832 31733560
|
||||||
|
Swap: 20970492 0 20970492
|
||||||
|
|
||||||
|
total used free shared buffers cached
|
||||||
|
Mem: 32849392 25931192 6918200 188 182424 24632796
|
||||||
|
-/+ buffers/cache: 1115972 31733420
|
||||||
|
Swap: 20970492 0 20970492
|
||||||
|
|
||||||
|
total used free shared buffers cached
|
||||||
|
Mem: 32849392 25931348 6918044 188 182424 24632796
|
||||||
|
-/+ buffers/cache: 1116128 31733264
|
||||||
|
Swap: 20970492 0 20970492
|
||||||
|
|
||||||
|
total used free shared buffers cached
|
||||||
|
Mem: 32849392 25931316 6918076 188 182424 24632796
|
||||||
|
-/+ buffers/cache: 1116096 31733296
|
||||||
|
Swap: 20970492 0 20970492
|
||||||
|
|
||||||
|
total used free shared buffers cached
|
||||||
|
Mem: 32849392 25931308 6918084 188 182424 24632796
|
||||||
|
-/+ buffers/cache: 1116088 31733304
|
||||||
|
Swap: 20970492 0 20970492
|
||||||
|
```
|
||||||
|
|
||||||
|
### 人类可读格式
|
||||||
|
|
||||||
|
为了以人类可读的格式输出,在 `free` 命令的后面加上 `-h` 选项,和其他选项比如 `-m` 和 `-g` 相比,这将会更人性化输出(自动使用 GB 和 MB 单位)。
|
||||||
|
|
||||||
|
```
|
||||||
|
# free -h
|
||||||
|
total used free shared buff/cache available
|
||||||
|
Mem: 2.0G 1.6G 138M 20M 188M 161M
|
||||||
|
Swap: 2.0G 1.8G 249M
|
||||||
|
```
|
||||||
|
|
||||||
|
### 取消缓冲区和缓存内存输出
|
||||||
|
|
||||||
|
默认情况下, `缓冲/缓存` 内存输出是同时输出的。为了取消缓冲和缓存内存的输出,可以在 `free` 命令后面加上 `-w` 选项。(该选项在版本 3.3.12 上可用)
|
||||||
|
|
||||||
|
注意比较上面有`缓冲/缓存`的输出。
|
||||||
|
|
||||||
|
```
|
||||||
|
# free -wh
|
||||||
|
total used free shared buffers cache available
|
||||||
|
Mem: 2.0G 1.6G 137M 20M 8.1M 183M 163M
|
||||||
|
Swap: 2.0G 1.8G 249M
|
||||||
|
```
|
||||||
|
|
||||||
|
### 显示最低和最高的内存统计
|
||||||
|
|
||||||
|
默认情况下, `free` 命令不会显示最低和最高的内存统计。为了显示最低和最高的内存统计,在 free 命令后面加上 `-l` 选项。
|
||||||
|
|
||||||
|
```
|
||||||
|
# free -l
|
||||||
|
total used free shared buffers cached
|
||||||
|
Mem: 32849392 25931336 6918056 188 182424 24632808
|
||||||
|
Low: 32849392 25931336 6918056
|
||||||
|
High: 0 0 0
|
||||||
|
-/+ buffers/cache: 1116104 31733288
|
||||||
|
Swap: 20970492 0 20970492
|
||||||
|
```
|
||||||
|
|
||||||
|
### 阅读关于 free 命令的更过信息
|
||||||
|
|
||||||
|
如果你想了解 free 命令的更多可用选项,只需查看其 man 手册。
|
||||||
|
|
||||||
|
```
|
||||||
|
# free --help
|
||||||
|
or
|
||||||
|
# man free
|
||||||
|
```
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.2daygeek.com/free-command-to-check-memory-usage-statistics-in-linux/
|
||||||
|
|
||||||
|
作者:[MAGESH MARUTHAMUTHU][a]
|
||||||
|
译者:[ucasFL](https://github.com/ucasFL)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.2daygeek.com/author/magesh/
|
||||||
|
[1]:http://www.2daygeek.com/smem-linux-memory-usage-statistics-reporting-tool/
|
||||||
|
[2]:http://www.2daygeek.com/linux-vmstat-command-examples-tool-report-virtual-memory-statistics/
|
||||||
|
[3]:http://www.2daygeek.com/author/magesh/
|
@ -0,0 +1,75 @@
|
|||||||
|
5 款值得尝试的 Linux 音乐播放器
|
||||||
|
============================================================
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
目前 Linux 上有几十个音乐播放器,这使得找到一个最好用的变成很困难。之前我们已经回顾了其中的一些播放器,如 [Cantata][10],[Exaile][11],甚至不那么出名的 Clementine,Nightingale 和 Quod Libet。
|
||||||
|
|
||||||
|
在本篇文章中我将涵盖更多的 Linux 音乐播放器,在某些方面甚至比之前介绍过的那些播放器表现更好。
|
||||||
|
|
||||||
|
### 1、 Qmmp
|
||||||
|
|
||||||
|
[Qmmp][13] 并不是特性最丰富的(或最稳定的) Linux 音乐播放器,但却是我最喜欢的一款,这也是为什么我把它放在第一个。我知道有更好的播放器,但我就是喜欢这款并且最常使用它。它确实会崩溃,并且也有许多它不能播放的文件,但不管怎样我依然最爱它。上图!
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Qmmp 是 Linux 上的 WinAMP。它(相对)轻量并且具有一个像样的特性集。因为 WinAMP 伴随着我的成长,并且我很喜欢它的键盘快捷键,当在 Linux 上有一个像 WinAMP 的播放器对我来说是个惊喜。对于音频格式,Qmmp 能够播放大部分流行的格式,如 MPEG1 layer 2/3、Ogg Vorbis 和 Opus、原生的 FLAC/Ogg FLAC、Musepack、WavePack、音轨模块(mod、s3m、it、xm 等等)、ADTS AAC、CD 音频、WMA、Monkey’s Audio(以及 FFmpeg 库提供的其他格式)、Midi、SID 和 Chiptune 格式(AY、GBS、GYM、HES、KSS、NSF、NSFE、SAP、SPC、VGM、VGZ 和 VTX)。
|
||||||
|
|
||||||
|
### 2、 Amarok
|
||||||
|
|
||||||
|
[Amarok][14] 是 KDE 的音乐播放器,当然你也可以把它用在其他的桌面环境。它是 Linux 上最古老的音乐播放器之一。这也许是它很流行的原因,虽然我个人并不是非常喜欢它。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Amarok 能播放大量的音频格式,但它的主要优势是丰富的插件。这个软件附带大量文档,不过它最近没有更新。Amarok 也由于与各种 Web 服务,如 Ampache、Jamendo Service、Last.fm、Librivox、MP3tunes、Magnatune 以及 OPML 播客目录的整合而闻名。
|
||||||
|
|
||||||
|
### 3、 Rhythmbox
|
||||||
|
|
||||||
|
既然我刚刚提到了 Amarok 和 KDE 音乐播放器,那接下来让我们转向 Gnome 的默认音乐播放器, [Rhythmbox][15] 。因为它与 Gnome 一起提供,所以你能猜到它是一款流行的软件。它不仅是一款音乐播放器,同时也是一款音乐管理软件。它支持 MP3 和 OGG,以及十几种其他的文件格式,也包括网络收音机、iPod 服务整合、音频文件播放、音频 CD 刻录和回放、音乐分享以及播客。总而言之,它是款不赖的播放器,但这不意味着你会最喜欢它。试用一下,看看自己是否喜欢。如果不喜欢,就往下看看吧。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 4、 VLC
|
||||||
|
|
||||||
|
虽然 [VLC][16] 是以视频播放器而闻名,但单从它支持最多的解码器这一点来看,它也是一款非常棒的音乐播放器。它无法播放的文件,你也不太可能能用其他播放器打开。VLC 具有高度定制性,并且拥有很多扩展。它能够在 Windows,Linux,Mac OS X,Unix,iOS,Android 等等平台运行。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
我个人不喜欢 VLC 的一点是它占用太多资源。并且我曾用它打开过一些文件,但回放质量离一流水准还差的很远。这个软件在播放一些其他播放器不难应付的文件时,经常会无故关闭。但很可能与播放器没多大关系,可能是文件本身的问题。尽管 VLC 不属于我常用的程序,我仍然由衷的推荐它。
|
||||||
|
|
||||||
|
### 5、 Cmus
|
||||||
|
|
||||||
|
如果你钟爱命令行程序,那么 [Cmus][17] 会是你的菜。你能用它来播放 Ogg Vorbis、MP3、FLAC、Opus、Musepack、WavPack、WAV、AAC、MP4、音频 CD 以及 ffmpeg 支持的所有格式(WMA、APE、MKA、TTA、SHN 等等)和 libmodplug。你也可以用它来播放 Shoutcast 或者 Icecast 的音频流。它不是特性最丰富的音乐播放器,但它拥有所有的基础及进阶功能。它的主要优势是非常轻量,并且它的内存需求真的很小。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
所有的这些音乐播放器都很棒,都有擅长的方面。我没办法说出哪一款是最好的,这更多取决于个人喜好和需要。这些播放器大多要么做为发行版的默认选项安装,要么可以在包管理器中轻松找到。只要打开新立得、软件中心或你的发行版中使用的任意包管理器,搜索并安装它们。你也可以使用命令行,或只要双击从网站上下载的安装文件。使用何种方法取决于你。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.maketecheasier.com/linux-music-players-to-check-out/
|
||||||
|
|
||||||
|
作者:[Ada Ivanova][a]
|
||||||
|
译者:[cycoe](https://github.com/cycoe)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.maketecheasier.com/author/adaivanoff/
|
||||||
|
[1]:https://www.maketecheasier.com/author/adaivanoff/
|
||||||
|
[2]:https://www.maketecheasier.com/linux-music-players-to-check-out/#comments
|
||||||
|
[3]:https://www.maketecheasier.com/category/linux-tips/
|
||||||
|
[4]:http://www.facebook.com/sharer.php?u=https%3A%2F%2Fwww.maketecheasier.com%2Flinux-music-players-to-check-out%2F
|
||||||
|
[5]:http://twitter.com/share?url=https%3A%2F%2Fwww.maketecheasier.com%2Flinux-music-players-to-check-out%2F&text=5+Linux+Music+Players+You+Should+Consider+Switching+To
|
||||||
|
[6]:mailto:?subject=5%20Linux%20Music%20Players%20You%20Should%20Consider%20Switching%20To&body=https%3A%2F%2Fwww.maketecheasier.com%2Flinux-music-players-to-check-out%2F
|
||||||
|
[7]:https://www.maketecheasier.com/mastering-disk-utility-mac/
|
||||||
|
[8]:https://www.maketecheasier.com/airy-youtube-video-downloader/
|
||||||
|
[9]:https://support.google.com/adsense/troubleshooter/1631343
|
||||||
|
[10]:https://www.maketecheasier.com/cantata-new-music-player-for-linux/
|
||||||
|
[11]:https://www.maketecheasier.com/exaile-the-first-media-player-i-dont-hate/
|
||||||
|
[12]:https://www.maketecheasier.com/the-lesser-known-music-players-for-linux/
|
||||||
|
[13]:http://qmmp.ylsoftware.com/
|
||||||
|
[14]:https://amarok.kde.org/
|
||||||
|
[15]:https://wiki.gnome.org/Apps/Rhythmbox
|
||||||
|
[16]:http://www.videolan.org/vlc/
|
||||||
|
[17]:https://cmus.github.io/
|
@ -0,0 +1,136 @@
|
|||||||
|
超酷的 Vim 搜索技巧
|
||||||
|
================================
|
||||||
|
|
||||||
|
尽管目前我们已经[涉及][8] Vim 的多种特性,但此编辑器的特性集如此庞大,不管我们学习多少,似乎仍然远远不足。承接我们的 Vim 教程系列,本文我们将讨论 Vim 提供的多种搜索技术。
|
||||||
|
|
||||||
|
不过在此之前,请注意文中涉及到的所有的例子、命令、指令均是在 Ubuntu 14.04,Vim 7.4 下测试的。
|
||||||
|
|
||||||
|
### Vim 中的基础搜索操作
|
||||||
|
|
||||||
|
当你在 Vim 中打开一个文件并且想要搜索一个特定的单词或模板,第一步你必须要先按下 `Esc` 键从插入模式中退出(如果你正处于插入模式中)。之后输入 `/` 并紧接着输入你要搜索的单词或搜索模式。
|
||||||
|
|
||||||
|
例如,如果你想要搜索的单词是 `linux`,下图显示的就是在 Vim 窗口底部的搜索命令:
|
||||||
|
|
||||||
|
[ ][9]
|
||||||
|
|
||||||
|
敲击回车键之后,你会看到 Vim 会将光标停留在从光标在插入模式中的位置开始,找到的包含此单词的第一行。如果你刚刚打开一个文件并且立即开始了搜索操作,搜索将从文件的首行开始。
|
||||||
|
|
||||||
|
如果想要移动到下一处包含被搜索单词位置,按 `n` 键。当你遍历完所有被搜索模板所在之处,继续按 `n` 键 Vim 将重复搜索操作,光标将回到第一次搜索结果出现位置。
|
||||||
|
|
||||||
|
[  ][10]
|
||||||
|
|
||||||
|
在遍历搜索结果时,如果你想要回到上一匹配处,按 `N` (即 `shift` + `n`)。同时,值得注意的是不管在什么时候,你都可以输入 `ggn` 来跳转到第一个匹配处,或者 `GN` 来跳转到最后一处。
|
||||||
|
|
||||||
|
当你恰好在文件的底部,而且想要逆向搜索的情况下,使用 `?` 代替 `/` 来开始搜索。下图是一个例子:
|
||||||
|
|
||||||
|
[][11]
|
||||||
|
|
||||||
|
### 自定义你的搜索
|
||||||
|
|
||||||
|
#### 1、 高亮搜索结果
|
||||||
|
|
||||||
|
尽管通过 `n` 或 `N` 从被搜索单词或模式的匹配处跳转到另一处很简单,但是如果匹配处能够高亮就更加人性化了。例如,请看下附截图:
|
||||||
|
|
||||||
|
[ ][12]
|
||||||
|
|
||||||
|
这可以通过设置 `hlsearch` 变量来实现,例如在普通/命令行模式中执行下述命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
:set hlsearch
|
||||||
|
```
|
||||||
|
|
||||||
|
[ ][13]
|
||||||
|
|
||||||
|
#### 2、使搜索不区分大小写
|
||||||
|
|
||||||
|
在 Vim 中进行搜索默认是区分大小写的。这就意味着如果我要搜索 `linux`,那么 `Linux` 是不会匹配的。然而,如果这不是你想要的搜索方式,你可以使用如下命令来使搜索变得不区分大小写:
|
||||||
|
|
||||||
|
```
|
||||||
|
:set ignorecase
|
||||||
|
```
|
||||||
|
所以当我设置 `ignorecase` 变量后再使用前边提到的命令,搜索 `linux`,那么 `Linux` 所在处也会被高亮。
|
||||||
|
|
||||||
|
[ ][14]
|
||||||
|
|
||||||
|
#### 3、智能大小写搜索
|
||||||
|
|
||||||
|
Vim 提供了一个功能,只有当要搜索的单词 / 模板包含大写字母时,编辑器才会区分大小写。要想实现这种功能,必须先设置 `ignorecase`,再接着设置 `smartcase` 变量。
|
||||||
|
|
||||||
|
```
|
||||||
|
:set ignorecase
|
||||||
|
:set smartcase
|
||||||
|
```
|
||||||
|
|
||||||
|
例如,如果一个文件中既包含 `LINUX` 也包含 `linux`,在开启智能大小写搜索功能时,如果使用 `/LINUX` 进行搜索,只有单词 `LINUX` 处会被搜到。反之,如果搜索 `/linux`,那么不论大小写的搜索结果都会被匹配。
|
||||||
|
|
||||||
|
#### 4、递进搜索
|
||||||
|
|
||||||
|
就如谷歌一样,随着你输入查询字串(字串随你每输入一个字符不断更新)显示不同的搜索结果,Vim 也同样提供了递进搜索。要想使用这种特性,你必须在搜索前执行下述命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
:set incsearch
|
||||||
|
```
|
||||||
|
|
||||||
|
### 一些很酷的在 Vim 中搜索的小技巧
|
||||||
|
|
||||||
|
你可能会发现还有一些其他的与搜索相关的小技巧很有用。
|
||||||
|
|
||||||
|
开始吧!如果你想要搜索一个文件中的一个单词,但是又不想输入它,你只需要将你的光标移到这个单词下然后按 `*` (或者 `shift` + `8`)。如果你想要启动一次部分搜索(例如:同时搜索 `in` 和 `terminal`),那你需要将光标移到到单词(在本例中, `in`)下,然后通过在键盘上按 `g*` (按一次 `g` 然后不断按 `*` )。
|
||||||
|
|
||||||
|
注意:如果你想要逆向搜索,按 `#` 或者 `g#` 。
|
||||||
|
|
||||||
|
下一个,只要你想要,你可以获得所有被搜索单词或模式匹配处所在的行和行号的一个列表。这可以在你开始搜索后通过按 `[I` 来实现。如下图是一个列表结果如何在 Vim 窗口底部被分组和显示的例子:
|
||||||
|
|
||||||
|
[ ][15]
|
||||||
|
|
||||||
|
接下来,你可能已经得知,Vim 默认是环形搜索的,意味着在到达文件结尾处(或者被搜索单词的最后一处匹配)时,如果继续按 “搜索下一个” 会将光标再次带回第一处匹配处。如果你希望禁止环形搜索,可以使用如下命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
:set nowrapscan
|
||||||
|
```
|
||||||
|
|
||||||
|
再次开启环形搜索,使用如下命令即可:
|
||||||
|
|
||||||
|
```
|
||||||
|
:set wrapscan
|
||||||
|
```
|
||||||
|
|
||||||
|
最后,假设你想要对文件中已经存在的单词做一点小小的修改,然后对修改后的单词执行搜索操作,一种方法是输入 `/` 与要搜索的单词。但是如果这个单词又长又复杂,那么可能需要一点时间来输入它。
|
||||||
|
|
||||||
|
一个简单的办法是将光标移到你想要略微修改的单词下,按 `/` 之后再按 `Ctrl` + `r` 最后按 `Ctrl` + `w`。这个在光标下的单词不仅仅会被拷贝,也会被复制到 `/` 后,允许你对它进行修改并且继续进行搜索操作。
|
||||||
|
|
||||||
|
如果想要获得更多小技巧(包括如何使用鼠标来使在 Vim 中的操作变得简单),请前往 [Vim 官方文档][16]。
|
||||||
|
|
||||||
|
### 结语
|
||||||
|
|
||||||
|
当然,没有人希望你死记硬背这里提到的所有小技巧。你应该做的是,从一个你认为对你最有益的技巧开始不断练习。当它成为一种习惯并且嵌入你的记忆后,重新来这儿找找你应该开始学习的下一个技巧。
|
||||||
|
|
||||||
|
你知道其他像这样的技巧吗?并且希望能够和大家一起分享?那就在下边留言吧!
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/perform-search-operations-in-vim/
|
||||||
|
|
||||||
|
作者:[Himanshu Arora][a]
|
||||||
|
译者:[xiaow6](https://github.com/xiaow6)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/perform-search-operations-in-vim/
|
||||||
|
[1]:https://www.howtoforge.com/tutorial/perform-search-operations-in-vim/#-search-highlighting
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/perform-search-operations-in-vim/#-making-searchnbspcaseinsensitive
|
||||||
|
[3]:https://www.howtoforge.com/tutorial/perform-search-operations-in-vim/#-smartcase-search
|
||||||
|
[4]:https://www.howtoforge.com/tutorial/perform-search-operations-in-vim/#-incremental-search
|
||||||
|
[5]:https://www.howtoforge.com/tutorial/perform-search-operations-in-vim/#customize-your-search
|
||||||
|
[6]:https://www.howtoforge.com/tutorial/perform-search-operations-in-vim/#some-other-cool-vim-search-tipstricks
|
||||||
|
[7]:https://www.howtoforge.com/tutorial/perform-search-operations-in-vim/#conclusion
|
||||||
|
[8]:https://www.howtoforge.com/tutorial/vim-editor-modes-explained/
|
||||||
|
[9]:https://www.howtoforge.com/images/perform-search-operations-in-vim/big/vim-basic-search.png
|
||||||
|
[10]:https://www.howtoforge.com/images/perform-search-operations-in-vim/big/vim-search-end.png
|
||||||
|
[11]:https://www.howtoforge.com/images/perform-search-operations-in-vim/big/vim-search-back.png
|
||||||
|
[12]:https://www.howtoforge.com/images/perform-search-operations-in-vim/big/vim-highlight-search.png
|
||||||
|
[13]:https://www.howtoforge.com/images/perform-search-operations-in-vim/big/vim-set-hlsearch.png
|
||||||
|
[14]:https://www.howtoforge.com/images/perform-search-operations-in-vim/big/vim-search-case.png
|
||||||
|
[15]:https://www.howtoforge.com/images/perform-search-operations-in-vim/big/vim-results-list.png
|
||||||
|
[16]:http://vim.wikia.com/wiki/Searching
|
@ -0,0 +1,215 @@
|
|||||||
|
sudo 入门指南
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
你在使用 Linux 命令行时曾经得到过“拒绝访问(Permission denied)”的错误提示吗?这可能是因为你正在尝试执行一个需要 root 权限的操作。例如,下面的截图展示了当我尝试复制一个二进制文件到一个系统目录时产生的错误。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][11]
|
||||||
|
|
||||||
|
那么该怎么解决这个错误?很简单,使用 `sudo` 命令。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][12]
|
||||||
|
|
||||||
|
用户运行此命令后会被提示输入他们(**自己**)的登录密码。一旦输入了正确的密码,操作将会成功执行。
|
||||||
|
|
||||||
|
毫无疑问,`sudo` 是任何在 Linux 上使用命令行的人都必须知道的命令。但是,为了更负责、更有效地使用该命令,你还是要知道一些相关(及深入)的细节。这正是我们将会在这篇文章中讨论的。
|
||||||
|
|
||||||
|
*在我们继续之前,值得提一下的是,这篇文章所提到的所有命令指示都已经在 Ubuntu 14.04 LTS 下的 4.3.11 版 Bash 下通过测试。*
|
||||||
|
|
||||||
|
### 什么是 sudo
|
||||||
|
|
||||||
|
正如你们大部分人所知道的,`sudo` 用来执行需要提升权限(通常是作为 root 用户)的命令。在这篇文章之前的简介部分已经讨论过这样的一个例子。然而,如果你想的话,你能用 `sudo` 以其它(非 root )用户运行命令。
|
||||||
|
|
||||||
|
这是由工具提供的 `-u` 命令行选项所实现的。举个例子,如下例所展示的那样,我(`himanshu`)尝试将一个在其他用户(`howtoforge`)的 Home 目录中的文件重命名,但是得到一个“访问拒绝”的错误。然后我加上 `sudo -u howtoforge` 后用同样的“mv”命令,命令成功执行了:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][13]
|
||||||
|
|
||||||
|
### 任何人都能用 sudo 吗?
|
||||||
|
|
||||||
|
不是。一个用户要能使用 `sudo` ,应该在 `/etc/sudoers` 文件里有一条跟该用户相关的信息。下述摘自 Ubuntu 网站的一段能讲得更清楚:
|
||||||
|
|
||||||
|
> `/etc/sudoers` 文件控制了谁能以哪个用户的身份在哪个机器上运行什么命令,还可以控制特别的情况,例如对于特定的命令是否需要输入密码。这个文件由<ruby>别名<rt>aliases</rt></ruby>(基本变量)和<ruby>用户标识<rt>user specifications</rt></ruby>(控制谁能运行什么命令)组成。
|
||||||
|
|
||||||
|
如果你正在使用 Ubuntu,让一个用户能运行 `sudo` 命令很容易:你所需要做的就是把账户类型改成<ruby>管理员<rt>administrator</rt></ruby>。这可直接在 <ruby>系统设置<rt>System Settings</rt></ruby> -> <ruby>用户账户<rt> User Accounts</rt></ruby>里完成。
|
||||||
|
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][14]
|
||||||
|
|
||||||
|
首先解锁该窗口:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][15]
|
||||||
|
|
||||||
|
然后选择你想改变用户类型的用户,然后将类型改成<ruby>管理员<rt>administrator</rt></ruby>。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][16]
|
||||||
|
|
||||||
|
然而,如果你不使用 Ubuntu,或者你的发行版没有提供这个特性,你可以手动编辑 `/etc/sudoers` 文件来实现此改变。要在文件中添加这样的一行:
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
[user] ALL=(ALL:ALL) ALL
|
||||||
|
```
|
||||||
|
|
||||||
|
无需赘言,`[user]` 应该用你想提升 sudo 权限的用户的用户名所代替。在这里值得提到的一件重要的事情是,官方建议通过 `visudo` 命令编辑该文件 —— 你需要做的就是运行下述命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo visudo
|
||||||
|
```
|
||||||
|
|
||||||
|
为了说清究竟是怎么一回事,这里有段从 `visudo` 手册里的摘要:
|
||||||
|
|
||||||
|
> `visudo` 以安全的模式编辑 `sudoers` 文件。`visudo` 锁定 `sudoers` 文件以防多个编辑同时进行,提供基本的检查(sanity checks)和语法错误检查。如果 `sudoers` 文件现在正在被编辑,你将会收到一个信息提示稍后再试。
|
||||||
|
|
||||||
|
关于 visudo 的更多信息,前往[这里][17]。
|
||||||
|
|
||||||
|
### 什么是 sudo 会话
|
||||||
|
|
||||||
|
如果你经常使用 `sudo` 命令,你肯定注意到过当你成功输入一次密码后,可以不用输入密码再运行几次 `sudo` 命令。但是一段时间后,`sudo` 命令会再次要求你的密码。
|
||||||
|
|
||||||
|
这种现象跟运行 `sudo` 命令数目无关,跟时间有关。是的,`sudo` 默认在输入一次密码后 15 分钟内不会再次要求密码。15 分钟后,你会再次被要求输入密码。
|
||||||
|
|
||||||
|
然而,如果你想的话,你能改变这种现象。用以下命令打开 `/etc/sudoers` 文件:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo visudo
|
||||||
|
```
|
||||||
|
|
||||||
|
找到这一行:
|
||||||
|
|
||||||
|
```
|
||||||
|
Defaults env_reset
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][18]
|
||||||
|
|
||||||
|
然后在这行最后添加以下变量:
|
||||||
|
|
||||||
|
```
|
||||||
|
Defaults env_reset,timestamp_timeout=[new-value]
|
||||||
|
```
|
||||||
|
|
||||||
|
`[new-value]` 为想要 `sudo` 会话持续的时间数。例如,设数值为 40。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][19]
|
||||||
|
|
||||||
|
如果你希望每次使用 `sudo` 命令时都要求输入密码,你可以把这个变量赋值为 0 。想要 `sudo` 会话永远不过时,应赋值为 -1。
|
||||||
|
|
||||||
|
注意将 `timestamp_timeout` 的值赋为 “-1” 是强烈不推荐的。
|
||||||
|
|
||||||
|
### sudo 密码
|
||||||
|
|
||||||
|
你可能注意过,当 `sudo` 要求输入密码然后你开始输入时,不会显示任何东西 —— 甚至连常规的星号都没有。虽然这不是什么大问题,不过一些用户就是希望显示星号。
|
||||||
|
|
||||||
|
好消息是那有可能也很容易做到。所有你需要做的就是在 `/etc/sudoers` 文件里将下述的行:
|
||||||
|
|
||||||
|
```
|
||||||
|
Defaults env_reset
|
||||||
|
```
|
||||||
|
|
||||||
|
改成
|
||||||
|
|
||||||
|
```
|
||||||
|
Defaults env_reset,pwfeedback
|
||||||
|
```
|
||||||
|
|
||||||
|
然后保存文件。
|
||||||
|
|
||||||
|
现在,无论什么时候输入 `sudo` 密码,星号都会显示。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][20]
|
||||||
|
|
||||||
|
### 一些重要的 sudo 命令行参数
|
||||||
|
|
||||||
|
除了 `-u` 命令行参数(我们已经在这篇教程的开始部分讨论过了),还有其他重要的 `sudo` 命令行参数值得注意。在这部分,我们将会讨论其中一些。
|
||||||
|
|
||||||
|
#### -k 参数
|
||||||
|
|
||||||
|
考虑下这种情况:输入密码后你刚刚运行了几个 `sudo` 驱动的命令。现在,如你所知,sudo 会话默认保持 15 分钟。假设在这会话期间,你需要让某些人访问你的终端,但你不想让他们可以使用 `sudo` ,你将会怎么做?
|
||||||
|
|
||||||
|
还好,有 `-k` 命令行参数允许用户取消 `sudo` 权限。这是 `sudo` 帮助页面(man page)对此的解释:
|
||||||
|
|
||||||
|
> `-k`, `--reset-timestamp`
|
||||||
|
|
||||||
|
> 不带任何命令使用时,撤销用户缓存的凭据。换句话讲,下一次使用 `sudo` 将会要求输入密码。使用这个参数不需要密码,也可以放到一个 `.logout` 文件中来撤销 sudo 权限。
|
||||||
|
|
||||||
|
> 当与一个命令,或者一个可能需要密码的操作一起用时,这个参数将会导致 `sudo` 忽略用户缓存的凭据。结果是 `sudo` 要求输入密码(如果这是被安全策略所要求的),而且不会更新用户缓存的凭据。
|
||||||
|
|
||||||
|
|
||||||
|
#### -s 参数
|
||||||
|
|
||||||
|
有时你的工作要求你运行一堆需要 root 权限的命令,你不想每次都输入密码。你也不想通过改变 `/etc/sudoers` 文件调整 `sudo` 会话的过期时限。
|
||||||
|
|
||||||
|
这种情况下,你可以用 `sudo` 的 `-s` 参数。这是 `sudo` 帮助页面(man page)对此的解释:
|
||||||
|
|
||||||
|
> `-s`, `--shell`
|
||||||
|
|
||||||
|
> 如果设置了 SHELL 环境变量或者调用用户的密码数据库指定了 shell,就运行该 shell 。如果指定了命令,命令将会通过 shell 的 `-c` 参数将命令传递给该 shell 执行。如果没有指定命令,会执行一个交互式 shell。
|
||||||
|
|
||||||
|
所以,基本上这命令参数做的是:
|
||||||
|
|
||||||
|
* 启动一个新的 shell - 至于是哪一个 shell,参照 SHELL 环境变量赋值。如果 `$SHELL` 是空的,将会用 `/etc/passwd` 中定义的 shell。
|
||||||
|
|
||||||
|
* 如果你用 `-s` 参数传递了一个命令名(例如 `sudo -s whoami`),实际执行的是 `sudo /bin/bash -c whoami`。
|
||||||
|
|
||||||
|
* 如果你没有尝试执行其他命令(也就是说,你只是要运行 `sudo -s`),你将会得到一个有 root 权限的交互式的 shell。
|
||||||
|
|
||||||
|
请记住,`-s` 命令行参数给你一个有 root 权限的 shell,但那不是 root 环境 —— 还是执行的你自己的 `.bashrc` 。例如,在 `sudo -s` 运行的新 shell 里,执行 `whoami` 命令仍会返回你的用户名,而非 root 。
|
||||||
|
|
||||||
|
#### -i 参数
|
||||||
|
|
||||||
|
`-i` 参数跟我们讨论过的 `-s` 参数相像。然而,还是有点区别。一个重要的区别是 `-i` 给你的是 root 环境,意味着你的(用户的)`.bashrc` 被忽略。这就像没有显式地用 root 登录也能成为 root 。此外,你也不用输入 root 用户密码。
|
||||||
|
|
||||||
|
**重要**:请注意 `su` 命令也能让你切换用户(默认切换到 root )。这个命令需要你输入 root 密码。为了避免这一点,你可以使用 `sudo` 执行它(`sudo su`),这样你只需要输入你的登录密码。然而,`su` 和 `sudo su` 有隐含的区别 —— 要了解它们,以及它们和 `sudo -i` 的区别,请看[这里][10] 。
|
||||||
|
|
||||||
|
### 总结
|
||||||
|
|
||||||
|
我希望现在你至少知道了 `sudo` 的基本知识,以及如何调整 `sudo` 的默认行为。请按我们解释过的那样去尝试调整 `/etc/sudoers` 。同时也浏览一下论坛讨论来更深入了解 `sudo` 命令。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/sudo-beginners-guide/
|
||||||
|
|
||||||
|
作者:[Himanshu Arora][a]
|
||||||
|
译者:[ypingcn](https://ypingcn.github.io/wiki/lctt)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/
|
||||||
|
[1]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#the-k-option
|
||||||
|
[2]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#the-s-option
|
||||||
|
[3]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#the-i-option
|
||||||
|
[4]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#what-is-sudo
|
||||||
|
[5]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#can-any-user-use-sudo
|
||||||
|
[6]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#what-is-a-sudo-session
|
||||||
|
[7]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#the-sudo-password
|
||||||
|
[8]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#some-important-sudo-command-line-options
|
||||||
|
[9]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#conclusion
|
||||||
|
[10]: http://unix.stackexchange.com/questions/98531/difference-between-sudo-i-and-sudo-su
|
||||||
|
[11]: https://www.howtoforge.com/images/sudo-beginners-guide/big/perm-denied-error.png
|
||||||
|
[12]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-example.png
|
||||||
|
[13]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-switch-user.png
|
||||||
|
[14]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-user-accounts.png
|
||||||
|
[15]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-user-unlock.png
|
||||||
|
[16]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-admin-account.png
|
||||||
|
[17]: https://www.sudo.ws/man/1.8.17/visudo.man.html
|
||||||
|
[18]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-session-time-default.png
|
||||||
|
[19]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-session-timeout.png
|
||||||
|
[20]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-password.png
|
@ -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
|
#!/bin/bash
|
||||||
DATE=$(date +'%F %H:%M:%S')
|
DATE=$(date +'%F %H:%M:%S')
|
||||||
DIR=/home/gacanepa
|
DIR=/home/gacanepa
|
||||||
echo "Current date and time: $DATE" > $DIR/file1.txt
|
echo "Current date and time: $DATE" > $DIR/file1.txt
|
||||||
```
|
```
|
||||||
script2.sh:
|
|
||||||
|
script2.sh:
|
||||||
|
|
||||||
```
|
```
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
SITE="Tecmint.com"
|
SITE="Tecmint.com"
|
||||||
DIR=/home/gacanepa
|
DIR=/home/gacanepa
|
||||||
echo "$SITE rocks... add us to your bookmarks." > $DIR/file2.txt
|
echo "$SITE rocks... add us to your bookmarks." > $DIR/file2.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][3]
|
][3]
|
||||||
@ -65,7 +69,7 @@ $ chmod +x /home/gacanepa/script2.sh
|
|||||||
|
|
||||||
要在登录或注销时执行脚本,分别需要使用 `~.bash_profile` 和 `~.bash_logout` 文件。多数情况下,后者需要手动创建。在每个文件的底部,添加调用脚本代码,如前面例中所示,就可以实现这个功能。
|
要在登录或注销时执行脚本,分别需要使用 `~.bash_profile` 和 `~.bash_logout` 文件。多数情况下,后者需要手动创建。在每个文件的底部,添加调用脚本代码,如前面例中所示,就可以实现这个功能。
|
||||||
|
|
||||||
##### 总结
|
### 总结
|
||||||
|
|
||||||
本文主要介绍如何在启动、登录以及注销系统时执行脚本。如果你有其他的方法可以补充,请使用下面的评论表给我们指出,我们期待您的回应!
|
本文主要介绍如何在启动、登录以及注销系统时执行脚本。如果你有其他的方法可以补充,请使用下面的评论表给我们指出,我们期待您的回应!
|
||||||
|
|
145
published/201703/20170213 Orange Pi as Time Machine Server.md
Normal file
145
published/201703/20170213 Orange Pi as Time Machine Server.md
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
使用 Orange Pi 搭建 Time Machine 服务器
|
||||||
|
=================================
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
我的工作之一是为各类家用计算机安排进行自动备份,包括存放重要数据的一组 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,看看是否有像下面的内容:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
当然你也可以通过主机名或者 ip 地址访问,比如:
|
||||||
|
|
||||||
|
```
|
||||||
|
afp://192.168.1.25
|
||||||
|
```
|
||||||
|
|
||||||
|
### Time Machine 备份
|
||||||
|
|
||||||
|
最后,打开 Mac 上的 Time Machine,然后“选择硬盘”,选择你的 Orange pi。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
这样设置肯定有效,Orange Pi 能够很好的处理进程,不过这可能并不是最快速的备份方式。但是,这个方法比较简单且便宜,并且正如其展示的一样能够正常工作。如果对这些设置你已经成功或者进行了改进,请在下面留言或者发送消息给我。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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
|
@ -1,92 +1,89 @@
|
|||||||
|
CentOS 7 上的 FirewallD 简明指南
|
||||||
在 CentOS 7 上利用 FirewallD 设置和配置防火墙
|
|
||||||
============================================================
|
============================================================
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
FirewallD 是 CentOS 7 服务器上默认可用的防火墙管理工具。基本上,它是 iptables 的封装,有图形配置工具 firewall-config 和命令行工具 `firewall-cmd`。使用 iptables 服务,每次改动都要求刷新旧规则,并且从 `/etc/sysconfig/iptables` 读取新规则,然而 firewalld 只应用改动了的不同部分。
|
||||||
|
|
||||||
|
### FirewallD 的区域(zone)
|
||||||
|
|
||||||
FirewallD 是 CentOS 7 服务器上的一个默认可用的防火墙管理工具。基本上,它是 iptables 的封装,有图形配置工具 firewall-config 和命令行工具 firewall-cmd。使用 iptables 服务每次改动都要求刷新旧规则,并且从 `/etc/sysconfig/iptables` 读取新规则,然而 firewalld 仅仅会应用改动了的不同部分。
|
FirewallD 使用服务(service) 和区域(zone)来代替 iptables 的规则(rule)和链(chain)。
|
||||||
|
|
||||||
### FirewallD zones
|
默认情况下,有以下的区域(zone)可用:
|
||||||
|
|
||||||
|
* **drop** – 丢弃所有传入的网络数据包并且无回应,只有传出网络连接可用。
|
||||||
|
* **block** — 拒绝所有传入网络数据包并回应一条主机禁止的 ICMP 消息,只有传出网络连接可用。
|
||||||
|
* **public** — 只接受被选择的传入网络连接,用于公共区域。
|
||||||
|
* **external** — 用于启用了地址伪装的外部网络,只接受选定的传入网络连接。
|
||||||
|
* **dmz** — DMZ 隔离区,外部受限地访问内部网络,只接受选定的传入网络连接。
|
||||||
|
* **work** — 对于处在你工作区域内的计算机,只接受被选择的传入网络连接。
|
||||||
|
* **home** — 对于处在你家庭区域内的计算机,只接受被选择的传入网络连接。
|
||||||
|
* **internal** — 对于处在你内部网络的计算机,只接受被选择的传入网络连接。
|
||||||
|
* **trusted** — 所有网络连接都接受。
|
||||||
|
|
||||||
FirewallD 使用 services 和 zones 代替 iptables 的 rules 和 chains 。
|
要列出所有可用的区域,运行:
|
||||||
|
|
||||||
默认情况下,有以下的 zones 可用:
|
|
||||||
|
|
||||||
|
|
||||||
* drop – 丢弃所有传入的网络数据包并且无回应,只有传出网络连接可用。
|
|
||||||
* block — 拒绝所有传入网络数据包并回应一条主机禁止 ICMP 的消息,只有传出网络连接可用。
|
|
||||||
* public — 只接受被选择的传入网络连接,用于公共区域。
|
|
||||||
* external — 用于启用伪装的外部网络,只接受被选择的传入网络连接。
|
|
||||||
* dmz — DMZ 隔离区,外部受限地访问内部网络,只接受被选择的传入网络连接。
|
|
||||||
* work — 对于处在你家庭区域内的计算机,只接受被选择的传入网络连接。
|
|
||||||
* home — 对于处在你家庭区域内的计算机,只接受被选择的传入网络连接。
|
|
||||||
* internal — 对于处在你内部网络的计算机,只接受被选择的传入网络连接。
|
|
||||||
* trusted — 所有网络连接都接受。
|
|
||||||
|
|
||||||
列出所有可用的 zones :
|
|
||||||
```
|
```
|
||||||
# firewall-cmd --get-zones
|
# firewall-cmd --get-zones
|
||||||
work drop internal external trusted home dmz public block
|
work drop internal external trusted home dmz public block
|
||||||
```
|
```
|
||||||
|
|
||||||
列出默认的 zone :
|
列出默认的区域 :
|
||||||
|
|
||||||
```
|
```
|
||||||
# firewall-cmd --get-default-zone
|
# firewall-cmd --get-default-zone
|
||||||
public
|
public
|
||||||
```
|
```
|
||||||
|
|
||||||
改变默认的 zone :
|
改变默认的区域 :
|
||||||
|
|
||||||
```
|
```
|
||||||
# firewall-cmd --set-default-zone=dmz
|
# firewall-cmd --set-default-zone=dmz
|
||||||
# firewall-cmd --get-default-zone
|
# firewall-cmd --get-default-zone
|
||||||
dmz
|
dmz
|
||||||
```
|
```
|
||||||
|
|
||||||
### FirewallD services
|
### FirewallD 服务
|
||||||
|
|
||||||
FirewallD services 使用 XML 配置文件为 firewalld 录入服务信息。
|
FirewallD 服务使用 XML 配置文件,记录了 firewalld 服务信息。
|
||||||
|
|
||||||
|
列出所有可用的服务:
|
||||||
|
|
||||||
列出所有可用的 services :
|
|
||||||
```
|
```
|
||||||
# firewall-cmd --get-services
|
# firewall-cmd --get-services
|
||||||
amanda-client amanda-k5-client bacula bacula-client ceph ceph-mon dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mosh mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster radius rpc-bind rsyncd samba samba-client sane smtp smtps snmp snmptrap squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
|
amanda-client amanda-k5-client bacula bacula-client ceph ceph-mon dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mosh mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster radius rpc-bind rsyncd samba samba-client sane smtp smtps snmp snmptrap squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
|
||||||
```
|
```
|
||||||
|
|
||||||
|
XML 配置文件存储在 `/usr/lib/firewalld/services/` 和 `/etc/firewalld/services/` 目录下。
|
||||||
|
|
||||||
XML 配置文件存储在 `/usr/lib/firewalld/services/` 和 `/etc/firewalld/services/` 目录。
|
|
||||||
|
|
||||||
### 用 FirewallD 配置你的防火墙
|
### 用 FirewallD 配置你的防火墙
|
||||||
|
|
||||||
|
作为一个例子,假设你正在运行一个 web 服务器,SSH 服务端口为 7022 ,以及邮件服务,你可以利用 FirewallD 这样配置你的服务器:
|
||||||
|
|
||||||
作为一个例子,假设你正在运行一个 web 服务,端口为 7022 的 SSH 服务和邮件服务,你可以利用 FirewallD 这样配置你的 [RoseHosting VPS][6]:
|
首先设置默认区为 dmz。
|
||||||
|
|
||||||
|
|
||||||
首先设置默认 zone 为 dmz。
|
|
||||||
```
|
```
|
||||||
# firewall-cmd --set-default-zone=dmz
|
# firewall-cmd --set-default-zone=dmz
|
||||||
# firewall-cmd --get-default-zone
|
# firewall-cmd --get-default-zone
|
||||||
dmz
|
dmz
|
||||||
```
|
```
|
||||||
|
|
||||||
添加持久性的 HTTP 和 HTTPS service 规则到 dmz zone :
|
为 dmz 区添加持久性的 HTTP 和 HTTPS 规则:
|
||||||
|
|
||||||
```
|
```
|
||||||
# firewall-cmd --zone=dmz --add-service=http --permanent
|
# firewall-cmd --zone=dmz --add-service=http --permanent
|
||||||
# firewall-cmd --zone=dmz --add-service=https --permanent
|
# firewall-cmd --zone=dmz --add-service=https --permanent
|
||||||
```
|
```
|
||||||
|
|
||||||
|
开启端口 25 (SMTP) 和端口 465 (SMTPS) :
|
||||||
|
|
||||||
开启端口 25 (SMTP) 和端口 465 (SMTPS) :
|
|
||||||
```
|
```
|
||||||
firewall-cmd --zone=dmz --add-service=smtp --permanent
|
firewall-cmd --zone=dmz --add-service=smtp --permanent
|
||||||
firewall-cmd --zone=dmz --add-service=smtps --permanent
|
firewall-cmd --zone=dmz --add-service=smtps --permanent
|
||||||
```
|
```
|
||||||
|
|
||||||
|
开启 IMAP、IMAPS、POP3 和 POP3S 端口:
|
||||||
|
|
||||||
开启 IMAP, IMAPS, POP3 和 POP3S 端口:
|
|
||||||
```
|
```
|
||||||
firewall-cmd --zone=dmz --add-service=imap --permanent
|
firewall-cmd --zone=dmz --add-service=imap --permanent
|
||||||
firewall-cmd --zone=dmz --add-service=imaps --permanent
|
firewall-cmd --zone=dmz --add-service=imaps --permanent
|
||||||
@ -94,23 +91,23 @@ firewall-cmd --zone=dmz --add-service=pop3 --permanent
|
|||||||
firewall-cmd --zone=dmz --add-service=pop3s --permanent
|
firewall-cmd --zone=dmz --add-service=pop3s --permanent
|
||||||
```
|
```
|
||||||
|
|
||||||
|
因为将 SSH 端口改到了 7022,所以要移除 ssh 服务(端口 22),开启端口 7022:
|
||||||
|
|
||||||
将 SSH 端口改到 7022 后,我们移除 ssh service (端口 22),并且开启端口 7022
|
|
||||||
```
|
```
|
||||||
firewall-cmd --remove-service=ssh --permanent
|
firewall-cmd --remove-service=ssh --permanent
|
||||||
firewall-cmd --add-port=7022/tcp --permanent
|
firewall-cmd --add-port=7022/tcp --permanent
|
||||||
```
|
```
|
||||||
|
|
||||||
要实现这些更改,我们需要重新加载防火墙:
|
要应用这些更改,我们需要重新加载防火墙:
|
||||||
|
|
||||||
```
|
```
|
||||||
firewall-cmd --reload
|
firewall-cmd --reload
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
最后可以列出这些规则:
|
最后可以列出这些规则:
|
||||||
### firewall-cmd –list-all
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
# firewall-cmd –list-all
|
||||||
dmz
|
dmz
|
||||||
target: default
|
target: default
|
||||||
icmp-block-inversion: no
|
icmp-block-inversion: no
|
||||||
@ -129,11 +126,7 @@ rich rules:
|
|||||||
* * *
|
* * *
|
||||||
|
|
||||||
|
|
||||||
|
PS. 如果你喜欢这篇文章,请在下面留下一个回复。谢谢。
|
||||||
当然,如果你使用任何一个我们的 [CentOS VPS hosting][7] 服务,你完全不用做这些。在这种情况下,你可以直接叫我们的专家 Linux 管理员为你设置。他们提供 24x7 h 的帮助并且会马上回应你的请求。
|
|
||||||
|
|
||||||
|
|
||||||
PS. 如果你喜欢这篇文章,请按分享按钮分享给你社交网络上的朋友或者直接在下面留下一个回复。谢谢。
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -145,7 +138,7 @@ via: https://www.rosehosting.com/blog/set-up-and-configure-a-firewall-with-firew
|
|||||||
|
|
||||||
作者:[rosehosting.com][a]
|
作者:[rosehosting.com][a]
|
||||||
译者:[Locez](https://github.com/locez)
|
译者:[Locez](https://github.com/locez)
|
||||||
校对:[校对者ID](https://github.com/校对者ID)
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
哪个 Linux 系统最适合玩游戏?
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
> 告诉我们哪个 Linux 发型版对游戏支持的最好
|
||||||
|
|
||||||
|
在过去几个月中,出于游戏目的,我们尝试了多种 GNU/Linux 发行版,我们得出的结论是没有专为 Linux 游戏设计的完美的操作系统。
|
||||||
|
|
||||||
|
我们都知道,游戏世界分成 Nvidia 和 AMD 两个阵营。现在,如果你使用的是 Nvidia 显卡,即使是五年前的一块显卡,也可以在大多数基于 Linux 的操作系统上使用,因为 Nvidia 差不多为其所有的 GPU 都提供了最新的视频驱动程序。
|
||||||
|
|
||||||
|
当然,这意味着如果你有一块 Nvidia GPU,在大多数 GNU/Linux 发行版上你不会有什么大问题。至少与游戏中的图形或其他性能问题无关,这种问题将严重影响你的游戏体验。
|
||||||
|
|
||||||
|
### AMD Radeon 用户最好的游戏发行版
|
||||||
|
|
||||||
|
如果你使用 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 呢?
|
||||||
|
|
||||||
|
另外,我们有 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。
|
||||||
|
|
||||||
|
我们发现整个情况相当令人沮丧,至少对于一些使用 AMD Radeon 老式显卡的玩家来说是这样的。现在,我们发现,使用 AMD Radeon HD 8xxx GPU 的最佳游戏体验只能通过使用 Git 获取到的 Mesa 17 以及 Linux 内核 4.10 RC 来实现。
|
||||||
|
|
||||||
|
所以我们现在请求你 - 如果你找到了玩游戏的完美的 GNU/Linux 发行版,无论你使用的是 AMD Radeon 还是 Nvidia GPU,但我们最感兴趣的是那些使用 AMD GPU 的玩家,请告知我们你使用的是什么发行版,设置是什么,能不能玩最新的游戏,或者有无体验问题。谢谢!
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
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]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://news.softpedia.com/editors/browse/marius-nestor
|
||||||
|
[1]:http://news.softpedia.com/news/amdgpu-pro-16-60-linux-driver-finally-adds-amd-radeon-hd-7xxx-8xxx-support-512280.shtml
|
||||||
|
[2]:http://news.softpedia.com/editors/browse/marius-nestor
|
||||||
|
[3]:http://news.softpedia.com/news/the-best-operating-system-for-linux-gaming-which-one-do-you-use-and-why-512861.shtml#
|
||||||
|
[4]:https://share.flipboard.com/bookmarklet/popout?v=2&title=The+Best+Operating+System+for+Linux+Gaming%3A+Which+One+Do+You+Use+and+Why%3F&url=http%3A%2F%2Fnews.softpedia.com%2Fnews%2Fthe-best-operating-system-for-linux-gaming-which-one-do-you-use-and-why-512861.shtml&t=1487038258&utm_campaign=widgets&utm_medium=web&utm_source=flipit&utm_content=news.softpedia.com
|
||||||
|
[5]:http://news.softpedia.com/news/the-best-operating-system-for-linux-gaming-which-one-do-you-use-and-why-512861.shtml#
|
||||||
|
[6]:http://twitter.com/intent/tweet?related=softpedia&via=mariusnestor&text=The+Best+Operating+System+for+Linux+Gaming%3A+Which+One+Do+You+Use+and+Why%3F&url=http%3A%2F%2Fnews.softpedia.com%2Fnews%2Fthe-best-operating-system-for-linux-gaming-which-one-do-you-use-and-why-512861.shtml
|
||||||
|
[7]:https://plus.google.com/share?url=http://news.softpedia.com/news/the-best-operating-system-for-linux-gaming-which-one-do-you-use-and-why-512861.shtml
|
||||||
|
[8]:https://twitter.com/intent/follow?screen_name=mariusnestor
|
83
published/201703/20170214 CentOS-vs-Ubuntu.md
Normal file
83
published/201703/20170214 CentOS-vs-Ubuntu.md
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
CentOS 与 Ubuntu 有什么不同?
|
||||||
|
============
|
||||||
|
|
||||||
|
[
|
||||||
|
][4]
|
||||||
|
|
||||||
|
Linux 中的可选项似乎“无穷无尽”,因为每个人都可以通过修改一个已经发行的版本或者新的[白手起家的版本][7] (LFS) 来构建 Linux。
|
||||||
|
|
||||||
|
关于 Linux 发行版的选择,我们关注的因素包括用户界面、文件系统、软件包分发、新的特性以及更新周期和可维护性等。
|
||||||
|
|
||||||
|
在这篇文章中,我们会讲到两个较为熟知的 Linux 发行版,实际上,更多的是介绍两者之间的不同,以及在哪些方面一方比另一方更好。
|
||||||
|
|
||||||
|
### 什么是 CentOS?
|
||||||
|
|
||||||
|
CentOS(Community Enterprise Operating System)是脱胎于 Red Hat Enterprise Linux (RHEL) 并与之兼容的由社区支持的克隆版 Linux 发行版,所以我们可以认为 CentOS 是 RHEL 的一个免费版。CentOS 的每一套发行版都有 10 年的维护期,每个新版本的释出周期为 2 年。在 2014 年 1 月 8 日,[CentOS 声明正式加入红帽](https://linux.cn/article-2453-1.html),为新的 CentOS 董事会所管理,但仍然保持与 RHEL 的独立性。
|
||||||
|
|
||||||
|
扩展阅读:[如何安装 CentOS?][1]
|
||||||
|
|
||||||
|
#### CentOS 的历史和第一次释出
|
||||||
|
|
||||||
|
[CentOS][8] 第一次释出是在 2004 年,当时名叫 cAOs Linux;它是由社区维护和管理的一套基于 RPM 的发行版。
|
||||||
|
|
||||||
|
CentOS 结合了包括 Debian、Red Hat Linux/Fedora 和 FreeBSD 等在内的许多方面,使其能够令服务器和集群稳定工作 3 到 5 年的时间。它有一群开源软件开发者作为拥趸,是一个大型组织(CAOS 基金会)的一部分。
|
||||||
|
|
||||||
|
在 2006 年 6 月,David Parsley 宣布由他开发的 TAO Linux(另一个 RHEL 克隆版本)退出历史舞台并全力转入 CentOS 的开发工作。不过,他的领域转移并不会影响之前的 TAO 用户, 因为他们可以通过使用 `yum update` 来更新系统以迁移到 CentOS。
|
||||||
|
|
||||||
|
2014 年 1 月,红帽开始赞助 CentOS 项目,并移交了所有权和商标。
|
||||||
|
|
||||||
|
#### CentOS 设计
|
||||||
|
|
||||||
|
确切地说,CentOS 是付费 RHEL (Red Had Enterprise Edition) 版本的克隆。RHEL 提供源码以供之后 CentOS 修改和变更(移除商标和 logo)并完善为最终的成品。
|
||||||
|
|
||||||
|
### Ubuntu
|
||||||
|
|
||||||
|
Ubuntu 是一个基于 Debian 的 Linux 操作系统,应用于桌面、服务器、智能手机和平板电脑等多个领域。Ubuntu 是由一个英国的名为 Canonical Ltd. 的公司发行的,由南非的 Mark Shuttleworth 创立并赞助。
|
||||||
|
|
||||||
|
扩展阅读:[安装完 Ubuntu 16.10 必须做的 10 件事][2]
|
||||||
|
|
||||||
|
#### Ubuntu 的设计
|
||||||
|
|
||||||
|
Ubuntu 是一个在全世界的开发者共同努力下生成的开源发行版。在这些年的悉心经营下,Ubuntu 的界面变得越来越现代化和人性化,整个系统运行也更加流畅、安全,并且有成千上万的应用可供下载。
|
||||||
|
|
||||||
|
由于它是基于 [Debian][10] 的,因此它也支持 .deb 包、较新的包系统和更为安全的 [snap 包格式 (snappy)][11]。
|
||||||
|
|
||||||
|
这种新的打包系统允许分发的应用自带满足所需的依赖性。
|
||||||
|
|
||||||
|
扩展阅读:[点评 Ubuntu 16.10 中的 Unity 8][3]
|
||||||
|
|
||||||
|
### CentOS 与 Ubuntu 的区别
|
||||||
|
|
||||||
|
* Ubuntu 基于 Debian,CentOS 基于 RHEL;
|
||||||
|
* Ubuntu 使用 .deb 和 .snap 的软件包,CentOS 使用 .rpm 和 flatpak 软件包;
|
||||||
|
* Ubuntu 使用 apt 来更新,CentOS 使用 yum;
|
||||||
|
* CentOS 看起来会更稳定,因为它不会像 Ubuntu 那样对包做常规性更新,但这并不意味着 Ubuntu 就不比 CentOS 安全;
|
||||||
|
* Ubuntu 有更多的文档和免费的问题、信息支持;
|
||||||
|
* Ubuntu 服务器版本在云服务和容器部署上的支持更多。
|
||||||
|
|
||||||
|
### 结论
|
||||||
|
|
||||||
|
不论你的选择如何,**是 Ubuntu 还是 CentOS**,两者都是非常优秀稳定的发行版。如果你想要一个发布周期更短的版本,那么就选 Ubuntu;如果你想要一个不经常变更包的版本,那么就选 CentOS。在下方留下的评论,说出你更钟爱哪一个吧!
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.linuxandubuntu.com/home/centos-vs-ubuntu
|
||||||
|
|
||||||
|
作者:[linuxandubuntu.com][a]
|
||||||
|
译者:[Meditator-hkx](http://www.kaixinhuang.com)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.linuxandubuntu.com/home/centos-vs-ubuntu
|
||||||
|
[1]:http://www.linuxandubuntu.com/home/how-to-install-centos
|
||||||
|
[2]:http://www.linuxandubuntu.com/home/10-things-to-do-after-installing-ubuntu-16-04-xenial-xerus
|
||||||
|
[3]:http://www.linuxandubuntu.com/home/linuxandubuntu-review-of-unity-8-preview-in-ubuntu-1610
|
||||||
|
[4]:http://www.linuxandubuntu.com/home/centos-vs-ubuntu
|
||||||
|
[5]:http://www.linuxandubuntu.com/home/centos-vs-ubuntu
|
||||||
|
[6]:http://www.linuxandubuntu.com/home/centos-vs-ubuntu#comments
|
||||||
|
[7]:http://www.linuxandubuntu.com/home/how-to-create-a-linux-distro
|
||||||
|
[8]:http://www.linuxandubuntu.com/home/10-things-to-do-after-installing-centos
|
||||||
|
[9]:https:]:http://www.linuxandubuntu.com/home/linuxandubuntu-review-of-unity-8-preview-in-ubuntu-1610
|
||||||
|
[10]:https://www.debian.org/
|
||||||
|
[11]:https://en.wikipedia.org/wiki/Snappy_(package_manager)
|
@ -0,0 +1,86 @@
|
|||||||
|
在独立的 Root 和 Home 硬盘驱动器上安装 Ubuntu
|
||||||
|
============================================================
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
安装 Linux 系统时,可以有两种不同的方式。第一种方式是在一个超快的固态硬盘上进行安装,这样可以保证迅速开机和高速访问数据。第二种方式是在一个较慢但很强大的普通硬盘驱动器上安装,这样的硬盘转速快并且存储容量大,从而可以存储大量的应用程序和数据。
|
||||||
|
|
||||||
|
然而,一些 Linux 用户都知道,固态硬盘很棒,但是又很贵,而普通硬盘容量很大但速度较慢。如果我告诉你,可以同时利用两种硬盘来安装 Linux 系统,会怎么样?一个超快、现代化的固态硬盘驱动 Linux 内核,一个容量很大的普通硬盘来存储其他数据。
|
||||||
|
|
||||||
|
在这篇文章中,我将阐述如何通过分离 Root 目录和 Home 目录安装 Ubuntu 系统 — Root 目录存于 SSD(固态硬盘)中,Home 目录存于普通硬盘中。
|
||||||
|
|
||||||
|
### 没有多余的硬盘驱动器?尝试一下 SD 卡(内存卡)!
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
在多个驱动器上安装 Linux 系统是很不错的,并且每一个高级用户都应该学会这样做。然而,还有一种情况使得用户应该这样安装 Linux 系统 - 在低存储容量的笔记本电脑上安装系统。可能你有一台很便宜、没有花费太多的笔记本电脑,上面安装了 Linux 系统,电脑上没有多余的硬盘驱动,但有一个 SD 卡插槽。
|
||||||
|
|
||||||
|
这篇教程也是针对这种类型的电脑的。跟随这篇教程,可以为笔记本电脑买一个高速的 SD 卡来存储 Home 目录,而不是使用另一个硬盘驱动。本教程也适用于这种使用情况。
|
||||||
|
|
||||||
|
### 制作 USB 启动盘
|
||||||
|
|
||||||
|
首先去[这个网站][11]下载最新的 Ubuntu Linux 版本。然后下载 [Etcher][12]- USB 镜像制作工具。这是一个使用起来很简单的工具,并且支持所有主流的操作系统。你还需要一个至少有 2GB 大小的 USB 驱动器。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
安装好 Etcher 以后,直接打开。点击 <ruby>选择镜像<rt>Select Image</rt></ruby> 按钮来制作镜像。这将提示用户浏览、寻找 ISO 镜像,找到前面下载的 Ubuntu ISO 文件并选择。然后,插入 USB 驱动器,Etcher 应该会自动选择它。之后,点击 “Flash!” 按钮,Ubuntu 启动盘的制作过程就开始了。
|
||||||
|
|
||||||
|
为了能够启动 Ubuntu 系统,需要配置 BIOS。这是必需的,这样计算机才能启动新创建的 Ubuntu 启动盘。为了进入 BIOS,在插入 USB 的情况下重启电脑,然后按正确的键(Del、F2 或者任何和你的电脑相应的键)。找到从 USB 启动的选项,然后启用这个选项。
|
||||||
|
|
||||||
|
如果你的个人电脑不支持 USB 启动,那么把 Ubuntu 镜像刻入 DVD 中。
|
||||||
|
|
||||||
|
### 安装
|
||||||
|
|
||||||
|
当用启动盘第一次加载 Ubuntu 时,欢迎界面会出现两个选项。请选择 “安装 Ubuntu” 选项。在下一页中,Ubiquity 安装工具会请求用户选择一些选项。这些选项不是强制性的,可以忽略。然而,建议两个选项都勾选,因为这样可以节省安装系统以后的时间,特别是安装 MP3 解码器和更新系统。(LCTT 译注:当然如果你的网速不够快,还是不要勾选的好。)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
勾选了<ruby>“准备安装 Ubuntu”<rt>Preparing to install Ubuntu</rt></ruby>页面中的两个选项以后,需要选择安装类型了。有许多种安装类型。然而,这个教程需要选择自定义安装类型。为了进入自定义安装页面,勾选<ruby>“其他”<rt>something else</rt></ruby>选项,然后点击“继续”。
|
||||||
|
|
||||||
|
现在将显示 Ubuntu 自定义安装分区工具。它将显示任何/所有能够安装 Ubuntu 系统的磁盘。如果两个硬盘均可用,那么它们都会显示。如果插有 SD 卡,那么它也会显示。
|
||||||
|
|
||||||
|
选择用于 Root 文件系统的硬盘驱动器。如果上面已经有分区表,编辑器会显示出来,请使用分区工具把它们全部删除。如果驱动没有格式化也没有分区,那么使用鼠标选择驱动器,然后点击<ruby>“新建分区表”<rt>new partition table</rt></ruby>。对所有驱动器执行这个操作,从而使它们都有分区表。(LCTT 译注:警告,如果驱动器上有你需要的数据,请先备份,否则重新分区后将永远丢失。)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
现在所有分区都有了分区表(并已删除分区),可以开始进行配置了。在第一个驱动器下选择空闲空间,然后点击加号按钮来创建新分区。然后将会出现一个“创建分区窗口”。允许工具使用整个硬盘。然后转到<ruby>“挂载点”<rt>Mount Point</rt></ruby>下拉菜单。选择 `/` (Root)作为挂载点,之后点击 OK 按钮确认设置。
|
||||||
|
|
||||||
|
对第二个驱动器做相同的事,这次选择 `/home` 作为挂载点。两个驱动都设置好以后,选择要放入引导装载器的驱动器,然后点击 <ruby>“现在安装”<rt>install now</rt></ruby>,安装进程就开始了。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
从这以后的安装进程是标准安装。创建用户名、选择时区等。
|
||||||
|
|
||||||
|
**注:** 你是以 UEFI 模式进行安装吗?如果是,那么需要给 boot 创建一个 512 MB 大小的 FAT32 分区。在创建其他任何分区前做这件事。确保选择 “/boot” 作为这个分区的挂载点。
|
||||||
|
|
||||||
|
如果你需要一个交换分区,那么,在创建用于 `/` 的分区前,在第一个驱动器上进行创建。可以通过点击 ‘+’ 按钮,然后输入所需大小,选择下拉菜单中的<ruby>“交换区域”<rt>swap area</rt></ruby>来创建交换分区。
|
||||||
|
|
||||||
|
### 结论
|
||||||
|
|
||||||
|
Linux 最好的地方就是可以自己按需配置。有多少其他操作系统可以让你把文件系统分割在不同的硬盘驱动上?并不多,这是肯定的。我希望有了这个指南,你将意识到 Ubuntu 能够提供的真正力量。
|
||||||
|
|
||||||
|
安装 Ubuntu 系统时你会用多个驱动器吗?请在下面的评论中让我们知道。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.maketecheasier.com/install-ubuntu-with-different-root-home-hard-drives/
|
||||||
|
|
||||||
|
作者:[Derrik Diener][a]
|
||||||
|
译者:[ucasFL](https://github.com/ucasFL)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.maketecheasier.com/author/derrikdiener/
|
||||||
|
[1]:https://www.maketecheasier.com/author/derrikdiener/
|
||||||
|
[2]:https://www.maketecheasier.com/install-ubuntu-with-different-root-home-hard-drives/#respond
|
||||||
|
[3]:https://www.maketecheasier.com/category/linux-tips/
|
||||||
|
[4]:http://www.facebook.com/sharer.php?u=https%3A%2F%2Fwww.maketecheasier.com%2Finstall-ubuntu-with-different-root-home-hard-drives%2F
|
||||||
|
[5]:http://twitter.com/share?url=https%3A%2F%2Fwww.maketecheasier.com%2Finstall-ubuntu-with-different-root-home-hard-drives%2F&text=How+to+Install+Ubuntu+with+Separate+Root+and+Home+Hard+Drives
|
||||||
|
[6]:mailto:?subject=How%20to%20Install%20Ubuntu%20with%20Separate%20Root%20and%20Home%20Hard%20Drives&body=https%3A%2F%2Fwww.maketecheasier.com%2Finstall-ubuntu-with-different-root-home-hard-drives%2F
|
||||||
|
[7]:https://www.maketecheasier.com/byb-dimmable-eye-care-desk-lamp/
|
||||||
|
[8]:https://www.maketecheasier.com/download-appx-files-from-windows-store/
|
||||||
|
[9]:https://support.google.com/adsense/troubleshooter/1631343
|
||||||
|
[10]:http://www.maketecheasier.com/tag/ssd
|
||||||
|
[11]:http://ubuntu.com/download
|
||||||
|
[12]:https://etcher.io/
|
@ -0,0 +1,85 @@
|
|||||||
|
给新手的最佳类 Windows 界面的 Linux 发行版
|
||||||
|
=========
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][5]
|
||||||
|
|
||||||
|
Linux 世界的新同学们,大家好,当你看到这么多基于 Linux 内核的发行版后,是不是在选择的过程中无从下手呢。很多同学都是刚刚从熟悉的 Windows 系统来到陌生的 Linux 世界里,都希望使用一款既简单易用,又跟 Windows 长得很像的 Linux 发行版,因此我今天将给大家介绍几款这样的 Linux 发行版,它们的桌面环境跟 Windows 系统界面十分相似,咱们开始吧!
|
||||||
|
|
||||||
|
### Linux Mint
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][6]
|
||||||
|
|
||||||
|
我给大家介绍的第一款非常流行的 Linux 发行版就是 “[Linux Mint 操作系统”][14] 。当你决定使用 Linux 系统来代替 Windows 系统时,你应该在某些地方听说过 Linux Mint 这个发行版吧。 Linux Mint 和 Ubuntu 系统一样被公认为是最好用的 Linux 发行版之一, Linux Mint 系统因其简洁易用、功能强大的 Cinnamon 桌面环境而出名。 [Cinnamon][15] 使用起来非常简单,而且你还可以使用各种[桌面主题][16]、图标库、桌面小工具和应用组件来把 Linux Mint 系统配置得跟 Windows XP 、 Windows 7 、 Winows 8 或者 Windows 10 系统的界面一样。 [Cinnamon][17] 也是 Linux 系统中非常流行的桌面环境之一。你一定会对这个简单易用、功能强大的桌面环境爱不释手。
|
||||||
|
|
||||||
|
同时,你也可以阅读这两篇文章 [Linux Mint 18.1 "Serena" —— 最幽雅的 Linux 发行版之一][1] 以及 [Cinnamon ——给新手的最佳 Linux 桌面环境][2] 来进一步了解 Linux Mint 操作系统和 Cinnamon 桌面环境。
|
||||||
|
|
||||||
|
### Zorin OS
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][7]
|
||||||
|
|
||||||
|
[Zorin OS 操作系统][18] 也是可以用来替代 Windows 7 系统的一款非常流行的 Linux 发行版。其开始菜单和任务栏非常漂亮,整体界面美观充满活力,而且在速度和稳定性方面也相当出色。如果你喜欢的是 Windows 7 而不是 Windows 10 系统,那么 Zorin OS 将会是你最好的选择。 Zorin OS 同样预安装了很多软件,因此你再也不用费尽周折的去找软件来安装了。其华丽的仿 Windows 7 系统的界面风格更是让人一见如故。大胆去尝试吧。
|
||||||
|
|
||||||
|
你还可以阅读[Zorin OS 12 评测 | 本周 Linux 和 Ubuntu 发行版评测][3]这篇文章来进一步了解 Zorin OS 系统。
|
||||||
|
|
||||||
|
### Robolinux
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][8]
|
||||||
|
|
||||||
|
[Robolinux 操作系统][9] 是一个内嵌了 Windows 运行环境(Wine)的 Linux 发行版。它支持用户在 Linux 系统中运行 Windows 应用程序,因此,你再也不用担心自己喜欢的 Windows 应用程序在 Linux 系统中无法使用的问题了。在 Robolinux 系统中,这个特性被称为“[隐形虚拟机(Stealth VM)][10]”。我对这个新颖独特的功能非常感兴趣。同时, Rololinux 系统还包括其它几个桌面环境,你可以根据自己的喜好选择某一个桌面环境。这个系统中还有一个用于完全备份 C 盘的工具,不会让你丢失任何文件。很独特吧,对不对?
|
||||||
|
|
||||||
|
### ChaletOS
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][11]
|
||||||
|
|
||||||
|
大家有谁用过 [ChaletOS 操作系统][19] 吗?这是一款在界面外观和使用感觉上最接近于 Windows 的 [Linux 发行版][20] 之一。上面的截图是在我使用了 Windows 10 图标和主题包后的效果,使用这个主题包后,可以让 ChaletOS 的桌面变得和 Windows 10 界面一样。一些预安装的应用程序也可以帮助你更好的使用 ChaletOS 系统。在使用的过程中你仿佛又回到了熟悉的 Windows 世界里。上面的截图竟然让我的朋友们信以为真了。去试一试吧,你肯定会喜欢这个发行版。
|
||||||
|
|
||||||
|
你还可以通过 [ChaletOS —— Linux 发行版中的新秀][4] 这篇文章来进一步了解 ChaletOS 系统。
|
||||||
|
|
||||||
|
### 总结
|
||||||
|
|
||||||
|
这篇文章中列出的发行版我尽量写得简短一些,否则会给新手们在选择的过程中造成太多的困惑,无从下手。还有一些大家正在使用的 Linux 发行版在本文中并未提及。希望你们在下面的评论中提出来,以帮助我们的新朋友们在选择 Linux 发行版的过程中作出正确的选择。
|
||||||
|
|
||||||
|
好吧,到此为止吧,这 4 款操作系统都是从 Windows 转向 Linux 的新用户在学习过程中使用最广泛的 **Linux 发行版** ,当然 Kubuntu 和 Elementary OS 系统也不甘示弱。想安装哪个版本,完全由你自己决定。大多数情况下 [Linux Mint 操作系统][21] 一直独占鳌头。如果你刚踏入 Linux 的世界,我建议你从 Linux Mint 系统开始。行动起来吧,现在就安装一个自己喜欢的 Linux 系统,勇往直前,成为改变 Linux 开源世界的一员。|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.linuxandubuntu.com/home/best-windows-like-linux-distributions-for-new-linux-users
|
||||||
|
|
||||||
|
作者:[linuxandubuntu.com][a]
|
||||||
|
译者:[rusking](https://github.com/rusking)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.linuxandubuntu.com/home/best-windows-like-linux-distributions-for-new-linux-users
|
||||||
|
[1]:http://www.linuxandubuntu.com/home/linux-mint-181-sarah-one-of-the-finest-linux-distro-ever
|
||||||
|
[2]:http://www.linuxandubuntu.com/home/cinnamon-desktop-the-best-desktop-environment-for-new-linux-user
|
||||||
|
[3]:http://www.linuxandubuntu.com/home/zorin-os-12-review-linuxandubuntu-distro-review-of-the-week
|
||||||
|
[4]:http://www.linuxandubuntu.com/home/chaletos-new-beautiful-linux-distribution-based-on-xubuntu-and-a-clone-of-windows
|
||||||
|
[5]:http://www.linuxandubuntu.com/home/best-windows-like-linux-distributions-for-new-linux-users
|
||||||
|
[6]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/linux-mint-for-new-linux-users_orig.jpg
|
||||||
|
[7]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/zorin-os-for-windows-users_orig.jpg
|
||||||
|
[8]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/robolinux-for-new-users_orig.jpg
|
||||||
|
[9]:https://www.robolinux.org/
|
||||||
|
[10]:https://www.robolinux.org/stealth-vm-info/
|
||||||
|
[11]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/chalet-os-for-new-users_orig.jpg
|
||||||
|
[12]:http://www.linuxandubuntu.com/home/best-windows-like-linux-distributions-for-new-linux-users
|
||||||
|
[13]:http://www.linuxandubuntu.com/home/best-windows-like-linux-distributions-for-new-linux-users#comments
|
||||||
|
[14]:http://www.linuxandubuntu.com/home/linux-mint-181-sarah-one-of-the-finest-linux-distro-ever
|
||||||
|
[15]:http://www.developer.linuxmint.com/
|
||||||
|
[16]:http://www.linuxandubuntu.com/linux-themes/mintilicious-cinnamon-theme-install-in-linux-mint
|
||||||
|
[17]:http://www.linuxandubuntu.com/linux-apps-releases/cinnamon-2610
|
||||||
|
[18]:https://zorinos.com/
|
||||||
|
[19]:https://sites.google.com/site/chaletoslinux/home
|
||||||
|
[20]:http://www.linuxandubuntu.com/home/how-to-create-a-linux-distro
|
||||||
|
[21]:http://www.linuxandubuntu.com/home/linux-mint-18-sarah-review
|
@ -0,0 +1,94 @@
|
|||||||
|
使用 Elizabeth 为应用生成随机样本数据
|
||||||
|
============================================================
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
图片提供 : Opensource.com
|
||||||
|
|
||||||
|
> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.
|
||||||
|
|
||||||
|
不,我的文章没有被 [Lorem ipsum][2] 生成器劫持(LCTT 译注:Lorem ipsum,中文又称“乱数假文”,只是一段用来测试排版效果的占位文字,没有实际的含义)。作为本月的 Nooks&Crannies 专栏文章,我发现了一个有趣的小 Python 库,以帮助开发人员为其应用程序生成随机数据。它被称为 [Elizabeth][3]。
|
||||||
|
|
||||||
|
它由 Líkið Geimfari 编写,并在 MIT 许可证下发行,Elizabeth 以 21 个不同本地化信息提供了 18 种数据提供器,可用于生成随机信息(LCTT 译注:不仅是随机数),包括姓名和个人特征、地址、文本数据、交通信息、网络和 Internet 社交媒体数据、数字等等。安装它需要 [Python 3.2][4] 或更高版本,您可以使用 `pip` 或从 `git` 仓库安装它。
|
||||||
|
|
||||||
|
在我的测试机上,我在一个全新安装的 [Debian][5] Jessie 上使用 pip 来安装它,要做的就是 `apt-get install python3-pip`,它将安装 Python 和所需的依赖项。然后 `pip install elizabeth`,之后就安装好了。
|
||||||
|
|
||||||
|
只是为好玩,让我们在 Python 的交互式解释器中为一个人生成一些随机数据:
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> from elizabeth import Personal
|
||||||
|
>>> p=Personal('en')
|
||||||
|
>>> p.full_name(gender="male")
|
||||||
|
'Elvis Herring'
|
||||||
|
>>> p.blood_type()
|
||||||
|
'B+'
|
||||||
|
>>> p.credit_card_expiration_date()
|
||||||
|
'09/17'
|
||||||
|
>>> p.email(gender='male')
|
||||||
|
'jessie7517@gmail.com'
|
||||||
|
>>> p.favorite_music_genre()
|
||||||
|
'Ambient'
|
||||||
|
>>> p.identifier(mask='13064########')
|
||||||
|
'1306420450944'
|
||||||
|
>>> p.sexual_orientation()
|
||||||
|
'Heterosexual'
|
||||||
|
>>> p.work_experience()
|
||||||
|
39
|
||||||
|
>>> p.occupation()
|
||||||
|
'Senior System Designer'
|
||||||
|
>>>
|
||||||
|
```
|
||||||
|
|
||||||
|
在代码中使用它就像创建一个对象那样,然后调用要你需要填充数据的对应方法。
|
||||||
|
|
||||||
|
Elizabeth 内置了 18 种不同的生成工具,添加新的生成器并不困难;你只需要定义从 JSON 值集合中获取数据的例程。以下是一些随机文本字符串生成,再次打开解释器:
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> from elizabeth import Text
|
||||||
|
>>> t=Text('en')
|
||||||
|
>>> t.swear_word()
|
||||||
|
'Rat-fink'
|
||||||
|
>>> t.quote()
|
||||||
|
'Let them eat cake.'
|
||||||
|
>>> t.words(quantity=20)
|
||||||
|
['securities', 'keeps', 'accessibility', 'barbara', 'represent', 'hentai', 'flower', 'keys', 'rpm', 'queen', 'kingdom', 'posted', 'wearing', 'attend', 'stack', 'interface', 'quite', 'elementary', 'broadcast', 'holland']
|
||||||
|
>>> t.sentence()
|
||||||
|
'She spent her earliest years reading classic literature, and writing poetry.'
|
||||||
|
```
|
||||||
|
|
||||||
|
使用 Elizabeth 填充 [SQLite][6] 或其它你可能需要用于开发或测试的数据库并不困难。其介绍文档给出了使用 [Flask][7] 这个轻量级 web 框架的一个医疗应用程序示例。
|
||||||
|
|
||||||
|
我对 Elizabeth 印象很深刻 - 它超快、轻量级、易于扩展,它的社区虽然小,但是很活跃。截至本文写作时,项目已有 25 名贡献者,并且提交的问题处理迅速。Elizabeth 的[完整文档][8]至少对于美国英语而言易于阅读和遵循,并提供了广泛的 API 参考。
|
||||||
|
|
||||||
|
我曾尝试通过修改链接来查找该文档是否有其他语言,但没有成功。因为其 API 在非英语区域中是不同的,所以记录这些变化将对用户非常有帮助。公平地说,通过阅读其代码并找出可用的方法并不难,即使你的 Python 功力并不深厚。对我来说,另一个明显的缺陷是缺乏阿拉伯语或希伯来语区域测试数据。这些是著名的从右到左的语言,对于试图使其应用程序国际化的开发者来说,适当地处理这些语言是一个主要的障碍。像 Elizabeth 这种在此方面可以协助的工具是值得拥有的。
|
||||||
|
|
||||||
|
对于那些在应用中需要随机样本数据的开发员而言,Elizabeth 是一个有价值的工具,而对于那些试图创建真正多语言、本地化应用程序的开发者来说,它可能是一个宝藏。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
D Ruth Bavousett - D Ruth Bavousett 作为一名系统管理员和软件开发人员已经很长时间了,她的专业生涯开始于 VAX 11/780。在她的职业生涯(迄今为止)中,她在解决图书馆需求上有大量的经验,她自 2008 年以来一直是 Koha 开源图书馆自动化套件的贡献者。Ruth 目前在休斯敦的 cPanel 任 Perl 开发人员,她也作为首席员工效力于双猫公司。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://opensource.com/article/17/2/elizabeth-python-library
|
||||||
|
|
||||||
|
作者:[D Ruth Bavousett][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://opensource.com/users/druthb
|
||||||
|
[1]:https://opensource.com/article/17/2/elizabeth-python-library?rate=kuXZVuHCdEv_hrxRnK1YQctlsTJeFJLcVx3Nf2VIW38
|
||||||
|
[2]:https://en.wikipedia.org/wiki/Lorem_ipsum
|
||||||
|
[3]:https://github.com/lk-geimfari/elizabeth
|
||||||
|
[4]:https://www.python.org/
|
||||||
|
[5]:https://www.debian.org/
|
||||||
|
[6]:https://sqlite.org/
|
||||||
|
[7]:https://flask.pocoo.org/
|
||||||
|
[8]:http://elizabeth.readthedocs.io/en/latest/index.html
|
||||||
|
[9]:https://opensource.com/user/36051/feed
|
||||||
|
[10]:https://opensource.com/article/17/2/elizabeth-python-library#comments
|
||||||
|
[11]:https://opensource.com/users/druthb
|
@ -0,0 +1,153 @@
|
|||||||
|
如何修改 Linux 的 GRUB 启动背景
|
||||||
|
====================
|
||||||
|
|
||||||
|
**何为 GRUB 背景( Splash )?**
|
||||||
|
|
||||||
|
GRUB 背景( Splash )只不过是一张图像,在 Linux 系统启动的时候显示为背景。你可能知道 Grub (**GR**and **U**nified **B**ootloader 的简写) 是主流 Linux 发行版中广泛使用的启动装载程序 (bootloader)。以 RedHat 为例,你会发现它在系统启动之时显示为空白或者是一个黑色背景。
|
||||||
|
|
||||||
|
GRUB 背景( Splash )的相关定义在 `grub.conf` 文件中,并且 splash 背景图像应该存储在 `/boot` 分区中。如果你觉得默认的空白屏相当无趣,同时又想按照自己的意愿来修改它,那么赶紧阅读下方的每个步骤吧。
|
||||||
|
|
||||||
|
### 开始前需要哪些准备工作
|
||||||
|
|
||||||
|
1. ImageMagick (仅在命令行中使用) 或者 GIMP (GUI 中使用)
|
||||||
|
2. 一个样例图像
|
||||||
|
|
||||||
|
### 使用 GUI 修改 Grub 的 Splash 背景
|
||||||
|
|
||||||
|
首先然我们来使用 GUI 来进行操作吧,这里我们使用 GIMP 来作为图像编辑器。
|
||||||
|
|
||||||
|
**步骤 1**、 使用 GIMP 打开图像 (路径为:_应用 (Applications)_ --> _图像 (Graphics)_ --> _GIMP 程序 (GNU Image Manipulation Program)_)
|
||||||
|
|
||||||
|
**步骤 2**、 现在我们需要按实际情况将图像缩放到 640x480 大小。为此,需要点击 _图像 (Image)_ --> _缩放图像 (Scale Image)_。记住,要如下图参数进行设置。修改宽度为 640,高度为 480。其他保持不变。
|
||||||
|
|
||||||
|
[][4]
|
||||||
|
|
||||||
|
点击 **缩放 (Scale)** 按钮
|
||||||
|
|
||||||
|
**步骤 3**、 然后,我们需要索引图像,让它仅使用 14 色。为此,点击 _图像 (Image)_ --> 模式 (Mode) --> 索引 (Indexed)。点选 "生成最优调色板 (generate optimum palette)" 选项,并设置颜色最大值 (maximum number of colors) 为 14 (如下)。
|
||||||
|
|
||||||
|
[][5]
|
||||||
|
|
||||||
|
点击 _转换 (convert)_ 按钮
|
||||||
|
|
||||||
|
**步骤 4**、 保存文件。这里以文件名为 "UxTechno.xpm" 来保存。
|
||||||
|
|
||||||
|
[][6]
|
||||||
|
|
||||||
|
**步骤 5**、 以 Zip 方式压缩文件。为此,转到文件的保存位置 --> 右击并选择 "压缩 (Compress)" 选项,选择 "gzip" 方法来压缩。
|
||||||
|
|
||||||
|
[][7]
|
||||||
|
|
||||||
|
**步骤 6**、 现在复制或移动 "UxTechno.xpm.gz" 到 `/boot/grub/UxTechno.xpm.gz`。
|
||||||
|
|
||||||
|
**步骤 7**、 这一步,打开 `/boot/grub/grub.conf` 文件编辑 `splashimage` 参数如下,并保存文件。
|
||||||
|
|
||||||
|
最后,文件的内容应该是像这样的:
|
||||||
|
|
||||||
|
```
|
||||||
|
# grub.conf
|
||||||
|
generated by anaconda
|
||||||
|
#
|
||||||
|
# Note that you do not have to rerun grub after making changes to this file
|
||||||
|
# NOTICE: You have a /boot partition. This means
|
||||||
|
that # all kernel and initrd paths are relative to /boot/, eg. # root
|
||||||
|
(hd0,0) # kernel /vmlinuz-version ro root=/dev/sda2 # initrd
|
||||||
|
/initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5
|
||||||
|
splashimage=(hd0,0)/grub/UxTechno.xpm.gz
|
||||||
|
hiddenmenu
|
||||||
|
title Red Hat Enterprise Linux (2.6.32-220.el6.x86_64)
|
||||||
|
root (hd0,0)
|
||||||
|
kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=1d8c5075-1a5b-4fdc-ba15-0458b65c6012 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb
|
||||||
|
crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM initrd
|
||||||
|
/initramfs-2.6.32-220.el6.x86_64.img
|
||||||
|
```
|
||||||
|
|
||||||
|
当你重启服务器之后,你讲看到如下效果的 splash 背景图像:
|
||||||
|
|
||||||
|
[][8]
|
||||||
|
|
||||||
|
### 使用命令行修改 Grub 的 Splash 背景
|
||||||
|
|
||||||
|
如果说你是命令行的超级粉丝,那就使用如下方法吧。
|
||||||
|
|
||||||
|
**步骤 1**、 开始之前,我们需要修改图像的像素分辨率。为此,我们还需要在 Linux 系统上安装好 ImageMagick。在 CentOS / RHEL 上使用如下命令来进行交叉检查。
|
||||||
|
|
||||||
|
```
|
||||||
|
# rpm -qa|grep -i ImageMagick
|
||||||
|
```
|
||||||
|
|
||||||
|
如果命令没有返回输出 (即空白),这意味这你的系统上还没有安装 ImageMagick。你必须运行下面的命令来安装它。
|
||||||
|
|
||||||
|
```
|
||||||
|
# yum install ImageMagick
|
||||||
|
```
|
||||||
|
|
||||||
|
安装好了重新复核一下,你会得到类似如下的输出:
|
||||||
|
|
||||||
|
```
|
||||||
|
# rpm -qa|grep -i ImageMagick
|
||||||
|
|
||||||
|
ImageMagick-6.5.4.7-5.el6.x86_64
|
||||||
|
```
|
||||||
|
|
||||||
|
然后,继续接下来的配置。这里我使用 UxTechno 的 logo 来做 splash 背景图像。
|
||||||
|
|
||||||
|
**步骤 2**、 使用如下命令来转换像素深度。
|
||||||
|
|
||||||
|
```
|
||||||
|
# convert -depth 8 -colors 14 -resize 640x480 uxtechno_logo.jpg uxtechno_logo.xpm
|
||||||
|
```
|
||||||
|
|
||||||
|
上述选项的意义如下:
|
||||||
|
|
||||||
|
1. 最大使用 14 色
|
||||||
|
2. 分辨率为 640x480
|
||||||
|
3. 使用 xpm 格式
|
||||||
|
|
||||||
|
**步骤 3**、 以 Zip 压缩文件。
|
||||||
|
|
||||||
|
```
|
||||||
|
# gzip uxtechno_logo.xpm
|
||||||
|
```
|
||||||
|
|
||||||
|
**步骤 4**、 复制文件到 `/boot` 分区。
|
||||||
|
|
||||||
|
```
|
||||||
|
# cp uxtechno_logo.xpm.gz /boot/grub/
|
||||||
|
```
|
||||||
|
|
||||||
|
**步骤 5**、 在 `/boot/grub/grub.conf` 文件中修改 `splashimage` 参数如下,并保存文件。
|
||||||
|
|
||||||
|
```
|
||||||
|
splashimage=(hd0,0)/grub/uxtechno_logo.xpm
|
||||||
|
```
|
||||||
|
|
||||||
|
**步骤 6**、 最后,使用 `reboot` 命令重启服务器。启动界面将显示使用 GUI 方式第 7 步中的图像。
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
译者简介:
|
||||||
|
|
||||||
|
[GHLandy](http://GHLandy.com) —— 生活中所有欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/how-to-change-the-linux-splash-screen/
|
||||||
|
|
||||||
|
作者:[MANMOHAN MIRKAR][a]
|
||||||
|
译者:[GHLandy](https://github.com/GHLandy)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/how-to-change-the-linux-splash-screen/
|
||||||
|
[1]:https://www.howtoforge.com/tutorial/how-to-change-the-linux-splash-screen/#what-we-need-to-proceed
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/how-to-change-the-linux-splash-screen/#change-the-grub-splash-screen-by-using-the-gui
|
||||||
|
[3]:https://www.howtoforge.com/tutorial/how-to-change-the-linux-splash-screen/#change-the-grub-splash-screennbspon-the-command-line
|
||||||
|
[4]:https://www.howtoforge.com/images/how_to_change_the_linux_splash_screen/big/scale.JPG
|
||||||
|
[5]:https://www.howtoforge.com/images/how_to_change_the_linux_splash_screen/big/index.JPG
|
||||||
|
[6]:https://www.howtoforge.com/images/how_to_change_the_linux_splash_screen/big/save.JPG
|
||||||
|
[7]:https://www.howtoforge.com/images/how_to_change_the_linux_splash_screen/big/compress.JPG
|
||||||
|
[8]:https://www.howtoforge.com/images/how_to_change_the_linux_splash_screen/big/Uxtecho_splash.JPG
|
@ -1,21 +1,21 @@
|
|||||||
Linux 上 PowerShell 6.0 使用入门 [新手指南]
|
微软爱上 Linux:当 PowerShell 来到 Linux 时
|
||||||
============================================================
|
============================================================
|
||||||
|
|
||||||
在微软爱上 Linux 之后(众所周知 **Microsoft Loves Linux**),**PowerShell** 原本只是 Windows 才能使用的组件,于 2016 年 8 月 18 日开源并且跨平台,已经可以在 Linux 和 macOS 中使用。
|
在微软爱上 Linux 之后,**PowerShell** 这个原本只是 Windows 才能使用的组件,于 2016 年 8 月 18 日开源并且成为跨平台软件,登陆了 Linux 和 macOS。
|
||||||
|
|
||||||
**PowerShell** 是一个微软开发的自动化任务和配置管理系统。它基于 .NET 框架,由命令行语言解释器(shell)和脚本语言组成。
|
**PowerShell** 是一个微软开发的自动化任务和配置管理系统。它基于 .NET 框架,由命令行语言解释器(shell)和脚本语言组成。
|
||||||
|
|
||||||
PowerShell 提供对 **COM** (**Component Object Model**) 和 **WMI** (**Windows Management Instrumentation**) 的完全访问,从而允许系统管理员在本地或远程 Windows 系统中 [执行管理任务][1],以及对 WS-Management 和 CIM(**Common Information Model**)的访问,实现对远程 Linux 系统和网络设备的管理。
|
PowerShell 提供对 **COM** (<ruby>组件对象模型<rt>Component Object Model</rt></ruby>) 和 **WMI** (<ruby>Windows 管理规范<rt>Windows Management Instrumentation</rt></ruby>) 的完全访问,从而允许系统管理员在本地或远程 Windows 系统中 [执行管理任务][1],以及对 WS-Management 和 CIM(<ruby>公共信息模型<rt>Common Information Model</rt></ruby>)的访问,实现对远程 Linux 系统和网络设备的管理。
|
||||||
|
|
||||||
通过这个框架,管理任务基本上由称为 **cmdlets**(发音 command-lets)的 **.NET** 类执行。就像 Linux 的 shell 脚本一样,用户可以通过按照一定的规则将 **cmdlets** 写入文件来制作脚本或可执行文件。这些脚本可以用作独立的[命令行程序或工具][2]。
|
通过这个框架,管理任务基本上由称为 **cmdlets**(发音 command-lets)的 **.NET** 类执行。就像 Linux 的 shell 脚本一样,用户可以通过按照一定的规则将一组 **cmdlets** 写入文件来制作脚本或可执行文件。这些脚本可以用作独立的[命令行程序或工具][2]。
|
||||||
|
|
||||||
### 在 Linux 系统中安装 PowerShell Core 6.0
|
### 在 Linux 系统中安装 PowerShell Core 6.0
|
||||||
|
|
||||||
要在 Linux 中安装 **PowerShell Core 6.0**,我们将会用到微软 Ubuntu 官方仓库,它允许我们通过最流行的 Linux 包管理器工具,如 [apt-get][3]、[yum][4] 等来安装。
|
要在 Linux 中安装 **PowerShell Core 6.0**,我们将会用到微软软件仓库,它允许我们通过最流行的 Linux 包管理器工具,如 [apt-get][3]、[yum][4] 等来安装。
|
||||||
|
|
||||||
#### 在 Ubuntu 16.04 中安装
|
#### 在 Ubuntu 16.04 中安装
|
||||||
|
|
||||||
首先,导入公共仓库 **GPG** 密钥,然后将 **Microsoft Ubuntu** 仓库注册到 **APT** 的源中来安装 **PowerShell**:
|
首先,导入该公共仓库的 **GPG** 密钥,然后将 **Microsoft Ubuntu** 仓库注册到 **APT** 的源中来安装 **PowerShell**:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
|
$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
|
||||||
@ -51,6 +51,7 @@ $ sudo yum install -y powershell
|
|||||||
```
|
```
|
||||||
$ powershell
|
$ powershell
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][5]
|
][5]
|
||||||
@ -62,6 +63,7 @@ $ powershell
|
|||||||
```
|
```
|
||||||
$PSVersionTable
|
$PSVersionTable
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][6]
|
][6]
|
||||||
@ -78,7 +80,7 @@ get-location [# 显示当前工作目录]
|
|||||||
|
|
||||||
#### 在 PowerShell 中操作文件和目录
|
#### 在 PowerShell 中操作文件和目录
|
||||||
|
|
||||||
1. 可以通过两种方法创建空文件:
|
1、 可以通过两种方法创建空文件:
|
||||||
|
|
||||||
```
|
```
|
||||||
new-item tecmint.tex
|
new-item tecmint.tex
|
||||||
@ -92,25 +94,27 @@ new-item tecmint.tex
|
|||||||
set-content tecmint.tex -value "TecMint Linux How Tos Guides"
|
set-content tecmint.tex -value "TecMint Linux How Tos Guides"
|
||||||
get-content tecmint.tex
|
get-content tecmint.tex
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][7]
|
][7]
|
||||||
|
|
||||||
*在 PowerShell 中创建新文件*
|
*在 PowerShell 中创建新文件*
|
||||||
|
|
||||||
2. 在 PowerShell 中删除一个文件
|
2、 在 PowerShell 中删除一个文件
|
||||||
|
|
||||||
```
|
```
|
||||||
remove-item tecmint.tex
|
remove-item tecmint.tex
|
||||||
get-content tecmint.tex
|
get-content tecmint.tex
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][8]
|
][8]
|
||||||
|
|
||||||
*在 PowerShell 中删除一个文件*
|
*在 PowerShell 中删除一个文件*
|
||||||
|
|
||||||
3. 创建目录
|
3、 创建目录
|
||||||
|
|
||||||
```
|
```
|
||||||
mkdir tecmint-files
|
mkdir tecmint-files
|
||||||
@ -118,13 +122,14 @@ cd tecmint-files
|
|||||||
“”>domains.list
|
“”>domains.list
|
||||||
ls
|
ls
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][9]
|
][9]
|
||||||
|
|
||||||
*在 PowerShell 中创建目录*
|
*在 PowerShell 中创建目录*
|
||||||
|
|
||||||
4. 执行长列表,列出文件/目录详细情况,包括模式(文件类型)、最后修改时间等,使用以下命令:
|
4、 执行长格式的列表操作,列出文件/目录详细情况,包括模式(文件类型)、最后修改时间等,使用以下命令:
|
||||||
|
|
||||||
```
|
```
|
||||||
dir
|
dir
|
||||||
@ -135,22 +140,24 @@ dir
|
|||||||
|
|
||||||
*Powershell 中列出目录长列表*
|
*Powershell 中列出目录长列表*
|
||||||
|
|
||||||
5. 显示系统中所有的进程:
|
5、 显示系统中所有的进程:
|
||||||
|
|
||||||
```
|
```
|
||||||
get-process
|
get-process
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][11]
|
][11]
|
||||||
|
|
||||||
*在 PowerShell 中显示运行中的进程*
|
*在 PowerShell 中显示运行中的进程*
|
||||||
|
|
||||||
6. 通过给定的名称查看正在运行的进程/进程组细节,将进程名作为参数传给上面的命令,如下:
|
6、 通过给定的名称查看正在运行的进程/进程组细节,将进程名作为参数传给上面的命令,如下:
|
||||||
|
|
||||||
```
|
```
|
||||||
get-process apache2
|
get-process apache2
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][12]
|
][12]
|
||||||
@ -159,58 +166,62 @@ get-process apache2
|
|||||||
|
|
||||||
输出中各部分的含义:
|
输出中各部分的含义:
|
||||||
|
|
||||||
* NPM(K) – 进程总共使用的非分页内存,单位:Kb。
|
* NPM(K) – 进程使用的非分页内存,单位:Kb。
|
||||||
* PM(K) – 进程总共使用的可分页内存,单位:Kb。
|
* PM(K) – 进程使用的可分页内存,单位:Kb。
|
||||||
* WS(K) – 进程的工作集大小,单位:Kb,包括进程引用到的内存页。
|
* WS(K) – 进程的工作集大小,单位:Kb,工作集由进程所引用到的内存页组成。
|
||||||
* CPU(s) – 进程所用的处理器时间,单位:秒。
|
* CPU(s) – 进程在所有处理器上所占用的处理器时间,单位:秒。
|
||||||
* ID – 进程 ID (PID).
|
* ID – 进程 ID (PID).
|
||||||
* ProcessName – 进程名称。
|
* ProcessName – 进程名称。
|
||||||
|
|
||||||
7. 想要了解更多,获取 PowerShell 命令列表:
|
7、 想要了解更多,获取 PowerShell 命令列表:
|
||||||
|
|
||||||
```
|
```
|
||||||
get-command
|
get-command
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][13]
|
][13]
|
||||||
|
|
||||||
*列出 PowerShell 的命令*
|
*列出 PowerShell 的命令*
|
||||||
|
|
||||||
8. 想知道如何使用一个命令,查看它的帮助(类似于 Unix/Linux 中的 man);举个例子,你可以这样获取命令 **Describe** 的帮助:
|
8、 想知道如何使用一个命令,查看它的帮助(类似于 Unix/Linux 中的 man);举个例子,你可以这样获取命令 **Describe** 的帮助:
|
||||||
|
|
||||||
```
|
```
|
||||||
get-help Describe
|
get-help Describe
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][14]
|
][14]
|
||||||
|
|
||||||
*PowerShell 帮助手册*
|
*PowerShell 帮助手册*
|
||||||
|
|
||||||
9. 显示所有命令的别名,輸入:
|
9、 显示所有命令的别名,輸入:
|
||||||
|
|
||||||
```
|
```
|
||||||
get-alias
|
get-alias
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][15]
|
][15]
|
||||||
|
|
||||||
*列出 PowerShell 命令别名*
|
*列出 PowerShell 命令别名*
|
||||||
|
|
||||||
10. 最后,不过也很重要,显示命令历史记录(曾运行过的命令的列表):
|
10、 最后,不过也很重要,显示命令历史记录(曾运行过的命令的列表):
|
||||||
|
|
||||||
```
|
```
|
||||||
history
|
history
|
||||||
```
|
```
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][16]
|
][16]
|
||||||
|
|
||||||
*显示 PowerShell 命令历史记录*
|
*显示 PowerShell 命令历史记录*
|
||||||
|
|
||||||
就是这些了!在这篇文章里,我们展示了如何在 Linux 中安装**微软的 PowerShell Core 6.0**。在我看来,与传统 Unix/Linux 的 shell 相比,PowerShell 还有很长的路要走。到目前为止,前者为从命令行操作机器,更重要的是,编程(写脚本),提供了更好、更多令人激动和富有成效的特性。
|
就是这些了!在这篇文章里,我们展示了如何在 Linux 中安装**微软的 PowerShell Core 6.0**。在我看来,与传统 Unix/Linux 的 shell 相比,PowerShell 还有很长的路要走。目前看来,PowerShell 还需要在命令行操作机器,更重要的是,编程(写脚本)等方面,提供更好、更多令人激动和富有成效的特性。
|
||||||
|
|
||||||
查看 PowerShell 的 GitHub 仓库:[https://github.com/PowerShell/PowerShell][17]。
|
查看 PowerShell 的 GitHub 仓库:[https://github.com/PowerShell/PowerShell][17]。
|
||||||
|
|
@ -0,0 +1,65 @@
|
|||||||
|
Windows 赢了桌面,而 Linux 赢得整个世界
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
> 最坚决推行 Linux 桌面系统项目的城市正在转回 Windows 阵营,但 Linux 的命运已经不再与 PC 休戚相关。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> 慕尼黑的 Linux 项目只是开源软件故事中的一小部分
|
||||||
|
> 图片: Getty Images/iStockphoto
|
||||||
|
|
||||||
|
在实施从 Windows 系统迁移到 Linux 系统这一项目接近十年之久后,慕尼黑却突然走上了一条戏剧性的转弯。据说是到 2021 年,该城市的地方议会就会开始用 [Windows 10][4] 替换运行 LiMux (Ubuntu 的一种自定义版本)的 PC 机。
|
||||||
|
|
||||||
|
若是回到 15 或者 20 年前,人们可能会争论什么时候 Linux 将会在桌面上取代 Windows。例如,当 Ubuntu 于 2004 年问世时,它是带着 [终结 Windows 的抱负][5] 而被设计为标准的桌面操作系统的。
|
||||||
|
|
||||||
|
剧透:这一切并没有发生。
|
||||||
|
|
||||||
|
桌面上的 Linux 在今天占有约为 2% 的市场,很多人都认为它复杂晦涩。与此同时,Windows 则航行无虞,在 PC 市场笑傲群雄,天下十有其九。但在商业领域中总还有些许 Linux 桌面的身影,它仍被需要——尤其是对开发者和数据科学家而言。
|
||||||
|
|
||||||
|
但遗憾的是,它永远也不会成为历史的主流。
|
||||||
|
|
||||||
|
慕尼黑的 Linux 项目因其规模之大,引起了许多人的兴趣。几乎没有哪家大型组织会做出从 Windows 到 Linux 的迁移,一些个别的案例像 [法国宪兵队和都灵市][6] 曾有类似之举。然而,[慕尼黑作为模范][7]:在这一事件上的失败将会大大打击那些仍在 [试图用 Linux 将 Windows 取而代之的信徒们][8]。
|
||||||
|
|
||||||
|
但现实就是如此,绝大多数公司乐于去使用主流的桌面操作系统,因为它具有完整一致、用户友好这种优势。
|
||||||
|
|
||||||
|
工作人员所抱怨的问题中,有多少是归咎于 LiMux 软件以及多少是操作系统无端被责备的,已经不可计数。但重要的是,无论慕尼黑最后何去何从,Linux 的命运都已经脱离了桌面 —— 是的,Linux 在多年前就已经输掉了桌面战争。
|
||||||
|
|
||||||
|
但这对 Linux 来说无伤大雅,因为它赢得了智能手机之战,并且在云端和物联网之战上也是捷报连连。
|
||||||
|
|
||||||
|
你的口袋里,有七八成可能装的是一个 Linux 驱动的智能手机(Android 基于 Linux 内核)。你的身边,更是有成千上万 Linux 驱动的设备,虽然这些也许你甚至都没注意到。
|
||||||
|
|
||||||
|
[像树莓派][9]这样运行大量不同类型 Linux 的设备,正在创建一个充满热情和活力的开发者社区,并且提供给初创公司一种低成本的驱动新设备的方法。
|
||||||
|
|
||||||
|
大部分公有云也是以这样或那样的形式在 Linux 上运行的;即便是微软,也已经敞开大门,拥抱开源软件。无论你站在哪一个软件平台的立场,不可否认地,开发者和用户拥有更多丰富的可选项是一件好事,对决策来说,抑或是对创新来说,都是如此。
|
||||||
|
|
||||||
|
桌面的主导地位早已不再是当年模样了:它现在只是许多计算平台中的一个。事实上,PC 的软件也已经变得越来越不相关,因为更多的应用程序都在与设备和操作系统解耦,驻留在云中。
|
||||||
|
|
||||||
|
虽然慕尼黑传奇的曲折变换与 Linux 在桌面上的冒险耐人寻味,但它们却并未给你呈现出一个完整的故事。
|
||||||
|
|
||||||
|
_同意? 还是不同意? 在下面添加你的评论来加入讨论吧!_
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.zdnet.com/article/windows-wins-the-desktop-but-linux-takes-the-world/
|
||||||
|
|
||||||
|
作者:[Steve Ranger][a]
|
||||||
|
译者:[Meditator-hkx](https://github.com/Meditator-hkx)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [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/
|
@ -0,0 +1,185 @@
|
|||||||
|
如何在 Ubuntu 上用 Yocto 创建你自己的 Linux 发行版
|
||||||
|
========================================
|
||||||
|
|
||||||
|
### 本文内容
|
||||||
|
|
||||||
|
本文主要聚焦在如何使用 Yocto 在 Ubuntu 上创建一个最小化的 Linux 发行版。Yocto 项目在嵌入式 Linux 的世界非常著名,这是因为它用起来非常灵活、方便。Yocto 的目标是为嵌入式软硬件开发商创建自己的 Linux 发行版。本文我们将会创建一个可以运行在 QEMU 上的最小化的 Linux,并且在 QEMU 上实际运行。
|
||||||
|
|
||||||
|
### 开发机的基本条件
|
||||||
|
|
||||||
|
* 最少 4-6 GB 内存
|
||||||
|
* 最新版的 Ubuntu 系统(本文使用了 16.04 LTS)
|
||||||
|
* 磁盘剩余空间至少 60-80 GB
|
||||||
|
* 在创建 Linux 发行版之前先安装下面的软件包
|
||||||
|
* 下载最新的 Yocto(Poky 是其最小开发环境)稳定分支
|
||||||
|
|
||||||
|
```
|
||||||
|
apt-get update
|
||||||
|
```
|
||||||
|
```
|
||||||
|
apt-get install wget git-core unzip make gcc g++ build-essential subversion sed autoconf automake texi2html texinfo coreutils diffstat python-pysqlite2 docbook-utils libsdl1.2-dev libxml-parser-perl libgl1-mesa-dev libglu1-mesa-dev xsltproc desktop-file-utils chrpath groff libtool xterm gawk fop
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
如下所示,开发环境要安装的软件包将近 1GB 大小。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
在这个教程中,系统上克隆的是 poky 的 `morty` 稳定分支。
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone -b morty git://git.yoctoproject.org/poky.git
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
进入 `poky` 目录,然后运行下面的命令为 Yocto 开发环境设置(设置/导出)一些环境变量。
|
||||||
|
|
||||||
|
```
|
||||||
|
source oe-init-build-env
|
||||||
|
```
|
||||||
|
|
||||||
|
如下所示,在运行了 open embedded (oe) 的构建环境脚本之后,终端里的路径会自动切换到 `build` 目录,以便进行之后行发行版的的配置和构建。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
上面的截屏展示了在 `conf` 目录下创建的文件 `local.conf`。这是 Yocto 用来设置目标机器细节和 SDK 的目标架构的配置文件。
|
||||||
|
|
||||||
|
如下所示,这里设置的目标机器是 `qemux86-64`。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
如下面截图所示,在 `local.conf` 中取消下面参数的注释符号。
|
||||||
|
|
||||||
|
```
|
||||||
|
DL_DIR ?= "${TOPDIR}/downloads"
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
```
|
||||||
|
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
```
|
||||||
|
TMPDIR ?= "${TOPDIR}/tmp"
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
```
|
||||||
|
PACKAGE_CLASSES ?= "package_rpm"
|
||||||
|
SDKMACHINE ?= "i686"
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
如下所示,在 `local.conf` 中为基于 Yocto 的 Linux 设置空密码和后续的一些参数。否则的话用户就不能登录进新的发行版。
|
||||||
|
|
||||||
|
```
|
||||||
|
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
我们并不准备使用任何图形化工具来创建 Linux OS,比如 `toaster` (`hob` 已经不再支持了)。
|
||||||
|
|
||||||
|
### Yocto 编译构建过程
|
||||||
|
|
||||||
|
现在运行下面的 `bitbake` 工具命令开始为选定的目标机器下载和编译软件包。
|
||||||
|
|
||||||
|
```
|
||||||
|
bitbake core-image-minimal
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**非常重要的是要在普通 Linux 用户下运行上面的命令,而不是使用 root 用户**。如下面截图所示,当你在 root 用户下运行 bitbake 命令会产生下面所示的错误。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
再一次运行导出环境变量的脚本(`oe-init-build-env`),重新执行相同的命令来启动下载和编译过程。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
如下所示,构建脚本组件的第一步工作是解析配置(`recipe`)。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
下面的截图展示了构建脚本的解析过程。同时也显示了用来构建你的新的基于 yocto 的发行版的构建系统的细节。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
在下载了 SDK 和必要的库之后,下一步工作是下载并编译软件包。如下截图展示了为构建新发行版而执行的任务。这一步将会执行 2-3 小时,因为首先要下载需要的软件包,然后还要为新的 Linux 发行版编译这些软件包。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
下面的截图表明了任务列表执行完毕。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
为目标机器类型 `qemux86-64` 编译好的新镜像位于 `build/tmp/deploy/images/qemux86-64`:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
如下所示,上面的命令如果运行在 `Putty` 上会产生一个错误。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
通过 `rdp` 在 Ubuntu 平台上再次运行上面的命令。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
为运行新的基于 Yocto 的 Linux 发行版的 qemu 打开一个新屏幕。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
下面展示了新发行版的登录界面,同时也显示了使用的 yocto 项目的版本号。默认的用户名是 `root` ,密码为空。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
最后使用 `root` 用户名和空密码登录新发行版。如下截图所示,在这个最小版本的 Linux 上运行了基本的命令(`data` 、 `ifconfig` 和 `uname`)。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
本文的目标是理解使用 Yocto 创建新的 Linux 发行版的过程。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/how-to-create-your-own-linux-distribution-with-yocto-on-ubuntu/
|
||||||
|
|
||||||
|
作者:[Ahmad][a]
|
||||||
|
译者:[Ezio](https://github.com/oska874)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/how-to-create-your-own-linux-distribution-with-yocto-on-ubuntu/
|
||||||
|
[1]:https://www.howtoforge.com/tutorial/how-to-create-your-own-linux-distribution-with-yocto-on-ubuntu/#prerequisites-for-the-development-machinenbsp
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/how-to-create-your-own-linux-distribution-with-yocto-on-ubuntu/#yocto-compilation-and-building-process
|
||||||
|
[3]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/1-pre_requisite_packages-1.png
|
||||||
|
[4]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/2-pre_requisite_packages-2.png
|
||||||
|
[5]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/download_morty_of_yocto.png
|
||||||
|
[6]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/source_environment_script.png
|
||||||
|
[7]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/selected_target.png
|
||||||
|
[8]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/uncheck_Download_parameters.png
|
||||||
|
[9]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/uncheck_sstate_parametes.png
|
||||||
|
[10]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/tempdir_uncheck_paramerter.png
|
||||||
|
[11]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/sdk_and_package_selection.png
|
||||||
|
[12]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/extra-features_for_blank_password.png
|
||||||
|
[13]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/bitbake_coreimageminimal.png
|
||||||
|
[14]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/dont_user_as_a_root.png
|
||||||
|
[15]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/runniing_bitbake_again-normal_user.png
|
||||||
|
[16]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/parsing-receipe.png
|
||||||
|
[17]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/output_of_parsing.png
|
||||||
|
[18]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/task_list.png
|
||||||
|
[19]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/downloaded-all_packages_and_compiled.png
|
||||||
|
[20]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/new_linux_compiled_under_qemux86_64.png
|
||||||
|
[21]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/error_on_putty.png
|
||||||
|
[22]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/runqemu_command.png
|
||||||
|
[23]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/new_linux_inside_the_qemu_.png
|
||||||
|
[24]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/reference_distro.png
|
||||||
|
[25]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/inside_new_linux_distro_running_on_qemu_3.png
|
@ -0,0 +1,280 @@
|
|||||||
|
如何在 Ubuntu 下安装和配置 FTP 服务器
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
FTP(文件传输协议)是一个较老且最常用的标准网络协议,用于在两台计算机之间通过网络上传/下载文件。然而, FTP 最初的时候并不安全,因为它仅通过用户凭证(用户名和密码)传输数据,没有进行加密。
|
||||||
|
|
||||||
|
警告:如果你打算使用 FTP, 需要考虑通过 SSL/TLS(将在下篇文章中讨论)配置 FTP 连接。否则,使用安全 FTP,比如 [SFTP][1] 会更好一些。
|
||||||
|
|
||||||
|
**推荐阅读:**[如何在 CentOS 7 中安装并保护 FTP 服务器][2]
|
||||||
|
|
||||||
|
在这个教程中,我将向你们展示如何在 Ubuntu 中安装、配置并保护 FTP 服务器(VSFTPD 的全称是 “Very Secure FTP Deamon”),从而拥有强大的安全性,能够防范 FTP 漏洞。
|
||||||
|
|
||||||
|
### 第一步:在 Ubuntu 中安装 VSFTPD 服务器
|
||||||
|
|
||||||
|
1、首先,我们需要更新系统安装包列表,然后像下面这样安装 VSFTPD 二进制包:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo apt-get update
|
||||||
|
$ sudo apt-get install vsftpd
|
||||||
|
```
|
||||||
|
|
||||||
|
2、一旦安装完成,初始情况下服务被禁用。因此,我们需要手动开启服务,同时,启动它使得在下次开机时能够自动开启服务:
|
||||||
|
|
||||||
|
```
|
||||||
|
------------- On SystemD -------------
|
||||||
|
# systemctl start vsftpd
|
||||||
|
# systemctl enable vsftpd
|
||||||
|
------------- On SysVInit -------------
|
||||||
|
# service vsftpd start
|
||||||
|
# chkconfig --level 35 vsftpd on
|
||||||
|
```
|
||||||
|
|
||||||
|
3、接下来,如果你在服务器上启用了 [UFW 防火墙][3](默认情况下不启用),那么需要打开端口 20 和 21 —— FTP 守护进程正在监听它们——从而才能允许从远程机器访问 FTP 服务,然后,像下面这样添加新的防火墙规则:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo ufw allow 20/tcp
|
||||||
|
$ sudo ufw allow 21/tcp
|
||||||
|
$ sudo ufw status
|
||||||
|
```
|
||||||
|
|
||||||
|
### 第二步:在 Ubuntu 中配置并保护 VSFTPD 服务器
|
||||||
|
|
||||||
|
4、让我们进行一些配置来设置和保护 FTP 服务器。首先,我们像下面这样创建一个原始配置文件 `/etc/vsftpd/vsftpd.conf` 的备份文件:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
|
||||||
|
```
|
||||||
|
|
||||||
|
接下来,打开 vsftpd 配置文件。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo vi /etc/vsftpd.conf
|
||||||
|
OR
|
||||||
|
$ sudo nano /etc/vsftpd.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
把下面的这些选项添加/改成所展示的值:
|
||||||
|
|
||||||
|
```
|
||||||
|
anonymous_enable=NO # 关闭匿名登录
|
||||||
|
local_enable=YES # 允许本地用户登录
|
||||||
|
write_enable=YES # 启用可以修改文件的 FTP 命令
|
||||||
|
local_umask=022 # 本地用户创建文件的 umask 值
|
||||||
|
dirmessage_enable=YES # 当用户第一次进入新目录时显示提示消息
|
||||||
|
xferlog_enable=YES # 一个存有详细的上传和下载信息的日志文件
|
||||||
|
connect_from_port_20=YES # 在服务器上针对 PORT 类型的连接使用端口 20(FTP 数据)
|
||||||
|
xferlog_std_format=YES # 保持标准日志文件格式
|
||||||
|
listen=NO # 阻止 vsftpd 在独立模式下运行
|
||||||
|
listen_ipv6=YES # vsftpd 将监听 ipv6 而不是 IPv4,你可以根据你的网络情况设置
|
||||||
|
pam_service_name=vsftpd # vsftpd 将使用的 PAM 验证设备的名字
|
||||||
|
userlist_enable=YES # 允许 vsftpd 加载用户名字列表
|
||||||
|
tcp_wrappers=YES # 打开 tcp 包装器
|
||||||
|
```
|
||||||
|
|
||||||
|
5、现在,配置 VSFTPD ,基于用户列表文件 `/etc/vsftpd.userlist` 来允许或拒绝用户访问 FTP。
|
||||||
|
|
||||||
|
注意,在默认情况下,如果通过 `userlist_enable=YES` 启用了用户列表,且设置 `userlist_deny=YES` 时,那么,用户列表文件 `/etc/vsftpd.userlist` 中的用户是不能登录访问的。
|
||||||
|
|
||||||
|
但是,选项 `userlist_deny=NO` 则反转了默认设置,这种情况下只有用户名被明确列出在 `/etc/vsftpd.userlist` 中的用户才允许登录到 FTP 服务器。
|
||||||
|
|
||||||
|
```
|
||||||
|
userlist_enable=YES # vsftpd 将会从所给的用户列表文件中加载用户名字列表
|
||||||
|
userlist_file=/etc/vsftpd.userlist # 存储用户名字的列表
|
||||||
|
userlist_deny=NO
|
||||||
|
```
|
||||||
|
|
||||||
|
重要的是,当用户登录 FTP 服务器以后,他们将进入 chrooted 环境,即当在 FTP 会话时,其 root 目录将是其 home 目录。
|
||||||
|
|
||||||
|
接下来,我们来看一看两种可能的途径来设置 chrooted(本地 root)目录,正如下面所展示的。
|
||||||
|
|
||||||
|
6、这时,让我们添加/修改/取消这两个选项来[将 FTP 用户限制在其 home 目录][4]
|
||||||
|
|
||||||
|
```
|
||||||
|
chroot_local_user=YES
|
||||||
|
allow_writeable_chroot=YES
|
||||||
|
```
|
||||||
|
|
||||||
|
选项 `chroot_local_user=YES` 意味着本地用户将进入 chroot 环境,当登录以后默认情况下是其 home 目录。
|
||||||
|
|
||||||
|
并且我们要知道,默认情况下,出于安全原因,VSFTPD 不允许 chroot 目录具有可写权限。然而,我们可以通过选项 `allow_writeable_chroot=YES` 来改变这个设置
|
||||||
|
|
||||||
|
保存文件然后关闭。现在我们需要重启 VSFTPD 服务从而使上面的这些更改生效:
|
||||||
|
|
||||||
|
```
|
||||||
|
------------- On SystemD -------------
|
||||||
|
# systemctl restart vsftpd
|
||||||
|
------------- On SysVInit -------------
|
||||||
|
# service vsftpd restart
|
||||||
|
```
|
||||||
|
|
||||||
|
### 第三步:在 Ubuntu 上测试 VsFTP 服务器
|
||||||
|
|
||||||
|
7、现在,我们通过使用下面展示的 [useradd 命令][5]创建一个 FTP 用户来测试 FTP 服务器:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo useradd -m -c "Aaron Kili, Contributor" -s /bin/bash aaronkilik
|
||||||
|
$ sudo passwd aaronkilik
|
||||||
|
```
|
||||||
|
|
||||||
|
然后,我们需要像下面这样使用 [echo 命令][6]和 tee 命令来明确地列出文件 `/etc/vsftpd.userlist` 中的用户 aaronkilik:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ echo "aaronkilik" | sudo tee -a /etc/vsftpd.userlist
|
||||||
|
$ cat /etc/vsftpd.userlist
|
||||||
|
```
|
||||||
|
|
||||||
|
8、现在,是时候来测试上面的配置是否具有我们想要的功能了。我们首先测试匿名登录;我们可以从下面的输出中很清楚的看到,在这个 FTP 服务器中是不允许匿名登录的:
|
||||||
|
|
||||||
|
```
|
||||||
|
# ftp 192.168.56.102
|
||||||
|
Connected to 192.168.56.102 (192.168.56.102).
|
||||||
|
220 Welcome to TecMint.com FTP service.
|
||||||
|
Name (192.168.56.102:aaronkilik) : anonymous
|
||||||
|
530 Permission denied.
|
||||||
|
Login failed.
|
||||||
|
ftp> bye
|
||||||
|
221 Goodbye.
|
||||||
|
```
|
||||||
|
|
||||||
|
9、接下来,我们将测试,如果用户的名字没有在文件 `/etc/vsftpd.userlist` 中,是否能够登录。从下面的输出中,我们看到,这是不可以的:
|
||||||
|
|
||||||
|
```
|
||||||
|
# ftp 192.168.56.102
|
||||||
|
Connected to 192.168.56.102 (192.168.56.102).
|
||||||
|
220 Welcome to TecMint.com FTP service.
|
||||||
|
Name (192.168.56.10:root) : user1
|
||||||
|
530 Permission denied.
|
||||||
|
Login failed.
|
||||||
|
ftp> bye
|
||||||
|
221 Goodbye.
|
||||||
|
```
|
||||||
|
|
||||||
|
10、现在,我们将进行最后一项测试,来确定列在文件 `/etc/vsftpd.userlist` 文件中的用户登录以后,是否实际处于 home 目录。从下面的输出中可知,是这样的:
|
||||||
|
|
||||||
|
```
|
||||||
|
# ftp 192.168.56.102
|
||||||
|
Connected to 192.168.56.102 (192.168.56.102).
|
||||||
|
220 Welcome to TecMint.com FTP service.
|
||||||
|
Name (192.168.56.102:aaronkilik) : aaronkilik
|
||||||
|
331 Please specify the password.
|
||||||
|
Password:
|
||||||
|
230 Login successful.
|
||||||
|
Remote system type is UNIX.
|
||||||
|
Using binary mode to transfer files.
|
||||||
|
ftp> ls
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][7]
|
||||||
|
|
||||||
|
*在 Ubuntu 中确认 FTP 登录*
|
||||||
|
|
||||||
|
警告:设置选项 `allow_writeable_chroot=YES` 是很危险的,特别是如果用户具有上传权限,或者可以 shell 访问的时候,很可能会出现安全问题。只有当你确切的知道你在做什么的时候,才可以使用这个选项。
|
||||||
|
|
||||||
|
我们需要注意,这些安全问题不仅会影响到 VSFTPD,也会影响让本地用户进入 chroot 环境的 FTP daemon。
|
||||||
|
|
||||||
|
因为这些原因,在下一步中,我将阐述一个更安全的方法,来帮助用户设置一个非可写本地 root 目录。
|
||||||
|
|
||||||
|
### 第四步:在 Ubuntu 中配置 FTP 用户的 Home 目录
|
||||||
|
|
||||||
|
11、现在,再次打开 VSFTPD 配置文件。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo vi /etc/vsftpd.conf
|
||||||
|
OR
|
||||||
|
$ sudo nano /etc/vsftpd.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
然后像下面这样用 `#` 把不安全选项注释了:
|
||||||
|
|
||||||
|
```
|
||||||
|
#allow_writeable_chroot=YES
|
||||||
|
```
|
||||||
|
|
||||||
|
接下来,为用户创建一个替代的本地 root 目录(aaronkilik,你的可能和这不一样),然后设置目录权限,取消其他所有用户对此目录的写入权限:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo mkdir /home/aaronkilik/ftp
|
||||||
|
$ sudo chown nobody:nogroup /home/aaronkilik/ftp
|
||||||
|
$ sudo chmod a-w /home/aaronkilik/ftp
|
||||||
|
```
|
||||||
|
|
||||||
|
12、然后,在本地 root 目录下创建一个具有合适权限的目录,用户将在这儿存储文件:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo mkdir /home/aaronkilik/ftp/files
|
||||||
|
$ sudo chown -R aaronkilk:aaronkilik /home/aaronkilik/ftp/files
|
||||||
|
$ sudo chmod -R 0770 /home/aaronkilik/ftp/files/
|
||||||
|
```
|
||||||
|
|
||||||
|
之后,将 VSFTPD 配置文件中的下面这些选项添加/修改为相应的值:
|
||||||
|
|
||||||
|
```
|
||||||
|
user_sub_token=$USER # 在本地 root 目录中插入用户名
|
||||||
|
local_root=/home/$USER/ftp # 定义各个用户的本地 root 目录
|
||||||
|
```
|
||||||
|
|
||||||
|
保存文件并关闭。然后重启 VSFTPD 服务来使上面的设置生效:
|
||||||
|
|
||||||
|
```
|
||||||
|
------------- On SystemD -------------
|
||||||
|
# systemctl restart vsftpd
|
||||||
|
------------- On SysVInit -------------
|
||||||
|
# service vsftpd restart
|
||||||
|
```
|
||||||
|
|
||||||
|
13、现在,让我们来最后检查一下,确保用户的本地 root 目录是我们在他的 Home 目录中创建的 FTP 目录。
|
||||||
|
|
||||||
|
```
|
||||||
|
# ftp 192.168.56.102
|
||||||
|
Connected to 192.168.56.102 (192.168.56.102).
|
||||||
|
220 Welcome to TecMint.com FTP service.
|
||||||
|
Name (192.168.56.10:aaronkilik) : aaronkilik
|
||||||
|
331 Please specify the password.
|
||||||
|
Password:
|
||||||
|
230 Login successful.
|
||||||
|
Remote system type is UNIX.
|
||||||
|
Using binary mode to transfer files.
|
||||||
|
ftp> ls
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][8]
|
||||||
|
|
||||||
|
*FTP 用户 Home 目录登录*
|
||||||
|
|
||||||
|
就是这样的!记得通过下面的评论栏来分享你关于这篇指导的想法,或者你也可以提供关于这一话题的任何重要信息。
|
||||||
|
|
||||||
|
最后但不是不重要,请不要错过我的下一篇文章,在下一篇文章中,我将阐述如何[使用 SSL/TLS 来保护连接到 Ubuntu 16.04/16.10 的 FTP 服务器][9],在那之前,请始终关注我们。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Aaron Kili 是 Linux 和 F.O.S.S 爱好者,即将成为 Linux SysAdmin 和网络开发人员,目前是 TecMint 的内容创作者,他喜欢在电脑上工作,并坚信分享知识。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/install-ftp-server-in-ubuntu/
|
||||||
|
|
||||||
|
作者:[Aaron Kili][a]
|
||||||
|
译者:[ucasFL](https://github.com/ucasFL)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.tecmint.com/author/aaronkili/
|
||||||
|
|
||||||
|
[1]:http://www.tecmint.com/sftp-command-examples/
|
||||||
|
[2]:http://www.tecmint.com/install-ftp-server-in-centos-7/
|
||||||
|
[3]:http://www.tecmint.com/how-to-install-and-configure-ufw-firewall/
|
||||||
|
[4]:http://www.tecmint.com/restrict-sftp-user-home-directories-using-chroot/
|
||||||
|
[5]:http://www.tecmint.com/add-users-in-linux/
|
||||||
|
[6]:http://www.tecmint.com/echo-command-in-linux/
|
||||||
|
[7]:http://www.tecmint.com/wp-content/uploads/2017/02/Verify-FTP-Login-in-Ubuntu.png
|
||||||
|
[8]:http://www.tecmint.com/wp-content/uploads/2017/02/FTP-User-Home-Directory-Login.png
|
||||||
|
[9]:http://www.tecmint.com/secure-ftp-server-using-ssl-tls-on-ubuntu/
|
||||||
|
[10]:http://www.tecmint.com/author/aaronkili/
|
||||||
|
[11]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
|
||||||
|
[12]:http://www.tecmint.com/free-linux-shell-scripting-books/
|
@ -0,0 +1,120 @@
|
|||||||
|
如何从 Vim 中访问 shell 或者运行外部命令
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
Vim——正如你可能已经了解的那样——是一个包含很多特性的强大的编辑器。我们已经写了好多关于 Vim 的教程,覆盖了 [基本用法][4]、 [插件][5], 还有一些 [其他的][6] [有用的][7] 特性。鉴于 Vim 提供了多如海洋的特性,我们总能找到一些有用的东西来和我们的读者分享。
|
||||||
|
|
||||||
|
在这篇教程中,我们将会重点关注你如何在编辑窗口执行外部的命令,并且访问命令行 shell。
|
||||||
|
|
||||||
|
但是在我们开始之前,很有必要提醒一下,在这篇教程中提及到的所有例子、命令行和说明,我们已经在 Ubuntu 14.04 上测试过,我们使用的的 Vim 版本是 7.4 。
|
||||||
|
|
||||||
|
### 在 Vim 中执行外部命令
|
||||||
|
|
||||||
|
有的时候,你可能需要在 Vim 编辑窗口中执行外部的命令。例如,想象一下这种场景:你已经在 Vim 中打开了一个文件,并做了一些修改,然后等你尝试保存这些修改的时候,Vim 抛出一个错误说你没有足够的权限。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][8]
|
||||||
|
|
||||||
|
现在,退出当前的 vim 会话,重新使用足够的权限打开文件将意味着你会丢失所做的所有修改,所以,你可能赞同,在大多数情况不是只有一个选择。像这样的情况,在编辑器内部运行外部命令的能力将会派上用场。
|
||||||
|
|
||||||
|
稍后我们再回来上面的用例,但是现在,让我们了解下如何在 vim 中运行基本的命令。
|
||||||
|
|
||||||
|
假设你在编辑一个文件,希望知道这个文件包含的行数、单词数和字符数。为了达到这个目的,在 vim 的命令行模式下,只需要输入冒号 `:`,接下来一个感叹号 `!`,最后是要执行的命令(这个例子中使用的是 `wc`)和紧接着的文件名(使用 `%` 表示当前文件)。
|
||||||
|
|
||||||
|
```
|
||||||
|
:! wc %
|
||||||
|
```
|
||||||
|
|
||||||
|
这是一个例子:
|
||||||
|
|
||||||
|
填入的上面提及的命令行准备执行:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][9]
|
||||||
|
|
||||||
|
下面是终端上的输出:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][10]
|
||||||
|
|
||||||
|
在你看到输出之后,输入回车键,你将会退回到你的 vim 会话中。
|
||||||
|
|
||||||
|
你正在编写代码或者脚本,并且希望尽快知道这段代码或者脚本是否包含编译时错误或者语法错误,这个时候,这种特性真的很方便。
|
||||||
|
|
||||||
|
继续,如果需求是添加输出到文件中,使用 `:read !` 命令。接下来是一个例子:
|
||||||
|
|
||||||
|
```
|
||||||
|
:read ! wc %
|
||||||
|
```
|
||||||
|
|
||||||
|
`read` 命令会把外部命令的输出作为新的一行插入到编辑的文件中的当前行的下面一行。如果你愿意,你也可以指定一个特定的行号——输出将会添加到特定行之后。
|
||||||
|
|
||||||
|
例如,下面的命令将会在文件的第二行之后添加 `wc` 的输出。
|
||||||
|
|
||||||
|
```
|
||||||
|
:2read ! wc %
|
||||||
|
```
|
||||||
|
|
||||||
|
**注意**: 使用 `$` 在最后一行插入, `0` 在第一行前面插入。
|
||||||
|
|
||||||
|
现在,回到最开始我们讨论的一个用例,下面的命令将会帮助你保存文件而不需要先关闭文件(这将意味着没有保存的内容不会丢失)然后使用 [sudo][11] 命令重新打开。
|
||||||
|
|
||||||
|
```
|
||||||
|
:w ! sudo tee %
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][12]
|
||||||
|
|
||||||
|
### 在 Vim 中访问 shell
|
||||||
|
|
||||||
|
除了可以执行单独的命令,你也可以在 vim 中放入自己新创建的 shell。为了达到这种目的,在编辑器中你必须要做的是运行以下的命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
:shell
|
||||||
|
```
|
||||||
|
|
||||||
|
或者:
|
||||||
|
|
||||||
|
```
|
||||||
|
:sh
|
||||||
|
```
|
||||||
|
|
||||||
|
当你执行完了你的 shell 任务,输入 `exit` —— 这将带你回到原来离开的 Vim 会话中。
|
||||||
|
|
||||||
|
### 要谨记的漏洞
|
||||||
|
|
||||||
|
虽然在真实世界中,能够访问的 shell 绝对符合它们的用户权限,但是它也可以被用于提权技术。正如我们在早期的一篇文章(在 sudoedit 上)解释的那样,即使你提供给一个用户 `sudo` 的权限只是通过 Vim 编辑一个文件,他们仍可以使用这项技术从编辑器中运行一个新的 shell,而且他们可以做 `root` 用户或者管理员用户可以做的所有内容。
|
||||||
|
|
||||||
|
### 总结
|
||||||
|
|
||||||
|
能够在 Vim 中运行外部命令在好多场景中(有些场景我们已经在这篇文章中提及了)都是一个很有用的特性。这个功能的学习曲线并不麻烦,所以初学者和有经验的用户都可以好好使用它。
|
||||||
|
|
||||||
|
你现在使用这个特性有一段时间了吗?你是否有一些东西想分享呢?请在下面的评论中留下你的想法。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/how-to-access-shell-or-run-external-commands-from-within-vim/
|
||||||
|
|
||||||
|
作者:[Himanshu Arora][a]
|
||||||
|
译者:[yangmingming](https://github.com/yangmingming)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/how-to-access-shell-or-run-external-commands-from-within-vim/
|
||||||
|
[1]:https://www.howtoforge.com/tutorial/how-to-access-shell-or-run-external-commands-from-within-vim/#execute-external-commands-in-vim
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/how-to-access-shell-or-run-external-commands-from-within-vim/#access-shell-in-vim
|
||||||
|
[3]:https://www.howtoforge.com/tutorial/how-to-access-shell-or-run-external-commands-from-within-vim/#the-loophole-to-keep-in-mind
|
||||||
|
[4]:https://www.howtoforge.com/vim-basics
|
||||||
|
[5]:https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-3/
|
||||||
|
[6]:https://www.howtoforge.com/tutorial/vim-modeline-settings/
|
||||||
|
[7]:https://www.howtoforge.com/tutorial/vim-editor-modes-explained/
|
||||||
|
[8]:https://www.howtoforge.com/images/how-to-access-shell-or-run-external-commands-from-within-vim/big/vim-perm-error.png
|
||||||
|
[9]:https://www.howtoforge.com/images/how-to-access-shell-or-run-external-commands-from-within-vim/big/vim-count-lines.png
|
||||||
|
[10]:https://www.howtoforge.com/images/how-to-access-shell-or-run-external-commands-from-within-vim/big/vim-wc-output.png
|
||||||
|
[11]:https://www.howtoforge.com/tutorial/sudo-beginners-guide/
|
||||||
|
[12]:https://www.howtoforge.com/images/how-to-access-shell-or-run-external-commands-from-within-vim/big/vim-sudo-passwrd.png
|
@ -0,0 +1,114 @@
|
|||||||
|
LaTeXila 简介:Linux 上的一个多语言 LaTeX 编辑器
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
LaTeXila 是一个多语言 LaTeX 编辑器,专为那些偏爱 GTK+ 外观的 Linux 用户设计。这个软件简单,但又足够强大,可定制性良好,所以如果你对 LaTeX 感兴趣,那么你就应该尝试一下这个工具。在下面的快速指南中,我将展示如何使用 LaTeXila 并介绍其主要功能。但在开始之前你可能要问:
|
||||||
|
|
||||||
|
### 为何选择使用 LaTeX?
|
||||||
|
|
||||||
|
假如我想创建一个文本文档,为什么我不使用 LibreOffice 或者 Abiword 这些常规的工具呢?原因是相比于常规的文本编辑器,LaTeX 编辑器一般来说都会提供更多功能强大的格式化工具,让你在写作期间专注于文档的内容。LaTeX 是一个文档准备系统,目的是简化大多数常见出版物的处理过程,例如书籍或者科学报告,它们通常都包含很多数学公式,多语言排版元素,交叉引用及引文,参考文献等等需要处理的元素。尽管上面的那些元素也可以用 LibreOffice 来处理,使用 LaTeXila 要相对简单一些,同时处理得当的话你最后得到的会是一份高质量的文档。
|
||||||
|
|
||||||
|
### 在一个新文档上开始工作并设定文章结构
|
||||||
|
|
||||||
|
首先,我们需要在 LaTeXila 中创建一个新文件,这个可以通过点击位于左上角的 “新建文件” 图标来实现,接着它将打开一个对话框,让我们选择一个模板从而快速地开始写作。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][6]
|
||||||
|
|
||||||
|
在这里假设我将写一本书,所以我选择一个书籍模板,像下面的截图那样在相应的括号中添上标题和作者:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][7]
|
||||||
|
|
||||||
|
现在就让我来解释一些关于文章结构的事情。我知道这看起来就像编代码,如果你是一位作家而非程序员,那么像下面那样工作或许很是奇怪,但请先容我讲完,我将对此进行解释。
|
||||||
|
|
||||||
|
在第一行和第九行之间,我们已经写好了书写整个文档所需的所有基本要素。例如在第一行中,我们可以通过修改 `[a4paper,11pt]` 来定义纸张和字体的大小,在这个方括号中,我们可以添加更多的选项,选项之间以英文逗号来分隔。
|
||||||
|
|
||||||
|
在第二行和第四行之间,我们可以看到一些条目,它们都以 `\userpackage` 打头,紧接着的是用方括号包裹的选项和用括号包裹的命令。这些命令都是一些增强宏包,LaTeXila 默认已经安装它们到我们的系统上了,并且在大多数模板中都将使用它们。需要特别注意的是字体编码,字符编码和字体的类型。
|
||||||
|
|
||||||
|
紧接着让我们看看 `\maketitle` 这一行,这里我们可以添加一个单独的标题页,且默认情况下标题的内容将被放置在第一页的顶部。类似的,包含 `\tableofcontents` 的那行将会自动生成书籍的目录。
|
||||||
|
|
||||||
|
最后,我们可以自己命名章节的名称,这可以通过在 `\chapter` 后的括号中添加章节名称来实现。第一个章节将会被自动地标记为第一章。你可以在接下来的行中添加内容,一直到下一个以 `\chapter` 开头的新行为止,这些都将是这个章节的内容。新的章节将会被自动地标记为第二章,以此类推。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][8]
|
||||||
|
|
||||||
|
章节之间还可以用命令 `\section` 来划分为更小的块,甚至还可以使用 `\subsection` 来划分为更小的部分。各个小节和章都将被 `\tableofcontents` 自动检测到,并将使用它们的标题和页码来填充目录的内容。看看下面的截图就可以看到章和小节是如何在你的书中被排版的。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][9]
|
||||||
|
|
||||||
|
假如你想浏览结构,你可以将左边的工具栏更换到<ruby>“结构”<rt>Structure</rt></ruby>选项,并确保所有的结构与预期相符。在这里,你还可以控制各小节中的任意数据表格和图片。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][10]
|
||||||
|
|
||||||
|
讲到这里,有人或许想将表格和图片的位置也包含在目录中。要达到此目的,你需要将下面的两行添加到 `\tableofcontents` 之后:
|
||||||
|
|
||||||
|
```
|
||||||
|
\listoffigures
|
||||||
|
\listoftables
|
||||||
|
```
|
||||||
|
|
||||||
|
最后标志着书籍结束的信号是 `\end{document}`。你的布局应该总是以此为结尾。
|
||||||
|
|
||||||
|
### LaTeXila 简单易用,公式齐全
|
||||||
|
|
||||||
|
LaTeX 是一个基于命令的文档生成系统,它与使用的编辑器没有多少关联。这里需要强调的是 LaTeXila 提供了一系列强大的工具,使得在你书写报告或书籍时能够节省一些时间和精力。例如对于 LaTex 命令,它提供了自动补全功能,这个功能将在你每次开始输入命令时被激活。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][11]
|
||||||
|
|
||||||
|
LaTeXila 还集成有基于 gspell 的拼写检测系统,你可以在最上面的“工具”菜单中设定合适的语言。最上面的工具栏里几乎包含了你要用到的所有按钮。从左到右,你可以完成添加章节,交叉引用,调整字符的大小,格式化被选取的部分,添加无序列表和数学函数等等。这些都可以手动地输入,但通过点击相应按钮来完成或许更加方便。
|
||||||
|
|
||||||
|
对于生成数学公式,结合侧边栏上的工具栏选项,你只需轻轻一点就可以添加相应的数学符号。点击位于左边的侧边栏中<ruby>“符号”<rt>Symbols</rt></ruby>框,你就可以看到相关的符号分类,例如“关系运算符”,“希腊字母”,“运算符”等等。下面的截图就是一些符号的示例:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][12]
|
||||||
|
|
||||||
|
这些符号的图形化列表使得公式和数学表达式的生成犹如在公园中散步那样舒适。
|
||||||
|
|
||||||
|
### 将 .tex 文件转换为 .rtf 文件
|
||||||
|
|
||||||
|
默认情况下,LaTeXila 会将你的文档保存为标准的 `.tex` 文档,而我们可以使用 `.tex` 文档来生成一个<ruby>“富文本”<rt>rich text format</rt></ruby>文档,这些富文本文档可以使用像 LibreOffice 那样的文本编辑器打开。要达到此目的,我们需要安装一个名为 `latex2rtf` 的工具,它在所有的 Linux 发行版本中都可以被获取到。在文本所在的目录打开虚拟终端, 并输入 `latex2rtf 文件名称`,如下所示 :
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][13]
|
||||||
|
|
||||||
|
当然 LaTeXila 也提供了它自己的构建工具,这些工具可以在上面的工具栏或者最上面的面板(构建)中看到。但我向你推荐 latex2rtf 是以防它们在其他的操作系统上出现某些意想不到的问题,比如在我的系统上就不能正常工作。
|
||||||
|
|
||||||
|
### 结论
|
||||||
|
|
||||||
|
假如上面的介绍激发了你探索 LaTeX 的兴趣,那就再好不过了。我写这篇文章的目的是向新手介绍一款简单易用且适合他们写作的工具。要是 LaTeXila 还带有实时预览的双屏模式的话,它就更加完美了...
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/introduction-to-latexila-latex-editor/
|
||||||
|
|
||||||
|
作者:[Bill Toulas][a]
|
||||||
|
译者:[FSSlc](https://github.com/FSSlc)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/introduction-to-latexila-latex-editor/
|
||||||
|
[1]:https://www.howtoforge.com/tutorial/introduction-to-latexila-latex-editor/#why-latex
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/introduction-to-latexila-latex-editor/#starting-work-on-a-new-document-and-setting-up-the-structure
|
||||||
|
[3]:https://www.howtoforge.com/tutorial/introduction-to-latexila-latex-editor/#latexila-ease-of-use-and-mathematics
|
||||||
|
[4]:https://www.howtoforge.com/tutorial/introduction-to-latexila-latex-editor/#from-tex-to-rtf
|
||||||
|
[5]:https://www.howtoforge.com/tutorial/introduction-to-latexila-latex-editor/#conclusion
|
||||||
|
[6]:https://www.howtoforge.com/images/introduction-to-latexila/big/pic_1.png
|
||||||
|
[7]:https://www.howtoforge.com/images/introduction-to-latexila/big/pic_2.png
|
||||||
|
[8]:https://www.howtoforge.com/images/introduction-to-latexila/big/pic_3.png
|
||||||
|
[9]:https://www.howtoforge.com/images/introduction-to-latexila/big/pic_4.png
|
||||||
|
[10]:https://www.howtoforge.com/images/introduction-to-latexila/big/pic_5.png
|
||||||
|
[11]:https://www.howtoforge.com/images/introduction-to-latexila/big/pic_6.png
|
||||||
|
[12]:https://www.howtoforge.com/images/introduction-to-latexila/big/pic_7.png
|
||||||
|
[13]:https://www.howtoforge.com/images/introduction-to-latexila/big/pic_8.png
|
@ -0,0 +1,527 @@
|
|||||||
|
在 VirtualBox 虚拟机中安装 Arch Linux 系统指南
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
Arch Linux 是专门为 i386 和 x86-64 架构的计算机而设计的基于 Linux 内核的操作系统。其特有的软件包管理器使用 `pacman` 进行完整追踪来将系统应用软件升级到最新版本。 Pacman 是一个用于安装、升级和卸载软件包的管理器。这是一款完全自由而开源的软件,由 Linux 开源社区提供支持。
|
||||||
|
|
||||||
|
Arch Linux 也因其丰富的 Wiki 帮助文档而大受推崇。该系统基于二进制的软件包,这些软件包主要是为 i386 的 64 位和 32 位的系统而开发的,同时也为现代的硬件系统提供最佳的性能优化。
|
||||||
|
|
||||||
|
你可以参考这篇教程直接在你的本地电脑上安装 Arch Linux 系统,或者你也可以使用你的 Windows 电脑中的 VirtualBox 虚拟机来安装。
|
||||||
|
|
||||||
|
### Arch Linux 软件仓库
|
||||||
|
|
||||||
|
要在 VirtualBox 中安装 Arch Linux 系统,你得了解该系统的基础软件仓库。软件仓库用于在安装的过程中获取软件包。对于 Arch Linux 系统来说,有很多可用的软件仓库,可以使用 pacman 工具来进行维护。下面列出的是在 VirtualBox 中安装 Arch Linux 系统时用到的一些基础软件仓库列表:
|
||||||
|
|
||||||
|
* **core ** 软件仓库包括所有的用于对系统进行基本设置的一些软件包,比如启动 Arch Linux 系统和编译软件包。
|
||||||
|
* **extra ** 软件仓库包括 core 软件仓库以外的其它软件包以及与桌面环境相关的软件包。
|
||||||
|
* **community ** 软件仓库包含的是由可信任的 Linux 社区用户维护的软件包,其中的大多数的软件包都会被迁移到核心软件仓库或者额外软件仓库中。
|
||||||
|
* **Multilib ** 软件仓库包括 32 位的软件包以及用于在 64 位操作系统中安装 32 位应用程序的类库。
|
||||||
|
* **testing ** 软件仓库包括那些即将成为 core 或 extra 的软件包。
|
||||||
|
* **community-testing** 软件仓库主要用于 community 类的测试。
|
||||||
|
* **multilib testing ** 软件仓库跟 testing 软件仓库类似,但是它包含 Multilib 类。
|
||||||
|
* **gnome-unstable ** 软件仓库包括最新的 GNOME 桌面环境。
|
||||||
|
* **kde-unstable ** 软件仓库包括 KDE 最新的发布前软件包。
|
||||||
|
|
||||||
|
### 在 VirtualBox 虚拟机中安装 Arch Linux 系统
|
||||||
|
|
||||||
|
#### 下载 Arch Linux 系统
|
||||||
|
|
||||||
|
要在 VirtualBox 虚拟机中安装 Arch Linux 系统,你最好使用[官网][10]下载的新版 Arch Linux 系统。你可以选择直接下载或是种子方式下载系统文件,这是一个很安全的下载方式。在安装之前,确保你系统中有 20 GB 的剩余空间和 1 GB 的内存。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][11]
|
||||||
|
|
||||||
|
#### 在 Oracle VirtualBox 虚拟机管理界面初始化系统安装
|
||||||
|
|
||||||
|
打开 Oracle VirtualBox 虚拟机管理界面,点击新建(new),输入你想创建的新系统的名称;这里输入的是 “Arch Linux” 。系统会自动选择 Arch Linux 的版本和类型,这取决于你的系统配置。单击_下一步_。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][12]
|
||||||
|
|
||||||
|
为你的新系统分配内存,最好是 1024 MB 。单击_下一步_,然后点击创建(create)来创建一个虚拟磁盘。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][13]
|
||||||
|
|
||||||
|
在下一步中,你将会被询问为新系统选择磁盘类型。通常选择 VirtualBox 磁盘镜像(VirtualBox Disk Image,VDI)类型。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][14]
|
||||||
|
|
||||||
|
选择动态分配(dynamically allocated),单击_下一步_。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][15]
|
||||||
|
|
||||||
|
分配 20 GB 的硬盘大小及存放位置。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][16]
|
||||||
|
|
||||||
|
现在你可以看到 Arch Linux 系统已创建完成了。点击开始(start)按钮。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][17]
|
||||||
|
|
||||||
|
单击浏览(browser)然后选择你从官网下载的启动磁盘。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][18]
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][19]
|
||||||
|
|
||||||
|
点击启动(start),然后打开全屏模式。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][20]
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][21]
|
||||||
|
|
||||||
|
#### 在 VirtualBox 中启动并安装 Arch Linux 系统
|
||||||
|
|
||||||
|
你将会看到 Arch Linux 系统第一个打开界面。单击 “Boot Arch Linux (x86_64)”, 它用于 64 位系统,或者单击 “Boot Arch Linux (i686)”,用于 32 位系统。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][22]
|
||||||
|
|
||||||
|
当你单击第一个选项后,系统将开始启动。实际上只是进入到一个临时启动状态,即进入到 Arch Linux 的 Live 系统,并以 root 帐号登录了。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][23]
|
||||||
|
|
||||||
|
输入下面的命令来检查网络连接。
|
||||||
|
|
||||||
|
```
|
||||||
|
ping google.com
|
||||||
|
```
|
||||||
|
|
||||||
|
这个单词 ping 表示网路封包搜寻。你将会看到下面的返回信息,表明 Arch Linux 已经连接到外网了。这是执行安装过程中的很关键的一点。(LCTT 译注:或许你 ping 不到那个不存在的网站,你选个存在的吧。)
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][24]
|
||||||
|
|
||||||
|
输入如下命令清屏:
|
||||||
|
|
||||||
|
```
|
||||||
|
clear
|
||||||
|
```
|
||||||
|
|
||||||
|
在开始安装之前,你得先为硬盘分区。输入 `fdisk -l` ,你将会看到当前系统的磁盘分区情况。注意一开始你给 Arch Linux 系统分配的 20 GB 存储空间。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][25]
|
||||||
|
|
||||||
|
#### 硬盘分区
|
||||||
|
|
||||||
|
我们打算把这个 20 GB 的磁盘分成三个分区。第一个主分区为 root 分区,大小为 10 GB 。第二个分区为 swap 分区,大小为内存的两倍,为 2048 MB 。第三个是逻辑分区,大小为 8 GB 。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][26]
|
||||||
|
|
||||||
|
输入下面的命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
cfdisk
|
||||||
|
```
|
||||||
|
|
||||||
|
你将看到 `gpt`、`dos`、`sgi` 和 `sun` 类型,选择 `dos` 选项,然后按回车。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][27]
|
||||||
|
|
||||||
|
这里你将看到主磁盘空间,大小为 20 GB 。在剩余空间(free space)按回车来修改分区大小,输入 10 GB 。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][28]
|
||||||
|
|
||||||
|
按回车并单击 “主分区(primary)” 。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][29]
|
||||||
|
|
||||||
|
在可引导选项按回车选择“可引导(bootable)”类型。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][30]
|
||||||
|
|
||||||
|
在“写入(write)选项按回车键将分区信息写入磁盘。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][31]
|
||||||
|
|
||||||
|
之后输入 `yes` 来应用更改。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][32]
|
||||||
|
|
||||||
|
现在已经创建完成 10 GB 分区。单击“剩余空间(free space)”,输入分区大小 2048 M 。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][33]
|
||||||
|
|
||||||
|
以同样的方式创建逻辑分区。在“退出(quit)”选项按回车键,然后输入下面的命令来清屏:
|
||||||
|
|
||||||
|
```
|
||||||
|
clear
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][34]
|
||||||
|
|
||||||
|
输入下面的命令来格式化新建的分区:
|
||||||
|
|
||||||
|
```
|
||||||
|
mkfs.ext4 /dev/sda1
|
||||||
|
```
|
||||||
|
|
||||||
|
这里的 `sda1` 是分区名。使用同样的命令来格式化第二个分区 `sda3` :
|
||||||
|
|
||||||
|
```
|
||||||
|
mkfs.ext4 /dev/sda3
|
||||||
|
```
|
||||||
|
|
||||||
|
格式化 swap 分区:
|
||||||
|
|
||||||
|
```
|
||||||
|
mkswap /dev/sda2
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][35]
|
||||||
|
|
||||||
|
使用下面的命令来激活 swap 分区:
|
||||||
|
|
||||||
|
```
|
||||||
|
swapon /dev/sda2
|
||||||
|
```
|
||||||
|
|
||||||
|
输入 clear 命令清屏:
|
||||||
|
|
||||||
|
```
|
||||||
|
clear
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][36]
|
||||||
|
|
||||||
|
输入下面的命令来挂载主分区以开始系统安装:
|
||||||
|
|
||||||
|
```
|
||||||
|
mount /dev/sda1 / mnt
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][37]
|
||||||
|
|
||||||
|
#### 引导 Arch Linux 启动
|
||||||
|
|
||||||
|
输入下面的命令来引导系统启动:
|
||||||
|
|
||||||
|
```
|
||||||
|
pacstrap /mnt base base-devel
|
||||||
|
```
|
||||||
|
|
||||||
|
可以看到系统正在同步数据包。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][38]
|
||||||
|
|
||||||
|
安装将会开始,需要几分钟。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][39]
|
||||||
|
|
||||||
|
系统基本软件安装完成后,输入下面的命令来创建 fstab 文件:
|
||||||
|
|
||||||
|
```
|
||||||
|
genfstab /mnt>> /mnt/etc/fstab
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][40]
|
||||||
|
|
||||||
|
配置区域、时间和 root 帐号密码。
|
||||||
|
|
||||||
|
输入下面的命令来更改系统的根目录为 Arch Linux 的安装目录:
|
||||||
|
|
||||||
|
```
|
||||||
|
arch-chroot /mnt /bin/bash
|
||||||
|
```
|
||||||
|
|
||||||
|
现在来更改语言配置:
|
||||||
|
|
||||||
|
```
|
||||||
|
nano /etc/local.gen
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][41]
|
||||||
|
|
||||||
|
通过删除 `#` 以及按 `control + x` ,按 `y` ,然后再按回车来选择下面的语言配置:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][42]
|
||||||
|
|
||||||
|
输入下面的命令来激活它:
|
||||||
|
|
||||||
|
```
|
||||||
|
locale-gen
|
||||||
|
```
|
||||||
|
|
||||||
|
按回车。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][43]
|
||||||
|
|
||||||
|
使用下面的命令来创建 `/etc/locale.conf` 配置文件:
|
||||||
|
|
||||||
|
```
|
||||||
|
nano /etc/locale.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
然后按回车。现在你就可以在配置文件中输入下面一行内容来为系统添加语言:
|
||||||
|
|
||||||
|
```
|
||||||
|
LANG=en_US.UTF-8
|
||||||
|
```
|
||||||
|
|
||||||
|
然后按 `control + x` ,按 `y` ,再按回车。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][44]
|
||||||
|
|
||||||
|
输入下面的命令来同步时区:
|
||||||
|
|
||||||
|
```
|
||||||
|
ls user/share/zoneinfo
|
||||||
|
```
|
||||||
|
|
||||||
|
下面你将看到整个世界的时区列表。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][45]
|
||||||
|
|
||||||
|
输入下面的命令来选择你所在的时区:
|
||||||
|
|
||||||
|
```
|
||||||
|
ln –s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||||
|
```
|
||||||
|
|
||||||
|
或者你可以从下面的列表中选择其它名称。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][46]
|
||||||
|
|
||||||
|
使用下面的命令来设置标准时间:
|
||||||
|
|
||||||
|
```
|
||||||
|
hwclock --systohc –utc
|
||||||
|
```
|
||||||
|
|
||||||
|
硬件时钟已同步。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][47]
|
||||||
|
|
||||||
|
设置 root 帐号密码:
|
||||||
|
|
||||||
|
```
|
||||||
|
passwd
|
||||||
|
```
|
||||||
|
|
||||||
|
按回车。 然而输入你想设置的密码,按回车确认。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][48]
|
||||||
|
|
||||||
|
#### 设置主机名和网络
|
||||||
|
|
||||||
|
使用下面的命令来设置主机名:
|
||||||
|
|
||||||
|
```
|
||||||
|
nano /etc/hostname
|
||||||
|
```
|
||||||
|
|
||||||
|
然后按回车。输入你想设置的主机名称,按 `control + x` ,按 `y` ,再按回车 。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][49]
|
||||||
|
|
||||||
|
启用 dhcpcd :
|
||||||
|
|
||||||
|
```
|
||||||
|
systemctl enable dhcpcd
|
||||||
|
```
|
||||||
|
|
||||||
|
这样在下一次系统启动时, dhcpcd 将会自动启动,并自动获取一个 IP 地址:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][50]
|
||||||
|
|
||||||
|
#### 安装引导加载程序
|
||||||
|
|
||||||
|
最后一步,输入以下命令来初始化 grub 安装。输入以下命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
pacman –S grub os-rober
|
||||||
|
```
|
||||||
|
|
||||||
|
然后按 `y` ,将会下载相关程序。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][51]
|
||||||
|
|
||||||
|
使用下面的命令来将启动加载程序安装到硬盘上:
|
||||||
|
|
||||||
|
```
|
||||||
|
grub-install /dev/sda
|
||||||
|
```
|
||||||
|
|
||||||
|
然后进行配置:
|
||||||
|
|
||||||
|
```
|
||||||
|
grub-mkconfig -o /boot/grub/grub.cfg
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][52]
|
||||||
|
|
||||||
|
最后重启系统:
|
||||||
|
|
||||||
|
```
|
||||||
|
reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
然后按回车 。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][53]
|
||||||
|
|
||||||
|
#### 启动进入到已安装完成的 Arch Linux 系统
|
||||||
|
|
||||||
|
选择“启动已存在的操作系统”选项来启动 Virtual Box 虚拟机中的 Arch Linux 系统。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][54]
|
||||||
|
|
||||||
|
使用 root 帐号和密码登录后,你将进入全新安装好的 Arch Linux 操作系统。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][55]
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/install-arch-linux-on-virtualbox/
|
||||||
|
|
||||||
|
译者简介:
|
||||||
|
|
||||||
|
rusking:春城初春/春水初生/春林初盛/春風十裏不如妳
|
||||||
|
|
||||||
|
作者:[Dimitris][a]
|
||||||
|
译者:[rusking](https://github.com/rusking)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/install-arch-linux-on-virtualbox/
|
||||||
|
[1]:https://www.howtoforge.com/tutorial/install-arch-linux-on-virtualbox/#download-arch-linux
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/install-arch-linux-on-virtualbox/#initializing-installation-with-oracle-vm-virtualbox-manager
|
||||||
|
[3]:https://www.howtoforge.com/tutorial/install-arch-linux-on-virtualbox/#partition-the-hard-disk
|
||||||
|
[4]:https://www.howtoforge.com/tutorial/install-arch-linux-on-virtualbox/#bootstrap-arch-linux
|
||||||
|
[5]:https://www.howtoforge.com/tutorial/install-arch-linux-on-virtualbox/#setup-hostname-and-networking
|
||||||
|
[6]:https://www.howtoforge.com/tutorial/install-arch-linux-on-virtualbox/#install-the-bootloader
|
||||||
|
[7]:https://www.howtoforge.com/tutorial/install-arch-linux-on-virtualbox/#boot-into-the-installed-archlinux-operating-system
|
||||||
|
[8]:https://www.howtoforge.com/tutorial/install-arch-linux-on-virtualbox/#arch-linux-repositories
|
||||||
|
[9]:https://www.howtoforge.com/tutorial/install-arch-linux-on-virtualbox/#install-arch-linux-on-virtual-box
|
||||||
|
[10]:https://www.archlinux.org/
|
||||||
|
[11]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/1212.png
|
||||||
|
[12]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/12121.png
|
||||||
|
[13]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/12122.png
|
||||||
|
[14]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/12123.png
|
||||||
|
[15]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/12124.png
|
||||||
|
[16]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/12125.png
|
||||||
|
[17]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/12126.png
|
||||||
|
[18]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/12127.png
|
||||||
|
[19]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/12128.png
|
||||||
|
[20]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/12129.png
|
||||||
|
[21]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121210.png
|
||||||
|
[22]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121211.png
|
||||||
|
[23]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121212.png
|
||||||
|
[24]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121213.png
|
||||||
|
[25]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121214.png
|
||||||
|
[26]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121215.png
|
||||||
|
[27]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121216.png
|
||||||
|
[28]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121217.png
|
||||||
|
[29]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121218.png
|
||||||
|
[30]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121219.png
|
||||||
|
[31]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121220.png
|
||||||
|
[32]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121221.png
|
||||||
|
[33]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121222.png
|
||||||
|
[34]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121223.png
|
||||||
|
[35]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121224.png
|
||||||
|
[36]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121225.png
|
||||||
|
[37]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121226.png
|
||||||
|
[38]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121227.png
|
||||||
|
[39]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121228.png
|
||||||
|
[40]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121229.png
|
||||||
|
[41]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121230.png
|
||||||
|
[42]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121231.png
|
||||||
|
[43]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/121232.png
|
||||||
|
[44]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/1.png
|
||||||
|
[45]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/11.png
|
||||||
|
[46]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/12.png
|
||||||
|
[47]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/13.png
|
||||||
|
[48]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/14.png
|
||||||
|
[49]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/15.png
|
||||||
|
[50]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/16.png
|
||||||
|
[51]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/17.png
|
||||||
|
[52]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/18.png
|
||||||
|
[53]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/19.png
|
||||||
|
[54]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/110.png
|
||||||
|
[55]:https://www.howtoforge.com/images/install_arch_linux_on_virtual_box/big/111.png
|
@ -0,0 +1,238 @@
|
|||||||
|
在 Ubuntu 上使用 SSL/TLS 搭建一个安全的 FTP 服务器
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
在本教程中,我们将介绍如何使用 Ubuntu 16.04 / 16.10 中的 SSL / TLS 保护 FTP 服务器(FTPS)。
|
||||||
|
|
||||||
|
如果你想为基于 CentOS 的发行版安装一个安全的 FTP 服务器,你可以阅读 – [在 CentOS 上使用 SSL / TLS 保护 FTP 服务器][2]。
|
||||||
|
|
||||||
|
在遵循本指南中的各个步骤之后,我们将了解在 FTP 服务器中启用加密服务的基本原理,以确保安全的数据传输至关重要。
|
||||||
|
|
||||||
|
|
||||||
|
### 要求
|
||||||
|
|
||||||
|
- 你必须已经[在 Ubuntu 上安装和配置好一个 FTP 服务器][1]
|
||||||
|
|
||||||
|
在我们进行下一步之前,确保本文中的所有命令都将以root身份或者 [sudo 特权账号][3]运行。
|
||||||
|
|
||||||
|
### 第一步:在 Ubuntu 上为 FTP 生成 SSL/TLS 证书
|
||||||
|
|
||||||
|
1、我们将首先在 `/etc/ssl/` 下创建一个子目录来存储 SSL/TLS 证书和密钥文件,如果它不存在的话这样做:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo mkdir /etc/ssl/private
|
||||||
|
```
|
||||||
|
|
||||||
|
2、 现在我们在一个单一文件中生成证书和密钥,运行下面的命令:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048
|
||||||
|
```
|
||||||
|
|
||||||
|
上面的命令将提示你回答以下问题,不要忘了输入合适于你情况的值:
|
||||||
|
|
||||||
|
```
|
||||||
|
Country Name (2 letter code) [XX]:IN
|
||||||
|
State or Province Name (full name) []:Lower Parel
|
||||||
|
Locality Name (eg, city) [Default City]:Mumbai
|
||||||
|
Organization Name (eg, company) [Default Company Ltd]:TecMint.com
|
||||||
|
Organizational Unit Name (eg, section) []:Linux and Open Source
|
||||||
|
Common Name (eg, your name or your server's hostname) []:tecmint
|
||||||
|
Email Address []:admin@tecmint.com
|
||||||
|
```
|
||||||
|
|
||||||
|
### 第二步:在 Ubuntu 上配置 vsftpd 来使用 SSL/TLS
|
||||||
|
|
||||||
|
3、在我们进行 vsftpd 配置之前,对于那些[已启用 UFW 防火墙][4]的用户,你们必须打开端口 `990` 和 `40000` - `50000`,来在 vsftpd 配置文件中分别启用 TLS 连接端口和被动端口的端口范围:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo ufw allow 990/tcp
|
||||||
|
$ sudo ufw allow 40000:50000/tcp
|
||||||
|
$ sudo ufw status
|
||||||
|
```
|
||||||
|
|
||||||
|
4、现在,打开 vsftpd 配置文件并定义 SSL 详细信息:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo vi /etc/vsftpd/vsftpd.conf
|
||||||
|
或
|
||||||
|
$ sudo nano /etc/vsftpd/vsftpd.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
然后,添加或找到选项 `ssl_enable`,并将它的值设置为 `YES` 来激活使用 SSL ,同样,因为 TLS 比 SSL 更安全,我们将通过启用 `ssl_tlsv1` 选项限制 vsftpd 只使用 TLS:
|
||||||
|
|
||||||
|
```
|
||||||
|
ssl_enable=YES
|
||||||
|
ssl_tlsv1=YES
|
||||||
|
ssl_sslv2=NO
|
||||||
|
ssl_sslv3=NO
|
||||||
|
```
|
||||||
|
|
||||||
|
5、 接下来,使用 `#` 字符注释掉下面的行,如下所示:
|
||||||
|
|
||||||
|
```
|
||||||
|
#rsa_cert_file=/etc/ssl/private/ssl-cert-snakeoil.pem
|
||||||
|
#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
|
||||||
|
```
|
||||||
|
|
||||||
|
然后,添加以下行以定义 SSL 证书和密钥文件的位置(LCTT 译注:或径直修改也可):
|
||||||
|
|
||||||
|
```
|
||||||
|
rsa_cert_file=/etc/ssl/private/vsftpd.pem
|
||||||
|
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
|
||||||
|
```
|
||||||
|
|
||||||
|
6、现在,我们也可以阻止匿名用户使用 SSL 登录,并且迫使所有的非匿名登录使用安全的 SSL 链接来传输数据和在登录期间发送密码:
|
||||||
|
|
||||||
|
```
|
||||||
|
allow_anon_ssl=NO
|
||||||
|
force_local_data_ssl=YES
|
||||||
|
force_local_logins_ssl=YES
|
||||||
|
```
|
||||||
|
|
||||||
|
7、此外,我们可以使用以下选项在 FTP 服务器中添加更多的安全功能 。对于选项 `require_ssl_reuse=YES`,它表示所有的 SSL 数据链接都需重用已经建立的 SSL 会话(需要证明客户端拥有 FTP 控制通道的主密钥),但是一些客户端不支持它,如果没有客户端问题,出于安全原因不应该关闭(默认开启)。(LCTT 译注:原文此处理解有误,译者修改。)
|
||||||
|
|
||||||
|
```
|
||||||
|
require_ssl_reuse=NO
|
||||||
|
```
|
||||||
|
|
||||||
|
此外,我们可以通过 `ssl_ciphers` 选项来设置 vsftpd 允许使用那些加密算法。 这将有助于挫败攻击者使用那些已经发现缺陷的加密算法的尝试:
|
||||||
|
|
||||||
|
```
|
||||||
|
ssl_ciphers=HIGH
|
||||||
|
```
|
||||||
|
|
||||||
|
8、 然后,我们定义被动端口的端口范围(最小和最大端口)。
|
||||||
|
|
||||||
|
```
|
||||||
|
pasv_min_port=40000
|
||||||
|
pasv_max_port=50000
|
||||||
|
```
|
||||||
|
|
||||||
|
9、 要启用 SSL 调试,把 openSSL 连接诊断记录到 vsftpd 日志文件中,我们可以使用 `debug_ssl` 选项:
|
||||||
|
|
||||||
|
```
|
||||||
|
debug_ssl=YES
|
||||||
|
```
|
||||||
|
|
||||||
|
最后,保存配置文件并且关闭它。然后重启 vsftpd 服务:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ systemctl restart vsftpd
|
||||||
|
```
|
||||||
|
|
||||||
|
### 第三步:在 Ubuntu 上使用 SSL / TLS 连接验证 FTP
|
||||||
|
|
||||||
|
10、 执行所有上述配置后,通过尝试[在命令行中使用 FTP] [5] 来测试 vsftpd 是否现在使用了 SSL / TLS 连接,如下所示。
|
||||||
|
|
||||||
|
从下面的输出来看,这里有一个错误的信息告诉我们 vsftpd 仅允许用户(非匿名用户)从支持加密服务的安全客户端登录。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ftp 192.168.56.10
|
||||||
|
Connected to 192.168.56.10 (192.168.56.10).
|
||||||
|
220 Welcome to TecMint.com FTP service.
|
||||||
|
Name (192.168.56.10:root) : ravi
|
||||||
|
530 Non-anonymous sessions must use encryption.
|
||||||
|
Login failed.
|
||||||
|
421 Service not available, remote server has closed connection
|
||||||
|
ftp>
|
||||||
|
```
|
||||||
|
|
||||||
|
该命令不支持加密服务从而导致了上述错误。因此,要安全连接到启用了加密服务的 FTP 服务器,我们需要一个默认支持 SSL/TLS 连接的 FTP 客户端,例如 FileZilla。
|
||||||
|
|
||||||
|
### 第四步:在客户端上安装FileZillaStep来安全地连接FTP
|
||||||
|
|
||||||
|
11、FileZilla 是一个强大的,广泛使用的跨平台 FTP 客户端,支持在 SSL/TLS 上的 FTP。为了在 Linux 客户端机器上安装 FileZilla,使用下面的命令。
|
||||||
|
|
||||||
|
```
|
||||||
|
--------- On Debian/Ubuntu ---------
|
||||||
|
$ sudo apt-get install filezilla
|
||||||
|
--------- On CentOS/RHEL/Fedora ---------
|
||||||
|
# yum install epel-release filezilla
|
||||||
|
--------- On Fedora 22+ ---------
|
||||||
|
$ sudo dnf install filezilla
|
||||||
|
```
|
||||||
|
|
||||||
|
12、 一旦安装完成,打开它然后点击File=>Sites Manager或者(按Ctrl+S)来获取下面的Site Manager。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][6]
|
||||||
|
|
||||||
|
*Filezilla Site Manager*
|
||||||
|
|
||||||
|
13、 现在,定义主机/站点名字,添加 IP 地址,定义使用的协议,加密和登录类型,如下面的屏幕(使用适用于你方案的值):
|
||||||
|
|
||||||
|
点击 New Site 按钮来配置一个新的站点/主机连接。
|
||||||
|
|
||||||
|
- Host: 192.168.56.10
|
||||||
|
- Protocol: FTP – File Transfer Protocol
|
||||||
|
- Encryption: Require explicit FTP over #推荐
|
||||||
|
- Logon Type: Ask for password #推荐
|
||||||
|
- User: 用户名
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][7]
|
||||||
|
|
||||||
|
*在 Filezilla 上配置新的 FTP 站点*
|
||||||
|
|
||||||
|
14、 然后从上面的界面单击连接以输入密码,然后验证用于 SSL / TLS 连接的证书,并再次单击确定以连接到 FTP 服务器:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][8]
|
||||||
|
|
||||||
|
*验证 FTP 的 SSL 证书*
|
||||||
|
|
||||||
|
15、现在,你应该通过 TLS 连接成功地登录到了 FTP 服务器,检查连接状态部分,来获取有关下面接口的更多信息。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][9]
|
||||||
|
|
||||||
|
*连接 Ubuntu 的 FTP 服务器*
|
||||||
|
|
||||||
|
16、 最后,让我们在文件夹中[从本地的机器传送文件到 FTP 服务器][10], 查看 FileZilla 界面的下端来查看有关文件传输的报告。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][11]
|
||||||
|
|
||||||
|
*使用 Filezilla 安全的传输 FTP 文件*
|
||||||
|
|
||||||
|
就这样! 始终记住,安装 FTP 服务器而不启用加密服务具有某些安全隐患。 正如我们在本教程中解释的,您可以在 Ubuntu 16.04 / 16.10 中配置 FTP 服务器使用 SSL / TLS 连接来实现安全性。
|
||||||
|
|
||||||
|
如果你在 FTP 服务器上设置 SSL/TLS 遇到任何问题,请使用以下评论表单来分享您对本教程/主题的问题或想法。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Aaron Kili 是 Linux 和 F.O.S.S 爱好者,即将成为 Linux SysAdmin 和网络开发人员,目前是 TecMint 的内容创作者,他喜欢在电脑上工作,并坚信分享知识。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/secure-ftp-server-using-ssl-tls-on-ubuntu/
|
||||||
|
|
||||||
|
作者:[Aaron Kili][a]
|
||||||
|
译者:[DockerChen](https://github.com/DockerChen)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.tecmint.com/author/aaronkili/
|
||||||
|
|
||||||
|
[1]:http://www.tecmint.com/install-ftp-server-in-ubuntu/
|
||||||
|
[2]:http://www.tecmint.com/axel-commandline-download-accelerator-for-linux/
|
||||||
|
[3]:http://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/
|
||||||
|
[4]:http://www.tecmint.com/how-to-install-and-configure-ufw-firewall/
|
||||||
|
[5]:http://www.tecmint.com/sftp-command-examples/
|
||||||
|
[6]:http://www.tecmint.com/wp-content/uploads/2017/02/Filezilla-Site-Manager.png
|
||||||
|
[7]:http://www.tecmint.com/wp-content/uploads/2017/02/Configure-New-FTP-Site-on-Filezilla.png
|
||||||
|
[8]:http://www.tecmint.com/wp-content/uploads/2017/02/Verify-FTP-SSL-Certificate-1.png
|
||||||
|
[9]:http://www.tecmint.com/wp-content/uploads/2017/02/Connected-Ubuntu-FTP-Server.png
|
||||||
|
[10]:http://www.tecmint.com/sftp-command-examples/
|
||||||
|
[11]:http://www.tecmint.com/wp-content/uploads/2017/02/Transfer-Files-Securely-using-FTP.png
|
||||||
|
[12]:http://www.tecmint.com/author/aaronkili/
|
||||||
|
[13]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
|
||||||
|
[14]:http://www.tecmint.com/free-linux-shell-scripting-books/
|
@ -1,17 +1,17 @@
|
|||||||
How to Install MariaDB 10 on Debian and Ubuntu
|
如何在 Debian 和 Ubuntu 上安装 MariaDB 10
|
||||||
============================================================
|
============================================================
|
||||||
|
|
||||||
MariaDB is a free and open source fork of the popular MySQL database management server software. It is developed under the GPLv2 (General Public License version 2) by the original developers of MySQL and is intended to remain open source.
|
MariaDB 是深受欢迎的数据库管理服务器软件 MySQL 的一个自由开源的分支。它由 MySQL 的原开发者在 GPLv2(通用公共许可证 2 版)下开发,并保持开源。
|
||||||
|
|
||||||
It is designed to achieve high compatibility with MySQL. For starters, you can read [MariaDB vs MySQL][5] features for more information and importantly, it is used by big companies/organizations such as Wikipedia, WordPress.com, Google plus and many more.
|
它被设计来实现 MySQL 的高兼容性。对于初学者,可以阅读 [MariaDB vs MySQL][5] 来了解关于它们的特性的更多信息。更重要的是,它被一些大公司/组织使用,比如 Wikipedia、WordPress.com 和 Google plus ,除此之外还有更多的。
|
||||||
|
|
||||||
In this article, we will show you how to install MariaDB 10.1 stable version in various Debian and Ubuntu distribution releases.
|
在这篇文章中,我将向你们展示如何在 Debian 和 Ubuntu 发行版中安装 MariaDB 10.1 稳定版。
|
||||||
|
|
||||||
### Install MariaDB in Debian and Ubuntu
|
### 在 Debian 和 Ubuntu 上安装 MariaDB
|
||||||
|
|
||||||
1. Before installing MariaDB, you’ll have to import the repository key and add the MariaDB repository with the following commands:
|
1、在安装之前 MariaDB 之前,你需要通过下面的命令导入仓库密匙并获取 MariaDB 仓库
|
||||||
|
|
||||||
#### On Debian 10(Sid)
|
**在 Debian 10 (Sid) 上**
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo apt-get install software-properties-common
|
$ 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'
|
$ sudo add-apt-repository 'deb [arch=amd64,i386] http://www.ftp.saix.net/DB/mariadb/repo/10.1/debian sid main'
|
||||||
```
|
```
|
||||||
|
|
||||||
#### On Debian 9 (Stretch)
|
**在 Debian 9 (Stretch) 上**
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo apt-get install software-properties-common
|
$ 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'
|
$ sudo add-apt-repository 'deb [arch=amd64] http://www.ftp.saix.net/DB/mariadb/repo/10.1/debian stretch main'
|
||||||
```
|
```
|
||||||
|
|
||||||
#### On Debian 8 (Jessie)
|
**在 Debian 8 (Jessie) 上**
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo apt-get install software-properties-common
|
$ 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'
|
$ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://www.ftp.saix.net/DB/mariadb/repo/10.1/debian jessie main'
|
||||||
```
|
```
|
||||||
|
|
||||||
#### On Debian 7 (Wheezy)
|
**在 Debian 7 (Wheezy) 上**
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo apt-get install python-software-properties
|
$ 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'
|
$ sudo add-apt-repository 'deb [arch=amd64,i386] http://www.ftp.saix.net/DB/mariadb/repo/10.1/debian wheezy main'
|
||||||
```
|
```
|
||||||
|
|
||||||
#### On Ubuntu 16.10 (Yakkety Yak)
|
**在 Ubuntu 16.10 (Yakkety Yak) 上**
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo apt-get install software-properties-common
|
$ 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'
|
$ sudo add-apt-repository 'deb [arch=amd64,i386] http://www.ftp.saix.net/DB/mariadb/repo/10.1/ubuntu yakkety main'
|
||||||
```
|
```
|
||||||
|
|
||||||
#### On Ubuntu 16.04 (Xenial Xerus)
|
**在 Ubuntu 16.04 (Xenial Xerus) 上**
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo apt-get install software-properties-common
|
$ 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'
|
$ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://www.ftp.saix.net/DB/mariadb/repo/10.1/ubuntu xenial main'
|
||||||
```
|
```
|
||||||
|
|
||||||
#### On Ubuntu 14.04 (Trusty)
|
**在 Ubuntu 14.04 (Trusty) 上**
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo apt-get install software-properties-common
|
$ sudo apt-get install software-properties-common
|
||||||
@ -67,103 +67,103 @@ $ 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'
|
$ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://www.ftp.saix.net/DB/mariadb/repo/10.1/ubuntu trusty main'
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Then update the system packages sources list, and install MariaDB server like so:
|
2、 然后,更新系统安装包列表,并像下面这样安装 MariaDB 服务器:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo apt-get update
|
$ sudo apt-get update
|
||||||
$ sudo apt-get install mariadb-server
|
$ sudo apt-get install mariadb-server
|
||||||
```
|
```
|
||||||
|
|
||||||
During the course of installation, you’ll be asked to configure the MariaDB server; set a secure root user password in the interface below.
|
安装过程中,将会请求你配置 MariaDB 服务器;在下面的页面中设置一个安全的 root 用户密码:
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][6]
|
][6]
|
||||||
|
|
||||||
Set New Root Password for MariaDB
|
*为 MariaDB 设置新的 Root 密码*
|
||||||
|
|
||||||
|
再次输入密码并按下回车键来继续安装。
|
||||||
|
|
||||||
Re-enter the password and press [Enter] to continue with the installation process.
|
|
||||||
|
|
||||||
[
|
[
|
||||||

|

|
||||||
][7]
|
][7]
|
||||||
|
|
||||||
Repeat MariaDB Password
|
*再次输入 MariaDB 密码*
|
||||||
|
|
||||||
3. When the installation of MariaDB packages completes, start the database server daemon for the mean time and enable it to start automatically at the next boot as follows:
|
当 MariaDB 安装包安装完成以后,启动数据库服务器守护进程,同时启用它,使得在下次开机时它能够像下面这样自动启动:
|
||||||
|
|
||||||
```
|
```
|
||||||
------------- On SystemD Systems -------------
|
------------- On SystemD Systems -------------
|
||||||
$ sudo systemctl start mariadb
|
$ sudo systemctl start mariadb
|
||||||
$ sudo systemctl enable mariadb
|
$ sudo systemctl enable mariadb
|
||||||
$ sudo systemctl status mariadb
|
$ sudo systemctl status mariadb
|
||||||
------------- On SysVinit Systems -------------
|
------------- On SysVinit Systems -------------
|
||||||
$ sudo service mysql start
|
$ sudo service mysql start
|
||||||
$ chkconfig --level 35 mysql on
|
$ chkconfig --level 35 mysql on
|
||||||
OR
|
OR
|
||||||
$ update-rc.d mysql defaults
|
$ update-rc.d mysql defaults
|
||||||
$ sudo service mysql status
|
$ sudo service mysql status
|
||||||
```
|
```
|
||||||
[
|
[
|
||||||

|

|
||||||
][8]
|
][8]
|
||||||
|
|
||||||
Start MariaDB Service
|
*开启 MariaDB 服务*
|
||||||
|
|
||||||
4. Then run the `mysql_secure_installation` script to secure the database where you can:
|
4、 然后,运行 `mysql_secure_installation` 脚本来保护数据库,在这儿你可以:
|
||||||
|
|
||||||
1. set root password (if not set in the configuration step above).
|
1. 设置 root 密码(如果在上面的配置环节你没有进行设置的话)。
|
||||||
2. disable remote root login
|
2. 禁止远程 root 登录
|
||||||
3. remove test database
|
3. 移除测试数据库
|
||||||
4. remove anonymous users and
|
4. 移除匿名用户
|
||||||
5. reload privileges
|
5. 重载权限配置
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo mysql_secure_installation
|
$ sudo mysql_secure_installation
|
||||||
```
|
```
|
||||||
[
|
[
|
||||||

|

|
||||||
][9]
|
][9]
|
||||||
|
|
||||||
Secure MariaDB Installation
|
*保护 MariaDB 安装*
|
||||||
|
|
||||||
5. Once the database server is secured, check it’s installed version and login to the MariaDB command shell as follows:
|
5、 一旦数据库服务器受保护以后,可以使用下面的 shell 命令查看已安装版本和登录 MariaDB:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ mysql -V
|
$ mysql -V
|
||||||
$ mysql -u root -p
|
$ mysql -u root -p
|
||||||
```
|
```
|
||||||
[
|
[
|
||||||

|

|
||||||
][10]
|
][10]
|
||||||
|
|
||||||
Check MariaDB Version
|
*查看 MariaDB 版本*
|
||||||
|
|
||||||
To start learning MySQL/MariaDB, read through:
|
开始学习 MySQL/MariaDB, 请阅读:
|
||||||
|
|
||||||
1. [Learn MySQL / MariaDB for Beginners – Part 1][1]
|
1. [MySQL / MariaDB 初学者学习指南 — Part 1][1]
|
||||||
2. [Learn MySQL / MariaDB for Beginners – Part 2][2]
|
2. [MySQL / MariaDB 初学者学习指南 — Part 2][2]
|
||||||
3. [MySQL Basic Database Administration Commands – Part III][3]
|
3. [MySQL 基本数据库管理命令 — Part III][3]
|
||||||
4. [20 MySQL (Mysqladmin) Commands for Database Administration – Part IV][4]
|
4. [针对数据库管理员的 20 个 MySQL (Mysqladmin) 命令 — Part IV][4]
|
||||||
|
|
||||||
And check out these 4 useful commandline tools to [monitor MySQL/MariaDB performance][11] in Linux and also go through these [15 useful MySQL/MariaDB performance tuning and optimization tips][12].
|
查看在 Linux 中[监控 MySQL/MariaDB 性能][11]的四个有用的命令行工具,同时浏览 [15 个有用的 MySQL/MariaDB 性能调整和优化技巧][12]。
|
||||||
|
|
||||||
That’s all. In this article, we showed you how to install MariaDB 10.1 stable version in various Debian and Ubuntu releases. You can send us any questions/thoughts via the comment form below.
|
这就是本文的全部内容了。在这篇文章中,我向你们展示了如何在 Debian 和 Ubuntu 的不同发行版中安装 MariaDB 10.1 稳定版。你可以通过下面的评论框给我们提任何问题或者想法。
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
作者简介:
|
作者简介:
|
||||||
|
|
||||||
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/install-mariadb-in-ubuntu-and-debian/
|
via: http://www.tecmint.com/install-mariadb-in-ubuntu-and-debian/
|
||||||
|
|
||||||
作者:[Aaron Kili][a]
|
作者:[Aaron Kili][a]
|
||||||
译者:[译者ID](https://github.com/译者ID)
|
译者:[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/) 荣誉推出
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
@ -0,0 +1,139 @@
|
|||||||
|
如何在 Amazon AWS 上设置一台 Linux 服务器
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
AWS(Amazon Web Services)是全球领先的云服务器提供商之一。你可以使用 AWS 平台在一分钟内设置完服务器。在 AWS 上,你可以微调服务器的许多技术细节,如 CPU 数量,内存和磁盘空间,磁盘类型(更快的 SSD 或者经典的 IDE)等。关于 AWS 最好的一点是,你只需要为你使用到的服务付费。在开始之前,AWS 提供了一个名为 “Free Tier” 的特殊帐户,你可以免费使用一年的 AWS 技术服务,但会有一些小限制,例如,你每个月使用服务器时长不能超过 750 小时,超过这个他们就会向你收费。你可以在 [aws 官网][3]上查看所有相关的规则。
|
||||||
|
|
||||||
|
因为我的这篇文章是关于在 AWS 上创建 Linux 服务器,因此拥有 “Free Tier” 帐户是先决条件。要注册帐户,你可以使用此[链接][4]。请注意,你需要在创建帐户时输入信用卡详细信息。
|
||||||
|
|
||||||
|
让我们假设你已经创建了 “Free Tier” 帐户。
|
||||||
|
|
||||||
|
在继续之前,你必须了解 AWS 中的一些术语以了解设置:
|
||||||
|
|
||||||
|
1. EC2(弹性计算云):此术语用于虚拟机。
|
||||||
|
2. AMI(Amazon 机器镜像):表示操作系统实例。
|
||||||
|
3. EBS(弹性块存储):AWS 中的一种存储环境类型。
|
||||||
|
|
||||||
|
通过以下链接登录 AWS 控制台:[https://console.aws.amazon.com/][5] 。
|
||||||
|
|
||||||
|
AWS 控制台将如下所示:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][6]
|
||||||
|
|
||||||
|
### 在 AWS 中设置 Linux VM
|
||||||
|
|
||||||
|
1、 创建一个 EC2(虚拟机)实例:在开始安装系统之前,你必须在 AWS 中创建一台虚拟机。要创建虚拟机,在“<ruby>计算<rt>compute</rt></ruby>”菜单下点击 EC2:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][7]
|
||||||
|
|
||||||
|
2、 现在在<ruby>创建实例<rt>Create instance</rt></ruby>下点击<ruby>“启动实例”<rt>Launch Instance</rt></ruby>按钮。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][8]
|
||||||
|
|
||||||
|
3、 现在,当你使用的是一个 “Free Tier” 帐号,接着最好选择 “Free Tier” 单选按钮以便 AWS 可以过滤出可以免费使用的实例。这可以让你不用为使用 AWS 的资源而付费。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][9]
|
||||||
|
|
||||||
|
4、 要继续操作,请选择以下选项:
|
||||||
|
|
||||||
|
a、 在经典实例向导中选择一个 AMI(Amazon Machine Image),然后选择使用 **Red Hat Enterprise Linux 7.2(HVM),SSD 存储**
|
||||||
|
|
||||||
|
b、 选择 “**t2.micro**” 作为实例详细信息。
|
||||||
|
|
||||||
|
c、 **配置实例详细信息**:不要更改任何内容,只需单击下一步。
|
||||||
|
|
||||||
|
d、 **添加存储**:不要更改任何内容,只需点击下一步,因为此时我们将使用默认的 10(GiB)硬盘。
|
||||||
|
|
||||||
|
e、 **添加标签**:不要更改任何内容只需点击下一步。
|
||||||
|
|
||||||
|
f、 **配置安全组**:现在选择用于 ssh 的 22 端口,以便你可以在任何地方访问此服务器。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][10]
|
||||||
|
|
||||||
|
g、 选择“<ruby>查看并启动<rt>Review and Launch</rt></ruby>”按钮。
|
||||||
|
|
||||||
|
h、 如果所有的详情都无误,点击 “<ruby>启动<rt>Launch</rt></ruby>”按钮。
|
||||||
|
|
||||||
|
i、 单击“<ruby>启动<rt>Launch</rt></ruby>”按钮后,系统会像下面那样弹出一个窗口以创建“密钥对”:选择选项“<ruby>创建密钥对<rt>create a new key pair</rt></ruby>”,并给密钥对起个名字,然后下载下来。在使用 ssh 连接到服务器时,需要此密钥对。最后,单击“<ruby>启动实例<rt>Launch Instance</rt></ruby>”按钮。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][11]
|
||||||
|
|
||||||
|
j、 点击“<ruby>启动实例<rt>Launch Instance</rt></ruby>”按钮后,转到左上角的服务。选择“<ruby>计算<rt>compute</rt></ruby>”--> “EC2”。现在点击“<ruby>运行实例<rt>Running Instances</rt></ruby>”:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][12]
|
||||||
|
|
||||||
|
k、 现在你可以看到,你的新 VM 的状态是 “<ruby>运行中<rt>running</rt></ruby>”。选择实例,请记下登录到服务器所需的 “<ruby>公开 DNS 名称<rt>Public DNS</rt></ruby>”。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][13]
|
||||||
|
|
||||||
|
现在你已完成创建一台运行 Linux 的 VM。要连接到服务器,请按照以下步骤操作。
|
||||||
|
|
||||||
|
### 从 Windows 中连接到 EC2 实例
|
||||||
|
|
||||||
|
1、 首先,你需要有 putty gen 和 Putty exe 用于从 Windows 连接到服务器(或 Linux 上的 SSH 命令)。你可以通过下面的[链接][14]下载 putty。
|
||||||
|
|
||||||
|
2、 现在打开 putty gen :`puttygen.exe`。
|
||||||
|
|
||||||
|
3、 你需要单击 “Load” 按钮,浏览并选择你从亚马逊上面下载的密钥对文件(pem 文件)。
|
||||||
|
|
||||||
|
4、 你需要选择 “ssh2-RSA” 选项,然后单击保存私钥按钮。请在下一个弹出窗口中选择 “yes”。
|
||||||
|
|
||||||
|
5、 将文件以扩展名 `.ppk` 保存。
|
||||||
|
|
||||||
|
6、 现在你需要打开 `putty.exe`。在左侧菜单中点击 “connect”,然后选择 “SSH”,然后选择 “Auth”。你需要单击浏览按钮来选择我们在步骤 4 中创建的 .ppk 文件。
|
||||||
|
|
||||||
|
7、 现在点击 “session” 菜单,并在“host name” 中粘贴在本教程中 “k” 步骤中的 DNS 值,然后点击 “open” 按钮。
|
||||||
|
|
||||||
|
8、 在要求用户名和密码时,输入 `ec2-user` 和空白密码,然后输入下面的命令。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo su -
|
||||||
|
```
|
||||||
|
|
||||||
|
哈哈,你现在是在 AWS 云上托管的 Linux 服务器上的主人啦。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][15]
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: https://www.howtoforge.com/tutorial/how-to-setup-linux-server-with-aws/
|
||||||
|
|
||||||
|
作者:[MANMOHAN MIRKAR][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://www.howtoforge.com/tutorial/how-to-setup-linux-server-with-aws/
|
||||||
|
[1]:https://www.howtoforge.com/tutorial/how-to-setup-linux-server-with-aws/#setup-a-linux-vm-in-aws
|
||||||
|
[2]:https://www.howtoforge.com/tutorial/how-to-setup-linux-server-with-aws/#connect-to-an-ec-instance-from-windows
|
||||||
|
[3]:http://aws.amazon.com/free/
|
||||||
|
[4]:http://aws.amazon.com/ec2/
|
||||||
|
[5]:https://console.aws.amazon.com/
|
||||||
|
[6]:https://www.howtoforge.com/images/how_to_setup_linux_server_with_aws/big/aws_console.JPG
|
||||||
|
[7]:https://www.howtoforge.com/images/how_to_setup_linux_server_with_aws/big/aws_console_ec21.png
|
||||||
|
[8]:https://www.howtoforge.com/images/how_to_setup_linux_server_with_aws/big/aws_launch_ec2.png
|
||||||
|
[9]:https://www.howtoforge.com/images/how_to_setup_linux_server_with_aws/big/aws_free_tier_radio1.png
|
||||||
|
[10]:https://www.howtoforge.com/images/how_to_setup_linux_server_with_aws/big/aws_ssh_port1.png
|
||||||
|
[11]:https://www.howtoforge.com/images/how_to_setup_linux_server_with_aws/big/aws_key_pair.png
|
||||||
|
[12]:https://www.howtoforge.com/images/how_to_setup_linux_server_with_aws/big/aws_running_instance.png
|
||||||
|
[13]:https://www.howtoforge.com/images/how_to_setup_linux_server_with_aws/big/aws_dns_value.png
|
||||||
|
[14]:http://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
|
||||||
|
[15]:https://www.howtoforge.com/images/how_to_setup_linux_server_with_aws/big/aws_putty1.JPG
|
@ -0,0 +1,150 @@
|
|||||||
|
如何在 CentOS 7 上安装和安全配置 MariaDB 10
|
||||||
|
===========================================
|
||||||
|
|
||||||
|
**MariaDB** 是 MySQL 数据库的自由开源分支,与 MySQL 在设计思想上同出一源,在未来仍将是自由且开源的。
|
||||||
|
|
||||||
|
在这篇博文中,我将会介绍如何在当前使用最广的 RHEL/CentOS 和 Fedora 发行版上安装 **MariaDB 10.1** 稳定版。
|
||||||
|
|
||||||
|
目前了解到的情况是:Red Hat Enterprise Linux/CentOS 7.0 发行版已将默认的数据库从 MySQL 切换到 MariaDB。
|
||||||
|
|
||||||
|
在本文中需要注意的是,我们假定您能够在服务器中使用 root 帐号工作,或者可以使用 [sudo][7] 命令运行任何命令。
|
||||||
|
|
||||||
|
### 第一步:添加 MariaDB yum 仓库
|
||||||
|
|
||||||
|
1、首先在 RHEL/CentOS 和 Fedora 操作系统中添加 MariaDB 的 YUM 配置文件 `MariaDB.repo` 文件。
|
||||||
|
|
||||||
|
```
|
||||||
|
# vi /etc/yum.repos.d/MariaDB.repo
|
||||||
|
```
|
||||||
|
|
||||||
|
根据您操作系统版本,选择下面的相应内容添加到文件的末尾。
|
||||||
|
|
||||||
|
#### 在 CentOS 7 中安装
|
||||||
|
|
||||||
|
```
|
||||||
|
[mariadb]
|
||||||
|
name = MariaDB
|
||||||
|
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
|
||||||
|
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
|
||||||
|
gpgcheck=1
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 在 RHEL 7 中安装
|
||||||
|
|
||||||
|
```
|
||||||
|
[mariadb]
|
||||||
|
name = MariaDB
|
||||||
|
baseurl = http://yum.mariadb.org/10.1/rhel7-amd64
|
||||||
|
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
|
||||||
|
gpgcheck=1
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][8]
|
||||||
|
|
||||||
|
*添加 MariaDB YUM 仓库*
|
||||||
|
|
||||||
|
### 第二步:在 CentOS 7 中安装 MariaDB
|
||||||
|
|
||||||
|
2、当 MariaDB 仓库地址添加好后,你可以通过下面的一行命令轻松安装 MariaDB。
|
||||||
|
|
||||||
|
```
|
||||||
|
# yum install MariaDB-server MariaDB-client -y
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][9]
|
||||||
|
|
||||||
|
*在 CentOS 7 中安装 MariaDB*
|
||||||
|
|
||||||
|
3、 MariaDB 包安装完毕后,立即启动数据库服务守护进程,并可以通过下面的操作设置,在操作系统重启后自动启动服务。
|
||||||
|
|
||||||
|
```
|
||||||
|
# systemctl start mariadb
|
||||||
|
# systemctl enable mariadb
|
||||||
|
# systemctl status mariadb
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][10]
|
||||||
|
|
||||||
|
*在 CentOS 7 中启动 MariaDB 服务*
|
||||||
|
|
||||||
|
### 第三步:在 CentOS 7 中对 MariaDB 进行安全配置
|
||||||
|
|
||||||
|
4、 现在可以通过以下操作进行安全配置:设置 MariaDB 的 root 账户密码,禁用 root 远程登录,删除测试数据库以及测试帐号,最后需要使用下面的命令重新加载权限。
|
||||||
|
|
||||||
|
```
|
||||||
|
# mysql_secure_installation
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][11]
|
||||||
|
|
||||||
|
*CentOS 7 中的 MySQL 安全配置*
|
||||||
|
|
||||||
|
5、 在配置完数据库的安全配置后,你可能想检查下 MariaDB 的特性,比如:版本号、默认参数列表、以及通过 MariaDB 命令行登录。如下所示:
|
||||||
|
|
||||||
|
```
|
||||||
|
# mysql -V
|
||||||
|
# mysqld --print-defaults
|
||||||
|
# mysql -u root -p
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][12]
|
||||||
|
|
||||||
|
*检查 MySQL 版本信息*
|
||||||
|
|
||||||
|
### 第四步:学习 MariaDB 管理
|
||||||
|
|
||||||
|
如果你刚开始学习使用 MySQL/MariaDB,可以通过以下指南学习:
|
||||||
|
|
||||||
|
1. [新手学习 MySQL / MariaDB(一)][1]
|
||||||
|
2. [新手学习 MySQL / MariaDB(二)][2]
|
||||||
|
3. [MySQL 数据库基础管理命令(三)][3]
|
||||||
|
4. [20 MySQL 管理命令 Mysqladmin(四)][4]
|
||||||
|
|
||||||
|
同样查看下面的文档学习如何优化你的 MySQL/MariaDB 服务,并使用工具监控数据库的活动情况。
|
||||||
|
|
||||||
|
1. [15 个 MySQL/MariaDB 调优技巧][5]
|
||||||
|
2. [4 监控 MySQL/MariaDB 数据库的工具][6]
|
||||||
|
|
||||||
|
文章到此就结束了,本文内容比较浅显,文中主要展示了如何在 RHEL/CentOS 和 Fefora 操作系统中安装 **MariaDB 10.1** 稳定版。您可以通过下面的联系方式将您遇到的任何问题或者想法发给我们。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
Aaron Kill 是 Linux 和开源软件的狂热爱好者,即将成为一名 Linux 系统管理员和网站开发工程师,现在是 TecMint 的原创作者,喜欢使用电脑工作并且热衷分享知识。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/install-mariadb-in-centos-7/
|
||||||
|
|
||||||
|
作者:[Aaron Kili][a]
|
||||||
|
译者:[beyondworld](https://github.com/beyondworld)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.tecmint.com/author/aaronkili/
|
||||||
|
|
||||||
|
[1]:http://www.tecmint.com/learn-mysql-mariadb-for-beginners/
|
||||||
|
[2]:http://www.tecmint.com/learn-mysql-mariadb-advance-functions-sql-queries/
|
||||||
|
[3]:http://www.tecmint.com/gliding-through-database-mysql-in-a-nutshell-part-i/
|
||||||
|
[4]:http://www.tecmint.com/mysqladmin-commands-for-database-administration-in-linux/
|
||||||
|
[5]:http://www.tecmint.com/mysql-mariadb-performance-tuning-and-optimization/
|
||||||
|
[6]:http://www.tecmint.com/mysql-performance-monitoring/
|
||||||
|
[7]:http://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/
|
||||||
|
[8]:http://www.tecmint.com/wp-content/uploads/2017/02/Add-MariaDB-Repo.png
|
||||||
|
[9]:http://www.tecmint.com/wp-content/uploads/2017/02/Install-MariaDB-in-CentOS-7.png
|
||||||
|
[10]:http://www.tecmint.com/wp-content/uploads/2017/02/Start-MariaDB-Service-in-CentOS-7.png
|
||||||
|
[11]:http://www.tecmint.com/wp-content/uploads/2017/02/Secure-MySQL-in-CentOS-7.png
|
||||||
|
[12]:http://www.tecmint.com/wp-content/uploads/2017/02/Verify-MySQL-Version.png
|
||||||
|
[13]:http://www.tecmint.com/author/aaronkili/
|
||||||
|
[14]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
|
||||||
|
[15]:http://www.tecmint.com/free-linux-shell-scripting-books/
|
@ -0,0 +1,173 @@
|
|||||||
|
如何在 CentOS 7 中安装或升级最新的内核
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
虽然有些人使用 Linux 来表示整个操作系统,但要注意的是,严格地来说,Linux 只是个内核。另一方面,发行版是一个完整功能的系统,它建立在内核之上,具有各种各样的应用程序工具和库。
|
||||||
|
|
||||||
|
在正常操作期间,内核负责执行两个重要任务:
|
||||||
|
|
||||||
|
1. 作为硬件和系统上运行的软件之间的接口。
|
||||||
|
2. 尽可能高效地管理系统资源。
|
||||||
|
|
||||||
|
为此,内核通过内置的驱动程序或以后可作为模块安装的驱动程序与硬件通信。
|
||||||
|
|
||||||
|
例如,当你计算机上运行的程序想要连接到无线网络时,它会将该请求提交给内核,后者又会使用正确的驱动程序连接到网络。
|
||||||
|
|
||||||
|
- **建议阅读:** [如何在 Ubuntu 中升级内核][1]
|
||||||
|
|
||||||
|
随着新的设备和技术定期出来,如果我们想充分利用它们,保持最新的内核就很重要。此外,更新内核将帮助我们利用新的内核函数,并保护自己免受先前版本中发现的漏洞的攻击。
|
||||||
|
|
||||||
|
准备好了在 CentOS 7 或其衍生产品(如 RHEL 7和 Fedora)上更新内核了么?如果是这样,请继续阅读!
|
||||||
|
|
||||||
|
### 步骤 1:检查已安装的内核版本
|
||||||
|
|
||||||
|
让我们安装了一个发行版,它包含了一个特定版本的内核。为了展示当前系统中已安装的版本,我们可以:
|
||||||
|
|
||||||
|
```
|
||||||
|
# uname -sr
|
||||||
|
```
|
||||||
|
|
||||||
|
下面的图片展示了在一台 CentOS 7 服务器上的输出信息:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][2]
|
||||||
|
|
||||||
|
*在 CentOS 7 上检查内核版本*
|
||||||
|
|
||||||
|
如果我们现在进入 [https://www.kernel.org/][3],在撰写本文时,我们看到最新的内核版本是4.10.1(其他版本可以从同一网站获得)。
|
||||||
|
|
||||||
|
还要考虑的一个重要的事情是内核版本的生命周期 - 如果你当前使用的版本接近它的生命周期结束,那么在该日期后将不会提供更多的 bug 修复。关于更多信息,请参阅[内核发布][4]页。
|
||||||
|
|
||||||
|
### 步骤 2:在 CentOS 7 中升级内核
|
||||||
|
|
||||||
|
大多数现代发行版提供了一种使用 [yum 等包管理系统][5]和官方支持的仓库升级内核的方法。
|
||||||
|
|
||||||
|
但是,这只会升级内核到仓库中可用的最新版本 - 而不是在 [https://www.kernel.org/][6] 中可用的最新版本。不幸的是,Red Hat 只允许使用前者升级内核。
|
||||||
|
|
||||||
|
与 Red Hat 不同,CentOS 允许使用 ELRepo,这是一个第三方仓库,可以将内核升级到最新版本。
|
||||||
|
|
||||||
|
要在 CentOS 7 上启用 ELRepo 仓库,请运行:
|
||||||
|
|
||||||
|
```
|
||||||
|
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
|
||||||
|
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][7]
|
||||||
|
|
||||||
|
*在 CentOS 7 启用 ELRepo*
|
||||||
|
|
||||||
|
仓库启用后,你可以使用下面的命令列出可用的内核相关包:
|
||||||
|
|
||||||
|
```
|
||||||
|
# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][8]
|
||||||
|
|
||||||
|
*yum - 找出可用的内核版本*
|
||||||
|
|
||||||
|
接下来,安装最新的主线稳定内核:
|
||||||
|
|
||||||
|
```
|
||||||
|
# yum --enablerepo=elrepo-kernel install kernel-ml
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][9]
|
||||||
|
|
||||||
|
*在 CentOS 7 中安装最新的内核版本*
|
||||||
|
|
||||||
|
最后,重启机器并应用最新内核,接着运行下面的命令检查最新内核版本:
|
||||||
|
|
||||||
|
```
|
||||||
|
uname -sr
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][10]
|
||||||
|
|
||||||
|
*验证内核版本*
|
||||||
|
|
||||||
|
### 步骤 3:设置 GRUB 默认的内核版本
|
||||||
|
|
||||||
|
为了让新安装的内核成为默认启动选项,你需要如下修改 GRUB 配置:
|
||||||
|
|
||||||
|
打开并编辑 `/etc/default/grub` 并设置 `GRUB_DEFAULT=0`。意思是 GRUB 初始化页面的第一个内核将作为默认内核。
|
||||||
|
|
||||||
|
```
|
||||||
|
GRUB_TIMEOUT=5
|
||||||
|
GRUB_DEFAULT=0
|
||||||
|
GRUB_DISABLE_SUBMENU=true
|
||||||
|
GRUB_TERMINAL_OUTPUT="console"
|
||||||
|
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet"
|
||||||
|
GRUB_DISABLE_RECOVERY="true"
|
||||||
|
```
|
||||||
|
|
||||||
|
接下来运行下面的命令来重新创建内核配置。
|
||||||
|
|
||||||
|
```
|
||||||
|
# grub2-mkconfig -o /boot/grub2/grub.cfg
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][11]
|
||||||
|
|
||||||
|
*在 GRUB 中设置内核*
|
||||||
|
|
||||||
|
重启并验证最新的内核已作为默认内核。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][12]
|
||||||
|
|
||||||
|
在 CentOS 7 中启动默认内核版本
|
||||||
|
|
||||||
|
恭喜你!你已经在 CentOS 7 中升级内核了!
|
||||||
|
|
||||||
|
##### 总结
|
||||||
|
|
||||||
|
在本文中,我们解释了如何轻松升级系统上的 Linux 内核。我们还没讲到另外一个方法,因为它涉及从源代码编译内核,这可以写成一本书,并且不推荐在生产系统上这么做。
|
||||||
|
|
||||||
|
虽然它是最好的学习体验之一,并且允许细粒度配置内核,但是你可能会让你的系统不可用,并且可能必须从头重新安装它。
|
||||||
|
|
||||||
|
如果你仍然有兴趣构建内核作为学习经验,你可以在 [Kernel Newbies][13]页面中获得指导。
|
||||||
|
|
||||||
|
一如既往,如果你对本文有任何问题或意见,请随时使用下面的评论栏。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
我是一个计算机上瘾的家伙,并且是开源和 Linux 系统软件的粉丝,有大约 4 年的 Linux 发行版桌面、服务器和 bash 脚本的经验。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/install-upgrade-kernel-version-in-centos-7/
|
||||||
|
|
||||||
|
作者:[Matei Cezar][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.tecmint.com/author/cezarmatei/
|
||||||
|
|
||||||
|
[1]:https://linux.cn/article-8284-1.html
|
||||||
|
[2]:http://www.tecmint.com/wp-content/uploads/2017/03/Check-Kernel-Version-in-CentOS-7.png
|
||||||
|
[3]:https://www.kernel.org/
|
||||||
|
[4]:https://www.kernel.org/category/releases.html
|
||||||
|
[5]:http://www.tecmint.com/20-linux-yum-yellowdog-updater-modified-commands-for-package-mangement/
|
||||||
|
[6]:https://www.kernel.org/
|
||||||
|
[7]:http://www.tecmint.com/wp-content/uploads/2017/03/Enable-ELRepo-in-CentOS-7.png
|
||||||
|
[8]:http://www.tecmint.com/wp-content/uploads/2017/03/Yum-Find-Available-Kernel-Versions.png
|
||||||
|
[9]:http://www.tecmint.com/wp-content/uploads/2017/03/Install-Latest-Kernel-Version-in-CentOS-7.png
|
||||||
|
[10]:http://www.tecmint.com/wp-content/uploads/2017/03/Verify-Kernel-Version.png
|
||||||
|
[11]:http://www.tecmint.com/wp-content/uploads/2017/03/Set-Kernel-in-GRUB.png
|
||||||
|
[12]:http://www.tecmint.com/wp-content/uploads/2017/03/Booting-Default-Kernel-Version.png
|
||||||
|
[13]:https://kernelnewbies.org/KernelBuild
|
||||||
|
[14]:http://www.tecmint.com/author/gacanepa/
|
||||||
|
[15]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
|
||||||
|
[16]:http://www.tecmint.com/free-linux-shell-scripting-books/
|
@ -0,0 +1,163 @@
|
|||||||
|
Linux 中 7 个判断文件系统类型的方法
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
文件通过文件系统在磁盘及分区上命名、存储、检索以及更新,文件系统是在磁盘上组织文件的方式。
|
||||||
|
|
||||||
|
文件系统分为两个部分:用户数据和元数据(文件名、创建时间、修改时间、大小以及目录层次结构中的位置等)。
|
||||||
|
|
||||||
|
在本指南中,我们将用 7 种方法来识别你的 Linux 文件系统类型,如 Ext2、Ext3、Ext4、BtrFS、GlusterFS 等等。
|
||||||
|
|
||||||
|
### 1、 使用 df 命令
|
||||||
|
|
||||||
|
`df` 命令报告文件系统磁盘空间利用率,要显示特定的磁盘分区的文件系统类型,像下面那样使用 `-T` 标志:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ df -Th
|
||||||
|
或者
|
||||||
|
$ df -Th | grep "^/dev"
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][3]
|
||||||
|
|
||||||
|
*df 命令 – 找出文件系统类型*
|
||||||
|
|
||||||
|
要更好理解 `df` 命令,阅读下面的文章:
|
||||||
|
|
||||||
|
1. [12 个有用的 df 命令来检查 Linux 中的磁盘空间][1]
|
||||||
|
2. [Pydf - 一个替代 df 的命令,用颜色显示磁盘使用率][2]
|
||||||
|
|
||||||
|
### 2、 使用 fsck 命令
|
||||||
|
|
||||||
|
`fsck` 用来检查以及[修复 Linux 文件系统][4],它也可以输出[指定磁盘分区的文件系统类型][5]。
|
||||||
|
|
||||||
|
`-N` 标志禁用检查文件系统错误,它只是显示会做什么(但是我们只需要文件系统类型):
|
||||||
|
|
||||||
|
```
|
||||||
|
$ fsck -N /dev/sda3
|
||||||
|
$ fsck -N /dev/sdb1
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][6]
|
||||||
|
|
||||||
|
*fsck – 打印 Linux 文件系统类型*
|
||||||
|
|
||||||
|
### 3、 使用 lsblk 命令
|
||||||
|
|
||||||
|
`lsblk` 会显示块设备,当使用 `-f` 选项时,它也会打印分区的文件系统类型:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ lsblk -f
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][7]
|
||||||
|
|
||||||
|
*lsblk – 显示 Linux 文件系统类型*
|
||||||
|
|
||||||
|
### 4、 使用 mount 命令
|
||||||
|
|
||||||
|
`mount` 命令用来[在 Linux 中挂载文件系统][8],它也可以用来[挂载一个 ISO 镜像][9],[挂载远程 Linux 文件系统][10]等等。
|
||||||
|
|
||||||
|
当不带任何参数运行时,它会打印包含文件系统类型在内的[磁盘分区的信息][11]:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ mount | grep "^/dev"
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][12]
|
||||||
|
|
||||||
|
*Mount – 在 Linux 中显示文件系统类型*
|
||||||
|
|
||||||
|
### 5、 使用 blkid 命令
|
||||||
|
|
||||||
|
`blkid` 命令用来[找出或打印块设备属性][13],只要将磁盘分区作为参数就行了:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ blkid /dev/sda3
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][14]
|
||||||
|
|
||||||
|
*blkid – 找出文件系统类型*
|
||||||
|
|
||||||
|
### 6、 使用 file 命令
|
||||||
|
|
||||||
|
`file` 命令会识别文件类型,使用 `-s` 标志启用读取块设备或字符设备,`-L` 启用符号链接跟随:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo file -sL /dev/sda3
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][15]
|
||||||
|
|
||||||
|
*file – 识别文件系统类型*
|
||||||
|
|
||||||
|
### 7、 使用 fstab 文件
|
||||||
|
|
||||||
|
`/etc/fstab` 是一个静态文件系统信息(比如挂载点、文件系统类型、挂载选项等等)文件:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ cat /etc/fstab
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][16]
|
||||||
|
|
||||||
|
*fstab – 显示 Linux 文件系统类型*
|
||||||
|
|
||||||
|
就是这样了!在这篇指南中,我们用 7 种方法来识别你的 Linux 文件系统类型。你还知道这里没有提到的其他方法么?在评论中与我们分享。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Aaron Kili是一名 Linux 和 F.O.S.S 的爱好者,未来的 Linux 系统管理员、网站开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并乐于分享知识。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/find-linux-filesystem-type/
|
||||||
|
|
||||||
|
作者:[Aaron Kili][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/aaronkili/
|
||||||
|
|
||||||
|
[1]:http://www.tecmint.com/how-to-check-disk-space-in-linux/
|
||||||
|
[2]:http://www.tecmint.com/pyd-command-to-check-disk-usage/
|
||||||
|
[3]:http://www.tecmint.com/wp-content/uploads/2017/03/Find-Filesystem-Type-Using-df-Command.png
|
||||||
|
[4]:http://www.tecmint.com/defragment-linux-system-partitions-and-directories/
|
||||||
|
[5]:http://www.tecmint.com/manage-file-types-and-set-system-time-in-linux/
|
||||||
|
[6]:http://www.tecmint.com/wp-content/uploads/2017/03/fsck-Print-Linux-Filesystem-Type.png
|
||||||
|
[7]:http://www.tecmint.com/wp-content/uploads/2017/03/lsblk-Shows-Linux-Filesystem-Type.png
|
||||||
|
[8]:http://www.tecmint.com/sshfs-mount-remote-linux-filesystem-directory-using-ssh/
|
||||||
|
[9]:http://www.tecmint.com/extract-files-from-iso-files-linux/
|
||||||
|
[10]:http://www.tecmint.com/sshfs-mount-remote-linux-filesystem-directory-using-ssh/
|
||||||
|
[11]:http://www.tecmint.com/linux-tools-to-monitor-disk-partition-usage/
|
||||||
|
[12]:http://www.tecmint.com/wp-content/uploads/2017/03/Mount-Show-Filesystem-Type.png
|
||||||
|
[13]:http://www.tecmint.com/find-usb-device-name-in-linux/
|
||||||
|
[14]:http://www.tecmint.com/wp-content/uploads/2017/03/blkid-Find-Filesystem-Type.png
|
||||||
|
[15]:http://www.tecmint.com/wp-content/uploads/2017/03/file-command-identifies-filesystem-type.png
|
||||||
|
[16]:http://www.tecmint.com/wp-content/uploads/2017/03/fstab-shows-filesystem-types.png
|
||||||
|
[17]:http://www.tecmint.com/find-linux-filesystem-type/#
|
||||||
|
[18]:http://www.tecmint.com/find-linux-filesystem-type/#
|
||||||
|
[19]:http://www.tecmint.com/find-linux-filesystem-type/#
|
||||||
|
[20]:http://www.tecmint.com/find-linux-filesystem-type/#
|
||||||
|
[21]:http://www.tecmint.com/find-linux-filesystem-type/#comments
|
||||||
|
[22]:http://www.tecmint.com/author/aaronkili/
|
||||||
|
[23]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
|
||||||
|
[24]:http://www.tecmint.com/free-linux-shell-scripting-books/
|
@ -0,0 +1,92 @@
|
|||||||
|
如何在 Ubuntu 中升级到最新内核
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
每过段时间,就有新的设备和技术出来,因此如果我们想要充分利用它,保持最新的 Linux 内核就显得很重要。此外,更新系统内核将使我们能够利用新的内核优化,并且它还可以帮助我们避免在早期版本中发现的漏洞。
|
||||||
|
|
||||||
|
**建议阅读:** [如何升级 CentOS 7内核][1]
|
||||||
|
|
||||||
|
准备好了在 Ubuntu 16.04 或其衍生版本(如 Debian 和 Linux Mint)中更新你的内核了么?如果准备好了,请你继续阅读!
|
||||||
|
|
||||||
|
### 第一步:检查安装的内核版本
|
||||||
|
|
||||||
|
要发现当前系统安装的版本,我们可以:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ uname -sr
|
||||||
|
```
|
||||||
|
|
||||||
|
下面的截图显示了在 Ubuntu 16.04 server 中上面命令的输出:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][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/
|
65
published/201703/20170307 How to make release notes count.md
Normal file
65
published/201703/20170307 How to make release notes count.md
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
如何写出绝佳的发行说明
|
||||||
|
============================================================
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*图像来源: opensource.com*
|
||||||
|
|
||||||
|
恭喜你!你已经准备发布你的软件包的最新版本了。现在,你需要保证你的发行说明整洁有序。当然,你可以写上一句“bug 修复以及性能改进”然后就算完成,但这并不能给你的用户传达任何信息。
|
||||||
|
|
||||||
|
发行说明同时用于支持和营销。它可以告诉你的的用户,为什么这个发布版本对他们很重要,并可以向潜在用户展示你的软件。所以,你会希望它的内容简洁、易懂,最重要的是:目的明确。写发行说明的方式不止一种,所以本文只是一般提议,并不是一个强制要求。
|
||||||
|
|
||||||
|
现在一个流行的趋势,是将发行说明写成包含一堆蠢事的叙事文。如果你想这么写,那请自便 —— 不过要记住,笑话通常是上下文相关的,你觉得很滑稽的内容,可能在你的读者眼里会变得索然无味。而且,不要忘了将那些重要信息写进来。
|
||||||
|
|
||||||
|
### 入门
|
||||||
|
|
||||||
|
你能从本文里学到的最主要的经验,可能就是这一条:你的发行说明要写给读它的人看。对于面向用户的软件,发行说明中要注重面向用户的行为,而不是软件的内部实现。举个例子:写“点击‘取消’按钮会把你的电脑点着”,而不要写“在 cancelThatThing 函数中,thermalEventTrigger 的默认值被设为 True”。
|
||||||
|
|
||||||
|
尝试将每一条说明限制在一到两句话。重点在于突出强调重要部分,而不是给出详尽的解释。如果你有一个公开的问题追踪页面,你可以在说明中包含问题链接(或者问题编号),这样关注此问题的读者可以通过链接来查看问题的详细内容。
|
||||||
|
|
||||||
|
你并不需要严格按照这种方法来写发行说明,但我比较喜欢下面的格式。开头写上版本号,以及发布日期。对于主要版本,你可能要再写几句话,来突出本次发布的主题。比如,“本次发布的重点在于添加了邮件客户端,因为这是所有软件的最终结束状态。”
|
||||||
|
|
||||||
|
### 兼容性更改
|
||||||
|
|
||||||
|
如果新版本中包含兼容性或默认行为的变更,你最好将它们着重写出。你的用户、以及提供用户支持的人会感谢你的。在发行说明中描述会遇到行为变更的场景,如何处理变更,以及如果用户对变更不采取行动会导致的后果。对于某些次要版本,你可能没有任何会导致不兼容的变更,那你可以省略此部分。
|
||||||
|
|
||||||
|
### 功能及改进
|
||||||
|
|
||||||
|
现在,你该炫耀你的软件包含的那些酷的、新奇的东西了,但是要记得站在用户的角度来写。比如,“该软件现在支持自动发现午餐照片,并将其发布到 Instagram 上。”
|
||||||
|
|
||||||
|
### 已解决的问题
|
||||||
|
|
||||||
|
没有软件是完美的,所以在这部分中你需要告诉读者,你的团队为了使这个项目更好一点而做的所有努力工作。因为那些不好的行为已经被解决了,所以应该用过去式来写这一部分。如果某个 bug 的产生原因很明确,写上相关信息。一些项目还在文档此节中包含修复的 bug。
|
||||||
|
|
||||||
|
### 已知问题
|
||||||
|
|
||||||
|
因为没有软件是完美的,所以永远会存在未解决的 bug。在这一节中,你需要列出这些已知的问题。你不需要列出所有的问题;主要是影响功能的错误,尤其是那些在上个版本发布后发现的 bug。这一部分的文字用将来时态写出。当你把这些问题解决,你只需要改变动词的时态,然后把它们移到上个部分即可。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Ben Cotten - Ben Cotten 是一个受过专业训练的气象学家,但他现在是一位高性能计算工程师。Ben 是一位[循环计算][5]领域的布道者。他是 Fedora 的用户及贡献者,与他人一同创办了一个本地开源会议组,是开源计划的成员,还是软件自由保护的支持者。你可以在 Twitter 上找到他(@FunnelFiasco)。
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
译者简介:
|
||||||
|
|
||||||
|
[StdioA](https://www.stdioa.com/) —— Pythoner, Player.
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
|
via: https://opensource.com/article/17/3/how-to-improve-release-notes
|
||||||
|
|
||||||
|
作者:[Ben Cotton][a]
|
||||||
|
译者:[StdioA](https://github.com/StdioA)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:https://opensource.com/users/bcotton
|
||||||
|
[1]:https://opensource.com/article/17/3/how-to-improve-release-notes?rate=81ry_1MGfmsPXV6_y_4St2DQI4XyJAqIzs4yTNtUrpA
|
||||||
|
[2]:https://opensource.com/user/30131/feed
|
||||||
|
[3]:https://opensource.com/article/17/3/how-to-improve-release-notes#comments
|
||||||
|
[4]:https://opensource.com/users/bcotton
|
||||||
|
[5]:https://cyclecomputing.com/
|
@ -0,0 +1,99 @@
|
|||||||
|
如何在 Linux 中重置 MySQL 或者 MariaDB 的 root 密码
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
如果你是第一次设置 MySQL 或 MariaDB 数据库,你可以直接运行 `mysql_secure_installation` 来实现基本的安全设置。
|
||||||
|
|
||||||
|
其中一项是设置数据库 root 帐户的密码 - 你必须保持私密,并仅在绝对需要时使用。如果你忘记了密码或需要重置密码(例如,当数据库管理员换人或被裁员!),这篇文章会派上用场。我们将解释如何在 Linux 中重置或恢复 MySQL 或 MariaDB 的 root 密码。
|
||||||
|
|
||||||
|
**建议阅读:** [更改 MySQL 或 MariaDB 的 root 密码] [1]。
|
||||||
|
|
||||||
|
虽然我们将在本文中使用 MariaDB,但这些说明同样也适用于 MySQL。
|
||||||
|
|
||||||
|
### 恢复 MySQL 或者 MariaDB 的 root 密码
|
||||||
|
|
||||||
|
开始之前,先停止数据库服务并检查服务状态,我们应该可以看到先前设置的环境变量:
|
||||||
|
|
||||||
|
```
|
||||||
|
------------- SystemD -------------
|
||||||
|
# systemctl stop mariadb
|
||||||
|
------------- SysVinit -------------
|
||||||
|
# /etc/init.d/mysqld stop
|
||||||
|
```
|
||||||
|
|
||||||
|
接下来,用 `--skip-grant-tables` 选项启动服务:
|
||||||
|
|
||||||
|
```
|
||||||
|
------------- SystemD -------------
|
||||||
|
# systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
|
||||||
|
# systemctl start mariadb
|
||||||
|
# systemctl status mariadb
|
||||||
|
------------- SysVinit -------------
|
||||||
|
# mysqld_safe --skip-grant-tables &
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][2]
|
||||||
|
|
||||||
|
*使用 skip tables 启动 MySQL/MariaDB*
|
||||||
|
|
||||||
|
这可以让你不用 root 密码就能连接到数据库(你也许需要切换到另外一个终端上):
|
||||||
|
|
||||||
|
```
|
||||||
|
# mysql -u root
|
||||||
|
```
|
||||||
|
|
||||||
|
接下来,按照下面列出的步骤来。
|
||||||
|
|
||||||
|
```
|
||||||
|
MariaDB [(none)]> USE mysql;
|
||||||
|
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourNewPasswordHere') WHERE User='root' AND Host = 'localhost';
|
||||||
|
MariaDB [(none)]> FLUSH PRIVILEGES;
|
||||||
|
```
|
||||||
|
|
||||||
|
最后,停止服务,取消环境变量设置并再次启动服务:
|
||||||
|
|
||||||
|
```
|
||||||
|
------------- SystemD -------------
|
||||||
|
# systemctl stop mariadb
|
||||||
|
# systemctl unset-environment MYSQLD_OPTS
|
||||||
|
# systemctl start mariadb
|
||||||
|
------------- SysVinit -------------
|
||||||
|
# /etc/init.d/mysql stop
|
||||||
|
# /etc/init.d/mysql start
|
||||||
|
```
|
||||||
|
|
||||||
|
这可以让先前的改变生效,允许你使用新的密码连接到数据库。
|
||||||
|
|
||||||
|
##### 总结
|
||||||
|
|
||||||
|
本文我们讨论了如何重置 MariaDB/MySQL 的 root 密码。一如往常,如果你有任何问题或反馈请在评论栏中给我们留言。我们期待听到你的声音。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Gabriel Cánepa - 一位来自阿根廷圣路易斯梅塞德斯镇 (Villa Mercedes, San Luis, Argentina) 的 GNU/Linux 系统管理员,Web 开发者。就职于一家世界领先级的消费品公司,乐于在每天的工作中能使用 FOSS 工具来提高生产力。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/reset-mysql-or-mariadb-root-password/
|
||||||
|
|
||||||
|
作者:[Gabriel Cánepa][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.tecmint.com/author/gacanepa/
|
||||||
|
|
||||||
|
[1]:http://www.tecmint.com/change-mysql-mariadb-root-password/
|
||||||
|
[2]:http://www.tecmint.com/wp-content/uploads/2017/03/Start-MySQL-with-Skip-Tables.png
|
||||||
|
[3]:http://www.tecmint.com/reset-mysql-or-mariadb-root-password/#
|
||||||
|
[4]:http://www.tecmint.com/reset-mysql-or-mariadb-root-password/#
|
||||||
|
[5]:http://www.tecmint.com/reset-mysql-or-mariadb-root-password/#
|
||||||
|
[6]:http://www.tecmint.com/reset-mysql-or-mariadb-root-password/#
|
||||||
|
[7]:http://www.tecmint.com/reset-mysql-or-mariadb-root-password/#comments
|
||||||
|
[8]:http://www.tecmint.com/author/gacanepa/
|
||||||
|
[9]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
|
||||||
|
[10]:http://www.tecmint.com/free-linux-shell-scripting-books/
|
@ -0,0 +1,99 @@
|
|||||||
|
在 Linux 中修改 MySQL 或 MariaDB 的 Root 密码
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
如果你是第一次[安装 MySQL 或 MariaDB][1],你可以执行 `mysql_secure_installation` 脚本来实现基本的安全设置。
|
||||||
|
|
||||||
|
其中的一个设置是数据库的 root 密码 —— 该密码必须保密,并且只在必要的时候使用。如果你需要修改它(例如,当数据库管理员换了人 —— 或者被解雇了!)。
|
||||||
|
|
||||||
|
**建议阅读:**[在 Linux 中恢复 MySQL 或 MariaDB 的 Root 密码][2]
|
||||||
|
|
||||||
|
这篇文章迟早会派上用场的。我们讲说明怎样来在 Linux 中修改 MySQL 或 MariaDB 数据库服务器的 root 密码。
|
||||||
|
|
||||||
|
尽管我们会在本文中使用 MariaDB 服务器,但本文中的用法说明对 MySQL 也有效。
|
||||||
|
|
||||||
|
### 修改 MySQL 或 MariaDB 的 root 密码
|
||||||
|
|
||||||
|
你知道 root 密码,但是想要重置它,对于这样的情况,让我们首先确定 MariaDB 正在运行:
|
||||||
|
|
||||||
|
```
|
||||||
|
------------- CentOS/RHEL 7 and Fedora 22+ -------------
|
||||||
|
# systemctl is-active mariadb
|
||||||
|
------------- CentOS/RHEL 6 and Fedora -------------
|
||||||
|
# /etc/init.d/mysqld status
|
||||||
|
```
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][3]
|
||||||
|
|
||||||
|
*检查 MysQL 状态*
|
||||||
|
|
||||||
|
如果上面的命令返回中没有 `active` 这个关键词,那么该服务就是停止状态,你需要在进行下一步之前先启动数据库服务:
|
||||||
|
|
||||||
|
```
|
||||||
|
------------- CentOS/RHEL 7 and Fedora 22+ -------------
|
||||||
|
# systemctl start mariadb
|
||||||
|
------------- CentOS/RHEL 6 and Fedora -------------
|
||||||
|
# /etc/init.d/mysqld start
|
||||||
|
```
|
||||||
|
|
||||||
|
接下来,我们将以 root 登录进数据库服务器:
|
||||||
|
|
||||||
|
```
|
||||||
|
# mysql -u root -p
|
||||||
|
```
|
||||||
|
|
||||||
|
为了兼容不同版本,我们将使用下面的声明来更新 mysql 数据库的用户表。注意,你需要将 `YourPasswordHere` 替换为你为 root 选择的新密码。
|
||||||
|
|
||||||
|
```
|
||||||
|
MariaDB [(none)]> USE mysql;
|
||||||
|
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
|
||||||
|
MariaDB [(none)]> FLUSH PRIVILEGES;
|
||||||
|
```
|
||||||
|
|
||||||
|
要验证是否操作成功,请输入以下命令退出当前 MariaDB 会话。
|
||||||
|
|
||||||
|
```
|
||||||
|
MariaDB [(none)]> exit;
|
||||||
|
```
|
||||||
|
|
||||||
|
然后,敲回车。你现在应该可以使用新密码连接到服务器了。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][4]
|
||||||
|
|
||||||
|
*修改 MysQL/MariaDB Root 密码*
|
||||||
|
|
||||||
|
|
||||||
|
##### 小结
|
||||||
|
|
||||||
|
在本文中,我们说明了如何修改 MariaDB / MySQL 的 root 密码 —— 或许你知道当前所讲的这个方法,也可能不知道。
|
||||||
|
|
||||||
|
像往常一样,如果你有任何问题或者反馈,请尽管使用下面的评论框来留下你宝贵的意见或建议,我们期待着您的留言。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Gabriel Cánepa是一位来自阿根廷圣路易斯的 Villa Mercedes 的 GNU/Linux 系统管理员和 web 开发者。他为世界范围内的主要的消费产品公司工作,也很钟情于在他日常工作的方方面面中使用 FOSS 工具来提高生产效率。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/change-mysql-mariadb-root-password/
|
||||||
|
|
||||||
|
作者:[Gabriel Cánepa][a]
|
||||||
|
译者:[GOLinux](https://github.com/GOLinux)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.tecmint.com/author/gacanepa/
|
||||||
|
|
||||||
|
[1]:http://www.tecmint.com/install-mariadb-in-centos-7/
|
||||||
|
[2]:http://www.tecmint.com/reset-mysql-or-mariadb-root-password/
|
||||||
|
[3]:http://www.tecmint.com/wp-content/uploads/2017/03/Check-MySQL-Status.png
|
||||||
|
[4]:http://www.tecmint.com/wp-content/uploads/2017/03/Change-MySQL-Root-Password.png
|
||||||
|
[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/
|
@ -0,0 +1,295 @@
|
|||||||
|
使用 chroot 监狱限制 SSH 用户访问指定目录
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
将 [SSH 用户会话限制][1]访问到特定的目录内,特别是在 web 服务器上,这样做有多个原因,但最显而易见的是为了系统安全。为了锁定 SSH 用户在某个目录,我们可以使用 **chroot** 机制。
|
||||||
|
|
||||||
|
在诸如 Linux 之类的类 Unix 系统中更改 root(**chroot**)是将特定用户操作与其他 Linux 系统分离的一种手段;使用称为 **chrooted 监狱** 的新根目录更改当前运行的用户进程及其子进程的明显根目录。
|
||||||
|
|
||||||
|
在本教程中,我们将向你展示如何限制 SSH 用户访问 Linux 中指定的目录。注意,我们将以 root 用户身份运行所有命令,如果你以普通用户身份登录服务器,请使用 [sudo 命令][2]。
|
||||||
|
|
||||||
|
### 步骤 1:创建 SSH chroot 监狱
|
||||||
|
|
||||||
|
1、 使用 mkdir 命令开始创建 chroot 监狱:
|
||||||
|
|
||||||
|
```
|
||||||
|
# mkdir -p /home/test
|
||||||
|
```
|
||||||
|
|
||||||
|
2、 接下来,根据 `sshd_config` 手册找到所需的文件,`ChrootDirectory` 选项指定在身份验证后要 chroot 到的目录的路径名。该目录必须包含支持用户会话所必需的文件和目录。
|
||||||
|
|
||||||
|
对于交互式会话,这需要至少一个 shell,通常为 `sh` 和基本的 `/dev` 节点,例如 `null`、`zero`、`stdin`、`stdout`、`stderr` 和 `tty` 设备:
|
||||||
|
|
||||||
|
```
|
||||||
|
# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][3]
|
||||||
|
|
||||||
|
*列出所需文件*
|
||||||
|
|
||||||
|
3、 现在,使用 `mknod` 命令创建 `/dev` 下的文件。在下面的命令中,`-m` 标志用来指定文件权限位,`c` 意思是字符文件,两个数字分别是文件指向的主要号和次要号。
|
||||||
|
|
||||||
|
```
|
||||||
|
# mkdir -p /home/test/dev/
|
||||||
|
# cd /home/test/dev/
|
||||||
|
# mknod -m 666 null c 1 3
|
||||||
|
# mknod -m 666 tty c 5 0
|
||||||
|
# mknod -m 666 zero c 1 5
|
||||||
|
# mknod -m 666 random c 1 8
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][4]
|
||||||
|
|
||||||
|
*创建 /dev 和所需文件*
|
||||||
|
|
||||||
|
4、 在此之后,在 chroot 监狱中设置合适的权限。注意 chroot 监狱和它的子目录以及子文件必须被 `root` 用户所有,并且对普通用户或用户组不可写:
|
||||||
|
|
||||||
|
```
|
||||||
|
# chown root:root /home/test
|
||||||
|
# chmod 0755 /home/test
|
||||||
|
# ls -ld /home/test
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][5]
|
||||||
|
|
||||||
|
*设置目录权限*
|
||||||
|
|
||||||
|
### 步骤 2:为 SSH chroot 监狱设置交互式 shell
|
||||||
|
|
||||||
|
5、 首先,创建 `bin` 目录并复制 `/bin/bash` 到 `bin` 中:
|
||||||
|
|
||||||
|
```
|
||||||
|
# mkdir -p /home/test/bin
|
||||||
|
# cp -v /bin/bash /home/test/bin/
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][6]
|
||||||
|
|
||||||
|
*复制文件到 bin 目录中*
|
||||||
|
|
||||||
|
6、 现在,识别 bash 所需的共享库,如下所示复制它们到 `lib64` 中:
|
||||||
|
|
||||||
|
```
|
||||||
|
# ldd /bin/bash
|
||||||
|
# mkdir -p /home/test/lib64
|
||||||
|
# cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][7]
|
||||||
|
|
||||||
|
*复制共享库文件*
|
||||||
|
|
||||||
|
### 步骤 3:创建并配置 SSH 用户
|
||||||
|
|
||||||
|
7、 现在,使用 [useradd 命令][8]创建 SSH 用户,并设置安全密码:
|
||||||
|
|
||||||
|
```
|
||||||
|
# useradd tecmint
|
||||||
|
# passwd tecmint
|
||||||
|
```
|
||||||
|
|
||||||
|
8、 创建 chroot 监狱通用配置目录 `/home/test/etc` 并复制已更新的账号文件(`/etc/passwd` 和 `/etc/group`)到这个目录中:
|
||||||
|
|
||||||
|
```
|
||||||
|
# mkdir /home/test/etc
|
||||||
|
# cp -vf /etc/{passwd,group} /home/test/etc/
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][9]
|
||||||
|
|
||||||
|
*复制密码文件*
|
||||||
|
|
||||||
|
注意:每次向系统添加更多 SSH 用户时,都需要将更新的帐户文件复制到 `/home/test/etc` 目录中。
|
||||||
|
|
||||||
|
### 步骤 4:配置 SSH 来使用 chroot 监狱
|
||||||
|
|
||||||
|
9、 现在打开 `sshd_config` 文件。
|
||||||
|
|
||||||
|
```
|
||||||
|
# vi /etc/ssh/sshd_config
|
||||||
|
```
|
||||||
|
|
||||||
|
在此文件中添加或修改下面这些行。
|
||||||
|
|
||||||
|
```
|
||||||
|
# 定义要使用 chroot 监狱的用户
|
||||||
|
Match User tecmint
|
||||||
|
# 指定 chroot 监狱
|
||||||
|
ChrootDirectory /home/test
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][10]
|
||||||
|
|
||||||
|
*配置 SSH chroot 监狱*
|
||||||
|
|
||||||
|
保存文件并退出,重启 sshd 服务:
|
||||||
|
|
||||||
|
```
|
||||||
|
# systemctl restart sshd
|
||||||
|
或者
|
||||||
|
# service sshd restart
|
||||||
|
```
|
||||||
|
|
||||||
|
### 步骤 5:测试 SSH 的 chroot 监狱
|
||||||
|
|
||||||
|
10、 这次,测试 chroot 监狱的设置是否如希望的那样成功了:
|
||||||
|
|
||||||
|
```
|
||||||
|
# ssh tecmint@192.168.0.10
|
||||||
|
-bash-4.1$ ls
|
||||||
|
-bash-4.1$ date
|
||||||
|
-bash-4.1$ uname
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][11]
|
||||||
|
|
||||||
|
*测试 SSH 用户 chroot 监狱*
|
||||||
|
|
||||||
|
从上面的截图上来看,我们可以看到 SSH 用户被锁定在了 chroot 监狱中,并且不能使用任何外部命令如(`ls`、`date`、`uname` 等等)。
|
||||||
|
|
||||||
|
用户只可以执行 `bash` 以及它内置的命令(比如:`pwd`、`history`、`echo` 等等):
|
||||||
|
|
||||||
|
```
|
||||||
|
# ssh tecmint@192.168.0.10
|
||||||
|
-bash-4.1$ pwd
|
||||||
|
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
|
||||||
|
-bash-4.1$ history
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][12]
|
||||||
|
|
||||||
|
*SSH 内置命令*
|
||||||
|
|
||||||
|
### 步骤6: 创建用户的主目录并添加 Linux 命令
|
||||||
|
|
||||||
|
11、 从前面的步骤中,我们可以看到用户被锁定在了 root 目录,我们可以为 SSH 用户创建一个主目录(以及为所有将来的用户这么做):
|
||||||
|
|
||||||
|
```
|
||||||
|
# mkdir -p /home/test/home/tecmint
|
||||||
|
# chown -R tecmint:tecmint /home/test/home/tecmint
|
||||||
|
# chmod -R 0700 /home/test/home/tecmint
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][13]
|
||||||
|
|
||||||
|
*创建 SSH 用户主目录*
|
||||||
|
|
||||||
|
12、 接下来,在 `bin` 目录中安装几个用户命令,如 `ls`、`date`、`mkdir`:
|
||||||
|
|
||||||
|
```
|
||||||
|
# cp -v /bin/ls /home/test/bin/
|
||||||
|
# cp -v /bin/date /home/test/bin/
|
||||||
|
# cp -v /bin/mkdir /home/test/bin/
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][14]
|
||||||
|
|
||||||
|
*向 SSH 用户添加命令*
|
||||||
|
|
||||||
|
13、 接下来,检查上面命令的共享库并将它们移到 chroot 监狱的库目录中:
|
||||||
|
|
||||||
|
```
|
||||||
|
# ldd /bin/ls
|
||||||
|
# cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][15]
|
||||||
|
|
||||||
|
*复制共享库*
|
||||||
|
|
||||||
|
### 步骤 7:测试 sftp 的 用 chroot 监狱
|
||||||
|
|
||||||
|
14、 最后用 sftp 做一个测试;测试你先前安装的命令是否可用。
|
||||||
|
|
||||||
|
在 `/etc/ssh/sshd_config` 中添加下面的行:
|
||||||
|
|
||||||
|
```
|
||||||
|
# 启用 sftp 的 chrooted 监狱
|
||||||
|
ForceCommand internal-sftp
|
||||||
|
```
|
||||||
|
|
||||||
|
保存并退出文件。接下来重启 sshd 服务:
|
||||||
|
|
||||||
|
```
|
||||||
|
# systemctl restart sshd
|
||||||
|
或者
|
||||||
|
# service sshd restart
|
||||||
|
```
|
||||||
|
|
||||||
|
15、 现在使用 ssh 测试,你会得到下面的错误:
|
||||||
|
|
||||||
|
```
|
||||||
|
# ssh tecmint@192.168.0.10
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][16]
|
||||||
|
|
||||||
|
*测试 SSH Chroot 监狱*
|
||||||
|
|
||||||
|
试下使用 sftp:
|
||||||
|
|
||||||
|
```
|
||||||
|
# sftp tecmint@192.168.0.10
|
||||||
|
```
|
||||||
|
[
|
||||||
|

|
||||||
|
][17]
|
||||||
|
|
||||||
|
*测试 sFTP SSH 用户*
|
||||||
|
|
||||||
|
**建议阅读:** [使用 chroot 监狱将 sftp 用户限制在主目录中][18]。
|
||||||
|
|
||||||
|
就是这样了!在文本中,我们向你展示了如何在 Linux 中限制 ssh 用户到指定的目录中( chroot 监狱)。请在评论栏中给我们提供你的想法。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Aaron Kili 是一个 Linux 及 F.O.S.S 热衷者,即将成为 Linux 系统管理员、web 开发者,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并坚信分享知识。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/
|
||||||
|
|
||||||
|
作者:[Aaron Kili][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.tecmint.com/author/aaronkili/
|
||||||
|
|
||||||
|
[1]:http://www.tecmint.com/restrict-sftp-user-home-directories-using-chroot/
|
||||||
|
[2]:http://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/
|
||||||
|
[3]:http://www.tecmint.com/wp-content/uploads/2017/03/Listing-Required-Files.png
|
||||||
|
[4]:http://www.tecmint.com/wp-content/uploads/2017/03/Create-Required-Files.png
|
||||||
|
[5]:http://www.tecmint.com/wp-content/uploads/2017/03/Set-Permission-on-Directory.png
|
||||||
|
[6]:http://www.tecmint.com/wp-content/uploads/2017/03/Copy-Bin-Files.png
|
||||||
|
[7]:http://www.tecmint.com/wp-content/uploads/2017/03/Copy-Shared-Library-Files.png
|
||||||
|
[8]:http://www.tecmint.com/add-users-in-linux/
|
||||||
|
[9]:http://www.tecmint.com/wp-content/uploads/2017/03/Copy-Password-Files.png
|
||||||
|
[10]:http://www.tecmint.com/wp-content/uploads/2017/03/Configure-SSH-Chroot-Jail.png
|
||||||
|
[11]:http://www.tecmint.com/wp-content/uploads/2017/03/Testing-SSH-User-Chroot-Jail.png
|
||||||
|
[12]:http://www.tecmint.com/wp-content/uploads/2017/03/SSH-Builtin-Commands.png
|
||||||
|
[13]:http://www.tecmint.com/wp-content/uploads/2017/03/Create-SSH-User-Home-Directory.png
|
||||||
|
[14]:http://www.tecmint.com/wp-content/uploads/2017/03/Add-Commands-to-SSH-User.png
|
||||||
|
[15]:http://www.tecmint.com/wp-content/uploads/2017/03/Copy-Shared-Libraries.png
|
||||||
|
[16]:http://www.tecmint.com/wp-content/uploads/2017/03/Test-SSH-Chroot-Jail.png
|
||||||
|
[17]:http://www.tecmint.com/wp-content/uploads/2017/03/Testing-sFTP-SSH-User.png
|
||||||
|
[18]:http://www.tecmint.com/restrict-sftp-user-home-directories-using-chroot/
|
||||||
|
[19]:http://www.tecmint.com/author/aaronkili/
|
||||||
|
[20]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
|
||||||
|
[21]:http://www.tecmint.com/free-linux-shell-scripting-books/
|
@ -0,0 +1,125 @@
|
|||||||
|
Linux 中六个最佳 PDF 页面裁剪工具
|
||||||
|
=========================
|
||||||
|
|
||||||
|
PDF(<ruby>**可移植文档格式**<rt>Portable Document Format </rt></ruby>)可谓是众所周知,并且可能是当今使用最广泛的文档类型,特别是在可靠呈现和分享文档、软硬件及系统无关性等方面有着很大优势。
|
||||||
|
|
||||||
|
事实上,它已经成为了电子文档的业界标准,特别是在互联网上。由于这样的原因,以及越来越多的电子信息分享,很多人从 PDF 文档中得到他们想要的有用信息。
|
||||||
|
|
||||||
|
**建议阅读:** [Linux 中的八大 PDF 阅读器][1]。
|
||||||
|
|
||||||
|
在本文中,我将列举 Linux 系统中最好的六个 PDF 页面裁剪工具。
|
||||||
|
|
||||||
|
### 1、 Master PDF 编辑器
|
||||||
|
|
||||||
|
[Master PDF 编辑器][2] 是一个简单易用、方便却强大的多功能 PDF 编辑器,可以帮助你很好的处理 PDF 文档。
|
||||||
|
|
||||||
|
[][3]
|
||||||
|
|
||||||
|
*Master PDF 编辑器*
|
||||||
|
|
||||||
|
使用它可以很容易地查看、创建和修改 PDF 文件。它还可以将几个文档合成一个文件,以及 [将源文档分割成多个文档][4]。
|
||||||
|
|
||||||
|
此外,Master PDF 编辑器还可以帮你对 PDF 文档进行注释、签名和加密等等。
|
||||||
|
|
||||||
|
#### Master PDF 编辑器的特性
|
||||||
|
|
||||||
|
1. 跨平台,可以运行于 Linux、Windows 以及 MacOS
|
||||||
|
2. 可以创建 PDF 文档
|
||||||
|
3. 允许修改 PDF 文档中的文本和对象
|
||||||
|
4. 支持 PDF 文档注释
|
||||||
|
5. 支持 PDF 创建和填充表单
|
||||||
|
6. 支持光学文本识别(OCR)
|
||||||
|
7. 支持多页面操作
|
||||||
|
8. 支持书签和数字签名
|
||||||
|
9. 搭载有一个虚拟 PDF 打印机
|
||||||
|
|
||||||
|
### 2、 PDF Quench
|
||||||
|
|
||||||
|
[PDF Quench][5] 是一个用于 PDF 页面裁剪的图形化 Python 应用。
|
||||||
|
|
||||||
|
[][6]
|
||||||
|
|
||||||
|
*PDF Quench 编辑器*
|
||||||
|
|
||||||
|
它可以让用户以合适的旋转角度来裁剪页面,将裁剪框定义为与 meda 框相同的位置,这有助于处理第二次裁剪的问题。
|
||||||
|
|
||||||
|
### 3、 PDF Shuffler
|
||||||
|
|
||||||
|
[PDF-Shuffler][7] 是一个小巧、简单和免费的 python-gtk 应用,由 python-pyPdf 进行图形界面封装而来。
|
||||||
|
|
||||||
|
[][8]
|
||||||
|
|
||||||
|
*PDF Shuffler 编辑器*
|
||||||
|
|
||||||
|
通过 PDF-Shuffler,你可以使用一个直观的交互式图形用户界面,来合并或者分割 PDF 文档,以及旋转、裁剪和重组页面。
|
||||||
|
|
||||||
|
### 4、 Krop
|
||||||
|
|
||||||
|
[Krop][9] 是一个简单、免费的图形用户界面应用,用于裁剪 PDF 文件页面。它是使用 Python 编写的,并且只能运行于 Linux 系统。
|
||||||
|
|
||||||
|
[][10]
|
||||||
|
|
||||||
|
*Krop PDF 编辑器*
|
||||||
|
|
||||||
|
它依赖于 PyQT、python-poppler-qt4 和 pyPdf 或 PyPDF2 来支持自身的全部功能。其主要特性之一就是可以如同 eReaders 一样,将页面分为多个子页面以适应设备屏幕尺寸的限制。
|
||||||
|
|
||||||
|
### 5、 Briss
|
||||||
|
|
||||||
|
[Briss][11] 是一个简单、免费的跨平台程序,用于裁剪 PDF 文档,它可以工作于 Linux、Windows 和 Mac OSX。
|
||||||
|
|
||||||
|
[][12]
|
||||||
|
|
||||||
|
*Briss PDF 编辑器*
|
||||||
|
|
||||||
|
其中,有一个显著的特性是其直观的图形用户界面允许你直接以可视的方式在页面上调整矩形框来精确定义裁剪区域,当然还有其他更多有用的特性。
|
||||||
|
|
||||||
|
### 6、 PDFCrop
|
||||||
|
|
||||||
|
[PDFCrop][13] 是一个 Linux 平台的 PDF 裁剪应用,使用 Perl 语言编写。它要求系统已安装好 ghostscript (用于寻找 PDF 文件的页面边界框) 和 PDFedit (用于裁剪和重设页面尺寸)。
|
||||||
|
|
||||||
|
它能让你裁剪掉 PDF 页面中的白色边界,并重新调整页面大小以适应标准尺寸的纸张;所得到的页面打印后通常更具可读性和引人注目。
|
||||||
|
|
||||||
|
它主要用于学术界人士,使他们能够用习惯的方式来打印下载的期刊论文。PDFCrop 也适用于这些人:他们经常接收到以信纸大小来组织页面的 PDF 文档,但却需要打印为 A4 纸大小 (或者是相反的情况)。
|
||||||
|
|
||||||
|
至此,文毕。在本文中,我列举了在 Linux 中六个最好用的 PDF 页面裁剪工具及其主要特性。是不是还有其他的工具被我遗漏了呢?请通过评论向我分享哦。
|
||||||
|
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Aaron Kili 是一名 Linux 和 F.O.S.S 忠实拥护者、高级 Linux 系统管理员、Web 开发者,目前在 TecMint 是一名活跃的博主,热衷于计算机并有着强烈的知识分享意愿。
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
译者简介:
|
||||||
|
|
||||||
|
[GHLandy](http://GHLandy.com) —— 生活中所有欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/best-pdf-page-cropping-tools-for-linux/
|
||||||
|
|
||||||
|
作者:[Aaron Kili][a]
|
||||||
|
译者:[GHLandy](https://github.com/GHLandy)
|
||||||
|
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.tecmint.com/author/aaronkili/
|
||||||
|
|
||||||
|
[1]:http://www.tecmint.com/linux-pdf-viewers-and-readers-tools/
|
||||||
|
[2]:https://code-industry.net/masterpdfeditor/
|
||||||
|
[3]:http://www.tecmint.com/wp-content/uploads/2017/03/Master-PDF-Editor.png
|
||||||
|
[4]:http://www.tecmint.com/split-large-tar-into-multiple-files-of-certain-size/
|
||||||
|
[5]:https://github.com/linuxerwang/pdf-quench
|
||||||
|
[6]:http://www.tecmint.com/wp-content/uploads/2017/03/PDF-Quench.png
|
||||||
|
[7]:https://github.com/jeromerobert/pdfshuffler
|
||||||
|
[8]:http://www.tecmint.com/wp-content/uploads/2017/03/PDF-Shuffler.png
|
||||||
|
[9]:http://arminstraub.com/software/krop
|
||||||
|
[10]:http://www.tecmint.com/wp-content/uploads/2017/03/Krop-PDF-Editor.png
|
||||||
|
[11]:http://briss.sourceforge.net/
|
||||||
|
[12]:http://www.tecmint.com/wp-content/uploads/2017/03/Briss-PDF-Editor.png
|
||||||
|
[13]:http://pdfcrop.sourceforge.net/
|
||||||
|
[14]:http://www.tecmint.com/author/aaronkili/
|
||||||
|
[15]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
|
||||||
|
[16]:http://www.tecmint.com/free-linux-shell-scripting-books/
|
10
published/201703/20170314 binary tree.md
Normal file
10
published/201703/20170314 binary tree.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
漫画赏析:孩子眼中的“二叉树”
|
||||||
|
================
|
||||||
|
|
||||||
|
著名的 [turnoff.us](http://turnoff.us/) 有很多有趣的漫画,比如这一副《[二叉树](http://turnoff.us/geek/binary-tree/)》。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
在孩子的眼中,世界是另外一种样子。可能在我们大人看来,司空见惯的一些事物,已经掩盖了我们的想象力,但是童稚未去的孩子们往往能观察到我们所忽视的一面,所以,多陪陪孩子吧(首先,你得有个……)。
|
||||||
|
|
||||||
|
比如上图中,我们看到的是一颗“普普通通”的树,而孩子看到的是“二进制的树”(二叉树)。(LCTT 译注:此处 Binary Tree 做一语双关状,孩子眼中是“二进制树”,而在搞计算机的老爸听来却是“二叉树”)
|
@ -0,0 +1,111 @@
|
|||||||
|
如何在 Linux 中安装最新的 Python 3.6 版本
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
在这篇文章中,我将展示如何在 CentOS/RHEL 7、Debian 以及它的衍生版本比如 Ubuntu(最新的 Ubuntu 16.04 LTS 版本已经安装了最新的 Python 版本)或 Linux Mint 上安装和使用 Python 3.x 。我们的重点是安装可用于命令行的核心语言工具。
|
||||||
|
|
||||||
|
然后,我们也会阐述如何安装 Python IDLE - 一个基于 GUI 的工具,它允许我们运行 Python 代码和创建独立函数。
|
||||||
|
|
||||||
|
### 在 Linux 中安装 Python 3.6
|
||||||
|
|
||||||
|
在我写这篇文章的时候(2017 年三月中旬),在 CentOS 和 Debian 8 中可用的最新 Python 版本分别是 Python 3.4 和 Python 3.5 。
|
||||||
|
|
||||||
|
虽然我们可以使用 [yum][1] 和 [aptitude][2](或 [apt-get][3])安装核心安装包以及它们的依赖,但在这儿,我将阐述如何使用源代码进行安装。
|
||||||
|
|
||||||
|
为什么?理由很简单:这样我们能够获取语言的最新的稳定发行版(3.6),并且提供了一种和 Linux 版本无关的安装方法。
|
||||||
|
|
||||||
|
在 CentOS 7 中安装 Python 之前,请确保系统中已经有了所有必要的开发依赖:
|
||||||
|
|
||||||
|
```
|
||||||
|
# yum -y groupinstall development
|
||||||
|
# yum -y install zlib-devel
|
||||||
|
```
|
||||||
|
|
||||||
|
在 Debian 中,我们需要安装 gcc、make 和 zlib 压缩/解压缩库:
|
||||||
|
|
||||||
|
```
|
||||||
|
# aptitude -y install gcc make zlib1g-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
运行下面的命令来安装 Python 3.6:
|
||||||
|
|
||||||
|
```
|
||||||
|
# wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
|
||||||
|
# tar xJf Python-3.6.0.tar.xz
|
||||||
|
# cd Python-3.6.0
|
||||||
|
# ./configure
|
||||||
|
# make && make install
|
||||||
|
```
|
||||||
|
|
||||||
|
现在,放松一下,或者饿的话去吃个三明治,因为这可能需要花费一些时间。安装完成以后,使用 `which` 命令来查看主要二进制代码的位置:
|
||||||
|
|
||||||
|
```
|
||||||
|
# which python3
|
||||||
|
# python3 -V
|
||||||
|
```
|
||||||
|
|
||||||
|
上面的命令的输出应该和这相似:
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][4]
|
||||||
|
|
||||||
|
*查看 Linux 系统中的 Python 版本*
|
||||||
|
|
||||||
|
要退出 Python 提示符,只需输入:
|
||||||
|
|
||||||
|
```
|
||||||
|
quit()
|
||||||
|
或
|
||||||
|
exit()
|
||||||
|
```
|
||||||
|
|
||||||
|
然后按回车键。
|
||||||
|
|
||||||
|
恭喜!Python 3.6 已经安装在你的系统上了。
|
||||||
|
|
||||||
|
### 在 Linux 中安装 Python IDLE
|
||||||
|
|
||||||
|
Python IDLE 是一个基于 GUI 的 Python 工具。如果你想安装 Python IDLE,请安装叫做 idle(Debian)或 python-tools(CentOS)的包:
|
||||||
|
|
||||||
|
```
|
||||||
|
# apt-get install idle [On Debian]
|
||||||
|
# yum install python-tools [On CentOS]
|
||||||
|
```
|
||||||
|
|
||||||
|
输入下面的命令启动 Python IDLE:
|
||||||
|
|
||||||
|
```
|
||||||
|
# idle
|
||||||
|
```
|
||||||
|
|
||||||
|
### 总结
|
||||||
|
|
||||||
|
在这篇文章中,我们阐述了如何从源代码安装最新的 Python 稳定版本。
|
||||||
|
|
||||||
|
最后但不是不重要,如果你之前使用 Python 2,那么你可能需要看一下 [从 Python 2 迁移到 Python 3 的官方文档][5]。这是一个可以读入 Python 2 代码,然后转化为有效的 Python 3 代码的程序。
|
||||||
|
|
||||||
|
你有任何关于这篇文章的问题或想法吗?请使用下面的评论栏与我们联系
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
作者简介:
|
||||||
|
|
||||||
|
Gabriel Cánepa - 一位来自阿根廷圣路易斯梅塞德斯镇 (Villa Mercedes, San Luis, Argentina) 的 GNU/Linux 系统管理员,Web 开发者。就职于一家世界领先级的消费品公司,乐于在每天的工作中能使用 FOSS 工具来提高生产力。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.tecmint.com/install-python-in-linux/
|
||||||
|
|
||||||
|
作者:[Gabriel Cánepa][a]
|
||||||
|
译者:[ucasFL](https://github.com/ucasFL)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.tecmint.com/author/gacanepa/
|
||||||
|
|
||||||
|
[1]:http://www.tecmint.com/20-linux-yum-yellowdog-updater-modified-commands-for-package-mangement/
|
||||||
|
[2]:http://www.tecmint.com/linux-package-management/
|
||||||
|
[3]:http://www.tecmint.com/useful-basic-commands-of-apt-get-and-apt-cache-for-package-management/
|
||||||
|
[4]:http://www.tecmint.com/wp-content/uploads/2017/03/Check-Python-Version-in-Linux.png
|
||||||
|
[5]:https://docs.python.org/3.6/library/2to3.html
|
@ -0,0 +1,154 @@
|
|||||||
|
Kgif:一个从活动窗口创建 GIF 的简单脚本
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
[Kgif][2] 是一个简单的 shell 脚本,它可以从活动窗口创建一个 GIF 文件。我觉得这个程序专门是为捕获终端活动设计的,我经常用于这个。
|
||||||
|
|
||||||
|
它将窗口的活动捕获为一系列的 PNG 图片,然后组合在一起创建一个GIF 动画。脚本以 0.5 秒的间隔截取活动窗口。如果你觉得这不符合你的要求,你可以根据你的需要修改脚本。
|
||||||
|
|
||||||
|
最初它是为了捕获 tty 输出以及创建 github 项目的预览图创建的。
|
||||||
|
|
||||||
|
确保你在运行 Kgif 之前已经安装了 scrot 和 ImageMagick 软件包。
|
||||||
|
|
||||||
|
推荐阅读:[Peek - 在 Linux 中创建一个 GIF 动画录像机][3]。
|
||||||
|
|
||||||
|
什么是 ImageMagick?ImageMagick 是一个命令行工具,用于图像转换和编辑。它支持所有类型的图片格式(超过 200 种),如 PNG、JPEG、JPEG-2000、GIF、TIFF、DPX、EXR、WebP、Postscript、PDF 和 SVG。
|
||||||
|
|
||||||
|
什么是 Scrot?Scrot 代表 SCReenshOT,它是一个开源的命令行工具,用于捕获桌面、终端或特定窗口的屏幕截图。
|
||||||
|
|
||||||
|
#### 安装依赖
|
||||||
|
|
||||||
|
Kgif 需要 scrot 以及 ImageMagick。
|
||||||
|
|
||||||
|
对于基于 Debian 的系统:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo apt-get install scrot imagemagick
|
||||||
|
```
|
||||||
|
|
||||||
|
对于基于 RHEL/CentOS 的系统:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo yum install scrot ImageMagick
|
||||||
|
```
|
||||||
|
|
||||||
|
对于 Fedora 系统:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo dnf install scrot ImageMagick
|
||||||
|
```
|
||||||
|
|
||||||
|
对于 openSUSE 系统:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo zypper install scrot ImageMagick
|
||||||
|
```
|
||||||
|
|
||||||
|
对于基于 Arch Linux 的系统:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo pacman -S scrot ImageMagick
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 安装 Kgif 及使用
|
||||||
|
|
||||||
|
安装 Kgif 并不困难,因为不需要安装。只需从开发者的 github 页面克隆源文件,你就可以运行 `kgif.sh` 文件来捕获活动窗口了。默认情况下它的延迟为 1 秒,你可以用 `--delay` 选项来修改延迟。最后,按下 `Ctrl + c` 来停止捕获。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git clone https://github.com/luminousmen/Kgif
|
||||||
|
$ cd Kgif
|
||||||
|
$ ./kgif.sh
|
||||||
|
Setting delay to 1 sec
|
||||||
|
|
||||||
|
Capturing...
|
||||||
|
^C
|
||||||
|
Stop capturing
|
||||||
|
Converting to gif...
|
||||||
|
Cleaning...
|
||||||
|
Done!
|
||||||
|
```
|
||||||
|
|
||||||
|
检查系统中是否已存在依赖。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ./kgif.sh --check
|
||||||
|
OK: found scrot
|
||||||
|
OK: found imagemagick
|
||||||
|
```
|
||||||
|
|
||||||
|
设置在 N 秒延迟后开始捕获。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ./kgif.sh --delay=5
|
||||||
|
|
||||||
|
Setting delay to 5 sec
|
||||||
|
|
||||||
|
Capturing...
|
||||||
|
^C
|
||||||
|
Stop capturing
|
||||||
|
Converting to gif...
|
||||||
|
Cleaning...
|
||||||
|
Done!
|
||||||
|
```
|
||||||
|
|
||||||
|
它会将文件保存为 `terminal.gif`,并且每次在生成新文件时都会覆盖。因此,我建议你添加 `--filename` 选项将文件保存为不同的文件名。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ./kgif.sh --delay=5 --filename=2g-test.gif
|
||||||
|
|
||||||
|
Setting delay to 5 sec
|
||||||
|
|
||||||
|
Capturing...
|
||||||
|
^C
|
||||||
|
Stop capturing
|
||||||
|
Converting to gif...
|
||||||
|
Cleaning...
|
||||||
|
Done!
|
||||||
|
```
|
||||||
|
|
||||||
|
使用 `--noclean` 选项保留 png 截图。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ./kgif.sh --delay=5 --noclean
|
||||||
|
```
|
||||||
|
|
||||||
|
要了解更多的选项:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ./kgif.sh --help
|
||||||
|
|
||||||
|
usage: ./kgif.sh [--delay] [--filename ] [--gifdelay] [--noclean] [--check] [-h]
|
||||||
|
-h, --help Show this help, exit
|
||||||
|
--check Check if all dependencies are installed, exit
|
||||||
|
--delay= Set delay in seconds to specify how long script will wait until start capturing.
|
||||||
|
--gifdelay= Set delay in seconds to specify how fast images appears in gif.
|
||||||
|
--filename= Set file name for output gif.
|
||||||
|
--noclean Set if you don't want to delete source *.png screenshots.
|
||||||
|
```
|
||||||
|
|
||||||
|
默认捕获输出。
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
][4]
|
||||||
|
|
||||||
|
我感觉默认的捕获非常快,接着我做了一些修改并得到了合适的输出。
|
||||||
|
[
|
||||||
|

|
||||||
|
][5]
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
via: http://www.2daygeek.com/kgif-create-animated-gif-file-active-window-screen-recorder-capture-arch-linux-mint-fedora-ubuntu-debian-opensuse-centos/
|
||||||
|
|
||||||
|
作者:[MAGESH MARUTHAMUTHU][a]
|
||||||
|
译者:[geekpi](https://github.com/geekpi)
|
||||||
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
|
[a]:http://www.2daygeek.com/author/magesh/
|
||||||
|
[1]:http://www.2daygeek.com/author/magesh/
|
||||||
|
[2]:https://github.com/luminousmen/Kgif
|
||||||
|
[3]:http://www.2daygeek.com/kgif-create-animated-gif-file-active-window-screen-recorder-capture-arch-linux-mint-fedora-ubuntu-debian-opensuse-centos/www.2daygeek.com/peek-create-animated-gif-screen-recorder-capture-arch-linux-mint-fedora-ubuntu/
|
||||||
|
[4]:http://www.2daygeek.com/wp-content/uploads/2017/03/kgif-test.gif
|
||||||
|
[5]:http://www.2daygeek.com/wp-content/uploads/2017/03/kgif-test-delay-modified.gif
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user