diff --git a/translated/tech/20171204 Tutorial on how to write basic udev rules in Linux.md b/published/20171204 Tutorial on how to write basic udev rules in Linux.md
similarity index 67%
rename from translated/tech/20171204 Tutorial on how to write basic udev rules in Linux.md
rename to published/20171204 Tutorial on how to write basic udev rules in Linux.md
index 55becf8f70..e7d671ac94 100644
--- a/translated/tech/20171204 Tutorial on how to write basic udev rules in Linux.md
+++ b/published/20171204 Tutorial on how to write basic udev rules in Linux.md
@@ -1,31 +1,5 @@
-#教程:在 Linux 中如何写一个基本的 udev 规则
-
-### 目录
-
-* * [1. 读者对象][4]
-
- * [2. 要求][5]
-
- * [3. 难度][6]
-
- * [4. 约定][7]
-
- * [5. 介绍][8]
-
- * [6. 规则如何组织][9]
-
- * [7. 规则语法][10]
-
- * [8. 一个测试案例][11]
-
- * [9. 操作符][12]
- * * [9.1.1. == 和 != 操作][1]
-
- * [9.1.2. 分配操作符 = 和 :=][2]
-
- * [9.1.3. += 和 -= 操作符][3]
-
- * [10. 我们使用的键][13]
+在 Linux 中如何编写基本的 udev 规则
+=======
### 读者对象
@@ -33,7 +7,7 @@
### 要求
-* Root 权限
+* root 权限
### 难度
@@ -41,29 +15,29 @@
### 约定
-* **#** - 要求给定的命令使用 root 权限或者直接以一个 root 用户或者使用 `sudo` 命令去运行。
-
-* **$** - 要求给定的命令以一个普通的非特权用户运行。
+* `#` - 要求给定的命令使用 root 权限或者直接以一个 root 用户或者使用 `sudo` 命令去运行。
+* `$` - 要求给定的命令以一个普通的非特权用户运行。
### 介绍
-在一个 GNU/Linux 系统中,虽然设备的低级别支持是在内核级中处理的,但是,它们相关的事件的管理是在用户空间中通过 `udev` 来管理的。确切地说是由 `udevd` 守护进程来完成的。学习如何去写一个规则,并应用到发生的这些事件上,将有助于我们修改系统的行为并使它适合我们的需要。
+在 GNU/Linux 系统中,虽然设备的底层支持是在内核层面处理的,但是,它们相关的事件管理是在用户空间中通过 `udev` 来管理的。确切地说是由 `udevd` 守护进程来完成的。学习如何去写规则,并应用到发生的这些事件上,将有助于我们修改系统的行为并使它适合我们的需要。
### 规则如何组织
-Udev 规则是定义在一个以 `.rules` 为扩展名的文件中。那些文件主要放在两个位置:`/usr/lib/udev/rules.d`,这个目录用于存放系统安装的规则,`/etc/udev/rules.d/` 这个目录是保留给自定义规则的。
+udev 规则是定义在一个以 `.rules` 为扩展名的文件中。那些文件主要放在两个位置:`/usr/lib/udev/rules.d`,这个目录用于存放系统安装的规则;`/etc/udev/rules.d/` 这个目录是保留给自定义规则的。
-定义那些规则的文件的命名惯例是使用一个数字作为前缀(比如,`50-udev-default.rules`)并且以它们在目录中的词汇顺序进行处理的。在 `/etc/udev/rules.d` 中安装的文件,会覆盖安装在系统默认路径中的同名文件。
+定义那些规则的文件的命名惯例是使用一个数字作为前缀(比如,`50-udev-default.rules`),并且以它们在目录中的词汇顺序进行处理的。在 `/etc/udev/rules.d` 中安装的文件,会覆盖安装在系统默认路径中的同名文件。
### 规则语法
-如果你理解了 udev 规则的行为逻辑,它的语法并不复杂。一个规则由两个主要的节构成:“match” 部分,它使用一系列用逗号分隔的键定义了规则应用的条件,而 “action” 部分,是当条件满足时,我们执行一些动作。
+如果你理解了 udev 规则的行为逻辑,它的语法并不复杂。一个规则由两个主要的节构成:`match` 部分,它使用一系列用逗号分隔的键定义了规则应用的条件,而 `action` 部分,是当条件满足时,我们执行一些动作。
-### 一个测试案例
+### 测试案例
-讲解可能的选项的最好方法莫过于配置一个真实的案例,因此,我们去定义一个规则作为演示,当鼠标被连接时禁用触摸板。显然,在规则定义中提供的属性将反映我的硬件。
+讲解可能的选项的最好方法莫过于配置一个真实的案例,因此,我们去定义一个规则作为演示,当鼠标被连接时禁用触摸板。显然,在该规则定义中提供的属性将反映我的硬件。
+
+我们将在 `/etc/udev/rules.d/99-togglemouse.rules` 文件中用我们喜欢的文本编辑器来写我们的规则。一条规则定义允许跨多个行,但是,如果是这种情况,必须在一个换行字符之前使用一个反斜线(`\`)表示行的延续,就和 shell 脚本一样。这是我们的规则:
-我们将在 `/etc/udev/rules.d/99-togglemouse.rules` 文件中用我们喜欢的文本编辑器来写我们的规则。一个规则定义允许跨多个行,但是,如果是这种情况,必须在一个新行字符之前使用一个反斜线(\)表示这是上一行的后续部分,就和 shell 脚本一样,这是我们的规则:
```
ACTION=="add" \
, ATTRS{idProduct}=="c52f" \
@@ -72,6 +46,7 @@ ACTION=="add" \
, ENV{XAUTHORITY}="/run/user/1000/gdm/Xauthority" \
, RUN+="/usr/bin/xinput --disable 16"
```
+
我们来分析一下这个规则。
### 操作符
@@ -84,17 +59,18 @@ ACTION=="add" \
#### 分配操作符 = 和 :=
-`=` 分配操作符,是用于为一个键分配一个值。当我们去分配一个值,并且想确保它不会被其它规则所覆盖,我们就需要使用 `:=` 操作符来代替,使用这个操作符分配的值,它确实不能被改变。
+`=` 是赋值操作符,是用于为一个键赋值。当我们想要赋值,并且想确保它不会被其它规则所覆盖,我们就需要使用 `:=` 操作符来代替,使用这个操作符分配的值,它就不能被改变。
#### += 和 -= 操作符
-`+=` 和 `-=` 操作符各自用于从一个指定的键中定义的值列表中增加或者移除一个值。
+`+=` 和 `-=` 操作符各自用于从一个指定的键定义的值列表中增加或者移除一个值。
### 我们使用的键
现在,来分析一下在这个规则中我们使用的键。首先,我们有一个 `ACTION` 键:通过使用它,当在一个设备上发生了特定的事件,我们将指定我们要应用的规则的具体内容。有效的值有 `add`、`remove ` 以及 `change`。
-然后,我们使用 `ATTRS` 关键字去指定一个属性去匹配。我们可以使用 `udevadm info` 命令去列出一个设备属性,提供它的名字或者 `sysfs` 路径:
+然后,我们使用 `ATTRS` 关键字去指定一个属性去匹配。我们可以使用 `udevadm info` 命令去列出一个设备属性,提供它的名字或者 `sysfs` 路径即可:
+
```
udevadm info -ap /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.1/0003:046D:C52F.0010/input/input39
@@ -166,31 +142,36 @@ and the attributes from one single parent device.
[...]
```
+
上面截取了运行这个命令之后的输出的一部分。正如你从它的输出中看到的那样,`udevadm` 从我们提供的指定路径开始,并且提供了所有父级设备的信息。注意设备的属性都是以单数的形式报告的(比如,`KERNEL`),而它的父级是以复数形式出现的(比如,`KERNELS`)。父级信息可以做为规则的一部分,但是同一时间只能有一个父级可以被引用:不同父级设备的属性混合在一起是不能工作的。在上面我们定义的规则中,我们使用了一个父级设备属性:`idProduct` 和 `idVendor`。
-在我们的规则中接下来做的事情是,去使用 `ENV` 关键字:它既可以用于设置也可以用于去匹配环境变量。我们给 `DISPLAY` 和 `XAUTHORITY` 分配值。当我们使用 X server 程序进行交互时,这些变量是非常必要的,去设置一些需要的信息:使用 `DISPLAY` 变量,我们指定服务器运行的机器是哪个,显示什么,引用的屏幕是什么,使用 `XAUTHORITY` 它提供一个到文件的路径,它包含了 Xorg 认证和授权信息。这个文件一般位于用于的 "home" 目录中。
+在我们的规则中接下来做的事情是,去使用 `ENV` 关键字:它既可以用于设置也可以用于去匹配环境变量。我们给 `DISPLAY` 和 `XAUTHORITY` 分配值。当我们使用 X 服务器程序进行交互去设置一些需要的信息时,这些变量是非常必要的:使用 `DISPLAY` 变量,我们指定服务器运行在哪个机器上,用的是哪个显示和屏幕;使用 `XAUTHORITY` 提供了一个文件路径,其包含了 Xorg 认证和授权信息。这个文件一般位于用户的家目录中。
-最后,我们使用了 `RUN` 字:它用于去运行外部程序。非常重要:这里没有立即运行,但是一旦所有的规则被解析,将运行各种动作。在这个案例中,我们使用 `xinput` 实用程序去改变触摸板的状态。我不想增解释这里的 `xinput` 的语法,它超出了本文的范围,只需要注意这个触摸板的 ID 是 `16`。
+最后,我们使用了 `RUN` 字:它用于运行外部程序。非常重要:这里没有立即运行,但是一旦所有的规则被解析,将运行各种动作。在这个案例中,我们使用 `xinput` 实用程序去改变触摸板的状态。我不想解释这里的 `xinput` 的语法,它超出了本文的范围,只需要注意这个触摸板的 ID 是 `16`。
规则设置完成之后,我们可以通过使用 `udevadm test` 命令去调试它。这个命令对调试非常有用,它并不真实去运行 `RUN` 指定的命令:
+
```
$ udevadm test --action="add" /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.1/0003:046D:C52F.0010/input/input39
```
-我们提供给命令的是使用 `--action` 选项,以及设备的 sysfs 路径的模拟动作。如果没有报告错误,说明我们的规则运行的很好。在真实的环境中去使用它,我们需要重新加载规则:
+
+我们提供给命令的是使用 `--action` 选项,以及设备的 sysfs 路径的模拟动作。如果没有报告错误,说明我们的规则运行的很好。要在真实的环境中去使用它,我们需要重新加载规则:
+
```
# udevadm control --reload
```
+
这个命令将重新加载规则文件,但是,它只对重新加载之后发生的事件有效果。
-我们通过创建一个 udev 规则了解了基本的概念和逻辑,这只是 udev 规则中众多的选项和可能的设置中的一小部分。udev 手册页提供了一个详尽的列表:如果你想深入了解,请参考它。
+我们通过创建一个 udev 规则了解了基本的概念和逻辑,这只是 udev 规则中众多的选项和可能的设置中的一小部分。udev 手册页提供了一个详尽的列表,如果你想深入了解,请参考它。
--------------------------------------------------------------------------------
via: https://linuxconfig.org/tutorial-on-how-to-write-basic-udev-rules-in-linux
-作者:[Egidio Docile ][a]
+作者:[Egidio Docile][a]
译者:[qhwdw](https://github.com/qhwdw)
-校对:[校对者ID](https://github.com/校对者ID)
+校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
diff --git a/translated/tech/20171230 What Is A Web Crawler- How Web Crawlers work.md b/published/20171230 What Is A Web Crawler- How Web Crawlers work.md
similarity index 55%
rename from translated/tech/20171230 What Is A Web Crawler- How Web Crawlers work.md
rename to published/20171230 What Is A Web Crawler- How Web Crawlers work.md
index a5ddd333d9..1206557dd1 100644
--- a/translated/tech/20171230 What Is A Web Crawler- How Web Crawlers work.md
+++ b/published/20171230 What Is A Web Crawler- How Web Crawlers work.md
@@ -1,17 +1,19 @@
什么是网络爬虫?网络爬虫如何工作?
======
-![](http://www.theitstuff.com/wp-content/uploads/2017/12/what-is-a-web-crawler-how-web-crawler-works.jpg)
-作为一个狂热的互联网人,你在生活中一定遇到过**网络爬虫**这个词。那么什么是网络爬虫,谁使用网络爬虫?它是如何工作的?让我们在本文中讨论这些。
-### **什么是网络爬虫?**
+![](http://www.theitstuff.com/wp-content/uploads/2017/12/what-is-a-web-crawler-how-web-crawler-works.jpg)
+
+作为一个狂热的互联网人,你在生活中一定遇到过网络爬虫这个词。那么什么是网络爬虫,谁使用网络爬虫?它是如何工作的?让我们在本文中讨论这些。
+
+### 什么是网络爬虫?
[![web crawler source code sync][1]][1]
-**网络爬虫**也被称为**网络蜘蛛**是一个在互联网中访问不同网站的不同页面的互联网软件或者机器人。网络爬虫从这些网页中检索各种信息并将其存储在其记录中。这些抓取工具主要用于从网站收集内容以改善搜索引擎的搜索。
+网络爬虫也被称为网络蜘蛛是一个在互联网中访问不同网站的各个页面的互联网软件或者机器人。网络爬虫从这些网页中检索各种信息并将其存储在其记录中。这些抓取工具主要用于从网站收集内容以改善搜索引擎的搜索。
-### **谁使用网络爬虫?**
+### 谁使用网络爬虫?
-大多数搜索引擎使用爬虫来收集来自公共网站的越来越多的内容,以便他们可以向用户提供更多相关内容。
+大多数搜索引擎使用爬虫来收集来自公共网站的越来越多的内容,以便它们可以向用户提供更多相关内容。
[![search engines use web crawlers][2]][2]
@@ -19,19 +21,19 @@
黑客使用网络爬虫来查找网站文件夹中的所有文件,主要是 HTML 和 Javascript。然后他们尝试通过使用 XSS 来攻击网站。
-### **网络爬虫如何工作?**
+### 网络爬虫如何工作?
网络爬虫是一个自动化脚本,它所有行为都是预定义的。爬虫首先从要访问的 URL 的初始列表开始,这些 URL 称为种子。然后它从初始的种子页面确定所有其他页面的超链接。网络爬虫然后将这些网页以 HTML 文档的形式保存,这些 HTML 文档稍后由搜索引擎处理并创建一个索引。
-### **网络爬虫和 SEO**
+### 网络爬虫和 SEO
-网络爬虫对 SEO,也就是搜索引擎优化(Search Engine Optimization )有很大的影响。由于许多用户使用 Google,让 Google 爬虫为你的大部分网站建立索引非常重要。这可以通过许多方式来完成,包括不使用重复的内容,并在其他网站上具有尽可能多的反向链接。许多网站被认为是滥用这些技巧,最终被引擎列入黑名单。
+网络爬虫对 SEO,也就是搜索引擎优化有很大的影响。由于许多用户使用 Google,让 Google 爬虫为你的大部分网站建立索引非常重要。这可以通过许多方式来完成,包括不使用重复的内容,并在其他网站上具有尽可能多的反向链接。许多网站被认为是滥用这些技巧,最终被引擎列入黑名单。
-### **Robots.txt**
+### robots.txt
-robots.txt 是爬虫在抓取你的网站时寻找的一种非常特殊的文件。该文件通常包含有关如何抓取你的网站的信息。一些网站管理员故意不希望他们的网站被索引也可以通过使用 robots.txt 文件阻止爬虫。
+`robots.txt` 是爬虫在抓取你的网站时寻找的一种非常特殊的文件。该文件通常包含有关如何抓取你的网站的信息。一些网站管理员故意不希望他们的网站被索引也可以通过使用 `robots.txt` 文件阻止爬虫。
-### **总结**
+### 总结
爬虫是一个小的软件机器人,可以用来浏览很多网站,并帮助搜索引擎从网上获得最相关的数据。
@@ -41,7 +43,7 @@ via: http://www.theitstuff.com/web-crawler-web-crawlers-work
作者:[Rishabh Kandari][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/) 荣誉推出
diff --git a/published/20180102 Linux uptime Command Explained for Beginners with Examples.md b/published/20180102 Linux uptime Command Explained for Beginners with Examples.md
new file mode 100644
index 0000000000..e538a4e8a9
--- /dev/null
+++ b/published/20180102 Linux uptime Command Explained for Beginners with Examples.md
@@ -0,0 +1,99 @@
+菜鸟们,通过这几个例子,包你学会 uptime 命令的用法
+======
+Linux 小白,若对系统管理有兴趣,或想成为资深用户,就需要对命令行有扎实的功底。你需要知道很多命令,其中一个就是 `uptime`。文本我们会通过一些容易理解的案例来讲解一下这个命令的基本用法。
+
+再开始前有必要说一下,文中的所有案例都在 Ubuntu 16.04 上测试过了。
+
+### Linux uptime 命令
+
+望名生义,`uptime` 命令告诉你系统启动了(运行了)多长时间。这是语法:
+
+```
+uptime [options]
+```
+
+这个工具的 man 页是这么说的:
+
+> `uptime `会在一行中显示下列信息:当前时间、系统运行了多久时间、当前登录的用户有多少,以及前 1、5 和 15 分钟系统的平均负载。
+
+
+下面这些问答形式的案例应该会让你对 `uptime` 命令有更好的了解。
+
+### Q1、如何使用 uptime 命令
+
+`uptime` 的基础用法很简单 —— 只需要输入命令名称然后按下回车就行。
+
+```
+uptime
+```
+
+这是输出:
+
+[![How to use the uptime command][1]][2]
+
+这里,第一项是当前时间,`up` 表示系统正在运行,`5:53` 是系统启动的总时间,最后是系统的负载信息。若你想深入了解,这里是 uptime man 页中关于最后一项信息的说明:
+
+> 系统负载是处于可运行或不可中断状态的进程的平均数。可运行状态的进程要么正在使用 CPU 要么在等待使用 CPU。 不可中断状态的进程则正在等待某些 I/O 访问,例如等待磁盘 IO。
+
+> 有三个时间间隔的平均值。负载均值的意义根据系统中 CPU 的数量不同而不同,负载为 1 对于一个只有单 CPU 的系统来说意味着负载满了,而对于一个拥有 4 CPU 的系统来说则意味着 75% 的时间里都是空闲的。
+
+### Q2、如何以更人性化的格式现实时间
+
+若你只想知道系统运行了多长时间,而且希望以更人性化的格式来显示,那么可以使用 `-p` 项。
+
+```
+uptime -p
+```
+
+这是输出:
+
+[![make the tool show up time in pretty format][3]][4]
+
+### Q3、如何让 uptime 显示系统启动的日期/时间
+
+你也可以指定 `uptme` 显示系统开始运行的时间和日期。方法是使用 `-s` 命令项。
+
+```
+uptime -s
+```
+
+这是输出:
+
+[![make uptime display date/time since when system is up][5]][6]
+
+### Q4、如何获取版本信息和帮助信息
+
+`-V` 获取版本信息,`-h` 获取帮助信息。
+
+```
+uptime -V
+
+uptime -h
+```
+
+[![How to get version information and help][7]][8]
+
+### 结论
+
+你可以看到,uptime 命令很容易理解也很容易使用。它没有提供很多的功能(命令选项也很少)。这里已经覆盖了它的所有功能了。因此只需要练习一下这些选项你就能在日常工作中使用它了。如果需要的话,你也可以查看它的 [man 页][9]。
+
+--------------------------------------------------------------------------------
+
+via: https://www.howtoforge.com/linux-uptime-command/
+
+作者:[Himanshu Arora][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.howtoforge.com
+[1]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/uptime-basic-usage1.png
+[2]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/big/uptime-basic-usage1.png
+[3]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/uptime-p-option.png
+[4]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/big/uptime-p-option.png
+[5]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/uptime-s.png
+[6]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/big/uptime-s.png
+[7]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/uptime-v-h.png
+[8]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/big/uptime-v-h.png
+[9]:https://linux.die.net/man/1/uptime
diff --git a/published/20180121 Shell Scripting a Bunco Game.md b/published/20180121 Shell Scripting a Bunco Game.md
new file mode 100644
index 0000000000..3d3d602aab
--- /dev/null
+++ b/published/20180121 Shell Scripting a Bunco Game.md
@@ -0,0 +1,215 @@
+脚本编程之骰子游戏
+======
+> Bunco:一个使你的“快艇”游戏看起来更复杂的掷骰子游戏。
+
+我已经有段时间没有编写游戏了,所以我觉得现在正是做一些这方面事情的时候。起初,我想“用脚本编一个 Halo游戏?”(LCTT 译注:Halo,光晕系列游戏),但我后来意识到这不太可能。来编一个叫 Bunco 的简单骰子游戏吧。你也许没有听说过,不过你母亲绝对知道 —— 当一群年轻女孩聚在当地的酒吧或者小酒馆的时候,这是个很受欢迎的游戏。
+
+游戏一共六轮,有三个骰子,规则很简单。每次投三个骰子,投出的点数要和当前的轮数数字一致。如果三个骰子都和当前的轮数一致,(比如,在第三轮三个骰子都是 3),你这一轮的分数就是 21。 如果三个骰子点数都相同但和轮数数字不同,你会得到最低的 Bunco 分数,只有 5 分。如果你投出的点数两者都不是,每一个和当前轮数相同的骰子得 1 分。
+
+要想玩这个游戏,它还涉及到团队合作,每一队(包括赢的那队),每人付 5 美元现金,或赢家得到其他类似现金奖励,并规定什么样的情况下才是赢家,例如“最多 Buncos” 或“最大点数”的情况下胜利。在这里我会跳过这些,而只关注投骰子这一部分。
+
+### 关于数学逻辑部分
+
+在专注于编程这方面的事之前,我先简单说说游戏背后的数学逻辑。要是有一个适当重量的骰子投骰子会变得很容易,任意一个值出现概率都是 1/6。
+
+完全随机小提示:不确定你的骰子是否每个面都是一样重量? 把它们扔进盐水里然后掷一下。YouTube 上有一些有趣的 D&D 世界的视频向你展示了怎么来做这个测试。
+
+所以三个骰子点数一样的几率有多大? 第一个骰子 100% 会有一个值 (这儿没什么可说的),所以很简单。第二个则有 16.66% 的概率和第一个骰子的值一样,接下来第三个骰子也是一样。 但当然,总概率是三个概率相乘的结果,所以最后,三个骰子值相等的概率是 2.7%。
+
+接下来,每个骰子和当前轮数数字相同的概率都是 16.66%。从数学角度来说:0.166 * 0.166 * 0.166 = 0.00462 。
+
+换句话说,你有 0.46% 的可能性投出 Bunco,比 200 次中出现一次的可能性还小一点。
+
+实际上还可以更难。如果你有 5 个骰子,投出 Mini Bunco (也可以叫做 Yahtzee “快艇”) 的概率为 0.077%,如果你想所有的骰子的值都相同,假设都是 6,那概率就是 0.00012%,那就基本上没什么可能了。
+
+### 开始编程吧
+
+和所有游戏一样,最难的部分是有一个能生成真正的随机数的随机数发生器。这一部分在 shell 脚本中还是很难实现的,所以我需要先回避这个问题,并假设 shell 内置的随机数发生器就够用了。
+
+不过好在内置的随机数发生器很好用。用 `$RANDOM` 就能得到一个 `0` 到 `MAXINT(32767)` 之间的随机值:
+
+```
+$ echo $RANDOM $RANDOM $RANDOM
+10252 22142 14863
+```
+
+为了确保产生的值一定是 `1` - `6` 之中的某个值,使用取余函数:
+
+```
+$ echo $(( $RANDOM % 6 ))
+3
+$ echo $(( $RANDOM % 6 ))
+0
+```
+
+哦!我忘了要加 `1`,下面是另一次尝试:
+
+```
+$ echo $(( ( $RANDOM % 6 ) + 1 ))
+6
+```
+
+下面要实现投骰子这一功能。这个函数中你可以声明一个局部变量来存储生成的随机值:
+
+```
+rolldie()
+{
+ local result=$1
+ rolled=$(( ( $RANDOM % 6 ) + 1 ))
+ eval $result=$rolled
+}
+```
+
+使用 `eval` 确保生成的随机数被实际存储在变量中。这一部分也很容易:
+
+```
+rolldie die1
+```
+
+这会为第一个骰子生成一个 `1` - `6` 之间的随机值存储到 `die1` 中。要掷 3 个骰子,很简单:
+
+```
+rolldie die1 ; rolldie die2 ; rolldie die3
+```
+
+现在判断下生成的值。首先,判断是不是 Bunco(3 个骰子值相同),然后是不是和当前轮数值也相同:
+
+
+```
+if [ $die1 -eq $die2 ] && [ $die2 -eq $die3 ] ; then
+ if [ $die1 -eq $round ] ; then
+ echo "BUNCO!"
+ score=25
+ else
+ echo "Mini Bunco!"
+ score=5
+ fi
+```
+
+这可能是所有判断语句中最难的部分了,注意第一个条件语句中这种不常用的写法 : `[ cond1 ] && [ cond2 ]`。如果你想写成 `cond1 -a cond2` ,这样也可以。在 shell 编程中,解决问题的方法往往不止一种。
+
+代码剩下的部分很直白,你只需要判断每个骰子的值是不是和本轮数字相同:
+
+```
+if [ $die1 -eq $round ] ; then
+ score=1
+fi
+if [ $die2 -eq $round ] ; then
+ score=$(( $score + 1 ))
+fi
+if [ $die3 -eq $round ] ; then
+ score=$(( $score + 1 ))
+fi
+```
+
+唯一要注意的是当出现 Bunco/Mini Bunco 就不需要再统计本轮分数了。所以整个第二部分的判断语句都要写在第一个条件语句的 `else` 中(为了判断 3 个骰子值是否都相同)。
+
+把所有的综合起来,然后在命令行中输入轮数,下面是现在的脚本执行后的结果:
+
+```
+$ sh bunco.sh 5
+You rolled: 1 1 5
+score = 1
+$ sh bunco.sh 2
+You rolled: 6 4 3
+score = 0
+$ sh bunco.sh 1
+You rolled: 1 1 1
+BUNCO!
+score = 25
+```
+
+竟然这么快就出现 Bunco 了? 好吧,就像我说的,shell 内置的随机数发生器在随机数产生这方面可能有些问题。
+
+你可以再写个脚本测试一下,去运行上述脚本几百次,然后看看 Bunco/Mini Bunco 出现次数所占的百分比。但是我想把这部分作为练习,留给亲爱的读者你们。不过,也许我下次会抽时间完成剩下的部分。
+
+让我们完成这一脚本吧,还有分数统计和一次性执行 6 次投骰子(这次不用再在命令行中手动输入当前轮数了)这两个功能。这也很容易,因为只是将上面的内容整个嵌套在里面,换句话说,就是将一个复杂的条件嵌套结构全部写在了一个函数中:
+
+```
+BuncoRound()
+{
+ # roll, display, and score a round of bunco!
+ # round is specified when invoked, score added to totalscore
+
+ local score=0 ; local round=$1 ; local hidescore=0
+
+ rolldie die1 ; rolldie die2 ; rolldie die3
+ echo Round $round. You rolled: $die1 $die2 $die3
+
+ if [ $die1 -eq $die2 ] && [ $die2 -eq $die3 ] ; then
+ if [ $die1 -eq $round ] ; then
+ echo " BUNCO!"
+ score=25
+ hidescore=1
+ else
+ echo " Mini Bunco!"
+ score=5
+ hidescore=1
+ fi
+ else
+ if [ $die1 -eq $round ] ; then
+ score=1
+ fi
+ if [ $die2 -eq $round ] ; then
+ score=$(( $score + 1 ))
+ fi
+ if [ $die3 -eq $round ] ; then
+ score=$(( $score + 1 ))
+ fi
+ fi
+
+ if [ $hidescore -eq 0 ] ; then
+ echo " score this round: $score"
+ fi
+
+ totalscore=$(( $totalscore + $score ))
+}
+```
+
+我承认,我忍不住自己做了一点改进,包括判断当前是 Bunco、Mini Bunco 还是其他需要计算分数的情况这一部分 (这就是 `$hidescore` 这一变量的作用)。
+
+实现这个简直是小菜一碟,只要一个循环就好了:
+
+```
+for round in {1..6} ; do
+ BuncoRound $round
+done
+```
+
+这就是现在所写的整个程序。让我们执行一下看看结果:
+
+```
+
+$ sh bunco.sh 1
+Round 1\. You rolled: 2 3 3
+ score this round: 0
+Round 2\. You rolled: 2 6 6
+ score this round: 1
+Round 3\. You rolled: 1 2 4
+ score this round: 0
+Round 4\. You rolled: 2 1 4
+ score this round: 1
+Round 5\. You rolled: 5 5 6
+ score this round: 2
+Round 6\. You rolled: 2 1 3
+ score this round: 0
+Game over. Your total score was 4
+
+```
+
+嗯。并不是很令人满意,可能是因为它只是游戏的一次完整执行。不过,你可以将脚本执行几百几千次,记下“Game over”出现的位置,然后用一些快速分析工具来看看你在每 6 轮中有几次得分超过 3 分。(要让 3 个骰子值相同,这个概率大概在 50% 左右)。
+
+无论怎么说,这都不是一个复杂的游戏,但是它是一个很有意思的小程序项目。现在,如果有一个 20 面的骰子,每一轮游戏有好几十轮,每轮都掷同一个骰子,情况又会发生什么变化呢?
+
+
+--------------------------------------------------------------------------------
+
+via: http://www.linuxjournal.com/content/shell-scripting-bunco-game
+
+作者:[Dave Taylor][a]
+译者:[wenwensnow](https://github.com/wenwensnow)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:http://www.linuxjournal.com/users/dave-taylor
diff --git a/sources/talk/20180213 Linux ldd Command Explained with Examples.md b/sources/talk/20180213 Linux ldd Command Explained with Examples.md
deleted file mode 100644
index e7a8f5e3a6..0000000000
--- a/sources/talk/20180213 Linux ldd Command Explained with Examples.md
+++ /dev/null
@@ -1,83 +0,0 @@
-Linux ldd Command Explained with Examples
-=========================================
-
-If your work involves deep knowledge of executables and shared libraries in Linux, there are several command line tools that you should be aware of. One of those is ldd, which you can use to access shared object dependencies. In this tutorial, we will discuss the basics of this utility using some easy to understand examples.
-
-Please note that all examples mentioned here have been tested on Ubuntu 16.04 LTS.
-
-### Linux ldd command
-
-As already mentioned in the beginning, the ldd command prints shared object dependencies. Following is the command's syntax:
-
-`ldd [option]... file...`
-
-And here's how the tool's man page explains it:
-
-```
-ldd prints the shared objects (shared libraries) required by each program or shared object
-
-specified on the command line.
-
-```
-
-The following Q&A-styled examples should give you a better idea on how ldd works.
-
-### Q1. How to use ldd?
-
-Basic usage of ldd is fairly simple - just run the 'ldd' command along with an executable or shared object file name as input.
-
-`ldd [object-name]`
-
-For example:
-
-`ldd test`
-
-[![How to use ldd](https://www.howtoforge.com/images/command-tutorial/ldd-basic.png)](https://www.howtoforge.com/images/command-tutorial/big/ldd-basic.png)
-
-So you can see all shared library dependencies have been produced in output.
-
-### Q2. How to make ldd produce detailed information in output?
-
-If you want ldd to produce detailed information, including symbol versioning data, you can use the -v command line option. For example, the command
-
-`ldd -v test`
-
-produced the following in output when the **-v** command line option was used:
-
-[![How to make ldd produce detailed information in output](https://www.howtoforge.com/images/command-tutorial/ldd-v-option.png)](https://www.howtoforge.com/images/command-tutorial/big/ldd-v-option.png)
-
-### Q3. How to make ldd produce unused direct dependencies?
-
-For this info, use the **-u** command line option. Here's an example:
-
-`ldd -u test`
-
-[![How to make ldd produce unused direct dependencies](https://www.howtoforge.com/images/command-tutorial/ldd-u-test.png)](https://www.howtoforge.com/images/command-tutorial/big/ldd-u-test.png)
-
-### Q4. How make ldd perform relocations?
-
-There are a couple of command line options you can use here: **-d** and **-r**. While the former tells ldd to perform data relocations, the latter makes ldd perform relocations for both data objects and functions. In both cases, the tool reports missing ELF objects (if any).
-
-`ldd -d`
-
-`ldd -r`
-
-### Q5. How get help on ldd?
-
-The --help command line option makes ldd produce useful usage-related information for the tool.
-
-`ldd --help`
-
-[![How get help on ldd](https://www.howtoforge.com/images/command-tutorial/ldd-help-option.png)](https://www.howtoforge.com/images/command-tutorial/big/ldd-help-option.png)
-
-### Conclusion
-
-Agreed, ldd doesn't fall into the category where tools like cd, rm, and mkdir fit in. That's because it's built for a specific purpose, and it does what it promises. The utility offers limited command line options, and we've covered most of them here. To know more, head to ldd's [man page](https://linux.die.net/man/1/ldd).
-
-* * *
-
-via: [https://www.howtoforge.com/linux-ldd-command/](https://www.howtoforge.com/linux-ldd-command/)
-
-作者: [Himanshu Arora](https://www.howtoforge.com/) 选题者: [@lujun9972](https://github.com/lujun9972) 译者: [译者ID](https://github.com/译者ID) 校对: [校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
\ No newline at end of file
diff --git a/sources/tech/20090627 30 Linux System Monitoring Tools Every SysAdmin Should Know.md b/sources/tech/20090627 30 Linux System Monitoring Tools Every SysAdmin Should Know.md
deleted file mode 100644
index 7e3f5708dd..0000000000
--- a/sources/tech/20090627 30 Linux System Monitoring Tools Every SysAdmin Should Know.md
+++ /dev/null
@@ -1,630 +0,0 @@
-Translating by jessie-pang
-
-30 Linux System Monitoring Tools Every SysAdmin Should Know
-======
-
-Need to monitor Linux server performance? Try these built-in commands and a few add-on tools. Most distributions come with tons of Linux monitoring tools. These tools provide metrics which can be used to get information about system activities. You can use these tools to find the possible causes of a performance problem. The commands discussed below are some of the most fundamental commands when it comes to system analysis and debugging Linux server issues such as:
-
- 1. Finding out system bottlenecks
- 2. Disk (storage) bottlenecks
- 3. CPU and memory bottlenecks
- 4. Network bottleneck.
-
-
-### 1. top - Process activity monitoring command
-
-top command display Linux processes. It provides a dynamic real-time view of a running system i.e. actual process activity. By default, it displays the most CPU-intensive tasks running on the server and updates the list every five seconds.
-
-![](https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/top-Linux-monitoring-command.jpg)
-
-Fig.01: Linux top command
-
-#### Commonly Used Hot Keys With top Linux monitoring tools
-
-Here is a list of useful hot keys:
-
-| Hot Key | Usage |
-|---|---|
-| t | Displays summary information off and on. |
-| m | Displays memory information off and on. |
-| A | Sorts the display by top consumers of various system resources. Useful for quick identification of performance-hungry tasks on a system. |
-| f | Enters an interactive configuration screen for top. Helpful for setting up top for a specific task. |
-| o | Enables you to interactively select the ordering within top. |
-| r | Issues renice command. |
-| k | Issues kill command. |
-| z | Turn on or off color/mono |
-
-[How do I Find Out Linux CPU Utilization?][1]
-
-### 2. vmstat - Virtual memory statistics
-
-The vmstat command reports information about processes, memory, paging, block IO, traps, and cpu activity.
-`# vmstat 3`
-Sample Outputs:
-```
-procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
- r b swpd free buff cache si so bi bo in cs us sy id wa st
- 0 0 0 2540988 522188 5130400 0 0 2 32 4 2 4 1 96 0 0
- 1 0 0 2540988 522188 5130400 0 0 0 720 1199 665 1 0 99 0 0
- 0 0 0 2540956 522188 5130400 0 0 0 0 1151 1569 4 1 95 0 0
- 0 0 0 2540956 522188 5130500 0 0 0 6 1117 439 1 0 99 0 0
- 0 0 0 2540940 522188 5130512 0 0 0 536 1189 932 1 0 98 0 0
- 0 0 0 2538444 522188 5130588 0 0 0 0 1187 1417 4 1 96 0 0
- 0 0 0 2490060 522188 5130640 0 0 0 18 1253 1123 5 1 94 0 0
-```
-
-#### Display Memory Utilization Slabinfo
-
-`# vmstat -m`
-
-#### Get Information About Active / Inactive Memory Pages
-
-`# vmstat -a`
-[How do I find out Linux Resource utilization to detect system bottlenecks?][2]
-
-### 3. w - Find out who is logged on and what they are doing
-
-[w command][3] displays information about the users currently on the machine, and their processes.
-```
-# w username
-# w vivek
-```
-Sample Outputs:
-```
- 17:58:47 up 5 days, 20:28, 2 users, load average: 0.36, 0.26, 0.24
-USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
-root pts/0 10.1.3.145 14:55 5.00s 0.04s 0.02s vim /etc/resolv.conf
-root pts/1 10.1.3.145 17:43 0.00s 0.03s 0.00s w
-```
-
-### 4. uptime - Tell how long the Linux system has been running
-
-uptime command can be used to see how long the server has been running. The current time, how long the system has been running, how many users are currently logged on, and the system load averages for the past 1, 5, and 15 minutes.
-`# uptime`
-Output:
-```
- 18:02:41 up 41 days, 23:42, 1 user, load average: 0.00, 0.00, 0.00
-```
-
-1 can be considered as optimal load value. The load can change from system to system. For a single CPU system 1 - 3 and SMP systems 6-10 load value might be acceptable.
-
-### 5. ps - Displays the Linux processes
-
-ps command will report a snapshot of the current processes. To select all processes use the -A or -e option:
-`# ps -A`
-Sample Outputs:
-```
- PID TTY TIME CMD
- 1 ? 00:00:02 init
- 2 ? 00:00:02 migration/0
- 3 ? 00:00:01 ksoftirqd/0
- 4 ? 00:00:00 watchdog/0
- 5 ? 00:00:00 migration/1
- 6 ? 00:00:15 ksoftirqd/1
-....
-.....
- 4881 ? 00:53:28 java
- 4885 tty1 00:00:00 mingetty
- 4886 tty2 00:00:00 mingetty
- 4887 tty3 00:00:00 mingetty
- 4888 tty4 00:00:00 mingetty
- 4891 tty5 00:00:00 mingetty
- 4892 tty6 00:00:00 mingetty
- 4893 ttyS1 00:00:00 agetty
-12853 ? 00:00:00 cifsoplockd
-12854 ? 00:00:00 cifsdnotifyd
-14231 ? 00:10:34 lighttpd
-14232 ? 00:00:00 php-cgi
-54981 pts/0 00:00:00 vim
-55465 ? 00:00:00 php-cgi
-55546 ? 00:00:00 bind9-snmp-stat
-55704 pts/1 00:00:00 ps
-```
-
-ps is just like top but provides more information.
-
-#### Show Long Format Output
-
-`# ps -Al`
-To turn on extra full mode (it will show command line arguments passed to process):
-`# ps -AlF`
-
-#### Display Threads ( LWP and NLWP)
-
-`# ps -AlFH`
-
-#### Watch Threads After Processes
-
-`# ps -AlLm`
-
-#### Print All Process On The Server
-
-```
-# ps ax
-# ps axu
-```
-
-#### Want To Print A Process Tree?
-
-```
-# ps -ejH
-# ps axjf
-# [pstree][4]
-```
-
-#### Get Security Information of Linux Process
-
-```
-# ps -eo euser,ruser,suser,fuser,f,comm,label
-# ps axZ
-# ps -eM
-```
-
-#### Let Us Print Every Process Running As User Vivek
-
-```
-# ps -U vivek -u vivek u
-```
-
-#### Configure ps Command Output In a User-Defined Format
-
-```
-# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
-# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
-# ps -eopid,tt,user,fname,tmout,f,wchan
-```
-
-#### Try To Display Only The Process IDs of Lighttpd
-
-```
-# ps -C lighttpd -o pid=
-```
-OR
-```
-# pgrep lighttpd
-```
-OR
-```
-# pgrep -u vivek php-cgi
-```
-
-#### Print The Name of PID 55977
-
-```
-# ps -p 55977 -o comm=
-```
-
-#### Top 10 Memory Consuming Process
-
-```
-# ps -auxf | sort -nr -k 4 | head -10
-```
-
-#### Show Us Top 10 CPU Consuming Process
-
-`# ps -auxf | sort -nr -k 3 | head -10`
-
-[Show All Running Processes in Linux][5]
-
-### 6. free - Show Linux server memory usage
-
-free command shows the total amount of free and used physical and swap memory in the system, as well as the buffers used by the kernel.
-`# free `
-Sample Output:
-```
- total used free shared buffers cached
-Mem: 12302896 9739664 2563232 0 523124 5154740
--/+ buffers/cache: 4061800 8241096
-Swap: 1052248 0 1052248
-```
-
-1. [Linux Find Out Virtual Memory PAGESIZE][50]
-2. [Linux Limit CPU Usage Per Process][51]
-3. [How much RAM does my Ubuntu / Fedora Linux desktop PC have?][52]
-
-
-### 7. iostat - Montor Linux average CPU load and disk activity
-
-iostat command report Central Processing Unit (CPU) statistics and input/output statistics for devices, partitions and network filesystems (NFS).
-`# iostat `
-Sample Outputs:
-```
-Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
-
-avg-cpu: %user %nice %system %iowait %steal %idle
- 3.50 0.09 0.51 0.03 0.00 95.86
-
-Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
-sda 22.04 31.88 512.03 16193351 260102868
-sda1 0.00 0.00 0.00 2166 180
-sda2 22.04 31.87 512.03 16189010 260102688
-sda3 0.00 0.00 0.00 1615 0
-```
-
-[Linux Track NFS Directory / Disk I/O Stats][6]
-
-### 8. sar - Monitor, collect and report Linux system activity
-
-sar command used to collect, report, and save system activity information. To see network counter, enter:
-`# sar -n DEV | more`
-The network counters from the 24th:
-`# sar -n DEV -f /var/log/sa/sa24 | more`
-You can also display real time usage using sar:
-`# sar 4 5`
-Sample Outputs:
-```
-Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
-
-06:45:12 PM CPU %user %nice %system %iowait %steal %idle
-06:45:16 PM all 2.00 0.00 0.22 0.00 0.00 97.78
-06:45:20 PM all 2.07 0.00 0.38 0.03 0.00 97.52
-06:45:24 PM all 0.94 0.00 0.28 0.00 0.00 98.78
-06:45:28 PM all 1.56 0.00 0.22 0.00 0.00 98.22
-06:45:32 PM all 3.53 0.00 0.25 0.03 0.00 96.19
-Average: all 2.02 0.00 0.27 0.01 0.00 97.70
-```
-
-+ [How to collect Linux system utilization data into a file][53]
-+ [How To Create sar Graphs With kSar To Identifying Linux Bottlenecks][54]
-
-
-### 9. mpstat - Monitor multiprocessor usage on Linux
-
-mpstat command displays activities for each available processor, processor 0 being the first one. mpstat -P ALL to display average CPU utilization per processor:
-`# mpstat -P ALL`
-Sample Output:
-```
-Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
-
-06:48:11 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
-06:48:11 PM all 3.50 0.09 0.34 0.03 0.01 0.17 0.00 95.86 1218.04
-06:48:11 PM 0 3.44 0.08 0.31 0.02 0.00 0.12 0.00 96.04 1000.31
-06:48:11 PM 1 3.10 0.08 0.32 0.09 0.02 0.11 0.00 96.28 34.93
-06:48:11 PM 2 4.16 0.11 0.36 0.02 0.00 0.11 0.00 95.25 0.00
-06:48:11 PM 3 3.77 0.11 0.38 0.03 0.01 0.24 0.00 95.46 44.80
-06:48:11 PM 4 2.96 0.07 0.29 0.04 0.02 0.10 0.00 96.52 25.91
-06:48:11 PM 5 3.26 0.08 0.28 0.03 0.01 0.10 0.00 96.23 14.98
-06:48:11 PM 6 4.00 0.10 0.34 0.01 0.00 0.13 0.00 95.42 3.75
-06:48:11 PM 7 3.30 0.11 0.39 0.03 0.01 0.46 0.00 95.69 76.89
-```
-
-[Linux display each multiple SMP CPU processors utilization individually][7].
-
-### 10. pmap - Montor process memory usage on Linux
-
-pmap command report memory map of a process. Use this command to find out causes of memory bottlenecks.
-`# pmap -d PID`
-To display process memory information for pid # 47394, enter:
-`# pmap -d 47394`
-Sample Outputs:
-```
-47394: /usr/bin/php-cgi
-Address Kbytes Mode Offset Device Mapping
-0000000000400000 2584 r-x-- 0000000000000000 008:00002 php-cgi
-0000000000886000 140 rw--- 0000000000286000 008:00002 php-cgi
-00000000008a9000 52 rw--- 00000000008a9000 000:00000 [ anon ]
-0000000000aa8000 76 rw--- 00000000002a8000 008:00002 php-cgi
-000000000f678000 1980 rw--- 000000000f678000 000:00000 [ anon ]
-000000314a600000 112 r-x-- 0000000000000000 008:00002 ld-2.5.so
-000000314a81b000 4 r---- 000000000001b000 008:00002 ld-2.5.so
-000000314a81c000 4 rw--- 000000000001c000 008:00002 ld-2.5.so
-000000314aa00000 1328 r-x-- 0000000000000000 008:00002 libc-2.5.so
-000000314ab4c000 2048 ----- 000000000014c000 008:00002 libc-2.5.so
-.....
-......
-..
-00002af8d48fd000 4 rw--- 0000000000006000 008:00002 xsl.so
-00002af8d490c000 40 r-x-- 0000000000000000 008:00002 libnss_files-2.5.so
-00002af8d4916000 2044 ----- 000000000000a000 008:00002 libnss_files-2.5.so
-00002af8d4b15000 4 r---- 0000000000009000 008:00002 libnss_files-2.5.so
-00002af8d4b16000 4 rw--- 000000000000a000 008:00002 libnss_files-2.5.so
-00002af8d4b17000 768000 rw-s- 0000000000000000 000:00009 zero (deleted)
-00007fffc95fe000 84 rw--- 00007ffffffea000 000:00000 [ stack ]
-ffffffffff600000 8192 ----- 0000000000000000 000:00000 [ anon ]
-mapped: 933712K writeable/private: 4304K shared: 768000K
-```
-
-The last line is very important:
-
- * **mapped: 933712K** total amount of memory mapped to files
- * **writeable/private: 4304K** the amount of private address space
- * **shared: 768000K** the amount of address space this process is sharing with others
-
-
-
-[Linux find the memory used by a program / process using pmap command][8]
-
-### 11. netstat - Linux network and statistics monitoring tool
-
-netstat command displays network connections, routing tables, interface statistics, masquerade connections, and multicast memberships.
-```
-# netstat -tulpn
-# netstat -nat
-```
-
-### 12. ss - Network Statistics
-
-ss command use to dump socket statistics. It allows showing information similar to netstat. Please note that the netstat is mostly obsolete. Hence you need to use ss command. To ss all TCP and UDP sockets on Linux:
-`# ss -t -a`
-OR
-`# ss -u -a `
-Show all TCP sockets with process SELinux security contexts:
-`# ss -t -a -Z `
-See the following resources about ss and netstat commands:
-
-+ [ss: Display Linux TCP / UDP Network and Socket Information][56]
-+ [Get Detailed Information About Particular IP address Connections Using netstat Command][57]
-
-
-### 13. iptraf - Get real-time network statistics on Linux
-
-iptraf command is interactive colorful IP LAN monitor. It is an ncurses-based IP LAN monitor that generates various network statistics including TCP info, UDP counts, ICMP and OSPF information, Ethernet load info, node stats, IP checksum errors, and others. It can provide the following info in easy to read format:
-
- * Network traffic statistics by TCP connection
- * IP traffic statistics by network interface
- * Network traffic statistics by protocol
- * Network traffic statistics by TCP/UDP port and by packet size
- * Network traffic statistics by Layer2 address
-
-![Fig.02: General interface statistics: IP traffic statistics by network interface ][9]
-
-Fig.02: General interface statistics: IP traffic statistics by network interface
-
-![Fig.03 Network traffic statistics by TCP connection][10]
-
-Fig.03 Network traffic statistics by TCP connection
-
-[Install IPTraf on a Centos / RHEL / Fedora Linux To Get Network Statistics][11]
-
-### 14. tcpdump - Detailed network traffic analysis
-
-tcpdump command is simple command that dump traffic on a network. However, you need good understanding of TCP/IP protocol to utilize this tool. For.e.g to display traffic info about DNS, enter:
-`# tcpdump -i eth1 'udp port 53'`
-View all IPv4 HTTP packets to and from port 80, i.e. print only packets that contain data, not, for example, SYN and FIN packets and ACK-only packets, enter:
-`# tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'`
-Show all FTP session to 202.54.1.5, enter:
-`# tcpdump -i eth1 'dst 202.54.1.5 and (port 21 or 20'`
-Print all HTTP session to 192.168.1.5:
-`# tcpdump -ni eth0 'dst 192.168.1.5 and tcp and port http'`
-Use [wireshark to view detailed][12] information about files, enter:
-`# tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80`
-
-### 15. iotop - Linux I/O monitor
-
-iotop command monitor, I/O usage information, using the Linux kernel. It shows a table of current I/O usage sorted by processes or threads on the server.
-`$ sudo iotop`
-Sample outputs:
-
-![iotop monitoring linux disk read write IO][13]
-
-[Linux iotop: Check What's Stressing And Increasing Load On Your Hard Disks][14]
-
-### 16. htop - interactive process viewer
-
-htop is a free and open source ncurses-based process viewer for Linux. It is much better than top command. Very easy to use. You can select processes for killing or renicing without using their PIDs or leaving htop interface.
-`$ htop`
-Sample outputs:
-
-![htop process viewer for Linux][15]
-
-[CentOS / RHEL: Install htop An Interactive Text-mode Process Viewer][58]
-
-
-### 17. atop - Advanced Linux system & process monitor
-
-atop is a very powerful and an interactive monitor to view the load on a Linux system. It displays the most critical hardware resources from a performance point of view. You can quickly see CPU, memory, disk and network performance. It shows which processes are responsible for the indicated load concerning CPU and memory load on a process level.
-`$ atop`
-
-![atop Command Line Tools to Monitor Linux Performance][16]
-
-[CentOS / RHEL: Install atop (Advanced System & Process Monitor) Utility][59]
-
-
-### 18. ac and lastcomm -
-
-You must monitor process and login activity on your Linux server. The psacct or acct package contains several utilities for monitoring process activities, including:
-
- 1. ac command : Show statistics about users' connect time
- 2. [lastcomm command][17] : Show info about about previously executed commands
- 3. accton command : Turns process accounting on or off
- 4. sa command : Summarizes accounting information
-
-
-
-[How to keep a detailed audit trail of what's being done on your Linux systems][18]
-
-### 19. monit - Process supervision
-
-Monit is a free and open source software that acts as process supervision. It comes with the ability to restart services which have failed. You can use Systemd, daemontools or any other such tool for the same purpose. [This tutorial shows how to install and configure monit as Process supervision on Debian or Ubuntu Linux][19].
-
-
-### 20. nethogs- Find out PIDs that using most bandwidth on Linux
-
-NetHogs is a small but handy net top tool. It groups bandwidth by process name such as Firefox, wget and so on. If there is a sudden burst of network traffic, start NetHogs. You will see which PID is causing bandwidth surge.
-`$ sudo nethogs`
-
-![nethogs linux monitoring tools open source][20]
-
-[Linux: See Bandwidth Usage Per Process With Nethogs Tool][21]
-
-### 21. iftop - Show bandwidth usage on an interface by host
-
-iftop command listens to network traffic on a given interface name such as eth0. [It displays a table of current bandwidth usage by pairs of host][22]s.
-`$ sudo iftop`
-
-![iftop in action][23]
-
-### 22. vnstat - A console-based network traffic monitor
-
-vnstat is easy to use console-based network traffic monitor for Linux. It keeps a log of hourly, daily and monthly network traffic for the selected interface(s).
-`$ vnstat `
-
-![vnstat linux network traffic monitor][25]
-
-+ [Keeping a Log Of Daily Network Traffic for ADSL or Dedicated Remote Linux Server][60]
-+ [CentOS / RHEL: Install vnStat Network Traffic Monitor To Keep a Log Of Daily Traffic][61]
-+ [CentOS / RHEL: View Vnstat Graphs Using PHP Web Interface Frontend][62]
-
-
-### 23. nmon - Linux systems administrator, tuner, benchmark tool
-
-nmon is a Linux sysadmin's ultimate tool for the tunning purpose. It can show CPU, memory, network, disks, file systems, NFS, top process resources and partition information from the cli.
-`$ nmon`
-
-![nmon command][26]
-
-[Install and Use nmon Tool To Monitor Linux Systems Performance][27]
-
-### 24. glances - Keep an eye on Linux system
-
-glances is an open source cross-platform monitoring tool. It provides tons of information on the small screen. It can also work in client/server mode.
-`$ glances`
-
-![Glances][28]
-
-[Linux: Keep An Eye On Your System With Glances Monitor][29]
-
-### 25. strace - Monitor system calls on Linux
-
-Want to trace Linux system calls and signals? Try strace command. This is useful for debugging webserver and other server problems. See how to use to [trace the process and][30] see What it is doing.
-
-### 26. /proc/ file system - Various Linux kernel statistics
-
-/proc file system provides detailed information about various hardware devices and other Linux kernel information. See [Linux kernel /proc][31] documentations for further details. Common /proc examples:
-```
-# cat /proc/cpuinfo
-# cat /proc/meminfo
-# cat /proc/zoneinfo
-# cat /proc/mounts
-```
-
-### 27. Nagios - Linux server/network monitoring
-
-[Nagios][32] is a popular open source computer system and network monitoring application software. You can easily monitor all your hosts, network equipment and services. It can send alert when things go wrong and again when they get better. [FAN is][33] "Fully Automated Nagios". FAN goals are to provide a Nagios installation including most tools provided by the Nagios Community. FAN provides a CDRom image in the standard ISO format, making it easy to easilly install a Nagios server. Added to this, a wide bunch of tools are including to the distribution, in order to improve the user experience around Nagios.
-
-### 28. Cacti - Web-based Linux monitoring tool
-
-Cacti is a complete network graphing solution designed to harness the power of RRDTool's data storage and graphing functionality. Cacti provides a fast poller, advanced graph templating, multiple data acquisition methods, and user management features out of the box. All of this is wrapped in an intuitive, easy to use interface that makes sense for LAN-sized installations up to complex networks with hundreds of devices. It can provide data about network, CPU, memory, logged in users, Apache, DNS servers and much more. See how [to install and configure Cacti network graphing][34] tool under CentOS / RHEL.
-
-### 29. KDE System Guard - Real-time Linux systems reporting and graphing
-
-KSysguard is a network enabled task and system monitor application for KDE desktop. This tool can be run over ssh session. It provides lots of features such as a client/server architecture that enables monitoring of local and remote hosts. The graphical front end uses so-called sensors to retrieve the information it displays. A sensor can return simple values or more complex information like tables. For each type of information, one or more displays are provided. Displays are organized in worksheets that can be saved and loaded independently from each other. So, KSysguard is not only a simple task manager but also a very powerful tool to control large server farms.
-
-![Fig.05 KDE System Guard][35]
-
-Fig.05 KDE System Guard {Image credit: Wikipedia}
-
-See [the KSysguard handbook][36] for detailed usage.
-
-### 30. Gnome Linux system monitor
-
-The System Monitor application enables you to display basic system information and monitor system processes, usage of system resources, and file systems. You can also use System Monitor to modify the behavior of your system. Although not as powerful as the KDE System Guard, it provides the basic information which may be useful for new users:
-
- * Displays various basic information about the computer's hardware and software.
- * Linux Kernel version
- * GNOME version
- * Hardware
- * Installed memory
- * Processors and speeds
- * System Status
- * Currently available disk space
- * Processes
- * Memory and swap space
- * Network usage
- * File Systems
- * Lists all mounted filesystems along with basic information about each.
-
-![Fig.06 The Gnome System Monitor application][37]
-
-Fig.06 The Gnome System Monitor application
-
-### Bonus: Additional Tools
-
-A few more tools:
-
- * [nmap][38] - scan your server for open ports.
- * [lsof][39] - list open files, network connections and much more.
- * [ntop][40] web based tool - ntop is the best tool to see network usage in a way similar to what top command does for processes i.e. it is network traffic monitoring software. You can see network status, protocol wise distribution of traffic for UDP, TCP, DNS, HTTP and other protocols.
- * [Conky][41] - Another good monitoring tool for the X Window System. It is highly configurable and is able to monitor many system variables including the status of the CPU, memory, swap space, disk storage, temperatures, processes, network interfaces, battery power, system messages, e-mail inboxes etc.
- * [GKrellM][42] - It can be used to monitor the status of CPUs, main memory, hard disks, network interfaces, local and remote mailboxes, and many other things.
- * [mtr][43] - mtr combines the functionality of the traceroute and ping programs in a single network diagnostic tool.
- * [vtop][44] - graphical terminal activity monitor on Linux
-
-
-
-Did I miss something? Please add your favorite system motoring tool in the comments.
-
-#### about the author
-
-The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on [Twitter][45], [Facebook][46], [Google+][47].
-
---------------------------------------------------------------------------------
-
-via: https://www.cyberciti.biz/tips/top-linux-monitoring-tools.html
-
-作者:[Vivek Gite][a]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:https://www.cyberciti.biz
-[1]:https://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html
-[2]:https://www.cyberciti.biz/tips/linux-resource-utilization-to-detect-system-bottlenecks.html
-[3]:https://www.cyberciti.biz/faq/unix-linux-w-command-examples-syntax-usage-2/ (See Linux/Unix w command examples for more info)
-[4]:https://www.cyberciti.biz/faq/unix-linux-pstree-command-examples-shows-running-processestree/
-[5]:https://www.cyberciti.biz/faq/show-all-running-processes-in-linux/
-[6]:https://www.cyberciti.biz/faq/howto-linux-track-nfs-client-disk-metrics/
-[7]:https://www.cyberciti.biz/faq/linux-mpstat-command-report-processors-related-statistics/
-[8]:https://www.cyberciti.biz/tips/howto-find-memory-used-by-program.html
-[9]:https://www.cyberciti.biz/media/new/tips/2009/06/iptraf3.png (Fig.02: General interface statistics: IP traffic statistics by network interface )
-[10]:https://www.cyberciti.biz/media/new/tips/2009/06/iptraf2.png (Fig.03 Network traffic statistics by TCP connection)
-[11]:https://www.cyberciti.biz/faq/install-iptraf-centos-redhat-fedora-linux/
-[12]:https://www.cyberciti.biz/faq/linux-unix-bsd-apache-tcpdump-http-packets-sniffing/
-[13]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/iotop-monitoring-linux-disk-read-write-IO.jpg
-[14]:https://www.cyberciti.biz/hardware/linux-iotop-simple-top-like-io-monitor/
-[15]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/htop-process-viewer-for-Linux.jpg
-[16]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/atop-Command-Line-Tools-to-Monitor-Linux-Performance.jpg
-[17]:https://www.cyberciti.biz/faq/linux-unix-lastcomm-command-examples-usage-syntax/ (See Linux/Unix lastcomm command examples for more info)
-[18]:https://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html
-[19]:https://www.cyberciti.biz/faq/how-to-install-and-use-monit-on-ubuntudebian-linux-server/
-[20]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/nethogs-linux-monitoring-tools-open-source.jpg
-[21]:https://www.cyberciti.biz/faq/linux-find-out-what-process-is-using-bandwidth/
-[22]:https://www.cyberciti.biz/tips/linux-display-bandwidth-usage-on-network-interface-by-host.html
-[23]:https://www.cyberciti.biz/media/new/images/faq/2013/11/iftop-outputs-small.gif
-[24]:https://www.cyberciti.biz/faq/centos-fedora-redhat-install-iftop-bandwidth-monitoring-tool/
-[25]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/vnstat-linux-network-traffic-monitor.jpg
-[26]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/nmon-command.jpg
-[27]:https://www.cyberciti.biz/faq/nmon-performance-analyzer-linux-server-tool/
-[28]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/glances-keep-an-eye-on-linux.jpg
-[29]:https://www.cyberciti.biz/faq/linux-install-glances-monitoring-tool/
-[30]:https://www.cyberciti.biz/tips/linux-strace-command-examples.html
-[31]:https://www.cyberciti.biz/files/linux-kernel/Documentation/filesystems/proc.txt
-[32]:http://www.nagios.org/
-[33]:http://fannagioscd.sourceforge.net/drupal/
-[34]:https://www.cyberciti.biz/faq/fedora-rhel-install-cacti-monitoring-rrd-software/
-[35]:https://www.cyberciti.biz/media/new/tips/2009/06/kde-systemguard-screenshot.png (Fig.05 KDE System Guard KDE task manager and performance monitor.)
-[36]:https://docs.kde.org/stable5/en/kde-workspace/ksysguard/index.html
-[37]:https://www.cyberciti.biz/media/new/tips/2009/06/gnome-system-monitor.png (Fig.06 The Gnome System Monitor application)
-[38]:https://www.cyberciti.biz/tips/linux-scanning-network-for-open-ports.html
-[39]:https://www.cyberciti.biz/tips/tag/lsof-command
-[40]:https://www.cyberciti.biz/faq/debian-ubuntu-install-ntop-network-traffic-monitoring-software/ (Debian / Ubuntu Linux Install ntop To See Network Usage / Network Status)
-[41]:https://github.com/brndnmtthws/conky
-[42]:http://gkrellm.srcbox.net/
-[43]:https://www.cyberciti.biz/tips/finding-out-a-bad-or-simply-overloaded-network-link-with-linuxunix-oses.html
-[44]:https://www.cyberciti.biz/faq/how-to-install-and-use-vtop-graphical-terminal-activity-monitor-on-linux/
-[45]:https://twitter.com/nixcraft
-[46]:https://facebook.com/nixcraft
-[47]:https://plus.google.com/+CybercitiBiz
-[50]:https://www.cyberciti.biz/faq/linux-check-the-size-of-pagesize/
-[51]:https://www.cyberciti.biz/faq/cpu-usage-limiter-for-linux/
-[52]:https://www.cyberciti.biz/tips/how-much-ram-does-my-linux-system.html
-[53]:https://www.cyberciti.biz/tips/howto-write-system-utilization-data-to-file.html
-[54]:https://www.cyberciti.biz/tips/identifying-linux-bottlenecks-sar-graphs-with-ksar.html
-[56]:https://www.cyberciti.biz/tips/linux-investigate-sockets-network-connections.html
-[57]:https://www.cyberciti.biz/tips/netstat-command-tutorial-examples.html
-[58]:https://www.cyberciti.biz/faq/centos-redhat-linux-install-htop-command-using-yum/
-[59]:https://www.cyberciti.biz/faq/centos-redhat-linux-install-atop-command-using-yum/
-[60]:https://www.cyberciti.biz/tips/linux-display-bandwidth-usage-on-network-interface-by-host.html
-[61]:https://www.cyberciti.biz/faq/centos-redhat-fedora-linux-install-vnstat-bandwidth-monitor/
-[62]:https://www.cyberciti.biz/faq/centos-redhat-fedora-linux-vnstat-php-webinterface-frontend-config/
diff --git a/sources/tech/20171018 Install a Centralized Log Server with Rsyslog in Debian 9.md b/sources/tech/20171018 Install a Centralized Log Server with Rsyslog in Debian 9.md
deleted file mode 100644
index 8537888a36..0000000000
--- a/sources/tech/20171018 Install a Centralized Log Server with Rsyslog in Debian 9.md
+++ /dev/null
@@ -1,226 +0,0 @@
-Translating by qhwdw
-Install a Centralized Log Server with Rsyslog in Debian 9
-======
-
-In Linux, the log files are files that contain messages about the system functions which are used by system administrators to identify eventual issues on the machines. The logs help administrators to visualize the events that happened in the system over time periods. Usually, all log files are kept under **/var/log** directory in Linux. In this location, there are several types of log files for storing various messages, such as a log file for recording system events, a log file for security related messages, other log files dedicated for kernel, users or cron jobs. The main purpose of log files is to troubleshoot system problems. Most log files in Linux are controlled by rsyslogd service. On newer releases of Linux distributions, the log files are also controlled and managed by the journald system service, which is a part of systemd initialization program. The logs stored by journal daemon are written in a binary format and are mainly volatile, stored in RAM and in a ring-buffer in /run/log/journal/. However, the journal service can be also configured to permanently store the Syslog messages.
-
-In Linux, the rsyslog server can be configured to run a central log manager, in a service-client model fashion, and send log messages over the network via TCP or UDP transport protocols or receive logs from network devices, servers, routers, switches or other systems or embedded devices that generate logs.
-
-Rsyslog daemon can be setup to run as a client and server at the same time. Configured to run as a server, Rsyslog will listen on default port 514 TCP and UDP and will start to collect log messages that are sent over the network by remote systems. As client, Rsyslog will send over the network the internal log messages to a remote Ryslog server via the same TCP or UDP ports.
-
-Rsyslog will filter syslog messages according to selected properties and actions. The rsyslog filters are as follows:
-
- 1. Facility or Priority filers
- 2. Property-based filters
- 3. Expression-based filters
-
-
-
-The **facility** filter is represented by the Linux internal subsystem that produces the logs. They are categorized as presented below:
-
- * **auth/authpriv** = messages produced by authentication processes
- * **cron** = logs related to cron tasks
- * **daemon** = messages related to running system services
- * **kernel** = Linux kernel messages
- * **mail** = mail server messages
- * **syslog** = messages related to syslog or other daemons (DHCP server sends logs here)
- * **lpr** = printers or print server messages
- * **local0 - local7** = custom messages under administrator control
-
-
-
-The **priority or severity** levels are assigned to a keyword and a number as described below.
-
- * **emerg** = Emergency - 0
- * **alert** = Alerts - 1
- * **err** = Errors - 3
- * **warn** = Warnings - 4
- * **notice** = Notification - 5
- * **info** = Information - 6
- * **debug** = Debugging - 7 highest level
-
-
-
-There are also some special Rsyslog keywords available such as the asterisk ( ***** ) sign to define all
-facilities or priorities, the **none** keyword which specify no priorities, the equal sign ( **=** ) which selects only that priority and the exclamation sign ( **!** ) which negates a priority.
-
-The action part of the syslog is represented by the **destination** statement. The destination of a log message can be a file stored in the file system, a file in /var/log/ system path, another local process input via a named pipe or FIFO. The log messages can be also directed to users, discarded to a black hole (/dev/null) or sent to stdout or to a remote syslog server via TCP/UDP protocol. The log messages can be also stored in a database, such as MySQL or PostgreSQL.
-
-### Configure Rsyslog as a Server
-
-The Rsyslog daemon is automatically installed in most Linux distributions. However, if Rsyslog is not installed on your system you can issue one of the below commands in order to install the service> you will require root privileges to run the commands.
-
-In Debian based distros:
-
-sudo apt-get install rsyslog
-
-In RHEL based distros like CentOS:
-
-sudo yum install rsyslog
-
-In order to verify if Rsyslog daemon is started on a system execute the below commands, depending on your distribution version.
-
-On newer Linux distros with systemd:
-
-systemctl status rsyslog.service
-
-On older Linux versions with init:
-
-service rsyslog status
-
-/etc/init.d/rsyslog status
-
-In order to start the rsyslog daemon issue the following command.
-
-On older Linux versions with init:
-
-service rsyslog start
-
-/etc/init.d/rsyslog start
-
-On latest Linux distros:
-
-systemctl start rsyslog.service
-
-To setup an rsyslog program to run in server mode, edit the main configuration file in **/etc/rsyslog.conf.** In this file make the following changes as shown in the below sample.
-
-sudo vi /etc/rsyslog.conf
-
-Locate and uncomment by removing the hashtag (#) the following lines in order to allow UDP log message reception on 514 port. By default, the UDP port is used by syslog to send-receive messages.
-```
-$ModLoad imudp
-$UDPServerRun 514
-```
-
-Because the UDP protocol is not reliable to exchange data over a network, you can setup Rsyslog to output log messages to a remote server via TCP protocol. To enable TCP reception protocol, open **/etc/rsyslog.conf** file and uncomment the following lines as shown below. This will allow the rsyslog daemon to bind and listen on a TCP socket on port 514.
-```
-$ModLoad imtcp
- $InputTCPServerRun 514 ****
-```
-
-Both protocols can be enabled in rsyslog to run at the same time.
-
-If you want to specify to which senders you permit access to rsyslog daemon, add the following line after the enabled protocol lines:
-```
-$AllowedSender TCP, 127.0.0.1, 10.110.50.0/24, *.yourdomain.com
-```
-
-You will also need to create a new template that will be parsed by rsyslog daemon before receiving the incoming logs. The template should instruct the local Rsyslog server where to store the incoming log messages. Define the template right after the **$AllowedSender** line as shown in the below sample.
-```
-$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
-*.* ?Incoming-logs
-& ~
-```
-
-**** To log only the messages generated by kern facility use the below syntax.
-```
-kern.* ?Incoming-logs
-```
-
-The received logs are parsed by the above template and will be stored in the local file system in /var/log/ directory, in files named after the client hostname client facility that produced the messages: %HOSTNAME% and %PROGRAMNAME% variables.
-
-The below **& ~** redirect rule configures the Rsyslog daemon to save the incoming log messages only to the above files specified by the variables names. Otherwise, the received logs will be further processed and also stored in the content of local logs, such as /var/log/syslog file.
-
-To add a rule to discard all related log messages to mail, you can use the following statement.
-```
-mail.* ~
-```
-
-Other variables that can be used to output file names are: %syslogseverity%, %syslogfacility%, %timegenerated%, %HOSTNAME%, %syslogtag%, %msg%, %FROMHOST-IP%, %PRI%, %MSGID%, %APP-NAME%, %TIMESTAMP%, %$year%, %$month%, %$day%
-
-Starting with Rsyslog version 7, a new configuration format can be used to declare a template in an Rsyslog server.
-
-A version 7 template sample can look like shown in the below lines.
-```
-template(name="MyTemplate" type="string"
- string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log"
- )
-```
-
-**** Another mode you can write the above template can also be as shown below:
-```
-template(name="MyTemplate" type="list") {
- constant(value="/var/log/")
- property(name="fromhost-ip")
- constant(value="/")
- property(name="programname" SecurePath="replace")
- constant(value=".log")
- } **
-**
-```
-
-In order to apply any changes made to rsyslog configuration file, you must restart the daemon to load the new configuration.
-
-sudo service rsyslog restart
-
-sudo systemctl restart rsyslog
-
-To check which rsyslog sockets in listening state are opened on a Debian Linux system, you can execute the **netstat** command with root privileges. Pass the results via a filter utility, such as **grep**.
-
-sudo netstat -tulpn | grep rsyslog
-
-Be aware that you must also open Rsyslog ports in firewall in order to allow incoming connections to be established.
-
-In RHEL based distros with Firewalld activated issue the below commands:
-
-firewall-cmd --permanent --add-port=514/tcp
-
-firewall-cmd --permanent --add-port=514/tcp
-
-firewall-cmd -reload
-
-In Debian based distros with UFW firewall active issue the below commands:
-
-ufw allow 514/tcp
-
-ufw allow 514/udp
-
-Iptables firewall rules:
-
-iptables -A INPUT -p tcp -m tcp --dport 514 -j ACCEPT
-
-iptables -A INPUT -p udp --dport 514 -j ACCEPT
-
-### Configure Rsyslog as a Client
-
-To enable rsyslog daemon to run in client mode and output local log messages to a remote Rsyslog server, edit **/etc/rsyslog.conf** file and add one of the following lines:
-
-*. * @IP_REMOTE_RSYSLOG_SERVER:514
-
-*. * @FQDN_RSYSLOG_SERVER:514
-
-This line enables the Rsyslog service to output all internal logs to a distant Rsyslog server on UDP port 514.
-
-To send the logs over TCP protocol use the following template:
-```
-*. * @@IP_reomte_syslog_server:514
-```
-
-To output only cron related logs with all priorities to a rsyslog server, use the below template:
-```
-cron.* @ IP_reomte_syslog_server:514
-```
-
-In cases when the Rsyslog server is not reachable via network, append the below lines to /etc/rsyslog.conf file on the client side in order temporarily store the logs in a disk buffered file, until the server comes online.
-```
-$ActionQueueFileName queue
-$ActionQueueMaxDiskSpace 1g
-$ActionQueueSaveOnShutdown on
-$ActionQueueType LinkedList
-$ActionResumeRetryCount -1
-```
-
-To apply the above rules, Rsyslog daemon needs to be restarted in order to act as a client.
-
-
---------------------------------------------------------------------------------
-
-via: https://www.howtoforge.com/tutorial/rsyslog-centralized-log-server-in-debian-9/
-
-作者:[Matt Vas][a]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:https://www.howtoforge.com
diff --git a/translated/talk/20180213 Linux ldd Command Explained with Examples.md b/translated/talk/20180213 Linux ldd Command Explained with Examples.md
new file mode 100644
index 0000000000..450a18b879
--- /dev/null
+++ b/translated/talk/20180213 Linux ldd Command Explained with Examples.md
@@ -0,0 +1,84 @@
+简单介绍 ldd Linux 命令
+=========================================
+
+如果您的工作涉及到 Linux 中的可执行文件和共享库的知识,则需要了解几种命令行工具。其中之一是 ldd ,您可以使用它来访问共享对象依赖关系。在本教程中,我们将使用一些易于理解的示例来讨论此实用程序的基础知识。
+
+请注意,这里提到的所有示例都已在 Ubuntu 16.04 LTS 上进行了测试。
+
+
+### Linux ldd 命令
+
+正如开头已经提到的,ldd 命令打印共享对象依赖关系。以下是该命令的语法:
+
+`ldd [option]... file...`
+
+下面是该工具的手册页对它作出的解释:
+
+```
+ldd prints the shared objects (shared libraries) required by each program or shared object
+
+specified on the command line.
+
+```
+
+以下使用问答的方式让您更好地了解ldd的工作原理。
+
+### 问题一. 如何使用 ldd 命令?
+
+ldd 的基本用法非常简单,只需运行 'ldd' 命令以及可执行文件或共享对象文件名称作为输入。
+
+`ldd [object-name]`
+
+例如:
+
+`ldd test`
+
+[![How to use ldd](https://www.howtoforge.com/images/command-tutorial/ldd-basic.png)](https://www.howtoforge.com/images/command-tutorial/big/ldd-basic.png)
+
+所以你可以看到所有的共享库依赖已经在输出中产生了。
+
+### Q2. 如何使 ldd 在输出中生成详细的信息?
+
+如果您想要 ldd 生成详细信息,包括符号版本控制数据,则可以使用 **-v** 命令行选项。例如,该命令
+
+`ldd -v test`
+
+当使用-v命令行选项时,在输出中产生以下内容:
+
+[![How to make ldd produce detailed information in output](https://www.howtoforge.com/images/command-tutorial/ldd-v-option.png)](https://www.howtoforge.com/images/command-tutorial/big/ldd-v-option.png)
+
+### Q3. 如何使 ldd 产生未使用的直接依赖关系?
+
+对于这个信息,使用 **-u** 命令行选项。这是一个例子:
+
+`ldd -u test`
+
+[![How to make ldd produce unused direct dependencies](https://www.howtoforge.com/images/command-tutorial/ldd-u-test.png)](https://www.howtoforge.com/images/command-tutorial/big/ldd-u-test.png)
+
+### Q4. 如何让 ldd 执行重定位?
+
+您可以在这里使用几个命令行选项:**-d** 和 **-r**。 前者告诉 ldd 执行数据重定位,后者则使 ldd 为数据对象和函数执行重定位。在这两种情况下,该工具都会报告丢失的 ELF 对象(如果有的话)。
+
+`ldd -d`
+
+`ldd -r`
+
+### Q5. 如何获得关于ldd的帮助?
+
+--help 命令行选项使 ldd 为该工具生成有用的用法相关信息。
+
+`ldd --help`
+
+[![How get help on ldd](https://www.howtoforge.com/images/command-tutorial/ldd-help-option.png)](https://www.howtoforge.com/images/command-tutorial/big/ldd-help-option.png)
+
+### 总结
+
+ldd 不像 cd,rm 和 mkdir 这样的工具类别。这是因为它是为特定目的而构建的。该实用程序提供了有限的命令行选项,我们在这里介绍了其中的大部分。要了解更多信息,请前往 ldd 的[手册页](https://linux.die.net/man/1/ldd)。
+
+* * *
+
+via: [https://www.howtoforge.com/linux-ldd-command/](https://www.howtoforge.com/linux-ldd-command/)
+
+作者: [Himanshu Arora](https://www.howtoforge.com/) 选题者: [@lujun9972](https://github.com/lujun9972) 译者: [MonkeyDEcho](https://github.com/MonkeyDEcho) 校对: [校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
\ No newline at end of file
diff --git a/translated/tech/20090627 30 Linux System Monitoring Tools Every SysAdmin Should Know.md b/translated/tech/20090627 30 Linux System Monitoring Tools Every SysAdmin Should Know.md
new file mode 100644
index 0000000000..bd57e8a1a3
--- /dev/null
+++ b/translated/tech/20090627 30 Linux System Monitoring Tools Every SysAdmin Should Know.md
@@ -0,0 +1,691 @@
+每个系统管理员都要知道的 30 个 Linux 系统监控工具
+======
+
+您需要监控 Linux 服务器的性能吗?试试用这些内置命令和附加工具吧!大多数 Linux 发行版都附带了大量的监控工具。这些工具提供了获取系统活动的相关指标。您可以使用这些工具来查找性能问题的可能原因。本文提到的是一些基本的命令,用于系统分析和服务器调试等,例如:
+
+ 1. 找出系统瓶颈
+ 2. 磁盘(存储)瓶颈
+ 3. CPU 和内存瓶颈
+ 4. 网络瓶颈
+
+
+### 1. top - 进程活动监控命令
+
+top 命令显示 Linux 的进程。它提供了一个系统的实时动态视图,即实际的进程活动。默认情况下,它显示在服务器上运行的 CPU 占用率最高的任务,并且每五秒更新一次。
+
+![](https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/top-Linux-monitoring-command.jpg)
+
+图 01:Linux top 命令
+
+#### top 的常用快捷键
+
+常用快捷键列表:
+
+| 快捷键 | 用法 |
+| ---- | -------------------------------------- |
+| t | 是否显示总结信息 |
+| m | 是否显示内存信息 |
+| A | 根据各种系统资源的利用率对进程进行排序,有助于快速识别系统中性能不佳的任务。 |
+| f | 进入 top 的交互式配置屏幕,用于根据特定的需求而设置 top 的显示。 |
+| o | 交互式地调整 top 每一列的顺序。 |
+| r | 调整优先级(renice) |
+| k | 杀掉进程(kill) |
+| z | 开启或关闭彩色或黑白模式 |
+
+相关链接:[Linux 如何查看 CPU 利用率?][1]
+
+### 2. vmstat - 虚拟内存统计
+
+vmstat 命令报告有关进程、内存、分页、块 IO、陷阱和 cpu 活动等信息。
+
+`# vmstat 3`
+
+输出示例:
+
+```
+procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
+ r b swpd free buff cache si so bi bo in cs us sy id wa st
+ 0 0 0 2540988 522188 5130400 0 0 2 32 4 2 4 1 96 0 0
+ 1 0 0 2540988 522188 5130400 0 0 0 720 1199 665 1 0 99 0 0
+ 0 0 0 2540956 522188 5130400 0 0 0 0 1151 1569 4 1 95 0 0
+ 0 0 0 2540956 522188 5130500 0 0 0 6 1117 439 1 0 99 0 0
+ 0 0 0 2540940 522188 5130512 0 0 0 536 1189 932 1 0 98 0 0
+ 0 0 0 2538444 522188 5130588 0 0 0 0 1187 1417 4 1 96 0 0
+ 0 0 0 2490060 522188 5130640 0 0 0 18 1253 1123 5 1 94 0 0
+```
+
+#### 显示 Slab 缓存的利用率
+
+`# vmstat -m`
+
+#### 获取有关活动和非活动内存页面的信息
+
+`# vmstat -a`
+
+相关链接:[如何查看 Linux 的资源利用率从而找到系统瓶颈?][2]
+
+### 3. w - 找出登录的用户以及他们在做什么
+
+[w 命令][3] 显示了当前登录在该系统上的用户及其进程。
+
+```
+# w username
+# w vivek
+```
+
+输出示例:
+
+```
+ 17:58:47 up 5 days, 20:28, 2 users, load average: 0.36, 0.26, 0.24
+USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
+root pts/0 10.1.3.145 14:55 5.00s 0.04s 0.02s vim /etc/resolv.conf
+root pts/1 10.1.3.145 17:43 0.00s 0.03s 0.00s w
+```
+
+### 4. uptime - Linux 系统运行了多久
+
+uptime 命令可以用来查看服务器运行了多长时间:当前时间、已运行的时间、当前登录的用户连接数,以及过去 1 分钟、5 分钟和 15 分钟的系统负载平均值。
+
+`# uptime`
+
+输出示例:
+
+```
+ 18:02:41 up 41 days, 23:42, 1 user, load average: 0.00, 0.00, 0.00
+```
+
+1 可以被认为是最佳负载值。不同的系统会有不同的负载:对于单核 CPU 系统来说,1 到 3 的负载值是可以接受的;而对于 SMP(对称多处理)系统来说,负载可以是 6 到 10。
+
+### 5. ps - 显示系统进程
+
+ps 命令显示当前运行的进程。要显示所有的进程,请使用 -A 或 -e 选项:
+
+`# ps -A`
+
+输出示例:
+
+```
+ PID TTY TIME CMD
+ 1 ? 00:00:02 init
+ 2 ? 00:00:02 migration/0
+ 3 ? 00:00:01 ksoftirqd/0
+ 4 ? 00:00:00 watchdog/0
+ 5 ? 00:00:00 migration/1
+ 6 ? 00:00:15 ksoftirqd/1
+....
+.....
+ 4881 ? 00:53:28 java
+ 4885 tty1 00:00:00 mingetty
+ 4886 tty2 00:00:00 mingetty
+ 4887 tty3 00:00:00 mingetty
+ 4888 tty4 00:00:00 mingetty
+ 4891 tty5 00:00:00 mingetty
+ 4892 tty6 00:00:00 mingetty
+ 4893 ttyS1 00:00:00 agetty
+12853 ? 00:00:00 cifsoplockd
+12854 ? 00:00:00 cifsdnotifyd
+14231 ? 00:10:34 lighttpd
+14232 ? 00:00:00 php-cgi
+54981 pts/0 00:00:00 vim
+55465 ? 00:00:00 php-cgi
+55546 ? 00:00:00 bind9-snmp-stat
+55704 pts/1 00:00:00 ps
+```
+
+ps 与 top 类似,但它提供了更多的信息。
+
+#### 显示长输出格式
+
+`# ps -Al`
+
+显示完整输出格式(它将显示传递给进程的命令行参数):
+
+`# ps -AlF`
+
+#### 显示线程(轻量级进程(LWP)和线程的数量(NLWP))
+
+`# ps -AlFH`
+
+#### 在进程后显示线程
+
+`# ps -AlLm`
+
+#### 显示系统上所有的进程
+
+```
+# ps ax
+# ps axu
+```
+
+#### 显示进程树
+
+```
+# ps -ejH
+# ps axjf
+# [pstree][4]
+```
+
+#### 显示进程的安全信息
+
+```
+# ps -eo euser,ruser,suser,fuser,f,comm,label
+# ps axZ
+# ps -eM
+```
+
+#### 显示指定用户(如 vivek)运行的进程
+
+```
+# ps -U vivek -u vivek u
+```
+
+#### 设置用户自定义的输出格式
+
+```
+# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
+# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
+# ps -eopid,tt,user,fname,tmout,f,wchan
+```
+
+#### 显示某进程(如 lighttpd)的 PID
+
+```
+# ps -C lighttpd -o pid=
+```
+或
+```
+# pgrep lighttpd
+```
+或
+```
+# pgrep -u vivek php-cgi
+```
+
+#### 显示指定 PID(如 55977)的进程名称
+
+```
+# ps -p 55977 -o comm=
+```
+
+#### 找出占用内存资源最多的前 10 个进程
+
+```
+# ps -auxf | sort -nr -k 4 | head -10
+```
+
+#### 找出占用 CPU 资源最多的前 10 个进程
+
+`# ps -auxf | sort -nr -k 3 | head -10`
+
+相关链接:[显示 Linux 上所有运行的进程][5]
+
+### 6. free - 内存使用情况
+
+free 命令显示了系统的可用和已用的物理内存及交换内存的总量,以及内核用到的缓存空间。
+
+`# free `
+
+输出示例:
+
+```
+ total used free shared buffers cached
+Mem: 12302896 9739664 2563232 0 523124 5154740
+-/+ buffers/cache: 4061800 8241096
+Swap: 1052248 0 1052248
+```
+
+相关链接:
+1. [获取 Linux 的虚拟内存的内存页大小(PAGESIZE)][50]
+2. [限制 Linux 每个进程的 CPU 使用率][51]
+3. [我的 Ubuntu 或 Fedora Linux 系统有多少内存?][52]
+
+
+### 7. iostat - CPU 平均负载和磁盘活动
+
+iostat 命令用于汇报 CPU 的使用情况,以及设备、分区和网络文件系统(NFS)的 IO 统计信息。
+
+`# iostat `
+
+输出示例:
+
+```
+Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
+
+avg-cpu: %user %nice %system %iowait %steal %idle
+ 3.50 0.09 0.51 0.03 0.00 95.86
+
+Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
+sda 22.04 31.88 512.03 16193351 260102868
+sda1 0.00 0.00 0.00 2166 180
+sda2 22.04 31.87 512.03 16189010 260102688
+sda3 0.00 0.00 0.00 1615 0
+```
+
+相关链接:[如何跟踪 Linux 系统的 NFS 目录或磁盘的 IO 负载情况][6]
+
+### 8. sar - 监控、收集和汇报系统活动
+
+sar 命令用于收集、汇报和保存系统活动信息。要查看网络统计,请输入:
+
+`# sar -n DEV | more`
+
+显示 24 日的网络统计:
+
+`# sar -n DEV -f /var/log/sa/sa24 | more`
+
+您还可以使用 sar 显示实时使用情况:
+
+`# sar 4 5`
+
+输出示例:
+
+```
+Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
+
+06:45:12 PM CPU %user %nice %system %iowait %steal %idle
+06:45:16 PM all 2.00 0.00 0.22 0.00 0.00 97.78
+06:45:20 PM all 2.07 0.00 0.38 0.03 0.00 97.52
+06:45:24 PM all 0.94 0.00 0.28 0.00 0.00 98.78
+06:45:28 PM all 1.56 0.00 0.22 0.00 0.00 98.22
+06:45:32 PM all 3.53 0.00 0.25 0.03 0.00 96.19
+Average: all 2.02 0.00 0.27 0.01 0.00 97.70
+```
+
+相关链接:
++ [如何将 Linux 系统资源利用率的数据写入文件中][53]
++ [如何使用 kSar 创建 sar 性能图以找出系统瓶颈][54]
+
+
+### 9. mpstat - 监控多处理器的使用情况
+
+mpstat 命令显示每个可用处理器的使用情况,编号从 0 开始。命令 mpstat -P ALL 显示了每个处理器的平均使用率:
+
+`# mpstat -P ALL`
+
+输出示例:
+
+```
+Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
+
+06:48:11 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
+06:48:11 PM all 3.50 0.09 0.34 0.03 0.01 0.17 0.00 95.86 1218.04
+06:48:11 PM 0 3.44 0.08 0.31 0.02 0.00 0.12 0.00 96.04 1000.31
+06:48:11 PM 1 3.10 0.08 0.32 0.09 0.02 0.11 0.00 96.28 34.93
+06:48:11 PM 2 4.16 0.11 0.36 0.02 0.00 0.11 0.00 95.25 0.00
+06:48:11 PM 3 3.77 0.11 0.38 0.03 0.01 0.24 0.00 95.46 44.80
+06:48:11 PM 4 2.96 0.07 0.29 0.04 0.02 0.10 0.00 96.52 25.91
+06:48:11 PM 5 3.26 0.08 0.28 0.03 0.01 0.10 0.00 96.23 14.98
+06:48:11 PM 6 4.00 0.10 0.34 0.01 0.00 0.13 0.00 95.42 3.75
+06:48:11 PM 7 3.30 0.11 0.39 0.03 0.01 0.46 0.00 95.69 76.89
+```
+
+相关链接:[多处理器的 Linux 上单独显示每个 CPU 的使用率][7].
+
+### 10. pmap - 监控进程的内存使用情况
+
+pmap 命令用以显示进程的内存映射,使用此命令可以查找内存瓶颈。
+
+`# pmap -d PID`
+
+显示 PID 为 47394 的进程的内存信息,请输入:
+
+`# pmap -d 47394`
+
+输出示例:
+
+```
+47394: /usr/bin/php-cgi
+Address Kbytes Mode Offset Device Mapping
+0000000000400000 2584 r-x-- 0000000000000000 008:00002 php-cgi
+0000000000886000 140 rw--- 0000000000286000 008:00002 php-cgi
+00000000008a9000 52 rw--- 00000000008a9000 000:00000 [ anon ]
+0000000000aa8000 76 rw--- 00000000002a8000 008:00002 php-cgi
+000000000f678000 1980 rw--- 000000000f678000 000:00000 [ anon ]
+000000314a600000 112 r-x-- 0000000000000000 008:00002 ld-2.5.so
+000000314a81b000 4 r---- 000000000001b000 008:00002 ld-2.5.so
+000000314a81c000 4 rw--- 000000000001c000 008:00002 ld-2.5.so
+000000314aa00000 1328 r-x-- 0000000000000000 008:00002 libc-2.5.so
+000000314ab4c000 2048 ----- 000000000014c000 008:00002 libc-2.5.so
+.....
+......
+..
+00002af8d48fd000 4 rw--- 0000000000006000 008:00002 xsl.so
+00002af8d490c000 40 r-x-- 0000000000000000 008:00002 libnss_files-2.5.so
+00002af8d4916000 2044 ----- 000000000000a000 008:00002 libnss_files-2.5.so
+00002af8d4b15000 4 r---- 0000000000009000 008:00002 libnss_files-2.5.so
+00002af8d4b16000 4 rw--- 000000000000a000 008:00002 libnss_files-2.5.so
+00002af8d4b17000 768000 rw-s- 0000000000000000 000:00009 zero (deleted)
+00007fffc95fe000 84 rw--- 00007ffffffea000 000:00000 [ stack ]
+ffffffffff600000 8192 ----- 0000000000000000 000:00000 [ anon ]
+mapped: 933712K writeable/private: 4304K shared: 768000K
+```
+
+最后一行非常重要:
+
+ * **mapped: 933712K** 映射到文件的内存量
+ * **writeable/private: 4304K** 私有地址空间
+ * **shared: 768000K** 此进程与其他进程共享的地址空间
+
+
+相关链接:[使用 pmap 命令查看 Linux 上单个程序或进程使用的内存][8]
+
+### 11. netstat - Linux 网络统计监控工具
+
+netstat 命令显示网络连接、路由表、接口统计、伪装连接和多播连接等信息。
+
+```
+# netstat -tulpn
+# netstat -nat
+```
+
+### 12. ss - 网络统计
+
+ss 命令用于获取套接字统计信息。它可以显示类似于 netstat 的信息。不过 netstat 几乎要过时了,ss 命令更具优势。要显示所有 TCP 或 UDP 套接字:
+
+`# ss -t -a`
+
+或
+
+`# ss -u -a `
+
+显示所有带有 SELinux 安全上下文(Security Context)的 TCP 套接字:
+
+`# ss -t -a -Z `
+
+请参阅以下关于 ss 和 netstat 命令的资料:
+
++ [ss:显示 Linux TCP / UDP 网络套接字信息][56]
++ [使用 netstat 命令获取有关特定 IP 地址连接的详细信息][57]
+
+
+### 13. iptraf - 获取实时网络统计信息
+
+iptraf 命令是一个基于 ncurses 的交互式 IP 网络监控工具。它可以生成多种网络统计信息,包括 TCP 信息、UDP 计数、ICMP 和 OSPF 信息、以太网负载信息、节点统计信息、IP 校验错误等。它以简单的格式提供了以下信息:
+
+ * 基于 TCP 连接的网络流量统计
+ * 基于网络接口的 IP 流量统计
+ * 基于协议的网络流量统计
+ * 基于 TCP/UDP 端口和数据包大小的网络流量统计
+ * 基于二层地址的网络流量统计
+
+![Fig.02: General interface statistics: IP traffic statistics by network interface ][9]
+
+图 02:常规接口统计:基于网络接口的 IP 流量统计
+
+![Fig.03 Network traffic statistics by TCP connection][10]
+
+图 03:基于 TCP 连接的网络流量统计
+
+相关链接:[在 Centos / RHEL / Fedora Linux 上安装 IPTraf 以获取网络统计信息][11]
+
+### 14. tcpdump - 详细的网络流量分析
+
+tcpdump 命令是简单的分析网络通信的命令。您需要充分了解 TCP/IP 协议才便于使用此工具。例如,要显示有关 DNS 的流量信息,请输入:
+
+`# tcpdump -i eth1 'udp port 53'`
+
+查看所有去往和来自端口 80 的 IPv4 HTTP 数据包,仅打印真正包含数据的包,而不是像 SYN、FIN 和仅含 ACK 这类的数据包,请输入:
+
+`# tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'`
+
+显示所有目标地址为 202.54.1.5 的 FTP 会话,请输入:
+
+`# tcpdump -i eth1 'dst 202.54.1.5 and (port 21 or 20'`
+
+打印所有目标地址为 192.168.1.5 的 HTTP 会话:
+
+`# tcpdump -ni eth0 'dst 192.168.1.5 and tcp and port http'`
+
+使用 [wireshark][12] 查看文件的详细内容,请输入:
+
+`# tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80`
+
+### 15. iotop - I/O 监控
+
+iotop 命令利用 Linux 内核监控 I/O 使用情况,它按进程或线程的顺序显示 I/O 使用情况。
+
+`$ sudo iotop`
+
+输出示例:
+
+![iotop monitoring linux disk read write IO][13]
+
+相关链接:[Linux iotop:什么进程在增加硬盘负载][14]
+
+### 16. htop - 交互式的进程查看器
+
+htop 是一款免费并开源的基于 ncurses 的 Linux 进程查看器。它比 top 命令更简单易用。您无需使用 PID、无需离开 htop 界面,便可以杀掉进程或调整其调度优先级。
+
+`$ htop`
+
+输出示例:
+
+![htop process viewer for Linux][15]
+
+相关链接:[CentOS / RHEL:安装 htop——交互式文本模式进程查看器][58]
+
+
+### 17. atop - 高级版系统与进程监控工具
+
+atop 是一个非常强大的交互式 Linux 系统负载监控器,它从性能的角度显示最关键的硬件资源信息。您可以快速查看 CPU、内存、磁盘和网络性能。它还可以从进程的级别显示哪些进程造成了相关 CPU 和内存的负载。
+
+`$ atop`
+
+![atop Command Line Tools to Monitor Linux Performance][16]
+
+相关链接:[CentOS / RHEL:安装 atop 工具——高级系统和进程监控器][59]
+
+
+### 18. ac 和 lastcomm
+
+您一定需要监控 Linux 服务器上的进程和登录活动吧。psacct 或 acct 软件包中包含了多个用于监控进程活动的工具,包括:
+
+
+ 1. ac 命令:显示有关用户连接时间的统计信息
+ 2. [lastcomm 命令][17]:显示已执行过的命令
+ 3. accton 命令:打开或关闭进程账号记录功能
+ 4. sa 命令:进程账号记录信息的摘要
+
+相关链接:[如何对 Linux 系统的活动做详细的跟踪记录][18]
+
+### 19. monit - 进程监控器
+
+Monit 是一个免费且开源的进程监控软件,它可以自动重启停掉的服务。您也可以使用 Systemd、daemontools 或其他类似工具来达到同样的目的。[本教程演示如何在 Debian 或 Ubuntu Linux 上安装和配置 monit 作为进程监控器][19]。
+
+
+### 20. nethogs - 找出占用带宽的进程
+
+NetHogs 是一个轻便的网络监控工具,它按照进程名称(如 Firefox、wget 等)对带宽进行分组。如果网络流量突然爆发,启动 NetHogs,您将看到哪个进程(PID)导致了带宽激增。
+
+`$ sudo nethogs`
+
+![nethogs linux monitoring tools open source][20]
+
+相关链接:[Linux:使用 Nethogs 工具查看每个进程的带宽使用情况][21]
+
+### 21. iftop - 显示主机上网络接口的带宽使用情况
+
+iftop 命令监听指定接口(如 eth0)上的网络通信情况。[它显示了一对主机的带宽使用情况][22]。
+
+`$ sudo iftop`
+
+![iftop in action][23]
+
+### 22. vnstat - 基于控制台的网络流量监控工具
+
+vnstat 是一个简单易用的基于控制台的网络流量监视器,它为指定网络接口保留每小时、每天和每月网络流量日志。
+
+`$ vnstat `
+
+![vnstat linux network traffic monitor][25]
+
+相关链接:
++ [为 ADSL 或专用远程 Linux 服务器保留日常网络流量日志][60]
++ [CentOS / RHEL:安装 vnStat 网络流量监控器以保留日常网络流量日志][61]
++ [CentOS / RHEL:使用 PHP 网页前端接口查看 Vnstat 图表][62]
+
+
+### 23. nmon - Linux 系统管理员的调优和基准测量工具
+
+nmon 是 Linux 系统管理员用于性能调优的利器,它在命令行显示 CPU、内存、网络、磁盘、文件系统、NFS、消耗资源最多的进程和分区信息。
+
+`$ nmon`
+
+![nmon command][26]
+
+相关链接:[安装并使用 nmon 工具来监控 Linux 系统的性能][27]
+
+### 24. glances - 密切关注 Linux 系统
+
+glances 是一款开源的跨平台监控工具。它在小小的屏幕上提供了大量的信息,还可以用作客户端-服务器架构。
+
+`$ glances`
+
+![Glances][28]
+
+相关链接:[Linux:通过 Glances 监控器密切关注您的系统][29]
+
+### 25. strace - 查看系统调用
+
+想要跟踪 Linux 系统的调用和信号吗?试试 strace 命令吧。它对于调试网页服务器和其他服务器问题很有用。了解如何利用其 [追踪进程][30] 并查看它在做什么。
+
+### 26. /proc/ 文件系统 - 各种内核信息
+
+/proc 文件系统提供了不同硬件设备和 Linux 内核的详细信息。更多详细信息,请参阅 [Linux 内核 /proc][31] 文档。常见的 /proc 例子:
+
+```
+# cat /proc/cpuinfo
+# cat /proc/meminfo
+# cat /proc/zoneinfo
+# cat /proc/mounts
+```
+
+### 27. Nagios - Linux 服务器和网络监控
+
+[Nagios][32] 是一款普遍使用的开源系统和网络监控软件。您可以轻松地监控所有主机、网络设备和服务,当状态异常和恢复正常时它都会发出警报通知。[FAN][33] 是“全自动 Nagios”的缩写。FAN 的目标是提供包含由 Nagios 社区提供的大多数工具包的 Nagios 安装。FAN 提供了标准 ISO 格式的 CDRom 镜像,使安装变得更加容易。除此之外,为了改善 Nagios 的用户体验,发行版还包含了大量的工具。
+
+### 28. Cacti - 基于 Web 的 Linux 监控工具
+
+Cacti 是一个完整的网络图形化解决方案,旨在充分利用 RRDTool 的数据存储和图形功能。Cacti 提供了快速轮询器、高级图形模板、多种数据采集方法和用户管理功能。这些功能被包装在一个直观易用的界面中,确保可以实现从局域网到拥有数百台设备的复杂网络上的安装。它可以提供有关网络、CPU、内存、登录用户、Apache、DNS 服务器等的数据。了解如何在 CentOS / RHEL 下 [安装和配置 Cacti 网络图形化工具][34]。
+
+### 29. KDE System Guard - 实时系统报告和图形化显示
+
+KSysguard 是 KDE 桌面的网络化系统监控程序。这个工具可以通过 ssh 会话运行。它提供了许多功能,比如监控本地和远程主机的客户端-服务器架构。前端图形界面使用传感器来检索信息。传感器可以返回简单的值或更复杂的信息,如表格。每种类型的信息都有一个或多个显示界面,并被组织成工作表的形式,这些工作表可以分别保存和加载。所以,KSysguard 不仅是一个简单的任务管理器,还是一个控制大型服务器平台的强大工具。
+
+![Fig.05 KDE System Guard][35]
+
+图 05:KDE System Guard {图片来源:维基百科}
+
+详细用法,请参阅 [KSysguard 手册][36]。
+
+### 30. Gnome 系统监控器
+
+系统监控程序能够显示系统基本信息,并监控系统进程、系统资源使用情况和文件系统。您还可以用其修改系统行为。虽然不如 KDE System Guard 强大,但它提供的基本信息对新用户还是有用的:
+
+ * 显示关于计算机硬件和软件的各种基本信息
+ * Linux 内核版本
+ * GNOME 版本
+ * 硬件
+ * 安装的内存
+ * 处理器和速度
+ * 系统状况
+ * 可用磁盘空间
+ * 进程
+ * 内存和交换空间
+ * 网络使用情况
+ * 文件系统
+ * 列出所有挂载的文件系统及其基本信息
+
+![Fig.06 The Gnome System Monitor application][37]
+
+图 06:Gnome 系统监控程序
+
+### 福利:其他工具
+
+更多工具:
+
+ * [nmap][38] - 扫描服务器的开放端口
+ * [lsof][39] - 列出打开的文件和网络连接等
+ * [ntop][40] 网页工具 - ntop 是查看网络使用情况的最佳工具,与 top 命令之于进程的方式类似,即网络流量监控工具。您可以查看网络状态和 UDP、TCP、DNS、HTTP 等协议的流量分发。
+ * [Conky][41] - X Window 系统的另一个很好的监控工具。它具有很高的可配置性,能够监视许多系统变量,包括 CPU 状态、内存、交换空间、磁盘存储、温度、进程、网络接口、电池、系统消息和电子邮件等。
+ * [GKrellM][42] - 它可以用来监控 CPU 状态、主内存、硬盘、网络接口、本地和远程邮箱及其他信息。
+ * [mtr][43] - mtr 将 traceroute 和 ping 程序的功能结合在一个网络诊断工具中。
+ * [vtop][44] - 图形化活动监控终端
+
+
+如果您有其他推荐的系统监控工具,欢迎在评论区分享。
+
+#### 关于作者
+
+作者 Vivek Gite 是 nixCraft 的创建者,也是经验丰富的系统管理员,以及 Linux 操作系统和 Unix shell 脚本的培训师。他的客户遍布全球,行业涉及 IT、教育、国防航天研究以及非营利部门等。您可以在 [Twitter][45]、[Facebook][46] 和 [Google+][47] 上关注他。
+
+--------------------------------------------------------------------------------
+
+via: https://www.cyberciti.biz/tips/top-linux-monitoring-tools.html
+
+作者:[Vivek Gite][a]
+译者:[jessie-pang](https://github.com/jessie-pang)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.cyberciti.biz
+[1]:https://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html
+[2]:https://www.cyberciti.biz/tips/linux-resource-utilization-to-detect-system-bottlenecks.html
+[3]:https://www.cyberciti.biz/faq/unix-linux-w-command-examples-syntax-usage-2/ "See Linux/Unix w command examples for more info"
+[4]:https://www.cyberciti.biz/faq/unix-linux-pstree-command-examples-shows-running-processestree/
+[5]:https://www.cyberciti.biz/faq/show-all-running-processes-in-linux/
+[6]:https://www.cyberciti.biz/faq/howto-linux-track-nfs-client-disk-metrics/
+[7]:https://www.cyberciti.biz/faq/linux-mpstat-command-report-processors-related-statistics/
+[8]:https://www.cyberciti.biz/tips/howto-find-memory-used-by-program.html
+[9]:https://www.cyberciti.biz/media/new/tips/2009/06/iptraf3.png "Fig.02: General interface statistics: IP traffic statistics by network interface "
+[10]:https://www.cyberciti.biz/media/new/tips/2009/06/iptraf2.png "Fig.03 Network traffic statistics by TCP connection"
+[11]:https://www.cyberciti.biz/faq/install-iptraf-centos-redhat-fedora-linux/
+[12]:https://www.cyberciti.biz/faq/linux-unix-bsd-apache-tcpdump-http-packets-sniffing/
+[13]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/iotop-monitoring-linux-disk-read-write-IO.jpg
+[14]:https://www.cyberciti.biz/hardware/linux-iotop-simple-top-like-io-monitor/
+[15]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/htop-process-viewer-for-Linux.jpg
+[16]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/atop-Command-Line-Tools-to-Monitor-Linux-Performance.jpg
+[17]:https://www.cyberciti.biz/faq/linux-unix-lastcomm-command-examples-usage-syntax/ "See Linux/Unix lastcomm command examples for more info"
+[18]:https://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html
+[19]:https://www.cyberciti.biz/faq/how-to-install-and-use-monit-on-ubuntudebian-linux-server/
+[20]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/nethogs-linux-monitoring-tools-open-source.jpg
+[21]:https://www.cyberciti.biz/faq/linux-find-out-what-process-is-using-bandwidth/
+[22]:https://www.cyberciti.biz/tips/linux-display-bandwidth-usage-on-network-interface-by-host.html
+[23]:https://www.cyberciti.biz/media/new/images/faq/2013/11/iftop-outputs-small.gif
+[24]:https://www.cyberciti.biz/faq/centos-fedora-redhat-install-iftop-bandwidth-monitoring-tool/
+[25]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/vnstat-linux-network-traffic-monitor.jpg
+[26]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/nmon-command.jpg
+[27]:https://www.cyberciti.biz/faq/nmon-performance-analyzer-linux-server-tool/
+[28]:https://www.cyberciti.biz/tips/wp-content/uploads/2009/06/glances-keep-an-eye-on-linux.jpg
+[29]:https://www.cyberciti.biz/faq/linux-install-glances-monitoring-tool/
+[30]:https://www.cyberciti.biz/tips/linux-strace-command-examples.html
+[31]:https://www.cyberciti.biz/files/linux-kernel/Documentation/filesystems/proc.txt
+[32]:http://www.nagios.org/
+[33]:http://fannagioscd.sourceforge.net/drupal/
+[34]:https://www.cyberciti.biz/faq/fedora-rhel-install-cacti-monitoring-rrd-software/
+[35]:https://www.cyberciti.biz/media/new/tips/2009/06/kde-systemguard-screenshot.png "Fig.05 KDE System Guard KDE task manager and performance monitor."
+[36]:https://docs.kde.org/stable5/en/kde-workspace/ksysguard/index.html
+[37]:https://www.cyberciti.biz/media/new/tips/2009/06/gnome-system-monitor.png "Fig.06 The Gnome System Monitor application"
+[38]:https://www.cyberciti.biz/tips/linux-scanning-network-for-open-ports.html
+[39]:https://www.cyberciti.biz/tips/tag/lsof-command
+[40]:https://www.cyberciti.biz/faq/debian-ubuntu-install-ntop-network-traffic-monitoring-software/ "Debian / Ubuntu Linux Install ntop To See Network Usage / Network Status"
+[41]:https://github.com/brndnmtthws/conky
+[42]:http://gkrellm.srcbox.net/
+[43]:https://www.cyberciti.biz/tips/finding-out-a-bad-or-simply-overloaded-network-link-with-linuxunix-oses.html
+[44]:https://www.cyberciti.biz/faq/how-to-install-and-use-vtop-graphical-terminal-activity-monitor-on-linux/
+[45]:https://twitter.com/nixcraft
+[46]:https://facebook.com/nixcraft
+[47]:https://plus.google.com/+CybercitiBiz
+[50]:https://www.cyberciti.biz/faq/linux-check-the-size-of-pagesize/
+[51]:https://www.cyberciti.biz/faq/cpu-usage-limiter-for-linux/
+[52]:https://www.cyberciti.biz/tips/how-much-ram-does-my-linux-system.html
+[53]:https://www.cyberciti.biz/tips/howto-write-system-utilization-data-to-file.html
+[54]:https://www.cyberciti.biz/tips/identifying-linux-bottlenecks-sar-graphs-with-ksar.html
+[56]:https://www.cyberciti.biz/tips/linux-investigate-sockets-network-connections.html
+[57]:https://www.cyberciti.biz/tips/netstat-command-tutorial-examples.html
+[58]:https://www.cyberciti.biz/faq/centos-redhat-linux-install-htop-command-using-yum/
+[59]:https://www.cyberciti.biz/faq/centos-redhat-linux-install-atop-command-using-yum/
+[60]:https://www.cyberciti.biz/tips/linux-display-bandwidth-usage-on-network-interface-by-host.html
+[61]:https://www.cyberciti.biz/faq/centos-redhat-fedora-linux-install-vnstat-bandwidth-monitor/
+[62]:https://www.cyberciti.biz/faq/centos-redhat-fedora-linux-vnstat-php-webinterface-frontend-config/
\ No newline at end of file
diff --git a/translated/tech/20171018 Install a Centralized Log Server with Rsyslog in Debian 9.md b/translated/tech/20171018 Install a Centralized Log Server with Rsyslog in Debian 9.md
new file mode 100644
index 0000000000..fbdafdf977
--- /dev/null
+++ b/translated/tech/20171018 Install a Centralized Log Server with Rsyslog in Debian 9.md
@@ -0,0 +1,227 @@
+在 Debian 9 上使用 Rsyslog 安装一台中央日志服务器
+======
+
+在 Linux 上,日志文件包含了系统功能的信息,系统管理员经常使用日志来确认机器上的问题所在。日志可以帮助管理员去还原在过去的时间中在系统中发生的事件。一般情况下,Linux 中所有的日志文件都保存在 **/var/log** 目录下。在这个目录中,有几种类型的日志文件保存着各种信息。比如,记录系统事件的日志文件、记录安全相关信息的日志文件、内核专用的日志文件、用户或者 cron 作业使用的日志文件。日志文件的主要作用是为系统调试。Linux 中的大部分的日志文件都由 rsyslogd 服务来管理。在最新的 Linux 发行版中,日志文件也可能是由 journald 系统服务来管理和控制的。journald 服务是 systemd 初始化程序的一部分。日志守护程序保存的日志以二进制的格式、以易失性的方式写入到内存和 /run/log/journal/ 中的 Ring 缓冲区中,但是,日志服务也可以配置为永久存储系统日志信息。
+
+在 Linux 中,可以配置运行一个 Rsyslog 服务器来中央化管理日志,在一个流行的服务端—客户端模式中,通过 TCP 或者 UDP 传输协议基于网络来发送日志信息,或者从网络设备、服务器、路由器、交换机、以及其它系统或嵌入式设备中接受生成的日志。
+
+Rsyslog 守护程序可以被同时配置为以客户端或者服务端方式运行。配置作为一台服务器时,Rsyslog 将缺省监听TCP 和 UDP 的 514 端口,来收集远程系统基于网络发送的日志信息。配置为客户端运行时,Rsyslog 将通过相同的 TCP 或 UDP 端口基于网络来发送内部日志信息。
+
+Rsyslog 可以根据选定的属性和动作来过滤 syslog 信息。Rsyslog 拥有的过滤器如下:
+
+ 1. 设备或者优先级过滤器
+ 2. 基于特性的过滤器
+ 3. 基于表达式的过滤器
+
+
+
+ **设备** 过滤器代表了生成日志的 Linux 内部子系统。它们目前的分类如下:
+
+ * **auth/authpriv** = 由验证进程产生的信息
+ * **cron** = cron 任务相关的日志
+ * **daemon** = 正在运行的系统服务相关的信息
+ * **kernel** = Linux 内核信息
+ * **mail** = 邮件服务器信息
+ * **syslog** = syslog 或者其它守护程序(DHCP 服务器发送的日志在这里)相关的信息
+ * **lpr** = 打印机或者打印服务器信息
+ * **local0 - local7** = 管理员控制下的自定义信息
+
+
+
+ **优先级或者严重程度** 级别分配如下所述的一个关键字或者一个数字。
+
+ * **emerg** = 紧急 - 0
+ * **alert** = 警报 - 1
+ * **err** = 错误 - 3
+ * **warn** = 警告 - 4
+ * **notice** = 提示 - 5
+ * **info** = 信息 - 6
+ * **debug** = 调试 - 7 最高级别
+
+
+
+也有一个 Rsyslog 专用的关键字,比如星号(*)可以用来定义所有的设备和优先级,**none** 关键字更具体地表示没有优先级,等号(=)表示仅那个优先级,感叹号(!)表示取消这个优先级。
+
+Rsyslog 的动作部分由声明的 **目的地** 来表示。日志信息的目的地可以存储在文件系统中 /var/log/ 目录下的一个文件中,通过命名管道或者 FIFO 作为另一个本地进程的输入。日志信息也可以直达用户,或者丢弃到一个“黑洞”(/dev/null)中、或者发送到标准输出、或者通过一个 TCP/UDP 协议发送到一个远程 syslog 服务器。日志信息也可以保存在一个数据库中,比如 MySQL 或者 PostgreSQL。
+
+### 配置 Rsyslog 为服务器
+
+在大多数 Linux 发行版中 Rsyslog 守护程序是自动安装的。如果你的系统中没有安装 Rsyslog,你可以根据你的系统发行版执行如下之一的命令去安装这个服务。_运行这个命令必须有 root 权限_。
+
+在基于 Debian 的发行版中:
+
+`sudo apt-get install rsyslog`
+
+在基于 RHEL 的发行版中,比如像 CentOS:
+
+`sudo yum install rsyslog`
+
+验证 Rsyslog 守护进程是否在你的系统中运行,根据发行版不同,可以选择运行下列的命令:
+
+在新的使用 systemd 的 Linux 发行版中:
+
+`systemctl status rsyslog.service`
+
+在老的使用 init 的 Linux 发行版中:
+
+`service rsyslog status`
+
+`/etc/init.d/rsyslog status`
+
+启动 rsyslog 守护进程运行如下的命令。
+
+在使用 init 的老的 Linux 版本:
+
+`service rsyslog start`
+
+`/etc/init.d/rsyslog start`
+
+在最新的 Linux 发行版:
+
+`systemctl start rsyslog.service`
+
+安装一个 rsyslog 程序运行为服务器模式,可以编辑主要的配置文件 **/etc/rsyslog.conf** 。可以使用下列所示的命令去改变它。
+
+`sudo vi /etc/rsyslog.conf`
+
+为允许在 UDP 的 514 端口上接收日志信息,找到并删除下列行前面的井号(#)以取消注释。缺省情况下,UDP 端口用于 syslog 去接收信息。
+```
+$ModLoad imudp
+$UDPServerRun 514
+```
+
+因为在网络上使用 UDP 协议交换数据并不可靠,你可以设置 Rsyslog 使用 TCP 协议去向远程服务器输出日志信息。为启用 TCP 协议去接受日志信息,打开 **/etc/rsyslog.conf** 文件并删除如下行前面的井号(#)以取消注释。这将允许 rsyslog 守护程序去绑定并监听 TCP 协议的 514 端口。
+```
+$ModLoad imtcp
+ $InputTCPServerRun 514 ****
+```
+
+_在 rsyslog 上可以**同时**启用两种协议_。
+
+如果你想去指定那个发送者被允许访问 rsyslog 守护程序,可以在启用协议行的后面添加如下的行:
+```
+$AllowedSender TCP, 127.0.0.1, 10.110.50.0/24, *.yourdomain.com
+```
+
+在接收入站日志信息之前,你需要去创建一个 rsyslog 守护程序解析日志的新模板,这个模板将指示本地 Rsyslog 服务器在哪里保存入站的日志信息。在 **$AllowedSender** 行后以如下示例去创建一个合适的模板。
+```
+$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
+*.* ?Incoming-logs
+& ~
+```
+
+为了仅接收内核生成的日志信息,可以使用如下的语法。
+
+```
+kern.* ?Incoming-logs
+```
+
+接收到的日志由上面的模板来解析,它将保存在本地文件系统的 /var/log/ 目录的文件中,之后的是以客户端主机名客户端设备名命名的日志文件名字:%HOSTNAME% 和 %PROGRAMNAME% 变量。
+
+下面的 **& ~** 重定向规则,配置 Rsyslog 守护程序去保存入站日志信息到由上面的变量名字指定的文件中。否则,接收到的日志信息将被进一步处理,并将保存在本地的日志文件中,比如,/var/log/syslog 文件中。
+
+为添加一个规则去丢弃所有与邮件相关的日志信息,你可以使用下列的语法。
+```
+mail.* ~
+```
+
+可以在输出文件名中使用的其它变量还有:%syslogseverity%、%syslogfacility%、%timegenerated%、%HOSTNAME%、%syslogtag%、%msg%、%FROMHOST-IP%、%PRI%、%MSGID%、%APP-NAME%、%TIMESTAMP%、%\$year%、%\$month%、%\$day%。
+
+以版本 7 启动的 Rsyslog,将使用一个新的配置格式,在一个 Rsyslog 服务器中声明一个模板。
+
+一个版本 7 的模板应该看起来是如下行的样子。
+```
+template(name="MyTemplate" type="string"
+ string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log"
+ )
+```
+
+另一种模式是,你也可以使用如下面所示的样子去写上面的模板:
+
+```
+template(name="MyTemplate" type="list") {
+ constant(value="/var/log/")
+ property(name="fromhost-ip")
+ constant(value="/")
+ property(name="programname" SecurePath="replace")
+ constant(value=".log")
+ } **
+**
+```
+
+为了让 Rsyslog 配置文件的变化生效,你必须重启守护程序来加载新的配置。
+
+`sudo service rsyslog restart`
+
+`sudo systemctl restart rsyslog`
+
+在一个 Debian 的 Linux 系统上去检查它监听哪个套接字,你可以用 root 权限去运行 **netstat** 命令。将输出传递给一个过滤程序,比如 **grep**。
+
+`sudo netstat -tulpn | grep rsyslog`
+
+**请注意:** 为了允许建立入站连接,你必须在防火墙上打开 Rsyslog 的端口。
+
+在使用 Firewalld 的基于 RHEL 的发行版上,运行如下的命令:
+
+`firewall-cmd --permanent --add-port=514/tcp`
+
+`firewall-cmd --permanent --add-port=514/tcp`
+
+`firewall-cmd -reload`
+
+在使用 UFW 的基于 Debian 的发行版上,运行如下的命令:
+
+`ufw allow 514/tcp`
+
+`ufw allow 514/udp`
+
+Iptables 防火墙规则:
+
+`iptables -A INPUT -p tcp -m tcp --dport 514 -j ACCEPT`
+
+`iptables -A INPUT -p udp --dport 514 -j ACCEPT`
+
+### 配置 Rsyslog 作为一个客户端
+
+启用 Rsyslog 守护程序以客户端模式运行,并将输出的本地日志信息发送到远程 Rsyslog 服务器,编辑 **/etc/rsyslog.conf** 文件并增加下列的行:
+
+```
+*. * @IP_REMOTE_RSYSLOG_SERVER:514
+
+*. * @FQDN_RSYSLOG_SERVER:514
+```
+
+这个行启用了 Rsyslog 服务,并将输出的所有内部日志发送到一个远处的 UDP 的 514 端口上运行的 Rsyslog 服务器上。
+
+为了使用 TCP 协议去发送日志信息,使用下列的模板:
+```
+*. * @@IP_reomte_syslog_server:514
+```
+
+输出所有优先级的、仅与 cron 相关的日志信息到一个 Rsyslog 服务器上,使用如下的模板:
+```
+cron.* @ IP_reomte_syslog_server:514
+```
+
+在 /etc/rsyslog.conf 文件中添加下列行,可以在 Rsyslog 服务器无法通过网络访问时,临时将客户端的日志信息存储在它的一个磁盘缓冲文件中,当网络或者服务器恢复时,再次进行发送。
+```
+$ActionQueueFileName queue
+$ActionQueueMaxDiskSpace 1g
+$ActionQueueSaveOnShutdown on
+$ActionQueueType LinkedList
+$ActionResumeRetryCount -1
+```
+
+为使上述规则生效,需要重新 Rsyslog 守护程序,以激活为客户端模式。
+
+--------------------------------------------------------------------------------
+
+via: https://www.howtoforge.com/tutorial/rsyslog-centralized-log-server-in-debian-9/
+
+作者:[Matt Vas][a]
+译者:[qhwdw](https://github.com/qhwdw)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.howtoforge.com
diff --git a/translated/tech/20180102 Linux uptime Command Explained for Beginners with Examples.md b/translated/tech/20180102 Linux uptime Command Explained for Beginners with Examples.md
deleted file mode 100644
index 4e4a7cea17..0000000000
--- a/translated/tech/20180102 Linux uptime Command Explained for Beginners with Examples.md
+++ /dev/null
@@ -1,101 +0,0 @@
-菜鸟们,通过这几个例子,包你学会 uptime 命令的用法
-======
-
-Linux 小白,若对系统管理有兴趣,或想成为资深用户,就需要对命令行有扎实的功底。你需要知道很多命令,其中一个就是 **uptime**。文本我们会通过一些容易理解的案例来讲解一下这个命令的基本用法。
-
-再开始前有必要说一下,文中的所有案例都在 Ubuntu 16.04 上测试过了。
-
-## Linux uptime 命令
-
-望名生义,uptime 命令告诉你系统启动了(运行了)多长时间。这是语法:
-
-```
-uptime [options]
-```
-
-这个工具的 man 页是这么说的:
-```
-uptime 会在一行中显示下列信息. 当前时间,系统运行了多久时间,当前登陆的用户有多少,以及前1,5和15分钟系统的平均负载.
-```
-
-下面这些问答形式的案例应该会让你对 uptime 命令有更好的了解。
-
-### Q1。如何使用 uptime 命令
-
-Uptime 的基础用法很简单 - 只需要输入命令名称然后按下回车就行。
-
-```
-uptime
-```
-
-这是输出:
-
-[![How to use the uptime command][1]][2]
-
-这里,第一项是当前时间,'up' 表示系统正在运行,5:53 是系统启动的总时间,最后是系统的负载信息。若你想深入了解,这里是 uptime man 页中关于最后信息的说明:
-```
-系统负载是处于可运行或不可中断状态的进程的平均数. 可运行状态的进程要么正在使用CPU要么在等待使用CPU. 不可中断状态的进程则正在等待某些I/O访问,例如等待磁盘IO.
-
-有三个时间间隔的平均值. 负载均值的意义根据系统中CPU的数量不同而不同, 负载为1对于一个只有单CPU的系统来说意味着负载满了,而对于一个拥有4CPU的系统来说则意味着75%的时间里都是空闲的.
-```
-
-### Q2。如何以更人性化的格式现实时间
-
-若你只想知道系统运行了多长时间,而且希望以更人性化的格式来显示,那么可以使用 **-p** 项。
-
-```
-uptime -p
-```
-
-这是输出:
-
-[![make the tool show up time in pretty format][3]][4]
-### Q3。如何让 uptime 显示系统启动的日期/时间
-
-你也可以指定 uptme 显示系统运行时的时间和日期。方法是使用 **-s** 命令项。
-
-```
-uptime -s
-```
-
-这是输出:
-
-[![make uptime display date/time since when system is up][5]][6]
-
-### Q4。如何获取版本信息和帮助信息
-
-`-V` 获取版本信息,`-h` 获取帮助信息。
-
-```
-uptime -V
-
-uptime -h
-```
-
-[![How to get version information and help][7]][8]
-
-## 结论
-
-你可以看到,uptime 命令很容易理解也很容易使用。它没有提供很多的功能(命令选项也很少)。这里已经覆盖了它的所有功能了。因此只需要练习一下这些选项你就能在日常工作中使用它了。如果需要的话,你也可以查看它的 [man 页 ][9]。
-
-
---------------------------------------------------------------------------------
-
-via: https://www.howtoforge.com/linux-uptime-command/
-
-作者:[Himanshu Arora][a]
-译者:[lujun9972](https://github.com/lujun9972)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:https://www.howtoforge.com
-[1]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/uptime-basic-usage1.png
-[2]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/big/uptime-basic-usage1.png
-[3]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/uptime-p-option.png
-[4]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/big/uptime-p-option.png
-[5]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/uptime-s.png
-[6]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/big/uptime-s.png
-[7]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/uptime-v-h.png
-[8]:https://www.howtoforge.com/images/usage_of_pfsense_to_block_dos_attack_/big/uptime-v-h.png
-[9]:https://linux.die.net/man/1/uptime
diff --git a/translated/tech/20180121 Shell Scripting a Bunco Game.md b/translated/tech/20180121 Shell Scripting a Bunco Game.md
deleted file mode 100644
index 4e6401eca1..0000000000
--- a/translated/tech/20180121 Shell Scripting a Bunco Game.md
+++ /dev/null
@@ -1,260 +0,0 @@
- 脚本编程之骰子游戏
-======
-我已经有段时间没有编写游戏了,所以我觉得现在正是做一些这方面事情的时候。起初,我想 " 用脚本编一个Halo? " (Halo:光晕系列游戏),但我后来意识到这不太可能。来编一个叫Bunco的简单骰子游戏。你也许没有听说过,不过你母亲绝对知道 - 当一群年轻女孩聚在当地的酒吧或者小酒馆的时候,这是个很受欢迎的游戏。
-
-
-游戏一共六轮,有三个骰子,规则很简单。每次投三个骰子,投出的点数要和当前的轮数数字一致。如果三个骰子都和当前的轮数一致,(比如,在第三轮三个骰子都是3),你这一轮的分数就是21。 如果三个骰子点数都相同但和轮数数字不同,你会得到最低的Bunco分数,只有5分。如果你投出的点数两者都不是,每一个和当前轮数相同的骰子得1分。
-
-
-要想玩这个游戏,它还涉及到团队合作,每一队(包括赢得那队),每人付5美元现金,或赢家得到其他类似现金奖励,并规定什么样的情况下才是赢家,例如"most Buncos" or "most points"的情况下胜利。在这里我会跳过这些,而只关注投骰子这一部分。
-
-
-### 关于数学逻辑部分
-
-在专注于编程这方面的事之前,我先简单说说游戏背后的数学逻辑。要是有一个适当重量的骰子投骰子会变得很容易,任意一个值出现概率都是 1/6。
-
-
-完全随机小提示:不确定你的骰子是否每个面都是一样重量? 把它们扔进盐水里然后转一下。YouTube上,有很多科学界的有趣视频向你展示怎么来做这个测试。
-
-
-所以三个骰子点数一样的几率有多大? 第一个骰子100%会有一个值 (这儿没什么可说的),所以很简单。第二个则有16.66%的概率和第一个骰子的值一样,接下来第三个骰子也是一样。 但当然,总概率是三个概率相乘的结果,所以最后,三个骰子值相等的概率是2.7%。
-
-
-
-接下来,每个骰子和当前轮数数字相同的概率都是16.66%。从数学角度来说:0.166 * 0.166 * 0.166 = 0.00462。
-
-
-换句话说,你有0.46%的可能性投出Bunco,比200次中出现一次的可能性还小一点。
-
-
-实际上还可以更难。如果你有5个骰子,投出 Mini Bunco (也可以叫做Yahtzee) 的概率为0.077%,如果你想所有的骰子的值都相同,假设都是6,那概率就是0.00012%,那就基本上没什么可能了。
-
-
-### 开始编程吧
-
-和所有游戏一样,最难的部分是有一个能生成随机数的随机数发生器。这一部分在shell 脚本中还是很难实现的,所以我需要一步步来,并假设shell内置的随机数发生器就够用了
-
-不过好在内置的随机数发生器很好用。用 $RANDOM 就能得到一个0到MAXINT(32767)之间的随机值:
-
-```
-
-$ echo $RANDOM $RANDOM $RANDOM
-10252 22142 14863
-
-```
-
-为了确保产生的值一定是 1-6之中的某个值,使用取余函数:
-
-
-```
-
-$ echo $(( $RANDOM % 6 ))
-3
-$ echo $(( $RANDOM % 6 ))
-0
-
-```
-
-哦!我忘了要加1,下面是另一次尝试:
-
-
-```
-
-$ echo $(( ( $RANDOM % 6 ) + 1 ))
-6
-
-```
-
-下面要实现投骰子这一功能。这个函数中你可以声明一个局部变量来存储生成的随机值:
-
-
-```
-
-rolldie()
-{
- local result=$1
- rolled=$(( ( $RANDOM % 6 ) + 1 ))
- eval $result=$rolled
-}
-
-```
-
-使用 eval 确保生成的随机数被实际存储在变量中。这一部分也很容易:
-
-```
-
-rolldie die1
-
-```
-
-这会为第一个骰子生成一个1-6之中的值。要为3个骰子都生成值,执行3次上面的函数:
-
-
-```
-
-rolldie die1 ; rolldie die2 ; rolldie die3
-
-```
-
-现在判断下生成的值。首先,判断是不是Bunco(3个骰子值相同),然后是不是和当前轮数值也相同:
-
-
-```
-
-if [ $die1 -eq $die2 ] && [ $die2 -eq $die3 ] ; then
- if [ $die1 -eq $round ] ; then
- echo "BUNCO!"
- score=25
- else
- echo "Mini Bunco!"
- score=5
- fi
-
-```
-
-这可能是所有判断语句中最难的部分了,注意第一个条件语句中这种不常用的写法 : [ cond1 ] && [ cond2 ]。如果你想写成 cond1 -a cond2 ,这样也可以。在shell编程中,解决问题的方法往往不止一种。
-
-
-代码剩下的部分很直白,你只需要判断每个骰子的值是不是和本轮数字相同:
-
-
-```
-
-if [ $die1 -eq $round ] ; then
- score=1
-fi
-if [ $die2 -eq $round ] ; then
- score=$(( $score + 1 ))
-fi
-if [ $die3 -eq $round ] ; then
- score=$(( $score + 1 ))
-fi
-
-```
-
-唯一要注意的是当出现 Bunco/Mini Bunco 就不需要再统计本轮分数了。所以整个第二部分的判断语句都要写在第一个条件语句的else中(为了判断3个骰子值是否都相同)。
-
-
-
-把所有的综合起来,然后在命令行中输入轮数,下面是现在的脚本执行后的结果:
-
-
-```
-
-$ sh bunco.sh 5
-You rolled: 1 1 5
-score = 1
-$ sh bunco.sh 2
-You rolled: 6 4 3
-score = 0
-$ sh bunco.sh 1
-You rolled: 1 1 1
-BUNCO!
-score = 25
-
-```
-
-竟然这么快就出现 Bunco 了? 好吧,就像我说的,shell内置的随机数发生器在随机数产生这方面可能有些问题。
-
-
-
-你可以执行脚本几百次,从而让你的脚本得以正确运行,然后看看Bunco/Mini Bunco出现次数所占的百分比。但是我想把这部分作为练习,留给亲爱的读者你们。不过,也许我下次会抽时间完成剩下的部分。
-
-
-让我们完成这一脚本吧,还有分数统计和一次性执行6次投骰子(这次不用再在命令行中手动输入当前轮数了)这两个功能。这也很容易,因为只是将上面的内容整个嵌套在里面,换句话说,就是将一个复杂的条件嵌套结构全部写在了一个函数中:
-
-
-```
-
-BuncoRound()
-{
- # roll, display, and score a round of bunco!
- # round is specified when invoked, score added to totalscore
-
- local score=0 ; local round=$1 ; local hidescore=0
-
- rolldie die1 ; rolldie die2 ; rolldie die3
- echo Round $round. You rolled: $die1 $die2 $die3
-
- if [ $die1 -eq $die2 ] && [ $die2 -eq $die3 ] ; then
- if [ $die1 -eq $round ] ; then
- echo " BUNCO!"
- score=25
- hidescore=1
- else
- echo " Mini Bunco!"
- score=5
- hidescore=1
- fi
- else
- if [ $die1 -eq $round ] ; then
- score=1
- fi
- if [ $die2 -eq $round ] ; then
- score=$(( $score + 1 ))
- fi
- if [ $die3 -eq $round ] ; then
- score=$(( $score + 1 ))
- fi
- fi
-
- if [ $hidescore -eq 0 ] ; then
- echo " score this round: $score"
- fi
-
- totalscore=$(( $totalscore + $score ))
-}
-
-```
-
-我承认,我忍不住自己做了一点改进,包括判断当前是Bunco, Mini Bunco 还是其他需要计算分数的情况这一部分 (这就是$hidescore这一变量的作用).
-
-
-实现这个简直是小菜一碟,只要一个循环就好了:
-
-```
-
-for round in {1..6} ; do
- BuncoRound $round
-done
-
-```
-
-这就是现在所写的整个程序。让我们执行一下看看结果:
-
-```
-
-$ sh bunco.sh 1
-Round 1\. You rolled: 2 3 3
- score this round: 0
-Round 2\. You rolled: 2 6 6
- score this round: 1
-Round 3\. You rolled: 1 2 4
- score this round: 0
-Round 4\. You rolled: 2 1 4
- score this round: 1
-Round 5\. You rolled: 5 5 6
- score this round: 2
-Round 6\. You rolled: 2 1 3
- score this round: 0
-Game over. Your total score was 4
-
-```
-
-嗯。并不是很令人满意,可能是因为它只是游戏的一次完整执行。不过,你可以将脚本执行几百几千次,记下"Game over"出现的位置,然后用一些快速分析工具来看看你在每6轮中有几次得分超过3分。(要让3个骰子值相同,这个概率大概在50%左右)。
-
-无论怎么说,这都不是一个复杂的游戏,但是它是一个很有意思的小程序项目。现在,如果有一个20面的骰子,每一轮游戏有好几十轮,每轮都掷同一个骰子,情况又会发生什么变化呢?
-
-
-
---------------------------------------------------------------------------------
-
-via: http://www.linuxjournal.com/content/shell-scripting-bunco-game
-
-作者:[Dave Taylor][a]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:http://www.linuxjournal.com/users/dave-taylor